diff --git a/.gitignore b/.gitignore index 16f456f..7a0a874 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,8 @@ data/ lidar/ tiles/ -node_modules/ \ No newline at end of file +node_modules/ +standpunkt1/ +standpunkt2/ +standpunkt3/ +output/ \ No newline at end of file diff --git a/libs/CPotree/filter.exe b/libs/CPotree/filter.exe new file mode 100644 index 0000000..bacbfec Binary files /dev/null and b/libs/CPotree/filter.exe differ diff --git a/libs/MeshLine/LICENSE b/libs/MeshLine/LICENSE new file mode 100644 index 0000000..2913a08 --- /dev/null +++ b/libs/MeshLine/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Jaume Sanchez + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/libs/MeshLine/README.md b/libs/MeshLine/README.md new file mode 100644 index 0000000..f8cfeaf --- /dev/null +++ b/libs/MeshLine/README.md @@ -0,0 +1,137 @@ +# MeshLine +Mesh replacement for ```THREE.Line``` + +Instead of using GL_LINE, it uses a strip of triangles billboarded. Some examples: + +[![Demo](screenshots/demo.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html) +[![Graph](screenshots/graph.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html) +[![Spinner](screenshots/spinner.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html) +[![SVG](screenshots/svg.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html) +[![Shape](screenshots/shape.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html) +[![Shape](screenshots/birds.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html) + +* [Demo](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html): play with the different settings of materials +* [Graph](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html): example of using ```MeshLine``` to plot graphs +* [Spinner](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html): example of dynamic ```MeshLine``` with texture +* [SVG](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html): example of ```MeshLine``` rendering SVG Paths +* [Shape](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html): example of ```MeshLine``` created from a mesh +* [Birds](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html): example of ```MeshLine.advance()``` by @caramelcode (Jared Sprague) and @mwcz (Michael Clayton) + +### How to use #### + +* Include script +* Create and populate a geometry +* Create a MeshLine and assign the geometry +* Create a MeshLineMaterial +* Use MeshLine and MeshLineMaterial to create a THREE.Mesh + +#### Include the script + +Include script after THREE is included +```js + +``` +or use npm to install it +``` +npm i three.meshline +``` +and include it in your code (don't forget to require three.js) +```js +var THREE = require( 'three' ); +var MeshLine = require( 'three.meshline' ); +``` + +##### Create and populate a geometry ##### + +First, 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```. + +```js +var geometry = new THREE.Geometry(); +for( var j = 0; j < Math.PI; j += 2 * Math.PI / 100 ) { + var v = new THREE.Vector3( Math.cos( j ), Math.sin( j ), 0 ); + geometry.vertices.push( v ); +} +``` + +##### Create a MeshLine and assign the geometry ##### + +Once you have that, you can create a new ```MeshLine```, and call ```.setGeometry()``` passing the vertices. + +```js +var line = new MeshLine(); +line.setGeometry( geometry ); +``` + +Note: ```.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. + +```js +line.setGeometry( geometry, function( p ) { return 2; } ); // makes width 2 * lineWidth +line.setGeometry( geometry, function( p ) { return 1 - p; } ); // makes width taper +line.setGeometry( geometry, function( p ) { return 2 + Math.sin( 50 * p ); } ); // makes width sinusoidal +``` + +##### Create a MeshLineMaterial ##### + +A ```MeshLine``` needs a ```MeshLineMaterial```: + +```js +var material = new MeshLineMaterial(); +``` + +By default it's a white material of width 1 unit. + +```MeshLineMaterial``` has several attributes to control the appereance of the ```MeshLine```: + +* ```map``` - a ```THREE.Texture``` to paint along the line (requires ```useMap``` set to true) +* ```useMap``` - tells the material to use ```map``` (0 - solid color, 1 use texture) +* ```alphaMap``` - a ```THREE.Texture``` to use as alpha along the line (requires ```useAlphaMap``` set to true) +* ```useAlphaMap``` - tells the material to use ```alphaMap``` (0 - no alpha, 1 modulate alpha) +* ```repeat``` - THREE.Vector2 to define the texture tiling (applies to map and alphaMap - MIGHT CHANGE IN THE FUTURE) +* ```color``` - ```THREE.Color``` to paint the line width, or tint the texture with +* ```opacity``` - alpha value from 0 to 1 (requires ```transparent``` set to ```true```) +* ```alphaTest``` - cutoff value from 0 to 1 +* ```dashArray``` - THREE.Vector2 to define the dashing (NOT IMPLEMENTED YET) +* ```resolution``` - ```THREE.Vector2``` specifying the canvas size (REQUIRED) +* ```sizeAttenuation``` - makes the line width constant regardless distance (1 unit is 1px on screen) (0 - attenuate, 1 - don't attenuate) +* ```lineWidth``` - float defining width (if ```sizeAttenuation``` is true, it's world units; else is screen pixels) +* ```near``` - camera near clip plane distance (REQUIRED if ```sizeAttenuation``` set to false) +* ```far``` - camera far clip plane distance (REQUIRED if ```sizeAttenuation``` set to false) + +If 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```. + +##### Use MeshLine and MeshLineMaterial to create a THREE.Mesh ##### + +Finally, we create a mesh and add it to the scene: + +```js +var mesh = new THREE.Mesh( line.geometry, material ); // this syntax could definitely be improved! +scene.add( mesh ); +``` + +### TODO ### + +* Better miters +* Proper sizes +* Support for dashArray + +### Support ### + +Tested successfully on + +* Chrome OSX, Windows, Android +* Firefox OSX, Windows, Anroid +* Safari OSX, iOS +* Internet Explorer 11 (SVG and Shape demo won't work because they use Promises) +* Opera OSX, Windows + +### References ### + +* [Drawing lines is hard](http://mattdesl.svbtle.com/drawing-lines-is-hard) +* [WebGL rendering of solid trails](http://codeflow.org/entries/2012/aug/05/webgl-rendering-of-solid-trails/) +* [Drawing Antialiased Lines with OpenGL](https://www.mapbox.com/blog/drawing-antialiased-lines/) + +#### License #### + +MIT licensed + +Copyright (C) 2015-2016 Jaume Sanchez Elias, http://www.clicktorelease.com diff --git a/libs/MeshLine/src/THREE.MeshLine.js b/libs/MeshLine/src/THREE.MeshLine.js new file mode 100644 index 0000000..30cd068 --- /dev/null +++ b/libs/MeshLine/src/THREE.MeshLine.js @@ -0,0 +1,477 @@ +;(function() { + +"use strict"; + +var root = this + +var has_require = typeof require !== 'undefined' + +var THREE = root.THREE || has_require && require('three') +if( !THREE ) + throw new Error( 'MeshLine requires three.js' ) + +function MeshLine() { + + this.positions = []; + + this.previous = []; + this.next = []; + this.side = []; + this.width = []; + this.indices_array = []; + this.uvs = []; + this.counters = []; + this.geometry = new THREE.BufferGeometry(); + + this.widthCallback = null; + +} + +MeshLine.prototype.setGeometry = function( g, c ) { + + this.widthCallback = c; + + this.positions = []; + this.counters = []; + + if( g instanceof THREE.Geometry ) { + for( var j = 0; j < g.vertices.length; j++ ) { + var v = g.vertices[ j ]; + var c = j/g.vertices.length; + this.positions.push( v.x, v.y, v.z ); + this.positions.push( v.x, v.y, v.z ); + this.counters.push(c); + this.counters.push(c); + } + } + + if( g instanceof THREE.BufferGeometry ) { + // read attribute positions ? + } + + if( g instanceof Float32Array || g instanceof Array ) { + for( var j = 0; j < g.length; j += 3 ) { + var c = j/g.length; + this.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] ); + this.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] ); + this.counters.push(c); + this.counters.push(c); + } + } + + this.process(); + +} + +MeshLine.prototype.compareV3 = function( a, b ) { + + var aa = a * 6; + var ab = b * 6; + return ( this.positions[ aa ] === this.positions[ ab ] ) && ( this.positions[ aa + 1 ] === this.positions[ ab + 1 ] ) && ( this.positions[ aa + 2 ] === this.positions[ ab + 2 ] ); + +} + +MeshLine.prototype.copyV3 = function( a ) { + + var aa = a * 6; + return [ this.positions[ aa ], this.positions[ aa + 1 ], this.positions[ aa + 2 ] ]; + +} + +MeshLine.prototype.process = function() { + + var l = this.positions.length / 6; + + this.previous = []; + this.next = []; + this.side = []; + this.width = []; + this.indices_array = []; + this.uvs = []; + + for( var j = 0; j < l; j++ ) { + this.side.push( 1 ); + this.side.push( -1 ); + } + + var w; + for( var j = 0; j < l; j++ ) { + if( this.widthCallback ) w = this.widthCallback( j / ( l -1 ) ); + else w = 1; + this.width.push( w ); + this.width.push( w ); + } + + for( var j = 0; j < l; j++ ) { + this.uvs.push( j / ( l - 1 ), 0 ); + this.uvs.push( j / ( l - 1 ), 1 ); + } + + var v; + + if( this.compareV3( 0, l - 1 ) ){ + v = this.copyV3( l - 2 ); + } else { + v = this.copyV3( 0 ); + } + this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + for( var j = 0; j < l - 1; j++ ) { + v = this.copyV3( j ); + this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + } + + for( var j = 1; j < l; j++ ) { + v = this.copyV3( j ); + this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + } + + if( this.compareV3( l - 1, 0 ) ){ + v = this.copyV3( 1 ); + } else { + v = this.copyV3( l - 1 ); + } + this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); + + for( var j = 0; j < l - 1; j++ ) { + var n = j * 2; + this.indices_array.push( n, n + 1, n + 2 ); + this.indices_array.push( n + 2, n + 1, n + 3 ); + } + + if (!this.attributes) { + this.attributes = { + position: new THREE.BufferAttribute( new Float32Array( this.positions ), 3 ), + previous: new THREE.BufferAttribute( new Float32Array( this.previous ), 3 ), + next: new THREE.BufferAttribute( new Float32Array( this.next ), 3 ), + side: new THREE.BufferAttribute( new Float32Array( this.side ), 1 ), + width: new THREE.BufferAttribute( new Float32Array( this.width ), 1 ), + uv: new THREE.BufferAttribute( new Float32Array( this.uvs ), 2 ), + index: new THREE.BufferAttribute( new Uint16Array( this.indices_array ), 1 ), + counters: new THREE.BufferAttribute( new Float32Array( this.counters ), 1 ) + } + } else { + this.attributes.position.copyArray(new Float32Array(this.positions)); + this.attributes.position.needsUpdate = true; + this.attributes.previous.copyArray(new Float32Array(this.previous)); + this.attributes.previous.needsUpdate = true; + this.attributes.next.copyArray(new Float32Array(this.next)); + this.attributes.next.needsUpdate = true; + this.attributes.side.copyArray(new Float32Array(this.side)); + this.attributes.side.needsUpdate = true; + this.attributes.width.copyArray(new Float32Array(this.width)); + this.attributes.width.needsUpdate = true; + this.attributes.uv.copyArray(new Float32Array(this.uvs)); + this.attributes.uv.needsUpdate = true; + this.attributes.index.copyArray(new Uint16Array(this.indices_array)); + this.attributes.index.needsUpdate = true; + } + + this.geometry.addAttribute( 'position', this.attributes.position ); + this.geometry.addAttribute( 'previous', this.attributes.previous ); + this.geometry.addAttribute( 'next', this.attributes.next ); + this.geometry.addAttribute( 'side', this.attributes.side ); + this.geometry.addAttribute( 'width', this.attributes.width ); + this.geometry.addAttribute( 'uv', this.attributes.uv ); + this.geometry.addAttribute( 'counters', this.attributes.counters ); + + this.geometry.setIndex( this.attributes.index ); + +} + +function memcpy (src, srcOffset, dst, dstOffset, length) { + var i + + src = src.subarray || src.slice ? src : src.buffer + dst = dst.subarray || dst.slice ? dst : dst.buffer + + src = srcOffset ? src.subarray ? + src.subarray(srcOffset, length && srcOffset + length) : + src.slice(srcOffset, length && srcOffset + length) : src + + if (dst.set) { + dst.set(src, dstOffset) + } else { + for (i=0; i -o ``` + * Optionally specify the sampling strategy: + * Poisson-disk sampling (default): ```PotreeConverter.exe -o -m poisson``` + * Random sampling: ```PotreeConverter.exe -o -m random``` + +In Potree, modify one of the examples with following load command: + +```javascript +let url = "../pointclouds/D/temp/test/metadata.json"; +Potree.loadPointCloud(url).then(e => { + let pointcloud = e.pointcloud; + let material = pointcloud.material; + + material.activeAttributeName = "rgba"; + material.minSize = 2; + material.pointSizeType = Potree.PointSizeType.ADAPTIVE; + + viewer.scene.addPointCloud(pointcloud); + viewer.fitToScreen(); +}); + +``` + +# Alternatives + +PotreeConverter 2.0 produces a very different format than previous iterations. If you find issues, you can still try previous converters or alternatives: + + + + + + + + + + + + + + + + + + + + + + + + + + +
PotreeConverter 2.0PotreeConverter 1.7Entwine
license + free, BSD 2-clause + + free, BSD 2-clause + + free, LGPL +
#generated files + 3 files total + + 1 per node + + 1 per node +
compression + none (TODO) + + LAZ (optional) + + LAZ +
+ +Performance comparison (Ryzen 2700, NVMe SSD): + +![](./docs/images/performance_chart.png) + +# License + +PotreeConverter is available under the [BSD 2-clause license](./LICENSE). \ No newline at end of file diff --git a/libs/PotreeConverter2/laszip.dll b/libs/PotreeConverter2/laszip.dll new file mode 100644 index 0000000..06429d2 Binary files /dev/null and b/libs/PotreeConverter2/laszip.dll differ diff --git a/libs/PotreeConverter2/licenses/license_brotli.txt b/libs/PotreeConverter2/licenses/license_brotli.txt new file mode 100644 index 0000000..33b7cdd --- /dev/null +++ b/libs/PotreeConverter2/licenses/license_brotli.txt @@ -0,0 +1,19 @@ +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/libs/PotreeConverter2/licenses/license_json.txt b/libs/PotreeConverter2/licenses/license_json.txt new file mode 100644 index 0000000..7ae6554 --- /dev/null +++ b/libs/PotreeConverter2/licenses/license_json.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-2020 Niels Lohmann + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/libs/PotreeConverter2/licenses/license_laszip.txt b/libs/PotreeConverter2/licenses/license_laszip.txt new file mode 100644 index 0000000..0c226ad --- /dev/null +++ b/libs/PotreeConverter2/licenses/license_laszip.txt @@ -0,0 +1,511 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/libs/PotreeConverter2/licenses/license_potree_converter.txt b/libs/PotreeConverter2/licenses/license_potree_converter.txt new file mode 100644 index 0000000..2eca6d6 --- /dev/null +++ b/libs/PotreeConverter2/licenses/license_potree_converter.txt @@ -0,0 +1,10 @@ + +Copyright 2020 Markus Schütz + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. 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. + +THIS 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. \ No newline at end of file diff --git a/libs/ZoomableSlider/ZoomableSlider.css b/libs/ZoomableSlider/ZoomableSlider.css new file mode 100644 index 0000000..c0c7d89 --- /dev/null +++ b/libs/ZoomableSlider/ZoomableSlider.css @@ -0,0 +1,48 @@ + +.zs_widget{ + padding: 2px; + height: 30px; + border: 1px solid green; + user-select: none; +} +.zs_core{ + overflow: hidden; + position: relative; + height: 100%; +} +.zs_handle{ + position: absolute; + top: 0px; + bottom: 0px; + border: 1px solid green; + background-color: green; + width: 8px; + user-select: none; +} +.zs_handle:hover{ + background-color: lightgreen; +} +.zs_inside{ + position: absolute; +} +.zs_outside{ + position: absolute !important; + width: 100%; + height: 2px; + background-color: black; + top: 50%; +} +.zs_visible_range_label{ + position: absolute; + bottom: 0px; +} +.zs_visible_range_label_left{ + left: 0px; +} +.zs_visible_range_label_right{ + right: 0px; +} +.zs_chosen_range_label{ + position: absolute; +} + diff --git a/libs/ZoomableSlider/ZoomableSlider.html b/libs/ZoomableSlider/ZoomableSlider.html new file mode 100644 index 0000000..fe0b33d --- /dev/null +++ b/libs/ZoomableSlider/ZoomableSlider.html @@ -0,0 +1,31 @@ + + + + + + + Document + + + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/libs/ZoomableSlider/ZoomableSlider.js b/libs/ZoomableSlider/ZoomableSlider.js new file mode 100644 index 0000000..f62cb64 --- /dev/null +++ b/libs/ZoomableSlider/ZoomableSlider.js @@ -0,0 +1,133 @@ + +class ZoomableSlider{ + constructor(){ + this.visibleRange = [0, 10]; + this.chosenRange = [2, 7]; + this.step = 0.01; + this.clipDragToVisible = true; + this.element = document.createElement("div"); + this.element.innerHTML = ` +
+
+   +   +   +   + + + + +
+
+ `; + this.elCore = this.element.querySelector('[name=core]'); + this.elLeft = this.element.querySelector('[name=left]'); + this.elRight = this.element.querySelector('[name=right]'); + this.elInside = this.element.querySelector('[name=inside]'); + this.elOutside = this.element.querySelector('[name=outside]'); + this.elLabelVisibleLeft = this.element.querySelector('[name=label_visible_left]'); + this.elLabelVisibleRight = this.element.querySelector('[name=label_visible_right]'); + this.elLabelChosenLeft = this.element.querySelector('[name=label_chosen_left]'); + this.elLabelChosenRight = this.element.querySelector('[name=label_chosen_right]'); + this.elRight.style.left = "100px"; + let dragStart = null; + let onMouseDown = (e) => { + e.preventDefault(); + let value = (e.target === this.elLeft) ? + this.chosenRange[0] : + this.chosenRange[1]; + dragStart = { + x: e.clientX, + y: e.clientY, + handle: e.target, + value: value, + }; + document.onmouseup = onMouseUp; + document.onmousemove = onMouseMove; + }; + let onMouseUp = (e) => { + document.onmouseup = null; + document.onmousemove = null; + }; + let onMouseMove = (e) => { + let dx = e.clientX - dragStart.x; + let dy = e.clientY - dragStart.y; + let normalizedDelta = dx / this.elCore.clientWidth; + let valueDelta = (this.visibleRange[1] - this.visibleRange[0]) * normalizedDelta; + let newValue = dragStart.value + valueDelta; + newValue = Math.round(newValue / this.step) * this.step; + + let newRange; + if(dragStart.handle === this.elLeft){ + newRange = [newValue, this.chosenRange[1]]; + }else{ + newRange = [this.chosenRange[0], newValue]; + } + if(this.clipDragToVisible){ + newRange[0] = Math.max(newRange[0], this.visibleRange[0]); + newRange[1] = Math.min(newRange[1], this.visibleRange[1]); + } + this.setRange(newRange); + }; + for(let handle of [this.elLeft, this.elRight]){ + handle.onmousedown = onMouseDown; + } + let onWheel = (e) => { + e.preventDefault(); + + let delta = Math.sign(e.deltaY); + + let zoom = 1; + if(delta < 0){ + zoom = 0.8; + }else if(delta > 0){ + zoom = 1.2; + } + let oldRangeWidth = this.visibleRange[1] - this.visibleRange[0]; + let rect = this.elCore.getBoundingClientRect(); + let pivotPixels = e.clientX - rect.left; + let pivotNormalized = (pivotPixels / this.elCore.clientWidth); + let pivot = (oldRangeWidth * pivotNormalized) + this.visibleRange[0]; + let leftRatio = (pivot - this.visibleRange[0]) / oldRangeWidth; + let rightRatio = (this.visibleRange[1] - pivot) / oldRangeWidth; + let newRangeWidth = oldRangeWidth * zoom; + let newVisibleRange = [ + pivot - (newRangeWidth * leftRatio), + pivot + (newRangeWidth * rightRatio), + ]; + this.setVisibleRange(newVisibleRange); + }; + this.elCore.onmousewheel = onWheel; + this.update(); + } + setRange(range){ + this.chosenRange = range; + this.update(); + } + setVisibleRange(range){ + this.visibleRange = range; + this.update(); + } + update(){ + let {elLeft, elRight, visibleRange, chosenRange} = this; + let pixelWidth = this.elCore.clientWidth; + let normalizedLeft = (chosenRange[0] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]); + let normalizedRight = (chosenRange[1] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]); + let pixelLeft = Math.round(normalizedLeft * pixelWidth) - elLeft.clientWidth; + let pixelRight = Math.round(normalizedRight * pixelWidth) - elRight.clientWidth; + + elLeft.style.left = `${pixelLeft}px`; + elRight.style.left = `${pixelRight}px`; + let precision = Math.ceil(Math.log(1 / this.step) / Math.log(10)); + this.elLabelVisibleLeft.style.left = "0px"; + this.elLabelVisibleLeft.innerHTML = `${visibleRange[0].toFixed(precision)}`; + this.elLabelVisibleRight.style.right = "0px"; + this.elLabelVisibleRight.innerHTML = `${visibleRange[1].toFixed(precision)}`; + this.elLabelChosenLeft.style.left = `${pixelLeft}px`; + this.elLabelChosenLeft.innerHTML = `${chosenRange[0].toFixed(precision)}`; + this.elLabelChosenRight.style.left = `${pixelRight}px`; + this.elLabelChosenRight.innerHTML = `${chosenRange[1].toFixed(precision)}`; + } + +}; + \ No newline at end of file diff --git a/libs/brotli/BUILD b/libs/brotli/BUILD new file mode 100644 index 0000000..49c1728 --- /dev/null +++ b/libs/brotli/BUILD @@ -0,0 +1,43 @@ +package( + default_visibility = ["//visibility:public"], +) + +licenses(["notice"]) # MIT + +load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_library") + +# Not a real polyfill. Do NOT use for anything, but tests. +closure_js_library( + name = "polyfill", + srcs = ["polyfill.js"], + suppress = [ + "JSC_INVALID_OPERAND_TYPE", + "JSC_MISSING_JSDOC", + "JSC_STRICT_INEXISTENT_PROPERTY", + "JSC_TYPE_MISMATCH", + "JSC_UNKNOWN_EXPR_TYPE", + ], +) + +# Do NOT use this artifact; it is for test purposes only. +closure_js_library( + name = "decode", + srcs = ["decode.js"], + suppress = [ + "JSC_DUP_VAR_DECLARATION", + "JSC_USELESS_BLOCK", + ], + deps = [":polyfill"], +) + +load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_test") + +closure_js_test( + name = "all_tests", + srcs = ["decode_test.js"], + deps = [ + ":decode", + ":polyfill", + "@io_bazel_rules_closure//closure/library:testing", + ], +) diff --git a/libs/brotli/LICENSE b/libs/brotli/LICENSE new file mode 100644 index 0000000..33b7cdd --- /dev/null +++ b/libs/brotli/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/libs/brotli/WORKSPACE b/libs/brotli/WORKSPACE new file mode 100644 index 0000000..f15740a --- /dev/null +++ b/libs/brotli/WORKSPACE @@ -0,0 +1,12 @@ +workspace(name = "org_brotli_js") + +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") + +git_repository( + name = "io_bazel_rules_closure", + commit = "29ec97e7c85d607ba9e41cab3993fbb13f812c4b", + remote = "https://github.com/bazelbuild/rules_closure.git", +) + +load("@io_bazel_rules_closure//closure:defs.bzl", "closure_repositories") +closure_repositories() diff --git a/libs/brotli/decode.js b/libs/brotli/decode.js new file mode 100644 index 0000000..cbb2b55 --- /dev/null +++ b/libs/brotli/decode.js @@ -0,0 +1,2031 @@ +/* Copyright 2017 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** @return {function(!Int8Array):!Int8Array} */ +function BrotliDecodeClosure() { + "use strict"; + + /** @type {!Int8Array} */ + var DICTIONARY_DATA = new Int8Array(0); + + /** + * @constructor + * @param {!Int8Array} bytes + * @struct + */ + function InputStream(bytes) { + /** @type {!Int8Array} */ + this.data = bytes; + /** @type {!number} */ + this.offset = 0; + } + 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]); + 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]); + var DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); + var DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); + var FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); + 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]); + 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]); + 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]); + 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]); + 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]); + 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]); + var CMD_LOOKUP = new Int16Array(2816); + { + unpackCommandLookupTable(CMD_LOOKUP); + } + /** + * @param {number} i + * @return {number} + */ + function log2floor(i) { + var /** number */ result = -1; + var /** number */ step = 16; + while (step > 0) { + if ((i >>> step) != 0) { + result += step; + i = i >>> step; + } + step = step >> 1; + } + return result + i; + } + /** + * @param {number} npostfix + * @param {number} ndirect + * @param {number} maxndistbits + * @return {number} + */ + function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { + return 16 + ndirect + 2 * (maxndistbits << npostfix); + } + /** + * @param {number} maxDistance + * @param {number} npostfix + * @param {number} ndirect + * @return {number} + */ + function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { + if (maxDistance < ndirect + (2 << npostfix)) { + throw "maxDistance is too small"; + } + var /** number */ offset = ((maxDistance - ndirect) >> npostfix) + 4; + var /** number */ ndistbits = log2floor(offset) - 1; + var /** number */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); + return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; + } + /** + * @param {!Int16Array} cmdLookup + * @return {void} + */ + function unpackCommandLookupTable(cmdLookup) { + var /** !Int16Array */ insertLengthOffsets = new Int16Array(24); + var /** !Int16Array */ copyLengthOffsets = new Int16Array(24); + copyLengthOffsets[0] = 2; + for (var /** number */ i = 0; i < 23; ++i) { + insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); + copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); + } + for (var /** number */ cmdCode = 0; cmdCode < 704; ++cmdCode) { + var /** number */ rangeIdx = cmdCode >>> 6; + var /** number */ distanceContextOffset = -4; + if (rangeIdx >= 2) { + rangeIdx -= 2; + distanceContextOffset = 0; + } + var /** number */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); + var /** number */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); + var /** number */ copyLengthOffset = copyLengthOffsets[copyCode]; + var /** number */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); + var /** number */ index = cmdCode * 4; + cmdLookup[index + 0] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); + cmdLookup[index + 1] = insertLengthOffsets[insertCode]; + cmdLookup[index + 2] = copyLengthOffsets[copyCode]; + cmdLookup[index + 3] = distanceContext; + } + } + /** + * @param {!State} s + * @return {number} + */ + function decodeWindowBits(s) { + var /** number */ largeWindowEnabled = s.isLargeWindow; + s.isLargeWindow = 0; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + if (readFewBits(s, 1) == 0) { + return 16; + } + var /** number */ n = readFewBits(s, 3); + if (n != 0) { + return 17 + n; + } + n = readFewBits(s, 3); + if (n != 0) { + if (n == 1) { + if (largeWindowEnabled == 0) { + return -1; + } + s.isLargeWindow = 1; + if (readFewBits(s, 1) == 1) { + return -1; + } + n = readFewBits(s, 6); + if (n < 10 || n > 30) { + return -1; + } + return n; + } else { + return 8 + n; + } + } + return 17; + } + /** + * @param {!State} s + * @return {void} + */ + function enableEagerOutput(s) { + if (s.runningState != 1) { + throw "State MUST be freshly initialized"; + } + s.isEager = 1; + } + /** + * @param {!State} s + * @return {void} + */ + function enableLargeWindow(s) { + if (s.runningState != 1) { + throw "State MUST be freshly initialized"; + } + s.isLargeWindow = 1; + } + /** + * @param {!State} s + * @param {!InputStream} input + * @return {void} + */ + function initState(s, input) { + if (s.runningState != 0) { + throw "State MUST be uninitialized"; + } + s.blockTrees = new Int32Array(3091); + s.blockTrees[0] = 7; + s.distRbIdx = 3; + var /** number */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 15 << 3); + s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); + s.distOffset = new Int32Array(maxDistanceAlphabetLimit); + s.input = input; + initBitReader(s); + s.runningState = 1; + } + /** + * @param {!State} s + * @return {void} + */ + function close(s) { + if (s.runningState == 0) { + throw "State MUST be initialized"; + } + if (s.runningState == 11) { + return; + } + s.runningState = 11; + if (s.input != null) { + closeInput(s.input); + s.input = null; + } + } + /** + * @param {!State} s + * @return {number} + */ + function decodeVarLenUnsignedByte(s) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + if (readFewBits(s, 1) != 0) { + var /** number */ n = readFewBits(s, 3); + if (n == 0) { + return 1; + } else { + return readFewBits(s, n) + (1 << n); + } + } + return 0; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeMetaBlockLength(s) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + s.inputEnd = readFewBits(s, 1); + s.metaBlockLength = 0; + s.isUncompressed = 0; + s.isMetadata = 0; + if ((s.inputEnd != 0) && readFewBits(s, 1) != 0) { + return; + } + var /** number */ sizeNibbles = readFewBits(s, 2) + 4; + if (sizeNibbles == 7) { + s.isMetadata = 1; + if (readFewBits(s, 1) != 0) { + throw "Corrupted reserved bit"; + } + var /** number */ sizeBytes = readFewBits(s, 2); + if (sizeBytes == 0) { + return; + } + for (var /** number */ i = 0; i < sizeBytes; i++) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ bits = readFewBits(s, 8); + if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) { + throw "Exuberant nibble"; + } + s.metaBlockLength |= bits << (i * 8); + } + } else { + for (var /** number */ i = 0; i < sizeNibbles; i++) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ bits = readFewBits(s, 4); + if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) { + throw "Exuberant nibble"; + } + s.metaBlockLength |= bits << (i * 4); + } + } + s.metaBlockLength++; + if (s.inputEnd == 0) { + s.isUncompressed = readFewBits(s, 1); + } + } + /** + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readSymbol(tableGroup, tableIdx, s) { + var /** number */ offset = tableGroup[tableIdx]; + var /** number */ val = (s.accumulator32 >>> s.bitOffset); + offset += val & 0xFF; + var /** number */ bits = tableGroup[offset] >> 16; + var /** number */ sym = tableGroup[offset] & 0xFFFF; + if (bits <= 8) { + s.bitOffset += bits; + return sym; + } + offset += sym; + var /** number */ mask = (1 << bits) - 1; + offset += (val & mask) >>> 8; + s.bitOffset += ((tableGroup[offset] >> 16) + 8); + return tableGroup[offset] & 0xFFFF; + } + /** + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readBlockLength(tableGroup, tableIdx, s) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ code = readSymbol(tableGroup, tableIdx, s); + var /** number */ n = BLOCK_LENGTH_N_BITS[code]; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); + } + /** + * @param {!Int32Array} v + * @param {number} index + * @return {void} + */ + function moveToFront(v, index) { + var /** number */ value = v[index]; + for (; index > 0; index--) { + v[index] = v[index - 1]; + } + v[0] = value; + } + /** + * @param {!Int8Array} v + * @param {number} vLen + * @return {void} + */ + function inverseMoveToFrontTransform(v, vLen) { + var /** !Int32Array */ mtf = new Int32Array(256); + for (var /** number */ i = 0; i < 256; i++) { + mtf[i] = i; + } + for (var /** number */ i = 0; i < vLen; i++) { + var /** number */ index = v[i] & 0xFF; + v[i] = mtf[index]; + if (index != 0) { + moveToFront(mtf, index); + } + } + } + /** + * @param {!Int32Array} codeLengthCodeLengths + * @param {number} numSymbols + * @param {!Int32Array} codeLengths + * @param {!State} s + * @return {void} + */ + function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { + var /** number */ symbol = 0; + var /** number */ prevCodeLen = 8; + var /** number */ repeat = 0; + var /** number */ repeatCodeLen = 0; + var /** number */ space = 32768; + var /** !Int32Array */ table = new Int32Array(32 + 1); + var /** number */ tableIdx = table.length - 1; + buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); + while (symbol < numSymbols && space > 0) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 31; + s.bitOffset += table[p] >> 16; + var /** number */ codeLen = table[p] & 0xFFFF; + if (codeLen < 16) { + repeat = 0; + codeLengths[symbol++] = codeLen; + if (codeLen != 0) { + prevCodeLen = codeLen; + space -= 32768 >> codeLen; + } + } else { + var /** number */ extraBits = codeLen - 14; + var /** number */ newLen = 0; + if (codeLen == 16) { + newLen = prevCodeLen; + } + if (repeatCodeLen != newLen) { + repeat = 0; + repeatCodeLen = newLen; + } + var /** number */ oldRepeat = repeat; + if (repeat > 0) { + repeat -= 2; + repeat <<= extraBits; + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + repeat += readFewBits(s, extraBits) + 3; + var /** number */ repeatDelta = repeat - oldRepeat; + if (symbol + repeatDelta > numSymbols) { + throw "symbol + repeatDelta > numSymbols"; + } + for (var /** number */ i = 0; i < repeatDelta; i++) { + codeLengths[symbol++] = repeatCodeLen; + } + if (repeatCodeLen != 0) { + space -= repeatDelta << (15 - repeatCodeLen); + } + } + } + if (space != 0) { + throw "Unused space"; + } + codeLengths.fill(0, symbol, numSymbols); + } + /** + * @param {!Int32Array} symbols + * @param {number} length + * @return {void} + */ + function checkDupes(symbols, length) { + for (var /** number */ i = 0; i < length - 1; ++i) { + for (var /** number */ j = i + 1; j < length; ++j) { + if (symbols[i] == symbols[j]) { + throw "Duplicate simple Huffman code symbol"; + } + } + } + } + /** + * @param {number} alphabetSizeMax + * @param {number} alphabetSizeLimit + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { + var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); + var /** !Int32Array */ symbols = new Int32Array(4); + var /** number */ maxBits = 1 + log2floor(alphabetSizeMax - 1); + var /** number */ numSymbols = readFewBits(s, 2) + 1; + for (var /** number */ i = 0; i < numSymbols; i++) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ symbol = readFewBits(s, maxBits); + if (symbol >= alphabetSizeLimit) { + throw "Can't readHuffmanCode"; + } + symbols[i] = symbol; + } + checkDupes(symbols, numSymbols); + var /** number */ histogramId = numSymbols; + if (numSymbols == 4) { + histogramId += readFewBits(s, 1); + } + switch(histogramId) { + case 1: + codeLengths[symbols[0]] = 1; + break; + case 2: + codeLengths[symbols[0]] = 1; + codeLengths[symbols[1]] = 1; + break; + case 3: + codeLengths[symbols[0]] = 1; + codeLengths[symbols[1]] = 2; + codeLengths[symbols[2]] = 2; + break; + case 4: + codeLengths[symbols[0]] = 2; + codeLengths[symbols[1]] = 2; + codeLengths[symbols[2]] = 2; + codeLengths[symbols[3]] = 2; + break; + case 5: + codeLengths[symbols[0]] = 1; + codeLengths[symbols[1]] = 2; + codeLengths[symbols[2]] = 3; + codeLengths[symbols[3]] = 3; + break; + default: + break; + } + return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); + } + /** + * @param {number} alphabetSizeLimit + * @param {number} skip + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { + var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); + var /** !Int32Array */ codeLengthCodeLengths = new Int32Array(18); + var /** number */ space = 32; + var /** number */ numCodes = 0; + for (var /** number */ i = skip; i < 18 && space > 0; i++) { + var /** number */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 15; + s.bitOffset += FIXED_TABLE[p] >> 16; + var /** number */ v = FIXED_TABLE[p] & 0xFFFF; + codeLengthCodeLengths[codeLenIdx] = v; + if (v != 0) { + space -= (32 >> v); + numCodes++; + } + } + if (space != 0 && numCodes != 1) { + throw "Corrupted Huffman code histogram"; + } + readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); + return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); + } + /** + * @param {number} alphabetSizeMax + * @param {number} alphabetSizeLimit + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ simpleCodeOrSkip = readFewBits(s, 2); + if (simpleCodeOrSkip == 1) { + return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); + } else { + return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); + } + } + /** + * @param {number} contextMapSize + * @param {!Int8Array} contextMap + * @param {!State} s + * @return {number} + */ + function decodeContextMap(contextMapSize, contextMap, s) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + var /** number */ numTrees = decodeVarLenUnsignedByte(s) + 1; + if (numTrees == 1) { + contextMap.fill(0, 0, contextMapSize); + return numTrees; + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ useRleForZeros = readFewBits(s, 1); + var /** number */ maxRunLengthPrefix = 0; + if (useRleForZeros != 0) { + maxRunLengthPrefix = readFewBits(s, 4) + 1; + } + var /** number */ alphabetSize = numTrees + maxRunLengthPrefix; + var /** number */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; + var /** !Int32Array */ table = new Int32Array(tableSize + 1); + var /** number */ tableIdx = table.length - 1; + readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); + for (var /** number */ i = 0; i < contextMapSize; ) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ code = readSymbol(table, tableIdx, s); + if (code == 0) { + contextMap[i] = 0; + i++; + } else if (code <= maxRunLengthPrefix) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ reps = (1 << code) + readFewBits(s, code); + while (reps != 0) { + if (i >= contextMapSize) { + throw "Corrupted context map"; + } + contextMap[i] = 0; + i++; + reps--; + } + } else { + contextMap[i] = (code - maxRunLengthPrefix); + i++; + } + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + if (readFewBits(s, 1) == 1) { + inverseMoveToFrontTransform(contextMap, contextMapSize); + } + return numTrees; + } + /** + * @param {!State} s + * @param {number} treeType + * @param {number} numBlockTypes + * @return {number} + */ + function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { + var /** !Int32Array */ ringBuffers = s.rings; + var /** number */ offset = 4 + treeType * 2; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); + var /** number */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); + if (blockType == 1) { + blockType = ringBuffers[offset + 1] + 1; + } else if (blockType == 0) { + blockType = ringBuffers[offset]; + } else { + blockType -= 2; + } + if (blockType >= numBlockTypes) { + blockType -= numBlockTypes; + } + ringBuffers[offset] = ringBuffers[offset + 1]; + ringBuffers[offset + 1] = blockType; + return result; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeLiteralBlockSwitch(s) { + s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); + var /** number */ literalBlockType = s.rings[5]; + s.contextMapSlice = literalBlockType << 6; + s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; + var /** number */ contextMode = s.contextModes[literalBlockType]; + s.contextLookupOffset1 = contextMode << 9; + s.contextLookupOffset2 = s.contextLookupOffset1 + 256; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeCommandBlockSwitch(s) { + s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); + s.commandTreeIdx = s.rings[7]; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeDistanceBlockSwitch(s) { + s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); + s.distContextMapSlice = s.rings[9] << 2; + } + /** + * @param {!State} s + * @return {void} + */ + function maybeReallocateRingBuffer(s) { + var /** number */ newSize = s.maxRingBufferSize; + if (newSize > s.expectedTotalSize) { + var /** number */ minimalNewSize = s.expectedTotalSize; + while ((newSize >> 1) > minimalNewSize) { + newSize >>= 1; + } + if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { + newSize = 16384; + } + } + if (newSize <= s.ringBufferSize) { + return; + } + var /** number */ ringBufferSizeWithSlack = newSize + 37; + var /** !Int8Array */ newBuffer = new Int8Array(ringBufferSizeWithSlack); + if (s.ringBuffer.length != 0) { + newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0); + } + s.ringBuffer = newBuffer; + s.ringBufferSize = newSize; + } + /** + * @param {!State} s + * @return {void} + */ + function readNextMetablockHeader(s) { + if (s.inputEnd != 0) { + s.nextRunningState = 10; + s.runningState = 12; + return; + } + s.literalTreeGroup = new Int32Array(0); + s.commandTreeGroup = new Int32Array(0); + s.distanceTreeGroup = new Int32Array(0); + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + decodeMetaBlockLength(s); + if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) { + return; + } + if ((s.isUncompressed != 0) || (s.isMetadata != 0)) { + jumpToByteBoundary(s); + s.runningState = (s.isMetadata != 0) ? 5 : 6; + } else { + s.runningState = 3; + } + if (s.isMetadata != 0) { + return; + } + s.expectedTotalSize += s.metaBlockLength; + if (s.expectedTotalSize > 1 << 30) { + s.expectedTotalSize = 1 << 30; + } + if (s.ringBufferSize < s.maxRingBufferSize) { + maybeReallocateRingBuffer(s); + } + } + /** + * @param {!State} s + * @param {number} treeType + * @param {number} numBlockTypes + * @return {number} + */ + function readMetablockPartition(s, treeType, numBlockTypes) { + var /** number */ offset = s.blockTrees[2 * treeType]; + if (numBlockTypes <= 1) { + s.blockTrees[2 * treeType + 1] = offset; + s.blockTrees[2 * treeType + 2] = offset; + return 1 << 28; + } + var /** number */ blockTypeAlphabetSize = numBlockTypes + 2; + offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); + s.blockTrees[2 * treeType + 1] = offset; + var /** number */ blockLengthAlphabetSize = 26; + offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); + s.blockTrees[2 * treeType + 2] = offset; + return readBlockLength(s.blockTrees, 2 * treeType + 1, s); + } + /** + * @param {!State} s + * @param {number} alphabetSizeLimit + * @return {void} + */ + function calculateDistanceLut(s, alphabetSizeLimit) { + var /** !Int8Array */ distExtraBits = s.distExtraBits; + var /** !Int32Array */ distOffset = s.distOffset; + var /** number */ npostfix = s.distancePostfixBits; + var /** number */ ndirect = s.numDirectDistanceCodes; + var /** number */ postfix = 1 << npostfix; + var /** number */ bits = 1; + var /** number */ half = 0; + var /** number */ i = 16; + for (var /** number */ j = 0; j < ndirect; ++j) { + distExtraBits[i] = 0; + distOffset[i] = j + 1; + ++i; + } + while (i < alphabetSizeLimit) { + var /** number */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; + for (var /** number */ j = 0; j < postfix; ++j) { + distExtraBits[i] = bits; + distOffset[i] = base + j; + ++i; + } + bits = bits + half; + half = half ^ 1; + } + } + /** + * @param {!State} s + * @return {void} + */ + function readMetablockHuffmanCodesAndContextMaps(s) { + s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; + s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); + s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; + s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); + s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; + s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + s.distancePostfixBits = readFewBits(s, 2); + s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; + s.distancePostfixMask = (1 << s.distancePostfixBits) - 1; + s.contextModes = new Int8Array(s.numLiteralBlockTypes); + for (var /** number */ i = 0; i < s.numLiteralBlockTypes; ) { + var /** number */ limit = min(i + 96, s.numLiteralBlockTypes); + for (; i < limit; ++i) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + s.contextModes[i] = readFewBits(s, 2); + } + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + } + s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); + var /** number */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); + s.trivialLiteralContext = 1; + for (var /** number */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { + if (s.contextMap[j] != j >> 6) { + s.trivialLiteralContext = 0; + break; + } + } + s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); + var /** number */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); + s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); + s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); + var /** number */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); + var /** number */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; + if (s.isLargeWindow == 1) { + distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); + distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); + } + s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); + calculateDistanceLut(s, distanceAlphabetSizeLimit); + s.contextMapSlice = 0; + s.distContextMapSlice = 0; + s.contextLookupOffset1 = s.contextModes[0] * 512; + s.contextLookupOffset2 = s.contextLookupOffset1 + 256; + s.literalTreeIdx = 0; + s.commandTreeIdx = 0; + s.rings[4] = 1; + s.rings[5] = 0; + s.rings[6] = 1; + s.rings[7] = 0; + s.rings[8] = 1; + s.rings[9] = 0; + } + /** + * @param {!State} s + * @return {void} + */ + function copyUncompressedData(s) { + var /** !Int8Array */ ringBuffer = s.ringBuffer; + if (s.metaBlockLength <= 0) { + reload(s); + s.runningState = 2; + return; + } + var /** number */ chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength); + copyBytes(s, ringBuffer, s.pos, chunkLength); + s.metaBlockLength -= chunkLength; + s.pos += chunkLength; + if (s.pos == s.ringBufferSize) { + s.nextRunningState = 6; + s.runningState = 12; + return; + } + reload(s); + s.runningState = 2; + } + /** + * @param {!State} s + * @return {number} + */ + function writeRingBuffer(s) { + var /** number */ toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); + if (toWrite != 0) { + s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); + s.outputUsed += toWrite; + s.ringBufferBytesWritten += toWrite; + } + if (s.outputUsed < s.outputLength) { + return 1; + } else { + return 0; + } + } + /** + * @param {number} alphabetSizeMax + * @param {number} alphabetSizeLimit + * @param {number} n + * @param {!State} s + * @return {!Int32Array} + */ + function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { + var /** number */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; + var /** !Int32Array */ group = new Int32Array(n + n * maxTableSize); + var /** number */ next = n; + for (var /** number */ i = 0; i < n; ++i) { + group[i] = next; + next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); + } + return group; + } + /** + * @param {!State} s + * @return {number} + */ + function calculateFence(s) { + var /** number */ result = s.ringBufferSize; + if (s.isEager != 0) { + result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); + } + return result; + } + /** + * @param {!State} s + * @return {void} + */ + function decompress(s) { + if (s.runningState == 0) { + throw "Can't decompress until initialized"; + } + if (s.runningState == 11) { + throw "Can't decompress after close"; + } + if (s.runningState == 1) { + var /** number */ windowBits = decodeWindowBits(s); + if (windowBits == -1) { + throw "Invalid 'windowBits' code"; + } + s.maxRingBufferSize = 1 << windowBits; + s.maxBackwardDistance = s.maxRingBufferSize - 16; + s.runningState = 2; + } + var /** number */ fence = calculateFence(s); + var /** number */ ringBufferMask = s.ringBufferSize - 1; + var /** !Int8Array */ ringBuffer = s.ringBuffer; + while (s.runningState != 10) { + switch(s.runningState) { + case 2: + if (s.metaBlockLength < 0) { + throw "Invalid metablock length"; + } + readNextMetablockHeader(s); + fence = calculateFence(s); + ringBufferMask = s.ringBufferSize - 1; + ringBuffer = s.ringBuffer; + continue; + case 3: + readMetablockHuffmanCodesAndContextMaps(s); + s.runningState = 4; + case 4: + if (s.metaBlockLength <= 0) { + s.runningState = 2; + continue; + } + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.commandBlockLength == 0) { + decodeCommandBlockSwitch(s); + } + s.commandBlockLength--; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; + var /** number */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; + var /** number */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; + var /** number */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; + s.distanceCode = CMD_LOOKUP[cmdCode + 3]; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ extraBits = insertAndCopyExtraBits & 0xFF; + s.insertLength = insertLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ extraBits = insertAndCopyExtraBits >> 8; + s.copyLength = copyLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); + s.j = 0; + s.runningState = 7; + case 7: + if (s.trivialLiteralContext != 0) { + while (s.j < s.insertLength) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.literalBlockLength == 0) { + decodeLiteralBlockSwitch(s); + } + s.literalBlockLength--; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); + s.pos++; + s.j++; + if (s.pos >= fence) { + s.nextRunningState = 7; + s.runningState = 12; + break; + } + } + } else { + var /** number */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; + var /** number */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; + while (s.j < s.insertLength) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.literalBlockLength == 0) { + decodeLiteralBlockSwitch(s); + } + var /** number */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; + var /** number */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; + s.literalBlockLength--; + prevByte2 = prevByte1; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); + ringBuffer[s.pos] = prevByte1; + s.pos++; + s.j++; + if (s.pos >= fence) { + s.nextRunningState = 7; + s.runningState = 12; + break; + } + } + } + if (s.runningState != 7) { + continue; + } + s.metaBlockLength -= s.insertLength; + if (s.metaBlockLength <= 0) { + s.runningState = 4; + continue; + } + var /** number */ distanceCode = s.distanceCode; + if (distanceCode < 0) { + s.distance = s.rings[s.distRbIdx]; + } else { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.distanceBlockLength == 0) { + decodeDistanceBlockSwitch(s); + } + s.distanceBlockLength--; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; + distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); + if (distanceCode < 16) { + var /** number */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; + s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; + if (s.distance < 0) { + throw "Negative distance"; + } + } else { + var /** number */ extraBits = s.distExtraBits[distanceCode]; + var /** number */ bits; + if (s.bitOffset + extraBits <= 32) { + bits = readFewBits(s, extraBits); + } else { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + bits = ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); + } + s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); + } + } + if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { + s.maxDistance = s.pos; + } else { + s.maxDistance = s.maxBackwardDistance; + } + if (s.distance > s.maxDistance) { + s.runningState = 9; + continue; + } + if (distanceCode > 0) { + s.distRbIdx = (s.distRbIdx + 1) & 0x3; + s.rings[s.distRbIdx] = s.distance; + } + if (s.copyLength > s.metaBlockLength) { + throw "Invalid backward reference"; + } + s.j = 0; + s.runningState = 8; + case 8: + var /** number */ src = (s.pos - s.distance) & ringBufferMask; + var /** number */ dst = s.pos; + var /** number */ copyLength = s.copyLength - s.j; + var /** number */ srcEnd = src + copyLength; + var /** number */ dstEnd = dst + copyLength; + if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { + if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { + for (var /** number */ k = 0; k < copyLength; k += 4) { + ringBuffer[dst++] = ringBuffer[src++]; + ringBuffer[dst++] = ringBuffer[src++]; + ringBuffer[dst++] = ringBuffer[src++]; + ringBuffer[dst++] = ringBuffer[src++]; + } + } else { + ringBuffer.copyWithin(dst, src, srcEnd); + } + s.j += copyLength; + s.metaBlockLength -= copyLength; + s.pos += copyLength; + } else { + for (; s.j < s.copyLength; ) { + ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; + s.metaBlockLength--; + s.pos++; + s.j++; + if (s.pos >= fence) { + s.nextRunningState = 8; + s.runningState = 12; + break; + } + } + } + if (s.runningState == 8) { + s.runningState = 4; + } + continue; + case 9: + if (s.distance > 0x7FFFFFFC) { + throw "Invalid backward reference"; + } + if (s.copyLength >= 4 && s.copyLength <= 24) { + var /** number */ offset = DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength]; + var /** number */ wordId = s.distance - s.maxDistance - 1; + var /** number */ shift = DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength]; + var /** number */ mask = (1 << shift) - 1; + var /** number */ wordIdx = wordId & mask; + var /** number */ transformIdx = wordId >>> shift; + offset += wordIdx * s.copyLength; + if (transformIdx < 121) { + var /** number */ len = transformDictionaryWord(ringBuffer, s.pos, DICTIONARY_DATA, offset, s.copyLength, RFC_TRANSFORMS, transformIdx); + s.pos += len; + s.metaBlockLength -= len; + if (s.pos >= fence) { + s.nextRunningState = 4; + s.runningState = 12; + continue; + } + } else { + throw "Invalid backward reference"; + } + } else { + throw "Invalid backward reference"; + } + s.runningState = 4; + continue; + case 5: + while (s.metaBlockLength > 0) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + readFewBits(s, 8); + s.metaBlockLength--; + } + s.runningState = 2; + continue; + case 6: + copyUncompressedData(s); + continue; + case 12: + s.ringBufferBytesReady = min(s.pos, s.ringBufferSize); + s.runningState = 13; + case 13: + if (writeRingBuffer(s) == 0) { + return; + } + if (s.pos >= s.maxBackwardDistance) { + s.maxDistance = s.maxBackwardDistance; + } + if (s.pos >= s.ringBufferSize) { + if (s.pos > s.ringBufferSize) { + ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); + } + s.pos &= ringBufferMask; + s.ringBufferBytesWritten = 0; + } + s.runningState = s.nextRunningState; + continue; + default: + throw "Unexpected state " + s.runningState; + } + } + if (s.runningState == 10) { + if (s.metaBlockLength < 0) { + throw "Invalid metablock length"; + } + jumpToByteBoundary(s); + checkHealth(s, 1); + } + } + + /** + * @constructor + * @param {number} numTransforms + * @param {number} prefixSuffixLen + * @param {number} prefixSuffixCount + * @struct + */ + function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { + /** @type {!number} */ + this.numTransforms = 0; + /** @type {!Int32Array} */ + this.triplets = new Int32Array(0); + /** @type {!Int8Array} */ + this.prefixSuffixStorage = new Int8Array(0); + /** @type {!Int32Array} */ + this.prefixSuffixHeads = new Int32Array(0); + /** @type {!Int16Array} */ + this.params = new Int16Array(0); + this.numTransforms = numTransforms; + this.triplets = new Int32Array(numTransforms * 3); + this.params = new Int16Array(numTransforms); + this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); + this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); + } + + var RFC_TRANSFORMS = new Transforms(121, 167, 50); + /** + * @param {!Int8Array} prefixSuffix + * @param {!Int32Array} prefixSuffixHeads + * @param {!Int32Array} transforms + * @param {!string} prefixSuffixSrc + * @param {!string} transformsSrc + * @return {void} + */ + function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { + var /** number */ n = prefixSuffixSrc.length; + var /** number */ index = 1; + var /** number */ j = 0; + for (var /** number */ i = 0; i < n; ++i) { + var /** number */ c = prefixSuffixSrc.charCodeAt(i); + if (c == 35) { + prefixSuffixHeads[index++] = j; + } else { + prefixSuffix[j++] = c; + } + } + for (var /** number */ i = 0; i < 363; ++i) { + transforms[i] = transformsSrc.charCodeAt(i) - 32; + } + } + { + 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"); + } + /** + * @param {!Int8Array} dst + * @param {number} dstOffset + * @param {!Int8Array} src + * @param {number} srcOffset + * @param {number} len + * @param {!Transforms} transforms + * @param {number} transformIndex + * @return {number} + */ + function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { + var /** number */ offset = dstOffset; + var /** !Int32Array */ triplets = transforms.triplets; + var /** !Int8Array */ prefixSuffixStorage = transforms.prefixSuffixStorage; + var /** !Int32Array */ prefixSuffixHeads = transforms.prefixSuffixHeads; + var /** number */ transformOffset = 3 * transformIndex; + var /** number */ prefixIdx = triplets[transformOffset]; + var /** number */ transformType = triplets[transformOffset + 1]; + var /** number */ suffixIdx = triplets[transformOffset + 2]; + var /** number */ prefix = prefixSuffixHeads[prefixIdx]; + var /** number */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; + var /** number */ suffix = prefixSuffixHeads[suffixIdx]; + var /** number */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; + var /** number */ omitFirst = transformType - 11; + var /** number */ omitLast = transformType - 0; + if (omitFirst < 1 || omitFirst > 9) { + omitFirst = 0; + } + if (omitLast < 1 || omitLast > 9) { + omitLast = 0; + } + while (prefix != prefixEnd) { + dst[offset++] = prefixSuffixStorage[prefix++]; + } + if (omitFirst > len) { + omitFirst = len; + } + srcOffset += omitFirst; + len -= omitFirst; + len -= omitLast; + var /** number */ i = len; + while (i > 0) { + dst[offset++] = src[srcOffset++]; + i--; + } + if (transformType == 10 || transformType == 11) { + var /** number */ uppercaseOffset = offset - len; + if (transformType == 10) { + len = 1; + } + while (len > 0) { + var /** number */ c0 = dst[uppercaseOffset] & 0xFF; + if (c0 < 0xC0) { + if (c0 >= 97 && c0 <= 122) { + dst[uppercaseOffset] ^= 32; + } + uppercaseOffset += 1; + len -= 1; + } else if (c0 < 0xE0) { + dst[uppercaseOffset + 1] ^= 32; + uppercaseOffset += 2; + len -= 2; + } else { + dst[uppercaseOffset + 2] ^= 5; + uppercaseOffset += 3; + len -= 3; + } + } + } else if (transformType == 21 || transformType == 22) { + var /** number */ shiftOffset = offset - len; + var /** number */ param = transforms.params[transformIndex]; + var /** number */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); + while (len > 0) { + var /** number */ step = 1; + var /** number */ c0 = dst[shiftOffset] & 0xFF; + if (c0 < 0x80) { + scalar += c0; + dst[shiftOffset] = (scalar & 0x7F); + } else if (c0 < 0xC0) { + } else if (c0 < 0xE0) { + if (len >= 2) { + var /** number */ c1 = dst[shiftOffset + 1]; + scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); + dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); + dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); + step = 2; + } else { + step = len; + } + } else if (c0 < 0xF0) { + if (len >= 3) { + var /** number */ c1 = dst[shiftOffset + 1]; + var /** number */ c2 = dst[shiftOffset + 2]; + scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); + dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); + dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); + dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); + step = 3; + } else { + step = len; + } + } else if (c0 < 0xF8) { + if (len >= 4) { + var /** number */ c1 = dst[shiftOffset + 1]; + var /** number */ c2 = dst[shiftOffset + 2]; + var /** number */ c3 = dst[shiftOffset + 3]; + scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); + dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); + dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); + dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); + dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); + step = 4; + } else { + step = len; + } + } + shiftOffset += step; + len -= step; + if (transformType == 21) { + len = 0; + } + } + } + while (suffix != suffixEnd) { + dst[offset++] = prefixSuffixStorage[suffix++]; + } + return offset - dstOffset; + } + + /** + * @param {number} key + * @param {number} len + * @return {number} + */ + function getNextKey(key, len) { + var /** number */ step = 1 << (len - 1); + while ((key & step) != 0) { + step >>= 1; + } + return (key & (step - 1)) + step; + } + /** + * @param {!Int32Array} table + * @param {number} offset + * @param {number} step + * @param {number} end + * @param {number} item + * @return {void} + */ + function replicateValue(table, offset, step, end, item) { + do { + end -= step; + table[offset + end] = item; + } while (end > 0); + } + /** + * @param {!Int32Array} count + * @param {number} len + * @param {number} rootBits + * @return {number} + */ + function nextTableBitSize(count, len, rootBits) { + var /** number */ left = 1 << (len - rootBits); + while (len < 15) { + left -= count[len]; + if (left <= 0) { + break; + } + len++; + left <<= 1; + } + return len - rootBits; + } + /** + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {number} rootBits + * @param {!Int32Array} codeLengths + * @param {number} codeLengthsSize + * @return {number} + */ + function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { + var /** number */ tableOffset = tableGroup[tableIdx]; + var /** number */ key; + var /** !Int32Array */ sorted = new Int32Array(codeLengthsSize); + var /** !Int32Array */ count = new Int32Array(16); + var /** !Int32Array */ offset = new Int32Array(16); + var /** number */ symbol; + for (symbol = 0; symbol < codeLengthsSize; symbol++) { + count[codeLengths[symbol]]++; + } + offset[1] = 0; + for (var /** number */ len = 1; len < 15; len++) { + offset[len + 1] = offset[len] + count[len]; + } + for (symbol = 0; symbol < codeLengthsSize; symbol++) { + if (codeLengths[symbol] != 0) { + sorted[offset[codeLengths[symbol]]++] = symbol; + } + } + var /** number */ tableBits = rootBits; + var /** number */ tableSize = 1 << tableBits; + var /** number */ totalSize = tableSize; + if (offset[15] == 1) { + for (key = 0; key < totalSize; key++) { + tableGroup[tableOffset + key] = sorted[0]; + } + return totalSize; + } + key = 0; + symbol = 0; + for (var /** number */ len = 1, step = 2; len <= rootBits; len++, step <<= 1) { + for (; count[len] > 0; count[len]--) { + replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); + key = getNextKey(key, len); + } + } + var /** number */ mask = totalSize - 1; + var /** number */ low = -1; + var /** number */ currentOffset = tableOffset; + for (var /** number */ len = rootBits + 1, step = 2; len <= 15; len++, step <<= 1) { + for (; count[len] > 0; count[len]--) { + if ((key & mask) != low) { + currentOffset += tableSize; + tableBits = nextTableBitSize(count, len, rootBits); + tableSize = 1 << tableBits; + totalSize += tableSize; + low = key & mask; + tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); + } + replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); + key = getNextKey(key, len); + } + } + return totalSize; + } + + /** + * @param {!State} s + * @return {void} + */ + function doReadMoreInput(s) { + if (s.endOfStreamReached != 0) { + if (halfAvailable(s) >= -2) { + return; + } + throw "No more input"; + } + var /** number */ readOffset = s.halfOffset << 1; + var /** number */ bytesInBuffer = 4096 - readOffset; + s.byteBuffer.copyWithin(0, readOffset, 4096); + s.halfOffset = 0; + while (bytesInBuffer < 4096) { + var /** number */ spaceLeft = 4096 - bytesInBuffer; + var /** number */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); + if (len <= 0) { + s.endOfStreamReached = 1; + s.tailBytes = bytesInBuffer; + bytesInBuffer += 1; + break; + } + bytesInBuffer += len; + } + bytesToNibbles(s, bytesInBuffer); + } + /** + * @param {!State} s + * @param {number} endOfStream + * @return {void} + */ + function checkHealth(s, endOfStream) { + if (s.endOfStreamReached == 0) { + return; + } + var /** number */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; + if (byteOffset > s.tailBytes) { + throw "Read after end"; + } + if ((endOfStream != 0) && (byteOffset != s.tailBytes)) { + throw "Unused bytes after end"; + } + } + /** + * @param {!State} s + * @return {void} + */ + function assertAccumulatorHealthy(s) { + if (s.bitOffset > 32) { + throw "Accumulator underloaded: " + s.bitOffset; + } + } + /** + * @param {!State} s + * @param {number} n + * @return {number} + */ + function readFewBits(s, n) { + var /** number */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); + s.bitOffset += n; + return val; + } + /** + * @param {!State} s + * @param {number} n + * @return {number} + */ + function readManyBits(s, n) { + var /** number */ low = readFewBits(s, 16); + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + return low | (readFewBits(s, n - 16) << 16); + } + /** + * @param {!State} s + * @return {void} + */ + function initBitReader(s) { + s.byteBuffer = new Int8Array(4160); + s.accumulator32 = 0; + s.shortBuffer = new Int16Array(2080); + s.bitOffset = 32; + s.halfOffset = 2048; + s.endOfStreamReached = 0; + prepare(s); + } + /** + * @param {!State} s + * @return {void} + */ + function prepare(s) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + checkHealth(s, 0); + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + /** + * @param {!State} s + * @return {void} + */ + function reload(s) { + if (s.bitOffset == 32) { + prepare(s); + } + } + /** + * @param {!State} s + * @return {void} + */ + function jumpToByteBoundary(s) { + var /** number */ padding = (32 - s.bitOffset) & 7; + if (padding != 0) { + var /** number */ paddingBits = readFewBits(s, padding); + if (paddingBits != 0) { + throw "Corrupted padding bits"; + } + } + } + /** + * @param {!State} s + * @return {number} + */ + function halfAvailable(s) { + var /** number */ limit = 2048; + if (s.endOfStreamReached != 0) { + limit = (s.tailBytes + 1) >> 1; + } + return limit - s.halfOffset; + } + /** + * @param {!State} s + * @param {!Int8Array} data + * @param {number} offset + * @param {number} length + * @return {void} + */ + function copyBytes(s, data, offset, length) { + if ((s.bitOffset & 7) != 0) { + throw "Unaligned copyBytes"; + } + while ((s.bitOffset != 32) && (length != 0)) { + data[offset++] = (s.accumulator32 >>> s.bitOffset); + s.bitOffset += 8; + length--; + } + if (length == 0) { + return; + } + var /** number */ copyNibbles = min(halfAvailable(s), length >> 1); + if (copyNibbles > 0) { + var /** number */ readOffset = s.halfOffset << 1; + var /** number */ delta = copyNibbles << 1; + data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); + offset += delta; + length -= delta; + s.halfOffset += copyNibbles; + } + if (length == 0) { + return; + } + if (halfAvailable(s) > 0) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + while (length != 0) { + data[offset++] = (s.accumulator32 >>> s.bitOffset); + s.bitOffset += 8; + length--; + } + checkHealth(s, 0); + return; + } + while (length > 0) { + var /** number */ len = readInput(s.input, data, offset, length); + if (len == -1) { + throw "Unexpected end of input"; + } + offset += len; + length -= len; + } + } + /** + * @param {!State} s + * @param {number} byteLen + * @return {void} + */ + function bytesToNibbles(s, byteLen) { + var /** !Int8Array */ byteBuffer = s.byteBuffer; + var /** number */ halfLen = byteLen >> 1; + var /** !Int16Array */ shortBuffer = s.shortBuffer; + for (var /** number */ i = 0; i < halfLen; ++i) { + shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); + } + } + + var LOOKUP = new Int32Array(2048); + /** + * @param {!Int32Array} lookup + * @param {!string} map + * @param {!string} rle + * @return {void} + */ + function unpackLookupTable(lookup, map, rle) { + for (var /** number */ i = 0; i < 256; ++i) { + lookup[i] = i & 0x3F; + lookup[512 + i] = i >> 2; + lookup[1792 + i] = 2 + (i >> 6); + } + for (var /** number */ i = 0; i < 128; ++i) { + lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); + } + for (var /** number */ i = 0; i < 64; ++i) { + lookup[1152 + i] = i & 1; + lookup[1216 + i] = 2 + (i & 1); + } + var /** number */ offset = 1280; + for (var /** number */ k = 0; k < 19; ++k) { + var /** number */ value = k & 3; + var /** number */ rep = rle.charCodeAt(k) - 32; + for (var /** number */ i = 0; i < rep; ++i) { + lookup[offset++] = value; + } + } + for (var /** number */ i = 0; i < 16; ++i) { + lookup[1792 + i] = 1; + lookup[2032 + i] = 6; + } + lookup[1792] = 0; + lookup[2047] = 7; + for (var /** number */ i = 0; i < 256; ++i) { + lookup[1536 + i] = lookup[1792 + i] << 3; + } + } + { + unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \u0081 @"); + } + + /** + * @constructor + * @struct + */ + function State() { + /** @type {!Int8Array} */ + this.ringBuffer = new Int8Array(0); + /** @type {!Int8Array} */ + this.contextModes = new Int8Array(0); + /** @type {!Int8Array} */ + this.contextMap = new Int8Array(0); + /** @type {!Int8Array} */ + this.distContextMap = new Int8Array(0); + /** @type {!Int8Array} */ + this.distExtraBits = new Int8Array(0); + /** @type {!Int8Array} */ + this.output = new Int8Array(0); + /** @type {!Int8Array} */ + this.byteBuffer = new Int8Array(0); + /** @type {!Int16Array} */ + this.shortBuffer = new Int16Array(0); + /** @type {!Int32Array} */ + this.intBuffer = new Int32Array(0); + /** @type {!Int32Array} */ + this.rings = new Int32Array(0); + /** @type {!Int32Array} */ + this.blockTrees = new Int32Array(0); + /** @type {!Int32Array} */ + this.literalTreeGroup = new Int32Array(0); + /** @type {!Int32Array} */ + this.commandTreeGroup = new Int32Array(0); + /** @type {!Int32Array} */ + this.distanceTreeGroup = new Int32Array(0); + /** @type {!Int32Array} */ + this.distOffset = new Int32Array(0); + /** @type {!number} */ + this.runningState = 0; + /** @type {!number} */ + this.nextRunningState = 0; + /** @type {!number} */ + this.accumulator32 = 0; + /** @type {!number} */ + this.bitOffset = 0; + /** @type {!number} */ + this.halfOffset = 0; + /** @type {!number} */ + this.tailBytes = 0; + /** @type {!number} */ + this.endOfStreamReached = 0; + /** @type {!number} */ + this.metaBlockLength = 0; + /** @type {!number} */ + this.inputEnd = 0; + /** @type {!number} */ + this.isUncompressed = 0; + /** @type {!number} */ + this.isMetadata = 0; + /** @type {!number} */ + this.literalBlockLength = 0; + /** @type {!number} */ + this.numLiteralBlockTypes = 0; + /** @type {!number} */ + this.commandBlockLength = 0; + /** @type {!number} */ + this.numCommandBlockTypes = 0; + /** @type {!number} */ + this.distanceBlockLength = 0; + /** @type {!number} */ + this.numDistanceBlockTypes = 0; + /** @type {!number} */ + this.pos = 0; + /** @type {!number} */ + this.maxDistance = 0; + /** @type {!number} */ + this.distRbIdx = 0; + /** @type {!number} */ + this.trivialLiteralContext = 0; + /** @type {!number} */ + this.literalTreeIdx = 0; + /** @type {!number} */ + this.commandTreeIdx = 0; + /** @type {!number} */ + this.j = 0; + /** @type {!number} */ + this.insertLength = 0; + /** @type {!number} */ + this.contextMapSlice = 0; + /** @type {!number} */ + this.distContextMapSlice = 0; + /** @type {!number} */ + this.contextLookupOffset1 = 0; + /** @type {!number} */ + this.contextLookupOffset2 = 0; + /** @type {!number} */ + this.distanceCode = 0; + /** @type {!number} */ + this.numDirectDistanceCodes = 0; + /** @type {!number} */ + this.distancePostfixMask = 0; + /** @type {!number} */ + this.distancePostfixBits = 0; + /** @type {!number} */ + this.distance = 0; + /** @type {!number} */ + this.copyLength = 0; + /** @type {!number} */ + this.maxBackwardDistance = 0; + /** @type {!number} */ + this.maxRingBufferSize = 0; + /** @type {!number} */ + this.ringBufferSize = 0; + /** @type {!number} */ + this.expectedTotalSize = 0; + /** @type {!number} */ + this.outputOffset = 0; + /** @type {!number} */ + this.outputLength = 0; + /** @type {!number} */ + this.outputUsed = 0; + /** @type {!number} */ + this.ringBufferBytesWritten = 0; + /** @type {!number} */ + this.ringBufferBytesReady = 0; + /** @type {!number} */ + this.isEager = 0; + /** @type {!number} */ + this.isLargeWindow = 0; + /** @type {!InputStream|null} */ + this.input = null; + this.ringBuffer = new Int8Array(0); + this.rings = new Int32Array(10); + this.rings[0] = 16; + this.rings[1] = 15; + this.rings[2] = 11; + this.rings[3] = 4; + } + + /** + * @param {!Int8Array} dictionary + * @param {!string} data0 + * @param {!string} data1 + * @param {!string} skipFlip + * @return {void} + */ + function unpackDictionaryData(dictionary, data0, data1, skipFlip) { + var /** !Int8Array */ dict = toUsAsciiBytes(data0 + data1); + if (dict.length != dictionary.length) { + throw "Corrupted brotli dictionary"; + } + var /** number */ offset = 0; + var /** number */ n = skipFlip.length; + for (var /** number */ i = 0; i < n; i += 2) { + var /** number */ skip = skipFlip.charCodeAt(i) - 36; + var /** number */ flip = skipFlip.charCodeAt(i + 1) - 36; + offset += skip; + for (var /** number */ j = 0; j < flip; ++j) { + dict[offset] |= 0x80; + offset++; + } + } + dictionary.set(dict); + } + { + var /** !Int8Array */ dictionary = new Int8Array(122784); + unpackDictionaryData(dictionary, "timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0\"stopelseliestourpack.gifpastcss?graymean>rideshotlatesaidroadvar feeljohnrickportfast'UA-deadpoorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml\"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid=\"sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnearironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees

json', 'contT21: RSSloopasiamoon

soulLINEfortcartT14:

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}}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>PP>Q\u0002P8P7P=P>P4P>Q\u0002P>P6P5P>P=P8Q\u0005P\u001DP0P5P5P1Q\u000BPP2Q\u000BP2P>P\u001DP>P>P1P\u001FP>P;P8P=P8P P$P\u001DP5P\u001CQ\u000BQ\u0002Q\u000BP\u001EP=P8Pthing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue\"crossspentblogsbox\">notedleavechinasizesguest

robotheavytrue,sevengrandcrimesignsawaredancephase>\n\n\r\nname=diegopage swiss-->\n\n#fff;\">Log.com\"treatsheet) && 14px;sleepntentfiledja:c\u0003id=\"cName\"worseshots-box-delta\n<bears:48Z spendbakershops= \"\";php\">ction13px;brianhellosize=o=%2F joinmaybe, fjsimg\" \")[0]MTopBType\"newlyDanskczechtrailknowsfaq\">zh-cn10);\n-1\");type=bluestrulydavis.js';>\r\n\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"domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo\">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother\" id=\"marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo\" bottomlist\">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed courseAbout island: The dialoghousesBEGIN MexicostartscentreheightaddingIslandassetsEmpireSchooleffortdirectnearlymanualSelect.\n\nOnejoinedmenu\">PhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunitedbeyond-scaleacceptservedmarineFootercamera\n_form\"leavesstress\" />\r\n.gif\" onloadloaderOxfordsistersurvivlistenfemaleDesignsize=\"appealtext\">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople
wonderpricesturned|| {};main\">inlinesundaywrap\">failedcensusminutebeaconquotes150px|estateremoteemail\"linkedright;signalformal1.htmlsignupprincefloat:.png\" forum.AccesspaperssoundsextendHeightsliderUTF-8\"& Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome\">headerensurebranchpiecesblock;statedtop\">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline\">body\">\n* TheThoughseeingjerseyNews\nSystem DavidcancertablesprovedApril reallydriveritem\">more\">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php\" assumelayerswilsonstoresreliefswedenCustomeasily your String\n\nWhiltaylorclear:resortfrenchthough\") + \"buyingbrandsMembername\">oppingsector5px;\">vspacepostermajor coffeemartinmaturehappenkansaslink\">Images=falsewhile hspace0& \n\nIn powerPolski-colorjordanBottomStart -count2.htmlnews\">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml\" rights.html-blockregExp:hoverwithinvirginphones\rusing \n\tvar >');\n\t\n\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\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;\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/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 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\u0000e7&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/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/\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\u0019e\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\u001Ce/\u0006g\"\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 \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<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>PP=P0P3P4P5PP3P>P4P2P>Q\u0002Q\u0002P0PP2P0Q\u0001P2P0PQ\u0002Q\u0003Q\u0002P=P0P4P4P=Q\u000FP\u0012P>Q\u0002Q\u0002Q\u0000P8P=P5P9P\u0012P0Q\u0001P=P8PQ\u0002Q\u0000Q\u0003P1P\u001EP=P8PPP9P4P2P5P>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(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashioncountryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture",journalprojectsurfaces"expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\r\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular & animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit<!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle=\"Mobile killingshowingItaliandroppedheavilyeffects-1']);\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,"animatefeelingarrivedpassingnaturalroughly.\n\nThe but notdensityBritainChineselack oftributeIreland\" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang=\"return leadersplannedpremiumpackageAmericaEdition]"Messageneed tovalue=\"complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling."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»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"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© \">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&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&(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"Middle ead')[0Criticsstudios>©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://  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"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&lasinglesthreatsintegertake onrefusedcalled =US&See thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\r\nAtlantanucleusCounty,purely count\">easily build aonclicka givenpointerh"events else {\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m"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"base ofIn manyundergoregimesaction </p>\r\n<ustomVa;></importsor thatmostly &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: "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=\" ("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-->\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…new Date\" size=\"pageNamemiddle\" \" /></a>hidden\">sequencepersonaloverflowopinionsillinoislinks\">\n\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal=\"false\"EspaC1olreleasessubmit\" er"additionsymptomsorientedresourceright\"><pleasurestationshistory.leaving border=contentscenter\">.\n\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal\"><span>search\">operatorrequestsa "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, " checked.min.js\"magnetic></a></hforecast. While thursdaydvertiseéhasClassevaluateorderingexistingpatients Online coloradoOptions\"campbell<!-- end</span><<br />\r\n_popups|sciences," quality Windows assignedheight: <b classle" 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")s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton\">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth=\"2lazyloadnovemberused in height=\"cript\">\n </<tr><td height:2/productcountry include footer\" <!-- 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»</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\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper\">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabethdiscoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inheritedCommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish\nsuspectedmargin: 0spiritual\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\n\tsponsoreddocument.or "there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting\" width=\".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper\"enough toalong thedelivered-->\r\n\n\r\n
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\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?\npercentagebest-knowncreating a\" dir=\"ltrLieutenant\n
is said tostructuralreferendummost oftena separate->\n
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\">\rimplementedcan be seenthere was ademonstratecontainer\">connectionsthe Britishwas written!important;px; margin-followed byability to complicatedduring the immigrationalso called

\n

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
\n selected=\"high schoolresponse tocomfortableadoption ofthree yearsthe countryin Februaryso that thepeople who provided by\nhaving been\r\n\r\n< "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\">as follows:merged withthrough thecommercial pointed outopportunityview of therequirementdivision ofprogramminghe receivedsetInterval\">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-livedcan be usedvery littleone of the had alreadyinterpretedcommunicatefeatures ofgovernment,entered the\" height=\"3Independentpopulationslarge-scale. Although used in thedestructionpossibilitystarting intwo or moreexpressionssubordinatelarger thanhistory and\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\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&times;account foralign=rightthe companyalways beenreturned toinvolvementBecause thethis period\" name=\"q\" confined toa result ofvalue=\"\" />is actuallyEnvironment\r\n\r\nConversely,>\n
this is notthe presentif they areand finallya matter of\r\n\t
\r\n\r\nfaster thanmajority ofafter whichcomparativeto maintainimprove theawarded theer\" class=\"frameborderrestorationin the sameanalysis oftheir firstDuring the continentalsequence offunction(){font-size: work on the\nadopted 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\n they can beback to thesome of hisexposure toare similarform of theaddFavoritecitizenshippart in thepeople within practiceto continue&minus;approved by the first allowed theand for thefunctioningplaying thesolution toheight=\"0\" in his bookmore than afollows thecreated thepresence in 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"may includethe world'scan lead torefers to aborder=\"0\" government winning theresulted in while the Washington,the subjectcity in the>\r\n\t\treflect theto completebecame moreradioactiverejected bywithout anyhis father,which couldcopy of theto indicatea politicalaccounts ofconstitutesworked wither
of his lifeaccompaniedclientWidthprevent theLegislativedifferentlytogether inhas severalfor anothertext of thefounded thee with the is used forchanged theusually theplace wherewhereas the> \nHowever thelead to the\tThe currentthe site ofsubstantialexperience,in the Westthey shouldslovenD\rinacomentariosuniversidadcondicionesactividadesexperienciatecnologC-aproducciC3npuntuaciC3naplicaciC3ncontraseC1acategorC-asregistrarseprofesionaltratamientoregC-stratesecretarC-aprincipalesprotecciC3nimportantesimportanciaposibilidadinteresantecrecimientonecesidadessuscribirseasociaciC3ndisponiblesevaluaciC3nestudiantesresponsableresoluciC3nguadalajararegistradosoportunidadcomercialesfotografC-aautoridadesingenierC-atelevisiC3ncompetenciaoperacionesestablecidosimplementeactualmentenavegaciC3nconformidadline-height:font-family:\" : \"http://applicationslink\" href=\"specifically//\n/index.html\"window.open( !important;application/independence//www.googleorganizationautocompleterequirementsconservative
most notably/>notification'undefined')Furthermore,believe thatinnerHTML = prior to thedramaticallyreferring tonegotiationsheadquartersSouth AfricaunsuccessfulPennsylvaniaAs a result,\npadding-top:experimentalgetAttributeinstructionstechnologiespart of the =function(){subscriptionl.dtd\">\r\nEnglish (US)appendChild(transmissions. However, intelligence\" tabindex=\"float:right;Commonwealthranging fromin which theat least onereproductionencyclopedia;font-size:1jurisdictionat that time\">compensationchampionshipmedia=\"all\" violation ofreference toreturn true;Strict//EN\" transactionsinterventionverificationInformation difficultiesChampionshipcapabilities}\n\nChristianityfor example,Professionalrestrictionssuggest thatwas released(such as theremoveClass(unemploymentthe Americanstructure of/index.html published inspan class=\"\">\n\nf (document.border: 1px {font-size:1treatment of0\" height=\"1modificationIndependencedivided intogreater thanachievementsestablishingJavaScript\" neverthelesssignificanceBroadcasting> container\">\nsuch as the influence ofa particularsrc='http://navigation\" half of the substantial  advantage ofdiscovery offundamental metropolitanthe opposite\" xml:lang=\"deliberatelyalign=centerevolution ofpreservationimprovementsbeginning inJesus ChristPublicationsdisagreementtext-align:r, function()similaritiesbody>is currentlyalphabeticalis sometimestype=\"image/many of the flow:hidden;available indescribe theexistence ofall over thethe Internet\t"); + this.element.attr('aria-activedescendant','j'+this._id+'_loading'); + } + this.load_node($.jstree.root, function (o, s) { + if(s) { + this.get_container_ul()[0].className = c; + if(this._firstChild(this.get_container_ul()[0])) { + this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id); + } + this.set_state($.extend(true, {}, this._data.core.state), function () { + /** + * triggered when a `refresh` call completes + * @event + * @name refresh.jstree + */ + this.trigger('refresh'); + }); + } + this._data.core.state = null; + }); + }, + /** + * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`. + * @name refresh_node(obj) + * @param {mixed} obj the node + * @trigger refresh_node.jstree + */ + refresh_node : function (obj) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + var opened = [], to_load = [], s = this._data.core.selected.concat([]); + to_load.push(obj.id); + if(obj.state.opened === true) { opened.push(obj.id); } + this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); }); + this._load_nodes(to_load, $.proxy(function (nodes) { + this.open_node(opened, false, 0); + this.select_node(s); + /** + * triggered when a node is refreshed + * @event + * @name refresh_node.jstree + * @param {Object} node - the refreshed node + * @param {Array} nodes - an array of the IDs of the nodes that were reloaded + */ + this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes }); + }, this), false, true); + }, + /** + * set (change) the ID of a node + * @name set_id(obj, id) + * @param {mixed} obj the node + * @param {String} id the new ID + * @return {Boolean} + * @trigger set_id.jstree + */ + set_id : function (obj, id) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + var i, j, m = this._model.data, old = obj.id; + id = id.toString(); + // update parents (replace current ID with new one in children and children_d) + m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id; + for(i = 0, j = obj.parents.length; i < j; i++) { + m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id; + } + // update children (replace current ID with new one in parent and parents) + for(i = 0, j = obj.children.length; i < j; i++) { + m[obj.children[i]].parent = id; + } + for(i = 0, j = obj.children_d.length; i < j; i++) { + m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id; + } + i = $.inArray(obj.id, this._data.core.selected); + if(i !== -1) { this._data.core.selected[i] = id; } + // update model and obj itself (obj.id, this._model.data[KEY]) + i = this.get_node(obj.id, true); + if(i) { + i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor'); + if(this.element.attr('aria-activedescendant') === obj.id) { + this.element.attr('aria-activedescendant', id); + } + } + delete m[obj.id]; + obj.id = id; + obj.li_attr.id = id; + m[id] = obj; + /** + * triggered when a node id value is changed + * @event + * @name set_id.jstree + * @param {Object} node + * @param {String} old the old id + */ + this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old }); + return true; + }, + /** + * get the text value of a node + * @name get_text(obj) + * @param {mixed} obj the node + * @return {String} + */ + get_text : function (obj) { + obj = this.get_node(obj); + return (!obj || obj.id === $.jstree.root) ? false : obj.text; + }, + /** + * set the text value of a node. Used internally, please use `rename_node(obj, val)`. + * @private + * @name set_text(obj, val) + * @param {mixed} obj the node, you can pass an array to set the text on multiple nodes + * @param {String} val the new text value + * @return {Boolean} + * @trigger set_text.jstree + */ + set_text : function (obj, val) { + var t1, t2; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.set_text(obj[t1], val); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + obj.text = val; + if(this.get_node(obj, true).length) { + this.redraw_node(obj.id); + } + /** + * triggered when a node text value is changed + * @event + * @name set_text.jstree + * @param {Object} obj + * @param {String} text the new value + */ + this.trigger('set_text',{ "obj" : obj, "text" : val }); + return true; + }, + /** + * gets a JSON representation of a node (or the whole tree) + * @name get_json([obj, options]) + * @param {mixed} obj + * @param {Object} options + * @param {Boolean} options.no_state do not return state information + * @param {Boolean} options.no_id do not return ID + * @param {Boolean} options.no_children do not include children + * @param {Boolean} options.no_data do not include node data + * @param {Boolean} options.no_li_attr do not include LI attributes + * @param {Boolean} options.no_a_attr do not include A attributes + * @param {Boolean} options.flat return flat JSON instead of nested + * @return {Object} + */ + get_json : function (obj, options, flat) { + obj = this.get_node(obj || $.jstree.root); + if(!obj) { return false; } + if(options && options.flat && !flat) { flat = []; } + var tmp = { + 'id' : obj.id, + 'text' : obj.text, + 'icon' : this.get_icon(obj), + 'li_attr' : $.extend(true, {}, obj.li_attr), + 'a_attr' : $.extend(true, {}, obj.a_attr), + 'state' : {}, + 'data' : options && options.no_data ? false : $.extend(true, $.isArray(obj.data)?[]:{}, obj.data) + //( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ), + }, i, j; + if(options && options.flat) { + tmp.parent = obj.parent; + } + else { + tmp.children = []; + } + if(!options || !options.no_state) { + for(i in obj.state) { + if(obj.state.hasOwnProperty(i)) { + tmp.state[i] = obj.state[i]; + } + } + } else { + delete tmp.state; + } + if(options && options.no_li_attr) { + delete tmp.li_attr; + } + if(options && options.no_a_attr) { + delete tmp.a_attr; + } + if(options && options.no_id) { + delete tmp.id; + if(tmp.li_attr && tmp.li_attr.id) { + delete tmp.li_attr.id; + } + if(tmp.a_attr && tmp.a_attr.id) { + delete tmp.a_attr.id; + } + } + if(options && options.flat && obj.id !== $.jstree.root) { + flat.push(tmp); + } + if(!options || !options.no_children) { + for(i = 0, j = obj.children.length; i < j; i++) { + if(options && options.flat) { + this.get_json(obj.children[i], options, flat); + } + else { + tmp.children.push(this.get_json(obj.children[i], options)); + } + } + } + return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp); + }, + /** + * create a new node (do not confuse with load_node) + * @name create_node([par, node, pos, callback, is_loaded]) + * @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`) + * @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name) + * @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last" + * @param {Function} callback a function to be called once the node is created + * @param {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded + * @return {String} the ID of the newly create node + * @trigger model.jstree, create_node.jstree + */ + create_node : function (par, node, pos, callback, is_loaded) { + if(par === null) { par = $.jstree.root; } + par = this.get_node(par); + if(!par) { return false; } + pos = pos === undefined ? "last" : pos; + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); }); + } + if(!node) { node = { "text" : this.get_string('New node') }; } + if(typeof node === "string") { + node = { "text" : node }; + } else { + node = $.extend(true, {}, node); + } + if(node.text === undefined) { node.text = this.get_string('New node'); } + var tmp, dpc, i, j; + + if(par.id === $.jstree.root) { + if(pos === "before") { pos = "first"; } + if(pos === "after") { pos = "last"; } + } + switch(pos) { + case "before": + tmp = this.get_node(par.parent); + pos = $.inArray(par.id, tmp.children); + par = tmp; + break; + case "after" : + tmp = this.get_node(par.parent); + pos = $.inArray(par.id, tmp.children) + 1; + par = tmp; + break; + case "inside": + case "first": + pos = 0; + break; + case "last": + pos = par.children.length; + break; + default: + if(!pos) { pos = 0; } + break; + } + if(pos > par.children.length) { pos = par.children.length; } + if(!node.id) { node.id = true; } + if(!this.check("create_node", node, par, pos)) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + if(node.id === true) { delete node.id; } + node = this._parse_model_from_json(node, par.id, par.parents.concat()); + if(!node) { return false; } + tmp = this.get_node(node); + dpc = []; + dpc.push(node); + dpc = dpc.concat(tmp.children_d); + this.trigger('model', { "nodes" : dpc, "parent" : par.id }); + + par.children_d = par.children_d.concat(dpc); + for(i = 0, j = par.parents.length; i < j; i++) { + this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc); + } + node = tmp; + tmp = []; + for(i = 0, j = par.children.length; i < j; i++) { + tmp[i >= pos ? i+1 : i] = par.children[i]; + } + tmp[pos] = node.id; + par.children = tmp; + + this.redraw_node(par, true); + /** + * triggered when a node is created + * @event + * @name create_node.jstree + * @param {Object} node + * @param {String} parent the parent's ID + * @param {Number} position the position of the new node among the parent's children + */ + this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos }); + if(callback) { callback.call(this, this.get_node(node)); } + return node.id; + }, + /** + * set the text value of a node + * @name rename_node(obj, val) + * @param {mixed} obj the node, you can pass an array to rename multiple nodes to the same name + * @param {String} val the new text value + * @return {Boolean} + * @trigger rename_node.jstree + */ + rename_node : function (obj, val) { + var t1, t2, old; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.rename_node(obj[t1], val); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + old = obj.text; + if(!this.check("rename_node", obj, this.get_parent(obj), val)) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments)) + /** + * triggered when a node is renamed + * @event + * @name rename_node.jstree + * @param {Object} node + * @param {String} text the new value + * @param {String} old the old value + */ + this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old }); + return true; + }, + /** + * remove a node + * @name delete_node(obj) + * @param {mixed} obj the node, you can pass an array to delete multiple nodes + * @return {Boolean} + * @trigger delete_node.jstree, changed.jstree + */ + delete_node : function (obj) { + var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.delete_node(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + par = this.get_node(obj.parent); + pos = $.inArray(obj.id, par.children); + c = false; + if(!this.check("delete_node", obj, par, pos)) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + if(pos !== -1) { + par.children = $.vakata.array_remove(par.children, pos); + } + tmp = obj.children_d.concat([]); + tmp.push(obj.id); + for(i = 0, j = obj.parents.length; i < j; i++) { + this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) { + return $.inArray(v, tmp) === -1; + }); + } + for(k = 0, l = tmp.length; k < l; k++) { + if(this._model.data[tmp[k]].state.selected) { + c = true; + break; + } + } + if (c) { + this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) { + return $.inArray(v, tmp) === -1; + }); + } + /** + * triggered when a node is deleted + * @event + * @name delete_node.jstree + * @param {Object} node + * @param {String} parent the parent's ID + */ + this.trigger('delete_node', { "node" : obj, "parent" : par.id }); + if(c) { + this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id }); + } + for(k = 0, l = tmp.length; k < l; k++) { + delete this._model.data[tmp[k]]; + } + if($.inArray(this._data.core.focused, tmp) !== -1) { + this._data.core.focused = null; + top = this.element[0].scrollTop; + lft = this.element[0].scrollLeft; + if(par.id === $.jstree.root) { + if (this._model.data[$.jstree.root].children[0]) { + this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus(); + } + } + else { + this.get_node(par, true).children('.jstree-anchor').focus(); + } + this.element[0].scrollTop = top; + this.element[0].scrollLeft = lft; + } + this.redraw_node(par, true); + return true; + }, + /** + * check if an operation is premitted on the tree. Used internally. + * @private + * @name check(chk, obj, par, pos) + * @param {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node" + * @param {mixed} obj the node + * @param {mixed} par the parent + * @param {mixed} pos the position to insert at, or if "rename_node" - the new name + * @param {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node + * @return {Boolean} + */ + check : function (chk, obj, par, pos, more) { + obj = obj && obj.id ? obj : this.get_node(obj); + par = par && par.id ? par : this.get_node(par); + var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj, + chc = this.settings.core.check_callback; + if(chk === "move_node" || chk === "copy_node") { + if((!more || !more.is_multi) && (chk === "move_node" && $.inArray(obj.id, par.children) === pos)) { + this._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 }) }; + return false; + } + if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) { + this._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 }) }; + return false; + } + } + if(tmp && tmp.data) { tmp = tmp.data; } + if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) { + if(tmp.functions[chk] === false) { + this._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 }) }; + } + return tmp.functions[chk]; + } + if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) { + this._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 }) }; + return false; + } + return true; + }, + /** + * get the last error + * @name last_error() + * @return {Object} + */ + last_error : function () { + return this._data.core.last_error; + }, + /** + * move a node to a new parent + * @name move_node(obj, par [, pos, callback, is_loaded]) + * @param {mixed} obj the node to move, pass an array to move multiple nodes + * @param {mixed} par the new parent + * @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` + * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position + * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded + * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn + * @param {Boolean} instance internal parameter indicating if the node comes from another instance + * @trigger move_node.jstree + */ + move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { + var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p; + + par = this.get_node(par); + pos = pos === undefined ? 0 : pos; + if(!par) { return false; } + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); }); + } + + if($.isArray(obj)) { + if(obj.length === 1) { + obj = obj[0]; + } + else { + //obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) { + par = tmp; + pos = "after"; + } + } + this.redraw(); + return true; + } + } + obj = obj && obj.id ? obj : this.get_node(obj); + + if(!obj || obj.id === $.jstree.root) { return false; } + + old_par = (obj.parent || $.jstree.root).toString(); + new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); + old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); + is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); + old_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; + if(old_ins && old_ins._id) { + obj = old_ins._model.data[obj.id]; + } + + if(is_multi) { + if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) { + if(old_ins) { old_ins.delete_node(obj); } + return tmp; + } + return false; + } + //var m = this._model.data; + if(par.id === $.jstree.root) { + if(pos === "before") { pos = "first"; } + if(pos === "after") { pos = "last"; } + } + switch(pos) { + case "before": + pos = $.inArray(par.id, new_par.children); + break; + case "after" : + pos = $.inArray(par.id, new_par.children) + 1; + break; + case "inside": + case "first": + pos = 0; + break; + case "last": + pos = new_par.children.length; + break; + default: + if(!pos) { pos = 0; } + break; + } + if(pos > new_par.children.length) { pos = new_par.children.length; } + if(!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) })) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + if(obj.parent === new_par.id) { + dpc = new_par.children.concat(); + tmp = $.inArray(obj.id, dpc); + if(tmp !== -1) { + dpc = $.vakata.array_remove(dpc, tmp); + if(pos > tmp) { pos--; } + } + tmp = []; + for(i = 0, j = dpc.length; i < j; i++) { + tmp[i >= pos ? i+1 : i] = dpc[i]; + } + tmp[pos] = obj.id; + new_par.children = tmp; + this._node_changed(new_par.id); + this.redraw(new_par.id === $.jstree.root); + } + else { + // clean old parent and up + tmp = obj.children_d.concat(); + tmp.push(obj.id); + for(i = 0, j = obj.parents.length; i < j; i++) { + dpc = []; + p = old_ins._model.data[obj.parents[i]].children_d; + for(k = 0, l = p.length; k < l; k++) { + if($.inArray(p[k], tmp) === -1) { + dpc.push(p[k]); + } + } + old_ins._model.data[obj.parents[i]].children_d = dpc; + } + old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id); + + // insert into new parent and up + for(i = 0, j = new_par.parents.length; i < j; i++) { + this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp); + } + dpc = []; + for(i = 0, j = new_par.children.length; i < j; i++) { + dpc[i >= pos ? i+1 : i] = new_par.children[i]; + } + dpc[pos] = obj.id; + new_par.children = dpc; + new_par.children_d.push(obj.id); + new_par.children_d = new_par.children_d.concat(obj.children_d); + + // update object + obj.parent = new_par.id; + tmp = new_par.parents.concat(); + tmp.unshift(new_par.id); + p = obj.parents.length; + obj.parents = tmp; + + // update object children + tmp = tmp.concat(); + for(i = 0, j = obj.children_d.length; i < j; i++) { + this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1); + Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp); + } + + if(old_par === $.jstree.root || new_par.id === $.jstree.root) { + this._model.force_full_redraw = true; + } + if(!this._model.force_full_redraw) { + this._node_changed(old_par); + this._node_changed(new_par.id); + } + if(!skip_redraw) { + this.redraw(); + } + } + if(callback) { callback.call(this, obj, new_par, pos); } + /** + * triggered when a node is moved + * @event + * @name move_node.jstree + * @param {Object} node + * @param {String} parent the parent's ID + * @param {Number} position the position of the node among the parent's children + * @param {String} old_parent the old parent of the node + * @param {Number} old_position the old position of the node + * @param {Boolean} is_multi do the node and new parent belong to different instances + * @param {jsTree} old_instance the instance the node came from + * @param {jsTree} new_instance the instance of the new parent + */ + this.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 }); + return obj.id; + }, + /** + * copy a node to a new parent + * @name copy_node(obj, par [, pos, callback, is_loaded]) + * @param {mixed} obj the node to copy, pass an array to copy multiple nodes + * @param {mixed} par the new parent + * @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` + * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position + * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded + * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn + * @param {Boolean} instance internal parameter indicating if the node comes from another instance + * @trigger model.jstree copy_node.jstree + */ + copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { + var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi; + + par = this.get_node(par); + pos = pos === undefined ? 0 : pos; + if(!par) { return false; } + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); }); + } + + if($.isArray(obj)) { + if(obj.length === 1) { + obj = obj[0]; + } + else { + //obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) { + par = tmp; + pos = "after"; + } + } + this.redraw(); + return true; + } + } + obj = obj && obj.id ? obj : this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + + old_par = (obj.parent || $.jstree.root).toString(); + new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); + old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); + is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); + + if(old_ins && old_ins._id) { + obj = old_ins._model.data[obj.id]; + } + + if(par.id === $.jstree.root) { + if(pos === "before") { pos = "first"; } + if(pos === "after") { pos = "last"; } + } + switch(pos) { + case "before": + pos = $.inArray(par.id, new_par.children); + break; + case "after" : + pos = $.inArray(par.id, new_par.children) + 1; + break; + case "inside": + case "first": + pos = 0; + break; + case "last": + pos = new_par.children.length; + break; + default: + if(!pos) { pos = 0; } + break; + } + if(pos > new_par.children.length) { pos = new_par.children.length; } + if(!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) })) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj; + if(!node) { return false; } + if(node.id === true) { delete node.id; } + node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat()); + if(!node) { return false; } + tmp = this.get_node(node); + if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; } + dpc = []; + dpc.push(node); + dpc = dpc.concat(tmp.children_d); + this.trigger('model', { "nodes" : dpc, "parent" : new_par.id }); + + // insert into new parent and up + for(i = 0, j = new_par.parents.length; i < j; i++) { + this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc); + } + dpc = []; + for(i = 0, j = new_par.children.length; i < j; i++) { + dpc[i >= pos ? i+1 : i] = new_par.children[i]; + } + dpc[pos] = tmp.id; + new_par.children = dpc; + new_par.children_d.push(tmp.id); + new_par.children_d = new_par.children_d.concat(tmp.children_d); + + if(new_par.id === $.jstree.root) { + this._model.force_full_redraw = true; + } + if(!this._model.force_full_redraw) { + this._node_changed(new_par.id); + } + if(!skip_redraw) { + this.redraw(new_par.id === $.jstree.root); + } + if(callback) { callback.call(this, tmp, new_par, pos); } + /** + * triggered when a node is copied + * @event + * @name copy_node.jstree + * @param {Object} node the copied node + * @param {Object} original the original node + * @param {String} parent the parent's ID + * @param {Number} position the position of the node among the parent's children + * @param {String} old_parent the old parent of the node + * @param {Number} old_position the position of the original node + * @param {Boolean} is_multi do the node and new parent belong to different instances + * @param {jsTree} old_instance the instance the node came from + * @param {jsTree} new_instance the instance of the new parent + */ + this.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 }); + return tmp.id; + }, + /** + * cut a node (a later call to `paste(obj)` would move the node) + * @name cut(obj) + * @param {mixed} obj multiple objects can be passed using an array + * @trigger cut.jstree + */ + cut : function (obj) { + if(!obj) { obj = this._data.core.selected.concat(); } + if(!$.isArray(obj)) { obj = [obj]; } + if(!obj.length) { return false; } + var tmp = [], o, t1, t2; + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + o = this.get_node(obj[t1]); + if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } + } + if(!tmp.length) { return false; } + ccp_node = tmp; + ccp_inst = this; + ccp_mode = 'move_node'; + /** + * triggered when nodes are added to the buffer for moving + * @event + * @name cut.jstree + * @param {Array} node + */ + this.trigger('cut', { "node" : obj }); + }, + /** + * copy a node (a later call to `paste(obj)` would copy the node) + * @name copy(obj) + * @param {mixed} obj multiple objects can be passed using an array + * @trigger copy.jstree + */ + copy : function (obj) { + if(!obj) { obj = this._data.core.selected.concat(); } + if(!$.isArray(obj)) { obj = [obj]; } + if(!obj.length) { return false; } + var tmp = [], o, t1, t2; + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + o = this.get_node(obj[t1]); + if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } + } + if(!tmp.length) { return false; } + ccp_node = tmp; + ccp_inst = this; + ccp_mode = 'copy_node'; + /** + * triggered when nodes are added to the buffer for copying + * @event + * @name copy.jstree + * @param {Array} node + */ + this.trigger('copy', { "node" : obj }); + }, + /** + * get the current buffer (any nodes that are waiting for a paste operation) + * @name get_buffer() + * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance) + */ + get_buffer : function () { + return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst }; + }, + /** + * check if there is something in the buffer to paste + * @name can_paste() + * @return {Boolean} + */ + can_paste : function () { + return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node]; + }, + /** + * copy or move the previously cut or copied nodes to a new parent + * @name paste(obj [, pos]) + * @param {mixed} obj the new parent + * @param {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0` + * @trigger paste.jstree + */ + paste : function (obj, pos) { + obj = this.get_node(obj); + if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; } + if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) { + /** + * triggered when paste is invoked + * @event + * @name paste.jstree + * @param {String} parent the ID of the receiving node + * @param {Array} node the nodes in the buffer + * @param {String} mode the performed operation - "copy_node" or "move_node" + */ + this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode }); + } + ccp_node = false; + ccp_mode = false; + ccp_inst = false; + }, + /** + * clear the buffer of previously copied or cut nodes + * @name clear_buffer() + * @trigger clear_buffer.jstree + */ + clear_buffer : function () { + ccp_node = false; + ccp_mode = false; + ccp_inst = false; + /** + * triggered when the copy / cut buffer is cleared + * @event + * @name clear_buffer.jstree + */ + this.trigger('clear_buffer'); + }, + /** + * put a node in edit mode (input field to rename the node) + * @name edit(obj [, default_text, callback]) + * @param {mixed} obj + * @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) + * @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 + */ + edit : function (obj, default_text, callback) { + var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false; + obj = this.get_node(obj); + if(!obj) { return false; } + if(!this.check("edit", obj, this.get_parent(obj))) { + this.settings.core.error.call(this, this._data.core.last_error); + return false; + } + tmp = obj; + default_text = typeof default_text === 'string' ? default_text : obj.text; + this.set_text(obj, ""); + obj = this._open_to(obj); + tmp.text = default_text; + + rtl = this._data.core.rtl; + w = this.element.width(); + this._data.core.focused = tmp.id; + a = obj.children('.jstree-anchor').focus(); + s = $(''); + /*! + oi = obj.children("i:visible"), + ai = a.children("i:visible"), + w1 = oi.width() * oi.length, + w2 = ai.width() * ai.length, + */ + t = default_text; + h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo(document.body); + h2 = $("<"+"input />", { + "value" : t, + "class" : "jstree-rename-input", + // "size" : t.length, + "css" : { + "padding" : "0", + "border" : "1px solid silver", + "box-sizing" : "border-box", + "display" : "inline-block", + "height" : (this._data.core.li_height) + "px", + "lineHeight" : (this._data.core.li_height) + "px", + "width" : "150px" // will be set a bit further down + }, + "blur" : $.proxy(function (e) { + e.stopImmediatePropagation(); + e.preventDefault(); + var i = s.children(".jstree-rename-input"), + v = i.val(), + f = this.settings.core.force_text, + nv; + if(v === "") { v = t; } + h1.remove(); + s.replaceWith(a); + s.remove(); + t = f ? t : $('
').append($.parseHTML(t)).html(); + obj = this.get_node(obj); + this.set_text(obj, t); + nv = !!this.rename_node(obj, f ? $('
').text(v).text() : $('
').append($.parseHTML(v)).html()); + if(!nv) { + this.set_text(obj, t); // move this up? and fix #483 + } + this._data.core.focused = tmp.id; + setTimeout($.proxy(function () { + var node = this.get_node(tmp.id, true); + if(node.length) { + this._data.core.focused = tmp.id; + node.children('.jstree-anchor').focus(); + } + }, this), 0); + if(callback) { + callback.call(this, tmp, nv, cancel); + } + h2 = null; + }, this), + "keydown" : function (e) { + var key = e.which; + if(key === 27) { + cancel = true; + this.value = t; + } + if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { + e.stopImmediatePropagation(); + } + if(key === 27 || key === 13) { + e.preventDefault(); + this.blur(); + } + }, + "click" : function (e) { e.stopImmediatePropagation(); }, + "mousedown" : function (e) { e.stopImmediatePropagation(); }, + "keyup" : function (e) { + h2.width(Math.min(h1.text("pW" + this.value).width(),w)); + }, + "keypress" : function(e) { + if(e.which === 13) { return false; } + } + }); + fn = { + fontFamily : a.css('fontFamily') || '', + fontSize : a.css('fontSize') || '', + fontWeight : a.css('fontWeight') || '', + fontStyle : a.css('fontStyle') || '', + fontStretch : a.css('fontStretch') || '', + fontVariant : a.css('fontVariant') || '', + letterSpacing : a.css('letterSpacing') || '', + wordSpacing : a.css('wordSpacing') || '' + }; + s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2); + a.replaceWith(s); + h1.css(fn); + h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); + $(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) { + if (h2 && e.target !== h2) { + $(h2).blur(); + } + }); + }, + + + /** + * changes the theme + * @name set_theme(theme_name [, theme_url]) + * @param {String} theme_name the name of the new theme to apply + * @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. + * @trigger set_theme.jstree + */ + set_theme : function (theme_name, theme_url) { + if(!theme_name) { return false; } + if(theme_url === true) { + var dir = this.settings.core.themes.dir; + if(!dir) { dir = $.jstree.path + '/themes'; } + theme_url = dir + '/' + theme_name + '/style.css'; + } + if(theme_url && $.inArray(theme_url, themes_loaded) === -1) { + $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />'); + themes_loaded.push(theme_url); + } + if(this._data.core.themes.name) { + this.element.removeClass('jstree-' + this._data.core.themes.name); + } + this._data.core.themes.name = theme_name; + this.element.addClass('jstree-' + theme_name); + this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive'); + /** + * triggered when a theme is set + * @event + * @name set_theme.jstree + * @param {String} theme the new theme + */ + this.trigger('set_theme', { 'theme' : theme_name }); + }, + /** + * gets the name of the currently applied theme name + * @name get_theme() + * @return {String} + */ + get_theme : function () { return this._data.core.themes.name; }, + /** + * changes the theme variant (if the theme has variants) + * @name set_theme_variant(variant_name) + * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed) + */ + set_theme_variant : function (variant_name) { + if(this._data.core.themes.variant) { + this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); + } + this._data.core.themes.variant = variant_name; + if(variant_name) { + this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); + } + }, + /** + * gets the name of the currently applied theme variant + * @name get_theme() + * @return {String} + */ + get_theme_variant : function () { return this._data.core.themes.variant; }, + /** + * shows a striped background on the container (if the theme supports it) + * @name show_stripes() + */ + show_stripes : function () { + this._data.core.themes.stripes = true; + this.get_container_ul().addClass("jstree-striped"); + /** + * triggered when stripes are shown + * @event + * @name show_stripes.jstree + */ + this.trigger('show_stripes'); + }, + /** + * hides the striped background on the container + * @name hide_stripes() + */ + hide_stripes : function () { + this._data.core.themes.stripes = false; + this.get_container_ul().removeClass("jstree-striped"); + /** + * triggered when stripes are hidden + * @event + * @name hide_stripes.jstree + */ + this.trigger('hide_stripes'); + }, + /** + * toggles the striped background on the container + * @name toggle_stripes() + */ + toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } }, + /** + * shows the connecting dots (if the theme supports it) + * @name show_dots() + */ + show_dots : function () { + this._data.core.themes.dots = true; + this.get_container_ul().removeClass("jstree-no-dots"); + /** + * triggered when dots are shown + * @event + * @name show_dots.jstree + */ + this.trigger('show_dots'); + }, + /** + * hides the connecting dots + * @name hide_dots() + */ + hide_dots : function () { + this._data.core.themes.dots = false; + this.get_container_ul().addClass("jstree-no-dots"); + /** + * triggered when dots are hidden + * @event + * @name hide_dots.jstree + */ + this.trigger('hide_dots'); + }, + /** + * toggles the connecting dots + * @name toggle_dots() + */ + toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } }, + /** + * show the node icons + * @name show_icons() + */ + show_icons : function () { + this._data.core.themes.icons = true; + this.get_container_ul().removeClass("jstree-no-icons"); + /** + * triggered when icons are shown + * @event + * @name show_icons.jstree + */ + this.trigger('show_icons'); + }, + /** + * hide the node icons + * @name hide_icons() + */ + hide_icons : function () { + this._data.core.themes.icons = false; + this.get_container_ul().addClass("jstree-no-icons"); + /** + * triggered when icons are hidden + * @event + * @name hide_icons.jstree + */ + this.trigger('hide_icons'); + }, + /** + * toggle the node icons + * @name toggle_icons() + */ + toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }, + /** + * show the node ellipsis + * @name show_icons() + */ + show_ellipsis : function () { + this._data.core.themes.ellipsis = true; + this.get_container_ul().addClass("jstree-ellipsis"); + /** + * triggered when ellisis is shown + * @event + * @name show_ellipsis.jstree + */ + this.trigger('show_ellipsis'); + }, + /** + * hide the node ellipsis + * @name hide_ellipsis() + */ + hide_ellipsis : function () { + this._data.core.themes.ellipsis = false; + this.get_container_ul().removeClass("jstree-ellipsis"); + /** + * triggered when ellisis is hidden + * @event + * @name hide_ellipsis.jstree + */ + this.trigger('hide_ellipsis'); + }, + /** + * toggle the node ellipsis + * @name toggle_icons() + */ + toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } }, + /** + * set the node icon for a node + * @name set_icon(obj, icon) + * @param {mixed} obj + * @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 + */ + set_icon : function (obj, icon) { + var t1, t2, dom, old; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.set_icon(obj[t1], icon); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + old = obj.icon; + obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon; + dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon"); + if(icon === false) { + dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); + this.hide_icon(obj); + } + else if(icon === true || icon === null || icon === undefined || icon === '') { + dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); + if(old === false) { this.show_icon(obj); } + } + else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) { + dom.removeClass(old).css("background",""); + dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon); + if(old === false) { this.show_icon(obj); } + } + else { + dom.removeClass(old).css("background",""); + dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon); + if(old === false) { this.show_icon(obj); } + } + return true; + }, + /** + * get the node icon for a node + * @name get_icon(obj) + * @param {mixed} obj + * @return {String} + */ + get_icon : function (obj) { + obj = this.get_node(obj); + return (!obj || obj.id === $.jstree.root) ? false : obj.icon; + }, + /** + * hide the icon on an individual node + * @name hide_icon(obj) + * @param {mixed} obj + */ + hide_icon : function (obj) { + var t1, t2; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.hide_icon(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj === $.jstree.root) { return false; } + obj.icon = false; + this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden'); + return true; + }, + /** + * show the icon on an individual node + * @name show_icon(obj) + * @param {mixed} obj + */ + show_icon : function (obj) { + var t1, t2, dom; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.show_icon(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj === $.jstree.root) { return false; } + dom = this.get_node(obj, true); + obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true; + if(!obj.icon) { obj.icon = true; } + dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden'); + return true; + } + }; + + // helpers + $.vakata = {}; + // collect attributes + $.vakata.attributes = function(node, with_values) { + node = $(node)[0]; + var attr = with_values ? {} : []; + if(node && node.attributes) { + $.each(node.attributes, function (i, v) { + if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; } + if(v.value !== null && $.trim(v.value) !== '') { + if(with_values) { attr[v.name] = v.value; } + else { attr.push(v.name); } + } + }); + } + return attr; + }; + $.vakata.array_unique = function(array) { + var a = [], i, j, l, o = {}; + for(i = 0, l = array.length; i < l; i++) { + if(o[array[i]] === undefined) { + a.push(array[i]); + o[array[i]] = true; + } + } + return a; + }; + // remove item from array + $.vakata.array_remove = function(array, from) { + array.splice(from, 1); + return array; + //var rest = array.slice((to || from) + 1 || array.length); + //array.length = from < 0 ? array.length + from : from; + //array.push.apply(array, rest); + //return array; + }; + // remove item from array + $.vakata.array_remove_item = function(array, item) { + var tmp = $.inArray(item, array); + return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array; + }; + $.vakata.array_filter = function(c,a,b,d,e) { + if (c.filter) { + return c.filter(a, b); + } + d=[]; + for (e in c) { + if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) { + d.push(c[e]); + } + } + return d; + }; + + +/** + * ### Changed plugin + * + * 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. + */ + + $.jstree.plugins.changed = function (options, parent) { + var last = []; + this.trigger = function (ev, data) { + var i, j; + if(!data) { + data = {}; + } + if(ev.replace('.jstree','') === 'changed') { + data.changed = { selected : [], deselected : [] }; + var tmp = {}; + for(i = 0, j = last.length; i < j; i++) { + tmp[last[i]] = 1; + } + for(i = 0, j = data.selected.length; i < j; i++) { + if(!tmp[data.selected[i]]) { + data.changed.selected.push(data.selected[i]); + } + else { + tmp[data.selected[i]] = 2; + } + } + for(i = 0, j = last.length; i < j; i++) { + if(tmp[last[i]] === 1) { + data.changed.deselected.push(last[i]); + } + } + last = data.selected.slice(); + } + /** + * triggered when selection changes (the "changed" plugin enhances the original event with more data) + * @event + * @name changed.jstree + * @param {Object} node + * @param {Object} action the action that caused the selection to change + * @param {Array} selected the current selection + * @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 + * @param {Object} event the event (if any) that triggered this changed event + * @plugin changed + */ + parent.trigger.call(this, ev, data); + }; + this.refresh = function (skip_loading, forget_state) { + last = []; + return parent.refresh.apply(this, arguments); + }; + }; + +/** + * ### Checkbox plugin + * + * This plugin renders checkbox icons in front of each node, making multiple selection much easier. + * 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. + */ + + var _i = document.createElement('I'); + _i.className = 'jstree-icon jstree-checkbox'; + _i.setAttribute('role', 'presentation'); + /** + * stores all defaults for the checkbox plugin + * @name $.jstree.defaults.checkbox + * @plugin checkbox + */ + $.jstree.defaults.checkbox = { + /** + * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`. + * @name $.jstree.defaults.checkbox.visible + * @plugin checkbox + */ + visible : true, + /** + * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`. + * @name $.jstree.defaults.checkbox.three_state + * @plugin checkbox + */ + three_state : true, + /** + * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`. + * @name $.jstree.defaults.checkbox.whole_node + * @plugin checkbox + */ + whole_node : true, + /** + * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`. + * @name $.jstree.defaults.checkbox.keep_selected_style + * @plugin checkbox + */ + keep_selected_style : true, + /** + * This setting controls how cascading and undetermined nodes are applied. + * 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. + * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''. + * @name $.jstree.defaults.checkbox.cascade + * @plugin checkbox + */ + cascade : '', + /** + * 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. + * @name $.jstree.defaults.checkbox.tie_selection + * @plugin checkbox + */ + tie_selection : true, + + /** + * This setting controls if cascading down affects disabled checkboxes + * @name $.jstree.defaults.checkbox.cascade_to_disabled + * @plugin checkbox + */ + cascade_to_disabled : true, + + /** + * This setting controls if cascading down affects hidden checkboxes + * @name $.jstree.defaults.checkbox.cascade_to_hidden + * @plugin checkbox + */ + cascade_to_hidden : true + }; + $.jstree.plugins.checkbox = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + this._data.checkbox.uto = false; + this._data.checkbox.selected = []; + if(this.settings.checkbox.three_state) { + this.settings.checkbox.cascade = 'up+down+undetermined'; + } + this.element + .on("init.jstree", $.proxy(function () { + this._data.checkbox.visible = this.settings.checkbox.visible; + if(!this.settings.checkbox.keep_selected_style) { + this.element.addClass('jstree-checkbox-no-clicked'); + } + if(this.settings.checkbox.tie_selection) { + this.element.addClass('jstree-checkbox-selection'); + } + }, this)) + .on("loading.jstree", $.proxy(function () { + this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ](); + }, this)); + if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { + this.element + .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 () { + // only if undetermined is in setting + if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } + this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); + }, this)); + } + if(!this.settings.checkbox.tie_selection) { + this.element + .on('model.jstree', $.proxy(function (e, data) { + var m = this._model.data, + p = m[data.parent], + dpc = data.nodes, + i, j; + for(i = 0, j = dpc.length; i < j; i++) { + m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked); + if(m[dpc[i]].state.checked) { + this._data.checkbox.selected.push(dpc[i]); + } + } + }, this)); + } + if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) { + this.element + .on('model.jstree', $.proxy(function (e, data) { + var m = this._model.data, + p = m[data.parent], + dpc = data.nodes, + chd = [], + c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; + + if(s.indexOf('down') !== -1) { + // apply down + if(p.state[ t ? 'selected' : 'checked' ]) { + for(i = 0, j = dpc.length; i < j; i++) { + m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true; + } + + this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc); + } + else { + for(i = 0, j = dpc.length; i < j; i++) { + if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) { + for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) { + m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true; + } + this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d); + } + } + } + } + + if(s.indexOf('up') !== -1) { + // apply up + for(i = 0, j = p.children_d.length; i < j; i++) { + if(!m[p.children_d[i]].children.length) { + chd.push(m[p.children_d[i]].parent); + } + } + chd = $.vakata.array_unique(chd); + for(k = 0, l = chd.length; k < l; k++) { + p = m[chd[k]]; + while(p && p.id !== $.jstree.root) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(c === j) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + p = this.get_node(p.parent); + } + } + } + + this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected); + }, this)) + .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) { + var self = this, + obj = data.node, + m = this._model.data, + par = this.get_node(obj.parent), + i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, + sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected; + + for (i = 0, j = cur.length; i < j; i++) { + sel[cur[i]] = true; + } + + // apply down + if(s.indexOf('down') !== -1) { + //this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d)); + var selectedIds = this._cascade_new_checked_state(obj.id, true); + var temp = obj.children_d.concat(obj.id); + for (i = 0, j = temp.length; i < j; i++) { + if (selectedIds.indexOf(temp[i]) > -1) { + sel[temp[i]] = true; + } + else { + delete sel[temp[i]]; + } + } + } + + // apply up + if(s.indexOf('up') !== -1) { + while(par && par.id !== $.jstree.root) { + c = 0; + for(i = 0, j = par.children.length; i < j; i++) { + c += m[par.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(c === j) { + par.state[ t ? 'selected' : 'checked' ] = true; + sel[par.id] = true; + //this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id); + tmp = this.get_node(par, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + par = this.get_node(par.parent); + } + } + + cur = []; + for (i in sel) { + if (sel.hasOwnProperty(i)) { + cur.push(i); + } + } + this._data[ t ? 'core' : 'checkbox' ].selected = cur; + }, this)) + .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) { + var obj = this.get_node($.jstree.root), + m = this._model.data, + i, j, tmp; + for(i = 0, j = obj.children_d.length; i < j; i++) { + tmp = m[obj.children_d[i]]; + if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { + tmp.original.state.undetermined = false; + } + } + }, this)) + .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) { + var self = this, + obj = data.node, + dom = this.get_node(obj, true), + i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, + cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {}, + stillSelectedIds = [], + allIds = obj.children_d.concat(obj.id); + + // apply down + if(s.indexOf('down') !== -1) { + var selectedIds = this._cascade_new_checked_state(obj.id, false); + + cur = $.vakata.array_filter(cur, function(id) { + return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1; + }); + } + + // only apply up if cascade up is enabled and if this node is not selected + // (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected). + if(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) { + for(i = 0, j = obj.parents.length; i < j; i++) { + tmp = this._model.data[obj.parents[i]]; + tmp.state[ t ? 'selected' : 'checked' ] = false; + if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { + tmp.original.state.undetermined = false; + } + tmp = this.get_node(obj.parents[i], true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + + cur = $.vakata.array_filter(cur, function(id) { + return obj.parents.indexOf(id) === -1; + }); + } + + this._data[ t ? 'core' : 'checkbox' ].selected = cur; + }, this)); + } + if(this.settings.checkbox.cascade.indexOf('up') !== -1) { + this.element + .on('delete_node.jstree', $.proxy(function (e, data) { + // apply up (whole handler) + var p = this.get_node(data.parent), + m = this._model.data, + i, j, c, tmp, t = this.settings.checkbox.tie_selection; + while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(j > 0 && c === j) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + p = this.get_node(p.parent); + } + }, this)) + .on('move_node.jstree', $.proxy(function (e, data) { + // apply up (whole handler) + var is_multi = data.is_multi, + old_par = data.old_parent, + new_par = this.get_node(data.parent), + m = this._model.data, + p, c, i, j, tmp, t = this.settings.checkbox.tie_selection; + if(!is_multi) { + p = this.get_node(old_par); + while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(j > 0 && c === j) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + p = this.get_node(p.parent); + } + } + p = new_par; + while(p && p.id !== $.jstree.root) { + c = 0; + for(i = 0, j = p.children.length; i < j; i++) { + c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; + } + if(c === j) { + if(!p.state[ t ? 'selected' : 'checked' ]) { + p.state[ t ? 'selected' : 'checked' ] = true; + this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + } + else { + if(p.state[ t ? 'selected' : 'checked' ]) { + p.state[ t ? 'selected' : 'checked' ] = false; + this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id); + tmp = this.get_node(p, true); + if(tmp && tmp.length) { + tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + break; + } + } + p = this.get_node(p.parent); + } + }, this)); + } + }; + /** + * get an array of all nodes whose state is "undetermined" + * @name get_undetermined([full]) + * @param {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_undetermined = function (full) { + if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) { + return []; + } + var 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 = []; + for(i = 0, j = s.length; i < j; i++) { + if(m[s[i]] && m[s[i]].parents) { + for(k = 0, l = m[s[i]].parents.length; k < l; k++) { + if(o[m[s[i]].parents[k]] !== undefined) { + break; + } + if(m[s[i]].parents[k] !== $.jstree.root) { + o[m[s[i]].parents[k]] = true; + p.push(m[s[i]].parents[k]); + } + } + } + } + // attempt for server side undetermined state + this.element.find('.jstree-closed').not(':has(.jstree-children)') + .each(function () { + var tmp = tt.get_node(this), tmp2; + + if(!tmp) { return; } + + if(!tmp.state.loaded) { + if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) { + if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) { + o[tmp.id] = true; + p.push(tmp.id); + } + for(k = 0, l = tmp.parents.length; k < l; k++) { + if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) { + o[tmp.parents[k]] = true; + p.push(tmp.parents[k]); + } + } + } + } + else { + for(i = 0, j = tmp.children_d.length; i < j; i++) { + tmp2 = m[tmp.children_d[i]]; + if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) { + if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) { + o[tmp2.id] = true; + p.push(tmp2.id); + } + for(k = 0, l = tmp2.parents.length; k < l; k++) { + if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) { + o[tmp2.parents[k]] = true; + p.push(tmp2.parents[k]); + } + } + } + } + } + }); + for (i = 0, j = p.length; i < j; i++) { + if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) { + r.push(full ? m[p[i]] : p[i]); + } + } + return r; + }; + /** + * set the undetermined state where and if necessary. Used internally. + * @private + * @name _undetermined() + * @plugin checkbox + */ + this._undetermined = function () { + if(this.element === null) { return; } + var p = this.get_undetermined(false), i, j, s; + + this.element.find('.jstree-undetermined').removeClass('jstree-undetermined'); + for (i = 0, j = p.length; i < j; i++) { + s = this.get_node(p[i], true); + if(s && s.length) { + s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined'); + } + } + }; + this.redraw_node = function(obj, deep, is_callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if(obj) { + var i, j, tmp = null, icon = null; + for(i = 0, j = obj.childNodes.length; i < j; i++) { + if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { + tmp = obj.childNodes[i]; + break; + } + } + if(tmp) { + if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; } + icon = _i.cloneNode(false); + if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; } + tmp.insertBefore(icon, tmp.childNodes[0]); + } + } + if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { + if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } + this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); + } + return obj; + }; + /** + * show the node checkbox icons + * @name show_checkboxes() + * @plugin checkbox + */ + this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); }; + /** + * hide the node checkbox icons + * @name hide_checkboxes() + * @plugin checkbox + */ + this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); }; + /** + * toggle the node icons + * @name toggle_checkboxes() + * @plugin checkbox + */ + this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } }; + /** + * checks if a node is in an undetermined state + * @name is_undetermined(obj) + * @param {mixed} obj + * @return {Boolean} + */ + this.is_undetermined = function (obj) { + obj = this.get_node(obj); + var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data; + if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) { + return false; + } + if(!obj.state.loaded && obj.original.state.undetermined === true) { + return true; + } + for(i = 0, j = obj.children_d.length; i < j; i++) { + if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) { + return true; + } + } + return false; + }; + /** + * disable a node's checkbox + * @name disable_checkbox(obj) + * @param {mixed} obj an array can be used too + * @trigger disable_checkbox.jstree + * @plugin checkbox + */ + this.disable_checkbox = function (obj) { + var t1, t2, dom; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.disable_checkbox(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(!obj.state.checkbox_disabled) { + obj.state.checkbox_disabled = true; + if(dom && dom.length) { + dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled'); + } + /** + * triggered when an node's checkbox is disabled + * @event + * @name disable_checkbox.jstree + * @param {Object} node + * @plugin checkbox + */ + this.trigger('disable_checkbox', { 'node' : obj }); + } + }; + /** + * enable a node's checkbox + * @name enable_checkbox(obj) + * @param {mixed} obj an array can be used too + * @trigger enable_checkbox.jstree + * @plugin checkbox + */ + this.enable_checkbox = function (obj) { + var t1, t2, dom; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.enable_checkbox(obj[t1]); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(obj.state.checkbox_disabled) { + obj.state.checkbox_disabled = false; + if(dom && dom.length) { + dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled'); + } + /** + * triggered when an node's checkbox is enabled + * @event + * @name enable_checkbox.jstree + * @param {Object} node + * @plugin checkbox + */ + this.trigger('enable_checkbox', { 'node' : obj }); + } + }; + + this.activate_node = function (obj, e) { + if($(e.target).hasClass('jstree-checkbox-disabled')) { + return false; + } + if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) { + e.ctrlKey = true; + } + if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) { + return parent.activate_node.call(this, obj, e); + } + if(this.is_disabled(obj)) { + return false; + } + if(this.is_checked(obj)) { + this.uncheck_node(obj, e); + } + else { + this.check_node(obj, e); + } + this.trigger('activate_node', { 'node' : this.get_node(obj) }); + }; + + /** + * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants). + * However if these unaffected nodes are already selected their ids will be included in the returned array. + * @private + * @param {string} id the node ID + * @param {bool} checkedState should the nodes be checked or not + * @returns {Array} Array of all node id's (in this tree branch) that are checked. + */ + this._cascade_new_checked_state = function (id, checkedState) { + var self = this; + var t = this.settings.checkbox.tie_selection; + var node = this._model.data[id]; + var selectedNodeIds = []; + var selectedChildrenIds = [], i, j, selectedChildIds; + + if ( + (this.settings.checkbox.cascade_to_disabled || !node.state.disabled) && + (this.settings.checkbox.cascade_to_hidden || !node.state.hidden) + ) { + //First try and check/uncheck the children + if (node.children) { + for (i = 0, j = node.children.length; i < j; i++) { + var childId = node.children[i]; + selectedChildIds = self._cascade_new_checked_state(childId, checkedState); + selectedNodeIds = selectedNodeIds.concat(selectedChildIds); + if (selectedChildIds.indexOf(childId) > -1) { + selectedChildrenIds.push(childId); + } + } + } + + var dom = self.get_node(node, true); + + //A node's state is undetermined if some but not all of it's children are checked/selected . + var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length; + + if(node.original && node.original.state && node.original.state.undetermined) { + node.original.state.undetermined = undetermined; + } + + //If a node is undetermined then remove selected class + if (undetermined) { + node.state[ t ? 'selected' : 'checked' ] = false; + dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + //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), + //check the node and style it correctly. + else if (checkedState && selectedChildrenIds.length === node.children.length) { + node.state[ t ? 'selected' : 'checked' ] = checkedState; + selectedNodeIds.push(node.id); + + dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + else { + node.state[ t ? 'selected' : 'checked' ] = false; + dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); + } + } + else { + selectedChildIds = this.get_checked_descendants(id); + + if (node.state[ t ? 'selected' : 'checked' ]) { + selectedChildIds.push(node.id); + } + + selectedNodeIds = selectedNodeIds.concat(selectedChildIds); + } + + return selectedNodeIds; + }; + + /** + * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id) + * @name get_checked_descendants(obj) + * @param {string} id the node ID + * @return {Array} array of IDs + * @plugin checkbox + */ + this.get_checked_descendants = function (id) { + var self = this; + var t = self.settings.checkbox.tie_selection; + var node = self._model.data[id]; + + return $.vakata.array_filter(node.children_d, function(_id) { + return self._model.data[_id].state[ t ? 'selected' : 'checked' ]; + }); + }; + + /** + * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally) + * @name check_node(obj) + * @param {mixed} obj an array can be used to check multiple nodes + * @trigger check_node.jstree + * @plugin checkbox + */ + this.check_node = function (obj, e) { + if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); } + var dom, t1, t2, th; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.check_node(obj[t1], e); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(!obj.state.checked) { + obj.state.checked = true; + this._data.checkbox.selected.push(obj.id); + if(dom && dom.length) { + dom.children('.jstree-anchor').addClass('jstree-checked'); + } + /** + * triggered when an node is checked (only if tie_selection in checkbox settings is false) + * @event + * @name check_node.jstree + * @param {Object} node + * @param {Array} selected the current selection + * @param {Object} event the event (if any) that triggered this check_node + * @plugin checkbox + */ + this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); + } + }; + /** + * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally) + * @name uncheck_node(obj) + * @param {mixed} obj an array can be used to uncheck multiple nodes + * @trigger uncheck_node.jstree + * @plugin checkbox + */ + this.uncheck_node = function (obj, e) { + if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); } + var t1, t2, dom; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.uncheck_node(obj[t1], e); + } + return true; + } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { + return false; + } + dom = this.get_node(obj, true); + if(obj.state.checked) { + obj.state.checked = false; + this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id); + if(dom.length) { + dom.children('.jstree-anchor').removeClass('jstree-checked'); + } + /** + * triggered when an node is unchecked (only if tie_selection in checkbox settings is false) + * @event + * @name uncheck_node.jstree + * @param {Object} node + * @param {Array} selected the current selection + * @param {Object} event the event (if any) that triggered this uncheck_node + * @plugin checkbox + */ + this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); + } + }; + + /** + * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally) + * @name check_all() + * @trigger check_all.jstree, changed.jstree + * @plugin checkbox + */ + this.check_all = function () { + if(this.settings.checkbox.tie_selection) { return this.select_all(); } + var tmp = this._data.checkbox.selected.concat([]), i, j; + this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat(); + for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { + if(this._model.data[this._data.checkbox.selected[i]]) { + this._model.data[this._data.checkbox.selected[i]].state.checked = true; + } + } + this.redraw(true); + /** + * triggered when all nodes are checked (only if tie_selection in checkbox settings is false) + * @event + * @name check_all.jstree + * @param {Array} selected the current selection + * @plugin checkbox + */ + this.trigger('check_all', { 'selected' : this._data.checkbox.selected }); + }; + /** + * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally) + * @name uncheck_all() + * @trigger uncheck_all.jstree + * @plugin checkbox + */ + this.uncheck_all = function () { + if(this.settings.checkbox.tie_selection) { return this.deselect_all(); } + var tmp = this._data.checkbox.selected.concat([]), i, j; + for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { + if(this._model.data[this._data.checkbox.selected[i]]) { + this._model.data[this._data.checkbox.selected[i]].state.checked = false; + } + } + this._data.checkbox.selected = []; + this.element.find('.jstree-checked').removeClass('jstree-checked'); + /** + * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false) + * @event + * @name uncheck_all.jstree + * @param {Object} node the previous selection + * @param {Array} selected the current selection + * @plugin checkbox + */ + this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp }); + }; + /** + * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected) + * @name is_checked(obj) + * @param {mixed} obj + * @return {Boolean} + * @plugin checkbox + */ + this.is_checked = function (obj) { + if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); } + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + return obj.state.checked; + }; + /** + * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected) + * @name get_checked([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_checked = function (full) { + if(this.settings.checkbox.tie_selection) { return this.get_selected(full); } + return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected.slice(); + }; + /** + * 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) + * @name get_top_checked([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_top_checked = function (full) { + if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); } + var tmp = this.get_checked(true), + obj = {}, i, j, k, l; + for(i = 0, j = tmp.length; i < j; i++) { + obj[tmp[i].id] = tmp[i]; + } + for(i = 0, j = tmp.length; i < j; i++) { + for(k = 0, l = tmp[i].children_d.length; k < l; k++) { + if(obj[tmp[i].children_d[k]]) { + delete obj[tmp[i].children_d[k]]; + } + } + } + tmp = []; + for(i in obj) { + if(obj.hasOwnProperty(i)) { + tmp.push(i); + } + } + return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp; + }; + /** + * 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) + * @name get_bottom_checked([full]) + * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned + * @return {Array} + * @plugin checkbox + */ + this.get_bottom_checked = function (full) { + if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); } + var tmp = this.get_checked(true), + obj = [], i, j; + for(i = 0, j = tmp.length; i < j; i++) { + if(!tmp[i].children.length) { + obj.push(tmp[i].id); + } + } + return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj; + }; + this.load_node = function (obj, callback) { + var k, l, i, j, c, tmp; + if(!$.isArray(obj) && !this.settings.checkbox.tie_selection) { + tmp = this.get_node(obj); + if(tmp && tmp.state.loaded) { + for(k = 0, l = tmp.children_d.length; k < l; k++) { + if(this._model.data[tmp.children_d[k]].state.checked) { + c = true; + this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]); + } + } + } + } + return parent.load_node.apply(this, arguments); + }; + this.get_state = function () { + var state = parent.get_state.apply(this, arguments); + if(this.settings.checkbox.tie_selection) { return state; } + state.checkbox = this._data.checkbox.selected.slice(); + return state; + }; + this.set_state = function (state, callback) { + var res = parent.set_state.apply(this, arguments); + if(res && state.checkbox) { + if(!this.settings.checkbox.tie_selection) { + this.uncheck_all(); + var _this = this; + $.each(state.checkbox, function (i, v) { + _this.check_node(v); + }); + } + delete state.checkbox; + this.set_state(state, callback); + return false; + } + return res; + }; + this.refresh = function (skip_loading, forget_state) { + if(this.settings.checkbox.tie_selection) { + this._data.checkbox.selected = []; + } + return parent.refresh.apply(this, arguments); + }; + }; + + // include the checkbox plugin by default + // $.jstree.defaults.plugins.push("checkbox"); + + +/** + * ### Conditionalselect plugin + * + * This plugin allows defining a callback to allow or deny node selection by user input (activate node method). + */ + + /** + * 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`. + * @name $.jstree.defaults.checkbox.visible + * @plugin checkbox + */ + $.jstree.defaults.conditionalselect = function () { return true; }; + $.jstree.plugins.conditionalselect = function (options, parent) { + // own function + this.activate_node = function (obj, e) { + if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) { + return parent.activate_node.call(this, obj, e); + } + }; + }; + + +/** + * ### Contextmenu plugin + * + * Shows a context menu when a node is right-clicked. + */ + + /** + * stores all defaults for the contextmenu plugin + * @name $.jstree.defaults.contextmenu + * @plugin contextmenu + */ + $.jstree.defaults.contextmenu = { + /** + * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`. + * @name $.jstree.defaults.contextmenu.select_node + * @plugin contextmenu + */ + select_node : true, + /** + * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used. + * @name $.jstree.defaults.contextmenu.show_at_node + * @plugin contextmenu + */ + show_at_node : true, + /** + * 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). + * + * 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. + * + * * `separator_before` - a boolean indicating if there should be a separator before this item + * * `separator_after` - a boolean indicating if there should be a separator after this item + * * `_disabled` - a boolean indicating if this action should be disabled + * * `label` - a string - the name of the action (could be a function returning a string) + * * `title` - a string - an optional tooltip for the item + * * `action` - a function to be executed if this item is chosen, the function will receive + * * `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 + * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2) + * * `shortcut_label` - shortcut label (like for example `F2` for rename) + * * `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 + * + * @name $.jstree.defaults.contextmenu.items + * @plugin contextmenu + */ + items : function (o, cb) { // Could be an object directly + return { + "create" : { + "separator_before" : false, + "separator_after" : true, + "_disabled" : false, //(this.check("create_node", data.reference, {}, "last")), + "label" : "Create", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + inst.create_node(obj, {}, "last", function (new_node) { + try { + inst.edit(new_node); + } catch (ex) { + setTimeout(function () { inst.edit(new_node); },0); + } + }); + } + }, + "rename" : { + "separator_before" : false, + "separator_after" : false, + "_disabled" : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")), + "label" : "Rename", + /*! + "shortcut" : 113, + "shortcut_label" : 'F2', + "icon" : "glyphicon glyphicon-leaf", + */ + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + inst.edit(obj); + } + }, + "remove" : { + "separator_before" : false, + "icon" : false, + "separator_after" : false, + "_disabled" : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")), + "label" : "Delete", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + if(inst.is_selected(obj)) { + inst.delete_node(inst.get_selected()); + } + else { + inst.delete_node(obj); + } + } + }, + "ccp" : { + "separator_before" : true, + "icon" : false, + "separator_after" : false, + "label" : "Edit", + "action" : false, + "submenu" : { + "cut" : { + "separator_before" : false, + "separator_after" : false, + "label" : "Cut", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + if(inst.is_selected(obj)) { + inst.cut(inst.get_top_selected()); + } + else { + inst.cut(obj); + } + } + }, + "copy" : { + "separator_before" : false, + "icon" : false, + "separator_after" : false, + "label" : "Copy", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + if(inst.is_selected(obj)) { + inst.copy(inst.get_top_selected()); + } + else { + inst.copy(obj); + } + } + }, + "paste" : { + "separator_before" : false, + "icon" : false, + "_disabled" : function (data) { + return !$.jstree.reference(data.reference).can_paste(); + }, + "separator_after" : false, + "label" : "Paste", + "action" : function (data) { + var inst = $.jstree.reference(data.reference), + obj = inst.get_node(data.reference); + inst.paste(obj); + } + } + } + } + }; + } + }; + + $.jstree.plugins.contextmenu = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + + var last_ts = 0, cto = null, ex, ey; + this.element + .on("init.jstree loading.jstree ready.jstree", $.proxy(function () { + this.get_container_ul().addClass('jstree-contextmenu'); + }, this)) + .on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) { + if (e.target.tagName.toLowerCase() === 'input') { + return; + } + e.preventDefault(); + last_ts = e.ctrlKey ? +new Date() : 0; + if(data || cto) { + last_ts = (+new Date()) + 10000; + } + if(cto) { + clearTimeout(cto); + } + if(!this.is_loading(e.currentTarget)) { + this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e); + } + }, this)) + .on("click.jstree", ".jstree-anchor", $.proxy(function (e) { + if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click + $.vakata.context.hide(); + } + last_ts = 0; + }, this)) + .on("touchstart.jstree", ".jstree-anchor", function (e) { + if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) { + return; + } + ex = e.originalEvent.changedTouches[0].clientX; + ey = e.originalEvent.changedTouches[0].clientY; + cto = setTimeout(function () { + $(e.currentTarget).trigger('contextmenu', true); + }, 750); + }) + .on('touchmove.vakata.jstree', function (e) { + if(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)) { + clearTimeout(cto); + $.vakata.context.hide(); + } + }) + .on('touchend.vakata.jstree', function (e) { + if(cto) { + clearTimeout(cto); + } + }); + + /*! + if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) { + var el = null, tm = null; + this.element + .on("touchstart", ".jstree-anchor", function (e) { + el = e.currentTarget; + tm = +new Date(); + $(document).one("touchend", function (e) { + e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset); + e.currentTarget = e.target; + tm = ((+(new Date())) - tm); + if(e.target === el && tm > 600 && tm < 1000) { + e.preventDefault(); + $(el).trigger('contextmenu', e); + } + el = null; + tm = null; + }); + }); + } + */ + $(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) { + this._data.contextmenu.visible = false; + $(data.reference).removeClass('jstree-context'); + }, this)); + }; + this.teardown = function () { + if(this._data.contextmenu.visible) { + $.vakata.context.hide(); + } + parent.teardown.call(this); + }; + + /** + * prepare and show the context menu for a node + * @name show_contextmenu(obj [, x, y]) + * @param {mixed} obj the node + * @param {Number} x the x-coordinate relative to the document to show the menu at + * @param {Number} y the y-coordinate relative to the document to show the menu at + * @param {Object} e the event if available that triggered the contextmenu + * @plugin contextmenu + * @trigger show_contextmenu.jstree + */ + this.show_contextmenu = function (obj, x, y, e) { + obj = this.get_node(obj); + if(!obj || obj.id === $.jstree.root) { return false; } + var s = this.settings.contextmenu, + d = this.get_node(obj, true), + a = d.children(".jstree-anchor"), + o = false, + i = false; + if(s.show_at_node || x === undefined || y === undefined) { + o = a.offset(); + x = o.left; + y = o.top + this._data.core.li_height; + } + if(this.settings.contextmenu.select_node && !this.is_selected(obj)) { + this.activate_node(obj, e); + } + + i = s.items; + if($.isFunction(i)) { + i = i.call(this, obj, $.proxy(function (i) { + this._show_contextmenu(obj, x, y, i); + }, this)); + } + if($.isPlainObject(i)) { + this._show_contextmenu(obj, x, y, i); + } + }; + /** + * show the prepared context menu for a node + * @name _show_contextmenu(obj, x, y, i) + * @param {mixed} obj the node + * @param {Number} x the x-coordinate relative to the document to show the menu at + * @param {Number} y the y-coordinate relative to the document to show the menu at + * @param {Number} i the object of items to show + * @plugin contextmenu + * @trigger show_contextmenu.jstree + * @private + */ + this._show_contextmenu = function (obj, x, y, i) { + var d = this.get_node(obj, true), + a = d.children(".jstree-anchor"); + $(document).one("context_show.vakata.jstree", $.proxy(function (e, data) { + var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu'; + $(data.element).addClass(cls); + a.addClass('jstree-context'); + }, this)); + this._data.contextmenu.visible = true; + $.vakata.context.show(a, { 'x' : x, 'y' : y }, i); + /** + * triggered when the contextmenu is shown for a node + * @event + * @name show_contextmenu.jstree + * @param {Object} node the node + * @param {Number} x the x-coordinate of the menu relative to the document + * @param {Number} y the y-coordinate of the menu relative to the document + * @plugin contextmenu + */ + this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y }); + }; + }; + + // contextmenu helper + (function ($) { + var right_to_left = false, + vakata_context = { + element : false, + reference : false, + position_x : 0, + position_y : 0, + items : [], + html : "", + is_visible : false + }; + + $.vakata.context = { + settings : { + hide_onmouseleave : 0, + icons : true + }, + _trigger : function (event_name) { + $(document).triggerHandler("context_" + event_name + ".vakata", { + "reference" : vakata_context.reference, + "element" : vakata_context.element, + "position" : { + "x" : vakata_context.position_x, + "y" : vakata_context.position_y + } + }); + }, + _execute : function (i) { + i = vakata_context.items[i]; + return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, { + "item" : i, + "reference" : vakata_context.reference, + "element" : vakata_context.element, + "position" : { + "x" : vakata_context.position_x, + "y" : vakata_context.position_y + } + }) : false; + }, + _parse : function (o, is_callback) { + if(!o) { return false; } + if(!is_callback) { + vakata_context.html = ""; + vakata_context.items = []; + } + var str = "", + sep = false, + tmp; + + if(is_callback) { str += "<"+"ul>"; } + $.each(o, function (i, val) { + if(!val) { return true; } + vakata_context.items.push(val); + if(!sep && val.separator_before) { + str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>"; + } + sep = false; + str += "<"+"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+"' ":'')+">"; + str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">"; + if($.vakata.context.settings.icons) { + str += "<"+"i "; + if(val.icon) { + if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; } + else { str += " class='" + val.icon + "' "; } + } + str += "><"+"/i><"+"span class='vakata-contextmenu-sep'> <"+"/span>"; + } + str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' '+ (val.shortcut_label || '') +'':'') + "<"+"/a>"; + if(val.submenu) { + tmp = $.vakata.context._parse(val.submenu, true); + if(tmp) { str += tmp; } + } + str += "<"+"/li>"; + if(val.separator_after) { + str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>"; + sep = true; + } + }); + str = str.replace(/
  • <\/li\>$/,""); + if(is_callback) { str += ""; } + /** + * triggered on the document when the contextmenu is parsed (HTML is built) + * @event + * @plugin contextmenu + * @name context_parse.vakata + * @param {jQuery} reference the element that was right clicked + * @param {jQuery} element the DOM element of the menu itself + * @param {Object} position the x & y coordinates of the menu + */ + if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); } + return str.length > 10 ? str : false; + }, + _show_submenu : function (o) { + o = $(o); + if(!o.length || !o.children("ul").length) { return; } + var e = o.children("ul"), + xl = o.offset().left, + x = xl + o.outerWidth(), + y = o.offset().top, + w = e.width(), + h = e.height(), + dw = $(window).width() + $(window).scrollLeft(), + dh = $(window).height() + $(window).scrollTop(); + // може да се спести е една проверка - дали няма някой от класовете вече нагоре + if(right_to_left) { + o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left"); + } + else { + o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right"); + } + if(y + h + 10 > dh) { + e.css("bottom","-1px"); + } + + //if does not fit - stick it to the side + if (o.hasClass('vakata-context-right')) { + if (xl < w) { + e.css("margin-right", xl - w); + } + } else { + if (dw - x < w) { + e.css("margin-left", dw - x - w); + } + } + + e.show(); + }, + show : function (reference, position, data) { + var o, e, x, y, w, h, dw, dh, cond = true; + if(vakata_context.element && vakata_context.element.length) { + vakata_context.element.width(''); + } + switch(cond) { + case (!position && !reference): + return false; + case (!!position && !!reference): + vakata_context.reference = reference; + vakata_context.position_x = position.x; + vakata_context.position_y = position.y; + break; + case (!position && !!reference): + vakata_context.reference = reference; + o = reference.offset(); + vakata_context.position_x = o.left + reference.outerHeight(); + vakata_context.position_y = o.top; + break; + case (!!position && !reference): + vakata_context.position_x = position.x; + vakata_context.position_y = position.y; + break; + } + if(!!reference && !data && $(reference).data('vakata_contextmenu')) { + data = $(reference).data('vakata_contextmenu'); + } + if($.vakata.context._parse(data)) { + vakata_context.element.html(vakata_context.html); + } + if(vakata_context.items.length) { + vakata_context.element.appendTo(document.body); + e = vakata_context.element; + x = vakata_context.position_x; + y = vakata_context.position_y; + w = e.width(); + h = e.height(); + dw = $(window).width() + $(window).scrollLeft(); + dh = $(window).height() + $(window).scrollTop(); + if(right_to_left) { + x -= (e.outerWidth() - $(reference).outerWidth()); + if(x < $(window).scrollLeft() + 20) { + x = $(window).scrollLeft() + 20; + } + } + if(x + w + 20 > dw) { + x = dw - (w + 20); + } + if(y + h + 20 > dh) { + y = dh - (h + 20); + } + + vakata_context.element + .css({ "left" : x, "top" : y }) + .show() + .find('a').first().focus().parent().addClass("vakata-context-hover"); + vakata_context.is_visible = true; + /** + * triggered on the document when the contextmenu is shown + * @event + * @plugin contextmenu + * @name context_show.vakata + * @param {jQuery} reference the element that was right clicked + * @param {jQuery} element the DOM element of the menu itself + * @param {Object} position the x & y coordinates of the menu + */ + $.vakata.context._trigger("show"); + } + }, + hide : function () { + if(vakata_context.is_visible) { + vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach(); + vakata_context.is_visible = false; + /** + * triggered on the document when the contextmenu is hidden + * @event + * @plugin contextmenu + * @name context_hide.vakata + * @param {jQuery} reference the element that was right clicked + * @param {jQuery} element the DOM element of the menu itself + * @param {Object} position the x & y coordinates of the menu + */ + $.vakata.context._trigger("hide"); + } + } + }; + $(function () { + right_to_left = $(document.body).css("direction") === "rtl"; + var to = false; + + vakata_context.element = $("
      "); + vakata_context.element + .on("mouseenter", "li", function (e) { + e.stopImmediatePropagation(); + + if($.contains(this, e.relatedTarget)) { + // премахнато заради delegate mouseleave по-долу + // $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); + return; + } + + if(to) { clearTimeout(to); } + vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(); + + $(this) + .siblings().find("ul").hide().end().end() + .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover"); + $.vakata.context._show_submenu(this); + }) + // тестово - дали не натоварва? + .on("mouseleave", "li", function (e) { + if($.contains(this, e.relatedTarget)) { return; } + $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover"); + }) + .on("mouseleave", function (e) { + $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); + if($.vakata.context.settings.hide_onmouseleave) { + to = setTimeout( + (function (t) { + return function () { $.vakata.context.hide(); }; + }(this)), $.vakata.context.settings.hide_onmouseleave); + } + }) + .on("click", "a", function (e) { + e.preventDefault(); + //}) + //.on("mouseup", "a", function (e) { + if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) { + $.vakata.context.hide(); + } + }) + .on('keydown', 'a', function (e) { + var o = null; + switch(e.which) { + case 13: + case 32: + e.type = "click"; + e.preventDefault(); + $(e.currentTarget).trigger(e); + break; + case 37: + if(vakata_context.is_visible) { + vakata_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(); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 38: + if(vakata_context.is_visible) { + o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(); + if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); } + o.addClass("vakata-context-hover").children('a').focus(); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 39: + if(vakata_context.is_visible) { + vakata_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(); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 40: + if(vakata_context.is_visible) { + o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(); + if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); } + o.addClass("vakata-context-hover").children('a').focus(); + e.stopImmediatePropagation(); + e.preventDefault(); + } + break; + case 27: + $.vakata.context.hide(); + e.preventDefault(); + break; + default: + //console.log(e.which); + break; + } + }) + .on('keydown', function (e) { + e.preventDefault(); + var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent(); + if(a.parent().not('.vakata-context-disabled')) { + a.click(); + } + }); + + $(document) + .on("mousedown.vakata.jstree", function (e) { + if(vakata_context.is_visible && vakata_context.element[0] !== e.target && !$.contains(vakata_context.element[0], e.target)) { + $.vakata.context.hide(); + } + }) + .on("context_show.vakata.jstree", function (e, data) { + vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"); + if(right_to_left) { + vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl"); + } + // also apply a RTL class? + vakata_context.element.find("ul").hide().end(); + }); + }); + }($)); + // $.jstree.defaults.plugins.push("contextmenu"); + + +/** + * ### Drag'n'drop plugin + * + * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations. + */ + + /** + * stores all defaults for the drag'n'drop plugin + * @name $.jstree.defaults.dnd + * @plugin dnd + */ + $.jstree.defaults.dnd = { + /** + * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`. + * @name $.jstree.defaults.dnd.copy + * @plugin dnd + */ + copy : true, + /** + * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`. + * @name $.jstree.defaults.dnd.open_timeout + * @plugin dnd + */ + open_timeout : 500, + /** + * 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 + * @name $.jstree.defaults.dnd.is_draggable + * @plugin dnd + */ + is_draggable : true, + /** + * 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` + * @name $.jstree.defaults.dnd.check_while_dragging + * @plugin dnd + */ + check_while_dragging : true, + /** + * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false` + * @name $.jstree.defaults.dnd.always_copy + * @plugin dnd + */ + always_copy : false, + /** + * 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` + * @name $.jstree.defaults.dnd.inside_pos + * @plugin dnd + */ + inside_pos : 0, + /** + * 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 + * @name $.jstree.defaults.dnd.drag_selection + * @plugin dnd + */ + drag_selection : true, + /** + * 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. + * @name $.jstree.defaults.dnd.touch + * @plugin dnd + */ + touch : true, + /** + * 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. + * @name $.jstree.defaults.dnd.large_drop_target + * @plugin dnd + */ + large_drop_target : false, + /** + * 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". + * @name $.jstree.defaults.dnd.large_drag_target + * @plugin dnd + */ + large_drag_target : false, + /** + * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls. + * @reference http://caniuse.com/#feat=dragndrop + * @name $.jstree.defaults.dnd.use_html5 + * @plugin dnd + */ + use_html5: false + }; + var drg, elm; + // TODO: now check works by checking for each node individually, how about max_children, unique, etc? + $.jstree.plugins.dnd = function (options, parent) { + this.init = function (el, options) { + parent.init.call(this, el, options); + this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span')); + }; + this.bind = function () { + parent.bind.call(this); + + this.element + .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) { + if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) { + return true; + } + if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) { + return true; + } + var obj = this.get_node(e.target), + mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1, + txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget)); + if(this.settings.core.force_text) { + txt = $.vakata.html.escape(txt); + } + if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") && + (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))) + ) { + drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] }; + elm = e.currentTarget; + if (this.settings.dnd.use_html5) { + $.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg }); + } else { + this.element.trigger('mousedown.jstree'); + return $.vakata.dnd.start(e, drg, '
      ' + txt + '
      '); + } + } + }, this)); + if (this.settings.dnd.use_html5) { + this.element + .on('dragover.jstree', function (e) { + e.preventDefault(); + $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); + return false; + }) + //.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) { + // e.preventDefault(); + // $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); + // return false; + // }, this)) + .on('drop.jstree', $.proxy(function (e) { + e.preventDefault(); + $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); + return false; + }, this)); + } + }; + this.redraw_node = function(obj, deep, callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if (obj && this.settings.dnd.use_html5) { + if (this.settings.dnd.large_drag_target) { + obj.setAttribute('draggable', true); + } else { + var i, j, tmp = null; + for(i = 0, j = obj.childNodes.length; i < j; i++) { + if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { + tmp = obj.childNodes[i]; + break; + } + } + if(tmp) { + tmp.setAttribute('draggable', true); + } + } + } + return obj; + }; + }; + + $(function() { + // bind only once for all instances + var lastmv = false, + laster = false, + lastev = false, + opento = false, + marker = $('
       
      ').hide(); //.appendTo('body'); + + $(document) + .on('dragover.vakata.jstree', function (e) { + if (elm) { + $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); + } + }) + .on('drop.vakata.jstree', function (e) { + if (elm) { + $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); + elm = null; + drg = null; + } + }) + .on('dnd_start.vakata.jstree', function (e, data) { + lastmv = false; + lastev = false; + if(!data || !data.data || !data.data.jstree) { return; } + marker.appendTo(document.body); //.show(); + }) + .on('dnd_move.vakata.jstree', function (e, data) { + var isDifferentNode = data.event.target !== lastev.target; + if(opento) { + if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { + clearTimeout(opento); + } + } + if(!data || !data.data || !data.data.jstree) { return; } + + // if we are hovering the marker image do nothing (can happen on "inside" drags) + if(data.event.target.id && data.event.target.id === 'jstree-marker') { + return; + } + lastev = data.event; + + var ins = $.jstree.reference(data.event.target), + ref = false, + off = false, + rel = false, + tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn; + // if we are over an instance + if(ins && ins._data && ins._data.dnd) { + marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )); + is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))); + data.helper + .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )) + .find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ](); + + // if are hovering the container itself add a new root node + //console.log(data.event); + if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) { + ok = true; + for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { + ok = 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) }); + if(!ok) { break; } + } + if(ok) { + lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' }; + marker.hide(); + data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); + if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { + data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; + } + return; + } + } + else { + // if we are hovering a tree node + ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor'); + if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) { + off = ref.offset(); + rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top; + h = ref.outerHeight(); + if(rel < h / 3) { + o = ['b', 'i', 'a']; + } + else if(rel > h - h / 3) { + o = ['a', 'i', 'b']; + } + else { + o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a']; + } + $.each(o, function (j, v) { + switch(v) { + case 'b': + l = off.left - 6; + t = off.top; + p = ins.get_parent(ref); + i = ref.parent().index(); + break; + case 'i': + ip = ins.settings.dnd.inside_pos; + tm = ins.get_node(ref.parent()); + l = off.left - 2; + t = off.top + h / 2 + 1; + p = tm.id; + i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length)); + break; + case 'a': + l = off.left - 6; + t = off.top + h; + p = ins.get_parent(ref); + i = ref.parent().index() + 1; + break; + } + ok = true; + for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { + op = 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"; + ps = i; + if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) { + pr = ins.get_node(p); + if(ps > $.inArray(data.data.nodes[t1], pr.children)) { + ps -= 1; + } + } + ok = 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) }) ); + if(!ok) { + if(ins && ins.last_error) { laster = ins.last_error(); } + break; + } + } + if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) { + if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { + if (opento) { clearTimeout(opento); } + opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout); + } + } + if(ok) { + pn = ins.get_node(p, true); + if (!pn.hasClass('.jstree-dnd-parent')) { + $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); + pn.addClass('jstree-dnd-parent'); + } + lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i }; + marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show(); + data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); + if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { + data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; + } + laster = {}; + o = true; + return false; + } + }); + if(o === true) { return; } + } + } + } + $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); + lastmv = false; + data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er'); + if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { + //data.event.originalEvent.dataTransfer.dropEffect = 'none'; + } + marker.hide(); + }) + .on('dnd_scroll.vakata.jstree', function (e, data) { + if(!data || !data.data || !data.data.jstree) { return; } + marker.hide(); + lastmv = false; + lastev = false; + data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er'); + }) + .on('dnd_stop.vakata.jstree', function (e, data) { + $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); + if(opento) { clearTimeout(opento); } + if(!data || !data.data || !data.data.jstree) { return; } + marker.hide().detach(); + var i, j, nodes = []; + if(lastmv) { + for(i = 0, j = data.data.nodes.length; i < j; i++) { + nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i]; + } + lastmv.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); + } + else { + i = $(data.event.target).closest('.jstree'); + if(i.length && laster && laster.error && laster.error === 'check') { + i = i.jstree(true); + if(i) { + i.settings.core.error.call(this, laster); + } + } + } + lastev = false; + lastmv = false; + }) + .on('keyup.jstree keydown.jstree', function (e, data) { + data = $.vakata.dnd._get(); + if(data && data.data && data.data.jstree) { + if (e.type === "keyup" && e.which === 27) { + if (opento) { clearTimeout(opento); } + lastmv = false; + laster = false; + lastev = false; + opento = false; + marker.hide().detach(); + $.vakata.dnd._clean(); + } else { + data.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' ](); + if(lastev) { + lastev.metaKey = e.metaKey; + lastev.ctrlKey = e.ctrlKey; + $.vakata.dnd._trigger('move', lastev); + } + } + } + }); + }); + + // helpers + (function ($) { + $.vakata.html = { + div : $('
      '), + escape : function (str) { + return $.vakata.html.div.text(str).html(); + }, + strip : function (str) { + return $.vakata.html.div.empty().append($.parseHTML(str)).text(); + } + }; + // private variable + var vakata_dnd = { + element : false, + target : false, + is_down : false, + is_drag : false, + helper : false, + helper_w: 0, + data : false, + init_x : 0, + init_y : 0, + scroll_l: 0, + scroll_t: 0, + scroll_e: false, + scroll_i: false, + is_touch: false + }; + $.vakata.dnd = { + settings : { + scroll_speed : 10, + scroll_proximity : 20, + helper_left : 5, + helper_top : 10, + threshold : 5, + threshold_touch : 10 + }, + _trigger : function (event_name, e, data) { + if (data === undefined) { + data = $.vakata.dnd._get(); + } + data.event = e; + $(document).triggerHandler("dnd_" + event_name + ".vakata", data); + }, + _get : function () { + return { + "data" : vakata_dnd.data, + "element" : vakata_dnd.element, + "helper" : vakata_dnd.helper + }; + }, + _clean : function () { + if(vakata_dnd.helper) { vakata_dnd.helper.remove(); } + if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } + vakata_dnd = { + element : false, + target : false, + is_down : false, + is_drag : false, + helper : false, + helper_w: 0, + data : false, + init_x : 0, + init_y : 0, + scroll_l: 0, + scroll_t: 0, + scroll_e: false, + scroll_i: false, + is_touch: false + }; + $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); + $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); + }, + _scroll : function (init_only) { + if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) { + if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } + return false; + } + if(!vakata_dnd.scroll_i) { + vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100); + return false; + } + if(init_only === true) { return false; } + + var i = vakata_dnd.scroll_e.scrollTop(), + j = vakata_dnd.scroll_e.scrollLeft(); + vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed); + vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed); + if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) { + /** + * triggered on the document when a drag causes an element to scroll + * @event + * @plugin dnd + * @name dnd_scroll.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {jQuery} event the element that is scrolling + */ + $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e); + } + }, + start : function (e, data, html) { + if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { + e.pageX = e.originalEvent.changedTouches[0].pageX; + e.pageY = e.originalEvent.changedTouches[0].pageY; + e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); + } + if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); } + try { + e.currentTarget.unselectable = "on"; + e.currentTarget.onselectstart = function() { return false; }; + if(e.currentTarget.style) { + e.currentTarget.style.touchAction = "none"; + e.currentTarget.style.msTouchAction = "none"; + e.currentTarget.style.MozUserSelect = "none"; + } + } catch(ignore) { } + vakata_dnd.init_x = e.pageX; + vakata_dnd.init_y = e.pageY; + vakata_dnd.data = data; + vakata_dnd.is_down = true; + vakata_dnd.element = e.currentTarget; + vakata_dnd.target = e.target; + vakata_dnd.is_touch = e.type === "touchstart"; + if(html !== false) { + vakata_dnd.helper = $("
      ").html(html).css({ + "display" : "block", + "margin" : "0", + "padding" : "0", + "position" : "absolute", + "top" : "-2000px", + "lineHeight" : "16px", + "zIndex" : "10000" + }); + } + $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); + $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); + return false; + }, + drag : function (e) { + if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { + e.pageX = e.originalEvent.changedTouches[0].pageX; + e.pageY = e.originalEvent.changedTouches[0].pageY; + e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); + } + if(!vakata_dnd.is_down) { return; } + if(!vakata_dnd.is_drag) { + if( + Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) || + Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) + ) { + if(vakata_dnd.helper) { + vakata_dnd.helper.appendTo(document.body); + vakata_dnd.helper_w = vakata_dnd.helper.outerWidth(); + } + vakata_dnd.is_drag = true; + $(vakata_dnd.target).one('click.vakata', false); + /** + * triggered on the document when a drag starts + * @event + * @plugin dnd + * @name dnd_start.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {Object} event the event that caused the start (probably mousemove) + */ + $.vakata.dnd._trigger("start", e); + } + else { return; } + } + + var d = false, w = false, + dh = false, wh = false, + dw = false, ww = false, + dt = false, dl = false, + ht = false, hl = false; + + vakata_dnd.scroll_t = 0; + vakata_dnd.scroll_l = 0; + vakata_dnd.scroll_e = false; + $($(e.target).parentsUntil("body").addBack().get().reverse()) + .filter(function () { + return (/^auto|scroll$/).test($(this).css("overflow")) && + (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth); + }) + .each(function () { + var t = $(this), o = t.offset(); + if(this.scrollHeight > this.offsetHeight) { + if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } + if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } + } + if(this.scrollWidth > this.offsetWidth) { + if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } + if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } + } + if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { + vakata_dnd.scroll_e = $(this); + return false; + } + }); + + if(!vakata_dnd.scroll_e) { + d = $(document); w = $(window); + dh = d.height(); wh = w.height(); + dw = d.width(); ww = w.width(); + dt = d.scrollTop(); dl = d.scrollLeft(); + if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } + if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } + if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } + if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } + if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { + vakata_dnd.scroll_e = d; + } + } + if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); } + + if(vakata_dnd.helper) { + ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10); + hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10); + if(dh && ht + 25 > dh) { ht = dh - 50; } + if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); } + vakata_dnd.helper.css({ + left : hl + "px", + top : ht + "px" + }); + } + /** + * triggered on the document when a drag is in progress + * @event + * @plugin dnd + * @name dnd_move.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {Object} event the event that caused this to trigger (most likely mousemove) + */ + $.vakata.dnd._trigger("move", e); + return false; + }, + stop : function (e) { + if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { + e.pageX = e.originalEvent.changedTouches[0].pageX; + e.pageY = e.originalEvent.changedTouches[0].pageY; + e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); + } + if(vakata_dnd.is_drag) { + /** + * triggered on the document when a drag stops (the dragged element is dropped) + * @event + * @plugin dnd + * @name dnd_stop.vakata + * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start + * @param {DOM} element the DOM element being dragged + * @param {jQuery} helper the helper shown next to the mouse + * @param {Object} event the event that caused the stop + */ + if (e.target !== vakata_dnd.target) { + $(vakata_dnd.target).off('click.vakata'); + } + $.vakata.dnd._trigger("stop", e); + } + else { + if(e.type === "touchend" && e.target === vakata_dnd.target) { + var to = setTimeout(function () { $(e.target).click(); }, 100); + $(e.target).one('click', function() { if(to) { clearTimeout(to); } }); + } + } + $.vakata.dnd._clean(); + return false; + } + }; + }($)); + + // include the dnd plugin by default + // $.jstree.defaults.plugins.push("dnd"); + + +/** + * ### Massload plugin + * + * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading). + */ + + /** + * massload configuration + * + * It is possible to set this to a standard jQuery-like AJAX config. + * 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. + * + * 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. + * + * 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. + * + * { + * "id1" : [{ "text" : "Child of ID1", "id" : "c1" }, { "text" : "Another child of ID1", "id" : "c2" }], + * "id2" : [{ "text" : "Child of ID2", "id" : "c3" }] + * } + * + * @name $.jstree.defaults.massload + * @plugin massload + */ + $.jstree.defaults.massload = null; + $.jstree.plugins.massload = function (options, parent) { + this.init = function (el, options) { + this._data.massload = {}; + parent.init.call(this, el, options); + }; + this._load_nodes = function (nodes, callback, is_callback, force_reload) { + var s = this.settings.massload, + nodesString = JSON.stringify(nodes), + toLoad = [], + m = this._model.data, + i, j, dom; + if (!is_callback) { + for(i = 0, j = nodes.length; i < j; i++) { + if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) { + toLoad.push(nodes[i]); + dom = this.get_node(nodes[i], true); + if (dom && dom.length) { + dom.addClass("jstree-loading").attr('aria-busy',true); + } + } + } + this._data.massload = {}; + if (toLoad.length) { + if($.isFunction(s)) { + return s.call(this, toLoad, $.proxy(function (data) { + var i, j; + if(data) { + for(i in data) { + if(data.hasOwnProperty(i)) { + this._data.massload[i] = data[i]; + } + } + } + for(i = 0, j = nodes.length; i < j; i++) { + dom = this.get_node(nodes[i], true); + if (dom && dom.length) { + dom.removeClass("jstree-loading").attr('aria-busy',false); + } + } + parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }, this)); + } + if(typeof s === 'object' && s && s.url) { + s = $.extend(true, {}, s); + if($.isFunction(s.url)) { + s.url = s.url.call(this, toLoad); + } + if($.isFunction(s.data)) { + s.data = s.data.call(this, toLoad); + } + return $.ajax(s) + .done($.proxy(function (data,t,x) { + var i, j; + if(data) { + for(i in data) { + if(data.hasOwnProperty(i)) { + this._data.massload[i] = data[i]; + } + } + } + for(i = 0, j = nodes.length; i < j; i++) { + dom = this.get_node(nodes[i], true); + if (dom && dom.length) { + dom.removeClass("jstree-loading").attr('aria-busy',false); + } + } + parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }, this)) + .fail($.proxy(function (f) { + parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }, this)); + } + } + } + return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); + }; + this._load_node = function (obj, callback) { + var data = this._data.massload[obj.id], + rslt = null, dom; + if(data) { + rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data']( + obj, + typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data, + function (status) { callback.call(this, status); } + ); + dom = this.get_node(obj.id, true); + if (dom && dom.length) { + dom.removeClass("jstree-loading").attr('aria-busy',false); + } + delete this._data.massload[obj.id]; + return rslt; + } + return parent._load_node.call(this, obj, callback); + }; + }; + +/** + * ### Search plugin + * + * Adds search functionality to jsTree. + */ + + /** + * stores all defaults for the search plugin + * @name $.jstree.defaults.search + * @plugin search + */ + $.jstree.defaults.search = { + /** + * a jQuery-like AJAX config, which jstree uses if a server should be queried for results. + * + * 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. + * 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 + * @name $.jstree.defaults.search.ajax + * @plugin search + */ + ajax : false, + /** + * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`. + * @name $.jstree.defaults.search.fuzzy + * @plugin search + */ + fuzzy : false, + /** + * Indicates if the search should be case sensitive. Default is `false`. + * @name $.jstree.defaults.search.case_sensitive + * @plugin search + */ + case_sensitive : false, + /** + * 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). + * This setting can be changed at runtime when calling the search method. Default is `false`. + * @name $.jstree.defaults.search.show_only_matches + * @plugin search + */ + show_only_matches : false, + /** + * Indicates if the children of matched element are shown (when show_only_matches is true) + * This setting can be changed at runtime when calling the search method. Default is `false`. + * @name $.jstree.defaults.search.show_only_matches_children + * @plugin search + */ + show_only_matches_children : false, + /** + * 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`. + * @name $.jstree.defaults.search.close_opened_onclear + * @plugin search + */ + close_opened_onclear : true, + /** + * Indicates if only leaf nodes should be included in search results. Default is `false`. + * @name $.jstree.defaults.search.search_leaves_only + * @plugin search + */ + search_leaves_only : false, + /** + * 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). + * 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`. + * @name $.jstree.defaults.search.search_callback + * @plugin search + */ + search_callback : false + }; + + $.jstree.plugins.search = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + + this._data.search.str = ""; + this._data.search.dom = $(); + this._data.search.res = []; + this._data.search.opn = []; + this._data.search.som = false; + this._data.search.smc = false; + this._data.search.hdn = []; + + this.element + .on("search.jstree", $.proxy(function (e, data) { + if(this._data.search.som && data.res.length) { + var m = this._model.data, i, j, p = [], k, l; + for(i = 0, j = data.res.length; i < j; i++) { + if(m[data.res[i]] && !m[data.res[i]].state.hidden) { + p.push(data.res[i]); + p = p.concat(m[data.res[i]].parents); + if(this._data.search.smc) { + for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) { + if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) { + p.push(m[data.res[i]].children_d[k]); + } + } + } + } + } + p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root); + this._data.search.hdn = this.hide_all(true); + this.show_node(p, true); + this.redraw(true); + } + }, this)) + .on("clear_search.jstree", $.proxy(function (e, data) { + if(this._data.search.som && data.res.length) { + this.show_node(this._data.search.hdn, true); + this.redraw(true); + } + }, this)); + }; + /** + * used to search the tree nodes for a given string + * @name search(str [, skip_async]) + * @param {String} str the search string + * @param {Boolean} skip_async if set to true server will not be queried even if configured + * @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) + * @param {mixed} inside an optional node to whose children to limit the search + * @param {Boolean} append if set to true the results of this search are appended to the previous search + * @plugin search + * @trigger search.jstree + */ + this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) { + if(str === false || $.trim(str.toString()) === "") { + return this.clear_search(); + } + inside = this.get_node(inside); + inside = inside && inside.id ? inside.id : null; + str = str.toString(); + var s = this.settings.search, + a = s.ajax ? s.ajax : false, + m = this._model.data, + f = null, + r = [], + p = [], i, j; + if(this._data.search.res.length && !append) { + this.clear_search(); + } + if(show_only_matches === undefined) { + show_only_matches = s.show_only_matches; + } + if(show_only_matches_children === undefined) { + show_only_matches_children = s.show_only_matches_children; + } + if(!skip_async && a !== false) { + if($.isFunction(a)) { + return a.call(this, str, $.proxy(function (d) { + if(d && d.d) { d = d.d; } + this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () { + this.search(str, true, show_only_matches, inside, append, show_only_matches_children); + }); + }, this), inside); + } + else { + a = $.extend({}, a); + if(!a.data) { a.data = {}; } + a.data.str = str; + if(inside) { + a.data.inside = inside; + } + if (this._data.search.lastRequest) { + this._data.search.lastRequest.abort(); + } + this._data.search.lastRequest = $.ajax(a) + .fail($.proxy(function () { + this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) }; + this.settings.core.error.call(this, this._data.core.last_error); + }, this)) + .done($.proxy(function (d) { + if(d && d.d) { d = d.d; } + this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () { + this.search(str, true, show_only_matches, inside, append, show_only_matches_children); + }); + }, this)); + return this._data.search.lastRequest; + } + } + if(!append) { + this._data.search.str = str; + this._data.search.dom = $(); + this._data.search.res = []; + this._data.search.opn = []; + this._data.search.som = show_only_matches; + this._data.search.smc = show_only_matches_children; + } + + f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy }); + $.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) { + var v = m[i]; + if(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) ) ) { + r.push(i); + p = p.concat(v.parents); + } + }); + if(r.length) { + p = $.vakata.array_unique(p); + for(i = 0, j = p.length; i < j; i++) { + if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) { + this._data.search.opn.push(p[i]); + } + } + if(!append) { + this._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(', #'))); + this._data.search.res = r; + } + else { + this._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(', #')))); + this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r)); + } + this._data.search.dom.children(".jstree-anchor").addClass('jstree-search'); + } + /** + * triggered after search is complete + * @event + * @name search.jstree + * @param {jQuery} nodes a jQuery collection of matching nodes + * @param {String} str the search string + * @param {Array} res a collection of objects represeing the matching nodes + * @plugin search + */ + this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches }); + }; + /** + * used to clear the last search (removes classes and shows all nodes if filtering is on) + * @name clear_search() + * @plugin search + * @trigger clear_search.jstree + */ + this.clear_search = function () { + if(this.settings.search.close_opened_onclear) { + this.close_node(this._data.search.opn, 0); + } + /** + * triggered after search is complete + * @event + * @name clear_search.jstree + * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search) + * @param {String} str the search string (the last search string) + * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search) + * @plugin search + */ + this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res }); + if(this._data.search.res.length) { + this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) { + return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); + }).join(', #'))); + this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search"); + } + this._data.search.str = ""; + this._data.search.res = []; + this._data.search.opn = []; + this._data.search.dom = $(); + }; + + this.redraw_node = function(obj, deep, callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if(obj) { + if($.inArray(obj.id, this._data.search.res) !== -1) { + var i, j, tmp = null; + for(i = 0, j = obj.childNodes.length; i < j; i++) { + if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { + tmp = obj.childNodes[i]; + break; + } + } + if(tmp) { + tmp.className += ' jstree-search'; + } + } + } + return obj; + }; + }; + + // helpers + (function ($) { + // from http://kiro.me/projects/fuse.html + $.vakata.search = function(pattern, txt, options) { + options = options || {}; + options = $.extend({}, $.vakata.search.defaults, options); + if(options.fuzzy !== false) { + options.fuzzy = true; + } + pattern = options.caseSensitive ? pattern : pattern.toLowerCase(); + var MATCH_LOCATION = options.location, + MATCH_DISTANCE = options.distance, + MATCH_THRESHOLD = options.threshold, + patternLen = pattern.length, + matchmask, pattern_alphabet, match_bitapScore, search; + if(patternLen > 32) { + options.fuzzy = false; + } + if(options.fuzzy) { + matchmask = 1 << (patternLen - 1); + pattern_alphabet = (function () { + var mask = {}, + i = 0; + for (i = 0; i < patternLen; i++) { + mask[pattern.charAt(i)] = 0; + } + for (i = 0; i < patternLen; i++) { + mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1); + } + return mask; + }()); + match_bitapScore = function (e, x) { + var accuracy = e / patternLen, + proximity = Math.abs(MATCH_LOCATION - x); + if(!MATCH_DISTANCE) { + return proximity ? 1.0 : accuracy; + } + return accuracy + (proximity / MATCH_DISTANCE); + }; + } + search = function (text) { + text = options.caseSensitive ? text : text.toLowerCase(); + if(pattern === text || text.indexOf(pattern) !== -1) { + return { + isMatch: true, + score: 0 + }; + } + if(!options.fuzzy) { + return { + isMatch: false, + score: 1 + }; + } + var i, j, + textLen = text.length, + scoreThreshold = MATCH_THRESHOLD, + bestLoc = text.indexOf(pattern, MATCH_LOCATION), + binMin, binMid, + binMax = patternLen + textLen, + lastRd, start, finish, rd, charMatch, + score = 1, + locations = []; + if (bestLoc !== -1) { + scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); + bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen); + if (bestLoc !== -1) { + scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); + } + } + bestLoc = -1; + for (i = 0; i < patternLen; i++) { + binMin = 0; + binMid = binMax; + while (binMin < binMid) { + if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) { + binMin = binMid; + } else { + binMax = binMid; + } + binMid = Math.floor((binMax - binMin) / 2 + binMin); + } + binMax = binMid; + start = Math.max(1, MATCH_LOCATION - binMid + 1); + finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen; + rd = new Array(finish + 2); + rd[finish + 1] = (1 << i) - 1; + for (j = finish; j >= start; j--) { + charMatch = pattern_alphabet[text.charAt(j - 1)]; + if (i === 0) { + rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; + } else { + rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1]; + } + if (rd[j] & matchmask) { + score = match_bitapScore(i, j - 1); + if (score <= scoreThreshold) { + scoreThreshold = score; + bestLoc = j - 1; + locations.push(bestLoc); + if (bestLoc > MATCH_LOCATION) { + start = Math.max(1, 2 * MATCH_LOCATION - bestLoc); + } else { + break; + } + } + } + } + if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) { + break; + } + lastRd = rd; + } + return { + isMatch: bestLoc >= 0, + score: score + }; + }; + return txt === true ? { 'search' : search } : search(txt); + }; + $.vakata.search.defaults = { + location : 0, + distance : 100, + threshold : 0.6, + fuzzy : false, + caseSensitive : false + }; + }($)); + + // include the search plugin by default + // $.jstree.defaults.plugins.push("search"); + + +/** + * ### Sort plugin + * + * Automatically sorts all siblings in the tree according to a sorting function. + */ + + /** + * the settings function used to sort the nodes. + * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`. + * @name $.jstree.defaults.sort + * @plugin sort + */ + $.jstree.defaults.sort = function (a, b) { + //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); + return this.get_text(a) > this.get_text(b) ? 1 : -1; + }; + $.jstree.plugins.sort = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + this.element + .on("model.jstree", $.proxy(function (e, data) { + this.sort(data.parent, true); + }, this)) + .on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) { + this.sort(data.parent || data.node.parent, false); + this.redraw_node(data.parent || data.node.parent, true); + }, this)) + .on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) { + this.sort(data.parent, false); + this.redraw_node(data.parent, true); + }, this)); + }; + /** + * used to sort a node's children + * @private + * @name sort(obj [, deep]) + * @param {mixed} obj the node + * @param {Boolean} deep if set to `true` nodes are sorted recursively. + * @plugin sort + * @trigger search.jstree + */ + this.sort = function (obj, deep) { + var i, j; + obj = this.get_node(obj); + if(obj && obj.children && obj.children.length) { + obj.children.sort($.proxy(this.settings.sort, this)); + if(deep) { + for(i = 0, j = obj.children_d.length; i < j; i++) { + this.sort(obj.children_d[i], false); + } + } + } + }; + }; + + // include the sort plugin by default + // $.jstree.defaults.plugins.push("sort"); + +/** + * ### State plugin + * + * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc) + */ + + var to = false; + /** + * stores all defaults for the state plugin + * @name $.jstree.defaults.state + * @plugin state + */ + $.jstree.defaults.state = { + /** + * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`. + * @name $.jstree.defaults.state.key + * @plugin state + */ + key : 'jstree', + /** + * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`. + * @name $.jstree.defaults.state.events + * @plugin state + */ + events : 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree', + /** + * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire. + * @name $.jstree.defaults.state.ttl + * @plugin state + */ + ttl : false, + /** + * 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. + * @name $.jstree.defaults.state.filter + * @plugin state + */ + filter : false, + /** + * 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` + * @name $.jstree.defaults.state.preserve_loaded + * @plugin state + */ + preserve_loaded : false + }; + $.jstree.plugins.state = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + var bind = $.proxy(function () { + this.element.on(this.settings.state.events, $.proxy(function () { + if(to) { clearTimeout(to); } + to = setTimeout($.proxy(function () { this.save_state(); }, this), 100); + }, this)); + /** + * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore). + * @event + * @name state_ready.jstree + * @plugin state + */ + this.trigger('state_ready'); + }, this); + this.element + .on("ready.jstree", $.proxy(function (e, data) { + this.element.one("restore_state.jstree", bind); + if(!this.restore_state()) { bind(); } + }, this)); + }; + /** + * save the state + * @name save_state() + * @plugin state + */ + this.save_state = function () { + var tm = this.get_state(); + if (!this.settings.state.preserve_loaded) { + delete tm.core.loaded; + } + var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) }; + $.vakata.storage.set(this.settings.state.key, JSON.stringify(st)); + }; + /** + * restore the state from the user's computer + * @name restore_state() + * @plugin state + */ + this.restore_state = function () { + var k = $.vakata.storage.get(this.settings.state.key); + if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } } + if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; } + if(!!k && k.state) { k = k.state; } + if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); } + if(!!k) { + if (!this.settings.state.preserve_loaded) { + delete k.core.loaded; + } + this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); }); + this.set_state(k); + return true; + } + return false; + }; + /** + * clear the state on the user's computer + * @name clear_state() + * @plugin state + */ + this.clear_state = function () { + return $.vakata.storage.del(this.settings.state.key); + }; + }; + + (function ($, undefined) { + $.vakata.storage = { + // simply specifying the functions in FF throws an error + set : function (key, val) { return window.localStorage.setItem(key, val); }, + get : function (key) { return window.localStorage.getItem(key); }, + del : function (key) { return window.localStorage.removeItem(key); } + }; + }($)); + + // include the state plugin by default + // $.jstree.defaults.plugins.push("state"); + +/** + * ### Types plugin + * + * 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. + */ + + /** + * 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). + * + * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited. + * * `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. + * * `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. + * * `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. + * * `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) + * * `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) + * + * There are two predefined types: + * + * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes. + * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified. + * + * @name $.jstree.defaults.types + * @plugin types + */ + $.jstree.defaults.types = { + 'default' : {} + }; + $.jstree.defaults.types[$.jstree.root] = {}; + + $.jstree.plugins.types = function (options, parent) { + this.init = function (el, options) { + var i, j; + if(options && options.types && options.types['default']) { + for(i in options.types) { + if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) { + for(j in options.types['default']) { + if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) { + options.types[i][j] = options.types['default'][j]; + } + } + } + } + } + parent.init.call(this, el, options); + this._model.data[$.jstree.root].type = $.jstree.root; + }; + this.refresh = function (skip_loading, forget_state) { + parent.refresh.call(this, skip_loading, forget_state); + this._model.data[$.jstree.root].type = $.jstree.root; + }; + this.bind = function () { + this.element + .on('model.jstree', $.proxy(function (e, data) { + var m = this._model.data, + dpc = data.nodes, + t = this.settings.types, + i, j, c = 'default', k; + for(i = 0, j = dpc.length; i < j; i++) { + c = 'default'; + if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) { + c = m[dpc[i]].original.type; + } + if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) { + c = m[dpc[i]].data.jstree.type; + } + m[dpc[i]].type = c; + if(m[dpc[i]].icon === true && t[c].icon !== undefined) { + m[dpc[i]].icon = t[c].icon; + } + if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') { + for (k in t[c].li_attr) { + if (t[c].li_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[dpc[i]].li_attr[k] === undefined) { + m[dpc[i]].li_attr[k] = t[c].li_attr[k]; + } + else if (k === 'class') { + m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class']; + } + } + } + } + if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') { + for (k in t[c].a_attr) { + if (t[c].a_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[dpc[i]].a_attr[k] === undefined) { + m[dpc[i]].a_attr[k] = t[c].a_attr[k]; + } + else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') { + m[dpc[i]].a_attr['href'] = t[c].a_attr['href']; + } + else if (k === 'class') { + m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class']; + } + } + } + } + } + m[$.jstree.root].type = $.jstree.root; + }, this)); + parent.bind.call(this); + }; + this.get_json = function (obj, options, flat) { + var i, j, + m = this._model.data, + opt = options ? $.extend(true, {}, options, {no_id:false}) : {}, + tmp = parent.get_json.call(this, obj, opt, flat); + if(tmp === false) { return false; } + if($.isArray(tmp)) { + for(i = 0, j = tmp.length; i < j; i++) { + tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default"; + if(options && options.no_id) { + delete tmp[i].id; + if(tmp[i].li_attr && tmp[i].li_attr.id) { + delete tmp[i].li_attr.id; + } + if(tmp[i].a_attr && tmp[i].a_attr.id) { + delete tmp[i].a_attr.id; + } + } + } + } + else { + tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default"; + if(options && options.no_id) { + tmp = this._delete_ids(tmp); + } + } + return tmp; + }; + this._delete_ids = function (tmp) { + if($.isArray(tmp)) { + for(var i = 0, j = tmp.length; i < j; i++) { + tmp[i] = this._delete_ids(tmp[i]); + } + return tmp; + } + delete tmp.id; + if(tmp.li_attr && tmp.li_attr.id) { + delete tmp.li_attr.id; + } + if(tmp.a_attr && tmp.a_attr.id) { + delete tmp.a_attr.id; + } + if(tmp.children && $.isArray(tmp.children)) { + tmp.children = this._delete_ids(tmp.children); + } + return tmp; + }; + this.check = function (chk, obj, par, pos, more) { + if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } + obj = obj && obj.id ? obj : this.get_node(obj); + par = par && par.id ? par : this.get_node(par); + var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j; + m = m && m._model && m._model.data ? m._model.data : null; + switch(chk) { + case "create_node": + case "move_node": + case "copy_node": + if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) { + tmp = this.get_rules(par); + if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) { + this._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 }) }; + return false; + } + if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) { + this._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 }) }; + return false; + } + if(m && obj.children_d && obj.parents) { + d = 0; + for(i = 0, j = obj.children_d.length; i < j; i++) { + d = Math.max(d, m[obj.children_d[i]].parents.length); + } + d = d - obj.parents.length + 1; + } + if(d <= 0 || d === undefined) { d = 1; } + do { + if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) { + this._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 }) }; + return false; + } + par = this.get_node(par.parent); + tmp = this.get_rules(par); + d++; + } while(par); + } + break; + } + return true; + }; + /** + * used to retrieve the type settings object for a node + * @name get_rules(obj) + * @param {mixed} obj the node to find the rules for + * @return {Object} + * @plugin types + */ + this.get_rules = function (obj) { + obj = this.get_node(obj); + if(!obj) { return false; } + var tmp = this.get_type(obj, true); + if(tmp.max_depth === undefined) { tmp.max_depth = -1; } + if(tmp.max_children === undefined) { tmp.max_children = -1; } + if(tmp.valid_children === undefined) { tmp.valid_children = -1; } + return tmp; + }; + /** + * used to retrieve the type string or settings object for a node + * @name get_type(obj [, rules]) + * @param {mixed} obj the node to find the rules for + * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned + * @return {String|Object} + * @plugin types + */ + this.get_type = function (obj, rules) { + obj = this.get_node(obj); + return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type); + }; + /** + * used to change a node's type + * @name set_type(obj, type) + * @param {mixed} obj the node to change + * @param {String} type the new type + * @plugin types + */ + this.set_type = function (obj, type) { + var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a; + if($.isArray(obj)) { + obj = obj.slice(); + for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { + this.set_type(obj[t1], type); + } + return true; + } + t = this.settings.types; + obj = this.get_node(obj); + if(!t[type] || !obj) { return false; } + d = this.get_node(obj, true); + if (d && d.length) { + a = d.children('.jstree-anchor'); + } + old_type = obj.type; + old_icon = this.get_icon(obj); + obj.type = type; + if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) { + this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true); + } + + // remove old type props + if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') { + for (k in t[old_type].li_attr) { + if (t[old_type].li_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (k === 'class') { + m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], ''); + if (d) { d.removeClass(t[old_type].li_attr[k]); } + } + else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) { + m[obj.id].li_attr[k] = null; + if (d) { d.removeAttr(k); } + } + } + } + } + if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') { + for (k in t[old_type].a_attr) { + if (t[old_type].a_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (k === 'class') { + m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], ''); + if (a) { a.removeClass(t[old_type].a_attr[k]); } + } + else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) { + if (k === 'href') { + m[obj.id].a_attr[k] = '#'; + if (a) { a.attr('href', '#'); } + } + else { + delete m[obj.id].a_attr[k]; + if (a) { a.removeAttr(k); } + } + } + } + } + } + + // add new props + if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') { + for (k in t[type].li_attr) { + if (t[type].li_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[obj.id].li_attr[k] === undefined) { + m[obj.id].li_attr[k] = t[type].li_attr[k]; + if (d) { + if (k === 'class') { + d.addClass(t[type].li_attr[k]); + } + else { + d.attr(k, t[type].li_attr[k]); + } + } + } + else if (k === 'class') { + m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class']; + if (d) { d.addClass(t[type].li_attr[k]); } + } + } + } + } + if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') { + for (k in t[type].a_attr) { + if (t[type].a_attr.hasOwnProperty(k)) { + if (k === 'id') { + continue; + } + else if (m[obj.id].a_attr[k] === undefined) { + m[obj.id].a_attr[k] = t[type].a_attr[k]; + if (a) { + if (k === 'class') { + a.addClass(t[type].a_attr[k]); + } + else { + a.attr(k, t[type].a_attr[k]); + } + } + } + else if (k === 'href' && m[obj.id].a_attr[k] === '#') { + m[obj.id].a_attr['href'] = t[type].a_attr['href']; + if (a) { a.attr('href', t[type].a_attr['href']); } + } + else if (k === 'class') { + m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class']; + if (a) { a.addClass(t[type].a_attr[k]); } + } + } + } + } + + return true; + }; + }; + // include the types plugin by default + // $.jstree.defaults.plugins.push("types"); + + +/** + * ### Unique plugin + * + * Enforces that no nodes with the same name can coexist as siblings. + */ + + /** + * stores all defaults for the unique plugin + * @name $.jstree.defaults.unique + * @plugin unique + */ + $.jstree.defaults.unique = { + /** + * Indicates if the comparison should be case sensitive. Default is `false`. + * @name $.jstree.defaults.unique.case_sensitive + * @plugin unique + */ + case_sensitive : false, + /** + * Indicates if white space should be trimmed before the comparison. Default is `false`. + * @name $.jstree.defaults.unique.trim_whitespace + * @plugin unique + */ + trim_whitespace : false, + /** + * 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)`. + * @name $.jstree.defaults.unique.duplicate + * @plugin unique + */ + duplicate : function (name, counter) { + return name + ' (' + counter + ')'; + } + }; + + $.jstree.plugins.unique = function (options, parent) { + this.check = function (chk, obj, par, pos, more) { + if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } + obj = obj && obj.id ? obj : this.get_node(obj); + par = par && par.id ? par : this.get_node(par); + if(!par || !par.children) { return true; } + var n = chk === "rename_node" ? pos : obj.text, + c = [], + s = this.settings.unique.case_sensitive, + w = this.settings.unique.trim_whitespace, + m = this._model.data, i, j, t; + for(i = 0, j = par.children.length; i < j; i++) { + t = m[par.children[i]].text; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + c.push(t); + } + if(!s) { n = n.toLowerCase(); } + if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } + switch(chk) { + case "delete_node": + return true; + case "rename_node": + t = obj.text || ''; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + i = ($.inArray(n, c) === -1 || (obj.text && t === n)); + if(!i) { + this._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 }) }; + } + return i; + case "create_node": + i = ($.inArray(n, c) === -1); + if(!i) { + this._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 }) }; + } + return i; + case "copy_node": + i = ($.inArray(n, c) === -1); + if(!i) { + this._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 }) }; + } + return i; + case "move_node": + i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1); + if(!i) { + this._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 }) }; + } + return i; + } + return true; + }; + this.create_node = function (par, node, pos, callback, is_loaded) { + if(!node || node.text === undefined) { + if(par === null) { + par = $.jstree.root; + } + par = this.get_node(par); + if(!par) { + return parent.create_node.call(this, par, node, pos, callback, is_loaded); + } + pos = pos === undefined ? "last" : pos; + if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { + return parent.create_node.call(this, par, node, pos, callback, is_loaded); + } + if(!node) { node = {}; } + var 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 = tmp = this.get_string('New node'); + dpc = []; + for(i = 0, j = par.children.length; i < j; i++) { + t = m[par.children[i]].text; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + dpc.push(t); + } + i = 1; + t = n; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + while($.inArray(t, dpc) !== -1) { + n = cb.call(this, tmp, (++i)).toString(); + t = n; + if (!s) { + t = t.toLowerCase(); + } + if (w) { + t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + } + node.text = n; + } + return parent.create_node.call(this, par, node, pos, callback, is_loaded); + }; + }; + + // include the unique plugin by default + // $.jstree.defaults.plugins.push("unique"); + + +/** + * ### Wholerow plugin + * + * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers. + */ + + var div = document.createElement('DIV'); + div.setAttribute('unselectable','on'); + div.setAttribute('role','presentation'); + div.className = 'jstree-wholerow'; + div.innerHTML = ' '; + $.jstree.plugins.wholerow = function (options, parent) { + this.bind = function () { + parent.bind.call(this); + + this.element + .on('ready.jstree set_state.jstree', $.proxy(function () { + this.hide_dots(); + }, this)) + .on("init.jstree loading.jstree ready.jstree", $.proxy(function () { + //div.style.height = this._data.core.li_height + 'px'; + this.get_container_ul().addClass('jstree-wholerow-ul'); + }, this)) + .on("deselect_all.jstree", $.proxy(function (e, data) { + this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); + }, this)) + .on("changed.jstree", $.proxy(function (e, data) { + this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); + var tmp = false, i, j; + for(i = 0, j = data.selected.length; i < j; i++) { + tmp = this.get_node(data.selected[i], true); + if(tmp && tmp.length) { + tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); + } + } + }, this)) + .on("open_node.jstree", $.proxy(function (e, data) { + this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); + }, this)) + .on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) { + if(e.type === "hover_node" && this.is_disabled(data.node)) { return; } + this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered'); + }, this)) + .on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) { + if (this._data.contextmenu) { + e.preventDefault(); + var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp); + } + }, this)) + /*! + .on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) { + if(e.target === e.currentTarget) { + var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor"); + e.target = a[0]; + a.trigger(e); + } + }) + */ + .on("click.jstree", ".jstree-wholerow", function (e) { + e.stopImmediatePropagation(); + var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus(); + }) + .on("dblclick.jstree", ".jstree-wholerow", function (e) { + e.stopImmediatePropagation(); + var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus(); + }) + .on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) { + e.stopImmediatePropagation(); + var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); + $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus(); + }, this)) + .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) { + e.stopImmediatePropagation(); + if(!this.is_disabled(e.currentTarget)) { + this.hover_node(e.currentTarget); + } + return false; + }, this)) + .on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) { + this.dehover_node(e.currentTarget); + }, this)); + }; + this.teardown = function () { + if(this.settings.wholerow) { + this.element.find(".jstree-wholerow").remove(); + } + parent.teardown.call(this); + }; + this.redraw_node = function(obj, deep, callback, force_render) { + obj = parent.redraw_node.apply(this, arguments); + if(obj) { + var tmp = div.cloneNode(true); + //tmp.style.height = this._data.core.li_height + 'px'; + if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; } + if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; } + obj.insertBefore(tmp, obj.childNodes[0]); + } + return obj; + }; + }; + // include the wholerow plugin by default + // $.jstree.defaults.plugins.push("wholerow"); + if(window.customElements && Object && Object.create) { + var proto = Object.create(HTMLElement.prototype); + proto.createdCallback = function () { + var c = { core : {}, plugins : [] }, i; + for(i in $.jstree.plugins) { + if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) { + c.plugins.push(i); + if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) { + c[i] = JSON.parse(this.getAttribute(i)); + } + } + } + for(i in $.jstree.defaults.core) { + if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) { + c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i); + } + } + $(this).jstree(c); + }; + // proto.attributeChangedCallback = function (name, previous, value) { }; + try { + window.customElements.define("vakata-jstree", function() {}, { prototype: proto }); + } catch (ignore) { } + } + +})); \ No newline at end of file diff --git a/libs/jstree/jstree.min.js b/libs/jstree/jstree.min.js new file mode 100644 index 0000000..a53c9c5 --- /dev/null +++ b/libs/jstree/jstree.min.js @@ -0,0 +1,6 @@ +/*! jsTree - v3.3.8 - 2019-04-29 - (MIT) */ +!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a,b){"use strict";if(!a.jstree){var c=0,d=!1,e=!1,f=!1,g=[],h=a("script:last").attr("src"),i=window.document;a.jstree={version:"3.3.8",defaults:{plugins:[]},plugins:{},path:h&&-1!==h.indexOf("/")?h.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,root:"#"},a.jstree.create=function(b,d){var e=new a.jstree.core(++c),f=d;return d=a.extend(!0,{},a.jstree.defaults,d),f&&f.plugins&&(d.plugins=f.plugins),a.each(d.plugins,function(a,b){"core"!==a&&(e=e.plugin(b,d[b]))}),a(b).data("jstree",e),e.init(b,d),e},a.jstree.destroy=function(){a(".jstree:jstree").jstree("destroy"),a(i).off(".jstree")},a.jstree.core=function(a){this._id=a,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1,ellipsis:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},a.jstree.reference=function(b){var c=null,d=null;if(!b||!b.id||b.tagName&&b.nodeType||(b=b.id),!d||!d.length)try{d=a(b)}catch(e){}if(!d||!d.length)try{d=a("#"+b.replace(a.jstree.idregex,"\\$&"))}catch(e){}return d&&d.length&&(d=d.closest(".jstree")).length&&(d=d.data("jstree"))?c=d:a(".jstree").each(function(){var d=a(this).data("jstree");return d&&d._model.data[b]?(c=d,!1):void 0}),c},a.fn.jstree=function(c){var d="string"==typeof c,e=Array.prototype.slice.call(arguments,1),f=null;return c!==!0||this.length?(this.each(function(){var g=a.jstree.reference(this),h=d&&g?g[c]:null;return f=d&&h?h.apply(g,e):null,g||d||c!==b&&!a.isPlainObject(c)||a.jstree.create(this,c),(g&&!d||c===!0)&&(f=g||!1),null!==f&&f!==b?!1:void 0}),null!==f&&f!==b?f:this):!1},a.expr.pseudos.jstree=a.expr.createPseudo(function(c){return function(c){return a(c).hasClass("jstree")&&a(c).data("jstree")!==b}}),a.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:a.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,ellipsis:!1,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1,dblclick_toggle:!0,loaded_state:!1,restore_focus:!0,keyboard:{"ctrl-space":function(b){b.type="click",a(b.currentTarget).trigger(b)},enter:function(b){b.type="click",a(b.currentTarget).trigger(b)},left:function(b){if(b.preventDefault(),this.is_open(b.currentTarget))this.close_node(b.currentTarget);else{var c=this.get_parent(b.currentTarget);c&&c.id!==a.jstree.root&&this.get_node(c,!0).children(".jstree-anchor").focus()}},up:function(a){a.preventDefault();var b=this.get_prev_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").focus()},right:function(b){if(b.preventDefault(),this.is_closed(b.currentTarget))this.open_node(b.currentTarget,function(a){this.get_node(a,!0).children(".jstree-anchor").focus()});else if(this.is_open(b.currentTarget)){var c=this.get_node(b.currentTarget,!0).children(".jstree-children")[0];c&&a(this._firstChild(c)).children(".jstree-anchor").focus()}},down:function(a){a.preventDefault();var b=this.get_next_dom(a.currentTarget);b&&b.length&&b.children(".jstree-anchor").focus()},"*":function(a){this.open_all()},home:function(b){b.preventDefault();var c=this._firstChild(this.get_container_ul()[0]);c&&a(c).children(".jstree-anchor").filter(":visible").focus()},end:function(a){a.preventDefault(),this.element.find(".jstree-anchor").filter(":visible").last().focus()},f2:function(a){a.preventDefault(),this.edit(a.currentTarget)}}},a.jstree.core.prototype={plugin:function(b,c){var d=a.jstree.plugins[b];return d?(this._data[b]={},d.prototype=this,new d(c,this)):this},init:function(b,c){this._model={data:{},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this.element=a(b).addClass("jstree jstree-"+this._id),this.settings=c,this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html(""),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_container_ul().children("li").first().outerHeight()||24,this._data.core.node=this._create_prototype_node(),this.trigger("loading"),this.load_node(a.jstree.root)},destroy:function(a){if(this.trigger("destroy"),this._wrk)try{window.URL.revokeObjectURL(this._wrk),this._wrk=null}catch(b){}a||this.element.empty(),this.teardown()},_create_prototype_node:function(){var a=i.createElement("LI"),b,c;return a.setAttribute("role","treeitem"),b=i.createElement("I"),b.className="jstree-icon jstree-ocl",b.setAttribute("role","presentation"),a.appendChild(b),b=i.createElement("A"),b.className="jstree-anchor",b.setAttribute("href","#"),b.setAttribute("tabindex","-1"),c=i.createElement("I"),c.className="jstree-icon jstree-themeicon",c.setAttribute("role","presentation"),b.appendChild(c),a.appendChild(b),b=c=null,a},_kbevent_to_func:function(a){var b={8:"Backspace",9:"Tab",13:"Enter",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock",16:"Shift",17:"Ctrl",18:"Alt",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*",173:"-"},c=[];a.ctrlKey&&c.push("ctrl"),a.altKey&&c.push("alt"),a.shiftKey&&c.push("shift"),c.push(b[a.which]||a.which),c=c.sort().join("-").toLowerCase();var d=this.settings.core.keyboard,e,f;for(e in d)if(d.hasOwnProperty(e)&&(f=e,"-"!==f&&"+"!==f&&(f=f.replace("--","-MINUS").replace("+-","-MINUS").replace("++","-PLUS").replace("-+","-PLUS"),f=f.split(/-|\+/).sort().join("-").replace("MINUS","-").replace("PLUS","+").toLowerCase()),f===c))return d[e];return null},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){var b="",c=null,d=0;this.element.on("dblclick.jstree",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;if(i.selection&&i.selection.empty)i.selection.empty();else if(window.getSelection){var b=window.getSelection();try{b.removeAllRanges(),b.collapse()}catch(c){}}}).on("mousedown.jstree",a.proxy(function(a){a.target===this.element[0]&&(a.preventDefault(),d=+new Date)},this)).on("mousedown.jstree",".jstree-ocl",function(a){a.preventDefault()}).on("click.jstree",".jstree-ocl",a.proxy(function(a){this.toggle_node(a.target)},this)).on("dblclick.jstree",".jstree-anchor",a.proxy(function(a){return a.target.tagName&&"input"===a.target.tagName.toLowerCase()?!0:void(this.settings.core.dblclick_toggle&&this.toggle_node(a.target))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(b){b.preventDefault(),b.currentTarget!==i.activeElement&&a(b.currentTarget).focus(),this.activate_node(b.currentTarget,b)},this)).on("keydown.jstree",".jstree-anchor",a.proxy(function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;this._data.core.rtl&&(37===a.which?a.which=39:39===a.which&&(a.which=37));var b=this._kbevent_to_func(a);if(b){var c=b.call(this,a);if(c===!1||c===!0)return c}},this)).on("load_node.jstree",a.proxy(function(b,c){c.status&&(c.node.id!==a.jstree.root||this._data.core.loaded||(this._data.core.loaded=!0,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.trigger("loaded")),this._data.core.ready||setTimeout(a.proxy(function(){if(this.element&&!this.get_container_ul().find(".jstree-loading").length){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var b=[],c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)b=b.concat(this._model.data[this._data.core.selected[c]].parents);for(b=a.vakata.array_unique(b),c=0,d=b.length;d>c;c++)this.open_node(b[c],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}this.trigger("ready")}},this),0))},this)).on("keypress.jstree",a.proxy(function(d){if(d.target.tagName&&"input"===d.target.tagName.toLowerCase())return!0;c&&clearTimeout(c),c=setTimeout(function(){b=""},500);var e=String.fromCharCode(d.which).toLowerCase(),f=this.element.find(".jstree-anchor").filter(":visible"),g=f.index(i.activeElement)||0,h=!1;if(b+=e,b.length>1){if(f.slice(g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return}if(new RegExp("^"+e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+"+$").test(b)){if(f.slice(g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return}},this)).on("init.jstree",a.proxy(function(){var a=this.settings.core.themes;this._data.core.themes.dots=a.dots,this._data.core.themes.stripes=a.stripes,this._data.core.themes.icons=a.icons,this._data.core.themes.ellipsis=a.ellipsis,this.set_theme(a.name||"default",a.url),this.set_theme_variant(a.variant)},this)).on("loading.jstree",a.proxy(function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"](),this[this._data.core.themes.ellipsis?"show_ellipsis":"hide_ellipsis"]()},this)).on("blur.jstree",".jstree-anchor",a.proxy(function(b){this._data.core.focused=null,a(b.currentTarget).filter(".jstree-hovered").trigger("mouseleave"),this.element.attr("tabindex","0")},this)).on("focus.jstree",".jstree-anchor",a.proxy(function(b){var c=this.get_node(b.currentTarget);c&&c.id&&(this._data.core.focused=c.id),this.element.find(".jstree-hovered").not(b.currentTarget).trigger("mouseleave"),a(b.currentTarget).trigger("mouseenter"),this.element.attr("tabindex","-1")},this)).on("focus.jstree",a.proxy(function(){if(+new Date-d>500&&!this._data.core.focused&&this.settings.core.restore_focus){d=0;var a=this.get_node(this.element.attr("aria-activedescendant"),!0);a&&a.find("> .jstree-anchor").focus()}},this)).on("mouseenter.jstree",".jstree-anchor",a.proxy(function(a){this.hover_node(a.currentTarget)},this)).on("mouseleave.jstree",".jstree-anchor",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},unbind:function(){this.element.off(".jstree"),a(i).off(".jstree-"+this._id)},trigger:function(a,b){b||(b={}),b.instance=this,this.element.triggerHandler(a.replace(".jstree","")+".jstree",b)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children").first()},get_string:function(b){var c=this.settings.core.strings;return a.isFunction(c)?c.call(this,b):c&&c[b]?c[b]:b},_firstChild:function(a){a=a?a.firstChild:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_nextSibling:function(a){a=a?a.nextSibling:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_previousSibling:function(a){a=a?a.previousSibling:null;while(null!==a&&1!==a.nodeType)a=a.previousSibling;return a},get_node:function(b,c){b&&b.id&&(b=b.id),b instanceof a&&b.length&&b[0].id&&(b=b[0].id);var d;try{if(this._model.data[b])b=this._model.data[b];else if("string"==typeof b&&this._model.data[b.replace(/^#/,"")])b=this._model.data[b.replace(/^#/,"")];else if("string"==typeof b&&(d=a("#"+b.replace(a.jstree.idregex,"\\$&"),this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else if((d=this.element.find(b)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else{if(!(d=this.element.find(b)).length||!d.hasClass("jstree"))return!1;b=this._model.data[a.jstree.root]}return c&&(b=b.id===a.jstree.root?this.element:a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)),b}catch(e){return!1}},get_path:function(b,c,d){if(b=b.parents?b:this.get_node(b),!b||b.id===a.jstree.root||!b.parents)return!1;var e,f,g=[];for(g.push(d?b.id:b.text),e=0,f=b.parents.length;f>e;e++)g.push(d?b.parents[e]:this.get_text(b.parents[e]));return g=g.reverse().slice(1),c?g.join(c):g},get_next_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this._firstChild(this.get_container_ul()[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}if(b.hasClass("jstree-open")){d=this._firstChild(b.children(".jstree-children")[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);if(null!==d)return a(d)}d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return null!==d?a(d):b.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first()},get_prev_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this.get_container_ul()[0].lastChild;while(d&&0===d.offsetHeight)d=this._previousSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);if(null!==d){b=a(d);while(b.hasClass("jstree-open"))b=b.children(".jstree-children").first().children(".jstree-node:visible:last");return b}return d=b[0].parentNode.parentNode,d&&d.className&&-1!==d.className.indexOf("jstree-node")?a(d):!1},get_parent:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.parent:!1},get_children_dom:function(a){return a=this.get_node(a,!0),a[0]===this.element[0]?this.get_container_ul().children(".jstree-node"):a&&a.length?a.children(".jstree-children").children(".jstree-node"):!1},is_parent:function(a){return a=this.get_node(a),a&&(a.state.loaded===!1||a.children.length>0)},is_loaded:function(a){return a=this.get_node(a),a&&a.state.loaded},is_loading:function(a){return a=this.get_node(a),a&&a.state&&a.state.loading},is_open:function(a){return a=this.get_node(a),a&&a.state.opened},is_closed:function(a){return a=this.get_node(a),a&&this.is_parent(a)&&!a.state.opened},is_leaf:function(a){return!this.is_parent(a)},load_node:function(b,c){var d,e,f,g,h;if(a.isArray(b))return this._load_nodes(b.slice(),c),!0;if(b=this.get_node(b),!b)return c&&c.call(this,b,!1),!1;if(b.state.loaded){for(b.state.loaded=!1,f=0,g=b.parents.length;g>f;f++)this._model.data[b.parents[f]].children_d=a.vakata.array_filter(this._model.data[b.parents[f]].children_d,function(c){return-1===a.inArray(c,b.children_d)});for(d=0,e=b.children_d.length;e>d;d++)this._model.data[b.children_d[d]].state.selected&&(h=!0),delete this._model.data[b.children_d[d]];h&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(c){return-1===a.inArray(c,b.children_d)})),b.children=[],b.children_d=[],h&&this.trigger("changed",{action:"load_node",node:b,selected:this._data.core.selected})}return b.state.failed=!1,b.state.loading=!0,this.get_node(b,!0).addClass("jstree-loading").attr("aria-busy",!0),this._load_node(b,a.proxy(function(a){b=this._model.data[b.id],b.state.loading=!1,b.state.loaded=a,b.state.failed=!b.state.loaded;var d=this.get_node(b,!0),e=0,f=0,g=this._model.data,h=!1;for(e=0,f=b.children.length;f>e;e++)if(g[b.children[e]]&&!g[b.children[e]].state.hidden){h=!0;break}b.state.loaded&&d&&d.length&&(d.removeClass("jstree-closed jstree-open jstree-leaf"),h?"#"!==b.id&&d.addClass(b.state.opened?"jstree-open":"jstree-closed"):d.addClass("jstree-leaf")),d.removeClass("jstree-loading").attr("aria-busy",!1),this.trigger("load_node",{node:b,status:a}),c&&c.call(this,b,a)},this)),!0},_load_nodes:function(a,b,c,d){var e=!0,f=function(){this._load_nodes(a,b,!0)},g=this._model.data,h,i,j=[];for(h=0,i=a.length;i>h;h++)g[a[h]]&&(!g[a[h]].state.loaded&&!g[a[h]].state.failed||!c&&d)&&(this.is_loading(a[h])||this.load_node(a[h],f),e=!1);if(e){for(h=0,i=a.length;i>h;h++)g[a[h]]&&g[a[h]].state.loaded&&j.push(a[h]);b&&!b.done&&(b.call(this,j),b.done=!0)}},load_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=[],e=this._model.data,f=e[b.id].children_d,g,h;for(b.state&&!b.state.loaded&&d.push(b.id),g=0,h=f.length;h>g;g++)e[f[g]]&&e[f[g]].state&&!e[f[g]].state.loaded&&d.push(f[g]);d.length?this._load_nodes(d,function(){this.load_all(b,c)}):(c&&c.call(this,b),this.trigger("load_all",{node:b}))},_load_node:function(b,c){var d=this.settings.core.data,e,f=function g(){return 3!==this.nodeType&&8!==this.nodeType};return d?a.isFunction(d)?d.call(this,b,a.proxy(function(d){d===!1?c.call(this,!1):this["string"==typeof d?"_append_html_data":"_append_json_data"](b,"string"==typeof d?a(a.parseHTML(d)).filter(f):d,function(a){c.call(this,a)})},this)):"object"==typeof d?d.url?(d=a.extend(!0,{},d),a.isFunction(d.url)&&(d.url=d.url.call(this,b)),a.isFunction(d.data)&&(d.data=d.data.call(this,b)),a.ajax(d).done(a.proxy(function(d,e,g){var h=g.getResponseHeader("Content-Type");return h&&-1!==h.indexOf("json")||"object"==typeof d?this._append_json_data(b,d,function(a){c.call(this,a)}):h&&-1!==h.indexOf("html")||"string"==typeof d?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:g})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))},this)).fail(a.proxy(function(a){this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:a})},c.call(this,!1),this.settings.core.error.call(this,this._data.core.last_error)},this))):(e=a.isArray(d)?a.extend(!0,[],d):a.isPlainObject(d)?a.extend(!0,{},d):d,b.id===a.jstree.root?this._append_json_data(b,e,function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))):"string"==typeof d?b.id===a.jstree.root?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1)):c.call(this,!1):b.id===a.jstree.root?this._append_html_data(b,this._data.core.original_container_html.clone(!0),function(a){c.call(this,a)}):c.call(this,!1)},_node_changed:function(b){b=this.get_node(b),b&&-1===a.inArray(b.id,this._model.changed)&&this._model.changed.push(b.id)},_append_html_data:function(b,c,d){b=this.get_node(b),b.children=[],b.children_d=[];var e=c.is("ul")?c.children():c,f=b.id,g=[],h=[],i=this._model.data,j=i[f],k=this._data.core.selected.length,l,m,n;for(e.each(a.proxy(function(b,c){l=this._parse_model_from_html(a(c),f,j.parents.concat()),l&&(g.push(l),h.push(l),i[l].children_d.length&&(h=h.concat(i[l].children_d)))},this)),j.children=g,j.children_d=h,m=0,n=j.parents.length;n>m;m++)i[j.parents[m]].children_d=i[j.parents[m]].children_d.concat(h);this.trigger("model",{nodes:h,parent:f}),f!==a.jstree.root?(this._node_changed(f),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==k&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)},_append_json_data:function(b,c,d,e){if(null!==this.element){b=this.get_node(b),b.children=[],b.children_d=[],c.d&&(c=c.d,"string"==typeof c&&(c=JSON.parse(c))),a.isArray(c)||(c=[c]);var f=null,g={df:this._model.default_state,dat:c,par:b.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},h=this,i=function(a,b){a.data&&(a=a.data);var c=a.dat,d=a.par,e=[],f=[],g=[],i=a.df,j=a.t_id,k=a.t_cnt,l=a.m,m=l[d],n=a.sel,o,p,q,r,s=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f,h,j,k,m={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in i)i.hasOwnProperty(f)&&(m.state[f]=i[f]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(m.icon=a.data.jstree.icon),(m.icon===b||null===m.icon||""===m.icon)&&(m.icon=!0),a&&a.data&&(m.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(m.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(m.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(m.li_attr[f]=a.li_attr[f]);if(m.li_attr.id||(m.li_attr.id=e),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(m.a_attr[f]=a.a_attr[f]);for(a&&a.children&&a.children===!0&&(m.state.loaded=!1,m.children=[],m.children_d=[]),l[m.id]=m,f=0,h=m.children.length;h>f;f++)j=s(l[m.children[f]],m.id,d),k=l[j],m.children_d.push(j),k.children_d.length&&(m.children_d=m.children_d.concat(k.children_d));return delete a.data,delete a.children,l[m.id].original=a,m.state.selected&&g.push(m.id),m.id},t=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,h,m,n,o;do e="j"+j+"_"+ ++k;while(l[e]);o={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in i)i.hasOwnProperty(f)&&(o.state[f]=i[f]);if(a&&a.id&&(o.id=a.id.toString()),a&&a.text&&(o.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(o.icon=a.data.jstree.icon),(o.icon===b||null===o.icon||""===o.icon)&&(o.icon=!0),a&&a.data&&(o.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(o.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(o.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(o.li_attr[f]=a.li_attr[f]);if(o.li_attr.id&&!o.id&&(o.id=o.li_attr.id.toString()),o.id||(o.id=e),o.li_attr.id||(o.li_attr.id=o.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(o.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,h=a.children.length;h>f;f++)m=t(a.children[f],o.id,d),n=l[m],o.children.push(m),n.children_d.length&&(o.children_d=o.children_d.concat(n.children_d));o.children_d=o.children_d.concat(o.children)}return a&&a.children&&a.children===!0&&(o.state.loaded=!1,o.children=[],o.children_d=[]),delete a.data,delete a.children,o.original=a,l[o.id]=o,o.state.selected&&g.push(o.id),o.id};if(c.length&&c[0].id!==b&&c[0].parent!==b){for(p=0,q=c.length;q>p;p++)c[p].children||(c[p].children=[]),c[p].state||(c[p].state={}),l[c[p].id.toString()]=c[p];for(p=0,q=c.length;q>p;p++)l[c[p].parent.toString()]?(l[c[p].parent.toString()].children.push(c[p].id.toString()),m.children_d.push(c[p].id.toString())):"undefined"!=typeof h&&(h._data.core.last_error={error:"parse",plugin:"core",id:"core_07",reason:"Node with invalid parent",data:JSON.stringify({id:c[p].id.toString(),parent:c[p].parent.toString()})},h.settings.core.error.call(h,h._data.core.last_error));for(p=0,q=m.children.length;q>p;p++)o=s(l[m.children[p]],d,m.parents.concat()),f.push(o),l[o].children_d.length&&(f=f.concat(l[o].children_d));for(p=0,q=m.parents.length;q>p;p++)l[m.parents[p]].children_d=l[m.parents[p]].children_d.concat(f);r={cnt:k,mod:l,sel:n,par:d,dpc:f,add:g}}else{for(p=0,q=c.length;q>p;p++)o=t(c[p],d,m.parents.concat()),o&&(e.push(o),f.push(o),l[o].children_d.length&&(f=f.concat(l[o].children_d)));for(m.children=e,m.children_d=f,p=0,q=m.parents.length;q>p;p++)l[m.parents[p]].children_d=l[m.parents[p]].children_d.concat(f);r={cnt:k,mod:l,sel:n,par:d,dpc:f,add:g}}return"undefined"!=typeof window&&"undefined"!=typeof window.document?r:void postMessage(r)},j=function(b,c){if(null!==this.element){this._cnt=b.cnt;var e,f=this._model.data;for(e in f)f.hasOwnProperty(e)&&f[e].state&&f[e].state.loading&&b.mod[e]&&(b.mod[e].state.loading=!0);if(this._model.data=b.mod,c){var g,h=b.add,i=b.sel,j=this._data.core.selected.slice();if(f=this._model.data,i.length!==j.length||a.vakata.array_unique(i.concat(j)).length!==i.length){for(e=0,g=i.length;g>e;e++)-1===a.inArray(i[e],h)&&-1===a.inArray(i[e],j)&&(f[i[e]].state.selected=!1);for(e=0,g=j.length;g>e;e++)-1===a.inArray(j[e],i)&&(f[j[e]].state.selected=!0)}}b.add.length&&(this._data.core.selected=this._data.core.selected.concat(b.add)),this.trigger("model",{nodes:b.dpc,parent:b.par}),b.par!==a.jstree.root?(this._node_changed(b.par),this.redraw()):this.redraw(!0),b.add.length&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)}};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker)try{null===this._wrk&&(this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+i.toString()],{type:"text/javascript"}))),!this._data.core.working||e?(this._data.core.working=!0,f=new window.Worker(this._wrk),f.onmessage=a.proxy(function(a){j.call(this,a.data,!0);try{f.terminate(),f=null}catch(b){}this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1},this),g.par?f.postMessage(g):this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1):this._data.core.worker_queue.push([b,c,d,!0])}catch(k){j.call(this,i(g),!1),this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}else j.call(this,i(g),!1)}},_parse_model_from_html:function(c,d,e){e=e?[].concat(e):[],d&&e.unshift(d);var f,g,h=this._model.data,i={id:!1,text:!1,icon:!0,parent:d,parents:e,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},j,k,l;for(j in this._model.default_state)this._model.default_state.hasOwnProperty(j)&&(i.state[j]=this._model.default_state[j]);if(k=a.vakata.attributes(c,!0),a.each(k,function(b,c){return c=a.trim(c),c.length?(i.li_attr[b]=c,void("id"===b&&(i.id=c.toString()))):!0}),k=c.children("a").first(),k.length&&(k=a.vakata.attributes(k,!0),a.each(k,function(b,c){c=a.trim(c),c.length&&(i.a_attr[b]=c)})),k=c.children("a").first().length?c.children("a").first().clone():c.clone(),k.children("ins, i, ul").remove(),k=k.html(),k=a("
      ").html(k),i.text=this.settings.core.force_text?k.text():k.html(),k=c.data(),i.data=k?a.extend(!0,{},k):null,i.state.opened=c.hasClass("jstree-open"),i.state.selected=c.children("a").hasClass("jstree-clicked"),i.state.disabled=c.children("a").hasClass("jstree-disabled"),i.data&&i.data.jstree)for(j in i.data.jstree)i.data.jstree.hasOwnProperty(j)&&(i.state[j]=i.data.jstree[j]);k=c.children("a").children(".jstree-themeicon"),k.length&&(i.icon=k.hasClass("jstree-themeicon-hidden")?!1:k.attr("rel")),i.state.icon!==b&&(i.icon=i.state.icon),(i.icon===b||null===i.icon||""===i.icon)&&(i.icon=!0),k=c.children("ul").children("li");do l="j"+this._id+"_"+ ++this._cnt;while(h[l]);return i.id=i.li_attr.id?i.li_attr.id.toString():l,k.length?(k.each(a.proxy(function(b,c){f=this._parse_model_from_html(a(c),i.id,e),g=this._model.data[f],i.children.push(f),g.children_d.length&&(i.children_d=i.children_d.concat(g.children_d))},this)),i.children_d=i.children_d.concat(i.children)):c.hasClass("jstree-closed")&&(i.state.loaded=!1),i.li_attr["class"]&&(i.li_attr["class"]=i.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),i.a_attr["class"]&&(i.a_attr["class"]=i.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),h[i.id]=i,i.state.selected&&this._data.core.selected.push(i.id),i.id},_parse_model_from_flat_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f=this._model.data,g=this._model.default_state,h,i,j,k,l={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(h in g)g.hasOwnProperty(h)&&(l.state[h]=g[h]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(h in a.data.jstree)a.data.jstree.hasOwnProperty(h)&&(l.state[h]=a.data.jstree[h]);if(a&&"object"==typeof a.state)for(h in a.state)a.state.hasOwnProperty(h)&&(l.state[h]=a.state[h]);if(a&&"object"==typeof a.li_attr)for(h in a.li_attr)a.li_attr.hasOwnProperty(h)&&(l.li_attr[h]=a.li_attr[h]);if(l.li_attr.id||(l.li_attr.id=e),a&&"object"==typeof a.a_attr)for(h in a.a_attr)a.a_attr.hasOwnProperty(h)&&(l.a_attr[h]=a.a_attr[h]);for(a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),f[l.id]=l,h=0,i=l.children.length;i>h;h++)j=this._parse_model_from_flat_json(f[l.children[h]],l.id,d),k=f[j],l.children_d.push(j),k.children_d.length&&(l.children_d=l.children_d.concat(k.children_d));return delete a.data,delete a.children,f[l.id].original=a,l.state.selected&&this._data.core.selected.push(l.id),l.id},_parse_model_from_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,g,h,i,j=this._model.data,k=this._model.default_state,l;do e="j"+this._id+"_"+ ++this._cnt;while(j[e]);l={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in k)k.hasOwnProperty(f)&&(l.state[f]=k[f]);if(a&&a.id&&(l.id=a.id.toString()),a&&a.text&&(l.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(l.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(l.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(l.li_attr[f]=a.li_attr[f]); +if(l.li_attr.id&&!l.id&&(l.id=l.li_attr.id.toString()),l.id||(l.id=e),l.li_attr.id||(l.li_attr.id=l.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(l.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,g=a.children.length;g>f;f++)h=this._parse_model_from_json(a.children[f],l.id,d),i=j[h],l.children.push(h),i.children_d.length&&(l.children_d=l.children_d.concat(i.children_d));l.children_d=l.children.concat(l.children_d)}return a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),delete a.data,delete a.children,l.original=a,j[l.id]=l,l.state.selected&&this._data.core.selected.push(l.id),l.id},_redraw:function(){var b=this._model.force_full_redraw?this._model.data[a.jstree.root].children.concat([]):this._model.changed.concat([]),c=i.createElement("UL"),d,e,f,g=this._data.core.focused;for(e=0,f=b.length;f>e;e++)d=this.redraw_node(b[e],!0,this._model.force_full_redraw),d&&this._model.force_full_redraw&&c.appendChild(d);this._model.force_full_redraw&&(c.className=this.get_container_ul()[0].className,c.setAttribute("role","group"),this.element.empty().append(c)),null!==g&&this.settings.core.restore_focus&&(d=this.get_node(g,!0),d&&d.length&&d.children(".jstree-anchor")[0]!==i.activeElement?d.children(".jstree-anchor").focus():this._data.core.focused=null),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:b})},redraw:function(a){a&&(this._model.force_full_redraw=!0),this._redraw()},draw_children:function(b){var c=this.get_node(b),d=!1,e=!1,f=!1,g=i;if(!c)return!1;if(c.id===a.jstree.root)return this.redraw(!0);if(b=this.get_node(b,!0),!b||!b.length)return!1;if(b.children(".jstree-children").remove(),b=b[0],c.children.length&&c.state.loaded){for(f=g.createElement("UL"),f.setAttribute("role","group"),f.className="jstree-children",d=0,e=c.children.length;e>d;d++)f.appendChild(this.redraw_node(c.children[d],!0,!0));b.appendChild(f)}},redraw_node:function(b,c,d,e){var f=this.get_node(b),g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n="",o=i,p=this._model.data,q=!1,r=!1,s=null,t=0,u=0,v=!1,w=!1;if(!f)return!1;if(f.id===a.jstree.root)return this.redraw(!0);if(c=c||0===f.children.length,b=i.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(f.id[0])?"\\3"+f.id[0]+" "+f.id.substr(1).replace(a.jstree.idregex,"\\$&"):f.id.replace(a.jstree.idregex,"\\$&"))):i.getElementById(f.id))b=a(b),d||(g=b.parent().parent()[0],g===this.element[0]&&(g=null),h=b.index()),c||!f.children.length||b.children(".jstree-children").length||(c=!0),c||(j=b.children(".jstree-children")[0]),q=b.children(".jstree-anchor")[0]===i.activeElement,b.remove();else if(c=!0,!d){if(g=f.parent!==a.jstree.root?a("#"+f.parent.replace(a.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===g||g&&p[f.parent].state.opened))return!1;h=a.inArray(f.id,null===g?p[a.jstree.root].children:p[f.parent].children)}b=this._data.core.node.cloneNode(!0),n="jstree-node ";for(k in f.li_attr)if(f.li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"!==k?b.setAttribute(k,f.li_attr[k]):n+=f.li_attr[k]}for(f.a_attr.id||(f.a_attr.id=f.id+"_anchor"),b.setAttribute("aria-selected",!!f.state.selected),b.setAttribute("aria-level",f.parents.length),b.setAttribute("aria-labelledby",f.a_attr.id),f.state.disabled&&b.setAttribute("aria-disabled",!0),k=0,l=f.children.length;l>k;k++)if(!p[f.children[k]].state.hidden){v=!0;break}if(null!==f.parent&&p[f.parent]&&!f.state.hidden&&(k=a.inArray(f.id,p[f.parent].children),w=f.id,-1!==k))for(k++,l=p[f.parent].children.length;l>k;k++)if(p[p[f.parent].children[k]].state.hidden||(w=p[f.parent].children[k]),w!==f.id)break;f.state.hidden&&(n+=" jstree-hidden"),f.state.loading&&(n+=" jstree-loading"),f.state.loaded&&!v?n+=" jstree-leaf":(n+=f.state.opened&&f.state.loaded?" jstree-open":" jstree-closed",b.setAttribute("aria-expanded",f.state.opened&&f.state.loaded)),w===f.id&&(n+=" jstree-last"),b.id=f.id,b.className=n,n=(f.state.selected?" jstree-clicked":"")+(f.state.disabled?" jstree-disabled":"");for(l in f.a_attr)if(f.a_attr.hasOwnProperty(l)){if("href"===l&&"#"===f.a_attr[l])continue;"class"!==l?b.childNodes[1].setAttribute(l,f.a_attr[l]):n+=" "+f.a_attr[l]}if(n.length&&(b.childNodes[1].className="jstree-anchor "+n),(f.icon&&f.icon!==!0||f.icon===!1)&&(f.icon===!1?b.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===f.icon.indexOf("/")&&-1===f.icon.indexOf(".")?b.childNodes[1].childNodes[0].className+=" "+f.icon+" jstree-themeicon-custom":(b.childNodes[1].childNodes[0].style.backgroundImage='url("'+f.icon+'")',b.childNodes[1].childNodes[0].style.backgroundPosition="center center",b.childNodes[1].childNodes[0].style.backgroundSize="auto",b.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?b.childNodes[1].appendChild(o.createTextNode(f.text)):b.childNodes[1].innerHTML+=f.text,c&&f.children.length&&(f.state.opened||e)&&f.state.loaded){for(m=o.createElement("UL"),m.setAttribute("role","group"),m.className="jstree-children",k=0,l=f.children.length;l>k;k++)m.appendChild(this.redraw_node(f.children[k],c,!0));b.appendChild(m)}if(j&&b.appendChild(j),!d){for(g||(g=this.element[0]),k=0,l=g.childNodes.length;l>k;k++)if(g.childNodes[k]&&g.childNodes[k].className&&-1!==g.childNodes[k].className.indexOf("jstree-children")){s=g.childNodes[k];break}s||(s=o.createElement("UL"),s.setAttribute("role","group"),s.className="jstree-children",g.appendChild(s)),g=s,hf;f++)this.open_node(c[f],d,e);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(e=e===b?this.settings.core.animation:e,this.is_closed(c)?this.is_loaded(c)?(h=this.get_node(c,!0),i=this,h.length&&(e&&h.children(".jstree-children").length&&h.children(".jstree-children").stop(!0,!0),c.children.length&&!this._firstChild(h.children(".jstree-children")[0])&&this.draw_children(c),e?(this.trigger("before_open",{node:c}),h.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded",!0).children(".jstree-children").stop(!0,!0).slideDown(e,function(){this.style.display="",i.element&&i.trigger("after_open",{node:c})})):(this.trigger("before_open",{node:c}),h[0].className=h[0].className.replace("jstree-closed","jstree-open"),h[0].setAttribute("aria-expanded",!0))),c.state.opened=!0,d&&d.call(this,c,!0),h.length||this.trigger("before_open",{node:c}),this.trigger("open_node",{node:c}),e&&h.length||this.trigger("after_open",{node:c}),!0):this.is_loading(c)?setTimeout(a.proxy(function(){this.open_node(c,d,e)},this),500):void this.load_node(c,function(a,b){return b?this.open_node(a,d,e):d?d.call(this,a,!1):!1}):(d&&d.call(this,c,!1),!1)):!1},_open_to:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c,d,e=b.parents;for(c=0,d=e.length;d>c;c+=1)c!==a.jstree.root&&this.open_node(e[c],!1,0);return a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)},close_node:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.close_node(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?this.is_closed(c)?!1:(d=d===b?this.settings.core.animation:d,g=this,h=this.get_node(c,!0),c.state.opened=!1,this.trigger("close_node",{node:c}),void(h.length?d?h.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded",!1).children(".jstree-children").stop(!0,!0).slideUp(d,function(){this.style.display="",h.children(".jstree-children").remove(),g.element&&g.trigger("after_close",{node:c})}):(h[0].className=h[0].className.replace("jstree-open","jstree-closed"),h.attr("aria-expanded",!1).children(".jstree-children").remove(),this.trigger("after_close",{node:c})):this.trigger("after_close",{node:c}))):!1},toggle_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.toggle_node(b[c]);return!0}return this.is_closed(b)?this.open_node(b):this.is_open(b)?this.close_node(b):void 0},open_all:function(b,c,d){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var e=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),f,g,h;if(!e.length){for(f=0,g=b.children_d.length;g>f;f++)this.is_closed(this._model.data[b.children_d[f]])&&(this._model.data[b.children_d[f]].state.opened=!0);return this.trigger("open_all",{node:b})}d=d||e,h=this,e=this.is_closed(b)?e.find(".jstree-closed").addBack():e.find(".jstree-closed"),e.each(function(){h.open_node(this,function(a,b){b&&this.is_parent(a)&&this.open_all(a,c,d)},c||0)}),0===d.find(".jstree-closed").length&&this.trigger("open_all",{node:this.get_node(d)})},close_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),e=this,f,g;for(d.length&&(d=this.is_open(b)?d.find(".jstree-open").addBack():d.find(".jstree-open"),a(d.get().reverse()).each(function(){e.close_node(this,c||0)})),f=0,g=b.children_d.length;g>f;f++)this._model.data[b.children_d[f]].state.opened=!1;this.trigger("close_all",{node:b})},is_disabled:function(a){return a=this.get_node(a),a&&a.state&&a.state.disabled},enable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!1,this.get_node(b,!0).children(".jstree-anchor").removeClass("jstree-disabled").attr("aria-disabled",!1),void this.trigger("enable_node",{node:b})):!1},disable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!0,this.get_node(b,!0).children(".jstree-anchor").addClass("jstree-disabled").attr("aria-disabled",!0),void this.trigger("disable_node",{node:b})):!1},is_hidden:function(a){return a=this.get_node(a),a.state.hidden===!0},hide_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.hide_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden||(b.state.hidden=!0,this._node_changed(b.parent),c||this.redraw(),this.trigger("hide_node",{node:b}))):!1},show_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.show_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden&&(b.state.hidden=!1,this._node_changed(b.parent),c||this.redraw(),this.trigger("show_node",{node:b}))):!1},hide_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&!d[c].state.hidden&&(d[c].state.hidden=!0,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("hide_all",{nodes:e}),e},show_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&d[c].state.hidden&&(d[c].state.hidden=!1,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("show_all",{nodes:e}),e},activate_node:function(a,c){if(this.is_disabled(a))return!1;if(c&&"object"==typeof c||(c={}),this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==b?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!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])),this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&(!c.shiftKey||this._data.core.last_clicked&&this.get_parent(a)&&this.get_parent(a)===this._data.core.last_clicked.parent))if(c.shiftKey){var d=this.get_node(a).id,e=this._data.core.last_clicked.id,f=this.get_node(this._data.core.last_clicked.parent).children,g=!1,h,i;for(h=0,i=f.length;i>h;h+=1)f[h]===d&&(g=!g),f[h]===e&&(g=!g),this.is_disabled(f[h])||!g&&f[h]!==d&&f[h]!==e?this.deselect_node(f[h],!0,c):this.is_hidden(f[h])||this.select_node(f[h],!0,!1,c);this.trigger("changed",{action:"select_node",node:this.get_node(a),selected:this._data.core.selected,event:c})}else this.is_selected(a)?this.deselect_node(a,!1,c):this.select_node(a,!1,!1,c);else!this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&this.is_selected(a)?this.deselect_node(a,!1,c):(this.deselect_all(!0),this.select_node(a,!1,!1,c),this._data.core.last_clicked=this.get_node(a));this.trigger("activate_node",{node:this.get_node(a),event:c})},hover_node:function(a){if(a=this.get_node(a,!0),!a||!a.length||a.children(".jstree-hovered").length)return!1;var b=this.element.find(".jstree-hovered"),c=this.element;b&&b.length&&this.dehover_node(b),a.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(a)}),setTimeout(function(){c.attr("aria-activedescendant",a[0].id)},0)},dehover_node:function(a){return a=this.get_node(a,!0),a&&a.length&&a.children(".jstree-hovered").length?(a.children(".jstree-anchor").removeClass("jstree-hovered"),void this.trigger("dehover_node",{node:this.get_node(a)})):!1},select_node:function(b,c,d,e){var f,g,h,i;if(a.isArray(b)){for(b=b.slice(),g=0,h=b.length;h>g;g++)this.select_node(b[g],c,d,e);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.selected||(b.state.selected=!0,this._data.core.selected.push(b.id),d||(f=this._open_to(b)),f&&f.length&&f.attr("aria-selected",!0).children(".jstree-anchor").addClass("jstree-clicked"),this.trigger("select_node",{node:b,selected:this._data.core.selected,event:e}),c||this.trigger("changed",{action:"select_node",node:b,selected:this._data.core.selected,event:e})))):!1},deselect_node:function(b,c,d){var e,f,g;if(a.isArray(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.deselect_node(b[e],c,d);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(g=this.get_node(b,!0),void(b.state.selected&&(b.state.selected=!1,this._data.core.selected=a.vakata.array_remove_item(this._data.core.selected,b.id),g.length&&g.attr("aria-selected",!1).children(".jstree-anchor").removeClass("jstree-clicked"),this.trigger("deselect_node",{node:b,selected:this._data.core.selected,event:d}),c||this.trigger("changed",{action:"deselect_node",node:b,selected:this._data.core.selected,event:d})))):!1},select_all:function(b){var c=this._data.core.selected.concat([]),d,e;for(this._data.core.selected=this._model.data[a.jstree.root].children_d.concat(),d=0,e=this._data.core.selected.length;e>d;d++)this._model.data[this._data.core.selected[d]]&&(this._model.data[this._data.core.selected[d]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),b||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:c})},deselect_all:function(a){var b=this._data.core.selected.concat([]),c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)this._model.data[this._data.core.selected[c]]&&(this._model.data[this._data.core.selected[c]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked").parent().attr("aria-selected",!1),this.trigger("deselect_all",{selected:this._data.core.selected,node:b}),a||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:b})},is_selected:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.selected:!1},get_selected:function(b){return b?a.map(this._data.core.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.core.selected.slice()},get_top_selected:function(b){var c=this.get_selected(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},get_bottom_selected:function(b){var c=this.get_selected(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},get_state:function(){var b={core:{open:[],loaded:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},c;for(c in this._model.data)this._model.data.hasOwnProperty(c)&&c!==a.jstree.root&&(this._model.data[c].state.loaded&&this.settings.core.loaded_state&&b.core.loaded.push(c),this._model.data[c].state.opened&&b.core.open.push(c),this._model.data[c].state.selected&&b.core.selected.push(c));return b},set_state:function(c,d){if(c){if(c.core&&c.core.selected&&c.core.initial_selection===b&&(c.core.initial_selection=this._data.core.selected.concat([]).sort().join(",")),c.core){var e,f,g,h,i;if(c.core.loaded)return this.settings.core.loaded_state&&a.isArray(c.core.loaded)&&c.core.loaded.length?this._load_nodes(c.core.loaded,function(a){delete c.core.loaded,this.set_state(c,d)}):(delete c.core.loaded,this.set_state(c,d)),!1;if(c.core.open)return a.isArray(c.core.open)&&c.core.open.length?this._load_nodes(c.core.open,function(a){this.open_node(a,!1,0),delete c.core.open,this.set_state(c,d)}):(delete c.core.open,this.set_state(c,d)),!1;if(c.core.scroll)return c.core.scroll&&c.core.scroll.left!==b&&this.element.scrollLeft(c.core.scroll.left),c.core.scroll&&c.core.scroll.top!==b&&this.element.scrollTop(c.core.scroll.top),delete c.core.scroll,this.set_state(c,d),!1;if(c.core.selected)return h=this,(c.core.initial_selection===b||c.core.initial_selection===this._data.core.selected.concat([]).sort().join(","))&&(this.deselect_all(),a.each(c.core.selected,function(a,b){h.select_node(b,!1,!0)})),delete c.core.initial_selection,delete c.core.selected,this.set_state(c,d),!1;for(i in c)c.hasOwnProperty(i)&&"core"!==i&&-1===a.inArray(i,this.settings.plugins)&&delete c[i];if(a.isEmptyObject(c.core))return delete c.core,this.set_state(c,d),!1}return a.isEmptyObject(c)?(c=null,d&&d.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(b,c){this._data.core.state=c===!0?{}:this.get_state(),c&&a.isFunction(c)&&(this._data.core.state=c.call(this,this._data.core.state)),this._cnt=0,this._model.data={},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this._data.core.selected=[],this._data.core.last_clicked=null,this._data.core.focused=null;var d=this.get_container_ul()[0].className;b||(this.element.html(""),this.element.attr("aria-activedescendant","j"+this._id+"_loading")),this.load_node(a.jstree.root,function(b,c){c&&(this.get_container_ul()[0].className=d,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.set_state(a.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c=[],d=[],e=this._data.core.selected.concat([]);d.push(b.id),b.state.opened===!0&&c.push(b.id),this.get_node(b,!0).find(".jstree-open").each(function(){d.push(this.id),c.push(this.id)}),this._load_nodes(d,a.proxy(function(a){this.open_node(c,!1,0),this.select_node(e),this.trigger("refresh_node",{node:b,nodes:a})},this),!1,!0)},set_id:function(b,c){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var d,e,f=this._model.data,g=b.id;for(c=c.toString(),f[b.parent].children[a.inArray(b.id,f[b.parent].children)]=c,d=0,e=b.parents.length;e>d;d++)f[b.parents[d]].children_d[a.inArray(b.id,f[b.parents[d]].children_d)]=c;for(d=0,e=b.children.length;e>d;d++)f[b.children[d]].parent=c;for(d=0,e=b.children_d.length;e>d;d++)f[b.children_d[d]].parents[a.inArray(b.id,f[b.children_d[d]].parents)]=c;return d=a.inArray(b.id,this._data.core.selected),-1!==d&&(this._data.core.selected[d]=c),d=this.get_node(b.id,!0),d&&(d.attr("id",c),this.element.attr("aria-activedescendant")===b.id&&this.element.attr("aria-activedescendant",c)),delete f[b.id],b.id=c,b.li_attr.id=c,f[c]=b,this.trigger("set_id",{node:b,"new":b.id,old:g}),!0},get_text:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.text:!1},set_text:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.set_text(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.text=c,this.get_node(b,!0).length&&this.redraw_node(b.id),this.trigger("set_text",{obj:b,text:c}),!0):!1},get_json:function(b,c,d){if(b=this.get_node(b||a.jstree.root),!b)return!1;c&&c.flat&&!d&&(d=[]);var e={id:b.id,text:b.text,icon:this.get_icon(b),li_attr:a.extend(!0,{},b.li_attr),a_attr:a.extend(!0,{},b.a_attr),state:{},data:c&&c.no_data?!1:a.extend(!0,a.isArray(b.data)?[]:{},b.data)},f,g;if(c&&c.flat?e.parent=b.parent:e.children=[],c&&c.no_state)delete e.state;else for(f in b.state)b.state.hasOwnProperty(f)&&(e.state[f]=b.state[f]);if(c&&c.no_li_attr&&delete e.li_attr,c&&c.no_a_attr&&delete e.a_attr,c&&c.no_id&&(delete e.id,e.li_attr&&e.li_attr.id&&delete e.li_attr.id,e.a_attr&&e.a_attr.id&&delete e.a_attr.id),c&&c.flat&&b.id!==a.jstree.root&&d.push(e),!c||!c.no_children)for(f=0,g=b.children.length;g>f;f++)c&&c.flat?this.get_json(b.children[f],c,d):e.children.push(this.get_json(b.children[f],c));return c&&c.flat?d:b.id===a.jstree.root?e.children:e},create_node:function(c,d,e,f,g){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return!1;if(e=e===b?"last":e,!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(c))return this.load_node(c,function(){this.create_node(c,d,e,f,!0)});d||(d={text:this.get_string("New node")}),d="string"==typeof d?{text:d}:a.extend(!0,{},d),d.text===b&&(d.text=this.get_string("New node"));var h,i,j,k;switch(c.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":h=this.get_node(c.parent),e=a.inArray(c.id,h.children),c=h;break;case"after":h=this.get_node(c.parent),e=a.inArray(c.id,h.children)+1,c=h;break;case"inside":case"first":e=0;break;case"last":e=c.children.length;break;default:e||(e=0)}if(e>c.children.length&&(e=c.children.length),d.id||(d.id=!0),!this.check("create_node",d,c,e))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(d.id===!0&&delete d.id,d=this._parse_model_from_json(d,c.id,c.parents.concat()),!d)return!1;for(h=this.get_node(d),i=[],i.push(d),i=i.concat(h.children_d),this.trigger("model",{nodes:i,parent:c.id}),c.children_d=c.children_d.concat(i),j=0,k=c.parents.length;k>j;j++)this._model.data[c.parents[j]].children_d=this._model.data[c.parents[j]].children_d.concat(i);for(d=h,h=[],j=0,k=c.children.length;k>j;j++)h[j>=e?j+1:j]=c.children[j];return h[e]=d.id,c.children=h,this.redraw_node(c,!0),this.trigger("create_node",{node:this.get_node(d),parent:c.id,position:e}),f&&f.call(this,this.get_node(d)),d.id},rename_node:function(b,c){var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.rename_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=b.text,this.check("rename_node",b,this.get_parent(b),c)?(this.set_text(b,c),this.trigger("rename_node",{node:b,text:c,old:f}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.delete_node(b[c]);return!0}if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;if(e=this.get_node(b.parent),f=a.inArray(b.id,e.children),l=!1,!this.check("delete_node",b,e,f))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==f&&(e.children=a.vakata.array_remove(e.children,f)),g=b.children_d.concat([]),g.push(b.id),h=0,i=b.parents.length;i>h;h++)this._model.data[b.parents[h]].children_d=a.vakata.array_filter(this._model.data[b.parents[h]].children_d,function(b){return-1===a.inArray(b,g)});for(j=0,k=g.length;k>j;j++)if(this._model.data[g[j]].state.selected){l=!0;break}for(l&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(b){return-1===a.inArray(b,g)})),this.trigger("delete_node",{node:b,parent:e.id}),l&&this.trigger("changed",{action:"delete_node",node:b,selected:this._data.core.selected,parent:e.id}),j=0,k=g.length;k>j;j++)delete this._model.data[g[j]];return-1!==a.inArray(this._data.core.focused,g)&&(this._data.core.focused=null,m=this.element[0].scrollTop,n=this.element[0].scrollLeft,e.id===a.jstree.root?this._model.data[a.jstree.root].children[0]&&this.get_node(this._model.data[a.jstree.root].children[0],!0).children(".jstree-anchor").focus():this.get_node(e,!0).children(".jstree-anchor").focus(),this.element[0].scrollTop=m,this.element[0].scrollLeft=n),this.redraw_node(e,!0),!0},check:function(b,c,d,e,f){c=c&&c.id?c:this.get_node(c),d=d&&d.id?d:this.get_node(d);var g=b.match(/^move_node|copy_node|create_node$/i)?d:c,h=this.settings.core.check_callback;if("move_node"===b||"copy_node"===b){if(!(f&&f.is_multi||"move_node"!==b||a.inArray(c.id,d.children)!==e))return this._data.core.last_error={error:"check",plugin:"core",id:"core_08",reason:"Moving node to its current position",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1;if(!(f&&f.is_multi||c.id!==d.id&&("move_node"!==b||a.inArray(c.id,d.children)!==e)&&-1===a.inArray(d.id,c.children_d)))return this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1}return g&&g.data&&(g=g.data),g&&g.functions&&(g.functions[b]===!1||g.functions[b]===!0)?(g.functions[b]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})}),g.functions[b]):h===!1||a.isFunction(h)&&h.call(this,b,c,d,e,f)===!1||h&&h[b]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1):!0},last_error:function(){return this._data.core.last_error},move_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.move_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(r=this.move_node(c[j],d,e,f,g,!1,i))&&(d=r,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;if(l=(c.parent||a.jstree.root).toString(),n=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,o=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),p=!o||!o._id||this._id!==o._id,m=o&&o._id&&l&&o._model.data[l]&&o._model.data[l].children?a.inArray(c.id,o._model.data[l].children):-1,o&&o._id&&(c=o._model.data[c.id]),p)return(r=this.copy_node(c,d,e,f,g,!1,i))?(o&&o.delete_node(c),r):!1;switch(d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,n.children);break;case"after":e=a.inArray(d.id,n.children)+1;break;case"inside":case"first":e=0;break;case"last":e=n.children.length;break;default:e||(e=0)}if(e>n.children.length&&(e=n.children.length),!this.check("move_node",c,n,e,{core:!0,origin:i,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(c.parent===n.id){for(q=n.children.concat(),r=a.inArray(c.id,q),-1!==r&&(q=a.vakata.array_remove(q,r),e>r&&e--),r=[],s=0,t=q.length;t>s;s++)r[s>=e?s+1:s]=q[s];r[e]=c.id,n.children=r,this._node_changed(n.id),this.redraw(n.id===a.jstree.root)}else{for(r=c.children_d.concat(),r.push(c.id),s=0,t=c.parents.length;t>s;s++){for(q=[],w=o._model.data[c.parents[s]].children_d,u=0,v=w.length;v>u;u++)-1===a.inArray(w[u],r)&&q.push(w[u]);o._model.data[c.parents[s]].children_d=q}for(o._model.data[l].children=a.vakata.array_remove_item(o._model.data[l].children,c.id),s=0,t=n.parents.length;t>s;s++)this._model.data[n.parents[s]].children_d=this._model.data[n.parents[s]].children_d.concat(r);for(q=[],s=0,t=n.children.length;t>s;s++)q[s>=e?s+1:s]=n.children[s];for(q[e]=c.id,n.children=q,n.children_d.push(c.id),n.children_d=n.children_d.concat(c.children_d),c.parent=n.id,r=n.parents.concat(),r.unshift(n.id),w=c.parents.length,c.parents=r,r=r.concat(),s=0,t=c.children_d.length;t>s;s++)this._model.data[c.children_d[s]].parents=this._model.data[c.children_d[s]].parents.slice(0,-1*w),Array.prototype.push.apply(this._model.data[c.children_d[s]].parents,r);(l===a.jstree.root||n.id===a.jstree.root)&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||(this._node_changed(l),this._node_changed(n.id)),h||this.redraw()}return f&&f.call(this,c,n,e),this.trigger("move_node",{node:c,parent:n.id,position:e,old_parent:l,old_position:m,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id,old_instance:o,new_instance:this}),c.id},copy_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.copy_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(m=this.copy_node(c[j],d,e,f,g,!0,i))&&(d=m,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;switch(q=(c.parent||a.jstree.root).toString(),r=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,s=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),t=!s||!s._id||this._id!==s._id,s&&s._id&&(c=s._model.data[c.id]),d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,r.children);break;case"after":e=a.inArray(d.id,r.children)+1;break;case"inside":case"first":e=0;break;case"last":e=r.children.length;break;default:e||(e=0)}if(e>r.children.length&&(e=r.children.length),!this.check("copy_node",c,r,e,{core:!0,origin:i,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(p=s?s.get_json(c,{no_id:!0,no_data:!0,no_state:!0}):c,!p)return!1;if(p.id===!0&&delete p.id,p=this._parse_model_from_json(p,r.id,r.parents.concat()),!p)return!1;for(m=this.get_node(p),c&&c.state&&c.state.loaded===!1&&(m.state.loaded=!1),l=[],l.push(p),l=l.concat(m.children_d),this.trigger("model",{nodes:l,parent:r.id}),n=0,o=r.parents.length;o>n;n++)this._model.data[r.parents[n]].children_d=this._model.data[r.parents[n]].children_d.concat(l);for(l=[],n=0,o=r.children.length;o>n;n++)l[n>=e?n+1:n]=r.children[n];return l[e]=m.id,r.children=l,r.children_d.push(m.id),r.children_d=r.children_d.concat(m.children_d),r.id===a.jstree.root&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||this._node_changed(r.id),h||this.redraw(r.id===a.jstree.root),f&&f.call(this,m,r,e),this.trigger("copy_node",{node:m,original:c,parent:r.id,position:e,old_parent:q,old_position:s&&s._id&&q&&s._model.data[q]&&s._model.data[q].children?a.inArray(c.id,s._model.data[q].children):-1, +is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id,old_instance:s,new_instance:this}),m.id},cut:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="move_node",void this.trigger("cut",{node:b})):!1},copy:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="copy_node",void this.trigger("copy",{node:b})):!1},get_buffer:function(){return{mode:e,node:d,inst:f}},can_paste:function(){return e!==!1&&d!==!1},paste:function(a,b){return a=this.get_node(a),a&&e&&e.match(/^(copy_node|move_node)$/)&&d?(this[e](d,a,b,!1,!1,!1,f)&&this.trigger("paste",{parent:a.id,node:d,mode:e}),d=!1,e=!1,void(f=!1)):!1},clear_buffer:function(){d=!1,e=!1,f=!1,this.trigger("clear_buffer")},edit:function(b,c,d){var e,f,g,h,j,k,l,m,n,o=!1;return(b=this.get_node(b))?this.check("edit",b,this.get_parent(b))?(n=b,c="string"==typeof c?c:b.text,this.set_text(b,""),b=this._open_to(b),n.text=c,e=this._data.core.rtl,f=this.element.width(),this._data.core.focused=n.id,g=b.children(".jstree-anchor").focus(),h=a(""),j=c,k=a("
      ",{css:{position:"absolute",top:"-200px",left:e?"0px":"-1000px",visibility:"hidden"}}).appendTo(i.body),l=a("",{value:j,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:a.proxy(function(c){c.stopImmediatePropagation(),c.preventDefault();var e=h.children(".jstree-rename-input"),f=e.val(),i=this.settings.core.force_text,m;""===f&&(f=j),k.remove(),h.replaceWith(g),h.remove(),j=i?j:a("
      ").append(a.parseHTML(j)).html(),b=this.get_node(b),this.set_text(b,j),m=!!this.rename_node(b,i?a("
      ").text(f).text():a("
      ").append(a.parseHTML(f)).html()),m||this.set_text(b,j),this._data.core.focused=n.id,setTimeout(a.proxy(function(){var a=this.get_node(n.id,!0);a.length&&(this._data.core.focused=n.id,a.children(".jstree-anchor").focus())},this),0),d&&d.call(this,n,m,o),l=null},this),keydown:function(a){var b=a.which;27===b&&(o=!0,this.value=j),(27===b||13===b||37===b||38===b||39===b||40===b||32===b)&&a.stopImmediatePropagation(),(27===b||13===b)&&(a.preventDefault(),this.blur())},click:function(a){a.stopImmediatePropagation()},mousedown:function(a){a.stopImmediatePropagation()},keyup:function(a){l.width(Math.min(k.text("pW"+this.value).width(),f))},keypress:function(a){return 13===a.which?!1:void 0}}),m={fontFamily:g.css("fontFamily")||"",fontSize:g.css("fontSize")||"",fontWeight:g.css("fontWeight")||"",fontStyle:g.css("fontStyle")||"",fontStretch:g.css("fontStretch")||"",fontVariant:g.css("fontVariant")||"",letterSpacing:g.css("letterSpacing")||"",wordSpacing:g.css("wordSpacing")||""},h.attr("class",g.attr("class")).append(g.contents().clone()).append(l),g.replaceWith(h),k.css(m),l.css(m).width(Math.min(k.text("pW"+l[0].value).width(),f))[0].select(),void a(i).one("mousedown.jstree touchstart.jstree dnd_start.vakata",function(b){l&&b.target!==l&&a(l).blur()})):(this.settings.core.error.call(this,this._data.core.last_error),!1):!1},set_theme:function(b,c){if(!b)return!1;if(c===!0){var d=this.settings.core.themes.dir;d||(d=a.jstree.path+"/themes"),c=d+"/"+b+"/style.css"}c&&-1===a.inArray(c,g)&&(a("head").append(''),g.push(c)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=b,this.element.addClass("jstree-"+b),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+b+"-responsive"),this.trigger("set_theme",{theme:b})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(a){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=a,a&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped"),this.trigger("show_stripes")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped"),this.trigger("hide_stripes")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots"),this.trigger("show_dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots"),this.trigger("hide_dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons"),this.trigger("show_icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons"),this.trigger("hide_icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},show_ellipsis:function(){this._data.core.themes.ellipsis=!0,this.get_container_ul().addClass("jstree-ellipsis"),this.trigger("show_ellipsis")},hide_ellipsis:function(){this._data.core.themes.ellipsis=!1,this.get_container_ul().removeClass("jstree-ellipsis"),this.trigger("hide_ellipsis")},toggle_ellipsis:function(){this._data.core.themes.ellipsis?this.hide_ellipsis():this.show_ellipsis()},set_icon:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.set_icon(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(h=c.icon,c.icon=d===!0||null===d||d===b||""===d?!0:d,g=this.get_node(c,!0).children(".jstree-anchor").children(".jstree-themeicon"),d===!1?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),this.hide_icon(c)):d===!0||null===d||d===b||""===d?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),h===!1&&this.show_icon(c)):-1===d.indexOf("/")&&-1===d.indexOf(".")?(g.removeClass(h).css("background",""),g.addClass(d+" jstree-themeicon-custom").attr("rel",d),h===!1&&this.show_icon(c)):(g.removeClass(h).css("background",""),g.addClass("jstree-themeicon-custom").css("background","url('"+d+"') center center no-repeat").attr("rel",d),h===!1&&this.show_icon(c)),!0):!1},get_icon:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.icon:!1},hide_icon:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.hide_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(b.icon=!1,this.get_node(b,!0).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.show_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(e=this.get_node(b,!0),b.icon=e.length?e.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):!0,b.icon||(b.icon=!0),e.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},a.vakata={},a.vakata.attributes=function(b,c){b=a(b)[0];var d=c?{}:[];return b&&b.attributes&&a.each(b.attributes,function(b,e){-1===a.inArray(e.name.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==e.value&&""!==a.trim(e.value)&&(c?d[e.name]=e.value:d.push(e.name))}),d},a.vakata.array_unique=function(a){var c=[],d,e,f,g={};for(d=0,f=a.length;f>d;d++)g[a[d]]===b&&(c.push(a[d]),g[a[d]]=!0);return c},a.vakata.array_remove=function(a,b){return a.splice(b,1),a},a.vakata.array_remove_item=function(b,c){var d=a.inArray(c,b);return-1!==d?a.vakata.array_remove(b,d):b},a.vakata.array_filter=function(a,b,c,d,e){if(a.filter)return a.filter(b,c);d=[];for(e in a)~~e+""==e+""&&e>=0&&b.call(c,a[e],+e,a)&&d.push(a[e]);return d},a.jstree.plugins.changed=function(a,b){var c=[];this.trigger=function(a,d){var e,f;if(d||(d={}),"changed"===a.replace(".jstree","")){d.changed={selected:[],deselected:[]};var g={};for(e=0,f=c.length;f>e;e++)g[c[e]]=1;for(e=0,f=d.selected.length;f>e;e++)g[d.selected[e]]?g[d.selected[e]]=2:d.changed.selected.push(d.selected[e]);for(e=0,f=c.length;f>e;e++)1===g[c[e]]&&d.changed.deselected.push(c[e]);c=d.selected.slice()}b.trigger.call(this,a,d)},this.refresh=function(a,d){return c=[],b.refresh.apply(this,arguments)}};var j=i.createElement("I");j.className="jstree-icon jstree-checkbox",j.setAttribute("role","presentation"),a.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0,cascade:"",tie_selection:!0,cascade_to_disabled:!0,cascade_to_hidden:!0},a.jstree.plugins.checkbox=function(c,d){this.bind=function(){d.bind.call(this),this._data.checkbox.uto=!1,this._data.checkbox.selected=[],this.settings.checkbox.three_state&&(this.settings.checkbox.cascade="up+down+undetermined"),this.element.on("init.jstree",a.proxy(function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked"),this.settings.checkbox.tie_selection&&this.element.addClass("jstree-checkbox-selection")},this)).on("loading.jstree",a.proxy(function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()},this)),-1!==this.settings.checkbox.cascade.indexOf("undetermined")&&this.element.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",a.proxy(function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)},this)),this.settings.checkbox.tie_selection||this.element.on("model.jstree",a.proxy(function(a,b){var c=this._model.data,d=c[b.parent],e=b.nodes,f,g;for(f=0,g=e.length;g>f;f++)c[e[f]].state.checked=c[e[f]].state.checked||c[e[f]].original&&c[e[f]].original.state&&c[e[f]].original.state.checked,c[e[f]].state.checked&&this._data.checkbox.selected.push(e[f])},this)),(-1!==this.settings.checkbox.cascade.indexOf("up")||-1!==this.settings.checkbox.cascade.indexOf("down"))&&this.element.on("model.jstree",a.proxy(function(b,c){var d=this._model.data,e=d[c.parent],f=c.nodes,g=[],h,i,j,k,l,m,n=this.settings.checkbox.cascade,o=this.settings.checkbox.tie_selection;if(-1!==n.indexOf("down"))if(e.state[o?"selected":"checked"]){for(i=0,j=f.length;j>i;i++)d[f[i]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(f)}else for(i=0,j=f.length;j>i;i++)if(d[f[i]].state[o?"selected":"checked"]){for(k=0,l=d[f[i]].children_d.length;l>k;k++)d[d[f[i]].children_d[k]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(d[f[i]].children_d)}if(-1!==n.indexOf("up")){for(i=0,j=e.children_d.length;j>i;i++)d[e.children_d[i]].children.length||g.push(d[e.children_d[i]].parent);for(g=a.vakata.array_unique(g),k=0,l=g.length;l>k;k++){e=d[g[k]];while(e&&e.id!==a.jstree.root){for(h=0,i=0,j=e.children.length;j>i;i++)h+=d[e.children[i]].state[o?"selected":"checked"];if(h!==j)break;e.state[o?"selected":"checked"]=!0,this._data[o?"core":"checkbox"].selected.push(e.id),m=this.get_node(e,!0),m&&m.length&&m.attr("aria-selected",!0).children(".jstree-anchor").addClass(o?"jstree-clicked":"jstree-checked"),e=this.get_node(e.parent)}}}this._data[o?"core":"checkbox"].selected=a.vakata.array_unique(this._data[o?"core":"checkbox"].selected)},this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",a.proxy(function(b,c){var d=this,e=c.node,f=this._model.data,g=this.get_node(e.parent),h,i,j,k,l=this.settings.checkbox.cascade,m=this.settings.checkbox.tie_selection,n={},o=this._data[m?"core":"checkbox"].selected;for(h=0,i=o.length;i>h;h++)n[o[h]]=!0;if(-1!==l.indexOf("down")){var p=this._cascade_new_checked_state(e.id,!0),q=e.children_d.concat(e.id);for(h=0,i=q.length;i>h;h++)p.indexOf(q[h])>-1?n[q[h]]=!0:delete n[q[h]]}if(-1!==l.indexOf("up"))while(g&&g.id!==a.jstree.root){for(j=0,h=0,i=g.children.length;i>h;h++)j+=f[g.children[h]].state[m?"selected":"checked"];if(j!==i)break;g.state[m?"selected":"checked"]=!0,n[g.id]=!0,k=this.get_node(g,!0),k&&k.length&&k.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),g=this.get_node(g.parent)}o=[];for(h in n)n.hasOwnProperty(h)&&o.push(h);this._data[m?"core":"checkbox"].selected=o},this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",a.proxy(function(b,c){var d=this.get_node(a.jstree.root),e=this._model.data,f,g,h;for(f=0,g=d.children_d.length;g>f;f++)h=e[d.children_d[f]],h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1)},this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",a.proxy(function(b,c){var d=this,e=c.node,f=this.get_node(e,!0),g,h,i,j=this.settings.checkbox.cascade,k=this.settings.checkbox.tie_selection,l=this._data[k?"core":"checkbox"].selected,m={},n=[],o=e.children_d.concat(e.id);if(-1!==j.indexOf("down")){var p=this._cascade_new_checked_state(e.id,!1);l=a.vakata.array_filter(l,function(a){return-1===o.indexOf(a)||p.indexOf(a)>-1})}if(-1!==j.indexOf("up")&&-1===l.indexOf(e.id)){for(g=0,h=e.parents.length;h>g;g++)i=this._model.data[e.parents[g]],i.state[k?"selected":"checked"]=!1,i&&i.original&&i.original.state&&i.original.state.undetermined&&(i.original.state.undetermined=!1),i=this.get_node(e.parents[g],!0),i&&i.length&&i.attr("aria-selected",!1).children(".jstree-anchor").removeClass(k?"jstree-clicked":"jstree-checked");l=a.vakata.array_filter(l,function(a){return-1===e.parents.indexOf(a)})}this._data[k?"core":"checkbox"].selected=l},this)),-1!==this.settings.checkbox.cascade.indexOf("up")&&this.element.on("delete_node.jstree",a.proxy(function(b,c){var d=this.get_node(c.parent),e=this._model.data,f,g,h,i,j=this.settings.checkbox.tie_selection;while(d&&d.id!==a.jstree.root&&!d.state[j?"selected":"checked"]){for(h=0,f=0,g=d.children.length;g>f;f++)h+=e[d.children[f]].state[j?"selected":"checked"];if(!(g>0&&h===g))break;d.state[j?"selected":"checked"]=!0,this._data[j?"core":"checkbox"].selected.push(d.id),i=this.get_node(d,!0),i&&i.length&&i.attr("aria-selected",!0).children(".jstree-anchor").addClass(j?"jstree-clicked":"jstree-checked"),d=this.get_node(d.parent)}},this)).on("move_node.jstree",a.proxy(function(b,c){var d=c.is_multi,e=c.old_parent,f=this.get_node(c.parent),g=this._model.data,h,i,j,k,l,m=this.settings.checkbox.tie_selection;if(!d){h=this.get_node(e);while(h&&h.id!==a.jstree.root&&!h.state[m?"selected":"checked"]){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(!(k>0&&i===k))break;h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),h=this.get_node(h.parent)}}h=f;while(h&&h.id!==a.jstree.root){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(i===k)h.state[m?"selected":"checked"]||(h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"));else{if(!h.state[m?"selected":"checked"])break;h.state[m?"selected":"checked"]=!1,this._data[m?"core":"checkbox"].selected=a.vakata.array_remove_item(this._data[m?"core":"checkbox"].selected,h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(m?"jstree-clicked":"jstree-checked")}h=this.get_node(h.parent)}},this))},this.get_undetermined=function(c){if(-1===this.settings.checkbox.cascade.indexOf("undetermined"))return[];var d,e,f,g,h={},i=this._model.data,j=this.settings.checkbox.tie_selection,k=this._data[j?"core":"checkbox"].selected,l=[],m=this,n=[];for(d=0,e=k.length;e>d;d++)if(i[k[d]]&&i[k[d]].parents)for(f=0,g=i[k[d]].parents.length;g>f;f++){if(h[i[k[d]].parents[f]]!==b)break;i[k[d]].parents[f]!==a.jstree.root&&(h[i[k[d]].parents[f]]=!0,l.push(i[k[d]].parents[f]))}for(this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var c=m.get_node(this),j;if(c)if(c.state.loaded){for(d=0,e=c.children_d.length;e>d;d++)if(j=i[c.children_d[d]],!j.state.loaded&&j.original&&j.original.state&&j.original.state.undetermined&&j.original.state.undetermined===!0)for(h[j.id]===b&&j.id!==a.jstree.root&&(h[j.id]=!0,l.push(j.id)),f=0,g=j.parents.length;g>f;f++)h[j.parents[f]]===b&&j.parents[f]!==a.jstree.root&&(h[j.parents[f]]=!0,l.push(j.parents[f]))}else if(c.original&&c.original.state&&c.original.state.undetermined&&c.original.state.undetermined===!0)for(h[c.id]===b&&c.id!==a.jstree.root&&(h[c.id]=!0,l.push(c.id)),f=0,g=c.parents.length;g>f;f++)h[c.parents[f]]===b&&c.parents[f]!==a.jstree.root&&(h[c.parents[f]]=!0,l.push(c.parents[f]))}),d=0,e=l.length;e>d;d++)i[l[d]].state[j?"selected":"checked"]||n.push(c?i[l[d]]:l[d]);return n},this._undetermined=function(){if(null!==this.element){var a=this.get_undetermined(!1),b,c,d;for(this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),b=0,c=a.length;c>b;b++)d=this.get_node(a[b],!0),d&&d.length&&d.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined")}},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments)){var g,h,i=null,k=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(!this.settings.checkbox.tie_selection&&this._model.data[b.id].state.checked&&(i.className+=" jstree-checked"),k=j.cloneNode(!1),this._model.data[b.id].state.checkbox_disabled&&(k.className+=" jstree-checkbox-disabled"),i.insertBefore(k,i.childNodes[0]))}return e||-1===this.settings.checkbox.cascade.indexOf("undetermined")||(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)),b},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.get_container_ul().removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.get_container_ul().addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()},this.is_undetermined=function(b){b=this.get_node(b);var c=this.settings.checkbox.cascade,d,e,f=this.settings.checkbox.tie_selection,g=this._data[f?"core":"checkbox"].selected,h=this._model.data;if(!b||b.state[f?"selected":"checked"]===!0||-1===c.indexOf("undetermined")||-1===c.indexOf("down")&&-1===c.indexOf("up"))return!1;if(!b.state.loaded&&b.original.state.undetermined===!0)return!0;for(d=0,e=b.children_d.length;e>d;d++)if(-1!==a.inArray(b.children_d[d],g)||!h[b.children_d[d]].state.loaded&&h[b.children_d[d]].original.state.undetermined)return!0;return!1},this.disable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled||(b.state.checkbox_disabled=!0,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-checkbox-disabled"),this.trigger("disable_checkbox",{node:b})))):!1},this.enable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled&&(b.state.checkbox_disabled=!1,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").removeClass("jstree-checkbox-disabled"),this.trigger("enable_checkbox",{node:b})))):!1},this.activate_node=function(b,c){return a(c.target).hasClass("jstree-checkbox-disabled")?!1:(this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||a(c.target).hasClass("jstree-checkbox"))&&(c.ctrlKey=!0),this.settings.checkbox.tie_selection||!this.settings.checkbox.whole_node&&!a(c.target).hasClass("jstree-checkbox")?d.activate_node.call(this,b,c):this.is_disabled(b)?!1:(this.is_checked(b)?this.uncheck_node(b,c):this.check_node(b,c),void this.trigger("activate_node",{node:this.get_node(b)})))},this._cascade_new_checked_state=function(a,b){var c=this,d=this.settings.checkbox.tie_selection,e=this._model.data[a],f=[],g=[],h,i,j;if(!this.settings.checkbox.cascade_to_disabled&&e.state.disabled||!this.settings.checkbox.cascade_to_hidden&&e.state.hidden)j=this.get_checked_descendants(a),e.state[d?"selected":"checked"]&&j.push(e.id),f=f.concat(j);else{if(e.children)for(h=0,i=e.children.length;i>h;h++){var k=e.children[h];j=c._cascade_new_checked_state(k,b),f=f.concat(j),j.indexOf(k)>-1&&g.push(k)}var l=c.get_node(e,!0),m=g.length>0&&g.lengthe;e++)this.check_node(b[e],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(d=this.get_node(b,!0),void(b.state.checked||(b.state.checked=!0,this._data.checkbox.selected.push(b.id),d&&d.length&&d.children(".jstree-anchor").addClass("jstree-checked"),this.trigger("check_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.uncheck_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.deselect_node(b,!1,c);var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.uncheck_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.checked&&(b.state.checked=!1,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,b.id),f.length&&f.children(".jstree-anchor").removeClass("jstree-checked"),this.trigger("uncheck_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.check_all=function(){if(this.settings.checkbox.tie_selection)return this.select_all();var b=this._data.checkbox.selected.concat([]),c,d;for(this._data.checkbox.selected=this._model.data[a.jstree.root].children_d.concat(),c=0,d=this._data.checkbox.selected.length;d>c;c++)this._model.data[this._data.checkbox.selected[c]]&&(this._model.data[this._data.checkbox.selected[c]].state.checked=!0);this.redraw(!0),this.trigger("check_all",{selected:this._data.checkbox.selected})},this.uncheck_all=function(){if(this.settings.checkbox.tie_selection)return this.deselect_all();var a=this._data.checkbox.selected.concat([]),b,c;for(b=0,c=this._data.checkbox.selected.length;c>b;b++)this._model.data[this._data.checkbox.selected[b]]&&(this._model.data[this._data.checkbox.selected[b]].state.checked=!1);this._data.checkbox.selected=[],this.element.find(".jstree-checked").removeClass("jstree-checked"),this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:a})},this.is_checked=function(b){return this.settings.checkbox.tie_selection?this.is_selected(b):(b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.checked:!1)},this.get_checked=function(b){return this.settings.checkbox.tie_selection?this.get_selected(b):b?a.map(this._data.checkbox.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.checkbox.selected.slice()},this.get_top_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_top_selected(b);var c=this.get_checked(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},this.get_bottom_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_bottom_selected(b);var c=this.get_checked(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},this.load_node=function(b,c){var e,f,g,h,i,j;if(!a.isArray(b)&&!this.settings.checkbox.tie_selection&&(j=this.get_node(b),j&&j.state.loaded))for(e=0,f=j.children_d.length;f>e;e++)this._model.data[j.children_d[e]].state.checked&&(i=!0,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,j.children_d[e]));return d.load_node.apply(this,arguments)},this.get_state=function(){var a=d.get_state.apply(this,arguments);return this.settings.checkbox.tie_selection?a:(a.checkbox=this._data.checkbox.selected.slice(),a)},this.set_state=function(b,c){var e=d.set_state.apply(this,arguments);if(e&&b.checkbox){if(!this.settings.checkbox.tie_selection){this.uncheck_all();var f=this;a.each(b.checkbox,function(a,b){f.check_node(b)})}return delete b.checkbox,this.set_state(b,c),!1}return e},this.refresh=function(a,b){return this.settings.checkbox.tie_selection&&(this._data.checkbox.selected=[]),d.refresh.apply(this,arguments)}},a.jstree.defaults.conditionalselect=function(){return!0},a.jstree.plugins.conditionalselect=function(a,b){this.activate_node=function(a,c){return this.settings.conditionalselect.call(this,this.get_node(a),c)?b.activate_node.call(this,a,c):void 0}},a.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(b,c){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.create_node(d,{},"last",function(a){try{c.edit(a)}catch(b){setTimeout(function(){c.edit(a)},0)}})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.edit(d)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.delete_node(c.get_selected()):c.delete_node(d)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.cut(c.get_top_selected()):c.cut(d)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.copy(c.get_top_selected()):c.copy(d)}},paste:{separator_before:!1,icon:!1,_disabled:function(b){return!a.jstree.reference(b.reference).can_paste()},separator_after:!1,label:"Paste",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.paste(d)}}}}}}},a.jstree.plugins.contextmenu=function(c,d){this.bind=function(){d.bind.call(this);var b=0,c=null,e,f;this.element.on("init.jstree loading.jstree ready.jstree",a.proxy(function(){this.get_container_ul().addClass("jstree-contextmenu")},this)).on("contextmenu.jstree",".jstree-anchor",a.proxy(function(a,d){"input"!==a.target.tagName.toLowerCase()&&(a.preventDefault(),b=a.ctrlKey?+new Date:0,(d||c)&&(b=+new Date+1e4),c&&clearTimeout(c),this.is_loading(a.currentTarget)||this.show_contextmenu(a.currentTarget,a.pageX,a.pageY,a))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(c){this._data.contextmenu.visible&&(!b||+new Date-b>250)&&a.vakata.context.hide(),b=0},this)).on("touchstart.jstree",".jstree-anchor",function(b){b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(e=b.originalEvent.changedTouches[0].clientX,f=b.originalEvent.changedTouches[0].clientY,c=setTimeout(function(){a(b.currentTarget).trigger("contextmenu",!0)},750))}).on("touchmove.vakata.jstree",function(b){c&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(Math.abs(e-b.originalEvent.changedTouches[0].clientX)>10||Math.abs(f-b.originalEvent.changedTouches[0].clientY)>10)&&(clearTimeout(c),a.vakata.context.hide())}).on("touchend.vakata.jstree",function(a){c&&clearTimeout(c)}),a(i).on("context_hide.vakata.jstree",a.proxy(function(b,c){this._data.contextmenu.visible=!1,a(c.reference).removeClass("jstree-context")},this))},this.teardown=function(){this._data.contextmenu.visible&&a.vakata.context.hide(),d.teardown.call(this)},this.show_contextmenu=function(c,d,e,f){if(c=this.get_node(c),!c||c.id===a.jstree.root)return!1;var g=this.settings.contextmenu,h=this.get_node(c,!0),i=h.children(".jstree-anchor"),j=!1,k=!1;(g.show_at_node||d===b||e===b)&&(j=i.offset(),d=j.left,e=j.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(c)&&this.activate_node(c,f),k=g.items,a.isFunction(k)&&(k=k.call(this,c,a.proxy(function(a){this._show_contextmenu(c,d,e,a)},this))),a.isPlainObject(k)&&this._show_contextmenu(c,d,e,k)},this._show_contextmenu=function(b,c,d,e){var f=this.get_node(b,!0),g=f.children(".jstree-anchor");a(i).one("context_show.vakata.jstree",a.proxy(function(b,c){var d="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";a(c.element).addClass(d),g.addClass("jstree-context")},this)),this._data.contextmenu.visible=!0,a.vakata.context.show(g,{x:c,y:d},e),this.trigger("show_contextmenu",{node:b,x:c,y:d})}},function(a){var b=!1,c={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};a.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(b){a(i).triggerHandler("context_"+b+".vakata",{reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}})},_execute:function(b){return b=c.items[b],b&&(!b._disabled||a.isFunction(b._disabled)&&!b._disabled({item:b,reference:c.reference,element:c.element}))&&b.action?b.action.call(null,{item:b,reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}}):!1},_parse:function(b,d){if(!b)return!1;d||(c.html="",c.items=[]);var e="",f=!1,g;return d&&(e+=""),d||(c.html=e,a.vakata.context._trigger("parse")),e.length>10?e:!1},_show_submenu:function(c){if(c=a(c),c.length&&c.children("ul").length){var d=c.children("ul"),e=c.offset().left,f=e+c.outerWidth(),g=c.offset().top,h=d.width(),i=d.height(),j=a(window).width()+a(window).scrollLeft(),k=a(window).height()+a(window).scrollTop();b?c[f-(h+10+c.outerWidth())<0?"addClass":"removeClass"]("vakata-context-left"):c[f+h>j&&e>j-f?"addClass":"removeClass"]("vakata-context-right"),g+i+10>k&&d.css("bottom","-1px"),c.hasClass("vakata-context-right")?h>e&&d.css("margin-right",e-h):h>j-f&&d.css("margin-left",j-f-h),d.show()}},show:function(d,e,f){var g,h,j,k,l,m,n,o,p=!0;switch(c.element&&c.element.length&&c.element.width(""),p){case!e&&!d:return!1;case!!e&&!!d:c.reference=d,c.position_x=e.x,c.position_y=e.y;break;case!e&&!!d:c.reference=d,g=d.offset(),c.position_x=g.left+d.outerHeight(),c.position_y=g.top;break;case!!e&&!d:c.position_x=e.x,c.position_y=e.y}d&&!f&&a(d).data("vakata_contextmenu")&&(f=a(d).data("vakata_contextmenu")),a.vakata.context._parse(f)&&c.element.html(c.html),c.items.length&&(c.element.appendTo(i.body),h=c.element,j=c.position_x,k=c.position_y,l=h.width(),m=h.height(),n=a(window).width()+a(window).scrollLeft(),o=a(window).height()+a(window).scrollTop(),b&&(j-=h.outerWidth()-a(d).outerWidth(),jn&&(j=n-(l+20)),k+m+20>o&&(k=o-(m+20)),c.element.css({left:j,top:k}).show().find("a").first().focus().parent().addClass("vakata-context-hover"),c.is_visible=!0,a.vakata.context._trigger("show"))},hide:function(){c.is_visible&&(c.element.hide().find("ul").hide().end().find(":focus").blur().end().detach(),c.is_visible=!1,a.vakata.context._trigger("hide"))}},a(function(){b="rtl"===a(i.body).css("direction");var d=!1;c.element=a("
        "),c.element.on("mouseenter","li",function(b){b.stopImmediatePropagation(),a.contains(this,b.relatedTarget)||(d&&clearTimeout(d),c.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),a(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),a.vakata.context._show_submenu(this))}).on("mouseleave","li",function(b){a.contains(this,b.relatedTarget)||a(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(b){a(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),a.vakata.context.settings.hide_onmouseleave&&(d=setTimeout(function(b){return function(){a.vakata.context.hide()}}(this),a.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(b){b.preventDefault(),a(this).blur().parent().hasClass("vakata-context-disabled")||a.vakata.context._execute(a(this).attr("rel"))===!1||a.vakata.context.hide()}).on("keydown","a",function(b){var d=null;switch(b.which){case 13:case 32:b.type="click",b.preventDefault(),a(b.currentTarget).trigger(b);break;case 37:c.is_visible&&(c.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(),b.stopImmediatePropagation(),b.preventDefault());break;case 38:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 39:c.is_visible&&(c.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(),b.stopImmediatePropagation(),b.preventDefault());break;case 40:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 27:a.vakata.context.hide(),b.preventDefault()}}).on("keydown",function(a){a.preventDefault();var b=c.element.find(".vakata-contextmenu-shortcut-"+a.which).parent();b.parent().not(".vakata-context-disabled")&&b.click()}),a(i).on("mousedown.vakata.jstree",function(b){c.is_visible&&c.element[0]!==b.target&&!a.contains(c.element[0],b.target)&&a.vakata.context.hide()}).on("context_show.vakata.jstree",function(a,d){c.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),b&&c.element.addClass("vakata-context-rtl").css("direction","rtl"),c.element.find("ul").hide().end()})})}(a),a.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0,drag_selection:!0,touch:!0,large_drop_target:!1,large_drag_target:!1,use_html5:!1};var k,l;a.jstree.plugins.dnd=function(b,c){this.init=function(a,b){c.init.call(this,a,b),this.settings.dnd.use_html5=this.settings.dnd.use_html5&&"draggable"in i.createElement("span")},this.bind=function(){c.bind.call(this),this.element.on(this.settings.dnd.use_html5?"dragstart.jstree":"mousedown.jstree touchstart.jstree",this.settings.dnd.large_drag_target?".jstree-node":".jstree-anchor",a.proxy(function(b){if(this.settings.dnd.large_drag_target&&a(b.target).closest(".jstree-node")[0]!==b.currentTarget)return!0;if("touchstart"===b.type&&(!this.settings.dnd.touch||"selected"===this.settings.dnd.touch&&!a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").hasClass("jstree-clicked")))return!0;var c=this.get_node(b.target),d=this.is_selected(c)&&this.settings.dnd.drag_selection?this.get_top_selected().length:1,e=d>1?d+" "+this.get_string("nodes"):this.get_text(b.currentTarget);if(this.settings.core.force_text&&(e=a.vakata.html.escape(e)),c&&c.id&&c.id!==a.jstree.root&&(1===b.which||"touchstart"===b.type||"dragstart"===b.type)&&(this.settings.dnd.is_draggable===!0||a.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,d>1?this.get_top_selected(!0):[c],b))){if(k={jstree:!0,origin:this,obj:this.get_node(c,!0),nodes:d>1?this.get_top_selected():[c.id]},l=b.currentTarget,!this.settings.dnd.use_html5)return this.element.trigger("mousedown.jstree"),a.vakata.dnd.start(b,k,'
        '+e+'
        ');a.vakata.dnd._trigger("start",b,{helper:a(),element:l,data:k})}},this)),this.settings.dnd.use_html5&&this.element.on("dragover.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("move",b,{helper:a(),element:l,data:k}),!1}).on("drop.jstree",a.proxy(function(b){return b.preventDefault(),a.vakata.dnd._trigger("stop",b,{helper:a(),element:l,data:k}),!1},this))},this.redraw_node=function(a,b,d,e){if(a=c.redraw_node.apply(this,arguments),a&&this.settings.dnd.use_html5)if(this.settings.dnd.large_drag_target)a.setAttribute("draggable",!0);else{var f,g,h=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&h.setAttribute("draggable",!0)}return a}},a(function(){var c=!1,d=!1,e=!1,f=!1,g=a('
         
        ').hide();a(i).on("dragover.vakata.jstree",function(b){l&&a.vakata.dnd._trigger("move",b,{helper:a(),element:l,data:k})}).on("drop.vakata.jstree",function(b){l&&(a.vakata.dnd._trigger("stop",b,{helper:a(),element:l,data:k}),l=null,k=null)}).on("dnd_start.vakata.jstree",function(a,b){c=!1,e=!1,b&&b.data&&b.data.jstree&&g.appendTo(i.body)}).on("dnd_move.vakata.jstree",function(h,i){var j=i.event.target!==e.target;if(f&&(!i.event||"dragover"!==i.event.type||j)&&clearTimeout(f),i&&i.data&&i.data.jstree&&(!i.event.target.id||"jstree-marker"!==i.event.target.id)){e=i.event;var k=a.jstree.reference(i.event.target),l=!1,m=!1,n=!1,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E;if(k&&k._data&&k._data.dnd)if(g.attr("class","jstree-"+k.get_theme()+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")),D=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey)),i.helper.children().attr("class","jstree-"+k.get_theme()+" jstree-"+k.get_theme()+"-"+k.get_theme_variant()+" "+(k.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy").first()[D?"show":"hide"](),i.event.target!==k.element[0]&&i.event.target!==k.get_container_ul()[0]||0!==k.get_container_ul().children().length){if(l=k.settings.dnd.large_drop_target?a(i.event.target).closest(".jstree-node").children(".jstree-anchor"):a(i.event.target).closest(".jstree-anchor"),l&&l.length&&l.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(m=l.offset(),n=(i.event.pageY!==b?i.event.pageY:i.event.originalEvent.pageY)-m.top,r=l.outerHeight(),u=r/3>n?["b","i","a"]:n>r-r/3?["a","i","b"]:n>r/2?["i","a","b"]:["i","b","a"],a.each(u,function(b,e){switch(e){case"b":p=m.left-6,q=m.top,s=k.get_parent(l),t=l.parent().index();break;case"i":B=k.settings.dnd.inside_pos,C=k.get_node(l.parent()),p=m.left-2,q=m.top+r/2+1,s=C.id,t="first"===B?0:"last"===B?C.children.length:Math.min(B,C.children.length);break;case"a":p=m.left-6,q=m.top+r,s=k.get_parent(l),t=l.parent().index()+1}for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(y=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",z=t,"move_node"===y&&"a"===e&&i.data.origin&&i.data.origin===k&&s===k.get_parent(i.data.nodes[w])&&(A=k.get_node(s),z>a.inArray(i.data.nodes[w],A.children)&&(z-=1)),v=v&&(k&&k.settings&&k.settings.dnd&&k.settings.dnd.check_while_dragging===!1||k.check(y,i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],s,z,{dnd:!0,ref:k.get_node(l.parent()),pos:e,origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin})),!v){k&&k.last_error&&(d=k.last_error());break}return"i"===e&&l.parent().is(".jstree-closed")&&k.settings.dnd.open_timeout&&(!i.event||"dragover"!==i.event.type||j)&&(f&&clearTimeout(f),f=setTimeout(function(a,b){return function(){a.open_node(b)}}(k,l),k.settings.dnd.open_timeout)),v?(E=k.get_node(s,!0),E.hasClass(".jstree-dnd-parent")||(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),E.addClass("jstree-dnd-parent")),c={ins:k,par:s,pos:"i"!==e||"last"!==B||0!==t||k.is_loaded(C)?t:"last"},g.css({left:p+"px",top:q+"px"}).show(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"),d={},u=!0,!1):void 0}),u===!0))return}else{for(v=!0,w=0,x=i.data.nodes.length;x>w;w++)if(v=v&&k.check(i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",i.data.origin&&i.data.origin!==k?i.data.origin.get_node(i.data.nodes[w]):i.data.nodes[w],a.jstree.root,"last",{dnd:!0,ref:k.get_node(a.jstree.root),pos:"i",origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==k,is_foreign:!i.data.origin}),!v)break;if(v)return c={ins:k,par:a.jstree.root,pos:"last"},g.hide(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),void(i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=D?"copy":"move"))}a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),c=!1,i.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),i.event.originalEvent&&i.event.originalEvent.dataTransfer,g.hide()}}).on("dnd_scroll.vakata.jstree",function(a,b){b&&b.data&&b.data.jstree&&(g.hide(),c=!1,e=!1,b.helper.find(".jstree-icon").first().removeClass("jstree-ok").addClass("jstree-er"))}).on("dnd_stop.vakata.jstree",function(b,h){if(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),f&&clearTimeout(f),h&&h.data&&h.data.jstree){g.hide().detach();var i,j,k=[];if(c){for(i=0,j=h.data.nodes.length;j>i;i++)k[i]=h.data.origin?h.data.origin.get_node(h.data.nodes[i]):h.data.nodes[i];c.ins[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(h.event.metaKey||h.event.ctrlKey))?"copy_node":"move_node"](k,c.par,c.pos,!1,!1,!1,h.data.origin)}else i=a(h.event.target).closest(".jstree"),i.length&&d&&d.error&&"check"===d.error&&(i=i.jstree(!0),i&&i.settings.core.error.call(this,d));e=!1,c=!1}}).on("keyup.jstree keydown.jstree",function(b,h){h=a.vakata.dnd._get(),h&&h.data&&h.data.jstree&&("keyup"===b.type&&27===b.which?(f&&clearTimeout(f),c=!1,d=!1,e=!1,f=!1,g.hide().detach(),a.vakata.dnd._clean()):(h.helper.find(".jstree-copy").first()[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(b.metaKey||b.ctrlKey))?"show":"hide"](),e&&(e.metaKey=b.metaKey,e.ctrlKey=b.ctrlKey,a.vakata.dnd._trigger("move",e))))})}),function(a){a.vakata.html={div:a("
        "),escape:function(b){return a.vakata.html.div.text(b).html()},strip:function(b){return a.vakata.html.div.empty().append(a.parseHTML(b)).text()}};var c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1};a.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:10},_trigger:function(c,d,e){e===b&&(e=a.vakata.dnd._get()),e.event=d,a(i).triggerHandler("dnd_"+c+".vakata",e)},_get:function(){return{data:c.data,element:c.element,helper:c.helper}},_clean:function(){c.helper&&c.helper.remove(),c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1},a(i).off("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).off("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop)},_scroll:function(b){if(!c.scroll_e||!c.scroll_l&&!c.scroll_t)return c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),!1;if(!c.scroll_i)return c.scroll_i=setInterval(a.vakata.dnd._scroll,100),!1;if(b===!0)return!1;var d=c.scroll_e.scrollTop(),e=c.scroll_e.scrollLeft();c.scroll_e.scrollTop(d+c.scroll_t*a.vakata.dnd.settings.scroll_speed),c.scroll_e.scrollLeft(e+c.scroll_l*a.vakata.dnd.settings.scroll_speed),(d!==c.scroll_e.scrollTop()||e!==c.scroll_e.scrollLeft())&&a.vakata.dnd._trigger("scroll",c.scroll_e)},start:function(b,d,e){"touchstart"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag&&a.vakata.dnd.stop({});try{b.currentTarget.unselectable="on",b.currentTarget.onselectstart=function(){return!1},b.currentTarget.style&&(b.currentTarget.style.touchAction="none",b.currentTarget.style.msTouchAction="none",b.currentTarget.style.MozUserSelect="none")}catch(f){}return c.init_x=b.pageX,c.init_y=b.pageY,c.data=d,c.is_down=!0,c.element=b.currentTarget,c.target=b.target,c.is_touch="touchstart"===b.type,e!==!1&&(c.helper=a("
        ").html(e).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),a(i).on("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).on("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop),!1},drag:function(b){if("touchmove"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_down){if(!c.is_drag){if(!(Math.abs(b.pageX-c.init_x)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)||Math.abs(b.pageY-c.init_y)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)))return;c.helper&&(c.helper.appendTo(i.body),c.helper_w=c.helper.outerWidth()),c.is_drag=!0,a(c.target).one("click.vakata",!1),a.vakata.dnd._trigger("start",b)}var d=!1,e=!1,f=!1,g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n=!1;return c.scroll_t=0,c.scroll_l=0,c.scroll_e=!1,a(a(b.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(a(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var d=a(this),e=d.offset();return this.scrollHeight>this.offsetHeight&&(e.top+d.height()-b.pageYthis.offsetWidth&&(e.left+d.width()-b.pageXg&&b.pageY-kg&&g-(b.pageY-k)j&&b.pageX-lj&&j-(b.pageX-l)f&&(m=f-50),h&&n+c.helper_w>h&&(n=h-(c.helper_w+2)),c.helper.css({left:n+"px",top:m+"px"})),a.vakata.dnd._trigger("move",b),!1}},stop:function(b){if("touchend"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag)b.target!==c.target&&a(c.target).off("click.vakata"),a.vakata.dnd._trigger("stop",b);else if("touchend"===b.type&&b.target===c.target){var d=setTimeout(function(){a(b.target).click()},100);a(b.target).one("click",function(){d&&clearTimeout(d)})}return a.vakata.dnd._clean(),!1}}}(a),a.jstree.defaults.massload=null,a.jstree.plugins.massload=function(b,c){this.init=function(a,b){this._data.massload={},c.init.call(this,a,b)},this._load_nodes=function(b,d,e,f){var g=this.settings.massload,h=JSON.stringify(b),i=[],j=this._model.data,k,l,m;if(!e){for(k=0,l=b.length;l>k;k++)(!j[b[k]]||!j[b[k]].state.loaded&&!j[b[k]].state.failed||f)&&(i.push(b[k]),m=this.get_node(b[k],!0),m&&m.length&&m.addClass("jstree-loading").attr("aria-busy",!0));if(this._data.massload={},i.length){if(a.isFunction(g))return g.call(this,i,a.proxy(function(a){var g,h;if(a)for(g in a)a.hasOwnProperty(g)&&(this._data.massload[g]=a[g]);for(g=0,h=b.length;h>g;g++)m=this.get_node(b[g],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this));if("object"==typeof g&&g&&g.url)return g=a.extend(!0,{},g),a.isFunction(g.url)&&(g.url=g.url.call(this,i)),a.isFunction(g.data)&&(g.data=g.data.call(this,i)),a.ajax(g).done(a.proxy(function(a,g,h){var i,j;if(a)for(i in a)a.hasOwnProperty(i)&&(this._data.massload[i]=a[i]);for(i=0,j=b.length;j>i;i++)m=this.get_node(b[i],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this)).fail(a.proxy(function(a){c._load_nodes.call(this,b,d,e,f)},this))}}return c._load_nodes.call(this,b,d,e,f)},this._load_node=function(b,d){var e=this._data.massload[b.id],f=null,g;return e?(f=this["string"==typeof e?"_append_html_data":"_append_json_data"](b,"string"==typeof e?a(a.parseHTML(e)).filter(function(){return 3!==this.nodeType}):e,function(a){d.call(this,a)}),g=this.get_node(b.id,!0),g&&g.length&&g.removeClass("jstree-loading").attr("aria-busy",!1),delete this._data.massload[b.id],f):c._load_node.call(this,b,d)}},a.jstree.defaults.search={ajax:!1,fuzzy:!1,case_sensitive:!1,show_only_matches:!1,show_only_matches_children:!1,close_opened_onclear:!0,search_leaves_only:!1,search_callback:!1},a.jstree.plugins.search=function(c,d){this.bind=function(){d.bind.call(this),this._data.search.str="",this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=!1,this._data.search.smc=!1,this._data.search.hdn=[],this.element.on("search.jstree",a.proxy(function(b,c){if(this._data.search.som&&c.res.length){var d=this._model.data,e,f,g=[],h,i;for(e=0,f=c.res.length;f>e;e++)if(d[c.res[e]]&&!d[c.res[e]].state.hidden&&(g.push(c.res[e]),g=g.concat(d[c.res[e]].parents),this._data.search.smc))for(h=0,i=d[c.res[e]].children_d.length;i>h;h++)d[d[c.res[e]].children_d[h]]&&!d[d[c.res[e]].children_d[h]].state.hidden&&g.push(d[c.res[e]].children_d[h]);g=a.vakata.array_remove_item(a.vakata.array_unique(g),a.jstree.root),this._data.search.hdn=this.hide_all(!0),this.show_node(g,!0),this.redraw(!0)}},this)).on("clear_search.jstree",a.proxy(function(a,b){this._data.search.som&&b.res.length&&(this.show_node(this._data.search.hdn,!0),this.redraw(!0))},this))},this.search=function(c,d,e,f,g,h){if(c===!1||""===a.trim(c.toString()))return this.clear_search();f=this.get_node(f),f=f&&f.id?f.id:null,c=c.toString();var i=this.settings.search,j=i.ajax?i.ajax:!1,k=this._model.data,l=null,m=[],n=[],o,p;if(this._data.search.res.length&&!g&&this.clear_search(),e===b&&(e=i.show_only_matches),h===b&&(h=i.show_only_matches_children),!d&&j!==!1)return a.isFunction(j)?j.call(this,c,a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this),f):(j=a.extend({},j),j.data||(j.data={}),j.data.str=c,f&&(j.data.inside=f),this._data.search.lastRequest&&this._data.search.lastRequest.abort(),this._data.search.lastRequest=a.ajax(j).fail(a.proxy(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(j)},this.settings.core.error.call(this,this._data.core.last_error)},this)).done(a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this)),this._data.search.lastRequest);if(g||(this._data.search.str=c,this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=e,this._data.search.smc=h),l=new a.vakata.search(c,!0,{caseSensitive:i.case_sensitive,fuzzy:i.fuzzy}),a.each(k[f?f:a.jstree.root].children_d,function(a,b){var d=k[b];d.text&&!d.state.hidden&&(!i.search_leaves_only||d.state.loaded&&0===d.children.length)&&(i.search_callback&&i.search_callback.call(this,c,d)||!i.search_callback&&l.search(d.text).isMatch)&&(m.push(b),n=n.concat(d.parents))}),m.length){for(n=a.vakata.array_unique(n),o=0,p=n.length;p>o;o++)n[o]!==a.jstree.root&&k[n[o]]&&this.open_node(n[o],null,0)===!0&&this._data.search.opn.push(n[o]);g?(this._data.search.dom=this._data.search.dom.add(a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #")))),this._data.search.res=a.vakata.array_unique(this._data.search.res.concat(m))):(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.res=m),this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:c,res:this._data.search.res,show_only_matches:e})},this.clear_search=function(){this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.res.length&&(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(this._data.search.res,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search")),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=a()},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments),b&&-1!==a.inArray(b.id,this._data.search.res)){var g,h,i=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(i.className+=" jstree-search")}return b}},function(a){a.vakata.search=function(b,c,d){d=d||{},d=a.extend({},a.vakata.search.defaults,d),d.fuzzy!==!1&&(d.fuzzy=!0),b=d.caseSensitive?b:b.toLowerCase();var e=d.location,f=d.distance,g=d.threshold,h=b.length,i,j,k,l;return h>32&&(d.fuzzy=!1),d.fuzzy&&(i=1<c;c++)a[b.charAt(c)]=0;for(c=0;h>c;c++)a[b.charAt(c)]|=1<c;c++){o=0,p=q;while(p>o)k(c,e+p)<=m?o=p:q=p,p=Math.floor((q-o)/2+o);for(q=p,s=Math.max(1,e-p+1),t=Math.min(e+p,l)+h,u=new Array(t+2),u[t+1]=(1<=s;f--)if(v=j[a.charAt(f-1)],0===c?u[f]=(u[f+1]<<1|1)&v:u[f]=(u[f+1]<<1|1)&v|((r[f+1]|r[f])<<1|1)|r[f+1],u[f]&i&&(w=k(c,f-1),m>=w)){if(m=w,n=f-1,x.push(n),!(n>e))break;s=Math.max(1,2*e-n)}if(k(c+1,e)>m)break;r=u}return{isMatch:n>=0,score:w}},c===!0?{search:l}:l(c)},a.vakata.search.defaults={location:0,distance:100,threshold:.6,fuzzy:!1,caseSensitive:!1}}(a),a.jstree.defaults.sort=function(a,b){return this.get_text(a)>this.get_text(b)?1:-1},a.jstree.plugins.sort=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("model.jstree",a.proxy(function(a,b){this.sort(b.parent,!0)},this)).on("rename_node.jstree create_node.jstree",a.proxy(function(a,b){this.sort(b.parent||b.node.parent,!1),this.redraw_node(b.parent||b.node.parent,!0)},this)).on("move_node.jstree copy_node.jstree",a.proxy(function(a,b){this.sort(b.parent,!1),this.redraw_node(b.parent,!0)},this))},this.sort=function(b,c){var d,e;if(b=this.get_node(b),b&&b.children&&b.children.length&&(b.children.sort(a.proxy(this.settings.sort,this)),c))for(d=0,e=b.children_d.length;e>d;d++)this.sort(b.children_d[d],!1)}};var m=!1;a.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree",ttl:!1,filter:!1,preserve_loaded:!1},a.jstree.plugins.state=function(b,c){this.bind=function(){c.bind.call(this);var b=a.proxy(function(){this.element.on(this.settings.state.events,a.proxy(function(){m&&clearTimeout(m),m=setTimeout(a.proxy(function(){this.save_state()},this),100)},this)),this.trigger("state_ready")},this);this.element.on("ready.jstree",a.proxy(function(a,c){this.element.one("restore_state.jstree",b),this.restore_state()||b()},this))},this.save_state=function(){var b=this.get_state();this.settings.state.preserve_loaded||delete b.core.loaded;var c={state:b,ttl:this.settings.state.ttl,sec:+new Date};a.vakata.storage.set(this.settings.state.key,JSON.stringify(c))},this.restore_state=function(){var b=a.vakata.storage.get(this.settings.state.key);if(b)try{b=JSON.parse(b)}catch(c){return!1}return b&&b.ttl&&b.sec&&+new Date-b.sec>b.ttl?!1:(b&&b.state&&(b=b.state),b&&a.isFunction(this.settings.state.filter)&&(b=this.settings.state.filter.call(this,b)),b?(this.settings.state.preserve_loaded||delete b.core.loaded,this.element.one("set_state.jstree",function(c,d){d.instance.trigger("restore_state",{state:a.extend(!0,{},b)})}),this.set_state(b),!0):!1)},this.clear_state=function(){return a.vakata.storage.del(this.settings.state.key)}},function(a,b){a.vakata.storage={set:function(a,b){return window.localStorage.setItem(a,b)},get:function(a){return window.localStorage.getItem(a)},del:function(a){return window.localStorage.removeItem(a)}}}(a),a.jstree.defaults.types={"default":{}},a.jstree.defaults.types[a.jstree.root]={},a.jstree.plugins.types=function(c,d){this.init=function(c,e){var f,g;if(e&&e.types&&e.types["default"])for(f in e.types)if("default"!==f&&f!==a.jstree.root&&e.types.hasOwnProperty(f))for(g in e.types["default"])e.types["default"].hasOwnProperty(g)&&e.types[f][g]===b&&(e.types[f][g]=e.types["default"][g]);d.init.call(this,c,e),this._model.data[a.jstree.root].type=a.jstree.root},this.refresh=function(b,c){d.refresh.call(this,b,c),this._model.data[a.jstree.root].type=a.jstree.root},this.bind=function(){this.element.on("model.jstree",a.proxy(function(c,d){var e=this._model.data,f=d.nodes,g=this.settings.types,h,i,j="default",k;for(h=0,i=f.length;i>h;h++){if(j="default",e[f[h]].original&&e[f[h]].original.type&&g[e[f[h]].original.type]&&(j=e[f[h]].original.type),e[f[h]].data&&e[f[h]].data.jstree&&e[f[h]].data.jstree.type&&g[e[f[h]].data.jstree.type]&&(j=e[f[h]].data.jstree.type),e[f[h]].type=j,e[f[h]].icon===!0&&g[j].icon!==b&&(e[f[h]].icon=g[j].icon),g[j].li_attr!==b&&"object"==typeof g[j].li_attr)for(k in g[j].li_attr)if(g[j].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].li_attr[k]===b?e[f[h]].li_attr[k]=g[j].li_attr[k]:"class"===k&&(e[f[h]].li_attr["class"]=g[j].li_attr["class"]+" "+e[f[h]].li_attr["class"])}if(g[j].a_attr!==b&&"object"==typeof g[j].a_attr)for(k in g[j].a_attr)if(g[j].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].a_attr[k]===b?e[f[h]].a_attr[k]=g[j].a_attr[k]:"href"===k&&"#"===e[f[h]].a_attr[k]?e[f[h]].a_attr.href=g[j].a_attr.href:"class"===k&&(e[f[h]].a_attr["class"]=g[j].a_attr["class"]+" "+e[f[h]].a_attr["class"])}}e[a.jstree.root].type=a.jstree.root},this)),d.bind.call(this)},this.get_json=function(b,c,e){var f,g,h=this._model.data,i=c?a.extend(!0,{},c,{no_id:!1}):{},j=d.get_json.call(this,b,i,e);if(j===!1)return!1;if(a.isArray(j))for(f=0,g=j.length;g>f;f++)j[f].type=j[f].id&&h[j[f].id]&&h[j[f].id].type?h[j[f].id].type:"default", +c&&c.no_id&&(delete j[f].id,j[f].li_attr&&j[f].li_attr.id&&delete j[f].li_attr.id,j[f].a_attr&&j[f].a_attr.id&&delete j[f].a_attr.id);else j.type=j.id&&h[j.id]&&h[j.id].type?h[j.id].type:"default",c&&c.no_id&&(j=this._delete_ids(j));return j},this._delete_ids=function(b){if(a.isArray(b)){for(var c=0,d=b.length;d>c;c++)b[c]=this._delete_ids(b[c]);return b}return delete b.id,b.li_attr&&b.li_attr.id&&delete b.li_attr.id,b.a_attr&&b.a_attr.id&&delete b.a_attr.id,b.children&&a.isArray(b.children)&&(b.children=this._delete_ids(b.children)),b},this.check=function(c,e,f,g,h){if(d.check.call(this,c,e,f,g,h)===!1)return!1;e=e&&e.id?e:this.get_node(e),f=f&&f.id?f:this.get_node(f);var i=e&&e.id?h&&h.origin?h.origin:a.jstree.reference(e.id):null,j,k,l,m;switch(i=i&&i._model&&i._model.data?i._model.data:null,c){case"create_node":case"move_node":case"copy_node":if("move_node"!==c||-1===a.inArray(e.id,f.children)){if(j=this.get_rules(f),j.max_children!==b&&-1!==j.max_children&&j.max_children===f.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(j.valid_children!==b&&-1!==j.valid_children&&-1===a.inArray(e.type||"default",j.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(i&&e.children_d&&e.parents){for(k=0,l=0,m=e.children_d.length;m>l;l++)k=Math.max(k,i[e.children_d[l]].parents.length);k=k-e.parents.length+1}(0>=k||k===b)&&(k=1);do{if(j.max_depth!==b&&-1!==j.max_depth&&j.max_depthg;g++)this.set_type(c[g],d);return!0}if(f=this.settings.types,c=this.get_node(c),!f[d]||!c)return!1;if(l=this.get_node(c,!0),l&&l.length&&(m=l.children(".jstree-anchor")),i=c.type,j=this.get_icon(c),c.type=d,(j===!0||!f[i]||f[i].icon!==b&&j===f[i].icon)&&this.set_icon(c,f[d].icon!==b?f[d].icon:!0),f[i]&&f[i].li_attr!==b&&"object"==typeof f[i].li_attr)for(k in f[i].li_attr)if(f[i].li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].li_attr["class"]=(e[c.id].li_attr["class"]||"").replace(f[i].li_attr[k],""),l&&l.removeClass(f[i].li_attr[k])):e[c.id].li_attr[k]===f[i].li_attr[k]&&(e[c.id].li_attr[k]=null,l&&l.removeAttr(k))}if(f[i]&&f[i].a_attr!==b&&"object"==typeof f[i].a_attr)for(k in f[i].a_attr)if(f[i].a_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].a_attr["class"]=(e[c.id].a_attr["class"]||"").replace(f[i].a_attr[k],""),m&&m.removeClass(f[i].a_attr[k])):e[c.id].a_attr[k]===f[i].a_attr[k]&&("href"===k?(e[c.id].a_attr[k]="#",m&&m.attr("href","#")):(delete e[c.id].a_attr[k],m&&m.removeAttr(k)))}if(f[d].li_attr!==b&&"object"==typeof f[d].li_attr)for(k in f[d].li_attr)if(f[d].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].li_attr[k]===b?(e[c.id].li_attr[k]=f[d].li_attr[k],l&&("class"===k?l.addClass(f[d].li_attr[k]):l.attr(k,f[d].li_attr[k]))):"class"===k&&(e[c.id].li_attr["class"]=f[d].li_attr[k]+" "+e[c.id].li_attr["class"],l&&l.addClass(f[d].li_attr[k]))}if(f[d].a_attr!==b&&"object"==typeof f[d].a_attr)for(k in f[d].a_attr)if(f[d].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].a_attr[k]===b?(e[c.id].a_attr[k]=f[d].a_attr[k],m&&("class"===k?m.addClass(f[d].a_attr[k]):m.attr(k,f[d].a_attr[k]))):"href"===k&&"#"===e[c.id].a_attr[k]?(e[c.id].a_attr.href=f[d].a_attr.href,m&&m.attr("href",f[d].a_attr.href)):"class"===k&&(e[c.id].a_attr["class"]=f[d].a_attr["class"]+" "+e[c.id].a_attr["class"],m&&m.addClass(f[d].a_attr[k]))}return!0}},a.jstree.defaults.unique={case_sensitive:!1,trim_whitespace:!1,duplicate:function(a,b){return a+" ("+b+")"}},a.jstree.plugins.unique=function(c,d){this.check=function(b,c,e,f,g){if(d.check.call(this,b,c,e,f,g)===!1)return!1;if(c=c&&c.id?c:this.get_node(c),e=e&&e.id?e:this.get_node(e),!e||!e.children)return!0;var h="rename_node"===b?f:c.text,i=[],j=this.settings.unique.case_sensitive,k=this.settings.unique.trim_whitespace,l=this._model.data,m,n,o;for(m=0,n=e.children.length;n>m;m++)o=l[e.children[m]].text,j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),i.push(o);switch(j||(h=h.toLowerCase()),k&&(h=h.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),b){case"delete_node":return!0;case"rename_node":return o=c.text||"",j||(o=o.toLowerCase()),k&&(o=o.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),m=-1===a.inArray(h,i)||c.text&&o===h,m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"create_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"copy_node":return m=-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m;case"move_node":return m=c.parent===e.id&&(!g||!g.is_multi)||-1===a.inArray(h,i),m||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),m}return!0},this.create_node=function(c,e,f,g,h){if(!e||e.text===b){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return d.create_node.call(this,c,e,f,g,h);if(f=f===b?"last":f,!f.toString().match(/^(before|after)$/)&&!h&&!this.is_loaded(c))return d.create_node.call(this,c,e,f,g,h);e||(e={});var i,j,k,l,m,n=this._model.data,o=this.settings.unique.case_sensitive,p=this.settings.unique.trim_whitespace,q=this.settings.unique.duplicate,r;for(j=i=this.get_string("New node"),k=[],l=0,m=c.children.length;m>l;l++)r=n[c.children[l]].text,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")),k.push(r);l=1,r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));while(-1!==a.inArray(r,k))j=q.call(this,i,++l).toString(),r=j,o||(r=r.toLowerCase()),p&&(r=r.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""));e.text=j}return d.create_node.call(this,c,e,f,g,h)}};var n=i.createElement("DIV");if(n.setAttribute("unselectable","on"),n.setAttribute("role","presentation"),n.className="jstree-wholerow",n.innerHTML=" ",a.jstree.plugins.wholerow=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("ready.jstree set_state.jstree",a.proxy(function(){this.hide_dots()},this)).on("init.jstree loading.jstree ready.jstree",a.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var c=!1,d,e;for(d=0,e=b.selected.length;e>d;d++)c=this.get_node(b.selected[d],!0),c&&c.length&&c.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("open_node.jstree",a.proxy(function(a,b){this.get_node(b.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",a.proxy(function(a,b){"hover_node"===a.type&&this.is_disabled(b.node)||this.get_node(b.node,!0).children(".jstree-wholerow")["hover_node"===a.type?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",a.proxy(function(b){if(this._data.contextmenu){b.preventDefault();var c=a.Event("contextmenu",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,pageX:b.pageX,pageY:b.pageY});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c)}},this)).on("click.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("dblclick.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("dblclick",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("click.jstree",".jstree-leaf > .jstree-ocl",a.proxy(function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()},this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",a.proxy(function(a){return a.stopImmediatePropagation(),this.is_disabled(a.currentTarget)||this.hover_node(a.currentTarget),!1},this)).on("mouseleave.jstree",".jstree-node",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),c.teardown.call(this)},this.redraw_node=function(b,d,e,f){if(b=c.redraw_node.apply(this,arguments)){var g=n.cloneNode(!0);-1!==a.inArray(b.id,this._data.core.selected)&&(g.className+=" jstree-wholerow-clicked"),this._data.core.focused&&this._data.core.focused===b.id&&(g.className+=" jstree-wholerow-hovered"),b.insertBefore(g,b.childNodes[0])}return b}},window.customElements&&Object&&Object.create){var o=Object.create(HTMLElement.prototype);o.createdCallback=function(){var b={core:{},plugins:[]},c;for(c in a.jstree.plugins)a.jstree.plugins.hasOwnProperty(c)&&this.attributes[c]&&(b.plugins.push(c),this.getAttribute(c)&&JSON.parse(this.getAttribute(c))&&(b[c]=JSON.parse(this.getAttribute(c))));for(c in a.jstree.defaults.core)a.jstree.defaults.core.hasOwnProperty(c)&&this.attributes[c]&&(b.core[c]=JSON.parse(this.getAttribute(c))||this.getAttribute(c));a(this).jstree(b)};try{window.customElements.define("vakata-jstree",function(){},{prototype:o})}catch(p){}}}}); \ No newline at end of file diff --git a/libs/jstree/themes/mixed/32px.png b/libs/jstree/themes/mixed/32px.png new file mode 100644 index 0000000..d6fd721 Binary files /dev/null and b/libs/jstree/themes/mixed/32px.png differ diff --git a/libs/jstree/themes/mixed/40px.png b/libs/jstree/themes/mixed/40px.png new file mode 100644 index 0000000..4fc88e4 Binary files /dev/null and b/libs/jstree/themes/mixed/40px.png differ diff --git a/libs/jstree/themes/mixed/style.css b/libs/jstree/themes/mixed/style.css new file mode 100644 index 0000000..674f87c --- /dev/null +++ b/libs/jstree/themes/mixed/style.css @@ -0,0 +1,1108 @@ +/* jsTree default theme */ +.jstree-node, +.jstree-children, +.jstree-container-ul { + display: block; + margin: 0; + padding: 0; + list-style-type: none; + list-style-image: none; +} +.jstree-node { + white-space: nowrap; +} +.jstree-anchor { + display: inline-block; + color: black; + white-space: nowrap; + padding: 0 4px 0 1px; + margin: 0; + vertical-align: top; +} +.jstree-anchor:focus { + outline: 0; +} +.jstree-anchor, +.jstree-anchor:link, +.jstree-anchor:visited, +.jstree-anchor:hover, +.jstree-anchor:active { + text-decoration: none; + color: inherit; +} +.jstree-icon { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0; + vertical-align: top; + text-align: center; +} +.jstree-icon:empty { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0; + vertical-align: top; + text-align: center; +} +.jstree-ocl { + cursor: pointer; +} +.jstree-leaf > .jstree-ocl { + cursor: default; +} +.jstree .jstree-open > .jstree-children { + display: block; +} +.jstree .jstree-closed > .jstree-children, +.jstree .jstree-leaf > .jstree-children { + display: none; +} +.jstree-anchor > .jstree-themeicon { + margin-right: 2px; +} +.jstree-no-icons .jstree-themeicon, +.jstree-anchor > .jstree-themeicon-hidden { + display: none; +} +.jstree-hidden, +.jstree-node.jstree-hidden { + display: none; +} +.jstree-rtl .jstree-anchor { + padding: 0 1px 0 4px; +} +.jstree-rtl .jstree-anchor > .jstree-themeicon { + margin-left: 2px; + margin-right: 0; +} +.jstree-rtl .jstree-node { + margin-left: 0; +} +.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; +} +.jstree-wholerow-ul { + position: relative; + display: inline-block; + min-width: 100%; +} +.jstree-wholerow-ul .jstree-leaf > .jstree-ocl { + cursor: pointer; +} +.jstree-wholerow-ul .jstree-anchor, +.jstree-wholerow-ul .jstree-icon { + position: relative; +} +.jstree-wholerow-ul .jstree-wholerow { + width: 100%; + cursor: pointer; + position: absolute; + left: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.jstree-contextmenu .jstree-anchor { + -webkit-user-select: none; + /* disable selection/Copy of UIWebView */ + -webkit-touch-callout: none; + /* disable the IOS popup when long-press on a link */ +} +.vakata-context { + display: none; +} +.vakata-context, +.vakata-context ul { + margin: 0; + padding: 2px; + position: absolute; + background: #f5f5f5; + border: 1px solid #979797; + box-shadow: 2px 2px 2px #999999; +} +.vakata-context ul { + list-style: none; + left: 100%; + margin-top: -2.7em; + margin-left: -4px; +} +.vakata-context .vakata-context-right ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context li { + list-style: none; +} +.vakata-context li > a { + display: block; + padding: 0 2em 0 2em; + text-decoration: none; + width: auto; + color: black; + white-space: nowrap; + line-height: 2.4em; + text-shadow: 1px 1px 0 white; + border-radius: 1px; +} +.vakata-context li > a:hover { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); + background-position: right center; + background-repeat: no-repeat; +} +.vakata-context li > a:focus { + outline: 0; +} +.vakata-context .vakata-context-hover > a { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context .vakata-context-separator > a, +.vakata-context .vakata-context-separator > a:hover { + background: white; + border: 0; + border-top: 1px solid #e2e3e3; + height: 1px; + min-height: 1px; + max-height: 1px; + padding: 0; + margin: 0 0 0 2.4em; + border-left: 1px solid #e0e0e0; + text-shadow: 0 0 0 transparent; + box-shadow: 0 0 0 transparent; + border-radius: 0; +} +.vakata-context .vakata-contextmenu-disabled a, +.vakata-context .vakata-contextmenu-disabled a:hover { + color: silver; + background-color: transparent; + border: 0; + box-shadow: 0 0 0; +} +.vakata-context li > a > i { + text-decoration: none; + display: inline-block; + width: 2.4em; + height: 2.4em; + background: transparent; + margin: 0 0 0 -2em; + vertical-align: top; + text-align: center; + line-height: 2.4em; +} +.vakata-context li > a > i:empty { + width: 2.4em; + line-height: 2.4em; +} +.vakata-context li > a .vakata-contextmenu-sep { + display: inline-block; + width: 1px; + height: 2.4em; + background: white; + margin: 0 0.5em 0 0; + border-left: 1px solid #e2e3e3; +} +.vakata-context .vakata-contextmenu-shortcut { + font-size: 0.8em; + color: silver; + opacity: 0.5; + display: none; +} +.vakata-context-rtl ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context-rtl li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); + background-position: left center; + background-repeat: no-repeat; +} +.vakata-context-rtl .vakata-context-separator > a { + margin: 0 2.4em 0 0; + border-left: 0; + border-right: 1px solid #e2e3e3; +} +.vakata-context-rtl .vakata-context-left ul { + right: auto; + left: 100%; + margin-left: -4px; + margin-right: auto; +} +.vakata-context-rtl li > a > i { + margin: 0 -2em 0 0; +} +.vakata-context-rtl li > a .vakata-contextmenu-sep { + margin: 0 0 0 0.5em; + border-left-color: white; + background: #e2e3e3; +} +#jstree-marker { + position: absolute; + top: 0; + left: 0; + margin: -5px 0 0 0; + padding: 0; + border-right: 0; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid; + width: 0; + height: 0; + font-size: 0; + line-height: 0; +} +#jstree-dnd { + line-height: 16px; + margin: 0; + padding: 4px; +} +#jstree-dnd .jstree-icon, +#jstree-dnd .jstree-copy { + display: inline-block; + text-decoration: none; + margin: 0 2px 0 0; + padding: 0; + width: 16px; + height: 16px; +} +#jstree-dnd .jstree-ok { + background: green; +} +#jstree-dnd .jstree-er { + background: red; +} +#jstree-dnd .jstree-copy { + margin: 0 2px 0 2px; +} +.jstree-default .jstree-node, +.jstree-default .jstree-icon { + background-repeat: no-repeat; + background-color: transparent; +} +.jstree-default .jstree-anchor, +.jstree-default .jstree-animated, +.jstree-default .jstree-wholerow { + transition: background-color 0.15s, box-shadow 0.15s; +} +.jstree-default .jstree-hovered { + background: #e7f4f9; + border-radius: 2px; + box-shadow: inset 0 0 1px #cccccc; +} +.jstree-default .jstree-context { + background: #e7f4f9; + border-radius: 2px; + box-shadow: inset 0 0 1px #cccccc; +} +.jstree-default .jstree-clicked { + background: #beebff; + border-radius: 2px; + box-shadow: inset 0 0 1px #999999; +} +.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { + display: none; +} +.jstree-default .jstree-disabled { + background: transparent; + color: #666666; +} +.jstree-default .jstree-disabled.jstree-hovered { + background: transparent; + box-shadow: none; +} +.jstree-default .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default .jstree-disabled > .jstree-icon { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default .jstree-search { + font-style: italic; + color: #8b0000; + font-weight: bold; +} +.jstree-default .jstree-no-checkboxes .jstree-checkbox { + display: none !important; +} +.jstree-default.jstree-checkbox-no-clicked .jstree-clicked { + background: transparent; + box-shadow: none; +} +.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { + background: #e7f4f9; +} +.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { + background: transparent; +} +.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { + background: #e7f4f9; +} +.jstree-default > .jstree-striped { + min-width: 100%; + display: inline-block; + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; +} +.jstree-default > .jstree-wholerow-ul .jstree-hovered, +.jstree-default > .jstree-wholerow-ul .jstree-clicked { + background: transparent; + box-shadow: none; + border-radius: 0; +} +.jstree-default .jstree-wholerow { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.jstree-default .jstree-wholerow-hovered { + background: #e7f4f9; +} +.jstree-default .jstree-wholerow-clicked { + background: #beebff; + background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); + background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); +} +.jstree-default .jstree-node { + min-height: 24px; + line-height: 24px; + margin-left: 24px; + min-width: 24px; +} +.jstree-default .jstree-anchor { + line-height: 24px; + height: 24px; +} +.jstree-default .jstree-icon { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default .jstree-icon:empty { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default.jstree-rtl .jstree-node { + margin-right: 24px; +} +.jstree-default .jstree-wholerow { + height: 24px; +} +.jstree-default .jstree-node, +.jstree-default .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default .jstree-node { + background-position: -292px -4px; + background-repeat: repeat-y; +} +.jstree-default .jstree-last { + background: transparent; +} +.jstree-default .jstree-open > .jstree-ocl { + background-position: -132px -4px; +} +.jstree-default .jstree-closed > .jstree-ocl { + background-position: -100px -4px; +} +.jstree-default .jstree-leaf > .jstree-ocl { + background-position: -68px -4px; +} +.jstree-default .jstree-themeicon { + background-position: -260px -4px; +} +.jstree-default > .jstree-no-dots .jstree-node, +.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -4px; +} +.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -4px; +} +.jstree-default .jstree-disabled { + background: transparent; +} +.jstree-default .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default .jstree-checkbox { + background-position: -164px -4px; +} +.jstree-default .jstree-checkbox:hover { + background-position: -164px -36px; +} +.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default .jstree-checked > .jstree-checkbox { + background-position: -228px -4px; +} +.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default .jstree-checked > .jstree-checkbox:hover { + background-position: -228px -36px; +} +.jstree-default .jstree-anchor > .jstree-undetermined { + background-position: -196px -4px; +} +.jstree-default .jstree-anchor > .jstree-undetermined:hover { + background-position: -196px -36px; +} +.jstree-default .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default > .jstree-striped { + background-size: auto 48px; +} +.jstree-default.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -132px -36px; +} +.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -100px -36px; +} +.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -68px -36px; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -36px; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -36px; +} +.jstree-default .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default .jstree-file { + background: url("32px.png") -100px -68px no-repeat; +} +.jstree-default .jstree-folder { + background: url("32px.png") -260px -4px no-repeat; +} +.jstree-default > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default { + line-height: 24px; + padding: 0 4px; +} +#jstree-dnd.jstree-default .jstree-ok, +#jstree-dnd.jstree-default .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default i { + background: transparent; + width: 24px; + height: 24px; + line-height: 24px; +} +#jstree-dnd.jstree-default .jstree-ok { + background-position: -4px -68px; +} +#jstree-dnd.jstree-default .jstree-er { + background-position: -36px -68px; +} +.jstree-default .jstree-ellipsis { + overflow: hidden; +} +.jstree-default .jstree-ellipsis .jstree-anchor { + width: calc(100% - 29px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor { + width: calc(100% - 5px); +} +.jstree-default.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); +} +.jstree-default.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-small .jstree-node { + min-height: 18px; + line-height: 18px; + margin-left: 18px; + min-width: 18px; +} +.jstree-default-small .jstree-anchor { + line-height: 18px; + height: 18px; +} +.jstree-default-small .jstree-icon { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-small .jstree-icon:empty { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-small.jstree-rtl .jstree-node { + margin-right: 18px; +} +.jstree-default-small .jstree-wholerow { + height: 18px; +} +.jstree-default-small .jstree-node, +.jstree-default-small .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-small .jstree-node { + background-position: -295px -7px; + background-repeat: repeat-y; +} +.jstree-default-small .jstree-last { + background: transparent; +} +.jstree-default-small .jstree-open > .jstree-ocl { + background-position: -135px -7px; +} +.jstree-default-small .jstree-closed > .jstree-ocl { + background-position: -103px -7px; +} +.jstree-default-small .jstree-leaf > .jstree-ocl { + background-position: -71px -7px; +} +.jstree-default-small .jstree-themeicon { + background-position: -263px -7px; +} +.jstree-default-small > .jstree-no-dots .jstree-node, +.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -7px; +} +.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -7px; +} +.jstree-default-small .jstree-disabled { + background: transparent; +} +.jstree-default-small .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-small .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-small .jstree-checkbox { + background-position: -167px -7px; +} +.jstree-default-small .jstree-checkbox:hover { + background-position: -167px -39px; +} +.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-small .jstree-checked > .jstree-checkbox { + background-position: -231px -7px; +} +.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-small .jstree-checked > .jstree-checkbox:hover { + background-position: -231px -39px; +} +.jstree-default-small .jstree-anchor > .jstree-undetermined { + background-position: -199px -7px; +} +.jstree-default-small .jstree-anchor > .jstree-undetermined:hover { + background-position: -199px -39px; +} +.jstree-default-small .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-small > .jstree-striped { + background-size: auto 36px; +} +.jstree-default-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -135px -39px; +} +.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -103px -39px; +} +.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -71px -39px; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -39px; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -39px; +} +.jstree-default-small .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-small .jstree-file { + background: url("32px.png") -103px -71px no-repeat; +} +.jstree-default-small .jstree-folder { + background: url("32px.png") -263px -7px no-repeat; +} +.jstree-default-small > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-small { + line-height: 18px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-small .jstree-ok, +#jstree-dnd.jstree-default-small .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-small i { + background: transparent; + width: 18px; + height: 18px; + line-height: 18px; +} +#jstree-dnd.jstree-default-small .jstree-ok { + background-position: -7px -71px; +} +#jstree-dnd.jstree-default-small .jstree-er { + background-position: -39px -71px; +} +.jstree-default-small .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-small .jstree-ellipsis .jstree-anchor { + width: calc(100% - 23px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor { + width: calc(100% - 5px); +} +.jstree-default-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); +} +.jstree-default-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-large .jstree-node { + min-height: 32px; + line-height: 32px; + margin-left: 32px; + min-width: 32px; +} +.jstree-default-large .jstree-anchor { + line-height: 32px; + height: 32px; +} +.jstree-default-large .jstree-icon { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-large .jstree-icon:empty { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-large.jstree-rtl .jstree-node { + margin-right: 32px; +} +.jstree-default-large .jstree-wholerow { + height: 32px; +} +.jstree-default-large .jstree-node, +.jstree-default-large .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-large .jstree-node { + background-position: -288px 0px; + background-repeat: repeat-y; +} +.jstree-default-large .jstree-last { + background: transparent; +} +.jstree-default-large .jstree-open > .jstree-ocl { + background-position: -128px 0px; +} +.jstree-default-large .jstree-closed > .jstree-ocl { + background-position: -96px 0px; +} +.jstree-default-large .jstree-leaf > .jstree-ocl { + background-position: -64px 0px; +} +.jstree-default-large .jstree-themeicon { + background-position: -256px 0px; +} +.jstree-default-large > .jstree-no-dots .jstree-node, +.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px 0px; +} +.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px 0px; +} +.jstree-default-large .jstree-disabled { + background: transparent; +} +.jstree-default-large .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-large .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-large .jstree-checkbox { + background-position: -160px 0px; +} +.jstree-default-large .jstree-checkbox:hover { + background-position: -160px -32px; +} +.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-large .jstree-checked > .jstree-checkbox { + background-position: -224px 0px; +} +.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-large .jstree-checked > .jstree-checkbox:hover { + background-position: -224px -32px; +} +.jstree-default-large .jstree-anchor > .jstree-undetermined { + background-position: -192px 0px; +} +.jstree-default-large .jstree-anchor > .jstree-undetermined:hover { + background-position: -192px -32px; +} +.jstree-default-large .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-large > .jstree-striped { + background-size: auto 64px; +} +.jstree-default-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-large.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -128px -32px; +} +.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -96px -32px; +} +.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -64px -32px; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px -32px; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px -32px; +} +.jstree-default-large .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-large .jstree-file { + background: url("32px.png") -96px -64px no-repeat; +} +.jstree-default-large .jstree-folder { + background: url("32px.png") -256px 0px no-repeat; +} +.jstree-default-large > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-large { + line-height: 32px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-large .jstree-ok, +#jstree-dnd.jstree-default-large .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-large i { + background: transparent; + width: 32px; + height: 32px; + line-height: 32px; +} +#jstree-dnd.jstree-default-large .jstree-ok { + background-position: 0px -64px; +} +#jstree-dnd.jstree-default-large .jstree-er { + background-position: -32px -64px; +} +.jstree-default-large .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-large .jstree-ellipsis .jstree-anchor { + width: calc(100% - 37px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor { + width: calc(100% - 5px); +} +.jstree-default-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); +} +.jstree-default-large.jstree-rtl .jstree-last { + background: transparent; +} +@media (max-width: 768px) { + #jstree-dnd.jstree-dnd-responsive { + line-height: 40px; + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + #jstree-dnd.jstree-dnd-responsive > i { + background: transparent; + width: 40px; + height: 40px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-ok { + background-image: url("40px.png"); + background-position: 0 -200px; + background-size: 120px 240px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-er { + background-image: url("40px.png"); + background-position: -40px -200px; + background-size: 120px 240px; + } + #jstree-marker.jstree-dnd-responsive { + border-left-width: 10px; + border-top-width: 10px; + border-bottom-width: 10px; + margin-top: -10px; + } +} +@media (max-width: 768px) { + .jstree-default-responsive { + /* + .jstree-open > .jstree-ocl, + .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } + */ + } + .jstree-default-responsive .jstree-icon { + background-image: url("40px.png"); + } + .jstree-default-responsive .jstree-node, + .jstree-default-responsive .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-responsive .jstree-node { + min-height: 40px; + line-height: 40px; + margin-left: 40px; + min-width: 40px; + white-space: nowrap; + } + .jstree-default-responsive .jstree-anchor { + line-height: 40px; + height: 40px; + } + .jstree-default-responsive .jstree-icon, + .jstree-default-responsive .jstree-icon:empty { + width: 40px; + height: 40px; + line-height: 40px; + } + .jstree-default-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + } + .jstree-default-responsive.jstree-rtl .jstree-node { + margin-left: 0; + margin-right: 40px; + background: transparent; + } + .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; + } + .jstree-default-responsive .jstree-ocl, + .jstree-default-responsive .jstree-themeicon, + .jstree-default-responsive .jstree-checkbox { + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-leaf > .jstree-ocl, + .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-responsive .jstree-open > .jstree-ocl { + background-position: 0 0px !important; + } + .jstree-default-responsive .jstree-closed > .jstree-ocl { + background-position: 0 -40px !important; + } + .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -40px 0px !important; + } + .jstree-default-responsive .jstree-themeicon { + background-position: -40px -40px; + } + .jstree-default-responsive .jstree-checkbox, + .jstree-default-responsive .jstree-checkbox:hover { + background-position: -40px -80px; + } + .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, + .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, + .jstree-default-responsive .jstree-checked > .jstree-checkbox, + .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { + background-position: 0 -80px; + } + .jstree-default-responsive .jstree-anchor > .jstree-undetermined, + .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { + background-position: 0 -120px; + } + .jstree-default-responsive .jstree-anchor { + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + .jstree-default-responsive > .jstree-striped { + background: transparent; + } + .jstree-default-responsive .jstree-wholerow { + border-top: 1px solid rgba(255, 255, 255, 0.7); + border-bottom: 1px solid rgba(64, 64, 64, 0.2); + background: #ebebeb; + height: 40px; + } + .jstree-default-responsive .jstree-wholerow-hovered { + background: #e7f4f9; + } + .jstree-default-responsive .jstree-wholerow-clicked { + background: #beebff; + } + .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { + box-shadow: inset 0 -6px 3px -5px #666666; + } + .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { + box-shadow: inset 0 6px 3px -5px #666666; + border-top: 0; + } + .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { + box-shadow: none; + } + .jstree-default-responsive .jstree-node, + .jstree-default-responsive .jstree-icon, + .jstree-default-responsive .jstree-node > .jstree-ocl, + .jstree-default-responsive .jstree-themeicon, + .jstree-default-responsive .jstree-checkbox { + background-image: url("40px.png"); + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-node { + background-position: -80px 0; + background-repeat: repeat-y; + } + .jstree-default-responsive .jstree-last { + background: transparent; + } + .jstree-default-responsive .jstree-leaf > .jstree-ocl { + background-position: -40px -120px; + } + .jstree-default-responsive .jstree-last > .jstree-ocl { + background-position: -40px -160px; + } + .jstree-default-responsive .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; + } + .jstree-default-responsive .jstree-file { + background: url("40px.png") 0 -160px no-repeat; + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-folder { + background: url("40px.png") -40px -40px no-repeat; + background-size: 120px 240px; + } + .jstree-default-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; + } +} diff --git a/libs/jstree/themes/mixed/style.min.css b/libs/jstree/themes/mixed/style.min.css new file mode 100644 index 0000000..f9822c7 --- /dev/null +++ b/libs/jstree/themes/mixed/style.min.css @@ -0,0 +1 @@ +.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-animated,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-context{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default .jstree-ellipsis{overflow:hidden}.jstree-default .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small .jstree-ellipsis{overflow:hidden}.jstree-default-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large .jstree-ellipsis{overflow:hidden}.jstree-default-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:0 0}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl,.jstree-default-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}} \ No newline at end of file diff --git a/libs/jstree/themes/mixed/throbber.gif b/libs/jstree/themes/mixed/throbber.gif new file mode 100644 index 0000000..cd75035 Binary files /dev/null and b/libs/jstree/themes/mixed/throbber.gif differ diff --git a/libs/openlayers3/LICENSE b/libs/openlayers3/LICENSE new file mode 100644 index 0000000..d2cf0d7 --- /dev/null +++ b/libs/openlayers3/LICENSE @@ -0,0 +1,4 @@ +http://openlayers.org/ + +Code licensed under the 2-Clause BSD. All documentation CC BY 3.0. Thanks to our sponsors. +https://tldrlegal.com/license/bsd-2-clause-license-(freebsd) \ No newline at end of file diff --git a/libs/openlayers3/ol-deps.js b/libs/openlayers3/ol-deps.js new file mode 100644 index 0000000..eaa5be2 --- /dev/null +++ b/libs/openlayers3/ol-deps.js @@ -0,0 +1,1716 @@ +// This file was autogenerated by depswriter.py. +// Please do not edit. +goog.addDependency('../../../ol.ext/pbf.js', ['ol.ext.pbf'], [], false); +goog.addDependency('../../../ol.ext/pixelworks.js', ['ol.ext.pixelworks'], [], false); +goog.addDependency('../../../ol.ext/rbush.js', ['ol.ext.rbush'], [], false); +goog.addDependency('../../../ol.ext/vectortile.js', ['ol.ext.vectortile'], [], false); +goog.addDependency('../../../ol/ol/animation.js', ['ol.animation'], ['ol', 'ol.PreRenderFunction', 'ol.ViewHint', 'ol.coordinate', 'ol.easing'], false); +goog.addDependency('../../../ol/ol/array.js', ['ol.array'], ['goog.array', 'goog.asserts'], false); +goog.addDependency('../../../ol/ol/attribution.js', ['ol.Attribution'], ['goog.math', 'ol.TileRange'], false); +goog.addDependency('../../../ol/ol/canvasfunction.js', ['ol.CanvasFunctionType'], [], false); +goog.addDependency('../../../ol/ol/centerconstraint.js', ['ol.CenterConstraint', 'ol.CenterConstraintType'], ['ol.math'], false); +goog.addDependency('../../../ol/ol/collection.js', ['ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType'], ['goog.array', 'goog.events.Event', 'ol.Object'], false); +goog.addDependency('../../../ol/ol/color/color.js', ['ol.Color', 'ol.color'], ['goog.asserts', 'goog.color', 'goog.color.names', 'goog.vec.Mat4', 'ol', 'ol.math'], false); +goog.addDependency('../../../ol/ol/constraints.js', ['ol.Constraints'], ['ol.CenterConstraintType', 'ol.ResolutionConstraintType', 'ol.RotationConstraintType'], false); +goog.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); +goog.addDependency('../../../ol/ol/control/control.js', ['ol.control.Control'], ['goog.dom', 'goog.events', 'ol', 'ol.MapEventType', 'ol.Object'], false); +goog.addDependency('../../../ol/ol/control/controldefaults.js', ['ol.control'], ['ol', 'ol.Collection', 'ol.control.Attribution', 'ol.control.Rotate', 'ol.control.Zoom'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/control/zoomtoextentcontrol.js', ['ol.control.ZoomToExtent'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.events.EventType', 'ol.control.Control', 'ol.css'], false); +goog.addDependency('../../../ol/ol/coordinate.js', ['ol.Coordinate', 'ol.CoordinateFormatType', 'ol.coordinate'], ['goog.math', 'goog.string'], false); +goog.addDependency('../../../ol/ol/css.js', ['ol.css'], [], false); +goog.addDependency('../../../ol/ol/deviceorientation.js', ['ol.DeviceOrientation', 'ol.DeviceOrientationProperty'], ['goog.events', 'ol', 'ol.Object', 'ol.has', 'ol.math'], false); +goog.addDependency('../../../ol/ol/dom/dom.js', ['ol.dom', 'ol.dom.BrowserFeature'], ['goog.asserts', 'goog.dom', 'goog.userAgent', 'goog.vec.Mat4', 'ol'], false); +goog.addDependency('../../../ol/ol/easing.js', ['ol.easing'], [], false); +goog.addDependency('../../../ol/ol/events/condition.js', ['ol.events.ConditionType', 'ol.events.condition'], ['goog.asserts', 'goog.functions', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserPointerEvent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/format/featureformat.js', ['ol.format.Feature'], ['ol.geom.Geometry', 'ol.proj'], false); +goog.addDependency('../../../ol/ol/format/format.js', ['ol.format.FormatType'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/format/jsonfeatureformat.js', ['ol.format.JSONFeature'], ['goog.asserts', 'goog.json', 'ol.format.Feature', 'ol.format.FormatType'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/format/textfeatureformat.js', ['ol.format.TextFeature'], ['goog.asserts', 'ol.format.Feature', 'ol.format.FormatType'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/format/xlinkformat.js', ['ol.format.XLink'], [], false); +goog.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); +goog.addDependency('../../../ol/ol/format/xmlformat.js', ['ol.format.XML'], ['goog.asserts', 'ol.xml'], false); +goog.addDependency('../../../ol/ol/format/xsdformat.js', ['ol.format.XSD'], ['goog.asserts', 'goog.string', 'ol', 'ol.xml'], false); +goog.addDependency('../../../ol/ol/framestate.js', ['ol.PostRenderFunction', 'ol.PreRenderFunction'], [], false); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/geom/flat/areaflatgeom.js', ['ol.geom.flat.area'], [], false); +goog.addDependency('../../../ol/ol/geom/flat/centerflatgeom.js', ['ol.geom.flat.center'], ['ol.extent'], false); +goog.addDependency('../../../ol/ol/geom/flat/closestflatgeom.js', ['ol.geom.flat.closest'], ['goog.asserts', 'goog.math', 'ol.math'], false); +goog.addDependency('../../../ol/ol/geom/flat/containsflatgeom.js', ['ol.geom.flat.contains'], ['goog.asserts', 'ol.extent'], false); +goog.addDependency('../../../ol/ol/geom/flat/deflateflatgeom.js', ['ol.geom.flat.deflate'], ['goog.asserts'], false); +goog.addDependency('../../../ol/ol/geom/flat/flipflatgeom.js', ['ol.geom.flat.flip'], ['goog.asserts'], false); +goog.addDependency('../../../ol/ol/geom/flat/geodesicflatgeom.js', ['ol.geom.flat.geodesic'], ['goog.asserts', 'goog.object', 'ol.TransformFunction', 'ol.math', 'ol.proj'], false); +goog.addDependency('../../../ol/ol/geom/flat/inflateflatgeom.js', ['ol.geom.flat.inflate'], [], false); +goog.addDependency('../../../ol/ol/geom/flat/interiorpointflatgeom.js', ['ol.geom.flat.interiorpoint'], ['goog.asserts', 'ol.geom.flat.contains'], false); +goog.addDependency('../../../ol/ol/geom/flat/interpolateflatgeom.js', ['ol.geom.flat.interpolate'], ['goog.array', 'goog.asserts', 'goog.math'], false); +goog.addDependency('../../../ol/ol/geom/flat/intersectsextent.js', ['ol.geom.flat.intersectsextent'], ['goog.asserts', 'ol.extent', 'ol.geom.flat.contains', 'ol.geom.flat.segments'], false); +goog.addDependency('../../../ol/ol/geom/flat/lengthflatgeom.js', ['ol.geom.flat.length'], [], false); +goog.addDependency('../../../ol/ol/geom/flat/orientflatgeom.js', ['ol.geom.flat.orient'], ['ol', 'ol.geom.flat.reverse'], false); +goog.addDependency('../../../ol/ol/geom/flat/reverseflatgeom.js', ['ol.geom.flat.reverse'], [], false); +goog.addDependency('../../../ol/ol/geom/flat/segmentsflatgeom.js', ['ol.geom.flat.segments'], [], false); +goog.addDependency('../../../ol/ol/geom/flat/simplifyflatgeom.js', ['ol.geom.flat.simplify'], ['ol.math'], false); +goog.addDependency('../../../ol/ol/geom/flat/transformflatgeom.js', ['ol.geom.flat.transform'], ['goog.vec.Mat4'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/has.js', ['ol.has'], ['goog.dom', 'ol', 'ol.dom', 'ol.webgl'], false); +goog.addDependency('../../../ol/ol/image.js', ['ol.Image'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.ImageBase', 'ol.ImageState', 'ol.extent'], false); +goog.addDependency('../../../ol/ol/imagebase.js', ['ol.ImageBase', 'ol.ImageState'], ['goog.asserts', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.Attribution', 'ol.Extent'], false); +goog.addDependency('../../../ol/ol/imagecanvas.js', ['ol.ImageCanvas'], ['goog.asserts', 'ol.ImageBase', 'ol.ImageState'], false); +goog.addDependency('../../../ol/ol/imageloadfunction.js', ['ol.ImageLoadFunctionType'], [], false); +goog.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); +goog.addDependency('../../../ol/ol/imageurlfunction.js', ['ol.ImageUrlFunction', 'ol.ImageUrlFunctionType'], ['ol.Size'], false); +goog.addDependency('../../../ol/ol/interaction/doubleclickzoominteraction.js', ['ol.interaction.DoubleClickZoom'], ['goog.asserts', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.interaction.Interaction'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/interaction/dragzoominteraction.js', ['ol.interaction.DragZoom'], ['goog.asserts', 'ol.animation', 'ol.easing', 'ol.events.condition', 'ol.extent', 'ol.interaction.DragBox'], false); +goog.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); +goog.addDependency('../../../ol/ol/interaction/interaction.js', ['ol.interaction.Interaction', 'ol.interaction.InteractionProperty'], ['ol', 'ol.MapBrowserEvent', 'ol.Object', 'ol.animation', 'ol.easing'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/interaction/translateinteraction.js', ['ol.interaction.Translate', 'ol.interaction.TranslateEvent'], ['goog.events', 'goog.events.Event', 'ol.array', 'ol.interaction.Pointer'], false); +goog.addDependency('../../../ol/ol/kinetic.js', ['ol.Kinetic'], ['ol.Coordinate', 'ol.PreRenderFunction', 'ol.animation'], false); +goog.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); +goog.addDependency('../../../ol/ol/layer/imagelayer.js', ['ol.layer.Image'], ['ol.layer.Layer'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/layer/tilelayer.js', ['ol.layer.Tile'], ['goog.object', 'ol', 'ol.layer.Layer'], false); +goog.addDependency('../../../ol/ol/layer/vectorlayer.js', ['ol.layer.Vector'], ['goog.asserts', 'goog.object', 'ol', 'ol.layer.Layer', 'ol.style.Style'], false); +goog.addDependency('../../../ol/ol/layer/vectortilelayer.js', ['ol.layer.VectorTile'], ['goog.object', 'ol.layer.Vector'], false); +goog.addDependency('../../../ol/ol/loadingstrategy.js', ['ol.LoadingStrategy', 'ol.loadingstrategy'], ['ol.TileCoord'], false); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/mapevent.js', ['ol.MapEvent', 'ol.MapEventType'], ['goog.events.Event'], false); +goog.addDependency('../../../ol/ol/math.js', ['ol.math'], ['goog.asserts'], false); +goog.addDependency('../../../ol/ol/object.js', ['ol.Object', 'ol.ObjectEvent', 'ol.ObjectEventType'], ['goog.events', 'goog.events.Event', 'ol.Observable'], false); +goog.addDependency('../../../ol/ol/observable.js', ['ol.Observable'], ['goog.events', 'goog.events.EventTarget', 'goog.events.EventType'], false); +goog.addDependency('../../../ol/ol/ol.js', ['ol'], [], false); +goog.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); +goog.addDependency('../../../ol/ol/pixel.js', ['ol.Pixel'], [], false); +goog.addDependency('../../../ol/ol/pointer/eventsource.js', ['ol.pointer.EventSource'], ['goog.events.BrowserEvent'], false); +goog.addDependency('../../../ol/ol/pointer/mousesource.js', ['ol.pointer.MouseSource'], ['ol.pointer.EventSource'], false); +goog.addDependency('../../../ol/ol/pointer/mssource.js', ['ol.pointer.MsSource'], ['ol.pointer.EventSource'], false); +goog.addDependency('../../../ol/ol/pointer/nativesource.js', ['ol.pointer.NativeSource'], ['ol.pointer.EventSource'], false); +goog.addDependency('../../../ol/ol/pointer/pointerevent.js', ['ol.pointer.PointerEvent'], ['goog.events', 'goog.events.Event'], false); +goog.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); +goog.addDependency('../../../ol/ol/pointer/touchsource.js', ['ol.pointer.TouchSource'], ['goog.array', 'goog.object', 'ol', 'ol.pointer.EventSource', 'ol.pointer.MouseSource'], false); +goog.addDependency('../../../ol/ol/proj/common.js', ['ol.proj.common'], ['ol.proj', 'ol.proj.EPSG3857', 'ol.proj.EPSG4326'], false); +goog.addDependency('../../../ol/ol/proj/epsg3857projection.js', ['ol.proj.EPSG3857'], ['goog.asserts', 'ol.math', 'ol.proj', 'ol.proj.Projection', 'ol.proj.Units'], false); +goog.addDependency('../../../ol/ol/proj/epsg4326projection.js', ['ol.proj.EPSG4326'], ['ol.proj', 'ol.proj.Projection', 'ol.proj.Units'], false); +goog.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); +goog.addDependency('../../../ol/ol/raster/operation.js', ['ol.raster.Operation', 'ol.raster.OperationType'], [], false); +goog.addDependency('../../../ol/ol/raster/pixel.js', ['ol.raster.Pixel'], [], false); +goog.addDependency('../../../ol/ol/render/box.js', ['ol.render.Box'], ['goog.Disposable', 'goog.asserts', 'ol.geom.Polygon'], false); +goog.addDependency('../../../ol/ol/render/canvas/canvas.js', ['ol.render.canvas'], [], false); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/render/ireplay.js', ['ol.render.IReplayGroup'], ['ol.render.VectorContext'], false); +goog.addDependency('../../../ol/ol/render/renderevent.js', ['ol.render.Event', 'ol.render.EventType'], ['goog.events.Event', 'ol.render.VectorContext'], false); +goog.addDependency('../../../ol/ol/render/renderfeature.js', ['ol.render.Feature'], ['goog.asserts', 'goog.functions', 'ol.extent', 'ol.geom.GeometryType'], false); +goog.addDependency('../../../ol/ol/render/vector.js', ['ol.renderer.vector'], ['goog.asserts', 'ol.render.Feature', 'ol.render.IReplayGroup', 'ol.style.ImageState', 'ol.style.Style'], false); +goog.addDependency('../../../ol/ol/render/vectorcontext.js', ['ol.render.VectorContext'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/renderer/dom/domlayerrenderer.js', ['ol.renderer.dom.Layer'], ['ol', 'ol.layer.Layer', 'ol.renderer.Layer'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/reproj/triangulation.js', ['ol.reproj.Triangulation'], ['goog.asserts', 'goog.math', 'ol.extent', 'ol.proj'], false); +goog.addDependency('../../../ol/ol/resolutionconstraint.js', ['ol.ResolutionConstraint', 'ol.ResolutionConstraintType'], ['ol.array', 'ol.math'], false); +goog.addDependency('../../../ol/ol/rotationconstraint.js', ['ol.RotationConstraint', 'ol.RotationConstraintType'], ['ol.math'], false); +goog.addDependency('../../../ol/ol/size.js', ['ol.Size', 'ol.size'], ['goog.asserts'], false); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/source/imagecanvassource.js', ['ol.source.ImageCanvas'], ['ol.CanvasFunctionType', 'ol.ImageCanvas', 'ol.extent', 'ol.source.Image'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/source/mapquestsource.js', ['ol.source.MapQuest'], ['goog.asserts', 'ol.Attribution', 'ol.source.OSM', 'ol.source.XYZ'], false); +goog.addDependency('../../../ol/ol/source/osmsource.js', ['ol.source.OSM'], ['ol.Attribution', 'ol.source.XYZ'], false); +goog.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); +goog.addDependency('../../../ol/ol/source/source.js', ['ol.source.Source', 'ol.source.State'], ['ol', 'ol.Attribution', 'ol.Object', 'ol.proj'], false); +goog.addDependency('../../../ol/ol/source/stamensource.js', ['ol.source.Stamen'], ['goog.asserts', 'ol.Attribution', 'ol.source.OSM', 'ol.source.XYZ'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/source/wmssource.js', ['ol.source.wms', 'ol.source.wms.ServerType'], [], false); +goog.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); +goog.addDependency('../../../ol/ol/source/xyzsource.js', ['ol.source.XYZ'], ['ol.source.TileImage'], false); +goog.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); +goog.addDependency('../../../ol/ol/sphere/normal.js', ['ol.sphere.NORMAL'], ['ol.Sphere'], false); +goog.addDependency('../../../ol/ol/sphere/sphere.js', ['ol.Sphere'], ['ol.math'], false); +goog.addDependency('../../../ol/ol/sphere/wgs84sphere.js', ['ol.sphere.WGS84'], ['ol.Sphere'], false); +goog.addDependency('../../../ol/ol/structs/checksum.js', ['ol.structs.IHasChecksum'], [], false); +goog.addDependency('../../../ol/ol/structs/lrucache.js', ['ol.structs.LRUCache'], ['goog.asserts', 'goog.object'], false); +goog.addDependency('../../../ol/ol/structs/priorityqueue.js', ['ol.structs.PriorityQueue'], ['goog.asserts', 'goog.object'], false); +goog.addDependency('../../../ol/ol/structs/rbush.js', ['ol.structs.RBush'], ['goog.asserts', 'goog.object', 'ol.ext.rbush', 'ol.extent'], false); +goog.addDependency('../../../ol/ol/style/atlasmanager.js', ['ol.style.Atlas', 'ol.style.AtlasManager'], ['goog.asserts', 'goog.dom', 'goog.functions', 'goog.object', 'ol'], false); +goog.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); +goog.addDependency('../../../ol/ol/style/fillstyle.js', ['ol.style.Fill'], ['ol.color', 'ol.structs.IHasChecksum'], false); +goog.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); +goog.addDependency('../../../ol/ol/style/imagestyle.js', ['ol.style.Image', 'ol.style.ImageState'], [], false); +goog.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); +goog.addDependency('../../../ol/ol/style/strokestyle.js', ['ol.style.Stroke'], ['goog.crypt', 'goog.crypt.Md5', 'ol.color', 'ol.structs.IHasChecksum'], false); +goog.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); +goog.addDependency('../../../ol/ol/style/textstyle.js', ['ol.style.Text'], ['ol.style.Fill'], false); +goog.addDependency('../../../ol/ol/tile.js', ['ol.Tile', 'ol.TileState'], ['goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.TileCoord'], false); +goog.addDependency('../../../ol/ol/tilecache.js', ['ol.TileCache'], ['ol', 'ol.TileRange', 'ol.structs.LRUCache', 'ol.tilecoord'], false); +goog.addDependency('../../../ol/ol/tilecoord.js', ['ol.TileCoord', 'ol.tilecoord'], ['goog.asserts', 'ol.extent'], false); +goog.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); +goog.addDependency('../../../ol/ol/tilegrid/wmtstilegrid.js', ['ol.tilegrid.WMTS'], ['goog.array', 'goog.asserts', 'ol.proj', 'ol.tilegrid.TileGrid'], false); +goog.addDependency('../../../ol/ol/tileloadfunction.js', ['ol.TileLoadFunctionType', 'ol.TileVectorLoadFunctionType'], [], false); +goog.addDependency('../../../ol/ol/tilequeue.js', ['ol.TilePriorityFunction', 'ol.TileQueue'], ['goog.events', 'goog.events.EventType', 'ol.Coordinate', 'ol.TileState', 'ol.structs.PriorityQueue'], false); +goog.addDependency('../../../ol/ol/tilerange.js', ['ol.TileRange'], ['goog.asserts', 'ol.Size', 'ol.TileCoord'], false); +goog.addDependency('../../../ol/ol/tileurlfunction.js', ['ol.TileUrlFunction', 'ol.TileUrlFunctionType'], ['goog.asserts', 'goog.math', 'ol.TileCoord', 'ol.tilecoord'], false); +goog.addDependency('../../../ol/ol/transformfunction.js', ['ol.TransformFunction'], [], false); +goog.addDependency('../../../ol/ol/vec/mat4.js', ['ol.vec.Mat4', 'ol.vec.Mat4.Number'], ['goog.vec.Mat4'], false); +goog.addDependency('../../../ol/ol/vectortile.js', ['ol.VectorTile'], ['ol.Tile', 'ol.TileCoord', 'ol.TileLoadFunctionType', 'ol.TileState'], false); +goog.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); +goog.addDependency('../../../ol/ol/webgl/buffer.js', ['ol.webgl.Buffer'], ['goog.webgl', 'ol'], false); +goog.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); +goog.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); +goog.addDependency('../../../ol/ol/webgl/webgl.js', ['ol.webgl', 'ol.webgl.WebGLContextEventType'], [], false); +goog.addDependency('../../../ol/ol/xml.js', ['ol.xml'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.xml', 'goog.object', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.addDependency('../../third_party/closure/goog/dojo/dom/query.js', ['goog.dom.query'], ['goog.array', 'goog.dom', 'goog.functions', 'goog.string', 'goog.userAgent'], false); +goog.addDependency('../../third_party/closure/goog/jpeg_encoder/jpeg_encoder_basic.js', ['goog.crypt.JpegEncoder'], ['goog.crypt.base64'], false); +goog.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); +goog.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); +goog.addDependency('../../third_party/closure/goog/mochikit/async/deferredlist.js', ['goog.async.DeferredList'], ['goog.async.Deferred'], false); +goog.addDependency('../../third_party/closure/goog/osapi/osapi.js', ['goog.osapi'], [], false); +goog.addDependency('../../third_party/closure/goog/svgpan/svgpan.js', ['svgpan.SvgPan'], ['goog.Disposable', 'goog.events', 'goog.events.EventType', 'goog.events.MouseWheelHandler'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('a11y/aria/datatables.js', ['goog.a11y.aria.datatables'], ['goog.a11y.aria.State', 'goog.object'], false); +goog.addDependency('a11y/aria/roles.js', ['goog.a11y.aria.Role'], [], false); +goog.addDependency('array/array.js', ['goog.array', 'goog.array.ArrayLike'], ['goog.asserts'], false); +goog.addDependency('array/array_test.js', ['goog.arrayTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('asserts/asserts.js', ['goog.asserts', 'goog.asserts.AssertionError'], ['goog.debug.Error', 'goog.dom.NodeType', 'goog.string'], false); +goog.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); +goog.addDependency('async/animationdelay.js', ['goog.async.AnimationDelay'], ['goog.Disposable', 'goog.events', 'goog.functions'], false); +goog.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); +goog.addDependency('async/conditionaldelay.js', ['goog.async.ConditionalDelay'], ['goog.Disposable', 'goog.async.Delay'], false); +goog.addDependency('async/conditionaldelay_test.js', ['goog.async.ConditionalDelayTest'], ['goog.async.ConditionalDelay', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('async/debouncer.js', ['goog.async.Debouncer'], ['goog.Disposable', 'goog.Timer'], false); +goog.addDependency('async/debouncer_test.js', ['goog.async.DebouncerTest'], ['goog.array', 'goog.async.Debouncer', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('async/delay.js', ['goog.Delay', 'goog.async.Delay'], ['goog.Disposable', 'goog.Timer'], false); +goog.addDependency('async/delay_test.js', ['goog.async.DelayTest'], ['goog.async.Delay', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('async/freelist.js', ['goog.async.FreeList'], [], false); +goog.addDependency('async/freelist_test.js', ['goog.async.FreeListTest'], ['goog.async.FreeList', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('async/run.js', ['goog.async.run'], ['goog.async.WorkQueue', 'goog.async.nextTick', 'goog.async.throwException', 'goog.testing.watchers'], false); +goog.addDependency('async/run_test.js', ['goog.async.runTest'], ['goog.async.run', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('async/throttle.js', ['goog.Throttle', 'goog.async.Throttle'], ['goog.Disposable', 'goog.Timer'], false); +goog.addDependency('async/throttle_test.js', ['goog.async.ThrottleTest'], ['goog.async.Throttle', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('async/workqueue.js', ['goog.async.WorkItem', 'goog.async.WorkQueue'], ['goog.asserts', 'goog.async.FreeList'], false); +goog.addDependency('async/workqueue_test.js', ['goog.async.WorkQueueTest'], ['goog.async.WorkQueue', 'goog.testing.jsunit'], false); +goog.addDependency('base.js', ['goog'], [], false); +goog.addDependency('base_module_test.js', ['goog.baseModuleTest'], ['goog.Timer', 'goog.test_module', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.testSuite'], true); +goog.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); +goog.addDependency('color/alpha.js', ['goog.color.alpha'], ['goog.color'], false); +goog.addDependency('color/alpha_test.js', ['goog.color.alphaTest'], ['goog.array', 'goog.color', 'goog.color.alpha', 'goog.testing.jsunit'], false); +goog.addDependency('color/color.js', ['goog.color', 'goog.color.Hsl', 'goog.color.Hsv', 'goog.color.Rgb'], ['goog.color.names', 'goog.math'], false); +goog.addDependency('color/color_test.js', ['goog.colorTest'], ['goog.array', 'goog.color', 'goog.color.names', 'goog.testing.jsunit'], false); +goog.addDependency('color/names.js', ['goog.color.names'], [], false); +goog.addDependency('crypt/aes.js', ['goog.crypt.Aes'], ['goog.asserts', 'goog.crypt.BlockCipher'], false); +goog.addDependency('crypt/aes_test.js', ['goog.crypt.AesTest'], ['goog.crypt', 'goog.crypt.Aes', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/arc4.js', ['goog.crypt.Arc4'], ['goog.asserts'], false); +goog.addDependency('crypt/arc4_test.js', ['goog.crypt.Arc4Test'], ['goog.array', 'goog.crypt.Arc4', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/base64.js', ['goog.crypt.base64'], ['goog.asserts', 'goog.crypt', 'goog.userAgent'], false); +goog.addDependency('crypt/base64_test.js', ['goog.crypt.base64Test'], ['goog.crypt', 'goog.crypt.base64', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/basen.js', ['goog.crypt.baseN'], [], false); +goog.addDependency('crypt/basen_test.js', ['goog.crypt.baseNTest'], ['goog.crypt.baseN', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/blobhasher.js', ['goog.crypt.BlobHasher', 'goog.crypt.BlobHasher.EventType'], ['goog.asserts', 'goog.events.EventTarget', 'goog.fs', 'goog.log'], false); +goog.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); +goog.addDependency('crypt/blockcipher.js', ['goog.crypt.BlockCipher'], [], false); +goog.addDependency('crypt/bytestring_perf.js', ['goog.crypt.byteArrayToStringPerf'], ['goog.array', 'goog.dom', 'goog.testing.PerformanceTable'], false); +goog.addDependency('crypt/cbc.js', ['goog.crypt.Cbc'], ['goog.array', 'goog.asserts', 'goog.crypt'], false); +goog.addDependency('crypt/cbc_test.js', ['goog.crypt.CbcTest'], ['goog.crypt', 'goog.crypt.Aes', 'goog.crypt.Cbc', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/crypt.js', ['goog.crypt'], ['goog.array', 'goog.asserts'], false); +goog.addDependency('crypt/crypt_test.js', ['goog.cryptTest'], ['goog.crypt', 'goog.string', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/hash.js', ['goog.crypt.Hash'], [], false); +goog.addDependency('crypt/hash32.js', ['goog.crypt.hash32'], ['goog.crypt'], false); +goog.addDependency('crypt/hash32_test.js', ['goog.crypt.hash32Test'], ['goog.crypt.hash32', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('crypt/hmac.js', ['goog.crypt.Hmac'], ['goog.crypt.Hash'], false); +goog.addDependency('crypt/hmac_test.js', ['goog.crypt.HmacTest'], ['goog.crypt.Hmac', 'goog.crypt.Sha1', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/md5.js', ['goog.crypt.Md5'], ['goog.crypt.Hash'], false); +goog.addDependency('crypt/md5_test.js', ['goog.crypt.Md5Test'], ['goog.crypt', 'goog.crypt.Md5', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/pbkdf2.js', ['goog.crypt.pbkdf2'], ['goog.array', 'goog.asserts', 'goog.crypt', 'goog.crypt.Hmac', 'goog.crypt.Sha1'], false); +goog.addDependency('crypt/pbkdf2_test.js', ['goog.crypt.pbkdf2Test'], ['goog.crypt', 'goog.crypt.pbkdf2', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('crypt/sha1.js', ['goog.crypt.Sha1'], ['goog.crypt.Hash'], false); +goog.addDependency('crypt/sha1_test.js', ['goog.crypt.Sha1Test'], ['goog.crypt', 'goog.crypt.Sha1', 'goog.crypt.hashTester', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('crypt/sha2.js', ['goog.crypt.Sha2'], ['goog.array', 'goog.asserts', 'goog.crypt.Hash'], false); +goog.addDependency('crypt/sha224.js', ['goog.crypt.Sha224'], ['goog.crypt.Sha2'], false); +goog.addDependency('crypt/sha224_test.js', ['goog.crypt.Sha224Test'], ['goog.crypt', 'goog.crypt.Sha224', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/sha256.js', ['goog.crypt.Sha256'], ['goog.crypt.Sha2'], false); +goog.addDependency('crypt/sha256_test.js', ['goog.crypt.Sha256Test'], ['goog.crypt', 'goog.crypt.Sha256', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); +goog.addDependency('crypt/sha2_64bit.js', ['goog.crypt.Sha2_64bit'], ['goog.array', 'goog.asserts', 'goog.crypt.Hash', 'goog.math.Long'], false); +goog.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); +goog.addDependency('crypt/sha384.js', ['goog.crypt.Sha384'], ['goog.crypt.Sha2_64bit'], false); +goog.addDependency('crypt/sha512.js', ['goog.crypt.Sha512'], ['goog.crypt.Sha2_64bit'], false); +goog.addDependency('crypt/sha512_256.js', ['goog.crypt.Sha512_256'], ['goog.crypt.Sha2_64bit'], false); +goog.addDependency('cssom/cssom.js', ['goog.cssom', 'goog.cssom.CssRuleType'], ['goog.array', 'goog.dom', 'goog.dom.TagName'], false); +goog.addDependency('cssom/cssom_test.js', ['goog.cssomTest'], ['goog.array', 'goog.cssom', 'goog.cssom.CssRuleType', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('datasource/expr.js', ['goog.ds.Expr'], ['goog.ds.BasicNodeList', 'goog.ds.EmptyNodeList', 'goog.string'], false); +goog.addDependency('datasource/expr_test.js', ['goog.ds.ExprTest'], ['goog.ds.DataManager', 'goog.ds.Expr', 'goog.ds.JsDataSource', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('datasource/fastdatanode_test.js', ['goog.ds.FastDataNodeTest'], ['goog.array', 'goog.ds.DataManager', 'goog.ds.Expr', 'goog.ds.FastDataNode', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('datasource/jsxmlhttpdatasource_test.js', ['goog.ds.JsXmlHttpDataSourceTest'], ['goog.ds.JsXmlHttpDataSource', 'goog.testing.TestQueue', 'goog.testing.jsunit', 'goog.testing.net.XhrIo'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('date/datelike.js', ['goog.date.DateLike'], [], false); +goog.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); +goog.addDependency('date/daterange_test.js', ['goog.date.DateRangeTest'], ['goog.date.Date', 'goog.date.DateRange', 'goog.date.Interval', 'goog.i18n.DateTimeSymbols', 'goog.testing.jsunit'], false); +goog.addDependency('date/duration.js', ['goog.date.duration'], ['goog.i18n.DateTimeFormat', 'goog.i18n.MessageFormat'], false); +goog.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); +goog.addDependency('date/relative.js', ['goog.date.relative', 'goog.date.relative.TimeDeltaFormatter', 'goog.date.relative.Unit'], ['goog.i18n.DateTimeFormat', 'goog.i18n.DateTimePatterns'], false); +goog.addDependency('date/relative_test.js', ['goog.date.relativeTest'], ['goog.date.DateTime', 'goog.date.relative', 'goog.i18n.DateTimeFormat', 'goog.testing.jsunit'], false); +goog.addDependency('date/relativewithplurals.js', ['goog.date.relativeWithPlurals'], ['goog.date.relative', 'goog.date.relative.Unit', 'goog.i18n.MessageFormat'], false); +goog.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); +goog.addDependency('date/utcdatetime.js', ['goog.date.UtcDateTime'], ['goog.date', 'goog.date.Date', 'goog.date.DateTime', 'goog.date.Interval'], false); +goog.addDependency('date/utcdatetime_test.js', ['goog.date.UtcDateTimeTest'], ['goog.date.Interval', 'goog.date.UtcDateTime', 'goog.date.month', 'goog.date.weekDay', 'goog.testing.jsunit'], false); +goog.addDependency('db/cursor.js', ['goog.db.Cursor'], ['goog.async.Deferred', 'goog.db.Error', 'goog.debug', 'goog.events.EventTarget'], false); +goog.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); +goog.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); +goog.addDependency('db/error.js', ['goog.db.Error', 'goog.db.Error.ErrorCode', 'goog.db.Error.ErrorName', 'goog.db.Error.VersionChangeBlockedError'], ['goog.debug.Error'], false); +goog.addDependency('db/index.js', ['goog.db.Index'], ['goog.async.Deferred', 'goog.db.Cursor', 'goog.db.Error', 'goog.debug'], false); +goog.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); +goog.addDependency('db/keyrange.js', ['goog.db.KeyRange'], [], false); +goog.addDependency('db/objectstore.js', ['goog.db.ObjectStore'], ['goog.async.Deferred', 'goog.db.Cursor', 'goog.db.Error', 'goog.db.Index', 'goog.debug', 'goog.events'], false); +goog.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); +goog.addDependency('debug/console.js', ['goog.debug.Console'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.debug.TextFormatter'], false); +goog.addDependency('debug/console_test.js', ['goog.debug.ConsoleTest'], ['goog.debug.Console', 'goog.debug.LogRecord', 'goog.debug.Logger', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.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); +goog.addDependency('debug/debug_test.js', ['goog.debugTest'], ['goog.debug', 'goog.html.SafeHtml', 'goog.structs.Set', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('debug/debugwindow_test.js', ['goog.debug.DebugWindowTest'], ['goog.debug.DebugWindow', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('debug/devcss/devcss_test.js', ['goog.debug.DevCssTest'], ['goog.debug.DevCss', 'goog.style', 'goog.testing.jsunit'], false); +goog.addDependency('debug/devcss/devcssrunner.js', ['goog.debug.devCssRunner'], ['goog.debug.DevCss'], false); +goog.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); +goog.addDependency('debug/enhanceerror_test.js', ['goog.debugEnhanceErrorTest'], ['goog.debug', 'goog.testing.jsunit'], false); +goog.addDependency('debug/entrypointregistry.js', ['goog.debug.EntryPointMonitor', 'goog.debug.entryPointRegistry'], ['goog.asserts'], false); +goog.addDependency('debug/entrypointregistry_test.js', ['goog.debug.entryPointRegistryTest'], ['goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.testing.jsunit'], false); +goog.addDependency('debug/error.js', ['goog.debug.Error'], [], false); +goog.addDependency('debug/error_test.js', ['goog.debug.ErrorTest'], ['goog.debug.Error', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); +goog.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); +goog.addDependency('debug/errorhandler_async_test.js', ['goog.debug.ErrorHandlerAsyncTest'], ['goog.Promise', 'goog.debug.ErrorHandler', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('debug/errorhandler_test.js', ['goog.debug.ErrorHandlerTest'], ['goog.debug.ErrorHandler', 'goog.testing.MockControl', 'goog.testing.jsunit'], false); +goog.addDependency('debug/errorhandlerweakdep.js', ['goog.debug.errorHandlerWeakDep'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('debug/formatter_test.js', ['goog.debug.FormatterTest'], ['goog.debug.HtmlFormatter', 'goog.debug.LogRecord', 'goog.debug.Logger', 'goog.html.SafeHtml', 'goog.testing.jsunit'], false); +goog.addDependency('debug/fpsdisplay.js', ['goog.debug.FpsDisplay'], ['goog.asserts', 'goog.async.AnimationDelay', 'goog.dom', 'goog.dom.TagName', 'goog.ui.Component'], false); +goog.addDependency('debug/fpsdisplay_test.js', ['goog.debug.FpsDisplayTest'], ['goog.Timer', 'goog.debug.FpsDisplay', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); +goog.addDependency('debug/logbuffer.js', ['goog.debug.LogBuffer'], ['goog.asserts', 'goog.debug.LogRecord'], false); +goog.addDependency('debug/logbuffer_test.js', ['goog.debug.LogBufferTest'], ['goog.debug.LogBuffer', 'goog.debug.Logger', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('debug/logger_test.js', ['goog.debug.LoggerTest'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.testing.jsunit'], false); +goog.addDependency('debug/logrecord.js', ['goog.debug.LogRecord'], [], false); +goog.addDependency('debug/logrecordserializer.js', ['goog.debug.logRecordSerializer'], ['goog.debug.LogRecord', 'goog.debug.Logger', 'goog.json', 'goog.object'], false); +goog.addDependency('debug/logrecordserializer_test.js', ['goog.debug.logRecordSerializerTest'], ['goog.debug.LogRecord', 'goog.debug.Logger', 'goog.debug.logRecordSerializer', 'goog.testing.jsunit'], false); +goog.addDependency('debug/relativetimeprovider.js', ['goog.debug.RelativeTimeProvider'], [], false); +goog.addDependency('debug/tracer.js', ['goog.debug.Trace'], ['goog.array', 'goog.debug.Logger', 'goog.iter', 'goog.log', 'goog.structs.Map', 'goog.structs.SimplePool'], false); +goog.addDependency('debug/tracer_test.js', ['goog.debug.TraceTest'], ['goog.debug.Trace', 'goog.testing.jsunit'], false); +goog.addDependency('defineclass_test.js', ['goog.defineClassTest'], ['goog.testing.jsunit'], false); +goog.addDependency('demos/editor/helloworld.js', ['goog.demos.editor.HelloWorld'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Plugin'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('disposable/disposable.js', ['goog.Disposable', 'goog.dispose', 'goog.disposeAll'], ['goog.disposable.IDisposable'], false); +goog.addDependency('disposable/disposable_test.js', ['goog.DisposableTest'], ['goog.Disposable', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('disposable/idisposable.js', ['goog.disposable.IDisposable'], [], false); +goog.addDependency('dom/abstractmultirange.js', ['goog.dom.AbstractMultiRange'], ['goog.array', 'goog.dom', 'goog.dom.AbstractRange'], false); +goog.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); +goog.addDependency('dom/abstractrange_test.js', ['goog.dom.AbstractRangeTest'], ['goog.dom', 'goog.dom.AbstractRange', 'goog.dom.Range', 'goog.dom.TagName', 'goog.testing.jsunit'], false); +goog.addDependency('dom/animationframe/animationframe.js', ['goog.dom.animationFrame', 'goog.dom.animationFrame.Spec', 'goog.dom.animationFrame.State'], ['goog.dom.animationFrame.polyfill'], false); +goog.addDependency('dom/animationframe/polyfill.js', ['goog.dom.animationFrame.polyfill'], [], false); +goog.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); +goog.addDependency('dom/annotate_test.js', ['goog.dom.annotateTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.annotate', 'goog.html.SafeHtml', 'goog.testing.jsunit'], false); +goog.addDependency('dom/browserfeature.js', ['goog.dom.BrowserFeature'], ['goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('dom/browserrange/geckorange.js', ['goog.dom.browserrange.GeckoRange'], ['goog.dom.browserrange.W3cRange'], false); +goog.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); +goog.addDependency('dom/browserrange/operarange.js', ['goog.dom.browserrange.OperaRange'], ['goog.dom.browserrange.W3cRange'], false); +goog.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); +goog.addDependency('dom/browserrange/webkitrange.js', ['goog.dom.browserrange.WebKitRange'], ['goog.dom.RangeEndpoint', 'goog.dom.browserrange.W3cRange', 'goog.userAgent'], false); +goog.addDependency('dom/bufferedviewportsizemonitor.js', ['goog.dom.BufferedViewportSizeMonitor'], ['goog.asserts', 'goog.async.Delay', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType'], false); +goog.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); +goog.addDependency('dom/classes.js', ['goog.dom.classes'], ['goog.array'], false); +goog.addDependency('dom/classes_test.js', ['goog.dom.classes_test'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classes', 'goog.testing.jsunit'], false); +goog.addDependency('dom/classlist.js', ['goog.dom.classlist'], ['goog.array'], false); +goog.addDependency('dom/classlist_test.js', ['goog.dom.classlist_test'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('dom/dataset.js', ['goog.dom.dataset'], ['goog.string', 'goog.userAgent.product'], false); +goog.addDependency('dom/dataset_test.js', ['goog.dom.datasetTest'], ['goog.dom', 'goog.dom.dataset', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('dom/forms.js', ['goog.dom.forms'], ['goog.dom.InputType', 'goog.dom.TagName', 'goog.structs.Map'], false); +goog.addDependency('dom/forms_test.js', ['goog.dom.formsTest'], ['goog.dom', 'goog.dom.forms', 'goog.testing.jsunit'], false); +goog.addDependency('dom/fullscreen.js', ['goog.dom.fullscreen', 'goog.dom.fullscreen.EventType'], ['goog.dom', 'goog.userAgent'], false); +goog.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); +goog.addDependency('dom/iframe.js', ['goog.dom.iframe'], ['goog.dom', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.legacyconversions', 'goog.userAgent'], false); +goog.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); +goog.addDependency('dom/inputtype.js', ['goog.dom.InputType'], [], false); +goog.addDependency('dom/inputtype_test.js', ['goog.dom.InputTypeTest'], ['goog.dom.InputType', 'goog.object'], false); +goog.addDependency('dom/iter.js', ['goog.dom.iter.AncestorIterator', 'goog.dom.iter.ChildIterator', 'goog.dom.iter.SiblingIterator'], ['goog.iter.Iterator', 'goog.iter.StopIteration'], false); +goog.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); +goog.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); +goog.addDependency('dom/multirange_test.js', ['goog.dom.MultiRangeTest'], ['goog.dom', 'goog.dom.MultiRange', 'goog.dom.Range', 'goog.iter', 'goog.testing.jsunit'], false); +goog.addDependency('dom/nodeiterator.js', ['goog.dom.NodeIterator'], ['goog.dom.TagIterator'], false); +goog.addDependency('dom/nodeiterator_test.js', ['goog.dom.NodeIteratorTest'], ['goog.dom', 'goog.dom.NodeIterator', 'goog.testing.dom', 'goog.testing.jsunit'], false); +goog.addDependency('dom/nodeoffset.js', ['goog.dom.NodeOffset'], ['goog.Disposable', 'goog.dom.TagName'], false); +goog.addDependency('dom/nodeoffset_test.js', ['goog.dom.NodeOffsetTest'], ['goog.dom', 'goog.dom.NodeOffset', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.testing.jsunit'], false); +goog.addDependency('dom/nodetype.js', ['goog.dom.NodeType'], [], false); +goog.addDependency('dom/pattern/abstractpattern.js', ['goog.dom.pattern.AbstractPattern'], ['goog.dom.pattern.MatchType'], false); +goog.addDependency('dom/pattern/allchildren.js', ['goog.dom.pattern.AllChildren'], ['goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); +goog.addDependency('dom/pattern/callback/callback.js', ['goog.dom.pattern.callback'], ['goog.dom', 'goog.dom.TagWalkType', 'goog.iter'], false); +goog.addDependency('dom/pattern/callback/counter.js', ['goog.dom.pattern.callback.Counter'], [], false); +goog.addDependency('dom/pattern/callback/test.js', ['goog.dom.pattern.callback.Test'], ['goog.iter.StopIteration'], false); +goog.addDependency('dom/pattern/childmatches.js', ['goog.dom.pattern.ChildMatches'], ['goog.dom.pattern.AllChildren', 'goog.dom.pattern.MatchType'], false); +goog.addDependency('dom/pattern/endtag.js', ['goog.dom.pattern.EndTag'], ['goog.dom.TagWalkType', 'goog.dom.pattern.Tag'], false); +goog.addDependency('dom/pattern/fulltag.js', ['goog.dom.pattern.FullTag'], ['goog.dom.pattern.MatchType', 'goog.dom.pattern.StartTag', 'goog.dom.pattern.Tag'], false); +goog.addDependency('dom/pattern/matcher.js', ['goog.dom.pattern.Matcher'], ['goog.dom.TagIterator', 'goog.dom.pattern.MatchType', 'goog.iter'], false); +goog.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); +goog.addDependency('dom/pattern/nodetype.js', ['goog.dom.pattern.NodeType'], ['goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); +goog.addDependency('dom/pattern/pattern.js', ['goog.dom.pattern', 'goog.dom.pattern.MatchType'], [], false); +goog.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); +goog.addDependency('dom/pattern/repeat.js', ['goog.dom.pattern.Repeat'], ['goog.dom.NodeType', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); +goog.addDependency('dom/pattern/sequence.js', ['goog.dom.pattern.Sequence'], ['goog.dom.NodeType', 'goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); +goog.addDependency('dom/pattern/starttag.js', ['goog.dom.pattern.StartTag'], ['goog.dom.TagWalkType', 'goog.dom.pattern.Tag'], false); +goog.addDependency('dom/pattern/tag.js', ['goog.dom.pattern.Tag'], ['goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType', 'goog.object'], false); +goog.addDependency('dom/pattern/text.js', ['goog.dom.pattern.Text'], ['goog.dom.NodeType', 'goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); +goog.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); +goog.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); +goog.addDependency('dom/rangeendpoint.js', ['goog.dom.RangeEndpoint'], [], false); +goog.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); +goog.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); +goog.addDependency('dom/savedcaretrange.js', ['goog.dom.SavedCaretRange'], ['goog.array', 'goog.dom', 'goog.dom.SavedRange', 'goog.dom.TagName', 'goog.string'], false); +goog.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); +goog.addDependency('dom/savedrange.js', ['goog.dom.SavedRange'], ['goog.Disposable', 'goog.log'], false); +goog.addDependency('dom/savedrange_test.js', ['goog.dom.SavedRangeTest'], ['goog.dom', 'goog.dom.Range', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('dom/selection.js', ['goog.dom.selection'], ['goog.dom.InputType', 'goog.string', 'goog.userAgent'], false); +goog.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); +goog.addDependency('dom/tagiterator.js', ['goog.dom.TagIterator', 'goog.dom.TagWalkType'], ['goog.dom', 'goog.dom.NodeType', 'goog.iter.Iterator', 'goog.iter.StopIteration'], false); +goog.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); +goog.addDependency('dom/tagname.js', ['goog.dom.TagName'], [], false); +goog.addDependency('dom/tagname_test.js', ['goog.dom.TagNameTest'], ['goog.dom.TagName', 'goog.object', 'goog.testing.jsunit'], false); +goog.addDependency('dom/tags.js', ['goog.dom.tags'], ['goog.object'], false); +goog.addDependency('dom/tags_test.js', ['goog.dom.tagsTest'], ['goog.dom.tags', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('dom/textrangeiterator.js', ['goog.dom.TextRangeIterator'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeIterator', 'goog.dom.TagName', 'goog.iter.StopIteration'], false); +goog.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); +goog.addDependency('dom/vendor.js', ['goog.dom.vendor'], ['goog.string', 'goog.userAgent'], false); +goog.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); +goog.addDependency('dom/viewportsizemonitor.js', ['goog.dom.ViewportSizeMonitor'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Size'], false); +goog.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); +goog.addDependency('dom/xml.js', ['goog.dom.xml'], ['goog.dom', 'goog.dom.NodeType', 'goog.userAgent'], false); +goog.addDependency('dom/xml_test.js', ['goog.dom.xmlTest'], ['goog.dom.TagName', 'goog.dom.xml', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('editor/browserfeature.js', ['goog.editor.BrowserFeature'], ['goog.editor.defines', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/command.js', ['goog.editor.Command'], [], false); +goog.addDependency('editor/contenteditablefield.js', ['goog.editor.ContentEditableField'], ['goog.asserts', 'goog.editor.Field', 'goog.log'], false); +goog.addDependency('editor/contenteditablefield_test.js', ['goog.editor.ContentEditableFieldTest'], ['goog.dom', 'goog.editor.ContentEditableField', 'goog.editor.field_test', 'goog.testing.jsunit'], false); +goog.addDependency('editor/defines.js', ['goog.editor.defines'], [], false); +goog.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); +goog.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); +goog.addDependency('editor/focus.js', ['goog.editor.focus'], ['goog.dom.selection'], false); +goog.addDependency('editor/focus_test.js', ['goog.editor.focusTest'], ['goog.dom.selection', 'goog.editor.BrowserFeature', 'goog.editor.focus', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/plugin.js', ['goog.editor.Plugin'], ['goog.events.EventTarget', 'goog.functions', 'goog.log', 'goog.object', 'goog.reflect', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/plugins/abstracttabhandler.js', ['goog.editor.plugins.AbstractTabHandler'], ['goog.editor.Plugin', 'goog.events.KeyCodes', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/plugins/headerformatter.js', ['goog.editor.plugins.HeaderFormatter'], ['goog.editor.Command', 'goog.editor.Plugin', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/plugins/linkshortcutplugin.js', ['goog.editor.plugins.LinkShortcutPlugin'], ['goog.editor.Command', 'goog.editor.Plugin'], false); +goog.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); +goog.addDependency('editor/plugins/listtabhandler.js', ['goog.editor.plugins.ListTabHandler'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.plugins.AbstractTabHandler', 'goog.iter'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/plugins/spacestabhandler.js', ['goog.editor.plugins.SpacesTabHandler'], ['goog.dom.TagName', 'goog.editor.plugins.AbstractTabHandler', 'goog.editor.range'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/plugins/undoredomanager.js', ['goog.editor.plugins.UndoRedoManager', 'goog.editor.plugins.UndoRedoManager.EventType'], ['goog.editor.plugins.UndoRedoState', 'goog.events', 'goog.events.EventTarget'], false); +goog.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); +goog.addDependency('editor/plugins/undoredostate.js', ['goog.editor.plugins.UndoRedoState'], ['goog.events.EventTarget'], false); +goog.addDependency('editor/plugins/undoredostate_test.js', ['goog.editor.plugins.UndoRedoStateTest'], ['goog.editor.plugins.UndoRedoState', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('editor/table_test.js', ['goog.editor.TableTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Table', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('events/actionhandler_test.js', ['goog.events.ActionHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.ActionHandler', 'goog.testing.events', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('events/browserfeature.js', ['goog.events.BrowserFeature'], ['goog.userAgent'], false); +goog.addDependency('events/event.js', ['goog.events.Event', 'goog.events.EventLike'], ['goog.Disposable', 'goog.events.EventId'], false); +goog.addDependency('events/event_test.js', ['goog.events.EventTest'], ['goog.events.Event', 'goog.events.EventId', 'goog.events.EventTarget', 'goog.testing.jsunit'], false); +goog.addDependency('events/eventhandler.js', ['goog.events.EventHandler'], ['goog.Disposable', 'goog.events', 'goog.object'], false); +goog.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); +goog.addDependency('events/eventid.js', ['goog.events.EventId'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('events/eventtype.js', ['goog.events.EventType'], ['goog.userAgent'], false); +goog.addDependency('events/eventwrapper.js', ['goog.events.EventWrapper'], [], false); +goog.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); +goog.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); +goog.addDependency('events/focushandler.js', ['goog.events.FocusHandler', 'goog.events.FocusHandler.EventType'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('events/keycodes.js', ['goog.events.KeyCodes'], ['goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('events/keynames.js', ['goog.events.KeyNames'], [], false); +goog.addDependency('events/listenable.js', ['goog.events.Listenable', 'goog.events.ListenableKey'], ['goog.events.EventId'], false); +goog.addDependency('events/listenable_test.js', ['goog.events.ListenableTest'], ['goog.events.Listenable', 'goog.testing.jsunit'], false); +goog.addDependency('events/listener.js', ['goog.events.Listener'], ['goog.events.ListenableKey'], false); +goog.addDependency('events/listenermap.js', ['goog.events.ListenerMap'], ['goog.array', 'goog.events.Listener', 'goog.object'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('events/wheelevent.js', ['goog.events.WheelEvent'], ['goog.asserts', 'goog.events.BrowserEvent'], false); +goog.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); +goog.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); +goog.addDependency('format/emailaddress.js', ['goog.format.EmailAddress'], ['goog.string'], false); +goog.addDependency('format/emailaddress_test.js', ['goog.format.EmailAddressTest'], ['goog.array', 'goog.format.EmailAddress', 'goog.testing.jsunit'], false); +goog.addDependency('format/format.js', ['goog.format'], ['goog.i18n.GraphemeBreak', 'goog.string', 'goog.userAgent'], false); +goog.addDependency('format/format_test.js', ['goog.formatTest'], ['goog.dom', 'goog.dom.TagName', 'goog.format', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); +goog.addDependency('format/htmlprettyprinter.js', ['goog.format.HtmlPrettyPrinter', 'goog.format.HtmlPrettyPrinter.Buffer'], ['goog.dom.TagName', 'goog.object', 'goog.string.StringBuffer'], false); +goog.addDependency('format/htmlprettyprinter_test.js', ['goog.format.HtmlPrettyPrinterTest'], ['goog.format.HtmlPrettyPrinter', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('format/internationalizedemailaddress.js', ['goog.format.InternationalizedEmailAddress'], ['goog.format.EmailAddress', 'goog.string'], false); +goog.addDependency('format/internationalizedemailaddress_test.js', ['goog.format.InternationalizedEmailAddressTest'], ['goog.array', 'goog.format.InternationalizedEmailAddress', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('format/jsonprettyprinter_test.js', ['goog.format.JsonPrettyPrinterTest'], ['goog.format.JsonPrettyPrinter', 'goog.testing.jsunit'], false); +goog.addDependency('fs/entry.js', ['goog.fs.DirectoryEntry', 'goog.fs.DirectoryEntry.Behavior', 'goog.fs.Entry', 'goog.fs.FileEntry'], [], false); +goog.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); +goog.addDependency('fs/error.js', ['goog.fs.Error', 'goog.fs.Error.ErrorCode'], ['goog.debug.Error', 'goog.object', 'goog.string'], false); +goog.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); +goog.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); +goog.addDependency('fs/filesystem.js', ['goog.fs.FileSystem'], [], false); +goog.addDependency('fs/filesystemimpl.js', ['goog.fs.FileSystemImpl'], ['goog.fs.DirectoryEntryImpl', 'goog.fs.FileSystem'], false); +goog.addDependency('fs/filewriter.js', ['goog.fs.FileWriter'], ['goog.fs.Error', 'goog.fs.FileSaver'], false); +goog.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); +goog.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); +goog.addDependency('fs/progressevent.js', ['goog.fs.ProgressEvent'], ['goog.events.Event'], false); +goog.addDependency('fs/url.js', ['goog.fs.url'], [], false); +goog.addDependency('fs/url_test.js', ['goog.urlTest'], ['goog.fs.url', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); +goog.addDependency('functions/functions.js', ['goog.functions'], [], false); +goog.addDependency('functions/functions_test.js', ['goog.functionsTest'], ['goog.array', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.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); +goog.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); +goog.addDependency('fx/anim/anim.js', ['goog.fx.anim', 'goog.fx.anim.Animated'], ['goog.async.AnimationDelay', 'goog.async.Delay', 'goog.object'], false); +goog.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); +goog.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); +goog.addDependency('fx/animation_test.js', ['goog.fx.AnimationTest'], ['goog.events', 'goog.fx.Animation', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('fx/css3/fx.js', ['goog.fx.css3'], ['goog.fx.css3.Transition'], false); +goog.addDependency('fx/css3/transition.js', ['goog.fx.css3.Transition'], ['goog.Timer', 'goog.asserts', 'goog.fx.TransitionBase', 'goog.style', 'goog.style.transition'], false); +goog.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); +goog.addDependency('fx/cssspriteanimation.js', ['goog.fx.CssSpriteAnimation'], ['goog.fx.Animation'], false); +goog.addDependency('fx/cssspriteanimation_test.js', ['goog.fx.CssSpriteAnimationTest'], ['goog.fx.CssSpriteAnimation', 'goog.math.Box', 'goog.math.Size', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('fx/dragdrop.js', ['goog.fx.DragDrop'], ['goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem'], false); +goog.addDependency('fx/dragdropgroup.js', ['goog.fx.DragDropGroup'], ['goog.dom', 'goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem'], false); +goog.addDependency('fx/dragdropgroup_test.js', ['goog.fx.DragDropGroupTest'], ['goog.events', 'goog.fx.DragDropGroup', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('fx/easing.js', ['goog.fx.easing'], [], false); +goog.addDependency('fx/easing_test.js', ['goog.fx.easingTest'], ['goog.fx.easing', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('fx/fx_test.js', ['goog.fxTest'], ['goog.fx.Animation', 'goog.object', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); +goog.addDependency('fx/transition.js', ['goog.fx.Transition', 'goog.fx.Transition.EventType'], [], false); +goog.addDependency('fx/transitionbase.js', ['goog.fx.TransitionBase', 'goog.fx.TransitionBase.State'], ['goog.events.EventTarget', 'goog.fx.Transition'], false); +goog.addDependency('graphics/abstractgraphics.js', ['goog.graphics.AbstractGraphics'], ['goog.dom', 'goog.graphics.Path', 'goog.math.Coordinate', 'goog.math.Size', 'goog.style', 'goog.ui.Component'], false); +goog.addDependency('graphics/affinetransform.js', ['goog.graphics.AffineTransform'], ['goog.math'], false); +goog.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); +goog.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); +goog.addDependency('graphics/canvasgraphics_test.js', ['goog.graphics.CanvasGraphicsTest'], ['goog.dom', 'goog.graphics.CanvasGraphics', 'goog.graphics.SolidFill', 'goog.graphics.Stroke', 'goog.testing.jsunit'], false); +goog.addDependency('graphics/element.js', ['goog.graphics.Element'], ['goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.events.Listenable', 'goog.graphics.AffineTransform', 'goog.math'], false); +goog.addDependency('graphics/ellipseelement.js', ['goog.graphics.EllipseElement'], ['goog.graphics.StrokeAndFillElement'], false); +goog.addDependency('graphics/ext/coordinates.js', ['goog.graphics.ext.coordinates'], ['goog.string'], false); +goog.addDependency('graphics/ext/element.js', ['goog.graphics.ext.Element'], ['goog.events.EventTarget', 'goog.functions', 'goog.graphics.ext.coordinates'], false); +goog.addDependency('graphics/ext/ellipse.js', ['goog.graphics.ext.Ellipse'], ['goog.graphics.ext.StrokeAndFillElement'], false); +goog.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); +goog.addDependency('graphics/ext/graphics.js', ['goog.graphics.ext.Graphics'], ['goog.events', 'goog.events.EventType', 'goog.graphics', 'goog.graphics.ext.Group'], false); +goog.addDependency('graphics/ext/group.js', ['goog.graphics.ext.Group'], ['goog.array', 'goog.graphics.ext.Element'], false); +goog.addDependency('graphics/ext/image.js', ['goog.graphics.ext.Image'], ['goog.graphics.ext.Element'], false); +goog.addDependency('graphics/ext/path.js', ['goog.graphics.ext.Path'], ['goog.graphics.AffineTransform', 'goog.graphics.Path', 'goog.math.Rect'], false); +goog.addDependency('graphics/ext/rectangle.js', ['goog.graphics.ext.Rectangle'], ['goog.graphics.ext.StrokeAndFillElement'], false); +goog.addDependency('graphics/ext/shape.js', ['goog.graphics.ext.Shape'], ['goog.graphics.ext.StrokeAndFillElement'], false); +goog.addDependency('graphics/ext/strokeandfillelement.js', ['goog.graphics.ext.StrokeAndFillElement'], ['goog.graphics.ext.Element'], false); +goog.addDependency('graphics/fill.js', ['goog.graphics.Fill'], [], false); +goog.addDependency('graphics/font.js', ['goog.graphics.Font'], [], false); +goog.addDependency('graphics/graphics.js', ['goog.graphics'], ['goog.dom', 'goog.graphics.CanvasGraphics', 'goog.graphics.SvgGraphics', 'goog.graphics.VmlGraphics', 'goog.userAgent'], false); +goog.addDependency('graphics/groupelement.js', ['goog.graphics.GroupElement'], ['goog.graphics.Element'], false); +goog.addDependency('graphics/imageelement.js', ['goog.graphics.ImageElement'], ['goog.graphics.Element'], false); +goog.addDependency('graphics/lineargradient.js', ['goog.graphics.LinearGradient'], ['goog.asserts', 'goog.graphics.Fill'], false); +goog.addDependency('graphics/path.js', ['goog.graphics.Path', 'goog.graphics.Path.Segment'], ['goog.array', 'goog.math'], false); +goog.addDependency('graphics/pathelement.js', ['goog.graphics.PathElement'], ['goog.graphics.StrokeAndFillElement'], false); +goog.addDependency('graphics/paths.js', ['goog.graphics.paths'], ['goog.graphics.Path', 'goog.math.Coordinate'], false); +goog.addDependency('graphics/rectelement.js', ['goog.graphics.RectElement'], ['goog.graphics.StrokeAndFillElement'], false); +goog.addDependency('graphics/solidfill.js', ['goog.graphics.SolidFill'], ['goog.graphics.Fill'], false); +goog.addDependency('graphics/stroke.js', ['goog.graphics.Stroke'], [], false); +goog.addDependency('graphics/strokeandfillelement.js', ['goog.graphics.StrokeAndFillElement'], ['goog.graphics.Element'], false); +goog.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); +goog.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); +goog.addDependency('graphics/textelement.js', ['goog.graphics.TextElement'], ['goog.graphics.StrokeAndFillElement'], false); +goog.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); +goog.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); +goog.addDependency('history/event.js', ['goog.history.Event'], ['goog.events.Event', 'goog.history.EventType'], false); +goog.addDependency('history/eventtype.js', ['goog.history.EventType'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('html/flash.js', ['goog.html.flash'], ['goog.asserts', 'goog.html.SafeHtml'], false); +goog.addDependency('html/flash_test.js', ['goog.html.flashTest'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.string.Const', 'goog.testing.jsunit'], false); +goog.addDependency('html/legacyconversions.js', ['goog.html.legacyconversions'], ['goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('html/safescript.js', ['goog.html.SafeScript'], ['goog.asserts', 'goog.string.Const', 'goog.string.TypedString'], false); +goog.addDependency('html/safescript_test.js', ['goog.html.safeScriptTest'], ['goog.html.SafeScript', 'goog.string.Const', 'goog.testing.jsunit'], false); +goog.addDependency('html/safestyle.js', ['goog.html.SafeStyle'], ['goog.array', 'goog.asserts', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false); +goog.addDependency('html/safestyle_test.js', ['goog.html.safeStyleTest'], ['goog.html.SafeStyle', 'goog.string.Const', 'goog.testing.jsunit'], false); +goog.addDependency('html/safestylesheet.js', ['goog.html.SafeStyleSheet'], ['goog.array', 'goog.asserts', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false); +goog.addDependency('html/safestylesheet_test.js', ['goog.html.safeStyleSheetTest'], ['goog.html.SafeStyleSheet', 'goog.string', 'goog.string.Const', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('html/safeurl_test.js', ['goog.html.safeUrlTest'], ['goog.html.SafeUrl', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('html/silverlight.js', ['goog.html.silverlight'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.string.Const'], false); +goog.addDependency('html/silverlight_test.js', ['goog.html.silverlightTest'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.silverlight', 'goog.string.Const', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('html/trustedresourceurl.js', ['goog.html.TrustedResourceUrl'], ['goog.asserts', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.string.Const', 'goog.string.TypedString'], false); +goog.addDependency('html/trustedresourceurl_test.js', ['goog.html.trustedResourceUrlTest'], ['goog.html.TrustedResourceUrl', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('html/utils.js', ['goog.html.utils'], ['goog.string'], false); +goog.addDependency('html/utils_test.js', ['goog.html.UtilsTest'], ['goog.array', 'goog.dom.TagName', 'goog.html.utils', 'goog.object', 'goog.testing.jsunit'], false); +goog.addDependency('i18n/bidi.js', ['goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.i18n.bidi.Format'], [], false); +goog.addDependency('i18n/bidi_test.js', ['goog.i18n.bidiTest'], ['goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('i18n/charlistdecompressor.js', ['goog.i18n.CharListDecompressor'], ['goog.array', 'goog.i18n.uChar'], false); +goog.addDependency('i18n/charlistdecompressor_test.js', ['goog.i18n.CharListDecompressorTest'], ['goog.i18n.CharListDecompressor', 'goog.testing.jsunit'], false); +goog.addDependency('i18n/charpickerdata.js', ['goog.i18n.CharPickerData'], [], false); +goog.addDependency('i18n/collation.js', ['goog.i18n.collation'], [], false); +goog.addDependency('i18n/collation_test.js', ['goog.i18n.collationTest'], ['goog.i18n.collation', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.addDependency('i18n/currency.js', ['goog.i18n.currency', 'goog.i18n.currency.CurrencyInfo', 'goog.i18n.currency.CurrencyInfoTier2'], [], false); +goog.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); +goog.addDependency('i18n/currencycodemap.js', ['goog.i18n.currencyCodeMap', 'goog.i18n.currencyCodeMapTier2'], [], false); +goog.addDependency('i18n/datetimeformat.js', ['goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeFormat.Format'], ['goog.asserts', 'goog.date', 'goog.i18n.DateTimeSymbols', 'goog.i18n.TimeZone', 'goog.string'], false); +goog.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); +goog.addDependency('i18n/datetimeparse.js', ['goog.i18n.DateTimeParse'], ['goog.date', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('i18n/graphemebreak.js', ['goog.i18n.GraphemeBreak'], ['goog.structs.InversionMap'], false); +goog.addDependency('i18n/graphemebreak_test.js', ['goog.i18n.GraphemeBreakTest'], ['goog.i18n.GraphemeBreak', 'goog.testing.jsunit'], false); +goog.addDependency('i18n/messageformat.js', ['goog.i18n.MessageFormat'], ['goog.asserts', 'goog.i18n.NumberFormat', 'goog.i18n.ordinalRules', 'goog.i18n.pluralRules'], false); +goog.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); +goog.addDependency('i18n/mime.js', ['goog.i18n.mime', 'goog.i18n.mime.encode'], ['goog.array'], false); +goog.addDependency('i18n/mime_test.js', ['goog.i18n.mime.encodeTest'], ['goog.i18n.mime.encode', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('i18n/ordinalrules.js', ['goog.i18n.ordinalRules'], [], false); +goog.addDependency('i18n/pluralrules.js', ['goog.i18n.pluralRules'], [], false); +goog.addDependency('i18n/pluralrules_test.js', ['goog.i18n.pluralRulesTest'], ['goog.i18n.pluralRules', 'goog.testing.jsunit'], false); +goog.addDependency('i18n/timezone.js', ['goog.i18n.TimeZone'], ['goog.array', 'goog.date.DateLike', 'goog.object', 'goog.string'], false); +goog.addDependency('i18n/timezone_test.js', ['goog.i18n.TimeZoneTest'], ['goog.i18n.TimeZone', 'goog.testing.jsunit'], false); +goog.addDependency('i18n/uchar.js', ['goog.i18n.uChar'], [], false); +goog.addDependency('i18n/uchar/localnamefetcher.js', ['goog.i18n.uChar.LocalNameFetcher'], ['goog.i18n.uChar.NameFetcher', 'goog.i18n.uCharNames', 'goog.log'], false); +goog.addDependency('i18n/uchar/localnamefetcher_test.js', ['goog.i18n.uChar.LocalNameFetcherTest'], ['goog.i18n.uChar.LocalNameFetcher', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('i18n/uchar/namefetcher.js', ['goog.i18n.uChar.NameFetcher'], [], false); +goog.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); +goog.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); +goog.addDependency('i18n/uchar_test.js', ['goog.i18n.uCharTest'], ['goog.i18n.uChar', 'goog.testing.jsunit'], false); +goog.addDependency('i18n/ucharnames.js', ['goog.i18n.uCharNames'], ['goog.i18n.uChar'], false); +goog.addDependency('i18n/ucharnames_test.js', ['goog.i18n.uCharNamesTest'], ['goog.i18n.uCharNames', 'goog.testing.jsunit'], false); +goog.addDependency('iter/iter.js', ['goog.iter', 'goog.iter.Iterable', 'goog.iter.Iterator', 'goog.iter.StopIteration'], ['goog.array', 'goog.asserts', 'goog.functions', 'goog.math'], false); +goog.addDependency('iter/iter_test.js', ['goog.iterTest'], ['goog.iter', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.testing.jsunit'], false); +goog.addDependency('json/evaljsonprocessor.js', ['goog.json.EvalJsonProcessor'], ['goog.json', 'goog.json.Processor', 'goog.json.Serializer'], false); +goog.addDependency('json/hybrid.js', ['goog.json.hybrid'], ['goog.asserts', 'goog.json'], false); +goog.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); +goog.addDependency('json/hybridjsonprocessor.js', ['goog.json.HybridJsonProcessor'], ['goog.json.Processor', 'goog.json.hybrid'], false); +goog.addDependency('json/hybridjsonprocessor_test.js', ['goog.json.HybridJsonProcessorTest'], ['goog.json.HybridJsonProcessor', 'goog.json.hybrid', 'goog.testing.jsunit'], false); +goog.addDependency('json/json.js', ['goog.json', 'goog.json.Replacer', 'goog.json.Reviver', 'goog.json.Serializer'], [], false); +goog.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); +goog.addDependency('json/json_test.js', ['goog.jsonTest'], ['goog.functions', 'goog.json', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('json/nativejsonprocessor.js', ['goog.json.NativeJsonProcessor'], ['goog.asserts', 'goog.json.Processor'], false); +goog.addDependency('json/processor.js', ['goog.json.Processor'], ['goog.string.Parser', 'goog.string.Stringifier'], false); +goog.addDependency('json/processor_test.js', ['goog.json.processorTest'], ['goog.json.EvalJsonProcessor', 'goog.json.NativeJsonProcessor', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('labs/events/touch.js', ['goog.labs.events.touch', 'goog.labs.events.touch.TouchData'], ['goog.array', 'goog.asserts', 'goog.events.EventType', 'goog.string'], false); +goog.addDependency('labs/events/touch_test.js', ['goog.labs.events.touchTest'], ['goog.labs.events.touch', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('labs/html/attribute_rewriter.js', ['goog.labs.html.AttributeRewriter', 'goog.labs.html.AttributeValue', 'goog.labs.html.attributeRewriterPresubmitWorkaround'], [], false); +goog.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); +goog.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); +goog.addDependency('labs/html/scrubber.js', ['goog.labs.html.scrubber'], ['goog.array', 'goog.dom.tags', 'goog.labs.html.attributeRewriterPresubmitWorkaround', 'goog.string'], false); +goog.addDependency('labs/html/scrubber_test.js', ['goog.html.ScrubberTest'], ['goog.labs.html.scrubber', 'goog.object', 'goog.string', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('labs/iterable/iterable.js', ['goog.labs.iterable'], [], true); +goog.addDependency('labs/iterable/iterable_test.js', ['goog.labs.iterableTest'], ['goog.labs.iterable', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.testing.testSuite'], true); +goog.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); +goog.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); +goog.addDependency('labs/net/image.js', ['goog.labs.net.image'], ['goog.Promise', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.net.EventType', 'goog.userAgent'], false); +goog.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); +goog.addDependency('labs/net/webchannel.js', ['goog.net.WebChannel'], ['goog.events', 'goog.events.Event'], false); +goog.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); +goog.addDependency('labs/net/webchannel/channel.js', ['goog.labs.net.webChannel.Channel'], [], false); +goog.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); +goog.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); +goog.addDependency('labs/net/webchannel/connectionstate.js', ['goog.labs.net.webChannel.ConnectionState'], [], false); +goog.addDependency('labs/net/webchannel/forwardchannelrequestpool.js', ['goog.labs.net.webChannel.ForwardChannelRequestPool'], ['goog.array', 'goog.string', 'goog.structs.Set'], false); +goog.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); +goog.addDependency('labs/net/webchannel/netutils.js', ['goog.labs.net.webChannel.netUtils'], ['goog.Uri', 'goog.labs.net.webChannel.WebChannelDebug'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('labs/net/webchannel/webchanneldebug.js', ['goog.labs.net.webChannel.WebChannelDebug'], ['goog.json', 'goog.log'], false); +goog.addDependency('labs/net/webchannel/wire.js', ['goog.labs.net.webChannel.Wire'], [], false); +goog.addDependency('labs/net/webchannel/wirev8.js', ['goog.labs.net.webChannel.WireV8'], ['goog.asserts', 'goog.json', 'goog.json.NativeJsonProcessor', 'goog.structs'], false); +goog.addDependency('labs/net/webchannel/wirev8_test.js', ['goog.labs.net.webChannel.WireV8Test'], ['goog.labs.net.webChannel.WireV8', 'goog.testing.jsunit'], false); +goog.addDependency('labs/net/webchanneltransport.js', ['goog.net.WebChannelTransport'], [], false); +goog.addDependency('labs/net/webchanneltransportfactory.js', ['goog.net.createWebChannelTransport'], ['goog.functions', 'goog.labs.net.webChannel.WebChannelBaseTransport'], false); +goog.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); +goog.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); +goog.addDependency('labs/object/object.js', ['goog.labs.object'], [], false); +goog.addDependency('labs/object/object_test.js', ['goog.labs.objectTest'], ['goog.labs.object', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('labs/structs/map.js', ['goog.labs.structs.Map'], ['goog.array', 'goog.asserts', 'goog.labs.object', 'goog.object'], false); +goog.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); +goog.addDependency('labs/structs/map_test.js', ['goog.labs.structs.MapTest'], ['goog.labs.structs.Map', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); +goog.addDependency('labs/structs/multimap.js', ['goog.labs.structs.Multimap'], ['goog.array', 'goog.labs.object', 'goog.labs.structs.Map'], false); +goog.addDependency('labs/structs/multimap_test.js', ['goog.labs.structs.MultimapTest'], ['goog.labs.structs.Map', 'goog.labs.structs.Multimap', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('labs/testing/assertthat.js', ['goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat'], ['goog.debug.Error'], false); +goog.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); +goog.addDependency('labs/testing/decoratormatcher.js', ['goog.labs.testing.AnythingMatcher'], ['goog.labs.testing.Matcher'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('labs/testing/environment_usage_test.js', ['goog.labs.testing.environmentUsageTest'], ['goog.labs.testing.Environment'], false); +goog.addDependency('labs/testing/logicmatcher.js', ['goog.labs.testing.AllOfMatcher', 'goog.labs.testing.AnyOfMatcher', 'goog.labs.testing.IsNotMatcher'], ['goog.array', 'goog.labs.testing.Matcher'], false); +goog.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); +goog.addDependency('labs/testing/matcher.js', ['goog.labs.testing.Matcher'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('labs/useragent/browser.js', ['goog.labs.userAgent.browser'], ['goog.array', 'goog.labs.userAgent.util', 'goog.object', 'goog.string'], false); +goog.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); +goog.addDependency('labs/useragent/device.js', ['goog.labs.userAgent.device'], ['goog.labs.userAgent.util'], false); +goog.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); +goog.addDependency('labs/useragent/engine.js', ['goog.labs.userAgent.engine'], ['goog.array', 'goog.labs.userAgent.util', 'goog.string'], false); +goog.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); +goog.addDependency('labs/useragent/platform.js', ['goog.labs.userAgent.platform'], ['goog.labs.userAgent.util', 'goog.string'], false); +goog.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); +goog.addDependency('labs/useragent/test_agents.js', ['goog.labs.userAgent.testAgents'], [], false); +goog.addDependency('labs/useragent/util.js', ['goog.labs.userAgent.util'], ['goog.string'], false); +goog.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); +goog.addDependency('locale/countries.js', ['goog.locale.countries'], [], false); +goog.addDependency('locale/countrylanguagenames_test.js', ['goog.locale.countryLanguageNamesTest'], ['goog.locale', 'goog.testing.jsunit'], false); +goog.addDependency('locale/defaultlocalenameconstants.js', ['goog.locale.defaultLocaleNameConstants'], [], false); +goog.addDependency('locale/genericfontnames.js', ['goog.locale.genericFontNames'], [], false); +goog.addDependency('locale/genericfontnames_test.js', ['goog.locale.genericFontNamesTest'], ['goog.locale.genericFontNames', 'goog.testing.jsunit'], false); +goog.addDependency('locale/genericfontnamesdata.js', ['goog.locale.genericFontNamesData'], [], false); +goog.addDependency('locale/locale.js', ['goog.locale'], ['goog.locale.nativeNameConstants'], false); +goog.addDependency('locale/nativenameconstants.js', ['goog.locale.nativeNameConstants'], [], false); +goog.addDependency('locale/scriptToLanguages.js', ['goog.locale.scriptToLanguages'], ['goog.locale'], false); +goog.addDependency('locale/timezonedetection.js', ['goog.locale.timeZoneDetection'], ['goog.locale.TimeZoneFingerprint'], false); +goog.addDependency('locale/timezonedetection_test.js', ['goog.locale.timeZoneDetectionTest'], ['goog.locale.timeZoneDetection', 'goog.testing.jsunit'], false); +goog.addDependency('locale/timezonefingerprint.js', ['goog.locale.TimeZoneFingerprint'], [], false); +goog.addDependency('locale/timezonelist.js', ['goog.locale.TimeZoneList'], ['goog.locale'], false); +goog.addDependency('locale/timezonelist_test.js', ['goog.locale.TimeZoneListTest'], ['goog.locale', 'goog.locale.TimeZoneList', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('log/log_test.js', ['goog.logTest'], ['goog.debug.LogManager', 'goog.log', 'goog.log.Level', 'goog.testing.jsunit'], false); +goog.addDependency('math/affinetransform.js', ['goog.math.AffineTransform'], ['goog.math'], false); +goog.addDependency('math/affinetransform_test.js', ['goog.math.AffineTransformTest'], ['goog.array', 'goog.math', 'goog.math.AffineTransform', 'goog.testing.jsunit'], false); +goog.addDependency('math/bezier.js', ['goog.math.Bezier'], ['goog.math', 'goog.math.Coordinate'], false); +goog.addDependency('math/bezier_test.js', ['goog.math.BezierTest'], ['goog.math', 'goog.math.Bezier', 'goog.math.Coordinate', 'goog.testing.jsunit'], false); +goog.addDependency('math/box.js', ['goog.math.Box'], ['goog.math.Coordinate'], false); +goog.addDependency('math/box_test.js', ['goog.math.BoxTest'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.testing.jsunit'], false); +goog.addDependency('math/coordinate.js', ['goog.math.Coordinate'], ['goog.math'], false); +goog.addDependency('math/coordinate3.js', ['goog.math.Coordinate3'], [], false); +goog.addDependency('math/coordinate3_test.js', ['goog.math.Coordinate3Test'], ['goog.math.Coordinate3', 'goog.testing.jsunit'], false); +goog.addDependency('math/coordinate_test.js', ['goog.math.CoordinateTest'], ['goog.math.Coordinate', 'goog.testing.jsunit'], false); +goog.addDependency('math/exponentialbackoff.js', ['goog.math.ExponentialBackoff'], ['goog.asserts'], false); +goog.addDependency('math/exponentialbackoff_test.js', ['goog.math.ExponentialBackoffTest'], ['goog.math.ExponentialBackoff', 'goog.testing.jsunit'], false); +goog.addDependency('math/integer.js', ['goog.math.Integer'], [], false); +goog.addDependency('math/integer_test.js', ['goog.math.IntegerTest'], ['goog.math.Integer', 'goog.testing.jsunit'], false); +goog.addDependency('math/interpolator/interpolator1.js', ['goog.math.interpolator.Interpolator1'], [], false); +goog.addDependency('math/interpolator/linear1.js', ['goog.math.interpolator.Linear1'], ['goog.array', 'goog.asserts', 'goog.math', 'goog.math.interpolator.Interpolator1'], false); +goog.addDependency('math/interpolator/linear1_test.js', ['goog.math.interpolator.Linear1Test'], ['goog.math.interpolator.Linear1', 'goog.testing.jsunit'], false); +goog.addDependency('math/interpolator/pchip1.js', ['goog.math.interpolator.Pchip1'], ['goog.math', 'goog.math.interpolator.Spline1'], false); +goog.addDependency('math/interpolator/pchip1_test.js', ['goog.math.interpolator.Pchip1Test'], ['goog.math.interpolator.Pchip1', 'goog.testing.jsunit'], false); +goog.addDependency('math/interpolator/spline1.js', ['goog.math.interpolator.Spline1'], ['goog.array', 'goog.asserts', 'goog.math', 'goog.math.interpolator.Interpolator1', 'goog.math.tdma'], false); +goog.addDependency('math/interpolator/spline1_test.js', ['goog.math.interpolator.Spline1Test'], ['goog.math.interpolator.Spline1', 'goog.testing.jsunit'], false); +goog.addDependency('math/line.js', ['goog.math.Line'], ['goog.math', 'goog.math.Coordinate'], false); +goog.addDependency('math/line_test.js', ['goog.math.LineTest'], ['goog.math.Coordinate', 'goog.math.Line', 'goog.testing.jsunit'], false); +goog.addDependency('math/long.js', ['goog.math.Long'], [], false); +goog.addDependency('math/long_test.js', ['goog.math.LongTest'], ['goog.math.Long', 'goog.testing.jsunit'], false); +goog.addDependency('math/math.js', ['goog.math'], ['goog.array', 'goog.asserts'], false); +goog.addDependency('math/math_test.js', ['goog.mathTest'], ['goog.math', 'goog.testing.jsunit'], false); +goog.addDependency('math/matrix.js', ['goog.math.Matrix'], ['goog.array', 'goog.math', 'goog.math.Size', 'goog.string'], false); +goog.addDependency('math/matrix_test.js', ['goog.math.MatrixTest'], ['goog.math.Matrix', 'goog.testing.jsunit'], false); +goog.addDependency('math/path.js', ['goog.math.Path', 'goog.math.Path.Segment'], ['goog.array', 'goog.math'], false); +goog.addDependency('math/path_test.js', ['goog.math.PathTest'], ['goog.array', 'goog.math.AffineTransform', 'goog.math.Path', 'goog.testing.jsunit'], false); +goog.addDependency('math/paths.js', ['goog.math.paths'], ['goog.math.Coordinate', 'goog.math.Path'], false); +goog.addDependency('math/paths_test.js', ['goog.math.pathsTest'], ['goog.math.Coordinate', 'goog.math.paths', 'goog.testing.jsunit'], false); +goog.addDependency('math/range.js', ['goog.math.Range'], ['goog.asserts'], false); +goog.addDependency('math/range_test.js', ['goog.math.RangeTest'], ['goog.math.Range', 'goog.testing.jsunit'], false); +goog.addDependency('math/rangeset.js', ['goog.math.RangeSet'], ['goog.array', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.math.Range'], false); +goog.addDependency('math/rangeset_test.js', ['goog.math.RangeSetTest'], ['goog.iter', 'goog.math.Range', 'goog.math.RangeSet', 'goog.testing.jsunit'], false); +goog.addDependency('math/rect.js', ['goog.math.Rect'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.math.Size'], false); +goog.addDependency('math/rect_test.js', ['goog.math.RectTest'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.testing.jsunit'], false); +goog.addDependency('math/size.js', ['goog.math.Size'], [], false); +goog.addDependency('math/size_test.js', ['goog.math.SizeTest'], ['goog.math.Size', 'goog.testing.jsunit'], false); +goog.addDependency('math/tdma.js', ['goog.math.tdma'], [], false); +goog.addDependency('math/tdma_test.js', ['goog.math.tdmaTest'], ['goog.math.tdma', 'goog.testing.jsunit'], false); +goog.addDependency('math/vec2.js', ['goog.math.Vec2'], ['goog.math', 'goog.math.Coordinate'], false); +goog.addDependency('math/vec2_test.js', ['goog.math.Vec2Test'], ['goog.math.Vec2', 'goog.testing.jsunit'], false); +goog.addDependency('math/vec3.js', ['goog.math.Vec3'], ['goog.math', 'goog.math.Coordinate3'], false); +goog.addDependency('math/vec3_test.js', ['goog.math.Vec3Test'], ['goog.math.Coordinate3', 'goog.math.Vec3', 'goog.testing.jsunit'], false); +goog.addDependency('memoize/memoize.js', ['goog.memoize'], [], false); +goog.addDependency('memoize/memoize_test.js', ['goog.memoizeTest'], ['goog.memoize', 'goog.testing.jsunit'], false); +goog.addDependency('messaging/abstractchannel.js', ['goog.messaging.AbstractChannel'], ['goog.Disposable', 'goog.json', 'goog.log', 'goog.messaging.MessageChannel'], false); +goog.addDependency('messaging/abstractchannel_test.js', ['goog.messaging.AbstractChannelTest'], ['goog.messaging.AbstractChannel', 'goog.testing.MockControl', 'goog.testing.async.MockControl', 'goog.testing.jsunit'], false); +goog.addDependency('messaging/bufferedchannel.js', ['goog.messaging.BufferedChannel'], ['goog.Disposable', 'goog.Timer', 'goog.events', 'goog.log', 'goog.messaging.MessageChannel', 'goog.messaging.MultiChannel'], false); +goog.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); +goog.addDependency('messaging/deferredchannel.js', ['goog.messaging.DeferredChannel'], ['goog.Disposable', 'goog.messaging.MessageChannel'], false); +goog.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); +goog.addDependency('messaging/loggerclient.js', ['goog.messaging.LoggerClient'], ['goog.Disposable', 'goog.debug', 'goog.debug.LogManager', 'goog.debug.Logger'], false); +goog.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); +goog.addDependency('messaging/loggerserver.js', ['goog.messaging.LoggerServer'], ['goog.Disposable', 'goog.log', 'goog.log.Level'], false); +goog.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); +goog.addDependency('messaging/messagechannel.js', ['goog.messaging.MessageChannel'], [], false); +goog.addDependency('messaging/messaging.js', ['goog.messaging'], [], false); +goog.addDependency('messaging/messaging_test.js', ['goog.testing.messaging.MockMessageChannelTest'], ['goog.messaging', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); +goog.addDependency('messaging/multichannel.js', ['goog.messaging.MultiChannel', 'goog.messaging.MultiChannel.VirtualChannel'], ['goog.Disposable', 'goog.log', 'goog.messaging.MessageChannel', 'goog.object'], false); +goog.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); +goog.addDependency('messaging/portcaller.js', ['goog.messaging.PortCaller'], ['goog.Disposable', 'goog.async.Deferred', 'goog.messaging.DeferredChannel', 'goog.messaging.PortChannel', 'goog.messaging.PortNetwork', 'goog.object'], false); +goog.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); +goog.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); +goog.addDependency('messaging/portnetwork.js', ['goog.messaging.PortNetwork'], [], false); +goog.addDependency('messaging/portoperator.js', ['goog.messaging.PortOperator'], ['goog.Disposable', 'goog.asserts', 'goog.log', 'goog.messaging.PortChannel', 'goog.messaging.PortNetwork', 'goog.object'], false); +goog.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); +goog.addDependency('messaging/respondingchannel.js', ['goog.messaging.RespondingChannel'], ['goog.Disposable', 'goog.log', 'goog.messaging.MultiChannel'], false); +goog.addDependency('messaging/respondingchannel_test.js', ['goog.messaging.RespondingChannelTest'], ['goog.messaging.RespondingChannel', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); +goog.addDependency('messaging/testdata/portchannel_worker.js', ['goog.messaging.testdata.portchannel_worker'], ['goog.messaging.PortChannel'], false); +goog.addDependency('messaging/testdata/portnetwork_worker1.js', ['goog.messaging.testdata.portnetwork_worker1'], ['goog.messaging.PortCaller', 'goog.messaging.PortChannel'], false); +goog.addDependency('messaging/testdata/portnetwork_worker2.js', ['goog.messaging.testdata.portnetwork_worker2'], ['goog.messaging.PortCaller', 'goog.messaging.PortChannel'], false); +goog.addDependency('module/abstractmoduleloader.js', ['goog.module.AbstractModuleLoader'], ['goog.module'], false); +goog.addDependency('module/basemodule.js', ['goog.module.BaseModule'], ['goog.Disposable', 'goog.module'], false); +goog.addDependency('module/loader.js', ['goog.module.Loader'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.module', 'goog.object'], false); +goog.addDependency('module/module.js', ['goog.module'], [], false); +goog.addDependency('module/moduleinfo.js', ['goog.module.ModuleInfo'], ['goog.Disposable', 'goog.async.throwException', 'goog.functions', 'goog.module', 'goog.module.BaseModule', 'goog.module.ModuleLoadCallback'], false); +goog.addDependency('module/moduleinfo_test.js', ['goog.module.ModuleInfoTest'], ['goog.module.BaseModule', 'goog.module.ModuleInfo', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('module/moduleloadcallback.js', ['goog.module.ModuleLoadCallback'], ['goog.debug.entryPointRegistry', 'goog.module'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('module/testdata/modA_1.js', ['goog.module.testdata.modA_1'], [], false); +goog.addDependency('module/testdata/modA_2.js', ['goog.module.testdata.modA_2'], ['goog.module.ModuleManager'], false); +goog.addDependency('module/testdata/modB_1.js', ['goog.module.testdata.modB_1'], ['goog.module.ModuleManager'], false); +goog.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); +goog.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); +goog.addDependency('net/browsertestchannel.js', ['goog.net.BrowserTestChannel'], ['goog.json.EvalJsonProcessor', 'goog.net.ChannelRequest', 'goog.net.ChannelRequest.Error', 'goog.net.tmpnetwork', 'goog.string.Parser'], false); +goog.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); +goog.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); +goog.addDependency('net/bulkloaderhelper.js', ['goog.net.BulkLoaderHelper'], ['goog.Disposable'], false); +goog.addDependency('net/channeldebug.js', ['goog.net.ChannelDebug'], ['goog.json', 'goog.log'], false); +goog.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); +goog.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); +goog.addDependency('net/cookies.js', ['goog.net.Cookies', 'goog.net.cookies'], [], false); +goog.addDependency('net/cookies_test.js', ['goog.net.cookiesTest'], ['goog.array', 'goog.net.cookies', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); +goog.addDependency('net/corsxmlhttpfactory.js', ['goog.net.CorsXmlHttpFactory', 'goog.net.IeCorsXhrAdapter'], ['goog.net.HttpStatus', 'goog.net.XhrLike', 'goog.net.XmlHttp', 'goog.net.XmlHttpFactory'], false); +goog.addDependency('net/corsxmlhttpfactory_test.js', ['goog.net.CorsXmlHttpFactoryTest'], ['goog.net.CorsXmlHttpFactory', 'goog.net.IeCorsXhrAdapter', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.addDependency('net/errorcode.js', ['goog.net.ErrorCode'], [], false); +goog.addDependency('net/eventtype.js', ['goog.net.EventType'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('net/httpstatus.js', ['goog.net.HttpStatus'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('net/iframeloadmonitor.js', ['goog.net.IframeLoadMonitor'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('net/ipaddress.js', ['goog.net.IpAddress', 'goog.net.Ipv4Address', 'goog.net.Ipv6Address'], ['goog.array', 'goog.math.Integer', 'goog.object', 'goog.string'], false); +goog.addDependency('net/ipaddress_test.js', ['goog.net.IpAddressTest'], ['goog.math.Integer', 'goog.net.IpAddress', 'goog.net.Ipv4Address', 'goog.net.Ipv6Address', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('net/jsonp.js', ['goog.net.Jsonp'], ['goog.Uri', 'goog.net.jsloader'], false); +goog.addDependency('net/jsonp_test.js', ['goog.net.JsonpTest'], ['goog.net.Jsonp', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); +goog.addDependency('net/mockiframeio.js', ['goog.net.MockIFrameIo'], ['goog.events.EventTarget', 'goog.json', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.IframeIo'], false); +goog.addDependency('net/multiiframeloadmonitor.js', ['goog.net.MultiIframeLoadMonitor'], ['goog.events', 'goog.net.IframeLoadMonitor'], false); +goog.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); +goog.addDependency('net/networkstatusmonitor.js', ['goog.net.NetworkStatusMonitor'], ['goog.events.Listenable'], false); +goog.addDependency('net/networktester.js', ['goog.net.NetworkTester'], ['goog.Timer', 'goog.Uri', 'goog.log'], false); +goog.addDependency('net/networktester_test.js', ['goog.net.NetworkTesterTest'], ['goog.Uri', 'goog.net.NetworkTester', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('net/streams/nodereadablestream.js', ['goog.net.streams.NodeReadableStream'], [], false); +goog.addDependency('net/streams/streamfactory.js', ['goog.net.streams.createNodeReadableStream'], ['goog.asserts', 'goog.net.XhrIo', 'goog.net.streams.NodeReadableStream'], false); +goog.addDependency('net/testdata/jsloader_test1.js', ['goog.net.testdata.jsloader_test1'], [], false); +goog.addDependency('net/testdata/jsloader_test2.js', ['goog.net.testdata.jsloader_test2'], [], false); +goog.addDependency('net/testdata/jsloader_test3.js', ['goog.net.testdata.jsloader_test3'], [], false); +goog.addDependency('net/testdata/jsloader_test4.js', ['goog.net.testdata.jsloader_test4'], [], false); +goog.addDependency('net/tmpnetwork.js', ['goog.net.tmpnetwork'], ['goog.Uri', 'goog.net.ChannelDebug'], false); +goog.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); +goog.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); +goog.addDependency('net/wrapperxmlhttpfactory.js', ['goog.net.WrapperXmlHttpFactory'], ['goog.net.XhrLike', 'goog.net.XmlHttpFactory'], false); +goog.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); +goog.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); +goog.addDependency('net/xhriopool.js', ['goog.net.XhrIoPool'], ['goog.net.XhrIo', 'goog.structs.PriorityPool'], false); +goog.addDependency('net/xhriopool_test.js', ['goog.net.XhrIoPoolTest'], ['goog.net.XhrIoPool', 'goog.structs.Map', 'goog.testing.jsunit'], false); +goog.addDependency('net/xhrlike.js', ['goog.net.XhrLike'], [], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('net/xmlhttpfactory.js', ['goog.net.XmlHttpFactory'], ['goog.net.XhrLike'], false); +goog.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); +goog.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); +goog.addDependency('net/xpc/crosspagechannelrole.js', ['goog.net.xpc.CrossPageChannelRole'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('net/xpc/relay.js', ['goog.net.xpc.relay'], [], false); +goog.addDependency('net/xpc/transport.js', ['goog.net.xpc.Transport'], ['goog.Disposable', 'goog.dom', 'goog.net.xpc.TransportNames'], false); +goog.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); +goog.addDependency('object/object.js', ['goog.object'], [], false); +goog.addDependency('object/object_test.js', ['goog.objectTest'], ['goog.functions', 'goog.object', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('positioning/absoluteposition.js', ['goog.positioning.AbsolutePosition'], ['goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition'], false); +goog.addDependency('positioning/abstractposition.js', ['goog.positioning.AbstractPosition'], [], false); +goog.addDependency('positioning/anchoredposition.js', ['goog.positioning.AnchoredPosition'], ['goog.positioning', 'goog.positioning.AbstractPosition'], false); +goog.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); +goog.addDependency('positioning/anchoredviewportposition.js', ['goog.positioning.AnchoredViewportPosition'], ['goog.positioning', 'goog.positioning.AnchoredPosition', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus'], false); +goog.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); +goog.addDependency('positioning/clientposition.js', ['goog.positioning.ClientPosition'], ['goog.asserts', 'goog.dom', 'goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition', 'goog.style'], false); +goog.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); +goog.addDependency('positioning/menuanchoredposition.js', ['goog.positioning.MenuAnchoredPosition'], ['goog.positioning.AnchoredViewportPosition', 'goog.positioning.Overflow'], false); +goog.addDependency('positioning/menuanchoredposition_test.js', ['goog.positioning.MenuAnchoredPositionTest'], ['goog.dom', 'goog.dom.TagName', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('positioning/viewportposition.js', ['goog.positioning.ViewportPosition'], ['goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition', 'goog.positioning.Corner', 'goog.style'], false); +goog.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); +goog.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); +goog.addDependency('promise/resolver.js', ['goog.promise.Resolver'], [], false); +goog.addDependency('promise/testsuiteadapter.js', ['goog.promise.testSuiteAdapter'], ['goog.Promise'], false); +goog.addDependency('promise/thenable.js', ['goog.Thenable'], [], false); +goog.addDependency('proto/proto.js', ['goog.proto'], ['goog.proto.Serializer'], false); +goog.addDependency('proto/serializer.js', ['goog.proto.Serializer'], ['goog.json.Serializer', 'goog.string'], false); +goog.addDependency('proto/serializer_test.js', ['goog.protoTest'], ['goog.proto', 'goog.testing.jsunit'], false); +goog.addDependency('proto2/descriptor.js', ['goog.proto2.Descriptor', 'goog.proto2.Metadata'], ['goog.array', 'goog.asserts', 'goog.object', 'goog.string'], false); +goog.addDependency('proto2/descriptor_test.js', ['goog.proto2.DescriptorTest'], ['goog.proto2.Descriptor', 'goog.proto2.Message', 'goog.testing.jsunit'], false); +goog.addDependency('proto2/fielddescriptor.js', ['goog.proto2.FieldDescriptor'], ['goog.asserts', 'goog.string'], false); +goog.addDependency('proto2/fielddescriptor_test.js', ['goog.proto2.FieldDescriptorTest'], ['goog.proto2.FieldDescriptor', 'goog.proto2.Message', 'goog.testing.jsunit'], false); +goog.addDependency('proto2/lazydeserializer.js', ['goog.proto2.LazyDeserializer'], ['goog.asserts', 'goog.proto2.Message', 'goog.proto2.Serializer'], false); +goog.addDependency('proto2/message.js', ['goog.proto2.Message'], ['goog.asserts', 'goog.proto2.Descriptor', 'goog.proto2.FieldDescriptor'], false); +goog.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); +goog.addDependency('proto2/objectserializer.js', ['goog.proto2.ObjectSerializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.Serializer', 'goog.string'], false); +goog.addDependency('proto2/objectserializer_test.js', ['goog.proto2.ObjectSerializerTest'], ['goog.proto2.ObjectSerializer', 'goog.proto2.Serializer', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false); +goog.addDependency('proto2/package_test.pb.js', ['someprotopackage.TestPackageTypes'], ['goog.proto2.Message', 'proto2.TestAllTypes'], false); +goog.addDependency('proto2/pbliteserializer.js', ['goog.proto2.PbLiteSerializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.LazyDeserializer', 'goog.proto2.Serializer'], false); +goog.addDependency('proto2/pbliteserializer_test.js', ['goog.proto2.PbLiteSerializerTest'], ['goog.proto2.PbLiteSerializer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false); +goog.addDependency('proto2/proto_test.js', ['goog.proto2.messageTest'], ['goog.proto2.FieldDescriptor', 'goog.testing.jsunit', 'proto2.TestAllTypes', 'someprotopackage.TestPackageTypes'], false); +goog.addDependency('proto2/serializer.js', ['goog.proto2.Serializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.Message'], false); +goog.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); +goog.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); +goog.addDependency('proto2/textformatserializer_test.js', ['goog.proto2.TextFormatSerializerTest'], ['goog.proto2.ObjectSerializer', 'goog.proto2.TextFormatSerializer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false); +goog.addDependency('proto2/util.js', ['goog.proto2.Util'], ['goog.asserts'], false); +goog.addDependency('pubsub/pubsub.js', ['goog.pubsub.PubSub'], ['goog.Disposable', 'goog.array'], false); +goog.addDependency('pubsub/pubsub_test.js', ['goog.pubsub.PubSubTest'], ['goog.array', 'goog.pubsub.PubSub', 'goog.testing.jsunit'], false); +goog.addDependency('pubsub/topicid.js', ['goog.pubsub.TopicId'], [], false); +goog.addDependency('pubsub/typedpubsub.js', ['goog.pubsub.TypedPubSub'], ['goog.Disposable', 'goog.pubsub.PubSub'], false); +goog.addDependency('pubsub/typedpubsub_test.js', ['goog.pubsub.TypedPubSubTest'], ['goog.array', 'goog.pubsub.TopicId', 'goog.pubsub.TypedPubSub', 'goog.testing.jsunit'], false); +goog.addDependency('reflect/reflect.js', ['goog.reflect'], [], false); +goog.addDependency('result/deferredadaptor.js', ['goog.result.DeferredAdaptor'], ['goog.async.Deferred', 'goog.result', 'goog.result.Result'], false); +goog.addDependency('result/dependentresult.js', ['goog.result.DependentResult'], ['goog.result.Result'], false); +goog.addDependency('result/result_interface.js', ['goog.result.Result'], ['goog.Thenable'], false); +goog.addDependency('result/resultutil.js', ['goog.result'], ['goog.array', 'goog.result.DependentResult', 'goog.result.Result', 'goog.result.SimpleResult'], false); +goog.addDependency('result/simpleresult.js', ['goog.result.SimpleResult', 'goog.result.SimpleResult.StateError'], ['goog.Promise', 'goog.Thenable', 'goog.debug.Error', 'goog.result.Result'], false); +goog.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); +goog.addDependency('soy/data_test.js', ['goog.soy.dataTest'], ['goog.html.SafeHtml', 'goog.soy.testHelper', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('spell/spellcheck.js', ['goog.spell.SpellCheck', 'goog.spell.SpellCheck.WordChangedEvent'], ['goog.Timer', 'goog.events.Event', 'goog.events.EventTarget', 'goog.structs.Set'], false); +goog.addDependency('spell/spellcheck_test.js', ['goog.spell.SpellCheckTest'], ['goog.spell.SpellCheck', 'goog.testing.jsunit'], false); +goog.addDependency('stats/basicstat.js', ['goog.stats.BasicStat'], ['goog.asserts', 'goog.log', 'goog.string.format', 'goog.structs.CircularBuffer'], false); +goog.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); +goog.addDependency('storage/collectablestorage.js', ['goog.storage.CollectableStorage'], ['goog.array', 'goog.iter', 'goog.storage.ErrorCode', 'goog.storage.ExpiringStorage', 'goog.storage.RichStorage'], false); +goog.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); +goog.addDependency('storage/collectablestoragetester.js', ['goog.storage.collectableStorageTester'], ['goog.testing.asserts'], false); +goog.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); +goog.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); +goog.addDependency('storage/errorcode.js', ['goog.storage.ErrorCode'], [], false); +goog.addDependency('storage/expiringstorage.js', ['goog.storage.ExpiringStorage'], ['goog.storage.RichStorage'], false); +goog.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); +goog.addDependency('storage/mechanism/errorcode.js', ['goog.storage.mechanism.ErrorCode'], [], false); +goog.addDependency('storage/mechanism/errorhandlingmechanism.js', ['goog.storage.mechanism.ErrorHandlingMechanism'], ['goog.storage.mechanism.Mechanism'], false); +goog.addDependency('storage/mechanism/errorhandlingmechanism_test.js', ['goog.storage.mechanism.ErrorHandlingMechanismTest'], ['goog.storage.mechanism.ErrorHandlingMechanism', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('storage/mechanism/html5localstorage.js', ['goog.storage.mechanism.HTML5LocalStorage'], ['goog.storage.mechanism.HTML5WebStorage'], false); +goog.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); +goog.addDependency('storage/mechanism/html5sessionstorage.js', ['goog.storage.mechanism.HTML5SessionStorage'], ['goog.storage.mechanism.HTML5WebStorage'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('storage/mechanism/iterablemechanism.js', ['goog.storage.mechanism.IterableMechanism'], ['goog.array', 'goog.asserts', 'goog.iter', 'goog.storage.mechanism.Mechanism'], false); +goog.addDependency('storage/mechanism/iterablemechanismtester.js', ['goog.storage.mechanism.iterableMechanismTester'], ['goog.iter.Iterator', 'goog.storage.mechanism.IterableMechanism', 'goog.testing.asserts'], false); +goog.addDependency('storage/mechanism/mechanism.js', ['goog.storage.mechanism.Mechanism'], [], false); +goog.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); +goog.addDependency('storage/mechanism/mechanismfactory_test.js', ['goog.storage.mechanism.mechanismfactoryTest'], ['goog.storage.mechanism.mechanismfactory', 'goog.testing.jsunit'], false); +goog.addDependency('storage/mechanism/mechanismseparationtester.js', ['goog.storage.mechanism.mechanismSeparationTester'], ['goog.iter.StopIteration', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.asserts'], false); +goog.addDependency('storage/mechanism/mechanismsharingtester.js', ['goog.storage.mechanism.mechanismSharingTester'], ['goog.iter.StopIteration', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.asserts'], false); +goog.addDependency('storage/mechanism/mechanismtestdefinition.js', ['goog.storage.mechanism.mechanismTestDefinition'], [], false); +goog.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); +goog.addDependency('storage/mechanism/prefixedmechanism.js', ['goog.storage.mechanism.PrefixedMechanism'], ['goog.iter.Iterator', 'goog.storage.mechanism.IterableMechanism'], false); +goog.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); +goog.addDependency('storage/richstorage.js', ['goog.storage.RichStorage', 'goog.storage.RichStorage.Wrapper'], ['goog.storage.ErrorCode', 'goog.storage.Storage'], false); +goog.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); +goog.addDependency('storage/storage.js', ['goog.storage.Storage'], ['goog.json', 'goog.storage.ErrorCode'], false); +goog.addDependency('storage/storage_test.js', ['goog.storage.storage_test'], ['goog.structs.Map', 'goog.testing.asserts'], false); +goog.addDependency('string/const.js', ['goog.string.Const'], ['goog.asserts', 'goog.string.TypedString'], false); +goog.addDependency('string/const_test.js', ['goog.string.constTest'], ['goog.string.Const', 'goog.testing.jsunit'], false); +goog.addDependency('string/linkify.js', ['goog.string.linkify'], ['goog.string'], false); +goog.addDependency('string/linkify_test.js', ['goog.string.linkifyTest'], ['goog.dom.TagName', 'goog.string', 'goog.string.linkify', 'goog.testing.dom', 'goog.testing.jsunit'], false); +goog.addDependency('string/newlines.js', ['goog.string.newlines', 'goog.string.newlines.Line'], ['goog.array'], false); +goog.addDependency('string/newlines_test.js', ['goog.string.newlinesTest'], ['goog.string.newlines', 'goog.testing.jsunit'], false); +goog.addDependency('string/parser.js', ['goog.string.Parser'], [], false); +goog.addDependency('string/path.js', ['goog.string.path'], ['goog.array', 'goog.string'], false); +goog.addDependency('string/path_test.js', ['goog.string.pathTest'], ['goog.string.path', 'goog.testing.jsunit'], false); +goog.addDependency('string/string.js', ['goog.string', 'goog.string.Unicode'], [], false); +goog.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); +goog.addDependency('string/stringbuffer.js', ['goog.string.StringBuffer'], [], false); +goog.addDependency('string/stringbuffer_test.js', ['goog.string.StringBufferTest'], ['goog.string.StringBuffer', 'goog.testing.jsunit'], false); +goog.addDependency('string/stringformat.js', ['goog.string.format'], ['goog.string'], false); +goog.addDependency('string/stringformat_test.js', ['goog.string.formatTest'], ['goog.string.format', 'goog.testing.jsunit'], false); +goog.addDependency('string/stringifier.js', ['goog.string.Stringifier'], [], false); +goog.addDependency('string/typedstring.js', ['goog.string.TypedString'], [], false); +goog.addDependency('structs/avltree.js', ['goog.structs.AvlTree', 'goog.structs.AvlTree.Node'], ['goog.structs.Collection'], false); +goog.addDependency('structs/avltree_test.js', ['goog.structs.AvlTreeTest'], ['goog.array', 'goog.structs.AvlTree', 'goog.testing.jsunit'], false); +goog.addDependency('structs/circularbuffer.js', ['goog.structs.CircularBuffer'], [], false); +goog.addDependency('structs/circularbuffer_test.js', ['goog.structs.CircularBufferTest'], ['goog.structs.CircularBuffer', 'goog.testing.jsunit'], false); +goog.addDependency('structs/collection.js', ['goog.structs.Collection'], [], false); +goog.addDependency('structs/collection_test.js', ['goog.structs.CollectionTest'], ['goog.structs.AvlTree', 'goog.structs.Set', 'goog.testing.jsunit'], false); +goog.addDependency('structs/heap.js', ['goog.structs.Heap'], ['goog.array', 'goog.object', 'goog.structs.Node'], false); +goog.addDependency('structs/heap_test.js', ['goog.structs.HeapTest'], ['goog.structs', 'goog.structs.Heap', 'goog.testing.jsunit'], false); +goog.addDependency('structs/inversionmap.js', ['goog.structs.InversionMap'], ['goog.array'], false); +goog.addDependency('structs/inversionmap_test.js', ['goog.structs.InversionMapTest'], ['goog.structs.InversionMap', 'goog.testing.jsunit'], false); +goog.addDependency('structs/linkedmap.js', ['goog.structs.LinkedMap'], ['goog.structs.Map'], false); +goog.addDependency('structs/linkedmap_test.js', ['goog.structs.LinkedMapTest'], ['goog.structs.LinkedMap', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); +goog.addDependency('structs/map.js', ['goog.structs.Map'], ['goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.object'], false); +goog.addDependency('structs/map_test.js', ['goog.structs.MapTest'], ['goog.iter', 'goog.structs', 'goog.structs.Map', 'goog.testing.jsunit'], false); +goog.addDependency('structs/node.js', ['goog.structs.Node'], [], false); +goog.addDependency('structs/pool.js', ['goog.structs.Pool'], ['goog.Disposable', 'goog.structs.Queue', 'goog.structs.Set'], false); +goog.addDependency('structs/pool_test.js', ['goog.structs.PoolTest'], ['goog.structs.Pool', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('structs/prioritypool.js', ['goog.structs.PriorityPool'], ['goog.structs.Pool', 'goog.structs.PriorityQueue'], false); +goog.addDependency('structs/prioritypool_test.js', ['goog.structs.PriorityPoolTest'], ['goog.structs.PriorityPool', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.addDependency('structs/priorityqueue.js', ['goog.structs.PriorityQueue'], ['goog.structs.Heap'], false); +goog.addDependency('structs/priorityqueue_test.js', ['goog.structs.PriorityQueueTest'], ['goog.structs', 'goog.structs.PriorityQueue', 'goog.testing.jsunit'], false); +goog.addDependency('structs/quadtree.js', ['goog.structs.QuadTree', 'goog.structs.QuadTree.Node', 'goog.structs.QuadTree.Point'], ['goog.math.Coordinate'], false); +goog.addDependency('structs/quadtree_test.js', ['goog.structs.QuadTreeTest'], ['goog.structs', 'goog.structs.QuadTree', 'goog.testing.jsunit'], false); +goog.addDependency('structs/queue.js', ['goog.structs.Queue'], ['goog.array'], false); +goog.addDependency('structs/queue_test.js', ['goog.structs.QueueTest'], ['goog.structs.Queue', 'goog.testing.jsunit'], false); +goog.addDependency('structs/set.js', ['goog.structs.Set'], ['goog.structs', 'goog.structs.Collection', 'goog.structs.Map'], false); +goog.addDependency('structs/set_test.js', ['goog.structs.SetTest'], ['goog.iter', 'goog.structs', 'goog.structs.Set', 'goog.testing.jsunit'], false); +goog.addDependency('structs/simplepool.js', ['goog.structs.SimplePool'], ['goog.Disposable'], false); +goog.addDependency('structs/stringset.js', ['goog.structs.StringSet'], ['goog.asserts', 'goog.iter'], false); +goog.addDependency('structs/stringset_test.js', ['goog.structs.StringSetTest'], ['goog.array', 'goog.iter', 'goog.structs.StringSet', 'goog.testing.asserts', 'goog.testing.jsunit'], false); +goog.addDependency('structs/structs.js', ['goog.structs'], ['goog.array', 'goog.object'], false); +goog.addDependency('structs/structs_test.js', ['goog.structsTest'], ['goog.array', 'goog.dom.TagName', 'goog.structs', 'goog.structs.Map', 'goog.structs.Set', 'goog.testing.jsunit'], false); +goog.addDependency('structs/treenode.js', ['goog.structs.TreeNode'], ['goog.array', 'goog.asserts', 'goog.structs.Node'], false); +goog.addDependency('structs/treenode_test.js', ['goog.structs.TreeNodeTest'], ['goog.structs.TreeNode', 'goog.testing.jsunit'], false); +goog.addDependency('structs/trie.js', ['goog.structs.Trie'], ['goog.object', 'goog.structs'], false); +goog.addDependency('structs/trie_test.js', ['goog.structs.TrieTest'], ['goog.object', 'goog.structs', 'goog.structs.Trie', 'goog.testing.jsunit'], false); +goog.addDependency('structs/weak/weak.js', ['goog.structs.weak'], ['goog.userAgent'], false); +goog.addDependency('structs/weak/weak_test.js', ['goog.structs.weakTest'], ['goog.array', 'goog.structs.weak', 'goog.testing.jsunit'], false); +goog.addDependency('style/bidi.js', ['goog.style.bidi'], ['goog.dom', 'goog.style', 'goog.userAgent'], false); +goog.addDependency('style/bidi_test.js', ['goog.style.bidiTest'], ['goog.dom', 'goog.style', 'goog.style.bidi', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('style/cursor.js', ['goog.style.cursor'], ['goog.userAgent'], false); +goog.addDependency('style/cursor_test.js', ['goog.style.cursorTest'], ['goog.style.cursor', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.addDependency('style/style_document_scroll_test.js', ['goog.style.style_document_scroll_test'], ['goog.dom', 'goog.style', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('style/stylescrollbartester.js', ['goog.styleScrollbarTester'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.asserts'], false); +goog.addDependency('style/transform.js', ['goog.style.transform'], ['goog.functions', 'goog.math.Coordinate', 'goog.math.Coordinate3', 'goog.style', 'goog.userAgent', 'goog.userAgent.product.isVersion'], false); +goog.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); +goog.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); +goog.addDependency('style/transition_test.js', ['goog.style.transitionTest'], ['goog.style', 'goog.style.transition', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.addDependency('test_module.js', ['goog.test_module'], ['goog.test_module_dep'], true); +goog.addDependency('test_module_dep.js', ['goog.test_module_dep'], [], true); +goog.addDependency('testing/asserts.js', ['goog.testing.JsUnitException', 'goog.testing.asserts', 'goog.testing.asserts.ArrayLike'], ['goog.testing.stacktrace'], false); +goog.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); +goog.addDependency('testing/async/mockcontrol.js', ['goog.testing.async.MockControl'], ['goog.asserts', 'goog.async.Deferred', 'goog.debug', 'goog.testing.asserts', 'goog.testing.mockmatchers.IgnoreArgument'], false); +goog.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); +goog.addDependency('testing/asynctestcase.js', ['goog.testing.AsyncTestCase', 'goog.testing.AsyncTestCase.ControlBreakingException'], ['goog.testing.TestCase', 'goog.testing.asserts'], false); +goog.addDependency('testing/asynctestcase_async_test.js', ['goog.testing.AsyncTestCaseAsyncTest'], ['goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false); +goog.addDependency('testing/asynctestcase_noasync_test.js', ['goog.testing.AsyncTestCaseSyncTest'], ['goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false); +goog.addDependency('testing/asynctestcase_test.js', ['goog.testing.AsyncTestCaseTest'], ['goog.debug.Error', 'goog.testing.AsyncTestCase', 'goog.testing.asserts', 'goog.testing.jsunit'], false); +goog.addDependency('testing/benchmark.js', ['goog.testing.benchmark'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTable', 'goog.testing.PerformanceTimer', 'goog.testing.TestCase'], false); +goog.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); +goog.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); +goog.addDependency('testing/deferredtestcase.js', ['goog.testing.DeferredTestCase'], ['goog.testing.AsyncTestCase', 'goog.testing.TestCase'], false); +goog.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); +goog.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); +goog.addDependency('testing/dom_test.js', ['goog.testing.domTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.addDependency('testing/editor/fieldmock.js', ['goog.testing.editor.FieldMock'], ['goog.dom', 'goog.dom.Range', 'goog.editor.Field', 'goog.testing.LooseMock', 'goog.testing.mockmatchers'], false); +goog.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); +goog.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); +goog.addDependency('testing/events/eventobserver.js', ['goog.testing.events.EventObserver'], ['goog.array'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('testing/events/matchers.js', ['goog.testing.events.EventMatcher'], ['goog.events.Event', 'goog.testing.mockmatchers.ArgumentMatcher'], false); +goog.addDependency('testing/events/matchers_test.js', ['goog.testing.events.EventMatcherTest'], ['goog.events.Event', 'goog.testing.events.EventMatcher', 'goog.testing.jsunit'], false); +goog.addDependency('testing/events/onlinehandler.js', ['goog.testing.events.OnlineHandler'], ['goog.events.EventTarget', 'goog.net.NetworkStatusMonitor'], false); +goog.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); +goog.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); +goog.addDependency('testing/expectedfailures_test.js', ['goog.testing.ExpectedFailuresTest'], ['goog.debug.Logger', 'goog.testing.ExpectedFailures', 'goog.testing.JsUnitException', 'goog.testing.jsunit'], false); +goog.addDependency('testing/fs/blob.js', ['goog.testing.fs.Blob'], ['goog.crypt.base64'], false); +goog.addDependency('testing/fs/blob_test.js', ['goog.testing.fs.BlobTest'], ['goog.testing.fs.Blob', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('testing/fs/file.js', ['goog.testing.fs.File'], ['goog.testing.fs.Blob'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('testing/fs/filesystem.js', ['goog.testing.fs.FileSystem'], ['goog.fs.FileSystem', 'goog.testing.fs.DirectoryEntry'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('testing/fs/fs_test.js', ['goog.testing.fsTest'], ['goog.testing.AsyncTestCase', 'goog.testing.fs', 'goog.testing.fs.Blob', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('testing/fs/progressevent.js', ['goog.testing.fs.ProgressEvent'], ['goog.events.Event'], false); +goog.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); +goog.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); +goog.addDependency('testing/graphics.js', ['goog.testing.graphics'], ['goog.graphics.Path', 'goog.testing.asserts'], false); +goog.addDependency('testing/i18n/asserts.js', ['goog.testing.i18n.asserts'], ['goog.testing.jsunit'], false); +goog.addDependency('testing/i18n/asserts_test.js', ['goog.testing.i18n.assertsTest'], ['goog.testing.ExpectedFailures', 'goog.testing.i18n.asserts'], false); +goog.addDependency('testing/jstdtestcaseadapter.js', ['goog.testing.JsTdTestCaseAdapter'], ['goog.async.run', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); +goog.addDependency('testing/jsunit.js', ['goog.testing.jsunit'], ['goog.dom.TagName', 'goog.testing.TestCase', 'goog.testing.TestRunner'], false); +goog.addDependency('testing/loosemock.js', ['goog.testing.LooseExpectationCollection', 'goog.testing.LooseMock'], ['goog.array', 'goog.structs.Map', 'goog.testing.Mock'], false); +goog.addDependency('testing/loosemock_test.js', ['goog.testing.LooseMockTest'], ['goog.testing.LooseMock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.mockmatchers'], false); +goog.addDependency('testing/messaging/mockmessagechannel.js', ['goog.testing.messaging.MockMessageChannel'], ['goog.messaging.AbstractChannel', 'goog.testing.asserts'], false); +goog.addDependency('testing/messaging/mockmessageevent.js', ['goog.testing.messaging.MockMessageEvent'], ['goog.events.BrowserEvent', 'goog.events.EventType', 'goog.testing.events.Event'], false); +goog.addDependency('testing/messaging/mockmessageport.js', ['goog.testing.messaging.MockMessagePort'], ['goog.events.EventTarget'], false); +goog.addDependency('testing/messaging/mockportnetwork.js', ['goog.testing.messaging.MockPortNetwork'], ['goog.messaging.PortNetwork', 'goog.testing.messaging.MockMessageChannel'], false); +goog.addDependency('testing/mock.js', ['goog.testing.Mock', 'goog.testing.MockExpectation'], ['goog.array', 'goog.object', 'goog.testing.JsUnitException', 'goog.testing.MockInterface', 'goog.testing.mockmatchers'], false); +goog.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); +goog.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); +goog.addDependency('testing/mockclassfactory_test.js', ['fake.BaseClass', 'fake.ChildClass', 'goog.testing.MockClassFactoryTest'], ['goog.testing', 'goog.testing.MockClassFactory', 'goog.testing.jsunit'], false); +goog.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); +goog.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); +goog.addDependency('testing/mockcontrol.js', ['goog.testing.MockControl'], ['goog.array', 'goog.testing', 'goog.testing.LooseMock', 'goog.testing.StrictMock'], false); +goog.addDependency('testing/mockcontrol_test.js', ['goog.testing.MockControlTest'], ['goog.testing.Mock', 'goog.testing.MockControl', 'goog.testing.jsunit'], false); +goog.addDependency('testing/mockinterface.js', ['goog.testing.MockInterface'], [], false); +goog.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); +goog.addDependency('testing/mockmatchers_test.js', ['goog.testing.mockmatchersTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher'], false); +goog.addDependency('testing/mockrandom.js', ['goog.testing.MockRandom'], ['goog.Disposable'], false); +goog.addDependency('testing/mockrandom_test.js', ['goog.testing.MockRandomTest'], ['goog.testing.MockRandom', 'goog.testing.jsunit'], false); +goog.addDependency('testing/mockrange.js', ['goog.testing.MockRange'], ['goog.dom.AbstractRange', 'goog.testing.LooseMock'], false); +goog.addDependency('testing/mockrange_test.js', ['goog.testing.MockRangeTest'], ['goog.testing.MockRange', 'goog.testing.jsunit'], false); +goog.addDependency('testing/mockstorage.js', ['goog.testing.MockStorage'], ['goog.structs.Map'], false); +goog.addDependency('testing/mockstorage_test.js', ['goog.testing.MockStorageTest'], ['goog.testing.MockStorage', 'goog.testing.jsunit'], false); +goog.addDependency('testing/mockuseragent.js', ['goog.testing.MockUserAgent'], ['goog.Disposable', 'goog.labs.userAgent.util', 'goog.testing.PropertyReplacer', 'goog.userAgent'], false); +goog.addDependency('testing/mockuseragent_test.js', ['goog.testing.MockUserAgentTest'], ['goog.dispose', 'goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('testing/net/xhriopool.js', ['goog.testing.net.XhrIoPool'], ['goog.net.XhrIoPool', 'goog.testing.net.XhrIo'], false); +goog.addDependency('testing/objectpropertystring.js', ['goog.testing.ObjectPropertyString'], [], false); +goog.addDependency('testing/performancetable.js', ['goog.testing.PerformanceTable'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTimer'], false); +goog.addDependency('testing/performancetimer.js', ['goog.testing.PerformanceTimer', 'goog.testing.PerformanceTimer.Task'], ['goog.array', 'goog.async.Deferred', 'goog.math'], false); +goog.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); +goog.addDependency('testing/propertyreplacer.js', ['goog.testing.PropertyReplacer'], ['goog.testing.ObjectPropertyString', 'goog.userAgent'], false); +goog.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); +goog.addDependency('testing/proto2/proto2.js', ['goog.testing.proto2'], ['goog.proto2.Message', 'goog.proto2.ObjectSerializer', 'goog.testing.asserts'], false); +goog.addDependency('testing/proto2/proto2_test.js', ['goog.testing.proto2Test'], ['goog.testing.jsunit', 'goog.testing.proto2', 'proto2.TestAllTypes'], false); +goog.addDependency('testing/pseudorandom.js', ['goog.testing.PseudoRandom'], ['goog.Disposable'], false); +goog.addDependency('testing/pseudorandom_test.js', ['goog.testing.PseudoRandomTest'], ['goog.testing.PseudoRandom', 'goog.testing.jsunit'], false); +goog.addDependency('testing/recordfunction.js', ['goog.testing.FunctionCall', 'goog.testing.recordConstructor', 'goog.testing.recordFunction'], ['goog.testing.asserts'], false); +goog.addDependency('testing/recordfunction_test.js', ['goog.testing.recordFunctionTest'], ['goog.functions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordConstructor', 'goog.testing.recordFunction'], false); +goog.addDependency('testing/shardingtestcase.js', ['goog.testing.ShardingTestCase'], ['goog.asserts', 'goog.testing.TestCase'], false); +goog.addDependency('testing/shardingtestcase_test.js', ['goog.testing.ShardingTestCaseTest'], ['goog.testing.ShardingTestCase', 'goog.testing.TestCase', 'goog.testing.asserts', 'goog.testing.jsunit'], false); +goog.addDependency('testing/singleton.js', ['goog.testing.singleton'], [], false); +goog.addDependency('testing/singleton_test.js', ['goog.testing.singletonTest'], ['goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.singleton'], false); +goog.addDependency('testing/stacktrace.js', ['goog.testing.stacktrace', 'goog.testing.stacktrace.Frame'], [], false); +goog.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); +goog.addDependency('testing/storage/fakemechanism.js', ['goog.testing.storage.FakeMechanism'], ['goog.storage.mechanism.IterableMechanism', 'goog.structs.Map'], false); +goog.addDependency('testing/strictmock.js', ['goog.testing.StrictMock'], ['goog.array', 'goog.testing.Mock'], false); +goog.addDependency('testing/strictmock_test.js', ['goog.testing.StrictMockTest'], ['goog.testing.StrictMock', 'goog.testing.jsunit'], false); +goog.addDependency('testing/style/layoutasserts.js', ['goog.testing.style.layoutasserts'], ['goog.style', 'goog.testing.asserts', 'goog.testing.style'], false); +goog.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); +goog.addDependency('testing/style/style.js', ['goog.testing.style'], ['goog.dom', 'goog.math.Rect', 'goog.style'], false); +goog.addDependency('testing/style/style_test.js', ['goog.testing.styleTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.jsunit', 'goog.testing.style'], false); +goog.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); +goog.addDependency('testing/testcase_test.js', ['goog.testing.TestCaseTest'], ['goog.Promise', 'goog.string', 'goog.testing.MockRandom', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); +goog.addDependency('testing/testqueue.js', ['goog.testing.TestQueue'], [], false); +goog.addDependency('testing/testrunner.js', ['goog.testing.TestRunner'], ['goog.dom.TagName', 'goog.testing.TestCase'], false); +goog.addDependency('testing/testsuite.js', ['goog.testing.testSuite'], ['goog.labs.testing.Environment', 'goog.testing.TestCase'], false); +goog.addDependency('testing/ui/rendererasserts.js', ['goog.testing.ui.rendererasserts'], ['goog.testing.asserts', 'goog.ui.ControlRenderer'], false); +goog.addDependency('testing/ui/rendererasserts_test.js', ['goog.testing.ui.rendererassertsTest'], ['goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.ControlRenderer'], false); +goog.addDependency('testing/ui/rendererharness.js', ['goog.testing.ui.RendererHarness'], ['goog.Disposable', 'goog.dom.NodeType', 'goog.testing.asserts', 'goog.testing.dom'], false); +goog.addDependency('testing/ui/style.js', ['goog.testing.ui.style'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.testing.asserts'], false); +goog.addDependency('testing/ui/style_test.js', ['goog.testing.ui.styleTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style'], false); +goog.addDependency('testing/watchers.js', ['goog.testing.watchers'], [], false); +goog.addDependency('timer/timer.js', ['goog.Timer'], ['goog.Promise', 'goog.events.EventTarget'], false); +goog.addDependency('timer/timer_test.js', ['goog.TimerTest'], ['goog.Promise', 'goog.Timer', 'goog.events', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('tweak/entries_test.js', ['goog.tweak.BaseEntryTest'], ['goog.testing.MockControl', 'goog.testing.jsunit', 'goog.tweak.testhelpers'], false); +goog.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); +goog.addDependency('tweak/registry_test.js', ['goog.tweak.RegistryTest'], ['goog.asserts.AssertionError', 'goog.testing.jsunit', 'goog.tweak', 'goog.tweak.testhelpers'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/ac/arraymatcher.js', ['goog.ui.ac.ArrayMatcher'], ['goog.string'], false); +goog.addDependency('ui/ac/arraymatcher_test.js', ['goog.ui.ac.ArrayMatcherTest'], ['goog.testing.jsunit', 'goog.ui.ac.ArrayMatcher'], false); +goog.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); +goog.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); +goog.addDependency('ui/ac/cachingmatcher.js', ['goog.ui.ac.CachingMatcher'], ['goog.array', 'goog.async.Throttle', 'goog.ui.ac.ArrayMatcher', 'goog.ui.ac.RenderOptions'], false); +goog.addDependency('ui/ac/cachingmatcher_test.js', ['goog.ui.ac.CachingMatcherTest'], ['goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.ac.CachingMatcher'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/ac/remotearraymatcher.js', ['goog.ui.ac.RemoteArrayMatcher'], ['goog.Disposable', 'goog.Uri', 'goog.events', 'goog.json', 'goog.net.EventType', 'goog.net.XhrIo'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/ac/renderoptions.js', ['goog.ui.ac.RenderOptions'], [], false); +goog.addDependency('ui/ac/richinputhandler.js', ['goog.ui.ac.RichInputHandler'], ['goog.ui.ac.InputHandler'], false); +goog.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); +goog.addDependency('ui/ac/richremotearraymatcher.js', ['goog.ui.ac.RichRemoteArrayMatcher'], ['goog.dom.safe', 'goog.html.legacyconversions', 'goog.json', 'goog.ui.ac.RemoteArrayMatcher'], false); +goog.addDependency('ui/activitymonitor.js', ['goog.ui.ActivityMonitor'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/bidiinput_test.js', ['goog.ui.BidiInputTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.BidiInput'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/buttonside.js', ['goog.ui.ButtonSide'], [], false); +goog.addDependency('ui/charcounter.js', ['goog.ui.CharCounter', 'goog.ui.CharCounter.Display'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.InputHandler'], false); +goog.addDependency('ui/charcounter_test.js', ['goog.ui.CharCounterTest'], ['goog.dom', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.ui.CharCounter', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/checkboxmenuitem.js', ['goog.ui.CheckBoxMenuItem'], ['goog.ui.MenuItem', 'goog.ui.registry'], false); +goog.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); +goog.addDependency('ui/colorbutton.js', ['goog.ui.ColorButton'], ['goog.ui.Button', 'goog.ui.ColorButtonRenderer', 'goog.ui.registry'], false); +goog.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); +goog.addDependency('ui/colorbuttonrenderer.js', ['goog.ui.ColorButtonRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.functions', 'goog.ui.ColorMenuButtonRenderer'], false); +goog.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); +goog.addDependency('ui/colormenubuttonrenderer.js', ['goog.ui.ColorMenuButtonRenderer'], ['goog.asserts', 'goog.color', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.MenuButtonRenderer', 'goog.userAgent'], false); +goog.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); +goog.addDependency('ui/colorpalette.js', ['goog.ui.ColorPalette'], ['goog.array', 'goog.color', 'goog.dom.TagName', 'goog.style', 'goog.ui.Palette', 'goog.ui.PaletteRenderer'], false); +goog.addDependency('ui/colorpalette_test.js', ['goog.ui.ColorPaletteTest'], ['goog.color', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.ColorPalette'], false); +goog.addDependency('ui/colorpicker.js', ['goog.ui.ColorPicker', 'goog.ui.ColorPicker.EventType'], ['goog.ui.ColorPalette', 'goog.ui.Component'], false); +goog.addDependency('ui/colorsplitbehavior.js', ['goog.ui.ColorSplitBehavior'], ['goog.ui.ColorMenuButton', 'goog.ui.SplitBehavior'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/containerscroller.js', ['goog.ui.ContainerScroller'], ['goog.Disposable', 'goog.Timer', 'goog.events.EventHandler', 'goog.style', 'goog.ui.Component', 'goog.ui.Container'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/controlcontent.js', ['goog.ui.ControlContent'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/cssnames.js', ['goog.ui.INLINE_BLOCK_CLASSNAME'], [], false); +goog.addDependency('ui/custombutton.js', ['goog.ui.CustomButton'], ['goog.ui.Button', 'goog.ui.CustomButtonRenderer', 'goog.ui.registry'], false); +goog.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); +goog.addDependency('ui/customcolorpalette.js', ['goog.ui.CustomColorPalette'], ['goog.color', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.ColorPalette', 'goog.ui.Component'], false); +goog.addDependency('ui/customcolorpalette_test.js', ['goog.ui.CustomColorPaletteTest'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.ui.CustomColorPalette'], false); +goog.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); +goog.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); +goog.addDependency('ui/datepickerrenderer.js', ['goog.ui.DatePickerRenderer'], [], false); +goog.addDependency('ui/decorate.js', ['goog.ui.decorate'], ['goog.ui.registry'], false); +goog.addDependency('ui/decorate_test.js', ['goog.ui.decorateTest'], ['goog.testing.jsunit', 'goog.ui.decorate', 'goog.ui.registry'], false); +goog.addDependency('ui/defaultdatepickerrenderer.js', ['goog.ui.DefaultDatePickerRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.ui.DatePickerRenderer'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/drilldownrow_test.js', ['goog.ui.DrilldownRowTest'], ['goog.dom', 'goog.dom.TagName', 'goog.html.SafeHtml', 'goog.testing.jsunit', 'goog.ui.DrilldownRow'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/editor/messages.js', ['goog.ui.editor.messages'], ['goog.html.uncheckedconversions', 'goog.string.Const'], false); +goog.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); +goog.addDependency('ui/editor/toolbarcontroller.js', ['goog.ui.editor.ToolbarController'], ['goog.editor.Field', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.ui.Component'], false); +goog.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); +goog.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); +goog.addDependency('ui/emoji/emoji.js', ['goog.ui.emoji.Emoji'], [], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/emoji/popupemojipicker_test.js', ['goog.ui.emoji.PopupEmojiPickerTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.emoji.PopupEmojiPicker'], false); +goog.addDependency('ui/emoji/progressiveemojipaletterenderer.js', ['goog.ui.emoji.ProgressiveEmojiPaletteRenderer'], ['goog.dom.TagName', 'goog.style', 'goog.ui.emoji.EmojiPaletteRenderer'], false); +goog.addDependency('ui/emoji/spriteinfo.js', ['goog.ui.emoji.SpriteInfo'], [], false); +goog.addDependency('ui/emoji/spriteinfo_test.js', ['goog.ui.emoji.SpriteInfoTest'], ['goog.testing.jsunit', 'goog.ui.emoji.SpriteInfo'], false); +goog.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); +goog.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); +goog.addDependency('ui/filterobservingmenuitem.js', ['goog.ui.FilterObservingMenuItem'], ['goog.ui.FilterObservingMenuItemRenderer', 'goog.ui.MenuItem', 'goog.ui.registry'], false); +goog.addDependency('ui/filterobservingmenuitemrenderer.js', ['goog.ui.FilterObservingMenuItemRenderer'], ['goog.ui.MenuItemRenderer'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/gaugetheme.js', ['goog.ui.GaugeTheme'], ['goog.graphics.LinearGradient', 'goog.graphics.SolidFill', 'goog.graphics.Stroke'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/idgenerator.js', ['goog.ui.IdGenerator'], [], false); +goog.addDependency('ui/idletimer.js', ['goog.ui.IdleTimer'], ['goog.Timer', 'goog.events', 'goog.events.EventTarget', 'goog.structs.Set', 'goog.ui.ActivityMonitor'], false); +goog.addDependency('ui/idletimer_test.js', ['goog.ui.IdleTimerTest'], ['goog.events', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.IdleTimer', 'goog.ui.MockActivityMonitor'], false); +goog.addDependency('ui/iframemask.js', ['goog.ui.IframeMask'], ['goog.Disposable', 'goog.Timer', 'goog.dom', 'goog.dom.iframe', 'goog.events.EventHandler', 'goog.style'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/inputdatepicker_test.js', ['goog.ui.InputDatePickerTest'], ['goog.dom', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeParse', 'goog.testing.jsunit', 'goog.ui.InputDatePicker'], false); +goog.addDependency('ui/itemevent.js', ['goog.ui.ItemEvent'], ['goog.events.Event'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/linkbuttonrenderer.js', ['goog.ui.LinkButtonRenderer'], ['goog.ui.Button', 'goog.ui.FlatButtonRenderer', 'goog.ui.registry'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/media/mediamodel_test.js', ['goog.ui.media.MediaModelTest'], ['goog.testing.jsunit', 'goog.ui.media.MediaModel'], false); +goog.addDependency('ui/media/mp3.js', ['goog.ui.media.Mp3'], ['goog.string', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], false); +goog.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); +goog.addDependency('ui/media/photo.js', ['goog.ui.media.Photo'], ['goog.dom.TagName', 'goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/menubar.js', ['goog.ui.menuBar'], ['goog.ui.Container', 'goog.ui.MenuBarRenderer'], false); +goog.addDependency('ui/menubardecorator.js', ['goog.ui.menuBarDecorator'], ['goog.ui.MenuBarRenderer', 'goog.ui.menuBar', 'goog.ui.registry'], false); +goog.addDependency('ui/menubarrenderer.js', ['goog.ui.MenuBarRenderer'], ['goog.a11y.aria.Role', 'goog.ui.Container', 'goog.ui.ContainerRenderer'], false); +goog.addDependency('ui/menubase.js', ['goog.ui.MenuBase'], ['goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.ui.Popup'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/menuheader.js', ['goog.ui.MenuHeader'], ['goog.ui.Component', 'goog.ui.Control', 'goog.ui.MenuHeaderRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/menuheaderrenderer.js', ['goog.ui.MenuHeaderRenderer'], ['goog.ui.ControlRenderer'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/menuseparator.js', ['goog.ui.MenuSeparator'], ['goog.ui.MenuSeparatorRenderer', 'goog.ui.Separator', 'goog.ui.registry'], false); +goog.addDependency('ui/menuseparatorrenderer.js', ['goog.ui.MenuSeparatorRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.ControlRenderer'], false); +goog.addDependency('ui/menuseparatorrenderer_test.js', ['goog.ui.MenuSeparatorRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.MenuSeparator', 'goog.ui.MenuSeparatorRenderer'], false); +goog.addDependency('ui/mockactivitymonitor.js', ['goog.ui.MockActivityMonitor'], ['goog.events.EventType', 'goog.ui.ActivityMonitor'], false); +goog.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); +goog.addDependency('ui/modalariavisibilityhelper.js', ['goog.ui.ModalAriaVisibilityHelper'], ['goog.a11y.aria', 'goog.a11y.aria.State'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/option.js', ['goog.ui.Option'], ['goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.registry'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/popup.js', ['goog.ui.Popup'], ['goog.math.Box', 'goog.positioning.Corner', 'goog.style', 'goog.ui.PopupBase'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/rangemodel.js', ['goog.ui.RangeModel'], ['goog.events.EventTarget', 'goog.ui.Component'], false); +goog.addDependency('ui/rangemodel_test.js', ['goog.ui.RangeModelTest'], ['goog.testing.jsunit', 'goog.ui.RangeModel'], false); +goog.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); +goog.addDependency('ui/registry.js', ['goog.ui.registry'], ['goog.asserts', 'goog.dom.classlist'], false); +goog.addDependency('ui/registry_test.js', ['goog.ui.registryTest'], ['goog.object', 'goog.testing.jsunit', 'goog.ui.registry'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/roundedpanel_test.js', ['goog.ui.RoundedPanelTest'], ['goog.testing.jsunit', 'goog.ui.CssRoundedPanel', 'goog.ui.GraphicsRoundedPanel', 'goog.ui.RoundedPanel', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.addDependency('ui/scrollfloater_test.js', ['goog.ui.ScrollFloaterTest'], ['goog.dom', 'goog.events', 'goog.style', 'goog.testing.jsunit', 'goog.ui.ScrollFloater'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/selectionmodel.js', ['goog.ui.SelectionModel'], ['goog.array', 'goog.events.EventTarget', 'goog.events.EventType'], false); +goog.addDependency('ui/selectionmodel_test.js', ['goog.ui.SelectionModelTest'], ['goog.array', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.SelectionModel'], false); +goog.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); +goog.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); +goog.addDependency('ui/serverchart_test.js', ['goog.ui.ServerChartTest'], ['goog.Uri', 'goog.events', 'goog.testing.jsunit', 'goog.ui.ServerChart'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/style/app/primaryactionbuttonrenderer.js', ['goog.ui.style.app.PrimaryActionButtonRenderer'], ['goog.ui.Button', 'goog.ui.registry', 'goog.ui.style.app.ButtonRenderer'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/tab.js', ['goog.ui.Tab'], ['goog.ui.Component', 'goog.ui.Control', 'goog.ui.TabRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/tab_test.js', ['goog.ui.TabTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Tab', 'goog.ui.TabRenderer'], false); +goog.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); +goog.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); +goog.addDependency('ui/tabbarrenderer.js', ['goog.ui.TabBarRenderer'], ['goog.a11y.aria.Role', 'goog.object', 'goog.ui.ContainerRenderer'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/tabpane_test.js', ['goog.ui.TabPaneTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.TabPane'], false); +goog.addDependency('ui/tabrenderer.js', ['goog.ui.TabRenderer'], ['goog.a11y.aria.Role', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/textarearenderer.js', ['goog.ui.TextareaRenderer'], ['goog.dom.TagName', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false); +goog.addDependency('ui/togglebutton.js', ['goog.ui.ToggleButton'], ['goog.ui.Button', 'goog.ui.Component', 'goog.ui.CustomButtonRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/toolbar.js', ['goog.ui.Toolbar'], ['goog.ui.Container', 'goog.ui.ToolbarRenderer'], false); +goog.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); +goog.addDependency('ui/toolbarbutton.js', ['goog.ui.ToolbarButton'], ['goog.ui.Button', 'goog.ui.ToolbarButtonRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/toolbarbuttonrenderer.js', ['goog.ui.ToolbarButtonRenderer'], ['goog.ui.CustomButtonRenderer'], false); +goog.addDependency('ui/toolbarcolormenubutton.js', ['goog.ui.ToolbarColorMenuButton'], ['goog.ui.ColorMenuButton', 'goog.ui.ToolbarColorMenuButtonRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/toolbarcolormenubuttonrenderer.js', ['goog.ui.ToolbarColorMenuButtonRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.ui.ColorMenuButtonRenderer', 'goog.ui.MenuButtonRenderer', 'goog.ui.ToolbarMenuButtonRenderer'], false); +goog.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); +goog.addDependency('ui/toolbarmenubutton.js', ['goog.ui.ToolbarMenuButton'], ['goog.ui.MenuButton', 'goog.ui.ToolbarMenuButtonRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/toolbarmenubuttonrenderer.js', ['goog.ui.ToolbarMenuButtonRenderer'], ['goog.ui.MenuButtonRenderer'], false); +goog.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); +goog.addDependency('ui/toolbarselect.js', ['goog.ui.ToolbarSelect'], ['goog.ui.Select', 'goog.ui.ToolbarMenuButtonRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/toolbarseparator.js', ['goog.ui.ToolbarSeparator'], ['goog.ui.Separator', 'goog.ui.ToolbarSeparatorRenderer', 'goog.ui.registry'], false); +goog.addDependency('ui/toolbarseparatorrenderer.js', ['goog.ui.ToolbarSeparatorRenderer'], ['goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.MenuSeparatorRenderer'], false); +goog.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); +goog.addDependency('ui/toolbartogglebutton.js', ['goog.ui.ToolbarToggleButton'], ['goog.ui.ToggleButton', 'goog.ui.ToolbarButtonRenderer', 'goog.ui.registry'], false); +goog.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); +goog.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); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/tree/treecontrol_test.js', ['goog.ui.tree.TreeControlTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.tree.TreeControl'], false); +goog.addDependency('ui/tree/treenode.js', ['goog.ui.tree.TreeNode'], ['goog.ui.tree.BaseNode'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('ui/tristatemenuitemrenderer.js', ['goog.ui.TriStateMenuItemRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.ui.MenuItemRenderer'], false); +goog.addDependency('ui/twothumbslider.js', ['goog.ui.TwoThumbSlider'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.dom.TagName', 'goog.ui.SliderBase'], false); +goog.addDependency('ui/twothumbslider_test.js', ['goog.ui.TwoThumbSliderTest'], ['goog.testing.jsunit', 'goog.ui.SliderBase', 'goog.ui.TwoThumbSlider'], false); +goog.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); +goog.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); +goog.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); +goog.addDependency('uri/uri_test.js', ['goog.UriTest'], ['goog.Uri', 'goog.testing.jsunit'], false); +goog.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); +goog.addDependency('uri/utils_test.js', ['goog.uri.utilsTest'], ['goog.functions', 'goog.string', 'goog.testing.jsunit', 'goog.uri.utils'], false); +goog.addDependency('useragent/adobereader.js', ['goog.userAgent.adobeReader'], ['goog.string', 'goog.userAgent'], false); +goog.addDependency('useragent/adobereader_test.js', ['goog.userAgent.adobeReaderTest'], ['goog.testing.jsunit', 'goog.userAgent.adobeReader'], false); +goog.addDependency('useragent/flash.js', ['goog.userAgent.flash'], ['goog.string'], false); +goog.addDependency('useragent/flash_test.js', ['goog.userAgent.flashTest'], ['goog.testing.jsunit', 'goog.userAgent.flash'], false); +goog.addDependency('useragent/iphoto.js', ['goog.userAgent.iphoto'], ['goog.string', 'goog.userAgent'], false); +goog.addDependency('useragent/jscript.js', ['goog.userAgent.jscript'], ['goog.string'], false); +goog.addDependency('useragent/jscript_test.js', ['goog.userAgent.jscriptTest'], ['goog.testing.jsunit', 'goog.userAgent.jscript'], false); +goog.addDependency('useragent/keyboard.js', ['goog.userAgent.keyboard'], ['goog.labs.userAgent.platform'], false); +goog.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); +goog.addDependency('useragent/platform.js', ['goog.userAgent.platform'], ['goog.string', 'goog.userAgent'], false); +goog.addDependency('useragent/platform_test.js', ['goog.userAgent.platformTest'], ['goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.platform', 'goog.userAgentTestUtil'], false); +goog.addDependency('useragent/product.js', ['goog.userAgent.product'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.platform', 'goog.userAgent'], false); +goog.addDependency('useragent/product_isversion.js', ['goog.userAgent.product.isVersion'], ['goog.labs.userAgent.platform', 'goog.string', 'goog.userAgent', 'goog.userAgent.product'], false); +goog.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); +goog.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); +goog.addDependency('useragent/useragent_quirks_test.js', ['goog.userAgentQuirksTest'], ['goog.testing.jsunit', 'goog.userAgent'], false); +goog.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); +goog.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); +goog.addDependency('vec/float32array.js', ['goog.vec.Float32Array'], [], false); +goog.addDependency('vec/float64array.js', ['goog.vec.Float64Array'], [], false); +goog.addDependency('vec/mat3.js', ['goog.vec.Mat3'], ['goog.vec'], false); +goog.addDependency('vec/mat3d.js', ['goog.vec.mat3d', 'goog.vec.mat3d.Type'], ['goog.vec'], false); +goog.addDependency('vec/mat3f.js', ['goog.vec.mat3f', 'goog.vec.mat3f.Type'], ['goog.vec'], false); +goog.addDependency('vec/mat4.js', ['goog.vec.Mat4'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false); +goog.addDependency('vec/mat4d.js', ['goog.vec.mat4d', 'goog.vec.mat4d.Type'], ['goog.vec', 'goog.vec.vec3d', 'goog.vec.vec4d'], false); +goog.addDependency('vec/mat4f.js', ['goog.vec.mat4f', 'goog.vec.mat4f.Type'], ['goog.vec', 'goog.vec.vec3f', 'goog.vec.vec4f'], false); +goog.addDependency('vec/matrix3.js', ['goog.vec.Matrix3'], [], false); +goog.addDependency('vec/matrix4.js', ['goog.vec.Matrix4'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false); +goog.addDependency('vec/quaternion.js', ['goog.vec.Quaternion'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false); +goog.addDependency('vec/ray.js', ['goog.vec.Ray'], ['goog.vec.Vec3'], false); +goog.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); +goog.addDependency('vec/vec2.js', ['goog.vec.Vec2'], ['goog.vec'], false); +goog.addDependency('vec/vec2d.js', ['goog.vec.vec2d', 'goog.vec.vec2d.Type'], ['goog.vec'], false); +goog.addDependency('vec/vec2f.js', ['goog.vec.vec2f', 'goog.vec.vec2f.Type'], ['goog.vec'], false); +goog.addDependency('vec/vec3.js', ['goog.vec.Vec3'], ['goog.vec'], false); +goog.addDependency('vec/vec3d.js', ['goog.vec.vec3d', 'goog.vec.vec3d.Type'], ['goog.vec'], false); +goog.addDependency('vec/vec3f.js', ['goog.vec.vec3f', 'goog.vec.vec3f.Type'], ['goog.vec'], false); +goog.addDependency('vec/vec4.js', ['goog.vec.Vec4'], ['goog.vec'], false); +goog.addDependency('vec/vec4d.js', ['goog.vec.vec4d', 'goog.vec.vec4d.Type'], ['goog.vec'], false); +goog.addDependency('vec/vec4f.js', ['goog.vec.vec4f', 'goog.vec.vec4f.Type'], ['goog.vec'], false); +goog.addDependency('webgl/webgl.js', ['goog.webgl'], [], false); +goog.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); +goog.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); diff --git a/libs/openlayers3/ol.css b/libs/openlayers3/ol.css new file mode 100644 index 0000000..e22b6f4 --- /dev/null +++ b/libs/openlayers3/ol.css @@ -0,0 +1 @@ +.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)} \ No newline at end of file diff --git a/libs/openlayers3/ol.js b/libs/openlayers3/ol.js new file mode 100644 index 0000000..bfca885 --- /dev/null +++ b/libs/openlayers3/ol.js @@ -0,0 +1,1017 @@ +// OpenLayers 3. See http://openlayers.org/ +// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md +// Version: v3.11.2 + +(function (root, factory) { + if (typeof exports === "object") { + module.exports = factory(); + } else if (typeof define === "function" && define.amd) { + define([], factory); + } else { + root.ol = factory(); + } +}(this, function () { + var OPENLAYERS = {}; + 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}} +function 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"; +else 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; +function pa(b,c,d){return b.call.apply(b.bind,arguments)}function qa(b,c,d){if(!b)throw Error();if(2")&&(b=b.replace(Ia,">"));-1!=b.indexOf('"')&&(b=b.replace(Ja,"""));-1!=b.indexOf("'")&&(b=b.replace(La,"'"));-1!=b.indexOf("\x00")&&(b=b.replace(Ma,"�"));return b}var Ga=/&/g,Ha=//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)}; +function 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} +function 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&&hc?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);1d?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=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;dc?1:bd)for(d=1;dg?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} +function 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(" "); +function Xb(b,c){for(var d,e,f=1;fparseFloat(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? +f=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= +b.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}; +Ac.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);-1f.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>>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)}; +l.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&&hd*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)} +function 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;ce&&(k=k|4);hf&&(k|=2);0===k&&(k=1);return k}function Od(){return[Infinity,Infinity,-Infinity,-Infinity]} +function 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[2]&&(b[2]=c[2]);c[1]b[3]&&(b[3]=c[3]);return b} +function Pd(b,c){c[0]b[2]&&(b[2]=c[0]);c[1]b[3]&&(b[3]=c[1])}function ae(b,c,d,e,f){for(;dg;++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[0]&&b[1]<=c[3]&&b[3]>=c[1]}function je(b){return b[2]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().lengthf&&(f=g);g=k;h=m}return f}function mf(b,c,d,e,f){var g,h;g=0;for(h=d.length;gk){for(;ct&&(n=p,t=v)}t>f&&(m[(n-c)/e]=1,r+eG&&EaG)&&(0>la&&Lla)||(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(eg!=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;cq&&(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=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} +function 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;cb||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;gthis.i)}return void 0!==b?this.f+b:b}; +l.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;tb?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>=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");g=g.join("")}g=f.createElement(g);h&&(ia(h)?g.className=h:ga(h)?g.className=h.join(" "):Eg(g,h));2=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}; +l.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}; +l.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}; +l.distance=function(b){var c=b.xb.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), +Math.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}; +function Gh(b,c,d,e){return c[0]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", +this.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); +function 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;dla.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= +Kg("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; +l.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: +!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&&(0Math.PI&&(d-=2*Math.PI),b.Ma(ag({rotation:d,duration:this.i,easing:Vf}))),c.te(0))}}; +function 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, +{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&&(02*this.b&&si(this),!0):!1};function si(b){if(b.b!=b.a.length){for(var c=0,d=0;c=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} +function 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; +var 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&∾ +Ai.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}; +Ai.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)}; +function 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); +Ii.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,100d&&(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}; +function 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: +null;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} +function 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")} +var 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= +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]="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")} +function 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=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; +l.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)}}; +l.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)}; +l.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}; +function 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} +function 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=c.length){var f=[],g,h,k;for(g=0;g=b.minResolution&&cb.f&&(b.f=e.f),e.cb.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)]} +function 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= +k;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; +l.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}; +l.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}; +l.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")}; +yk.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}; +xk.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)}; +function Ck(){var b=xk.Yb();if(32q[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}}}; +l.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; +l.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}; +function Hk(b,c){for(var d=b.a,e=b.c,f=d.length,g=d[c],h=e[c],k=c;c>1;){var m=2*c+1,n=2*c+2,m=nc;){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>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.fd.a.length)d=!1;else{var e=Date.now()-d.j,f=d.a.length-3;if(d.a[f+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(); +return!1}this.f=null;return!0}function el(b){if(0this.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} +function 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)} +function 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, +duration: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()}; +l.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;cf;++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^ +c))+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+ +(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| +h>>>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| +h>>>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| +h>>>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^ +c^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; +g=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+ +(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; +d=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} +function $l(b,c){var d;ca(d)||(d=c.length);for(var e=d-b.c,f=b.g,g=b.b,h=0;hc.b?c.c:2*c.c)-c.b);b[0]=128;for(var d=1;dd;++d)for(var f=0;32>f;f+=8)b[e++]=c.a[d]>>> +f&255;if(8192>=b.length)c=String.fromCharCode.apply(null,b);else for(c="",d=0;dthis.g&&(this.g=this.b.lineWidth,this.f=null)}; +function 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); +function 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;hthis.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)}; +function 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); +Qm.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, +f.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? +(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)}}; +Qm.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; +var 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()} +function 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(0za&&(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;nthis.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])q,t=!1;if(0b.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]})}} +function 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}; +function 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} +kn.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))}}; +function 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}; +l.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;0d?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=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;){600h-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(0f(b[h],g);)h++;for(;0this.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, +f)},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=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?0B||this.b[1]> +A)?(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(), +L=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;lam[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)}; +Sp.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;eG&&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= +O=void 0;O=0;for(Ea=G.length;O=n;){x=b.b[g];d=b.u[g]; +e=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} +function 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;bc[0]||c[0]>f[0]||0> +c[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),0e?c[0]=e-d:0>f&&(c[0]= +Math.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)}; +function 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)} +function 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"== +g)""!==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, +interactions: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; +l.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())}; +function 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)} +function 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? +(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}; +l.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")}; +function 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)}; +function 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): +1609.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= +!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;fd.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, +d.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)}; +function 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)}; +l.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")}; +l.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} +function 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>1,p=h(d,g[n]),0r?(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]= +g,f[1]=h,f):[g,h]}function Xr(b,c,d,e,f,g){if(d==c)return null;if(f>1,fb||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}; +l.rd=function(){var b=this.v,c=this.g,d=this.b,e=[],f=0,g,h;g=0;for(h=c.length;gb||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;fb||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;eb||0!==this.i&&bc)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)} +function 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>4&15).toString(16)+(b&15).toString(16)} +var 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}; +l.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;ee;++e){var f=parseInt(d[e],10).toString(16);d[e]=1==f.length?"0"+f:f}Es(b,d.join(""))} +function 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>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;for(x+=f;0>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)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< +g||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)}, +Nf: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=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>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* +(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(cf?g<<7*f:g* +Math.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>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= +-Infinity;b.ca>3),f--,1===e||2===e)g+=b.Fd(),h+=b.Fd(),gz&&(z=g),hA&&(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): +3===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>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)}); +zp=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"}; +Ov.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;nf?~(f<<1):f<<1;d="";e=0;for(f=b.length;e>=5;h=g+63;k+=String.fromCharCode(h);d+=k}return d} +function sw(b,c){var d=c?c:1E5,e=[],f=0,g=0,h,k;h=0;for(k=b.length;hm?(e.push(f),g=f=0):g+=5}f=0;for(g=e.length;f>1):h>>1;f=0;for(g=e.length;f=b||"."==b&&!(void 0!==c&&c)} +function 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(); +d.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}; +function 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));}; +l.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));}; +l.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} +function 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}} +function kx(b,c){return Q([],lx,b,c)} +var 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), +MaxHeight: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), +EX_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"), +units: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"), +d}),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); +e.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= +P(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); +Ax.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=c[0]||b[1]<=c[1]&&b[3]>=c[1]?!0:de(b,this.ng,this)):!1}; +l.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;dg[2])&&(k*=Math.ceil((g[0]-d)/k),e=[e[0]+ +k,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=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)} +function 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])})} +function 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&& +(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}; +function 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;cb.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;gb.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)}; +l.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} +l.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)}; +function 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); +function 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, +Polygon: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)))} +function 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)}; +l.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;fd?h[1]:h[0]);ez(b,k);d={};d[w(h)]=!0;c=1;for(m=g.length;cd&&(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); +function 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: +kz(),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]}; +function 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),0f?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)} +function 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} +function 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))}} +function 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= +e(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")}; +l.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=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]), +d[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}; +function 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)} +xz.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;0Terms of Use'}); +Oz.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= +f;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(), +c=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()}; +function 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;gk*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; +l.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}; +l.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, +b,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}; +function 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}; +l.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:'© OpenStreetMap 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); +var dA=new mg({html:'Tiles Courtesy of MapQuest'}),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= +b[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;nthis.bj;)this.Yc.shift().$c(null,null)};m.prototype.eg=function(){if(0===this.Qd&&0Stamen Design, under CC BY 3.0.'}),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}; +qA.prototype.Pb=function(b,c,d){b=qA.da.Pb.call(this,b,c,d);return 1==c?b:nd(b,c,this.b)}; +qA.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]<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;ethis.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}}; +function 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=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- +d},LA(this,b,e,f)),k;return null};function LA(b,c,d,e){c=[c,1];0f&&(f=0);g=d.TileMatrixSetLink[f].TileMatrixSet; +var 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&& +(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 0) { + this.content[0] = end; + this.sinkDown(0); + } + return result; + }, + + remove: function(node) { + var length = this.content.length; + // To remove a value, we must search through the array to find + // it. + for (var i = 0; i < length; i++) { + if (this.content[i] != node) continue; + // When it is found, the process seen in 'pop' is repeated + // to fill up the hole. + var end = this.content.pop(); + // If the element we popped was the one we needed to remove, + // we're done. + if (i == length - 1) break; + // Otherwise, we replace the removed element with the popped + // one, and allow it to float up or sink down as appropriate. + this.content[i] = end; + this.bubbleUp(i); + this.sinkDown(i); + break; + } + }, + + size: function() { + return this.content.length; + }, + + bubbleUp: function(n) { + // Fetch the element that has to be moved. + var element = this.content[n], score = this.scoreFunction(element); + // When at 0, an element can not go up any further. + while (n > 0) { + // Compute the parent element's index, and fetch it. + var parentN = Math.floor((n + 1) / 2) - 1, + parent = this.content[parentN]; + // If the parent has a lesser score, things are in order and we + // are done. + if (score >= this.scoreFunction(parent)) + break; + + // Otherwise, swap the parent with the current element and + // continue. + this.content[parentN] = element; + this.content[n] = parent; + n = parentN; + } + }, + + sinkDown: function(n) { + // Look up the target element and its score. + var length = this.content.length, + element = this.content[n], + elemScore = this.scoreFunction(element); + + while(true) { + // Compute the indices of the child elements. + var child2N = (n + 1) * 2, child1N = child2N - 1; + // This is used to store the new position of the element, + // if any. + var swap = null; + // If the first child exists (is inside the array)... + if (child1N < length) { + // Look it up and compute its score. + var child1 = this.content[child1N], + child1Score = this.scoreFunction(child1); + // If the score is less than our element's, we need to swap. + if (child1Score < elemScore) + swap = child1N; + } + // Do the same checks for the other child. + if (child2N < length) { + var child2 = this.content[child2N], + child2Score = this.scoreFunction(child2); + if (child2Score < (swap == null ? elemScore : child1Score)) + swap = child2N; + } + + // No need to swap further, we are done. + if (swap == null) break; + + // Otherwise, swap and continue. + this.content[n] = this.content[swap]; + this.content[swap] = element; + n = swap; + } + } +}; diff --git a/libs/other/dat.gui.min.js b/libs/other/dat.gui.min.js new file mode 100644 index 0000000..e4209ba --- /dev/null +++ b/libs/other/dat.gui.min.js @@ -0,0 +1,91 @@ +/*! + * dat-gui JavaScript Controller Library + * http://code.google.com/p/dat-gui + * Copyright 2011 Data Arts Team, Google Creative Lab + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + */ +var dat=dat||{};dat.gui=dat.gui||{};dat.utils=dat.utils||{};dat.controllers=dat.controllers||{};dat.dom=dat.dom||{};dat.color=dat.color||{};dat.utils.css=function(){return{load:function(e,a){a=a||document;var b=a.createElement("link");b.type="text/css";b.rel="stylesheet";b.href=e;a.getElementsByTagName("head")[0].appendChild(b)},inject:function(e,a){a=a||document;var b=document.createElement("style");b.type="text/css";b.innerHTML=e;a.getElementsByTagName("head")[0].appendChild(b)}}}(); +dat.utils.common=function(){var e=Array.prototype.forEach,a=Array.prototype.slice;return{BREAK:{},extend:function(b){this.each(a.call(arguments,1),function(a){for(var f in a)this.isUndefined(a[f])||(b[f]=a[f])},this);return b},defaults:function(b){this.each(a.call(arguments,1),function(a){for(var f in a)this.isUndefined(b[f])&&(b[f]=a[f])},this);return b},compose:function(){var b=a.call(arguments);return function(){for(var d=a.call(arguments),f=b.length-1;0<=f;f--)d=[b[f].apply(this,d)];return d[0]}}, +each:function(a,d,f){if(e&&a.forEach===e)a.forEach(d,f);else if(a.length===a.length+0)for(var c=0,p=a.length;cthis.__max&&(a=this.__max);void 0!==this.__step&&0!=a%this.__step&&(a=Math.round(a/this.__step)*this.__step);return b.superclass.prototype.setValue.call(this,a)},min:function(a){this.__min=a;return this},max:function(a){this.__max=a;return this},step:function(a){this.__step=a;return this}});return b}(dat.controllers.Controller,dat.utils.common); +dat.controllers.NumberControllerBox=function(e,a,b){var d=function(f,c,e){function k(){var a=parseFloat(n.__input.value);b.isNaN(a)||n.setValue(a)}function l(a){var c=r-a.clientY;n.setValue(n.getValue()+c*n.__impliedStep);r=a.clientY}function q(){a.unbind(window,"mousemove",l);a.unbind(window,"mouseup",q)}this.__truncationSuspended=!1;d.superclass.call(this,f,c,e);var n=this,r;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"change",k);a.bind(this.__input, +"blur",function(){k();n.__onFinishChange&&n.__onFinishChange.call(n,n.getValue())});a.bind(this.__input,"mousedown",function(c){a.bind(window,"mousemove",l);a.bind(window,"mouseup",q);r=c.clientY});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&(n.__truncationSuspended=!0,this.blur(),n.__truncationSuspended=!1)});this.updateDisplay();this.domElement.appendChild(this.__input)};d.superclass=e;b.extend(d.prototype,e.prototype,{updateDisplay:function(){var a=this.__input,c;if(this.__truncationSuspended)c= +this.getValue();else{c=this.getValue();var b=Math.pow(10,this.__precision);c=Math.round(c*b)/b}a.value=c;return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common); +dat.controllers.NumberControllerSlider=function(e,a,b,d,f){function c(a,c,d,b,f){return b+(a-c)/(d-c)*(f-b)}var p=function(d,b,f,e,r){function y(d){d.preventDefault();var b=a.getOffset(h.__background),f=a.getWidth(h.__background);h.setValue(c(d.clientX,b.left,b.left+f,h.__min,h.__max));return!1}function g(){a.unbind(window,"mousemove",y);a.unbind(window,"mouseup",g);h.__onFinishChange&&h.__onFinishChange.call(h,h.getValue())}p.superclass.call(this,d,b,{min:f,max:e,step:r});var h=this;this.__background= +document.createElement("div");this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(c){a.bind(window,"mousemove",y);a.bind(window,"mouseup",g);y(c)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};p.superclass=e;p.useDefaultStyles=function(){b.inject(f)};d.extend(p.prototype,e.prototype,{updateDisplay:function(){var a= +(this.getValue()-this.__min)/(this.__max-this.__min);this.__foreground.style.width=100*a+"%";return p.superclass.prototype.updateDisplay.call(this)}});return p}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,"/**\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\n.slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}"); +dat.controllers.FunctionController=function(e,a,b){var d=function(b,c,e){d.superclass.call(this,b,c);var k=this;this.__button=document.createElement("div");this.__button.innerHTML=void 0===e?"Fire":e;a.bind(this.__button,"click",function(a){a.preventDefault();k.fire();return!1});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};d.superclass=e;b.extend(d.prototype,e.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.__onFinishChange&&this.__onFinishChange.call(this, +this.getValue());this.getValue().call(this.object)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); +dat.controllers.BooleanController=function(e,a,b){var d=function(b,c){d.superclass.call(this,b,c);var e=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){e.setValue(!e.__prev)},!1);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};d.superclass=e;b.extend(d.prototype,e.prototype,{setValue:function(a){a=d.superclass.prototype.setValue.call(this,a);this.__onFinishChange&& +this.__onFinishChange.call(this,this.getValue());this.__prev=this.getValue();return a},updateDisplay:function(){!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0):this.__checkbox.checked=!1;return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); +dat.color.toString=function(e){return function(a){if(1==a.a||e.isUndefined(a.a)){for(a=a.hex.toString(16);6>a.length;)a="0"+a;return"#"+a}return"rgba("+Math.round(a.r)+","+Math.round(a.g)+","+Math.round(a.b)+","+a.a+")"}}(dat.utils.common); +dat.color.interpret=function(e,a){var b,d,f=[{litmus:a.isString,conversions:{THREE_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString()+a[1].toString()+a[2].toString()+a[2].toString()+a[3].toString()+a[3].toString())}},write:e},SIX_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9]{6})$/i);return null===a?!1:{space:"HEX",hex:parseInt("0x"+a[1].toString())}},write:e},CSS_RGB:{read:function(a){a=a.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); +return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3])}},write:e},CSS_RGBA:{read:function(a){a=a.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);return null===a?!1:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3]),a:parseFloat(a[4])}},write:e}}},{litmus:a.isNumber,conversions:{HEX:{read:function(a){return{space:"HEX",hex:a,conversionName:"HEX"}},write:function(a){return a.hex}}}},{litmus:a.isArray,conversions:{RGB_ARRAY:{read:function(a){return 3!= +a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2]}},write:function(a){return[a.r,a.g,a.b]}},RGBA_ARRAY:{read:function(a){return 4!=a.length?!1:{space:"RGB",r:a[0],g:a[1],b:a[2],a:a[3]}},write:function(a){return[a.r,a.g,a.b,a.a]}}}},{litmus:a.isObject,conversions:{RGBA_OBJ:{read:function(c){return a.isNumber(c.r)&&a.isNumber(c.g)&&a.isNumber(c.b)&&a.isNumber(c.a)?{space:"RGB",r:c.r,g:c.g,b:c.b,a:c.a}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b,a:a.a}}},RGB_OBJ:{read:function(c){return a.isNumber(c.r)&& +a.isNumber(c.g)&&a.isNumber(c.b)?{space:"RGB",r:c.r,g:c.g,b:c.b}:!1},write:function(a){return{r:a.r,g:a.g,b:a.b}}},HSVA_OBJ:{read:function(c){return a.isNumber(c.h)&&a.isNumber(c.s)&&a.isNumber(c.v)&&a.isNumber(c.a)?{space:"HSV",h:c.h,s:c.s,v:c.v,a:c.a}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v,a:a.a}}},HSV_OBJ:{read:function(d){return a.isNumber(d.h)&&a.isNumber(d.s)&&a.isNumber(d.v)?{space:"HSV",h:d.h,s:d.s,v:d.v}:!1},write:function(a){return{h:a.h,s:a.s,v:a.v}}}}}];return function(){d=!1; +var c=1\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
        \n\n Automatically save\n values to localStorage on exit.\n\n
        The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
        \n \n
        \n\n
        ', +".dg {\n /** Clear list styles */\n /* Auto-place container */\n /* Auto-placed GUI's */\n /* Line items that don't contain folders. */\n /** Folder names */\n /** Hides closed items */\n /** Controller row */\n /** Name-half (left) */\n /** Controller-half (right) */\n /** Controller placement */\n /** Shorter number boxes when slider is present. */\n /** Ensure the entire boolean and function row shows a hand */ }\n .dg ul {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n clear: both; }\n .dg.ac {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 0;\n z-index: 0; }\n .dg:not(.ac) .main {\n /** Exclude mains in ac so that we don't hide close button */\n overflow: hidden; }\n .dg.main {\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear; }\n .dg.main.taller-than-window {\n overflow-y: auto; }\n .dg.main.taller-than-window .close-button {\n opacity: 1;\n /* TODO, these are style notes */\n margin-top: -1px;\n border-top: 1px solid #2c2c2c; }\n .dg.main ul.closed .close-button {\n opacity: 1 !important; }\n .dg.main:hover .close-button,\n .dg.main .close-button.drag {\n opacity: 1; }\n .dg.main .close-button {\n /*opacity: 0;*/\n -webkit-transition: opacity 0.1s linear;\n -o-transition: opacity 0.1s linear;\n -moz-transition: opacity 0.1s linear;\n transition: opacity 0.1s linear;\n border: 0;\n position: absolute;\n line-height: 19px;\n height: 20px;\n /* TODO, these are style notes */\n cursor: pointer;\n text-align: center;\n background-color: #000; }\n .dg.main .close-button:hover {\n background-color: #111; }\n .dg.a {\n float: right;\n margin-right: 15px;\n overflow-x: hidden; }\n .dg.a.has-save > ul {\n margin-top: 27px; }\n .dg.a.has-save > ul.closed {\n margin-top: 0; }\n .dg.a .save-row {\n position: fixed;\n top: 0;\n z-index: 1002; }\n .dg li {\n -webkit-transition: height 0.1s ease-out;\n -o-transition: height 0.1s ease-out;\n -moz-transition: height 0.1s ease-out;\n transition: height 0.1s ease-out; }\n .dg li:not(.folder) {\n cursor: auto;\n height: 27px;\n line-height: 27px;\n overflow: hidden;\n padding: 0 4px 0 5px; }\n .dg li.folder {\n padding: 0;\n border-left: 4px solid rgba(0, 0, 0, 0); }\n .dg li.title {\n cursor: pointer;\n margin-left: -4px; }\n .dg .closed li:not(.title),\n .dg .closed ul li,\n .dg .closed ul li > * {\n height: 0;\n overflow: hidden;\n border: 0; }\n .dg .cr {\n clear: both;\n padding-left: 3px;\n height: 27px; }\n .dg .property-name {\n cursor: default;\n float: left;\n clear: left;\n width: 40%;\n overflow: hidden;\n text-overflow: ellipsis; }\n .dg .c {\n float: left;\n width: 60%; }\n .dg .c input[type=text] {\n border: 0;\n margin-top: 4px;\n padding: 3px;\n width: 100%;\n float: right; }\n .dg .has-slider input[type=text] {\n width: 30%;\n /*display: none;*/\n margin-left: 0; }\n .dg .slider {\n float: left;\n width: 66%;\n margin-left: -5px;\n margin-right: 0;\n height: 19px;\n margin-top: 4px; }\n .dg .slider-fg {\n height: 100%; }\n .dg .c input[type=checkbox] {\n margin-top: 9px; }\n .dg .c select {\n margin-top: 5px; }\n .dg .cr.function,\n .dg .cr.function .property-name,\n .dg .cr.function *,\n .dg .cr.boolean,\n .dg .cr.boolean * {\n cursor: pointer; }\n .dg .selector {\n display: none;\n position: absolute;\n margin-left: -9px;\n margin-top: 23px;\n z-index: 10; }\n .dg .c:hover .selector,\n .dg .selector.drag {\n display: block; }\n .dg li.save-row {\n padding: 0; }\n .dg li.save-row .button {\n display: inline-block;\n padding: 0px 6px; }\n .dg.dialogue {\n background-color: #222;\n width: 460px;\n padding: 15px;\n font-size: 13px;\n line-height: 15px; }\n\n/* TODO Separate style and structure */\n#dg-new-constructor {\n padding: 10px;\n color: #222;\n font-family: Monaco, monospace;\n font-size: 10px;\n border: 0;\n resize: none;\n box-shadow: inset 1px 1px 1px #888;\n word-wrap: break-word;\n margin: 12px 0;\n display: block;\n width: 440px;\n overflow-y: scroll;\n height: 100px;\n position: relative; }\n\n#dg-local-explain {\n display: none;\n font-size: 11px;\n line-height: 17px;\n border-radius: 3px;\n background-color: #333;\n padding: 8px;\n margin-top: 10px; }\n #dg-local-explain code {\n font-size: 10px; }\n\n#dat-gui-save-locally {\n display: none; }\n\n/** Main type */\n.dg {\n color: #eee;\n font: 11px 'Lucida Grande', sans-serif;\n text-shadow: 0 -1px 0 #111;\n /** Auto place */\n /* Controller row,
      • */\n /** Controllers */ }\n .dg.main {\n /** Scrollbar */ }\n .dg.main::-webkit-scrollbar {\n width: 5px;\n background: #1a1a1a; }\n .dg.main::-webkit-scrollbar-corner {\n height: 0;\n display: none; }\n .dg.main::-webkit-scrollbar-thumb {\n border-radius: 5px;\n background: #676767; }\n .dg li:not(.folder) {\n background: #1a1a1a;\n border-bottom: 1px solid #2c2c2c; }\n .dg li.save-row {\n line-height: 25px;\n background: #dad5cb;\n border: 0; }\n .dg li.save-row select {\n margin-left: 5px;\n width: 108px; }\n .dg li.save-row .button {\n margin-left: 5px;\n margin-top: 1px;\n border-radius: 2px;\n font-size: 9px;\n line-height: 7px;\n padding: 4px 4px 5px 4px;\n background: #c5bdad;\n color: #fff;\n text-shadow: 0 1px 0 #b0a58f;\n box-shadow: 0 -1px 0 #b0a58f;\n cursor: pointer; }\n .dg li.save-row .button.gears {\n 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;\n height: 7px;\n width: 8px; }\n .dg li.save-row .button:hover {\n background-color: #bab19e;\n box-shadow: 0 -1px 0 #b0a58f; }\n .dg li.folder {\n border-bottom: 0; }\n .dg li.title {\n padding-left: 16px;\n background: black url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;\n cursor: pointer;\n border-bottom: 1px solid rgba(255, 255, 255, 0.2); }\n .dg .closed li.title {\n background-image: url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==); }\n .dg .cr.boolean {\n border-left: 3px solid #806787; }\n .dg .cr.function {\n border-left: 3px solid #e61d5f; }\n .dg .cr.number {\n border-left: 3px solid #2fa1d6; }\n .dg .cr.number input[type=text] {\n color: #2fa1d6; }\n .dg .cr.string {\n border-left: 3px solid #1ed36f; }\n .dg .cr.string input[type=text] {\n color: #1ed36f; }\n .dg .cr.function:hover, .dg .cr.boolean:hover {\n background: #111; }\n .dg .c input[type=text] {\n background: #303030;\n outline: none; }\n .dg .c input[type=text]:hover {\n background: #3c3c3c; }\n .dg .c input[type=text]:focus {\n background: #494949;\n color: #fff; }\n .dg .c .slider {\n background: #303030;\n cursor: ew-resize; }\n .dg .c .slider-fg {\n background: #2fa1d6; }\n .dg .c .slider:hover {\n background: #3c3c3c; }\n .dg .c .slider:hover .slider-fg {\n background: #44abda; }\n", +dat.controllers.factory=function(e,a,b,d,f,c,p){return function(k,l,q,n){var r=k[l];if(p.isArray(q)||p.isObject(q))return new e(k,l,q);if(p.isNumber(r))return p.isNumber(q)&&p.isNumber(n)?new b(k,l,q,n):new a(k,l,{min:q,max:n});if(p.isString(r))return new d(k,l);if(p.isFunction(r))return new f(k,l,"");if(p.isBoolean(r))return new c(k,l)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(e,a,b){var d= +function(b,c){function e(){k.setValue(k.__input.value)}d.superclass.call(this,b,c);var k=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",e);a.bind(this.__input,"change",e);a.bind(this.__input,"blur",function(){k.__onFinishChange&&k.__onFinishChange.call(k,k.getValue())});a.bind(this.__input,"keydown",function(a){13===a.keyCode&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};d.superclass=e;b.extend(d.prototype, +e.prototype,{updateDisplay:function(){a.isActive(this.__input)||(this.__input.value=this.getValue());return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, +dat.controllers.ColorController=function(e,a,b,d,f){function c(a,b,d,c){a.style.background="";f.each(l,function(e){a.style.cssText+="background: "+e+"linear-gradient("+b+", "+d+" 0%, "+c+" 100%); "})}function p(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"; +a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var k=function(e,n){function r(b){t(b);a.bind(window,"mousemove",t);a.bind(window, +"mouseup",l)}function l(){a.unbind(window,"mousemove",t);a.unbind(window,"mouseup",l)}function g(){var a=d(this.value);!1!==a?(s.__color.__state=a,s.setValue(s.__color.toOriginal())):this.value=s.__color.toString()}function h(){a.unbind(window,"mousemove",u);a.unbind(window,"mouseup",h)}function t(b){b.preventDefault();var d=a.getWidth(s.__saturation_field),c=a.getOffset(s.__saturation_field),e=(b.clientX-c.left+document.body.scrollLeft)/d;b=1-(b.clientY-c.top+document.body.scrollTop)/d;1 +b&&(b=0);1e&&(e=0);s.__color.v=b;s.__color.s=e;s.setValue(s.__color.toOriginal());return!1}function u(b){b.preventDefault();var d=a.getHeight(s.__hue_field),c=a.getOffset(s.__hue_field);b=1-(b.clientY-c.top+document.body.scrollTop)/d;1b&&(b=0);s.__color.h=360*b;s.setValue(s.__color.toOriginal());return!1}k.superclass.call(this,e,n);this.__color=new b(this.getValue());this.__temp=new b(0);var s=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement,!1); +this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input=document.createElement("input"); +this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){13===a.keyCode&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(b){a.addClass(this,"drag").bind(window,"mouseup",function(b){a.removeClass(s.__selector,"drag")})});var v=document.createElement("div");f.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"});f.extend(this.__field_knob.style, +{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(0.5>this.__color.v?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});f.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});f.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});f.extend(v.style,{width:"100%",height:"100%", +background:"none"});c(v,"top","rgba(0,0,0,0)","#000");f.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});p(this.__hue_field);f.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",r);a.bind(this.__field_knob,"mousedown",r);a.bind(this.__hue_field,"mousedown",function(b){u(b);a.bind(window, +"mousemove",u);a.bind(window,"mouseup",h)});this.__saturation_field.appendChild(v);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};k.superclass=e;f.extend(k.prototype,e.prototype,{updateDisplay:function(){var a=d(this.getValue());if(!1!==a){var e=!1; +f.each(b.COMPONENTS,function(b){if(!f.isUndefined(a[b])&&!f.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return e=!0,{}},this);e&&f.extend(this.__color.__state,a)}f.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var k=0.5>this.__color.v||0.5a&&(a+=1);return{h:360*a,s:e/c,v:c/255}},rgb_to_hex:function(a,b,d){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,b);return a=this.hex_with_component(a,0,d)},component_from_hex:function(a,b){return a>>8*b&255},hex_with_component:function(a,b,d){return d<<(e=8*b)|a&~(255< prevTime + 3000 ) { + + this.fps = ( frames * 1000 ) / ( time - prevTime ); + fpsPanel.update( this.fps, 100 ); + + + prevTime = time; + frames = 0; + + if ( memPanel ) { + + var memory = performance.memory; + memPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 ); + + } + + } + + return time; + + }, + + update: function () { + + beginTime = this.end(); + + }, + + // Backwards Compatibility + + domElement: container, + setMode: showPanel + + }; + +}; + +Stats.Panel = function ( name, fg, bg ) { + + var min = Infinity, max = 0, round = Math.round; + var PR = round( window.devicePixelRatio || 1 ); + + var WIDTH = 80 * PR, HEIGHT = 48 * PR, + TEXT_X = 3 * PR, TEXT_Y = 2 * PR, + GRAPH_X = 3 * PR, GRAPH_Y = 15 * PR, + GRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR; + + var canvas = document.createElement( 'canvas' ); + canvas.width = WIDTH; + canvas.height = HEIGHT; + canvas.style.cssText = 'width:80px;height:48px'; + + var context = canvas.getContext( '2d' ); + context.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif'; + context.textBaseline = 'top'; + + context.fillStyle = bg; + context.fillRect( 0, 0, WIDTH, HEIGHT ); + + context.fillStyle = fg; + context.fillText( name, TEXT_X, TEXT_Y ); + context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT ); + + context.fillStyle = bg; + context.globalAlpha = 0.9; + context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT ); + + return { + + dom: canvas, + + update: function ( value, maxValue ) { + + min = Math.min( min, value ); + max = Math.max( max, value ); + + context.fillStyle = bg; + context.globalAlpha = 1; + context.fillRect( 0, 0, WIDTH, GRAPH_Y ); + context.fillStyle = fg; + context.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y ); + + context.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT ); + + context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT ); + + context.fillStyle = bg; + context.globalAlpha = 0.9; + context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) ); + + } + + }; + +}; + +if ( typeof module === 'object' ) { + + module.exports = Stats; + +} diff --git a/libs/other/stats.min.js b/libs/other/stats.min.js new file mode 100644 index 0000000..ef000cf --- /dev/null +++ b/libs/other/stats.min.js @@ -0,0 +1,5 @@ +// stats.js - http://github.com/mrdoob/stats.js +var Stats=function(){function h(a){c.appendChild(a.dom);return a}function k(a){for(var d=0;de+1E3&&(r.update(1E3*a/(c-e),100),e=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){g=this.end()},domElement:c,setMode:k}}; +Stats.Panel=function(h,k,l){var c=Infinity,g=0,e=Math.round,a=e(window.devicePixelRatio||1),r=80*a,f=48*a,t=3*a,u=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement("canvas");q.width=r;q.height=f;q.style.cssText="width:80px;height:48px";var b=q.getContext("2d");b.font="bold "+9*a+"px Helvetica,Arial,sans-serif";b.textBaseline="top";b.fillStyle=l;b.fillRect(0,0,r,f);b.fillStyle=k;b.fillText(h,t,u);b.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(f, +v){c=Math.min(c,f);g=Math.max(g,f);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=k;b.fillText(e(f)+" "+h+" ("+e(c)+"-"+e(g)+")",t,u);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,e((1-f/v)*p))}}};"object"===typeof module&&(module.exports=Stats); diff --git a/libs/plasio/LICENSE b/libs/plasio/LICENSE new file mode 100644 index 0000000..281fd93 --- /dev/null +++ b/libs/plasio/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Uday Verma, uday.karan@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/libs/plasio/js/laslaz.js b/libs/plasio/js/laslaz.js new file mode 100644 index 0000000..c8c40d2 --- /dev/null +++ b/libs/plasio/js/laslaz.js @@ -0,0 +1,398 @@ +// laslaz.js +// LAS/LAZ loading +// + +//var common = require("./common"), +// Promise = require("bluebird"); + +(function(scope) { + "use strict"; + + var pointFormatReaders = { + 0: function(dv) { + return { + "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], + "intensity": dv.getUint16(12, true), + "classification": dv.getUint8(16, true) + }; + }, + 1: function(dv) { + return { + "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], + "intensity": dv.getUint16(12, true), + "classification": dv.getUint8(16, true) + }; + }, + 2: function(dv) { + return { + "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], + "intensity": dv.getUint16(12, true), + "classification": dv.getUint8(16, true), + "color": [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)] + }; + }, + 3: function(dv) { + return { + "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], + "intensity": dv.getUint16(12, true), + "classification": dv.getUint8(16, true), + "color": [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)] + }; + } + }; + + function readAs(buf, Type, offset, count) { + count = (count === undefined || count === 0 ? 1 : count); + var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count); + + var r = new Type(sub); + if (count === undefined || count === 1) + return r[0]; + + var ret = []; + for (var i = 0 ; i < count ; i ++) { + ret.push(r[i]); + } + + return ret; + } + + function parseLASHeader(arraybuffer) { + var o = {}; + + o.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3); + o.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8); + o.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1); + o.pointsCount = readAs(arraybuffer, Uint32Array, 32*3 + 11); + + + var start = 32*3 + 35; + o.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24; // 8*3 + o.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24; + + + + var bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48; // 8*6; + o.maxs = [bounds[0], bounds[2], bounds[4]]; + o.mins = [bounds[1], bounds[3], bounds[5]]; + + return o; + } + + var msgIndex = 0; + var waitHandlers = {}; + + // This method is scope-wide since the nacl module uses this fuction to notify + // us of events + scope.handleMessage = function(message_event) { + var msg = message_event.data; + var resolver = waitHandlers[msg.id]; + delete waitHandlers[msg.id]; + + // call the callback in a separate context, make sure we've cleaned our + // state out before the callback is invoked since it may queue more doExchanges + setTimeout(function() { + if (msg.error) + return resolver.reject(new Error(msg.message || "Unknown Error")); + + if (msg.hasOwnProperty('count') && msg.hasOwnProperty('hasMoreData')) { + return resolver.resolve({ + buffer: msg.result, + count: msg.count, + hasMoreData: msg.hasMoreData}); + } + + resolver.resolve(msg.result); + }, 0); + }; + + var doDataExchange = function(cmd, callback) { + cmd.id = msgIndex.toString(); + msgIndex ++; + + var resolver = Promise.defer(); + waitHandlers[cmd.id] = resolver; + + nacl_module.postMessage(cmd); + + return resolver.promise.cancellable(); + }; + + // LAS Loader + // Loads uncompressed files + // + var LASLoader = function(arraybuffer) { + this.arraybuffer = arraybuffer; + }; + + LASLoader.prototype.open = function() { + // nothing needs to be done to open this file + // + this.readOffset = 0; + return new Promise(function(res, rej) { + setTimeout(res, 0); + }); + }; + + LASLoader.prototype.getHeader = function() { + var o = this; + + return new Promise(function(res, rej) { + setTimeout(function() { + o.header = parseLASHeader(o.arraybuffer); + res(o.header); + }, 0); + }); + }; + + LASLoader.prototype.readData = function(count, offset, skip) { + var o = this; + + return new Promise(function(res, rej) { + setTimeout(function() { + if (!o.header) + return rej(new Error("Cannot start reading data till a header request is issued")); + + var start; + if (skip <= 1) { + count = Math.min(count, o.header.pointsCount - o.readOffset); + start = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize; + var end = start + count * o.header.pointsStructSize; + res({ + buffer: o.arraybuffer.slice(start, end), + count: count, + hasMoreData: o.readOffset + count < o.header.pointsCount}); + o.readOffset += count; + } + else { + var pointsToRead = Math.min(count * skip, o.header.pointsCount - o.readOffset); + var bufferSize = Math.ceil(pointsToRead / skip); + var pointsRead = 0; + + var buf = new Uint8Array(bufferSize * o.header.pointsStructSize); + for (var i = 0 ; i < pointsToRead ; i ++) { + if (i % skip === 0) { + start = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize; + var src = new Uint8Array(o.arraybuffer, start, o.header.pointsStructSize); + + buf.set(src, pointsRead * o.header.pointsStructSize); + pointsRead ++; + } + + o.readOffset ++; + } + + res({ + buffer: buf.buffer, + count: pointsRead, + hasMoreData: o.readOffset < o.header.pointsCount + }); + } + }, 0); + }); + }; + + LASLoader.prototype.close = function() { + var o = this; + return new Promise(function(res, rej) { + o.arraybuffer = null; + setTimeout(res, 0); + }); + }; + + // LAZ Loader + // Uses NaCL module to load LAZ files + // + var LAZLoader = function(arraybuffer) { + this.arraybuffer = arraybuffer; + + let workerPath = Potree.scriptPath + "/workers/LASLAZWorker.js"; + this.ww = Potree.workerPool.getWorker(workerPath); + + this.nextCB = null; + var o = this; + + this.ww.onmessage = function(e) { + if (o.nextCB !== null) { + o.nextCB(e.data); + o.nextCB = null; + } + }; + + this.dorr = function(req, cb) { + o.nextCB = cb; + o.ww.postMessage(req); + }; + }; + + LAZLoader.prototype.open = function() { + + // nothing needs to be done to open this file + // + var o = this; + return new Promise(function(res, rej) { + o.dorr({type:"open", arraybuffer: o.arraybuffer}, function(r) { + if (r.status !== 1) + return rej(new Error("Failed to open file")); + + res(true); + }); + }); + }; + + LAZLoader.prototype.getHeader = function() { + var o = this; + + return new Promise(function(res, rej) { + o.dorr({type:'header'}, function(r) { + if (r.status !== 1) + return rej(new Error("Failed to get header")); + + res(r.header); + }); + }); + }; + + LAZLoader.prototype.readData = function(count, offset, skip) { + var o = this; + + return new Promise(function(res, rej) { + o.dorr({type:'read', count: count, offset: offset, skip: skip}, function(r) { + if (r.status !== 1) + return rej(new Error("Failed to read data")); + res({ + buffer: r.buffer, + count: r.count, + hasMoreData: r.hasMoreData + }); + }); + }); + }; + + LAZLoader.prototype.close = function() { + var o = this; + + return new Promise(function(res, rej) { + o.dorr({type:'close'}, function(r) { + let workerPath = Potree.scriptPath + "/workers/LASLAZWorker.js"; + Potree.workerPool.returnWorker(workerPath, o.ww); + + if (r.status !== 1) + return rej(new Error("Failed to close file")); + + res(true); + }); + }); + }; + + // A single consistent interface for loading LAS/LAZ files + var LASFile = function(arraybuffer) { + this.arraybuffer = arraybuffer; + + this.determineVersion(); + if (this.version > 12) + throw new Error("Only file versions <= 1.2 are supported at this time"); + + this.determineFormat(); + if (pointFormatReaders[this.formatId] === undefined) + throw new Error("The point format ID is not supported"); + + this.loader = this.isCompressed ? + new LAZLoader(this.arraybuffer) : + new LASLoader(this.arraybuffer); + }; + + LASFile.prototype.determineFormat = function() { + var formatId = readAs(this.arraybuffer, Uint8Array, 32*3+8); + var bit_7 = (formatId & 0x80) >> 7; + var bit_6 = (formatId & 0x40) >> 6; + + if (bit_7 === 1 && bit_6 === 1) + throw new Error("Old style compression not supported"); + + this.formatId = formatId & 0x3f; + this.isCompressed = (bit_7 === 1 || bit_6 === 1); + }; + + LASFile.prototype.determineVersion = function() { + var ver = new Int8Array(this.arraybuffer, 24, 2); + this.version = ver[0] * 10 + ver[1]; + this.versionAsString = ver[0] + "." + ver[1]; + }; + + LASFile.prototype.open = function() { + return this.loader.open(); + }; + + LASFile.prototype.getHeader = function() { + return this.loader.getHeader(); + }; + + LASFile.prototype.readData = function(count, start, skip) { + return this.loader.readData(count, start, skip); + }; + + LASFile.prototype.close = function() { + return this.loader.close(); + }; + + // Decodes LAS records into points + // + var LASDecoder = function(buffer, pointFormatID, pointSize, pointsCount, scale, offset, mins, maxs) { + this.arrayb = buffer; + this.decoder = pointFormatReaders[pointFormatID]; + this.pointsCount = pointsCount; + this.pointSize = pointSize; + this.scale = scale; + this.offset = offset; + this.mins = mins; + this.maxs = maxs; + }; + + LASDecoder.prototype.getPoint = function(index) { + if (index < 0 || index >= this.pointsCount) + throw new Error("Point index out of range"); + + var dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize); + return this.decoder(dv); + }; + + // NACL Module support + // Called by the common.js module. + // + //window.startNaCl = function(name, tc, config, width, height) { + // // check browser support for nacl + // // + // if(!common.browserSupportsNaCl()) { + // return $.event.trigger({ + // type: "plasio.nacl.error", + // message: "NaCl support is not available" + // }); + // } + + // navigator.webkitPersistentStorage.requestQuota(2048 * 2048, function(bytes) { + // common.updateStatus( + // 'Allocated ' + bytes + ' bytes of persistant storage.'); + // common.attachDefaultListeners(); + // common.createNaClModule(name, tc, config, width, height); + // }, + // function(e) { + // $.event.trigger({ + // type: "plasio.nacl.error", + // message: "Could not allocate persistant storage" + // }); + // }); + + // $(document).on("plasio.nacl.available", function() { + // scope.LASModuleWasLoaded = true; + // }); + //}; + + scope.LAZLoader = LAZLoader; + scope.LASLoader = LASLoader; + scope.LASFile = LASFile; + scope.LASDecoder = LASDecoder; + scope.LASModuleWasLoaded = false; +//})(module.exports); +})(this); + diff --git a/libs/plasio/vendor/bluebird.js b/libs/plasio/vendor/bluebird.js new file mode 100644 index 0000000..b9b7fa0 --- /dev/null +++ b/libs/plasio/vendor/bluebird.js @@ -0,0 +1,5140 @@ +/** + * bluebird build version 1.0.8 + * Features enabled: core, timers, race, any, call_get, filter, generators, map, nodeify, promisify, props, reduce, settle, some, progress, cancel, synchronous_inspection +*/ +/** + * @preserve Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +!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 + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) { + + var SomePromiseArray = require("./some_promise_array.js")(PromiseArray); + var ASSERT = require("./assert.js"); + + function Promise$_Any(promises, useBound, caller) { + var ret = Promise$_CreatePromiseArray( + promises, + SomePromiseArray, + caller, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0 + ); + var promise = ret.promise(); + if (promise.isRejected()) { + return promise; + } + ret.setHowMany(1); + ret.setUnwrap(); + ret.init(); + return promise; + } + + Promise.any = function Promise$Any(promises) { + return Promise$_Any(promises, false, Promise.any); + }; + + Promise.prototype.any = function Promise$any() { + return Promise$_Any(this, true, this.any); + }; + +}; + +},{"./assert.js":2,"./some_promise_array.js":35}],2:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = (function(){ + var AssertionError = (function() { + function AssertionError(a) { + this.constructor$(a); + this.message = a; + this.name = "AssertionError"; + } + AssertionError.prototype = new Error(); + AssertionError.prototype.constructor = AssertionError; + AssertionError.prototype.constructor$ = Error; + return AssertionError; + })(); + + return function assert(boolExpr, message) { + if (boolExpr === true) return; + + var ret = new AssertionError(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(ret, assert); + } + if (console && console.error) { + console.error(ret.stack + ""); + } + throw ret; + + }; +})(); + +},{}],3:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var ASSERT = require("./assert.js"); +var schedule = require("./schedule.js"); +var Queue = require("./queue.js"); +var errorObj = require("./util.js").errorObj; +var tryCatch1 = require("./util.js").tryCatch1; + +function Async() { + this._isTickUsed = false; + this._length = 0; + this._lateBuffer = new Queue(); + this._functionBuffer = new Queue(25000 * 3); + var self = this; + this.consumeFunctionBuffer = function Async$consumeFunctionBuffer() { + self._consumeFunctionBuffer(); + }; +} + +Async.prototype.haveItemsQueued = function Async$haveItemsQueued() { + return this._length > 0; +}; + +Async.prototype.invokeLater = function Async$invokeLater(fn, receiver, arg) { + this._lateBuffer.push(fn, receiver, arg); + this._queueTick(); +}; + +Async.prototype.invoke = function Async$invoke(fn, receiver, arg) { + var functionBuffer = this._functionBuffer; + functionBuffer.push(fn, receiver, arg); + this._length = functionBuffer.length(); + this._queueTick(); +}; + +Async.prototype._consumeFunctionBuffer = +function Async$_consumeFunctionBuffer() { + var functionBuffer = this._functionBuffer; + while(functionBuffer.length() > 0) { + var fn = functionBuffer.shift(); + var receiver = functionBuffer.shift(); + var arg = functionBuffer.shift(); + fn.call(receiver, arg); + } + this._reset(); + this._consumeLateBuffer(); +}; + +Async.prototype._consumeLateBuffer = function Async$_consumeLateBuffer() { + var buffer = this._lateBuffer; + while(buffer.length() > 0) { + var fn = buffer.shift(); + var receiver = buffer.shift(); + var arg = buffer.shift(); + var res = tryCatch1(fn, receiver, arg); + if (res === errorObj) { + this._queueTick(); + throw res.e; + } + } +}; + +Async.prototype._queueTick = function Async$_queue() { + if (!this._isTickUsed) { + schedule(this.consumeFunctionBuffer); + this._isTickUsed = true; + } +}; + +Async.prototype._reset = function Async$_reset() { + this._isTickUsed = false; + this._length = 0; +}; + +module.exports = new Async(); + +},{"./assert.js":2,"./queue.js":28,"./schedule.js":31,"./util.js":39}],4:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var Promise = require("./promise.js")(); +module.exports = Promise; +},{"./promise.js":20}],5:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise) { + Promise.prototype.call = function Promise$call(propertyName) { + var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} + + return this._then(function(obj) { + return obj[propertyName].apply(obj, args); + }, + void 0, + void 0, + void 0, + void 0, + this.call + ); + }; + + function Promise$getter(obj) { + var prop = typeof this === "string" + ? this + : ("" + this); + return obj[prop]; + } + Promise.prototype.get = function Promise$get(propertyName) { + return this._then( + Promise$getter, + void 0, + void 0, + propertyName, + void 0, + this.get + ); + }; +}; + +},{}],6:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { + var errors = require("./errors.js"); + var async = require("./async.js"); + var ASSERT = require("./assert.js"); + var CancellationError = errors.CancellationError; + var SYNC_TOKEN = {}; + + Promise.prototype._cancel = function Promise$_cancel() { + if (!this.isCancellable()) return this; + var parent; + if ((parent = this._cancellationParent) !== void 0 && + parent.isCancellable()) { + parent.cancel(SYNC_TOKEN); + return; + } + var err = new CancellationError(); + this._attachExtraTrace(err); + this._rejectUnchecked(err); + }; + + Promise.prototype.cancel = function Promise$cancel(token) { + if (!this.isCancellable()) return this; + if (token === SYNC_TOKEN) { + this._cancel(); + return this; + } + async.invokeLater(this._cancel, this, void 0); + return this; + }; + + Promise.prototype.cancellable = function Promise$cancellable() { + if (this._cancellable()) return this; + this._setCancellable(); + this._cancellationParent = void 0; + return this; + }; + + Promise.prototype.uncancellable = function Promise$uncancellable() { + var ret = new Promise(INTERNAL); + ret._setTrace(this.uncancellable, this); + ret._follow(this); + ret._unsetCancellable(); + if (this._isBound()) ret._setBoundTo(this._boundTo); + return ret; + }; + + Promise.prototype.fork = + function Promise$fork(didFulfill, didReject, didProgress) { + var ret = this._then(didFulfill, didReject, didProgress, + void 0, void 0, this.fork); + + ret._setCancellable(); + ret._cancellationParent = void 0; + return ret; + }; +}; + +},{"./assert.js":2,"./async.js":3,"./errors.js":10}],7:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function() { +var ASSERT = require("./assert.js"); +var inherits = require("./util.js").inherits; +var defineProperty = require("./es5.js").defineProperty; + +var rignore = new RegExp( + "\\b(?:[\\w.]*Promise(?:Array|Spawn)?\\$_\\w+|" + + "tryCatch(?:1|2|Apply)|new \\w*PromiseArray|" + + "\\w*PromiseArray\\.\\w*PromiseArray|" + + "setTimeout|CatchFilter\\$_\\w+|makeNodePromisified|processImmediate|" + + "process._tickCallback|nextTick|Async\\$\\w+)\\b" +); + +var rtraceline = null; +var formatStack = null; +var areNamesMangled = false; + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } + else { + str = obj.toString(); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function CapturedTrace(ignoreUntil, isTopLevel) { + if (!areNamesMangled) { + } + this.captureStackTrace(ignoreUntil, isTopLevel); + +} +inherits(CapturedTrace, Error); + +CapturedTrace.prototype.captureStackTrace = +function CapturedTrace$captureStackTrace(ignoreUntil, isTopLevel) { + captureStackTrace(this, ignoreUntil, isTopLevel); +}; + +CapturedTrace.possiblyUnhandledRejection = +function CapturedTrace$PossiblyUnhandledRejection(reason) { + if (typeof console === "object") { + var message; + if (typeof reason === "object" || typeof reason === "function") { + var stack = reason.stack; + message = "Possibly unhandled " + formatStack(stack, reason); + } + else { + message = "Possibly unhandled " + String(reason); + } + if (typeof console.error === "function" || + typeof console.error === "object") { + console.error(message); + } + else if (typeof console.log === "function" || + typeof console.error === "object") { + console.log(message); + } + } +}; + +areNamesMangled = CapturedTrace.prototype.captureStackTrace.name !== + "CapturedTrace$captureStackTrace"; + +CapturedTrace.combine = function CapturedTrace$Combine(current, prev) { + var curLast = current.length - 1; + for (var i = prev.length - 1; i >= 0; --i) { + var line = prev[i]; + if (current[curLast] === line) { + current.pop(); + curLast--; + } + else { + break; + } + } + + current.push("From previous event:"); + var lines = current.concat(prev); + + var ret = []; + + + for (var i = 0, len = lines.length; i < len; ++i) { + + if ((rignore.test(lines[i]) || + (i > 0 && !rtraceline.test(lines[i])) && + lines[i] !== "From previous event:") + ) { + continue; + } + ret.push(lines[i]); + } + return ret; +}; + +CapturedTrace.isSupported = function CapturedTrace$IsSupported() { + return typeof captureStackTrace === "function"; +}; + +var captureStackTrace = (function stackDetection() { + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + rtraceline = /^\s*at\s*/; + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== void 0 && + error.message !== void 0) { + return error.name + ". " + error.message; + } + return formatNonError(error); + + + }; + var captureStackTrace = Error.captureStackTrace; + return function CapturedTrace$_captureStackTrace( + receiver, ignoreUntil) { + captureStackTrace(receiver, ignoreUntil); + }; + } + var err = new Error(); + + if (!areNamesMangled && typeof err.stack === "string" && + typeof "".startsWith === "function" && + (err.stack.startsWith("stackDetection@")) && + stackDetection.name === "stackDetection") { + + defineProperty(Error, "stackTraceLimit", { + writable: true, + enumerable: false, + configurable: false, + value: 25 + }); + rtraceline = /@/; + var rline = /[@\n]/; + + formatStack = function(stack, error) { + if (typeof stack === "string") { + return (error.name + ". " + error.message + "\n" + stack); + } + + if (error.name !== void 0 && + error.message !== void 0) { + return error.name + ". " + error.message; + } + return formatNonError(error); + }; + + return function captureStackTrace(o, fn) { + var name = fn.name; + var stack = new Error().stack; + var split = stack.split(rline); + var i, len = split.length; + for (i = 0; i < len; i += 2) { + if (split[i] === name) { + break; + } + } + split = split.slice(i + 2); + len = split.length - 2; + var ret = ""; + for (i = 0; i < len; i += 2) { + ret += split[i]; + ret += "@"; + ret += split[i + 1]; + ret += "\n"; + } + o.stack = ret; + }; + } + else { + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== void 0 && + error.message !== void 0) { + return error.name + ". " + error.message; + } + return formatNonError(error); + }; + + return null; + } +})(); + +return CapturedTrace; +}; + +},{"./assert.js":2,"./es5.js":12,"./util.js":39}],8:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = require("./util.js"); +var errors = require("./errors.js"); +var tryCatch1 = util.tryCatch1; +var errorObj = util.errorObj; +var keys = require("./es5.js").keys; + +function CatchFilter(instances, callback, promise) { + this._instances = instances; + this._callback = callback; + this._promise = promise; +} + +function CatchFilter$_safePredicate(predicate, e) { + var safeObject = {}; + var retfilter = tryCatch1(predicate, safeObject, e); + + if (retfilter === errorObj) return retfilter; + + var safeKeys = keys(safeObject); + if (safeKeys.length) { + errorObj.e = new TypeError( + "Catch filter must inherit from Error " + + "or be a simple predicate function"); + return errorObj; + } + return retfilter; +} + +CatchFilter.prototype.doFilter = function CatchFilter$_doFilter(e) { + var cb = this._callback; + var promise = this._promise; + var boundTo = promise._isBound() ? promise._boundTo : void 0; + for (var i = 0, len = this._instances.length; i < len; ++i) { + var item = this._instances[i]; + var itemIsErrorType = item === Error || + (item != null && item.prototype instanceof Error); + + if (itemIsErrorType && e instanceof item) { + var ret = tryCatch1(cb, boundTo, e); + if (ret === errorObj) { + NEXT_FILTER.e = ret.e; + return NEXT_FILTER; + } + return ret; + } else if (typeof item === "function" && !itemIsErrorType) { + var shouldHandle = CatchFilter$_safePredicate(item, e); + if (shouldHandle === errorObj) { + var trace = errors.canAttach(errorObj.e) + ? errorObj.e + : new Error(errorObj.e + ""); + this._promise._attachExtraTrace(trace); + e = errorObj.e; + break; + } else if (shouldHandle) { + var ret = tryCatch1(cb, boundTo, e); + if (ret === errorObj) { + NEXT_FILTER.e = ret.e; + return NEXT_FILTER; + } + return ret; + } + } + } + NEXT_FILTER.e = e; + return NEXT_FILTER; +}; + +return CatchFilter; +}; + +},{"./errors.js":10,"./es5.js":12,"./util.js":39}],9:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var util = require("./util.js"); +var ASSERT = require("./assert.js"); +var isPrimitive = util.isPrimitive; +var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver; + +module.exports = function(Promise) { +var returner = function Promise$_returner() { + return this; +}; +var thrower = function Promise$_thrower() { + throw this; +}; + +var wrapper = function Promise$_wrapper(value, action) { + if (action === 1) { + return function Promise$_thrower() { + throw value; + }; + } + else if (action === 2) { + return function Promise$_returner() { + return value; + }; + } +}; + + +Promise.prototype["return"] = +Promise.prototype.thenReturn = +function Promise$thenReturn(value) { + if (wrapsPrimitiveReceiver && isPrimitive(value)) { + return this._then( + wrapper(value, 2), + void 0, + void 0, + void 0, + void 0, + this.thenReturn + ); + } + return this._then(returner, void 0, void 0, + value, void 0, this.thenReturn); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = +function Promise$thenThrow(reason) { + if (wrapsPrimitiveReceiver && isPrimitive(reason)) { + return this._then( + wrapper(reason, 1), + void 0, + void 0, + void 0, + void 0, + this.thenThrow + ); + } + return this._then(thrower, void 0, void 0, + reason, void 0, this.thenThrow); +}; +}; + +},{"./assert.js":2,"./util.js":39}],10:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var global = require("./global.js"); +var Objectfreeze = require("./es5.js").freeze; +var util = require("./util.js"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; +var Error = global.Error; + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isAsync", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof RejectionError) || + e["isAsync"] === true); +} + +function isError(obj) { + return obj instanceof Error; +} + +function canAttach(obj) { + return isError(obj); +} + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + this.message = typeof message === "string" ? message : defaultMessage; + this.name = nameProperty; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + inherits(SubError, Error); + return SubError; +} + +var TypeError = global.TypeError; +if (typeof TypeError !== "function") { + TypeError = subError("TypeError", "type error"); +} +var RangeError = global.RangeError; +if (typeof RangeError !== "function") { + RangeError = subError("RangeError", "range error"); +} +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); + +function RejectionError(message) { + this.name = "RejectionError"; + this.message = message; + this.cause = message; + this.isAsync = true; + + if (message instanceof Error) { + this.message = message.message; + this.stack = message.stack; + } + else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(RejectionError, Error); + +var key = "__BluebirdErrorTypes__"; +var errorTypes = global[key]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + RejectionError: RejectionError + }); + notEnumerableProp(global, key, errorTypes); +} + +module.exports = { + Error: Error, + TypeError: TypeError, + RangeError: RangeError, + CancellationError: errorTypes.CancellationError, + RejectionError: errorTypes.RejectionError, + TimeoutError: errorTypes.TimeoutError, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + canAttach: canAttach +}; + +},{"./es5.js":12,"./global.js":16,"./util.js":39}],11:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise) { +var TypeError = require('./errors.js').TypeError; + +function apiRejection(msg) { + var error = new TypeError(msg); + var ret = Promise.rejected(error); + var parent = ret._peekContext(); + if (parent != null) { + parent._attachExtraTrace(error); + } + return ret; +} + +return apiRejection; +}; + +},{"./errors.js":10}],12:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +var isES5 = (function(){ + "use strict"; + return this === void 0; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + keys: Object.keys, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5 + }; +} + +else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + function ObjectKeys(o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + } + + function ObjectDefineProperty(o, key, desc) { + o[key] = desc.value; + return o; + } + + function ObjectFreeze(obj) { + return obj; + } + + function ObjectGetPrototypeOf(obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + } + + function ArrayIsArray(obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + } + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + defineProperty: ObjectDefineProperty, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5 + }; +} + +},{}],13:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise) { + var ASSERT = require("./assert.js"); + var isArray = require("./util.js").isArray; + + function Promise$_filter(booleans) { + var values = this._settledValue; + var len = values.length; + var ret = new Array(len); + var j = 0; + + for (var i = 0; i < len; ++i) { + if (booleans[i]) ret[j++] = values[i]; + + } + ret.length = j; + return ret; + } + + var ref = {ref: null}; + Promise.filter = function Promise$Filter(promises, fn) { + return Promise.map(promises, fn, ref) + ._then(Promise$_filter, void 0, void 0, + ref.ref, void 0, Promise.filter); + }; + + Promise.prototype.filter = function Promise$filter(fn) { + return this.map(fn, ref) + ._then(Promise$_filter, void 0, void 0, + ref.ref, void 0, this.filter); + }; +}; + +},{"./assert.js":2,"./util.js":39}],14:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +module.exports = function(Promise, NEXT_FILTER) { + var util = require("./util.js"); + var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver; + var isPrimitive = util.isPrimitive; + var thrower = util.thrower; + + + function returnThis() { + return this; + } + function throwThis() { + throw this; + } + function makeReturner(r) { + return function Promise$_returner() { + return r; + }; + } + function makeThrower(r) { + return function Promise$_thrower() { + throw r; + }; + } + function promisedFinally(ret, reasonOrValue, isFulfilled) { + var useConstantFunction = + wrapsPrimitiveReceiver && isPrimitive(reasonOrValue); + + if (isFulfilled) { + return ret._then( + useConstantFunction + ? returnThis + : makeReturner(reasonOrValue), + thrower, void 0, reasonOrValue, void 0, promisedFinally); + } + else { + return ret._then( + useConstantFunction + ? throwThis + : makeThrower(reasonOrValue), + thrower, void 0, reasonOrValue, void 0, promisedFinally); + } + } + + function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + var ret = promise._isBound() + ? handler.call(promise._boundTo) + : handler(); + + if (ret !== void 0) { + var maybePromise = Promise._cast(ret, finallyHandler, void 0); + if (Promise.is(maybePromise)) { + return promisedFinally(maybePromise, reasonOrValue, + promise.isFulfilled()); + } + } + + if (promise.isRejected()) { + NEXT_FILTER.e = reasonOrValue; + return NEXT_FILTER; + } + else { + return reasonOrValue; + } + } + + Promise.prototype.lastly = Promise.prototype["finally"] = + function Promise$finally(handler) { + if (typeof handler !== "function") return this.then(); + + var promiseAndHandler = { + promise: this, + handler: handler + }; + + return this._then(finallyHandler, finallyHandler, void 0, + promiseAndHandler, void 0, this.lastly); + }; +}; + +},{"./util.js":39}],15:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, apiRejection, INTERNAL) { + var PromiseSpawn = require("./promise_spawn.js")(Promise, INTERNAL); + var errors = require("./errors.js"); + var TypeError = errors.TypeError; + var deprecated = require("./util.js").deprecated; + + Promise.coroutine = function Promise$Coroutine(generatorFunction) { + if (typeof generatorFunction !== "function") { + throw new TypeError("generatorFunction must be a function"); + } + var PromiseSpawn$ = PromiseSpawn; + return function anonymous() { + var generator = generatorFunction.apply(this, arguments); + var spawn = new PromiseSpawn$(void 0, void 0, anonymous); + spawn._generator = generator; + spawn._next(void 0); + return spawn.promise(); + }; + }; + + Promise.coroutine.addYieldHandler = PromiseSpawn.addYieldHandler; + + Promise.spawn = function Promise$Spawn(generatorFunction) { + deprecated("Promise.spawn is deprecated. Use Promise.coroutine instead."); + if (typeof generatorFunction !== "function") { + return apiRejection("generatorFunction must be a function"); + } + var spawn = new PromiseSpawn(generatorFunction, this, Promise.spawn); + var ret = spawn.promise(); + spawn._run(Promise.spawn); + return ret; + }; +}; + +},{"./errors.js":10,"./promise_spawn.js":24,"./util.js":39}],16:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = (function(){ + if (typeof this !== "undefined") { + return this; + } + if (typeof process !== "undefined" && + typeof global !== "undefined" && + typeof process.execPath === "string") { + return global; + } + if (typeof window !== "undefined" && + typeof document !== "undefined" && + typeof navigator !== "undefined" && navigator !== null && + typeof navigator.appName === "string") { + if(window.wrappedJSObject !== undefined){ + return window.wrappedJSObject; + } + return window; + } +})(); + +},{}],17:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function( + Promise, Promise$_CreatePromiseArray, PromiseArray, apiRejection) { + + var ASSERT = require("./assert.js"); + + function Promise$_mapper(values) { + var fn = this; + var receiver = void 0; + + if (typeof fn !== "function") { + receiver = fn.receiver; + fn = fn.fn; + } + var shouldDefer = false; + + var ret = new Array(values.length); + + if (receiver === void 0) { + for (var i = 0, len = values.length; i < len; ++i) { + var value = fn(values[i], i, len); + if (!shouldDefer) { + var maybePromise = Promise._cast(value, + Promise$_mapper, void 0); + if (maybePromise instanceof Promise) { + if (maybePromise.isFulfilled()) { + ret[i] = maybePromise._settledValue; + continue; + } + else { + shouldDefer = true; + } + value = maybePromise; + } + } + ret[i] = value; + } + } + else { + for (var i = 0, len = values.length; i < len; ++i) { + var value = fn.call(receiver, values[i], i, len); + if (!shouldDefer) { + var maybePromise = Promise._cast(value, + Promise$_mapper, void 0); + if (maybePromise instanceof Promise) { + if (maybePromise.isFulfilled()) { + ret[i] = maybePromise._settledValue; + continue; + } + else { + shouldDefer = true; + } + value = maybePromise; + } + } + ret[i] = value; + } + } + return shouldDefer + ? Promise$_CreatePromiseArray(ret, PromiseArray, + Promise$_mapper, void 0).promise() + : ret; + } + + function Promise$_Map(promises, fn, useBound, caller, ref) { + if (typeof fn !== "function") { + return apiRejection("fn must be a function"); + } + + if (useBound === true && promises._isBound()) { + fn = { + fn: fn, + receiver: promises._boundTo + }; + } + + var ret = Promise$_CreatePromiseArray( + promises, + PromiseArray, + caller, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0 + ).promise(); + + if (ref !== void 0) { + ref.ref = ret; + } + + return ret._then( + Promise$_mapper, + void 0, + void 0, + fn, + void 0, + caller + ); + } + + Promise.prototype.map = function Promise$map(fn, ref) { + return Promise$_Map(this, fn, true, this.map, ref); + }; + + Promise.map = function Promise$Map(promises, fn, ref) { + return Promise$_Map(promises, fn, false, Promise.map, ref); + }; +}; + +},{"./assert.js":2}],18:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise) { + var util = require("./util.js"); + var async = require("./async.js"); + var ASSERT = require("./assert.js"); + var tryCatch2 = util.tryCatch2; + var tryCatch1 = util.tryCatch1; + var errorObj = util.errorObj; + + function thrower(r) { + throw r; + } + + function Promise$_successAdapter(val, receiver) { + var nodeback = this; + var ret = tryCatch2(nodeback, receiver, null, val); + if (ret === errorObj) { + async.invokeLater(thrower, void 0, ret.e); + } + } + function Promise$_errorAdapter(reason, receiver) { + var nodeback = this; + var ret = tryCatch1(nodeback, receiver, reason); + if (ret === errorObj) { + async.invokeLater(thrower, void 0, ret.e); + } + } + + Promise.prototype.nodeify = function Promise$nodeify(nodeback) { + if (typeof nodeback == "function") { + this._then( + Promise$_successAdapter, + Promise$_errorAdapter, + void 0, + nodeback, + this._isBound() ? this._boundTo : null, + this.nodeify + ); + } + return this; + }; +}; + +},{"./assert.js":2,"./async.js":3,"./util.js":39}],19:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, isPromiseArrayProxy) { + var ASSERT = require("./assert.js"); + var util = require("./util.js"); + var async = require("./async.js"); + var errors = require("./errors.js"); + var tryCatch1 = util.tryCatch1; + var errorObj = util.errorObj; + + Promise.prototype.progressed = function Promise$progressed(handler) { + return this._then(void 0, void 0, handler, + void 0, void 0, this.progressed); + }; + + Promise.prototype._progress = function Promise$_progress(progressValue) { + if (this._isFollowingOrFulfilledOrRejected()) return; + this._progressUnchecked(progressValue); + + }; + + Promise.prototype._progressHandlerAt = + function Promise$_progressHandlerAt(index) { + if (index === 0) return this._progressHandler0; + return this[index + 2 - 5]; + }; + + Promise.prototype._doProgressWith = + function Promise$_doProgressWith(progression) { + var progressValue = progression.value; + var handler = progression.handler; + var promise = progression.promise; + var receiver = progression.receiver; + + this._pushContext(); + var ret = tryCatch1(handler, receiver, progressValue); + this._popContext(); + + if (ret === errorObj) { + if (ret.e != null && + ret.e.name !== "StopProgressPropagation") { + var trace = errors.canAttach(ret.e) + ? ret.e : new Error(ret.e + ""); + promise._attachExtraTrace(trace); + promise._progress(ret.e); + } + } + else if (Promise.is(ret)) { + ret._then(promise._progress, null, null, promise, void 0, + this._progress); + } + else { + promise._progress(ret); + } + }; + + + Promise.prototype._progressUnchecked = + function Promise$_progressUnchecked(progressValue) { + if (!this.isPending()) return; + var len = this._length(); + + for (var i = 0; i < len; i += 5) { + var handler = this._progressHandlerAt(i); + var promise = this._promiseAt(i); + if (!Promise.is(promise)) { + var receiver = this._receiverAt(i); + if (typeof handler === "function") { + handler.call(receiver, progressValue, promise); + } + else if (Promise.is(receiver) && receiver._isProxied()) { + receiver._progressUnchecked(progressValue); + } + else if (isPromiseArrayProxy(receiver, promise)) { + receiver._promiseProgressed(progressValue, promise); + } + continue; + } + + if (typeof handler === "function") { + async.invoke(this._doProgressWith, this, { + handler: handler, + promise: promise, + receiver: this._receiverAt(i), + value: progressValue + }); + } + else { + async.invoke(promise._progress, promise, progressValue); + } + } + }; +}; + +},{"./assert.js":2,"./async.js":3,"./errors.js":10,"./util.js":39}],20:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function() { +var global = require("./global.js"); +var ASSERT = require("./assert.js"); +var util = require("./util.js"); +var async = require("./async.js"); +var errors = require("./errors.js"); + +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {e: null}; + +var PromiseArray = require("./promise_array.js")(Promise, INTERNAL); +var CapturedTrace = require("./captured_trace.js")(); +var CatchFilter = require("./catch_filter.js")(NEXT_FILTER); +var PromiseResolver = require("./promise_resolver.js"); + +var isArray = util.isArray; + +var errorObj = util.errorObj; +var tryCatch1 = util.tryCatch1; +var tryCatch2 = util.tryCatch2; +var tryCatchApply = util.tryCatchApply; +var RangeError = errors.RangeError; +var TypeError = errors.TypeError; +var CancellationError = errors.CancellationError; +var TimeoutError = errors.TimeoutError; +var RejectionError = errors.RejectionError; +var originatesFromRejection = errors.originatesFromRejection; +var markAsOriginatingFromRejection = errors.markAsOriginatingFromRejection; +var canAttach = errors.canAttach; +var thrower = util.thrower; +var apiRejection = require("./errors_api_rejection")(Promise); + + +var makeSelfResolutionError = function Promise$_makeSelfResolutionError() { + return new TypeError("circular promise resolution chain"); +}; + +function isPromise(obj) { + if (obj === void 0) return false; + return obj instanceof Promise; +} + +function isPromiseArrayProxy(receiver, promiseSlotValue) { + if (receiver instanceof PromiseArray) { + return promiseSlotValue >= 0; + } + return false; +} + +function Promise(resolver) { + if (typeof resolver !== "function") { + throw new TypeError("the promise constructor requires a resolver function"); + } + if (this.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly"); + } + this._bitField = 0; + this._fulfillmentHandler0 = void 0; + this._rejectionHandler0 = void 0; + this._promise0 = void 0; + this._receiver0 = void 0; + this._settledValue = void 0; + this._boundTo = void 0; + if (resolver !== INTERNAL) this._resolveFromResolver(resolver); +} + +Promise.prototype.bind = function Promise$bind(thisArg) { + var ret = new Promise(INTERNAL); + if (debugging) ret._setTrace(this.bind, this); + ret._follow(this); + ret._setBoundTo(thisArg); + if (this._cancellable()) { + ret._setCancellable(); + ret._cancellationParent = this; + } + return ret; +}; + +Promise.prototype.toString = function Promise$toString() { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = +function Promise$catch(fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (typeof item === "function") { + catchInstances[j++] = item; + } + else { + var catchFilterTypeError = + new TypeError( + "A catch filter must be an error constructor " + + "or a filter function"); + + this._attachExtraTrace(catchFilterTypeError); + async.invoke(this._reject, this, catchFilterTypeError); + return; + } + } + catchInstances.length = j; + fn = arguments[i]; + + this._resetTrace(this.caught); + var catchFilter = new CatchFilter(catchInstances, fn, this); + return this._then(void 0, catchFilter.doFilter, void 0, + catchFilter, void 0, this.caught); + } + return this._then(void 0, fn, void 0, void 0, void 0, this.caught); +}; + +Promise.prototype.then = +function Promise$then(didFulfill, didReject, didProgress) { + return this._then(didFulfill, didReject, didProgress, + void 0, void 0, this.then); +}; + + +Promise.prototype.done = +function Promise$done(didFulfill, didReject, didProgress) { + var promise = this._then(didFulfill, didReject, didProgress, + void 0, void 0, this.done); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function Promise$spread(didFulfill, didReject) { + return this._then(didFulfill, didReject, void 0, + APPLY, void 0, this.spread); +}; + +Promise.prototype.isFulfilled = function Promise$isFulfilled() { + return (this._bitField & 268435456) > 0; +}; + + +Promise.prototype.isRejected = function Promise$isRejected() { + return (this._bitField & 134217728) > 0; +}; + +Promise.prototype.isPending = function Promise$isPending() { + return !this.isResolved(); +}; + + +Promise.prototype.isResolved = function Promise$isResolved() { + return (this._bitField & 402653184) > 0; +}; + + +Promise.prototype.isCancellable = function Promise$isCancellable() { + return !this.isResolved() && + this._cancellable(); +}; + +Promise.prototype.toJSON = function Promise$toJSON() { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: void 0, + rejectionReason: void 0 + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this._settledValue; + ret.isFulfilled = true; + } + else if (this.isRejected()) { + ret.rejectionReason = this._settledValue; + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function Promise$all() { + return Promise$_all(this, true, this.all); +}; + + +Promise.is = isPromise; + +function Promise$_all(promises, useBound, caller) { + return Promise$_CreatePromiseArray( + promises, + PromiseArray, + caller, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0 + ).promise(); +} +Promise.all = function Promise$All(promises) { + return Promise$_all(promises, false, Promise.all); +}; + +Promise.join = function Promise$Join() { + var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];} + return Promise$_CreatePromiseArray( + args, PromiseArray, Promise.join, void 0).promise(); +}; + +Promise.resolve = Promise.fulfilled = +function Promise$Resolve(value, caller) { + var ret = new Promise(INTERNAL); + if (debugging) ret._setTrace(typeof caller === "function" + ? caller + : Promise.resolve, void 0); + if (ret._tryFollow(value)) { + return ret; + } + ret._cleanValues(); + ret._setFulfilled(); + ret._settledValue = value; + return ret; +}; + +Promise.reject = Promise.rejected = function Promise$Reject(reason) { + var ret = new Promise(INTERNAL); + if (debugging) ret._setTrace(Promise.reject, void 0); + markAsOriginatingFromRejection(reason); + ret._cleanValues(); + ret._setRejected(); + ret._settledValue = reason; + if (!canAttach(reason)) { + var trace = new Error(reason + ""); + ret._setCarriedStackTrace(trace); + } + ret._ensurePossibleRejectionHandled(); + return ret; +}; + +Promise.prototype.error = function Promise$_error(fn) { + return this.caught(originatesFromRejection, fn); +}; + +Promise.prototype._resolveFromSyncValue = +function Promise$_resolveFromSyncValue(value, caller) { + if (value === errorObj) { + this._cleanValues(); + this._setRejected(); + this._settledValue = value.e; + this._ensurePossibleRejectionHandled(); + } + else { + var maybePromise = Promise._cast(value, caller, void 0); + if (maybePromise instanceof Promise) { + this._follow(maybePromise); + } + else { + this._cleanValues(); + this._setFulfilled(); + this._settledValue = value; + } + } +}; + +Promise.method = function Promise$_Method(fn) { + if (typeof fn !== "function") { + throw new TypeError("fn must be a function"); + } + return function Promise$_method() { + var value; + switch(arguments.length) { + case 0: value = tryCatch1(fn, this, void 0); break; + case 1: value = tryCatch1(fn, this, arguments[0]); break; + case 2: value = tryCatch2(fn, this, arguments[0], arguments[1]); break; + default: + var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];} + value = tryCatchApply(fn, args, this); break; + } + var ret = new Promise(INTERNAL); + if (debugging) ret._setTrace(Promise$_method, void 0); + ret._resolveFromSyncValue(value, Promise$_method); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function Promise$_Try(fn, args, ctx) { + + if (typeof fn !== "function") { + return apiRejection("fn must be a function"); + } + var value = isArray(args) + ? tryCatchApply(fn, args, ctx) + : tryCatch1(fn, ctx, args); + + var ret = new Promise(INTERNAL); + if (debugging) ret._setTrace(Promise.attempt, void 0); + ret._resolveFromSyncValue(value, Promise.attempt); + return ret; +}; + +Promise.defer = Promise.pending = function Promise$Defer(caller) { + var promise = new Promise(INTERNAL); + if (debugging) promise._setTrace(typeof caller === "function" + ? caller : Promise.defer, void 0); + return new PromiseResolver(promise); +}; + +Promise.bind = function Promise$Bind(thisArg) { + var ret = new Promise(INTERNAL); + if (debugging) ret._setTrace(Promise.bind, void 0); + ret._setFulfilled(); + ret._setBoundTo(thisArg); + return ret; +}; + +Promise.cast = function Promise$_Cast(obj, caller) { + if (typeof caller !== "function") { + caller = Promise.cast; + } + var ret = Promise._cast(obj, caller, void 0); + if (!(ret instanceof Promise)) { + return Promise.resolve(ret, caller); + } + return ret; +}; + +Promise.onPossiblyUnhandledRejection = +function Promise$OnPossiblyUnhandledRejection(fn) { + if (typeof fn === "function") { + CapturedTrace.possiblyUnhandledRejection = fn; + } + else { + CapturedTrace.possiblyUnhandledRejection = void 0; + } +}; + +var debugging = false || !!( + typeof process !== "undefined" && + typeof process.execPath === "string" && + typeof process.env === "object" && + (process.env["BLUEBIRD_DEBUG"] || + process.env["NODE_ENV"] === "development") +); + + +Promise.longStackTraces = function Promise$LongStackTraces() { + if (async.haveItemsQueued() && + debugging === false + ) { + throw new Error("cannot enable long stack traces after promises have been created"); + } + debugging = CapturedTrace.isSupported(); +}; + +Promise.hasLongStackTraces = function Promise$HasLongStackTraces() { + return debugging && CapturedTrace.isSupported(); +}; + +Promise.prototype._setProxyHandlers = +function Promise$_setProxyHandlers(receiver, promiseSlotValue) { + var index = this._length(); + + if (index >= 1048575 - 5) { + index = 0; + this._setLength(0); + } + if (index === 0) { + this._promise0 = promiseSlotValue; + this._receiver0 = receiver; + } + else { + var i = index - 5; + this[i + 3] = promiseSlotValue; + this[i + 4] = receiver; + this[i + 0] = + this[i + 1] = + this[i + 2] = void 0; + } + this._setLength(index + 5); +}; + +Promise.prototype._proxyPromiseArray = +function Promise$_proxyPromiseArray(promiseArray, index) { + this._setProxyHandlers(promiseArray, index); +}; + +Promise.prototype._proxyPromise = function Promise$_proxyPromise(promise) { + promise._setProxied(); + this._setProxyHandlers(promise, -1); +}; + +Promise.prototype._then = +function Promise$_then( + didFulfill, + didReject, + didProgress, + receiver, + internalData, + caller +) { + var haveInternalData = internalData !== void 0; + var ret = haveInternalData ? internalData : new Promise(INTERNAL); + + if (debugging && !haveInternalData) { + var haveSameContext = this._peekContext() === this._traceParent; + ret._traceParent = haveSameContext ? this._traceParent : this; + ret._setTrace(typeof caller === "function" + ? caller + : this._then, this); + } + + if (!haveInternalData && this._isBound()) { + ret._setBoundTo(this._boundTo); + } + + var callbackIndex = + this._addCallbacks(didFulfill, didReject, didProgress, ret, receiver); + + if (!haveInternalData && this._cancellable()) { + ret._setCancellable(); + ret._cancellationParent = this; + } + + if (this.isResolved()) { + async.invoke(this._queueSettleAt, this, callbackIndex); + } + + return ret; +}; + +Promise.prototype._length = function Promise$_length() { + return this._bitField & 1048575; +}; + +Promise.prototype._isFollowingOrFulfilledOrRejected = +function Promise$_isFollowingOrFulfilledOrRejected() { + return (this._bitField & 939524096) > 0; +}; + +Promise.prototype._isFollowing = function Promise$_isFollowing() { + return (this._bitField & 536870912) === 536870912; +}; + +Promise.prototype._setLength = function Promise$_setLength(len) { + this._bitField = (this._bitField & -1048576) | + (len & 1048575); +}; + +Promise.prototype._setFulfilled = function Promise$_setFulfilled() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._setRejected = function Promise$_setRejected() { + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._setFollowing = function Promise$_setFollowing() { + this._bitField = this._bitField | 536870912; +}; + +Promise.prototype._setIsFinal = function Promise$_setIsFinal() { + this._bitField = this._bitField | 33554432; +}; + +Promise.prototype._isFinal = function Promise$_isFinal() { + return (this._bitField & 33554432) > 0; +}; + +Promise.prototype._cancellable = function Promise$_cancellable() { + return (this._bitField & 67108864) > 0; +}; + +Promise.prototype._setCancellable = function Promise$_setCancellable() { + this._bitField = this._bitField | 67108864; +}; + +Promise.prototype._unsetCancellable = function Promise$_unsetCancellable() { + this._bitField = this._bitField & (~67108864); +}; + +Promise.prototype._setRejectionIsUnhandled = +function Promise$_setRejectionIsUnhandled() { + this._bitField = this._bitField | 2097152; +}; + +Promise.prototype._unsetRejectionIsUnhandled = +function Promise$_unsetRejectionIsUnhandled() { + this._bitField = this._bitField & (~2097152); +}; + +Promise.prototype._isRejectionUnhandled = +function Promise$_isRejectionUnhandled() { + return (this._bitField & 2097152) > 0; +}; + +Promise.prototype._setCarriedStackTrace = +function Promise$_setCarriedStackTrace(capturedTrace) { + this._bitField = this._bitField | 1048576; + this._fulfillmentHandler0 = capturedTrace; +}; + +Promise.prototype._unsetCarriedStackTrace = +function Promise$_unsetCarriedStackTrace() { + this._bitField = this._bitField & (~1048576); + this._fulfillmentHandler0 = void 0; +}; + +Promise.prototype._isCarryingStackTrace = +function Promise$_isCarryingStackTrace() { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._getCarriedStackTrace = +function Promise$_getCarriedStackTrace() { + return this._isCarryingStackTrace() + ? this._fulfillmentHandler0 + : void 0; +}; + +Promise.prototype._receiverAt = function Promise$_receiverAt(index) { + var ret; + if (index === 0) { + ret = this._receiver0; + } + else { + ret = this[index + 4 - 5]; + } + if (this._isBound() && ret === void 0) { + return this._boundTo; + } + return ret; +}; + +Promise.prototype._promiseAt = function Promise$_promiseAt(index) { + if (index === 0) return this._promise0; + return this[index + 3 - 5]; +}; + +Promise.prototype._fulfillmentHandlerAt = +function Promise$_fulfillmentHandlerAt(index) { + if (index === 0) return this._fulfillmentHandler0; + return this[index + 0 - 5]; +}; + +Promise.prototype._rejectionHandlerAt = +function Promise$_rejectionHandlerAt(index) { + if (index === 0) return this._rejectionHandler0; + return this[index + 1 - 5]; +}; + +Promise.prototype._unsetAt = function Promise$_unsetAt(index) { + if (index === 0) { + this._rejectionHandler0 = + this._progressHandler0 = + this._promise0 = + this._receiver0 = void 0; + if (!this._isCarryingStackTrace()) { + this._fulfillmentHandler0 = void 0; + } + } + else { + this[index - 5 + 0] = + this[index - 5 + 1] = + this[index - 5 + 2] = + this[index - 5 + 3] = + this[index - 5 + 4] = void 0; + } +}; + +Promise.prototype._resolveFromResolver = +function Promise$_resolveFromResolver(resolver) { + var promise = this; + var localDebugging = debugging; + if (localDebugging) { + this._setTrace(this._resolveFromResolver, void 0); + this._pushContext(); + } + function Promise$_resolver(val) { + if (promise._tryFollow(val)) { + return; + } + promise._fulfill(val); + } + function Promise$_rejecter(val) { + var trace = canAttach(val) ? val : new Error(val + ""); + promise._attachExtraTrace(trace); + markAsOriginatingFromRejection(val); + promise._reject(val, trace === val ? void 0 : trace); + } + var r = tryCatch2(resolver, void 0, Promise$_resolver, Promise$_rejecter); + if (localDebugging) this._popContext(); + + if (r !== void 0 && r === errorObj) { + var trace = canAttach(r.e) ? r.e : new Error(r.e + ""); + promise._reject(r.e, trace); + } +}; + +Promise.prototype._addCallbacks = function Promise$_addCallbacks( + fulfill, + reject, + progress, + promise, + receiver +) { + var index = this._length(); + + if (index >= 1048575 - 5) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + if (receiver !== void 0) this._receiver0 = receiver; + if (typeof fulfill === "function" && !this._isCarryingStackTrace()) + this._fulfillmentHandler0 = fulfill; + if (typeof reject === "function") this._rejectionHandler0 = reject; + if (typeof progress === "function") this._progressHandler0 = progress; + } + else { + var i = index - 5; + this[i + 3] = promise; + this[i + 4] = receiver; + this[i + 0] = typeof fulfill === "function" + ? fulfill : void 0; + this[i + 1] = typeof reject === "function" + ? reject : void 0; + this[i + 2] = typeof progress === "function" + ? progress : void 0; + } + this._setLength(index + 5); + return index; +}; + + + +Promise.prototype._setBoundTo = function Promise$_setBoundTo(obj) { + if (obj !== void 0) { + this._bitField = this._bitField | 8388608; + this._boundTo = obj; + } + else { + this._bitField = this._bitField & (~8388608); + } +}; + +Promise.prototype._isBound = function Promise$_isBound() { + return (this._bitField & 8388608) === 8388608; +}; + +Promise.prototype._spreadSlowCase = +function Promise$_spreadSlowCase(targetFn, promise, values, boundTo) { + var promiseForAll = + Promise$_CreatePromiseArray + (values, PromiseArray, this._spreadSlowCase, boundTo) + .promise() + ._then(function() { + return targetFn.apply(boundTo, arguments); + }, void 0, void 0, APPLY, void 0, this._spreadSlowCase); + + promise._follow(promiseForAll); +}; + +Promise.prototype._callSpread = +function Promise$_callSpread(handler, promise, value, localDebugging) { + var boundTo = this._isBound() ? this._boundTo : void 0; + if (isArray(value)) { + var caller = this._settlePromiseFromHandler; + for (var i = 0, len = value.length; i < len; ++i) { + if (isPromise(Promise._cast(value[i], caller, void 0))) { + this._spreadSlowCase(handler, promise, value, boundTo); + return; + } + } + } + if (localDebugging) promise._pushContext(); + return tryCatchApply(handler, value, boundTo); +}; + +Promise.prototype._callHandler = +function Promise$_callHandler( + handler, receiver, promise, value, localDebugging) { + var x; + if (receiver === APPLY && !this.isRejected()) { + x = this._callSpread(handler, promise, value, localDebugging); + } + else { + if (localDebugging) promise._pushContext(); + x = tryCatch1(handler, receiver, value); + } + if (localDebugging) promise._popContext(); + return x; +}; + +Promise.prototype._settlePromiseFromHandler = +function Promise$_settlePromiseFromHandler( + handler, receiver, value, promise +) { + if (!isPromise(promise)) { + handler.call(receiver, value, promise); + return; + } + + var localDebugging = debugging; + var x = this._callHandler(handler, receiver, + promise, value, localDebugging); + + if (promise._isFollowing()) return; + + if (x === errorObj || x === promise || x === NEXT_FILTER) { + var err = x === promise + ? makeSelfResolutionError() + : x.e; + var trace = canAttach(err) ? err : new Error(err + ""); + if (x !== NEXT_FILTER) promise._attachExtraTrace(trace); + promise._rejectUnchecked(err, trace); + } + else { + var castValue = Promise._cast(x, + localDebugging ? this._settlePromiseFromHandler : void 0, + promise); + + if (isPromise(castValue)) { + if (castValue.isRejected() && + !castValue._isCarryingStackTrace() && + !canAttach(castValue._settledValue)) { + var trace = new Error(castValue._settledValue + ""); + promise._attachExtraTrace(trace); + castValue._setCarriedStackTrace(trace); + } + promise._follow(castValue); + if (castValue._cancellable()) { + promise._cancellationParent = castValue; + promise._setCancellable(); + } + } + else { + promise._fulfillUnchecked(x); + } + } +}; + +Promise.prototype._follow = +function Promise$_follow(promise) { + this._setFollowing(); + + if (promise.isPending()) { + if (promise._cancellable() ) { + this._cancellationParent = promise; + this._setCancellable(); + } + promise._proxyPromise(this); + } + else if (promise.isFulfilled()) { + this._fulfillUnchecked(promise._settledValue); + } + else { + this._rejectUnchecked(promise._settledValue, + promise._getCarriedStackTrace()); + } + + if (promise._isRejectionUnhandled()) promise._unsetRejectionIsUnhandled(); + + if (debugging && + promise._traceParent == null) { + promise._traceParent = this; + } +}; + +Promise.prototype._tryFollow = +function Promise$_tryFollow(value) { + if (this._isFollowingOrFulfilledOrRejected() || + value === this) { + return false; + } + var maybePromise = Promise._cast(value, this._tryFollow, void 0); + if (!isPromise(maybePromise)) { + return false; + } + this._follow(maybePromise); + return true; +}; + +Promise.prototype._resetTrace = function Promise$_resetTrace(caller) { + if (debugging) { + var context = this._peekContext(); + var isTopLevel = context === void 0; + this._trace = new CapturedTrace( + typeof caller === "function" + ? caller + : this._resetTrace, + isTopLevel + ); + } +}; + +Promise.prototype._setTrace = function Promise$_setTrace(caller, parent) { + if (debugging) { + var context = this._peekContext(); + this._traceParent = context; + var isTopLevel = context === void 0; + if (parent !== void 0 && + parent._traceParent === context) { + this._trace = parent._trace; + } + else { + this._trace = new CapturedTrace( + typeof caller === "function" + ? caller + : this._setTrace, + isTopLevel + ); + } + } + return this; +}; + +Promise.prototype._attachExtraTrace = +function Promise$_attachExtraTrace(error) { + if (debugging) { + var promise = this; + var stack = error.stack; + stack = typeof stack === "string" + ? stack.split("\n") : []; + var headerLineCount = 1; + + while(promise != null && + promise._trace != null) { + stack = CapturedTrace.combine( + stack, + promise._trace.stack.split("\n") + ); + promise = promise._traceParent; + } + + var max = Error.stackTraceLimit + headerLineCount; + var len = stack.length; + if (len > max) { + stack.length = max; + } + if (stack.length <= headerLineCount) { + error.stack = "(No stack trace)"; + } + else { + error.stack = stack.join("\n"); + } + } +}; + +Promise.prototype._cleanValues = function Promise$_cleanValues() { + if (this._cancellable()) { + this._cancellationParent = void 0; + } +}; + +Promise.prototype._fulfill = function Promise$_fulfill(value) { + if (this._isFollowingOrFulfilledOrRejected()) return; + this._fulfillUnchecked(value); +}; + +Promise.prototype._reject = +function Promise$_reject(reason, carriedStackTrace) { + if (this._isFollowingOrFulfilledOrRejected()) return; + this._rejectUnchecked(reason, carriedStackTrace); +}; + +Promise.prototype._settlePromiseAt = function Promise$_settlePromiseAt(index) { + var handler = this.isFulfilled() + ? this._fulfillmentHandlerAt(index) + : this._rejectionHandlerAt(index); + + var value = this._settledValue; + var receiver = this._receiverAt(index); + var promise = this._promiseAt(index); + + if (typeof handler === "function") { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + else { + var done = false; + var isFulfilled = this.isFulfilled(); + if (receiver !== void 0) { + if (receiver instanceof Promise && + receiver._isProxied()) { + receiver._unsetProxied(); + + if (isFulfilled) receiver._fulfillUnchecked(value); + else receiver._rejectUnchecked(value, + this._getCarriedStackTrace()); + done = true; + } + else if (isPromiseArrayProxy(receiver, promise)) { + + if (isFulfilled) receiver._promiseFulfilled(value, promise); + else receiver._promiseRejected(value, promise); + + done = true; + } + } + + if (!done) { + + if (isFulfilled) promise._fulfill(value); + else promise._reject(value, this._getCarriedStackTrace()); + + } + } + + if (index >= 256) { + this._queueGC(); + } +}; + +Promise.prototype._isProxied = function Promise$_isProxied() { + return (this._bitField & 4194304) === 4194304; +}; + +Promise.prototype._setProxied = function Promise$_setProxied() { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._unsetProxied = function Promise$_unsetProxied() { + this._bitField = this._bitField & (~4194304); +}; + +Promise.prototype._isGcQueued = function Promise$_isGcQueued() { + return (this._bitField & -1073741824) === -1073741824; +}; + +Promise.prototype._setGcQueued = function Promise$_setGcQueued() { + this._bitField = this._bitField | -1073741824; +}; + +Promise.prototype._unsetGcQueued = function Promise$_unsetGcQueued() { + this._bitField = this._bitField & (~-1073741824); +}; + +Promise.prototype._queueGC = function Promise$_queueGC() { + if (this._isGcQueued()) return; + this._setGcQueued(); + async.invokeLater(this._gc, this, void 0); +}; + +Promise.prototype._gc = function Promise$gc() { + var len = this._length(); + this._unsetAt(0); + for (var i = 0; i < len; i++) { + delete this[i]; + } + this._setLength(0); + this._unsetGcQueued(); +}; + +Promise.prototype._queueSettleAt = function Promise$_queueSettleAt(index) { + if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled(); + async.invoke(this._settlePromiseAt, this, index); +}; + +Promise.prototype._fulfillUnchecked = +function Promise$_fulfillUnchecked(value) { + if (!this.isPending()) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._rejectUnchecked(err, void 0); + } + this._cleanValues(); + this._setFulfilled(); + this._settledValue = value; + var len = this._length(); + + if (len > 0) { + async.invoke(this._fulfillPromises, this, len); + } +}; + +Promise.prototype._rejectUncheckedCheckError = +function Promise$_rejectUncheckedCheckError(reason) { + var trace = canAttach(reason) ? reason : new Error(reason + ""); + this._rejectUnchecked(reason, trace === reason ? void 0 : trace); +}; + +Promise.prototype._rejectUnchecked = +function Promise$_rejectUnchecked(reason, trace) { + if (!this.isPending()) return; + if (reason === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._rejectUnchecked(err); + } + this._cleanValues(); + this._setRejected(); + this._settledValue = reason; + + if (this._isFinal()) { + async.invokeLater(thrower, void 0, trace === void 0 ? reason : trace); + return; + } + var len = this._length(); + + if (trace !== void 0) this._setCarriedStackTrace(trace); + + if (len > 0) { + async.invoke(this._rejectPromises, this, len); + } + else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._rejectPromises = function Promise$_rejectPromises(len) { + len = this._length(); + for (var i = 0; i < len; i+= 5) { + this._settlePromiseAt(i); + } + this._unsetCarriedStackTrace(); +}; + +Promise.prototype._fulfillPromises = function Promise$_fulfillPromises(len) { + len = this._length(); + for (var i = 0; i < len; i+= 5) { + this._settlePromiseAt(i); + } +}; + +Promise.prototype._ensurePossibleRejectionHandled = +function Promise$_ensurePossibleRejectionHandled() { + this._setRejectionIsUnhandled(); + if (CapturedTrace.possiblyUnhandledRejection !== void 0) { + async.invokeLater(this._notifyUnhandledRejection, this, void 0); + } +}; + +Promise.prototype._notifyUnhandledRejection = +function Promise$_notifyUnhandledRejection() { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue; + var trace = this._getCarriedStackTrace(); + + this._unsetRejectionIsUnhandled(); + + if (trace !== void 0) { + this._unsetCarriedStackTrace(); + reason = trace; + } + if (typeof CapturedTrace.possiblyUnhandledRejection === "function") { + CapturedTrace.possiblyUnhandledRejection(reason, this); + } + } +}; + +var contextStack = []; +Promise.prototype._peekContext = function Promise$_peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return void 0; + +}; + +Promise.prototype._pushContext = function Promise$_pushContext() { + if (!debugging) return; + contextStack.push(this); +}; + +Promise.prototype._popContext = function Promise$_popContext() { + if (!debugging) return; + contextStack.pop(); +}; + +function Promise$_CreatePromiseArray( + promises, PromiseArrayConstructor, caller, boundTo) { + + var list = null; + if (isArray(promises)) { + list = promises; + } + else { + list = Promise._cast(promises, caller, void 0); + if (list !== promises) { + list._setBoundTo(boundTo); + } + else if (!isPromise(list)) { + list = null; + } + } + if (list !== null) { + return new PromiseArrayConstructor( + list, + typeof caller === "function" + ? caller + : Promise$_CreatePromiseArray, + boundTo + ); + } + return { + promise: function() {return apiRejection("expecting an array, a promise or a thenable");} + }; +} + +var old = global.Promise; + +Promise.noConflict = function() { + if (global.Promise === Promise) { + global.Promise = old; + } + return Promise; +}; + +if (!CapturedTrace.isSupported()) { + Promise.longStackTraces = function(){}; + debugging = false; +} + +Promise._makeSelfResolutionError = makeSelfResolutionError; +require("./finally.js")(Promise, NEXT_FILTER); +require("./direct_resolve.js")(Promise); +require("./thenables.js")(Promise, INTERNAL); +Promise.RangeError = RangeError; +Promise.CancellationError = CancellationError; +Promise.TimeoutError = TimeoutError; +Promise.TypeError = TypeError; +Promise.RejectionError = RejectionError; +require('./timers.js')(Promise,INTERNAL); +require('./synchronous_inspection.js')(Promise); +require('./any.js')(Promise,Promise$_CreatePromiseArray,PromiseArray); +require('./race.js')(Promise,INTERNAL); +require('./call_get.js')(Promise); +require('./filter.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection); +require('./generators.js')(Promise,apiRejection,INTERNAL); +require('./map.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection); +require('./nodeify.js')(Promise); +require('./promisify.js')(Promise,INTERNAL); +require('./props.js')(Promise,PromiseArray); +require('./reduce.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection,INTERNAL); +require('./settle.js')(Promise,Promise$_CreatePromiseArray,PromiseArray); +require('./some.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection); +require('./progress.js')(Promise,isPromiseArrayProxy); +require('./cancel.js')(Promise,INTERNAL); + +Promise.prototype = Promise.prototype; +return Promise; + +}; + +},{"./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){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var ASSERT = require("./assert.js"); +var canAttach = require("./errors.js").canAttach; +var util = require("./util.js"); +var async = require("./async.js"); +var hasOwn = {}.hasOwnProperty; +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -1: return void 0; + case -2: return []; + case -3: return {}; + } +} + +function PromiseArray(values, caller, boundTo) { + var promise = this._promise = new Promise(INTERNAL); + var parent = void 0; + if (Promise.is(values)) { + parent = values; + if (values._cancellable()) { + promise._setCancellable(); + promise._cancellationParent = values; + } + if (values._isBound()) { + promise._setBoundTo(boundTo); + } + } + promise._setTrace(caller, parent); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(void 0, -2); +} +PromiseArray.PropertiesPromiseArray = function() {}; + +PromiseArray.prototype.length = function PromiseArray$length() { + return this._length; +}; + +PromiseArray.prototype.promise = function PromiseArray$promise() { + return this._promise; +}; + +PromiseArray.prototype._init = +function PromiseArray$_init(_, resolveValueIfEmpty) { + var values = this._values; + if (Promise.is(values)) { + if (values.isFulfilled()) { + values = values._settledValue; + if (!isArray(values)) { + var err = new Promise.TypeError("expecting an array, a promise or a thenable"); + this.__hardReject__(err); + return; + } + this._values = values; + } + else if (values.isPending()) { + values._then( + this._init, + this._reject, + void 0, + this, + resolveValueIfEmpty, + this.constructor + ); + return; + } + else { + this._reject(values._settledValue); + return; + } + } + + if (values.length === 0) { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + return; + } + var len = values.length; + var newLen = len; + var newValues; + if (this instanceof PromiseArray.PropertiesPromiseArray) { + newValues = this._values; + } + else { + newValues = new Array(len); + } + var isDirectScanNeeded = false; + for (var i = 0; i < len; ++i) { + var promise = values[i]; + if (promise === void 0 && !hasOwn.call(values, i)) { + newLen--; + continue; + } + var maybePromise = Promise._cast(promise, void 0, void 0); + if (maybePromise instanceof Promise && + maybePromise.isPending()) { + maybePromise._proxyPromiseArray(this, i); + } + else { + isDirectScanNeeded = true; + } + newValues[i] = maybePromise; + } + if (newLen === 0) { + if (resolveValueIfEmpty === -2) { + this._resolve(newValues); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._values = newValues; + this._length = newLen; + if (isDirectScanNeeded) { + var scanMethod = newLen === len + ? this._scanDirectValues + : this._scanDirectValuesHoled; + async.invoke(scanMethod, this, len); + } +}; + +PromiseArray.prototype._settlePromiseAt = +function PromiseArray$_settlePromiseAt(index) { + var value = this._values[index]; + if (!Promise.is(value)) { + this._promiseFulfilled(value, index); + } + else if (value.isFulfilled()) { + this._promiseFulfilled(value._settledValue, index); + } + else if (value.isRejected()) { + this._promiseRejected(value._settledValue, index); + } +}; + +PromiseArray.prototype._scanDirectValuesHoled = +function PromiseArray$_scanDirectValuesHoled(len) { + for (var i = 0; i < len; ++i) { + if (this._isResolved()) { + break; + } + if (hasOwn.call(this._values, i)) { + this._settlePromiseAt(i); + } + } +}; + +PromiseArray.prototype._scanDirectValues = +function PromiseArray$_scanDirectValues(len) { + for (var i = 0; i < len; ++i) { + if (this._isResolved()) { + break; + } + this._settlePromiseAt(i); + } +}; + +PromiseArray.prototype._isResolved = function PromiseArray$_isResolved() { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function PromiseArray$_resolve(value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype.__hardReject__ = +PromiseArray.prototype._reject = function PromiseArray$_reject(reason) { + this._values = null; + var trace = canAttach(reason) ? reason : new Error(reason + ""); + this._promise._attachExtraTrace(trace); + this._promise._reject(reason, trace); +}; + +PromiseArray.prototype._promiseProgressed = +function PromiseArray$_promiseProgressed(progressValue, index) { + if (this._isResolved()) return; + this._promise._progress({ + index: index, + value: progressValue + }); +}; + + +PromiseArray.prototype._promiseFulfilled = +function PromiseArray$_promiseFulfilled(value, index) { + if (this._isResolved()) return; + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + } +}; + +PromiseArray.prototype._promiseRejected = +function PromiseArray$_promiseRejected(reason, index) { + if (this._isResolved()) return; + this._totalResolved++; + this._reject(reason); +}; + +return PromiseArray; +}; + +},{"./assert.js":2,"./async.js":3,"./errors.js":10,"./util.js":39}],22:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var TypeError = require("./errors.js").TypeError; + +function PromiseInspection(promise) { + if (promise !== void 0) { + this._bitField = promise._bitField; + this._settledValue = promise.isResolved() + ? promise._settledValue + : void 0; + } + else { + this._bitField = 0; + this._settledValue = void 0; + } +} +PromiseInspection.prototype.isFulfilled = +function PromiseInspection$isFulfilled() { + return (this._bitField & 268435456) > 0; +}; + +PromiseInspection.prototype.isRejected = +function PromiseInspection$isRejected() { + return (this._bitField & 134217728) > 0; +}; + +PromiseInspection.prototype.isPending = function PromiseInspection$isPending() { + return (this._bitField & 402653184) === 0; +}; + +PromiseInspection.prototype.value = function PromiseInspection$value() { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise"); + } + return this._settledValue; +}; + +PromiseInspection.prototype.error = function PromiseInspection$error() { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise"); + } + return this._settledValue; +}; + +module.exports = PromiseInspection; + +},{"./errors.js":10}],23:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var util = require("./util.js"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = require("./errors.js"); +var TimeoutError = errors.TimeoutError; +var RejectionError = errors.RejectionError; +var async = require("./async.js"); +var haveGetters = util.haveGetters; +var es5 = require("./es5.js"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +function wrapAsRejectionError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new RejectionError(obj); + } + else { + ret = obj; + } + errors.markAsOriginatingFromRejection(ret); + return ret; +} + +function nodebackForPromise(promise) { + function PromiseResolver$_callback(err, value) { + if (promise === null) return; + + if (err) { + var wrapped = wrapAsRejectionError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } + else { + if (arguments.length > 2) { + var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} + promise._fulfill(args); + } + else { + promise._fulfill(value); + } + } + + promise = null; + } + return PromiseResolver$_callback; +} + + +var PromiseResolver; +if (!haveGetters) { + PromiseResolver = function PromiseResolver(promise) { + this.promise = promise; + this.asCallback = nodebackForPromise(promise); + this.callback = this.asCallback; + }; +} +else { + PromiseResolver = function PromiseResolver(promise) { + this.promise = promise; + }; +} +if (haveGetters) { + var prop = { + get: function() { + return nodebackForPromise(this.promise); + } + }; + es5.defineProperty(PromiseResolver.prototype, "asCallback", prop); + es5.defineProperty(PromiseResolver.prototype, "callback", prop); +} + +PromiseResolver._nodebackForPromise = nodebackForPromise; + +PromiseResolver.prototype.toString = function PromiseResolver$toString() { + return "[object PromiseResolver]"; +}; + +PromiseResolver.prototype.resolve = +PromiseResolver.prototype.fulfill = function PromiseResolver$resolve(value) { + var promise = this.promise; + if (promise._tryFollow(value)) { + return; + } + async.invoke(promise._fulfill, promise, value); +}; + +PromiseResolver.prototype.reject = function PromiseResolver$reject(reason) { + var promise = this.promise; + errors.markAsOriginatingFromRejection(reason); + var trace = errors.canAttach(reason) ? reason : new Error(reason + ""); + promise._attachExtraTrace(trace); + async.invoke(promise._reject, promise, reason); + if (trace !== reason) { + async.invoke(this._setCarriedStackTrace, this, trace); + } +}; + +PromiseResolver.prototype.progress = +function PromiseResolver$progress(value) { + async.invoke(this.promise._progress, this.promise, value); +}; + +PromiseResolver.prototype.cancel = function PromiseResolver$cancel() { + async.invoke(this.promise.cancel, this.promise, void 0); +}; + +PromiseResolver.prototype.timeout = function PromiseResolver$timeout() { + this.reject(new TimeoutError("timeout")); +}; + +PromiseResolver.prototype.isResolved = function PromiseResolver$isResolved() { + return this.promise.isResolved(); +}; + +PromiseResolver.prototype.toJSON = function PromiseResolver$toJSON() { + return this.promise.toJSON(); +}; + +PromiseResolver.prototype._setCarriedStackTrace = +function PromiseResolver$_setCarriedStackTrace(trace) { + if (this.promise.isRejected()) { + this.promise._setCarriedStackTrace(trace); + } +}; + +module.exports = PromiseResolver; + +},{"./async.js":3,"./errors.js":10,"./es5.js":12,"./util.js":39}],24:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var errors = require("./errors.js"); +var ASSERT = require("./assert.js"); +var TypeError = errors.TypeError; +var util = require("./util.js"); +var isArray = util.isArray; +var errorObj = util.errorObj; +var tryCatch1 = util.tryCatch1; +var yieldHandlers = []; + +function promiseFromYieldHandler(value) { + var _yieldHandlers = yieldHandlers; + var _errorObj = errorObj; + var _Promise = Promise; + var len = _yieldHandlers.length; + for (var i = 0; i < len; ++i) { + var result = tryCatch1(_yieldHandlers[i], void 0, value); + if (result === _errorObj) { + return _Promise.reject(_errorObj.e); + } + var maybePromise = _Promise._cast(result, + promiseFromYieldHandler, void 0); + if (maybePromise instanceof _Promise) return maybePromise; + } + return null; +} + +function PromiseSpawn(generatorFunction, receiver, caller) { + var promise = this._promise = new Promise(INTERNAL); + promise._setTrace(caller, void 0); + this._generatorFunction = generatorFunction; + this._receiver = receiver; + this._generator = void 0; +} + +PromiseSpawn.prototype.promise = function PromiseSpawn$promise() { + return this._promise; +}; + +PromiseSpawn.prototype._run = function PromiseSpawn$_run() { + this._generator = this._generatorFunction.call(this._receiver); + this._receiver = + this._generatorFunction = void 0; + this._next(void 0); +}; + +PromiseSpawn.prototype._continue = function PromiseSpawn$_continue(result) { + if (result === errorObj) { + this._generator = void 0; + var trace = errors.canAttach(result.e) + ? result.e : new Error(result.e + ""); + this._promise._attachExtraTrace(trace); + this._promise._reject(result.e, trace); + return; + } + + var value = result.value; + if (result.done === true) { + this._generator = void 0; + if (!this._promise._tryFollow(value)) { + this._promise._fulfill(value); + } + } + else { + var maybePromise = Promise._cast(value, PromiseSpawn$_continue, void 0); + if (!(maybePromise instanceof Promise)) { + if (isArray(maybePromise)) { + maybePromise = Promise.all(maybePromise); + } + else { + maybePromise = promiseFromYieldHandler(maybePromise); + } + if (maybePromise === null) { + this._throw(new TypeError("A value was yielded that could not be treated as a promise")); + return; + } + } + maybePromise._then( + this._next, + this._throw, + void 0, + this, + null, + void 0 + ); + } +}; + +PromiseSpawn.prototype._throw = function PromiseSpawn$_throw(reason) { + if (errors.canAttach(reason)) + this._promise._attachExtraTrace(reason); + this._continue( + tryCatch1(this._generator["throw"], this._generator, reason) + ); +}; + +PromiseSpawn.prototype._next = function PromiseSpawn$_next(value) { + this._continue( + tryCatch1(this._generator.next, this._generator, value) + ); +}; + +PromiseSpawn.addYieldHandler = function PromiseSpawn$AddYieldHandler(fn) { + if (typeof fn !== "function") throw new TypeError("fn must be a function"); + yieldHandlers.push(fn); +}; + +return PromiseSpawn; +}; + +},{"./assert.js":2,"./errors.js":10,"./util.js":39}],25:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var THIS = {}; +var util = require("./util.js"); +var es5 = require("./es5.js"); +var nodebackForPromise = require("./promise_resolver.js") + ._nodebackForPromise; +var withAppended = util.withAppended; +var maybeWrapAsError = util.maybeWrapAsError; +var canEvaluate = util.canEvaluate; +var notEnumerableProp = util.notEnumerableProp; +var deprecated = util.deprecated; +var ASSERT = require("./assert.js"); + + +var roriginal = new RegExp("__beforePromisified__" + "$"); +var hasProp = {}.hasOwnProperty; +function isPromisified(fn) { + return fn.__isPromisified__ === true; +} +var inheritedMethods = (function() { + if (es5.isES5) { + var create = Object.create; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + return function(cur) { + var original = cur; + var ret = []; + var visitedKeys = create(null); + while (cur !== null) { + var keys = es5.keys(cur); + for (var i = 0, len = keys.length; i < len; ++i) { + var key = keys[i]; + if (visitedKeys[key] || + roriginal.test(key) || + hasProp.call(original, key + "__beforePromisified__") + ) { + continue; + } + visitedKeys[key] = true; + var desc = getOwnPropertyDescriptor(cur, key); + if (desc != null && + typeof desc.value === "function" && + !isPromisified(desc.value)) { + ret.push(key, desc.value); + } + } + cur = es5.getPrototypeOf(cur); + } + return ret; + }; + } + else { + return function(obj) { + var ret = []; + /*jshint forin:false */ + for (var key in obj) { + if (roriginal.test(key) || + hasProp.call(obj, key + "__beforePromisified__")) { + continue; + } + var fn = obj[key]; + if (typeof fn === "function" && + !isPromisified(fn)) { + ret.push(key, fn); + } + } + return ret; + }; + } +})(); + +function switchCaseArgumentOrder(likelyArgumentCount) { + var ret = [likelyArgumentCount]; + var min = Math.max(0, likelyArgumentCount - 1 - 5); + for(var i = likelyArgumentCount - 1; i >= min; --i) { + if (i === likelyArgumentCount) continue; + ret.push(i); + } + for(var i = likelyArgumentCount + 1; i <= 5; ++i) { + ret.push(i); + } + return ret; +} + +function parameterDeclaration(parameterCount) { + var ret = new Array(parameterCount); + for(var i = 0; i < ret.length; ++i) { + ret[i] = "_arg" + i; + } + return ret.join(", "); +} + +function parameterCount(fn) { + if (typeof fn.length === "number") { + return Math.max(Math.min(fn.length, 1023 + 1), 0); + } + return 0; +} + +function propertyAccess(id) { + var rident = /^[a-z$_][a-z$_0-9]*$/i; + + if (rident.test(id)) { + return "." + id; + } + else return "['" + id.replace(/(['\\])/g, "\\$1") + "']"; +} + +function makeNodePromisifiedEval(callback, receiver, originalName, fn) { + var newParameterCount = Math.max(0, parameterCount(fn) - 1); + var argumentOrder = switchCaseArgumentOrder(newParameterCount); + + var callbackName = (typeof originalName === "string" ? + originalName + "Async" : + "promisified"); + + function generateCallForArgumentCount(count) { + var args = new Array(count); + for (var i = 0, len = args.length; i < len; ++i) { + args[i] = "arguments[" + i + "]"; + } + var comma = count > 0 ? "," : ""; + + if (typeof callback === "string" && + receiver === THIS) { + return "this" + propertyAccess(callback) + "("+args.join(",") + + comma +" fn);"+ + "break;"; + } + return (receiver === void 0 + ? "callback("+args.join(",")+ comma +" fn);" + : "callback.call("+(receiver === THIS + ? "this" + : "receiver")+", "+args.join(",") + comma + " fn);") + + "break;"; + } + + function generateArgumentSwitchCase() { + var ret = ""; + for(var i = 0; i < argumentOrder.length; ++i) { + ret += "case " + argumentOrder[i] +":" + + generateCallForArgumentCount(argumentOrder[i]); + } + ret += "default: var args = new Array(len + 1);" + + "var i = 0;" + + "for (var i = 0; i < len; ++i) { " + + " args[i] = arguments[i];" + + "}" + + "args[i] = fn;" + + + (typeof callback === "string" + ? "this" + propertyAccess(callback) + ".apply(" + : "callback.apply(") + + + (receiver === THIS ? "this" : "receiver") + + ", args); break;"; + return ret; + } + + return new Function("Promise", "callback", "receiver", + "withAppended", "maybeWrapAsError", "nodebackForPromise", + "INTERNAL", + "var ret = function " + callbackName + + "(" + parameterDeclaration(newParameterCount) + ") {\"use strict\";" + + "var len = arguments.length;" + + "var promise = new Promise(INTERNAL);"+ + "promise._setTrace(" + callbackName + ", void 0);" + + "var fn = nodebackForPromise(promise);"+ + "try {" + + "switch(len) {" + + generateArgumentSwitchCase() + + "}" + + "}" + + "catch(e){ " + + "var wrapped = maybeWrapAsError(e);" + + "promise._attachExtraTrace(wrapped);" + + "promise._reject(wrapped);" + + "}" + + "return promise;" + + "" + + "}; ret.__isPromisified__ = true; return ret;" + )(Promise, callback, receiver, withAppended, + maybeWrapAsError, nodebackForPromise, INTERNAL); +} + +function makeNodePromisifiedClosure(callback, receiver) { + function promisified() { + var _receiver = receiver; + if (receiver === THIS) _receiver = this; + if (typeof callback === "string") { + callback = _receiver[callback]; + } + var promise = new Promise(INTERNAL); + promise._setTrace(promisified, void 0); + var fn = nodebackForPromise(promise); + try { + callback.apply(_receiver, withAppended(arguments, fn)); + } + catch(e) { + var wrapped = maybeWrapAsError(e); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } + return promise; + } + promisified.__isPromisified__ = true; + return promisified; +} + +var makeNodePromisified = canEvaluate + ? makeNodePromisifiedEval + : makeNodePromisifiedClosure; + +function f(){} +function _promisify(callback, receiver, isAll) { + if (isAll) { + var methods = inheritedMethods(callback); + for (var i = 0, len = methods.length; i < len; i+= 2) { + var key = methods[i]; + var fn = methods[i+1]; + var originalKey = key + "__beforePromisified__"; + var promisifiedKey = key + "Async"; + notEnumerableProp(callback, originalKey, fn); + callback[promisifiedKey] = + makeNodePromisified(originalKey, THIS, + key, fn); + } + if (methods.length > 16) f.prototype = callback; + return callback; + } + else { + return makeNodePromisified(callback, receiver, void 0, callback); + } +} + +Promise.promisify = function Promise$Promisify(fn, receiver) { + if (typeof fn === "object" && fn !== null) { + deprecated("Promise.promisify for promisifying entire objects is deprecated. Use Promise.promisifyAll instead."); + return _promisify(fn, receiver, true); + } + if (typeof fn !== "function") { + throw new TypeError("fn must be a function"); + } + if (isPromisified(fn)) { + return fn; + } + return _promisify( + fn, + arguments.length < 2 ? THIS : receiver, + false); +}; + +Promise.promisifyAll = function Promise$PromisifyAll(target) { + if (typeof target !== "function" && typeof target !== "object") { + throw new TypeError("the target of promisifyAll must be an object or a function"); + } + return _promisify(target, void 0, true); +}; +}; + + +},{"./assert.js":2,"./es5.js":12,"./promise_resolver.js":23,"./util.js":39}],26:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, PromiseArray) { +var ASSERT = require("./assert.js"); +var util = require("./util.js"); +var inherits = util.inherits; +var es5 = require("./es5.js"); + +function PropertiesPromiseArray(obj, caller, boundTo) { + var keys = es5.keys(obj); + var values = new Array(keys.length); + for (var i = 0, len = values.length; i < len; ++i) { + values[i] = obj[keys[i]]; + } + this.constructor$(values, caller, boundTo); + if (!this._isResolved()) { + for (var i = 0, len = keys.length; i < len; ++i) { + values.push(keys[i]); + } + } +} +inherits(PropertiesPromiseArray, PromiseArray); + +PropertiesPromiseArray.prototype._init = +function PropertiesPromiseArray$_init() { + this._init$(void 0, -3) ; +}; + +PropertiesPromiseArray.prototype._promiseFulfilled = +function PropertiesPromiseArray$_promiseFulfilled(value, index) { + if (this._isResolved()) return; + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + var val = {}; + var keyOffset = this.length(); + for (var i = 0, len = this.length(); i < len; ++i) { + val[this._values[i + keyOffset]] = this._values[i]; + } + this._resolve(val); + } +}; + +PropertiesPromiseArray.prototype._promiseProgressed = +function PropertiesPromiseArray$_promiseProgressed(value, index) { + if (this._isResolved()) return; + + this._promise._progress({ + key: this._values[index + this.length()], + value: value + }); +}; + +PromiseArray.PropertiesPromiseArray = PropertiesPromiseArray; + +return PropertiesPromiseArray; +}; + +},{"./assert.js":2,"./es5.js":12,"./util.js":39}],27:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, PromiseArray) { + var PropertiesPromiseArray = require("./properties_promise_array.js")( + Promise, PromiseArray); + var util = require("./util.js"); + var apiRejection = require("./errors_api_rejection")(Promise); + var isObject = util.isObject; + + function Promise$_Props(promises, useBound, caller) { + var ret; + var castValue = Promise._cast(promises, caller, void 0); + + if (!isObject(castValue)) { + return apiRejection("cannot await properties of a non-object"); + } + else if (Promise.is(castValue)) { + ret = castValue._then(Promise.props, void 0, void 0, + void 0, void 0, caller); + } + else { + ret = new PropertiesPromiseArray( + castValue, + caller, + useBound === true && castValue._isBound() + ? castValue._boundTo + : void 0 + ).promise(); + useBound = false; + } + if (useBound === true && castValue._isBound()) { + ret._setBoundTo(castValue._boundTo); + } + return ret; + } + + Promise.prototype.props = function Promise$props() { + return Promise$_Props(this, true, this.props); + }; + + Promise.props = function Promise$Props(promises) { + return Promise$_Props(promises, false, Promise.props); + }; +}; + +},{"./errors_api_rejection":11,"./properties_promise_array.js":26,"./util.js":39}],28:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var ASSERT = require("./assert.js"); +function arrayCopy(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + } +} + +function pow2AtLeast(n) { + n = n >>> 0; + n = n - 1; + n = n | (n >> 1); + n = n | (n >> 2); + n = n | (n >> 4); + n = n | (n >> 8); + n = n | (n >> 16); + return n + 1; +} + +function getCapacity(capacity) { + if (typeof capacity !== "number") return 16; + return pow2AtLeast( + Math.min( + Math.max(16, capacity), 1073741824) + ); +} + +function Queue(capacity) { + this._capacity = getCapacity(capacity); + this._length = 0; + this._front = 0; + this._makeCapacity(); +} + +Queue.prototype._willBeOverCapacity = +function Queue$_willBeOverCapacity(size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function Queue$_pushOne(arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype.push = function Queue$push(fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function Queue$shift() { + var front = this._front, + ret = this[front]; + + this[front] = void 0; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function Queue$length() { + return this._length; +}; + +Queue.prototype._makeCapacity = function Queue$_makeCapacity() { + var len = this._capacity; + for (var i = 0; i < len; ++i) { + this[i] = void 0; + } +}; + +Queue.prototype._checkCapacity = function Queue$_checkCapacity(size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 3); + } +}; + +Queue.prototype._resizeTo = function Queue$_resizeTo(capacity) { + var oldFront = this._front; + var oldCapacity = this._capacity; + var oldQueue = new Array(oldCapacity); + var length = this.length(); + + arrayCopy(this, 0, oldQueue, 0, oldCapacity); + this._capacity = capacity; + this._makeCapacity(); + this._front = 0; + if (oldFront + length <= oldCapacity) { + arrayCopy(oldQueue, oldFront, this, 0, length); + } + else { var lengthBeforeWrapping = + length - ((oldFront + length) & (oldCapacity - 1)); + + arrayCopy(oldQueue, oldFront, this, 0, lengthBeforeWrapping); + arrayCopy(oldQueue, 0, this, lengthBeforeWrapping, + length - lengthBeforeWrapping); + } +}; + +module.exports = Queue; + +},{"./assert.js":2}],29:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { + var apiRejection = require("./errors_api_rejection.js")(Promise); + var isArray = require("./util.js").isArray; + + var raceLater = function Promise$_raceLater(promise) { + return promise.then(function Promise$_lateRacer(array) { + return Promise$_Race(array, Promise$_lateRacer, promise); + }); + }; + + var hasOwn = {}.hasOwnProperty; + function Promise$_Race(promises, caller, parent) { + var maybePromise = Promise._cast(promises, caller, void 0); + + if (Promise.is(maybePromise)) { + return raceLater(maybePromise); + } + else if (!isArray(promises)) { + return apiRejection("expecting an array, a promise or a thenable"); + } + + var ret = new Promise(INTERNAL); + ret._setTrace(caller, parent); + if (parent !== void 0) { + if (parent._isBound()) { + ret._setBoundTo(parent._boundTo); + } + if (parent._cancellable()) { + ret._setCancellable(); + ret._cancellationParent = parent; + } + } + var fulfill = ret._fulfill; + var reject = ret._reject; + for (var i = 0, len = promises.length; i < len; ++i) { + var val = promises[i]; + + if (val === void 0 && !(hasOwn.call(promises, i))) { + continue; + } + + Promise.cast(val)._then( + fulfill, + reject, + void 0, + ret, + null, + caller + ); + } + return ret; + } + + Promise.race = function Promise$Race(promises) { + return Promise$_Race(promises, Promise.race, void 0); + }; + + Promise.prototype.race = function Promise$race() { + return Promise$_Race(this, this.race, void 0); + }; + +}; + +},{"./errors_api_rejection.js":11,"./util.js":39}],30:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function( + Promise, Promise$_CreatePromiseArray, + PromiseArray, apiRejection, INTERNAL) { + + var ASSERT = require("./assert.js"); + + function Reduction(callback, index, accum, items, receiver) { + this.promise = new Promise(INTERNAL); + this.index = index; + this.length = items.length; + this.items = items; + this.callback = callback; + this.receiver = receiver; + this.accum = accum; + } + + Reduction.prototype.reject = function Reduction$reject(e) { + this.promise._reject(e); + }; + + Reduction.prototype.fulfill = function Reduction$fulfill(value, index) { + this.accum = value; + this.index = index + 1; + this.iterate(); + }; + + Reduction.prototype.iterate = function Reduction$iterate() { + var i = this.index; + var len = this.length; + var items = this.items; + var result = this.accum; + var receiver = this.receiver; + var callback = this.callback; + var iterate = this.iterate; + + for(; i < len; ++i) { + result = Promise._cast( + callback.call( + receiver, + result, + items[i], + i, + len + ), + iterate, + void 0 + ); + + if (result instanceof Promise) { + result._then( + this.fulfill, this.reject, void 0, this, i, iterate); + return; + } + } + this.promise._fulfill(result); + }; + + function Promise$_reducer(fulfilleds, initialValue) { + var fn = this; + var receiver = void 0; + if (typeof fn !== "function") { + receiver = fn.receiver; + fn = fn.fn; + } + var len = fulfilleds.length; + var accum = void 0; + var startIndex = 0; + + if (initialValue !== void 0) { + accum = initialValue; + startIndex = 0; + } + else { + startIndex = 1; + if (len > 0) accum = fulfilleds[0]; + } + var i = startIndex; + + if (i >= len) { + return accum; + } + + var reduction = new Reduction(fn, i, accum, fulfilleds, receiver); + reduction.iterate(); + return reduction.promise; + } + + function Promise$_unpackReducer(fulfilleds) { + var fn = this.fn; + var initialValue = this.initialValue; + return Promise$_reducer.call(fn, fulfilleds, initialValue); + } + + function Promise$_slowReduce( + promises, fn, initialValue, useBound, caller) { + return initialValue._then(function callee(initialValue) { + return Promise$_Reduce( + promises, fn, initialValue, useBound, callee); + }, void 0, void 0, void 0, void 0, caller); + } + + function Promise$_Reduce(promises, fn, initialValue, useBound, caller) { + if (typeof fn !== "function") { + return apiRejection("fn must be a function"); + } + + if (useBound === true && promises._isBound()) { + fn = { + fn: fn, + receiver: promises._boundTo + }; + } + + if (initialValue !== void 0) { + if (Promise.is(initialValue)) { + if (initialValue.isFulfilled()) { + initialValue = initialValue._settledValue; + } + else { + return Promise$_slowReduce(promises, + fn, initialValue, useBound, caller); + } + } + + return Promise$_CreatePromiseArray(promises, PromiseArray, caller, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0) + .promise() + ._then(Promise$_unpackReducer, void 0, void 0, { + fn: fn, + initialValue: initialValue + }, void 0, Promise.reduce); + } + return Promise$_CreatePromiseArray(promises, PromiseArray, caller, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0).promise() + ._then(Promise$_reducer, void 0, void 0, fn, void 0, caller); + } + + + Promise.reduce = function Promise$Reduce(promises, fn, initialValue) { + return Promise$_Reduce(promises, fn, + initialValue, false, Promise.reduce); + }; + + Promise.prototype.reduce = function Promise$reduce(fn, initialValue) { + return Promise$_Reduce(this, fn, initialValue, + true, this.reduce); + }; +}; + +},{"./assert.js":2}],31:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var global = require("./global.js"); +var ASSERT = require("./assert.js"); +var schedule; +if (typeof process !== "undefined" && process !== null && + typeof process.cwd === "function" && + typeof process.nextTick === "function" && + typeof process.version === "string") { + schedule = function Promise$_Scheduler(fn) { + process.nextTick(fn); + }; +} +else if ((typeof global.MutationObserver === "function" || + typeof global.WebkitMutationObserver === "function" || + typeof global.WebKitMutationObserver === "function") && + typeof document !== "undefined" && + typeof document.createElement === "function") { + + + schedule = (function(){ + var MutationObserver = global.MutationObserver || + global.WebkitMutationObserver || + global.WebKitMutationObserver; + var div = document.createElement("div"); + var queuedFn = void 0; + var observer = new MutationObserver( + function Promise$_Scheduler() { + var fn = queuedFn; + queuedFn = void 0; + fn(); + } + ); + observer.observe(div, { + attributes: true + }); + return function Promise$_Scheduler(fn) { + queuedFn = fn; + div.setAttribute("class", "foo"); + }; + + })(); +} +else if (typeof global.postMessage === "function" && + typeof global.importScripts !== "function" && + typeof global.addEventListener === "function" && + typeof global.removeEventListener === "function") { + + var MESSAGE_KEY = "bluebird_message_key_" + Math.random(); + schedule = (function(){ + var queuedFn = void 0; + + function Promise$_Scheduler(e) { + if (e.source === global && + e.data === MESSAGE_KEY) { + var fn = queuedFn; + queuedFn = void 0; + fn(); + } + } + + global.addEventListener("message", Promise$_Scheduler, false); + + return function Promise$_Scheduler(fn) { + queuedFn = fn; + global.postMessage( + MESSAGE_KEY, "*" + ); + }; + + })(); +} +else if (typeof global.MessageChannel === "function") { + schedule = (function(){ + var queuedFn = void 0; + + var channel = new global.MessageChannel(); + channel.port1.onmessage = function Promise$_Scheduler() { + var fn = queuedFn; + queuedFn = void 0; + fn(); + }; + + return function Promise$_Scheduler(fn) { + queuedFn = fn; + channel.port2.postMessage(null); + }; + })(); +} +else if (global.setTimeout) { + schedule = function Promise$_Scheduler(fn) { + setTimeout(fn, 4); + }; +} +else { + schedule = function Promise$_Scheduler(fn) { + fn(); + }; +} + +module.exports = schedule; + +},{"./assert.js":2,"./global.js":16}],32:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = + function(Promise, Promise$_CreatePromiseArray, PromiseArray) { + + var SettledPromiseArray = require("./settled_promise_array.js")( + Promise, PromiseArray); + + function Promise$_Settle(promises, useBound, caller) { + return Promise$_CreatePromiseArray( + promises, + SettledPromiseArray, + caller, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0 + ).promise(); + } + + Promise.settle = function Promise$Settle(promises) { + return Promise$_Settle(promises, false, Promise.settle); + }; + + Promise.prototype.settle = function Promise$settle() { + return Promise$_Settle(this, true, this.settle); + }; + +}; + +},{"./settled_promise_array.js":33}],33:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, PromiseArray) { +var ASSERT = require("./assert.js"); +var PromiseInspection = require("./promise_inspection.js"); +var util = require("./util.js"); +var inherits = util.inherits; +function SettledPromiseArray(values, caller, boundTo) { + this.constructor$(values, caller, boundTo); +} +inherits(SettledPromiseArray, PromiseArray); + +SettledPromiseArray.prototype._promiseResolved = +function SettledPromiseArray$_promiseResolved(index, inspection) { + this._values[index] = inspection; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + } +}; + +SettledPromiseArray.prototype._promiseFulfilled = +function SettledPromiseArray$_promiseFulfilled(value, index) { + if (this._isResolved()) return; + var ret = new PromiseInspection(); + ret._bitField = 268435456; + ret._settledValue = value; + this._promiseResolved(index, ret); +}; +SettledPromiseArray.prototype._promiseRejected = +function SettledPromiseArray$_promiseRejected(reason, index) { + if (this._isResolved()) return; + var ret = new PromiseInspection(); + ret._bitField = 134217728; + ret._settledValue = reason; + this._promiseResolved(index, ret); +}; + +return SettledPromiseArray; +}; + +},{"./assert.js":2,"./promise_inspection.js":22,"./util.js":39}],34:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = +function(Promise, Promise$_CreatePromiseArray, PromiseArray, apiRejection) { + + var SomePromiseArray = require("./some_promise_array.js")(PromiseArray); + var ASSERT = require("./assert.js"); + + function Promise$_Some(promises, howMany, useBound, caller) { + if ((howMany | 0) !== howMany || howMany < 0) { + return apiRejection("expecting a positive integer"); + } + var ret = Promise$_CreatePromiseArray( + promises, + SomePromiseArray, + caller, + useBound === true && promises._isBound() + ? promises._boundTo + : void 0 + ); + var promise = ret.promise(); + if (promise.isRejected()) { + return promise; + } + ret.setHowMany(howMany); + ret.init(); + return promise; + } + + Promise.some = function Promise$Some(promises, howMany) { + return Promise$_Some(promises, howMany, false, Promise.some); + }; + + Promise.prototype.some = function Promise$some(count) { + return Promise$_Some(this, count, true, this.some); + }; + +}; + +},{"./assert.js":2,"./some_promise_array.js":35}],35:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function (PromiseArray) { +var util = require("./util.js"); +var RangeError = require("./errors.js").RangeError; +var inherits = util.inherits; +var isArray = util.isArray; + +function SomePromiseArray(values, caller, boundTo) { + this.constructor$(values, caller, boundTo); + this._howMany = 0; + this._unwrap = false; + this._initialized = false; +} +inherits(SomePromiseArray, PromiseArray); + +SomePromiseArray.prototype._init = function SomePromiseArray$_init() { + if (!this._initialized) { + return; + } + if (this._howMany === 0) { + this._resolve([]); + return; + } + this._init$(void 0, -2); + var isArrayResolved = isArray(this._values); + this._holes = isArrayResolved ? this._values.length - this.length() : 0; + + if (!this._isResolved() && + isArrayResolved && + this._howMany > this._canPossiblyFulfill()) { + var message = "(Promise.some) input array contains less than " + + this._howMany + " promises"; + this._reject(new RangeError(message)); + } +}; + +SomePromiseArray.prototype.init = function SomePromiseArray$init() { + this._initialized = true; + this._init(); +}; + +SomePromiseArray.prototype.setUnwrap = function SomePromiseArray$setUnwrap() { + this._unwrap = true; +}; + +SomePromiseArray.prototype.howMany = function SomePromiseArray$howMany() { + return this._howMany; +}; + +SomePromiseArray.prototype.setHowMany = +function SomePromiseArray$setHowMany(count) { + if (this._isResolved()) return; + this._howMany = count; +}; + +SomePromiseArray.prototype._promiseFulfilled = +function SomePromiseArray$_promiseFulfilled(value) { + if (this._isResolved()) return; + this._addFulfilled(value); + if (this._fulfilled() === this.howMany()) { + this._values.length = this.howMany(); + if (this.howMany() === 1 && this._unwrap) { + this._resolve(this._values[0]); + } + else { + this._resolve(this._values); + } + } + +}; +SomePromiseArray.prototype._promiseRejected = +function SomePromiseArray$_promiseRejected(reason) { + if (this._isResolved()) return; + this._addRejected(reason); + if (this.howMany() > this._canPossiblyFulfill()) { + if (this._values.length === this.length()) { + this._reject([]); + } + else { + this._reject(this._values.slice(this.length() + this._holes)); + } + } +}; + +SomePromiseArray.prototype._fulfilled = function SomePromiseArray$_fulfilled() { + return this._totalResolved; +}; + +SomePromiseArray.prototype._rejected = function SomePromiseArray$_rejected() { + return this._values.length - this.length() - this._holes; +}; + +SomePromiseArray.prototype._addRejected = +function SomePromiseArray$_addRejected(reason) { + this._values.push(reason); +}; + +SomePromiseArray.prototype._addFulfilled = +function SomePromiseArray$_addFulfilled(value) { + this._values[this._totalResolved++] = value; +}; + +SomePromiseArray.prototype._canPossiblyFulfill = +function SomePromiseArray$_canPossiblyFulfill() { + return this.length() - this._rejected(); +}; + +return SomePromiseArray; +}; + +},{"./errors.js":10,"./util.js":39}],36:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise) { + var PromiseInspection = require("./promise_inspection.js"); + + Promise.prototype.inspect = function Promise$inspect() { + return new PromiseInspection(this); + }; +}; + +},{"./promise_inspection.js":22}],37:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +module.exports = function(Promise, INTERNAL) { + var ASSERT = require("./assert.js"); + var util = require("./util.js"); + var canAttach = require("./errors.js").canAttach; + var errorObj = util.errorObj; + var isObject = util.isObject; + + function getThen(obj) { + try { + return obj.then; + } + catch(e) { + errorObj.e = e; + return errorObj; + } + } + + function Promise$_Cast(obj, caller, originalPromise) { + if (isObject(obj)) { + if (obj instanceof Promise) { + return obj; + } + else if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + ret._setTrace(caller, void 0); + obj._then( + ret._fulfillUnchecked, + ret._rejectUncheckedCheckError, + ret._progressUnchecked, + ret, + null, + void 0 + ); + ret._setFollowing(); + return ret; + } + var then = getThen(obj); + if (then === errorObj) { + caller = typeof caller === "function" ? caller : Promise$_Cast; + if (originalPromise !== void 0 && canAttach(then.e)) { + originalPromise._attachExtraTrace(then.e); + } + return Promise.reject(then.e, caller); + } + else if (typeof then === "function") { + caller = typeof caller === "function" ? caller : Promise$_Cast; + return Promise$_doThenable(obj, then, caller, originalPromise); + } + } + return obj; + } + + var hasProp = {}.hasOwnProperty; + function isAnyBluebirdPromise(obj) { + return hasProp.call(obj, "_promise0"); + } + + function Promise$_doThenable(x, then, caller, originalPromise) { + var resolver = Promise.defer(caller); + var called = false; + try { + then.call( + x, + Promise$_resolveFromThenable, + Promise$_rejectFromThenable, + Promise$_progressFromThenable + ); + } + catch(e) { + if (!called) { + called = true; + var trace = canAttach(e) ? e : new Error(e + ""); + if (originalPromise !== void 0) { + originalPromise._attachExtraTrace(trace); + } + resolver.promise._reject(e, trace); + } + } + return resolver.promise; + + function Promise$_resolveFromThenable(y) { + if (called) return; + called = true; + + if (x === y) { + var e = Promise._makeSelfResolutionError(); + if (originalPromise !== void 0) { + originalPromise._attachExtraTrace(e); + } + resolver.promise._reject(e, void 0); + return; + } + resolver.resolve(y); + } + + function Promise$_rejectFromThenable(r) { + if (called) return; + called = true; + var trace = canAttach(r) ? r : new Error(r + ""); + if (originalPromise !== void 0) { + originalPromise._attachExtraTrace(trace); + } + resolver.promise._reject(r, trace); + } + + function Promise$_progressFromThenable(v) { + if (called) return; + var promise = resolver.promise; + if (typeof promise._progress === "function") { + promise._progress(v); + } + } + } + + Promise._cast = Promise$_Cast; +}; + +},{"./assert.js":2,"./errors.js":10,"./util.js":39}],38:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; + +var global = require("./global.js"); +var setTimeout = function(fn, time) { + var $_len = arguments.length;var args = new Array($_len - 2); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];} + global.setTimeout(function() { + fn.apply(void 0, args); + }, time); +}; + +var pass = {}; +global.setTimeout( function(_) { + if(_ === pass) { + setTimeout = global.setTimeout; + } +}, 1, pass); + +module.exports = function(Promise, INTERNAL) { + var util = require("./util.js"); + var ASSERT = require("./assert.js"); + var errors = require("./errors.js"); + var apiRejection = require("./errors_api_rejection")(Promise); + var TimeoutError = Promise.TimeoutError; + + var afterTimeout = function Promise$_afterTimeout(promise, message, ms) { + if (!promise.isPending()) return; + if (typeof message !== "string") { + message = "operation timed out after" + " " + ms + " ms" + } + var err = new TimeoutError(message); + errors.markAsOriginatingFromRejection(err); + promise._attachExtraTrace(err); + promise._rejectUnchecked(err); + }; + + var afterDelay = function Promise$_afterDelay(value, promise) { + promise._fulfill(value); + }; + + Promise.delay = function Promise$Delay(value, ms, caller) { + if (ms === void 0) { + ms = value; + value = void 0; + } + ms = +ms; + if (typeof caller !== "function") { + caller = Promise.delay; + } + var maybePromise = Promise._cast(value, caller, void 0); + var promise = new Promise(INTERNAL); + + if (Promise.is(maybePromise)) { + if (maybePromise._isBound()) { + promise._setBoundTo(maybePromise._boundTo); + } + if (maybePromise._cancellable()) { + promise._setCancellable(); + promise._cancellationParent = maybePromise; + } + promise._setTrace(caller, maybePromise); + promise._follow(maybePromise); + return promise.then(function(value) { + return Promise.delay(value, ms); + }); + } + else { + promise._setTrace(caller, void 0); + setTimeout(afterDelay, ms, value, promise); + } + return promise; + }; + + Promise.prototype.delay = function Promise$delay(ms) { + return Promise.delay(this, ms, this.delay); + }; + + Promise.prototype.timeout = function Promise$timeout(ms, message) { + ms = +ms; + + var ret = new Promise(INTERNAL); + ret._setTrace(this.timeout, this); + + if (this._isBound()) ret._setBoundTo(this._boundTo); + if (this._cancellable()) { + ret._setCancellable(); + ret._cancellationParent = this; + } + ret._follow(this); + setTimeout(afterTimeout, ms, ret, message, ms); + return ret; + }; + +}; + +},{"./assert.js":2,"./errors.js":10,"./errors_api_rejection":11,"./global.js":16,"./util.js":39}],39:[function(require,module,exports){ +/** + * Copyright (c) 2014 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions:

        + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +"use strict"; +var global = require("./global.js"); +var ASSERT = require("./assert.js"); +var es5 = require("./es5.js"); +var haveGetters = (function(){ + try { + var o = {}; + es5.defineProperty(o, "f", { + get: function () { + return 3; + } + }); + return o.f === 3; + } + catch (e) { + return false; + } + +})(); + +var canEvaluate = (function() { + if (typeof window !== "undefined" && window !== null && + typeof window.document !== "undefined" && + typeof navigator !== "undefined" && navigator !== null && + typeof navigator.appName === "string" && + window === global) { + return false; + } + return true; +})(); + +function deprecated(msg) { + if (typeof console !== "undefined" && console !== null && + typeof console.warn === "function") { + console.warn("Bluebird: " + msg); + } +} + +var errorObj = {e: {}}; +function tryCatch1(fn, receiver, arg) { + try { + return fn.call(receiver, arg); + } + catch (e) { + errorObj.e = e; + return errorObj; + } +} + +function tryCatch2(fn, receiver, arg, arg2) { + try { + return fn.call(receiver, arg, arg2); + } + catch (e) { + errorObj.e = e; + return errorObj; + } +} + +function tryCatchApply(fn, args, receiver) { + try { + return fn.apply(receiver, args); + } + catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + +function asString(val) { + return typeof val === "string" ? val : ("" + val); +} + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return !isPrimitive(value); +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(asString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + + +function notEnumerableProp(obj, name, value) { + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + + +var wrapsPrimitiveReceiver = (function() { + return this !== "string"; +}).call("string"); + +function thrower(r) { + throw r; +} + + +var ret = { + thrower: thrower, + isArray: es5.isArray, + haveGetters: haveGetters, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + canEvaluate: canEvaluate, + deprecated: deprecated, + errorObj: errorObj, + tryCatch1: tryCatch1, + tryCatch2: tryCatch2, + tryCatchApply: tryCatchApply, + inherits: inherits, + withAppended: withAppended, + asString: asString, + maybeWrapAsError: maybeWrapAsError, + wrapsPrimitiveReceiver: wrapsPrimitiveReceiver +}; + +module.exports = ret; + +},{"./assert.js":2,"./es5.js":12,"./global.js":16}]},{},[4]) +(4) +}); +; diff --git a/libs/plasio/workers/laz-loader-worker.js b/libs/plasio/workers/laz-loader-worker.js new file mode 100644 index 0000000..5ce5596 --- /dev/null +++ b/libs/plasio/workers/laz-loader-worker.js @@ -0,0 +1,165 @@ +// laz-loader-worker.js +// + +//import {Module} from "./laz-perf.js"; + +let instance = null; // laz-perf instance + +function readAs(buf, Type, offset, count) { + count = (count === undefined || count === 0 ? 1 : count); + var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count); + + var r = new Type(sub); + if (count === undefined || count === 1) + return r[0]; + + var ret = []; + for (var i = 0 ; i < count ; i ++) { + ret.push(r[i]); + } + + return ret; +} + +function parseLASHeader(arraybuffer) { + var o = { }; + + o.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3); + o.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8) & 0b111111; + o.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1); + + o.extraBytes = 0; + + switch (o.pointsFormatId) { + case 0: o.extraBytes = o.pointsStructSize - 20; break; + case 1: o.extraBytes = o.pointsStructSize - 28; break; + case 2: o.extraBytes = o.pointsStructSize - 26; break; + case 3: o.extraBytes = o.pointsStructSize - 34; break; + } + + o.pointsCount = readAs(arraybuffer, Uint32Array, 32 * 3 + 11); + + var start = 32 * 3 + 35; + o.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24; + o.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24; + + var bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48; + o.maxs = [bounds[0], bounds[2], bounds[4]]; + o.mins = [bounds[1], bounds[3], bounds[5]]; + + return o; +} + +function handleEvent(msg) { + switch(msg.type) { + case "open": + try { + instance = new Module.LASZip(); + var abInt = new Uint8Array(msg.arraybuffer); + var buf = Module._malloc(msg.arraybuffer.byteLength); + + instance.arraybuffer = msg.arraybuffer; + instance.buf = buf; + Module.HEAPU8.set(abInt, buf); + instance.open(buf, msg.arraybuffer.byteLength); + + instance.readOffset = 0; + + postMessage({ type: "open", status: 1}); + }catch(e) { + debugger; + postMessage({ type: "open", status: 0, details: e }); + } + break; + + case "header": + if (!instance) + throw new Error( + "You need to open the file before reading the header"); + + var header = parseLASHeader(instance.arraybuffer); + header.pointsFormatId &= 0x3f; + instance.header = header; + postMessage({type: "header", status: 1, header: header}); + break; + + case "read": + if (!instance) + throw new Error( + "You need to open the file before trying to read"); + + var start = msg.start, count = msg.count, skip = msg.skip; + var o = instance; + + if (!o.header) + throw new Error( + "You need to query header before reading"); + + let h = o.header; + + var pointsToRead = Math.min( + count * skip, h.pointsCount - o.readOffset); + var bufferSize = Math.ceil(pointsToRead / skip); + var pointsRead = 0; + + let buffer = new ArrayBuffer(bufferSize * h.pointsStructSize); + let this_buf = new Uint8Array(buffer); + var buf_read = Module._malloc(h.pointsStructSize); + + for (var i = 0 ; i < pointsToRead ; i ++) { + o.getPoint(buf_read); + + if (i % skip === 0) { + var a = new Uint8Array( + Module.HEAPU8.buffer, + buf_read, + h.pointsStructSize); + + this_buf.set( + a, + pointsRead * h.pointsStructSize, + h.pointsStructSize); + + ++pointsRead; + } + + ++o.readOffset; + } + Module._free(buf_read); + + let transferables = [buffer]; + + postMessage({ + type: 'header', + status: 1, + buffer: buffer, + count: pointsRead, + hasMoreData: o.readOffset < o.header.pointsCount + }, transferables); + + break; + + case "close": + if (instance !== null) { + Module._free(instance.buf); + instance.delete(); + instance = null; + }else{ + debugger; + } + + postMessage({ type: "close", status: 1}); + break; + } +} + +onmessage = function(event) { + try { + handleEvent(event.data); + } catch(e) { + debugger; + postMessage({type: event.data.type, status: 0, details: e}); + } +}; + + diff --git a/libs/plasio/workers/laz-perf.js b/libs/plasio/workers/laz-perf.js new file mode 100644 index 0000000..74255ac --- /dev/null +++ b/libs/plasio/workers/laz-perf.js @@ -0,0 +1,49590 @@ +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(Module) { ..generated code.. } +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module !== 'undefined' ? Module : {}; + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) +// {{PRE_JSES}} + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {}; +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'] = []; + +// The environment setup code below is customized to use Module. +// *** Environment setup code *** +var ENVIRONMENT_IS_WEB = false; +var ENVIRONMENT_IS_WORKER = false; +var ENVIRONMENT_IS_NODE = false; +var ENVIRONMENT_IS_SHELL = false; + +// Three configurations we can be running in: +// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false) +// 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) +// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true) + +if (Module['ENVIRONMENT']) { + if (Module['ENVIRONMENT'] === 'WEB') { + ENVIRONMENT_IS_WEB = true; + } else if (Module['ENVIRONMENT'] === 'WORKER') { + ENVIRONMENT_IS_WORKER = true; + } else if (Module['ENVIRONMENT'] === 'NODE') { + ENVIRONMENT_IS_NODE = true; + } else if (Module['ENVIRONMENT'] === 'SHELL') { + ENVIRONMENT_IS_SHELL = true; + } else { + throw new Error('Module[\'ENVIRONMENT\'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.'); + } +} else { + ENVIRONMENT_IS_WEB = typeof window === 'object'; + ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; + ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER; + ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; +} + + +if (ENVIRONMENT_IS_NODE) { + // Expose functionality in the same simple way that the shells work + // Note that we pollute the global namespace here, otherwise we break in node + 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); + + if (typeof module !== 'undefined') { + module['exports'] = Module; + } + + process['on']('uncaughtException', function(ex) { + // suppress ExitStatus exceptions from showing an error + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + // Currently node will swallow unhandled rejections, but this behavior is + // deprecated, and in the future it will exit with error status. + process['on']('unhandledRejection', function(reason, p) { + Module['printErr']('node.js exiting due to unhandled promise rejection'); + process['exit'](1); + }); + + 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 === '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, toThrow) { + quit(status); + } + } +} else +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + 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)) { // file URLs can return 0 + 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 +{ + 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?)'); +} + +// console.log is checked first, as 'print' on the web will open a print dialogue +// printErr is preferable to console.warn (works better in shells) +// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior. +Module['print'] = typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null); +Module['printErr'] = typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || Module['print']); + +// *** Environment setup code *** + +// Closure helpers +Module.print = Module['print']; +Module.printErr = Module['printErr']; + +// Merge back in the overrides +for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } +} +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. +moduleOverrides = undefined; + + + +// {{PREAMBLE_ADDITIONS}} + +var STACK_ALIGN = 16; + +// stack management, and other functionality that is provided by the compiled code, +// should not be used before it is ready +stackSave = stackRestore = stackAlloc = setTempRet0 = getTempRet0 = function() { + abort('cannot use the stack before compiled code is ready to run, and has provided stack access'); +}; + +function staticAlloc(size) { + assert(!staticSealed); + var ret = STATICTOP; + STATICTOP = (STATICTOP + size + 15) & -16; + return ret; +} + +function dynamicAlloc(size) { + assert(DYNAMICTOP_PTR); + 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; // stack alignment (16-byte) by default + 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; // A pointer + } 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; + Module.printErr(text); + } +} + + + +var jsCallStartIndex = 1; +var functionPointers = new Array(0); + +// 'sig' parameter is only used on LLVM wasm backend +function addFunction(func, sig) { + if (typeof sig === 'undefined') { + 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.'); + } + var base = 0; + for (var i = base; i < base + 0; i++) { + if (!functionPointers[i]) { + functionPointers[i] = func; + return jsCallStartIndex + i; + } + } + throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.'; +} + +function removeFunction(index) { + functionPointers[index-jsCallStartIndex] = null; +} + +var funcWrappers = {}; + +function getFuncWrapper(func, sig) { + if (!func) return; // on null pointer, return undefined + assert(sig); + if (!funcWrappers[sig]) { + funcWrappers[sig] = {}; + } + var sigCache = funcWrappers[sig]; + if (!sigCache[func]) { + // optimize away arguments usage in common cases + if (sig.length === 1) { + sigCache[func] = function dynCall_wrapper() { + return dynCall(sig, func); + }; + } else if (sig.length === 2) { + sigCache[func] = function dynCall_wrapper(arg) { + return dynCall(sig, func, [arg]); + }; + } else { + // general case + sigCache[func] = function dynCall_wrapper() { + return dynCall(sig, func, Array.prototype.slice.call(arguments)); + }; + } + } + return sigCache[func]; +} + + +function makeBigInt(low, high, unsigned) { + return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0)); +} + +function dynCall(sig, ptr, args) { + if (args && args.length) { + assert(args.length == sig.length-1); + assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); + return Module['dynCall_' + sig].apply(null, [ptr].concat(args)); + } else { + assert(sig.length == 1); + assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); + return Module['dynCall_' + sig].call(null, ptr); + } +} + + +function getCompilerSetting(name) { + throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work'; +} + +var Runtime = { + // FIXME backwards compatibility layer for ports. Support some Runtime.* + // for now, fix it there, then remove it from here. That way we + // can minimize any period of breakage. + dynCall: dynCall, // for SDL2 port + // helpful errors + getTempRet0: function() { abort('getTempRet0() is now a top-level function, after removing the Runtime object. Remove "Runtime."') }, + staticAlloc: function() { abort('staticAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."') }, + stackAlloc: function() { abort('stackAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."') }, +}; + +// The address globals begin at. Very low in memory, for code size and optimization opportunities. +// Above 0 is static memory, starting with globals. +// Then the stack. +// Then 'dynamic' memory for sbrk. +var GLOBAL_BASE = 8; + + + +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + + + +//======================================== +// Runtime essentials +//======================================== + +var ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort() +var EXITSTATUS = 0; + +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed: ' + text); + } +} + +var globalScope = this; + +// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) +function getCFunc(ident) { + var func = Module['_' + ident]; // closure exported function + assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); + return func; +} + +var JSfuncs = { + // Helpers for cwrap -- it can't refer to Runtime directly because it might + // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find + // out what the minified function name is. + 'stackSave': function() { + stackSave() + }, + 'stackRestore': function() { + stackRestore() + }, + // type conversion from js to c + 'arrayToC' : function(arr) { + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + }, + 'stringToC' : function(str) { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + var len = (str.length << 2) + 1; + ret = stackAlloc(len); + stringToUTF8(str, ret, len); + } + return ret; + } +}; + +// For fast lookup of conversion functions +var toC = { + 'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC'] +}; + +// C calling interface. +function ccall (ident, returnType, argTypes, args, opts) { + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + assert(returnType !== 'array', 'Return type should not be "array".'); + 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); + if (returnType === 'string') ret = Pointer_stringify(ret); + else if (returnType === 'boolean') ret = Boolean(ret); + if (stack !== 0) { + stackRestore(stack); + } + return ret; +} + +function cwrap (ident, returnType, argTypes) { + argTypes = argTypes || []; + var cfunc = getCFunc(ident); + // When the function takes numbers and returns a number, we can just return + // the original function + var numericArgs = argTypes.every(function(type){ return type === 'number'}); + var numericRet = returnType !== 'string'; + if (numericRet && numericArgs) { + return cfunc; + } + return function() { + return ccall(ident, returnType, argTypes, arguments); + } +} + +/** @type {function(number, number, string, boolean=)} */ +function setValue(ptr, value, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': HEAP8[((ptr)>>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.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; + case 'float': HEAPF32[((ptr)>>2)]=value; break; + case 'double': HEAPF64[((ptr)>>3)]=value; break; + default: abort('invalid type for setValue: ' + type); + } +} + +/** @type {function(number, string, boolean=)} */ +function getValue(ptr, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': return HEAP8[((ptr)>>0)]; + case 'i8': return HEAP8[((ptr)>>0)]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP32[((ptr)>>2)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + default: abort('invalid type for getValue: ' + type); + } + return null; +} + +var ALLOC_NORMAL = 0; // Tries to use _malloc() +var ALLOC_STACK = 1; // Lives for the duration of the current function call +var ALLOC_STATIC = 2; // Cannot be freed +var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk +var ALLOC_NONE = 4; // Do not allocate + +// allocate(): This is for internal use. You can use it yourself as well, but the interface +// is a little tricky (see docs right below). The reason is that it is optimized +// for multiple syntaxes to save space in generated code. So you should +// normally not use allocate(), and instead allocate memory using _malloc(), +// initialize it with setValue(), and so forth. +// @slab: An array of data, or a number. If a number, then the size of the block to allocate, +// in *bytes* (note that this is sometimes confusing: the next parameter does not +// affect this!) +// @types: Either an array of types, one for each byte (or 0 if no type at that position), +// or a single type which is used for the entire block. This only matters if there +// is initial data - if @slab is a number, then this does not matter at all and is +// ignored. +// @allocator: How to allocate memory, see ALLOC_* +/** @type {function((TypedArray|Array|number), string, number, number=)} */ +function allocate(slab, types, allocator, ptr) { + var zeroinit, size; + if (typeof slab === 'number') { + zeroinit = true; + size = slab; + } else { + zeroinit = false; + size = slab.length; + } + + var singleType = typeof types === 'string' ? types : null; + + var ret; + if (allocator == ALLOC_NONE) { + ret = ptr; + } else { + ret = [typeof _malloc === 'function' ? _malloc : staticAlloc, stackAlloc, staticAlloc, dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); + } + + if (zeroinit) { + var stop; + ptr = ret; + assert((ret & 3) == 0); + stop = ret + (size & ~3); + for (; ptr < stop; ptr += 4) { + HEAP32[((ptr)>>2)]=0; + } + stop = ret + size; + while (ptr < stop) { + HEAP8[((ptr++)>>0)]=0; + } + return ret; + } + + if (singleType === 'i8') { + if (slab.subarray || slab.slice) { + HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret); + } else { + HEAPU8.set(new Uint8Array(slab), ret); + } + return ret; + } + + var i = 0, type, typeSize, previousType; + while (i < size) { + var curr = slab[i]; + + type = singleType || types[i]; + if (type === 0) { + i++; + continue; + } + assert(type, 'Must know what type to store in allocate!'); + + if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later + + setValue(ret+i, curr, type); + + // no need to look up size unless type changes, so cache it + if (previousType !== type) { + typeSize = getNativeTypeSize(type); + previousType = type; + } + i += typeSize; + } + + return ret; +} + +// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready +function getMemory(size) { + if (!staticSealed) return staticAlloc(size); + if (!runtimeInitialized) return dynamicAlloc(size); + return _malloc(size); +} + +/** @type {function(number, number=)} */ +function Pointer_stringify(ptr, length) { + if (length === 0 || !ptr) return ''; + // Find the length, and check for UTF while doing so + var hasUtf = 0; + var t; + var i = 0; + while (1) { + assert(ptr + i < TOTAL_MEMORY); + 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; // split up into chunks, because .apply on a huge string can overflow the stack + var curr; + while (length > 0) { + curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); + ret = ret ? ret + curr : curr; + ptr += MAX_CHUNK; + length -= MAX_CHUNK; + } + return ret; + } + return UTF8ToString(ptr); +} + +// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +function AsciiToString(ptr) { + var str = ''; + while (1) { + var ch = HEAP8[((ptr++)>>0)]; + if (!ch) return str; + str += String.fromCharCode(ch); + } +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. + +function stringToAscii(str, outPtr) { + return writeAsciiToMemory(str, outPtr, false); +} + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns +// a copy of that string as a Javascript String object. + +var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; +function UTF8ArrayToString(u8Array, idx) { + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + 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) { + // 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 + u0 = u8Array[idx++]; + if (!u0) return str; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + u1 = u8Array[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + u2 = u8Array[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + u3 = u8Array[idx++] & 63; + if ((u0 & 0xF8) == 0xF0) { + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3; + } else { + u4 = u8Array[idx++] & 63; + if ((u0 & 0xFC) == 0xF8) { + 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 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + } +} + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +function UTF8ToString(ptr) { + return UTF8ArrayToString(HEAPU8,ptr); +} + +// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', +// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element. +// outIdx: The starting offset in the array to begin the copying. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. +// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // 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. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // 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 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + outU8Array[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + outU8Array[outIdx++] = 0xC0 | (u >> 6); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + outU8Array[outIdx++] = 0xE0 | (u >> 12); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0x1FFFFF) { + if (outIdx + 3 >= endIdx) break; + outU8Array[outIdx++] = 0xF0 | (u >> 18); + outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0x3FFFFFF) { + if (outIdx + 4 >= endIdx) break; + outU8Array[outIdx++] = 0xF8 | (u >> 24); + outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 5 >= endIdx) break; + outU8Array[outIdx++] = 0xFC | (u >> 30); + outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); + outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); + outU8Array[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + outU8Array[outIdx] = 0; + return outIdx - startIdx; +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8(str, outPtr, maxBytesToWrite) { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // 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. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); + if (u <= 0x7F) { + ++len; + } else if (u <= 0x7FF) { + len += 2; + } else if (u <= 0xFFFF) { + len += 3; + } else if (u <= 0x1FFFFF) { + len += 4; + } else if (u <= 0x3FFFFFF) { + len += 5; + } else { + len += 6; + } + } + return len; +} + +// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; +function UTF16ToString(ptr) { + assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); + var endPtr = ptr; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + var idx = endPtr >> 1; + while (HEAP16[idx]) ++idx; + endPtr = idx << 1; + + if (endPtr - ptr > 32 && UTF16Decoder) { + return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); + } else { + var i = 0; + + var str = ''; + while (1) { + var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; + if (codeUnit == 0) return str; + ++i; + // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. + str += String.fromCharCode(codeUnit); + } + } +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. +// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. +// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF16(str, outPtr, maxBytesToWrite) { + assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; // Null terminator. + var startPtr = outPtr; + var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + HEAP16[((outPtr)>>1)]=codeUnit; + outPtr += 2; + } + // Null-terminate the pointer to the HEAP. + HEAP16[((outPtr)>>1)]=0; + return outPtr - startPtr; +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF16(str) { + return str.length*2; +} + +function UTF32ToString(ptr) { + assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); + var i = 0; + + var str = ''; + while (1) { + var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; + if (utf32 == 0) + return str; + ++i; + // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + if (utf32 >= 0x10000) { + var ch = utf32 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } else { + str += String.fromCharCode(utf32); + } + } +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. +// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. +// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF32(str, outPtr, maxBytesToWrite) { + assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + for (var i = 0; i < str.length; ++i) { + // 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. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { + var trailSurrogate = str.charCodeAt(++i); + codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); + } + HEAP32[((outPtr)>>2)]=codeUnit; + outPtr += 4; + if (outPtr + 4 > endPtr) break; + } + // Null-terminate the pointer to the HEAP. + HEAP32[((outPtr)>>2)]=0; + return outPtr - startPtr; +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF32(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // 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. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. + len += 4; + } + + return len; +} + +// Allocate heap space for a JS string, and write it there. +// It is the responsibility of the caller to free() that memory. +function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; +} + +// Allocate stack space for a JS string, and write it there. +function allocateUTF8OnStack(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8Array(str, HEAP8, ret, size); + return ret; +} + +function demangle(func) { + warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); + 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) { + // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, + // so try that as a special-case. + 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); +} + +// Memory management + +var PAGE_SIZE = 16384; +var WASM_PAGE_SIZE = 65536; +var ASMJS_PAGE_SIZE = 16777216; +var MIN_TOTAL_MEMORY = 16777216; + +function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - (x % multiple); + } + return x; +} + +var HEAP, +/** @type {ArrayBuffer} */ + buffer, +/** @type {Int8Array} */ + HEAP8, +/** @type {Uint8Array} */ + HEAPU8, +/** @type {Int16Array} */ + HEAP16, +/** @type {Uint16Array} */ + HEAPU16, +/** @type {Int32Array} */ + HEAP32, +/** @type {Uint32Array} */ + HEAPU32, +/** @type {Float32Array} */ + HEAPF32, +/** @type {Float64Array} */ + 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; // static area +var STACK_BASE, STACKTOP, STACK_MAX; // stack area +var DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk + + STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0; + staticSealed = false; + + +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + assert((STACK_MAX & 3) == 0); + HEAPU32[(STACK_MAX >> 2)-1] = 0x02135467; + HEAPU32[(STACK_MAX >> 2)-2] = 0x89BACDFE; +} + +function checkStackCookie() { + if (HEAPU32[(STACK_MAX >> 2)-1] != 0x02135467 || HEAPU32[(STACK_MAX >> 2)-2] != 0x89BACDFE) { + 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)); + } + // 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. + if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) throw 'Runtime error: The application has corrupted its heap memory area (address zero)!'; +} + +function abortStackOverflow(allocSize) { + abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - stackSave() + allocSize) + ' bytes available!'); +} + +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'] || 167772160; +if (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); + +// Initialize the runtime's memory +// check for full engine support (use string 'subarray' to avoid closure compiler confusion) +assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined, + 'JS engine does not provide full typed array support'); + + + +// Use a provided buffer, if there is one, or else allocate a new one +if (Module['buffer']) { + buffer = Module['buffer']; + assert(buffer.byteLength === TOTAL_MEMORY, 'provided buffer should be ' + TOTAL_MEMORY + ' bytes, but it is ' + buffer.byteLength); +} else { + // Use a WebAssembly memory where available + { + buffer = new ArrayBuffer(TOTAL_MEMORY); + } + assert(buffer.byteLength === TOTAL_MEMORY); + Module['buffer'] = buffer; +} +updateGlobalBufferViews(); + + +function getTotalMemory() { + return TOTAL_MEMORY; +} + +// Endianness check (note: assumes compiler arch was little-endian) + HEAP32[0] = 0x63736d65; /* 'emsc' */ +HEAP16[1] = 0x6373; +if (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!'; + +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__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATMAIN__ = []; // functions called when main() is to be run +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the main() is called + +var runtimeInitialized = false; +var runtimeExited = false; + + +function preRun() { + // compatibility - merge in anything from Module['preRun'] at this time + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); +} + +function ensureInitRuntime() { + checkStackCookie(); + if (runtimeInitialized) return; + runtimeInitialized = true; + callRuntimeCallbacks(__ATINIT__); +} + +function preMain() { + checkStackCookie(); + callRuntimeCallbacks(__ATMAIN__); +} + +function exitRuntime() { + checkStackCookie(); + callRuntimeCallbacks(__ATEXIT__); + runtimeExited = true; +} + +function postRun() { + checkStackCookie(); + // compatibility - merge in anything from Module['postRun'] at this time + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} + +function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +} + +function addOnExit(cb) { + __ATEXIT__.unshift(cb); +} + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} + +// Deprecated: This function should not be called because it is unsafe and does not provide +// a maximum length limit of how many bytes it is allowed to write. Prefer calling the +// function stringToUTF8Array() instead, which takes in a maximum length that can be used +// to be secure from out of bounds writes. +/** @deprecated */ +function writeStringToMemory(string, buffer, dontAddNull) { + warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); + + var /** @type {number} */ lastChar, /** @type {number} */ end; + if (dontAddNull) { + // stringToUTF8Array always appends null. If we don't want to do that, remember the + // character that existed at the location where the null will be placed, and restore + // that after the write (below). + end = buffer + lengthBytesUTF8(string); + lastChar = HEAP8[end]; + } + stringToUTF8(string, buffer, Infinity); + if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. +} + +function writeArrayToMemory(array, buffer) { + assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)') + HEAP8.set(array, buffer); +} + +function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); + HEAP8[((buffer++)>>0)]=str.charCodeAt(i); + } + // Null-terminate the pointer to the HEAP. + if (!dontAddNull) HEAP8[((buffer)>>0)]=0; +} + +function unSign(value, bits, ignore) { + if (value >= 0) { + return value; + } + return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts + : Math.pow(2, bits) + value; +} +function reSign(value, bits, ignore) { + if (value <= 0) { + return value; + } + var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 + : Math.pow(2, bits-1); + if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that + // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors + // TODO: In i64 mode 1, resign the two parts separately and safely + value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts + } + return value; +} + +assert(Math['imul'] && Math['fround'] && Math['clz32'] && Math['trunc'], 'this is a legacy browser, build with LEGACY_VM_SUPPORT'); + +var Math_abs = Math.abs; +var Math_cos = Math.cos; +var Math_sin = Math.sin; +var Math_tan = Math.tan; +var Math_acos = Math.acos; +var Math_asin = Math.asin; +var Math_atan = Math.atan; +var Math_atan2 = Math.atan2; +var Math_exp = Math.exp; +var Math_log = Math.log; +var Math_sqrt = Math.sqrt; +var Math_ceil = Math.ceil; +var Math_floor = Math.floor; +var Math_pow = Math.pow; +var Math_imul = Math.imul; +var Math_fround = Math.fround; +var Math_round = Math.round; +var Math_min = Math.min; +var Math_max = Math.max; +var Math_clz32 = Math.clz32; +var Math_trunc = Math.trunc; + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// PRE_RUN_ADDITIONS (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } + return id; +} + +function addRunDependency(id) { + runDependencies++; + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(function() { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + Module.printErr('still waiting on run dependencies:'); + } + Module.printErr('dependency: ' + dep); + } + if (shown) { + Module.printErr('(end of list)'); + } + }, 10000); + } + } else { + Module.printErr('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + Module.printErr('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +Module["preloadedImages"] = {}; // maps url to image data +Module["preloadedAudios"] = {}; // maps url to audio data + + + +var memoryInitializer = null; + + + +var /* show errors on likely calls to FS when it was not included */ FS = { + error: function() { + 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'); + }, + init: function() { FS.error() }, + createDataFile: function() { FS.error() }, + createPreloadedFile: function() { FS.error() }, + createLazyFile: function() { FS.error() }, + open: function() { FS.error() }, + mkdev: function() { FS.error() }, + registerDevice: function() { FS.error() }, + analyzePath: function() { FS.error() }, + loadFilesFromDB: function() { FS.error() }, + + ErrnoError: function ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + + + +// Prefix of data URIs emitted by SINGLE_FILE and related options. +var dataURIPrefix = 'data:application/octet-stream;base64,'; + +// Indicates whether filename is a base64 data URI. +function isDataURI(filename) { + return String.prototype.startsWith ? + filename.startsWith(dataURIPrefix) : + filename.indexOf(dataURIPrefix) === 0; +} + + + + + +// === Body === + +var ASM_CONSTS = []; + + + + + +STATIC_BASE = GLOBAL_BASE; + +STATICTOP = STATIC_BASE + 22928; +/* global initializers */ __ATINIT__.push({ func: function() { __GLOBAL__sub_I_laz_perf_cpp() } }, { func: function() { __GLOBAL__sub_I_bind_cpp() } }); + + +memoryInitializer = "data:application/octet-stream;base64,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2wAAAAAAAABIBQAA3AAAAN0AAADeAAAAAAAAAFgFAADfAAAA4AAAAA0AAAAAAAAAaAUAANwAAADhAAAA3gAAAAAAAACYBQAAzQAAAOIAAADPAAAA0AAAAOMAAAAAAAAAiAUAAM0AAADkAAAAzwAAANAAAADlAAAAAAAAABgGAADNAAAA5gAAAM8AAADQAAAA0QAAAOcAAADoAAAA6QAAAExBU1ppcABvcGVuAGdldFBvaW50AGdldENvdW50AER5bmFtaWNMQVNaaXAAYWRkRmllbGRGbG9hdGluZwBhZGRGaWVsZFNpZ25lZABhZGRGaWVsZFVuc2lnbmVkAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzNfRUVOU185YWxsb2NhdG9ySVMzX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzdfRUVOU185YWxsb2NhdG9ySVM3X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFAExBU0YATjZsYXN6aXAxM2ludmFsaWRfbWFnaWNFAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUARmlsZSBtYWdpYyBpcyBub3QgdmFsaWQATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk42bGFzemlwMmlvNnJlYWRlcjEwYmFzaWNfZmlsZUlOUzJfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRTExX3ZhbGlkYXRvcnNFdkVVbFJOUzNfNmhlYWRlckVFX05TXzlhbGxvY2F0b3JJU0JfRUVGdlNBX0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlJONmxhc3ppcDJpbzZoZWFkZXJFRUVFAE42bGFzemlwMjFvbGRfc3R5bGVfY29tcHJlc3Npb25FAE42bGFzemlwMTRub3RfY29tcHJlc3NlZEUAVGhlIGZpbGUgc2VlbXMgdG8gaGF2ZSBvbGQgc3R5bGUgY29tcHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZABUaGUgZmlsZSBkb2Vzbid0IHNlZW0gdG8gYmUgY29tcHJlc3NlZABaTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUUxMV92YWxpZGF0b3JzRXZFVWxSTlMwXzZoZWFkZXJFRV8AbGFzemlwIGVuY29kZWQATjZsYXN6aXAxM25vX2xhc3ppcF92bHJFAE42bGFzemlwMjVsYXN6aXBfZm9ybWF0X3Vuc3VwcG9ydGVkRQBPbmx5IExBU3ppcCBQT0lOVFdJU0UgQ0hVTktFRCBkZWNvbXByZXNzb3IgaXMgc3VwcG9ydGVkAE5vIExBU3ppcCBWTFIgd2FzIGZvdW5kIGluIHRoZSBWTFJzIHNlY3Rpb24ATjZsYXN6aXAyMmNodW5rX3RhYmxlX3JlYWRfZXJyb3JFAENodW5rIHRhYmxlIG9mZnNldCA9PSAtMSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZQBONmxhc3ppcDEzbm90X3N1cHBvcnRlZEUATjZsYXN6aXAyNnVua25vd25fY2h1bmtfdGFibGVfZm9ybWF0RQBjaHVua19zaXplID09IHVpbnQubWF4IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLCBjYWxsIDEtODAwLURBRlVRIGZvciBzdXBwb3J0LgBUaGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgdGhlIGNodW5rIHRhYmxlAFRoZSBjaHVuayB0YWJsZSB2ZXJzaW9uIG51bWJlciBpcyB1bmtub3duAE42bGFzemlwMTFlbmRfb2ZfZmlsZUUAUmVhY2hlZCBFbmQgb2YgZmlsZQBJbnZhbGlkIG51bWJlciBvZiBzeW1ib2xzAGJpdHMgJiYgKGJpdHMgPD0gMzIpAC9Vc2Vycy9jb25ub3IvY29kZS9sYXotcGVyZi1hYmVsbC9lbXNjcmlwdGVuLy4uL2xhei1wZXJmL2RlY29kZXIuaHBwAHJlYWRCaXRzAHN5bSA8ICgxPDwxNikAcmVhZFNob3J0AE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM5X0VFTlNfOWFsbG9jYXRvcklTOV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwMTl1bmtub3duX3NjaGVtYV90eXBlRQBUaGUgTEFaIHNjaGVtYSBpcyBub3QgcmVjb2duaXplZABONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2ZpZWxkX2RlY29tcHJlc3NvcklOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMGR5bmFtaWNfZGVjb21wcmVzc29yRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVOU185YWxsb2NhdG9ySVNDX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBONmxhc3ppcDdmb3JtYXRzMTBiYXNlX2ZpZWxkRQAPDg0MCwoJCA4AAQMGCgoJDQECBAcLCwoMAwQFCAwMCwsGBwgJDQ0MCgoLDA0ODg0JCgsMDQ4PDggJCgsMDQ4PAAECAwQFBgcBAAECAwQFBgIBAAECAwQFAwIBAAECAwQEAwIBAAECAwUEAwIBAAECBgUEAwIBAAEHBgUEAwIBAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdncHN0aW1lRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzN2dwc3RpbWVFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTSV9FRU5TXzlhbGxvY2F0b3JJU0lfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3Z3BzdGltZUVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF81ZmllbGRJTlMwXzNsYXMzcmdiRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzM3JnYkVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczNyZ2JFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfNWZpZWxkSU5TMF8zbGFzMTBleHRyYWJ5dGVzRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0lfRUVOU185YWxsb2NhdG9ySVNJX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNLX0VFTlNfOWFsbG9jYXRvcklTS19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzBfNWZpZWxkSU5TMF8zbGFzN3BvaW50MTBFTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0RfRUVFRU5TQl9JTlNDXzdncHN0aW1lRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTTl9FRU5TXzlhbGxvY2F0b3JJU05fRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNEX0VFRUVOU0JfSU5TQ18zcmdiRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTSl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNOX0VFTlNfOWFsbG9jYXRvcklTTl9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFTlNEX0lOU0VfM3JnYkVOU0dfSVNKX0VFRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFTlNCX0lOU0NfN2dwc3RpbWVFTlNFX0lTSF9FRUVFTlNCX0lOU0NfM3JnYkVOU0VfSVNLX0VFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV83Z3BzdGltZUVOU0dfSVNKX0VFRUVOU0RfSU5TRV8zcmdiRU5TR19JU01fRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTUV9FRU5TXzlhbGxvY2F0b3JJU1FfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTTV9FRUVFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBidWZfc3RyZWFtTlNfMTRkZWZhdWx0X2RlbGV0ZUlTMV9FRU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUkxMGJ1Zl9zdHJlYW1FRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA4ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM1X0VFTlNfOWFsbG9jYXRvcklTNV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZmllbGRfZGVjb21wcmVzc29ySU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzhfRUVOU185YWxsb2NhdG9ySVM4X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElpTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWlFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWlOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElpRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElqTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJakVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJak5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWpFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWpOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElqRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElhTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJYUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJYU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWFFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWFOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElhRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElzTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJc0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJc05TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXNFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXNOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElzRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEloTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWhFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWhOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEloRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEl0TlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJdEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJdE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXRFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXROUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEl0RUVFRUVFRUUANkxBU1ppcABQNkxBU1ppcABQSzZMQVNaaXAAaWkAdgB2aQB2aWlpaQB2aWlpAGlpaQAxM0R5bmFtaWNMQVNaaXAAUDEzRHluYW1pY0xBU1ppcABQSzEzRHluYW1pY0xBU1ppcAB2b2lkAGJvb2wAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AGludAB1bnNpZ25lZCBpbnQAbG9uZwB1bnNpZ25lZCBsb25nAGZsb2F0AGRvdWJsZQBzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE4xMGVtc2NyaXB0ZW4zdmFsRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMjFfX2Jhc2ljX3N0cmluZ19jb21tb25JTGIxRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOADAxMjM0NTY3ODlBQkNERUYuAFQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAc3RkOjpiYWRfZnVuY3Rpb25fY2FsbABOU3QzX18yMTdiYWRfZnVuY3Rpb25fY2FsbEUATlN0M19fMjE0X19zaGFyZWRfY291bnRFAE5TdDNfXzIxOV9fc2hhcmVkX3dlYWtfY291bnRFAG11dGV4IGxvY2sgZmFpbGVkAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXM6ICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXMAdGVybWluYXRpbmcgd2l0aCAlcyBmb3JlaWduIGV4Y2VwdGlvbgB0ZXJtaW5hdGluZwB1bmNhdWdodABTdDlleGNlcHRpb24ATjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAU3Q5dHlwZV9pbmZvAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAcHRocmVhZF9vbmNlIGZhaWx1cmUgaW4gX19jeGFfZ2V0X2dsb2JhbHNfZmFzdCgpAGNhbm5vdCBjcmVhdGUgcHRocmVhZCBrZXkgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAY2Fubm90IHplcm8gb3V0IHRocmVhZCB2YWx1ZSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQB0ZXJtaW5hdGVfaGFuZGxlciB1bmV4cGVjdGVkbHkgcmV0dXJuZWQAc3RkOjpleGNlcHRpb24AU3QxMWxvZ2ljX2Vycm9yAFN0MTNydW50aW1lX2Vycm9yAFN0MTJsZW5ndGhfZXJyb3IATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19wYmFzZV90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQB2AERuAGIAYwBoAGEAcwB0AGkAagBsAG0AZgBkAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0U="; + + + + + +/* no memory initializer */ +var tempDoublePtr = STATICTOP; STATICTOP += 16; + +assert(tempDoublePtr % 8 == 0); + +function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much + + HEAP8[tempDoublePtr] = HEAP8[ptr]; + + HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; + + HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; + + HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; + +} + +function copyTempDouble(ptr) { + + HEAP8[tempDoublePtr] = HEAP8[ptr]; + + HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; + + HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; + + HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; + + HEAP8[tempDoublePtr+4] = HEAP8[ptr+4]; + + HEAP8[tempDoublePtr+5] = HEAP8[ptr+5]; + + HEAP8[tempDoublePtr+6] = HEAP8[ptr+6]; + + HEAP8[tempDoublePtr+7] = HEAP8[ptr+7]; + +} + +// {{PRE_LIBRARY}} + + + function ___assert_fail(condition, filename, line, func) { + abort('Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function']); + } + + function ___cxa_allocate_exception(size) { + return _malloc(size); + } + + + function __ZSt18uncaught_exceptionv() { // std::uncaught_exception() + return !!__ZSt18uncaught_exceptionv.uncaught_exception; + } + + var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function (adjusted) { + if (!adjusted || EXCEPTIONS.infos[adjusted]) return adjusted; + for (var key in EXCEPTIONS.infos) { + 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 + var info = EXCEPTIONS.infos[ptr]; + if (info.adjusted === adjusted) { + return ptr; + } + } + return adjusted; + },addRef:function (ptr) { + if (!ptr) return; + var info = EXCEPTIONS.infos[ptr]; + info.refcount++; + },decRef:function (ptr) { + if (!ptr) return; + var info = EXCEPTIONS.infos[ptr]; + assert(info.refcount > 0); + info.refcount--; + // A rethrown exception can reach refcount 0; it must not be discarded + // Its next handler will clear the rethrown flag and addRef it, prior to + // final decRef and destruction here + 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 (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 ___cxa_pure_virtual() { + ABORT = true; + throw 'Pure virtual function called!'; + } + + + + function ___resumeException(ptr) { + if (!EXCEPTIONS.last) { EXCEPTIONS.last = ptr; } + throw ptr; + }function ___cxa_find_matching_catch() { + var thrown = EXCEPTIONS.last; + if (!thrown) { + // just pass through the null ptr + return ((setTempRet0(0),0)|0); + } + var info = EXCEPTIONS.infos[thrown]; + var throwntype = info.type; + if (!throwntype) { + // just pass through the thrown ptr + return ((setTempRet0(0),thrown)|0); + } + var typeArray = Array.prototype.slice.call(arguments); + + var pointer = Module['___cxa_is_pointer_type'](throwntype); + // can_catch receives a **, add indirection + 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; + // The different catch blocks are denoted by different types. + // Due to inheritance, those types may not precisely match the + // type of the thrown object. Find one which matches, and + // return the type of the catch block which should be called. + for (var i = 0; i < typeArray.length; i++) { + if (typeArray[i] && Module['___cxa_can_catch'](typeArray[i], throwntype, thrown)) { + thrown = HEAP32[((thrown)>>2)]; // undo indirection + info.adjusted = thrown; + return ((setTempRet0(typeArray[i]),thrown)|0); + } + } + // Shouldn't happen unless we have bogus data in typeArray + // or encounter a type for which emscripten doesn't have suitable + // typeinfo defined. Best-efforts match just in case. + thrown = HEAP32[((thrown)>>2)]; // undo indirection + 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; + } + + function ___gxx_personality_v0() { + } + + function ___lock() {} + + + + + + var SYSCALLS={varargs:0,get:function (varargs) { + SYSCALLS.varargs += 4; + var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; + return ret; + },getStr:function () { + var ret = Pointer_stringify(SYSCALLS.get()); + return ret; + },get64:function () { + var low = SYSCALLS.get(), high = SYSCALLS.get(); + if (low >= 0) assert(high === 0); + else assert(high === -1); + return low; + },getZero:function () { + assert(SYSCALLS.get() === 0); + }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs; + try { + // llseek + var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get(); + // NOTE: offset_high is unused - Emscripten's off_t is 32-bit + var offset = offset_low; + FS.llseek(stream, offset, whence); + HEAP32[((result)>>2)]=stream.position; + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + + function flush_NO_FILESYSTEM() { + // flush anything remaining in the buffers during shutdown + var fflush = Module["_fflush"]; + if (fflush) fflush(0); + var printChar = ___syscall146.printChar; + if (!printChar) return; + var buffers = ___syscall146.buffers; + if (buffers[1].length) printChar(1, 10); + if (buffers[2].length) printChar(2, 10); + }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs; + try { + // writev + // hack to support printf in NO_FILESYSTEM + var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get(); + var ret = 0; + if (!___syscall146.buffers) { + ___syscall146.buffers = [null, [], []]; // 1 => stdout, 2 => stderr + ___syscall146.printChar = function(stream, curr) { + var buffer = ___syscall146.buffers[stream]; + assert(buffer); + if (curr === 0 || curr === 10) { + (stream === 1 ? Module['print'] : Module['printErr'])(UTF8ArrayToString(buffer, 0)); + buffer.length = 0; + } else { + buffer.push(curr); + } + }; + } + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[(((iov)+(i*8))>>2)]; + var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; + for (var j = 0; j < len; j++) { + ___syscall146.printChar(stream, HEAPU8[ptr+j]); + } + ret += len; + } + return ret; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs; + try { + // ioctl + return 0; + } catch (e) { + if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); + return -e.errno; + } + } + + function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs; + try { + // close + 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); + /*jshint evil:true*/ + 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(wt) { + // ambiguous emscripten ABI: sometimes return values are + // true or false, and sometimes integers (0 or 1) + return !!wt; + }, + 'toWireType': function(destructors, o) { + return o ? trueValue : falseValue; + }, + 'argPackAdvance': 8, + 'readValueFromPointer': function(pointer) { + // TODO: if heap is fixed (like in asm.js) this could be executed outside + 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, // This type does not need a destructor + }); + } + + + + + 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]; + // Inject an overload resolver function that routes to the appropriate overload based on the number of arguments. + proto[methodName] = function() { + // TODO This check can be removed in -O3 level "unsafe" optimizations. + 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); + }; + // Move the previous function into the overload table. + 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"); + } + + // We are exposing a function with the same name as an existing function. Create an overload table and a function selector + // that routes between the two. + ensureOverloadTable(Module, name, name); + if (Module.hasOwnProperty(numArguments)) { + throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!"); + } + // Add the new function into the overload table. + 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) { + // TODO: this is not strictly true + // We could support BY_EMVAL conversions from raw pointers to smart pointers + // because the smart pointer can hold a reference to the handle + if (undefined === handle.$$.smartPtr) { + throwBindingError('Passing raw pointer to smart pointer is illegal'); + } + + switch (this.sharingPolicy) { + case 0: // NONE + // no upcasting + 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: // INTRUSIVE + ptr = handle.$$.smartPtr; + break; + + case 2: // BY_EMVAL + 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; // no conversion + } + + 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) { + // ptr is a raw pointer (or a raw smartpointer) + + // rawPointer is a maybe-null raw pointer + var rawPointer = this.getPointee(ptr); + if (!rawPointer) { + this.destructor(ptr); + return null; + } + + var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); + if (undefined !== registeredInstance) { + // JS object has been neutered, time to repopulate it + if (0 === registeredInstance.$$.count.value) { + registeredInstance.$$.ptr = rawPointer; + registeredInstance.$$.smartPtr = ptr; + return registeredInstance['clone'](); + } else { + // else, just increment reference count on existing object + // it already has a reference to the smart pointer + 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, + + // smart pointer properties + isSmartPointer, + pointeeType, + sharingPolicy, + rawGetPointee, + rawConstructor, + rawShare, + rawDestructor + ) { + this.name = name; + this.registeredClass = registeredClass; + this.isReference = isReference; + this.isConst = isConst; + + // smart pointer properties + 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; + // Here we must leave this.destructorFunction undefined, since whether genericPointerToWireType returns + // a pointer that needs to be freed up is runtime-dependent, and cannot be evaluated at registration time. + // TODO: Create an alternative mechanism that allows removing the use of var destructors = []; array in + // craftInvokerFunction altogether. + } + } + + function replacePublicSymbol(name, value, numArguments) { + if (!Module.hasOwnProperty(name)) { + throwInternalError('Replacing nonexistant public symbol'); + } + // If there's an overload table for this symbol, replace the symbol in the overload table instead. + 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 { + // asm.js does not give direct access to the function tables, + // and thus we must go through the dynCall interface which allows + // calling into a signature's function table by pointer value. + // + // https://github.com/dherman/asm.js/issues/83 + // + // This has three main penalties: + // - dynCall is another function call in the path from JavaScript to C++. + // - JITs may not predict through the function table indirection at runtime. + var dc = Module["asm"]['dynCall_' + signature]; + if (dc === undefined) { + // We will always enter this branch if the signature + // contains 'f' and PRECISE_F32 is not enabled. + // + // Try again, replacing 'f' with 'd'. + 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() { + // this code cannot run if baseClassRawType is zero + 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) + " which is not a function"); + } + + /* + * Previously, the following line was just: + + function dummy() {}; + + * Unfortunately, Chrome was preserving 'dummy' as the object's name, even though at creation, the 'dummy' has the + * correct constructor name. Thus, objects created with IMVU.new would show up in the debugger as 'dummy', which + * isn't very helpful. Using IMVU.createNamedFunction addresses the issue. Doublely-unfortunately, there's no way + * to write a test for this behavior. -NRD 2013.02.22 + */ + 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) { + // humanName: a human-readable string name for the function to be generated. + // argTypes: An array that contains the embind type objects for all types in the function signature. + // argTypes[0] is the type object for the function return value. + // argTypes[1] is the type object for function this object/class type, or null if not crafting an invoker for a class method. + // argTypes[2...] are the actual function parameters. + // classType: The embind type object for the class to be bound, or null if this is not a method of a class. + // cppInvokerFunc: JS Function object to the C++-side function that interops into C++ code. + // cppTargetFunc: Function pointer (an integer to FUNCTION_TABLE) to the target C++ function the cppInvokerFunc will end up calling. + 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); + + // Free functions with signature "void function()" do not need an invoker that marshalls between wire types. + // TODO: This omits argument count check - enable only at -O3 or similar. + // if (ENABLE_UNSAFE_OPTS && argCount == 2 && argTypes[0].name == "void" && !isClassMethodFunc) { + // return FUNCTION_TABLE[fn]; + // } + + + // Determine if we need to use a dynamic stack to store the destructors for the function parameters. + // TODO: Remove this completely once all function invokers are being dynamically generated. + var needsDestructorStack = false; + + for(var i = 1; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. + if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { // The type does not define a destructor function - must use dynamic stack + 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) { // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method. + 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, // [ReturnType, ThisType, Args...] + 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)) { + // 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. + unboundTypesHandler.argCount = argCount - 2; + unboundTypesHandler.className = classType.name; + proto[methodName] = unboundTypesHandler; + } else { + // There was an existing function with the same name registered. Set up a function overload routing table. + ensureOverloadTable(proto, methodName, humanName); + proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler; + } + + whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { + + var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); + + // Replace the initial unbound-handler-stub function with the appropriate member function, now that all types + // are resolved. If multiple overloads are registered for this function, the function goes into an overload table. + if (undefined === proto[methodName].overloadTable) { + // Set argCount in case an overload is registered later + 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(handle) { + var rv = emval_handle_array[handle].value; + __emval_decref(handle); + return rv; + }, + 'toWireType': function(destructors, value) { + return __emval_register(value); + }, + 'argPackAdvance': 8, + 'readValueFromPointer': simpleReadValueFromPointer, + destructorFunction: null, // This type does not need a destructor + + // TODO: do we need a deleteObject here? write a test where + // emval is passed into JS via an interface + }); + } + + + function _embind_repr(v) { + if (v === null) { + return 'null'; + } + var t = 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(value) { + return value; + }, + 'toWireType': function(destructors, value) { + // todo: Here we have an opportunity for -O3 level "unsafe" optimizations: we could + // avoid the following if() and assume value is of proper type. + 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, // This type does not need a destructor + }); + } + + + function integerReadValueFromPointer(name, shift, signed) { + // integers are quite common, so generate very specialized functions + 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) { // LLVM doesn't have signed and unsigned 32-bit types, so u32 literals come out as 'i32 -1'. Always treat those as max u32. + maxRange = 4294967295; + } + + var shift = getShiftFromSize(size); + + var fromWireType = function(value) { + return value; + }; + + if (minRange === 0) { + var bitshift = 32 - 8*size; + fromWireType = function(value) { + return (value << bitshift) >>> bitshift; + }; + } + + var isUnsignedType = (name.indexOf('unsigned') != -1); + + registerType(primitiveType, { + name: name, + 'fromWireType': fromWireType, + 'toWireType': function(destructors, value) { + // todo: Here we have an opportunity for -O3 level "unsafe" optimizations: we could + // avoid the following two if()s and assume value is of proper type. + 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, // This type does not need a destructor + }); + } + + 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]; // in elements + var data = heap[handle + 1]; // byte offset into emscripten heap + 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); + registerType(rawType, { + name: name, + 'fromWireType': function(value) { + var length = HEAPU32[value >> 2]; + var a = new Array(length); + for (var i = 0; i < length; ++i) { + a[i] = String.fromCharCode(HEAPU8[value + 4 + i]); + } + _free(value); + return a.join(''); + }, + 'toWireType': function(destructors, value) { + if (value instanceof ArrayBuffer) { + value = new Uint8Array(value); + } + + function getTAElement(ta, index) { + return ta[index]; + } + function getStringElement(string, index) { + return string.charCodeAt(index); + } + var getElement; + if (value instanceof Uint8Array) { + getElement = getTAElement; + } else if (value instanceof Uint8ClampedArray) { + getElement = getTAElement; + } else if (value instanceof Int8Array) { + getElement = getTAElement; + } else if (typeof value === 'string') { + getElement = getStringElement; + } else { + throwBindingError('Cannot pass non-string to std::string'); + } + + // assumes 4-byte alignment + var length = value.length; + var ptr = _malloc(4 + length); + HEAPU32[ptr >> 2] = length; + for (var i = 0; i < length; ++i) { + var charCode = getElement(value, 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; + } + if (destructors !== null) { + destructors.push(_free, ptr); + } + return ptr; + }, + 'argPackAdvance': 8, + 'readValueFromPointer': simpleReadValueFromPointer, + destructorFunction: function(ptr) { _free(ptr); }, + }); + } + + function __embind_register_std_wstring(rawType, charSize, name) { + // nb. do not cache HEAPU16 and HEAPU32, they may be destroyed by enlargeMemory(). + name = readLatin1String(name); + var getHeap, shift; + if (charSize === 2) { + getHeap = function() { return HEAPU16; }; + shift = 1; + } else if (charSize === 4) { + getHeap = function() { return HEAPU32; }; + shift = 2; + } + registerType(rawType, { + name: name, + 'fromWireType': function(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(destructors, value) { + // assumes 4-byte alignment + 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(ptr) { _free(ptr); }, + }); + } + + function __embind_register_void(rawType, name) { + name = readLatin1String(name); + registerType(rawType, { + isVoid: true, // void return values can be optimized out sometimes + name: name, + 'argPackAdvance': 0, + 'fromWireType': function() { + return undefined; + }, + 'toWireType': function(destructors, o) { + // TODO: assert if anything else is given? + return undefined; + }, + }); + } + + function _abort() { + Module['abort'](); + } + + + + + + + + + + + + function _llvm_trap() { + abort('trap!'); + } + + + 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; + + 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) { + if (key == 0) { + return ERRNO_CODES.EINVAL; + } + HEAP32[((key)>>2)]=PTHREAD_SPECIFIC_NEXT_KEY; + // values start at 0 + 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; + } + + + function ___setErrNo(value) { + if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value; + else Module.printErr('failed to set errno from JS'); + return value; + } +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; // seal the static portion of memory + +assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack"); + +var ASSERTIONS = true; + +/** @type {function(string, boolean=, number=)} */ +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 > 0xFF) { + if (ASSERTIONS) { + assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); + } + chr &= 0xFF; + } + ret.push(String.fromCharCode(chr)); + } + return ret.join(''); +} + + +// Copied from https://github.com/strophe/strophejs/blob/e06d027/src/polyfills.js#L149 + +// This code was written by Tyler Akins and has been placed in the +// public domain. It would be nice if you left this header intact. +// Base64 code from Tyler Akins -- http://rumkin.com + +/** + * Decodes a base64 string. + * @param {String} input The string to decode. + */ +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; + // remove all characters that are not A-Z, a-z, 0-9, +, /, or = + 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; +}; + +// Converts a string of base64 into a byte array. +// Throws error on invalid input. +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.'); + } +} + +// If filename is a base64 data URI, parses and returns data (Buffer on node, +// Uint8Array otherwise). If filename is not a base64 data URI, returns undefined. +function tryParseAsDataURI(filename) { + if (!isDataURI(filename)) { + return; + } + + return intArrayFromBase64(filename.slice(dataURIPrefix.length)); +} + + + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function 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) } + +function invoke_i(index) { + try { + return Module["dynCall_i"](index); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_ii(index,a1) { + try { + return Module["dynCall_ii"](index,a1); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_iii(index,a1,a2) { + try { + return Module["dynCall_iii"](index,a1,a2); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_iiii(index,a1,a2,a3) { + try { + return Module["dynCall_iiii"](index,a1,a2,a3); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_v(index) { + try { + Module["dynCall_v"](index); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_vi(index,a1) { + try { + Module["dynCall_vi"](index,a1); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_vii(index,a1,a2) { + try { + Module["dynCall_vii"](index,a1,a2); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_viii(index,a1,a2,a3) { + try { + Module["dynCall_viii"](index,a1,a2,a3); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_viiii(index,a1,a2,a3,a4) { + try { + Module["dynCall_viiii"](index,a1,a2,a3,a4); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_viiiii(index,a1,a2,a3,a4,a5) { + try { + Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5); + } catch(e) { + if (typeof e !== 'number' && e !== 'longjmp') throw e; + Module["setThrew"](1, 0); + } +} + +function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) { + try { + Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6); + } catch(e) { + 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, "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 }; +// EMSCRIPTEN_START_ASM +var asm = (/** @suppress {uselessCode} */ function(global, env, buffer) { +'almost asm'; + + + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + + var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0; + var tempDoublePtr=env.tempDoublePtr|0; + var ABORT=env.ABORT|0; + var STACKTOP=env.STACKTOP|0; + var STACK_MAX=env.STACK_MAX|0; + + var __THREW__ = 0; + var threwValue = 0; + var setjmpId = 0; + var undef = 0; + var nan = global.NaN, inf = global.Infinity; + var tempInt = 0, tempBigInt = 0, tempBigIntS = 0, tempValue = 0, tempDouble = 0.0; + var tempRet0 = 0; + + var Math_floor=global.Math.floor; + var Math_abs=global.Math.abs; + var Math_sqrt=global.Math.sqrt; + var Math_pow=global.Math.pow; + var Math_cos=global.Math.cos; + var Math_sin=global.Math.sin; + var Math_tan=global.Math.tan; + var Math_acos=global.Math.acos; + var Math_asin=global.Math.asin; + var Math_atan=global.Math.atan; + var Math_atan2=global.Math.atan2; + var Math_exp=global.Math.exp; + var Math_log=global.Math.log; + var Math_ceil=global.Math.ceil; + var Math_imul=global.Math.imul; + var Math_min=global.Math.min; + var Math_max=global.Math.max; + var Math_clz32=global.Math.clz32; + var abort=env.abort; + var assert=env.assert; + var enlargeMemory=env.enlargeMemory; + var getTotalMemory=env.getTotalMemory; + var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory; + var abortStackOverflow=env.abortStackOverflow; + var nullFunc_i=env.nullFunc_i; + var nullFunc_ii=env.nullFunc_ii; + var nullFunc_iii=env.nullFunc_iii; + var nullFunc_iiii=env.nullFunc_iiii; + var nullFunc_v=env.nullFunc_v; + var nullFunc_vi=env.nullFunc_vi; + var nullFunc_vii=env.nullFunc_vii; + var nullFunc_viii=env.nullFunc_viii; + var nullFunc_viiii=env.nullFunc_viiii; + var nullFunc_viiiii=env.nullFunc_viiiii; + var nullFunc_viiiiii=env.nullFunc_viiiiii; + var invoke_i=env.invoke_i; + var invoke_ii=env.invoke_ii; + var invoke_iii=env.invoke_iii; + var invoke_iiii=env.invoke_iiii; + var invoke_v=env.invoke_v; + var invoke_vi=env.invoke_vi; + var invoke_vii=env.invoke_vii; + var invoke_viii=env.invoke_viii; + var invoke_viiii=env.invoke_viiii; + var invoke_viiiii=env.invoke_viiiii; + var invoke_viiiiii=env.invoke_viiiiii; + var ClassHandle=env.ClassHandle; + var ClassHandle_clone=env.ClassHandle_clone; + var ClassHandle_delete=env.ClassHandle_delete; + var ClassHandle_deleteLater=env.ClassHandle_deleteLater; + var ClassHandle_isAliasOf=env.ClassHandle_isAliasOf; + var ClassHandle_isDeleted=env.ClassHandle_isDeleted; + var RegisteredClass=env.RegisteredClass; + var RegisteredPointer=env.RegisteredPointer; + var RegisteredPointer_deleteObject=env.RegisteredPointer_deleteObject; + var RegisteredPointer_destructor=env.RegisteredPointer_destructor; + var RegisteredPointer_fromWireType=env.RegisteredPointer_fromWireType; + var RegisteredPointer_getPointee=env.RegisteredPointer_getPointee; + var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv; + var ___assert_fail=env.___assert_fail; + var ___cxa_allocate_exception=env.___cxa_allocate_exception; + var ___cxa_begin_catch=env.___cxa_begin_catch; + var ___cxa_find_matching_catch=env.___cxa_find_matching_catch; + var ___cxa_pure_virtual=env.___cxa_pure_virtual; + var ___cxa_throw=env.___cxa_throw; + var ___gxx_personality_v0=env.___gxx_personality_v0; + var ___lock=env.___lock; + var ___resumeException=env.___resumeException; + var ___setErrNo=env.___setErrNo; + var ___syscall140=env.___syscall140; + var ___syscall146=env.___syscall146; + var ___syscall54=env.___syscall54; + var ___syscall6=env.___syscall6; + var ___unlock=env.___unlock; + var __embind_register_bool=env.__embind_register_bool; + var __embind_register_class=env.__embind_register_class; + var __embind_register_class_constructor=env.__embind_register_class_constructor; + var __embind_register_class_function=env.__embind_register_class_function; + var __embind_register_emval=env.__embind_register_emval; + var __embind_register_float=env.__embind_register_float; + var __embind_register_integer=env.__embind_register_integer; + var __embind_register_memory_view=env.__embind_register_memory_view; + var __embind_register_std_string=env.__embind_register_std_string; + var __embind_register_std_wstring=env.__embind_register_std_wstring; + var __embind_register_void=env.__embind_register_void; + var __emval_decref=env.__emval_decref; + var __emval_register=env.__emval_register; + var _abort=env._abort; + var _embind_repr=env._embind_repr; + var _emscripten_memcpy_big=env._emscripten_memcpy_big; + var _llvm_trap=env._llvm_trap; + var _pthread_getspecific=env._pthread_getspecific; + var _pthread_key_create=env._pthread_key_create; + var _pthread_once=env._pthread_once; + var _pthread_setspecific=env._pthread_setspecific; + var constNoSmartPtrRawPointerToWireType=env.constNoSmartPtrRawPointerToWireType; + var count_emval_handles=env.count_emval_handles; + var craftInvokerFunction=env.craftInvokerFunction; + var createNamedFunction=env.createNamedFunction; + var downcastPointer=env.downcastPointer; + var embind__requireFunction=env.embind__requireFunction; + var embind_init_charCodes=env.embind_init_charCodes; + var ensureOverloadTable=env.ensureOverloadTable; + var exposePublicSymbol=env.exposePublicSymbol; + var extendError=env.extendError; + var floatReadValueFromPointer=env.floatReadValueFromPointer; + var flushPendingDeletes=env.flushPendingDeletes; + var flush_NO_FILESYSTEM=env.flush_NO_FILESYSTEM; + var genericPointerToWireType=env.genericPointerToWireType; + var getBasestPointer=env.getBasestPointer; + var getInheritedInstance=env.getInheritedInstance; + var getInheritedInstanceCount=env.getInheritedInstanceCount; + var getLiveInheritedInstances=env.getLiveInheritedInstances; + var getShiftFromSize=env.getShiftFromSize; + var getTypeName=env.getTypeName; + var get_first_emval=env.get_first_emval; + var heap32VectorToArray=env.heap32VectorToArray; + var init_ClassHandle=env.init_ClassHandle; + var init_RegisteredPointer=env.init_RegisteredPointer; + var init_embind=env.init_embind; + var init_emval=env.init_emval; + var integerReadValueFromPointer=env.integerReadValueFromPointer; + var makeClassHandle=env.makeClassHandle; + var makeLegalFunctionName=env.makeLegalFunctionName; + var new_=env.new_; + var nonConstNoSmartPtrRawPointerToWireType=env.nonConstNoSmartPtrRawPointerToWireType; + var readLatin1String=env.readLatin1String; + var registerType=env.registerType; + var replacePublicSymbol=env.replacePublicSymbol; + var runDestructor=env.runDestructor; + var runDestructors=env.runDestructors; + var setDelayFunction=env.setDelayFunction; + var shallowCopyInternalPointer=env.shallowCopyInternalPointer; + var simpleReadValueFromPointer=env.simpleReadValueFromPointer; + var throwBindingError=env.throwBindingError; + var throwInstanceAlreadyDeleted=env.throwInstanceAlreadyDeleted; + var throwInternalError=env.throwInternalError; + var throwUnboundTypeError=env.throwUnboundTypeError; + var upcastPointer=env.upcastPointer; + var whenDependentTypesAreResolved=env.whenDependentTypesAreResolved; + var tempFloat = 0.0; + +// EMSCRIPTEN_START_FUNCS + +function stackAlloc(size) { + size = size|0; + var ret = 0; + ret = STACKTOP; + STACKTOP = (STACKTOP + size)|0; + STACKTOP = (STACKTOP + 15)&-16; + if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(size|0); + + return ret|0; +} +function stackSave() { + return STACKTOP|0; +} +function stackRestore(top) { + top = top|0; + STACKTOP = top; +} +function establishStackSpace(stackBase, stackMax) { + stackBase = stackBase|0; + stackMax = stackMax|0; + STACKTOP = stackBase; + STACK_MAX = stackMax; +} + +function setThrew(threw, value) { + threw = threw|0; + value = value|0; + if ((__THREW__|0) == 0) { + __THREW__ = threw; + threwValue = value; + } +} + +function setTempRet0(value) { + value = value|0; + tempRet0 = value; +} +function getTempRet0() { + return tempRet0|0; +} + +function ___cxx_global_var_init() { + var label = 0, sp = 0; + sp = STACKTOP; + __ZN38EmscriptenBindingInitializer_my_moduleC2Ev(21880); + return; +} +function __ZN38EmscriptenBindingInitializer_my_moduleC2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 496|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(496|0); + $4 = sp + 448|0; + $6 = sp + 481|0; + $7 = sp + 72|0; + $11 = sp + 424|0; + $13 = sp + 480|0; + $14 = sp + 64|0; + $18 = sp + 400|0; + $20 = sp + 479|0; + $21 = sp + 56|0; + $25 = sp + 376|0; + $27 = sp + 478|0; + $28 = sp + 48|0; + $32 = sp + 352|0; + $34 = sp + 477|0; + $35 = sp + 40|0; + $36 = sp + 32|0; + $40 = sp + 476|0; + $56 = sp + 264|0; + $58 = sp + 475|0; + $59 = sp + 24|0; + $63 = sp + 240|0; + $65 = sp + 474|0; + $66 = sp + 16|0; + $70 = sp + 216|0; + $72 = sp + 473|0; + $73 = sp + 8|0; + $74 = sp; + $78 = sp + 472|0; + $92 = sp + 471|0; + $93 = sp + 470|0; + $94 = sp + 136|0; + $95 = sp + 128|0; + $96 = sp + 120|0; + $97 = sp + 469|0; + $98 = sp + 468|0; + $99 = sp + 112|0; + $100 = sp + 104|0; + $101 = sp + 96|0; + $102 = sp + 88|0; + $103 = sp + 80|0; + $91 = $0; + $85 = $92; + $86 = 3768; + __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv(); + $87 = 234; + $104 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv()|0); + $88 = $104; + $105 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv()|0); + $89 = $105; + $90 = 235; + $106 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); + $107 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv()|0); + $108 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv()|0); + $109 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0); + $110 = $87; + $84 = $110; + $111 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); + $112 = $87; + $113 = $88; + $83 = $113; + $114 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); + $115 = $88; + $116 = $89; + $82 = $116; + $117 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); + $118 = $89; + $119 = $86; + $120 = $90; + $81 = $120; + $121 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0); + $122 = $90; + __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)); + $80 = $92; + $123 = $80; + $76 = $123; + $77 = 236; + $124 = $76; + $79 = 237; + $125 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); + $126 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($78)|0); + $127 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($78)|0); + $128 = $79; + $75 = $128; + $129 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); + $130 = $79; + $131 = $77; + __embind_register_class_constructor(($125|0),($126|0),($127|0),($129|0),($130|0),($131|0)); + HEAP32[$94>>2] = (238); + $$index1 = ((($94)) + 4|0); + HEAP32[$$index1>>2] = 0; + ;HEAP8[$73>>0]=HEAP8[$93>>0]|0; + ;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; + $$field = HEAP32[$74>>2]|0; + $$index3 = ((($74)) + 4|0); + $$field4 = HEAP32[$$index3>>2]|0; + $68 = $124; + $69 = 3775; + HEAP32[$70>>2] = $$field; + $$index7 = ((($70)) + 4|0); + HEAP32[$$index7>>2] = $$field4; + $132 = $68; + $71 = 239; + $133 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); + $134 = $69; + $135 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($72)|0); + $136 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($72)|0); + $137 = $71; + $67 = $137; + $138 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0); + $139 = $71; + $140 = (__ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($70)|0); + __embind_register_class_function(($133|0),($134|0),($135|0),($136|0),($138|0),($139|0),($140|0),0); + HEAP32[$95>>2] = (240); + $$index9 = ((($95)) + 4|0); + HEAP32[$$index9>>2] = 0; + ;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; + $$field11 = HEAP32[$66>>2]|0; + $$index13 = ((($66)) + 4|0); + $$field14 = HEAP32[$$index13>>2]|0; + $61 = $132; + $62 = 3780; + HEAP32[$63>>2] = $$field11; + $$index17 = ((($63)) + 4|0); + HEAP32[$$index17>>2] = $$field14; + $141 = $61; + $64 = 241; + $142 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); + $143 = $62; + $144 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($65)|0); + $145 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($65)|0); + $146 = $64; + $60 = $146; + $147 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); + $148 = $64; + $149 = (__ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($63)|0); + __embind_register_class_function(($142|0),($143|0),($144|0),($145|0),($147|0),($148|0),($149|0),0); + HEAP32[$96>>2] = (242); + $$index19 = ((($96)) + 4|0); + HEAP32[$$index19>>2] = 0; + ;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; + $$field21 = HEAP32[$59>>2]|0; + $$index23 = ((($59)) + 4|0); + $$field24 = HEAP32[$$index23>>2]|0; + $54 = $141; + $55 = 3789; + HEAP32[$56>>2] = $$field21; + $$index27 = ((($56)) + 4|0); + HEAP32[$$index27>>2] = $$field24; + $57 = 243; + $150 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); + $151 = $55; + $152 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($58)|0); + $153 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($58)|0); + $154 = $57; + $53 = $154; + $155 = (__ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv()|0); + $156 = $57; + $157 = (__ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($56)|0); + __embind_register_class_function(($150|0),($151|0),($152|0),($153|0),($155|0),($156|0),($157|0),0); + $47 = $97; + $48 = 3798; + __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv(); + $49 = 244; + $158 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv()|0); + $50 = $158; + $159 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv()|0); + $51 = $159; + $52 = 245; + $160 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); + $161 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv()|0); + $162 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv()|0); + $163 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0); + $164 = $49; + $46 = $164; + $165 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); + $166 = $49; + $167 = $50; + $45 = $167; + $168 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); + $169 = $50; + $170 = $51; + $44 = $170; + $171 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); + $172 = $51; + $173 = $48; + $174 = $52; + $43 = $174; + $175 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0); + $176 = $52; + __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)); + $42 = $97; + $177 = $42; + $38 = $177; + $39 = 246; + $178 = $38; + $41 = 247; + $179 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); + $180 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($40)|0); + $181 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($40)|0); + $182 = $41; + $37 = $182; + $183 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); + $184 = $41; + $185 = $39; + __embind_register_class_constructor(($179|0),($180|0),($181|0),($183|0),($184|0),($185|0)); + HEAP32[$99>>2] = (248); + $$index29 = ((($99)) + 4|0); + HEAP32[$$index29>>2] = 0; + ;HEAP8[$35>>0]=HEAP8[$98>>0]|0; + ;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; + $$field31 = HEAP32[$36>>2]|0; + $$index33 = ((($36)) + 4|0); + $$field34 = HEAP32[$$index33>>2]|0; + $30 = $178; + $31 = 3775; + HEAP32[$32>>2] = $$field31; + $$index37 = ((($32)) + 4|0); + HEAP32[$$index37>>2] = $$field34; + $186 = $30; + $33 = 249; + $187 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); + $188 = $31; + $189 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($34)|0); + $190 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($34)|0); + $191 = $33; + $29 = $191; + $192 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0); + $193 = $33; + $194 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($32)|0); + __embind_register_class_function(($187|0),($188|0),($189|0),($190|0),($192|0),($193|0),($194|0),0); + HEAP32[$100>>2] = (250); + $$index39 = ((($100)) + 4|0); + HEAP32[$$index39>>2] = 0; + ;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; + $$field41 = HEAP32[$28>>2]|0; + $$index43 = ((($28)) + 4|0); + $$field44 = HEAP32[$$index43>>2]|0; + $23 = $186; + $24 = 3812; + HEAP32[$25>>2] = $$field41; + $$index47 = ((($25)) + 4|0); + HEAP32[$$index47>>2] = $$field44; + $195 = $23; + $26 = 251; + $196 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); + $197 = $24; + $198 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($27)|0); + $199 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($27)|0); + $200 = $26; + $22 = $200; + $201 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); + $202 = $26; + $203 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($25)|0); + __embind_register_class_function(($196|0),($197|0),($198|0),($199|0),($201|0),($202|0),($203|0),0); + HEAP32[$101>>2] = (252); + $$index49 = ((($101)) + 4|0); + HEAP32[$$index49>>2] = 0; + ;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; + $$field51 = HEAP32[$21>>2]|0; + $$index53 = ((($21)) + 4|0); + $$field54 = HEAP32[$$index53>>2]|0; + $16 = $195; + $17 = 3829; + HEAP32[$18>>2] = $$field51; + $$index57 = ((($18)) + 4|0); + HEAP32[$$index57>>2] = $$field54; + $204 = $16; + $19 = 251; + $205 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); + $206 = $17; + $207 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($20)|0); + $208 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($20)|0); + $209 = $19; + $15 = $209; + $210 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); + $211 = $19; + $212 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($18)|0); + __embind_register_class_function(($205|0),($206|0),($207|0),($208|0),($210|0),($211|0),($212|0),0); + HEAP32[$102>>2] = (253); + $$index59 = ((($102)) + 4|0); + HEAP32[$$index59>>2] = 0; + ;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; + $$field61 = HEAP32[$14>>2]|0; + $$index63 = ((($14)) + 4|0); + $$field64 = HEAP32[$$index63>>2]|0; + $9 = $204; + $10 = 3844; + HEAP32[$11>>2] = $$field61; + $$index67 = ((($11)) + 4|0); + HEAP32[$$index67>>2] = $$field64; + $213 = $9; + $12 = 251; + $214 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); + $215 = $10; + $216 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($13)|0); + $217 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($13)|0); + $218 = $12; + $8 = $218; + $219 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); + $220 = $12; + $221 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($11)|0); + __embind_register_class_function(($214|0),($215|0),($216|0),($217|0),($219|0),($220|0),($221|0),0); + HEAP32[$103>>2] = (254); + $$index69 = ((($103)) + 4|0); + HEAP32[$$index69>>2] = 0; + ;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; + $$field71 = HEAP32[$7>>2]|0; + $$index73 = ((($7)) + 4|0); + $$field74 = HEAP32[$$index73>>2]|0; + $2 = $213; + $3 = 3780; + HEAP32[$4>>2] = $$field71; + $$index77 = ((($4)) + 4|0); + HEAP32[$$index77>>2] = $$field74; + $5 = 255; + $222 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); + $223 = $3; + $224 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($6)|0); + $225 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($6)|0); + $226 = $5; + $1 = $226; + $227 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); + $228 = $5; + $229 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($4)|0); + __embind_register_class_function(($222|0),($223|0),($224|0),($225|0),($227|0),($228|0),($229|0),0); + STACKTOP = sp;return; +} +function __ZN6LASZip4openEjj($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); + $$byval_copy1 = sp + 180|0; + $$byval_copy = sp + 176|0; + $8 = sp + 152|0; + $14 = sp + 128|0; + $19 = sp + 104|0; + $20 = sp + 100|0; + $27 = sp + 72|0; + $33 = sp + 48|0; + $38 = sp + 24|0; + $39 = sp + 16|0; + $40 = $0; + $41 = $1; + $42 = $2; + $44 = $40; + $45 = $41; + $46 = $45; + $43 = $46; + $47 = (__Znwj(20)|0); + $48 = $43; + $49 = $42; + __ZN6laszip7streams13memory_streamC2EPKci($47,$48,$49); + $36 = $44; + $37 = $47; + $50 = $36; + $51 = $37; + ;HEAP32[$39>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$39>>2]|0; + __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($38,$51,$$byval_copy); + $34 = $38; + $35 = $50; + $52 = $34; + $53 = $35; + $31 = $52; + $32 = $53; + $54 = $31; + $30 = $54; + $55 = $30; + $56 = HEAP32[$55>>2]|0; + HEAP32[$33>>2] = $56; + $57 = $32; + $28 = $57; + $58 = $28; + $59 = HEAP32[$58>>2]|0; + $60 = $31; + HEAP32[$60>>2] = $59; + $29 = $33; + $61 = $29; + $62 = HEAP32[$61>>2]|0; + $63 = $32; + HEAP32[$63>>2] = $62; + $64 = ((($52)) + 4|0); + $65 = $35; + $66 = ((($65)) + 4|0); + $25 = $64; + $26 = $66; + $67 = $25; + $24 = $67; + $68 = $24; + $69 = HEAP32[$68>>2]|0; + HEAP32[$27>>2] = $69; + $70 = $26; + $22 = $70; + $71 = $22; + $72 = HEAP32[$71>>2]|0; + $73 = $25; + HEAP32[$73>>2] = $72; + $23 = $27; + $74 = $23; + $75 = HEAP32[$74>>2]|0; + $76 = $26; + HEAP32[$76>>2] = $75; + __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($38); + $77 = ((($44)) + 8|0); + $78 = (__Znwj(352)|0); + $21 = $44; + $79 = $21; + $80 = HEAP32[$79>>2]|0; + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($78,$80); + $17 = $77; + $18 = $78; + $81 = $17; + $82 = $18; + ;HEAP32[$20>>2]=0|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$20>>2]|0; + __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($19,$82,$$byval_copy1); + $15 = $19; + $16 = $81; + $83 = $15; + $84 = $16; + $12 = $83; + $13 = $84; + $85 = $12; + $11 = $85; + $86 = $11; + $87 = HEAP32[$86>>2]|0; + HEAP32[$14>>2] = $87; + $88 = $13; + $9 = $88; + $89 = $9; + $90 = HEAP32[$89>>2]|0; + $91 = $12; + HEAP32[$91>>2] = $90; + $10 = $14; + $92 = $10; + $93 = HEAP32[$92>>2]|0; + $94 = $13; + HEAP32[$94>>2] = $93; + $95 = ((($83)) + 4|0); + $96 = $16; + $97 = ((($96)) + 4|0); + $6 = $95; + $7 = $97; + $98 = $6; + $5 = $98; + $99 = $5; + $100 = HEAP32[$99>>2]|0; + HEAP32[$8>>2] = $100; + $101 = $7; + $3 = $101; + $102 = $3; + $103 = HEAP32[$102>>2]|0; + $104 = $6; + HEAP32[$104>>2] = $103; + $4 = $8; + $105 = $4; + $106 = HEAP32[$105>>2]|0; + $107 = $7; + HEAP32[$107>>2] = $106; + __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($19); + STACKTOP = sp;return; +} +function __ZN6LASZip8getPointEi($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $6 = $3; + $7 = $4; + $8 = $7; + $5 = $8; + $9 = ((($6)) + 8|0); + $2 = $9; + $10 = $2; + $11 = HEAP32[$10>>2]|0; + $12 = $5; + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($11,$12); + STACKTOP = sp;return; +} +function __ZN6LASZip8getCountEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $2; + $4 = ((($3)) + 8|0); + $1 = $4; + $5 = $1; + $6 = HEAP32[$5>>2]|0; + $7 = (__ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($6)|0); + $8 = ((($7)) + 107|0); + $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8)|(HEAPU8[$8+2>>0]<<16)|(HEAPU8[$8+3>>0]<<24); + STACKTOP = sp;return ($9|0); +} +function __ZN13DynamicLASZip4openEjj($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); + $$byval_copy1 = sp + 280|0; + $$byval_copy = sp + 276|0; + $8 = sp + 252|0; + $14 = sp + 228|0; + $22 = sp + 192|0; + $29 = sp + 160|0; + $35 = sp + 136|0; + $40 = sp + 112|0; + $41 = sp + 108|0; + $48 = sp + 80|0; + $54 = sp + 56|0; + $59 = sp + 32|0; + $60 = sp + 24|0; + $65 = sp; + $61 = $0; + $62 = $1; + $63 = $2; + $66 = $61; + $67 = $62; + $68 = $67; + $64 = $68; + $69 = (__Znwj(12)|0); + $70 = $64; + $71 = $63; + __ZN10buf_streamC2EPhj($69,$70,$71); + $57 = $66; + $58 = $69; + $72 = $57; + $73 = $58; + ;HEAP32[$60>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$60>>2]|0; + __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($59,$73,$$byval_copy); + $55 = $59; + $56 = $72; + $74 = $55; + $75 = $56; + $52 = $74; + $53 = $75; + $76 = $52; + $51 = $76; + $77 = $51; + $78 = HEAP32[$77>>2]|0; + HEAP32[$54>>2] = $78; + $79 = $53; + $49 = $79; + $80 = $49; + $81 = HEAP32[$80>>2]|0; + $82 = $52; + HEAP32[$82>>2] = $81; + $50 = $54; + $83 = $50; + $84 = HEAP32[$83>>2]|0; + $85 = $53; + HEAP32[$85>>2] = $84; + $86 = ((($74)) + 4|0); + $87 = $56; + $88 = ((($87)) + 4|0); + $46 = $86; + $47 = $88; + $89 = $46; + $45 = $89; + $90 = $45; + $91 = HEAP32[$90>>2]|0; + HEAP32[$48>>2] = $91; + $92 = $47; + $43 = $92; + $93 = $43; + $94 = HEAP32[$93>>2]|0; + $95 = $46; + HEAP32[$95>>2] = $94; + $44 = $48; + $96 = $44; + $97 = HEAP32[$96>>2]|0; + $98 = $47; + HEAP32[$98>>2] = $97; + __ZNSt3__210shared_ptrI10buf_streamED2Ev($59); + $99 = ((($66)) + 8|0); + $100 = (__Znwj(12)|0); + $42 = $66; + $101 = $42; + $102 = HEAP32[$101>>2]|0; + __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($100,$102); + $38 = $99; + $39 = $100; + $103 = $38; + $104 = $39; + ;HEAP32[$41>>2]=0|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$41>>2]|0; + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($40,$104,$$byval_copy1); + $36 = $40; + $37 = $103; + $105 = $36; + $106 = $37; + $33 = $105; + $34 = $106; + $107 = $33; + $32 = $107; + $108 = $32; + $109 = HEAP32[$108>>2]|0; + HEAP32[$35>>2] = $109; + $110 = $34; + $30 = $110; + $111 = $30; + $112 = HEAP32[$111>>2]|0; + $113 = $33; + HEAP32[$113>>2] = $112; + $31 = $35; + $114 = $31; + $115 = HEAP32[$114>>2]|0; + $116 = $34; + HEAP32[$116>>2] = $115; + $117 = ((($105)) + 4|0); + $118 = $37; + $119 = ((($118)) + 4|0); + $27 = $117; + $28 = $119; + $120 = $27; + $26 = $120; + $121 = $26; + $122 = HEAP32[$121>>2]|0; + HEAP32[$29>>2] = $122; + $123 = $28; + $24 = $123; + $124 = $24; + $125 = HEAP32[$124>>2]|0; + $126 = $27; + HEAP32[$126>>2] = $125; + $25 = $29; + $127 = $25; + $128 = HEAP32[$127>>2]|0; + $129 = $28; + HEAP32[$129>>2] = $128; + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($40); + $130 = ((($66)) + 8|0); + $23 = $130; + $131 = $23; + $132 = HEAP32[$131>>2]|0; + __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($65,$132); + $133 = ((($66)) + 16|0); + $20 = $133; + $21 = $65; + $134 = $20; + $135 = $21; + $19 = $135; + $136 = $19; + $17 = $22; + $18 = $136; + $137 = $17; + $138 = $18; + $139 = HEAP32[$138>>2]|0; + HEAP32[$137>>2] = $139; + $140 = ((($137)) + 4|0); + $141 = $18; + $142 = ((($141)) + 4|0); + $143 = HEAP32[$142>>2]|0; + HEAP32[$140>>2] = $143; + $144 = $18; + HEAP32[$144>>2] = 0; + $145 = $18; + $146 = ((($145)) + 4|0); + HEAP32[$146>>2] = 0; + $15 = $22; + $16 = $134; + $147 = $15; + $148 = $16; + $12 = $147; + $13 = $148; + $149 = $12; + $11 = $149; + $150 = $11; + $151 = HEAP32[$150>>2]|0; + HEAP32[$14>>2] = $151; + $152 = $13; + $9 = $152; + $153 = $9; + $154 = HEAP32[$153>>2]|0; + $155 = $12; + HEAP32[$155>>2] = $154; + $10 = $14; + $156 = $10; + $157 = HEAP32[$156>>2]|0; + $158 = $13; + HEAP32[$158>>2] = $157; + $159 = ((($147)) + 4|0); + $160 = $16; + $161 = ((($160)) + 4|0); + $6 = $159; + $7 = $161; + $162 = $6; + $5 = $162; + $163 = $5; + $164 = HEAP32[$163>>2]|0; + HEAP32[$8>>2] = $164; + $165 = $7; + $3 = $165; + $166 = $3; + $167 = HEAP32[$166>>2]|0; + $168 = $6; + HEAP32[$168>>2] = $167; + $4 = $8; + $169 = $4; + $170 = HEAP32[$169>>2]|0; + $171 = $7; + HEAP32[$171>>2] = $170; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($22); + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($65); + STACKTOP = sp;return; +} +function __ZN13DynamicLASZip16addFieldFloatingEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $7 = $0; + $8 = $1; + $9 = $7; + $10 = ((($9)) + 16|0); + $6 = $10; + $11 = $6; + $5 = $11; + $12 = $5; + $13 = HEAP32[$12>>2]|0; + $14 = ($13|0)!=(0|0); + if (!($14)) { + STACKTOP = sp;return; + } + $15 = $8; + switch ($15|0) { + case 4: { + $16 = ((($9)) + 16|0); + $4 = $16; + $17 = $4; + $18 = HEAP32[$17>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($18); + STACKTOP = sp;return; + break; + } + case 8: { + $19 = ((($9)) + 16|0); + $2 = $19; + $20 = $2; + $21 = HEAP32[$20>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($21); + $22 = ((($9)) + 16|0); + $3 = $22; + $23 = $3; + $24 = HEAP32[$23>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($24); + STACKTOP = sp;return; + break; + } + default: { + STACKTOP = sp;return; + } + } +} +function __ZN13DynamicLASZip14addFieldSignedEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $8 = $0; + $9 = $1; + $10 = $8; + $11 = ((($10)) + 16|0); + $7 = $11; + $12 = $7; + $6 = $12; + $13 = $6; + $14 = HEAP32[$13>>2]|0; + $15 = ($14|0)!=(0|0); + if (!($15)) { + STACKTOP = sp;return; + } + $16 = $9; + switch ($16|0) { + case 1: { + $17 = ((($10)) + 16|0); + $5 = $17; + $18 = $5; + $19 = HEAP32[$18>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($19); + STACKTOP = sp;return; + break; + } + case 2: { + $20 = ((($10)) + 16|0); + $3 = $20; + $21 = $3; + $22 = HEAP32[$21>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($22); + STACKTOP = sp;return; + break; + } + case 8: { + $23 = ((($10)) + 16|0); + $2 = $23; + $24 = $2; + $25 = HEAP32[$24>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($25); + break; + } + case 4: { + break; + } + default: { + STACKTOP = sp;return; + } + } + $26 = ((($10)) + 16|0); + $4 = $26; + $27 = $4; + $28 = HEAP32[$27>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($28); + STACKTOP = sp;return; +} +function __ZN13DynamicLASZip16addFieldUnsignedEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $8 = $0; + $9 = $1; + $10 = $8; + $11 = ((($10)) + 16|0); + $7 = $11; + $12 = $7; + $6 = $12; + $13 = $6; + $14 = HEAP32[$13>>2]|0; + $15 = ($14|0)!=(0|0); + if (!($15)) { + STACKTOP = sp;return; + } + $16 = $9; + switch ($16|0) { + case 1: { + $17 = ((($10)) + 16|0); + $5 = $17; + $18 = $5; + $19 = HEAP32[$18>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($19); + STACKTOP = sp;return; + break; + } + case 2: { + $20 = ((($10)) + 16|0); + $3 = $20; + $21 = $3; + $22 = HEAP32[$21>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($22); + STACKTOP = sp;return; + break; + } + case 8: { + $23 = ((($10)) + 16|0); + $2 = $23; + $24 = $2; + $25 = HEAP32[$24>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($25); + break; + } + case 4: { + break; + } + default: { + STACKTOP = sp;return; + } + } + $26 = ((($10)) + 16|0); + $4 = $26; + $27 = $4; + $28 = HEAP32[$27>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($28); + STACKTOP = sp;return; +} +function __ZN13DynamicLASZip8getPointEi($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $5 = $0; + $6 = $1; + $8 = $5; + $9 = $6; + $10 = $9; + $7 = $10; + $11 = ((($8)) + 16|0); + $4 = $11; + $12 = $4; + $3 = $12; + $13 = $3; + $14 = HEAP32[$13>>2]|0; + $15 = ($14|0)!=(0|0); + if (!($15)) { + STACKTOP = sp;return; + } + $16 = ((($8)) + 16|0); + $2 = $16; + $17 = $2; + $18 = HEAP32[$17>>2]|0; + $19 = HEAP32[$18>>2]|0; + $20 = HEAP32[$19>>2]|0; + $21 = $7; + (FUNCTION_TABLE_iii[$20 & 255]($18,$21)|0); + STACKTOP = sp;return; +} +function __ZN6laszip7streams13memory_streamC2EPKci($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + HEAP32[$6>>2] = $7; + $8 = ((($6)) + 4|0); + $9 = $5; + HEAP32[$8>>2] = $9; + $10 = ((($6)) + 8|0); + HEAP32[$10>>2] = 0; + $11 = ((($6)) + 12|0); + HEAP8[$11>>0] = 0; + $12 = ((($6)) + 13|0); + HEAP8[$12>>0] = 0; + $13 = ((($6)) + 16|0); + HEAP32[$13>>2] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 12|0; + $16 = $0; + $17 = $1; + $18 = $16; + $19 = $17; + HEAP32[$18>>2] = $19; + $20 = ((($18)) + 4|0); + $21 = HEAP32[$18>>2]|0; + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($20,$21); + $22 = ((($18)) + 247|0); + __ZN6laszip2io7laz_vlrC2Ev($22); + $23 = ((($18)) + 288|0); + $15 = $23; + $24 = $15; + $13 = $24; + $25 = $13; + $12 = $25; + HEAP32[$25>>2] = 0; + $26 = ((($25)) + 4|0); + HEAP32[$26>>2] = 0; + $27 = ((($25)) + 8|0); + HEAP32[$14>>2] = 0; + $10 = $27; + $11 = $14; + $28 = $10; + $29 = $11; + $9 = $29; + $30 = $9; + $5 = $28; + $6 = $30; + $31 = $5; + $32 = $6; + $4 = $32; + HEAP32[$31>>2] = 0; + $8 = $28; + $33 = $8; + $7 = $33; + $34 = ((($18)) + 300|0); + __ZN6laszip7factory13record_schemaC2Ev($34); + $35 = ((($18)) + 312|0); + $3 = $35; + $36 = $3; + HEAP32[$36>>2] = 0; + $37 = ((($36)) + 4|0); + HEAP32[$37>>2] = 0; + $38 = ((($18)) + 320|0); + $2 = $38; + $39 = $2; + HEAP32[$39>>2] = 0; + $40 = ((($39)) + 4|0); + HEAP32[$40>>2] = 0; + $41 = ((($18)) + 328|0); + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($41); + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($18); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (1584); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + __ZdlPv($133); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function ___clang_call_terminate($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + (___cxa_begin_catch(($0|0))|0); + __ZSt9terminatev(); + // unreachable; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + __ZdlPv($28); + } + $30 = ((($16)) + 12|0); + $10 = $30; + $31 = $10; + $9 = $31; + $32 = $9; + $12 = $32; + $33 = $12; + $11 = $33; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 24; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $50 = sp + 76|0; + $51 = sp + 72|0; + $52 = sp + 8|0; + $53 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$52>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$53>>0]=HEAP8[$66>>0]|0; + $49 = $79; + HEAP32[$50>>2] = $80; + $81 = $49; + $47 = $81; + $48 = 0; + $82 = $47; + $83 = $48; + $45 = $82; + $46 = $83; + $84 = $45; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $46; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $48; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (1612); + $89 = ((($81)) + 12|0); + $21 = $53; + $90 = $21; + $30 = $51; + $31 = $50; + $32 = $90; + $91 = $30; + $92 = $31; + $29 = $92; + $93 = $29; + $23 = $91; + $24 = $93; + $94 = $23; + $95 = $24; + $22 = $95; + $96 = $22; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $32; + $25 = $98; + $99 = $25; + $27 = $91; + $28 = $99; + $100 = $28; + $26 = $100; + $33 = $52; + $101 = $33; + $42 = $89; + $43 = $51; + $44 = $101; + $102 = $42; + $103 = $43; + $41 = $103; + $104 = $41; + $35 = $102; + $36 = $104; + $105 = $35; + $106 = $36; + $34 = $106; + $107 = $34; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $44; + $37 = $108; + $109 = $37; + $39 = $102; + $40 = $109; + $110 = $40; + $38 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($68,$vararg_buffer); + $20 = $65; + $120 = $20; + $17 = $120; + $18 = 0; + $121 = $17; + $16 = $121; + $122 = $16; + $15 = $122; + $123 = $15; + $124 = HEAP32[$123>>2]|0; + $19 = $124; + $125 = $18; + $12 = $121; + $126 = $12; + $11 = $126; + $127 = $11; + HEAP32[$127>>2] = $125; + $128 = $19; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $10 = $121; + $130 = $10; + $9 = $130; + $131 = $9; + $132 = $19; + $13 = $131; + $14 = $132; + $133 = $14; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($133); + __ZdlPv($133); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $4 = $22; + $23 = $4; + $3 = $23; + $24 = $3; + $2 = $24; + $25 = $2; + $1 = $25; + $26 = $1; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($28); + __ZdlPv($28); + } + $30 = ((($16)) + 12|0); + $10 = $30; + $31 = $10; + $9 = $31; + $32 = $9; + $12 = $32; + $33 = $12; + $11 = $33; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 48; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 320|0); + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($3); + $4 = ((($2)) + 312|0); + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($4); + $5 = ((($2)) + 300|0); + __ZN6laszip7factory13record_schemaD2Ev($5); + $6 = ((($2)) + 288|0); + __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($6); + $7 = ((($2)) + 247|0); + __ZN6laszip2io7laz_vlrD2Ev($7); + $8 = ((($2)) + 4|0); + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($8); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZN6laszip7factory13record_schemaD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip2io7laz_vlrD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 34|0); + $4 = HEAPU8[$3>>0]|(HEAPU8[$3+1>>0]<<8)|(HEAPU8[$3+2>>0]<<16)|(HEAPU8[$3+3>>0]<<24); + $5 = ($4|0)==(0|0); + if ($5) { + STACKTOP = sp;return; + } + __ZdaPv($4); + STACKTOP = sp;return; +} +function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 12|0); + $4 = HEAP32[$3>>2]|0; + __ZN6laszip5utilsL12aligned_freeEPv($4); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $19 = sp; + $22 = sp + 120|0; + $31 = $0; + $32 = $31; + $33 = HEAP32[$32>>2]|0; + $34 = ($33|0)!=(0|0); + if (!($34)) { + STACKTOP = sp;return; + } + $30 = $32; + $35 = $30; + $36 = HEAP32[$35>>2]|0; + $27 = $35; + $28 = $36; + $37 = $27; + $38 = ((($37)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $29 = $39; + while(1) { + $40 = $28; + $41 = $29; + $42 = ($40|0)!=($41|0); + if (!($42)) { + break; + } + $26 = $37; + $43 = $26; + $44 = ((($43)) + 8|0); + $25 = $44; + $45 = $25; + $24 = $45; + $46 = $24; + $47 = $29; + $48 = ((($47)) + -12|0); + $29 = $48; + $23 = $48; + $49 = $23; + $20 = $46; + $21 = $49; + $50 = $20; + $51 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $50; + $18 = $51; + $52 = $17; + $53 = $18; + $15 = $52; + $16 = $53; + } + $54 = $28; + $55 = ((($37)) + 4|0); + HEAP32[$55>>2] = $54; + $7 = $32; + $56 = $7; + $57 = ((($56)) + 8|0); + $6 = $57; + $58 = $6; + $5 = $58; + $59 = $5; + $60 = HEAP32[$32>>2]|0; + $4 = $32; + $61 = $4; + $3 = $61; + $62 = $3; + $63 = ((($62)) + 8|0); + $2 = $63; + $64 = $2; + $1 = $64; + $65 = $1; + $66 = HEAP32[$65>>2]|0; + $67 = HEAP32[$61>>2]|0; + $68 = $66; + $69 = $67; + $70 = (($68) - ($69))|0; + $71 = (($70|0) / 12)&-1; + $12 = $59; + $13 = $60; + $14 = $71; + $72 = $12; + $73 = $13; + $74 = $14; + $9 = $72; + $10 = $73; + $11 = $74; + $75 = $10; + $8 = $75; + $76 = $8; + __ZdlPv($76); + STACKTOP = sp;return; +} +function __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $19 = sp; + $22 = sp + 120|0; + $31 = $0; + $32 = $31; + $33 = HEAP32[$32>>2]|0; + $34 = ($33|0)!=(0|0); + if (!($34)) { + STACKTOP = sp;return; + } + $30 = $32; + $35 = $30; + $36 = HEAP32[$35>>2]|0; + $27 = $35; + $28 = $36; + $37 = $27; + $38 = ((($37)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $29 = $39; + while(1) { + $40 = $28; + $41 = $29; + $42 = ($40|0)!=($41|0); + if (!($42)) { + break; + } + $26 = $37; + $43 = $26; + $44 = ((($43)) + 8|0); + $25 = $44; + $45 = $25; + $24 = $45; + $46 = $24; + $47 = $29; + $48 = ((($47)) + -8|0); + $29 = $48; + $23 = $48; + $49 = $23; + $20 = $46; + $21 = $49; + $50 = $20; + $51 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $50; + $18 = $51; + $52 = $17; + $53 = $18; + $15 = $52; + $16 = $53; + } + $54 = $28; + $55 = ((($37)) + 4|0); + HEAP32[$55>>2] = $54; + $7 = $32; + $56 = $7; + $57 = ((($56)) + 8|0); + $6 = $57; + $58 = $6; + $5 = $58; + $59 = $5; + $60 = HEAP32[$32>>2]|0; + $4 = $32; + $61 = $4; + $3 = $61; + $62 = $3; + $63 = ((($62)) + 8|0); + $2 = $63; + $64 = $2; + $1 = $64; + $65 = $1; + $66 = HEAP32[$65>>2]|0; + $67 = HEAP32[$61>>2]|0; + $68 = $66; + $69 = $67; + $70 = (($68) - ($69))|0; + $71 = (($70|0) / 8)&-1; + $12 = $59; + $13 = $60; + $14 = $71; + $72 = $12; + $73 = $13; + $74 = $14; + $9 = $72; + $10 = $73; + $11 = $74; + $75 = $10; + $8 = $75; + $76 = $8; + __ZdlPv($76); + STACKTOP = sp;return; +} +function __ZN6laszip5utilsL12aligned_freeEPv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + -4|0); + $4 = HEAP32[$3>>2]|0; + _free($4); + STACKTOP = sp;return; +} +function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + HEAP32[$4>>2] = $5; + $6 = ((($4)) + 4|0); + HEAP32[$6>>2] = 0; + $7 = ((($4)) + 8|0); + HEAP32[$7>>2] = 0; + $8 = ((($4)) + 12|0); + $9 = (__ZN6laszip5utilsL14aligned_mallocEi(1048576)|0); + HEAP32[$8>>2] = $9; + STACKTOP = sp;return; +} +function __ZN6laszip2io7laz_vlrC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 32|0); + HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8; + $4 = ((($2)) + 34|0); + 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; + STACKTOP = sp;return; +} +function __ZN6laszip7factory13record_schemaC2Ev($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $11 = sp + 8|0; + $13 = $0; + $14 = $13; + $12 = $14; + $15 = $12; + $10 = $15; + $16 = $10; + $9 = $16; + HEAP32[$16>>2] = 0; + $17 = ((($16)) + 4|0); + HEAP32[$17>>2] = 0; + $18 = ((($16)) + 8|0); + HEAP32[$11>>2] = 0; + $7 = $18; + $8 = $11; + $19 = $7; + $20 = $8; + $6 = $20; + $21 = $6; + $2 = $19; + $3 = $21; + $22 = $2; + $23 = $3; + $1 = $23; + HEAP32[$22>>2] = 0; + $5 = $19; + $24 = $5; + $4 = $24; + STACKTOP = sp;return; +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = $2; + $4 = $3; + HEAP32[$4>>2] = 0; + $5 = (($3) + 4)|0; + $6 = $5; + HEAP32[$6>>2] = 0; + $7 = ((($2)) + 8|0); + $8 = $7; + $9 = $8; + HEAP32[$9>>2] = 0; + $10 = (($8) + 4)|0; + $11 = $10; + HEAP32[$11>>2] = 0; + $12 = ((($2)) + 16|0); + $13 = $12; + $14 = $13; + HEAP32[$14>>2] = -1; + $15 = (($13) + 4)|0; + $16 = $15; + HEAP32[$16>>2] = -1; + STACKTOP = sp;return; +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); + $$byval_copy1 = sp + 88|0; + $$byval_copy = sp + 72|0; + $3 = sp + 64|0; + $13 = sp + 268|0; + $16 = sp + 256|0; + $20 = sp + 240|0; + $23 = sp + 228|0; + $26 = sp + 56|0; + $37 = sp + 320|0; + $51 = sp + 316|0; + $52 = sp + 116|0; + $53 = sp + 40|0; + $55 = sp + 108|0; + $56 = sp + 104|0; + $57 = sp + 16|0; + $58 = sp; + $50 = $0; + $59 = $50; + $60 = HEAP32[$59>>2]|0; + __ZN6laszip7streams13memory_stream4readEPci($60,$51,4); + $61 = ((($51)) + 4|0); + $47 = $52; + $48 = $51; + $49 = $61; + $62 = $47; + $46 = $62; + $63 = $46; + $45 = $63; + $64 = $45; + ;HEAP32[$64>>2]=0|0;HEAP32[$64+4>>2]=0|0;HEAP32[$64+8>>2]=0|0; + $44 = $63; + $65 = $44; + $43 = $65; + $66 = $48; + $67 = $49; + __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($62,$66,$67); + $41 = $52; + $42 = 4257; + $68 = $41; + $69 = $42; + $38 = $68; + $39 = $69; + $70 = $39; + $71 = (__ZNSt3__211char_traitsIcE6lengthEPKc($70)|0); + $40 = $71; + $72 = $40; + $73 = $38; + $36 = $73; + $74 = $36; + $35 = $74; + $75 = $35; + $34 = $75; + $76 = $34; + $33 = $76; + $77 = $33; + $78 = ((($77)) + 11|0); + $79 = HEAP8[$78>>0]|0; + $80 = $79&255; + $81 = $80 & 128; + $82 = ($81|0)!=(0); + if ($82) { + $29 = $74; + $83 = $29; + $28 = $83; + $84 = $28; + $27 = $84; + $85 = $27; + $86 = ((($85)) + 4|0); + $87 = HEAP32[$86>>2]|0; + $95 = $87; + } else { + $32 = $74; + $88 = $32; + $31 = $88; + $89 = $31; + $30 = $89; + $90 = $30; + $91 = ((($90)) + 11|0); + $92 = HEAP8[$91>>0]|0; + $93 = $92&255; + $95 = $93; + } + $94 = ($72|0)!=($95|0); + if ($94) { + $$expand_i1_val = 0; + HEAP8[$37>>0] = $$expand_i1_val; + } else { + $96 = $38; + $97 = $39; + $98 = $40; + $99 = (__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($96,0,-1,$97,$98)|0); + $100 = ($99|0)==(0); + $$expand_i1_val3 = $100&1; + HEAP8[$37>>0] = $$expand_i1_val3; + } + $$pre_trunc = HEAP8[$37>>0]|0; + $101 = $$pre_trunc&1; + $102 = $101 ^ 1; + __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($52); + if ($102) { + $103 = (___cxa_allocate_exception(8)|0); + __ZN6laszip13invalid_magicC2Ev($103); + ___cxa_throw(($103|0),(56|0),(11|0)); + // unreachable; + } + $104 = HEAP32[$59>>2]|0; + $25 = $53; + $105 = $26; + $106 = $105; + HEAP32[$106>>2] = 0; + $107 = (($105) + 4)|0; + $108 = $107; + HEAP32[$108>>2] = 0; + $109 = $25; + ;HEAP32[$109>>2]=0|0;HEAP32[$109+4>>2]=0|0; + $110 = ((($109)) + 8|0); + $111 = $26; + $112 = $111; + $113 = HEAP32[$112>>2]|0; + $114 = (($111) + 4)|0; + $115 = $114; + $116 = HEAP32[$115>>2]|0; + $117 = $110; + $118 = $117; + HEAP32[$118>>2] = $113; + $119 = (($117) + 4)|0; + $120 = $119; + HEAP32[$120>>2] = $116; + ;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; + __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($104,$$byval_copy); + $121 = HEAP32[$59>>2]|0; + $122 = ((($59)) + 20|0); + __ZN6laszip7streams13memory_stream4readEPci($121,$122,227); + $123 = ((($59)) + 20|0); + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($59,$123); + $124 = (__ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv()|0); + $54 = $124; + $125 = $54; + $24 = $125; + $126 = $24; + $127 = HEAP32[$126>>2]|0; + $21 = $126; + $22 = $127; + $128 = $22; + $18 = $20; + $19 = $128; + $129 = $18; + $130 = $19; + HEAP32[$129>>2] = $130; + $131 = HEAP32[$20>>2]|0; + HEAP32[$23>>2] = $131; + $132 = HEAP32[$23>>2]|0; + HEAP32[$55>>2] = $132; + $133 = $54; + $17 = $133; + $134 = $17; + $135 = ((($134)) + 4|0); + $136 = HEAP32[$135>>2]|0; + $14 = $134; + $15 = $136; + $137 = $15; + $11 = $13; + $12 = $137; + $138 = $11; + $139 = $12; + HEAP32[$138>>2] = $139; + $140 = HEAP32[$13>>2]|0; + HEAP32[$16>>2] = $140; + $141 = HEAP32[$16>>2]|0; + HEAP32[$56>>2] = $141; + while(1) { + $9 = $55; + $10 = $56; + $142 = $9; + $143 = $10; + $7 = $142; + $8 = $143; + $144 = $7; + $6 = $144; + $145 = $6; + $146 = HEAP32[$145>>2]|0; + $147 = $8; + $5 = $147; + $148 = $5; + $149 = HEAP32[$148>>2]|0; + $150 = ($146|0)==($149|0); + $151 = $150 ^ 1; + if (!($151)) { + break; + } + $4 = $55; + $152 = $4; + $153 = HEAP32[$152>>2]|0; + __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($57,$153); + $154 = ((($59)) + 20|0); + __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($57,$154); + __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($57); + $1 = $55; + $155 = $1; + $156 = HEAP32[$155>>2]|0; + $157 = ((($156)) + 24|0); + HEAP32[$155>>2] = $157; + } + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($59); + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($59); + $158 = HEAP32[$59>>2]|0; + __ZN6laszip7streams13memory_stream5clearEv($158); + $159 = HEAP32[$59>>2]|0; + $160 = ((($59)) + 20|0); + $161 = ((($160)) + 96|0); + $162 = HEAP32[$161>>2]|0; + $163 = (($162) + 8)|0; + $2 = $58; + $164 = $3; + $165 = $164; + HEAP32[$165>>2] = $163; + $166 = (($164) + 4)|0; + $167 = $166; + HEAP32[$167>>2] = 0; + $168 = $2; + ;HEAP32[$168>>2]=0|0;HEAP32[$168+4>>2]=0|0; + $169 = ((($168)) + 8|0); + $170 = $3; + $171 = $170; + $172 = HEAP32[$171>>2]|0; + $173 = (($170) + 4)|0; + $174 = $173; + $175 = HEAP32[$174>>2]|0; + $176 = $169; + $177 = $176; + HEAP32[$177>>2] = $172; + $178 = (($176) + 4)|0; + $179 = $178; + HEAP32[$179>>2] = $175; + ;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; + __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($159,$$byval_copy1); + $180 = ((($59)) + 4|0); + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($180); + STACKTOP = sp;return; +} +function __ZN6laszip5utilsL14aligned_mallocEi($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $4 = $1; + $5 = (($4) + 64)|0; + $6 = (($5) + 4)|0; + $7 = (_malloc($6)|0); + $2 = $7; + $8 = $2; + $9 = $8; + $10 = (($9) + 64)|0; + $11 = (($10) + 4)|0; + $12 = $11 & -64; + $13 = $12; + $3 = $13; + $14 = $2; + $15 = $3; + $16 = ((($15)) + -4|0); + HEAP32[$16>>2] = $14; + $17 = $3; + STACKTOP = sp;return ($17|0); +} +function __ZN6laszip7streams13memory_stream4readEPci($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0); + $18 = sp; + $21 = sp + 92|0; + $24 = sp + 12|0; + $26 = sp + 4|0; + $22 = $0; + $23 = $1; + HEAP32[$24>>2] = $2; + $27 = $22; + $28 = ((($27)) + 13|0); + $29 = HEAP8[$28>>0]|0; + $30 = $29&1; + if ($30) { + $31 = ((($27)) + 12|0); + HEAP8[$31>>0] = 1; + STACKTOP = sp;return; + } + $32 = ((($27)) + 4|0); + $33 = HEAP32[$32>>2]|0; + $34 = ((($27)) + 8|0); + $35 = HEAP32[$34>>2]|0; + $36 = (($33) - ($35))|0; + HEAP32[$26>>2] = $36; + $19 = $24; + $20 = $26; + $37 = $19; + $38 = $20; + ;HEAP8[$18>>0]=HEAP8[$21>>0]|0; + $16 = $37; + $17 = $38; + $39 = $17; + $40 = $16; + $13 = $18; + $14 = $39; + $15 = $40; + $41 = $14; + $42 = HEAP32[$41>>2]|0; + $43 = $15; + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)<($44|0); + $46 = $17; + $47 = $16; + $48 = $45 ? $46 : $47; + $49 = HEAP32[$48>>2]|0; + $25 = $49; + $50 = HEAP32[$27>>2]|0; + $51 = ((($27)) + 8|0); + $52 = HEAP32[$51>>2]|0; + $53 = (($50) + ($52)|0); + $54 = HEAP32[$27>>2]|0; + $55 = ((($27)) + 8|0); + $56 = HEAP32[$55>>2]|0; + $57 = (($54) + ($56)|0); + $58 = $25; + $59 = (($57) + ($58)|0); + $60 = $23; + $10 = $53; + $11 = $59; + $12 = $60; + $61 = $10; + $9 = $61; + $62 = $9; + $63 = $11; + $3 = $63; + $64 = $3; + $65 = $12; + $4 = $65; + $66 = $4; + $5 = $62; + $6 = $64; + $7 = $66; + $67 = $6; + $68 = $5; + $69 = $67; + $70 = $68; + $71 = (($69) - ($70))|0; + $8 = $71; + $72 = $8; + $73 = ($72>>>0)>(0); + if ($73) { + $74 = $7; + $75 = $5; + $76 = $8; + _memmove(($74|0),($75|0),($76|0))|0; + } + $77 = $25; + $78 = ((($27)) + 8|0); + $79 = HEAP32[$78>>2]|0; + $80 = (($79) + ($77))|0; + HEAP32[$78>>2] = $80; + $81 = $25; + $82 = ((($27)) + 16|0); + HEAP32[$82>>2] = $81; + $83 = ((($27)) + 8|0); + $84 = HEAP32[$83>>2]|0; + $85 = ((($27)) + 4|0); + $86 = HEAP32[$85>>2]|0; + $87 = ($84|0)>=($86|0); + if (!($87)) { + STACKTOP = sp;return; + } + $88 = ((($27)) + 13|0); + HEAP8[$88>>0] = 1; + STACKTOP = sp;return; +} +function __ZN6laszip13invalid_magicC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,4355); + HEAP32[$2>>2] = (1640); + STACKTOP = sp;return; +} +function __ZN6laszip13invalid_magicD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = $0; + $5 = $4; + $3 = $1; + $6 = $3; + $7 = ((($6)) + 8|0); + $8 = $7; + $9 = $8; + $10 = HEAP32[$9>>2]|0; + $11 = (($8) + 4)|0; + $12 = $11; + $13 = HEAP32[$12>>2]|0; + $14 = ((($5)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = ($15|0)<(0); + $17 = $16 << 31 >> 31; + $18 = ($13|0)>($17|0); + $19 = ($10>>>0)>=($15>>>0); + $20 = ($13|0)==($17|0); + $21 = $20 & $19; + $22 = $18 | $21; + if ($22) { + $23 = ((($5)) + 12|0); + HEAP8[$23>>0] = 1; + STACKTOP = sp;return; + } else { + $2 = $1; + $24 = $2; + $25 = ((($24)) + 8|0); + $26 = $25; + $27 = $26; + $28 = HEAP32[$27>>2]|0; + $29 = (($26) + 4)|0; + $30 = $29; + $31 = HEAP32[$30>>2]|0; + $32 = ((($5)) + 8|0); + HEAP32[$32>>2] = $28; + STACKTOP = sp;return; + } +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $2 = $0; + $3 = $1; + $10 = $3; + $11 = ((($10)) + 179|0); + 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]; + $4 = $12; + $13 = $3; + $14 = ((($13)) + 179|0); + $15 = ((($14)) + 8|0); + 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]; + $7 = $16; + $17 = $3; + $18 = ((($17)) + 179|0); + $19 = ((($18)) + 16|0); + 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]; + $5 = $20; + $21 = $3; + $22 = ((($21)) + 203|0); + 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]; + $8 = $23; + $24 = $3; + $25 = ((($24)) + 203|0); + $26 = ((($25)) + 8|0); + 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]; + $6 = $27; + $28 = $3; + $29 = ((($28)) + 203|0); + $30 = ((($29)) + 16|0); + 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]; + $9 = $31; + $32 = $7; + $33 = $3; + $34 = ((($33)) + 179|0); + 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]; + $35 = $4; + $36 = $3; + $37 = ((($36)) + 203|0); + 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]; + $38 = $8; + $39 = $3; + $40 = ((($39)) + 179|0); + $41 = ((($40)) + 8|0); + 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]; + $42 = $5; + $43 = $3; + $44 = ((($43)) + 203|0); + $45 = ((($44)) + 8|0); + 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]; + $46 = $9; + $47 = $3; + $48 = ((($47)) + 179|0); + $49 = ((($48)) + 16|0); + 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]; + $50 = $6; + $51 = $3; + $52 = ((($51)) + 203|0); + $53 = ((($52)) + 16|0); + 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]; + STACKTOP = sp;return; +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv() { + 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; + 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; + 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; + 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; + 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; + var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); + $$byval_copy = sp + 195|0; + $13 = sp + 24|0; + $18 = sp + 194|0; + $29 = sp + 193|0; + $42 = sp + 32|0; + $44 = sp; + $45 = sp + 192|0; + $46 = HEAP8[21176]|0; + $47 = ($46<<24>>24)==(0); + if ($47) { + $48 = (___cxa_guard_acquire(21176)|0); + $49 = ($48|0)!=(0); + if ($49) { + $43 = 21216; + $50 = $43; + $41 = $50; + $51 = $41; + $40 = $51; + HEAP32[$51>>2] = 0; + $52 = ((($51)) + 4|0); + HEAP32[$52>>2] = 0; + $53 = ((($51)) + 8|0); + HEAP32[$42>>2] = 0; + $38 = $53; + $39 = $42; + $54 = $38; + $55 = $39; + $37 = $55; + $56 = $37; + $33 = $54; + $34 = $56; + $57 = $33; + $58 = $34; + $32 = $58; + HEAP32[$57>>2] = 0; + $36 = $54; + $59 = $36; + $35 = $59; + } + } + $60 = HEAP8[21184]|0; + $61 = ($60<<24>>24)==(0); + if ($61) { + $62 = (___cxa_guard_acquire(21184)|0); + $63 = ($62|0)!=(0); + if ($63) { + } + } + $31 = 21216; + $64 = $31; + $65 = HEAP32[$64>>2]|0; + $66 = ((($64)) + 4|0); + $67 = HEAP32[$66>>2]|0; + $68 = ($65|0)==($67|0); + if (!($68)) { + STACKTOP = sp;return (21216|0); + } + __ZNSt3__25mutex4lockEv(21228); + $30 = 21216; + $69 = $30; + $70 = HEAP32[$69>>2]|0; + $71 = ((($69)) + 4|0); + $72 = HEAP32[$71>>2]|0; + $73 = ($70|0)==($72|0); + if ($73) { + ;HEAP8[$$byval_copy>>0]=HEAP8[$45>>0]|0; + __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($44,$$byval_copy); + $27 = 21216; + $28 = $44; + $74 = $27; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + $26 = $74; + $77 = $26; + $78 = ((($77)) + 8|0); + $25 = $78; + $79 = $25; + $24 = $79; + $80 = $24; + $81 = HEAP32[$80>>2]|0; + $82 = ($76>>>0)<($81>>>0); + if ($82) { + $21 = $29; + $22 = $74; + $23 = 1; + $4 = $74; + $83 = $4; + $84 = ((($83)) + 8|0); + $3 = $84; + $85 = $3; + $2 = $85; + $86 = $2; + $87 = ((($74)) + 4|0); + $88 = HEAP32[$87>>2]|0; + $0 = $88; + $89 = $0; + $90 = $28; + $1 = $90; + $91 = $1; + $15 = $86; + $16 = $89; + $17 = $91; + $92 = $15; + $93 = $16; + $94 = $17; + $14 = $94; + $95 = $14; + ;HEAP8[$13>>0]=HEAP8[$18>>0]|0; + $10 = $92; + $11 = $93; + $12 = $95; + $96 = $10; + $97 = $11; + $98 = $12; + $9 = $98; + $99 = $9; + $6 = $96; + $7 = $97; + $8 = $99; + $100 = $7; + $101 = $8; + $5 = $101; + $102 = $5; + __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($100,$102); + $19 = $29; + $103 = ((($74)) + 4|0); + $104 = HEAP32[$103>>2]|0; + $105 = ((($104)) + 24|0); + HEAP32[$103>>2] = $105; + } else { + $106 = $28; + $20 = $106; + $107 = $20; + __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($74,$107); + } + __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($44); + } + __ZNSt3__25mutex6unlockEv(21228); + STACKTOP = sp;return (21216|0); +} +function __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + $6 = ((($5)) + 16|0); + $7 = HEAP32[$6>>2]|0; + $8 = ($7|0)==(0|0); + if ($8) { + $9 = ((($4)) + 16|0); + HEAP32[$9>>2] = 0; + STACKTOP = sp;return; + } + $10 = $3; + $11 = ((($10)) + 16|0); + $12 = HEAP32[$11>>2]|0; + $13 = $3; + $14 = ($12|0)==($13|0); + if ($14) { + $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0); + $16 = ((($4)) + 16|0); + HEAP32[$16>>2] = $15; + $17 = $3; + $18 = ((($17)) + 16|0); + $19 = HEAP32[$18>>2]|0; + $20 = HEAP32[$19>>2]|0; + $21 = ((($20)) + 12|0); + $22 = HEAP32[$21>>2]|0; + $23 = ((($4)) + 16|0); + $24 = HEAP32[$23>>2]|0; + FUNCTION_TABLE_vii[$22 & 255]($19,$24); + STACKTOP = sp;return; + } else { + $25 = $3; + $26 = ((($25)) + 16|0); + $27 = HEAP32[$26>>2]|0; + $28 = HEAP32[$27>>2]|0; + $29 = ((($28)) + 8|0); + $30 = HEAP32[$29>>2]|0; + $31 = (FUNCTION_TABLE_ii[$30 & 255]($27)|0); + $32 = ((($4)) + 16|0); + HEAP32[$32>>2] = $31; + STACKTOP = sp;return; + } +} +function __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $3; + $6 = ((($5)) + 16|0); + $7 = HEAP32[$6>>2]|0; + $8 = ($7|0)==(0|0); + if ($8) { + $9 = (___cxa_allocate_exception(4)|0); + ;HEAP32[$9>>2]=0|0; + __ZNSt3__217bad_function_callC2Ev($9); + ___cxa_throw(($9|0),(1240|0),(197|0)); + // unreachable; + } else { + $10 = ((($5)) + 16|0); + $11 = HEAP32[$10>>2]|0; + $12 = HEAP32[$11>>2]|0; + $13 = ((($12)) + 24|0); + $14 = HEAP32[$13>>2]|0; + $15 = $4; + $2 = $15; + $16 = $2; + FUNCTION_TABLE_vii[$14 & 255]($11,$16); + STACKTOP = sp;return; + } +} +function __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 16|0); + $4 = HEAP32[$3>>2]|0; + $5 = ($4|0)==($2|0); + $6 = ((($2)) + 16|0); + $7 = HEAP32[$6>>2]|0; + if ($5) { + $8 = HEAP32[$7>>2]|0; + $9 = ((($8)) + 16|0); + $10 = HEAP32[$9>>2]|0; + FUNCTION_TABLE_vi[$10 & 511]($7); + STACKTOP = sp;return; + } + $11 = ($7|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($2)) + 16|0); + $13 = HEAP32[$12>>2]|0; + $14 = HEAP32[$13>>2]|0; + $15 = ((($14)) + 20|0); + $16 = HEAP32[$15>>2]|0; + FUNCTION_TABLE_vi[$16 & 511]($13); + STACKTOP = sp;return; +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); + $$byval_copy = sp + 32|0; + $26 = sp + 116|0; + $30 = sp + 277|0; + $34 = sp + 24|0; + $38 = sp + 276|0; + $40 = sp + 16|0; + $42 = sp; + $43 = sp + 222|0; + $47 = sp + 60|0; + $48 = sp + 48|0; + $41 = $0; + $49 = $41; + $50 = HEAP32[$49>>2]|0; + $51 = ((($49)) + 20|0); + $52 = ((($51)) + 94|0); + $53 = HEAP16[$52>>1]|0; + $54 = $53&65535; + $39 = $42; + $55 = $40; + $56 = $55; + HEAP32[$56>>2] = $54; + $57 = (($55) + 4)|0; + $58 = $57; + HEAP32[$58>>2] = 0; + $59 = $39; + ;HEAP32[$59>>2]=0|0;HEAP32[$59+4>>2]=0|0; + $60 = ((($59)) + 8|0); + $61 = $40; + $62 = $61; + $63 = HEAP32[$62>>2]|0; + $64 = (($61) + 4)|0; + $65 = $64; + $66 = HEAP32[$65>>2]|0; + $67 = $60; + $68 = $67; + HEAP32[$68>>2] = $63; + $69 = (($67) + 4)|0; + $70 = $69; + HEAP32[$70>>2] = $66; + ;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; + __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($50,$$byval_copy); + $44 = 0; + $45 = 0; + while(1) { + $71 = $44; + $72 = ((($49)) + 20|0); + $73 = ((($72)) + 100|0); + $74 = HEAP32[$73>>2]|0; + $75 = ($71>>>0)<($74>>>0); + if (!($75)) { + break; + } + $76 = HEAP32[$49>>2]|0; + $77 = (__ZN6laszip7streams13memory_stream4goodEv($76)|0); + if (!($77)) { + break; + } + $78 = HEAP32[$49>>2]|0; + $79 = (__ZN6laszip7streams13memory_stream3eofEv($78)|0); + $80 = $79 ^ 1; + if (!($80)) { + break; + } + $81 = HEAP32[$49>>2]|0; + __ZN6laszip7streams13memory_stream4readEPci($81,$43,54); + $46 = 4841; + $82 = ((($43)) + 2|0); + $83 = ((($43)) + 2|0); + $84 = ((($83)) + 14|0); + $85 = $46; + $35 = $82; + $36 = $84; + $37 = $85; + $86 = $35; + $87 = $36; + $88 = $37; + ;HEAP8[$34>>0]=HEAP8[$38>>0]|0; + $31 = $86; + $32 = $87; + $33 = $88; + while(1) { + $89 = $31; + $90 = $32; + $91 = ($89|0)!=($90|0); + if (!($91)) { + label = 10; + break; + } + $92 = $31; + $93 = $33; + $27 = $34; + $28 = $92; + $29 = $93; + $94 = $28; + $95 = HEAP8[$94>>0]|0; + $96 = $95 << 24 >> 24; + $97 = $29; + $98 = HEAP8[$97>>0]|0; + $99 = $98 << 24 >> 24; + $100 = ($96|0)==($99|0); + if (!($100)) { + label = 8; + break; + } + $101 = $31; + $102 = ((($101)) + 1|0); + $31 = $102; + $103 = $33; + $104 = ((($103)) + 1|0); + $33 = $104; + } + if ((label|0) == 8) { + label = 0; + $$expand_i1_val = 0; + HEAP8[$30>>0] = $$expand_i1_val; + } + else if ((label|0) == 10) { + label = 0; + $$expand_i1_val3 = 1; + HEAP8[$30>>0] = $$expand_i1_val3; + } + $$pre_trunc = HEAP8[$30>>0]|0; + $105 = $$pre_trunc&1; + if ($105) { + $106 = ((($43)) + 18|0); + $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8); + $108 = $107&65535; + $109 = ($108|0)==(22204); + if ($109) { + label = 13; + break; + } + } + $149 = HEAP32[$49>>2]|0; + $150 = ((($43)) + 20|0); + $151 = HEAPU8[$150>>0]|(HEAPU8[$150+1>>0]<<8); + $152 = $151&65535; + __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($149,$152,0,1); + $153 = $44; + $154 = (($153) + 1)|0; + $44 = $154; + } + if ((label|0) == 13) { + $45 = 1; + $110 = ((($43)) + 20|0); + $111 = HEAPU8[$110>>0]|(HEAPU8[$110+1>>0]<<8); + $112 = $111&65535; + $113 = (__Znaj($112)|0); + $25 = $47; + HEAP32[$26>>2] = $113; + $114 = $25; + $23 = $114; + $24 = $26; + $115 = $23; + $116 = $24; + $22 = $116; + $117 = $22; + $20 = $115; + $21 = $117; + $118 = $20; + $119 = $21; + $19 = $119; + $120 = $19; + $121 = HEAP32[$120>>2]|0; + HEAP32[$118>>2] = $121; + $122 = HEAP32[$49>>2]|0; + $18 = $47; + $123 = $18; + $17 = $123; + $124 = $17; + $16 = $124; + $125 = $16; + $126 = HEAP32[$125>>2]|0; + $127 = ((($43)) + 20|0); + $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8); + $129 = $128&65535; + __ZN6laszip7streams13memory_stream4readEPci($122,$126,$129); + $15 = $47; + $130 = $15; + $14 = $130; + $131 = $14; + $13 = $131; + $132 = $13; + $133 = HEAP32[$132>>2]|0; + __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($49,$133); + $12 = $47; + $134 = $12; + $9 = $134; + $10 = 0; + $135 = $9; + $8 = $135; + $136 = $8; + $7 = $136; + $137 = $7; + $138 = HEAP32[$137>>2]|0; + $11 = $138; + $139 = $10; + $4 = $135; + $140 = $4; + $3 = $140; + $141 = $3; + HEAP32[$141>>2] = $139; + $142 = $11; + $143 = ($142|0)!=(0|0); + if ($143) { + $2 = $135; + $144 = $2; + $1 = $144; + $145 = $1; + $146 = $11; + $5 = $145; + $6 = $146; + $147 = $6; + $148 = ($147|0)==(0|0); + if (!($148)) { + __ZdlPv($147); + } + } + } + $155 = $45; + $156 = $155&1; + if ($156) { + $158 = ((($49)) + 247|0); + $159 = ((($49)) + 20|0); + $160 = ((($159)) + 105|0); + $161 = HEAPU8[$160>>0]|(HEAPU8[$160+1>>0]<<8); + $162 = $161&65535; + __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($48,$158,$162); + $163 = ((($49)) + 300|0); + (__ZN6laszip7factory13record_schemaaSEOS1_($163,$48)|0); + __ZN6laszip7factory13record_schemaD2Ev($48); + STACKTOP = sp;return; + } else { + $157 = (___cxa_allocate_exception(8)|0); + __ZN6laszip13no_laszip_vlrC2Ev($157); + ___cxa_throw(($157|0),(136|0),(32|0)); + // unreachable; + } +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 448|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(448|0); + $$byval_copy1 = sp + 80|0; + $$byval_copy = sp + 64|0; + $38 = sp + 56|0; + $41 = sp + 436|0; + $54 = sp + 48|0; + $56 = sp + 40|0; + $58 = sp + 24|0; + $59 = sp + 16|0; + $60 = sp; + $61 = sp + 216|0; + $62 = sp + 200|0; + $63 = sp + 184|0; + $64 = sp + 104|0; + $57 = $0; + $67 = $57; + $68 = HEAP32[$67>>2]|0; + $69 = ((($67)) + 20|0); + $70 = ((($69)) + 96|0); + $71 = HEAP32[$70>>2]|0; + $55 = $58; + $72 = $56; + $73 = $72; + HEAP32[$73>>2] = $71; + $74 = (($72) + 4)|0; + $75 = $74; + HEAP32[$75>>2] = 0; + $76 = $55; + ;HEAP32[$76>>2]=0|0;HEAP32[$76+4>>2]=0|0; + $77 = ((($76)) + 8|0); + $78 = $56; + $79 = $78; + $80 = HEAP32[$79>>2]|0; + $81 = (($78) + 4)|0; + $82 = $81; + $83 = HEAP32[$82>>2]|0; + $84 = $77; + $85 = $84; + HEAP32[$85>>2] = $80; + $86 = (($84) + 4)|0; + $87 = $86; + HEAP32[$87>>2] = $83; + ;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; + __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($68,$$byval_copy); + $88 = $59; + $89 = $88; + HEAP32[$89>>2] = 0; + $90 = (($88) + 4)|0; + $91 = $90; + HEAP32[$91>>2] = 0; + $92 = HEAP32[$67>>2]|0; + __ZN6laszip7streams13memory_stream4readEPci($92,$59,8); + $93 = HEAP32[$67>>2]|0; + $94 = (__ZN6laszip7streams13memory_stream4goodEv($93)|0); + if (!($94)) { + $95 = (___cxa_allocate_exception(8)|0); + __ZN6laszip22chunk_table_read_errorC2Ev($95); + ___cxa_throw(($95|0),(168|0),(34|0)); + // unreachable; + } + $96 = $59; + $97 = $96; + $98 = HEAP32[$97>>2]|0; + $99 = (($96) + 4)|0; + $100 = $99; + $101 = HEAP32[$100>>2]|0; + $102 = ($98|0)==(-1); + $103 = ($101|0)==(-1); + $104 = $102 & $103; + if ($104) { + $105 = (___cxa_allocate_exception(8)|0); + __ZN6laszip13not_supportedC2EPKc($105,5052); + ___cxa_throw(($105|0),(184|0),(36|0)); + // unreachable; + } + $106 = HEAP32[$67>>2]|0; + $107 = $59; + $108 = $107; + $109 = HEAP32[$108>>2]|0; + $110 = (($107) + 4)|0; + $111 = $110; + $112 = HEAP32[$111>>2]|0; + $53 = $60; + $113 = $54; + $114 = $113; + HEAP32[$114>>2] = $109; + $115 = (($113) + 4)|0; + $116 = $115; + HEAP32[$116>>2] = $112; + $117 = $53; + ;HEAP32[$117>>2]=0|0;HEAP32[$117+4>>2]=0|0; + $118 = ((($117)) + 8|0); + $119 = $54; + $120 = $119; + $121 = HEAP32[$120>>2]|0; + $122 = (($119) + 4)|0; + $123 = $122; + $124 = HEAP32[$123>>2]|0; + $125 = $118; + $126 = $125; + HEAP32[$126>>2] = $121; + $127 = (($125) + 4)|0; + $128 = $127; + HEAP32[$128>>2] = $124; + ;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; + __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($106,$$byval_copy1); + $129 = HEAP32[$67>>2]|0; + $130 = (__ZN6laszip7streams13memory_stream4goodEv($129)|0); + if (!($130)) { + $131 = (___cxa_allocate_exception(8)|0); + __ZN6laszip22chunk_table_read_errorC2Ev($131); + ___cxa_throw(($131|0),(168|0),(34|0)); + // unreachable; + } + $132 = HEAP32[$67>>2]|0; + __ZN6laszip7streams13memory_stream4readEPci($132,$61,8); + $133 = HEAP32[$67>>2]|0; + $134 = (__ZN6laszip7streams13memory_stream4goodEv($133)|0); + if (!($134)) { + $135 = (___cxa_allocate_exception(8)|0); + __ZN6laszip22chunk_table_read_errorC2Ev($135); + ___cxa_throw(($135|0),(168|0),(34|0)); + // unreachable; + } + $136 = HEAP32[$61>>2]|0; + $137 = ($136|0)!=(0); + if ($137) { + $138 = (___cxa_allocate_exception(8)|0); + __ZN6laszip26unknown_chunk_table_formatC2Ev($138); + ___cxa_throw(($138|0),(200|0),(38|0)); + // unreachable; + } + $139 = ((($67)) + 288|0); + $51 = $139; + $140 = $51; + $50 = $140; + $141 = $50; + $142 = ((($141)) + 4|0); + $143 = HEAP32[$142>>2]|0; + $144 = HEAP32[$141>>2]|0; + $145 = $143; + $146 = $144; + $147 = (($145) - ($146))|0; + $148 = (($147|0) / 8)&-1; + $52 = $148; + $49 = $140; + $149 = $49; + $150 = HEAP32[$149>>2]|0; + $46 = $149; + $47 = $150; + $151 = $46; + $152 = ((($151)) + 4|0); + $153 = HEAP32[$152>>2]|0; + $48 = $153; + while(1) { + $154 = $47; + $155 = $48; + $156 = ($154|0)!=($155|0); + if (!($156)) { + break; + } + $45 = $151; + $157 = $45; + $158 = ((($157)) + 8|0); + $44 = $158; + $159 = $44; + $43 = $159; + $160 = $43; + $161 = $48; + $162 = ((($161)) + -8|0); + $48 = $162; + $42 = $162; + $163 = $42; + $39 = $160; + $40 = $163; + $164 = $39; + $165 = $40; + ;HEAP8[$38>>0]=HEAP8[$41>>0]|0; + $36 = $164; + $37 = $165; + $166 = $36; + $167 = $37; + $34 = $166; + $35 = $167; + } + $168 = $47; + $169 = ((($151)) + 4|0); + HEAP32[$169>>2] = $168; + $170 = $52; + $31 = $140; + $32 = $170; + $171 = $31; + $30 = $171; + $172 = $30; + $173 = HEAP32[$172>>2]|0; + $29 = $173; + $174 = $29; + $13 = $171; + $175 = $13; + $176 = HEAP32[$175>>2]|0; + $12 = $176; + $177 = $12; + $18 = $171; + $178 = $18; + $17 = $178; + $179 = $17; + $16 = $179; + $180 = $16; + $181 = ((($180)) + 8|0); + $15 = $181; + $182 = $15; + $14 = $182; + $183 = $14; + $184 = HEAP32[$183>>2]|0; + $185 = HEAP32[$179>>2]|0; + $186 = $184; + $187 = $185; + $188 = (($186) - ($187))|0; + $189 = (($188|0) / 8)&-1; + $190 = (($177) + ($189<<3)|0); + $20 = $171; + $191 = $20; + $192 = HEAP32[$191>>2]|0; + $19 = $192; + $193 = $19; + $194 = $32; + $195 = (($193) + ($194<<3)|0); + $22 = $171; + $196 = $22; + $197 = HEAP32[$196>>2]|0; + $21 = $197; + $198 = $21; + $23 = $171; + $199 = $23; + $200 = ((($199)) + 4|0); + $201 = HEAP32[$200>>2]|0; + $202 = HEAP32[$199>>2]|0; + $203 = $201; + $204 = $202; + $205 = (($203) - ($204))|0; + $206 = (($205|0) / 8)&-1; + $207 = (($198) + ($206<<3)|0); + $24 = $171; + $25 = $174; + $26 = $190; + $27 = $195; + $28 = $207; + $33 = $140; + $208 = ((($67)) + 247|0); + $209 = ((($208)) + 12|0); + $210 = HEAPU8[$209>>0]|(HEAPU8[$209+1>>0]<<8)|(HEAPU8[$209+2>>0]<<16)|(HEAPU8[$209+3>>0]<<24); + $211 = ($210|0)==(-1); + if ($211) { + $212 = (___cxa_allocate_exception(8)|0); + __ZN6laszip13not_supportedC2EPKc($212,5170); + ___cxa_throw(($212|0),(184|0),(36|0)); + // unreachable; + } + $213 = ((($67)) + 288|0); + $214 = ((($61)) + 4|0); + $215 = HEAP32[$214>>2]|0; + $216 = (($215) + 1)|0; + __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($213,$216); + $217 = ((($67)) + 20|0); + $218 = ((($217)) + 96|0); + $219 = HEAP32[$218>>2]|0; + $220 = (($219) + 8)|0; + $221 = ((($67)) + 288|0); + $10 = $221; + $11 = 0; + $222 = $10; + $223 = HEAP32[$222>>2]|0; + $224 = $11; + $225 = (($223) + ($224<<3)|0); + $226 = $225; + $227 = $226; + HEAP32[$227>>2] = $220; + $228 = (($226) + 4)|0; + $229 = $228; + HEAP32[$229>>2] = 0; + $230 = ((($61)) + 4|0); + $231 = HEAP32[$230>>2]|0; + $232 = ($231>>>0)>(1); + if (!($232)) { + STACKTOP = sp;return; + } + $233 = HEAP32[$67>>2]|0; + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($62,$233); + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($63,$62); + __ZN6laszip13decompressors7integerC2Ejjjj($64,32,2,8,0); + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($63); + __ZN6laszip13decompressors7integer4initEv($64); + $65 = 1; + while(1) { + $234 = $65; + $235 = ((($61)) + 4|0); + $236 = HEAP32[$235>>2]|0; + $237 = ($234>>>0)<=($236>>>0); + if (!($237)) { + break; + } + $238 = $65; + $239 = ($238>>>0)>(1); + if ($239) { + $240 = ((($67)) + 288|0); + $241 = $65; + $242 = (($241) - 1)|0; + $8 = $240; + $9 = $242; + $243 = $8; + $244 = HEAP32[$243>>2]|0; + $245 = $9; + $246 = (($244) + ($245<<3)|0); + $247 = $246; + $248 = $247; + $249 = HEAP32[$248>>2]|0; + $250 = (($247) + 4)|0; + $251 = $250; + $252 = HEAP32[$251>>2]|0; + $253 = $249; + } else { + $253 = 0; + } + $254 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($64,$63,$253,1)|0); + $255 = ($254|0)<(0); + $256 = $255 << 31 >> 31; + $257 = ((($67)) + 288|0); + $258 = $65; + $1 = $257; + $2 = $258; + $259 = $1; + $260 = HEAP32[$259>>2]|0; + $261 = $2; + $262 = (($260) + ($261<<3)|0); + $263 = $262; + $264 = $263; + HEAP32[$264>>2] = $254; + $265 = (($263) + 4)|0; + $266 = $265; + HEAP32[$266>>2] = $256; + $267 = $65; + $268 = (($267) + 1)|0; + $65 = $268; + } + $66 = 1; + while(1) { + $269 = $66; + $270 = ((($67)) + 288|0); + $3 = $270; + $271 = $3; + $272 = ((($271)) + 4|0); + $273 = HEAP32[$272>>2]|0; + $274 = HEAP32[$271>>2]|0; + $275 = $273; + $276 = $274; + $277 = (($275) - ($276))|0; + $278 = (($277|0) / 8)&-1; + $279 = ($269>>>0)<($278>>>0); + if (!($279)) { + break; + } + $280 = ((($67)) + 288|0); + $281 = $66; + $282 = (($281) - 1)|0; + $4 = $280; + $5 = $282; + $283 = $4; + $284 = HEAP32[$283>>2]|0; + $285 = $5; + $286 = (($284) + ($285<<3)|0); + $287 = $286; + $288 = $287; + $289 = HEAP32[$288>>2]|0; + $290 = (($287) + 4)|0; + $291 = $290; + $292 = HEAP32[$291>>2]|0; + $293 = ((($67)) + 288|0); + $294 = $66; + $6 = $293; + $7 = $294; + $295 = $6; + $296 = HEAP32[$295>>2]|0; + $297 = $7; + $298 = (($296) + ($297<<3)|0); + $299 = $298; + $300 = $299; + $301 = HEAP32[$300>>2]|0; + $302 = (($299) + 4)|0; + $303 = $302; + $304 = HEAP32[$303>>2]|0; + $305 = (_i64Add(($301|0),($304|0),($289|0),($292|0))|0); + $306 = tempRet0; + $307 = $298; + $308 = $307; + HEAP32[$308>>2] = $305; + $309 = (($307) + 4)|0; + $310 = $309; + HEAP32[$310>>2] = $306; + $311 = $66; + $312 = (($311) + 1)|0; + $66 = $312; + } + __ZN6laszip13decompressors7integerD2Ev($64); + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($63); + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($62); + STACKTOP = sp;return; +} +function __ZN6laszip7streams13memory_stream5clearEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 12|0); + HEAP8[$3>>0] = 0; + $4 = ((($2)) + 13|0); + HEAP8[$4>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 8|0); + HEAP32[$3>>2] = 0; + $4 = ((($2)) + 4|0); + HEAP32[$4>>2] = 0; + STACKTOP = sp;return; +} +function __ZNSt3__211char_traitsIcE6lengthEPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = (_strlen($2)|0); + STACKTOP = sp;return ($3|0); +} +function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0); + $38 = sp + 8|0; + $40 = sp + 218|0; + $48 = sp; + $51 = sp + 217|0; + $58 = sp + 216|0; + $52 = $0; + $53 = $1; + $54 = $2; + $59 = $52; + $60 = $53; + $61 = $54; + $49 = $60; + $50 = $61; + $62 = $49; + $63 = $50; + ;HEAP8[$48>>0]=HEAP8[$51>>0]|0; + $46 = $62; + $47 = $63; + $64 = $47; + $65 = $46; + $66 = $64; + $67 = $65; + $68 = (($66) - ($67))|0; + $55 = $68; + $69 = $55; + $44 = $59; + $70 = $44; + $43 = $70; + $71 = $43; + $42 = $71; + $72 = $42; + $41 = $72; + $73 = $41; + $39 = $73; + $74 = $39; + ;HEAP8[$38>>0]=HEAP8[$40>>0]|0; + $37 = $74; + $75 = $37; + $36 = $75; + $45 = -1; + $76 = $45; + $77 = (($76) - 16)|0; + $78 = ($69>>>0)>($77>>>0); + if ($78) { + __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($59); + // unreachable; + } + $79 = $55; + $80 = ($79>>>0)<(11); + $81 = $55; + if ($80) { + $34 = $59; + $35 = $81; + $82 = $34; + $83 = $35; + $84 = $83&255; + $33 = $82; + $85 = $33; + $32 = $85; + $86 = $32; + $87 = ((($86)) + 11|0); + HEAP8[$87>>0] = $84; + $12 = $59; + $88 = $12; + $11 = $88; + $89 = $11; + $10 = $89; + $90 = $10; + $9 = $90; + $91 = $9; + $8 = $91; + $92 = $8; + $56 = $92; + } else { + $4 = $81; + $93 = $4; + $94 = ($93>>>0)<(11); + if ($94) { + $101 = 11; + } else { + $95 = $4; + $96 = (($95) + 1)|0; + $3 = $96; + $97 = $3; + $98 = (($97) + 15)|0; + $99 = $98 & -16; + $101 = $99; + } + $100 = (($101) - 1)|0; + $57 = $100; + $7 = $59; + $102 = $7; + $6 = $102; + $103 = $6; + $5 = $103; + $104 = $5; + $105 = $57; + $106 = (($105) + 1)|0; + $18 = $104; + $19 = $106; + $107 = $18; + $108 = $19; + $15 = $107; + $16 = $108; + $17 = 0; + $109 = $15; + $14 = $109; + $110 = $16; + $13 = $110; + $111 = $13; + $112 = (__Znwj($111)|0); + $56 = $112; + $113 = $56; + $22 = $59; + $23 = $113; + $114 = $22; + $115 = $23; + $21 = $114; + $116 = $21; + $20 = $116; + $117 = $20; + HEAP32[$117>>2] = $115; + $118 = $57; + $119 = (($118) + 1)|0; + $26 = $59; + $27 = $119; + $120 = $26; + $121 = $27; + $122 = -2147483648 | $121; + $25 = $120; + $123 = $25; + $24 = $123; + $124 = $24; + $125 = ((($124)) + 8|0); + HEAP32[$125>>2] = $122; + $126 = $55; + $30 = $59; + $31 = $126; + $127 = $30; + $128 = $31; + $29 = $127; + $129 = $29; + $28 = $129; + $130 = $28; + $131 = ((($130)) + 4|0); + HEAP32[$131>>2] = $128; + } + while(1) { + $132 = $53; + $133 = $54; + $134 = ($132|0)!=($133|0); + $135 = $56; + if (!($134)) { + break; + } + $136 = $53; + __ZNSt3__211char_traitsIcE6assignERcRKc($135,$136); + $137 = $53; + $138 = ((($137)) + 1|0); + $53 = $138; + $139 = $56; + $140 = ((($139)) + 1|0); + $56 = $140; + } + HEAP8[$58>>0] = 0; + __ZNSt3__211char_traitsIcE6assignERcRKc($135,$58); + STACKTOP = sp;return; +} +function __ZNSt3__211char_traitsIcE6assignERcRKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $3; + $5 = HEAP8[$4>>0]|0; + $6 = $2; + HEAP8[$6>>0] = $5; + STACKTOP = sp;return; +} +function __ZN6laszip13invalid_magicD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13invalid_magicD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + var $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0); + $10 = sp + 96|0; + $11 = sp + 88|0; + $12 = sp + 80|0; + $13 = sp + 72|0; + $17 = sp + 235|0; + $18 = sp + 234|0; + $19 = sp + 233|0; + $20 = sp + 232|0; + $22 = sp + 172|0; + $25 = sp + 231|0; + $30 = sp + 64|0; + $31 = sp + 56|0; + $32 = sp + 48|0; + $36 = sp + 40|0; + $37 = sp + 32|0; + $38 = sp + 24|0; + $41 = sp + 230|0; + $42 = sp + 124|0; + $43 = sp + 229|0; + $44 = sp + 228|0; + $45 = sp + 227|0; + $46 = sp + 226|0; + $47 = sp + 16|0; + $48 = sp + 8|0; + $49 = sp; + $53 = sp + 225|0; + $54 = sp + 108|0; + $55 = sp + 224|0; + $57 = $0; + $58 = $57; + $59 = ((($58)) + 16|0); + HEAP32[$59>>2] = 0; + $56 = $1; + $2 = $1; + $60 = $2; + $51 = $58; + $52 = $60; + $61 = $51; + $50 = $61; + $62 = $50; + HEAP32[$62>>2] = (1704); + HEAP32[$61>>2] = (1660); + $63 = ((($61)) + 4|0); + $64 = $52; + $3 = $64; + $65 = $3; + $23 = $65; + $66 = $23; + $21 = $66; + $67 = $21; + $15 = $22; + $16 = $67; + $68 = $15; + $69 = $16; + $14 = $69; + $70 = $14; + ;HEAP8[$10>>0]=HEAP8[$20>>0]|0; + ;HEAP8[$11>>0]=HEAP8[$19>>0]|0; + ;HEAP8[$12>>0]=HEAP8[$18>>0]|0; + ;HEAP8[$13>>0]=HEAP8[$17>>0]|0; + $8 = $68; + $9 = $70; + $71 = $8; + $72 = $9; + $7 = $72; + $73 = $7; + $5 = $71; + $6 = $73; + $74 = $5; + $75 = $6; + $4 = $75; + $76 = $4; + HEAP32[$74>>2] = $76; + $77 = HEAP32[$22>>2]|0; + HEAP32[$54>>2] = $77; + $24 = $25; + ;HEAP8[$47>>0]=HEAP8[$55>>0]|0; + ;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; + ;HEAP8[$49>>0]=HEAP8[$53>>0]|0; + $40 = $63; + $78 = $40; + $39 = $48; + $79 = $39; + ;HEAP32[$42>>2]=HEAP32[$79>>2]|0; + ;HEAP8[$30>>0]=HEAP8[$43>>0]|0; + ;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; + ;HEAP8[$32>>0]=HEAP8[$41>>0]|0; + $29 = $78; + $28 = $31; + $80 = $28; + $27 = $80; + $81 = $27; + $82 = HEAP32[$81>>2]|0; + $26 = $82; + $33 = $47; + ;HEAP8[$36>>0]=HEAP8[$46>>0]|0; + ;HEAP8[$37>>0]=HEAP8[$45>>0]|0; + ;HEAP8[$38>>0]=HEAP8[$44>>0]|0; + $35 = $78; + $83 = $35; + $34 = $83; + $84 = ((($58)) + 16|0); + HEAP32[$84>>2] = $58; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); + $10 = sp + 8|0; + $15 = sp + 193|0; + $24 = sp; + $27 = sp + 192|0; + $35 = sp + 72|0; + $38 = sp + 60|0; + $46 = sp + 12|0; + $43 = $0; + $44 = $1; + $47 = $43; + $42 = $47; + $48 = $42; + $49 = ((($48)) + 8|0); + $41 = $49; + $50 = $41; + $40 = $50; + $51 = $40; + $45 = $51; + $39 = $47; + $52 = $39; + $53 = ((($52)) + 4|0); + $54 = HEAP32[$53>>2]|0; + $55 = HEAP32[$52>>2]|0; + $56 = $54; + $57 = $55; + $58 = (($56) - ($57))|0; + $59 = (($58|0) / 24)&-1; + $60 = (($59) + 1)|0; + $34 = $47; + HEAP32[$35>>2] = $60; + $61 = $34; + $62 = (__ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($61)|0); + $36 = $62; + $63 = HEAP32[$35>>2]|0; + $64 = $36; + $65 = ($63>>>0)>($64>>>0); + if ($65) { + __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61); + // unreachable; + } + $32 = $61; + $66 = $32; + $31 = $66; + $67 = $31; + $30 = $67; + $68 = $30; + $69 = ((($68)) + 8|0); + $29 = $69; + $70 = $29; + $28 = $70; + $71 = $28; + $72 = HEAP32[$71>>2]|0; + $73 = HEAP32[$67>>2]|0; + $74 = $72; + $75 = $73; + $76 = (($74) - ($75))|0; + $77 = (($76|0) / 24)&-1; + $37 = $77; + $78 = $37; + $79 = $36; + $80 = (($79>>>0) / 2)&-1; + $81 = ($78>>>0)>=($80>>>0); + if ($81) { + $82 = $36; + $33 = $82; + } else { + $83 = $37; + $84 = $83<<1; + HEAP32[$38>>2] = $84; + $25 = $38; + $26 = $35; + $85 = $25; + $86 = $26; + ;HEAP8[$24>>0]=HEAP8[$27>>0]|0; + $22 = $85; + $23 = $86; + $87 = $22; + $88 = $23; + $19 = $24; + $20 = $87; + $21 = $88; + $89 = $20; + $90 = HEAP32[$89>>2]|0; + $91 = $21; + $92 = HEAP32[$91>>2]|0; + $93 = ($90>>>0)<($92>>>0); + $94 = $23; + $95 = $22; + $96 = $93 ? $94 : $95; + $97 = HEAP32[$96>>2]|0; + $33 = $97; + } + $98 = $33; + $18 = $47; + $99 = $18; + $100 = ((($99)) + 4|0); + $101 = HEAP32[$100>>2]|0; + $102 = HEAP32[$99>>2]|0; + $103 = $101; + $104 = $102; + $105 = (($103) - ($104))|0; + $106 = (($105|0) / 24)&-1; + $107 = $45; + __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($46,$98,$106,$107); + $108 = $45; + $109 = ((($46)) + 8|0); + $110 = HEAP32[$109>>2]|0; + $17 = $110; + $111 = $17; + $112 = $44; + $16 = $112; + $113 = $16; + $12 = $108; + $13 = $111; + $14 = $113; + $114 = $12; + $115 = $13; + $116 = $14; + $11 = $116; + $117 = $11; + ;HEAP8[$10>>0]=HEAP8[$15>>0]|0; + $7 = $114; + $8 = $115; + $9 = $117; + $118 = $7; + $119 = $8; + $120 = $9; + $6 = $120; + $121 = $6; + $3 = $118; + $4 = $119; + $5 = $121; + $122 = $4; + $123 = $5; + $2 = $123; + $124 = $2; + __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($122,$124); + $125 = ((($46)) + 8|0); + $126 = HEAP32[$125>>2]|0; + $127 = ((($126)) + 24|0); + HEAP32[$125>>2] = $127; + __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($47,$46); + __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($46); + STACKTOP = sp;return; +} +function __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + $6 = ((($5)) + 16|0); + $7 = HEAP32[$6>>2]|0; + $8 = ($7|0)==(0|0); + if ($8) { + $9 = ((($4)) + 16|0); + HEAP32[$9>>2] = 0; + STACKTOP = sp;return; + } + $10 = $3; + $11 = ((($10)) + 16|0); + $12 = HEAP32[$11>>2]|0; + $13 = $3; + $14 = ($12|0)==($13|0); + if ($14) { + $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0); + $16 = ((($4)) + 16|0); + HEAP32[$16>>2] = $15; + $17 = $3; + $18 = ((($17)) + 16|0); + $19 = HEAP32[$18>>2]|0; + $20 = HEAP32[$19>>2]|0; + $21 = ((($20)) + 12|0); + $22 = HEAP32[$21>>2]|0; + $23 = ((($4)) + 16|0); + $24 = HEAP32[$23>>2]|0; + FUNCTION_TABLE_vii[$22 & 255]($19,$24); + STACKTOP = sp;return; + } else { + $25 = $3; + $26 = ((($25)) + 16|0); + $27 = HEAP32[$26>>2]|0; + $28 = ((($4)) + 16|0); + HEAP32[$28>>2] = $27; + $29 = $3; + $30 = ((($29)) + 16|0); + HEAP32[$30>>2] = 0; + STACKTOP = sp;return; + } +} +function __ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + STACKTOP = sp;return ($2|0); +} +function __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $35 = sp; + $31 = $0; + $32 = $1; + $33 = $2; + $34 = $3; + $36 = $31; + $37 = ((($36)) + 12|0); + HEAP32[$35>>2] = 0; + $38 = $34; + $28 = $37; + $29 = $35; + $30 = $38; + $39 = $28; + $40 = $29; + $27 = $40; + $41 = $27; + $21 = $39; + $22 = $41; + $42 = $21; + $43 = $22; + $20 = $43; + HEAP32[$42>>2] = 0; + $44 = ((($39)) + 4|0); + $45 = $30; + $23 = $45; + $46 = $23; + $25 = $44; + $26 = $46; + $47 = $25; + $48 = $26; + $24 = $48; + $49 = $24; + HEAP32[$47>>2] = $49; + $50 = $32; + $51 = ($50|0)!=(0); + do { + if ($51) { + $6 = $36; + $52 = $6; + $53 = ((($52)) + 12|0); + $5 = $53; + $54 = $5; + $55 = ((($54)) + 4|0); + $4 = $55; + $56 = $4; + $57 = HEAP32[$56>>2]|0; + $58 = $32; + $15 = $57; + $16 = $58; + $59 = $15; + $60 = $16; + $12 = $59; + $13 = $60; + $14 = 0; + $61 = $12; + $62 = $13; + $11 = $61; + $63 = ($62>>>0)>(178956970); + if ($63) { + $9 = 4287; + $64 = (___cxa_allocate_exception(8)|0); + $65 = $9; + $7 = $64; + $8 = $65; + $66 = $7; + $67 = $8; + __ZNSt11logic_errorC2EPKc($66,$67); + HEAP32[$66>>2] = (3660); + ___cxa_throw(($64|0),(1384|0),(220|0)); + // unreachable; + } else { + $68 = $13; + $69 = ($68*24)|0; + $10 = $69; + $70 = $10; + $71 = (__Znwj($70)|0); + $72 = $71; + break; + } + } else { + $72 = 0; + } + } while(0); + HEAP32[$36>>2] = $72; + $73 = HEAP32[$36>>2]|0; + $74 = $33; + $75 = (($73) + (($74*24)|0)|0); + $76 = ((($36)) + 8|0); + HEAP32[$76>>2] = $75; + $77 = ((($36)) + 4|0); + HEAP32[$77>>2] = $75; + $78 = HEAP32[$36>>2]|0; + $79 = $32; + $80 = (($78) + (($79*24)|0)|0); + $19 = $36; + $81 = $19; + $82 = ((($81)) + 12|0); + $18 = $82; + $83 = $18; + $17 = $83; + $84 = $17; + HEAP32[$84>>2] = $80; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0); + $15 = sp; + $20 = sp + 404|0; + $31 = sp + 292|0; + $37 = sp + 268|0; + $49 = sp + 220|0; + $102 = $0; + $103 = $1; + $104 = $102; + $101 = $104; + $105 = $101; + $100 = $105; + $106 = $100; + $107 = HEAP32[$106>>2]|0; + $99 = $107; + $108 = $99; + $78 = $105; + $109 = $78; + $110 = HEAP32[$109>>2]|0; + $77 = $110; + $111 = $77; + $83 = $105; + $112 = $83; + $82 = $112; + $113 = $82; + $81 = $113; + $114 = $81; + $115 = ((($114)) + 8|0); + $80 = $115; + $116 = $80; + $79 = $116; + $117 = $79; + $118 = HEAP32[$117>>2]|0; + $119 = HEAP32[$113>>2]|0; + $120 = $118; + $121 = $119; + $122 = (($120) - ($121))|0; + $123 = (($122|0) / 24)&-1; + $124 = (($111) + (($123*24)|0)|0); + $85 = $105; + $125 = $85; + $126 = HEAP32[$125>>2]|0; + $84 = $126; + $127 = $84; + $86 = $105; + $128 = $86; + $129 = ((($128)) + 4|0); + $130 = HEAP32[$129>>2]|0; + $131 = HEAP32[$128>>2]|0; + $132 = $130; + $133 = $131; + $134 = (($132) - ($133))|0; + $135 = (($134|0) / 24)&-1; + $136 = (($127) + (($135*24)|0)|0); + $88 = $105; + $137 = $88; + $138 = HEAP32[$137>>2]|0; + $87 = $138; + $139 = $87; + $93 = $105; + $140 = $93; + $92 = $140; + $141 = $92; + $91 = $141; + $142 = $91; + $143 = ((($142)) + 8|0); + $90 = $143; + $144 = $90; + $89 = $144; + $145 = $89; + $146 = HEAP32[$145>>2]|0; + $147 = HEAP32[$141>>2]|0; + $148 = $146; + $149 = $147; + $150 = (($148) - ($149))|0; + $151 = (($150|0) / 24)&-1; + $152 = (($139) + (($151*24)|0)|0); + $94 = $105; + $95 = $108; + $96 = $124; + $97 = $136; + $98 = $152; + $4 = $104; + $153 = $4; + $154 = ((($153)) + 8|0); + $3 = $154; + $155 = $3; + $2 = $155; + $156 = $2; + $157 = HEAP32[$104>>2]|0; + $158 = ((($104)) + 4|0); + $159 = HEAP32[$158>>2]|0; + $160 = $103; + $161 = ((($160)) + 4|0); + $22 = $156; + $23 = $157; + $24 = $159; + $25 = $161; + while(1) { + $162 = $24; + $163 = $23; + $164 = ($162|0)!=($163|0); + if (!($164)) { + break; + } + $165 = $22; + $166 = $25; + $167 = HEAP32[$166>>2]|0; + $168 = ((($167)) + -24|0); + $21 = $168; + $169 = $21; + $170 = $24; + $171 = ((($170)) + -24|0); + $24 = $171; + $6 = $171; + $172 = $6; + $5 = $172; + $173 = $5; + $17 = $165; + $18 = $169; + $19 = $173; + $174 = $17; + $175 = $18; + $176 = $19; + $16 = $176; + $177 = $16; + ;HEAP8[$15>>0]=HEAP8[$20>>0]|0; + $12 = $174; + $13 = $175; + $14 = $177; + $178 = $12; + $179 = $13; + $180 = $14; + $11 = $180; + $181 = $11; + $8 = $178; + $9 = $179; + $10 = $181; + $182 = $9; + $183 = $10; + $7 = $183; + $184 = $7; + __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($182,$184); + $185 = $25; + $186 = HEAP32[$185>>2]|0; + $187 = ((($186)) + -24|0); + HEAP32[$185>>2] = $187; + } + $188 = $103; + $189 = ((($188)) + 4|0); + $29 = $104; + $30 = $189; + $190 = $29; + $28 = $190; + $191 = $28; + $192 = HEAP32[$191>>2]|0; + HEAP32[$31>>2] = $192; + $193 = $30; + $26 = $193; + $194 = $26; + $195 = HEAP32[$194>>2]|0; + $196 = $29; + HEAP32[$196>>2] = $195; + $27 = $31; + $197 = $27; + $198 = HEAP32[$197>>2]|0; + $199 = $30; + HEAP32[$199>>2] = $198; + $200 = ((($104)) + 4|0); + $201 = $103; + $202 = ((($201)) + 8|0); + $35 = $200; + $36 = $202; + $203 = $35; + $34 = $203; + $204 = $34; + $205 = HEAP32[$204>>2]|0; + HEAP32[$37>>2] = $205; + $206 = $36; + $32 = $206; + $207 = $32; + $208 = HEAP32[$207>>2]|0; + $209 = $35; + HEAP32[$209>>2] = $208; + $33 = $37; + $210 = $33; + $211 = HEAP32[$210>>2]|0; + $212 = $36; + HEAP32[$212>>2] = $211; + $40 = $104; + $213 = $40; + $214 = ((($213)) + 8|0); + $39 = $214; + $215 = $39; + $38 = $215; + $216 = $38; + $217 = $103; + $43 = $217; + $218 = $43; + $219 = ((($218)) + 12|0); + $42 = $219; + $220 = $42; + $41 = $220; + $221 = $41; + $47 = $216; + $48 = $221; + $222 = $47; + $46 = $222; + $223 = $46; + $224 = HEAP32[$223>>2]|0; + HEAP32[$49>>2] = $224; + $225 = $48; + $44 = $225; + $226 = $44; + $227 = HEAP32[$226>>2]|0; + $228 = $47; + HEAP32[$228>>2] = $227; + $45 = $49; + $229 = $45; + $230 = HEAP32[$229>>2]|0; + $231 = $48; + HEAP32[$231>>2] = $230; + $232 = $103; + $233 = ((($232)) + 4|0); + $234 = HEAP32[$233>>2]|0; + $235 = $103; + HEAP32[$235>>2] = $234; + $50 = $104; + $236 = $50; + $237 = ((($236)) + 4|0); + $238 = HEAP32[$237>>2]|0; + $239 = HEAP32[$236>>2]|0; + $240 = $238; + $241 = $239; + $242 = (($240) - ($241))|0; + $243 = (($242|0) / 24)&-1; + $74 = $104; + $75 = $243; + $244 = $74; + $73 = $244; + $245 = $73; + $246 = HEAP32[$245>>2]|0; + $72 = $246; + $247 = $72; + $52 = $244; + $248 = $52; + $249 = HEAP32[$248>>2]|0; + $51 = $249; + $250 = $51; + $57 = $244; + $251 = $57; + $56 = $251; + $252 = $56; + $55 = $252; + $253 = $55; + $254 = ((($253)) + 8|0); + $54 = $254; + $255 = $54; + $53 = $255; + $256 = $53; + $257 = HEAP32[$256>>2]|0; + $258 = HEAP32[$252>>2]|0; + $259 = $257; + $260 = $258; + $261 = (($259) - ($260))|0; + $262 = (($261|0) / 24)&-1; + $263 = (($250) + (($262*24)|0)|0); + $59 = $244; + $264 = $59; + $265 = HEAP32[$264>>2]|0; + $58 = $265; + $266 = $58; + $64 = $244; + $267 = $64; + $63 = $267; + $268 = $63; + $62 = $268; + $269 = $62; + $270 = ((($269)) + 8|0); + $61 = $270; + $271 = $61; + $60 = $271; + $272 = $60; + $273 = HEAP32[$272>>2]|0; + $274 = HEAP32[$268>>2]|0; + $275 = $273; + $276 = $274; + $277 = (($275) - ($276))|0; + $278 = (($277|0) / 24)&-1; + $279 = (($266) + (($278*24)|0)|0); + $66 = $244; + $280 = $66; + $281 = HEAP32[$280>>2]|0; + $65 = $281; + $282 = $65; + $283 = $75; + $284 = (($282) + (($283*24)|0)|0); + $67 = $244; + $68 = $247; + $69 = $263; + $70 = $279; + $71 = $284; + $76 = $104; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $19 = sp + 8|0; + $22 = sp + 133|0; + $29 = sp; + $32 = sp + 132|0; + $34 = $0; + $35 = $34; + $33 = $35; + $36 = $33; + $37 = ((($36)) + 4|0); + $38 = HEAP32[$37>>2]|0; + $30 = $36; + $31 = $38; + $39 = $30; + $40 = $31; + ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; + $27 = $39; + $28 = $40; + $41 = $27; + while(1) { + $42 = $28; + $43 = ((($41)) + 8|0); + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)!=($44|0); + if (!($45)) { + break; + } + $26 = $41; + $46 = $26; + $47 = ((($46)) + 12|0); + $25 = $47; + $48 = $25; + $49 = ((($48)) + 4|0); + $24 = $49; + $50 = $24; + $51 = HEAP32[$50>>2]|0; + $52 = ((($41)) + 8|0); + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + -24|0); + HEAP32[$52>>2] = $54; + $23 = $54; + $55 = $23; + $20 = $51; + $21 = $55; + $56 = $20; + $57 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $56; + $18 = $57; + $58 = $17; + $59 = $18; + $15 = $58; + $16 = $59; + $60 = $16; + __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($60); + } + $61 = HEAP32[$35>>2]|0; + $62 = ($61|0)!=(0|0); + if (!($62)) { + STACKTOP = sp;return; + } + $14 = $35; + $63 = $14; + $64 = ((($63)) + 12|0); + $13 = $64; + $65 = $13; + $66 = ((($65)) + 4|0); + $12 = $66; + $67 = $12; + $68 = HEAP32[$67>>2]|0; + $69 = HEAP32[$35>>2]|0; + $11 = $35; + $70 = $11; + $10 = $70; + $71 = $10; + $72 = ((($71)) + 12|0); + $9 = $72; + $73 = $9; + $8 = $73; + $74 = $8; + $75 = HEAP32[$74>>2]|0; + $76 = HEAP32[$70>>2]|0; + $77 = $75; + $78 = $76; + $79 = (($77) - ($78))|0; + $80 = (($79|0) / 24)&-1; + $5 = $68; + $6 = $69; + $7 = $80; + $81 = $5; + $82 = $6; + $83 = $7; + $2 = $81; + $3 = $82; + $4 = $83; + $84 = $3; + $1 = $84; + $85 = $1; + __ZdlPv($85); + STACKTOP = sp;return; +} +function __ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($0) { + $0 = $0|0; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $6 = sp + 8|0; + $9 = sp + 77|0; + $12 = sp; + $14 = sp + 76|0; + $19 = sp + 16|0; + $20 = sp + 12|0; + $18 = $0; + $21 = $18; + $17 = $21; + $22 = $17; + $23 = ((($22)) + 8|0); + $16 = $23; + $24 = $16; + $15 = $24; + $25 = $15; + $13 = $25; + $26 = $13; + ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; + $11 = $26; + $27 = $11; + $10 = $27; + HEAP32[$19>>2] = 178956970; + HEAP32[$20>>2] = 2147483647; + $7 = $19; + $8 = $20; + $28 = $7; + $29 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $28; + $5 = $29; + $30 = $5; + $31 = $4; + $1 = $6; + $2 = $30; + $3 = $31; + $32 = $2; + $33 = HEAP32[$32>>2]|0; + $34 = $3; + $35 = HEAP32[$34>>2]|0; + $36 = ($33>>>0)<($35>>>0); + $37 = $5; + $38 = $4; + $39 = $36 ? $37 : $38; + $40 = HEAP32[$39>>2]|0; + STACKTOP = sp;return ($40|0); +} +function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $2; + $1 = $3; + STACKTOP = sp;return; +} +function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 608|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(608|0); + $7 = sp + 128|0; + $8 = sp + 120|0; + $9 = sp + 112|0; + $10 = sp + 104|0; + $13 = sp + 594|0; + $14 = sp + 593|0; + $15 = sp + 592|0; + $16 = sp + 591|0; + $18 = sp + 540|0; + $27 = sp + 96|0; + $28 = sp + 88|0; + $29 = sp + 80|0; + $30 = sp + 72|0; + $34 = sp + 590|0; + $35 = sp + 589|0; + $36 = sp + 588|0; + $37 = sp + 587|0; + $39 = sp + 488|0; + $45 = sp + 64|0; + $46 = sp + 56|0; + $47 = sp + 48|0; + $53 = sp + 40|0; + $54 = sp + 32|0; + $55 = sp + 24|0; + $58 = sp + 586|0; + $59 = sp + 436|0; + $60 = sp + 585|0; + $61 = sp + 584|0; + $62 = sp + 432|0; + $63 = sp + 583|0; + $64 = sp + 16|0; + $65 = sp + 8|0; + $66 = sp; + $71 = sp + 582|0; + $72 = sp + 412|0; + $73 = sp + 408|0; + $100 = sp + 300|0; + $137 = sp + 581|0; + $138 = sp + 144|0; + $139 = sp + 136|0; + $140 = sp + 580|0; + $136 = $0; + $141 = $136; + $142 = ((($141)) + 4|0); + $135 = $142; + $143 = $135; + $134 = $143; + $144 = $134; + $132 = $137; + $133 = $144; + $110 = $137; + $111 = 1; + $112 = 0; + $145 = $110; + $146 = $111; + $109 = $145; + $147 = ($146>>>0)>(536870911); + if ($147) { + $107 = 4287; + $148 = (___cxa_allocate_exception(8)|0); + $149 = $107; + $105 = $148; + $106 = $149; + $150 = $105; + $151 = $106; + __ZNSt11logic_errorC2EPKc($150,$151); + HEAP32[$150>>2] = (3660); + ___cxa_throw(($148|0),(1384|0),(220|0)); + // unreachable; + } + $152 = $111; + $153 = $152<<3; + $108 = $153; + $154 = $108; + $155 = (__Znwj($154)|0); + $102 = $139; + $103 = $137; + $104 = 1; + $156 = $102; + $157 = $103; + HEAP32[$156>>2] = $157; + $158 = ((($156)) + 4|0); + $159 = $104; + HEAP32[$158>>2] = $159; + $99 = $138; + HEAP32[$100>>2] = $155; + $101 = $139; + $160 = $99; + $161 = $101; + $98 = $161; + $162 = $98; + $95 = $160; + $96 = $100; + $97 = $162; + $163 = $95; + $164 = $96; + $94 = $164; + $165 = $94; + $88 = $163; + $89 = $165; + $166 = $88; + $167 = $89; + $87 = $167; + $168 = $87; + $169 = HEAP32[$168>>2]|0; + HEAP32[$166>>2] = $169; + $170 = ((($163)) + 4|0); + $171 = $97; + $90 = $171; + $172 = $90; + $92 = $170; + $93 = $172; + $173 = $92; + $174 = $93; + $91 = $174; + $175 = $91; + ;HEAP32[$173>>2]=HEAP32[$175>>2]|0;HEAP32[$173+4>>2]=HEAP32[$175+4>>2]|0; + $86 = $138; + $176 = $86; + $85 = $176; + $177 = $85; + $84 = $177; + $178 = $84; + $179 = HEAP32[$178>>2]|0; + $180 = ((($141)) + 4|0); + $83 = $180; + $181 = $83; + $82 = $181; + $182 = $82; + $80 = $140; + $81 = $137; + $68 = $179; + $69 = $182; + $70 = $140; + $183 = $68; + $67 = $183; + $184 = $67; + HEAP32[$184>>2] = (1704); + HEAP32[$183>>2] = (1660); + $185 = ((($183)) + 4|0); + $186 = $69; + $19 = $186; + $187 = $19; + $17 = $187; + $188 = $17; + $11 = $18; + $12 = $188; + $189 = $11; + $190 = $12; + ;HEAP8[$7>>0]=HEAP8[$16>>0]|0; + ;HEAP8[$8>>0]=HEAP8[$15>>0]|0; + ;HEAP8[$9>>0]=HEAP8[$14>>0]|0; + ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; + $5 = $189; + $6 = $190; + $191 = $5; + $192 = $6; + $4 = $192; + $193 = $4; + $2 = $191; + $3 = $193; + $194 = $2; + $195 = $3; + $1 = $195; + $196 = $1; + HEAP32[$194>>2] = $196; + $197 = HEAP32[$18>>2]|0; + HEAP32[$72>>2] = $197; + $198 = $70; + $20 = $198; + $199 = $20; + $40 = $199; + $200 = $40; + $38 = $200; + $201 = $38; + $32 = $39; + $33 = $201; + $202 = $32; + $203 = $33; + $31 = $203; + $204 = $31; + ;HEAP8[$27>>0]=HEAP8[$37>>0]|0; + ;HEAP8[$28>>0]=HEAP8[$36>>0]|0; + ;HEAP8[$29>>0]=HEAP8[$35>>0]|0; + ;HEAP8[$30>>0]=HEAP8[$34>>0]|0; + $25 = $202; + $26 = $204; + $205 = $25; + $206 = $26; + $24 = $206; + $207 = $24; + $22 = $205; + $23 = $207; + $208 = $22; + $209 = $23; + $21 = $209; + $210 = $21; + HEAP32[$208>>2] = $210; + $211 = HEAP32[$39>>2]|0; + HEAP32[$73>>2] = $211; + ;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; + ;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; + ;HEAP8[$66>>0]=HEAP8[$71>>0]|0; + $57 = $185; + $212 = $57; + $56 = $65; + $213 = $56; + ;HEAP32[$59>>2]=HEAP32[$213>>2]|0; + ;HEAP8[$45>>0]=HEAP8[$60>>0]|0; + ;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; + ;HEAP8[$47>>0]=HEAP8[$58>>0]|0; + $44 = $212; + $43 = $46; + $214 = $43; + $42 = $214; + $215 = $42; + $216 = HEAP32[$215>>2]|0; + $41 = $216; + $48 = $64; + $217 = $48; + ;HEAP32[$62>>2]=HEAP32[$217>>2]|0; + ;HEAP8[$53>>0]=HEAP8[$63>>0]|0; + ;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; + ;HEAP8[$55>>0]=HEAP8[$61>>0]|0; + $52 = $212; + $51 = $54; + $218 = $51; + $50 = $218; + $219 = $50; + $220 = HEAP32[$219>>2]|0; + $49 = $220; + $78 = $138; + $221 = $78; + $77 = $221; + $222 = $77; + $76 = $222; + $223 = $76; + $224 = HEAP32[$223>>2]|0; + $79 = $224; + $75 = $221; + $225 = $75; + $74 = $225; + $226 = $74; + HEAP32[$226>>2] = 0; + $227 = $79; + $131 = $138; + $228 = $131; + $128 = $228; + $129 = 0; + $229 = $128; + $127 = $229; + $230 = $127; + $126 = $230; + $231 = $126; + $232 = HEAP32[$231>>2]|0; + $130 = $232; + $233 = $129; + $116 = $229; + $234 = $116; + $115 = $234; + $235 = $115; + HEAP32[$235>>2] = $233; + $236 = $130; + $237 = ($236|0)!=(0|0); + if (!($237)) { + STACKTOP = sp;return ($227|0); + } + $114 = $229; + $238 = $114; + $239 = ((($238)) + 4|0); + $113 = $239; + $240 = $113; + $241 = $130; + $124 = $240; + $125 = $241; + $242 = $124; + $243 = HEAP32[$242>>2]|0; + $244 = $125; + $245 = ((($242)) + 4|0); + $246 = HEAP32[$245>>2]|0; + $121 = $243; + $122 = $244; + $123 = $246; + $247 = $121; + $248 = $122; + $249 = $123; + $118 = $247; + $119 = $248; + $120 = $249; + $250 = $119; + $117 = $250; + $251 = $117; + __ZdlPv($251); + STACKTOP = sp;return ($227|0); +} +function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEPNS0_6__baseISE_EE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); + $10 = sp + 128|0; + $11 = sp + 120|0; + $12 = sp + 112|0; + $13 = sp + 104|0; + $16 = sp + 332|0; + $17 = sp + 331|0; + $18 = sp + 330|0; + $19 = sp + 329|0; + $21 = sp + 272|0; + $29 = sp + 96|0; + $30 = sp + 88|0; + $31 = sp + 80|0; + $32 = sp + 72|0; + $35 = sp + 328|0; + $36 = sp + 327|0; + $37 = sp + 326|0; + $38 = sp + 325|0; + $40 = sp + 228|0; + $46 = sp + 64|0; + $47 = sp + 56|0; + $48 = sp + 48|0; + $54 = sp + 40|0; + $55 = sp + 32|0; + $56 = sp + 24|0; + $59 = sp + 324|0; + $60 = sp + 176|0; + $61 = sp + 323|0; + $62 = sp + 322|0; + $63 = sp + 172|0; + $64 = sp + 321|0; + $65 = sp + 16|0; + $66 = sp + 8|0; + $67 = sp; + $72 = sp + 320|0; + $73 = sp + 152|0; + $74 = sp + 148|0; + $77 = $0; + $78 = $1; + $79 = $77; + $80 = $78; + $81 = ((($79)) + 4|0); + $76 = $81; + $82 = $76; + $75 = $82; + $83 = $75; + $84 = ((($79)) + 4|0); + $3 = $84; + $85 = $3; + $2 = $85; + $86 = $2; + $69 = $80; + $70 = $83; + $71 = $86; + $87 = $69; + $68 = $87; + $88 = $68; + HEAP32[$88>>2] = (1704); + HEAP32[$87>>2] = (1660); + $89 = ((($87)) + 4|0); + $90 = $70; + $22 = $90; + $91 = $22; + $20 = $91; + $92 = $20; + $14 = $21; + $15 = $92; + $93 = $14; + $94 = $15; + ;HEAP8[$10>>0]=HEAP8[$19>>0]|0; + ;HEAP8[$11>>0]=HEAP8[$18>>0]|0; + ;HEAP8[$12>>0]=HEAP8[$17>>0]|0; + ;HEAP8[$13>>0]=HEAP8[$16>>0]|0; + $8 = $93; + $9 = $94; + $95 = $8; + $96 = $9; + $7 = $96; + $97 = $7; + $5 = $95; + $6 = $97; + $98 = $5; + $99 = $6; + $4 = $99; + $100 = $4; + HEAP32[$98>>2] = $100; + $101 = HEAP32[$21>>2]|0; + HEAP32[$73>>2] = $101; + $102 = $71; + $41 = $102; + $103 = $41; + $39 = $103; + $104 = $39; + $33 = $40; + $34 = $104; + $105 = $33; + $106 = $34; + ;HEAP8[$29>>0]=HEAP8[$38>>0]|0; + ;HEAP8[$30>>0]=HEAP8[$37>>0]|0; + ;HEAP8[$31>>0]=HEAP8[$36>>0]|0; + ;HEAP8[$32>>0]=HEAP8[$35>>0]|0; + $27 = $105; + $28 = $106; + $107 = $27; + $108 = $28; + $26 = $108; + $109 = $26; + $24 = $107; + $25 = $109; + $110 = $24; + $111 = $25; + $23 = $111; + $112 = $23; + HEAP32[$110>>2] = $112; + $113 = HEAP32[$40>>2]|0; + HEAP32[$74>>2] = $113; + ;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; + ;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; + ;HEAP8[$67>>0]=HEAP8[$72>>0]|0; + $58 = $89; + $114 = $58; + $57 = $66; + $115 = $57; + ;HEAP32[$60>>2]=HEAP32[$115>>2]|0; + ;HEAP8[$46>>0]=HEAP8[$61>>0]|0; + ;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; + ;HEAP8[$48>>0]=HEAP8[$59>>0]|0; + $45 = $114; + $44 = $47; + $116 = $44; + $43 = $116; + $117 = $43; + $118 = HEAP32[$117>>2]|0; + $42 = $118; + $49 = $65; + $119 = $49; + ;HEAP32[$63>>2]=HEAP32[$119>>2]|0; + ;HEAP8[$54>>0]=HEAP8[$64>>0]|0; + ;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; + ;HEAP8[$56>>0]=HEAP8[$62>>0]|0; + $53 = $114; + $52 = $55; + $120 = $52; + $51 = $120; + $121 = $51; + $122 = HEAP32[$121>>2]|0; + $50 = $122; + STACKTOP = sp;return; +} +function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7destroyEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE18destroy_deallocateEv($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $10 = sp + 36|0; + $9 = $0; + $11 = $9; + $12 = ((($11)) + 4|0); + $8 = $12; + $13 = $8; + $7 = $13; + $14 = $7; + $1 = $10; + $2 = $14; + $4 = $10; + $5 = $11; + $6 = 1; + $15 = $5; + $3 = $15; + $16 = $3; + __ZdlPv($16); + STACKTOP = sp;return; +} +function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EEclESA_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $5 = $0; + $6 = $1; + $7 = $5; + $8 = ((($7)) + 4|0); + $4 = $8; + $9 = $4; + $3 = $9; + $10 = $3; + $11 = $6; + $2 = $11; + $12 = $2; + __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($10,$12); + STACKTOP = sp;return; +} +function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE6targetERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $7 = $0; + $8 = $1; + $9 = $7; + $10 = $8; + $4 = $10; + $5 = 128; + $11 = $4; + $12 = ((($11)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $14 = $5; + $15 = ((($14)) + 4|0); + $16 = HEAP32[$15>>2]|0; + $17 = ($13|0)==($16|0); + if ($17) { + $18 = ((($9)) + 4|0); + $3 = $18; + $19 = $3; + $2 = $19; + $20 = $2; + $6 = $20; + $21 = $6; + STACKTOP = sp;return ($21|0); + } else { + $6 = 0; + $21 = $6; + STACKTOP = sp;return ($21|0); + } + return (0)|0; +} +function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE11target_typeEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return (128|0); +} +function __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + _llvm_trap(); + // unreachable; +} +function __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $8 = $0; + $9 = $1; + $10 = $8; + $7 = $10; + $11 = $7; + $12 = $9; + $2 = $12; + $13 = $2; + $5 = $11; + $6 = $13; + $14 = $5; + $4 = $14; + $15 = $4; + $16 = $6; + $3 = $16; + $17 = $3; + __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($15,$17); + STACKTOP = sp;return; +} +function __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $6 = $3; + $7 = ((($6)) + 104|0); + $8 = HEAP8[$7>>0]|0; + $9 = $8&255; + $10 = $9 >> 7; + $11 = $10 & 1; + $4 = $11; + $12 = $3; + $13 = ((($12)) + 104|0); + $14 = HEAP8[$13>>0]|0; + $15 = $14&255; + $16 = $15 >> 6; + $17 = $16 & 1; + $5 = $17; + $18 = $4; + $19 = ($18|0)==(1); + $20 = $5; + $21 = ($20|0)==(1); + $or$cond = $19 & $21; + if ($or$cond) { + $22 = (___cxa_allocate_exception(8)|0); + __ZN6laszip21old_style_compressionC2Ev($22); + ___cxa_throw(($22|0),(96|0),(26|0)); + // unreachable; + } + $23 = $4; + $24 = $5; + $25 = $23 ^ $24; + $26 = ($25|0)==(0); + if ($26) { + $27 = (___cxa_allocate_exception(8)|0); + __ZN6laszip14not_compressedC2Ev($27); + ___cxa_throw(($27|0),(112|0),(28|0)); + // unreachable; + } else { + $28 = $3; + $29 = ((($28)) + 104|0); + $30 = HEAP8[$29>>0]|0; + $31 = $30&255; + $32 = $31 & 63; + $33 = $32&255; + HEAP8[$29>>0] = $33; + STACKTOP = sp;return; + } +} +function __ZN6laszip21old_style_compressionC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,4640); + HEAP32[$2>>2] = (1748); + STACKTOP = sp;return; +} +function __ZN6laszip21old_style_compressionD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip14not_compressedC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,4708); + HEAP32[$2>>2] = (1768); + STACKTOP = sp;return; +} +function __ZN6laszip14not_compressedD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip21old_style_compressionD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip21old_style_compressionD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip14not_compressedD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip14not_compressedD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__217bad_function_callC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $2; + $1 = $3; + $4 = $1; + HEAP32[$4>>2] = (3600); + HEAP32[$3>>2] = (3448); + STACKTOP = sp;return; +} +function __ZN6laszip7streams13memory_stream4goodEv($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $3 = $1; + $4 = ((($3)) + 12|0); + $5 = HEAP8[$4>>0]|0; + $6 = $5&1; + $7 = $6&1; + $2 = $7; + $8 = ((($3)) + 12|0); + HEAP8[$8>>0] = 0; + $9 = $2; + $10 = $9&1; + $11 = $10 ^ 1; + STACKTOP = sp;return ($11|0); +} +function __ZN6laszip7streams13memory_stream3eofEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 13|0); + $4 = HEAP8[$3>>0]|0; + $5 = $4&1; + STACKTOP = sp;return ($5|0); +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 247|0); + $6 = $3; + __ZN6laszip2io7laz_vlr4fillEPKc($5,$6); + $7 = ((($4)) + 247|0); + $8 = HEAPU8[$7>>0]|(HEAPU8[$7+1>>0]<<8); + $9 = $8&65535; + $10 = ($9|0)!=(2); + if ($10) { + $11 = (___cxa_allocate_exception(8)|0); + __ZN6laszip25laszip_format_unsupportedC2Ev($11); + ___cxa_throw(($11|0),(152|0),(30|0)); + // unreachable; + } else { + STACKTOP = sp;return; + } +} +function __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $or$cond = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $5 = sp + 8|0; + $7 = sp; + $4 = $0; + $8 = $5; + $9 = $8; + HEAP32[$9>>2] = $1; + $10 = (($8) + 4)|0; + $11 = $10; + HEAP32[$11>>2] = $2; + $6 = $3; + $12 = $4; + $13 = $7; + $14 = $13; + HEAP32[$14>>2] = 0; + $15 = (($13) + 4)|0; + $16 = $15; + HEAP32[$16>>2] = 0; + $17 = $6; + switch ($17|0) { + case 0: { + $18 = $5; + $19 = $18; + $20 = HEAP32[$19>>2]|0; + $21 = (($18) + 4)|0; + $22 = $21; + $23 = HEAP32[$22>>2]|0; + $24 = $7; + $25 = $24; + HEAP32[$25>>2] = $20; + $26 = (($24) + 4)|0; + $27 = $26; + HEAP32[$27>>2] = $23; + break; + } + case 2: { + $28 = ((($12)) + 4|0); + $29 = HEAP32[$28>>2]|0; + $30 = ($29|0)<(0); + $31 = $30 << 31 >> 31; + $32 = $5; + $33 = $32; + $34 = HEAP32[$33>>2]|0; + $35 = (($32) + 4)|0; + $36 = $35; + $37 = HEAP32[$36>>2]|0; + $38 = (_i64Add(($29|0),($31|0),($34|0),($37|0))|0); + $39 = tempRet0; + $40 = (_i64Subtract(($38|0),($39|0),1,0)|0); + $41 = tempRet0; + $42 = $7; + $43 = $42; + HEAP32[$43>>2] = $40; + $44 = (($42) + 4)|0; + $45 = $44; + HEAP32[$45>>2] = $41; + break; + } + case 1: { + $46 = ((($12)) + 8|0); + $47 = HEAP32[$46>>2]|0; + $48 = ($47|0)<(0); + $49 = $48 << 31 >> 31; + $50 = $5; + $51 = $50; + $52 = HEAP32[$51>>2]|0; + $53 = (($50) + 4)|0; + $54 = $53; + $55 = HEAP32[$54>>2]|0; + $56 = (_i64Add(($47|0),($49|0),($52|0),($55|0))|0); + $57 = tempRet0; + $58 = $7; + $59 = $58; + HEAP32[$59>>2] = $56; + $60 = (($58) + 4)|0; + $61 = $60; + HEAP32[$61>>2] = $57; + break; + } + default: { + } + } + $62 = $7; + $63 = $62; + $64 = HEAP32[$63>>2]|0; + $65 = (($62) + 4)|0; + $66 = $65; + $67 = HEAP32[$66>>2]|0; + $68 = ((($12)) + 4|0); + $69 = HEAP32[$68>>2]|0; + $70 = ($69|0)<(0); + $71 = $70 << 31 >> 31; + $72 = ($67|0)>($71|0); + $73 = ($64>>>0)>=($69>>>0); + $74 = ($67|0)==($71|0); + $75 = $74 & $73; + $76 = $72 | $75; + $77 = $7; + $78 = $77; + $79 = HEAP32[$78>>2]|0; + $80 = (($77) + 4)|0; + $81 = $80; + $82 = HEAP32[$81>>2]|0; + $83 = ($82|0)<(0); + $or$cond = $76 | $83; + $84 = ((($12)) + 12|0); + if ($or$cond) { + HEAP8[$84>>0] = 1; + STACKTOP = sp;return; + } else { + HEAP8[$84>>0] = 0; + $85 = $7; + $86 = $85; + $87 = HEAP32[$86>>2]|0; + $88 = (($85) + 4)|0; + $89 = $88; + $90 = HEAP32[$89>>2]|0; + $91 = ((($12)) + 8|0); + HEAP32[$91>>2] = $87; + STACKTOP = sp;return; + } +} +function __ZN6laszip13no_laszip_vlrC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,4974); + HEAP32[$2>>2] = (1808); + STACKTOP = sp;return; +} +function __ZN6laszip13no_laszip_vlrD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + var $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $5 = sp + 40|0; + $8 = sp + 12|0; + $9 = sp; + $3 = $1; + $4 = $2; + $$expand_i1_val = 0; + HEAP8[$5>>0] = $$expand_i1_val; + __ZN6laszip7factory13record_schemaC2Ev($0); + $6 = 0; + while(1) { + $10 = $6; + $11 = $3; + $12 = ((($11)) + 32|0); + $13 = HEAPU8[$12>>0]|(HEAPU8[$12+1>>0]<<8); + $14 = $13&65535; + $15 = ($10|0)<($14|0); + if (!($15)) { + break; + } + $16 = $3; + $17 = ((($16)) + 34|0); + $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24); + $19 = $6; + $20 = (($18) + (($19*6)|0)|0); + $7 = $20; + $21 = $7; + $22 = HEAPU8[$21>>0]|(HEAPU8[$21+1>>0]<<8); + $23 = $22&65535; + $24 = $7; + $25 = ((($24)) + 2|0); + $26 = HEAPU8[$25>>0]|(HEAPU8[$25+1>>0]<<8); + $27 = $26&65535; + $28 = $7; + $29 = ((($28)) + 4|0); + $30 = HEAPU8[$29>>0]|(HEAPU8[$29+1>>0]<<8); + $31 = $30&65535; + __ZN6laszip7factory11record_itemC2Eiii($8,$23,$27,$31); + __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$8); + $32 = $7; + $33 = ((($32)) + 2|0); + $34 = HEAPU8[$33>>0]|(HEAPU8[$33+1>>0]<<8); + $35 = $34&65535; + $36 = $4; + $37 = (($36) - ($35))|0; + $4 = $37; + $38 = $6; + $39 = (($38) + 1)|0; + $6 = $39; + } + $40 = $4; + $41 = ($40|0)<(0); + if ($41) { + $42 = (___cxa_allocate_exception(8)|0); + __ZN6laszip25laszip_format_unsupportedC2Ev($42); + ___cxa_throw(($42|0),(152|0),(30|0)); + // unreachable; + } + $43 = $4; + $44 = ($43|0)!=(0); + if ($44) { + $45 = $4; + __ZN6laszip7factory11record_itemC2Eiii($9,0,$45,2); + __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$9); + } + $$expand_i1_val2 = 1; + HEAP8[$5>>0] = $$expand_i1_val2; + $$pre_trunc = HEAP8[$5>>0]|0; + $46 = $$pre_trunc&1; + if ($46) { + STACKTOP = sp;return; + } + __ZN6laszip7factory13record_schemaD2Ev($0); + STACKTOP = sp;return; +} +function __ZN6laszip7factory13record_schemaaSEOS1_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $$byval_copy = sp + 17|0; + $4 = sp + 16|0; + $5 = $0; + $6 = $1; + $7 = $5; + $8 = $6; + $2 = $7; + $3 = $8; + $9 = $2; + $10 = $3; + ;HEAP8[$$byval_copy>>0]=HEAP8[$4>>0]|0; + __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($9,$10,$$byval_copy); + STACKTOP = sp;return ($7|0); +} +function __ZN6laszip2io7laz_vlr4fillEPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 464|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(464|0); + $112 = $0; + $113 = $1; + $116 = $112; + $117 = $113; + $118 = $113; + $119 = ((($118)) + 2|0); + $109 = $117; + $110 = $119; + $111 = $116; + $120 = $109; + $108 = $120; + $121 = $108; + $122 = $110; + $102 = $122; + $123 = $102; + $124 = $111; + $103 = $124; + $125 = $103; + $104 = $121; + $105 = $123; + $106 = $125; + $126 = $105; + $127 = $104; + $128 = $126; + $129 = $127; + $130 = (($128) - ($129))|0; + $107 = $130; + $131 = $107; + $132 = ($131>>>0)>(0); + if ($132) { + $133 = $106; + $134 = $104; + $135 = $107; + _memmove(($133|0),($134|0),($135|0))|0; + } + $136 = HEAPU8[$116>>0]|(HEAPU8[$116+1>>0]<<8); + HEAP8[$116>>0]=$136&255;HEAP8[$116+1>>0]=$136>>8; + $137 = $113; + $138 = ((($137)) + 2|0); + $113 = $138; + $139 = $113; + $140 = $113; + $141 = ((($140)) + 2|0); + $142 = ((($116)) + 2|0); + $9 = $139; + $10 = $141; + $11 = $142; + $143 = $9; + $8 = $143; + $144 = $8; + $145 = $10; + $2 = $145; + $146 = $2; + $147 = $11; + $3 = $147; + $148 = $3; + $4 = $144; + $5 = $146; + $6 = $148; + $149 = $5; + $150 = $4; + $151 = $149; + $152 = $150; + $153 = (($151) - ($152))|0; + $7 = $153; + $154 = $7; + $155 = ($154>>>0)>(0); + if ($155) { + $156 = $6; + $157 = $4; + $158 = $7; + _memmove(($156|0),($157|0),($158|0))|0; + } + $159 = ((($116)) + 2|0); + $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8); + $161 = ((($116)) + 2|0); + HEAP8[$161>>0]=$160&255;HEAP8[$161+1>>0]=$160>>8; + $162 = $113; + $163 = ((($162)) + 2|0); + $113 = $163; + $164 = $113; + $165 = ((($164)) + 1|0); + $113 = $165; + $166 = HEAP8[$164>>0]|0; + $167 = ((($116)) + 4|0); + HEAP8[$167>>0] = $166; + $168 = $113; + $169 = ((($168)) + 1|0); + $113 = $169; + $170 = HEAP8[$168>>0]|0; + $171 = ((($116)) + 4|0); + $172 = ((($171)) + 1|0); + HEAP8[$172>>0] = $170; + $173 = $113; + $174 = $113; + $175 = ((($174)) + 2|0); + $176 = ((($116)) + 4|0); + $177 = ((($176)) + 2|0); + $19 = $173; + $20 = $175; + $21 = $177; + $178 = $19; + $18 = $178; + $179 = $18; + $180 = $20; + $12 = $180; + $181 = $12; + $182 = $21; + $13 = $182; + $183 = $13; + $14 = $179; + $15 = $181; + $16 = $183; + $184 = $15; + $185 = $14; + $186 = $184; + $187 = $185; + $188 = (($186) - ($187))|0; + $17 = $188; + $189 = $17; + $190 = ($189>>>0)>(0); + if ($190) { + $191 = $16; + $192 = $14; + $193 = $17; + _memmove(($191|0),($192|0),($193|0))|0; + } + $194 = ((($116)) + 4|0); + $195 = ((($194)) + 2|0); + $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8); + $197 = ((($116)) + 4|0); + $198 = ((($197)) + 2|0); + HEAP8[$198>>0]=$196&255;HEAP8[$198+1>>0]=$196>>8; + $199 = $113; + $200 = ((($199)) + 2|0); + $113 = $200; + $201 = $113; + $202 = $113; + $203 = ((($202)) + 4|0); + $204 = ((($116)) + 8|0); + $29 = $201; + $30 = $203; + $31 = $204; + $205 = $29; + $28 = $205; + $206 = $28; + $207 = $30; + $22 = $207; + $208 = $22; + $209 = $31; + $23 = $209; + $210 = $23; + $24 = $206; + $25 = $208; + $26 = $210; + $211 = $25; + $212 = $24; + $213 = $211; + $214 = $212; + $215 = (($213) - ($214))|0; + $27 = $215; + $216 = $27; + $217 = ($216>>>0)>(0); + if ($217) { + $218 = $26; + $219 = $24; + $220 = $27; + _memmove(($218|0),($219|0),($220|0))|0; + } + $221 = ((($116)) + 8|0); + $222 = HEAPU8[$221>>0]|(HEAPU8[$221+1>>0]<<8)|(HEAPU8[$221+2>>0]<<16)|(HEAPU8[$221+3>>0]<<24); + $223 = ((($116)) + 8|0); + 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; + $224 = $113; + $225 = ((($224)) + 4|0); + $113 = $225; + $226 = $113; + $227 = $113; + $228 = ((($227)) + 4|0); + $229 = ((($116)) + 12|0); + $39 = $226; + $40 = $228; + $41 = $229; + $230 = $39; + $38 = $230; + $231 = $38; + $232 = $40; + $32 = $232; + $233 = $32; + $234 = $41; + $33 = $234; + $235 = $33; + $34 = $231; + $35 = $233; + $36 = $235; + $236 = $35; + $237 = $34; + $238 = $236; + $239 = $237; + $240 = (($238) - ($239))|0; + $37 = $240; + $241 = $37; + $242 = ($241>>>0)>(0); + if ($242) { + $243 = $36; + $244 = $34; + $245 = $37; + _memmove(($243|0),($244|0),($245|0))|0; + } + $246 = ((($116)) + 12|0); + $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8)|(HEAPU8[$246+2>>0]<<16)|(HEAPU8[$246+3>>0]<<24); + $248 = ((($116)) + 12|0); + 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; + $249 = $113; + $250 = ((($249)) + 4|0); + $113 = $250; + $251 = $113; + $252 = $113; + $253 = ((($252)) + 8|0); + $254 = ((($116)) + 16|0); + $49 = $251; + $50 = $253; + $51 = $254; + $255 = $49; + $48 = $255; + $256 = $48; + $257 = $50; + $42 = $257; + $258 = $42; + $259 = $51; + $43 = $259; + $260 = $43; + $44 = $256; + $45 = $258; + $46 = $260; + $261 = $45; + $262 = $44; + $263 = $261; + $264 = $262; + $265 = (($263) - ($264))|0; + $47 = $265; + $266 = $47; + $267 = ($266>>>0)>(0); + if ($267) { + $268 = $46; + $269 = $44; + $270 = $47; + _memmove(($268|0),($269|0),($270|0))|0; + } + $271 = ((($116)) + 16|0); + $272 = $271; + $273 = $272; + $274 = HEAPU8[$273>>0]|(HEAPU8[$273+1>>0]<<8)|(HEAPU8[$273+2>>0]<<16)|(HEAPU8[$273+3>>0]<<24); + $275 = (($272) + 4)|0; + $276 = $275; + $277 = HEAPU8[$276>>0]|(HEAPU8[$276+1>>0]<<8)|(HEAPU8[$276+2>>0]<<16)|(HEAPU8[$276+3>>0]<<24); + $278 = ((($116)) + 16|0); + $279 = $278; + $280 = $279; + 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; + $281 = (($279) + 4)|0; + $282 = $281; + 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; + $283 = $113; + $284 = ((($283)) + 8|0); + $113 = $284; + $285 = $113; + $286 = $113; + $287 = ((($286)) + 8|0); + $288 = ((($116)) + 24|0); + $59 = $285; + $60 = $287; + $61 = $288; + $289 = $59; + $58 = $289; + $290 = $58; + $291 = $60; + $52 = $291; + $292 = $52; + $293 = $61; + $53 = $293; + $294 = $53; + $54 = $290; + $55 = $292; + $56 = $294; + $295 = $55; + $296 = $54; + $297 = $295; + $298 = $296; + $299 = (($297) - ($298))|0; + $57 = $299; + $300 = $57; + $301 = ($300>>>0)>(0); + if ($301) { + $302 = $56; + $303 = $54; + $304 = $57; + _memmove(($302|0),($303|0),($304|0))|0; + } + $305 = ((($116)) + 24|0); + $306 = $305; + $307 = $306; + $308 = HEAPU8[$307>>0]|(HEAPU8[$307+1>>0]<<8)|(HEAPU8[$307+2>>0]<<16)|(HEAPU8[$307+3>>0]<<24); + $309 = (($306) + 4)|0; + $310 = $309; + $311 = HEAPU8[$310>>0]|(HEAPU8[$310+1>>0]<<8)|(HEAPU8[$310+2>>0]<<16)|(HEAPU8[$310+3>>0]<<24); + $312 = ((($116)) + 24|0); + $313 = $312; + $314 = $313; + 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; + $315 = (($313) + 4)|0; + $316 = $315; + 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; + $317 = $113; + $318 = ((($317)) + 8|0); + $113 = $318; + $319 = $113; + $320 = $113; + $321 = ((($320)) + 2|0); + $322 = ((($116)) + 32|0); + $69 = $319; + $70 = $321; + $71 = $322; + $323 = $69; + $68 = $323; + $324 = $68; + $325 = $70; + $62 = $325; + $326 = $62; + $327 = $71; + $63 = $327; + $328 = $63; + $64 = $324; + $65 = $326; + $66 = $328; + $329 = $65; + $330 = $64; + $331 = $329; + $332 = $330; + $333 = (($331) - ($332))|0; + $67 = $333; + $334 = $67; + $335 = ($334>>>0)>(0); + if ($335) { + $336 = $66; + $337 = $64; + $338 = $67; + _memmove(($336|0),($337|0),($338|0))|0; + } + $339 = ((($116)) + 32|0); + $340 = HEAPU8[$339>>0]|(HEAPU8[$339+1>>0]<<8); + $341 = ((($116)) + 32|0); + HEAP8[$341>>0]=$340&255;HEAP8[$341+1>>0]=$340>>8; + $342 = $113; + $343 = ((($342)) + 2|0); + $113 = $343; + $344 = ((($116)) + 34|0); + $345 = HEAPU8[$344>>0]|(HEAPU8[$344+1>>0]<<8)|(HEAPU8[$344+2>>0]<<16)|(HEAPU8[$344+3>>0]<<24); + $346 = ($345|0)==(0|0); + if (!($346)) { + __ZdaPv($345); + } + $347 = ((($116)) + 32|0); + $348 = HEAPU8[$347>>0]|(HEAPU8[$347+1>>0]<<8); + $349 = $348&65535; + $$arith = ($349*6)|0; + $$overflow = ($349>>>0)>(715827882); + $350 = $$overflow ? -1 : $$arith; + $351 = (__Znaj($350)|0); + $352 = ((($116)) + 34|0); + 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; + $114 = 0; + while(1) { + $353 = $114; + $354 = ((($116)) + 32|0); + $355 = HEAPU8[$354>>0]|(HEAPU8[$354+1>>0]<<8); + $356 = $355&65535; + $357 = ($353|0)<($356|0); + if (!($357)) { + break; + } + $358 = ((($116)) + 34|0); + $359 = HEAPU8[$358>>0]|(HEAPU8[$358+1>>0]<<8)|(HEAPU8[$358+2>>0]<<16)|(HEAPU8[$358+3>>0]<<24); + $360 = $114; + $361 = (($359) + (($360*6)|0)|0); + $115 = $361; + $362 = $113; + $363 = $113; + $364 = ((($363)) + 2|0); + $365 = $115; + $79 = $362; + $80 = $364; + $81 = $365; + $366 = $79; + $78 = $366; + $367 = $78; + $368 = $80; + $72 = $368; + $369 = $72; + $370 = $81; + $73 = $370; + $371 = $73; + $74 = $367; + $75 = $369; + $76 = $371; + $372 = $75; + $373 = $74; + $374 = $372; + $375 = $373; + $376 = (($374) - ($375))|0; + $77 = $376; + $377 = $77; + $378 = ($377>>>0)>(0); + if ($378) { + $379 = $76; + $380 = $74; + $381 = $77; + _memmove(($379|0),($380|0),($381|0))|0; + } + $382 = $115; + $383 = HEAPU8[$382>>0]|(HEAPU8[$382+1>>0]<<8); + $384 = $115; + HEAP8[$384>>0]=$383&255;HEAP8[$384+1>>0]=$383>>8; + $385 = $113; + $386 = ((($385)) + 2|0); + $113 = $386; + $387 = $113; + $388 = $113; + $389 = ((($388)) + 2|0); + $390 = $115; + $391 = ((($390)) + 2|0); + $89 = $387; + $90 = $389; + $91 = $391; + $392 = $89; + $88 = $392; + $393 = $88; + $394 = $90; + $82 = $394; + $395 = $82; + $396 = $91; + $83 = $396; + $397 = $83; + $84 = $393; + $85 = $395; + $86 = $397; + $398 = $85; + $399 = $84; + $400 = $398; + $401 = $399; + $402 = (($400) - ($401))|0; + $87 = $402; + $403 = $87; + $404 = ($403>>>0)>(0); + if ($404) { + $405 = $86; + $406 = $84; + $407 = $87; + _memmove(($405|0),($406|0),($407|0))|0; + } + $408 = $115; + $409 = ((($408)) + 2|0); + $410 = HEAPU8[$409>>0]|(HEAPU8[$409+1>>0]<<8); + $411 = $115; + $412 = ((($411)) + 2|0); + HEAP8[$412>>0]=$410&255;HEAP8[$412+1>>0]=$410>>8; + $413 = $113; + $414 = ((($413)) + 2|0); + $113 = $414; + $415 = $113; + $416 = $113; + $417 = ((($416)) + 2|0); + $418 = $115; + $419 = ((($418)) + 4|0); + $99 = $415; + $100 = $417; + $101 = $419; + $420 = $99; + $98 = $420; + $421 = $98; + $422 = $100; + $92 = $422; + $423 = $92; + $424 = $101; + $93 = $424; + $425 = $93; + $94 = $421; + $95 = $423; + $96 = $425; + $426 = $95; + $427 = $94; + $428 = $426; + $429 = $427; + $430 = (($428) - ($429))|0; + $97 = $430; + $431 = $97; + $432 = ($431>>>0)>(0); + if ($432) { + $433 = $96; + $434 = $94; + $435 = $97; + _memmove(($433|0),($434|0),($435|0))|0; + } + $436 = $115; + $437 = ((($436)) + 4|0); + $438 = HEAPU8[$437>>0]|(HEAPU8[$437+1>>0]<<8); + $439 = $115; + $440 = ((($439)) + 4|0); + HEAP8[$440>>0]=$438&255;HEAP8[$440+1>>0]=$438>>8; + $441 = $113; + $442 = ((($441)) + 2|0); + $113 = $442; + $443 = $114; + $444 = (($443) + 1)|0; + $114 = $444; + } + STACKTOP = sp;return; +} +function __ZN6laszip25laszip_format_unsupportedC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,4918); + HEAP32[$2>>2] = (1788); + STACKTOP = sp;return; +} +function __ZN6laszip25laszip_format_unsupportedD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip25laszip_format_unsupportedD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip25laszip_format_unsupportedD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip13no_laszip_vlrD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13no_laszip_vlrD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + var $65 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $14 = sp; + $19 = sp + 113|0; + $29 = sp + 112|0; + $30 = $0; + $31 = $1; + $32 = $30; + $33 = $31; + $27 = $32; + $28 = $33; + $34 = $27; + $35 = ((($34)) + 4|0); + $36 = HEAP32[$35>>2]|0; + $26 = $34; + $37 = $26; + $38 = ((($37)) + 8|0); + $25 = $38; + $39 = $25; + $24 = $39; + $40 = $24; + $41 = HEAP32[$40>>2]|0; + $42 = ($36|0)!=($41|0); + if ($42) { + $21 = $29; + $22 = $34; + $23 = 1; + $4 = $34; + $43 = $4; + $44 = ((($43)) + 8|0); + $3 = $44; + $45 = $3; + $2 = $45; + $46 = $2; + $47 = ((($34)) + 4|0); + $48 = HEAP32[$47>>2]|0; + $5 = $48; + $49 = $5; + $50 = $28; + $16 = $46; + $17 = $49; + $18 = $50; + $51 = $16; + $52 = $17; + $53 = $18; + $15 = $53; + $54 = $15; + ;HEAP8[$14>>0]=HEAP8[$19>>0]|0; + $11 = $51; + $12 = $52; + $13 = $54; + $55 = $11; + $56 = $12; + $57 = $13; + $10 = $57; + $58 = $10; + $7 = $55; + $8 = $56; + $9 = $58; + $59 = $8; + $60 = $9; + $6 = $60; + $61 = $6; + ;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; + $20 = $29; + $62 = ((($34)) + 4|0); + $63 = HEAP32[$62>>2]|0; + $64 = ((($63)) + 12|0); + HEAP32[$62>>2] = $64; + STACKTOP = sp;return; + } else { + $65 = $28; + __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($34,$65); + STACKTOP = sp;return; + } +} +function __ZN6laszip7factory11record_itemC2Eiii($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = $0; + $5 = $1; + $6 = $2; + $7 = $3; + $8 = $4; + $9 = $5; + HEAP32[$8>>2] = $9; + $10 = ((($8)) + 4|0); + $11 = $6; + HEAP32[$10>>2] = $11; + $12 = ((($8)) + 8|0); + $13 = $7; + HEAP32[$12>>2] = $13; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); + $10 = sp + 8|0; + $15 = sp + 193|0; + $24 = sp; + $27 = sp + 192|0; + $35 = sp + 72|0; + $38 = sp + 60|0; + $46 = sp + 12|0; + $43 = $0; + $44 = $1; + $47 = $43; + $42 = $47; + $48 = $42; + $49 = ((($48)) + 8|0); + $41 = $49; + $50 = $41; + $40 = $50; + $51 = $40; + $45 = $51; + $39 = $47; + $52 = $39; + $53 = ((($52)) + 4|0); + $54 = HEAP32[$53>>2]|0; + $55 = HEAP32[$52>>2]|0; + $56 = $54; + $57 = $55; + $58 = (($56) - ($57))|0; + $59 = (($58|0) / 12)&-1; + $60 = (($59) + 1)|0; + $34 = $47; + HEAP32[$35>>2] = $60; + $61 = $34; + $62 = (__ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($61)|0); + $36 = $62; + $63 = HEAP32[$35>>2]|0; + $64 = $36; + $65 = ($63>>>0)>($64>>>0); + if ($65) { + __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61); + // unreachable; + } + $32 = $61; + $66 = $32; + $31 = $66; + $67 = $31; + $30 = $67; + $68 = $30; + $69 = ((($68)) + 8|0); + $29 = $69; + $70 = $29; + $28 = $70; + $71 = $28; + $72 = HEAP32[$71>>2]|0; + $73 = HEAP32[$67>>2]|0; + $74 = $72; + $75 = $73; + $76 = (($74) - ($75))|0; + $77 = (($76|0) / 12)&-1; + $37 = $77; + $78 = $37; + $79 = $36; + $80 = (($79>>>0) / 2)&-1; + $81 = ($78>>>0)>=($80>>>0); + if ($81) { + $82 = $36; + $33 = $82; + } else { + $83 = $37; + $84 = $83<<1; + HEAP32[$38>>2] = $84; + $25 = $38; + $26 = $35; + $85 = $25; + $86 = $26; + ;HEAP8[$24>>0]=HEAP8[$27>>0]|0; + $22 = $85; + $23 = $86; + $87 = $22; + $88 = $23; + $19 = $24; + $20 = $87; + $21 = $88; + $89 = $20; + $90 = HEAP32[$89>>2]|0; + $91 = $21; + $92 = HEAP32[$91>>2]|0; + $93 = ($90>>>0)<($92>>>0); + $94 = $23; + $95 = $22; + $96 = $93 ? $94 : $95; + $97 = HEAP32[$96>>2]|0; + $33 = $97; + } + $98 = $33; + $18 = $47; + $99 = $18; + $100 = ((($99)) + 4|0); + $101 = HEAP32[$100>>2]|0; + $102 = HEAP32[$99>>2]|0; + $103 = $101; + $104 = $102; + $105 = (($103) - ($104))|0; + $106 = (($105|0) / 12)&-1; + $107 = $45; + __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107); + $108 = $45; + $109 = ((($46)) + 8|0); + $110 = HEAP32[$109>>2]|0; + $17 = $110; + $111 = $17; + $112 = $44; + $16 = $112; + $113 = $16; + $12 = $108; + $13 = $111; + $14 = $113; + $114 = $12; + $115 = $13; + $116 = $14; + $11 = $116; + $117 = $11; + ;HEAP8[$10>>0]=HEAP8[$15>>0]|0; + $7 = $114; + $8 = $115; + $9 = $117; + $118 = $7; + $119 = $8; + $120 = $9; + $6 = $120; + $121 = $6; + $3 = $118; + $4 = $119; + $5 = $121; + $122 = $4; + $123 = $5; + $2 = $123; + $124 = $2; + ;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; + $125 = ((($46)) + 8|0); + $126 = HEAP32[$125>>2]|0; + $127 = ((($126)) + 12|0); + HEAP32[$125>>2] = $127; + __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46); + __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($46); + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $35 = sp; + $31 = $0; + $32 = $1; + $33 = $2; + $34 = $3; + $36 = $31; + $37 = ((($36)) + 12|0); + HEAP32[$35>>2] = 0; + $38 = $34; + $28 = $37; + $29 = $35; + $30 = $38; + $39 = $28; + $40 = $29; + $27 = $40; + $41 = $27; + $21 = $39; + $22 = $41; + $42 = $21; + $43 = $22; + $20 = $43; + HEAP32[$42>>2] = 0; + $44 = ((($39)) + 4|0); + $45 = $30; + $23 = $45; + $46 = $23; + $25 = $44; + $26 = $46; + $47 = $25; + $48 = $26; + $24 = $48; + $49 = $24; + HEAP32[$47>>2] = $49; + $50 = $32; + $51 = ($50|0)!=(0); + do { + if ($51) { + $6 = $36; + $52 = $6; + $53 = ((($52)) + 12|0); + $5 = $53; + $54 = $5; + $55 = ((($54)) + 4|0); + $4 = $55; + $56 = $4; + $57 = HEAP32[$56>>2]|0; + $58 = $32; + $15 = $57; + $16 = $58; + $59 = $15; + $60 = $16; + $12 = $59; + $13 = $60; + $14 = 0; + $61 = $12; + $62 = $13; + $11 = $61; + $63 = ($62>>>0)>(357913941); + if ($63) { + $9 = 4287; + $64 = (___cxa_allocate_exception(8)|0); + $65 = $9; + $7 = $64; + $8 = $65; + $66 = $7; + $67 = $8; + __ZNSt11logic_errorC2EPKc($66,$67); + HEAP32[$66>>2] = (3660); + ___cxa_throw(($64|0),(1384|0),(220|0)); + // unreachable; + } else { + $68 = $13; + $69 = ($68*12)|0; + $10 = $69; + $70 = $10; + $71 = (__Znwj($70)|0); + $72 = $71; + break; + } + } else { + $72 = 0; + } + } while(0); + HEAP32[$36>>2] = $72; + $73 = HEAP32[$36>>2]|0; + $74 = $33; + $75 = (($73) + (($74*12)|0)|0); + $76 = ((($36)) + 8|0); + HEAP32[$76>>2] = $75; + $77 = ((($36)) + 4|0); + HEAP32[$77>>2] = $75; + $78 = HEAP32[$36>>2]|0; + $79 = $32; + $80 = (($78) + (($79*12)|0)|0); + $19 = $36; + $81 = $19; + $82 = ((($81)) + 12|0); + $18 = $82; + $83 = $18; + $17 = $83; + $84 = $17; + HEAP32[$84>>2] = $80; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0); + $15 = sp + 288|0; + $21 = sp + 264|0; + $33 = sp + 216|0; + $86 = $0; + $87 = $1; + $88 = $86; + $85 = $88; + $89 = $85; + $84 = $89; + $90 = $84; + $91 = HEAP32[$90>>2]|0; + $83 = $91; + $92 = $83; + $62 = $89; + $93 = $62; + $94 = HEAP32[$93>>2]|0; + $61 = $94; + $95 = $61; + $67 = $89; + $96 = $67; + $66 = $96; + $97 = $66; + $65 = $97; + $98 = $65; + $99 = ((($98)) + 8|0); + $64 = $99; + $100 = $64; + $63 = $100; + $101 = $63; + $102 = HEAP32[$101>>2]|0; + $103 = HEAP32[$97>>2]|0; + $104 = $102; + $105 = $103; + $106 = (($104) - ($105))|0; + $107 = (($106|0) / 12)&-1; + $108 = (($95) + (($107*12)|0)|0); + $69 = $89; + $109 = $69; + $110 = HEAP32[$109>>2]|0; + $68 = $110; + $111 = $68; + $70 = $89; + $112 = $70; + $113 = ((($112)) + 4|0); + $114 = HEAP32[$113>>2]|0; + $115 = HEAP32[$112>>2]|0; + $116 = $114; + $117 = $115; + $118 = (($116) - ($117))|0; + $119 = (($118|0) / 12)&-1; + $120 = (($111) + (($119*12)|0)|0); + $72 = $89; + $121 = $72; + $122 = HEAP32[$121>>2]|0; + $71 = $122; + $123 = $71; + $77 = $89; + $124 = $77; + $76 = $124; + $125 = $76; + $75 = $125; + $126 = $75; + $127 = ((($126)) + 8|0); + $74 = $127; + $128 = $74; + $73 = $128; + $129 = $73; + $130 = HEAP32[$129>>2]|0; + $131 = HEAP32[$125>>2]|0; + $132 = $130; + $133 = $131; + $134 = (($132) - ($133))|0; + $135 = (($134|0) / 12)&-1; + $136 = (($123) + (($135*12)|0)|0); + $78 = $89; + $79 = $92; + $80 = $108; + $81 = $120; + $82 = $136; + $4 = $88; + $137 = $4; + $138 = ((($137)) + 8|0); + $3 = $138; + $139 = $3; + $2 = $139; + $140 = $2; + $141 = HEAP32[$88>>2]|0; + $142 = ((($88)) + 4|0); + $143 = HEAP32[$142>>2]|0; + $144 = $87; + $145 = ((($144)) + 4|0); + $5 = $140; + $6 = $141; + $7 = $143; + $8 = $145; + $146 = $7; + $147 = $6; + $148 = $146; + $149 = $147; + $150 = (($148) - ($149))|0; + $151 = (($150|0) / 12)&-1; + $9 = $151; + $152 = $9; + $153 = $8; + $154 = HEAP32[$153>>2]|0; + $155 = (0 - ($152))|0; + $156 = (($154) + (($155*12)|0)|0); + HEAP32[$153>>2] = $156; + $157 = $9; + $158 = ($157|0)>(0); + if ($158) { + $159 = $8; + $160 = HEAP32[$159>>2]|0; + $161 = $6; + $162 = $9; + $163 = ($162*12)|0; + _memcpy(($160|0),($161|0),($163|0))|0; + } + $164 = $87; + $165 = ((($164)) + 4|0); + $13 = $88; + $14 = $165; + $166 = $13; + $12 = $166; + $167 = $12; + $168 = HEAP32[$167>>2]|0; + HEAP32[$15>>2] = $168; + $169 = $14; + $10 = $169; + $170 = $10; + $171 = HEAP32[$170>>2]|0; + $172 = $13; + HEAP32[$172>>2] = $171; + $11 = $15; + $173 = $11; + $174 = HEAP32[$173>>2]|0; + $175 = $14; + HEAP32[$175>>2] = $174; + $176 = ((($88)) + 4|0); + $177 = $87; + $178 = ((($177)) + 8|0); + $19 = $176; + $20 = $178; + $179 = $19; + $18 = $179; + $180 = $18; + $181 = HEAP32[$180>>2]|0; + HEAP32[$21>>2] = $181; + $182 = $20; + $16 = $182; + $183 = $16; + $184 = HEAP32[$183>>2]|0; + $185 = $19; + HEAP32[$185>>2] = $184; + $17 = $21; + $186 = $17; + $187 = HEAP32[$186>>2]|0; + $188 = $20; + HEAP32[$188>>2] = $187; + $24 = $88; + $189 = $24; + $190 = ((($189)) + 8|0); + $23 = $190; + $191 = $23; + $22 = $191; + $192 = $22; + $193 = $87; + $27 = $193; + $194 = $27; + $195 = ((($194)) + 12|0); + $26 = $195; + $196 = $26; + $25 = $196; + $197 = $25; + $31 = $192; + $32 = $197; + $198 = $31; + $30 = $198; + $199 = $30; + $200 = HEAP32[$199>>2]|0; + HEAP32[$33>>2] = $200; + $201 = $32; + $28 = $201; + $202 = $28; + $203 = HEAP32[$202>>2]|0; + $204 = $31; + HEAP32[$204>>2] = $203; + $29 = $33; + $205 = $29; + $206 = HEAP32[$205>>2]|0; + $207 = $32; + HEAP32[$207>>2] = $206; + $208 = $87; + $209 = ((($208)) + 4|0); + $210 = HEAP32[$209>>2]|0; + $211 = $87; + HEAP32[$211>>2] = $210; + $34 = $88; + $212 = $34; + $213 = ((($212)) + 4|0); + $214 = HEAP32[$213>>2]|0; + $215 = HEAP32[$212>>2]|0; + $216 = $214; + $217 = $215; + $218 = (($216) - ($217))|0; + $219 = (($218|0) / 12)&-1; + $58 = $88; + $59 = $219; + $220 = $58; + $57 = $220; + $221 = $57; + $222 = HEAP32[$221>>2]|0; + $56 = $222; + $223 = $56; + $36 = $220; + $224 = $36; + $225 = HEAP32[$224>>2]|0; + $35 = $225; + $226 = $35; + $41 = $220; + $227 = $41; + $40 = $227; + $228 = $40; + $39 = $228; + $229 = $39; + $230 = ((($229)) + 8|0); + $38 = $230; + $231 = $38; + $37 = $231; + $232 = $37; + $233 = HEAP32[$232>>2]|0; + $234 = HEAP32[$228>>2]|0; + $235 = $233; + $236 = $234; + $237 = (($235) - ($236))|0; + $238 = (($237|0) / 12)&-1; + $239 = (($226) + (($238*12)|0)|0); + $43 = $220; + $240 = $43; + $241 = HEAP32[$240>>2]|0; + $42 = $241; + $242 = $42; + $48 = $220; + $243 = $48; + $47 = $243; + $244 = $47; + $46 = $244; + $245 = $46; + $246 = ((($245)) + 8|0); + $45 = $246; + $247 = $45; + $44 = $247; + $248 = $44; + $249 = HEAP32[$248>>2]|0; + $250 = HEAP32[$244>>2]|0; + $251 = $249; + $252 = $250; + $253 = (($251) - ($252))|0; + $254 = (($253|0) / 12)&-1; + $255 = (($242) + (($254*12)|0)|0); + $50 = $220; + $256 = $50; + $257 = HEAP32[$256>>2]|0; + $49 = $257; + $258 = $49; + $259 = $59; + $260 = (($258) + (($259*12)|0)|0); + $51 = $220; + $52 = $223; + $53 = $239; + $54 = $255; + $55 = $260; + $60 = $88; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $19 = sp + 8|0; + $22 = sp + 133|0; + $29 = sp; + $32 = sp + 132|0; + $34 = $0; + $35 = $34; + $33 = $35; + $36 = $33; + $37 = ((($36)) + 4|0); + $38 = HEAP32[$37>>2]|0; + $30 = $36; + $31 = $38; + $39 = $30; + $40 = $31; + ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; + $27 = $39; + $28 = $40; + $41 = $27; + while(1) { + $42 = $28; + $43 = ((($41)) + 8|0); + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)!=($44|0); + if (!($45)) { + break; + } + $26 = $41; + $46 = $26; + $47 = ((($46)) + 12|0); + $25 = $47; + $48 = $25; + $49 = ((($48)) + 4|0); + $24 = $49; + $50 = $24; + $51 = HEAP32[$50>>2]|0; + $52 = ((($41)) + 8|0); + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + -12|0); + HEAP32[$52>>2] = $54; + $23 = $54; + $55 = $23; + $20 = $51; + $21 = $55; + $56 = $20; + $57 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $56; + $18 = $57; + $58 = $17; + $59 = $18; + $15 = $58; + $16 = $59; + } + $60 = HEAP32[$35>>2]|0; + $61 = ($60|0)!=(0|0); + if (!($61)) { + STACKTOP = sp;return; + } + $14 = $35; + $62 = $14; + $63 = ((($62)) + 12|0); + $13 = $63; + $64 = $13; + $65 = ((($64)) + 4|0); + $12 = $65; + $66 = $12; + $67 = HEAP32[$66>>2]|0; + $68 = HEAP32[$35>>2]|0; + $4 = $35; + $69 = $4; + $3 = $69; + $70 = $3; + $71 = ((($70)) + 12|0); + $2 = $71; + $72 = $2; + $1 = $72; + $73 = $1; + $74 = HEAP32[$73>>2]|0; + $75 = HEAP32[$69>>2]|0; + $76 = $74; + $77 = $75; + $78 = (($76) - ($77))|0; + $79 = (($78|0) / 12)&-1; + $9 = $67; + $10 = $68; + $11 = $79; + $80 = $9; + $81 = $10; + $82 = $11; + $6 = $80; + $7 = $81; + $8 = $82; + $83 = $7; + $5 = $83; + $84 = $5; + __ZdlPv($84); + STACKTOP = sp;return; +} +function __ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($0) { + $0 = $0|0; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $6 = sp + 8|0; + $9 = sp + 77|0; + $12 = sp; + $14 = sp + 76|0; + $19 = sp + 16|0; + $20 = sp + 12|0; + $18 = $0; + $21 = $18; + $17 = $21; + $22 = $17; + $23 = ((($22)) + 8|0); + $16 = $23; + $24 = $16; + $15 = $24; + $25 = $15; + $13 = $25; + $26 = $13; + ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; + $11 = $26; + $27 = $11; + $10 = $27; + HEAP32[$19>>2] = 357913941; + HEAP32[$20>>2] = 2147483647; + $7 = $19; + $8 = $20; + $28 = $7; + $29 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $28; + $5 = $29; + $30 = $5; + $31 = $4; + $1 = $6; + $2 = $30; + $3 = $31; + $32 = $2; + $33 = HEAP32[$32>>2]|0; + $34 = $3; + $35 = HEAP32[$34>>2]|0; + $36 = ($33>>>0)<($35>>>0); + $37 = $5; + $38 = $4; + $39 = $36 ? $37 : $38; + $40 = HEAP32[$39>>2]|0; + STACKTOP = sp;return ($40|0); +} +function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0); + $21 = sp; + $24 = sp + 92|0; + $25 = $0; + $26 = $1; + $27 = $25; + __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($27); + $28 = $26; + $22 = $27; + $23 = $28; + $29 = $22; + $30 = $23; + ;HEAP8[$21>>0]=HEAP8[$24>>0]|0; + $19 = $29; + $20 = $30; + $31 = $19; + $32 = $20; + $18 = $32; + $33 = $18; + $34 = ((($33)) + 8|0); + $17 = $34; + $35 = $17; + $16 = $35; + $36 = $16; + $12 = $36; + $15 = $31; + $37 = $15; + $38 = ((($37)) + 8|0); + $14 = $38; + $39 = $14; + $13 = $39; + $40 = $26; + $41 = HEAP32[$40>>2]|0; + HEAP32[$27>>2] = $41; + $42 = $26; + $43 = ((($42)) + 4|0); + $44 = HEAP32[$43>>2]|0; + $45 = ((($27)) + 4|0); + HEAP32[$45>>2] = $44; + $46 = $26; + $5 = $46; + $47 = $5; + $48 = ((($47)) + 8|0); + $4 = $48; + $49 = $4; + $3 = $49; + $50 = $3; + $51 = HEAP32[$50>>2]|0; + $8 = $27; + $52 = $8; + $53 = ((($52)) + 8|0); + $7 = $53; + $54 = $7; + $6 = $54; + $55 = $6; + HEAP32[$55>>2] = $51; + $56 = $26; + $11 = $56; + $57 = $11; + $58 = ((($57)) + 8|0); + $10 = $58; + $59 = $10; + $9 = $59; + $60 = $9; + HEAP32[$60>>2] = 0; + $61 = $26; + $62 = ((($61)) + 4|0); + HEAP32[$62>>2] = 0; + $63 = $26; + HEAP32[$63>>2] = 0; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0); + $45 = sp; + $48 = sp + 236|0; + $60 = $0; + $61 = $60; + $62 = HEAP32[$61>>2]|0; + $63 = ($62|0)!=(0|0); + if (!($63)) { + STACKTOP = sp;return; + } + $58 = $61; + $64 = $58; + $57 = $64; + $65 = $57; + $66 = ((($65)) + 4|0); + $67 = HEAP32[$66>>2]|0; + $68 = HEAP32[$65>>2]|0; + $69 = $67; + $70 = $68; + $71 = (($69) - ($70))|0; + $72 = (($71|0) / 12)&-1; + $59 = $72; + $56 = $64; + $73 = $56; + $74 = HEAP32[$73>>2]|0; + $53 = $73; + $54 = $74; + $75 = $53; + $76 = ((($75)) + 4|0); + $77 = HEAP32[$76>>2]|0; + $55 = $77; + while(1) { + $78 = $54; + $79 = $55; + $80 = ($78|0)!=($79|0); + if (!($80)) { + break; + } + $52 = $75; + $81 = $52; + $82 = ((($81)) + 8|0); + $51 = $82; + $83 = $51; + $50 = $83; + $84 = $50; + $85 = $55; + $86 = ((($85)) + -12|0); + $55 = $86; + $49 = $86; + $87 = $49; + $46 = $84; + $47 = $87; + $88 = $46; + $89 = $47; + ;HEAP8[$45>>0]=HEAP8[$48>>0]|0; + $43 = $88; + $44 = $89; + $90 = $43; + $91 = $44; + $41 = $90; + $42 = $91; + } + $92 = $54; + $93 = ((($75)) + 4|0); + HEAP32[$93>>2] = $92; + $94 = $59; + $38 = $64; + $39 = $94; + $95 = $38; + $37 = $95; + $96 = $37; + $97 = HEAP32[$96>>2]|0; + $36 = $97; + $98 = $36; + $20 = $95; + $99 = $20; + $100 = HEAP32[$99>>2]|0; + $19 = $100; + $101 = $19; + $25 = $95; + $102 = $25; + $24 = $102; + $103 = $24; + $23 = $103; + $104 = $23; + $105 = ((($104)) + 8|0); + $22 = $105; + $106 = $22; + $21 = $106; + $107 = $21; + $108 = HEAP32[$107>>2]|0; + $109 = HEAP32[$103>>2]|0; + $110 = $108; + $111 = $109; + $112 = (($110) - ($111))|0; + $113 = (($112|0) / 12)&-1; + $114 = (($101) + (($113*12)|0)|0); + $27 = $95; + $115 = $27; + $116 = HEAP32[$115>>2]|0; + $26 = $116; + $117 = $26; + $118 = $39; + $119 = (($117) + (($118*12)|0)|0); + $29 = $95; + $120 = $29; + $121 = HEAP32[$120>>2]|0; + $28 = $121; + $122 = $28; + $30 = $95; + $123 = $30; + $124 = ((($123)) + 4|0); + $125 = HEAP32[$124>>2]|0; + $126 = HEAP32[$123>>2]|0; + $127 = $125; + $128 = $126; + $129 = (($127) - ($128))|0; + $130 = (($129|0) / 12)&-1; + $131 = (($122) + (($130*12)|0)|0); + $31 = $95; + $32 = $98; + $33 = $114; + $34 = $119; + $35 = $131; + $40 = $64; + $8 = $61; + $132 = $8; + $133 = ((($132)) + 8|0); + $7 = $133; + $134 = $7; + $6 = $134; + $135 = $6; + $136 = HEAP32[$61>>2]|0; + $5 = $61; + $137 = $5; + $4 = $137; + $138 = $4; + $3 = $138; + $139 = $3; + $140 = ((($139)) + 8|0); + $2 = $140; + $141 = $2; + $1 = $141; + $142 = $1; + $143 = HEAP32[$142>>2]|0; + $144 = HEAP32[$138>>2]|0; + $145 = $143; + $146 = $144; + $147 = (($145) - ($146))|0; + $148 = (($147|0) / 12)&-1; + $13 = $135; + $14 = $136; + $15 = $148; + $149 = $13; + $150 = $14; + $151 = $15; + $10 = $149; + $11 = $150; + $12 = $151; + $152 = $11; + $9 = $152; + $153 = $9; + __ZdlPv($153); + $18 = $61; + $154 = $18; + $155 = ((($154)) + 8|0); + $17 = $155; + $156 = $17; + $16 = $156; + $157 = $16; + HEAP32[$157>>2] = 0; + $158 = ((($61)) + 4|0); + HEAP32[$158>>2] = 0; + HEAP32[$61>>2] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip22chunk_table_read_errorC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,5254); + HEAP32[$2>>2] = (1828); + STACKTOP = sp;return; +} +function __ZN6laszip22chunk_table_read_errorD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip13not_supportedC2EPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + __ZNSt13runtime_errorC2EPKc($4,$5); + HEAP32[$4>>2] = (1848); + STACKTOP = sp;return; +} +function __ZN6laszip13not_supportedD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip26unknown_chunk_table_formatC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,5298); + HEAP32[$2>>2] = (1868); + STACKTOP = sp;return; +} +function __ZN6laszip26unknown_chunk_table_formatD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); + $6 = sp; + $9 = sp + 180|0; + $45 = $0; + $46 = $1; + $48 = $45; + $44 = $48; + $49 = $44; + $50 = ((($49)) + 4|0); + $51 = HEAP32[$50>>2]|0; + $52 = HEAP32[$49>>2]|0; + $53 = $51; + $54 = $52; + $55 = (($53) - ($54))|0; + $56 = (($55|0) / 8)&-1; + $47 = $56; + $57 = $47; + $58 = $46; + $59 = ($57>>>0)<($58>>>0); + if ($59) { + $60 = $46; + $61 = $47; + $62 = (($60) - ($61))|0; + __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($48,$62); + STACKTOP = sp;return; + } + $63 = $47; + $64 = $46; + $65 = ($63>>>0)>($64>>>0); + if (!($65)) { + STACKTOP = sp;return; + } + $66 = HEAP32[$48>>2]|0; + $67 = $46; + $68 = (($66) + ($67<<3)|0); + $41 = $48; + $42 = $68; + $69 = $41; + $70 = $42; + $39 = $69; + $40 = $70; + $38 = $69; + $71 = $38; + $72 = ((($71)) + 4|0); + $73 = HEAP32[$72>>2]|0; + $74 = HEAP32[$71>>2]|0; + $75 = $73; + $76 = $74; + $77 = (($75) - ($76))|0; + $78 = (($77|0) / 8)&-1; + $43 = $78; + $79 = $42; + $14 = $69; + $15 = $79; + $80 = $14; + $81 = ((($80)) + 4|0); + $82 = HEAP32[$81>>2]|0; + $16 = $82; + while(1) { + $83 = $15; + $84 = $16; + $85 = ($83|0)!=($84|0); + if (!($85)) { + break; + } + $13 = $80; + $86 = $13; + $87 = ((($86)) + 8|0); + $12 = $87; + $88 = $12; + $11 = $88; + $89 = $11; + $90 = $16; + $91 = ((($90)) + -8|0); + $16 = $91; + $10 = $91; + $92 = $10; + $7 = $89; + $8 = $92; + $93 = $7; + $94 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $93; + $5 = $94; + $95 = $4; + $96 = $5; + $2 = $95; + $3 = $96; + } + $97 = $15; + $98 = ((($80)) + 4|0); + HEAP32[$98>>2] = $97; + $99 = $43; + $36 = $69; + $37 = $99; + $100 = $36; + $35 = $100; + $101 = $35; + $102 = HEAP32[$101>>2]|0; + $34 = $102; + $103 = $34; + $18 = $100; + $104 = $18; + $105 = HEAP32[$104>>2]|0; + $17 = $105; + $106 = $17; + $23 = $100; + $107 = $23; + $22 = $107; + $108 = $22; + $21 = $108; + $109 = $21; + $110 = ((($109)) + 8|0); + $20 = $110; + $111 = $20; + $19 = $111; + $112 = $19; + $113 = HEAP32[$112>>2]|0; + $114 = HEAP32[$108>>2]|0; + $115 = $113; + $116 = $114; + $117 = (($115) - ($116))|0; + $118 = (($117|0) / 8)&-1; + $119 = (($106) + ($118<<3)|0); + $25 = $100; + $120 = $25; + $121 = HEAP32[$120>>2]|0; + $24 = $121; + $122 = $24; + $123 = $37; + $124 = (($122) + ($123<<3)|0); + $27 = $100; + $125 = $27; + $126 = HEAP32[$125>>2]|0; + $26 = $126; + $127 = $26; + $28 = $100; + $128 = $28; + $129 = ((($128)) + 4|0); + $130 = HEAP32[$129>>2]|0; + $131 = HEAP32[$128>>2]|0; + $132 = $130; + $133 = $131; + $134 = (($132) - ($133))|0; + $135 = (($134|0) / 8)&-1; + $136 = (($127) + ($135<<3)|0); + $29 = $100; + $30 = $103; + $31 = $119; + $32 = $124; + $33 = $136; + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + HEAP32[$4>>2] = $5; + $6 = ((($4)) + 4|0); + HEAP32[$6>>2] = 0; + $7 = ((($4)) + 8|0); + HEAP32[$7>>2] = -1; + STACKTOP = sp;return; +} +function __ZN6laszip13decompressors7integerC2Ejjjj($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $or$cond = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $15 = sp + 72|0; + $27 = sp + 24|0; + $29 = $0; + $30 = $1; + $31 = $2; + $32 = $3; + $33 = $4; + $34 = $29; + $35 = ((($34)) + 4|0); + $36 = $30; + HEAP32[$35>>2] = $36; + $37 = ((($34)) + 8|0); + $38 = $31; + HEAP32[$37>>2] = $38; + $39 = ((($34)) + 12|0); + $40 = $32; + HEAP32[$39>>2] = $40; + $41 = ((($34)) + 16|0); + $42 = $33; + HEAP32[$41>>2] = $42; + $43 = ((($34)) + 36|0); + $28 = $43; + $44 = $28; + $26 = $44; + $45 = $26; + $25 = $45; + HEAP32[$45>>2] = 0; + $46 = ((($45)) + 4|0); + HEAP32[$46>>2] = 0; + $47 = ((($45)) + 8|0); + HEAP32[$27>>2] = 0; + $23 = $47; + $24 = $27; + $48 = $23; + $49 = $24; + $22 = $49; + $50 = $22; + $18 = $48; + $19 = $50; + $51 = $18; + $52 = $19; + $17 = $52; + HEAP32[$51>>2] = 0; + $21 = $48; + $53 = $21; + $20 = $53; + $54 = ((($34)) + 48|0); + __ZN6laszip6models14arithmetic_bitC2Ev($54); + $55 = ((($34)) + 68|0); + $16 = $55; + $56 = $16; + $14 = $56; + $57 = $14; + $13 = $57; + HEAP32[$57>>2] = 0; + $58 = ((($57)) + 4|0); + HEAP32[$58>>2] = 0; + $59 = ((($57)) + 8|0); + HEAP32[$15>>2] = 0; + $11 = $59; + $12 = $15; + $60 = $11; + $61 = $12; + $10 = $61; + $62 = $10; + $6 = $60; + $7 = $62; + $63 = $6; + $64 = $7; + $5 = $64; + HEAP32[$63>>2] = 0; + $9 = $60; + $65 = $9; + $8 = $65; + $66 = $33; + $67 = ($66|0)!=(0); + if (!($67)) { + $100 = $30; + $101 = ($100|0)!=(0); + $102 = $30; + $103 = ($102>>>0)<(32); + $or$cond = $101 & $103; + if ($or$cond) { + $104 = $30; + $105 = ((($34)) + 20|0); + HEAP32[$105>>2] = $104; + $106 = $30; + $107 = 1 << $106; + $108 = ((($34)) + 24|0); + HEAP32[$108>>2] = $107; + $109 = ((($34)) + 24|0); + $110 = HEAP32[$109>>2]|0; + $111 = (($110>>>0) / 2)&-1; + $112 = (0 - ($111))|0; + $113 = ((($34)) + 28|0); + HEAP32[$113>>2] = $112; + $114 = ((($34)) + 28|0); + $115 = HEAP32[$114>>2]|0; + $116 = ((($34)) + 24|0); + $117 = HEAP32[$116>>2]|0; + $118 = (($115) + ($117))|0; + $119 = (($118) - 1)|0; + $120 = ((($34)) + 32|0); + HEAP32[$120>>2] = $119; + HEAP32[$34>>2] = 0; + STACKTOP = sp;return; + } else { + $121 = ((($34)) + 20|0); + HEAP32[$121>>2] = 32; + $122 = ((($34)) + 24|0); + HEAP32[$122>>2] = 0; + $123 = ((($34)) + 28|0); + HEAP32[$123>>2] = -2147483648; + $124 = ((($34)) + 32|0); + HEAP32[$124>>2] = 2147483647; + HEAP32[$34>>2] = 0; + STACKTOP = sp;return; + } + } + $68 = ((($34)) + 20|0); + HEAP32[$68>>2] = 0; + $69 = $33; + $70 = ((($34)) + 24|0); + HEAP32[$70>>2] = $69; + while(1) { + $71 = $33; + $72 = ($71|0)!=(0); + if (!($72)) { + break; + } + $73 = $33; + $74 = $73 >>> 1; + $33 = $74; + $75 = ((($34)) + 20|0); + $76 = HEAP32[$75>>2]|0; + $77 = (($76) + 1)|0; + HEAP32[$75>>2] = $77; + } + $78 = ((($34)) + 24|0); + $79 = HEAP32[$78>>2]|0; + $80 = ((($34)) + 20|0); + $81 = HEAP32[$80>>2]|0; + $82 = (($81) - 1)|0; + $83 = 1 << $82; + $84 = ($79|0)==($83|0); + if ($84) { + $85 = ((($34)) + 20|0); + $86 = HEAP32[$85>>2]|0; + $87 = (($86) + -1)|0; + HEAP32[$85>>2] = $87; + } + $88 = ((($34)) + 24|0); + $89 = HEAP32[$88>>2]|0; + $90 = (($89>>>0) / 2)&-1; + $91 = (0 - ($90))|0; + $92 = ((($34)) + 28|0); + HEAP32[$92>>2] = $91; + $93 = ((($34)) + 28|0); + $94 = HEAP32[$93>>2]|0; + $95 = ((($34)) + 24|0); + $96 = HEAP32[$95>>2]|0; + $97 = (($94) + ($96))|0; + $98 = (($97) - 1)|0; + $99 = ((($34)) + 32|0); + HEAP32[$99>>2] = $98; + HEAP32[$34>>2] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($0) { + $0 = $0|0; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP32[$2>>2]|0; + $4 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($3)|0); + $5 = $4&255; + $6 = $5 << 24; + $7 = HEAP32[$2>>2]|0; + $8 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($7)|0); + $9 = $8&255; + $10 = $9 << 16; + $11 = $6 | $10; + $12 = HEAP32[$2>>2]|0; + $13 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($12)|0); + $14 = $13&255; + $15 = $14 << 8; + $16 = $11 | $15; + $17 = HEAP32[$2>>2]|0; + $18 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($17)|0); + $19 = $18&255; + $20 = $16 | $19; + $21 = ((($2)) + 4|0); + HEAP32[$21>>2] = $20; + STACKTOP = sp;return; +} +function __ZN6laszip13decompressors7integer4initEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); + $14 = sp + 8|0; + $19 = sp + 335|0; + $30 = sp + 334|0; + $44 = sp; + $49 = sp + 333|0; + $60 = sp + 332|0; + $64 = sp + 60|0; + $66 = sp + 12|0; + $62 = $0; + $67 = $62; + $68 = ((($67)) + 36|0); + $61 = $68; + $69 = $61; + $70 = HEAP32[$69>>2]|0; + $71 = ((($69)) + 4|0); + $72 = HEAP32[$71>>2]|0; + $73 = ($70|0)==($72|0); + if (!($73)) { + STACKTOP = sp;return; + } + $63 = 0; + while(1) { + $74 = $63; + $75 = ((($67)) + 8|0); + $76 = HEAP32[$75>>2]|0; + $77 = ($74>>>0)<($76>>>0); + if (!($77)) { + break; + } + $78 = ((($67)) + 36|0); + $79 = ((($67)) + 20|0); + $80 = HEAP32[$79>>2]|0; + $81 = (($80) + 1)|0; + __ZN6laszip6models10arithmeticC2EjbPj($64,$81,0,0); + $58 = $78; + $59 = $64; + $82 = $58; + $83 = ((($82)) + 4|0); + $84 = HEAP32[$83>>2]|0; + $57 = $82; + $85 = $57; + $86 = ((($85)) + 8|0); + $56 = $86; + $87 = $56; + $55 = $87; + $88 = $55; + $89 = HEAP32[$88>>2]|0; + $90 = ($84>>>0)<($89>>>0); + if ($90) { + $52 = $60; + $53 = $82; + $54 = 1; + $35 = $82; + $91 = $35; + $92 = ((($91)) + 8|0); + $34 = $92; + $93 = $34; + $33 = $93; + $94 = $33; + $95 = ((($82)) + 4|0); + $96 = HEAP32[$95>>2]|0; + $31 = $96; + $97 = $31; + $98 = $59; + $32 = $98; + $99 = $32; + $46 = $94; + $47 = $97; + $48 = $99; + $100 = $46; + $101 = $47; + $102 = $48; + $45 = $102; + $103 = $45; + ;HEAP8[$44>>0]=HEAP8[$49>>0]|0; + $41 = $100; + $42 = $101; + $43 = $103; + $104 = $41; + $105 = $42; + $106 = $43; + $40 = $106; + $107 = $40; + $37 = $104; + $38 = $105; + $39 = $107; + $108 = $38; + $109 = $39; + $36 = $109; + $110 = $36; + __ZN6laszip6models10arithmeticC2EOS1_($108,$110); + $50 = $60; + $111 = ((($82)) + 4|0); + $112 = HEAP32[$111>>2]|0; + $113 = ((($112)) + 44|0); + HEAP32[$111>>2] = $113; + } else { + $114 = $59; + $51 = $114; + $115 = $51; + __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($82,$115); + } + __ZN6laszip6models10arithmeticD2Ev($64); + $116 = $63; + $117 = (($116) + 1)|0; + $63 = $117; + } + $63 = 1; + while(1) { + $118 = $63; + $119 = ((($67)) + 20|0); + $120 = HEAP32[$119>>2]|0; + $121 = ($118>>>0)<=($120>>>0); + if (!($121)) { + break; + } + $122 = $63; + $123 = ((($67)) + 12|0); + $124 = HEAP32[$123>>2]|0; + $125 = ($122>>>0)<=($124>>>0); + if ($125) { + $126 = $63; + $127 = 1 << $126; + $131 = $127; + } else { + $128 = ((($67)) + 12|0); + $129 = HEAP32[$128>>2]|0; + $130 = 1 << $129; + $131 = $130; + } + $65 = $131; + $132 = ((($67)) + 68|0); + $133 = $65; + __ZN6laszip6models10arithmeticC2EjbPj($66,$133,0,0); + $28 = $132; + $29 = $66; + $134 = $28; + $135 = ((($134)) + 4|0); + $136 = HEAP32[$135>>2]|0; + $27 = $134; + $137 = $27; + $138 = ((($137)) + 8|0); + $26 = $138; + $139 = $26; + $25 = $139; + $140 = $25; + $141 = HEAP32[$140>>2]|0; + $142 = ($136>>>0)<($141>>>0); + if ($142) { + $22 = $30; + $23 = $134; + $24 = 1; + $5 = $134; + $143 = $5; + $144 = ((($143)) + 8|0); + $4 = $144; + $145 = $4; + $3 = $145; + $146 = $3; + $147 = ((($134)) + 4|0); + $148 = HEAP32[$147>>2]|0; + $1 = $148; + $149 = $1; + $150 = $29; + $2 = $150; + $151 = $2; + $16 = $146; + $17 = $149; + $18 = $151; + $152 = $16; + $153 = $17; + $154 = $18; + $15 = $154; + $155 = $15; + ;HEAP8[$14>>0]=HEAP8[$19>>0]|0; + $11 = $152; + $12 = $153; + $13 = $155; + $156 = $11; + $157 = $12; + $158 = $13; + $10 = $158; + $159 = $10; + $7 = $156; + $8 = $157; + $9 = $159; + $160 = $8; + $161 = $9; + $6 = $161; + $162 = $6; + __ZN6laszip6models10arithmeticC2EOS1_($160,$162); + $20 = $30; + $163 = ((($134)) + 4|0); + $164 = HEAP32[$163>>2]|0; + $165 = ((($164)) + 44|0); + HEAP32[$163>>2] = $165; + } else { + $166 = $29; + $21 = $166; + $167 = $21; + __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($134,$167); + } + __ZN6laszip6models10arithmeticD2Ev($66); + $168 = $63; + $169 = (($168) + 1)|0; + $63 = $169; + } + STACKTOP = sp;return; +} +function __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $6 = $0; + $7 = $1; + $8 = $2; + $9 = $3; + $11 = $6; + $12 = $8; + $13 = $7; + $14 = ((($11)) + 36|0); + $15 = $9; + $4 = $14; + $5 = $15; + $16 = $4; + $17 = HEAP32[$16>>2]|0; + $18 = $5; + $19 = (($17) + (($18*44)|0)|0); + $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0); + $21 = (($12) + ($20))|0; + $10 = $21; + $22 = $10; + $23 = ($22|0)<(0); + if ($23) { + $24 = ((($11)) + 24|0); + $25 = HEAP32[$24>>2]|0; + $26 = $10; + $27 = (($26) + ($25))|0; + $10 = $27; + $36 = $10; + STACKTOP = sp;return ($36|0); + } + $28 = $10; + $29 = ((($11)) + 24|0); + $30 = HEAP32[$29>>2]|0; + $31 = ($28>>>0)>=($30>>>0); + if (!($31)) { + $36 = $10; + STACKTOP = sp;return ($36|0); + } + $32 = ((($11)) + 24|0); + $33 = HEAP32[$32>>2]|0; + $34 = $10; + $35 = (($34) - ($33))|0; + $10 = $35; + $36 = $10; + STACKTOP = sp;return ($36|0); +} +function __ZN6laszip13decompressors7integerD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 68|0); + __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3); + $4 = ((($2)) + 36|0); + __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($4); + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZN6laszip22chunk_table_read_errorD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip22chunk_table_read_errorD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip13not_supportedD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13not_supportedD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip26unknown_chunk_table_formatD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip26unknown_chunk_table_formatD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $8 = sp; + $11 = sp + 140|0; + $19 = sp + 76|0; + $22 = sp + 64|0; + $33 = sp + 4|0; + $30 = $0; + $31 = $1; + $34 = $30; + $29 = $34; + $35 = $29; + $36 = ((($35)) + 8|0); + $28 = $36; + $37 = $28; + $27 = $37; + $38 = $27; + $39 = HEAP32[$38>>2]|0; + $40 = ((($34)) + 4|0); + $41 = HEAP32[$40>>2]|0; + $42 = $39; + $43 = $41; + $44 = (($42) - ($43))|0; + $45 = (($44|0) / 8)&-1; + $46 = $31; + $47 = ($45>>>0)>=($46>>>0); + if ($47) { + $48 = $31; + __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($34,$48); + STACKTOP = sp;return; + } + $26 = $34; + $49 = $26; + $50 = ((($49)) + 8|0); + $25 = $50; + $51 = $25; + $24 = $51; + $52 = $24; + $32 = $52; + $23 = $34; + $53 = $23; + $54 = ((($53)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $56 = HEAP32[$53>>2]|0; + $57 = $55; + $58 = $56; + $59 = (($57) - ($58))|0; + $60 = (($59|0) / 8)&-1; + $61 = $31; + $62 = (($60) + ($61))|0; + $18 = $34; + HEAP32[$19>>2] = $62; + $63 = $18; + $64 = (__ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($63)|0); + $20 = $64; + $65 = HEAP32[$19>>2]|0; + $66 = $20; + $67 = ($65>>>0)>($66>>>0); + if ($67) { + __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63); + // unreachable; + } + $16 = $63; + $68 = $16; + $15 = $68; + $69 = $15; + $14 = $69; + $70 = $14; + $71 = ((($70)) + 8|0); + $13 = $71; + $72 = $13; + $12 = $72; + $73 = $12; + $74 = HEAP32[$73>>2]|0; + $75 = HEAP32[$69>>2]|0; + $76 = $74; + $77 = $75; + $78 = (($76) - ($77))|0; + $79 = (($78|0) / 8)&-1; + $21 = $79; + $80 = $21; + $81 = $20; + $82 = (($81>>>0) / 2)&-1; + $83 = ($80>>>0)>=($82>>>0); + if ($83) { + $84 = $20; + $17 = $84; + } else { + $85 = $21; + $86 = $85<<1; + HEAP32[$22>>2] = $86; + $9 = $22; + $10 = $19; + $87 = $9; + $88 = $10; + ;HEAP8[$8>>0]=HEAP8[$11>>0]|0; + $6 = $87; + $7 = $88; + $89 = $6; + $90 = $7; + $3 = $8; + $4 = $89; + $5 = $90; + $91 = $4; + $92 = HEAP32[$91>>2]|0; + $93 = $5; + $94 = HEAP32[$93>>2]|0; + $95 = ($92>>>0)<($94>>>0); + $96 = $7; + $97 = $6; + $98 = $95 ? $96 : $97; + $99 = HEAP32[$98>>2]|0; + $17 = $99; + } + $100 = $17; + $2 = $34; + $101 = $2; + $102 = ((($101)) + 4|0); + $103 = HEAP32[$102>>2]|0; + $104 = HEAP32[$101>>2]|0; + $105 = $103; + $106 = $104; + $107 = (($105) - ($106))|0; + $108 = (($107|0) / 8)&-1; + $109 = $32; + __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($33,$100,$108,$109); + $110 = $31; + __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($33,$110); + __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($34,$33); + __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($33); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $10 = sp; + $13 = sp + 73|0; + $21 = sp + 72|0; + $18 = $0; + $19 = $1; + $22 = $18; + $17 = $22; + $23 = $17; + $24 = ((($23)) + 8|0); + $16 = $24; + $25 = $16; + $15 = $25; + $26 = $15; + $20 = $26; + while(1) { + $2 = $21; + $3 = $22; + $4 = 1; + $27 = $20; + $28 = ((($22)) + 4|0); + $29 = HEAP32[$28>>2]|0; + $5 = $29; + $30 = $5; + $11 = $27; + $12 = $30; + $31 = $11; + $32 = $12; + ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; + $8 = $31; + $9 = $32; + $33 = $8; + $34 = $9; + $6 = $33; + $7 = $34; + $35 = $7; + $36 = $35; + $37 = $36; + HEAP32[$37>>2] = 0; + $38 = (($36) + 4)|0; + $39 = $38; + HEAP32[$39>>2] = 0; + $40 = ((($22)) + 4|0); + $41 = HEAP32[$40>>2]|0; + $42 = ((($41)) + 8|0); + HEAP32[$40>>2] = $42; + $43 = $19; + $44 = (($43) + -1)|0; + $19 = $44; + $14 = $21; + $45 = $19; + $46 = ($45>>>0)>(0); + if (!($46)) { + break; + } + } + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $35 = sp; + $31 = $0; + $32 = $1; + $33 = $2; + $34 = $3; + $36 = $31; + $37 = ((($36)) + 12|0); + HEAP32[$35>>2] = 0; + $38 = $34; + $28 = $37; + $29 = $35; + $30 = $38; + $39 = $28; + $40 = $29; + $27 = $40; + $41 = $27; + $21 = $39; + $22 = $41; + $42 = $21; + $43 = $22; + $20 = $43; + HEAP32[$42>>2] = 0; + $44 = ((($39)) + 4|0); + $45 = $30; + $23 = $45; + $46 = $23; + $25 = $44; + $26 = $46; + $47 = $25; + $48 = $26; + $24 = $48; + $49 = $24; + HEAP32[$47>>2] = $49; + $50 = $32; + $51 = ($50|0)!=(0); + do { + if ($51) { + $6 = $36; + $52 = $6; + $53 = ((($52)) + 12|0); + $5 = $53; + $54 = $5; + $55 = ((($54)) + 4|0); + $4 = $55; + $56 = $4; + $57 = HEAP32[$56>>2]|0; + $58 = $32; + $15 = $57; + $16 = $58; + $59 = $15; + $60 = $16; + $12 = $59; + $13 = $60; + $14 = 0; + $61 = $12; + $62 = $13; + $11 = $61; + $63 = ($62>>>0)>(536870911); + if ($63) { + $9 = 4287; + $64 = (___cxa_allocate_exception(8)|0); + $65 = $9; + $7 = $64; + $8 = $65; + $66 = $7; + $67 = $8; + __ZNSt11logic_errorC2EPKc($66,$67); + HEAP32[$66>>2] = (3660); + ___cxa_throw(($64|0),(1384|0),(220|0)); + // unreachable; + } else { + $68 = $13; + $69 = $68<<3; + $10 = $69; + $70 = $10; + $71 = (__Znwj($70)|0); + $72 = $71; + break; + } + } else { + $72 = 0; + } + } while(0); + HEAP32[$36>>2] = $72; + $73 = HEAP32[$36>>2]|0; + $74 = $33; + $75 = (($73) + ($74<<3)|0); + $76 = ((($36)) + 8|0); + HEAP32[$76>>2] = $75; + $77 = ((($36)) + 4|0); + HEAP32[$77>>2] = $75; + $78 = HEAP32[$36>>2]|0; + $79 = $32; + $80 = (($78) + ($79<<3)|0); + $19 = $36; + $81 = $19; + $82 = ((($81)) + 12|0); + $18 = $82; + $83 = $18; + $17 = $83; + $84 = $17; + HEAP32[$84>>2] = $80; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $7 = sp; + $10 = sp + 56|0; + $14 = $0; + $15 = $1; + $17 = $14; + $13 = $17; + $18 = $13; + $19 = ((($18)) + 12|0); + $12 = $19; + $20 = $12; + $21 = ((($20)) + 4|0); + $11 = $21; + $22 = $11; + $23 = HEAP32[$22>>2]|0; + $16 = $23; + while(1) { + $24 = $16; + $25 = ((($17)) + 8|0); + $26 = HEAP32[$25>>2]|0; + $2 = $26; + $27 = $2; + $8 = $24; + $9 = $27; + $28 = $8; + $29 = $9; + ;HEAP8[$7>>0]=HEAP8[$10>>0]|0; + $5 = $28; + $6 = $29; + $30 = $5; + $31 = $6; + $3 = $30; + $4 = $31; + $32 = $4; + $33 = $32; + $34 = $33; + HEAP32[$34>>2] = 0; + $35 = (($33) + 4)|0; + $36 = $35; + HEAP32[$36>>2] = 0; + $37 = ((($17)) + 8|0); + $38 = HEAP32[$37>>2]|0; + $39 = ((($38)) + 8|0); + HEAP32[$37>>2] = $39; + $40 = $15; + $41 = (($40) + -1)|0; + $15 = $41; + $42 = $15; + $43 = ($42>>>0)>(0); + if (!($43)) { + break; + } + } + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0); + $15 = sp + 288|0; + $21 = sp + 264|0; + $33 = sp + 216|0; + $86 = $0; + $87 = $1; + $88 = $86; + $85 = $88; + $89 = $85; + $84 = $89; + $90 = $84; + $91 = HEAP32[$90>>2]|0; + $83 = $91; + $92 = $83; + $62 = $89; + $93 = $62; + $94 = HEAP32[$93>>2]|0; + $61 = $94; + $95 = $61; + $67 = $89; + $96 = $67; + $66 = $96; + $97 = $66; + $65 = $97; + $98 = $65; + $99 = ((($98)) + 8|0); + $64 = $99; + $100 = $64; + $63 = $100; + $101 = $63; + $102 = HEAP32[$101>>2]|0; + $103 = HEAP32[$97>>2]|0; + $104 = $102; + $105 = $103; + $106 = (($104) - ($105))|0; + $107 = (($106|0) / 8)&-1; + $108 = (($95) + ($107<<3)|0); + $69 = $89; + $109 = $69; + $110 = HEAP32[$109>>2]|0; + $68 = $110; + $111 = $68; + $70 = $89; + $112 = $70; + $113 = ((($112)) + 4|0); + $114 = HEAP32[$113>>2]|0; + $115 = HEAP32[$112>>2]|0; + $116 = $114; + $117 = $115; + $118 = (($116) - ($117))|0; + $119 = (($118|0) / 8)&-1; + $120 = (($111) + ($119<<3)|0); + $72 = $89; + $121 = $72; + $122 = HEAP32[$121>>2]|0; + $71 = $122; + $123 = $71; + $77 = $89; + $124 = $77; + $76 = $124; + $125 = $76; + $75 = $125; + $126 = $75; + $127 = ((($126)) + 8|0); + $74 = $127; + $128 = $74; + $73 = $128; + $129 = $73; + $130 = HEAP32[$129>>2]|0; + $131 = HEAP32[$125>>2]|0; + $132 = $130; + $133 = $131; + $134 = (($132) - ($133))|0; + $135 = (($134|0) / 8)&-1; + $136 = (($123) + ($135<<3)|0); + $78 = $89; + $79 = $92; + $80 = $108; + $81 = $120; + $82 = $136; + $4 = $88; + $137 = $4; + $138 = ((($137)) + 8|0); + $3 = $138; + $139 = $3; + $2 = $139; + $140 = $2; + $141 = HEAP32[$88>>2]|0; + $142 = ((($88)) + 4|0); + $143 = HEAP32[$142>>2]|0; + $144 = $87; + $145 = ((($144)) + 4|0); + $5 = $140; + $6 = $141; + $7 = $143; + $8 = $145; + $146 = $7; + $147 = $6; + $148 = $146; + $149 = $147; + $150 = (($148) - ($149))|0; + $151 = (($150|0) / 8)&-1; + $9 = $151; + $152 = $9; + $153 = $8; + $154 = HEAP32[$153>>2]|0; + $155 = (0 - ($152))|0; + $156 = (($154) + ($155<<3)|0); + HEAP32[$153>>2] = $156; + $157 = $9; + $158 = ($157|0)>(0); + if ($158) { + $159 = $8; + $160 = HEAP32[$159>>2]|0; + $161 = $6; + $162 = $9; + $163 = $162<<3; + _memcpy(($160|0),($161|0),($163|0))|0; + } + $164 = $87; + $165 = ((($164)) + 4|0); + $13 = $88; + $14 = $165; + $166 = $13; + $12 = $166; + $167 = $12; + $168 = HEAP32[$167>>2]|0; + HEAP32[$15>>2] = $168; + $169 = $14; + $10 = $169; + $170 = $10; + $171 = HEAP32[$170>>2]|0; + $172 = $13; + HEAP32[$172>>2] = $171; + $11 = $15; + $173 = $11; + $174 = HEAP32[$173>>2]|0; + $175 = $14; + HEAP32[$175>>2] = $174; + $176 = ((($88)) + 4|0); + $177 = $87; + $178 = ((($177)) + 8|0); + $19 = $176; + $20 = $178; + $179 = $19; + $18 = $179; + $180 = $18; + $181 = HEAP32[$180>>2]|0; + HEAP32[$21>>2] = $181; + $182 = $20; + $16 = $182; + $183 = $16; + $184 = HEAP32[$183>>2]|0; + $185 = $19; + HEAP32[$185>>2] = $184; + $17 = $21; + $186 = $17; + $187 = HEAP32[$186>>2]|0; + $188 = $20; + HEAP32[$188>>2] = $187; + $24 = $88; + $189 = $24; + $190 = ((($189)) + 8|0); + $23 = $190; + $191 = $23; + $22 = $191; + $192 = $22; + $193 = $87; + $27 = $193; + $194 = $27; + $195 = ((($194)) + 12|0); + $26 = $195; + $196 = $26; + $25 = $196; + $197 = $25; + $31 = $192; + $32 = $197; + $198 = $31; + $30 = $198; + $199 = $30; + $200 = HEAP32[$199>>2]|0; + HEAP32[$33>>2] = $200; + $201 = $32; + $28 = $201; + $202 = $28; + $203 = HEAP32[$202>>2]|0; + $204 = $31; + HEAP32[$204>>2] = $203; + $29 = $33; + $205 = $29; + $206 = HEAP32[$205>>2]|0; + $207 = $32; + HEAP32[$207>>2] = $206; + $208 = $87; + $209 = ((($208)) + 4|0); + $210 = HEAP32[$209>>2]|0; + $211 = $87; + HEAP32[$211>>2] = $210; + $34 = $88; + $212 = $34; + $213 = ((($212)) + 4|0); + $214 = HEAP32[$213>>2]|0; + $215 = HEAP32[$212>>2]|0; + $216 = $214; + $217 = $215; + $218 = (($216) - ($217))|0; + $219 = (($218|0) / 8)&-1; + $58 = $88; + $59 = $219; + $220 = $58; + $57 = $220; + $221 = $57; + $222 = HEAP32[$221>>2]|0; + $56 = $222; + $223 = $56; + $36 = $220; + $224 = $36; + $225 = HEAP32[$224>>2]|0; + $35 = $225; + $226 = $35; + $41 = $220; + $227 = $41; + $40 = $227; + $228 = $40; + $39 = $228; + $229 = $39; + $230 = ((($229)) + 8|0); + $38 = $230; + $231 = $38; + $37 = $231; + $232 = $37; + $233 = HEAP32[$232>>2]|0; + $234 = HEAP32[$228>>2]|0; + $235 = $233; + $236 = $234; + $237 = (($235) - ($236))|0; + $238 = (($237|0) / 8)&-1; + $239 = (($226) + ($238<<3)|0); + $43 = $220; + $240 = $43; + $241 = HEAP32[$240>>2]|0; + $42 = $241; + $242 = $42; + $48 = $220; + $243 = $48; + $47 = $243; + $244 = $47; + $46 = $244; + $245 = $46; + $246 = ((($245)) + 8|0); + $45 = $246; + $247 = $45; + $44 = $247; + $248 = $44; + $249 = HEAP32[$248>>2]|0; + $250 = HEAP32[$244>>2]|0; + $251 = $249; + $252 = $250; + $253 = (($251) - ($252))|0; + $254 = (($253|0) / 8)&-1; + $255 = (($242) + ($254<<3)|0); + $50 = $220; + $256 = $50; + $257 = HEAP32[$256>>2]|0; + $49 = $257; + $258 = $49; + $259 = $59; + $260 = (($258) + ($259<<3)|0); + $51 = $220; + $52 = $223; + $53 = $239; + $54 = $255; + $55 = $260; + $60 = $88; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $19 = sp + 8|0; + $22 = sp + 133|0; + $29 = sp; + $32 = sp + 132|0; + $34 = $0; + $35 = $34; + $33 = $35; + $36 = $33; + $37 = ((($36)) + 4|0); + $38 = HEAP32[$37>>2]|0; + $30 = $36; + $31 = $38; + $39 = $30; + $40 = $31; + ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; + $27 = $39; + $28 = $40; + $41 = $27; + while(1) { + $42 = $28; + $43 = ((($41)) + 8|0); + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)!=($44|0); + if (!($45)) { + break; + } + $26 = $41; + $46 = $26; + $47 = ((($46)) + 12|0); + $25 = $47; + $48 = $25; + $49 = ((($48)) + 4|0); + $24 = $49; + $50 = $24; + $51 = HEAP32[$50>>2]|0; + $52 = ((($41)) + 8|0); + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + -8|0); + HEAP32[$52>>2] = $54; + $23 = $54; + $55 = $23; + $20 = $51; + $21 = $55; + $56 = $20; + $57 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $56; + $18 = $57; + $58 = $17; + $59 = $18; + $15 = $58; + $16 = $59; + } + $60 = HEAP32[$35>>2]|0; + $61 = ($60|0)!=(0|0); + if (!($61)) { + STACKTOP = sp;return; + } + $14 = $35; + $62 = $14; + $63 = ((($62)) + 12|0); + $13 = $63; + $64 = $13; + $65 = ((($64)) + 4|0); + $12 = $65; + $66 = $12; + $67 = HEAP32[$66>>2]|0; + $68 = HEAP32[$35>>2]|0; + $4 = $35; + $69 = $4; + $3 = $69; + $70 = $3; + $71 = ((($70)) + 12|0); + $2 = $71; + $72 = $2; + $1 = $72; + $73 = $1; + $74 = HEAP32[$73>>2]|0; + $75 = HEAP32[$69>>2]|0; + $76 = $74; + $77 = $75; + $78 = (($76) - ($77))|0; + $79 = (($78|0) / 8)&-1; + $9 = $67; + $10 = $68; + $11 = $79; + $80 = $9; + $81 = $10; + $82 = $11; + $6 = $80; + $7 = $81; + $8 = $82; + $83 = $7; + $5 = $83; + $84 = $5; + __ZdlPv($84); + STACKTOP = sp;return; +} +function __ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($0) { + $0 = $0|0; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $6 = sp + 8|0; + $9 = sp + 77|0; + $12 = sp; + $14 = sp + 76|0; + $19 = sp + 16|0; + $20 = sp + 12|0; + $18 = $0; + $21 = $18; + $17 = $21; + $22 = $17; + $23 = ((($22)) + 8|0); + $16 = $23; + $24 = $16; + $15 = $24; + $25 = $15; + $13 = $25; + $26 = $13; + ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; + $11 = $26; + $27 = $11; + $10 = $27; + HEAP32[$19>>2] = 536870911; + HEAP32[$20>>2] = 2147483647; + $7 = $19; + $8 = $20; + $28 = $7; + $29 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $28; + $5 = $29; + $30 = $5; + $31 = $4; + $1 = $6; + $2 = $30; + $3 = $31; + $32 = $2; + $33 = HEAP32[$32>>2]|0; + $34 = $3; + $35 = HEAP32[$34>>2]|0; + $36 = ($33>>>0)<($35>>>0); + $37 = $5; + $38 = $4; + $39 = $36 ? $37 : $38; + $40 = HEAP32[$39>>2]|0; + STACKTOP = sp;return ($40|0); +} +function __ZN6laszip6models14arithmetic_bitC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 12|0); + HEAP32[$3>>2] = 1; + $4 = ((($2)) + 16|0); + HEAP32[$4>>2] = 2; + $5 = ((($2)) + 8|0); + HEAP32[$5>>2] = 4096; + $6 = ((($2)) + 4|0); + HEAP32[$6>>2] = 4; + HEAP32[$2>>2] = 4; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $19 = sp; + $22 = sp + 120|0; + $31 = $0; + $32 = $31; + $33 = HEAP32[$32>>2]|0; + $34 = ($33|0)!=(0|0); + if (!($34)) { + STACKTOP = sp;return; + } + $30 = $32; + $35 = $30; + $36 = HEAP32[$35>>2]|0; + $27 = $35; + $28 = $36; + $37 = $27; + $38 = ((($37)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $29 = $39; + while(1) { + $40 = $28; + $41 = $29; + $42 = ($40|0)!=($41|0); + if (!($42)) { + break; + } + $26 = $37; + $43 = $26; + $44 = ((($43)) + 8|0); + $25 = $44; + $45 = $25; + $24 = $45; + $46 = $24; + $47 = $29; + $48 = ((($47)) + -44|0); + $29 = $48; + $23 = $48; + $49 = $23; + $20 = $46; + $21 = $49; + $50 = $20; + $51 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $50; + $18 = $51; + $52 = $17; + $53 = $18; + $15 = $52; + $16 = $53; + $54 = $16; + __ZN6laszip6models10arithmeticD2Ev($54); + } + $55 = $28; + $56 = ((($37)) + 4|0); + HEAP32[$56>>2] = $55; + $14 = $32; + $57 = $14; + $58 = ((($57)) + 8|0); + $13 = $58; + $59 = $13; + $12 = $59; + $60 = $12; + $61 = HEAP32[$32>>2]|0; + $4 = $32; + $62 = $4; + $3 = $62; + $63 = $3; + $64 = ((($63)) + 8|0); + $2 = $64; + $65 = $2; + $1 = $65; + $66 = $1; + $67 = HEAP32[$66>>2]|0; + $68 = HEAP32[$62>>2]|0; + $69 = $67; + $70 = $68; + $71 = (($69) - ($70))|0; + $72 = (($71|0) / 44)&-1; + $9 = $60; + $10 = $61; + $11 = $72; + $73 = $9; + $74 = $10; + $75 = $11; + $6 = $73; + $7 = $74; + $8 = $75; + $76 = $7; + $5 = $76; + $77 = $5; + __ZdlPv($77); + STACKTOP = sp;return; +} +function __ZN6laszip6models10arithmeticD2Ev($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 8|0); + $4 = HEAP32[$3>>2]|0; + $5 = ($4|0)!=(0|0); + if ($5) { + $6 = ((($2)) + 8|0); + $7 = HEAP32[$6>>2]|0; + __ZN6laszip5utilsL12aligned_freeEPv($7); + } + $8 = ((($2)) + 12|0); + $9 = HEAP32[$8>>2]|0; + $10 = ($9|0)!=(0|0); + if ($10) { + $11 = ((($2)) + 12|0); + $12 = HEAP32[$11>>2]|0; + __ZN6laszip5utilsL12aligned_freeEPv($12); + } + $13 = ((($2)) + 16|0); + $14 = HEAP32[$13>>2]|0; + $15 = ($14|0)!=(0|0); + if (!($15)) { + STACKTOP = sp;return; + } + $16 = ((($2)) + 16|0); + $17 = HEAP32[$16>>2]|0; + __ZN6laszip5utilsL12aligned_freeEPv($17); + STACKTOP = sp;return; +} +function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4|0); + $4 = HEAP32[$3>>2]|0; + $5 = ((($2)) + 8|0); + $6 = HEAP32[$5>>2]|0; + $7 = ($4|0)>=($6|0); + if ($7) { + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($2); + } + $8 = ((($2)) + 12|0); + $9 = HEAP32[$8>>2]|0; + $10 = ((($2)) + 4|0); + $11 = HEAP32[$10>>2]|0; + $12 = (($11) + 1)|0; + HEAP32[$10>>2] = $12; + $13 = (($9) + ($11)|0); + $14 = HEAP8[$13>>0]|0; + STACKTOP = sp;return ($14|0); +} +function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4|0); + HEAP32[$3>>2] = 0; + $4 = HEAP32[$2>>2]|0; + $5 = ((($2)) + 12|0); + $6 = HEAP32[$5>>2]|0; + __ZN6laszip7streams13memory_stream4readEPci($4,$6,1048576); + $7 = HEAP32[$2>>2]|0; + $8 = (__ZN6laszip7streams13memory_stream6gcountEv($7)|0); + $9 = ((($2)) + 8|0); + HEAP32[$9>>2] = $8; + $10 = ((($2)) + 8|0); + $11 = HEAP32[$10>>2]|0; + $12 = ($11|0)==(0); + if ($12) { + $13 = (___cxa_allocate_exception(8)|0); + __ZN6laszip11end_of_fileC2Ev($13); + ___cxa_throw(($13|0),(216|0),(40|0)); + // unreachable; + } else { + STACKTOP = sp;return; + } +} +function __ZN6laszip7streams13memory_stream6gcountEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 16|0); + $4 = HEAP32[$3>>2]|0; + STACKTOP = sp;return ($4|0); +} +function __ZN6laszip11end_of_fileC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,5363); + HEAP32[$2>>2] = (1888); + STACKTOP = sp;return; +} +function __ZN6laszip11end_of_fileD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip11end_of_fileD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11end_of_fileD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip6models10arithmeticC2EjbPj($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = $0; + $5 = $1; + $11 = $2&1; + $6 = $11; + $7 = $3; + $12 = $4; + $13 = $5; + HEAP32[$12>>2] = $13; + $14 = ((($12)) + 4|0); + $15 = $6; + $16 = $15&1; + $17 = $16&1; + HEAP8[$14>>0] = $17; + $18 = ((($12)) + 8|0); + HEAP32[$18>>2] = 0; + $19 = ((($12)) + 12|0); + HEAP32[$19>>2] = 0; + $20 = ((($12)) + 16|0); + HEAP32[$20>>2] = 0; + $21 = HEAP32[$12>>2]|0; + $22 = ($21>>>0)<(2); + if ($22) { + $25 = (___cxa_allocate_exception(8)|0); + __ZNSt13runtime_errorC2EPKc($25,5383); + ___cxa_throw(($25|0),(1368|0),(223|0)); + // unreachable; + } + $23 = HEAP32[$12>>2]|0; + $24 = ($23>>>0)>(2048); + if ($24) { + $25 = (___cxa_allocate_exception(8)|0); + __ZNSt13runtime_errorC2EPKc($25,5383); + ___cxa_throw(($25|0),(1368|0),(223|0)); + // unreachable; + } + $26 = HEAP32[$12>>2]|0; + $27 = (($26) - 1)|0; + $28 = ((($12)) + 32|0); + HEAP32[$28>>2] = $27; + $29 = ((($12)) + 4|0); + $30 = HEAP8[$29>>0]|0; + $31 = $30&1; + if ($31) { + label = 10; + } else { + $32 = HEAP32[$12>>2]|0; + $33 = ($32>>>0)>(16); + if ($33) { + $8 = 3; + while(1) { + $34 = HEAP32[$12>>2]|0; + $35 = $8; + $36 = (($35) + 2)|0; + $37 = 1 << $36; + $38 = ($34>>>0)>($37>>>0); + $39 = $8; + if (!($38)) { + break; + } + $40 = (($39) + 1)|0; + $8 = $40; + } + $41 = 1 << $39; + $42 = ((($12)) + 36|0); + HEAP32[$42>>2] = $41; + $43 = $8; + $44 = (15 - ($43))|0; + $45 = ((($12)) + 40|0); + HEAP32[$45>>2] = $44; + $46 = ((($12)) + 36|0); + $47 = HEAP32[$46>>2]|0; + $48 = (($47) + 2)|0; + $49 = $48<<2; + $50 = (__ZN6laszip5utilsL14aligned_mallocEi($49)|0); + $51 = ((($12)) + 16|0); + HEAP32[$51>>2] = $50; + } else { + label = 10; + } + } + if ((label|0) == 10) { + $52 = ((($12)) + 16|0); + HEAP32[$52>>2] = 0; + $53 = ((($12)) + 40|0); + HEAP32[$53>>2] = 0; + $54 = ((($12)) + 36|0); + HEAP32[$54>>2] = 0; + } + $55 = HEAP32[$12>>2]|0; + $56 = $55<<2; + $57 = (__ZN6laszip5utilsL14aligned_mallocEi($56)|0); + $58 = ((($12)) + 8|0); + HEAP32[$58>>2] = $57; + $59 = HEAP32[$12>>2]|0; + $60 = $59<<2; + $61 = (__ZN6laszip5utilsL14aligned_mallocEi($60)|0); + $62 = ((($12)) + 12|0); + HEAP32[$62>>2] = $61; + $63 = ((($12)) + 20|0); + HEAP32[$63>>2] = 0; + $64 = HEAP32[$12>>2]|0; + $65 = ((($12)) + 24|0); + HEAP32[$65>>2] = $64; + $66 = $7; + $67 = ($66|0)!=(0|0); + if ($67) { + $9 = 0; + while(1) { + $68 = $9; + $69 = HEAP32[$12>>2]|0; + $70 = ($68>>>0)<($69>>>0); + if (!($70)) { + break; + } + $71 = $7; + $72 = $9; + $73 = (($71) + ($72<<2)|0); + $74 = HEAP32[$73>>2]|0; + $75 = ((($12)) + 12|0); + $76 = HEAP32[$75>>2]|0; + $77 = $9; + $78 = (($76) + ($77<<2)|0); + HEAP32[$78>>2] = $74; + $79 = $9; + $80 = (($79) + 1)|0; + $9 = $80; + } + __ZN6laszip6models10arithmetic6updateEv($12); + $90 = HEAP32[$12>>2]|0; + $91 = (($90) + 6)|0; + $92 = $91 >>> 1; + $93 = ((($12)) + 24|0); + HEAP32[$93>>2] = $92; + $94 = ((($12)) + 28|0); + HEAP32[$94>>2] = $92; + STACKTOP = sp;return; + } else { + $10 = 0; + while(1) { + $81 = $10; + $82 = HEAP32[$12>>2]|0; + $83 = ($81>>>0)<($82>>>0); + if (!($83)) { + break; + } + $84 = ((($12)) + 12|0); + $85 = HEAP32[$84>>2]|0; + $86 = $10; + $87 = (($85) + ($86<<2)|0); + HEAP32[$87>>2] = 1; + $88 = $10; + $89 = (($88) + 1)|0; + $10 = $89; + } + __ZN6laszip6models10arithmetic6updateEv($12); + $90 = HEAP32[$12>>2]|0; + $91 = (($90) + 6)|0; + $92 = $91 >>> 1; + $93 = ((($12)) + 24|0); + HEAP32[$93>>2] = $92; + $94 = ((($12)) + 28|0); + HEAP32[$94>>2] = $92; + STACKTOP = sp;return; + } +} +function __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); + $10 = sp + 8|0; + $15 = sp + 193|0; + $24 = sp; + $27 = sp + 192|0; + $35 = sp + 72|0; + $38 = sp + 60|0; + $46 = sp + 12|0; + $43 = $0; + $44 = $1; + $47 = $43; + $42 = $47; + $48 = $42; + $49 = ((($48)) + 8|0); + $41 = $49; + $50 = $41; + $40 = $50; + $51 = $40; + $45 = $51; + $39 = $47; + $52 = $39; + $53 = ((($52)) + 4|0); + $54 = HEAP32[$53>>2]|0; + $55 = HEAP32[$52>>2]|0; + $56 = $54; + $57 = $55; + $58 = (($56) - ($57))|0; + $59 = (($58|0) / 44)&-1; + $60 = (($59) + 1)|0; + $34 = $47; + HEAP32[$35>>2] = $60; + $61 = $34; + $62 = (__ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($61)|0); + $36 = $62; + $63 = HEAP32[$35>>2]|0; + $64 = $36; + $65 = ($63>>>0)>($64>>>0); + if ($65) { + __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61); + // unreachable; + } + $32 = $61; + $66 = $32; + $31 = $66; + $67 = $31; + $30 = $67; + $68 = $30; + $69 = ((($68)) + 8|0); + $29 = $69; + $70 = $29; + $28 = $70; + $71 = $28; + $72 = HEAP32[$71>>2]|0; + $73 = HEAP32[$67>>2]|0; + $74 = $72; + $75 = $73; + $76 = (($74) - ($75))|0; + $77 = (($76|0) / 44)&-1; + $37 = $77; + $78 = $37; + $79 = $36; + $80 = (($79>>>0) / 2)&-1; + $81 = ($78>>>0)>=($80>>>0); + if ($81) { + $82 = $36; + $33 = $82; + } else { + $83 = $37; + $84 = $83<<1; + HEAP32[$38>>2] = $84; + $25 = $38; + $26 = $35; + $85 = $25; + $86 = $26; + ;HEAP8[$24>>0]=HEAP8[$27>>0]|0; + $22 = $85; + $23 = $86; + $87 = $22; + $88 = $23; + $19 = $24; + $20 = $87; + $21 = $88; + $89 = $20; + $90 = HEAP32[$89>>2]|0; + $91 = $21; + $92 = HEAP32[$91>>2]|0; + $93 = ($90>>>0)<($92>>>0); + $94 = $23; + $95 = $22; + $96 = $93 ? $94 : $95; + $97 = HEAP32[$96>>2]|0; + $33 = $97; + } + $98 = $33; + $18 = $47; + $99 = $18; + $100 = ((($99)) + 4|0); + $101 = HEAP32[$100>>2]|0; + $102 = HEAP32[$99>>2]|0; + $103 = $101; + $104 = $102; + $105 = (($103) - ($104))|0; + $106 = (($105|0) / 44)&-1; + $107 = $45; + __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107); + $108 = $45; + $109 = ((($46)) + 8|0); + $110 = HEAP32[$109>>2]|0; + $17 = $110; + $111 = $17; + $112 = $44; + $16 = $112; + $113 = $16; + $12 = $108; + $13 = $111; + $14 = $113; + $114 = $12; + $115 = $13; + $116 = $14; + $11 = $116; + $117 = $11; + ;HEAP8[$10>>0]=HEAP8[$15>>0]|0; + $7 = $114; + $8 = $115; + $9 = $117; + $118 = $7; + $119 = $8; + $120 = $9; + $6 = $120; + $121 = $6; + $3 = $118; + $4 = $119; + $5 = $121; + $122 = $4; + $123 = $5; + $2 = $123; + $124 = $2; + __ZN6laszip6models10arithmeticC2EOS1_($122,$124); + $125 = ((($46)) + 8|0); + $126 = HEAP32[$125>>2]|0; + $127 = ((($126)) + 44|0); + HEAP32[$125>>2] = $127; + __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46); + __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($46); + STACKTOP = sp;return; +} +function __ZN6laszip6models10arithmeticC2EOS1_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + $6 = HEAP32[$5>>2]|0; + HEAP32[$4>>2] = $6; + $7 = ((($4)) + 4|0); + $8 = $3; + $9 = ((($8)) + 4|0); + $10 = HEAP8[$9>>0]|0; + $11 = $10&1; + $12 = $11&1; + HEAP8[$7>>0] = $12; + $13 = ((($4)) + 8|0); + $14 = $3; + $15 = ((($14)) + 8|0); + $16 = HEAP32[$15>>2]|0; + HEAP32[$13>>2] = $16; + $17 = ((($4)) + 12|0); + $18 = $3; + $19 = ((($18)) + 12|0); + $20 = HEAP32[$19>>2]|0; + HEAP32[$17>>2] = $20; + $21 = ((($4)) + 16|0); + $22 = $3; + $23 = ((($22)) + 16|0); + $24 = HEAP32[$23>>2]|0; + HEAP32[$21>>2] = $24; + $25 = ((($4)) + 20|0); + $26 = $3; + $27 = ((($26)) + 20|0); + $28 = HEAP32[$27>>2]|0; + HEAP32[$25>>2] = $28; + $29 = ((($4)) + 24|0); + $30 = $3; + $31 = ((($30)) + 24|0); + $32 = HEAP32[$31>>2]|0; + HEAP32[$29>>2] = $32; + $33 = ((($4)) + 28|0); + $34 = $3; + $35 = ((($34)) + 28|0); + $36 = HEAP32[$35>>2]|0; + HEAP32[$33>>2] = $36; + $37 = ((($4)) + 32|0); + $38 = $3; + $39 = ((($38)) + 32|0); + $40 = HEAP32[$39>>2]|0; + HEAP32[$37>>2] = $40; + $41 = ((($4)) + 36|0); + $42 = $3; + $43 = ((($42)) + 36|0); + $44 = HEAP32[$43>>2]|0; + HEAP32[$41>>2] = $44; + $45 = ((($4)) + 40|0); + $46 = $3; + $47 = ((($46)) + 40|0); + $48 = HEAP32[$47>>2]|0; + HEAP32[$45>>2] = $48; + $49 = $3; + $50 = ((($49)) + 12|0); + HEAP32[$50>>2] = 0; + $51 = $3; + $52 = ((($51)) + 16|0); + HEAP32[$52>>2] = 0; + $53 = $3; + $54 = ((($53)) + 8|0); + HEAP32[$54>>2] = 0; + $55 = $3; + $56 = ((($55)) + 12|0); + HEAP32[$56>>2] = 0; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $35 = sp; + $31 = $0; + $32 = $1; + $33 = $2; + $34 = $3; + $36 = $31; + $37 = ((($36)) + 12|0); + HEAP32[$35>>2] = 0; + $38 = $34; + $28 = $37; + $29 = $35; + $30 = $38; + $39 = $28; + $40 = $29; + $27 = $40; + $41 = $27; + $21 = $39; + $22 = $41; + $42 = $21; + $43 = $22; + $20 = $43; + HEAP32[$42>>2] = 0; + $44 = ((($39)) + 4|0); + $45 = $30; + $23 = $45; + $46 = $23; + $25 = $44; + $26 = $46; + $47 = $25; + $48 = $26; + $24 = $48; + $49 = $24; + HEAP32[$47>>2] = $49; + $50 = $32; + $51 = ($50|0)!=(0); + do { + if ($51) { + $6 = $36; + $52 = $6; + $53 = ((($52)) + 12|0); + $5 = $53; + $54 = $5; + $55 = ((($54)) + 4|0); + $4 = $55; + $56 = $4; + $57 = HEAP32[$56>>2]|0; + $58 = $32; + $15 = $57; + $16 = $58; + $59 = $15; + $60 = $16; + $12 = $59; + $13 = $60; + $14 = 0; + $61 = $12; + $62 = $13; + $11 = $61; + $63 = ($62>>>0)>(97612893); + if ($63) { + $9 = 4287; + $64 = (___cxa_allocate_exception(8)|0); + $65 = $9; + $7 = $64; + $8 = $65; + $66 = $7; + $67 = $8; + __ZNSt11logic_errorC2EPKc($66,$67); + HEAP32[$66>>2] = (3660); + ___cxa_throw(($64|0),(1384|0),(220|0)); + // unreachable; + } else { + $68 = $13; + $69 = ($68*44)|0; + $10 = $69; + $70 = $10; + $71 = (__Znwj($70)|0); + $72 = $71; + break; + } + } else { + $72 = 0; + } + } while(0); + HEAP32[$36>>2] = $72; + $73 = HEAP32[$36>>2]|0; + $74 = $33; + $75 = (($73) + (($74*44)|0)|0); + $76 = ((($36)) + 8|0); + HEAP32[$76>>2] = $75; + $77 = ((($36)) + 4|0); + HEAP32[$77>>2] = $75; + $78 = HEAP32[$36>>2]|0; + $79 = $32; + $80 = (($78) + (($79*44)|0)|0); + $19 = $36; + $81 = $19; + $82 = ((($81)) + 12|0); + $18 = $82; + $83 = $18; + $17 = $83; + $84 = $17; + HEAP32[$84>>2] = $80; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0); + $15 = sp; + $20 = sp + 404|0; + $31 = sp + 292|0; + $37 = sp + 268|0; + $49 = sp + 220|0; + $102 = $0; + $103 = $1; + $104 = $102; + $101 = $104; + $105 = $101; + $100 = $105; + $106 = $100; + $107 = HEAP32[$106>>2]|0; + $99 = $107; + $108 = $99; + $78 = $105; + $109 = $78; + $110 = HEAP32[$109>>2]|0; + $77 = $110; + $111 = $77; + $83 = $105; + $112 = $83; + $82 = $112; + $113 = $82; + $81 = $113; + $114 = $81; + $115 = ((($114)) + 8|0); + $80 = $115; + $116 = $80; + $79 = $116; + $117 = $79; + $118 = HEAP32[$117>>2]|0; + $119 = HEAP32[$113>>2]|0; + $120 = $118; + $121 = $119; + $122 = (($120) - ($121))|0; + $123 = (($122|0) / 44)&-1; + $124 = (($111) + (($123*44)|0)|0); + $85 = $105; + $125 = $85; + $126 = HEAP32[$125>>2]|0; + $84 = $126; + $127 = $84; + $86 = $105; + $128 = $86; + $129 = ((($128)) + 4|0); + $130 = HEAP32[$129>>2]|0; + $131 = HEAP32[$128>>2]|0; + $132 = $130; + $133 = $131; + $134 = (($132) - ($133))|0; + $135 = (($134|0) / 44)&-1; + $136 = (($127) + (($135*44)|0)|0); + $88 = $105; + $137 = $88; + $138 = HEAP32[$137>>2]|0; + $87 = $138; + $139 = $87; + $93 = $105; + $140 = $93; + $92 = $140; + $141 = $92; + $91 = $141; + $142 = $91; + $143 = ((($142)) + 8|0); + $90 = $143; + $144 = $90; + $89 = $144; + $145 = $89; + $146 = HEAP32[$145>>2]|0; + $147 = HEAP32[$141>>2]|0; + $148 = $146; + $149 = $147; + $150 = (($148) - ($149))|0; + $151 = (($150|0) / 44)&-1; + $152 = (($139) + (($151*44)|0)|0); + $94 = $105; + $95 = $108; + $96 = $124; + $97 = $136; + $98 = $152; + $4 = $104; + $153 = $4; + $154 = ((($153)) + 8|0); + $3 = $154; + $155 = $3; + $2 = $155; + $156 = $2; + $157 = HEAP32[$104>>2]|0; + $158 = ((($104)) + 4|0); + $159 = HEAP32[$158>>2]|0; + $160 = $103; + $161 = ((($160)) + 4|0); + $22 = $156; + $23 = $157; + $24 = $159; + $25 = $161; + while(1) { + $162 = $24; + $163 = $23; + $164 = ($162|0)!=($163|0); + if (!($164)) { + break; + } + $165 = $22; + $166 = $25; + $167 = HEAP32[$166>>2]|0; + $168 = ((($167)) + -44|0); + $21 = $168; + $169 = $21; + $170 = $24; + $171 = ((($170)) + -44|0); + $24 = $171; + $6 = $171; + $172 = $6; + $5 = $172; + $173 = $5; + $17 = $165; + $18 = $169; + $19 = $173; + $174 = $17; + $175 = $18; + $176 = $19; + $16 = $176; + $177 = $16; + ;HEAP8[$15>>0]=HEAP8[$20>>0]|0; + $12 = $174; + $13 = $175; + $14 = $177; + $178 = $12; + $179 = $13; + $180 = $14; + $11 = $180; + $181 = $11; + $8 = $178; + $9 = $179; + $10 = $181; + $182 = $9; + $183 = $10; + $7 = $183; + $184 = $7; + __ZN6laszip6models10arithmeticC2ERKS1_($182,$184); + $185 = $25; + $186 = HEAP32[$185>>2]|0; + $187 = ((($186)) + -44|0); + HEAP32[$185>>2] = $187; + } + $188 = $103; + $189 = ((($188)) + 4|0); + $29 = $104; + $30 = $189; + $190 = $29; + $28 = $190; + $191 = $28; + $192 = HEAP32[$191>>2]|0; + HEAP32[$31>>2] = $192; + $193 = $30; + $26 = $193; + $194 = $26; + $195 = HEAP32[$194>>2]|0; + $196 = $29; + HEAP32[$196>>2] = $195; + $27 = $31; + $197 = $27; + $198 = HEAP32[$197>>2]|0; + $199 = $30; + HEAP32[$199>>2] = $198; + $200 = ((($104)) + 4|0); + $201 = $103; + $202 = ((($201)) + 8|0); + $35 = $200; + $36 = $202; + $203 = $35; + $34 = $203; + $204 = $34; + $205 = HEAP32[$204>>2]|0; + HEAP32[$37>>2] = $205; + $206 = $36; + $32 = $206; + $207 = $32; + $208 = HEAP32[$207>>2]|0; + $209 = $35; + HEAP32[$209>>2] = $208; + $33 = $37; + $210 = $33; + $211 = HEAP32[$210>>2]|0; + $212 = $36; + HEAP32[$212>>2] = $211; + $40 = $104; + $213 = $40; + $214 = ((($213)) + 8|0); + $39 = $214; + $215 = $39; + $38 = $215; + $216 = $38; + $217 = $103; + $43 = $217; + $218 = $43; + $219 = ((($218)) + 12|0); + $42 = $219; + $220 = $42; + $41 = $220; + $221 = $41; + $47 = $216; + $48 = $221; + $222 = $47; + $46 = $222; + $223 = $46; + $224 = HEAP32[$223>>2]|0; + HEAP32[$49>>2] = $224; + $225 = $48; + $44 = $225; + $226 = $44; + $227 = HEAP32[$226>>2]|0; + $228 = $47; + HEAP32[$228>>2] = $227; + $45 = $49; + $229 = $45; + $230 = HEAP32[$229>>2]|0; + $231 = $48; + HEAP32[$231>>2] = $230; + $232 = $103; + $233 = ((($232)) + 4|0); + $234 = HEAP32[$233>>2]|0; + $235 = $103; + HEAP32[$235>>2] = $234; + $50 = $104; + $236 = $50; + $237 = ((($236)) + 4|0); + $238 = HEAP32[$237>>2]|0; + $239 = HEAP32[$236>>2]|0; + $240 = $238; + $241 = $239; + $242 = (($240) - ($241))|0; + $243 = (($242|0) / 44)&-1; + $74 = $104; + $75 = $243; + $244 = $74; + $73 = $244; + $245 = $73; + $246 = HEAP32[$245>>2]|0; + $72 = $246; + $247 = $72; + $52 = $244; + $248 = $52; + $249 = HEAP32[$248>>2]|0; + $51 = $249; + $250 = $51; + $57 = $244; + $251 = $57; + $56 = $251; + $252 = $56; + $55 = $252; + $253 = $55; + $254 = ((($253)) + 8|0); + $54 = $254; + $255 = $54; + $53 = $255; + $256 = $53; + $257 = HEAP32[$256>>2]|0; + $258 = HEAP32[$252>>2]|0; + $259 = $257; + $260 = $258; + $261 = (($259) - ($260))|0; + $262 = (($261|0) / 44)&-1; + $263 = (($250) + (($262*44)|0)|0); + $59 = $244; + $264 = $59; + $265 = HEAP32[$264>>2]|0; + $58 = $265; + $266 = $58; + $64 = $244; + $267 = $64; + $63 = $267; + $268 = $63; + $62 = $268; + $269 = $62; + $270 = ((($269)) + 8|0); + $61 = $270; + $271 = $61; + $60 = $271; + $272 = $60; + $273 = HEAP32[$272>>2]|0; + $274 = HEAP32[$268>>2]|0; + $275 = $273; + $276 = $274; + $277 = (($275) - ($276))|0; + $278 = (($277|0) / 44)&-1; + $279 = (($266) + (($278*44)|0)|0); + $66 = $244; + $280 = $66; + $281 = HEAP32[$280>>2]|0; + $65 = $281; + $282 = $65; + $283 = $75; + $284 = (($282) + (($283*44)|0)|0); + $67 = $244; + $68 = $247; + $69 = $263; + $70 = $279; + $71 = $284; + $76 = $104; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $19 = sp + 8|0; + $22 = sp + 133|0; + $29 = sp; + $32 = sp + 132|0; + $34 = $0; + $35 = $34; + $33 = $35; + $36 = $33; + $37 = ((($36)) + 4|0); + $38 = HEAP32[$37>>2]|0; + $30 = $36; + $31 = $38; + $39 = $30; + $40 = $31; + ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; + $27 = $39; + $28 = $40; + $41 = $27; + while(1) { + $42 = $28; + $43 = ((($41)) + 8|0); + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)!=($44|0); + if (!($45)) { + break; + } + $26 = $41; + $46 = $26; + $47 = ((($46)) + 12|0); + $25 = $47; + $48 = $25; + $49 = ((($48)) + 4|0); + $24 = $49; + $50 = $24; + $51 = HEAP32[$50>>2]|0; + $52 = ((($41)) + 8|0); + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + -44|0); + HEAP32[$52>>2] = $54; + $23 = $54; + $55 = $23; + $20 = $51; + $21 = $55; + $56 = $20; + $57 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $56; + $18 = $57; + $58 = $17; + $59 = $18; + $15 = $58; + $16 = $59; + $60 = $16; + __ZN6laszip6models10arithmeticD2Ev($60); + } + $61 = HEAP32[$35>>2]|0; + $62 = ($61|0)!=(0|0); + if (!($62)) { + STACKTOP = sp;return; + } + $14 = $35; + $63 = $14; + $64 = ((($63)) + 12|0); + $13 = $64; + $65 = $13; + $66 = ((($65)) + 4|0); + $12 = $66; + $67 = $12; + $68 = HEAP32[$67>>2]|0; + $69 = HEAP32[$35>>2]|0; + $11 = $35; + $70 = $11; + $10 = $70; + $71 = $10; + $72 = ((($71)) + 12|0); + $9 = $72; + $73 = $9; + $8 = $73; + $74 = $8; + $75 = HEAP32[$74>>2]|0; + $76 = HEAP32[$70>>2]|0; + $77 = $75; + $78 = $76; + $79 = (($77) - ($78))|0; + $80 = (($79|0) / 44)&-1; + $5 = $68; + $6 = $69; + $7 = $80; + $81 = $5; + $82 = $6; + $83 = $7; + $2 = $81; + $3 = $82; + $4 = $83; + $84 = $3; + $1 = $84; + $85 = $1; + __ZdlPv($85); + STACKTOP = sp;return; +} +function __ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($0) { + $0 = $0|0; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $6 = sp + 8|0; + $9 = sp + 77|0; + $12 = sp; + $14 = sp + 76|0; + $19 = sp + 16|0; + $20 = sp + 12|0; + $18 = $0; + $21 = $18; + $17 = $21; + $22 = $17; + $23 = ((($22)) + 8|0); + $16 = $23; + $24 = $16; + $15 = $24; + $25 = $15; + $13 = $25; + $26 = $13; + ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; + $11 = $26; + $27 = $11; + $10 = $27; + HEAP32[$19>>2] = 97612893; + HEAP32[$20>>2] = 2147483647; + $7 = $19; + $8 = $20; + $28 = $7; + $29 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $28; + $5 = $29; + $30 = $5; + $31 = $4; + $1 = $6; + $2 = $30; + $3 = $31; + $32 = $2; + $33 = HEAP32[$32>>2]|0; + $34 = $3; + $35 = HEAP32[$34>>2]|0; + $36 = ($33>>>0)<($35>>>0); + $37 = $5; + $38 = $4; + $39 = $36 ? $37 : $38; + $40 = HEAP32[$39>>2]|0; + STACKTOP = sp;return ($40|0); +} +function __ZN6laszip6models10arithmeticC2ERKS1_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $32 = $0; + $33 = $1; + $35 = $32; + $36 = $33; + $37 = HEAP32[$36>>2]|0; + HEAP32[$35>>2] = $37; + $38 = ((($35)) + 4|0); + $39 = $33; + $40 = ((($39)) + 4|0); + $41 = HEAP8[$40>>0]|0; + $42 = $41&1; + $43 = $42&1; + HEAP8[$38>>0] = $43; + $44 = ((($35)) + 20|0); + $45 = $33; + $46 = ((($45)) + 20|0); + $47 = HEAP32[$46>>2]|0; + HEAP32[$44>>2] = $47; + $48 = ((($35)) + 24|0); + $49 = $33; + $50 = ((($49)) + 24|0); + $51 = HEAP32[$50>>2]|0; + HEAP32[$48>>2] = $51; + $52 = ((($35)) + 28|0); + $53 = $33; + $54 = ((($53)) + 28|0); + $55 = HEAP32[$54>>2]|0; + HEAP32[$52>>2] = $55; + $56 = ((($35)) + 32|0); + $57 = $33; + $58 = ((($57)) + 32|0); + $59 = HEAP32[$58>>2]|0; + HEAP32[$56>>2] = $59; + $60 = ((($35)) + 36|0); + $61 = $33; + $62 = ((($61)) + 36|0); + $63 = HEAP32[$62>>2]|0; + HEAP32[$60>>2] = $63; + $64 = ((($35)) + 40|0); + $65 = $33; + $66 = ((($65)) + 40|0); + $67 = HEAP32[$66>>2]|0; + HEAP32[$64>>2] = $67; + $68 = HEAP32[$35>>2]|0; + $69 = $68<<2; + $34 = $69; + $70 = $34; + $71 = (__ZN6laszip5utilsL14aligned_mallocEi($70)|0); + $72 = ((($35)) + 8|0); + HEAP32[$72>>2] = $71; + $73 = $33; + $74 = ((($73)) + 8|0); + $75 = HEAP32[$74>>2]|0; + $76 = $33; + $77 = ((($76)) + 8|0); + $78 = HEAP32[$77>>2]|0; + $79 = HEAP32[$35>>2]|0; + $80 = (($78) + ($79<<2)|0); + $81 = ((($35)) + 8|0); + $82 = HEAP32[$81>>2]|0; + $29 = $75; + $30 = $80; + $31 = $82; + $83 = $29; + $28 = $83; + $84 = $28; + $85 = $30; + $22 = $85; + $86 = $22; + $87 = $31; + $23 = $87; + $88 = $23; + $24 = $84; + $25 = $86; + $26 = $88; + $89 = $25; + $90 = $24; + $91 = $89; + $92 = $90; + $93 = (($91) - ($92))|0; + $94 = (($93|0) / 4)&-1; + $27 = $94; + $95 = $27; + $96 = ($95>>>0)>(0); + if ($96) { + $97 = $26; + $98 = $24; + $99 = $27; + $100 = $99<<2; + _memmove(($97|0),($98|0),($100|0))|0; + } + $101 = $34; + $102 = (__ZN6laszip5utilsL14aligned_mallocEi($101)|0); + $103 = ((($35)) + 12|0); + HEAP32[$103>>2] = $102; + $104 = $33; + $105 = ((($104)) + 12|0); + $106 = HEAP32[$105>>2]|0; + $107 = $33; + $108 = ((($107)) + 12|0); + $109 = HEAP32[$108>>2]|0; + $110 = HEAP32[$35>>2]|0; + $111 = (($109) + ($110<<2)|0); + $112 = ((($35)) + 12|0); + $113 = HEAP32[$112>>2]|0; + $9 = $106; + $10 = $111; + $11 = $113; + $114 = $9; + $8 = $114; + $115 = $8; + $116 = $10; + $2 = $116; + $117 = $2; + $118 = $11; + $3 = $118; + $119 = $3; + $4 = $115; + $5 = $117; + $6 = $119; + $120 = $5; + $121 = $4; + $122 = $120; + $123 = $121; + $124 = (($122) - ($123))|0; + $125 = (($124|0) / 4)&-1; + $7 = $125; + $126 = $7; + $127 = ($126>>>0)>(0); + if ($127) { + $128 = $6; + $129 = $4; + $130 = $7; + $131 = $130<<2; + _memmove(($128|0),($129|0),($131|0))|0; + } + $132 = ((($35)) + 36|0); + $133 = HEAP32[$132>>2]|0; + $134 = ($133|0)!=(0); + if (!($134)) { + $172 = ((($35)) + 16|0); + HEAP32[$172>>2] = 0; + STACKTOP = sp;return; + } + $135 = ((($35)) + 36|0); + $136 = HEAP32[$135>>2]|0; + $137 = (($136) + 2)|0; + $138 = $137<<2; + $34 = $138; + $139 = $34; + $140 = (__ZN6laszip5utilsL14aligned_mallocEi($139)|0); + $141 = ((($35)) + 16|0); + HEAP32[$141>>2] = $140; + $142 = $33; + $143 = ((($142)) + 16|0); + $144 = HEAP32[$143>>2]|0; + $145 = $33; + $146 = ((($145)) + 16|0); + $147 = HEAP32[$146>>2]|0; + $148 = ((($35)) + 36|0); + $149 = HEAP32[$148>>2]|0; + $150 = (($149) + 2)|0; + $151 = (($147) + ($150<<2)|0); + $152 = ((($35)) + 16|0); + $153 = HEAP32[$152>>2]|0; + $19 = $144; + $20 = $151; + $21 = $153; + $154 = $19; + $18 = $154; + $155 = $18; + $156 = $20; + $12 = $156; + $157 = $12; + $158 = $21; + $13 = $158; + $159 = $13; + $14 = $155; + $15 = $157; + $16 = $159; + $160 = $15; + $161 = $14; + $162 = $160; + $163 = $161; + $164 = (($162) - ($163))|0; + $165 = (($164|0) / 4)&-1; + $17 = $165; + $166 = $17; + $167 = ($166>>>0)>(0); + if ($167) { + $168 = $16; + $169 = $14; + $170 = $17; + $171 = $170<<2; + _memmove(($168|0),($169|0),($171|0))|0; + } + STACKTOP = sp;return; +} +function __ZN6laszip6models10arithmetic6updateEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $1 = $0; + $9 = $1; + $10 = ((($9)) + 24|0); + $11 = HEAP32[$10>>2]|0; + $12 = ((($9)) + 20|0); + $13 = HEAP32[$12>>2]|0; + $14 = (($13) + ($11))|0; + HEAP32[$12>>2] = $14; + $15 = ($14>>>0)>(32768); + L1: do { + if ($15) { + $16 = ((($9)) + 20|0); + HEAP32[$16>>2] = 0; + $2 = 0; + while(1) { + $17 = $2; + $18 = HEAP32[$9>>2]|0; + $19 = ($17>>>0)<($18>>>0); + if (!($19)) { + break L1; + } + $20 = ((($9)) + 12|0); + $21 = HEAP32[$20>>2]|0; + $22 = $2; + $23 = (($21) + ($22<<2)|0); + $24 = HEAP32[$23>>2]|0; + $25 = (($24) + 1)|0; + $26 = $25 >>> 1; + $27 = ((($9)) + 12|0); + $28 = HEAP32[$27>>2]|0; + $29 = $2; + $30 = (($28) + ($29<<2)|0); + HEAP32[$30>>2] = $26; + $31 = ((($9)) + 20|0); + $32 = HEAP32[$31>>2]|0; + $33 = (($32) + ($26))|0; + HEAP32[$31>>2] = $33; + $34 = $2; + $35 = (($34) + 1)|0; + $2 = $35; + } + } + } while(0); + $4 = 0; + $5 = 0; + $36 = ((($9)) + 20|0); + $37 = HEAP32[$36>>2]|0; + $38 = (2147483648 / ($37>>>0))&-1; + $6 = $38; + $39 = ((($9)) + 4|0); + $40 = HEAP8[$39>>0]|0; + $41 = $40&1; + L7: do { + if ($41) { + label = 7; + } else { + $42 = ((($9)) + 36|0); + $43 = HEAP32[$42>>2]|0; + $44 = ($43|0)==(0); + if ($44) { + label = 7; + } else { + $3 = 0; + while(1) { + $65 = $3; + $66 = HEAP32[$9>>2]|0; + $67 = ($65>>>0)<($66>>>0); + if (!($67)) { + break; + } + $68 = $6; + $69 = $4; + $70 = Math_imul($68, $69)|0; + $71 = $70 >>> 16; + $72 = ((($9)) + 8|0); + $73 = HEAP32[$72>>2]|0; + $74 = $3; + $75 = (($73) + ($74<<2)|0); + HEAP32[$75>>2] = $71; + $76 = ((($9)) + 12|0); + $77 = HEAP32[$76>>2]|0; + $78 = $3; + $79 = (($77) + ($78<<2)|0); + $80 = HEAP32[$79>>2]|0; + $81 = $4; + $82 = (($81) + ($80))|0; + $4 = $82; + $83 = ((($9)) + 8|0); + $84 = HEAP32[$83>>2]|0; + $85 = $3; + $86 = (($84) + ($85<<2)|0); + $87 = HEAP32[$86>>2]|0; + $88 = ((($9)) + 40|0); + $89 = HEAP32[$88>>2]|0; + $90 = $87 >>> $89; + $7 = $90; + while(1) { + $91 = $5; + $92 = $7; + $93 = ($91>>>0)<($92>>>0); + $94 = $3; + if (!($93)) { + break; + } + $95 = (($94) - 1)|0; + $96 = ((($9)) + 16|0); + $97 = HEAP32[$96>>2]|0; + $98 = $5; + $99 = (($98) + 1)|0; + $5 = $99; + $100 = (($97) + ($99<<2)|0); + HEAP32[$100>>2] = $95; + } + $101 = (($94) + 1)|0; + $3 = $101; + } + $102 = ((($9)) + 16|0); + $103 = HEAP32[$102>>2]|0; + HEAP32[$103>>2] = 0; + while(1) { + $104 = $5; + $105 = ((($9)) + 36|0); + $106 = HEAP32[$105>>2]|0; + $107 = ($104>>>0)<=($106>>>0); + if (!($107)) { + break L7; + } + $108 = HEAP32[$9>>2]|0; + $109 = (($108) - 1)|0; + $110 = ((($9)) + 16|0); + $111 = HEAP32[$110>>2]|0; + $112 = $5; + $113 = (($112) + 1)|0; + $5 = $113; + $114 = (($111) + ($113<<2)|0); + HEAP32[$114>>2] = $109; + } + } + } + } while(0); + L21: do { + if ((label|0) == 7) { + $3 = 0; + while(1) { + $45 = $3; + $46 = HEAP32[$9>>2]|0; + $47 = ($45>>>0)<($46>>>0); + if (!($47)) { + break L21; + } + $48 = $6; + $49 = $4; + $50 = Math_imul($48, $49)|0; + $51 = $50 >>> 16; + $52 = ((($9)) + 8|0); + $53 = HEAP32[$52>>2]|0; + $54 = $3; + $55 = (($53) + ($54<<2)|0); + HEAP32[$55>>2] = $51; + $56 = ((($9)) + 12|0); + $57 = HEAP32[$56>>2]|0; + $58 = $3; + $59 = (($57) + ($58<<2)|0); + $60 = HEAP32[$59>>2]|0; + $61 = $4; + $62 = (($61) + ($60))|0; + $4 = $62; + $63 = $3; + $64 = (($63) + 1)|0; + $3 = $64; + } + } + } while(0); + $115 = ((($9)) + 24|0); + $116 = HEAP32[$115>>2]|0; + $117 = ($116*5)|0; + $118 = $117 >>> 2; + $119 = ((($9)) + 24|0); + HEAP32[$119>>2] = $118; + $120 = HEAP32[$9>>2]|0; + $121 = (($120) + 6)|0; + $122 = $121 << 3; + $8 = $122; + $123 = ((($9)) + 24|0); + $124 = HEAP32[$123>>2]|0; + $125 = $8; + $126 = ($124>>>0)>($125>>>0); + if (!($126)) { + $129 = ((($9)) + 24|0); + $130 = HEAP32[$129>>2]|0; + $131 = ((($9)) + 28|0); + HEAP32[$131>>2] = $130; + STACKTOP = sp;return; + } + $127 = $8; + $128 = ((($9)) + 24|0); + HEAP32[$128>>2] = $127; + $129 = ((($9)) + 24|0); + $130 = HEAP32[$129>>2]|0; + $131 = ((($9)) + 28|0); + HEAP32[$131>>2] = $130; + STACKTOP = sp;return; +} +function __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $7 = $0; + $8 = $1; + $9 = $2; + $13 = $7; + $14 = $8; + $15 = $9; + $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0); + HEAP32[$13>>2] = $16; + $17 = HEAP32[$13>>2]|0; + $18 = ($17|0)!=(0); + if (!($18)) { + $69 = $8; + $70 = ((($13)) + 48|0); + $71 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0); + $10 = $71; + $72 = $10; + STACKTOP = sp;return ($72|0); + } + $19 = HEAP32[$13>>2]|0; + $20 = ($19>>>0)<(32); + if (!($20)) { + $67 = ((($13)) + 28|0); + $68 = HEAP32[$67>>2]|0; + $10 = $68; + $72 = $10; + STACKTOP = sp;return ($72|0); + } + $21 = HEAP32[$13>>2]|0; + $22 = ((($13)) + 12|0); + $23 = HEAP32[$22>>2]|0; + $24 = ($21>>>0)<=($23>>>0); + if ($24) { + $25 = $8; + $26 = ((($13)) + 68|0); + $27 = HEAP32[$13>>2]|0; + $28 = (($27) - 1)|0; + $5 = $26; + $6 = $28; + $29 = $5; + $30 = HEAP32[$29>>2]|0; + $31 = $6; + $32 = (($30) + (($31*44)|0)|0); + $33 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0); + $10 = $33; + } else { + $34 = HEAP32[$13>>2]|0; + $35 = ((($13)) + 12|0); + $36 = HEAP32[$35>>2]|0; + $37 = (($34) - ($36))|0; + $11 = $37; + $38 = $8; + $39 = ((($13)) + 68|0); + $40 = HEAP32[$13>>2]|0; + $41 = (($40) - 1)|0; + $3 = $39; + $4 = $41; + $42 = $3; + $43 = HEAP32[$42>>2]|0; + $44 = $4; + $45 = (($43) + (($44*44)|0)|0); + $46 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0); + $10 = $46; + $47 = $8; + $48 = $11; + $49 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($47,$48)|0); + $12 = $49; + $50 = $10; + $51 = $11; + $52 = $50 << $51; + $53 = $12; + $54 = $52 | $53; + $10 = $54; + } + $55 = $10; + $56 = HEAP32[$13>>2]|0; + $57 = (($56) - 1)|0; + $58 = 1 << $57; + $59 = ($55|0)>=($58|0); + if ($59) { + $60 = $10; + $61 = (($60) + 1)|0; + $10 = $61; + $72 = $10; + STACKTOP = sp;return ($72|0); + } else { + $62 = HEAP32[$13>>2]|0; + $63 = 1 << $62; + $64 = (($63) - 1)|0; + $65 = $10; + $66 = (($65) - ($64))|0; + $10 = $66; + $72 = $10; + STACKTOP = sp;return ($72|0); + } + return (0)|0; +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $2 = $0; + $3 = $1; + $13 = $2; + $14 = ((($13)) + 8|0); + $15 = HEAP32[$14>>2]|0; + $7 = $15; + $16 = $3; + $17 = ((($16)) + 16|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($18|0)!=(0|0); + if ($19) { + $20 = ((($13)) + 4|0); + $21 = HEAP32[$20>>2]|0; + $22 = ((($13)) + 8|0); + $23 = HEAP32[$22>>2]|0; + $24 = $23 >>> 15; + HEAP32[$22>>2] = $24; + $25 = (($21>>>0) / ($24>>>0))&-1; + $8 = $25; + $26 = $8; + $27 = $3; + $28 = ((($27)) + 40|0); + $29 = HEAP32[$28>>2]|0; + $30 = $26 >>> $29; + $9 = $30; + $31 = $3; + $32 = ((($31)) + 16|0); + $33 = HEAP32[$32>>2]|0; + $34 = $9; + $35 = (($33) + ($34<<2)|0); + $36 = HEAP32[$35>>2]|0; + $5 = $36; + $37 = $3; + $38 = ((($37)) + 16|0); + $39 = HEAP32[$38>>2]|0; + $40 = $9; + $41 = (($40) + 1)|0; + $42 = (($39) + ($41<<2)|0); + $43 = HEAP32[$42>>2]|0; + $44 = (($43) + 1)|0; + $4 = $44; + while(1) { + $45 = $4; + $46 = $5; + $47 = (($46) + 1)|0; + $48 = ($45>>>0)>($47>>>0); + if (!($48)) { + break; + } + $49 = $5; + $50 = $4; + $51 = (($49) + ($50))|0; + $52 = $51 >>> 1; + $10 = $52; + $53 = $3; + $54 = ((($53)) + 8|0); + $55 = HEAP32[$54>>2]|0; + $56 = $10; + $57 = (($55) + ($56<<2)|0); + $58 = HEAP32[$57>>2]|0; + $59 = $8; + $60 = ($58>>>0)>($59>>>0); + $61 = $10; + if ($60) { + $4 = $61; + } else { + $5 = $61; + } + } + $62 = $3; + $63 = ((($62)) + 8|0); + $64 = HEAP32[$63>>2]|0; + $65 = $5; + $66 = (($64) + ($65<<2)|0); + $67 = HEAP32[$66>>2]|0; + $68 = ((($13)) + 8|0); + $69 = HEAP32[$68>>2]|0; + $70 = Math_imul($67, $69)|0; + $6 = $70; + $71 = $5; + $72 = $3; + $73 = ((($72)) + 32|0); + $74 = HEAP32[$73>>2]|0; + $75 = ($71|0)!=($74|0); + if ($75) { + $76 = $3; + $77 = ((($76)) + 8|0); + $78 = HEAP32[$77>>2]|0; + $79 = $5; + $80 = (($79) + 1)|0; + $81 = (($78) + ($80<<2)|0); + $82 = HEAP32[$81>>2]|0; + $83 = ((($13)) + 8|0); + $84 = HEAP32[$83>>2]|0; + $85 = Math_imul($82, $84)|0; + $7 = $85; + } + } else { + $5 = 0; + $6 = 0; + $86 = ((($13)) + 8|0); + $87 = HEAP32[$86>>2]|0; + $88 = $87 >>> 15; + HEAP32[$86>>2] = $88; + $89 = $3; + $90 = HEAP32[$89>>2]|0; + $4 = $90; + $91 = $90 >>> 1; + $11 = $91; + while(1) { + $92 = ((($13)) + 8|0); + $93 = HEAP32[$92>>2]|0; + $94 = $3; + $95 = ((($94)) + 8|0); + $96 = HEAP32[$95>>2]|0; + $97 = $11; + $98 = (($96) + ($97<<2)|0); + $99 = HEAP32[$98>>2]|0; + $100 = Math_imul($93, $99)|0; + $12 = $100; + $101 = $12; + $102 = ((($13)) + 4|0); + $103 = HEAP32[$102>>2]|0; + $104 = ($101>>>0)>($103>>>0); + $105 = $11; + if ($104) { + $4 = $105; + $106 = $12; + $7 = $106; + } else { + $5 = $105; + $107 = $12; + $6 = $107; + } + $108 = $5; + $109 = $4; + $110 = (($108) + ($109))|0; + $111 = $110 >>> 1; + $11 = $111; + $112 = $5; + $113 = ($111|0)!=($112|0); + if (!($113)) { + break; + } + } + } + $114 = $6; + $115 = ((($13)) + 4|0); + $116 = HEAP32[$115>>2]|0; + $117 = (($116) - ($114))|0; + HEAP32[$115>>2] = $117; + $118 = $7; + $119 = $6; + $120 = (($118) - ($119))|0; + $121 = ((($13)) + 8|0); + HEAP32[$121>>2] = $120; + $122 = ((($13)) + 8|0); + $123 = HEAP32[$122>>2]|0; + $124 = ($123>>>0)<(16777216); + if ($124) { + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($13); + } + $125 = $3; + $126 = ((($125)) + 12|0); + $127 = HEAP32[$126>>2]|0; + $128 = $5; + $129 = (($127) + ($128<<2)|0); + $130 = HEAP32[$129>>2]|0; + $131 = (($130) + 1)|0; + HEAP32[$129>>2] = $131; + $132 = $3; + $133 = ((($132)) + 28|0); + $134 = HEAP32[$133>>2]|0; + $135 = (($134) + -1)|0; + HEAP32[$133>>2] = $135; + $136 = ($135|0)==(0); + if (!($136)) { + $138 = $5; + STACKTOP = sp;return ($138|0); + } + $137 = $3; + __ZN6laszip6models10arithmetic6updateEv($137); + $138 = $5; + STACKTOP = sp;return ($138|0); +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $3 = $0; + $4 = $1; + $8 = $3; + $9 = $4; + $10 = ($9|0)!=(0); + $11 = $4; + $12 = ($11>>>0)<=(32); + $or$cond = $10 & $12; + if (!($or$cond)) { + ___assert_fail((5409|0),(5430|0),139,(5499|0)); + // unreachable; + } + $13 = $4; + $14 = ($13>>>0)>(19); + if ($14) { + $15 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($8)|0); + $16 = $15&65535; + $5 = $16; + $17 = $4; + $18 = (($17) - 16)|0; + $4 = $18; + $19 = $4; + $20 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($8,$19)|0); + $21 = $20 << 16; + $6 = $21; + $22 = $6; + $23 = $5; + $24 = $22 | $23; + $2 = $24; + $43 = $2; + STACKTOP = sp;return ($43|0); + } + $25 = ((($8)) + 4|0); + $26 = HEAP32[$25>>2]|0; + $27 = $4; + $28 = ((($8)) + 8|0); + $29 = HEAP32[$28>>2]|0; + $30 = $29 >>> $27; + HEAP32[$28>>2] = $30; + $31 = (($26>>>0) / ($30>>>0))&-1; + $7 = $31; + $32 = ((($8)) + 8|0); + $33 = HEAP32[$32>>2]|0; + $34 = $7; + $35 = Math_imul($33, $34)|0; + $36 = ((($8)) + 4|0); + $37 = HEAP32[$36>>2]|0; + $38 = (($37) - ($35))|0; + HEAP32[$36>>2] = $38; + $39 = ((($8)) + 8|0); + $40 = HEAP32[$39>>2]|0; + $41 = ($40>>>0)<(16777216); + if ($41) { + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($8); + } + $42 = $7; + $2 = $42; + $43 = $2; + STACKTOP = sp;return ($43|0); +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $6 = $2; + $7 = $3; + $8 = ((($7)) + 8|0); + $9 = HEAP32[$8>>2]|0; + $10 = ((($6)) + 8|0); + $11 = HEAP32[$10>>2]|0; + $12 = $11 >>> 13; + $13 = Math_imul($9, $12)|0; + $4 = $13; + $14 = ((($6)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $4; + $17 = ($15>>>0)>=($16>>>0); + $18 = $17&1; + $5 = $18; + $19 = $5; + $20 = ($19|0)==(0); + $21 = $4; + if ($20) { + $22 = ((($6)) + 8|0); + HEAP32[$22>>2] = $21; + $23 = $3; + $24 = ((($23)) + 12|0); + $25 = HEAP32[$24>>2]|0; + $26 = (($25) + 1)|0; + HEAP32[$24>>2] = $26; + } else { + $27 = ((($6)) + 4|0); + $28 = HEAP32[$27>>2]|0; + $29 = (($28) - ($21))|0; + HEAP32[$27>>2] = $29; + $30 = $4; + $31 = ((($6)) + 8|0); + $32 = HEAP32[$31>>2]|0; + $33 = (($32) - ($30))|0; + HEAP32[$31>>2] = $33; + } + $34 = ((($6)) + 8|0); + $35 = HEAP32[$34>>2]|0; + $36 = ($35>>>0)<(16777216); + if ($36) { + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($6); + } + $37 = $3; + $38 = ((($37)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $40 = (($39) + -1)|0; + HEAP32[$38>>2] = $40; + $41 = ($40|0)==(0); + if (!($41)) { + $43 = $5; + STACKTOP = sp;return ($43|0); + } + $42 = $3; + __ZN6laszip6models14arithmetic_bit6updateEv($42); + $43 = $5; + STACKTOP = sp;return ($43|0); +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + while(1) { + $3 = ((($2)) + 4|0); + $4 = HEAP32[$3>>2]|0; + $5 = $4 << 8; + $6 = HEAP32[$2>>2]|0; + $7 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($6)|0); + $8 = $7&255; + $9 = $5 | $8; + $10 = ((($2)) + 4|0); + HEAP32[$10>>2] = $9; + $11 = ((($2)) + 8|0); + $12 = HEAP32[$11>>2]|0; + $13 = $12 << 8; + HEAP32[$11>>2] = $13; + $14 = ($13>>>0)<(16777216); + if (!($14)) { + break; + } + } + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($0) { + $0 = $0|0; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $3 = $1; + $4 = ((($3)) + 4|0); + $5 = HEAP32[$4>>2]|0; + $6 = ((($3)) + 8|0); + $7 = HEAP32[$6>>2]|0; + $8 = $7 >>> 16; + HEAP32[$6>>2] = $8; + $9 = (($5>>>0) / ($8>>>0))&-1; + $2 = $9; + $10 = ((($3)) + 8|0); + $11 = HEAP32[$10>>2]|0; + $12 = $2; + $13 = Math_imul($11, $12)|0; + $14 = ((($3)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = (($15) - ($13))|0; + HEAP32[$14>>2] = $16; + $17 = ((($3)) + 8|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($18>>>0)<(16777216); + if ($19) { + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($3); + } + $20 = $2; + $21 = ($20>>>0)<(65536); + if ($21) { + $22 = $2; + $23 = $22&65535; + STACKTOP = sp;return ($23|0); + } else { + ___assert_fail((5508|0),(5430|0),172,(5522|0)); + // unreachable; + } + return (0)|0; +} +function __ZN6laszip6models14arithmetic_bit6updateEv($0) { + $0 = $0|0; + 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; + 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; + var $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $3 = $1; + $4 = HEAP32[$3>>2]|0; + $5 = ((($3)) + 16|0); + $6 = HEAP32[$5>>2]|0; + $7 = (($6) + ($4))|0; + HEAP32[$5>>2] = $7; + $8 = ($7>>>0)>(8192); + if ($8) { + $9 = ((($3)) + 16|0); + $10 = HEAP32[$9>>2]|0; + $11 = (($10) + 1)|0; + $12 = $11 >>> 1; + $13 = ((($3)) + 16|0); + HEAP32[$13>>2] = $12; + $14 = ((($3)) + 12|0); + $15 = HEAP32[$14>>2]|0; + $16 = (($15) + 1)|0; + $17 = $16 >>> 1; + $18 = ((($3)) + 12|0); + HEAP32[$18>>2] = $17; + $19 = ((($3)) + 12|0); + $20 = HEAP32[$19>>2]|0; + $21 = ((($3)) + 16|0); + $22 = HEAP32[$21>>2]|0; + $23 = ($20|0)==($22|0); + if ($23) { + $24 = ((($3)) + 16|0); + $25 = HEAP32[$24>>2]|0; + $26 = (($25) + 1)|0; + HEAP32[$24>>2] = $26; + } + } + $27 = ((($3)) + 16|0); + $28 = HEAP32[$27>>2]|0; + $29 = (2147483648 / ($28>>>0))&-1; + $2 = $29; + $30 = ((($3)) + 12|0); + $31 = HEAP32[$30>>2]|0; + $32 = $2; + $33 = Math_imul($31, $32)|0; + $34 = $33 >>> 18; + $35 = ((($3)) + 8|0); + HEAP32[$35>>2] = $34; + $36 = HEAP32[$3>>2]|0; + $37 = ($36*5)|0; + $38 = $37 >>> 2; + HEAP32[$3>>2] = $38; + $39 = HEAP32[$3>>2]|0; + $40 = ($39>>>0)>(64); + if (!($40)) { + $41 = HEAP32[$3>>2]|0; + $42 = ((($3)) + 4|0); + HEAP32[$42>>2] = $41; + STACKTOP = sp;return; + } + HEAP32[$3>>2] = 64; + $41 = HEAP32[$3>>2]|0; + $42 = ((($3)) + 4|0); + HEAP32[$42>>2] = $41; + STACKTOP = sp;return; +} +function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0); + $$byval_copy = sp + 356|0; + $7 = sp + 332|0; + $13 = sp + 308|0; + $21 = sp + 272|0; + $28 = sp + 240|0; + $34 = sp + 216|0; + $39 = sp + 192|0; + $40 = sp + 184|0; + $46 = sp + 160|0; + $52 = sp + 136|0; + $57 = sp + 112|0; + $63 = sp + 88|0; + $69 = sp + 64|0; + $74 = sp + 40|0; + $82 = sp; + $80 = $0; + $81 = $1; + $83 = $80; + $84 = ((($83)) + 328|0); + $85 = ((($84)) + 8|0); + $86 = $85; + $87 = $86; + $88 = HEAP32[$87>>2]|0; + $89 = (($86) + 4)|0; + $90 = $89; + $91 = HEAP32[$90>>2]|0; + $92 = ((($83)) + 247|0); + $93 = ((($92)) + 12|0); + $94 = HEAPU8[$93>>0]|(HEAPU8[$93+1>>0]<<8)|(HEAPU8[$93+2>>0]<<16)|(HEAPU8[$93+3>>0]<<24); + $95 = ($88|0)==($94|0); + $96 = ($91|0)==(0); + $97 = $95 & $96; + if (!($97)) { + $98 = ((($83)) + 320|0); + $79 = $98; + $99 = $79; + $78 = $99; + $100 = $78; + $101 = HEAP32[$100>>2]|0; + $102 = ($101|0)!=(0|0); + if ($102) { + $103 = ((($83)) + 312|0); + $77 = $103; + $104 = $77; + $76 = $104; + $105 = $76; + $106 = HEAP32[$105>>2]|0; + $107 = ($106|0)!=(0|0); + if ($107) { + $258 = ((($83)) + 320|0); + $75 = $258; + $259 = $75; + $260 = HEAP32[$259>>2]|0; + $261 = HEAP32[$260>>2]|0; + $262 = HEAP32[$261>>2]|0; + $263 = $81; + (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0); + $264 = ((($83)) + 328|0); + $265 = ((($264)) + 8|0); + $266 = $265; + $267 = $266; + $268 = HEAP32[$267>>2]|0; + $269 = (($266) + 4)|0; + $270 = $269; + $271 = HEAP32[$270>>2]|0; + $272 = (_i64Add(($268|0),($271|0),1,0)|0); + $273 = tempRet0; + $274 = $265; + $275 = $274; + HEAP32[$275>>2] = $272; + $276 = (($274) + 4)|0; + $277 = $276; + HEAP32[$277>>2] = $273; + STACKTOP = sp;return; + } + } + } + $108 = ((($83)) + 320|0); + $73 = $108; + $109 = $73; + $72 = $74; + $110 = $72; + HEAP32[$110>>2] = 0; + $111 = ((($110)) + 4|0); + HEAP32[$111>>2] = 0; + $70 = $74; + $71 = $109; + $112 = $70; + $113 = $71; + $67 = $112; + $68 = $113; + $114 = $67; + $66 = $114; + $115 = $66; + $116 = HEAP32[$115>>2]|0; + HEAP32[$69>>2] = $116; + $117 = $68; + $64 = $117; + $118 = $64; + $119 = HEAP32[$118>>2]|0; + $120 = $67; + HEAP32[$120>>2] = $119; + $65 = $69; + $121 = $65; + $122 = HEAP32[$121>>2]|0; + $123 = $68; + HEAP32[$123>>2] = $122; + $124 = ((($112)) + 4|0); + $125 = $71; + $126 = ((($125)) + 4|0); + $61 = $124; + $62 = $126; + $127 = $61; + $60 = $127; + $128 = $60; + $129 = HEAP32[$128>>2]|0; + HEAP32[$63>>2] = $129; + $130 = $62; + $58 = $130; + $131 = $58; + $132 = HEAP32[$131>>2]|0; + $133 = $61; + HEAP32[$133>>2] = $132; + $59 = $63; + $134 = $59; + $135 = HEAP32[$134>>2]|0; + $136 = $62; + HEAP32[$136>>2] = $135; + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($74); + $137 = ((($83)) + 312|0); + $56 = $137; + $138 = $56; + $55 = $57; + $139 = $55; + HEAP32[$139>>2] = 0; + $140 = ((($139)) + 4|0); + HEAP32[$140>>2] = 0; + $53 = $57; + $54 = $138; + $141 = $53; + $142 = $54; + $50 = $141; + $51 = $142; + $143 = $50; + $49 = $143; + $144 = $49; + $145 = HEAP32[$144>>2]|0; + HEAP32[$52>>2] = $145; + $146 = $51; + $47 = $146; + $147 = $47; + $148 = HEAP32[$147>>2]|0; + $149 = $50; + HEAP32[$149>>2] = $148; + $48 = $52; + $150 = $48; + $151 = HEAP32[$150>>2]|0; + $152 = $51; + HEAP32[$152>>2] = $151; + $153 = ((($141)) + 4|0); + $154 = $54; + $155 = ((($154)) + 4|0); + $44 = $153; + $45 = $155; + $156 = $44; + $43 = $156; + $157 = $43; + $158 = HEAP32[$157>>2]|0; + HEAP32[$46>>2] = $158; + $159 = $45; + $41 = $159; + $160 = $41; + $161 = HEAP32[$160>>2]|0; + $162 = $44; + HEAP32[$162>>2] = $161; + $42 = $46; + $163 = $42; + $164 = HEAP32[$163>>2]|0; + $165 = $45; + HEAP32[$165>>2] = $164; + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($57); + $166 = ((($83)) + 312|0); + $167 = (__Znwj(12)|0); + $168 = ((($83)) + 4|0); + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($167,$168); + $37 = $166; + $38 = $167; + $169 = $37; + $170 = $38; + ;HEAP32[$40>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$40>>2]|0; + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($39,$170,$$byval_copy); + $35 = $39; + $36 = $169; + $171 = $35; + $172 = $36; + $32 = $171; + $33 = $172; + $173 = $32; + $31 = $173; + $174 = $31; + $175 = HEAP32[$174>>2]|0; + HEAP32[$34>>2] = $175; + $176 = $33; + $29 = $176; + $177 = $29; + $178 = HEAP32[$177>>2]|0; + $179 = $32; + HEAP32[$179>>2] = $178; + $30 = $34; + $180 = $30; + $181 = HEAP32[$180>>2]|0; + $182 = $33; + HEAP32[$182>>2] = $181; + $183 = ((($171)) + 4|0); + $184 = $36; + $185 = ((($184)) + 4|0); + $26 = $183; + $27 = $185; + $186 = $26; + $25 = $186; + $187 = $25; + $188 = HEAP32[$187>>2]|0; + HEAP32[$28>>2] = $188; + $189 = $27; + $23 = $189; + $190 = $23; + $191 = HEAP32[$190>>2]|0; + $192 = $26; + HEAP32[$192>>2] = $191; + $24 = $28; + $193 = $24; + $194 = HEAP32[$193>>2]|0; + $195 = $27; + HEAP32[$195>>2] = $194; + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($39); + $196 = ((($83)) + 312|0); + $22 = $196; + $197 = $22; + $198 = HEAP32[$197>>2]|0; + $199 = ((($83)) + 300|0); + __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($82,$198,$199); + $200 = ((($83)) + 320|0); + $19 = $200; + $20 = $82; + $201 = $19; + $202 = $20; + $18 = $202; + $203 = $18; + $16 = $21; + $17 = $203; + $204 = $16; + $205 = $17; + $206 = HEAP32[$205>>2]|0; + HEAP32[$204>>2] = $206; + $207 = ((($204)) + 4|0); + $208 = $17; + $209 = ((($208)) + 4|0); + $210 = HEAP32[$209>>2]|0; + HEAP32[$207>>2] = $210; + $211 = $17; + HEAP32[$211>>2] = 0; + $212 = $17; + $213 = ((($212)) + 4|0); + HEAP32[$213>>2] = 0; + $14 = $21; + $15 = $201; + $214 = $14; + $215 = $15; + $11 = $214; + $12 = $215; + $216 = $11; + $10 = $216; + $217 = $10; + $218 = HEAP32[$217>>2]|0; + HEAP32[$13>>2] = $218; + $219 = $12; + $8 = $219; + $220 = $8; + $221 = HEAP32[$220>>2]|0; + $222 = $11; + HEAP32[$222>>2] = $221; + $9 = $13; + $223 = $9; + $224 = HEAP32[$223>>2]|0; + $225 = $12; + HEAP32[$225>>2] = $224; + $226 = ((($214)) + 4|0); + $227 = $15; + $228 = ((($227)) + 4|0); + $5 = $226; + $6 = $228; + $229 = $5; + $4 = $229; + $230 = $4; + $231 = HEAP32[$230>>2]|0; + HEAP32[$7>>2] = $231; + $232 = $6; + $2 = $232; + $233 = $2; + $234 = HEAP32[$233>>2]|0; + $235 = $5; + HEAP32[$235>>2] = $234; + $3 = $7; + $236 = $3; + $237 = HEAP32[$236>>2]|0; + $238 = $6; + HEAP32[$238>>2] = $237; + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($21); + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($82); + $239 = ((($83)) + 328|0); + $240 = $239; + $241 = $240; + $242 = HEAP32[$241>>2]|0; + $243 = (($240) + 4)|0; + $244 = $243; + $245 = HEAP32[$244>>2]|0; + $246 = (_i64Add(($242|0),($245|0),1,0)|0); + $247 = tempRet0; + $248 = $239; + $249 = $248; + HEAP32[$249>>2] = $246; + $250 = (($248) + 4)|0; + $251 = $250; + HEAP32[$251>>2] = $247; + $252 = ((($83)) + 328|0); + $253 = ((($252)) + 8|0); + $254 = $253; + $255 = $254; + HEAP32[$255>>2] = 0; + $256 = (($254) + 4)|0; + $257 = $256; + HEAP32[$257>>2] = 0; + $258 = ((($83)) + 320|0); + $75 = $258; + $259 = $75; + $260 = HEAP32[$259>>2]|0; + $261 = HEAP32[$260>>2]|0; + $262 = HEAP32[$261>>2]|0; + $263 = $81; + (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0); + $264 = ((($83)) + 328|0); + $265 = ((($264)) + 8|0); + $266 = $265; + $267 = $266; + $268 = HEAP32[$267>>2]|0; + $269 = (($266) + 4)|0; + $270 = $269; + $271 = HEAP32[$270>>2]|0; + $272 = (_i64Add(($268|0),($271|0),1,0)|0); + $273 = tempRet0; + $274 = $265; + $275 = $274; + HEAP32[$275>>2] = $272; + $276 = (($274) + 4)|0; + $277 = $276; + HEAP32[$277>>2] = $273; + STACKTOP = sp;return; +} +function __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + var $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $5 = sp; + $15 = sp + 64|0; + $16 = sp + 8|0; + $17 = sp + 4|0; + $11 = $1; + $12 = $2; + $18 = $12; + $19 = (__ZNK6laszip7factory13record_schema6formatEv($18)|0); + $13 = $19; + $20 = $13; + $21 = ($20|0)==(-1); + if ($21) { + $22 = (___cxa_allocate_exception(8)|0); + __ZN6laszip19unknown_schema_typeC2Ev($22); + ___cxa_throw(($22|0),(256|0),(47|0)); + // unreachable; + } + $23 = $12; + $24 = (__ZNK6laszip7factory13record_schema10extrabytesEv($23)|0); + $14 = $24; + $25 = $14; + $26 = ($25|0)!=(0); + if ($26) { + $27 = $11; + __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($15,$27); + $10 = $15; + $28 = $10; + $29 = HEAP32[$28>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($29); + $30 = $13; + $31 = ($30|0)==(1); + $32 = $13; + $33 = ($32|0)==(3); + $or$cond = $31 | $33; + if ($or$cond) { + $8 = $15; + $34 = $8; + $35 = HEAP32[$34>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($35); + } + $36 = $13; + $37 = ($36|0)==(2); + $38 = $13; + $39 = ($38|0)==(3); + $or$cond3 = $37 | $39; + if ($or$cond3) { + $7 = $15; + $40 = $7; + $41 = HEAP32[$40>>2]|0; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($41); + } + $6 = $15; + $42 = $6; + $43 = HEAP32[$42>>2]|0; + $44 = $14; + __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($16,$44); + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($43,$16); + __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($16); + ;HEAP32[$17>>2]=0|0; + ;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; + $3 = $0; + $4 = $15; + $45 = $3; + $46 = $4; + $47 = HEAP32[$46>>2]|0; + HEAP32[$45>>2] = $47; + $48 = ((($45)) + 4|0); + $49 = $4; + $50 = ((($49)) + 4|0); + $51 = HEAP32[$50>>2]|0; + HEAP32[$48>>2] = $51; + $52 = $4; + HEAP32[$52>>2] = 0; + $53 = $4; + $54 = ((($53)) + 4|0); + HEAP32[$54>>2] = 0; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($15); + STACKTOP = sp;return; + } + $55 = $13; + switch ($55|0) { + case 0: { + $56 = $11; + $57 = (__Znwj(4788)|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($57); + __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); + STACKTOP = sp;return; + break; + } + case 1: { + $58 = $11; + $59 = (__Znwj(5116)|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($59); + __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); + STACKTOP = sp;return; + break; + } + case 2: { + $60 = $11; + $61 = (__Znwj(5104)|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($61); + __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); + STACKTOP = sp;return; + break; + } + case 3: { + $62 = $11; + $63 = (__Znwj(5432)|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($63); + __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); + STACKTOP = sp;return; + break; + } + default: { + $9 = $0; + $64 = $9; + HEAP32[$64>>2] = 0; + $65 = ((($64)) + 4|0); + HEAP32[$65>>2] = 0; + STACKTOP = sp;return; + } + } +} +function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $50 = sp + 76|0; + $51 = sp + 72|0; + $52 = sp + 8|0; + $53 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$52>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$53>>0]=HEAP8[$66>>0]|0; + $49 = $79; + HEAP32[$50>>2] = $80; + $81 = $49; + $47 = $81; + $48 = 0; + $82 = $47; + $83 = $48; + $45 = $82; + $46 = $83; + $84 = $45; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $46; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $48; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (1908); + $89 = ((($81)) + 12|0); + $21 = $53; + $90 = $21; + $30 = $51; + $31 = $50; + $32 = $90; + $91 = $30; + $92 = $31; + $29 = $92; + $93 = $29; + $23 = $91; + $24 = $93; + $94 = $23; + $95 = $24; + $22 = $95; + $96 = $22; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $32; + $25 = $98; + $99 = $25; + $27 = $91; + $28 = $99; + $100 = $28; + $26 = $100; + $33 = $52; + $101 = $33; + $42 = $89; + $43 = $51; + $44 = $101; + $102 = $42; + $103 = $43; + $41 = $103; + $104 = $41; + $35 = $102; + $36 = $104; + $105 = $35; + $106 = $36; + $34 = $106; + $107 = $34; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $44; + $37 = $108; + $109 = $37; + $39 = $102; + $40 = $109; + $110 = $40; + $38 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($68,$vararg_buffer); + $20 = $65; + $120 = $20; + $17 = $120; + $18 = 0; + $121 = $17; + $16 = $121; + $122 = $16; + $15 = $122; + $123 = $15; + $124 = HEAP32[$123>>2]|0; + $19 = $124; + $125 = $18; + $12 = $121; + $126 = $12; + $11 = $126; + $127 = $11; + HEAP32[$127>>2] = $125; + $128 = $19; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $10 = $121; + $130 = $10; + $9 = $130; + $131 = $9; + $132 = $19; + $13 = $131; + $14 = $132; + $133 = $14; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($133); + __ZdlPv($133); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $4 = $22; + $23 = $4; + $3 = $23; + $24 = $3; + $2 = $24; + $25 = $2; + $1 = $25; + $26 = $1; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($28); + __ZdlPv($28); + } + $30 = ((($16)) + 12|0); + $10 = $30; + $31 = $10; + $9 = $31; + $32 = $9; + $12 = $32; + $33 = $12; + $11 = $33; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 248; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZNK6laszip7factory13record_schema6formatEv($0) { + $0 = $0|0; + 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; + 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; + 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; + var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $13 = $0; + $15 = $13; + $11 = $15; + $16 = $11; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = HEAP32[$16>>2]|0; + $20 = $18; + $21 = $19; + $22 = (($20) - ($21))|0; + $23 = (($22|0) / 12)&-1; + $14 = $23; + $24 = $14; + $25 = ($24|0)==(0); + if ($25) { + $12 = -1; + $68 = $12; + STACKTOP = sp;return ($68|0); + } + $26 = (__ZNK6laszip7factory13record_schema10extrabytesEv($15)|0); + $27 = ($26|0)!=(0); + if ($27) { + $28 = $14; + $29 = (($28) + -1)|0; + $14 = $29; + } + $30 = $14; + $31 = ($30|0)==(0); + if (!($31)) { + $9 = $15; + $10 = 0; + $32 = $9; + $33 = HEAP32[$32>>2]|0; + $34 = $10; + $35 = (($33) + (($34*12)|0)|0); + $36 = (__ZN6laszip7factory11record_item5pointEv()|0); + $37 = (__ZNK6laszip7factory11record_itemneERKS1_($35,$36)|0); + if (!($37)) { + $38 = $14; + $39 = ($38|0)==(1); + if ($39) { + $12 = 0; + $68 = $12; + STACKTOP = sp;return ($68|0); + } + $40 = $14; + $41 = ($40|0)==(2); + if ($41) { + $7 = $15; + $8 = 1; + $42 = $7; + $43 = HEAP32[$42>>2]|0; + $44 = $8; + $45 = (($43) + (($44*12)|0)|0); + $46 = (__ZN6laszip7factory11record_item7gpstimeEv()|0); + $47 = (__ZNK6laszip7factory11record_itemeqERKS1_($45,$46)|0); + if ($47) { + $12 = 1; + $68 = $12; + STACKTOP = sp;return ($68|0); + } + $3 = $15; + $4 = 1; + $48 = $3; + $49 = HEAP32[$48>>2]|0; + $50 = $4; + $51 = (($49) + (($50*12)|0)|0); + $52 = (__ZN6laszip7factory11record_item3rgbEv()|0); + $53 = (__ZNK6laszip7factory11record_itemeqERKS1_($51,$52)|0); + if ($53) { + $12 = 2; + $68 = $12; + STACKTOP = sp;return ($68|0); + } + } + $54 = $14; + $55 = ($54|0)==(3); + if ($55) { + $1 = $15; + $2 = 1; + $56 = $1; + $57 = HEAP32[$56>>2]|0; + $58 = $2; + $59 = (($57) + (($58*12)|0)|0); + $60 = (__ZN6laszip7factory11record_item7gpstimeEv()|0); + $61 = (__ZNK6laszip7factory11record_itemeqERKS1_($59,$60)|0); + if ($61) { + $5 = $15; + $6 = 2; + $62 = $5; + $63 = HEAP32[$62>>2]|0; + $64 = $6; + $65 = (($63) + (($64*12)|0)|0); + $66 = (__ZN6laszip7factory11record_item3rgbEv()|0); + $67 = (__ZNK6laszip7factory11record_itemeqERKS1_($65,$66)|0); + if ($67) { + $12 = 3; + $68 = $12; + STACKTOP = sp;return ($68|0); + } + } + } + $12 = -1; + $68 = $12; + STACKTOP = sp;return ($68|0); + } + } + $12 = -1; + $68 = $12; + STACKTOP = sp;return ($68|0); +} +function __ZN6laszip19unknown_schema_typeC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorC2EPKc($2,5848); + HEAP32[$2>>2] = (1936); + STACKTOP = sp;return; +} +function __ZN6laszip19unknown_schema_typeD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt13runtime_errorD2Ev($2); + STACKTOP = sp;return; +} +function __ZNK6laszip7factory13record_schema10extrabytesEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $2 = sp; + $5 = sp + 124|0; + $8 = sp + 112|0; + $11 = sp + 100|0; + $16 = sp + 80|0; + $22 = sp + 56|0; + $28 = sp + 32|0; + $33 = sp + 8|0; + $32 = $0; + $34 = $32; + $30 = $34; + $35 = $30; + $36 = ((($35)) + 4|0); + $37 = HEAP32[$36>>2]|0; + $38 = HEAP32[$35>>2]|0; + $39 = $37; + $40 = $38; + $41 = (($39) - ($40))|0; + $42 = (($41|0) / 12)&-1; + $43 = ($42|0)!=(0); + if ($43) { + $10 = $34; + $44 = $10; + $9 = $44; + $45 = $9; + $46 = ((($45)) + 4|0); + $47 = HEAP32[$46>>2]|0; + $6 = $45; + $7 = $47; + $48 = $7; + $3 = $5; + $4 = $48; + $49 = $3; + $50 = $4; + HEAP32[$49>>2] = $50; + $51 = HEAP32[$5>>2]|0; + HEAP32[$8>>2] = $51; + $52 = HEAP32[$8>>2]|0; + HEAP32[$11>>2] = $52; + ;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; + $1 = $33; + $53 = $1; + ;HEAP32[$53>>2]=HEAP32[$2>>2]|0; + $54 = ((($53)) + 4|0); + ;HEAP32[$54>>2]=HEAP32[$2>>2]|0; + $17 = $33; + $55 = $17; + $15 = $55; + $56 = $15; + $57 = ((($56)) + 4|0); + ;HEAP32[$16>>2]=HEAP32[$57>>2]|0; + $14 = $16; + $58 = $14; + $59 = HEAP32[$58>>2]|0; + $60 = ((($59)) + -12|0); + HEAP32[$58>>2] = $60; + $13 = $58; + $61 = $13; + $62 = HEAP32[$61>>2]|0; + $12 = $62; + $63 = $12; + $64 = HEAP32[$63>>2]|0; + $65 = ($64|0)==(0); + if ($65) { + $23 = $33; + $66 = $23; + $21 = $66; + $67 = $21; + $68 = ((($67)) + 4|0); + ;HEAP32[$22>>2]=HEAP32[$68>>2]|0; + $20 = $22; + $69 = $20; + $70 = HEAP32[$69>>2]|0; + $71 = ((($70)) + -12|0); + HEAP32[$69>>2] = $71; + $19 = $69; + $72 = $19; + $73 = HEAP32[$72>>2]|0; + $18 = $73; + $74 = $18; + $75 = ((($74)) + 8|0); + $76 = HEAP32[$75>>2]|0; + $77 = ($76|0)==(2); + if ($77) { + $29 = $33; + $78 = $29; + $27 = $78; + $79 = $27; + $80 = ((($79)) + 4|0); + ;HEAP32[$28>>2]=HEAP32[$80>>2]|0; + $26 = $28; + $81 = $26; + $82 = HEAP32[$81>>2]|0; + $83 = ((($82)) + -12|0); + HEAP32[$81>>2] = $83; + $25 = $81; + $84 = $25; + $85 = HEAP32[$84>>2]|0; + $24 = $85; + $86 = $24; + $87 = ((($86)) + 4|0); + $88 = HEAP32[$87>>2]|0; + $31 = $88; + $89 = $31; + STACKTOP = sp;return ($89|0); + } + } + } + $31 = 0; + $89 = $31; + STACKTOP = sp;return ($89|0); +} +function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $$byval_copy = sp + 8|0; + $3 = sp; + $2 = $1; + $4 = (__Znwj(24)|0); + $5 = $2; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($4,$5); + ;HEAP32[$3>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$4,$$byval_copy); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(4792)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(336)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(324)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); + $$byval_copy = sp + 140|0; + $17 = sp; + $22 = sp + 145|0; + $33 = sp + 144|0; + $36 = sp + 8|0; + $37 = sp + 4|0; + $34 = $0; + $35 = $1; + $38 = $34; + $39 = ((($38)) + 8|0); + $40 = (__Znwj(64)|0); + $41 = ((($38)) + 4|0); + $42 = HEAP32[$41>>2]|0; + $43 = $35; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($40,$42,$43); + ;HEAP32[$37>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$37>>2]|0; + __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); + $31 = $39; + $32 = $36; + $44 = $31; + $45 = ((($44)) + 4|0); + $46 = HEAP32[$45>>2]|0; + $30 = $44; + $47 = $30; + $48 = ((($47)) + 8|0); + $29 = $48; + $49 = $29; + $28 = $49; + $50 = $28; + $51 = HEAP32[$50>>2]|0; + $52 = ($46>>>0)<($51>>>0); + if ($52) { + $25 = $33; + $26 = $44; + $27 = 1; + $4 = $44; + $53 = $4; + $54 = ((($53)) + 8|0); + $3 = $54; + $55 = $3; + $2 = $55; + $56 = $2; + $57 = ((($44)) + 4|0); + $58 = HEAP32[$57>>2]|0; + $5 = $58; + $59 = $5; + $60 = $32; + $6 = $60; + $61 = $6; + $19 = $56; + $20 = $59; + $21 = $61; + $62 = $19; + $63 = $20; + $64 = $21; + $18 = $64; + $65 = $18; + ;HEAP8[$17>>0]=HEAP8[$22>>0]|0; + $14 = $62; + $15 = $63; + $16 = $65; + $66 = $14; + $67 = $15; + $68 = $16; + $13 = $68; + $69 = $13; + $10 = $66; + $11 = $67; + $12 = $69; + $70 = $11; + $71 = $12; + $9 = $71; + $72 = $9; + $7 = $70; + $8 = $72; + $73 = $7; + $74 = $8; + $75 = HEAP32[$74>>2]|0; + HEAP32[$73>>2] = $75; + $76 = ((($73)) + 4|0); + $77 = $8; + $78 = ((($77)) + 4|0); + $79 = HEAP32[$78>>2]|0; + HEAP32[$76>>2] = $79; + $80 = $8; + HEAP32[$80>>2] = 0; + $81 = $8; + $82 = ((($81)) + 4|0); + HEAP32[$82>>2] = 0; + $23 = $33; + $83 = ((($44)) + 4|0); + $84 = HEAP32[$83>>2]|0; + $85 = ((($84)) + 8|0); + HEAP32[$83>>2] = $85; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36); + STACKTOP = sp;return; + } else { + $86 = $32; + $24 = $86; + $87 = $24; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($44,$87); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $4 = sp; + $2 = $0; + $3 = $1; + $5 = $2; + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($5)) + 4|0); + HEAP8[$7>>0] = 0; + $8 = ((($5)) + 8|0); + $9 = $3; + __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($8,$9); + $10 = ((($5)) + 20|0); + $11 = $3; + __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($10,$11); + $12 = ((($5)) + 32|0); + $13 = $3; + __ZN6laszip6models10arithmeticC2EjbPj($4,256,0,0); + __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($12,$13,$4); + __ZN6laszip6models10arithmeticD2Ev($4); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 32|0); + __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3); + $4 = ((($2)) + 20|0); + __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($4); + $5 = ((($2)) + 8|0); + __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($5); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $$byval_copy = sp + 12|0; + $5 = sp; + $3 = $1; + $4 = $2; + $6 = (__Znwj(12)|0); + $7 = $3; + $8 = $4; + __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($6,$7,$8); + ;HEAP32[$5>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; + __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); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); + $3 = ((($2)) + 4784|0); + __ZN6laszip7formats19record_decompressorIJEEC2Ev($3); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $$byval_copy = sp + 12|0; + $5 = sp; + $3 = $1; + $4 = $2; + $6 = (__Znwj(12)|0); + $7 = $3; + $8 = $4; + __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8); + ;HEAP32[$5>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; + __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); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); + $3 = ((($2)) + 4784|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $$byval_copy = sp + 12|0; + $5 = sp; + $3 = $1; + $4 = $2; + $6 = (__Znwj(12)|0); + $7 = $3; + $8 = $4; + __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8); + ;HEAP32[$5>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; + __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); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); + $3 = ((($2)) + 4784|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $$byval_copy = sp + 12|0; + $5 = sp; + $3 = $1; + $4 = $2; + $6 = (__Znwj(12)|0); + $7 = $3; + $8 = $4; + __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); + ;HEAP32[$5>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; + __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); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); + $3 = ((($2)) + 4784|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($3); + STACKTOP = sp;return; +} +function __ZNK6laszip7factory11record_itemneERKS1_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + $6 = (__ZNK6laszip7factory11record_itemeqERKS1_($4,$5)|0); + $7 = $6 ^ 1; + STACKTOP = sp;return ($7|0); +} +function __ZN6laszip7factory11record_item5pointEv() { + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = HEAP8[21192]|0; + $1 = ($0<<24>>24)==(0); + if ($1) { + $2 = (___cxa_guard_acquire(21192)|0); + $3 = ($2|0)!=(0); + if ($3) { + __ZN6laszip7factory11record_itemC2Eiii(21256,6,20,2); + } + } + return (21256|0); +} +function __ZNK6laszip7factory11record_itemeqERKS1_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = HEAP32[$4>>2]|0; + $6 = $3; + $7 = HEAP32[$6>>2]|0; + $8 = ($5|0)==($7|0); + if (!($8)) { + $21 = 0; + STACKTOP = sp;return ($21|0); + } + $9 = ((($4)) + 8|0); + $10 = HEAP32[$9>>2]|0; + $11 = $3; + $12 = ((($11)) + 8|0); + $13 = HEAP32[$12>>2]|0; + $14 = ($10|0)==($13|0); + if (!($14)) { + $21 = 0; + STACKTOP = sp;return ($21|0); + } + $15 = ((($4)) + 4|0); + $16 = HEAP32[$15>>2]|0; + $17 = $3; + $18 = ((($17)) + 4|0); + $19 = HEAP32[$18>>2]|0; + $20 = ($16|0)==($19|0); + $21 = $20; + STACKTOP = sp;return ($21|0); +} +function __ZN6laszip7factory11record_item7gpstimeEv() { + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = HEAP8[21200]|0; + $1 = ($0<<24>>24)==(0); + if ($1) { + $2 = (___cxa_guard_acquire(21200)|0); + $3 = ($2|0)!=(0); + if ($3) { + __ZN6laszip7factory11record_itemC2Eiii(21268,7,8,2); + } + } + return (21268|0); +} +function __ZN6laszip7factory11record_item3rgbEv() { + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = HEAP8[21208]|0; + $1 = ($0<<24>>24)==(0); + if ($1) { + $2 = (___cxa_guard_acquire(21208)|0); + $3 = ($2|0)!=(0); + if ($3) { + __ZN6laszip7factory11record_itemC2Eiii(21280,8,6,2); + } + } + return (21280|0); +} +function __ZN6laszip19unknown_schema_typeD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip19unknown_schema_typeD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $12 = sp + 12|0; + $14 = $0; + $15 = $1; + $16 = $14; + __ZN6laszip7formats20dynamic_decompressorC2Ev($16); + HEAP32[$16>>2] = (1956); + $17 = ((($16)) + 4|0); + $18 = $15; + HEAP32[$17>>2] = $18; + $19 = ((($16)) + 8|0); + $13 = $19; + $20 = $13; + $11 = $20; + $21 = $11; + $10 = $21; + HEAP32[$21>>2] = 0; + $22 = ((($21)) + 4|0); + HEAP32[$22>>2] = 0; + $23 = ((($21)) + 8|0); + HEAP32[$12>>2] = 0; + $8 = $23; + $9 = $12; + $24 = $8; + $25 = $9; + $7 = $25; + $26 = $7; + $3 = $24; + $4 = $26; + $27 = $3; + $28 = $4; + $2 = $28; + HEAP32[$27>>2] = 0; + $6 = $24; + $29 = $6; + $5 = $29; + $30 = ((($16)) + 20|0); + HEAP8[$30>>0] = 1; + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (1996); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 8|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats20dynamic_decompressorC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (1976); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE10decompressEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); + $20 = sp + 72|0; + $23 = sp + 60|0; + $27 = sp + 44|0; + $30 = sp + 32|0; + $35 = sp + 12|0; + $36 = sp + 8|0; + $37 = sp; + $32 = $0; + $33 = $1; + $38 = $32; + $39 = ((($38)) + 8|0); + $34 = $39; + $40 = $34; + $31 = $40; + $41 = $31; + $42 = HEAP32[$41>>2]|0; + $28 = $41; + $29 = $42; + $43 = $29; + $25 = $27; + $26 = $43; + $44 = $25; + $45 = $26; + HEAP32[$44>>2] = $45; + $46 = HEAP32[$27>>2]|0; + HEAP32[$30>>2] = $46; + $47 = HEAP32[$30>>2]|0; + HEAP32[$35>>2] = $47; + $48 = $34; + $24 = $48; + $49 = $24; + $50 = ((($49)) + 4|0); + $51 = HEAP32[$50>>2]|0; + $21 = $49; + $22 = $51; + $52 = $22; + $18 = $20; + $19 = $52; + $53 = $18; + $54 = $19; + HEAP32[$53>>2] = $54; + $55 = HEAP32[$20>>2]|0; + HEAP32[$23>>2] = $55; + $56 = HEAP32[$23>>2]|0; + HEAP32[$36>>2] = $56; + while(1) { + $16 = $35; + $17 = $36; + $57 = $16; + $58 = $17; + $14 = $57; + $15 = $58; + $59 = $14; + $13 = $59; + $60 = $13; + $61 = HEAP32[$60>>2]|0; + $62 = $15; + $12 = $62; + $63 = $12; + $64 = HEAP32[$63>>2]|0; + $65 = ($61|0)==($64|0); + $66 = $65 ^ 1; + if (!($66)) { + break; + } + $10 = $35; + $67 = $10; + $68 = HEAP32[$67>>2]|0; + $8 = $37; + $9 = $68; + $69 = $8; + $70 = $9; + $71 = HEAP32[$70>>2]|0; + HEAP32[$69>>2] = $71; + $72 = ((($69)) + 4|0); + $73 = $9; + $74 = ((($73)) + 4|0); + $75 = HEAP32[$74>>2]|0; + HEAP32[$72>>2] = $75; + $76 = ((($69)) + 4|0); + $77 = HEAP32[$76>>2]|0; + $78 = ($77|0)!=(0|0); + if ($78) { + $79 = ((($69)) + 4|0); + $80 = HEAP32[$79>>2]|0; + $7 = $80; + $81 = $7; + $6 = $81; + $82 = $6; + $83 = ((($82)) + 4|0); + $3 = $83; + $84 = $3; + $4 = 1; + $85 = $4; + $86 = HEAP32[$84>>2]|0; + $87 = (($86) + ($85))|0; + HEAP32[$84>>2] = $87; + $88 = (($86) + ($85))|0; + $5 = $88; + } + $2 = $37; + $89 = $2; + $90 = HEAP32[$89>>2]|0; + $91 = HEAP32[$90>>2]|0; + $92 = ((($91)) + 12|0); + $93 = HEAP32[$92>>2]|0; + $94 = $33; + $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0); + $33 = $95; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37); + $11 = $35; + $96 = $11; + $97 = HEAP32[$96>>2]|0; + $98 = ((($97)) + 8|0); + HEAP32[$96>>2] = $98; + } + $99 = ((($38)) + 20|0); + $100 = HEAP8[$99>>0]|0; + $101 = $100&1; + if (!($101)) { + $105 = $33; + STACKTOP = sp;return ($105|0); + } + $102 = ((($38)) + 20|0); + HEAP8[$102>>0] = 0; + $103 = ((($38)) + 4|0); + $104 = HEAP32[$103>>2]|0; + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($104); + $105 = $33; + STACKTOP = sp;return ($105|0); +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (1956); + $3 = ((($2)) + 8|0); + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3); + __ZN6laszip7formats20dynamic_decompressorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats20dynamic_decompressorD2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats20dynamic_decompressorD0Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + _llvm_trap(); + // unreachable; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $19 = sp; + $22 = sp + 120|0; + $31 = $0; + $32 = $31; + $33 = HEAP32[$32>>2]|0; + $34 = ($33|0)!=(0|0); + if (!($34)) { + STACKTOP = sp;return; + } + $30 = $32; + $35 = $30; + $36 = HEAP32[$35>>2]|0; + $27 = $35; + $28 = $36; + $37 = $27; + $38 = ((($37)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $29 = $39; + while(1) { + $40 = $28; + $41 = $29; + $42 = ($40|0)!=($41|0); + if (!($42)) { + break; + } + $26 = $37; + $43 = $26; + $44 = ((($43)) + 8|0); + $25 = $44; + $45 = $25; + $24 = $45; + $46 = $24; + $47 = $29; + $48 = ((($47)) + -8|0); + $29 = $48; + $23 = $48; + $49 = $23; + $20 = $46; + $21 = $49; + $50 = $20; + $51 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $50; + $18 = $51; + $52 = $17; + $53 = $18; + $15 = $52; + $16 = $53; + $54 = $16; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($54); + } + $55 = $28; + $56 = ((($37)) + 4|0); + HEAP32[$56>>2] = $55; + $14 = $32; + $57 = $14; + $58 = ((($57)) + 8|0); + $13 = $58; + $59 = $13; + $12 = $59; + $60 = $12; + $61 = HEAP32[$32>>2]|0; + $4 = $32; + $62 = $4; + $3 = $62; + $63 = $3; + $64 = ((($63)) + 8|0); + $2 = $64; + $65 = $2; + $1 = $65; + $66 = $1; + $67 = HEAP32[$66>>2]|0; + $68 = HEAP32[$62>>2]|0; + $69 = $67; + $70 = $68; + $71 = (($69) - ($70))|0; + $72 = (($71|0) / 8)&-1; + $9 = $60; + $10 = $61; + $11 = $72; + $73 = $9; + $74 = $10; + $75 = $11; + $6 = $73; + $7 = $74; + $8 = $75; + $76 = $7; + $5 = $76; + $77 = $5; + __ZdlPv($77); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 8|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 312; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2024); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($7); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2072); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); + $12 = sp + 8|0; + $17 = sp + 201|0; + $26 = sp; + $29 = sp + 200|0; + $37 = sp + 72|0; + $40 = sp + 60|0; + $48 = sp + 12|0; + $45 = $0; + $46 = $1; + $49 = $45; + $44 = $49; + $50 = $44; + $51 = ((($50)) + 8|0); + $43 = $51; + $52 = $43; + $42 = $52; + $53 = $42; + $47 = $53; + $41 = $49; + $54 = $41; + $55 = ((($54)) + 4|0); + $56 = HEAP32[$55>>2]|0; + $57 = HEAP32[$54>>2]|0; + $58 = $56; + $59 = $57; + $60 = (($58) - ($59))|0; + $61 = (($60|0) / 8)&-1; + $62 = (($61) + 1)|0; + $36 = $49; + HEAP32[$37>>2] = $62; + $63 = $36; + $64 = (__ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($63)|0); + $38 = $64; + $65 = HEAP32[$37>>2]|0; + $66 = $38; + $67 = ($65>>>0)>($66>>>0); + if ($67) { + __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63); + // unreachable; + } + $34 = $63; + $68 = $34; + $33 = $68; + $69 = $33; + $32 = $69; + $70 = $32; + $71 = ((($70)) + 8|0); + $31 = $71; + $72 = $31; + $30 = $72; + $73 = $30; + $74 = HEAP32[$73>>2]|0; + $75 = HEAP32[$69>>2]|0; + $76 = $74; + $77 = $75; + $78 = (($76) - ($77))|0; + $79 = (($78|0) / 8)&-1; + $39 = $79; + $80 = $39; + $81 = $38; + $82 = (($81>>>0) / 2)&-1; + $83 = ($80>>>0)>=($82>>>0); + if ($83) { + $84 = $38; + $35 = $84; + } else { + $85 = $39; + $86 = $85<<1; + HEAP32[$40>>2] = $86; + $27 = $40; + $28 = $37; + $87 = $27; + $88 = $28; + ;HEAP8[$26>>0]=HEAP8[$29>>0]|0; + $24 = $87; + $25 = $88; + $89 = $24; + $90 = $25; + $21 = $26; + $22 = $89; + $23 = $90; + $91 = $22; + $92 = HEAP32[$91>>2]|0; + $93 = $23; + $94 = HEAP32[$93>>2]|0; + $95 = ($92>>>0)<($94>>>0); + $96 = $25; + $97 = $24; + $98 = $95 ? $96 : $97; + $99 = HEAP32[$98>>2]|0; + $35 = $99; + } + $100 = $35; + $20 = $49; + $101 = $20; + $102 = ((($101)) + 4|0); + $103 = HEAP32[$102>>2]|0; + $104 = HEAP32[$101>>2]|0; + $105 = $103; + $106 = $104; + $107 = (($105) - ($106))|0; + $108 = (($107|0) / 8)&-1; + $109 = $47; + __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($48,$100,$108,$109); + $110 = $47; + $111 = ((($48)) + 8|0); + $112 = HEAP32[$111>>2]|0; + $19 = $112; + $113 = $19; + $114 = $46; + $18 = $114; + $115 = $18; + $14 = $110; + $15 = $113; + $16 = $115; + $116 = $14; + $117 = $15; + $118 = $16; + $13 = $118; + $119 = $13; + ;HEAP8[$12>>0]=HEAP8[$17>>0]|0; + $9 = $116; + $10 = $117; + $11 = $119; + $120 = $9; + $121 = $10; + $122 = $11; + $8 = $122; + $123 = $8; + $5 = $120; + $6 = $121; + $7 = $123; + $124 = $6; + $125 = $7; + $4 = $125; + $126 = $4; + $2 = $124; + $3 = $126; + $127 = $2; + $128 = $3; + $129 = HEAP32[$128>>2]|0; + HEAP32[$127>>2] = $129; + $130 = ((($127)) + 4|0); + $131 = $3; + $132 = ((($131)) + 4|0); + $133 = HEAP32[$132>>2]|0; + HEAP32[$130>>2] = $133; + $134 = $3; + HEAP32[$134>>2] = 0; + $135 = $3; + $136 = ((($135)) + 4|0); + HEAP32[$136>>2] = 0; + $137 = ((($48)) + 8|0); + $138 = HEAP32[$137>>2]|0; + $139 = ((($138)) + 8|0); + HEAP32[$137>>2] = $139; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($49,$48); + __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($48); + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $35 = sp; + $31 = $0; + $32 = $1; + $33 = $2; + $34 = $3; + $36 = $31; + $37 = ((($36)) + 12|0); + HEAP32[$35>>2] = 0; + $38 = $34; + $28 = $37; + $29 = $35; + $30 = $38; + $39 = $28; + $40 = $29; + $27 = $40; + $41 = $27; + $21 = $39; + $22 = $41; + $42 = $21; + $43 = $22; + $20 = $43; + HEAP32[$42>>2] = 0; + $44 = ((($39)) + 4|0); + $45 = $30; + $23 = $45; + $46 = $23; + $25 = $44; + $26 = $46; + $47 = $25; + $48 = $26; + $24 = $48; + $49 = $24; + HEAP32[$47>>2] = $49; + $50 = $32; + $51 = ($50|0)!=(0); + do { + if ($51) { + $6 = $36; + $52 = $6; + $53 = ((($52)) + 12|0); + $5 = $53; + $54 = $5; + $55 = ((($54)) + 4|0); + $4 = $55; + $56 = $4; + $57 = HEAP32[$56>>2]|0; + $58 = $32; + $15 = $57; + $16 = $58; + $59 = $15; + $60 = $16; + $12 = $59; + $13 = $60; + $14 = 0; + $61 = $12; + $62 = $13; + $11 = $61; + $63 = ($62>>>0)>(536870911); + if ($63) { + $9 = 4287; + $64 = (___cxa_allocate_exception(8)|0); + $65 = $9; + $7 = $64; + $8 = $65; + $66 = $7; + $67 = $8; + __ZNSt11logic_errorC2EPKc($66,$67); + HEAP32[$66>>2] = (3660); + ___cxa_throw(($64|0),(1384|0),(220|0)); + // unreachable; + } else { + $68 = $13; + $69 = $68<<3; + $10 = $69; + $70 = $10; + $71 = (__Znwj($70)|0); + $72 = $71; + break; + } + } else { + $72 = 0; + } + } while(0); + HEAP32[$36>>2] = $72; + $73 = HEAP32[$36>>2]|0; + $74 = $33; + $75 = (($73) + ($74<<3)|0); + $76 = ((($36)) + 8|0); + HEAP32[$76>>2] = $75; + $77 = ((($36)) + 4|0); + HEAP32[$77>>2] = $75; + $78 = HEAP32[$36>>2]|0; + $79 = $32; + $80 = (($78) + ($79<<3)|0); + $19 = $36; + $81 = $19; + $82 = ((($81)) + 12|0); + $18 = $82; + $83 = $18; + $17 = $83; + $84 = $17; + HEAP32[$84>>2] = $80; + STACKTOP = sp;return; +} +function __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0); + $17 = sp; + $22 = sp + 412|0; + $33 = sp + 292|0; + $39 = sp + 268|0; + $51 = sp + 220|0; + $104 = $0; + $105 = $1; + $106 = $104; + $103 = $106; + $107 = $103; + $102 = $107; + $108 = $102; + $109 = HEAP32[$108>>2]|0; + $101 = $109; + $110 = $101; + $80 = $107; + $111 = $80; + $112 = HEAP32[$111>>2]|0; + $79 = $112; + $113 = $79; + $85 = $107; + $114 = $85; + $84 = $114; + $115 = $84; + $83 = $115; + $116 = $83; + $117 = ((($116)) + 8|0); + $82 = $117; + $118 = $82; + $81 = $118; + $119 = $81; + $120 = HEAP32[$119>>2]|0; + $121 = HEAP32[$115>>2]|0; + $122 = $120; + $123 = $121; + $124 = (($122) - ($123))|0; + $125 = (($124|0) / 8)&-1; + $126 = (($113) + ($125<<3)|0); + $87 = $107; + $127 = $87; + $128 = HEAP32[$127>>2]|0; + $86 = $128; + $129 = $86; + $88 = $107; + $130 = $88; + $131 = ((($130)) + 4|0); + $132 = HEAP32[$131>>2]|0; + $133 = HEAP32[$130>>2]|0; + $134 = $132; + $135 = $133; + $136 = (($134) - ($135))|0; + $137 = (($136|0) / 8)&-1; + $138 = (($129) + ($137<<3)|0); + $90 = $107; + $139 = $90; + $140 = HEAP32[$139>>2]|0; + $89 = $140; + $141 = $89; + $95 = $107; + $142 = $95; + $94 = $142; + $143 = $94; + $93 = $143; + $144 = $93; + $145 = ((($144)) + 8|0); + $92 = $145; + $146 = $92; + $91 = $146; + $147 = $91; + $148 = HEAP32[$147>>2]|0; + $149 = HEAP32[$143>>2]|0; + $150 = $148; + $151 = $149; + $152 = (($150) - ($151))|0; + $153 = (($152|0) / 8)&-1; + $154 = (($141) + ($153<<3)|0); + $96 = $107; + $97 = $110; + $98 = $126; + $99 = $138; + $100 = $154; + $4 = $106; + $155 = $4; + $156 = ((($155)) + 8|0); + $3 = $156; + $157 = $3; + $2 = $157; + $158 = $2; + $159 = HEAP32[$106>>2]|0; + $160 = ((($106)) + 4|0); + $161 = HEAP32[$160>>2]|0; + $162 = $105; + $163 = ((($162)) + 4|0); + $24 = $158; + $25 = $159; + $26 = $161; + $27 = $163; + while(1) { + $164 = $26; + $165 = $25; + $166 = ($164|0)!=($165|0); + if (!($166)) { + break; + } + $167 = $24; + $168 = $27; + $169 = HEAP32[$168>>2]|0; + $170 = ((($169)) + -8|0); + $23 = $170; + $171 = $23; + $172 = $26; + $173 = ((($172)) + -8|0); + $26 = $173; + $6 = $173; + $174 = $6; + $5 = $174; + $175 = $5; + $19 = $167; + $20 = $171; + $21 = $175; + $176 = $19; + $177 = $20; + $178 = $21; + $18 = $178; + $179 = $18; + ;HEAP8[$17>>0]=HEAP8[$22>>0]|0; + $14 = $176; + $15 = $177; + $16 = $179; + $180 = $14; + $181 = $15; + $182 = $16; + $13 = $182; + $183 = $13; + $10 = $180; + $11 = $181; + $12 = $183; + $184 = $11; + $185 = $12; + $9 = $185; + $186 = $9; + $7 = $184; + $8 = $186; + $187 = $7; + $188 = $8; + $189 = HEAP32[$188>>2]|0; + HEAP32[$187>>2] = $189; + $190 = ((($187)) + 4|0); + $191 = $8; + $192 = ((($191)) + 4|0); + $193 = HEAP32[$192>>2]|0; + HEAP32[$190>>2] = $193; + $194 = $8; + HEAP32[$194>>2] = 0; + $195 = $8; + $196 = ((($195)) + 4|0); + HEAP32[$196>>2] = 0; + $197 = $27; + $198 = HEAP32[$197>>2]|0; + $199 = ((($198)) + -8|0); + HEAP32[$197>>2] = $199; + } + $200 = $105; + $201 = ((($200)) + 4|0); + $31 = $106; + $32 = $201; + $202 = $31; + $30 = $202; + $203 = $30; + $204 = HEAP32[$203>>2]|0; + HEAP32[$33>>2] = $204; + $205 = $32; + $28 = $205; + $206 = $28; + $207 = HEAP32[$206>>2]|0; + $208 = $31; + HEAP32[$208>>2] = $207; + $29 = $33; + $209 = $29; + $210 = HEAP32[$209>>2]|0; + $211 = $32; + HEAP32[$211>>2] = $210; + $212 = ((($106)) + 4|0); + $213 = $105; + $214 = ((($213)) + 8|0); + $37 = $212; + $38 = $214; + $215 = $37; + $36 = $215; + $216 = $36; + $217 = HEAP32[$216>>2]|0; + HEAP32[$39>>2] = $217; + $218 = $38; + $34 = $218; + $219 = $34; + $220 = HEAP32[$219>>2]|0; + $221 = $37; + HEAP32[$221>>2] = $220; + $35 = $39; + $222 = $35; + $223 = HEAP32[$222>>2]|0; + $224 = $38; + HEAP32[$224>>2] = $223; + $42 = $106; + $225 = $42; + $226 = ((($225)) + 8|0); + $41 = $226; + $227 = $41; + $40 = $227; + $228 = $40; + $229 = $105; + $45 = $229; + $230 = $45; + $231 = ((($230)) + 12|0); + $44 = $231; + $232 = $44; + $43 = $232; + $233 = $43; + $49 = $228; + $50 = $233; + $234 = $49; + $48 = $234; + $235 = $48; + $236 = HEAP32[$235>>2]|0; + HEAP32[$51>>2] = $236; + $237 = $50; + $46 = $237; + $238 = $46; + $239 = HEAP32[$238>>2]|0; + $240 = $49; + HEAP32[$240>>2] = $239; + $47 = $51; + $241 = $47; + $242 = HEAP32[$241>>2]|0; + $243 = $50; + HEAP32[$243>>2] = $242; + $244 = $105; + $245 = ((($244)) + 4|0); + $246 = HEAP32[$245>>2]|0; + $247 = $105; + HEAP32[$247>>2] = $246; + $52 = $106; + $248 = $52; + $249 = ((($248)) + 4|0); + $250 = HEAP32[$249>>2]|0; + $251 = HEAP32[$248>>2]|0; + $252 = $250; + $253 = $251; + $254 = (($252) - ($253))|0; + $255 = (($254|0) / 8)&-1; + $76 = $106; + $77 = $255; + $256 = $76; + $75 = $256; + $257 = $75; + $258 = HEAP32[$257>>2]|0; + $74 = $258; + $259 = $74; + $54 = $256; + $260 = $54; + $261 = HEAP32[$260>>2]|0; + $53 = $261; + $262 = $53; + $59 = $256; + $263 = $59; + $58 = $263; + $264 = $58; + $57 = $264; + $265 = $57; + $266 = ((($265)) + 8|0); + $56 = $266; + $267 = $56; + $55 = $267; + $268 = $55; + $269 = HEAP32[$268>>2]|0; + $270 = HEAP32[$264>>2]|0; + $271 = $269; + $272 = $270; + $273 = (($271) - ($272))|0; + $274 = (($273|0) / 8)&-1; + $275 = (($262) + ($274<<3)|0); + $61 = $256; + $276 = $61; + $277 = HEAP32[$276>>2]|0; + $60 = $277; + $278 = $60; + $66 = $256; + $279 = $66; + $65 = $279; + $280 = $65; + $64 = $280; + $281 = $64; + $282 = ((($281)) + 8|0); + $63 = $282; + $283 = $63; + $62 = $283; + $284 = $62; + $285 = HEAP32[$284>>2]|0; + $286 = HEAP32[$280>>2]|0; + $287 = $285; + $288 = $286; + $289 = (($287) - ($288))|0; + $290 = (($289|0) / 8)&-1; + $291 = (($278) + ($290<<3)|0); + $68 = $256; + $292 = $68; + $293 = HEAP32[$292>>2]|0; + $67 = $293; + $294 = $67; + $295 = $77; + $296 = (($294) + ($295<<3)|0); + $69 = $256; + $70 = $259; + $71 = $275; + $72 = $291; + $73 = $296; + $78 = $106; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $19 = sp + 8|0; + $22 = sp + 133|0; + $29 = sp; + $32 = sp + 132|0; + $34 = $0; + $35 = $34; + $33 = $35; + $36 = $33; + $37 = ((($36)) + 4|0); + $38 = HEAP32[$37>>2]|0; + $30 = $36; + $31 = $38; + $39 = $30; + $40 = $31; + ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; + $27 = $39; + $28 = $40; + $41 = $27; + while(1) { + $42 = $28; + $43 = ((($41)) + 8|0); + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)!=($44|0); + if (!($45)) { + break; + } + $26 = $41; + $46 = $26; + $47 = ((($46)) + 12|0); + $25 = $47; + $48 = $25; + $49 = ((($48)) + 4|0); + $24 = $49; + $50 = $24; + $51 = HEAP32[$50>>2]|0; + $52 = ((($41)) + 8|0); + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + -8|0); + HEAP32[$52>>2] = $54; + $23 = $54; + $55 = $23; + $20 = $51; + $21 = $55; + $56 = $20; + $57 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $56; + $18 = $57; + $58 = $17; + $59 = $18; + $15 = $58; + $16 = $59; + $60 = $16; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($60); + } + $61 = HEAP32[$35>>2]|0; + $62 = ($61|0)!=(0|0); + if (!($62)) { + STACKTOP = sp;return; + } + $14 = $35; + $63 = $14; + $64 = ((($63)) + 12|0); + $13 = $64; + $65 = $13; + $66 = ((($65)) + 4|0); + $12 = $66; + $67 = $12; + $68 = HEAP32[$67>>2]|0; + $69 = HEAP32[$35>>2]|0; + $11 = $35; + $70 = $11; + $10 = $70; + $71 = $10; + $72 = ((($71)) + 12|0); + $9 = $72; + $73 = $9; + $8 = $73; + $74 = $8; + $75 = HEAP32[$74>>2]|0; + $76 = HEAP32[$70>>2]|0; + $77 = $75; + $78 = $76; + $79 = (($77) - ($78))|0; + $80 = (($79|0) / 8)&-1; + $5 = $68; + $6 = $69; + $7 = $80; + $81 = $5; + $82 = $6; + $83 = $7; + $2 = $81; + $3 = $82; + $4 = $83; + $84 = $3; + $1 = $84; + $85 = $1; + __ZdlPv($85); + STACKTOP = sp;return; +} +function __ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($0) { + $0 = $0|0; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $6 = sp + 8|0; + $9 = sp + 77|0; + $12 = sp; + $14 = sp + 76|0; + $19 = sp + 16|0; + $20 = sp + 12|0; + $18 = $0; + $21 = $18; + $17 = $21; + $22 = $17; + $23 = ((($22)) + 8|0); + $16 = $23; + $24 = $16; + $15 = $24; + $25 = $15; + $13 = $25; + $26 = $13; + ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; + $11 = $26; + $27 = $11; + $10 = $27; + HEAP32[$19>>2] = 536870911; + HEAP32[$20>>2] = 2147483647; + $7 = $19; + $8 = $20; + $28 = $7; + $29 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $28; + $5 = $29; + $30 = $5; + $31 = $4; + $1 = $6; + $2 = $30; + $3 = $31; + $32 = $2; + $33 = HEAP32[$32>>2]|0; + $34 = $3; + $35 = HEAP32[$34>>2]|0; + $36 = ($33>>>0)<($35>>>0); + $37 = $5; + $38 = $4; + $39 = $36 ? $37 : $38; + $40 = HEAP32[$39>>2]|0; + STACKTOP = sp;return ($40|0); +} +function __ZN6laszip7formats10base_fieldC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2048); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2); + $3 = ((($2)) + 3980|0); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3); + $4 = ((($2)) + 4380|0); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4); + $5 = ((($2)) + 4780|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 4781|0); + HEAP8[$6>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2024); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats10base_field11compressRawEPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $3; + STACKTOP = sp;return ($4|0); +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats10base_fieldD2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats10base_fieldD0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats10base_fieldD2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats10base_field13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $3; + STACKTOP = sp;return ($4|0); +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + var $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $30 = sp + 124|0; + $31 = sp + 4|0; + $29 = $0; + $33 = $29; + __ZN6laszip7formats3las7point10C2Ev($33); + $34 = ((($33)) + 52|0); + __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($34); + $35 = ((($33)) + 436|0); + __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($35); + $36 = ((($33)) + 852|0); + __ZN6laszip6models10arithmeticC2EjbPj($36,64,0,0); + $37 = ((($33)) + 3976|0); + HEAP8[$37>>0] = 0; + $38 = ((($33)) + 20|0); + HEAP16[$30>>1] = 0; + $27 = $38; + $28 = $30; + $39 = $27; + $40 = $28; + $24 = $39; + $25 = 16; + $26 = $40; + $41 = $24; + $42 = $25; + $23 = $42; + $43 = $23; + $44 = $26; + $20 = $41; + $21 = $43; + $22 = $44; + while(1) { + $45 = $21; + $46 = ($45>>>0)>(0); + if (!($46)) { + break; + } + $47 = $22; + $48 = HEAP16[$47>>1]|0; + $49 = $20; + HEAP16[$49>>1] = $48; + $50 = $20; + $51 = ((($50)) + 2|0); + $20 = $51; + $52 = $21; + $53 = (($52) + -1)|0; + $21 = $53; + } + $54 = (__Znwj(44)|0); + __ZN6laszip6models10arithmeticC2EjbPj($54,256,0,0); + $55 = ((($33)) + 896|0); + $18 = $55; + $19 = 0; + $56 = $18; + $57 = $19; + $58 = (($56) + ($57<<2)|0); + HEAP32[$58>>2] = $54; + $59 = (__Znwj(44)|0); + __ZN6laszip6models10arithmeticC2EjbPj($59,256,0,0); + $60 = ((($33)) + 896|0); + $14 = $60; + $15 = 1; + $61 = $14; + $62 = $15; + $63 = (($61) + ($62<<2)|0); + HEAP32[$63>>2] = $59; + $64 = ((($33)) + 820|0); + HEAP32[$31>>2] = 0; + $10 = $64; + $11 = $31; + $65 = $10; + $66 = $11; + $7 = $65; + $8 = 8; + $9 = $66; + $67 = $7; + $68 = $8; + $6 = $68; + $69 = $6; + $70 = $9; + $3 = $67; + $4 = $69; + $5 = $70; + while(1) { + $71 = $4; + $72 = ($71>>>0)>(0); + if (!($72)) { + break; + } + $73 = $5; + $74 = HEAP32[$73>>2]|0; + $75 = $3; + HEAP32[$75>>2] = $74; + $76 = $3; + $77 = ((($76)) + 4|0); + $3 = $77; + $78 = $4; + $79 = (($78) + -1)|0; + $4 = $79; + } + $32 = 0; + while(1) { + $80 = $32; + $81 = ($80|0)<(256); + if (!($81)) { + break; + } + $82 = (__Znwj(44)|0); + __ZN6laszip6models10arithmeticC2EjbPj($82,256,0,0); + $83 = ((($33)) + 904|0); + $84 = $32; + $1 = $83; + $2 = $84; + $85 = $1; + $86 = $2; + $87 = (($85) + ($86<<2)|0); + HEAP32[$87>>2] = $82; + $88 = (__Znwj(44)|0); + __ZN6laszip6models10arithmeticC2EjbPj($88,256,0,0); + $89 = ((($33)) + 1928|0); + $90 = $32; + $12 = $89; + $13 = $90; + $91 = $12; + $92 = $13; + $93 = (($91) + ($92<<2)|0); + HEAP32[$93>>2] = $88; + $94 = (__Znwj(44)|0); + __ZN6laszip6models10arithmeticC2EjbPj($94,256,0,0); + $95 = ((($33)) + 2952|0); + $96 = $32; + $16 = $95; + $17 = $96; + $97 = $16; + $98 = $17; + $99 = (($97) + ($98<<2)|0); + HEAP32[$99>>2] = $94; + $100 = $32; + $101 = (($100) + 1)|0; + $32 = $101; + } + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,16,4,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip11compressors7integerC2Ejjjj($3,16,1,8,0); + $4 = ((($2)) + 160|0); + __ZN6laszip11compressors7integerC2Ejjjj($4,32,2,8,0); + $5 = ((($2)) + 240|0); + __ZN6laszip11compressors7integerC2Ejjjj($5,32,22,8,0); + $6 = ((($2)) + 320|0); + __ZN6laszip11compressors7integerC2Ejjjj($6,32,20,8,0); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13decompressors7integerC2Ejjjj($2,16,4,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0); + $4 = ((($2)) + 160|0); + __ZN6laszip13decompressors7integerC2Ejjjj($4,32,2,8,0); + $5 = ((($2)) + 240|0); + __ZN6laszip13decompressors7integerC2Ejjjj($5,32,22,8,0); + $6 = ((($2)) + 320|0); + __ZN6laszip13decompressors7integerC2Ejjjj($6,32,20,8,0); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 320|0); + __ZN6laszip11compressors7integerD2Ev($3); + $4 = ((($2)) + 240|0); + __ZN6laszip11compressors7integerD2Ev($4); + $5 = ((($2)) + 160|0); + __ZN6laszip11compressors7integerD2Ev($5); + $6 = ((($2)) + 80|0); + __ZN6laszip11compressors7integerD2Ev($6); + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $11 = $0; + $13 = $11; + $14 = ((($13)) + 896|0); + $9 = $14; + $10 = 0; + $15 = $9; + $16 = $10; + $17 = (($15) + ($16<<2)|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($18|0)==(0|0); + if (!($19)) { + __ZN6laszip6models10arithmeticD2Ev($18); + __ZdlPv($18); + } + $20 = ((($13)) + 896|0); + $7 = $20; + $8 = 1; + $21 = $7; + $22 = $8; + $23 = (($21) + ($22<<2)|0); + $24 = HEAP32[$23>>2]|0; + $25 = ($24|0)==(0|0); + if (!($25)) { + __ZN6laszip6models10arithmeticD2Ev($24); + __ZdlPv($24); + } + $12 = 0; + while(1) { + $26 = $12; + $27 = ($26|0)<(256); + if (!($27)) { + break; + } + $28 = ((($13)) + 904|0); + $29 = $12; + $5 = $28; + $6 = $29; + $30 = $5; + $31 = $6; + $32 = (($30) + ($31<<2)|0); + $33 = HEAP32[$32>>2]|0; + $34 = ($33|0)==(0|0); + if (!($34)) { + __ZN6laszip6models10arithmeticD2Ev($33); + __ZdlPv($33); + } + $35 = ((($13)) + 1928|0); + $36 = $12; + $3 = $35; + $4 = $36; + $37 = $3; + $38 = $4; + $39 = (($37) + ($38<<2)|0); + $40 = HEAP32[$39>>2]|0; + $41 = ($40|0)==(0|0); + if (!($41)) { + __ZN6laszip6models10arithmeticD2Ev($40); + __ZdlPv($40); + } + $42 = ((($13)) + 2952|0); + $43 = $12; + $1 = $42; + $2 = $43; + $44 = $1; + $45 = $2; + $46 = (($44) + ($45<<2)|0); + $47 = HEAP32[$46>>2]|0; + $48 = ($47|0)==(0|0); + if (!($48)) { + __ZN6laszip6models10arithmeticD2Ev($47); + __ZdlPv($47); + } + $49 = $12; + $50 = (($49) + 1)|0; + $12 = $50; + } + $51 = ((($13)) + 852|0); + __ZN6laszip6models10arithmeticD2Ev($51); + STACKTOP = sp;return; +} +function __ZN6laszip7formats3las7point10C2Ev($0) { + $0 = $0|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + 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; + $3 = ((($2)) + 4|0); + 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; + $4 = ((($2)) + 12|0); + HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8; + $5 = ((($2)) + 14|0); + $6 = HEAP8[$5>>0]|0; + $7 = $6 & -8; + HEAP8[$5>>0] = $7; + $8 = ((($2)) + 14|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9 & -57; + HEAP8[$8>>0] = $10; + $11 = ((($2)) + 14|0); + $12 = HEAP8[$11>>0]|0; + $13 = $12 & -65; + HEAP8[$11>>0] = $13; + $14 = ((($2)) + 14|0); + $15 = HEAP8[$14>>0]|0; + $16 = $15 & 127; + HEAP8[$14>>0] = $16; + $17 = ((($2)) + 15|0); + HEAP8[$17>>0] = 0; + $18 = ((($2)) + 16|0); + HEAP8[$18>>0] = 0; + $19 = ((($2)) + 17|0); + HEAP8[$19>>0] = 0; + $20 = ((($2)) + 18|0); + HEAP8[$20>>0]=0&255;HEAP8[$20+1>>0]=0>>8; + STACKTOP = sp;return; +} +function __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 384|0); + $4 = $2; + while(1) { + __ZN6laszip5utils16streaming_medianIiEC2Ev($4); + $5 = ((($4)) + 24|0); + $6 = ($5|0)==($3|0); + if ($6) { + break; + } else { + $4 = $5; + } + } + STACKTOP = sp;return; +} +function __ZN6laszip5utils16streaming_medianIiEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip5utils16streaming_medianIiE4initEv($2); + STACKTOP = sp;return; +} +function __ZN6laszip5utils16streaming_medianIiE4initEv($0) { + $0 = $0|0; + 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; + var $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $11 = sp; + $10 = $0; + $12 = $10; + HEAP32[$11>>2] = 0; + $8 = $12; + $9 = $11; + $13 = $8; + $14 = $9; + $5 = $13; + $6 = 5; + $7 = $14; + $15 = $5; + $16 = $6; + $4 = $16; + $17 = $4; + $18 = $7; + $1 = $15; + $2 = $17; + $3 = $18; + while(1) { + $19 = $2; + $20 = ($19>>>0)>(0); + if (!($20)) { + break; + } + $21 = $3; + $22 = HEAP32[$21>>2]|0; + $23 = $1; + HEAP32[$23>>2] = $22; + $24 = $1; + $25 = ((($24)) + 4|0); + $1 = $25; + $26 = $2; + $27 = (($26) + -1)|0; + $2 = $27; + } + $28 = ((($12)) + 20|0); + HEAP8[$28>>0] = 1; + STACKTOP = sp;return; +} +function __ZN6laszip11compressors7integerC2Ejjjj($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $or$cond = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $15 = sp + 72|0; + $27 = sp + 24|0; + $29 = $0; + $30 = $1; + $31 = $2; + $32 = $3; + $33 = $4; + $34 = $29; + $35 = ((($34)) + 4|0); + $36 = $30; + HEAP32[$35>>2] = $36; + $37 = ((($34)) + 8|0); + $38 = $31; + HEAP32[$37>>2] = $38; + $39 = ((($34)) + 12|0); + $40 = $32; + HEAP32[$39>>2] = $40; + $41 = ((($34)) + 16|0); + $42 = $33; + HEAP32[$41>>2] = $42; + $43 = ((($34)) + 36|0); + $28 = $43; + $44 = $28; + $26 = $44; + $45 = $26; + $25 = $45; + HEAP32[$45>>2] = 0; + $46 = ((($45)) + 4|0); + HEAP32[$46>>2] = 0; + $47 = ((($45)) + 8|0); + HEAP32[$27>>2] = 0; + $23 = $47; + $24 = $27; + $48 = $23; + $49 = $24; + $22 = $49; + $50 = $22; + $18 = $48; + $19 = $50; + $51 = $18; + $52 = $19; + $17 = $52; + HEAP32[$51>>2] = 0; + $21 = $48; + $53 = $21; + $20 = $53; + $54 = ((($34)) + 48|0); + __ZN6laszip6models14arithmetic_bitC2Ev($54); + $55 = ((($34)) + 68|0); + $16 = $55; + $56 = $16; + $14 = $56; + $57 = $14; + $13 = $57; + HEAP32[$57>>2] = 0; + $58 = ((($57)) + 4|0); + HEAP32[$58>>2] = 0; + $59 = ((($57)) + 8|0); + HEAP32[$15>>2] = 0; + $11 = $59; + $12 = $15; + $60 = $11; + $61 = $12; + $10 = $61; + $62 = $10; + $6 = $60; + $7 = $62; + $63 = $6; + $64 = $7; + $5 = $64; + HEAP32[$63>>2] = 0; + $9 = $60; + $65 = $9; + $8 = $65; + $66 = $33; + $67 = ($66|0)!=(0); + if (!($67)) { + $100 = $30; + $101 = ($100|0)!=(0); + $102 = $30; + $103 = ($102>>>0)<(32); + $or$cond = $101 & $103; + if ($or$cond) { + $104 = $30; + $105 = ((($34)) + 20|0); + HEAP32[$105>>2] = $104; + $106 = $30; + $107 = 1 << $106; + $108 = ((($34)) + 24|0); + HEAP32[$108>>2] = $107; + $109 = ((($34)) + 24|0); + $110 = HEAP32[$109>>2]|0; + $111 = (($110>>>0) / 2)&-1; + $112 = (0 - ($111))|0; + $113 = ((($34)) + 28|0); + HEAP32[$113>>2] = $112; + $114 = ((($34)) + 28|0); + $115 = HEAP32[$114>>2]|0; + $116 = ((($34)) + 24|0); + $117 = HEAP32[$116>>2]|0; + $118 = (($115) + ($117))|0; + $119 = (($118) - 1)|0; + $120 = ((($34)) + 32|0); + HEAP32[$120>>2] = $119; + HEAP32[$34>>2] = 0; + STACKTOP = sp;return; + } else { + $121 = ((($34)) + 20|0); + HEAP32[$121>>2] = 32; + $122 = ((($34)) + 24|0); + HEAP32[$122>>2] = 0; + $123 = ((($34)) + 28|0); + HEAP32[$123>>2] = -2147483648; + $124 = ((($34)) + 32|0); + HEAP32[$124>>2] = 2147483647; + HEAP32[$34>>2] = 0; + STACKTOP = sp;return; + } + } + $68 = ((($34)) + 20|0); + HEAP32[$68>>2] = 0; + $69 = $33; + $70 = ((($34)) + 24|0); + HEAP32[$70>>2] = $69; + while(1) { + $71 = $33; + $72 = ($71|0)!=(0); + if (!($72)) { + break; + } + $73 = $33; + $74 = $73 >>> 1; + $33 = $74; + $75 = ((($34)) + 20|0); + $76 = HEAP32[$75>>2]|0; + $77 = (($76) + 1)|0; + HEAP32[$75>>2] = $77; + } + $78 = ((($34)) + 24|0); + $79 = HEAP32[$78>>2]|0; + $80 = ((($34)) + 20|0); + $81 = HEAP32[$80>>2]|0; + $82 = (($81) - 1)|0; + $83 = 1 << $82; + $84 = ($79|0)==($83|0); + if ($84) { + $85 = ((($34)) + 20|0); + $86 = HEAP32[$85>>2]|0; + $87 = (($86) + -1)|0; + HEAP32[$85>>2] = $87; + } + $88 = ((($34)) + 24|0); + $89 = HEAP32[$88>>2]|0; + $90 = (($89>>>0) / 2)&-1; + $91 = (0 - ($90))|0; + $92 = ((($34)) + 28|0); + HEAP32[$92>>2] = $91; + $93 = ((($34)) + 28|0); + $94 = HEAP32[$93>>2]|0; + $95 = ((($34)) + 24|0); + $96 = HEAP32[$95>>2]|0; + $97 = (($94) + ($96))|0; + $98 = (($97) - 1)|0; + $99 = ((($34)) + 32|0); + HEAP32[$99>>2] = $98; + HEAP32[$34>>2] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip11compressors7integerD2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); + $27 = sp + 8|0; + $30 = sp + 329|0; + $68 = sp; + $71 = sp + 328|0; + $83 = $0; + $84 = $83; + $85 = ((($84)) + 36|0); + $81 = $85; + $86 = $81; + $80 = $86; + $87 = $80; + $88 = ((($87)) + 4|0); + $89 = HEAP32[$88>>2]|0; + $90 = HEAP32[$87>>2]|0; + $91 = $89; + $92 = $90; + $93 = (($91) - ($92))|0; + $94 = (($93|0) / 44)&-1; + $82 = $94; + $79 = $86; + $95 = $79; + $96 = HEAP32[$95>>2]|0; + $76 = $95; + $77 = $96; + $97 = $76; + $98 = ((($97)) + 4|0); + $99 = HEAP32[$98>>2]|0; + $78 = $99; + while(1) { + $100 = $77; + $101 = $78; + $102 = ($100|0)!=($101|0); + if (!($102)) { + break; + } + $75 = $97; + $103 = $75; + $104 = ((($103)) + 8|0); + $74 = $104; + $105 = $74; + $73 = $105; + $106 = $73; + $107 = $78; + $108 = ((($107)) + -44|0); + $78 = $108; + $72 = $108; + $109 = $72; + $69 = $106; + $70 = $109; + $110 = $69; + $111 = $70; + ;HEAP8[$68>>0]=HEAP8[$71>>0]|0; + $66 = $110; + $67 = $111; + $112 = $66; + $113 = $67; + $64 = $112; + $65 = $113; + $114 = $65; + __ZN6laszip6models10arithmeticD2Ev($114); + } + $115 = $77; + $116 = ((($97)) + 4|0); + HEAP32[$116>>2] = $115; + $117 = $82; + $62 = $86; + $63 = $117; + $118 = $62; + $61 = $118; + $119 = $61; + $120 = HEAP32[$119>>2]|0; + $60 = $120; + $121 = $60; + $44 = $118; + $122 = $44; + $123 = HEAP32[$122>>2]|0; + $43 = $123; + $124 = $43; + $49 = $118; + $125 = $49; + $48 = $125; + $126 = $48; + $47 = $126; + $127 = $47; + $128 = ((($127)) + 8|0); + $46 = $128; + $129 = $46; + $45 = $129; + $130 = $45; + $131 = HEAP32[$130>>2]|0; + $132 = HEAP32[$126>>2]|0; + $133 = $131; + $134 = $132; + $135 = (($133) - ($134))|0; + $136 = (($135|0) / 44)&-1; + $137 = (($124) + (($136*44)|0)|0); + $51 = $118; + $138 = $51; + $139 = HEAP32[$138>>2]|0; + $50 = $139; + $140 = $50; + $141 = $63; + $142 = (($140) + (($141*44)|0)|0); + $53 = $118; + $143 = $53; + $144 = HEAP32[$143>>2]|0; + $52 = $144; + $145 = $52; + $54 = $118; + $146 = $54; + $147 = ((($146)) + 4|0); + $148 = HEAP32[$147>>2]|0; + $149 = HEAP32[$146>>2]|0; + $150 = $148; + $151 = $149; + $152 = (($150) - ($151))|0; + $153 = (($152|0) / 44)&-1; + $154 = (($145) + (($153*44)|0)|0); + $55 = $118; + $56 = $121; + $57 = $137; + $58 = $142; + $59 = $154; + $42 = $86; + $155 = ((($84)) + 68|0); + $40 = $155; + $156 = $40; + $39 = $156; + $157 = $39; + $158 = ((($157)) + 4|0); + $159 = HEAP32[$158>>2]|0; + $160 = HEAP32[$157>>2]|0; + $161 = $159; + $162 = $160; + $163 = (($161) - ($162))|0; + $164 = (($163|0) / 44)&-1; + $41 = $164; + $38 = $156; + $165 = $38; + $166 = HEAP32[$165>>2]|0; + $35 = $165; + $36 = $166; + $167 = $35; + $168 = ((($167)) + 4|0); + $169 = HEAP32[$168>>2]|0; + $37 = $169; + while(1) { + $170 = $36; + $171 = $37; + $172 = ($170|0)!=($171|0); + if (!($172)) { + break; + } + $34 = $167; + $173 = $34; + $174 = ((($173)) + 8|0); + $33 = $174; + $175 = $33; + $32 = $175; + $176 = $32; + $177 = $37; + $178 = ((($177)) + -44|0); + $37 = $178; + $31 = $178; + $179 = $31; + $28 = $176; + $29 = $179; + $180 = $28; + $181 = $29; + ;HEAP8[$27>>0]=HEAP8[$30>>0]|0; + $25 = $180; + $26 = $181; + $182 = $25; + $183 = $26; + $23 = $182; + $24 = $183; + $184 = $24; + __ZN6laszip6models10arithmeticD2Ev($184); + } + $185 = $36; + $186 = ((($167)) + 4|0); + HEAP32[$186>>2] = $185; + $187 = $41; + $21 = $156; + $22 = $187; + $188 = $21; + $20 = $188; + $189 = $20; + $190 = HEAP32[$189>>2]|0; + $19 = $190; + $191 = $19; + $3 = $188; + $192 = $3; + $193 = HEAP32[$192>>2]|0; + $2 = $193; + $194 = $2; + $8 = $188; + $195 = $8; + $7 = $195; + $196 = $7; + $6 = $196; + $197 = $6; + $198 = ((($197)) + 8|0); + $5 = $198; + $199 = $5; + $4 = $199; + $200 = $4; + $201 = HEAP32[$200>>2]|0; + $202 = HEAP32[$196>>2]|0; + $203 = $201; + $204 = $202; + $205 = (($203) - ($204))|0; + $206 = (($205|0) / 44)&-1; + $207 = (($194) + (($206*44)|0)|0); + $10 = $188; + $208 = $10; + $209 = HEAP32[$208>>2]|0; + $9 = $209; + $210 = $9; + $211 = $22; + $212 = (($210) + (($211*44)|0)|0); + $12 = $188; + $213 = $12; + $214 = HEAP32[$213>>2]|0; + $11 = $214; + $215 = $11; + $13 = $188; + $216 = $13; + $217 = ((($216)) + 4|0); + $218 = HEAP32[$217>>2]|0; + $219 = HEAP32[$216>>2]|0; + $220 = $218; + $221 = $219; + $222 = (($220) - ($221))|0; + $223 = (($222|0) / 44)&-1; + $224 = (($215) + (($223*44)|0)|0); + $14 = $188; + $15 = $191; + $16 = $207; + $17 = $212; + $18 = $224; + $1 = $156; + $225 = ((($84)) + 68|0); + __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($225); + $226 = ((($84)) + 36|0); + __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($226); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4380|0); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3); + $4 = ((($2)) + 3980|0); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 320|0); + __ZN6laszip13decompressors7integerD2Ev($3); + $4 = ((($2)) + 240|0); + __ZN6laszip13decompressors7integerD2Ev($4); + $5 = ((($2)) + 160|0); + __ZN6laszip13decompressors7integerD2Ev($5); + $6 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerD2Ev($6); + __ZN6laszip13decompressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); + $33 = sp + 160|0; + $40 = sp + 8|0; + $30 = $0; + $31 = $1; + $32 = $2; + $44 = $30; + $45 = ((($44)) + 4781|0); + $46 = HEAP8[$45>>0]|0; + $47 = $46&1; + if (!($47)) { + $48 = ((($44)) + 4380|0); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($48); + $49 = ((($44)) + 4781|0); + HEAP8[$49>>0] = 1; + } + $50 = ((($44)) + 3976|0); + $51 = HEAP8[$50>>0]|0; + $52 = $51&1; + if (!($52)) { + $53 = ((($44)) + 3976|0); + HEAP8[$53>>0] = 1; + $54 = $31; + $55 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($54)|0); + $56 = $32; + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($55,$56,20); + $57 = $32; + __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($33,$57); + 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)); + $58 = $32; + $59 = ((($58)) + 20|0); + $29 = $59; + $311 = $29; + STACKTOP = sp;return ($311|0); + } + $60 = $31; + $61 = ((($44)) + 852|0); + $62 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($60,$61)|0); + $41 = $62; + $63 = $41; + $64 = ($63|0)!=(0); + if ($64) { + $65 = $41; + $66 = $65 & 32; + $67 = ($66|0)!=(0); + if ($67) { + $68 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($44)|0); + $42 = $68; + $69 = $31; + $70 = ((($44)) + 904|0); + $71 = $42; + $72 = $71&255; + $27 = $70; + $28 = $72; + $73 = $27; + $74 = $28; + $75 = (($73) + ($74<<2)|0); + $76 = HEAP32[$75>>2]|0; + $77 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($69,$76)|0); + $78 = $77&255; + $42 = $78; + $79 = $42; + __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($79,$44); + } + $80 = ((($44)) + 14|0); + $81 = HEAP8[$80>>0]|0; + $82 = $81 & 7; + $83 = $82&255; + $34 = $83; + $84 = ((($44)) + 14|0); + $85 = HEAP8[$84>>0]|0; + $86 = ($85&255) >>> 3; + $87 = $86 & 7; + $88 = $87&255; + $35 = $88; + $89 = $35; + $90 = (6646 + ($89<<3)|0); + $91 = $34; + $92 = (($90) + ($91)|0); + $93 = HEAP8[$92>>0]|0; + $94 = $93&255; + $36 = $94; + $95 = $35; + $96 = (6710 + ($95<<3)|0); + $97 = $34; + $98 = (($96) + ($97)|0); + $99 = HEAP8[$98>>0]|0; + $100 = $99&255; + $37 = $100; + $101 = $41; + $102 = $101 & 16; + $103 = ($102|0)!=(0); + if ($103) { + $104 = ((($44)) + 4380|0); + $105 = $31; + $106 = ((($44)) + 20|0); + $107 = $36; + $25 = $106; + $26 = $107; + $108 = $25; + $109 = $26; + $110 = (($108) + ($109<<1)|0); + $111 = HEAP16[$110>>1]|0; + $112 = $111&65535; + $113 = $36; + $114 = ($113>>>0)<(3); + $115 = $36; + $116 = $114 ? $115 : 3; + $117 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($104,$105,$112,$116)|0); + $118 = $117&65535; + $119 = ((($44)) + 12|0); + HEAP16[$119>>1] = $118; + $120 = ((($44)) + 12|0); + $121 = HEAP16[$120>>1]|0; + $122 = ((($44)) + 20|0); + $123 = $36; + $21 = $122; + $22 = $123; + $124 = $21; + $125 = $22; + $126 = (($124) + ($125<<1)|0); + HEAP16[$126>>1] = $121; + } else { + $127 = ((($44)) + 20|0); + $128 = $36; + $17 = $127; + $18 = $128; + $129 = $17; + $130 = $18; + $131 = (($129) + ($130<<1)|0); + $132 = HEAP16[$131>>1]|0; + $133 = ((($44)) + 12|0); + HEAP16[$133>>1] = $132; + } + $134 = $41; + $135 = $134 & 8; + $136 = ($135|0)!=(0); + if ($136) { + $137 = $31; + $138 = ((($44)) + 1928|0); + $139 = ((($44)) + 15|0); + $140 = HEAP8[$139>>0]|0; + $141 = $140&255; + $15 = $138; + $16 = $141; + $142 = $15; + $143 = $16; + $144 = (($142) + ($143<<2)|0); + $145 = HEAP32[$144>>2]|0; + $146 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($137,$145)|0); + $147 = $146&255; + $148 = ((($44)) + 15|0); + HEAP8[$148>>0] = $147; + } + $149 = $41; + $150 = $149 & 4; + $151 = ($150|0)!=(0); + if ($151) { + $152 = $31; + $153 = ((($44)) + 896|0); + $154 = ((($44)) + 14|0); + $155 = HEAP8[$154>>0]|0; + $156 = ($155&255) >>> 6; + $157 = $156 & 1; + $158 = $157&255; + $13 = $153; + $14 = $158; + $159 = $13; + $160 = $14; + $161 = (($159) + ($160<<2)|0); + $162 = HEAP32[$161>>2]|0; + $163 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($152,$162)|0); + $43 = $163; + $164 = $43; + $165 = ((($44)) + 16|0); + $166 = HEAP8[$165>>0]|0; + $167 = $166 << 24 >> 24; + $168 = (($164) + ($167))|0; + $169 = (__Z7U8_FOLDi($168)|0); + $170 = ((($44)) + 16|0); + HEAP8[$170>>0] = $169; + } + $171 = $41; + $172 = $171 & 2; + $173 = ($172|0)!=(0); + if ($173) { + $174 = $31; + $175 = ((($44)) + 2952|0); + $176 = ((($44)) + 17|0); + $177 = HEAP8[$176>>0]|0; + $178 = $177&255; + $9 = $175; + $10 = $178; + $179 = $9; + $180 = $10; + $181 = (($179) + ($180<<2)|0); + $182 = HEAP32[$181>>2]|0; + $183 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($174,$182)|0); + $184 = $183&255; + $185 = ((($44)) + 17|0); + HEAP8[$185>>0] = $184; + } + $186 = $41; + $187 = $186 & 1; + $188 = ($187|0)!=(0); + if ($188) { + $189 = ((($44)) + 4380|0); + $190 = ((($189)) + 80|0); + $191 = $31; + $192 = ((($44)) + 18|0); + $193 = HEAP16[$192>>1]|0; + $194 = $193&65535; + $195 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($190,$191,$194,0)|0); + $196 = $195&65535; + $197 = ((($44)) + 18|0); + HEAP16[$197>>1] = $196; + } + } else { + $198 = ((($44)) + 14|0); + $199 = HEAP8[$198>>0]|0; + $200 = $199 & 7; + $201 = $200&255; + $34 = $201; + $202 = ((($44)) + 14|0); + $203 = HEAP8[$202>>0]|0; + $204 = ($203&255) >>> 3; + $205 = $204 & 7; + $206 = $205&255; + $35 = $206; + $207 = $35; + $208 = (6646 + ($207<<3)|0); + $209 = $34; + $210 = (($208) + ($209)|0); + $211 = HEAP8[$210>>0]|0; + $212 = $211&255; + $36 = $212; + $213 = $35; + $214 = (6710 + ($213<<3)|0); + $215 = $34; + $216 = (($214) + ($215)|0); + $217 = HEAP8[$216>>0]|0; + $218 = $217&255; + $37 = $218; + } + $219 = ((($44)) + 52|0); + $220 = $36; + $7 = $219; + $8 = $220; + $221 = $7; + $222 = $8; + $223 = (($221) + (($222*24)|0)|0); + $224 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($223)|0); + $39 = $224; + $225 = ((($44)) + 4380|0); + $226 = ((($225)) + 160|0); + $227 = $31; + $228 = $39; + $229 = $35; + $230 = ($229|0)==(1); + $231 = $230&1; + $232 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($226,$227,$228,$231)|0); + HEAP32[$40>>2] = $232; + $233 = HEAP32[$40>>2]|0; + $234 = HEAP32[$44>>2]|0; + $235 = (($234) + ($233))|0; + HEAP32[$44>>2] = $235; + $236 = ((($44)) + 52|0); + $237 = $36; + $5 = $236; + $6 = $237; + $238 = $5; + $239 = $6; + $240 = (($238) + (($239*24)|0)|0); + __ZN6laszip5utils16streaming_medianIiE3addERKi($240,$40); + $241 = ((($44)) + 436|0); + $242 = $36; + $3 = $241; + $4 = $242; + $243 = $3; + $244 = $4; + $245 = (($243) + (($244*24)|0)|0); + $246 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($245)|0); + $39 = $246; + $247 = ((($44)) + 4380|0); + $248 = ((($247)) + 160|0); + $249 = (__ZNK6laszip13decompressors7integer4getKEv($248)|0); + $38 = $249; + $250 = ((($44)) + 4380|0); + $251 = ((($250)) + 240|0); + $252 = $31; + $253 = $39; + $254 = $35; + $255 = ($254|0)==(1); + $256 = $255&1; + $257 = $38; + $258 = ($257>>>0)<(20); + $259 = $38; + $260 = $259 & -2; + $261 = $258 ? $260 : 20; + $262 = (($256) + ($261))|0; + $263 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($251,$252,$253,$262)|0); + HEAP32[$40>>2] = $263; + $264 = HEAP32[$40>>2]|0; + $265 = ((($44)) + 4|0); + $266 = HEAP32[$265>>2]|0; + $267 = (($266) + ($264))|0; + HEAP32[$265>>2] = $267; + $268 = ((($44)) + 436|0); + $269 = $36; + $11 = $268; + $12 = $269; + $270 = $11; + $271 = $12; + $272 = (($270) + (($271*24)|0)|0); + __ZN6laszip5utils16streaming_medianIiE3addERKi($272,$40); + $273 = ((($44)) + 4380|0); + $274 = ((($273)) + 160|0); + $275 = (__ZNK6laszip13decompressors7integer4getKEv($274)|0); + $276 = ((($44)) + 4380|0); + $277 = ((($276)) + 240|0); + $278 = (__ZNK6laszip13decompressors7integer4getKEv($277)|0); + $279 = (($275) + ($278))|0; + $280 = (($279>>>0) / 2)&-1; + $38 = $280; + $281 = ((($44)) + 4380|0); + $282 = ((($281)) + 320|0); + $283 = $31; + $284 = ((($44)) + 820|0); + $285 = $37; + $19 = $284; + $20 = $285; + $286 = $19; + $287 = $20; + $288 = (($286) + ($287<<2)|0); + $289 = HEAP32[$288>>2]|0; + $290 = $35; + $291 = ($290|0)==(1); + $292 = $291&1; + $293 = $38; + $294 = ($293>>>0)<(18); + $295 = $38; + $296 = $295 & -2; + $297 = $294 ? $296 : 18; + $298 = (($292) + ($297))|0; + $299 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($282,$283,$289,$298)|0); + $300 = ((($44)) + 8|0); + HEAP32[$300>>2] = $299; + $301 = ((($44)) + 8|0); + $302 = HEAP32[$301>>2]|0; + $303 = ((($44)) + 820|0); + $304 = $37; + $23 = $303; + $24 = $304; + $305 = $23; + $306 = $24; + $307 = (($305) + ($306<<2)|0); + HEAP32[$307>>2] = $302; + $308 = $32; + __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($44,$308); + $309 = $32; + $310 = ((($309)) + 20|0); + $29 = $310; + $311 = $29; + STACKTOP = sp;return ($311|0); +} +function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13decompressors7integer4initEv($2); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integer4initEv($3); + $4 = ((($2)) + 160|0); + __ZN6laszip13decompressors7integer4initEv($4); + $5 = ((($2)) + 240|0); + __ZN6laszip13decompressors7integer4initEv($5); + $6 = ((($2)) + 320|0); + __ZN6laszip13decompressors7integer4initEv($6); + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP32[$2>>2]|0; + STACKTOP = sp;return ($3|0); +} +function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $26 = sp; + $29 = sp + 124|0; + $32 = sp + 12|0; + $34 = sp + 4|0; + $30 = $0; + $31 = $1; + HEAP32[$32>>2] = $2; + $35 = $30; + $36 = ((($35)) + 8|0); + $37 = HEAP32[$36>>2]|0; + $38 = ((($35)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $40 = (($37) - ($39))|0; + HEAP32[$34>>2] = $40; + $27 = $34; + $28 = $32; + $41 = $27; + $42 = $28; + ;HEAP8[$26>>0]=HEAP8[$29>>0]|0; + $24 = $41; + $25 = $42; + $43 = $25; + $44 = $24; + $21 = $26; + $22 = $43; + $23 = $44; + $45 = $22; + $46 = HEAP32[$45>>2]|0; + $47 = $23; + $48 = HEAP32[$47>>2]|0; + $49 = ($46>>>0)<($48>>>0); + $50 = $25; + $51 = $24; + $52 = $49 ? $50 : $51; + $53 = HEAP32[$52>>2]|0; + $33 = $53; + $54 = ((($35)) + 12|0); + $55 = HEAP32[$54>>2]|0; + $56 = ((($35)) + 4|0); + $57 = HEAP32[$56>>2]|0; + $58 = (($55) + ($57)|0); + $59 = ((($35)) + 12|0); + $60 = HEAP32[$59>>2]|0; + $61 = ((($35)) + 4|0); + $62 = HEAP32[$61>>2]|0; + $63 = (($60) + ($62)|0); + $64 = $33; + $65 = (($63) + ($64)|0); + $66 = $31; + $9 = $58; + $10 = $65; + $11 = $66; + $67 = $9; + $8 = $67; + $68 = $8; + $69 = $10; + $3 = $69; + $70 = $3; + $71 = $11; + $4 = $71; + $72 = $4; + $5 = $68; + $6 = $70; + $7 = $72; + while(1) { + $73 = $5; + $74 = $6; + $75 = ($73|0)!=($74|0); + if (!($75)) { + break; + } + $76 = $5; + $77 = HEAP8[$76>>0]|0; + $78 = $7; + HEAP8[$78>>0] = $77; + $79 = $5; + $80 = ((($79)) + 1|0); + $5 = $80; + $81 = $7; + $82 = ((($81)) + 1|0); + $7 = $82; + } + $83 = $33; + $84 = ((($35)) + 4|0); + $85 = HEAP32[$84>>2]|0; + $86 = (($85) + ($83))|0; + HEAP32[$84>>2] = $86; + $87 = $33; + $88 = HEAP32[$32>>2]|0; + $89 = (($88) - ($87))|0; + HEAP32[$32>>2] = $89; + $90 = HEAP32[$32>>2]|0; + $91 = ($90|0)!=(0); + if (!($91)) { + STACKTOP = sp;return; + } + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($35); + $92 = ((($35)) + 12|0); + $93 = HEAP32[$92>>2]|0; + $94 = ((($35)) + 4|0); + $95 = HEAP32[$94>>2]|0; + $96 = (($93) + ($95)|0); + $97 = ((($35)) + 12|0); + $98 = HEAP32[$97>>2]|0; + $99 = ((($35)) + 4|0); + $100 = HEAP32[$99>>2]|0; + $101 = (($98) + ($100)|0); + $102 = HEAP32[$32>>2]|0; + $103 = (($101) + ($102)|0); + $104 = $31; + $105 = $33; + $106 = (($104) + ($105)|0); + $18 = $96; + $19 = $103; + $20 = $106; + $107 = $18; + $17 = $107; + $108 = $17; + $109 = $19; + $12 = $109; + $110 = $12; + $111 = $20; + $13 = $111; + $112 = $13; + $14 = $108; + $15 = $110; + $16 = $112; + while(1) { + $113 = $14; + $114 = $15; + $115 = ($113|0)!=($114|0); + if (!($115)) { + break; + } + $116 = $14; + $117 = HEAP8[$116>>0]|0; + $118 = $16; + HEAP8[$118>>0] = $117; + $119 = $14; + $120 = ((($119)) + 1|0); + $14 = $120; + $121 = $16; + $122 = ((($121)) + 1|0); + $16 = $122; + } + $123 = HEAP32[$32>>2]|0; + $124 = ((($35)) + 4|0); + $125 = HEAP32[$124>>2]|0; + $126 = (($125) + ($123))|0; + HEAP32[$124>>2] = $126; + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $1; + __ZN6laszip7formats3las7point10C2Ev($0); + $4 = $2; + $5 = (__ZN6laszip7formats7packersIiE6unpackEPKc($4)|0); + 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; + $6 = $2; + $7 = ((($6)) + 4|0); + $2 = $7; + $8 = $2; + $9 = (__ZN6laszip7formats7packersIiE6unpackEPKc($8)|0); + $10 = ((($0)) + 4|0); + 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; + $11 = $2; + $12 = ((($11)) + 4|0); + $2 = $12; + $13 = $2; + $14 = (__ZN6laszip7formats7packersIiE6unpackEPKc($13)|0); + $15 = ((($0)) + 8|0); + 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; + $16 = $2; + $17 = ((($16)) + 4|0); + $2 = $17; + $18 = $2; + $19 = (__ZN6laszip7formats7packersItE6unpackEPKc($18)|0); + $20 = ((($0)) + 12|0); + HEAP8[$20>>0]=$19&255;HEAP8[$20+1>>0]=$19>>8; + $21 = $2; + $22 = ((($21)) + 2|0); + $2 = $22; + $23 = $2; + $24 = (__ZN6laszip7formats7packersIhE6unpackEPKc($23)|0); + $3 = $24; + $25 = $2; + $26 = ((($25)) + 1|0); + $2 = $26; + $27 = $3; + __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($27,$0); + $28 = $2; + $29 = (__ZN6laszip7formats7packersIhE6unpackEPKc($28)|0); + $30 = ((($0)) + 15|0); + HEAP8[$30>>0] = $29; + $31 = $2; + $32 = ((($31)) + 1|0); + $2 = $32; + $33 = $2; + $34 = (__ZN6laszip7formats7packersIcE6unpackEPKc($33)|0); + $35 = ((($0)) + 16|0); + HEAP8[$35>>0] = $34; + $36 = $2; + $37 = ((($36)) + 1|0); + $2 = $37; + $38 = $2; + $39 = (__ZN6laszip7formats7packersIcE6unpackEPKc($38)|0); + $40 = ((($0)) + 17|0); + HEAP8[$40>>0] = $39; + $41 = $2; + $42 = ((($41)) + 1|0); + $2 = $42; + $43 = $2; + $44 = (__ZN6laszip7formats7packersItE6unpackEPKc($43)|0); + $45 = ((($0)) + 18|0); + HEAP8[$45>>0]=$44&255;HEAP8[$45+1>>0]=$44>>8; + STACKTOP = sp;return; +} +function __ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($0) { + $0 = $0|0; + 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; + 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; + var $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $6 = $1; + $7 = ((($6)) + 14|0); + $8 = HEAP8[$7>>0]|0; + $9 = $8 & 7; + $2 = $9; + $10 = $1; + $11 = ((($10)) + 14|0); + $12 = HEAP8[$11>>0]|0; + $13 = ($12&255) >>> 3; + $14 = $13 & 7; + $3 = $14; + $15 = $1; + $16 = ((($15)) + 14|0); + $17 = HEAP8[$16>>0]|0; + $18 = ($17&255) >>> 6; + $19 = $18 & 1; + $4 = $19; + $20 = $1; + $21 = ((($20)) + 14|0); + $22 = HEAP8[$21>>0]|0; + $23 = ($22&255) >>> 7; + $5 = $23; + $24 = $5; + $25 = $24&255; + $26 = $25 & 1; + $27 = $26 << 7; + $28 = $4; + $29 = $28&255; + $30 = $29 & 1; + $31 = $30 << 6; + $32 = $27 | $31; + $33 = $3; + $34 = $33&255; + $35 = $34 & 7; + $36 = $35 << 3; + $37 = $32 | $36; + $38 = $2; + $39 = $38&255; + $40 = $39 & 7; + $41 = $37 | $40; + $42 = $41&255; + STACKTOP = sp;return ($42|0); +} +function __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $4&255; + $6 = $5 & 7; + $7 = $6&255; + $8 = $3; + $9 = ((($8)) + 14|0); + $10 = HEAP8[$9>>0]|0; + $11 = $7 & 7; + $12 = $10 & -8; + $13 = $12 | $11; + HEAP8[$9>>0] = $13; + $14 = $2; + $15 = $14&255; + $16 = $15 >> 3; + $17 = $16 & 7; + $18 = $17&255; + $19 = $3; + $20 = ((($19)) + 14|0); + $21 = HEAP8[$20>>0]|0; + $22 = $18 & 7; + $23 = ($22 << 3)&255; + $24 = $21 & -57; + $25 = $24 | $23; + HEAP8[$20>>0] = $25; + $26 = $2; + $27 = $26&255; + $28 = $27 >> 6; + $29 = $28 & 1; + $30 = $29&255; + $31 = $3; + $32 = ((($31)) + 14|0); + $33 = HEAP8[$32>>0]|0; + $34 = $30 & 1; + $35 = ($34 << 6)&255; + $36 = $33 & -65; + $37 = $36 | $35; + HEAP8[$32>>0] = $37; + $38 = $2; + $39 = $38&255; + $40 = $39 >> 7; + $41 = $40 & 1; + $42 = $41&255; + $43 = $3; + $44 = ((($43)) + 14|0); + $45 = HEAP8[$44>>0]|0; + $46 = $42 & 1; + $47 = ($46 << 7)&255; + $48 = $45 & 127; + $49 = $48 | $47; + HEAP8[$44>>0] = $49; + STACKTOP = sp;return; +} +function __Z7U8_FOLDi($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = $2&255; + STACKTOP = sp;return ($3|0); +} +function __ZNK6laszip5utils16streaming_medianIiE3getEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $3; + $1 = $4; + $2 = 2; + $5 = $1; + $6 = $2; + $7 = (($5) + ($6<<2)|0); + $8 = HEAP32[$7>>2]|0; + STACKTOP = sp;return ($8|0); +} +function __ZN6laszip5utils16streaming_medianIiE3addERKi($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0); + $86 = $0; + $87 = $1; + $88 = $86; + $89 = ((($88)) + 20|0); + $90 = HEAP8[$89>>0]|0; + $91 = $90&1; + if ($91) { + $92 = $87; + $93 = HEAP32[$92>>2]|0; + $84 = $88; + $85 = 2; + $94 = $84; + $95 = $85; + $96 = (($94) + ($95<<2)|0); + $97 = HEAP32[$96>>2]|0; + $98 = ($93|0)<($97|0); + if (!($98)) { + $163 = $87; + $164 = HEAP32[$163>>2]|0; + $32 = $88; + $33 = 3; + $165 = $32; + $166 = $33; + $167 = (($165) + ($166<<2)|0); + $168 = HEAP32[$167>>2]|0; + $169 = ($164|0)<($168|0); + if ($169) { + $34 = $88; + $35 = 3; + $170 = $34; + $171 = $35; + $172 = (($170) + ($171<<2)|0); + $173 = HEAP32[$172>>2]|0; + $36 = $88; + $37 = 4; + $174 = $36; + $175 = $37; + $176 = (($174) + ($175<<2)|0); + HEAP32[$176>>2] = $173; + $177 = $87; + $178 = HEAP32[$177>>2]|0; + $38 = $88; + $39 = 3; + $179 = $38; + $180 = $39; + $181 = (($179) + ($180<<2)|0); + HEAP32[$181>>2] = $178; + } else { + $182 = $87; + $183 = HEAP32[$182>>2]|0; + $40 = $88; + $41 = 4; + $184 = $40; + $185 = $41; + $186 = (($184) + ($185<<2)|0); + HEAP32[$186>>2] = $183; + } + $187 = ((($88)) + 20|0); + HEAP8[$187>>0] = 0; + STACKTOP = sp;return; + } + $2 = $88; + $3 = 3; + $99 = $2; + $100 = $3; + $101 = (($99) + ($100<<2)|0); + $102 = HEAP32[$101>>2]|0; + $4 = $88; + $5 = 4; + $103 = $4; + $104 = $5; + $105 = (($103) + ($104<<2)|0); + HEAP32[$105>>2] = $102; + $6 = $88; + $7 = 2; + $106 = $6; + $107 = $7; + $108 = (($106) + ($107<<2)|0); + $109 = HEAP32[$108>>2]|0; + $8 = $88; + $9 = 3; + $110 = $8; + $111 = $9; + $112 = (($110) + ($111<<2)|0); + HEAP32[$112>>2] = $109; + $113 = $87; + $114 = HEAP32[$113>>2]|0; + $10 = $88; + $11 = 0; + $115 = $10; + $116 = $11; + $117 = (($115) + ($116<<2)|0); + $118 = HEAP32[$117>>2]|0; + $119 = ($114|0)<($118|0); + if ($119) { + $12 = $88; + $13 = 1; + $120 = $12; + $121 = $13; + $122 = (($120) + ($121<<2)|0); + $123 = HEAP32[$122>>2]|0; + $14 = $88; + $15 = 2; + $124 = $14; + $125 = $15; + $126 = (($124) + ($125<<2)|0); + HEAP32[$126>>2] = $123; + $16 = $88; + $17 = 0; + $127 = $16; + $128 = $17; + $129 = (($127) + ($128<<2)|0); + $130 = HEAP32[$129>>2]|0; + $18 = $88; + $19 = 1; + $131 = $18; + $132 = $19; + $133 = (($131) + ($132<<2)|0); + HEAP32[$133>>2] = $130; + $134 = $87; + $135 = HEAP32[$134>>2]|0; + $20 = $88; + $21 = 0; + $136 = $20; + $137 = $21; + $138 = (($136) + ($137<<2)|0); + HEAP32[$138>>2] = $135; + STACKTOP = sp;return; + } + $139 = $87; + $140 = HEAP32[$139>>2]|0; + $22 = $88; + $23 = 1; + $141 = $22; + $142 = $23; + $143 = (($141) + ($142<<2)|0); + $144 = HEAP32[$143>>2]|0; + $145 = ($140|0)<($144|0); + if ($145) { + $24 = $88; + $25 = 1; + $146 = $24; + $147 = $25; + $148 = (($146) + ($147<<2)|0); + $149 = HEAP32[$148>>2]|0; + $26 = $88; + $27 = 2; + $150 = $26; + $151 = $27; + $152 = (($150) + ($151<<2)|0); + HEAP32[$152>>2] = $149; + $153 = $87; + $154 = HEAP32[$153>>2]|0; + $28 = $88; + $29 = 1; + $155 = $28; + $156 = $29; + $157 = (($155) + ($156<<2)|0); + HEAP32[$157>>2] = $154; + STACKTOP = sp;return; + } else { + $158 = $87; + $159 = HEAP32[$158>>2]|0; + $30 = $88; + $31 = 2; + $160 = $30; + $161 = $31; + $162 = (($160) + ($161<<2)|0); + HEAP32[$162>>2] = $159; + STACKTOP = sp;return; + } + } else { + $42 = $88; + $43 = 2; + $188 = $42; + $189 = $43; + $190 = (($188) + ($189<<2)|0); + $191 = HEAP32[$190>>2]|0; + $192 = $87; + $193 = HEAP32[$192>>2]|0; + $194 = ($191|0)<($193|0); + if (!($194)) { + $74 = $88; + $75 = 1; + $259 = $74; + $260 = $75; + $261 = (($259) + ($260<<2)|0); + $262 = HEAP32[$261>>2]|0; + $263 = $87; + $264 = HEAP32[$263>>2]|0; + $265 = ($262|0)<($264|0); + if ($265) { + $76 = $88; + $77 = 1; + $266 = $76; + $267 = $77; + $268 = (($266) + ($267<<2)|0); + $269 = HEAP32[$268>>2]|0; + $78 = $88; + $79 = 0; + $270 = $78; + $271 = $79; + $272 = (($270) + ($271<<2)|0); + HEAP32[$272>>2] = $269; + $273 = $87; + $274 = HEAP32[$273>>2]|0; + $80 = $88; + $81 = 1; + $275 = $80; + $276 = $81; + $277 = (($275) + ($276<<2)|0); + HEAP32[$277>>2] = $274; + } else { + $278 = $87; + $279 = HEAP32[$278>>2]|0; + $82 = $88; + $83 = 0; + $280 = $82; + $281 = $83; + $282 = (($280) + ($281<<2)|0); + HEAP32[$282>>2] = $279; + } + $283 = ((($88)) + 20|0); + HEAP8[$283>>0] = 1; + STACKTOP = sp;return; + } + $44 = $88; + $45 = 1; + $195 = $44; + $196 = $45; + $197 = (($195) + ($196<<2)|0); + $198 = HEAP32[$197>>2]|0; + $46 = $88; + $47 = 0; + $199 = $46; + $200 = $47; + $201 = (($199) + ($200<<2)|0); + HEAP32[$201>>2] = $198; + $48 = $88; + $49 = 2; + $202 = $48; + $203 = $49; + $204 = (($202) + ($203<<2)|0); + $205 = HEAP32[$204>>2]|0; + $50 = $88; + $51 = 1; + $206 = $50; + $207 = $51; + $208 = (($206) + ($207<<2)|0); + HEAP32[$208>>2] = $205; + $52 = $88; + $53 = 4; + $209 = $52; + $210 = $53; + $211 = (($209) + ($210<<2)|0); + $212 = HEAP32[$211>>2]|0; + $213 = $87; + $214 = HEAP32[$213>>2]|0; + $215 = ($212|0)<($214|0); + if ($215) { + $54 = $88; + $55 = 3; + $216 = $54; + $217 = $55; + $218 = (($216) + ($217<<2)|0); + $219 = HEAP32[$218>>2]|0; + $56 = $88; + $57 = 2; + $220 = $56; + $221 = $57; + $222 = (($220) + ($221<<2)|0); + HEAP32[$222>>2] = $219; + $58 = $88; + $59 = 4; + $223 = $58; + $224 = $59; + $225 = (($223) + ($224<<2)|0); + $226 = HEAP32[$225>>2]|0; + $60 = $88; + $61 = 3; + $227 = $60; + $228 = $61; + $229 = (($227) + ($228<<2)|0); + HEAP32[$229>>2] = $226; + $230 = $87; + $231 = HEAP32[$230>>2]|0; + $62 = $88; + $63 = 4; + $232 = $62; + $233 = $63; + $234 = (($232) + ($233<<2)|0); + HEAP32[$234>>2] = $231; + STACKTOP = sp;return; + } + $64 = $88; + $65 = 3; + $235 = $64; + $236 = $65; + $237 = (($235) + ($236<<2)|0); + $238 = HEAP32[$237>>2]|0; + $239 = $87; + $240 = HEAP32[$239>>2]|0; + $241 = ($238|0)<($240|0); + if ($241) { + $66 = $88; + $67 = 3; + $242 = $66; + $243 = $67; + $244 = (($242) + ($243<<2)|0); + $245 = HEAP32[$244>>2]|0; + $68 = $88; + $69 = 2; + $246 = $68; + $247 = $69; + $248 = (($246) + ($247<<2)|0); + HEAP32[$248>>2] = $245; + $249 = $87; + $250 = HEAP32[$249>>2]|0; + $70 = $88; + $71 = 3; + $251 = $70; + $252 = $71; + $253 = (($251) + ($252<<2)|0); + HEAP32[$253>>2] = $250; + STACKTOP = sp;return; + } else { + $254 = $87; + $255 = HEAP32[$254>>2]|0; + $72 = $88; + $73 = 2; + $256 = $72; + $257 = $73; + $258 = (($256) + ($257<<2)|0); + HEAP32[$258>>2] = $255; + STACKTOP = sp;return; + } + } +} +function __ZNK6laszip13decompressors7integer4getKEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP32[$2>>2]|0; + STACKTOP = sp;return ($3|0); +} +function __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $5 = $2; + $6 = HEAPU8[$5>>0]|(HEAPU8[$5+1>>0]<<8)|(HEAPU8[$5+2>>0]<<16)|(HEAPU8[$5+3>>0]<<24); + $7 = $3; + __ZN6laszip7formats7packersIiE4packEiPc($6,$7); + $8 = $3; + $9 = ((($8)) + 4|0); + $3 = $9; + $10 = $2; + $11 = ((($10)) + 4|0); + $12 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8)|(HEAPU8[$11+2>>0]<<16)|(HEAPU8[$11+3>>0]<<24); + $13 = $3; + __ZN6laszip7formats7packersIiE4packEiPc($12,$13); + $14 = $3; + $15 = ((($14)) + 4|0); + $3 = $15; + $16 = $2; + $17 = ((($16)) + 8|0); + $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24); + $19 = $3; + __ZN6laszip7formats7packersIiE4packEiPc($18,$19); + $20 = $3; + $21 = ((($20)) + 4|0); + $3 = $21; + $22 = $2; + $23 = ((($22)) + 12|0); + $24 = HEAPU8[$23>>0]|(HEAPU8[$23+1>>0]<<8); + $25 = $3; + __ZN6laszip7formats7packersItE4packEtPc($24,$25); + $26 = $3; + $27 = ((($26)) + 2|0); + $3 = $27; + $28 = $2; + $29 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($28)|0); + $4 = $29; + $30 = $4; + $31 = $3; + __ZN6laszip7formats7packersIhE4packEhPc($30,$31); + $32 = $3; + $33 = ((($32)) + 1|0); + $3 = $33; + $34 = $2; + $35 = ((($34)) + 15|0); + $36 = HEAP8[$35>>0]|0; + $37 = $3; + __ZN6laszip7formats7packersIhE4packEhPc($36,$37); + $38 = $3; + $39 = ((($38)) + 1|0); + $3 = $39; + $40 = $2; + $41 = ((($40)) + 16|0); + $42 = HEAP8[$41>>0]|0; + $43 = $3; + __ZN6laszip7formats7packersIcE4packEcPc($42,$43); + $44 = $3; + $45 = ((($44)) + 1|0); + $3 = $45; + $46 = $2; + $47 = ((($46)) + 17|0); + $48 = HEAP8[$47>>0]|0; + $49 = $3; + __ZN6laszip7formats7packersIcE4packEcPc($48,$49); + $50 = $3; + $51 = ((($50)) + 1|0); + $3 = $51; + $52 = $2; + $53 = ((($52)) + 18|0); + $54 = HEAPU8[$53>>0]|(HEAPU8[$53+1>>0]<<8); + $55 = $3; + __ZN6laszip7formats7packersItE4packEtPc($54,$55); + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersIiE6unpackEPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = (__ZN6laszip7formats7packersIjE6unpackEPKc($2)|0); + STACKTOP = sp;return ($3|0); +} +function __ZN6laszip7formats7packersItE6unpackEPKc($0) { + $0 = $0|0; + 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; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $4 = $1; + $5 = HEAP8[$4>>0]|0; + $6 = $5 << 24 >> 24; + $2 = $6; + $7 = $1; + $8 = ((($7)) + 1|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9 << 24 >> 24; + $3 = $10; + $11 = $3; + $12 = $11&65535; + $13 = $12 & 255; + $14 = $13 << 8; + $15 = $2; + $16 = $15&65535; + $17 = $16 & 255; + $18 = $14 | $17; + $19 = $18&65535; + STACKTOP = sp;return ($19|0); +} +function __ZN6laszip7formats7packersIhE6unpackEPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP8[$2>>0]|0; + STACKTOP = sp;return ($3|0); +} +function __ZN6laszip7formats7packersIcE6unpackEPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP8[$2>>0]|0; + STACKTOP = sp;return ($3|0); +} +function __ZN6laszip7formats7packersIjE6unpackEPKc($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $1 = $0; + $6 = $1; + $7 = HEAP8[$6>>0]|0; + $8 = $7 << 24 >> 24; + $2 = $8; + $9 = $1; + $10 = ((($9)) + 1|0); + $11 = HEAP8[$10>>0]|0; + $12 = $11 << 24 >> 24; + $3 = $12; + $13 = $1; + $14 = ((($13)) + 2|0); + $15 = HEAP8[$14>>0]|0; + $16 = $15 << 24 >> 24; + $4 = $16; + $17 = $1; + $18 = ((($17)) + 3|0); + $19 = HEAP8[$18>>0]|0; + $20 = $19 << 24 >> 24; + $5 = $20; + $21 = $5; + $22 = $21 << 24; + $23 = $4; + $24 = $23 & 255; + $25 = $24 << 16; + $26 = $22 | $25; + $27 = $3; + $28 = $27 & 255; + $29 = $28 << 8; + $30 = $26 | $29; + $31 = $2; + $32 = $31 & 255; + $33 = $30 | $32; + STACKTOP = sp;return ($33|0); +} +function __ZN6laszip7formats7packersIiE4packEiPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + __ZN6laszip7formats7packersIjE4packEjPc($4,$5); + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersItE4packEtPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $4&65535; + $6 = $5 >> 8; + $7 = $6 & 255; + $8 = $7&255; + $9 = $3; + $10 = ((($9)) + 1|0); + HEAP8[$10>>0] = $8; + $11 = $2; + $12 = $11&65535; + $13 = $12 & 255; + $14 = $13&255; + $15 = $3; + HEAP8[$15>>0] = $14; + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersIhE4packEhPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + HEAP8[$5>>0] = $4; + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersIcE4packEcPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + HEAP8[$5>>0] = $4; + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersIjE4packEjPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $4 >>> 24; + $6 = $5 & 255; + $7 = $6&255; + $8 = $3; + $9 = ((($8)) + 3|0); + HEAP8[$9>>0] = $7; + $10 = $2; + $11 = $10 >>> 16; + $12 = $11 & 255; + $13 = $12&255; + $14 = $3; + $15 = ((($14)) + 2|0); + HEAP8[$15>>0] = $13; + $16 = $2; + $17 = $16 >>> 8; + $18 = $17 & 255; + $19 = $18&255; + $20 = $3; + $21 = ((($20)) + 1|0); + HEAP8[$21>>0] = $19; + $22 = $2; + $23 = $22 & 255; + $24 = $23&255; + $25 = $3; + HEAP8[$25>>0] = $24; + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 360; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2100); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($7); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2124); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2); + $3 = ((($2)) + 164|0); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3); + $4 = ((($2)) + 244|0); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4); + $5 = ((($2)) + 324|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 325|0); + HEAP8[$6>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2100); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $29 = sp + 120|0; + $30 = sp + 4|0; + $31 = sp; + $28 = $0; + $32 = $28; + HEAP8[$32>>0] = 0; + $33 = ((($32)) + 4|0); + __ZN6laszip6models10arithmeticC2EjbPj($33,516,0,0); + $34 = ((($32)) + 48|0); + __ZN6laszip6models10arithmeticC2EjbPj($34,6,0,0); + $35 = ((($32)) + 92|0); + HEAP32[$35>>2] = 0; + $36 = ((($32)) + 96|0); + HEAP32[$36>>2] = 0; + $37 = ((($32)) + 100|0); + __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($37); + $38 = ((($32)) + 100|0); + __ZN6laszip7formats3las7gpstimeC2Ev($29); + $26 = $38; + $27 = $29; + $39 = $26; + $40 = $27; + $23 = $39; + $24 = 4; + $25 = $40; + $41 = $23; + $42 = $24; + $22 = $42; + $43 = $22; + $44 = $25; + $19 = $41; + $20 = $43; + $21 = $44; + while(1) { + $45 = $20; + $46 = ($45>>>0)>(0); + if (!($46)) { + break; + } + $47 = $21; + $48 = $19; + ;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; + $49 = $19; + $50 = ((($49)) + 8|0); + $19 = $50; + $51 = $20; + $52 = (($51) + -1)|0; + $20 = $52; + } + $53 = ((($32)) + 132|0); + HEAP32[$30>>2] = 0; + $17 = $53; + $18 = $30; + $54 = $17; + $55 = $18; + $14 = $54; + $15 = 4; + $16 = $55; + $56 = $14; + $57 = $15; + $13 = $57; + $58 = $13; + $59 = $16; + $10 = $56; + $11 = $58; + $12 = $59; + while(1) { + $60 = $11; + $61 = ($60>>>0)>(0); + if (!($61)) { + break; + } + $62 = $12; + $63 = HEAP32[$62>>2]|0; + $64 = $10; + HEAP32[$64>>2] = $63; + $65 = $10; + $66 = ((($65)) + 4|0); + $10 = $66; + $67 = $11; + $68 = (($67) + -1)|0; + $11 = $68; + } + $69 = ((($32)) + 148|0); + HEAP32[$31>>2] = 0; + $8 = $69; + $9 = $31; + $70 = $8; + $71 = $9; + $5 = $70; + $6 = 4; + $7 = $71; + $72 = $5; + $73 = $6; + $4 = $73; + $74 = $4; + $75 = $7; + $1 = $72; + $2 = $74; + $3 = $75; + while(1) { + $76 = $2; + $77 = ($76>>>0)>(0); + if (!($77)) { + break; + } + $78 = $3; + $79 = HEAP32[$78>>2]|0; + $80 = $1; + HEAP32[$80>>2] = $79; + $81 = $1; + $82 = ((($81)) + 4|0); + $1 = $82; + $83 = $2; + $84 = (($83) + -1)|0; + $2 = $84; + } + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,32,9,8,0); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13decompressors7integerC2Ejjjj($2,32,9,8,0); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 48|0); + __ZN6laszip6models10arithmeticD2Ev($3); + $4 = ((($2)) + 4|0); + __ZN6laszip6models10arithmeticD2Ev($4); + STACKTOP = sp;return; +} +function __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 32|0); + $4 = $2; + while(1) { + __ZN6laszip7formats3las7gpstimeC2Ev($4); + $5 = ((($4)) + 8|0); + $6 = ($5|0)==($3|0); + if ($6) { + break; + } else { + $4 = $5; + } + } + STACKTOP = sp;return; +} +function __ZN6laszip7formats3las7gpstimeC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = $2; + $4 = $3; + 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; + $5 = (($3) + 4)|0; + $6 = $5; + 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; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 244|0); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3); + $4 = ((($2)) + 164|0); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13decompressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0); + $91 = sp + 360|0; + $88 = $0; + $89 = $1; + $90 = $2; + $94 = $88; + $95 = ((($94)) + 325|0); + $96 = HEAP8[$95>>0]|0; + $97 = $96&1; + if (!($97)) { + $98 = ((($94)) + 244|0); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($98); + $99 = ((($94)) + 325|0); + HEAP8[$99>>0] = 1; + } + $100 = HEAP8[$94>>0]|0; + $101 = $100&1; + if (!($101)) { + HEAP8[$94>>0] = 1; + $102 = $89; + $103 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($102)|0); + $104 = $90; + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($103,$104,8); + $105 = $90; + $106 = (__ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($105)|0); + $107 = tempRet0; + $108 = $91; + $109 = $108; + 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; + $110 = (($108) + 4)|0; + $111 = $110; + 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; + $112 = ((($94)) + 100|0); + $85 = $112; + $86 = 0; + $113 = $85; + $114 = $86; + $115 = (($113) + ($114<<3)|0); + ;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; + $116 = $90; + $117 = ((($116)) + 8|0); + $87 = $117; + $601 = $87; + STACKTOP = sp;return ($601|0); + } + $118 = ((($94)) + 132|0); + $119 = ((($94)) + 92|0); + $120 = HEAP32[$119>>2]|0; + $83 = $118; + $84 = $120; + $121 = $83; + $122 = $84; + $123 = (($121) + ($122<<2)|0); + $124 = HEAP32[$123>>2]|0; + $125 = ($124|0)==(0); + $126 = $89; + do { + if ($125) { + $127 = ((($94)) + 48|0); + $128 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$127)|0); + $92 = $128; + $129 = $92; + $130 = ($129|0)==(1); + if ($130) { + $131 = ((($94)) + 244|0); + $132 = $89; + $133 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($131,$132,0,0)|0); + $134 = ((($94)) + 132|0); + $135 = ((($94)) + 92|0); + $136 = HEAP32[$135>>2]|0; + $81 = $134; + $82 = $136; + $137 = $81; + $138 = $82; + $139 = (($137) + ($138<<2)|0); + HEAP32[$139>>2] = $133; + $140 = ((($94)) + 132|0); + $141 = ((($94)) + 92|0); + $142 = HEAP32[$141>>2]|0; + $71 = $140; + $72 = $142; + $143 = $71; + $144 = $72; + $145 = (($143) + ($144<<2)|0); + $146 = HEAP32[$145>>2]|0; + $147 = ($146|0)<(0); + $148 = $147 << 31 >> 31; + $149 = ((($94)) + 100|0); + $150 = ((($94)) + 92|0); + $151 = HEAP32[$150>>2]|0; + $63 = $149; + $64 = $151; + $152 = $63; + $153 = $64; + $154 = (($152) + ($153<<3)|0); + $155 = $154; + $156 = $155; + $157 = HEAPU8[$156>>0]|(HEAPU8[$156+1>>0]<<8)|(HEAPU8[$156+2>>0]<<16)|(HEAPU8[$156+3>>0]<<24); + $158 = (($155) + 4)|0; + $159 = $158; + $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8)|(HEAPU8[$159+2>>0]<<16)|(HEAPU8[$159+3>>0]<<24); + $161 = (_i64Add(($157|0),($160|0),($146|0),($148|0))|0); + $162 = tempRet0; + $163 = $154; + $164 = $163; + 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; + $165 = (($163) + 4)|0; + $166 = $165; + 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; + $167 = ((($94)) + 148|0); + $168 = ((($94)) + 92|0); + $169 = HEAP32[$168>>2]|0; + $49 = $167; + $50 = $169; + $170 = $49; + $171 = $50; + $172 = (($170) + ($171<<2)|0); + HEAP32[$172>>2] = 0; + break; + } + $173 = $92; + $174 = ($173|0)==(2); + if ($174) { + $175 = ((($94)) + 96|0); + $176 = HEAP32[$175>>2]|0; + $177 = (($176) + 1)|0; + $178 = $177 & 3; + $179 = ((($94)) + 96|0); + HEAP32[$179>>2] = $178; + $180 = ((($94)) + 244|0); + $181 = $89; + $182 = ((($94)) + 100|0); + $183 = ((($94)) + 92|0); + $184 = HEAP32[$183>>2]|0; + $45 = $182; + $46 = $184; + $185 = $45; + $186 = $46; + $187 = (($185) + ($186<<3)|0); + $188 = $187; + $189 = $188; + $190 = HEAPU8[$189>>0]|(HEAPU8[$189+1>>0]<<8)|(HEAPU8[$189+2>>0]<<16)|(HEAPU8[$189+3>>0]<<24); + $191 = (($188) + 4)|0; + $192 = $191; + $193 = HEAPU8[$192>>0]|(HEAPU8[$192+1>>0]<<8)|(HEAPU8[$192+2>>0]<<16)|(HEAPU8[$192+3>>0]<<24); + $194 = (_bitshift64Ashr(($190|0),($193|0),32)|0); + $195 = tempRet0; + $196 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($180,$181,$194,8)|0); + $197 = ($196|0)<(0); + $198 = $197 << 31 >> 31; + $199 = ((($94)) + 100|0); + $200 = ((($94)) + 96|0); + $201 = HEAP32[$200>>2]|0; + $33 = $199; + $34 = $201; + $202 = $33; + $203 = $34; + $204 = (($202) + ($203<<3)|0); + $205 = $204; + $206 = $205; + 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; + $207 = (($205) + 4)|0; + $208 = $207; + 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; + $209 = ((($94)) + 100|0); + $210 = ((($94)) + 96|0); + $211 = HEAP32[$210>>2]|0; + $29 = $209; + $30 = $211; + $212 = $29; + $213 = $30; + $214 = (($212) + ($213<<3)|0); + $215 = $214; + $216 = $215; + $217 = HEAPU8[$216>>0]|(HEAPU8[$216+1>>0]<<8)|(HEAPU8[$216+2>>0]<<16)|(HEAPU8[$216+3>>0]<<24); + $218 = (($215) + 4)|0; + $219 = $218; + $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8)|(HEAPU8[$219+2>>0]<<16)|(HEAPU8[$219+3>>0]<<24); + $221 = ((($94)) + 100|0); + $222 = ((($94)) + 96|0); + $223 = HEAP32[$222>>2]|0; + $25 = $221; + $26 = $223; + $224 = $25; + $225 = $26; + $226 = (($224) + ($225<<3)|0); + $227 = $226; + $228 = $227; + 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; + $229 = (($227) + 4)|0; + $230 = $229; + 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; + $231 = $89; + $232 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($231)|0); + $233 = ((($94)) + 100|0); + $234 = ((($94)) + 96|0); + $235 = HEAP32[$234>>2]|0; + $13 = $233; + $14 = $235; + $236 = $13; + $237 = $14; + $238 = (($236) + ($237<<3)|0); + $239 = $238; + $240 = $239; + $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8)|(HEAPU8[$240+2>>0]<<16)|(HEAPU8[$240+3>>0]<<24); + $242 = (($239) + 4)|0; + $243 = $242; + $244 = HEAPU8[$243>>0]|(HEAPU8[$243+1>>0]<<8)|(HEAPU8[$243+2>>0]<<16)|(HEAPU8[$243+3>>0]<<24); + $245 = $241 | $232; + $246 = $238; + $247 = $246; + 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; + $248 = (($246) + 4)|0; + $249 = $248; + 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; + $250 = ((($94)) + 96|0); + $251 = HEAP32[$250>>2]|0; + $252 = ((($94)) + 92|0); + HEAP32[$252>>2] = $251; + $253 = ((($94)) + 132|0); + $254 = ((($94)) + 92|0); + $255 = HEAP32[$254>>2]|0; + $7 = $253; + $8 = $255; + $256 = $7; + $257 = $8; + $258 = (($256) + ($257<<2)|0); + HEAP32[$258>>2] = 0; + $259 = ((($94)) + 148|0); + $260 = ((($94)) + 92|0); + $261 = HEAP32[$260>>2]|0; + $3 = $259; + $4 = $261; + $262 = $3; + $263 = $4; + $264 = (($262) + ($263<<2)|0); + HEAP32[$264>>2] = 0; + break; + } + $265 = $92; + $266 = ($265|0)>(2); + if ($266) { + $267 = ((($94)) + 92|0); + $268 = HEAP32[$267>>2]|0; + $269 = $92; + $270 = (($268) + ($269))|0; + $271 = (($270) - 2)|0; + $272 = $271 & 3; + $273 = ((($94)) + 92|0); + HEAP32[$273>>2] = $272; + $274 = $89; + $275 = $90; + (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$274,$275)|0); + } + } else { + $276 = ((($94)) + 4|0); + $277 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$276)|0); + $92 = $277; + $278 = $92; + $279 = ($278|0)==(1); + if ($279) { + $280 = ((($94)) + 244|0); + $281 = $89; + $282 = ((($94)) + 132|0); + $283 = ((($94)) + 92|0); + $284 = HEAP32[$283>>2]|0; + $5 = $282; + $6 = $284; + $285 = $5; + $286 = $6; + $287 = (($285) + ($286<<2)|0); + $288 = HEAP32[$287>>2]|0; + $289 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($280,$281,$288,1)|0); + $290 = ($289|0)<(0); + $291 = $290 << 31 >> 31; + $292 = ((($94)) + 100|0); + $293 = ((($94)) + 92|0); + $294 = HEAP32[$293>>2]|0; + $9 = $292; + $10 = $294; + $295 = $9; + $296 = $10; + $297 = (($295) + ($296<<3)|0); + $298 = $297; + $299 = $298; + $300 = HEAPU8[$299>>0]|(HEAPU8[$299+1>>0]<<8)|(HEAPU8[$299+2>>0]<<16)|(HEAPU8[$299+3>>0]<<24); + $301 = (($298) + 4)|0; + $302 = $301; + $303 = HEAPU8[$302>>0]|(HEAPU8[$302+1>>0]<<8)|(HEAPU8[$302+2>>0]<<16)|(HEAPU8[$302+3>>0]<<24); + $304 = (_i64Add(($300|0),($303|0),($289|0),($291|0))|0); + $305 = tempRet0; + $306 = $297; + $307 = $306; + 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; + $308 = (($306) + 4)|0; + $309 = $308; + 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; + $310 = ((($94)) + 148|0); + $311 = ((($94)) + 92|0); + $312 = HEAP32[$311>>2]|0; + $11 = $310; + $12 = $312; + $313 = $11; + $314 = $12; + $315 = (($313) + ($314<<2)|0); + HEAP32[$315>>2] = 0; + break; + } + $316 = $92; + $317 = ($316|0)<(511); + $318 = $92; + if (!($317)) { + $490 = ($318|0)==(512); + if ($490) { + $491 = ((($94)) + 96|0); + $492 = HEAP32[$491>>2]|0; + $493 = (($492) + 1)|0; + $494 = $493 & 3; + $495 = ((($94)) + 96|0); + HEAP32[$495>>2] = $494; + $496 = ((($94)) + 244|0); + $497 = $89; + $498 = ((($94)) + 100|0); + $499 = ((($94)) + 92|0); + $500 = HEAP32[$499>>2]|0; + $61 = $498; + $62 = $500; + $501 = $61; + $502 = $62; + $503 = (($501) + ($502<<3)|0); + $504 = $503; + $505 = $504; + $506 = HEAPU8[$505>>0]|(HEAPU8[$505+1>>0]<<8)|(HEAPU8[$505+2>>0]<<16)|(HEAPU8[$505+3>>0]<<24); + $507 = (($504) + 4)|0; + $508 = $507; + $509 = HEAPU8[$508>>0]|(HEAPU8[$508+1>>0]<<8)|(HEAPU8[$508+2>>0]<<16)|(HEAPU8[$508+3>>0]<<24); + $510 = (_bitshift64Ashr(($506|0),($509|0),32)|0); + $511 = tempRet0; + $512 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($496,$497,$510,8)|0); + $513 = ($512|0)<(0); + $514 = $513 << 31 >> 31; + $515 = ((($94)) + 100|0); + $516 = ((($94)) + 96|0); + $517 = HEAP32[$516>>2]|0; + $65 = $515; + $66 = $517; + $518 = $65; + $519 = $66; + $520 = (($518) + ($519<<3)|0); + $521 = $520; + $522 = $521; + 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; + $523 = (($521) + 4)|0; + $524 = $523; + 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; + $525 = ((($94)) + 100|0); + $526 = ((($94)) + 96|0); + $527 = HEAP32[$526>>2]|0; + $67 = $525; + $68 = $527; + $528 = $67; + $529 = $68; + $530 = (($528) + ($529<<3)|0); + $531 = $530; + $532 = $531; + $533 = HEAPU8[$532>>0]|(HEAPU8[$532+1>>0]<<8)|(HEAPU8[$532+2>>0]<<16)|(HEAPU8[$532+3>>0]<<24); + $534 = (($531) + 4)|0; + $535 = $534; + $536 = HEAPU8[$535>>0]|(HEAPU8[$535+1>>0]<<8)|(HEAPU8[$535+2>>0]<<16)|(HEAPU8[$535+3>>0]<<24); + $537 = ((($94)) + 100|0); + $538 = ((($94)) + 96|0); + $539 = HEAP32[$538>>2]|0; + $69 = $537; + $70 = $539; + $540 = $69; + $541 = $70; + $542 = (($540) + ($541<<3)|0); + $543 = $542; + $544 = $543; + 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; + $545 = (($543) + 4)|0; + $546 = $545; + 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; + $547 = $89; + $548 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($547)|0); + $549 = ((($94)) + 100|0); + $550 = ((($94)) + 96|0); + $551 = HEAP32[$550>>2]|0; + $73 = $549; + $74 = $551; + $552 = $73; + $553 = $74; + $554 = (($552) + ($553<<3)|0); + $555 = $554; + $556 = $555; + $557 = HEAPU8[$556>>0]|(HEAPU8[$556+1>>0]<<8)|(HEAPU8[$556+2>>0]<<16)|(HEAPU8[$556+3>>0]<<24); + $558 = (($555) + 4)|0; + $559 = $558; + $560 = HEAPU8[$559>>0]|(HEAPU8[$559+1>>0]<<8)|(HEAPU8[$559+2>>0]<<16)|(HEAPU8[$559+3>>0]<<24); + $561 = $557 | $548; + $562 = $554; + $563 = $562; + 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; + $564 = (($562) + 4)|0; + $565 = $564; + 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; + $566 = ((($94)) + 96|0); + $567 = HEAP32[$566>>2]|0; + $568 = ((($94)) + 92|0); + HEAP32[$568>>2] = $567; + $569 = ((($94)) + 132|0); + $570 = ((($94)) + 92|0); + $571 = HEAP32[$570>>2]|0; + $75 = $569; + $76 = $571; + $572 = $75; + $573 = $76; + $574 = (($572) + ($573<<2)|0); + HEAP32[$574>>2] = 0; + $575 = ((($94)) + 148|0); + $576 = ((($94)) + 92|0); + $577 = HEAP32[$576>>2]|0; + $77 = $575; + $78 = $577; + $578 = $77; + $579 = $78; + $580 = (($578) + ($579<<2)|0); + HEAP32[$580>>2] = 0; + break; + } + $581 = $92; + $582 = ($581|0)>=(512); + if (!($582)) { + break; + } + $583 = ((($94)) + 92|0); + $584 = HEAP32[$583>>2]|0; + $585 = $92; + $586 = (($584) + ($585))|0; + $587 = (($586) - 512)|0; + $588 = $587 & 3; + $589 = ((($94)) + 92|0); + HEAP32[$589>>2] = $588; + $590 = $89; + $591 = $90; + (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$590,$591)|0); + break; + } + $319 = ($318|0)==(0); + do { + if ($319) { + $320 = ((($94)) + 244|0); + $321 = $89; + $322 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($320,$321,0,7)|0); + $93 = $322; + $323 = ((($94)) + 148|0); + $324 = ((($94)) + 92|0); + $325 = HEAP32[$324>>2]|0; + $15 = $323; + $16 = $325; + $326 = $15; + $327 = $16; + $328 = (($326) + ($327<<2)|0); + $329 = HEAP32[$328>>2]|0; + $330 = (($329) + 1)|0; + HEAP32[$328>>2] = $330; + $331 = ((($94)) + 148|0); + $332 = ((($94)) + 92|0); + $333 = HEAP32[$332>>2]|0; + $17 = $331; + $18 = $333; + $334 = $17; + $335 = $18; + $336 = (($334) + ($335<<2)|0); + $337 = HEAP32[$336>>2]|0; + $338 = ($337|0)>(3); + if ($338) { + $339 = $93; + $340 = ((($94)) + 132|0); + $341 = ((($94)) + 92|0); + $342 = HEAP32[$341>>2]|0; + $19 = $340; + $20 = $342; + $343 = $19; + $344 = $20; + $345 = (($343) + ($344<<2)|0); + HEAP32[$345>>2] = $339; + $346 = ((($94)) + 148|0); + $347 = ((($94)) + 92|0); + $348 = HEAP32[$347>>2]|0; + $21 = $346; + $22 = $348; + $349 = $21; + $350 = $22; + $351 = (($349) + ($350<<2)|0); + HEAP32[$351>>2] = 0; + } + } else { + $352 = $92; + $353 = ($352|0)<(500); + $354 = $92; + if ($353) { + $355 = ($354|0)<(10); + $356 = ((($94)) + 244|0); + $357 = $89; + $358 = $92; + $359 = ((($94)) + 132|0); + $360 = ((($94)) + 92|0); + $361 = HEAP32[$360>>2]|0; + if ($355) { + $23 = $359; + $24 = $361; + $362 = $23; + $363 = $24; + $364 = (($362) + ($363<<2)|0); + $365 = HEAP32[$364>>2]|0; + $366 = Math_imul($358, $365)|0; + $367 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$366,2)|0); + $93 = $367; + break; + } else { + $27 = $359; + $28 = $361; + $368 = $27; + $369 = $28; + $370 = (($368) + ($369<<2)|0); + $371 = HEAP32[$370>>2]|0; + $372 = Math_imul($358, $371)|0; + $373 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$372,3)|0); + $93 = $373; + break; + } + } + $374 = ($354|0)==(500); + if ($374) { + $375 = ((($94)) + 244|0); + $376 = $89; + $377 = ((($94)) + 132|0); + $378 = ((($94)) + 92|0); + $379 = HEAP32[$378>>2]|0; + $31 = $377; + $32 = $379; + $380 = $31; + $381 = $32; + $382 = (($380) + ($381<<2)|0); + $383 = HEAP32[$382>>2]|0; + $384 = ($383*500)|0; + $385 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($375,$376,$384,4)|0); + $93 = $385; + $386 = ((($94)) + 148|0); + $387 = ((($94)) + 92|0); + $388 = HEAP32[$387>>2]|0; + $35 = $386; + $36 = $388; + $389 = $35; + $390 = $36; + $391 = (($389) + ($390<<2)|0); + $392 = HEAP32[$391>>2]|0; + $393 = (($392) + 1)|0; + HEAP32[$391>>2] = $393; + $394 = ((($94)) + 148|0); + $395 = ((($94)) + 92|0); + $396 = HEAP32[$395>>2]|0; + $37 = $394; + $38 = $396; + $397 = $37; + $398 = $38; + $399 = (($397) + ($398<<2)|0); + $400 = HEAP32[$399>>2]|0; + $401 = ($400|0)>(3); + if (!($401)) { + break; + } + $402 = $93; + $403 = ((($94)) + 132|0); + $404 = ((($94)) + 92|0); + $405 = HEAP32[$404>>2]|0; + $39 = $403; + $40 = $405; + $406 = $39; + $407 = $40; + $408 = (($406) + ($407<<2)|0); + HEAP32[$408>>2] = $402; + $409 = ((($94)) + 148|0); + $410 = ((($94)) + 92|0); + $411 = HEAP32[$410>>2]|0; + $41 = $409; + $42 = $411; + $412 = $41; + $413 = $42; + $414 = (($412) + ($413<<2)|0); + HEAP32[$414>>2] = 0; + break; + } + $415 = $92; + $416 = (500 - ($415))|0; + $92 = $416; + $417 = $92; + $418 = ($417|0)>(-10); + $419 = ((($94)) + 244|0); + $420 = $89; + if ($418) { + $421 = $92; + $422 = ((($94)) + 132|0); + $423 = ((($94)) + 92|0); + $424 = HEAP32[$423>>2]|0; + $43 = $422; + $44 = $424; + $425 = $43; + $426 = $44; + $427 = (($425) + ($426<<2)|0); + $428 = HEAP32[$427>>2]|0; + $429 = Math_imul($421, $428)|0; + $430 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$429,5)|0); + $93 = $430; + break; + } + $431 = ((($94)) + 132|0); + $432 = ((($94)) + 92|0); + $433 = HEAP32[$432>>2]|0; + $47 = $431; + $48 = $433; + $434 = $47; + $435 = $48; + $436 = (($434) + ($435<<2)|0); + $437 = HEAP32[$436>>2]|0; + $438 = Math_imul(-10, $437)|0; + $439 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$438,6)|0); + $93 = $439; + $440 = ((($94)) + 148|0); + $441 = ((($94)) + 92|0); + $442 = HEAP32[$441>>2]|0; + $51 = $440; + $52 = $442; + $443 = $51; + $444 = $52; + $445 = (($443) + ($444<<2)|0); + $446 = HEAP32[$445>>2]|0; + $447 = (($446) + 1)|0; + HEAP32[$445>>2] = $447; + $448 = ((($94)) + 148|0); + $449 = ((($94)) + 92|0); + $450 = HEAP32[$449>>2]|0; + $53 = $448; + $54 = $450; + $451 = $53; + $452 = $54; + $453 = (($451) + ($452<<2)|0); + $454 = HEAP32[$453>>2]|0; + $455 = ($454|0)>(3); + if ($455) { + $456 = $93; + $457 = ((($94)) + 132|0); + $458 = ((($94)) + 92|0); + $459 = HEAP32[$458>>2]|0; + $55 = $457; + $56 = $459; + $460 = $55; + $461 = $56; + $462 = (($460) + ($461<<2)|0); + HEAP32[$462>>2] = $456; + $463 = ((($94)) + 148|0); + $464 = ((($94)) + 92|0); + $465 = HEAP32[$464>>2]|0; + $57 = $463; + $58 = $465; + $466 = $57; + $467 = $58; + $468 = (($466) + ($467<<2)|0); + HEAP32[$468>>2] = 0; + } + } + } while(0); + $469 = $93; + $470 = ($469|0)<(0); + $471 = $470 << 31 >> 31; + $472 = ((($94)) + 100|0); + $473 = ((($94)) + 92|0); + $474 = HEAP32[$473>>2]|0; + $59 = $472; + $60 = $474; + $475 = $59; + $476 = $60; + $477 = (($475) + ($476<<3)|0); + $478 = $477; + $479 = $478; + $480 = HEAPU8[$479>>0]|(HEAPU8[$479+1>>0]<<8)|(HEAPU8[$479+2>>0]<<16)|(HEAPU8[$479+3>>0]<<24); + $481 = (($478) + 4)|0; + $482 = $481; + $483 = HEAPU8[$482>>0]|(HEAPU8[$482+1>>0]<<8)|(HEAPU8[$482+2>>0]<<16)|(HEAPU8[$482+3>>0]<<24); + $484 = (_i64Add(($480|0),($483|0),($469|0),($471|0))|0); + $485 = tempRet0; + $486 = $477; + $487 = $486; + 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; + $488 = (($486) + 4)|0; + $489 = $488; + 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; + } + } while(0); + $592 = ((($94)) + 100|0); + $593 = ((($94)) + 92|0); + $594 = HEAP32[$593>>2]|0; + $79 = $592; + $80 = $594; + $595 = $79; + $596 = $80; + $597 = (($595) + ($596<<3)|0); + $598 = $90; + __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($597,$598); + $599 = $90; + $600 = ((($599)) + 8|0); + $87 = $600; + $601 = $87; + STACKTOP = sp;return ($601|0); +} +function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip13decompressors7integer4initEv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $1 = sp + 24|0; + $3 = sp + 8|0; + $4 = sp; + $2 = $0; + $5 = $2; + $6 = (__ZN6laszip7formats7packersIjE6unpackEPKc($5)|0); + $7 = $3; + $8 = $7; + HEAP32[$8>>2] = $6; + $9 = (($7) + 4)|0; + $10 = $9; + HEAP32[$10>>2] = 0; + $11 = $2; + $12 = ((($11)) + 4|0); + $13 = (__ZN6laszip7formats7packersIjE6unpackEPKc($12)|0); + $14 = $4; + $15 = $14; + HEAP32[$15>>2] = $13; + $16 = (($14) + 4)|0; + $17 = $16; + HEAP32[$17>>2] = 0; + $18 = $4; + $19 = $18; + $20 = HEAP32[$19>>2]|0; + $21 = (($18) + 4)|0; + $22 = $21; + $23 = HEAP32[$22>>2]|0; + $24 = $3; + $25 = $24; + $26 = HEAP32[$25>>2]|0; + $27 = (($24) + 4)|0; + $28 = $27; + $29 = HEAP32[$28>>2]|0; + $30 = $20 | $29; + __ZN6laszip7formats3las7gpstimeC2Ex($1,$26,$30); + $31 = $1; + $32 = $31; + $33 = HEAPU8[$32>>0]|(HEAPU8[$32+1>>0]<<8)|(HEAPU8[$32+2>>0]<<16)|(HEAPU8[$32+3>>0]<<24); + $34 = (($31) + 4)|0; + $35 = $34; + $36 = HEAPU8[$35>>0]|(HEAPU8[$35+1>>0]<<8)|(HEAPU8[$35+2>>0]<<16)|(HEAPU8[$35+3>>0]<<24); + tempRet0 = ($36); + STACKTOP = sp;return ($33|0); +} +function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $4 = $1; + $5 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0); + $6 = $5&65535; + $2 = $6; + $7 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0); + $8 = $7&65535; + $3 = $8; + $9 = $3; + $10 = $9 << 16; + $11 = $2; + $12 = $10 | $11; + STACKTOP = sp;return ($12|0); +} +function __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $4; + $6 = $5; + $7 = HEAPU8[$6>>0]|(HEAPU8[$6+1>>0]<<8)|(HEAPU8[$6+2>>0]<<16)|(HEAPU8[$6+3>>0]<<24); + $8 = (($5) + 4)|0; + $9 = $8; + $10 = HEAPU8[$9>>0]|(HEAPU8[$9+1>>0]<<8)|(HEAPU8[$9+2>>0]<<16)|(HEAPU8[$9+3>>0]<<24); + $11 = $3; + __ZN6laszip7formats7packersIjE4packEjPc($7,$11); + $12 = $2; + $13 = $12; + $14 = $13; + $15 = HEAPU8[$14>>0]|(HEAPU8[$14+1>>0]<<8)|(HEAPU8[$14+2>>0]<<16)|(HEAPU8[$14+3>>0]<<24); + $16 = (($13) + 4)|0; + $17 = $16; + $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24); + $19 = (_bitshift64Ashr(($15|0),($18|0),32)|0); + $20 = tempRet0; + $21 = $3; + $22 = ((($21)) + 4|0); + __ZN6laszip7formats7packersIjE4packEjPc($19,$22); + STACKTOP = sp;return; +} +function __ZN6laszip7formats3las7gpstimeC2Ex($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = sp; + $3 = $0; + $5 = $4; + $6 = $5; + HEAP32[$6>>2] = $1; + $7 = (($5) + 4)|0; + $8 = $7; + HEAP32[$8>>2] = $2; + $9 = $3; + $10 = $4; + $11 = $10; + $12 = HEAP32[$11>>2]|0; + $13 = (($10) + 4)|0; + $14 = $13; + $15 = HEAP32[$14>>2]|0; + $16 = $9; + $17 = $16; + 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; + $18 = (($16) + 4)|0; + $19 = $18; + 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; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 400; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2152); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($7); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2176); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP8[$2>>0] = 0; + $3 = ((($2)) + 1|0); + __ZN6laszip7formats3las3rgbC2Ev($3); + $4 = ((($2)) + 8|0); + __ZN6laszip6models10arithmeticC2EjbPj($4,128,0,0); + $5 = ((($2)) + 52|0); + __ZN6laszip6models10arithmeticC2EjbPj($5,256,0,0); + $6 = ((($2)) + 96|0); + __ZN6laszip6models10arithmeticC2EjbPj($6,256,0,0); + $7 = ((($2)) + 140|0); + __ZN6laszip6models10arithmeticC2EjbPj($7,256,0,0); + $8 = ((($2)) + 184|0); + __ZN6laszip6models10arithmeticC2EjbPj($8,256,0,0); + $9 = ((($2)) + 228|0); + __ZN6laszip6models10arithmeticC2EjbPj($9,256,0,0); + $10 = ((($2)) + 272|0); + __ZN6laszip6models10arithmeticC2EjbPj($10,256,0,0); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2152); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats3las3rgbC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP8[$2>>0]=0&255;HEAP8[$2+1>>0]=0>>8; + $3 = ((($2)) + 2|0); + HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8; + $4 = ((($2)) + 4|0); + HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 272|0); + __ZN6laszip6models10arithmeticD2Ev($3); + $4 = ((($2)) + 228|0); + __ZN6laszip6models10arithmeticD2Ev($4); + $5 = ((($2)) + 184|0); + __ZN6laszip6models10arithmeticD2Ev($5); + $6 = ((($2)) + 140|0); + __ZN6laszip6models10arithmeticD2Ev($6); + $7 = ((($2)) + 96|0); + __ZN6laszip6models10arithmeticD2Ev($7); + $8 = ((($2)) + 52|0); + __ZN6laszip6models10arithmeticD2Ev($8); + $9 = ((($2)) + 8|0); + __ZN6laszip6models10arithmeticD2Ev($9); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $7 = sp + 32|0; + $11 = sp + 24|0; + $4 = $0; + $5 = $1; + $6 = $2; + $12 = $4; + $13 = HEAP8[$12>>0]|0; + $14 = $13&1; + if (!($14)) { + HEAP8[$12>>0] = 1; + $15 = $5; + $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($15)|0); + $17 = $6; + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($16,$17,6); + $18 = $6; + __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($7,$18); + $19 = ((($12)) + 1|0); + ;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; + $20 = $6; + $21 = ((($20)) + 6|0); + $3 = $21; + $331 = $3; + STACKTOP = sp;return ($331|0); + } + $9 = 0; + $22 = $5; + $23 = ((($12)) + 8|0); + $24 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($22,$23)|0); + $10 = $24; + __ZN6laszip7formats3las3rgbC2Ev($11); + $25 = $10; + $26 = $25 & 1; + $27 = ($26|0)!=(0); + if ($27) { + $28 = $5; + $29 = ((($12)) + 52|0); + $30 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($28,$29)|0); + $31 = $30&255; + $8 = $31; + $32 = $8; + $33 = $32&255; + $34 = ((($12)) + 1|0); + $35 = HEAPU8[$34>>0]|(HEAPU8[$34+1>>0]<<8); + $36 = $35&65535; + $37 = $36 & 255; + $38 = (($33) + ($37))|0; + $39 = (__Z7U8_FOLDi($38)|0); + $40 = $39&255; + HEAP8[$11>>0]=$40&255;HEAP8[$11+1>>0]=$40>>8; + } else { + $41 = ((($12)) + 1|0); + $42 = HEAPU8[$41>>0]|(HEAPU8[$41+1>>0]<<8); + $43 = $42&65535; + $44 = $43 & 255; + $45 = $44&65535; + HEAP8[$11>>0]=$45&255;HEAP8[$11+1>>0]=$45>>8; + } + $46 = $10; + $47 = $46 & 2; + $48 = ($47|0)!=(0); + if ($48) { + $49 = $5; + $50 = ((($12)) + 96|0); + $51 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($49,$50)|0); + $52 = $51&255; + $8 = $52; + $53 = $8; + $54 = $53&255; + $55 = ((($12)) + 1|0); + $56 = HEAPU8[$55>>0]|(HEAPU8[$55+1>>0]<<8); + $57 = $56&65535; + $58 = $57 >> 8; + $59 = (($54) + ($58))|0; + $60 = (__Z7U8_FOLDi($59)|0); + $61 = $60&255; + $62 = $61&65535; + $63 = $62 << 8; + $64 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); + $65 = $64&65535; + $66 = $65 | $63; + $67 = $66&65535; + HEAP8[$11>>0]=$67&255;HEAP8[$11+1>>0]=$67>>8; + } else { + $68 = ((($12)) + 1|0); + $69 = HEAPU8[$68>>0]|(HEAPU8[$68+1>>0]<<8); + $70 = $69&65535; + $71 = $70 & 65280; + $72 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); + $73 = $72&65535; + $74 = $73 | $71; + $75 = $74&65535; + HEAP8[$11>>0]=$75&255;HEAP8[$11+1>>0]=$75>>8; + } + $76 = $10; + $77 = $76 & 64; + $78 = ($77|0)!=(0); + $79 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); + do { + if ($78) { + $80 = $79&65535; + $81 = $80 & 255; + $82 = ((($12)) + 1|0); + $83 = HEAPU8[$82>>0]|(HEAPU8[$82+1>>0]<<8); + $84 = $83&65535; + $85 = $84 & 255; + $86 = (($81) - ($85))|0; + $9 = $86; + $87 = $10; + $88 = $87 & 4; + $89 = ($88|0)!=(0); + if ($89) { + $90 = $5; + $91 = ((($12)) + 140|0); + $92 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($90,$91)|0); + $93 = $92&255; + $8 = $93; + $94 = $8; + $95 = $94&255; + $96 = $9; + $97 = ((($12)) + 1|0); + $98 = ((($97)) + 2|0); + $99 = HEAPU8[$98>>0]|(HEAPU8[$98+1>>0]<<8); + $100 = $99&65535; + $101 = $100 & 255; + $102 = (($96) + ($101))|0; + $103 = ($102|0)<=(0); + if ($103) { + $121 = 0; + } else { + $104 = $9; + $105 = ((($12)) + 1|0); + $106 = ((($105)) + 2|0); + $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8); + $108 = $107&65535; + $109 = $108 & 255; + $110 = (($104) + ($109))|0; + $111 = ($110|0)>=(255); + if ($111) { + $121 = -1; + } else { + $112 = $9; + $113 = ((($12)) + 1|0); + $114 = ((($113)) + 2|0); + $115 = HEAPU8[$114>>0]|(HEAPU8[$114+1>>0]<<8); + $116 = $115&65535; + $117 = $116 & 255; + $118 = (($112) + ($117))|0; + $119 = $118&255; + $121 = $119; + } + } + $120 = $121&255; + $122 = (($95) + ($120))|0; + $123 = (__Z7U8_FOLDi($122)|0); + $124 = $123&255; + $125 = ((($11)) + 2|0); + HEAP8[$125>>0]=$124&255;HEAP8[$125+1>>0]=$124>>8; + } else { + $126 = ((($12)) + 1|0); + $127 = ((($126)) + 2|0); + $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8); + $129 = $128&65535; + $130 = $129 & 255; + $131 = $130&65535; + $132 = ((($11)) + 2|0); + HEAP8[$132>>0]=$131&255;HEAP8[$132+1>>0]=$131>>8; + } + $133 = $10; + $134 = $133 & 16; + $135 = ($134|0)!=(0); + if ($135) { + $136 = $5; + $137 = ((($12)) + 228|0); + $138 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($136,$137)|0); + $139 = $138&255; + $8 = $139; + $140 = $9; + $141 = ((($11)) + 2|0); + $142 = HEAPU8[$141>>0]|(HEAPU8[$141+1>>0]<<8); + $143 = $142&65535; + $144 = $143 & 255; + $145 = (($140) + ($144))|0; + $146 = ((($12)) + 1|0); + $147 = ((($146)) + 2|0); + $148 = HEAPU8[$147>>0]|(HEAPU8[$147+1>>0]<<8); + $149 = $148&65535; + $150 = $149 & 255; + $151 = (($145) - ($150))|0; + $152 = (($151|0) / 2)&-1; + $9 = $152; + $153 = $8; + $154 = $153&255; + $155 = $9; + $156 = ((($12)) + 1|0); + $157 = ((($156)) + 4|0); + $158 = HEAPU8[$157>>0]|(HEAPU8[$157+1>>0]<<8); + $159 = $158&65535; + $160 = $159 & 255; + $161 = (($155) + ($160))|0; + $162 = ($161|0)<=(0); + if ($162) { + $180 = 0; + } else { + $163 = $9; + $164 = ((($12)) + 1|0); + $165 = ((($164)) + 4|0); + $166 = HEAPU8[$165>>0]|(HEAPU8[$165+1>>0]<<8); + $167 = $166&65535; + $168 = $167 & 255; + $169 = (($163) + ($168))|0; + $170 = ($169|0)>=(255); + if ($170) { + $180 = -1; + } else { + $171 = $9; + $172 = ((($12)) + 1|0); + $173 = ((($172)) + 4|0); + $174 = HEAPU8[$173>>0]|(HEAPU8[$173+1>>0]<<8); + $175 = $174&65535; + $176 = $175 & 255; + $177 = (($171) + ($176))|0; + $178 = $177&255; + $180 = $178; + } + } + $179 = $180&255; + $181 = (($154) + ($179))|0; + $182 = (__Z7U8_FOLDi($181)|0); + $183 = $182&255; + $184 = ((($11)) + 4|0); + HEAP8[$184>>0]=$183&255;HEAP8[$184+1>>0]=$183>>8; + } else { + $185 = ((($12)) + 1|0); + $186 = ((($185)) + 4|0); + $187 = HEAPU8[$186>>0]|(HEAPU8[$186+1>>0]<<8); + $188 = $187&65535; + $189 = $188 & 255; + $190 = $189&65535; + $191 = ((($11)) + 4|0); + HEAP8[$191>>0]=$190&255;HEAP8[$191+1>>0]=$190>>8; + } + $192 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); + $193 = $192&65535; + $194 = $193 >> 8; + $195 = ((($12)) + 1|0); + $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8); + $197 = $196&65535; + $198 = $197 >> 8; + $199 = (($194) - ($198))|0; + $9 = $199; + $200 = $10; + $201 = $200 & 8; + $202 = ($201|0)!=(0); + if ($202) { + $203 = $5; + $204 = ((($12)) + 184|0); + $205 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($203,$204)|0); + $206 = $205&255; + $8 = $206; + $207 = $8; + $208 = $207&255; + $209 = $9; + $210 = ((($12)) + 1|0); + $211 = ((($210)) + 2|0); + $212 = HEAPU8[$211>>0]|(HEAPU8[$211+1>>0]<<8); + $213 = $212&65535; + $214 = $213 >> 8; + $215 = (($209) + ($214))|0; + $216 = ($215|0)<=(0); + if ($216) { + $234 = 0; + } else { + $217 = $9; + $218 = ((($12)) + 1|0); + $219 = ((($218)) + 2|0); + $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8); + $221 = $220&65535; + $222 = $221 >> 8; + $223 = (($217) + ($222))|0; + $224 = ($223|0)>=(255); + if ($224) { + $234 = -1; + } else { + $225 = $9; + $226 = ((($12)) + 1|0); + $227 = ((($226)) + 2|0); + $228 = HEAPU8[$227>>0]|(HEAPU8[$227+1>>0]<<8); + $229 = $228&65535; + $230 = $229 >> 8; + $231 = (($225) + ($230))|0; + $232 = $231&255; + $234 = $232; + } + } + $233 = $234&255; + $235 = (($208) + ($233))|0; + $236 = (__Z7U8_FOLDi($235)|0); + $237 = $236&255; + $238 = $237&65535; + $239 = $238 << 8; + $240 = ((($11)) + 2|0); + $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8); + $242 = $241&65535; + $243 = $242 | $239; + $244 = $243&65535; + HEAP8[$240>>0]=$244&255;HEAP8[$240+1>>0]=$244>>8; + } else { + $245 = ((($12)) + 1|0); + $246 = ((($245)) + 2|0); + $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8); + $248 = $247&65535; + $249 = $248 & 65280; + $250 = ((($11)) + 2|0); + $251 = HEAPU8[$250>>0]|(HEAPU8[$250+1>>0]<<8); + $252 = $251&65535; + $253 = $252 | $249; + $254 = $253&65535; + HEAP8[$250>>0]=$254&255;HEAP8[$250+1>>0]=$254>>8; + } + $255 = $10; + $256 = $255 & 32; + $257 = ($256|0)!=(0); + if (!($257)) { + $313 = ((($12)) + 1|0); + $314 = ((($313)) + 4|0); + $315 = HEAPU8[$314>>0]|(HEAPU8[$314+1>>0]<<8); + $316 = $315&65535; + $317 = $316 & 65280; + $318 = ((($11)) + 4|0); + $319 = HEAPU8[$318>>0]|(HEAPU8[$318+1>>0]<<8); + $320 = $319&65535; + $321 = $320 | $317; + $322 = $321&65535; + HEAP8[$318>>0]=$322&255;HEAP8[$318+1>>0]=$322>>8; + break; + } + $258 = $5; + $259 = ((($12)) + 272|0); + $260 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($258,$259)|0); + $261 = $260&255; + $8 = $261; + $262 = $9; + $263 = ((($11)) + 2|0); + $264 = HEAPU8[$263>>0]|(HEAPU8[$263+1>>0]<<8); + $265 = $264&65535; + $266 = $265 >> 8; + $267 = (($262) + ($266))|0; + $268 = ((($12)) + 1|0); + $269 = ((($268)) + 2|0); + $270 = HEAPU8[$269>>0]|(HEAPU8[$269+1>>0]<<8); + $271 = $270&65535; + $272 = $271 >> 8; + $273 = (($267) - ($272))|0; + $274 = (($273|0) / 2)&-1; + $9 = $274; + $275 = $8; + $276 = $275&255; + $277 = $9; + $278 = ((($12)) + 1|0); + $279 = ((($278)) + 4|0); + $280 = HEAPU8[$279>>0]|(HEAPU8[$279+1>>0]<<8); + $281 = $280&65535; + $282 = $281 >> 8; + $283 = (($277) + ($282))|0; + $284 = ($283|0)<=(0); + if ($284) { + $302 = 0; + } else { + $285 = $9; + $286 = ((($12)) + 1|0); + $287 = ((($286)) + 4|0); + $288 = HEAPU8[$287>>0]|(HEAPU8[$287+1>>0]<<8); + $289 = $288&65535; + $290 = $289 >> 8; + $291 = (($285) + ($290))|0; + $292 = ($291|0)>=(255); + if ($292) { + $302 = -1; + } else { + $293 = $9; + $294 = ((($12)) + 1|0); + $295 = ((($294)) + 4|0); + $296 = HEAPU8[$295>>0]|(HEAPU8[$295+1>>0]<<8); + $297 = $296&65535; + $298 = $297 >> 8; + $299 = (($293) + ($298))|0; + $300 = $299&255; + $302 = $300; + } + } + $301 = $302&255; + $303 = (($276) + ($301))|0; + $304 = (__Z7U8_FOLDi($303)|0); + $305 = $304&255; + $306 = $305&65535; + $307 = $306 << 8; + $308 = ((($11)) + 4|0); + $309 = HEAPU8[$308>>0]|(HEAPU8[$308+1>>0]<<8); + $310 = $309&65535; + $311 = $310 | $307; + $312 = $311&65535; + HEAP8[$308>>0]=$312&255;HEAP8[$308+1>>0]=$312>>8; + } else { + $323 = ((($11)) + 2|0); + HEAP8[$323>>0]=$79&255;HEAP8[$323+1>>0]=$79>>8; + $324 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); + $325 = ((($11)) + 4|0); + HEAP8[$325>>0]=$324&255;HEAP8[$325+1>>0]=$324>>8; + } + } while(0); + $326 = ((($12)) + 1|0); + ;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; + $327 = ((($12)) + 1|0); + $328 = $6; + __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($327,$328); + $329 = $6; + $330 = ((($329)) + 6|0); + $3 = $330; + $331 = $3; + STACKTOP = sp;return ($331|0); +} +function __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $1; + $3 = $2; + $4 = (__ZN6laszip7formats7packersItE6unpackEPKc($3)|0); + $5 = $2; + $6 = ((($5)) + 2|0); + $7 = (__ZN6laszip7formats7packersItE6unpackEPKc($6)|0); + $8 = $2; + $9 = ((($8)) + 4|0); + $10 = (__ZN6laszip7formats7packersItE6unpackEPKc($9)|0); + __ZN6laszip7formats3las3rgbC2Ettt($0,$4,$7,$10); + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = HEAPU8[$4>>0]|(HEAPU8[$4+1>>0]<<8); + $6 = $3; + __ZN6laszip7formats7packersItE4packEtPc($5,$6); + $7 = $2; + $8 = ((($7)) + 2|0); + $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8); + $10 = $3; + $11 = ((($10)) + 2|0); + __ZN6laszip7formats7packersItE4packEtPc($9,$11); + $12 = $2; + $13 = ((($12)) + 4|0); + $14 = HEAPU8[$13>>0]|(HEAPU8[$13+1>>0]<<8); + $15 = $3; + $16 = ((($15)) + 4|0); + __ZN6laszip7formats7packersItE4packEtPc($14,$16); + STACKTOP = sp;return; +} +function __ZN6laszip7formats3las3rgbC2Ettt($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = $0; + $5 = $1; + $6 = $2; + $7 = $3; + $8 = $4; + $9 = $5; + HEAP8[$8>>0]=$9&255;HEAP8[$8+1>>0]=$9>>8; + $10 = ((($8)) + 2|0); + $11 = $6; + HEAP8[$10>>0]=$11&255;HEAP8[$10+1>>0]=$11>>8; + $12 = ((($8)) + 4|0); + $13 = $7; + HEAP8[$12>>0]=$13&255;HEAP8[$12+1>>0]=$13>>8; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 440; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + __ZN6laszip7formats10base_fieldC2Ev($6); + HEAP32[$6>>2] = (2204); + $7 = ((($6)) + 4|0); + $8 = $4; + HEAP32[$7>>2] = $8; + $9 = ((($6)) + 8|0); + $10 = $5; + __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($9,$10); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2228); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP8[$4+4>>0]=HEAP8[$5+4>>0]|0; + $6 = ((($4)) + 8|0); + $7 = $3; + $8 = ((($7)) + 8|0); + __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($6,$8); + $9 = ((($4)) + 20|0); + $10 = $3; + $11 = ((($10)) + 20|0); + __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($9,$11); + $12 = ((($4)) + 32|0); + $13 = $3; + $14 = ((($13)) + 32|0); + __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($12,$14); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2204); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0); + $17 = sp + 36|0; + $19 = sp; + $21 = sp + 101|0; + $27 = sp + 100|0; + $25 = $0; + $26 = $1; + $29 = $25; + $30 = $26; + $24 = $30; + $31 = $24; + $32 = ((($31)) + 8|0); + $23 = $32; + $33 = $23; + $22 = $33; + $34 = $22; + $20 = $34; + $35 = $20; + ;HEAP8[$19>>0]=HEAP8[$21>>0]|0; + $18 = $35; + $15 = $29; + $16 = $27; + $36 = $15; + $14 = $36; + HEAP32[$36>>2] = 0; + $37 = ((($36)) + 4|0); + HEAP32[$37>>2] = 0; + $38 = ((($36)) + 8|0); + HEAP32[$17>>2] = 0; + $39 = $16; + $11 = $38; + $12 = $17; + $13 = $39; + $40 = $11; + $41 = $12; + $10 = $41; + $42 = $10; + $4 = $40; + $5 = $42; + $43 = $4; + $44 = $5; + $3 = $44; + HEAP32[$43>>2] = 0; + $45 = $13; + $6 = $45; + $46 = $6; + $8 = $40; + $9 = $46; + $47 = $9; + $7 = $47; + $48 = $26; + $2 = $48; + $49 = $2; + $50 = ((($49)) + 4|0); + $51 = HEAP32[$50>>2]|0; + $52 = HEAP32[$49>>2]|0; + $53 = $51; + $54 = $52; + $55 = (($53) - ($54))|0; + $28 = $55; + $56 = $28; + $57 = ($56>>>0)>(0); + if (!($57)) { + STACKTOP = sp;return; + } + $58 = $28; + __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($29,$58); + $59 = $26; + $60 = HEAP32[$59>>2]|0; + $61 = $26; + $62 = ((($61)) + 4|0); + $63 = HEAP32[$62>>2]|0; + $64 = $28; + __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($29,$60,$63,$64); + STACKTOP = sp;return; +} +function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); + $$byval_copy1 = sp + 192|0; + $$byval_copy = sp + 184|0; + $28 = sp + 72|0; + $33 = sp + 202|0; + $34 = sp + 52|0; + $36 = sp; + $38 = sp + 201|0; + $44 = sp + 200|0; + $45 = sp + 16|0; + $46 = sp + 8|0; + $42 = $0; + $43 = $1; + $47 = $42; + $48 = $43; + $41 = $48; + $49 = $41; + $50 = ((($49)) + 20|0); + $40 = $50; + $51 = $40; + $39 = $51; + $52 = $39; + $37 = $52; + $53 = $37; + ;HEAP8[$36>>0]=HEAP8[$38>>0]|0; + $35 = $53; + $31 = $47; + $32 = $44; + $54 = $31; + $55 = $32; + $29 = $33; + $30 = $55; + $26 = $54; + $27 = $33; + $56 = $26; + HEAP32[$56>>2] = 0; + $57 = ((($56)) + 4|0); + HEAP32[$57>>2] = 0; + $58 = ((($56)) + 8|0); + HEAP32[$58>>2] = 0; + $59 = ((($56)) + 12|0); + HEAP32[$28>>2] = 0; + $60 = $27; + $23 = $59; + $24 = $28; + $25 = $60; + $61 = $23; + $62 = $24; + $22 = $62; + $63 = $22; + $16 = $61; + $17 = $63; + $64 = $16; + $65 = $17; + $15 = $65; + HEAP32[$64>>2] = 0; + $66 = $25; + $18 = $66; + $67 = $18; + $20 = $61; + $21 = $67; + $68 = $21; + $19 = $68; + $69 = ((($54)) + 16|0); + HEAP32[$69>>2] = 0; + $70 = ((($54)) + 20|0); + HEAP32[$34>>2] = 0; + $71 = $32; + $12 = $70; + $13 = $34; + $14 = $71; + $72 = $12; + $73 = $13; + $11 = $73; + $74 = $11; + $5 = $72; + $6 = $74; + $75 = $5; + $76 = $6; + $4 = $76; + $77 = $4; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = $14; + $7 = $79; + $80 = $7; + $9 = $72; + $10 = $80; + $81 = $10; + $8 = $81; + $82 = $43; + $2 = $82; + $83 = $2; + __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($45,$83); + $84 = $43; + $3 = $84; + $85 = $3; + __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($46,$85); + ;HEAP32[$$byval_copy>>2]=HEAP32[$45>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$45+4>>2]|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$46>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$46+4>>2]|0; + __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); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + var $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); + $40 = $0; + $41 = $1; + $42 = $40; + $43 = $41; + $44 = (__ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($42)|0); + $45 = ($43>>>0)>($44>>>0); + if ($45) { + __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($42); + // unreachable; + } else { + $39 = $42; + $46 = $39; + $47 = ((($46)) + 8|0); + $38 = $47; + $48 = $38; + $37 = $48; + $49 = $37; + $50 = $41; + $7 = $49; + $8 = $50; + $51 = $7; + $52 = $8; + $4 = $51; + $5 = $52; + $6 = 0; + $53 = $4; + $3 = $53; + $54 = $5; + $2 = $54; + $55 = $2; + $56 = (__Znwj($55)|0); + $57 = ((($42)) + 4|0); + HEAP32[$57>>2] = $56; + HEAP32[$42>>2] = $56; + $58 = HEAP32[$42>>2]|0; + $59 = $41; + $60 = (($58) + ($59)|0); + $11 = $42; + $61 = $11; + $62 = ((($61)) + 8|0); + $10 = $62; + $63 = $10; + $9 = $63; + $64 = $9; + HEAP32[$64>>2] = $60; + $35 = $42; + $36 = 0; + $65 = $35; + $34 = $65; + $66 = $34; + $67 = HEAP32[$66>>2]|0; + $33 = $67; + $68 = $33; + $13 = $65; + $69 = $13; + $70 = HEAP32[$69>>2]|0; + $12 = $70; + $71 = $12; + $18 = $65; + $72 = $18; + $17 = $72; + $73 = $17; + $16 = $73; + $74 = $16; + $75 = ((($74)) + 8|0); + $15 = $75; + $76 = $15; + $14 = $76; + $77 = $14; + $78 = HEAP32[$77>>2]|0; + $79 = HEAP32[$73>>2]|0; + $80 = $78; + $81 = $79; + $82 = (($80) - ($81))|0; + $83 = (($71) + ($82)|0); + $20 = $65; + $84 = $20; + $85 = HEAP32[$84>>2]|0; + $19 = $85; + $86 = $19; + $25 = $65; + $87 = $25; + $24 = $87; + $88 = $24; + $23 = $88; + $89 = $23; + $90 = ((($89)) + 8|0); + $22 = $90; + $91 = $22; + $21 = $91; + $92 = $21; + $93 = HEAP32[$92>>2]|0; + $94 = HEAP32[$88>>2]|0; + $95 = $93; + $96 = $94; + $97 = (($95) - ($96))|0; + $98 = (($86) + ($97)|0); + $27 = $65; + $99 = $27; + $100 = HEAP32[$99>>2]|0; + $26 = $100; + $101 = $26; + $102 = $36; + $103 = (($101) + ($102)|0); + $28 = $65; + $29 = $68; + $30 = $83; + $31 = $98; + $32 = $103; + STACKTOP = sp;return; + } +} +function __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $21 = sp + 68|0; + $16 = $0; + $17 = $1; + $18 = $2; + $19 = $3; + $22 = $16; + $15 = $22; + $23 = $15; + $24 = ((($23)) + 8|0); + $14 = $24; + $25 = $14; + $13 = $25; + $26 = $13; + $20 = $26; + $27 = $19; + $4 = $21; + $5 = $22; + $6 = $27; + $28 = $20; + $29 = $17; + $30 = $18; + $31 = ((($22)) + 4|0); + $7 = $28; + $8 = $29; + $9 = $30; + $10 = $31; + $32 = $9; + $33 = $8; + $34 = $32; + $35 = $33; + $36 = (($34) - ($35))|0; + $11 = $36; + $37 = $11; + $38 = ($37|0)>(0); + if (!($38)) { + $12 = $21; + STACKTOP = sp;return; + } + $39 = $10; + $40 = HEAP32[$39>>2]|0; + $41 = $8; + $42 = $11; + _memcpy(($40|0),($41|0),($42|0))|0; + $43 = $11; + $44 = $10; + $45 = HEAP32[$44>>2]|0; + $46 = (($45) + ($43)|0); + HEAP32[$44>>2] = $46; + $12 = $21; + STACKTOP = sp;return; +} +function __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $19 = sp; + $22 = sp + 120|0; + $31 = $0; + $32 = $31; + $33 = HEAP32[$32>>2]|0; + $34 = ($33|0)!=(0|0); + if (!($34)) { + STACKTOP = sp;return; + } + $30 = $32; + $35 = $30; + $36 = HEAP32[$35>>2]|0; + $27 = $35; + $28 = $36; + $37 = $27; + $38 = ((($37)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $29 = $39; + while(1) { + $40 = $28; + $41 = $29; + $42 = ($40|0)!=($41|0); + if (!($42)) { + break; + } + $26 = $37; + $43 = $26; + $44 = ((($43)) + 8|0); + $25 = $44; + $45 = $25; + $24 = $45; + $46 = $24; + $47 = $29; + $48 = ((($47)) + -1|0); + $29 = $48; + $23 = $48; + $49 = $23; + $20 = $46; + $21 = $49; + $50 = $20; + $51 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $50; + $18 = $51; + $52 = $17; + $53 = $18; + $15 = $52; + $16 = $53; + } + $54 = $28; + $55 = ((($37)) + 4|0); + HEAP32[$55>>2] = $54; + $7 = $32; + $56 = $7; + $57 = ((($56)) + 8|0); + $6 = $57; + $58 = $6; + $5 = $58; + $59 = $5; + $60 = HEAP32[$32>>2]|0; + $4 = $32; + $61 = $4; + $3 = $61; + $62 = $3; + $63 = ((($62)) + 8|0); + $2 = $63; + $64 = $2; + $1 = $64; + $65 = $1; + $66 = HEAP32[$65>>2]|0; + $67 = HEAP32[$61>>2]|0; + $68 = $66; + $69 = $67; + $70 = (($68) - ($69))|0; + $12 = $59; + $13 = $60; + $14 = $70; + $71 = $12; + $72 = $13; + $73 = $14; + $9 = $71; + $10 = $72; + $11 = $73; + $74 = $10; + $8 = $74; + $75 = $8; + __ZdlPv($75); + STACKTOP = sp;return; +} +function __ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($0) { + $0 = $0|0; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $6 = sp + 8|0; + $9 = sp + 77|0; + $12 = sp; + $14 = sp + 76|0; + $19 = sp + 16|0; + $20 = sp + 12|0; + $18 = $0; + $21 = $18; + $17 = $21; + $22 = $17; + $23 = ((($22)) + 8|0); + $16 = $23; + $24 = $16; + $15 = $24; + $25 = $15; + $13 = $25; + $26 = $13; + ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; + $11 = $26; + $27 = $11; + $10 = $27; + HEAP32[$19>>2] = -1; + HEAP32[$20>>2] = 2147483647; + $7 = $19; + $8 = $20; + $28 = $7; + $29 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $28; + $5 = $29; + $30 = $5; + $31 = $4; + $1 = $6; + $2 = $30; + $3 = $31; + $32 = $2; + $33 = HEAP32[$32>>2]|0; + $34 = $3; + $35 = HEAP32[$34>>2]|0; + $36 = ($33>>>0)<($35>>>0); + $37 = $5; + $38 = $4; + $39 = $36 ? $37 : $38; + $40 = HEAP32[$39>>2]|0; + STACKTOP = sp;return ($40|0); +} +function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendINS_16__deque_iteratorIS3_PKS3_RS9_PKSA_iLi0EEEEEvT_SF_PNS_9enable_ifIXsr21__is_forward_iteratorISF_EE5valueEvE4typeE($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); + $29 = sp + 40|0; + $34 = sp + 277|0; + $47 = sp + 32|0; + $48 = sp + 24|0; + $49 = sp + 16|0; + $50 = sp + 104|0; + $51 = sp + 96|0; + $52 = sp + 276|0; + $53 = sp + 8|0; + $54 = sp; + $58 = sp + 72|0; + $59 = sp + 64|0; + $62 = sp + 48|0; + $55 = $0; + $56 = $3; + $63 = $55; + ;HEAP32[$58>>2]=HEAP32[$1>>2]|0;HEAP32[$58+4>>2]=HEAP32[$1+4>>2]|0; + ;HEAP32[$59>>2]=HEAP32[$2>>2]|0;HEAP32[$59+4>>2]=HEAP32[$2+4>>2]|0; + ;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; + ;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; + ;HEAP32[$50>>2]=HEAP32[$54>>2]|0;HEAP32[$50+4>>2]=HEAP32[$54+4>>2]|0; + ;HEAP32[$51>>2]=HEAP32[$53>>2]|0;HEAP32[$51+4>>2]=HEAP32[$53+4>>2]|0; + ;HEAP8[$47>>0]=HEAP8[$52>>0]|0; + ;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; + ;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; + $45 = $48; + $46 = $49; + $64 = $45; + $65 = $46; + $42 = $64; + $43 = $65; + $66 = $42; + $67 = $43; + $40 = $66; + $41 = $67; + $68 = $40; + $69 = ((($68)) + 4|0); + $70 = HEAP32[$69>>2]|0; + $71 = $41; + $72 = ((($71)) + 4|0); + $73 = HEAP32[$72>>2]|0; + $74 = ($70|0)==($73|0); + $75 = $74 ^ 1; + if ($75) { + $76 = $45; + $77 = HEAP32[$76>>2]|0; + $78 = $46; + $79 = HEAP32[$78>>2]|0; + $80 = $77; + $81 = $79; + $82 = (($80) - ($81))|0; + $83 = (($82|0) / 4)&-1; + $84 = ($83*93)|0; + $85 = $45; + $86 = ((($85)) + 4|0); + $87 = HEAP32[$86>>2]|0; + $88 = $45; + $89 = HEAP32[$88>>2]|0; + $90 = HEAP32[$89>>2]|0; + $91 = $87; + $92 = $90; + $93 = (($91) - ($92))|0; + $94 = (($93|0) / 44)&-1; + $95 = (($84) + ($94))|0; + $96 = $46; + $97 = ((($96)) + 4|0); + $98 = HEAP32[$97>>2]|0; + $99 = $46; + $100 = HEAP32[$99>>2]|0; + $101 = HEAP32[$100>>2]|0; + $102 = $98; + $103 = $101; + $104 = (($102) - ($103))|0; + $105 = (($104|0) / 44)&-1; + $106 = (($95) - ($105))|0; + $44 = $106; + } else { + $44 = 0; + } + $107 = $44; + $57 = $107; + $20 = $63; + $108 = $20; + $109 = ((($108)) + 20|0); + $19 = $109; + $110 = $19; + $18 = $110; + $111 = $18; + $60 = $111; + $10 = $63; + $112 = $10; + $9 = $112; + $113 = $9; + $8 = $113; + $114 = $8; + $115 = ((($114)) + 8|0); + $116 = HEAP32[$115>>2]|0; + $117 = ((($114)) + 4|0); + $118 = HEAP32[$117>>2]|0; + $119 = $116; + $120 = $118; + $121 = (($119) - ($120))|0; + $122 = (($121|0) / 4)&-1; + $123 = ($122|0)==(0); + if ($123) { + $144 = 0; + } else { + $7 = $113; + $124 = $7; + $125 = ((($124)) + 8|0); + $126 = HEAP32[$125>>2]|0; + $127 = ((($124)) + 4|0); + $128 = HEAP32[$127>>2]|0; + $129 = $126; + $130 = $128; + $131 = (($129) - ($130))|0; + $132 = (($131|0) / 4)&-1; + $133 = ($132*93)|0; + $134 = (($133) - 1)|0; + $144 = $134; + } + $135 = ((($112)) + 16|0); + $136 = HEAP32[$135>>2]|0; + $6 = $112; + $137 = $6; + $138 = ((($137)) + 20|0); + $5 = $138; + $139 = $5; + $4 = $139; + $140 = $4; + $141 = HEAP32[$140>>2]|0; + $142 = (($136) + ($141))|0; + $143 = (($144) - ($142))|0; + $61 = $143; + $145 = $57; + $146 = $61; + $147 = ($145>>>0)>($146>>>0); + if ($147) { + $148 = $57; + $149 = $61; + $150 = (($148) - ($149))|0; + __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($63,$150); + } + __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($62,$63); + while(1) { + $13 = $1; + $14 = $2; + $151 = $13; + $152 = $14; + $11 = $151; + $12 = $152; + $153 = $11; + $154 = ((($153)) + 4|0); + $155 = HEAP32[$154>>2]|0; + $156 = $12; + $157 = ((($156)) + 4|0); + $158 = HEAP32[$157>>2]|0; + $159 = ($155|0)==($158|0); + $160 = $159 ^ 1; + if (!($160)) { + break; + } + $161 = $60; + $15 = $62; + $162 = $15; + $163 = ((($162)) + 4|0); + $164 = HEAP32[$163>>2]|0; + $16 = $164; + $165 = $16; + $17 = $1; + $166 = $17; + $167 = ((($166)) + 4|0); + $168 = HEAP32[$167>>2]|0; + $31 = $161; + $32 = $165; + $33 = $168; + $169 = $31; + $170 = $32; + $171 = $33; + $30 = $171; + $172 = $30; + ;HEAP8[$29>>0]=HEAP8[$34>>0]|0; + $26 = $169; + $27 = $170; + $28 = $172; + $173 = $26; + $174 = $27; + $175 = $28; + $25 = $175; + $176 = $25; + $22 = $173; + $23 = $174; + $24 = $176; + $177 = $23; + $178 = $24; + $21 = $178; + $179 = $21; + __ZN6laszip6models10arithmeticC2ERKS1_($177,$179); + $35 = $62; + $180 = $35; + $181 = ((($180)) + 4|0); + $182 = HEAP32[$181>>2]|0; + $183 = ((($182)) + 44|0); + HEAP32[$181>>2] = $183; + $184 = HEAP32[$180>>2]|0; + $185 = HEAP32[$184>>2]|0; + $186 = $183; + $187 = $185; + $188 = (($186) - ($187))|0; + $189 = (($188|0) / 44)&-1; + $190 = ($189|0)==(93); + if ($190) { + $191 = HEAP32[$180>>2]|0; + $192 = ((($191)) + 4|0); + HEAP32[$180>>2] = $192; + $193 = HEAP32[$180>>2]|0; + $194 = HEAP32[$193>>2]|0; + $195 = ((($180)) + 4|0); + HEAP32[$195>>2] = $194; + } + $36 = $1; + $196 = $36; + $197 = ((($196)) + 4|0); + $198 = HEAP32[$197>>2]|0; + $199 = ((($198)) + 44|0); + HEAP32[$197>>2] = $199; + $200 = HEAP32[$196>>2]|0; + $201 = HEAP32[$200>>2]|0; + $202 = $199; + $203 = $201; + $204 = (($202) - ($203))|0; + $205 = (($204|0) / 44)&-1; + $206 = ($205|0)==(93); + if ($206) { + $207 = HEAP32[$196>>2]|0; + $208 = ((($207)) + 4|0); + HEAP32[$196>>2] = $208; + $209 = HEAP32[$196>>2]|0; + $210 = HEAP32[$209>>2]|0; + $211 = ((($196)) + 4|0); + HEAP32[$211>>2] = $210; + } + $39 = $63; + $212 = $39; + $213 = ((($212)) + 20|0); + $38 = $213; + $214 = $38; + $37 = $214; + $215 = $37; + $216 = HEAP32[$215>>2]|0; + $217 = (($216) + 1)|0; + HEAP32[$215>>2] = $217; + } + STACKTOP = sp;return; +} +function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $13 = $0; + $16 = $13; + __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($16); + $12 = $16; + $17 = $12; + $18 = ((($17)) + 4|0); + $19 = HEAP32[$18>>2]|0; + $14 = $19; + $11 = $16; + $20 = $11; + $21 = ((($20)) + 8|0); + $22 = HEAP32[$21>>2]|0; + $15 = $22; + while(1) { + $23 = $14; + $24 = $15; + $25 = ($23|0)!=($24|0); + if (!($25)) { + break; + } + $10 = $16; + $26 = $10; + $27 = ((($26)) + 20|0); + $9 = $27; + $28 = $9; + $8 = $28; + $29 = $8; + $30 = $14; + $31 = HEAP32[$30>>2]|0; + $5 = $29; + $6 = $31; + $7 = 93; + $32 = $5; + $33 = $6; + $34 = $7; + $2 = $32; + $3 = $33; + $4 = $34; + $35 = $3; + $1 = $35; + $36 = $1; + __ZdlPv($36); + $37 = $14; + $38 = ((($37)) + 4|0); + $14 = $38; + } + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($16); + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $19 = sp + 8|0; + $22 = sp + 133|0; + $29 = sp; + $32 = sp + 132|0; + $34 = $0; + $35 = $34; + $33 = $35; + $36 = $33; + $37 = ((($36)) + 4|0); + $38 = HEAP32[$37>>2]|0; + $30 = $36; + $31 = $38; + $39 = $30; + $40 = $31; + ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; + $27 = $39; + $28 = $40; + $41 = $27; + while(1) { + $42 = $28; + $43 = ((($41)) + 8|0); + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)!=($44|0); + if (!($45)) { + break; + } + $26 = $41; + $46 = $26; + $47 = ((($46)) + 12|0); + $25 = $47; + $48 = $25; + $24 = $48; + $49 = $24; + $50 = ((($41)) + 8|0); + $51 = HEAP32[$50>>2]|0; + $52 = ((($51)) + -4|0); + HEAP32[$50>>2] = $52; + $23 = $52; + $53 = $23; + $20 = $49; + $21 = $53; + $54 = $20; + $55 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $54; + $18 = $55; + $56 = $17; + $57 = $18; + $15 = $56; + $16 = $57; + } + $58 = HEAP32[$35>>2]|0; + $59 = ($58|0)!=(0|0); + if (!($59)) { + STACKTOP = sp;return; + } + $14 = $35; + $60 = $14; + $61 = ((($60)) + 12|0); + $13 = $61; + $62 = $13; + $12 = $62; + $63 = $12; + $64 = HEAP32[$35>>2]|0; + $4 = $35; + $65 = $4; + $3 = $65; + $66 = $3; + $67 = ((($66)) + 12|0); + $2 = $67; + $68 = $2; + $1 = $68; + $69 = $1; + $70 = HEAP32[$69>>2]|0; + $71 = HEAP32[$65>>2]|0; + $72 = $70; + $73 = $71; + $74 = (($72) - ($73))|0; + $75 = (($74|0) / 4)&-1; + $9 = $63; + $10 = $64; + $11 = $75; + $76 = $9; + $77 = $10; + $78 = $11; + $6 = $76; + $7 = $77; + $8 = $78; + $79 = $7; + $5 = $79; + $80 = $5; + __ZdlPv($80); + STACKTOP = sp;return; +} +function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 1744|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1744|0); + $$byval_copy5 = sp + 1724|0; + $$byval_copy4 = sp + 1720|0; + $$byval_copy3 = sp + 1716|0; + $$byval_copy2 = sp + 1712|0; + $$byval_copy1 = sp + 1708|0; + $$byval_copy = sp + 1704|0; + $22 = sp + 80|0; + $25 = sp + 1738|0; + $43 = sp + 72|0; + $46 = sp + 1737|0; + $52 = sp + 1516|0; + $58 = sp + 1492|0; + $64 = sp + 1468|0; + $76 = sp + 1420|0; + $102 = sp + 64|0; + $107 = sp + 1736|0; + $115 = sp + 1272|0; + $116 = sp + 1268|0; + $117 = sp + 1248|0; + $118 = sp + 1244|0; + $119 = sp + 1240|0; + $122 = sp + 56|0; + $125 = sp + 1735|0; + $170 = sp + 48|0; + $173 = sp + 1734|0; + $179 = sp + 1016|0; + $185 = sp + 992|0; + $191 = sp + 968|0; + $203 = sp + 920|0; + $229 = sp + 40|0; + $234 = sp + 1733|0; + $242 = sp + 772|0; + $243 = sp + 768|0; + $244 = sp + 748|0; + $245 = sp + 744|0; + $246 = sp + 740|0; + $249 = sp + 32|0; + $252 = sp + 1732|0; + $267 = sp + 24|0; + $270 = sp + 1731|0; + $276 = sp + 636|0; + $282 = sp + 612|0; + $288 = sp + 588|0; + $300 = sp + 540|0; + $326 = sp + 16|0; + $331 = sp + 1730|0; + $339 = sp + 392|0; + $340 = sp + 388|0; + $341 = sp + 368|0; + $342 = sp + 364|0; + $343 = sp + 360|0; + $346 = sp + 8|0; + $349 = sp + 1729|0; + $358 = sp; + $361 = sp + 1728|0; + $367 = sp + 280|0; + $373 = sp + 256|0; + $379 = sp + 232|0; + $391 = sp + 184|0; + $401 = sp + 144|0; + $402 = sp + 140|0; + $403 = sp + 136|0; + $404 = sp + 132|0; + $405 = sp + 128|0; + $406 = sp + 124|0; + $408 = sp + 100|0; + $409 = sp + 96|0; + $410 = sp + 92|0; + $411 = sp + 88|0; + $398 = $0; + $399 = $1; + $413 = $398; + $397 = $413; + $414 = $397; + $415 = ((($414)) + 20|0); + $396 = $415; + $416 = $396; + $395 = $416; + $417 = $395; + $400 = $417; + $418 = $399; + $394 = $413; + $419 = $394; + $420 = ((($419)) + 8|0); + $421 = HEAP32[$420>>2]|0; + $422 = ((($419)) + 4|0); + $423 = HEAP32[$422>>2]|0; + $424 = ($421|0)==($423|0); + $425 = $424&1; + $426 = (($418) + ($425))|0; + $393 = $426; + $427 = $393; + $428 = (($427>>>0) / 93)&-1; + $429 = $393; + $430 = (($429>>>0) % 93)&-1; + $431 = ($430|0)!=(0); + $432 = $431&1; + $433 = (($428) + ($432))|0; + HEAP32[$401>>2] = $433; + $392 = $413; + $434 = $392; + $435 = ((($434)) + 16|0); + $436 = HEAP32[$435>>2]|0; + $437 = (($436>>>0) / 93)&-1; + HEAP32[$402>>2] = $437; + $359 = $402; + $360 = $401; + $438 = $359; + $439 = $360; + ;HEAP8[$358>>0]=HEAP8[$361>>0]|0; + $356 = $438; + $357 = $439; + $440 = $357; + $441 = $356; + $353 = $358; + $354 = $440; + $355 = $441; + $442 = $354; + $443 = HEAP32[$442>>2]|0; + $444 = $355; + $445 = HEAP32[$444>>2]|0; + $446 = ($443>>>0)<($445>>>0); + $447 = $357; + $448 = $356; + $449 = $446 ? $447 : $448; + $450 = HEAP32[$449>>2]|0; + HEAP32[$402>>2] = $450; + $451 = HEAP32[$402>>2]|0; + $452 = HEAP32[$401>>2]|0; + $453 = (($452) - ($451))|0; + HEAP32[$401>>2] = $453; + $454 = HEAP32[$401>>2]|0; + $455 = ($454|0)==(0); + if ($455) { + $456 = HEAP32[$402>>2]|0; + $457 = ($456*93)|0; + $458 = ((($413)) + 16|0); + $459 = HEAP32[$458>>2]|0; + $460 = (($459) - ($457))|0; + HEAP32[$458>>2] = $460; + while(1) { + $461 = HEAP32[$402>>2]|0; + $462 = ($461>>>0)>(0); + if (!($462)) { + break; + } + $254 = $413; + $463 = $254; + $464 = ((($463)) + 4|0); + $465 = HEAP32[$464>>2]|0; + $466 = HEAP32[$465>>2]|0; + HEAP32[$403>>2] = $466; + $253 = $413; + $467 = $253; + $468 = ((($467)) + 4|0); + $469 = HEAP32[$468>>2]|0; + $470 = ((($469)) + 4|0); + $250 = $467; + $251 = $470; + $471 = $250; + $472 = $251; + ;HEAP8[$249>>0]=HEAP8[$252>>0]|0; + $247 = $471; + $248 = $472; + $473 = $247; + $474 = $248; + $475 = ((($473)) + 4|0); + HEAP32[$475>>2] = $474; + $238 = $413; + $239 = $403; + $476 = $238; + $477 = ((($476)) + 8|0); + $478 = HEAP32[$477>>2]|0; + $237 = $476; + $479 = $237; + $480 = ((($479)) + 12|0); + $236 = $480; + $481 = $236; + $235 = $481; + $482 = $235; + $483 = HEAP32[$482>>2]|0; + $484 = ($478|0)==($483|0); + do { + if ($484) { + $485 = ((($476)) + 4|0); + $486 = HEAP32[$485>>2]|0; + $487 = HEAP32[$476>>2]|0; + $488 = ($486>>>0)>($487>>>0); + if (!($488)) { + $206 = $476; + $535 = $206; + $536 = ((($535)) + 12|0); + $205 = $536; + $537 = $205; + $204 = $537; + $538 = $204; + $539 = HEAP32[$538>>2]|0; + $540 = HEAP32[$476>>2]|0; + $541 = $539; + $542 = $540; + $543 = (($541) - ($542))|0; + $544 = (($543|0) / 4)&-1; + $545 = $544<<1; + HEAP32[$242>>2] = $545; + HEAP32[$243>>2] = 1; + $171 = $242; + $172 = $243; + $546 = $171; + $547 = $172; + ;HEAP8[$170>>0]=HEAP8[$173>>0]|0; + $168 = $546; + $169 = $547; + $548 = $168; + $549 = $169; + $165 = $170; + $166 = $548; + $167 = $549; + $550 = $166; + $551 = HEAP32[$550>>2]|0; + $552 = $167; + $553 = HEAP32[$552>>2]|0; + $554 = ($551>>>0)<($553>>>0); + $555 = $169; + $556 = $168; + $557 = $554 ? $555 : $556; + $558 = HEAP32[$557>>2]|0; + $241 = $558; + $559 = $241; + $560 = $241; + $561 = (($560>>>0) / 4)&-1; + $160 = $476; + $562 = $160; + $563 = ((($562)) + 12|0); + $159 = $563; + $564 = $159; + $158 = $564; + $565 = $158; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($244,$559,$561,$565); + $566 = ((($476)) + 4|0); + $567 = HEAP32[$566>>2]|0; + $161 = $245; + $162 = $567; + $568 = $161; + $569 = $162; + HEAP32[$568>>2] = $569; + $570 = ((($476)) + 8|0); + $571 = HEAP32[$570>>2]|0; + $163 = $246; + $164 = $571; + $572 = $163; + $573 = $164; + HEAP32[$572>>2] = $573; + ;HEAP32[$$byval_copy>>2]=HEAP32[$245>>2]|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$246>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($244,$$byval_copy,$$byval_copy1); + $177 = $476; + $178 = $244; + $574 = $177; + $176 = $574; + $575 = $176; + $576 = HEAP32[$575>>2]|0; + HEAP32[$179>>2] = $576; + $577 = $178; + $174 = $577; + $578 = $174; + $579 = HEAP32[$578>>2]|0; + $580 = $177; + HEAP32[$580>>2] = $579; + $175 = $179; + $581 = $175; + $582 = HEAP32[$581>>2]|0; + $583 = $178; + HEAP32[$583>>2] = $582; + $584 = ((($476)) + 4|0); + $585 = ((($244)) + 4|0); + $183 = $584; + $184 = $585; + $586 = $183; + $182 = $586; + $587 = $182; + $588 = HEAP32[$587>>2]|0; + HEAP32[$185>>2] = $588; + $589 = $184; + $180 = $589; + $590 = $180; + $591 = HEAP32[$590>>2]|0; + $592 = $183; + HEAP32[$592>>2] = $591; + $181 = $185; + $593 = $181; + $594 = HEAP32[$593>>2]|0; + $595 = $184; + HEAP32[$595>>2] = $594; + $596 = ((($476)) + 8|0); + $597 = ((($244)) + 8|0); + $189 = $596; + $190 = $597; + $598 = $189; + $188 = $598; + $599 = $188; + $600 = HEAP32[$599>>2]|0; + HEAP32[$191>>2] = $600; + $601 = $190; + $186 = $601; + $602 = $186; + $603 = HEAP32[$602>>2]|0; + $604 = $189; + HEAP32[$604>>2] = $603; + $187 = $191; + $605 = $187; + $606 = HEAP32[$605>>2]|0; + $607 = $190; + HEAP32[$607>>2] = $606; + $194 = $476; + $608 = $194; + $609 = ((($608)) + 12|0); + $193 = $609; + $610 = $193; + $192 = $610; + $611 = $192; + $197 = $244; + $612 = $197; + $613 = ((($612)) + 12|0); + $196 = $613; + $614 = $196; + $195 = $614; + $615 = $195; + $201 = $611; + $202 = $615; + $616 = $201; + $200 = $616; + $617 = $200; + $618 = HEAP32[$617>>2]|0; + HEAP32[$203>>2] = $618; + $619 = $202; + $198 = $619; + $620 = $198; + $621 = HEAP32[$620>>2]|0; + $622 = $201; + HEAP32[$622>>2] = $621; + $199 = $203; + $623 = $199; + $624 = HEAP32[$623>>2]|0; + $625 = $202; + HEAP32[$625>>2] = $624; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($244); + break; + } + $489 = ((($476)) + 4|0); + $490 = HEAP32[$489>>2]|0; + $491 = HEAP32[$476>>2]|0; + $492 = $490; + $493 = $491; + $494 = (($492) - ($493))|0; + $495 = (($494|0) / 4)&-1; + $240 = $495; + $496 = $240; + $497 = (($496) + 1)|0; + $498 = (($497|0) / 2)&-1; + $240 = $498; + $499 = ((($476)) + 4|0); + $500 = HEAP32[$499>>2]|0; + $501 = ((($476)) + 8|0); + $502 = HEAP32[$501>>2]|0; + $503 = ((($476)) + 4|0); + $504 = HEAP32[$503>>2]|0; + $505 = $240; + $506 = (0 - ($505))|0; + $507 = (($504) + ($506<<2)|0); + $214 = $500; + $215 = $502; + $216 = $507; + $508 = $214; + $213 = $508; + $509 = $213; + $510 = $215; + $207 = $510; + $511 = $207; + $512 = $216; + $208 = $512; + $513 = $208; + $209 = $509; + $210 = $511; + $211 = $513; + $514 = $210; + $515 = $209; + $516 = $514; + $517 = $515; + $518 = (($516) - ($517))|0; + $519 = (($518|0) / 4)&-1; + $212 = $519; + $520 = $212; + $521 = ($520>>>0)>(0); + if ($521) { + $522 = $211; + $523 = $209; + $524 = $212; + $525 = $524<<2; + _memmove(($522|0),($523|0),($525|0))|0; + } + $526 = $211; + $527 = $212; + $528 = (($526) + ($527<<2)|0); + $529 = ((($476)) + 8|0); + HEAP32[$529>>2] = $528; + $530 = $240; + $531 = ((($476)) + 4|0); + $532 = HEAP32[$531>>2]|0; + $533 = (0 - ($530))|0; + $534 = (($532) + ($533<<2)|0); + HEAP32[$531>>2] = $534; + } + } while(0); + $219 = $476; + $626 = $219; + $627 = ((($626)) + 12|0); + $218 = $627; + $628 = $218; + $217 = $628; + $629 = $217; + $630 = ((($476)) + 8|0); + $631 = HEAP32[$630>>2]|0; + $220 = $631; + $632 = $220; + $633 = $239; + $231 = $629; + $232 = $632; + $233 = $633; + $634 = $231; + $635 = $232; + $636 = $233; + $230 = $636; + $637 = $230; + ;HEAP8[$229>>0]=HEAP8[$234>>0]|0; + $226 = $634; + $227 = $635; + $228 = $637; + $638 = $226; + $639 = $227; + $640 = $228; + $225 = $640; + $641 = $225; + $222 = $638; + $223 = $639; + $224 = $641; + $642 = $223; + $643 = $224; + $221 = $643; + $644 = $221; + $645 = HEAP32[$644>>2]|0; + HEAP32[$642>>2] = $645; + $646 = ((($476)) + 8|0); + $647 = HEAP32[$646>>2]|0; + $648 = ((($647)) + 4|0); + HEAP32[$646>>2] = $648; + $649 = HEAP32[$402>>2]|0; + $650 = (($649) + -1)|0; + HEAP32[$402>>2] = $650; + } + STACKTOP = sp;return; + } + $651 = HEAP32[$401>>2]|0; + $157 = $413; + $652 = $157; + $156 = $652; + $653 = $156; + $654 = ((($653)) + 12|0); + $155 = $654; + $655 = $155; + $154 = $655; + $656 = $154; + $657 = HEAP32[$656>>2]|0; + $658 = HEAP32[$652>>2]|0; + $659 = $657; + $660 = $658; + $661 = (($659) - ($660))|0; + $662 = (($661|0) / 4)&-1; + $153 = $413; + $663 = $153; + $664 = ((($663)) + 8|0); + $665 = HEAP32[$664>>2]|0; + $666 = ((($663)) + 4|0); + $667 = HEAP32[$666>>2]|0; + $668 = $665; + $669 = $667; + $670 = (($668) - ($669))|0; + $671 = (($670|0) / 4)&-1; + $672 = (($662) - ($671))|0; + $673 = ($651>>>0)<=($672>>>0); + if (!($673)) { + $935 = HEAP32[$402>>2]|0; + $936 = ($935*93)|0; + $407 = $936; + $30 = $413; + $937 = $30; + $29 = $937; + $938 = $29; + $939 = ((($938)) + 12|0); + $28 = $939; + $940 = $28; + $27 = $940; + $941 = $27; + $942 = HEAP32[$941>>2]|0; + $943 = HEAP32[$937>>2]|0; + $944 = $942; + $945 = $943; + $946 = (($944) - ($945))|0; + $947 = (($946|0) / 4)&-1; + $948 = $947<<1; + HEAP32[$409>>2] = $948; + $949 = HEAP32[$401>>2]|0; + $26 = $413; + $950 = $26; + $951 = ((($950)) + 8|0); + $952 = HEAP32[$951>>2]|0; + $953 = ((($950)) + 4|0); + $954 = HEAP32[$953>>2]|0; + $955 = $952; + $956 = $954; + $957 = (($955) - ($956))|0; + $958 = (($957|0) / 4)&-1; + $959 = (($949) + ($958))|0; + HEAP32[$410>>2] = $959; + $23 = $409; + $24 = $410; + $960 = $23; + $961 = $24; + ;HEAP8[$22>>0]=HEAP8[$25>>0]|0; + $20 = $960; + $21 = $961; + $962 = $20; + $963 = $21; + $17 = $22; + $18 = $962; + $19 = $963; + $964 = $18; + $965 = HEAP32[$964>>2]|0; + $966 = $19; + $967 = HEAP32[$966>>2]|0; + $968 = ($965>>>0)<($967>>>0); + $969 = $21; + $970 = $20; + $971 = $968 ? $969 : $970; + $972 = HEAP32[$971>>2]|0; + $16 = $413; + $973 = $16; + $974 = ((($973)) + 8|0); + $975 = HEAP32[$974>>2]|0; + $976 = ((($973)) + 4|0); + $977 = HEAP32[$976>>2]|0; + $978 = $975; + $979 = $977; + $980 = (($978) - ($979))|0; + $981 = (($980|0) / 4)&-1; + $982 = HEAP32[$402>>2]|0; + $983 = (($981) - ($982))|0; + $15 = $413; + $984 = $15; + $985 = ((($984)) + 12|0); + $14 = $985; + $986 = $14; + $13 = $986; + $987 = $13; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($408,$972,$983,$987); + while(1) { + $988 = HEAP32[$401>>2]|0; + $989 = ($988>>>0)>(0); + if (!($989)) { + break; + } + $990 = $400; + $11 = $990; + $12 = 93; + $991 = $11; + $992 = $12; + $8 = $991; + $9 = $992; + $10 = 0; + $993 = $8; + $994 = $9; + $7 = $993; + $995 = ($994>>>0)>(97612893); + if ($995) { + label = 35; + break; + } + $1000 = $9; + $1001 = ($1000*44)|0; + $6 = $1001; + $1002 = $6; + $1003 = (__Znwj($1002)|0); + HEAP32[$411>>2] = $1003; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($408,$411); + $1004 = HEAP32[$401>>2]|0; + $1005 = (($1004) + -1)|0; + HEAP32[$401>>2] = $1005; + } + if ((label|0) == 35) { + $5 = 4287; + $996 = (___cxa_allocate_exception(8)|0); + $997 = $5; + $3 = $996; + $4 = $997; + $998 = $3; + $999 = $4; + __ZNSt11logic_errorC2EPKc($998,$999); + HEAP32[$998>>2] = (3660); + ___cxa_throw(($996|0),(1384|0),(220|0)); + // unreachable; + } + while(1) { + $1006 = HEAP32[$402>>2]|0; + $1007 = ($1006>>>0)>(0); + if (!($1007)) { + break; + } + $2 = $413; + $1008 = $2; + $1009 = ((($1008)) + 4|0); + $1010 = HEAP32[$1009>>2]|0; + $335 = $408; + $336 = $1010; + $1011 = $335; + $1012 = ((($1011)) + 8|0); + $1013 = HEAP32[$1012>>2]|0; + $334 = $1011; + $1014 = $334; + $1015 = ((($1014)) + 12|0); + $333 = $1015; + $1016 = $333; + $332 = $1016; + $1017 = $332; + $1018 = HEAP32[$1017>>2]|0; + $1019 = ($1013|0)==($1018|0); + do { + if ($1019) { + $1020 = ((($1011)) + 4|0); + $1021 = HEAP32[$1020>>2]|0; + $1022 = HEAP32[$1011>>2]|0; + $1023 = ($1021>>>0)>($1022>>>0); + if (!($1023)) { + $303 = $1011; + $1070 = $303; + $1071 = ((($1070)) + 12|0); + $302 = $1071; + $1072 = $302; + $301 = $1072; + $1073 = $301; + $1074 = HEAP32[$1073>>2]|0; + $1075 = HEAP32[$1011>>2]|0; + $1076 = $1074; + $1077 = $1075; + $1078 = (($1076) - ($1077))|0; + $1079 = (($1078|0) / 4)&-1; + $1080 = $1079<<1; + HEAP32[$339>>2] = $1080; + HEAP32[$340>>2] = 1; + $268 = $339; + $269 = $340; + $1081 = $268; + $1082 = $269; + ;HEAP8[$267>>0]=HEAP8[$270>>0]|0; + $265 = $1081; + $266 = $1082; + $1083 = $265; + $1084 = $266; + $262 = $267; + $263 = $1083; + $264 = $1084; + $1085 = $263; + $1086 = HEAP32[$1085>>2]|0; + $1087 = $264; + $1088 = HEAP32[$1087>>2]|0; + $1089 = ($1086>>>0)<($1088>>>0); + $1090 = $266; + $1091 = $265; + $1092 = $1089 ? $1090 : $1091; + $1093 = HEAP32[$1092>>2]|0; + $338 = $1093; + $1094 = $338; + $1095 = $338; + $1096 = (($1095>>>0) / 4)&-1; + $257 = $1011; + $1097 = $257; + $1098 = ((($1097)) + 12|0); + $256 = $1098; + $1099 = $256; + $1100 = ((($1099)) + 4|0); + $255 = $1100; + $1101 = $255; + $1102 = HEAP32[$1101>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($341,$1094,$1096,$1102); + $1103 = ((($1011)) + 4|0); + $1104 = HEAP32[$1103>>2]|0; + $258 = $342; + $259 = $1104; + $1105 = $258; + $1106 = $259; + HEAP32[$1105>>2] = $1106; + $1107 = ((($1011)) + 8|0); + $1108 = HEAP32[$1107>>2]|0; + $260 = $343; + $261 = $1108; + $1109 = $260; + $1110 = $261; + HEAP32[$1109>>2] = $1110; + ;HEAP32[$$byval_copy4>>2]=HEAP32[$342>>2]|0; + ;HEAP32[$$byval_copy5>>2]=HEAP32[$343>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($341,$$byval_copy4,$$byval_copy5); + $274 = $1011; + $275 = $341; + $1111 = $274; + $273 = $1111; + $1112 = $273; + $1113 = HEAP32[$1112>>2]|0; + HEAP32[$276>>2] = $1113; + $1114 = $275; + $271 = $1114; + $1115 = $271; + $1116 = HEAP32[$1115>>2]|0; + $1117 = $274; + HEAP32[$1117>>2] = $1116; + $272 = $276; + $1118 = $272; + $1119 = HEAP32[$1118>>2]|0; + $1120 = $275; + HEAP32[$1120>>2] = $1119; + $1121 = ((($1011)) + 4|0); + $1122 = ((($341)) + 4|0); + $280 = $1121; + $281 = $1122; + $1123 = $280; + $279 = $1123; + $1124 = $279; + $1125 = HEAP32[$1124>>2]|0; + HEAP32[$282>>2] = $1125; + $1126 = $281; + $277 = $1126; + $1127 = $277; + $1128 = HEAP32[$1127>>2]|0; + $1129 = $280; + HEAP32[$1129>>2] = $1128; + $278 = $282; + $1130 = $278; + $1131 = HEAP32[$1130>>2]|0; + $1132 = $281; + HEAP32[$1132>>2] = $1131; + $1133 = ((($1011)) + 8|0); + $1134 = ((($341)) + 8|0); + $286 = $1133; + $287 = $1134; + $1135 = $286; + $285 = $1135; + $1136 = $285; + $1137 = HEAP32[$1136>>2]|0; + HEAP32[$288>>2] = $1137; + $1138 = $287; + $283 = $1138; + $1139 = $283; + $1140 = HEAP32[$1139>>2]|0; + $1141 = $286; + HEAP32[$1141>>2] = $1140; + $284 = $288; + $1142 = $284; + $1143 = HEAP32[$1142>>2]|0; + $1144 = $287; + HEAP32[$1144>>2] = $1143; + $291 = $1011; + $1145 = $291; + $1146 = ((($1145)) + 12|0); + $290 = $1146; + $1147 = $290; + $289 = $1147; + $1148 = $289; + $294 = $341; + $1149 = $294; + $1150 = ((($1149)) + 12|0); + $293 = $1150; + $1151 = $293; + $292 = $1151; + $1152 = $292; + $298 = $1148; + $299 = $1152; + $1153 = $298; + $297 = $1153; + $1154 = $297; + $1155 = HEAP32[$1154>>2]|0; + HEAP32[$300>>2] = $1155; + $1156 = $299; + $295 = $1156; + $1157 = $295; + $1158 = HEAP32[$1157>>2]|0; + $1159 = $298; + HEAP32[$1159>>2] = $1158; + $296 = $300; + $1160 = $296; + $1161 = HEAP32[$1160>>2]|0; + $1162 = $299; + HEAP32[$1162>>2] = $1161; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($341); + break; + } + $1024 = ((($1011)) + 4|0); + $1025 = HEAP32[$1024>>2]|0; + $1026 = HEAP32[$1011>>2]|0; + $1027 = $1025; + $1028 = $1026; + $1029 = (($1027) - ($1028))|0; + $1030 = (($1029|0) / 4)&-1; + $337 = $1030; + $1031 = $337; + $1032 = (($1031) + 1)|0; + $1033 = (($1032|0) / 2)&-1; + $337 = $1033; + $1034 = ((($1011)) + 4|0); + $1035 = HEAP32[$1034>>2]|0; + $1036 = ((($1011)) + 8|0); + $1037 = HEAP32[$1036>>2]|0; + $1038 = ((($1011)) + 4|0); + $1039 = HEAP32[$1038>>2]|0; + $1040 = $337; + $1041 = (0 - ($1040))|0; + $1042 = (($1039) + ($1041<<2)|0); + $311 = $1035; + $312 = $1037; + $313 = $1042; + $1043 = $311; + $310 = $1043; + $1044 = $310; + $1045 = $312; + $304 = $1045; + $1046 = $304; + $1047 = $313; + $305 = $1047; + $1048 = $305; + $306 = $1044; + $307 = $1046; + $308 = $1048; + $1049 = $307; + $1050 = $306; + $1051 = $1049; + $1052 = $1050; + $1053 = (($1051) - ($1052))|0; + $1054 = (($1053|0) / 4)&-1; + $309 = $1054; + $1055 = $309; + $1056 = ($1055>>>0)>(0); + if ($1056) { + $1057 = $308; + $1058 = $306; + $1059 = $309; + $1060 = $1059<<2; + _memmove(($1057|0),($1058|0),($1060|0))|0; + } + $1061 = $308; + $1062 = $309; + $1063 = (($1061) + ($1062<<2)|0); + $1064 = ((($1011)) + 8|0); + HEAP32[$1064>>2] = $1063; + $1065 = $337; + $1066 = ((($1011)) + 4|0); + $1067 = HEAP32[$1066>>2]|0; + $1068 = (0 - ($1065))|0; + $1069 = (($1067) + ($1068<<2)|0); + HEAP32[$1066>>2] = $1069; + } + } while(0); + $316 = $1011; + $1163 = $316; + $1164 = ((($1163)) + 12|0); + $315 = $1164; + $1165 = $315; + $1166 = ((($1165)) + 4|0); + $314 = $1166; + $1167 = $314; + $1168 = HEAP32[$1167>>2]|0; + $1169 = ((($1011)) + 8|0); + $1170 = HEAP32[$1169>>2]|0; + $317 = $1170; + $1171 = $317; + $1172 = $336; + $328 = $1168; + $329 = $1171; + $330 = $1172; + $1173 = $328; + $1174 = $329; + $1175 = $330; + $327 = $1175; + $1176 = $327; + ;HEAP8[$326>>0]=HEAP8[$331>>0]|0; + $323 = $1173; + $324 = $1174; + $325 = $1176; + $1177 = $323; + $1178 = $324; + $1179 = $325; + $322 = $1179; + $1180 = $322; + $319 = $1177; + $320 = $1178; + $321 = $1180; + $1181 = $320; + $1182 = $321; + $318 = $1182; + $1183 = $318; + $1184 = HEAP32[$1183>>2]|0; + HEAP32[$1181>>2] = $1184; + $1185 = ((($1011)) + 8|0); + $1186 = HEAP32[$1185>>2]|0; + $1187 = ((($1186)) + 4|0); + HEAP32[$1185>>2] = $1187; + $350 = $413; + $1188 = $350; + $1189 = ((($1188)) + 4|0); + $1190 = HEAP32[$1189>>2]|0; + $1191 = ((($1190)) + 4|0); + $347 = $1188; + $348 = $1191; + $1192 = $347; + $1193 = $348; + ;HEAP8[$346>>0]=HEAP8[$349>>0]|0; + $344 = $1192; + $345 = $1193; + $1194 = $344; + $1195 = $345; + $1196 = ((($1194)) + 4|0); + HEAP32[$1196>>2] = $1195; + $1197 = HEAP32[$402>>2]|0; + $1198 = (($1197) + -1)|0; + HEAP32[$402>>2] = $1198; + } + $351 = $413; + $1199 = $351; + $1200 = ((($1199)) + 8|0); + $1201 = HEAP32[$1200>>2]|0; + $412 = $1201; + while(1) { + $1202 = $412; + $352 = $413; + $1203 = $352; + $1204 = ((($1203)) + 4|0); + $1205 = HEAP32[$1204>>2]|0; + $1206 = ($1202|0)!=($1205|0); + if (!($1206)) { + break; + } + $1207 = $412; + $1208 = ((($1207)) + -4|0); + $412 = $1208; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($408,$1208); + } + $365 = $413; + $366 = $408; + $1209 = $365; + $364 = $1209; + $1210 = $364; + $1211 = HEAP32[$1210>>2]|0; + HEAP32[$367>>2] = $1211; + $1212 = $366; + $362 = $1212; + $1213 = $362; + $1214 = HEAP32[$1213>>2]|0; + $1215 = $365; + HEAP32[$1215>>2] = $1214; + $363 = $367; + $1216 = $363; + $1217 = HEAP32[$1216>>2]|0; + $1218 = $366; + HEAP32[$1218>>2] = $1217; + $1219 = ((($413)) + 4|0); + $1220 = ((($408)) + 4|0); + $371 = $1219; + $372 = $1220; + $1221 = $371; + $370 = $1221; + $1222 = $370; + $1223 = HEAP32[$1222>>2]|0; + HEAP32[$373>>2] = $1223; + $1224 = $372; + $368 = $1224; + $1225 = $368; + $1226 = HEAP32[$1225>>2]|0; + $1227 = $371; + HEAP32[$1227>>2] = $1226; + $369 = $373; + $1228 = $369; + $1229 = HEAP32[$1228>>2]|0; + $1230 = $372; + HEAP32[$1230>>2] = $1229; + $1231 = ((($413)) + 8|0); + $1232 = ((($408)) + 8|0); + $377 = $1231; + $378 = $1232; + $1233 = $377; + $376 = $1233; + $1234 = $376; + $1235 = HEAP32[$1234>>2]|0; + HEAP32[$379>>2] = $1235; + $1236 = $378; + $374 = $1236; + $1237 = $374; + $1238 = HEAP32[$1237>>2]|0; + $1239 = $377; + HEAP32[$1239>>2] = $1238; + $375 = $379; + $1240 = $375; + $1241 = HEAP32[$1240>>2]|0; + $1242 = $378; + HEAP32[$1242>>2] = $1241; + $382 = $413; + $1243 = $382; + $1244 = ((($1243)) + 12|0); + $381 = $1244; + $1245 = $381; + $380 = $1245; + $1246 = $380; + $385 = $408; + $1247 = $385; + $1248 = ((($1247)) + 12|0); + $384 = $1248; + $1249 = $384; + $383 = $1249; + $1250 = $383; + $389 = $1246; + $390 = $1250; + $1251 = $389; + $388 = $1251; + $1252 = $388; + $1253 = HEAP32[$1252>>2]|0; + HEAP32[$391>>2] = $1253; + $1254 = $390; + $386 = $1254; + $1255 = $386; + $1256 = HEAP32[$1255>>2]|0; + $1257 = $389; + HEAP32[$1257>>2] = $1256; + $387 = $391; + $1258 = $387; + $1259 = HEAP32[$1258>>2]|0; + $1260 = $390; + HEAP32[$1260>>2] = $1259; + $1261 = $407; + $1262 = ((($413)) + 16|0); + $1263 = HEAP32[$1262>>2]|0; + $1264 = (($1263) - ($1261))|0; + HEAP32[$1262>>2] = $1264; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($408); + STACKTOP = sp;return; + } + while(1) { + $674 = HEAP32[$401>>2]|0; + $675 = ($674>>>0)>(0); + if (!($675)) { + break; + } + $152 = $413; + $676 = $152; + $151 = $676; + $677 = $151; + $678 = ((($677)) + 12|0); + $150 = $678; + $679 = $150; + $149 = $679; + $680 = $149; + $681 = HEAP32[$680>>2]|0; + $682 = ((($676)) + 8|0); + $683 = HEAP32[$682>>2]|0; + $684 = $681; + $685 = $683; + $686 = (($684) - ($685))|0; + $687 = (($686|0) / 4)&-1; + $688 = ($687|0)==(0); + if ($688) { + break; + } + $689 = $400; + $147 = $689; + $148 = 93; + $690 = $147; + $691 = $148; + $144 = $690; + $145 = $691; + $146 = 0; + $692 = $144; + $693 = $145; + $143 = $692; + $694 = ($693>>>0)>(97612893); + if ($694) { + label = 16; + break; + } + $699 = $145; + $700 = ($699*44)|0; + $142 = $700; + $701 = $142; + $702 = (__Znwj($701)|0); + HEAP32[$404>>2] = $702; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($413,$404); + $703 = HEAP32[$401>>2]|0; + $704 = (($703) + -1)|0; + HEAP32[$401>>2] = $704; + } + if ((label|0) == 16) { + $141 = 4287; + $695 = (___cxa_allocate_exception(8)|0); + $696 = $141; + $139 = $695; + $140 = $696; + $697 = $139; + $698 = $140; + __ZNSt11logic_errorC2EPKc($697,$698); + HEAP32[$697>>2] = (3660); + ___cxa_throw(($695|0),(1384|0),(220|0)); + // unreachable; + } + while(1) { + $705 = HEAP32[$401>>2]|0; + $706 = ($705>>>0)>(0); + if (!($706)) { + break; + } + $707 = $400; + $137 = $707; + $138 = 93; + $708 = $137; + $709 = $138; + $134 = $708; + $135 = $709; + $136 = 0; + $710 = $134; + $711 = $135; + $133 = $710; + $712 = ($711>>>0)>(97612893); + if ($712) { + label = 21; + break; + } + $717 = $135; + $718 = ($717*44)|0; + $132 = $718; + $719 = $132; + $720 = (__Znwj($719)|0); + HEAP32[$405>>2] = $720; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($413,$405); + $721 = HEAP32[$401>>2]|0; + $722 = (($721) + -1)|0; + HEAP32[$401>>2] = $722; + $723 = HEAP32[$402>>2]|0; + $724 = (($723) + 1)|0; + HEAP32[$402>>2] = $724; + $128 = $413; + $725 = $128; + $726 = ((($725)) + 8|0); + $727 = HEAP32[$726>>2]|0; + $728 = ((($725)) + 4|0); + $729 = HEAP32[$728>>2]|0; + $730 = $727; + $731 = $729; + $732 = (($730) - ($731))|0; + $733 = (($732|0) / 4)&-1; + $734 = ($733|0)==(1); + $735 = $734&1; + $736 = (93 - ($735))|0; + $737 = ((($413)) + 16|0); + $738 = HEAP32[$737>>2]|0; + $739 = (($738) + ($736))|0; + HEAP32[$737>>2] = $739; + } + if ((label|0) == 21) { + $131 = 4287; + $713 = (___cxa_allocate_exception(8)|0); + $714 = $131; + $129 = $713; + $130 = $714; + $715 = $129; + $716 = $130; + __ZNSt11logic_errorC2EPKc($715,$716); + HEAP32[$715>>2] = (3660); + ___cxa_throw(($713|0),(1384|0),(220|0)); + // unreachable; + } + $740 = HEAP32[$402>>2]|0; + $741 = ($740*93)|0; + $742 = ((($413)) + 16|0); + $743 = HEAP32[$742>>2]|0; + $744 = (($743) - ($741))|0; + HEAP32[$742>>2] = $744; + while(1) { + $745 = HEAP32[$402>>2]|0; + $746 = ($745>>>0)>(0); + if (!($746)) { + break; + } + $127 = $413; + $747 = $127; + $748 = ((($747)) + 4|0); + $749 = HEAP32[$748>>2]|0; + $750 = HEAP32[$749>>2]|0; + HEAP32[$406>>2] = $750; + $126 = $413; + $751 = $126; + $752 = ((($751)) + 4|0); + $753 = HEAP32[$752>>2]|0; + $754 = ((($753)) + 4|0); + $123 = $751; + $124 = $754; + $755 = $123; + $756 = $124; + ;HEAP8[$122>>0]=HEAP8[$125>>0]|0; + $120 = $755; + $121 = $756; + $757 = $120; + $758 = $121; + $759 = ((($757)) + 4|0); + HEAP32[$759>>2] = $758; + $111 = $413; + $112 = $406; + $760 = $111; + $761 = ((($760)) + 8|0); + $762 = HEAP32[$761>>2]|0; + $110 = $760; + $763 = $110; + $764 = ((($763)) + 12|0); + $109 = $764; + $765 = $109; + $108 = $765; + $766 = $108; + $767 = HEAP32[$766>>2]|0; + $768 = ($762|0)==($767|0); + do { + if ($768) { + $769 = ((($760)) + 4|0); + $770 = HEAP32[$769>>2]|0; + $771 = HEAP32[$760>>2]|0; + $772 = ($770>>>0)>($771>>>0); + if (!($772)) { + $79 = $760; + $819 = $79; + $820 = ((($819)) + 12|0); + $78 = $820; + $821 = $78; + $77 = $821; + $822 = $77; + $823 = HEAP32[$822>>2]|0; + $824 = HEAP32[$760>>2]|0; + $825 = $823; + $826 = $824; + $827 = (($825) - ($826))|0; + $828 = (($827|0) / 4)&-1; + $829 = $828<<1; + HEAP32[$115>>2] = $829; + HEAP32[$116>>2] = 1; + $44 = $115; + $45 = $116; + $830 = $44; + $831 = $45; + ;HEAP8[$43>>0]=HEAP8[$46>>0]|0; + $41 = $830; + $42 = $831; + $832 = $41; + $833 = $42; + $38 = $43; + $39 = $832; + $40 = $833; + $834 = $39; + $835 = HEAP32[$834>>2]|0; + $836 = $40; + $837 = HEAP32[$836>>2]|0; + $838 = ($835>>>0)<($837>>>0); + $839 = $42; + $840 = $41; + $841 = $838 ? $839 : $840; + $842 = HEAP32[$841>>2]|0; + $114 = $842; + $843 = $114; + $844 = $114; + $845 = (($844>>>0) / 4)&-1; + $33 = $760; + $846 = $33; + $847 = ((($846)) + 12|0); + $32 = $847; + $848 = $32; + $31 = $848; + $849 = $31; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($117,$843,$845,$849); + $850 = ((($760)) + 4|0); + $851 = HEAP32[$850>>2]|0; + $34 = $118; + $35 = $851; + $852 = $34; + $853 = $35; + HEAP32[$852>>2] = $853; + $854 = ((($760)) + 8|0); + $855 = HEAP32[$854>>2]|0; + $36 = $119; + $37 = $855; + $856 = $36; + $857 = $37; + HEAP32[$856>>2] = $857; + ;HEAP32[$$byval_copy2>>2]=HEAP32[$118>>2]|0; + ;HEAP32[$$byval_copy3>>2]=HEAP32[$119>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($117,$$byval_copy2,$$byval_copy3); + $50 = $760; + $51 = $117; + $858 = $50; + $49 = $858; + $859 = $49; + $860 = HEAP32[$859>>2]|0; + HEAP32[$52>>2] = $860; + $861 = $51; + $47 = $861; + $862 = $47; + $863 = HEAP32[$862>>2]|0; + $864 = $50; + HEAP32[$864>>2] = $863; + $48 = $52; + $865 = $48; + $866 = HEAP32[$865>>2]|0; + $867 = $51; + HEAP32[$867>>2] = $866; + $868 = ((($760)) + 4|0); + $869 = ((($117)) + 4|0); + $56 = $868; + $57 = $869; + $870 = $56; + $55 = $870; + $871 = $55; + $872 = HEAP32[$871>>2]|0; + HEAP32[$58>>2] = $872; + $873 = $57; + $53 = $873; + $874 = $53; + $875 = HEAP32[$874>>2]|0; + $876 = $56; + HEAP32[$876>>2] = $875; + $54 = $58; + $877 = $54; + $878 = HEAP32[$877>>2]|0; + $879 = $57; + HEAP32[$879>>2] = $878; + $880 = ((($760)) + 8|0); + $881 = ((($117)) + 8|0); + $62 = $880; + $63 = $881; + $882 = $62; + $61 = $882; + $883 = $61; + $884 = HEAP32[$883>>2]|0; + HEAP32[$64>>2] = $884; + $885 = $63; + $59 = $885; + $886 = $59; + $887 = HEAP32[$886>>2]|0; + $888 = $62; + HEAP32[$888>>2] = $887; + $60 = $64; + $889 = $60; + $890 = HEAP32[$889>>2]|0; + $891 = $63; + HEAP32[$891>>2] = $890; + $67 = $760; + $892 = $67; + $893 = ((($892)) + 12|0); + $66 = $893; + $894 = $66; + $65 = $894; + $895 = $65; + $70 = $117; + $896 = $70; + $897 = ((($896)) + 12|0); + $69 = $897; + $898 = $69; + $68 = $898; + $899 = $68; + $74 = $895; + $75 = $899; + $900 = $74; + $73 = $900; + $901 = $73; + $902 = HEAP32[$901>>2]|0; + HEAP32[$76>>2] = $902; + $903 = $75; + $71 = $903; + $904 = $71; + $905 = HEAP32[$904>>2]|0; + $906 = $74; + HEAP32[$906>>2] = $905; + $72 = $76; + $907 = $72; + $908 = HEAP32[$907>>2]|0; + $909 = $75; + HEAP32[$909>>2] = $908; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($117); + break; + } + $773 = ((($760)) + 4|0); + $774 = HEAP32[$773>>2]|0; + $775 = HEAP32[$760>>2]|0; + $776 = $774; + $777 = $775; + $778 = (($776) - ($777))|0; + $779 = (($778|0) / 4)&-1; + $113 = $779; + $780 = $113; + $781 = (($780) + 1)|0; + $782 = (($781|0) / 2)&-1; + $113 = $782; + $783 = ((($760)) + 4|0); + $784 = HEAP32[$783>>2]|0; + $785 = ((($760)) + 8|0); + $786 = HEAP32[$785>>2]|0; + $787 = ((($760)) + 4|0); + $788 = HEAP32[$787>>2]|0; + $789 = $113; + $790 = (0 - ($789))|0; + $791 = (($788) + ($790<<2)|0); + $87 = $784; + $88 = $786; + $89 = $791; + $792 = $87; + $86 = $792; + $793 = $86; + $794 = $88; + $80 = $794; + $795 = $80; + $796 = $89; + $81 = $796; + $797 = $81; + $82 = $793; + $83 = $795; + $84 = $797; + $798 = $83; + $799 = $82; + $800 = $798; + $801 = $799; + $802 = (($800) - ($801))|0; + $803 = (($802|0) / 4)&-1; + $85 = $803; + $804 = $85; + $805 = ($804>>>0)>(0); + if ($805) { + $806 = $84; + $807 = $82; + $808 = $85; + $809 = $808<<2; + _memmove(($806|0),($807|0),($809|0))|0; + } + $810 = $84; + $811 = $85; + $812 = (($810) + ($811<<2)|0); + $813 = ((($760)) + 8|0); + HEAP32[$813>>2] = $812; + $814 = $113; + $815 = ((($760)) + 4|0); + $816 = HEAP32[$815>>2]|0; + $817 = (0 - ($814))|0; + $818 = (($816) + ($817<<2)|0); + HEAP32[$815>>2] = $818; + } + } while(0); + $92 = $760; + $910 = $92; + $911 = ((($910)) + 12|0); + $91 = $911; + $912 = $91; + $90 = $912; + $913 = $90; + $914 = ((($760)) + 8|0); + $915 = HEAP32[$914>>2]|0; + $93 = $915; + $916 = $93; + $917 = $112; + $104 = $913; + $105 = $916; + $106 = $917; + $918 = $104; + $919 = $105; + $920 = $106; + $103 = $920; + $921 = $103; + ;HEAP8[$102>>0]=HEAP8[$107>>0]|0; + $99 = $918; + $100 = $919; + $101 = $921; + $922 = $99; + $923 = $100; + $924 = $101; + $98 = $924; + $925 = $98; + $95 = $922; + $96 = $923; + $97 = $925; + $926 = $96; + $927 = $97; + $94 = $927; + $928 = $94; + $929 = HEAP32[$928>>2]|0; + HEAP32[$926>>2] = $929; + $930 = ((($760)) + 8|0); + $931 = HEAP32[$930>>2]|0; + $932 = ((($931)) + 4|0); + HEAP32[$930>>2] = $932; + $933 = HEAP32[$402>>2]|0; + $934 = (($933) + -1)|0; + HEAP32[$402>>2] = $934; + } + STACKTOP = sp;return; +} +function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $10 = $1; + $13 = $10; + $9 = $13; + $14 = $9; + $15 = ((($14)) + 20|0); + $8 = $15; + $16 = $8; + $7 = $16; + $17 = $7; + $18 = HEAP32[$17>>2]|0; + $19 = ((($13)) + 16|0); + $20 = HEAP32[$19>>2]|0; + $21 = (($18) + ($20))|0; + $11 = $21; + $6 = $13; + $22 = $6; + $23 = ((($22)) + 4|0); + $24 = HEAP32[$23>>2]|0; + $25 = $11; + $26 = (($25>>>0) / 93)&-1; + $27 = (($24) + ($26<<2)|0); + $12 = $27; + $28 = $12; + $2 = $13; + $29 = $2; + $30 = ((($29)) + 8|0); + $31 = HEAP32[$30>>2]|0; + $32 = ((($29)) + 4|0); + $33 = HEAP32[$32>>2]|0; + $34 = ($31|0)==($33|0); + if ($34) { + $40 = 0; + $3 = $0; + $4 = $28; + $5 = $40; + $41 = $3; + $42 = $4; + HEAP32[$41>>2] = $42; + $43 = ((($41)) + 4|0); + $44 = $5; + HEAP32[$43>>2] = $44; + STACKTOP = sp;return; + } + $35 = $12; + $36 = HEAP32[$35>>2]|0; + $37 = $11; + $38 = (($37>>>0) % 93)&-1; + $39 = (($36) + (($38*44)|0)|0); + $40 = $39; + $3 = $0; + $4 = $28; + $5 = $40; + $41 = $3; + $42 = $4; + HEAP32[$41>>2] = $42; + $43 = ((($41)) + 4|0); + $44 = $5; + HEAP32[$43>>2] = $44; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0); + $$byval_copy1 = sp + 376|0; + $$byval_copy = sp + 372|0; + $14 = sp + 8|0; + $17 = sp + 381|0; + $23 = sp + 292|0; + $29 = sp + 268|0; + $35 = sp + 244|0; + $47 = sp + 196|0; + $74 = sp; + $79 = sp + 380|0; + $87 = sp + 44|0; + $88 = sp + 40|0; + $89 = sp + 20|0; + $90 = sp + 16|0; + $91 = sp + 12|0; + $83 = $0; + $84 = $1; + $92 = $83; + $93 = ((($92)) + 8|0); + $94 = HEAP32[$93>>2]|0; + $82 = $92; + $95 = $82; + $96 = ((($95)) + 12|0); + $81 = $96; + $97 = $81; + $80 = $97; + $98 = $80; + $99 = HEAP32[$98>>2]|0; + $100 = ($94|0)==($99|0); + do { + if ($100) { + $101 = ((($92)) + 4|0); + $102 = HEAP32[$101>>2]|0; + $103 = HEAP32[$92>>2]|0; + $104 = ($102>>>0)>($103>>>0); + if (!($104)) { + $50 = $92; + $151 = $50; + $152 = ((($151)) + 12|0); + $49 = $152; + $153 = $49; + $48 = $153; + $154 = $48; + $155 = HEAP32[$154>>2]|0; + $156 = HEAP32[$92>>2]|0; + $157 = $155; + $158 = $156; + $159 = (($157) - ($158))|0; + $160 = (($159|0) / 4)&-1; + $161 = $160<<1; + HEAP32[$87>>2] = $161; + HEAP32[$88>>2] = 1; + $15 = $87; + $16 = $88; + $162 = $15; + $163 = $16; + ;HEAP8[$14>>0]=HEAP8[$17>>0]|0; + $12 = $162; + $13 = $163; + $164 = $12; + $165 = $13; + $9 = $14; + $10 = $164; + $11 = $165; + $166 = $10; + $167 = HEAP32[$166>>2]|0; + $168 = $11; + $169 = HEAP32[$168>>2]|0; + $170 = ($167>>>0)<($169>>>0); + $171 = $13; + $172 = $12; + $173 = $170 ? $171 : $172; + $174 = HEAP32[$173>>2]|0; + $86 = $174; + $175 = $86; + $176 = $86; + $177 = (($176>>>0) / 4)&-1; + $4 = $92; + $178 = $4; + $179 = ((($178)) + 12|0); + $3 = $179; + $180 = $3; + $2 = $180; + $181 = $2; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$181); + $182 = ((($92)) + 4|0); + $183 = HEAP32[$182>>2]|0; + $5 = $90; + $6 = $183; + $184 = $5; + $185 = $6; + HEAP32[$184>>2] = $185; + $186 = ((($92)) + 8|0); + $187 = HEAP32[$186>>2]|0; + $7 = $91; + $8 = $187; + $188 = $7; + $189 = $8; + HEAP32[$188>>2] = $189; + ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1); + $21 = $92; + $22 = $89; + $190 = $21; + $20 = $190; + $191 = $20; + $192 = HEAP32[$191>>2]|0; + HEAP32[$23>>2] = $192; + $193 = $22; + $18 = $193; + $194 = $18; + $195 = HEAP32[$194>>2]|0; + $196 = $21; + HEAP32[$196>>2] = $195; + $19 = $23; + $197 = $19; + $198 = HEAP32[$197>>2]|0; + $199 = $22; + HEAP32[$199>>2] = $198; + $200 = ((($92)) + 4|0); + $201 = ((($89)) + 4|0); + $27 = $200; + $28 = $201; + $202 = $27; + $26 = $202; + $203 = $26; + $204 = HEAP32[$203>>2]|0; + HEAP32[$29>>2] = $204; + $205 = $28; + $24 = $205; + $206 = $24; + $207 = HEAP32[$206>>2]|0; + $208 = $27; + HEAP32[$208>>2] = $207; + $25 = $29; + $209 = $25; + $210 = HEAP32[$209>>2]|0; + $211 = $28; + HEAP32[$211>>2] = $210; + $212 = ((($92)) + 8|0); + $213 = ((($89)) + 8|0); + $33 = $212; + $34 = $213; + $214 = $33; + $32 = $214; + $215 = $32; + $216 = HEAP32[$215>>2]|0; + HEAP32[$35>>2] = $216; + $217 = $34; + $30 = $217; + $218 = $30; + $219 = HEAP32[$218>>2]|0; + $220 = $33; + HEAP32[$220>>2] = $219; + $31 = $35; + $221 = $31; + $222 = HEAP32[$221>>2]|0; + $223 = $34; + HEAP32[$223>>2] = $222; + $38 = $92; + $224 = $38; + $225 = ((($224)) + 12|0); + $37 = $225; + $226 = $37; + $36 = $226; + $227 = $36; + $41 = $89; + $228 = $41; + $229 = ((($228)) + 12|0); + $40 = $229; + $230 = $40; + $39 = $230; + $231 = $39; + $45 = $227; + $46 = $231; + $232 = $45; + $44 = $232; + $233 = $44; + $234 = HEAP32[$233>>2]|0; + HEAP32[$47>>2] = $234; + $235 = $46; + $42 = $235; + $236 = $42; + $237 = HEAP32[$236>>2]|0; + $238 = $45; + HEAP32[$238>>2] = $237; + $43 = $47; + $239 = $43; + $240 = HEAP32[$239>>2]|0; + $241 = $46; + HEAP32[$241>>2] = $240; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89); + break; + } + $105 = ((($92)) + 4|0); + $106 = HEAP32[$105>>2]|0; + $107 = HEAP32[$92>>2]|0; + $108 = $106; + $109 = $107; + $110 = (($108) - ($109))|0; + $111 = (($110|0) / 4)&-1; + $85 = $111; + $112 = $85; + $113 = (($112) + 1)|0; + $114 = (($113|0) / 2)&-1; + $85 = $114; + $115 = ((($92)) + 4|0); + $116 = HEAP32[$115>>2]|0; + $117 = ((($92)) + 8|0); + $118 = HEAP32[$117>>2]|0; + $119 = ((($92)) + 4|0); + $120 = HEAP32[$119>>2]|0; + $121 = $85; + $122 = (0 - ($121))|0; + $123 = (($120) + ($122<<2)|0); + $58 = $116; + $59 = $118; + $60 = $123; + $124 = $58; + $57 = $124; + $125 = $57; + $126 = $59; + $51 = $126; + $127 = $51; + $128 = $60; + $52 = $128; + $129 = $52; + $53 = $125; + $54 = $127; + $55 = $129; + $130 = $54; + $131 = $53; + $132 = $130; + $133 = $131; + $134 = (($132) - ($133))|0; + $135 = (($134|0) / 4)&-1; + $56 = $135; + $136 = $56; + $137 = ($136>>>0)>(0); + if ($137) { + $138 = $55; + $139 = $53; + $140 = $56; + $141 = $140<<2; + _memmove(($138|0),($139|0),($141|0))|0; + } + $142 = $55; + $143 = $56; + $144 = (($142) + ($143<<2)|0); + $145 = ((($92)) + 8|0); + HEAP32[$145>>2] = $144; + $146 = $85; + $147 = ((($92)) + 4|0); + $148 = HEAP32[$147>>2]|0; + $149 = (0 - ($146))|0; + $150 = (($148) + ($149<<2)|0); + HEAP32[$147>>2] = $150; + } + } while(0); + $63 = $92; + $242 = $63; + $243 = ((($242)) + 12|0); + $62 = $243; + $244 = $62; + $61 = $244; + $245 = $61; + $246 = ((($92)) + 8|0); + $247 = HEAP32[$246>>2]|0; + $64 = $247; + $248 = $64; + $249 = $84; + $65 = $249; + $250 = $65; + $76 = $245; + $77 = $248; + $78 = $250; + $251 = $76; + $252 = $77; + $253 = $78; + $75 = $253; + $254 = $75; + ;HEAP8[$74>>0]=HEAP8[$79>>0]|0; + $71 = $251; + $72 = $252; + $73 = $254; + $255 = $71; + $256 = $72; + $257 = $73; + $70 = $257; + $258 = $70; + $67 = $255; + $68 = $256; + $69 = $258; + $259 = $68; + $260 = $69; + $66 = $260; + $261 = $66; + $262 = HEAP32[$261>>2]|0; + HEAP32[$259>>2] = $262; + $263 = ((($92)) + 8|0); + $264 = HEAP32[$263>>2]|0; + $265 = ((($264)) + 4|0); + HEAP32[$263>>2] = $265; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0); + $$byval_copy1 = sp + 388|0; + $$byval_copy = sp + 384|0; + $10 = sp + 8|0; + $13 = sp + 393|0; + $26 = sp + 292|0; + $32 = sp + 268|0; + $38 = sp + 244|0; + $50 = sp + 196|0; + $77 = sp; + $82 = sp + 392|0; + $90 = sp + 44|0; + $91 = sp + 40|0; + $92 = sp + 20|0; + $93 = sp + 16|0; + $94 = sp + 12|0; + $86 = $0; + $87 = $1; + $95 = $86; + $96 = ((($95)) + 4|0); + $97 = HEAP32[$96>>2]|0; + $98 = HEAP32[$95>>2]|0; + $99 = ($97|0)==($98|0); + do { + if ($99) { + $100 = ((($95)) + 8|0); + $101 = HEAP32[$100>>2]|0; + $85 = $95; + $102 = $85; + $103 = ((($102)) + 12|0); + $84 = $103; + $104 = $84; + $83 = $104; + $105 = $83; + $106 = HEAP32[$105>>2]|0; + $107 = ($101>>>0)<($106>>>0); + if (!($107)) { + $20 = $95; + $158 = $20; + $159 = ((($158)) + 12|0); + $19 = $159; + $160 = $19; + $18 = $160; + $161 = $18; + $162 = HEAP32[$161>>2]|0; + $163 = HEAP32[$95>>2]|0; + $164 = $162; + $165 = $163; + $166 = (($164) - ($165))|0; + $167 = (($166|0) / 4)&-1; + $168 = $167<<1; + HEAP32[$90>>2] = $168; + HEAP32[$91>>2] = 1; + $11 = $90; + $12 = $91; + $169 = $11; + $170 = $12; + ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; + $8 = $169; + $9 = $170; + $171 = $8; + $172 = $9; + $5 = $10; + $6 = $171; + $7 = $172; + $173 = $6; + $174 = HEAP32[$173>>2]|0; + $175 = $7; + $176 = HEAP32[$175>>2]|0; + $177 = ($174>>>0)<($176>>>0); + $178 = $9; + $179 = $8; + $180 = $177 ? $178 : $179; + $181 = HEAP32[$180>>2]|0; + $89 = $181; + $182 = $89; + $183 = $89; + $184 = (($183) + 3)|0; + $185 = (($184>>>0) / 4)&-1; + $4 = $95; + $186 = $4; + $187 = ((($186)) + 12|0); + $3 = $187; + $188 = $3; + $2 = $188; + $189 = $2; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($92,$182,$185,$189); + $190 = ((($95)) + 4|0); + $191 = HEAP32[$190>>2]|0; + $14 = $93; + $15 = $191; + $192 = $14; + $193 = $15; + HEAP32[$192>>2] = $193; + $194 = ((($95)) + 8|0); + $195 = HEAP32[$194>>2]|0; + $16 = $94; + $17 = $195; + $196 = $16; + $197 = $17; + HEAP32[$196>>2] = $197; + ;HEAP32[$$byval_copy>>2]=HEAP32[$93>>2]|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$94>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($92,$$byval_copy,$$byval_copy1); + $24 = $95; + $25 = $92; + $198 = $24; + $23 = $198; + $199 = $23; + $200 = HEAP32[$199>>2]|0; + HEAP32[$26>>2] = $200; + $201 = $25; + $21 = $201; + $202 = $21; + $203 = HEAP32[$202>>2]|0; + $204 = $24; + HEAP32[$204>>2] = $203; + $22 = $26; + $205 = $22; + $206 = HEAP32[$205>>2]|0; + $207 = $25; + HEAP32[$207>>2] = $206; + $208 = ((($95)) + 4|0); + $209 = ((($92)) + 4|0); + $30 = $208; + $31 = $209; + $210 = $30; + $29 = $210; + $211 = $29; + $212 = HEAP32[$211>>2]|0; + HEAP32[$32>>2] = $212; + $213 = $31; + $27 = $213; + $214 = $27; + $215 = HEAP32[$214>>2]|0; + $216 = $30; + HEAP32[$216>>2] = $215; + $28 = $32; + $217 = $28; + $218 = HEAP32[$217>>2]|0; + $219 = $31; + HEAP32[$219>>2] = $218; + $220 = ((($95)) + 8|0); + $221 = ((($92)) + 8|0); + $36 = $220; + $37 = $221; + $222 = $36; + $35 = $222; + $223 = $35; + $224 = HEAP32[$223>>2]|0; + HEAP32[$38>>2] = $224; + $225 = $37; + $33 = $225; + $226 = $33; + $227 = HEAP32[$226>>2]|0; + $228 = $36; + HEAP32[$228>>2] = $227; + $34 = $38; + $229 = $34; + $230 = HEAP32[$229>>2]|0; + $231 = $37; + HEAP32[$231>>2] = $230; + $41 = $95; + $232 = $41; + $233 = ((($232)) + 12|0); + $40 = $233; + $234 = $40; + $39 = $234; + $235 = $39; + $44 = $92; + $236 = $44; + $237 = ((($236)) + 12|0); + $43 = $237; + $238 = $43; + $42 = $238; + $239 = $42; + $48 = $235; + $49 = $239; + $240 = $48; + $47 = $240; + $241 = $47; + $242 = HEAP32[$241>>2]|0; + HEAP32[$50>>2] = $242; + $243 = $49; + $45 = $243; + $244 = $45; + $245 = HEAP32[$244>>2]|0; + $246 = $48; + HEAP32[$246>>2] = $245; + $46 = $50; + $247 = $46; + $248 = HEAP32[$247>>2]|0; + $249 = $49; + HEAP32[$249>>2] = $248; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($92); + break; + } + $63 = $95; + $108 = $63; + $109 = ((($108)) + 12|0); + $62 = $109; + $110 = $62; + $61 = $110; + $111 = $61; + $112 = HEAP32[$111>>2]|0; + $113 = ((($95)) + 8|0); + $114 = HEAP32[$113>>2]|0; + $115 = $112; + $116 = $114; + $117 = (($115) - ($116))|0; + $118 = (($117|0) / 4)&-1; + $88 = $118; + $119 = $88; + $120 = (($119) + 1)|0; + $121 = (($120|0) / 2)&-1; + $88 = $121; + $122 = ((($95)) + 4|0); + $123 = HEAP32[$122>>2]|0; + $124 = ((($95)) + 8|0); + $125 = HEAP32[$124>>2]|0; + $126 = ((($95)) + 8|0); + $127 = HEAP32[$126>>2]|0; + $128 = $88; + $129 = (($127) + ($128<<2)|0); + $58 = $123; + $59 = $125; + $60 = $129; + $130 = $58; + $57 = $130; + $131 = $57; + $132 = $59; + $51 = $132; + $133 = $51; + $134 = $60; + $52 = $134; + $135 = $52; + $53 = $131; + $54 = $133; + $55 = $135; + $136 = $54; + $137 = $53; + $138 = $136; + $139 = $137; + $140 = (($138) - ($139))|0; + $141 = (($140|0) / 4)&-1; + $56 = $141; + $142 = $56; + $143 = ($142>>>0)>(0); + if ($143) { + $144 = $56; + $145 = $55; + $146 = (0 - ($144))|0; + $147 = (($145) + ($146<<2)|0); + $55 = $147; + $148 = $55; + $149 = $53; + $150 = $56; + $151 = $150<<2; + _memmove(($148|0),($149|0),($151|0))|0; + } + $152 = $55; + $153 = ((($95)) + 4|0); + HEAP32[$153>>2] = $152; + $154 = $88; + $155 = ((($95)) + 8|0); + $156 = HEAP32[$155>>2]|0; + $157 = (($156) + ($154<<2)|0); + HEAP32[$155>>2] = $157; + } + } while(0); + $66 = $95; + $250 = $66; + $251 = ((($250)) + 12|0); + $65 = $251; + $252 = $65; + $64 = $252; + $253 = $64; + $254 = ((($95)) + 4|0); + $255 = HEAP32[$254>>2]|0; + $256 = ((($255)) + -4|0); + $67 = $256; + $257 = $67; + $258 = $87; + $68 = $258; + $259 = $68; + $79 = $253; + $80 = $257; + $81 = $259; + $260 = $79; + $261 = $80; + $262 = $81; + $78 = $262; + $263 = $78; + ;HEAP8[$77>>0]=HEAP8[$82>>0]|0; + $74 = $260; + $75 = $261; + $76 = $263; + $264 = $74; + $265 = $75; + $266 = $76; + $73 = $266; + $267 = $73; + $70 = $264; + $71 = $265; + $72 = $267; + $268 = $71; + $269 = $72; + $69 = $269; + $270 = $69; + $271 = HEAP32[$270>>2]|0; + HEAP32[$268>>2] = $271; + $272 = ((($95)) + 4|0); + $273 = HEAP32[$272>>2]|0; + $274 = ((($273)) + -4|0); + HEAP32[$272>>2] = $274; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); + $35 = sp; + $31 = $0; + $32 = $1; + $33 = $2; + $34 = $3; + $36 = $31; + $37 = ((($36)) + 12|0); + HEAP32[$35>>2] = 0; + $38 = $34; + $28 = $37; + $29 = $35; + $30 = $38; + $39 = $28; + $40 = $29; + $27 = $40; + $41 = $27; + $21 = $39; + $22 = $41; + $42 = $21; + $43 = $22; + $20 = $43; + HEAP32[$42>>2] = 0; + $44 = ((($39)) + 4|0); + $45 = $30; + $23 = $45; + $46 = $23; + $25 = $44; + $26 = $46; + $47 = $25; + $48 = $26; + $24 = $48; + $49 = $24; + HEAP32[$47>>2] = $49; + $50 = $32; + $51 = ($50|0)!=(0); + do { + if ($51) { + $6 = $36; + $52 = $6; + $53 = ((($52)) + 12|0); + $5 = $53; + $54 = $5; + $55 = ((($54)) + 4|0); + $4 = $55; + $56 = $4; + $57 = HEAP32[$56>>2]|0; + $58 = $32; + $15 = $57; + $16 = $58; + $59 = $15; + $60 = $16; + $12 = $59; + $13 = $60; + $14 = 0; + $61 = $12; + $62 = $13; + $11 = $61; + $63 = ($62>>>0)>(1073741823); + if ($63) { + $9 = 4287; + $64 = (___cxa_allocate_exception(8)|0); + $65 = $9; + $7 = $64; + $8 = $65; + $66 = $7; + $67 = $8; + __ZNSt11logic_errorC2EPKc($66,$67); + HEAP32[$66>>2] = (3660); + ___cxa_throw(($64|0),(1384|0),(220|0)); + // unreachable; + } else { + $68 = $13; + $69 = $68<<2; + $10 = $69; + $70 = $10; + $71 = (__Znwj($70)|0); + $72 = $71; + break; + } + } else { + $72 = 0; + } + } while(0); + HEAP32[$36>>2] = $72; + $73 = HEAP32[$36>>2]|0; + $74 = $33; + $75 = (($73) + ($74<<2)|0); + $76 = ((($36)) + 8|0); + HEAP32[$76>>2] = $75; + $77 = ((($36)) + 4|0); + HEAP32[$77>>2] = $75; + $78 = HEAP32[$36>>2]|0; + $79 = $32; + $80 = (($78) + ($79<<2)|0); + $19 = $36; + $81 = $19; + $82 = ((($81)) + 12|0); + $18 = $82; + $83 = $18; + $17 = $83; + $84 = $17; + HEAP32[$84>>2] = $80; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0); + $$byval_copy1 = sp + 376|0; + $$byval_copy = sp + 372|0; + $14 = sp + 8|0; + $17 = sp + 381|0; + $23 = sp + 292|0; + $29 = sp + 268|0; + $35 = sp + 244|0; + $47 = sp + 196|0; + $74 = sp; + $79 = sp + 380|0; + $87 = sp + 44|0; + $88 = sp + 40|0; + $89 = sp + 20|0; + $90 = sp + 16|0; + $91 = sp + 12|0; + $83 = $0; + $84 = $1; + $92 = $83; + $93 = ((($92)) + 8|0); + $94 = HEAP32[$93>>2]|0; + $82 = $92; + $95 = $82; + $96 = ((($95)) + 12|0); + $81 = $96; + $97 = $81; + $80 = $97; + $98 = $80; + $99 = HEAP32[$98>>2]|0; + $100 = ($94|0)==($99|0); + do { + if ($100) { + $101 = ((($92)) + 4|0); + $102 = HEAP32[$101>>2]|0; + $103 = HEAP32[$92>>2]|0; + $104 = ($102>>>0)>($103>>>0); + if (!($104)) { + $50 = $92; + $151 = $50; + $152 = ((($151)) + 12|0); + $49 = $152; + $153 = $49; + $48 = $153; + $154 = $48; + $155 = HEAP32[$154>>2]|0; + $156 = HEAP32[$92>>2]|0; + $157 = $155; + $158 = $156; + $159 = (($157) - ($158))|0; + $160 = (($159|0) / 4)&-1; + $161 = $160<<1; + HEAP32[$87>>2] = $161; + HEAP32[$88>>2] = 1; + $15 = $87; + $16 = $88; + $162 = $15; + $163 = $16; + ;HEAP8[$14>>0]=HEAP8[$17>>0]|0; + $12 = $162; + $13 = $163; + $164 = $12; + $165 = $13; + $9 = $14; + $10 = $164; + $11 = $165; + $166 = $10; + $167 = HEAP32[$166>>2]|0; + $168 = $11; + $169 = HEAP32[$168>>2]|0; + $170 = ($167>>>0)<($169>>>0); + $171 = $13; + $172 = $12; + $173 = $170 ? $171 : $172; + $174 = HEAP32[$173>>2]|0; + $86 = $174; + $175 = $86; + $176 = $86; + $177 = (($176>>>0) / 4)&-1; + $4 = $92; + $178 = $4; + $179 = ((($178)) + 12|0); + $3 = $179; + $180 = $3; + $181 = ((($180)) + 4|0); + $2 = $181; + $182 = $2; + $183 = HEAP32[$182>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$183); + $184 = ((($92)) + 4|0); + $185 = HEAP32[$184>>2]|0; + $5 = $90; + $6 = $185; + $186 = $5; + $187 = $6; + HEAP32[$186>>2] = $187; + $188 = ((($92)) + 8|0); + $189 = HEAP32[$188>>2]|0; + $7 = $91; + $8 = $189; + $190 = $7; + $191 = $8; + HEAP32[$190>>2] = $191; + ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1); + $21 = $92; + $22 = $89; + $192 = $21; + $20 = $192; + $193 = $20; + $194 = HEAP32[$193>>2]|0; + HEAP32[$23>>2] = $194; + $195 = $22; + $18 = $195; + $196 = $18; + $197 = HEAP32[$196>>2]|0; + $198 = $21; + HEAP32[$198>>2] = $197; + $19 = $23; + $199 = $19; + $200 = HEAP32[$199>>2]|0; + $201 = $22; + HEAP32[$201>>2] = $200; + $202 = ((($92)) + 4|0); + $203 = ((($89)) + 4|0); + $27 = $202; + $28 = $203; + $204 = $27; + $26 = $204; + $205 = $26; + $206 = HEAP32[$205>>2]|0; + HEAP32[$29>>2] = $206; + $207 = $28; + $24 = $207; + $208 = $24; + $209 = HEAP32[$208>>2]|0; + $210 = $27; + HEAP32[$210>>2] = $209; + $25 = $29; + $211 = $25; + $212 = HEAP32[$211>>2]|0; + $213 = $28; + HEAP32[$213>>2] = $212; + $214 = ((($92)) + 8|0); + $215 = ((($89)) + 8|0); + $33 = $214; + $34 = $215; + $216 = $33; + $32 = $216; + $217 = $32; + $218 = HEAP32[$217>>2]|0; + HEAP32[$35>>2] = $218; + $219 = $34; + $30 = $219; + $220 = $30; + $221 = HEAP32[$220>>2]|0; + $222 = $33; + HEAP32[$222>>2] = $221; + $31 = $35; + $223 = $31; + $224 = HEAP32[$223>>2]|0; + $225 = $34; + HEAP32[$225>>2] = $224; + $38 = $92; + $226 = $38; + $227 = ((($226)) + 12|0); + $37 = $227; + $228 = $37; + $36 = $228; + $229 = $36; + $41 = $89; + $230 = $41; + $231 = ((($230)) + 12|0); + $40 = $231; + $232 = $40; + $39 = $232; + $233 = $39; + $45 = $229; + $46 = $233; + $234 = $45; + $44 = $234; + $235 = $44; + $236 = HEAP32[$235>>2]|0; + HEAP32[$47>>2] = $236; + $237 = $46; + $42 = $237; + $238 = $42; + $239 = HEAP32[$238>>2]|0; + $240 = $45; + HEAP32[$240>>2] = $239; + $43 = $47; + $241 = $43; + $242 = HEAP32[$241>>2]|0; + $243 = $46; + HEAP32[$243>>2] = $242; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89); + break; + } + $105 = ((($92)) + 4|0); + $106 = HEAP32[$105>>2]|0; + $107 = HEAP32[$92>>2]|0; + $108 = $106; + $109 = $107; + $110 = (($108) - ($109))|0; + $111 = (($110|0) / 4)&-1; + $85 = $111; + $112 = $85; + $113 = (($112) + 1)|0; + $114 = (($113|0) / 2)&-1; + $85 = $114; + $115 = ((($92)) + 4|0); + $116 = HEAP32[$115>>2]|0; + $117 = ((($92)) + 8|0); + $118 = HEAP32[$117>>2]|0; + $119 = ((($92)) + 4|0); + $120 = HEAP32[$119>>2]|0; + $121 = $85; + $122 = (0 - ($121))|0; + $123 = (($120) + ($122<<2)|0); + $58 = $116; + $59 = $118; + $60 = $123; + $124 = $58; + $57 = $124; + $125 = $57; + $126 = $59; + $51 = $126; + $127 = $51; + $128 = $60; + $52 = $128; + $129 = $52; + $53 = $125; + $54 = $127; + $55 = $129; + $130 = $54; + $131 = $53; + $132 = $130; + $133 = $131; + $134 = (($132) - ($133))|0; + $135 = (($134|0) / 4)&-1; + $56 = $135; + $136 = $56; + $137 = ($136>>>0)>(0); + if ($137) { + $138 = $55; + $139 = $53; + $140 = $56; + $141 = $140<<2; + _memmove(($138|0),($139|0),($141|0))|0; + } + $142 = $55; + $143 = $56; + $144 = (($142) + ($143<<2)|0); + $145 = ((($92)) + 8|0); + HEAP32[$145>>2] = $144; + $146 = $85; + $147 = ((($92)) + 4|0); + $148 = HEAP32[$147>>2]|0; + $149 = (0 - ($146))|0; + $150 = (($148) + ($149<<2)|0); + HEAP32[$147>>2] = $150; + } + } while(0); + $63 = $92; + $244 = $63; + $245 = ((($244)) + 12|0); + $62 = $245; + $246 = $62; + $247 = ((($246)) + 4|0); + $61 = $247; + $248 = $61; + $249 = HEAP32[$248>>2]|0; + $250 = ((($92)) + 8|0); + $251 = HEAP32[$250>>2]|0; + $64 = $251; + $252 = $64; + $253 = $84; + $65 = $253; + $254 = $65; + $76 = $249; + $77 = $252; + $78 = $254; + $255 = $76; + $256 = $77; + $257 = $78; + $75 = $257; + $258 = $75; + ;HEAP8[$74>>0]=HEAP8[$79>>0]|0; + $71 = $255; + $72 = $256; + $73 = $258; + $259 = $71; + $260 = $72; + $261 = $73; + $70 = $261; + $262 = $70; + $67 = $259; + $68 = $260; + $69 = $262; + $263 = $68; + $264 = $69; + $66 = $264; + $265 = $66; + $266 = HEAP32[$265>>2]|0; + HEAP32[$263>>2] = $266; + $267 = ((($92)) + 8|0); + $268 = HEAP32[$267>>2]|0; + $269 = ((($268)) + 4|0); + HEAP32[$267>>2] = $269; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0); + $$byval_copy1 = sp + 384|0; + $$byval_copy = sp + 380|0; + $10 = sp + 8|0; + $13 = sp + 389|0; + $26 = sp + 288|0; + $32 = sp + 264|0; + $38 = sp + 240|0; + $50 = sp + 192|0; + $76 = sp; + $81 = sp + 388|0; + $89 = sp + 44|0; + $90 = sp + 40|0; + $91 = sp + 20|0; + $92 = sp + 16|0; + $93 = sp + 12|0; + $85 = $0; + $86 = $1; + $94 = $85; + $95 = ((($94)) + 4|0); + $96 = HEAP32[$95>>2]|0; + $97 = HEAP32[$94>>2]|0; + $98 = ($96|0)==($97|0); + do { + if ($98) { + $99 = ((($94)) + 8|0); + $100 = HEAP32[$99>>2]|0; + $84 = $94; + $101 = $84; + $102 = ((($101)) + 12|0); + $83 = $102; + $103 = $83; + $82 = $103; + $104 = $82; + $105 = HEAP32[$104>>2]|0; + $106 = ($100>>>0)<($105>>>0); + if (!($106)) { + $20 = $94; + $157 = $20; + $158 = ((($157)) + 12|0); + $19 = $158; + $159 = $19; + $18 = $159; + $160 = $18; + $161 = HEAP32[$160>>2]|0; + $162 = HEAP32[$94>>2]|0; + $163 = $161; + $164 = $162; + $165 = (($163) - ($164))|0; + $166 = (($165|0) / 4)&-1; + $167 = $166<<1; + HEAP32[$89>>2] = $167; + HEAP32[$90>>2] = 1; + $11 = $89; + $12 = $90; + $168 = $11; + $169 = $12; + ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; + $8 = $168; + $9 = $169; + $170 = $8; + $171 = $9; + $5 = $10; + $6 = $170; + $7 = $171; + $172 = $6; + $173 = HEAP32[$172>>2]|0; + $174 = $7; + $175 = HEAP32[$174>>2]|0; + $176 = ($173>>>0)<($175>>>0); + $177 = $9; + $178 = $8; + $179 = $176 ? $177 : $178; + $180 = HEAP32[$179>>2]|0; + $88 = $180; + $181 = $88; + $182 = $88; + $183 = (($182) + 3)|0; + $184 = (($183>>>0) / 4)&-1; + $4 = $94; + $185 = $4; + $186 = ((($185)) + 12|0); + $3 = $186; + $187 = $3; + $188 = ((($187)) + 4|0); + $2 = $188; + $189 = $2; + $190 = HEAP32[$189>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($91,$181,$184,$190); + $191 = ((($94)) + 4|0); + $192 = HEAP32[$191>>2]|0; + $14 = $92; + $15 = $192; + $193 = $14; + $194 = $15; + HEAP32[$193>>2] = $194; + $195 = ((($94)) + 8|0); + $196 = HEAP32[$195>>2]|0; + $16 = $93; + $17 = $196; + $197 = $16; + $198 = $17; + HEAP32[$197>>2] = $198; + ;HEAP32[$$byval_copy>>2]=HEAP32[$92>>2]|0; + ;HEAP32[$$byval_copy1>>2]=HEAP32[$93>>2]|0; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($91,$$byval_copy,$$byval_copy1); + $24 = $94; + $25 = $91; + $199 = $24; + $23 = $199; + $200 = $23; + $201 = HEAP32[$200>>2]|0; + HEAP32[$26>>2] = $201; + $202 = $25; + $21 = $202; + $203 = $21; + $204 = HEAP32[$203>>2]|0; + $205 = $24; + HEAP32[$205>>2] = $204; + $22 = $26; + $206 = $22; + $207 = HEAP32[$206>>2]|0; + $208 = $25; + HEAP32[$208>>2] = $207; + $209 = ((($94)) + 4|0); + $210 = ((($91)) + 4|0); + $30 = $209; + $31 = $210; + $211 = $30; + $29 = $211; + $212 = $29; + $213 = HEAP32[$212>>2]|0; + HEAP32[$32>>2] = $213; + $214 = $31; + $27 = $214; + $215 = $27; + $216 = HEAP32[$215>>2]|0; + $217 = $30; + HEAP32[$217>>2] = $216; + $28 = $32; + $218 = $28; + $219 = HEAP32[$218>>2]|0; + $220 = $31; + HEAP32[$220>>2] = $219; + $221 = ((($94)) + 8|0); + $222 = ((($91)) + 8|0); + $36 = $221; + $37 = $222; + $223 = $36; + $35 = $223; + $224 = $35; + $225 = HEAP32[$224>>2]|0; + HEAP32[$38>>2] = $225; + $226 = $37; + $33 = $226; + $227 = $33; + $228 = HEAP32[$227>>2]|0; + $229 = $36; + HEAP32[$229>>2] = $228; + $34 = $38; + $230 = $34; + $231 = HEAP32[$230>>2]|0; + $232 = $37; + HEAP32[$232>>2] = $231; + $41 = $94; + $233 = $41; + $234 = ((($233)) + 12|0); + $40 = $234; + $235 = $40; + $39 = $235; + $236 = $39; + $44 = $91; + $237 = $44; + $238 = ((($237)) + 12|0); + $43 = $238; + $239 = $43; + $42 = $239; + $240 = $42; + $48 = $236; + $49 = $240; + $241 = $48; + $47 = $241; + $242 = $47; + $243 = HEAP32[$242>>2]|0; + HEAP32[$50>>2] = $243; + $244 = $49; + $45 = $244; + $245 = $45; + $246 = HEAP32[$245>>2]|0; + $247 = $48; + HEAP32[$247>>2] = $246; + $46 = $50; + $248 = $46; + $249 = HEAP32[$248>>2]|0; + $250 = $49; + HEAP32[$250>>2] = $249; + __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($91); + break; + } + $63 = $94; + $107 = $63; + $108 = ((($107)) + 12|0); + $62 = $108; + $109 = $62; + $61 = $109; + $110 = $61; + $111 = HEAP32[$110>>2]|0; + $112 = ((($94)) + 8|0); + $113 = HEAP32[$112>>2]|0; + $114 = $111; + $115 = $113; + $116 = (($114) - ($115))|0; + $117 = (($116|0) / 4)&-1; + $87 = $117; + $118 = $87; + $119 = (($118) + 1)|0; + $120 = (($119|0) / 2)&-1; + $87 = $120; + $121 = ((($94)) + 4|0); + $122 = HEAP32[$121>>2]|0; + $123 = ((($94)) + 8|0); + $124 = HEAP32[$123>>2]|0; + $125 = ((($94)) + 8|0); + $126 = HEAP32[$125>>2]|0; + $127 = $87; + $128 = (($126) + ($127<<2)|0); + $58 = $122; + $59 = $124; + $60 = $128; + $129 = $58; + $57 = $129; + $130 = $57; + $131 = $59; + $51 = $131; + $132 = $51; + $133 = $60; + $52 = $133; + $134 = $52; + $53 = $130; + $54 = $132; + $55 = $134; + $135 = $54; + $136 = $53; + $137 = $135; + $138 = $136; + $139 = (($137) - ($138))|0; + $140 = (($139|0) / 4)&-1; + $56 = $140; + $141 = $56; + $142 = ($141>>>0)>(0); + if ($142) { + $143 = $56; + $144 = $55; + $145 = (0 - ($143))|0; + $146 = (($144) + ($145<<2)|0); + $55 = $146; + $147 = $55; + $148 = $53; + $149 = $56; + $150 = $149<<2; + _memmove(($147|0),($148|0),($150|0))|0; + } + $151 = $55; + $152 = ((($94)) + 4|0); + HEAP32[$152>>2] = $151; + $153 = $87; + $154 = ((($94)) + 8|0); + $155 = HEAP32[$154>>2]|0; + $156 = (($155) + ($153<<2)|0); + HEAP32[$154>>2] = $156; + } + } while(0); + $66 = $94; + $251 = $66; + $252 = ((($251)) + 12|0); + $65 = $252; + $253 = $65; + $254 = ((($253)) + 4|0); + $64 = $254; + $255 = $64; + $256 = HEAP32[$255>>2]|0; + $257 = ((($94)) + 4|0); + $258 = HEAP32[$257>>2]|0; + $259 = ((($258)) + -4|0); + $67 = $259; + $260 = $67; + $261 = $86; + $78 = $256; + $79 = $260; + $80 = $261; + $262 = $78; + $263 = $79; + $264 = $80; + $77 = $264; + $265 = $77; + ;HEAP8[$76>>0]=HEAP8[$81>>0]|0; + $73 = $262; + $74 = $263; + $75 = $265; + $266 = $73; + $267 = $74; + $268 = $75; + $72 = $268; + $269 = $72; + $69 = $266; + $70 = $267; + $71 = $269; + $270 = $70; + $271 = $71; + $68 = $271; + $272 = $68; + $273 = HEAP32[$272>>2]|0; + HEAP32[$270>>2] = $273; + $274 = ((($94)) + 4|0); + $275 = HEAP32[$274>>2]|0; + $276 = ((($275)) + -4|0); + HEAP32[$274>>2] = $276; + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $19 = sp + 8|0; + $22 = sp + 133|0; + $29 = sp; + $32 = sp + 132|0; + $34 = $0; + $35 = $34; + $33 = $35; + $36 = $33; + $37 = ((($36)) + 4|0); + $38 = HEAP32[$37>>2]|0; + $30 = $36; + $31 = $38; + $39 = $30; + $40 = $31; + ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; + $27 = $39; + $28 = $40; + $41 = $27; + while(1) { + $42 = $28; + $43 = ((($41)) + 8|0); + $44 = HEAP32[$43>>2]|0; + $45 = ($42|0)!=($44|0); + if (!($45)) { + break; + } + $26 = $41; + $46 = $26; + $47 = ((($46)) + 12|0); + $25 = $47; + $48 = $25; + $49 = ((($48)) + 4|0); + $24 = $49; + $50 = $24; + $51 = HEAP32[$50>>2]|0; + $52 = ((($41)) + 8|0); + $53 = HEAP32[$52>>2]|0; + $54 = ((($53)) + -4|0); + HEAP32[$52>>2] = $54; + $23 = $54; + $55 = $23; + $20 = $51; + $21 = $55; + $56 = $20; + $57 = $21; + ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; + $17 = $56; + $18 = $57; + $58 = $17; + $59 = $18; + $15 = $58; + $16 = $59; + } + $60 = HEAP32[$35>>2]|0; + $61 = ($60|0)!=(0|0); + if (!($61)) { + STACKTOP = sp;return; + } + $14 = $35; + $62 = $14; + $63 = ((($62)) + 12|0); + $13 = $63; + $64 = $13; + $65 = ((($64)) + 4|0); + $12 = $65; + $66 = $12; + $67 = HEAP32[$66>>2]|0; + $68 = HEAP32[$35>>2]|0; + $4 = $35; + $69 = $4; + $3 = $69; + $70 = $3; + $71 = ((($70)) + 12|0); + $2 = $71; + $72 = $2; + $1 = $72; + $73 = $1; + $74 = HEAP32[$73>>2]|0; + $75 = HEAP32[$69>>2]|0; + $76 = $74; + $77 = $75; + $78 = (($76) - ($77))|0; + $79 = (($78|0) / 4)&-1; + $9 = $67; + $10 = $68; + $11 = $79; + $80 = $9; + $81 = $10; + $82 = $11; + $6 = $80; + $7 = $81; + $8 = $82; + $83 = $7; + $5 = $83; + $84 = $5; + __ZdlPv($84); + STACKTOP = sp;return; +} +function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + var $66 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0); + $17 = sp; + $22 = sp + 100|0; + $27 = $0; + $29 = $27; + $26 = $29; + $30 = $26; + $31 = ((($30)) + 12|0); + $25 = $31; + $32 = $25; + $33 = ((($32)) + 4|0); + $24 = $33; + $34 = $24; + $35 = HEAP32[$34>>2]|0; + $28 = $35; + while(1) { + $5 = $1; + $6 = $2; + $36 = $5; + $4 = $36; + $37 = $4; + $38 = HEAP32[$37>>2]|0; + $39 = $6; + $3 = $39; + $40 = $3; + $41 = HEAP32[$40>>2]|0; + $42 = ($38|0)!=($41|0); + if (!($42)) { + break; + } + $43 = $28; + $44 = ((($29)) + 8|0); + $45 = HEAP32[$44>>2]|0; + $7 = $45; + $46 = $7; + $8 = $1; + $47 = $8; + $48 = HEAP32[$47>>2]|0; + $19 = $43; + $20 = $46; + $21 = $48; + $49 = $19; + $50 = $20; + $51 = $21; + $18 = $51; + $52 = $18; + ;HEAP8[$17>>0]=HEAP8[$22>>0]|0; + $14 = $49; + $15 = $50; + $16 = $52; + $53 = $14; + $54 = $15; + $55 = $16; + $13 = $55; + $56 = $13; + $10 = $53; + $11 = $54; + $12 = $56; + $57 = $11; + $58 = $12; + $9 = $58; + $59 = $9; + $60 = HEAP32[$59>>2]|0; + HEAP32[$57>>2] = $60; + $61 = ((($29)) + 8|0); + $62 = HEAP32[$61>>2]|0; + $63 = ((($62)) + 4|0); + HEAP32[$61>>2] = $63; + $23 = $1; + $64 = $23; + $65 = HEAP32[$64>>2]|0; + $66 = ((($65)) + 4|0); + HEAP32[$64>>2] = $66; + } + STACKTOP = sp;return; +} +function __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $7 = $1; + $9 = $7; + $6 = $9; + $10 = $6; + $11 = ((($10)) + 4|0); + $12 = HEAP32[$11>>2]|0; + $13 = ((($9)) + 16|0); + $14 = HEAP32[$13>>2]|0; + $15 = (($14>>>0) / 93)&-1; + $16 = (($12) + ($15<<2)|0); + $8 = $16; + $17 = $8; + $5 = $9; + $18 = $5; + $19 = ((($18)) + 8|0); + $20 = HEAP32[$19>>2]|0; + $21 = ((($18)) + 4|0); + $22 = HEAP32[$21>>2]|0; + $23 = ($20|0)==($22|0); + if ($23) { + $30 = 0; + } else { + $24 = $8; + $25 = HEAP32[$24>>2]|0; + $26 = ((($9)) + 16|0); + $27 = HEAP32[$26>>2]|0; + $28 = (($27>>>0) % 93)&-1; + $29 = (($25) + (($28*44)|0)|0); + $30 = $29; + } + $2 = $0; + $3 = $17; + $4 = $30; + $31 = $2; + $32 = $3; + HEAP32[$31>>2] = $32; + $33 = ((($31)) + 4|0); + $34 = $4; + HEAP32[$33>>2] = $34; + STACKTOP = sp;return; +} +function __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $10 = $1; + $13 = $10; + $9 = $13; + $14 = $9; + $15 = ((($14)) + 20|0); + $8 = $15; + $16 = $8; + $7 = $16; + $17 = $7; + $18 = HEAP32[$17>>2]|0; + $19 = ((($13)) + 16|0); + $20 = HEAP32[$19>>2]|0; + $21 = (($18) + ($20))|0; + $11 = $21; + $6 = $13; + $22 = $6; + $23 = ((($22)) + 4|0); + $24 = HEAP32[$23>>2]|0; + $25 = $11; + $26 = (($25>>>0) / 93)&-1; + $27 = (($24) + ($26<<2)|0); + $12 = $27; + $28 = $12; + $2 = $13; + $29 = $2; + $30 = ((($29)) + 8|0); + $31 = HEAP32[$30>>2]|0; + $32 = ((($29)) + 4|0); + $33 = HEAP32[$32>>2]|0; + $34 = ($31|0)==($33|0); + if ($34) { + $40 = 0; + $3 = $0; + $4 = $28; + $5 = $40; + $41 = $3; + $42 = $4; + HEAP32[$41>>2] = $42; + $43 = ((($41)) + 4|0); + $44 = $5; + HEAP32[$43>>2] = $44; + STACKTOP = sp;return; + } + $35 = $12; + $36 = HEAP32[$35>>2]|0; + $37 = $11; + $38 = (($37>>>0) % 93)&-1; + $39 = (($36) + (($38*44)|0)|0); + $40 = $39; + $3 = $0; + $4 = $28; + $5 = $40; + $41 = $3; + $42 = $4; + HEAP32[$41>>2] = $42; + $43 = ((($41)) + 4|0); + $44 = $5; + HEAP32[$43>>2] = $44; + STACKTOP = sp;return; +} +function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); + $6 = sp + 8|0; + $9 = sp + 177|0; + $26 = sp; + $29 = sp + 176|0; + $41 = sp + 24|0; + $42 = sp + 16|0; + $39 = $0; + $43 = $39; + $38 = $43; + $44 = $38; + $45 = ((($44)) + 20|0); + $37 = $45; + $46 = $37; + $36 = $46; + $47 = $36; + $40 = $47; + __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($41,$43); + __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($42,$43); + while(1) { + $34 = $41; + $35 = $42; + $48 = $34; + $49 = $35; + $32 = $48; + $33 = $49; + $50 = $32; + $51 = ((($50)) + 4|0); + $52 = HEAP32[$51>>2]|0; + $53 = $33; + $54 = ((($53)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $56 = ($52|0)==($55|0); + $57 = $56 ^ 1; + if (!($57)) { + break; + } + $58 = $40; + $16 = $41; + $59 = $16; + $60 = ((($59)) + 4|0); + $61 = HEAP32[$60>>2]|0; + $1 = $61; + $62 = $1; + $7 = $58; + $8 = $62; + $63 = $7; + $64 = $8; + ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; + $4 = $63; + $5 = $64; + $65 = $4; + $66 = $5; + $2 = $65; + $3 = $66; + $67 = $3; + __ZN6laszip6models10arithmeticD2Ev($67); + $10 = $41; + $68 = $10; + $69 = ((($68)) + 4|0); + $70 = HEAP32[$69>>2]|0; + $71 = ((($70)) + 44|0); + HEAP32[$69>>2] = $71; + $72 = HEAP32[$68>>2]|0; + $73 = HEAP32[$72>>2]|0; + $74 = $71; + $75 = $73; + $76 = (($74) - ($75))|0; + $77 = (($76|0) / 44)&-1; + $78 = ($77|0)==(93); + if ($78) { + $79 = HEAP32[$68>>2]|0; + $80 = ((($79)) + 4|0); + HEAP32[$68>>2] = $80; + $81 = HEAP32[$68>>2]|0; + $82 = HEAP32[$81>>2]|0; + $83 = ((($68)) + 4|0); + HEAP32[$83>>2] = $82; + } + } + $13 = $43; + $84 = $13; + $85 = ((($84)) + 20|0); + $12 = $85; + $86 = $12; + $11 = $86; + $87 = $11; + HEAP32[$87>>2] = 0; + while(1) { + $14 = $43; + $88 = $14; + $89 = ((($88)) + 8|0); + $90 = HEAP32[$89>>2]|0; + $91 = ((($88)) + 4|0); + $92 = HEAP32[$91>>2]|0; + $93 = $90; + $94 = $92; + $95 = (($93) - ($94))|0; + $96 = (($95|0) / 4)&-1; + $97 = ($96>>>0)>(2); + if (!($97)) { + break; + } + $98 = $40; + $15 = $43; + $99 = $15; + $100 = ((($99)) + 4|0); + $101 = HEAP32[$100>>2]|0; + $102 = HEAP32[$101>>2]|0; + $21 = $98; + $22 = $102; + $23 = 93; + $103 = $21; + $104 = $22; + $105 = $23; + $18 = $103; + $19 = $104; + $20 = $105; + $106 = $19; + $17 = $106; + $107 = $17; + __ZdlPv($107); + $30 = $43; + $108 = $30; + $109 = ((($108)) + 4|0); + $110 = HEAP32[$109>>2]|0; + $111 = ((($110)) + 4|0); + $27 = $108; + $28 = $111; + $112 = $27; + $113 = $28; + ;HEAP8[$26>>0]=HEAP8[$29>>0]|0; + $24 = $112; + $25 = $113; + $114 = $24; + $115 = $25; + $116 = ((($114)) + 4|0); + HEAP32[$116>>2] = $115; + } + $31 = $43; + $117 = $31; + $118 = ((($117)) + 8|0); + $119 = HEAP32[$118>>2]|0; + $120 = ((($117)) + 4|0); + $121 = HEAP32[$120>>2]|0; + $122 = $119; + $123 = $121; + $124 = (($122) - ($123))|0; + $125 = (($124|0) / 4)&-1; + switch ($125|0) { + case 1: { + $126 = ((($43)) + 16|0); + HEAP32[$126>>2] = 46; + STACKTOP = sp;return; + break; + } + case 2: { + $127 = ((($43)) + 16|0); + HEAP32[$127>>2] = 93; + STACKTOP = sp;return; + break; + } + default: { + STACKTOP = sp;return; + } + } +} +function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $7 = $1; + $9 = $7; + $6 = $9; + $10 = $6; + $11 = ((($10)) + 4|0); + $12 = HEAP32[$11>>2]|0; + $13 = ((($9)) + 16|0); + $14 = HEAP32[$13>>2]|0; + $15 = (($14>>>0) / 93)&-1; + $16 = (($12) + ($15<<2)|0); + $8 = $16; + $17 = $8; + $5 = $9; + $18 = $5; + $19 = ((($18)) + 8|0); + $20 = HEAP32[$19>>2]|0; + $21 = ((($18)) + 4|0); + $22 = HEAP32[$21>>2]|0; + $23 = ($20|0)==($22|0); + if ($23) { + $30 = 0; + } else { + $24 = $8; + $25 = HEAP32[$24>>2]|0; + $26 = ((($9)) + 16|0); + $27 = HEAP32[$26>>2]|0; + $28 = (($27>>>0) % 93)&-1; + $29 = (($25) + (($28*44)|0)|0); + $30 = $29; + } + $2 = $0; + $3 = $17; + $4 = $30; + $31 = $2; + $32 = $3; + HEAP32[$31>>2] = $32; + $33 = ((($31)) + 4|0); + $34 = $4; + HEAP32[$33>>2] = $34; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); + $5 = sp + 268|0; + $8 = sp + 256|0; + $13 = sp + 236|0; + $16 = sp + 224|0; + $28 = sp + 176|0; + $31 = sp + 164|0; + $46 = sp + 104|0; + $50 = sp + 88|0; + $63 = sp + 36|0; + $64 = sp + 32|0; + $65 = sp + 24|0; + $66 = sp + 16|0; + $67 = sp + 12|0; + $68 = sp + 8|0; + $69 = sp; + $59 = $0; + $60 = $1; + $61 = $2; + $70 = $59; + $71 = ((($70)) + 4|0); + $72 = HEAP8[$71>>0]|0; + $73 = $72&1; + if (!($73)) { + $74 = $60; + $75 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($74)|0); + $76 = $61; + $77 = HEAP32[$70>>2]|0; + __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($75,$76,$77); + $78 = $61; + $79 = $61; + $80 = HEAP32[$70>>2]|0; + $81 = (($79) + ($80)|0); + $82 = ((($70)) + 8|0); + $57 = $82; + $83 = $57; + $84 = HEAP32[$83>>2]|0; + $56 = $84; + $85 = $56; + $39 = $78; + $40 = $81; + $41 = $85; + $86 = $39; + $38 = $86; + $87 = $38; + $88 = $40; + $33 = $88; + $89 = $33; + $90 = $41; + $34 = $90; + $91 = $34; + $35 = $87; + $36 = $89; + $37 = $91; + while(1) { + $92 = $35; + $93 = $36; + $94 = ($92|0)!=($93|0); + if (!($94)) { + break; + } + $95 = $35; + $96 = HEAP8[$95>>0]|0; + $97 = $37; + HEAP8[$97>>0] = $96; + $98 = $35; + $99 = ((($98)) + 1|0); + $35 = $99; + $100 = $37; + $101 = ((($100)) + 1|0); + $37 = $101; + } + $102 = ((($70)) + 4|0); + HEAP8[$102>>0] = 1; + $103 = $61; + $104 = HEAP32[$70>>2]|0; + $105 = (($103) + ($104)|0); + $58 = $105; + $193 = $58; + STACKTOP = sp;return ($193|0); + } + $106 = ((($70)) + 20|0); + $62 = $106; + $107 = $62; + $32 = $107; + $108 = $32; + $109 = HEAP32[$108>>2]|0; + $29 = $108; + $30 = $109; + $110 = $30; + $26 = $28; + $27 = $110; + $111 = $26; + $112 = $27; + HEAP32[$111>>2] = $112; + $113 = HEAP32[$28>>2]|0; + HEAP32[$31>>2] = $113; + $114 = HEAP32[$31>>2]|0; + HEAP32[$63>>2] = $114; + $115 = ((($70)) + 8|0); + $9 = $115; + $116 = $9; + $117 = HEAP32[$116>>2]|0; + $6 = $116; + $7 = $117; + $118 = $7; + $3 = $5; + $4 = $118; + $119 = $3; + $120 = $4; + HEAP32[$119>>2] = $120; + $121 = HEAP32[$5>>2]|0; + HEAP32[$8>>2] = $121; + $122 = HEAP32[$8>>2]|0; + HEAP32[$64>>2] = $122; + $123 = ((($70)) + 32|0); + $10 = $123; + $124 = $10; + __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($65,$124); + while(1) { + $125 = ((($70)) + 8|0); + $17 = $125; + $126 = $17; + $127 = ((($126)) + 4|0); + $128 = HEAP32[$127>>2]|0; + $14 = $126; + $15 = $128; + $129 = $15; + $11 = $13; + $12 = $129; + $130 = $11; + $131 = $12; + HEAP32[$130>>2] = $131; + $132 = HEAP32[$13>>2]|0; + HEAP32[$16>>2] = $132; + $133 = HEAP32[$16>>2]|0; + HEAP32[$66>>2] = $133; + $22 = $64; + $23 = $66; + $134 = $22; + $135 = $23; + $20 = $134; + $21 = $135; + $136 = $20; + $19 = $136; + $137 = $19; + $138 = HEAP32[$137>>2]|0; + $139 = $21; + $18 = $139; + $140 = $18; + $141 = HEAP32[$140>>2]|0; + $142 = ($138|0)==($141|0); + $143 = $142 ^ 1; + if (!($143)) { + break; + } + $24 = $64; + $144 = $24; + $145 = HEAP32[$144>>2]|0; + $146 = HEAP8[$145>>0]|0; + $147 = $146&255; + $148 = $60; + $25 = $65; + $149 = $25; + $150 = ((($149)) + 4|0); + $151 = HEAP32[$150>>2]|0; + $152 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($148,$151)|0); + $153 = (($147) + ($152))|0; + $154 = (__Z7u8_foldi($153)|0); + $42 = $63; + $155 = $42; + $156 = HEAP32[$155>>2]|0; + HEAP8[$156>>0] = $154; + $43 = $63; + $157 = $43; + $158 = HEAP32[$157>>2]|0; + $159 = HEAP8[$158>>0]|0; + $160 = $61; + HEAP8[$160>>0] = $159; + $44 = $64; + $161 = $44; + $162 = HEAP32[$161>>2]|0; + HEAP8[$162>>0] = $159; + $47 = $64; + $48 = 0; + $163 = $47; + ;HEAP32[$46>>2]=HEAP32[$163>>2]|0; + $45 = $163; + $164 = $45; + $165 = HEAP32[$164>>2]|0; + $166 = ((($165)) + 1|0); + HEAP32[$164>>2] = $166; + $167 = HEAP32[$46>>2]|0; + HEAP32[$67>>2] = $167; + $168 = $61; + $169 = ((($168)) + 1|0); + $61 = $169; + $51 = $63; + $52 = 0; + $170 = $51; + ;HEAP32[$50>>2]=HEAP32[$170>>2]|0; + $49 = $170; + $171 = $49; + $172 = HEAP32[$171>>2]|0; + $173 = ((($172)) + 1|0); + HEAP32[$171>>2] = $173; + $174 = HEAP32[$50>>2]|0; + HEAP32[$68>>2] = $174; + $54 = $65; + $55 = 0; + $175 = $54; + ;HEAP32[$69>>2]=HEAP32[$175>>2]|0;HEAP32[$69+4>>2]=HEAP32[$175+4>>2]|0; + $53 = $175; + $176 = $53; + $177 = ((($176)) + 4|0); + $178 = HEAP32[$177>>2]|0; + $179 = ((($178)) + 44|0); + HEAP32[$177>>2] = $179; + $180 = HEAP32[$176>>2]|0; + $181 = HEAP32[$180>>2]|0; + $182 = $179; + $183 = $181; + $184 = (($182) - ($183))|0; + $185 = (($184|0) / 44)&-1; + $186 = ($185|0)==(93); + if ($186) { + $187 = HEAP32[$176>>2]|0; + $188 = ((($187)) + 4|0); + HEAP32[$176>>2] = $188; + $189 = HEAP32[$176>>2]|0; + $190 = HEAP32[$189>>2]|0; + $191 = ((($176)) + 4|0); + HEAP32[$191>>2] = $190; + } + } + $192 = $61; + $58 = $192; + $193 = $58; + STACKTOP = sp;return ($193|0); +} +function __Z7u8_foldi($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = $2&255; + STACKTOP = sp;return ($3|0); +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 480; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $12 = sp + 8|0; + $13 = $0; + $14 = $1; + $15 = $13; + $11 = $15; + $16 = $11; + $10 = $16; + HEAP32[$16>>2] = 0; + $17 = ((($16)) + 4|0); + HEAP32[$17>>2] = 0; + $18 = ((($16)) + 8|0); + HEAP32[$12>>2] = 0; + $8 = $18; + $9 = $12; + $19 = $8; + $20 = $9; + $7 = $20; + $21 = $7; + $3 = $19; + $4 = $21; + $22 = $3; + $23 = $4; + $2 = $23; + HEAP32[$22>>2] = 0; + $6 = $19; + $24 = $6; + $5 = $24; + $25 = $14; + $26 = ($25>>>0)>(0); + if (!($26)) { + STACKTOP = sp;return; + } + $27 = $14; + __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($15,$27); + $28 = $14; + __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($15,$28); + STACKTOP = sp;return; +} +function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0); + $20 = sp + 20|0; + $22 = sp + 12|0; + $23 = $0; + $24 = $1; + $25 = $2; + $26 = $23; + $21 = $26; + $27 = $21; + $19 = $27; + $28 = $19; + HEAP32[$28>>2] = 0; + $29 = ((($28)) + 4|0); + HEAP32[$29>>2] = 0; + $30 = ((($28)) + 8|0); + HEAP32[$30>>2] = 0; + $31 = ((($28)) + 12|0); + HEAP32[$20>>2] = 0; + $17 = $31; + $18 = $20; + $32 = $17; + $33 = $18; + $16 = $33; + $34 = $16; + $12 = $32; + $13 = $34; + $35 = $12; + $36 = $13; + $11 = $36; + HEAP32[$35>>2] = 0; + $15 = $32; + $37 = $15; + $14 = $37; + $38 = ((($27)) + 16|0); + HEAP32[$38>>2] = 0; + $39 = ((($27)) + 20|0); + HEAP32[$22>>2] = 0; + $9 = $39; + $10 = $22; + $40 = $9; + $41 = $10; + $8 = $41; + $42 = $8; + $4 = $40; + $5 = $42; + $43 = $4; + $44 = $5; + $3 = $44; + $45 = $3; + $46 = HEAP32[$45>>2]|0; + HEAP32[$43>>2] = $46; + $7 = $40; + $47 = $7; + $6 = $47; + $48 = $24; + $49 = ($48>>>0)>(0); + if (!($49)) { + STACKTOP = sp;return; + } + $50 = $24; + $51 = $25; + __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($26,$50,$51); + STACKTOP = sp;return; +} +function __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); + $10 = sp; + $13 = sp + 73|0; + $21 = sp + 72|0; + $18 = $0; + $19 = $1; + $22 = $18; + $17 = $22; + $23 = $17; + $24 = ((($23)) + 8|0); + $16 = $24; + $25 = $16; + $15 = $25; + $26 = $15; + $20 = $26; + while(1) { + $2 = $21; + $3 = $22; + $4 = 1; + $27 = $20; + $28 = ((($22)) + 4|0); + $29 = HEAP32[$28>>2]|0; + $5 = $29; + $30 = $5; + $11 = $27; + $12 = $30; + $31 = $11; + $32 = $12; + ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; + $8 = $31; + $9 = $32; + $33 = $8; + $34 = $9; + $6 = $33; + $7 = $34; + $35 = $7; + HEAP8[$35>>0] = 0; + $36 = ((($22)) + 4|0); + $37 = HEAP32[$36>>2]|0; + $38 = ((($37)) + 1|0); + HEAP32[$36>>2] = $38; + $39 = $19; + $40 = (($39) + -1)|0; + $19 = $40; + $14 = $21; + $41 = $19; + $42 = ($41>>>0)>(0); + if (!($42)) { + break; + } + } + STACKTOP = sp;return; +} +function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); + $20 = sp; + $25 = sp + 148|0; + $38 = sp + 8|0; + $33 = $0; + $34 = $1; + $35 = $2; + $39 = $33; + $32 = $39; + $40 = $32; + $41 = ((($40)) + 20|0); + $31 = $41; + $42 = $31; + $30 = $42; + $43 = $30; + $36 = $43; + $11 = $39; + $44 = $11; + $10 = $44; + $45 = $10; + $9 = $45; + $46 = $9; + $47 = ((($46)) + 8|0); + $48 = HEAP32[$47>>2]|0; + $49 = ((($46)) + 4|0); + $50 = HEAP32[$49>>2]|0; + $51 = $48; + $52 = $50; + $53 = (($51) - ($52))|0; + $54 = (($53|0) / 4)&-1; + $55 = ($54|0)==(0); + if ($55) { + $76 = 0; + } else { + $8 = $45; + $56 = $8; + $57 = ((($56)) + 8|0); + $58 = HEAP32[$57>>2]|0; + $59 = ((($56)) + 4|0); + $60 = HEAP32[$59>>2]|0; + $61 = $58; + $62 = $60; + $63 = (($61) - ($62))|0; + $64 = (($63|0) / 4)&-1; + $65 = ($64*93)|0; + $66 = (($65) - 1)|0; + $76 = $66; + } + $67 = ((($44)) + 16|0); + $68 = HEAP32[$67>>2]|0; + $7 = $44; + $69 = $7; + $70 = ((($69)) + 20|0); + $6 = $70; + $71 = $6; + $5 = $71; + $72 = $5; + $73 = HEAP32[$72>>2]|0; + $74 = (($68) + ($73))|0; + $75 = (($76) - ($74))|0; + $37 = $75; + $77 = $34; + $78 = $37; + $79 = ($77>>>0)>($78>>>0); + if ($79) { + $80 = $34; + $81 = $37; + $82 = (($80) - ($81))|0; + __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($39,$82); + } + __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($38,$39); + while(1) { + $83 = $34; + $84 = ($83|0)!=(0); + if (!($84)) { + break; + } + $85 = $36; + $3 = $38; + $86 = $3; + $87 = ((($86)) + 4|0); + $88 = HEAP32[$87>>2]|0; + $4 = $88; + $89 = $4; + $90 = $35; + $22 = $85; + $23 = $89; + $24 = $90; + $91 = $22; + $92 = $23; + $93 = $24; + $21 = $93; + $94 = $21; + ;HEAP8[$20>>0]=HEAP8[$25>>0]|0; + $17 = $91; + $18 = $92; + $19 = $94; + $95 = $17; + $96 = $18; + $97 = $19; + $16 = $97; + $98 = $16; + $13 = $95; + $14 = $96; + $15 = $98; + $99 = $14; + $100 = $15; + $12 = $100; + $101 = $12; + __ZN6laszip6models10arithmeticC2ERKS1_($99,$101); + $102 = $34; + $103 = (($102) + -1)|0; + $34 = $103; + $26 = $38; + $104 = $26; + $105 = ((($104)) + 4|0); + $106 = HEAP32[$105>>2]|0; + $107 = ((($106)) + 44|0); + HEAP32[$105>>2] = $107; + $108 = HEAP32[$104>>2]|0; + $109 = HEAP32[$108>>2]|0; + $110 = $107; + $111 = $109; + $112 = (($110) - ($111))|0; + $113 = (($112|0) / 44)&-1; + $114 = ($113|0)==(93); + if ($114) { + $115 = HEAP32[$104>>2]|0; + $116 = ((($115)) + 4|0); + HEAP32[$104>>2] = $116; + $117 = HEAP32[$104>>2]|0; + $118 = HEAP32[$117>>2]|0; + $119 = ((($104)) + 4|0); + HEAP32[$119>>2] = $118; + } + $29 = $39; + $120 = $29; + $121 = ((($120)) + 20|0); + $28 = $121; + $122 = $28; + $27 = $122; + $123 = $27; + $124 = HEAP32[$123>>2]|0; + $125 = (($124) + 1)|0; + HEAP32[$123>>2] = $125; + } + STACKTOP = sp;return; +} +function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $10 = sp + 12|0; + $11 = $0; + $12 = $1; + $13 = $2; + $14 = $11; + __ZN6laszip7formats20dynamic_decompressorC2Ev($14); + HEAP32[$14>>2] = (2256); + $15 = ((($14)) + 4|0); + $16 = $12; + HEAP32[$15>>2] = $16; + $17 = ((($14)) + 8|0); + $18 = $13; + $9 = $17; + HEAP32[$10>>2] = $18; + $19 = $9; + $7 = $19; + $8 = $10; + $20 = $7; + $21 = $8; + $6 = $21; + $22 = $6; + $4 = $20; + $5 = $22; + $23 = $4; + $24 = $5; + $3 = $24; + $25 = $3; + $26 = HEAP32[$25>>2]|0; + HEAP32[$23>>2] = $26; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2276); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 8|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEE10decompressEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $5 = $0; + $6 = $1; + $7 = $5; + $8 = ((($7)) + 8|0); + $4 = $8; + $9 = $4; + $3 = $9; + $10 = $3; + $2 = $10; + $11 = $2; + $12 = HEAP32[$11>>2]|0; + $13 = ((($7)) + 4|0); + $14 = HEAP32[$13>>2]|0; + $15 = $6; + $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($12,$14,$15)|0); + STACKTOP = sp;return ($16|0); +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $13 = $0; + $14 = $13; + HEAP32[$14>>2] = (2256); + $15 = ((($14)) + 8|0); + $12 = $15; + $16 = $12; + $9 = $16; + $10 = 0; + $17 = $9; + $8 = $17; + $18 = $8; + $7 = $18; + $19 = $7; + $20 = HEAP32[$19>>2]|0; + $11 = $20; + $21 = $10; + $4 = $17; + $22 = $4; + $3 = $22; + $23 = $3; + HEAP32[$23>>2] = $21; + $24 = $11; + $25 = ($24|0)!=(0|0); + if ($25) { + $2 = $17; + $26 = $2; + $1 = $26; + $27 = $1; + $28 = $11; + $5 = $27; + $6 = $28; + $29 = $6; + $30 = ($29|0)==(0|0); + if (!($30)) { + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($29); + __ZdlPv($29); + } + } + __ZN6laszip7formats20dynamic_decompressorD2Ev($14); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + $8 = $5; + $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); + $5 = $9; + $10 = ((($6)) + 4784|0); + $11 = $4; + $12 = $5; + $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0); + STACKTOP = sp;return ($13|0); +} +function __ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = HEAP8[$6>>0]|0; + $8 = $7&1; + if (!($8)) { + $10 = $5; + STACKTOP = sp;return ($10|0); + } + $9 = $4; + __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($9); + HEAP8[$6>>0] = 0; + $10 = $5; + STACKTOP = sp;return ($10|0); +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 8|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 520; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP8[$2>>0] = 1; + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $10 = sp + 12|0; + $11 = $0; + $12 = $1; + $13 = $2; + $14 = $11; + __ZN6laszip7formats20dynamic_decompressorC2Ev($14); + HEAP32[$14>>2] = (2304); + $15 = ((($14)) + 4|0); + $16 = $12; + HEAP32[$15>>2] = $16; + $17 = ((($14)) + 8|0); + $18 = $13; + $9 = $17; + HEAP32[$10>>2] = $18; + $19 = $9; + $7 = $19; + $8 = $10; + $20 = $7; + $21 = $8; + $6 = $21; + $22 = $6; + $4 = $20; + $5 = $22; + $23 = $4; + $24 = $5; + $3 = $24; + $25 = $3; + $26 = HEAP32[$25>>2]|0; + HEAP32[$23>>2] = $26; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2324); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 8|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEE10decompressEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $5 = $0; + $6 = $1; + $7 = $5; + $8 = ((($7)) + 8|0); + $4 = $8; + $9 = $4; + $3 = $9; + $10 = $3; + $2 = $10; + $11 = $2; + $12 = HEAP32[$11>>2]|0; + $13 = ((($7)) + 4|0); + $14 = HEAP32[$13>>2]|0; + $15 = $6; + $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0); + STACKTOP = sp;return ($16|0); +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $13 = $0; + $14 = $13; + HEAP32[$14>>2] = (2304); + $15 = ((($14)) + 8|0); + $12 = $15; + $16 = $12; + $9 = $16; + $10 = 0; + $17 = $9; + $8 = $17; + $18 = $8; + $7 = $18; + $19 = $7; + $20 = HEAP32[$19>>2]|0; + $11 = $20; + $21 = $10; + $4 = $17; + $22 = $4; + $3 = $22; + $23 = $3; + HEAP32[$23>>2] = $21; + $24 = $11; + $25 = ($24|0)!=(0|0); + if ($25) { + $2 = $17; + $26 = $2; + $1 = $26; + $27 = $1; + $28 = $11; + $5 = $27; + $6 = $28; + $29 = $6; + $30 = ($29|0)==(0|0); + if (!($30)) { + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($29); + __ZdlPv($29); + } + } + __ZN6laszip7formats20dynamic_decompressorD2Ev($14); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + $8 = $5; + $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); + $5 = $9; + $10 = ((($6)) + 4784|0); + $11 = $4; + $12 = $5; + $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0); + STACKTOP = sp;return ($13|0); +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + $8 = $5; + $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); + $5 = $9; + $10 = ((($6)) + 328|0); + $11 = $4; + $12 = $5; + $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0); + STACKTOP = sp;return ($13|0); +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4784|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($3); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 8|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 560; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2); + $3 = ((($2)) + 328|0); + __ZN6laszip7formats19record_decompressorIJEEC2Ev($3); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $10 = sp + 12|0; + $11 = $0; + $12 = $1; + $13 = $2; + $14 = $11; + __ZN6laszip7formats20dynamic_decompressorC2Ev($14); + HEAP32[$14>>2] = (2352); + $15 = ((($14)) + 4|0); + $16 = $12; + HEAP32[$15>>2] = $16; + $17 = ((($14)) + 8|0); + $18 = $13; + $9 = $17; + HEAP32[$10>>2] = $18; + $19 = $9; + $7 = $19; + $8 = $10; + $20 = $7; + $21 = $8; + $6 = $21; + $22 = $6; + $4 = $20; + $5 = $22; + $23 = $4; + $24 = $5; + $3 = $24; + $25 = $3; + $26 = HEAP32[$25>>2]|0; + HEAP32[$23>>2] = $26; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2372); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 8|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEE10decompressEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $5 = $0; + $6 = $1; + $7 = $5; + $8 = ((($7)) + 8|0); + $4 = $8; + $9 = $4; + $3 = $9; + $10 = $3; + $2 = $10; + $11 = $2; + $12 = HEAP32[$11>>2]|0; + $13 = ((($7)) + 4|0); + $14 = HEAP32[$13>>2]|0; + $15 = $6; + $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0); + STACKTOP = sp;return ($16|0); +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $13 = $0; + $14 = $13; + HEAP32[$14>>2] = (2352); + $15 = ((($14)) + 8|0); + $12 = $15; + $16 = $12; + $9 = $16; + $10 = 0; + $17 = $9; + $8 = $17; + $18 = $8; + $7 = $18; + $19 = $7; + $20 = HEAP32[$19>>2]|0; + $11 = $20; + $21 = $10; + $4 = $17; + $22 = $4; + $3 = $22; + $23 = $3; + HEAP32[$23>>2] = $21; + $24 = $11; + $25 = ($24|0)!=(0|0); + if ($25) { + $2 = $17; + $26 = $2; + $1 = $26; + $27 = $1; + $28 = $11; + $5 = $27; + $6 = $28; + $29 = $6; + $30 = ($29|0)==(0|0); + if (!($30)) { + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($29); + __ZdlPv($29); + } + } + __ZN6laszip7formats20dynamic_decompressorD2Ev($14); + STACKTOP = sp;return; +} +function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + $8 = $5; + $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); + $5 = $9; + $10 = ((($6)) + 4784|0); + $11 = $4; + $12 = $5; + $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0); + STACKTOP = sp;return ($13|0); +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + $8 = $5; + $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); + $5 = $9; + $10 = ((($6)) + 316|0); + $11 = $4; + $12 = $5; + $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0); + STACKTOP = sp;return ($13|0); +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4784|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 8|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 600; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($2); + $3 = ((($2)) + 316|0); + __ZN6laszip7formats19record_decompressorIJEEC2Ev($3); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $10 = sp + 12|0; + $11 = $0; + $12 = $1; + $13 = $2; + $14 = $11; + __ZN6laszip7formats20dynamic_decompressorC2Ev($14); + HEAP32[$14>>2] = (2400); + $15 = ((($14)) + 4|0); + $16 = $12; + HEAP32[$15>>2] = $16; + $17 = ((($14)) + 8|0); + $18 = $13; + $9 = $17; + HEAP32[$10>>2] = $18; + $19 = $9; + $7 = $19; + $8 = $10; + $20 = $7; + $21 = $8; + $6 = $21; + $22 = $6; + $4 = $20; + $5 = $22; + $23 = $4; + $24 = $5; + $3 = $24; + $25 = $3; + $26 = HEAP32[$25>>2]|0; + HEAP32[$23>>2] = $26; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2420); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 8|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $5 = $0; + $6 = $1; + $7 = $5; + $8 = ((($7)) + 8|0); + $4 = $8; + $9 = $4; + $3 = $9; + $10 = $3; + $2 = $10; + $11 = $2; + $12 = HEAP32[$11>>2]|0; + $13 = ((($7)) + 4|0); + $14 = HEAP32[$13>>2]|0; + $15 = $6; + $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); + STACKTOP = sp;return ($16|0); +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $13 = $0; + $14 = $13; + HEAP32[$14>>2] = (2400); + $15 = ((($14)) + 8|0); + $12 = $15; + $16 = $12; + $9 = $16; + $10 = 0; + $17 = $9; + $8 = $17; + $18 = $8; + $7 = $18; + $19 = $7; + $20 = HEAP32[$19>>2]|0; + $11 = $20; + $21 = $10; + $4 = $17; + $22 = $4; + $3 = $22; + $23 = $3; + HEAP32[$23>>2] = $21; + $24 = $11; + $25 = ($24|0)!=(0|0); + if ($25) { + $2 = $17; + $26 = $2; + $1 = $26; + $27 = $1; + $28 = $11; + $5 = $27; + $6 = $28; + $29 = $6; + $30 = ($29|0)==(0|0); + if (!($30)) { + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($29); + __ZdlPv($29); + } + } + __ZN6laszip7formats20dynamic_decompressorD2Ev($14); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + $8 = $5; + $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); + $5 = $9; + $10 = ((($6)) + 4784|0); + $11 = $4; + $12 = $5; + $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($10,$11,$12)|0); + STACKTOP = sp;return ($13|0); +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + $8 = $5; + $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); + $5 = $9; + $10 = ((($6)) + 328|0); + $11 = $4; + $12 = $5; + $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0); + STACKTOP = sp;return ($13|0); +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4784|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($3); + __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 328|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3); + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __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); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 8|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __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) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 640; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __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) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2); + $3 = ((($2)) + 328|0); + __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3); + STACKTOP = sp;return; +} +function __ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 20|0); + STACKTOP = sp;return ($3|0); +} +function __ZN10buf_streamC2EPhj($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $3; + $7 = $4; + HEAP32[$6>>2] = $7; + $8 = ((($6)) + 4|0); + $9 = $5; + HEAP32[$8>>2] = $9; + $10 = ((($6)) + 8|0); + HEAP32[$10>>2] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + HEAP32[$4>>2] = $5; + $6 = ((($4)) + 4|0); + HEAP32[$6>>2] = 0; + $7 = ((($4)) + 8|0); + HEAP32[$7>>2] = -1; + STACKTOP = sp;return; +} +function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $$byval_copy = sp + 8|0; + $3 = sp; + $2 = $1; + $4 = (__Znwj(24)|0); + $5 = $2; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($4,$5); + ;HEAP32[$3>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$4,$$byval_copy); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2448); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + __ZdlPv($133); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrI10buf_streamED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + __ZdlPv($28); + } + $30 = ((($16)) + 12|0); + $10 = $30; + $31 = $10; + $9 = $31; + $32 = $9; + $12 = $32; + $33 = $12; + $11 = $33; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 664; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $50 = sp + 76|0; + $51 = sp + 72|0; + $52 = sp + 8|0; + $53 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$52>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$53>>0]=HEAP8[$66>>0]|0; + $49 = $79; + HEAP32[$50>>2] = $80; + $81 = $49; + $47 = $81; + $48 = 0; + $82 = $47; + $83 = $48; + $45 = $82; + $46 = $83; + $84 = $45; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $46; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $48; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2476); + $89 = ((($81)) + 12|0); + $21 = $53; + $90 = $21; + $30 = $51; + $31 = $50; + $32 = $90; + $91 = $30; + $92 = $31; + $29 = $92; + $93 = $29; + $23 = $91; + $24 = $93; + $94 = $23; + $95 = $24; + $22 = $95; + $96 = $22; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $32; + $25 = $98; + $99 = $25; + $27 = $91; + $28 = $99; + $100 = $28; + $26 = $100; + $33 = $52; + $101 = $33; + $42 = $89; + $43 = $51; + $44 = $101; + $102 = $42; + $103 = $43; + $41 = $103; + $104 = $41; + $35 = $102; + $36 = $104; + $105 = $35; + $106 = $36; + $34 = $106; + $107 = $34; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $44; + $37 = $108; + $109 = $37; + $39 = $102; + $40 = $109; + $110 = $40; + $38 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($68,$vararg_buffer); + $20 = $65; + $120 = $20; + $17 = $120; + $18 = 0; + $121 = $17; + $16 = $121; + $122 = $16; + $15 = $122; + $123 = $15; + $124 = HEAP32[$123>>2]|0; + $19 = $124; + $125 = $18; + $12 = $121; + $126 = $12; + $11 = $126; + $127 = $11; + HEAP32[$127>>2] = $125; + $128 = $19; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $10 = $121; + $130 = $10; + $9 = $130; + $131 = $9; + $132 = $19; + $13 = $131; + $14 = $132; + $133 = $14; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($133); + __ZdlPv($133); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $4 = sp + 24|0; + $7 = $0; + $8 = $7; + $9 = ((($8)) + 4|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)!=(0|0); + if (!($11)) { + STACKTOP = sp;return; + } + $12 = ((($8)) + 4|0); + $13 = HEAP32[$12>>2]|0; + $6 = $13; + $14 = $6; + $5 = $14; + $15 = $5; + $16 = ((($15)) + 4|0); + $1 = $16; + $17 = $1; + $2 = -1; + $18 = $2; + $19 = HEAP32[$17>>2]|0; + $20 = (($19) + ($18))|0; + HEAP32[$17>>2] = $20; + $21 = (($19) + ($18))|0; + $3 = $21; + $22 = $3; + $23 = ($22|0)==(-1); + if ($23) { + $24 = HEAP32[$15>>2]|0; + $25 = ((($24)) + 8|0); + $26 = HEAP32[$25>>2]|0; + FUNCTION_TABLE_vi[$26 & 511]($15); + $$expand_i1_val = 1; + HEAP8[$4>>0] = $$expand_i1_val; + } else { + $$expand_i1_val2 = 0; + HEAP8[$4>>0] = $$expand_i1_val2; + } + $$pre_trunc = HEAP8[$4>>0]|0; + $27 = $$pre_trunc&1; + if (!($27)) { + STACKTOP = sp;return; + } + __ZNSt3__219__shared_weak_count14__release_weakEv($14); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $4 = $22; + $23 = $4; + $3 = $23; + $24 = $3; + $2 = $24; + $25 = $2; + $1 = $25; + $26 = $1; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($28); + __ZdlPv($28); + } + $30 = ((($16)) + 12|0); + $10 = $30; + $31 = $10; + $9 = $31; + $32 = $9; + $12 = $32; + $33 = $12; + $11 = $33; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 688; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $12 = sp + 12|0; + $14 = $0; + $15 = $1; + $16 = $14; + __ZN6laszip7formats20dynamic_decompressorC2Ev($16); + HEAP32[$16>>2] = (2504); + $17 = ((($16)) + 4|0); + $18 = $15; + HEAP32[$17>>2] = $18; + $19 = ((($16)) + 8|0); + $13 = $19; + $20 = $13; + $11 = $20; + $21 = $11; + $10 = $21; + HEAP32[$21>>2] = 0; + $22 = ((($21)) + 4|0); + HEAP32[$22>>2] = 0; + $23 = ((($21)) + 8|0); + HEAP32[$12>>2] = 0; + $8 = $23; + $9 = $12; + $24 = $8; + $25 = $9; + $7 = $25; + $26 = $7; + $3 = $24; + $4 = $26; + $27 = $3; + $28 = $4; + $2 = $28; + HEAP32[$27>>2] = 0; + $6 = $24; + $29 = $6; + $5 = $29; + $30 = ((($16)) + 20|0); + HEAP8[$30>>0] = 1; + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2524); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 8|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE10decompressEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); + $20 = sp + 72|0; + $23 = sp + 60|0; + $27 = sp + 44|0; + $30 = sp + 32|0; + $35 = sp + 12|0; + $36 = sp + 8|0; + $37 = sp; + $32 = $0; + $33 = $1; + $38 = $32; + $39 = ((($38)) + 8|0); + $34 = $39; + $40 = $34; + $31 = $40; + $41 = $31; + $42 = HEAP32[$41>>2]|0; + $28 = $41; + $29 = $42; + $43 = $29; + $25 = $27; + $26 = $43; + $44 = $25; + $45 = $26; + HEAP32[$44>>2] = $45; + $46 = HEAP32[$27>>2]|0; + HEAP32[$30>>2] = $46; + $47 = HEAP32[$30>>2]|0; + HEAP32[$35>>2] = $47; + $48 = $34; + $24 = $48; + $49 = $24; + $50 = ((($49)) + 4|0); + $51 = HEAP32[$50>>2]|0; + $21 = $49; + $22 = $51; + $52 = $22; + $18 = $20; + $19 = $52; + $53 = $18; + $54 = $19; + HEAP32[$53>>2] = $54; + $55 = HEAP32[$20>>2]|0; + HEAP32[$23>>2] = $55; + $56 = HEAP32[$23>>2]|0; + HEAP32[$36>>2] = $56; + while(1) { + $16 = $35; + $17 = $36; + $57 = $16; + $58 = $17; + $14 = $57; + $15 = $58; + $59 = $14; + $13 = $59; + $60 = $13; + $61 = HEAP32[$60>>2]|0; + $62 = $15; + $12 = $62; + $63 = $12; + $64 = HEAP32[$63>>2]|0; + $65 = ($61|0)==($64|0); + $66 = $65 ^ 1; + if (!($66)) { + break; + } + $10 = $35; + $67 = $10; + $68 = HEAP32[$67>>2]|0; + $8 = $37; + $9 = $68; + $69 = $8; + $70 = $9; + $71 = HEAP32[$70>>2]|0; + HEAP32[$69>>2] = $71; + $72 = ((($69)) + 4|0); + $73 = $9; + $74 = ((($73)) + 4|0); + $75 = HEAP32[$74>>2]|0; + HEAP32[$72>>2] = $75; + $76 = ((($69)) + 4|0); + $77 = HEAP32[$76>>2]|0; + $78 = ($77|0)!=(0|0); + if ($78) { + $79 = ((($69)) + 4|0); + $80 = HEAP32[$79>>2]|0; + $7 = $80; + $81 = $7; + $6 = $81; + $82 = $6; + $83 = ((($82)) + 4|0); + $3 = $83; + $84 = $3; + $4 = 1; + $85 = $4; + $86 = HEAP32[$84>>2]|0; + $87 = (($86) + ($85))|0; + HEAP32[$84>>2] = $87; + $88 = (($86) + ($85))|0; + $5 = $88; + } + $2 = $37; + $89 = $2; + $90 = HEAP32[$89>>2]|0; + $91 = HEAP32[$90>>2]|0; + $92 = ((($91)) + 12|0); + $93 = HEAP32[$92>>2]|0; + $94 = $33; + $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0); + $33 = $95; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37); + $11 = $35; + $96 = $11; + $97 = HEAP32[$96>>2]|0; + $98 = ((($97)) + 8|0); + HEAP32[$96>>2] = $98; + } + $99 = ((($38)) + 20|0); + $100 = HEAP8[$99>>0]|0; + $101 = $100&1; + if (!($101)) { + $105 = $33; + STACKTOP = sp;return ($105|0); + } + $102 = ((($38)) + 20|0); + HEAP8[$102>>0] = 0; + $103 = ((($38)) + 4|0); + $104 = HEAP32[$103>>2]|0; + __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($104); + $105 = $33; + STACKTOP = sp;return ($105|0); +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2504); + $3 = ((($2)) + 8|0); + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3); + __ZN6laszip7formats20dynamic_decompressorD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($0) { + $0 = $0|0; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP32[$2>>2]|0; + $4 = (__ZN10buf_stream7getByteEv($3)|0); + $5 = $4&255; + $6 = $5 << 24; + $7 = HEAP32[$2>>2]|0; + $8 = (__ZN10buf_stream7getByteEv($7)|0); + $9 = $8&255; + $10 = $9 << 16; + $11 = $6 | $10; + $12 = HEAP32[$2>>2]|0; + $13 = (__ZN10buf_stream7getByteEv($12)|0); + $14 = $13&255; + $15 = $14 << 8; + $16 = $11 | $15; + $17 = HEAP32[$2>>2]|0; + $18 = (__ZN10buf_stream7getByteEv($17)|0); + $19 = $18&255; + $20 = $16 | $19; + $21 = ((($2)) + 4|0); + HEAP32[$21>>2] = $20; + STACKTOP = sp;return; +} +function __ZN10buf_stream7getByteEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP32[$2>>2]|0; + $4 = ((($2)) + 8|0); + $5 = HEAP32[$4>>2]|0; + $6 = (($5) + 1)|0; + HEAP32[$4>>2] = $6; + $7 = (($3) + ($5)|0); + $8 = HEAP8[$7>>0]|0; + STACKTOP = sp;return ($8|0); +} +function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 8|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 728; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(180)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(180)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2552); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($7); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2576); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0); + $4 = ((($2)) + 160|0); + HEAP8[$4>>0] = 0; + $5 = ((($2)) + 161|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 164|0); + __ZN6laszip7formats20standard_diff_methodIiEC2Ev($6); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2552); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats20standard_diff_methodIiEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4|0); + HEAP8[$3>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerD2Ev($3); + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $6 = sp; + $3 = $0; + $4 = $1; + $5 = $2; + $7 = $3; + $8 = ((($7)) + 161|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9&1; + if (!($10)) { + $11 = ((($7)) + 80|0); + __ZN6laszip13decompressors7integer4initEv($11); + } + $12 = ((($7)) + 164|0); + $13 = (__ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($12)|0); + if ($13) { + $14 = ((($7)) + 80|0); + $15 = $4; + $16 = ((($7)) + 164|0); + $17 = HEAP32[$16>>2]|0; + $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0); + HEAP32[$6>>2] = $18; + $19 = HEAP32[$6>>2]|0; + $20 = $5; + __ZN6laszip7formats7packersIiE4packEiPc($19,$20); + $26 = $5; + $27 = ((($26)) + 4|0); + $5 = $27; + $28 = ((($7)) + 164|0); + __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6); + $29 = $5; + STACKTOP = sp;return ($29|0); + } else { + $21 = $4; + $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0); + $23 = $5; + __ZN10buf_stream8getBytesEPhi($22,$23,4); + $24 = $5; + $25 = (__ZN6laszip7formats7packersIiE6unpackEPKc($24)|0); + HEAP32[$6>>2] = $25; + $26 = $5; + $27 = ((($26)) + 4|0); + $5 = $27; + $28 = ((($7)) + 164|0); + __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6); + $29 = $5; + STACKTOP = sp;return ($29|0); + } + return (0)|0; +} +function __ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4|0); + $4 = HEAP8[$3>>0]|0; + $5 = $4&1; + STACKTOP = sp;return ($5|0); +} +function __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $6 = $0; + $7 = $1; + $8 = $2; + $9 = $3; + $11 = $6; + $12 = $8; + $13 = $7; + $14 = ((($11)) + 36|0); + $15 = $9; + $4 = $14; + $5 = $15; + $16 = $4; + $17 = HEAP32[$16>>2]|0; + $18 = $5; + $19 = (($17) + (($18*44)|0)|0); + $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0); + $21 = (($12) + ($20))|0; + $10 = $21; + $22 = $10; + $23 = ($22|0)<(0); + if ($23) { + $24 = ((($11)) + 24|0); + $25 = HEAP32[$24>>2]|0; + $26 = $10; + $27 = (($26) + ($25))|0; + $10 = $27; + $36 = $10; + STACKTOP = sp;return ($36|0); + } + $28 = $10; + $29 = ((($11)) + 24|0); + $30 = HEAP32[$29>>2]|0; + $31 = ($28>>>0)>=($30>>>0); + if (!($31)) { + $36 = $10; + STACKTOP = sp;return ($36|0); + } + $32 = ((($11)) + 24|0); + $33 = HEAP32[$32>>2]|0; + $34 = $10; + $35 = (($34) - ($33))|0; + $10 = $35; + $36 = $10; + STACKTOP = sp;return ($36|0); +} +function __ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP32[$2>>2]|0; + STACKTOP = sp;return ($3|0); +} +function __ZN10buf_stream8getBytesEPhi($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $7 = $3; + $6 = 0; + while(1) { + $8 = $6; + $9 = $5; + $10 = ($8|0)<($9|0); + if (!($10)) { + break; + } + $11 = (__ZN10buf_stream7getByteEv($7)|0); + $12 = $4; + $13 = $6; + $14 = (($12) + ($13)|0); + HEAP8[$14>>0] = $11; + $15 = $6; + $16 = (($15) + 1)|0; + $6 = $16; + } + STACKTOP = sp;return; +} +function __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 4|0); + $6 = HEAP8[$5>>0]|0; + $7 = $6&1; + if (!($7)) { + $8 = ((($4)) + 4|0); + HEAP8[$8>>0] = 1; + } + $9 = $3; + $10 = HEAP32[$9>>2]|0; + HEAP32[$4>>2] = $10; + STACKTOP = sp;return; +} +function __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $7 = $0; + $8 = $1; + $9 = $2; + $13 = $7; + $14 = $8; + $15 = $9; + $16 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0); + HEAP32[$13>>2] = $16; + $17 = HEAP32[$13>>2]|0; + $18 = ($17|0)!=(0); + if (!($18)) { + $69 = $8; + $70 = ((($13)) + 48|0); + $71 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0); + $10 = $71; + $72 = $10; + STACKTOP = sp;return ($72|0); + } + $19 = HEAP32[$13>>2]|0; + $20 = ($19>>>0)<(32); + if (!($20)) { + $67 = ((($13)) + 28|0); + $68 = HEAP32[$67>>2]|0; + $10 = $68; + $72 = $10; + STACKTOP = sp;return ($72|0); + } + $21 = HEAP32[$13>>2]|0; + $22 = ((($13)) + 12|0); + $23 = HEAP32[$22>>2]|0; + $24 = ($21>>>0)<=($23>>>0); + if ($24) { + $25 = $8; + $26 = ((($13)) + 68|0); + $27 = HEAP32[$13>>2]|0; + $28 = (($27) - 1)|0; + $5 = $26; + $6 = $28; + $29 = $5; + $30 = HEAP32[$29>>2]|0; + $31 = $6; + $32 = (($30) + (($31*44)|0)|0); + $33 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0); + $10 = $33; + } else { + $34 = HEAP32[$13>>2]|0; + $35 = ((($13)) + 12|0); + $36 = HEAP32[$35>>2]|0; + $37 = (($34) - ($36))|0; + $11 = $37; + $38 = $8; + $39 = ((($13)) + 68|0); + $40 = HEAP32[$13>>2]|0; + $41 = (($40) - 1)|0; + $3 = $39; + $4 = $41; + $42 = $3; + $43 = HEAP32[$42>>2]|0; + $44 = $4; + $45 = (($43) + (($44*44)|0)|0); + $46 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0); + $10 = $46; + $47 = $8; + $48 = $11; + $49 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($47,$48)|0); + $12 = $49; + $50 = $10; + $51 = $11; + $52 = $50 << $51; + $53 = $12; + $54 = $52 | $53; + $10 = $54; + } + $55 = $10; + $56 = HEAP32[$13>>2]|0; + $57 = (($56) - 1)|0; + $58 = 1 << $57; + $59 = ($55|0)>=($58|0); + if ($59) { + $60 = $10; + $61 = (($60) + 1)|0; + $10 = $61; + $72 = $10; + STACKTOP = sp;return ($72|0); + } else { + $62 = HEAP32[$13>>2]|0; + $63 = 1 << $62; + $64 = (($63) - 1)|0; + $65 = $10; + $66 = (($65) - ($64))|0; + $10 = $66; + $72 = $10; + STACKTOP = sp;return ($72|0); + } + return (0)|0; +} +function __ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $2 = $0; + $3 = $1; + $13 = $2; + $14 = ((($13)) + 8|0); + $15 = HEAP32[$14>>2]|0; + $7 = $15; + $16 = $3; + $17 = ((($16)) + 16|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($18|0)!=(0|0); + if ($19) { + $20 = ((($13)) + 4|0); + $21 = HEAP32[$20>>2]|0; + $22 = ((($13)) + 8|0); + $23 = HEAP32[$22>>2]|0; + $24 = $23 >>> 15; + HEAP32[$22>>2] = $24; + $25 = (($21>>>0) / ($24>>>0))&-1; + $8 = $25; + $26 = $8; + $27 = $3; + $28 = ((($27)) + 40|0); + $29 = HEAP32[$28>>2]|0; + $30 = $26 >>> $29; + $9 = $30; + $31 = $3; + $32 = ((($31)) + 16|0); + $33 = HEAP32[$32>>2]|0; + $34 = $9; + $35 = (($33) + ($34<<2)|0); + $36 = HEAP32[$35>>2]|0; + $5 = $36; + $37 = $3; + $38 = ((($37)) + 16|0); + $39 = HEAP32[$38>>2]|0; + $40 = $9; + $41 = (($40) + 1)|0; + $42 = (($39) + ($41<<2)|0); + $43 = HEAP32[$42>>2]|0; + $44 = (($43) + 1)|0; + $4 = $44; + while(1) { + $45 = $4; + $46 = $5; + $47 = (($46) + 1)|0; + $48 = ($45>>>0)>($47>>>0); + if (!($48)) { + break; + } + $49 = $5; + $50 = $4; + $51 = (($49) + ($50))|0; + $52 = $51 >>> 1; + $10 = $52; + $53 = $3; + $54 = ((($53)) + 8|0); + $55 = HEAP32[$54>>2]|0; + $56 = $10; + $57 = (($55) + ($56<<2)|0); + $58 = HEAP32[$57>>2]|0; + $59 = $8; + $60 = ($58>>>0)>($59>>>0); + $61 = $10; + if ($60) { + $4 = $61; + } else { + $5 = $61; + } + } + $62 = $3; + $63 = ((($62)) + 8|0); + $64 = HEAP32[$63>>2]|0; + $65 = $5; + $66 = (($64) + ($65<<2)|0); + $67 = HEAP32[$66>>2]|0; + $68 = ((($13)) + 8|0); + $69 = HEAP32[$68>>2]|0; + $70 = Math_imul($67, $69)|0; + $6 = $70; + $71 = $5; + $72 = $3; + $73 = ((($72)) + 32|0); + $74 = HEAP32[$73>>2]|0; + $75 = ($71|0)!=($74|0); + if ($75) { + $76 = $3; + $77 = ((($76)) + 8|0); + $78 = HEAP32[$77>>2]|0; + $79 = $5; + $80 = (($79) + 1)|0; + $81 = (($78) + ($80<<2)|0); + $82 = HEAP32[$81>>2]|0; + $83 = ((($13)) + 8|0); + $84 = HEAP32[$83>>2]|0; + $85 = Math_imul($82, $84)|0; + $7 = $85; + } + } else { + $5 = 0; + $6 = 0; + $86 = ((($13)) + 8|0); + $87 = HEAP32[$86>>2]|0; + $88 = $87 >>> 15; + HEAP32[$86>>2] = $88; + $89 = $3; + $90 = HEAP32[$89>>2]|0; + $4 = $90; + $91 = $90 >>> 1; + $11 = $91; + while(1) { + $92 = ((($13)) + 8|0); + $93 = HEAP32[$92>>2]|0; + $94 = $3; + $95 = ((($94)) + 8|0); + $96 = HEAP32[$95>>2]|0; + $97 = $11; + $98 = (($96) + ($97<<2)|0); + $99 = HEAP32[$98>>2]|0; + $100 = Math_imul($93, $99)|0; + $12 = $100; + $101 = $12; + $102 = ((($13)) + 4|0); + $103 = HEAP32[$102>>2]|0; + $104 = ($101>>>0)>($103>>>0); + $105 = $11; + if ($104) { + $4 = $105; + $106 = $12; + $7 = $106; + } else { + $5 = $105; + $107 = $12; + $6 = $107; + } + $108 = $5; + $109 = $4; + $110 = (($108) + ($109))|0; + $111 = $110 >>> 1; + $11 = $111; + $112 = $5; + $113 = ($111|0)!=($112|0); + if (!($113)) { + break; + } + } + } + $114 = $6; + $115 = ((($13)) + 4|0); + $116 = HEAP32[$115>>2]|0; + $117 = (($116) - ($114))|0; + HEAP32[$115>>2] = $117; + $118 = $7; + $119 = $6; + $120 = (($118) - ($119))|0; + $121 = ((($13)) + 8|0); + HEAP32[$121>>2] = $120; + $122 = ((($13)) + 8|0); + $123 = HEAP32[$122>>2]|0; + $124 = ($123>>>0)<(16777216); + if ($124) { + __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($13); + } + $125 = $3; + $126 = ((($125)) + 12|0); + $127 = HEAP32[$126>>2]|0; + $128 = $5; + $129 = (($127) + ($128<<2)|0); + $130 = HEAP32[$129>>2]|0; + $131 = (($130) + 1)|0; + HEAP32[$129>>2] = $131; + $132 = $3; + $133 = ((($132)) + 28|0); + $134 = HEAP32[$133>>2]|0; + $135 = (($134) + -1)|0; + HEAP32[$133>>2] = $135; + $136 = ($135|0)==(0); + if (!($136)) { + $138 = $5; + STACKTOP = sp;return ($138|0); + } + $137 = $3; + __ZN6laszip6models10arithmetic6updateEv($137); + $138 = $5; + STACKTOP = sp;return ($138|0); +} +function __ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $3 = $0; + $4 = $1; + $8 = $3; + $9 = $4; + $10 = ($9|0)!=(0); + $11 = $4; + $12 = ($11>>>0)<=(32); + $or$cond = $10 & $12; + if (!($or$cond)) { + ___assert_fail((5409|0),(5430|0),139,(5499|0)); + // unreachable; + } + $13 = $4; + $14 = ($13>>>0)>(19); + if ($14) { + $15 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($8)|0); + $16 = $15&65535; + $5 = $16; + $17 = $4; + $18 = (($17) - 16)|0; + $4 = $18; + $19 = $4; + $20 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($8,$19)|0); + $21 = $20 << 16; + $6 = $21; + $22 = $6; + $23 = $5; + $24 = $22 | $23; + $2 = $24; + $43 = $2; + STACKTOP = sp;return ($43|0); + } + $25 = ((($8)) + 4|0); + $26 = HEAP32[$25>>2]|0; + $27 = $4; + $28 = ((($8)) + 8|0); + $29 = HEAP32[$28>>2]|0; + $30 = $29 >>> $27; + HEAP32[$28>>2] = $30; + $31 = (($26>>>0) / ($30>>>0))&-1; + $7 = $31; + $32 = ((($8)) + 8|0); + $33 = HEAP32[$32>>2]|0; + $34 = $7; + $35 = Math_imul($33, $34)|0; + $36 = ((($8)) + 4|0); + $37 = HEAP32[$36>>2]|0; + $38 = (($37) - ($35))|0; + HEAP32[$36>>2] = $38; + $39 = ((($8)) + 8|0); + $40 = HEAP32[$39>>2]|0; + $41 = ($40>>>0)<(16777216); + if ($41) { + __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($8); + } + $42 = $7; + $2 = $42; + $43 = $2; + STACKTOP = sp;return ($43|0); +} +function __ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + var $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $6 = $2; + $7 = $3; + $8 = ((($7)) + 8|0); + $9 = HEAP32[$8>>2]|0; + $10 = ((($6)) + 8|0); + $11 = HEAP32[$10>>2]|0; + $12 = $11 >>> 13; + $13 = Math_imul($9, $12)|0; + $4 = $13; + $14 = ((($6)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $4; + $17 = ($15>>>0)>=($16>>>0); + $18 = $17&1; + $5 = $18; + $19 = $5; + $20 = ($19|0)==(0); + $21 = $4; + if ($20) { + $22 = ((($6)) + 8|0); + HEAP32[$22>>2] = $21; + $23 = $3; + $24 = ((($23)) + 12|0); + $25 = HEAP32[$24>>2]|0; + $26 = (($25) + 1)|0; + HEAP32[$24>>2] = $26; + } else { + $27 = ((($6)) + 4|0); + $28 = HEAP32[$27>>2]|0; + $29 = (($28) - ($21))|0; + HEAP32[$27>>2] = $29; + $30 = $4; + $31 = ((($6)) + 8|0); + $32 = HEAP32[$31>>2]|0; + $33 = (($32) - ($30))|0; + HEAP32[$31>>2] = $33; + } + $34 = ((($6)) + 8|0); + $35 = HEAP32[$34>>2]|0; + $36 = ($35>>>0)<(16777216); + if ($36) { + __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($6); + } + $37 = $3; + $38 = ((($37)) + 4|0); + $39 = HEAP32[$38>>2]|0; + $40 = (($39) + -1)|0; + HEAP32[$38>>2] = $40; + $41 = ($40|0)==(0); + if (!($41)) { + $43 = $5; + STACKTOP = sp;return ($43|0); + } + $42 = $3; + __ZN6laszip6models14arithmetic_bit6updateEv($42); + $43 = $5; + STACKTOP = sp;return ($43|0); +} +function __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + while(1) { + $3 = ((($2)) + 4|0); + $4 = HEAP32[$3>>2]|0; + $5 = $4 << 8; + $6 = HEAP32[$2>>2]|0; + $7 = (__ZN10buf_stream7getByteEv($6)|0); + $8 = $7&255; + $9 = $5 | $8; + $10 = ((($2)) + 4|0); + HEAP32[$10>>2] = $9; + $11 = ((($2)) + 8|0); + $12 = HEAP32[$11>>2]|0; + $13 = $12 << 8; + HEAP32[$11>>2] = $13; + $14 = ($13>>>0)<(16777216); + if (!($14)) { + break; + } + } + STACKTOP = sp;return; +} +function __ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($0) { + $0 = $0|0; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $3 = $1; + $4 = ((($3)) + 4|0); + $5 = HEAP32[$4>>2]|0; + $6 = ((($3)) + 8|0); + $7 = HEAP32[$6>>2]|0; + $8 = $7 >>> 16; + HEAP32[$6>>2] = $8; + $9 = (($5>>>0) / ($8>>>0))&-1; + $2 = $9; + $10 = ((($3)) + 8|0); + $11 = HEAP32[$10>>2]|0; + $12 = $2; + $13 = Math_imul($11, $12)|0; + $14 = ((($3)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = (($15) - ($13))|0; + HEAP32[$14>>2] = $16; + $17 = ((($3)) + 8|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($18>>>0)<(16777216); + if ($19) { + __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($3); + } + $20 = $2; + $21 = ($20>>>0)<(65536); + if ($21) { + $22 = $2; + $23 = $22&65535; + STACKTOP = sp;return ($23|0); + } else { + ___assert_fail((5508|0),(5430|0),172,(5522|0)); + // unreachable; + } + return (0)|0; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 768; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2604); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($7); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2628); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0); + $4 = ((($2)) + 160|0); + HEAP8[$4>>0] = 0; + $5 = ((($2)) + 161|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 164|0); + __ZN6laszip7formats20standard_diff_methodIjEC2Ev($6); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2604); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats20standard_diff_methodIjEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4|0); + HEAP8[$3>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerD2Ev($3); + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $6 = sp; + $3 = $0; + $4 = $1; + $5 = $2; + $7 = $3; + $8 = ((($7)) + 161|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9&1; + if (!($10)) { + $11 = ((($7)) + 80|0); + __ZN6laszip13decompressors7integer4initEv($11); + } + $12 = ((($7)) + 164|0); + $13 = (__ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($12)|0); + if ($13) { + $14 = ((($7)) + 80|0); + $15 = $4; + $16 = ((($7)) + 164|0); + $17 = HEAP32[$16>>2]|0; + $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0); + HEAP32[$6>>2] = $18; + $19 = HEAP32[$6>>2]|0; + $20 = $5; + __ZN6laszip7formats7packersIjE4packEjPc($19,$20); + $26 = $5; + $27 = ((($26)) + 4|0); + $5 = $27; + $28 = ((($7)) + 164|0); + __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6); + $29 = $5; + STACKTOP = sp;return ($29|0); + } else { + $21 = $4; + $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0); + $23 = $5; + __ZN10buf_stream8getBytesEPhi($22,$23,4); + $24 = $5; + $25 = (__ZN6laszip7formats7packersIjE6unpackEPKc($24)|0); + HEAP32[$6>>2] = $25; + $26 = $5; + $27 = ((($26)) + 4|0); + $5 = $27; + $28 = ((($7)) + 164|0); + __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6); + $29 = $5; + STACKTOP = sp;return ($29|0); + } + return (0)|0; +} +function __ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 4|0); + $4 = HEAP8[$3>>0]|0; + $5 = $4&1; + STACKTOP = sp;return ($5|0); +} +function __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 4|0); + $6 = HEAP8[$5>>0]|0; + $7 = $6&1; + if (!($7)) { + $8 = ((($4)) + 4|0); + HEAP8[$8>>0] = 1; + } + $9 = $3; + $10 = HEAP32[$9>>2]|0; + HEAP32[$4>>2] = $10; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 808; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(172)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(176)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2656); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($7); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2680); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0); + $4 = ((($2)) + 160|0); + HEAP8[$4>>0] = 0; + $5 = ((($2)) + 161|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIaEC2Ev($6); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2656); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats20standard_diff_methodIaEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 1|0); + HEAP8[$3>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerD2Ev($3); + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $6 = sp + 12|0; + $3 = $0; + $4 = $1; + $5 = $2; + $7 = $3; + $8 = ((($7)) + 161|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9&1; + if (!($10)) { + $11 = ((($7)) + 80|0); + __ZN6laszip13decompressors7integer4initEv($11); + } + $12 = ((($7)) + 162|0); + $13 = (__ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($12)|0); + if ($13) { + $14 = ((($7)) + 80|0); + $15 = $4; + $16 = ((($7)) + 162|0); + $17 = HEAP8[$16>>0]|0; + $18 = $17 << 24 >> 24; + $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); + $20 = $19&255; + HEAP8[$6>>0] = $20; + $21 = HEAP8[$6>>0]|0; + $22 = $5; + __ZN6laszip7formats7packersIaE4packEaPc($21,$22); + $28 = $5; + $29 = ((($28)) + 1|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } else { + $23 = $4; + $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); + $25 = $5; + __ZN10buf_stream8getBytesEPhi($24,$25,1); + $26 = $5; + $27 = (__ZN6laszip7formats7packersIaE6unpackEPKc($26)|0); + HEAP8[$6>>0] = $27; + $28 = $5; + $29 = ((($28)) + 1|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } + return (0)|0; +} +function __ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 1|0); + $4 = HEAP8[$3>>0]|0; + $5 = $4&1; + STACKTOP = sp;return ($5|0); +} +function __ZN6laszip7formats7packersIaE4packEaPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + HEAP8[$5>>0] = $4; + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersIaE6unpackEPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP8[$2>>0]|0; + STACKTOP = sp;return ($3|0); +} +function __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 1|0); + $6 = HEAP8[$5>>0]|0; + $7 = $6&1; + if (!($7)) { + $8 = ((($4)) + 1|0); + HEAP8[$8>>0] = 1; + } + $9 = $3; + $10 = HEAP8[$9>>0]|0; + HEAP8[$4>>0] = $10; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 848; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2708); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($7); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2732); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0); + $4 = ((($2)) + 160|0); + HEAP8[$4>>0] = 0; + $5 = ((($2)) + 161|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIsEC2Ev($6); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2708); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats20standard_diff_methodIsEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 2|0); + HEAP8[$3>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerD2Ev($3); + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $6 = sp + 12|0; + $3 = $0; + $4 = $1; + $5 = $2; + $7 = $3; + $8 = ((($7)) + 161|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9&1; + if (!($10)) { + $11 = ((($7)) + 80|0); + __ZN6laszip13decompressors7integer4initEv($11); + } + $12 = ((($7)) + 162|0); + $13 = (__ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($12)|0); + if ($13) { + $14 = ((($7)) + 80|0); + $15 = $4; + $16 = ((($7)) + 162|0); + $17 = HEAP16[$16>>1]|0; + $18 = $17 << 16 >> 16; + $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); + $20 = $19&65535; + HEAP16[$6>>1] = $20; + $21 = HEAP16[$6>>1]|0; + $22 = $5; + __ZN6laszip7formats7packersIsE4packEsPc($21,$22); + $28 = $5; + $29 = ((($28)) + 2|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } else { + $23 = $4; + $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); + $25 = $5; + __ZN10buf_stream8getBytesEPhi($24,$25,2); + $26 = $5; + $27 = (__ZN6laszip7formats7packersIsE6unpackEPKc($26)|0); + HEAP16[$6>>1] = $27; + $28 = $5; + $29 = ((($28)) + 2|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } + return (0)|0; +} +function __ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 2|0); + $4 = HEAP8[$3>>0]|0; + $5 = $4&1; + STACKTOP = sp;return ($5|0); +} +function __ZN6laszip7formats7packersIsE4packEsPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = $3; + __ZN6laszip7formats7packersItE4packEtPc($4,$5); + STACKTOP = sp;return; +} +function __ZN6laszip7formats7packersIsE6unpackEPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = (__ZN6laszip7formats7packersItE6unpackEPKc($2)|0); + STACKTOP = sp;return ($3|0); +} +function __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 2|0); + $6 = HEAP8[$5>>0]|0; + $7 = $6&1; + if (!($7)) { + $8 = ((($4)) + 2|0); + HEAP8[$8>>0] = 1; + } + $9 = $3; + $10 = HEAP16[$9>>1]|0; + HEAP16[$4>>1] = $10; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 888; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(172)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); + $$byval_copy = sp + 136|0; + $16 = sp; + $21 = sp + 141|0; + $32 = sp + 140|0; + $34 = sp + 8|0; + $35 = sp + 4|0; + $33 = $0; + $36 = $33; + $37 = ((($36)) + 8|0); + $38 = (__Znwj(176)|0); + $39 = ((($36)) + 4|0); + $40 = HEAP32[$39>>2]|0; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($38,$40); + ;HEAP32[$35>>2]=0|0; + ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; + __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); + $30 = $37; + $31 = $34; + $41 = $30; + $42 = ((($41)) + 4|0); + $43 = HEAP32[$42>>2]|0; + $29 = $41; + $44 = $29; + $45 = ((($44)) + 8|0); + $28 = $45; + $46 = $28; + $27 = $46; + $47 = $27; + $48 = HEAP32[$47>>2]|0; + $49 = ($43>>>0)<($48>>>0); + if ($49) { + $24 = $32; + $25 = $41; + $26 = 1; + $3 = $41; + $50 = $3; + $51 = ((($50)) + 8|0); + $2 = $51; + $52 = $2; + $1 = $52; + $53 = $1; + $54 = ((($41)) + 4|0); + $55 = HEAP32[$54>>2]|0; + $4 = $55; + $56 = $4; + $57 = $31; + $5 = $57; + $58 = $5; + $18 = $53; + $19 = $56; + $20 = $58; + $59 = $18; + $60 = $19; + $61 = $20; + $17 = $61; + $62 = $17; + ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; + $13 = $59; + $14 = $60; + $15 = $62; + $63 = $13; + $64 = $14; + $65 = $15; + $12 = $65; + $66 = $12; + $9 = $63; + $10 = $64; + $11 = $66; + $67 = $10; + $68 = $11; + $8 = $68; + $69 = $8; + $6 = $67; + $7 = $69; + $70 = $6; + $71 = $7; + $72 = HEAP32[$71>>2]|0; + HEAP32[$70>>2] = $72; + $73 = ((($70)) + 4|0); + $74 = $7; + $75 = ((($74)) + 4|0); + $76 = HEAP32[$75>>2]|0; + HEAP32[$73>>2] = $76; + $77 = $7; + HEAP32[$77>>2] = 0; + $78 = $7; + $79 = ((($78)) + 4|0); + HEAP32[$79>>2] = 0; + $22 = $32; + $80 = ((($41)) + 4|0); + $81 = HEAP32[$80>>2]|0; + $82 = ((($81)) + 8|0); + HEAP32[$80>>2] = $82; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } else { + $83 = $31; + $23 = $83; + $84 = $23; + __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); + STACKTOP = sp;return; + } +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2760); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($7); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2784); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0); + $4 = ((($2)) + 160|0); + HEAP8[$4>>0] = 0; + $5 = ((($2)) + 161|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIhEC2Ev($6); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2760); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats20standard_diff_methodIhEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 1|0); + HEAP8[$3>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerD2Ev($3); + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $6 = sp + 12|0; + $3 = $0; + $4 = $1; + $5 = $2; + $7 = $3; + $8 = ((($7)) + 161|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9&1; + if (!($10)) { + $11 = ((($7)) + 80|0); + __ZN6laszip13decompressors7integer4initEv($11); + } + $12 = ((($7)) + 162|0); + $13 = (__ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($12)|0); + if ($13) { + $14 = ((($7)) + 80|0); + $15 = $4; + $16 = ((($7)) + 162|0); + $17 = HEAP8[$16>>0]|0; + $18 = $17&255; + $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); + $20 = $19&255; + HEAP8[$6>>0] = $20; + $21 = HEAP8[$6>>0]|0; + $22 = $5; + __ZN6laszip7formats7packersIhE4packEhPc($21,$22); + $28 = $5; + $29 = ((($28)) + 1|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } else { + $23 = $4; + $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); + $25 = $5; + __ZN10buf_stream8getBytesEPhi($24,$25,1); + $26 = $5; + $27 = (__ZN6laszip7formats7packersIhE6unpackEPKc($26)|0); + HEAP8[$6>>0] = $27; + $28 = $5; + $29 = ((($28)) + 1|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } + return (0)|0; +} +function __ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 1|0); + $4 = HEAP8[$3>>0]|0; + $5 = $4&1; + STACKTOP = sp;return ($5|0); +} +function __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 1|0); + $6 = HEAP8[$5>>0]|0; + $7 = $6&1; + if (!($7)) { + $8 = ((($4)) + 1|0); + HEAP8[$8>>0] = 1; + } + $9 = $3; + $10 = HEAP8[$9>>0]|0; + HEAP8[$4>>0] = $10; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 928; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + __ZN6laszip7formats10base_fieldC2Ev($4); + HEAP32[$4>>2] = (2812); + $5 = ((($4)) + 4|0); + $6 = $3; + HEAP32[$5>>2] = $6; + $7 = ((($4)) + 8|0); + __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($7); + STACKTOP = sp;return; +} +function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); + $vararg_buffer = sp + 16|0; + $38 = sp + 124|0; + $39 = sp + 120|0; + $40 = sp + 8|0; + $41 = sp; + $62 = sp + 36|0; + $65 = sp + 24|0; + $66 = sp + 269|0; + $67 = sp + 268|0; + $63 = $0; + $64 = $1; + $68 = $63; + $69 = $64; + HEAP32[$68>>2] = $69; + $70 = $64; + $61 = $65; + HEAP32[$62>>2] = $70; + $71 = $61; + $59 = $71; + $60 = $62; + $72 = $59; + $73 = $60; + $58 = $73; + $74 = $58; + $56 = $72; + $57 = $74; + $75 = $56; + $76 = $57; + $55 = $76; + $77 = $55; + $78 = HEAP32[$77>>2]|0; + HEAP32[$75>>2] = $78; + $79 = (__Znwj(16)|0); + $80 = $64; + $54 = $67; + ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; + ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; + $37 = $79; + HEAP32[$38>>2] = $80; + $81 = $37; + $35 = $81; + $36 = 0; + $82 = $35; + $83 = $36; + $33 = $82; + $34 = $83; + $84 = $33; + HEAP32[$84>>2] = (3468); + $85 = ((($84)) + 4|0); + $86 = $34; + HEAP32[$85>>2] = $86; + HEAP32[$82>>2] = (3488); + $87 = ((($82)) + 8|0); + $88 = $36; + HEAP32[$87>>2] = $88; + HEAP32[$81>>2] = (2836); + $89 = ((($81)) + 12|0); + $9 = $41; + $90 = $9; + $18 = $39; + $19 = $38; + $20 = $90; + $91 = $18; + $92 = $19; + $17 = $92; + $93 = $17; + $11 = $91; + $12 = $93; + $94 = $11; + $95 = $12; + $10 = $95; + $96 = $10; + $97 = HEAP32[$96>>2]|0; + HEAP32[$94>>2] = $97; + $98 = $20; + $13 = $98; + $99 = $13; + $15 = $91; + $16 = $99; + $100 = $16; + $14 = $100; + $21 = $40; + $101 = $21; + $30 = $89; + $31 = $39; + $32 = $101; + $102 = $30; + $103 = $31; + $29 = $103; + $104 = $29; + $23 = $102; + $24 = $104; + $105 = $23; + $106 = $24; + $22 = $106; + $107 = $22; + ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; + $108 = $32; + $25 = $108; + $109 = $25; + $27 = $102; + $28 = $109; + $110 = $28; + $26 = $110; + $111 = ((($68)) + 4|0); + HEAP32[$111>>2] = $79; + $7 = $65; + $112 = $7; + $6 = $112; + $113 = $6; + $5 = $113; + $114 = $5; + $115 = HEAP32[$114>>2]|0; + $8 = $115; + $4 = $112; + $116 = $4; + $3 = $116; + $117 = $3; + HEAP32[$117>>2] = 0; + $118 = $64; + $119 = $64; + HEAP32[$vararg_buffer>>2] = $118; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $119; + __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); + $53 = $65; + $120 = $53; + $50 = $120; + $51 = 0; + $121 = $50; + $49 = $121; + $122 = $49; + $48 = $122; + $123 = $48; + $124 = HEAP32[$123>>2]|0; + $52 = $124; + $125 = $51; + $45 = $121; + $126 = $45; + $44 = $126; + $127 = $44; + HEAP32[$127>>2] = $125; + $128 = $52; + $129 = ($128|0)!=(0|0); + if (!($129)) { + STACKTOP = sp;return; + } + $43 = $121; + $130 = $43; + $42 = $130; + $131 = $42; + $132 = $52; + $46 = $131; + $47 = $132; + $133 = $47; + $134 = ($133|0)==(0|0); + if ($134) { + STACKTOP = sp;return; + } + $135 = HEAP32[$133>>2]|0; + $136 = ((($135)) + 4|0); + $137 = HEAP32[$136>>2]|0; + FUNCTION_TABLE_vi[$137 & 511]($133); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0); + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0); + $4 = ((($2)) + 160|0); + HEAP8[$4>>0] = 0; + $5 = ((($2)) + 161|0); + HEAP8[$5>>0] = 0; + $6 = ((($2)) + 162|0); + __ZN6laszip7formats20standard_diff_methodItEC2Ev($6); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + HEAP32[$2>>2] = (2812); + $3 = ((($2)) + 8|0); + __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($3); + __ZN6laszip7formats10base_fieldD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEE13decompressRawEPc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 8|0); + $6 = ((($4)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $3; + $9 = (__ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); + STACKTOP = sp;return ($9|0); +} +function __ZN6laszip7formats20standard_diff_methodItEC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 2|0); + HEAP8[$3>>0] = 0; + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 80|0); + __ZN6laszip13decompressors7integerD2Ev($3); + __ZN6laszip11compressors7integerD2Ev($2); + STACKTOP = sp;return; +} +function __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $6 = sp + 12|0; + $3 = $0; + $4 = $1; + $5 = $2; + $7 = $3; + $8 = ((($7)) + 161|0); + $9 = HEAP8[$8>>0]|0; + $10 = $9&1; + if (!($10)) { + $11 = ((($7)) + 80|0); + __ZN6laszip13decompressors7integer4initEv($11); + } + $12 = ((($7)) + 162|0); + $13 = (__ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($12)|0); + if ($13) { + $14 = ((($7)) + 80|0); + $15 = $4; + $16 = ((($7)) + 162|0); + $17 = HEAP16[$16>>1]|0; + $18 = $17&65535; + $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); + $20 = $19&65535; + HEAP16[$6>>1] = $20; + $21 = HEAP16[$6>>1]|0; + $22 = $5; + __ZN6laszip7formats7packersItE4packEtPc($21,$22); + $28 = $5; + $29 = ((($28)) + 2|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } else { + $23 = $4; + $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); + $25 = $5; + __ZN10buf_stream8getBytesEPhi($24,$25,2); + $26 = $5; + $27 = (__ZN6laszip7formats7packersItE6unpackEPKc($26)|0); + HEAP16[$6>>1] = $27; + $28 = $5; + $29 = ((($28)) + 2|0); + $5 = $29; + $30 = ((($7)) + 162|0); + __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6); + $31 = $5; + STACKTOP = sp;return ($31|0); + } + return (0)|0; +} +function __ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ((($2)) + 2|0); + $4 = HEAP8[$3>>0]|0; + $5 = $4&1; + STACKTOP = sp;return ($5|0); +} +function __ZN6laszip7formats20standard_diff_methodItE4pushERKt($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $1; + $4 = $2; + $5 = ((($4)) + 2|0); + $6 = HEAP8[$5>>0]|0; + $7 = $6&1; + if (!($7)) { + $8 = ((($4)) + 2|0); + HEAP8[$8>>0] = 1; + } + $9 = $3; + $10 = HEAP16[$9>>1]|0; + HEAP16[$4>>1] = $10; + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__214__shared_countD2Ev($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); + __ZdlPv($2); + STACKTOP = sp;return; +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $15 = $0; + $16 = $15; + $17 = ((($16)) + 12|0); + $14 = $17; + $18 = $14; + $13 = $18; + $19 = $13; + $6 = $19; + $20 = $6; + $5 = $20; + $21 = $5; + $22 = ((($16)) + 12|0); + $2 = $22; + $23 = $2; + $1 = $23; + $24 = $1; + $4 = $24; + $25 = $4; + $3 = $25; + $26 = $3; + $27 = HEAP32[$26>>2]|0; + $7 = $21; + $8 = $27; + $28 = $8; + $29 = ($28|0)==(0|0); + if (!($29)) { + $30 = HEAP32[$28>>2]|0; + $31 = ((($30)) + 4|0); + $32 = HEAP32[$31>>2]|0; + FUNCTION_TABLE_vi[$32 & 511]($28); + } + $33 = ((($16)) + 12|0); + $10 = $33; + $34 = $10; + $9 = $34; + $35 = $9; + $12 = $35; + $36 = $12; + $11 = $36; + STACKTOP = sp;return; +} +function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $9 = $0; + $10 = $1; + $11 = $9; + $12 = $10; + $7 = $12; + $8 = 968; + $13 = $7; + $14 = ((($13)) + 4|0); + $15 = HEAP32[$14>>2]|0; + $16 = $8; + $17 = ((($16)) + 4|0); + $18 = HEAP32[$17>>2]|0; + $19 = ($15|0)==($18|0); + if (!($19)) { + $26 = 0; + STACKTOP = sp;return ($26|0); + } + $20 = ((($11)) + 12|0); + $3 = $20; + $21 = $3; + $2 = $21; + $22 = $2; + $5 = $22; + $23 = $5; + $4 = $23; + $24 = $4; + $6 = $24; + $25 = $6; + $26 = $25; + STACKTOP = sp;return ($26|0); +} +function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { + $0 = $0|0; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $14 = sp + 52|0; + $13 = $0; + $15 = $13; + $16 = ((($15)) + 12|0); + $12 = $16; + $17 = $12; + $11 = $17; + $18 = $11; + $5 = $14; + $6 = $18; + $19 = ((($15)) + 12|0); + $2 = $19; + $20 = $2; + $1 = $20; + $4 = $15; + $21 = $4; + $3 = $21; + $22 = $3; + $8 = $14; + $9 = $22; + $10 = 1; + $23 = $9; + $7 = $23; + $24 = $7; + __ZdlPv($24); + STACKTOP = sp;return; +} +function __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv() { + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZN10emscripten8internal13getActualTypeI6LASZipEEPKvPT_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = (__ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($2)|0); + STACKTOP = sp;return ($3|0); +} +function __ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (0|0); +} +function __ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (0|0); +} +function __ZN10emscripten8internal14raw_destructorI6LASZipEEvPT_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ($2|0)==(0|0); + if (!($3)) { + __ZN6LASZipD2Ev($2); + __ZdlPv($2); + } + STACKTOP = sp;return; +} +function __ZN10emscripten8internal6TypeIDI6LASZipE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11NoBaseClass3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (0|0); +} +function __ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return (976|0); +} +function __ZN6LASZipD2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); + $6 = sp + 128|0; + $12 = sp + 104|0; + $17 = sp + 80|0; + $23 = sp + 56|0; + $29 = sp + 32|0; + $34 = sp + 8|0; + $35 = $0; + $36 = $35; + $33 = $36; + $37 = $33; + $32 = $34; + $38 = $32; + HEAP32[$38>>2] = 0; + $39 = ((($38)) + 4|0); + HEAP32[$39>>2] = 0; + $30 = $34; + $31 = $37; + $40 = $30; + $41 = $31; + $27 = $40; + $28 = $41; + $42 = $27; + $26 = $42; + $43 = $26; + $44 = HEAP32[$43>>2]|0; + HEAP32[$29>>2] = $44; + $45 = $28; + $24 = $45; + $46 = $24; + $47 = HEAP32[$46>>2]|0; + $48 = $27; + HEAP32[$48>>2] = $47; + $25 = $29; + $49 = $25; + $50 = HEAP32[$49>>2]|0; + $51 = $28; + HEAP32[$51>>2] = $50; + $52 = ((($40)) + 4|0); + $53 = $31; + $54 = ((($53)) + 4|0); + $21 = $52; + $22 = $54; + $55 = $21; + $20 = $55; + $56 = $20; + $57 = HEAP32[$56>>2]|0; + HEAP32[$23>>2] = $57; + $58 = $22; + $18 = $58; + $59 = $18; + $60 = HEAP32[$59>>2]|0; + $61 = $21; + HEAP32[$61>>2] = $60; + $19 = $23; + $62 = $19; + $63 = HEAP32[$62>>2]|0; + $64 = $22; + HEAP32[$64>>2] = $63; + __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($34); + $65 = ((($36)) + 8|0); + $16 = $65; + $66 = $16; + $15 = $17; + $67 = $15; + HEAP32[$67>>2] = 0; + $68 = ((($67)) + 4|0); + HEAP32[$68>>2] = 0; + $13 = $17; + $14 = $66; + $69 = $13; + $70 = $14; + $10 = $69; + $11 = $70; + $71 = $10; + $9 = $71; + $72 = $9; + $73 = HEAP32[$72>>2]|0; + HEAP32[$12>>2] = $73; + $74 = $11; + $7 = $74; + $75 = $7; + $76 = HEAP32[$75>>2]|0; + $77 = $10; + HEAP32[$77>>2] = $76; + $8 = $12; + $78 = $8; + $79 = HEAP32[$78>>2]|0; + $80 = $11; + HEAP32[$80>>2] = $79; + $81 = ((($69)) + 4|0); + $82 = $14; + $83 = ((($82)) + 4|0); + $4 = $81; + $5 = $83; + $84 = $4; + $3 = $84; + $85 = $3; + $86 = HEAP32[$85>>2]|0; + HEAP32[$6>>2] = $86; + $87 = $5; + $1 = $87; + $88 = $1; + $89 = HEAP32[$88>>2]|0; + $90 = $4; + HEAP32[$90>>2] = $89; + $2 = $6; + $91 = $2; + $92 = HEAP32[$91>>2]|0; + $93 = $5; + HEAP32[$93>>2] = $92; + __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($17); + $94 = ((($36)) + 8|0); + __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($94); + __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($36); + STACKTOP = sp;return; +} +function __ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (976|0); +} +function __ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (984|0); +} +function __ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1000|0); +} +function __ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (16424|0); +} +function __ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (16427|0); +} +function __ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (16429|0); +} +function __ZN10emscripten8internal12operator_newI6LASZipJEEEPT_DpOT0_() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__Znwj(16)|0); + __ZN6LASZipC2Ev($0); + return ($0|0); +} +function __ZN10emscripten8internal7InvokerIP6LASZipJEE6invokeEPFS3_vE($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = (FUNCTION_TABLE_i[$2 & 255]()|0); + $4 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($3)|0); + STACKTOP = sp;return ($4|0); +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 1; +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2856|0); +} +function __ZN6LASZipC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $3; + $2 = $4; + $5 = $2; + HEAP32[$5>>2] = 0; + $6 = ((($5)) + 4|0); + HEAP32[$6>>2] = 0; + $7 = ((($4)) + 8|0); + $1 = $7; + $8 = $1; + HEAP32[$8>>2] = 0; + $9 = ((($8)) + 4|0); + HEAP32[$9>>2] = 0; + STACKTOP = sp;return; +} +function __ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = $0; + $5 = $1; + $6 = $2; + $7 = $3; + $8 = $5; + $9 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($8)|0); + $10 = $4; + $$field = HEAP32[$10>>2]|0; + $$index1 = ((($10)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + $11 = $$field2 >> 1; + $12 = (($9) + ($11)|0); + $13 = $$field2 & 1; + $14 = ($13|0)!=(0); + if ($14) { + $15 = HEAP32[$12>>2]|0; + $16 = (($15) + ($$field)|0); + $17 = HEAP32[$16>>2]|0; + $23 = $17; + } else { + $18 = $$field; + $23 = $18; + } + $19 = $6; + $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0); + $21 = $7; + $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0); + FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22); + STACKTOP = sp;return; +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 4; +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($0) { + $0 = $0|0; + var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__Znwj(8)|0); + $3 = $1; + $$field = HEAP32[$3>>2]|0; + $$index1 = ((($3)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + HEAP32[$2>>2] = $$field; + $$index5 = ((($2)) + 4|0); + HEAP32[$$index5>>2] = $$field2; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2860|0); +} +function __ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (16432|0); +} +function __ZN10emscripten8internal13MethodInvokerIM6LASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $4; + $7 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($6)|0); + $8 = $3; + $$field = HEAP32[$8>>2]|0; + $$index1 = ((($8)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + $9 = $$field2 >> 1; + $10 = (($7) + ($9)|0); + $11 = $$field2 & 1; + $12 = ($11|0)!=(0); + if ($12) { + $13 = HEAP32[$10>>2]|0; + $14 = (($13) + ($$field)|0); + $15 = HEAP32[$14>>2]|0; + $19 = $15; + } else { + $16 = $$field; + $19 = $16; + } + $17 = $5; + $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0); + FUNCTION_TABLE_vii[$19 & 255]($10,$18); + STACKTOP = sp;return; +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 3; +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($0) { + $0 = $0|0; + var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__Znwj(8)|0); + $3 = $1; + $$field = HEAP32[$3>>2]|0; + $$index1 = ((($3)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + HEAP32[$2>>2] = $$field; + $$index5 = ((($2)) + 4|0); + HEAP32[$$index5>>2] = $$field2; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2876|0); +} +function __ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (16438|0); +} +function __ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = sp; + $2 = $0; + $3 = $1; + $5 = $3; + $6 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($5)|0); + $7 = $2; + $$field = HEAP32[$7>>2]|0; + $$index1 = ((($7)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + $8 = $$field2 >> 1; + $9 = (($6) + ($8)|0); + $10 = $$field2 & 1; + $11 = ($10|0)!=(0); + if ($11) { + $12 = HEAP32[$9>>2]|0; + $13 = (($12) + ($$field)|0); + $14 = HEAP32[$13>>2]|0; + $16 = $14; + } else { + $15 = $$field; + $16 = $15; + } + $17 = (FUNCTION_TABLE_ii[$16 & 255]($9)|0); + HEAP32[$4>>2] = $17; + $18 = (__ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($4)|0); + STACKTOP = sp;return ($18|0); +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 2; +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($0) { + $0 = $0|0; + var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__Znwj(8)|0); + $3 = $1; + $$field = HEAP32[$3>>2]|0; + $$index1 = ((($3)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + HEAP32[$2>>2] = $$field; + $$index5 = ((($2)) + 4|0); + HEAP32[$$index5>>2] = $$field2; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = HEAP32[$2>>2]|0; + STACKTOP = sp;return ($3|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2888|0); +} +function __ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (16443|0); +} +function __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv() { + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = (__ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($2)|0); + STACKTOP = sp;return ($3|0); +} +function __ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (0|0); +} +function __ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (0|0); +} +function __ZN10emscripten8internal14raw_destructorI13DynamicLASZipEEvPT_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = ($2|0)==(0|0); + if (!($3)) { + __ZN13DynamicLASZipD2Ev($2); + __ZdlPv($2); + } + STACKTOP = sp;return; +} +function __ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return (1016|0); +} +function __ZN13DynamicLASZipD2Ev($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $99 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0); + $6 = sp + 200|0; + $12 = sp + 176|0; + $17 = sp + 152|0; + $23 = sp + 128|0; + $29 = sp + 104|0; + $34 = sp + 80|0; + $40 = sp + 56|0; + $46 = sp + 32|0; + $51 = sp + 8|0; + $52 = $0; + $53 = $52; + $50 = $53; + $54 = $50; + $49 = $51; + $55 = $49; + HEAP32[$55>>2] = 0; + $56 = ((($55)) + 4|0); + HEAP32[$56>>2] = 0; + $47 = $51; + $48 = $54; + $57 = $47; + $58 = $48; + $44 = $57; + $45 = $58; + $59 = $44; + $43 = $59; + $60 = $43; + $61 = HEAP32[$60>>2]|0; + HEAP32[$46>>2] = $61; + $62 = $45; + $41 = $62; + $63 = $41; + $64 = HEAP32[$63>>2]|0; + $65 = $44; + HEAP32[$65>>2] = $64; + $42 = $46; + $66 = $42; + $67 = HEAP32[$66>>2]|0; + $68 = $45; + HEAP32[$68>>2] = $67; + $69 = ((($57)) + 4|0); + $70 = $48; + $71 = ((($70)) + 4|0); + $38 = $69; + $39 = $71; + $72 = $38; + $37 = $72; + $73 = $37; + $74 = HEAP32[$73>>2]|0; + HEAP32[$40>>2] = $74; + $75 = $39; + $35 = $75; + $76 = $35; + $77 = HEAP32[$76>>2]|0; + $78 = $38; + HEAP32[$78>>2] = $77; + $36 = $40; + $79 = $36; + $80 = HEAP32[$79>>2]|0; + $81 = $39; + HEAP32[$81>>2] = $80; + __ZNSt3__210shared_ptrI10buf_streamED2Ev($51); + $82 = ((($53)) + 16|0); + $33 = $82; + $83 = $33; + $32 = $34; + $84 = $32; + HEAP32[$84>>2] = 0; + $85 = ((($84)) + 4|0); + HEAP32[$85>>2] = 0; + $30 = $34; + $31 = $83; + $86 = $30; + $87 = $31; + $27 = $86; + $28 = $87; + $88 = $27; + $26 = $88; + $89 = $26; + $90 = HEAP32[$89>>2]|0; + HEAP32[$29>>2] = $90; + $91 = $28; + $24 = $91; + $92 = $24; + $93 = HEAP32[$92>>2]|0; + $94 = $27; + HEAP32[$94>>2] = $93; + $25 = $29; + $95 = $25; + $96 = HEAP32[$95>>2]|0; + $97 = $28; + HEAP32[$97>>2] = $96; + $98 = ((($86)) + 4|0); + $99 = $31; + $100 = ((($99)) + 4|0); + $21 = $98; + $22 = $100; + $101 = $21; + $20 = $101; + $102 = $20; + $103 = HEAP32[$102>>2]|0; + HEAP32[$23>>2] = $103; + $104 = $22; + $18 = $104; + $105 = $18; + $106 = HEAP32[$105>>2]|0; + $107 = $21; + HEAP32[$107>>2] = $106; + $19 = $23; + $108 = $19; + $109 = HEAP32[$108>>2]|0; + $110 = $22; + HEAP32[$110>>2] = $109; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($34); + $111 = ((($53)) + 16|0); + $16 = $111; + $112 = $16; + $15 = $17; + $113 = $15; + HEAP32[$113>>2] = 0; + $114 = ((($113)) + 4|0); + HEAP32[$114>>2] = 0; + $13 = $17; + $14 = $112; + $115 = $13; + $116 = $14; + $10 = $115; + $11 = $116; + $117 = $10; + $9 = $117; + $118 = $9; + $119 = HEAP32[$118>>2]|0; + HEAP32[$12>>2] = $119; + $120 = $11; + $7 = $120; + $121 = $7; + $122 = HEAP32[$121>>2]|0; + $123 = $10; + HEAP32[$123>>2] = $122; + $8 = $12; + $124 = $8; + $125 = HEAP32[$124>>2]|0; + $126 = $11; + HEAP32[$126>>2] = $125; + $127 = ((($115)) + 4|0); + $128 = $14; + $129 = ((($128)) + 4|0); + $4 = $127; + $5 = $129; + $130 = $4; + $3 = $130; + $131 = $3; + $132 = HEAP32[$131>>2]|0; + HEAP32[$6>>2] = $132; + $133 = $5; + $1 = $133; + $134 = $1; + $135 = HEAP32[$134>>2]|0; + $136 = $4; + HEAP32[$136>>2] = $135; + $2 = $6; + $137 = $2; + $138 = HEAP32[$137>>2]|0; + $139 = $5; + HEAP32[$139>>2] = $138; + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($17); + $140 = ((($53)) + 16|0); + __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($140); + $141 = ((($53)) + 8|0); + __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($141); + __ZNSt3__210shared_ptrI10buf_streamED2Ev($53); + STACKTOP = sp;return; +} +function __ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1016|0); +} +function __ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1024|0); +} +function __ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1040|0); +} +function __ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__Znwj(24)|0); + __ZN13DynamicLASZipC2Ev($0); + return ($0|0); +} +function __ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + $3 = (FUNCTION_TABLE_i[$2 & 255]()|0); + $4 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($3)|0); + STACKTOP = sp;return ($4|0); +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 1; +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2896|0); +} +function __ZN13DynamicLASZipC2Ev($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = $0; + $5 = $4; + $3 = $5; + $6 = $3; + HEAP32[$6>>2] = 0; + $7 = ((($6)) + 4|0); + HEAP32[$7>>2] = 0; + $8 = ((($5)) + 8|0); + $1 = $8; + $9 = $1; + HEAP32[$9>>2] = 0; + $10 = ((($9)) + 4|0); + HEAP32[$10>>2] = 0; + $11 = ((($5)) + 16|0); + $2 = $11; + $12 = $2; + HEAP32[$12>>2] = 0; + $13 = ((($12)) + 4|0); + HEAP32[$13>>2] = 0; + STACKTOP = sp;return; +} +function __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $4 = $0; + $5 = $1; + $6 = $2; + $7 = $3; + $8 = $5; + $9 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($8)|0); + $10 = $4; + $$field = HEAP32[$10>>2]|0; + $$index1 = ((($10)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + $11 = $$field2 >> 1; + $12 = (($9) + ($11)|0); + $13 = $$field2 & 1; + $14 = ($13|0)!=(0); + if ($14) { + $15 = HEAP32[$12>>2]|0; + $16 = (($15) + ($$field)|0); + $17 = HEAP32[$16>>2]|0; + $23 = $17; + } else { + $18 = $$field; + $23 = $18; + } + $19 = $6; + $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0); + $21 = $7; + $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0); + FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22); + STACKTOP = sp;return; +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 4; +} +function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($0) { + $0 = $0|0; + var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__Znwj(8)|0); + $3 = $1; + $$field = HEAP32[$3>>2]|0; + $$index1 = ((($3)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + HEAP32[$2>>2] = $$field; + $$index5 = ((($2)) + 4|0); + HEAP32[$$index5>>2] = $$field2; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = $1; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2900|0); +} +function __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjEvPS2_JjEE6invokeERKS4_S5_j($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $4; + $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0); + $8 = $3; + $$field = HEAP32[$8>>2]|0; + $$index1 = ((($8)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + $9 = $$field2 >> 1; + $10 = (($7) + ($9)|0); + $11 = $$field2 & 1; + $12 = ($11|0)!=(0); + if ($12) { + $13 = HEAP32[$10>>2]|0; + $14 = (($13) + ($$field)|0); + $15 = HEAP32[$14>>2]|0; + $19 = $15; + } else { + $16 = $$field; + $19 = $16; + } + $17 = $5; + $18 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($17)|0); + FUNCTION_TABLE_vii[$19 & 255]($10,$18); + STACKTOP = sp;return; +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 3; +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($0) { + $0 = $0|0; + var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__Znwj(8)|0); + $3 = $1; + $$field = HEAP32[$3>>2]|0; + $$index1 = ((($3)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + HEAP32[$2>>2] = $$field; + $$index5 = ((($2)) + 4|0); + HEAP32[$$index5>>2] = $$field2; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2916|0); +} +function __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = $0; + $4 = $1; + $5 = $2; + $6 = $4; + $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0); + $8 = $3; + $$field = HEAP32[$8>>2]|0; + $$index1 = ((($8)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + $9 = $$field2 >> 1; + $10 = (($7) + ($9)|0); + $11 = $$field2 & 1; + $12 = ($11|0)!=(0); + if ($12) { + $13 = HEAP32[$10>>2]|0; + $14 = (($13) + ($$field)|0); + $15 = HEAP32[$14>>2]|0; + $19 = $15; + } else { + $16 = $$field; + $19 = $16; + } + $17 = $5; + $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0); + FUNCTION_TABLE_vii[$19 & 255]($10,$18); + STACKTOP = sp;return; +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + STACKTOP = sp;return 3; +} +function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv()|0); + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($0) { + $0 = $0|0; + var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__Znwj(8)|0); + $3 = $1; + $$field = HEAP32[$3>>2]|0; + $$index1 = ((($3)) + 4|0); + $$field2 = HEAP32[$$index1>>2]|0; + HEAP32[$2>>2] = $$field; + $$index5 = ((($2)) + 4|0); + HEAP32[$$index5>>2] = $$field2; + STACKTOP = sp;return ($2|0); +} +function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (2928|0); +} +function __GLOBAL__sub_I_laz_perf_cpp() { + var label = 0, sp = 0; + sp = STACKTOP; + ___cxx_global_var_init(); + return; +} +function __GLOBAL__sub_I_bind_cpp() { + var label = 0, sp = 0; + sp = STACKTOP; + ___cxx_global_var_init_2(); + return; +} +function ___cxx_global_var_init_2() { + var label = 0, sp = 0; + sp = STACKTOP; + __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev(21881); + return; +} +function __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIvE3getEv()|0); + __embind_register_void(($2|0),(16498|0)); + $3 = (__ZN10emscripten8internal6TypeIDIbE3getEv()|0); + __embind_register_bool(($3|0),(16503|0),1,1,0); + __ZN12_GLOBAL__N_116register_integerIcEEvPKc(16508); + __ZN12_GLOBAL__N_116register_integerIaEEvPKc(16513); + __ZN12_GLOBAL__N_116register_integerIhEEvPKc(16525); + __ZN12_GLOBAL__N_116register_integerIsEEvPKc(16539); + __ZN12_GLOBAL__N_116register_integerItEEvPKc(16545); + __ZN12_GLOBAL__N_116register_integerIiEEvPKc(16560); + __ZN12_GLOBAL__N_116register_integerIjEEvPKc(16564); + __ZN12_GLOBAL__N_116register_integerIlEEvPKc(16577); + __ZN12_GLOBAL__N_116register_integerImEEvPKc(16582); + __ZN12_GLOBAL__N_114register_floatIfEEvPKc(16596); + __ZN12_GLOBAL__N_114register_floatIdEEvPKc(16602); + $4 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0); + __embind_register_std_string(($4|0),(16609|0)); + $5 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0); + __embind_register_std_string(($5|0),(16621|0)); + $6 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0); + __embind_register_std_wstring(($6|0),4,(16654|0)); + $7 = (__ZN10emscripten8internal6TypeIDINS_3valEE3getEv()|0); + __embind_register_emval(($7|0),(16667|0)); + __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc(16683); + __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16713); + __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(16750); + __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(16789); + __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(16820); + __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(16860); + __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(16889); + __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc(16927); + __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc(16957); + __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16996); + __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(17028); + __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(17061); + __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(17094); + __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(17128); + __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(17161); + __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc(17195); + __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc(17226); + __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc(17258); + STACKTOP = sp;return; +} +function __ZN10emscripten8internal6TypeIDIvE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIvE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDIbE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIbE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_116register_integerIcEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIcE3getEv()|0); + $3 = $1; + $4 = -128 << 24 >> 24; + $5 = 127 << 24 >> 24; + __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerIaEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIaE3getEv()|0); + $3 = $1; + $4 = -128 << 24 >> 24; + $5 = 127 << 24 >> 24; + __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerIhEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIhE3getEv()|0); + $3 = $1; + $4 = 0; + $5 = 255; + __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerIsEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIsE3getEv()|0); + $3 = $1; + $4 = -32768 << 16 >> 16; + $5 = 32767 << 16 >> 16; + __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerItEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDItE3getEv()|0); + $3 = $1; + $4 = 0; + $5 = 65535; + __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerIiEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIiE3getEv()|0); + $3 = $1; + __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerIjEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIjE3getEv()|0); + $3 = $1; + __embind_register_integer(($2|0),($3|0),4,0,-1); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerIlEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIlE3getEv()|0); + $3 = $1; + __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_116register_integerImEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDImE3getEv()|0); + $3 = $1; + __embind_register_integer(($2|0),($3|0),4,0,-1); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_114register_floatIfEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIfE3getEv()|0); + $3 = $1; + __embind_register_float(($2|0),($3|0),4); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_114register_floatIdEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDIdE3getEv()|0); + $3 = $1; + __embind_register_float(($2|0),($3|0),8); + STACKTOP = sp;return; +} +function __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal6TypeIDINS_3valEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = $0; + $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv()|0); + $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv()|0); + $4 = $1; + __embind_register_memory_view(($2|0),($3|0),($4|0)); + STACKTOP = sp;return; +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 7; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1056|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 7; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1064|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 6; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1072|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 5; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1080|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 4; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1088|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 5; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1096|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 4; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1104|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 3; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1112|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 2; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1120|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 1; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1128|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 0; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1136|0); +} +function __ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv()|0); + return ($0|0); +} +function __ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return 0; +} +function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1144|0); +} +function __ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1152|0); +} +function __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1160|0); +} +function __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1192|0); +} +function __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1216|0); +} +function __ZN10emscripten8internal6TypeIDIdE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIdE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIdE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1552|0); +} +function __ZN10emscripten8internal6TypeIDIfE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIfE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIfE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1544|0); +} +function __ZN10emscripten8internal6TypeIDImE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDImE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDImE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1536|0); +} +function __ZN10emscripten8internal6TypeIDIlE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIlE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIlE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1528|0); +} +function __ZN10emscripten8internal6TypeIDIjE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIjE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIjE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1520|0); +} +function __ZN10emscripten8internal6TypeIDIiE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIiE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIiE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1512|0); +} +function __ZN10emscripten8internal6TypeIDItE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDItE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDItE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1504|0); +} +function __ZN10emscripten8internal6TypeIDIsE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIsE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIsE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1496|0); +} +function __ZN10emscripten8internal6TypeIDIhE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIhE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIhE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1480|0); +} +function __ZN10emscripten8internal6TypeIDIaE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIaE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIaE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1488|0); +} +function __ZN10emscripten8internal6TypeIDIcE3getEv() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (__ZN10emscripten8internal11LightTypeIDIcE3getEv()|0); + return ($0|0); +} +function __ZN10emscripten8internal11LightTypeIDIcE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1472|0); +} +function __ZN10emscripten8internal11LightTypeIDIbE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1464|0); +} +function __ZN10emscripten8internal11LightTypeIDIvE3getEv() { + var label = 0, sp = 0; + sp = STACKTOP; + return (1448|0); +} +function ___getTypeName($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = $0; + $3 = $2; + $1 = $3; + $4 = $1; + $5 = ((($4)) + 4|0); + $6 = HEAP32[$5>>2]|0; + $7 = (___strdup($6)|0); + STACKTOP = sp;return ($7|0); +} +function _malloc($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = sp; + $2 = ($0>>>0)<(245); + do { + if ($2) { + $3 = ($0>>>0)<(11); + $4 = (($0) + 11)|0; + $5 = $4 & -8; + $6 = $3 ? 16 : $5; + $7 = $6 >>> 3; + $8 = HEAP32[5323]|0; + $9 = $8 >>> $7; + $10 = $9 & 3; + $11 = ($10|0)==(0); + if (!($11)) { + $12 = $9 & 1; + $13 = $12 ^ 1; + $14 = (($13) + ($7))|0; + $15 = $14 << 1; + $16 = (21332 + ($15<<2)|0); + $17 = ((($16)) + 8|0); + $18 = HEAP32[$17>>2]|0; + $19 = ((($18)) + 8|0); + $20 = HEAP32[$19>>2]|0; + $21 = ($20|0)==($16|0); + do { + if ($21) { + $22 = 1 << $14; + $23 = $22 ^ -1; + $24 = $8 & $23; + HEAP32[5323] = $24; + } else { + $25 = HEAP32[(21308)>>2]|0; + $26 = ($25>>>0)>($20>>>0); + if ($26) { + _abort(); + // unreachable; + } + $27 = ((($20)) + 12|0); + $28 = HEAP32[$27>>2]|0; + $29 = ($28|0)==($18|0); + if ($29) { + HEAP32[$27>>2] = $16; + HEAP32[$17>>2] = $20; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $30 = $14 << 3; + $31 = $30 | 3; + $32 = ((($18)) + 4|0); + HEAP32[$32>>2] = $31; + $33 = (($18) + ($30)|0); + $34 = ((($33)) + 4|0); + $35 = HEAP32[$34>>2]|0; + $36 = $35 | 1; + HEAP32[$34>>2] = $36; + $$0 = $19; + STACKTOP = sp;return ($$0|0); + } + $37 = HEAP32[(21300)>>2]|0; + $38 = ($6>>>0)>($37>>>0); + if ($38) { + $39 = ($9|0)==(0); + if (!($39)) { + $40 = $9 << $7; + $41 = 2 << $7; + $42 = (0 - ($41))|0; + $43 = $41 | $42; + $44 = $40 & $43; + $45 = (0 - ($44))|0; + $46 = $44 & $45; + $47 = (($46) + -1)|0; + $48 = $47 >>> 12; + $49 = $48 & 16; + $50 = $47 >>> $49; + $51 = $50 >>> 5; + $52 = $51 & 8; + $53 = $52 | $49; + $54 = $50 >>> $52; + $55 = $54 >>> 2; + $56 = $55 & 4; + $57 = $53 | $56; + $58 = $54 >>> $56; + $59 = $58 >>> 1; + $60 = $59 & 2; + $61 = $57 | $60; + $62 = $58 >>> $60; + $63 = $62 >>> 1; + $64 = $63 & 1; + $65 = $61 | $64; + $66 = $62 >>> $64; + $67 = (($65) + ($66))|0; + $68 = $67 << 1; + $69 = (21332 + ($68<<2)|0); + $70 = ((($69)) + 8|0); + $71 = HEAP32[$70>>2]|0; + $72 = ((($71)) + 8|0); + $73 = HEAP32[$72>>2]|0; + $74 = ($73|0)==($69|0); + do { + if ($74) { + $75 = 1 << $67; + $76 = $75 ^ -1; + $77 = $8 & $76; + HEAP32[5323] = $77; + $98 = $77; + } else { + $78 = HEAP32[(21308)>>2]|0; + $79 = ($78>>>0)>($73>>>0); + if ($79) { + _abort(); + // unreachable; + } + $80 = ((($73)) + 12|0); + $81 = HEAP32[$80>>2]|0; + $82 = ($81|0)==($71|0); + if ($82) { + HEAP32[$80>>2] = $69; + HEAP32[$70>>2] = $73; + $98 = $8; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $83 = $67 << 3; + $84 = (($83) - ($6))|0; + $85 = $6 | 3; + $86 = ((($71)) + 4|0); + HEAP32[$86>>2] = $85; + $87 = (($71) + ($6)|0); + $88 = $84 | 1; + $89 = ((($87)) + 4|0); + HEAP32[$89>>2] = $88; + $90 = (($71) + ($83)|0); + HEAP32[$90>>2] = $84; + $91 = ($37|0)==(0); + if (!($91)) { + $92 = HEAP32[(21312)>>2]|0; + $93 = $37 >>> 3; + $94 = $93 << 1; + $95 = (21332 + ($94<<2)|0); + $96 = 1 << $93; + $97 = $98 & $96; + $99 = ($97|0)==(0); + if ($99) { + $100 = $98 | $96; + HEAP32[5323] = $100; + $$pre = ((($95)) + 8|0); + $$0199 = $95;$$pre$phiZ2D = $$pre; + } else { + $101 = ((($95)) + 8|0); + $102 = HEAP32[$101>>2]|0; + $103 = HEAP32[(21308)>>2]|0; + $104 = ($103>>>0)>($102>>>0); + if ($104) { + _abort(); + // unreachable; + } else { + $$0199 = $102;$$pre$phiZ2D = $101; + } + } + HEAP32[$$pre$phiZ2D>>2] = $92; + $105 = ((($$0199)) + 12|0); + HEAP32[$105>>2] = $92; + $106 = ((($92)) + 8|0); + HEAP32[$106>>2] = $$0199; + $107 = ((($92)) + 12|0); + HEAP32[$107>>2] = $95; + } + HEAP32[(21300)>>2] = $84; + HEAP32[(21312)>>2] = $87; + $$0 = $72; + STACKTOP = sp;return ($$0|0); + } + $108 = HEAP32[(21296)>>2]|0; + $109 = ($108|0)==(0); + if ($109) { + $$0197 = $6; + } else { + $110 = (0 - ($108))|0; + $111 = $108 & $110; + $112 = (($111) + -1)|0; + $113 = $112 >>> 12; + $114 = $113 & 16; + $115 = $112 >>> $114; + $116 = $115 >>> 5; + $117 = $116 & 8; + $118 = $117 | $114; + $119 = $115 >>> $117; + $120 = $119 >>> 2; + $121 = $120 & 4; + $122 = $118 | $121; + $123 = $119 >>> $121; + $124 = $123 >>> 1; + $125 = $124 & 2; + $126 = $122 | $125; + $127 = $123 >>> $125; + $128 = $127 >>> 1; + $129 = $128 & 1; + $130 = $126 | $129; + $131 = $127 >>> $129; + $132 = (($130) + ($131))|0; + $133 = (21596 + ($132<<2)|0); + $134 = HEAP32[$133>>2]|0; + $135 = ((($134)) + 4|0); + $136 = HEAP32[$135>>2]|0; + $137 = $136 & -8; + $138 = (($137) - ($6))|0; + $$0189$i = $134;$$0190$i = $134;$$0191$i = $138; + while(1) { + $139 = ((($$0189$i)) + 16|0); + $140 = HEAP32[$139>>2]|0; + $141 = ($140|0)==(0|0); + if ($141) { + $142 = ((($$0189$i)) + 20|0); + $143 = HEAP32[$142>>2]|0; + $144 = ($143|0)==(0|0); + if ($144) { + break; + } else { + $146 = $143; + } + } else { + $146 = $140; + } + $145 = ((($146)) + 4|0); + $147 = HEAP32[$145>>2]|0; + $148 = $147 & -8; + $149 = (($148) - ($6))|0; + $150 = ($149>>>0)<($$0191$i>>>0); + $spec$select$i = $150 ? $149 : $$0191$i; + $spec$select1$i = $150 ? $146 : $$0190$i; + $$0189$i = $146;$$0190$i = $spec$select1$i;$$0191$i = $spec$select$i; + } + $151 = HEAP32[(21308)>>2]|0; + $152 = ($151>>>0)>($$0190$i>>>0); + if ($152) { + _abort(); + // unreachable; + } + $153 = (($$0190$i) + ($6)|0); + $154 = ($153>>>0)>($$0190$i>>>0); + if (!($154)) { + _abort(); + // unreachable; + } + $155 = ((($$0190$i)) + 24|0); + $156 = HEAP32[$155>>2]|0; + $157 = ((($$0190$i)) + 12|0); + $158 = HEAP32[$157>>2]|0; + $159 = ($158|0)==($$0190$i|0); + do { + if ($159) { + $169 = ((($$0190$i)) + 20|0); + $170 = HEAP32[$169>>2]|0; + $171 = ($170|0)==(0|0); + if ($171) { + $172 = ((($$0190$i)) + 16|0); + $173 = HEAP32[$172>>2]|0; + $174 = ($173|0)==(0|0); + if ($174) { + $$3$i = 0; + break; + } else { + $$1194$i$ph = $173;$$1196$i$ph = $172; + } + } else { + $$1194$i$ph = $170;$$1196$i$ph = $169; + } + $$1194$i = $$1194$i$ph;$$1196$i = $$1196$i$ph; + while(1) { + $175 = ((($$1194$i)) + 20|0); + $176 = HEAP32[$175>>2]|0; + $177 = ($176|0)==(0|0); + if ($177) { + $178 = ((($$1194$i)) + 16|0); + $179 = HEAP32[$178>>2]|0; + $180 = ($179|0)==(0|0); + if ($180) { + break; + } else { + $$1194$i$be = $179;$$1196$i$be = $178; + } + } else { + $$1194$i$be = $176;$$1196$i$be = $175; + } + $$1194$i = $$1194$i$be;$$1196$i = $$1196$i$be; + } + $181 = ($151>>>0)>($$1196$i>>>0); + if ($181) { + _abort(); + // unreachable; + } else { + HEAP32[$$1196$i>>2] = 0; + $$3$i = $$1194$i; + break; + } + } else { + $160 = ((($$0190$i)) + 8|0); + $161 = HEAP32[$160>>2]|0; + $162 = ($151>>>0)>($161>>>0); + if ($162) { + _abort(); + // unreachable; + } + $163 = ((($161)) + 12|0); + $164 = HEAP32[$163>>2]|0; + $165 = ($164|0)==($$0190$i|0); + if (!($165)) { + _abort(); + // unreachable; + } + $166 = ((($158)) + 8|0); + $167 = HEAP32[$166>>2]|0; + $168 = ($167|0)==($$0190$i|0); + if ($168) { + HEAP32[$163>>2] = $158; + HEAP32[$166>>2] = $161; + $$3$i = $158; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $182 = ($156|0)==(0|0); + L78: do { + if (!($182)) { + $183 = ((($$0190$i)) + 28|0); + $184 = HEAP32[$183>>2]|0; + $185 = (21596 + ($184<<2)|0); + $186 = HEAP32[$185>>2]|0; + $187 = ($$0190$i|0)==($186|0); + do { + if ($187) { + HEAP32[$185>>2] = $$3$i; + $cond$i = ($$3$i|0)==(0|0); + if ($cond$i) { + $188 = 1 << $184; + $189 = $188 ^ -1; + $190 = $108 & $189; + HEAP32[(21296)>>2] = $190; + break L78; + } + } else { + $191 = HEAP32[(21308)>>2]|0; + $192 = ($191>>>0)>($156>>>0); + if ($192) { + _abort(); + // unreachable; + } else { + $193 = ((($156)) + 16|0); + $194 = HEAP32[$193>>2]|0; + $195 = ($194|0)==($$0190$i|0); + $196 = ((($156)) + 20|0); + $$sink = $195 ? $193 : $196; + HEAP32[$$sink>>2] = $$3$i; + $197 = ($$3$i|0)==(0|0); + if ($197) { + break L78; + } else { + break; + } + } + } + } while(0); + $198 = HEAP32[(21308)>>2]|0; + $199 = ($198>>>0)>($$3$i>>>0); + if ($199) { + _abort(); + // unreachable; + } + $200 = ((($$3$i)) + 24|0); + HEAP32[$200>>2] = $156; + $201 = ((($$0190$i)) + 16|0); + $202 = HEAP32[$201>>2]|0; + $203 = ($202|0)==(0|0); + do { + if (!($203)) { + $204 = ($198>>>0)>($202>>>0); + if ($204) { + _abort(); + // unreachable; + } else { + $205 = ((($$3$i)) + 16|0); + HEAP32[$205>>2] = $202; + $206 = ((($202)) + 24|0); + HEAP32[$206>>2] = $$3$i; + break; + } + } + } while(0); + $207 = ((($$0190$i)) + 20|0); + $208 = HEAP32[$207>>2]|0; + $209 = ($208|0)==(0|0); + if (!($209)) { + $210 = HEAP32[(21308)>>2]|0; + $211 = ($210>>>0)>($208>>>0); + if ($211) { + _abort(); + // unreachable; + } else { + $212 = ((($$3$i)) + 20|0); + HEAP32[$212>>2] = $208; + $213 = ((($208)) + 24|0); + HEAP32[$213>>2] = $$3$i; + break; + } + } + } + } while(0); + $214 = ($$0191$i>>>0)<(16); + if ($214) { + $215 = (($$0191$i) + ($6))|0; + $216 = $215 | 3; + $217 = ((($$0190$i)) + 4|0); + HEAP32[$217>>2] = $216; + $218 = (($$0190$i) + ($215)|0); + $219 = ((($218)) + 4|0); + $220 = HEAP32[$219>>2]|0; + $221 = $220 | 1; + HEAP32[$219>>2] = $221; + } else { + $222 = $6 | 3; + $223 = ((($$0190$i)) + 4|0); + HEAP32[$223>>2] = $222; + $224 = $$0191$i | 1; + $225 = ((($153)) + 4|0); + HEAP32[$225>>2] = $224; + $226 = (($153) + ($$0191$i)|0); + HEAP32[$226>>2] = $$0191$i; + $227 = ($37|0)==(0); + if (!($227)) { + $228 = HEAP32[(21312)>>2]|0; + $229 = $37 >>> 3; + $230 = $229 << 1; + $231 = (21332 + ($230<<2)|0); + $232 = 1 << $229; + $233 = $232 & $8; + $234 = ($233|0)==(0); + if ($234) { + $235 = $232 | $8; + HEAP32[5323] = $235; + $$pre$i = ((($231)) + 8|0); + $$0187$i = $231;$$pre$phi$iZ2D = $$pre$i; + } else { + $236 = ((($231)) + 8|0); + $237 = HEAP32[$236>>2]|0; + $238 = HEAP32[(21308)>>2]|0; + $239 = ($238>>>0)>($237>>>0); + if ($239) { + _abort(); + // unreachable; + } else { + $$0187$i = $237;$$pre$phi$iZ2D = $236; + } + } + HEAP32[$$pre$phi$iZ2D>>2] = $228; + $240 = ((($$0187$i)) + 12|0); + HEAP32[$240>>2] = $228; + $241 = ((($228)) + 8|0); + HEAP32[$241>>2] = $$0187$i; + $242 = ((($228)) + 12|0); + HEAP32[$242>>2] = $231; + } + HEAP32[(21300)>>2] = $$0191$i; + HEAP32[(21312)>>2] = $153; + } + $243 = ((($$0190$i)) + 8|0); + $$0 = $243; + STACKTOP = sp;return ($$0|0); + } + } else { + $$0197 = $6; + } + } else { + $244 = ($0>>>0)>(4294967231); + if ($244) { + $$0197 = -1; + } else { + $245 = (($0) + 11)|0; + $246 = $245 & -8; + $247 = HEAP32[(21296)>>2]|0; + $248 = ($247|0)==(0); + if ($248) { + $$0197 = $246; + } else { + $249 = (0 - ($246))|0; + $250 = $245 >>> 8; + $251 = ($250|0)==(0); + if ($251) { + $$0357$i = 0; + } else { + $252 = ($246>>>0)>(16777215); + if ($252) { + $$0357$i = 31; + } else { + $253 = (($250) + 1048320)|0; + $254 = $253 >>> 16; + $255 = $254 & 8; + $256 = $250 << $255; + $257 = (($256) + 520192)|0; + $258 = $257 >>> 16; + $259 = $258 & 4; + $260 = $259 | $255; + $261 = $256 << $259; + $262 = (($261) + 245760)|0; + $263 = $262 >>> 16; + $264 = $263 & 2; + $265 = $260 | $264; + $266 = (14 - ($265))|0; + $267 = $261 << $264; + $268 = $267 >>> 15; + $269 = (($266) + ($268))|0; + $270 = $269 << 1; + $271 = (($269) + 7)|0; + $272 = $246 >>> $271; + $273 = $272 & 1; + $274 = $273 | $270; + $$0357$i = $274; + } + } + $275 = (21596 + ($$0357$i<<2)|0); + $276 = HEAP32[$275>>2]|0; + $277 = ($276|0)==(0|0); + L122: do { + if ($277) { + $$2353$i = 0;$$3$i203 = 0;$$3348$i = $249; + label = 85; + } else { + $278 = ($$0357$i|0)==(31); + $279 = $$0357$i >>> 1; + $280 = (25 - ($279))|0; + $281 = $278 ? 0 : $280; + $282 = $246 << $281; + $$0340$i = 0;$$0345$i = $249;$$0351$i = $276;$$0358$i = $282;$$0361$i = 0; + while(1) { + $283 = ((($$0351$i)) + 4|0); + $284 = HEAP32[$283>>2]|0; + $285 = $284 & -8; + $286 = (($285) - ($246))|0; + $287 = ($286>>>0)<($$0345$i>>>0); + if ($287) { + $288 = ($286|0)==(0); + if ($288) { + $$420$i$ph = $$0351$i;$$434919$i$ph = 0;$$535618$i$ph = $$0351$i; + label = 89; + break L122; + } else { + $$1341$i = $$0351$i;$$1346$i = $286; + } + } else { + $$1341$i = $$0340$i;$$1346$i = $$0345$i; + } + $289 = ((($$0351$i)) + 20|0); + $290 = HEAP32[$289>>2]|0; + $291 = $$0358$i >>> 31; + $292 = (((($$0351$i)) + 16|0) + ($291<<2)|0); + $293 = HEAP32[$292>>2]|0; + $294 = ($290|0)==(0|0); + $295 = ($290|0)==($293|0); + $or$cond2$i = $294 | $295; + $$1362$i = $or$cond2$i ? $$0361$i : $290; + $296 = ($293|0)==(0|0); + $spec$select7$i = $$0358$i << 1; + if ($296) { + $$2353$i = $$1362$i;$$3$i203 = $$1341$i;$$3348$i = $$1346$i; + label = 85; + break; + } else { + $$0340$i = $$1341$i;$$0345$i = $$1346$i;$$0351$i = $293;$$0358$i = $spec$select7$i;$$0361$i = $$1362$i; + } + } + } + } while(0); + if ((label|0) == 85) { + $297 = ($$2353$i|0)==(0|0); + $298 = ($$3$i203|0)==(0|0); + $or$cond$i = $297 & $298; + if ($or$cond$i) { + $299 = 2 << $$0357$i; + $300 = (0 - ($299))|0; + $301 = $299 | $300; + $302 = $301 & $247; + $303 = ($302|0)==(0); + if ($303) { + $$0197 = $246; + break; + } + $304 = (0 - ($302))|0; + $305 = $302 & $304; + $306 = (($305) + -1)|0; + $307 = $306 >>> 12; + $308 = $307 & 16; + $309 = $306 >>> $308; + $310 = $309 >>> 5; + $311 = $310 & 8; + $312 = $311 | $308; + $313 = $309 >>> $311; + $314 = $313 >>> 2; + $315 = $314 & 4; + $316 = $312 | $315; + $317 = $313 >>> $315; + $318 = $317 >>> 1; + $319 = $318 & 2; + $320 = $316 | $319; + $321 = $317 >>> $319; + $322 = $321 >>> 1; + $323 = $322 & 1; + $324 = $320 | $323; + $325 = $321 >>> $323; + $326 = (($324) + ($325))|0; + $327 = (21596 + ($326<<2)|0); + $328 = HEAP32[$327>>2]|0; + $$3$i203218 = 0;$$4355$i = $328; + } else { + $$3$i203218 = $$3$i203;$$4355$i = $$2353$i; + } + $329 = ($$4355$i|0)==(0|0); + if ($329) { + $$4$lcssa$i = $$3$i203218;$$4349$lcssa$i = $$3348$i; + } else { + $$420$i$ph = $$3$i203218;$$434919$i$ph = $$3348$i;$$535618$i$ph = $$4355$i; + label = 89; + } + } + if ((label|0) == 89) { + $$420$i = $$420$i$ph;$$434919$i = $$434919$i$ph;$$535618$i = $$535618$i$ph; + while(1) { + $330 = ((($$535618$i)) + 4|0); + $331 = HEAP32[$330>>2]|0; + $332 = $331 & -8; + $333 = (($332) - ($246))|0; + $334 = ($333>>>0)<($$434919$i>>>0); + $spec$select$i205 = $334 ? $333 : $$434919$i; + $spec$select3$i = $334 ? $$535618$i : $$420$i; + $335 = ((($$535618$i)) + 16|0); + $336 = HEAP32[$335>>2]|0; + $337 = ($336|0)==(0|0); + if ($337) { + $338 = ((($$535618$i)) + 20|0); + $339 = HEAP32[$338>>2]|0; + $341 = $339; + } else { + $341 = $336; + } + $340 = ($341|0)==(0|0); + if ($340) { + $$4$lcssa$i = $spec$select3$i;$$4349$lcssa$i = $spec$select$i205; + break; + } else { + $$420$i = $spec$select3$i;$$434919$i = $spec$select$i205;$$535618$i = $341; + } + } + } + $342 = ($$4$lcssa$i|0)==(0|0); + if ($342) { + $$0197 = $246; + } else { + $343 = HEAP32[(21300)>>2]|0; + $344 = (($343) - ($246))|0; + $345 = ($$4349$lcssa$i>>>0)<($344>>>0); + if ($345) { + $346 = HEAP32[(21308)>>2]|0; + $347 = ($346>>>0)>($$4$lcssa$i>>>0); + if ($347) { + _abort(); + // unreachable; + } + $348 = (($$4$lcssa$i) + ($246)|0); + $349 = ($348>>>0)>($$4$lcssa$i>>>0); + if (!($349)) { + _abort(); + // unreachable; + } + $350 = ((($$4$lcssa$i)) + 24|0); + $351 = HEAP32[$350>>2]|0; + $352 = ((($$4$lcssa$i)) + 12|0); + $353 = HEAP32[$352>>2]|0; + $354 = ($353|0)==($$4$lcssa$i|0); + do { + if ($354) { + $364 = ((($$4$lcssa$i)) + 20|0); + $365 = HEAP32[$364>>2]|0; + $366 = ($365|0)==(0|0); + if ($366) { + $367 = ((($$4$lcssa$i)) + 16|0); + $368 = HEAP32[$367>>2]|0; + $369 = ($368|0)==(0|0); + if ($369) { + $$3371$i = 0; + break; + } else { + $$1369$i$ph = $368;$$1373$i$ph = $367; + } + } else { + $$1369$i$ph = $365;$$1373$i$ph = $364; + } + $$1369$i = $$1369$i$ph;$$1373$i = $$1373$i$ph; + while(1) { + $370 = ((($$1369$i)) + 20|0); + $371 = HEAP32[$370>>2]|0; + $372 = ($371|0)==(0|0); + if ($372) { + $373 = ((($$1369$i)) + 16|0); + $374 = HEAP32[$373>>2]|0; + $375 = ($374|0)==(0|0); + if ($375) { + break; + } else { + $$1369$i$be = $374;$$1373$i$be = $373; + } + } else { + $$1369$i$be = $371;$$1373$i$be = $370; + } + $$1369$i = $$1369$i$be;$$1373$i = $$1373$i$be; + } + $376 = ($346>>>0)>($$1373$i>>>0); + if ($376) { + _abort(); + // unreachable; + } else { + HEAP32[$$1373$i>>2] = 0; + $$3371$i = $$1369$i; + break; + } + } else { + $355 = ((($$4$lcssa$i)) + 8|0); + $356 = HEAP32[$355>>2]|0; + $357 = ($346>>>0)>($356>>>0); + if ($357) { + _abort(); + // unreachable; + } + $358 = ((($356)) + 12|0); + $359 = HEAP32[$358>>2]|0; + $360 = ($359|0)==($$4$lcssa$i|0); + if (!($360)) { + _abort(); + // unreachable; + } + $361 = ((($353)) + 8|0); + $362 = HEAP32[$361>>2]|0; + $363 = ($362|0)==($$4$lcssa$i|0); + if ($363) { + HEAP32[$358>>2] = $353; + HEAP32[$361>>2] = $356; + $$3371$i = $353; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $377 = ($351|0)==(0|0); + L176: do { + if ($377) { + $469 = $247; + } else { + $378 = ((($$4$lcssa$i)) + 28|0); + $379 = HEAP32[$378>>2]|0; + $380 = (21596 + ($379<<2)|0); + $381 = HEAP32[$380>>2]|0; + $382 = ($$4$lcssa$i|0)==($381|0); + do { + if ($382) { + HEAP32[$380>>2] = $$3371$i; + $cond$i207 = ($$3371$i|0)==(0|0); + if ($cond$i207) { + $383 = 1 << $379; + $384 = $383 ^ -1; + $385 = $247 & $384; + HEAP32[(21296)>>2] = $385; + $469 = $385; + break L176; + } + } else { + $386 = HEAP32[(21308)>>2]|0; + $387 = ($386>>>0)>($351>>>0); + if ($387) { + _abort(); + // unreachable; + } else { + $388 = ((($351)) + 16|0); + $389 = HEAP32[$388>>2]|0; + $390 = ($389|0)==($$4$lcssa$i|0); + $391 = ((($351)) + 20|0); + $$sink325 = $390 ? $388 : $391; + HEAP32[$$sink325>>2] = $$3371$i; + $392 = ($$3371$i|0)==(0|0); + if ($392) { + $469 = $247; + break L176; + } else { + break; + } + } + } + } while(0); + $393 = HEAP32[(21308)>>2]|0; + $394 = ($393>>>0)>($$3371$i>>>0); + if ($394) { + _abort(); + // unreachable; + } + $395 = ((($$3371$i)) + 24|0); + HEAP32[$395>>2] = $351; + $396 = ((($$4$lcssa$i)) + 16|0); + $397 = HEAP32[$396>>2]|0; + $398 = ($397|0)==(0|0); + do { + if (!($398)) { + $399 = ($393>>>0)>($397>>>0); + if ($399) { + _abort(); + // unreachable; + } else { + $400 = ((($$3371$i)) + 16|0); + HEAP32[$400>>2] = $397; + $401 = ((($397)) + 24|0); + HEAP32[$401>>2] = $$3371$i; + break; + } + } + } while(0); + $402 = ((($$4$lcssa$i)) + 20|0); + $403 = HEAP32[$402>>2]|0; + $404 = ($403|0)==(0|0); + if ($404) { + $469 = $247; + } else { + $405 = HEAP32[(21308)>>2]|0; + $406 = ($405>>>0)>($403>>>0); + if ($406) { + _abort(); + // unreachable; + } else { + $407 = ((($$3371$i)) + 20|0); + HEAP32[$407>>2] = $403; + $408 = ((($403)) + 24|0); + HEAP32[$408>>2] = $$3371$i; + $469 = $247; + break; + } + } + } + } while(0); + $409 = ($$4349$lcssa$i>>>0)<(16); + L200: do { + if ($409) { + $410 = (($$4349$lcssa$i) + ($246))|0; + $411 = $410 | 3; + $412 = ((($$4$lcssa$i)) + 4|0); + HEAP32[$412>>2] = $411; + $413 = (($$4$lcssa$i) + ($410)|0); + $414 = ((($413)) + 4|0); + $415 = HEAP32[$414>>2]|0; + $416 = $415 | 1; + HEAP32[$414>>2] = $416; + } else { + $417 = $246 | 3; + $418 = ((($$4$lcssa$i)) + 4|0); + HEAP32[$418>>2] = $417; + $419 = $$4349$lcssa$i | 1; + $420 = ((($348)) + 4|0); + HEAP32[$420>>2] = $419; + $421 = (($348) + ($$4349$lcssa$i)|0); + HEAP32[$421>>2] = $$4349$lcssa$i; + $422 = $$4349$lcssa$i >>> 3; + $423 = ($$4349$lcssa$i>>>0)<(256); + if ($423) { + $424 = $422 << 1; + $425 = (21332 + ($424<<2)|0); + $426 = HEAP32[5323]|0; + $427 = 1 << $422; + $428 = $426 & $427; + $429 = ($428|0)==(0); + if ($429) { + $430 = $426 | $427; + HEAP32[5323] = $430; + $$pre$i208 = ((($425)) + 8|0); + $$0367$i = $425;$$pre$phi$i209Z2D = $$pre$i208; + } else { + $431 = ((($425)) + 8|0); + $432 = HEAP32[$431>>2]|0; + $433 = HEAP32[(21308)>>2]|0; + $434 = ($433>>>0)>($432>>>0); + if ($434) { + _abort(); + // unreachable; + } else { + $$0367$i = $432;$$pre$phi$i209Z2D = $431; + } + } + HEAP32[$$pre$phi$i209Z2D>>2] = $348; + $435 = ((($$0367$i)) + 12|0); + HEAP32[$435>>2] = $348; + $436 = ((($348)) + 8|0); + HEAP32[$436>>2] = $$0367$i; + $437 = ((($348)) + 12|0); + HEAP32[$437>>2] = $425; + break; + } + $438 = $$4349$lcssa$i >>> 8; + $439 = ($438|0)==(0); + if ($439) { + $$0360$i = 0; + } else { + $440 = ($$4349$lcssa$i>>>0)>(16777215); + if ($440) { + $$0360$i = 31; + } else { + $441 = (($438) + 1048320)|0; + $442 = $441 >>> 16; + $443 = $442 & 8; + $444 = $438 << $443; + $445 = (($444) + 520192)|0; + $446 = $445 >>> 16; + $447 = $446 & 4; + $448 = $447 | $443; + $449 = $444 << $447; + $450 = (($449) + 245760)|0; + $451 = $450 >>> 16; + $452 = $451 & 2; + $453 = $448 | $452; + $454 = (14 - ($453))|0; + $455 = $449 << $452; + $456 = $455 >>> 15; + $457 = (($454) + ($456))|0; + $458 = $457 << 1; + $459 = (($457) + 7)|0; + $460 = $$4349$lcssa$i >>> $459; + $461 = $460 & 1; + $462 = $461 | $458; + $$0360$i = $462; + } + } + $463 = (21596 + ($$0360$i<<2)|0); + $464 = ((($348)) + 28|0); + HEAP32[$464>>2] = $$0360$i; + $465 = ((($348)) + 16|0); + $466 = ((($465)) + 4|0); + HEAP32[$466>>2] = 0; + HEAP32[$465>>2] = 0; + $467 = 1 << $$0360$i; + $468 = $469 & $467; + $470 = ($468|0)==(0); + if ($470) { + $471 = $469 | $467; + HEAP32[(21296)>>2] = $471; + HEAP32[$463>>2] = $348; + $472 = ((($348)) + 24|0); + HEAP32[$472>>2] = $463; + $473 = ((($348)) + 12|0); + HEAP32[$473>>2] = $348; + $474 = ((($348)) + 8|0); + HEAP32[$474>>2] = $348; + break; + } + $475 = HEAP32[$463>>2]|0; + $476 = ((($475)) + 4|0); + $477 = HEAP32[$476>>2]|0; + $478 = $477 & -8; + $479 = ($478|0)==($$4349$lcssa$i|0); + L218: do { + if ($479) { + $$0343$lcssa$i = $475; + } else { + $480 = ($$0360$i|0)==(31); + $481 = $$0360$i >>> 1; + $482 = (25 - ($481))|0; + $483 = $480 ? 0 : $482; + $484 = $$4349$lcssa$i << $483; + $$034217$i = $484;$$034316$i = $475; + while(1) { + $491 = $$034217$i >>> 31; + $492 = (((($$034316$i)) + 16|0) + ($491<<2)|0); + $487 = HEAP32[$492>>2]|0; + $493 = ($487|0)==(0|0); + if ($493) { + break; + } + $485 = $$034217$i << 1; + $486 = ((($487)) + 4|0); + $488 = HEAP32[$486>>2]|0; + $489 = $488 & -8; + $490 = ($489|0)==($$4349$lcssa$i|0); + if ($490) { + $$0343$lcssa$i = $487; + break L218; + } else { + $$034217$i = $485;$$034316$i = $487; + } + } + $494 = HEAP32[(21308)>>2]|0; + $495 = ($494>>>0)>($492>>>0); + if ($495) { + _abort(); + // unreachable; + } else { + HEAP32[$492>>2] = $348; + $496 = ((($348)) + 24|0); + HEAP32[$496>>2] = $$034316$i; + $497 = ((($348)) + 12|0); + HEAP32[$497>>2] = $348; + $498 = ((($348)) + 8|0); + HEAP32[$498>>2] = $348; + break L200; + } + } + } while(0); + $499 = ((($$0343$lcssa$i)) + 8|0); + $500 = HEAP32[$499>>2]|0; + $501 = HEAP32[(21308)>>2]|0; + $502 = ($501>>>0)<=($$0343$lcssa$i>>>0); + $503 = ($501>>>0)<=($500>>>0); + $504 = $503 & $502; + if ($504) { + $505 = ((($500)) + 12|0); + HEAP32[$505>>2] = $348; + HEAP32[$499>>2] = $348; + $506 = ((($348)) + 8|0); + HEAP32[$506>>2] = $500; + $507 = ((($348)) + 12|0); + HEAP32[$507>>2] = $$0343$lcssa$i; + $508 = ((($348)) + 24|0); + HEAP32[$508>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $509 = ((($$4$lcssa$i)) + 8|0); + $$0 = $509; + STACKTOP = sp;return ($$0|0); + } else { + $$0197 = $246; + } + } + } + } + } + } while(0); + $510 = HEAP32[(21300)>>2]|0; + $511 = ($510>>>0)<($$0197>>>0); + if (!($511)) { + $512 = (($510) - ($$0197))|0; + $513 = HEAP32[(21312)>>2]|0; + $514 = ($512>>>0)>(15); + if ($514) { + $515 = (($513) + ($$0197)|0); + HEAP32[(21312)>>2] = $515; + HEAP32[(21300)>>2] = $512; + $516 = $512 | 1; + $517 = ((($515)) + 4|0); + HEAP32[$517>>2] = $516; + $518 = (($513) + ($510)|0); + HEAP32[$518>>2] = $512; + $519 = $$0197 | 3; + $520 = ((($513)) + 4|0); + HEAP32[$520>>2] = $519; + } else { + HEAP32[(21300)>>2] = 0; + HEAP32[(21312)>>2] = 0; + $521 = $510 | 3; + $522 = ((($513)) + 4|0); + HEAP32[$522>>2] = $521; + $523 = (($513) + ($510)|0); + $524 = ((($523)) + 4|0); + $525 = HEAP32[$524>>2]|0; + $526 = $525 | 1; + HEAP32[$524>>2] = $526; + } + $527 = ((($513)) + 8|0); + $$0 = $527; + STACKTOP = sp;return ($$0|0); + } + $528 = HEAP32[(21304)>>2]|0; + $529 = ($528>>>0)>($$0197>>>0); + if ($529) { + $530 = (($528) - ($$0197))|0; + HEAP32[(21304)>>2] = $530; + $531 = HEAP32[(21316)>>2]|0; + $532 = (($531) + ($$0197)|0); + HEAP32[(21316)>>2] = $532; + $533 = $530 | 1; + $534 = ((($532)) + 4|0); + HEAP32[$534>>2] = $533; + $535 = $$0197 | 3; + $536 = ((($531)) + 4|0); + HEAP32[$536>>2] = $535; + $537 = ((($531)) + 8|0); + $$0 = $537; + STACKTOP = sp;return ($$0|0); + } + $538 = HEAP32[5441]|0; + $539 = ($538|0)==(0); + if ($539) { + HEAP32[(21772)>>2] = 4096; + HEAP32[(21768)>>2] = 4096; + HEAP32[(21776)>>2] = -1; + HEAP32[(21780)>>2] = -1; + HEAP32[(21784)>>2] = 0; + HEAP32[(21736)>>2] = 0; + $540 = $1; + $541 = $540 & -16; + $542 = $541 ^ 1431655768; + HEAP32[5441] = $542; + $546 = 4096; + } else { + $$pre$i210 = HEAP32[(21772)>>2]|0; + $546 = $$pre$i210; + } + $543 = (($$0197) + 48)|0; + $544 = (($$0197) + 47)|0; + $545 = (($546) + ($544))|0; + $547 = (0 - ($546))|0; + $548 = $545 & $547; + $549 = ($548>>>0)>($$0197>>>0); + if (!($549)) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + $550 = HEAP32[(21732)>>2]|0; + $551 = ($550|0)==(0); + if (!($551)) { + $552 = HEAP32[(21724)>>2]|0; + $553 = (($552) + ($548))|0; + $554 = ($553>>>0)<=($552>>>0); + $555 = ($553>>>0)>($550>>>0); + $or$cond1$i = $554 | $555; + if ($or$cond1$i) { + $$0 = 0; + STACKTOP = sp;return ($$0|0); + } + } + $556 = HEAP32[(21736)>>2]|0; + $557 = $556 & 4; + $558 = ($557|0)==(0); + L257: do { + if ($558) { + $559 = HEAP32[(21316)>>2]|0; + $560 = ($559|0)==(0|0); + L259: do { + if ($560) { + label = 173; + } else { + $$0$i$i = (21740); + while(1) { + $561 = HEAP32[$$0$i$i>>2]|0; + $562 = ($561>>>0)>($559>>>0); + if (!($562)) { + $563 = ((($$0$i$i)) + 4|0); + $564 = HEAP32[$563>>2]|0; + $565 = (($561) + ($564)|0); + $566 = ($565>>>0)>($559>>>0); + if ($566) { + break; + } + } + $567 = ((($$0$i$i)) + 8|0); + $568 = HEAP32[$567>>2]|0; + $569 = ($568|0)==(0|0); + if ($569) { + label = 173; + break L259; + } else { + $$0$i$i = $568; + } + } + $592 = (($545) - ($528))|0; + $593 = $592 & $547; + $594 = ($593>>>0)<(2147483647); + if ($594) { + $595 = ((($$0$i$i)) + 4|0); + $596 = (_sbrk(($593|0))|0); + $597 = HEAP32[$$0$i$i>>2]|0; + $598 = HEAP32[$595>>2]|0; + $599 = (($597) + ($598)|0); + $600 = ($596|0)==($599|0); + if ($600) { + $601 = ($596|0)==((-1)|0); + if ($601) { + $$2234243136$i = $593; + } else { + $$723947$i = $593;$$748$i = $596; + label = 190; + break L257; + } + } else { + $$2247$ph$i = $596;$$2253$ph$i = $593; + label = 181; + } + } else { + $$2234243136$i = 0; + } + } + } while(0); + do { + if ((label|0) == 173) { + $570 = (_sbrk(0)|0); + $571 = ($570|0)==((-1)|0); + if ($571) { + $$2234243136$i = 0; + } else { + $572 = $570; + $573 = HEAP32[(21768)>>2]|0; + $574 = (($573) + -1)|0; + $575 = $574 & $572; + $576 = ($575|0)==(0); + $577 = (($574) + ($572))|0; + $578 = (0 - ($573))|0; + $579 = $577 & $578; + $580 = (($579) - ($572))|0; + $581 = $576 ? 0 : $580; + $spec$select49$i = (($581) + ($548))|0; + $582 = HEAP32[(21724)>>2]|0; + $583 = (($spec$select49$i) + ($582))|0; + $584 = ($spec$select49$i>>>0)>($$0197>>>0); + $585 = ($spec$select49$i>>>0)<(2147483647); + $or$cond$i213 = $584 & $585; + if ($or$cond$i213) { + $586 = HEAP32[(21732)>>2]|0; + $587 = ($586|0)==(0); + if (!($587)) { + $588 = ($583>>>0)<=($582>>>0); + $589 = ($583>>>0)>($586>>>0); + $or$cond2$i214 = $588 | $589; + if ($or$cond2$i214) { + $$2234243136$i = 0; + break; + } + } + $590 = (_sbrk(($spec$select49$i|0))|0); + $591 = ($590|0)==($570|0); + if ($591) { + $$723947$i = $spec$select49$i;$$748$i = $570; + label = 190; + break L257; + } else { + $$2247$ph$i = $590;$$2253$ph$i = $spec$select49$i; + label = 181; + } + } else { + $$2234243136$i = 0; + } + } + } + } while(0); + do { + if ((label|0) == 181) { + $602 = (0 - ($$2253$ph$i))|0; + $603 = ($$2247$ph$i|0)!=((-1)|0); + $604 = ($$2253$ph$i>>>0)<(2147483647); + $or$cond7$i = $604 & $603; + $605 = ($543>>>0)>($$2253$ph$i>>>0); + $or$cond6$i = $605 & $or$cond7$i; + if (!($or$cond6$i)) { + $615 = ($$2247$ph$i|0)==((-1)|0); + if ($615) { + $$2234243136$i = 0; + break; + } else { + $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i; + label = 190; + break L257; + } + } + $606 = HEAP32[(21772)>>2]|0; + $607 = (($544) - ($$2253$ph$i))|0; + $608 = (($607) + ($606))|0; + $609 = (0 - ($606))|0; + $610 = $608 & $609; + $611 = ($610>>>0)<(2147483647); + if (!($611)) { + $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i; + label = 190; + break L257; + } + $612 = (_sbrk(($610|0))|0); + $613 = ($612|0)==((-1)|0); + if ($613) { + (_sbrk(($602|0))|0); + $$2234243136$i = 0; + break; + } else { + $614 = (($610) + ($$2253$ph$i))|0; + $$723947$i = $614;$$748$i = $$2247$ph$i; + label = 190; + break L257; + } + } + } while(0); + $616 = HEAP32[(21736)>>2]|0; + $617 = $616 | 4; + HEAP32[(21736)>>2] = $617; + $$4236$i = $$2234243136$i; + label = 188; + } else { + $$4236$i = 0; + label = 188; + } + } while(0); + if ((label|0) == 188) { + $618 = ($548>>>0)<(2147483647); + if ($618) { + $619 = (_sbrk(($548|0))|0); + $620 = (_sbrk(0)|0); + $621 = ($619|0)!=((-1)|0); + $622 = ($620|0)!=((-1)|0); + $or$cond5$i = $621 & $622; + $623 = ($619>>>0)<($620>>>0); + $or$cond8$i = $623 & $or$cond5$i; + $624 = $620; + $625 = $619; + $626 = (($624) - ($625))|0; + $627 = (($$0197) + 40)|0; + $628 = ($626>>>0)>($627>>>0); + $spec$select9$i = $628 ? $626 : $$4236$i; + $or$cond8$not$i = $or$cond8$i ^ 1; + $629 = ($619|0)==((-1)|0); + $not$$i = $628 ^ 1; + $630 = $629 | $not$$i; + $or$cond50$i = $630 | $or$cond8$not$i; + if (!($or$cond50$i)) { + $$723947$i = $spec$select9$i;$$748$i = $619; + label = 190; + } + } + } + if ((label|0) == 190) { + $631 = HEAP32[(21724)>>2]|0; + $632 = (($631) + ($$723947$i))|0; + HEAP32[(21724)>>2] = $632; + $633 = HEAP32[(21728)>>2]|0; + $634 = ($632>>>0)>($633>>>0); + if ($634) { + HEAP32[(21728)>>2] = $632; + } + $635 = HEAP32[(21316)>>2]|0; + $636 = ($635|0)==(0|0); + L294: do { + if ($636) { + $637 = HEAP32[(21308)>>2]|0; + $638 = ($637|0)==(0|0); + $639 = ($$748$i>>>0)<($637>>>0); + $or$cond11$i = $638 | $639; + if ($or$cond11$i) { + HEAP32[(21308)>>2] = $$748$i; + } + HEAP32[(21740)>>2] = $$748$i; + HEAP32[(21744)>>2] = $$723947$i; + HEAP32[(21752)>>2] = 0; + $640 = HEAP32[5441]|0; + HEAP32[(21328)>>2] = $640; + HEAP32[(21324)>>2] = -1; + HEAP32[(21344)>>2] = (21332); + HEAP32[(21340)>>2] = (21332); + HEAP32[(21352)>>2] = (21340); + HEAP32[(21348)>>2] = (21340); + HEAP32[(21360)>>2] = (21348); + HEAP32[(21356)>>2] = (21348); + HEAP32[(21368)>>2] = (21356); + HEAP32[(21364)>>2] = (21356); + HEAP32[(21376)>>2] = (21364); + HEAP32[(21372)>>2] = (21364); + HEAP32[(21384)>>2] = (21372); + HEAP32[(21380)>>2] = (21372); + HEAP32[(21392)>>2] = (21380); + HEAP32[(21388)>>2] = (21380); + HEAP32[(21400)>>2] = (21388); + HEAP32[(21396)>>2] = (21388); + HEAP32[(21408)>>2] = (21396); + HEAP32[(21404)>>2] = (21396); + HEAP32[(21416)>>2] = (21404); + HEAP32[(21412)>>2] = (21404); + HEAP32[(21424)>>2] = (21412); + HEAP32[(21420)>>2] = (21412); + HEAP32[(21432)>>2] = (21420); + HEAP32[(21428)>>2] = (21420); + HEAP32[(21440)>>2] = (21428); + HEAP32[(21436)>>2] = (21428); + HEAP32[(21448)>>2] = (21436); + HEAP32[(21444)>>2] = (21436); + HEAP32[(21456)>>2] = (21444); + HEAP32[(21452)>>2] = (21444); + HEAP32[(21464)>>2] = (21452); + HEAP32[(21460)>>2] = (21452); + HEAP32[(21472)>>2] = (21460); + HEAP32[(21468)>>2] = (21460); + HEAP32[(21480)>>2] = (21468); + HEAP32[(21476)>>2] = (21468); + HEAP32[(21488)>>2] = (21476); + HEAP32[(21484)>>2] = (21476); + HEAP32[(21496)>>2] = (21484); + HEAP32[(21492)>>2] = (21484); + HEAP32[(21504)>>2] = (21492); + HEAP32[(21500)>>2] = (21492); + HEAP32[(21512)>>2] = (21500); + HEAP32[(21508)>>2] = (21500); + HEAP32[(21520)>>2] = (21508); + HEAP32[(21516)>>2] = (21508); + HEAP32[(21528)>>2] = (21516); + HEAP32[(21524)>>2] = (21516); + HEAP32[(21536)>>2] = (21524); + HEAP32[(21532)>>2] = (21524); + HEAP32[(21544)>>2] = (21532); + HEAP32[(21540)>>2] = (21532); + HEAP32[(21552)>>2] = (21540); + HEAP32[(21548)>>2] = (21540); + HEAP32[(21560)>>2] = (21548); + HEAP32[(21556)>>2] = (21548); + HEAP32[(21568)>>2] = (21556); + HEAP32[(21564)>>2] = (21556); + HEAP32[(21576)>>2] = (21564); + HEAP32[(21572)>>2] = (21564); + HEAP32[(21584)>>2] = (21572); + HEAP32[(21580)>>2] = (21572); + HEAP32[(21592)>>2] = (21580); + HEAP32[(21588)>>2] = (21580); + $641 = (($$723947$i) + -40)|0; + $642 = ((($$748$i)) + 8|0); + $643 = $642; + $644 = $643 & 7; + $645 = ($644|0)==(0); + $646 = (0 - ($643))|0; + $647 = $646 & 7; + $648 = $645 ? 0 : $647; + $649 = (($$748$i) + ($648)|0); + $650 = (($641) - ($648))|0; + HEAP32[(21316)>>2] = $649; + HEAP32[(21304)>>2] = $650; + $651 = $650 | 1; + $652 = ((($649)) + 4|0); + HEAP32[$652>>2] = $651; + $653 = (($$748$i) + ($641)|0); + $654 = ((($653)) + 4|0); + HEAP32[$654>>2] = 40; + $655 = HEAP32[(21780)>>2]|0; + HEAP32[(21320)>>2] = $655; + } else { + $$024372$i = (21740); + while(1) { + $656 = HEAP32[$$024372$i>>2]|0; + $657 = ((($$024372$i)) + 4|0); + $658 = HEAP32[$657>>2]|0; + $659 = (($656) + ($658)|0); + $660 = ($$748$i|0)==($659|0); + if ($660) { + label = 199; + break; + } + $661 = ((($$024372$i)) + 8|0); + $662 = HEAP32[$661>>2]|0; + $663 = ($662|0)==(0|0); + if ($663) { + break; + } else { + $$024372$i = $662; + } + } + if ((label|0) == 199) { + $664 = ((($$024372$i)) + 4|0); + $665 = ((($$024372$i)) + 12|0); + $666 = HEAP32[$665>>2]|0; + $667 = $666 & 8; + $668 = ($667|0)==(0); + if ($668) { + $669 = ($656>>>0)<=($635>>>0); + $670 = ($$748$i>>>0)>($635>>>0); + $or$cond51$i = $670 & $669; + if ($or$cond51$i) { + $671 = (($658) + ($$723947$i))|0; + HEAP32[$664>>2] = $671; + $672 = HEAP32[(21304)>>2]|0; + $673 = (($672) + ($$723947$i))|0; + $674 = ((($635)) + 8|0); + $675 = $674; + $676 = $675 & 7; + $677 = ($676|0)==(0); + $678 = (0 - ($675))|0; + $679 = $678 & 7; + $680 = $677 ? 0 : $679; + $681 = (($635) + ($680)|0); + $682 = (($673) - ($680))|0; + HEAP32[(21316)>>2] = $681; + HEAP32[(21304)>>2] = $682; + $683 = $682 | 1; + $684 = ((($681)) + 4|0); + HEAP32[$684>>2] = $683; + $685 = (($635) + ($673)|0); + $686 = ((($685)) + 4|0); + HEAP32[$686>>2] = 40; + $687 = HEAP32[(21780)>>2]|0; + HEAP32[(21320)>>2] = $687; + break; + } + } + } + $688 = HEAP32[(21308)>>2]|0; + $689 = ($$748$i>>>0)<($688>>>0); + if ($689) { + HEAP32[(21308)>>2] = $$748$i; + $753 = $$748$i; + } else { + $753 = $688; + } + $690 = (($$748$i) + ($$723947$i)|0); + $$124471$i = (21740); + while(1) { + $691 = HEAP32[$$124471$i>>2]|0; + $692 = ($691|0)==($690|0); + if ($692) { + label = 207; + break; + } + $693 = ((($$124471$i)) + 8|0); + $694 = HEAP32[$693>>2]|0; + $695 = ($694|0)==(0|0); + if ($695) { + break; + } else { + $$124471$i = $694; + } + } + if ((label|0) == 207) { + $696 = ((($$124471$i)) + 12|0); + $697 = HEAP32[$696>>2]|0; + $698 = $697 & 8; + $699 = ($698|0)==(0); + if ($699) { + HEAP32[$$124471$i>>2] = $$748$i; + $700 = ((($$124471$i)) + 4|0); + $701 = HEAP32[$700>>2]|0; + $702 = (($701) + ($$723947$i))|0; + HEAP32[$700>>2] = $702; + $703 = ((($$748$i)) + 8|0); + $704 = $703; + $705 = $704 & 7; + $706 = ($705|0)==(0); + $707 = (0 - ($704))|0; + $708 = $707 & 7; + $709 = $706 ? 0 : $708; + $710 = (($$748$i) + ($709)|0); + $711 = ((($690)) + 8|0); + $712 = $711; + $713 = $712 & 7; + $714 = ($713|0)==(0); + $715 = (0 - ($712))|0; + $716 = $715 & 7; + $717 = $714 ? 0 : $716; + $718 = (($690) + ($717)|0); + $719 = $718; + $720 = $710; + $721 = (($719) - ($720))|0; + $722 = (($710) + ($$0197)|0); + $723 = (($721) - ($$0197))|0; + $724 = $$0197 | 3; + $725 = ((($710)) + 4|0); + HEAP32[$725>>2] = $724; + $726 = ($635|0)==($718|0); + L317: do { + if ($726) { + $727 = HEAP32[(21304)>>2]|0; + $728 = (($727) + ($723))|0; + HEAP32[(21304)>>2] = $728; + HEAP32[(21316)>>2] = $722; + $729 = $728 | 1; + $730 = ((($722)) + 4|0); + HEAP32[$730>>2] = $729; + } else { + $731 = HEAP32[(21312)>>2]|0; + $732 = ($731|0)==($718|0); + if ($732) { + $733 = HEAP32[(21300)>>2]|0; + $734 = (($733) + ($723))|0; + HEAP32[(21300)>>2] = $734; + HEAP32[(21312)>>2] = $722; + $735 = $734 | 1; + $736 = ((($722)) + 4|0); + HEAP32[$736>>2] = $735; + $737 = (($722) + ($734)|0); + HEAP32[$737>>2] = $734; + break; + } + $738 = ((($718)) + 4|0); + $739 = HEAP32[$738>>2]|0; + $740 = $739 & 3; + $741 = ($740|0)==(1); + if ($741) { + $742 = $739 & -8; + $743 = $739 >>> 3; + $744 = ($739>>>0)<(256); + L325: do { + if ($744) { + $745 = ((($718)) + 8|0); + $746 = HEAP32[$745>>2]|0; + $747 = ((($718)) + 12|0); + $748 = HEAP32[$747>>2]|0; + $749 = $743 << 1; + $750 = (21332 + ($749<<2)|0); + $751 = ($746|0)==($750|0); + do { + if (!($751)) { + $752 = ($753>>>0)>($746>>>0); + if ($752) { + _abort(); + // unreachable; + } + $754 = ((($746)) + 12|0); + $755 = HEAP32[$754>>2]|0; + $756 = ($755|0)==($718|0); + if ($756) { + break; + } + _abort(); + // unreachable; + } + } while(0); + $757 = ($748|0)==($746|0); + if ($757) { + $758 = 1 << $743; + $759 = $758 ^ -1; + $760 = HEAP32[5323]|0; + $761 = $760 & $759; + HEAP32[5323] = $761; + break; + } + $762 = ($748|0)==($750|0); + do { + if ($762) { + $$pre16$i$i = ((($748)) + 8|0); + $$pre$phi17$i$iZ2D = $$pre16$i$i; + } else { + $763 = ($753>>>0)>($748>>>0); + if ($763) { + _abort(); + // unreachable; + } + $764 = ((($748)) + 8|0); + $765 = HEAP32[$764>>2]|0; + $766 = ($765|0)==($718|0); + if ($766) { + $$pre$phi17$i$iZ2D = $764; + break; + } + _abort(); + // unreachable; + } + } while(0); + $767 = ((($746)) + 12|0); + HEAP32[$767>>2] = $748; + HEAP32[$$pre$phi17$i$iZ2D>>2] = $746; + } else { + $768 = ((($718)) + 24|0); + $769 = HEAP32[$768>>2]|0; + $770 = ((($718)) + 12|0); + $771 = HEAP32[$770>>2]|0; + $772 = ($771|0)==($718|0); + do { + if ($772) { + $782 = ((($718)) + 16|0); + $783 = ((($782)) + 4|0); + $784 = HEAP32[$783>>2]|0; + $785 = ($784|0)==(0|0); + if ($785) { + $786 = HEAP32[$782>>2]|0; + $787 = ($786|0)==(0|0); + if ($787) { + $$3$i$i = 0; + break; + } else { + $$1290$i$i$ph = $786;$$1292$i$i$ph = $782; + } + } else { + $$1290$i$i$ph = $784;$$1292$i$i$ph = $783; + } + $$1290$i$i = $$1290$i$i$ph;$$1292$i$i = $$1292$i$i$ph; + while(1) { + $788 = ((($$1290$i$i)) + 20|0); + $789 = HEAP32[$788>>2]|0; + $790 = ($789|0)==(0|0); + if ($790) { + $791 = ((($$1290$i$i)) + 16|0); + $792 = HEAP32[$791>>2]|0; + $793 = ($792|0)==(0|0); + if ($793) { + break; + } else { + $$1290$i$i$be = $792;$$1292$i$i$be = $791; + } + } else { + $$1290$i$i$be = $789;$$1292$i$i$be = $788; + } + $$1290$i$i = $$1290$i$i$be;$$1292$i$i = $$1292$i$i$be; + } + $794 = ($753>>>0)>($$1292$i$i>>>0); + if ($794) { + _abort(); + // unreachable; + } else { + HEAP32[$$1292$i$i>>2] = 0; + $$3$i$i = $$1290$i$i; + break; + } + } else { + $773 = ((($718)) + 8|0); + $774 = HEAP32[$773>>2]|0; + $775 = ($753>>>0)>($774>>>0); + if ($775) { + _abort(); + // unreachable; + } + $776 = ((($774)) + 12|0); + $777 = HEAP32[$776>>2]|0; + $778 = ($777|0)==($718|0); + if (!($778)) { + _abort(); + // unreachable; + } + $779 = ((($771)) + 8|0); + $780 = HEAP32[$779>>2]|0; + $781 = ($780|0)==($718|0); + if ($781) { + HEAP32[$776>>2] = $771; + HEAP32[$779>>2] = $774; + $$3$i$i = $771; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $795 = ($769|0)==(0|0); + if ($795) { + break; + } + $796 = ((($718)) + 28|0); + $797 = HEAP32[$796>>2]|0; + $798 = (21596 + ($797<<2)|0); + $799 = HEAP32[$798>>2]|0; + $800 = ($799|0)==($718|0); + do { + if ($800) { + HEAP32[$798>>2] = $$3$i$i; + $cond$i$i = ($$3$i$i|0)==(0|0); + if (!($cond$i$i)) { + break; + } + $801 = 1 << $797; + $802 = $801 ^ -1; + $803 = HEAP32[(21296)>>2]|0; + $804 = $803 & $802; + HEAP32[(21296)>>2] = $804; + break L325; + } else { + $805 = HEAP32[(21308)>>2]|0; + $806 = ($805>>>0)>($769>>>0); + if ($806) { + _abort(); + // unreachable; + } else { + $807 = ((($769)) + 16|0); + $808 = HEAP32[$807>>2]|0; + $809 = ($808|0)==($718|0); + $810 = ((($769)) + 20|0); + $$sink326 = $809 ? $807 : $810; + HEAP32[$$sink326>>2] = $$3$i$i; + $811 = ($$3$i$i|0)==(0|0); + if ($811) { + break L325; + } else { + break; + } + } + } + } while(0); + $812 = HEAP32[(21308)>>2]|0; + $813 = ($812>>>0)>($$3$i$i>>>0); + if ($813) { + _abort(); + // unreachable; + } + $814 = ((($$3$i$i)) + 24|0); + HEAP32[$814>>2] = $769; + $815 = ((($718)) + 16|0); + $816 = HEAP32[$815>>2]|0; + $817 = ($816|0)==(0|0); + do { + if (!($817)) { + $818 = ($812>>>0)>($816>>>0); + if ($818) { + _abort(); + // unreachable; + } else { + $819 = ((($$3$i$i)) + 16|0); + HEAP32[$819>>2] = $816; + $820 = ((($816)) + 24|0); + HEAP32[$820>>2] = $$3$i$i; + break; + } + } + } while(0); + $821 = ((($815)) + 4|0); + $822 = HEAP32[$821>>2]|0; + $823 = ($822|0)==(0|0); + if ($823) { + break; + } + $824 = HEAP32[(21308)>>2]|0; + $825 = ($824>>>0)>($822>>>0); + if ($825) { + _abort(); + // unreachable; + } else { + $826 = ((($$3$i$i)) + 20|0); + HEAP32[$826>>2] = $822; + $827 = ((($822)) + 24|0); + HEAP32[$827>>2] = $$3$i$i; + break; + } + } + } while(0); + $828 = (($718) + ($742)|0); + $829 = (($742) + ($723))|0; + $$0$i16$i = $828;$$0286$i$i = $829; + } else { + $$0$i16$i = $718;$$0286$i$i = $723; + } + $830 = ((($$0$i16$i)) + 4|0); + $831 = HEAP32[$830>>2]|0; + $832 = $831 & -2; + HEAP32[$830>>2] = $832; + $833 = $$0286$i$i | 1; + $834 = ((($722)) + 4|0); + HEAP32[$834>>2] = $833; + $835 = (($722) + ($$0286$i$i)|0); + HEAP32[$835>>2] = $$0286$i$i; + $836 = $$0286$i$i >>> 3; + $837 = ($$0286$i$i>>>0)<(256); + if ($837) { + $838 = $836 << 1; + $839 = (21332 + ($838<<2)|0); + $840 = HEAP32[5323]|0; + $841 = 1 << $836; + $842 = $840 & $841; + $843 = ($842|0)==(0); + do { + if ($843) { + $844 = $840 | $841; + HEAP32[5323] = $844; + $$pre$i17$i = ((($839)) + 8|0); + $$0294$i$i = $839;$$pre$phi$i18$iZ2D = $$pre$i17$i; + } else { + $845 = ((($839)) + 8|0); + $846 = HEAP32[$845>>2]|0; + $847 = HEAP32[(21308)>>2]|0; + $848 = ($847>>>0)>($846>>>0); + if (!($848)) { + $$0294$i$i = $846;$$pre$phi$i18$iZ2D = $845; + break; + } + _abort(); + // unreachable; + } + } while(0); + HEAP32[$$pre$phi$i18$iZ2D>>2] = $722; + $849 = ((($$0294$i$i)) + 12|0); + HEAP32[$849>>2] = $722; + $850 = ((($722)) + 8|0); + HEAP32[$850>>2] = $$0294$i$i; + $851 = ((($722)) + 12|0); + HEAP32[$851>>2] = $839; + break; + } + $852 = $$0286$i$i >>> 8; + $853 = ($852|0)==(0); + do { + if ($853) { + $$0295$i$i = 0; + } else { + $854 = ($$0286$i$i>>>0)>(16777215); + if ($854) { + $$0295$i$i = 31; + break; + } + $855 = (($852) + 1048320)|0; + $856 = $855 >>> 16; + $857 = $856 & 8; + $858 = $852 << $857; + $859 = (($858) + 520192)|0; + $860 = $859 >>> 16; + $861 = $860 & 4; + $862 = $861 | $857; + $863 = $858 << $861; + $864 = (($863) + 245760)|0; + $865 = $864 >>> 16; + $866 = $865 & 2; + $867 = $862 | $866; + $868 = (14 - ($867))|0; + $869 = $863 << $866; + $870 = $869 >>> 15; + $871 = (($868) + ($870))|0; + $872 = $871 << 1; + $873 = (($871) + 7)|0; + $874 = $$0286$i$i >>> $873; + $875 = $874 & 1; + $876 = $875 | $872; + $$0295$i$i = $876; + } + } while(0); + $877 = (21596 + ($$0295$i$i<<2)|0); + $878 = ((($722)) + 28|0); + HEAP32[$878>>2] = $$0295$i$i; + $879 = ((($722)) + 16|0); + $880 = ((($879)) + 4|0); + HEAP32[$880>>2] = 0; + HEAP32[$879>>2] = 0; + $881 = HEAP32[(21296)>>2]|0; + $882 = 1 << $$0295$i$i; + $883 = $881 & $882; + $884 = ($883|0)==(0); + if ($884) { + $885 = $881 | $882; + HEAP32[(21296)>>2] = $885; + HEAP32[$877>>2] = $722; + $886 = ((($722)) + 24|0); + HEAP32[$886>>2] = $877; + $887 = ((($722)) + 12|0); + HEAP32[$887>>2] = $722; + $888 = ((($722)) + 8|0); + HEAP32[$888>>2] = $722; + break; + } + $889 = HEAP32[$877>>2]|0; + $890 = ((($889)) + 4|0); + $891 = HEAP32[$890>>2]|0; + $892 = $891 & -8; + $893 = ($892|0)==($$0286$i$i|0); + L410: do { + if ($893) { + $$0288$lcssa$i$i = $889; + } else { + $894 = ($$0295$i$i|0)==(31); + $895 = $$0295$i$i >>> 1; + $896 = (25 - ($895))|0; + $897 = $894 ? 0 : $896; + $898 = $$0286$i$i << $897; + $$028711$i$i = $898;$$028810$i$i = $889; + while(1) { + $905 = $$028711$i$i >>> 31; + $906 = (((($$028810$i$i)) + 16|0) + ($905<<2)|0); + $901 = HEAP32[$906>>2]|0; + $907 = ($901|0)==(0|0); + if ($907) { + break; + } + $899 = $$028711$i$i << 1; + $900 = ((($901)) + 4|0); + $902 = HEAP32[$900>>2]|0; + $903 = $902 & -8; + $904 = ($903|0)==($$0286$i$i|0); + if ($904) { + $$0288$lcssa$i$i = $901; + break L410; + } else { + $$028711$i$i = $899;$$028810$i$i = $901; + } + } + $908 = HEAP32[(21308)>>2]|0; + $909 = ($908>>>0)>($906>>>0); + if ($909) { + _abort(); + // unreachable; + } else { + HEAP32[$906>>2] = $722; + $910 = ((($722)) + 24|0); + HEAP32[$910>>2] = $$028810$i$i; + $911 = ((($722)) + 12|0); + HEAP32[$911>>2] = $722; + $912 = ((($722)) + 8|0); + HEAP32[$912>>2] = $722; + break L317; + } + } + } while(0); + $913 = ((($$0288$lcssa$i$i)) + 8|0); + $914 = HEAP32[$913>>2]|0; + $915 = HEAP32[(21308)>>2]|0; + $916 = ($915>>>0)<=($$0288$lcssa$i$i>>>0); + $917 = ($915>>>0)<=($914>>>0); + $918 = $917 & $916; + if ($918) { + $919 = ((($914)) + 12|0); + HEAP32[$919>>2] = $722; + HEAP32[$913>>2] = $722; + $920 = ((($722)) + 8|0); + HEAP32[$920>>2] = $914; + $921 = ((($722)) + 12|0); + HEAP32[$921>>2] = $$0288$lcssa$i$i; + $922 = ((($722)) + 24|0); + HEAP32[$922>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $1059 = ((($710)) + 8|0); + $$0 = $1059; + STACKTOP = sp;return ($$0|0); + } + } + $$0$i$i$i = (21740); + while(1) { + $923 = HEAP32[$$0$i$i$i>>2]|0; + $924 = ($923>>>0)>($635>>>0); + if (!($924)) { + $925 = ((($$0$i$i$i)) + 4|0); + $926 = HEAP32[$925>>2]|0; + $927 = (($923) + ($926)|0); + $928 = ($927>>>0)>($635>>>0); + if ($928) { + break; + } + } + $929 = ((($$0$i$i$i)) + 8|0); + $930 = HEAP32[$929>>2]|0; + $$0$i$i$i = $930; + } + $931 = ((($927)) + -47|0); + $932 = ((($931)) + 8|0); + $933 = $932; + $934 = $933 & 7; + $935 = ($934|0)==(0); + $936 = (0 - ($933))|0; + $937 = $936 & 7; + $938 = $935 ? 0 : $937; + $939 = (($931) + ($938)|0); + $940 = ((($635)) + 16|0); + $941 = ($939>>>0)<($940>>>0); + $942 = $941 ? $635 : $939; + $943 = ((($942)) + 8|0); + $944 = ((($942)) + 24|0); + $945 = (($$723947$i) + -40)|0; + $946 = ((($$748$i)) + 8|0); + $947 = $946; + $948 = $947 & 7; + $949 = ($948|0)==(0); + $950 = (0 - ($947))|0; + $951 = $950 & 7; + $952 = $949 ? 0 : $951; + $953 = (($$748$i) + ($952)|0); + $954 = (($945) - ($952))|0; + HEAP32[(21316)>>2] = $953; + HEAP32[(21304)>>2] = $954; + $955 = $954 | 1; + $956 = ((($953)) + 4|0); + HEAP32[$956>>2] = $955; + $957 = (($$748$i) + ($945)|0); + $958 = ((($957)) + 4|0); + HEAP32[$958>>2] = 40; + $959 = HEAP32[(21780)>>2]|0; + HEAP32[(21320)>>2] = $959; + $960 = ((($942)) + 4|0); + HEAP32[$960>>2] = 27; + ;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; + HEAP32[(21740)>>2] = $$748$i; + HEAP32[(21744)>>2] = $$723947$i; + HEAP32[(21752)>>2] = 0; + HEAP32[(21748)>>2] = $943; + $962 = $944; + while(1) { + $961 = ((($962)) + 4|0); + HEAP32[$961>>2] = 7; + $963 = ((($962)) + 8|0); + $964 = ($963>>>0)<($927>>>0); + if ($964) { + $962 = $961; + } else { + break; + } + } + $965 = ($942|0)==($635|0); + if (!($965)) { + $966 = $942; + $967 = $635; + $968 = (($966) - ($967))|0; + $969 = HEAP32[$960>>2]|0; + $970 = $969 & -2; + HEAP32[$960>>2] = $970; + $971 = $968 | 1; + $972 = ((($635)) + 4|0); + HEAP32[$972>>2] = $971; + HEAP32[$942>>2] = $968; + $973 = $968 >>> 3; + $974 = ($968>>>0)<(256); + if ($974) { + $975 = $973 << 1; + $976 = (21332 + ($975<<2)|0); + $977 = HEAP32[5323]|0; + $978 = 1 << $973; + $979 = $977 & $978; + $980 = ($979|0)==(0); + if ($980) { + $981 = $977 | $978; + HEAP32[5323] = $981; + $$pre$i$i = ((($976)) + 8|0); + $$0211$i$i = $976;$$pre$phi$i$iZ2D = $$pre$i$i; + } else { + $982 = ((($976)) + 8|0); + $983 = HEAP32[$982>>2]|0; + $984 = HEAP32[(21308)>>2]|0; + $985 = ($984>>>0)>($983>>>0); + if ($985) { + _abort(); + // unreachable; + } else { + $$0211$i$i = $983;$$pre$phi$i$iZ2D = $982; + } + } + HEAP32[$$pre$phi$i$iZ2D>>2] = $635; + $986 = ((($$0211$i$i)) + 12|0); + HEAP32[$986>>2] = $635; + $987 = ((($635)) + 8|0); + HEAP32[$987>>2] = $$0211$i$i; + $988 = ((($635)) + 12|0); + HEAP32[$988>>2] = $976; + break; + } + $989 = $968 >>> 8; + $990 = ($989|0)==(0); + if ($990) { + $$0212$i$i = 0; + } else { + $991 = ($968>>>0)>(16777215); + if ($991) { + $$0212$i$i = 31; + } else { + $992 = (($989) + 1048320)|0; + $993 = $992 >>> 16; + $994 = $993 & 8; + $995 = $989 << $994; + $996 = (($995) + 520192)|0; + $997 = $996 >>> 16; + $998 = $997 & 4; + $999 = $998 | $994; + $1000 = $995 << $998; + $1001 = (($1000) + 245760)|0; + $1002 = $1001 >>> 16; + $1003 = $1002 & 2; + $1004 = $999 | $1003; + $1005 = (14 - ($1004))|0; + $1006 = $1000 << $1003; + $1007 = $1006 >>> 15; + $1008 = (($1005) + ($1007))|0; + $1009 = $1008 << 1; + $1010 = (($1008) + 7)|0; + $1011 = $968 >>> $1010; + $1012 = $1011 & 1; + $1013 = $1012 | $1009; + $$0212$i$i = $1013; + } + } + $1014 = (21596 + ($$0212$i$i<<2)|0); + $1015 = ((($635)) + 28|0); + HEAP32[$1015>>2] = $$0212$i$i; + $1016 = ((($635)) + 20|0); + HEAP32[$1016>>2] = 0; + HEAP32[$940>>2] = 0; + $1017 = HEAP32[(21296)>>2]|0; + $1018 = 1 << $$0212$i$i; + $1019 = $1017 & $1018; + $1020 = ($1019|0)==(0); + if ($1020) { + $1021 = $1017 | $1018; + HEAP32[(21296)>>2] = $1021; + HEAP32[$1014>>2] = $635; + $1022 = ((($635)) + 24|0); + HEAP32[$1022>>2] = $1014; + $1023 = ((($635)) + 12|0); + HEAP32[$1023>>2] = $635; + $1024 = ((($635)) + 8|0); + HEAP32[$1024>>2] = $635; + break; + } + $1025 = HEAP32[$1014>>2]|0; + $1026 = ((($1025)) + 4|0); + $1027 = HEAP32[$1026>>2]|0; + $1028 = $1027 & -8; + $1029 = ($1028|0)==($968|0); + L451: do { + if ($1029) { + $$0207$lcssa$i$i = $1025; + } else { + $1030 = ($$0212$i$i|0)==(31); + $1031 = $$0212$i$i >>> 1; + $1032 = (25 - ($1031))|0; + $1033 = $1030 ? 0 : $1032; + $1034 = $968 << $1033; + $$02065$i$i = $1034;$$02074$i$i = $1025; + while(1) { + $1041 = $$02065$i$i >>> 31; + $1042 = (((($$02074$i$i)) + 16|0) + ($1041<<2)|0); + $1037 = HEAP32[$1042>>2]|0; + $1043 = ($1037|0)==(0|0); + if ($1043) { + break; + } + $1035 = $$02065$i$i << 1; + $1036 = ((($1037)) + 4|0); + $1038 = HEAP32[$1036>>2]|0; + $1039 = $1038 & -8; + $1040 = ($1039|0)==($968|0); + if ($1040) { + $$0207$lcssa$i$i = $1037; + break L451; + } else { + $$02065$i$i = $1035;$$02074$i$i = $1037; + } + } + $1044 = HEAP32[(21308)>>2]|0; + $1045 = ($1044>>>0)>($1042>>>0); + if ($1045) { + _abort(); + // unreachable; + } else { + HEAP32[$1042>>2] = $635; + $1046 = ((($635)) + 24|0); + HEAP32[$1046>>2] = $$02074$i$i; + $1047 = ((($635)) + 12|0); + HEAP32[$1047>>2] = $635; + $1048 = ((($635)) + 8|0); + HEAP32[$1048>>2] = $635; + break L294; + } + } + } while(0); + $1049 = ((($$0207$lcssa$i$i)) + 8|0); + $1050 = HEAP32[$1049>>2]|0; + $1051 = HEAP32[(21308)>>2]|0; + $1052 = ($1051>>>0)<=($$0207$lcssa$i$i>>>0); + $1053 = ($1051>>>0)<=($1050>>>0); + $1054 = $1053 & $1052; + if ($1054) { + $1055 = ((($1050)) + 12|0); + HEAP32[$1055>>2] = $635; + HEAP32[$1049>>2] = $635; + $1056 = ((($635)) + 8|0); + HEAP32[$1056>>2] = $1050; + $1057 = ((($635)) + 12|0); + HEAP32[$1057>>2] = $$0207$lcssa$i$i; + $1058 = ((($635)) + 24|0); + HEAP32[$1058>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } + } while(0); + $1060 = HEAP32[(21304)>>2]|0; + $1061 = ($1060>>>0)>($$0197>>>0); + if ($1061) { + $1062 = (($1060) - ($$0197))|0; + HEAP32[(21304)>>2] = $1062; + $1063 = HEAP32[(21316)>>2]|0; + $1064 = (($1063) + ($$0197)|0); + HEAP32[(21316)>>2] = $1064; + $1065 = $1062 | 1; + $1066 = ((($1064)) + 4|0); + HEAP32[$1066>>2] = $1065; + $1067 = $$0197 | 3; + $1068 = ((($1063)) + 4|0); + HEAP32[$1068>>2] = $1067; + $1069 = ((($1063)) + 8|0); + $$0 = $1069; + STACKTOP = sp;return ($$0|0); + } + } + $1070 = (___errno_location()|0); + HEAP32[$1070>>2] = 12; + $$0 = 0; + STACKTOP = sp;return ($$0|0); +} +function _free($0) { + $0 = $0|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var label = 0, sp = 0; + sp = STACKTOP; + $1 = ($0|0)==(0|0); + if ($1) { + return; + } + $2 = ((($0)) + -8|0); + $3 = HEAP32[(21308)>>2]|0; + $4 = ($2>>>0)<($3>>>0); + if ($4) { + _abort(); + // unreachable; + } + $5 = ((($0)) + -4|0); + $6 = HEAP32[$5>>2]|0; + $7 = $6 & 3; + $8 = ($7|0)==(1); + if ($8) { + _abort(); + // unreachable; + } + $9 = $6 & -8; + $10 = (($2) + ($9)|0); + $11 = $6 & 1; + $12 = ($11|0)==(0); + L10: do { + if ($12) { + $13 = HEAP32[$2>>2]|0; + $14 = ($7|0)==(0); + if ($14) { + return; + } + $15 = (0 - ($13))|0; + $16 = (($2) + ($15)|0); + $17 = (($13) + ($9))|0; + $18 = ($16>>>0)<($3>>>0); + if ($18) { + _abort(); + // unreachable; + } + $19 = HEAP32[(21312)>>2]|0; + $20 = ($19|0)==($16|0); + if ($20) { + $105 = ((($10)) + 4|0); + $106 = HEAP32[$105>>2]|0; + $107 = $106 & 3; + $108 = ($107|0)==(3); + if (!($108)) { + $$1 = $16;$$1380 = $17;$114 = $16; + break; + } + $109 = (($16) + ($17)|0); + $110 = ((($16)) + 4|0); + $111 = $17 | 1; + $112 = $106 & -2; + HEAP32[(21300)>>2] = $17; + HEAP32[$105>>2] = $112; + HEAP32[$110>>2] = $111; + HEAP32[$109>>2] = $17; + return; + } + $21 = $13 >>> 3; + $22 = ($13>>>0)<(256); + if ($22) { + $23 = ((($16)) + 8|0); + $24 = HEAP32[$23>>2]|0; + $25 = ((($16)) + 12|0); + $26 = HEAP32[$25>>2]|0; + $27 = $21 << 1; + $28 = (21332 + ($27<<2)|0); + $29 = ($24|0)==($28|0); + if (!($29)) { + $30 = ($3>>>0)>($24>>>0); + if ($30) { + _abort(); + // unreachable; + } + $31 = ((($24)) + 12|0); + $32 = HEAP32[$31>>2]|0; + $33 = ($32|0)==($16|0); + if (!($33)) { + _abort(); + // unreachable; + } + } + $34 = ($26|0)==($24|0); + if ($34) { + $35 = 1 << $21; + $36 = $35 ^ -1; + $37 = HEAP32[5323]|0; + $38 = $37 & $36; + HEAP32[5323] = $38; + $$1 = $16;$$1380 = $17;$114 = $16; + break; + } + $39 = ($26|0)==($28|0); + if ($39) { + $$pre445 = ((($26)) + 8|0); + $$pre$phi446Z2D = $$pre445; + } else { + $40 = ($3>>>0)>($26>>>0); + if ($40) { + _abort(); + // unreachable; + } + $41 = ((($26)) + 8|0); + $42 = HEAP32[$41>>2]|0; + $43 = ($42|0)==($16|0); + if ($43) { + $$pre$phi446Z2D = $41; + } else { + _abort(); + // unreachable; + } + } + $44 = ((($24)) + 12|0); + HEAP32[$44>>2] = $26; + HEAP32[$$pre$phi446Z2D>>2] = $24; + $$1 = $16;$$1380 = $17;$114 = $16; + break; + } + $45 = ((($16)) + 24|0); + $46 = HEAP32[$45>>2]|0; + $47 = ((($16)) + 12|0); + $48 = HEAP32[$47>>2]|0; + $49 = ($48|0)==($16|0); + do { + if ($49) { + $59 = ((($16)) + 16|0); + $60 = ((($59)) + 4|0); + $61 = HEAP32[$60>>2]|0; + $62 = ($61|0)==(0|0); + if ($62) { + $63 = HEAP32[$59>>2]|0; + $64 = ($63|0)==(0|0); + if ($64) { + $$3 = 0; + break; + } else { + $$1385$ph = $63;$$1388$ph = $59; + } + } else { + $$1385$ph = $61;$$1388$ph = $60; + } + $$1385 = $$1385$ph;$$1388 = $$1388$ph; + while(1) { + $65 = ((($$1385)) + 20|0); + $66 = HEAP32[$65>>2]|0; + $67 = ($66|0)==(0|0); + if ($67) { + $68 = ((($$1385)) + 16|0); + $69 = HEAP32[$68>>2]|0; + $70 = ($69|0)==(0|0); + if ($70) { + break; + } else { + $$1385$be = $69;$$1388$be = $68; + } + } else { + $$1385$be = $66;$$1388$be = $65; + } + $$1385 = $$1385$be;$$1388 = $$1388$be; + } + $71 = ($3>>>0)>($$1388>>>0); + if ($71) { + _abort(); + // unreachable; + } else { + HEAP32[$$1388>>2] = 0; + $$3 = $$1385; + break; + } + } else { + $50 = ((($16)) + 8|0); + $51 = HEAP32[$50>>2]|0; + $52 = ($3>>>0)>($51>>>0); + if ($52) { + _abort(); + // unreachable; + } + $53 = ((($51)) + 12|0); + $54 = HEAP32[$53>>2]|0; + $55 = ($54|0)==($16|0); + if (!($55)) { + _abort(); + // unreachable; + } + $56 = ((($48)) + 8|0); + $57 = HEAP32[$56>>2]|0; + $58 = ($57|0)==($16|0); + if ($58) { + HEAP32[$53>>2] = $48; + HEAP32[$56>>2] = $51; + $$3 = $48; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $72 = ($46|0)==(0|0); + if ($72) { + $$1 = $16;$$1380 = $17;$114 = $16; + } else { + $73 = ((($16)) + 28|0); + $74 = HEAP32[$73>>2]|0; + $75 = (21596 + ($74<<2)|0); + $76 = HEAP32[$75>>2]|0; + $77 = ($76|0)==($16|0); + do { + if ($77) { + HEAP32[$75>>2] = $$3; + $cond419 = ($$3|0)==(0|0); + if ($cond419) { + $78 = 1 << $74; + $79 = $78 ^ -1; + $80 = HEAP32[(21296)>>2]|0; + $81 = $80 & $79; + HEAP32[(21296)>>2] = $81; + $$1 = $16;$$1380 = $17;$114 = $16; + break L10; + } + } else { + $82 = HEAP32[(21308)>>2]|0; + $83 = ($82>>>0)>($46>>>0); + if ($83) { + _abort(); + // unreachable; + } else { + $84 = ((($46)) + 16|0); + $85 = HEAP32[$84>>2]|0; + $86 = ($85|0)==($16|0); + $87 = ((($46)) + 20|0); + $$sink = $86 ? $84 : $87; + HEAP32[$$sink>>2] = $$3; + $88 = ($$3|0)==(0|0); + if ($88) { + $$1 = $16;$$1380 = $17;$114 = $16; + break L10; + } else { + break; + } + } + } + } while(0); + $89 = HEAP32[(21308)>>2]|0; + $90 = ($89>>>0)>($$3>>>0); + if ($90) { + _abort(); + // unreachable; + } + $91 = ((($$3)) + 24|0); + HEAP32[$91>>2] = $46; + $92 = ((($16)) + 16|0); + $93 = HEAP32[$92>>2]|0; + $94 = ($93|0)==(0|0); + do { + if (!($94)) { + $95 = ($89>>>0)>($93>>>0); + if ($95) { + _abort(); + // unreachable; + } else { + $96 = ((($$3)) + 16|0); + HEAP32[$96>>2] = $93; + $97 = ((($93)) + 24|0); + HEAP32[$97>>2] = $$3; + break; + } + } + } while(0); + $98 = ((($92)) + 4|0); + $99 = HEAP32[$98>>2]|0; + $100 = ($99|0)==(0|0); + if ($100) { + $$1 = $16;$$1380 = $17;$114 = $16; + } else { + $101 = HEAP32[(21308)>>2]|0; + $102 = ($101>>>0)>($99>>>0); + if ($102) { + _abort(); + // unreachable; + } else { + $103 = ((($$3)) + 20|0); + HEAP32[$103>>2] = $99; + $104 = ((($99)) + 24|0); + HEAP32[$104>>2] = $$3; + $$1 = $16;$$1380 = $17;$114 = $16; + break; + } + } + } + } else { + $$1 = $2;$$1380 = $9;$114 = $2; + } + } while(0); + $113 = ($114>>>0)<($10>>>0); + if (!($113)) { + _abort(); + // unreachable; + } + $115 = ((($10)) + 4|0); + $116 = HEAP32[$115>>2]|0; + $117 = $116 & 1; + $118 = ($117|0)==(0); + if ($118) { + _abort(); + // unreachable; + } + $119 = $116 & 2; + $120 = ($119|0)==(0); + if ($120) { + $121 = HEAP32[(21316)>>2]|0; + $122 = ($121|0)==($10|0); + if ($122) { + $123 = HEAP32[(21304)>>2]|0; + $124 = (($123) + ($$1380))|0; + HEAP32[(21304)>>2] = $124; + HEAP32[(21316)>>2] = $$1; + $125 = $124 | 1; + $126 = ((($$1)) + 4|0); + HEAP32[$126>>2] = $125; + $127 = HEAP32[(21312)>>2]|0; + $128 = ($$1|0)==($127|0); + if (!($128)) { + return; + } + HEAP32[(21312)>>2] = 0; + HEAP32[(21300)>>2] = 0; + return; + } + $129 = HEAP32[(21312)>>2]|0; + $130 = ($129|0)==($10|0); + if ($130) { + $131 = HEAP32[(21300)>>2]|0; + $132 = (($131) + ($$1380))|0; + HEAP32[(21300)>>2] = $132; + HEAP32[(21312)>>2] = $114; + $133 = $132 | 1; + $134 = ((($$1)) + 4|0); + HEAP32[$134>>2] = $133; + $135 = (($114) + ($132)|0); + HEAP32[$135>>2] = $132; + return; + } + $136 = $116 & -8; + $137 = (($136) + ($$1380))|0; + $138 = $116 >>> 3; + $139 = ($116>>>0)<(256); + L111: do { + if ($139) { + $140 = ((($10)) + 8|0); + $141 = HEAP32[$140>>2]|0; + $142 = ((($10)) + 12|0); + $143 = HEAP32[$142>>2]|0; + $144 = $138 << 1; + $145 = (21332 + ($144<<2)|0); + $146 = ($141|0)==($145|0); + if (!($146)) { + $147 = HEAP32[(21308)>>2]|0; + $148 = ($147>>>0)>($141>>>0); + if ($148) { + _abort(); + // unreachable; + } + $149 = ((($141)) + 12|0); + $150 = HEAP32[$149>>2]|0; + $151 = ($150|0)==($10|0); + if (!($151)) { + _abort(); + // unreachable; + } + } + $152 = ($143|0)==($141|0); + if ($152) { + $153 = 1 << $138; + $154 = $153 ^ -1; + $155 = HEAP32[5323]|0; + $156 = $155 & $154; + HEAP32[5323] = $156; + break; + } + $157 = ($143|0)==($145|0); + if ($157) { + $$pre443 = ((($143)) + 8|0); + $$pre$phi444Z2D = $$pre443; + } else { + $158 = HEAP32[(21308)>>2]|0; + $159 = ($158>>>0)>($143>>>0); + if ($159) { + _abort(); + // unreachable; + } + $160 = ((($143)) + 8|0); + $161 = HEAP32[$160>>2]|0; + $162 = ($161|0)==($10|0); + if ($162) { + $$pre$phi444Z2D = $160; + } else { + _abort(); + // unreachable; + } + } + $163 = ((($141)) + 12|0); + HEAP32[$163>>2] = $143; + HEAP32[$$pre$phi444Z2D>>2] = $141; + } else { + $164 = ((($10)) + 24|0); + $165 = HEAP32[$164>>2]|0; + $166 = ((($10)) + 12|0); + $167 = HEAP32[$166>>2]|0; + $168 = ($167|0)==($10|0); + do { + if ($168) { + $179 = ((($10)) + 16|0); + $180 = ((($179)) + 4|0); + $181 = HEAP32[$180>>2]|0; + $182 = ($181|0)==(0|0); + if ($182) { + $183 = HEAP32[$179>>2]|0; + $184 = ($183|0)==(0|0); + if ($184) { + $$3398 = 0; + break; + } else { + $$1396$ph = $183;$$1400$ph = $179; + } + } else { + $$1396$ph = $181;$$1400$ph = $180; + } + $$1396 = $$1396$ph;$$1400 = $$1400$ph; + while(1) { + $185 = ((($$1396)) + 20|0); + $186 = HEAP32[$185>>2]|0; + $187 = ($186|0)==(0|0); + if ($187) { + $188 = ((($$1396)) + 16|0); + $189 = HEAP32[$188>>2]|0; + $190 = ($189|0)==(0|0); + if ($190) { + break; + } else { + $$1396$be = $189;$$1400$be = $188; + } + } else { + $$1396$be = $186;$$1400$be = $185; + } + $$1396 = $$1396$be;$$1400 = $$1400$be; + } + $191 = HEAP32[(21308)>>2]|0; + $192 = ($191>>>0)>($$1400>>>0); + if ($192) { + _abort(); + // unreachable; + } else { + HEAP32[$$1400>>2] = 0; + $$3398 = $$1396; + break; + } + } else { + $169 = ((($10)) + 8|0); + $170 = HEAP32[$169>>2]|0; + $171 = HEAP32[(21308)>>2]|0; + $172 = ($171>>>0)>($170>>>0); + if ($172) { + _abort(); + // unreachable; + } + $173 = ((($170)) + 12|0); + $174 = HEAP32[$173>>2]|0; + $175 = ($174|0)==($10|0); + if (!($175)) { + _abort(); + // unreachable; + } + $176 = ((($167)) + 8|0); + $177 = HEAP32[$176>>2]|0; + $178 = ($177|0)==($10|0); + if ($178) { + HEAP32[$173>>2] = $167; + HEAP32[$176>>2] = $170; + $$3398 = $167; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $193 = ($165|0)==(0|0); + if (!($193)) { + $194 = ((($10)) + 28|0); + $195 = HEAP32[$194>>2]|0; + $196 = (21596 + ($195<<2)|0); + $197 = HEAP32[$196>>2]|0; + $198 = ($197|0)==($10|0); + do { + if ($198) { + HEAP32[$196>>2] = $$3398; + $cond420 = ($$3398|0)==(0|0); + if ($cond420) { + $199 = 1 << $195; + $200 = $199 ^ -1; + $201 = HEAP32[(21296)>>2]|0; + $202 = $201 & $200; + HEAP32[(21296)>>2] = $202; + break L111; + } + } else { + $203 = HEAP32[(21308)>>2]|0; + $204 = ($203>>>0)>($165>>>0); + if ($204) { + _abort(); + // unreachable; + } else { + $205 = ((($165)) + 16|0); + $206 = HEAP32[$205>>2]|0; + $207 = ($206|0)==($10|0); + $208 = ((($165)) + 20|0); + $$sink456 = $207 ? $205 : $208; + HEAP32[$$sink456>>2] = $$3398; + $209 = ($$3398|0)==(0|0); + if ($209) { + break L111; + } else { + break; + } + } + } + } while(0); + $210 = HEAP32[(21308)>>2]|0; + $211 = ($210>>>0)>($$3398>>>0); + if ($211) { + _abort(); + // unreachable; + } + $212 = ((($$3398)) + 24|0); + HEAP32[$212>>2] = $165; + $213 = ((($10)) + 16|0); + $214 = HEAP32[$213>>2]|0; + $215 = ($214|0)==(0|0); + do { + if (!($215)) { + $216 = ($210>>>0)>($214>>>0); + if ($216) { + _abort(); + // unreachable; + } else { + $217 = ((($$3398)) + 16|0); + HEAP32[$217>>2] = $214; + $218 = ((($214)) + 24|0); + HEAP32[$218>>2] = $$3398; + break; + } + } + } while(0); + $219 = ((($213)) + 4|0); + $220 = HEAP32[$219>>2]|0; + $221 = ($220|0)==(0|0); + if (!($221)) { + $222 = HEAP32[(21308)>>2]|0; + $223 = ($222>>>0)>($220>>>0); + if ($223) { + _abort(); + // unreachable; + } else { + $224 = ((($$3398)) + 20|0); + HEAP32[$224>>2] = $220; + $225 = ((($220)) + 24|0); + HEAP32[$225>>2] = $$3398; + break; + } + } + } + } + } while(0); + $226 = $137 | 1; + $227 = ((($$1)) + 4|0); + HEAP32[$227>>2] = $226; + $228 = (($114) + ($137)|0); + HEAP32[$228>>2] = $137; + $229 = HEAP32[(21312)>>2]|0; + $230 = ($$1|0)==($229|0); + if ($230) { + HEAP32[(21300)>>2] = $137; + return; + } else { + $$2 = $137; + } + } else { + $231 = $116 & -2; + HEAP32[$115>>2] = $231; + $232 = $$1380 | 1; + $233 = ((($$1)) + 4|0); + HEAP32[$233>>2] = $232; + $234 = (($114) + ($$1380)|0); + HEAP32[$234>>2] = $$1380; + $$2 = $$1380; + } + $235 = $$2 >>> 3; + $236 = ($$2>>>0)<(256); + if ($236) { + $237 = $235 << 1; + $238 = (21332 + ($237<<2)|0); + $239 = HEAP32[5323]|0; + $240 = 1 << $235; + $241 = $239 & $240; + $242 = ($241|0)==(0); + if ($242) { + $243 = $239 | $240; + HEAP32[5323] = $243; + $$pre = ((($238)) + 8|0); + $$0401 = $238;$$pre$phiZ2D = $$pre; + } else { + $244 = ((($238)) + 8|0); + $245 = HEAP32[$244>>2]|0; + $246 = HEAP32[(21308)>>2]|0; + $247 = ($246>>>0)>($245>>>0); + if ($247) { + _abort(); + // unreachable; + } else { + $$0401 = $245;$$pre$phiZ2D = $244; + } + } + HEAP32[$$pre$phiZ2D>>2] = $$1; + $248 = ((($$0401)) + 12|0); + HEAP32[$248>>2] = $$1; + $249 = ((($$1)) + 8|0); + HEAP32[$249>>2] = $$0401; + $250 = ((($$1)) + 12|0); + HEAP32[$250>>2] = $238; + return; + } + $251 = $$2 >>> 8; + $252 = ($251|0)==(0); + if ($252) { + $$0394 = 0; + } else { + $253 = ($$2>>>0)>(16777215); + if ($253) { + $$0394 = 31; + } else { + $254 = (($251) + 1048320)|0; + $255 = $254 >>> 16; + $256 = $255 & 8; + $257 = $251 << $256; + $258 = (($257) + 520192)|0; + $259 = $258 >>> 16; + $260 = $259 & 4; + $261 = $260 | $256; + $262 = $257 << $260; + $263 = (($262) + 245760)|0; + $264 = $263 >>> 16; + $265 = $264 & 2; + $266 = $261 | $265; + $267 = (14 - ($266))|0; + $268 = $262 << $265; + $269 = $268 >>> 15; + $270 = (($267) + ($269))|0; + $271 = $270 << 1; + $272 = (($270) + 7)|0; + $273 = $$2 >>> $272; + $274 = $273 & 1; + $275 = $274 | $271; + $$0394 = $275; + } + } + $276 = (21596 + ($$0394<<2)|0); + $277 = ((($$1)) + 28|0); + HEAP32[$277>>2] = $$0394; + $278 = ((($$1)) + 16|0); + $279 = ((($$1)) + 20|0); + HEAP32[$279>>2] = 0; + HEAP32[$278>>2] = 0; + $280 = HEAP32[(21296)>>2]|0; + $281 = 1 << $$0394; + $282 = $280 & $281; + $283 = ($282|0)==(0); + L197: do { + if ($283) { + $284 = $280 | $281; + HEAP32[(21296)>>2] = $284; + HEAP32[$276>>2] = $$1; + $285 = ((($$1)) + 24|0); + HEAP32[$285>>2] = $276; + $286 = ((($$1)) + 12|0); + HEAP32[$286>>2] = $$1; + $287 = ((($$1)) + 8|0); + HEAP32[$287>>2] = $$1; + } else { + $288 = HEAP32[$276>>2]|0; + $289 = ((($288)) + 4|0); + $290 = HEAP32[$289>>2]|0; + $291 = $290 & -8; + $292 = ($291|0)==($$2|0); + L200: do { + if ($292) { + $$0382$lcssa = $288; + } else { + $293 = ($$0394|0)==(31); + $294 = $$0394 >>> 1; + $295 = (25 - ($294))|0; + $296 = $293 ? 0 : $295; + $297 = $$2 << $296; + $$0381438 = $297;$$0382437 = $288; + while(1) { + $304 = $$0381438 >>> 31; + $305 = (((($$0382437)) + 16|0) + ($304<<2)|0); + $300 = HEAP32[$305>>2]|0; + $306 = ($300|0)==(0|0); + if ($306) { + break; + } + $298 = $$0381438 << 1; + $299 = ((($300)) + 4|0); + $301 = HEAP32[$299>>2]|0; + $302 = $301 & -8; + $303 = ($302|0)==($$2|0); + if ($303) { + $$0382$lcssa = $300; + break L200; + } else { + $$0381438 = $298;$$0382437 = $300; + } + } + $307 = HEAP32[(21308)>>2]|0; + $308 = ($307>>>0)>($305>>>0); + if ($308) { + _abort(); + // unreachable; + } else { + HEAP32[$305>>2] = $$1; + $309 = ((($$1)) + 24|0); + HEAP32[$309>>2] = $$0382437; + $310 = ((($$1)) + 12|0); + HEAP32[$310>>2] = $$1; + $311 = ((($$1)) + 8|0); + HEAP32[$311>>2] = $$1; + break L197; + } + } + } while(0); + $312 = ((($$0382$lcssa)) + 8|0); + $313 = HEAP32[$312>>2]|0; + $314 = HEAP32[(21308)>>2]|0; + $315 = ($314>>>0)<=($$0382$lcssa>>>0); + $316 = ($314>>>0)<=($313>>>0); + $317 = $316 & $315; + if ($317) { + $318 = ((($313)) + 12|0); + HEAP32[$318>>2] = $$1; + HEAP32[$312>>2] = $$1; + $319 = ((($$1)) + 8|0); + HEAP32[$319>>2] = $313; + $320 = ((($$1)) + 12|0); + HEAP32[$320>>2] = $$0382$lcssa; + $321 = ((($$1)) + 24|0); + HEAP32[$321>>2] = 0; + break; + } else { + _abort(); + // unreachable; + } + } + } while(0); + $322 = HEAP32[(21324)>>2]|0; + $323 = (($322) + -1)|0; + HEAP32[(21324)>>2] = $323; + $324 = ($323|0)==(0); + if (!($324)) { + return; + } + $$0211$in$i = (21748); + while(1) { + $$0211$i = HEAP32[$$0211$in$i>>2]|0; + $325 = ($$0211$i|0)==(0|0); + $326 = ((($$0211$i)) + 8|0); + if ($325) { + break; + } else { + $$0211$in$i = $326; + } + } + HEAP32[(21324)>>2] = -1; + return; +} +function ___stdio_close($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $vararg_buffer = sp; + $1 = ((($0)) + 60|0); + $2 = HEAP32[$1>>2]|0; + $3 = (_dummy_569($2)|0); + HEAP32[$vararg_buffer>>2] = $3; + $4 = (___syscall6(6,($vararg_buffer|0))|0); + $5 = (___syscall_ret($4)|0); + STACKTOP = sp;return ($5|0); +} +function ___stdio_write($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + var $vararg_ptr6 = 0, $vararg_ptr7 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $vararg_buffer3 = sp + 16|0; + $vararg_buffer = sp; + $3 = sp + 32|0; + $4 = ((($0)) + 28|0); + $5 = HEAP32[$4>>2]|0; + HEAP32[$3>>2] = $5; + $6 = ((($3)) + 4|0); + $7 = ((($0)) + 20|0); + $8 = HEAP32[$7>>2]|0; + $9 = (($8) - ($5))|0; + HEAP32[$6>>2] = $9; + $10 = ((($3)) + 8|0); + HEAP32[$10>>2] = $1; + $11 = ((($3)) + 12|0); + HEAP32[$11>>2] = $2; + $12 = (($9) + ($2))|0; + $13 = ((($0)) + 60|0); + $14 = HEAP32[$13>>2]|0; + $15 = $3; + HEAP32[$vararg_buffer>>2] = $14; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $15; + $vararg_ptr2 = ((($vararg_buffer)) + 8|0); + HEAP32[$vararg_ptr2>>2] = 2; + $16 = (___syscall146(146,($vararg_buffer|0))|0); + $17 = (___syscall_ret($16)|0); + $18 = ($12|0)==($17|0); + L1: do { + if ($18) { + label = 3; + } else { + $$04756 = 2;$$04855 = $12;$$04954 = $3;$27 = $17; + while(1) { + $26 = ($27|0)<(0); + if ($26) { + break; + } + $35 = (($$04855) - ($27))|0; + $36 = ((($$04954)) + 4|0); + $37 = HEAP32[$36>>2]|0; + $38 = ($27>>>0)>($37>>>0); + $39 = ((($$04954)) + 8|0); + $$150 = $38 ? $39 : $$04954; + $40 = $38 << 31 >> 31; + $$1 = (($$04756) + ($40))|0; + $41 = $38 ? $37 : 0; + $$0 = (($27) - ($41))|0; + $42 = HEAP32[$$150>>2]|0; + $43 = (($42) + ($$0)|0); + HEAP32[$$150>>2] = $43; + $44 = ((($$150)) + 4|0); + $45 = HEAP32[$44>>2]|0; + $46 = (($45) - ($$0))|0; + HEAP32[$44>>2] = $46; + $47 = HEAP32[$13>>2]|0; + $48 = $$150; + HEAP32[$vararg_buffer3>>2] = $47; + $vararg_ptr6 = ((($vararg_buffer3)) + 4|0); + HEAP32[$vararg_ptr6>>2] = $48; + $vararg_ptr7 = ((($vararg_buffer3)) + 8|0); + HEAP32[$vararg_ptr7>>2] = $$1; + $49 = (___syscall146(146,($vararg_buffer3|0))|0); + $50 = (___syscall_ret($49)|0); + $51 = ($35|0)==($50|0); + if ($51) { + label = 3; + break L1; + } else { + $$04756 = $$1;$$04855 = $35;$$04954 = $$150;$27 = $50; + } + } + $28 = ((($0)) + 16|0); + HEAP32[$28>>2] = 0; + HEAP32[$4>>2] = 0; + HEAP32[$7>>2] = 0; + $29 = HEAP32[$0>>2]|0; + $30 = $29 | 32; + HEAP32[$0>>2] = $30; + $31 = ($$04756|0)==(2); + if ($31) { + $$051 = 0; + } else { + $32 = ((($$04954)) + 4|0); + $33 = HEAP32[$32>>2]|0; + $34 = (($2) - ($33))|0; + $$051 = $34; + } + } + } while(0); + if ((label|0) == 3) { + $19 = ((($0)) + 44|0); + $20 = HEAP32[$19>>2]|0; + $21 = ((($0)) + 48|0); + $22 = HEAP32[$21>>2]|0; + $23 = (($20) + ($22)|0); + $24 = ((($0)) + 16|0); + HEAP32[$24>>2] = $23; + $25 = $20; + HEAP32[$4>>2] = $25; + HEAP32[$7>>2] = $25; + $$051 = $2; + } + STACKTOP = sp;return ($$051|0); +} +function ___stdio_seek($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $vararg_buffer = sp; + $3 = sp + 20|0; + $4 = ((($0)) + 60|0); + $5 = HEAP32[$4>>2]|0; + $6 = $3; + HEAP32[$vararg_buffer>>2] = $5; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = 0; + $vararg_ptr2 = ((($vararg_buffer)) + 8|0); + HEAP32[$vararg_ptr2>>2] = $1; + $vararg_ptr3 = ((($vararg_buffer)) + 12|0); + HEAP32[$vararg_ptr3>>2] = $6; + $vararg_ptr4 = ((($vararg_buffer)) + 16|0); + HEAP32[$vararg_ptr4>>2] = $2; + $7 = (___syscall140(140,($vararg_buffer|0))|0); + $8 = (___syscall_ret($7)|0); + $9 = ($8|0)<(0); + if ($9) { + HEAP32[$3>>2] = -1; + $10 = -1; + } else { + $$pre = HEAP32[$3>>2]|0; + $10 = $$pre; + } + STACKTOP = sp;return ($10|0); +} +function ___syscall_ret($0) { + $0 = $0|0; + var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ($0>>>0)>(4294963200); + if ($1) { + $2 = (0 - ($0))|0; + $3 = (___errno_location()|0); + HEAP32[$3>>2] = $2; + $$0 = -1; + } else { + $$0 = $0; + } + return ($$0|0); +} +function ___errno_location() { + var label = 0, sp = 0; + sp = STACKTOP; + return (21852|0); +} +function _dummy_569($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return ($0|0); +} +function ___stdout_write($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); + $vararg_buffer = sp; + $3 = sp + 16|0; + $4 = ((($0)) + 36|0); + HEAP32[$4>>2] = 194; + $5 = HEAP32[$0>>2]|0; + $6 = $5 & 64; + $7 = ($6|0)==(0); + if ($7) { + $8 = ((($0)) + 60|0); + $9 = HEAP32[$8>>2]|0; + $10 = $3; + HEAP32[$vararg_buffer>>2] = $9; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = 21523; + $vararg_ptr2 = ((($vararg_buffer)) + 8|0); + HEAP32[$vararg_ptr2>>2] = $10; + $11 = (___syscall54(54,($vararg_buffer|0))|0); + $12 = ($11|0)==(0); + if (!($12)) { + $13 = ((($0)) + 75|0); + HEAP8[$13>>0] = -1; + } + } + $14 = (___stdio_write($0,$1,$2)|0); + STACKTOP = sp;return ($14|0); +} +function _strcmp($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var sp = 0; + sp = STACKTOP; + $2 = HEAP8[$0>>0]|0; + $3 = HEAP8[$1>>0]|0; + $4 = ($2<<24>>24)!=($3<<24>>24); + $5 = ($2<<24>>24)==(0); + $or$cond9 = $5 | $4; + if ($or$cond9) { + $$lcssa = $3;$$lcssa8 = $2; + } else { + $$011 = $1;$$0710 = $0; + while(1) { + $6 = ((($$0710)) + 1|0); + $7 = ((($$011)) + 1|0); + $8 = HEAP8[$6>>0]|0; + $9 = HEAP8[$7>>0]|0; + $10 = ($8<<24>>24)!=($9<<24>>24); + $11 = ($8<<24>>24)==(0); + $or$cond = $11 | $10; + if ($or$cond) { + $$lcssa = $9;$$lcssa8 = $8; + break; + } else { + $$011 = $7;$$0710 = $6; + } + } + } + $12 = $$lcssa8&255; + $13 = $$lcssa&255; + $14 = (($12) - ($13))|0; + return ($14|0); +} +function _memcmp($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + $3 = ($2|0)==(0); + L1: do { + if ($3) { + $14 = 0; + } else { + $$01318 = $0;$$01417 = $2;$$019 = $1; + while(1) { + $4 = HEAP8[$$01318>>0]|0; + $5 = HEAP8[$$019>>0]|0; + $6 = ($4<<24>>24)==($5<<24>>24); + if (!($6)) { + break; + } + $7 = (($$01417) + -1)|0; + $8 = ((($$01318)) + 1|0); + $9 = ((($$019)) + 1|0); + $10 = ($7|0)==(0); + if ($10) { + $14 = 0; + break L1; + } else { + $$01318 = $8;$$01417 = $7;$$019 = $9; + } + } + $11 = $4&255; + $12 = $5&255; + $13 = (($11) - ($12))|0; + $14 = $13; + } + } while(0); + return ($14|0); +} +function _isdigit($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = (($0) + -48)|0; + $2 = ($1>>>0)<(10); + $3 = $2&1; + return ($3|0); +} +function _vfprintf($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + var $spec$select = 0, $spec$select41 = 0, $vacopy_currentptr = 0, dest = 0, label = 0, sp = 0, stop = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0); + $3 = sp + 120|0; + $4 = sp + 80|0; + $5 = sp; + $6 = sp + 136|0; + dest=$4; stop=dest+40|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + $vacopy_currentptr = HEAP32[$2>>2]|0; + HEAP32[$3>>2] = $vacopy_currentptr; + $7 = (_printf_core(0,$1,$3,$5,$4)|0); + $8 = ($7|0)<(0); + if ($8) { + $$0 = -1; + } else { + $9 = ((($0)) + 76|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10|0)>(-1); + if ($11) { + $12 = (___lockfile($0)|0); + $40 = $12; + } else { + $40 = 0; + } + $13 = HEAP32[$0>>2]|0; + $14 = $13 & 32; + $15 = ((($0)) + 74|0); + $16 = HEAP8[$15>>0]|0; + $17 = ($16<<24>>24)<(1); + if ($17) { + $18 = $13 & -33; + HEAP32[$0>>2] = $18; + } + $19 = ((($0)) + 48|0); + $20 = HEAP32[$19>>2]|0; + $21 = ($20|0)==(0); + if ($21) { + $23 = ((($0)) + 44|0); + $24 = HEAP32[$23>>2]|0; + HEAP32[$23>>2] = $6; + $25 = ((($0)) + 28|0); + HEAP32[$25>>2] = $6; + $26 = ((($0)) + 20|0); + HEAP32[$26>>2] = $6; + HEAP32[$19>>2] = 80; + $27 = ((($6)) + 80|0); + $28 = ((($0)) + 16|0); + HEAP32[$28>>2] = $27; + $29 = (_printf_core($0,$1,$3,$5,$4)|0); + $30 = ($24|0)==(0|0); + if ($30) { + $$1 = $29; + } else { + $31 = ((($0)) + 36|0); + $32 = HEAP32[$31>>2]|0; + (FUNCTION_TABLE_iiii[$32 & 255]($0,0,0)|0); + $33 = HEAP32[$26>>2]|0; + $34 = ($33|0)==(0|0); + $spec$select = $34 ? -1 : $29; + HEAP32[$23>>2] = $24; + HEAP32[$19>>2] = 0; + HEAP32[$28>>2] = 0; + HEAP32[$25>>2] = 0; + HEAP32[$26>>2] = 0; + $$1 = $spec$select; + } + } else { + $22 = (_printf_core($0,$1,$3,$5,$4)|0); + $$1 = $22; + } + $35 = HEAP32[$0>>2]|0; + $36 = $35 & 32; + $37 = ($36|0)==(0); + $spec$select41 = $37 ? $$1 : -1; + $38 = $35 | $14; + HEAP32[$0>>2] = $38; + $39 = ($40|0)==(0); + if (!($39)) { + ___unlockfile($0); + } + $$0 = $spec$select41; + } + STACKTOP = sp;return ($$0|0); +} +function _printf_core($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $5 = sp + 16|0; + $6 = sp; + $7 = sp + 24|0; + $8 = sp + 8|0; + $9 = sp + 20|0; + HEAP32[$5>>2] = $1; + $10 = ($0|0)!=(0|0); + $11 = ((($7)) + 40|0); + $12 = $11; + $13 = ((($7)) + 39|0); + $14 = ((($8)) + 4|0); + $$0243$ph = 0;$$0247$ph = 0;$$0269$ph = 0; + L1: while(1) { + $$0243 = $$0243$ph;$$0247 = $$0247$ph; + while(1) { + $15 = ($$0247|0)>(-1); + do { + if ($15) { + $16 = (2147483647 - ($$0247))|0; + $17 = ($$0243|0)>($16|0); + if ($17) { + $18 = (___errno_location()|0); + HEAP32[$18>>2] = 75; + $$1248 = -1; + break; + } else { + $19 = (($$0243) + ($$0247))|0; + $$1248 = $19; + break; + } + } else { + $$1248 = $$0247; + } + } while(0); + $20 = HEAP32[$5>>2]|0; + $21 = HEAP8[$20>>0]|0; + $22 = ($21<<24>>24)==(0); + if ($22) { + label = 94; + break L1; + } + $23 = $21;$25 = $20; + L12: while(1) { + switch ($23<<24>>24) { + case 37: { + label = 10; + break L12; + break; + } + case 0: { + $$0249$lcssa = $25; + break L12; + break; + } + default: { + } + } + $24 = ((($25)) + 1|0); + HEAP32[$5>>2] = $24; + $$pre = HEAP8[$24>>0]|0; + $23 = $$pre;$25 = $24; + } + L15: do { + if ((label|0) == 10) { + label = 0; + $$0249321 = $25;$27 = $25; + while(1) { + $26 = ((($27)) + 1|0); + $28 = HEAP8[$26>>0]|0; + $29 = ($28<<24>>24)==(37); + if (!($29)) { + $$0249$lcssa = $$0249321; + break L15; + } + $30 = ((($$0249321)) + 1|0); + $31 = ((($27)) + 2|0); + HEAP32[$5>>2] = $31; + $32 = HEAP8[$31>>0]|0; + $33 = ($32<<24>>24)==(37); + if ($33) { + $$0249321 = $30;$27 = $31; + } else { + $$0249$lcssa = $30; + break; + } + } + } + } while(0); + $34 = $$0249$lcssa; + $35 = $20; + $36 = (($34) - ($35))|0; + if ($10) { + _out($0,$20,$36); + } + $37 = ($36|0)==(0); + if ($37) { + break; + } else { + $$0243 = $36;$$0247 = $$1248; + } + } + $38 = HEAP32[$5>>2]|0; + $39 = ((($38)) + 1|0); + $40 = HEAP8[$39>>0]|0; + $41 = $40 << 24 >> 24; + $42 = (_isdigit($41)|0); + $43 = ($42|0)==(0); + $$pre360 = HEAP32[$5>>2]|0; + if ($43) { + $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1; + } else { + $44 = ((($$pre360)) + 2|0); + $45 = HEAP8[$44>>0]|0; + $46 = ($45<<24>>24)==(36); + if ($46) { + $47 = ((($$pre360)) + 1|0); + $48 = HEAP8[$47>>0]|0; + $49 = $48 << 24 >> 24; + $50 = (($49) + -48)|0; + $$0253 = $50;$$1270 = 1;$$sink = 3; + } else { + $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1; + } + } + $51 = (($$pre360) + ($$sink)|0); + HEAP32[$5>>2] = $51; + $52 = HEAP8[$51>>0]|0; + $53 = $52 << 24 >> 24; + $54 = (($53) + -32)|0; + $55 = ($54>>>0)>(31); + $56 = 1 << $54; + $57 = $56 & 75913; + $58 = ($57|0)==(0); + $brmerge326 = $55 | $58; + if ($brmerge326) { + $$0262$lcssa = 0;$$lcssa308 = $52;$storemerge273$lcssa = $51; + } else { + $$0262328 = 0;$60 = $54;$storemerge273327 = $51; + while(1) { + $59 = 1 << $60; + $61 = $59 | $$0262328; + $62 = ((($storemerge273327)) + 1|0); + HEAP32[$5>>2] = $62; + $63 = HEAP8[$62>>0]|0; + $64 = $63 << 24 >> 24; + $65 = (($64) + -32)|0; + $66 = ($65>>>0)>(31); + $67 = 1 << $65; + $68 = $67 & 75913; + $69 = ($68|0)==(0); + $brmerge = $66 | $69; + if ($brmerge) { + $$0262$lcssa = $61;$$lcssa308 = $63;$storemerge273$lcssa = $62; + break; + } else { + $$0262328 = $61;$60 = $65;$storemerge273327 = $62; + } + } + } + $70 = ($$lcssa308<<24>>24)==(42); + if ($70) { + $71 = ((($storemerge273$lcssa)) + 1|0); + $72 = HEAP8[$71>>0]|0; + $73 = $72 << 24 >> 24; + $74 = (_isdigit($73)|0); + $75 = ($74|0)==(0); + if ($75) { + label = 27; + } else { + $76 = HEAP32[$5>>2]|0; + $77 = ((($76)) + 2|0); + $78 = HEAP8[$77>>0]|0; + $79 = ($78<<24>>24)==(36); + if ($79) { + $80 = ((($76)) + 1|0); + $81 = HEAP8[$80>>0]|0; + $82 = $81 << 24 >> 24; + $83 = (($82) + -48)|0; + $84 = (($4) + ($83<<2)|0); + HEAP32[$84>>2] = 10; + $85 = HEAP8[$80>>0]|0; + $86 = $85 << 24 >> 24; + $87 = (($86) + -48)|0; + $88 = (($3) + ($87<<3)|0); + $89 = $88; + $90 = $89; + $91 = HEAP32[$90>>2]|0; + $92 = (($89) + 4)|0; + $93 = $92; + $94 = HEAP32[$93>>2]|0; + $95 = ((($76)) + 3|0); + $$0259 = $91;$$2271 = 1;$storemerge274 = $95; + } else { + label = 27; + } + } + if ((label|0) == 27) { + label = 0; + $96 = ($$1270|0)==(0); + if (!($96)) { + $$0 = -1; + break; + } + if ($10) { + $arglist_current = HEAP32[$2>>2]|0; + $97 = $arglist_current; + $98 = ((0) + 4|0); + $expanded4 = $98; + $expanded = (($expanded4) - 1)|0; + $99 = (($97) + ($expanded))|0; + $100 = ((0) + 4|0); + $expanded8 = $100; + $expanded7 = (($expanded8) - 1)|0; + $expanded6 = $expanded7 ^ -1; + $101 = $99 & $expanded6; + $102 = $101; + $103 = HEAP32[$102>>2]|0; + $arglist_next = ((($102)) + 4|0); + HEAP32[$2>>2] = $arglist_next; + $358 = $103; + } else { + $358 = 0; + } + $104 = HEAP32[$5>>2]|0; + $105 = ((($104)) + 1|0); + $$0259 = $358;$$2271 = 0;$storemerge274 = $105; + } + HEAP32[$5>>2] = $storemerge274; + $106 = ($$0259|0)<(0); + $107 = $$0262$lcssa | 8192; + $108 = (0 - ($$0259))|0; + $spec$select291 = $106 ? $107 : $$0262$lcssa; + $spec$select292 = $106 ? $108 : $$0259; + $$1260 = $spec$select292;$$1263 = $spec$select291;$$3272 = $$2271;$112 = $storemerge274; + } else { + $109 = (_getint($5)|0); + $110 = ($109|0)<(0); + if ($110) { + $$0 = -1; + break; + } + $$pre362 = HEAP32[$5>>2]|0; + $$1260 = $109;$$1263 = $$0262$lcssa;$$3272 = $$1270;$112 = $$pre362; + } + $111 = HEAP8[$112>>0]|0; + $113 = ($111<<24>>24)==(46); + do { + if ($113) { + $114 = ((($112)) + 1|0); + $115 = HEAP8[$114>>0]|0; + $116 = ($115<<24>>24)==(42); + if (!($116)) { + HEAP32[$5>>2] = $114; + $152 = (_getint($5)|0); + $$pre363$pre = HEAP32[$5>>2]|0; + $$0254 = $152;$$pre363 = $$pre363$pre; + break; + } + $117 = ((($112)) + 2|0); + $118 = HEAP8[$117>>0]|0; + $119 = $118 << 24 >> 24; + $120 = (_isdigit($119)|0); + $121 = ($120|0)==(0); + if (!($121)) { + $122 = HEAP32[$5>>2]|0; + $123 = ((($122)) + 3|0); + $124 = HEAP8[$123>>0]|0; + $125 = ($124<<24>>24)==(36); + if ($125) { + $126 = ((($122)) + 2|0); + $127 = HEAP8[$126>>0]|0; + $128 = $127 << 24 >> 24; + $129 = (($128) + -48)|0; + $130 = (($4) + ($129<<2)|0); + HEAP32[$130>>2] = 10; + $131 = HEAP8[$126>>0]|0; + $132 = $131 << 24 >> 24; + $133 = (($132) + -48)|0; + $134 = (($3) + ($133<<3)|0); + $135 = $134; + $136 = $135; + $137 = HEAP32[$136>>2]|0; + $138 = (($135) + 4)|0; + $139 = $138; + $140 = HEAP32[$139>>2]|0; + $141 = ((($122)) + 4|0); + HEAP32[$5>>2] = $141; + $$0254 = $137;$$pre363 = $141; + break; + } + } + $142 = ($$3272|0)==(0); + if (!($142)) { + $$0 = -1; + break L1; + } + if ($10) { + $arglist_current2 = HEAP32[$2>>2]|0; + $143 = $arglist_current2; + $144 = ((0) + 4|0); + $expanded11 = $144; + $expanded10 = (($expanded11) - 1)|0; + $145 = (($143) + ($expanded10))|0; + $146 = ((0) + 4|0); + $expanded15 = $146; + $expanded14 = (($expanded15) - 1)|0; + $expanded13 = $expanded14 ^ -1; + $147 = $145 & $expanded13; + $148 = $147; + $149 = HEAP32[$148>>2]|0; + $arglist_next3 = ((($148)) + 4|0); + HEAP32[$2>>2] = $arglist_next3; + $359 = $149; + } else { + $359 = 0; + } + $150 = HEAP32[$5>>2]|0; + $151 = ((($150)) + 2|0); + HEAP32[$5>>2] = $151; + $$0254 = $359;$$pre363 = $151; + } else { + $$0254 = -1;$$pre363 = $112; + } + } while(0); + $$0252 = 0;$154 = $$pre363; + while(1) { + $153 = HEAP8[$154>>0]|0; + $155 = $153 << 24 >> 24; + $156 = (($155) + -65)|0; + $157 = ($156>>>0)>(57); + if ($157) { + $$0 = -1; + break L1; + } + $158 = ((($154)) + 1|0); + HEAP32[$5>>2] = $158; + $159 = HEAP8[$154>>0]|0; + $160 = $159 << 24 >> 24; + $161 = (($160) + -65)|0; + $162 = ((17913 + (($$0252*58)|0)|0) + ($161)|0); + $163 = HEAP8[$162>>0]|0; + $164 = $163&255; + $165 = (($164) + -1)|0; + $166 = ($165>>>0)<(8); + if ($166) { + $$0252 = $164;$154 = $158; + } else { + break; + } + } + $167 = ($163<<24>>24)==(0); + if ($167) { + $$0 = -1; + break; + } + $168 = ($163<<24>>24)==(19); + $169 = ($$0253|0)>(-1); + do { + if ($168) { + if ($169) { + $$0 = -1; + break L1; + } else { + label = 54; + } + } else { + if ($169) { + $170 = (($4) + ($$0253<<2)|0); + HEAP32[$170>>2] = $164; + $171 = (($3) + ($$0253<<3)|0); + $172 = $171; + $173 = $172; + $174 = HEAP32[$173>>2]|0; + $175 = (($172) + 4)|0; + $176 = $175; + $177 = HEAP32[$176>>2]|0; + $178 = $6; + $179 = $178; + HEAP32[$179>>2] = $174; + $180 = (($178) + 4)|0; + $181 = $180; + HEAP32[$181>>2] = $177; + label = 54; + break; + } + if (!($10)) { + $$0 = 0; + break L1; + } + _pop_arg($6,$164,$2); + $$pre364 = HEAP32[$5>>2]|0; + $183 = $$pre364; + label = 55; + } + } while(0); + if ((label|0) == 54) { + label = 0; + if ($10) { + $183 = $158; + label = 55; + } else { + $$0243$ph$be = 0; + } + } + L77: do { + if ((label|0) == 55) { + label = 0; + $182 = ((($183)) + -1|0); + $184 = HEAP8[$182>>0]|0; + $185 = $184 << 24 >> 24; + $186 = ($$0252|0)!=(0); + $187 = $185 & 15; + $188 = ($187|0)==(3); + $or$cond276 = $186 & $188; + $189 = $185 & -33; + $$0235 = $or$cond276 ? $189 : $185; + $190 = $$1263 & 8192; + $191 = ($190|0)==(0); + $192 = $$1263 & -65537; + $spec$select = $191 ? $$1263 : $192; + L79: do { + switch ($$0235|0) { + case 110: { + $trunc = $$0252&255; + switch ($trunc<<24>>24) { + case 0: { + $199 = HEAP32[$6>>2]|0; + HEAP32[$199>>2] = $$1248; + $$0243$ph$be = 0; + break L77; + break; + } + case 1: { + $200 = HEAP32[$6>>2]|0; + HEAP32[$200>>2] = $$1248; + $$0243$ph$be = 0; + break L77; + break; + } + case 2: { + $201 = ($$1248|0)<(0); + $202 = $201 << 31 >> 31; + $203 = HEAP32[$6>>2]|0; + $204 = $203; + $205 = $204; + HEAP32[$205>>2] = $$1248; + $206 = (($204) + 4)|0; + $207 = $206; + HEAP32[$207>>2] = $202; + $$0243$ph$be = 0; + break L77; + break; + } + case 3: { + $208 = $$1248&65535; + $209 = HEAP32[$6>>2]|0; + HEAP16[$209>>1] = $208; + $$0243$ph$be = 0; + break L77; + break; + } + case 4: { + $210 = $$1248&255; + $211 = HEAP32[$6>>2]|0; + HEAP8[$211>>0] = $210; + $$0243$ph$be = 0; + break L77; + break; + } + case 6: { + $212 = HEAP32[$6>>2]|0; + HEAP32[$212>>2] = $$1248; + $$0243$ph$be = 0; + break L77; + break; + } + case 7: { + $213 = ($$1248|0)<(0); + $214 = $213 << 31 >> 31; + $215 = HEAP32[$6>>2]|0; + $216 = $215; + $217 = $216; + HEAP32[$217>>2] = $$1248; + $218 = (($216) + 4)|0; + $219 = $218; + HEAP32[$219>>2] = $214; + $$0243$ph$be = 0; + break L77; + break; + } + default: { + $$0243$ph$be = 0; + break L77; + } + } + break; + } + case 112: { + $220 = ($$0254>>>0)>(8); + $221 = $220 ? $$0254 : 8; + $222 = $spec$select | 8; + $$1236 = 120;$$1255 = $221;$$3265 = $222; + label = 67; + break; + } + case 88: case 120: { + $$1236 = $$0235;$$1255 = $$0254;$$3265 = $spec$select; + label = 67; + break; + } + case 111: { + $238 = $6; + $239 = $238; + $240 = HEAP32[$239>>2]|0; + $241 = (($238) + 4)|0; + $242 = $241; + $243 = HEAP32[$242>>2]|0; + $244 = (_fmt_o($240,$243,$11)|0); + $245 = $spec$select & 8; + $246 = ($245|0)==(0); + $247 = $244; + $248 = (($12) - ($247))|0; + $249 = ($$0254|0)>($248|0); + $250 = (($248) + 1)|0; + $251 = $246 | $249; + $spec$select295 = $251 ? $$0254 : $250; + $$0228 = $244;$$1233 = 0;$$1238 = 18377;$$2256 = $spec$select295;$$4266 = $spec$select;$277 = $240;$279 = $243; + label = 73; + break; + } + case 105: case 100: { + $252 = $6; + $253 = $252; + $254 = HEAP32[$253>>2]|0; + $255 = (($252) + 4)|0; + $256 = $255; + $257 = HEAP32[$256>>2]|0; + $258 = ($257|0)<(0); + if ($258) { + $259 = (_i64Subtract(0,0,($254|0),($257|0))|0); + $260 = tempRet0; + $261 = $6; + $262 = $261; + HEAP32[$262>>2] = $259; + $263 = (($261) + 4)|0; + $264 = $263; + HEAP32[$264>>2] = $260; + $$0232 = 1;$$0237 = 18377;$271 = $259;$272 = $260; + label = 72; + break L79; + } else { + $265 = $spec$select & 2048; + $266 = ($265|0)==(0); + $267 = $spec$select & 1; + $268 = ($267|0)==(0); + $$ = $268 ? 18377 : (18379); + $spec$select296 = $266 ? $$ : (18378); + $269 = $spec$select & 2049; + $270 = ($269|0)!=(0); + $spec$select297 = $270&1; + $$0232 = $spec$select297;$$0237 = $spec$select296;$271 = $254;$272 = $257; + label = 72; + break L79; + } + break; + } + case 117: { + $193 = $6; + $194 = $193; + $195 = HEAP32[$194>>2]|0; + $196 = (($193) + 4)|0; + $197 = $196; + $198 = HEAP32[$197>>2]|0; + $$0232 = 0;$$0237 = 18377;$271 = $195;$272 = $198; + label = 72; + break; + } + case 99: { + $288 = $6; + $289 = $288; + $290 = HEAP32[$289>>2]|0; + $291 = (($288) + 4)|0; + $292 = $291; + $293 = HEAP32[$292>>2]|0; + $294 = $290&255; + HEAP8[$13>>0] = $294; + $$2 = $13;$$2234 = 0;$$2239 = 18377;$$5 = 1;$$6268 = $192;$$pre$phiZ2D = $12; + break; + } + case 109: { + $295 = (___errno_location()|0); + $296 = HEAP32[$295>>2]|0; + $297 = (_strerror($296)|0); + $$1 = $297; + label = 77; + break; + } + case 115: { + $298 = HEAP32[$6>>2]|0; + $299 = ($298|0)==(0|0); + $300 = $299 ? 18387 : $298; + $$1 = $300; + label = 77; + break; + } + case 67: { + $307 = $6; + $308 = $307; + $309 = HEAP32[$308>>2]|0; + $310 = (($307) + 4)|0; + $311 = $310; + $312 = HEAP32[$311>>2]|0; + HEAP32[$8>>2] = $309; + HEAP32[$14>>2] = 0; + HEAP32[$6>>2] = $8; + $$4258370 = -1; + label = 81; + break; + } + case 83: { + $313 = ($$0254|0)==(0); + if ($313) { + _pad_683($0,32,$$1260,0,$spec$select); + $$0240313371 = 0; + label = 91; + } else { + $$4258370 = $$0254; + label = 81; + } + break; + } + case 65: case 71: case 70: case 69: case 97: case 103: case 102: case 101: { + $336 = +HEAPF64[$6>>3]; + $337 = (_fmt_fp($0,$336,$$1260,$$0254,$spec$select,$$0235)|0); + $$0243$ph$be = $337; + break L77; + break; + } + default: { + $$2 = $20;$$2234 = 0;$$2239 = 18377;$$5 = $$0254;$$6268 = $spec$select;$$pre$phiZ2D = $12; + } + } + } while(0); + L103: do { + if ((label|0) == 67) { + label = 0; + $223 = $6; + $224 = $223; + $225 = HEAP32[$224>>2]|0; + $226 = (($223) + 4)|0; + $227 = $226; + $228 = HEAP32[$227>>2]|0; + $229 = $$1236 & 32; + $230 = (_fmt_x($225,$228,$11,$229)|0); + $231 = ($225|0)==(0); + $232 = ($228|0)==(0); + $233 = $231 & $232; + $234 = $$3265 & 8; + $235 = ($234|0)==(0); + $or$cond278 = $235 | $233; + $236 = $$1236 >>> 4; + $237 = (18377 + ($236)|0); + $spec$select293 = $or$cond278 ? 18377 : $237; + $spec$select294 = $or$cond278 ? 0 : 2; + $$0228 = $230;$$1233 = $spec$select294;$$1238 = $spec$select293;$$2256 = $$1255;$$4266 = $$3265;$277 = $225;$279 = $228; + label = 73; + } + else if ((label|0) == 72) { + label = 0; + $273 = (_fmt_u($271,$272,$11)|0); + $$0228 = $273;$$1233 = $$0232;$$1238 = $$0237;$$2256 = $$0254;$$4266 = $spec$select;$277 = $271;$279 = $272; + label = 73; + } + else if ((label|0) == 77) { + label = 0; + $301 = (_memchr($$1,0,$$0254)|0); + $302 = ($301|0)==(0|0); + $303 = $301; + $304 = $$1; + $305 = (($303) - ($304))|0; + $306 = (($$1) + ($$0254)|0); + $$3257 = $302 ? $$0254 : $305; + $$1250 = $302 ? $306 : $301; + $$pre368 = $$1250; + $$2 = $$1;$$2234 = 0;$$2239 = 18377;$$5 = $$3257;$$6268 = $192;$$pre$phiZ2D = $$pre368; + } + else if ((label|0) == 81) { + label = 0; + $314 = HEAP32[$6>>2]|0; + $$0229334 = $314;$$0240333 = 0; + while(1) { + $315 = HEAP32[$$0229334>>2]|0; + $316 = ($315|0)==(0); + if ($316) { + $$0240313 = $$0240333; + break; + } + $317 = (_wctomb($9,$315)|0); + $318 = ($317|0)<(0); + $319 = (($$4258370) - ($$0240333))|0; + $320 = ($317>>>0)>($319>>>0); + $or$cond283 = $318 | $320; + if ($or$cond283) { + label = 85; + break; + } + $321 = ((($$0229334)) + 4|0); + $322 = (($317) + ($$0240333))|0; + $323 = ($$4258370>>>0)>($322>>>0); + if ($323) { + $$0229334 = $321;$$0240333 = $322; + } else { + $$0240313 = $322; + break; + } + } + if ((label|0) == 85) { + label = 0; + if ($318) { + $$0 = -1; + break L1; + } else { + $$0240313 = $$0240333; + } + } + _pad_683($0,32,$$1260,$$0240313,$spec$select); + $324 = ($$0240313|0)==(0); + if ($324) { + $$0240313371 = 0; + label = 91; + } else { + $325 = HEAP32[$6>>2]|0; + $$1230340 = $325;$$1241339 = 0; + while(1) { + $326 = HEAP32[$$1230340>>2]|0; + $327 = ($326|0)==(0); + if ($327) { + $$0240313371 = $$0240313; + label = 91; + break L103; + } + $328 = (_wctomb($9,$326)|0); + $329 = (($328) + ($$1241339))|0; + $330 = ($329|0)>($$0240313|0); + if ($330) { + $$0240313371 = $$0240313; + label = 91; + break L103; + } + $331 = ((($$1230340)) + 4|0); + _out($0,$9,$328); + $332 = ($329>>>0)<($$0240313>>>0); + if ($332) { + $$1230340 = $331;$$1241339 = $329; + } else { + $$0240313371 = $$0240313; + label = 91; + break; + } + } + } + } + } while(0); + if ((label|0) == 73) { + label = 0; + $274 = ($$2256|0)>(-1); + $275 = $$4266 & -65537; + $spec$select281 = $274 ? $275 : $$4266; + $276 = ($277|0)!=(0); + $278 = ($279|0)!=(0); + $280 = $276 | $278; + $281 = ($$2256|0)!=(0); + $or$cond = $281 | $280; + $282 = $$0228; + $283 = (($12) - ($282))|0; + $284 = $280 ^ 1; + $285 = $284&1; + $286 = (($283) + ($285))|0; + $287 = ($$2256|0)>($286|0); + $$2256$ = $287 ? $$2256 : $286; + $spec$select298 = $or$cond ? $$2256$ : 0; + $spec$select299 = $or$cond ? $$0228 : $11; + $$2 = $spec$select299;$$2234 = $$1233;$$2239 = $$1238;$$5 = $spec$select298;$$6268 = $spec$select281;$$pre$phiZ2D = $12; + } + else if ((label|0) == 91) { + label = 0; + $333 = $spec$select ^ 8192; + _pad_683($0,32,$$1260,$$0240313371,$333); + $334 = ($$1260|0)>($$0240313371|0); + $335 = $334 ? $$1260 : $$0240313371; + $$0243$ph$be = $335; + break; + } + $338 = $$2; + $339 = (($$pre$phiZ2D) - ($338))|0; + $340 = ($$5|0)<($339|0); + $spec$select284 = $340 ? $339 : $$5; + $341 = (($spec$select284) + ($$2234))|0; + $342 = ($$1260|0)<($341|0); + $$2261 = $342 ? $341 : $$1260; + _pad_683($0,32,$$2261,$341,$$6268); + _out($0,$$2239,$$2234); + $343 = $$6268 ^ 65536; + _pad_683($0,48,$$2261,$341,$343); + _pad_683($0,48,$spec$select284,$339,0); + _out($0,$$2,$339); + $344 = $$6268 ^ 8192; + _pad_683($0,32,$$2261,$341,$344); + $$0243$ph$be = $$2261; + } + } while(0); + $$0243$ph = $$0243$ph$be;$$0247$ph = $$1248;$$0269$ph = $$3272; + } + L125: do { + if ((label|0) == 94) { + $345 = ($0|0)==(0|0); + if ($345) { + $346 = ($$0269$ph|0)==(0); + if ($346) { + $$0 = 0; + } else { + $$2242320 = 1; + while(1) { + $347 = (($4) + ($$2242320<<2)|0); + $348 = HEAP32[$347>>2]|0; + $349 = ($348|0)==(0); + if ($349) { + break; + } + $350 = (($3) + ($$2242320<<3)|0); + _pop_arg($350,$348,$2); + $351 = (($$2242320) + 1)|0; + $352 = ($351>>>0)<(10); + if ($352) { + $$2242320 = $351; + } else { + $$0 = 1; + break L125; + } + } + $$3317 = $$2242320; + while(1) { + $355 = (($4) + ($$3317<<2)|0); + $356 = HEAP32[$355>>2]|0; + $357 = ($356|0)==(0); + $354 = (($$3317) + 1)|0; + if (!($357)) { + $$0 = -1; + break L125; + } + $353 = ($354>>>0)<(10); + if ($353) { + $$3317 = $354; + } else { + $$0 = 1; + break; + } + } + } + } else { + $$0 = $$1248; + } + } + } while(0); + STACKTOP = sp;return ($$0|0); +} +function ___lockfile($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return 0; +} +function ___unlockfile($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function _out($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + $3 = HEAP32[$0>>2]|0; + $4 = $3 & 32; + $5 = ($4|0)==(0); + if ($5) { + (___fwritex($1,$2,$0)|0); + } + return; +} +function _getint($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + $1 = HEAP32[$0>>2]|0; + $2 = HEAP8[$1>>0]|0; + $3 = $2 << 24 >> 24; + $4 = (_isdigit($3)|0); + $5 = ($4|0)==(0); + if ($5) { + $$0$lcssa = 0; + } else { + $$04 = 0; + while(1) { + $6 = ($$04*10)|0; + $7 = HEAP32[$0>>2]|0; + $8 = HEAP8[$7>>0]|0; + $9 = $8 << 24 >> 24; + $10 = (($6) + -48)|0; + $11 = (($10) + ($9))|0; + $12 = ((($7)) + 1|0); + HEAP32[$0>>2] = $12; + $13 = HEAP8[$12>>0]|0; + $14 = $13 << 24 >> 24; + $15 = (_isdigit($14)|0); + $16 = ($15|0)==(0); + if ($16) { + $$0$lcssa = $11; + break; + } else { + $$04 = $11; + } + } + } + return ($$0$lcssa|0); +} +function _pop_arg($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + var $expanded88 = 0, $expanded90 = 0, $expanded91 = 0, $expanded93 = 0, $expanded94 = 0, $expanded95 = 0, label = 0, sp = 0; + sp = STACKTOP; + $3 = ($1>>>0)>(20); + L1: do { + if (!($3)) { + do { + switch ($1|0) { + case 9: { + $arglist_current = HEAP32[$2>>2]|0; + $4 = $arglist_current; + $5 = ((0) + 4|0); + $expanded28 = $5; + $expanded = (($expanded28) - 1)|0; + $6 = (($4) + ($expanded))|0; + $7 = ((0) + 4|0); + $expanded32 = $7; + $expanded31 = (($expanded32) - 1)|0; + $expanded30 = $expanded31 ^ -1; + $8 = $6 & $expanded30; + $9 = $8; + $10 = HEAP32[$9>>2]|0; + $arglist_next = ((($9)) + 4|0); + HEAP32[$2>>2] = $arglist_next; + HEAP32[$0>>2] = $10; + break L1; + break; + } + case 10: { + $arglist_current2 = HEAP32[$2>>2]|0; + $11 = $arglist_current2; + $12 = ((0) + 4|0); + $expanded35 = $12; + $expanded34 = (($expanded35) - 1)|0; + $13 = (($11) + ($expanded34))|0; + $14 = ((0) + 4|0); + $expanded39 = $14; + $expanded38 = (($expanded39) - 1)|0; + $expanded37 = $expanded38 ^ -1; + $15 = $13 & $expanded37; + $16 = $15; + $17 = HEAP32[$16>>2]|0; + $arglist_next3 = ((($16)) + 4|0); + HEAP32[$2>>2] = $arglist_next3; + $18 = ($17|0)<(0); + $19 = $18 << 31 >> 31; + $20 = $0; + $21 = $20; + HEAP32[$21>>2] = $17; + $22 = (($20) + 4)|0; + $23 = $22; + HEAP32[$23>>2] = $19; + break L1; + break; + } + case 11: { + $arglist_current5 = HEAP32[$2>>2]|0; + $24 = $arglist_current5; + $25 = ((0) + 4|0); + $expanded42 = $25; + $expanded41 = (($expanded42) - 1)|0; + $26 = (($24) + ($expanded41))|0; + $27 = ((0) + 4|0); + $expanded46 = $27; + $expanded45 = (($expanded46) - 1)|0; + $expanded44 = $expanded45 ^ -1; + $28 = $26 & $expanded44; + $29 = $28; + $30 = HEAP32[$29>>2]|0; + $arglist_next6 = ((($29)) + 4|0); + HEAP32[$2>>2] = $arglist_next6; + $31 = $0; + $32 = $31; + HEAP32[$32>>2] = $30; + $33 = (($31) + 4)|0; + $34 = $33; + HEAP32[$34>>2] = 0; + break L1; + break; + } + case 12: { + $arglist_current8 = HEAP32[$2>>2]|0; + $35 = $arglist_current8; + $36 = ((0) + 8|0); + $expanded49 = $36; + $expanded48 = (($expanded49) - 1)|0; + $37 = (($35) + ($expanded48))|0; + $38 = ((0) + 8|0); + $expanded53 = $38; + $expanded52 = (($expanded53) - 1)|0; + $expanded51 = $expanded52 ^ -1; + $39 = $37 & $expanded51; + $40 = $39; + $41 = $40; + $42 = $41; + $43 = HEAP32[$42>>2]|0; + $44 = (($41) + 4)|0; + $45 = $44; + $46 = HEAP32[$45>>2]|0; + $arglist_next9 = ((($40)) + 8|0); + HEAP32[$2>>2] = $arglist_next9; + $47 = $0; + $48 = $47; + HEAP32[$48>>2] = $43; + $49 = (($47) + 4)|0; + $50 = $49; + HEAP32[$50>>2] = $46; + break L1; + break; + } + case 13: { + $arglist_current11 = HEAP32[$2>>2]|0; + $51 = $arglist_current11; + $52 = ((0) + 4|0); + $expanded56 = $52; + $expanded55 = (($expanded56) - 1)|0; + $53 = (($51) + ($expanded55))|0; + $54 = ((0) + 4|0); + $expanded60 = $54; + $expanded59 = (($expanded60) - 1)|0; + $expanded58 = $expanded59 ^ -1; + $55 = $53 & $expanded58; + $56 = $55; + $57 = HEAP32[$56>>2]|0; + $arglist_next12 = ((($56)) + 4|0); + HEAP32[$2>>2] = $arglist_next12; + $58 = $57&65535; + $59 = $58 << 16 >> 16; + $60 = ($59|0)<(0); + $61 = $60 << 31 >> 31; + $62 = $0; + $63 = $62; + HEAP32[$63>>2] = $59; + $64 = (($62) + 4)|0; + $65 = $64; + HEAP32[$65>>2] = $61; + break L1; + break; + } + case 14: { + $arglist_current14 = HEAP32[$2>>2]|0; + $66 = $arglist_current14; + $67 = ((0) + 4|0); + $expanded63 = $67; + $expanded62 = (($expanded63) - 1)|0; + $68 = (($66) + ($expanded62))|0; + $69 = ((0) + 4|0); + $expanded67 = $69; + $expanded66 = (($expanded67) - 1)|0; + $expanded65 = $expanded66 ^ -1; + $70 = $68 & $expanded65; + $71 = $70; + $72 = HEAP32[$71>>2]|0; + $arglist_next15 = ((($71)) + 4|0); + HEAP32[$2>>2] = $arglist_next15; + $$mask31 = $72 & 65535; + $73 = $0; + $74 = $73; + HEAP32[$74>>2] = $$mask31; + $75 = (($73) + 4)|0; + $76 = $75; + HEAP32[$76>>2] = 0; + break L1; + break; + } + case 15: { + $arglist_current17 = HEAP32[$2>>2]|0; + $77 = $arglist_current17; + $78 = ((0) + 4|0); + $expanded70 = $78; + $expanded69 = (($expanded70) - 1)|0; + $79 = (($77) + ($expanded69))|0; + $80 = ((0) + 4|0); + $expanded74 = $80; + $expanded73 = (($expanded74) - 1)|0; + $expanded72 = $expanded73 ^ -1; + $81 = $79 & $expanded72; + $82 = $81; + $83 = HEAP32[$82>>2]|0; + $arglist_next18 = ((($82)) + 4|0); + HEAP32[$2>>2] = $arglist_next18; + $84 = $83&255; + $85 = $84 << 24 >> 24; + $86 = ($85|0)<(0); + $87 = $86 << 31 >> 31; + $88 = $0; + $89 = $88; + HEAP32[$89>>2] = $85; + $90 = (($88) + 4)|0; + $91 = $90; + HEAP32[$91>>2] = $87; + break L1; + break; + } + case 16: { + $arglist_current20 = HEAP32[$2>>2]|0; + $92 = $arglist_current20; + $93 = ((0) + 4|0); + $expanded77 = $93; + $expanded76 = (($expanded77) - 1)|0; + $94 = (($92) + ($expanded76))|0; + $95 = ((0) + 4|0); + $expanded81 = $95; + $expanded80 = (($expanded81) - 1)|0; + $expanded79 = $expanded80 ^ -1; + $96 = $94 & $expanded79; + $97 = $96; + $98 = HEAP32[$97>>2]|0; + $arglist_next21 = ((($97)) + 4|0); + HEAP32[$2>>2] = $arglist_next21; + $$mask = $98 & 255; + $99 = $0; + $100 = $99; + HEAP32[$100>>2] = $$mask; + $101 = (($99) + 4)|0; + $102 = $101; + HEAP32[$102>>2] = 0; + break L1; + break; + } + case 17: { + $arglist_current23 = HEAP32[$2>>2]|0; + $103 = $arglist_current23; + $104 = ((0) + 8|0); + $expanded84 = $104; + $expanded83 = (($expanded84) - 1)|0; + $105 = (($103) + ($expanded83))|0; + $106 = ((0) + 8|0); + $expanded88 = $106; + $expanded87 = (($expanded88) - 1)|0; + $expanded86 = $expanded87 ^ -1; + $107 = $105 & $expanded86; + $108 = $107; + $109 = +HEAPF64[$108>>3]; + $arglist_next24 = ((($108)) + 8|0); + HEAP32[$2>>2] = $arglist_next24; + HEAPF64[$0>>3] = $109; + break L1; + break; + } + case 18: { + $arglist_current26 = HEAP32[$2>>2]|0; + $110 = $arglist_current26; + $111 = ((0) + 8|0); + $expanded91 = $111; + $expanded90 = (($expanded91) - 1)|0; + $112 = (($110) + ($expanded90))|0; + $113 = ((0) + 8|0); + $expanded95 = $113; + $expanded94 = (($expanded95) - 1)|0; + $expanded93 = $expanded94 ^ -1; + $114 = $112 & $expanded93; + $115 = $114; + $116 = +HEAPF64[$115>>3]; + $arglist_next27 = ((($115)) + 8|0); + HEAP32[$2>>2] = $arglist_next27; + HEAPF64[$0>>3] = $116; + break L1; + break; + } + default: { + break L1; + } + } + } while(0); + } + } while(0); + return; +} +function _fmt_x($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + var sp = 0; + sp = STACKTOP; + $4 = ($0|0)==(0); + $5 = ($1|0)==(0); + $6 = $4 & $5; + if ($6) { + $$05$lcssa = $2; + } else { + $$056 = $2;$15 = $1;$8 = $0; + while(1) { + $7 = $8 & 15; + $9 = (18429 + ($7)|0); + $10 = HEAP8[$9>>0]|0; + $11 = $10&255; + $12 = $11 | $3; + $13 = $12&255; + $14 = ((($$056)) + -1|0); + HEAP8[$14>>0] = $13; + $16 = (_bitshift64Lshr(($8|0),($15|0),4)|0); + $17 = tempRet0; + $18 = ($16|0)==(0); + $19 = ($17|0)==(0); + $20 = $18 & $19; + if ($20) { + $$05$lcssa = $14; + break; + } else { + $$056 = $14;$15 = $17;$8 = $16; + } + } + } + return ($$05$lcssa|0); +} +function _fmt_o($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + sp = STACKTOP; + $3 = ($0|0)==(0); + $4 = ($1|0)==(0); + $5 = $3 & $4; + if ($5) { + $$0$lcssa = $2; + } else { + $$06 = $2;$11 = $1;$7 = $0; + while(1) { + $6 = $7&255; + $8 = $6 & 7; + $9 = $8 | 48; + $10 = ((($$06)) + -1|0); + HEAP8[$10>>0] = $9; + $12 = (_bitshift64Lshr(($7|0),($11|0),3)|0); + $13 = tempRet0; + $14 = ($12|0)==(0); + $15 = ($13|0)==(0); + $16 = $14 & $15; + if ($16) { + $$0$lcssa = $10; + break; + } else { + $$06 = $10;$11 = $13;$7 = $12; + } + } + } + return ($$0$lcssa|0); +} +function _fmt_u($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + sp = STACKTOP; + $3 = ($1>>>0)>(0); + $4 = ($0>>>0)>(4294967295); + $5 = ($1|0)==(0); + $6 = $5 & $4; + $7 = $3 | $6; + if ($7) { + $$0914 = $2;$8 = $0;$9 = $1; + while(1) { + $10 = (___udivdi3(($8|0),($9|0),10,0)|0); + $11 = tempRet0; + $12 = (___muldi3(($10|0),($11|0),10,0)|0); + $13 = tempRet0; + $14 = (_i64Subtract(($8|0),($9|0),($12|0),($13|0))|0); + $15 = tempRet0; + $16 = $14&255; + $17 = $16 | 48; + $18 = ((($$0914)) + -1|0); + HEAP8[$18>>0] = $17; + $19 = ($9>>>0)>(9); + $20 = ($8>>>0)>(4294967295); + $21 = ($9|0)==(9); + $22 = $21 & $20; + $23 = $19 | $22; + if ($23) { + $$0914 = $18;$8 = $10;$9 = $11; + } else { + break; + } + } + $$010$lcssa$off0 = $10;$$09$lcssa = $18; + } else { + $$010$lcssa$off0 = $0;$$09$lcssa = $2; + } + $24 = ($$010$lcssa$off0|0)==(0); + if ($24) { + $$1$lcssa = $$09$lcssa; + } else { + $$012 = $$010$lcssa$off0;$$111 = $$09$lcssa; + while(1) { + $25 = (($$012>>>0) / 10)&-1; + $26 = ($25*10)|0; + $27 = (($$012) - ($26))|0; + $28 = $27 | 48; + $29 = $28&255; + $30 = ((($$111)) + -1|0); + HEAP8[$30>>0] = $29; + $31 = ($$012>>>0)<(10); + if ($31) { + $$1$lcssa = $30; + break; + } else { + $$012 = $25;$$111 = $30; + } + } + } + return ($$1$lcssa|0); +} +function _strerror($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = (___pthread_self_105()|0); + $2 = ((($1)) + 188|0); + $3 = HEAP32[$2>>2]|0; + $4 = (___strerror_l($0,$3)|0); + return ($4|0); +} +function _memchr($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + sp = STACKTOP; + $3 = $1 & 255; + $4 = $0; + $5 = $4 & 3; + $6 = ($5|0)!=(0); + $7 = ($2|0)!=(0); + $or$cond53 = $7 & $6; + L1: do { + if ($or$cond53) { + $8 = $1&255; + $$03555 = $0;$$03654 = $2; + while(1) { + $9 = HEAP8[$$03555>>0]|0; + $10 = ($9<<24>>24)==($8<<24>>24); + if ($10) { + $$035$lcssa65 = $$03555;$$036$lcssa64 = $$03654; + label = 6; + break L1; + } + $11 = ((($$03555)) + 1|0); + $12 = (($$03654) + -1)|0; + $13 = $11; + $14 = $13 & 3; + $15 = ($14|0)!=(0); + $16 = ($12|0)!=(0); + $or$cond = $16 & $15; + if ($or$cond) { + $$03555 = $11;$$03654 = $12; + } else { + $$035$lcssa = $11;$$036$lcssa = $12;$$lcssa = $16; + label = 5; + break; + } + } + } else { + $$035$lcssa = $0;$$036$lcssa = $2;$$lcssa = $7; + label = 5; + } + } while(0); + if ((label|0) == 5) { + if ($$lcssa) { + $$035$lcssa65 = $$035$lcssa;$$036$lcssa64 = $$036$lcssa; + label = 6; + } else { + label = 16; + } + } + L8: do { + if ((label|0) == 6) { + $17 = HEAP8[$$035$lcssa65>>0]|0; + $18 = $1&255; + $19 = ($17<<24>>24)==($18<<24>>24); + if ($19) { + $38 = ($$036$lcssa64|0)==(0); + if ($38) { + label = 16; + break; + } else { + $39 = $$035$lcssa65; + break; + } + } + $20 = Math_imul($3, 16843009)|0; + $21 = ($$036$lcssa64>>>0)>(3); + L13: do { + if ($21) { + $$046 = $$035$lcssa65;$$13745 = $$036$lcssa64; + while(1) { + $22 = HEAP32[$$046>>2]|0; + $23 = $22 ^ $20; + $24 = (($23) + -16843009)|0; + $25 = $23 & -2139062144; + $26 = $25 ^ -2139062144; + $27 = $26 & $24; + $28 = ($27|0)==(0); + if (!($28)) { + $$137$lcssa66 = $$13745;$$in = $$046; + break L13; + } + $29 = ((($$046)) + 4|0); + $30 = (($$13745) + -4)|0; + $31 = ($30>>>0)>(3); + if ($31) { + $$046 = $29;$$13745 = $30; + } else { + $$0$lcssa = $29;$$137$lcssa = $30; + label = 11; + break; + } + } + } else { + $$0$lcssa = $$035$lcssa65;$$137$lcssa = $$036$lcssa64; + label = 11; + } + } while(0); + if ((label|0) == 11) { + $32 = ($$137$lcssa|0)==(0); + if ($32) { + label = 16; + break; + } else { + $$137$lcssa66 = $$137$lcssa;$$in = $$0$lcssa; + } + } + $$140 = $$in;$$23839 = $$137$lcssa66; + while(1) { + $33 = HEAP8[$$140>>0]|0; + $34 = ($33<<24>>24)==($18<<24>>24); + if ($34) { + $39 = $$140; + break L8; + } + $35 = ((($$140)) + 1|0); + $36 = (($$23839) + -1)|0; + $37 = ($36|0)==(0); + if ($37) { + label = 16; + break; + } else { + $$140 = $35;$$23839 = $36; + } + } + } + } while(0); + if ((label|0) == 16) { + $39 = 0; + } + return ($39|0); +} +function _pad_683($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 256|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(256|0); + $5 = sp; + $6 = $4 & 73728; + $7 = ($6|0)==(0); + $8 = ($2|0)>($3|0); + $or$cond = $8 & $7; + if ($or$cond) { + $9 = (($2) - ($3))|0; + $10 = $1 << 24 >> 24; + $11 = ($9>>>0)<(256); + $12 = $11 ? $9 : 256; + (_memset(($5|0),($10|0),($12|0))|0); + $13 = ($9>>>0)>(255); + if ($13) { + $14 = (($2) - ($3))|0; + $$011 = $9; + while(1) { + _out($0,$5,256); + $15 = (($$011) + -256)|0; + $16 = ($15>>>0)>(255); + if ($16) { + $$011 = $15; + } else { + break; + } + } + $17 = $14 & 255; + $$0$lcssa = $17; + } else { + $$0$lcssa = $9; + } + _out($0,$5,$$0$lcssa); + } + STACKTOP = sp;return; +} +function _wctomb($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $$0 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $2 = ($0|0)==(0|0); + if ($2) { + $$0 = 0; + } else { + $3 = (_wcrtomb($0,$1,0)|0); + $$0 = $3; + } + return ($$0|0); +} +function _fmt_fp($0,$1,$2,$3,$4,$5) { + $0 = $0|0; + $1 = +$1; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + $5 = $5|0; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 560|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(560|0); + $6 = sp + 8|0; + $7 = sp; + $8 = sp + 524|0; + $9 = $8; + $10 = sp + 512|0; + HEAP32[$7>>2] = 0; + $11 = ((($10)) + 12|0); + $12 = (___DOUBLE_BITS_684($1)|0); + $13 = tempRet0; + $14 = ($13|0)<(0); + if ($14) { + $15 = - $1; + $16 = (___DOUBLE_BITS_684($15)|0); + $17 = tempRet0; + $$0471 = $15;$$0522 = 1;$$0523 = 18394;$25 = $17;$412 = $16; + } else { + $18 = $4 & 2048; + $19 = ($18|0)==(0); + $20 = $4 & 1; + $21 = ($20|0)==(0); + $$ = $21 ? (18395) : (18400); + $spec$select565 = $19 ? $$ : (18397); + $22 = $4 & 2049; + $23 = ($22|0)!=(0); + $spec$select566 = $23&1; + $$0471 = $1;$$0522 = $spec$select566;$$0523 = $spec$select565;$25 = $13;$412 = $12; + } + $24 = $25 & 2146435072; + $26 = (0)==(0); + $27 = ($24|0)==(2146435072); + $28 = $26 & $27; + do { + if ($28) { + $29 = $5 & 32; + $30 = ($29|0)!=(0); + $31 = $30 ? 18413 : 18417; + $32 = ($$0471 != $$0471) | (0.0 != 0.0); + $33 = $30 ? 18421 : 18425; + $$0512 = $32 ? $33 : $31; + $34 = (($$0522) + 3)|0; + $35 = $4 & -65537; + _pad_683($0,32,$2,$34,$35); + _out($0,$$0523,$$0522); + _out($0,$$0512,3); + $36 = $4 ^ 8192; + _pad_683($0,32,$2,$34,$36); + $$sink755 = $34; + } else { + $37 = (+_frexpl($$0471,$7)); + $38 = $37 * 2.0; + $39 = $38 != 0.0; + if ($39) { + $40 = HEAP32[$7>>2]|0; + $41 = (($40) + -1)|0; + HEAP32[$7>>2] = $41; + } + $42 = $5 | 32; + $43 = ($42|0)==(97); + if ($43) { + $44 = $5 & 32; + $45 = ($44|0)==(0); + $46 = ((($$0523)) + 9|0); + $spec$select = $45 ? $$0523 : $46; + $47 = $$0522 | 2; + $48 = ($3>>>0)>(11); + $49 = (12 - ($3))|0; + $50 = ($49|0)==(0); + $51 = $48 | $50; + do { + if ($51) { + $$1472 = $38; + } else { + $$0511586 = 8.0;$$1510587 = $49; + while(1) { + $52 = (($$1510587) + -1)|0; + $53 = $$0511586 * 16.0; + $54 = ($52|0)==(0); + if ($54) { + break; + } else { + $$0511586 = $53;$$1510587 = $52; + } + } + $55 = HEAP8[$spec$select>>0]|0; + $56 = ($55<<24>>24)==(45); + if ($56) { + $57 = - $38; + $58 = $57 - $53; + $59 = $53 + $58; + $60 = - $59; + $$1472 = $60; + break; + } else { + $61 = $38 + $53; + $62 = $61 - $53; + $$1472 = $62; + break; + } + } + } while(0); + $63 = HEAP32[$7>>2]|0; + $64 = ($63|0)<(0); + $65 = (0 - ($63))|0; + $66 = $64 ? $65 : $63; + $67 = ($66|0)<(0); + $68 = $67 << 31 >> 31; + $69 = (_fmt_u($66,$68,$11)|0); + $70 = ($69|0)==($11|0); + if ($70) { + $71 = ((($10)) + 11|0); + HEAP8[$71>>0] = 48; + $$0513 = $71; + } else { + $$0513 = $69; + } + $72 = $63 >> 31; + $73 = $72 & 2; + $74 = (($73) + 43)|0; + $75 = $74&255; + $76 = ((($$0513)) + -1|0); + HEAP8[$76>>0] = $75; + $77 = (($5) + 15)|0; + $78 = $77&255; + $79 = ((($$0513)) + -2|0); + HEAP8[$79>>0] = $78; + $80 = ($3|0)<(1); + $81 = $4 & 8; + $82 = ($81|0)==(0); + $$0525 = $8;$$2473 = $$1472; + while(1) { + $83 = (~~(($$2473))); + $84 = (18429 + ($83)|0); + $85 = HEAP8[$84>>0]|0; + $86 = $85&255; + $87 = $44 | $86; + $88 = $87&255; + $89 = ((($$0525)) + 1|0); + HEAP8[$$0525>>0] = $88; + $90 = (+($83|0)); + $91 = $$2473 - $90; + $92 = $91 * 16.0; + $93 = $89; + $94 = (($93) - ($9))|0; + $95 = ($94|0)==(1); + if ($95) { + $96 = $92 == 0.0; + $or$cond3$not = $80 & $96; + $or$cond = $82 & $or$cond3$not; + if ($or$cond) { + $$1526 = $89; + } else { + $97 = ((($$0525)) + 2|0); + HEAP8[$89>>0] = 46; + $$1526 = $97; + } + } else { + $$1526 = $89; + } + $98 = $92 != 0.0; + if ($98) { + $$0525 = $$1526;$$2473 = $92; + } else { + break; + } + } + $99 = ($3|0)==(0); + $$pre716 = $$1526; + if ($99) { + label = 25; + } else { + $100 = (-2 - ($9))|0; + $101 = (($100) + ($$pre716))|0; + $102 = ($101|0)<($3|0); + if ($102) { + $103 = $11; + $104 = $79; + $105 = (($3) + 2)|0; + $106 = (($105) + ($103))|0; + $107 = (($106) - ($104))|0; + $$0527 = $107;$$pre$phi713Z2D = $103;$$pre$phi714Z2D = $104; + } else { + label = 25; + } + } + if ((label|0) == 25) { + $108 = $11; + $109 = $79; + $110 = (($108) - ($9))|0; + $111 = (($110) - ($109))|0; + $112 = (($111) + ($$pre716))|0; + $$0527 = $112;$$pre$phi713Z2D = $108;$$pre$phi714Z2D = $109; + } + $113 = (($$0527) + ($47))|0; + _pad_683($0,32,$2,$113,$4); + _out($0,$spec$select,$47); + $114 = $4 ^ 65536; + _pad_683($0,48,$2,$113,$114); + $115 = (($$pre716) - ($9))|0; + _out($0,$8,$115); + $116 = (($$pre$phi713Z2D) - ($$pre$phi714Z2D))|0; + $117 = (($115) + ($116))|0; + $118 = (($$0527) - ($117))|0; + _pad_683($0,48,$118,0,0); + _out($0,$79,$116); + $119 = $4 ^ 8192; + _pad_683($0,32,$2,$113,$119); + $$sink755 = $113; + break; + } + $120 = ($3|0)<(0); + $spec$select539 = $120 ? 6 : $3; + if ($39) { + $121 = $38 * 268435456.0; + $122 = HEAP32[$7>>2]|0; + $123 = (($122) + -28)|0; + HEAP32[$7>>2] = $123; + $$3 = $121;$$pr = $123; + } else { + $$pre = HEAP32[$7>>2]|0; + $$3 = $38;$$pr = $$pre; + } + $124 = ($$pr|0)<(0); + $125 = ((($6)) + 288|0); + $$0498 = $124 ? $6 : $125; + $$1499 = $$0498;$$4 = $$3; + while(1) { + $126 = (~~(($$4))>>>0); + HEAP32[$$1499>>2] = $126; + $127 = ((($$1499)) + 4|0); + $128 = (+($126>>>0)); + $129 = $$4 - $128; + $130 = $129 * 1.0E+9; + $131 = $130 != 0.0; + if ($131) { + $$1499 = $127;$$4 = $130; + } else { + break; + } + } + $132 = ($$pr|0)>(0); + if ($132) { + $$1482683 = $$0498;$$2500682 = $127;$134 = $$pr; + while(1) { + $133 = ($134|0)<(29); + $135 = $133 ? $134 : 29; + $$0488669 = ((($$2500682)) + -4|0); + $136 = ($$0488669>>>0)<($$1482683>>>0); + if ($136) { + $$2483 = $$1482683; + } else { + $$0488671 = $$0488669;$$0497670 = 0; + while(1) { + $137 = HEAP32[$$0488671>>2]|0; + $138 = (_bitshift64Shl(($137|0),0,($135|0))|0); + $139 = tempRet0; + $140 = (_i64Add(($138|0),($139|0),($$0497670|0),0)|0); + $141 = tempRet0; + $142 = (___udivdi3(($140|0),($141|0),1000000000,0)|0); + $143 = tempRet0; + $144 = (___muldi3(($142|0),($143|0),1000000000,0)|0); + $145 = tempRet0; + $146 = (_i64Subtract(($140|0),($141|0),($144|0),($145|0))|0); + $147 = tempRet0; + HEAP32[$$0488671>>2] = $146; + $$0488 = ((($$0488671)) + -4|0); + $148 = ($$0488>>>0)<($$1482683>>>0); + if ($148) { + break; + } else { + $$0488671 = $$0488;$$0497670 = $142; + } + } + $149 = ($142|0)==(0); + if ($149) { + $$2483 = $$1482683; + } else { + $150 = ((($$1482683)) + -4|0); + HEAP32[$150>>2] = $142; + $$2483 = $150; + } + } + $151 = ($$2500682>>>0)>($$2483>>>0); + L57: do { + if ($151) { + $$3501676 = $$2500682; + while(1) { + $153 = ((($$3501676)) + -4|0); + $154 = HEAP32[$153>>2]|0; + $155 = ($154|0)==(0); + if (!($155)) { + $$3501$lcssa = $$3501676; + break L57; + } + $152 = ($153>>>0)>($$2483>>>0); + if ($152) { + $$3501676 = $153; + } else { + $$3501$lcssa = $153; + break; + } + } + } else { + $$3501$lcssa = $$2500682; + } + } while(0); + $156 = HEAP32[$7>>2]|0; + $157 = (($156) - ($135))|0; + HEAP32[$7>>2] = $157; + $158 = ($157|0)>(0); + if ($158) { + $$1482683 = $$2483;$$2500682 = $$3501$lcssa;$134 = $157; + } else { + $$1482$lcssa = $$2483;$$2500$lcssa = $$3501$lcssa;$$pr564 = $157; + break; + } + } + } else { + $$1482$lcssa = $$0498;$$2500$lcssa = $127;$$pr564 = $$pr; + } + $159 = ($$pr564|0)<(0); + if ($159) { + $160 = (($spec$select539) + 25)|0; + $161 = (($160|0) / 9)&-1; + $162 = (($161) + 1)|0; + $163 = ($42|0)==(102); + $$3484663 = $$1482$lcssa;$$4502662 = $$2500$lcssa;$165 = $$pr564; + while(1) { + $164 = (0 - ($165))|0; + $166 = ($164|0)<(9); + $167 = $166 ? $164 : 9; + $168 = ($$3484663>>>0)<($$4502662>>>0); + if ($168) { + $172 = 1 << $167; + $173 = (($172) + -1)|0; + $174 = 1000000000 >>> $167; + $$0487657 = 0;$$1489656 = $$3484663; + while(1) { + $175 = HEAP32[$$1489656>>2]|0; + $176 = $175 & $173; + $177 = $175 >>> $167; + $178 = (($177) + ($$0487657))|0; + HEAP32[$$1489656>>2] = $178; + $179 = Math_imul($176, $174)|0; + $180 = ((($$1489656)) + 4|0); + $181 = ($180>>>0)<($$4502662>>>0); + if ($181) { + $$0487657 = $179;$$1489656 = $180; + } else { + break; + } + } + $182 = HEAP32[$$3484663>>2]|0; + $183 = ($182|0)==(0); + $184 = ((($$3484663)) + 4|0); + $spec$select540 = $183 ? $184 : $$3484663; + $185 = ($179|0)==(0); + if ($185) { + $$5503 = $$4502662;$spec$select540721 = $spec$select540; + } else { + $186 = ((($$4502662)) + 4|0); + HEAP32[$$4502662>>2] = $179; + $$5503 = $186;$spec$select540721 = $spec$select540; + } + } else { + $169 = HEAP32[$$3484663>>2]|0; + $170 = ($169|0)==(0); + $171 = ((($$3484663)) + 4|0); + $spec$select540720 = $170 ? $171 : $$3484663; + $$5503 = $$4502662;$spec$select540721 = $spec$select540720; + } + $187 = $163 ? $$0498 : $spec$select540721; + $188 = $$5503; + $189 = $187; + $190 = (($188) - ($189))|0; + $191 = $190 >> 2; + $192 = ($191|0)>($162|0); + $193 = (($187) + ($162<<2)|0); + $spec$select541 = $192 ? $193 : $$5503; + $194 = HEAP32[$7>>2]|0; + $195 = (($194) + ($167))|0; + HEAP32[$7>>2] = $195; + $196 = ($195|0)<(0); + if ($196) { + $$3484663 = $spec$select540721;$$4502662 = $spec$select541;$165 = $195; + } else { + $$3484$lcssa = $spec$select540721;$$4502$lcssa = $spec$select541; + break; + } + } + } else { + $$3484$lcssa = $$1482$lcssa;$$4502$lcssa = $$2500$lcssa; + } + $197 = ($$3484$lcssa>>>0)<($$4502$lcssa>>>0); + $198 = $$0498; + if ($197) { + $199 = $$3484$lcssa; + $200 = (($198) - ($199))|0; + $201 = $200 >> 2; + $202 = ($201*9)|0; + $203 = HEAP32[$$3484$lcssa>>2]|0; + $204 = ($203>>>0)<(10); + if ($204) { + $$1517 = $202; + } else { + $$0516652 = $202;$$0532651 = 10; + while(1) { + $205 = ($$0532651*10)|0; + $206 = (($$0516652) + 1)|0; + $207 = ($203>>>0)<($205>>>0); + if ($207) { + $$1517 = $206; + break; + } else { + $$0516652 = $206;$$0532651 = $205; + } + } + } + } else { + $$1517 = 0; + } + $208 = ($42|0)==(102); + $209 = $208 ? 0 : $$1517; + $210 = (($spec$select539) - ($209))|0; + $211 = ($42|0)==(103); + $212 = ($spec$select539|0)!=(0); + $213 = $212 & $211; + $$neg = $213 << 31 >> 31; + $214 = (($210) + ($$neg))|0; + $215 = $$4502$lcssa; + $216 = (($215) - ($198))|0; + $217 = $216 >> 2; + $218 = ($217*9)|0; + $219 = (($218) + -9)|0; + $220 = ($214|0)<($219|0); + if ($220) { + $221 = ((($$0498)) + 4|0); + $222 = (($214) + 9216)|0; + $223 = (($222|0) / 9)&-1; + $224 = (($223) + -1024)|0; + $225 = (($221) + ($224<<2)|0); + $226 = ($223*9)|0; + $227 = (($222) - ($226))|0; + $228 = ($227|0)<(8); + if ($228) { + $$0529$in646 = $227;$$1533645 = 10; + while(1) { + $$0529 = (($$0529$in646) + 1)|0; + $229 = ($$1533645*10)|0; + $230 = ($$0529$in646|0)<(7); + if ($230) { + $$0529$in646 = $$0529;$$1533645 = $229; + } else { + $$1533$lcssa = $229; + break; + } + } + } else { + $$1533$lcssa = 10; + } + $231 = HEAP32[$225>>2]|0; + $232 = (($231>>>0) / ($$1533$lcssa>>>0))&-1; + $233 = Math_imul($232, $$1533$lcssa)|0; + $234 = (($231) - ($233))|0; + $235 = ($234|0)==(0); + $236 = ((($225)) + 4|0); + $237 = ($236|0)==($$4502$lcssa|0); + $or$cond543 = $237 & $235; + if ($or$cond543) { + $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa; + } else { + $238 = $232 & 1; + $239 = ($238|0)==(0); + $spec$select544 = $239 ? 9007199254740992.0 : 9007199254740994.0; + $240 = $$1533$lcssa >>> 1; + $241 = ($234>>>0)<($240>>>0); + $242 = ($234|0)==($240|0); + $or$cond546 = $237 & $242; + $spec$select561 = $or$cond546 ? 1.0 : 1.5; + $spec$select567 = $241 ? 0.5 : $spec$select561; + $243 = ($$0522|0)==(0); + if ($243) { + $$1467 = $spec$select567;$$1469 = $spec$select544; + } else { + $244 = HEAP8[$$0523>>0]|0; + $245 = ($244<<24>>24)==(45); + $246 = - $spec$select544; + $247 = - $spec$select567; + $spec$select568 = $245 ? $246 : $spec$select544; + $spec$select569 = $245 ? $247 : $spec$select567; + $$1467 = $spec$select569;$$1469 = $spec$select568; + } + $248 = (($231) - ($234))|0; + HEAP32[$225>>2] = $248; + $249 = $$1469 + $$1467; + $250 = $249 != $$1469; + if ($250) { + $251 = (($248) + ($$1533$lcssa))|0; + HEAP32[$225>>2] = $251; + $252 = ($251>>>0)>(999999999); + if ($252) { + $$2490638 = $225;$$5486639 = $$3484$lcssa; + while(1) { + $253 = ((($$2490638)) + -4|0); + HEAP32[$$2490638>>2] = 0; + $254 = ($253>>>0)<($$5486639>>>0); + if ($254) { + $255 = ((($$5486639)) + -4|0); + HEAP32[$255>>2] = 0; + $$6 = $255; + } else { + $$6 = $$5486639; + } + $256 = HEAP32[$253>>2]|0; + $257 = (($256) + 1)|0; + HEAP32[$253>>2] = $257; + $258 = ($257>>>0)>(999999999); + if ($258) { + $$2490638 = $253;$$5486639 = $$6; + } else { + $$2490$lcssa = $253;$$5486$lcssa = $$6; + break; + } + } + } else { + $$2490$lcssa = $225;$$5486$lcssa = $$3484$lcssa; + } + $259 = $$5486$lcssa; + $260 = (($198) - ($259))|0; + $261 = $260 >> 2; + $262 = ($261*9)|0; + $263 = HEAP32[$$5486$lcssa>>2]|0; + $264 = ($263>>>0)<(10); + if ($264) { + $$4492 = $$2490$lcssa;$$4520 = $262;$$8 = $$5486$lcssa; + } else { + $$2518634 = $262;$$2534633 = 10; + while(1) { + $265 = ($$2534633*10)|0; + $266 = (($$2518634) + 1)|0; + $267 = ($263>>>0)<($265>>>0); + if ($267) { + $$4492 = $$2490$lcssa;$$4520 = $266;$$8 = $$5486$lcssa; + break; + } else { + $$2518634 = $266;$$2534633 = $265; + } + } + } + } else { + $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa; + } + } + $268 = ((($$4492)) + 4|0); + $269 = ($$4502$lcssa>>>0)>($268>>>0); + $spec$select547 = $269 ? $268 : $$4502$lcssa; + $$5521 = $$4520;$$8506 = $spec$select547;$$9 = $$8; + } else { + $$5521 = $$1517;$$8506 = $$4502$lcssa;$$9 = $$3484$lcssa; + } + $270 = (0 - ($$5521))|0; + $271 = ($$8506>>>0)>($$9>>>0); + L109: do { + if ($271) { + $$9507625 = $$8506; + while(1) { + $273 = ((($$9507625)) + -4|0); + $274 = HEAP32[$273>>2]|0; + $275 = ($274|0)==(0); + if (!($275)) { + $$9507$lcssa = $$9507625;$$lcssa583 = 1; + break L109; + } + $272 = ($273>>>0)>($$9>>>0); + if ($272) { + $$9507625 = $273; + } else { + $$9507$lcssa = $273;$$lcssa583 = 0; + break; + } + } + } else { + $$9507$lcssa = $$8506;$$lcssa583 = 0; + } + } while(0); + do { + if ($211) { + $not$ = $212 ^ 1; + $276 = $not$&1; + $spec$select548 = (($spec$select539) + ($276))|0; + $277 = ($spec$select548|0)>($$5521|0); + $278 = ($$5521|0)>(-5); + $or$cond6 = $277 & $278; + if ($or$cond6) { + $279 = (($5) + -1)|0; + $$neg571 = (($spec$select548) + -1)|0; + $280 = (($$neg571) - ($$5521))|0; + $$0479 = $279;$$2476 = $280; + } else { + $281 = (($5) + -2)|0; + $282 = (($spec$select548) + -1)|0; + $$0479 = $281;$$2476 = $282; + } + $283 = $4 & 8; + $284 = ($283|0)==(0); + if ($284) { + if ($$lcssa583) { + $285 = ((($$9507$lcssa)) + -4|0); + $286 = HEAP32[$285>>2]|0; + $287 = ($286|0)==(0); + if ($287) { + $$2531 = 9; + } else { + $288 = (($286>>>0) % 10)&-1; + $289 = ($288|0)==(0); + if ($289) { + $$1530621 = 0;$$3535620 = 10; + while(1) { + $290 = ($$3535620*10)|0; + $291 = (($$1530621) + 1)|0; + $292 = (($286>>>0) % ($290>>>0))&-1; + $293 = ($292|0)==(0); + if ($293) { + $$1530621 = $291;$$3535620 = $290; + } else { + $$2531 = $291; + break; + } + } + } else { + $$2531 = 0; + } + } + } else { + $$2531 = 9; + } + $294 = $$0479 | 32; + $295 = ($294|0)==(102); + $296 = $$9507$lcssa; + $297 = (($296) - ($198))|0; + $298 = $297 >> 2; + $299 = ($298*9)|0; + $300 = (($299) + -9)|0; + if ($295) { + $301 = (($300) - ($$2531))|0; + $302 = ($301|0)>(0); + $spec$select549 = $302 ? $301 : 0; + $303 = ($$2476|0)<($spec$select549|0); + $spec$select562 = $303 ? $$2476 : $spec$select549; + $$1480 = $$0479;$$3477 = $spec$select562; + break; + } else { + $304 = (($300) + ($$5521))|0; + $305 = (($304) - ($$2531))|0; + $306 = ($305|0)>(0); + $spec$select551 = $306 ? $305 : 0; + $307 = ($$2476|0)<($spec$select551|0); + $spec$select563 = $307 ? $$2476 : $spec$select551; + $$1480 = $$0479;$$3477 = $spec$select563; + break; + } + } else { + $$1480 = $$0479;$$3477 = $$2476; + } + } else { + $$1480 = $5;$$3477 = $spec$select539; + } + } while(0); + $308 = ($$3477|0)!=(0); + $309 = $4 >>> 3; + $$lobit = $309 & 1; + $310 = $308 ? 1 : $$lobit; + $311 = $$1480 | 32; + $312 = ($311|0)==(102); + if ($312) { + $313 = ($$5521|0)>(0); + $314 = $313 ? $$5521 : 0; + $$2515 = 0;$$pn = $314; + } else { + $315 = ($$5521|0)<(0); + $316 = $315 ? $270 : $$5521; + $317 = ($316|0)<(0); + $318 = $317 << 31 >> 31; + $319 = (_fmt_u($316,$318,$11)|0); + $320 = $11; + $321 = $319; + $322 = (($320) - ($321))|0; + $323 = ($322|0)<(2); + if ($323) { + $$1514614 = $319; + while(1) { + $324 = ((($$1514614)) + -1|0); + HEAP8[$324>>0] = 48; + $325 = $324; + $326 = (($320) - ($325))|0; + $327 = ($326|0)<(2); + if ($327) { + $$1514614 = $324; + } else { + $$1514$lcssa = $324; + break; + } + } + } else { + $$1514$lcssa = $319; + } + $328 = $$5521 >> 31; + $329 = $328 & 2; + $330 = (($329) + 43)|0; + $331 = $330&255; + $332 = ((($$1514$lcssa)) + -1|0); + HEAP8[$332>>0] = $331; + $333 = $$1480&255; + $334 = ((($$1514$lcssa)) + -2|0); + HEAP8[$334>>0] = $333; + $335 = $334; + $336 = (($320) - ($335))|0; + $$2515 = $334;$$pn = $336; + } + $337 = (($$0522) + 1)|0; + $338 = (($337) + ($$3477))|0; + $$1528 = (($338) + ($310))|0; + $339 = (($$1528) + ($$pn))|0; + _pad_683($0,32,$2,$339,$4); + _out($0,$$0523,$$0522); + $340 = $4 ^ 65536; + _pad_683($0,48,$2,$339,$340); + if ($312) { + $341 = ($$9>>>0)>($$0498>>>0); + $spec$select554 = $341 ? $$0498 : $$9; + $342 = ((($8)) + 9|0); + $343 = $342; + $344 = ((($8)) + 8|0); + $$5493603 = $spec$select554; + while(1) { + $345 = HEAP32[$$5493603>>2]|0; + $346 = (_fmt_u($345,0,$342)|0); + $347 = ($$5493603|0)==($spec$select554|0); + if ($347) { + $353 = ($346|0)==($342|0); + if ($353) { + HEAP8[$344>>0] = 48; + $$1465 = $344; + } else { + $$1465 = $346; + } + } else { + $348 = ($346>>>0)>($8>>>0); + if ($348) { + $349 = $346; + $350 = (($349) - ($9))|0; + _memset(($8|0),48,($350|0))|0; + $$0464599 = $346; + while(1) { + $351 = ((($$0464599)) + -1|0); + $352 = ($351>>>0)>($8>>>0); + if ($352) { + $$0464599 = $351; + } else { + $$1465 = $351; + break; + } + } + } else { + $$1465 = $346; + } + } + $354 = $$1465; + $355 = (($343) - ($354))|0; + _out($0,$$1465,$355); + $356 = ((($$5493603)) + 4|0); + $357 = ($356>>>0)>($$0498>>>0); + if ($357) { + break; + } else { + $$5493603 = $356; + } + } + $$not = $308 ^ 1; + $358 = $4 & 8; + $359 = ($358|0)==(0); + $or$cond556 = $359 & $$not; + if (!($or$cond556)) { + _out($0,18445,1); + } + $360 = ($356>>>0)<($$9507$lcssa>>>0); + $361 = ($$3477|0)>(0); + $362 = $360 & $361; + if ($362) { + $$4478594 = $$3477;$$6494593 = $356; + while(1) { + $363 = HEAP32[$$6494593>>2]|0; + $364 = (_fmt_u($363,0,$342)|0); + $365 = ($364>>>0)>($8>>>0); + if ($365) { + $366 = $364; + $367 = (($366) - ($9))|0; + _memset(($8|0),48,($367|0))|0; + $$0463588 = $364; + while(1) { + $368 = ((($$0463588)) + -1|0); + $369 = ($368>>>0)>($8>>>0); + if ($369) { + $$0463588 = $368; + } else { + $$0463$lcssa = $368; + break; + } + } + } else { + $$0463$lcssa = $364; + } + $370 = ($$4478594|0)<(9); + $371 = $370 ? $$4478594 : 9; + _out($0,$$0463$lcssa,$371); + $372 = ((($$6494593)) + 4|0); + $373 = (($$4478594) + -9)|0; + $374 = ($372>>>0)<($$9507$lcssa>>>0); + $375 = ($$4478594|0)>(9); + $376 = $374 & $375; + if ($376) { + $$4478594 = $373;$$6494593 = $372; + } else { + $$4478$lcssa = $373; + break; + } + } + } else { + $$4478$lcssa = $$3477; + } + $377 = (($$4478$lcssa) + 9)|0; + _pad_683($0,48,$377,9,0); + } else { + $378 = ((($$9)) + 4|0); + $spec$select557 = $$lcssa583 ? $$9507$lcssa : $378; + $379 = ($$9>>>0)<($spec$select557>>>0); + $380 = ($$3477|0)>(-1); + $381 = $379 & $380; + if ($381) { + $382 = ((($8)) + 9|0); + $383 = $4 & 8; + $384 = ($383|0)==(0); + $385 = $382; + $386 = (0 - ($9))|0; + $387 = ((($8)) + 8|0); + $$5609 = $$3477;$$7495608 = $$9; + while(1) { + $388 = HEAP32[$$7495608>>2]|0; + $389 = (_fmt_u($388,0,$382)|0); + $390 = ($389|0)==($382|0); + if ($390) { + HEAP8[$387>>0] = 48; + $$0 = $387; + } else { + $$0 = $389; + } + $391 = ($$7495608|0)==($$9|0); + do { + if ($391) { + $395 = ((($$0)) + 1|0); + _out($0,$$0,1); + $396 = ($$5609|0)<(1); + $or$cond559 = $384 & $396; + if ($or$cond559) { + $$2 = $395; + break; + } + _out($0,18445,1); + $$2 = $395; + } else { + $392 = ($$0>>>0)>($8>>>0); + if (!($392)) { + $$2 = $$0; + break; + } + $scevgep707 = (($$0) + ($386)|0); + $scevgep707708 = $scevgep707; + _memset(($8|0),48,($scevgep707708|0))|0; + $$1604 = $$0; + while(1) { + $393 = ((($$1604)) + -1|0); + $394 = ($393>>>0)>($8>>>0); + if ($394) { + $$1604 = $393; + } else { + $$2 = $393; + break; + } + } + } + } while(0); + $397 = $$2; + $398 = (($385) - ($397))|0; + $399 = ($$5609|0)>($398|0); + $400 = $399 ? $398 : $$5609; + _out($0,$$2,$400); + $401 = (($$5609) - ($398))|0; + $402 = ((($$7495608)) + 4|0); + $403 = ($402>>>0)<($spec$select557>>>0); + $404 = ($401|0)>(-1); + $405 = $403 & $404; + if ($405) { + $$5609 = $401;$$7495608 = $402; + } else { + $$5$lcssa = $401; + break; + } + } + } else { + $$5$lcssa = $$3477; + } + $406 = (($$5$lcssa) + 18)|0; + _pad_683($0,48,$406,18,0); + $407 = $11; + $408 = $$2515; + $409 = (($407) - ($408))|0; + _out($0,$$2515,$409); + } + $410 = $4 ^ 8192; + _pad_683($0,32,$2,$339,$410); + $$sink755 = $339; + } + } while(0); + $411 = ($$sink755|0)<($2|0); + $$560 = $411 ? $2 : $$sink755; + STACKTOP = sp;return ($$560|0); +} +function ___DOUBLE_BITS_684($0) { + $0 = +$0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0; + $2 = HEAP32[tempDoublePtr+4>>2]|0; + tempRet0 = ($2); + return ($1|0); +} +function _frexpl($0,$1) { + $0 = +$0; + $1 = $1|0; + var $2 = 0.0, label = 0, sp = 0; + sp = STACKTOP; + $2 = (+_frexp($0,$1)); + return (+$2); +} +function _frexp($0,$1) { + $0 = +$0; + $1 = $1|0; + 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; + var sp = 0; + sp = STACKTOP; + HEAPF64[tempDoublePtr>>3] = $0;$2 = HEAP32[tempDoublePtr>>2]|0; + $3 = HEAP32[tempDoublePtr+4>>2]|0; + $4 = (_bitshift64Lshr(($2|0),($3|0),52)|0); + $5 = tempRet0; + $6 = $4&65535; + $trunc$clear = $6 & 2047; + switch ($trunc$clear<<16>>16) { + case 0: { + $7 = $0 != 0.0; + if ($7) { + $8 = $0 * 1.8446744073709552E+19; + $9 = (+_frexp($8,$1)); + $10 = HEAP32[$1>>2]|0; + $11 = (($10) + -64)|0; + $$016 = $9;$storemerge = $11; + } else { + $$016 = $0;$storemerge = 0; + } + HEAP32[$1>>2] = $storemerge; + $$0 = $$016; + break; + } + case 2047: { + $$0 = $0; + break; + } + default: { + $12 = $4 & 2047; + $13 = (($12) + -1022)|0; + HEAP32[$1>>2] = $13; + $14 = $3 & -2146435073; + $15 = $14 | 1071644672; + HEAP32[tempDoublePtr>>2] = $2;HEAP32[tempDoublePtr+4>>2] = $15;$16 = +HEAPF64[tempDoublePtr>>3]; + $$0 = $16; + } + } + return (+$$0); +} +function _wcrtomb($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + sp = STACKTOP; + $3 = ($0|0)==(0|0); + do { + if ($3) { + $$0 = 1; + } else { + $4 = ($1>>>0)<(128); + if ($4) { + $5 = $1&255; + HEAP8[$0>>0] = $5; + $$0 = 1; + break; + } + $6 = (___pthread_self_430()|0); + $7 = ((($6)) + 188|0); + $8 = HEAP32[$7>>2]|0; + $9 = HEAP32[$8>>2]|0; + $10 = ($9|0)==(0|0); + if ($10) { + $11 = $1 & -128; + $12 = ($11|0)==(57216); + if ($12) { + $14 = $1&255; + HEAP8[$0>>0] = $14; + $$0 = 1; + break; + } else { + $13 = (___errno_location()|0); + HEAP32[$13>>2] = 84; + $$0 = -1; + break; + } + } + $15 = ($1>>>0)<(2048); + if ($15) { + $16 = $1 >>> 6; + $17 = $16 | 192; + $18 = $17&255; + $19 = ((($0)) + 1|0); + HEAP8[$0>>0] = $18; + $20 = $1 & 63; + $21 = $20 | 128; + $22 = $21&255; + HEAP8[$19>>0] = $22; + $$0 = 2; + break; + } + $23 = ($1>>>0)<(55296); + $24 = $1 & -8192; + $25 = ($24|0)==(57344); + $or$cond = $23 | $25; + if ($or$cond) { + $26 = $1 >>> 12; + $27 = $26 | 224; + $28 = $27&255; + $29 = ((($0)) + 1|0); + HEAP8[$0>>0] = $28; + $30 = $1 >>> 6; + $31 = $30 & 63; + $32 = $31 | 128; + $33 = $32&255; + $34 = ((($0)) + 2|0); + HEAP8[$29>>0] = $33; + $35 = $1 & 63; + $36 = $35 | 128; + $37 = $36&255; + HEAP8[$34>>0] = $37; + $$0 = 3; + break; + } + $38 = (($1) + -65536)|0; + $39 = ($38>>>0)<(1048576); + if ($39) { + $40 = $1 >>> 18; + $41 = $40 | 240; + $42 = $41&255; + $43 = ((($0)) + 1|0); + HEAP8[$0>>0] = $42; + $44 = $1 >>> 12; + $45 = $44 & 63; + $46 = $45 | 128; + $47 = $46&255; + $48 = ((($0)) + 2|0); + HEAP8[$43>>0] = $47; + $49 = $1 >>> 6; + $50 = $49 & 63; + $51 = $50 | 128; + $52 = $51&255; + $53 = ((($0)) + 3|0); + HEAP8[$48>>0] = $52; + $54 = $1 & 63; + $55 = $54 | 128; + $56 = $55&255; + HEAP8[$53>>0] = $56; + $$0 = 4; + break; + } else { + $57 = (___errno_location()|0); + HEAP32[$57>>2] = 84; + $$0 = -1; + break; + } + } + } while(0); + return ($$0|0); +} +function ___pthread_self_430() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (_pthread_self()|0); + return ($0|0); +} +function _pthread_self() { + var label = 0, sp = 0; + sp = STACKTOP; + return (3196|0); +} +function ___pthread_self_105() { + var $0 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = (_pthread_self()|0); + return ($0|0); +} +function ___strerror_l($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $$016 = 0; + while(1) { + $2 = (18447 + ($$016)|0); + $3 = HEAP8[$2>>0]|0; + $4 = $3&255; + $5 = ($4|0)==($0|0); + if ($5) { + label = 4; + break; + } + $6 = (($$016) + 1)|0; + $7 = ($6|0)==(87); + if ($7) { + $$115$ph = 87; + label = 5; + break; + } else { + $$016 = $6; + } + } + if ((label|0) == 4) { + $8 = ($$016|0)==(0); + if ($8) { + $$012$lcssa = 18535; + } else { + $$115$ph = $$016; + label = 5; + } + } + if ((label|0) == 5) { + $$01214 = 18535;$$115 = $$115$ph; + while(1) { + $$113 = $$01214; + while(1) { + $9 = HEAP8[$$113>>0]|0; + $10 = ($9<<24>>24)==(0); + $11 = ((($$113)) + 1|0); + if ($10) { + break; + } else { + $$113 = $11; + } + } + $12 = (($$115) + -1)|0; + $13 = ($12|0)==(0); + if ($13) { + $$012$lcssa = $11; + break; + } else { + $$01214 = $11;$$115 = $12; + } + } + } + $14 = ((($1)) + 20|0); + $15 = HEAP32[$14>>2]|0; + $16 = (___lctrans($$012$lcssa,$15)|0); + return ($16|0); +} +function ___lctrans($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + $2 = (___lctrans_impl($0,$1)|0); + return ($2|0); +} +function ___lctrans_impl($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $$0 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + $2 = ($1|0)==(0|0); + if ($2) { + $$0 = 0; + } else { + $3 = HEAP32[$1>>2]|0; + $4 = ((($1)) + 4|0); + $5 = HEAP32[$4>>2]|0; + $6 = (___mo_lookup($3,$5,$0)|0); + $$0 = $6; + } + $7 = ($$0|0)==(0|0); + $8 = $7 ? $0 : $$0; + return ($8|0); +} +function ___mo_lookup($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + 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; + 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; + sp = STACKTOP; + $3 = HEAP32[$0>>2]|0; + $4 = (($3) + 1794895138)|0; + $5 = ((($0)) + 8|0); + $6 = HEAP32[$5>>2]|0; + $7 = (_swapc($6,$4)|0); + $8 = ((($0)) + 12|0); + $9 = HEAP32[$8>>2]|0; + $10 = (_swapc($9,$4)|0); + $11 = ((($0)) + 16|0); + $12 = HEAP32[$11>>2]|0; + $13 = (_swapc($12,$4)|0); + $14 = $1 >>> 2; + $15 = ($7>>>0)<($14>>>0); + L1: do { + if ($15) { + $16 = $7 << 2; + $17 = (($1) - ($16))|0; + $18 = ($10>>>0)<($17>>>0); + $19 = ($13>>>0)<($17>>>0); + $or$cond = $18 & $19; + if ($or$cond) { + $20 = $13 | $10; + $21 = $20 & 3; + $22 = ($21|0)==(0); + if ($22) { + $23 = $10 >>> 2; + $24 = $13 >>> 2; + $$090 = 0;$$094 = $7; + while(1) { + $25 = $$094 >>> 1; + $26 = (($$090) + ($25))|0; + $27 = $26 << 1; + $28 = (($27) + ($23))|0; + $29 = (($0) + ($28<<2)|0); + $30 = HEAP32[$29>>2]|0; + $31 = (_swapc($30,$4)|0); + $32 = (($28) + 1)|0; + $33 = (($0) + ($32<<2)|0); + $34 = HEAP32[$33>>2]|0; + $35 = (_swapc($34,$4)|0); + $36 = ($35>>>0)<($1>>>0); + $37 = (($1) - ($35))|0; + $38 = ($31>>>0)<($37>>>0); + $or$cond102 = $36 & $38; + if (!($or$cond102)) { + $$4 = 0; + break L1; + } + $39 = (($35) + ($31))|0; + $40 = (($0) + ($39)|0); + $41 = HEAP8[$40>>0]|0; + $42 = ($41<<24>>24)==(0); + if (!($42)) { + $$4 = 0; + break L1; + } + $43 = (($0) + ($35)|0); + $44 = (_strcmp($2,$43)|0); + $45 = ($44|0)==(0); + if ($45) { + break; + } + $62 = ($$094|0)==(1); + $63 = ($44|0)<(0); + if ($62) { + $$4 = 0; + break L1; + } + $$191 = $63 ? $$090 : $26; + $64 = (($$094) - ($25))|0; + $$195 = $63 ? $25 : $64; + $$090 = $$191;$$094 = $$195; + } + $46 = (($27) + ($24))|0; + $47 = (($0) + ($46<<2)|0); + $48 = HEAP32[$47>>2]|0; + $49 = (_swapc($48,$4)|0); + $50 = (($46) + 1)|0; + $51 = (($0) + ($50<<2)|0); + $52 = HEAP32[$51>>2]|0; + $53 = (_swapc($52,$4)|0); + $54 = ($53>>>0)<($1>>>0); + $55 = (($1) - ($53))|0; + $56 = ($49>>>0)<($55>>>0); + $or$cond104 = $54 & $56; + if ($or$cond104) { + $57 = (($0) + ($53)|0); + $58 = (($53) + ($49))|0; + $59 = (($0) + ($58)|0); + $60 = HEAP8[$59>>0]|0; + $61 = ($60<<24>>24)==(0); + $spec$select = $61 ? $57 : 0; + $$4 = $spec$select; + } else { + $$4 = 0; + } + } else { + $$4 = 0; + } + } else { + $$4 = 0; + } + } else { + $$4 = 0; + } + } while(0); + return ($$4|0); +} +function _swapc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $spec$select = 0, label = 0, sp = 0; + sp = STACKTOP; + $2 = ($1|0)==(0); + $3 = (_llvm_bswap_i32(($0|0))|0); + $spec$select = $2 ? $0 : $3; + return ($spec$select|0); +} +function ___fwritex($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + var $9 = 0, $or$cond = 0, label = 0, sp = 0; + sp = STACKTOP; + $3 = ((($2)) + 16|0); + $4 = HEAP32[$3>>2]|0; + $5 = ($4|0)==(0|0); + if ($5) { + $7 = (___towrite($2)|0); + $8 = ($7|0)==(0); + if ($8) { + $$pre = HEAP32[$3>>2]|0; + $12 = $$pre; + label = 5; + } else { + $$1 = 0; + } + } else { + $6 = $4; + $12 = $6; + label = 5; + } + L5: do { + if ((label|0) == 5) { + $9 = ((($2)) + 20|0); + $10 = HEAP32[$9>>2]|0; + $11 = (($12) - ($10))|0; + $13 = ($11>>>0)<($1>>>0); + $14 = $10; + if ($13) { + $15 = ((($2)) + 36|0); + $16 = HEAP32[$15>>2]|0; + $17 = (FUNCTION_TABLE_iiii[$16 & 255]($2,$0,$1)|0); + $$1 = $17; + break; + } + $18 = ((($2)) + 75|0); + $19 = HEAP8[$18>>0]|0; + $20 = ($19<<24>>24)<(0); + $21 = ($1|0)==(0); + $or$cond = $20 | $21; + L10: do { + if ($or$cond) { + $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14; + } else { + $$03846 = $1; + while(1) { + $23 = (($$03846) + -1)|0; + $24 = (($0) + ($23)|0); + $25 = HEAP8[$24>>0]|0; + $26 = ($25<<24>>24)==(10); + if ($26) { + break; + } + $22 = ($23|0)==(0); + if ($22) { + $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14; + break L10; + } else { + $$03846 = $23; + } + } + $27 = ((($2)) + 36|0); + $28 = HEAP32[$27>>2]|0; + $29 = (FUNCTION_TABLE_iiii[$28 & 255]($2,$0,$$03846)|0); + $30 = ($29>>>0)<($$03846>>>0); + if ($30) { + $$1 = $29; + break L5; + } + $31 = (($0) + ($$03846)|0); + $$042 = (($1) - ($$03846))|0; + $$pre48 = HEAP32[$9>>2]|0; + $$139 = $$03846;$$141 = $31;$$143 = $$042;$32 = $$pre48; + } + } while(0); + (_memcpy(($32|0),($$141|0),($$143|0))|0); + $33 = HEAP32[$9>>2]|0; + $34 = (($33) + ($$143)|0); + HEAP32[$9>>2] = $34; + $35 = (($$139) + ($$143))|0; + $$1 = $35; + } + } while(0); + return ($$1|0); +} +function ___towrite($0) { + $0 = $0|0; + 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; + var $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ((($0)) + 74|0); + $2 = HEAP8[$1>>0]|0; + $3 = $2 << 24 >> 24; + $4 = (($3) + 255)|0; + $5 = $4 | $3; + $6 = $5&255; + HEAP8[$1>>0] = $6; + $7 = HEAP32[$0>>2]|0; + $8 = $7 & 8; + $9 = ($8|0)==(0); + if ($9) { + $11 = ((($0)) + 8|0); + HEAP32[$11>>2] = 0; + $12 = ((($0)) + 4|0); + HEAP32[$12>>2] = 0; + $13 = ((($0)) + 44|0); + $14 = HEAP32[$13>>2]|0; + $15 = ((($0)) + 28|0); + HEAP32[$15>>2] = $14; + $16 = ((($0)) + 20|0); + HEAP32[$16>>2] = $14; + $17 = $14; + $18 = ((($0)) + 48|0); + $19 = HEAP32[$18>>2]|0; + $20 = (($17) + ($19)|0); + $21 = ((($0)) + 16|0); + HEAP32[$21>>2] = $20; + $$0 = 0; + } else { + $10 = $7 | 32; + HEAP32[$0>>2] = $10; + $$0 = -1; + } + return ($$0|0); +} +function _strlen($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + $1 = $0; + $2 = $1 & 3; + $3 = ($2|0)==(0); + L1: do { + if ($3) { + $$015$lcssa = $0; + label = 5; + } else { + $$01518 = $0;$22 = $1; + while(1) { + $4 = HEAP8[$$01518>>0]|0; + $5 = ($4<<24>>24)==(0); + if ($5) { + $$pn = $22; + break L1; + } + $6 = ((($$01518)) + 1|0); + $7 = $6; + $8 = $7 & 3; + $9 = ($8|0)==(0); + if ($9) { + $$015$lcssa = $6; + label = 5; + break; + } else { + $$01518 = $6;$22 = $7; + } + } + } + } while(0); + if ((label|0) == 5) { + $$0 = $$015$lcssa; + while(1) { + $10 = HEAP32[$$0>>2]|0; + $11 = (($10) + -16843009)|0; + $12 = $10 & -2139062144; + $13 = $12 ^ -2139062144; + $14 = $13 & $11; + $15 = ($14|0)==(0); + $16 = ((($$0)) + 4|0); + if ($15) { + $$0 = $16; + } else { + break; + } + } + $17 = $10&255; + $18 = ($17<<24>>24)==(0); + if ($18) { + $$1$lcssa = $$0; + } else { + $$pn29 = $$0; + while(1) { + $19 = ((($$pn29)) + 1|0); + $$pre = HEAP8[$19>>0]|0; + $20 = ($$pre<<24>>24)==(0); + if ($20) { + $$1$lcssa = $19; + break; + } else { + $$pn29 = $19; + } + } + } + $21 = $$1$lcssa; + $$pn = $21; + } + $$014 = (($$pn) - ($1))|0; + return ($$014|0); +} +function ___strdup($0) { + $0 = $0|0; + var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = (_strlen($0)|0); + $2 = (($1) + 1)|0; + $3 = (_malloc($2)|0); + $4 = ($3|0)==(0|0); + if ($4) { + $$0 = 0; + } else { + $5 = (_memcpy(($3|0),($0|0),($2|0))|0); + $$0 = $5; + } + return ($$0|0); +} +function ___overflow($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $2 = sp; + $3 = $1&255; + HEAP8[$2>>0] = $3; + $4 = ((($0)) + 16|0); + $5 = HEAP32[$4>>2]|0; + $6 = ($5|0)==(0|0); + if ($6) { + $7 = (___towrite($0)|0); + $8 = ($7|0)==(0); + if ($8) { + $$pre = HEAP32[$4>>2]|0; + $12 = $$pre; + label = 4; + } else { + $$0 = -1; + } + } else { + $12 = $5; + label = 4; + } + do { + if ((label|0) == 4) { + $9 = ((($0)) + 20|0); + $10 = HEAP32[$9>>2]|0; + $11 = ($10>>>0)<($12>>>0); + if ($11) { + $13 = $1 & 255; + $14 = ((($0)) + 75|0); + $15 = HEAP8[$14>>0]|0; + $16 = $15 << 24 >> 24; + $17 = ($13|0)==($16|0); + if (!($17)) { + $18 = ((($10)) + 1|0); + HEAP32[$9>>2] = $18; + HEAP8[$10>>0] = $3; + $$0 = $13; + break; + } + } + $19 = ((($0)) + 36|0); + $20 = HEAP32[$19>>2]|0; + $21 = (FUNCTION_TABLE_iiii[$20 & 255]($0,$2,1)|0); + $22 = ($21|0)==(1); + if ($22) { + $23 = HEAP8[$2>>0]|0; + $24 = $23&255; + $$0 = $24; + } else { + $$0 = -1; + } + } + } while(0); + STACKTOP = sp;return ($$0|0); +} +function ___ofl_lock() { + var label = 0, sp = 0; + sp = STACKTOP; + ___lock((21856|0)); + return (21864|0); +} +function ___ofl_unlock() { + var label = 0, sp = 0; + sp = STACKTOP; + ___unlock((21856|0)); + return; +} +function _fflush($0) { + $0 = $0|0; + 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; + 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; + sp = STACKTOP; + $1 = ($0|0)==(0|0); + do { + if ($1) { + $8 = HEAP32[798]|0; + $9 = ($8|0)==(0|0); + if ($9) { + $29 = 0; + } else { + $10 = HEAP32[798]|0; + $11 = (_fflush($10)|0); + $29 = $11; + } + $12 = (___ofl_lock()|0); + $$02325 = HEAP32[$12>>2]|0; + $13 = ($$02325|0)==(0|0); + if ($13) { + $$024$lcssa = $29; + } else { + $$02327 = $$02325;$$02426 = $29; + while(1) { + $14 = ((($$02327)) + 76|0); + $15 = HEAP32[$14>>2]|0; + $16 = ($15|0)>(-1); + if ($16) { + $17 = (___lockfile($$02327)|0); + $26 = $17; + } else { + $26 = 0; + } + $18 = ((($$02327)) + 20|0); + $19 = HEAP32[$18>>2]|0; + $20 = ((($$02327)) + 28|0); + $21 = HEAP32[$20>>2]|0; + $22 = ($19>>>0)>($21>>>0); + if ($22) { + $23 = (___fflush_unlocked($$02327)|0); + $24 = $23 | $$02426; + $$1 = $24; + } else { + $$1 = $$02426; + } + $25 = ($26|0)==(0); + if (!($25)) { + ___unlockfile($$02327); + } + $27 = ((($$02327)) + 56|0); + $$023 = HEAP32[$27>>2]|0; + $28 = ($$023|0)==(0|0); + if ($28) { + $$024$lcssa = $$1; + break; + } else { + $$02327 = $$023;$$02426 = $$1; + } + } + } + ___ofl_unlock(); + $$0 = $$024$lcssa; + } else { + $2 = ((($0)) + 76|0); + $3 = HEAP32[$2>>2]|0; + $4 = ($3|0)>(-1); + if (!($4)) { + $5 = (___fflush_unlocked($0)|0); + $$0 = $5; + break; + } + $6 = (___lockfile($0)|0); + $phitmp = ($6|0)==(0); + $7 = (___fflush_unlocked($0)|0); + if ($phitmp) { + $$0 = $7; + } else { + ___unlockfile($0); + $$0 = $7; + } + } + } while(0); + return ($$0|0); +} +function ___fflush_unlocked($0) { + $0 = $0|0; + 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; + var $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ((($0)) + 20|0); + $2 = HEAP32[$1>>2]|0; + $3 = ((($0)) + 28|0); + $4 = HEAP32[$3>>2]|0; + $5 = ($2>>>0)>($4>>>0); + if ($5) { + $6 = ((($0)) + 36|0); + $7 = HEAP32[$6>>2]|0; + (FUNCTION_TABLE_iiii[$7 & 255]($0,0,0)|0); + $8 = HEAP32[$1>>2]|0; + $9 = ($8|0)==(0|0); + if ($9) { + $$0 = -1; + } else { + label = 3; + } + } else { + label = 3; + } + if ((label|0) == 3) { + $10 = ((($0)) + 4|0); + $11 = HEAP32[$10>>2]|0; + $12 = ((($0)) + 8|0); + $13 = HEAP32[$12>>2]|0; + $14 = ($11>>>0)<($13>>>0); + if ($14) { + $15 = $11; + $16 = $13; + $17 = (($15) - ($16))|0; + $18 = ((($0)) + 40|0); + $19 = HEAP32[$18>>2]|0; + (FUNCTION_TABLE_iiii[$19 & 255]($0,$17,1)|0); + } + $20 = ((($0)) + 16|0); + HEAP32[$20>>2] = 0; + HEAP32[$3>>2] = 0; + HEAP32[$1>>2] = 0; + HEAP32[$12>>2] = 0; + HEAP32[$10>>2] = 0; + $$0 = 0; + } + return ($$0|0); +} +function _fputc($0,$1) { + $0 = $0|0; + $1 = $1|0; + 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; + 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; + sp = STACKTOP; + $2 = ((($1)) + 76|0); + $3 = HEAP32[$2>>2]|0; + $4 = ($3|0)<(0); + if ($4) { + label = 3; + } else { + $5 = (___lockfile($1)|0); + $6 = ($5|0)==(0); + if ($6) { + label = 3; + } else { + $20 = $0&255; + $21 = $0 & 255; + $22 = ((($1)) + 75|0); + $23 = HEAP8[$22>>0]|0; + $24 = $23 << 24 >> 24; + $25 = ($21|0)==($24|0); + if ($25) { + label = 10; + } else { + $26 = ((($1)) + 20|0); + $27 = HEAP32[$26>>2]|0; + $28 = ((($1)) + 16|0); + $29 = HEAP32[$28>>2]|0; + $30 = ($27>>>0)<($29>>>0); + if ($30) { + $31 = ((($27)) + 1|0); + HEAP32[$26>>2] = $31; + HEAP8[$27>>0] = $20; + $33 = $21; + } else { + label = 10; + } + } + if ((label|0) == 10) { + $32 = (___overflow($1,$0)|0); + $33 = $32; + } + ___unlockfile($1); + $$0 = $33; + } + } + do { + if ((label|0) == 3) { + $7 = $0&255; + $8 = $0 & 255; + $9 = ((($1)) + 75|0); + $10 = HEAP8[$9>>0]|0; + $11 = $10 << 24 >> 24; + $12 = ($8|0)==($11|0); + if (!($12)) { + $13 = ((($1)) + 20|0); + $14 = HEAP32[$13>>2]|0; + $15 = ((($1)) + 16|0); + $16 = HEAP32[$15>>2]|0; + $17 = ($14>>>0)<($16>>>0); + if ($17) { + $18 = ((($14)) + 1|0); + HEAP32[$13>>2] = $18; + HEAP8[$14>>0] = $7; + $$0 = $8; + break; + } + } + $19 = (___overflow($1,$0)|0); + $$0 = $19; + } + } while(0); + return ($$0|0); +} +function __ZNSt3__217bad_function_callD2Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZNSt3__217bad_function_callD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZNSt3__217bad_function_callD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNKSt3__217bad_function_call4whatEv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return (20339|0); +} +function __ZNSt3__214__shared_countD2Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZNSt3__214__shared_countD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + _llvm_trap(); + // unreachable; +} +function __ZNSt3__219__shared_weak_countD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + _llvm_trap(); + // unreachable; +} +function __ZNKSt3__219__shared_weak_count13__get_deleterERKSt9type_info($0,$1) { + $0 = $0|0; + $1 = $1|0; + var label = 0, sp = 0; + sp = STACKTOP; + return (0|0); +} +function __ZNSt3__219__shared_weak_count14__release_weakEv($0) { + $0 = $0|0; + 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; + sp = STACKTOP; + $1 = ((($0)) + 8|0); + $2 = HEAP32[$1>>2]|0; + $3 = ($2|0)==(0); + if ($3) { + $4 = HEAP32[$0>>2]|0; + $5 = ((($4)) + 16|0); + $6 = HEAP32[$5>>2]|0; + FUNCTION_TABLE_vi[$6 & 511]($0); + } else { + $7 = HEAP32[$1>>2]|0; + $8 = (($7) + -1)|0; + HEAP32[$1>>2] = $8; + $9 = ($7|0)==(0); + if ($9) { + $10 = HEAP32[$0>>2]|0; + $11 = ((($10)) + 16|0); + $12 = HEAP32[$11>>2]|0; + FUNCTION_TABLE_vi[$12 & 511]($0); + } + } + return; +} +function __ZNSt3__25mutex4lockEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = (_pthread_mutex_lock(($0|0))|0); + $2 = ($1|0)==(0); + if ($2) { + return; + } else { + __ZNSt3__220__throw_system_errorEiPKc($1,20445); + // unreachable; + } +} +function __ZNSt3__25mutex6unlockEv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + (_pthread_mutex_unlock(($0|0))|0); + return; +} +function __Znwj($0) { + $0 = $0|0; + var $$lcssa = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $spec$store$select = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ($0|0)==(0); + $spec$store$select = $1 ? 1 : $0; + while(1) { + $2 = (_malloc($spec$store$select)|0); + $3 = ($2|0)==(0|0); + if (!($3)) { + $$lcssa = $2; + break; + } + $4 = (__ZSt15get_new_handlerv()|0); + $5 = ($4|0)==(0|0); + if ($5) { + $$lcssa = 0; + break; + } + FUNCTION_TABLE_v[$4 & 511](); + } + return ($$lcssa|0); +} +function __Znaj($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = (__Znwj($0)|0); + return ($1|0); +} +function __ZdlPv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + _free($0); + return; +} +function __ZdaPv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZdlPv($0); + return; +} +function __ZNSt3__218__libcpp_refstringC2EPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + $2 = (_strlen($1)|0); + $3 = (($2) + 13)|0; + $4 = (__Znwj($3)|0); + HEAP32[$4>>2] = $2; + $5 = ((($4)) + 4|0); + HEAP32[$5>>2] = $2; + $6 = ((($4)) + 8|0); + HEAP32[$6>>2] = 0; + $7 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($4)|0); + $8 = (($2) + 1)|0; + _memcpy(($7|0),($1|0),($8|0))|0; + HEAP32[$0>>2] = $7; + return; +} +function __ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ((($0)) + 12|0); + return ($1|0); +} +function __ZNSt11logic_errorC2EPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + HEAP32[$0>>2] = (3620); + $2 = ((($0)) + 4|0); + __ZNSt3__218__libcpp_refstringC2EPKc($2,$1); + return; +} +function __ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return 1; +} +function __ZNSt13runtime_errorC2EPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + HEAP32[$0>>2] = (3640); + $2 = ((($0)) + 4|0); + __ZNSt3__218__libcpp_refstringC2EPKc($2,$1); + return; +} +function __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + _abort(); + // unreachable; +} +function __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + _abort(); + // unreachable; +} +function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ((($0)) + 11|0); + $2 = HEAP8[$1>>0]|0; + $3 = ($2<<24>>24)<(0); + if ($3) { + $4 = HEAP32[$0>>2]|0; + __ZdlPv($4); + } + return; +} +function __ZNSt3__211char_traitsIcE7compareEPKcS3_j($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + $3 = ($2|0)==(0); + if ($3) { + $$0 = 0; + } else { + $4 = (_memcmp($0,$1,$2)|0); + $$0 = $4; + } + return ($$0|0); +} +function __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + var $or$cond = 0, $spec$select = 0, $spec$select31 = 0, label = 0, sp = 0; + sp = STACKTOP; + $5 = ((($0)) + 11|0); + $6 = HEAP8[$5>>0]|0; + $7 = ($6<<24>>24)<(0); + if ($7) { + $8 = ((($0)) + 4|0); + $9 = HEAP32[$8>>2]|0; + $12 = $9; + } else { + $10 = $6&255; + $12 = $10; + } + $11 = ($12>>>0)<($1>>>0); + $13 = ($4|0)==(-1); + $or$cond = $13 | $11; + if ($or$cond) { + __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0); + // unreachable; + } + $14 = (($12) - ($1))|0; + $15 = ($14>>>0)<($2>>>0); + $$sroa$speculated = $15 ? $14 : $2; + if ($7) { + $16 = HEAP32[$0>>2]|0; + $18 = $16; + } else { + $18 = $0; + } + $17 = (($18) + ($1)|0); + $19 = ($$sroa$speculated>>>0)>($4>>>0); + $$sroa$speculated19 = $19 ? $4 : $$sroa$speculated; + $20 = (__ZNSt3__211char_traitsIcE7compareEPKcS3_j($17,$3,$$sroa$speculated19)|0); + $21 = ($20|0)==(0); + if ($21) { + $22 = ($$sroa$speculated>>>0)<($4>>>0); + $spec$select = $19&1; + $spec$select31 = $22 ? -1 : $spec$select; + return ($spec$select31|0); + } else { + return ($20|0); + } + return (0)|0; +} +function __ZNSt3__220__throw_system_errorEiPKc($0,$1) { + $0 = $0|0; + $1 = $1|0; + var label = 0, sp = 0; + sp = STACKTOP; + _abort(); + // unreachable; +} +function __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + _abort(); + // unreachable; +} +function __ZL25default_terminate_handlerv() { + 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; + 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; + var $vararg_ptr2 = 0, $vararg_ptr6 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); + $vararg_buffer10 = sp + 32|0; + $vararg_buffer7 = sp + 24|0; + $vararg_buffer3 = sp + 16|0; + $vararg_buffer = sp; + $0 = sp + 36|0; + $1 = (___cxa_get_globals_fast()|0); + $2 = ($1|0)==(0|0); + if (!($2)) { + $3 = HEAP32[$1>>2]|0; + $4 = ($3|0)==(0|0); + if (!($4)) { + $5 = ((($3)) + 80|0); + $6 = ((($3)) + 48|0); + $7 = $6; + $8 = $7; + $9 = HEAP32[$8>>2]|0; + $10 = (($7) + 4)|0; + $11 = $10; + $12 = HEAP32[$11>>2]|0; + $13 = $9 & -256; + $14 = ($13|0)==(1126902528); + $15 = ($12|0)==(1129074247); + $16 = $14 & $15; + if (!($16)) { + HEAP32[$vararg_buffer7>>2] = 20599; + _abort_message(20549,$vararg_buffer7); + // unreachable; + } + $17 = ($9|0)==(1126902529); + $18 = ($12|0)==(1129074247); + $19 = $17 & $18; + if ($19) { + $20 = ((($3)) + 44|0); + $21 = HEAP32[$20>>2]|0; + $22 = $21; + } else { + $22 = $5; + } + HEAP32[$0>>2] = $22; + $23 = HEAP32[$3>>2]|0; + $24 = ((($23)) + 4|0); + $25 = HEAP32[$24>>2]|0; + $26 = HEAP32[322]|0; + $27 = ((($26)) + 16|0); + $28 = HEAP32[$27>>2]|0; + $29 = (FUNCTION_TABLE_iiii[$28 & 255](1288,$23,$0)|0); + if ($29) { + $30 = HEAP32[$0>>2]|0; + $31 = HEAP32[$30>>2]|0; + $32 = ((($31)) + 8|0); + $33 = HEAP32[$32>>2]|0; + $34 = (FUNCTION_TABLE_ii[$33 & 255]($30)|0); + HEAP32[$vararg_buffer>>2] = 20599; + $vararg_ptr1 = ((($vararg_buffer)) + 4|0); + HEAP32[$vararg_ptr1>>2] = $25; + $vararg_ptr2 = ((($vararg_buffer)) + 8|0); + HEAP32[$vararg_ptr2>>2] = $34; + _abort_message(20463,$vararg_buffer); + // unreachable; + } else { + HEAP32[$vararg_buffer3>>2] = 20599; + $vararg_ptr6 = ((($vararg_buffer3)) + 4|0); + HEAP32[$vararg_ptr6>>2] = $25; + _abort_message(20508,$vararg_buffer3); + // unreachable; + } + } + } + _abort_message(20587,$vararg_buffer10); + // unreachable; +} +function ___cxa_get_globals_fast() { + var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $vararg_buffer = sp; + $0 = (_pthread_once((21868|0),(256|0))|0); + $1 = ($0|0)==(0); + if ($1) { + $2 = HEAP32[5468]|0; + $3 = (_pthread_getspecific(($2|0))|0); + STACKTOP = sp;return ($3|0); + } else { + _abort_message(20738,$vararg_buffer); + // unreachable; + } + return (0)|0; +} +function _abort_message($0,$varargs) { + $0 = $0|0; + $varargs = $varargs|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $1 = sp; + HEAP32[$1>>2] = $varargs; + $2 = HEAP32[735]|0; + (_vfprintf($2,$0,$1)|0); + (_fputc(10,$2)|0); + _abort(); + // unreachable; +} +function __ZN10__cxxabiv116__shim_type_infoD2Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZN10__cxxabiv117__class_type_infoD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZN10__cxxabiv116__shim_type_infoD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNK10__cxxabiv116__shim_type_info5noop1Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZNK10__cxxabiv116__shim_type_info5noop2Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + var dest = 0, label = 0, sp = 0, stop = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $3 = sp; + $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0); + if ($4) { + $$2 = 1; + } else { + $5 = ($1|0)==(0|0); + if ($5) { + $$2 = 0; + } else { + $6 = (___dynamic_cast($1,1312,1296,0)|0); + $7 = ($6|0)==(0|0); + if ($7) { + $$2 = 0; + } else { + $8 = ((($3)) + 4|0); + dest=$8; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAP32[$3>>2] = $6; + $9 = ((($3)) + 8|0); + HEAP32[$9>>2] = $0; + $10 = ((($3)) + 12|0); + HEAP32[$10>>2] = -1; + $11 = ((($3)) + 48|0); + HEAP32[$11>>2] = 1; + $12 = HEAP32[$6>>2]|0; + $13 = ((($12)) + 28|0); + $14 = HEAP32[$13>>2]|0; + $15 = HEAP32[$2>>2]|0; + FUNCTION_TABLE_viiii[$14 & 255]($6,$3,$15,1); + $16 = ((($3)) + 24|0); + $17 = HEAP32[$16>>2]|0; + $18 = ($17|0)==(1); + if ($18) { + $19 = ((($3)) + 16|0); + $20 = HEAP32[$19>>2]|0; + HEAP32[$2>>2] = $20; + $$0 = 1; + } else { + $$0 = 0; + } + $$2 = $$0; + } + } + } + STACKTOP = sp;return ($$2|0); +} +function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + $5 = $5|0; + var $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + $6 = ((($1)) + 8|0); + $7 = HEAP32[$6>>2]|0; + $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0); + if ($8) { + __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4); + } + return; +} +function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $5 = ((($1)) + 8|0); + $6 = HEAP32[$5>>2]|0; + $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0); + do { + if ($7) { + __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3); + } else { + $8 = HEAP32[$1>>2]|0; + $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0); + if ($9) { + $10 = ((($1)) + 16|0); + $11 = HEAP32[$10>>2]|0; + $12 = ($11|0)==($2|0); + if (!($12)) { + $13 = ((($1)) + 20|0); + $14 = HEAP32[$13>>2]|0; + $15 = ($14|0)==($2|0); + if (!($15)) { + $18 = ((($1)) + 32|0); + HEAP32[$18>>2] = $3; + HEAP32[$13>>2] = $2; + $19 = ((($1)) + 40|0); + $20 = HEAP32[$19>>2]|0; + $21 = (($20) + 1)|0; + HEAP32[$19>>2] = $21; + $22 = ((($1)) + 36|0); + $23 = HEAP32[$22>>2]|0; + $24 = ($23|0)==(1); + if ($24) { + $25 = ((($1)) + 24|0); + $26 = HEAP32[$25>>2]|0; + $27 = ($26|0)==(2); + if ($27) { + $28 = ((($1)) + 54|0); + HEAP8[$28>>0] = 1; + } + } + $29 = ((($1)) + 44|0); + HEAP32[$29>>2] = 4; + break; + } + } + $16 = ($3|0)==(1); + if ($16) { + $17 = ((($1)) + 32|0); + HEAP32[$17>>2] = 1; + } + } + } + } while(0); + return; +} +function __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + var $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; + sp = STACKTOP; + $4 = ((($1)) + 8|0); + $5 = HEAP32[$4>>2]|0; + $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0); + if ($6) { + __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3); + } + return; +} +function __ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $3 = ($0|0)==($1|0); + return ($3|0); +} +function __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + sp = STACKTOP; + $4 = ((($1)) + 16|0); + $5 = HEAP32[$4>>2]|0; + $6 = ($5|0)==(0|0); + do { + if ($6) { + HEAP32[$4>>2] = $2; + $7 = ((($1)) + 24|0); + HEAP32[$7>>2] = $3; + $8 = ((($1)) + 36|0); + HEAP32[$8>>2] = 1; + } else { + $9 = ($5|0)==($2|0); + if (!($9)) { + $13 = ((($1)) + 36|0); + $14 = HEAP32[$13>>2]|0; + $15 = (($14) + 1)|0; + HEAP32[$13>>2] = $15; + $16 = ((($1)) + 24|0); + HEAP32[$16>>2] = 2; + $17 = ((($1)) + 54|0); + HEAP8[$17>>0] = 1; + break; + } + $10 = ((($1)) + 24|0); + $11 = HEAP32[$10>>2]|0; + $12 = ($11|0)==(2); + if ($12) { + HEAP32[$10>>2] = $3; + } + } + } while(0); + return; +} +function __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $4 = ((($1)) + 4|0); + $5 = HEAP32[$4>>2]|0; + $6 = ($5|0)==($2|0); + if ($6) { + $7 = ((($1)) + 28|0); + $8 = HEAP32[$7>>2]|0; + $9 = ($8|0)==(1); + if (!($9)) { + HEAP32[$7>>2] = $3; + } + } + return; +} +function __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + 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; + sp = STACKTOP; + $5 = ((($1)) + 53|0); + HEAP8[$5>>0] = 1; + $6 = ((($1)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = ($7|0)==($3|0); + do { + if ($8) { + $9 = ((($1)) + 52|0); + HEAP8[$9>>0] = 1; + $10 = ((($1)) + 16|0); + $11 = HEAP32[$10>>2]|0; + $12 = ($11|0)==(0|0); + if ($12) { + HEAP32[$10>>2] = $2; + $13 = ((($1)) + 24|0); + HEAP32[$13>>2] = $4; + $14 = ((($1)) + 36|0); + HEAP32[$14>>2] = 1; + $15 = ((($1)) + 48|0); + $16 = HEAP32[$15>>2]|0; + $17 = ($16|0)==(1); + $18 = ($4|0)==(1); + $or$cond = $18 & $17; + if (!($or$cond)) { + break; + } + $19 = ((($1)) + 54|0); + HEAP8[$19>>0] = 1; + break; + } + $20 = ($11|0)==($2|0); + if (!($20)) { + $30 = ((($1)) + 36|0); + $31 = HEAP32[$30>>2]|0; + $32 = (($31) + 1)|0; + HEAP32[$30>>2] = $32; + $33 = ((($1)) + 54|0); + HEAP8[$33>>0] = 1; + break; + } + $21 = ((($1)) + 24|0); + $22 = HEAP32[$21>>2]|0; + $23 = ($22|0)==(2); + if ($23) { + HEAP32[$21>>2] = $4; + $28 = $4; + } else { + $28 = $22; + } + $24 = ((($1)) + 48|0); + $25 = HEAP32[$24>>2]|0; + $26 = ($25|0)==(1); + $27 = ($28|0)==(1); + $or$cond22 = $26 & $27; + if ($or$cond22) { + $29 = ((($1)) + 54|0); + HEAP8[$29>>0] = 1; + } + } + } while(0); + return; +} +function ___dynamic_cast($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + 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; + 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; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $4 = sp; + $5 = HEAP32[$0>>2]|0; + $6 = ((($5)) + -8|0); + $7 = HEAP32[$6>>2]|0; + $8 = (($0) + ($7)|0); + $9 = ((($5)) + -4|0); + $10 = HEAP32[$9>>2]|0; + HEAP32[$4>>2] = $2; + $11 = ((($4)) + 4|0); + HEAP32[$11>>2] = $0; + $12 = ((($4)) + 8|0); + HEAP32[$12>>2] = $1; + $13 = ((($4)) + 12|0); + HEAP32[$13>>2] = $3; + $14 = ((($4)) + 16|0); + $15 = ((($4)) + 20|0); + $16 = ((($4)) + 24|0); + $17 = ((($4)) + 28|0); + $18 = ((($4)) + 32|0); + $19 = ((($4)) + 40|0); + 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; + $20 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($10,$2,0)|0); + L1: do { + if ($20) { + $21 = ((($4)) + 48|0); + HEAP32[$21>>2] = 1; + $22 = HEAP32[$10>>2]|0; + $23 = ((($22)) + 20|0); + $24 = HEAP32[$23>>2]|0; + FUNCTION_TABLE_viiiiii[$24 & 255]($10,$4,$8,$8,1,0); + $25 = HEAP32[$16>>2]|0; + $26 = ($25|0)==(1); + $spec$select = $26 ? $8 : 0; + $$0 = $spec$select; + } else { + $27 = ((($4)) + 36|0); + $28 = HEAP32[$10>>2]|0; + $29 = ((($28)) + 24|0); + $30 = HEAP32[$29>>2]|0; + FUNCTION_TABLE_viiiii[$30 & 255]($10,$4,$8,1,0); + $31 = HEAP32[$27>>2]|0; + switch ($31|0) { + case 0: { + $32 = HEAP32[$19>>2]|0; + $33 = ($32|0)==(1); + $34 = HEAP32[$17>>2]|0; + $35 = ($34|0)==(1); + $or$cond = $33 & $35; + $36 = HEAP32[$18>>2]|0; + $37 = ($36|0)==(1); + $or$cond28 = $or$cond & $37; + $38 = HEAP32[$15>>2]|0; + $spec$select33 = $or$cond28 ? $38 : 0; + $$0 = $spec$select33; + break L1; + break; + } + case 1: { + break; + } + default: { + $$0 = 0; + break L1; + } + } + $39 = HEAP32[$16>>2]|0; + $40 = ($39|0)==(1); + if (!($40)) { + $41 = HEAP32[$19>>2]|0; + $42 = ($41|0)==(0); + $43 = HEAP32[$17>>2]|0; + $44 = ($43|0)==(1); + $or$cond30 = $42 & $44; + $45 = HEAP32[$18>>2]|0; + $46 = ($45|0)==(1); + $or$cond32 = $or$cond30 & $46; + if (!($or$cond32)) { + $$0 = 0; + break; + } + } + $47 = HEAP32[$14>>2]|0; + $$0 = $47; + } + } while(0); + STACKTOP = sp;return ($$0|0); +} +function __ZN10__cxxabiv120__si_class_type_infoD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZN10__cxxabiv116__shim_type_infoD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + $5 = $5|0; + var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $6 = ((($1)) + 8|0); + $7 = HEAP32[$6>>2]|0; + $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0); + if ($8) { + __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4); + } else { + $9 = ((($0)) + 8|0); + $10 = HEAP32[$9>>2]|0; + $11 = HEAP32[$10>>2]|0; + $12 = ((($11)) + 20|0); + $13 = HEAP32[$12>>2]|0; + FUNCTION_TABLE_viiiiii[$13 & 255]($10,$1,$2,$3,$4,$5); + } + return; +} +function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + 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; + var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $5 = ((($1)) + 8|0); + $6 = HEAP32[$5>>2]|0; + $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0); + do { + if ($7) { + __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3); + } else { + $8 = HEAP32[$1>>2]|0; + $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0); + if (!($9)) { + $44 = ((($0)) + 8|0); + $45 = HEAP32[$44>>2]|0; + $46 = HEAP32[$45>>2]|0; + $47 = ((($46)) + 24|0); + $48 = HEAP32[$47>>2]|0; + FUNCTION_TABLE_viiiii[$48 & 255]($45,$1,$2,$3,$4); + break; + } + $10 = ((($1)) + 16|0); + $11 = HEAP32[$10>>2]|0; + $12 = ($11|0)==($2|0); + if (!($12)) { + $13 = ((($1)) + 20|0); + $14 = HEAP32[$13>>2]|0; + $15 = ($14|0)==($2|0); + if (!($15)) { + $18 = ((($1)) + 32|0); + HEAP32[$18>>2] = $3; + $19 = ((($1)) + 44|0); + $20 = HEAP32[$19>>2]|0; + $21 = ($20|0)==(4); + if ($21) { + break; + } + $22 = ((($1)) + 52|0); + HEAP8[$22>>0] = 0; + $23 = ((($1)) + 53|0); + HEAP8[$23>>0] = 0; + $24 = ((($0)) + 8|0); + $25 = HEAP32[$24>>2]|0; + $26 = HEAP32[$25>>2]|0; + $27 = ((($26)) + 20|0); + $28 = HEAP32[$27>>2]|0; + FUNCTION_TABLE_viiiiii[$28 & 255]($25,$1,$2,$2,1,$4); + $29 = HEAP8[$23>>0]|0; + $30 = ($29<<24>>24)==(0); + if ($30) { + $$037$off038 = 0; + label = 11; + } else { + $31 = HEAP8[$22>>0]|0; + $32 = ($31<<24>>24)==(0); + if ($32) { + $$037$off038 = 1; + label = 11; + } else { + label = 15; + } + } + do { + if ((label|0) == 11) { + HEAP32[$13>>2] = $2; + $33 = ((($1)) + 40|0); + $34 = HEAP32[$33>>2]|0; + $35 = (($34) + 1)|0; + HEAP32[$33>>2] = $35; + $36 = ((($1)) + 36|0); + $37 = HEAP32[$36>>2]|0; + $38 = ($37|0)==(1); + if ($38) { + $39 = ((($1)) + 24|0); + $40 = HEAP32[$39>>2]|0; + $41 = ($40|0)==(2); + if ($41) { + $42 = ((($1)) + 54|0); + HEAP8[$42>>0] = 1; + if ($$037$off038) { + label = 15; + break; + } else { + $43 = 4; + break; + } + } + } + if ($$037$off038) { + label = 15; + } else { + $43 = 4; + } + } + } while(0); + if ((label|0) == 15) { + $43 = 3; + } + HEAP32[$19>>2] = $43; + break; + } + } + $16 = ($3|0)==(1); + if ($16) { + $17 = ((($1)) + 32|0); + HEAP32[$17>>2] = 1; + } + } + } while(0); + return; +} +function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + var $10 = 0, $11 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + $4 = ((($1)) + 8|0); + $5 = HEAP32[$4>>2]|0; + $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0); + if ($6) { + __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3); + } else { + $7 = ((($0)) + 8|0); + $8 = HEAP32[$7>>2]|0; + $9 = HEAP32[$8>>2]|0; + $10 = ((($9)) + 28|0); + $11 = HEAP32[$10>>2]|0; + FUNCTION_TABLE_viiii[$11 & 255]($8,$1,$2,$3); + } + return; +} +function __ZNSt9type_infoD2Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZN10__cxxabiv112_GLOBAL__N_110construct_Ev() { + var $0 = 0, $1 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $vararg_buffer = sp; + $0 = (_pthread_key_create((21872|0),(257|0))|0); + $1 = ($0|0)==(0); + if ($1) { + STACKTOP = sp;return; + } else { + _abort_message(20787,$vararg_buffer); + // unreachable; + } +} +function __ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $vararg_buffer = sp; + _free($0); + $1 = HEAP32[5468]|0; + $2 = (_pthread_setspecific(($1|0),(0|0))|0); + $3 = ($2|0)==(0); + if ($3) { + STACKTOP = sp;return; + } else { + _abort_message(20837,$vararg_buffer); + // unreachable; + } +} +function __ZSt9terminatev() { + 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; + sp = STACKTOP; + $0 = (___cxa_get_globals_fast()|0); + $1 = ($0|0)==(0|0); + if (!($1)) { + $2 = HEAP32[$0>>2]|0; + $3 = ($2|0)==(0|0); + if (!($3)) { + $4 = ((($2)) + 48|0); + $5 = $4; + $6 = $5; + $7 = HEAP32[$6>>2]|0; + $8 = (($5) + 4)|0; + $9 = $8; + $10 = HEAP32[$9>>2]|0; + $11 = $7 & -256; + $12 = ($11|0)==(1126902528); + $13 = ($10|0)==(1129074247); + $14 = $12 & $13; + if ($14) { + $15 = ((($2)) + 12|0); + $16 = HEAP32[$15>>2]|0; + __ZSt11__terminatePFvvE($16); + // unreachable; + } + } + } + $17 = (__ZSt13get_terminatev()|0); + __ZSt11__terminatePFvvE($17); + // unreachable; +} +function __ZSt11__terminatePFvvE($0) { + $0 = $0|0; + var $vararg_buffer = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $vararg_buffer = sp; + FUNCTION_TABLE_v[$0 & 511](); + _abort_message(20890,$vararg_buffer); + // unreachable; +} +function __ZSt13get_terminatev() { + var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = HEAP32[877]|0; + $1 = (($0) + 0)|0; + HEAP32[877] = $1; + $2 = $0; + return ($2|0); +} +function __ZNSt9exceptionD2Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZNSt9exceptionD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZdlPv($0); + return; +} +function __ZNKSt9exception4whatEv($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return (20930|0); +} +function __ZNSt11logic_errorD2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + HEAP32[$0>>2] = (3620); + $1 = ((($0)) + 4|0); + __ZNSt3__218__libcpp_refstringD2Ev($1); + return; +} +function __ZNSt11logic_errorD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZNSt11logic_errorD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNKSt11logic_error4whatEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ((($0)) + 4|0); + $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0); + return ($2|0); +} +function __ZNKSt3__218__libcpp_refstring5c_strEv($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = HEAP32[$0>>2]|0; + return ($1|0); +} +function __ZNSt3__218__libcpp_refstringD2Ev($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = (__ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0)|0); + if ($1) { + $2 = HEAP32[$0>>2]|0; + $3 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($2)|0); + $4 = ((($3)) + 8|0); + $5 = HEAP32[$4>>2]|0; + $6 = (($5) + -1)|0; + HEAP32[$4>>2] = $6; + $7 = (($5) + -1)|0; + $8 = ($7|0)<(0); + if ($8) { + __ZdlPv($3); + } + } + return; +} +function __ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ((($0)) + -12|0); + return ($1|0); +} +function __ZNSt13runtime_errorD2Ev($0) { + $0 = $0|0; + var $1 = 0, label = 0, sp = 0; + sp = STACKTOP; + HEAP32[$0>>2] = (3640); + $1 = ((($0)) + 4|0); + __ZNSt3__218__libcpp_refstringD2Ev($1); + return; +} +function __ZNSt13runtime_errorD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZNSt13runtime_errorD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNKSt13runtime_error4whatEv($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ((($0)) + 4|0); + $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0); + return ($2|0); +} +function __ZNSt12length_errorD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZNSt11logic_errorD2Ev($0); + __ZdlPv($0); + return; +} +function __ZN10__cxxabiv123__fundamental_type_infoD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZN10__cxxabiv116__shim_type_infoD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $3 = 0, label = 0, sp = 0; + sp = STACKTOP; + $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0); + return ($3|0); +} +function __ZN10__cxxabiv119__pointer_type_infoD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZN10__cxxabiv116__shim_type_infoD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + 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; + 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; + var $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, stop = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); + $3 = sp; + $4 = HEAP32[$2>>2]|0; + $5 = HEAP32[$4>>2]|0; + HEAP32[$2>>2] = $5; + $6 = (__ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,0)|0); + if ($6) { + $$4 = 1; + } else { + $7 = ($1|0)==(0|0); + if ($7) { + $$4 = 0; + } else { + $8 = (___dynamic_cast($1,1312,1416,0)|0); + $9 = ($8|0)==(0|0); + if ($9) { + $$4 = 0; + } else { + $10 = ((($8)) + 8|0); + $11 = HEAP32[$10>>2]|0; + $12 = ((($0)) + 8|0); + $13 = HEAP32[$12>>2]|0; + $14 = $13 ^ -1; + $15 = $11 & $14; + $16 = ($15|0)==(0); + if ($16) { + $17 = ((($0)) + 12|0); + $18 = HEAP32[$17>>2]|0; + $19 = ((($8)) + 12|0); + $20 = HEAP32[$19>>2]|0; + $21 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($18,$20,0)|0); + if ($21) { + $$4 = 1; + } else { + $22 = HEAP32[$17>>2]|0; + $23 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($22,1448,0)|0); + if ($23) { + $$4 = 1; + } else { + $24 = HEAP32[$17>>2]|0; + $25 = ($24|0)==(0|0); + if ($25) { + $$4 = 0; + } else { + $26 = (___dynamic_cast($24,1312,1296,0)|0); + $27 = ($26|0)==(0|0); + if ($27) { + $$4 = 0; + } else { + $28 = HEAP32[$19>>2]|0; + $29 = ($28|0)==(0|0); + if ($29) { + $$4 = 0; + } else { + $30 = (___dynamic_cast($28,1312,1296,0)|0); + $31 = ($30|0)==(0|0); + if ($31) { + $$4 = 0; + } else { + $32 = ((($3)) + 4|0); + dest=$32; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); + HEAP32[$3>>2] = $30; + $33 = ((($3)) + 8|0); + HEAP32[$33>>2] = $26; + $34 = ((($3)) + 12|0); + HEAP32[$34>>2] = -1; + $35 = ((($3)) + 48|0); + HEAP32[$35>>2] = 1; + $36 = HEAP32[$30>>2]|0; + $37 = ((($36)) + 28|0); + $38 = HEAP32[$37>>2]|0; + $39 = HEAP32[$2>>2]|0; + FUNCTION_TABLE_viiii[$38 & 255]($30,$3,$39,1); + $40 = ((($3)) + 24|0); + $41 = HEAP32[$40>>2]|0; + $42 = ($41|0)==(1); + if ($42) { + $43 = ((($3)) + 16|0); + $44 = HEAP32[$43>>2]|0; + HEAP32[$2>>2] = $44; + $$0 = 1; + } else { + $$0 = 0; + } + $$4 = $$0; + } + } + } + } + } + } + } else { + $$4 = 0; + } + } + } + } + STACKTOP = sp;return ($$4|0); +} +function __ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; + sp = STACKTOP; + $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0); + if ($3) { + $$0 = 1; + } else { + $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($1,1456,0)|0); + $$0 = $4; + } + return ($$0|0); +} +function __ZN10__cxxabiv121__vmi_class_type_infoD0Ev($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + __ZN10__cxxabiv116__shim_type_infoD2Ev($0); + __ZdlPv($0); + return; +} +function __ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + $5 = $5|0; + 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; + 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; + sp = STACKTOP; + $6 = ((($1)) + 8|0); + $7 = HEAP32[$6>>2]|0; + $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0); + if ($8) { + __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4); + } else { + $9 = ((($1)) + 52|0); + $10 = HEAP8[$9>>0]|0; + $11 = ((($1)) + 53|0); + $12 = HEAP8[$11>>0]|0; + $13 = ((($0)) + 16|0); + $14 = ((($0)) + 12|0); + $15 = HEAP32[$14>>2]|0; + $16 = (((($0)) + 16|0) + ($15<<3)|0); + HEAP8[$9>>0] = 0; + HEAP8[$11>>0] = 0; + __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($13,$1,$2,$3,$4,$5); + $17 = ($15|0)>(1); + L4: do { + if ($17) { + $18 = ((($0)) + 24|0); + $19 = ((($1)) + 24|0); + $20 = ((($0)) + 8|0); + $21 = ((($1)) + 54|0); + $$0 = $18; + while(1) { + $22 = HEAP8[$21>>0]|0; + $23 = ($22<<24>>24)==(0); + if (!($23)) { + break L4; + } + $24 = HEAP8[$9>>0]|0; + $25 = ($24<<24>>24)==(0); + if ($25) { + $31 = HEAP8[$11>>0]|0; + $32 = ($31<<24>>24)==(0); + if (!($32)) { + $33 = HEAP32[$20>>2]|0; + $34 = $33 & 1; + $35 = ($34|0)==(0); + if ($35) { + break L4; + } + } + } else { + $26 = HEAP32[$19>>2]|0; + $27 = ($26|0)==(1); + if ($27) { + break L4; + } + $28 = HEAP32[$20>>2]|0; + $29 = $28 & 2; + $30 = ($29|0)==(0); + if ($30) { + break L4; + } + } + HEAP8[$9>>0] = 0; + HEAP8[$11>>0] = 0; + __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$0,$1,$2,$3,$4,$5); + $36 = ((($$0)) + 8|0); + $37 = ($36>>>0)<($16>>>0); + if ($37) { + $$0 = $36; + } else { + break; + } + } + } + } while(0); + HEAP8[$9>>0] = $10; + HEAP8[$11>>0] = $12; + } + return; +} +function __ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + 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; + 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; + 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; + 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; + sp = STACKTOP; + $5 = ((($1)) + 8|0); + $6 = HEAP32[$5>>2]|0; + $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0); + L1: do { + if ($7) { + __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3); + } else { + $8 = HEAP32[$1>>2]|0; + $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0); + if (!($9)) { + $56 = ((($0)) + 16|0); + $57 = ((($0)) + 12|0); + $58 = HEAP32[$57>>2]|0; + $59 = (((($0)) + 16|0) + ($58<<3)|0); + __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($56,$1,$2,$3,$4); + $60 = ((($0)) + 24|0); + $61 = ($58|0)>(1); + if (!($61)) { + break; + } + $62 = ((($0)) + 8|0); + $63 = HEAP32[$62>>2]|0; + $64 = $63 & 2; + $65 = ($64|0)==(0); + if ($65) { + $66 = ((($1)) + 36|0); + $67 = HEAP32[$66>>2]|0; + $68 = ($67|0)==(1); + if (!($68)) { + $74 = $63 & 1; + $75 = ($74|0)==(0); + if ($75) { + $86 = ((($1)) + 54|0); + $$2 = $60; + while(1) { + $87 = HEAP8[$86>>0]|0; + $88 = ($87<<24>>24)==(0); + if (!($88)) { + break L1; + } + $89 = HEAP32[$66>>2]|0; + $90 = ($89|0)==(1); + if ($90) { + break L1; + } + __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$2,$1,$2,$3,$4); + $91 = ((($$2)) + 8|0); + $92 = ($91>>>0)<($59>>>0); + if ($92) { + $$2 = $91; + } else { + break L1; + } + } + } + $76 = ((($1)) + 24|0); + $77 = ((($1)) + 54|0); + $$1 = $60; + while(1) { + $78 = HEAP8[$77>>0]|0; + $79 = ($78<<24>>24)==(0); + if (!($79)) { + break L1; + } + $80 = HEAP32[$66>>2]|0; + $81 = ($80|0)==(1); + if ($81) { + $82 = HEAP32[$76>>2]|0; + $83 = ($82|0)==(1); + if ($83) { + break L1; + } + } + __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$1,$1,$2,$3,$4); + $84 = ((($$1)) + 8|0); + $85 = ($84>>>0)<($59>>>0); + if ($85) { + $$1 = $84; + } else { + break L1; + } + } + } + } + $69 = ((($1)) + 54|0); + $$0 = $60; + while(1) { + $70 = HEAP8[$69>>0]|0; + $71 = ($70<<24>>24)==(0); + if (!($71)) { + break L1; + } + __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$0,$1,$2,$3,$4); + $72 = ((($$0)) + 8|0); + $73 = ($72>>>0)<($59>>>0); + if ($73) { + $$0 = $72; + } else { + break L1; + } + } + } + $10 = ((($1)) + 16|0); + $11 = HEAP32[$10>>2]|0; + $12 = ($11|0)==($2|0); + if (!($12)) { + $13 = ((($1)) + 20|0); + $14 = HEAP32[$13>>2]|0; + $15 = ($14|0)==($2|0); + if (!($15)) { + $18 = ((($1)) + 32|0); + HEAP32[$18>>2] = $3; + $19 = ((($1)) + 44|0); + $20 = HEAP32[$19>>2]|0; + $21 = ($20|0)==(4); + if ($21) { + break; + } + $22 = ((($0)) + 16|0); + $23 = ((($0)) + 12|0); + $24 = HEAP32[$23>>2]|0; + $25 = (((($0)) + 16|0) + ($24<<3)|0); + $26 = ((($1)) + 52|0); + $27 = ((($1)) + 53|0); + $28 = ((($1)) + 54|0); + $29 = ((($0)) + 8|0); + $30 = ((($1)) + 24|0); + $$081$off0 = 0;$$084 = $22;$$085$off0 = 0; + L32: while(1) { + $31 = ($$084>>>0)<($25>>>0); + if (!($31)) { + $$283$off0 = $$081$off0; + label = 18; + break; + } + HEAP8[$26>>0] = 0; + HEAP8[$27>>0] = 0; + __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$084,$1,$2,$2,1,$4); + $32 = HEAP8[$28>>0]|0; + $33 = ($32<<24>>24)==(0); + if (!($33)) { + $$283$off0 = $$081$off0; + label = 18; + break; + } + $34 = HEAP8[$27>>0]|0; + $35 = ($34<<24>>24)==(0); + do { + if ($35) { + $$182$off0 = $$081$off0;$$186$off0 = $$085$off0; + } else { + $36 = HEAP8[$26>>0]|0; + $37 = ($36<<24>>24)==(0); + if ($37) { + $43 = HEAP32[$29>>2]|0; + $44 = $43 & 1; + $45 = ($44|0)==(0); + if ($45) { + $$283$off0 = 1; + label = 18; + break L32; + } else { + $$182$off0 = 1;$$186$off0 = $$085$off0; + break; + } + } + $38 = HEAP32[$30>>2]|0; + $39 = ($38|0)==(1); + if ($39) { + label = 23; + break L32; + } + $40 = HEAP32[$29>>2]|0; + $41 = $40 & 2; + $42 = ($41|0)==(0); + if ($42) { + label = 23; + break L32; + } else { + $$182$off0 = 1;$$186$off0 = 1; + } + } + } while(0); + $46 = ((($$084)) + 8|0); + $$081$off0 = $$182$off0;$$084 = $46;$$085$off0 = $$186$off0; + } + do { + if ((label|0) == 18) { + if (!($$085$off0)) { + HEAP32[$13>>2] = $2; + $47 = ((($1)) + 40|0); + $48 = HEAP32[$47>>2]|0; + $49 = (($48) + 1)|0; + HEAP32[$47>>2] = $49; + $50 = ((($1)) + 36|0); + $51 = HEAP32[$50>>2]|0; + $52 = ($51|0)==(1); + if ($52) { + $53 = HEAP32[$30>>2]|0; + $54 = ($53|0)==(2); + if ($54) { + HEAP8[$28>>0] = 1; + if ($$283$off0) { + label = 23; + break; + } else { + $55 = 4; + break; + } + } + } + } + if ($$283$off0) { + label = 23; + } else { + $55 = 4; + } + } + } while(0); + if ((label|0) == 23) { + $55 = 3; + } + HEAP32[$19>>2] = $55; + break; + } + } + $16 = ($3|0)==(1); + if ($16) { + $17 = ((($1)) + 32|0); + HEAP32[$17>>2] = 1; + } + } + } while(0); + return; +} +function __ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + sp = STACKTOP; + $4 = ((($1)) + 8|0); + $5 = HEAP32[$4>>2]|0; + $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0); + L1: do { + if ($6) { + __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3); + } else { + $7 = ((($0)) + 16|0); + $8 = ((($0)) + 12|0); + $9 = HEAP32[$8>>2]|0; + $10 = (((($0)) + 16|0) + ($9<<3)|0); + __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($7,$1,$2,$3); + $11 = ($9|0)>(1); + if ($11) { + $12 = ((($0)) + 24|0); + $13 = ((($1)) + 54|0); + $$0 = $12; + while(1) { + __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($$0,$1,$2,$3); + $14 = HEAP8[$13>>0]|0; + $15 = ($14<<24>>24)==(0); + if (!($15)) { + break L1; + } + $16 = ((($$0)) + 8|0); + $17 = ($16>>>0)<($10>>>0); + if ($17) { + $$0 = $16; + } else { + break; + } + } + } + } + } while(0); + return; +} +function __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + 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; + sp = STACKTOP; + $4 = ((($0)) + 4|0); + $5 = HEAP32[$4>>2]|0; + $6 = $5 >> 8; + $7 = $5 & 1; + $8 = ($7|0)==(0); + if ($8) { + $$0 = $6; + } else { + $9 = HEAP32[$2>>2]|0; + $10 = (($9) + ($6)|0); + $11 = HEAP32[$10>>2]|0; + $$0 = $11; + } + $12 = HEAP32[$0>>2]|0; + $13 = HEAP32[$12>>2]|0; + $14 = ((($13)) + 28|0); + $15 = HEAP32[$14>>2]|0; + $16 = (($2) + ($$0)|0); + $17 = $5 & 2; + $18 = ($17|0)==(0); + $19 = $18 ? 2 : $3; + FUNCTION_TABLE_viiii[$15 & 255]($12,$1,$16,$19); + return; +} +function __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + $5 = $5|0; + 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; + sp = STACKTOP; + $6 = ((($0)) + 4|0); + $7 = HEAP32[$6>>2]|0; + $8 = $7 >> 8; + $9 = $7 & 1; + $10 = ($9|0)==(0); + if ($10) { + $$0 = $8; + } else { + $11 = HEAP32[$3>>2]|0; + $12 = (($11) + ($8)|0); + $13 = HEAP32[$12>>2]|0; + $$0 = $13; + } + $14 = HEAP32[$0>>2]|0; + $15 = HEAP32[$14>>2]|0; + $16 = ((($15)) + 20|0); + $17 = HEAP32[$16>>2]|0; + $18 = (($3) + ($$0)|0); + $19 = $7 & 2; + $20 = ($19|0)==(0); + $21 = $20 ? 2 : $4; + FUNCTION_TABLE_viiiiii[$17 & 255]($14,$1,$2,$18,$21,$5); + return; +} +function __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + $3 = $3|0; + $4 = $4|0; + 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; + sp = STACKTOP; + $5 = ((($0)) + 4|0); + $6 = HEAP32[$5>>2]|0; + $7 = $6 >> 8; + $8 = $6 & 1; + $9 = ($8|0)==(0); + if ($9) { + $$0 = $7; + } else { + $10 = HEAP32[$2>>2]|0; + $11 = (($10) + ($7)|0); + $12 = HEAP32[$11>>2]|0; + $$0 = $12; + } + $13 = HEAP32[$0>>2]|0; + $14 = HEAP32[$13>>2]|0; + $15 = ((($14)) + 24|0); + $16 = HEAP32[$15>>2]|0; + $17 = (($2) + ($$0)|0); + $18 = $6 & 2; + $19 = ($18|0)==(0); + $20 = $19 ? 2 : $3; + FUNCTION_TABLE_viiiii[$16 & 255]($13,$1,$17,$20,$4); + return; +} +function ___cxa_guard_acquire($0) { + $0 = $0|0; + var $$0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = HEAP8[$0>>0]|0; + $2 = ($1<<24>>24)==(1); + if ($2) { + $$0 = 0; + } else { + HEAP8[$0>>0] = 1; + $$0 = 1; + } + return ($$0|0); +} +function ___cxa_guard_release($0) { + $0 = $0|0; + var label = 0, sp = 0; + sp = STACKTOP; + return; +} +function __ZSt15get_new_handlerv() { + var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0; + sp = STACKTOP; + $0 = HEAP32[5469]|0; + $1 = (($0) + 0)|0; + HEAP32[5469] = $1; + $2 = $0; + return ($2|0); +} +function ___cxa_can_catch($0,$1,$2) { + $0 = $0|0; + $1 = $1|0; + $2 = $2|0; + var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; + sp = STACKTOP; + STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); + $3 = sp; + $4 = HEAP32[$2>>2]|0; + HEAP32[$3>>2] = $4; + $5 = HEAP32[$0>>2]|0; + $6 = ((($5)) + 16|0); + $7 = HEAP32[$6>>2]|0; + $8 = (FUNCTION_TABLE_iiii[$7 & 255]($0,$1,$3)|0); + $9 = $8&1; + if ($8) { + $10 = HEAP32[$3>>2]|0; + HEAP32[$2>>2] = $10; + } + STACKTOP = sp;return ($9|0); +} +function ___cxa_is_pointer_type($0) { + $0 = $0|0; + var $1 = 0, $2 = 0, $3 = 0, $phitmp = 0, $phitmp1 = 0, label = 0, sp = 0; + sp = STACKTOP; + $1 = ($0|0)==(0|0); + if ($1) { + $3 = 0; + } else { + $2 = (___dynamic_cast($0,1312,1416,0)|0); + $phitmp = ($2|0)!=(0|0); + $phitmp1 = $phitmp&1; + $3 = $phitmp1; + } + return ($3|0); +} +function runPostSets() { +} +function ___muldsi3($a, $b) { + $a = $a | 0; + $b = $b | 0; + var $1 = 0, $2 = 0, $3 = 0, $6 = 0, $8 = 0, $11 = 0, $12 = 0; + $1 = $a & 65535; + $2 = $b & 65535; + $3 = Math_imul($2, $1) | 0; + $6 = $a >>> 16; + $8 = ($3 >>> 16) + (Math_imul($2, $6) | 0) | 0; + $11 = $b >>> 16; + $12 = Math_imul($11, $1) | 0; + return (tempRet0 = (($8 >>> 16) + (Math_imul($11, $6) | 0) | 0) + ((($8 & 65535) + $12 | 0) >>> 16) | 0, 0 | ($8 + $12 << 16 | $3 & 65535)) | 0; +} +function ___muldi3($a$0, $a$1, $b$0, $b$1) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + var $x_sroa_0_0_extract_trunc = 0, $y_sroa_0_0_extract_trunc = 0, $1$0 = 0, $1$1 = 0, $2 = 0; + $x_sroa_0_0_extract_trunc = $a$0; + $y_sroa_0_0_extract_trunc = $b$0; + $1$0 = ___muldsi3($x_sroa_0_0_extract_trunc, $y_sroa_0_0_extract_trunc) | 0; + $1$1 = tempRet0; + $2 = Math_imul($a$1, $y_sroa_0_0_extract_trunc) | 0; + 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; +} +function _i64Add(a, b, c, d) { + /* + x = a + b*2^32 + y = c + d*2^32 + result = l + h*2^32 + */ + a = a|0; b = b|0; c = c|0; d = d|0; + var l = 0, h = 0; + l = (a + c)>>>0; + h = (b + d + (((l>>>0) < (a>>>0))|0))>>>0; // Add carry from low word to high word on overflow. + return ((tempRet0 = h,l|0)|0); +} +function _i64Subtract(a, b, c, d) { + a = a|0; b = b|0; c = c|0; d = d|0; + var l = 0, h = 0; + l = (a - c)>>>0; + h = (b - d)>>>0; + h = (b - d - (((c>>>0) > (a>>>0))|0))>>>0; // Borrow one from high word to low word on underflow. + return ((tempRet0 = h,l|0)|0); +} +function _llvm_cttz_i32(x) { // Note: Currently doesn't take isZeroUndef() + x = x | 0; + return (x ? (31 - (Math_clz32((x ^ (x - 1))) | 0) | 0) : 32) | 0; +} +function ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + $rem = $rem | 0; + 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_sroa_0_0_extract_trunc = $a$0; + $n_sroa_1_4_extract_shift$0 = $a$1; + $n_sroa_1_4_extract_trunc = $n_sroa_1_4_extract_shift$0; + $d_sroa_0_0_extract_trunc = $b$0; + $d_sroa_1_4_extract_shift$0 = $b$1; + $d_sroa_1_4_extract_trunc = $d_sroa_1_4_extract_shift$0; + if (($n_sroa_1_4_extract_trunc | 0) == 0) { + $4 = ($rem | 0) != 0; + if (($d_sroa_1_4_extract_trunc | 0) == 0) { + if ($4) { + HEAP32[$rem >> 2] = ($n_sroa_0_0_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0); + HEAP32[$rem + 4 >> 2] = 0; + } + $_0$1 = 0; + $_0$0 = ($n_sroa_0_0_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } else { + if (!$4) { + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + HEAP32[$rem >> 2] = $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $a$1 & 0; + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + } + $17 = ($d_sroa_1_4_extract_trunc | 0) == 0; + do { + if (($d_sroa_0_0_extract_trunc | 0) == 0) { + if ($17) { + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0); + HEAP32[$rem + 4 >> 2] = 0; + } + $_0$1 = 0; + $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + if (($n_sroa_0_0_extract_trunc | 0) == 0) { + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = 0; + HEAP32[$rem + 4 >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_1_4_extract_trunc >>> 0); + } + $_0$1 = 0; + $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_1_4_extract_trunc >>> 0) >>> 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + $37 = $d_sroa_1_4_extract_trunc - 1 | 0; + if (($37 & $d_sroa_1_4_extract_trunc | 0) == 0) { + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = 0 | $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $37 & $n_sroa_1_4_extract_trunc | $a$1 & 0; + } + $_0$1 = 0; + $_0$0 = $n_sroa_1_4_extract_trunc >>> ((_llvm_cttz_i32($d_sroa_1_4_extract_trunc | 0) | 0) >>> 0); + return (tempRet0 = $_0$1, $_0$0) | 0; + } + $49 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0; + $51 = $49 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; + if ($51 >>> 0 <= 30) { + $57 = $51 + 1 | 0; + $58 = 31 - $51 | 0; + $sr_1_ph = $57; + $r_sroa_0_1_ph = $n_sroa_1_4_extract_trunc << $58 | $n_sroa_0_0_extract_trunc >>> ($57 >>> 0); + $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($57 >>> 0); + $q_sroa_0_1_ph = 0; + $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $58; + break; + } + if (($rem | 0) == 0) { + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + HEAP32[$rem >> 2] = 0 | $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } else { + if (!$17) { + $117 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0; + $119 = $117 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; + if ($119 >>> 0 <= 31) { + $125 = $119 + 1 | 0; + $126 = 31 - $119 | 0; + $130 = $119 - 31 >> 31; + $sr_1_ph = $125; + $r_sroa_0_1_ph = $n_sroa_0_0_extract_trunc >>> ($125 >>> 0) & $130 | $n_sroa_1_4_extract_trunc << $126; + $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($125 >>> 0) & $130; + $q_sroa_0_1_ph = 0; + $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $126; + break; + } + if (($rem | 0) == 0) { + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + HEAP32[$rem >> 2] = 0 | $a$0 & -1; + HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; + $_0$1 = 0; + $_0$0 = 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + $66 = $d_sroa_0_0_extract_trunc - 1 | 0; + if (($66 & $d_sroa_0_0_extract_trunc | 0) != 0) { + $86 = (Math_clz32($d_sroa_0_0_extract_trunc | 0) | 0) + 33 | 0; + $88 = $86 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; + $89 = 64 - $88 | 0; + $91 = 32 - $88 | 0; + $92 = $91 >> 31; + $95 = $88 - 32 | 0; + $105 = $95 >> 31; + $sr_1_ph = $88; + $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; + $r_sroa_1_1_ph = $105 & $n_sroa_1_4_extract_trunc >>> ($88 >>> 0); + $q_sroa_0_1_ph = $n_sroa_0_0_extract_trunc << $89 & $92; + $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; + break; + } + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = $66 & $n_sroa_0_0_extract_trunc; + HEAP32[$rem + 4 >> 2] = 0; + } + if (($d_sroa_0_0_extract_trunc | 0) == 1) { + $_0$1 = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; + $_0$0 = 0 | $a$0 & -1; + return (tempRet0 = $_0$1, $_0$0) | 0; + } else { + $78 = _llvm_cttz_i32($d_sroa_0_0_extract_trunc | 0) | 0; + $_0$1 = 0 | $n_sroa_1_4_extract_trunc >>> ($78 >>> 0); + $_0$0 = $n_sroa_1_4_extract_trunc << 32 - $78 | $n_sroa_0_0_extract_trunc >>> ($78 >>> 0) | 0; + return (tempRet0 = $_0$1, $_0$0) | 0; + } + } + } while (0); + if (($sr_1_ph | 0) == 0) { + $q_sroa_1_1_lcssa = $q_sroa_1_1_ph; + $q_sroa_0_1_lcssa = $q_sroa_0_1_ph; + $r_sroa_1_1_lcssa = $r_sroa_1_1_ph; + $r_sroa_0_1_lcssa = $r_sroa_0_1_ph; + $carry_0_lcssa$1 = 0; + $carry_0_lcssa$0 = 0; + } else { + $d_sroa_0_0_insert_insert99$0 = 0 | $b$0 & -1; + $d_sroa_0_0_insert_insert99$1 = $d_sroa_1_4_extract_shift$0 | $b$1 & 0; + $137$0 = _i64Add($d_sroa_0_0_insert_insert99$0 | 0, $d_sroa_0_0_insert_insert99$1 | 0, -1, -1) | 0; + $137$1 = tempRet0; + $q_sroa_1_1198 = $q_sroa_1_1_ph; + $q_sroa_0_1199 = $q_sroa_0_1_ph; + $r_sroa_1_1200 = $r_sroa_1_1_ph; + $r_sroa_0_1201 = $r_sroa_0_1_ph; + $sr_1202 = $sr_1_ph; + $carry_0203 = 0; + while (1) { + $147 = $q_sroa_0_1199 >>> 31 | $q_sroa_1_1198 << 1; + $149 = $carry_0203 | $q_sroa_0_1199 << 1; + $r_sroa_0_0_insert_insert42$0 = 0 | ($r_sroa_0_1201 << 1 | $q_sroa_1_1198 >>> 31); + $r_sroa_0_0_insert_insert42$1 = $r_sroa_0_1201 >>> 31 | $r_sroa_1_1200 << 1 | 0; + _i64Subtract($137$0 | 0, $137$1 | 0, $r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0) | 0; + $150$1 = tempRet0; + $151$0 = $150$1 >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1; + $152 = $151$0 & 1; + $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; + $r_sroa_0_0_extract_trunc = $154$0; + $r_sroa_1_4_extract_trunc = tempRet0; + $155 = $sr_1202 - 1 | 0; + if (($155 | 0) == 0) { + break; + } else { + $q_sroa_1_1198 = $147; + $q_sroa_0_1199 = $149; + $r_sroa_1_1200 = $r_sroa_1_4_extract_trunc; + $r_sroa_0_1201 = $r_sroa_0_0_extract_trunc; + $sr_1202 = $155; + $carry_0203 = $152; + } + } + $q_sroa_1_1_lcssa = $147; + $q_sroa_0_1_lcssa = $149; + $r_sroa_1_1_lcssa = $r_sroa_1_4_extract_trunc; + $r_sroa_0_1_lcssa = $r_sroa_0_0_extract_trunc; + $carry_0_lcssa$1 = 0; + $carry_0_lcssa$0 = $152; + } + $q_sroa_0_0_insert_ext75$0 = $q_sroa_0_1_lcssa; + $q_sroa_0_0_insert_ext75$1 = 0; + $q_sroa_0_0_insert_insert77$1 = $q_sroa_1_1_lcssa | $q_sroa_0_0_insert_ext75$1; + if (($rem | 0) != 0) { + HEAP32[$rem >> 2] = 0 | $r_sroa_0_1_lcssa; + HEAP32[$rem + 4 >> 2] = $r_sroa_1_1_lcssa | 0; + } + $_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; + $_0$0 = ($q_sroa_0_0_insert_ext75$0 << 1 | 0 >>> 31) & -2 | $carry_0_lcssa$0; + return (tempRet0 = $_0$1, $_0$0) | 0; +} +function ___udivdi3($a$0, $a$1, $b$0, $b$1) { + $a$0 = $a$0 | 0; + $a$1 = $a$1 | 0; + $b$0 = $b$0 | 0; + $b$1 = $b$1 | 0; + var $1$0 = 0; + $1$0 = ___udivmoddi4($a$0, $a$1, $b$0, $b$1, 0) | 0; + return $1$0 | 0; +} +function _bitshift64Ashr(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + if ((bits|0) < 32) { + ander = ((1 << bits) - 1)|0; + tempRet0 = high >> bits; + return (low >>> bits) | ((high&ander) << (32 - bits)); + } + tempRet0 = (high|0) < 0 ? -1 : 0; + return (high >> (bits - 32))|0; +} +function _bitshift64Lshr(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + if ((bits|0) < 32) { + ander = ((1 << bits) - 1)|0; + tempRet0 = high >>> bits; + return (low >>> bits) | ((high&ander) << (32 - bits)); + } + tempRet0 = 0; + return (high >>> (bits - 32))|0; +} +function _bitshift64Shl(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + if ((bits|0) < 32) { + ander = ((1 << bits) - 1)|0; + tempRet0 = (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits)); + return low << bits; + } + tempRet0 = low << (bits - 32); + return 0; +} +function _llvm_bswap_i32(x) { + x = x|0; + return (((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24))|0; +} +function _memcpy(dest, src, num) { + dest = dest|0; src = src|0; num = num|0; + var ret = 0; + var aligned_dest_end = 0; + var block_aligned_dest_end = 0; + var dest_end = 0; + // Test against a benchmarked cutoff limit for when HEAPU8.set() becomes faster to use. + if ((num|0) >= + 8192 + ) { + return _emscripten_memcpy_big(dest|0, src|0, num|0)|0; + } + + ret = dest|0; + dest_end = (dest + num)|0; + if ((dest&3) == (src&3)) { + // The initial unaligned < 4-byte front. + while (dest & 3) { + if ((num|0) == 0) return ret|0; + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + num = (num-1)|0; + } + aligned_dest_end = (dest_end & -4)|0; + block_aligned_dest_end = (aligned_dest_end - 64)|0; + while ((dest|0) <= (block_aligned_dest_end|0) ) { + HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); + HEAP32[(((dest)+(4))>>2)]=((HEAP32[(((src)+(4))>>2)])|0); + HEAP32[(((dest)+(8))>>2)]=((HEAP32[(((src)+(8))>>2)])|0); + HEAP32[(((dest)+(12))>>2)]=((HEAP32[(((src)+(12))>>2)])|0); + HEAP32[(((dest)+(16))>>2)]=((HEAP32[(((src)+(16))>>2)])|0); + HEAP32[(((dest)+(20))>>2)]=((HEAP32[(((src)+(20))>>2)])|0); + HEAP32[(((dest)+(24))>>2)]=((HEAP32[(((src)+(24))>>2)])|0); + HEAP32[(((dest)+(28))>>2)]=((HEAP32[(((src)+(28))>>2)])|0); + HEAP32[(((dest)+(32))>>2)]=((HEAP32[(((src)+(32))>>2)])|0); + HEAP32[(((dest)+(36))>>2)]=((HEAP32[(((src)+(36))>>2)])|0); + HEAP32[(((dest)+(40))>>2)]=((HEAP32[(((src)+(40))>>2)])|0); + HEAP32[(((dest)+(44))>>2)]=((HEAP32[(((src)+(44))>>2)])|0); + HEAP32[(((dest)+(48))>>2)]=((HEAP32[(((src)+(48))>>2)])|0); + HEAP32[(((dest)+(52))>>2)]=((HEAP32[(((src)+(52))>>2)])|0); + HEAP32[(((dest)+(56))>>2)]=((HEAP32[(((src)+(56))>>2)])|0); + HEAP32[(((dest)+(60))>>2)]=((HEAP32[(((src)+(60))>>2)])|0); + dest = (dest+64)|0; + src = (src+64)|0; + } + while ((dest|0) < (aligned_dest_end|0) ) { + HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); + dest = (dest+4)|0; + src = (src+4)|0; + } + } else { + // In the unaligned copy case, unroll a bit as well. + aligned_dest_end = (dest_end - 4)|0; + while ((dest|0) < (aligned_dest_end|0) ) { + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + HEAP8[(((dest)+(1))>>0)]=((HEAP8[(((src)+(1))>>0)])|0); + HEAP8[(((dest)+(2))>>0)]=((HEAP8[(((src)+(2))>>0)])|0); + HEAP8[(((dest)+(3))>>0)]=((HEAP8[(((src)+(3))>>0)])|0); + dest = (dest+4)|0; + src = (src+4)|0; + } + } + // The remaining unaligned < 4 byte tail. + while ((dest|0) < (dest_end|0)) { + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + dest = (dest+1)|0; + src = (src+1)|0; + } + return ret|0; +} +function _memmove(dest, src, num) { + dest = dest|0; src = src|0; num = num|0; + var ret = 0; + if (((src|0) < (dest|0)) & ((dest|0) < ((src + num)|0))) { + // Unlikely case: Copy backwards in a safe manner + ret = dest; + src = (src + num)|0; + dest = (dest + num)|0; + while ((num|0) > 0) { + dest = (dest - 1)|0; + src = (src - 1)|0; + num = (num - 1)|0; + HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); + } + dest = ret; + } else { + _memcpy(dest, src, num) | 0; + } + return dest | 0; +} +function _memset(ptr, value, num) { + ptr = ptr|0; value = value|0; num = num|0; + var end = 0, aligned_end = 0, block_aligned_end = 0, value4 = 0; + end = (ptr + num)|0; + + value = value & 0xff; + if ((num|0) >= 67 /* 64 bytes for an unrolled loop + 3 bytes for unaligned head*/) { + while ((ptr&3) != 0) { + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + + aligned_end = (end & -4)|0; + block_aligned_end = (aligned_end - 64)|0; + value4 = value | (value << 8) | (value << 16) | (value << 24); + + while((ptr|0) <= (block_aligned_end|0)) { + HEAP32[((ptr)>>2)]=value4; + HEAP32[(((ptr)+(4))>>2)]=value4; + HEAP32[(((ptr)+(8))>>2)]=value4; + HEAP32[(((ptr)+(12))>>2)]=value4; + HEAP32[(((ptr)+(16))>>2)]=value4; + HEAP32[(((ptr)+(20))>>2)]=value4; + HEAP32[(((ptr)+(24))>>2)]=value4; + HEAP32[(((ptr)+(28))>>2)]=value4; + HEAP32[(((ptr)+(32))>>2)]=value4; + HEAP32[(((ptr)+(36))>>2)]=value4; + HEAP32[(((ptr)+(40))>>2)]=value4; + HEAP32[(((ptr)+(44))>>2)]=value4; + HEAP32[(((ptr)+(48))>>2)]=value4; + HEAP32[(((ptr)+(52))>>2)]=value4; + HEAP32[(((ptr)+(56))>>2)]=value4; + HEAP32[(((ptr)+(60))>>2)]=value4; + ptr = (ptr + 64)|0; + } + + while ((ptr|0) < (aligned_end|0) ) { + HEAP32[((ptr)>>2)]=value4; + ptr = (ptr+4)|0; + } + } + // The remaining bytes. + while ((ptr|0) < (end|0)) { + HEAP8[((ptr)>>0)]=value; + ptr = (ptr+1)|0; + } + return (end-num)|0; +} +function _pthread_mutex_lock(x) { + x = x | 0; + return 0; +} +function _pthread_mutex_unlock(x) { + x = x | 0; + return 0; +} +function _sbrk(increment) { + increment = increment|0; + var oldDynamicTop = 0; + var oldDynamicTopOnChange = 0; + var newDynamicTop = 0; + var totalMemory = 0; + oldDynamicTop = HEAP32[DYNAMICTOP_PTR>>2]|0; + newDynamicTop = oldDynamicTop + increment | 0; + + if (((increment|0) > 0 & (newDynamicTop|0) < (oldDynamicTop|0)) // Detect and fail if we would wrap around signed 32-bit int. + | (newDynamicTop|0) < 0) { // Also underflow, sbrk() should be able to be used to subtract. + abortOnCannotGrowMemory()|0; + ___setErrNo(12); + return -1; + } + + HEAP32[DYNAMICTOP_PTR>>2] = newDynamicTop; + totalMemory = getTotalMemory()|0; + if ((newDynamicTop|0) > (totalMemory|0)) { + if ((enlargeMemory()|0) == 0) { + HEAP32[DYNAMICTOP_PTR>>2] = oldDynamicTop; + ___setErrNo(12); + return -1; + } + } + return oldDynamicTop|0; +} + + +function dynCall_i(index) { + index = index|0; + + return FUNCTION_TABLE_i[index&255]()|0; +} + + +function dynCall_ii(index,a1) { + index = index|0; + a1=a1|0; + return FUNCTION_TABLE_ii[index&255](a1|0)|0; +} + + +function dynCall_iii(index,a1,a2) { + index = index|0; + a1=a1|0; a2=a2|0; + return FUNCTION_TABLE_iii[index&255](a1|0,a2|0)|0; +} + + +function dynCall_iiii(index,a1,a2,a3) { + index = index|0; + a1=a1|0; a2=a2|0; a3=a3|0; + return FUNCTION_TABLE_iiii[index&255](a1|0,a2|0,a3|0)|0; +} + + +function dynCall_v(index) { + index = index|0; + + FUNCTION_TABLE_v[index&511](); +} + + +function dynCall_vi(index,a1) { + index = index|0; + a1=a1|0; + FUNCTION_TABLE_vi[index&511](a1|0); +} + + +function dynCall_vii(index,a1,a2) { + index = index|0; + a1=a1|0; a2=a2|0; + FUNCTION_TABLE_vii[index&255](a1|0,a2|0); +} + + +function dynCall_viii(index,a1,a2,a3) { + index = index|0; + a1=a1|0; a2=a2|0; a3=a3|0; + FUNCTION_TABLE_viii[index&255](a1|0,a2|0,a3|0); +} + + +function dynCall_viiii(index,a1,a2,a3,a4) { + index = index|0; + a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; + FUNCTION_TABLE_viiii[index&255](a1|0,a2|0,a3|0,a4|0); +} + + +function dynCall_viiiii(index,a1,a2,a3,a4,a5) { + index = index|0; + a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; + FUNCTION_TABLE_viiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0); +} + + +function dynCall_viiiiii(index,a1,a2,a3,a4,a5,a6) { + index = index|0; + a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; a6=a6|0; + FUNCTION_TABLE_viiiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0,a6|0); +} + +function b0() { + ; nullFunc_i(0);return 0; +} +function b1(p0) { + p0 = p0|0; nullFunc_ii(1);return 0; +} +function b2(p0,p1) { + p0 = p0|0;p1 = p1|0; nullFunc_iii(2);return 0; +} +function b3(p0,p1,p2) { + p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_iiii(3);return 0; +} +function b4() { + ; nullFunc_v(4); +} +function ___cxa_pure_virtual__wrapper() { + ; ___cxa_pure_virtual(); +} +function b5(p0) { + p0 = p0|0; nullFunc_vi(5); +} +function b6(p0,p1) { + p0 = p0|0;p1 = p1|0; nullFunc_vii(6); +} +function b7(p0,p1,p2) { + p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_viii(7); +} +function b8(p0,p1,p2,p3) { + p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0; nullFunc_viiii(8); +} +function b9(p0,p1,p2,p3,p4) { + p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0; nullFunc_viiiii(9); +} +function b10(p0,p1,p2,p3,p4,p5) { + p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0;p5 = p5|0; nullFunc_viiiiii(10); +} + +// EMSCRIPTEN_END_FUNCS +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,b0,b0,b0,b0,b0,b0,b0,__ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_,b0,b0,b0,b0,b0,b0,b0,b0,b0]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,b1,b1,b1,__ZN6LASZip8getCountEv,b1,__ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_,b1,b1,__ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE,b1,b1,b1,b1,b1,b1,b1,b1]; +var 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 +,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 +,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 +,__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 +,__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 +,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 +,__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 +,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 +,b2,b2,b2,b2,__ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,__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 +,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,b4,b4,b4]; +var 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 +,__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 +,__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 +,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 +,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 +,__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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,b5,b5,b5]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,b6,__ZN6LASZip8getPointEi,b6,b6,b6,b6,b6,b6,b6,b6,b6,__ZN13DynamicLASZip16addFieldFloatingEj,b6,__ZN13DynamicLASZip14addFieldSignedEj,__ZN13DynamicLASZip16addFieldUnsignedEj,__ZN13DynamicLASZip8getPointEi,b6]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,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]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,__ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8,b8,b8,b8,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9]; +var 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 +,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 +,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 +,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 +,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 +,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 +,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 +,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 +,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10]; + + 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 }; +}) +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg, Module.asmLibraryArg, buffer); + +var real___GLOBAL__sub_I_bind_cpp = asm["__GLOBAL__sub_I_bind_cpp"]; asm["__GLOBAL__sub_I_bind_cpp"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real___GLOBAL__sub_I_bind_cpp.apply(null, arguments); +}; + +var real___GLOBAL__sub_I_laz_perf_cpp = asm["__GLOBAL__sub_I_laz_perf_cpp"]; asm["__GLOBAL__sub_I_laz_perf_cpp"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real___GLOBAL__sub_I_laz_perf_cpp.apply(null, arguments); +}; + +var real____cxa_can_catch = asm["___cxa_can_catch"]; asm["___cxa_can_catch"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real____cxa_can_catch.apply(null, arguments); +}; + +var real____cxa_is_pointer_type = asm["___cxa_is_pointer_type"]; asm["___cxa_is_pointer_type"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real____cxa_is_pointer_type.apply(null, arguments); +}; + +var real____errno_location = asm["___errno_location"]; asm["___errno_location"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real____errno_location.apply(null, arguments); +}; + +var real____getTypeName = asm["___getTypeName"]; asm["___getTypeName"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real____getTypeName.apply(null, arguments); +}; + +var real____muldi3 = asm["___muldi3"]; asm["___muldi3"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real____muldi3.apply(null, arguments); +}; + +var real____udivdi3 = asm["___udivdi3"]; asm["___udivdi3"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real____udivdi3.apply(null, arguments); +}; + +var real__bitshift64Ashr = asm["_bitshift64Ashr"]; asm["_bitshift64Ashr"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__bitshift64Ashr.apply(null, arguments); +}; + +var real__bitshift64Lshr = asm["_bitshift64Lshr"]; asm["_bitshift64Lshr"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__bitshift64Lshr.apply(null, arguments); +}; + +var real__bitshift64Shl = asm["_bitshift64Shl"]; asm["_bitshift64Shl"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__bitshift64Shl.apply(null, arguments); +}; + +var real__fflush = asm["_fflush"]; asm["_fflush"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__fflush.apply(null, arguments); +}; + +var real__free = asm["_free"]; asm["_free"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__free.apply(null, arguments); +}; + +var real__i64Add = asm["_i64Add"]; asm["_i64Add"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__i64Add.apply(null, arguments); +}; + +var real__i64Subtract = asm["_i64Subtract"]; asm["_i64Subtract"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__i64Subtract.apply(null, arguments); +}; + +var real__llvm_bswap_i32 = asm["_llvm_bswap_i32"]; asm["_llvm_bswap_i32"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__llvm_bswap_i32.apply(null, arguments); +}; + +var real__malloc = asm["_malloc"]; asm["_malloc"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__malloc.apply(null, arguments); +}; + +var real__memmove = asm["_memmove"]; asm["_memmove"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__memmove.apply(null, arguments); +}; + +var real__pthread_mutex_lock = asm["_pthread_mutex_lock"]; asm["_pthread_mutex_lock"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__pthread_mutex_lock.apply(null, arguments); +}; + +var real__pthread_mutex_unlock = asm["_pthread_mutex_unlock"]; asm["_pthread_mutex_unlock"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__pthread_mutex_unlock.apply(null, arguments); +}; + +var real__sbrk = asm["_sbrk"]; asm["_sbrk"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real__sbrk.apply(null, arguments); +}; + +var real_establishStackSpace = asm["establishStackSpace"]; asm["establishStackSpace"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_establishStackSpace.apply(null, arguments); +}; + +var real_getTempRet0 = asm["getTempRet0"]; asm["getTempRet0"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_getTempRet0.apply(null, arguments); +}; + +var real_setTempRet0 = asm["setTempRet0"]; asm["setTempRet0"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_setTempRet0.apply(null, arguments); +}; + +var real_setThrew = asm["setThrew"]; asm["setThrew"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_setThrew.apply(null, arguments); +}; + +var real_stackAlloc = asm["stackAlloc"]; asm["stackAlloc"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_stackAlloc.apply(null, arguments); +}; + +var real_stackRestore = asm["stackRestore"]; asm["stackRestore"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_stackRestore.apply(null, arguments); +}; + +var real_stackSave = asm["stackSave"]; asm["stackSave"] = function() { + assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); + assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + return real_stackSave.apply(null, arguments); +}; +var __GLOBAL__sub_I_bind_cpp = Module["__GLOBAL__sub_I_bind_cpp"] = asm["__GLOBAL__sub_I_bind_cpp"]; +var __GLOBAL__sub_I_laz_perf_cpp = Module["__GLOBAL__sub_I_laz_perf_cpp"] = asm["__GLOBAL__sub_I_laz_perf_cpp"]; +var ___cxa_can_catch = Module["___cxa_can_catch"] = asm["___cxa_can_catch"]; +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 _bitshift64Ashr = Module["_bitshift64Ashr"] = asm["_bitshift64Ashr"]; +var _bitshift64Lshr = Module["_bitshift64Lshr"] = asm["_bitshift64Lshr"]; +var _bitshift64Shl = Module["_bitshift64Shl"] = asm["_bitshift64Shl"]; +var _fflush = Module["_fflush"] = asm["_fflush"]; +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 _malloc = Module["_malloc"] = asm["_malloc"]; +var _memcpy = Module["_memcpy"] = asm["_memcpy"]; +var _memmove = Module["_memmove"] = asm["_memmove"]; +var _memset = Module["_memset"] = asm["_memset"]; +var _pthread_mutex_lock = Module["_pthread_mutex_lock"] = asm["_pthread_mutex_lock"]; +var _pthread_mutex_unlock = Module["_pthread_mutex_unlock"] = asm["_pthread_mutex_unlock"]; +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_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"]; +; + + + +// === Auto-generated postamble setup entry stuff === + +Module['asm'] = asm; + +if (!Module["intArrayFromString"]) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["intArrayToString"]) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["ccall"]) Module["ccall"] = function() { abort("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["cwrap"]) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["setValue"]) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["getValue"]) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["allocate"]) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!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") }; +if (!Module["Pointer_stringify"]) Module["Pointer_stringify"] = function() { abort("'Pointer_stringify' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["AsciiToString"]) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stringToAscii"]) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["UTF8ArrayToString"]) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["UTF8ToString"]) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stringToUTF8Array"]) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stringToUTF8"]) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["lengthBytesUTF8"]) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["UTF16ToString"]) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stringToUTF16"]) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["lengthBytesUTF16"]) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["UTF32ToString"]) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stringToUTF32"]) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["lengthBytesUTF32"]) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["allocateUTF8"]) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stackTrace"]) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["addOnPreRun"]) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["addOnInit"]) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["addOnPreMain"]) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["addOnExit"]) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["addOnPostRun"]) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["writeStringToMemory"]) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["writeArrayToMemory"]) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["writeAsciiToMemory"]) Module["writeAsciiToMemory"] = function() { abort("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!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") }; +if (!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") }; +if (!Module["FS"]) Module["FS"] = function() { abort("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!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") }; +if (!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") }; +if (!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") }; +if (!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") }; +if (!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") }; +if (!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") }; +if (!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") }; +if (!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") }; +if (!Module["GL"]) Module["GL"] = function() { abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["staticAlloc"]) Module["staticAlloc"] = function() { abort("'staticAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["dynamicAlloc"]) Module["dynamicAlloc"] = function() { abort("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["warnOnce"]) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["loadDynamicLibrary"]) Module["loadDynamicLibrary"] = function() { abort("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["loadWebAssemblyModule"]) Module["loadWebAssemblyModule"] = function() { abort("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["getLEB"]) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["getFunctionTables"]) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["alignFunctionTables"]) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["registerFunctions"]) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["addFunction"]) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["removeFunction"]) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["getFuncWrapper"]) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["prettyPrint"]) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["makeBigInt"]) Module["makeBigInt"] = function() { abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["dynCall"]) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["getCompilerSetting"]) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stackSave"]) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stackRestore"]) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["stackAlloc"]) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Module["intArrayFromBase64"]) Module["intArrayFromBase64"] = function() { abort("'intArrayFromBase64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!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)") } }); +if (!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)") } }); +if (!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)") } }); +if (!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)") } }); +if (!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)") } }); + +if (memoryInitializer) { + if (!isDataURI(memoryInitializer)) { + if (typeof Module['locateFile'] === 'function') { + memoryInitializer = Module['locateFile'](memoryInitializer); + } else if (Module['memoryInitializerPrefixURL']) { + memoryInitializer = Module['memoryInitializerPrefixURL'] + memoryInitializer; + } + } + if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) { + var data = Module['readBinary'](memoryInitializer); + HEAPU8.set(data, GLOBAL_BASE); + } else { + addRunDependency('memory initializer'); + var applyMemoryInitializer = function(data) { + if (data.byteLength) data = new Uint8Array(data); + for (var i = 0; i < data.length; i++) { + assert(HEAPU8[GLOBAL_BASE + i] === 0, "area for memory initializer should not have been touched before it's loaded"); + } + HEAPU8.set(data, GLOBAL_BASE); + // Delete the typed array that contains the large blob of the memory initializer request response so that + // we won't keep unnecessary memory lying around. However, keep the XHR object itself alive so that e.g. + // its .status field can still be accessed later. + if (Module['memoryInitializerRequest']) delete Module['memoryInitializerRequest'].response; + removeRunDependency('memory initializer'); + } + function doBrowserLoad() { + Module['readAsync'](memoryInitializer, applyMemoryInitializer, function() { + throw 'could not load memory initializer ' + memoryInitializer; + }); + } + var memoryInitializerBytes = tryParseAsDataURI(memoryInitializer); + if (memoryInitializerBytes) { + applyMemoryInitializer(memoryInitializerBytes.buffer); + } else + if (Module['memoryInitializerRequest']) { + // a network request has already been created, just use that + 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 { + // If you see this warning, the issue may be that you are using locateFile or memoryInitializerPrefixURL, and defining them in JS. That + // 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. + // Look in your browser's devtools network console to see what's going on. + 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); // it's already here; but, apply it asynchronously + } else { + Module['memoryInitializerRequest'].addEventListener('load', useRequest); // wait for it + } + } else { + // fetch it from the network ourselves + doBrowserLoad(); + } + } +} + + + +/** + * @constructor + * @extends {Error} + * @this {ExitStatus} + */ +function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; +}; +ExitStatus.prototype = new Error(); +ExitStatus.prototype.constructor = ExitStatus; + +var initialStackTop; +var calledMain = false; + +dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!Module['calledRun']) run(); + if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled +} + + + + + +/** @type {function(Array=)} */ +function run(args) { + args = args || Module['arguments']; + + if (runDependencies > 0) { + return; + } + + writeStackCookie(); + + preRun(); + + if (runDependencies > 0) return; // a preRun added a dependency, run will be called later + if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame + + function doRun() { + if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening + Module['calledRun'] = true; + + if (ABORT) return; + + ensureInitRuntime(); + + preMain(); + + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); + + assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function() { + setTimeout(function() { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + checkStackCookie(); +} +Module['run'] = run; + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in NO_FILESYSTEM + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var print = Module['print']; + var printErr = Module['printErr']; + var has = false; + Module['print'] = Module['printErr'] = function(x) { + has = true; + } + try { // it doesn't matter if it fails + var flush = flush_NO_FILESYSTEM; + if (flush) flush(0); + } catch(e) {} + Module['print'] = print; + Module['printErr'] = printErr; + if (has) { + 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.'); + } +} + +function exit(status, implicit) { + checkUnflushedContent(); + + // if this is just main exit-ing implicitly, and the status is 0, then we + // don't need to do anything here and can just leave. if the status is + // non-zero, though, then we need to report it. + // (we may have warned about this earlier, if a situation justifies doing so) + if (implicit && Module['noExitRuntime'] && status === 0) { + return; + } + + if (Module['noExitRuntime']) { + // if exit() was called, we may warn the user if the runtime isn't actually being shut down + if (!implicit) { + 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)'); + } + } else { + + ABORT = true; + EXITSTATUS = status; + STACKTOP = initialStackTop; + + exitRuntime(); + + if (Module['onExit']) Module['onExit'](status); + } + + if (ENVIRONMENT_IS_NODE) { + process['exit'](status); + } + Module['quit'](status, new ExitStatus(status)); +} +Module['exit'] = exit; + +var abortDecorators = []; + +function abort(what) { + if (Module['onAbort']) { + Module['onAbort'](what); + } + + if (what !== undefined) { + Module.print(what); + Module.printErr(what); + what = JSON.stringify(what) + } else { + what = ''; + } + + ABORT = true; + EXITSTATUS = 1; + + var extra = ''; + var output = 'abort(' + what + ') at ' + stackTrace() + extra; + if (abortDecorators) { + abortDecorators.forEach(function(decorator) { + output = decorator(output, what); + }); + } + throw output; +} +Module['abort'] = abort; + +// {{PRE_RUN_ADDITIONS}} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} + + +Module["noExitRuntime"] = true; + +run(); + +// {{POST_RUN_ADDITIONS}} + + + + + +// {{MODULE_ADDITIONS}} + + + diff --git a/libs/potree/LICENSE b/libs/potree/LICENSE new file mode 100644 index 0000000..a1e6a6e --- /dev/null +++ b/libs/potree/LICENSE @@ -0,0 +1,33 @@ + +============ +== POTREE == +============ + +http://potree.org + +Copyright (c) 2011-2020, Markus Schütz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +2. 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. + +THIS 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 OWNER 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. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. diff --git a/libs/potree/lazylibs/geopackage/LICENSE b/libs/potree/lazylibs/geopackage/LICENSE new file mode 100644 index 0000000..f81e84a --- /dev/null +++ b/libs/potree/lazylibs/geopackage/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 National Geospatial-Intelligence Agency + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/libs/potree/lazylibs/geopackage/README.md b/libs/potree/lazylibs/geopackage/README.md new file mode 100644 index 0000000..020db55 --- /dev/null +++ b/libs/potree/lazylibs/geopackage/README.md @@ -0,0 +1,259 @@ +# GeoPackage JS + +GeoPackage JS is an implementation of the OGC GeoPackage spec. This library works in both the browser and Node 4+. + +### Demo ### +[GeoPackage JS Demo Page](http://ngageoint.github.io/geopackage-js/) + +Cloning this repository and opening the docs/index.html in your browser will run the demo locally. + +### Installation ### + +[![Build Status](https://travis-ci.org/ngageoint/geopackage-js.svg?branch=master)](https://travis-ci.org/ngageoint/geopackage-js) +[![NPM](https://img.shields.io/npm/v/@ngageoint/geopackage.svg)](https://www.npmjs.com/package/@ngageoint/geopackage) +[![Coverage Status](https://coveralls.io/repos/github/ngageoint/geopackage-js/badge.svg)](https://coveralls.io/github/ngageoint/geopackage-js) + +```sh +$ npm install @ngageoint/geopackage +``` + +#### GeoPackage JS Library #### + +The [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/). + +### Pull Requests ### +If 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. + +Software 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. + +### About ### + +[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. + +The 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). + +### Changelog + +##### 2.1.0 + +- Implementation of the Feature Style Extension and Contents ID Extension + +##### 2.0.8 + +- Checks for Electron when returning a tile creator + +##### 2.0 + +- All new API utilizing Promises + +##### 1.1.4 + +- Adds a method to retrieve tiles in EPSG:4326 + +##### 1.1.3 + +- Fixes issue #115 + +##### 1.1.2 + +- fix case where GeoPackage Zoom does not correspond to the web map zoom + +##### 1.1.1 + +- fix more instances of proj4 bug for react +- fixed tile generation for images with different x and y pixel densities + +##### 1.1.0 + +- accept pull request adding support for react +- fix bug with projected tiles that spanned the date line + +##### 1.0.25 + +- ensure we use proj4 2.4.3 instead of 2.4.4 + +##### 1.0.22 + +- Fixed bug where querying for indexed features only returned the geometry instead of the entire feature + +##### 1.0.19 + +- Remove dependency on Lwip + +### Usage ### + +View examples using [Bower](https://github.com/ngageoint/geopackage-js/tree/master/docs/bower) and [Browserify](https://github.com/ngageoint/geopackage-js/tree/master/docs) + +View the latest [docs](http://ngageoint.github.io/geopackage-js/jsdoc/module-geoPackage-GeoPackage.html) (currently being updated). + +#### Browser Usage #### +```javascript + +// attach this method to a file input onchange event +window.loadGeoPackage = function(files) { + var f = files[0]; + var r = new FileReader(); + r.onload = function() { + var array = new Uint8Array(r.result); + loadByteArray(array); + } + r.readAsArrayBuffer(f); +} + +function loadByteArray(array, callback) { + var db = new SQL.Database(array); + GeoPackageConnection.connectWithDatabase(db, function(err, connection) { + var geoPackage = new GeoPackage('', '', connection); + + // Now you can operate on the GeoPackage + + // get the tile table names + geoPackage.getTileTables(function(err, tileTableNames) { + // tileTableNames is an array of all tile table names + + // get the info for the first table + geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) { + geoPackage.getInfoForTable(tileDao, function(err, info) { + // do something with the tile table info + }); + + // draw a tile into a canvas for an XYZ tile + var canvas = canvasFromSomewhere; + var gpr = new GeoPackageTileRetriever(tileDao, 256, 256); + var x = 0; + var y = 0; + var zoom = 0; + + console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); + gpr.drawTileIn(x, y, zoom, canvas, function() { + console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); + }); + + // or get a tile base64 data URL for an XYZ tile + gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) { + console.log('got the base64 data url'); + }); + + // or get a tile from a GeoPackage tile column and tile row + tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) { + var tileData = tile.getTileData(); // the raw bytes from the GeoPackage + }); + + }); + }); + + // get the feature table names + geoPackage.getFeatureTables(function(err, featureTableNames) { + // featureTableNames is an array of all feature table names + + // get the info for the first table + geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) { + geoPackage.getInfoForTable(featureDao, function(err, info) { + // do something with the feature table info + }); + + // query for all features + featureDao.queryForEach(function(err, row, rowDone) { + var feature = featureDao.getFeatureRow(row); + var geometry = currentRow.getGeometry(); + if (geometry) { + var geom = geometry.geometry; + var geoJson = geometry.geometry.toGeoJSON(); + + geoJson.properties = {}; + for (var key in feature.values) { + if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) { + var column = info.columnMap[key]; + geoJson.properties[column.displayName] = currentRow.values[key]; + } + } + } + rowDone(); + }); + }); + }); + }); +} + +``` + +#### NodeJS Usage #### + +```javascript +var GeoPackageAPI = require('@ngageoint/geopackage') + , GeoPackageManager = GeoPackageAPI.GeoPackageManager + , GeoPackageConnection = GeoPackageAPI.GeoPackageConnection + , GeoPackageTileRetriever = GeoPackageAPI.GeoPackageTileRetriever; + +GeoPackageAPI.open(filename, function(err, geoPackage) { + + // Now you can operate on the GeoPackage + + // get the tile table names + geoPackage.getTileTables(function(err, tileTableNames) { + // tileTableNames is an array of all tile table names + + // get the info for the first table + geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) { + geoPackage.getInfoForTable(tileDao, function(err, info) { + // do something with the tile table info + }); + + // draw a tile into a canvas for an XYZ tile + var canvas = canvasFromSomewhere; + var gpr = new GeoPackageTileRetriever(tileDao, 256, 256); + var x = 0; + var y = 0; + var zoom = 0; + + console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); + gpr.drawTileIn(x, y, zoom, canvas, function() { + console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); + }); + + // or get a tile base64 data URL for an XYZ tile + gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) { + console.log('got the base64 data url'); + }); + + // or get a tile from a GeoPackage tile column and tile row + tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) { + var tileData = tile.getTileData(); // the raw bytes from the GeoPackage + }); + + }); + }); + + // get the feature table names + geoPackage.getFeatureTables(function(err, featureTableNames) { + // featureTableNames is an array of all feature table names + + // get the info for the first table + geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) { + geoPackage.getInfoForTable(featureDao, function(err, info) { + // do something with the feature table info + }); + + // query for all features + featureDao.queryForEach(function(err, row, rowDone) { + var feature = featureDao.getFeatureRow(row); + var geometry = currentRow.getGeometry(); + if (geometry) { + var geom = geometry.geometry; + var geoJson = geometry.geometry.toGeoJSON(); + + geoJson.properties = {}; + for (var key in feature.values) { + if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) { + var column = info.columnMap[key]; + geoJson.properties[column.displayName] = currentRow.values[key]; + } + } + } + rowDone(); + }); + }); + }); +}); + +``` diff --git a/libs/potree/lazylibs/geopackage/geopackage.js b/libs/potree/lazylibs/geopackage/geopackage.js new file mode 100644 index 0000000..c9a8edc --- /dev/null +++ b/libs/potree/lazylibs/geopackage/geopackage.js @@ -0,0 +1,80817 @@ +(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} + */ +GeoPackageAPI.iterateGeoJSONFeaturesFromTable = function(geopackage, table) { + var featureDao = geopackage.getFeatureDao(table); + if (!featureDao) { + throw new Error('No Table exists with the name ' + table); + } + + var columnMap = GeoPackageAPI.createDataColumnMap(featureDao); + + var srs = featureDao.getSrs(); + + var iterator = featureDao.queryForEach(); + + return { + srs: srs, + featureDao: featureDao, + results: { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var featureRow; + var geometry; + + while(!nextRow.done && !geometry) { + featureRow = featureDao.getRow(nextRow.value); + return { + value: GeoPackageAPI.parseFeatureRowIntoGeoJSON(featureRow, srs, columnMap), + done: false + }; + } + } + return { + done: true + } + }.bind(this) + } + }; +}; + +/** + * Gets a GeoJSON feature from the table by id + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the table to get the feature from + * @param {Number} featureId ID of the feature + * @param {Function} callback called with an error if one occurred and the GeoJSON feature + */ +GeoPackageAPI.getFeature = function(geopackage, table, featureId) { + var srs; + var featureDao = geopackage.getFeatureDao(table) + srs = featureDao.getSrs(); + var feature = featureDao.queryForId(featureId); + if (!feature) { + var features = featureDao.queryForAllEq('_feature_id', featureId) + if (features.length) { + feature = featureDao.getRow(features[0]); + } else { + var features = featureDao.queryForAllEq('_properties_id', featureId) + if (features.length) { + feature = featureDao.getRow(features[0]); + } + } + } + if (feature) { + return GeoPackageAPI.parseFeatureRowIntoGeoJSON(feature, srs); + } +}; + +GeoPackageAPI.parseFeatureRowIntoGeoJSON = function(featureRow, srs, columnMap) { + var geoJson = { + type: 'Feature', + properties: {} + }; + var geometry = featureRow.getGeometry(); + if (geometry && geometry.geometry) { + var geom = geometry.geometry; + var geoJsonGeom = geometry.geometry.toGeoJSON(); + if (srs.definition && srs.definition !== 'undefined' && (srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id) != 'EPSG:4326') { + // geoJsonGeom = reproject.reproject(geoJsonGeom, srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id, 'EPSG:4326'); + geoJsonGeom = reproject.reproject(geoJsonGeom, srs.getProjection(), 'EPSG:4326'); + + } + geoJson.geometry = geoJsonGeom; + } + + for (var key in featureRow.values) { + if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') { + if (key.toLowerCase() == '_feature_id') { + geoJson.id = featureRow.values[key]; + } else if (key.toLowerCase() == '_properties_id') { + geoJson.properties[key.substring(12)] = featureRow.values[key]; + } else if (columnMap && columnMap[key]) { + geoJson.properties[columnMap[key].displayName] = featureRow.values[key]; + } else { + geoJson.properties[key] = featureRow.values[key]; + } + } else if (featureRow.getGeometryColumn().name === key) { + // geoJson.properties[key] = geometry && !geometry.geometryError ? 'Valid' : geometry.geometryError; + } + } + geoJson.id = geoJson.id || featureRow.getId(); + return geoJson; +} + + +/** + * Gets a tile from the specified table + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the table to get the tile from + * @param {Number} zoom zoom level of the tile + * @param {Number} tileRow row of the tile + * @param {Number} tileColumn column of the tile + * + * @todo jsdoc return value + */ +GeoPackageAPI.getTileFromTable = function(geopackage, table, zoom, tileRow, tileColumn) { + var tileDao = geopackage.getTileDao(table); + return tileDao.queryForTile(tileColumn, tileRow, zoom); +}; + +/** + * Gets the tiles in the EPSG:4326 bounding box + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the tile table + * @param {Number} zoom Zoom of the tiles to query for + * @param {Number} west EPSG:4326 western boundary + * @param {Number} east EPSG:4326 eastern boundary + * @param {Number} south EPSG:4326 southern boundary + * @param {Number} north EPSG:4326 northern boundary + * @param {Function} callback called with an error if one occurred and a tiles object describing the tiles + */ +GeoPackageAPI.getTilesInBoundingBox = function(geopackage, table, zoom, west, east, south, north) { + var tiles = {}; + + var tileDao = geopackage.getTileDao(table); + if (zoom < tileDao.minZoom || zoom > tileDao.maxZoom) { + return + } + tiles.columns = []; + for (var i = 0; i < tileDao.table.columns.length; i++) { + var column = tileDao.table.columns[i]; + tiles.columns.push({ + index: column.index, + name: column.name, + max: column.max, + min: column.min, + notNull: column.notNull, + primaryKey: column.primaryKey + }); + } + var srs = tileDao.getSrs(); + tiles.srs = srs; + tiles.tiles = []; + + var tms = tileDao.tileMatrixSet; + var tm = tileDao.getTileMatrixWithZoomLevel(zoom); + if (!tm) { + return tiles; + } + var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north); + tiles.west = Math.max(-180, west).toFixed(2); + tiles.east = Math.min(east, 180).toFixed(2); + tiles.south = south.toFixed(2); + tiles.north = north.toFixed(2); + tiles.zoom = zoom; + mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id); + + var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox); + + var iterator = tileDao.queryByTileGrid(grid, zoom); + + for (var row of iterator ) { + var tile = {}; + tile.tableName = table; + tile.id = row.getId(); + + var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow()); + tile.minLongitude = tileBB.minLongitude; + tile.maxLongitude = tileBB.maxLongitude; + tile.minLatitude = tileBB.minLatitude; + tile.maxLatitude = tileBB.maxLatitude; + tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id; + tile.values = []; + for (var i = 0; i < tiles.columns.length; i++) { + var value = row.values[tiles.columns[i].name]; + if (tiles.columns[i].name === 'tile_data') { + tile.values.push('data'); + } else + if (value === null || value === 'null') { + tile.values.push(''); + } else { + tile.values.push(value.toString()); + tile[tiles.columns[i].name] = value; + } + } + tiles.tiles.push(tile); + } + return tiles; +}; + +/** + * Gets the tiles in the EPSG:4326 bounding box + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the tile table + * @param {Number} zoom Zoom of the tiles to query for + * @param {Number} west EPSG:4326 western boundary + * @param {Number} east EPSG:4326 eastern boundary + * @param {Number} south EPSG:4326 southern boundary + * @param {Number} north EPSG:4326 northern boundary + * @param {Function} callback called with an error if one occurred and a tiles object describing the tiles + */ +GeoPackageAPI.getTilesInBoundingBoxWebZoom = function(geopackage, table, webZoom, west, east, south, north) { + var tiles = {}; + + var tileDao = geopackage.getTileDao(table); + if (webZoom < tileDao.minWebZoom || webZoom > tileDao.maxWebZoom) { + return; + } + tiles.columns = []; + for (var i = 0; i < tileDao.table.columns.length; i++) { + var column = tileDao.table.columns[i]; + tiles.columns.push({ + index: column.index, + name: column.name, + max: column.max, + min: column.min, + notNull: column.notNull, + primaryKey: column.primaryKey + }); + } + var srs = tileDao.getSrs(); + tiles.srs = srs; + tiles.tiles = []; + + var zoom = tileDao.webZoomToGeoPackageZoom(webZoom); + + var tms = tileDao.tileMatrixSet; + var tm = tileDao.getTileMatrixWithZoomLevel(zoom); + if (!tm) { + return tiles; + } + var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north); + tiles.west = Math.max(-180, west).toFixed(2); + tiles.east = Math.min(east, 180).toFixed(2); + tiles.south = south.toFixed(2); + tiles.north = north.toFixed(2); + tiles.zoom = zoom; + mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id); + + var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox); + + var iterator = tileDao.queryByTileGrid(grid, zoom); + for (var row of iterator) { + var tile = {}; + tile.tableName = table; + tile.id = row.getId(); + + var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow()); + tile.minLongitude = tileBB.minLongitude; + tile.maxLongitude = tileBB.maxLongitude; + tile.minLatitude = tileBB.minLatitude; + tile.maxLatitude = tileBB.maxLatitude; + tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id; + tile.values = []; + for (var i = 0; i < tiles.columns.length; i++) { + var value = row.values[tiles.columns[i].name]; + if (tiles.columns[i].name === 'tile_data') { + tile.values.push('data'); + } else + if (value === null || value === 'null') { + tile.values.push(''); + } else { + tile.values.push(value.toString()); + tile[tiles.columns[i].name] = value; + } + } + tiles.tiles.push(tile); + } + return tiles; +}; + +GeoPackageAPI.getFeatureTileFromXYZ = function(geopackage, table, x, y, z, width, height) { + x = Number(x); + y = Number(y); + z = Number(z); + width = Number(width); + height = Number(height); + var featureDao = geopackage.getFeatureDao(table) + if (!featureDao) return; + var ft = new FeatureTile(featureDao, width, height); + return ft.drawTile(x, y, z); +} + +/** + * Gets the features in the EPSG:4326 bounding box + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the feature table + * @param {Number} west EPSG:4326 western boundary + * @param {Number} east EPSG:4326 eastern boundary + * @param {Number} south EPSG:4326 southern boundary + * @param {Number} north EPSG:4326 northern boundary + */ +GeoPackageAPI.getGeoJSONFeaturesInTile = function(geopackage, table, x, y, z, skipVerification) { + var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z); + var bb = webMercatorBoundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326'); + return geopackage.indexFeatureTable(table) + .then(function(indexed) { + return geopackage.getFeatureDao(table); + }) + .then(function(featureDao) { + if (!featureDao) return; + var features = []; + var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(bb, skipVerification); + for (var feature of iterator) { + features.push(feature); + } + return features; + }) + .catch(function(error) { + console.log('error', error); + }); +} + +GeoPackageAPI.convertPBFToVectorTile = function(pbf) { + return new VectorTile.VectorTile(new Pbf(pbf)); +} + +/** + * Gets a mapbox VectorTile for the x y z web mercator tile specified + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table table name + * @param {Number} x x tile + * @param {Number} y y tile + * @param {Number} z web zoom + * @return {VectorTile} + */ +GeoPackageAPI.getVectorTile = function(geopackage, table, x, y, z) { + return GeoPackageAPI.getVectorTileProtobuf(geopackage, table, x, y, z) + .then(function(pbf) { + return new VectorTile.VectorTile(new Pbf(pbf)); + }); +} + +/** + * Gets a protobuf for the x y z web mercator tile specified + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table table name + * @param {Number} x x tile + * @param {Number} y y tile + * @param {Number} z web zoom + * @return {Protobuf} + */ +GeoPackageAPI.getVectorTileProtobuf = function(geopackage, table, x, y, z) { + return GeoPackageAPI.getGeoJSONFeaturesInTile(geopackage, table, x, y, z, true) + .then(function(features) { + var featureCollection = { + type: 'FeatureCollection', + features: features + }; + var tileBuffer = 8; + var tileIndex = geojsonvt(featureCollection, {buffer: tileBuffer * 8, maxZoom: z}); + var layer = {}; + var tile = tileIndex.getTile(z, x, y); + + var gjvt = {}; + + if (tile) { + gjvt[table] = tile; + } else { + gjvt[table] = {features:[]}; + } + + return vtpbf.fromGeojsonVt(gjvt); + }); +} + +/** + * Gets the features in the EPSG:4326 bounding box + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the feature table + * @param {Number} west EPSG:4326 western boundary + * @param {Number} east EPSG:4326 eastern boundary + * @param {Number} south EPSG:4326 southern boundary + * @param {Number} north EPSG:4326 northern boundary + */ +GeoPackageAPI.getFeaturesInBoundingBox = function(geopackage, table, west, east, south, north) { + return geopackage.indexFeatureTable(table) + .then(function(indexed) { + var featureDao = geopackage.getFeatureDao(table); + if (!featureDao) throw new Error('Unable to find table ' + table); + var features = []; + var bb = new BoundingBox(west, east, south, north); + var iterator = featureDao.queryIndexedFeaturesWithBoundingBox(bb); + return iterator; + }); +} + +/** + * Gets a tile image for an XYZ tile pyramid location + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the table containing the tiles + * @param {Number} x x index of the tile + * @param {Number} y y index of the tile + * @param {Number} z zoom level of the tile + * @param {Number} width width of the resulting tile + * @param {Number} height height of the resulting tile + * @return {Promise} + */ +GeoPackageAPI.getTileFromXYZ = function(geopackage, table, x, y, z, width, height) { + x = Number(x); + y = Number(y); + z = Number(z); + width = Number(width); + height = Number(height); + var tileDao = geopackage.getTileDao(table); + var retriever = new GeoPackageTileRetriever(tileDao, width, height); + return retriever.getTile(x, y, z); +}; + +/** + * Draws an XYZ tile pyramid location into the provided canvas + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the table containing the tiles + * @param {Number} x x index of the tile + * @param {Number} y y index of the tile + * @param {Number} z zoom level of the tile + * @param {Number} width width of the resulting tile + * @param {Number} height height of the resulting tile + * @param {Canvas} canvas canvas element to draw the tile into + */ +GeoPackageAPI.drawXYZTileInCanvas = function(geopackage, table, x, y, z, width, height, canvas) { + x = Number(x); + y = Number(y); + z = Number(z); + width = Number(width); + height = Number(height); + var tileDao = geopackage.getTileDao(table) + var retriever = new GeoPackageTileRetriever(tileDao, width, height); + return retriever.drawTileIn(x, y, z, canvas); +}; + +/** + * Draws a tile specified by the bounds in EPSG:4326 into the canvas + * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object + * @param {String} table name of the table containing the tiles + * @param {Number} minLat minimum latitude bounds of tile + * @param {Number} minLon minimum longitude bounds of tile + * @param {Number} maxLat maximum latitude bounds of tile + * @param {Number} maxLon maximum longitude bounds of tile + * @param {Number} z zoom level of the tile + * @param {Number} width width of the resulting tile + * @param {Number} height height of the resulting tile + * @param {Canvas} canvas canvas element to draw the tile into + */ +GeoPackageAPI.draw4326TileInCanvas = function(geopackage, table, minLat, minLon, maxLat, maxLon, z, width, height, canvas) { + z = Number(z); + width = Number(width); + height = Number(height); + var tileDao = geopackage.getTileDao(table); + var retriever = new GeoPackageTileRetriever(tileDao, width, height); + var bounds = new BoundingBox(minLon, maxLon, minLat, maxLat); + return retriever.drawTileWithWgs84BoundsInProjection(bounds, z, 'EPSG:4326', canvas); +} + + +/////////////////// +// JSDoc Globals // +/////////////////// + +/** + * @callback geopackageCallback + * @param {?Error} error + * @param {module:geoPackage~GeoPackage=} geopackage a GeoPackage instance + */ + + /** + * An integer database key referencing a {@link module:core/srs~SpatialReferenceSystem} row in a GeoPackage database + * @typedef {number} SRSRef + * @see https://www.geopackage.org/spec121/index.html#spatial_ref_sys + */ + +}).call(this,require('_process')) +},{"./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){ +/** + * @module attributes/attributeDao + */ + +var UserDao = require('../user/userDao') + , AttributeRow = require('./attributeRow'); + +var util = require('util'); + +/** + * Attribute DAO for reading attribute user data tables + * @class AttributeDao + * @extends {module:user/userDao~UserDao} + * @param {module:geoPackage~GeoPackage} geopackage geopackage object + * @param {module:attributes/attributeTable~AttributeTable} table attribute table + */ +var AttributeDao = function(geoPackage, table) { + UserDao.call(this, geoPackage, table); + if (!table.contents) { + throw new Error('Attributes table has null Contents'); + } + /** + * Contents of this AttributeDao + * @member {module:core/contents~Contents} + */ + this.contents = table.contents; +} + +util.inherits(AttributeDao, UserDao); + +/** + * Create a new attribute row with the column types and values + * @param {Array} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {moule:attributes/attributeRow~AttributeRow} attribute row + */ +AttributeDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new AttributeRow(this.table, columnTypes, values); +}; + +/** + * Create a new attribute row + * @return {module:attributes/attributeRow~AttributeRow} attribute row + */ +AttributeDao.prototype.newRow = function () { + return new AttributeRow(this.table); +}; + +module.exports = AttributeDao; + +},{"../user/userDao":106,"./attributeRow":4,"util":343}],4:[function(require,module,exports){ +/** + * AttributeRow module. + * @module attributes/attributeRow + */ + +var UserRow = require('../user/userRow'); +var util = require('util'); + +/** + * Attribute Row containing the values from a single result set row + * @class AttributeRow + * @extends module:user/userRow~UserRow + * @param {module:attributes/attributeTable~AttributeTable} attributeTable attribute table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + */ +var AttributeRow = function(attributeTable, columnTypes, values) { + UserRow.call(this, attributeTable, columnTypes, values); +} + +util.inherits(AttributeRow, UserRow); + +module.exports = AttributeRow; + +},{"../user/userRow":107,"util":343}],5:[function(require,module,exports){ +/** + * @module attributes/attributeTable + */ + +var UserTable = require('../user/userTable') + , ContentsDao = require('../core/contents').ContentsDao; + +var util = require('util'); + +/** + * Represents a user attribute table + * @class AttributeTable + * @extends {module:user/userTable~UserTable} + * @constructor + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns attribute columns + */ +var AttributeTable = function(tableName, columns) { + /** + * Contents of this AttributeTable + * @member {module:core/contents~Contents} + */ + this.contents; + + UserTable.call(this, tableName, columns); +} + +util.inherits(AttributeTable, UserTable); + +/** + * Set the contents + * @param {module:core/contents~Contents} contents the contents + */ +AttributeTable.prototype.setContents = function(contents) { + this.contents = contents; + if (contents.data_type !== ContentsDao.GPKG_CDT_ATTRIBUTES_NAME) { + throw new Error('The Contents of an Attributes Table must have a data type of ' + ContentsDao.GPKG_CDT_ATTRIBUTES_NAME); + } +} + +module.exports = AttributeTable; + +},{"../core/contents":8,"../user/userTable":108,"util":343}],6:[function(require,module,exports){ +/** + * attributeTableReader module. + * @module attributes/attributeTableReader + */ + +var UserTableReader = require('../user/userTableReader') + , AttributeTable = require('./attributeTable') + , DataTypes = require('../db/dataTypes'); + +var util = require('util'); + +/** +* Reads the metadata from an existing attribute table +* @class AttributeTableReader +* @extends {module:user/userTableReader~UserTableReader} +* @classdesc Reads the metadata from an existing attributes table +*/ +var AttributeTableReader = function(tableName) { + UserTableReader.call(this, tableName); +} + +util.inherits(AttributeTableReader, UserTableReader); + +/** + * @inheritdoc + */ +AttributeTableReader.prototype.createTable = function (tableName, columns) { + return new AttributeTable(tableName, columns); +}; + +module.exports = AttributeTableReader; + +},{"../db/dataTypes":14,"../user/userTableReader":109,"./attributeTable":5,"util":343}],7:[function(require,module,exports){ +var proj4 = require('proj4'); +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +/** + * Create a new bounding box + * @class BoundingBox + * @param {Number} minLongitudeOrBoundingBox minimum longitude or bounding box to copy (west) + * @param {Number} maxLongitude maximum longitude (east) + * @param {Number} minLatitude Minimum latitude (south) + * @param {Number} maxLatitude Maximum latitude (north) + * @return {BoundingBox} newly constructed bounding box + */ +var BoundingBox = function(minLongitudeOrBoundingBox, maxLongitude, minLatitude, maxLatitude) { + // if there is a second argument the first argument is the minLongitude + if (maxLongitude !== undefined) { + this.minLongitude = minLongitudeOrBoundingBox; + this.maxLongitude = maxLongitude; + this.minLatitude = minLatitude; + this.maxLatitude = maxLatitude; + } else { + var boundingBox = minLongitudeOrBoundingBox; + this.minLongitude = boundingBox.minLongitude; + this.maxLongitude = boundingBox.maxLongitude; + this.minLatitude = boundingBox.minLatitude; + this.maxLatitude = boundingBox.maxLatitude; + } +} + +module.exports = BoundingBox; + +/** + * Build a Geometry Envelope from the bounding box + * + * @return geometry envelope + */ +BoundingBox.prototype.buildEnvelope = function () { + return { + minY: this.minLatitude, + minX: this.minLongitude, + maxY: this.maxLatitude, + maxX: this.maxLongitude + }; +}; + +BoundingBox.prototype.toGeoJSON = function() { + return { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [this.minLongitude,this.minLatitude], + [this.maxLongitude,this.minLatitude], + [this.maxLongitude,this.maxLatitude], + [this.minLongitude,this.maxLatitude], + [this.minLongitude,this.minLatitude] + ] + ] + } + }; +} + +/** + * Determine if equal to the provided bounding box + * @param {BoundingBox} boundingBox bounding boundingBox + * @return {Boolean} true if equal, false if not + */ +BoundingBox.prototype.equals = function (boundingBox) { + if (!boundingBox) { + return false; + } + + if (this === boundingBox) { + return true; + } + + return this.maxLatitude === boundingBox.maxLatitude + && this.minLatitude === boundingBox.minLatitude + && this.maxLongitude === boundingBox.maxLongitude + && this.maxLatitude === boundingBox.maxLatitude; +}; + +BoundingBox.prototype.projectBoundingBox = function (from, to) { + if (from && from !== 'undefined' && to && to !== 'undefined') { + var toProj = to.toUpperCase ? proj4(to) : to; + var fromProj = from.toUpperCase ? proj4(from) : from; + if (to.toUpperCase && to.toUpperCase() === 'EPSG:3857' && from.toUpperCase && from.toUpperCase() === 'EPSG:4326') { + this.maxLatitude = this.maxLatitude > 85.0511 ? 85.0511 : this.maxLatitude; + this.minLatitude = this.minLatitude < -85.0511 ? -85.0511 : this.minLatitude; + this.minLongitude = this.minLongitude < -180.0 ? -180.0 : this.minLongitude; + this.maxLongitude = this.maxLongitude > 180.0 ? 180.0 : this.maxLongitude; + } + var min = proj4(from, to, [this.minLongitude, this.minLatitude]); + var max = proj4(from, to, [this.maxLongitude, this.maxLatitude]); + var projected = new BoundingBox(min[0], max[0], min[1], max[1]); + return projected; + } else { + return this; + } +}; + + + +// /** +// * Get a Map Rectangle representing the bounding box +// * +// * @return map rectangle +// */ +// -(MKMapRect) getMapRect; +// +// /** +// * Get a Coordinate Region of the bounding box +// * +// * @return Coordinate Region +// */ +// -(MKCoordinateRegion) getCoordinateRegion; +// +// /** +// * Get the Span of the bounding box +// * +// * @return Span +// */ +// -(MKCoordinateSpan) getSpan; +// +// /** +// * Get the center of the bounding box +// * +// * @return center location +// */ +// -(CLLocationCoordinate2D) getCenter; +// +// /** +// * Get with width and height of the bounding box in meters +// * +// * @return bounding box size +// */ +// -(struct GPKGBoundingBoxSize) sizeInMeters; + +},{"proj4":285}],8:[function(require,module,exports){ +/** + * Contents module. + * @module core/contents + */ + +var Dao = require('../../dao/dao') + , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao + , SpatialReferenceSystemDao = require('../srs').SpatialReferenceSystemDao + , TileMatrixDao = require('../../tiles/matrix').TileMatrixDao + , TileMatrixSetDao = require('../../tiles/matrixset').TileMatrixSetDao + , ColumnValues = require('../../dao/columnValues'); + +var util = require('util'); + +/** + * The Contents class models rows in the [`gpkg_contents`](https://www.geopackage.org/spec121/index.html#_contents) + * table. The contents table stores identifying and descriptive information + * that an application can display to a user in a menu of geospatial data + * available in a GeoPackage. + * @class Contents + * @see https://www.geopackage.org/spec121/index.html#_contents + */ +var Contents = function() { + /** + * the name of the tiles, or feature table + * @member {string} + */ + this.table_name; + + /** + * Type of data stored in the table:. “features” per clause Features, + * “tiles” per clause Tiles, or an implementer-defined value for other data + * tables per clause in an Extended GeoPackage. + * @member {string} + */ + this.data_type; + + /** + * A human-readable identifier (e.g. short name) for the table_name content + * @member {string} + */ + this.identifier; + + /** + * A human-readable description for the table_name content + * @member {string} + */ + this.description; + + /** + * timestamp value in ISO 8601 format as defined by the strftime function + * %Y-%m-%dT%H:%M:%fZ format string applied to the current time + * @member {Date} + */ + this.last_change; + + /** + * Bounding box minimum easting or longitude for all content in table_name + * @member {Number} + */ + this.min_x; + + /** + * Bounding box minimum northing or latitude for all content in table_name + * @member {Number} + */ + this.min_y; + + /** + * Bounding box maximum easting or longitude for all content in table_name + * @member {Number} + */ + this.max_x; + + /** + * Bounding box maximum northing or latitude for all content in table_name + * @member {Number} + */ + this.max_y; + + /** + * Unique identifier for each Spatial Reference System within a GeoPackage + * @member {SRSRef} + */ + this.srs_id; +} + +/** + * Contents object. Provides identifying and descriptive information that an + * application can display to a user in a menu of geospatial data that is + * available for access and/or update. + * @class ContentsDao + * @extends {module:dao/dao~Dao} + */ +var ContentsDao = function(geoPackage) { + Dao.call(this, geoPackage); +} + +util.inherits(ContentsDao, Dao); + +/** + * Creates a new Contents object + * @return {module:core/contents~Contents} new Contents object + */ +ContentsDao.prototype.createObject = function () { + return new Contents(); +}; + +/** + * Get table names by table type + * @param {string} [tableType] table type to query for + * @return {string[]} Array of table names + */ +ContentsDao.prototype.getTables = function(tableType) { + var results; + if (tableType) { + var fieldValues = new ColumnValues(); + fieldValues.addColumn(ContentsDao.COLUMN_DATA_TYPE, tableType); + results = this.queryForColumns('table_name', fieldValues); + } else { + results = this.queryForColumns('table_name'); + } + var tableNames = []; + for (var i = 0; i < results.length; i++) { + tableNames.push(results[i].table_name); + } + return tableNames; +} + +/** + * Returns the proj4 projection for the Contents + * @param {module:core/contents~Contents} contents Contents to get the projection from + * @return {proj4} proj4 projection + */ +ContentsDao.prototype.getProjection = function (contents) { + var srs = this.getSrs(contents); + var srsDao = this.geoPackage.getSpatialReferenceSystemDao(); + return srsDao.getProjection(srs); +}; + +/** + * Get the SpatialReferenceSystemDao for the Contents + * @param {module:core/contents~Contents} contents Contents to get the SpatialReferenceSystemDao from + * @return {module:core/srs~SpatialReferenceSystemDao} + */ +ContentsDao.prototype.getSrs = function (contents) { + var dao = this.geoPackage.getSpatialReferenceSystemDao(); + return dao.queryForId(contents.srs_id); +}; + +/** + * Get the GeometryColumns for the Contents + * @param {module:core/contents~Contents} contents Contents + * @return {module:features/columns~GeometryColumns} + */ +ContentsDao.prototype.getGeometryColumns = function (contents) { + var dao = this.geoPackage.getGeometryColumnsDao(); + // TODO what is causing this to need to be here and not up in the require section + var GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao; + var results = dao.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, contents.table_name); + if (!results || !results.length) return; + var gc = dao.createObject(); + dao.populateObjectFromResult(gc, results[0]); + return gc; +}; + +/** + * Get the TileMatrixSet for the Contents + * @param {module:core/contents~Contents} contents Contents + * @return {module:tiles/matrixset~TileMatrixSet} + */ +ContentsDao.prototype.getTileMatrixSet = function (contents) { + var dao = this.geoPackage.getTileMatrixSetDao(); + var results = dao.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, contents.table_name); + if (!results || !results.length) return; + var gc = dao.createObject(); + dao.populateObjectFromResult(gc, results[0]); + return gc; +}; + +/** + * Get the TileMatrix for the Contents + * @param {module:core/contents~Contents} contents Contents + * @return {module:tiles/matrix~TileMatrix} + */ +ContentsDao.prototype.getTileMatrix = function (contents) { + var dao = this.geoPackage.getTileMatrixDao(); + var results = dao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, contents.table_name); + if (!results || !results.length) return; + var tileMatricies = []; + for (var i = 0; i < results.length; i++) { + var gc = dao.createObject(); + dao.populateObjectFromResult(gc, results[i]); + tileMatricies.push(gc); + } + return tileMatricies; +}; + +ContentsDao.TABLE_NAME = "gpkg_contents"; +ContentsDao.COLUMN_PK = "table_name"; +ContentsDao.COLUMN_TABLE_NAME = "table_name"; +ContentsDao.COLUMN_DATA_TYPE = "data_type"; +ContentsDao.COLUMN_IDENTIFIER = "identifier"; +ContentsDao.COLUMN_DESCRIPTION = "description"; +ContentsDao.COLUMN_LAST_CHANGE = "last_change"; +ContentsDao.COLUMN_MIN_X = "min_x"; +ContentsDao.COLUMN_MIN_Y = "min_y"; +ContentsDao.COLUMN_MAX_X = "max_x"; +ContentsDao.COLUMN_MAX_Y = "max_y"; +ContentsDao.COLUMN_SRS_ID = "srs_id"; + +ContentsDao.GPKG_CDT_FEATURES_NAME = "features"; +ContentsDao.GPKG_CDT_TILES_NAME = "tiles"; +ContentsDao.GPKG_CDT_ATTRIBUTES_NAME = "attributes"; + +ContentsDao.prototype.gpkgTableName = ContentsDao.TABLE_NAME; +ContentsDao.prototype.idColumns = [ContentsDao.COLUMN_PK]; + +module.exports.ContentsDao = ContentsDao; +Contents.TABLE_NAME = ContentsDao.TABLE_NAME; +module.exports.Contents = Contents; + +},{"../../dao/columnValues":10,"../../dao/dao":11,"../../features/columns":64,"../../tiles/matrix":90,"../../tiles/matrixset":91,"../srs":9,"util":343}],9:[function(require,module,exports){ +/** + * SpatialReferenceSystem module. + * @module core/srs + */ + +var Dao = require('../../dao/dao'); + +var util = require('util') + , proj4 = require('proj4'); +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +/** + * 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. + * @class SpatialReferenceSystem + */ +var SpatialReferenceSystem = function() { + /** + * Human readable name of this SRS + * @member {string} + */ + this.srs_name; + /** + * Unique identifier for each Spatial Reference System within a GeoPackage + * @member {Number} + */ + this.srs_id; + + /** + * Case-insensitive name of the defining organization e.g. EPSG or epsg + * @member {string} + */ + this.organization; + + /** + * Numeric ID of the Spatial Reference System assigned by the organization + * @member {Number} + */ + this.organization_coordsys_id; + + /** + * Well-known Text [32] Representation of the Spatial Reference System + * @member {string} + */ + this.definition; + + /** + * Human readable description of this SRS + * @member {string} + */ + this.description; + + /** + * Well-known Text Representation of the Spatial Reference System + * @member {string} + */ + this.definition_12_063; +}; + +/** + * Return the proj4 projection specified by this SpatialReferenceSystem + * @return {proj4} + */ +SpatialReferenceSystem.prototype.getProjection = function() { + if(this.organization === 'NONE') return {}; + if(this.organization_coordsys_id === 4326 && (this.organization === 'EPSG' || this.organization === 'epsg')) { + return proj4('EPSG:4326'); + } else if (this.definition_12_063 && this.definition_12_063 !== '' && this.definition_12_063 !== 'undefined') { + return proj4(this.definition_12_063); + } else if (this.definition && this.definition !== '' && this.definition !== 'undefined') { + return proj4(this.definition); + } else if (this.organization && this.organization_coordsys_id) { + return proj4(this.organization.toUpperCase() + ':' + this.organization_coordsys_id); + } else { + return {}; + } +} + +/** + * Spatial Reference System Data Access Object + * @class SpatialReferenceSystemDao + * @extends {module:dao/dao~Dao} + * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object + */ +var SpatialReferenceSystemDao = function(geoPackage) { + Dao.call(this, geoPackage); +} + +util.inherits(SpatialReferenceSystemDao, Dao); + +/** + * Create a new SpatialReferenceSystem object + * @return {module:core/srs~SpatialReferenceSystem} + */ +SpatialReferenceSystemDao.prototype.createObject = function () { + return new SpatialReferenceSystem(); +}; + +/** + * Get the Spatial Reference System for the provided id + * @param {Number} srsId srs id + * @return {module:core/srs~SpatialReferenceSystem} + */ +SpatialReferenceSystemDao.prototype.getBySrsId = function(srsId) { + return this.queryForId(srsId); +}; + +/** + * Return the proj4 projection specified by this SpatialReferenceSystem + * @return {proj4} + */ +SpatialReferenceSystemDao.prototype.getProjection = function (srs) { + return srs.getProjection(); +}; + +/** + * Creates the required EPSG WGS84 Spatial Reference System (spec + * Requirement 11) + * @return {Number} id of the created row + */ +SpatialReferenceSystemDao.prototype.createWgs84 = function() { + var srs = this.getBySrsId(4326); + if (srs) { + return srs; + } + var srs = new SpatialReferenceSystem(); + srs.srs_name = 'WGS 84 geodetic'; + srs.srs_id = 4326; + srs.organization = 'EPSG'; + srs.organization_coordsys_id = 4326; + 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"]]'; + srs.description = 'longitude/latitude coordinates in decimal degrees on the WGS 84 spheroid'; + if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { + 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"]]'; + } + return this.create(srs); +} + +/** + * Creates the required Undefined Cartesian Spatial Reference System (spec + * Requirement 11) + * @return {Number} id of the created row + */ +SpatialReferenceSystemDao.prototype.createUndefinedCartesian = function() { + var srs = this.getBySrsId(-1); + if (srs) { + return srs; + } + var srs = new SpatialReferenceSystem(); + srs.srs_name = 'Undefined cartesian SRS'; + srs.srs_id = -1; + srs.organization = 'NONE'; + srs.organization_coordsys_id = -1; + srs.definition = 'undefined'; + srs.description = 'undefined cartesian coordinate reference system'; + if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { + srs.definition_12_063 = 'undefined'; + } + return this.create(srs); +} + +/** + * Creates the required Undefined Geographic Spatial Reference System (spec + * Requirement 11) + * @return {Number} id of the created row + */ +SpatialReferenceSystemDao.prototype.createUndefinedGeographic = function() { + var srs = this.getBySrsId(0); + if (srs) { + return srs; + } + var srs = new SpatialReferenceSystem(); + srs.srs_name = 'Undefined geographic SRS'; + srs.srs_id = 0; + srs.organization = 'NONE'; + srs.organization_coordsys_id = 0; + srs.definition = 'undefined'; + srs.description = 'undefined geographic coordinate reference system'; + if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { + srs.definition_12_063 = 'undefined'; + } + return this.create(srs); +} + +/** + * Creates the Web Mercator Spatial Reference System if it does not already + * exist + * @return {Number} id of the created row + */ +SpatialReferenceSystemDao.prototype.createWebMercator = function() { + var srs = this.getBySrsId(3857); + if (srs) { + return srs; + } + var srs = new SpatialReferenceSystem(); + srs.srs_name = 'WGS 84 / Pseudo-Mercator'; + srs.srs_id = 3857; + srs.organization = 'EPSG'; + srs.organization_coordsys_id = 3857; + 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"]]'; + srs.description = 'Spherical Mercator projection coordinate system'; + if(this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { + 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"]]'; + } + return this.create(srs); +} + +/** + * Spatial Reference System Table Name + * @type {String} + */ +SpatialReferenceSystemDao.TABLE_NAME = 'gpkg_spatial_ref_sys'; + +/** + * Table Name + * @type {String} + */ +SpatialReferenceSystemDao.prototype.gpkgTableName = SpatialReferenceSystemDao.TABLE_NAME; + +/** + * srsName field name + * @type {String} + */ +SpatialReferenceSystemDao.COLUMN_SRS_NAME = "srs_name"; + +/** + * srsId field name + * @type {String} + */ +SpatialReferenceSystemDao.COLUMN_SRS_ID = "srs_id"; + +/** + * id field name, srsId + * @type {String} + */ +SpatialReferenceSystemDao.COLUMN_ID = SpatialReferenceSystemDao.COLUMN_SRS_ID; + +/** + * organization field name + * @type {String} + */ +SpatialReferenceSystemDao.COLUMN_ORGANIZATION = "organization"; + +/** + * organizationCoordsysId field name + * @type {String} + */ +SpatialReferenceSystemDao.COLUMN_ORGANIZATION_COORDSYS_ID = "organization_coordsys_id"; + +/** + * definition field name + * @type {String} + */ +SpatialReferenceSystemDao.COLUMN_DEFINITION = "definition"; + +/** + * description field name + * @type {String} + */ +SpatialReferenceSystemDao.COLUMN_DESCRIPTION = "description"; + + +SpatialReferenceSystemDao.prototype.idColumns = [SpatialReferenceSystemDao.COLUMN_SRS_ID]; + +module.exports.SpatialReferenceSystemDao = SpatialReferenceSystemDao; +SpatialReferenceSystem.TABLE_NAME = SpatialReferenceSystemDao.TABLE_NAME; +module.exports.SpatialReferenceSystem = SpatialReferenceSystem; + +},{"../../dao/dao":11,"proj4":285,"util":343}],10:[function(require,module,exports){ +/** + * @module dao/columnValues + */ + +/** + * Structure to define columns in a table + * @class ColumnValues + */ +var ColumnValues = function() { + this.values = {}; + this.columns = []; +} + +module.exports = ColumnValues; + +/** + * adds a column to the structure + * @param {string} columnName name of column to add + * @param {module:user/userColumn~UserColumn} column column to add + */ +ColumnValues.prototype.addColumn = function (columnName, column) { + this.columns.push(columnName); + this.values[columnName] = column; +}; + +/** + * Gets the column by name + * @param {string} columnName name of column + * @return {module:user/userColumn~UserColumn} user column + */ +ColumnValues.prototype.getValue = function (columnName) { + return this.values[columnName]; +}; + +},{}],11:[function(require,module,exports){ +/** + * Dao module. + * @module dao/dao + */ + +var sqliteQueryBuilder = require('../db/sqliteQueryBuilder') + , ColumnValues = require('./columnValues'); + +/** + * Base DAO + * @class Dao + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + */ +var Dao = function(geoPackage) { + /** + * GeoPackage object this dao belongs to + * @type {module:geoPackage~GeoPackage} + */ + this.geoPackage = geoPackage; + /** + * Database connection to the sqlite file + * @type {module:db/geoPackageConnection~GeoPackageConnection} + */ + this.connection = geoPackage.getDatabase(); +} + +/** + * Copies object properties from result object to the object + * @param {Object} object object to copy properties to + * @param {Object} result object to copy properties from + */ +Dao.prototype.populateObjectFromResult = function (object, result) { + if (!result) return; + for (var key in result) { + object[key] = result[key]; + } +}; + +/** + * Checks if the table exists + * @return {Boolean} + */ +Dao.prototype.isTableExists = function () { + var results = this.connection.isTableExists(this.gpkgTableName); + return !!results; +}; + +/** + * Refreshes the object by id + * @param {Object} object object to refresh + * @return {Object} + */ +Dao.prototype.refresh = function(object) { + return this.queryForSameId(object); +} + +/** + * Query for object by id + * @param {object} id ID of the object to query for + * @return {Object} object created from the raw database object + */ +Dao.prototype.queryForId = function(id) { + var whereString = this.buildPkWhere(id); + var whereArgs = this.buildPkWhereArgs(id); + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); + var result = this.connection.get(query, whereArgs); + if (!result) return; + var object = this.createObject(result); + // TOOD something is wrong here + this.populateObjectFromResult(object, result); + return object; +}; + +Dao.prototype.queryForSameId = function (object) { + var idArray = this.getMultiId(object); + return this.queryForMultiId(idArray); +}; + +Dao.prototype.getMultiId = function (object) { + var idValues = []; + for (var i = 0; i < this.idColumns.length; i++) { + var idValue = object.values ? object.values[this.idColumns[i]] : object[this.idColumns[i]]; + if (idValue !== undefined) { + idValues.push(idValue); + } + } + return idValues; +}; + +/** + * Query for object by multi id + * @param {module:dao/columnValues~ColumnValues} idValues ColumnValues with the multi id + * @return {Object} object created from the raw database object + */ +Dao.prototype.queryForMultiId = function (idValues) { + var whereString = this.buildPkWhere(idValues); + var whereArgs = this.buildPkWhereArgs(idValues); + + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); + + var result = this.connection.get(query, whereArgs); + if (!result) return; + var object = this.createObject(result); + this.populateObjectFromResult(object, result); + return object; +}; + +/** + * Queries for all matches and returns them in the callback. Be aware this pulls all results into memory + * @param {string} [where] Optional where clause + * @param {object[]} [whereArgs] Optional where args array + * @return {Object[]} raw object array from the database + */ +Dao.prototype.queryForAll = function (where, whereArgs) { + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where); + return this.connection.all(query, whereArgs); +}; + +/** + * Queries for all matches and returns them in the callback. Be aware this pulls all results into memory + * @param {string} fieldName name of the field to query for + * @param {string} value value of the like clause + * @return {Object[]} raw object array from the database + */ +Dao.prototype.queryForLike = function(fieldName, value) { + var values = new ColumnValues(); + values.addColumn(fieldName, value); + var where = this.buildWhereLike(values); + var whereArgs = this.buildWhereArgs(value); + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where); + return this.connection.all(query, whereArgs); +} + +/** + * Queries for all matches and returns them. Only queries for the specified column name Be aware this pulls all results into memory + * @param {string} columnName name of the column to query for + * @param {module:dao/columnValues~ColumnValues} [fieldValues] optional values to filter on + * @return {Object[]} raw object array from the database + */ +Dao.prototype.queryForColumns = function (columnName, fieldValues) { + var where; + var whereArgs; + if (fieldValues) { + where = this.buildWhere(fieldValues); + whereArgs = this.buildWhereArgs(fieldValues); + } + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", [columnName], where); + return this.connection.all(query, whereArgs); +}; + +/** + * Queries for all items in the table with a page size and page number + * @param {Number} pageSize size of the chunk to query for + * @param {Number} page chunk number to query for + * @return {Object[]} raw object array from the database + */ +Dao.prototype.queryForChunk = function(pageSize, page) { + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, undefined, undefined, undefined, undefined, this.idColumns[0], pageSize, page * pageSize); + return this.connection.all(query); +}; + +/** + * Iterate all items in the table one at a time. If no parameters are passed, iterates the entire table. Returns an Iterable object + * @param {string} [field] field to filter on + * @param {Object} [value] value to filter on + * @param {string} [groupBy] group by clause + * @param {string} [having] having clause + * @param {string} [orderBy] order by clause + * @return {Iterable} iterable of database objects + */ +Dao.prototype.queryForEach = function (field, value, groupBy, having, orderBy) { + if (!field) { + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'"); + var count = 0; + return this.connection.each(query); + } else { + var whereString = this.buildWhereWithFieldAndValue(field, value); + var whereArgs = this.buildWhereArgs(value); + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); + return this.connection.each(query, whereArgs); + } +}; + +/** + * Iterate all objects in thet able that match the ColumnValues passed in + * @param {module:dao/columnValues~ColumnValues} fieldValues ColumnValues to query for + * @return {Iterable.Object} + */ +Dao.prototype.queryForFieldValues = function (fieldValues) { + var whereString = this.buildWhere(fieldValues); + var whereArgs = this.buildWhereArgs(fieldValues); + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); + var count = 0; + return this.connection.each(query, whereArgs); +}; + +/** + * Iterate all matching objects + * @param {string} join join clause + * @param {string} where where clause + * @param {Object[]} whereArgs array of where query values + * @param {string[]} columns columns to query for + * @return {Iterable.} + */ +Dao.prototype.queryJoinWhereWithArgs = function(join, where, whereArgs, columns) { + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", columns, where, join); + var count = 0; + return this.connection.each(query, whereArgs); +} + +/** + * Count all matching objects + * @param {string} join join clause + * @param {string} where where clause + * @param {Object[]} whereArgs array of where query values + * @param {string[]} columns columns to query for + * @return {Number} + */ +Dao.prototype.countJoinWhereWithArgs = function(join, where, whereArgs, columns) { + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", columns, where, join); + return this.connection.all(query, whereArgs).length; +} + +/** + * Iterate all distinct matching rows in the table + * @param {string} where where clause + * @param {Object[]} whereArgs array of where query values + * @return {Iterable.} + */ +Dao.prototype.queryWhereWithArgsDistinct = function(where, whereArgs) { + var query = sqliteQueryBuilder.buildQuery(true, "'"+this.gpkgTableName+"'", undefined, where); + var count = 0; + return this.connection.each(query, whereArgs); +} + +/** + * Iterate all matching rows + * @param {string} [where] where clause + * @param {Object[]} [whereArgs] array of where query values + * @param {string} [groupBy] group by clause + * @param {string} [having] having clause + * @param {string} [orderBy] order by clause + * @param {string} [limit] limit clause + * @return {Iterable.} + */ +Dao.prototype.queryWhere = function (where, whereArgs, groupBy, having, orderBy, limit) { + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where, undefined, groupBy, having, orderBy, limit); + return this.connection.each(query, whereArgs); +}; + +/** + * Get the primary key where clause + * @param {Object|Object[]} idValue id + * @return {string} primary key where clause + */ +Dao.prototype.buildPkWhere = function(idValue) { + if (Array.isArray(idValue)) { + var idValuesArray = idValue; + var idColumnValues = new ColumnValues(); + for (var i = 0; i < idValuesArray.length; i++) { + idColumnValues.addColumn(this.idColumns[i], idValuesArray[i]); + } + return this.buildWhere(idColumnValues); + } + return this.buildWhereWithFieldAndValue(this.idColumns, idValue); +}; + +/** + * Get the primary key where args + * @param {Object} idValue id + * @return {Object[]} where args + */ +Dao.prototype.buildPkWhereArgs = function (idValue) { + if (Array.isArray(idValue)) { + var idValuesArray = idValue; + var values = []; + for (var i = 0; i < idValuesArray.length; i++) { + values = values.concat(this.buildWhereArgs(idValuesArray[i])); + } + return values; + } + return this.buildWhereArgs(idValue); +}; + +/** + * Build where (or selection) LIKE statement for fields + * @param {module:dao/columnValues~ColumnValues} fields columns and values + * @param {string} operation AND or OR + * @return {string} where clause + */ +Dao.prototype.buildWhereLike = function(fields, operation) { + var whereString = ''; + for (var i = 0; i < fields.columns.length; i++) { + var column = fields.columns[i]; + if (i) { + whereString += ' ' + operation + ' '; + } + whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column), 'like'); + } + return whereString; +} + +/** + * Build where or selection statement for fields + * @param {module:dao/columnValues~ColumnValues} fields columns and values + * @param {string} [operation=AND] AND or OR + * @return {string} where clause + */ +Dao.prototype.buildWhere = function (fields, operation) { + operation = operation || 'and'; + var whereString = ''; + + for (var i = 0; i < fields.columns.length; i++) { + var column = fields.columns[i]; + if (i) { + whereString += ' ' + operation + ' '; + } + whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column)); + } + return whereString; +}; + +Dao.prototype.buildWhereArgs = function (values) { + var args = []; + if (Array.isArray(values)) { + for (var i = 0; i < values.length; i++) { + var value = values[i]; + if (value !== undefined && value !== null) { + args.push(value); + } + } + } else if (values.columns) { + for (var i = 0; i < values.columns.length; i++) { + var column = values.columns[i]; + var value = values.getValue(column); + if (value !== undefined && value !== null) { + args.push(value); + } + } + } else { + if(values !== undefined || values !== null) { + args.push(values); + } + } + return args.count ? null : args; +}; + +/** + * 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 + * @param {string} field field name + * @param {Object} [value] optional value to filter on + * @param {string} [operation='='] optional operation + * @return {string} where clause + */ +Dao.prototype.buildWhereWithFieldAndValue = function (field, value, operation) { + operation = operation || '='; + var whereString = '' + field + ' '; + if(value === undefined || value === null){ + whereString += "is null"; + } else { + whereString += operation + ' ?'; + } + return whereString; +}; + +/** + * Query for all rows in the table that match + * @param {string} field field to match + * @param {string} value value to match + * @param {string} [groupBy] group by clause + * @param {string} [having] having clause + * @param {string} [orderBy] order by clause + * @return {Object[]} array of raw database objects + */ +Dao.prototype.queryForAllEq = function(field, value, groupBy, having, orderBy) { + var whereString = this.buildWhereWithFieldAndValue(field, value); + var whereArgs = this.buildWhereArgs(value); + var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString, undefined, groupBy, having, orderBy); + return this.connection.all(query, whereArgs); +}; + +/** + * Count rows in the table optionally filtered by the parameters specified + * @param {module:dao/columnValues~ColumnValues|string} [fields] Either a ColumnValues object or a string specifying a field name + * @param {Object} [value] value to filter on if fields is a string + * @return {Number} count of objects + */ +Dao.prototype.count = function(fields, value) { + if (!fields) { + return this.connection.count(this.gpkgTableName); + } + var where; + var whereArgs; + var query; + if (fields.columns) { + where = this.buildWhere(fields, 'and'); + whereArgs = this.buildWhereArgs(fields); + query = sqliteQueryBuilder.buildCount("'"+this.gpkgTableName+"'", where); + } else { + whereString = this.buildWhereWithFieldAndValue(fields, value); + whereArgs = this.buildWhereArgs(value); + query = sqliteQueryBuilder.buildCount("'"+this.gpkgTableName+"'", whereString); + } + var result = this.connection.get(query, whereArgs); + if (!result) return 0; + return result.count; +} + +/** + * Get the min of the column + * @param {string} column column name + * @param {string} [where] where clause + * @param {Object[]} [whereArgs] where args + * @return {Number} + */ +Dao.prototype.minOfColumn = function (column, where, whereArgs) { + return this.connection.minOfColumn("'"+this.gpkgTableName+"'", column, where, whereArgs); +}; + +/** + * Get the max of the column + * @param {string} column column name + * @param {string} [where] where clause + * @param {Object[]} [whereArgs] where args + * @return {Number} + */ +Dao.prototype.maxOfColumn = function (column, where, whereArgs) { + return this.connection.maxOfColumn("'"+this.gpkgTableName+"'", column, where, whereArgs); +}; + +/** + * Delete the object passed in. Object is deleted by id + * @param {Object} object object to delete + * @return {Number} number of objects deleted + */ +Dao.prototype.delete = function(object) { + if (object.getId) { + return this.deleteById(object.getId()); + } + return this.deleteByMultiId(this.getMultiId(object)); +}; + +/** + * Delete the object specified by the id + * @param {Object} idValue id value + * @return {Number} number of objects deleted + */ +Dao.prototype.deleteById = function(idValue) { + var where = this.buildPkWhere(idValue); + var whereArgs = this.buildPkWhereArgs(idValue); + + return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs); +}; + +/** + * Delete the object specified by the ids + * @param {module:dao/columnValues~ColumnValues} idValue id values + * @return {Number} number of objects deleted + */ +Dao.prototype.deleteByMultiId = function(idValues) { + var where = this.buildPkWhere(idValues); + var whereArgs = this.buildPkWhereArgs(idValues); + + return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs); +}; + +/** + * Delete objects that match the query + * @param {string} where where clause + * @param {Object[]} whereArgs where arguments + * @return {Number} number of objects deleted + */ +Dao.prototype.deleteWhere = function(where, whereArgs) { + return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs); +}; + +/** + * Delete all objects in the table + * @return {Number} number of objects deleted + */ +Dao.prototype.deleteAll = function() { + return this.connection.delete("'"+this.gpkgTableName+"'", '', []); +}; + +/** + * Insert the object into the table + * @param {Object} object object to be inserted + * @return {Number} id of the inserted object + */ +Dao.prototype.create = function(object) { + var sql = sqliteQueryBuilder.buildInsert("'"+this.gpkgTableName+"'", object); + var insertObject = sqliteQueryBuilder.buildUpdateOrInsertObject(object); + return this.connection.insert(sql, insertObject); +}; + +/** + * Update all rows that match the query + * @param {module:dao/columnValues~ColumnValues} values values to insert + * @param {string} where where clause + * @param {Object[]} whereArgs where arguments + * @return {Number} number of objects updated + */ +Dao.prototype.updateWithValues = function (values, where, whereArgs) { + var update = sqliteQueryBuilder.buildUpdate("'"+this.gpkgTableName+"'", values, where, whereArgs); + return this.connection.run(update.sql, update.args); +}; + +/** + * Update the object specified + * @param {Object} object object with updated values + * @return {Number} number of objects updated + */ +Dao.prototype.update = function(object) { + var updateValues = sqliteQueryBuilder.buildUpdateOrInsertObject(object); + var update = sqliteQueryBuilder.buildObjectUpdate("'"+this.gpkgTableName+"'", object); + var multiId = this.getMultiId(object); + if (multiId.length) { + var where = ' where '; + for (var i = 0; i < multiId.length; i++) { + where += '"' + this.idColumns[i] + '" = $' + sqliteQueryBuilder.fixColumnName(this.idColumns[i]); + updateValues[sqliteQueryBuilder.fixColumnName(this.idColumns[i])] = multiId[i]; + } + update += where; + } + return this.connection.run(update, updateValues); +}; + +/** + * Queries for the object by id, and if it exists, updates it, otherwise creates a new object + * @param {Object} object object to update or create + * @return {Number} number of objects modified + */ +Dao.prototype.createOrUpdate = function(object) { + var existing = this.queryForSameId(object); + if (!existing) { + return this.create(object); + } else { + return this.update(object); + } +}; + +/** + * Drops this table + * @return {Number} results of the drop + */ +Dao.prototype.dropTable = function() { + return this.connection.dropTable(this.gpkgTableName); +}; + +Dao.prototype.rename = function(newName) { + var result = this.connection.run('ALTER TABLE ' + '"' + this.gpkgTableName + '" RENAME TO "' + newName + '"'); + this.gpkgTableName = newName; +} + +module.exports = Dao; + +},{"../db/sqliteQueryBuilder":17,"./columnValues":10}],12:[function(require,module,exports){ +/** + * DataColumnConstraints module. + * @module dataColumnConstraints + */ + +var Dao = require('../dao/dao'); + +var util = require('util'); + +/** + * Contains data to specify restrictions on basic data type column values + * @class DataColumnConstraints + */ +var DataColumnConstraints = function() { + + /** + * Case sensitive name of constraint + * @member {string} + */ + this.constraint_name; + + /** + * Lowercase type name of constraint: range | enum | glob + * @member {string} + */ + this.constraint_type; + + /** + * Specified case sensitive value for enum or glob or NULL for range constraint_type + * @member {string} + */ + this.value; + + /** + * Minimum value for 'range' or NULL for 'enum' or 'glob' constraint_type + * @member {Number} + */ + this.min; + + /** + * 0 (false) if min value is exclusive, or 1 (true) if min value is inclusive + * @member {Number} + */ + this.min_is_inclusive; + + /** + * Maximum value for 'range' or NULL for 'enum' or 'glob' constraint_type + * @member {Number} + */ + this.max; + + /** + * 0 (false) if max value is exclusive, or 1 (true) if max value is inclusive + * @member {Number} + */ + this.max_is_inclusive; + + /** + * For ranges and globs, describes the constraing; for enums, describes the enum value. + */ + this.description; + +} + +/** + * Data Column Constraints Data Access Object + * @class + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + * @extends {module:dao/dao~Dao} + */ +var DataColumnConstraintsDao = function(geoPackage) { + Dao.call(this, geoPackage); +} + +util.inherits(DataColumnConstraintsDao, Dao); + +/** + * Creates a new DataColumnConstraints object + * @return {module:dataColumnConstraints~DataColumnConstraints} + */ +DataColumnConstraintsDao.prototype.createObject = function () { + return new DataColumnConstraints(); +}; + +/** + * query by constraint name + * @param {String} constraintName constraint name + * @return {Iterable} + */ +DataColumnConstraintsDao.prototype.queryByConstraintName = function (constraintName) { + return this.queryForEach(DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, constraintName); +}; + +/** + * Query by the unique column values + * @param {String} constraintName constraint name + * @param {String} constraintType constraint type + * @param {String} value value + * @return {module:dataColumnConstraints~DataColumnConstraints} + */ +DataColumnConstraintsDao.prototype.queryUnique = function (constraintName, constraintType, value) { + var dataColumnConstraints = new DataColumnConstraints(); + dataColumnConstraints.constraint_name = constraintName; + dataColumnConstraints.constraint_type = constraintType; + dataColumnConstraints.value = value; + + return this.queryForSameId(dataColumnConstraints); +}; + +DataColumnConstraintsDao.TABLE_NAME = "gpkg_data_column_constraints"; +DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME = "constraint_name"; +DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE = "constraint_type"; +DataColumnConstraintsDao.COLUMN_VALUE = "value"; +DataColumnConstraintsDao.COLUMN_MIN = "min"; +DataColumnConstraintsDao.COLUMN_MIN_IS_INCLUSIVE = "min_is_inclusive"; +DataColumnConstraintsDao.COLUMN_MAX = "max"; +DataColumnConstraintsDao.COLUMN_MAX_IS_INCLUSIVE = "max_is_inclusive"; +DataColumnConstraintsDao.COLUMN_DESCRIPTION = "description"; + +DataColumnConstraintsDao.ENUM_TYPE = 'enum'; +DataColumnConstraintsDao.GLOB_TYPE = 'glob'; +DataColumnConstraintsDao.RANGE_TYPE = 'range'; + +DataColumnConstraintsDao.prototype.gpkgTableName = DataColumnConstraintsDao.TABLE_NAME; +DataColumnConstraintsDao.prototype.idColumns = [DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE, DataColumnConstraintsDao.COLUMN_VALUE]; + +module.exports.DataColumnConstraintsDao = DataColumnConstraintsDao; +module.exports.DataColumnConstraints = DataColumnConstraints; + +},{"../dao/dao":11,"util":343}],13:[function(require,module,exports){ +/** + * DataColumns module. + * @module dataColumns + */ + +var Dao = require('../dao/dao') + , ContentsDao = require('../core/contents').ContentsDao; + +var util = require('util'); + +/** + * Stores minimal application schema identifying, descriptive and MIME type + * information about columns in user vector feature and tile matrix data tables + * that supplements the data available from the SQLite sqlite_master table and + * pragma table_info(table_name) SQL function. The gpkg_data_columns data CAN be + * used to provide more specific column data types and value ranges and + * application specific structural and semantic information to enable more + * informative user menu displays and more effective user decisions on the + * suitability of GeoPackage contents for specific purposes. + * @class DataColumns + */ +var DataColumns = function() { + /** + * the name of the tiles, or feature table + * @member {string} + */ + this.table_name; + + /** + * the name of the table column + * @member {string} + */ + this.column_name; + + /** + * A human-readable identifier (e.g. short name) for the column_name content + * @member {string} + */ + this.name; + + /** + * A human-readable formal title for the column_name content + * @member {string} + */ + this.title; + + /** + * A human-readable description for the table_name contente + * @member {string} + */ + this.description; + + /** + * MIME type of columnName if BLOB type or NULL for other types + * @member {string} + */ + this.mime_type; + + /** + * Case sensitive column value constraint name specified + */ + this.constraint_name; +} + +/** + * Contents object. Provides identifying and descriptive information that an + * application can display to a user in a menu of geospatial data that is + * available for access and/or update. + * @class + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + * @extends {module:dao/dao~Dao} + */ +var DataColumnsDao = function(geoPackage) { + Dao.call(this, geoPackage); +} + +util.inherits(DataColumnsDao, Dao); + +/** + * Creates a new {module:dataColumns~DataColumns} object + * @return {module:dataColumns~DataColumns} + */ +DataColumnsDao.prototype.createObject = function () { + return new DataColumns(); +}; + +/** + * Get the Contents from the Data Columns + * @param {module:dataColumns~DataColumns} dataColumns data columns + * @return {module:core/contents~Contents} contents + */ +DataColumnsDao.prototype.getContents = function (dataColumns) { + var cd = new ContentsDao(this.geoPackage); + return cd.queryForId(dataColumns.table_name); +}; + +/** + * Query by constraint name + * @param {String} constraintName constraint name + * @return {Iterator} iterator of database objects + */ +DataColumnsDao.prototype.queryByConstraintName = function (constraintName) { + return this.queryForEach(DataColumnsDao.COLUMN_CONSTRAINT_NAME, constraintName); +}; + +/** + * Get DataColumn by column name and table name + * @param {String} tableName table name + * @param {String} columnName column name + * @return {module:dataColumns~DataColumns} + */ +DataColumnsDao.prototype.getDataColumns = function (tableName, columnName) { + var exists = this.isTableExists(); + if (!exists) { + return; + } + var where = this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_TABLE_NAME, tableName) + + ' and ' + + this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_COLUMN_NAME, columnName); + var values = [tableName, columnName]; + var dataColumn; + for (var row of this.queryWhere(where, values)) { + dataColumn = row; + } + return dataColumn; +}; + +DataColumnsDao.TABLE_NAME = "gpkg_data_columns"; +DataColumnsDao.COLUMN_PK1 = "table_name"; +DataColumnsDao.COLUMN_PK2 = "column_name"; +DataColumnsDao.COLUMN_TABLE_NAME = "table_name"; +DataColumnsDao.COLUMN_COLUMN_NAME = "column_name"; +DataColumnsDao.COLUMN_NAME = "name"; +DataColumnsDao.COLUMN_TITLE = "title"; +DataColumnsDao.COLUMN_DESCRIPTION = "description"; +DataColumnsDao.COLUMN_MIME_TYPE = "mime_type"; +DataColumnsDao.COLUMN_CONSTRAINT_NAME = "constraint_name"; + +DataColumnsDao.prototype.gpkgTableName = DataColumnsDao.TABLE_NAME; +DataColumnsDao.prototype.idColumns = [DataColumnsDao.COLUMN_PK1, DataColumnsDao.COLUMN_PK2]; + +module.exports.DataColumnsDao = DataColumnsDao; +module.exports.DataColumns = DataColumns; + +},{"../core/contents":8,"../dao/dao":11,"util":343}],14:[function(require,module,exports){ +/** + * @module db/dataTypes + */ + +/** + * A boolean value representing true or false. + * @type {String} + */ +module.exports.GPKG_DT_BOOLEAN_NAME = "BOOLEAN"; +/** + * 8-bit signed two’s complement integer. + * @type {String} + */ +module.exports.GPKG_DT_TINYINT_NAME = "TINYINT"; +/** + * 16-bit signed two’s complement integer. + * @type {String} + */ +module.exports.GPKG_DT_SMALLINT_NAME = "SMALLINT"; +/** + * 32-bit signed two’s complement integer. + * @type {String} + */ +module.exports.GPKG_DT_MEDIUMINT_NAME = "MEDIUMINT"; +/** + * 64-bit signed two’s complement integer. + * @type {String} + */ +module.exports.GPKG_DT_INT_NAME = "INT"; +/** + * 64-bit signed two’s complement integer. + * @type {String} + */ +module.exports.GPKG_DT_INTEGER_NAME = "INTEGER"; +/** + * 32-bit IEEE floating point number. + * @type {String} + */ +module.exports.GPKG_DT_FLOAT_NAME = "FLOAT"; +/** + * 64-bit IEEE floating point number. + * @type {String} + */ +module.exports.GPKG_DT_DOUBLE_NAME = "DOUBLE"; +/** + * 64-bit IEEE floating point number. + * @type {String} + */ +module.exports.GPKG_DT_REAL_NAME = "REAL"; +/** + * 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. + * @type {String} + */ +module.exports.GPKG_DT_TEXT_NAME = "TEXT"; +/** + * BLOB{(max_size)}: Variable length binary data. + * @type {String} + */ +module.exports.GPKG_DT_BLOB_NAME = "BLOB"; +/** + * ISO-8601 date string in the form YYYY-MM-DD encoded in either UTF-8 or UTF-16. + * @type {String} + */ +module.exports.GPKG_DT_DATE_NAME = "DATE"; +/** + * 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. + * @type {String} + */ +module.exports.GPKG_DT_DATETIME_NAME = "DATETIME"; +module.exports.GPKG_DT_GEOMETRY_NAME = "GEOMETRY"; + +/** + * DataType enumeration + * @typedef {object} GPKGDataType + */ +module.exports.GPKGDataType = {}; +module.exports.GPKGDataType[module.exports.GPKG_DT_BOOLEAN_NAME] = 0; +module.exports.GPKGDataType[module.exports.GPKG_DT_TINYINT_NAME] = 1; +module.exports.GPKGDataType[module.exports.GPKG_DT_SMALLINT_NAME] = 2; +module.exports.GPKGDataType[module.exports.GPKG_DT_MEDIUMINT_NAME] = 3; +module.exports.GPKGDataType[module.exports.GPKG_DT_INT_NAME] = 4; +module.exports.GPKGDataType[module.exports.GPKG_DT_INTEGER_NAME] = 5; +module.exports.GPKGDataType[module.exports.GPKG_DT_FLOAT_NAME] = 6; +module.exports.GPKGDataType[module.exports.GPKG_DT_DOUBLE_NAME] = 7; +module.exports.GPKGDataType[module.exports.GPKG_DT_REAL_NAME] = 8; +module.exports.GPKGDataType[module.exports.GPKG_DT_TEXT_NAME] = 9; +module.exports.GPKGDataType[module.exports.GPKG_DT_BLOB_NAME] = 10; +module.exports.GPKGDataType[module.exports.GPKG_DT_DATE_NAME] = 11; +module.exports.GPKGDataType[module.exports.GPKG_DT_DATETIME_NAME] = 12; +module.exports.GPKGDataType[module.exports.GPKG_DT_GEOMETRY_NAME] = 13; + +module.exports.GPKGDataType.GPKG_DT_BOOLEAN = 0; +module.exports.GPKGDataType.GPKG_DT_TINYINT = 1; +module.exports.GPKGDataType.GPKG_DT_SMALLINT = 2; +module.exports.GPKGDataType.GPKG_DT_MEDIUMINT = 3; +module.exports.GPKGDataType.GPKG_DT_INT = 4; +module.exports.GPKGDataType.GPKG_DT_INTEGER = 5; +module.exports.GPKGDataType.GPKG_DT_FLOAT = 6; +module.exports.GPKGDataType.GPKG_DT_DOUBLE = 7; +module.exports.GPKGDataType.GPKG_DT_REAL = 8; +module.exports.GPKGDataType.GPKG_DT_TEXT = 9; +module.exports.GPKGDataType.GPKG_DT_BLOB = 10; +module.exports.GPKGDataType.GPKG_DT_DATE = 11; +module.exports.GPKGDataType.GPKG_DT_DATETIME = 12; +module.exports.GPKGDataType.GPKG_DT_GEOMETRY = 13; + + +/** + * Return the name of the given data type. + * + * @param {module:db/dataTypes~GPKGDataType} dataType the enum to retrieve the name for + * @return {String} the string name of the given data type enum + */ +module.exports.name = function(dataType) { + var name = undefined; + + switch(dataType){ + case module.exports.GPKGDataType.GPKG_DT_BOOLEAN: + name = module.exports.GPKG_DT_BOOLEAN_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_TINYINT: + name = module.exports.GPKG_DT_TINYINT_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_SMALLINT: + name = module.exports.GPKG_DT_SMALLINT_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_MEDIUMINT: + name = module.exports.GPKG_DT_MEDIUMINT_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_INT: + name = module.exports.GPKG_DT_INT_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_INTEGER: + name = module.exports.GPKG_DT_INTEGER_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_FLOAT: + name = module.exports.GPKG_DT_FLOAT_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_DOUBLE: + name = module.exports.GPKG_DT_DOUBLE_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_REAL: + name = module.exports.GPKG_DT_REAL_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_TEXT: + name = module.exports.GPKG_DT_TEXT_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_BLOB: + name = module.exports.GPKG_DT_BLOB_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_DATE: + name = module.exports.GPKG_DT_DATE_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_DATETIME: + name = module.exports.GPKG_DT_DATETIME_NAME; + break; + case module.exports.GPKGDataType.GPKG_DT_GEOMETRY: + name = module.exports.GPKG_DT_GEOMETRY_NAME; + break; + } + + return name; +} + +/** + * Return the data type enum value for the given name, ignoring case. + * + * @param {String} name the name of the data type enum + * @return {module:db/dataTypes~GPKGDataType} the enum value + */ +module.exports.fromName = function(name) { + var value = 9; + if (name) { + name = name.toUpperCase(); + value = module.exports.GPKGDataType[name]; + } + return value; +} + +},{}],15:[function(require,module,exports){ +(function (process,Buffer){ +/** + * Connection to the SQLite file + * @module db/geoPackageConnection + */ + +var GeoPackageConstants = require('../geoPackageConstants'); + +if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) { + console.log('Better SQLite'); +} else { + console.log('SQL.js'); +} + +/** + * Creates a connection to the SQLite file and when connected, returns a promise that resolves the connection. + * This will create a {module:db/sqliteAdapter~Adapter} if running in node and the FORCE_SQLJS environment variable is not set. + * This will create a {module:db/sqljsAdapter~Adapter} if running in the browser or the FORCE_SQLJS environment variable is set + * @see {module:db/sqliteAdapter~Adapter} + * @see {module:db/sqljsAdapter~Adapter} + * @class + * @param {string} filePath path to the sqlite file + * @return {Promise} + * @todo change this constructor to return an actual `GeoPackageConnection` instance instead of a `Promise` + */ +var GeoPackageConnection = function(filePath) { + if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) { + this.adapterCreator = require('./sqliteAdapter'); + } else { + this.adapterCreator = require('./sqljsAdapter'); + } + + var promise = new Promise(function(resolve, reject) { + this.adapterCreator.createAdapter(filePath) + .then(function(adapter) { + this.adapter = adapter; + resolve(this); + }.bind(this)) + .catch(function(error) { + reject(error); + }); + }.bind(this)); + + return promise; +} + +/** + * Close the database. + */ +GeoPackageConnection.prototype.close = function() { + this.adapter.close(); +} + +/** + * exports the GeoPackage as a file + * @param {Function} callback called with an err and the buffer containing the contents of the file + */ +GeoPackageConnection.prototype.export = function(callback) { + this.adapter.export(callback); +} + +/** + * Gets the raw connection to the database + * @return {Object} + */ +GeoPackageConnection.prototype.getDBConnection = function () { + return this.adapter.db; +}; + +/** + * Connects to a GeoPackage database + * @param {Object} db database to connect to + * @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)} + */ +GeoPackageConnection.prototype.setDBConnection = function (db) { + return this.adapter = this.adapterCreator.createAdapterFromDb(db); +}; + +/** +* Registers the given function so that it can be used by SQL statements +* @param {string} name name of function to register +* @param {Function} functionDefinition function to register +* @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)} the adapter in use +*/ +GeoPackageConnection.prototype.registerFunction = function(name, functionDefinition) { + this.adapter.registerFunction(name, functionDefinition); + return this.adapter; +} + +/** + * Gets the first result from the query + * @param {string} sql sql query to run + * @param {Array|Object} [params] array of substitution parameters + * @return {object} + */ +GeoPackageConnection.prototype.get = function (sql, params) { + return this.adapter.get(sql, params); +}; + +/** + * Checks if table exists in database + * @param {String} tableName + * @returns {Boolean} + */ +GeoPackageConnection.prototype.isTableExists = function (tableName) { + return this.adapter.isTableExists(tableName); +}; + +/** + * Run the given SQL and return the results. + * @param {string} sql sql to run + * @param {Array|Object} [params] array of substitution parameters + * @return {{changes: number, lastInsertROWID: number}} object: `{ "changes": number, "lastInsertROWID": number }` + * * `changes`: number of rows the statement changed + * * `lastInsertROWID`: ID of the last inserted row + */ +GeoPackageConnection.prototype.run = function (sql, params) { + return this.adapter.run(sql, params) +}; + +/** + * Executes the query and returns all results in an array + * @param {string} sql sql to run + * @param {Array|Object} [params] substitution parameters + * @return {Object[]} + */ +GeoPackageConnection.prototype.all = function (sql, params) { + return this.adapter.all(sql, params); +}; + +/** + * Executes the query and returns an Iterable object of results + * @param {string} sql sql to run + * @param {Array|Object} [params] substitution parameters + * @return {Iterable} + */ +GeoPackageConnection.prototype.each = function (sql, params) { + return this.adapter.each(sql, params); +}; + +/** + * Gets the minimum value from the column + * @param {string} table table to query + * @param {string} column column to get the min value from + * @param {string} [where] where clause + * @param {Array|Object} [whereArgs] substitution parameters + * @return {Object} + */ +GeoPackageConnection.prototype.minOfColumn = function(table, column, where, whereArgs) { + var minStatement = 'select min('+column+') as min from ' + table; + if(where) { + minStatement += ' '; + if (where.indexOf('where')) { + where = 'where ' + where; + } + minStatement += where; + } + return this.adapter.get(minStatement, whereArgs).min; +}; + +/** + * Gets the maximum value from the column + * @param {string} table table to query + * @param {string} column column to get the max value from + * @param {string} [where] where clause + * @param {Array|Object} [whereArgs] substitution parameters + * @return {Object} + */ +GeoPackageConnection.prototype.maxOfColumn = function(table, column, where, whereArgs, callback) { + var maxStatement = 'select max('+column+') as max from ' + table; + if(where) { + maxStatement += ' '; + if (where.indexOf('where')) { + where = 'where ' + where; + } + maxStatement += where; + } + return this.adapter.get(maxStatement, whereArgs).max; +}; + +/** + * Return the count of objects in the table + * @param {string} table table name + * @param {string} [where] where clause + * @param {Array|Object} [whereArgs] substitution parameters + * @return {Number} + */ +GeoPackageConnection.prototype.count = function(table, where, whereArgs) { + return this.adapter.count(table, where, whereArgs); +}; + +/** + * Executes an insert statement and returns the last id inserted + * @param {string} sql sql to insert + * @param {Array|Object} params substitution parameters + * @return {Object} last row id inserted + */ +GeoPackageConnection.prototype.insert = function (sql, params) { + return this.adapter.insert(sql, params); +}; + +/** + * Delete from the table + * @param {string} tableName table name to delete from + * @param {string} [where] where clause + * @param {Array|Object} [whereArgs] substitution parameters + * @return {Number} number of rows deleted + */ +GeoPackageConnection.prototype.delete = function(tableName, where, whereArgs) { + var deleteStatement = 'DELETE FROM ' + tableName + ''; + + if (where) { + deleteStatement += ' WHERE ' + where; + } + + return this.adapter.delete(deleteStatement, whereArgs); +}; + +/** + * Drops the table specified + * @param {string} tableName table to drop + * @return {Boolean} results of table drop + */ +GeoPackageConnection.prototype.dropTable = function(tableName) { + return this.adapter.dropTable(tableName); +}; + +/** + * Gets information about the table specified. If data is returned, the table exists + * @param {string} tableName table to check + * @return {Object} + */ +GeoPackageConnection.prototype.tableExists = function(tableName) { + return this.adapter.get('SELECT name FROM sqlite_master WHERE type="table" AND name=?', [tableName]); +}; + +/** + * Checks if a table and column exist + * @param {string} tableName table to check + * @param {string} columnName column to check + * @return {Boolean} + */ +GeoPackageConnection.prototype.columnAndTableExists = function(tableName, columnName) { + var columns = this.adapter.all('PRAGMA table_info(\''+tableName+'\')'); + for (var i = 0; i < columns.length; i++) { + if (columns[i].name === columnName) { + return true; + } + } + return false; +} + +/** + * Sets the APPLICATION_ID and user_version for GeoPackage + */ +GeoPackageConnection.prototype.setApplicationId = function() { + var buff = Buffer.from(GeoPackageConstants.APPLICATION_ID); + var applicationId = buff.readUInt32BE(0); + this.adapter.run('PRAGMA application_id = ' + applicationId); + this.adapter.run('PRAGMA user_version = ' + GeoPackageConstants.USER_VERSION); +} + +/** + * gets the application_id from the sqlite file + * @return {Object} + */ +GeoPackageConnection.prototype.getApplicationId = function() { + return this.adapter.get('PRAGMA application_id').application_id; +} + +module.exports = GeoPackageConnection; + +/** + * Convenience method + * @see {module:db/geoPackageConnection~GeoPackageConnection} + * @see {module:db/sqliteAdapter~Adapter} + * @see {module:db/sqljsAdapter~Adapter} + * @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 + * @return {Promise} that resolves + */ +GeoPackageConnection.connect = function(filePath) { + return new GeoPackageConnection(filePath); +} + +/** + * Convenience method + * @param {Object} db open database to connect to + * @return {Promise} + */ +GeoPackageConnection.connectWithDatabase = function(db) { + return new GeoPackageConnection(undefined) + .then(function(connection) { + connection.setDBConnection(db); + }); +} + +}).call(this,require('_process'),require("buffer").Buffer) +},{"../geoPackageConstants":71,"./sqliteAdapter":16,"./sqljsAdapter":18,"_process":284,"buffer":182}],16:[function(require,module,exports){ +/** + * This adapter uses better-sqlite3 to execute queries against the GeoPackage database + * @module db/sqliteAdapter + * @see {@link https://github.com/JoshuaWise/better-sqlite3|better-sqlite3} + */ + +var fs = require('fs') + , path = require('path') + , http = require('http') + , Buffer = require('buffer') + , os = require('os'); + +/** + * Returns a Promise which, when resolved, returns a {module:db/sqliteAdapter~Adapter} which has connected to the GeoPackage database file + * @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 + * @return {Promise} + */ +module.exports.createAdapter = function(filePath) { + var promise = new Promise(function(resolve, reject) { + var Database = require('better-sqlite3'); + try { + var db; + if (filePath && typeof filePath === 'string') { + if (filePath.indexOf('http') === 0) { + http.get(filePath, function(response) { + if (response.statusCode !== 200) { + return reject(new Error('Unable to reach url: ' + filePath)); + } + var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg'); + var writeStream = fs.createWriteStream(tmpPath); + response.pipe(writeStream); + writeStream.on('close', function() { + try { + db = new Database(tmpPath); + // verify that this is an actual database + var applicationId = db.pragma('application_id'); + db.pragma('journal_mode = WAL'); + var adapter = new Adapter(db); + adapter.filePath = tmpPath; + resolve(adapter); + } catch (err) { + console.log('error', err); + return reject(err); + } + }); + }); + } else { + db = new Database(filePath); + var adapter = new Adapter(db); + adapter.filePath = filePath; + resolve(adapter); + } + } else if (filePath) { + // write this byte array to a file then open it + var byteArray = filePath; + var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg'); + return fs.writeFile(tmpPath, byteArray, function(err) { + db = new Database(tmpPath); + // verify that this is an actual database + try { + var applicationId = db.pragma('application_id'); + db.pragma('journal_mode = WAL'); + } catch (err) { + console.log('error', err); + return reject(err); + } + var adapter = new Adapter(db); + adapter.filePath = tmpPath; + resolve(adapter); + }); + } else { + console.log('create in memory'); + db = new Database("memory", { + memory: !filePath + }); + var adapter = new Adapter(db); + adapter.filePath = filePath; + resolve(adapter); + } + + } catch (err) { + console.log('Error opening database', err); + return reject(err); + } + }); + return promise; +} +/** + * Creates an adapter from an already established better-sqlite3 database connection + * @param {better-sqlite3.Database} db better-sqlite3 database connection + * @return {module:db/sqliteAdapter~Adapter} + */ +module.exports.createAdapterFromDb = function(db) { + return new Adapter(db); +} + +/** + * Class which adapts generic GeoPackage queries to better-sqlite3 queries + * @class Adapter + * @param {better-sqlite3.Database} db better-sqlite3 database connection + */ +function Adapter(db) { + this.db = db; +} + +/** + * Closes the connection to the GeoPackage + */ +Adapter.prototype.close = function() { + this.db.close(); +} + +/** + * Get the connection to the database file + * @return {better-sqlite3.Database} + */ +Adapter.prototype.getDBConnection = function () { + return this.db; +}; + +/** + * Returns a Buffer containing the contents of the database as a file + * @param {Function} callback called when export is complete + */ +Adapter.prototype.export = function(callback) { + fs.readFile(this.filePath, callback); +} + +/** + * Registers the given function so that it can be used by SQL statements + * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#registeroptions-function---this|better-sqlite3 register} + * @param {string} name name of function to register + * @param {Function} functionDefinition function to register + * @return {module:db/sqliteAdapter~Adapter} this + */ +Adapter.prototype.registerFunction = function(name, functionDefinition) { + this.db.function(name, functionDefinition); + return this; +} + +/** + * Gets one row of results from the statement + * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#getbindparameters---row|better-sqlite3 get} + * @param {string} sql statement to run + * @param {Array|Object} [params] bind parameters + * @return {Object} + */ +Adapter.prototype.get = function (sql, params) { + var statement = this.db.prepare(sql); + if (params) { + return statement.get(params); + } else { + return statement.get(); + } +}; + +/** + * Determines if a tableName exists in the database + * @param {String} tableName + * @returns {Boolean} + */ +Adapter.prototype.isTableExists = function (tableName) { + var statement = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=:name"); + var result; + result = statement.get({name: tableName}); + return !!result; +}; + +/** + * Gets all results from the statement in an array + * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#allbindparameters---array-of-rows|better-sqlite3 all} + * @param {string} sql statement to run + * @param {Array|Object} [params] bind parameters + * @return {Object[]} + */ +Adapter.prototype.all = function (sql, params) { + var statement = this.db.prepare(sql); + if (params) { + return statement.all(params); + } else { + return statement.all(); + } +}; + +/** + * Returns an `Iterable` with results from the query + * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#iteratebindparameters---iterator|better-sqlite3 iterate} + * @param {string} sql statement to run + * @param {Object|Array} [params] bind parameters + * @return {Iterable} + */ +Adapter.prototype.each = function (sql, params) { + var statement = this.db.prepare(sql); + if (params) { + return statement.iterate(params); + } else { + return statement.iterate(); + } +}; + +/** + * Run the given statement, returning information about what changed. + * + * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#runbindparameters---object|better-sqlite3} + * @param {string} sql statement to run + * @param {Object|Array} [params] bind parameters + * @return {{changes: number, lastInsertROWID: number}} object: `{ "changes": number, "lastInsertROWID": number }` + * * `changes`: number of rows the statement changed + * * `lastInsertROWID`: ID of the last inserted row + */ +Adapter.prototype.run = function(sql, params) { + var statement = this.db.prepare(sql); + if (params) { + return statement.run(params); + } else { + return statement.run(); + } +} + +/** + * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened + * @param {string} sql statement to run + * @param {Object|Array} [params] bind parameters + * @return {Number} last inserted row id + */ +Adapter.prototype.insert = function(sql, params) { + var statement = this.db.prepare(sql); + return statement.run(params).lastInsertRowid; +}; + +/** + * Runs the specified delete statement and returns the number of deleted rows + * @param {string} sql statement to run + * @param {Object|Array} params bind parameters + * @return {number} deleted rows + */ +Adapter.prototype.delete = function(sql, params) { + var statement = this.db.prepare(sql); + return statement.run(params).changes; +}; + +/** + * Drops the table + * @param {string} table table name + * @return {Boolean} indicates if the table was dropped + */ +Adapter.prototype.dropTable = function(table) { + try { + var statement = this.db.prepare('DROP TABLE IF EXISTS "' + table + '"'); + var result = statement.run(); + var vacuum = this.db.prepare('VACUUM'); + vacuum.run(); + return result.changes == 0; + } catch (e) { + console.log('Drop Table Error', e); + return false; + } +}; + +/** + * Counts rows that match the query + * @param {string} tableName table name from which to count + * @param {string} [where] where clause + * @param {Object|Array} [whereArgs] where args + * @return {Number} count + */ +Adapter.prototype.count = function (tableName, where, whereArgs) { + var sql = 'SELECT COUNT(*) as count FROM "' + tableName + '"'; + if (where) { + sql += ' where ' + where; + } + var statement = this.db.prepare(sql); + if (whereArgs) { + return statement.get(whereArgs).count; + } else { + return statement.get().count; + } +}; + +},{"better-sqlite3":undefined,"buffer":182,"fs":177,"http":329,"os":270,"path":276}],17:[function(require,module,exports){ +/** + * SQLite query builder module. + * @module db/sqliteQueryBuilder + */ + +/** + * Utility class to build sql queries + * @class + */ +function SqliteQueryBuilder() {} + +module.exports = SqliteQueryBuilder; + +/** + * Replaces all whitespace in a column name with underscores + * @param {string} columnName column name to fix + * @return {string} + */ +SqliteQueryBuilder.fixColumnName = function(columnName) { + return columnName.replace(/\W+/g, '_'); +} + +/** + * Builds a query + * @param {Boolean} distinct whether query should be distinct or not + * @param {string} tables table names to query, added to the query from clause + * @param {string[]} [columns=*] columns to query for + * @param {string} [where] where clause + * @param {string} [join] join clause + * @param {string} [groupBy] group by clause + * @param {string} [having] having clause + * @param {string} [orderBy] order by clause + * @param {Number} [limit] limit + * @param {Number} [offset] offset + * @return {string} + */ +SqliteQueryBuilder.buildQuery = function(distinct, tables, columns, where, join, groupBy, having, orderBy, limit, offset) { + + var query = ''; + if (isEmpty(groupBy) && !isEmpty(having)) { + throw new Error('Illegal Arguments: having clauses require a groupBy clause'); + } + + query += 'select '; + if (distinct) { + query += 'distinct '; + } + if(columns && columns.length) { + query = appendColumnsToString(columns, query); + } else { + query += '* '; + } + + query += 'from ' + tables; + if (join) { + query += ' ' + join; + } + query = appendClauseToString(query, ' where ', where); + query = appendClauseToString(query, ' group by ', groupBy); + query = appendClauseToString(query, ' having ', having); + query = appendClauseToString(query, ' order by ', orderBy); + query = appendClauseToString(query, ' limit ', limit); + query = appendClauseToString(query, ' offset ', offset); + + return query; +} + +/** + * Builds a count statement + * @param {string} tables table names to query for + * @param {string} [where] where clause + * @return {string} count statement + */ +SqliteQueryBuilder.buildCount = function(tables, where) { + var query = 'select count(*) as count from ' + tables; + query = appendClauseToString(query, ' where ', where); + return query; +} + +/** + * Builds an insert statement using the properties of the object + * @param {string} table table to insert into + * @param {Object} object object to insert + * @return {string} insert statement + */ +SqliteQueryBuilder.buildInsert = function(table, object) { + if (object.getColumnNames) { + return SqliteQueryBuilder.buildInsertFromColumnNames(table, object); + } + var insert = 'insert into ' + table + ' ('; + var keys = ''; + var values = ''; + var first = true; + for (var key in object) { + if (object.hasOwnProperty(key)) { + if (!first) { + keys += ','; + values += ','; + } + first = false; + keys += key; + values += '$' + SqliteQueryBuilder.fixColumnName(key); + } + } + + insert += keys + ') values (' + values + ')'; + return insert; +} + +/** + * Builds an insert statement from the object.getColumnNames method + * @param {string} table table to insert into + * @param {Object} object object with a getColumnNames method + * @return {string} insert statement + */ +SqliteQueryBuilder.buildInsertFromColumnNames = function(table, object) { + var insert = 'insert into ' + table + ' ('; + var keys = ''; + var values = ''; + var first = true; + var columnNames = object.getColumnNames(); + for (var i = 0; i < columnNames.length; i++) { + var key = columnNames[i]; + if (!first) { + keys += ','; + values += ','; + } + first = false; + keys += '"' + key + '"'; + values += '$' + SqliteQueryBuilder.fixColumnName(key); + } + + insert += keys + ') values (' + values + ')'; + return insert; +} + +/** + * Builds an update or insert object to bind to a statement + * @param {Object} object object to create bind parameters from + * @return {Object} bind parameters + */ +SqliteQueryBuilder.buildUpdateOrInsertObject = function(object) { + var insertOrUpdate = {}; + if (object.getColumnNames) { + var columnNames = object.getColumnNames(); + for (var i = 0; i < columnNames.length; i++) { + insertOrUpdate[SqliteQueryBuilder.fixColumnName(columnNames[i])] = object.toDatabaseValue(columnNames[i]); + } + } else { + for (var key in object) { + if (object.hasOwnProperty(key)) { + if (object.toDatabaseValue) { + insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object.toDatabaseValue(key); + } else { + if (typeof object[key] == 'boolean') { + insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key] ? 1 : 0; + } else { + insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key]; + } + } + } + } + } + return insertOrUpdate; +} + +/** + * Builds an update statement + * @param {string} table table to update + * @param {Object} values object with values to update + * @param {string} [where] where clause + * @param {Array|Ojbect} [whereArgs] where bind parameters + * @return {Object} object with a sql property containing the update statement and an args property with bind arguments + */ +SqliteQueryBuilder.buildUpdate = function(table, values, where, whereArgs) { + var args = []; + var update = 'update ' + table + ' set '; + var first = true; + for (var columnName in values) { + if (!first) { + update += ', '; + } + first = false; + update += '"'+ columnName + '"'; + args.push(values[columnName]); + update += '=?'; + } + if (whereArgs) { + for (var i = 0; i < whereArgs.length; i++) { + args.push(whereArgs[i]); + } + } + if (where) { + update += ' where '; + update += where; + } + return { + sql: update, + args: args + }; +} + +/** + * Builds an update from an object + * @param {string} table table name to update + * @param {Object} object object with values to update + * @return {string} update statement + */ +SqliteQueryBuilder.buildObjectUpdate = function(table, object) { + var update = 'update ' + table + ' set '; + var first = true; + if (object.getColumnNames) { + var columnNames = object.getColumnNames(); + + for (var i = 0; i < columnNames.length; i++) { + var key = columnNames[i]; + if (!first) { + update += ', '; + } + first = false; + update += '"' + key + '"='; + update += '$' + SqliteQueryBuilder.fixColumnName(key); + } + } else { + for (var key in object) { + if (!first) { + update += ', '; + } + first = false; + + if (object.hasOwnProperty(key)) { + update += '"' + key + '"='; + update += '$' + SqliteQueryBuilder.fixColumnName(key); + } + } + } + + return update; +} + +function appendClauseToString(string, name, clause) { + if (clause) { + string += name + clause; + } + return string; +} + +function appendColumnsToString(columns, string) { + if (!columns || columns.length == 0) return string; + string += columnToAppend(columns[0]); + for (var i = 1; i < columns.length; i++) { + string += ', ' + columnToAppend(columns[i]); + } + string += ' '; + return string; +} + +function columnToAppend(column) { + return column.indexOf('*') != -1 ? column : '"' + column + '"'; +} + +function isEmpty(string) { + return !string || string.length === 0; +} + +},{}],18:[function(require,module,exports){ +(function (process,Buffer){ +/** + * This adapter uses sql.js to execute queries against the GeoPackage database + * @module db/sqljsAdapter + * @see {@link http://kripken.github.io/sql.js/documentation/|sqljs} + */ + +var sqljs = require('sql.js/dist/sql-asm-memory-growth.js'); +// var sqljs = require('sql.js/js/sql.js'); + +/** + * Returns a Promise which, when resolved, returns a {module:db/sqljsAdapter~Adapter} which has connected to the GeoPackage database file + * @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 + * @return {Promise} + */ +module.exports.createAdapter = function(filePath) { + var promise = new Promise(function(resolve, reject) { + sqljs().then(SQL => { + if (filePath && typeof filePath === 'string') { + if (typeof (process) !== 'undefined' && process.version) { + var fs = require('fs'); + if (filePath.indexOf('http') === 0) { + var http = require('http'); + http.get(filePath, function(response) { + if (response.statusCode !== 200) { + return reject(new Error('Unable to reach url: ' + filePath)); + } + var body = []; + response.on('data', chunk => body.push(chunk)); + response.on('end', function() { + var t = new Uint8Array(Buffer.concat(body)); + var db = new SQL.Database(t); + var adapter = new Adapter(db); + resolve(adapter); + }); + }); + } else { + try { + var stats = fs.statSync(filePath); + } catch (e) { + var db = new SQL.Database(); + var adapter = new Adapter(db); + return resolve(adapter); + } + var filebuffer = fs.readFileSync(filePath); + var t = new Uint8Array(filebuffer); + var db = new SQL.Database(t); + // console.log('setting wal mode'); + // var walMode = db.exec('PRAGMA journal_mode=DELETE'); + // console.log('walMode', walMode); + var adapter = new Adapter(db); + return resolve(adapter); + } + } else { + var xhr = new XMLHttpRequest(); + xhr.open('GET', filePath, true); + xhr.responseType = 'arraybuffer'; + + xhr.onload = function (e) { + if (xhr.status !== 200) { + return reject(new Error('Unable to reach url: ' + filePath)); + } + var uInt8Array = new Uint8Array(this.response); + var db = new SQL.Database(uInt8Array); + var adapter = new Adapter(db); + return resolve(adapter); + }; + xhr.onerror = function (e) { + return reject(new Error('Error reaching url: ' + filePath)); + }; + xhr.send(); + } + } else if (filePath) { + var byteArray = filePath; + var db = new SQL.Database(byteArray); + var adapter = new Adapter(db); + return resolve(adapter); + } else { + var db = new SQL.Database(); + var adapter = new Adapter(db); + return resolve(adapter); + } + }); + }); + + return promise; +} + +/** + * Creates an adapter from an already established better-sqlite3 database connection + * @param {sqljs.Database} db sqljs database connection + * @return {module:db/sqljsAdapter~Adapter} + */ +module.exports.createAdapterFromDb = function(db) { + return new Adapter(db); +} + +/** + * Class which adapts generic GeoPackage queries to sqljs queries + * @class Adapter + * @param {sqljs.Database} db sqljs database connection + */ +function Adapter(db) { + this.db = db; +} + +/** + * Closes the connection to the GeoPackage + */ +Adapter.prototype.close = function() { + this.db.close(); +} + +/** + * Get the connection to the database file + * @return {sqljs.Database} + */ +Adapter.prototype.getDBConnection = function () { + return this.db; +}; + +/** + * Returns a Uint8Array containing the contents of the database as a file + * @param {Function} callback called when export is complete + */ +Adapter.prototype.export = function(callback) { + callback(null, this.db.export()); +} + +/** + * Registers the given function so that it can be used by SQL statements + * @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} + * @param {string} name name of function to register + * @param {Function} functionDefinition function to register + * @return {module:db/sqljsAdapter~Adapter} this + */ +Adapter.prototype.registerFunction = function(name, functionDefinition) { + this.db.create_function(name, functionDefinition); + return this; +} + +/** + * Gets one row of results from the statement + * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#get-dynamic|sqljs get} + * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#getAsObject-dynamic|sqljs getAsObject} + * @param {string} sql statement to run + * @param {Array|Object} [params] substitution parameters + * @return {Object} + */ +Adapter.prototype.get = function (sql, params) { + params = params || []; + var statement = this.db.prepare(sql); + statement.bind(params); + var hasResult = statement.step(); + var row; + + if (hasResult) { + row = statement.getAsObject(); + } + + statement.free(); + return row; +}; + +/** + * Determines if a tableName exists in the database + * @param {String} tableName + * @returns {Boolean} + */ +Adapter.prototype.isTableExists = function (tableName) { + var statement = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=:name"); + statement.bind([tableName]); + var hasResult = statement.step(); + var row; + if (hasResult) { + row = statement.getAsObject(); + } + statement.free(); + return !!row; +}; + +/** + * Gets all results from the statement in an array + * @param {string} sql statement to run + * @param {Array|Object} [params] bind parameters + * @return {Object[]} + */ +Adapter.prototype.all = function (sql, params) { + var rows = []; + var iterator = this.each(sql, params); + for (var row of iterator) { + rows.push(row); + } + return rows; +}; + +/** + * Returns an Iterable with results from the query + * @param {string} sql statement to run + * @param {Object|Array} params bind parameters + * @return {Iterable} + */ +Adapter.prototype.each = function (sql, params) { + var statement = this.db.prepare(sql); + statement.bind(params); + + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + if (statement.step()) { + return { + value: statement.getAsObject(), + done: false + }; + } else { + statement.free(); + return { + done: true + } + } + } + } +}; + +/** + * Runs the statement specified, returning information about what changed + * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#run-dynamic|sqljs run} + * @param {string} sql statement to run + * @param {Object|Array} [params] bind parameters + * @return {Object} object containing a changes property indicating the number of rows changed and a lastInsertROWID indicating the last inserted row + */ +Adapter.prototype.run = function(sql, params) { + if (params) { + for (var key in params) { + params['$' + key] = params[key]; + } + } + this.db.run(sql, params); + var lastId = this.db.exec('select last_insert_rowid();'); + var lastInsertedId; + if (lastId) { + lastInsertedId = lastId[0].values[0][0]; + } + return { + lastInsertROWID: lastInsertedId, + changes: this.db.getRowsModified() + }; +}; + +/** + * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened + * @param {string} sql statement to run + * @param {Object|Array} [params] bind parameters + * @return {Number} last inserted row id + */ +Adapter.prototype.insert = function(sql, params) { + if (params) { + for (var key in params) { + params['$' + key] = params[key]; + } + } + var statement = this.db.prepare(sql, params); + statement.step(); + statement.free(); + var lastId = this.db.exec('select last_insert_rowid();'); + if (lastId) { + return lastId[0].values[0][0]; + } else { + return; + } +}; + +/** + * Runs the specified delete statement and returns the number of deleted rows + * @param {string} sql statement to run + * @param {Object|Array} [params] bind parameters + * @return {number} deleted rows + */ +Adapter.prototype.delete = function(sql, params) { + var rowsModified = 0; + var statement = this.db.prepare(sql, params); + statement.step(); + rowsModified = this.db.getRowsModified(); + statement.free(); + return rowsModified; +}; + +/** + * Drops the table + * @param {string} table table name + * @return {Boolean} indicates if the table was dropped + */ +Adapter.prototype.dropTable = function(table) { + var response = this.db.exec('DROP TABLE IF EXISTS "' + table + '"'); + var vacuum = this.db.exec('VACUUM'); + return !!response; +}; + +/** + * Counts rows that match the query + * @param {string} tableName table name from which to count + * @param {string} [where] where clause + * @param {Object|Array} [whereArgs] where args + * @return {Number} count + */ +Adapter.prototype.count = function (tableName, where, whereArgs) { + var sql = 'SELECT COUNT(*) as count FROM "' + tableName + '"'; + if (where) { + sql += ' where ' + where; + } + return this.get(sql, whereArgs).count; +}; + +}).call(this,require('_process'),require("buffer").Buffer) +},{"_process":284,"buffer":182,"fs":177,"http":329,"sql.js/dist/sql-asm-memory-growth.js":327}],19:[function(require,module,exports){ +/** + * Creates tables necessary for GeoPackages + * @module db/tableCreator + */ + +const SpatialReferenceSystemDao = require('../core/srs').SpatialReferenceSystemDao; +const DataTypes = require('./dataTypes'); + +/** + * `TableCreator` provides methods for creating the various standard tables in + * a GeoPackage database. + * + * @class + * @param {module:geoPackage~GeoPackage} geopackage GeoPackage object + */ +var TableCreator = function(geopackage) { + this.geopackage = geopackage; + this.connection = geopackage.getDatabase(); +} + +module.exports = TableCreator; + +/** + * Creates all required tables and Spatial Reference Systems, in addition to EPSG:3857 + * @return {Promise} + */ +TableCreator.prototype.createRequired = function () { + var dao = new SpatialReferenceSystemDao(this.geopackage); + return Promise.all([this.createSpatialReferenceSystem(), this.createContents()]) + .then(function() { + // Create the required Spatial Reference Systems (spec Requirement 11) + dao.createUndefinedGeographic(); + dao.createWgs84(); + dao.createUndefinedCartesian(); + // not required but very common + dao.createWebMercator(); + return true; + }); +}; + +/** + * Creates the spatial reference system tables + * @return {Promise} + */ +TableCreator.prototype.createSpatialReferenceSystem = function() { + return this.createTable('spatial_reference_system'); +} + +/** + * Creates the contents tables + * @return {Promise} + */ +TableCreator.prototype.createContents = function() { + return this.createTable('contents'); +} + +/** + * Creates the geometry columns tables + * @return {Promise} + */ +TableCreator.prototype.createGeometryColumns = function() { + return this.createTable('geometry_columns'); +} + +/** + * Creates the tile matrix set tables + * @return {Promise} + */ +TableCreator.prototype.createTileMatrixSet = function() { + return this.createTable('tile_matrix_set'); +} + +/** + * Creates the tile matrix tables + * @return {Promise} + */ +TableCreator.prototype.createTileMatrix = function() { + return this.createTable('tile_matrix'); +} + +/** + * Creates the data columns tables + * @return {Promise} + */ +TableCreator.prototype.createDataColumns = function() { + return this.createTable('data_columns'); +} + +/** + * Creates the data column constraints tables + * @return {Promise} + */ +TableCreator.prototype.createDataColumnConstraints = function() { + return this.createTable('data_column_constraints'); +} + +/** + * Creates the metadata tables + * @return {Promise} + */ +TableCreator.prototype.createMetadata = function() { + return this.createTable('metadata'); +} + +/** + * Creates the metadata reference tables + * @return {Promise} + */ +TableCreator.prototype.createMetadataReference = function() { + return this.createTable('metadata_reference'); +} + +/** + * Creates the extensions tables + * @return {Promise} + */ +TableCreator.prototype.createExtensions = function() { + return this.createTable('extensions'); +} + +/** + * Creates the table index tables + * @return {Promise} + */ +TableCreator.prototype.createTableIndex = function() { + return this.createTable('table_index'); +} + +/** + * Creates the geometry index tables + * @return {Promise} + */ +TableCreator.prototype.createGeometryIndex = function() { + return this.createTable('geometry_index'); +} + +/** + * Creates the feature tile link tables + * @return {Promise} + */ +TableCreator.prototype.createFeatureTileLink = function() { + return this.createTable('feature_tile_link'); +} + +/** + * Creates the extended relations tables + * @return {Promise} + */ +TableCreator.prototype.createExtendedRelations = function() { + return this.createTable('extended_relations'); +} + +/** + * Creates the contentsId tables + * @return {Promise} + */ +TableCreator.prototype.createContentsId = function() { + return this.createTable('contents_id'); +} + +/** + * Creates all tables necessary for the specified table creation script name in the GeoPackage + * @param {string} creationScriptName creation scripts to run + * @return {Promise} + */ +TableCreator.prototype.createTable = function(creationScriptName) { + var connection = this.connection; + + return tableCreationScripts[creationScriptName].reduce(function(sequence, sql) { + return sequence.then(function() { + try { + return !!connection.run(sql); + } catch (error) { + if (error.message.indexOf('already exists') === -1) { + throw error; + } + } + }); + }, Promise.resolve()); +} + +/** + * Create the given user table. + * + * @param {modle:user/userTable~UserTable} userTable user table to create + * @return {object} the result of {@link module:db/geoPackageConnection~GeoPackageConnection#run} + * @throws {Error} if the table already exists + */ +TableCreator.prototype.createUserTable = function (userTable) { + var connection = this.connection; + var result = connection.tableExists(userTable.table_name); + if (result) { + throw new Error('Table already exists and cannot be created: ' + userTable.table_name); + } + var check = ''; + + var sql = 'create table \'' + userTable.table_name + '\' ('; + for (var i = 0; i < userTable.columns.length; i++) { + var tc = userTable.columns[i]; + if (i) { + sql += ', '; + } + sql += '\n\'' + tc.name + '\' ' + tc.getTypeName(); + if (tc.max != null) { + sql += '(' + tc.max + ')'; + if (check.length) { + check += ' AND\n'; + } + check += '\tlength("'+tc.name+'") <= ' + tc.max; + } + if (tc.notNull) { + sql += ' not null' + } + if (tc.primaryKey) { + sql += ' primary key autoincrement'; + } + if (tc.defaultValue) { + if (tc.dataType === DataTypes.GPKGDataType.GPKG_DT_TEXT) { + sql += ' default \'' + tc.defaultValue + '\''; + } else { + sql += ' default ' + tc.defaultValue; + } + } + } + for (var i = 0; i < userTable.uniqueConstraints.length; i++) { + var uniqueConstraint = userTable.uniqueConstraints[i]; + sql += ',\n unique ('; + for (var j = 0; j < uniqueConstraint.columns.length; j++) { + var uniqueColumn = uniqueConstraint.columns[j]; + if (j) { + sql += ', '; + } + sql += uniqueColumn.name; + } + sql += ')'; + } + + if (check.length) { + sql += '\nCHECK(\n' + check + '\n)'; + } + + sql += '\n);'; + return connection.run(sql); +}; + +var tableCreationScripts = { + spatial_reference_system: [ + 'CREATE TABLE gpkg_spatial_ref_sys ('+ + ' srs_name TEXT NOT NULL,'+ + ' srs_id INTEGER NOT NULL PRIMARY KEY,'+ + ' organization TEXT NOT NULL,'+ + ' organization_coordsys_id INTEGER NOT NULL,'+ + ' definition TEXT NOT NULL,'+ + ' description TEXT,'+ + ' definition_12_063 TEXT NOT NULL DEFAULT "undefined"'+ + ')', + + 'CREATE VIEW st_spatial_ref_sys AS'+ + ' SELECT'+ + ' srs_name,'+ + ' srs_id,'+ + ' organization,'+ + ' organization_coordsys_id,'+ + ' definition,'+ + ' description'+ + ' FROM gpkg_spatial_ref_sys', + + 'CREATE VIEW spatial_ref_sys AS'+ + ' SELECT'+ + ' srs_id AS srid,'+ + ' organization AS auth_name,'+ + ' organization_coordsys_id AS auth_srid,'+ + ' definition AS srtext'+ + ' FROM gpkg_spatial_ref_sys' + ], + contents: [ + 'CREATE TABLE gpkg_contents ('+ + ' table_name TEXT NOT NULL PRIMARY KEY,'+ + ' data_type TEXT NOT NULL,'+ + ' identifier TEXT UNIQUE,'+ + " description TEXT DEFAULT '',"+ + " last_change DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),"+ + ' min_x DOUBLE,'+ + ' min_y DOUBLE,'+ + ' max_x DOUBLE,'+ + ' max_y DOUBLE,'+ + ' srs_id INTEGER,'+ + ' CONSTRAINT fk_gc_r_srs_id FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys(srs_id)'+ + ')' + ], + geometry_columns: [ + 'CREATE TABLE gpkg_geometry_columns ('+ + ' table_name TEXT NOT NULL,'+ + ' column_name TEXT NOT NULL,'+ + ' geometry_type_name TEXT NOT NULL,'+ + ' srs_id INTEGER NOT NULL,'+ + ' z TINYINT NOT NULL,'+ + ' m TINYINT NOT NULL,'+ + ' CONSTRAINT pk_geom_cols PRIMARY KEY (table_name, column_name),'+ + ' CONSTRAINT uk_gc_table_name UNIQUE (table_name),'+ + ' CONSTRAINT fk_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+ + ' CONSTRAINT fk_gc_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+ + ')', + + 'CREATE VIEW st_geometry_columns AS'+ + ' SELECT'+ + ' table_name,'+ + ' column_name,'+ + ' "ST_" || geometry_type_name AS geometry_type_name,'+ + ' g.srs_id,'+ + ' srs_name'+ + ' FROM gpkg_geometry_columns as g JOIN gpkg_spatial_ref_sys AS s'+ + ' WHERE g.srs_id = s.srs_id', + + 'CREATE VIEW geometry_columns AS'+ + ' SELECT'+ + ' table_name AS f_table_name,'+ + ' column_name AS f_geometry_column,'+ + ' (CASE geometry_type_name'+ + ' WHEN "GEOMETRY" THEN 0'+ + ' WHEN "POINT" THEN 1'+ + ' WHEN "LINESTRING" THEN 2'+ + ' WHEN "POLYGON" THEN 3'+ + ' WHEN "MULTIPOINT" THEN 4'+ + ' WHEN "MULTILINESTRING" THEN 5'+ + ' WHEN "MULTIPOLYGON" THEN 6'+ + ' WHEN "GEOMETRYCOLLECTION" THEN 7'+ + ' WHEN "CIRCULARSTRING" THEN 8'+ + ' WHEN "COMPOUNDCURVE" THEN 9'+ + ' WHEN "CURVEPOLYGON" THEN 10'+ + ' WHEN "MULTICURVE" THEN 11'+ + ' WHEN "MULTISURFACE" THEN 12'+ + ' WHEN "CURVE" THEN 13'+ + ' WHEN "SURFACE" THEN 14'+ + ' WHEN "POLYHEDRALSURFACE" THEN 15'+ + ' WHEN "TIN" THEN 16'+ + ' WHEN "TRIANGLE" THEN 17'+ + ' ELSE 0 END) AS geometry_type,'+ + ' 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,'+ + ' srs_id AS srid'+ + ' FROM gpkg_geometry_columns' + ], + tile_matrix_set: [ + 'CREATE TABLE gpkg_tile_matrix_set ('+ + ' table_name TEXT NOT NULL PRIMARY KEY,'+ + ' srs_id INTEGER NOT NULL,'+ + ' min_x DOUBLE NOT NULL,'+ + ' min_y DOUBLE NOT NULL,'+ + ' max_x DOUBLE NOT NULL,'+ + ' max_y DOUBLE NOT NULL,'+ + ' CONSTRAINT fk_gtms_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+ + ' CONSTRAINT fk_gtms_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+ + ')' + ], + tile_matrix: [ + 'CREATE TABLE gpkg_tile_matrix ('+ + ' table_name TEXT NOT NULL,'+ + ' zoom_level INTEGER NOT NULL,'+ + ' matrix_width INTEGER NOT NULL,'+ + ' matrix_height INTEGER NOT NULL,'+ + ' tile_width INTEGER NOT NULL,'+ + ' tile_height INTEGER NOT NULL,'+ + ' pixel_x_size DOUBLE NOT NULL,'+ + ' pixel_y_size DOUBLE NOT NULL,'+ + ' CONSTRAINT pk_ttm PRIMARY KEY (table_name, zoom_level),'+ + ' CONSTRAINT fk_tmm_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+ + ')', + + "CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_insert'"+ + "BEFORE INSERT ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')"+ + "WHERE (NEW.zoom_level < 0);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_update'"+ + "BEFORE UPDATE of zoom_level ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')"+ + "WHERE (NEW.zoom_level < 0);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_insert'"+ + "BEFORE INSERT ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')"+ + "WHERE (NEW.matrix_width < 1);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_update'"+ + "BEFORE UPDATE OF matrix_width ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')"+ + "WHERE (NEW.matrix_width < 1);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_insert'"+ + "BEFORE INSERT ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')"+ + "WHERE (NEW.matrix_height < 1);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_update'"+ + "BEFORE UPDATE OF matrix_height ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')"+ + "WHERE (NEW.matrix_height < 1);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_insert'"+ + "BEFORE INSERT ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')"+ + "WHERE NOT (NEW.pixel_x_size > 0);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_update'"+ + "BEFORE UPDATE OF pixel_x_size ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')"+ + "WHERE NOT (NEW.pixel_x_size > 0);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_insert'"+ + "BEFORE INSERT ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')"+ + "WHERE NOT (NEW.pixel_y_size > 0);"+ + "END", + + "CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_update'"+ + "BEFORE UPDATE OF pixel_y_size ON 'gpkg_tile_matrix'"+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')"+ + "WHERE NOT (NEW.pixel_y_size > 0);"+ + "END" + ], + data_columns: [ + 'CREATE TABLE gpkg_data_columns ('+ + ' table_name TEXT NOT NULL,'+ + ' column_name TEXT NOT NULL,'+ + ' name TEXT,'+ + ' title TEXT,'+ + ' description TEXT,'+ + ' mime_type TEXT,'+ + ' constraint_name TEXT,'+ + ' CONSTRAINT pk_gdc PRIMARY KEY (table_name, column_name),'+ + ' CONSTRAINT fk_gdc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+ + ')' + ], + data_column_constraints: [ + 'CREATE TABLE gpkg_data_column_constraints ('+ + ' constraint_name TEXT NOT NULL,'+ + ' constraint_type TEXT NOT NULL, /* "range" | "enum" | "glob" */'+ + ' value TEXT,'+ + ' min NUMERIC,'+ + ' min_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+ + ' max NUMERIC,'+ + ' max_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+ + ' description TEXT,'+ + ' CONSTRAINT gdcc_ntv UNIQUE (constraint_name, constraint_type, value)'+ + ')' + ], + metadata: [ + 'CREATE TABLE gpkg_metadata ('+ + ' id INTEGER CONSTRAINT m_pk PRIMARY KEY ASC NOT NULL UNIQUE,'+ + ' md_scope TEXT NOT NULL DEFAULT "dataset",'+ + ' md_standard_uri TEXT NOT NULL,'+ + ' mime_type TEXT NOT NULL DEFAULT "text/xml",'+ + ' metadata TEXT NOT NULL'+ + ')', + + "CREATE TRIGGER 'gpkg_metadata_md_scope_insert' "+ + "BEFORE INSERT ON 'gpkg_metadata' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table gpkg_metadata violates "+ + "constraint: md_scope must be one of undefined | fieldSession | "+ + "collectionSession | series | dataset | featureType | feature | "+ + "attributeType | attribute | tile | model | catalogue | schema | "+ + "taxonomy software | service | collectionHardware | "+ + "nonGeographicDataset | dimensionGroup') "+ + "WHERE NOT(NEW.md_scope IN "+ + "('undefined','fieldSession','collectionSession','series','dataset', "+ + "'featureType','feature','attributeType','attribute','tile','model', "+ + "'catalogue','schema','taxonomy','software','service', "+ + "'collectionHardware','nonGeographicDataset','dimensionGroup')); "+ + "END", + + "CREATE TRIGGER 'gpkg_metadata_md_scope_update' "+ + "BEFORE UPDATE OF 'md_scope' ON 'gpkg_metadata' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table gpkg_metadata violates "+ + "constraint: md_scope must be one of undefined | fieldSession | "+ + "collectionSession | series | dataset | featureType | feature | "+ + "attributeType | attribute | tile | model | catalogue | schema | "+ + "taxonomy software | service | collectionHardware | "+ + "nonGeographicDataset | dimensionGroup') "+ + "WHERE NOT(NEW.md_scope IN "+ + "('undefined','fieldSession','collectionSession','series','dataset', "+ + "'featureType','feature','attributeType','attribute','tile','model', "+ + "'catalogue','schema','taxonomy','software','service', "+ + "'collectionHardware','nonGeographicDataset','dimensionGroup')); "+ + "END" + ], + metadata_reference: [ + "CREATE TABLE gpkg_metadata_reference (" + + " reference_scope TEXT NOT NULL," + + " table_name TEXT," + + " column_name TEXT," + + " row_id_value INTEGER," + + " timestamp DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))," + + " md_file_id INTEGER NOT NULL," + + " md_parent_id INTEGER," + + " CONSTRAINT crmr_mfi_fk FOREIGN KEY (md_file_id) REFERENCES gpkg_metadata(id)," + + " CONSTRAINT crmr_mpi_fk FOREIGN KEY (md_parent_id) REFERENCES gpkg_metadata(id)" + + ")", + + "CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_insert' "+ + "BEFORE INSERT ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ + "violates constraint: reference_scope must be one of \"geopackage\", "+ + "table\", \"column\", \"row\", \"row/col\"') "+ + "WHERE NOT NEW.reference_scope IN "+ + "('geopackage','table','column','row','row/col'); "+ + "END", + + "CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_update' "+ + "BEFORE UPDATE OF 'reference_scope' ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ + "violates constraint: referrence_scope must be one of \"geopackage\", "+ + "\"table\", \"column\", \"row\", \"row/col\"') "+ + "WHERE NOT NEW.reference_scope IN "+ + "('geopackage','table','column','row','row/col'); "+ + "END", + + "CREATE TRIGGER 'gpkg_metadata_reference_column_name_insert' "+ + "BEFORE INSERT ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ + "violates constraint: column name must be NULL when reference_scope "+ + "is \"geopackage\", \"table\" or \"row\"') "+ + "WHERE (NEW.reference_scope IN ('geopackage','table','row') "+ + "AND NEW.column_name IS NOT NULL); "+ + "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ + "violates constraint: column name must be defined for the specified "+ + "table when reference_scope is \"column\" or \"row/col\"') "+ + "WHERE (NEW.reference_scope IN ('column','row/col') "+ + "AND NOT NEW.table_name IN ( "+ + "SELECT name FROM SQLITE_MASTER WHERE type = 'table' "+ + "AND name = NEW.table_name "+ + "AND sql LIKE ('%' || NEW.column_name || '%'))); "+ + "END", + + "CREATE TRIGGER 'gpkg_metadata_reference_column_name_update' "+ + "BEFORE UPDATE OF column_name ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ + "violates constraint: column name must be NULL when reference_scope "+ + "is \"geopackage\", \"table\" or \"row\"') "+ + "WHERE (NEW.reference_scope IN ('geopackage','table','row') "+ + "AND NEW.column_nameIS NOT NULL); "+ + "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ + "violates constraint: column name must be defined for the specified "+ + "table when reference_scope is \"column\" or \"row/col\"') "+ + "WHERE (NEW.reference_scope IN ('column','row/col') "+ + "AND NOT NEW.table_name IN ( "+ + "SELECT name FROM SQLITE_MASTER WHERE type = 'table' "+ + "AND name = NEW.table_name "+ + "AND sql LIKE ('%' || NEW.column_name || '%'))); "+ + "END", + + "CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_insert' "+ + "BEFORE INSERT ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ + "violates constraint: row_id_value must be NULL when reference_scope "+ + "is \"geopackage\", \"table\" or \"column\"') "+ + "WHERE NEW.reference_scope IN ('geopackage','table','column') "+ + "AND NEW.row_id_value IS NOT NULL; "+ + "END ", + + "CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_update' "+ + "BEFORE UPDATE OF 'row_id_value' ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ + "violates constraint: row_id_value must be NULL when reference_scope "+ + "is \"geopackage\", \"table\" or \"column\"') "+ + "WHERE NEW.reference_scope IN ('geopackage','table','column') "+ + "AND NEW.row_id_value IS NOT NULL; "+ + "END", + + "CREATE TRIGGER 'gpkg_metadata_reference_timestamp_insert' "+ + "BEFORE INSERT ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ + "violates constraint: timestamp must be a valid time in ISO 8601 "+ + "\"yyyy-mm-ddThh:mm:ss.cccZ\" form') "+ + "WHERE NOT (NEW.timestamp GLOB "+ + "'[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' "+ + "AND strftime('%s',NEW.timestamp) NOT NULL); "+ + "END", + + "CREATE TRIGGER 'gpkg_metadata_reference_timestamp_update' "+ + "BEFORE UPDATE OF 'timestamp' ON 'gpkg_metadata_reference' "+ + "FOR EACH ROW BEGIN "+ + "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ + "violates constraint: timestamp must be a valid time in ISO 8601 "+ + "\"yyyy-mm-ddThh:mm:ss.cccZ\" form') "+ + "WHERE NOT (NEW.timestamp GLOB "+ + "'[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' "+ + "AND strftime('%s',NEW.timestamp) NOT NULL); "+ + "END " + ], + extensions: [ + 'CREATE TABLE gpkg_extensions ('+ + ' table_name TEXT,'+ + ' column_name TEXT,'+ + ' extension_name TEXT NOT NULL,'+ + ' definition TEXT NOT NULL,'+ + ' scope TEXT NOT NULL,'+ + ' CONSTRAINT ge_tce UNIQUE (table_name, column_name, extension_name)'+ + ')' + ], + table_index: [ + 'CREATE TABLE nga_table_index ('+ + ' table_name TEXT NOT NULL PRIMARY KEY,'+ + ' last_indexed DATETIME'+ + ')' + ], + geometry_index: [ + 'CREATE TABLE nga_geometry_index ('+ + ' table_name TEXT NOT NULL,'+ + ' geom_id INTEGER NOT NULL,'+ + ' min_x DOUBLE NOT NULL,'+ + ' max_x DOUBLE NOT NULL,'+ + ' min_y DOUBLE NOT NULL,'+ + ' max_y DOUBLE NOT NULL,'+ + ' min_z DOUBLE,'+ + ' max_z DOUBLE,'+ + ' min_m DOUBLE,'+ + ' max_m DOUBLE,'+ + ' CONSTRAINT pk_ngi PRIMARY KEY (table_name, geom_id),'+ + ' CONSTRAINT fk_ngi_nti_tn FOREIGN KEY (table_name) REFERENCES nga_table_index(table_name)'+ + ')' + ], + feature_tile_link: [ + 'CREATE TABLE nga_feature_tile_link ('+ + ' feature_table_name TEXT NOT NULL,'+ + ' tile_table_name TEXT NOT NULL,'+ + ' CONSTRAINT pk_nftl PRIMARY KEY (feature_table_name, tile_table_name)'+ + ')' + ], + extended_relations: [ + 'CREATE TABLE gpkgext_relations (' + + ' id INTEGER PRIMARY KEY AUTOINCREMENT,' + + ' base_table_name TEXT NOT NULL,' + + ' base_primary_column TEXT NOT NULL DEFAULT \'id\',' + + ' related_table_name TEXT NOT NULL,' + + ' related_primary_column TEXT NOT NULL DEFAULT \'id\',' + + ' relation_name TEXT NOT NULL,' + + ' mapping_table_name TEXT NOT NULL UNIQUE' + + ')' + ], + contents_id: [ + 'CREATE TABLE nga_contents_id (' + + ' id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' + + ' table_name TEXT NOT NULL,' + + ' CONSTRAINT uk_nci_table_name UNIQUE (table_name),' + + ' CONSTRAINT fk_nci_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)' + + ')' + ] +}; + +},{"../core/srs":9,"./dataTypes":14}],20:[function(require,module,exports){ +/** + * Base Extension + * @module extension/baseExtension + */ + +var Extension = require('./index').Extension + , ExtensionDao = require('./index').ExtensionDao; +/** + * Abstract base GeoPackage extension + * @class + */ +var BaseExtension = function(geoPackage) { + this.geoPackage = geoPackage; + this.connection = geoPackage.connection; + this.extensionsDao = geoPackage.getExtensionDao(); +} + +module.exports = BaseExtension; + +/** + * Get the extension or create as needed + * @param {String} extensionName extension name + * @param {String} tableName table name + * @param {String} columnName column name + * @param {String} definition extension definition + * @param {String} scopeType extension scope type + * @return {Promise} + */ +BaseExtension.prototype.getOrCreate = function(extensionName, tableName, columnName, definition, scopeType) { + var extension = this.getExtension(extensionName, tableName, columnName); + if (extension) { + return Promise.resolve(extension); + } + return this.extensionsDao.createTable() + .then(function() { + return this.createExtension(extensionName, tableName, columnName, definition, scopeType); + }.bind(this)); +}; + +/** + * Get the extension for the name, table name and column name + * @param {String} extensionName extension name + * @param {String} tableName table name + * @param {String} columnName column name + * @param {Function} callback Called with err if one occurred and the extension + */ +BaseExtension.prototype.getExtension = function(extensionName, tableName, columnName) { + if (!this.extensionsDao.isTableExists()) { + return false; + } + return this.extensionsDao.queryByExtensionAndTableNameAndColumnName(extensionName, tableName, columnName); +}; + +/** + * Determine if the GeoPackage has the extension + * @param {String} extensionName extension name + * @param {String} tableName table name + * @param {String} columnName column name + */ +BaseExtension.prototype.hasExtension = function(extensionName, tableName, columnName) { + var exists = this.getExtension(extensionName, tableName, columnName); + return !!this.getExtension(extensionName, tableName, columnName).length; +}; + +BaseExtension.prototype.createExtension = function(extensionName, tableName, columnName, definition, scopeType) { + var extension = new Extension(); + extension.table_name = tableName; + extension.column_name = columnName; + extension.extension_name = extensionName; + extension.definition = definition; + extension.scope = scopeType; + return this.extensionsDao.create(extension); +}; + +},{"./index":25}],21:[function(require,module,exports){ +/** + * @memberOf module:extension/contents + * @class ContentsId + */ + +/** + * Contents Id object, for maintaining a unique identifier for contents tables + * @constructor + */ +var ContentsId = function() { + /** + * Id column, primary key + * @member {Number} + */ + this.id = undefined; + + /** + * Table name column + * @member {String} + */ + this.table_name = undefined; +}; + +module.exports = ContentsId; + +},{}],22:[function(require,module,exports){ +/** + * @memberOf module:extension/contents + * @class ContentsIdDao + */ + +var Dao = require('../../dao/dao') + , ContentsId = require('./contentsId'); +var util = require('util'); + +/** + * Contents Id Data Access Object + * @extends {module:dao/dao~Dao} + * @constructor + */ +var ContentsIdDao = function(geoPackage) { + Dao.call(this, geoPackage); +}; + +util.inherits(ContentsIdDao, Dao); + +/** + * Create a {module:extension/contents.ContentsId} object + * @return {module:extension/contents.ContentsId} + */ +ContentsIdDao.prototype.createObject = function() { + return new ContentsId(); +}; + +/** + * Create the necessary tables for this dao + * @return {Promise} + */ +ContentsIdDao.prototype.createTable = function() { + return this.geoPackage.getTableCreator().createContentsId(); +}; + +/** + * Get all the table names + * @return {string[]} + */ +ContentsIdDao.prototype.getTableNames = function() { + var tableNames = []; + var tableNameColumns = this.queryForColumns('table_name'); + for (var i = 0; i < tableNameColumns.length; i++) { + tableNames.push(tableNameColumns[i].table_name); + } + return tableNames; +}; + +/** + * Query by table name + * @param {string} tableName name of the table + * @return {module:extension/contents.ContentsId} + */ +ContentsIdDao.prototype.queryForTableName = function(tableName) { + var contentsIds = this.queryForAll(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName)); + if (contentsIds.length > 0) { + return contentsIds[0]; + } else { + return null; + } +}; + +/** + * Delete by tableName + * @param {string} tableName the table name to delete by + * @return {number} number of deleted rows + */ +ContentsIdDao.prototype.deleteByTableName = function(tableName) { + return this.deleteWhere(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName)); +}; + +ContentsIdDao.TABLE_NAME = 'nga_contents_id'; +ContentsIdDao.COLUMN_ID = 'id'; +ContentsIdDao.COLUMN_TABLE_NAME = 'table_name'; + +ContentsIdDao.prototype.gpkgTableName = ContentsIdDao.TABLE_NAME; +ContentsIdDao.prototype.idColumns = ['id']; + +module.exports = ContentsIdDao; + +},{"../../dao/dao":11,"./contentsId":21,"util":343}],23:[function(require,module,exports){ +/** + * @module extension/contents + */ + +var BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension + , ContentsDao = require('../../core/contents').ContentsDao + , ContentsIdDao = require('./contentsIdDao'); + +var util = require('util'); + +/** + * Style extension + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + * @extends {module:extension/baseExtension~BaseExtension} + * @class ContentsIdExtension + * @constructor + */ +var ContentsIdExtension = function(geoPackage) { + BaseExtension.call(this, geoPackage); + this.contentsIdDao = geoPackage.getContentsIdDao(); +}; + +util.inherits(ContentsIdExtension, BaseExtension); + +/** + * Get or create the contents id extension + * @return {Promise} + */ +ContentsIdExtension.prototype.getOrCreateExtension = function() { + return this.getOrCreate(ContentsIdExtension.EXTENSION_NAME, null, null, ContentsIdExtension.EXTENSION_DEFINITION, Extension.READ_WRITE) + .then(function() { + return this.contentsIdDao.createTable(); + }.bind(this)); +}; + +/** + * Get the ContentsIdDao + * @returns {module:extension/contents.ContentsIdDao} + */ +ContentsIdExtension.prototype.getDao = function() { + return this.contentsIdDao; +}; + +ContentsIdExtension.prototype.has = function () { + return this.hasExtension(ContentsIdExtension.EXTENSION_NAME, null, null) && this.contentsIdDao.isTableExists(); +}; + +/** + * Get the ContentsId object + * @param contents {module:core/contents.Contents} + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.get = function (contents) { + var contentsId = null; + if (contents && contents.table_name) { + contentsId = this.getByTableName(contents.table_name); + } + return contentsId; +}; + +/** + * Get the ContentsId object + * @param tableName + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.getByTableName = function (tableName) { + var contentsId = null; + if (this.contentsIdDao.isTableExists()) { + contentsId = this.contentsIdDao.queryForTableName(tableName); + } + return contentsId; +}; + +/** + * Get the ContentsId id + * @param contents {module:core/contents.Contents} + * @returns {Number} + */ +ContentsIdExtension.prototype.getId = function (contents) { + let contentsId = null; + if (contents && contents.table_name) { + contentsId = this.getIdByTableName(contents.table_name); + } + return contentsId; +}; + +/** + * Get the ContentsId id + * @param tableName + * @returns {Number} + */ +ContentsIdExtension.prototype.getIdByTableName = function (tableName) { + var id = null; + if (this.contentsIdDao.isTableExists()) { + var contentsId = this.contentsIdDao.queryForTableName(tableName); + if (contentsId) { + id = contentsId.id; + } + } + return id; +}; + +/** + * Creates contentsId for contents + * @param contents {module:core/contents.Contents} + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.create = function (contents) { + var contentsId = null; + if (contents && contents.table_name) { + contentsId = this.createWithTableName(contents.table_name); + } + return contentsId; +}; + +/** + * Creates contentsId for contents + * @param tableName + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.createWithTableName = function (tableName) { + var contentsId = this.contentsIdDao.createObject(); + contentsId.table_name = tableName; + contentsId.id = this.contentsIdDao.create(contentsId); + return contentsId; +}; + +/** + * Creates contentsId for contents + * @param contents {module:core/contents.Contents} + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.createId = function (contents) { + var contentsId = null; + if (contents && contents.table_name) { + contentsId = this.createIdWithTableName(contents.table_name); + } + return contentsId; +}; + +/** + * Creates contentsId for contents + * @param tableName {string} + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.createIdWithTableName = function (tableName) { + return this.createWithTableName(tableName); +}; + +/** + * Gets or creates contentsId for contents + * @param contents {module:core/contents.Contents} + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.getOrCreateId = function (contents) { + var contentsId = null; + if (contents && contents.table_name) { + contentsId = this.getOrCreateIdByTableName(contents.table_name); + } + return contentsId; +}; + +/** + * Gets or creates contentsId for table name + * @param tableName {string} + * @returns {module:extension/contents.ContentsId} + */ +ContentsIdExtension.prototype.getOrCreateIdByTableName = function (tableName) { + var contentId = this.getByTableName(tableName); + if (contentId == null) { + contentId = this.createWithTableName(tableName); + } + return contentId; +}; + +/** + * Deletes contentsId for contents + * @param contents {module:core/contents.Contents} + * @returns {number} number of deleted rows + */ +ContentsIdExtension.prototype.deleteId = function (contents) { + var deleted = false; + if (contents && contents.table_name) { + deleted = this.deleteIdByTableName(contents.table_name); + } + return deleted; +}; + +/** + * Deletes contentId for table name + * @param tableName {string} + * @returns {number} number of deleted rows + */ +ContentsIdExtension.prototype.deleteIdByTableName = function (tableName) { + return this.contentsIdDao.deleteByTableName(tableName); +}; + +/** + * Number of contentsIds + * @returns {number} + */ +ContentsIdExtension.prototype.count = function () { + var count = 0; + if (this.has()) { + count = this.contentsIdDao.count(); + } + return count; +}; + +/** + * Create contentsIds for contents of type passed in + * @param type {string} defaults to "" + * @returns {number} + */ +ContentsIdExtension.prototype.createIds = function (type = "") { + var missing = this.getMissing(type); + for (var i = 0; i < missing.length; i++) { + this.getOrCreateIdByTableName(missing[i].table_name); + } + return missing.length; +}; + +/** + * Deletes ids by type + * @param type + * @returns {number} + */ +ContentsIdExtension.prototype.deleteIds = function (type = "") { + var deleted = 0; + if (this.has()) { + if (type.length === 0) { + deleted = this.contentsIdDao.deleteAll(); + } else { + var ids = this.getIdsByType(type); + for (var i = 0; i < ids.length; i++) { + deleted += this.contentsIdDao.deleteById(ids[i].id); + } + } + } + return deleted; +}; + +ContentsIdExtension.prototype.getIdsByType = function (type = "") { + var contentIds = []; + if (this.has()) { + var query = "SELECT "; + query += ContentsIdDao.COLUMN_ID; + query += ", "; + query += ContentsIdDao.COLUMN_TABLE_NAME; + query += " FROM " + ContentsIdDao.TABLE_NAME; + query += " WHERE "; + query += ContentsIdDao.COLUMN_TABLE_NAME; + query += " IN (SELECT "; + query += ContentsDao.COLUMN_TABLE_NAME; + query += " FROM "; + query += ContentsDao.TABLE_NAME; + var where = ""; + var params = []; + if (type != null && type.length > 0) { + where += ContentsDao.COLUMN_DATA_TYPE; + where += " = ?"; + params.push(type); + } + if (where.length > 0) { + query += " WHERE " + where; + } + query += ")"; + contentIds = this.connection.all(query, params); + } + return contentIds; +}; + +/** + * Get contents without contents ids + * @param type + * @returns {string[]} + */ +ContentsIdExtension.prototype.getMissing = function (type = "") { + var query = "SELECT " + ContentsDao.COLUMN_TABLE_NAME + " FROM " + ContentsDao.TABLE_NAME; + var where = ""; + var params = []; + if (type != null && type.length > 0) { + where += ContentsDao.COLUMN_DATA_TYPE; + where += " = ?"; + params.push(type); + } + if (this.has()) { + if (where.length > 0) { + where += " AND "; + } + where += ContentsDao.COLUMN_TABLE_NAME; + where += " NOT IN (SELECT "; + where += ContentsIdDao.COLUMN_TABLE_NAME; + where += " FROM "; + where += ContentsIdDao.TABLE_NAME; + where += ")"; + } + if (where.length > 0) { + query += " WHERE " + where; + } + return this.connection.all(query, params); +}; + +/** + * Remove contents id extension + */ +ContentsIdExtension.prototype.removeExtension = function() { + if (this.contentsIdDao.isTableExists()) { + this.geoPackage.deleteTable(ContentsIdDao.TABLE_NAME); + } + if (this.extensionsDao.isTableExists()) { + this.extensionsDao.deleteByExtension(ContentsIdDao.EXTENSION_NAME); + } +}; + +ContentsIdExtension.EXTENSION_NAME = 'nga_contents_id'; +ContentsIdExtension.EXTENSION_AUTHOR = 'nga'; +ContentsIdExtension.EXTENSION_NAME_NO_AUTHOR = 'contents_id'; +ContentsIdExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/contents-id.html'; + +module.exports = ContentsIdExtension; + +},{"../.":25,"../../core/contents":8,"../baseExtension":20,"./contentsIdDao":22,"util":343}],24:[function(require,module,exports){ +/** + * CrsWktExtension module. + * @module extension/crsWkt + */ + +var BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension; + +var util = require('util'); + +/** + * OGC Well known text representation of Coordinate Reference Systems extensionName + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + * @class + * @extends {module:extension/baseExtension~BaseExtension} + */ +var CrsWktExtension = function(geoPackage) { + BaseExtension.call(this, geoPackage); + + this.extensionName = CrsWktExtension.EXTENSION_NAME; + + this.extensionDefinition = CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION; +} + +util.inherits(CrsWktExtension, BaseExtension); + +/** + * Get or create the extension + * @return {Promise} + */ +CrsWktExtension.prototype.getOrCreateExtension = function() { + return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE); +}; + +CrsWktExtension.EXTENSION_NAME = 'gpkg_crs_wkt'; +CrsWktExtension.EXTENSION_CRS_WKT_AUTHOR = 'gpkg'; +CrsWktExtension.EXTENSION_CRS_WKT_NAME_NO_AUTHOR = 'crs_wkt'; +CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION = 'http://www.geopackage.org/spec/#extension_crs_wkt'; + +module.exports.CrsWktExtension = CrsWktExtension; + +},{"../.":25,"../baseExtension":20,"util":343}],25:[function(require,module,exports){ +/** + * Metadata module. + * @module extension + * @see module:dao/dao + */ + +var Dao = require('../dao/dao') + , ColumnValues = require('../dao/columnValues') + , TableCreator = require('../db/tableCreator'); + +var util = require('util'); + +/** + * Indicates that a particular extension applies to a GeoPackage, a table in a + * GeoPackage or a column of a table in a GeoPackage. An application that access + * a GeoPackage can query the gpkg_extensions table instead of the contents of + * all the user data tables to determine if it has the required capabilities to + * read or write to tables with extensions, and to “fail fast” and return an + * error message if it does not. + * @class Extension + */ +var Extension = function() { + + /** + * Name of the table that requires the extension. When NULL, the extension + * is required for the entire GeoPackage. SHALL NOT be NULL when the + * column_name is not NULL. + * @member {String} + */ + this.table_name; + + /** + * Name of the column that requires the extension. When NULL, the extension + * is required for the entire table. + * @member {String} + */ + this.column_name; + + /** + * The case sensitive name of the extension that is required, in the form + * _. + * @member {String} + */ + this.extension_name; + + /** + * Definition of the extension in the form specfied by the template in + * GeoPackage Extension Template (Normative) or reference thereto. + * @member {String} + */ + this.definition; + + /** + * Indicates scope of extension effects on readers / writers: read-write or + * write-only in lowercase. + * @member {String} + */ + this.scope; +} + +Extension.EXTENSION_NAME_DIVIDER = "_"; + +Extension.READ_WRITE = "read-write"; +Extension.WRITE_ONLY = "write-only"; + +Extension.prototype.setExtensionName = function(author, extensionName) { + this.extension_name = Extension.buildExtensionName(author, extensionName); +}; + +Extension.prototype.getAuthor = function() { + return Extension.getAuthorWithExtensionName(this.extension_name); +} + +Extension.prototype.getExtensionNameNoAuthor = function() { + return Extension.getExtensionNameNoAuthor(this.extension_name); +} + +Extension.buildExtensionName = function(author, extensionName) { + return author + Extension.EXTENSION_NAME_DIVIDER + extensionName; +} + +Extension.getAuthorWithExtensionName = function(extensionName) { + return extensionName.split(Extension.EXTENSION_NAME_DIVIDER)[0]; +} + +Extension.getExtensionNameNoAuthor = function(extensionName) { + return extensionName.slice(extensionName.indexOf(Extension.EXTENSION_NAME_DIVIDER)+1); +} + +/** + * Extension Data Access Object + * @class + * @extends {module:dao/dao~Dao} + */ +var ExtensionDao = function(geoPackage) { + Dao.call(this, geoPackage); +}; + +util.inherits(ExtensionDao, Dao); + +ExtensionDao.prototype.createObject = function(row) { + var e = new Extension(); + for (var key in row) { + e[key] = row[key]; + } + return e; +}; + +ExtensionDao.prototype.queryByExtension = function(extensionName) { + var results = this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); + var e = this.createObject(results[0]); + return e; +} + +ExtensionDao.prototype.queryAllByExtension = function(extensionName) { + var extensions = [] + for (var row of this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName)) { + var e = this.createObject(row); + extensions.push(e); + } + if (extensions.length) { + return extensions; + } else { + return false; + } +} + +ExtensionDao.prototype.queryByExtensionAndTableName = function(extensionName, tableName) { + var values = new ColumnValues(); + values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); + values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName); + var extensions = []; + for (var row of this.queryForFieldValues(values)) { + var e = this.createObject(row); + extensions.push(e); + } + if (extensions.length) { + return extensions; + } else { + return false; + } +} + +ExtensionDao.prototype.queryByExtensionAndTableNameAndColumnName = function (extensionName, tableName, columnName) { + var values = new ColumnValues(); + values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); + values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName); + values.addColumn(ExtensionDao.COLUMN_COLUMN_NAME, columnName); + var extensions = []; + for (var row of this.queryForFieldValues(values)) { + var e = this.createObject(row); + extensions.push(e); + } + if (extensions.length) { + return extensions; + } else { + return false; + } +}; + +ExtensionDao.prototype.createTable = function() { + var tc = new TableCreator(this.geoPackage); + return tc.createExtensions(); +} + +ExtensionDao.prototype.deleteByExtension = function(extensionName) { + var values = new ColumnValues(); + values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); + this.deleteWhere(this.buildWhere(values, '='), this.buildWhereArgs(values)); +} + +ExtensionDao.prototype.deleteByExtensionAndTableName = function(extensionName, tableName) { + var values = new ColumnValues(); + values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); + values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName); + this.deleteWhere(this.buildWhere(values, 'and'), this.buildWhereArgs(values)); +} + +ExtensionDao.TABLE_NAME = "gpkg_extensions"; +ExtensionDao.COLUMN_TABLE_NAME = "table_name"; +ExtensionDao.COLUMN_COLUMN_NAME = "column_name"; +ExtensionDao.COLUMN_EXTENSION_NAME = "extension_name"; +ExtensionDao.COLUMN_DEFINITION = "definition"; +ExtensionDao.COLUMN_SCOPE = "scope"; + +ExtensionDao.prototype.gpkgTableName = ExtensionDao.TABLE_NAME; +ExtensionDao.prototype.idColumns = [ExtensionDao.COLUMN_TABLE_NAME, ExtensionDao.COLUMN_COLUMN_NAME, ExtensionDao.COLUMN_EXTENSION_NAME]; + +module.exports.ExtensionDao = ExtensionDao; +module.exports.Extension = Extension; + +},{"../dao/columnValues":10,"../dao/dao":11,"../db/tableCreator":19,"util":343}],26:[function(require,module,exports){ +/** + * Feature Table Index + * @module extension/index + */ + +var Extension = require('../index').Extension + , ExtensionDao = require('../index').ExtensionDao + , BaseExtension = require('../baseExtension') + , TableIndexDao = require('./tableIndex').TableIndexDao + , TableIndex = require('./tableIndex').TableIndex + , GeometryIndexDao = require('./geometryIndex').GeometryIndexDao + , RTreeIndexDao = require('../rtree').RTreeIndexDao + , RTreeIndex = require('../rtree').RTreeIndex + , ContentsDao = require('../../core/contents').ContentsDao + , EnvelopeBuilder = require('../../geom/envelopeBuilder'); + +var proj4 = require('proj4'); +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +var util = require('util'); + +/** + * This class will either use the RTree index if it exists, or the + * Feature Table Index NGA Extension implementation. This extension is used to + * index Geometries within a feature table by their minimum bounding box for + * bounding box queries. + * @extends {module:extension/baseExtension~BaseExtension} + * @class + */ +var FeatureTableIndex = function(geoPackage, featureDao) { + BaseExtension.call(this, geoPackage); + + this.progress; + + /** + * Feature Dao to index + * @type {module:features/user/featureDao~FeatureDao} + */ + this.featureDao = featureDao; + + this.extensionName = Extension.buildExtensionName(FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR, FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR); + + this.extensionDefinition = FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION; + + this.tableName = featureDao.table_name; + + this.columnName = featureDao.getGeometryColumnName(); + + this.extensionsDao = geoPackage.getExtensionDao(); + + this.tableIndexDao = geoPackage.getTableIndexDao(); + + this.geometryIndexDao = geoPackage.getGeometryIndexDao(featureDao); + + this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao); + this.rtreeIndexDao.gpkgTableName = 'rtree_'+this.tableName+'_'+this.columnName; + + this.rtreeIndex = new RTreeIndex(geoPackage, featureDao); + + /** + * true if the table is indexed with an RTree + * @type {Boolean} + */ + this.rtreeIndexed = this.hasExtension('gpkg_rtree_index', this.tableName, this.columnName); +} + +util.inherits(FeatureTableIndex, BaseExtension); + +/** + * Index the table if not already indexed + * @param {Function} progress function which is called with progress while indexing + * @return {Promise} promise resolved when the indexing is complete + */ +FeatureTableIndex.prototype.index = function(progress) { + return this.indexWithForce(false, progress); +}; + +/** + * Index the table if not already indexed or force is true + * @param {Boolean} force force index even if the table is already indexed + * @param {Function} progress function which is called with progress while indexing + * @return {Promise} promise resolved when the indexing is complete + */ +FeatureTableIndex.prototype.indexWithForce = function(force, progress) { + progress = progress || function() {}; + this.progress = function(message) { + setTimeout(progress, 0, message); + }; + var indexed = this.isIndexed(); + if (force || !indexed) { + return this.getOrCreateExtension() + .then(function(extension) { + return this.getOrCreateTableIndex(); + }.bind(this)) + .then(function(tableIndex) { + return this.createOrClearGeometryIndicies() + .then(function() { + return this.indexTable(tableIndex); + }.bind(this)) + .then(function() { + return true; + }); + }.bind(this)); + } else { + return Promise.resolve(indexed); + } +} + +/** + * Check if the table is indexed either with an RTree or the NGA Feature Table Index + * @return {Boolean} + */ +FeatureTableIndex.prototype.isIndexed = function () { + if (this.rtreeIndexed) return true; + + try { + var result = this.getFeatureTableIndexExtension(); + if (result) { + var contentsDao = this.geoPackage.getContentsDao(); + var contents = contentsDao.queryForId(this.tableName); + if (!contents) return false; + var lastChange = new Date(contents.last_change); + var tableIndex = this.tableIndexDao.queryForId(this.tableName); + if (!tableIndex || !tableIndex.last_indexed) { + return false; + } + var lastIndexed = new Date(tableIndex.last_indexed); + return lastIndexed >= lastChange; + } else { + return false; + } + } catch (e) { + return false; + } +}; + +/** + * Returns the feature table index extension for this table and column name if exists + * @return {module:extension~Extension} + */ +FeatureTableIndex.prototype.getFeatureTableIndexExtension = function () { + return this.getExtension(this.extensionName, this.tableName, this.columnName); +}; + +/** + * Get or create the extension for this table name and column name + * @return {module:extension~Extension} + */ +FeatureTableIndex.prototype.getOrCreateExtension = function() { + return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.READ_WRITE); +}; + +/** + * Get or create if needed the table index + * @return {Promise} + */ +FeatureTableIndex.prototype.getOrCreateTableIndex = function() { + var tableIndex = this.getTableIndex(); + if (tableIndex) return Promise.resolve(tableIndex); + return this.tableIndexDao.createTable() + .then(function() { + this.createTableIndex(); + return this.getTableIndex(); + }.bind(this)); +}; + +/** + * Create the table index + * @return {module:extension/index~TableIndex} + */ +FeatureTableIndex.prototype.createTableIndex = function() { + var ti = new TableIndex(); + ti.table_name = this.tableName; + ti.last_indexed = this.lastIndexed; + return this.tableIndexDao.create(ti); +}; + +/** + * Get the table index + * @return {module:extension/index~TableIndex} + */ +FeatureTableIndex.prototype.getTableIndex = function() { + if (this.tableIndexDao.isTableExists()) { + return this.tableIndexDao.queryForId(this.tableName); + } else { + return; + } +}; + +/** + * Clear the geometry indices or create the table if needed + * @return {Promise} resolved when complete + */ +FeatureTableIndex.prototype.createOrClearGeometryIndicies = function() { + return this.geometryIndexDao.createTable() + .then(function() { + return this.clearGeometryIndicies(); + }.bind(this)); +}; + +/** + * Clears the geometry indices + * @return {Number} number of rows deleted + */ +FeatureTableIndex.prototype.clearGeometryIndicies = function() { + var where = this.geometryIndexDao.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, this.tableName); + var whereArgs = this.geometryIndexDao.buildWhereArgs(this.tableName); + return this.geometryIndexDao.deleteWhere(where, whereArgs); +}; + +/** + * Indexes the table + * @param {module:extension/index~TableIndex} tableIndex TableIndex + * @return {Promise} resolved when complete + */ +FeatureTableIndex.prototype.indexTable = function(tableIndex) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + this.indexChunk(0, tableIndex, resolve, reject); + }.bind(this)); + }.bind(this)) + .then(function(result) { + return this.updateLastIndexed(tableIndex); + }.bind(this)); +}; + +/** + * Indexes a chunk of 100 rows + * @param {Number} page page to start on + * @param {module:extension/index~TableIndex} tableIndex TableIndex + * @param {Function} resolve function to call when all chunks are indexed + * @param {Function} reject called if there is an error + */ +FeatureTableIndex.prototype.indexChunk = function(page, tableIndex, resolve, reject) { + var rows = this.featureDao.queryForChunk(100, page); + if (rows.length) { + this.progress('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100)); + console.log('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100)); + rows.forEach(function(row) { + var fr = this.featureDao.getRow(row); + this.indexRow(tableIndex, fr.getId(), fr.getGeometry()); + }.bind(this)); + setTimeout(function() { + this.indexChunk(++page, tableIndex, resolve, reject); + }.bind(this)); + } else { + resolve(); + } +} + +/** + * Indexes a row + * @param {module:extension/index~TableIndex} tableIndex TableIndex` + * @param {Number} geomId id of the row + * @param {module:geom/geometryData~GeometryData} geomData GeometryData to index + * @return {Boolean} success + */ +FeatureTableIndex.prototype.indexRow = function(tableIndex, geomId, geomData) { + if (!geomData) return false; + var envelope = geomData.envelope; + if (!envelope) { + var geometry = geomData.geometry; + if (geometry) { + envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geometry); + } + } + if (envelope) { + var geometryIndex = this.geometryIndexDao.populate(tableIndex, geomId, envelope); + return this.geometryIndexDao.createOrUpdate(geometryIndex); + } else { + return false; + } +}; + +/** + * Update the last time this feature table was indexed + * @param {module:extension/index~TableIndex} tableIndex TableIndex + * @return {Object} update status + */ +FeatureTableIndex.prototype.updateLastIndexed = function(tableIndex) { + if (!tableIndex) { + tableIndex = new TableIndex(); + tableIndex.table_name = this.tableName; + } + tableIndex.last_indexed = new Date().toISOString(); + var updateIndex = this.tableIndexDao.createOrUpdate(tableIndex); + return updateIndex; +} + +/** + * Query the index with the specified bounding box and projection + * @param {module:boundingBox~BoundingBox} boundingBox bounding box to query for + * @param {string} projection projection the boundingBox is in + * @return {Iterable} + */ +FeatureTableIndex.prototype.queryWithBoundingBox = function(boundingBox, projection) { + var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection); + var envelope = projectedBoundingBox.buildEnvelope(); + return this.queryWithGeometryEnvelope(envelope); +} + +/** + * Query witha geometry envelope + * @param {Envelope} envelope envelope + * @return {Iterable} + */ +FeatureTableIndex.prototype.queryWithGeometryEnvelope = function(envelope) { + if (this.rtreeIndexed) { + return this.rtreeIndexDao.queryWithGeometryEnvelope(envelope); + } else { + return this.geometryIndexDao.queryWithGeometryEnvelope(envelope); + } +} + + +/** + * Count the index with the specified bounding box and projection + * @param {module:boundingBox~BoundingBox} boundingBox bounding box to query for + * @param {string} projection projection the boundingBox is in + * @return {Number} + */ +FeatureTableIndex.prototype.countWithBoundingBox = function(boundingBox, projection) { + var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection); + var envelope = projectedBoundingBox.buildEnvelope(); + return this.countWithGeometryEnvelope(envelope); +}; + +/** + * Count with a geometry envelope + * @param {Envelope} envelope envelope + * @return {Number} + */ +FeatureTableIndex.prototype.countWithGeometryEnvelope = function(envelope) { + if (this.rtreeIndexed) { + return this.rtreeIndexDao.countWithGeometryEnvelope(envelope); + } else { + return this.geometryIndexDao.countWithGeometryEnvelope(envelope); + } +}; + +FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR = 'nga'; +FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR = 'geometry_index'; +FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/geometry-index.html'; + +module.exports = FeatureTableIndex; + +},{"../../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){ +/** + * GeometryIndexDao module. + * @module extension/index + */ + +var Dao = require('../../dao/dao') + , TableIndexDao = require('./tableIndex').TableIndexDao + , TableCreator = require('../../db/tableCreator'); + +var util = require('util'); + +/** + * Geometry Index object, for indexing data within user tables + * @class + */ +var GeometryIndex = function() { + + /** + * Name of the table + * @member {String} + */ + this.table_name; + + /** + * Geometry Id column + * @member {Number} + */ + this.geom_id; + + /** + * Min X + * @member {Number} + */ + this.min_x; + + /** + * Max X + * @member {Number} + */ + this.max_x; + + /** + * Min Y + * @member {Number} + */ + this.min_y; + + /** + * Max Y + * @member {Number} + */ + this.max_y; + + /** + * Min Z + * @member {Number} + */ + this.min_z; + + /** + * Max Z + * @member {Number} + */ + this.max_z; + + /** + * Min M + * @member {Number} + */ + this.min_m; + + /** + * Max M + * @member {Number} + */ + this.max_m; +} + +GeometryIndex.prototype.setTableIndex = function(tableIndex) { + this.table_name = tableIndex.table_name; +} + +/** + * Geometry Index Data Access Object + * @class + * @extends {module:dao/dao~Dao} + */ +var GeometryIndexDao = function(geoPackage, featureDao) { + Dao.call(this, geoPackage); + this.featureDao = featureDao; +}; + +util.inherits(GeometryIndexDao, Dao); + +GeometryIndexDao.prototype.createObject = function() { + return new GeometryIndex(); +}; + +/** + * Get the Table Index of the Geometry Index + * + * @param {module:extension/index~GeometryIndex} geometryIndex geometry index + * @return {module:extension/index~TableIndex} + */ +GeometryIndexDao.prototype.getTableIndex = function(geometryIndex) { + var dao = this.geoPackage.getTableIndexDao(); + return dao.queryForId(geometryIndex.tableName); +}; + +/** + * Query by table name + * @param {string} tableName table name + * @return {Iterable} + */ +GeometryIndexDao.prototype.queryForTableName = function(tableName) { + return this.queryForEach(GeometryIndexDao.COLUMN_TABLE_NAME, tableName); +}; + +/** + * Count by table name + * + * @param tableName table name + * + * @return count + */ +/** + * Count by table name + * @param {string} tableName table name + * @return {Number} + */ +GeometryIndexDao.prototype.countByTableName = function(tableName) { + return this.count(GeometryIndexDao.COLUMN_TABLE_NAME, tableName); +}; + +/** + * Populate a new geometry index from an envelope + * + * @param tableIndex table index + * @param geomId geometry id + * @param envelope geometry envelope + * @param callback called with results of the populate + */ +/** + * Populate a new goemetry index from an envelope + * @param {module:extension/index~TableIndex} tableIndex TableIndex + * @param {Number} geometryId id of the geometry + * @param {Object} envelope envelope to store + * @return {module:extension/index~GeometryIndex} + */ +GeometryIndexDao.prototype.populate = function(tableIndex, geometryId, envelope) { + var geometryIndex = new GeometryIndex(); + geometryIndex.setTableIndex(tableIndex); + geometryIndex.geom_id = geometryId; + geometryIndex.min_x = envelope.minX; + geometryIndex.min_y = envelope.minY; + geometryIndex.max_x = envelope.maxX; + geometryIndex.max_y = envelope.maxY; + if (envelope.hasZ) { + geometryIndex.min_z = envelope.minZ; + geometryIndex.max_z = envelope.maxZ; + } + + if (envelope.hasM) { + geometryIndex.min_m = envelope.minM; + geometryIndex.max_m = envelope.maxM; + } + return geometryIndex; +}; + +/** + * Create the GeometryIndex table + * @return {Promise} + */ +GeometryIndexDao.prototype.createTable = function() { + var exists = this.isTableExists(); + if (exists) return Promise.resolve(true); + var tc = new TableCreator(this.geoPackage); + return tc.createGeometryIndex(); +} + +/** + * Query the index with an envelope + * @param {Object} envelope envelope + * @param {Number} envelope.minX min x + * @param {Number} envelope.maxX max x + * @param {Number} envelope.minY min y + * @param {Number} envelope.maxY max y + * @return {Iterable} + */ +GeometryIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) { + var tableName = this.featureDao.gpkgTableName; + var where = ''; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, tableName); + where += ' and '; + var minXLessThanMaxX = envelope.minX < envelope.maxX; + if (minXLessThanMaxX) { + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<='); + where += ' and '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>='); + } else { + where += '('; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<='); + where += ' or '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>='); + where += ' or '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.minX, '>='); + where += ' or '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.maxX, '<='); + where += ')'; + } + + where += ' and '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Y, envelope.maxY, '<='); + where += ' and '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Y, envelope.minY, '>='); + + var whereArgs = [tableName, envelope.maxX, envelope.minX]; + if (!minXLessThanMaxX) { + whereArgs.push(envelope.minX, envelope.maxX); + } + whereArgs.push(envelope.maxY, envelope.minY); + if (envelope.hasZ) { + where += ' and '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Z, envelope.minZ, '<='); + where += ' and '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Z, envelope.maxZ, '>='); + whereArgs.push(envelope.maxZ, envelope.minZ); + } + + if (envelope.hasM) { + where += ' and '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_M, envelope.minM, '<='); + where += ' and '; + where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_M, envelope.maxM, '>='); + whereArgs.push(envelope.maxM, envelope.minM); + } + return { + join: 'inner join "' + tableName + '" on "' + tableName + '".' + this.featureDao.idColumns[0] + ' = ' + GeometryIndexDao.COLUMN_GEOM_ID, + where, + whereArgs, + tableNameArr: ['"' + tableName + '".*'] + }; +}; + +GeometryIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) { + var result = this._generateGeometryEnvelopeQuery(envelope); + return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); +}; + +GeometryIndexDao.prototype.countWithGeometryEnvelope = function(envelope) { + var result = this._generateGeometryEnvelopeQuery(envelope); + return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); +}; + +GeometryIndexDao.TABLE_NAME = "nga_geometry_index"; +GeometryIndexDao.COLUMN_TABLE_NAME = GeometryIndexDao.TABLE_NAME + ".table_name"; +GeometryIndexDao.COLUMN_GEOM_ID = GeometryIndexDao.TABLE_NAME + ".geom_id"; +GeometryIndexDao.COLUMN_MIN_X = GeometryIndexDao.TABLE_NAME + ".min_x"; +GeometryIndexDao.COLUMN_MAX_X = GeometryIndexDao.TABLE_NAME + ".max_x"; +GeometryIndexDao.COLUMN_MIN_Y = GeometryIndexDao.TABLE_NAME + ".min_y"; +GeometryIndexDao.COLUMN_MAX_Y = GeometryIndexDao.TABLE_NAME + ".max_y"; +GeometryIndexDao.COLUMN_MIN_Z = GeometryIndexDao.TABLE_NAME + ".min_z"; +GeometryIndexDao.COLUMN_MAX_Z = GeometryIndexDao.TABLE_NAME + ".max_z"; +GeometryIndexDao.COLUMN_MIN_M = GeometryIndexDao.TABLE_NAME + ".min_m"; +GeometryIndexDao.COLUMN_MAX_M = GeometryIndexDao.TABLE_NAME + ".max_m"; + +GeometryIndexDao.prototype.gpkgTableName = GeometryIndexDao.TABLE_NAME; +GeometryIndexDao.prototype.idColumns = ['table_name', 'geom_id']; + +module.exports.GeometryIndexDao = GeometryIndexDao; +module.exports.GeometryIndex = GeometryIndex; + +},{"../../dao/dao":11,"../../db/tableCreator":19,"./tableIndex":28,"util":343}],28:[function(require,module,exports){ +/** + * TableIndexDao module. + * @module extension/index + */ + +var Dao = require('../../dao/dao') + , TableCreator = require('../../db/tableCreator'); + +var util = require('util'); + +/** + * Table Index object, for indexing data within user tables + * @class TableIndex + */ +var TableIndex = function() { + + /** + * Name of the table + * @member {String} + */ + this.table_name; + + /** + * Last indexed date + * @member {String} + */ + this.last_indexed; +} + +/** + * Table Index Data Access Object + * @class + * @extends {module:dao/dao~Dao} + * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object + */ +var TableIndexDao = function(geoPackage) { + Dao.call(this, geoPackage); +}; + +util.inherits(TableIndexDao, Dao); + +/** + * Create a new TableIndex object + * @return {module:extension/index~TableIndex} + */ +TableIndexDao.prototype.createObject = function() { + return new TableIndex(); +}; + +TableIndexDao.prototype.getGeometryIndices = function(tableIndex) { + +}; + +TableIndexDao.prototype.getGeometryIndexCount = function(tableIndex) { + +}; + +/** + * Creates the tables necessary + * @return {Promise} + */ +TableIndexDao.prototype.createTable = function() { + var tc = new TableCreator(this.geoPackage); + return tc.createTableIndex(); +} + + +TableIndexDao.TABLE_NAME = "nga_table_index"; +TableIndexDao.COLUMN_TABLE_NAME = "table_name"; +TableIndexDao.COLUMN_LAST_INDEXED = "last_indexed"; + +TableIndexDao.prototype.gpkgTableName = TableIndexDao.TABLE_NAME; +TableIndexDao.prototype.idColumns = [TableIndexDao.COLUMN_TABLE_NAME]; + +module.exports.TableIndexDao = TableIndexDao; +module.exports.TableIndex = TableIndex; + +},{"../../dao/dao":11,"../../db/tableCreator":19,"util":343}],29:[function(require,module,exports){ +/** + * MetadataExtension module. + * @module extension/metadata + */ + +var BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension; + +var util = require('util'); + +/** + * Metadata extension + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + * @class + * @extends {module:extension/baseExtension~BaseExtension} + */ +var MetadataExtension = function(geoPackage) { + BaseExtension.call(this, geoPackage); + + this.extensionName = MetadataExtension.EXTENSION_NAME; + + this.extensionDefinition = MetadataExtension.EXTENSION_Metadata_DEFINITION; +} + +util.inherits(MetadataExtension, BaseExtension); + +/** + * Get or create the metadata extension + * @return {Promise} + */ +MetadataExtension.prototype.getOrCreateExtension = function() { + return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE); +}; + +MetadataExtension.EXTENSION_NAME = 'gpkg_metadata'; +MetadataExtension.EXTENSION_Metadata_AUTHOR = 'gpkg'; +MetadataExtension.EXTENSION_Metadata_NAME_NO_AUTHOR = 'metadata'; +MetadataExtension.EXTENSION_Metadata_DEFINITION = 'http://www.geopackage.org/spec/#extension_metadata'; + +module.exports.MetadataExtension = MetadataExtension; + +},{"../.":25,"../baseExtension":20,"util":343}],30:[function(require,module,exports){ +/** + * @module extension/relatedTables + */ + +/** + * Dublin Core Metadata Initiative term types + * @class + */ +function DublinCoreType() {} + +module.exports = DublinCoreType; + +/** + * A point or period of time associated with an event in the lifecycle of + * the resource. + * @type {Object} + */ +DublinCoreType.DATE = { + name: 'date' +}; + +/** + * An account of the resource. + * @type {Object} + */ +DublinCoreType.DESCRIPTION = { + name: 'description' +}; + +/** + * The file format, physical medium, or dimensions of the resource. + * @type {Object} + */ +DublinCoreType.FORMAT = { + name: 'format', + synonyms: ['content_type'] +}; + +/** + * An unambiguous reference to the resource within a given context. + * @type {Object} + */ +DublinCoreType.IDENTIFIER = { + name: 'identifier', + synonyms: ['id'] +}; + +/** + * A related resource from which the described resource is derived. + * @type {Object} + */ +DublinCoreType.SOURCE = { + name: 'source' +}; + +/** + * A name given to the resource. + * @type {Object} + */ +DublinCoreType.TITLE = { + name: 'title' +}; + +/** + * Get the Dublin Core Type from the name + * @param {string} name name + * @return {module:extension/relatedTables~DublinCoreType} + */ +DublinCoreType.fromName = function(name) { + for (var prop in module.exports) { + var type = module.exports[prop]; + if (type.name === name) { + return type; + } + } + for (var prop in module.exports) { + var type = module.exports[prop]; + if (type.synonyms) { + for (var i = 0; i < type.synonyms.length; i++) { + if (type.synonyms[i] === name) { + return type; + } + } + } + } +} + +},{}],31:[function(require,module,exports){ +/** + * @module extension/relatedTables + */ + +var Dao = require('../../dao/dao') + , ColumnValues = require('../../dao/columnValues'); + +var util = require('util'); + +/** + * Describes the relationships between a base table, a related data table, and a + * mapping table + * @class ExtendedRelation + */ +var ExtendedRelation = function() { + + /** + * Autoincrement primary key + * @member {Number} + */ + this.id; + + /** + * Name of the table containing the base data (e.g., features) to relate + * @member {String} + */ + this.base_table_name; + + /** + * Name of the primary key column in base_table_name + * @member {String} + */ + this.base_primary_column; + + /** + * Name of the table containing the related content + * @member {String} + */ + this.related_table_name; + + /** + * Name of the primary key column in related_table_name + * @member {String} + */ + this.related_primary_column; + + /** + * Name (profile) of the relationship + * @member {String} + */ + this.relation_name; + + /** + * Name of a mapping table + * @member {String} + */ + this.mapping_table_name; +} + +/** + * Extended Relations Data Access Object + * @class ExtendedRelationDao + * @extends {module:dao/dao~Dao} + */ +var ExtendedRelationDao = function(geoPackage) { + Dao.call(this, geoPackage); +}; + +util.inherits(ExtendedRelationDao, Dao); + +/** + * Create a {module:extension/relatedTables~ExtendedRelation} object + * @return {module:extension/relatedTables~ExtendedRelation} + */ +ExtendedRelationDao.prototype.createObject = function() { + return new ExtendedRelation(); +}; + +/** + * Create the necessary tables for this dao + * @return {Promise} + */ +ExtendedRelationDao.prototype.createTable = function() { + var tc = this.geoPackage.getTableCreator(); + return tc.createExtendedRelations(); +} + +/** + * Get all the base table names + * @return {string[]} + */ +ExtendedRelationDao.prototype.getBaseTables = function() { + var baseTables = []; + var baseTableColumns = this.queryForColumns('base_table_name'); + for (var i = 0; i < baseTableColumns.length; i++) { + baseTables.push(baseTableColumns[i].base_table_name); + } + return baseTables; +}; + +/** + * Get all the related table names + * @return {string[]} + */ +ExtendedRelationDao.prototype.getRelatedTables = function() { + var relatedTables = []; + var relatedTableColumns = this.queryForColumns('related_table_name'); + for (var i = 0; i < relatedTableColumns.length; i++) { + relatedTables.push(relatedTableColumns[i].related_table_name); + } + return relatedTables; +}; + +/** + * Get all relations for the given base table name + * @param {string} baseTable base table name + * @return {module:extension/relatedTables~ExtendedRelation[]} + */ +ExtendedRelationDao.prototype.getBaseTableRelations = function(baseTable) { + return this.queryForAllEq(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable); +} + +/** + * Get all relations for the given related table name + * @param {string} relatedTable related table name + * @return {module:extension/relatedTables~ExtendedRelation[]} + */ +ExtendedRelationDao.prototype.getRelatedTableRelations = function(relatedTable) { + return this.queryForAllEq(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTable); +} + +/** + * Get all relations for the base table with the relation name + * @param {string} baseTable base table name + * @param {string} name relation name + * @return {module:extension/relatedTables~ExtendedRelation[]} + */ +ExtendedRelationDao.prototype.getBaseTableRelationsWithName = function(baseTable, name) { + var fields = new ColumnValues(); + fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable); + fields.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, name); + var where = this.buildWhere(fields, 'and'); + var whereArgs = this.buildWhereArgs(fields); + return this.queryForAll(where, whereArgs); +} + +/** + * Get all relations to the table. Returns relations where the table is the base table and relations where the table is the related table. + * @param {string} table table name to query for + * @return {module:extension/relatedTables~ExtendedRelation[]} + */ +ExtendedRelationDao.prototype.getTableRelations = function(table) { + var fields = new ColumnValues(); + fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, table); + fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, table); + var where = this.buildWhere(fields, 'or'); + var whereArgs = this.buildWhereArgs(fields); + return this.queryForAll(where, whereArgs); +} + +/** + * Gets all relationships in the GeoPackage with an optional base table name and an optional base id + * @param {String} [baseTableName] base table name + * @param {String} [relatedTableName] related table name + * @param {String} [mappingTableName] mapping table name + * @return {module:extension/relatedTables~ExtendedRelation[]} + */ +ExtendedRelationDao.prototype.getRelations = function(baseTableName, relatedTableName, mappingTableName) { + var fields = new ColumnValues(); + fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTableName); + fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTableName); + fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName); + var where = this.buildWhereLike(fields, 'and'); + var whereArgs = this.buildWhereArgs(fields); + return this.queryForAll(where, whereArgs); +}; + +/** + * Get all relations by the mapping table name + * @param {string} mappingTableName name of the mapping table + * @return {module:extension/relatedTables~ExtendedRelation[]} + */ +ExtendedRelationDao.prototype.queryByMappingTableName = function(mappingTableName) { + var fields = new ColumnValues(); + fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName); + var where = this.buildWhere(fields, 'and'); + var whereArgs = this.buildWhereArgs(fields); + return this.queryForAll(where, whereArgs); +} + +ExtendedRelationDao.TABLE_NAME = 'gpkgext_relations'; +ExtendedRelationDao.COLUMN_ID = ExtendedRelationDao.TABLE_NAME + '.id'; +ExtendedRelationDao.COLUMN_BASE_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.base_table_name'; +ExtendedRelationDao.COLUMN_BASE_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.base_primary_column'; +ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.related_table_name'; +ExtendedRelationDao.COLUMN_RELATED_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.related_primary_column'; +ExtendedRelationDao.COLUMN_RELATION_NAME = ExtendedRelationDao.TABLE_NAME + '.relation_name'; +ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.mapping_table_name'; + +ExtendedRelationDao.prototype.gpkgTableName = ExtendedRelationDao.TABLE_NAME; +ExtendedRelationDao.prototype.idColumns = ['id']; + +module.exports.ExtendedRelationDao = ExtendedRelationDao; +module.exports.ExtendedRelation = ExtendedRelation; + +},{"../../dao/columnValues":10,"../../dao/dao":11,"util":343}],32:[function(require,module,exports){ +/** + * RelatedTablesExtension module. + * @module extension/relatedTables + * @see module:extension/BaseExtension + */ + +var BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension + , ColumnValues = require('../../dao/columnValues') + , OptionBuilder = require('../../optionBuilder') + , ExtendedRelationDao = require('./extendedRelation').ExtendedRelationDao + , ExtendedRelation = require('./extendedRelation').ExtendedRelation + , MediaDao = require('./mediaDao') + , MediaTable = require('./mediaTable') + , SimpleAttributesDao = require('./simpleAttributesDao') + , SimpleAttributesTable = require('./simpleAttributesTable') + , UserMappingTable = require('./userMappingTable') + , UserMappingDao = require('./userMappingDao') + , UserCustomDao = require('../../user/custom/userCustomDao') + , UserDao = require('../../user/userDao') + , UserTableReader = require('../../user/userTableReader') + , RelationType = require('./relationType') + , ContentsDao = require('../../core/contents').ContentsDao + , Contents = require('../../core/contents').Contents + , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao; + +var util = require('util'); + +/** + * Related Tables Extension + * @param {module:geoPackage~GeoPackage} geoPackage the GeoPackage object + * @class + * @extends {module:extension/baseExtension~BaseExtension} + */ +var RelatedTablesExtension = function(geoPackage) { + BaseExtension.call(this, geoPackage); + this.extendedRelationDao = geoPackage.getExtendedRelationDao(); +} + +util.inherits(RelatedTablesExtension, BaseExtension); + +/** + * Get or create the extension + * @return {Promise} + */ +RelatedTablesExtension.prototype.getOrCreateExtension = function() { + return this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, 'gpkgext_relations', undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE) + .then(function() { + return this.extendedRelationDao.createTable(); + }.bind(this)); +}; + +/** + * Get or create the extension for the mapping table + * @param {string} mappingTableName user mapping table + * @return {Promise} + */ +RelatedTablesExtension.prototype.getOrCreateMappingTable = function(mappingTableName) { + return this.getOrCreateExtension() + .then(function() { + this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, mappingTableName, undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE); + }.bind(this)); +} + +/** + * Set the contents in the UserRelatedTable + * @param {module:extension/relatedTables~UserRelatedTable} userRelatedTable user related table + */ +RelatedTablesExtension.prototype.setContents = function(userRelatedTable) { + var contents = this.geoPackage.getContentsDao().queryForId(userRelatedTable.table_name); + userRelatedTable.setContents(contents); +} + +/** + * Reads the user table and creates a UserCustomDao + * @param {string} tableName table name to reader + * @param {string[]} requiredColumns required columns + * @return {module:user/custom~UserCustomDao} + */ +RelatedTablesExtension.prototype.getUserDao = function(tableName, requiredColumns) { + return UserCustomDao.readTable(this.geoPackage, tableName, requiredColumns); +} + +/** + * Gets the UserMappingDao from the mapping table name + * @param {string|module:extension/relatedTables~ExtendedRelation} tableName user mapping table name or ExtendedRelation object + * @return {module:extension/relatedTables~UserMappingDao} + */ +RelatedTablesExtension.prototype.getMappingDao = function(tableName) { + if (tableName.mapping_table_name) { + tableName = tableName.mapping_table_name; + } + return new UserMappingDao(this.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage); +} + +/** + * Gets all relationships in the GeoPackage with an optional base table name and an optional base id + * @param {string} [baseTableName] base table name + * @return {module:extension/relatedTables~ExtendedRelation[]} + */ +RelatedTablesExtension.prototype.getRelationships = function(baseTableName) { + if (this.extendedRelationDao.isTableExists()) { + if (baseTableName) { + return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(baseTableName); + } + return this.extendedRelationDao.queryForAll(); + } + return []; +} + +/** + * Gets all relationships in the GeoPackage with an optional base table name and an optional base id + * @param {String} [baseTableName] base table name + * @param {String} [relatedTableName] related table name + * @param {String} [mappingTableName] mapping table name + * @return {Boolean} + */ +RelatedTablesExtension.prototype.hasRelations = function(baseTableName, relatedTableName, mappingTableName) { + var relations = []; + if (this.extendedRelationDao.isTableExists()) { + relations = this.extendedRelationDao.getRelations(baseTableName, relatedTableName, mappingTableName); + } + return relations; +}; + +RelatedTablesExtension.prototype.getRelatedRows = function(baseTableName, baseId) { + var relationships = this.getRelationships(baseTableName); + for (var i = 0; i < relationships.length; i++) { + var relation = relationships[i]; + var mappingRows = this.getMappingRowsForBase(relation.mapping_table_name, baseId); + relation.mappingRows = mappingRows; + var userDao; + // TODO do this for all known types + if (relation.relation_name === 'media') { + userDao = MediaDao.readTable(this.geoPackage, relation.related_table_name); + } else { + userDao = UserDao.readTable(this.geoPackage, relation.related_table_name); + } + for (var m = 0; m < mappingRows.length; m++) { + var mappingRow = mappingRows[m]; + mappingRow.row = userDao.queryForId(mappingRow.related_id); + } + } + return relationships; +} + +RelatedTablesExtension.RelationshipBuilder = function() { + return OptionBuilder([ + 'baseTableName', + 'relatedTableName', + 'userMappingTable', + 'mappingTableName', + 'relationName', + 'relationAuthor', + 'relationType', + 'relatedTable' + ]); +} +/** + * Convience object to build a Relationship object for querying and adding + * @typedef {Object} module:extension/relatedTables~Relationship + * @property {module:extension/relatedTables~RelationType} relationType type of relationship + * @property {string} baseTableName base table name + * @property {string} relatedTableName related table name + * @property {string} relationAuthor relationship author + * @property {string} mappingTableName mapping table name + * @property {module:extension/relatedTables~UserMappingTable} userMappingTable UserMappingTable + * @property {module:extension/relatedTables~UserRelatedTable} relatedTable UserRelatedTable + */ +RelatedTablesExtension.prototype.getRelationshipBuilder = function() { + return RelatedTablesExtension.RelationshipBuilder(); +} + +/** + * Adds a relationship to the GeoPackage + * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add + * @return {Promise} + */ +RelatedTablesExtension.prototype.addRelationship = function(relationship) { + var extendedRelation = this.extendedRelationDao.createObject(); + var userMappingTable = relationship.userMappingTable; + if (relationship.hasOwnProperty('base_table_name')) { + extendedRelation = relationship; + userMappingTable = UserMappingTable.create(extendedRelation.mapping_table_name); + } else { + if (relationship.relationType) { + relationship.relationName = relationship.relationType.name; + } + if (relationship.relationAuthor) { + relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName); + } + if (relationship.mappingTableName) { + userMappingTable = UserMappingTable.create(relationship.mappingTableName); + } + + if (relationship.relatedTable) { + this.createRelatedTable(relationship.relatedTable); + relationship.relatedTableName = relationship.relatedTable.table_name; + relationship.relationName = relationship.relatedTable.relation_name; + } + + extendedRelation.base_table_name = relationship.baseTableName; + extendedRelation.base_primary_column = this.getPrimaryKeyColumnName(relationship.baseTableName); + extendedRelation.related_table_name = relationship.relatedTableName; + extendedRelation.related_primary_column = this.getPrimaryKeyColumnName(relationship.relatedTableName); + extendedRelation.mapping_table_name = userMappingTable.table_name; + extendedRelation.relation_name = relationship.relationName; + } + + if (!this.validateRelationship(extendedRelation.base_table_name, extendedRelation.related_table_name, extendedRelation.relation_name)) { + return Promise.resolve(false); + } + return this.createUserMappingTable(userMappingTable) + .then(function() { + var mappingTableRelations = this.extendedRelationDao.queryByMappingTableName(extendedRelation.mapping_table_name); + if (mappingTableRelations.length) { + return mappingTableRelations[0]; + } + this.extendedRelationDao.create(extendedRelation); + return extendedRelation; + }.bind(this)); +} + +/** + * Get the primary key column name from the specified table + * @param {string} tableName table name + * @return {string} + */ +RelatedTablesExtension.prototype.getPrimaryKeyColumnName = function(tableName) { + var reader = new UserTableReader(tableName); + var table = reader.readTable(this.geoPackage.getDatabase()); + return table.getPkColumn().name; +} + +/** + * Adds a features relationship between the base feature and related feature + * table. Creates a default user mapping table if needed. + * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add + * @return {Promise} + */ +RelatedTablesExtension.prototype.addFeaturesRelationship = function(relationship) { + if (relationship.hasOwnProperty('relation_name')) { + relationship.relation_name = relationship.relation_name || RelationType.FEATURES.name; + } else { + relationship.relationType = RelationType.FEATURES; + } + return this.addRelationship(relationship); +} + +/** + * Adds a tiles relationship between the base table and related tile + * table. Creates a default user mapping table if needed. + * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add + * @return {Promise} + */ +RelatedTablesExtension.prototype.addTilesRelationship = function(relationship) { + if (relationship.hasOwnProperty('relation_name')) { + relationship.relation_name = relationship.relation_name || RelationType.TILES.name; + } else { + relationship.relationType = RelationType.TILES; + } + return this.addRelationship(relationship); +} + +/** + * Adds an attributes relationship between the base table and related attribute + * table. Creates a default user mapping table if needed. + * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add + * @return {Promise} + */ +RelatedTablesExtension.prototype.addAttributesRelationship = function(relationship) { + if (relationship.hasOwnProperty('relation_name')) { + relationship.relation_name = relationship.relation_name || RelationType.ATTRIBUTES.name; + } else { + relationship.relationType = RelationType.ATTRIBUTES; + } + return this.addRelationship(relationship); +} + +/** + * Adds a simple attributes relationship between the base table and user + * simple attributes related table. Creates a default user mapping table and + * the simple attributes table if needed. + * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add + * @return {Promise} + */ +RelatedTablesExtension.prototype.addSimpleAttributesRelationship = function(relationship) { + if (relationship.hasOwnProperty('relation_name')) { + relationship.relation_name = relationship.relation_name || RelationType.SIMPLE_ATTRIBUTES.name; + } else { + relationship.relationType = RelationType.SIMPLE_ATTRIBUTES; + } + return this.addRelationship(relationship); +} + +/** + * Adds a media relationship between the base table and user media related + * table. Creates a default user mapping table and the media table if + * needed. + * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add + * @return {Promise} + */ +RelatedTablesExtension.prototype.addMediaRelationship = function(relationship) { + if (relationship.hasOwnProperty('relation_name')) { + relationship.relation_name = relationship.relation_name || RelationType.MEDIA.name; + } else { + relationship.relationType = RelationType.MEDIA; + } + return this.addRelationship(relationship); +} + +/** + * Remove a specific relationship from the GeoPackage + * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to remove + * @return {Number} number of relationships removed + */ +RelatedTablesExtension.prototype.removeRelationship = function(relationship) { + // this is an ExtendedRelation + if (relationship.hasOwnProperty('base_table_name')) { + relationship.baseTableName = relationship.base_table_name; + relationship.relatedTableName = relationship.related_table_name; + relationship.relationName = relationship.relation_name; + relationship.userMappingTable = relationship.mapping_table_name; + } + + if (relationship.relationType) { + relationship.relationName = relationship.relationType.name; + } + if (relationship.relationAuthor) { + relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName); + } + + if (this.extendedRelationDao.isTableExists()) { + + var values = new ColumnValues(); + values.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, relationship.baseTableName); + values.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relationship.relatedTableName); + values.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, relationship.relationName); + + var iterator = this.extendedRelationDao.queryForFieldValues(values); + + var tablesToDelete = []; + for (var extendedRelation of iterator) { + tablesToDelete.push(extendedRelation.mapping_table_name); + } + tablesToDelete.forEach(function(table) { + this.geoPackage.deleteTable(table); + }.bind(this)); + this.extensionsDao.deleteByExtensionAndTableName(RelatedTablesExtension.EXTENSION_NAME, relationship.userMappingTable); + return this.extendedRelationDao.delete(extendedRelation); + } + + return 0; +} + +/** + * Create a default user mapping table and extension row if either does not + * exist. When not created, there is no guarantee that an existing table has + * the same schema as the provided tabled. + * @param {string|module:extension/relatedTables~UserMappingTable} userMappingTableOrName user mapping table or name + * @return {Promise} + */ +RelatedTablesExtension.prototype.createUserMappingTable = function(userMappingTableOrName) { + var userMappingTable = userMappingTableOrName; + if (typeof userMappingTableOrName === 'string') { + userMappingTable = UserMappingTable.create(userMappingTableOrName); + } + return this.getOrCreateMappingTable(userMappingTable.table_name) + .then(function(){ + if (!this.geoPackage.isTable(userMappingTable.table_name)) { + return this.geoPackage.tableCreator.createUserTable(userMappingTable); + } + return true; + }.bind(this)); +} + +/** + * Create a user related table if it does not exist. When not created, there + * is no guarantee that an existing table has the same schema as the + * provided tabled. + * @param {module:extension/relatedTables~UserRelatedTable} relatedTable user related table + * @return {Boolean} true if the table now exists + */ +RelatedTablesExtension.prototype.createRelatedTable = function(relatedTable) { + if (!this.geoPackage.isTable(relatedTable.table_name)) { + this.geoPackage.tableCreator.createUserTable(relatedTable); + + var contents = new Contents(); + contents.table_name = relatedTable.table_name; + contents.data_type = relatedTable.data_type; + contents.identifier = relatedTable.table_name; + this.geoPackage.getContentsDao().create(contents); + var refreshed = this.geoPackage.getContentsDao().refresh(contents); + relatedTable.setContents(refreshed); + } + return true; +} + +/** + * Validate that the relation name is valid between the base and related tables + * @param {string} baseTableName base table name + * @param {string} relatedTableName related table name + * @param {string} relationName relation name + * @return {Boolean} + */ +RelatedTablesExtension.prototype.validateRelationship = function(baseTableName, relatedTableName, relationName) { + // Verify the base and related tables exist + if (!this.geoPackage.isTable(baseTableName)) { + console.log('Base relationship table does not exist: ' + baseTableName + ', Relation: ' + relationName); + return false; + } + if (!this.geoPackage.isTable(relatedTableName)) { + console.log('Related relationship table does not exist: ' + relatedTableName + ', Relation: ' + relationName); + return false; + } + // Verify spec defined relation types + var relationType = RelationType.fromName(relationName); + if (relationType) { + if (!this.geoPackage.isTableType(relationType.dataType, relatedTableName)) { + console.log('The related table must be a ' + relationType.dataType + ' table. Related Table: ' + relatedTableName + ', Type: ' + this.geoPackage.getTableType(relatedTableName)); + return false; + } + return true; + } + return true; +} + +/** + * Link related Ids + * @param {string} baseTableName base table name + * @param {Number} baseId base row id + * @param {string} relatedTableName related table name + * @param {Number} relatedId related row id + * @param {module:extension/relatedTables~RelationType} relationType relation type + * @return {Promise} + */ +RelatedTablesExtension.prototype.linkRelatedIds = function(baseTableName, baseId, relatedTableName, relatedId, relationType) { + var baseDao = UserDao.readTable(this.geoPackage, baseTableName); + var relatedDao = UserDao.readTable(this.geoPackage, relatedTableName); + + var baseRow = baseDao.queryForId(baseId); + var relatedRow = relatedDao.queryForId(relatedId); + + return baseDao.linkRelatedRow(baseRow, relatedRow, relationType); +} + +/** + * Get the related id mappings for the base id + * @param {string} mappingTableName mapping table name + * @param {Number} baseId base id + * @return {Number[]} ids of related items + */ +RelatedTablesExtension.prototype.getMappingsForBase = function(mappingTableName, baseId) { + var mappingDao = this.getMappingDao(mappingTableName); + var results = mappingDao.queryByBaseId(baseId); + var relatedIds = []; + for (var i = 0; i < results.length; i++) { + var row = mappingDao.getUserMappingRow(results[i]); + relatedIds.push(row.getRelatedId()); + } + return relatedIds; +} + +/** + * Get the related id mapping rows for the base id + * @param {string} mappingTableName mapping table name + * @param {Number} baseId base id + * @return {module:extension/relatedTables~UserMappingRow[]} user mapping rows + */ +RelatedTablesExtension.prototype.getMappingRowsForBase = function(mappingTableName, baseId) { + var mappingDao = this.getMappingDao(mappingTableName); + return mappingDao.queryByBaseId(baseId); +} + +/** + * Get the base id mappings for the base id + * @param {string} mappingTableName mapping table name + * @param {Number} relatedId related id + * @return {Number[]} ids of base items + */ +RelatedTablesExtension.prototype.getMappingsForRelated = function(mappingTableName, relatedId) { + var mappingDao = this.getMappingDao(mappingTableName); + var results = mappingDao.queryByRelatedId(relatedId); + var baseIds = []; + for (var i = 0; i < results.length; i++) { + var row = mappingDao.getUserMappingRow(results[i]); + baseIds.push(row.getBaseId()); + } + return baseIds; +} + +/** + * Returns a {module:extension/relatedTables~MediaDao} from the table specified + * @param {string|module:extension/relatedTables~MediaTable} tableName either a table name or a MediaTable + * @return {module:extension/relatedTables~MediaDao} + */ +RelatedTablesExtension.prototype.getMediaDao = function(tableName) { + var table; + if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'media') { + table = tableName; + } else { + if (tableName.related_table_name) { + tableName = tableName.related_table_name; + } + var reader = new UserTableReader(tableName, MediaTable.requiredColumns()); + var userTable = reader.readTable(this.geoPackage.getDatabase()); + table = new MediaTable(userTable.table_name, userTable.columns, MediaTable.requiredColumns()); + table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name)); + } + + return new MediaDao(this.geoPackage, table); +} + +/** + * Returns a {module:extension/relatedTables~SimpleAttributesDao} from the table specified + * @param {string|module:extension/relatedTables~SimpleAttributesDao} tableName either a table name or a SimpleAttributesDao + * @return {module:extension/relatedTables~SimpleAttributesDao} + */ +RelatedTablesExtension.prototype.getSimpleAttributesDao = function(tableName) { + var table; + if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'simple_attributes') { + table = tableName; + } else { + if (tableName.related_table_name) { + tableName = tableName.related_table_name; + } + var reader = new UserTableReader(tableName, SimpleAttributesTable.requiredColumns()); + var userTable = reader.readTable(this.geoPackage.getDatabase()); + table = new SimpleAttributesTable(userTable.table_name, userTable.columns, SimpleAttributesTable.requiredColumns()); + table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name)); + } + + return new SimpleAttributesDao(this.geoPackage, table); +} + +/** + * Builds the custom relation name with the author + * @param {string} author author + * @param {string} name name + * @return {string} + */ +RelatedTablesExtension.prototype.buildRelationName = function(author, name) { + return 'x-' + author + '_' + name; +} + +/** + * Remove all traces of the extension + */ +RelatedTablesExtension.prototype.removeExtension = function() { + if (this.extendedRelationDao.isTableExists()) { + var extendedRelations = this.extendedRelationDao.queryForAll(); + extendedRelations.forEach(function(relation) { + this.geoPackage.deleteTable(relation.mapping_table_name); + }.bind(this)); + this.geoPackage.deleteTable(ExtendedRelationDao.TABLE_NAME); + } + if (this.extensionsDao.isTableExists()) { + this.extensionsDao.deleteByExtension(RelatedTablesExtension.EXTENSION_NAME); + } +} + +/** + * Determine if the GeoPackage has the extension + * @param {string} [mappingTableName] mapping table name to check, if not specified, this checks for any mapping table name + * @return {Boolean} + */ +RelatedTablesExtension.prototype.has = function(mappingTableName) { + if (mappingTableName) { + return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME) + && this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, mappingTableName); + } + return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME); +} + +RelatedTablesExtension.EXTENSION_NAME = 'related_tables'; +RelatedTablesExtension.EXTENSION_RELATED_TABLES_AUTHOR = 'gpkg'; +RelatedTablesExtension.EXTENSION_RELATED_TABLES_NAME_NO_AUTHOR = 'related_tables'; +RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION = 'TBD'; + +module.exports = RelatedTablesExtension; + +},{"../.":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){ +/** + * MediaDao module. + * @module extension/relatedTables + */ + +var MediaRow = require('./mediaRow') + , MediaTable = require('./mediaTable') + , Dao = require('../../dao/dao') + , UserDao = require('../../user/userDao') + , UserTableReader = require('../../user/userTableReader'); + +var util = require('util'); + +/** + * User Media DAO for reading user media data tables + * @class + * @extends {module:user/userDao~UserDao} + * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection + * @param {string} table table name + */ +var MediaDao = function(geoPackage, table) { + UserDao.call(this, geoPackage, table); + this.mediaTable = table; +} + +util.inherits(MediaDao, UserDao); + +/** + * Reads the table specified from the geopackage + * @param {module:geoPackage~GeoPackage} geoPackage geopackage object + * @param {string} tableName table name + * @param {string[]} requiredColumns required columns + * @return {module:user/userDao~UserDao} + */ +MediaDao.readTable = function(geoPackage, tableName) { + var reader = new UserTableReader(tableName); + var userTable = reader.readTable(geoPackage.getDatabase()); + return new MediaDao(geoPackage, userTable); +} + +/** + * Create a new media row + * @return {module:extension/relatedTables~MediaRow} + */ +MediaDao.prototype.newRow = function() { + return new MediaRow(this.mediaTable); +} + +/** + * Create a media row with the column types and values + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {module:extension/relatedTables~MediaRow} media row + */ +MediaDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new MediaRow(this.mediaTable, columnTypes, values); +}; + +/** + * Gets the media table + * @return {module:extension/relatedTables~MediaTable} + */ +MediaDao.prototype.getTable = function() { + return this.mediaTable; +} + +module.exports = MediaDao; + +},{"../../dao/dao":11,"../../user/userDao":106,"../../user/userTableReader":109,"./mediaRow":34,"./mediaTable":35,"util":343}],34:[function(require,module,exports){ +/** + * MediaRow module. + * @module extension/relatedTables + */ +var UserRow = require('../../user/userRow'); + +var util = require('util'); + +var ImageUtils = require('../../tiles/imageUtils'); + +/** + * User Media Row containing the values from a single result set row + * @class + * @extends {module:user/userRow~UserRow} + * @param {module:extension/relatedTables~MediaTable} mediaTable media table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + */ +var MediaRow = function(mediaTable, columnTypes, values) { + UserRow.call(this, mediaTable, columnTypes, values); + this.mediaTable = mediaTable; +} + +util.inherits(MediaRow, UserRow); + +/** + * Gets the id column + * @return {module:user/userColumn~UserColumn} + */ +MediaRow.prototype.getIdColumn = function() { + return this.mediaTable.getIdColumn(); +} + +/** + * Gets the id + * @return {Number} + */ +MediaRow.prototype.getId = function() { + return this.getValueWithColumnName(this.getIdColumn().name); +} + +/** + * Get the data column + * @return {module:user/userColumn~UserColumn} + */ +MediaRow.prototype.getDataColumn = function() { + return this.mediaTable.getDataColumn(); +} + +/** + * Gets the data + * @return {Buffer} + */ +MediaRow.prototype.getData = function() { + return this.getValueWithColumnName(this.getDataColumn().name); +} + +/** + * Get the data image + * + * @return {Promise} + */ +MediaRow.prototype.getDataImage = function() { + return ImageUtils.getImage(this.getData(), this.getContentType()); +} +/** + * Get the scaled data image + * @param {Number} scale + * @return {Promise} + */ +MediaRow.prototype.getScaledDataImage = function(scale) { + return ImageUtils.getScaledImage(this.getData(), scale); +} + +/** + * Sets the data for the row + * @param {Buffer} data data + */ +MediaRow.prototype.setData = function(data) { + this.setValueWithColumnName(this.getDataColumn().name, data); +} + +/** + * Get the content type column + * @return {module:user/userColumn~UserColumn} + */ +MediaRow.prototype.getContentTypeColumn = function() { + return this.mediaTable.getContentTypeColumn(); +} + +/** + * Gets the content type + * @return {string} + */ +MediaRow.prototype.getContentType = function() { + return this.getValueWithColumnName(this.getContentTypeColumn().name); +} + +/** + * Sets the content type for the row + * @param {string} contentType contentType + */ +MediaRow.prototype.setContentType = function(contentType) { + this.setValueWithColumnName(this.getContentTypeColumn().name, contentType); +} + +module.exports = MediaRow; + +},{"../../tiles/imageUtils":89,"../../user/userRow":107,"util":343}],35:[function(require,module,exports){ +/** + * mediaTable module. + * @module extension/relatedTables + */ + +var UserTable = require('../../user/userTable') + , UserRelatedTable = require('./userRelatedTable') + , UserColumn = require('../../user/userColumn') + , DataType = require('../../db/dataTypes') + , RelationType = require('./relationType'); + +var util = require('util'); + +/** + * Media Requirements Class User-Defined Related Data Table + * @class + * @extends {module:extension/relatedTables~UserRelatedTable} + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns media columns + * @param {string[]} requiredColumns required column names + */ +var MediaTable = function(tableName, columns, requiredColumns) { + UserRelatedTable.call(this, tableName, MediaTable.RELATION_TYPE.name, MediaTable.RELATION_TYPE.dataType, columns, requiredColumns); +} + +util.inherits(MediaTable, UserRelatedTable); + +/** + * Create a media table with a minimum required columns followed by the additional columns + * @param {string} tableName name of the table + * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns + * @return {module:extension/relatedTables~MediaTable} + */ +MediaTable.create = function(tableName, additionalColumns) { + var columns = MediaTable.createRequiredColumns(); + if (additionalColumns) { + columns = columns.concat(additionalColumns); + } + return new MediaTable(tableName, columns, MediaTable.requiredColumns()); +} + +/** + * Get the required columns + * @param {string} [idColumnName=id] id column name + * @return {string[]} + */ +MediaTable.requiredColumns = function(idColumnName) { + var requiredColumns = []; + requiredColumns.push(idColumnName || MediaTable.COLUMN_ID); + requiredColumns.push(MediaTable.COLUMN_DATA); + requiredColumns.push(MediaTable.COLUMN_CONTENT_TYPE); + return requiredColumns; +} + +/** + * Get the number of required columns + * @return {Number} + */ +MediaTable.numRequiredColumns = function(){ + return MediaTable.requiredColumns().length; +} + +/** + * Create the required columns + * @param {Number} [startingIndex=0] starting index of the required columns + * @param {string} [idColumnName=id] id column name + * @return {module:user/userColumn~UserColumn[]} + */ +MediaTable.createRequiredColumns = function(startingIndex, idColumnName) { + startingIndex = startingIndex || 0; + return [ + MediaTable.createIdColumn(startingIndex++, idColumnName || MediaTable.COLUMN_ID), + MediaTable.createDataColumn(startingIndex++), + MediaTable.createContentTypeColumn(startingIndex++) + ]; +} + +/** + * Create the primary key id column + * @param {Number} index index of the column + * @param {string} idColumnName name of the id column + * @return {module:user/userColumn~UserColumn} + */ +MediaTable.createIdColumn = function(index, idColumnName) { + return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName); +} + +/** + * Create the data column + * @param {Number} index index of the column + * @param {string} idColumnName name of the id column + * @return {module:user/userColumn~UserColumn} + */ +MediaTable.createDataColumn = function(index) { + return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_DATA, DataType.GPKGDataType.GPKG_DT_BLOB, true); +} + +/** + * Create the content type column + * @param {Number} index index of the column + * @param {string} idColumnName name of the id column + * @return {module:user/userColumn~UserColumn} + */ +MediaTable.createContentTypeColumn = function(index) { + return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_CONTENT_TYPE, DataType.GPKGDataType.GPKG_DT_TEXT, true); +} + +/** + * Get the primary key id column + * @return {module:user/userColumn~UserColumn} + */ +MediaTable.prototype.getIdColumn = function() { + return this.getPkColumn(); +} + +/** + * Get the data column + * @return {module:user/userColumn~UserColumn} + */ +MediaTable.prototype.getDataColumn = function() { + return this.getColumnWithColumnName(MediaTable.COLUMN_DATA); +} + +/** + * Get the content type column + * @return {module:user/userColumn~UserColumn} + */ +MediaTable.prototype.getContentTypeColumn = function() { + return this.getColumnWithColumnName(MediaTable.COLUMN_CONTENT_TYPE); +} + +MediaTable.RELATION_TYPE = RelationType.MEDIA; +MediaTable.COLUMN_ID = 'id'; +MediaTable.COLUMN_DATA = 'data'; +MediaTable.COLUMN_CONTENT_TYPE = 'content_type'; + +MediaTable.prototype.TABLE_TYPE = 'media'; + +module.exports = MediaTable; + +},{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"./relationType":36,"./userRelatedTable":43,"util":343}],36:[function(require,module,exports){ +/** + * @module extension/relatedTables + */ + +var ContentsDao = require('../../core/contents').ContentsDao; + +/** + * Spec supported User-Defined Related Data Tables + * @class + */ +var RelationType = function() {} + +module.exports = RelationType; + +/** + * Link features with other features + * @type {Object} + */ +RelationType.FEATURES = { + name: 'features', + dataType: ContentsDao.GPKG_CDT_FEATURES_NAME +}; + +/** + * Relate sets of tabular text or numeric data + * @type {Object} + */ +RelationType.SIMPLE_ATTRIBUTES = { + name: 'simple_attributes', + dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME +}; + +/** + * Relate features or attributes to multimedia files such as pictures and videos + * @type {Object} + */ +RelationType.MEDIA = { + name: 'media', + dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME +}; + +/** + * Attribute type relation + * @type {Object} + */ +RelationType.ATTRIBUTES = { + name: 'attributes', + dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME +}; + +/** + * Tile type relation + * @type {Object} + */ +RelationType.TILES = { + name: 'tiles', + dataType: ContentsDao.GPKG_CDT_TILES_NAME +}; + +/** + * Get the relation type from the name + * @param {string} name name + * @return {module:extension/relatedTables~RelationType} + */ +RelationType.fromName = function(name) { + return RelationType[name.toUpperCase()]; +} + +},{"../../core/contents":8}],37:[function(require,module,exports){ +/** + * SimpleAttributesDao module. + * @module extension/relatedTables + */ + +var SimpleAttributesRow = require('./simpleAttributesRow') + , SimpleAttributesTable = require('./simpleAttributesTable') + , Dao = require('../../dao/dao') + , UserDao = require('../../user/userDao'); + +var util = require('util'); + +/** + * User Simple Attributes DAO for reading user simple attributes data tables + * @class + * @extends {module:user/userDao~UserDao} + * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection + * @param {string} table table name + */ +var SimpleAttributesDao = function(geoPackage, table) { + UserDao.call(this, geoPackage, table); + this.simpleAttributesTable = table; +} + +util.inherits(SimpleAttributesDao, UserDao); + +/** + * Create a new {module:extension/relatedTables~SimpleAttributesRow} + * @return {module:extension/relatedTables~SimpleAttributesRow} + */ +SimpleAttributesDao.prototype.newRow = function() { + return new SimpleAttributesRow(this.simpleAttributesTable); +} + +/** + * Create a new {module:extension/relatedTables~SimpleAttributesRow} with the column types and values + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {module:extension/relatedTables~SimpleAttributesRow} simple attributes row + */ +SimpleAttributesDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new SimpleAttributesRow(this.simpleAttributesTable, columnTypes, values); +}; + +/** + * Gets the {module:extension/relatedTables~SimpleAttributesTable} + * @return {module:extension/relatedTables~SimpleAttributesTable} + */ +SimpleAttributesDao.prototype.getTable = function() { + return this.simpleAttributesTable; +} + +/** + * Get the simple attributes rows from this table by ids + * @param {Number[]} ids array of ids + * @return {module:extension/relatedTables~SimpleAttributesRow[]} + */ +SimpleAttributesDao.prototype.getRows = function(ids) { + var simpleAttributesRows = []; + for (var i = 0; i < ids.length; i++) { + var row = this.queryForId(ids[i]); + if (row) { + simpleAttributesRows.push(row); + } + } + return simpleAttributesRows; +} + +module.exports = SimpleAttributesDao; + +},{"../../dao/dao":11,"../../user/userDao":106,"./simpleAttributesRow":38,"./simpleAttributesTable":39,"util":343}],38:[function(require,module,exports){ +/** + * SimpleAttributesRow module. + * @module extension/relatedTables + */ + +var UserRow = require('../../user/userRow'); + +var util = require('util'); + +/** + * User Simple Attributes Row containing the values from a single result set row + * @class + * @extends {module:user/userRow~UserRow} + * @param {module:extension/relatedTables~SimpleAttributesTable} simpleAttributesTable simple attributes table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + */ +var SimpleAttributesRow = function(simpleAttributesTable, columnTypes, values) { + UserRow.call(this, simpleAttributesTable, columnTypes, values); + this.simpleAttributesTable = simpleAttributesTable; +} + +util.inherits(SimpleAttributesRow, UserRow); + +/** + * Gets the primary key id column + * @return {module:user/userColumn~UserColumn} + */ +SimpleAttributesRow.prototype.getIdColumn = function() { + return this.simpleAttributesTable.getIdColumn(); +} + +/** + * Gets the id + * @return {Number} + */ +SimpleAttributesRow.prototype.getId = function() { + return this.getValueWithColumnName(this.getIdColumn().name); +} + +module.exports = SimpleAttributesRow; + +},{"../../user/userRow":107,"util":343}],39:[function(require,module,exports){ +/** + * simpleAttributesTable module. + * @module extension/relatedTables + */ + +var UserTable = require('../../user/userTable') + , UserRelatedTable = require('./userRelatedTable') + , UserColumn = require('../../user/userColumn') + , DataTypes = require('../../db/dataTypes') + , RelationType = require('./relationType'); + +var util = require('util'); + +/** + * Simple Attributes Requirements Class User-Defined Related Data Table + * @class + * @extends {module:extension/relatedTables~UserRelatedTable} + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns attribute columns + * @param {string[]} requiredColumns required column names + */ +var SimpleAttributesTable = function(tableName, columns, requiredColumns) { + UserRelatedTable.call(this, tableName, SimpleAttributesTable.RELATION_TYPE.name, SimpleAttributesTable.RELATION_TYPE.dataType, columns, requiredColumns); + this.validateColumns(); +} + +util.inherits(SimpleAttributesTable, UserRelatedTable); + +/** + * Create a simple attributes table with the columns + * @param {string} tableName name of the table + * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns + * @return {module:extension/relatedTables~SimpleAttributesTable} + */ +SimpleAttributesTable.create = function(tableName, additionalColumns) { + var tableColumns = SimpleAttributesTable.createRequiredColumns(0); + + if (additionalColumns) { + tableColumns = tableColumns.concat(additionalColumns); + } + + return new SimpleAttributesTable(tableName, tableColumns, SimpleAttributesTable.requiredColumns()); +} + +/** + * Get the required columns + * @param {string} [idColumnName=id] id column name + * @return {string[]} + */ +SimpleAttributesTable.requiredColumns = function(idColumnName) { + var requiredColumns = []; + requiredColumns.push(idColumnName || SimpleAttributesTable.COLUMN_ID); + return requiredColumns; +} + +/** + * Get the number of required columns + * @return {Number} + */ +SimpleAttributesTable.numRequiredColumns = function(){ + return SimpleAttributesTable.requiredColumns().length; +} + +/** + * Create the required columns + * @param {Number} [startingIndex=0] starting index of the required columns + * @param {string} [idColumnName=id] id column name + * @return {module:user/userColumn~UserColumn[]} + */ +SimpleAttributesTable.createRequiredColumns = function(startingIndex, idColumnName) { + startingIndex = startingIndex || 0; + return [SimpleAttributesTable.createIdColumn(startingIndex++, idColumnName || SimpleAttributesTable.COLUMN_ID)]; +} + +/** + * Create the primary key id column + * @param {Number} index index of the column + * @param {string} idColumnName name of the id column + * @return {module:user/userColumn~UserColumn} + */ +SimpleAttributesTable.createIdColumn = function(index, idColumnName) { + return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName); +} + +/** + * Validate that Simple Attributes columns to verify at least one non id + * column exists and that all columns are simple data types + */ +SimpleAttributesTable.prototype.validateColumns = function() { + var columns = this.columns; + if (columns.length < 2) { + throw new Error('Simple Attributes Tables require at least one non id column'); + } + + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + if (!SimpleAttributesTable.isSimple(column)) { + throw new Error('Simple Attributes Tables only support simple data types. Column: ' + column.name + ', Non Simple Data Type: ' + column.dataType); + } + } +} + +/** + * Get the column index of the id column + * @return {Number} + */ +SimpleAttributesTable.prototype.getIdColumnIndex = function() { + return this.pkIndex; +} + +/** + * Get the primary key id column + * @return {module:user/userColumn~UserColumn} + */ +SimpleAttributesTable.prototype.getIdColumn = function() { + return this.getPkColumn(); +} + +/** + * Determine if the column is a simple column + * @param {module:user/userColumn~UserColumn} column column to check + * @return {Boolean} + */ +SimpleAttributesTable.isSimple = function(column) { + return column.notNull && SimpleAttributesTable.isSimpleDataType(column.dataType); +} + +/** + * Determine if the data type is a simple type: TEXT, INTEGER, or REAL + * @param {module:db/dataTypes~GPKGDataType} + * @return {Boolean} + */ +SimpleAttributesTable.isSimpleDataType = function(dataType) { + return dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB && dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY; +} + +SimpleAttributesTable.RELATION_TYPE = RelationType.SIMPLE_ATTRIBUTES; +SimpleAttributesTable.COLUMN_ID = 'id'; + +SimpleAttributesTable.prototype.TABLE_TYPE = 'simple_attributes'; + +module.exports = SimpleAttributesTable; + +},{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"./relationType":36,"./userRelatedTable":43,"util":343}],40:[function(require,module,exports){ +/** + * @module extension/relatedTables + */ + +var UserMappingRow = require('./userMappingRow') + , UserMappingTable = require('./userMappingTable') + , UserCustomDao = require('../../user/custom/userCustomDao') + , ColumnValues = require('../../dao/columnValues'); + +var util = require('util'); + +/** + * User Mapping DAO for reading user mapping data tables + * @class + * @extends {module:user/custom/userCustomDao~UserCustomDao} + * @param {string} table table name + * @param {module:geoPackage~GeoPackage} geoPackage geopackage object + */ +var UserMappingDao = function(userCustomDao, geoPackage) { + UserCustomDao.call(this, geoPackage, this.createMappingTable(userCustomDao)); +} + +util.inherits(UserMappingDao, UserCustomDao); + +/** + * Create a new {module:user/custom~UserCustomTable} + * @param {module:user/custom~UserCustomDao} userCustomDao + * @return {module:user/custom~UserCustomTable} userCustomTable user custom table + */ +UserMappingDao.prototype.createMappingTable = function(userCustomDao) { + return new UserMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns); +} + +/** + * Create a new {module:extension/relatedTables~UserMappingRow} + * @return {module:extension/relatedTables~UserMappingRow} + */ +UserMappingDao.prototype.newRow = function() { + return new UserMappingRow(this.table); +} + +/** + * Gets the {module:extension/relatedTables~UserMappingTable} + * @return {module:extension/relatedTables~UserMappingTable} + */ +UserMappingDao.prototype.getTable = function() { + return this.table; +} + +/** + * Create a user mapping row + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {module:extension/relatedTables~UserMappingRow} user mapping row + */ +UserMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new UserMappingRow(this.table, columnTypes, values); +}; + +/** + * Gets the user mapping row from the result + * @param {Object} result db result + * @return {module:extension/relatedTables~UserMappingRow} user mapping row + */ +UserMappingDao.prototype.getUserMappingRow = function(result) { + return this.getRow(result); +} + +/** + * Query by base id + * @param {Number} baseId base id + * @return {Object[]} + */ +UserMappingDao.prototype.queryByBaseId = function(baseId) { + if (baseId.getBaseId) { + baseId = baseId.getBaseId(); + } + return this.queryForAllEq(UserMappingTable.COLUMN_BASE_ID, baseId); +} + +/** + * Query by related id + * @param {Number} relatedId related id + * @return {Object[]} + */ +UserMappingDao.prototype.queryByRelatedId = function(relatedId) { + if (relatedId.getRelatedId) { + relatedId = relatedId.getRelatedId(); + } + return this.queryForAllEq(UserMappingTable.COLUMN_RELATED_ID, relatedId); +} + +/** + * Query by base id and related id + * @param {Number} baseId base id + * @param {Number} relatedId related id + * @return {Object[]} + */ +UserMappingDao.prototype.queryByIds = function(baseId, relatedId) { + if (baseId.getBaseId) { + relatedId = baseId.getRelatedId(); + baseId = baseId.getBaseId(); + } + + var values = new ColumnValues(); + values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId); + values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId); + + return this.queryForFieldValues(values); +} + +/** + * The unique related ids + * @return {Number[]} + */ +UserMappingDao.prototype.uniqueRelatedIds = function() { + var query = 'SELECT DISTINCT '; + query += UserMappingTable.COLUMN_RELATED_ID; + query += ' FROM '; + query += "'"+this.gpkgTableName+"'"; + return this.connection.all(query); +} + +/** + * Count user mapping rows by base id and related id + * @param {Number} baseId base id + * @param {Number} relatedId related id + * @return {Number} + */ +UserMappingDao.prototype.countByIds = function(baseId, relatedId) { + if (baseId.getBaseId) { + relatedId = baseId.getRelatedId(); + baseId = baseId.getBaseId(); + } + + var values = new ColumnValues(); + values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId); + values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId); + + return this.count(values); +} + +/** + * Delete by base id + * @param {Number} baseId base id + * @return {Number} number of deleted rows + */ +UserMappingDao.prototype.deleteByBaseId = function(baseId) { + if (baseId.getBaseId) { + baseId = baseId.getBaseId(); + } + + var where = ''; + where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId); + var whereArgs = this.buildWhereArgs([baseId]); + + return this.deleteWhere(where, whereArgs); +}; + +/** + * Delete by related id + * @param {Number} relatedId related id + * @return {Number} number of deleted rows + */ +UserMappingDao.prototype.deleteByRelatedId = function(relatedId) { + if (relatedId.getRelatedId) { + relatedId = relatedId.getRelatedId(); + } + + var where = ''; + where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId); + var whereArgs = this.buildWhereArgs([relatedId]); + + return this.deleteWhere(where, whereArgs); +}; + +/** + * Delete by base id and related id + * @param {Number} baseId base id + * @param {Number} relatedId related id + * @return {Number} number of deleted rows + */ +UserMappingDao.prototype.deleteByIds = function(baseId, relatedId) { + if (baseId.getBaseId) { + relatedId = baseId.getRelatedId(); + baseId = baseId.getBaseId(); + } + + var where = ''; + where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId); + where += ' and '; + where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId); + var whereArgs = this.buildWhereArgs([baseId, relatedId]); + + return this.deleteWhere(where, whereArgs); +} + +module.exports = UserMappingDao; + +},{"../../dao/columnValues":10,"../../user/custom/userCustomDao":102,"./userMappingRow":41,"./userMappingTable":42,"util":343}],41:[function(require,module,exports){ +/** + * UserMappingRow module. + * @module extension/relatedTables + */ + +var UserRow = require('../../user/userRow'); + +var util = require('util'); + +/** + * User Mapping Row containing the values from a single result set row + * @class + * @extends {module:user/userRow~UserRow} + * @param {module:extension/relatedTables~UserMappingTable} userMappingTable user mapping table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + */ +var UserMappingRow = function(userMappingTable, columnTypes, values) { + UserRow.call(this, userMappingTable, columnTypes, values); +} + +util.inherits(UserMappingRow, UserRow); + +/** + * Get the base id column + * @return {module:user/userColumn~UserColumn} + */ +UserMappingRow.prototype.getBaseIdColumn = function() { + return this.table.getBaseIdColumn(); +} + +/** + * Gets the base id + * @return {Number} + */ +UserMappingRow.prototype.getBaseId = function() { + return this.getValueWithColumnName(this.getBaseIdColumn().name); +} + +/** + * Sets the base id + * @param {Number} baseId base id + */ +UserMappingRow.prototype.setBaseId = function(baseId) { + this.setValueWithColumnName(this.getBaseIdColumn().name, baseId); +} + +/** + * Get the related id column + * @return {module:user/userColumn~UserColumn} + */ +UserMappingRow.prototype.getRelatedIdColumn = function() { + return this.table.getRelatedIdColumn(); +} + +/** + * Gets the related id + * @return {Number} + */ +UserMappingRow.prototype.getRelatedId = function() { + return this.getValueWithColumnName(this.getRelatedIdColumn().name); +} + +/** + * Sets the related id + * @param {Number} relatedId related id + */ +UserMappingRow.prototype.setRelatedId = function(relatedId) { + this.setValueWithColumnName(this.getRelatedIdColumn().name, relatedId); +} + +module.exports = UserMappingRow; + +},{"../../user/userRow":107,"util":343}],42:[function(require,module,exports){ +/** + * userMappingTable module. + * @module extension/relatedTables + */ + +var UserTable = require('../../user/userTable') + , UserCustomColumn = require('../../user/custom/userCustomColumn') + , DataTypes = require('../../db/dataTypes'); + +var util = require('util'); + +/** + * Contains user mapping table factory and utility methods + * @class + * @extends {module:user/userTable~UserTable} + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns user mapping columns + */ +var UserMappingTable = function(tableName, columns) { + UserTable.call(this, tableName, columns); +} + +util.inherits(UserMappingTable, UserTable); + +/** + * Creates a user mapping table with the minimum required columns followed by the additional columns + * @param {string} tableName name of the table + * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns + * @return {module:extension/relatedTables~UserMappingTable} + */ +UserMappingTable.create = function(tableName, columns) { + var allColumns = UserMappingTable.createRequiredColumns(0); + if (columns) { + allColumns = allColumns.concat(columns); + } + return new UserMappingTable(tableName, allColumns); +} + +/** + * Get the number of required columns + * @return {Number} + */ +UserMappingTable.numRequiredColumns = function() { + return UserMappingTable.createRequiredColumns(0).length; +} + +/** + * Create the required columns + * @param {Number} [startingIndex=0] starting index of the required columns + * @return {module:user/userColumn~UserColumn[]} + */ +UserMappingTable.createRequiredColumns = function(startingIndex) { + startingIndex = startingIndex || 0; + return [ + UserMappingTable.createBaseIdColumn(startingIndex++), + UserMappingTable.createRelatedIdColumn(startingIndex) + ]; +} + +/** + * Create the base id column + * @param {Number} index index of the column + * @return {module:user/userColumn~UserColumn} + */ +UserMappingTable.createBaseIdColumn = function(index) { + var baseIdColumn = UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_BASE_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true); + return baseIdColumn; +} + +/** + * Create the related id column + * @param {Number} index index of the column + * @return {module:user/userColumn~UserColumn} + */ +UserMappingTable.createRelatedIdColumn = function(index) { + return UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_RELATED_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true); +} + +/** + * Get the base id column + * @return {module:user/userColumn~UserColumn} + */ +UserMappingTable.prototype.getBaseIdColumn = function() { + return this.getColumnWithColumnName(UserMappingTable.COLUMN_BASE_ID); +} + +/** + * Get the related id column + * @return {module:user/userColumn~UserColumn} + */ +UserMappingTable.prototype.getRelatedIdColumn = function() { + return this.getColumnWithColumnName(UserMappingTable.COLUMN_RELATED_ID); +} + +/** + * Get the required columns + * @return {string[]} + */ +UserMappingTable.requiredColumns = function() { + return [UserMappingTable.COLUMN_BASE_ID, UserMappingTable.COLUMN_RELATED_ID]; +} + +UserMappingTable.COLUMN_BASE_ID = 'base_id'; +UserMappingTable.COLUMN_RELATED_ID = 'related_id'; + +module.exports = UserMappingTable; + +},{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../../user/userTable":108,"util":343}],43:[function(require,module,exports){ +/** + * userRelatedTable module. + * @module extension/relatedTables + */ + +var UserTable = require('../../user/userTable') + , UserColumn = require('../../user/userColumn') + , DataTypes = require('../../db/dataTypes'); + +var util = require('util'); + +/** + * User Defined Related Table + * @param {string} tableName table name + * @param {array} columns attribute columns + */ +/** + * User Defined Related Table + * @param {string} tableName table name + * @param {string} relationName relation name + * @param {string} dataType Contents data type + * @param {module:user/userColumn~UserColumn} columns columns + * @param {string[]} requiredColumns required columns + * @return {module:extension/relatedTables~UserRelatedTable} + */ +var UserRelatedTable = function(tableName, relationName, dataType, columns, requiredColumns) { + UserTable.call(this, tableName, columns, requiredColumns); + this.relation_name = relationName; + this.data_type = dataType; +} + +util.inherits(UserRelatedTable, UserTable); + +/** + * Sets the contents + * @param {module:core/contents~Contents} contents contents + * @throw Error if the contents data type does not match this data type + */ +UserRelatedTable.prototype.setContents = function(contents) { + this.contents = contents; + + // verify the contents have a relation name data type + if (!contents.data_type || contents.data_type !== this.data_type) { + throw new Error('The contents of this related table must have a data type of ' + this.data_type); + } +} + +module.exports = UserRelatedTable; + +},{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"util":343}],44:[function(require,module,exports){ +/** + * RTreeIndexDao module. + * @module RTreeIndexDao + * @see module:dao/dao + */ + +var Dao = require('../../dao/dao') + , BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension + , EnvelopeBuilder = require('../../geom/envelopeBuilder') + , GeometryData = require('../../geom/geometryData'); + +var util = require('util'); + +var RTreeIndex = function(geoPackage, featureDao) { + BaseExtension.call(this, geoPackage); + + this.extensionName = Extension.buildExtensionName(RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR, RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR); + + this.extensionDefinition = RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION; + + this.tableName = featureDao.table_name; + this.primaryKeyColumn = featureDao.idColumns[0]; + this.columnName = featureDao.getGeometryColumnName(); + + this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao); + this.extensionExists = this.hasExtension(this.extensionName, this.tableName, this.columnName); +} + +util.inherits(RTreeIndex, BaseExtension); + +RTreeIndex.prototype.getRTreeIndexExtension = function () { + return this.getExtension(this.extensionName, this.tableName, this.columnName); +}; + +RTreeIndex.prototype.getOrCreateExtension = function() { + return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.WRITE_ONLY); +}; + +RTreeIndex.prototype.create = function() { + if (this.extensionExists) { + return Promise.resolve(this.getRTreeIndexExtension()); + } + + return this.getOrCreate(this.extensionName, this.tableName, this.columnName, RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION, Extension.WRITE_ONLY) + .then(function() { + this.createAllFunctions(); + this.createRTreeIndex(); + this.loadRTreeIndex(); + this.createAllTriggers(); + return this.getRTreeIndexExtension(); + }.bind(this)); +} + +RTreeIndex.prototype.createAllTriggers = function() { + var insertTrigger = + 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_insert AFTER INSERT ON '+this.tableName+ + ' WHEN (new.'+this.columnName+' NOT NULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+ + 'BEGIN '+ + ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+ + ' NEW.'+this.primaryKeyColumn+','+ + ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+ + ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+ + ' ); '+ + 'END;'; + + var update1Trigger = + 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update1 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+ + ' WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+ + ' (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+ + 'BEGIN '+ + ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+ + ' NEW.'+this.primaryKeyColumn+','+ + ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+ + ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+ + ' ); '+ + 'END;'; + + var update2Trigger = + 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update2 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+ + ' WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+ + ' (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+ + 'BEGIN '+ + ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+ + 'END;'; + + var update3Trigger = + 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update3 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+ + ' WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+ + ' (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+ + 'BEGIN '+ + ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+ + ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+ + ' NEW.'+this.primaryKeyColumn+', '+ + ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+ + ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+')'+ + ' ); '+ + 'END;'; + + var update4Trigger = + 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update4 AFTER UPDATE ON '+this.tableName+ + ' WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+ + ' (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+ + 'BEGIN '+ + ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id IN (OLD.'+this.primaryKeyColumn+', NEW.'+this.primaryKeyColumn+'); '+ + 'END;'; + + var deleteTrigger = + 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_delete AFTER DELETE ON '+this.tableName+ + ' WHEN old.'+this.columnName+' NOT NULL '+ + 'BEGIN'+ + ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+ + 'END;'; + + this.connection.run(insertTrigger); + this.connection.run(update1Trigger); + this.connection.run(update2Trigger); + this.connection.run(update3Trigger); + this.connection.run(update4Trigger); + this.connection.run(deleteTrigger); +} + +RTreeIndex.prototype.loadRTreeIndex = function() { + 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); +} + +RTreeIndex.prototype.createRTreeIndex = function() { + this.connection.run('CREATE VIRTUAL TABLE rtree_'+this.tableName+'_'+this.columnName+' USING rtree(id, minx, maxx, miny, maxy)'); +} + +RTreeIndex.prototype.createAllFunctions = function() { + this.createMinXFunction(); + this.createMaxXFunction(); + this.createMinYFunction(); + this.createMaxYFunction(); + this.createIsEmptyFunction(); +} + +RTreeIndex.prototype.createMinXFunction = function() { + this.connection.registerFunction('ST_MinX', function(buffer) { + var geom = new GeometryData(buffer); + var envelope = geom.envelope; + if (!envelope) { + envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); + } + return envelope.minX; + }); +} + +RTreeIndex.prototype.createMinYFunction = function() { + this.connection.registerFunction('ST_MinY', function(buffer) { + var geom = new GeometryData(buffer); + var envelope = geom.envelope; + if (!envelope) { + envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); + } + return envelope.minY; + }); +} + +RTreeIndex.prototype.createMaxXFunction = function() { + this.connection.registerFunction('ST_MaxX', function(buffer) { + var geom = new GeometryData(buffer); + var envelope = geom.envelope; + if (!envelope) { + envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); + } + return envelope.maxX; + }); +} + +RTreeIndex.prototype.createMaxYFunction = function() { + this.connection.registerFunction('ST_MaxY', function(buffer) { + var geom = new GeometryData(buffer); + var envelope = geom.envelope; + if (!envelope) { + envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); + } + return envelope.maxY; + }); +} + +RTreeIndex.prototype.createIsEmptyFunction = function() { + this.connection.registerFunction('ST_IsEmpty', function(buffer) { + var geom = new GeometryData(buffer); + return !geom || geom.empty || !geom.geometry; + }); +} + +/** + * RTree Index Data Access Object + * @class + * @extends {module:dao/dao~Dao} + */ +var RTreeIndexDao = function(geoPackage, featureDao) { + Dao.call(this, geoPackage); + this.featureDao = featureDao; + +}; + +util.inherits(RTreeIndexDao, Dao); + +/** + * Generate query components + * @param envelope + * @returns {{whereArgs: Array, where: string, join: string, tableNameArr: string[]}} + * @private + */ +RTreeIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) { + var tableName = this.featureDao.gpkgTableName; + + var where = ''; + var minXLessThanMaxX = envelope.minX < envelope.maxX; + if (minXLessThanMaxX) { + where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<='); + where += ' and '; + where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>='); + } else { + where += '('; + where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<='); + where += ' or '; + where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>='); + where += ' or '; + where += this.buildWhereWithFieldAndValue('minx', envelope.minX, '>='); + where += ' or '; + where += this.buildWhereWithFieldAndValue('maxx', envelope.maxX, '<='); + where += ')'; + } + + where += ' and '; + where += this.buildWhereWithFieldAndValue('miny', envelope.maxY, '<='); + where += ' and '; + where += this.buildWhereWithFieldAndValue('maxy', envelope.minY, '>='); + + var whereArgs = [] + whereArgs.push(envelope.maxX, envelope.minX); + if (!minXLessThanMaxX) { + whereArgs.push(envelope.minX, envelope.maxX); + } + whereArgs.push(envelope.maxY, envelope.minY); + + return { + join: 'inner join ' + tableName + ' on ' + tableName + '.' + this.featureDao.idColumns[0] + ' = ' + this.gpkgTableName+'.id', + where, + whereArgs, + tableNameArr: [tableName + '.*'] + }; +}; + +RTreeIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) { + var result = this._generateGeometryEnvelopeQuery(envelope) + return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); +}; + +RTreeIndexDao.prototype.countWithGeometryEnvelope = function(envelope) { + var result = this._generateGeometryEnvelopeQuery(envelope) + return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); +}; + +RTreeIndexDao.TABLE_NAME = "rtree"; +RTreeIndexDao.COLUMN_TABLE_NAME = RTreeIndexDao.TABLE_NAME + ".table_name"; +RTreeIndexDao.COLUMN_GEOM_ID = RTreeIndexDao.TABLE_NAME + ".geom_id"; +RTreeIndexDao.COLUMN_MIN_X = RTreeIndexDao.TABLE_NAME + ".minx"; +RTreeIndexDao.COLUMN_MAX_X = RTreeIndexDao.TABLE_NAME + ".maxx"; +RTreeIndexDao.COLUMN_MIN_Y = RTreeIndexDao.TABLE_NAME + ".miny"; +RTreeIndexDao.COLUMN_MAX_Y = RTreeIndexDao.TABLE_NAME + ".maxy"; +RTreeIndexDao.COLUMN_MIN_Z = RTreeIndexDao.TABLE_NAME + ".minz"; +RTreeIndexDao.COLUMN_MAX_Z = RTreeIndexDao.TABLE_NAME + ".maxz"; +RTreeIndexDao.COLUMN_MIN_M = RTreeIndexDao.TABLE_NAME + ".minm"; +RTreeIndexDao.COLUMN_MAX_M = RTreeIndexDao.TABLE_NAME + ".maxm"; + +RTreeIndexDao.EXTENSION_NAME = 'gpkg_rtree_index'; +RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR = 'gpkg'; +RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR = 'rtree_index'; +RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION = 'http://www.geopackage.org/spec/#extension_rtree'; + +RTreeIndexDao.prototype.gpkgTableName = RTreeIndexDao.TABLE_NAME; + +module.exports.RTreeIndexDao = RTreeIndexDao; +module.exports.RTreeIndex = RTreeIndex; + +},{"../.":25,"../../dao/dao":11,"../../geom/envelopeBuilder":72,"../../geom/geometryData":73,"../baseExtension":20,"util":343}],45:[function(require,module,exports){ +/** + * SchemaExtension module. + * @module SchemaExtension + * @see module:extension/BaseExtension + */ + +var BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension; + +var util = require('util'); + +var SchemaExtension = function(geoPackage) { + BaseExtension.call(this, geoPackage); + + this.extensionName = SchemaExtension.EXTENSION_NAME; + + this.extensionDefinition = SchemaExtension.EXTENSION_SCHEMA_DEFINITION; +} + +util.inherits(SchemaExtension, BaseExtension); + +SchemaExtension.prototype.getOrCreateExtension = function() { + return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE); +}; + +SchemaExtension.EXTENSION_NAME = 'gpkg_schema'; +SchemaExtension.EXTENSION_SCHEMA_AUTHOR = 'gpkg'; +SchemaExtension.EXTENSION_SCHEMA_NAME_NO_AUTHOR = 'schema'; +SchemaExtension.EXTENSION_SCHEMA_DEFINITION = 'http://www.geopackage.org/spec/#extension_schema'; + +module.exports.SchemaExtension = SchemaExtension; + +},{"../.":25,"../baseExtension":20,"util":343}],46:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class FeatureStyle + */ + +/** + * FeatureStyle constructor + * @param {module:extension/style.StyleRow} styleRow + * @param {module:extension/style.IconRow} iconRow + * @constructor + */ +var FeatureStyle = function(styleRow, iconRow) { + this.styleRow = styleRow; + this.iconRow = iconRow; +}; + +/** + * Set style + * @param {module:extension/style.StyleRow} styleRow + */ +FeatureStyle.prototype.setStyle = function(styleRow) { + this.styleRow = styleRow; +}; + +/** + * Get style + * @returns {module:extension/style.StyleRow} + */ +FeatureStyle.prototype.getStyle = function() { + return this.styleRow; +}; + +/** + * Returns true if has style + * @returns {Boolean} + */ +FeatureStyle.prototype.hasStyle = function() { + return !!this.styleRow; +}; + +/** + * Set icon + * @param {module:extension/style.IconRow} iconRow + */ +FeatureStyle.prototype.setIcon = function(iconRow) { + this.iconRow = iconRow; +}; + +/** + * Get icon + * @returns {module:extension/style.IconRow} + */ +FeatureStyle.prototype.getIcon = function() { + return this.iconRow; +}; + +/** + * Returns true if has icon + * @returns {Boolean} + */ +FeatureStyle.prototype.hasIcon = function() { + return !!this.iconRow; +}; + +module.exports = FeatureStyle; + +},{}],47:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class FeatureStyles + */ + +/** + * FeatureStyles constructor + * @param {module:extension/style.Styles} styles + * @param {module:extension/style.Icons} icons + * @constructor + */ +var FeatureStyles = function(styles = null, icons = null) { + this.styles = styles; + this.icons = icons; +}; + +/** + * Set style + * @param {module:extension/style.Styles} styles + */ +FeatureStyles.prototype.setStyles = function(styles) { + this.styles = styles; +}; + +/** + * Get style + * @returns {module:extension/style.Styles} + */ +FeatureStyles.prototype.getStyles = function() { + return this.styles; +}; + +/** + * Set icon + * @param {module:extension/style.Icons} icons + */ +FeatureStyles.prototype.setIcons = function(icons) { + this.icons = icons; +}; + +/** + * Get icon + * @returns {module:extension/style.Icons} + */ +FeatureStyles.prototype.getIcons = function() { + return this.icons; +}; + +module.exports = FeatureStyles; + +},{}],48:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class FeatureStyleExtension + */ + +var FeatureStyles = require('./featureStyles') + , FeatureStyle = require('./featureStyle') + , Styles = require('./styles') + , Icons = require('./icons'); + + +/** + * Feature Table Styles, styles and icons for an individual feature table + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + * @param {String} tableName + * @constructor + */ +var FeatureTableStyles = function(geoPackage, tableName) { + this.featureStyleExtension = geoPackage.getFeatureStyleExtension(); + this.cachedTableFeatureStyles = new FeatureStyles(); + this.tableName = tableName; +}; + +/** + * Get the feature style extension + * @return {module:extension/style.FeatureStyleExtension} feature style extension + */ +FeatureTableStyles.prototype.getFeatureStyleExtension = function() { + return this.featureStyleExtension; +}; + +/** + * Get the feature table name + * @return {String} feature table name + */ +FeatureTableStyles.prototype.getTableName = function() { + return this.tableName; +}; + +/** + * Determine if the GeoPackage has the extension for the table + * @return {Boolean} true if has extension + */ +FeatureTableStyles.prototype.has = function() { + return this.featureStyleExtension.has(this.tableName); +}; + +/** + * Create style, icon, table style, and table icon relationships for the + * feature table + * @return {Promise} + */ +FeatureTableStyles.prototype.createRelationships = function() { + return this.featureStyleExtension.createRelationships(this.tableName); +}; + +/** + * Check if feature table has a style, icon, table style, or table icon + * relationships + * @return {Boolean} true if has a relationship + */ +FeatureTableStyles.prototype.hasRelationship = function() { + return this.featureStyleExtension.hasRelationship(this.tableName); +}; + +/** + * Create a style relationship for the feature table + * @return {Promise} + */ +FeatureTableStyles.prototype.createStyleRelationship = function() { + return this.featureStyleExtension.createStyleRelationship(this.tableName); +}; + +/** + * Determine if a style relationship exists for the feature table + * @return {Boolean} true if relationship exists + */ +FeatureTableStyles.prototype.hasStyleRelationship = function() { + return this.featureStyleExtension.hasStyleRelationship(this.tableName); +}; + +/** + * Create a feature table style relationship + * @return {Promise} + */ +FeatureTableStyles.prototype.createTableStyleRelationship = function() { + return this.featureStyleExtension.createTableStyleRelationship(this.tableName); +}; + +/** + * Determine if feature table style relationship exists + * + * @return {Boolean} true if relationship exists + */ +FeatureTableStyles.prototype.hasTableStyleRelationship = function() { + return this.featureStyleExtension.hasTableStyleRelationship(this.tableName); +}; + +/** + * Create an icon relationship for the feature table + * @return {Promise} + */ +FeatureTableStyles.prototype.createIconRelationship = function() { + return this.featureStyleExtension.createIconRelationship(this.tableName); +}; + +/** + * Determine if an icon relationship exists for the feature table + * @return {Boolean} true if relationship exists + */ +FeatureTableStyles.prototype.hasIconRelationship = function() { + return this.featureStyleExtension.hasIconRelationship(this.tableName); +}; + +/** + * Create a feature table icon relationship + * @return {Promise} + */ +FeatureTableStyles.prototype.createTableIconRelationship = function() { + return this.featureStyleExtension.createTableIconRelationship(this.tableName); +}; + +/** + * Determine if feature table icon relationship exists + * @return {Boolean} true if relationship exists + */ +FeatureTableStyles.prototype.hasTableIconRelationship = function() { + return this.featureStyleExtension.hasTableIconRelationship(this.tableName); +}; + +/** + * Delete the style and icon table and row relationships for the feature + * table + */ +FeatureTableStyles.prototype.deleteRelationships = function() { + this.featureStyleExtension.deleteRelationships(this.tableName); +}; + +/** + * Delete a style relationship for the feature table + */ +FeatureTableStyles.prototype.deleteStyleRelationship = function() { + this.featureStyleExtension.deleteStyleRelationship(this.tableName); +}; + +/** + * Delete a table style relationship for the feature table + */ +FeatureTableStyles.prototype.deleteTableStyleRelationship = function() { + this.featureStyleExtension.deleteTableStyleRelationship(this.tableName); +}; + +/** + * Delete a icon relationship for the feature table + */ +FeatureTableStyles.prototype.deleteIconRelationship = function() { + this.featureStyleExtension.deleteIconRelationship(this.tableName); +}; + +/** + * Delete a table icon relationship for the feature table + */ +FeatureTableStyles.prototype.deleteTableIconRelationship = function() { + this.featureStyleExtension.deleteTableIconRelationship(this.tableName); +}; + +/** + * Get a Style Mapping DAO + * @return {module:extension/style.StyleMappingDao} style mapping DAO + */ +FeatureTableStyles.prototype.getStyleMappingDao = function() { + return this.featureStyleExtension.getStyleMappingDao(this.tableName); +}; + +/** + * Get a Table Style Mapping DAO + * @return {module:extension/style.StyleMappingDao} table style mapping DAO + */ +FeatureTableStyles.prototype.getTableStyleMappingDao = function() { + return this.featureStyleExtension.getTableStyleMappingDao(this.tableName); +}; + +/** + * Get a Icon Mapping DAO + * @return {module:extension/style.StyleMappingDao} icon mapping DAO + */ +FeatureTableStyles.prototype.getIconMappingDao = function() { + return this.featureStyleExtension.getIconMappingDao(this.tableName); +}; + +/** + * Get a Table Icon Mapping DAO + * @return {module:extension/style.StyleMappingDao} table icon mapping DAO + */ +FeatureTableStyles.prototype.getTableIconMappingDao = function() { + return this.featureStyleExtension.getTableIconMappingDao(this.tableName); +}; + +/** + * Get a style DAO + * @return {module:extension/style.StyleDao} style DAO + */ +FeatureTableStyles.prototype.getStyleDao = function() { + return this.featureStyleExtension.getStyleDao(); +}; + +/** + * Get a icon DAO + * @return {module:extension/style.IconDao} icon DAO + */ +FeatureTableStyles.prototype.getIconDao = function() { + return this.featureStyleExtension.getIconDao(); +}; + +/** + * Get the table feature styles + * @return {module:extension/style.FeatureStyles} table feature styles or null + */ +FeatureTableStyles.prototype.getTableFeatureStyles = function() { + return this.featureStyleExtension.getTableFeatureStyles(this.tableName); +}; + +/** + * Get the table styles + * @return {module:extension/style.Styles} table styles or null + */ +FeatureTableStyles.prototype.getTableStyles = function() { + return this.featureStyleExtension.getTableStyles(this.tableName); +}; + +/** + * Get the cached table styles, querying and caching if needed + * @return {module:extension/style.Styles} cached table styles + */ +FeatureTableStyles.prototype.getCachedTableStyles = function() { + var styles = this.cachedTableFeatureStyles.getStyles(); + if (styles === null) { + styles = this.cachedTableFeatureStyles.getStyles(); + if (styles === null) { + styles = this.getTableStyles(); + if (styles === null) { + styles = new Styles(); + } + this.cachedTableFeatureStyles.setStyles(styles); + } + } + if (styles.isEmpty()) { + styles = null; + } + return styles; +}; + +/** + * Get the table style of the geometry type + * @param {String} geometryType geometry type + * @return {module:extension/style.StyleRow} style row + */ +FeatureTableStyles.prototype.getTableStyle = function(geometryType) { + return this.featureStyleExtension.getTableStyle(this.tableName, geometryType); +}; + +/** + * Get the table style default + * @return {module:extension/style.StyleRow} style row + */ +FeatureTableStyles.prototype.getTableStyleDefault = function() { + return this.featureStyleExtension.getTableStyleDefault(this.tableName); +}; + +/** + * Get the table icons + * @return {module:extension/style.Icons} table icons or null + */ +FeatureTableStyles.prototype.getTableIcons = function() { + return this.featureStyleExtension.getTableIcons(this.tableName); +}; + +/** + * Get the cached table icons, querying and caching if needed + * @return {module:extension/style.Icons} cached table icons + */ +FeatureTableStyles.prototype.getCachedTableIcons = function() { + var icons = this.cachedTableFeatureStyles.getIcons(); + if (icons === null) { + icons = this.cachedTableFeatureStyles.getIcons(); + if (icons === null) { + icons = this.getTableIcons(); + if (icons === null) { + icons = new Icons(); + } + this.cachedTableFeatureStyles.setIcons(icons); + } + } + if (icons.isEmpty()) { + icons = null; + } + return icons; +}; + +/** + * Get the table icon of the geometry type + * @param {String} geometryType geometry type + * @return {module:extension/style.IconRow} icon row + */ +FeatureTableStyles.prototype.getTableIcon = function(geometryType) { + return this.featureStyleExtension.getTableIcon(this.tableName, geometryType); +}; + +/** + * Get the table icon default + * @return {module:extension/style.IconRow} icon row + */ +FeatureTableStyles.prototype.getTableIconDefault = function() { + return this.featureStyleExtension.getTableIconDefault(this.tableName); +}; + +/** + * Get the feature styles for the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.FeatureStyles} feature styles or null + */ +FeatureTableStyles.prototype.getFeatureStylesForFeatureRow = function(featureRow) { + return this.featureStyleExtension.getFeatureStylesForFeatureRow(featureRow); +}; + +/** + * Get the feature styles for the feature id + * + * @param {Number} featureId feature id + * @return {module:extension/style.FeatureStyles} feature styles or null + */ +FeatureTableStyles.prototype.getFeatureStyles = function(featureId) { + return this.featureStyleExtension.getFeatureStyles(this.tableName, featureId); +}; + +/** + * Get the feature style (style and icon) of the feature row, searching in + * order: feature geometry type style or icon, feature default style or + * icon, table geometry type style or icon, table default style or icon + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.FeatureStyle} feature style + */ +FeatureTableStyles.prototype.getFeatureStyleForFeatureRow = function(featureRow) { + return this.getFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); +}; + +/** + * Get the feature style (style and icon) of the feature row with the + * provided geometry type, searching in order: feature geometry type style + * or icon, feature default style or icon, table geometry type style or + * icon, table default style or icon + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @return {module:extension/style.FeatureStyle} feature style + */ +FeatureTableStyles.prototype.getFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { + return this.getFeatureStyle(featureRow.getId(), geometryType); +}; + +/** + * Get the feature style default (style and icon) of the feature row, + * searching in order: feature default style or icon, table default style or + * icon + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.FeatureStyle} feature style + */ +FeatureTableStyles.prototype.getFeatureStyleDefaultForFeatureRow = function(featureRow) { + return this.getFeatureStyle(featureRow.getId(), null); +}; + +/** + * Get the feature style (style and icon) of the feature, searching in + * order: feature geometry type style or icon, feature default style or + * icon, table geometry type style or icon, table default style or icon + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @return {module:extension/style.FeatureStyle} feature style + */ +FeatureTableStyles.prototype.getFeatureStyle = function(featureId, geometryType) { + var featureStyle = null; + var style = this.getStyle(featureId, geometryType); + var icon = this.getIcon(featureId, geometryType); + if (style != null || icon != null) { + featureStyle = new FeatureStyle(style, icon); + } + return featureStyle; +}; + +/** + * Get the feature style (style and icon) of the feature, searching in + * order: feature geometry type style or icon, feature default style or + * icon, table geometry type style or icon, table default style or icon + * + * @param {Number} featureId feature id + * @return {module:extension/style.FeatureStyle} feature style + */ +FeatureTableStyles.prototype.getFeatureStyleDefault = function(featureId) { + return this.getFeatureStyle(featureId, null); +}; + +/** + * Get the styles for the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.Styles} styles or null + */ +FeatureTableStyles.prototype.getStylesForFeatureRow = function(featureRow) { + return this.featureStyleExtension.getStylesForFeatureRow(featureRow); +}; + +/** + * Get the styles for the feature id + * + * @param {Number} featureId feature id + * @return {module:extension/style.Styles} styles or null + */ +FeatureTableStyles.prototype.getStylesForFeatureId = function(featureId) { + return this.featureStyleExtension.getStylesForFeatureId(this.tableName, featureId); +}; + +/** + * Get the style of the feature row, searching in order: feature geometry + * type style, feature default style, table geometry type style, table + * default style + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.StyleRow} style row + */ +FeatureTableStyles.prototype.getStyleForFeatureRow = function(featureRow) { + return this.getStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); +}; + +/** + * Get the style of the feature row with the provided geometry type, + * searching in order: feature geometry type style, feature default style, + * table geometry type style, table default style + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @return {module:extension/style.StyleRow} style row + */ +FeatureTableStyles.prototype.getStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { + return this.getStyle(featureRow.getId(), geometryType); +}; + +/** + * Get the default style of the feature row, searching in order: feature + * default style, table default style + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.StyleRow} style row + */ +FeatureTableStyles.prototype.getStyleDefaultForFeatureRow = function(featureRow) { + return this.getStyle(featureRow.getId(), null); +}; + +/** + * Get the style of the feature, searching in order: feature geometry type + * style, feature default style, table geometry type style, table default + * style + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @return {module:extension/style.StyleRow} style row + */ +FeatureTableStyles.prototype.getStyle = function(featureId, geometryType) { + var styleRow = this.featureStyleExtension.getStyle(this.tableName, featureId, geometryType, false); + if (styleRow === null) { + // Table Style + var styles = this.getCachedTableStyles(); + if (styles != null) { + styleRow = styles.getStyle(geometryType); + } + } + return styleRow; +}; + +/** + * Get the default style of the feature, searching in order: feature default + * style, table default style + * + * @param {Number} featureId feature id + * @return {module:extension/style.StyleRow} style row + */ +FeatureTableStyles.prototype.getStyleDefault = function(featureId) { + return this.getStyle(featureId, null); +}; + +/** + * Get the icons for the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.Icons} icons or null + */ +FeatureTableStyles.prototype.getIconsForFeatureRow = function(featureRow) { + return this.featureStyleExtension.getIconsForFeatureRow(featureRow); +}; + +/** + * Get the icons for the feature id + * + * @param {Number} featureId feature id + * @return {module:extension/style.Icons} icons or null + */ +FeatureTableStyles.prototype.getIconsForFeatureId = function(featureId) { + return this.featureStyleExtension.getIconsForFeatureId(this.tableName, featureId); +}; + +/** + * Get the icon of the feature row, searching in order: feature geometry + * type icon, feature default icon, table geometry type icon, table default + * icon + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.IconRow} icon row + */ +FeatureTableStyles.prototype.getIconForFeatureRow = function(featureRow) { + return this.getIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); +}; + +/** + * Get the icon of the feature row with the provided geometry type, + * searching in order: feature geometry type icon, feature default icon, + * table geometry type icon, table default icon + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @return {module:extension/style.IconRow} icon row + */ +FeatureTableStyles.prototype.getIconForFeatureRowAndGeometryType = function(featureRow, geometryType) { + return this.getIcon(featureRow.getId(), geometryType); +}; + +/** + * Get the default icon of the feature row, searching in order: feature + * default icon, table default icon + * + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.IconRow} icon row + */ +FeatureTableStyles.prototype.getIconDefaultForFeatureRow = function(featureRow) { + return this.getIcon(featureRow.getId(), null); +}; + +/** + * Get the icon of the feature, searching in order: feature geometry type + * icon, feature default icon, table geometry type icon, table default icon + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @return {module:extension/style.IconRow} icon row + */ +FeatureTableStyles.prototype.getIcon = function(featureId, geometryType) { + var iconRow = this.featureStyleExtension.getIcon(this.tableName, featureId, geometryType, false); + if (iconRow === null) { + // Table Icon + var icons = this.getCachedTableIcons(); + if (icons != null) { + iconRow = icons.getIcon(geometryType); + } + } + return iconRow; +}; + +/** + * Get the default icon of the feature, searching in order: feature default + * icon, table default icon + * + * @param {Number} featureId feature id + * @return {module:extension/style.IconRow} icon row + */ +FeatureTableStyles.prototype.getIconDefault = function(featureId) { + return this.getIcon(featureId, null); +}; + +/** + * Set the feature table default feature styles + * + * @param {module:extension/style.FeatureStyles} featureStyles default feature styles + * @return {Promise} + */ +FeatureTableStyles.prototype.setTableFeatureStyles = function(featureStyles) { + return this.featureStyleExtension.setTableFeatureStyles(this.tableName, featureStyles).then(function () { + this.clearCachedTableFeatureStyles(); + }.bind(this)); +}; + +/** + * Set the feature table default styles + * + * @param {module:extension/style.Styles} styles default styles + * @return {Promise} + */ +FeatureTableStyles.prototype.setTableStyles = function(styles) { + return this.featureStyleExtension.setTableStyles(this.tableName, styles).then(function () { + this.clearCachedTableStyles(); + }.bind(this)); +}; + +/** + * Set the feature table style default + * + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureTableStyles.prototype.setTableStyleDefault = function(style) { + return this.featureStyleExtension.setTableStyleDefault(this.tableName, style).then(function () { + this.clearCachedTableStyles(); + }.bind(this)); +}; + +/** + * Set the feature table style for the geometry type + * + * @param {String} geometryType geometry type + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureTableStyles.prototype.setTableStyle = function(geometryType, style) { + return this.featureStyleExtension.setTableStyle(this.tableName, geometryType, style).then(function () { + this.clearCachedTableStyles(); + }.bind(this)); +}; + +/** + * Set the feature table default icons + * + * @param {module:extension/style.Icons} icons default icons + * @return {Promise} + */ +FeatureTableStyles.prototype.setTableIcons = function(icons) { + return this.featureStyleExtension.setTableIcons(this.tableName, icons).then(function () { + this.clearCachedTableIcons(); + }.bind(this)); +}; + +/** + * Set the feature table icon default + * + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureTableStyles.prototype.setTableIconDefault = function(icon) { + return this.featureStyleExtension.setTableIconDefault(this.tableName, icon).then(function () { + this.clearCachedTableIcons(); + }.bind(this)); +}; + +/** + * Set the feature table icon for the geometry type + * + * @param {String} geometryType geometry type + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureTableStyles.prototype.setTableIcon = function(geometryType, icon) { + return this.featureStyleExtension.setTableIcon(this.tableName, geometryType, icon).then(function () { + this.clearCachedTableIcons(); + }.bind(this)); +}; + +/** + * Set the feature styles for the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.FeatureStyles} featureStyles feature styles + * @return {Promise} + */ +FeatureTableStyles.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) { + return this.featureStyleExtension.setFeatureStylesForFeatureRow(featureRow, featureStyles); +}; + +/** + * Set the feature styles for the feature table and feature id + * + * @param {Number} featureId feature id + * @param {module:extension/style.FeatureStyles} featureStyles feature styles + * @return {Promise} + */ +FeatureTableStyles.prototype.setFeatureStyles = function(featureId, featureStyles) { + return this.featureStyleExtension.setFeatureStyles(this.tableName, featureId, featureStyles); +}; + +/** + * Set the feature style (style and icon) of the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureTableStyles.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) { + return this.featureStyleExtension.setFeatureStyleForFeatureRow(featureRow, featureStyle); +}; + +/** + * Set the feature style (style and icon) of the feature row for the + * specified geometry type + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureTableStyles.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) { + return this.featureStyleExtension.setFeatureStyleForFeatureRowAndGeometryType(featureRow, geometryType, featureStyle); +}; + +/** + * Set the feature style default (style and icon) of the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureTableStyles.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) { + return this.featureStyleExtension.setFeatureStyleDefaultForFeatureRow(featureRow, featureStyle); +}; + +/** + * Set the feature style (style and icon) of the feature + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureTableStyles.prototype.setFeatureStyle = function(featureId, geometryType, featureStyle) { + return this.featureStyleExtension.setFeatureStyle(this.tableName, featureId, geometryType, featureStyle); +}; + +/** + * Set the feature style (style and icon) of the feature + * + * @param {Number} featureId feature id + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureTableStyles.prototype.setFeatureStyleDefault = function(featureId, featureStyle) { + return this.featureStyleExtension.setFeatureStyleDefault(this.tableName, featureId, featureStyle); +}; + +/** + * Set the styles for the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.StyleRow} styles styles + * @return {Promise} + */ +FeatureTableStyles.prototype.setStylesForFeatureRow = function(featureRow, styles) { + return this.featureStyleExtension.setStylesForFeatureRow(featureRow, styles); +}; + +/** + * Set the styles for the feature table and feature id + * + * @param {Number} featureId feature id + * @param {module:extension/style.Styles} styles styles + * @return {Promise} + */ +FeatureTableStyles.prototype.setStyles = function(featureId, styles) { + return this.featureStyleExtension.setStyles(this.tableName, featureId, styles); +}; + +/** + * Set the style of the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureTableStyles.prototype.setStyleForFeatureRow = function(featureRow, style) { + return this.featureStyleExtension.setStyleForFeatureRow(featureRow, style); +}; + +/** + * Set the style of the feature row for the specified geometry type + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureTableStyles.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) { + return this.featureStyleExtension.setStyleForFeatureRowAndGeometryType(featureRow, geometryType, style); +}; + +/** + * Set the default style of the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureTableStyles.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) { + return this.featureStyleExtension.setStyleDefaultForFeatureRow(featureRow, style); +}; + +/** + * Set the style of the feature + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureTableStyles.prototype.setStyle = function(featureId, geometryType, style) { + return this.featureStyleExtension.setStyle(this.tableName, featureId, geometryType, style); +}; + +/** + * Set the default style of the feature + * + * @param {Number} featureId feature id + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureTableStyles.prototype.setStyleDefault = function(featureId, style) { + return this.featureStyleExtension.setStyleDefault(this.tableName, featureId, style); +}; + +/** + * Set the icons for the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.Icons} icons icons + * @return {Promise} + */ +FeatureTableStyles.prototype.setIconsForFeatureRow = function(featureRow, icons) { + return this.featureStyleExtension.setIconsForFeatureRow(featureRow, icons); +}; + +/** + * Set the icons for the feature table and feature id + * + * @param {Number} featureId feature id + * @param {module:extension/style.Icons} icons icons + * @return {Promise} + */ +FeatureTableStyles.prototype.setIcons = function(featureId, icons) { + return this.featureStyleExtension.setIcons(this.tableName, featureId, icons); +}; + +/** + * Set the icon of the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureTableStyles.prototype.setIconForFeatureRow = function(featureRow, icon) { + return this.featureStyleExtension.setIconForFeatureRow(featureRow, icon); +}; + +/** + * Set the icon of the feature row for the specified geometry type + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureTableStyles.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) { + return this.featureStyleExtension.setIconForFeatureRowAndGeometryType(featureRow, geometryType, icon); +}; + +/** + * Set the default icon of the feature row + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureTableStyles.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) { + return this.featureStyleExtension.setIconDefaultForFeatureRow(featureRow, icon); +}; + +/** + * Get the icon of the feature, searching in order: feature geometry type + * icon, feature default icon, table geometry type icon, table default icon + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureTableStyles.prototype.setIcon = function(featureId, geometryType, icon) { + return this.featureStyleExtension.setIcon(this.tableName, featureId, geometryType, icon); +}; + +/** + * Set the default icon of the feature + * + * @param {Number} featureId feature id + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureTableStyles.prototype.setIconDefault = function(featureId, icon) { + return this.featureStyleExtension.setIconDefault(this.tableName, featureId, icon); +}; + +/** + * Delete all feature styles including table styles, table icons, style, and + * icons + */ +FeatureTableStyles.prototype.deleteAllFeatureStyles = function() { + this.featureStyleExtension.deleteAllFeatureStyles(this.tableName); + this.clearCachedTableFeatureStyles(); +}; + +/** + * Delete all styles including table styles and feature row styles + */ +FeatureTableStyles.prototype.deleteAllStyles = function() { + this.featureStyleExtension.deleteAllStyles(this.tableName); + this.clearCachedTableStyles(); +}; + +/** + * Delete all icons including table icons and feature row icons + */ +FeatureTableStyles.prototype.deleteAllIcons = function() { + this.featureStyleExtension.deleteAllIcons(this.tableName); + this.clearCachedTableIcons(); +}; + +/** + * Delete the feature table feature styles + */ +FeatureTableStyles.prototype.deleteTableFeatureStyles = function() { + this.featureStyleExtension.deleteTableFeatureStyles(this.tableName); + this.clearCachedTableFeatureStyles(); +}; + +/** + * Delete the feature table styles + */ +FeatureTableStyles.prototype.deleteTableStyles = function() { + this.featureStyleExtension.deleteTableStyles(this.tableName); + this.clearCachedTableStyles(); +}; + +/** + * Delete the feature table default style + */ +FeatureTableStyles.prototype.deleteTableStyleDefault = function() { + this.featureStyleExtension.deleteTableStyleDefault(this.tableName); + this.clearCachedTableStyles(); +}; + +/** + * Delete the feature table style for the geometry type + * + * @param {String} geometryType geometry type + */ +FeatureTableStyles.prototype.deleteTableStyle = function(geometryType) { + this.featureStyleExtension.deleteTableStyle(this.tableName, geometryType); + this.clearCachedTableStyles(); +}; + +/** + * Delete the feature table icons + */ +FeatureTableStyles.prototype.deleteTableIcons = function() { + this.featureStyleExtension.deleteTableIcons(this.tableName); + this.clearCachedTableIcons(); +}; + +/** + * Delete the feature table default icon + */ +FeatureTableStyles.prototype.deleteTableIconDefault = function() { + this.featureStyleExtension.deleteTableIconDefault(this.tableName); + this.clearCachedTableIcons(); +}; + +/** + * Delete the feature table icon for the geometry type + * + * @param {String} geometryType geometry type + */ +FeatureTableStyles.prototype.deleteTableIcon = function(geometryType) { + this.featureStyleExtension.deleteTableIcon(this.tableName, geometryType); + this.clearCachedTableIcons(); +}; + +/** + * Clear the cached table feature styles + */ +FeatureTableStyles.prototype.clearCachedTableFeatureStyles = function() { + this.cachedTableFeatureStyles.setStyles(null); + this.cachedTableFeatureStyles.setIcons(null); +}; + +/** + * Clear the cached table styles + */ +FeatureTableStyles.prototype.clearCachedTableStyles = function() { + this.cachedTableFeatureStyles.setStyles(null); +}; + +/** + * Clear the cached table icons + */ +FeatureTableStyles.prototype.clearCachedTableIcons = function() { + this.cachedTableFeatureStyles.setIcons(null); +}; + +/** + * Delete all feature styles + */ +FeatureTableStyles.prototype.deleteFeatureStyles = function() { + this.featureStyleExtension.deleteFeatureStyles(this.tableName); +}; + +/** + * Delete all styles + */ +FeatureTableStyles.prototype.deleteStyles = function() { + this.featureStyleExtension.deleteStyles(this.tableName); +}; + +/** + * Delete feature row styles + * + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureTableStyles.prototype.deleteStylesForFeatureRow = function(featureRow) { + this.featureStyleExtension.deleteStylesForFeatureRow(featureRow); +}; + +/** + * Delete feature row styles + * + * @param {Number} featureId feature id + */ +FeatureTableStyles.prototype.deleteStylesForFeatureId = function(featureId) { + this.featureStyleExtension.deleteStylesForFeatureId(this.tableName, featureId); +}; + +/** + * Delete the feature row default style + * + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureTableStyles.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) { + this.featureStyleExtension.deleteStyleDefaultForFeatureRow(featureRow); +}; + +/** + * Delete the feature row default style + * + * @param {Number} featureId feature id + */ +FeatureTableStyles.prototype.deleteStyleDefault = function(featureId) { + this.featureStyleExtension.deleteStyleDefault(this.tableName, featureId); +}; + +/** + * Delete the feature row style for the feature row geometry type + * + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureTableStyles.prototype.deleteStyleForFeatureRow = function(featureRow) { + this.featureStyleExtension.deleteStyleForFeatureRow(featureRow); +}; + +/** + * Delete the feature row style for the geometry type + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + */ +FeatureTableStyles.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { + this.featureStyleExtension.deleteStyleForFeatureRowAndGeometryType(featureRow, geometryType); +}; + +/** + * Delete the feature row style for the geometry type + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + */ +FeatureTableStyles.prototype.deleteStyle = function(featureId, geometryType) { + this.featureStyleExtension.deleteStyle(this.tableName, featureId, geometryType); +}; + +/** + * Delete all icons + */ +FeatureTableStyles.prototype.deleteIcons = function() { + this.featureStyleExtension.deleteIcons(this.tableName); +}; + +/** + * Delete feature row icons + * + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureTableStyles.prototype.deleteIconsForFeatureRow = function(featureRow) { + this.featureStyleExtension.deleteIconsForFeatureRow(featureRow); +}; + +/** + * Delete feature row icons + * + * @param {Number} featureId feature id + */ +FeatureTableStyles.prototype.deleteIconsForFeatureId = function(featureId) { + this.featureStyleExtension.deleteIconsForFeatureId(this.tableName, featureId); +}; + +/** + * Delete the feature row default icon + * + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureTableStyles.prototype.deleteIconDefaultForFeatureRow = function(featureRow) { + this.featureStyleExtension.deleteIconDefaultForFeatureRow(featureRow); +}; + +/** + * Delete the feature row default icon + * + * @param {Number} featureId feature id + */ +FeatureTableStyles.prototype.deleteIconDefault = function(featureId) { + this.featureStyleExtension.deleteIconDefault(this.tableName, featureId); +}; + +/** + * Delete the feature row icon for the feature row geometry type + * + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureTableStyles.prototype.deleteIconForFeatureRow = function(featureRow) { + this.featureStyleExtension.deleteIconForFeatureRow(featureRow); +}; + +/** + * Delete the feature row icon for the geometry type + * + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + */ +FeatureTableStyles.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) { + this.featureStyleExtension.deleteIconForFeatureRowAndGeometryType(featureRow, geometryType); +}; + +/** + * Delete the feature row icon for the geometry type + * + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + */ +FeatureTableStyles.prototype.deleteIcon = function(featureId, geometryType) { + this.featureStyleExtension.deleteIcon(this.tableName, featureId, geometryType); +}; + +/** + * Get all the unique style row ids the table maps to + * + * @return {module:extension/style.StyleRow} style row ids + */ +FeatureTableStyles.prototype.getAllTableStyleIds = function() { + return this.featureStyleExtension.getAllTableStyleIds(this.tableName); +}; + +/** + * Get all the unique icon row ids the table maps to + * + * @return {module:extension/style.IconRow} icon row ids + */ +FeatureTableStyles.prototype.getAllTableIconIds = function() { + return this.featureStyleExtension.getAllTableIconIds(this.tableName); +}; + +/** + * Get all the unique style row ids the features map to + * + * @return {module:extension/style.StyleRow} style row ids + */ +FeatureTableStyles.prototype.getAllStyleIds = function() { + return this.featureStyleExtension.getAllStyleIds(this.tableName); +}; + +/** + * Get all the unique icon row ids the features map to + * + * @return {module:extension/style.IconRow} icon row ids + */ +FeatureTableStyles.prototype.getAllIconIds = function() { + return this.featureStyleExtension.getAllIconIds(this.tableName); +}; + +module.exports = FeatureTableStyles; + +},{"./featureStyle":46,"./featureStyles":47,"./icons":53,"./styles":62}],49:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class IconCache + */ + +/** + * Constructor, created with cache size of {@link #IconCache.DEFAULT_CACHE_SIZE} + * @constructor + */ +var IconCache = function(size = null) { + this.cacheSize = size !== null ? size : IconCache.DEFAULT_CACHE_SIZE; + this.iconCache = {}; + this.accessHistory = []; +}; + +/** + * Get the cached image for the icon row or null if not cached + * @param {module:extension/style.IconRow} iconRow icon row + * @return {Image} icon image or null + */ +IconCache.prototype.getIconForIconRow = function(iconRow) { + return this.get(iconRow.getId()); +}; + +/** + * Get the cached image for the icon row id or null if not cached + * @param {Number} iconRowId icon row id + * @return {Image} icon image or null + */ +IconCache.prototype.get = function(iconRowId) { + var image = this.iconCache[iconRowId]; + if (!!image) { + var index = this.accessHistory.indexOf(iconRowId); + if (index > -1) { + this.accessHistory.splice(index, 1); + } + this.accessHistory.push(iconRowId); + } + return image; +}; + +/** + * Cache the icon image for the icon row + * @param {module:extension/style.IconRow} iconRow icon row + * @param {Image} image icon image + * @return {Image} previous cached icon image or null + */ +IconCache.prototype.putIconForIconRow = function(iconRow, image) { + return this.put(iconRow.getId(), image); +}; + +/** + * Cache the icon image for the icon row id + * @param {Number} iconRowId icon row id + * @param {Image} image icon image + * @return {Image} previous cached icon image or null + */ +IconCache.prototype.put = function(iconRowId, image) { + var previous = this.iconCache[iconRowId]; + this.iconCache[iconRowId] = image; + if (!!previous) { + var index = this.accessHistory.indexOf(iconRowId); + if (index > -1) { + this.accessHistory.splice(index, 1); + } + } + this.accessHistory.push(iconRowId); + if (Object.keys(this.iconCache).length > this.cacheSize) { + var iconId = this.accessHistory.shift(); + if (iconId) { + delete this.iconCache[iconId]; + } + } + return previous; +}; + +/** + * Remove the cached image for the icon row + * @param {module:extension/style.IconRow} iconRow icon row + * @return {Image} removed icon image or null + */ +IconCache.prototype.removeIconForIconRow = function(iconRow) { + return this.remove(iconRow.getId()); +}; + +/** + * Remove the cached image for the icon row id + * @param {Number} iconRowId icon row id + * @return {Image} removed icon image or null + */ +IconCache.prototype.remove = function(iconRowId) { + var removed = this.iconCache[iconRowId]; + delete this.iconCache[iconRowId]; + if (!!removed) { + var index = this.accessHistory.indexOf(iconRowId); + if (index > -1) { + this.accessHistory.splice(index, 1); + } } + return removed; +}; + +/** + * Clear the cache + */ +IconCache.prototype.clear = function() { + this.iconCache = {}; + this.accessHistory = []; +}; + +/** + * Resize the cache + * @param {Number} maxSize max size + */ +IconCache.prototype.resize = function(maxSize) { + this.cacheSize = maxSize; + var keys = Object.keys(this.iconCache); + if (keys.length > maxSize) { + var numberToRemove = keys.length - maxSize; + for (var i = 0; i < numberToRemove; i++) { + delete this.iconCache[this.accessHistory.shift()]; + } + } +}; + +/** + * Create or retrieve from cache an icon image for the icon row + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} icon image + */ +IconCache.prototype.createIcon = function(icon) { + return this.createAndCacheIcon(icon, this); +}; + +/** + * Create or retrieve from cache an icon image for the icon row + * @param {module:extension/style.IconRow} icon icon row + * @param {Number} scale scale factor + * @return {Promise} icon image + */ +IconCache.prototype.createScaledIcon = function(icon, scale) { + return this.createAndCacheScaledIcon(icon, scale, this); +}; + +/** + * Create an icon image for the icon row without caching + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} icon image + */ +IconCache.prototype.createIconNoCache = function(icon) { + return this.createScaledIconNoCache(icon, 1.0); +}; + +/** + * Create an icon image for the icon row without caching + * @param icon icon row + * @param scale scale factor + * @return {Promise} icon image + */ +IconCache.prototype.createScaledIconNoCache = function(icon, scale) { + return this.createAndCacheScaledIcon(icon, scale, null); +}; + +/** + * Create or retrieve from cache an icon image for the icon row + * @param {module:extension/style.IconRow} icon icon row + * @param {module:extension/style.IconCache} iconCache icon cache + * @return {Promise} icon image + */ +IconCache.prototype.createAndCacheIcon = function(icon, iconCache) { + return this.createAndCacheScaledIcon(icon, 1.0, iconCache); +}; + +/** + * Create or retrieve from cache an icon image for the icon row + * @param {module:extension/style.IconRow} icon icon row + * @param {Number} scale scale factor + * @param {module:extension/style.IconCache} iconCache icon cache + * @return {Promise} icon image + */ +IconCache.prototype.createAndCacheScaledIcon = async function(icon, scale, iconCache) { + var iconImage = null; + if (icon != null) { + var iconId = icon.getId(); + if (iconCache !== null) { + iconImage = iconCache.get(iconId); + } + var iconScaledWidth = Math.round(icon.getWidth() * scale); + var iconScaledHeight = Math.round(icon.getHeight() * scale); + if (!iconImage || iconImage.width !== iconScaledWidth || iconImage.height !== iconScaledHeight) { + iconImage = await icon.getScaledDataImage(scale); + } + if (iconCache !== null) { + iconCache.putIconForIconRow(icon, iconImage); + } + } + return iconImage; +}; + +IconCache.DEFAULT_CACHE_SIZE = 100; + +module.exports = IconCache; + +},{}],50:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class IconDao + */ + +var IconRow = require('./iconRow') + , MediaDao = require('../relatedTables/mediaDao'); + +var util = require('util'); + +/** + * Icon DAO for reading user icon data tables + * @extends {module:user/userDao~MediaDao} + * @param {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection + * @param {string} table table name + * @constructor + */ +var IconDao = function(geoPackage, table) { + MediaDao.call(this, geoPackage, table); + this.table = table; +}; + +util.inherits(IconDao, MediaDao); + +/** + * Create a new icon row + * @return {module:extension/style.IconRow} + */ +IconDao.prototype.newRow = function() { + return new IconRow(this.table); +}; + +/** + * Create a icon row with the column types and values + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {module:extension/style.IconRow} icon row + */ +IconDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new IconRow(this.table, columnTypes, values); +}; + +module.exports = IconDao; + +},{"../relatedTables/mediaDao":33,"./iconRow":51,"util":343}],51:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class IconRow + */ + +var MediaRow = require('../relatedTables/mediaRow'); +var util = require('util'); +var ImageUtils = require('../../tiles/imageUtils'); + +/** + * Icon Row + * @extends {module:extension/relatedTables~MediaRow} + * @param {module:extension/style.IconTable} iconTable icon table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @constructor + */ +var IconRow = function(iconTable, columnTypes, values) { + MediaRow.call(this, iconTable, columnTypes, values); + this.iconTable = iconTable; +}; + +util.inherits(IconRow, MediaRow); + +/** + * Get the name column + * @return {module:user/userColumn~UserColumn} + */ +IconRow.prototype.getNameColumn = function() { + return this.iconTable.getNameColumn(); +}; + +/** + * Gets the name + * @return {String} + */ +IconRow.prototype.getName = function() { + return this.getValueWithColumnName(this.getNameColumn().name); +}; + +/** + * Sets the name for the row + * @param {String} name name + */ +IconRow.prototype.setName = function(name) { + this.setValueWithColumnName(this.getNameColumn().name, name); +}; + +/** + * Get the description column + * @return {module:user/userColumn~UserColumn} + */ +IconRow.prototype.getDescriptionColumn = function() { + return this.iconTable.getDescriptionColumn(); +}; + +/** + * Gets the description + * @return {String} + */ +IconRow.prototype.getDescription = function() { + return this.getValueWithColumnName(this.getDescriptionColumn().name); +}; + +/** + * Sets the description for the row + * @param {string} description description + */ +IconRow.prototype.setDescription = function(description) { + this.setValueWithColumnName(this.getDescriptionColumn().name, description); +}; + +/** + * Get the width column + * @return {module:user/userColumn~UserColumn} + */ +IconRow.prototype.getWidthColumn = function() { + return this.iconTable.getWidthColumn(); +}; + +/** + * Gets the width + * @return {Number} + */ +IconRow.prototype.getWidth = function() { + return this.getValueWithColumnName(this.getWidthColumn().name); +}; + +/** + * Sets the width for the row + * @param {Number} width width + */ +IconRow.prototype.setWidth = function(width) { + this.setValueWithColumnName(this.getWidthColumn().name, width); +}; + +/** + * Get the width or derived width from the icon data and scaled as needed + * for the height + * + * @return {Promise} derived width + */ +IconRow.prototype.getDerivedWidth = function() { + var width = this.getWidth(); + if (width === undefined || width === null) { + width = this.getDerivedDimensions()[0]; + } + return width; +}; + +/** + * Get the height column + * @return {module:user/userColumn~UserColumn} + */ +IconRow.prototype.getHeightColumn = function() { + return this.iconTable.getHeightColumn(); +}; + +/** + * Gets the height + * @return {Number} + */ +IconRow.prototype.getHeight = function() { + return this.getValueWithColumnName(this.getHeightColumn().name); +}; + +/** + * Sets the height for the row + * @param {Number} height height + */ +IconRow.prototype.setHeight = function(height) { + this.setValueWithColumnName(this.getHeightColumn().name, height); +}; + +/** + * Get the height or derived height from the icon data and scaled as needed + * for the width + * + * @return {Promise} derived height + */ +IconRow.prototype.getDerivedHeight = function() { + var height = this.getHeight(); + if (height === undefined || height === null) { + height = this.getDerivedDimensions()[1]; + } + return height; +}; + +/** + * Get the derived width and height from the values and icon data, scaled as needed + * @return {Number[]} derived dimensions array with two values, width at index 0, height at index 1 + */ +IconRow.prototype.getDerivedDimensions = function() { + var width = this.getWidth(); + var height = this.getHeight(); + if (width === undefined || width === null || height === undefined || height === null) { + var dataWidth; + var dataHeight; + var imageSize = ImageUtils.getImageSize(this.getData()); + dataWidth = imageSize.width; + dataHeight = imageSize.height; + if (width === undefined || width === null) { + width = dataWidth; + if (height !== undefined && height !== null) { + width *= (height / dataHeight); + } + } + if (height === undefined || height === null) { + height = dataHeight; + if (width !== undefined && width !== null) { + height *= (width / dataWidth); + } + } + } + return [width, height]; +}; + +/** + * Get the anchor_u column + * @return {module:user/userColumn~UserColumn} + */ +IconRow.prototype.getAnchorUColumn = function() { + return this.iconTable.getAnchorUColumn(); +}; + +/** + * Gets the anchor_u + * @return {Number} + */ +IconRow.prototype.getAnchorU = function() { + return this.getValueWithColumnName(this.getAnchorUColumn().name); +}; + +/** + * Sets the anchor_u for the row + * @param {Number} anchor_u anchor_u + */ +IconRow.prototype.setAnchorU = function(anchor_u) { + this.validateAnchor(anchor_u); + this.setValueWithColumnName(this.getAnchorUColumn().name, anchor_u); +}; + +/** + * Get the anchor u value or the default value of 0.5 + * @return {Number} anchor u value + */ +IconRow.prototype.getAnchorUOrDefault = function() { + var anchorU = this.getAnchorU(); + if (anchorU == null) { + anchorU = 0.5; + } + return anchorU; +}; + +/** + * Get the anchor_v column + * @return {module:user/userColumn~UserColumn} + */ +IconRow.prototype.getAnchorVColumn = function() { + return this.iconTable.getAnchorVColumn(); +}; + +/** + * Gets the anchor_v + * @return {Number} + */ +IconRow.prototype.getAnchorV = function() { + return this.getValueWithColumnName(this.getAnchorVColumn().name); +}; + +/** + * Sets the anchor_v for the row + * @param {Number} anchor_v anchor_v + */ +IconRow.prototype.setAnchorV = function(anchor_v) { + this.validateAnchor(anchor_v); + this.setValueWithColumnName(this.getAnchorVColumn().name, anchor_v); +}; + +/** + * Get the anchor v value or the default value of 1.0 + * @return {Number} anchor v value + */ +IconRow.prototype.getAnchorVOrDefault = function() { + var anchorV = this.getAnchorV(); + if (anchorV == null) { + anchorV = 1.0; + } + return anchorV; +}; + +/** + * Validate the anchor value + * @param {Number} anchor anchor + */ +IconRow.prototype.validateAnchor = function(anchor) { + if (anchor != null && (anchor < 0.0 || anchor > 1.0)) { + throw new Error("Anchor must be set inclusively between 0.0 and 1.0, invalid value: " + anchor); + } +}; + +module.exports = IconRow; + +},{"../../tiles/imageUtils":89,"../relatedTables/mediaRow":34,"util":343}],52:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class IconTable + */ + +var MediaTable = require('../relatedTables/mediaTable') + , UserCustomColumn = require('../../user/custom/userCustomColumn') + , DataTypes = require('../../db/dataTypes'); + +var util = require('util'); + +/** + * Icon Requirements Class Media Table + * @class + * @extends {module:extension/relatedTables~MediaTable} + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns media columns + * @param {string[]} requiredColumns required column names + */ +var IconTable = function(tableName, columns, requiredColumns) { + MediaTable.call(this, tableName, columns, requiredColumns); +}; + +util.inherits(IconTable, MediaTable); + +/** + * Create a media table with a minimum required columns followed by the additional columns + * @return {module:extension/relatedTables~MediaTable} + */ +IconTable.create = function() { + return new IconTable(IconTable.TABLE_NAME, IconTable.createColumns(), IconTable.requiredColumns()); +}; + +IconTable.createRequiredColumns = function() { + return MediaTable.createRequiredColumns(); +}; + +/** + * Get the required columns + * @return {string[]} + */ +IconTable.requiredColumns = function() { + return MediaTable.requiredColumns(); +}; + +/** + * Create the columns + * @return {module:user/userColumn~UserColumn[]} + */ +IconTable.createColumns = function() { + var columns = IconTable.createRequiredColumns(); + var index = columns.length; + columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_HEIGHT, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_ANCHOR_U, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index, IconTable.COLUMN_ANCHOR_V, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); + return columns; +}; + +/** + * Get the name column index + * @return int + */ +IconTable.prototype.getNameColumnIndex = function() { + return this.getColumnIndex(IconTable.COLUMN_NAME); +}; + +/** + * Get the name column + * @return {module:user/userColumn~UserColumn} + */ +IconTable.prototype.getNameColumn = function() { + return this.getColumnWithColumnName(IconTable.COLUMN_NAME); +}; + +/** + * Get the description column index + * @return int + */ +IconTable.prototype.getDescriptionColumnIndex = function() { + return this.getColumnIndex(IconTable.COLUMN_DESCRIPTION); +}; + +/** + * Get the description column + * @return {module:user/userColumn~UserColumn} + */ +IconTable.prototype.getDescriptionColumn = function() { + return this.getColumnWithColumnName(IconTable.COLUMN_DESCRIPTION); +}; + +/** + * Get the width column index + * @return int + */ +IconTable.prototype.getWidthColumnIndex = function() { + return this.getColumnIndex(IconTable.COLUMN_WIDTH); +}; + +/** + * Get the width column + * @return {module:user/userColumn~UserColumn} + */ +IconTable.prototype.getWidthColumn = function() { + return this.getColumnWithColumnName(IconTable.COLUMN_WIDTH); +}; + +/** + * Get the height column index + * @return int + */ +IconTable.prototype.getHeightColumnIndex = function() { + return this.getColumnIndex(IconTable.COLUMN_HEIGHT); +}; + +/** + * Get the height column + * @return {module:user/userColumn~UserColumn} + */ +IconTable.prototype.getHeightColumn = function() { + return this.getColumnWithColumnName(IconTable.COLUMN_HEIGHT); +}; + +/** + * Get the anchor_u column index + * @return int + */ +IconTable.prototype.getAnchorUColumnIndex = function() { + return this.getColumnIndex(IconTable.COLUMN_ANCHOR_U); +}; + +/** + * Get the anchor_u column + * @return {module:user/userColumn~UserColumn} + */ +IconTable.prototype.getAnchorUColumn = function() { + return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_U); +}; + +/** + * Get the anchor_v column index + * @return int + */ +IconTable.prototype.getAnchorVColumnIndex = function() { + return this.getColumnIndex(IconTable.COLUMN_ANCHOR_V); +}; + +/** + * Get the anchor_v column + * @return {module:user/userColumn~UserColumn} + */ +IconTable.prototype.getAnchorVColumn = function() { + return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_V); +}; + +IconTable.TABLE_NAME = 'nga_icon'; +IconTable.COLUMN_NAME = 'name'; +IconTable.COLUMN_DESCRIPTION = 'description'; +IconTable.COLUMN_WIDTH = 'width'; +IconTable.COLUMN_HEIGHT = 'height'; +IconTable.COLUMN_ANCHOR_U = 'anchor_u'; +IconTable.COLUMN_ANCHOR_V = 'anchor_v'; +IconTable.prototype.TABLE_TYPE = 'media'; + +module.exports = IconTable; + +},{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../relatedTables/mediaTable":35,"util":343}],53:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class Icons + */ + +/** + * Icons constructor + * @constructor + */ +var Icons = function() { + this.defaultIcon = null; + this.icons = {}; +}; + +Icons.prototype.setDefault = function(iconRow) { + this.defaultIcon = iconRow; +}; + +Icons.prototype.getDefault = function() { + return this.defaultIcon; +}; + +Icons.prototype.setIcon = function(iconRow, geometryType) { + if (geometryType != null) { + if (iconRow != null) { + this.icons[geometryType] = iconRow; + } else { + delete this.icons[geometryType]; + } + } else { + this.setDefault(iconRow); + } +}; + +Icons.prototype.getIcon = function(geometryType) { + var iconRow = null; + if (geometryType != null) { + iconRow = this.icons[geometryType]; + } + if (iconRow === null || geometryType === null) { + iconRow = this.getDefault(); + } + return iconRow; +}; + +Icons.prototype.isEmpty = function() { + return Object.keys(this.icons).length === 0 && this.defaultIcon === null; +}; + +module.exports = Icons; + +},{}],54:[function(require,module,exports){ +/** + * @module extension/style + */ + +var BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension + , ContentsIdDao = require('../contents/contentsIdDao') + , IconTable = require('./iconTable') + , IconDao = require('./iconDao') + , StyleTable = require('./styleTable') + , StyleDao = require('./styleDao') + , StyleMappingTable = require('./styleMappingTable') + , StyleMappingDao = require('./styleMappingDao') + , UserMappingTable = require('../relatedTables/userMappingTable') + , FeatureStyles = require('./featureStyles') + , FeatureStyle = require('./featureStyle') + , Styles = require('./styles') + , Icons = require('./icons') + , StyleTableReader = require('./styleTableReader') + , UserTableReader = require('../../user/userTableReader'); + +var util = require('util'); + +/** + * Style extension + * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object + * @extends {module:extension/baseExtension~BaseExtension} + * @constructor + */ +var FeatureStyleExtension = function(geoPackage) { + BaseExtension.call(this, geoPackage); + this.relatedTablesExtension = geoPackage.getRelatedTablesExtension(); + this.contentsIdExtension = geoPackage.getContentsIdExtension(); +}; + +util.inherits(FeatureStyleExtension, BaseExtension); + +/** + * Get or create the metadata extension + * @param {module:features/user/featureTable|String} featureTable, defaults to null + * @return {Promise} + */ +FeatureStyleExtension.prototype.getOrCreateExtension = function(featureTable) { + return this.getOrCreate(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null, FeatureStyleExtension.EXTENSION_DEFINITION, Extension.READ_WRITE); +}; + +/** + * Determine if the GeoPackage has the extension or has the extension for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @returns {Boolean} + */ +FeatureStyleExtension.prototype.has = function (featureTable) { + return this.hasExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null); +}; + +/** + * Gets featureTables + * @returns {String[]} + */ +FeatureStyleExtension.prototype.getTables = function() { + var tables = []; + if (this.extensionsDao.isTableExists()) { + var extensions = this.extensionsDao.queryAllByExtension(FeatureStyleExtension.EXTENSION_NAME); + for (var i = 0; i < extensions.length; i++) { + tables.push(extensions[i].table_name); + } + } + return tables; +}; + +/** + * Get the related tables extension + * @returns {module:extension/relatedTables~RelatedTablesExtension} + */ +FeatureStyleExtension.prototype.getRelatedTables = function () { + return this.relatedTablesExtension; +}; + +/** + * Get the contentsId extension + * @returns {module:extension/contents~ContentsIdExtension} + */ +FeatureStyleExtension.prototype.getContentsId = function () { + return this.contentsIdExtension; +}; + +/** + * Create style, icon, table style, and table icon relationships for the + * feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {Promise} + */ +FeatureStyleExtension.prototype.createRelationships = function(featureTable) { + var promises = []; + promises.push(this.createStyleRelationship(featureTable)); + promises.push(this.createTableStyleRelationship(featureTable)); + promises.push(this.createIconRelationship(featureTable)); + promises.push(this.createTableIconRelationship(featureTable)); + return Promise.all(promises); +}; + +/** + * Check if feature table has a style, icon, table style, or table icon + * relationships + * @param {module:features/user/featureTable|String} featureTable feature table + * @returns {boolean} + */ +FeatureStyleExtension.prototype.hasRelationship = function(featureTable) { + return this.hasStyleRelationship(featureTable) + || this.hasTableStyleRelationship(featureTable) + || this.hasIconRelationship(featureTable) + || this.hasTableIconRelationship(featureTable); +}; + +/** + * Create a style relationship for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {Promise} + */ +FeatureStyleExtension.prototype.createStyleRelationship = function(featureTable) { + return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME); +}; + +/** + * Determine if a style relationship exists for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @returns {boolean} + */ +FeatureStyleExtension.prototype.hasStyleRelationship = function(featureTable) { + return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME); +}; + +/** + * Create a feature table style relationship + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {Promise} + */ +FeatureStyleExtension.prototype.createTableStyleRelationship = function(featureTable) { + return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME); +}; + +/** + * Determine if a feature table style relationship exists + * @param {module:features/user/featureTable|String} featureTable feature table + * @returns {boolean} true if relationship exists + */ +FeatureStyleExtension.prototype.hasTableStyleRelationship = function(featureTable) { + return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME); +}; + +/** + * Create an icon relationship for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {Promise} + */ +FeatureStyleExtension.prototype.createIconRelationship = function(featureTable) { + return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME); +}; + +/** + * Determine if an icon relationship exists for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @returns {boolean} true if relationship exists + */ +FeatureStyleExtension.prototype.hasIconRelationship = function(featureTable) { + return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME); +}; + +/** + * Create a feature table icon relationship + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {Promise} + */ +FeatureStyleExtension.prototype.createTableIconRelationship = function(featureTable) { + return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME); +}; + +/** + * Determine if a feature table icon relationship exists + * @param {module:features/user/featureTable|String} featureTable feature table + * @returns {Boolean} true if relationship exists + */ +FeatureStyleExtension.prototype.hasTableIconRelationship = function(featureTable) { + return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME); +}; + +/** + * Get the mapping table name + * @param tablePrefix table name prefix + * @param {module:features/user/featureTable|String} featureTable feature table name + * @returns {String} mapping table name + */ +FeatureStyleExtension.prototype.getMappingTableName = function(tablePrefix, featureTable) { + return tablePrefix + this.getFeatureTableName(featureTable); +}; + +/** + * Check if the style extension relationship between a feature table and + * style extension table exists + * @param {String} mappingTableName mapping table name + * @param {String} baseTable base table name + * @param {String} relatedTable related table name + * @returns {boolean} true if relationship exists + */ +FeatureStyleExtension.prototype._hasStyleRelationship = function(mappingTableName, baseTable, relatedTable) { + return this.relatedTablesExtension.hasRelations(baseTable, relatedTable, mappingTableName).length !== 0; +}; + +/** + * Create a style extension relationship between a feature table and style + * extension table + * @param {String} mappingTableName mapping table name + * @param {String} featureTable feature table + * @param {String} baseTable base table name + * @param {String} relatedTable related table name + * @return {Promise} + * @private + */ +FeatureStyleExtension.prototype._createStyleRelationship = function(mappingTableName, featureTable, baseTable, relatedTable) { + if (!this._hasStyleRelationship(mappingTableName, baseTable, relatedTable)) { + // Create the extension + return this.getOrCreateExtension(featureTable).then(function () { + if (baseTable === ContentsIdDao.TABLE_NAME && !this.contentsIdExtension.has()) { + return this.contentsIdExtension.getOrCreateExtension().then(function () { + return this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable); + }.bind(this)); + } else { + return this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable); + } + }.bind(this)); + } else { + return Promise.resolve(); + } +}; + +/** + * Private function to aid in creation of the a style extension relationship between a feature table and style extension table + * @param {String} mappingTableName + * @param {String} baseTable + * @param {String} relatedTable + * @return {Promise} + * @private + */ +FeatureStyleExtension.prototype._handleCreateStyleRelationship = function(mappingTableName, baseTable, relatedTable) { + if (relatedTable === StyleTable.TABLE_NAME) { + return this.relatedTablesExtension.addAttributesRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder() + .setBaseTableName(baseTable) + .setUserMappingTable(StyleMappingTable.create(mappingTableName)) + .setRelatedTable(StyleTable.create())); + } else { + return this.relatedTablesExtension.addMediaRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder() + .setBaseTableName(baseTable) + .setUserMappingTable(StyleMappingTable.create(mappingTableName)) + .setRelatedTable(IconTable.create())); + } +}; + +/** + * Delete the style and icon table and row relationships for all feature + * tables + */ +FeatureStyleExtension.prototype.deleteAllRelationships = function() { + var tables = this.getTables(); + for (var i = 0; i < tables.length; i++) { + this.deleteRelationships(tables[i]); + } +}; + +/** + * Delete the style and icon table and row relationships for the feature + * table + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteRelationships = function(featureTable) { + this.deleteStyleRelationship(featureTable); + this.deleteTableStyleRelationship(featureTable); + this.deleteIconRelationship(featureTable); + this.deleteTableIconRelationship(featureTable); +}; + +/** + * Delete a style relationship for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteStyleRelationship = function(featureTable) { + this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), featureTable); +}; + +/** + * Delete a table style relationship for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableStyleRelationship = function(featureTable) { + this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), featureTable); +}; + +/** + * Delete a icon relationship for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteIconRelationship = function(featureTable) { + this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), featureTable); +}; + +/** + * Delete a table icon relationship for the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableIconRelationship = function(featureTable) { + this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), featureTable); +}; + +/** + * Delete a style extension feature table relationship and the mapping table + * @param {String} mappingTableName + * @param {module:features/user/featureTable|String} featureTable feature table + * @private + */ +FeatureStyleExtension.prototype._deleteStyleRelationship = function(mappingTableName, featureTable) { + var relationships = this.geoPackage.getExtendedRelationDao().queryByMappingTableName(mappingTableName); + for (var i = 0; i < relationships.length; i++) { + this.relatedTablesExtension.removeRelationship(relationships[i]); + } + if (!this.hasRelationship(featureTable)) { + if (this.extensionsDao.isTableExists()) { + this.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable)); + } + } +}; + +/** + * Get a Style Mapping DAO + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.StyleMappingDao} style mapping DAO + */ +FeatureStyleExtension.prototype.getStyleMappingDao = function (featureTable) { + return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable); +}; + +/** + * Get a Table Style Mapping DAO + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.StyleMappingDao} table style mapping DAO + */ +FeatureStyleExtension.prototype.getTableStyleMappingDao = function (featureTable) { + return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable); +}; + +/** + * Get a Icon Mapping DAO + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.StyleMappingDao} icon mapping DAO + */ +FeatureStyleExtension.prototype.getIconMappingDao = function (featureTable) { + return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable); +}; + +/** + * Get a Table Icon Mapping DAO + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.StyleMappingDao} table icon mapping DAO + */ +FeatureStyleExtension.prototype.getTableIconMappingDao = function (featureTable) { + return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable); +}; + +/** + * Get a Style Mapping DAO from a table name + * @param {String} tablePrefix table name prefix + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.StyleMappingDao} style mapping dao + * @private + */ +FeatureStyleExtension.prototype._getMappingDao = function (tablePrefix, featureTable) { + var featureTableName = this.getFeatureTableName(featureTable); + var tableName = tablePrefix + featureTableName; + var dao = null; + if (this.geoPackage.isTable(tableName)) { + dao = new StyleMappingDao(this.relatedTablesExtension.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage); + } + return dao; +}; + +/** + * Get a style DAO + * @return {module:extension/style.StyleDao} style DAO + */ +FeatureStyleExtension.prototype.getStyleDao = function () { + var styleDao = null; + if (this.geoPackage.isTable(StyleTable.TABLE_NAME)) { + var dao = this.geoPackage.getContentsDao(); + var contents = dao.queryForId(StyleTable.TABLE_NAME); + if (contents) { + var reader = new StyleTableReader(contents.table_name); + var table = reader.readTable(this.geoPackage.connection); + this.relatedTablesExtension.setContents(table); + styleDao = new StyleDao(this.geoPackage, table); + } + } + return styleDao; +}; + +/** + * Get a icon DAO + * @return {module:extension/style.IconDao} + */ +FeatureStyleExtension.prototype.getIconDao = function() { + var iconDao = null; + if (this.geoPackage.isTable(IconTable.TABLE_NAME)) { + var reader = new UserTableReader(IconTable.TABLE_NAME, IconTable.requiredColumns()); + var userTable = reader.readTable(this.geoPackage.getDatabase()); + var table = new IconTable(userTable.table_name, userTable.columns, IconTable.requiredColumns()); + table.setContents(this.geoPackage.getContentsDao().queryForId(IconTable.TABLE_NAME)); + iconDao = new IconDao(this.geoPackage, table); + } + return iconDao; +}; + +/** + * Get the feature table default feature styles + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.FeatureStyles} table feature styles or null + */ +FeatureStyleExtension.prototype.getTableFeatureStyles = function(featureTable) { + var featureStyles = null; + var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); + if (id !== null) { + var styles = this.getTableStyles(featureTable); + var icons = this.getTableIcons(featureTable); + if (styles !== null || icons !== null) { + featureStyles = new FeatureStyles(styles, icons); + } + } + return featureStyles; +}; + +/** + * Get the default style of the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.StyleRow} style row + */ +FeatureStyleExtension.prototype.getTableStyleDefault = function(featureTable) { + return this.getTableStyle(featureTable, null); +}; + +/** + * Get the style of the feature table and geometry type + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {String} geometryType geometry type + * @return {module:extension/style.StyleRow} style row + */ +FeatureStyleExtension.prototype.getTableStyle = function(featureTable, geometryType) { + var style = null; + var styles = this.getTableStyles(featureTable); + if (styles !== null) { + if (geometryType === null) { + style = styles.getDefault(); + } else { + style = styles.getStyle(geometryType); + } + } + return style; +}; + +/** + * Get the feature table default styles + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.Styles} table styles or null + */ +FeatureStyleExtension.prototype.getTableStyles = function(featureTable) { + var styles = null; + var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); + if (id !== null) { + styles = this.getStyles(id, this.getTableStyleMappingDao(featureTable)); + } + return styles; +}; + +/** + * Get the default icon of the feature table + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.IconRow} icon row + */ +FeatureStyleExtension.prototype.getTableIconDefault = function(featureTable) { + return this.getTableIcon(featureTable, null); +}; + +/** + * Get the icon of the feature table and geometry type + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {String} geometryType geometry type + * @return {module:extension/style.IconRow} icon row + */ +FeatureStyleExtension.prototype.getTableIcon = function(featureTable, geometryType) { + var icon = null; + var icons = this.getTableIcons(featureTable); + if (icons !== null) { + if (geometryType === null) { + icon = icons.getDefault(); + } else { + icon = icons.getIcon(geometryType); + } + } + return icon; +}; + +/** + * Get the feature table default icons + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {module:extension/style.Icons} table icons or null + */ +FeatureStyleExtension.prototype.getTableIcons = function(featureTable) { + var icons = null; + var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); + if (id !== null) { + icons = this.getIcons(id, this.getTableIconMappingDao(featureTable)); + } + return icons; +}; + +/** + * Gets Icons for featureId and mappingDao + * @param {Number} featureId + * @param mappingDao + * @returns {module:extension/style.Icons} + * @private + */ +FeatureStyleExtension.prototype.getIcons = function(featureId, mappingDao) { + var icons = new Icons(); + if (mappingDao !== null) { + var iconDao = this.getIconDao(); + var styleMappingRows = mappingDao.queryByBaseId(featureId); + for (var i = 0; i < styleMappingRows.length; i++) { + var styleMappingRow = mappingDao.createObject(styleMappingRows[i]); + var iconRow = iconDao.queryForId(styleMappingRow.getRelatedId()); + if (styleMappingRow.getGeometryTypeName() === null) { + icons.setDefault(iconRow); + } else { + icons.setIcon(iconRow, styleMappingRow.getGeometryTypeName()); + } + } + } + if (icons.isEmpty()) { + icons = null; + } + return icons; +}; + +/** + * Gets Styles for featureId and mappingDao + * @param {Number} featureId + * @param {module:extension/style.StyleMappingDao} mappingDao + * @returns {module:extension/style.Styles} + */ +FeatureStyleExtension.prototype.getStyles = function(featureId, mappingDao) { + var styles = new Styles(); + if (mappingDao !== null) { + var styleDao = this.getStyleDao(); + var styleMappingRows = mappingDao.queryByBaseId(featureId); + for (var i = 0; i < styleMappingRows.length; i++) { + var styleMappingRow = mappingDao.createObject(styleMappingRows[i]); + var styleRow = styleDao.queryForId(styleMappingRow.getRelatedId()); + if (styleMappingRow.getGeometryTypeName() === null) { + styles.setDefault(styleRow); + } else { + styles.setStyle(styleRow, styleMappingRow.getGeometryTypeName()); + } + } + } + if (styles.isEmpty()) { + styles = null; + } + return styles; +}; + +/** + * Get the feature styles for the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.FeatureStyles} feature styles or null + */ +FeatureStyleExtension.prototype.getFeatureStylesForFeatureRow = function(featureRow) { + return this.getFeatureStyles(featureRow.featureTable, featureRow.getId()); +}; +/** + * Get the feature styles for the feature row + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @return {module:extension/style.FeatureStyles} feature styles or null + */ +FeatureStyleExtension.prototype.getFeatureStyles = function(featureTable, featureId) { + var styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable)); + var icons = this.getIcons(featureId, this.getIconMappingDao(featureTable)); + var featureStyles = null; + if (styles !== null || icons !== null) { + featureStyles = new FeatureStyles(styles, icons); + } + return featureStyles; +}; + +/** + * Get the styles for the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.Styles} styles or null + */ +FeatureStyleExtension.prototype.getStylesForFeatureRow = function(featureRow) { + return this.getStyles(featureRow.getId(), this.getStyleMappingDao(featureRow.featureTable.table_name)); +}; +/** + * Get the styles for the feature id + * @param {String} tableName table name + * @param {Number} featureId feature id + * @return {module:extension/style.Styles} styles or null + */ +FeatureStyleExtension.prototype.getStylesForFeatureId = function(tableName, featureId) { + return this.getStyles(featureId, this.getStyleMappingDao(tableName)); +}; + +/** + * Get the icons for the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.Icons} icons or null + */ +FeatureStyleExtension.prototype.getIconsForFeatureRow = function(featureRow) { + return this.getIcons(featureRow.getId(), this.getIconMappingDao(featureRow.featureTable.table_name)); +}; + +/** + * Get the icons for the feature id + * @param {String} tableName table name + * @param {Number} featureId feature id + * @return {module:extension/style.Icons} icons or null + */ +FeatureStyleExtension.prototype.getIconsForFeatureId = function(tableName, featureId) { + return this.getIcons(featureId, this.getIconMappingDao(tableName)); +}; + +/** + * Get the feature style (style and icon) of the feature row, searching in + * order: feature geometry type style or icon, feature default style or + * icon, table geometry type style or icon, table default style or icon + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.FeatureStyle} feature style + */ +FeatureStyleExtension.prototype.getFeatureStyleForFeatureRow = function(featureRow) { + return new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true)); +}; + +/** + * Get the feature style (style and icon) of the feature, searching in + * order: feature geometry type style or icon, feature default style or + * icon, table geometry type style or icon, table default style or icon + * @param {module:features/user/featureRow} featureRow feature row + * @return {module:extension/style.FeatureStyle} feature style + */ +FeatureStyleExtension.prototype.getFeatureStyleDefault = function(featureRow) { + return new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), null, true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), null, true)); +}; + +/** + * Get the icon of the feature, searching in order: feature geometry type + * icon, feature default icon, when tableIcon enabled continue searching: + * table geometry type icon, table default icon + * @param {module:features/user/featureTable|String} featureTable + * @param {Number} featureId + * @param {String} geometryType + * @param {Boolean} tableIcon + * @returns {module:extension/style.IconRow} + * @private + */ +FeatureStyleExtension.prototype.getIcon = function(featureTable, featureId, geometryType, tableIcon) { + var iconRow = null; + var icons = this.getIcons(featureId, this.getIconMappingDao(featureTable)); + if (icons !== null) { + iconRow = icons.getIcon(geometryType); + } + if (iconRow === null && tableIcon) { + iconRow = this.getTableIcon(featureTable, geometryType); + } + return iconRow; +}; + +/** + * Get the style of the feature, searching in order: feature geometry type + * style, feature default style, when tableStyle enabled continue searching: + * table geometry type style, table default style + * @param {module:features/user/featureTable|String} featureTable + * @param {Number} featureId + * @param {String} geometryType + * @param {Boolean} tableStyle + * @returns {module:extension/style.StyleRow} + * @private + */ +FeatureStyleExtension.prototype.getStyle = function(featureTable, featureId, geometryType, tableStyle) { + var styleRow = null; + var styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable)); + if (styles !== null) { + styleRow = styles.getStyle(geometryType); + } + if (styleRow === null && tableStyle) { + styleRow = this.getTableStyle(featureTable, geometryType); + } + return styleRow; +}; + +/** + * Set the feature table default feature styles + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {module:extension/style.FeatureStyles} featureStyles feature styles + * @return {Promise} + */ +FeatureStyleExtension.prototype.setTableFeatureStyles = function(featureTable, featureStyles) { + if (featureStyles !== null) { + var promises = []; + promises.push(this.setTableStyles(featureTable, featureStyles.getStyles())); + promises.push(this.setTableIcons(featureTable, featureStyles.getIcons())); + return Promise.all(promises); + } else { + this.deleteTableFeatureStyles(featureTable); + return Promise.resolve(); + } +}; + +/** + * Set the feature table default styles + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {module:extension/style.Styles} styles default styles + * @return {Promise} + */ +FeatureStyleExtension.prototype.setTableStyles = function(featureTable, styles) { + // var tableName = featureTable.table_name ? featureTable.table_name : featureTable; + this.deleteTableStyles(featureTable); + if (styles !== null) { + var promises = []; + if (styles.getDefault() !== null) { + promises.push(this.setTableStyleDefault(featureTable, styles.getDefault())); + } + var keys = Object.keys(styles.styles); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var value = styles.styles[key]; + promises.push(this.setTableStyle(featureTable, key, value)); + } + return Promise.all(promises); + } else { + return Promise.resolve(); + } +}; + +/** + * Set the feature table style default + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setTableStyleDefault = function(featureTable, style) { + return this.setTableStyle(featureTable, null, style); +}; + +/** + * Set the feature table style for the geometry type + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {String} geometryType geometry type + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setTableStyle = function(featureTable, geometryType, style) { + this.deleteTableStyle(featureTable, geometryType); + if (style !== null) { + return this.createTableStyleRelationship(featureTable).then(function () { + var featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable)); + var styleId = this.getOrInsertStyle(style); + var mappingDao = this.getTableStyleMappingDao(featureTable); + this.insertStyleMapping(mappingDao, featureContentsId.id, styleId, geometryType); + }.bind(this)); + } else { + return Promise.resolve(); + } +}; + +/** + * Set the feature table default icons + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {module:extension/style.Icons} icons default icons + * @return {Promise} + */ +FeatureStyleExtension.prototype.setTableIcons = function(featureTable, icons) { + this.deleteTableIcons(featureTable); + if (icons !== null) { + var promises = []; + if (icons.getDefault() !== null) { + promises.push(this.setTableIconDefault(featureTable, icons.getDefault())); + } + var keys = Object.keys(icons.icons); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var value = icons.icons[key]; + promises.push(this.setTableIcon(featureTable, key, value)); + } + return Promise.all(promises); + } else { + return Promise.resolve(); + } +}; +/** + * Set the feature table icon default + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setTableIconDefault = function(featureTable, icon) { + return this.setTableIcon(featureTable, null, icon); +}; + +/** + * Set the feature table icon for the geometry type + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {String} geometryType geometry type + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setTableIcon = function(featureTable, geometryType, icon) { + this.deleteTableIcon(featureTable, geometryType); + if (icon !== null) { + return this.createTableIconRelationship(featureTable).then(function () { + var featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable)); + var iconId = this.getOrInsertIcon(icon); + var mappingDao = this.getTableIconMappingDao(featureTable); + this.insertStyleMapping(mappingDao, featureContentsId.id, iconId, geometryType); + }.bind(this)); + } else { + return Promise.resolve(); + } +}; + +/** + * Set the feature styles for the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.FeatureStyles} featureStyles feature styles + * @return {Promise} + */ +FeatureStyleExtension.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) { + return this.setFeatureStyles(featureRow.featureTable.table_name, featureRow.getId(), featureStyles); +}; + +/** + * Set the feature styles for the feature table and feature id + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {module:extension/style.FeatureStyles} featureStyles feature styles + * @return {Promise} + */ +FeatureStyleExtension.prototype.setFeatureStyles = function(featureTable, featureId, featureStyles) { + if (featureStyles !== null) { + var promises = []; + promises.push(this.setStyles(featureTable, featureId, featureStyles.getStyles())); + promises.push(this.setIcons(featureTable, featureId, featureStyles.getIcons())); + return Promise.all(promises); + } else { + this.deleteStyles(featureTable, featureId); + this.deleteIcons(featureTable, featureId); + return Promise.resolve(); + } +}; + +/** + * Set the feature style (style and icon) of the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureStyleExtension.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) { + return this.setFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), featureStyle); +}; + +/** + * Set the feature style (style and icon) of the feature row for the + * specified geometry type + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureStyleExtension.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) { + return this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, featureStyle); +}; + +/** + * Set the feature style default (style and icon) of the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureStyleExtension.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) { + return this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), null, featureStyle); +}; + +/** + * Set the feature style (style and icon) of the feature + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureStyleExtension.prototype.setFeatureStyle = async function(featureTable, featureId, geometryType, featureStyle) { + if (featureStyle !== null) { + var promises = []; + promises.push(this.setStyle(featureTable, featureId, geometryType, featureStyle.getStyle())); + promises.push(this.setIcon(featureTable, featureId, geometryType, featureStyle.getIcon())); + return Promise.all(promises); + } else { + this.deleteStyle(featureTable, featureId, geometryType); + this.deleteIcon(featureTable, featureId, geometryType); + return Promise.resolve(); + } +}; + +/** + * Set the feature style (style and icon) of the feature + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {module:extension/style.FeatureStyle} featureStyle feature style + * @return {Promise} + */ +FeatureStyleExtension.prototype.setFeatureStyleDefault = function(featureTable, featureId, featureStyle) { + return this.setFeatureStyle(featureTable, featureId, null, featureStyle); +}; + +/** + * Set the styles for the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.Styles} styles styles + * @return {Promise} + */ +FeatureStyleExtension.prototype.setStylesForFeatureRow = function(featureRow, styles) { + return this.setStyles(featureRow.featureTable.table_name, featureRow.getId(), styles); +}; + +/** + * Set the styles for the feature table and feature id + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {module:extension/style.Styles} styles styles + * @return {Promise} + */ +FeatureStyleExtension.prototype.setStyles = function(featureTable, featureId, styles) { + this.deleteStylesForFeatureId(featureTable, featureId); + if (styles !== null) { + var promises = []; + if (styles.getDefault() !== null) { + promises.push(this.setStyleDefault(featureTable, featureId, styles.getDefault())); + } + var keys = Object.keys(styles.styles); + for (var i = 0; i < keys.length; i++) { + promises.push(this.setStyle(featureTable, featureId, keys[i], styles.styles[keys[i]])); + } + return Promise.all(promises); + } else { + return Promise.resolve(); + } +}; + +/** + * Set the style of the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setStyleForFeatureRow = function(featureRow, style) { + return this.setStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), style); +}; + +/** + * Set the style of the feature row for the specified geometry type + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) { + return this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, style); +}; + +/** + * Set the default style of the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) { + return this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), null, style); +}; + +/** + * Set the style of the feature + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setStyle = function(featureTable, featureId, geometryType, style) { + this.deleteStyle(featureTable, featureId, geometryType); + if (style !== null) { + return this.createStyleRelationship(featureTable).then(function () { + var styleId = this.getOrInsertStyle(style); + var mappingDao = this.getStyleMappingDao(featureTable); + this.insertStyleMapping(mappingDao, featureId, styleId, geometryType); + }.bind(this)); + } else { + return Promise.resolve(); + } +}; + +/** + * Set the default style of the feature + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {module:extension/style.StyleRow} style style row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setStyleDefault = function(featureTable, featureId, style) { + return this.setStyle(featureTable, featureId, null, style); +}; + +/** + * Set the icons for the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.Icons} icons icons + * @return {Promise} + */ +FeatureStyleExtension.prototype.setIconsForFeatureRow = function(featureRow, icons) { + return this.setIcons(featureRow.featureTable.table_name, featureRow.getId(), icons); +}; + +/** + * Set the icons for the feature table and feature id + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {module:extension/style.Icons} icons icons + * @return {Promise} + */ +FeatureStyleExtension.prototype.setIcons = function(featureTable, featureId, icons) { + this.deleteIconsForFeatureId(featureTable, featureId); + if (icons !== null) { + var promises = []; + if (icons.getDefault() !== null) { + promises.push(this.setIconDefault(featureTable, featureId, icons.getDefault())); + } + var keys = Object.keys(icons.icons); + for (var i = 0; i < keys.length; i++) { + promises.push(this.setIcon(featureTable, featureId, keys[i], icons.icons[keys[i]])); + } + return Promise.all(promises); + } else { + return Promise.resolve(); + } +}; + +/** + * Set the icon of the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setIconForFeatureRow = function(featureRow, icon) { + return this.setIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), icon); +}; + +/** + * Set the icon of the feature row for the specified geometry type + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) { + return this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), geometryType, icon); +}; + +/** + * Set the default icon of the feature row + * @param {module:features/user/featureRow} featureRow feature row + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) { + return this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), null, icon); +}; + +/** + * Get the icon of the feature, searching in order: feature geometry type + * icon, feature default icon, table geometry type icon, table default icon + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setIcon = function(featureTable, featureId, geometryType, icon) { + this.deleteIcon(featureTable, featureId, geometryType); + if (icon !== null) { + return this.createIconRelationship(featureTable).then(function () { + var iconId = this.getOrInsertIcon(icon); + var mappingDao = this.getIconMappingDao(featureTable); + this.insertStyleMapping(mappingDao, featureId, iconId, geometryType); + }.bind(this)); + } else { + return Promise.resolve(); + } +}; + +/** + * Set the default icon of the feature + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {module:extension/style.IconRow} icon icon row + * @return {Promise} + */ +FeatureStyleExtension.prototype.setIconDefault = function(featureTable, featureId, icon) { + return this.setIcon(featureTable, featureId, null, icon); +}; + +/** + * Get the style id, either from the existing style or by inserting a new one + * @param {module:extension/style.StyleRow} style style row + * @return {Number} style id + */ +FeatureStyleExtension.prototype.getOrInsertStyle = function(style) { + var styleId; + if (style.hasId()) { + styleId = style.getId(); + } else { + var styleDao = this.getStyleDao(); + if (styleDao !== null) { + styleId = styleDao.create(style); + style.setId(styleId); + } + } + return styleId; +}; + +/** + * Get the icon id, either from the existing icon or by inserting a new one + * @param {module:extension/style.IconRow} icon icon row + * @return {Number} icon id + */ +FeatureStyleExtension.prototype.getOrInsertIcon = function(icon) { + var iconId; + if (icon.hasId()) { + iconId = icon.getId(); + } else { + var iconDao = this.getIconDao(); + if (iconDao != null) { + iconId = iconDao.create(icon); + icon.setId(iconId); + } + } + return iconId; +}; + +/** + * Insert a style mapping row + * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao + * @param {Number} baseId base id, either contents id or feature id + * @param {Number} relatedId related id, either style or icon id + * @param {String} geometryType geometry type or null + */ +FeatureStyleExtension.prototype.insertStyleMapping = function(mappingDao, baseId, relatedId, geometryType) { + var row = mappingDao.newRow(); + row.setBaseId(baseId); + row.setRelatedId(relatedId); + row.setGeometryTypeName(geometryType); + mappingDao.create(row); +}; + +/** + * Delete all feature styles including table styles, table icons, style, and icons + * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteAllFeatureStyles = function(featureTable) { + this.deleteTableFeatureStyles(featureTable); + this.deleteFeatureStyles(featureTable); +}; + +/** + * Delete all styles including table styles and feature row style + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteAllStyles = function(featureTable) { + this.deleteTableStyles(featureTable); + this.deleteStyles(featureTable); +}; + +/** + * Delete all icons including table icons and feature row icons + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteAllIcons = function(featureTable) { + this.deleteTableIcons(featureTable); + this.deleteIcons(featureTable); +}; + +/** + * Delete the feature table feature styles + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableFeatureStyles = function(featureTable) { + this.deleteTableStyles(featureTable); + this.deleteTableIcons(featureTable); +}; + +/** + * Delete the feature table styles + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableStyles = function(featureTable) { + this.deleteTableMappings(this.getTableStyleMappingDao(featureTable), featureTable); +}; + +/** + * Delete the feature table default style + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableStyleDefault = function(featureTable) { + this.deleteTableStyle(featureTable, null); +}; + +/** + * Delete the feature table style for the geometry type + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteTableStyle = function(featureTable, geometryType) { + this.deleteTableMapping(this.getTableStyleMappingDao(featureTable), featureTable, geometryType); +}; + +/** + * Delete the feature table icons + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableIcons = function(featureTable) { + this.deleteTableMappings(this.getTableIconMappingDao(featureTable), featureTable); +}; + +/** + * Delete the feature table default icon + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableIconDefault = function(featureTable) { + this.deleteTableIcon(featureTable, null); +}; + +/** + * Delete the feature table icon for the geometry type + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteTableIcon = function(featureTable, geometryType) { + this.deleteTableMapping(this.getTableIconMappingDao(featureTable), featureTable, geometryType); +}; + +/** + * Delete the table style mappings + * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteTableMappings = function(mappingDao, featureTable) { + if (mappingDao !== null) { + var featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); + if (featureContentsId !== null) { + mappingDao.deleteByBaseId(featureContentsId); + } + } +}; + +/** + * Delete the table style mapping with the geometry type value + * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteTableMapping = function(mappingDao, featureTable, geometryType) { + if (mappingDao !== null) { + var featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); + if (featureContentsId !== null) { + mappingDao.deleteByBaseIdAndGeometryType(featureContentsId, geometryType); + } + } +}; + +/** + * Delete all feature styles + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteFeatureStyles = function(featureTable) { + this.deleteStyles(featureTable); + this.deleteIcons(featureTable); +}; + +/** + * Delete all styles + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteStyles = function(featureTable) { + this.deleteMappings(this.getStyleMappingDao(featureTable)); +}; + +/** + * Delete feature row styles + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureStyleExtension.prototype.deleteStylesForFeatureRow = function(featureRow) { + this.deleteStylesForFeatureId(featureRow.featureTable.table_name, featureRow.getId()); +}; + +/** + * Delete feature row styles + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + */ +FeatureStyleExtension.prototype.deleteStylesForFeatureId = function(featureTable, featureId) { + this.deleteMappingsForFeatureId(this.getStyleMappingDao(featureTable), featureId); +}; + +/** + * Delete the feature row default style + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureStyleExtension.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) { + this.deleteStyleForFeatureRowAndGeometryType(featureRow, null); +}; + +/** + * Delete the feature row default style + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + */ +FeatureStyleExtension.prototype.deleteStyleDefault = function(featureTable, featureId) { + this.deleteStyle(featureTable, featureId, null); +}; + +/** + * Delete the feature row style for the feature row geometry type + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureStyleExtension.prototype.deleteStyleForFeatureRow = function(featureRow) { + this.deleteStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); +}; + +/** + * Delete the feature row style for the geometry type + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { + this.deleteStyle(featureRow.featureTable, featureRow.getId(), geometryType); +}; + +/** + * Delete the feature row style for the geometry type + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteStyle = function(featureTable, featureId, geometryType) { + this.deleteMapping(this.getStyleMappingDao(featureTable), featureId, geometryType); +}; + +/** + * Delete all icons + * @param {module:features/user/featureTable|String} featureTable feature table + */ +FeatureStyleExtension.prototype.deleteIcons = function(featureTable) { + this.deleteMappings(this.getIconMappingDao(featureTable)); +}; + +/** + * Delete feature row icons + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureStyleExtension.prototype.deleteIconsForFeatureRow = function(featureRow) { + this.deleteIconsForFeatureId(featureRow.featureTable.table_name, featureRow.getId()); +}; + +/** + * Delete feature row icons + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + */ +FeatureStyleExtension.prototype.deleteIconsForFeatureId = function(featureTable, featureId) { + this.deleteMappingsForFeatureId(this.getIconMappingDao(featureTable), featureId); +}; + +/** + * Delete the feature row default icon + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureStyleExtension.prototype.deleteIconDefaultForFeatureRow = function(featureRow) { + this.deleteIconDefault(featureRow.featureTable.table_name, featureRow.getId()); +}; + +/** + * Delete the feature row default icon + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + */ +FeatureStyleExtension.prototype.deleteIconDefault = function(featureTable, featureId) { + this.deleteIcon(featureTable, featureId, null); +}; + +/** + * Delete the feature row icon for the feature row geometry type + * @param {module:features/user/featureRow} featureRow feature row + */ +FeatureStyleExtension.prototype.deleteIconForFeatureRow = function(featureRow) { + this.deleteIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); +}; + +/** + * Delete the feature row icon for the geometry type + * @param {module:features/user/featureRow} featureRow feature row + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) { + this.deleteIcon(featureRow.featureTable, featureRow.getId(), geometryType); +}; + +/** + * Delete the feature row icon for the geometry type + * @param {module:features/user/featureTable|String} featureTable feature table + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteIcon = function(featureTable, featureId, geometryType) { + this.deleteMapping(this.getIconMappingDao(featureTable), featureId, geometryType); +}; + +/** + * Delete all style mappings + * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao + */ +FeatureStyleExtension.prototype.deleteMappings = function(mappingDao) { + if (mappingDao !== null) { + mappingDao.deleteAll(); + } +}; + +/** + * Delete the style mappings + * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao + * @param {Number} featureId feature id + */ +FeatureStyleExtension.prototype.deleteMappingsForFeatureId = function(mappingDao, featureId) { + if (mappingDao !== null) { + mappingDao.deleteByBaseId(featureId); + } +}; + +/** + * Delete the style mapping with the geometry type value + * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao + * @param {Number} featureId feature id + * @param {String} geometryType geometry type + */ +FeatureStyleExtension.prototype.deleteMapping = function(mappingDao, featureId, geometryType) { + if (mappingDao !== null) { + mappingDao.deleteByBaseIdAndGeometryType(featureId, geometryType); + } +}; + +/** + * Get all the unique style row ids the table maps to + * @param {module:features/user/featureTable|String} featureTable feature table + * @return style row ids + */ +FeatureStyleExtension.prototype.getAllTableStyleIds = function(featureTable) { + var styleIds = null; + var mappingDao = this.getTableStyleMappingDao(featureTable); + if (mappingDao !== null) { + styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); + } + return styleIds; +}; + +/** + * Get all the unique icon row ids the table maps to + * @param {module:features/user/featureTable|String} featureTable feature table + * @return icon row ids + */ +FeatureStyleExtension.prototype.getAllTableIconIds = function(featureTable) { + var styleIds = null; + var mappingDao = this.getTableIconMappingDao(featureTable); + if (mappingDao !== null) { + styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); + } + return styleIds; +}; + +/** + * Get all the unique style row ids the features map to + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {Number[]} style row ids + */ +FeatureStyleExtension.prototype.getAllStyleIds = function(featureTable) { + var styleIds = null; + var mappingDao = this.getStyleMappingDao(featureTable); + if (mappingDao !== null) { + styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); + } + return styleIds; +}; + +/** + * Get all the unique icon row ids the features map to + * @param {module:features/user/featureTable|String} featureTable feature table + * @return {Number[]} icon row ids + */ +FeatureStyleExtension.prototype.getAllIconIds = function(featureTable) { + var styleIds = null; + var mappingDao = this.getIconMappingDao(featureTable); + if (mappingDao !== null) { + styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); + } + return styleIds; +}; + +/** + * Get name of feature table + * @param featureTable + * @returns {String} + */ +FeatureStyleExtension.prototype.getFeatureTableName = function(featureTable) { + return featureTable.table_name ? featureTable.table_name : featureTable; +}; + +/** + * Remove all traces of the extension + */ +FeatureStyleExtension.prototype.removeExtension = function() { + this.deleteAllRelationships(); + this.geoPackage.deleteTable(StyleTable.TABLE_NAME); + this.geoPackage.deleteTable(IconTable.TABLE_NAME); + if (this.extensionsDao.isTableExists()) { + this.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME); + } +}; + +FeatureStyleExtension.EXTENSION_NAME = 'nga_feature_style'; +FeatureStyleExtension.EXTENSION_AUTHOR = 'nga'; +FeatureStyleExtension.EXTENSION_NAME_NO_AUTHOR = 'feature_style'; +FeatureStyleExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/feature-style.html'; +FeatureStyleExtension.TABLE_MAPPING_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + "_style_"; +FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + "_style_default_"; +FeatureStyleExtension.TABLE_MAPPING_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + "_icon_"; +FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + "_icon_default_"; + +module.exports = FeatureStyleExtension; + +},{"../.":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){ +/** + * @memberOf module:extension/style + * @class StyleDao + */ + +var StyleRow = require('./styleRow') + , StyleTable = require('./styleTable') + , AttributesDao = require('../../attributes/attributeDao'); + +var util = require('util'); + +/** + * Style DAO for reading style tables + * @extends {module:attributes/attributeDao~AttributesDao} + * @param {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection + * @param {string} table table name + * @constructor + */ +var StyleDao = function(geoPackage, table) { + AttributesDao.call(this, geoPackage, table); + this.table = table; +}; + +util.inherits(StyleDao, AttributesDao); + +/** + * Creates a StyleRow object from the results + * @param results + * @returns {module:extension/style.StyleRow} + */ +StyleDao.prototype.createObject = function (results) { + if (results) { + return this.getRow(results); + } + return this.newRow(); +}; + +/** + * Create a new style row + * @return {module:extension/style.StyleRow} + */ +StyleDao.prototype.newRow = function() { + return new StyleRow(this.table); +}; + +/** + * Create a style row with the column types and values + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {module:extension/style.StyleRow} icon row + */ +StyleDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new StyleRow(this.table, columnTypes, values); +}; + +module.exports = StyleDao; + +},{"../../attributes/attributeDao":3,"./styleRow":59,"./styleTable":60,"util":343}],56:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class StyleMappingDao + */ + +var StyleMappingRow = require('./styleMappingRow') + , StyleMappingTable = require('./styleMappingTable') + , UserMappingTable = require('../relatedTables/userMappingTable') + , UserMappingDao = require('../relatedTables/userMappingDao'); + +var util = require('util'); + +/** + * Style Mapping DAO for reading user mapping data tables + * @extends {module:extension/relatedTables~UserMappingDao} + * @param {module:user/custom~UserCustomDao} userCustomDao + * @param {module:geoPackage~GeoPackage} geoPackage geopackage object + * @constructor + */ +var StyleMappingDao = function(userCustomDao, geoPackage) { + UserMappingDao.call(this, userCustomDao, geoPackage); +}; + +util.inherits(StyleMappingDao, UserMappingDao); + +/** + * Create a new {module:user/custom~UserCustomTable} + * @param {module:user/custom~UserCustomDao} userCustomDao + * @return {module:user/custom~UserCustomTable} userCustomTable user custom table + */ +StyleMappingDao.prototype.createMappingTable = function(userCustomDao) { + return new StyleMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns); +}; + +/** + * Create a new {module:extension/style.StyleMappingRow} + * @return {module:extension/style.StyleMappingRow} + */ +StyleMappingDao.prototype.newRow = function() { + return new StyleMappingRow(this.table); +}; + +/** + * Create a user mapping row + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {module:extension/style.StyleMappingRow} style mapping row + */ +StyleMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new StyleMappingRow(this.table, columnTypes, values); +}; + +/** + * Delete by base id and geometry type + * @param {Number} baseId base id + * @param {String} geometryType geometry type + * @return {Number} number of deleted rows + */ +StyleMappingDao.prototype.deleteByBaseIdAndGeometryType = function(baseId, geometryType) { + var where = ''; + where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId); + where += ' AND '; + where += this.buildWhereWithFieldAndValue(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, geometryType); + var whereArgs = this.buildWhereArgs([baseId, geometryType]); + return this.deleteWhere(where, whereArgs); +}; + +module.exports = StyleMappingDao; + +},{"../relatedTables/userMappingDao":40,"../relatedTables/userMappingTable":42,"./styleMappingRow":57,"./styleMappingTable":58,"util":343}],57:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class StyleMappingRow + */ + +var UserMappingRow = require('../relatedTables/userMappingRow'); + +var util = require('util'); + +/** + * User Mapping Row containing the values from a single result set row + * @extends {module:extension/relatedTables~UserMappingRow} + * @param {module:extension/style.StyleMappingTable} styleMappingTable style mapping table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @constructor + */ +var StyleMappingRow = function(styleMappingTable, columnTypes, values) { + UserMappingRow.call(this, styleMappingTable, columnTypes, values); + this.styleMappingTable = styleMappingTable; +}; + +util.inherits(StyleMappingRow, UserMappingRow); + +/** + * Get the geometry type name column + * @return {module:user/userColumn~UserColumn} + */ +StyleMappingRow.prototype.getGeometryTypeNameColumn = function() { + return this.styleMappingTable.getGeometryTypeNameColumn(); +}; + +/** + * Gets the geometry type name + * @return {string} + */ +StyleMappingRow.prototype.getGeometryTypeName = function() { + return this.getValueWithColumnName(this.getGeometryTypeNameColumn().name); +}; + +/** + * Sets the geometry type name + * @param {string} geometryTypeName geometry type name + */ +StyleMappingRow.prototype.setGeometryTypeName = function(geometryTypeName) { + this.setValueWithColumnName(this.getGeometryTypeNameColumn().name, geometryTypeName); +}; + +module.exports = StyleMappingRow; + +},{"../relatedTables/userMappingRow":41,"util":343}],58:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class StyleMappingTable + */ + +var UserMappingTable = require('../relatedTables/userMappingTable') + , UserCustomColumn = require('../../user/custom/userCustomColumn') + , DataTypes = require('../../db/dataTypes'); + +var util = require('util'); + +/** + * Contains style mapping table factory and utility methods + * @extends {module:extension/relatedTables~UserMappingTable} + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns style mapping columns + * @constructor + */ +var StyleMappingTable = function(tableName, columns) { + UserMappingTable.call(this, tableName, columns); +}; + +util.inherits(StyleMappingTable, UserMappingTable); + +/** + * Creates a user mapping table with the minimum required columns followed by the additional columns + * @param {string} tableName name of the table + * @return {module:extension/relatedTables~UserMappingTable} + */ +StyleMappingTable.create = function(tableName) { + return new StyleMappingTable(tableName, StyleMappingTable.createColumns()); +}; + +/** + * Create the columns + * @return {module:user/userColumn~UserColumn[]} + */ +StyleMappingTable.createColumns = function() { + var columns = UserMappingTable.createRequiredColumns(); + var index = columns.length; + columns.push(UserCustomColumn.createColumn(index, StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)) + return columns; +}; + +/** + * Get the geometry type name column index + * @return int + */ +StyleMappingTable.prototype.getGeometryTypeNameColumnIndex = function() { + return this.getColumnIndex(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME); +}; + +/** + * Get the geometry type name column + * @return {module:user/userColumn~UserColumn} + */ +StyleMappingTable.prototype.getGeometryTypeNameColumn = function() { + return this.getColumnWithColumnName(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME); +}; + +StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME = 'geometry_type_name'; + +module.exports = StyleMappingTable; + +},{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../relatedTables/userMappingTable":42,"util":343}],59:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class StyleRow + */ + +var AttributesRow = require('../../attributes/attributeRow'); + +var util = require('util'); + +/** + * Color hex pattern + */ +var colorPattern = /^#([0-9a-fA-F]{3}){1,2}$/; + +/** + * Style Row + * @extends {module:attributes/attributeRow~AttributesRow} + * @param {module:extension/style.StyleTable} styleTable style table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @constructor + */ +var StyleRow = function(styleTable, columnTypes, values) { + AttributesRow.call(this, styleTable, columnTypes, values); + this.styleTable = styleTable; +}; + +util.inherits(StyleRow, AttributesRow); + +/** + * Get the name column + * @return {module:user/userColumn~UserColumn} + */ +StyleRow.prototype.getNameColumn = function() { + return this.styleTable.getNameColumn(); +}; + +/** + * Gets the name + * @return {String} + */ +StyleRow.prototype.getName = function() { + return this.getValueWithColumnName(this.getNameColumn().name); +}; + +/** + * Sets the name for the row + * @param {String} name name + */ +StyleRow.prototype.setName = function(name) { + this.setValueWithColumnName(this.getNameColumn().name, name); +}; + +/** + * Get the description column + * @return {module:user/userColumn~UserColumn} + */ +StyleRow.prototype.getDescriptionColumn = function() { + return this.styleTable.getDescriptionColumn(); +}; + +/** + * Gets the description + * @return {String} + */ +StyleRow.prototype.getDescription = function() { + return this.getValueWithColumnName(this.getDescriptionColumn().name); +}; + +/** + * Sets the description for the row + * @param {String} description description + */ +StyleRow.prototype.setDescription = function(description) { + this.setValueWithColumnName(this.getDescriptionColumn().name, description); +}; + +/** + * Get the color column + * @return {module:user/userColumn~UserColumn} + */ +StyleRow.prototype.getColorColumn = function() { + return this.styleTable.getColorColumn(); +}; + +/** + * Get the style color + * @return {String} color + */ +StyleRow.prototype.getColor = function() { + return this.createColor(this.getHexColor(), this.getOpacity()); +}; + +/** + * Check if the style has a color + * @return true if has a color + */ +StyleRow.prototype.hasColor = function() { + return this._hasColor(this.getHexColor(), this.getOpacity()); +}; + +/** + * Get the color + * @return {String} color + */ +StyleRow.prototype.getHexColor = function() { + return this.getValueWithColumnName(this.getColorColumn().name); +}; + +/** + * Set the color + * @param {String} color color + * @param {Number} opacity opacity + */ +StyleRow.prototype.setColor = function(color, opacity) { + this.setHexColor(color); + this.setOpacity(opacity); +}; + +/** + * Sets the color for the row + * @param {String} color color + */ +StyleRow.prototype.setHexColor = function(color) { + var validatedColor = this.validateColor(color); + this.setValueWithColumnName(this.getColorColumn().name, validatedColor); +}; + +/** + * Get the opacity column + * @return {module:user/userColumn~UserColumn} + */ +StyleRow.prototype.getOpacityColumn = function() { + return this.styleTable.getOpacityColumn(); +}; + +/** + * Gets the opacity + * @return {Number} + */ +StyleRow.prototype.getOpacity = function() { + return this.getValueWithColumnName(this.getOpacityColumn().name); +}; + +/** + * Get the opacity or default value + * @return {Number} opacity + */ +StyleRow.prototype.getOpacityOrDefault = function() { + var opacity = this.getOpacity(); + if (opacity === null) { + opacity = 1.0; + } + return opacity; +}; + +/** + * Sets the opacity for the row + * @param {Number} opacity opacity + */ +StyleRow.prototype.setOpacity = function(opacity) { + this.validateOpacity(opacity); + this.setValueWithColumnName(this.getOpacityColumn().name, opacity); +}; + +/** + * Get the width column + * @return {module:user/userColumn~UserColumn} + */ +StyleRow.prototype.getWidthColumn = function() { + return this.styleTable.getWidthColumn(); +}; + +/** + * Gets the width + * @return {int} + */ +StyleRow.prototype.getWidth = function() { + return this.getValueWithColumnName(this.getWidthColumn().name); +}; + +/** + * Sets the width for the row + * @param {Number} width width + */ +StyleRow.prototype.setWidth = function(width) { + if (width !== null && width < 0.0) { + throw new Error("Width must be greater than or equal to 0.0, invalid value: " + width); + } + this.setValueWithColumnName(this.getWidthColumn().name, width); +}; + +/** + * Get the width value or default width + * @return width + */ +StyleRow.prototype.getWidthOrDefault = function() { + var width = this.getWidth(); + if (width === null) { + width = 1.0; + } + return width; +}; + +/** + * Get the fill color column + * @return {module:user/userColumn~UserColumn} + */ +StyleRow.prototype.getFillColorColumn = function() { + return this.styleTable.getFillColorColumn(); +}; + + +/** + * Get the style fill color + * @return {String} color + */ +StyleRow.prototype.getFillColor = function() { + return this.createColor(this.getFillHexColor(), this.getFillOpacity()); +}; + +/** + * Check if the style has a fill color + * @return true if has a color + */ +StyleRow.prototype.hasFillColor = function() { + return this._hasColor(this.getFillHexColor(), this.getFillOpacity()); +}; + +/** + * Get the fill color + * @return {String} color + */ +StyleRow.prototype.getFillHexColor = function() { + return this.getValueWithColumnName(this.getFillColorColumn().name); +}; + +/** + * Set the fill color + * @param {String} color color + * @param {Number} opacity opacity + */ +StyleRow.prototype.setFillColor = function(color, opacity) { + this.setFillHexColor(color); + this.setFillOpacity(opacity); +}; + +/** + * Sets the fill color for the row + * @param {String} color color + */ +StyleRow.prototype.setFillHexColor = function(color) { + var validatedColor = this.validateColor(color); + this.setValueWithColumnName(this.getFillColorColumn().name, validatedColor); +}; + +/** + * Get the fill opacity column + * @return {module:user/userColumn~UserColumn} + */ +StyleRow.prototype.getFillOpacityColumn = function() { + return this.styleTable.getFillOpacityColumn(); +}; + +/** + * Gets the fill opacity + * @return {Number} + */ +StyleRow.prototype.getFillOpacity = function() { + return this.getValueWithColumnName(this.getFillOpacityColumn().name); +}; + +/** + * Sets the fill opacity for the row + * @param {Number} fillOpacity fillOpacity + */ +StyleRow.prototype.setFillOpacity = function(fillOpacity) { + this.validateOpacity(fillOpacity); + this.setValueWithColumnName(this.getFillOpacityColumn().name, fillOpacity); +}; + +/** + * Get the fill opacity or default value + * @return {Number} fill opacity + */ +StyleRow.prototype.getFillOpacityOrDefault = function() { + var fillOpacity = this.getFillOpacity(); + if (fillOpacity == null) { + fillOpacity = 1.0; + } + return fillOpacity; +}; + +/** + * Validate and adjust the color value + * @param {String} color color + */ +StyleRow.prototype.validateColor = function(color) { + var validated = color; + if (color != null) { + if (!color.startsWith("#")) { + validated = "#" + color; + } + if (!colorPattern.test(validated)) { + throw new Error("Color must be in hex format #RRGGBB or #RGB, invalid value: " + color); + } + validated = validated.toUpperCase(); + } + return validated; +}; + +/** + * Validate the opacity value + * @param {Number} opacity opacity + */ +StyleRow.prototype.validateOpacity = function(opacity) { + if (opacity != null && (opacity < 0.0 || opacity > 1.0)) { + throw new Error("Opacity must be set inclusively between 0.0 and 1.0, invalid value: " + opacity); + } +}; + +/** + * Create a color from the hex color and opacity + * @param {String} hexColor hex color + * @param {Number} opacity opacity + * @return {String} rgba color + */ +StyleRow.prototype.createColor = function(hexColor, opacity) { + var color = '#000000'; + if (hexColor !== null) { + color = hexColor; + } + if (opacity !== null) { + var a = Math.round(opacity * 255).toString(16); + if (a.length === 1) { + a = "0" + a; + } + color += a; + } + return color.toUpperCase(); +}; + +/** + * Determine if a color exists from the hex color and opacity + * @param {String} hexColor hex color + * @param {Number} opacity opacity + * @return true if has a color + */ +StyleRow.prototype._hasColor = function(hexColor, opacity) { + return hexColor !== null || opacity !== null; +}; + +module.exports = StyleRow; + +},{"../../attributes/attributeRow":4,"util":343}],60:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class StyleTable + */ + +var AttributesTable = require('../../attributes/attributeTable') + , UserColumn = require('../../user/userColumn') + , UserCustomColumn = require('../../user/custom/userCustomColumn') + , RelationType = require('../relatedTables/relationType') + , DataTypes = require('../../db/dataTypes'); + +var util = require('util'); + +/** + * Icon Requirements Class Media Table + * @extends {module:attributes/attributeTable~AttributeTable} + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns media columns + * @constructor + */ +var StyleTable = function(tableName, columns) { + this.data_type = RelationType.ATTRIBUTES.dataType; + this.relation_name = RelationType.ATTRIBUTES.name; + AttributesTable.call(this, tableName, columns); +}; + +util.inherits(StyleTable, AttributesTable); + +/** + * Create a media table with a minimum required columns followed by the additional columns + * @return {module:extension/style.StyleTable} + */ +StyleTable.create = function() { + return new StyleTable(StyleTable.TABLE_NAME, StyleTable.createColumns()); +}; + +/** + * Create the columns + * @return {module:user/custom~UserCustomColumn[]} + */ +StyleTable.createColumns = function() { + var columns = []; + var index = 0; + columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(index++, StyleTable.COLUMN_ID)); + columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_OPACITY, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_FILL_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); + columns.push(UserCustomColumn.createColumn(index, StyleTable.COLUMN_FILL_OPACITY, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); + return columns; +}; + +/** + * Get the name column index + * @return int + */ +StyleTable.prototype.getNameColumnIndex = function() { + return this.getColumnIndex(StyleTable.COLUMN_NAME); +}; + +/** + * Get the name column + * @return {module:user/userColumn~UserColumn} + */ +StyleTable.prototype.getNameColumn = function() { + return this.getColumnWithColumnName(StyleTable.COLUMN_NAME); +}; + +/** + * Get the description column index + * @return int + */ +StyleTable.prototype.getDescriptionColumnIndex = function() { + return this.getColumnIndex(StyleTable.COLUMN_DESCRIPTION); +}; + +/** + * Get the description column + * @return {module:user/userColumn~UserColumn} + */ +StyleTable.prototype.getDescriptionColumn = function() { + return this.getColumnWithColumnName(StyleTable.COLUMN_DESCRIPTION); +}; + +/** + * Get the color column index + * @return int + */ +StyleTable.prototype.getColorColumnIndex = function() { + return this.getColumnIndex(StyleTable.COLUMN_COLOR); +}; + +/** + * Get the color column + * @return {module:user/userColumn~UserColumn} + */ +StyleTable.prototype.getColorColumn = function() { + return this.getColumnWithColumnName(StyleTable.COLUMN_COLOR); +}; + +/** + * Get the opacity column index + * @return int + */ +StyleTable.prototype.getOpacityColumnIndex = function() { + return this.getColumnIndex(StyleTable.COLUMN_OPACITY); +}; + +/** + * Get the opacity column + * @return {module:user/userColumn~UserColumn} + */ +StyleTable.prototype.getOpacityColumn = function() { + return this.getColumnWithColumnName(StyleTable.COLUMN_OPACITY); +}; + +/** + * Get the width column index + * @return int + */ +StyleTable.prototype.getWidthColumnIndex = function() { + return this.getColumnIndex(StyleTable.COLUMN_WIDTH); +}; + +/** + * Get the width column + * @return {module:user/userColumn~UserColumn} + */ +StyleTable.prototype.getWidthColumn = function() { + return this.getColumnWithColumnName(StyleTable.COLUMN_WIDTH); +}; + +/** + * Get the fill_color column index + * @return int + */ +StyleTable.prototype.getFillColorColumnIndex = function() { + return this.getColumnIndex(StyleTable.COLUMN_FILL_COLOR); +}; + +/** + * Get the fill_color column + * @return {module:user/userColumn~UserColumn} + */ +StyleTable.prototype.getFillColorColumn = function() { + return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_COLOR); +}; + +/** + * Get the fill_opacity column index + * @return int + */ +StyleTable.prototype.getFillOpacityColumnIndex = function() { + return this.getColumnIndex(StyleTable.COLUMN_FILL_OPACITY); +}; + +/** + * Get the fill_opacity column + * @return {module:user/userColumn~UserColumn} + */ +StyleTable.prototype.getFillOpacityColumn = function() { + return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_OPACITY); +}; + +StyleTable.TABLE_NAME = 'nga_style'; +StyleTable.COLUMN_ID = 'id'; +StyleTable.COLUMN_NAME = 'name'; +StyleTable.COLUMN_DESCRIPTION = 'description'; +StyleTable.COLUMN_COLOR = 'color'; +StyleTable.COLUMN_OPACITY = 'opacity'; +StyleTable.COLUMN_WIDTH = 'width'; +StyleTable.COLUMN_FILL_COLOR = 'fill_color'; +StyleTable.COLUMN_FILL_OPACITY = 'fill_opacity'; +StyleTable.prototype.TABLE_TYPE = 'media'; + +module.exports = StyleTable; + +},{"../../attributes/attributeTable":5,"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../../user/userColumn":105,"../relatedTables/relationType":36,"util":343}],61:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class StyleTableReader + */ + +var AttributeTableReader = require('../../attributes/attributeTableReader') + , StyleTable = require('./styleTable'); + +var util = require('util'); + +/** + * Reads the metadata from an existing attribute table + * @extends {module:attributes/attributeTableReader} + * @constructor +*/ +var StyleTableReader = function(tableName) { + AttributeTableReader.call(this, tableName); +}; + +util.inherits(StyleTableReader, AttributeTableReader); + +/** + * + * @param {String} tableName + * @param columns + * @returns {module:extension/style.StyleTable} + */ +StyleTableReader.prototype.createTable = function (tableName, columns) { + return new StyleTable(tableName, columns); +}; + +module.exports = StyleTableReader; + +},{"../../attributes/attributeTableReader":6,"./styleTable":60,"util":343}],62:[function(require,module,exports){ +/** + * @memberOf module:extension/style + * @class Styles + */ + + +/** + * Styles constructor + * @constructor + */ +var Styles = function() { + this.defaultStyle = null; + this.styles = {}; +}; + +Styles.prototype.setDefault = function(styleRow) { + this.defaultStyle = styleRow; +}; + +Styles.prototype.getDefault = function() { + return this.defaultStyle; +}; + +Styles.prototype.setStyle = function(styleRow, geometryType) { + if (geometryType != null) { + if (styleRow != null) { + this.styles[geometryType] = styleRow; + } else { + delete this.styles[geometryType]; + } + } else { + this.setDefault(styleRow); + } +}; + +Styles.prototype.getStyle = function(geometryType) { + var styleRow = null; + if (geometryType != null) { + styleRow = this.styles[geometryType]; + } + if (styleRow === null || geometryType === null) { + styleRow = this.getDefault(); + } + return styleRow; +}; + +Styles.prototype.isEmpty = function() { + return Object.keys(this.styles).length === 0 && this.defaultStyle === null; +}; + +module.exports = Styles; + +},{}],63:[function(require,module,exports){ +/** + * WebPExtension module. + * @module WebPExtension + * @see module:extension/BaseExtension + */ + +var BaseExtension = require('../baseExtension') + , Extension = require('../.').Extension; + +var util = require('util'); + +var WebPExtension = function(geoPackage, tableName) { + BaseExtension.call(this, geoPackage); + + this.tableName = tableName; +} + +util.inherits(WebPExtension, BaseExtension); + +WebPExtension.prototype.getOrCreateExtension = function() { + return this.getOrCreate(WebPExtension.EXTENSION_NAME, this.tableName, 'tile_data', WebPExtension.EXTENSION_WEBP_DEFINITION, Extension.READ_WRITE); +}; + +WebPExtension.EXTENSION_NAME = 'gpkg_webp'; +WebPExtension.EXTENSION_WEBP_AUTHOR = 'gpkg'; +WebPExtension.EXTENSION_WEBP_NAME_NO_AUTHOR = 'webp'; +WebPExtension.EXTENSION_WEBP_DEFINITION = 'http://www.geopackage.org/spec/#extension_webp'; + +module.exports.WebPExtension = WebPExtension; + +},{"../.":25,"../baseExtension":20,"util":343}],64:[function(require,module,exports){ +/** + * GeometryColumns module. + * @module features/columns + */ + +var Dao = require('../../dao/dao') + , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao + , ContentsDao = require('../../core/contents').ContentsDao + , Contents = require('../../core/contents').Contents; + +var util = require('util'); + +/** + * 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. + * @class GeometryColumns + */ +var GeometryColumns = function() { + /** + * Name of the table containing the geometry column + * @member {string} + */ + this.table_name; + + /** + * Name of a column in the feature table that is a Geometry Column + * @member {string} + */ + this.column_name; + + /** + * Name from Geometry Type Codes (Core) or Geometry Type Codes (Extension) + * in Geometry Types (Normative) + * @member {string} + */ + this.geometry_type_name; + + /** + * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id + * @member {module:dao/spatialReferenceSystem~SpatialReferenceSystem} + */ + this.srs; + + /** + * Unique identifier for each Spatial Reference System within a GeoPackage + * @member {Number} + */ + this.srs_id; + + /** + * 0: z values prohibited; 1: z values mandatory; 2: z values optional + * @member {byte} + */ + this.z; + + /** + * 0: m values prohibited; 1: m values mandatory; 2: m values optional + * @member {byte} + */ + this.m; + +}; + +GeometryColumns.prototype.getGeometryType = function() { + return this.geometry_type_name; +}; + + // /** + // * Contents + // */ + // @ForeignCollectionField(eager = false) + // private ForeignCollection contents; + // + // /** + // * Geometry Columns + // */ + // @ForeignCollectionField(eager = false) + // private ForeignCollection geometryColumns; + // + // /** + // * Matrix Tile Set + // */ + // @ForeignCollectionField(eager = false) + // private ForeignCollection tileMatrixSet; + + + +/** + * Geometry Columns Data Access Object + * @class GeometryColumnsDao + * @extends {module:dao/dao~Dao} + */ +var GeometryColumnsDao = function(geoPackage) { + Dao.call(this, geoPackage); +} + +util.inherits(GeometryColumnsDao, Dao); + +GeometryColumnsDao.prototype.createObject = function () { + return new GeometryColumns(); +}; + +/** + * Query for the table name + * + * @param {string} tableName table name + * @param {callback} callback called with an error if one occurred and the {module:dao/geometryColumns~GeometryColumns} + */ +GeometryColumnsDao.prototype.queryForTableName = function (tableName) { + var results = this.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, tableName); + if (results && results.length) { + var gc = this.createObject(); + this.populateObjectFromResult(gc, results[0]); + return gc; + } + return; +}; + +/** + * Get the feature table names + * + * @param {callback} callback called with an error if one occurred and an array of the {FeatureTable} + */ +GeometryColumnsDao.prototype.getFeatureTables = function () { + var tableNames = []; + for (var result of this.connection.each('select ' + GeometryColumnsDao.COLUMN_TABLE_NAME + ' from ' + this.gpkgTableName)) { + tableNames.push(result[GeometryColumnsDao.COLUMN_TABLE_NAME]); + } + return tableNames; +}; + +/** + * Get the Spatial Reference System of the Geometry Columns + * + * @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns + * @param {callback} callback called with an error if one occurred and the {SpatialReferenceSystem} + */ +GeometryColumnsDao.prototype.getSrs = function (geometryColumns) { + var dao = this.geoPackage.getSpatialReferenceSystemDao(); + return dao.queryForId(geometryColumns.srs_id);; +}; + +/** + * Get the Contents of the Geometry Columns + * + * @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns + * @return {ContentsDao} contents dao + */ +GeometryColumnsDao.prototype.getContents = function (geometryColumns) { + var dao = this.geoPackage.getContentsDao(); + return dao.queryForId(geometryColumns.table_name); +}; + +GeometryColumnsDao.prototype.getProjection = function (projectionObject) { + var srs = this.getSrs(projectionObject); + var srsDao = this.geoPackage.getSpatialReferenceSystemDao(); + return srsDao.getProjection(srs); +}; + +/** + * tableName field name + * @type {String} + */ +GeometryColumnsDao.COLUMN_TABLE_NAME = "table_name"; + +/** + * columnName field name + * @type {String} + */ +GeometryColumnsDao.COLUMN_COLUMN_NAME = "column_name"; + +/** + * id 1 field name, tableName + * @type {String} + */ +GeometryColumnsDao.COLUMN_ID_1 = GeometryColumnsDao.COLUMN_TABLE_NAME; + +/** + * id 2 field name, columnName + * @type {String} + */ +GeometryColumnsDao.COLUMN_ID_2 = GeometryColumnsDao.COLUMN_COLUMN_NAME; + +/** + * geometryTypeName field name + * @type {String} + */ +GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME = "geometry_type_name"; + +/** + * srsId field name + * @type {String} + */ +GeometryColumnsDao.COLUMN_SRS_ID = 'srs_id'; + +/** + * z field name + * @type {String} + */ +GeometryColumnsDao.COLUMN_Z = "z"; + +/** + * m field name + * @type {String} + */ +GeometryColumnsDao.COLUMN_M = "m"; + +/** + * Table Name + * @type {String} + */ +GeometryColumnsDao.prototype.gpkgTableName = 'gpkg_geometry_columns'; + +GeometryColumnsDao.prototype.idColumns = [GeometryColumnsDao.COLUMN_ID_1, GeometryColumnsDao.COLUMN_ID_2]; +GeometryColumnsDao.prototype.columns = + [GeometryColumnsDao.COLUMN_TABLE_NAME, GeometryColumnsDao.COLUMN_COLUMN_NAME, GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME, GeometryColumnsDao.COLUMN_SRS_ID, GeometryColumnsDao.COLUMN_Z, GeometryColumnsDao.COLUMN_M]; + +GeometryColumns.TABLE_NAME = "tableName"; +GeometryColumns.COLUMN_NAME = "columnName"; +GeometryColumns.GEOMETRY_TYPE_NAME = "geometryTypeName"; +GeometryColumns.SRS_ID = "srsId"; +GeometryColumns.Z = "z"; +GeometryColumns.M = "m"; + +module.exports.GeometryColumnsDao = GeometryColumnsDao; +module.exports.GeometryColumns = GeometryColumns; + +},{"../../core/contents":8,"../../core/srs":9,"../../dao/dao":11,"util":343}],65:[function(require,module,exports){ +/** + * @module features/user/featureColumn + */ + +const UserColumn = require('../../user/userColumn'); +const DataTypes = require('../../db/dataTypes'); +const util = require('util'); + +/** + * Represents a user feature column + * @class + * @extends {module:user/userColumn~UserColumn} + */ +var FeatureColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType) { + UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey); + this.geometryType = geometryType; + + if (!geometryType && dataType === DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) { + throw new Error('Data or Geometry Type is required to create column: ' + name); + } +} + +util.inherits(FeatureColumn, UserColumn); + +FeatureColumn.prototype.getTypeName = function () { + if (this.isGeometry()) { + return DataTypes.name(DataTypes.GPKGDataType.GPKG_DT_GEOMETRY); + } + return this.dataType !== undefined && DataTypes.name(this.dataType); +}; + +/** + * Create a new primary key column + * + * @param {Number} index column index + * @param {string} name column name + * + * @return feature column + */ +FeatureColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) { + return new FeatureColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true); +} + +/** + * Create a new geometry column + * + * @param {Number} index column index + * @param {string} name column name + * @param {WKBGeometryType} type geometry type + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * + * @return feature column + */ +FeatureColumn.createGeometryColumn = function(index, name, type, notNull, defaultValue) { + return new FeatureColumn(index, name, type, undefined, notNull, defaultValue, false, type); +} + +/** + * Create a new column + * + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} type data type + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * + * @return feature column + */ +FeatureColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) { + return FeatureColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue); +} + +/** + * Create a new column + * + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} type data type + * @param {Number} max max value + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * + * @return feature column + */ +FeatureColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) { + return new FeatureColumn(index, name, type, max, notNull, defaultValue, false); +} + +/** + * Determine if this column is a geometry + * @return {Boolean} true if a geometry column + */ +FeatureColumn.prototype.isGeometry = function () { + return this.geometryType !== undefined; +}; + +module.exports = FeatureColumn; + +},{"../../db/dataTypes":14,"../../user/userColumn":105,"util":343}],66:[function(require,module,exports){ +/** + * featureDao module. + * @module features/user/featureDao + */ + +var UserDao = require('../../user/userDao') + , GeometryColumnsDao = require('../columns').GeometryColumnsDao + , ContentsDao = require('../../core/contents').ContentsDao + , DataColumnsDao = require('../../dataColumns').DataColumnsDao + , FeatureRow = require('./featureRow') + , DataTypes = require('../../db/dataTypes') + , FeatureTableIndex = require('../../extension/index/featureTableIndex') + , BoundingBox = require('../../boundingBox'); + +var util = require('util') + , reproject = require('reproject') + , LineIntersect = require('@turf/line-intersect').default + , Intersect = require('@turf/intersect').default + , BooleanWithin = require('@turf/boolean-within').default; + +/** + * Feature DAO for reading feature user data tables + * @class FeatureDao + * @extends {module:user/userDao~UserDao} + * @param {sqlite3} db database connection + * @param {FeatureTable} table feature table + * @param {GeometryColumns} geometryColumns geometry columns + * @param {MetadataDb} metadataDb metadata db + */ +var FeatureDao = function(geoPackage, table, geometryColumns, metadataDb) { + UserDao.call(this, geoPackage, table); + this.geometryColumns = geometryColumns; + this.metadataDb = metadataDb; + this.dataColumnsDao = new DataColumnsDao(geoPackage); + this.featureTableIndex = new FeatureTableIndex(geoPackage, this); + var dao = geoPackage.getGeometryColumnsDao(); + if (!dao.getContents(geometryColumns)) { + throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Contents'); + } + if (!dao.getSrs(geometryColumns)) { + throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Spatial Reference System'); + } + this.projection = dao.getProjection(geometryColumns); +} + +util.inherits(FeatureDao, UserDao); + +FeatureDao.prototype.createObject = function (results) { + if (results) { + return this.getRow(results); + } + return this.newRow(); +}; + +FeatureDao.prototype.getContents = function() { + var dao = this.geoPackage.getGeometryColumnsDao(); + return dao.getContents(this.geometryColumns); +} + +/** + * Get the feature table + * @return {FeatureTable} the feature table + */ +FeatureDao.prototype.getFeatureTable = function () { + return this.table; +}; + +/** + * Create a new feature row with the column types and values + * @param {Array} columnTypes column types + * @param {Array} values values + * @return {FeatureRow} feature row + */ +FeatureDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new FeatureRow(this.getFeatureTable(), columnTypes, values); +}; + +/** + * Create a new feature row + * @return {FeatureRow} feature row + */ +FeatureDao.prototype.newRow = function () { + return new FeatureRow(this.getFeatureTable()); +}; + +/** + * Get the geometry column name + * @return {string} the geometry column name + */ +FeatureDao.prototype.getGeometryColumnName = function () { + return this.geometryColumns.column_name; +}; + +/** + * Get the geometry types + * @return {WKBGeometryType} well known binary geometry type + */ +FeatureDao.prototype.getGeometryType = function () { + return this.geometryColumns.getGeometryType(); +}; + +FeatureDao.prototype.getSrs = function() { + return this.geoPackage.getGeometryColumnsDao().getSrs(this.geometryColumns); +}; + +/** + * Determine if the feature table is indexed + * @param {Function} callback called with err if one occurred and true or false indicating the indexed status + */ +FeatureDao.prototype.isIndexed = function() { + return this.featureTableIndex.isIndexed(); +} + +/** + * Query for count in bounding box + * @param boundingBox + * @returns {Number}} + */ +FeatureDao.prototype.countWebMercatorBoundingBox = function(boundingBox) { + var srs = this.getSrs(); + return this.featureTableIndex.countWithBoundingBox(boundingBox, 'EPSG:3857'); +} + +FeatureDao.prototype.fastQueryWebMercatorBoundingBox = function(boundingBox, featureRowCallback) { + var srs = this.getSrs(); + var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857'); + var thisgetRow = this.getRow.bind(this); + + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var featureRow = thisgetRow(nextRow.value); + + return { + value: featureRow, + done: false + }; + } else { + return { + done: true + } + } + } + } +} + +FeatureDao.prototype.queryIndexedFeaturesWithWebMercatorBoundingBox = function(boundingBox) { + var srs = this.getSrs(); + var projection = this.projection; + + var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857'); + var thisgetRow = this.getRow.bind(this); + var projectedBoundingBox = boundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326'); + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var featureRow; + var geometry; + + while(!nextRow.done && !geometry) { + featureRow = thisgetRow(nextRow.value); + geometry = reprojectFeature(featureRow, srs, projection); + geometry = verifyFeature(geometry, projectedBoundingBox); + if (geometry) { + geometry.properties = featureRow.values; + return { + value: featureRow, + done: false + }; + } else { + nextRow = iterator.next(); + } + } + } + return { + done: true + } + } + } +} + +/** + * Calls geoJSONFeatureCallback with the geoJSON of each matched feature (always in 4326 projection) + * @param {BoundingBox} boundingBox 4326 bounding box to query + * @param {function} geoJSONFeatureCallback called with err, geoJSON, doneCallback + * @param {function} doneCallback called when all rows have been returned + */ +FeatureDao.prototype.queryForGeoJSONIndexedFeaturesWithBoundingBox = function(boundingBox, skipVerification) { + + var columns = []; + var columnMap = {}; + + var srs = this.getSrs(); + var projection = this.projection; + this.table.columns.forEach(function(column) { + var dataColumn = this.dataColumnsDao.getDataColumns(this.table.table_name, column.name); + columns.push({ + index: column.index, + name: column.name, + max: column.max, + min: column.min, + notNull: column.notNull, + primaryKey: column.primaryKey, + dataType: column.dataType ? DataTypes.name(column.dataType) : '', + displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name, + dataColumn: dataColumn + }); + columnMap[column.name] = columns[columns.length-1]; + }.bind(this)); + + var verifiedCount = 0; + var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326')[Symbol.iterator](); + var thisgetRow = this.getRow.bind(this); + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var featureRow; + var geometry; + + while(!nextRow.done && !geometry) { + featureRow = thisgetRow(nextRow.value); + geometry = reprojectFeature(featureRow, srs, projection); + if (!skipVerification) { + geometry = verifyFeature(geometry, boundingBox); + } + if (geometry) { + var geoJson = { + properties: {}, + geometry: geometry + }; + for (var key in featureRow.values) { + if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') { + if (key.toLowerCase() == '_feature_id') { + geoJson.id = featureRow.values[key]; + } else if (key.toLowerCase() == '_properties_id') { + geoJson.properties[key.substring(12)] = featureRow.values[key]; + } else { + geoJson.properties[columnMap[key].displayName] = featureRow.values[key]; + } + } + } + geoJson.id = geoJson.id || featureRow.getId(); + return { + value: geoJson, + done: false + }; + } else { + nextRow = iterator.next(); + } + } + } + return { + done: true + } + }.bind(this) + } +} + +function reprojectFeature(featureRow, srs, projection) { + var geometry = featureRow.getGeometry().toGeoJSON(); + if (srs.organization + ':' + srs.organization_coordsys_id != 'EPSG:4326') { + geometry = reproject.reproject(geometry, projection, 'EPSG:4326'); + } + return geometry; +} + +function verifyFeature(geometry, boundingBox) { + try { + if (geometry.type == 'Point') { + return geometry; + } else if (geometry.type == 'LineString') { + var intersect = LineIntersect(geometry, boundingBox.toGeoJSON().geometry); + if (intersect.features.length) { + return geometry; + } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) { + return geometry; + } + } else if (geometry.type == 'Polygon') { + var polyIntersect = Intersect(geometry, boundingBox.toGeoJSON().geometry); + if (polyIntersect) { + return geometry; + } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) { + return geometry; + } + } + } catch (e) {} +} + +FeatureDao.prototype.queryIndexedFeaturesWithBoundingBox = function(boundingBox) { + var srs = this.getSrs(); + var projection = this.projection; + + var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326'); + var thisgetRow = this.getRow.bind(this); + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var featureRow; + var geometry; + + while(!nextRow.done && !geometry) { + featureRow = thisgetRow(nextRow.value); + geometry = reprojectFeature(featureRow, srs, projection); + geometry = verifyFeature(geometry, boundingBox); + if (geometry) { + geometry.properties = featureRow.values; + return { + value: featureRow, + done: false + }; + } else { + nextRow = iterator.next(); + } + } + } + return { + done: true + } + }.bind(this) + } +} + +FeatureDao.prototype.getBoundingBox = function () { + var contents = this.getContents(); + return new BoundingBox(contents.min_x, contents.max_x, contents.min_y, contents.max_y); +}; + +module.exports = FeatureDao; + +},{"../../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){ +/** + * featureRow module. + * @module features/user/featureRow + */ + +var UserRow = require('../../user/userRow') + , FeatureColumn = require('./featureColumn') + , GeometryData = require('../../geom/geometryData') + , DataTypes = require('../../db/dataTypes'); + +var util = require('util'); + +/** + * Feature Row containing the values from a single result set row + * @param {FeatureTable} featureTable feature table + * @param {Array} columnTypes column types + * @param {Array} values values + */ +var FeatureRow = function(featureTable, columnTypes, values) { + UserRow.call(this, featureTable, columnTypes, values); + this.featureTable = featureTable; +} + +util.inherits(FeatureRow, UserRow); + +/** + * Get the geometry column index + * @return {Number} geometry column index + */ +FeatureRow.prototype.getGeometryColumnIndex = function () { + return this.featureTable.geometryIndex; +}; + +/** + * Get the geometry column + * @return {FeatureColumn} geometry column + */ +FeatureRow.prototype.getGeometryColumn = function () { + return this.featureTable.getGeometryColumn(); +}; + +/** + * Get the geometry + * @return {Buffer} geometry data + */ +FeatureRow.prototype.getGeometry = function () { + return this.getValueWithIndex(this.featureTable.geometryIndex); +}; + +/** + * Get the geometry's type + * @return {String} geometry data + */ +FeatureRow.prototype.getGeometryType = function () { + var geometryType = null; + var geometry = this.getValueWithIndex(this.featureTable.geometryIndex); + if (geometry !== null) { + geometryType = geometry.toGeoJSON().type; + } + return geometryType; +}; + +/** + * set the geometry + * @param {Buffer} geometryData geometry data + */ +FeatureRow.prototype.setGeometry = function (geometryData) { + this.setValueWithIndex(this.featureTable.geometryIndex, geometryData); +}; + +FeatureRow.prototype.toObjectValue = function (index, value) { + var objectValue = value; + var column = this.getColumnWithIndex(index); + if (column.isGeometry() && value) { + objectValue = new GeometryData(value); + } + return objectValue; +}; + +FeatureRow.prototype.toDatabaseValue = function(columnName) { + var column = this.getColumnWithColumnName(columnName); + var value = this.getValueWithColumnName(columnName); + if (column.isGeometry() && value.toData) { + return value.toData(); + } else if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) { + return value === true ? 1 : 0; + } + + return value; +} + +module.exports = FeatureRow; + +},{"../../db/dataTypes":14,"../../geom/geometryData":73,"../../user/userRow":107,"./featureColumn":65,"util":343}],68:[function(require,module,exports){ +/** + * featureTable module. + * @module features/user/featureTable + */ + +var UserTable = require('../../user/userTable'); + +var util = require('util'); + +/** + * Represents a user feature table + * @param {string} tableName table name + * @param {array} columns feature columns + */ +var FeatureTable = function(tableName, columns) { + UserTable.call(this, tableName, columns); + var geometry = undefined; + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + if (column.isGeometry()) { + this.duplicateCheck(column.index, geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY'); + geometry = column.index; + } + } + this.missingCheck(geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY'); + this.geometryIndex = geometry; +} + +util.inherits(FeatureTable, UserTable); + +/** + * Get the geometry feature column + * @return {FeatureColumn} geometry feature column + */ +FeatureTable.prototype.getGeometryColumn = function () { + return this.getColumnWithIndex(this.geometryIndex); +}; + +FeatureTable.prototype.getTableType = function() { + return UserTable.FEATURE_TABLE; +} + +/** + * The FeatureTable + * @type {FeatureTable} + */ +module.exports = FeatureTable; + +},{"../../user/userTable":108,"util":343}],69:[function(require,module,exports){ +/** + * featureTableReader module. + * @module features/user/featureTableReader + */ + +var UserTableReader = require('../../user/userTableReader') + , FeatureTable = require('./featureTable') + , FeatureColumn = require('./featureColumn') + , GeometryColumnsDao = require('../columns').GeometryColumnsDao + , DataTypes = require('../../db/dataTypes') + , wkb = require('../../wkb'); + +var util = require('util'); + +/** +* Reads the metadata from an existing feature table +* @class FeatureTableReader +* @extends {module:user~UserTableReader} +*/ +var FeatureTableReader = function(tableNameOrGeometryColumns) { + if (util.isString(tableNameOrGeometryColumns)) { + UserTableReader.call(this, tableNameOrGeometryColumns); + } else { + UserTableReader.call(this, tableNameOrGeometryColumns.table_name); + this.geometryColumns = tableNameOrGeometryColumns; + } +} + +util.inherits(FeatureTableReader, UserTableReader); + +FeatureTableReader.prototype.readFeatureTable = function (geoPackage) { + if (!this.geometryColumns) { + var gcd = new GeometryColumnsDao(geoPackage); + this.geometryColumns = gcd.queryForTableName(this.table_name); + return this.readTable(geoPackage.getDatabase()); + } else { + return this.readTable(geoPackage.getDatabase()); + } +}; + +FeatureTableReader.prototype.createTable = function (tableName, columns) { + return new FeatureTable(tableName, columns); +}; + +FeatureTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValue, primaryKey) { + var geometry = name === this.geometryColumns.column_name; + var geometryType = undefined; + var dataType = undefined; + if (geometry) { + geometryType = wkb.fromName(type); + } else { + dataType = DataTypes.fromName(type); + } + var column = new FeatureColumn(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType); + + return column; +}; + +/** + * The FeatureTableReader + * @type {FeatureTableReader} + */ +module.exports = FeatureTableReader; + +},{"../../db/dataTypes":14,"../../user/userTableReader":109,"../../wkb":111,"../columns":64,"./featureColumn":65,"./featureTable":68,"util":343}],70:[function(require,module,exports){ + +/** + * @module geoPackage + */ + +var SpatialReferenceSystemDao = require('./core/srs').SpatialReferenceSystemDao + , GeometryColumnsDao = require('./features/columns').GeometryColumnsDao + , FeatureDao = require('./features/user/featureDao') + , FeatureTableReader = require('./features/user/featureTableReader') + , ContentsDao = require('./core/contents').ContentsDao + , Contents = require('./core/contents').Contents + , TileMatrixSetDao = require('./tiles/matrixset').TileMatrixSetDao + , TileMatrixSet = require('./tiles/matrixset').TileMatrixSet + , TileMatrixDao = require('./tiles/matrix').TileMatrixDao + , TileMatrix = require('./tiles/matrix').TileMatrix + , TileTableReader = require('./tiles/user/tileTableReader') + , TileDao = require('./tiles/user/tileDao') + , TileTable = require('./tiles/user/tileTable') + , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils') + , TableCreator = require('./db/tableCreator') + , UserTable = require('./user/userTable') + , FeatureTable = require('./features/user/featureTable') + , DataColumnsDao = require('./dataColumns').DataColumnsDao + , DataColumnConstraintsDao = require('./dataColumnConstraints').DataColumnConstraintsDao + , MetadataDao = require('./metadata').MetadataDao + , MetadataReferenceDao = require('./metadata/reference').MetadataReferenceDao + , ExtensionDao = require('./extension').ExtensionDao + , CrsWktExtension = require('./extension/crsWkt').CrsWktExtension + , SchemaExtension = require('./extension/schema').SchemaExtension + , RelatedTablesExtension = require('./extension/relatedTables') + , TableIndexDao = require('./extension/index/tableIndex').TableIndexDao + , GeometryIndexDao = require('./extension/index/geometryIndex').GeometryIndexDao + , ExtendedRelationDao = require('./extension/relatedTables/extendedRelation').ExtendedRelationDao + , ContentsIdDao = require('./extension/contents/contentsIdDao') + , ContentsIdExtension = require('./extension/contents/.') + , FeatureStyleExtension = require('./extension/style/.') + , AttributeTable = require('./attributes/attributeTable') + , AttributeTableReader = require('./attributes/attributeTableReader') + , AttributeDao = require('./attributes/attributeDao') + , DataTypes = require('./db/dataTypes'); + +var proj4 = require('proj4'); + +proj4 = 'default' in proj4 ? proj4['default'] : proj4; // Module loading hack + +var defs = require('./proj4Defs'); +for (var name in defs) { + if (defs[name]) { + proj4.defs(name, defs[name]); + } +} + +/** + * A `GeoPackage` instance is the interface to a physical GeoPackage SQLite + * database. + * @param {string} name + * @param {string} path + * @param {module:db/geoPackageConnection~GeoPackageConnection} connection + * @class + */ +var GeoPackage = module.exports = function(name, path, connection) { + this.name = name; + this.path = path; + this.connection = connection; + this.tableCreator = new TableCreator(this); +} + +GeoPackage.loadProjections = function(items) { + if (!(items instanceof Array)) throw new Error('Invalid array of projections'); + for (var i = 0; i < items.length; i++) { + if (!defs[items[i]]) throw new Error('Projection not found'); + this.addProjection(items[i], defs[items[i]]); + } +} + +GeoPackage.addProjection = function(name, definition) { + if (!name || ! definition) throw new Error('Invalid projection name/definition'); + proj4.defs(''+name, ''+definition); +} + +GeoPackage.hasProjection = function(name) { + return proj4.defs(''+name); +} + +GeoPackage.prototype.close = function() { + this.connection.close(); +} + +GeoPackage.prototype.getDatabase = function() { + return this.connection; +} + +GeoPackage.prototype.getPath = function() { + return this.path; +} + +GeoPackage.prototype.export = function(callback) { + this.connection.export(callback); +} + +/** + * Get the GeoPackage name + * @return {String} the GeoPackage name + */ +GeoPackage.prototype.getName = function() { + return this.name; +} + +/** + * @returns {module:core/srs~SpatialReferenceSystemDao} the DAO to access the [SRS table]{@link module:core/srs~SpatialReferenceSystem} in this `GeoPackage` + */ +GeoPackage.prototype.getSpatialReferenceSystemDao = function() { + return this.spatialReferenceSystemDao || (this.spatialReferenceSystemDao = new SpatialReferenceSystemDao(this)); +} + +/** + * @returns {module:core/contents~ContentsDao} the DAO to access the [contents table]{@link module:core/contents~Contents} in this `GeoPackage` + */ +GeoPackage.prototype.getContentsDao = function() { + return this.contentsDao || (this.contentsDao = new ContentsDao(this)); +} + +/** + * @returns {module:tiles/matrixset~TileMatrixSetDao} the DAO to access the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet} in this `GeoPackage` + */ +GeoPackage.prototype.getTileMatrixSetDao = function () { + return this.tileMatrixSetDao || (this.tileMatrixSetDao = new TileMatrixSetDao(this)); +}; + +/** + * @returns {module:tiles/matrixset~TileMatrixDao} the DAO to access the [tile matrix]{@link module:tiles/matrixset~TileMatrix} in this `GeoPackage` + */ +GeoPackage.prototype.getTileMatrixDao = function() { + return this.tileMatrixDao || (this.tileMatrixDao = new TileMatrixDao(this)); +} + +GeoPackage.prototype.getDataColumnsDao = function() { + return this.dataColumnsDao || (this.dataColumnsDao = new DataColumnsDao(this)); +} + +GeoPackage.prototype.getExtensionDao = function() { + return this.extensionDao || (this.extensionDao = new ExtensionDao(this)); +} + +GeoPackage.prototype.getTableIndexDao = function() { + return this.tableIndexDao || (this.tableIndexDao = new TableIndexDao(this)); +} + +GeoPackage.prototype.getGeometryColumnsDao = function () { + return this.geometryColumnsDao || (this.geometryColumnsDao = new GeometryColumnsDao(this)); +}; + +GeoPackage.prototype.getDataColumnConstraintsDao = function () { + return this.dataColumnConstraintsDao || (this.dataColumnConstraintsDao = new DataColumnConstraintsDao(this)); +}; + +GeoPackage.prototype.getMetadataReferenceDao = function () { + return this.metadataReferenceDao || (this.metadataReferenceDao = new MetadataReferenceDao(this)); +}; + +GeoPackage.prototype.getMetadataDao = function () { + return this.metadataDao || (this.metadataDao = new MetadataDao(this)); +}; + +GeoPackage.prototype.getExtendedRelationDao = function() { + return this.extendedRelationDao || (this.extendedRelationDao = new ExtendedRelationDao(this)); +} + +GeoPackage.prototype.getContentsIdDao = function() { + return this.contentsIdDao || (this.contentsIdDao = new ContentsIdDao(this)); +} + +GeoPackage.prototype.getContentsIdExtension = function() { + return this.contentsIdExtension || (this.contentsIdExtension = new ContentsIdExtension(this)); +} + +GeoPackage.prototype.getFeatureStyleExtension = function() { + return this.featureStyleExtension || (this.featureStyleExtension = new FeatureStyleExtension(this)); +} + +GeoPackage.prototype.getGeometryIndexDao = function(featureDao) { + return new GeometryIndexDao(this, featureDao); +} + +GeoPackage.prototype.getRelatedTablesExtension = function() { + return this.relatedTablesExtension || (this.relatedTablesExtension = new RelatedTablesExtension(this)); +} + +GeoPackage.prototype.getSrs = function(srsId) { + var dao = this.getSpatialReferenceSystemDao(); + return dao.queryForId(srsId); +} + +GeoPackage.prototype.createRequiredTables = function() { + var geopackage = this; + return this.tableCreator.createRequired() + .then(function(results) { + return geopackage; + }); +} + +GeoPackage.prototype.createSupportedExtensions = function() { + var crs = new CrsWktExtension(this); + crs.getOrCreateExtension(); + var schema = new SchemaExtension(this); + schema.getOrCreateExtension(); + return this; +} + +/** + * @returns {module:tiles/user/tileDao~TileDao} the `TileDao` to access [tiles]{@link module:tiles/user/tileTable} + */ +GeoPackage.prototype.getTileDaoWithTileMatrixSet = function (tileMatrixSet) { + var tileMatrices = []; + var tileMatrixDao = this.getTileMatrixDao(); + 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'); + results.forEach(function(result) { + var tm = new TileMatrix(); + tileMatrixDao.populateObjectFromResult(tm, result); + tileMatrices.push(tm); + }); + var tableReader = new TileTableReader(tileMatrixSet); + var tileTable = tableReader.readTileTable(this); + return new TileDao(this, tileTable, tileMatrixSet, tileMatrices); +}; + +GeoPackage.prototype.getTileDaoWithContents = function (contents) { + var dao = this.getContentsDao(); + var tileMatrixSet = dao.getTileMatrixSet(contents); + return this.getTileDaoWithTileMatrixSet(tileMatrixSet); +}; + +GeoPackage.prototype.getTileDao = function (tableName) { + var tms = this.getTileMatrixSetDao(); + var results = tms.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, tableName); + if (results.length > 1) { + throw new Error('Unexpected state. More than one Tile Matrix Set matched for table name: ' + tableName + ', count: ' + results.length); + } else if (results.length === 0) { + throw new Error('No Tile Matrix found for table name: ' + tableName); + } + var tileMatrixSet = new TileMatrixSet(); + tms.populateObjectFromResult(tileMatrixSet, results[0]); + return this.getTileDaoWithTileMatrixSet(tileMatrixSet); +}; + +/** + * Return a hash containing arrays of table names grouped under keys `features`, + * `tiles`, and `attributes`. + * @return {{features: string[], tiles: string[], attributes: string[]}} + */ +GeoPackage.prototype.getTables = function() { + var tables = {}; + var featureTables = this.getFeatureTables(); + tables.features = featureTables; + var tileTables = this.getTileTables(); + tables.tiles = tileTables; + var attributesTables = this.getAttributesTables(); + tables.attributes = attributesTables; + return tables; +}; + +GeoPackage.prototype.getAttributesTables = function() { + return this.getContentsDao().getTables(ContentsDao.GPKG_CDT_ATTRIBUTES_NAME); +} + +GeoPackage.prototype.hasAttributeTable = function(attributeTableName) { + var tables = this.getAttributesTables(); + return tables && tables.indexOf(attributeTableName) != -1; +} + +/** + * Get the tile tables + * @param {callback} callback called with an error if one occurred and the array of {TileTable} names + */ +GeoPackage.prototype.getTileTables = function () { + var tms = this.getTileMatrixSetDao(); + if (!tms.isTableExists()) { + return []; + } + return tms.getTileTables(); +}; + +/** + * Checks if the tile table exists in the GeoPackage + * @param {String} tileTableName name of the table to query for + * @param {Function} callback called with an error if one occurred and true or false for the existence of the table + */ +GeoPackage.prototype.hasTileTable = function(tileTableName) { + var tables = this.getTileTables(); + return tables && tables.indexOf(tileTableName) != -1; +}; + +/** + * Checks if the feature table exists in the GeoPackage + * @param {GeoPackage} geopackage open GeoPackage object + * @param {String} featureTableName name of the table to query for + * @param {Function} callback called with an error if one occurred and true or false for the existence of the table + */ +GeoPackage.prototype.hasFeatureTable = function(featureTableName) { + var tables = this.getFeatureTables(); + return tables && tables.indexOf(featureTableName) != -1; +}; + +/** + * Get the feature tables + * @param {callback} callback called with an error if one occurred and the array of {FeatureTable} names + */ +GeoPackage.prototype.getFeatureTables = function () { + var gcd = this.getGeometryColumnsDao(); + if (!gcd.isTableExists()) { + return []; + } + return gcd.getFeatureTables(); +}; + +GeoPackage.prototype.isTable = function(tableName) { + return !!this.connection.tableExists(tableName); +} + +GeoPackage.prototype.isTableType = function(type, tableName) { + return type === this.getTableType(tableName); +} + +GeoPackage.prototype.getTableType = function(tableName) { + var contents = this.getTableContents(tableName); + if (contents) { + return contents.data_type; + } +} + +GeoPackage.prototype.getTableContents = function(tableName) { + return this.getContentsDao().queryForId(tableName); +} + +GeoPackage.prototype.deleteTable = function(tableName) { + this.connection.dropTable(tableName); +} + +GeoPackage.prototype.getTableCreator = function() { + return this.tableCreator; +} + +GeoPackage.prototype.index = function() { + var tables = this.getFeatureTables(); + + return tables.reduce(function(sequence, table) { + return sequence.then(function() { + return this.indexFeatureTable(table) + .then(function(indexed) { + if (indexed) { + return true; + } else { + throw new Error('Unable to index table ' + table); + } + }); + }.bind(this)) + }.bind(this), Promise.resolve()); +} + +GeoPackage.prototype.indexFeatureTable = function(table, progress) { + var featureDao = this.getFeatureDao(table); + var fti = featureDao.featureTableIndex; + return new Promise(function(resolve, reject) { + var tableIndex = fti.getTableIndex(); + if (tableIndex) { + return resolve(true); + } + resolve(fti.index(progress)); + }); +} + +/** + * Get a Feature DAO from Geometry Columns + * + * @param {GeometryColumns} geometryColumns Geometry Columns + * @param {callback} callback called with an error if one occurred and the {FeatureDao} + */ +GeoPackage.prototype.getFeatureDaoWithGeometryColumns = function (geometryColumns) { + if (!geometryColumns) { + throw new Error('Non null Geometry Columns is required to create Feature DAO'); + } + + var tableReader = new FeatureTableReader(geometryColumns); + var featureTable = tableReader.readFeatureTable(this); + var dao = new FeatureDao(this, featureTable, geometryColumns, this.metadataDb); + return dao; +}; + +/** + * Get a Feature DAO from Contents + * @param {Contents} contents Contents + * @param {Function} callback callback called with an error if one occurred and the {FeatureDao} + */ +GeoPackage.prototype.getFeatureDaoWithContents = function (contents) { + var dao = this.getContentsDao(); + var columns = dao.getGeometryColumns(contents); + return this.getFeatureDaoWithGeometryColumns(columns); +}; + +/** + * Get a Feature DAO from Contents + * @param {string} tableName table name + * @param {Function} callback callback called with an error if one occurred and the {FeatureDao} + */ +GeoPackage.prototype.getFeatureDao = function (tableName) { + var dao = this.getGeometryColumnsDao(); + var geometryColumns = dao.queryForTableName(tableName); + if (!geometryColumns) { + throw new Error('No Feature Table exists for table name: ' + tableName); + } + return this.getFeatureDaoWithGeometryColumns(geometryColumns); +}; + +/** + * Queries for GeoJSON features in a feature table + * @param {String} tableName Table name to query + * @param {BoundingBox} boundingBox BoundingBox to query + * @param {Function} callback Caled with err, featureArray + */ +GeoPackage.prototype.queryForGeoJSONFeaturesInTable = function(tableName, boundingBox) { + var featureDao = this.getFeatureDao(tableName); + var features = []; + var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox); + for (var feature of iterator) { + features.push(feature); + } + return features; +} + +/** + * iterates GeoJSON features in a feature table within a bounding box + * @param {String} tableName Table name to query + * @param {BoundingBox} boundingBox BoundingBox to query + * @param {Function} rowCallback Caled with err, geoJSON + * @param {Function} doneCallback Caled with err if one occurred + */ +GeoPackage.prototype.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(tableName, boundingBox) { + var featureDao = this.getFeatureDao(tableName); + return featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox); +} + +/** + * Create the Geometry Columns table if it does not already exist + * @param {Function} callback called with an error if one occurred otherwise the table now exists + */ +GeoPackage.prototype.createGeometryColumnsTable = function () { + var dao = this.getGeometryColumnsDao(); + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createGeometryColumns(); +}; + +/** + * Get a Attribute DAO + * @param {string} tableName table name + * @param {Function} callback callback called with an error if one occurred and the {AttributeDao} + */ +GeoPackage.prototype.getAttributeDaoWithTableName = function (tableName) { + var dao = this.getContentsDao(); + var contents = dao.queryForId(tableName); + return this.getAttributeDaoWithContents(contents); +}; + +/** + * Get a Attribute DAO + * @param {Contents} contents Contents + * @param {Function} callback callback called with an error if one occurred and the {AttributeDao} + */ +GeoPackage.prototype.getAttributeDaoWithContents = function (contents) { + if (!contents) { + throw new Error('Non null Contents is required to create an Attributes DAO'); + } + + var reader = new AttributeTableReader(contents.table_name); + var table = reader.readTable(this.connection); + table.setContents(contents); + return new AttributeDao(this, table); +} + +GeoPackage.prototype.createAttributeTable = function(tableName, columns, dataColumns) { + return Promise.resolve() + .then(function() { + var attributeTable = new AttributeTable(tableName, columns); + var result = this.tableCreator.createUserTable(attributeTable); + var contents = new Contents(); + contents.table_name = tableName; + contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME; + contents.identifier = tableName; + contents.last_change = new Date().toISOString(); + + return this.getContentsDao().create(contents); + }.bind(this)) + .then(function() { + if (dataColumns) { + return this.createDataColumns() + .then(function() { + var dataColumnsDao = this.getDataColumnsDao(); + dataColumns.forEach(function(dataColumn) { + dataColumnsDao.create(dataColumn); + }); + }.bind(this)); + } + }.bind(this)) + .then(function() { + return true; + }); +} + +/** + * Create the given {@link module:features/user/featureTable~FeatureTable} + * @param {FeatureTable} featureTable feature table + */ +GeoPackage.prototype.createFeatureTable = function(featureTable) { + return this.tableCreator.createUserTable(featureTable); +}; + +GeoPackage.prototype.createFeatureTableWithGeometryColumns = function(geometryColumns, boundingBox, srsId, columns) { + return this.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumns, boundingBox, srsId, columns, undefined); +}; + +GeoPackage.prototype.createFeatureTableWithGeometryColumnsAndDataColumns = function(geometryColumns, boundingBox, srsId, columns, dataColumns) { + return this.createGeometryColumnsTable() + .then(function(result) { + var featureTable = new FeatureTable(geometryColumns.table_name, columns); + var result = this.createFeatureTable(featureTable); + var contents = new Contents(); + contents.table_name = geometryColumns.table_name; + contents.data_type = ContentsDao.GPKG_CDT_FEATURES_NAME; + contents.identifier = geometryColumns.table_name; + contents.last_change = new Date().toISOString(); + contents.min_x = boundingBox.minLongitude; + contents.min_y = boundingBox.minLatitude; + contents.max_x = boundingBox.maxLongitude; + contents.max_y = boundingBox.maxLatitude; + contents.srs_id = srsId; + + this.getContentsDao().create(contents); + geometryColumns.srs_id = srsId; + return this.getGeometryColumnsDao().create(geometryColumns); + }.bind(this)) + .then(function() { + if (dataColumns) { + return this.createDataColumns() + .then(function() { + var dataColumnsDao = this.getDataColumnsDao(); + dataColumns.forEach(function(dataColumn) { + dataColumnsDao.create(dataColumn); + }); + }.bind(this)); + } + }.bind(this)) + .then(function() { + return true; + }); +}; + +/** + * Create the Tile Matrix Set table if it does not already exist + * @param {Function} callback called with an error if one occurred otherwise the table now exists + */ +GeoPackage.prototype.createTileMatrixSetTable = function() { + var dao = this.getTileMatrixSetDao(); + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createTileMatrixSet(); +} + +/** + * Create the Tile Matrix table if it does not already exist + * @param {Function} callback called with an error if one occurred otherwise the table now exists + */ +GeoPackage.prototype.createTileMatrixTable = function() { + var dao = this.getTileMatrixDao(); + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createTileMatrix(); +}; + +/** + * Create the given tile table in this GeoPackage. + * + * @param {module:tiles/user/tileTable~TileTable} tileTable + * @returns {@link module:db/tableCreator~TableCreator#createUserTable} + */ +GeoPackage.prototype.createTileTable = function(tileTable) { + return this.tableCreator.createUserTable(tileTable); +}; + +/** + * Create a new [tile table]{@link module:tiles/user/tileTable~TileTable} in this GeoPackage. + * + * @param {String} tableName tile table name + * @param {BoundingBox} contentsBoundingBox bounding box of the contents table + * @param {Number} contentsSrsId srs id of the contents table + * @param {BoundingBox} tileMatrixSetBoundingBox bounding box of the matrix set + * @param {Number} tileMatrixSetSrsId srs id of the matrix set + * @returns {Promise} `Promise` of the created {@link module:tiles/matrixset~TileMatrixSet} + */ +GeoPackage.prototype.createTileTableWithTableName = function(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId) { + const columns = TileTable.createRequiredColumns(); + const tileTable = new TileTable(tableName, columns); + const contents = new Contents(); + contents.table_name = tableName; + contents.data_type = ContentsDao.GPKG_CDT_TILES_NAME; + contents.identifier = tableName; + contents.last_change = new Date().toISOString(); + contents.min_x = contentsBoundingBox.minLongitude; + contents.min_y = contentsBoundingBox.minLatitude; + contents.max_x = contentsBoundingBox.maxLongitude; + contents.max_y = contentsBoundingBox.maxLatitude; + contents.srs_id = contentsSrsId; + + const tileMatrixSet = new TileMatrixSet(); + tileMatrixSet.setContents(contents); + tileMatrixSet.srs_id = tileMatrixSetSrsId; + tileMatrixSet.min_x = tileMatrixSetBoundingBox.minLongitude; + tileMatrixSet.min_y = tileMatrixSetBoundingBox.minLatitude; + tileMatrixSet.max_x = tileMatrixSetBoundingBox.maxLongitude; + tileMatrixSet.max_y = tileMatrixSetBoundingBox.maxLatitude; + + return this.createTileMatrixSetTable() + .then(function() { + return this.createTileMatrixTable(); + }.bind(this)) + .then(function() { + return this.createTileTable(tileTable); + }.bind(this)) + .then(function() { + return this.getContentsDao().create(contents); + }.bind(this)) + .then(function() { + return this.getTileMatrixSetDao().create(tileMatrixSet); + }.bind(this)) + .then(function() { + return tileMatrixSet; + }); +}; + +/** + * Create the tables and rows necessary to store tiles in a {@link module:tiles/matrixset~TileMatrixSet}. + * This will create a [tile matrix row]{@link module:tiles/matrix~TileMatrix} + * for every integral zoom level in the range `[minZoom..maxZoom]`. + * + * @param {BoundingBox} epsg3857TileBoundingBox + * @param {module:tiles/matrixset~TileMatrixSet} tileMatrixSet + * @param {number} minZoom + * @param {number} maxZoom + * @param {number} [tileSize=256] optional tile size in pixels + * @returns {module:geoPackage~GeoPackage} `this` `GeoPackage` + */ +GeoPackage.prototype.createStandardWebMercatorTileMatrix = function(epsg3857TileBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize) { + tileSize = tileSize || 256; + var tileMatrixDao = this.getTileMatrixDao(); + + for (var zoom = minZoom; zoom <= maxZoom; zoom++) { + var box = TileBoundingBoxUtils.webMercatorTileBox(epsg3857TileBoundingBox, zoom); + var matrixWidth = (box.maxX - box.minX) + 1; + var matrixHeight = (box.maxY - box.minY) + 1; + + var pixelXSize = ((epsg3857TileBoundingBox.maxLongitude - epsg3857TileBoundingBox.minLongitude) / matrixWidth) / tileSize; + var pixelYSize = ((epsg3857TileBoundingBox.maxLatitude - epsg3857TileBoundingBox.minLatitude) / matrixHeight) / tileSize; + + var tileMatrix = new TileMatrix(); + tileMatrix.table_name = tileMatrixSet.table_name; + tileMatrix.zoom_level = zoom; + tileMatrix.matrix_width = matrixWidth; + tileMatrix.matrix_height = matrixHeight; + tileMatrix.tile_width = tileSize; + tileMatrix.tile_height = tileSize; + tileMatrix.pixel_x_size = pixelXSize; + tileMatrix.pixel_y_size = pixelYSize; + tileMatrixDao.create(tileMatrix); + } + + return this; +}; + +/** + * Adds a tile to the GeoPackage + * @param {object} tile Byte array or Buffer containing the tile bytes + * @param {String} tableName Table name to add the tile to + * @param {Number} zoom zoom level of this tile + * @param {Number} tileRow row of this tile + * @param {Number} tileColumn column of this tile + */ +GeoPackage.prototype.addTile = function(tileStream, tableName, zoom, tileRow, tileColumn) { + var tileDao = this.getTileDao(tableName); + var newRow = tileDao.newRow(); + newRow.setZoomLevel(zoom); + newRow.setTileColumn(tileColumn); + newRow.setTileRow(tileRow); + newRow.setTileData(tileStream); + return tileDao.create(newRow); +}; + +/** + * Create the Data Columns table if it does not already exist + * @param {Function} callback called with an error if one occurred otherwise the table now exists + */ +GeoPackage.prototype.createDataColumns = function() { + var dao = this.getDataColumnsDao(); + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createDataColumns(); +}; + +/** + * Create the Data Column Constraints table if it does not already exist + * @param {Function} callback called with an error if one occurred otherwise the table now exists + */ +GeoPackage.prototype.createDataColumnConstraintsTable = function () { + var dao = this.getDataColumnConstraintsDao(); + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createDataColumnConstraints(); +}; + +GeoPackage.prototype.createMetadataTable = function () { + var dao = this.getMetadataDao() + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createMetadata(); +}; + +GeoPackage.prototype.createMetadataReferenceTable = function () { + var dao = this.getMetadataReferenceDao() + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createMetadataReference(); +}; + +GeoPackage.prototype.createExtensionTable = function () { + var dao = this.getExtensionDao() + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createExtensions(); +}; + +GeoPackage.prototype.createTableIndexTable = function () { + var dao = this.getTableIndexDao(); + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createTableIndex(); +}; + +GeoPackage.prototype.createGeometryIndexTable = function() { + var dao = this.getGeometryIndexDao(); + if (dao.isTableExists()) { + return Promise.resolve().then(function() { return true; }); + } + return this.tableCreator.createGeometryIndex(); +}; + +GeoPackage.prototype.createStyleMappingTable = function(tableName, columns, dataColumns) { + return Promise.resolve() + .then(function() { + var attributeTable = new StyleMappingTable(tableName, columns); + var result = this.tableCreator.createUserTable(attributeTable); + var contents = new Contents(); + contents.table_name = tableName; + contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME; + contents.identifier = tableName; + contents.last_change = new Date().toISOString(); + + return this.getContentsDao().create(contents); + }.bind(this)) + .then(function() { + if (dataColumns) { + return this.createDataColumns() + .then(function() { + var dataColumnsDao = this.getDataColumnsDao(); + dataColumns.forEach(function(dataColumn) { + dataColumnsDao.create(dataColumn); + }); + }.bind(this)); + } + }.bind(this)) + .then(function() { + return true; + }); +} + +/** + * Get the application id of the GeoPackage + * @param {Function} callback callback called with the application id + */ +GeoPackage.prototype.getApplicationId = function() { + var connection = this.getDatabase(); + return connection.getApplicationId(); +} + +GeoPackage.prototype.getInfoForTable = function (tableDao) { + var info = {}; + info.tableName = tableDao.table_name; + info.tableType = tableDao.table.getTableType(); + info.count = tableDao.getCount(); + if (info.tableType === UserTable.FEATURE_TABLE) { + info.geometryColumns = {}; + info.geometryColumns.tableName = tableDao.geometryColumns.table_name; + info.geometryColumns.geometryColumn = tableDao.geometryColumns.column_name; + info.geometryColumns.geometryTypeName = tableDao.geometryColumns.geometry_type_name; + info.geometryColumns.z = tableDao.geometryColumns.z; + info.geometryColumns.m = tableDao.geometryColumns.m; + } + if (info.tableType === UserTable.TILE_TABLE) { + info.minZoom = tableDao.minZoom; + info.maxZoom = tableDao.maxZoom; + info.minWebMapZoom = tableDao.minWebMapZoom; + info.maxWebMapZoom = tableDao.maxWebMapZoom; + info.zoomLevels = tableDao.tileMatrices.length; + } + + var dao; + var contentsRetriever; + if (info.tableType === UserTable.FEATURE_TABLE) { + dao = this.getGeometryColumnsDao(); + contentsRetriever = tableDao.geometryColumns; + } else if (info.tableType === UserTable.TILE_TABLE) { + dao = this.getTileMatrixSetDao(); + contentsRetriever = tableDao.tileMatrixSet; + info.tileMatrixSet = {}; + info.tileMatrixSet.srsId = tableDao.tileMatrixSet.srs_id; + info.tileMatrixSet.minX = tableDao.tileMatrixSet.min_x; + info.tileMatrixSet.maxX = tableDao.tileMatrixSet.max_x; + info.tileMatrixSet.minY = tableDao.tileMatrixSet.min_y; + info.tileMatrixSet.maxY = tableDao.tileMatrixSet.max_y; + } + var contents = dao.getContents(contentsRetriever); + info.contents = {}; + info.contents.tableName = contents.table_name; + info.contents.dataType = contents.data_type; + info.contents.identifier = contents.identifier; + info.contents.description = contents.description; + info.contents.lastChange = contents.last_change; + info.contents.minX = contents.min_x; + info.contents.maxX = contents.max_x; + info.contents.minY = contents.min_y; + info.contents.maxY = contents.max_y; + var contentsDao = this.getContentsDao(); + var contentsSrs = contentsDao.getSrs(contents); + info.contents.srs = { + name:contentsSrs.srs_name, + id:contentsSrs.srs_id, + organization:contentsSrs.organization, + organization_coordsys_id:contentsSrs.organization_coordsys_id, + definition:contentsSrs.definition, + description:contentsSrs.description + }; + var srs = tableDao.getSrs(); + + info.srs = { + name:srs.srs_name, + id:srs.srs_id, + organization:srs.organization, + organization_coordsys_id:srs.organization_coordsys_id, + definition:srs.definition, + description:srs.description + }; + info.columns = []; + info.columnMap = {}; + + var dcd = this.getDataColumnsDao(); + + tableDao.table.columns.forEach(function(column) { + var dataColumn = dcd.getDataColumns(tableDao.table.table_name, column.name); + info.columns.push({ + index: column.index, + name: column.name, + max: column.max, + min: column.min, + notNull: column.notNull, + primaryKey: column.primaryKey, + dataType: column.dataType ? DataTypes.name(column.dataType) : '', + displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name, + dataColumn: dataColumn + }); + info.columnMap[column.name] = info.columns[info.columns.length-1]; + }.bind(this)); + + return info; +}; + +},{"./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){ +/** + * GeoPackage Constants module. + * @module dao/geoPackageConstants + */ + +/** @constant {string} GEOPACKAGE_EXTENSION Extension to GeoPackage files */ +exports.GEOPACKAGE_EXTENSION = 'gpkg'; +/** @constant {string} GEOPACKAGE_EXTENDED_EXTENSION Extension to GeoPackage extension files */ +exports.GEOPACKAGE_EXTENDED_EXTENSION = 'gpkx'; +/** @constant {string} APPLICATION_ID GeoPackage application id */ +exports.APPLICATION_ID = 'GPKG'; +/** @constant {string} USER_VERSION GeoPackage user version */ +exports.USER_VERSION = '10200'; +/** @constant {string} GEOPACKAGE_EXTENSION_AUTHOR GeoPackage author */ +exports.GEOPACKAGE_EXTENSION_AUTHOR = exports.GEOPACKAGE_EXTENSION; +/** @constant {string} GEOMETRY_EXTENSION_PREFIX Geometry extension prefix */ +exports.GEOMETRY_EXTENSION_PREFIX = 'geom'; +/** @constant {string} GEOPACKAGE_GEOMETRY_MAGIX_NUMBER Expected magic number */ +exports.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER = 'GP'; +/** @constant {string} GEOPACKAGE_GEOMETRY_VERSION_1 Expected version 1 value */ +exports.GEOPACKAGE_GEOMETRY_VERSION_1 = 0; +/** @constant {string} SQLITE_HEADER_PREFIX SQLite header string prefix */ +exports.SQLITE_HEADER_PREFIX = 'SQLite format 3'; + +},{}],72:[function(require,module,exports){ +var wkx = require('wkx'); +var turfBbox = require('@turf/bbox'); + +module.exports.buildEnvelopeWithGeometry = function(wkbGeometry) { + var geoJson = wkbGeometry.toGeoJSON(); + var bbox = turfBbox(geoJson); + return { + minX: bbox[0], + minY: bbox[1], + maxX: bbox[2], + maxY: bbox[3] + }; +} + +module.exports.expandEnvelopeForGeometry = function(envelope, wkbGeometry) { + +} + +},{"@turf/bbox":117,"wkx":360}],73:[function(require,module,exports){ +(function (Buffer){ +/** + * GeometryData module. + * @module geom/geometryData + */ + +var GeoPackageConstants = require('../geoPackageConstants'); + +var wkx = require('wkx'); + +var BIG_ENDIAN = 0; +var LITTLE_ENDIAN = 1; + +/** + * GeoPackage Geometry Data + */ +var GeometryData = function(buffer) { + this.empty = true; + this.byteOrder = BIG_ENDIAN; + if (buffer) { + this.fromData(buffer); + } +} + +module.exports = GeometryData; + +GeometryData.prototype.setSrsId = function(srsId) { + this.srsId = srsId; +} + +GeometryData.prototype.setGeometry = function(wkbGeometry) { + this.empty = false; + this.geometry = wkbGeometry; +} + +GeometryData.prototype.setEnvelope = function(envelope) { + this.envelope = envelope; +} + +GeometryData.prototype.toGeoJSON = function() { + return this.geometry.toGeoJSON(); +} + +GeometryData.prototype.fromData = function (buffer) { + this.buffer = buffer; + if (buffer instanceof Uint8Array) { + this.buffer = buffer = Buffer.from(buffer); + } + var magicString = buffer.toString('ascii', 0, 2); + if (magicString !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER) { + throw new Error('Unexpected GeoPackage Geometry magic number: ' + magicString + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER); + } + + var version = buffer.readUInt8(2); + if (version !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1) { + throw new Error('Unexpected GeoPackage Geometry version ' + version + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1); + } + + var flags = buffer.readUInt8(3); + var envelopeIndicator = this.readFlags(flags); + + this.srsId = buffer[this.byteOrder ? 'readUInt32LE' : 'readUInt32BE'](4); + var envelopeAndOffset = this.readEnvelope(envelopeIndicator, buffer); + this.envelope = envelopeAndOffset.envelope; + + var offset = envelopeAndOffset.offset; + + var wkbBuffer = buffer.slice(offset); + try { + this.geometry = wkx.Geometry.parse(wkbBuffer); + this.geometryError = undefined; + } catch (error) { + this.geometryError = error.message; + console.log('Error parsing geometry'); + } +}; + +GeometryData.prototype.toData = function() { + var header = Buffer.alloc(8); + + // Write GP as the 2 byte magic number + header.write(GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER); + + // Write a byte as the version value of 0 = version 1 + header.writeUInt8(GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1, 2); + + // Build and write a flags byte + var flags = this.buildFlagsByte(); + header.writeUInt8(flags, 3); + + // write the 4 byte srs id + header[this.byteOrder ? 'writeUInt32LE' : 'writeUInt32BE'](this.srsId, 4); + + var envelopeBuffer = this.writeEnvelope(this.envelope); + var concatArray = [header, envelopeBuffer]; + try { + concatArray.push(this.geometry.toWkb()); + this.geometryError = undefined; + } catch (error) { + this.geometryError = error.message; + } + + this.buffer = Buffer.concat(concatArray); + return this.buffer; +}; + +GeometryData.prototype.writeEnvelope = function() { + if (!this.envelope) return Buffer.alloc(0); + + var writeDoubleMethod = 'writeDouble' + (this.byteOrder ? 'LE' : 'BE'); + + var length = 32; + if (this.envelope.hasZ) { + length += 16; + } + if (this.envelope.hasM) { + length += 16; + } + var envelopeBuffer = Buffer.alloc(length); + envelopeBuffer[writeDoubleMethod](this.envelope.minX, 0); + envelopeBuffer[writeDoubleMethod](this.envelope.maxX, 8); + envelopeBuffer[writeDoubleMethod](this.envelope.minY, 16); + envelopeBuffer[writeDoubleMethod](this.envelope.maxY, 24); + + var position = 32; + if (this.envelope.hasZ) { + envelopeBuffer[writeDoubleMethod](this.envelope.minZ, position); + envelopeBuffer[writeDoubleMethod](this.envelope.maxZ, position+8); + position = 48; + } + if (this.envelope.hasM) { + envelopeBuffer[writeDoubleMethod](this.envelope.minM, position); + envelopeBuffer[writeDoubleMethod](this.envelope.maxM, position+8); + } + + return envelopeBuffer; +}; + +GeometryData.prototype.buildFlagsByte = function() { + var flag = 0; + + // Add the binary type to bit 5, 0 for standard and 1 for extended + var binaryType = this.extended ? 1 : 0; + flag += (binaryType << 5); + + // Add the empty geometry flag to bit 4, 0 for non-empty and 1 for empty + var emptyValue = this.empty ? 1 : 0; + flag += (emptyValue << 4); + + // Add the envelope contents indicator code (3-bit unsigned integer to bits 3, 2, and 1) + var envelopeIndicator = !this.envelope ? 0 : this.getIndicatorWithEnvelope(this.envelope); + flag += (envelopeIndicator << 1); + + // Add the byte order to bit 0, 0 for Big Endian and 1 for Little Endian + var byteOrderValue = (this.byteOrder === BIG_ENDIAN) ? 0 : 1; + flag += byteOrderValue; + + return flag; +}; + +GeometryData.prototype.getIndicatorWithEnvelope = function(envelope) { + var indicator = 1; + if (envelope.hasZ) { + indicator++; + } + if (envelope.hasM) { + indicator += 2; + } + return indicator; +}; + +GeometryData.prototype.readFlags = function (flagsInt) { + // Verify the reserved bits at 7 and 6 are 0 + var reserved7 = (flagsInt >> 7) & 1; + var reserved6 = (flagsInt >> 6) & 1; + if (reserved7 !== 0 || reserved6 !== 0) { + throw new Error('Unexpected GeoPackage Geometry flags. Flag bit 7 and 6 should both be 0, 7='+reserved7+', 6='+ reserved6); + } + + // Get the binary type from bit 5, 0 for standard and 1 for extended + var binaryType = (flagsInt >> 5) & 1; + this.extended = binaryType == 1; + + // Get the empty geometry flag from bit 4, 0 for non-empty and 1 for + // empty + var emptyValue = (flagsInt >> 4) & 1; + this.empty = emptyValue == 1; + + // Get the envelope contents indicator code (3-bit unsigned integer from + // bits 3, 2, and 1) + var envelopeIndicator = (flagsInt >> 1) & 7; + if (envelopeIndicator > 4) { + throw new Error('Unexpected GeoPackage Geometry flags. Envelope contents indicator must be between 0 and 4. Actual: ' + envelopeIndicator); + } + + // Get the byte order from bit 0, 0 for Big Endian and 1 for Little Endian + var byteOrderValue = flagsInt & 1; + this.byteOrder = byteOrderValue; + return envelopeIndicator; +}; + +GeometryData.prototype.readEnvelope = function (envelopeIndicator, buffer) { + var readDoubleMethod = 'readDouble' + (this.byteOrder ? 'LE' : 'BE'); + + var envelopeByteOffset = 8; + reads = 0; + var envelopeAndOffset = { + envelope: undefined, + offset: envelopeByteOffset + }; + + if (envelopeIndicator <= 0) { + return envelopeAndOffset; + } + var envelope = {}; + // Read x and y values and create envelope + envelope.minX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + envelope.maxX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + envelope.minY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + envelope.maxY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + + envelope.hasZ = false; + var minZ = undefined; + var maxZ = undefined; + + envelope.hasM = false; + var minM = undefined; + var maxM = undefined; + + // Read z values + if (envelopeIndicator === 2 || envelopeIndicator === 4) { + envelope.hasZ = true; + envelope.minZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + envelope.maxZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + } + + // Read m values + if (envelopeIndicator === 3 || envelopeIndicator === 4) { + envelope.hasM = true; + envelope.minM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + envelope.maxM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); + } + envelopeAndOffset.envelope = envelope; + envelopeAndOffset.offset = envelopeByteOffset + (8 * reads); + return envelopeAndOffset; +}; + +}).call(this,require("buffer").Buffer) +},{"../geoPackageConstants":71,"buffer":182,"wkx":360}],74:[function(require,module,exports){ +/** + * Metadata module. + * @module metadata + * @see module:dao/dao + */ + +var Dao = require('../dao/dao'); + +var util = require('util'); + +/** + * Contains metadata in MIME encodings structured in accordance with any + * authoritative metadata specification + * @class Metadata + */ +var Metadata = function() { + + /** + * Metadata primary key + * @member {Number} + */ + this.id; + + /** + * Case sensitive name of the data scope to which this metadata applies; see Metadata Scopes below + * @member {string} + */ + this.md_scope; + + /** + * URI reference to the metadata structure definition authority + * @member {string} + */ + this.md_standard_uri; + + /** + * MIME encoding of metadata + * @member {string} + */ + this.mime_type; + + /** + * metadata + * @member {string} + */ + this.metadata; +} + +Metadata.UNDEFINED = "undefined"; +Metadata.FIELD_SESSION = "fieldSession"; +Metadata.COLLECTION_SESSION = "collectionSession"; +Metadata.SERIES = "series"; +Metadata.DATASET = "dataset"; +Metadata.FEATURE_TYPE = "featureType"; +Metadata.FEATURE = "feature"; +Metadata.ATTRIBUTE_TYPE = "attributeType"; +Metadata.ATTRIBUTE = "attribute"; +Metadata.TILE = "tile"; +Metadata.MODEL = "model"; +Metadata.CATALOG = "catalog"; +Metadata.SCHEMA = "schema"; +Metadata.TAXONOMY = "taxonomy"; +Metadata.SOFTWARE = "software"; +Metadata.SERVICE = "service"; +Metadata.COLLECTION_HARDWARE = "collectionHardware"; +Metadata.NON_GEOGRAPHIC_DATASET = "nonGeographicDataset"; +Metadata.DIMENSION_GROUP = "dimensionGroup"; + +Metadata.prototype.getScopeInformation = function(type) { + switch(type) { + case Metadata.UNDEFINED: + return { + name: Metadata.UNDEFINED, + code: 'NA', + definition: 'Metadata information scope is undefined' + }; + case Metadata.FIELD_SESSION: + return { + name: Metadata.FIELD_SESSION, + code: '012', + definition: 'Information applies to the field session' + }; + case Metadata.COLLECTION_SESSION: + return { + name: Metadata.COLLECTION_SESSION, + code: '004', + definition: 'Information applies to the collection session' + }; + case Metadata.SERIES: + return { + name: Metadata.SERIES, + code: '006', + definition: 'Information applies to the (dataset) series' + }; + case Metadata.DATASET: + return { + name: Metadata.DATASET, + code: '005', + definition: 'Information applies to the (geographic feature) dataset' + }; + case Metadata.FEATURE_TYPE: + return { + name: Metadata.FEATURE_TYPE, + code: '010', + definition: 'Information applies to a feature type (class)' + }; + case Metadata.FEATURE: + return { + name: Metadata.FEATURE, + code: '009', + definition: 'Information applies to a feature (instance)' + }; + case Metadata.ATTRIBUTE_TYPE: + return { + name: Metadata.ATTRIBUTE_TYPE, + code: '002', + definition: 'Information applies to the attribute class' + }; + case Metadata.ATTRIBUTE: + return { + name: Metadata.ATTRIBUTE, + code: '001', + definition: 'Information applies to the characteristic of a feature (instance)' + }; + case Metadata.TILE: + return { + name: Metadata.TILE, + code: '016', + definition: 'Information applies to a tile, a spatial subset of geographic data' + }; + case Metadata.MODEL: + return { + name: Metadata.MODEL, + code: '015', + definition: 'Information applies to a copy or imitation of an existing or hypothetical object' + }; + case Metadata.CATALOG: + return { + name: Metadata.CATALOG, + code: 'NA', + definition: 'Metadata applies to a feature catalog' + }; + case Metadata.SCHEMA: + return { + name: Metadata.SCHEMA, + code: 'NA', + definition: 'Metadata applies to an application schema' + }; + case Metadata.TAXONOMY: + return { + name: Metadata.TAXONOMY, + code: 'NA', + definition: 'Metadata applies to a taxonomy or knowledge system' + }; + case Metadata.SOFTWARE: + return { + name: Metadata.SOFTWARE, + code: '013', + definition: 'Information applies to a computer program or routine' + }; + case Metadata.SERVICE: + return { + name: Metadata.SERVICE, + code: '014', + 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' + }; + case Metadata.COLLECTION_HARDWARE: + return { + name: Metadata.COLLECTION_HARDWARE, + code: '003', + definition: 'Information applies to the collection hardware class' + }; + case Metadata.NON_GEOGRAPHIC_DATASET: + return { + name: Metadata.NON_GEOGRAPHIC_DATASET, + code: '007', + definition: 'Information applies to non-geographic data' + }; + case Metadata.DIMENSION_GROUP: + return { + name: Metadata.DIMENSION_GROUP, + code: '008', + definition: 'Information applies to a dimension group' + }; + } +} + +/** + * Metadata Data Access Object + * @class + * @extends {module:dao/dao~Dao} + */ +var MetadataDao = function(geoPackage) { + Dao.call(this, geoPackage); +}; + +util.inherits(MetadataDao, Dao); + +MetadataDao.prototype.createObject = function() { + return new Metadata(); +}; + +MetadataDao.TABLE_NAME = "gpkg_metadata"; +MetadataDao.COLUMN_ID = "id"; +MetadataDao.COLUMN_MD_SCOPE = "md_scope"; +MetadataDao.COLUMN_MD_STANDARD_URI = "md_standard_uri"; +MetadataDao.COLUMN_MIME_TYPE = "mime_type"; +MetadataDao.COLUMN_METADATA = "metadata"; + +MetadataDao.prototype.gpkgTableName = MetadataDao.TABLE_NAME; +MetadataDao.prototype.idColumns = [MetadataDao.COLUMN_ID]; + +module.exports.MetadataDao = MetadataDao; +module.exports.Metadata = Metadata; + +},{"../dao/dao":11,"util":343}],75:[function(require,module,exports){ +/** + * MetadataReference module. + * @module metadata/reference + * @see module:dao/dao + */ + +var Dao = require('../../dao/dao') + , ColumnValues = require('../../dao/columnValues'); + +var util = require('util'); + +/** + * Links metadata in the gpkg_metadata table to data in the feature, and tiles tables + * @class MetadataReference + */ +var MetadataReference = function() { + + /** + * Lowercase metadata reference scope; one of ‘geopackage’, ‘table’, ‘column’, ’row’, ’row/col’ + * @member {string} + */ + this.reference_scope; + + /** + * Name of the table to which this metadata reference applies, or NULL for reference_scope of ‘geopackage’. + * @member {string} + */ + this.table_name; + + /** + * Name of the column to which this metadata reference applies; NULL for + * reference_scope of ‘geopackage’,‘table’ or ‘row’, or the name of a column + * in the table_name table for reference_scope of ‘column’ or ‘row/col’ + * @member {string} + */ + this.column_name; + + /** + * NULL for reference_scope of ‘geopackage’, ‘table’ or ‘column’, or the + * rowed of a row record in the table_name table for reference_scope of + * ‘row’ or ‘row/col’ + * @member {Number} + */ + this.row_id_value; + + /** + * timestamp value in ISO 8601 format as defined by the strftime function + * '%Y-%m-%dT%H:%M:%fZ' format string applied to the current time + * @member {Date} + */ + this.timestamp; + + /** + * gpkg_metadata table id column value for the metadata to which this + * gpkg_metadata_reference applies + * @member {Number} + */ + this.md_file_id; + + /** + * gpkg_metadata table id column value for the hierarchical parent + * gpkg_metadata for the gpkg_metadata to which this gpkg_metadata_reference + * applies, or NULL if md_file_id forms the root of a metadata hierarchy + * @member {Number} + */ + this.md_parent_id; +} + +MetadataReference.prototype.toDatabaseValue = function(columnName) { + if (columnName === 'timestamp') { + return this.timestamp.toISOString(); + } + return this[columnName]; +} + +/** + * Set the metadata + * @param {Metadata} metadata metadata + */ +MetadataReference.prototype.setMetadata = function(metadata) { + if (metadata) { + this.md_file_id = metadata.id; + } else { + this.md_file_id = -1; + } +} + +/** + * Set the parent metadata + * @param {Metadata} metadata parent metadata + */ +MetadataReference.prototype.setParentMetadata = function(metadata) { + if (metadata) { + this.md_parent_id = metadata.id; + } else { + this.md_parent_id = -1; + } +} + +MetadataReference.prototype.setReferenceScopeType = function(referenceScopeType) { + this.reference_scope = referenceScopeType; + switch(referenceScopeType) { + case MetadataReference.GEOPACKAGE: + this.table_name = undefined; + this.column_name = undefined; + this.row_id_value = undefined; + break; + case MetadataReference.TABLE: + this.column_name = undefined; + this.row_id_value = undefined; + break; + case MetadataReference.ROW: + this.column_name = undefined; + break; + case MetadataReference.COLUMN: + this.row_id_value = undefined; + break; + } +} + +MetadataReference.GEOPACKAGE = "geopackage"; +MetadataReference.TABLE = "table"; +MetadataReference.COLUMN = "column"; +MetadataReference.ROW = "row"; +MetadataReference.ROW_COL = "row/col"; + +/** + * Metadata Reference Data Access Object + * @class + * @extends {module:dao/dao~Dao} + */ +var MetadataReferenceDao = function(geoPackage) { + Dao.call(this, geoPackage); +}; + +util.inherits(MetadataReferenceDao, Dao); + +MetadataReferenceDao.prototype.createObject = function() { + return new MetadataReference(); +}; + +MetadataReferenceDao.prototype.removeMetadataParent = function(parentId) { + var values = {}; + values[MetadataReferenceDao.COLUMN_MD_PARENT_ID] = null; + + var where = this.buildWhereWithFieldAndValue(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId); + var whereArgs = this.buildWhereArgs(parentId); + return this.updateWithValues(values, where, whereArgs); +} + +MetadataReferenceDao.prototype.queryByMetadataAndParent = function (fileId, parentId) { + var columnValues = new ColumnValues(); + columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId); + columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId); + return this.queryForFieldValues(columnValues); +}; + +MetadataReferenceDao.prototype.queryByMetadata = function(fileId) { + var columnValues = new ColumnValues(); + columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId); + return this.queryForFieldValues(columnValues); +}; + +MetadataReferenceDao.prototype.queryByMetadataParent = function(parentId) { + var columnValues = new ColumnValues(); + columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId); + return this.queryForFieldValues(columnValues); +}; + +MetadataReferenceDao.TABLE_NAME = "gpkg_metadata_reference"; +MetadataReferenceDao.COLUMN_REFERENCE_SCOPE = "reference_scope"; +MetadataReferenceDao.COLUMN_TABLE_NAME = "table_name"; +MetadataReferenceDao.COLUMN_COLUMN_NAME = "column_name"; +MetadataReferenceDao.COLUMN_ROW_ID = "row_id"; +MetadataReferenceDao.COLUMN_TIMESTAMP = "timestamp"; +MetadataReferenceDao.COLUMN_MD_FILE_ID = "md_file_id"; +MetadataReferenceDao.COLUMN_MD_PARENT_ID = "md_parent_id"; + + +MetadataReferenceDao.prototype.gpkgTableName = MetadataReferenceDao.TABLE_NAME; +MetadataReferenceDao.prototype.idColumns = [MetadataReferenceDao.COLUMN_MD_FILE_ID, MetadataReferenceDao.COLUMN_MD_PARENT_ID]; + +module.exports.MetadataReferenceDao = MetadataReferenceDao; +module.exports.MetadataReference = MetadataReference; + +},{"../../dao/columnValues":10,"../../dao/dao":11,"util":343}],76:[function(require,module,exports){ +module.exports = function(optionList) { + var optionBuilder = {}; + optionList.forEach(function(option) { + optionBuilder['set'+option.slice(0,1).toUpperCase()+option.slice(1)] = function(param) { + this[option] = param; + return this; + } + optionBuilder['get'+option.slice(0,1).toUpperCase()+option.slice(1)] = function() { + return this[option]; + } + }); + return optionBuilder; +} + +},{}],77:[function(require,module,exports){ +module.exports = { + "EPSG:3819":'+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs ', + "EPSG:3821":'+proj=longlat +ellps=aust_SA +no_defs ', + "EPSG:3824":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:3889":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:3906":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs ', + "EPSG:4001":'+proj=longlat +ellps=airy +no_defs ', + "EPSG:4002":'+proj=longlat +ellps=mod_airy +no_defs ', + "EPSG:4003":'+proj=longlat +ellps=aust_SA +no_defs ', + "EPSG:4004":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4005":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs ', + "EPSG:4006":'+proj=longlat +ellps=bess_nam +no_defs ', + "EPSG:4007":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', + "EPSG:4008":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4009":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ', + "EPSG:4010":'+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs ', + "EPSG:4011":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4012":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4013":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs ', + "EPSG:4014":'+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs ', + "EPSG:4015":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs ', + "EPSG:4016":'+proj=longlat +ellps=evrstSS +no_defs ', + "EPSG:4018":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs ', + "EPSG:4019":'+proj=longlat +ellps=GRS80 +no_defs ', + "EPSG:4020":'+proj=longlat +ellps=helmert +no_defs ', + "EPSG:4021":'+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs ', + "EPSG:4022":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4023":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4024":'+proj=longlat +ellps=krass +no_defs ', + "EPSG:4025":'+proj=longlat +ellps=WGS66 +no_defs ', + "EPSG:4027":'+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs ', + "EPSG:4028":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs ', + "EPSG:4029":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ', + "EPSG:4030":'+proj=longlat +ellps=WGS84 +no_defs ', + "EPSG:4031":'+proj=longlat +ellps=WGS84 +no_defs ', + "EPSG:4032":'+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs ', + "EPSG:4033":'+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs ', + "EPSG:4034":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ', + "EPSG:4035":'+proj=longlat +a=6371000 +b=6371000 +no_defs ', + "EPSG:4036":'+proj=longlat +ellps=GRS67 +no_defs ', + "EPSG:4041":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ', + "EPSG:4042":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ', + "EPSG:4043":'+proj=longlat +ellps=WGS72 +no_defs ', + "EPSG:4044":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs ', + "EPSG:4045":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs ', + "EPSG:4046":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4047":'+proj=longlat +a=6371007 +b=6371007 +no_defs ', + "EPSG:4052":'+proj=longlat +a=6370997 +b=6370997 +no_defs ', + "EPSG:4053":'+proj=longlat +a=6371228 +b=6371228 +no_defs ', + "EPSG:4054":'+proj=longlat +a=6378273 +b=6356889.449 +no_defs ', + "EPSG:4055":'+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4075":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4081":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4120":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4121":'+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs ', + "EPSG:4122":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ', + "EPSG:4123":'+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs ', + "EPSG:4124":'+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs ', + "EPSG:4125":'+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs ', + "EPSG:4126":'+proj=longlat +ellps=GRS80 +no_defs ', + "EPSG:4127":'+proj=longlat +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +no_defs ', + "EPSG:4128":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4129":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4130":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs ', + "EPSG:4131":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs ', + "EPSG:4132":'+proj=longlat +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +no_defs ', + "EPSG:4133":'+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs ', + "EPSG:4134":'+proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs ', + "EPSG:4135":'+proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs ', + "EPSG:4136":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4137":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4138":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4139":'+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs ', + "EPSG:4140":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4141":'+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs ', + "EPSG:4142":'+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs ', + "EPSG:4143":'+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs ', + "EPSG:4144":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +no_defs ', + "EPSG:4145":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs ', + "EPSG:4146":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs ', + "EPSG:4147":'+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs ', + "EPSG:4148":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4149":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs ', + "EPSG:4150":'+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs ', + "EPSG:4151":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4152":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4153":'+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs ', + "EPSG:4154":'+proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs ', + "EPSG:4155":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs ', + "EPSG:4156":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs ', + "EPSG:4157":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', + "EPSG:4158":'+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs ', + "EPSG:4159":'+proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs ', + "EPSG:4160":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4161":'+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs ', + "EPSG:4162":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4163":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4164":'+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs ', + "EPSG:4165":'+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs ', + "EPSG:4166":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4167":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4168":'+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs ', + "EPSG:4169":'+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs ', + "EPSG:4170":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4171":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4172":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4173":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4174":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ', + "EPSG:4175":'+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs ', + "EPSG:4176":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4178":'+proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs ', + "EPSG:4179":'+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs ', + "EPSG:4180":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4181":'+proj=longlat +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +no_defs ', + "EPSG:4182":'+proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs ', + "EPSG:4183":'+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs ', + "EPSG:4184":'+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs ', + "EPSG:4185":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4188":'+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ', + "EPSG:4189":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4190":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4191":'+proj=longlat +ellps=krass +no_defs ', + "EPSG:4192":'+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs ', + "EPSG:4193":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ', + "EPSG:4194":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ', + "EPSG:4195":'+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs ', + "EPSG:4196":'+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs ', + "EPSG:4197":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4198":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4199":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4200":'+proj=longlat +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +no_defs ', + "EPSG:4201":'+proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs ', + "EPSG:4202":'+proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs ', + "EPSG:4203":'+proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs ', + "EPSG:4204":'+proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs ', + "EPSG:4205":'+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs ', + "EPSG:4206":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4207":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs ', + "EPSG:4208":'+proj=longlat +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +no_defs ', + "EPSG:4209":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs ', + "EPSG:4210":'+proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs ', + "EPSG:4211":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs ', + "EPSG:4212":'+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs ', + "EPSG:4213":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs ', + "EPSG:4214":'+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs ', + "EPSG:4215":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4216":'+proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs ', + "EPSG:4218":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs ', + "EPSG:4219":'+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs ', + "EPSG:4220":'+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs ', + "EPSG:4221":'+proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs ', + "EPSG:4222":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs ', + "EPSG:4223":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs ', + "EPSG:4224":'+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs ', + "EPSG:4225":'+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs ', + "EPSG:4226":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4227":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs ', + "EPSG:4228":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4229":'+proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs ', + "EPSG:4230":'+proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs ', + "EPSG:4231":'+proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs ', + "EPSG:4232":'+proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs ', + "EPSG:4233":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ', + "EPSG:4234":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4235":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4236":'+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs ', + "EPSG:4237":'+proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs ', + "EPSG:4238":'+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs ', + "EPSG:4239":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs ', + "EPSG:4240":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs ', + "EPSG:4241":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ', + "EPSG:4242":'+proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs ', + "EPSG:4243":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ', + "EPSG:4244":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs ', + "EPSG:4245":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs ', + "EPSG:4246":'+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs ', + "EPSG:4247":'+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs ', + "EPSG:4248":'+proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs ', + "EPSG:4249":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4250":'+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs ', + "EPSG:4251":'+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs ', + "EPSG:4252":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4253":'+proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs ', + "EPSG:4254":'+proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs ', + "EPSG:4255":'+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs ', + "EPSG:4256":'+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs ', + "EPSG:4257":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs ', + "EPSG:4258":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4259":'+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs ', + "EPSG:4260":'+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ', + "EPSG:4261":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs ', + "EPSG:4262":'+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs ', + "EPSG:4263":'+proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs ', + "EPSG:4264":'+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs ', + "EPSG:4265":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs ', + "EPSG:4266":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs ', + "EPSG:4267":'+proj=longlat +datum=NAD27 +no_defs ', + "EPSG:4268":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ', + "EPSG:4269":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4270":'+proj=longlat +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +no_defs ', + "EPSG:4271":'+proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs ', + "EPSG:4272":'+proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +no_defs ', + "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 ', + "EPSG:4274":'+proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs ', + "EPSG:4275":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs ', + "EPSG:4276":'+proj=longlat +ellps=WGS66 +no_defs ', + "EPSG:4277":'+proj=longlat +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +no_defs ', + "EPSG:4278":'+proj=longlat +ellps=airy +no_defs ', + "EPSG:4279":'+proj=longlat +ellps=airy +no_defs ', + "EPSG:4280":'+proj=longlat +ellps=bessel +no_defs ', + "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 ', + "EPSG:4282":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs ', + "EPSG:4283":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4284":'+proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs ', + "EPSG:4285":'+proj=longlat +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +no_defs ', + "EPSG:4286":'+proj=longlat +ellps=helmert +no_defs ', + "EPSG:4287":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ', + "EPSG:4288":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4289":'+proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs ', + "EPSG:4291":'+proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs ', + "EPSG:4292":'+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs ', + "EPSG:4293":'+proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs ', + "EPSG:4294":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ', + "EPSG:4295":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4296":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4297":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs ', + "EPSG:4298":'+proj=longlat +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +no_defs ', + "EPSG:4299":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ', + "EPSG:4300":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ', + "EPSG:4301":'+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs ', + "EPSG:4302":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs ', + "EPSG:4303":'+proj=longlat +ellps=helmert +no_defs ', + "EPSG:4304":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs ', + "EPSG:4306":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4307":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +no_defs ', + "EPSG:4308":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4309":'+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs ', + "EPSG:4310":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4311":'+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs ', + "EPSG:4312":'+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs ', + "EPSG:4313":'+proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +no_defs ', + "EPSG:4314":'+proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs ', + "EPSG:4315":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs ', + "EPSG:4316":'+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs ', + "EPSG:4317":'+proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs ', + "EPSG:4318":'+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs ', + "EPSG:4319":'+proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs ', + "EPSG:4322":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ', + "EPSG:4324":'+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs ', + "EPSG:4326":'+proj=longlat +datum=WGS84 +no_defs ', + "EPSG:4463":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4470":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4475":'+proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs ', + "EPSG:4483":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4490":'+proj=longlat +ellps=GRS80 +no_defs ', + "EPSG:4555":'+proj=longlat +ellps=krass +no_defs ', + "EPSG:4558":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4600":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4601":'+proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs ', + "EPSG:4602":'+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs ', + "EPSG:4603":'+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs ', + "EPSG:4604":'+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs ', + "EPSG:4605":'+proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs ', + "EPSG:4606":'+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs ', + "EPSG:4607":'+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs ', + "EPSG:4608":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4609":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:4610":'+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs ', + "EPSG:4611":'+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs ', + "EPSG:4612":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4613":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ', + "EPSG:4614":'+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs ', + "EPSG:4615":'+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs ', + "EPSG:4616":'+proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs ', + "EPSG:4617":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4618":'+proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs ', + "EPSG:4619":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4620":'+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs ', + "EPSG:4621":'+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs ', + "EPSG:4622":'+proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs ', + "EPSG:4623":'+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs ', + "EPSG:4624":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4625":'+proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs ', + "EPSG:4626":'+proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs ', + "EPSG:4627":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4628":'+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs ', + "EPSG:4629":'+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs ', + "EPSG:4630":'+proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs ', + "EPSG:4631":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ', + "EPSG:4632":'+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs ', + "EPSG:4633":'+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs ', + "EPSG:4634":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ', + "EPSG:4635":'+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs ', + "EPSG:4636":'+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs ', + "EPSG:4637":'+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs ', + "EPSG:4638":'+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs ', + "EPSG:4639":'+proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs ', + "EPSG:4640":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4641":'+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs ', + "EPSG:4642":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ', + "EPSG:4643":'+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs ', + "EPSG:4644":'+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs ', + "EPSG:4645":'+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4646":'+proj=longlat +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +no_defs ', + "EPSG:4657":'+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs ', + "EPSG:4658":'+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs ', + "EPSG:4659":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4660":'+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs ', + "EPSG:4661":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4662":'+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs ', + "EPSG:4663":'+proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs ', + "EPSG:4664":'+proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs ', + "EPSG:4665":'+proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs ', + "EPSG:4666":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs ', + "EPSG:4667":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4668":'+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs ', + "EPSG:4669":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4670":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4671":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', + "EPSG:4672":'+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs ', + "EPSG:4673":'+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs ', + "EPSG:4674":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4675":'+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs ', + "EPSG:4676":'+proj=longlat +ellps=krass +no_defs ', + "EPSG:4677":'+proj=longlat +ellps=krass +no_defs ', + "EPSG:4678":'+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs ', + "EPSG:4679":'+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs ', + "EPSG:4680":'+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs ', + "EPSG:4681":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4682":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs ', + "EPSG:4683":'+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs ', + "EPSG:4684":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ', + "EPSG:4685":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4686":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4687":'+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs ', + "EPSG:4688":'+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs ', + "EPSG:4689":'+proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs ', + "EPSG:4690":'+proj=longlat +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +no_defs ', + "EPSG:4691":'+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs ', + "EPSG:4692":'+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs ', + "EPSG:4693":'+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs ', + "EPSG:4694":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4695":'+proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs ', + "EPSG:4696":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4697":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4698":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ', + "EPSG:4699":'+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs ', + "EPSG:4700":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4701":'+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs ', + "EPSG:4702":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4703":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4704":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4705":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4706":'+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs ', + "EPSG:4707":'+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs ', + "EPSG:4708":'+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs ', + "EPSG:4709":'+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs ', + "EPSG:4710":'+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs ', + "EPSG:4711":'+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs ', + "EPSG:4712":'+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs ', + "EPSG:4713":'+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs ', + "EPSG:4714":'+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs ', + "EPSG:4715":'+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs ', + "EPSG:4716":'+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs ', + "EPSG:4717":'+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs ', + "EPSG:4718":'+proj=longlat +ellps=intl +towgs84=230,-199,-752,0,0,0,0 +no_defs ', + "EPSG:4719":'+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs ', + "EPSG:4720":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ', + "EPSG:4721":'+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs ', + "EPSG:4722":'+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs ', + "EPSG:4723":'+proj=longlat +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +no_defs ', + "EPSG:4724":'+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs ', + "EPSG:4725":'+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs ', + "EPSG:4726":'+proj=longlat +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +no_defs ', + "EPSG:4727":'+proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs ', + "EPSG:4728":'+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs ', + "EPSG:4729":'+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs ', + "EPSG:4730":'+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs ', + "EPSG:4731":'+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs ', + "EPSG:4732":'+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs ', + "EPSG:4733":'+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs ', + "EPSG:4734":'+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs ', + "EPSG:4735":'+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs ', + "EPSG:4736":'+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs ', + "EPSG:4737":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4738":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', + "EPSG:4739":'+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs ', + "EPSG:4740":'+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs ', + "EPSG:4741":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4742":'+proj=longlat +ellps=GRS80 +no_defs ', + "EPSG:4743":'+proj=longlat +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +no_defs ', + "EPSG:4744":'+proj=longlat +ellps=clrk80 +no_defs ', + "EPSG:4745":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4746":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:4747":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4748":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ', + "EPSG:4749":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4750":'+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs ', + "EPSG:4751":'+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs ', + "EPSG:4752":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ', + "EPSG:4753":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4754":'+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs ', + "EPSG:4755":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4756":'+proj=longlat +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +no_defs ', + "EPSG:4757":'+proj=longlat +ellps=WGS84 +no_defs ', + "EPSG:4758":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4759":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4760":'+proj=longlat +ellps=WGS66 +no_defs ', + "EPSG:4761":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4762":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4763":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4764":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4765":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:4801":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs ', + "EPSG:4802":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs ', + "EPSG:4803":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs ', + "EPSG:4804":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs ', + "EPSG:4805":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs ', + "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 ', + "EPSG:4807":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs ', + "EPSG:4808":'+proj=longlat +ellps=bessel +pm=jakarta +no_defs ', + "EPSG:4809":'+proj=longlat +ellps=intl +pm=brussels +no_defs ', + "EPSG:4810":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs ', + "EPSG:4811":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs ', + "EPSG:4813":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs ', + "EPSG:4814":'+proj=longlat +ellps=bessel +pm=stockholm +no_defs ', + "EPSG:4815":'+proj=longlat +ellps=bessel +pm=athens +no_defs ', + "EPSG:4816":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs ', + "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 ', + "EPSG:4818":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs ', + "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 ', + "EPSG:4820":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs ', + "EPSG:4821":'+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs ', + "EPSG:4823":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4824":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:4901":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs ', + "EPSG:4902":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs ', + "EPSG:4903":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs ', + "EPSG:4904":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs ', + "EPSG:5013":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5132":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:5228":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +no_defs ', + "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 ', + "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 ', + "EPSG:5246":'+proj=longlat +ellps=GRS80 +no_defs ', + "EPSG:5252":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5264":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5324":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5340":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5354":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5360":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5365":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5371":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5373":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5381":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5393":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5451":'+proj=longlat +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +no_defs ', + "EPSG:5464":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', + "EPSG:5467":'+proj=longlat +ellps=clrk66 +no_defs ', + "EPSG:5489":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5524":'+proj=longlat +ellps=intl +no_defs ', + "EPSG:5527":'+proj=longlat +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +no_defs ', + "EPSG:5546":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5561":'+proj=longlat +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +no_defs ', + "EPSG:5593":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "EPSG:5681":'+proj=longlat +ellps=bessel +no_defs ', + "EPSG:5886":'+proj=longlat +ellps=GRS80 +no_defs ', + "EPSG:6135":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2027":'+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2028":'+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2029":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2030":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2031":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2032":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2033":'+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2034":'+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs ', + "EPSG:2035":'+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs ', + "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 ', + "EPSG:2037":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2038":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:2040":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ', + "EPSG:2041":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ', + "EPSG:2042":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ', + "EPSG:2043":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2058":'+proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', + "EPSG:2059":'+proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', + "EPSG:2060":'+proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', + "EPSG:2061":'+proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:2063":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', + "EPSG:2064":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:2067":'+proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2077":'+proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', + "EPSG:2078":'+proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', + "EPSG:2079":'+proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', + "EPSG:2080":'+proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', + "EPSG:2081":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:2084":'+proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2089":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2090":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2095":'+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs ', + "EPSG:2096":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "EPSG:2097":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "EPSG:2098":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "EPSG:2099":'+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2133":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2134":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2135":'+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2148":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2149":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2150":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2151":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2152":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2153":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:2156":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:2158":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:2161":'+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ', + "EPSG:2162":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ', + "EPSG:2163":'+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2188":'+proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs ', + "EPSG:2189":'+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs ', + "EPSG:2190":'+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs ', + "EPSG:2191":'+proj=utm +zone=28 +ellps=intl +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:2195":'+proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:2199":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "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 ', + "EPSG:2201":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2202":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2203":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2216":'+proj=utm +zone=22 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ', + "EPSG:2217":'+proj=utm +zone=23 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ', + "EPSG:2219":'+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', + "EPSG:2220":'+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2312":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ', + "EPSG:2313":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ', + "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 ', + "EPSG:2315":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', + "EPSG:2316":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2462":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2550":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2933":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2942":'+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs ', + "EPSG:2943":'+proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2955":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2956":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2957":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2958":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2959":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2960":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2961":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2962":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2969":'+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs ', + "EPSG:2970":'+proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs ', + "EPSG:2971":'+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ', + "EPSG:2972":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2973":'+proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs ', + "EPSG:2975":'+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:2976":'+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:2978":'+proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs ', + "EPSG:2979":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ', + "EPSG:2980":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ', + "EPSG:2981":'+proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs ', + "EPSG:2982":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:2987":'+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs ', + "EPSG:2988":'+proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs ', + "EPSG:2989":'+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:2995":'+proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ', + "EPSG:2996":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:2998":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ', + "EPSG:2999":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3006":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3036":'+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ', + "EPSG:3037":'+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ', + "EPSG:3038":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3039":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3040":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3041":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3042":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3043":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3044":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3045":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3046":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3047":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3048":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3049":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3050":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3051":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3054":'+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ', + "EPSG:3055":'+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ', + "EPSG:3056":'+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:3060":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs ', + "EPSG:3061":'+proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs ', + "EPSG:3062":'+proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs ', + "EPSG:3063":'+proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs ', + "EPSG:3064":'+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3065":'+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:3067":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3092":'+proj=utm +zone=51 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', + "EPSG:3093":'+proj=utm +zone=52 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', + "EPSG:3094":'+proj=utm +zone=53 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', + "EPSG:3095":'+proj=utm +zone=54 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', + "EPSG:3096":'+proj=utm +zone=55 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', + "EPSG:3097":'+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3098":'+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3099":'+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3100":'+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3101":'+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:3103":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ', + "EPSG:3104":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ', + "EPSG:3105":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3141":'+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ', + "EPSG:3142":'+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:3148":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ', + "EPSG:3149":'+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3154":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3155":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3156":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3157":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3158":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3159":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3160":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:3164":'+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3169":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3170":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3171":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3172":'+proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3178":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3179":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3180":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3181":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3182":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3183":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3184":'+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3185":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3186":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3187":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3188":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3189":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3199":'+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:3201":'+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', + "EPSG:3202":'+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', + "EPSG:3203":'+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3306":'+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs ', + "EPSG:3307":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3312":'+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ', + "EPSG:3313":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3336":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3342":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ', + "EPSG:3343":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3344":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3345":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:3349":'+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:3353":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ', + "EPSG:3354":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3367":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ', + "EPSG:3368":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ', + "EPSG:3369":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ', + "EPSG:3370":'+proj=utm +zone=59 +datum=NAD27 +units=m +no_defs ', + "EPSG:3371":'+proj=utm +zone=60 +datum=NAD27 +units=m +no_defs ', + "EPSG:3372":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3373":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3374":'+proj=utm +zone=29 +ellps=intl +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3383":'+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3391":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ', + "EPSG:3392":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ', + "EPSG:3393":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:3395":'+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3396":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:3397":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:3398":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:3399":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3408":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ', + "EPSG:3409":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ', + "EPSG:3410":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3449":'+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3450":'+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3461":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ', + "EPSG:3462":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3571":'+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3572":'+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3573":'+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3574":'+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3575":'+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3576":'+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3706":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3707":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3708":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3709":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3710":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3711":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3712":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3713":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3714":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3715":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3716":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3717":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3718":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3719":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3720":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3721":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3722":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3723":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3724":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3725":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3726":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3740":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3741":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3742":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3743":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3744":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3745":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3746":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3747":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3748":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3749":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3750":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3751":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3752":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3761":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3767":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3768":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3769":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3784":'+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs ', + "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', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3829":'+proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs ', + "EPSG:3832":'+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + //"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', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3890":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3891":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:3892":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3920":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3973":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3974":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "EPSG:3975":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:3994":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:4037":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ', + "EPSG:4038":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:4061":'+proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4062":'+proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4063":'+proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4071":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs ', + "EPSG:4082":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4083":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:4467":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4471":'+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4474":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ', + "EPSG:4484":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4485":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4486":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4487":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4488":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4489":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4491":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4492":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4493":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4494":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4495":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4496":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4497":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4498":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4499":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4500":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4501":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4502":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4503":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4504":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4505":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4506":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4507":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4508":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4509":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4510":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4511":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4512":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4513":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4514":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4515":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4516":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4517":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4518":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4519":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4520":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4521":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4522":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4523":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4524":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4525":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4526":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4527":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4528":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4529":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4530":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4531":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4532":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4533":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4534":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4535":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4536":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4537":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4538":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4539":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4540":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4541":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4542":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4543":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4544":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4545":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4546":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4547":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4548":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4549":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4550":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4551":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4552":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4553":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4554":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', + "EPSG:4559":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:4568":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4569":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4570":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4571":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4572":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4573":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4574":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4575":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4576":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4577":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4578":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4579":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4580":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4581":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4582":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4583":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4584":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4585":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4586":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4587":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4588":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4589":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "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 ', + "EPSG:4652":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4653":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4654":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4655":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4656":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4766":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4767":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4768":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4769":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4770":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4771":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4772":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4773":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4774":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4775":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4776":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4777":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4778":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4779":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4780":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4781":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4782":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4783":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4784":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4785":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4786":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4787":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4788":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4789":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4790":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4791":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4792":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4793":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4794":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4795":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4796":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4797":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4798":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4799":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4800":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4812":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "EPSG:4822":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5014":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5015":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5016":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:5048":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5167":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "EPSG:5168":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ', + "EPSG:5169":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "EPSG:5170":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "EPSG:5171":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "EPSG:5172":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5337":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5355":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5356":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5357":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5361":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5362":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:5382":'+proj=utm +zone=21 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5383":'+proj=utm +zone=22 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5387":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5388":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5389":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5396":'+proj=utm +zone=26 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5463":'+proj=utm +zone=17 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5490":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5532":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:5536":'+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs ', + "EPSG:5537":'+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs ', + "EPSG:5538":'+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs ', + "EPSG:5539":'+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs ', + "EPSG:5550":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5551":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5552":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5629":'+proj=utm +zone=38 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5644":'+proj=utm +zone=39 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5666":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:5667":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:5668":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:5669":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5682":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:5683":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:5684":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:5685":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ', + "EPSG:5700":'+proj=utm +zone=1 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:5836":'+proj=utm +zone=37 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5837":'+proj=utm +zone=40 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:5839":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:5879":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:20135":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', + "EPSG:20136":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', + "EPSG:20137":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', + "EPSG:20138":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:20348":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20349":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20350":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20351":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20352":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20353":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20354":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20355":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20356":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20357":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20358":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', + "EPSG:20436":'+proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', + "EPSG:20437":'+proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', + "EPSG:20438":'+proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', + "EPSG:20439":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', + "EPSG:20440":'+proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', + "EPSG:20499":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', + "EPSG:20538":'+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ', + "EPSG:20539":'+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:20822":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', + "EPSG:20823":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', + "EPSG:20824":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:21035":'+proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', + "EPSG:21036":'+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', + "EPSG:21037":'+proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', + "EPSG:21095":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', + "EPSG:21096":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', + "EPSG:21097":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:21148":'+proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', + "EPSG:21149":'+proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', + "EPSG:21150":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:21817":'+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', + "EPSG:21818":'+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:22032":'+proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ', + "EPSG:22033":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:22332":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:22521":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', + "EPSG:22522":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', + "EPSG:22523":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', + "EPSG:22524":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', + "EPSG:22525":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:22832":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:23028":'+proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23029":'+proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23030":'+proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23031":'+proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23032":'+proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23033":'+proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23034":'+proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23035":'+proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23036":'+proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23037":'+proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "EPSG:23038":'+proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:23239":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ', + "EPSG:23240":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ', + "EPSG:23433":'+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:23846":'+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23847":'+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23848":'+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23849":'+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23850":'+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23851":'+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23852":'+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23853":'+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23866":'+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23867":'+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23868":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23869":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23870":'+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23871":'+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23872":'+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23877":'+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23878":'+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23879":'+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23880":'+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23881":'+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23882":'+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23883":'+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23884":'+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:23886":'+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23887":'+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23888":'+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23889":'+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23890":'+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23891":'+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23892":'+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23893":'+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23894":'+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', + "EPSG:23946":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ', + "EPSG:23947":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ', + "EPSG:23948":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ', + "EPSG:24047":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ', + "EPSG:24048":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:24305":'+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ', + "EPSG:24306":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ', + "EPSG:24311":'+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', + "EPSG:24312":'+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', + "EPSG:24313":'+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', + "EPSG:24342":'+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', + "EPSG:24343":'+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', + "EPSG:24344":'+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', + "EPSG:24345":'+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', + "EPSG:24346":'+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', + "EPSG:24347":'+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:24547":'+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ', + "EPSG:24548":'+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:24718":'+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ', + "EPSG:24719":'+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ', + "EPSG:24720":'+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ', + "EPSG:24817":'+proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24818":'+proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24819":'+proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24820":'+proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24821":'+proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24877":'+proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24878":'+proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24879":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24880":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24881":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "EPSG:24882":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:25231":'+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:25828":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25829":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25830":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25831":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25832":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25833":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25834":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25835":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25836":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25837":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:25838":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "EPSG:25932":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:26237":'+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs ', + "EPSG:26331":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ', + "EPSG:26332":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "EPSG:26432":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:26632":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ', + "EPSG:26692":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ', + "EPSG:26701":'+proj=utm +zone=1 +datum=NAD27 +units=m +no_defs ', + "EPSG:26702":'+proj=utm +zone=2 +datum=NAD27 +units=m +no_defs ', + "EPSG:26703":'+proj=utm +zone=3 +datum=NAD27 +units=m +no_defs ', + "EPSG:26704":'+proj=utm +zone=4 +datum=NAD27 +units=m +no_defs ', + "EPSG:26705":'+proj=utm +zone=5 +datum=NAD27 +units=m +no_defs ', + "EPSG:26706":'+proj=utm +zone=6 +datum=NAD27 +units=m +no_defs ', + "EPSG:26707":'+proj=utm +zone=7 +datum=NAD27 +units=m +no_defs ', + "EPSG:26708":'+proj=utm +zone=8 +datum=NAD27 +units=m +no_defs ', + "EPSG:26709":'+proj=utm +zone=9 +datum=NAD27 +units=m +no_defs ', + "EPSG:26710":'+proj=utm +zone=10 +datum=NAD27 +units=m +no_defs ', + "EPSG:26711":'+proj=utm +zone=11 +datum=NAD27 +units=m +no_defs ', + "EPSG:26712":'+proj=utm +zone=12 +datum=NAD27 +units=m +no_defs ', + "EPSG:26713":'+proj=utm +zone=13 +datum=NAD27 +units=m +no_defs ', + "EPSG:26714":'+proj=utm +zone=14 +datum=NAD27 +units=m +no_defs ', + "EPSG:26715":'+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs ', + "EPSG:26716":'+proj=utm +zone=16 +datum=NAD27 +units=m +no_defs ', + "EPSG:26717":'+proj=utm +zone=17 +datum=NAD27 +units=m +no_defs ', + "EPSG:26718":'+proj=utm +zone=18 +datum=NAD27 +units=m +no_defs ', + "EPSG:26719":'+proj=utm +zone=19 +datum=NAD27 +units=m +no_defs ', + "EPSG:26720":'+proj=utm +zone=20 +datum=NAD27 +units=m +no_defs ', + "EPSG:26721":'+proj=utm +zone=21 +datum=NAD27 +units=m +no_defs ', + "EPSG:26722":'+proj=utm +zone=22 +datum=NAD27 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:26901":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26902":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26903":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26904":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26905":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26906":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26907":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26908":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26909":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26910":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26911":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26912":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26913":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26914":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26915":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26916":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26917":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26918":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26919":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26920":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26921":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26922":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:26923":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:27037":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', + "EPSG:27038":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', + "EPSG:27039":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', + "EPSG:27040":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', + "EPSG:27120":'+proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:27429":'+proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:28232":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs ', + "EPSG:28348":'+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28349":'+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28350":'+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28351":'+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28352":'+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28353":'+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28354":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28355":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28356":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28357":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:28358":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:29118":'+proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29119":'+proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29120":'+proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29121":'+proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29122":'+proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29168":'+proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29169":'+proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29170":'+proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29171":'+proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29172":'+proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29177":'+proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29178":'+proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29179":'+proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29180":'+proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29181":'+proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29182":'+proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29183":'+proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29184":'+proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29185":'+proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29187":'+proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29188":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29189":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29190":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29191":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29192":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29193":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29194":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29195":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', + "EPSG:29220":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ', + "EPSG:29221":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ', + "EPSG:29333":'+proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:29635":'+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs ', + "EPSG:29636":'+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:29738":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ', + "EPSG:29739":'+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ', + "EPSG:29849":'+proj=utm +zone=49 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ', + "EPSG:29850":'+proj=utm +zone=50 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:30339":'+proj=utm +zone=39 +ellps=helmert +units=m +no_defs ', + "EPSG:30340":'+proj=utm +zone=40 +ellps=helmert +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:31028":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs ', + "EPSG:31121":'+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:31528":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', + "EPSG:31529":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:31838":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ', + "EPSG:31839":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "EPSG:31965":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31966":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31967":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31968":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31969":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31970":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31971":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31972":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31973":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31974":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31975":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31976":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31977":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31978":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31979":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31980":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31981":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31982":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31983":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31984":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31985":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31986":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31987":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31988":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31989":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31990":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31991":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31992":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31993":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31994":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31995":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31996":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31997":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31998":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:31999":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "EPSG:32000":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:32201":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32202":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32203":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32204":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32205":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32206":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32207":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32208":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32209":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32210":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32211":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32212":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32213":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32214":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32215":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32216":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32217":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32218":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32219":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32220":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32221":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32222":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32223":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32224":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32225":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32226":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32227":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32228":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32229":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32230":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32231":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32232":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32233":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32234":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32235":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32236":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32237":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32238":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32239":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32240":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32241":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32242":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32243":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32244":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32245":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32246":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32247":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32248":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32249":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32250":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32251":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32252":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32253":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32254":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32255":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32256":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32257":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32258":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32259":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32260":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32301":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32302":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32303":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32304":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32305":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32306":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32307":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32308":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32309":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32310":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32311":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32312":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32313":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32314":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32315":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32316":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32317":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32318":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32319":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32320":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32321":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32322":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32323":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32324":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32325":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32326":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32327":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32328":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32329":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32330":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32331":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32332":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32333":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32334":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32335":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32336":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32337":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32338":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32339":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32340":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32341":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32342":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32343":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32344":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32345":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32346":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32347":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32348":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32349":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32350":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32351":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32352":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32353":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32354":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32355":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32356":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32357":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32358":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32359":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32360":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', + "EPSG:32401":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32402":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32403":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32404":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32405":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32406":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32407":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32408":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32409":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32410":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32411":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32412":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32413":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32414":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32415":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32416":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32417":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32418":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32419":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32420":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32421":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32422":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32423":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32424":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32425":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32426":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32427":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32428":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32429":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32430":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32431":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32432":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32433":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32434":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32435":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32436":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32437":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32438":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32439":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32440":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32441":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32442":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32443":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32444":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32445":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32446":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32447":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32448":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32449":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32450":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32451":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32452":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32453":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32454":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32455":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32456":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32457":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32458":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32459":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32460":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32501":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32502":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32503":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32504":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32505":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32506":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32507":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32508":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32509":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32510":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32511":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32512":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32513":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32514":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32515":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32516":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32517":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32518":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32519":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32520":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32521":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32522":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32523":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32524":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32525":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32526":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32527":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32528":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32529":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32530":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32531":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32532":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32533":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32534":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32535":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32536":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32537":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32538":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32539":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32540":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32541":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32542":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32543":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32544":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32545":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32546":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32547":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32548":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32549":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32550":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32551":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32552":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32553":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32554":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32555":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32556":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32557":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32558":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32559":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32560":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', + "EPSG:32601":'+proj=utm +zone=1 +datum=WGS84 +units=m +no_defs ', + "EPSG:32602":'+proj=utm +zone=2 +datum=WGS84 +units=m +no_defs ', + "EPSG:32603":'+proj=utm +zone=3 +datum=WGS84 +units=m +no_defs ', + "EPSG:32604":'+proj=utm +zone=4 +datum=WGS84 +units=m +no_defs ', + "EPSG:32605":'+proj=utm +zone=5 +datum=WGS84 +units=m +no_defs ', + "EPSG:32606":'+proj=utm +zone=6 +datum=WGS84 +units=m +no_defs ', + "EPSG:32607":'+proj=utm +zone=7 +datum=WGS84 +units=m +no_defs ', + "EPSG:32608":'+proj=utm +zone=8 +datum=WGS84 +units=m +no_defs ', + "EPSG:32609":'+proj=utm +zone=9 +datum=WGS84 +units=m +no_defs ', + "EPSG:32610":'+proj=utm +zone=10 +datum=WGS84 +units=m +no_defs ', + "EPSG:32611":'+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs ', + "EPSG:32612":'+proj=utm +zone=12 +datum=WGS84 +units=m +no_defs ', + "EPSG:32613":'+proj=utm +zone=13 +datum=WGS84 +units=m +no_defs ', + "EPSG:32614":'+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs ', + "EPSG:32615":'+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs ', + "EPSG:32616":'+proj=utm +zone=16 +datum=WGS84 +units=m +no_defs ', + "EPSG:32617":'+proj=utm +zone=17 +datum=WGS84 +units=m +no_defs ', + "EPSG:32618":'+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs ', + "EPSG:32619":'+proj=utm +zone=19 +datum=WGS84 +units=m +no_defs ', + "EPSG:32620":'+proj=utm +zone=20 +datum=WGS84 +units=m +no_defs ', + "EPSG:32621":'+proj=utm +zone=21 +datum=WGS84 +units=m +no_defs ', + "EPSG:32622":'+proj=utm +zone=22 +datum=WGS84 +units=m +no_defs ', + "EPSG:32623":'+proj=utm +zone=23 +datum=WGS84 +units=m +no_defs ', + "EPSG:32624":'+proj=utm +zone=24 +datum=WGS84 +units=m +no_defs ', + "EPSG:32625":'+proj=utm +zone=25 +datum=WGS84 +units=m +no_defs ', + "EPSG:32626":'+proj=utm +zone=26 +datum=WGS84 +units=m +no_defs ', + "EPSG:32627":'+proj=utm +zone=27 +datum=WGS84 +units=m +no_defs ', + "EPSG:32628":'+proj=utm +zone=28 +datum=WGS84 +units=m +no_defs ', + "EPSG:32629":'+proj=utm +zone=29 +datum=WGS84 +units=m +no_defs ', + "EPSG:32630":'+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs ', + "EPSG:32631":'+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs ', + "EPSG:32632":'+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs ', + "EPSG:32633":'+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs ', + "EPSG:32634":'+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs ', + "EPSG:32635":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ', + "EPSG:32636":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ', + "EPSG:32637":'+proj=utm +zone=37 +datum=WGS84 +units=m +no_defs ', + "EPSG:32638":'+proj=utm +zone=38 +datum=WGS84 +units=m +no_defs ', + "EPSG:32639":'+proj=utm +zone=39 +datum=WGS84 +units=m +no_defs ', + "EPSG:32640":'+proj=utm +zone=40 +datum=WGS84 +units=m +no_defs ', + "EPSG:32641":'+proj=utm +zone=41 +datum=WGS84 +units=m +no_defs ', + "EPSG:32642":'+proj=utm +zone=42 +datum=WGS84 +units=m +no_defs ', + "EPSG:32643":'+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs ', + "EPSG:32644":'+proj=utm +zone=44 +datum=WGS84 +units=m +no_defs ', + "EPSG:32645":'+proj=utm +zone=45 +datum=WGS84 +units=m +no_defs ', + "EPSG:32646":'+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs ', + "EPSG:32647":'+proj=utm +zone=47 +datum=WGS84 +units=m +no_defs ', + "EPSG:32648":'+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs ', + "EPSG:32649":'+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs ', + "EPSG:32650":'+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs ', + "EPSG:32651":'+proj=utm +zone=51 +datum=WGS84 +units=m +no_defs ', + "EPSG:32652":'+proj=utm +zone=52 +datum=WGS84 +units=m +no_defs ', + "EPSG:32653":'+proj=utm +zone=53 +datum=WGS84 +units=m +no_defs ', + "EPSG:32654":'+proj=utm +zone=54 +datum=WGS84 +units=m +no_defs ', + "EPSG:32655":'+proj=utm +zone=55 +datum=WGS84 +units=m +no_defs ', + "EPSG:32656":'+proj=utm +zone=56 +datum=WGS84 +units=m +no_defs ', + "EPSG:32657":'+proj=utm +zone=57 +datum=WGS84 +units=m +no_defs ', + "EPSG:32658":'+proj=utm +zone=58 +datum=WGS84 +units=m +no_defs ', + "EPSG:32659":'+proj=utm +zone=59 +datum=WGS84 +units=m +no_defs ', + "EPSG:32660":'+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "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 ', + "EPSG:32701":'+proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32702":'+proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32703":'+proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32704":'+proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32705":'+proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32706":'+proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32707":'+proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32708":'+proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32709":'+proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32710":'+proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32711":'+proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32712":'+proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32713":'+proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32714":'+proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32715":'+proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32716":'+proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32717":'+proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32718":'+proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32719":'+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32720":'+proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32721":'+proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32722":'+proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32723":'+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32724":'+proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32725":'+proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32726":'+proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32727":'+proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32728":'+proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32729":'+proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32730":'+proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32731":'+proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32732":'+proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32733":'+proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32734":'+proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32735":'+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32736":'+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32737":'+proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32738":'+proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32739":'+proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32740":'+proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32741":'+proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32742":'+proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32743":'+proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32744":'+proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32745":'+proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32746":'+proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32747":'+proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32748":'+proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32749":'+proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32750":'+proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32751":'+proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32752":'+proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32753":'+proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32754":'+proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32755":'+proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32756":'+proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32757":'+proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32758":'+proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32759":'+proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs ', + "EPSG:32760":'+proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs ', + "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 ', + "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 ' +}; + +},{}],78:[function(require,module,exports){ +var util = require('util') + , fileType = require('file-type'); + +var TileCreator = require('./index').TileCreator + , TileBoundingBoxUtils = require('../tileBoundingBoxUtils') + , TileUtilities = require('./tileUtilities') + , ProjectTile = require('./projectTile.js'); + +function CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) { + TileCreator.apply(this, arguments); + this.canvas = canvas || document.createElement('canvas'); + this.canvas.width = width; + this.canvas.height = height; + this.ctx = this.canvas.getContext('2d'); + + this.image = document.createElement('img'); + + this.tileCanvas = document.createElement('canvas'); + this.tileContext = this.tileCanvas.getContext('2d'); + this.tileCanvas.width = tileMatrix.tile_width; + this.tileCanvas.height = tileMatrix.tile_height; + + this.imageData = new Uint8ClampedArray(width * height * 4); +} + +util.inherits(CanvasTileCreator, TileCreator); + +CanvasTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) { + var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1); + this.imageData.set(color.data, (targetY * this.width * 4) + (targetX * 4)); +}; + +CanvasTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) { + var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow); + + var type = fileType(tileData); + var binary = ''; + var bytes = tileData; + var len = bytes.byteLength; + for (var i = 0; i < len; i++) { + binary += String.fromCharCode( bytes[ i ] ); + } + var base64Data = btoa( binary ); + + return new Promise(function(resolve, reject) { + this.chunks = []; + this.image.onload = function() { + resolve(this.tileContext.drawImage(this.image, 0, 0)); + }.bind(this); + this.image.src = 'data:'+type.mime+';base64,' + base64Data; + }.bind(this)) + .then(function() { + return this.projectTile(tileData, gridColumn, gridRow); + }.bind(this)) + .then(function() { + if (this.chunks && this.chunks.length) { + return this.chunks.reduce(function(sequence, chunk) { + var type = fileType(tileData); + + var binary = ''; + var bytes = chunk.chunk; + var len = bytes.byteLength; + for (var i = 0; i < len; i++) { + binary += String.fromCharCode( bytes[ i ] ); + } + + var base64DataChunk = btoa( binary ); + var image = document.createElement('img'); + + return sequence.then(function() { + return new Promise(function(resolve, reject) { + image.onload = function() { + var p = chunk.position; + + this.ctx.drawImage(image, + p.sx, + p.sy, + p.sWidth, + p.sHeight, + p.dx, + p.dy, + p.dWidth, + p.dHeight + ); + resolve(); + }.bind(this); + image.src = 'data:'+type.mime+';base64,' + base64DataChunk; + }.bind(this)); + }.bind(this)); + + }.bind(this), Promise.resolve()); + } + }.bind(this)); +}; + +CanvasTileCreator.prototype.getCompleteTile = function (format, callback) { + return this.canvas.toDataURL(); +}; + +CanvasTileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) { + var ctx = this.ctx; + var width = this.width; + var height = this.height; + + 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); + + var job = { + tileBoundingBox: JSON.stringify(this.tileBoundingBox), + tileWidthUnitsPerPixel: this.tileWidthUnitsPerPixel, + tileHeightUnitsPerPixel: this.tileHeightUnitsPerPixel, + projectionTo: this.projectionTo, + projectionFrom: this.projectionFrom, + projectionFromDefinition: this.projectionFromDefinition, + tileWidth: this.tileMatrix.tile_width, + tileHeight: this.tileMatrix.tile_height, + pixelYSize: this.tileMatrix.pixel_y_size, + pixelXSize: this.tileMatrix.pixel_x_size, + height: this.height, + width: this.width, + tilePieceBoundingBox: JSON.stringify(tilePieceBoundingBox), + imageData: this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer + }; + + return new Promise(function(resolve, reject) { + try { + var work = require('webworkify'); + var worker = work(require('./tileWorker.js')); + + worker.onmessage = function(e) { + resolve(workerDone(e.data, piecePosition, ctx)); + }; + + worker.postMessage(job, [this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer]); + + } catch (e) { + worker = ProjectTile; + worker(job, function(err, data) { + resolve(workerDone(data, piecePosition, ctx)); + }); + } + }.bind(this)); +}; + +function workerDone(data, piecePosition, ctx) { + if (data.message === 'done') { + var imageData = new Uint8ClampedArray(data.imageData); + var offsetX = piecePosition.startX; + var offsetY = piecePosition.startY; + var finalWidth = data.finalWidth; + var finalHeight = data.finalHeight; + + var tmpCanvas = document.createElement('canvas'); + tmpCanvas.width = finalWidth; + tmpCanvas.height = finalHeight; + tmpCanvas.getContext('2d').putImageData(new ImageData(imageData, finalWidth, finalHeight), 0, 0); + + ctx.drawImage(tmpCanvas, offsetX, offsetY); + } +} + + +module.exports = CanvasTileCreator; + +},{"../tileBoundingBoxUtils":93,"./index":79,"./projectTile.js":81,"./tileUtilities":82,"./tileWorker.js":83,"file-type":223,"util":343,"webworkify":347}],79:[function(require,module,exports){ +(function (process){ +var proj4 = require('proj4'); + +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +var TileBoundingBoxUtils = require('../tileBoundingBoxUtils'); + +module.exports.initialize = function(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) { + var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1); + var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom); + var isNode = typeof(process) !== 'undefined' && process.version; + if (isNode && !isPhantom && !isElectron) { + var NodeTileCreator = require('./node'); + return new NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas); + } else { + var CanvasTileCreator = require('./canvas'); + return new CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas); + } +} + +function TileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo) { + this.width = width; + this.height = height; + this.tileMatrix = tileMatrix; + this.projectionFrom = srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id; + this.projectionFromDefinition = srs.definition; + this.projectionTo = projectionTo.toUpperCase(); + this.tileBoundingBox = tileBoundingBox; + this.tileMatrixSet = tileMatrixSet; + this.chunks = []; + + this.tileHeightUnitsPerPixel = (tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude) / height; + this.tileWidthUnitsPerPixel = (tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude) / width; + + // use this as a quick check if the projections are equal. If they are we can shortcut some math + // special cases 'EPSG:900913' =='EPSG:3857' == 'EPSG:102113' + this.sameProjection = (this.projectionFrom === this.projectionTo) || (this.projectionTo === 'EPSG:3857' && (this.projectionFrom === 'EPSG:900913' || this.projectionFrom === 'EPSG:102113')); +} + +module.exports.TileCreator = TileCreator; + +TileCreator.prototype.projectTile = function(tileData, gridColumn, gridRow) { + var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow); + if (!this.sameProjection) { + return this.reproject(tileData, bb); + } else { + return Promise.resolve(this.cutAndScale(tileData, bb)); + } +} + +TileCreator.prototype.cutAndScale = function (tileData, tilePieceBoundingBox) { + var position = TileBoundingBoxUtils.determinePositionAndScale(tilePieceBoundingBox, this.tileMatrix.tile_height, this.tileMatrix.tile_width, this.tileBoundingBox, this.height, this.width); + if (position.xPositionInFinalTileStart >= this.width || position.xPositionInFinalTileEnd <= 0 || position.yPositionInFinalTileStart >= this.height || position.yPositionInFinalTileEnd <= 0) { + // this tile doesn't belong just skip it + } else { + this.addChunk(tileData, position); + } +}; + +TileCreator.prototype.addChunk = function (chunk, position) { + this.chunks.push({ + chunk: chunk, + position: position + }); +}; + +TileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) { + var y = 0; + var x = 0; + var height = this.height; + var width = this.width; + var proj4To = proj4(this.projectionTo); + var proj4From; + if (this.projectionFrom) { + try { + proj4From = proj4(this.projectionFrom); + } catch (e) {} + } + if (!proj4From && this.projectionFromDefinition) { + proj4From = proj4(this.projectionFromDefinition); + } + var conversion; + try { + conversion = proj4(this.projectionTo, this.projectionFrom); + } catch (e) {} + if (!conversion) { + conversion = proj4(this.projectionTo, this.projectionFromDefinition); + } + + var latitude; + + var rows = []; + for (var i = 0; i < height; i++) { + rows.push(i); + } + var columns = []; + for (var i = 0; i < width; i++) { + columns.push(i); + } + + return rows.reduce(function(rowSequence, row) { + return rowSequence.then(function() { + latitude = this.tileBoundingBox.maxLatitude - (row * this.tileHeightUnitsPerPixel); + var currentColumns = columns.slice(); + return currentColumns.reduce(function(columnSequence, column) { + return columnSequence.then(function() { + // loop over all pixels in the target tile + + // determine the position of the current pixel in the target tile + var longitude = this.tileBoundingBox.minLongitude + (column * this.tileWidthUnitsPerPixel); + + // project that lat/lng to the source coordinate system + var projected = conversion.forward([longitude, latitude]); + var projectedLongitude = projected[0]; + var projectedLatitude = projected[1]; + + // now find the source pixel + var xPixel = this.tileMatrix.tile_width - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / this.tileMatrix.pixel_x_size); + var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / this.tileMatrix.pixel_y_size); + + if (xPixel >= 0 && xPixel < this.tileMatrix.tile_width + && yPixel >= 0 && yPixel < this.tileMatrix.tile_height) { + this.addPixel(column, row, xPixel, yPixel); + } + }.bind(this)); + }.bind(this), Promise.resolve()); + }.bind(this)); + }.bind(this), Promise.resolve()); +}; + +}).call(this,require('_process')) +},{"../tileBoundingBoxUtils":93,"./canvas":78,"./node":80,"_process":284,"proj4":285}],80:[function(require,module,exports){ +var util = require('util') + , concat = require('concat-stream') + , ImageUtils = require('../imageUtils'); + +var TileCreator = require('./index').TileCreator; + +function NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, projectionFrom, projectionTo, canvas) { + TileCreator.apply(this, arguments); + + this.Canvas = require('canvas'); + this.canvas = canvas || this.Canvas.createCanvas(width, height); + this.ctx = this.canvas.getContext('2d'); + + this.tileCanvas = this.Canvas.createCanvas(width, height); + this.tileContext = this.tileCanvas.getContext('2d'); + this.tileCanvas.width = tileMatrix.tile_width; + this.tileCanvas.height = tileMatrix.tile_height; + this.imageData = this.Canvas.createImageData(new Uint8ClampedArray(width * height * 4), width, height); + this.pixelAdded = false; +} + +util.inherits(NodeTileCreator, TileCreator); + +NodeTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) { + var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1); + this.imageData.data.set(color.data, (targetY * this.width * 4) + (targetX * 4)); + this.pixelAdded = true; +}; + +NodeTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) { + return ImageUtils.getImage(tileData) + .then(function(img) { + this.tile = img; + this.tileContext.drawImage(img, 0, 0); + this.chunks = []; + }.bind(this)) + .then(function() { + return this.projectTile(tileData, gridColumn, gridRow); + }.bind(this)) + .then(function() { + if (this.pixelAdded) { + this.ctx.putImageData(this.imageData, 0, 0); + } + }.bind(this)) + .then(function() { + if (this.chunks && this.chunks.length) { + return this.chunks.reduce(function(sequence, chunk) { + return sequence.then(function() { + return ImageUtils.getImage(tileData); + }.bind(this)) + .then(function(image) { + var p = chunk.position; + this.ctx.drawImage(image, + p.sx, + p.sy, + p.sWidth, + p.sHeight, + p.dx, + p.dy, + p.dWidth, + p.dHeight + ); + }.bind(this)); + }.bind(this), Promise.resolve()); + } + }.bind(this)) + .then(function() { + return this.canvas; + }.bind(this)); +}; + +NodeTileCreator.prototype.getCompleteTile = function (format) { + return new Promise(function (resolve, reject) { + var writeStream = concat(function(buffer) { + resolve(buffer); + }); + var stream = null; + if (format === 'png') { + stream = this.canvas.createPNGStream(); + } else { + stream = this.canvas.createJPEGStream(); + } + stream.pipe(writeStream); + }.bind(this)); +}; + +module.exports = NodeTileCreator; + +},{"../imageUtils":89,"./index":79,"canvas":undefined,"concat-stream":185,"util":343}],81:[function(require,module,exports){ +var proj4 = require('proj4'); + +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +var TileUtilities = require('./tileUtilities') + , proj4Defs = require('../../proj4Defs'); + +module.exports = function(job, callback) { + console.log('Tile Worker - working'); + console.time('Tile Worker - time'); + var self = this; + + if (proj4Defs[job.projectionTo]) { + proj4.defs(job.projectionTo, proj4Defs[job.projectionTo]); + } + if (proj4Defs[job.projectionFrom]) { + proj4.defs(job.projectionFrom, proj4Defs[job.projectionFrom]); + } + var proj4To = proj4(job.projectionTo); + var proj4From = proj4(job.projectionFrom); + + var conversion; + try { + conversion = proj4(job.projectionTo, job.projectionFrom); + } catch (e) {} + if (!conversion) { + conversion = proj4(job.projectionTo, job.projectionFromDefinition); + } + + var tileBoundingBox = JSON.parse(job.tileBoundingBox); + var tilePieceBoundingBox = JSON.parse(job.tilePieceBoundingBox); + + var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, tileBoundingBox, job.height, job.width, job.projectionTo, job.projectionFrom, job.projectionFromDefinition, job.tileHeightUnitsPerPixel, job.tileWidthUnitsPerPixel, job.pixelXSize, job.pixelYSize); + var x = piecePosition.startX; + var y = piecePosition.startY; + + var finalWidth = (piecePosition.endX - piecePosition.startX); + var finalHeight = (piecePosition.endY - piecePosition.startY); + if (finalWidth <= 0 || finalHeight <= 0) { + console.timeEnd('Tile Worker - time'); + if (callback) { + return callback(null, {message:'donenodata'}); + } else { + postMessage({message:'donenodata'}); + return self.close(); + } + } + + var imageData = new Uint8ClampedArray(job.imageData); + + var finalImageData = new Uint8ClampedArray(finalWidth * finalHeight * 4); + var latitude; + + var yArray = []; + for (var i = y; i < piecePosition.endY; i++) { + yArray.push(i); + } + + var xArray = []; + for (var i = x; i < piecePosition.endX; i++) { + xArray.push(i); + } + + return yArray.reduce(function(ySequence, y) { + return ySequence.then(function() { + latitude = tileBoundingBox.maxLatitude - (y * job.tileHeightUnitsPerPixel); + var currentXArray = xArray.slice(); + return currentXArray.reduce(function(xSequence, x) { + return xSequence.then(function() { + longitude = tileBoundingBox.minLongitude + (x * job.tileWidthUnitsPerPixel); + var projected = conversion.forward([longitude, latitude]); + var projectedLongitude = projected[0]; + var projectedLatitude = projected[1]; + + var xPixel = job.tileWidth - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / job.pixelXSize); + var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / job.pixelYSize); + if (xPixel >= 0 && xPixel < job.tileWidth + && yPixel >= 0 && yPixel < job.tileHeight) { + var sliceStart = (yPixel * job.tileWidth * 4) + (xPixel * 4); + if (sliceStart >= 0) { + finalImageData.set(imageData.slice(sliceStart, sliceStart + 4), ((y-piecePosition.startY)*finalWidth*4) + ((x-piecePosition.startX)*4)); + } + } + }); + }, Promise.resolve()); + }); + }, Promise.resolve()) + .then(function() { + console.timeEnd('Tile Worker - time'); + if (callback) { + callback(null, {message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]); + } else { + postMessage({message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]); + self.close(); + } + }); +} + +},{"../../proj4Defs":77,"./tileUtilities":82,"proj4":285}],82:[function(require,module,exports){ +var proj4 = require('proj4'); +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +module.exports.getPiecePosition = function(tilePieceBoundingBox, tileBoundingBox, height, width, projectionTo, projectionFrom, projectionFromDefinition, tileHeightUnitsPerPixel, tileWidthUnitsPerPixel, pixelXSize, pixelYSize) { + var conversion; + try { + conversion = proj4(projectionTo, projectionFrom); + } catch (e) {} + if (!conversion) { + conversion = proj4(projectionTo, projectionFromDefinition); + } + + var maxLatitude = tilePieceBoundingBox.maxLatitude; + var minLatitude = tilePieceBoundingBox.minLatitude; + var minLongitude = tilePieceBoundingBox.minLongitude - pixelXSize; + var maxLongitude = tilePieceBoundingBox.maxLongitude + pixelXSize; + + if (projectionTo.toUpperCase() === 'EPSG:3857' && projectionFrom.toUpperCase() === 'EPSG:4326') { + maxLatitude = maxLatitude > 85.0511 ? 85.0511 : maxLatitude; + minLatitude = minLatitude < -85.0511 ? -85.0511 : minLatitude; + minLongitude = minLongitude < -180.0 ? -180.0 : minLongitude; + maxLongitude = maxLongitude > 180.0 ? 180.0 : maxLongitude; + } + + // ensure the projeced longitude wont wrap around the world + var negative180 = proj4('EPSG:4326', projectionTo, [-180,0]); + var positive180 = proj4('EPSG:4326', projectionTo, [180,0]); + minLongitude = minLongitude < negative180[0] ? negative180[0] : minLongitude; + maxLongitude = maxLongitude > positive180[0] ? positive180[0] : maxLongitude; + + var pieceBoundingBoxInTileProjectionSW = conversion.inverse([minLongitude, minLatitude]); + var pieceBoundingBoxInTileProjectionNE = conversion.inverse([maxLongitude, maxLatitude]); + + var pieceBBProjected = { + minLatitude: isNaN(pieceBoundingBoxInTileProjectionSW[1]) ? tileBoundingBox.minLatitude : pieceBoundingBoxInTileProjectionSW[1], + maxLatitude: isNaN(pieceBoundingBoxInTileProjectionNE[1]) ? tileBoundingBox.maxLatitude : pieceBoundingBoxInTileProjectionNE[1], + minLongitude: pieceBoundingBoxInTileProjectionSW[0], + maxLongitude: pieceBoundingBoxInTileProjectionNE[0] + }; + + var startY = y = Math.max(0, Math.floor((tileBoundingBox.maxLatitude - pieceBBProjected.maxLatitude) / tileHeightUnitsPerPixel)); + var startX = x = Math.max(0, Math.floor((pieceBBProjected.minLongitude - tileBoundingBox.minLongitude) / tileWidthUnitsPerPixel)); + + var endY = Math.min(height, height - Math.floor((pieceBBProjected.minLatitude - tileBoundingBox.minLatitude) / tileHeightUnitsPerPixel)); + var endX = Math.min(width, width - Math.floor((tileBoundingBox.maxLongitude - pieceBBProjected.maxLongitude) / tileWidthUnitsPerPixel)); + + return { + startY: startY, + startX: startX, + endY: endY, + endX: endX + }; +} + +},{"proj4":285}],83:[function(require,module,exports){ +var ProjectTile = require('./projectTile'); + +function tileWorker(e) { + console.log('Tile Worker - working'); + console.time('Tile Worker - time'); + var self = this; + var job = e.data; + + ProjectTile(job, function(err, data) { + postMessage(data); + self.close(); + }); +} + +module.exports = function(self) { + self.onmessage = tileWorker; + self.onerror = function(e) { + console.log('error', e); + } +}; + +},{"./projectTile":81}],84:[function(require,module,exports){ +/** + * Feature Draw Type module. + * @module tiles/features + */ +var FeatureDrawType = { + /** + * Circle for a point + */ + CIRCLE: 'CIRCLE', + /** + * Stroke for a line of polygon + */ + STROKE: 'STOKE', + /** + * Fill for a polygon + */ + FILL: 'FILL' +}; + + +module.exports = FeatureDrawType; + +},{}],85:[function(require,module,exports){ +/** + * FeaturePaint module. + * @module tiles/features + */ +var FeaturePaint = function () { + this.featurePaints = {}; +}; + +/** + * Get the feature paint for the featureDrawType + * @param {module:tiles/features~FeatureDrawType} featureDrawType + * @return {module:tiles/features~FeaturePaint} paint + */ +FeaturePaint.prototype.getPaint = function(featureDrawType) { + return this.featurePaints[featureDrawType]; +}; + +/** + * Set the feature paint for the featureDrawType + * @param {module:tiles/features~FeatureDrawType} featureDrawType + * @param {module:tiles/features~Paint} paint + */ +FeaturePaint.prototype.setPaint = function(featureDrawType, paint) { + this.featurePaints[featureDrawType] = paint; +}; + +module.exports = FeaturePaint; + +},{}],86:[function(require,module,exports){ +/** + * Feature Paint Cache. + * @module tiles/features + */ +var FeaturePaint = require('./featurePaint'); + + +/** + * Constructor, created with cache size of {@link #DEFAULT_CACHE_SIZE} + * @constructor + */ +var FeaturePaintCache = function(size = null) { + this.cacheSize = size !== null ? size : FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE; + this.paintCache = {}; + this.accessHistory = []; +}; + +/** + * Get the cached featurePaint for the style row or null if not cached + * @param {module:extension/style~StyleRow} styleRow style row + * @return {module:tiles/features~FeaturePaint} feature paint or null + */ +FeaturePaintCache.prototype.getFeaturePaintForStyleRow = function(styleRow) { + return this.getFeaturePaint(styleRow.getId()); +}; + +/** + * Get the cached featurePaint for the style row id or null if not cached + * @param {Number} styleRowId style row id + * @return {module:tiles/features~FeaturePaint} feature paint or null + */ +FeaturePaintCache.prototype.getFeaturePaint = function(styleRowId) { + var featurePaint = this.paintCache[styleRowId]; + if (!!featurePaint) { + var index = this.accessHistory.indexOf(styleRowId); + if (index > -1) { + this.accessHistory.splice(index, 1); + } + this.accessHistory.push(styleRowId); + } + return featurePaint; +}; + +/** + * Get the paint for the style row and draw type + * @param {module:extension/style~StyleRow} styleRow style row + * @param {String} type feature draw type + * @return {module:tiles/features~Paint} paint + */ +FeaturePaintCache.prototype.getPaintForStyleRow = function(styleRow, type) { + return this.getPaint(styleRow.getId(), type); +}; + +/** + * Get the paint for the style row id and draw type + * @param {Number} styleId style row id + * @param {String} type feature draw type + * @return {module:tiles/features~Paint} paint + */ +FeaturePaintCache.prototype.getPaint = function(styleId, type) { + var paint = null; + var featurePaint = this.getFeaturePaint(styleId); + if (featurePaint !== undefined && featurePaint !== null) { + paint = featurePaint.getPaint(type); + } + return paint; +}; + +/** + * Cache the featurePaint for the style row + * @param {module:extension/style~StyleRow} styleRow style row + * @param {module:tiles/features~FeatureDrawType} type feature draw type + * @param {module:tiles/features~Paint} paint paint + */ +FeaturePaintCache.prototype.setPaintForStyleRow = function(styleRow, type, paint) { + this.setPaint(styleRow.getId(), type, paint); +}; + +/** + * Cache the featurePaint for the style row id + * @param {Number} styleRowId style row id + * @param {module:tiles/features~FeatureDrawType} type feature draw type + * @param {module:tiles/features~Paint} paint paint + */ +FeaturePaintCache.prototype.setPaint = function(styleRowId, type, paint) { + var featurePaint = this.paintCache[styleRowId]; + if (!featurePaint) { + featurePaint = new FeaturePaint(); + } else { + var index = this.accessHistory.indexOf(styleRowId); + if (index > -1) { + this.accessHistory.splice(index, 1); + } + } + featurePaint.setPaint(type, paint); + this.paintCache[styleRowId] = featurePaint; + this.accessHistory.push(styleRowId); + if (Object.keys(this.paintCache).length > this.cacheSize) { + var styleId = this.accessHistory.shift(); + if (styleId) { + delete this.paintCache[styleId]; + } + } +}; + +/** + * Remove the cached featurePaint for the style row id + * @param {Number} styleRowId style row id + * @return {module:tiles/features~FeaturePaint} removed feature paint or null + */ +FeaturePaintCache.prototype.remove = function(styleRowId) { + var removed = this.paintCache[styleRowId]; + delete this.paintCache[styleRowId]; + if (!!removed) { + var index = this.accessHistory.indexOf(styleRowId); + if (index > -1) { + this.accessHistory.splice(index, 1); + } } + return removed; +}; + +/** + * Clear the cache + */ +FeaturePaintCache.prototype.clear = function() { + this.paintCache = {}; + this.accessHistory = []; +}; + +/** + * Resize the cache + * @param {Number} maxSize max size + */ +FeaturePaintCache.prototype.resize = function(maxSize) { + this.cacheSize = maxSize; + var keys = Object.keys(this.paintCache); + if (keys.length > maxSize) { + var numberToRemove = keys.length - maxSize; + for (var i = 0; i < numberToRemove; i++) { + var styleRowId = this.accessHistory.shift(); + if (!!styleRowId) { + delete this.paintCache[styleRowId]; + } + } + } +}; + +FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE = 100; + + +module.exports = FeaturePaintCache; + +},{"./featurePaint":85}],87:[function(require,module,exports){ +(function (process){ +/** + * FeatureTiles module. + * @module tiles/features + */ +var TileBoundingBoxUtils = require('../tileBoundingBoxUtils') + , BoundingBox = require('../../boundingBox') + , FeatureTableStyles = require('../../extension/style/featureTableStyles') + , Paint = require('./paint') + , FeaturePaintCache = require('./featurePaintCache') + , FeatureDrawType = require('./featureDrawType') + , IconCache = require('../../extension/style/iconCache') + , ImageUtils = require('../imageUtils'); + +var d3geo = require('d3-geo') + , concat = require('concat-stream') + , reproject = require('reproject') + , PolyToLine = require('@turf/polygon-to-line').default; + +/** + * Tiles drawn from or linked to features. Used to query features and optionally draw tiles + * from those features. + */ +var FeatureTiles = function(featureDao, tileWidth = null, tileHeight = null) { + var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1); + var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom); + var isNode = typeof(process) !== 'undefined' && process.version; + this.useNodeCanvas = isNode && !isPhantom && !isElectron; + this.featureDao = featureDao; + this.tileWidth = tileWidth !== null ? tileWidth : 256; + this.tileHeight = tileHeight !== null ? tileHeight : 256; + this.compressFormat = 'png'; + this.pointRadius = 4.0; + this.pointPaint = new Paint(); + this.pointIcon = null; + this.linePaint = new Paint(); + this.linePaint.setStrokeWidth(2.0); + this.lineStrokeWidth = 2.0; + this.polygonPaint = new Paint(); + this.polygonPaint.setStrokeWidth(2.0); + this.polygonStrokeWidth = 2.0; + this.fillPolygon = true; + this.polygonFillPaint = new Paint(); + this.featurePaintCache = new FeaturePaintCache(); + this.iconCache = new IconCache(); + this.scale = 1.0; + this.geoPackage = this.featureDao.geoPackage; + if (this.geoPackage != null) { + this.featureTableStyles = new FeatureTableStyles(this.geoPackage, this.featureDao.getTable()); + if (!this.featureTableStyles.has()) { + this.featureTableStyles = null; + } + } + this.maxFeaturesPerTile = null; + this.maxFeaturesTileDraw = null; + this.calculateDrawOverlap(); +}; + +/** + * Manually set the width and height draw overlap + * @param {Number} pixels pixels + */ +FeatureTiles.prototype.setDrawOverlap = function (pixels) { + this.setWidthDrawOverlap(pixels); + this.setHeightDrawOverlap(pixels); +}; + +/** + * Get the width draw overlap + * @return {Number} width draw overlap + */ +FeatureTiles.prototype.getWidthDrawOverlap = function () { + return this.widthOverlap; +}; + +/** + * Manually set the width draw overlap + * @param {Number} pixels pixels + */ +FeatureTiles.prototype.setWidthDrawOverlap = function (pixels) { + this.widthOverlap = pixels; +}; + +/** + * Get the height draw overlap + * @return {Number} height draw overlap + */ +FeatureTiles.prototype.getHeightDrawOverlap = function () { + return this.heightOverlap; +}; + +/** + * Manually set the height draw overlap + * @param {Number} pixels pixels + */ +FeatureTiles.prototype.setHeightDrawOverlap = function (pixels) { + this.heightOverlap = pixels; +}; + +/** + * Get the feature DAO + * @return {module:features/user/featureDao} feature dao + */ +FeatureTiles.prototype.getFeatureDao = function () { + return this.featureDao; +}; + +/** + * Get the feature table styles + * @return {module:extension/style~FeatureTableStyles} feature table styles + */ +FeatureTiles.prototype.getFeatureTableStyles = function () { + return this.featureTableStyles; +}; + +/** + * Set the feature table styles + * @param {module:extension/style~FeatureTableStyles} featureTableStyles feature table styles + */ +FeatureTiles.prototype.setFeatureTableStyles = function (featureTableStyles) { + this.featureTableStyles = featureTableStyles; +}; + +/** + * Ignore the feature table styles within the GeoPackage + */ +FeatureTiles.prototype.ignoreFeatureTableStyles = function () { + this.setFeatureTableStyles(null); + this.calculateDrawOverlap(); +}; + +/** + * Clear all caches + */ +FeatureTiles.prototype.clearCache = function () { + this.clearStylePaintCache(); + this.clearIconCache(); +}; + +/** + * Clear the style paint cache + */ +FeatureTiles.prototype.clearStylePaintCache = function () { + this.featurePaintCache.clear(); +}; + +/** + * Set / resize the style paint cache size + * + * @param {Number} size + * @since 3.3.0 + */ +FeatureTiles.prototype.setStylePaintCacheSize = function (size) { + this.featurePaintCache.resize(size); +}; + +/** + * Clear the icon cache + */ +FeatureTiles.prototype.clearIconCache = function () { + this.iconCache.clear(); +}; + +/** + * Set / resize the icon cache size + * @param {Number} size new size + */ +FeatureTiles.prototype.setIconCacheSize = function (size) { + this.iconCache.resize(size); +}; + +/** + * Get the tile width + * @return {Number} tile width + */ +FeatureTiles.prototype.getTileWidth = function () { + return this.tileWidth; +}; + +/** + * Set the tile width + * @param {Number} tileWidth tile width + */ +FeatureTiles.prototype.setTileWidth = function (tileWidth) { + this.tileWidth = tileWidth; +}; + +/** + * Get the tile height + * @return {Number} tile height + */ +FeatureTiles.prototype.getTileHeight = function () { + return this.tileHeight; +}; + +/** + * Set the tile height + * @param {Number} tileHeight tile height + */ +FeatureTiles.prototype.setTileHeight = function (tileHeight) { + this.tileHeight = tileHeight; +}; + +/** + * Get the compress format + * @return {String} compress format + */ +FeatureTiles.prototype.getCompressFormat = function () { + return this.compressFormat; +}; + +/** + * Set the compress format + * @param {String} compressFormat compress format + */ +FeatureTiles.prototype.setCompressFormat = function (compressFormat) { + this.compressFormat = compressFormat; +}; + +/** + * Set the scale + * + * @param {Number} scale scale factor + */ +FeatureTiles.prototype.setScale = function(scale) { + this.scale = scale; + this.linePaint.setStrokeWidth(scale * this.lineStrokeWidth); + this.polygonPaint.setStrokeWidth(scale * this.polygonStrokeWidth); + this.featurePaintCache.clear(); +}; + +/** + * Get the scale + * @return {Number} scale factor + */ +FeatureTiles.prototype.getScale = function() { + return this.scale; +}; + +FeatureTiles.prototype.calculateDrawOverlap = function() { + if (this.pointIcon) { + this.heightOverlap = this.scale * this.pointIcon.getHeight(); + this.widthOverlap = this.scale * this.pointIcon.getWidth(); + } else { + this.heightOverlap = this.scale * this.pointRadius; + this.widthOverlap = this.scale * this.pointRadius; + } + + var lineHalfStroke = this.scale * this.lineStrokeWidth / 2.0; + this.heightOverlap = Math.max(this.heightOverlap, lineHalfStroke); + this.widthOverlap = Math.max(this.widthOverlap, lineHalfStroke); + + var polygonHalfStroke = this.scale * this.polygonStrokeWidth / 2.0; + this.heightOverlap = Math.max(this.heightOverlap, polygonHalfStroke); + this.widthOverlap = Math.max(this.widthOverlap, polygonHalfStroke); + + if (this.featureTableStyles !== null && this.featureTableStyles.has()) { + var styleRowIds = []; + var tableStyleIds = this.featureTableStyles.getAllTableStyleIds(); + if (tableStyleIds !== null) { + styleRowIds = styleRowIds.concat(tableStyleIds); + } + var styleIds = this.featureTableStyles.getAllStyleIds(); + if (styleIds != null) { + styleRowIds = styleRowIds.concat(styleIds.filter(id => styleRowIds.indexOf(id) === -1)); + } + var styleDao = this.featureTableStyles.getStyleDao(); + for (var i = 0; i < styleRowIds.length; i++) { + var styleRowId = styleRowIds[i]; + var styleRow = styleDao.queryForId(styleRowId); + var styleHalfWidth = this.scale * (styleRow.getWidthOrDefault() / 2.0); + this.widthOverlap = Math.max(this.widthOverlap, styleHalfWidth); + this.heightOverlap = Math.max(this.heightOverlap, styleHalfWidth); + } + + var iconRowIds = []; + var tableIconIds = this.featureTableStyles.getAllTableIconIds(); + if (tableIconIds != null) { + iconRowIds = iconRowIds.concat(tableIconIds); + } + var iconIds = this.featureTableStyles.getAllIconIds(); + if (iconIds != null) { + iconRowIds = iconRowIds.concat(iconIds.filter(id => iconRowIds.indexOf(id) === -1)); + } + var iconDao = this.featureTableStyles.getIconDao(); + for (i = 0; i < iconRowIds.length; i++) { + var iconRowId = iconRowIds[i]; + var iconRow = iconDao.queryForId(iconRowId); + var iconDimensions = iconRow.getDerivedDimensions(); + var iconWidth = this.scale * Math.ceil(iconDimensions[0]); + var iconHeight = this.scale * Math.ceil(iconDimensions[1]); + this.widthOverlap = Math.max(this.widthOverlap, iconWidth); + this.heightOverlap = Math.max(this.heightOverlap, iconHeight); + } + } +}; + +FeatureTiles.prototype.setDrawOverlapsWithPixels = function(pixels) { + this.widthOverlap = pixels; + this.heightOverlap = pixels; +}; + +FeatureTiles.prototype.getFeatureStyle = function(featureRow) { + var featureStyle = null; + if (this.featureTableStyles !== null) { + featureStyle = this.featureTableStyles.getFeatureStyleForFeatureRow(featureRow); + } + return featureStyle; +}; + +/** + * Get the point paint for the feature style, or return the default paint + * @param featureStyle feature style + * @return paint + */ +FeatureTiles.prototype.getPointPaint = function(featureStyle) { + var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.CIRCLE); + if (paint == null) { + paint = this.pointPaint; + } + return paint; +}; + +/** + * Get the line paint for the feature style, or return the default paint + * @param featureStyle feature style + * @return paint + */ +FeatureTiles.prototype.getLinePaint = function(featureStyle) { + var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE); + if (paint === null) { + paint = this.linePaint; + } + return paint; +}; + +/** + * Get the polygon paint for the feature style, or return the default paint + * @param featureStyle feature style + * @return paint + */ +FeatureTiles.prototype.getPolygonPaint = function(featureStyle) { + var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE); + if (paint == null) { + paint = this.polygonPaint; + } + return paint; +}; + +/** + * Get the polygon fill paint for the feature style, or return the default + * paint + * @param featureStyle feature style + * @return paint + */ +FeatureTiles.prototype.getPolygonFillPaint = function(featureStyle) { + var paint = null; + var hasStyleColor = false; + if (featureStyle != null) { + var style = featureStyle.getStyle(); + if (style != null) { + if (style.hasFillColor()) { + paint = this.getStylePaint(style, FeatureDrawType.FILL); + } else { + hasStyleColor = style.hasColor(); + } + } + } + if (paint === null && !hasStyleColor && this.fillPolygon) { + paint = this.polygonFillPaint; + } + return paint; +}; + +/** + * Get the feature style paint from cache, or create and cache it + * @param featureStyle feature style + * @param drawType draw type + * @return feature style paint + */ +FeatureTiles.prototype.getFeatureStylePaint = function(featureStyle, drawType) { + var paint = null; + if (featureStyle != null) { + var style = featureStyle.getStyle(); + if (style !== null && style.hasColor()) { + paint = this.getStylePaint(style, drawType); + } + } + return paint; +}; + +/** + * Get the style paint from cache, or create and cache it + * @param style style row + * @param drawType draw type + * @return {Paint} paint + */ +FeatureTiles.prototype.getStylePaint = function(style, drawType) { + var paint = this.featurePaintCache.getPaintForStyleRow(style, drawType); + if (paint === undefined || paint === null) { + var color = null; + var strokeWidth = null; + if (drawType === FeatureDrawType.CIRCLE) { + color = style.getColor(); + } else if (drawType === FeatureDrawType.STROKE) { + color = style.getColor(); + strokeWidth = this.scale * style.getWidthOrDefault(); + } else if (drawType === FeatureDrawType.FILL) { + color = style.getFillColor(); + strokeWidth = this.scale * style.getWidthOrDefault(); + } else { + throw new Error("Unsupported Draw Type: " + drawType); + } + var stylePaint = new Paint(); + stylePaint.setColor(color); + if (strokeWidth !== null) { + stylePaint.setStrokeWidth(strokeWidth); + } + paint = this.featurePaintCache.getPaintForStyleRow(style, drawType); + if (paint === undefined || paint === null) { + this.featurePaintCache.setPaintForStyleRow(style, drawType, stylePaint); + paint = stylePaint; + } + } + return paint; +}; + +/** + * Get the point radius + * @return {Number} radius + */ +FeatureTiles.prototype.getPointRadius = function() { + return this.pointRadius; +}; + +/** + * Set the point radius + * @param {Number} pointRadius point radius + */ +FeatureTiles.prototype.setPointRadius = function(pointRadius) { + this.pointRadius = pointRadius; +}; + +/** + * Get point color + * @return {String} color + */ +FeatureTiles.prototype.getPointColor = function() { + return this.pointPaint.getColor(); +}; + +/** + * Set point color + * @param {String} pointColor point color + */ +FeatureTiles.prototype.setPointColor = function(pointColor) { + this.pointPaint.setColor(pointColor); +}; + +/** + * Get the point icon + * @return {module:tiles/features.FeatureTilePointIcon} icon + */ +FeatureTiles.prototype.getPointIcon = function() { + return this.pointIcon; +}; + +/** + * Set the point icon + * @param {module:tiles/features.FeatureTilePointIcon} pointIcon point icon + */ +FeatureTiles.prototype.setPointIcon = function(pointIcon) { + this.pointIcon = pointIcon; +}; + +/** + * Get line stroke width + * @return {Number} width + */ +FeatureTiles.prototype.getLineStrokeWidth = function() { + return this.lineStrokeWidth; +}; + +/** + * Set line stroke width + * @param {Number} lineStrokeWidth line stroke width + */ +FeatureTiles.prototype.setLineStrokeWidth = function(lineStrokeWidth) { + this.lineStrokeWidth = lineStrokeWidth; + this.linePaint.setStrokeWidth(this.scale * this.lineStrokeWidth); +}; + +/** + * Get line color + * @return {String} color + */ +FeatureTiles.prototype.getLineColor = function() { + return this.linePaint.getColor(); +}; + +/** + * Set line color + * @param {String} lineColor line color + */ +FeatureTiles.prototype.setLineColor = function(lineColor) { + this.linePaint.setColor(lineColor); +}; + +/** + * Get polygon stroke width + * @return {Number} width + */ +FeatureTiles.prototype.getPolygonStrokeWidth = function() { + return this.polygonStrokeWidth; +}; + +/** + * Set polygon stroke width + * @param {Number} polygonStrokeWidth polygon stroke width + */ +FeatureTiles.prototype.setPolygonStrokeWidth = function(polygonStrokeWidth) { + this.polygonStrokeWidth = polygonStrokeWidth; + this.polygonPaint.setStrokeWidth(this.scale * this.polygonStrokeWidth); +}; + +/** + * Get polygon color + * @return {String} color + */ +FeatureTiles.prototype.getPolygonColor = function() { + return this.polygonPaint.getColor(); +}; + +/** + * Set polygon color + * @param {String} polygonColor polygon color + */ +FeatureTiles.prototype.setPolygonColor = function(polygonColor) { + this.polygonPaint.setColor(polygonColor); +}; + +/** + * Is fill polygon + * @return {Boolean} true if fill polygon + */ +FeatureTiles.prototype.isFillPolygon = function() { + return this.fillPolygon; +}; + +/** + * Set the fill polygon + * @param {Boolean} fillPolygon fill polygon + */ +FeatureTiles.prototype.setFillPolygon = function(fillPolygon) { + this.fillPolygon = fillPolygon; +}; + +/** + * Get polygon fill color + * @return {String} color + */ +FeatureTiles.prototype.getPolygonFillColor = function() { + return this.polygonFillPaint.getColor(); +}; + +/** + * Set polygon fill color + * @param {String} polygonFillColor polygon fill color + */ +FeatureTiles.prototype.setPolygonFillColor = function(polygonFillColor) { + this.polygonFillPaint.setColor(polygonFillColor); +}; + +/** + * Get the max features per tile + * @return {Number} max features per tile or null + */ +FeatureTiles.prototype.getMaxFeaturesPerTile = function() { + return this.maxFeaturesPerTile; +}; + +/** + * Set the max features per tile. When more features are returned in a query + * to create a single tile, the tile is not created. + * @param {Number} maxFeaturesPerTile max features per tile + */ +FeatureTiles.prototype.setMaxFeaturesPerTile = function(maxFeaturesPerTile) { + this.maxFeaturesPerTile = maxFeaturesPerTile; +}; + +/** + * Get the max features tile draw, the custom tile drawing implementation + * for tiles with more features than the max at #getMaxFeaturesPerTile + * @return {module:tiles/features/custom~CustomFeatureTile} max features tile draw or null + */ +FeatureTiles.prototype.getMaxFeaturesTileDraw = function() { + return this.maxFeaturesTileDraw; +}; + +/** + * Set the max features tile draw, used to draw tiles when more features for + * a single tile than the max at #getMaxFeaturesPerTile exist + * @param {module:tiles/features/custom~CustomFeatureTile} maxFeaturesTileDraw max features tile draw + */ +FeatureTiles.prototype.setMaxFeaturesTileDraw = function(maxFeaturesTileDraw) { + this.maxFeaturesTileDraw = maxFeaturesTileDraw; +}; + +FeatureTiles.prototype.drawTile = function (x, y, z, canvas = null) { + var indexed = this.featureDao.isIndexed(); + if (indexed) { + return this.drawTileQueryIndex(x, y, z, canvas); + } else { + return this.drawTileQueryAll(x, y, z, canvas); + } +}; + +FeatureTiles.prototype.drawTileQueryAll = function(x, y, zoom, canvas) { + var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); + boundingBox = this.expandBoundingBox(boundingBox); + + var count = this.featureDao.getCount(); + if (this.maxFeaturesPerTile === null || count <= this.maxFeaturesPerTile) { + return this.drawTileWithBoundingBox(boundingBox, zoom, canvas); + } else if (this.maxFeaturesTileDraw !== null) { + return this.maxFeaturesTileDraw.drawUnindexedTile(256, 256, canvas); + } +}; + +FeatureTiles.prototype.drawTileQueryIndex = async function(x, y, z, tileCanvas) { + var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z); + var expandedBoundingBox = this.expandBoundingBox(boundingBox); + + var width = 256; + var height = 256; + + var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << z), width * (1 << z)); + var xTranslate = -positionAndScale.xPositionInFinalTileStart; + var yTranslate = -positionAndScale.yPositionInFinalTileStart; + + var pi = Math.PI, + tau = 2 * pi; + var drawProjection = d3geo.geoMercator() + .scale((1 << z) * 256 / tau) + .center([-180, 85.0511287798066]) + .translate([xTranslate, yTranslate]); + + var canvas; + if (tileCanvas !== null) { + canvas = tileCanvas; + } + var context; + if (canvas === undefined || canvas === null) { + if (this.useNodeCanvas) { + var Canvas = require('canvas'); + canvas = Canvas.createCanvas(width, height); + } else { + canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + } + } + context = canvas.getContext('2d'); + context.clearRect(0, 0, width, height); + var srs = this.featureDao.getSrs(); + var tileCount = this.featureDao.countWebMercatorBoundingBox(expandedBoundingBox); + if (this.maxFeaturesPerTile === null || tileCount <= this.maxFeaturesPerTile) { + var iterator = this.featureDao.fastQueryWebMercatorBoundingBox(expandedBoundingBox); + var geojsonFeatures = [] + for (var featureRow of iterator) { + geojsonFeatures.push(featureRow.getGeometry().geometry.toGeoJSON()); + } + for (var gj of geojsonFeatures) { + var style = this.getFeatureStyle(featureRow); + if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) { + gj = reproject.toWgs84(gj, this.featureDao.projection); + } + await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style); + } + return new Promise(function(resolve, reject) { + if (this.useNodeCanvas) { + var writeStream = concat(function (buffer) { + resolve(buffer); + }); + var stream = null; + if (this.compressFormat === 'png') { + stream = canvas.createPNGStream(); + } else { + stream = canvas.createJPEGStream(); + } + stream.pipe(writeStream); + } else { + resolve(canvas.toDataURL('image/' + this.compressFormat)); + } + }.bind(this)); + } else if (this.maxFeaturesTileDraw !== null) { + // Draw the max features tile + return this.maxFeaturesTileDraw.drawTile(width, height, tileCount, canvas); + } +}; + +FeatureTiles.prototype.drawTileWithBoundingBox = async function(boundingBox, zoom, tileCanvas) { + var width = 256; + var height = 256; + var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << zoom), width * (1 << zoom)); + var xTranslate = -positionAndScale.xPositionInFinalTileStart; + var yTranslate = -positionAndScale.yPositionInFinalTileStart; + + var pi = Math.PI, + tau = 2 * pi; + var drawProjection = d3geo.geoMercator() + .scale((1 << zoom) * 256 / tau) + .center([-180, 85.0511287798066]) + .translate([xTranslate, yTranslate]); + var canvas; + if (tileCanvas !== null) { + canvas = tileCanvas; + } + var context; + if (canvas === undefined || canvas === null) { + if (this.useNodeCanvas) { + var Canvas = require('canvas'); + canvas = Canvas.createCanvas(width, height); + } else { + canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + } + } + context = canvas.getContext('2d'); + context.clearRect(0, 0, width, height); + var featureDao = this.featureDao; + var srs = featureDao.getSrs(); + var each = featureDao.queryForEach(); + var featureRows = []; + for (var row of each) { + featureRows.push(featureDao.getRow(row)); + } + for (var fr of featureRows) { + var gj = fr.getGeometry().geometry.toGeoJSON(); + var style = this.getFeatureStyle(fr); + if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) { + gj = reproject.toWgs84(gj, featureDao.projection); + } + await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style); + } + return new Promise(function(resolve, reject) { + if (this.useNodeCanvas) { + var writeStream = concat(function (buffer) { + resolve(buffer); + }); + var stream = null; + if (this.compressFormat === 'png') { + stream = canvas.createPNGStream(); + } else { + stream = canvas.createJPEGStream(); + } + stream.pipe(writeStream); + } else { + resolve(canvas.toDataURL('image/' + this.compressFormat)); + } + }.bind(this)); +}; + +/** + * Draw a point in the context + * @param path + * @param geoJson + * @param context + * @param boundingBox + * @param featureStyle + * @param drawProjection + */ +FeatureTiles.prototype.drawPoint = async function(path, geoJson, context, boundingBox, featureStyle, drawProjection) { + var width; + var height; + var iconX; + var iconY; + var transformedCoords = drawProjection([geoJson.coordinates[0], geoJson.coordinates[1]]); + var x = transformedCoords[0]; + var y = transformedCoords[1]; + + if (featureStyle !== undefined && featureStyle !== null && featureStyle.hasIcon()) { + var iconRow = featureStyle.getIcon(); + var image = await iconRow.getDataImage(iconRow); + width = Math.round(this.scale * iconRow.getWidth()); + height = Math.round(this.scale * iconRow.getHeight()); + if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height && y <= this.tileHeight + height) { + var anchorU = iconRow.getAnchorUOrDefault(); + var anchorV = iconRow.getAnchorVOrDefault(); + iconX = Math.round(x - (anchorU * width)); + iconY = Math.round(y - (anchorV * height)); + context.drawImage(image, iconX, iconY, width, height); + } + } else if (this.pointIcon !== undefined && this.pointIcon !== null) { + width = Math.round(this.scale * this.pointIcon.getWidth()); + height = Math.round(this.scale * this.pointIcon.getHeight()); + if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height + && y <= this.tileHeight + height) { + iconX = Math.round(x - this.scale * this.pointIcon.getXOffset()); + iconY = Math.round(y - this.scale * this.pointIcon.getYOffset()); + ImageUtils.scaleBitmap(this.pointIcon.getIcon(), this.scale).then((image) => { + context.drawImage(image, iconX, iconY, width, height); + }); + } + } else { + context.save(); + var radius = null; + if (featureStyle !== undefined && featureStyle !== null) { + var styleRow = featureStyle.getStyle(); + if (styleRow !== undefined && styleRow !== null) { + radius = this.scale * (styleRow.getWidthOrDefault() / 2.0); + } + } + if (radius == null) { + radius = this.scale * this.pointRadius; + } + var pointPaint = this.getPointPaint(featureStyle); + if (x >= 0 - radius && x <= this.tileWidth + radius && y >= 0 - radius && y <= this.tileHeight + radius) { + var circleX = Math.round(x); + var circleY = Math.round(y); + context.beginPath(); + context.arc(circleX, circleY, radius, 0, 2 * Math.PI, true); + context.closePath() + context.fillStyle = pointPaint.getColorRGBA(); + context.fill(); + } + context.restore(); + } +}; + +/** + * Draw a line in the context + * @param path + * @param geoJson + * @param context + * @param featureStyle + */ +FeatureTiles.prototype.drawLine = function(path, geoJson, context, featureStyle) { + context.save(); + context.beginPath(); + var paint = this.getLinePaint(featureStyle); + context.strokeStyle = paint.getColorRGBA(); + context.lineWidth = paint.getStrokeWidth(); + path(geoJson); + context.stroke(); + context.closePath(); + context.restore(); +}; + +/** + * Draw a polygon in the context + * @param path + * @param geoJson + * @param context + * @param featureStyle + */ +FeatureTiles.prototype.drawPolygon = function(path, geoJson, context, featureStyle) { + context.save(); + context.beginPath(); + path(PolyToLine(geoJson).geometry); + context.closePath(); + var fillPaint = this.getPolygonFillPaint(featureStyle); + if (fillPaint !== undefined && fillPaint !== null) { + context.fillStyle = fillPaint.getColorRGBA(); + context.fill(); + } + var paint = this.getPolygonPaint(featureStyle); + context.strokeStyle = paint.getColorRGBA(); + context.lineWidth = paint.getStrokeWidth(); + context.stroke(); + context.restore(); +}; + +/** + * Add a feature to the batch + * @param geoJson + * @param context + * @param drawProjection + * @param boundingBox + * @param featureStyle + */ +FeatureTiles.prototype.addFeatureToBatch = async function(geoJson, context, drawProjection, boundingBox, featureStyle) { + var path = new d3geo.geoPath() + .context(context) + .projection(drawProjection); + var i, c; + if (geoJson.type === 'Point') { + await this.drawPoint(path, geoJson, context, boundingBox, featureStyle, drawProjection); + } else if (geoJson.type === 'LineString') { + this.drawLine(path, geoJson, context, featureStyle); + } else if (geoJson.type === 'Polygon') { + this.drawPolygon(path, geoJson, context, featureStyle); + } else if (geoJson.type === 'MultiPoint') { + for (i = 0; i < geoJson.coordinates.length; i++) { + c = geoJson.coordinates[i]; + var ptGeom = { + type: 'Point', + coordinates: c + }; + await this.drawPoint(path, ptGeom, context, boundingBox, featureStyle, drawProjection); + } + } else if (geoJson.type === 'MultiLineString') { + for (i = 0; i < geoJson.coordinates.length; i++) { + c = geoJson.coordinates[i]; + var lsGeom = { + type: 'LineString', + coordinates: c + }; + this.drawLine(path, lsGeom, context, featureStyle); + } + } else if (geoJson.type === 'MultiPolygon') { + for (i = 0; i < geoJson.coordinates.length; i++) { + c = geoJson.coordinates[i]; + var pGeom = { + type: 'Polygon', + coordinates: c + }; + this.drawPolygon(path, pGeom, context, featureStyle); + } + } +}; + +/** + * Create an expanded bounding box to handle features outside the tile that overlap + * @param webMercatorBoundingBox web mercator bounding box + * @return {BoundingBox} bounding box + */ +FeatureTiles.prototype.expandBoundingBox = function(webMercatorBoundingBox) { + return this.expandWebMercatorBoundingBox(webMercatorBoundingBox, webMercatorBoundingBox); +}; + +/** + * Create an expanded bounding box to handle features outside the tile that overlap + * @param webMercatorBoundingBox web mercator bounding box + * @param tileWebMercatorBoundingBox tile web mercator bounding box + * @return {BoundingBox} bounding box + */ +FeatureTiles.prototype.expandWebMercatorBoundingBox = function(webMercatorBoundingBox, tileWebMercatorBoundingBox) { + // Create an expanded bounding box to handle features outside the tile that overlap + var minLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.widthOverlap); + var maxLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileWidth + this.widthOverlap); + var maxLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.heightOverlap); + var minLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileHeight + this. heightOverlap); + + // Choose the most expanded longitudes and latitudes + minLongitude = Math.min(minLongitude, webMercatorBoundingBox.minLongitude); + maxLongitude = Math.max(maxLongitude, webMercatorBoundingBox.maxLongitude); + minLatitude = Math.min(minLatitude, webMercatorBoundingBox.minLatitude); + maxLatitude = Math.max(maxLatitude, webMercatorBoundingBox.maxLatitude); + + // Bound with the web mercator limits + minLongitude = Math.max(minLongitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); + maxLongitude = Math.min(maxLongitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); + minLatitude = Math.max(minLatitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); + maxLatitude = Math.min(maxLatitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); + + return new BoundingBox(minLongitude, maxLongitude, minLatitude, maxLatitude); +}; + +module.exports = FeatureTiles; + +}).call(this,require('_process')) +},{"../../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){ +/** + * Paint module. + * @module tiles/features + */ +var Paint = function () { + this.color = '#000000FF'; + this.strokeWidth = 1.0; +}; + +/** + * Get the color + * @returns {String} color + */ +Paint.prototype.getColor = function() { + return this.color; +}; + +/** + * Get the color + * @returns {String} color + */ +Paint.prototype.getColorRGBA = function() { + // assumes color is in the format #RRGGBB or #RRGGBBAA + var red = parseInt(this.color.substr(1,2), 16); + var green = parseInt(this.color.substr(3,2), 16); + var blue = parseInt(this.color.substr(5,2), 16); + var alpha = 1.0; + if (this.color.length > 7) { + alpha = parseInt(this.color.substr(7,2), 16) / 255; + } + return 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha + ')'; +}; + +/** + * Set the color + * @param {String} color + */ +Paint.prototype.setColor = function(color) { + this.color = color; +}; + +/** + * Get the stroke width + * @returns {Number} strokeWidth + */ +Paint.prototype.getStrokeWidth = function() { + return this.strokeWidth; +}; + +/** + * Set the stroke width + * @param {Number} strokeWidth + */ +Paint.prototype.setStrokeWidth = function(strokeWidth) { + this.strokeWidth = strokeWidth; +}; + +module.exports = Paint; + +},{}],89:[function(require,module,exports){ +(function (process,Buffer){ +var sizeOf = require('image-size'); +var ImageUtils = {}; +var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1); +var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom); +var isNode = typeof(process) !== 'undefined' && process.version; +ImageUtils.useNodeCanvas = isNode && !isPhantom && !isElectron; + +/** + * Get image for data + * @param {Buffer|String} data file data or file path + * @returns {Object} + */ +ImageUtils.getImageSize = function (data) { + return sizeOf(data); +}; + +/** + * Get image for data + * @param {Buffer|String} data file data or file path + * @param {String} contentType + * @returns {Promise} + */ +ImageUtils.getImage = function (data, contentType = 'image/png') { + return new Promise(function (resolve, reject) { + var image; + if (ImageUtils.useNodeCanvas) { + var Canvas = require('canvas'); + image = new Canvas.Image(); + } else { + image = new Image(); + } + image.onload = () => { + resolve(image); + }; + image.onerror = (error) => { + reject(error); + }; + var src = data; + if (data instanceof Buffer) { + src = 'data:' + contentType + ';base64,' + data.toString('base64'); + } + image.src = src; + }.bind(this)); +}; + +/** + * Get a scaled image + * @param {Buffer} data + * @param {Number} scale + * @returns {Promise} + */ +ImageUtils.getScaledImage = function (data, scale) { + return ImageUtils.getImage(data).then(function (image) { + return ImageUtils.scaleBitmap(image, scale); + }.bind(this)); +}; + +/** + * Get a scaled image + * @param {Image} image + * @param {Number} scale + * @returns {Promise} + */ +ImageUtils.scaleBitmap = function (image, scale) { + if (scale === 1.0) { + return Promise.resolve(image); + } else { + var iconWidth = image.width; + var iconHeight = image.height; + var scaledWidth = Math.round(scale * iconWidth); + var scaledHeight = Math.round(scale * iconHeight); + var canvas, ctx, img; + if (ImageUtils.useNodeCanvas) { + var Canvas = require('canvas'); + canvas = Canvas.createCanvas(scaledWidth, scaledHeight); + img = new Canvas.Image(); + } else { + canvas = document.createElement('canvas'); + canvas.width = scaledWidth; + canvas.height = scaledHeight; + img = new Image(); + } + ctx = canvas.getContext('2d'); + ctx.drawImage(image, 0, 0, iconWidth, iconHeight, 0, 0, scaledWidth, scaledHeight); + return new Promise(function (resolve) { + img.onload = () => { resolve(img); }; + img.src = canvas.toDataURL(); + }.bind(this)); + } +}; + +module.exports = ImageUtils; + +}).call(this,require('_process'),require("buffer").Buffer) +},{"_process":284,"buffer":182,"canvas":undefined,"image-size":244}],90:[function(require,module,exports){ +/** + * @module tiles/matrix + * @see module:dao/dao + */ + +var Dao = require('../../dao/dao') + // , ContentsDao = require('../../core/contents').ContentsDao + , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao; + +var util = require('util'); + +/** + * Tile Matrix object. Documents the structure of the tile matrix at each zoom + * level in each tiles table. It allows GeoPackages to contain rectangular as + * well as square tiles (e.g. for better representation of polar regions). It + * allows tile pyramids with zoom levels that differ in resolution by factors of + * 2, irregular intervals, or regular intervals other than factors of 2. + * @class TileMatrix + */ +var TileMatrix = function() { + + /** + * Tile Pyramid User Data Table Name + * @member {string} + */ + this.table_name; + + /** + * 0 ⇐ zoom_level ⇐ max_level for table_name + * @member {Number} + */ + this.zoom_level; + + /** + * Number of columns (>= 1) in tile matrix at this zoom level + * @member {Number} + */ + this.matrix_width; + + /** + * Number of rows (>= 1) in tile matrix at this zoom level + * @member {Number} + */ + this.matrix_height; + + /** + * Tile width in pixels (>= 1)for this zoom level + * @member {Number} + */ + this.tile_width; + + /** + * Tile height in pixels (>= 1)for this zoom level + * @member {Number} + */ + this.tile_height; + + /** + * In t_table_name srid units or default meters for srid 0 (>0) + * @member {Number} + */ + this.pixel_x_size; + + /** + * In t_table_name srid units or default meters for srid 0 (>0) + * @member {Number} + */ + this.pixel_y_size; +}; + +/** + * Tile Matrix Set Data Access Object + * @class TileMatrixDao + * @extends {module:dao/dao~Dao} + */ +var TileMatrixDao = function(geoPackage) { + Dao.call(this, geoPackage); +} + +util.inherits(TileMatrixDao, Dao); + +TileMatrixDao.prototype.createObject = function () { + return new TileMatrix(); +}; + +/** + * get the Contents of the Tile matrix + * @param {tileMatrix} tileMatrix the tile matrix + * @param {Function} callback returns the contents + */ +TileMatrixDao.prototype.getContents = function (tileMatrix) { + var dao = this.geoPackage.getContentsDao(); + return dao.queryForId(tileMatrix.table_name); +}; + +TileMatrixDao.prototype.getTileMatrixSet = function (tileMatrix) { + var dao = this.geoPackage.getTileMatrixSetDao(); + return dao.queryForId(tileMatrix.table_name); +}; + +TileMatrixDao.TABLE_NAME = "gpkg_tile_matrix"; +TileMatrixDao.COLUMN_PK1 = "table_name"; +TileMatrixDao.COLUMN_PK2 = "zoom_level"; +TileMatrixDao.COLUMN_TABLE_NAME = "table_name"; +TileMatrixDao.COLUMN_ZOOM_LEVEL = "zoom_level"; +TileMatrixDao.COLUMN_MATRIX_WIDTH = "matrix_width"; +TileMatrixDao.COLUMN_MATRIX_HEIGHT = "matrix_height"; +TileMatrixDao.COLUMN_TILE_WIDTH = "tile_width"; +TileMatrixDao.COLUMN_TILE_HEIGHT = "tile_height"; +TileMatrixDao.COLUMN_PIXEL_X_SIZE = "pixel_x_size"; +TileMatrixDao.COLUMN_PIXEL_Y_SIZE = "pixel_y_size"; + +TileMatrix.TABLE_NAME = 'tableName'; +TileMatrix.ZOOM_LEVEL = 'zoomLevel'; +TileMatrix.MATRIX_WIDTH = 'matrixWidth'; +TileMatrix.MATRIX_HEIGHT = 'matrixHeight'; +TileMatrix.TILE_WIDTH = 'tileWidth'; +TileMatrix.TILE_HEIGHT = 'tileHeight'; +TileMatrix.PIXEL_X_SIZE = 'pixelXSize'; +TileMatrix.PIXEL_Y_SIZE = 'pixelYSize'; + + +TileMatrixDao.prototype.gpkgTableName = 'gpkg_tile_matrix'; +TileMatrixDao.prototype.idColumns = [TileMatrixDao.COLUMN_PK1, TileMatrixDao.COLUMN_PK2]; +TileMatrixDao.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]; + +module.exports.TileMatrixDao = TileMatrixDao; +module.exports.TileMatrix = TileMatrix; + +},{"../../dao/dao":11,"../matrixset":91,"util":343}],91:[function(require,module,exports){ +/** + * @module tiles/matrixset + * @see module:dao/dao + */ + +var Dao = require('../../dao/dao') + , BoundingBox = require('../../boundingBox') + , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao; + // , ContentsDao = require('../../core/contents').ContentsDao; + +var util = require('util'); + +/** + * `TileMatrixSet` models the [`gpkg_tile_matrix_set`](https://www.geopackage.org/spec121/index.html#_tile_matrix_set) + * table. A row in this table defines the minimum bounding box (min_x, min_y, + * max_x, max_y) and spatial reference system (srs_id) for all tiles in a + * [tile pyramid](https://www.geopackage.org/spec121/index.html#tiles_user_tables) + * user data table. While the parent [Contents]{@link module:core/contents~Contents} + * row/object also defines a bounding box, the tile matrix set bounding box is + * used as the reference for calculating tile column/row matrix coordinates, so + * (min_x, max_y) in SRS coordinates would be the upper-left corner of the tile + * at tile matrix coordinate (0, 0). The parent `Contents` bounding box may be + * smaller or larger than the `TileMatrixSet` bounding box, and its purpose is + * to guide a user-facing application to the target region of the tile pyramid. + * The [`srs_id`]{@link module:tiles/matrixset~TileMatrixSet#srs_id} of the `TileMatrixSet`, on the other hand, must + * match that of the parent [`Contents`]{@link module:core/contents~Contents#srs_id}. + * + * @class TileMatrixSet + */ +var TileMatrixSet = function() { + + /** + * Name of the [tile pyramid user data table](https://www.geopackage.org/spec121/index.html#tiles_user_tables) + * that stores the tiles + * @member {string} + */ + this.table_name; + + /** + * Unique identifier for each Spatial Reference System within a GeoPackage + * @member {SRSRef} + */ + this.srs_id; + + /** + * Bounding box minimum easting or longitude for all content in table_name + * @member {Number} + */ + this.min_x; + + /** + * Bounding box minimum northing or latitude for all content in table_name + * @member {Number} + */ + this.min_y; + + /** + * Bounding box maximum easting or longitude for all content in table_name + * @member {Number} + */ + this.max_x; + + /** + * Bounding box maximum northing or latitude for all content in table_name + * @member {Number} + */ + this.max_y; +}; + +TileMatrixSet.prototype.setBoundingBox = function (boundingBox) { + this.min_x = boundingBox.minLongitude; + this.max_x = boundingBox.maxLongitude; + this.min_y = boundingBox.minLatitude; + this.max_y = boundingBox.maxLatitude; +}; + +TileMatrixSet.prototype.getBoundingBox = function () { + return new BoundingBox(this.min_x, this.max_x, this.min_y, this.max_y); +}; + +TileMatrixSet.prototype.setContents = function(contents) { + if (contents && contents.data_type === 'tiles') { + this.table_name = contents.table_name; + } +} + +/** + * Tile Matrix Set Data Access Object + * @class TileMatrixSetDao + * @extends {module:dao/dao~Dao} + */ +var TileMatrixSetDao = function(geoPackage) { + Dao.call(this, geoPackage); +} + +util.inherits(TileMatrixSetDao, Dao); + +TileMatrixSetDao.prototype.createObject = function () { + return new TileMatrixSet(); +}; + +/** + * Get the tile table names + * @param {Function} callback returns the tile table names + */ +TileMatrixSetDao.prototype.getTileTables = function () { + var tableNames = []; + for (var result of this.connection.each('select ' + TileMatrixSetDao.COLUMN_TABLE_NAME + ' from ' + TileMatrixSetDao.TABLE_NAME)) { + tableNames.push(result[TileMatrixSetDao.COLUMN_TABLE_NAME]); + } + return tableNames; +}; + +TileMatrixSetDao.prototype.getProjection = function (tileMatrixSet) { + var srs = this.getSrs(tileMatrixSet); + if (!srs) return; + var srsDao = this.geoPackage.getSpatialReferenceSystemDao(); + return srsDao.getProjection(srs); +}; + +/** + * Get the Spatial Reference System of the Tile Matrix set + * @param {TileMatrixSet} tileMatrixSet tile matrix set + */ +TileMatrixSetDao.prototype.getSrs = function (tileMatrixSet) { + var dao = this.geoPackage.getSpatialReferenceSystemDao(); + return dao.queryForId(tileMatrixSet.srs_id); +}; + +TileMatrixSetDao.prototype.getContents = function (tileMatrixSet) { + var dao = this.geoPackage.getContentsDao(); + return dao.queryForId(tileMatrixSet.table_name); +}; + +TileMatrixSet.TABLE_NAME = "tableName"; +TileMatrixSet.MIN_X = "minX"; +TileMatrixSet.MIN_Y = "minY"; +TileMatrixSet.MAX_X = "maxX"; +TileMatrixSet.MAX_Y = "maxY"; +TileMatrixSet.SRS_ID = "srsId"; + +TileMatrixSetDao.TABLE_NAME = "gpkg_tile_matrix_set"; +TileMatrixSetDao.COLUMN_PK = "table_name"; +TileMatrixSetDao.COLUMN_TABLE_NAME = "table_name"; +TileMatrixSetDao.COLUMN_SRS_ID = "srs_id"; +TileMatrixSetDao.COLUMN_MIN_X = "min_x"; +TileMatrixSetDao.COLUMN_MIN_Y = "min_y"; +TileMatrixSetDao.COLUMN_MAX_X = "max_x"; +TileMatrixSetDao.COLUMN_MAX_Y = "max_y"; + +TileMatrixSetDao.prototype.gpkgTableName = 'gpkg_tile_matrix_set'; +TileMatrixSetDao.prototype.idColumns = [TileMatrixSetDao.COLUMN_PK]; +TileMatrixSetDao.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]; + +TileMatrixSetDao.prototype.columnToPropertyMap = {}; +TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_TABLE_NAME] = TileMatrixSet.TABLE_NAME; +TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_SRS_ID] = TileMatrixSet.SRS_ID; +TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_X] = TileMatrixSet.MIN_X; +TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_Y] = TileMatrixSet.MIN_Y; +TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_X] = TileMatrixSet.MAX_X; +TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_Y] = TileMatrixSet.MAX_Y; + +module.exports.TileMatrixSetDao = TileMatrixSetDao; +module.exports.TileMatrixSet = TileMatrixSet; + +},{"../../boundingBox":7,"../../core/srs":9,"../../dao/dao":11,"util":343}],92:[function(require,module,exports){ +var TileMatrixSetDao = require('../matrixset').TileMatrixSetDao + , TileBoundingBoxUtils = require('../tileBoundingBoxUtils') + , TileCreator = require('../creator') + , BoundingBox = require('../../boundingBox'); + +var proj4 = require('proj4'); + +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +var GeoPackageTileRetriever = function(tileDao, width, height) { + this.tileDao = tileDao; + this.tileDao.adjustTileMatrixLengths(); + + this.width = width; + this.height = height; +} + +module.exports = GeoPackageTileRetriever; + +GeoPackageTileRetriever.prototype.getWebMercatorBoundingBox = function () { + if (this.setWebMercatorBoundingBox) { + return this.setWebMercatorBoundingBox; + } else { + var tileMatrixSetDao = this.tileDao.geoPackage.getTileMatrixSetDao(); + var tileMatrixSet = this.tileDao.tileMatrixSet; + var srs = tileMatrixSetDao.getSrs(tileMatrixSet); + this.setProjectionBoundingBox = tileMatrixSet.getBoundingBox(); + if (srs.organization_coordsys_id === 4326 && srs.organization === 'EPSG') { + this.setProjectionBoundingBox.minLatitude = Math.max(this.setProjectionBoundingBox.minLatitude, -85.05); + this.setProjectionBoundingBox.maxLatitude = Math.min(this.setProjectionBoundingBox.maxLatitude, 85.05); + } + this.setWebMercatorBoundingBox = this.setProjectionBoundingBox.projectBoundingBox(this.tileDao.projection, 'EPSG:3857'); + + return this.setWebMercatorBoundingBox; + } +}; + +GeoPackageTileRetriever.prototype.hasTile = function (x, y, zoom) { + var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); + var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom); + var iterator = this.retrieveTileResults(webMercatorBoundingBox, tileMatrix); + var exists = false; + for (var row of iterator) { + exists = true; + } + return exists; +}; + +GeoPackageTileRetriever.prototype.getTile = function (x, y, zoom) { + var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); + var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); + return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857'); +}; + +GeoPackageTileRetriever.prototype.drawTileIn = function (x, y, zoom, canvas) { + var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); + var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); + return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857', canvas); +}; + +GeoPackageTileRetriever.prototype.getTileWithWgs84Bounds = function (wgs84BoundingBox, zoom) { + var webMercatorBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', 'EPSG:3857'); + var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); + return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857'); +}; + +GeoPackageTileRetriever.prototype.getTileWithWgs84BoundsInProjection = function (wgs84BoundingBox, zoom, targetProjection) { + var targetBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', targetProjection); + return this.getTileWithBounds(targetBoundingBox, zoom, targetProjection); +}; + +GeoPackageTileRetriever.prototype.getWebMercatorTile = function (x, y, zoom) { + // need to determine the geoPackage zoom level from the web mercator zoom level + var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); + var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); + return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857'); +}; + +GeoPackageTileRetriever.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) { + // find width and height of this tile in geopackage projection + var proj4Projection = proj4(this.tileDao.projection, 'EPSG:3857'); + var ne = proj4Projection.inverse([webMercatorBoundingBox.maxLongitude, webMercatorBoundingBox.maxLatitude]); + var sw = proj4Projection.inverse([webMercatorBoundingBox.minLongitude, webMercatorBoundingBox.minLatitude]); + var width = (ne[0] - sw[0]); + var height = (ne[1] - sw[1]); + var gpZoom = undefined; + // find the closest zoom for width + for (var i = 0; i < this.tileDao.widths.length; i++) { + var tileWidth = this.tileDao.widths[i]; + var difference = Math.abs(width - tileWidth); + var tolerance = .001 * tileWidth; + if (tileWidth <= width || difference <= tolerance) { + gpZoom = this.tileDao.maxZoom - i; + } + } + + return gpZoom; +}; + +GeoPackageTileRetriever.prototype.getTileWithBounds = function (targetBoundingBox, zoom, targetProjection, canvas) { + var tiles = []; + var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom); + if (!tileMatrix) return Promise.resolve(); + var tileWidth = tileMatrix.tile_width; + var tileHeight = tileMatrix.tile_height; + var matrixSetBoundsInTargetProjection = this.tileDao.tileMatrixSet.getBoundingBox().projectBoundingBox(this.tileDao.projection, targetProjection); + + var matrixTotalBoundingBox = this.tileDao.tileMatrixSet.getBoundingBox(); + var targetBoundingBoxInMatrixSetProjection = targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection); + + var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(matrixTotalBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, targetBoundingBoxInMatrixSetProjection); + var creator = TileCreator.initialize(this.width || tileWidth, this.height || tileHeight, tileMatrix, this.tileDao.tileMatrixSet, targetBoundingBox, this.tileDao.srs, targetProjection, canvas); + + var iterator = this.retrieveTileResults(targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection), tileMatrix); + for (var tile of iterator) { + tiles.push({ + data: tile.getTileData(), + gridColumn: tile.getTileColumn(), + gridRow: tile.getRow() + }); + } + + return tiles.reduce(function(sequence, tile) { + return sequence.then(function() { + return creator.addTile(tile.data, tile.gridColumn, tile.gridRow); + }); + }, Promise.resolve()) + .then(function() { + if (!canvas) { + return creator.getCompleteTile('png'); + } + }); +}; + +GeoPackageTileRetriever.prototype.retrieveTileResults = function (tileMatrixProjectionBoundingBox, tileMatrix) { + if(tileMatrix) { + var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(this.tileDao.tileMatrixSet.getBoundingBox(), tileMatrix.matrix_width, tileMatrix.matrix_height, tileMatrixProjectionBoundingBox); + return this.tileDao.queryByTileGrid(tileGrid, tileMatrix.zoom_level); + } else { + return Promise.resolve(); + } +}; + +},{"../../boundingBox":7,"../creator":79,"../matrixset":91,"../tileBoundingBoxUtils":93,"proj4":285}],93:[function(require,module,exports){ + +/** + * This module exports utility functions for [slippy map (XYZ)](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) + * tile calculations. + * + * @module tiles/tileBoundingBoxUtils + */ + +const BoundingBox = require('../boundingBox'); +const TileGrid = require('./tileGrid'); +const proj4 = ((proj4) => { return 'default' in proj4 ? proj4['default'] : proj4 })(require('proj4')); + +var WEB_MERCATOR_HALF_WORLD_WIDTH = proj4('EPSG:4326', 'EPSG:3857').forward([180, 0])[0]; + +/** + * Calculate the bounds in tile coordinates that covers the given bounding box + * at the given zoom level. The result object contains the keys `minX`, `maxX`, + * `minY`, and `maxY`, which are tile column and row values in the XYZ tile + * scheme. + * + * @param {BoundingBox} webMercatorBoundingBox bounds in EPSG:3857 coordinates (meters) + * @param {number} zoom the integral zoom level + * @returns {{minX: number, maxX: number, minY: number, maxY: number}} bounds in tile column and row coordinates + */ +module.exports.webMercatorTileBox = function(webMercatorBoundingBox, zoom) { + var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom); + var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide); + + const minLonClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLongitude); + const maxLonClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLongitude); + const minLatClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLatitude); + const maxLatClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLatitude); + + var minX = Math.floor((minLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize); + var maxX = Math.max(0, Math.ceil((maxLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize) - 1); + var minY = Math.floor((WEB_MERCATOR_HALF_WORLD_WIDTH - maxLatClip) / tileSize); + var maxY = Math.max(0, Math.ceil((WEB_MERCATOR_HALF_WORLD_WIDTH - minLatClip) / tileSize) - 1); + + return { + minX: minX, + maxX: maxX, + minY: minY, + maxY: maxY + }; +} + +module.exports.WEB_MERCATOR_HALF_WORLD_WIDTH = WEB_MERCATOR_HALF_WORLD_WIDTH; + +module.exports.determinePositionAndScale = function(geoPackageTileBoundingBox, tileHeight, tileWidth, totalBoundingBox, totalHeight, totalWidth) { + var p = {}; + + var finalTileWidth = totalBoundingBox.maxLongitude - totalBoundingBox.minLongitude; + var xoffsetMin = geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude; + var xpercentageMin = xoffsetMin / finalTileWidth; + + var finalTileHeight = totalBoundingBox.maxLatitude - totalBoundingBox.minLatitude; + var yoffsetMax = totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude; + var ypercentageMax = yoffsetMax / finalTileHeight; + + var gpTileWidth = geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude; + var gpPixelsPerUnitWidth = tileWidth / gpTileWidth; + + var finalTilePixelsPerUnitWidth = totalWidth / finalTileWidth; + + var xPositionInFinalTileUnits = ((geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth); + var widthInFinalTileUnits = Math.round(((geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth)); + + var gpTileHeight = geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude; + var gpPixelsPerUnitHeight = tileHeight / gpTileHeight; + + var finalTilePixelsPerUnitHeight = totalHeight / finalTileHeight; + + var yPositionInFinalTileUnits = ((totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude) * finalTilePixelsPerUnitHeight); + var heightInFinalTileUnits = Math.round((geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude) * finalTilePixelsPerUnitHeight); + + p.yPositionInFinalTileStart = Math.round(ypercentageMax * totalHeight); + p.xPositionInFinalTileStart = Math.round(xpercentageMin * totalWidth); + p.dx = p.xPositionInFinalTileStart; + p.dy = p.yPositionInFinalTileStart; + p.sx = 0; + p.sy = 0; + p.dWidth = widthInFinalTileUnits; + p.dHeight = heightInFinalTileUnits; + p.sWidth = tileWidth; + p.sHeight = tileHeight; + + return p; +} + +/** + * Calculate the bounds in EPSG:3857 coordinates of the tile at the given XYZ + * coordinates coordinates and zoom level. + * + * @param {number} x tile column + * @param {number} y tile row + * @param {number} zoom zoom level + * @return {BoundingBox} a bounding box in EPSG:3857 meters + */ +module.exports.getWebMercatorBoundingBoxFromXYZ = function(x, y, zoom, options) { + var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom); + var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide); + + var meterBuffer = 0; + if (options && options.buffer && options.tileSize) { + var pixelBuffer = options.buffer; + var metersPerPixel = tileSize / options.tileSize; + meterBuffer = metersPerPixel * pixelBuffer; + } + + var minLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + (x * tileSize) - meterBuffer; + var maxLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + ((x + 1) * tileSize) + meterBuffer; + var minLat = WEB_MERCATOR_HALF_WORLD_WIDTH - ((y + 1) * tileSize) - meterBuffer; + var maxLat = WEB_MERCATOR_HALF_WORLD_WIDTH - (y * tileSize) + meterBuffer; + + minLon = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLon); + maxLon = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLon); + minLat = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLat); + maxLat = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLat); + + var box = new BoundingBox(minLon, maxLon, minLat, maxLat); + + return box; +} + +/** + * Get the tile size in meters + * + * @param tilesPerSide tiles per side + * + * @return meters + */ +module.exports.tileSizeWithTilesPerSide = function(tilesPerSide) { + return (2 * WEB_MERCATOR_HALF_WORLD_WIDTH) / tilesPerSide; +} + +/** + * Get the tiles per side, width and height, at the zoom level + * + * @param zoom zoom level + * + * @return tiles per side + */ +module.exports.tilesPerSideWithZoom = function(zoom) { + return 1 << zoom; +} + +/** + * Get the tile grid + * + * @param webMercatorTotalBox web mercator total bounding box + * @param matrixWidth matrix width + * @param matrixHeight matrix height + * @param boundingBox bounding box + * + * @return tile grid + */ +module.exports.getTileGridWithTotalBoundingBox = function(totalBoundingBox, matrixWidth, matrixHeight, boundingBox) { + var minColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.minLongitude); + var maxColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.maxLongitude, true); + if (minColumn < matrixWidth && maxColumn >= 0) { + if (minColumn < 0) { + minColumn = 0; + } + if (maxColumn >= matrixWidth) { + maxColumn = matrixWidth - 1; + } + } + + var maxRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.minLatitude, true); + var minRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.maxLatitude); + + + if(minRow < matrixHeight && maxRow >= 0){ + if(minRow < 0){ + minRow = 0; + } + if(maxRow >= matrixHeight){ + maxRow = matrixHeight - 1; + } + } + + var tileGrid = new TileGrid(minColumn, maxColumn, minRow, maxRow); + return tileGrid; +} + +/** + * Get the tile column of the longitude in degrees + * + * @param webMercatorTotalBox web mercator total bounding box + * @param matrixWidth matrix width + * @param longitude longitude + * + * @return tile column + */ +module.exports.getTileColumnWithTotalBoundingBox = function(webMercatorTotalBox, matrixWidth, longitude, max) { + var minX = webMercatorTotalBox.minLongitude; + var maxX = webMercatorTotalBox.maxLongitude; + var tileId; + if (longitude < minX) { + tileId = -1; + } else if (longitude >= maxX) { + tileId = matrixWidth; + } else { + var matrixWidthMeters = maxX - minX; + var tileWidth = matrixWidthMeters / matrixWidth; + var tileIdDouble = ((longitude - minX) / tileWidth); + tileId = ~~tileIdDouble; + if (max) { + // if the edge lands right on the calculated edge, subtract one + if (tileIdDouble === tileId) { + tileId--; + } + } + } + return tileId; +} + +/** + * Get the tile row of the latitude in degrees + * + * @param webMercatorTotalBox web mercator total bounding box + * @param matrixHeight matrix height + * @param latitude latitude + * + * @return tile row + */ +module.exports.getRowWithTotalBoundingBox = function(webMercatorTotalBox, matrixHeight, latitude, max) { + var minY = webMercatorTotalBox.minLatitude; + var maxY = webMercatorTotalBox.maxLatitude; + + var tileId; + if (latitude < minY) { + tileId = matrixHeight; + } else if (latitude >= maxY) { + tileId = -1; + } else { + var matrixHeightMeters = maxY - minY; + var tileHeight = matrixHeightMeters / matrixHeight; + var tileIdDouble = ((maxY - latitude) / tileHeight); + tileId = ~~tileIdDouble; + if (max) { + // if the edge lands right on the calculated edge, add one + if (tileIdDouble === tileId) { + tileId--; + } + } + } + return tileId; +} + +/** + * Get the web mercator bounding box of the tile column and row in the tile + * matrix using the total bounding box + * + * @param webMercatorTotalBox web mercator total bounding box + * @param tileMatrix tile matrix + * @param tileColumn tile column + * @param tileRow tile row + * + * @return web mercator bounding box + */ +module.exports.getTileBoundingBox = function(box, tileMatrix, tileColumn, tileRow) { + var tileMatrixWidth = tileMatrix.matrix_width; + var tileMatrixHeight = tileMatrix.matrix_height; + var tileGrid = new TileGrid(tileColumn, tileColumn, tileRow, tileRow); + var matrixMinX = box.minLongitude; + var matrixMaxX = box.maxLongitude; + var matrixWidth = matrixMaxX - matrixMinX; + var tileWidth = matrixWidth / tileMatrixWidth; + + // Find the longitude range + var minLon = matrixMinX + (tileWidth * tileGrid.min_x); + var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x)); + + // Get the tile height + var matrixMinY = box.minLatitude; + var matrixMaxY = box.maxLatitude; + var matrixHeight = matrixMaxY - matrixMinY; + var tileHeight = matrixHeight / tileMatrixHeight; + + // Find the latitude range + var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y); + var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y)); + + return new BoundingBox(minLon, maxLon, minLat, maxLat); +} + +module.exports.getTileGridBoundingBox = function(matrixSetBoundingBox, tileMatrixWidth, tileMatrixHeight, tileGrid) { + // Get the tile width + var matrixMinX = matrixSetBoundingBox.minLongitude; + var matrixMaxX = matrixSetBoundingBox.maxLongitude; + var matrixWidth = matrixMaxX - matrixMinX; + var tileWidth = matrixWidth / tileMatrixWidth; + + // Find the longitude range + var minLon = matrixMinX + (tileWidth * tileGrid.min_x); + var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x)); + + // Get the tile height + var matrixMinY = matrixSetBoundingBox.minLatitude; + var matrixMaxY = matrixSetBoundingBox.maxLatitude; + var matrixHeight = matrixMaxY - matrixMinY; + var tileHeight = matrixHeight / tileMatrixHeight; + + // Find the latitude range + var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y); + var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y)); + + return new BoundingBox(minLon, maxLon, minLat, maxLat); +} + +module.exports.getXPixel = function(width, boundingBox, longitude) { + var boxWidth = boundingBox.maxLongitude - boundingBox.minLongitude; + var offset = longitude - boundingBox.minLongitude; + var percentage = offset / boxWidth; + return percentage * width; +} + +module.exports.getLongitudeFromPixel = function(width, boundingBox, tileBoundingBox, pixel) { + var boxWidth = tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude; + var percentage = pixel / width; + var offset = percentage * boxWidth; + return offset + boundingBox.minLongitude; +} + +module.exports.getYPixel = function(height, boundingBox, latitude) { + var boxHeight = boundingBox.maxLatitude - boundingBox.minLatitude; + var offset = boundingBox.maxLatitude - latitude; + var percentage = offset / boxHeight; + return percentage * height; +} + +module.exports.getLatitudeFromPixel = function(height, boundingBox, tileBoundingBox, pixel) { + var boxHeight = tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude; + var percentage = pixel / height; + var offset = percentage * boxHeight; + return boundingBox.maxLatitude - offset; +} + +},{"../boundingBox":7,"./tileGrid":94,"proj4":285}],94:[function(require,module,exports){ + +/** + * Tile grid with x and y ranges + * @module tiles/tileGrid + * @class + */ +var TileGrid = function(minX, maxX, minY, maxY) { + this.min_x = minX; + this.max_x = maxX; + this.min_y = minY; + this.max_y = maxY; +} + +TileGrid.prototype.count = function () { + return ((this.max_x + 1) - this.min_x) * ((this.max_y + 1) - this.min_y); +}; + +TileGrid.prototype.equals = function (tileGrid) { + if (!tileGrid) return false; + return this.min_x === tileGrid.min_x + && this.max_x === tileGrid.max_x + && this.min_y === tileGrid.min_y + && this.max_y === tileGrid.max_y; +}; + +module.exports = TileGrid; + +},{}],95:[function(require,module,exports){ +/** + * @module tiles/user/tileColumn + */ + +const UserColumn = require('../../user/userColumn'); +const DataTypes = require('../../db/dataTypes'); +const util = require('util'); + +/** + * `TileColumn` models columns in [user tile pyramid tables]{@link module:tiles/user/tileTable~TileTable}. + * + * @class + * @extends {module:user/userColumn~UserColumn} + */ +var TileColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) { + UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey); + if (dataType === DataTypes.GPKG_DT_GEOMETRY) { + throw new Error('Data Type is required to create column: ' + name); + } +} + +util.inherits(TileColumn, UserColumn); + +/** + * Create an id column + * @param {number} index Index + */ +TileColumn.createIdColumn = function(index) { + return new TileColumn(index, TileColumn.COLUMN_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, false, null, true); +} + +/** + * Create a zoom level column + * @param {number} index Index + */ +TileColumn.createZoomLevelColumn = function(index) { + return new TileColumn(index, TileColumn.COLUMN_ZOOM_LEVEL, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false); +} + +/** + * Create a tile column column + * + * @param {number} index column index + */ +TileColumn.createTileColumnColumn = function(index) { + return new TileColumn(index, TileColumn.COLUMN_TILE_COLUMN, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false); +} + +/** + * Create a tile row column + * + * @param {number} index column index + * + */ +TileColumn.createTileRowColumn = function(index) { + return new TileColumn(index, TileColumn.COLUMN_TILE_ROW, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false); +} + +/** + * Create a tile data column + * + * @param {number} index column index + */ +TileColumn.createTileDataColumn = function(index) { + return new TileColumn(index, TileColumn.COLUMN_TILE_DATA, DataTypes.GPKGDataType.GPKG_DT_BLOB, null, true, null, false); +} + +TileColumn.COLUMN_ID = "id"; +TileColumn.COLUMN_ZOOM_LEVEL = "zoom_level"; +TileColumn.COLUMN_TILE_COLUMN = "tile_column"; +TileColumn.COLUMN_TILE_ROW = "tile_row"; +TileColumn.COLUMN_TILE_DATA = "tile_data"; + +module.exports = TileColumn; + +},{"../../db/dataTypes":14,"../../user/userColumn":105,"util":343}],96:[function(require,module,exports){ +/** + * tileDao module. + * @module tiles/user/tileDao + */ + +var UserDao = require('../../user/userDao') + , TileGrid = require('../tileGrid') + , TileRow = require('./tileRow') + , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao + , TileMatrixDao = require('../matrix').TileMatrixDao + , ContentsDao = require('../../core/contents').ContentsDao + , BoundingBox = require('../../boundingBox') + , BoundingBoxUtils = require('../tileBoundingBoxUtils') + , BoundingBox = require('../../boundingBox') + , ColumnValues = require('../../dao/columnValues') + , TileColumn = require('./tileColumn') + , TileDaoUtils = require('./tileDaoUtils'); + +var util = require('util') + , proj4 = require('proj4'); + +proj4 = 'default' in proj4 ? proj4['default'] : proj4; + +/** + * `TileDao` is a {@link module:dao/dao~Dao} subclass for reading + * [user tile tables]{@link module:tiles/user/tileTable~TileTable}. + * + * @class TileDao + * @extends {module:user/userDao~UserDao} + * @param {GeoPackageConnection} connection + * @param {TileTable} table + * @param {TileMatrixSet} tileMatrixSet + * @param {TileMatrix[]} tileMatrices + */ +var TileDao = function(geoPackage, table, tileMatrixSet, tileMatrices) { + UserDao.call(this, geoPackage, table); + + this.tileMatrixSet = tileMatrixSet; + this.tileMatrices = tileMatrices; + this.zoomLevelToTileMatrix = []; + this.widths = []; + this.heights = []; + + if (tileMatrices.length === 0) { + this.minZoom = 0; + this.maxZoom = 0; + } else { + this.minZoom = this.tileMatrices[0].zoom_level; + this.maxZoom = this.tileMatrices[this.tileMatrices.length-1].zoom_level; + } + + // Populate the zoom level to tile matrix and the sorted tile widths and heights + for (var i = this.tileMatrices.length-1; i >= 0; i--) { + var tileMatrix = this.tileMatrices[i]; + this.zoomLevelToTileMatrix[tileMatrix.zoom_level] = tileMatrix; + } + + this.initialize(); +} + +util.inherits(TileDao, UserDao); + +TileDao.prototype.initialize = function() { + var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao(); + this.srs = tileMatrixSetDao.getSrs(this.tileMatrixSet); + this.projection = this.srs.organization.toUpperCase() + ':' + this.srs.organization_coordsys_id; + + // Populate the zoom level to tile matrix and the sorted tile widths and heights + for (var i = this.tileMatrices.length-1; i >= 0; i--) { + var tileMatrix = this.tileMatrices[i]; + + var width = tileMatrix.pixel_x_size * tileMatrix.tile_width; + var height = tileMatrix.pixel_y_size * tileMatrix.tile_height; + var proj4Projection = proj4(this.projection); + if (proj4Projection.to_meter) { + width = proj4Projection.to_meter * tileMatrix.pixel_x_size * tileMatrix.tile_width; + height = proj4Projection.to_meter * tileMatrix.pixel_y_size * tileMatrix.tile_height; + } + this.widths.push(width); + this.heights.push(height); + } + this.setWebMapZoomLevels(); +} + +TileDao.prototype.webZoomToGeoPackageZoom = function(webZoom) { + var webMercatorBoundingBox = BoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(0, 0, webZoom); + return this.determineGeoPackageZoomLevel(webMercatorBoundingBox, webZoom); +} + +TileDao.prototype.setWebMapZoomLevels = function() { + this.minWebMapZoom = 20; + this.maxWebMapZoom = 0; + + this.webZoomToGeoPackageZooms = {}; + + var totalTileWidth = this.tileMatrixSet.max_x - this.tileMatrixSet.min_x; + var totalTileHeight = this.tileMatrixSet.max_y - this.tileMatrixSet.min_y; + for (var i = 0; i < this.tileMatrices.length; i++) { + var tileMatrix = this.tileMatrices[i]; + var singleTileWidth = totalTileWidth / tileMatrix.matrix_width; + var singleTileHeight = totalTileHeight / tileMatrix.matrix_height; + var tileBox = new BoundingBox(this.tileMatrixSet.min_x, this.tileMatrixSet.min_x + singleTileWidth, this.tileMatrixSet.min_y, this.tileMatrixSet.min_y + singleTileHeight); + var proj4Projection = proj4(this.projection, 'EPSG:4326'); + var ne = proj4Projection.forward([tileBox.maxLongitude, tileBox.maxLatitude]); + var sw = proj4Projection.forward([tileBox.minLongitude, tileBox.minLatitude]); + var width = (ne[0] - sw[0]); + var height = (ne[1] - sw[1]); + var zoom = Math.ceil(Math.log2(360/width)); + if (this.minWebMapZoom > zoom) { + this.minWebMapZoom = zoom; + } + if (this.maxWebMapZoom < zoom) { + this.maxWebMapZoom = zoom; + } + this.webZoomToGeoPackageZooms[zoom] = tileMatrix.zoom_level; + } +} + +TileDao.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) { + return this.webZoomToGeoPackageZooms[zoom]; +}; + +/** + * Get the bounding box of tiles at the zoom level + * @param {Number} zoomLevel zoom level + * @return {BoundingBox} bounding box of the zoom level, or null if no tiles + */ +TileDao.prototype.getBoundingBoxWithZoomLevel = function (zoomLevel) { + var boundingBox; + + var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel); + if (tileMatrix) { + var tileGrid = this.queryForTileGridWithZoomLevel(zoomLevel); + if (tileGrid) { + var matrixSetBoundingBox = this.getBoundingBox(); + boundingBox = BoundingBoxUtils.getTileGridBoundingBox(matrixSetBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, tileGrid); + } + return boundingBox; + } else { + return boundingBox; + } +}; + +TileDao.prototype.getBoundingBox = function () { + return this.tileMatrixSet.getBoundingBox(); +}; + +TileDao.prototype.queryForTileGridWithZoomLevel = function (zoomLevel) { + var where = this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); + var whereArgs = this.buildWhereArgs(zoomLevel); + var minX = this.minOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs); + var maxX = this.maxOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs); + var minY = this.minOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs); + var maxY = this.maxOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs); + var tileGrid; + if (minX != null && minY != null && maxX != null && maxY != null) { + tileGrid = new TileGrid(minX, maxX, minY, maxY); + } + return tileGrid; +}; + +/** + * Get the tile grid of the zoom level + * @param {Number} zoomLevel zoom level + * @return {TileGrid} tile grid at zoom level, null if no tile matrix at zoom level + */ +TileDao.prototype.getTileGridWithZoomLevel = function (zoomLevel) { + var tileGrid; + var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel); + if (tileMatrix) { + tileGrid = new TileGrid(0, ~~tileMatrix.matrix_width - 1, 0, ~~tileMatrix.matrix_height - 1); + } + return tileGrid; +}; + +/** + * get the tile table + * @return {TileTable} tile table + */ +TileDao.prototype.getTileTable = function () { + return this.table; +}; + +/** + * Create a new tile row with the column types and values + * @param {Array} columnTypes column types + * @param {Array} values values + * @return {TileRow} tile row + */ +TileDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new TileRow(this.getTileTable(), columnTypes, values); +}; + +/** + * Create a new tile row + * @return {TileRow} tile row + */ +TileDao.prototype.newRow = function () { + return new TileRow(this.getTileTable()); +}; + +/** + * Adjust the tile matrix lengths if needed. Check if the tile matrix width + * and height need to expand to account for pixel * number of pixels fitting + * into the tile matrix lengths + */ +TileDao.prototype.adjustTileMatrixLengths = function () { + TileDaoUtils.adjustTileMatrixLengths(this.tileMatrixSet, this.tileMatrices); +}; + +/** + * Get the tile matrix at the zoom level + * @param {Number} zoomLevel zoom level + * @return {TileMatrix} tile matrix + */ +TileDao.prototype.getTileMatrixWithZoomLevel = function (zoomLevel) { + return this.zoomLevelToTileMatrix[zoomLevel]; +}; + +/** + * Query for a tile + * @param {Number} column column + * @param {Number} row row + * @param {Number} zoomLevel zoom level + * @param {Function} callback called with an error if one occurred and the TileDao + */ +TileDao.prototype.queryForTile = function (column, row, zoomLevel) { + var fieldValues = new ColumnValues(); + fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column); + fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row); + fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); + var tileRow; + for (var row of this.queryForFieldValues(fieldValues)) { + tileRow = this.getRow(row); + } + return tileRow; +}; + +TileDao.prototype.queryForTilesWithZoomLevel = function (zoomLevel, tileCallback) { + var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); + var thisgetRow = this.getRow.bind(this); + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + return { + value: thisgetRow(nextRow.value), + done: false + }; + } + return { + done: true + } + }.bind(this) + } +}; + +/** + * Query for Tiles at a zoom level in descending row and column order + * @param {Number} zoomLevel zoom level + * @param {Function} tileCallback callback for each tile + * @param {Function} doneCallback called when all tiles are retrieved + */ +TileDao.prototype.queryForTilesDescending = function (zoomLevel, tileCallback) { + var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel, undefined, undefined, TileColumn.COLUMN_TILE_COLUMN + ' DESC, ' + TileColumn.COLUMN_TILE_ROW + ', DESC'); + + var thisgetRow = this.getRow.bind(this); + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + return { + value: thisgetRow(nextRow.value), + done: false + }; + } + return { + done: true + } + }.bind(this) + }; +}; + +/** + * Query for tiles at a zoom level and column + * @param {Number} column column + * @param {Number} zoomLevel zoom level + * @param {Function} tileCallback called for each tile + * @param {Function} doneCallback called when all tiles have been retrieved + */ +TileDao.prototype.queryForTilesInColumn = function (column, zoomLevel, tileCallback) { + var fieldValues = new ColumnValues(); + fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column); + fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); + + var iterator = this.queryForFieldValues(fieldValues); + var thisgetRow = this.getRow.bind(this); + + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var tileRow = thisgetRow(nextRow.value); + + return { + value: tileRow, + done: false + }; + } else { + return { + done: true + } + } + } + } +}; + +/** + * Query for tiles at a zoom level and row + * @param {Number} row row + * @param {Number} zoomLevel zoom level + * @param {Function} tileCallback called for each tile + * @param {Function} doneCallback called when all tiles have been retrieved + */ +TileDao.prototype.queryForTilesInRow = function (row, zoomLevel, tileCallback, doneCallback) { + var fieldValues = new ColumnValues(); + fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row); + fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); + + var iterator = this.queryForFieldValues(fieldValues); + var thisgetRow = this.getRow.bind(this); + + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var tileRow = thisgetRow(nextRow.value); + + return { + value: tileRow, + done: false + }; + } else { + return { + done: true + } + } + } + } +}; + +/** + * Query by tile grid and zoom level + * @param {TileGrid} tileGrid tile grid + * @param {Number} zoomLevel zoom level + * @param {Function} tileCallback called for each tile + * @param {Function} doneCallback called when all tiles have been retrieved + */ +TileDao.prototype.queryByTileGrid = function (tileGrid, zoomLevel) { + if (!tileGrid) return doneCallback(); + var tileCount = 0; + var x = tileGrid.min_x; + + var where = ''; + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); + where += ' and '; + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.min_x, '>='); + where += ' and '; + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.max_x, '<='); + where += ' and '; + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.min_y, '>='); + where += ' and '; + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.max_y, '<='); + var whereArgs = this.buildWhereArgs([zoomLevel, tileGrid.min_x, tileGrid.max_x, tileGrid.min_y, tileGrid.max_y]); + + var iterator = this.queryWhereWithArgsDistinct(where, whereArgs); + var thisgetRow = this.getRow.bind(this); + + return { + [Symbol.iterator]() { + return this; + }, + next: function() { + var nextRow = iterator.next(); + if (!nextRow.done) { + var tileRow = thisgetRow(nextRow.value); + + return { + value: tileRow, + done: false + }; + } else { + return { + done: true + } + } + } + } +}; + +TileDao.prototype.deleteTile = function(column, row, zoomLevel) { + var where = ''; + + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); + where += ' and '; + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, column); + where += ' and '; + where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, row); + + var whereArgs = this.buildWhereArgs([zoomLevel, column, row]); + + return this.deleteWhere(where, whereArgs); +}; + +TileDao.prototype.getSrs = function() { + return this.geoPackage.getContentsDao().getSrs(this.tileMatrixSet); +}; + +TileDao.prototype.dropTable = function() { + var tileMatrixDao = this.geoPackage.getTileMatrixDao(); + var dropResult = UserDao.prototype.dropTable.call(this); + + var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao(); + tileMatrixSetDao.delete(this.tileMatrixSet); + + for (var i = this.tileMatrices.length-1; i >= 0; i--) { + var tileMatrix = this.tileMatrices[i]; + tileMatrixDao.delete(tileMatrix); + } + + var dao = this.geoPackage.getContentsDao(); + dao.deleteById(this.gpkgTableName); + return dropResult; +} + +TileDao.prototype.rename = function(newName) { + UserDao.prototype.rename.call(this, newName); + + var oldName = this.tileMatrixSet.table_name; + + var values = {}; + values[TileMatrixSetDao.COLUMN_TABLE_NAME] = newName; + + var where = this.buildWhereWithFieldAndValue(TileMatrixSetDao.COLUMN_TABLE_NAME, oldName); + var whereArgs = this.buildWhereArgs([oldName]); + + var contentsDao = this.geoPackage.getContentsDao(); + var contents = contentsDao.queryForId(oldName); + contents.table_name = newName; + contents.identifier = newName; + contentsDao.create(contents); + + var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao(); + tileMatrixSetDao.updateWithValues(values, where, whereArgs); + + var tileMatrixDao = this.geoPackage.getTileMatrixDao(); + var tileMatrixUpdate = {}; + tileMatrixUpdate[TileMatrixDao.COLUMN_TABLE_NAME] = newName; + var tileMatrixWhere = this.buildWhereWithFieldAndValue(TileMatrixDao.COLUMN_TABLE_NAME, oldName); + + tileMatrixDao.updateWithValues(tileMatrixUpdate, tileMatrixWhere, whereArgs); + + contentsDao.deleteById(oldName); +} + +module.exports = TileDao; + +},{"../../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){ + +module.exports.adjustTileMatrixLengths = function(tileMatrixSet, tileMatrices) { + var tileMatrixWidth = tileMatrixSet.maxX - tileMatrixSet.minX; + var tileMatrixHeight = tileMatrixSet.maxY - tileMatrixSet.minY; + for (var i = 0; i < tileMatrices.length; i++) { + var tileMatrix = tileMatrices[i]; + var tempMatrixWidth = ~~((tileMatrixWidth / (tileMatrix.pixelXSize * ~~tileMatrix.tileWidth))); + var tempMatrixHeight = ~~((tileMatrixHeight / (tileMatrix.pixelYSize * ~~(tileMatrix.tileHeight)))); + if(tempMatrixWidth > ~~(tileMatrix.matrixWidth)) { + tileMatrix.matrixWidth = ~~(tempMatrixWidth); + } + if (tempMatrixHeight > ~~(tileMatrix.matrixHeight)) { + tileMatrix.matrixHeight = ~~(tempMatrixHeight); + } + } +} + +},{}],98:[function(require,module,exports){ +/** + * tileRow module. + * @module tiles/user/tileRow + */ + +var UserRow = require('../../user/userRow'); + +var util = require('util'); + +/** + * Tile Row containing the values from a single result set row + * @param {TileTable} tileTable tile table + * @param {Array} columnTypes column types + * @param {Array} values values + */ +var TileRow = function(tileTable, columnTypes, values) { + UserRow.call(this, tileTable, columnTypes, values); + this.tileTable = tileTable; +} + +util.inherits(TileRow, UserRow); + +TileRow.prototype.toObjectValue = function (value) { + return value; +}; + +TileRow.prototype.toDatabaseValue = function (columnName) { + return this.getValueWithColumnName(columnName); +}; + +/** + * Get the zoom level column index + * @return {Number} zoom level column index + */ +TileRow.prototype.getZoomLevelColumnIndex = function () { + return this.tileTable.zoomLevelIndex; +}; + +/** + * Get the zoom level column + * @return {TileColumn} zoom level column + */ +TileRow.prototype.getZoomLevelColumn = function() { + return this.tileTable.getZoomLevelColumn(); +} + +/** + * Get the zoom level + * @return {Number} zoom level + */ +TileRow.prototype.getZoomLevel = function () { + return this.getValueWithColumnName(this.getZoomLevelColumn().name); +}; + +/** + * Set the zoom level + * @param {Number} zoomLevel zoom level + */ +TileRow.prototype.setZoomLevel = function (zoomLevel) { + this.setValueWithIndex(this.getZoomLevelColumnIndex(), zoomLevel); +}; + +/** + * Get the tile column column Index + * @return {number} tile column column index + */ +TileRow.prototype.getTileColumnColumnIndex = function () { + return this.tileTable.tileColumnIndex; +}; + +/** + * Get the tile column column + * @return {TileColumn} tile column column + */ +TileRow.prototype.getTileColumnColumn = function () { + return this.tileTable.getTileColumnColumn(); +}; + +/** + * Get the tile column + * @return {Number} tile column + */ +TileRow.prototype.getTileColumn = function () { + return this.getValueWithColumnName(this.getTileColumnColumn().name); +}; + +/** + * Set the tile column + * @param {number} tileColumn tile column + */ +TileRow.prototype.setTileColumn = function (tileColumn) { + this.setValueWithColumnName(this.getTileColumnColumn().name, tileColumn); +}; + +/** + * Get the tile row column index + * @return {Number} tile row column index + */ +TileRow.prototype.getRowColumnIndex = function () { + return this.tileTable.tileRowIndex; +}; + +/** + * Get the tile row column + * @return {TileColumn} tile row column + */ +TileRow.prototype.getRowColumn = function () { + return this.tileTable.getRowColumn(); +}; + +/** + * Get the tile row + * @return {Number} tile row + */ +TileRow.prototype.getRow = function () { + return this.getValueWithColumnName(this.getRowColumn().name); +}; + +/** + * Set the tile row + * @param {Number} tileRow tile row + */ +TileRow.prototype.setTileRow = function (tileRow) { + this.setValueWithColumnName(this.getRowColumn().name, tileRow); +}; + +/** + * Get the tile data column index + * @return {Number} tile data column index + */ +TileRow.prototype.getTileDataColumnIndex = function () { + return this.tileTable.tileDataIndex; +}; + +/** + * Get the tile data column + * @return {TileColumn} tile data column + */ +TileRow.prototype.getTileDataColumn = function () { + return this.tileTable.getTileDataColumn(); +}; + +/** + * Get the tile data + * @return {Buffer} tile data + */ +TileRow.prototype.getTileData = function () { + return this.getValueWithColumnName(this.getTileDataColumn().name); +}; + +/** + * Set the tile data + * @param {Buffer} tileData tile data + */ +TileRow.prototype.setTileData = function (tileData) { + this.setValueWithColumnName(this.getTileDataColumn().name, tileData); +}; + +/** + * Get the tile data as an image + * @return {image} tile image + */ +TileRow.prototype.getTileDataImage = function () { + // TODO +}; + + +// /** +// * Get the tile data as a scaled image +// * +// * @param scale scale, 0.0 to 1.0 +// * +// * @return tile image +// */ +// -(UIImage *) getTileDataImageWithScale: (CGFloat) scale; +// +// /** +// * Set the tile data with an image +// * +// * @param image image +// * @param format image format +// */ +// -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format; +// +// /** +// * Set the tile data with an image +// * +// * @param image image +// * @param format image format +// * @param quality compression quality, 0.0 to 1.0, used only for GPKG_CF_JPEG +// */ +// -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format andQuality: (CGFloat) quality; + + +module.exports = TileRow; + +},{"../../user/userRow":107,"util":343}],99:[function(require,module,exports){ +/** + * @module tiles/user/tileTable + */ + +const UserTable = require('../../user/userTable'); +const TileColumn = require('./tileColumn'); +const util = require('util'); + +/** + * `TileTable` models [tile pyramid user tables](https://www.geopackage.org/spec121/index.html#tiles_user_tables). + * + * @class + * @extends {module:user/userTable~UserTable} + * @param {string} tableName + * @param {module:tiles/user/tileColumn~TileColumn[]} columns + */ +var TileTable = module.exports = function(tableName, columns) { + UserTable.call(this, tableName, columns); + + var zoomLevel; + var tileColumn; + var tileRow; + var tileData; + var uniqueColumns = []; + + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + var columnName = column.name; + var columnIndex = column.index; + + switch(columnName) { + case TileColumn.COLUMN_ZOOM_LEVEL: + this.duplicateCheck(columnIndex, zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL); + zoomLevel = columnIndex; + uniqueColumns.push(column); + break; + case TileColumn.COLUMN_TILE_COLUMN: + this.duplicateCheck(columnIndex, tileColumn, TileColumn.COLUMN_TILE_COLUMN); + tileColumn = columnIndex; + uniqueColumns.push(column); + break; + case TileColumn.COLUMN_TILE_ROW: + this.duplicateCheck(columnIndex, tileRow, TileColumn.COLUMN_TILE_ROW); + tileRow = columnIndex; + uniqueColumns.push(column); + break; + case TileColumn.COLUMN_TILE_DATA: + this.duplicateCheck(columnIndex, tileData, TileColumn.COLUMN_TILE_DATA); + tileData = columnIndex; + break; + } + } + + this.uniqueConstraints = [{columns: uniqueColumns}]; + + this.missingCheck(zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL); + this.zoomLevelIndex = zoomLevel; + + this.missingCheck(tileColumn, TileColumn.COLUMN_TILE_COLUMN); + this.tileColumnIndex = tileColumn; + + this.missingCheck(tileRow, TileColumn.COLUMN_TILE_ROW); + this.tileRowIndex = tileRow; + + this.missingCheck(tileData, TileColumn.COLUMN_TILE_DATA); + this.tileDataIndex = tileData; +} + +util.inherits(TileTable, UserTable); + +TileTable.prototype.getZoomLevelColumn = function() { + return this.getColumnWithIndex(this.zoomLevelIndex); +}; + +TileTable.prototype.getTileColumnColumn = function() { + return this.getColumnWithIndex(this.tileColumnIndex); +}; + +TileTable.prototype.getRowColumn = function() { + return this.getColumnWithIndex(this.tileRowIndex); +}; + +TileTable.prototype.getTileDataColumn = function() { + return this.getColumnWithIndex(this.tileDataIndex); +}; + +TileTable.prototype.getTableType = function() { + return UserTable.TILE_TABLE; +} + +TileTable.createRequiredColumns = function() { + return TileTable.createRequiredColumnsWithStartingIndex(0); +} + +TileTable.createRequiredColumnsWithStartingIndex = function(startingIndex) { + var columns = []; + columns.push(TileColumn.createIdColumn(startingIndex++)); + columns.push(TileColumn.createZoomLevelColumn(startingIndex++)); + columns.push(TileColumn.createTileColumnColumn(startingIndex++)); + columns.push(TileColumn.createTileRowColumn(startingIndex++)); + columns.push(TileColumn.createTileDataColumn(startingIndex++)); + return columns; +} + +},{"../../user/userTable":108,"./tileColumn":95,"util":343}],100:[function(require,module,exports){ +/** + * tileTableReader module. + * @module tiles/user/tileTableReader + */ + +var UserTableReader = require('../../user/userTableReader') + , DataTypes = require('../../db/dataTypes') + , TileMatrixSet = require('../matrixset').TileMatrixSet + , TileTable = require('./tileTable') + , TileColumn = require('./tileColumn'); + +var util = require('util'); + +/** +* Reads the metadata from an existing tile table +* @class TileTableReader +* @extends {module:user~UserTableReader} +*/ +var TileTableReader = function(tileMatrixSet) { + UserTableReader.call(this, tileMatrixSet.table_name); + this.tileMatrixSet = tileMatrixSet; +} + +util.inherits(TileTableReader, UserTableReader); + +TileTableReader.prototype.readTileTable = function (geoPackage) { + return this.readTable(geoPackage.getDatabase()); +}; + +TileTableReader.prototype.createTable = function (tableName, columns) { + return new TileTable(tableName, columns); +}; + +TileTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValueIndex, primaryKey) { + var dataType = DataTypes.fromName(type); + var defaultValue = undefined; + if (defaultValueIndex) { + // console.log('default value index', defaultValueIndex); + // console.log('result', results); + } + var column = new TileColumn(index, name, dataType, max, notNull, defaultValue, primaryKey); + + return column; +}; + +/** + * The TileTableReader + * @type {TileTableReader} + */ +module.exports = TileTableReader; + +},{"../../db/dataTypes":14,"../../user/userTableReader":109,"../matrixset":91,"./tileColumn":95,"./tileTable":99,"util":343}],101:[function(require,module,exports){ +/** + * @module user/custom + */ + +var util = require('util'); + +var UserColumn = require('../userColumn') + , DataTypes = require('../../db/dataTypes') + +/** + * Create a new user custom columnd + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} dataType data type + * @param {Number} max max value + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * @param {Boolean} primaryKey primary key + */ +var UserCustomColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) { + UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey); + if (dataType == null) { + throw new Error('Data type is required to create column: ' + name); + } +} + +util.inherits(UserCustomColumn, UserColumn); + +/** + * Create a new column + * + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} type data type + * @param {Number} max max value + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * + * @return {module:user/custom~UserCustomColumn} created column + */ +UserCustomColumn.createColumn = function(index, name, dataType, max, notNull, defaultValue) { + return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, false); +} + +module.exports = UserCustomColumn; + +},{"../../db/dataTypes":14,"../userColumn":105,"util":343}],102:[function(require,module,exports){ +/** + * @module user/custom + */ +var util = require('util'); + +var UserDao = require('../userDao') + , UserRow = require('../userRow') + , UserCustomTableReader = require('./userCustomTableReader'); + +/** + * User Custom Dao + * @class + * @extends module:user/userDao~UserDao + * @param {module:geoPackage~GeoPackage} geoPackage geopackage object + * @param {module:user/custom~UserCustomTable} userCustomTable user custom table + */ +var UserCustomDao = function(geoPackage, userCustomTable) { + UserDao.call(this, geoPackage, userCustomTable); +} + +util.inherits(UserCustomDao, UserDao); + +/** + * Create a new UserRow + * @return {module:user/userRow~UserRow} + */ +UserCustomDao.prototype.newRow = function() { + return new UserRow(this.table); +} + +/** + * Reads the table specified from the geopackage + * @param {module:geoPackage~GeoPackage} geoPackage geopackage object + * @param {string} tableName table name + * @param {string[]} requiredColumns required columns + * @return {module:user/custom~UserCustomDao} + */ +UserCustomDao.readTable = function(geoPackage, tableName, requiredColumns) { + var reader = new UserCustomTableReader(tableName, requiredColumns); + var userCustomTable = reader.readTable(geoPackage.getDatabase()); + return new UserCustomDao(geoPackage, userCustomTable); +} + +module.exports = UserCustomDao; + +},{"../userDao":106,"../userRow":107,"./userCustomTableReader":104,"util":343}],103:[function(require,module,exports){ +/** + * @module user/custom + */ +var util = require('util'); + +var UserTable = require('../userTable'); + +/** + * Create a new user custom table + * @class + * @extends module:user/userTable~UserTable + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns user columns + * @param {string[]} requiredColumns required columns + */ +var UserCustomTable = function(tableName, columns, requiredColumns) { + UserTable.call(this, tableName, columns); + if (requiredColumns && requiredColumns.length) { + var found = {}; + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + if (requiredColumns.indexOf(column.name) !== -1) { + var previousIndex = found[column.name]; + this.duplicateCheck(column.index, previousIndex, column.name); + found[column.name] = column.index; + } + } + for (var i = 0; i < requiredColumns.length; i++) { + this.missingCheck(found[requiredColumns[i]], requiredColumns); + } + } +} + +util.inherits(UserCustomTable, UserTable); + +module.exports = UserCustomTable; + +},{"../userTable":108,"util":343}],104:[function(require,module,exports){ +/** + * @module user/custom + */ +var util = require('util'); + +var UserTableReader = require('../userTableReader') + , DataTypes = require('../../db/dataTypes') + , UserCustomColumn = require('./userCustomColumn') + , UserCustomTable = require('./userCustomTable'); + +/** + * User custom table reader + * @class + * @extends module:user/userTableReader~UserTableReader + * @param {string} tableName table name + * @param {string[]} requiredColumns required columns + */ +var UserCustomTableReader = function(tableName, requiredColumns) { + UserTableReader.call(this, tableName, requiredColumns); +} + +util.inherits(UserCustomTableReader, UserTableReader); + +/** + * Creates user custom column + * @param {string} tableName table name + * @param {module:user/userCustom~UserCustomColumn[]} columnList columns + * @param {string[]} requiredColumns required columns + * @return {module:user/userCustom~UserCustomTable} + */ +UserCustomTableReader.prototype.createTable = function(tableName, columnList, requiredColumns) { + return new UserCustomTable(tableName, columnList, requiredColumns); +} + +/** + * Creates a user custom column + * @param {Object} result + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} type data type + * @param {Number} max max value + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * @param {Boolean} primaryKey primary key + * @return {module:user/custom~UserCustomColumn} + */ +UserCustomTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) { + + var dataType = DataTypes.fromName(type); + return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, primaryKey); +} + + +module.exports = UserCustomTableReader; + +},{"../../db/dataTypes":14,"../userTableReader":109,"./userCustomColumn":101,"./userCustomTable":103,"util":343}],105:[function(require,module,exports){ +/** + * @module user/userColumn + */ + +var DataTypes = require('../db/dataTypes'); + +/** + * A `UserColumn` is meta-data about a single column from a {@link module:/user/userTable~UserTable}. + * + * @class + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} dataType data type of the column + * @param {?Number} max max value + * @param {Boolean} notNull not null + * @param {?Object} defaultValue default value or null + * @param {Boolean} primaryKey `true` if this column is part of the table's primary key + */ +function UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey) { + this.index = index; + this.name = name; + this.dataType = dataType; + this.max = max; + this.notNull = notNull; + this.defaultValue = defaultValue; + this.primaryKey = primaryKey; + this.validateMax(); +} + +/** + * Gets the type name + * @return {module:db/dataTypes~GPKGDataType} + */ +UserColumn.prototype.getTypeName = function () { + var type = undefined; + if (this.dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) { + type = DataTypes.name(this.dataType); + } + return type; +}; + +/** + * Validate that if max is set, the data type is text or blob + */ +UserColumn.prototype.validateMax = function () { + if(this.max && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_TEXT && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB) { + throw new Error('Column max is only supported for TEXT and BLOB columns. column: ' + this.name + ', max: ' + this.max + ', type: ' + this.dataType) + } +}; + +/** + * Create a new primary key column + * + * @param {Number} index column index + * @param {string} name column name + * + * @return {module:user/userColumn~UserColumn} created column + */ +UserColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) { + return new UserColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true); +} + +/** + * Create a new column + * + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} type data type + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * + * @return {module:user/userColumn~UserColumn} created column + */ +UserColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) { + return UserColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue); +} + +/** + * Create a new column + * + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} type data type + * @param {Number} max max value + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * + * @return {module:user/userColumn~UserColumn} created column + */ +UserColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) { + return new UserColumn(index, name, type, max, notNull, defaultValue, false); +} + +module.exports = UserColumn; + +},{"../db/dataTypes":14}],106:[function(require,module,exports){ +/** + * UserDao module. + * @module user/userDao + */ + +var UserRow = require('./userRow') + , MediaTable = require('../extension/relatedTables/mediaTable') + , SimpleAttributesTable = require('../extension/relatedTables/simpleAttributesTable') + , RelationType = require('../extension/relatedTables/relationType') + , UserTableReader = require('./userTableReader') + , Dao = require('../dao/dao'); + +var util = require('util'); + +/** + * Abstract User DAO for reading user tables + * @class UserDao + * @extends {module:dao/dao~Dao} + * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection + * @param {string} table table name + */ +var UserDao = function(geoPackage, table) { + Dao.call(this, geoPackage); + this.table = table; + this.table_name = table.table_name; + this.gpkgTableName = table.table_name; + if (table.getPkColumn()) { + this.idColumns = [table.getPkColumn().name]; + } else { + this.idColumns = []; + } + this.columns = table.columnNames; +} + +util.inherits(UserDao, Dao); + +/** + * Reads the table specified from the geopackage + * @param {module:geoPackage~GeoPackage} geoPackage geopackage object + * @param {string} tableName table name + * @param {string[]} requiredColumns required columns + * @return {module:user/userDao~UserDao} + */ +UserDao.readTable = function(geoPackage, tableName) { + var reader = new UserTableReader(tableName); + var userTable = reader.readTable(geoPackage.getDatabase()); + return new UserDao(geoPackage, userTable); +} + +/** + * Creates a UserRow + * @param {Object} [results] results to create the row from if not specified, an empty row is created + * @return {module:user/userRow~UserRow} + */ +UserDao.prototype.createObject = function (results) { + if (results) { + return this.getRow(results); + } + return this.newRow(); +}; + +/** + * Sets the value in the row + * @param {module:user/userRow~UserRow} object user row + * @param {Number} columnIndex index + * @param {Object} value value + */ +UserDao.prototype.setValueInObject = function (object, columnIndex, value) { + object.setValueNoValidationWithIndex(columnIndex, value); +}; + +/** + * Get a user row from the current results + * @param {Object} results result to create the row from + * @return {module:user/userRow~UserRow} the user row + */ +UserDao.prototype.getRow = function (results) { + var row = undefined; + if (!this.table) return row; + var columns = this.table.columnCount(); + var columnTypes = {}; + for (var i = 0; i < columns; i++) { + var column = this.table.getColumnWithIndex(i); + columnTypes[column.name] = column.dataType; + } + return this.newRowWithColumnTypes(columnTypes, results); +}; + +/** + * Get the table for this dao + * @return {module:user/userTable~UserTable} + */ +UserDao.prototype.getTable = function() { + return this.table; +} + +/** + * Create a user row + * @param {module:db/dataTypes[]} columnTypes column types + * @param {module:dao/columnValues~ColumnValues[]} values values + * @return {module:user/userRow~UserRow} user row + */ +UserDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { + return new UserRow(this.table, columnTypes, values); +}; + +/** + * Get the projection + * @return {string} the projection + */ +UserDao.prototype.getProjection = function () { + return this.projection; +}; + +/** + * Links related rows together + * @param {module:user/userRow~UserRow} userRow user row + * @param {module:user/userRow~UserRow} relatedRow related row + * @param {string} relationType relation type + * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table + * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values + * @return {Promise} + */ +UserDao.prototype.linkRelatedRow = function(userRow, relatedRow, relationType, mappingTable, mappingColumnValues) { + var rte = this.geoPackage.getRelatedTablesExtension(); + var baseTableName = userRow.table.table_name; + var relatedTableName = relatedRow.table.table_name; + var relationship = rte.getRelationshipBuilder() + .setBaseTableName(baseTableName) + .setRelatedTableName(relatedTableName) + .setRelationType(relationType); + + var mappingTableName; + if (!mappingTable || typeof mappingTable === 'string') { + var mappingTable = mappingTable || baseTableName + '_' + relatedTableName; + relationship.setMappingTableName(mappingTable); + mappingTableName = mappingTable; + } else { + relationship.setUserMappingTable(mappingTable); + mappingTableName = mappingTable.table_name; + } + + return rte.addRelationship(relationship) + .then(function() { + var userMappingDao = rte.getMappingDao(mappingTableName); + var userMappingRow = userMappingDao.newRow(); + userMappingRow.setBaseId(userRow.getId()); + userMappingRow.setRelatedId(relatedRow.getId()); + for (var column in mappingColumnValues) { + userMappingRow.setValueWithColumnName(column, mappingColumnValues[column]); + } + userMappingDao.create(userMappingRow); + }); +} + +/** + * Links a user row to a feature row + * @param {module:user/userRow~UserRow} userRow user row + * @param {module:features/user/featureRow~FeatureRow} featureRow feature row + * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table + * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values + * @return {Promise} + */ +UserDao.prototype.linkFeatureRow = function(userRow, featureRow, mappingTable, mappingColumnValues) { + return this.linkRelatedRow(userRow, featureRow, RelationType.FEATURES, mappingTable, mappingColumnValues); +} + +/** + * Links a user row to a media row + * @param {module:user/userRow~UserRow} userRow user row + * @param {module:extension/relatedTables~MediaRow} mediaRow media row + * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table + * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values + * @return {Promise} + */ +UserDao.prototype.linkMediaRow = function(userRow, mediaRow, mappingTable, mappingColumnValues) { + return this.linkRelatedRow(userRow, mediaRow, RelationType.MEDIA, mappingTable, mappingColumnValues); +} + +/** + * Links a user row to a simpleAttributes row + * @param {module:user/userRow~UserRow} userRow user row + * @param {module:extension/relatedTables~SimpleAttributesRow} simpleAttributesRow simple attributes row + * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table + * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values + * @return {Promise} + */ +UserDao.prototype.linkSimpleAttributesRow = function(userRow, simpleAttrbuteRow, mappingTable, mappingColumnValues) { + return this.linkRelatedRow(userRow, simpleAttrbuteRow, RelationType.SIMPLE_ATTRIBUTES, mappingTable, mappingColumnValues); +} + +/** + * Get all media rows that are linked to this user row + * @param {module:user/userRow~UserRow} userRow user row + * @return {module:extension/relatedTables~MediaRow[]} + */ +UserDao.prototype.getLinkedMedia = function(userRow) { + var mediaRelations = this.getMediaRelations(); + var rte = this.geoPackage.getRelatedTablesExtension(); + var linkedMedia = []; + for (var i = 0; i < mediaRelations.length; i++) { + var mediaRelation = mediaRelations[i]; + var mediaDao = rte.getMediaDao(mediaRelation); + var userMappingDao = rte.getMappingDao(mediaRelation.mapping_table_name); + var mappings = userMappingDao.queryByBaseId(userRow.getId()); + for (var m = 0; m < mappings.length; m++) { + var relatedId = mappings[m].related_id; + linkedMedia.push(mediaDao.queryForId(relatedId)); + } + } + return linkedMedia; +} + +/** + * Get all simple attribute rows that are linked to this user row + * @param {module:user/userRow~UserRow} userRow user row + * @return {module:extension/relatedTables~SimpleAttributeRow[]} + */ +UserDao.prototype.getLinkedSimpleAttributes = function(userRow) { + var simpleRelations = this.getSimpleAttributesRelations(); + var rte = this.geoPackage.getRelatedTablesExtension(); + var linkedSimpleAttributes = []; + for (var i = 0; i < simpleRelations.length; i++) { + var simpleRelation = simpleRelations[i]; + var simpleDao = rte.getSimpleAttributesDao(simpleRelation); + var userMappingDao = rte.getMappingDao(simpleRelation.mapping_table_name); + var mappings = userMappingDao.queryByBaseId(userRow.getId()); + for (var m = 0; m < mappings.length; m++) { + var relatedId = mappings[m].related_id; + linkedSimpleAttributes.push(simpleDao.queryForId(relatedId)); + } + } + return linkedSimpleAttributes; +} + +/** + * Get all feature rows that are linked to this user row + * @param {module:user/userRow~UserRow} userRow user row + * @return {module:features/user/featureRow~FeatureRow[]} + */ +UserDao.prototype.getLinkedFeatures = function(userRow) { + var featureRelations = this.getFeatureRelations(); + var rte = this.geoPackage.getRelatedTablesExtension(); + var linkedFeatures = []; + for (var i = 0; i < featureRelations.length; i++) { + var featureRelation = featureRelations[i]; + var featureDao = this.geoPackage.getFeatureDao(featureRelation.base_table_name); + var userMappingDao = rte.getMappingDao(featureRelation.mapping_table_name); + var mappings = userMappingDao.queryByBaseId(userRow.getId()); + for (var m = 0; m < mappings.length; m++) { + var relatedId = mappings[m].related_id; + linkedFeatures.push(featureDao.queryForId(relatedId)); + } + } + return linkedFeatures; +} + +/** + * Get all simple attribute relations to this table + * @return {Object[]} + */ +UserDao.prototype.getSimpleAttributesRelations = function() { + return this.getRelationsWithName(SimpleAttributesTable.RELATION_TYPE.name); +} + +/** + * Get all feature relations to this table + * @return {Object[]} + */ +UserDao.prototype.getFeatureRelations = function() { + return this.getRelationsWithName(RelationType.FEATURES.name); +} + +/** + * Get all media relations to this table + * @return {Object[]} + */ +UserDao.prototype.getMediaRelations = function() { + return this.getRelationsWithName(MediaTable.RELATION_TYPE.name); +} + +/** + * Get all relations to this table with the specified name + * @param {string} name + * @return {Object[]} + */ +UserDao.prototype.getRelationsWithName = function(name) { + return this.geoPackage.getExtendedRelationDao().getBaseTableRelationsWithName(this.table_name, name); +} + +/** + * Get all relations to this table + * @return {Object[]} + */ +UserDao.prototype.getRelations = function() { + return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(this.table_name); +} + +/** + * Gets the rows in this table by id + * @param {Number[]} ids ids to query for + * @return {Object[]} + */ +UserDao.prototype.getRows = function(ids) { + var rows = []; + for (var i = 0; i < ids.length; i++) { + var row = this.queryForId(ids[i]); + if (row) { + rows.push(row); + } + } + return rows; +} + +/** + * Get the approximate zoom level of where the bounding box of the user data fits into the world + * + * @return zoom level + */ +UserDao.prototype.getZoomLevel = function () { + return 0; + // if(self.projection == nil){ + // [NSException raise:@"No Projection" format:@"No projection was set which is required to determine the zoom level"]; + // } + // GPKGBoundingBox * boundingBox = [self getBoundingBox]; + // if([self.projection.epsg intValue] == PROJ_EPSG_WORLD_GEODETIC_SYSTEM){ + // boundingBox = [GPKGTileBoundingBoxUtils boundWgs84BoundingBoxWithWebMercatorLimits:boundingBox]; + // } + // GPKGProjectionTransform * webMercatorTransform = [[GPKGProjectionTransform alloc] initWithFromProjection:self.projection andToEpsg:PROJ_EPSG_WEB_MERCATOR]; + // GPKGBoundingBox * webMercatorBoundingBox = [webMercatorTransform transformWithBoundingBox:boundingBox]; + // int zoomLevel = [GPKGTileBoundingBoxUtils getZoomLevelWithWebMercatorBoundingBox:webMercatorBoundingBox]; + // return zoomLevel; +}; + +/** + * Get count of all rows in this table + * @return {Number} + */ +UserDao.prototype.getCount = function () { + return this.connection.count(this.table_name); +}; + +module.exports = UserDao; + +},{"../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){ +(function (Buffer){ +/** + * UserRow module. + * @module user/userRow + */ + +var DataTypes = require('../db/dataTypes'); + +/** + * User Row containing the values from a single result row + * @class UserRow + * @param {UserTable} table user table + * @param {module:db/dataTypes[]} columnTypes column types + * @param {Array} values values + */ +var UserRow = function(table, columnTypes, values) { + /** + * User table + * @type {UserTable} + */ + this.table = table; + /** + * Column types of this row, based upon the data values + * @type {Object} + */ + this.columnTypes = columnTypes; + /** + * Array of row values + * @type {Object} + */ + this.values = values; + + if (!this.columnTypes) { + var columnCount = this.table.columnCount(); + this.columnTypes = {}; + this.values = {}; + for (var i = 0; i < columnCount; i++) { + this.columnTypes[this.table.columnNames[i]] = this.table.columns[i].dataType; + this.values[this.table.columnNames[i]] = this.table.columns[i].defaultValue; + } + } + +} + +module.exports = UserRow; + +/** + * Get the column count + * @return {number} column count + */ +UserRow.prototype.columnCount = function () { + return this.table.columnCount(); +}; + +/** + * Get the column names + * @return {Array} column names + */ +UserRow.prototype.getColumnNames = function () { + return this.table.columnNames; +}; + +/** + * Get the column name at the index + * @param {Number} index index + * @return {string} column name + */ +UserRow.prototype.getColumnNameWithIndex = function (index) { + return this.table.getColumnNameWithIndex(index); +}; + +/** + * Get the column index of the column name + * @param {string} columnName column name + * @return {Number} column index + */ +UserRow.prototype.getColumnIndexWithColumnName = function (columnName) { + return this.table.getColumnIndex(columnName); +}; + +/** + * Get the value at the index + * @param {Number} index index + * @return {object} value + */ +UserRow.prototype.getValueWithIndex = function (index) { + var value = this.values[this.getColumnNameWithIndex(index)]; + if (value !== undefined) { + value = this.toObjectValue(index, value); + } + return value; +}; + +/** + * Get the value of the column name + * @param {string} columnName column name + * @return {Object} value + */ +UserRow.prototype.getValueWithColumnName = function (columnName) { + var value = this.values[columnName]; + var dataType = this.getRowColumnTypeWithColumnName(columnName); + if (value === undefined || value === null) return value; + + if (dataType === DataTypes.GPKGDataType.BOOLEAN) { + return value === 1 ? true : false; + } else if (dataType === DataTypes.GPKGDataType.BLOB) { + return Buffer.from(value); + } + return value; +}; + +UserRow.prototype.toObjectValue = function (index, value) { + var objectValue = value; + var column = this.getColumnWithIndex(index); + if (column.dataType === DataTypes.GPKGDataType.BOOLEAN && value) { + return value === 1 ? true : false; + } + return objectValue; +}; + +UserRow.prototype.toDatabaseValue = function(columnName) { + var column = this.getColumnWithColumnName(columnName); + var value = this.getValueWithColumnName(columnName); + if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) { + return value === true ? 1 : 0; + } + + return value; +} + +/** + * Get the row column type at the index + * @param {Number} index index + * @return {Number} row column type + */ +UserRow.prototype.getRowColumnTypeWithIndex = function (index) { + return this.columnTypes[this.getColumnNameWithIndex(index)]; +}; + +/** + * Get the row column type of the column name + * @param {string} columnName column name + * @return {Number} row column type + */ +UserRow.prototype.getRowColumnTypeWithColumnName = function (columnName) { + return this.columnTypes[columnName]; +}; + +/** + * Get the column at the index + * @param {Number} index index + * @return {UserColumn} column + */ +UserRow.prototype.getColumnWithIndex = function (index) { + return this.table.getColumnWithIndex(index); +}; + +/** + * Get the column of the column name + * @param {string} columnName column name + * @return {UserColumn} column + */ +UserRow.prototype.getColumnWithColumnName = function (columnName) { + return this.table.getColumnWithColumnName(columnName); +}; + +/** + * Get the id value, which is the value of the primary key + * @return {Number} id value + */ +UserRow.prototype.getId = function () { + if (this.getPkColumn()) { + return this.getValueWithColumnName(this.getPkColumn().name); + } +}; + +/** + * Get the primary key column Index + * @return {Number} pk index + */ +UserRow.prototype.getPkColumnIndex = function () { + return this.table.pkIndex; +}; + +/** + * Get the primary key column + * @return {UserColumn} pk column + */ +UserRow.prototype.getPkColumn = function () { + return this.table.getPkColumn(); +}; + +/** + * Set the value at the index + * @param {Number} index index + * @param {object} value value + */ +UserRow.prototype.setValueWithIndex = function (index, value) { + if (index === this.table.pkIndex) { + throw new Error('Cannot update the primary key of the row. Table Name: ' + this.table.tableName + ', Index: ' + index + ', Name: ' + this.table.getPkColumn().name); + } + this.setValueWithColumnName(this.getColumnNameWithIndex(index), value); +}; + +/** + * Set the value at the index without validation + * @param {Number} index index + * @param {Object} value value + */ +UserRow.prototype.setValueNoValidationWithIndex = function (index, value) { + this.values[this.getColumnNameWithIndex(index)] = value; +}; + +/** + * Set the value of the column name + * @param {string} columnName column name + * @param {Object} value value + */ +UserRow.prototype.setValueWithColumnName = function (columnName, value) { + var dataType = this.getRowColumnTypeWithColumnName(columnName); + if (dataType === DataTypes.GPKGDataType.BOOLEAN) { + value === true ? this.values[columnName] = 1 : this.values[columnName] = 0; + } else if (dataType === DataTypes.GPKGDataType.DATE) { + this.values[columnName] = value.toISOString().slice(0,10); + } else if (dataType === DataTypes.GPKGDataType.DATETIME) { + this.values[columnName] = value.toISOString(); + } else { + this.values[columnName] = value; + } +}; + +UserRow.prototype.hasIdColumn = function() { + return this.table.pkIndex !== undefined; +} + +UserRow.prototype.hasId = function() { + var hasId = false; + if (this.hasIdColumn()) { + var objectValue = this.getValueWithIndex(this.table.pkIndex); + hasId = objectValue !== null && objectValue !== undefined && typeof objectValue === 'number'; + } + return hasId; +} + +/** + * Set the primary key id value + * @param {Number} id id + */ +UserRow.prototype.setId = function (id) { + this.values[this.table.getPkColumn().name] = id; +}; + +/** + * Clears the id so the row can be used as part of an insert or create + */ +UserRow.prototype.resetId = function () { + this.values[this.table.getPkColumn().name] = undefined; +}; + +/** + * Validate the value and its actual value types against eh column data type class + * @param {UserColumn} column column + * @param {Object} value value + * @param {Array} valueTypes value types + */ +UserRow.prototype.validateValueWithColumn = function (column, value, valueTypes) { + // TODO implement validation +}; + +}).call(this,require("buffer").Buffer) +},{"../db/dataTypes":14,"buffer":182}],108:[function(require,module,exports){ +/** + * @module user/userTable + */ + +/** + * `UserTable` models optional [user data tables](https://www.geopackage.org/spec121/index.html#_options) + * in a [GeoPackage]{@link module:geoPackage~GeoPackage}. + * + * @class + * @param {string} tableName table name + * @param {module:user/userColumn~UserColumn[]} columns user columns + */ +var UserTable = function(tableName, columns) { + /** + * The name of the table + * @type {string} + */ + this.table_name = tableName; + + // Sort the columns by index + columns.sort(function(a, b) { + return a.index - b.index; + }); + + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + if (column.index != i) { + throw new Error('Column has wrong index of ' + column.index + ', found at index: ' + i + ', Table Name: ' + this.table_name); + } + } + + var pk = undefined; + var tempColumnNames = new Array(); + var tempNameToIndex = {}; + + for (var i = 0; i < columns.length; i++) { + var column = columns[i]; + var index = column.index; + if (column.primaryKey) { + if (pk !== undefined) { + throw new Error('More than one primary key column was found for table \'' + this.table_name + '\'. Index ' + pk + ' and ' + index); + } + pk = index; + } + tempColumnNames.push(column.name); + tempNameToIndex[column.name] = index; + } + + /** + * Array of columns + * @type {module:user/userColumn~UserColumn[]} + */ + this.columns = columns; + + /** + * Array of column names + * @type {string[]} + */ + this.columnNames = tempColumnNames; + + /** + * Mapping between column names and their index + * @type {Object} + */ + this.nameToIndex = tempNameToIndex; + this.uniqueConstraints = []; + + /** + * Primary key column Index + * @type {Number} + */ + this.pkIndex = pk; +} + +/** + * Check for duplicate column names + * @param {Number} index index + * @param {Number} previousIndex previous index + * @param {string} column column + * @throws Throws an error if previous index is not undefined + */ +UserTable.prototype.duplicateCheck = function (index, previousIndex, column) { + if(previousIndex !== undefined) { + throw new Error('More than one ' + column + ' column was found for table \'' + this.table_name + '\'. Index ' + previousIndex + ' and ' + index); + } +}; + +/** + * Check for the expected data type + * @param {module:db/dataTypes~GPKGDataType} expected expected data type + * @param {module:user/userColumn~UserColumn} column column + * @throws Will throw an error if the actual column type does not match the expected column type + */ +UserTable.prototype.typeCheck = function (expected, column) { + var actual = column.dataType; + if (!actual || actual !== expected) { + throw new Error('Unexpected ' + column.name + ' column data type was found for table \'' + this.table_name + '\', expected: ' + DataTypes.name(expected) + ', actual: ' + column.dataType); + } +}; + +/** + * Check for missing columns + * @param {Number} index index + * @param {string} column column + * @throws Will throw an error if no column is found + */ +UserTable.prototype.missingCheck = function (index, column) { + if (index === undefined || index === null) { + throw new Error('No ' + column + ' column was found for table \'' + this.table_name +'\''); + } +}; + +/** + * Get the column index of the column name + * @param {string} columnName column name + * @return {Number} the column index + * @throws Will throw an error if the column is not found in the table + */ +UserTable.prototype.getColumnIndex = function (columnName) { + var index = this.nameToIndex[columnName]; + if (index === undefined || index === null) { + throw new Error('Column does not exist in table \'' + this.table_name + '\', column: ' + columnName); + } + return index; +}; + +/** + * Check if the table has the column + * @param {string} columnName name of the column + * @return {Boolean} true if the column exists in the table + */ +UserTable.prototype.hasColumn = function(columnName) { + try { + this.getColumnIndex(columnName); + return true; + } catch (e) { + return false; + } + return false; +} + +/** + * Get the column name from the index + * @param {Number} index index + * @return {string} the column name + */ +UserTable.prototype.getColumnNameWithIndex = function (index) { + return this.columnNames[index]; +}; + +/** + * Get the column from the index + * @param {Number} index index + * @return {module:user/userColumn~UserColumn} column at the index + */ +UserTable.prototype.getColumnWithIndex = function (index) { + return this.columns[index]; +}; + +/** + * Get column with the column name + * @param {string} columnName column name + * @return {module:user/userColumn~UserColumn} column at the index + */ +UserTable.prototype.getColumnWithColumnName = function (columnName) { + return this.getColumnWithIndex(this.getColumnIndex(columnName)); +}; + +/** + * Get the column count + * @return {Number} the count of the columns + */ +UserTable.prototype.columnCount = function () { + return this.columns.length; +}; + +/** + * Get the primary key column + * @return {module:user/userColumn~UserColumn} the primary key column + */ +UserTable.prototype.getPkColumn = function () { + return this.columns[this.pkIndex]; +}; + +/** + * Get the primary key id column + * @return {module:user/userColumn~UserColumn} + */ +UserTable.prototype.getIdColumn = function() { + return this.getPkColumn(); +} + +UserTable.prototype.addUniqueConstraint = function (uniqueConstraint) { + this.uniqueConstraints.push(uniqueConstraint); +}; + +UserTable.FEATURE_TABLE = 'FEATURE'; +UserTable.TILE_TABLE = 'TILE'; + +module.exports = UserTable; + +},{}],109:[function(require,module,exports){ +/** + * userTableReader module. + * @module user/userTableReader + */ + +var UserColumn = require('./userColumn') + , UserTable = require('./userTable') + , DataTypes = require('../db/dataTypes'); + +/** + * @class + * @param {string} tableName name of the table + * @param {string[]} requiredColumns array of required column names + */ +var UserTableReader = function(tableName, requiredColumns) { + this.table_name = tableName; + this.requiredColumns = requiredColumns; +} + +var GPKG_UTR_CID = "cid"; +var GPKG_UTR_NAME = "name"; +var GPKG_UTR_TYPE = "type"; +var GPKG_UTR_NOT_NULL = "notnull"; +var GPKG_UTR_PK = "pk"; +var GPKG_UTR_DFLT_VALUE = "dflt_value"; + +/** + * Read the table + * @param {object} db db connection + * @return {module:user/userTable~UserTable} + */ +UserTableReader.prototype.readTable = function (db) { + var columnList = []; + var results = db.all('PRAGMA table_info(\''+this.table_name+'\')'); + for (var i =0; i < results.length; i++) { + var result = results[i]; + var index = result[GPKG_UTR_CID]; + var name = result[GPKG_UTR_NAME]; + var type = result[GPKG_UTR_TYPE]; + var notNull = result[GPKG_UTR_NOT_NULL] === 1; + var primarykey = result[GPKG_UTR_PK] === 1; + var max = undefined; + if (type && type.lastIndexOf(')') === type.length-1) { + var maxStart = type.indexOf('('); + if (maxStart > -1) { + var maxString = type.substring(maxStart + 1, type.length - 1); + if (maxString !== '') { + max = parseInt(maxString); + type = type.substring(0, maxStart); + } + } + } + var defaultValue = undefined; + if (result[GPKG_UTR_DFLT_VALUE]) { + defaultValue = result[GPKG_UTR_DFLT_VALUE].replace(/\\'/g, ''); + } + var column = this.createColumnWithResults(result, index, name, type, max, notNull, defaultValue, primarykey); + + columnList.push(column); + } + + if (columnList.length === 0) { + throw new Error('Table does not exist: ' + this.table_name); + } + return this.createTable(this.table_name, columnList, this.requiredColumns); +}; + +/** + * Creates a user column + * @param {Object} result + * @param {Number} index column index + * @param {string} name column name + * @param {module:db/dataTypes~GPKGDataType} type data type + * @param {Number} max max value + * @param {Boolean} notNull not null + * @param {Object} defaultValue default value or nil + * @param {Boolean} primaryKey primary key + * @return {module:user/custom~UserCustomColumn} + */ +UserTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) { + + var dataType = DataTypes.fromName(type); + return new UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey); +} + +/** + * Create the table + * @param {string} tableName table name + * @param {module:dao/columnValues~ColumnValues[]} columns columns + * @return {module:user/userTable~UserTable} the user table + */ +UserTableReader.prototype.createTable = function (tableName, columns) { + return new UserTable(tableName, columns); +}; + +module.exports = UserTableReader; + +},{"../db/dataTypes":14,"./userColumn":105,"./userTable":108}],110:[function(require,module,exports){ +/** + * GeoPackageValidate module. + * @module validate/geoPackageValidate + * + */ + +var path = require('path') + , SpatialReferenceSystem = require('../core/srs').SpatialReferenceSystem + , Contents = require('../core/contents').Contents + , GeoPackageConstants = require('../geoPackageConstants'); + +/** + * Check the file extension to see if it is a GeoPackage + * @param {string} filePath Absolute path to the GeoPackage to create + * @return {boolean} true if GeoPackage extension + */ +exports.hasGeoPackageExtension = function(filePath) { + var extension = path.extname(filePath); + return extension && extension !== '' + && (extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENSION.toLowerCase() + || extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION.toLowerCase()); +} + +/** + * Validate the extension file as a GeoPackage + * @param {string} filePath Absolute path to the GeoPackage to create + * @return {Error} error if the extension is not valid + */ +exports.validateGeoPackageExtension = function(filePath) { + if (!exports.hasGeoPackageExtension(filePath)) { + return new Error("GeoPackage database file '" + filePath + + "' does not have a valid extension of '" + + GeoPackageConstants.GEOPACKAGE_EXTENSION + "' or '" + + GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION + "'"); + } +} + +/** + * Check the GeoPackage for the minimum required tables + * @param {Object} geoPackage GeoPackage to check + * @param {module:validate/geoPackageValidate~validationCallback} callback - The validation callback + */ +exports.hasMinimumTables = function(geoPackage) { + var srsExists = geoPackage.getSpatialReferenceSystemDao().isTableExists(); + var contentsExists = geoPackage.getContentsDao().isTableExists(); + return (srsExists && contentsExists); +} + +/** + * Validation callback is passed an error if the validation failed. + * @callback module:validate/geoPackageValidate~validationCallback + * @param {Error} null if no error, otherwise describes the error + */ + +},{"../core/contents":8,"../core/srs":9,"../geoPackageConstants":71,"path":276}],111:[function(require,module,exports){ +/** + * WKB module. + * @module wkb + */ + +var wkx = require('wkx'); + +var wktToEnum = {}; +wktToEnum[wkx.Types.wkt.Point] = wkx.Types.wkb.Point; +wktToEnum[wkx.Types.wkt.LineString] = wkx.Types.wkb.LineString; +wktToEnum[wkx.Types.wkt.Polygon] = wkx.Types.wkb.Polygon; +wktToEnum[wkx.Types.wkt.MultiPoint] = wkx.Types.wkb.MultiPoint; +wktToEnum[wkx.Types.wkt.MultiLineString] = wkx.Types.wkb.MultiLineString; +wktToEnum[wkx.Types.wkt.MultiPolygon] = wkx.Types.wkb.MultiPolygon; +wktToEnum[wkx.Types.wkt.GeometryCollection] = wkx.Types.wkb.GeometryCollection; + +/** + * number from name + * @param {string} name name + * @return {Number} number corresponding to the wkb name + */ +module.exports.fromName = function(name) { + name = name.toUpperCase(); + if (name === 'GEOMETRY') { + return wkx.Types.wkb.GeometryCollection; + } + return wktToEnum[name]; +} + +},{"wkx":360}],112:[function(require,module,exports){ +'use strict'; + +module.exports = Point; + +/** + * A standalone point geometry with useful accessor, comparison, and + * modification methods. + * + * @class Point + * @param {Number} x the x-coordinate. this could be longitude or screen + * pixels, or any other sort of unit. + * @param {Number} y the y-coordinate. this could be latitude or screen + * pixels, or any other sort of unit. + * @example + * var point = new Point(-77, 38); + */ +function Point(x, y) { + this.x = x; + this.y = y; +} + +Point.prototype = { + + /** + * Clone this point, returning a new point that can be modified + * without affecting the old one. + * @return {Point} the clone + */ + clone: function() { return new Point(this.x, this.y); }, + + /** + * Add this point's x & y coordinates to another point, + * yielding a new point. + * @param {Point} p the other point + * @return {Point} output point + */ + add: function(p) { return this.clone()._add(p); }, + + /** + * Subtract this point's x & y coordinates to from point, + * yielding a new point. + * @param {Point} p the other point + * @return {Point} output point + */ + sub: function(p) { return this.clone()._sub(p); }, + + /** + * Multiply this point's x & y coordinates by point, + * yielding a new point. + * @param {Point} p the other point + * @return {Point} output point + */ + multByPoint: function(p) { return this.clone()._multByPoint(p); }, + + /** + * Divide this point's x & y coordinates by point, + * yielding a new point. + * @param {Point} p the other point + * @return {Point} output point + */ + divByPoint: function(p) { return this.clone()._divByPoint(p); }, + + /** + * Multiply this point's x & y coordinates by a factor, + * yielding a new point. + * @param {Point} k factor + * @return {Point} output point + */ + mult: function(k) { return this.clone()._mult(k); }, + + /** + * Divide this point's x & y coordinates by a factor, + * yielding a new point. + * @param {Point} k factor + * @return {Point} output point + */ + div: function(k) { return this.clone()._div(k); }, + + /** + * Rotate this point around the 0, 0 origin by an angle a, + * given in radians + * @param {Number} a angle to rotate around, in radians + * @return {Point} output point + */ + rotate: function(a) { return this.clone()._rotate(a); }, + + /** + * Rotate this point around p point by an angle a, + * given in radians + * @param {Number} a angle to rotate around, in radians + * @param {Point} p Point to rotate around + * @return {Point} output point + */ + rotateAround: function(a,p) { return this.clone()._rotateAround(a,p); }, + + /** + * Multiply this point by a 4x1 transformation matrix + * @param {Array} m transformation matrix + * @return {Point} output point + */ + matMult: function(m) { return this.clone()._matMult(m); }, + + /** + * Calculate this point but as a unit vector from 0, 0, meaning + * that the distance from the resulting point to the 0, 0 + * coordinate will be equal to 1 and the angle from the resulting + * point to the 0, 0 coordinate will be the same as before. + * @return {Point} unit vector point + */ + unit: function() { return this.clone()._unit(); }, + + /** + * Compute a perpendicular point, where the new y coordinate + * is the old x coordinate and the new x coordinate is the old y + * coordinate multiplied by -1 + * @return {Point} perpendicular point + */ + perp: function() { return this.clone()._perp(); }, + + /** + * Return a version of this point with the x & y coordinates + * rounded to integers. + * @return {Point} rounded point + */ + round: function() { return this.clone()._round(); }, + + /** + * Return the magitude of this point: this is the Euclidean + * distance from the 0, 0 coordinate to this point's x and y + * coordinates. + * @return {Number} magnitude + */ + mag: function() { + return Math.sqrt(this.x * this.x + this.y * this.y); + }, + + /** + * Judge whether this point is equal to another point, returning + * true or false. + * @param {Point} other the other point + * @return {boolean} whether the points are equal + */ + equals: function(other) { + return this.x === other.x && + this.y === other.y; + }, + + /** + * Calculate the distance from this point to another point + * @param {Point} p the other point + * @return {Number} distance + */ + dist: function(p) { + return Math.sqrt(this.distSqr(p)); + }, + + /** + * Calculate the distance from this point to another point, + * without the square root step. Useful if you're comparing + * relative distances. + * @param {Point} p the other point + * @return {Number} distance + */ + distSqr: function(p) { + var dx = p.x - this.x, + dy = p.y - this.y; + return dx * dx + dy * dy; + }, + + /** + * Get the angle from the 0, 0 coordinate to this point, in radians + * coordinates. + * @return {Number} angle + */ + angle: function() { + return Math.atan2(this.y, this.x); + }, + + /** + * Get the angle from this point to another point, in radians + * @param {Point} b the other point + * @return {Number} angle + */ + angleTo: function(b) { + return Math.atan2(this.y - b.y, this.x - b.x); + }, + + /** + * Get the angle between this point and another point, in radians + * @param {Point} b the other point + * @return {Number} angle + */ + angleWith: function(b) { + return this.angleWithSep(b.x, b.y); + }, + + /* + * Find the angle of the two vectors, solving the formula for + * the cross product a x b = |a||b|sin(θ) for θ. + * @param {Number} x the x-coordinate + * @param {Number} y the y-coordinate + * @return {Number} the angle in radians + */ + angleWithSep: function(x, y) { + return Math.atan2( + this.x * y - this.y * x, + this.x * x + this.y * y); + }, + + _matMult: function(m) { + var x = m[0] * this.x + m[1] * this.y, + y = m[2] * this.x + m[3] * this.y; + this.x = x; + this.y = y; + return this; + }, + + _add: function(p) { + this.x += p.x; + this.y += p.y; + return this; + }, + + _sub: function(p) { + this.x -= p.x; + this.y -= p.y; + return this; + }, + + _mult: function(k) { + this.x *= k; + this.y *= k; + return this; + }, + + _div: function(k) { + this.x /= k; + this.y /= k; + return this; + }, + + _multByPoint: function(p) { + this.x *= p.x; + this.y *= p.y; + return this; + }, + + _divByPoint: function(p) { + this.x /= p.x; + this.y /= p.y; + return this; + }, + + _unit: function() { + this._div(this.mag()); + return this; + }, + + _perp: function() { + var y = this.y; + this.y = this.x; + this.x = -y; + return this; + }, + + _rotate: function(angle) { + var cos = Math.cos(angle), + sin = Math.sin(angle), + x = cos * this.x - sin * this.y, + y = sin * this.x + cos * this.y; + this.x = x; + this.y = y; + return this; + }, + + _rotateAround: function(angle, p) { + var cos = Math.cos(angle), + sin = Math.sin(angle), + x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y), + y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y); + this.x = x; + this.y = y; + return this; + }, + + _round: function() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this; + } +}; + +/** + * Construct a point from an array if necessary, otherwise if the input + * is already a Point, or an unknown type, return it unchanged + * @param {Array|Point|*} a any kind of input value + * @return {Point} constructed point, or passed-through value. + * @example + * // this + * var point = Point.convert([0, 1]); + * // is equivalent to + * var point = new Point(0, 1); + */ +Point.convert = function (a) { + if (a instanceof Point) { + return a; + } + if (Array.isArray(a)) { + return new Point(a[0], a[1]); + } + return a; +}; + +},{}],113:[function(require,module,exports){ +module.exports.VectorTile = require('./lib/vectortile.js'); +module.exports.VectorTileFeature = require('./lib/vectortilefeature.js'); +module.exports.VectorTileLayer = require('./lib/vectortilelayer.js'); + +},{"./lib/vectortile.js":114,"./lib/vectortilefeature.js":115,"./lib/vectortilelayer.js":116}],114:[function(require,module,exports){ +'use strict'; + +var VectorTileLayer = require('./vectortilelayer'); + +module.exports = VectorTile; + +function VectorTile(pbf, end) { + this.layers = pbf.readFields(readTile, {}, end); +} + +function readTile(tag, layers, pbf) { + if (tag === 3) { + var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos); + if (layer.length) layers[layer.name] = layer; + } +} + + +},{"./vectortilelayer":116}],115:[function(require,module,exports){ +'use strict'; + +var Point = require('@mapbox/point-geometry'); + +module.exports = VectorTileFeature; + +function VectorTileFeature(pbf, end, extent, keys, values) { + // Public + this.properties = {}; + this.extent = extent; + this.type = 0; + + // Private + this._pbf = pbf; + this._geometry = -1; + this._keys = keys; + this._values = values; + + pbf.readFields(readFeature, this, end); +} + +function readFeature(tag, feature, pbf) { + if (tag == 1) feature.id = pbf.readVarint(); + else if (tag == 2) readTag(pbf, feature); + else if (tag == 3) feature.type = pbf.readVarint(); + else if (tag == 4) feature._geometry = pbf.pos; +} + +function readTag(pbf, feature) { + var end = pbf.readVarint() + pbf.pos; + + while (pbf.pos < end) { + var key = feature._keys[pbf.readVarint()], + value = feature._values[pbf.readVarint()]; + feature.properties[key] = value; + } +} + +VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon']; + +VectorTileFeature.prototype.loadGeometry = function() { + var pbf = this._pbf; + pbf.pos = this._geometry; + + var end = pbf.readVarint() + pbf.pos, + cmd = 1, + length = 0, + x = 0, + y = 0, + lines = [], + line; + + while (pbf.pos < end) { + if (length <= 0) { + var cmdLen = pbf.readVarint(); + cmd = cmdLen & 0x7; + length = cmdLen >> 3; + } + + length--; + + if (cmd === 1 || cmd === 2) { + x += pbf.readSVarint(); + y += pbf.readSVarint(); + + if (cmd === 1) { // moveTo + if (line) lines.push(line); + line = []; + } + + line.push(new Point(x, y)); + + } else if (cmd === 7) { + + // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90 + if (line) { + line.push(line[0].clone()); // closePolygon + } + + } else { + throw new Error('unknown command ' + cmd); + } + } + + if (line) lines.push(line); + + return lines; +}; + +VectorTileFeature.prototype.bbox = function() { + var pbf = this._pbf; + pbf.pos = this._geometry; + + var end = pbf.readVarint() + pbf.pos, + cmd = 1, + length = 0, + x = 0, + y = 0, + x1 = Infinity, + x2 = -Infinity, + y1 = Infinity, + y2 = -Infinity; + + while (pbf.pos < end) { + if (length <= 0) { + var cmdLen = pbf.readVarint(); + cmd = cmdLen & 0x7; + length = cmdLen >> 3; + } + + length--; + + if (cmd === 1 || cmd === 2) { + x += pbf.readSVarint(); + y += pbf.readSVarint(); + if (x < x1) x1 = x; + if (x > x2) x2 = x; + if (y < y1) y1 = y; + if (y > y2) y2 = y; + + } else if (cmd !== 7) { + throw new Error('unknown command ' + cmd); + } + } + + return [x1, y1, x2, y2]; +}; + +VectorTileFeature.prototype.toGeoJSON = function(x, y, z) { + var size = this.extent * Math.pow(2, z), + x0 = this.extent * x, + y0 = this.extent * y, + coords = this.loadGeometry(), + type = VectorTileFeature.types[this.type], + i, j; + + function project(line) { + for (var j = 0; j < line.length; j++) { + var p = line[j], y2 = 180 - (p.y + y0) * 360 / size; + line[j] = [ + (p.x + x0) * 360 / size - 180, + 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90 + ]; + } + } + + switch (this.type) { + case 1: + var points = []; + for (i = 0; i < coords.length; i++) { + points[i] = coords[i][0]; + } + coords = points; + project(coords); + break; + + case 2: + for (i = 0; i < coords.length; i++) { + project(coords[i]); + } + break; + + case 3: + coords = classifyRings(coords); + for (i = 0; i < coords.length; i++) { + for (j = 0; j < coords[i].length; j++) { + project(coords[i][j]); + } + } + break; + } + + if (coords.length === 1) { + coords = coords[0]; + } else { + type = 'Multi' + type; + } + + var result = { + type: "Feature", + geometry: { + type: type, + coordinates: coords + }, + properties: this.properties + }; + + if ('id' in this) { + result.id = this.id; + } + + return result; +}; + +// classifies an array of rings into polygons with outer rings and holes + +function classifyRings(rings) { + var len = rings.length; + + if (len <= 1) return [rings]; + + var polygons = [], + polygon, + ccw; + + for (var i = 0; i < len; i++) { + var area = signedArea(rings[i]); + if (area === 0) continue; + + if (ccw === undefined) ccw = area < 0; + + if (ccw === area < 0) { + if (polygon) polygons.push(polygon); + polygon = [rings[i]]; + + } else { + polygon.push(rings[i]); + } + } + if (polygon) polygons.push(polygon); + + return polygons; +} + +function signedArea(ring) { + var sum = 0; + for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) { + p1 = ring[i]; + p2 = ring[j]; + sum += (p2.x - p1.x) * (p1.y + p2.y); + } + return sum; +} + +},{"@mapbox/point-geometry":112}],116:[function(require,module,exports){ +'use strict'; + +var VectorTileFeature = require('./vectortilefeature.js'); + +module.exports = VectorTileLayer; + +function VectorTileLayer(pbf, end) { + // Public + this.version = 1; + this.name = null; + this.extent = 4096; + this.length = 0; + + // Private + this._pbf = pbf; + this._keys = []; + this._values = []; + this._features = []; + + pbf.readFields(readLayer, this, end); + + this.length = this._features.length; +} + +function readLayer(tag, layer, pbf) { + if (tag === 15) layer.version = pbf.readVarint(); + else if (tag === 1) layer.name = pbf.readString(); + else if (tag === 5) layer.extent = pbf.readVarint(); + else if (tag === 2) layer._features.push(pbf.pos); + else if (tag === 3) layer._keys.push(pbf.readString()); + else if (tag === 4) layer._values.push(readValueMessage(pbf)); +} + +function readValueMessage(pbf) { + var value = null, + end = pbf.readVarint() + pbf.pos; + + while (pbf.pos < end) { + var tag = pbf.readVarint() >> 3; + + value = tag === 1 ? pbf.readString() : + tag === 2 ? pbf.readFloat() : + tag === 3 ? pbf.readDouble() : + tag === 4 ? pbf.readVarint64() : + tag === 5 ? pbf.readVarint() : + tag === 6 ? pbf.readSVarint() : + tag === 7 ? pbf.readBoolean() : null; + } + + return value; +} + +// return feature `i` from this layer as a `VectorTileFeature` +VectorTileLayer.prototype.feature = function(i) { + if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds'); + + this._pbf.pos = this._features[i]; + + var end = this._pbf.readVarint() + this._pbf.pos; + return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values); +}; + +},{"./vectortilefeature.js":115}],117:[function(require,module,exports){ +var each = require('@turf/meta').coordEach; + +/** + * Takes a set of features, calculates the bbox of all input features, and returns a bounding box. + * + * @name bbox + * @param {(Feature|FeatureCollection)} geojson input features + * @returns {Array} bbox extent in [minX, minY, maxX, maxY] order + * @addToMap features, bboxPolygon + * @example + * var pt1 = turf.point([114.175329, 22.2524]) + * var pt2 = turf.point([114.170007, 22.267969]) + * var pt3 = turf.point([114.200649, 22.274641]) + * var pt4 = turf.point([114.200649, 22.274641]) + * var pt5 = turf.point([114.186744, 22.265745]) + * var features = turf.featureCollection([pt1, pt2, pt3, pt4, pt5]) + * + * var bbox = turf.bbox(features); + * + * var bboxPolygon = turf.bboxPolygon(bbox); + * + * //=bbox + * + * //=bboxPolygon + */ +module.exports = function (geojson) { + var bbox = [Infinity, Infinity, -Infinity, -Infinity]; + each(geojson, function (coord) { + if (bbox[0] > coord[0]) bbox[0] = coord[0]; + if (bbox[1] > coord[1]) bbox[1] = coord[1]; + if (bbox[2] < coord[0]) bbox[2] = coord[0]; + if (bbox[3] < coord[1]) bbox[3] = coord[1]; + }); + return bbox; +}; + +},{"@turf/meta":130}],118:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var invariant_1 = require("@turf/invariant"); +// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule +// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js +// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html +/** + * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point + * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes. + * + * @name booleanPointInPolygon + * @param {Coord} point input point + * @param {Feature} polygon input polygon or multipolygon + * @param {Object} [options={}] Optional parameters + * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if + * the point is inside the polygon otherwise false. + * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon + * @example + * var pt = turf.point([-77, 44]); + * var poly = turf.polygon([[ + * [-81, 41], + * [-81, 47], + * [-72, 47], + * [-72, 41], + * [-81, 41] + * ]]); + * + * turf.booleanPointInPolygon(pt, poly); + * //= true + */ +function booleanPointInPolygon(point, polygon, options) { + if (options === void 0) { options = {}; } + // validation + if (!point) { + throw new Error("point is required"); + } + if (!polygon) { + throw new Error("polygon is required"); + } + var pt = invariant_1.getCoord(point); + var geom = invariant_1.getGeom(polygon); + var type = geom.type; + var bbox = polygon.bbox; + var polys = geom.coordinates; + // Quick elimination if point is not inside bbox + if (bbox && inBBox(pt, bbox) === false) { + return false; + } + // normalize to multipolygon + if (type === "Polygon") { + polys = [polys]; + } + var insidePoly = false; + for (var i = 0; i < polys.length && !insidePoly; i++) { + // check if it is in the outer ring first + if (inRing(pt, polys[i][0], options.ignoreBoundary)) { + var inHole = false; + var k = 1; + // check for the point in any of the holes + while (k < polys[i].length && !inHole) { + if (inRing(pt, polys[i][k], !options.ignoreBoundary)) { + inHole = true; + } + k++; + } + if (!inHole) { + insidePoly = true; + } + } + } + return insidePoly; +} +exports.default = booleanPointInPolygon; +/** + * inRing + * + * @private + * @param {Array} pt [x,y] + * @param {Array>} ring [[x,y], [x,y],..] + * @param {boolean} ignoreBoundary ignoreBoundary + * @returns {boolean} inRing + */ +function inRing(pt, ring, ignoreBoundary) { + var isInside = false; + if (ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]) { + ring = ring.slice(0, ring.length - 1); + } + for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) { + var xi = ring[i][0]; + var yi = ring[i][1]; + var xj = ring[j][0]; + var yj = ring[j][1]; + var onBoundary = (pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0) && + ((xi - pt[0]) * (xj - pt[0]) <= 0) && ((yi - pt[1]) * (yj - pt[1]) <= 0); + if (onBoundary) { + return !ignoreBoundary; + } + var intersect = ((yi > pt[1]) !== (yj > pt[1])) && + (pt[0] < (xj - xi) * (pt[1] - yi) / (yj - yi) + xi); + if (intersect) { + isInside = !isInside; + } + } + return isInside; +} +/** + * inBBox + * + * @private + * @param {Position} pt point [x,y] + * @param {BBox} bbox BBox [west, south, east, north] + * @returns {boolean} true/false if point is inside BBox + */ +function inBBox(pt, bbox) { + return bbox[0] <= pt[0] && + bbox[1] <= pt[1] && + bbox[2] >= pt[0] && + bbox[3] >= pt[1]; +} + +},{"@turf/invariant":125}],119:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var invariant_1 = require("@turf/invariant"); +/** + * Returns true if a point is on a line. Accepts a optional parameter to ignore the + * start and end vertices of the linestring. + * + * @name booleanPointOnLine + * @param {Coord} pt GeoJSON Point + * @param {Feature} line GeoJSON LineString + * @param {Object} [options={}] Optional parameters + * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices. + * @returns {boolean} true/false + * @example + * var pt = turf.point([0, 0]); + * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]); + * var isPointOnLine = turf.booleanPointOnLine(pt, line); + * //=true + */ +function booleanPointOnLine(pt, line, options) { + if (options === void 0) { options = {}; } + // Normalize inputs + var ptCoords = invariant_1.getCoord(pt); + var lineCoords = invariant_1.getCoords(line); + // Main + for (var i = 0; i < lineCoords.length - 1; i++) { + var ignoreBoundary = false; + if (options.ignoreEndVertices) { + if (i === 0) { + ignoreBoundary = "start"; + } + if (i === lineCoords.length - 2) { + ignoreBoundary = "end"; + } + if (i === 0 && i + 1 === lineCoords.length - 1) { + ignoreBoundary = "both"; + } + } + if (isPointOnLineSegment(lineCoords[i], lineCoords[i + 1], ptCoords, ignoreBoundary)) { + return true; + } + } + return false; +} +// See http://stackoverflow.com/a/4833823/1979085 +/** + * @private + * @param {Position} lineSegmentStart coord pair of start of line + * @param {Position} lineSegmentEnd coord pair of end of line + * @param {Position} pt coord pair of point to check + * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends. + * If true which end to ignore. + * @returns {boolean} true/false + */ +function isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt, excludeBoundary) { + var x = pt[0]; + var y = pt[1]; + var x1 = lineSegmentStart[0]; + var y1 = lineSegmentStart[1]; + var x2 = lineSegmentEnd[0]; + var y2 = lineSegmentEnd[1]; + var dxc = pt[0] - x1; + var dyc = pt[1] - y1; + var dxl = x2 - x1; + var dyl = y2 - y1; + var cross = dxc * dyl - dyc * dxl; + if (cross !== 0) { + return false; + } + if (!excludeBoundary) { + if (Math.abs(dxl) >= Math.abs(dyl)) { + return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1; + } + return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1; + } + else if (excludeBoundary === "start") { + if (Math.abs(dxl) >= Math.abs(dyl)) { + return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1; + } + return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1; + } + else if (excludeBoundary === "end") { + if (Math.abs(dxl) >= Math.abs(dyl)) { + return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1; + } + return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1; + } + else if (excludeBoundary === "both") { + if (Math.abs(dxl) >= Math.abs(dyl)) { + return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1; + } + return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1; + } + return false; +} +exports.default = booleanPointOnLine; + +},{"@turf/invariant":125}],120:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var bbox_1 = require("@turf/bbox"); +var boolean_point_on_line_1 = require("@turf/boolean-point-on-line"); +var boolean_point_in_polygon_1 = require("@turf/boolean-point-in-polygon"); +var invariant_1 = require("@turf/invariant"); +/** + * Boolean-within returns true if the first geometry is completely within the second geometry. + * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a) + * must not intersect the exterior of the secondary (geometry b). + * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`. + * + * @name booleanWithin + * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry + * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry + * @returns {boolean} true/false + * @example + * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]); + * var point = turf.point([1, 2]); + * + * turf.booleanWithin(point, line); + * //=true + */ +function booleanWithin(feature1, feature2) { + var type1 = invariant_1.getType(feature1); + var type2 = invariant_1.getType(feature2); + var geom1 = invariant_1.getGeom(feature1); + var geom2 = invariant_1.getGeom(feature2); + switch (type1) { + case 'Point': + switch (type2) { + case 'MultiPoint': + return isPointInMultiPoint(geom1, geom2); + case 'LineString': + return boolean_point_on_line_1.default(geom1, geom2, { ignoreEndVertices: true }); + case 'Polygon': + case 'MultiPolygon': + return boolean_point_in_polygon_1.default(geom1, geom2, { ignoreBoundary: true }); + default: + throw new Error('feature2 ' + type2 + ' geometry not supported'); + } + case 'MultiPoint': + switch (type2) { + case 'MultiPoint': + return isMultiPointInMultiPoint(geom1, geom2); + case 'LineString': + return isMultiPointOnLine(geom1, geom2); + case 'Polygon': + case 'MultiPolygon': + return isMultiPointInPoly(geom1, geom2); + default: + throw new Error('feature2 ' + type2 + ' geometry not supported'); + } + case 'LineString': + switch (type2) { + case 'LineString': + return isLineOnLine(geom1, geom2); + case 'Polygon': + case 'MultiPolygon': + return isLineInPoly(geom1, geom2); + default: + throw new Error('feature2 ' + type2 + ' geometry not supported'); + } + case 'Polygon': + switch (type2) { + case 'Polygon': + case 'MultiPolygon': + return isPolyInPoly(geom1, geom2); + default: + throw new Error('feature2 ' + type2 + ' geometry not supported'); + } + default: + throw new Error('feature1 ' + type1 + ' geometry not supported'); + } +} +function isPointInMultiPoint(point, multiPoint) { + var i; + var output = false; + for (i = 0; i < multiPoint.coordinates.length; i++) { + if (compareCoords(multiPoint.coordinates[i], point.coordinates)) { + output = true; + break; + } + } + return output; +} +function isMultiPointInMultiPoint(multiPoint1, multiPoint2) { + for (var i = 0; i < multiPoint1.coordinates.length; i++) { + var anyMatch = false; + for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) { + if (compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])) { + anyMatch = true; + } + } + if (!anyMatch) { + return false; + } + } + return true; +} +function isMultiPointOnLine(multiPoint, lineString) { + var foundInsidePoint = false; + for (var i = 0; i < multiPoint.coordinates.length; i++) { + if (!boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString)) { + return false; + } + if (!foundInsidePoint) { + foundInsidePoint = boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString, { ignoreEndVertices: true }); + } + } + return foundInsidePoint; +} +function isMultiPointInPoly(multiPoint, polygon) { + var output = true; + var oneInside = false; + for (var i = 0; i < multiPoint.coordinates.length; i++) { + var isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon); + if (!isInside) { + output = false; + break; + } + if (!oneInside) { + isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon, { ignoreBoundary: true }); + } + } + return output && isInside; +} +function isLineOnLine(lineString1, lineString2) { + for (var i = 0; i < lineString1.coordinates.length; i++) { + if (!boolean_point_on_line_1.default(lineString1.coordinates[i], lineString2)) { + return false; + } + } + return true; +} +function isLineInPoly(linestring, polygon) { + var polyBbox = bbox_1.default(polygon); + var lineBbox = bbox_1.default(linestring); + if (!doBBoxOverlap(polyBbox, lineBbox)) { + return false; + } + var foundInsidePoint = false; + for (var i = 0; i < linestring.coordinates.length - 1; i++) { + if (!boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon)) { + return false; + } + if (!foundInsidePoint) { + foundInsidePoint = boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon, { ignoreBoundary: true }); + } + if (!foundInsidePoint) { + var midpoint = getMidpoint(linestring.coordinates[i], linestring.coordinates[i + 1]); + foundInsidePoint = boolean_point_in_polygon_1.default(midpoint, polygon, { ignoreBoundary: true }); + } + } + return foundInsidePoint; +} +/** + * Is Polygon2 in Polygon1 + * Only takes into account outer rings + * + * @private + * @param {Geometry|Feature} feature1 Polygon1 + * @param {Geometry|Feature} feature2 Polygon2 + * @returns {boolean} true/false + */ +function isPolyInPoly(feature1, feature2) { + var poly1Bbox = bbox_1.default(feature1); + var poly2Bbox = bbox_1.default(feature2); + if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) { + return false; + } + for (var i = 0; i < feature1.coordinates[0].length; i++) { + if (!boolean_point_in_polygon_1.default(feature1.coordinates[0][i], feature2)) { + return false; + } + } + return true; +} +function doBBoxOverlap(bbox1, bbox2) { + if (bbox1[0] > bbox2[0]) + return false; + if (bbox1[2] < bbox2[2]) + return false; + if (bbox1[1] > bbox2[1]) + return false; + if (bbox1[3] < bbox2[3]) + return false; + return true; +} +/** + * compareCoords + * + * @private + * @param {Position} pair1 point [x,y] + * @param {Position} pair2 point [x,y] + * @returns {boolean} true/false if coord pairs match + */ +function compareCoords(pair1, pair2) { + return pair1[0] === pair2[0] && pair1[1] === pair2[1]; +} +/** + * getMidpoint + * + * @private + * @param {Position} pair1 point [x,y] + * @param {Position} pair2 point [x,y] + * @returns {Position} midpoint of pair1 and pair2 + */ +function getMidpoint(pair1, pair2) { + return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2]; +} +exports.default = booleanWithin; + +},{"@turf/bbox":121,"@turf/boolean-point-in-polygon":118,"@turf/boolean-point-on-line":119,"@turf/invariant":125}],121:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var meta_1 = require("@turf/meta"); +/** + * Takes a set of features, calculates the bbox of all input features, and returns a bounding box. + * + * @name bbox + * @param {GeoJSON} geojson any GeoJSON object + * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order + * @example + * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]); + * var bbox = turf.bbox(line); + * var bboxPolygon = turf.bboxPolygon(bbox); + * + * //addToMap + * var addToMap = [line, bboxPolygon] + */ +function bbox(geojson) { + var result = [Infinity, Infinity, -Infinity, -Infinity]; + meta_1.coordEach(geojson, function (coord) { + if (result[0] > coord[0]) { + result[0] = coord[0]; + } + if (result[1] > coord[1]) { + result[1] = coord[1]; + } + if (result[2] < coord[0]) { + result[2] = coord[0]; + } + if (result[3] < coord[1]) { + result[3] = coord[1]; + } + }); + return result; +} +exports.default = bbox; + +},{"@turf/meta":122}],122:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var helpers = require('@turf/helpers'); + +/** + * Callback for coordEach + * + * @callback coordEachCallback + * @param {Array} currentCoord The current coordinate being processed. + * @param {number} coordIndex The current index of the coordinate being processed. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. + * @param {number} geometryIndex The current index of the Geometry being processed. + */ + +/** + * Iterate over coordinates in any GeoJSON object, similar to Array.forEach() + * + * @name coordEach + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex) + * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration. + * @returns {void} + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {"foo": "bar"}), + * turf.point([36, 53], {"hello": "world"}) + * ]); + * + * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { + * //=currentCoord + * //=coordIndex + * //=featureIndex + * //=multiFeatureIndex + * //=geometryIndex + * }); + */ +function coordEach(geojson, callback, excludeWrapCoord) { + // Handles null Geometry -- Skips this GeoJSON + if (geojson === null) return; + var j, k, l, geometry, stopG, coords, + geometryMaybeCollection, + wrapShrink = 0, + coordIndex = 0, + isGeometryCollection, + type = geojson.type, + isFeatureCollection = type === 'FeatureCollection', + isFeature = type === 'Feature', + stop = isFeatureCollection ? geojson.features.length : 1; + + // This logic may look a little weird. The reason why it is that way + // is because it's trying to be fast. GeoJSON supports multiple kinds + // of objects at its root: FeatureCollection, Features, Geometries. + // This function has the responsibility of handling all of them, and that + // means that some of the `for` loops you see below actually just don't apply + // to certain inputs. For instance, if you give this just a + // Point geometry, then both loops are short-circuited and all we do + // is gradually rename the input until it's called 'geometry'. + // + // This also aims to allocate as few resources as possible: just a + // few numbers and booleans, rather than any temporary arrays as would + // be required with the normalization approach. + for (var featureIndex = 0; featureIndex < stop; featureIndex++) { + geometryMaybeCollection = (isFeatureCollection ? geojson.features[featureIndex].geometry : + (isFeature ? geojson.geometry : geojson)); + isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false; + stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; + + for (var geomIndex = 0; geomIndex < stopG; geomIndex++) { + var multiFeatureIndex = 0; + var geometryIndex = 0; + geometry = isGeometryCollection ? + geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection; + + // Handles null Geometry -- Skips this geometry + if (geometry === null) continue; + coords = geometry.coordinates; + var geomType = geometry.type; + + wrapShrink = (excludeWrapCoord && (geomType === 'Polygon' || geomType === 'MultiPolygon')) ? 1 : 0; + + switch (geomType) { + case null: + break; + case 'Point': + if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; + coordIndex++; + multiFeatureIndex++; + break; + case 'LineString': + case 'MultiPoint': + for (j = 0; j < coords.length; j++) { + if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; + coordIndex++; + if (geomType === 'MultiPoint') multiFeatureIndex++; + } + if (geomType === 'LineString') multiFeatureIndex++; + break; + case 'Polygon': + case 'MultiLineString': + for (j = 0; j < coords.length; j++) { + for (k = 0; k < coords[j].length - wrapShrink; k++) { + if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; + coordIndex++; + } + if (geomType === 'MultiLineString') multiFeatureIndex++; + if (geomType === 'Polygon') geometryIndex++; + } + if (geomType === 'Polygon') multiFeatureIndex++; + break; + case 'MultiPolygon': + for (j = 0; j < coords.length; j++) { + geometryIndex = 0; + for (k = 0; k < coords[j].length; k++) { + for (l = 0; l < coords[j][k].length - wrapShrink; l++) { + if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; + coordIndex++; + } + geometryIndex++; + } + multiFeatureIndex++; + } + break; + case 'GeometryCollection': + for (j = 0; j < geometry.geometries.length; j++) + if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false; + break; + default: + throw new Error('Unknown Geometry Type'); + } + } + } +} + +/** + * Callback for coordReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @callback coordReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {Array} currentCoord The current coordinate being processed. + * @param {number} coordIndex The current index of the coordinate being processed. + * Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. + * @param {number} geometryIndex The current index of the Geometry being processed. + */ + +/** + * Reduce coordinates in any GeoJSON object, similar to Array.reduce() + * + * @name coordReduce + * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration. + * @returns {*} The value that results from the reduction. + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {"foo": "bar"}), + * turf.point([36, 53], {"hello": "world"}) + * ]); + * + * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { + * //=previousValue + * //=currentCoord + * //=coordIndex + * //=featureIndex + * //=multiFeatureIndex + * //=geometryIndex + * return currentCoord; + * }); + */ +function coordReduce(geojson, callback, initialValue, excludeWrapCoord) { + var previousValue = initialValue; + coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { + if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord; + else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex); + }, excludeWrapCoord); + return previousValue; +} + +/** + * Callback for propEach + * + * @callback propEachCallback + * @param {Object} currentProperties The current Properties being processed. + * @param {number} featureIndex The current index of the Feature being processed. + */ + +/** + * Iterate over properties in any GeoJSON object, similar to Array.forEach() + * + * @name propEach + * @param {FeatureCollection|Feature} geojson any GeoJSON object + * @param {Function} callback a method that takes (currentProperties, featureIndex) + * @returns {void} + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.point([36, 53], {hello: 'world'}) + * ]); + * + * turf.propEach(features, function (currentProperties, featureIndex) { + * //=currentProperties + * //=featureIndex + * }); + */ +function propEach(geojson, callback) { + var i; + switch (geojson.type) { + case 'FeatureCollection': + for (i = 0; i < geojson.features.length; i++) { + if (callback(geojson.features[i].properties, i) === false) break; + } + break; + case 'Feature': + callback(geojson.properties, 0); + break; + } +} + + +/** + * Callback for propReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @callback propReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {*} currentProperties The current Properties being processed. + * @param {number} featureIndex The current index of the Feature being processed. + */ + +/** + * Reduce properties in any GeoJSON object into a single value, + * similar to how Array.reduce works. However, in this case we lazily run + * the reduction, so an array of all properties is unnecessary. + * + * @name propReduce + * @param {FeatureCollection|Feature} geojson any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.point([36, 53], {hello: 'world'}) + * ]); + * + * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) { + * //=previousValue + * //=currentProperties + * //=featureIndex + * return currentProperties + * }); + */ +function propReduce(geojson, callback, initialValue) { + var previousValue = initialValue; + propEach(geojson, function (currentProperties, featureIndex) { + if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties; + else previousValue = callback(previousValue, currentProperties, featureIndex); + }); + return previousValue; +} + +/** + * Callback for featureEach + * + * @callback featureEachCallback + * @param {Feature} currentFeature The current Feature being processed. + * @param {number} featureIndex The current index of the Feature being processed. + */ + +/** + * Iterate over features in any GeoJSON object, similar to + * Array.forEach. + * + * @name featureEach + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @param {Function} callback a method that takes (currentFeature, featureIndex) + * @returns {void} + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.point([36, 53], {hello: 'world'}) + * ]); + * + * turf.featureEach(features, function (currentFeature, featureIndex) { + * //=currentFeature + * //=featureIndex + * }); + */ +function featureEach(geojson, callback) { + if (geojson.type === 'Feature') { + callback(geojson, 0); + } else if (geojson.type === 'FeatureCollection') { + for (var i = 0; i < geojson.features.length; i++) { + if (callback(geojson.features[i], i) === false) break; + } + } +} + +/** + * Callback for featureReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @callback featureReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {Feature} currentFeature The current Feature being processed. + * @param {number} featureIndex The current index of the Feature being processed. + */ + +/** + * Reduce features in any GeoJSON object, similar to Array.reduce(). + * + * @name featureReduce + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {"foo": "bar"}), + * turf.point([36, 53], {"hello": "world"}) + * ]); + * + * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) { + * //=previousValue + * //=currentFeature + * //=featureIndex + * return currentFeature + * }); + */ +function featureReduce(geojson, callback, initialValue) { + var previousValue = initialValue; + featureEach(geojson, function (currentFeature, featureIndex) { + if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature; + else previousValue = callback(previousValue, currentFeature, featureIndex); + }); + return previousValue; +} + +/** + * Get all coordinates from any GeoJSON object. + * + * @name coordAll + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @returns {Array>} coordinate position array + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.point([36, 53], {hello: 'world'}) + * ]); + * + * var coords = turf.coordAll(features); + * //= [[26, 37], [36, 53]] + */ +function coordAll(geojson) { + var coords = []; + coordEach(geojson, function (coord) { + coords.push(coord); + }); + return coords; +} + +/** + * Callback for geomEach + * + * @callback geomEachCallback + * @param {Geometry} currentGeometry The current Geometry being processed. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {Object} featureProperties The current Feature Properties being processed. + * @param {Array} featureBBox The current Feature BBox being processed. + * @param {number|string} featureId The current Feature Id being processed. + */ + +/** + * Iterate over each geometry in any GeoJSON object, similar to Array.forEach() + * + * @name geomEach + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) + * @returns {void} + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.point([36, 53], {hello: 'world'}) + * ]); + * + * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { + * //=currentGeometry + * //=featureIndex + * //=featureProperties + * //=featureBBox + * //=featureId + * }); + */ +function geomEach(geojson, callback) { + var i, j, g, geometry, stopG, + geometryMaybeCollection, + isGeometryCollection, + featureProperties, + featureBBox, + featureId, + featureIndex = 0, + isFeatureCollection = geojson.type === 'FeatureCollection', + isFeature = geojson.type === 'Feature', + stop = isFeatureCollection ? geojson.features.length : 1; + + // This logic may look a little weird. The reason why it is that way + // is because it's trying to be fast. GeoJSON supports multiple kinds + // of objects at its root: FeatureCollection, Features, Geometries. + // This function has the responsibility of handling all of them, and that + // means that some of the `for` loops you see below actually just don't apply + // to certain inputs. For instance, if you give this just a + // Point geometry, then both loops are short-circuited and all we do + // is gradually rename the input until it's called 'geometry'. + // + // This also aims to allocate as few resources as possible: just a + // few numbers and booleans, rather than any temporary arrays as would + // be required with the normalization approach. + for (i = 0; i < stop; i++) { + + geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry : + (isFeature ? geojson.geometry : geojson)); + featureProperties = (isFeatureCollection ? geojson.features[i].properties : + (isFeature ? geojson.properties : {})); + featureBBox = (isFeatureCollection ? geojson.features[i].bbox : + (isFeature ? geojson.bbox : undefined)); + featureId = (isFeatureCollection ? geojson.features[i].id : + (isFeature ? geojson.id : undefined)); + isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false; + stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; + + for (g = 0; g < stopG; g++) { + geometry = isGeometryCollection ? + geometryMaybeCollection.geometries[g] : geometryMaybeCollection; + + // Handle null Geometry + if (geometry === null) { + if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false; + continue; + } + switch (geometry.type) { + case 'Point': + case 'LineString': + case 'MultiPoint': + case 'Polygon': + case 'MultiLineString': + case 'MultiPolygon': { + if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false; + break; + } + case 'GeometryCollection': { + for (j = 0; j < geometry.geometries.length; j++) { + if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false; + } + break; + } + default: + throw new Error('Unknown Geometry Type'); + } + } + // Only increase `featureIndex` per each feature + featureIndex++; + } +} + +/** + * Callback for geomReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @callback geomReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {Geometry} currentGeometry The current Geometry being processed. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {Object} featureProperties The current Feature Properties being processed. + * @param {Array} featureBBox The current Feature BBox being processed. + * @param {number|string} featureId The current Feature Id being processed. + */ + +/** + * Reduce geometry in any GeoJSON object, similar to Array.reduce(). + * + * @name geomReduce + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.point([36, 53], {hello: 'world'}) + * ]); + * + * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { + * //=previousValue + * //=currentGeometry + * //=featureIndex + * //=featureProperties + * //=featureBBox + * //=featureId + * return currentGeometry + * }); + */ +function geomReduce(geojson, callback, initialValue) { + var previousValue = initialValue; + geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { + if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry; + else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId); + }); + return previousValue; +} + +/** + * Callback for flattenEach + * + * @callback flattenEachCallback + * @param {Feature} currentFeature The current flattened feature being processed. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. + */ + +/** + * Iterate over flattened features in any GeoJSON object, similar to + * Array.forEach. + * + * @name flattenEach + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex) + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'}) + * ]); + * + * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) { + * //=currentFeature + * //=featureIndex + * //=multiFeatureIndex + * }); + */ +function flattenEach(geojson, callback) { + geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) { + // Callback for single geometry + var type = (geometry === null) ? null : geometry.type; + switch (type) { + case null: + case 'Point': + case 'LineString': + case 'Polygon': + if (callback(helpers.feature(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) return false; + return; + } + + var geomType; + + // Callback for multi-geometry + switch (type) { + case 'MultiPoint': + geomType = 'Point'; + break; + case 'MultiLineString': + geomType = 'LineString'; + break; + case 'MultiPolygon': + geomType = 'Polygon'; + break; + } + + for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) { + var coordinate = geometry.coordinates[multiFeatureIndex]; + var geom = { + type: geomType, + coordinates: coordinate + }; + if (callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false; + } + }); +} + +/** + * Callback for flattenReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @callback flattenReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {Feature} currentFeature The current Feature being processed. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. + */ + +/** + * Reduce flattened features in any GeoJSON object, similar to Array.reduce(). + * + * @name flattenReduce + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var features = turf.featureCollection([ + * turf.point([26, 37], {foo: 'bar'}), + * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'}) + * ]); + * + * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) { + * //=previousValue + * //=currentFeature + * //=featureIndex + * //=multiFeatureIndex + * return currentFeature + * }); + */ +function flattenReduce(geojson, callback, initialValue) { + var previousValue = initialValue; + flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) { + if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature; + else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex); + }); + return previousValue; +} + +/** + * Callback for segmentEach + * + * @callback segmentEachCallback + * @param {Feature} currentSegment The current Segment being processed. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. + * @param {number} geometryIndex The current index of the Geometry being processed. + * @param {number} segmentIndex The current index of the Segment being processed. + * @returns {void} + */ + +/** + * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach() + * (Multi)Point geometries do not contain segments therefore they are ignored during this operation. + * + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON + * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) + * @returns {void} + * @example + * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); + * + * // Iterate over GeoJSON by 2-vertex segments + * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { + * //=currentSegment + * //=featureIndex + * //=multiFeatureIndex + * //=geometryIndex + * //=segmentIndex + * }); + * + * // Calculate the total number of segments + * var total = 0; + * turf.segmentEach(polygon, function () { + * total++; + * }); + */ +function segmentEach(geojson, callback) { + flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) { + var segmentIndex = 0; + + // Exclude null Geometries + if (!feature.geometry) return; + // (Multi)Point geometries do not contain segments therefore they are ignored during this operation. + var type = feature.geometry.type; + if (type === 'Point' || type === 'MultiPoint') return; + + // Generate 2-vertex line segments + var previousCoords; + var previousFeatureIndex = 0; + var previousMultiIndex = 0; + var prevGeomIndex = 0; + if (coordEach(feature, function (currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) { + // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false` + if (previousCoords === undefined || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) { + previousCoords = currentCoord; + previousFeatureIndex = featureIndex; + previousMultiIndex = multiPartIndexCoord; + prevGeomIndex = geometryIndex; + segmentIndex = 0; + return; + } + var currentSegment = helpers.lineString([previousCoords, currentCoord], feature.properties); + if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false; + segmentIndex++; + previousCoords = currentCoord; + }) === false) return false; + }); +} + +/** + * Callback for segmentReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @callback segmentReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {Feature} currentSegment The current Segment being processed. + * @param {number} featureIndex The current index of the Feature being processed. + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. + * @param {number} geometryIndex The current index of the Geometry being processed. + * @param {number} segmentIndex The current index of the Segment being processed. + */ + +/** + * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce() + * (Multi)Point geometries do not contain segments therefore they are ignored during this operation. + * + * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON + * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {void} + * @example + * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); + * + * // Iterate over GeoJSON by 2-vertex segments + * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { + * //= previousSegment + * //= currentSegment + * //= featureIndex + * //= multiFeatureIndex + * //= geometryIndex + * //= segmentInex + * return currentSegment + * }); + * + * // Calculate the total number of segments + * var initialValue = 0 + * var total = turf.segmentReduce(polygon, function (previousValue) { + * previousValue++; + * return previousValue; + * }, initialValue); + */ +function segmentReduce(geojson, callback, initialValue) { + var previousValue = initialValue; + var started = false; + segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { + if (started === false && initialValue === undefined) previousValue = currentSegment; + else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex); + started = true; + }); + return previousValue; +} + +/** + * Callback for lineEach + * + * @callback lineEachCallback + * @param {Feature} currentLine The current LineString|LinearRing being processed + * @param {number} featureIndex The current index of the Feature being processed + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed + * @param {number} geometryIndex The current index of the Geometry being processed + */ + +/** + * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries, + * similar to Array.forEach. + * + * @name lineEach + * @param {Geometry|Feature} geojson object + * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex) + * @example + * var multiLine = turf.multiLineString([ + * [[26, 37], [35, 45]], + * [[36, 53], [38, 50], [41, 55]] + * ]); + * + * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) { + * //=currentLine + * //=featureIndex + * //=multiFeatureIndex + * //=geometryIndex + * }); + */ +function lineEach(geojson, callback) { + // validation + if (!geojson) throw new Error('geojson is required'); + + flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) { + if (feature.geometry === null) return; + var type = feature.geometry.type; + var coords = feature.geometry.coordinates; + switch (type) { + case 'LineString': + if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false) return false; + break; + case 'Polygon': + for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) { + if (callback(helpers.lineString(coords[geometryIndex], feature.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false; + } + break; + } + }); +} + +/** + * Callback for lineReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @callback lineReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {Feature} currentLine The current LineString|LinearRing being processed. + * @param {number} featureIndex The current index of the Feature being processed + * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed + * @param {number} geometryIndex The current index of the Geometry being processed + */ + +/** + * Reduce features in any GeoJSON object, similar to Array.reduce(). + * + * @name lineReduce + * @param {Geometry|Feature} geojson object + * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var multiPoly = turf.multiPolygon([ + * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]), + * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]]) + * ]); + * + * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) { + * //=previousValue + * //=currentLine + * //=featureIndex + * //=multiFeatureIndex + * //=geometryIndex + * return currentLine + * }); + */ +function lineReduce(geojson, callback, initialValue) { + var previousValue = initialValue; + lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) { + if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine; + else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex); + }); + return previousValue; +} + +/** + * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes. + * + * Negative indexes are permitted. + * Point & MultiPoint will always return null. + * + * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry + * @param {Object} [options={}] Optional parameters + * @param {number} [options.featureIndex=0] Feature Index + * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index + * @param {number} [options.geometryIndex=0] Geometry Index + * @param {number} [options.segmentIndex=0] Segment Index + * @param {Object} [options.properties={}] Translate Properties to output LineString + * @param {BBox} [options.bbox={}] Translate BBox to output LineString + * @param {number|string} [options.id={}] Translate Id to output LineString + * @returns {Feature} 2-vertex GeoJSON Feature LineString + * @example + * var multiLine = turf.multiLineString([ + * [[10, 10], [50, 30], [30, 40]], + * [[-10, -10], [-50, -30], [-30, -40]] + * ]); + * + * // First Segment (defaults are 0) + * turf.findSegment(multiLine); + * // => Feature> + * + * // First Segment of 2nd Multi Feature + * turf.findSegment(multiLine, {multiFeatureIndex: 1}); + * // => Feature> + * + * // Last Segment of Last Multi Feature + * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1}); + * // => Feature> + */ +function findSegment(geojson, options) { + // Optional Parameters + options = options || {}; + if (!helpers.isObject(options)) throw new Error('options is invalid'); + var featureIndex = options.featureIndex || 0; + var multiFeatureIndex = options.multiFeatureIndex || 0; + var geometryIndex = options.geometryIndex || 0; + var segmentIndex = options.segmentIndex || 0; + + // Find FeatureIndex + var properties = options.properties; + var geometry; + + switch (geojson.type) { + case 'FeatureCollection': + if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; + properties = properties || geojson.features[featureIndex].properties; + geometry = geojson.features[featureIndex].geometry; + break; + case 'Feature': + properties = properties || geojson.properties; + geometry = geojson.geometry; + break; + case 'Point': + case 'MultiPoint': + return null; + case 'LineString': + case 'Polygon': + case 'MultiLineString': + case 'MultiPolygon': + geometry = geojson; + break; + default: + throw new Error('geojson is invalid'); + } + + // Find SegmentIndex + if (geometry === null) return null; + var coords = geometry.coordinates; + switch (geometry.type) { + case 'Point': + case 'MultiPoint': + return null; + case 'LineString': + if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1; + return helpers.lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options); + case 'Polygon': + if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; + if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1; + return helpers.lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options); + case 'MultiLineString': + if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; + if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1; + return helpers.lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options); + case 'MultiPolygon': + if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; + if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; + if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1; + return helpers.lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options); + } + throw new Error('geojson is invalid'); +} + +/** + * Finds a particular Point from a GeoJSON using `@turf/meta` indexes. + * + * Negative indexes are permitted. + * + * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry + * @param {Object} [options={}] Optional parameters + * @param {number} [options.featureIndex=0] Feature Index + * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index + * @param {number} [options.geometryIndex=0] Geometry Index + * @param {number} [options.coordIndex=0] Coord Index + * @param {Object} [options.properties={}] Translate Properties to output Point + * @param {BBox} [options.bbox={}] Translate BBox to output Point + * @param {number|string} [options.id={}] Translate Id to output Point + * @returns {Feature} 2-vertex GeoJSON Feature Point + * @example + * var multiLine = turf.multiLineString([ + * [[10, 10], [50, 30], [30, 40]], + * [[-10, -10], [-50, -30], [-30, -40]] + * ]); + * + * // First Segment (defaults are 0) + * turf.findPoint(multiLine); + * // => Feature> + * + * // First Segment of the 2nd Multi-Feature + * turf.findPoint(multiLine, {multiFeatureIndex: 1}); + * // => Feature> + * + * // Last Segment of last Multi-Feature + * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1}); + * // => Feature> + */ +function findPoint(geojson, options) { + // Optional Parameters + options = options || {}; + if (!helpers.isObject(options)) throw new Error('options is invalid'); + var featureIndex = options.featureIndex || 0; + var multiFeatureIndex = options.multiFeatureIndex || 0; + var geometryIndex = options.geometryIndex || 0; + var coordIndex = options.coordIndex || 0; + + // Find FeatureIndex + var properties = options.properties; + var geometry; + + switch (geojson.type) { + case 'FeatureCollection': + if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; + properties = properties || geojson.features[featureIndex].properties; + geometry = geojson.features[featureIndex].geometry; + break; + case 'Feature': + properties = properties || geojson.properties; + geometry = geojson.geometry; + break; + case 'Point': + case 'MultiPoint': + return null; + case 'LineString': + case 'Polygon': + case 'MultiLineString': + case 'MultiPolygon': + geometry = geojson; + break; + default: + throw new Error('geojson is invalid'); + } + + // Find Coord Index + if (geometry === null) return null; + var coords = geometry.coordinates; + switch (geometry.type) { + case 'Point': + return helpers.point(coords, properties, options); + case 'MultiPoint': + if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; + return helpers.point(coords[multiFeatureIndex], properties, options); + case 'LineString': + if (coordIndex < 0) coordIndex = coords.length + coordIndex; + return helpers.point(coords[coordIndex], properties, options); + case 'Polygon': + if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; + if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex; + return helpers.point(coords[geometryIndex][coordIndex], properties, options); + case 'MultiLineString': + if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; + if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex; + return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options); + case 'MultiPolygon': + if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; + if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; + if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex; + return helpers.point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options); + } + throw new Error('geojson is invalid'); +} + +exports.coordEach = coordEach; +exports.coordReduce = coordReduce; +exports.propEach = propEach; +exports.propReduce = propReduce; +exports.featureEach = featureEach; +exports.featureReduce = featureReduce; +exports.coordAll = coordAll; +exports.geomEach = geomEach; +exports.geomReduce = geomReduce; +exports.flattenEach = flattenEach; +exports.flattenReduce = flattenReduce; +exports.segmentEach = segmentEach; +exports.segmentReduce = segmentReduce; +exports.lineEach = lineEach; +exports.lineReduce = lineReduce; +exports.findSegment = findSegment; +exports.findPoint = findPoint; + +},{"@turf/helpers":123}],123:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * @module helpers + */ +/** + * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth. + * + * @memberof helpers + * @type {number} + */ +exports.earthRadius = 6371008.8; +/** + * Unit of measurement factors using a spherical (non-ellipsoid) earth radius. + * + * @memberof helpers + * @type {Object} + */ +exports.factors = { + centimeters: exports.earthRadius * 100, + centimetres: exports.earthRadius * 100, + degrees: exports.earthRadius / 111325, + feet: exports.earthRadius * 3.28084, + inches: exports.earthRadius * 39.370, + kilometers: exports.earthRadius / 1000, + kilometres: exports.earthRadius / 1000, + meters: exports.earthRadius, + metres: exports.earthRadius, + miles: exports.earthRadius / 1609.344, + millimeters: exports.earthRadius * 1000, + millimetres: exports.earthRadius * 1000, + nauticalmiles: exports.earthRadius / 1852, + radians: 1, + yards: exports.earthRadius / 1.0936, +}; +/** + * Units of measurement factors based on 1 meter. + * + * @memberof helpers + * @type {Object} + */ +exports.unitsFactors = { + centimeters: 100, + centimetres: 100, + degrees: 1 / 111325, + feet: 3.28084, + inches: 39.370, + kilometers: 1 / 1000, + kilometres: 1 / 1000, + meters: 1, + metres: 1, + miles: 1 / 1609.344, + millimeters: 1000, + millimetres: 1000, + nauticalmiles: 1 / 1852, + radians: 1 / exports.earthRadius, + yards: 1 / 1.0936, +}; +/** + * Area of measurement factors based on 1 square meter. + * + * @memberof helpers + * @type {Object} + */ +exports.areaFactors = { + acres: 0.000247105, + centimeters: 10000, + centimetres: 10000, + feet: 10.763910417, + inches: 1550.003100006, + kilometers: 0.000001, + kilometres: 0.000001, + meters: 1, + metres: 1, + miles: 3.86e-7, + millimeters: 1000000, + millimetres: 1000000, + yards: 1.195990046, +}; +/** + * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}. + * + * @name feature + * @param {Geometry} geometry input geometry + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} a GeoJSON Feature + * @example + * var geometry = { + * "type": "Point", + * "coordinates": [110, 50] + * }; + * + * var feature = turf.feature(geometry); + * + * //=feature + */ +function feature(geom, properties, options) { + if (options === void 0) { options = {}; } + var feat = { type: "Feature" }; + if (options.id === 0 || options.id) { + feat.id = options.id; + } + if (options.bbox) { + feat.bbox = options.bbox; + } + feat.properties = properties || {}; + feat.geometry = geom; + return feat; +} +exports.feature = feature; +/** + * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates. + * For GeometryCollection type use `helpers.geometryCollection` + * + * @name geometry + * @param {string} type Geometry Type + * @param {Array} coordinates Coordinates + * @param {Object} [options={}] Optional Parameters + * @returns {Geometry} a GeoJSON Geometry + * @example + * var type = "Point"; + * var coordinates = [110, 50]; + * var geometry = turf.geometry(type, coordinates); + * // => geometry + */ +function geometry(type, coordinates, options) { + if (options === void 0) { options = {}; } + switch (type) { + case "Point": return point(coordinates).geometry; + case "LineString": return lineString(coordinates).geometry; + case "Polygon": return polygon(coordinates).geometry; + case "MultiPoint": return multiPoint(coordinates).geometry; + case "MultiLineString": return multiLineString(coordinates).geometry; + case "MultiPolygon": return multiPolygon(coordinates).geometry; + default: throw new Error(type + " is invalid"); + } +} +exports.geometry = geometry; +/** + * Creates a {@link Point} {@link Feature} from a Position. + * + * @name point + * @param {Array} coordinates longitude, latitude position (each in decimal degrees) + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} a Point feature + * @example + * var point = turf.point([-75.343, 39.984]); + * + * //=point + */ +function point(coordinates, properties, options) { + if (options === void 0) { options = {}; } + var geom = { + type: "Point", + coordinates: coordinates, + }; + return feature(geom, properties, options); +} +exports.point = point; +/** + * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates. + * + * @name points + * @param {Array>} coordinates an array of Points + * @param {Object} [properties={}] Translate these properties to each Feature + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] + * associated with the FeatureCollection + * @param {string|number} [options.id] Identifier associated with the FeatureCollection + * @returns {FeatureCollection} Point Feature + * @example + * var points = turf.points([ + * [-75, 39], + * [-80, 45], + * [-78, 50] + * ]); + * + * //=points + */ +function points(coordinates, properties, options) { + if (options === void 0) { options = {}; } + return featureCollection(coordinates.map(function (coords) { + return point(coords, properties); + }), options); +} +exports.points = points; +/** + * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings. + * + * @name polygon + * @param {Array>>} coordinates an array of LinearRings + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} Polygon Feature + * @example + * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' }); + * + * //=polygon + */ +function polygon(coordinates, properties, options) { + if (options === void 0) { options = {}; } + for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) { + var ring = coordinates_1[_i]; + if (ring.length < 4) { + throw new Error("Each LinearRing of a Polygon must have 4 or more Positions."); + } + for (var j = 0; j < ring[ring.length - 1].length; j++) { + // Check if first point of Polygon contains two numbers + if (ring[ring.length - 1][j] !== ring[0][j]) { + throw new Error("First and last Position are not equivalent."); + } + } + } + var geom = { + type: "Polygon", + coordinates: coordinates, + }; + return feature(geom, properties, options); +} +exports.polygon = polygon; +/** + * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates. + * + * @name polygons + * @param {Array>>>} coordinates an array of Polygon coordinates + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the FeatureCollection + * @returns {FeatureCollection} Polygon FeatureCollection + * @example + * var polygons = turf.polygons([ + * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], + * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]], + * ]); + * + * //=polygons + */ +function polygons(coordinates, properties, options) { + if (options === void 0) { options = {}; } + return featureCollection(coordinates.map(function (coords) { + return polygon(coords, properties); + }), options); +} +exports.polygons = polygons; +/** + * Creates a {@link LineString} {@link Feature} from an Array of Positions. + * + * @name lineString + * @param {Array>} coordinates an array of Positions + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} LineString Feature + * @example + * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'}); + * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'}); + * + * //=linestring1 + * //=linestring2 + */ +function lineString(coordinates, properties, options) { + if (options === void 0) { options = {}; } + if (coordinates.length < 2) { + throw new Error("coordinates must be an array of two or more positions"); + } + var geom = { + type: "LineString", + coordinates: coordinates, + }; + return feature(geom, properties, options); +} +exports.lineString = lineString; +/** + * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates. + * + * @name lineStrings + * @param {Array>>} coordinates an array of LinearRings + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] + * associated with the FeatureCollection + * @param {string|number} [options.id] Identifier associated with the FeatureCollection + * @returns {FeatureCollection} LineString FeatureCollection + * @example + * var linestrings = turf.lineStrings([ + * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]], + * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]] + * ]); + * + * //=linestrings + */ +function lineStrings(coordinates, properties, options) { + if (options === void 0) { options = {}; } + return featureCollection(coordinates.map(function (coords) { + return lineString(coords, properties); + }), options); +} +exports.lineStrings = lineStrings; +/** + * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}. + * + * @name featureCollection + * @param {Feature[]} features input features + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {FeatureCollection} FeatureCollection of Features + * @example + * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'}); + * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'}); + * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'}); + * + * var collection = turf.featureCollection([ + * locationA, + * locationB, + * locationC + * ]); + * + * //=collection + */ +function featureCollection(features, options) { + if (options === void 0) { options = {}; } + var fc = { type: "FeatureCollection" }; + if (options.id) { + fc.id = options.id; + } + if (options.bbox) { + fc.bbox = options.bbox; + } + fc.features = features; + return fc; +} +exports.featureCollection = featureCollection; +/** + * Creates a {@link Feature} based on a + * coordinate array. Properties can be added optionally. + * + * @name multiLineString + * @param {Array>>} coordinates an array of LineStrings + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} a MultiLineString feature + * @throws {Error} if no coordinates are passed + * @example + * var multiLine = turf.multiLineString([[[0,0],[10,10]]]); + * + * //=multiLine + */ +function multiLineString(coordinates, properties, options) { + if (options === void 0) { options = {}; } + var geom = { + type: "MultiLineString", + coordinates: coordinates, + }; + return feature(geom, properties, options); +} +exports.multiLineString = multiLineString; +/** + * Creates a {@link Feature} based on a + * coordinate array. Properties can be added optionally. + * + * @name multiPoint + * @param {Array>} coordinates an array of Positions + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} a MultiPoint feature + * @throws {Error} if no coordinates are passed + * @example + * var multiPt = turf.multiPoint([[0,0],[10,10]]); + * + * //=multiPt + */ +function multiPoint(coordinates, properties, options) { + if (options === void 0) { options = {}; } + var geom = { + type: "MultiPoint", + coordinates: coordinates, + }; + return feature(geom, properties, options); +} +exports.multiPoint = multiPoint; +/** + * Creates a {@link Feature} based on a + * coordinate array. Properties can be added optionally. + * + * @name multiPolygon + * @param {Array>>>} coordinates an array of Polygons + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} a multipolygon feature + * @throws {Error} if no coordinates are passed + * @example + * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]); + * + * //=multiPoly + * + */ +function multiPolygon(coordinates, properties, options) { + if (options === void 0) { options = {}; } + var geom = { + type: "MultiPolygon", + coordinates: coordinates, + }; + return feature(geom, properties, options); +} +exports.multiPolygon = multiPolygon; +/** + * Creates a {@link Feature} based on a + * coordinate array. Properties can be added optionally. + * + * @name geometryCollection + * @param {Array} geometries an array of GeoJSON Geometries + * @param {Object} [properties={}] an Object of key-value pairs to add as properties + * @param {Object} [options={}] Optional Parameters + * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature + * @param {string|number} [options.id] Identifier associated with the Feature + * @returns {Feature} a GeoJSON GeometryCollection Feature + * @example + * var pt = turf.geometry("Point", [100, 0]); + * var line = turf.geometry("LineString", [[101, 0], [102, 1]]); + * var collection = turf.geometryCollection([pt, line]); + * + * // => collection + */ +function geometryCollection(geometries, properties, options) { + if (options === void 0) { options = {}; } + var geom = { + type: "GeometryCollection", + geometries: geometries, + }; + return feature(geom, properties, options); +} +exports.geometryCollection = geometryCollection; +/** + * Round number to precision + * + * @param {number} num Number + * @param {number} [precision=0] Precision + * @returns {number} rounded number + * @example + * turf.round(120.4321) + * //=120 + * + * turf.round(120.4321, 2) + * //=120.43 + */ +function round(num, precision) { + if (precision === void 0) { precision = 0; } + if (precision && !(precision >= 0)) { + throw new Error("precision must be a positive number"); + } + var multiplier = Math.pow(10, precision || 0); + return Math.round(num * multiplier) / multiplier; +} +exports.round = round; +/** + * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit. + * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet + * + * @name radiansToLength + * @param {number} radians in radians across the sphere + * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres, + * meters, kilometres, kilometers. + * @returns {number} distance + */ +function radiansToLength(radians, units) { + if (units === void 0) { units = "kilometers"; } + var factor = exports.factors[units]; + if (!factor) { + throw new Error(units + " units is invalid"); + } + return radians * factor; +} +exports.radiansToLength = radiansToLength; +/** + * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians + * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet + * + * @name lengthToRadians + * @param {number} distance in real units + * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres, + * meters, kilometres, kilometers. + * @returns {number} radians + */ +function lengthToRadians(distance, units) { + if (units === void 0) { units = "kilometers"; } + var factor = exports.factors[units]; + if (!factor) { + throw new Error(units + " units is invalid"); + } + return distance / factor; +} +exports.lengthToRadians = lengthToRadians; +/** + * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees + * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet + * + * @name lengthToDegrees + * @param {number} distance in real units + * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres, + * meters, kilometres, kilometers. + * @returns {number} degrees + */ +function lengthToDegrees(distance, units) { + return radiansToDegrees(lengthToRadians(distance, units)); +} +exports.lengthToDegrees = lengthToDegrees; +/** + * Converts any bearing angle from the north line direction (positive clockwise) + * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line + * + * @name bearingToAzimuth + * @param {number} bearing angle, between -180 and +180 degrees + * @returns {number} angle between 0 and 360 degrees + */ +function bearingToAzimuth(bearing) { + var angle = bearing % 360; + if (angle < 0) { + angle += 360; + } + return angle; +} +exports.bearingToAzimuth = bearingToAzimuth; +/** + * Converts an angle in radians to degrees + * + * @name radiansToDegrees + * @param {number} radians angle in radians + * @returns {number} degrees between 0 and 360 degrees + */ +function radiansToDegrees(radians) { + var degrees = radians % (2 * Math.PI); + return degrees * 180 / Math.PI; +} +exports.radiansToDegrees = radiansToDegrees; +/** + * Converts an angle in degrees to radians + * + * @name degreesToRadians + * @param {number} degrees angle between 0 and 360 degrees + * @returns {number} angle in radians + */ +function degreesToRadians(degrees) { + var radians = degrees % 360; + return radians * Math.PI / 180; +} +exports.degreesToRadians = degreesToRadians; +/** + * Converts a length to the requested unit. + * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet + * + * @param {number} length to be converted + * @param {Units} [originalUnit="kilometers"] of the length + * @param {Units} [finalUnit="kilometers"] returned unit + * @returns {number} the converted length + */ +function convertLength(length, originalUnit, finalUnit) { + if (originalUnit === void 0) { originalUnit = "kilometers"; } + if (finalUnit === void 0) { finalUnit = "kilometers"; } + if (!(length >= 0)) { + throw new Error("length must be a positive number"); + } + return radiansToLength(lengthToRadians(length, originalUnit), finalUnit); +} +exports.convertLength = convertLength; +/** + * Converts a area to the requested unit. + * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches + * @param {number} area to be converted + * @param {Units} [originalUnit="meters"] of the distance + * @param {Units} [finalUnit="kilometers"] returned unit + * @returns {number} the converted distance + */ +function convertArea(area, originalUnit, finalUnit) { + if (originalUnit === void 0) { originalUnit = "meters"; } + if (finalUnit === void 0) { finalUnit = "kilometers"; } + if (!(area >= 0)) { + throw new Error("area must be a positive number"); + } + var startFactor = exports.areaFactors[originalUnit]; + if (!startFactor) { + throw new Error("invalid original units"); + } + var finalFactor = exports.areaFactors[finalUnit]; + if (!finalFactor) { + throw new Error("invalid final units"); + } + return (area / startFactor) * finalFactor; +} +exports.convertArea = convertArea; +/** + * isNumber + * + * @param {*} num Number to validate + * @returns {boolean} true/false + * @example + * turf.isNumber(123) + * //=true + * turf.isNumber('foo') + * //=false + */ +function isNumber(num) { + return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num); +} +exports.isNumber = isNumber; +/** + * isObject + * + * @param {*} input variable to validate + * @returns {boolean} true/false + * @example + * turf.isObject({elevation: 10}) + * //=true + * turf.isObject('foo') + * //=false + */ +function isObject(input) { + return (!!input) && (input.constructor === Object); +} +exports.isObject = isObject; +/** + * Validate BBox + * + * @private + * @param {Array} bbox BBox to validate + * @returns {void} + * @throws Error if BBox is not valid + * @example + * validateBBox([-180, -40, 110, 50]) + * //=OK + * validateBBox([-180, -40]) + * //=Error + * validateBBox('Foo') + * //=Error + * validateBBox(5) + * //=Error + * validateBBox(null) + * //=Error + * validateBBox(undefined) + * //=Error + */ +function validateBBox(bbox) { + if (!bbox) { + throw new Error("bbox is required"); + } + if (!Array.isArray(bbox)) { + throw new Error("bbox must be an Array"); + } + if (bbox.length !== 4 && bbox.length !== 6) { + throw new Error("bbox must be an Array of 4 or 6 numbers"); + } + bbox.forEach(function (num) { + if (!isNumber(num)) { + throw new Error("bbox must only contain numbers"); + } + }); +} +exports.validateBBox = validateBBox; +/** + * Validate Id + * + * @private + * @param {string|number} id Id to validate + * @returns {void} + * @throws Error if Id is not valid + * @example + * validateId([-180, -40, 110, 50]) + * //=Error + * validateId([-180, -40]) + * //=Error + * validateId('Foo') + * //=OK + * validateId(5) + * //=OK + * validateId(null) + * //=Error + * validateId(undefined) + * //=Error + */ +function validateId(id) { + if (!id) { + throw new Error("id is required"); + } + if (["string", "number"].indexOf(typeof id) === -1) { + throw new Error("id must be a number or a string"); + } +} +exports.validateId = validateId; +// Deprecated methods +function radians2degrees() { + throw new Error("method has been renamed to `radiansToDegrees`"); +} +exports.radians2degrees = radians2degrees; +function degrees2radians() { + throw new Error("method has been renamed to `degreesToRadians`"); +} +exports.degrees2radians = degrees2radians; +function distanceToDegrees() { + throw new Error("method has been renamed to `lengthToDegrees`"); +} +exports.distanceToDegrees = distanceToDegrees; +function distanceToRadians() { + throw new Error("method has been renamed to `lengthToRadians`"); +} +exports.distanceToRadians = distanceToRadians; +function radiansToDistance() { + throw new Error("method has been renamed to `radiansToLength`"); +} +exports.radiansToDistance = radiansToDistance; +function bearingToAngle() { + throw new Error("method has been renamed to `bearingToAzimuth`"); +} +exports.bearingToAngle = bearingToAngle; +function convertDistance() { + throw new Error("method has been renamed to `convertLength`"); +} +exports.convertDistance = convertDistance; + +},{}],124:[function(require,module,exports){ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var helpers_1 = require("@turf/helpers"); +var invariant_1 = require("@turf/invariant"); +var martinez = __importStar(require("martinez-polygon-clipping")); +/** + * Takes two {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and + * finds their polygonal intersection. If they don't intersect, returns null. + * + * @name intersect + * @param {Feature} poly1 the first polygon or multipolygon + * @param {Feature} poly2 the second polygon or multipolygon + * @param {Object} [options={}] Optional Parameters + * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature + * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or + * {@link MultiPolygon}). If they do not share any area, returns `null`. + * @example + * var poly1 = turf.polygon([[ + * [-122.801742, 45.48565], + * [-122.801742, 45.60491], + * [-122.584762, 45.60491], + * [-122.584762, 45.48565], + * [-122.801742, 45.48565] + * ]]); + * + * var poly2 = turf.polygon([[ + * [-122.520217, 45.535693], + * [-122.64038, 45.553967], + * [-122.720031, 45.526554], + * [-122.669906, 45.507309], + * [-122.723464, 45.446643], + * [-122.532577, 45.408574], + * [-122.487258, 45.477466], + * [-122.520217, 45.535693] + * ]]); + * + * var intersection = turf.intersect(poly1, poly2); + * + * //addToMap + * var addToMap = [poly1, poly2, intersection]; + */ +function intersect(poly1, poly2, options) { + if (options === void 0) { options = {}; } + var geom1 = invariant_1.getGeom(poly1); + var geom2 = invariant_1.getGeom(poly2); + if (geom1.type === "Polygon" && geom2.type === "Polygon") { + var intersection = martinez.intersection(geom1.coordinates, geom2.coordinates); + if (intersection === null || intersection.length === 0) { + return null; + } + if (intersection.length === 1) { + var start = intersection[0][0][0]; + var end = intersection[0][0][intersection[0][0].length - 1]; + if (start[0] === end[0] && start[1] === end[1]) { + return helpers_1.polygon(intersection[0], options.properties); + } + return null; + } + return helpers_1.multiPolygon(intersection, options.properties); + } + else if (geom1.type === "MultiPolygon") { + var resultCoords = []; + // iterate through the polygon and run intersect with each part, adding to the resultCoords. + for (var _i = 0, _a = geom1.coordinates; _i < _a.length; _i++) { + var coords = _a[_i]; + var subGeom = invariant_1.getGeom(helpers_1.polygon(coords)); + var subIntersection = intersect(subGeom, geom2); + if (subIntersection) { + var subIntGeom = invariant_1.getGeom(subIntersection); + if (subIntGeom.type === "Polygon") { + resultCoords.push(subIntGeom.coordinates); + } + else if (subIntGeom.type === "MultiPolygon") { + resultCoords = resultCoords.concat(subIntGeom.coordinates); + } + else { + throw new Error("intersection is invalid"); + } + } + } + // Make a polygon with the result + if (resultCoords.length === 0) { + return null; + } + if (resultCoords.length === 1) { + return helpers_1.polygon(resultCoords[0], options.properties); + } + else { + return helpers_1.multiPolygon(resultCoords, options.properties); + } + } + else if (geom2.type === "MultiPolygon") { + // geom1 is a polygon and geom2 a multiPolygon, + // put the multiPolygon first and fallback to the previous case. + return intersect(geom2, geom1); + } + else { + // handle invalid geometry types + throw new Error("poly1 and poly2 must be either polygons or multiPolygons"); + } +} +exports.default = intersect; + +},{"@turf/helpers":123,"@turf/invariant":125,"martinez-polygon-clipping":265}],125:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var helpers_1 = require("@turf/helpers"); +/** + * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate. + * + * @name getCoord + * @param {Array|Geometry|Feature} coord GeoJSON Point or an Array of numbers + * @returns {Array} coordinates + * @example + * var pt = turf.point([10, 10]); + * + * var coord = turf.getCoord(pt); + * //= [10, 10] + */ +function getCoord(coord) { + if (!coord) { + throw new Error("coord is required"); + } + if (!Array.isArray(coord)) { + if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") { + return coord.geometry.coordinates; + } + if (coord.type === "Point") { + return coord.coordinates; + } + } + if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) { + return coord; + } + throw new Error("coord must be GeoJSON Point or an Array of numbers"); +} +exports.getCoord = getCoord; +/** + * Unwrap coordinates from a Feature, Geometry Object or an Array + * + * @name getCoords + * @param {Array|Geometry|Feature} coords Feature, Geometry Object or an Array + * @returns {Array} coordinates + * @example + * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]); + * + * var coords = turf.getCoords(poly); + * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]] + */ +function getCoords(coords) { + if (Array.isArray(coords)) { + return coords; + } + // Feature + if (coords.type === "Feature") { + if (coords.geometry !== null) { + return coords.geometry.coordinates; + } + } + else { + // Geometry + if (coords.coordinates) { + return coords.coordinates; + } + } + throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array"); +} +exports.getCoords = getCoords; +/** + * Checks if coordinates contains a number + * + * @name containsNumber + * @param {Array} coordinates GeoJSON Coordinates + * @returns {boolean} true if Array contains a number + */ +function containsNumber(coordinates) { + if (coordinates.length > 1 && helpers_1.isNumber(coordinates[0]) && helpers_1.isNumber(coordinates[1])) { + return true; + } + if (Array.isArray(coordinates[0]) && coordinates[0].length) { + return containsNumber(coordinates[0]); + } + throw new Error("coordinates must only contain numbers"); +} +exports.containsNumber = containsNumber; +/** + * Enforce expectations about types of GeoJSON objects for Turf. + * + * @name geojsonType + * @param {GeoJSON} value any GeoJSON object + * @param {string} type expected GeoJSON type + * @param {string} name name of calling function + * @throws {Error} if value is not the expected type. + */ +function geojsonType(value, type, name) { + if (!type || !name) { + throw new Error("type and name required"); + } + if (!value || value.type !== type) { + throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type); + } +} +exports.geojsonType = geojsonType; +/** + * Enforce expectations about types of {@link Feature} inputs for Turf. + * Internally this uses {@link geojsonType} to judge geometry types. + * + * @name featureOf + * @param {Feature} feature a feature with an expected geometry type + * @param {string} type expected GeoJSON type + * @param {string} name name of calling function + * @throws {Error} error if value is not the expected type. + */ +function featureOf(feature, type, name) { + if (!feature) { + throw new Error("No feature passed"); + } + if (!name) { + throw new Error(".featureOf() requires a name"); + } + if (!feature || feature.type !== "Feature" || !feature.geometry) { + throw new Error("Invalid input to " + name + ", Feature with geometry required"); + } + if (!feature.geometry || feature.geometry.type !== type) { + throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type); + } +} +exports.featureOf = featureOf; +/** + * Enforce expectations about types of {@link FeatureCollection} inputs for Turf. + * Internally this uses {@link geojsonType} to judge geometry types. + * + * @name collectionOf + * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged + * @param {string} type expected GeoJSON type + * @param {string} name name of calling function + * @throws {Error} if value is not the expected type. + */ +function collectionOf(featureCollection, type, name) { + if (!featureCollection) { + throw new Error("No featureCollection passed"); + } + if (!name) { + throw new Error(".collectionOf() requires a name"); + } + if (!featureCollection || featureCollection.type !== "FeatureCollection") { + throw new Error("Invalid input to " + name + ", FeatureCollection required"); + } + for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) { + var feature = _a[_i]; + if (!feature || feature.type !== "Feature" || !feature.geometry) { + throw new Error("Invalid input to " + name + ", Feature with geometry required"); + } + if (!feature.geometry || feature.geometry.type !== type) { + throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type); + } + } +} +exports.collectionOf = collectionOf; +/** + * Get Geometry from Feature or Geometry Object + * + * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object + * @returns {Geometry|null} GeoJSON Geometry Object + * @throws {Error} if geojson is not a Feature or Geometry Object + * @example + * var point = { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [110, 40] + * } + * } + * var geom = turf.getGeom(point) + * //={"type": "Point", "coordinates": [110, 40]} + */ +function getGeom(geojson) { + if (geojson.type === "Feature") { + return geojson.geometry; + } + return geojson; +} +exports.getGeom = getGeom; +/** + * Get GeoJSON object's type, Geometry type is prioritize. + * + * @param {GeoJSON} geojson GeoJSON object + * @param {string} [name="geojson"] name of the variable to display in error message + * @returns {string} GeoJSON type + * @example + * var point = { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [110, 40] + * } + * } + * var geom = turf.getType(point) + * //="Point" + */ +function getType(geojson, name) { + if (geojson.type === "FeatureCollection") { + return "FeatureCollection"; + } + if (geojson.type === "GeometryCollection") { + return "GeometryCollection"; + } + if (geojson.type === "Feature" && geojson.geometry !== null) { + return geojson.geometry.type; + } + return geojson.type; +} +exports.getType = getType; + +},{"@turf/helpers":123}],126:[function(require,module,exports){ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +} +Object.defineProperty(exports, "__esModule", { value: true }); +var helpers_1 = require("@turf/helpers"); +var invariant_1 = require("@turf/invariant"); +var line_segment_1 = __importDefault(require("@turf/line-segment")); +var meta_1 = require("@turf/meta"); +var geojson_rbush_1 = __importDefault(require("geojson-rbush")); +/** + * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s). + * + * @name lineIntersect + * @param {GeoJSON} line1 any LineString or Polygon + * @param {GeoJSON} line2 any LineString or Polygon + * @returns {FeatureCollection} point(s) that intersect both + * @example + * var line1 = turf.lineString([[126, -11], [129, -21]]); + * var line2 = turf.lineString([[123, -18], [131, -14]]); + * var intersects = turf.lineIntersect(line1, line2); + * + * //addToMap + * var addToMap = [line1, line2, intersects] + */ +function lineIntersect(line1, line2) { + var unique = {}; + var results = []; + // First, normalize geometries to features + // Then, handle simple 2-vertex segments + if (line1.type === "LineString") { + line1 = helpers_1.feature(line1); + } + if (line2.type === "LineString") { + line2 = helpers_1.feature(line2); + } + if (line1.type === "Feature" && + line2.type === "Feature" && + line1.geometry !== null && + line2.geometry !== null && + line1.geometry.type === "LineString" && + line2.geometry.type === "LineString" && + line1.geometry.coordinates.length === 2 && + line2.geometry.coordinates.length === 2) { + var intersect = intersects(line1, line2); + if (intersect) { + results.push(intersect); + } + return helpers_1.featureCollection(results); + } + // Handles complex GeoJSON Geometries + var tree = geojson_rbush_1.default(); + tree.load(line_segment_1.default(line2)); + meta_1.featureEach(line_segment_1.default(line1), function (segment) { + meta_1.featureEach(tree.search(segment), function (match) { + var intersect = intersects(segment, match); + if (intersect) { + // prevent duplicate points https://github.com/Turfjs/turf/issues/688 + var key = invariant_1.getCoords(intersect).join(","); + if (!unique[key]) { + unique[key] = true; + results.push(intersect); + } + } + }); + }); + return helpers_1.featureCollection(results); +} +/** + * Find a point that intersects LineStrings with two coordinates each + * + * @private + * @param {Feature} line1 GeoJSON LineString (Must only contain 2 coordinates) + * @param {Feature} line2 GeoJSON LineString (Must only contain 2 coordinates) + * @returns {Feature} intersecting GeoJSON Point + */ +function intersects(line1, line2) { + var coords1 = invariant_1.getCoords(line1); + var coords2 = invariant_1.getCoords(line2); + if (coords1.length !== 2) { + throw new Error(" line1 must only contain 2 coordinates"); + } + if (coords2.length !== 2) { + throw new Error(" line2 must only contain 2 coordinates"); + } + var x1 = coords1[0][0]; + var y1 = coords1[0][1]; + var x2 = coords1[1][0]; + var y2 = coords1[1][1]; + var x3 = coords2[0][0]; + var y3 = coords2[0][1]; + var x4 = coords2[1][0]; + var y4 = coords2[1][1]; + var denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1)); + var numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3)); + var numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3)); + if (denom === 0) { + if (numeA === 0 && numeB === 0) { + return null; + } + return null; + } + var uA = numeA / denom; + var uB = numeB / denom; + if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) { + var x = x1 + (uA * (x2 - x1)); + var y = y1 + (uA * (y2 - y1)); + return helpers_1.point([x, y]); + } + return null; +} +exports.default = lineIntersect; + +},{"@turf/helpers":123,"@turf/invariant":125,"@turf/line-segment":128,"@turf/meta":127,"geojson-rbush":224}],127:[function(require,module,exports){ +arguments[4][122][0].apply(exports,arguments) +},{"@turf/helpers":123,"dup":122}],128:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var helpers_1 = require("@turf/helpers"); +var invariant_1 = require("@turf/invariant"); +var meta_1 = require("@turf/meta"); +/** + * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a + * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}. + * + * @name lineSegment + * @param {GeoJSON} geojson GeoJSON Polygon or LineString + * @returns {FeatureCollection} 2-vertex line segments + * @example + * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); + * var segments = turf.lineSegment(polygon); + * + * //addToMap + * var addToMap = [polygon, segments] + */ +function lineSegment(geojson) { + if (!geojson) { + throw new Error("geojson is required"); + } + var results = []; + meta_1.flattenEach(geojson, function (feature) { + lineSegmentFeature(feature, results); + }); + return helpers_1.featureCollection(results); +} +/** + * Line Segment + * + * @private + * @param {Feature} geojson Line or polygon feature + * @param {Array} results push to results + * @returns {void} + */ +function lineSegmentFeature(geojson, results) { + var coords = []; + var geometry = geojson.geometry; + if (geometry !== null) { + switch (geometry.type) { + case "Polygon": + coords = invariant_1.getCoords(geometry); + break; + case "LineString": + coords = [invariant_1.getCoords(geometry)]; + } + coords.forEach(function (coord) { + var segments = createSegments(coord, geojson.properties); + segments.forEach(function (segment) { + segment.id = results.length; + results.push(segment); + }); + }); + } +} +/** + * Create Segments from LineString coordinates + * + * @private + * @param {Array>} coords LineString coordinates + * @param {*} properties GeoJSON properties + * @returns {Array>} line segments + */ +function createSegments(coords, properties) { + var segments = []; + coords.reduce(function (previousCoords, currentCoords) { + var segment = helpers_1.lineString([previousCoords, currentCoords], properties); + segment.bbox = bbox(previousCoords, currentCoords); + segments.push(segment); + return currentCoords; + }); + return segments; +} +/** + * Create BBox between two coordinates (faster than @turf/bbox) + * + * @private + * @param {Array} coords1 Point coordinate + * @param {Array} coords2 Point coordinate + * @returns {BBox} [west, south, east, north] + */ +function bbox(coords1, coords2) { + var x1 = coords1[0]; + var y1 = coords1[1]; + var x2 = coords2[0]; + var y2 = coords2[1]; + var west = (x1 < x2) ? x1 : x2; + var south = (y1 < y2) ? y1 : y2; + var east = (x1 > x2) ? x1 : x2; + var north = (y1 > y2) ? y1 : y2; + return [west, south, east, north]; +} +exports.default = lineSegment; + +},{"@turf/helpers":123,"@turf/invariant":125,"@turf/meta":129}],129:[function(require,module,exports){ +arguments[4][122][0].apply(exports,arguments) +},{"@turf/helpers":123,"dup":122}],130:[function(require,module,exports){ +/** + * Callback for coordEach + * + * @private + * @callback coordEachCallback + * @param {[number, number]} currentCoords The current coordinates being processed. + * @param {number} currentIndex The index of the current element being processed in the + * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + */ + +/** + * Iterate over coordinates in any GeoJSON object, similar to Array.forEach() + * + * @name coordEach + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (currentCoords, currentIndex) + * @param {boolean} [excludeWrapCoord=false] whether or not to include + * the final coordinate of LinearRings that wraps the ring in its iteration. + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.coordEach(features, function (currentCoords, currentIndex) { + * //=currentCoords + * //=currentIndex + * }); + */ +function coordEach(layer, callback, excludeWrapCoord) { + var i, j, k, g, l, geometry, stopG, coords, + geometryMaybeCollection, + wrapShrink = 0, + currentIndex = 0, + isGeometryCollection, + isFeatureCollection = layer.type === 'FeatureCollection', + isFeature = layer.type === 'Feature', + stop = isFeatureCollection ? layer.features.length : 1; + + // This logic may look a little weird. The reason why it is that way + // is because it's trying to be fast. GeoJSON supports multiple kinds + // of objects at its root: FeatureCollection, Features, Geometries. + // This function has the responsibility of handling all of them, and that + // means that some of the `for` loops you see below actually just don't apply + // to certain inputs. For instance, if you give this just a + // Point geometry, then both loops are short-circuited and all we do + // is gradually rename the input until it's called 'geometry'. + // + // This also aims to allocate as few resources as possible: just a + // few numbers and booleans, rather than any temporary arrays as would + // be required with the normalization approach. + for (i = 0; i < stop; i++) { + + geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry : + (isFeature ? layer.geometry : layer)); + isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection'; + stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; + + for (g = 0; g < stopG; g++) { + geometry = isGeometryCollection ? + geometryMaybeCollection.geometries[g] : geometryMaybeCollection; + coords = geometry.coordinates; + + wrapShrink = (excludeWrapCoord && + (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon')) ? + 1 : 0; + + if (geometry.type === 'Point') { + callback(coords, currentIndex); + currentIndex++; + } else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') { + for (j = 0; j < coords.length; j++) { + callback(coords[j], currentIndex); + currentIndex++; + } + } else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') { + for (j = 0; j < coords.length; j++) + for (k = 0; k < coords[j].length - wrapShrink; k++) { + callback(coords[j][k], currentIndex); + currentIndex++; + } + } else if (geometry.type === 'MultiPolygon') { + for (j = 0; j < coords.length; j++) + for (k = 0; k < coords[j].length; k++) + for (l = 0; l < coords[j][k].length - wrapShrink; l++) { + callback(coords[j][k][l], currentIndex); + currentIndex++; + } + } else if (geometry.type === 'GeometryCollection') { + for (j = 0; j < geometry.geometries.length; j++) + coordEach(geometry.geometries[j], callback, excludeWrapCoord); + } else { + throw new Error('Unknown Geometry Type'); + } + } + } +} +module.exports.coordEach = coordEach; + +/** + * Callback for coordReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @private + * @callback coordReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {[number, number]} currentCoords The current coordinate being processed. + * @param {number} currentIndex The index of the current element being processed in the + * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + */ + +/** + * Reduce coordinates in any GeoJSON object, similar to Array.reduce() + * + * @name coordReduce + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentCoords, currentIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @param {boolean} [excludeWrapCoord=false] whether or not to include + * the final coordinate of LinearRings that wraps the ring in its iteration. + * @returns {*} The value that results from the reduction. + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.coordReduce(features, function (previousValue, currentCoords, currentIndex) { + * //=previousValue + * //=currentCoords + * //=currentIndex + * return currentCoords; + * }); + */ +function coordReduce(layer, callback, initialValue, excludeWrapCoord) { + var previousValue = initialValue; + coordEach(layer, function (currentCoords, currentIndex) { + if (currentIndex === 0 && initialValue === undefined) { + previousValue = currentCoords; + } else { + previousValue = callback(previousValue, currentCoords, currentIndex); + } + }, excludeWrapCoord); + return previousValue; +} +module.exports.coordReduce = coordReduce; + +/** + * Callback for propEach + * + * @private + * @callback propEachCallback + * @param {*} currentProperties The current properties being processed. + * @param {number} currentIndex The index of the current element being processed in the + * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + */ + +/** + * Iterate over properties in any GeoJSON object, similar to Array.forEach() + * + * @name propEach + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (currentProperties, currentIndex) + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {"foo": "bar"}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {"hello": "world"}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.propEach(features, function (currentProperties, currentIndex) { + * //=currentProperties + * //=currentIndex + * }); + */ +function propEach(layer, callback) { + var i; + switch (layer.type) { + case 'FeatureCollection': + for (i = 0; i < layer.features.length; i++) { + callback(layer.features[i].properties, i); + } + break; + case 'Feature': + callback(layer.properties, 0); + break; + } +} +module.exports.propEach = propEach; + + +/** + * Callback for propReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @private + * @callback propReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {*} currentProperties The current properties being processed. + * @param {number} currentIndex The index of the current element being processed in the + * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + */ + +/** + * Reduce properties in any GeoJSON object into a single value, + * similar to how Array.reduce works. However, in this case we lazily run + * the reduction, so an array of all properties is unnecessary. + * + * @name propReduce + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentProperties, currentIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {"foo": "bar"}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {"hello": "world"}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.propReduce(features, function (previousValue, currentProperties, currentIndex) { + * //=previousValue + * //=currentProperties + * //=currentIndex + * return currentProperties + * }); + */ +function propReduce(layer, callback, initialValue) { + var previousValue = initialValue; + propEach(layer, function (currentProperties, currentIndex) { + if (currentIndex === 0 && initialValue === undefined) { + previousValue = currentProperties; + } else { + previousValue = callback(previousValue, currentProperties, currentIndex); + } + }); + return previousValue; +} +module.exports.propReduce = propReduce; + +/** + * Callback for featureEach + * + * @private + * @callback featureEachCallback + * @param {Feature} currentFeature The current feature being processed. + * @param {number} currentIndex The index of the current element being processed in the + * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + */ + +/** + * Iterate over features in any GeoJSON object, similar to + * Array.forEach. + * + * @name featureEach + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (currentFeature, currentIndex) + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.featureEach(features, function (currentFeature, currentIndex) { + * //=currentFeature + * //=currentIndex + * }); + */ +function featureEach(layer, callback) { + if (layer.type === 'Feature') { + callback(layer, 0); + } else if (layer.type === 'FeatureCollection') { + for (var i = 0; i < layer.features.length; i++) { + callback(layer.features[i], i); + } + } +} +module.exports.featureEach = featureEach; + +/** + * Callback for featureReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @private + * @callback featureReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {Feature} currentFeature The current Feature being processed. + * @param {number} currentIndex The index of the current element being processed in the + * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + */ + +/** + * Reduce features in any GeoJSON object, similar to Array.reduce(). + * + * @name featureReduce + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentFeature, currentIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {"foo": "bar"}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {"hello": "world"}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.featureReduce(features, function (previousValue, currentFeature, currentIndex) { + * //=previousValue + * //=currentFeature + * //=currentIndex + * return currentFeature + * }); + */ +function featureReduce(layer, callback, initialValue) { + var previousValue = initialValue; + featureEach(layer, function (currentFeature, currentIndex) { + if (currentIndex === 0 && initialValue === undefined) { + previousValue = currentFeature; + } else { + previousValue = callback(previousValue, currentFeature, currentIndex); + } + }); + return previousValue; +} +module.exports.featureReduce = featureReduce; + +/** + * Get all coordinates from any GeoJSON object. + * + * @name coordAll + * @param {Object} layer any GeoJSON object + * @returns {Array>} coordinate position array + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * var coords = turf.coordAll(features); + * //=coords + */ +function coordAll(layer) { + var coords = []; + coordEach(layer, function (coord) { + coords.push(coord); + }); + return coords; +} +module.exports.coordAll = coordAll; + +/** + * Iterate over each geometry in any GeoJSON object, similar to Array.forEach() + * + * @name geomEach + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (currentGeometry, currentIndex) + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.geomEach(features, function (currentGeometry, currentIndex) { + * //=currentGeometry + * //=currentIndex + * }); + */ +function geomEach(layer, callback) { + var i, j, g, geometry, stopG, + geometryMaybeCollection, + isGeometryCollection, + currentIndex = 0, + isFeatureCollection = layer.type === 'FeatureCollection', + isFeature = layer.type === 'Feature', + stop = isFeatureCollection ? layer.features.length : 1; + + // This logic may look a little weird. The reason why it is that way + // is because it's trying to be fast. GeoJSON supports multiple kinds + // of objects at its root: FeatureCollection, Features, Geometries. + // This function has the responsibility of handling all of them, and that + // means that some of the `for` loops you see below actually just don't apply + // to certain inputs. For instance, if you give this just a + // Point geometry, then both loops are short-circuited and all we do + // is gradually rename the input until it's called 'geometry'. + // + // This also aims to allocate as few resources as possible: just a + // few numbers and booleans, rather than any temporary arrays as would + // be required with the normalization approach. + for (i = 0; i < stop; i++) { + + geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry : + (isFeature ? layer.geometry : layer)); + isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection'; + stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; + + for (g = 0; g < stopG; g++) { + geometry = isGeometryCollection ? + geometryMaybeCollection.geometries[g] : geometryMaybeCollection; + + if (geometry.type === 'Point' || + geometry.type === 'LineString' || + geometry.type === 'MultiPoint' || + geometry.type === 'Polygon' || + geometry.type === 'MultiLineString' || + geometry.type === 'MultiPolygon') { + callback(geometry, currentIndex); + currentIndex++; + } else if (geometry.type === 'GeometryCollection') { + for (j = 0; j < geometry.geometries.length; j++) { + callback(geometry.geometries[j], currentIndex); + currentIndex++; + } + } else { + throw new Error('Unknown Geometry Type'); + } + } + } +} +module.exports.geomEach = geomEach; + +/** + * Callback for geomReduce + * + * The first time the callback function is called, the values provided as arguments depend + * on whether the reduce method has an initialValue argument. + * + * If an initialValue is provided to the reduce method: + * - The previousValue argument is initialValue. + * - The currentValue argument is the value of the first element present in the array. + * + * If an initialValue is not provided: + * - The previousValue argument is the value of the first element present in the array. + * - The currentValue argument is the value of the second element present in the array. + * + * @private + * @callback geomReduceCallback + * @param {*} previousValue The accumulated value previously returned in the last invocation + * of the callback, or initialValue, if supplied. + * @param {*} currentGeometry The current Feature being processed. + * @param {number} currentIndex The index of the current element being processed in the + * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. + */ + +/** + * Reduce geometry in any GeoJSON object, similar to Array.reduce(). + * + * @name geomReduce + * @param {Object} layer any GeoJSON object + * @param {Function} callback a method that takes (previousValue, currentGeometry, currentIndex) + * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. + * @returns {*} The value that results from the reduction. + * @example + * var features = { + * "type": "FeatureCollection", + * "features": [ + * { + * "type": "Feature", + * "properties": {"foo": "bar"}, + * "geometry": { + * "type": "Point", + * "coordinates": [26, 37] + * } + * }, + * { + * "type": "Feature", + * "properties": {"hello": "world"}, + * "geometry": { + * "type": "Point", + * "coordinates": [36, 53] + * } + * } + * ] + * }; + * turf.geomReduce(features, function (previousValue, currentGeometry, currentIndex) { + * //=previousValue + * //=currentGeometry + * //=currentIndex + * return currentGeometry + * }); + */ +function geomReduce(layer, callback, initialValue) { + var previousValue = initialValue; + geomEach(layer, function (currentGeometry, currentIndex) { + if (currentIndex === 0 && initialValue === undefined) { + previousValue = currentGeometry; + } else { + previousValue = callback(previousValue, currentGeometry, currentIndex); + } + }); + return previousValue; +} +module.exports.geomReduce = geomReduce; + +},{}],131:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var helpers_1 = require("@turf/helpers"); +var invariant_1 = require("@turf/invariant"); +/** + * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a + * {@link FeatureCollection} of {@link LineString|(Multi)LineString}. + * + * @name polygonToLine + * @param {Feature} poly Feature to convert + * @param {Object} [options={}] Optional parameters + * @param {Object} [options.properties={}] translates GeoJSON properties to Feature + * @returns {FeatureCollection|Feature} converted (Multi)Polygon to (Multi)LineString + * @example + * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]); + * + * var line = turf.polygonToLine(poly); + * + * //addToMap + * var addToMap = [line]; + */ +function default_1(poly, options) { + if (options === void 0) { options = {}; } + var geom = invariant_1.getGeom(poly); + if (!options.properties && poly.type === "Feature") { + options.properties = poly.properties; + } + switch (geom.type) { + case "Polygon": return polygonToLine(geom, options); + case "MultiPolygon": return multiPolygonToLine(geom, options); + default: throw new Error("invalid poly"); + } +} +exports.default = default_1; +/** + * @private + */ +function polygonToLine(poly, options) { + if (options === void 0) { options = {}; } + var geom = invariant_1.getGeom(poly); + var type = geom.type; + var coords = geom.coordinates; + var properties = options.properties ? options.properties : poly.type === "Feature" ? poly.properties : {}; + return coordsToLine(coords, properties); +} +exports.polygonToLine = polygonToLine; +/** + * @private + */ +function multiPolygonToLine(multiPoly, options) { + if (options === void 0) { options = {}; } + var geom = invariant_1.getGeom(multiPoly); + var type = geom.type; + var coords = geom.coordinates; + var properties = options.properties ? options.properties : + multiPoly.type === "Feature" ? multiPoly.properties : {}; + var lines = []; + coords.forEach(function (coord) { + lines.push(coordsToLine(coord, properties)); + }); + return helpers_1.featureCollection(lines); +} +exports.multiPolygonToLine = multiPolygonToLine; +/** + * @private + */ +function coordsToLine(coords, properties) { + if (coords.length > 1) { + return helpers_1.multiLineString(coords, properties); + } + return helpers_1.lineString(coords[0], properties); +} +exports.coordsToLine = coordsToLine; + +},{"@turf/helpers":123,"@turf/invariant":125}],132:[function(require,module,exports){ +var asn1 = exports; + +asn1.bignum = require('bn.js'); + +asn1.define = require('./asn1/api').define; +asn1.base = require('./asn1/base'); +asn1.constants = require('./asn1/constants'); +asn1.decoders = require('./asn1/decoders'); +asn1.encoders = require('./asn1/encoders'); + +},{"./asn1/api":133,"./asn1/base":135,"./asn1/constants":139,"./asn1/decoders":141,"./asn1/encoders":144,"bn.js":147}],133:[function(require,module,exports){ +var asn1 = require('../asn1'); +var inherits = require('inherits'); + +var api = exports; + +api.define = function define(name, body) { + return new Entity(name, body); +}; + +function Entity(name, body) { + this.name = name; + this.body = body; + + this.decoders = {}; + this.encoders = {}; +}; + +Entity.prototype._createNamed = function createNamed(base) { + var named; + try { + named = require('vm').runInThisContext( + '(function ' + this.name + '(entity) {\n' + + ' this._initNamed(entity);\n' + + '})' + ); + } catch (e) { + named = function (entity) { + this._initNamed(entity); + }; + } + inherits(named, base); + named.prototype._initNamed = function initnamed(entity) { + base.call(this, entity); + }; + + return new named(this); +}; + +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) + this.decoders[enc] = this._createNamed(asn1.decoders[enc]); + return this.decoders[enc]; +}; + +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; + +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) + this.encoders[enc] = this._createNamed(asn1.encoders[enc]); + return this.encoders[enc]; +}; + +Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + +},{"../asn1":132,"inherits":262,"vm":344}],134:[function(require,module,exports){ +var inherits = require('inherits'); +var Reporter = require('../base').Reporter; +var Buffer = require('buffer').Buffer; + +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + + this.base = base; + this.offset = 0; + this.length = base.length; +} +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; + +DecoderBuffer.prototype.save = function save() { + return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; +}; + +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + var res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + + return res; +}; + +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; + +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) + return this.base.readUInt8(this.offset++, true); + else + return this.error(fail || 'DecoderBuffer overrun'); +} + +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) + return this.error(fail || 'DecoderBuffer overrun'); + + var res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +} + +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +} + +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function(item) { + if (!(item instanceof EncoderBuffer)) + item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) + return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } +} +exports.EncoderBuffer = EncoderBuffer; + +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) + out = new Buffer(this.length); + if (!offset) + offset = 0; + + if (this.length === 0) + return out; + + if (Array.isArray(this.value)) { + this.value.forEach(function(item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') + out[offset] = this.value; + else if (typeof this.value === 'string') + out.write(this.value, offset); + else if (Buffer.isBuffer(this.value)) + this.value.copy(out, offset); + offset += this.length; + } + + return out; +}; + +},{"../base":135,"buffer":182,"inherits":262}],135:[function(require,module,exports){ +var base = exports; + +base.Reporter = require('./reporter').Reporter; +base.DecoderBuffer = require('./buffer').DecoderBuffer; +base.EncoderBuffer = require('./buffer').EncoderBuffer; +base.Node = require('./node'); + +},{"./buffer":134,"./node":136,"./reporter":137}],136:[function(require,module,exports){ +var Reporter = require('../base').Reporter; +var EncoderBuffer = require('../base').EncoderBuffer; +var DecoderBuffer = require('../base').DecoderBuffer; +var assert = require('minimalistic-assert'); + +// Supported tags +var tags = [ + 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', + 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', + 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', + 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' +]; + +// Public methods list +var methods = [ + 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', + 'any', 'contains' +].concat(tags); + +// Overrided methods list +var overrided = [ + '_peekTag', '_decodeTag', '_use', + '_decodeStr', '_decodeObjid', '_decodeTime', + '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', + + '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', + '_encodeNull', '_encodeInt', '_encodeBool' +]; + +function Node(enc, parent) { + var state = {}; + this._baseState = state; + + state.enc = enc; + + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; + +var stateProps = [ + 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', + 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', + 'implicit', 'contains' +]; + +Node.prototype.clone = function clone() { + var state = this._baseState; + var cstate = {}; + stateProps.forEach(function(prop) { + cstate[prop] = state[prop]; + }); + var res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; + +Node.prototype._wrap = function wrap() { + var state = this._baseState; + methods.forEach(function(method) { + this[method] = function _wrappedMethod() { + var clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); + }; + }, this); +}; + +Node.prototype._init = function init(body) { + var state = this._baseState; + + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function(child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; + +Node.prototype._useArgs = function useArgs(args) { + var state = this._baseState; + + // Filter children and args + var children = args.filter(function(arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function(arg) { + return !(arg instanceof this.constructor); + }, this); + + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function(child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function(arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) + return arg; + + var res = {}; + Object.keys(arg).forEach(function(key) { + if (key == (key | 0)) + key |= 0; + var value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; + +// +// Overrided methods +// + +overrided.forEach(function(method) { + Node.prototype[method] = function _overrided() { + var state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); + +// +// Public methods +// + +tags.forEach(function(tag) { + Node.prototype[tag] = function _tagMethod() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + assert(state.tag === null); + state.tag = tag; + + this._useArgs(args); + + return this; + }; +}); + +Node.prototype.use = function use(item) { + assert(item); + var state = this._baseState; + + assert(state.use === null); + state.use = item; + + return this; +}; + +Node.prototype.optional = function optional() { + var state = this._baseState; + + state.optional = true; + + return this; +}; + +Node.prototype.def = function def(val) { + var state = this._baseState; + + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + + return this; +}; + +Node.prototype.explicit = function explicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + + return this; +}; + +Node.prototype.implicit = function implicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + + return this; +}; + +Node.prototype.obj = function obj() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + state.obj = true; + + if (args.length !== 0) + this._useArgs(args); + + return this; +}; + +Node.prototype.key = function key(newKey) { + var state = this._baseState; + + assert(state.key === null); + state.key = newKey; + + return this; +}; + +Node.prototype.any = function any() { + var state = this._baseState; + + state.any = true; + + return this; +}; + +Node.prototype.choice = function choice(obj) { + var state = this._baseState; + + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function(key) { + return obj[key]; + })); + + return this; +}; + +Node.prototype.contains = function contains(item) { + var state = this._baseState; + + assert(state.use === null); + state.contains = item; + + return this; +}; + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return input.wrapResult(state.children[0]._decode(input, options)); + + var result = state['default']; + var present = true; + + var prevKey = null; + if (state.key !== null) + prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + var tag = null; + if (state.explicit !== null) + tag = state.explicit; + else if (state.implicit !== null) + tag = state.implicit; + else if (state.tag !== null) + tag = state.tag; + + if (tag === null && !state.any) { + // Trial and Error + var save = input.save(); + try { + if (state.choice === null) + this._decodeGeneric(state.tag, input, options); + else + this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + + if (input.isError(present)) + return present; + } + } + + // Push object on stack + var prevObj; + if (state.obj && present) + prevObj = input.enterObject(); + + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + var explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) + return explicit; + input = explicit; + } + + var start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + if (state.any) + var save = input.save(); + var body = this._decodeTag( + input, + state.implicit !== null ? state.implicit : state.tag, + state.any + ); + if (input.isError(body)) + return body; + + if (state.any) + result = input.raw(save); + else + input = body; + } + + if (options && options.track && state.tag !== null) + options.track(input.path(), start, input.length, 'tagged'); + + if (options && options.track && state.tag !== null) + options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) + result = result; + else if (state.choice === null) + result = this._decodeGeneric(state.tag, input, options); + else + result = this._decodeChoice(input, options); + + if (input.isError(result)) + return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + var data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj) + ._decode(data, options); + } + } + + // Pop object + if (state.obj && present) + result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) + input.leaveKey(prevKey, state.key, result); + else if (prevKey !== null) + input.exitKey(prevKey); + + return result; +}; + +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + var state = this._baseState; + + if (tag === 'seq' || tag === 'set') + return null; + if (tag === 'seqof' || tag === 'setof') + return this._decodeList(input, tag, state.args[0], options); + else if (/str$/.test(tag)) + return this._decodeStr(input, tag, options); + else if (tag === 'objid' && state.args) + return this._decodeObjid(input, state.args[0], state.args[1], options); + else if (tag === 'objid') + return this._decodeObjid(input, null, null, options); + else if (tag === 'gentime' || tag === 'utctime') + return this._decodeTime(input, tag, options); + else if (tag === 'null_') + return this._decodeNull(input, options); + else if (tag === 'bool') + return this._decodeBool(input, options); + else if (tag === 'objDesc') + return this._decodeStr(input, tag, options); + else if (tag === 'int' || tag === 'enum') + return this._decodeInt(input, state.args && state.args[0], options); + + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj) + ._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; + +Node.prototype._getUse = function _getUse(entity, obj) { + + var state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; +}; + +Node.prototype._decodeChoice = function decodeChoice(input, options) { + var state = this._baseState; + var result = null; + var match = false; + + Object.keys(state.choice).some(function(key) { + var save = input.save(); + var node = state.choice[key]; + try { + var value = node._decode(input, options); + if (input.isError(value)) + return false; + + result = { type: key, value: value }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + return true; + }, this); + + if (!match) + return input.error('Choice not matched'); + + return result; +}; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; + +Node.prototype._encode = function encode(data, reporter, parent) { + var state = this._baseState; + if (state['default'] !== null && state['default'] === data) + return; + + var result = this._encodeValue(data, reporter, parent); + if (result === undefined) + return; + + if (this._skipDefault(result, reporter, parent)) + return; + + return result; +}; + +Node.prototype._encodeValue = function encode(data, reporter, parent) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return state.children[0]._encode(data, reporter || new Reporter()); + + var result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) + data = state['default'] + else + return; + } + + // Encode children first + var content = null; + var primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function(child) { + if (child._baseState.tag === 'null_') + return child._encode(null, reporter, data); + + if (child._baseState.key === null) + return reporter.error('Child should have a key'); + var prevKey = reporter.enterKey(child._baseState.key); + + if (typeof data !== 'object') + return reporter.error('Child expected, but input is not object'); + + var res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + + return res; + }, this).filter(function(child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) + return reporter.error('Too many args for : ' + state.tag); + + if (!Array.isArray(data)) + return reporter.error('seqof/setof, but data is not Array'); + + var child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function(item) { + var state = this._baseState; + + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } + + // Encode data itself + var result; + if (!state.any && state.choice === null) { + var tag = state.implicit !== null ? state.implicit : state.tag; + var cls = state.implicit === null ? 'universal' : 'context'; + + if (tag === null) { + if (state.use === null) + reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) + result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) + result = this._encodeComposite(state.explicit, false, 'context', result); + + return result; +}; + +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + var state = this._baseState; + + var node = state.choice[data.type]; + if (!node) { + assert( + false, + data.type + ' not found in ' + + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); +}; + +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + var state = this._baseState; + + if (/str$/.test(tag)) + return this._encodeStr(data, tag); + else if (tag === 'objid' && state.args) + return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); + else if (tag === 'objid') + return this._encodeObjid(data, null, null); + else if (tag === 'gentime' || tag === 'utctime') + return this._encodeTime(data, tag); + else if (tag === 'null_') + return this._encodeNull(); + else if (tag === 'int' || tag === 'enum') + return this._encodeInt(data, state.args && state.reverseArgs[0]); + else if (tag === 'bool') + return this._encodeBool(data); + else if (tag === 'objDesc') + return this._encodeStr(data, tag); + else + throw new Error('Unsupported tag: ' + tag); +}; + +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; + +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); +}; + +},{"../base":135,"minimalistic-assert":268}],137:[function(require,module,exports){ +var inherits = require('inherits'); + +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; + +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; + +Reporter.prototype.save = function save() { + var state = this._reporterState; + + return { obj: state.obj, pathLen: state.path.length }; +}; + +Reporter.prototype.restore = function restore(data) { + var state = this._reporterState; + + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; + +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; + +Reporter.prototype.exitKey = function exitKey(index) { + var state = this._reporterState; + + state.path = state.path.slice(0, index - 1); +}; + +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + var state = this._reporterState; + + this.exitKey(index); + if (state.obj !== null) + state.obj[key] = value; +}; + +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; + +Reporter.prototype.enterObject = function enterObject() { + var state = this._reporterState; + + var prev = state.obj; + state.obj = {}; + return prev; +}; + +Reporter.prototype.leaveObject = function leaveObject(prev) { + var state = this._reporterState; + + var now = state.obj; + state.obj = prev; + return now; +}; + +Reporter.prototype.error = function error(msg) { + var err; + var state = this._reporterState; + + var inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function(elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + + if (!state.options.partial) + throw err; + + if (!inherited) + state.errors.push(err); + + return err; +}; + +Reporter.prototype.wrapResult = function wrapResult(result) { + var state = this._reporterState; + if (!state.options.partial) + return result; + + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; + +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +}; +inherits(ReporterError, Error); + +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) + Error.captureStackTrace(this, ReporterError); + + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + return this; +}; + +},{"inherits":262}],138:[function(require,module,exports){ +var constants = require('../constants'); + +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = constants._reverse(exports.tagClass); + +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = constants._reverse(exports.tag); + +},{"../constants":139}],139:[function(require,module,exports){ +var constants = exports; + +// Helper +constants._reverse = function reverse(map) { + var res = {}; + + Object.keys(map).forEach(function(key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) + key = key | 0; + + var value = map[key]; + res[value] = key; + }); + + return res; +}; + +constants.der = require('./der'); + +},{"./der":138}],140:[function(require,module,exports){ +var inherits = require('inherits'); + +var asn1 = require('../../asn1'); +var base = asn1.base; +var bignum = asn1.bignum; + +// Import DER constants +var der = asn1.constants.der; + +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DERDecoder; + +DERDecoder.prototype.decode = function decode(data, options) { + if (!(data instanceof base.DecoderBuffer)) + data = new base.DecoderBuffer(data, options); + + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) + return false; + + var state = buffer.save(); + var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + buffer.restore(state); + + return decodedTag.tag === tag || decodedTag.tagStr === tag || + (decodedTag.tagStr + 'of') === tag || any; +}; + +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + var decodedTag = derDecodeTag(buffer, + 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + var len = derDecodeLen(buffer, + decodedTag.primitive, + 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) + return len; + + if (!any && + decodedTag.tag !== tag && + decodedTag.tagStr !== tag && + decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + + if (decodedTag.primitive || len !== null) + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + var state = buffer.save(); + var res = this._skipUntilEnd( + buffer, + 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) + return res; + + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; + +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + while (true) { + var tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) + return tag; + var len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) + return len; + + var res; + if (tag.primitive || len !== null) + res = buffer.skip(len) + else + res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) + return res; + + if (tag.tagStr === 'end') + break; + } +}; + +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, + options) { + var result = []; + while (!buffer.isEmpty()) { + var possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) + return possibleEnd; + + var res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) + break; + result.push(res); + } + return result; +}; + +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + var unused = buffer.readUInt8(); + if (buffer.isError(unused)) + return unused; + return { unused: unused, data: buffer.raw() }; + } else if (tag === 'bmpstr') { + var raw = buffer.raw(); + if (raw.length % 2 === 1) + return buffer.error('Decoding of string type: bmpstr length mismatch'); + + var str = ''; + for (var i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + return str; + } else if (tag === 'numstr') { + var numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + + 'numstr unsupported characters'); + } + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + var printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + + 'printstr unsupported characters'); + } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; + +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + var result; + var identifiers = []; + var ident = 0; + while (!buffer.isEmpty()) { + var subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + if (subident & 0x80) + identifiers.push(ident); + + var first = (identifiers[0] / 40) | 0; + var second = identifiers[0] % 40; + + if (relative) + result = identifiers; + else + result = [first, second].concat(identifiers.slice(1)); + + if (values) { + var tmp = values[result.join(' ')]; + if (tmp === undefined) + tmp = values[result.join('.')]; + if (tmp !== undefined) + result = tmp; + } + + return result; +}; + +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + var str = buffer.raw().toString(); + if (tag === 'gentime') { + var year = str.slice(0, 4) | 0; + var mon = str.slice(4, 6) | 0; + var day = str.slice(6, 8) | 0; + var hour = str.slice(8, 10) | 0; + var min = str.slice(10, 12) | 0; + var sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + var year = str.slice(0, 2) | 0; + var mon = str.slice(2, 4) | 0; + var day = str.slice(4, 6) | 0; + var hour = str.slice(6, 8) | 0; + var min = str.slice(8, 10) | 0; + var sec = str.slice(10, 12) | 0; + if (year < 70) + year = 2000 + year; + else + year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; + +DERNode.prototype._decodeNull = function decodeNull(buffer) { + return null; +}; + +DERNode.prototype._decodeBool = function decodeBool(buffer) { + var res = buffer.readUInt8(); + if (buffer.isError(res)) + return res; + else + return res !== 0; +}; + +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + var raw = buffer.raw(); + var res = new bignum(raw); + + if (values) + res = values[res.toString(10)] || res; + + return res; +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getDecoder('der').tree; +}; + +// Utility methods + +function derDecodeTag(buf, fail) { + var tag = buf.readUInt8(fail); + if (buf.isError(tag)) + return tag; + + var cls = der.tagClass[tag >> 6]; + var primitive = (tag & 0x20) === 0; + + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + var oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) + return oct; + + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + var tagStr = der.tag[tag]; + + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} + +function derDecodeLen(buf, primitive, fail) { + var len = buf.readUInt8(fail); + if (buf.isError(len)) + return len; + + // Indefinite form + if (!primitive && len === 0x80) + return null; + + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + var num = len & 0x7f; + if (num > 4) + return buf.error('length octect is too long'); + + len = 0; + for (var i = 0; i < num; i++) { + len <<= 8; + var j = buf.readUInt8(fail); + if (buf.isError(j)) + return j; + len |= j; + } + + return len; +} + +},{"../../asn1":132,"inherits":262}],141:[function(require,module,exports){ +var decoders = exports; + +decoders.der = require('./der'); +decoders.pem = require('./pem'); + +},{"./der":140,"./pem":142}],142:[function(require,module,exports){ +var inherits = require('inherits'); +var Buffer = require('buffer').Buffer; + +var DERDecoder = require('./der'); + +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; + +PEMDecoder.prototype.decode = function decode(data, options) { + var lines = data.toString().split(/[\r\n]+/g); + + var label = options.label.toUpperCase(); + + var re = /^-----(BEGIN|END) ([^-]+)-----$/; + var start = -1; + var end = -1; + for (var i = 0; i < lines.length; i++) { + var match = lines[i].match(re); + if (match === null) + continue; + + if (match[2] !== label) + continue; + + if (start === -1) { + if (match[1] !== 'BEGIN') + break; + start = i; + } else { + if (match[1] !== 'END') + break; + end = i; + break; + } + } + if (start === -1 || end === -1) + throw new Error('PEM section not found for: ' + label); + + var base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9\+\/=]+/gi, ''); + + var input = new Buffer(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + +},{"./der":140,"buffer":182,"inherits":262}],143:[function(require,module,exports){ +var inherits = require('inherits'); +var Buffer = require('buffer').Buffer; + +var asn1 = require('../../asn1'); +var base = asn1.base; + +// Import DER constants +var der = asn1.constants.der; + +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DEREncoder; + +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._encodeComposite = function encodeComposite(tag, + primitive, + cls, + content) { + var encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + var header = new Buffer(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([ header, content ]); + } + + // Long form + // Count octets required to store length + var lenOctets = 1; + for (var i = content.length; i >= 0x100; i >>= 8) + lenOctets++; + + var header = new Buffer(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + + for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) + header[i] = j & 0xff; + + return this._createEncoderBuffer([ header, content ]); +}; + +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([ str.unused | 0, str.data ]); + } else if (tag === 'bmpstr') { + var buf = new Buffer(str.length * 2); + for (var i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + + 'only latin upper and lower case letters, ' + + 'digits, space, apostrophe, left and rigth ' + + 'parenthesis, plus sign, comma, hyphen, ' + + 'dot, slash, colon, equal sign, ' + + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + + ' unsupported'); + } +}; + +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) + return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) + return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s\.]+/g); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } + + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + + 'got: ' + JSON.stringify(id)); + } + + if (!relative) { + if (id[1] >= 40) + return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + var size = 0; + for (var i = 0; i < id.length; i++) { + var ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) + size++; + } + + var objid = new Buffer(size); + var offset = objid.length - 1; + for (var i = id.length - 1; i >= 0; i--) { + var ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) + objid[offset--] = 0x80 | (ident & 0x7f); + } + + return this._createEncoderBuffer(objid); +}; + +function two(num) { + if (num < 10) + return '0' + num; + else + return num; +} + +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + var str; + var date = new Date(time); + + if (tag === 'gentime') { + str = [ + two(date.getFullYear()), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else if (tag === 'utctime') { + str = [ + two(date.getFullYear() % 100), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + + return this._encodeStr(str, 'octstr'); +}; + +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; + +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) + return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + + JSON.stringify(num)); + } + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + var numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + num = new Buffer(numArray); + } + + if (Buffer.isBuffer(num)) { + var size = num.length; + if (num.length === 0) + size++; + + var out = new Buffer(size); + num.copy(out); + if (num.length === 0) + out[0] = 0 + return this._createEncoderBuffer(out); + } + + if (num < 0x80) + return this._createEncoderBuffer(num); + + if (num < 0x100) + return this._createEncoderBuffer([0, num]); + + var size = 1; + for (var i = num; i >= 0x100; i >>= 8) + size++; + + var out = new Array(size); + for (var i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if(out[0] & 0x80) { + out.unshift(0); + } + + return this._createEncoderBuffer(new Buffer(out)); +}; + +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getEncoder('der').tree; +}; + +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + var state = this._baseState; + var i; + if (state['default'] === null) + return false; + + var data = dataBuffer.join(); + if (state.defaultBuffer === undefined) + state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + + if (data.length !== state.defaultBuffer.length) + return false; + + for (i=0; i < data.length; i++) + if (data[i] !== state.defaultBuffer[i]) + return false; + + return true; +}; + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + var res; + + if (tag === 'seqof') + tag = 'seq'; + else if (tag === 'setof') + tag = 'set'; + + if (der.tagByName.hasOwnProperty(tag)) + res = der.tagByName[tag]; + else if (typeof tag === 'number' && (tag | 0) === tag) + res = tag; + else + return reporter.error('Unknown tag: ' + tag); + + if (res >= 0x1f) + return reporter.error('Multi-octet tag encoding unsupported'); + + if (!primitive) + res |= 0x20; + + res |= (der.tagClassByName[cls || 'universal'] << 6); + + return res; +} + +},{"../../asn1":132,"buffer":182,"inherits":262}],144:[function(require,module,exports){ +var encoders = exports; + +encoders.der = require('./der'); +encoders.pem = require('./pem'); + +},{"./der":143,"./pem":145}],145:[function(require,module,exports){ +var inherits = require('inherits'); + +var DEREncoder = require('./der'); + +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; + +PEMEncoder.prototype.encode = function encode(data, options) { + var buf = DEREncoder.prototype.encode.call(this, data); + + var p = buf.toString('base64'); + var out = [ '-----BEGIN ' + options.label + '-----' ]; + for (var i = 0; i < p.length; i += 64) + out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + +},{"./der":143,"inherits":262}],146:[function(require,module,exports){ +'use strict' + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk( + uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) + )) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + +},{}],147:[function(require,module,exports){ +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + Buffer = require('buffer').Buffer; + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + } + + if (base === 16) { + this._parseHex(number, start); + } else { + this._parseBase(number, base, start); + } + + if (number[0] === '-') { + this.negative = 1; + } + + this.strip(); + + if (endian !== 'le') return; + + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; + + function parseHex (str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r <<= 4; + + // 'a' - 'f' + if (c >= 49 && c <= 54) { + r |= c - 49 + 0xa; + + // 'A' - 'F' + } else if (c >= 17 && c <= 22) { + r |= c - 17 + 0xa; + + // '0' - '9' + } else { + r |= c & 0xf; + } + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + // Scan 24-bit chunks and add them to the number + var off = 0; + for (i = number.length - 6, j = 0; i >= start; i -= 6) { + w = parseHex(number, i, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + if (i + 6 !== start) { + w = parseHex(number, start, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + } + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); + } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + r.strip(); + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, this); + +},{"buffer":149}],148:[function(require,module,exports){ +var r; + +module.exports = function rand(len) { + if (!r) + r = new Rand(null); + + return r.generate(len); +}; + +function Rand(rand) { + this.rand = rand; +} +module.exports.Rand = Rand; + +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; + +// Emulate crypto API using randy +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) + return this.rand.getBytes(n); + + var res = new Uint8Array(n); + for (var i = 0; i < res.length; i++) + res[i] = this.rand.getByte(); + return res; +}; + +if (typeof self === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; + + // Safari's WebWorkers do not have `crypto` + } else if (typeof window === 'object') { + // Old junk + Rand.prototype._rand = function() { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = require('crypto'); + if (typeof crypto.randomBytes !== 'function') + throw new Error('Not supported'); + + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) { + } +} + +},{"crypto":149}],149:[function(require,module,exports){ + +},{}],150:[function(require,module,exports){ +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ + +var Buffer = require('safe-buffer').Buffer + +function asUInt32Array (buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + + var len = (buf.length / 4) | 0 + var out = new Array(len) + + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4) + } + + return out +} + +function scrubVec (v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0 + } +} + +function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0] + var SUB_MIX1 = SUB_MIX[1] + var SUB_MIX2 = SUB_MIX[2] + var SUB_MIX3 = SUB_MIX[3] + + var s0 = M[0] ^ keySchedule[0] + var s1 = M[1] ^ keySchedule[1] + var s2 = M[2] ^ keySchedule[2] + var s3 = M[3] ^ keySchedule[3] + var t0, t1, t2, t3 + var ksRow = 4 + + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] + s0 = t0 + s1 = t1 + s2 = t2 + s3 = t3 + } + + t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] + t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] + t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] + t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] + t0 = t0 >>> 0 + t1 = t1 >>> 0 + t2 = t2 >>> 0 + t3 = t3 >>> 0 + + return [t0, t1, t2, t3] +} + +// AES constants +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] +var G = (function () { + // Compute double table + var d = new Array(256) + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1 + } else { + d[j] = (j << 1) ^ 0x11b + } + } + + var SBOX = [] + var INV_SBOX = [] + var SUB_MIX = [[], [], [], []] + var INV_SUB_MIX = [[], [], [], []] + + // Walk GF(2^8) + var x = 0 + var xi = 0 + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 + SBOX[x] = sx + INV_SBOX[sx] = x + + // Compute multiplication + var x2 = d[x] + var x4 = d[x2] + var x8 = d[x4] + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100) + SUB_MIX[0][x] = (t << 24) | (t >>> 8) + SUB_MIX[1][x] = (t << 16) | (t >>> 16) + SUB_MIX[2][x] = (t << 8) | (t >>> 24) + SUB_MIX[3][x] = t + + // Compute inv sub bytes, inv mix columns tables + t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) + INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) + INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) + INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) + INV_SUB_MIX[3][sx] = t + + if (x === 0) { + x = xi = 1 + } else { + x = x2 ^ d[d[d[x8 ^ x2]]] + xi ^= d[d[xi]] + } + } + + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + } +})() + +function AES (key) { + this._key = asUInt32Array(key) + this._reset() +} + +AES.blockSize = 4 * 4 +AES.keySize = 256 / 8 +AES.prototype.blockSize = AES.blockSize +AES.prototype.keySize = AES.keySize +AES.prototype._reset = function () { + var keyWords = this._key + var keySize = keyWords.length + var nRounds = keySize + 6 + var ksRows = (nRounds + 1) * 4 + + var keySchedule = [] + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k] + } + + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1] + + if (k % 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 ^= RCON[(k / keySize) | 0] << 24 + } else if (keySize > 6 && k % keySize === 4) { + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + } + + keySchedule[k] = keySchedule[k - keySize] ^ t + } + + var invKeySchedule = [] + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] + + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt + } else { + invKeySchedule[ik] = + G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ + G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ + G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ + G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] + } + } + + this._nRounds = nRounds + this._keySchedule = keySchedule + this._invKeySchedule = invKeySchedule +} + +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M) + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) +} + +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[1], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[3], 12) + return buf +} + +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M) + + // swap + var m1 = M[1] + M[1] = M[3] + M[3] = m1 + + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[3], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[1], 12) + return buf +} + +AES.prototype.scrub = function () { + scrubVec(this._keySchedule) + scrubVec(this._invKeySchedule) + scrubVec(this._key) +} + +module.exports.AES = AES + +},{"safe-buffer":318}],151:[function(require,module,exports){ +var aes = require('./aes') +var Buffer = require('safe-buffer').Buffer +var Transform = require('cipher-base') +var inherits = require('inherits') +var GHASH = require('./ghash') +var xor = require('buffer-xor') +var incr32 = require('./incr32') + +function xorTest (a, b) { + var out = 0 + if (a.length !== b.length) out++ + + var len = Math.min(a.length, b.length) + for (var i = 0; i < len; ++i) { + out += (a[i] ^ b[i]) + } + + return out +} + +function calcIv (self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) + } + var ghash = new GHASH(ck) + var len = iv.length + var toPad = len % 16 + ghash.update(iv) + if (toPad) { + toPad = 16 - toPad + ghash.update(Buffer.alloc(toPad, 0)) + } + ghash.update(Buffer.alloc(8, 0)) + var ivBits = len * 8 + var tail = Buffer.alloc(8) + tail.writeUIntBE(ivBits, 0, 8) + ghash.update(tail) + self._finID = ghash.state + var out = Buffer.from(self._finID) + incr32(out) + return out +} +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + var h = Buffer.alloc(4, 0) + + this._cipher = new aes.AES(key) + var ck = this._cipher.encryptBlock(h) + this._ghash = new GHASH(ck) + iv = calcIv(this, iv, ck) + + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._alen = 0 + this._len = 0 + this._mode = mode + + this._authTag = null + this._called = false +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - (this._alen % 16) + if (rump < 16) { + rump = Buffer.alloc(rump, 0) + this._ghash.update(rump) + } + } + + this._called = true + var out = this._mode.encrypt(this, chunk) + if (this._decrypt) { + this._ghash.update(chunk) + } else { + this._ghash.update(out) + } + this._len += chunk.length + return out +} + +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') + + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') + + this._authTag = tag + this._cipher.scrub() +} + +StreamCipher.prototype.getAuthTag = function getAuthTag () { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') + + return this._authTag +} + +StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') + + this._authTag = tag +} + +StreamCipher.prototype.setAAD = function setAAD (buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state') + + this._ghash.update(buf) + this._alen += buf.length +} + +module.exports = StreamCipher + +},{"./aes":150,"./ghash":155,"./incr32":156,"buffer-xor":181,"cipher-base":184,"inherits":262,"safe-buffer":318}],152:[function(require,module,exports){ +var ciphers = require('./encrypter') +var deciphers = require('./decrypter') +var modes = require('./modes/list.json') + +function getCiphers () { + return Object.keys(modes) +} + +exports.createCipher = exports.Cipher = ciphers.createCipher +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv +exports.createDecipher = exports.Decipher = deciphers.createDecipher +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + +},{"./decrypter":153,"./encrypter":154,"./modes/list.json":164}],153:[function(require,module,exports){ +var AuthCipher = require('./authCipher') +var Buffer = require('safe-buffer').Buffer +var MODES = require('./modes') +var StreamCipher = require('./streamCipher') +var Transform = require('cipher-base') +var aes = require('./aes') +var ebtk = require('evp_bytestokey') +var inherits = require('inherits') + +function Decipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._last = void 0 + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Decipher, Transform) + +Decipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + while ((chunk = this._cache.get(this._autopadding))) { + thing = this._mode.decrypt(this, chunk) + out.push(thing) + } + return Buffer.concat(out) +} + +Decipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)) + } else if (chunk) { + throw new Error('data not multiple of block length') + } +} + +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function (autoPadding) { + var out + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } + + return null +} + +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache +} + +function unpad (last) { + var padded = last[15] + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data') + } + var i = -1 + while (++i < padded) { + if (last[(i + (16 - padded))] !== padded) { + throw new Error('unable to decrypt data') + } + } + if (padded === 16) return + + return last.slice(0, 16 - padded) +} + +function createDecipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true) + } + + return new Decipher(config.module, password, iv) +} + +function createDecipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createDecipheriv(suite, keys.key, keys.iv) +} + +exports.createDecipher = createDecipher +exports.createDecipheriv = createDecipheriv + +},{"./aes":150,"./authCipher":151,"./modes":163,"./streamCipher":166,"cipher-base":184,"evp_bytestokey":222,"inherits":262,"safe-buffer":318}],154:[function(require,module,exports){ +var MODES = require('./modes') +var AuthCipher = require('./authCipher') +var Buffer = require('safe-buffer').Buffer +var StreamCipher = require('./streamCipher') +var Transform = require('cipher-base') +var aes = require('./aes') +var ebtk = require('evp_bytestokey') +var inherits = require('inherits') + +function Cipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Cipher, Transform) + +Cipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + + while ((chunk = this._cache.get())) { + thing = this._mode.encrypt(this, chunk) + out.push(thing) + } + + return Buffer.concat(out) +} + +var PADDING = Buffer.alloc(16, 0x10) + +Cipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk) + this._cipher.scrub() + return chunk + } + + if (!chunk.equals(PADDING)) { + this._cipher.scrub() + throw new Error('data not multiple of block length') + } +} + +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + return null +} + +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length + var padBuff = Buffer.allocUnsafe(len) + + var i = -1 + while (++i < len) { + padBuff.writeUInt8(len, i) + } + + return Buffer.concat([this.cache, padBuff]) +} + +function createCipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv) + } + + return new Cipher(config.module, password, iv) +} + +function createCipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createCipheriv(suite, keys.key, keys.iv) +} + +exports.createCipheriv = createCipheriv +exports.createCipher = createCipher + +},{"./aes":150,"./authCipher":151,"./modes":163,"./streamCipher":166,"cipher-base":184,"evp_bytestokey":222,"inherits":262,"safe-buffer":318}],155:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var ZEROES = Buffer.alloc(16, 0) + +function toArray (buf) { + return [ + buf.readUInt32BE(0), + buf.readUInt32BE(4), + buf.readUInt32BE(8), + buf.readUInt32BE(12) + ] +} + +function fromArray (out) { + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0] >>> 0, 0) + buf.writeUInt32BE(out[1] >>> 0, 4) + buf.writeUInt32BE(out[2] >>> 0, 8) + buf.writeUInt32BE(out[3] >>> 0, 12) + return buf +} + +function GHASH (key) { + this.h = key + this.state = Buffer.alloc(16, 0) + this.cache = Buffer.allocUnsafe(0) +} + +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1 + while (++i < block.length) { + this.state[i] ^= block[i] + } + this._multiply() +} + +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h) + var Zi = [0, 0, 0, 0] + var j, xi, lsbVi + var i = -1 + while (++i < 128) { + xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0] + Zi[1] ^= Vi[1] + Zi[2] ^= Vi[2] + Zi[3] ^= Vi[3] + } + + // Store the value of LSB(V_i) + lsbVi = (Vi[3] & 1) !== 0 + + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) + } + Vi[0] = Vi[0] >>> 1 + + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsbVi) { + Vi[0] = Vi[0] ^ (0xe1 << 24) + } + } + this.state = fromArray(Zi) +} + +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]) + var chunk + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + this.ghash(chunk) + } +} + +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)) + } + + this.ghash(fromArray([0, abl, 0, bl])) + return this.state +} + +module.exports = GHASH + +},{"safe-buffer":318}],156:[function(require,module,exports){ +function incr32 (iv) { + var len = iv.length + var item + while (len--) { + item = iv.readUInt8(len) + if (item === 255) { + iv.writeUInt8(0, len) + } else { + item++ + iv.writeUInt8(item, len) + break + } + } +} +module.exports = incr32 + +},{}],157:[function(require,module,exports){ +var xor = require('buffer-xor') + +exports.encrypt = function (self, block) { + var data = xor(block, self._prev) + + self._prev = self._cipher.encryptBlock(data) + return self._prev +} + +exports.decrypt = function (self, block) { + var pad = self._prev + + self._prev = block + var out = self._cipher.decryptBlock(block) + + return xor(out, pad) +} + +},{"buffer-xor":181}],158:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var xor = require('buffer-xor') + +function encryptStart (self, data, decrypt) { + var len = data.length + var out = xor(data, self._cache) + self._cache = self._cache.slice(len) + self._prev = Buffer.concat([self._prev, decrypt ? data : out]) + return out +} + +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0) + var len + + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev) + self._prev = Buffer.allocUnsafe(0) + } + + if (self._cache.length <= data.length) { + len = self._cache.length + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) + data = data.slice(len) + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]) + break + } + } + + return out +} + +},{"buffer-xor":181,"safe-buffer":318}],159:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +function encryptByte (self, byteParam, decrypt) { + var pad + var i = -1 + var len = 8 + var out = 0 + var bit, value + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev) + bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 + value = pad[0] ^ bit + out += ((value & 0x80) >> (i % 8)) + self._prev = shiftIn(self._prev, decrypt ? bit : value) + } + return out +} + +function shiftIn (buffer, value) { + var len = buffer.length + var i = -1 + var out = Buffer.allocUnsafe(buffer.length) + buffer = Buffer.concat([buffer, Buffer.from([value])]) + + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) + } + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + +},{"safe-buffer":318}],160:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +function encryptByte (self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev) + var out = pad[0] ^ byteParam + + self._prev = Buffer.concat([ + self._prev.slice(1), + Buffer.from([decrypt ? byteParam : out]) + ]) + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + +},{"safe-buffer":318}],161:[function(require,module,exports){ +var xor = require('buffer-xor') +var Buffer = require('safe-buffer').Buffer +var incr32 = require('../incr32') + +function getBlock (self) { + var out = self._cipher.encryptBlockRaw(self._prev) + incr32(self._prev) + return out +} + +var blockSize = 16 +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize) + var start = self._cache.length + self._cache = Buffer.concat([ + self._cache, + Buffer.allocUnsafe(chunkNum * blockSize) + ]) + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self) + var offset = start + i * blockSize + self._cache.writeUInt32BE(out[0], offset + 0) + self._cache.writeUInt32BE(out[1], offset + 4) + self._cache.writeUInt32BE(out[2], offset + 8) + self._cache.writeUInt32BE(out[3], offset + 12) + } + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + +},{"../incr32":156,"buffer-xor":181,"safe-buffer":318}],162:[function(require,module,exports){ +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block) +} + +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block) +} + +},{}],163:[function(require,module,exports){ +var modeModules = { + ECB: require('./ecb'), + CBC: require('./cbc'), + CFB: require('./cfb'), + CFB8: require('./cfb8'), + CFB1: require('./cfb1'), + OFB: require('./ofb'), + CTR: require('./ctr'), + GCM: require('./ctr') +} + +var modes = require('./list.json') + +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode] +} + +module.exports = modes + +},{"./cbc":157,"./cfb":158,"./cfb1":159,"./cfb8":160,"./ctr":161,"./ecb":162,"./list.json":164,"./ofb":165}],164:[function(require,module,exports){ +module.exports={ + "aes-128-ecb": { + "cipher": "AES", + "key": 128, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-192-ecb": { + "cipher": "AES", + "key": 192, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-256-ecb": { + "cipher": "AES", + "key": 256, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-128-cbc": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-192-cbc": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-256-cbc": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes128": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes192": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes256": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-128-cfb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-192-cfb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-256-cfb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-128-cfb8": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-192-cfb8": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-256-cfb8": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-128-cfb1": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-192-cfb1": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-256-cfb1": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-128-ofb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-192-ofb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-256-ofb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-128-ctr": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-192-ctr": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-256-ctr": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-128-gcm": { + "cipher": "AES", + "key": 128, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-192-gcm": { + "cipher": "AES", + "key": 192, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-256-gcm": { + "cipher": "AES", + "key": 256, + "iv": 12, + "mode": "GCM", + "type": "auth" + } +} + +},{}],165:[function(require,module,exports){ +(function (Buffer){ +var xor = require('buffer-xor') + +function getBlock (self) { + self._prev = self._cipher.encryptBlock(self._prev) + return self._prev +} + +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]) + } + + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + +}).call(this,require("buffer").Buffer) +},{"buffer":182,"buffer-xor":181}],166:[function(require,module,exports){ +var aes = require('./aes') +var Buffer = require('safe-buffer').Buffer +var Transform = require('cipher-base') +var inherits = require('inherits') + +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._mode = mode +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt) +} + +StreamCipher.prototype._final = function () { + this._cipher.scrub() +} + +module.exports = StreamCipher + +},{"./aes":150,"cipher-base":184,"inherits":262,"safe-buffer":318}],167:[function(require,module,exports){ +var DES = require('browserify-des') +var aes = require('browserify-aes/browser') +var aesModes = require('browserify-aes/modes') +var desModes = require('browserify-des/modes') +var ebtk = require('evp_bytestokey') + +function createCipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createCipheriv(suite, keys.key, keys.iv) +} + +function createDecipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createDecipheriv(suite, keys.key, keys.iv) +} + +function createCipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) + + throw new TypeError('invalid suite type') +} + +function createDecipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) + + throw new TypeError('invalid suite type') +} + +function getCiphers () { + return Object.keys(desModes).concat(aes.getCiphers()) +} + +exports.createCipher = exports.Cipher = createCipher +exports.createCipheriv = exports.Cipheriv = createCipheriv +exports.createDecipher = exports.Decipher = createDecipher +exports.createDecipheriv = exports.Decipheriv = createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + +},{"browserify-aes/browser":152,"browserify-aes/modes":163,"browserify-des":168,"browserify-des/modes":169,"evp_bytestokey":222}],168:[function(require,module,exports){ +var CipherBase = require('cipher-base') +var des = require('des.js') +var inherits = require('inherits') +var Buffer = require('safe-buffer').Buffer + +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +} +modes.des = modes['des-cbc'] +modes.des3 = modes['des-ede3-cbc'] +module.exports = DES +inherits(DES, CipherBase) +function DES (opts) { + CipherBase.call(this) + var modeName = opts.mode.toLowerCase() + var mode = modes[modeName] + var type + if (opts.decrypt) { + type = 'decrypt' + } else { + type = 'encrypt' + } + var key = opts.key + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key) + } + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]) + } + var iv = opts.iv + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv) + } + this._des = mode.create({ + key: key, + iv: iv, + type: type + }) +} +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)) +} +DES.prototype._final = function () { + return Buffer.from(this._des.final()) +} + +},{"cipher-base":184,"des.js":195,"inherits":262,"safe-buffer":318}],169:[function(require,module,exports){ +exports['des-ecb'] = { + key: 8, + iv: 0 +} +exports['des-cbc'] = exports.des = { + key: 8, + iv: 8 +} +exports['des-ede3-cbc'] = exports.des3 = { + key: 24, + iv: 8 +} +exports['des-ede3'] = { + key: 24, + iv: 0 +} +exports['des-ede-cbc'] = { + key: 16, + iv: 8 +} +exports['des-ede'] = { + key: 16, + iv: 0 +} + +},{}],170:[function(require,module,exports){ +(function (Buffer){ +var bn = require('bn.js'); +var randomBytes = require('randombytes'); +module.exports = crt; +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(bn.mont(priv.modulus)) + .redPow(new bn(priv.publicExponent)).fromRed(); + return { + blinder: blinder, + unblinder:r.invm(priv.modulus) + }; +} +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var mod = bn.mont(priv.modulus); + var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(bn.mont(priv.prime1)); + var c2 = blinded.toRed(bn.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1); + var m2 = c2.redPow(priv.exponent2); + m1 = m1.fromRed(); + m2 = m2.fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p); + h.imul(q); + m2.iadd(h); + return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); +} +crt.getr = getr; +function getr(priv) { + var len = priv.modulus.byteLength(); + var r = new bn(randomBytes(len)); + while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { + r = new bn(randomBytes(len)); + } + return r; +} + +}).call(this,require("buffer").Buffer) +},{"bn.js":147,"buffer":182,"randombytes":298}],171:[function(require,module,exports){ +module.exports = require('./browser/algorithms.json') + +},{"./browser/algorithms.json":172}],172:[function(require,module,exports){ +module.exports={ + "sha224WithRSAEncryption": { + "sign": "rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "RSA-SHA224": { + "sign": "ecdsa/rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "sha256WithRSAEncryption": { + "sign": "rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "RSA-SHA256": { + "sign": "ecdsa/rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "sha384WithRSAEncryption": { + "sign": "rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "RSA-SHA384": { + "sign": "ecdsa/rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "sha512WithRSAEncryption": { + "sign": "rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA512": { + "sign": "ecdsa/rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA1": { + "sign": "rsa", + "hash": "sha1", + "id": "3021300906052b0e03021a05000414" + }, + "ecdsa-with-SHA1": { + "sign": "ecdsa", + "hash": "sha1", + "id": "" + }, + "sha256": { + "sign": "ecdsa", + "hash": "sha256", + "id": "" + }, + "sha224": { + "sign": "ecdsa", + "hash": "sha224", + "id": "" + }, + "sha384": { + "sign": "ecdsa", + "hash": "sha384", + "id": "" + }, + "sha512": { + "sign": "ecdsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-SHA1": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-WITH-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-WITH-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-WITH-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-WITH-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-RIPEMD160": { + "sign": "dsa", + "hash": "rmd160", + "id": "" + }, + "ripemd160WithRSA": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "RSA-RIPEMD160": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "md5WithRSAEncryption": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + }, + "RSA-MD5": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + } +} + +},{}],173:[function(require,module,exports){ +module.exports={ + "1.3.132.0.10": "secp256k1", + "1.3.132.0.33": "p224", + "1.2.840.10045.3.1.1": "p192", + "1.2.840.10045.3.1.7": "p256", + "1.3.132.0.34": "p384", + "1.3.132.0.35": "p521" +} + +},{}],174:[function(require,module,exports){ +(function (Buffer){ +var createHash = require('create-hash') +var stream = require('stream') +var inherits = require('inherits') +var sign = require('./sign') +var verify = require('./verify') + +var algorithms = require('./algorithms.json') +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = new Buffer(algorithms[key].id, 'hex') + algorithms[key.toLowerCase()] = algorithms[key] +}) + +function Sign (algorithm) { + stream.Writable.call(this) + + var data = algorithms[algorithm] + if (!data) throw new Error('Unknown message digest') + + this._hashType = data.hash + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Sign, stream.Writable) + +Sign.prototype._write = function _write (data, _, done) { + this._hash.update(data) + done() +} + +Sign.prototype.update = function update (data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc) + + this._hash.update(data) + return this +} + +Sign.prototype.sign = function signMethod (key, enc) { + this.end() + var hash = this._hash.digest() + var sig = sign(hash, key, this._hashType, this._signType, this._tag) + + return enc ? sig.toString(enc) : sig +} + +function Verify (algorithm) { + stream.Writable.call(this) + + var data = algorithms[algorithm] + if (!data) throw new Error('Unknown message digest') + + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Verify, stream.Writable) + +Verify.prototype._write = function _write (data, _, done) { + this._hash.update(data) + done() +} + +Verify.prototype.update = function update (data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc) + + this._hash.update(data) + return this +} + +Verify.prototype.verify = function verifyMethod (key, sig, enc) { + if (typeof sig === 'string') sig = new Buffer(sig, enc) + + this.end() + var hash = this._hash.digest() + return verify(sig, hash, key, this._signType, this._tag) +} + +function createSign (algorithm) { + return new Sign(algorithm) +} + +function createVerify (algorithm) { + return new Verify(algorithm) +} + +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +} + +}).call(this,require("buffer").Buffer) +},{"./algorithms.json":172,"./sign":175,"./verify":176,"buffer":182,"create-hash":188,"inherits":262,"stream":328}],175:[function(require,module,exports){ +(function (Buffer){ +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var createHmac = require('create-hmac') +var crt = require('browserify-rsa') +var EC = require('elliptic').ec +var BN = require('bn.js') +var parseKeys = require('parse-asn1') +var curves = require('./curves.json') + +function sign (hash, key, hashType, signType, tag) { + var priv = parseKeys(key) + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') + return ecSign(hash, priv) + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong private key type') + return dsaSign(hash, priv, hashType) + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') + } + hash = Buffer.concat([tag, hash]) + var len = priv.modulus.byteLength() + var pad = [ 0, 1 ] + while (hash.length + pad.length + 1 < len) pad.push(0xff) + pad.push(0x00) + var i = -1 + while (++i < hash.length) pad.push(hash[i]) + + var out = crt(pad, priv) + return out +} + +function ecSign (hash, priv) { + var curveId = curves[priv.curve.join('.')] + if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')) + + var curve = new EC(curveId) + var key = curve.keyFromPrivate(priv.privateKey) + var out = key.sign(hash) + + return new Buffer(out.toDER()) +} + +function dsaSign (hash, priv, algo) { + var x = priv.params.priv_key + var p = priv.params.p + var q = priv.params.q + var g = priv.params.g + var r = new BN(0) + var k + var H = bits2int(hash, q).mod(q) + var s = false + var kv = getKey(x, q, hash, algo) + while (s === false) { + k = makeKey(q, kv, algo) + r = makeR(g, k, p, q) + s = k.invm(q).imul(H.add(x.mul(r))).mod(q) + if (s.cmpn(0) === 0) { + s = false + r = new BN(0) + } + } + return toDER(r, s) +} + +function toDER (r, s) { + r = r.toArray() + s = s.toArray() + + // Pad values + if (r[0] & 0x80) r = [ 0 ].concat(r) + if (s[0] & 0x80) s = [ 0 ].concat(s) + + var total = r.length + s.length + 4 + var res = [ 0x30, total, 0x02, r.length ] + res = res.concat(r, [ 0x02, s.length ], s) + return new Buffer(res) +} + +function getKey (x, q, hash, algo) { + x = new Buffer(x.toArray()) + if (x.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - x.length) + zeros.fill(0) + x = Buffer.concat([ zeros, x ]) + } + var hlen = hash.length + var hbits = bits2octets(hash, q) + var v = new Buffer(hlen) + v.fill(1) + var k = new Buffer(hlen) + k.fill(0) + k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest() + v = createHmac(algo, k).update(v).digest() + k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest() + v = createHmac(algo, k).update(v).digest() + return { k: k, v: v } +} + +function bits2int (obits, q) { + var bits = new BN(obits) + var shift = (obits.length << 3) - q.bitLength() + if (shift > 0) bits.ishrn(shift) + return bits +} + +function bits2octets (bits, q) { + bits = bits2int(bits, q) + bits = bits.mod(q) + var out = new Buffer(bits.toArray()) + if (out.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - out.length) + zeros.fill(0) + out = Buffer.concat([ zeros, out ]) + } + return out +} + +function makeKey (q, kv, algo) { + var t + var k + + do { + t = new Buffer(0) + + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest() + t = Buffer.concat([ t, kv.v ]) + } + + k = bits2int(t, q) + kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest() + kv.v = createHmac(algo, kv.k).update(kv.v).digest() + } while (k.cmp(q) !== -1) + + return k +} + +function makeR (g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) +} + +module.exports = sign +module.exports.getKey = getKey +module.exports.makeKey = makeKey + +}).call(this,require("buffer").Buffer) +},{"./curves.json":173,"bn.js":147,"browserify-rsa":170,"buffer":182,"create-hmac":190,"elliptic":205,"parse-asn1":275}],176:[function(require,module,exports){ +(function (Buffer){ +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var BN = require('bn.js') +var EC = require('elliptic').ec +var parseKeys = require('parse-asn1') +var curves = require('./curves.json') + +function verify (sig, hash, key, signType, tag) { + var pub = parseKeys(key) + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') + return ecVerify(sig, hash, pub) + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong public key type') + return dsaVerify(sig, hash, pub) + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') + } + hash = Buffer.concat([tag, hash]) + var len = pub.modulus.byteLength() + var pad = [ 1 ] + var padNum = 0 + while (hash.length + pad.length + 2 < len) { + pad.push(0xff) + padNum++ + } + pad.push(0x00) + var i = -1 + while (++i < hash.length) { + pad.push(hash[i]) + } + pad = new Buffer(pad) + var red = BN.mont(pub.modulus) + sig = new BN(sig).toRed(red) + + sig = sig.redPow(new BN(pub.publicExponent)) + sig = new Buffer(sig.fromRed().toArray()) + var out = padNum < 8 ? 1 : 0 + len = Math.min(sig.length, pad.length) + if (sig.length !== pad.length) out = 1 + + i = -1 + while (++i < len) out |= sig[i] ^ pad[i] + return out === 0 +} + +function ecVerify (sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')] + if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) + + var curve = new EC(curveId) + var pubkey = pub.data.subjectPrivateKey.data + + return curve.verify(hash, sig, pubkey) +} + +function dsaVerify (sig, hash, pub) { + var p = pub.data.p + var q = pub.data.q + var g = pub.data.g + var y = pub.data.pub_key + var unpacked = parseKeys.signature.decode(sig, 'der') + var s = unpacked.s + var r = unpacked.r + checkValue(s, q) + checkValue(r, q) + var montp = BN.mont(p) + var w = s.invm(q) + var v = g.toRed(montp) + .redPow(new BN(hash).mul(w).mod(q)) + .fromRed() + .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) + .mod(p) + .mod(q) + return v.cmp(r) === 0 +} + +function checkValue (b, q) { + if (b.cmpn(0) <= 0) throw new Error('invalid sig') + if (b.cmp(q) >= q) throw new Error('invalid sig') +} + +module.exports = verify + +}).call(this,require("buffer").Buffer) +},{"./curves.json":173,"bn.js":147,"buffer":182,"elliptic":205,"parse-asn1":275}],177:[function(require,module,exports){ +arguments[4][149][0].apply(exports,arguments) +},{"dup":149}],178:[function(require,module,exports){ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + +},{"buffer":182}],179:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + 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': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. +function utf8CheckByte(byte) { + 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; + return -1; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'.repeat(p); + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'.repeat(p + 1); + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'.repeat(p + 2); + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character for each buffered byte of a (partial) +// character needs to be added to the output. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed); + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} +},{"safe-buffer":178}],180:[function(require,module,exports){ +(function (Buffer){ +var toString = Object.prototype.toString + +var isModern = ( + typeof Buffer.alloc === 'function' && + typeof Buffer.allocUnsafe === 'function' && + typeof Buffer.from === 'function' +) + +function isArrayBuffer (input) { + return toString.call(input).slice(8, -1) === 'ArrayBuffer' +} + +function fromArrayBuffer (obj, byteOffset, length) { + byteOffset >>>= 0 + + var maxLength = obj.byteLength - byteOffset + + if (maxLength < 0) { + throw new RangeError("'offset' is out of bounds") + } + + if (length === undefined) { + length = maxLength + } else { + length >>>= 0 + + if (length > maxLength) { + throw new RangeError("'length' is out of bounds") + } + } + + return isModern + ? Buffer.from(obj.slice(byteOffset, byteOffset + length)) + : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length))) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } + + return isModern + ? Buffer.from(string, encoding) + : new Buffer(string, encoding) +} + +function bufferFrom (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } + + if (isArrayBuffer(value)) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + return isModern + ? Buffer.from(value) + : new Buffer(value) +} + +module.exports = bufferFrom + +}).call(this,require("buffer").Buffer) +},{"buffer":182}],181:[function(require,module,exports){ +(function (Buffer){ +module.exports = function xor (a, b) { + var length = Math.min(a.length, b.length) + var buffer = new Buffer(length) + + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i] + } + + return buffer +} + +}).call(this,require("buffer").Buffer) +},{"buffer":182}],182:[function(require,module,exports){ +(function (Buffer){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol.for === 'function') + ? Symbol.for('nodejs.util.inspect.custom') + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +var K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + var proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 +if (typeof Symbol !== 'undefined' && Symbol.species != null && + Buffer[Symbol.species] === Buffer) { + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true, + enumerable: false, + writable: false + }) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf) + } + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (var i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +var hexSliceLookupTable = (function () { + var alphabet = '0123456789abcdef' + var table = new Array(256) + for (var i = 0; i < 16; ++i) { + var i16 = i * 16 + for (var j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + +}).call(this,require("buffer").Buffer) +},{"base64-js":146,"buffer":182,"ieee754":241}],183:[function(require,module,exports){ +module.exports = { + "100": "Continue", + "101": "Switching Protocols", + "102": "Processing", + "200": "OK", + "201": "Created", + "202": "Accepted", + "203": "Non-Authoritative Information", + "204": "No Content", + "205": "Reset Content", + "206": "Partial Content", + "207": "Multi-Status", + "208": "Already Reported", + "226": "IM Used", + "300": "Multiple Choices", + "301": "Moved Permanently", + "302": "Found", + "303": "See Other", + "304": "Not Modified", + "305": "Use Proxy", + "307": "Temporary Redirect", + "308": "Permanent Redirect", + "400": "Bad Request", + "401": "Unauthorized", + "402": "Payment Required", + "403": "Forbidden", + "404": "Not Found", + "405": "Method Not Allowed", + "406": "Not Acceptable", + "407": "Proxy Authentication Required", + "408": "Request Timeout", + "409": "Conflict", + "410": "Gone", + "411": "Length Required", + "412": "Precondition Failed", + "413": "Payload Too Large", + "414": "URI Too Long", + "415": "Unsupported Media Type", + "416": "Range Not Satisfiable", + "417": "Expectation Failed", + "418": "I'm a teapot", + "421": "Misdirected Request", + "422": "Unprocessable Entity", + "423": "Locked", + "424": "Failed Dependency", + "425": "Unordered Collection", + "426": "Upgrade Required", + "428": "Precondition Required", + "429": "Too Many Requests", + "431": "Request Header Fields Too Large", + "451": "Unavailable For Legal Reasons", + "500": "Internal Server Error", + "501": "Not Implemented", + "502": "Bad Gateway", + "503": "Service Unavailable", + "504": "Gateway Timeout", + "505": "HTTP Version Not Supported", + "506": "Variant Also Negotiates", + "507": "Insufficient Storage", + "508": "Loop Detected", + "509": "Bandwidth Limit Exceeded", + "510": "Not Extended", + "511": "Network Authentication Required" +} + +},{}],184:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var Transform = require('stream').Transform +var StringDecoder = require('string_decoder').StringDecoder +var inherits = require('inherits') + +function CipherBase (hashMode) { + Transform.call(this) + this.hashMode = typeof hashMode === 'string' + if (this.hashMode) { + this[hashMode] = this._finalOrDigest + } else { + this.final = this._finalOrDigest + } + if (this._final) { + this.__final = this._final + this._final = null + } + this._decoder = null + this._encoding = null +} +inherits(CipherBase, Transform) + +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = Buffer.from(data, inputEnc) + } + + var outData = this._update(data) + if (this.hashMode) return this + + if (outputEnc) { + outData = this._toString(outData, outputEnc) + } + + return outData +} + +CipherBase.prototype.setAutoPadding = function () {} +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state') +} + +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state') +} + +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state') +} + +CipherBase.prototype._transform = function (data, _, next) { + var err + try { + if (this.hashMode) { + this._update(data) + } else { + this.push(this._update(data)) + } + } catch (e) { + err = e + } finally { + next(err) + } +} +CipherBase.prototype._flush = function (done) { + var err + try { + this.push(this.__final()) + } catch (e) { + err = e + } + + done(err) +} +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0) + if (outputEnc) { + outData = this._toString(outData, outputEnc, true) + } + return outData +} + +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc) + this._encoding = enc + } + + if (this._encoding !== enc) throw new Error('can\'t switch encodings') + + var out = this._decoder.write(value) + if (fin) { + out += this._decoder.end() + } + + return out +} + +module.exports = CipherBase + +},{"inherits":262,"safe-buffer":318,"stream":328,"string_decoder":179}],185:[function(require,module,exports){ +(function (Buffer){ +var Writable = require('readable-stream').Writable +var inherits = require('inherits') +var bufferFrom = require('buffer-from') + +if (typeof Uint8Array === 'undefined') { + var U8 = require('typedarray').Uint8Array +} else { + var U8 = Uint8Array +} + +function ConcatStream(opts, cb) { + if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb) + + if (typeof opts === 'function') { + cb = opts + opts = {} + } + if (!opts) opts = {} + + var encoding = opts.encoding + var shouldInferEncoding = false + + if (!encoding) { + shouldInferEncoding = true + } else { + encoding = String(encoding).toLowerCase() + if (encoding === 'u8' || encoding === 'uint8') { + encoding = 'uint8array' + } + } + + Writable.call(this, { objectMode: true }) + + this.encoding = encoding + this.shouldInferEncoding = shouldInferEncoding + + if (cb) this.on('finish', function () { cb(this.getBody()) }) + this.body = [] +} + +module.exports = ConcatStream +inherits(ConcatStream, Writable) + +ConcatStream.prototype._write = function(chunk, enc, next) { + this.body.push(chunk) + next() +} + +ConcatStream.prototype.inferEncoding = function (buff) { + var firstBuffer = buff === undefined ? this.body[0] : buff; + if (Buffer.isBuffer(firstBuffer)) return 'buffer' + if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array' + if (Array.isArray(firstBuffer)) return 'array' + if (typeof firstBuffer === 'string') return 'string' + if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object' + return 'buffer' +} + +ConcatStream.prototype.getBody = function () { + if (!this.encoding && this.body.length === 0) return [] + if (this.shouldInferEncoding) this.encoding = this.inferEncoding() + if (this.encoding === 'array') return arrayConcat(this.body) + if (this.encoding === 'string') return stringConcat(this.body) + if (this.encoding === 'buffer') return bufferConcat(this.body) + if (this.encoding === 'uint8array') return u8Concat(this.body) + return this.body +} + +var isArray = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]' +} + +function isArrayish (arr) { + return /Array\]$/.test(Object.prototype.toString.call(arr)) +} + +function isBufferish (p) { + return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function') +} + +function stringConcat (parts) { + var strings = [] + var needsToString = false + for (var i = 0; i < parts.length; i++) { + var p = parts[i] + if (typeof p === 'string') { + strings.push(p) + } else if (Buffer.isBuffer(p)) { + strings.push(p) + } else if (isBufferish(p)) { + strings.push(bufferFrom(p)) + } else { + strings.push(bufferFrom(String(p))) + } + } + if (Buffer.isBuffer(parts[0])) { + strings = Buffer.concat(strings) + strings = strings.toString('utf8') + } else { + strings = strings.join('') + } + return strings +} + +function bufferConcat (parts) { + var bufs = [] + for (var i = 0; i < parts.length; i++) { + var p = parts[i] + if (Buffer.isBuffer(p)) { + bufs.push(p) + } else if (isBufferish(p)) { + bufs.push(bufferFrom(p)) + } else { + bufs.push(bufferFrom(String(p))) + } + } + return Buffer.concat(bufs) +} + +function arrayConcat (parts) { + var res = [] + for (var i = 0; i < parts.length; i++) { + res.push.apply(res, parts[i]) + } + return res +} + +function u8Concat (parts) { + var len = 0 + for (var i = 0; i < parts.length; i++) { + if (typeof parts[i] === 'string') { + parts[i] = bufferFrom(parts[i]) + } + len += parts[i].length + } + var u8 = new U8(len) + for (var i = 0, offset = 0; i < parts.length; i++) { + var part = parts[i] + for (var j = 0; j < part.length; j++) { + u8[offset++] = part[j] + } + } + return u8 +} + +}).call(this,require("buffer").Buffer) +},{"buffer":182,"buffer-from":180,"inherits":262,"readable-stream":312,"typedarray":337}],186:[function(require,module,exports){ +(function (Buffer){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":263}],187:[function(require,module,exports){ +(function (Buffer){ +var elliptic = require('elliptic') +var BN = require('bn.js') + +module.exports = function createECDH (curve) { + return new ECDH(curve) +} + +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +} + +aliases.p224 = aliases.secp224r1 +aliases.p256 = aliases.secp256r1 = aliases.prime256v1 +aliases.p192 = aliases.secp192r1 = aliases.prime192v1 +aliases.p384 = aliases.secp384r1 +aliases.p521 = aliases.secp521r1 + +function ECDH (curve) { + this.curveType = aliases[curve] + if (!this.curveType) { + this.curveType = { + name: curve + } + } + this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap + this.keys = void 0 +} + +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair() + return this.getPublicKey(enc, format) +} + +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8' + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc) + } + var otherPub = this.curve.keyFromPublic(other).getPublic() + var out = otherPub.mul(this.keys.getPrivate()).getX() + return formatReturnValue(out, enc, this.curveType.byteLength) +} + +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true) + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7 + } else { + key[0] = 6 + } + } + return formatReturnValue(key, enc) +} + +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc) +} + +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc) + } + this.keys._importPublic(pub) + return this +} + +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc) + } + + var _priv = new BN(priv) + _priv = _priv.toString(16) + this.keys = this.curve.genKeyPair() + this.keys._importPrivate(_priv) + return this +} + +function formatReturnValue (bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray() + } + var buf = new Buffer(bn) + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length) + zeros.fill(0) + buf = Buffer.concat([zeros, buf]) + } + if (!enc) { + return buf + } else { + return buf.toString(enc) + } +} + +}).call(this,require("buffer").Buffer) +},{"bn.js":147,"buffer":182,"elliptic":205}],188:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var MD5 = require('md5.js') +var RIPEMD160 = require('ripemd160') +var sha = require('sha.js') +var Base = require('cipher-base') + +function Hash (hash) { + Base.call(this, 'digest') + + this._hash = hash +} + +inherits(Hash, Base) + +Hash.prototype._update = function (data) { + this._hash.update(data) +} + +Hash.prototype._final = function () { + return this._hash.digest() +} + +module.exports = function createHash (alg) { + alg = alg.toLowerCase() + if (alg === 'md5') return new MD5() + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() + + return new Hash(sha(alg)) +} + +},{"cipher-base":184,"inherits":262,"md5.js":266,"ripemd160":317,"sha.js":320}],189:[function(require,module,exports){ +var MD5 = require('md5.js') + +module.exports = function (buffer) { + return new MD5().update(buffer).digest() +} + +},{"md5.js":266}],190:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var Legacy = require('./legacy') +var Base = require('cipher-base') +var Buffer = require('safe-buffer').Buffer +var md5 = require('create-hash/md5') +var RIPEMD160 = require('ripemd160') + +var sha = require('sha.js') + +var ZEROS = Buffer.alloc(128) + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + this._alg = alg + this._key = key + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + key = hash.update(key).digest() + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + this._hash.update(ipad) +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.update(data) +} + +Hmac.prototype._final = function () { + var h = this._hash.digest() + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) + return hash.update(this._opad).update(h).digest() +} + +module.exports = function createHmac (alg, key) { + alg = alg.toLowerCase() + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key) + } + if (alg === 'md5') { + return new Legacy(md5, key) + } + return new Hmac(alg, key) +} + +},{"./legacy":191,"cipher-base":184,"create-hash/md5":189,"inherits":262,"ripemd160":317,"safe-buffer":318,"sha.js":320}],191:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var Buffer = require('safe-buffer').Buffer + +var Base = require('cipher-base') + +var ZEROS = Buffer.alloc(128) +var blocksize = 64 + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + this._alg = alg + this._key = key + + if (key.length > blocksize) { + key = alg(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + this._hash = [ipad] +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.push(data) +} + +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)) + return this._alg(Buffer.concat([this._opad, h])) +} +module.exports = Hmac + +},{"cipher-base":184,"inherits":262,"safe-buffer":318}],192:[function(require,module,exports){ +'use strict' + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') +exports.createHash = exports.Hash = require('create-hash') +exports.createHmac = exports.Hmac = require('create-hmac') + +var algos = require('browserify-sign/algos') +var algoKeys = Object.keys(algos) +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) +exports.getHashes = function () { + return hashes +} + +var p = require('pbkdf2') +exports.pbkdf2 = p.pbkdf2 +exports.pbkdf2Sync = p.pbkdf2Sync + +var aes = require('browserify-cipher') + +exports.Cipher = aes.Cipher +exports.createCipher = aes.createCipher +exports.Cipheriv = aes.Cipheriv +exports.createCipheriv = aes.createCipheriv +exports.Decipher = aes.Decipher +exports.createDecipher = aes.createDecipher +exports.Decipheriv = aes.Decipheriv +exports.createDecipheriv = aes.createDecipheriv +exports.getCiphers = aes.getCiphers +exports.listCiphers = aes.listCiphers + +var dh = require('diffie-hellman') + +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup +exports.getDiffieHellman = dh.getDiffieHellman +exports.createDiffieHellman = dh.createDiffieHellman +exports.DiffieHellman = dh.DiffieHellman + +var sign = require('browserify-sign') + +exports.createSign = sign.createSign +exports.Sign = sign.Sign +exports.createVerify = sign.createVerify +exports.Verify = sign.Verify + +exports.createECDH = require('create-ecdh') + +var publicEncrypt = require('public-encrypt') + +exports.publicEncrypt = publicEncrypt.publicEncrypt +exports.privateEncrypt = publicEncrypt.privateEncrypt +exports.publicDecrypt = publicEncrypt.publicDecrypt +exports.privateDecrypt = publicEncrypt.privateDecrypt + +// the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = require('randomfill') + +exports.randomFill = rf.randomFill +exports.randomFillSync = rf.randomFillSync + +exports.createCredentials = function () { + throw new Error([ + 'sorry, createCredentials is not implemented yet', + 'we accept pull requests', + 'https://github.com/crypto-browserify/crypto-browserify' + ].join('\n')) +} + +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +} + +},{"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){ +// https://d3js.org/d3-array/ v1.2.4 Copyright 2018 Mike Bostock +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : +typeof define === 'function' && define.amd ? define(['exports'], factory) : +(factory((global.d3 = global.d3 || {}))); +}(this, (function (exports) { 'use strict'; + +function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector(compare) { + if (compare.length === 1) compare = ascendingComparator(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator(f) { + return function(d, x) { + return ascending(f(d), x); + }; +} + +var ascendingBisect = bisector(ascending); +var bisectRight = ascendingBisect.right; +var bisectLeft = ascendingBisect.left; + +function pairs(array, f) { + if (f == null) f = pair; + var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); + while (i < n) pairs[i] = f(p, p = array[++i]); + return pairs; +} + +function pair(a, b) { + return [a, b]; +} + +function cross(values0, values1, reduce) { + var n0 = values0.length, + n1 = values1.length, + values = new Array(n0 * n1), + i0, + i1, + i, + value0; + + if (reduce == null) reduce = pair; + + for (i0 = i = 0; i0 < n0; ++i0) { + for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { + values[i] = reduce(value0, values1[i1]); + } + } + + return values; +} + +function descending(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +} + +function number(x) { + return x === null ? NaN : +x; +} + +function variance(values, valueof) { + var n = values.length, + m = 0, + i = -1, + mean = 0, + value, + delta, + sum = 0; + + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = number(values[i]))) { + delta = value - mean; + mean += delta / ++m; + sum += delta * (value - mean); + } + } + } + + else { + while (++i < n) { + if (!isNaN(value = number(valueof(values[i], i, values)))) { + delta = value - mean; + mean += delta / ++m; + sum += delta * (value - mean); + } + } + } + + if (m > 1) return sum / (m - 1); +} + +function deviation(array, f) { + var v = variance(array, f); + return v ? Math.sqrt(v) : v; +} + +function extent(values, valueof) { + var n = values.length, + i = -1, + value, + min, + max; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null) { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null) { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + } + + return [min, max]; +} + +var array = Array.prototype; + +var slice = array.slice; +var map = array.map; + +function constant(x) { + return function() { + return x; + }; +} + +function identity(x) { + return x; +} + +function range(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +var e10 = Math.sqrt(50), + e5 = Math.sqrt(10), + e2 = Math.sqrt(2); + +function ticks(start, stop, count) { + var reverse, + i = -1, + n, + ticks, + step; + + stop = +stop, start = +start, count = +count; + if (start === stop && count > 0) return [start]; + if (reverse = stop < start) n = start, start = stop, stop = n; + if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; + + if (step > 0) { + start = Math.ceil(start / step); + stop = Math.floor(stop / step); + ticks = new Array(n = Math.ceil(stop - start + 1)); + while (++i < n) ticks[i] = (start + i) * step; + } else { + start = Math.floor(start * step); + stop = Math.ceil(stop * step); + ticks = new Array(n = Math.ceil(start - stop + 1)); + while (++i < n) ticks[i] = (start - i) / step; + } + + if (reverse) ticks.reverse(); + + return ticks; +} + +function tickIncrement(start, stop, count) { + var step = (stop - start) / Math.max(0, count), + power = Math.floor(Math.log(step) / Math.LN10), + error = step / Math.pow(10, power); + return power >= 0 + ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) + : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); +} + +function tickStep(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10) step1 *= 10; + else if (error >= e5) step1 *= 5; + else if (error >= e2) step1 *= 2; + return stop < start ? -step1 : step1; +} + +function sturges(values) { + return Math.ceil(Math.log(values.length) / Math.LN2) + 1; +} + +function histogram() { + var value = identity, + domain = extent, + threshold = sturges; + + function histogram(data) { + var i, + n = data.length, + x, + values = new Array(n); + + for (i = 0; i < n; ++i) { + values[i] = value(data[i], i, data); + } + + var xz = domain(values), + x0 = xz[0], + x1 = xz[1], + tz = threshold(values, x0, x1); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + tz = tickStep(x0, x1, tz); + tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive + } + + // Remove any thresholds outside the domain. + var m = tz.length; + while (tz[0] <= x0) tz.shift(), --m; + while (tz[m - 1] > x1) tz.pop(), --m; + + var bins = new Array(m + 1), + bin; + + // Initialize bins. + for (i = 0; i <= m; ++i) { + bin = bins[i] = []; + bin.x0 = i > 0 ? tz[i - 1] : x0; + bin.x1 = i < m ? tz[i] : x1; + } + + // Assign data to bins by value, ignoring any outside the domain. + for (i = 0; i < n; ++i) { + x = values[i]; + if (x0 <= x && x <= x1) { + bins[bisectRight(tz, x, 0, m)].push(data[i]); + } + } + + return bins; + } + + histogram.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value; + }; + + histogram.domain = function(_) { + return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain; + }; + + histogram.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold; + }; + + return histogram; +} + +function quantile(values, p, valueof) { + if (valueof == null) valueof = number; + if (!(n = values.length)) return; + if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); + if (p >= 1) return +valueof(values[n - 1], n - 1, values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = +valueof(values[i0], i0, values), + value1 = +valueof(values[i0 + 1], i0 + 1, values); + return value0 + (value1 - value0) * (i - i0); +} + +function freedmanDiaconis(values, min, max) { + values = map.call(values, number).sort(ascending); + return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3))); +} + +function scott(values, min, max) { + return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3))); +} + +function max(values, valueof) { + var n = values.length, + i = -1, + value, + max; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null && value > max) { + max = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null && value > max) { + max = value; + } + } + } + } + } + + return max; +} + +function mean(values, valueof) { + var n = values.length, + m = n, + i = -1, + value, + sum = 0; + + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = number(values[i]))) sum += value; + else --m; + } + } + + else { + while (++i < n) { + if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value; + else --m; + } + } + + if (m) return sum / m; +} + +function median(values, valueof) { + var n = values.length, + i = -1, + value, + numbers = []; + + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = number(values[i]))) { + numbers.push(value); + } + } + } + + else { + while (++i < n) { + if (!isNaN(value = number(valueof(values[i], i, values)))) { + numbers.push(value); + } + } + } + + return quantile(numbers.sort(ascending), 0.5); +} + +function merge(arrays) { + var n = arrays.length, + m, + i = -1, + j = 0, + merged, + array; + + while (++i < n) j += arrays[i].length; + merged = new Array(j); + + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } + } + + return merged; +} + +function min(values, valueof) { + var n = values.length, + i = -1, + value, + min; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + min = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null && min > value) { + min = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + min = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null && min > value) { + min = value; + } + } + } + } + } + + return min; +} + +function permute(array, indexes) { + var i = indexes.length, permutes = new Array(i); + while (i--) permutes[i] = array[indexes[i]]; + return permutes; +} + +function scan(values, compare) { + if (!(n = values.length)) return; + var n, + i = 0, + j = 0, + xi, + xj = values[j]; + + if (compare == null) compare = ascending; + + while (++i < n) { + if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { + xj = xi, j = i; + } + } + + if (compare(xj, xj) === 0) return j; +} + +function shuffle(array, i0, i1) { + var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), + t, + i; + + while (m) { + i = Math.random() * m-- | 0; + t = array[m + i0]; + array[m + i0] = array[i + i0]; + array[i + i0] = t; + } + + return array; +} + +function sum(values, valueof) { + var n = values.length, + i = -1, + value, + sum = 0; + + if (valueof == null) { + while (++i < n) { + if (value = +values[i]) sum += value; // Note: zero and null are equivalent. + } + } + + else { + while (++i < n) { + if (value = +valueof(values[i], i, values)) sum += value; + } + } + + return sum; +} + +function transpose(matrix) { + if (!(n = matrix.length)) return []; + for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) { + for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { + row[j] = matrix[j][i]; + } + } + return transpose; +} + +function length(d) { + return d.length; +} + +function zip() { + return transpose(arguments); +} + +exports.bisect = bisectRight; +exports.bisectRight = bisectRight; +exports.bisectLeft = bisectLeft; +exports.ascending = ascending; +exports.bisector = bisector; +exports.cross = cross; +exports.descending = descending; +exports.deviation = deviation; +exports.extent = extent; +exports.histogram = histogram; +exports.thresholdFreedmanDiaconis = freedmanDiaconis; +exports.thresholdScott = scott; +exports.thresholdSturges = sturges; +exports.max = max; +exports.mean = mean; +exports.median = median; +exports.merge = merge; +exports.min = min; +exports.pairs = pairs; +exports.permute = permute; +exports.quantile = quantile; +exports.range = range; +exports.scan = scan; +exports.shuffle = shuffle; +exports.sum = sum; +exports.ticks = ticks; +exports.tickIncrement = tickIncrement; +exports.tickStep = tickStep; +exports.transpose = transpose; +exports.variance = variance; +exports.zip = zip; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{}],194:[function(require,module,exports){ +// https://d3js.org/d3-geo/ v1.11.6 Copyright 2019 Mike Bostock +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) : +typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) : +(factory((global.d3 = global.d3 || {}),global.d3)); +}(this, (function (exports,d3Array) { 'use strict'; + +// Adds floating point numbers with twice the normal precision. +// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and +// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) +// 305–363 (1997). +// Code adapted from GeographicLib by Charles F. F. Karney, +// http://geographiclib.sourceforge.net/ + +function adder() { + return new Adder; +} + +function Adder() { + this.reset(); +} + +Adder.prototype = { + constructor: Adder, + reset: function() { + this.s = // rounded value + this.t = 0; // exact error + }, + add: function(y) { + add(temp, y, this.t); + add(this, temp.s, this.s); + if (this.s) this.t += temp.t; + else this.s = temp.t; + }, + valueOf: function() { + return this.s; + } +}; + +var temp = new Adder; + +function add(adder, a, b) { + var x = adder.s = a + b, + bv = x - a, + av = x - bv; + adder.t = (a - av) + (b - bv); +} + +var epsilon = 1e-6; +var epsilon2 = 1e-12; +var pi = Math.PI; +var halfPi = pi / 2; +var quarterPi = pi / 4; +var tau = pi * 2; + +var degrees = 180 / pi; +var radians = pi / 180; + +var abs = Math.abs; +var atan = Math.atan; +var atan2 = Math.atan2; +var cos = Math.cos; +var ceil = Math.ceil; +var exp = Math.exp; +var log = Math.log; +var pow = Math.pow; +var sin = Math.sin; +var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; +var sqrt = Math.sqrt; +var tan = Math.tan; + +function acos(x) { + return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); +} + +function asin(x) { + return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x); +} + +function haversin(x) { + return (x = sin(x / 2)) * x; +} + +function noop() {} + +function streamGeometry(geometry, stream) { + if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { + streamGeometryType[geometry.type](geometry, stream); + } +} + +var streamObjectType = { + Feature: function(object, stream) { + streamGeometry(object.geometry, stream); + }, + FeatureCollection: function(object, stream) { + var features = object.features, i = -1, n = features.length; + while (++i < n) streamGeometry(features[i].geometry, stream); + } +}; + +var streamGeometryType = { + Sphere: function(object, stream) { + stream.sphere(); + }, + Point: function(object, stream) { + object = object.coordinates; + stream.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); + }, + LineString: function(object, stream) { + streamLine(object.coordinates, stream, 0); + }, + MultiLineString: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamLine(coordinates[i], stream, 0); + }, + Polygon: function(object, stream) { + streamPolygon(object.coordinates, stream); + }, + MultiPolygon: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamPolygon(coordinates[i], stream); + }, + GeometryCollection: function(object, stream) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) streamGeometry(geometries[i], stream); + } +}; + +function streamLine(coordinates, stream, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + stream.lineStart(); + while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); + stream.lineEnd(); +} + +function streamPolygon(coordinates, stream) { + var i = -1, n = coordinates.length; + stream.polygonStart(); + while (++i < n) streamLine(coordinates[i], stream, 1); + stream.polygonEnd(); +} + +function geoStream(object, stream) { + if (object && streamObjectType.hasOwnProperty(object.type)) { + streamObjectType[object.type](object, stream); + } else { + streamGeometry(object, stream); + } +} + +var areaRingSum = adder(); + +var areaSum = adder(), + lambda00, + phi00, + lambda0, + cosPhi0, + sinPhi0; + +var areaStream = { + point: noop, + lineStart: noop, + lineEnd: noop, + polygonStart: function() { + areaRingSum.reset(); + areaStream.lineStart = areaRingStart; + areaStream.lineEnd = areaRingEnd; + }, + polygonEnd: function() { + var areaRing = +areaRingSum; + areaSum.add(areaRing < 0 ? tau + areaRing : areaRing); + this.lineStart = this.lineEnd = this.point = noop; + }, + sphere: function() { + areaSum.add(tau); + } +}; + +function areaRingStart() { + areaStream.point = areaPointFirst; +} + +function areaRingEnd() { + areaPoint(lambda00, phi00); +} + +function areaPointFirst(lambda, phi) { + areaStream.point = areaPoint; + lambda00 = lambda, phi00 = phi; + lambda *= radians, phi *= radians; + lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi); +} + +function areaPoint(lambda, phi) { + lambda *= radians, phi *= radians; + phi = phi / 2 + quarterPi; // half the angular distance from south pole + + // Spherical excess E for a spherical triangle with vertices: south pole, + // previous point, current point. Uses a formula derived from Cagnoli’s + // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). + var dLambda = lambda - lambda0, + sdLambda = dLambda >= 0 ? 1 : -1, + adLambda = sdLambda * dLambda, + cosPhi = cos(phi), + sinPhi = sin(phi), + k = sinPhi0 * sinPhi, + u = cosPhi0 * cosPhi + k * cos(adLambda), + v = k * sdLambda * sin(adLambda); + areaRingSum.add(atan2(v, u)); + + // Advance the previous points. + lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; +} + +function area(object) { + areaSum.reset(); + geoStream(object, areaStream); + return areaSum * 2; +} + +function spherical(cartesian) { + return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])]; +} + +function cartesian(spherical) { + var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi); + return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)]; +} + +function cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +function cartesianCross(a, b) { + 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]]; +} + +// TODO return a +function cartesianAddInPlace(a, b) { + a[0] += b[0], a[1] += b[1], a[2] += b[2]; +} + +function cartesianScale(vector, k) { + return [vector[0] * k, vector[1] * k, vector[2] * k]; +} + +// TODO return d +function cartesianNormalizeInPlace(d) { + var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l, d[1] /= l, d[2] /= l; +} + +var lambda0$1, phi0, lambda1, phi1, // bounds + lambda2, // previous lambda-coordinate + lambda00$1, phi00$1, // first point + p0, // previous 3D point + deltaSum = adder(), + ranges, + range; + +var boundsStream = { + point: boundsPoint, + lineStart: boundsLineStart, + lineEnd: boundsLineEnd, + polygonStart: function() { + boundsStream.point = boundsRingPoint; + boundsStream.lineStart = boundsRingStart; + boundsStream.lineEnd = boundsRingEnd; + deltaSum.reset(); + areaStream.polygonStart(); + }, + polygonEnd: function() { + areaStream.polygonEnd(); + boundsStream.point = boundsPoint; + boundsStream.lineStart = boundsLineStart; + boundsStream.lineEnd = boundsLineEnd; + if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); + else if (deltaSum > epsilon) phi1 = 90; + else if (deltaSum < -epsilon) phi0 = -90; + range[0] = lambda0$1, range[1] = lambda1; + }, + sphere: function() { + lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); + } +}; + +function boundsPoint(lambda, phi) { + ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; +} + +function linePoint(lambda, phi) { + var p = cartesian([lambda * radians, phi * radians]); + if (p0) { + var normal = cartesianCross(p0, p), + equatorial = [normal[1], -normal[0], 0], + inflection = cartesianCross(equatorial, normal); + cartesianNormalizeInPlace(inflection); + inflection = spherical(inflection); + var delta = lambda - lambda2, + sign$$1 = delta > 0 ? 1 : -1, + lambdai = inflection[0] * degrees * sign$$1, + phii, + antimeridian = abs(delta) > 180; + if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { + phii = inflection[1] * degrees; + if (phii > phi1) phi1 = phii; + } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { + phii = -inflection[1] * degrees; + if (phii < phi0) phi0 = phii; + } else { + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + } + if (antimeridian) { + if (lambda < lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } else { + if (lambda1 >= lambda0$1) { + if (lambda < lambda0$1) lambda0$1 = lambda; + if (lambda > lambda1) lambda1 = lambda; + } else { + if (lambda > lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } + } + } else { + ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); + } + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + p0 = p, lambda2 = lambda; +} + +function boundsLineStart() { + boundsStream.point = linePoint; +} + +function boundsLineEnd() { + range[0] = lambda0$1, range[1] = lambda1; + boundsStream.point = boundsPoint; + p0 = null; +} + +function boundsRingPoint(lambda, phi) { + if (p0) { + var delta = lambda - lambda2; + deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); + } else { + lambda00$1 = lambda, phi00$1 = phi; + } + areaStream.point(lambda, phi); + linePoint(lambda, phi); +} + +function boundsRingStart() { + areaStream.lineStart(); +} + +function boundsRingEnd() { + boundsRingPoint(lambda00$1, phi00$1); + areaStream.lineEnd(); + if (abs(deltaSum) > epsilon) lambda0$1 = -(lambda1 = 180); + range[0] = lambda0$1, range[1] = lambda1; + p0 = null; +} + +// Finds the left-right distance between two longitudes. +// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want +// the distance between ±180° to be 360°. +function angle(lambda0, lambda1) { + return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; +} + +function rangeCompare(a, b) { + return a[0] - b[0]; +} + +function rangeContains(range, x) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; +} + +function bounds(feature) { + var i, n, a, b, merged, deltaMax, delta; + + phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); + ranges = []; + geoStream(feature, boundsStream); + + // First, sort ranges by their minimum longitudes. + if (n = ranges.length) { + ranges.sort(rangeCompare); + + // Then, merge any ranges that overlap. + for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { + b = ranges[i]; + if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } + + // Finally, find the largest gap between the merged ranges. + // The final bounding box will be the inverse of this gap. + for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { + b = merged[i]; + if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; + } + } + + ranges = range = null; + + return lambda0$1 === Infinity || phi0 === Infinity + ? [[NaN, NaN], [NaN, NaN]] + : [[lambda0$1, phi0], [lambda1, phi1]]; +} + +var W0, W1, + X0, Y0, Z0, + X1, Y1, Z1, + X2, Y2, Z2, + lambda00$2, phi00$2, // first point + x0, y0, z0; // previous point + +var centroidStream = { + sphere: noop, + point: centroidPoint, + lineStart: centroidLineStart, + lineEnd: centroidLineEnd, + polygonStart: function() { + centroidStream.lineStart = centroidRingStart; + centroidStream.lineEnd = centroidRingEnd; + }, + polygonEnd: function() { + centroidStream.lineStart = centroidLineStart; + centroidStream.lineEnd = centroidLineEnd; + } +}; + +// Arithmetic mean of Cartesian vectors. +function centroidPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos(phi); + centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)); +} + +function centroidPointCartesian(x, y, z) { + ++W0; + X0 += (x - X0) / W0; + Y0 += (y - Y0) / W0; + Z0 += (z - Z0) / W0; +} + +function centroidLineStart() { + centroidStream.point = centroidLinePointFirst; +} + +function centroidLinePointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos(phi); + x0 = cosPhi * cos(lambda); + y0 = cosPhi * sin(lambda); + z0 = sin(phi); + centroidStream.point = centroidLinePoint; + centroidPointCartesian(x0, y0, z0); +} + +function centroidLinePoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos(phi), + x = cosPhi * cos(lambda), + y = cosPhi * sin(lambda), + z = sin(phi), + 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); + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +function centroidLineEnd() { + centroidStream.point = centroidPoint; +} + +// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, +// J. Applied Mechanics 42, 239 (1975). +function centroidRingStart() { + centroidStream.point = centroidRingPointFirst; +} + +function centroidRingEnd() { + centroidRingPoint(lambda00$2, phi00$2); + centroidStream.point = centroidPoint; +} + +function centroidRingPointFirst(lambda, phi) { + lambda00$2 = lambda, phi00$2 = phi; + lambda *= radians, phi *= radians; + centroidStream.point = centroidRingPoint; + var cosPhi = cos(phi); + x0 = cosPhi * cos(lambda); + y0 = cosPhi * sin(lambda); + z0 = sin(phi); + centroidPointCartesian(x0, y0, z0); +} + +function centroidRingPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos(phi), + x = cosPhi * cos(lambda), + y = cosPhi * sin(lambda), + z = sin(phi), + cx = y0 * z - z0 * y, + cy = z0 * x - x0 * z, + cz = x0 * y - y0 * x, + m = sqrt(cx * cx + cy * cy + cz * cz), + w = asin(m), // line weight = angle + v = m && -w / m; // area weight multiplier + X2 += v * cx; + Y2 += v * cy; + Z2 += v * cz; + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +function centroid(object) { + W0 = W1 = + X0 = Y0 = Z0 = + X1 = Y1 = Z1 = + X2 = Y2 = Z2 = 0; + geoStream(object, centroidStream); + + var x = X2, + y = Y2, + z = Z2, + m = x * x + y * y + z * z; + + // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. + if (m < epsilon2) { + x = X1, y = Y1, z = Z1; + // If the feature has zero length, fall back to arithmetic mean of point vectors. + if (W1 < epsilon) x = X0, y = Y0, z = Z0; + m = x * x + y * y + z * z; + // If the feature still has an undefined ccentroid, then return. + if (m < epsilon2) return [NaN, NaN]; + } + + return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees]; +} + +function constant(x) { + return function() { + return x; + }; +} + +function compose(a, b) { + + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } + + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; + + return compose; +} + +function rotationIdentity(lambda, phi) { + return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi]; +} + +rotationIdentity.invert = rotationIdentity; + +function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { + return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) + : rotationLambda(deltaLambda)) + : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) + : rotationIdentity); +} + +function forwardRotationLambda(deltaLambda) { + return function(lambda, phi) { + return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi]; + }; +} + +function rotationLambda(deltaLambda) { + var rotation = forwardRotationLambda(deltaLambda); + rotation.invert = forwardRotationLambda(-deltaLambda); + return rotation; +} + +function rotationPhiGamma(deltaPhi, deltaGamma) { + var cosDeltaPhi = cos(deltaPhi), + sinDeltaPhi = sin(deltaPhi), + cosDeltaGamma = cos(deltaGamma), + sinDeltaGamma = sin(deltaGamma); + + function rotation(lambda, phi) { + var cosPhi = cos(phi), + x = cos(lambda) * cosPhi, + y = sin(lambda) * cosPhi, + z = sin(phi), + k = z * cosDeltaPhi + x * sinDeltaPhi; + return [ + atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), + asin(k * cosDeltaGamma + y * sinDeltaGamma) + ]; + } + + rotation.invert = function(lambda, phi) { + var cosPhi = cos(phi), + x = cos(lambda) * cosPhi, + y = sin(lambda) * cosPhi, + z = sin(phi), + k = z * cosDeltaGamma - y * sinDeltaGamma; + return [ + atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), + asin(k * cosDeltaPhi - x * sinDeltaPhi) + ]; + }; + + return rotation; +} + +function rotation(rotate) { + rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); + + function forward(coordinates) { + coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates; + } + + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates; + }; + + return forward; +} + +// Generates a circle centered at [0°, 0°], with a given radius and precision. +function circleStream(stream, radius, delta, direction, t0, t1) { + if (!delta) return; + var cosRadius = cos(radius), + sinRadius = sin(radius), + step = direction * delta; + if (t0 == null) { + t0 = radius + direction * tau; + t1 = radius - step / 2; + } else { + t0 = circleRadius(cosRadius, t0); + t1 = circleRadius(cosRadius, t1); + if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau; + } + for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { + point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]); + stream.point(point[0], point[1]); + } +} + +// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. +function circleRadius(cosRadius, point) { + point = cartesian(point), point[0] -= cosRadius; + cartesianNormalizeInPlace(point); + var radius = acos(-point[1]); + return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau; +} + +function circle() { + var center = constant([0, 0]), + radius = constant(90), + precision = constant(6), + ring, + rotate, + stream = {point: point}; + + function point(x, y) { + ring.push(x = rotate(x, y)); + x[0] *= degrees, x[1] *= degrees; + } + + function circle() { + var c = center.apply(this, arguments), + r = radius.apply(this, arguments) * radians, + p = precision.apply(this, arguments) * radians; + ring = []; + rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert; + circleStream(stream, r, p, 1); + c = {type: "Polygon", coordinates: [ring]}; + ring = rotate = null; + return c; + } + + circle.center = function(_) { + return arguments.length ? (center = typeof _ === "function" ? _ : constant([+_[0], +_[1]]), circle) : center; + }; + + circle.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), circle) : radius; + }; + + circle.precision = function(_) { + return arguments.length ? (precision = typeof _ === "function" ? _ : constant(+_), circle) : precision; + }; + + return circle; +} + +function clipBuffer() { + var lines = [], + line; + return { + point: function(x, y) { + line.push([x, y]); + }, + lineStart: function() { + lines.push(line = []); + }, + lineEnd: noop, + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + }, + result: function() { + var result = lines; + lines = []; + line = null; + return result; + } + }; +} + +function pointEqual(a, b) { + return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon; +} + +function Intersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; // another intersection + this.e = entry; // is an entry? + this.v = false; // visited + this.n = this.p = null; // next & previous +} + +// A generalized polygon clipping algorithm: given a polygon that has been cut +// into its visible line segments, and rejoins the segments by interpolating +// along the clip edge. +function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { + var subject = [], + clip = [], + i, + n; + + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n], x; + + // If the first and last points of a segment are coincident, then treat as a + // closed ring. TODO if all rings are closed, then the winding order of the + // exterior ring should be checked. + if (pointEqual(p0, p1)) { + stream.lineStart(); + for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); + stream.lineEnd(); + return; + } + + subject.push(x = new Intersection(p0, segment, null, true)); + clip.push(x.o = new Intersection(p0, null, x, false)); + subject.push(x = new Intersection(p1, segment, null, false)); + clip.push(x.o = new Intersection(p1, null, x, true)); + }); + + if (!subject.length) return; + + clip.sort(compareIntersection); + link(subject); + link(clip); + + for (i = 0, n = clip.length; i < n; ++i) { + clip[i].e = startInside = !startInside; + } + + var start = subject[0], + points, + point; + + while (1) { + // Find first unvisited intersection. + var current = start, + isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + stream.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, stream); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, stream); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + stream.lineEnd(); + } +} + +function link(array) { + if (!(n = array.length)) return; + var n, + i = 0, + a = array[0], + b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; +} + +var sum = adder(); + +function longitude(point) { + if (abs(point[0]) <= pi) + return point[0]; + else + return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi); +} + +function polygonContains(polygon, point) { + var lambda = longitude(point), + phi = point[1], + sinPhi = sin(phi), + normal = [sin(lambda), -cos(lambda), 0], + angle = 0, + winding = 0; + + sum.reset(); + + if (sinPhi === 1) phi = halfPi + epsilon; + else if (sinPhi === -1) phi = -halfPi - epsilon; + + for (var i = 0, n = polygon.length; i < n; ++i) { + if (!(m = (ring = polygon[i]).length)) continue; + var ring, + m, + point0 = ring[m - 1], + lambda0 = longitude(point0), + phi0 = point0[1] / 2 + quarterPi, + sinPhi0 = sin(phi0), + cosPhi0 = cos(phi0); + + for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { + var point1 = ring[j], + lambda1 = longitude(point1), + phi1 = point1[1] / 2 + quarterPi, + sinPhi1 = sin(phi1), + cosPhi1 = cos(phi1), + delta = lambda1 - lambda0, + sign$$1 = delta >= 0 ? 1 : -1, + absDelta = sign$$1 * delta, + antimeridian = absDelta > pi, + k = sinPhi0 * sinPhi1; + + sum.add(atan2(k * sign$$1 * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta))); + angle += antimeridian ? delta + sign$$1 * tau : delta; + + // Are the longitudes either side of the point’s meridian (lambda), + // and are the latitudes smaller than the parallel (phi)? + if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { + var arc = cartesianCross(cartesian(point0), cartesian(point1)); + cartesianNormalizeInPlace(arc); + var intersection = cartesianCross(normal, arc); + cartesianNormalizeInPlace(intersection); + var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]); + if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { + winding += antimeridian ^ delta >= 0 ? 1 : -1; + } + } + } + } + + // First, determine whether the South pole is inside or outside: + // + // It is inside if: + // * the polygon winds around it in a clockwise direction. + // * the polygon does not (cumulatively) wind around it, but has a negative + // (counter-clockwise) area. + // + // Second, count the (signed) number of times a segment crosses a lambda + // from the point to the South pole. If it is zero, then the point is the + // same side as the South pole. + + return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1); +} + +function clip(pointVisible, clipLine, interpolate, start) { + return function(sink) { + var line = clipLine(sink), + ringBuffer = clipBuffer(), + ringSink = clipLine(ringBuffer), + polygonStarted = false, + polygon, + segments, + ring; + + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = d3Array.merge(segments); + var startInside = polygonContains(polygon, start); + if (segments.length) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + clipRejoin(segments, compareIntersection, startInside, interpolate, sink); + } else if (startInside) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + } + if (polygonStarted) sink.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + sink.polygonStart(); + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + sink.polygonEnd(); + } + }; + + function point(lambda, phi) { + if (pointVisible(lambda, phi)) sink.point(lambda, phi); + } + + function pointLine(lambda, phi) { + line.point(lambda, phi); + } + + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } + + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + + function pointRing(lambda, phi) { + ring.push([lambda, phi]); + ringSink.point(lambda, phi); + } + + function ringStart() { + ringSink.lineStart(); + ring = []; + } + + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringSink.lineEnd(); + + var clean = ringSink.clean(), + ringSegments = ringBuffer.result(), + i, n = ringSegments.length, m, + segment, + point; + + ring.pop(); + polygon.push(ring); + ring = null; + + if (!n) return; + + // No intersections. + if (clean & 1) { + segment = ringSegments[0]; + if ((m = segment.length - 1) > 0) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); + sink.lineEnd(); + } + return; + } + + // Rejoin connected segments. + // TODO reuse ringBuffer.rejoin()? + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + + segments.push(ringSegments.filter(validSegment)); + } + + return clip; + }; +} + +function validSegment(segment) { + return segment.length > 1; +} + +// Intersections are sorted along the clip edge. For both antimeridian cutting +// and circle clipping, the same comparison is used. +function compareIntersection(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1]) + - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]); +} + +var clipAntimeridian = clip( + function() { return true; }, + clipAntimeridianLine, + clipAntimeridianInterpolate, + [-pi, -halfPi] +); + +// Takes a line and cuts into visible segments. Return values: 0 - there were +// intersections or the line was empty; 1 - no intersections; 2 - there were +// intersections, and the first and last segments should be rejoined. +function clipAntimeridianLine(stream) { + var lambda0 = NaN, + phi0 = NaN, + sign0 = NaN, + clean; // no intersections + + return { + lineStart: function() { + stream.lineStart(); + clean = 1; + }, + point: function(lambda1, phi1) { + var sign1 = lambda1 > 0 ? pi : -pi, + delta = abs(lambda1 - lambda0); + if (abs(delta - pi) < epsilon) { // line crosses a pole + stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + stream.point(lambda1, phi0); + clean = 0; + } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian + if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies + if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon; + phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + clean = 0; + } + stream.point(lambda0 = lambda1, phi0 = phi1); + sign0 = sign1; + }, + lineEnd: function() { + stream.lineEnd(); + lambda0 = phi0 = NaN; + }, + clean: function() { + return 2 - clean; // if intersections, rejoin first and last segments + } + }; +} + +function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { + var cosPhi0, + cosPhi1, + sinLambda0Lambda1 = sin(lambda0 - lambda1); + return abs(sinLambda0Lambda1) > epsilon + ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1) + - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0)) + / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) + : (phi0 + phi1) / 2; +} + +function clipAntimeridianInterpolate(from, to, direction, stream) { + var phi; + if (from == null) { + phi = direction * halfPi; + stream.point(-pi, phi); + stream.point(0, phi); + stream.point(pi, phi); + stream.point(pi, 0); + stream.point(pi, -phi); + stream.point(0, -phi); + stream.point(-pi, -phi); + stream.point(-pi, 0); + stream.point(-pi, phi); + } else if (abs(from[0] - to[0]) > epsilon) { + var lambda = from[0] < to[0] ? pi : -pi; + phi = direction * lambda / 2; + stream.point(-lambda, phi); + stream.point(0, phi); + stream.point(lambda, phi); + } else { + stream.point(to[0], to[1]); + } +} + +function clipCircle(radius) { + var cr = cos(radius), + delta = 6 * radians, + smallRadius = cr > 0, + notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case + + function interpolate(from, to, direction, stream) { + circleStream(stream, radius, delta, direction, from, to); + } + + function visible(lambda, phi) { + return cos(lambda) * cos(phi) > cr; + } + + // Takes a line and cuts into visible segments. Return values used for polygon + // clipping: 0 - there were intersections or the line was empty; 1 - no + // intersections 2 - there were intersections, and the first and last segments + // should be rejoined. + function clipLine(stream) { + var point0, // previous point + c0, // code for previous point + v0, // visibility of previous point + v00, // visibility of first point + clean; // no intersections + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(lambda, phi) { + var point1 = [lambda, phi], + point2, + v = visible(lambda, phi), + c = smallRadius + ? v ? 0 : code(lambda, phi) + : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0; + if (!point0 && (v00 = v0 = v)) stream.lineStart(); + // Handle degeneracies. + // TODO ignore if not clipping polygons. + if (v !== v0) { + point2 = intersect(point0, point1); + if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) { + point1[0] += epsilon; + point1[1] += epsilon; + v = visible(point1[0], point1[1]); + } + } + if (v !== v0) { + clean = 0; + if (v) { + // outside going in + stream.lineStart(); + point2 = intersect(point1, point0); + stream.point(point2[0], point2[1]); + } else { + // inside going out + point2 = intersect(point0, point1); + stream.point(point2[0], point2[1]); + stream.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + // If the codes for two points are different, or are both zero, + // and there this segment intersects with the small circle. + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + } else { + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + } + } + } + if (v && (!point0 || !pointEqual(point0, point1))) { + stream.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) stream.lineEnd(); + point0 = null; + }, + // Rejoin first and last segments if there were intersections and the first + // and last points were visible. + clean: function() { + return clean | ((v00 && v0) << 1); + } + }; + } + + // Intersects the great circle between a and b with the clip circle. + function intersect(a, b, two) { + var pa = cartesian(a), + pb = cartesian(b); + + // We have two planes, n1.p = d1 and n2.p = d2. + // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). + var n1 = [1, 0, 0], // normal + n2 = cartesianCross(pa, pb), + n2n2 = cartesianDot(n2, n2), + n1n2 = n2[0], // cartesianDot(n1, n2), + determinant = n2n2 - n1n2 * n1n2; + + // Two polar points. + if (!determinant) return !two && a; + + var c1 = cr * n2n2 / determinant, + c2 = -cr * n1n2 / determinant, + n1xn2 = cartesianCross(n1, n2), + A = cartesianScale(n1, c1), + B = cartesianScale(n2, c2); + cartesianAddInPlace(A, B); + + // Solve |p(t)|^2 = 1. + var u = n1xn2, + w = cartesianDot(A, u), + uu = cartesianDot(u, u), + t2 = w * w - uu * (cartesianDot(A, A) - 1); + + if (t2 < 0) return; + + var t = sqrt(t2), + q = cartesianScale(u, (-w - t) / uu); + cartesianAddInPlace(q, A); + q = spherical(q); + + if (!two) return q; + + // Two intersection points. + var lambda0 = a[0], + lambda1 = b[0], + phi0 = a[1], + phi1 = b[1], + z; + + if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; + + var delta = lambda1 - lambda0, + polar = abs(delta - pi) < epsilon, + meridian = polar || delta < epsilon; + + if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; + + // Check that the first point is between a and b. + if (meridian + ? polar + ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1) + : phi0 <= q[1] && q[1] <= phi1 + : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) { + var q1 = cartesianScale(u, (-w + t) / uu); + cartesianAddInPlace(q1, A); + return [q, spherical(q1)]; + } + } + + // Generates a 4-bit vector representing the location of a point relative to + // the small circle's bounding box. + function code(lambda, phi) { + var r = smallRadius ? radius : pi - radius, + code = 0; + if (lambda < -r) code |= 1; // left + else if (lambda > r) code |= 2; // right + if (phi < -r) code |= 4; // below + else if (phi > r) code |= 8; // above + return code; + } + + return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]); +} + +function clipLine(a, b, x0, y0, x1, y1) { + var ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; + if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; + return true; +} + +var clipMax = 1e9, clipMin = -clipMax; + +// TODO Use d3-polygon’s polygonContains here for the ring check? +// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? + +function clipRectangle(x0, y0, x1, y1) { + + function visible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + + function interpolate(from, to, direction, stream) { + var a = 0, a1 = 0; + if (from == null + || (a = corner(from, direction)) !== (a1 = corner(to, direction)) + || comparePoint(from, to) < 0 ^ direction > 0) { + do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + while ((a = (a + direction + 4) % 4) !== a1); + } else { + stream.point(to[0], to[1]); + } + } + + function corner(p, direction) { + return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3 + : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1 + : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0 + : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon + } + + function compareIntersection(a, b) { + return comparePoint(a.x, b.x); + } + + function comparePoint(a, b) { + var ca = corner(a, 1), + cb = corner(b, 1); + 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]; + } + + return function(stream) { + var activeStream = stream, + bufferStream = clipBuffer(), + segments, + polygon, + ring, + x__, y__, v__, // first point + x_, y_, v_, // previous point + first, + clean; + + var clipStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: polygonStart, + polygonEnd: polygonEnd + }; + + function point(x, y) { + if (visible(x, y)) activeStream.point(x, y); + } + + function polygonInside() { + var winding = 0; + + for (var i = 0, n = polygon.length; i < n; ++i) { + for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { + a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; + if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } + else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } + } + } + + return winding; + } + + // Buffer geometry within a polygon and then clip it en masse. + function polygonStart() { + activeStream = bufferStream, segments = [], polygon = [], clean = true; + } + + function polygonEnd() { + var startInside = polygonInside(), + cleanInside = clean && startInside, + visible = (segments = d3Array.merge(segments)).length; + if (cleanInside || visible) { + stream.polygonStart(); + if (cleanInside) { + stream.lineStart(); + interpolate(null, null, 1, stream); + stream.lineEnd(); + } + if (visible) { + clipRejoin(segments, compareIntersection, startInside, interpolate, stream); + } + stream.polygonEnd(); + } + activeStream = stream, segments = polygon = ring = null; + } + + function lineStart() { + clipStream.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } + + // TODO rather than special-case polygons, simply handle them separately. + // Ideally, coincident intersection points should be jittered to avoid + // clipping issues. + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferStream.rejoin(); + segments.push(bufferStream.result()); + } + clipStream.point = point; + if (v_) activeStream.lineEnd(); + } + + function linePoint(x, y) { + var v = visible(x, y); + if (polygon) ring.push([x, y]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + } + } else { + if (v && v_) activeStream.point(x, y); + else { + var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], + b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; + if (clipLine(a, b, x0, y0, x1, y1)) { + if (!v_) { + activeStream.lineStart(); + activeStream.point(a[0], a[1]); + } + activeStream.point(b[0], b[1]); + if (!v) activeStream.lineEnd(); + clean = false; + } else if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } + + return clipStream; + }; +} + +function extent() { + var x0 = 0, + y0 = 0, + x1 = 960, + y1 = 500, + cache, + cacheStream, + clip; + + return clip = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream); + }, + extent: function(_) { + return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; + } + }; +} + +var lengthSum = adder(), + lambda0$2, + sinPhi0$1, + cosPhi0$1; + +var lengthStream = { + sphere: noop, + point: noop, + lineStart: lengthLineStart, + lineEnd: noop, + polygonStart: noop, + polygonEnd: noop +}; + +function lengthLineStart() { + lengthStream.point = lengthPointFirst; + lengthStream.lineEnd = lengthLineEnd; +} + +function lengthLineEnd() { + lengthStream.point = lengthStream.lineEnd = noop; +} + +function lengthPointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + lambda0$2 = lambda, sinPhi0$1 = sin(phi), cosPhi0$1 = cos(phi); + lengthStream.point = lengthPoint; +} + +function lengthPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var sinPhi = sin(phi), + cosPhi = cos(phi), + delta = abs(lambda - lambda0$2), + cosDelta = cos(delta), + sinDelta = sin(delta), + x = cosPhi * sinDelta, + y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, + z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta; + lengthSum.add(atan2(sqrt(x * x + y * y), z)); + lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi; +} + +function length(object) { + lengthSum.reset(); + geoStream(object, lengthStream); + return +lengthSum; +} + +var coordinates = [null, null], + object = {type: "LineString", coordinates: coordinates}; + +function distance(a, b) { + coordinates[0] = a; + coordinates[1] = b; + return length(object); +} + +var containsObjectType = { + Feature: function(object, point) { + return containsGeometry(object.geometry, point); + }, + FeatureCollection: function(object, point) { + var features = object.features, i = -1, n = features.length; + while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; + return false; + } +}; + +var containsGeometryType = { + Sphere: function() { + return true; + }, + Point: function(object, point) { + return containsPoint(object.coordinates, point); + }, + MultiPoint: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPoint(coordinates[i], point)) return true; + return false; + }, + LineString: function(object, point) { + return containsLine(object.coordinates, point); + }, + MultiLineString: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsLine(coordinates[i], point)) return true; + return false; + }, + Polygon: function(object, point) { + return containsPolygon(object.coordinates, point); + }, + MultiPolygon: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPolygon(coordinates[i], point)) return true; + return false; + }, + GeometryCollection: function(object, point) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) if (containsGeometry(geometries[i], point)) return true; + return false; + } +}; + +function containsGeometry(geometry, point) { + return geometry && containsGeometryType.hasOwnProperty(geometry.type) + ? containsGeometryType[geometry.type](geometry, point) + : false; +} + +function containsPoint(coordinates, point) { + return distance(coordinates, point) === 0; +} + +function containsLine(coordinates, point) { + var ao, bo, ab; + for (var i = 0, n = coordinates.length; i < n; i++) { + bo = distance(coordinates[i], point); + if (bo === 0) return true; + if (i > 0) { + ab = distance(coordinates[i], coordinates[i - 1]); + if ( + ab > 0 && + ao <= ab && + bo <= ab && + (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab + ) + return true; + } + ao = bo; + } + return false; +} + +function containsPolygon(coordinates, point) { + return !!polygonContains(coordinates.map(ringRadians), pointRadians(point)); +} + +function ringRadians(ring) { + return ring = ring.map(pointRadians), ring.pop(), ring; +} + +function pointRadians(point) { + return [point[0] * radians, point[1] * radians]; +} + +function contains(object, point) { + return (object && containsObjectType.hasOwnProperty(object.type) + ? containsObjectType[object.type] + : containsGeometry)(object, point); +} + +function graticuleX(y0, y1, dy) { + var y = d3Array.range(y0, y1 - epsilon, dy).concat(y1); + return function(x) { return y.map(function(y) { return [x, y]; }); }; +} + +function graticuleY(x0, x1, dx) { + var x = d3Array.range(x0, x1 - epsilon, dx).concat(x1); + return function(y) { return x.map(function(x) { return [x, y]; }); }; +} + +function graticule() { + var x1, x0, X1, X0, + y1, y0, Y1, Y0, + dx = 10, dy = dx, DX = 90, DY = 360, + x, y, X, Y, + precision = 2.5; + + function graticule() { + return {type: "MultiLineString", coordinates: lines()}; + } + + function lines() { + return d3Array.range(ceil(X0 / DX) * DX, X1, DX).map(X) + .concat(d3Array.range(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) + .concat(d3Array.range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x)) + .concat(d3Array.range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y)); + } + + graticule.lines = function() { + return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); + }; + + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ + X(X0).concat( + Y(Y1).slice(1), + X(X1).reverse().slice(1), + Y(Y0).reverse().slice(1)) + ] + }; + }; + + graticule.extent = function(_) { + if (!arguments.length) return graticule.extentMinor(); + return graticule.extentMajor(_).extentMinor(_); + }; + + graticule.extentMajor = function(_) { + if (!arguments.length) return [[X0, Y0], [X1, Y1]]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; + + graticule.extentMinor = function(_) { + if (!arguments.length) return [[x0, y0], [x1, y1]]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; + + graticule.step = function(_) { + if (!arguments.length) return graticule.stepMinor(); + return graticule.stepMajor(_).stepMinor(_); + }; + + graticule.stepMajor = function(_) { + if (!arguments.length) return [DX, DY]; + DX = +_[0], DY = +_[1]; + return graticule; + }; + + graticule.stepMinor = function(_) { + if (!arguments.length) return [dx, dy]; + dx = +_[0], dy = +_[1]; + return graticule; + }; + + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = graticuleX(y0, y1, 90); + y = graticuleY(x0, x1, precision); + X = graticuleX(Y0, Y1, 90); + Y = graticuleY(X0, X1, precision); + return graticule; + }; + + return graticule + .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]]) + .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]); +} + +function graticule10() { + return graticule()(); +} + +function interpolate(a, b) { + var x0 = a[0] * radians, + y0 = a[1] * radians, + x1 = b[0] * radians, + y1 = b[1] * radians, + cy0 = cos(y0), + sy0 = sin(y0), + cy1 = cos(y1), + sy1 = sin(y1), + kx0 = cy0 * cos(x0), + ky0 = cy0 * sin(x0), + kx1 = cy1 * cos(x1), + ky1 = cy1 * sin(x1), + d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), + k = sin(d); + + var interpolate = d ? function(t) { + var B = sin(t *= d) / k, + A = sin(d - t) / k, + x = A * kx0 + B * kx1, + y = A * ky0 + B * ky1, + z = A * sy0 + B * sy1; + return [ + atan2(y, x) * degrees, + atan2(z, sqrt(x * x + y * y)) * degrees + ]; + } : function() { + return [x0 * degrees, y0 * degrees]; + }; + + interpolate.distance = d; + + return interpolate; +} + +function identity(x) { + return x; +} + +var areaSum$1 = adder(), + areaRingSum$1 = adder(), + x00, + y00, + x0$1, + y0$1; + +var areaStream$1 = { + point: noop, + lineStart: noop, + lineEnd: noop, + polygonStart: function() { + areaStream$1.lineStart = areaRingStart$1; + areaStream$1.lineEnd = areaRingEnd$1; + }, + polygonEnd: function() { + areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop; + areaSum$1.add(abs(areaRingSum$1)); + areaRingSum$1.reset(); + }, + result: function() { + var area = areaSum$1 / 2; + areaSum$1.reset(); + return area; + } +}; + +function areaRingStart$1() { + areaStream$1.point = areaPointFirst$1; +} + +function areaPointFirst$1(x, y) { + areaStream$1.point = areaPoint$1; + x00 = x0$1 = x, y00 = y0$1 = y; +} + +function areaPoint$1(x, y) { + areaRingSum$1.add(y0$1 * x - x0$1 * y); + x0$1 = x, y0$1 = y; +} + +function areaRingEnd$1() { + areaPoint$1(x00, y00); +} + +var x0$2 = Infinity, + y0$2 = x0$2, + x1 = -x0$2, + y1 = x1; + +var boundsStream$1 = { + point: boundsPoint$1, + lineStart: noop, + lineEnd: noop, + polygonStart: noop, + polygonEnd: noop, + result: function() { + var bounds = [[x0$2, y0$2], [x1, y1]]; + x1 = y1 = -(y0$2 = x0$2 = Infinity); + return bounds; + } +}; + +function boundsPoint$1(x, y) { + if (x < x0$2) x0$2 = x; + if (x > x1) x1 = x; + if (y < y0$2) y0$2 = y; + if (y > y1) y1 = y; +} + +// TODO Enforce positive area for exterior, negative area for interior? + +var X0$1 = 0, + Y0$1 = 0, + Z0$1 = 0, + X1$1 = 0, + Y1$1 = 0, + Z1$1 = 0, + X2$1 = 0, + Y2$1 = 0, + Z2$1 = 0, + x00$1, + y00$1, + x0$3, + y0$3; + +var centroidStream$1 = { + point: centroidPoint$1, + lineStart: centroidLineStart$1, + lineEnd: centroidLineEnd$1, + polygonStart: function() { + centroidStream$1.lineStart = centroidRingStart$1; + centroidStream$1.lineEnd = centroidRingEnd$1; + }, + polygonEnd: function() { + centroidStream$1.point = centroidPoint$1; + centroidStream$1.lineStart = centroidLineStart$1; + centroidStream$1.lineEnd = centroidLineEnd$1; + }, + result: function() { + var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] + : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] + : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] + : [NaN, NaN]; + X0$1 = Y0$1 = Z0$1 = + X1$1 = Y1$1 = Z1$1 = + X2$1 = Y2$1 = Z2$1 = 0; + return centroid; + } +}; + +function centroidPoint$1(x, y) { + X0$1 += x; + Y0$1 += y; + ++Z0$1; +} + +function centroidLineStart$1() { + centroidStream$1.point = centroidPointFirstLine; +} + +function centroidPointFirstLine(x, y) { + centroidStream$1.point = centroidPointLine; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function centroidPointLine(x, y) { + var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy); + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function centroidLineEnd$1() { + centroidStream$1.point = centroidPoint$1; +} + +function centroidRingStart$1() { + centroidStream$1.point = centroidPointFirstRing; +} + +function centroidRingEnd$1() { + centroidPointRing(x00$1, y00$1); +} + +function centroidPointFirstRing(x, y) { + centroidStream$1.point = centroidPointRing; + centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); +} + +function centroidPointRing(x, y) { + var dx = x - x0$3, + dy = y - y0$3, + z = sqrt(dx * dx + dy * dy); + + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; + + z = y0$3 * x - x0$3 * y; + X2$1 += z * (x0$3 + x); + Y2$1 += z * (y0$3 + y); + Z2$1 += z * 3; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function PathContext(context) { + this._context = context; +} + +PathContext.prototype = { + _radius: 4.5, + pointRadius: function(_) { + return this._radius = _, this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._context.closePath(); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._context.moveTo(x, y); + this._point = 1; + break; + } + case 1: { + this._context.lineTo(x, y); + break; + } + default: { + this._context.moveTo(x + this._radius, y); + this._context.arc(x, y, this._radius, 0, tau); + break; + } + } + }, + result: noop +}; + +var lengthSum$1 = adder(), + lengthRing, + x00$2, + y00$2, + x0$4, + y0$4; + +var lengthStream$1 = { + point: noop, + lineStart: function() { + lengthStream$1.point = lengthPointFirst$1; + }, + lineEnd: function() { + if (lengthRing) lengthPoint$1(x00$2, y00$2); + lengthStream$1.point = noop; + }, + polygonStart: function() { + lengthRing = true; + }, + polygonEnd: function() { + lengthRing = null; + }, + result: function() { + var length = +lengthSum$1; + lengthSum$1.reset(); + return length; + } +}; + +function lengthPointFirst$1(x, y) { + lengthStream$1.point = lengthPoint$1; + x00$2 = x0$4 = x, y00$2 = y0$4 = y; +} + +function lengthPoint$1(x, y) { + x0$4 -= x, y0$4 -= y; + lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4)); + x0$4 = x, y0$4 = y; +} + +function PathString() { + this._string = []; +} + +PathString.prototype = { + _radius: 4.5, + _circle: circle$1(4.5), + pointRadius: function(_) { + if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; + return this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._string.push("Z"); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._string.push("M", x, ",", y); + this._point = 1; + break; + } + case 1: { + this._string.push("L", x, ",", y); + break; + } + default: { + if (this._circle == null) this._circle = circle$1(this._radius); + this._string.push("M", x, ",", y, this._circle); + break; + } + } + }, + result: function() { + if (this._string.length) { + var result = this._string.join(""); + this._string = []; + return result; + } else { + return null; + } + } +}; + +function circle$1(radius) { + return "m0," + radius + + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + + "z"; +} + +function index(projection, context) { + var pointRadius = 4.5, + projectionStream, + contextStream; + + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + geoStream(object, projectionStream(contextStream)); + } + return contextStream.result(); + } + + path.area = function(object) { + geoStream(object, projectionStream(areaStream$1)); + return areaStream$1.result(); + }; + + path.measure = function(object) { + geoStream(object, projectionStream(lengthStream$1)); + return lengthStream$1.result(); + }; + + path.bounds = function(object) { + geoStream(object, projectionStream(boundsStream$1)); + return boundsStream$1.result(); + }; + + path.centroid = function(object) { + geoStream(object, projectionStream(centroidStream$1)); + return centroidStream$1.result(); + }; + + path.projection = function(_) { + return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection; + }; + + path.context = function(_) { + if (!arguments.length) return context; + contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return path; + }; + + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; + + return path.projection(projection).context(context); +} + +function transform(methods) { + return { + stream: transformer(methods) + }; +} + +function transformer(methods) { + return function(stream) { + var s = new TransformStream; + for (var key in methods) s[key] = methods[key]; + s.stream = stream; + return s; + }; +} + +function TransformStream() {} + +TransformStream.prototype = { + constructor: TransformStream, + point: function(x, y) { this.stream.point(x, y); }, + sphere: function() { this.stream.sphere(); }, + lineStart: function() { this.stream.lineStart(); }, + lineEnd: function() { this.stream.lineEnd(); }, + polygonStart: function() { this.stream.polygonStart(); }, + polygonEnd: function() { this.stream.polygonEnd(); } +}; + +function fit(projection, fitBounds, object) { + var clip = projection.clipExtent && projection.clipExtent(); + projection.scale(150).translate([0, 0]); + if (clip != null) projection.clipExtent(null); + geoStream(object, projection.stream(boundsStream$1)); + fitBounds(boundsStream$1.result()); + if (clip != null) projection.clipExtent(clip); + return projection; +} + +function fitExtent(projection, extent, object) { + return fit(projection, function(b) { + var w = extent[1][0] - extent[0][0], + h = extent[1][1] - extent[0][1], + k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), + x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, + y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitSize(projection, size, object) { + return fitExtent(projection, [[0, 0], size], object); +} + +function fitWidth(projection, width, object) { + return fit(projection, function(b) { + var w = +width, + k = w / (b[1][0] - b[0][0]), + x = (w - k * (b[1][0] + b[0][0])) / 2, + y = -k * b[0][1]; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitHeight(projection, height, object) { + return fit(projection, function(b) { + var h = +height, + k = h / (b[1][1] - b[0][1]), + x = -k * b[0][0], + y = (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +var maxDepth = 16, // maximum depth of subdivision + cosMinDistance = cos(30 * radians); // cos(minimum angular distance) + +function resample(project, delta2) { + return +delta2 ? resample$1(project, delta2) : resampleNone(project); +} + +function resampleNone(project) { + return transformer({ + point: function(x, y) { + x = project(x, y); + this.stream.point(x[0], x[1]); + } + }); +} + +function resample$1(project, delta2) { + + function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, + dy = y1 - y0, + d2 = dx * dx + dy * dy; + if (d2 > 4 * delta2 && depth--) { + var a = a0 + a1, + b = b0 + b1, + c = c0 + c1, + m = sqrt(a * a + b * b + c * c), + phi2 = asin(c /= m), + lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a), + p = project(lambda2, phi2), + x2 = p[0], + y2 = p[1], + dx2 = x2 - x0, + dy2 = y2 - y0, + dz = dy * dx2 - dx * dy2; + if (dz * dz / d2 > delta2 // perpendicular projected distance + || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end + || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); + } + } + } + return function(stream) { + var lambda00, x00, y00, a00, b00, c00, // first point + lambda0, x0, y0, a0, b0, c0; // previous point + + var resampleStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, + polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } + }; + + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } + + function lineStart() { + x0 = NaN; + resampleStream.point = linePoint; + stream.lineStart(); + } + + function linePoint(lambda, phi) { + var c = cartesian([lambda, phi]), p = project(lambda, phi); + 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); + stream.point(x0, y0); + } + + function lineEnd() { + resampleStream.point = point; + stream.lineEnd(); + } + + function ringStart() { + lineStart(); + resampleStream.point = ringPoint; + resampleStream.lineEnd = ringEnd; + } + + function ringPoint(lambda, phi) { + linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resampleStream.point = linePoint; + } + + function ringEnd() { + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); + resampleStream.lineEnd = lineEnd; + lineEnd(); + } + + return resampleStream; + }; +} + +var transformRadians = transformer({ + point: function(x, y) { + this.stream.point(x * radians, y * radians); + } +}); + +function transformRotate(rotate) { + return transformer({ + point: function(x, y) { + var r = rotate(x, y); + return this.stream.point(r[0], r[1]); + } + }); +} + +function scaleTranslate(k, dx, dy) { + function transform$$1(x, y) { + return [dx + k * x, dy - k * y]; + } + transform$$1.invert = function(x, y) { + return [(x - dx) / k, (dy - y) / k]; + }; + return transform$$1; +} + +function scaleTranslateRotate(k, dx, dy, alpha) { + var cosAlpha = cos(alpha), + sinAlpha = sin(alpha), + a = cosAlpha * k, + b = sinAlpha * k, + ai = cosAlpha / k, + bi = sinAlpha / k, + ci = (sinAlpha * dy - cosAlpha * dx) / k, + fi = (sinAlpha * dx + cosAlpha * dy) / k; + function transform$$1(x, y) { + return [a * x - b * y + dx, dy - b * x - a * y]; + } + transform$$1.invert = function(x, y) { + return [ai * x - bi * y + ci, fi - bi * x - ai * y]; + }; + return transform$$1; +} + +function projection(project) { + return projectionMutator(function() { return project; })(); +} + +function projectionMutator(projectAt) { + var project, + k = 150, // scale + x = 480, y = 250, // translate + lambda = 0, phi = 0, // center + deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate + alpha = 0, // post-rotate + theta = null, preclip = clipAntimeridian, // pre-clip angle + x0 = null, y0, x1, y1, postclip = identity, // post-clip extent + delta2 = 0.5, // precision + projectResample, + projectTransform, + projectRotateTransform, + cache, + cacheStream; + + function projection(point) { + return projectRotateTransform(point[0] * radians, point[1] * radians); + } + + function invert(point) { + point = projectRotateTransform.invert(point[0], point[1]); + return point && [point[0] * degrees, point[1] * degrees]; + } + + projection.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); + }; + + projection.preclip = function(_) { + return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; + }; + + projection.postclip = function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }; + + projection.clipAngle = function(_) { + return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees; + }; + + projection.clipExtent = function(_) { + 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]]; + }; + + projection.scale = function(_) { + return arguments.length ? (k = +_, recenter()) : k; + }; + + projection.translate = function(_) { + return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; + }; + + projection.center = function(_) { + return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees]; + }; + + projection.rotate = function(_) { + 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]; + }; + + projection.angle = function(_) { + return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees; + }; + + projection.precision = function(_) { + return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2); + }; + + projection.fitExtent = function(extent, object) { + return fitExtent(projection, extent, object); + }; + + projection.fitSize = function(size, object) { + return fitSize(projection, size, object); + }; + + projection.fitWidth = function(width, object) { + return fitWidth(projection, width, object); + }; + + projection.fitHeight = function(height, object) { + return fitHeight(projection, height, object); + }; + + function recenter() { + var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), + transform$$1 = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha); + rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma); + projectTransform = compose(project, transform$$1); + projectRotateTransform = compose(rotate, projectTransform); + projectResample = resample(projectTransform, delta2); + return reset(); + } + + function reset() { + cache = cacheStream = null; + return projection; + } + + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return recenter(); + }; +} + +function conicProjection(projectAt) { + var phi0 = 0, + phi1 = pi / 3, + m = projectionMutator(projectAt), + p = m(phi0, phi1); + + p.parallels = function(_) { + return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees]; + }; + + return p; +} + +function cylindricalEqualAreaRaw(phi0) { + var cosPhi0 = cos(phi0); + + function forward(lambda, phi) { + return [lambda * cosPhi0, sin(phi) / cosPhi0]; + } + + forward.invert = function(x, y) { + return [x / cosPhi0, asin(y * cosPhi0)]; + }; + + return forward; +} + +function conicEqualAreaRaw(y0, y1) { + var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2; + + // Are the parallels symmetrical around the Equator? + if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0); + + var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n; + + function project(x, y) { + var r = sqrt(c - 2 * n * sin(y)) / n; + return [r * sin(x *= n), r0 - r * cos(x)]; + } + + project.invert = function(x, y) { + var r0y = r0 - y; + return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; + }; + + return project; +} + +function conicEqualArea() { + return conicProjection(conicEqualAreaRaw) + .scale(155.424) + .center([0, 33.6442]); +} + +function albers() { + return conicEqualArea() + .parallels([29.5, 45.5]) + .scale(1070) + .translate([480, 250]) + .rotate([96, 0]) + .center([-0.6, 38.7]); +} + +// The projections must have mutually exclusive clip regions on the sphere, +// as this will avoid emitting interleaving lines and polygons. +function multiplex(streams) { + var n = streams.length; + return { + point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, + sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, + lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, + lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, + polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, + polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } + }; +} + +// A composite projection for the United States, configured by default for +// 960×500. The projection also works quite well at 960×600 if you change the +// scale to 1285 and adjust the translate accordingly. The set of standard +// parallels for each region comes from USGS, which is published here: +// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers +function albersUsa() { + var cache, + cacheStream, + lower48 = albers(), lower48Point, + alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 + hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 + point, pointStream = {point: function(x, y) { point = [x, y]; }}; + + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + return point = null, + (lower48Point.point(x, y), point) + || (alaskaPoint.point(x, y), point) + || (hawaiiPoint.point(x, y), point); + } + + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), + t = lower48.translate(), + x = (coordinates[0] - t[0]) / k, + y = (coordinates[1] - t[1]) / k; + return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska + : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii + : lower48).invert(coordinates); + }; + + albersUsa.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); + }; + + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_), alaska.precision(_), hawaii.precision(_); + return reset(); + }; + + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; + + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; + + lower48Point = lower48 + .translate(_) + .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) + .stream(pointStream); + + alaskaPoint = alaska + .translate([x - 0.307 * k, y + 0.201 * k]) + .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]]) + .stream(pointStream); + + hawaiiPoint = hawaii + .translate([x - 0.205 * k, y + 0.212 * k]) + .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]]) + .stream(pointStream); + + return reset(); + }; + + albersUsa.fitExtent = function(extent, object) { + return fitExtent(albersUsa, extent, object); + }; + + albersUsa.fitSize = function(size, object) { + return fitSize(albersUsa, size, object); + }; + + albersUsa.fitWidth = function(width, object) { + return fitWidth(albersUsa, width, object); + }; + + albersUsa.fitHeight = function(height, object) { + return fitHeight(albersUsa, height, object); + }; + + function reset() { + cache = cacheStream = null; + return albersUsa; + } + + return albersUsa.scale(1070); +} + +function azimuthalRaw(scale) { + return function(x, y) { + var cx = cos(x), + cy = cos(y), + k = scale(cx * cy); + return [ + k * cy * sin(x), + k * sin(y) + ]; + } +} + +function azimuthalInvert(angle) { + return function(x, y) { + var z = sqrt(x * x + y * y), + c = angle(z), + sc = sin(c), + cc = cos(c); + return [ + atan2(x * sc, z * cc), + asin(z && y * sc / z) + ]; + } +} + +var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { + return sqrt(2 / (1 + cxcy)); +}); + +azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { + return 2 * asin(z / 2); +}); + +function azimuthalEqualArea() { + return projection(azimuthalEqualAreaRaw) + .scale(124.75) + .clipAngle(180 - 1e-3); +} + +var azimuthalEquidistantRaw = azimuthalRaw(function(c) { + return (c = acos(c)) && c / sin(c); +}); + +azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { + return z; +}); + +function azimuthalEquidistant() { + return projection(azimuthalEquidistantRaw) + .scale(79.4188) + .clipAngle(180 - 1e-3); +} + +function mercatorRaw(lambda, phi) { + return [lambda, log(tan((halfPi + phi) / 2))]; +} + +mercatorRaw.invert = function(x, y) { + return [x, 2 * atan(exp(y)) - halfPi]; +}; + +function mercator() { + return mercatorProjection(mercatorRaw) + .scale(961 / tau); +} + +function mercatorProjection(project) { + var m = projection(project), + center = m.center, + scale = m.scale, + translate = m.translate, + clipExtent = m.clipExtent, + x0 = null, y0, x1, y1; // clip extent + + m.scale = function(_) { + return arguments.length ? (scale(_), reclip()) : scale(); + }; + + m.translate = function(_) { + return arguments.length ? (translate(_), reclip()) : translate(); + }; + + m.center = function(_) { + return arguments.length ? (center(_), reclip()) : center(); + }; + + m.clipExtent = function(_) { + 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]]; + }; + + function reclip() { + var k = pi * scale(), + t = m(rotation(m.rotate()).invert([0, 0])); + return clipExtent(x0 == null + ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw + ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] + : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); + } + + return reclip(); +} + +function tany(y) { + return tan((halfPi + y) / 2); +} + +function conicConformalRaw(y0, y1) { + var cy0 = cos(y0), + n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)), + f = cy0 * pow(tany(y0), n) / n; + + if (!n) return mercatorRaw; + + function project(x, y) { + if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; } + else { if (y > halfPi - epsilon) y = halfPi - epsilon; } + var r = f / pow(tany(y), n); + return [r * sin(n * x), f - r * cos(n * x)]; + } + + project.invert = function(x, y) { + var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy); + return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi]; + }; + + return project; +} + +function conicConformal() { + return conicProjection(conicConformalRaw) + .scale(109.5) + .parallels([30, 30]); +} + +function equirectangularRaw(lambda, phi) { + return [lambda, phi]; +} + +equirectangularRaw.invert = equirectangularRaw; + +function equirectangular() { + return projection(equirectangularRaw) + .scale(152.63); +} + +function conicEquidistantRaw(y0, y1) { + var cy0 = cos(y0), + n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0), + g = cy0 / n + y0; + + if (abs(n) < epsilon) return equirectangularRaw; + + function project(x, y) { + var gy = g - y, nx = n * x; + return [gy * sin(nx), g - gy * cos(nx)]; + } + + project.invert = function(x, y) { + var gy = g - y; + return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)]; + }; + + return project; +} + +function conicEquidistant() { + return conicProjection(conicEquidistantRaw) + .scale(131.154) + .center([0, 13.9389]); +} + +var A1 = 1.340264, + A2 = -0.081106, + A3 = 0.000893, + A4 = 0.003796, + M = sqrt(3) / 2, + iterations = 12; + +function equalEarthRaw(lambda, phi) { + var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2; + return [ + lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), + l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) + ]; +} + +equalEarthRaw.invert = function(x, y) { + var l = y, l2 = l * l, l6 = l2 * l2 * l2; + for (var i = 0, delta, fy, fpy; i < iterations; ++i) { + fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y; + fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2); + l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2; + if (abs(delta) < epsilon2) break; + } + return [ + M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l), + asin(sin(l) / M) + ]; +}; + +function equalEarth() { + return projection(equalEarthRaw) + .scale(177.158); +} + +function gnomonicRaw(x, y) { + var cy = cos(y), k = cos(x) * cy; + return [cy * sin(x) / k, sin(y) / k]; +} + +gnomonicRaw.invert = azimuthalInvert(atan); + +function gnomonic() { + return projection(gnomonicRaw) + .scale(144.049) + .clipAngle(60); +} + +function scaleTranslate$1(kx, ky, tx, ty) { + return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({ + point: function(x, y) { + this.stream.point(x * kx + tx, y * ky + ty); + } + }); +} + +function identity$1() { + var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity, // scale, translate and reflect + x0 = null, y0, x1, y1, // clip extent + postclip = identity, + cache, + cacheStream, + projection; + + function reset() { + cache = cacheStream = null; + return projection; + } + + return projection = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = transform$$1(postclip(cacheStream = stream)); + }, + postclip: function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }, + clipExtent: function(_) { + 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]]; + }, + scale: function(_) { + return arguments.length ? (transform$$1 = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k; + }, + translate: function(_) { + return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; + }, + reflectX: function(_) { + return arguments.length ? (transform$$1 = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; + }, + reflectY: function(_) { + return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; + }, + fitExtent: function(extent, object) { + return fitExtent(projection, extent, object); + }, + fitSize: function(size, object) { + return fitSize(projection, size, object); + }, + fitWidth: function(width, object) { + return fitWidth(projection, width, object); + }, + fitHeight: function(height, object) { + return fitHeight(projection, height, object); + } + }; +} + +function naturalEarth1Raw(lambda, phi) { + var phi2 = phi * phi, phi4 = phi2 * phi2; + return [ + lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), + phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) + ]; +} + +naturalEarth1Raw.invert = function(x, y) { + var phi = y, i = 25, delta; + do { + var phi2 = phi * phi, phi4 = phi2 * phi2; + phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / + (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); + } while (abs(delta) > epsilon && --i > 0); + return [ + x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), + phi + ]; +}; + +function naturalEarth1() { + return projection(naturalEarth1Raw) + .scale(175.295); +} + +function orthographicRaw(x, y) { + return [cos(y) * sin(x), sin(y)]; +} + +orthographicRaw.invert = azimuthalInvert(asin); + +function orthographic() { + return projection(orthographicRaw) + .scale(249.5) + .clipAngle(90 + epsilon); +} + +function stereographicRaw(x, y) { + var cy = cos(y), k = 1 + cos(x) * cy; + return [cy * sin(x) / k, sin(y) / k]; +} + +stereographicRaw.invert = azimuthalInvert(function(z) { + return 2 * atan(z); +}); + +function stereographic() { + return projection(stereographicRaw) + .scale(250) + .clipAngle(142); +} + +function transverseMercatorRaw(lambda, phi) { + return [log(tan((halfPi + phi) / 2)), -lambda]; +} + +transverseMercatorRaw.invert = function(x, y) { + return [-y, 2 * atan(exp(x)) - halfPi]; +}; + +function transverseMercator() { + var m = mercatorProjection(transverseMercatorRaw), + center = m.center, + rotate = m.rotate; + + m.center = function(_) { + return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); + }; + + m.rotate = function(_) { + return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); + }; + + return rotate([0, 0, 90]) + .scale(159.155); +} + +exports.geoArea = area; +exports.geoBounds = bounds; +exports.geoCentroid = centroid; +exports.geoCircle = circle; +exports.geoClipAntimeridian = clipAntimeridian; +exports.geoClipCircle = clipCircle; +exports.geoClipExtent = extent; +exports.geoClipRectangle = clipRectangle; +exports.geoContains = contains; +exports.geoDistance = distance; +exports.geoGraticule = graticule; +exports.geoGraticule10 = graticule10; +exports.geoInterpolate = interpolate; +exports.geoLength = length; +exports.geoPath = index; +exports.geoAlbers = albers; +exports.geoAlbersUsa = albersUsa; +exports.geoAzimuthalEqualArea = azimuthalEqualArea; +exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw; +exports.geoAzimuthalEquidistant = azimuthalEquidistant; +exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw; +exports.geoConicConformal = conicConformal; +exports.geoConicConformalRaw = conicConformalRaw; +exports.geoConicEqualArea = conicEqualArea; +exports.geoConicEqualAreaRaw = conicEqualAreaRaw; +exports.geoConicEquidistant = conicEquidistant; +exports.geoConicEquidistantRaw = conicEquidistantRaw; +exports.geoEqualEarth = equalEarth; +exports.geoEqualEarthRaw = equalEarthRaw; +exports.geoEquirectangular = equirectangular; +exports.geoEquirectangularRaw = equirectangularRaw; +exports.geoGnomonic = gnomonic; +exports.geoGnomonicRaw = gnomonicRaw; +exports.geoIdentity = identity$1; +exports.geoProjection = projection; +exports.geoProjectionMutator = projectionMutator; +exports.geoMercator = mercator; +exports.geoMercatorRaw = mercatorRaw; +exports.geoNaturalEarth1 = naturalEarth1; +exports.geoNaturalEarth1Raw = naturalEarth1Raw; +exports.geoOrthographic = orthographic; +exports.geoOrthographicRaw = orthographicRaw; +exports.geoStereographic = stereographic; +exports.geoStereographicRaw = stereographicRaw; +exports.geoTransverseMercator = transverseMercator; +exports.geoTransverseMercatorRaw = transverseMercatorRaw; +exports.geoRotation = rotation; +exports.geoStream = geoStream; +exports.geoTransform = transform; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{"d3-array":193}],195:[function(require,module,exports){ +'use strict'; + +exports.utils = require('./des/utils'); +exports.Cipher = require('./des/cipher'); +exports.DES = require('./des/des'); +exports.CBC = require('./des/cbc'); +exports.EDE = require('./des/ede'); + +},{"./des/cbc":196,"./des/cipher":197,"./des/des":198,"./des/ede":199,"./des/utils":200}],196:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var proto = {}; + +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) + this.iv[i] = iv[i]; +} + +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); + } + inherits(CBC, Base); + + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + + CBC.create = function create(options) { + return new CBC(options); + }; + + return CBC; +} + +exports.instantiate = instantiate; + +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; + +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) + iv[i] ^= inp[inOff + i]; + + superProto._update.call(this, iv, 0, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + out[outOff + i] ^= iv[i]; + + for (var i = 0; i < this.blockSize; i++) + iv[i] = inp[inOff + i]; + } +}; + +},{"inherits":262,"minimalistic-assert":268}],197:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); + +function Cipher(options) { + this.options = options; + + this.type = this.options.type; + this.blockSize = 8; + this._init(); + + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; +} +module.exports = Cipher; + +Cipher.prototype._init = function _init() { + // Might be overrided +}; + +Cipher.prototype.update = function update(data) { + if (data.length === 0) + return []; + + if (this.type === 'decrypt') + return this._updateDecrypt(data); + else + return this._updateEncrypt(data); +}; + +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) + this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; + + // Shift next + return min; +}; + +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; + +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = ((this.bufferOff + data.length) / this.blockSize) | 0; + var out = new Array(count * this.blockSize); + + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + + if (this.bufferOff === this.buffer.length) + outputOff += this._flushBuffer(out, outputOff); + } + + // Write blocks + var max = data.length - ((data.length - inputOff) % this.blockSize); + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } + + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) + this.buffer[this.bufferOff] = data[inputOff]; + + return out; +}; + +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); + + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } + + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); + + return out; +}; + +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) + first = this.update(buffer); + + var last; + if (this.type === 'encrypt') + last = this._finalEncrypt(); + else + last = this._finalDecrypt(); + + if (first) + return first.concat(last); + else + return last; +}; + +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) + return false; + + while (off < buffer.length) + buffer[off++] = 0; + + return true; +}; + +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) + return []; + + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; +}; + +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; + +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + + return this._unpad(out); +}; + +},{"minimalistic-assert":268}],198:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var des = require('../des'); +var utils = des.utils; +var Cipher = des.Cipher; + +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} + +function DES(options) { + Cipher.call(this, options); + + var state = new DESState(); + this._desState = state; + + this.deriveKeys(state, options.key); +} +inherits(DES, Cipher); +module.exports = DES; + +DES.create = function create(options) { + return new DES(options); +}; + +var shiftTable = [ + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1 +]; + +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + + assert.equal(key.length, this.blockSize, 'Invalid key length'); + + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; + +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); + + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + + if (this.type === 'encrypt') + this._encrypt(state, l, r, state.tmp, 0); + else + this._decrypt(state, l, r, state.tmp, 0); + + l = state.tmp[0]; + r = state.tmp[1]; + + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; + +DES.prototype._pad = function _pad(buffer, off) { + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) + buffer[i] = value; + + return true; +}; + +DES.prototype._unpad = function _unpad(buffer) { + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) + assert.equal(buffer[i], pad); + + return buffer.slice(0, buffer.length - pad); +}; + +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(r, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = r; + r = (l ^ f) >>> 0; + l = t; + } + + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; + +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; + + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(l, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = l; + l = (r ^ f) >>> 0; + r = t; + } + + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; + +},{"../des":195,"inherits":262,"minimalistic-assert":268}],199:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var des = require('../des'); +var Cipher = des.Cipher; +var DES = des.DES; + +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + + if (type === 'encrypt') { + this.ciphers = [ + DES.create({ type: 'encrypt', key: k1 }), + DES.create({ type: 'decrypt', key: k2 }), + DES.create({ type: 'encrypt', key: k3 }) + ]; + } else { + this.ciphers = [ + DES.create({ type: 'decrypt', key: k3 }), + DES.create({ type: 'encrypt', key: k2 }), + DES.create({ type: 'decrypt', key: k1 }) + ]; + } +} + +function EDE(options) { + Cipher.call(this, options); + + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); + +module.exports = EDE; + +EDE.create = function create(options) { + return new EDE(options); +}; + +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); +}; + +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + +},{"../des":195,"inherits":262,"minimalistic-assert":268}],200:[function(require,module,exports){ +'use strict'; + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = (bytes[0 + off] << 24) | + (bytes[1 + off] << 16) | + (bytes[2 + off] << 8) | + bytes[3 + off]; + return res >>> 0; +}; + +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = (value >>> 16) & 0xff; + bytes[2 + off] = (value >>> 8) & 0xff; + bytes[3 + off] = value & 0xff; +}; + +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.r28shl = function r28shl(num, shift) { + return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); +}; + +var pc2table = [ + // inL => outL + 14, 11, 17, 4, 27, 23, 25, 0, + 13, 22, 7, 18, 5, 9, 16, 24, + 2, 20, 12, 21, 1, 8, 15, 26, + + // inR => outR + 15, 4, 25, 19, 9, 1, 26, 16, + 5, 11, 23, 8, 12, 7, 17, 0, + 22, 3, 10, 14, 6, 20, 27, 24 +]; + +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= (inL >>> pc2table[i]) & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= (inR >>> pc2table[i]) & 0x1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + + outL = ((r & 1) << 5) | (r >>> 27); + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= (r >>> i) & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= (r >>> i) & 0x3f; + outR <<= 6; + } + outR |= ((r & 0x1f) << 1) | (r >>> 31); + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +var sTable = [ + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, + + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, + + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, + + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, + + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, + + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, + + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, + + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 +]; + +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = (inL >>> (18 - i * 6)) & 0x3f; + var sb = sTable[i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = (inR >>> (18 - i * 6)) & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + return out >>> 0; +}; + +var permuteTable = [ + 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, + 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 +]; + +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= (num >>> permuteTable[i]) & 0x1; + } + return out >>> 0; +}; + +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) + str = '0' + str; + + var out = []; + for (var i = 0; i < size; i += group) + out.push(str.slice(i, i + group)); + return out.join(' '); +}; + +},{}],201:[function(require,module,exports){ +(function (Buffer){ +var generatePrime = require('./lib/generatePrime') +var primes = require('./lib/primes.json') + +var DH = require('./lib/dh') + +function getDiffieHellman (mod) { + var prime = new Buffer(primes[mod].prime, 'hex') + var gen = new Buffer(primes[mod].gen, 'hex') + + return new DH(prime, gen) +} + +var ENCODINGS = { + 'binary': true, 'hex': true, 'base64': true +} + +function createDiffieHellman (prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator) + } + + enc = enc || 'binary' + genc = genc || 'binary' + generator = generator || new Buffer([2]) + + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc) + } + + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true) + } + + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc) + } + + return new DH(prime, generator, true) +} + +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman + +}).call(this,require("buffer").Buffer) +},{"./lib/dh":202,"./lib/generatePrime":203,"./lib/primes.json":204,"buffer":182}],202:[function(require,module,exports){ +(function (Buffer){ +var BN = require('bn.js'); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = require('./generatePrime'); +var randomBytes = require('randombytes'); +module.exports = DH; + +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this._pub = new BN(pub); + return this; +} + +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + this._priv = new BN(priv); + return this; +} + +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; + + if (prime.isEven() || + !primes.simpleSieve || + !primes.fermatTest(prime) || + !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; + } + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; +} + +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; + +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; + +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; + +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; + +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; + +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; + +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; + +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + +}).call(this,require("buffer").Buffer) +},{"./generatePrime":203,"bn.js":147,"buffer":182,"miller-rabin":267,"randombytes":298}],203:[function(require,module,exports){ +var randomBytes = require('randombytes'); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = require('bn.js'); +var TWENTYFOUR = new BN(24); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; + +function _getPrimes() { + if (primes !== null) + return primes; + + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) + if (k % res[j] === 0) + break; + + if (i !== j && res[j] <= sqrt) + continue; + + res[i++] = k; + } + primes = res; + return res; +} + +function simpleSieve(p) { + var primes = _getPrimes(); + + for (var i = 0; i < primes.length; i++) + if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + + return true; +} + +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} + +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); + + var num, n2; + + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && + fermatTest(n2) && fermatTest(num) && + millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } + +} + +},{"bn.js":147,"miller-rabin":267,"randombytes":298}],204:[function(require,module,exports){ +module.exports={ + "modp1": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" + }, + "modp2": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" + }, + "modp5": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" + }, + "modp14": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" + }, + "modp15": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" + }, + "modp16": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" + }, + "modp17": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" + }, + "modp18": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" + } +} +},{}],205:[function(require,module,exports){ +'use strict'; + +var elliptic = exports; + +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); + +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); + +},{"../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){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; + +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; + +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + for (var j = 0; j < naf.length; j += doubles.step) { + var nafW = 0; + for (var k = j + doubles.step - 1; k >= j; k--) + nafW = (nafW << 1) + naf[k]; + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (var j = 0; j < repr.length; j++) { + var nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; + +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var k = 0; i >= 0 && naf[i] === 0; i--) + k++; + if (i >= 0) + k++; + acc = acc.dblp(k); + + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; + +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len, + jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + for (var i = 0; i < len; i++) { + var p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (var i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a]); + naf[b] = getNAF(coeffs[b], wndWidth[b]); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */ + ]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */ + ]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (var j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (var i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + for (var j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; + } + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; + + for (var j = 0; j < len; j++) { + var z = tmp[j]; + var p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); + + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } + } + // Zeroify references + for (var i = 0; i < len; i++) + wnd[i] = null; + + if (jacobianResult) + return acc; + else + return acc.toP(); +}; + +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; + +BasePoint.prototype.eq = function eq(/*other*/) { + throw new Error('Not implemented'); +}; + +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; + +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && + bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) + assert(bytes[bytes.length - 1] % 2 === 0); + else if (bytes[0] === 0x07) + assert(bytes[bytes.length - 1] % 2 === 1); + + var res = this.point(bytes.slice(1, 1 + len), + bytes.slice(1 + len, 1 + 2 * len)); + + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && + bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; + +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; + +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + + if (compact) + return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); + + return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; +}; + +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; + +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; + + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + + return this; +}; + +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; + + var doubles = this.precomputed.doubles; + if (!doubles) + return false; + + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; + +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; + + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles + }; +}; + +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; + + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; + +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; +}; + +},{"../utils":219,"bn.js":147}],207:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); + +var assert = utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + + Base.call(this, 'edwards', conf); + + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); + + // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + if (x.fromRed().isOdd() !== odd) + x = x.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + (this.y.cmp(this.z) === 0 || + (this.zOne && this.y.cmp(this.curve.c) === 0)); +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + + var nx; + var ny; + var nz; + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); + // J = F - 2 * H + var j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); + // H = (c * Z1)^2 + var h = this.curve._mulC(this.z).redSqr(); + // J = E - 2 * H + var j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; + + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + +},{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],208:[function(require,module,exports){ +'use strict'; + +var curve = exports; + +curve.base = require('./base'); +curve.short = require('./short'); +curve.mont = require('./mont'); +curve.edwards = require('./edwards'); + +},{"./base":206,"./edwards":207,"./mont":209,"./short":210}],209:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); + +var utils = require('../utils'); + +function MontCurve(conf) { + Base.call(this, 'mont', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; + +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + + return y.redSqr().cmp(rhs) === 0; +}; + +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); + +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; + +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; + +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +Point.prototype.precompute = function precompute() { + // No-op +}; + +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; + +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; + +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) + bits.push(t.andln(1)); + + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; + +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; + +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; + +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + + return this.x.fromRed(); +}; + +},{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],210:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); + +var assert = utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 } + ]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; +}; + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; + + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + } ]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; + + // P + O = P + if (p.inf) + return this; + + // P + P = 2P + if (this.eq(p)) + return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); + + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); + + var a = this.curve.a; + + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + if (this.isInfinity()) + return this; + else if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs, true); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; + + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (var i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); + + if (this === p) + return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +},{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],211:[function(require,module,exports){ +'use strict'; + +var curves = exports; + +var hash = require('hash.js'); +var curve = require('./curve'); +var utils = require('./utils'); + +var assert = utils.assert; + +function PresetCurve(options) { + if (options.type === 'short') + this.curve = new curve.short(options); + else if (options.type === 'edwards') + this.curve = new curve.edwards(options); + else + this.curve = new curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; + +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} + +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: [ + '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', + '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' + ] +}); + +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: [ + 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', + 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' + ] +}); + +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: [ + '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' + ] +}); + +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: [ + 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + + '5502f25d bf55296c 3a545e38 72760ab7', + '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' + ] +}); + +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: [ + '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', + '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + + '3fad0761 353c7086 a272c240 88be9476 9fd16650' + ] +}); + +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '9' + ] +}); + +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658' + ] +}); + +var pre; +try { + pre = require('./precomputed/secp256k1'); +} catch (e) { + pre = undefined; +} + +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [ + { + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, + { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + } + ], + + gRed: false, + g: [ + '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', + '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', + pre + ] +}); + +},{"./curve":208,"./precomputed/secp256k1":218,"./utils":219,"hash.js":228}],212:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var HmacDRBG = require('hmac-drbg'); +var utils = require('../utils'); +var curves = require('../curves'); +var rand = require('brorand'); +var assert = utils.assert; + +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(curves.hasOwnProperty(options), 'Unknown curve ' + options); + + options = curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof curves.PresetCurve) + options = { curve: options }; + + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray() + }); + + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + do { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; + + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); +}; + +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; + + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8' + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; true; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; + + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; + + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; + + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + + if (!this.curve._maxwellTrick) { + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + var p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); + + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + +},{"../curves":211,"../utils":219,"./key":213,"./signature":214,"bn.js":147,"brorand":148,"hmac-drbg":240}],213:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; + +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) + this._importPrivate(options.priv, options.privEnc); + if (options.pub) + this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; + +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) + return pub; + + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); +}; + +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) + return priv; + + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); +}; + +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + + if (pub.isInfinity()) + return { result: false, reason: 'Invalid public key' }; + if (!pub.validate()) + return { result: false, reason: 'Public key is not a point' }; + if (!pub.mul(this.ec.curve.n).isInfinity()) + return { result: false, reason: 'Public key * N != O' }; + + return { result: true, reason: null }; +}; + +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + + if (!this.pub) + this.pub = this.ec.g.mul(this.priv); + + if (!enc) + return this.pub; + + return this.pub.encode(enc, compact); +}; + +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') + return this.priv.toString(16, 2); + else + return this.priv; +}; + +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; + +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || + this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; + +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; + +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + +},{"../utils":219,"bn.js":147}],214:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); + +var utils = require('../utils'); +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) + return options; + + if (this._importDER(options, enc)) + return; + + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) + this.recoveryParam = null; + else + this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; + +function Position() { + this.place = 0; +} + +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + } + p.place = off; + return val; +} + +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} + +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if ((len + p.place) !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (data.length !== slen + p.place) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0 && (r[1] & 0x80)) { + r = r.slice(1); + } + if (s[0] === 0 && (s[1] & 0x80)) { + s = s.slice(1); + } + + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + + return true; +}; + +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push((len >>> (octets << 3)) & 0xff); + } + arr.push(len); +} + +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); + + r = rmPadding(r); + s = rmPadding(s); + + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [ 0x02 ]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [ 0x30 ]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + +},{"../utils":219,"bn.js":147}],215:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var curves = require('../curves'); +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + + if (!(this instanceof EDDSA)) + return new EDDSA(curve); + + var curve = curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} + +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message) + .mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; + +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) + hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; + +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; + +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; + +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) + return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; + +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; + +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; + +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; + +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + +},{"../curves":211,"../utils":219,"./key":216,"./signature":217,"hash.js":228}],216:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) + this._pub = params.pub; + else + this._pubBytes = parseBytes(params.pub); +} + +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) + return pub; + return new KeyPair(eddsa, { pub: pub }); +}; + +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) + return secret; + return new KeyPair(eddsa, { secret: secret }); +}; + +KeyPair.prototype.secret = function secret() { + return this._secret; +}; + +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); + +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) + return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); + +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + + return a; +}); + +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); + +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); + +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); + +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; + +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; + +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; + +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; + +module.exports = KeyPair; + +},{"../utils":219}],217:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + + if (typeof sig !== 'object') + sig = parseBytes(sig); + + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; + } + + assert(sig.R && sig.S, 'Signature without R or S'); + + if (eddsa.isPoint(sig.R)) + this._R = sig.R; + if (sig.S instanceof BN) + this._S = sig.S; + + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} + +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); + +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); + +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); + +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); + +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; + +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; + +module.exports = Signature; + +},{"../utils":219,"bn.js":147}],218:[function(require,module,exports){ +module.exports = { + doubles: { + step: 4, + points: [ + [ + 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', + 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' + ], + [ + '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', + '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' + ], + [ + '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', + 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' + ], + [ + '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', + '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' + ], + [ + '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', + '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' + ], + [ + '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', + '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' + ], + [ + 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', + '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' + ], + [ + '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', + 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' + ], + [ + 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', + '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' + ], + [ + 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', + 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' + ], + [ + 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', + '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' + ], + [ + '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', + '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' + ], + [ + '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', + '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' + ], + [ + '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', + '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' + ], + [ + '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', + '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' + ], + [ + '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', + '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' + ], + [ + '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', + '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' + ], + [ + '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', + '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' + ], + [ + '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', + 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' + ], + [ + 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', + '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' + ], + [ + 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', + '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' + ], + [ + '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', + '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' + ], + [ + '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', + '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' + ], + [ + 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', + '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' + ], + [ + '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', + 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' + ], + [ + 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', + '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' + ], + [ + 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', + 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' + ], + [ + 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', + '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' + ], + [ + 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', + 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' + ], + [ + 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', + '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' + ], + [ + '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', + 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' + ], + [ + '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', + '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' + ], + [ + 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', + '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' + ], + [ + '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', + 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' + ], + [ + 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', + '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' + ], + [ + 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', + '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' + ], + [ + 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', + 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' + ], + [ + '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', + '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' + ], + [ + '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', + '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' + ], + [ + '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', + 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' + ], + [ + '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', + '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' + ], + [ + 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', + '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' + ], + [ + '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', + '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' + ], + [ + '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', + 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' + ], + [ + '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', + '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' + ], + [ + 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', + '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' + ], + [ + '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', + 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' + ], + [ + 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', + 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' + ], + [ + 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', + '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' + ], + [ + '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', + 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' + ], + [ + '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', + 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' + ], + [ + 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', + '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' + ], + [ + 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', + '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' + ], + [ + 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', + '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' + ], + [ + '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', + 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' + ], + [ + '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', + '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' + ], + [ + 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', + 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' + ], + [ + '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', + 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' + ], + [ + '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', + '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' + ], + [ + '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', + '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' + ], + [ + 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', + 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' + ], + [ + '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', + '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' + ], + [ + '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', + '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' + ], + [ + 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', + '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' + ], + [ + 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', + 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' + ] + ] + }, + naf: { + wnd: 7, + points: [ + [ + 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', + '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' + ], + [ + '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', + 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' + ], + [ + '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', + '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' + ], + [ + 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', + 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' + ], + [ + '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', + 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' + ], + [ + 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', + 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' + ], + [ + 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', + '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' + ], + [ + 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', + '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' + ], + [ + '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', + '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' + ], + [ + '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', + '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' + ], + [ + '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', + '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' + ], + [ + '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', + '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' + ], + [ + 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', + 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' + ], + [ + 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', + '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' + ], + [ + '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', + 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' + ], + [ + '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', + 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' + ], + [ + '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', + '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' + ], + [ + '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', + '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' + ], + [ + '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', + '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' + ], + [ + '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', + 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' + ], + [ + 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', + 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' + ], + [ + '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', + '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' + ], + [ + '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', + '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' + ], + [ + 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', + 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' + ], + [ + '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', + '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' + ], + [ + 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', + 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' + ], + [ + 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', + 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' + ], + [ + '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', + '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' + ], + [ + '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', + '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' + ], + [ + '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', + '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' + ], + [ + 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', + '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' + ], + [ + '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', + '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' + ], + [ + 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', + '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' + ], + [ + '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', + 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' + ], + [ + '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', + 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' + ], + [ + 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', + 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' + ], + [ + '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', + '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' + ], + [ + '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', + 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' + ], + [ + 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', + 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' + ], + [ + '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', + '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' + ], + [ + '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', + 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' + ], + [ + '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', + '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' + ], + [ + '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', + 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' + ], + [ + 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', + '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' + ], + [ + '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', + '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' + ], + [ + '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', + 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' + ], + [ + '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', + 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' + ], + [ + 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', + 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' + ], + [ + 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', + 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' + ], + [ + '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', + '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' + ], + [ + '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', + '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' + ], + [ + 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', + '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' + ], + [ + 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', + 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' + ], + [ + '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', + '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' + ], + [ + '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', + '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' + ], + [ + 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', + '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' + ], + [ + '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', + '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' + ], + [ + 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', + 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' + ], + [ + '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', + 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' + ], + [ + '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', + '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' + ], + [ + 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', + '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' + ], + [ + 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', + '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' + ], + [ + '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', + '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' + ], + [ + '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', + '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' + ], + [ + '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', + 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' + ], + [ + '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', + 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' + ], + [ + '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', + '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' + ], + [ + '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', + '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' + ], + [ + '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', + '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' + ], + [ + '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', + 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' + ], + [ + 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', + 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' + ], + [ + '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', + 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' + ], + [ + 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', + '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' + ], + [ + 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', + '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' + ], + [ + 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', + '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' + ], + [ + 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', + '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' + ], + [ + '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', + 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' + ], + [ + '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', + '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' + ], + [ + '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', + 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' + ], + [ + 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', + 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' + ], + [ + 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', + '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' + ], + [ + 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', + 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' + ], + [ + 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', + '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' + ], + [ + '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', + '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' + ], + [ + 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', + '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' + ], + [ + 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', + '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' + ], + [ + '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', + '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' + ], + [ + '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', + 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' + ], + [ + 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', + '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' + ], + [ + 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', + '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' + ], + [ + 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', + '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' + ], + [ + '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', + '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' + ], + [ + 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', + 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' + ], + [ + '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', + 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' + ], + [ + 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', + 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' + ], + [ + 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', + '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' + ], + [ + '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', + 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' + ], + [ + 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', + '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' + ], + [ + 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', + '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' + ], + [ + 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', + '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' + ], + [ + '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', + 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' + ], + [ + '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', + 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' + ], + [ + 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', + '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' + ], + [ + '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', + 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' + ], + [ + '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', + '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' + ], + [ + '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', + 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' + ], + [ + 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', + 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' + ], + [ + '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', + 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' + ], + [ + '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', + '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' + ], + [ + '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', + 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' + ], + [ + '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', + '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' + ], + [ + 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', + 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' + ], + [ + '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', + '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' + ], + [ + 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', + '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' + ], + [ + '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', + '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' + ], + [ + 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', + 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' + ], + [ + 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', + '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' + ], + [ + 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', + 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' + ], + [ + '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', + 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' + ], + [ + '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', + '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' + ], + [ + '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', + 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' + ], + [ + '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', + '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' + ], + [ + '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', + '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' + ], + [ + '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', + 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' + ], + [ + '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', + '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' + ], + [ + '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', + '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' + ], + [ + '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', + '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' + ] + ] + } +}; + +},{}],219:[function(require,module,exports){ +'use strict'; + +var utils = exports; +var BN = require('bn.js'); +var minAssert = require('minimalistic-assert'); +var minUtils = require('minimalistic-crypto-utils'); + +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w) { + var naf = []; + var ws = 1 << (w + 1); + var k = num.clone(); + while (k.cmpn(1) >= 0) { + var z; + if (k.isOdd()) { + var mod = k.andln(ws - 1); + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + naf.push(z); + + // Optimization, shift by word if possible + var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; + for (var i = 1; i < shift; i++) + naf.push(0); + k.iushrn(shift); + } + + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [] + ]; + + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + var m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); + + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + var m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + + +},{"bn.js":147,"minimalistic-assert":268,"minimalistic-crypto-utils":269}],220:[function(require,module,exports){ +module.exports={ + "_args": [ + [ + "elliptic@6.5.1", + "/Users/caldwell/geopackage-js" + ] + ], + "_development": true, + "_from": "elliptic@6.5.1", + "_id": "elliptic@6.5.1", + "_inBundle": false, + "_integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "_location": "/elliptic", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "elliptic@6.5.1", + "name": "elliptic", + "escapedName": "elliptic", + "rawSpec": "6.5.1", + "saveSpec": null, + "fetchSpec": "6.5.1" + }, + "_requiredBy": [ + "/browserify-sign", + "/create-ecdh" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "_spec": "6.5.1", + "_where": "/Users/caldwell/geopackage-js", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "description": "EC cryptography", + "devDependencies": { + "brfs": "^1.4.3", + "coveralls": "^3.0.4", + "grunt": "^1.0.4", + "grunt-browserify": "^5.0.0", + "grunt-cli": "^1.2.0", + "grunt-contrib-connect": "^1.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^1.0.1", + "grunt-mocha-istanbul": "^3.0.1", + "grunt-saucelabs": "^9.0.1", + "istanbul": "^0.4.2", + "jscs": "^3.0.7", + "jshint": "^2.6.0", + "mocha": "^6.1.4" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "name": "elliptic", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "version": "grunt dist && git add dist/" + }, + "version": "6.5.1" +} + +},{}],221:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; + + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; + +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],222:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var MD5 = require('md5.js') + +/* eslint-disable camelcase */ +function EVP_BytesToKey (password, salt, keyBits, ivLen) { + if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') + if (salt) { + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') + if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') + } + + var keyLen = keyBits / 8 + var key = Buffer.alloc(keyLen) + var iv = Buffer.alloc(ivLen || 0) + var tmp = Buffer.alloc(0) + + while (keyLen > 0 || ivLen > 0) { + var hash = new MD5() + hash.update(tmp) + hash.update(password) + if (salt) hash.update(salt) + tmp = hash.digest() + + var used = 0 + + if (keyLen > 0) { + var keyStart = key.length - keyLen + used = Math.min(keyLen, tmp.length) + tmp.copy(key, keyStart, 0, used) + keyLen -= used + } + + if (used < tmp.length && ivLen > 0) { + var ivStart = iv.length - ivLen + var length = Math.min(ivLen, tmp.length - used) + tmp.copy(iv, ivStart, used, used + length) + ivLen -= length + } + } + + tmp.fill(0) + return { key: key, iv: iv } +} + +module.exports = EVP_BytesToKey + +},{"md5.js":266,"safe-buffer":318}],223:[function(require,module,exports){ +'use strict'; +const toBytes = s => [...s].map(c => c.charCodeAt(0)); +const xpiZipFilename = toBytes('META-INF/mozilla.rsa'); +const oxmlContentTypes = toBytes('[Content_Types].xml'); +const oxmlRels = toBytes('_rels/.rels'); + +module.exports = input => { + const buf = input instanceof Uint8Array ? input : new Uint8Array(input); + + if (!(buf && buf.length > 1)) { + return null; + } + + const check = (header, options) => { + options = Object.assign({ + offset: 0 + }, options); + + for (let i = 0; i < header.length; i++) { + // If a bitmask is set + if (options.mask) { + // If header doesn't equal `buf` with bits masked off + if (header[i] !== (options.mask[i] & buf[i + options.offset])) { + return false; + } + } else if (header[i] !== buf[i + options.offset]) { + return false; + } + } + + return true; + }; + + const checkString = (header, options) => check(toBytes(header), options); + + if (check([0xFF, 0xD8, 0xFF])) { + return { + ext: 'jpg', + mime: 'image/jpeg' + }; + } + + if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) { + return { + ext: 'png', + mime: 'image/png' + }; + } + + if (check([0x47, 0x49, 0x46])) { + return { + ext: 'gif', + mime: 'image/gif' + }; + } + + if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) { + return { + ext: 'webp', + mime: 'image/webp' + }; + } + + if (check([0x46, 0x4C, 0x49, 0x46])) { + return { + ext: 'flif', + mime: 'image/flif' + }; + } + + // Needs to be before `tif` check + if ( + (check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) && + check([0x43, 0x52], {offset: 8}) + ) { + return { + ext: 'cr2', + mime: 'image/x-canon-cr2' + }; + } + + if ( + check([0x49, 0x49, 0x2A, 0x0]) || + check([0x4D, 0x4D, 0x0, 0x2A]) + ) { + return { + ext: 'tif', + mime: 'image/tiff' + }; + } + + if (check([0x42, 0x4D])) { + return { + ext: 'bmp', + mime: 'image/bmp' + }; + } + + if (check([0x49, 0x49, 0xBC])) { + return { + ext: 'jxr', + mime: 'image/vnd.ms-photo' + }; + } + + if (check([0x38, 0x42, 0x50, 0x53])) { + return { + ext: 'psd', + mime: 'image/vnd.adobe.photoshop' + }; + } + + // Zip-based file formats + // Need to be before the `zip` check + if (check([0x50, 0x4B, 0x3, 0x4])) { + if ( + check([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}) + ) { + return { + ext: 'epub', + mime: 'application/epub+zip' + }; + } + + // Assumes signed `.xpi` from addons.mozilla.org + if (check(xpiZipFilename, {offset: 30})) { + return { + ext: 'xpi', + mime: 'application/x-xpinstall' + }; + } + + if (checkString('mimetypeapplication/vnd.oasis.opendocument.text', {offset: 30})) { + return { + ext: 'odt', + mime: 'application/vnd.oasis.opendocument.text' + }; + } + + if (checkString('mimetypeapplication/vnd.oasis.opendocument.spreadsheet', {offset: 30})) { + return { + ext: 'ods', + mime: 'application/vnd.oasis.opendocument.spreadsheet' + }; + } + + if (checkString('mimetypeapplication/vnd.oasis.opendocument.presentation', {offset: 30})) { + return { + ext: 'odp', + mime: 'application/vnd.oasis.opendocument.presentation' + }; + } + + // https://github.com/file/file/blob/master/magic/Magdir/msooxml + if (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) { + const sliced = buf.subarray(4, 4 + 2000); + const nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4); + const header2Pos = nextZipHeaderIndex(sliced); + + if (header2Pos !== -1) { + const slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000); + const header3Pos = nextZipHeaderIndex(slicedAgain); + + if (header3Pos !== -1) { + const offset = 8 + header2Pos + header3Pos + 30; + + if (checkString('word/', {offset})) { + return { + ext: 'docx', + mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + }; + } + + if (checkString('ppt/', {offset})) { + return { + ext: 'pptx', + mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + }; + } + + if (checkString('xl/', {offset})) { + return { + ext: 'xlsx', + mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + }; + } + } + } + } + } + + if ( + check([0x50, 0x4B]) && + (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && + (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8) + ) { + return { + ext: 'zip', + mime: 'application/zip' + }; + } + + if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) { + return { + ext: 'tar', + mime: 'application/x-tar' + }; + } + + if ( + check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) && + (buf[6] === 0x0 || buf[6] === 0x1) + ) { + return { + ext: 'rar', + mime: 'application/x-rar-compressed' + }; + } + + if (check([0x1F, 0x8B, 0x8])) { + return { + ext: 'gz', + mime: 'application/gzip' + }; + } + + if (check([0x42, 0x5A, 0x68])) { + return { + ext: 'bz2', + mime: 'application/x-bzip2' + }; + } + + if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) { + return { + ext: '7z', + mime: 'application/x-7z-compressed' + }; + } + + if (check([0x78, 0x01])) { + return { + ext: 'dmg', + mime: 'application/x-apple-diskimage' + }; + } + + if (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5 + ( + check([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) && + ( + check([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41 + check([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42 + check([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM + check([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2 + check([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4 + check([0x4D, 0x34, 0x56], {offset: 8}) || // M4V + check([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH + ) + )) { + return { + ext: 'mp4', + mime: 'video/mp4' + }; + } + + if (check([0x4D, 0x54, 0x68, 0x64])) { + return { + ext: 'mid', + mime: 'audio/midi' + }; + } + + // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska + if (check([0x1A, 0x45, 0xDF, 0xA3])) { + const sliced = buf.subarray(4, 4 + 4096); + const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82); + + if (idPos !== -1) { + const docTypePos = idPos + 3; + const findDocType = type => [...type].every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0)); + + if (findDocType('matroska')) { + return { + ext: 'mkv', + mime: 'video/x-matroska' + }; + } + + if (findDocType('webm')) { + return { + ext: 'webm', + mime: 'video/webm' + }; + } + } + } + + if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) || + check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || + check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) || + check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG + check([0x77, 0x69, 0x64, 0x65], {offset: 4})) { + return { + ext: 'mov', + mime: 'video/quicktime' + }; + } + + // RIFF file format which might be AVI, WAV, QCP, etc + if (check([0x52, 0x49, 0x46, 0x46])) { + if (check([0x41, 0x56, 0x49], {offset: 8})) { + return { + ext: 'avi', + mime: 'video/x-msvideo' + }; + } + if (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) { + return { + ext: 'wav', + mime: 'audio/x-wav' + }; + } + // QLCM, QCP file + if (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) { + return { + ext: 'qcp', + mime: 'audio/qcelp' + }; + } + } + + if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) { + return { + ext: 'wmv', + mime: 'video/x-ms-wmv' + }; + } + + if ( + check([0x0, 0x0, 0x1, 0xBA]) || + check([0x0, 0x0, 0x1, 0xB3]) + ) { + return { + ext: 'mpg', + mime: 'video/mpeg' + }; + } + + if (check([0x66, 0x74, 0x79, 0x70, 0x33, 0x67], {offset: 4})) { + return { + ext: '3gp', + mime: 'video/3gpp' + }; + } + + // Check for MPEG header at different starting offsets + for (let start = 0; start < 2 && start < (buf.length - 16); start++) { + if ( + check([0x49, 0x44, 0x33], {offset: start}) || // ID3 header + check([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header + ) { + return { + ext: 'mp3', + mime: 'audio/mpeg' + }; + } + + if ( + check([0xFF, 0xE4], {offset: start, mask: [0xFF, 0xE4]}) // MPEG 1 or 2 Layer 2 header + ) { + return { + ext: 'mp2', + mime: 'audio/mpeg' + }; + } + + if ( + check([0xFF, 0xF8], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 2 layer 0 using ADTS + ) { + return { + ext: 'mp2', + mime: 'audio/mpeg' + }; + } + + if ( + check([0xFF, 0xF0], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 4 layer 0 using ADTS + ) { + return { + ext: 'mp4', + mime: 'audio/mpeg' + }; + } + } + + if ( + check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) || + check([0x4D, 0x34, 0x41, 0x20]) + ) { + return { + ext: 'm4a', + mime: 'audio/m4a' + }; + } + + // Needs to be before `ogg` check + if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) { + return { + ext: 'opus', + mime: 'audio/opus' + }; + } + + // If 'OggS' in first bytes, then OGG container + if (check([0x4F, 0x67, 0x67, 0x53])) { + // This is a OGG container + + // If ' theora' in header. + if (check([0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61], {offset: 28})) { + return { + ext: 'ogv', + mime: 'video/ogg' + }; + } + // If '\x01video' in header. + if (check([0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00], {offset: 28})) { + return { + ext: 'ogm', + mime: 'video/ogg' + }; + } + // If ' FLAC' in header https://xiph.org/flac/faq.html + if (check([0x7F, 0x46, 0x4C, 0x41, 0x43], {offset: 28})) { + return { + ext: 'oga', + mime: 'audio/ogg' + }; + } + + // 'Speex ' in header https://en.wikipedia.org/wiki/Speex + if (check([0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20], {offset: 28})) { + return { + ext: 'spx', + mime: 'audio/ogg' + }; + } + + // If '\x01vorbis' in header + if (check([0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73], {offset: 28})) { + return { + ext: 'ogg', + mime: 'audio/ogg' + }; + } + + // Default OGG container https://www.iana.org/assignments/media-types/application/ogg + return { + ext: 'ogx', + mime: 'application/ogg' + }; + } + + if (check([0x66, 0x4C, 0x61, 0x43])) { + return { + ext: 'flac', + mime: 'audio/x-flac' + }; + } + + if (check([0x4D, 0x41, 0x43, 0x20])) { + return { + ext: 'ape', + mime: 'audio/ape' + }; + } + + if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) { + return { + ext: 'amr', + mime: 'audio/amr' + }; + } + + if (check([0x25, 0x50, 0x44, 0x46])) { + return { + ext: 'pdf', + mime: 'application/pdf' + }; + } + + if (check([0x4D, 0x5A])) { + return { + ext: 'exe', + mime: 'application/x-msdownload' + }; + } + + if ( + (buf[0] === 0x43 || buf[0] === 0x46) && + check([0x57, 0x53], {offset: 1}) + ) { + return { + ext: 'swf', + mime: 'application/x-shockwave-flash' + }; + } + + if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) { + return { + ext: 'rtf', + mime: 'application/rtf' + }; + } + + if (check([0x00, 0x61, 0x73, 0x6D])) { + return { + ext: 'wasm', + mime: 'application/wasm' + }; + } + + if ( + check([0x77, 0x4F, 0x46, 0x46]) && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) + ) + ) { + return { + ext: 'woff', + mime: 'font/woff' + }; + } + + if ( + check([0x77, 0x4F, 0x46, 0x32]) && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) + ) + ) { + return { + ext: 'woff2', + mime: 'font/woff2' + }; + } + + if ( + check([0x4C, 0x50], {offset: 34}) && + ( + check([0x00, 0x00, 0x01], {offset: 8}) || + check([0x01, 0x00, 0x02], {offset: 8}) || + check([0x02, 0x00, 0x02], {offset: 8}) + ) + ) { + return { + ext: 'eot', + mime: 'application/octet-stream' + }; + } + + if (check([0x00, 0x01, 0x00, 0x00, 0x00])) { + return { + ext: 'ttf', + mime: 'font/ttf' + }; + } + + if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) { + return { + ext: 'otf', + mime: 'font/otf' + }; + } + + if (check([0x00, 0x00, 0x01, 0x00])) { + return { + ext: 'ico', + mime: 'image/x-icon' + }; + } + + if (check([0x00, 0x00, 0x02, 0x00])) { + return { + ext: 'cur', + mime: 'image/x-icon' + }; + } + + if (check([0x46, 0x4C, 0x56, 0x01])) { + return { + ext: 'flv', + mime: 'video/x-flv' + }; + } + + if (check([0x25, 0x21])) { + return { + ext: 'ps', + mime: 'application/postscript' + }; + } + + if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) { + return { + ext: 'xz', + mime: 'application/x-xz' + }; + } + + if (check([0x53, 0x51, 0x4C, 0x69])) { + return { + ext: 'sqlite', + mime: 'application/x-sqlite3' + }; + } + + if (check([0x4E, 0x45, 0x53, 0x1A])) { + return { + ext: 'nes', + mime: 'application/x-nintendo-nes-rom' + }; + } + + if (check([0x43, 0x72, 0x32, 0x34])) { + return { + ext: 'crx', + mime: 'application/x-google-chrome-extension' + }; + } + + if ( + check([0x4D, 0x53, 0x43, 0x46]) || + check([0x49, 0x53, 0x63, 0x28]) + ) { + return { + ext: 'cab', + mime: 'application/vnd.ms-cab-compressed' + }; + } + + // Needs to be before `ar` check + if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) { + return { + ext: 'deb', + mime: 'application/x-deb' + }; + } + + if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) { + return { + ext: 'ar', + mime: 'application/x-unix-archive' + }; + } + + if (check([0xED, 0xAB, 0xEE, 0xDB])) { + return { + ext: 'rpm', + mime: 'application/x-rpm' + }; + } + + if ( + check([0x1F, 0xA0]) || + check([0x1F, 0x9D]) + ) { + return { + ext: 'Z', + mime: 'application/x-compress' + }; + } + + if (check([0x4C, 0x5A, 0x49, 0x50])) { + return { + ext: 'lz', + mime: 'application/x-lzip' + }; + } + + if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) { + return { + ext: 'msi', + mime: 'application/x-msi' + }; + } + + if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) { + return { + ext: 'mxf', + mime: 'application/mxf' + }; + } + + if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) { + return { + ext: 'mts', + mime: 'video/mp2t' + }; + } + + if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) { + return { + ext: 'blend', + mime: 'application/x-blender' + }; + } + + if (check([0x42, 0x50, 0x47, 0xFB])) { + return { + ext: 'bpg', + mime: 'image/bpg' + }; + } + + if (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) { + // JPEG-2000 family + + if (check([0x6A, 0x70, 0x32, 0x20], {offset: 20})) { + return { + ext: 'jp2', + mime: 'image/jp2' + }; + } + + if (check([0x6A, 0x70, 0x78, 0x20], {offset: 20})) { + return { + ext: 'jpx', + mime: 'image/jpx' + }; + } + + if (check([0x6A, 0x70, 0x6D, 0x20], {offset: 20})) { + return { + ext: 'jpm', + mime: 'image/jpm' + }; + } + + if (check([0x6D, 0x6A, 0x70, 0x32], {offset: 20})) { + return { + ext: 'mj2', + mime: 'image/mj2' + }; + } + } + + if (check([0x46, 0x4F, 0x52, 0x4D, 0x00])) { + return { + ext: 'aif', + mime: 'audio/aiff' + }; + } + + if (checkString('} features load entire GeoJSON FeatureCollection + * @returns {RBush} GeoJSON RBush + * @example + * var polys = turf.polygons([ + * [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]], + * [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]] + * ]); + * tree.load(polys); + */ + tree.load = function (features) { + var load = []; + // Load an Array of Features + if (Array.isArray(features)) { + features.forEach(function (feature) { + if (feature.type !== 'Feature') throw new Error('invalid features'); + feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature); + load.push(feature); + }); + } else { + // Load a FeatureCollection + featureEach(features, function (feature) { + if (feature.type !== 'Feature') throw new Error('invalid features'); + feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature); + load.push(feature); + }); + } + return rbush.prototype.load.call(this, load); + }; + + /** + * [remove](https://github.com/mourner/rbush#removing-data) + * + * @param {Feature} feature remove single GeoJSON Feature + * @param {Function} equals Pass a custom equals function to compare by value for removal. + * @returns {RBush} GeoJSON RBush + * @example + * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]); + * + * tree.remove(poly); + */ + tree.remove = function (feature, equals) { + if (feature.type !== 'Feature') throw new Error('invalid feature'); + feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature); + return rbush.prototype.remove.call(this, feature, equals); + }; + + /** + * [clear](https://github.com/mourner/rbush#removing-data) + * + * @returns {RBush} GeoJSON Rbush + * @example + * tree.clear() + */ + tree.clear = function () { + return rbush.prototype.clear.call(this); + }; + + /** + * [search](https://github.com/mourner/rbush#search) + * + * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON + * @returns {FeatureCollection} all features that intersects with the given GeoJSON. + * @example + * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]); + * + * tree.search(poly); + */ + tree.search = function (geojson) { + var features = rbush.prototype.search.call(this, this.toBBox(geojson)); + return featureCollection(features); + }; + + /** + * [collides](https://github.com/mourner/rbush#collisions) + * + * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON + * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false. + * @example + * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]); + * + * tree.collides(poly); + */ + tree.collides = function (geojson) { + return rbush.prototype.collides.call(this, this.toBBox(geojson)); + }; + + /** + * [all](https://github.com/mourner/rbush#search) + * + * @returns {FeatureCollection} all the features in RBush + * @example + * tree.all() + */ + tree.all = function () { + var features = rbush.prototype.all.call(this); + return featureCollection(features); + }; + + /** + * [toJSON](https://github.com/mourner/rbush#export-and-import) + * + * @returns {any} export data as JSON object + * @example + * var exported = tree.toJSON() + */ + tree.toJSON = function () { + return rbush.prototype.toJSON.call(this); + }; + + /** + * [fromJSON](https://github.com/mourner/rbush#export-and-import) + * + * @param {any} json import previously exported data + * @returns {RBush} GeoJSON RBush + * @example + * var exported = { + * "children": [ + * { + * "type": "Feature", + * "geometry": { + * "type": "Point", + * "coordinates": [110, 50] + * }, + * "properties": {}, + * "bbox": [110, 50, 110, 50] + * } + * ], + * "height": 1, + * "leaf": true, + * "minX": 110, + * "minY": 50, + * "maxX": 110, + * "maxY": 50 + * } + * tree.fromJSON(exported) + */ + tree.fromJSON = function (json) { + return rbush.prototype.fromJSON.call(this, json); + }; + + /** + * Converts GeoJSON to {minX, minY, maxX, maxY} schema + * + * @private + * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from + * @returns {Object} converted to {minX, minY, maxX, maxY} + */ + tree.toBBox = function (geojson) { + var bbox; + if (geojson.bbox) bbox = geojson.bbox; + else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson; + else if (Array.isArray(geojson) && geojson.length === 6) bbox = [geojson[0], geojson[1], geojson[3], geojson[4]]; + else if (geojson.type === 'Feature') bbox = turfBBox(geojson); + else if (geojson.type === 'FeatureCollection') bbox = turfBBox(geojson); + else throw new Error('invalid geojson') + + return { + minX: bbox[0], + minY: bbox[1], + maxX: bbox[2], + maxY: bbox[3] + }; + }; + return tree; +} + +module.exports = geojsonRbush; +module.exports.default = geojsonRbush; + +},{"@turf/bbox":117,"@turf/helpers":123,"@turf/meta":225,"rbush":300}],225:[function(require,module,exports){ +arguments[4][122][0].apply(exports,arguments) +},{"@turf/helpers":123,"dup":122}],226:[function(require,module,exports){ +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : +typeof define === 'function' && define.amd ? define(factory) : +(global.geojsonvt = factory()); +}(this, (function () { 'use strict'; + +// calculate simplification data using optimized Douglas-Peucker algorithm + +function simplify(coords, first, last, sqTolerance) { + var maxSqDist = sqTolerance; + var mid = (last - first) >> 1; + var minPosToMid = last - first; + var index; + + var ax = coords[first]; + var ay = coords[first + 1]; + var bx = coords[last]; + var by = coords[last + 1]; + + for (var i = first + 3; i < last; i += 3) { + var d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by); + + if (d > maxSqDist) { + index = i; + maxSqDist = d; + + } else if (d === maxSqDist) { + // a workaround to ensure we choose a pivot close to the middle of the list, + // reducing recursion depth, for certain degenerate inputs + // https://github.com/mapbox/geojson-vt/issues/104 + var posToMid = Math.abs(i - mid); + if (posToMid < minPosToMid) { + index = i; + minPosToMid = posToMid; + } + } + } + + if (maxSqDist > sqTolerance) { + if (index - first > 3) simplify(coords, first, index, sqTolerance); + coords[index + 2] = maxSqDist; + if (last - index > 3) simplify(coords, index, last, sqTolerance); + } +} + +// square distance from a point to a segment +function getSqSegDist(px, py, x, y, bx, by) { + + var dx = bx - x; + var dy = by - y; + + if (dx !== 0 || dy !== 0) { + + var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy); + + if (t > 1) { + x = bx; + y = by; + + } else if (t > 0) { + x += dx * t; + y += dy * t; + } + } + + dx = px - x; + dy = py - y; + + return dx * dx + dy * dy; +} + +function createFeature(id, type, geom, tags) { + var feature = { + id: typeof id === 'undefined' ? null : id, + type: type, + geometry: geom, + tags: tags, + minX: Infinity, + minY: Infinity, + maxX: -Infinity, + maxY: -Infinity + }; + calcBBox(feature); + return feature; +} + +function calcBBox(feature) { + var geom = feature.geometry; + var type = feature.type; + + if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') { + calcLineBBox(feature, geom); + + } else if (type === 'Polygon' || type === 'MultiLineString') { + for (var i = 0; i < geom.length; i++) { + calcLineBBox(feature, geom[i]); + } + + } else if (type === 'MultiPolygon') { + for (i = 0; i < geom.length; i++) { + for (var j = 0; j < geom[i].length; j++) { + calcLineBBox(feature, geom[i][j]); + } + } + } +} + +function calcLineBBox(feature, geom) { + for (var i = 0; i < geom.length; i += 3) { + feature.minX = Math.min(feature.minX, geom[i]); + feature.minY = Math.min(feature.minY, geom[i + 1]); + feature.maxX = Math.max(feature.maxX, geom[i]); + feature.maxY = Math.max(feature.maxY, geom[i + 1]); + } +} + +// converts GeoJSON feature into an intermediate projected JSON vector format with simplification data + +function convert(data, options) { + var features = []; + if (data.type === 'FeatureCollection') { + for (var i = 0; i < data.features.length; i++) { + convertFeature(features, data.features[i], options, i); + } + + } else if (data.type === 'Feature') { + convertFeature(features, data, options); + + } else { + // single geometry or a geometry collection + convertFeature(features, {geometry: data}, options); + } + + return features; +} + +function convertFeature(features, geojson, options, index) { + if (!geojson.geometry) return; + + var coords = geojson.geometry.coordinates; + var type = geojson.geometry.type; + var tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2); + var geometry = []; + var id = geojson.id; + if (options.promoteId) { + id = geojson.properties[options.promoteId]; + } else if (options.generateId) { + id = index || 0; + } + if (type === 'Point') { + convertPoint(coords, geometry); + + } else if (type === 'MultiPoint') { + for (var i = 0; i < coords.length; i++) { + convertPoint(coords[i], geometry); + } + + } else if (type === 'LineString') { + convertLine(coords, geometry, tolerance, false); + + } else if (type === 'MultiLineString') { + if (options.lineMetrics) { + // explode into linestrings to be able to track metrics + for (i = 0; i < coords.length; i++) { + geometry = []; + convertLine(coords[i], geometry, tolerance, false); + features.push(createFeature(id, 'LineString', geometry, geojson.properties)); + } + return; + } else { + convertLines(coords, geometry, tolerance, false); + } + + } else if (type === 'Polygon') { + convertLines(coords, geometry, tolerance, true); + + } else if (type === 'MultiPolygon') { + for (i = 0; i < coords.length; i++) { + var polygon = []; + convertLines(coords[i], polygon, tolerance, true); + geometry.push(polygon); + } + } else if (type === 'GeometryCollection') { + for (i = 0; i < geojson.geometry.geometries.length; i++) { + convertFeature(features, { + id: id, + geometry: geojson.geometry.geometries[i], + properties: geojson.properties + }, options, index); + } + return; + } else { + throw new Error('Input data is not a valid GeoJSON object.'); + } + + features.push(createFeature(id, type, geometry, geojson.properties)); +} + +function convertPoint(coords, out) { + out.push(projectX(coords[0])); + out.push(projectY(coords[1])); + out.push(0); +} + +function convertLine(ring, out, tolerance, isPolygon) { + var x0, y0; + var size = 0; + + for (var j = 0; j < ring.length; j++) { + var x = projectX(ring[j][0]); + var y = projectY(ring[j][1]); + + out.push(x); + out.push(y); + out.push(0); + + if (j > 0) { + if (isPolygon) { + size += (x0 * y - x * y0) / 2; // area + } else { + size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length + } + } + x0 = x; + y0 = y; + } + + var last = out.length - 3; + out[2] = 1; + simplify(out, 0, last, tolerance); + out[last + 2] = 1; + + out.size = Math.abs(size); + out.start = 0; + out.end = out.size; +} + +function convertLines(rings, out, tolerance, isPolygon) { + for (var i = 0; i < rings.length; i++) { + var geom = []; + convertLine(rings[i], geom, tolerance, isPolygon); + out.push(geom); + } +} + +function projectX(x) { + return x / 360 + 0.5; +} + +function projectY(y) { + var sin = Math.sin(y * Math.PI / 180); + var y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI; + return y2 < 0 ? 0 : y2 > 1 ? 1 : y2; +} + +/* clip features between two axis-parallel lines: + * | | + * ___|___ | / + * / | \____|____/ + * | | + */ + +function clip(features, scale, k1, k2, axis, minAll, maxAll, options) { + + k1 /= scale; + k2 /= scale; + + if (minAll >= k1 && maxAll < k2) return features; // trivial accept + else if (maxAll < k1 || minAll >= k2) return null; // trivial reject + + var clipped = []; + + for (var i = 0; i < features.length; i++) { + + var feature = features[i]; + var geometry = feature.geometry; + var type = feature.type; + + var min = axis === 0 ? feature.minX : feature.minY; + var max = axis === 0 ? feature.maxX : feature.maxY; + + if (min >= k1 && max < k2) { // trivial accept + clipped.push(feature); + continue; + } else if (max < k1 || min >= k2) { // trivial reject + continue; + } + + var newGeometry = []; + + if (type === 'Point' || type === 'MultiPoint') { + clipPoints(geometry, newGeometry, k1, k2, axis); + + } else if (type === 'LineString') { + clipLine(geometry, newGeometry, k1, k2, axis, false, options.lineMetrics); + + } else if (type === 'MultiLineString') { + clipLines(geometry, newGeometry, k1, k2, axis, false); + + } else if (type === 'Polygon') { + clipLines(geometry, newGeometry, k1, k2, axis, true); + + } else if (type === 'MultiPolygon') { + for (var j = 0; j < geometry.length; j++) { + var polygon = []; + clipLines(geometry[j], polygon, k1, k2, axis, true); + if (polygon.length) { + newGeometry.push(polygon); + } + } + } + + if (newGeometry.length) { + if (options.lineMetrics && type === 'LineString') { + for (j = 0; j < newGeometry.length; j++) { + clipped.push(createFeature(feature.id, type, newGeometry[j], feature.tags)); + } + continue; + } + + if (type === 'LineString' || type === 'MultiLineString') { + if (newGeometry.length === 1) { + type = 'LineString'; + newGeometry = newGeometry[0]; + } else { + type = 'MultiLineString'; + } + } + if (type === 'Point' || type === 'MultiPoint') { + type = newGeometry.length === 3 ? 'Point' : 'MultiPoint'; + } + + clipped.push(createFeature(feature.id, type, newGeometry, feature.tags)); + } + } + + return clipped.length ? clipped : null; +} + +function clipPoints(geom, newGeom, k1, k2, axis) { + for (var i = 0; i < geom.length; i += 3) { + var a = geom[i + axis]; + + if (a >= k1 && a <= k2) { + newGeom.push(geom[i]); + newGeom.push(geom[i + 1]); + newGeom.push(geom[i + 2]); + } + } +} + +function clipLine(geom, newGeom, k1, k2, axis, isPolygon, trackMetrics) { + + var slice = newSlice(geom); + var intersect = axis === 0 ? intersectX : intersectY; + var len = geom.start; + var segLen, t; + + for (var i = 0; i < geom.length - 3; i += 3) { + var ax = geom[i]; + var ay = geom[i + 1]; + var az = geom[i + 2]; + var bx = geom[i + 3]; + var by = geom[i + 4]; + var a = axis === 0 ? ax : ay; + var b = axis === 0 ? bx : by; + var exited = false; + + if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2)); + + if (a < k1) { + // ---|--> | (line enters the clip region from the left) + if (b > k1) { + t = intersect(slice, ax, ay, bx, by, k1); + if (trackMetrics) slice.start = len + segLen * t; + } + } else if (a > k2) { + // | <--|--- (line enters the clip region from the right) + if (b < k2) { + t = intersect(slice, ax, ay, bx, by, k2); + if (trackMetrics) slice.start = len + segLen * t; + } + } else { + addPoint(slice, ax, ay, az); + } + if (b < k1 && a >= k1) { + // <--|--- | or <--|-----|--- (line exits the clip region on the left) + t = intersect(slice, ax, ay, bx, by, k1); + exited = true; + } + if (b > k2 && a <= k2) { + // | ---|--> or ---|-----|--> (line exits the clip region on the right) + t = intersect(slice, ax, ay, bx, by, k2); + exited = true; + } + + if (!isPolygon && exited) { + if (trackMetrics) slice.end = len + segLen * t; + newGeom.push(slice); + slice = newSlice(geom); + } + + if (trackMetrics) len += segLen; + } + + // add the last point + var last = geom.length - 3; + ax = geom[last]; + ay = geom[last + 1]; + az = geom[last + 2]; + a = axis === 0 ? ax : ay; + if (a >= k1 && a <= k2) addPoint(slice, ax, ay, az); + + // close the polygon if its endpoints are not the same after clipping + last = slice.length - 3; + if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) { + addPoint(slice, slice[0], slice[1], slice[2]); + } + + // add the final slice + if (slice.length) { + newGeom.push(slice); + } +} + +function newSlice(line) { + var slice = []; + slice.size = line.size; + slice.start = line.start; + slice.end = line.end; + return slice; +} + +function clipLines(geom, newGeom, k1, k2, axis, isPolygon) { + for (var i = 0; i < geom.length; i++) { + clipLine(geom[i], newGeom, k1, k2, axis, isPolygon, false); + } +} + +function addPoint(out, x, y, z) { + out.push(x); + out.push(y); + out.push(z); +} + +function intersectX(out, ax, ay, bx, by, x) { + var t = (x - ax) / (bx - ax); + out.push(x); + out.push(ay + (by - ay) * t); + out.push(1); + return t; +} + +function intersectY(out, ax, ay, bx, by, y) { + var t = (y - ay) / (by - ay); + out.push(ax + (bx - ax) * t); + out.push(y); + out.push(1); + return t; +} + +function wrap(features, options) { + var buffer = options.buffer / options.extent; + var merged = features; + var left = clip(features, 1, -1 - buffer, buffer, 0, -1, 2, options); // left world copy + var right = clip(features, 1, 1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy + + if (left || right) { + merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy + + if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center + if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center + } + + return merged; +} + +function shiftFeatureCoords(features, offset) { + var newFeatures = []; + + for (var i = 0; i < features.length; i++) { + var feature = features[i], + type = feature.type; + + var newGeometry; + + if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') { + newGeometry = shiftCoords(feature.geometry, offset); + + } else if (type === 'MultiLineString' || type === 'Polygon') { + newGeometry = []; + for (var j = 0; j < feature.geometry.length; j++) { + newGeometry.push(shiftCoords(feature.geometry[j], offset)); + } + } else if (type === 'MultiPolygon') { + newGeometry = []; + for (j = 0; j < feature.geometry.length; j++) { + var newPolygon = []; + for (var k = 0; k < feature.geometry[j].length; k++) { + newPolygon.push(shiftCoords(feature.geometry[j][k], offset)); + } + newGeometry.push(newPolygon); + } + } + + newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags)); + } + + return newFeatures; +} + +function shiftCoords(points, offset) { + var newPoints = []; + newPoints.size = points.size; + + if (points.start !== undefined) { + newPoints.start = points.start; + newPoints.end = points.end; + } + + for (var i = 0; i < points.length; i += 3) { + newPoints.push(points[i] + offset, points[i + 1], points[i + 2]); + } + return newPoints; +} + +// Transforms the coordinates of each feature in the given tile from +// mercator-projected space into (extent x extent) tile space. +function transformTile(tile, extent) { + if (tile.transformed) return tile; + + var z2 = 1 << tile.z, + tx = tile.x, + ty = tile.y, + i, j, k; + + for (i = 0; i < tile.features.length; i++) { + var feature = tile.features[i], + geom = feature.geometry, + type = feature.type; + + feature.geometry = []; + + if (type === 1) { + for (j = 0; j < geom.length; j += 2) { + feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty)); + } + } else { + for (j = 0; j < geom.length; j++) { + var ring = []; + for (k = 0; k < geom[j].length; k += 2) { + ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty)); + } + feature.geometry.push(ring); + } + } + } + + tile.transformed = true; + + return tile; +} + +function transformPoint(x, y, extent, z2, tx, ty) { + return [ + Math.round(extent * (x * z2 - tx)), + Math.round(extent * (y * z2 - ty))]; +} + +function createTile(features, z, tx, ty, options) { + var tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent); + var tile = { + features: [], + numPoints: 0, + numSimplified: 0, + numFeatures: 0, + source: null, + x: tx, + y: ty, + z: z, + transformed: false, + minX: 2, + minY: 1, + maxX: -1, + maxY: 0 + }; + for (var i = 0; i < features.length; i++) { + tile.numFeatures++; + addFeature(tile, features[i], tolerance, options); + + var minX = features[i].minX; + var minY = features[i].minY; + var maxX = features[i].maxX; + var maxY = features[i].maxY; + + if (minX < tile.minX) tile.minX = minX; + if (minY < tile.minY) tile.minY = minY; + if (maxX > tile.maxX) tile.maxX = maxX; + if (maxY > tile.maxY) tile.maxY = maxY; + } + return tile; +} + +function addFeature(tile, feature, tolerance, options) { + + var geom = feature.geometry, + type = feature.type, + simplified = []; + + if (type === 'Point' || type === 'MultiPoint') { + for (var i = 0; i < geom.length; i += 3) { + simplified.push(geom[i]); + simplified.push(geom[i + 1]); + tile.numPoints++; + tile.numSimplified++; + } + + } else if (type === 'LineString') { + addLine(simplified, geom, tile, tolerance, false, false); + + } else if (type === 'MultiLineString' || type === 'Polygon') { + for (i = 0; i < geom.length; i++) { + addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0); + } + + } else if (type === 'MultiPolygon') { + + for (var k = 0; k < geom.length; k++) { + var polygon = geom[k]; + for (i = 0; i < polygon.length; i++) { + addLine(simplified, polygon[i], tile, tolerance, true, i === 0); + } + } + } + + if (simplified.length) { + var tags = feature.tags || null; + if (type === 'LineString' && options.lineMetrics) { + tags = {}; + for (var key in feature.tags) tags[key] = feature.tags[key]; + tags['mapbox_clip_start'] = geom.start / geom.size; + tags['mapbox_clip_end'] = geom.end / geom.size; + } + var tileFeature = { + geometry: simplified, + type: type === 'Polygon' || type === 'MultiPolygon' ? 3 : + type === 'LineString' || type === 'MultiLineString' ? 2 : 1, + tags: tags + }; + if (feature.id !== null) { + tileFeature.id = feature.id; + } + tile.features.push(tileFeature); + } +} + +function addLine(result, geom, tile, tolerance, isPolygon, isOuter) { + var sqTolerance = tolerance * tolerance; + + if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) { + tile.numPoints += geom.length / 3; + return; + } + + var ring = []; + + for (var i = 0; i < geom.length; i += 3) { + if (tolerance === 0 || geom[i + 2] > sqTolerance) { + tile.numSimplified++; + ring.push(geom[i]); + ring.push(geom[i + 1]); + } + tile.numPoints++; + } + + if (isPolygon) rewind(ring, isOuter); + + result.push(ring); +} + +function rewind(ring, clockwise) { + var area = 0; + for (var i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) { + area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]); + } + if (area > 0 === clockwise) { + for (i = 0, len = ring.length; i < len / 2; i += 2) { + var x = ring[i]; + var y = ring[i + 1]; + ring[i] = ring[len - 2 - i]; + ring[i + 1] = ring[len - 1 - i]; + ring[len - 2 - i] = x; + ring[len - 1 - i] = y; + } + } +} + +function geojsonvt(data, options) { + return new GeoJSONVT(data, options); +} + +function GeoJSONVT(data, options) { + options = this.options = extend(Object.create(this.options), options); + + var debug = options.debug; + + if (debug) console.time('preprocess data'); + + if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range'); + if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.'); + + var features = convert(data, options); + + this.tiles = {}; + this.tileCoords = []; + + if (debug) { + console.timeEnd('preprocess data'); + console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints); + console.time('generate tiles'); + this.stats = {}; + this.total = 0; + } + + features = wrap(features, options); + + // start slicing from the top tile down + if (features.length) this.splitTile(features, 0, 0, 0); + + if (debug) { + if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints); + console.timeEnd('generate tiles'); + console.log('tiles generated:', this.total, JSON.stringify(this.stats)); + } +} + +GeoJSONVT.prototype.options = { + maxZoom: 14, // max zoom to preserve detail on + indexMaxZoom: 5, // max zoom in the tile index + indexMaxPoints: 100000, // max number of points per tile in the tile index + tolerance: 3, // simplification tolerance (higher means simpler) + extent: 4096, // tile extent + buffer: 64, // tile buffer on each side + lineMetrics: false, // whether to calculate line metrics + promoteId: null, // name of a feature property to be promoted to feature.id + generateId: false, // whether to generate feature ids. Cannot be used with promoteId + debug: 0 // logging level (0, 1 or 2) +}; + +GeoJSONVT.prototype.splitTile = function (features, z, x, y, cz, cx, cy) { + + var stack = [features, z, x, y], + options = this.options, + debug = options.debug; + + // avoid recursion by using a processing queue + while (stack.length) { + y = stack.pop(); + x = stack.pop(); + z = stack.pop(); + features = stack.pop(); + + var z2 = 1 << z, + id = toID(z, x, y), + tile = this.tiles[id]; + + if (!tile) { + if (debug > 1) console.time('creation'); + + tile = this.tiles[id] = createTile(features, z, x, y, options); + this.tileCoords.push({z: z, x: x, y: y}); + + if (debug) { + if (debug > 1) { + console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)', + z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified); + console.timeEnd('creation'); + } + var key = 'z' + z; + this.stats[key] = (this.stats[key] || 0) + 1; + this.total++; + } + } + + // save reference to original geometry in tile so that we can drill down later if we stop now + tile.source = features; + + // if it's the first-pass tiling + if (!cz) { + // stop tiling if we reached max zoom, or if the tile is too simple + if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue; + + // if a drilldown to a specific tile + } else { + // stop tiling if we reached base zoom or our target tile zoom + if (z === options.maxZoom || z === cz) continue; + + // stop tiling if it's not an ancestor of the target tile + var m = 1 << (cz - z); + if (x !== Math.floor(cx / m) || y !== Math.floor(cy / m)) continue; + } + + // if we slice further down, no need to keep source geometry + tile.source = null; + + if (features.length === 0) continue; + + if (debug > 1) console.time('clipping'); + + // values we'll use for clipping + var k1 = 0.5 * options.buffer / options.extent, + k2 = 0.5 - k1, + k3 = 0.5 + k1, + k4 = 1 + k1, + tl, bl, tr, br, left, right; + + tl = bl = tr = br = null; + + left = clip(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, options); + right = clip(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, options); + features = null; + + if (left) { + tl = clip(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options); + bl = clip(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options); + left = null; + } + + if (right) { + tr = clip(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options); + br = clip(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options); + right = null; + } + + if (debug > 1) console.timeEnd('clipping'); + + stack.push(tl || [], z + 1, x * 2, y * 2); + stack.push(bl || [], z + 1, x * 2, y * 2 + 1); + stack.push(tr || [], z + 1, x * 2 + 1, y * 2); + stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1); + } +}; + +GeoJSONVT.prototype.getTile = function (z, x, y) { + var options = this.options, + extent = options.extent, + debug = options.debug; + + if (z < 0 || z > 24) return null; + + var z2 = 1 << z; + x = ((x % z2) + z2) % z2; // wrap tile x coordinate + + var id = toID(z, x, y); + if (this.tiles[id]) return transformTile(this.tiles[id], extent); + + if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y); + + var z0 = z, + x0 = x, + y0 = y, + parent; + + while (!parent && z0 > 0) { + z0--; + x0 = Math.floor(x0 / 2); + y0 = Math.floor(y0 / 2); + parent = this.tiles[toID(z0, x0, y0)]; + } + + if (!parent || !parent.source) return null; + + // if we found a parent tile containing the original geometry, we can drill down from it + if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0); + + if (debug > 1) console.time('drilling down'); + this.splitTile(parent.source, z0, x0, y0, z, x, y); + if (debug > 1) console.timeEnd('drilling down'); + + return this.tiles[id] ? transformTile(this.tiles[id], extent) : null; +}; + +function toID(z, x, y) { + return (((1 << z) * y + x) * 32) + z; +} + +function extend(dest, src) { + for (var i in src) dest[i] = src[i]; + return dest; +} + +return geojsonvt; + +}))); + +},{}],227:[function(require,module,exports){ +'use strict' +var Buffer = require('safe-buffer').Buffer +var Transform = require('stream').Transform +var inherits = require('inherits') + +function throwIfNotStringOrBuffer (val, prefix) { + if (!Buffer.isBuffer(val) && typeof val !== 'string') { + throw new TypeError(prefix + ' must be a string or a buffer') + } +} + +function HashBase (blockSize) { + Transform.call(this) + + this._block = Buffer.allocUnsafe(blockSize) + this._blockSize = blockSize + this._blockOffset = 0 + this._length = [0, 0, 0, 0] + + this._finalized = false +} + +inherits(HashBase, Transform) + +HashBase.prototype._transform = function (chunk, encoding, callback) { + var error = null + try { + this.update(chunk, encoding) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype._flush = function (callback) { + var error = null + try { + this.push(this.digest()) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype.update = function (data, encoding) { + throwIfNotStringOrBuffer(data, 'Data') + if (this._finalized) throw new Error('Digest already called') + if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding) + + // consume data + var block = this._block + var offset = 0 + while (this._blockOffset + data.length - offset >= this._blockSize) { + for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] + this._update() + this._blockOffset = 0 + } + while (offset < data.length) block[this._blockOffset++] = data[offset++] + + // update length + for (var j = 0, carry = data.length * 8; carry > 0; ++j) { + this._length[j] += carry + carry = (this._length[j] / 0x0100000000) | 0 + if (carry > 0) this._length[j] -= 0x0100000000 * carry + } + + return this +} + +HashBase.prototype._update = function () { + throw new Error('_update is not implemented') +} + +HashBase.prototype.digest = function (encoding) { + if (this._finalized) throw new Error('Digest already called') + this._finalized = true + + var digest = this._digest() + if (encoding !== undefined) digest = digest.toString(encoding) + + // reset state + this._block.fill(0) + this._blockOffset = 0 + for (var i = 0; i < 4; ++i) this._length[i] = 0 + + return digest +} + +HashBase.prototype._digest = function () { + throw new Error('_digest is not implemented') +} + +module.exports = HashBase + +},{"inherits":262,"safe-buffer":318,"stream":328}],228:[function(require,module,exports){ +var hash = exports; + +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); + +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; + +},{"./hash/common":229,"./hash/hmac":230,"./hash/ripemd":231,"./hash/sha":232,"./hash/utils":239}],229:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); + +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; + +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) + this.pending = msg; + else + this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; + + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; + + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) + this.pending = null; + + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) + this._update(msg, i, i + this._delta32); + } + + return this; +}; + +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + + return this._digest(enc); +}; + +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - ((len + this.padLength) % bytes); + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) + res[i] = 0; + + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; + + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = (len >>> 24) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 24) & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + + for (t = 8; t < this.padLength; t++) + res[i++] = 0; + } + + return res; +}; + +},{"./utils":239,"minimalistic-assert":268}],230:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); + +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) + return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; + +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) + key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); + + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) + key.push(0); + + for (i = 0; i < key.length; i++) + key[i] ^= 0x36; + this.inner = new this.Hash().update(key); + + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) + key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; + +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; + +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; + +},{"./utils":239,"minimalistic-assert":268}],231:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var common = require('./common'); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; + +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) + return new RIPEMD160(); + + BlockHash.call(this); + + this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; + +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; + +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32( + rotl32( + sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), + s[j]), + E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32( + rotl32( + sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), + sh[j]), + Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; + +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'little'); + else + return utils.split32(this.h, 'little'); +}; + +function f(j, x, y, z) { + if (j <= 15) + return x ^ y ^ z; + else if (j <= 31) + return (x & y) | ((~x) & z); + else if (j <= 47) + return (x | (~y)) ^ z; + else if (j <= 63) + return (x & z) | (y & (~z)); + else + return x ^ (y | (~z)); +} + +function K(j) { + if (j <= 15) + return 0x00000000; + else if (j <= 31) + return 0x5a827999; + else if (j <= 47) + return 0x6ed9eba1; + else if (j <= 63) + return 0x8f1bbcdc; + else + return 0xa953fd4e; +} + +function Kh(j) { + if (j <= 15) + return 0x50a28be6; + else if (j <= 31) + return 0x5c4dd124; + else if (j <= 47) + return 0x6d703ef3; + else if (j <= 63) + return 0x7a6d76e9; + else + return 0x00000000; +} + +var r = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +]; + +var rh = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +]; + +var s = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +]; + +var sh = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +]; + +},{"./common":229,"./utils":239}],232:[function(require,module,exports){ +'use strict'; + +exports.sha1 = require('./sha/1'); +exports.sha224 = require('./sha/224'); +exports.sha256 = require('./sha/256'); +exports.sha384 = require('./sha/384'); +exports.sha512 = require('./sha/512'); + +},{"./sha/1":233,"./sha/224":234,"./sha/256":235,"./sha/384":236,"./sha/512":237}],233:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; + +var sha1_K = [ + 0x5A827999, 0x6ED9EBA1, + 0x8F1BBCDC, 0xCA62C1D6 +]; + +function SHA1() { + if (!(this instanceof SHA1)) + return new SHA1(); + + BlockHash.call(this); + this.h = [ + 0x67452301, 0xefcdab89, 0x98badcfe, + 0x10325476, 0xc3d2e1f0 ]; + this.W = new Array(80); +} + +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; + +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; + +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + + for(; i < W.length; i++) + W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; + +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +},{"../common":229,"../utils":239,"./common":238}],234:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var SHA256 = require('./256'); + +function SHA224() { + if (!(this instanceof SHA224)) + return new SHA224(); + + SHA256.call(this); + this.h = [ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; +} +utils.inherits(SHA224, SHA256); +module.exports = SHA224; + +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; + +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 7), 'big'); + else + return utils.split32(this.h.slice(0, 7), 'big'); +}; + + +},{"../utils":239,"./256":235}],235:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var assert = require('minimalistic-assert'); + +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; + +var BlockHash = common.BlockHash; + +var sha256_K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]; + +function SHA256() { + if (!(this instanceof SHA256)) + return new SHA256(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; + +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; + +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + for (; i < W.length; i++) + W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; + + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; + +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +},{"../common":229,"../utils":239,"./common":238,"minimalistic-assert":268}],236:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); + +var SHA512 = require('./512'); + +function SHA384() { + if (!(this instanceof SHA384)) + return new SHA384(); + + SHA512.call(this); + this.h = [ + 0xcbbb9d5d, 0xc1059ed8, + 0x629a292a, 0x367cd507, + 0x9159015a, 0x3070dd17, + 0x152fecd8, 0xf70e5939, + 0x67332667, 0xffc00b31, + 0x8eb44a87, 0x68581511, + 0xdb0c2e0d, 0x64f98fa7, + 0x47b5481d, 0xbefa4fa4 ]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; + +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; + +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 12), 'big'); + else + return utils.split32(this.h.slice(0, 12), 'big'); +}; + +},{"../utils":239,"./512":237}],237:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var assert = require('minimalistic-assert'); + +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; + +var BlockHash = common.BlockHash; + +var sha512_K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function SHA512() { + if (!(this instanceof SHA512)) + return new SHA512(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xf3bcc908, + 0xbb67ae85, 0x84caa73b, + 0x3c6ef372, 0xfe94f82b, + 0xa54ff53a, 0x5f1d36f1, + 0x510e527f, 0xade682d1, + 0x9b05688c, 0x2b3e6c1f, + 0x1f83d9ab, 0xfb41bd6b, + 0x5be0cd19, 0x137e2179 ]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; + +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; + +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; + + // 32 x 32bit words + for (var i = 0; i < 32; i++) + W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; + + W[i] = sum64_4_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + W[i + 1] = sum64_4_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + } +}; + +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); + + var W = this.W; + + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; + + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; + + var T1_hi = sum64_5_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + var T1_lo = sum64_5_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + + hh = gh; + hl = gl; + + gh = fh; + gl = fl; + + fh = eh; + fl = el; + + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); + + dh = ch; + dl = cl; + + ch = bh; + cl = bl; + + bh = ah; + bl = al; + + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } + + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; + +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +function ch64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ ((~xh) & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ ((~xl) & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +},{"../common":229,"../utils":239,"minimalistic-assert":268}],238:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var rotr32 = utils.rotr32; + +function ft_1(s, x, y, z) { + if (s === 0) + return ch32(x, y, z); + if (s === 1 || s === 3) + return p32(x, y, z); + if (s === 2) + return maj32(x, y, z); +} +exports.ft_1 = ft_1; + +function ch32(x, y, z) { + return (x & y) ^ ((~x) & z); +} +exports.ch32 = ch32; + +function maj32(x, y, z) { + return (x & y) ^ (x & z) ^ (y & z); +} +exports.maj32 = maj32; + +function p32(x, y, z) { + return x ^ y ^ z; +} +exports.p32 = p32; + +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; + +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; + +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +} +exports.g0_256 = g0_256; + +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} +exports.g1_256 = g1_256; + +},{"../utils":239}],239:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +exports.inherits = inherits; + +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; + } + if (i < 0 || i + 1 >= msg.length) { + return false; + } + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = (c >> 6) | 192; + res[p++] = (c & 63) | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = (c >> 18) | 240; + res[p++] = ((c >> 12) & 63) | 128; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } else { + res[p++] = (c >> 12) | 224; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + } + return res; +} +exports.toArray = toArray; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; + +function htonl(w) { + var res = (w >>> 24) | + ((w >>> 8) & 0xff00) | + ((w << 8) & 0xff0000) | + ((w & 0xff) << 24); + return res >>> 0; +} +exports.htonl = htonl; + +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') + w = htonl(w); + res += zero8(w.toString(16)); + } + return res; +} +exports.toHex32 = toHex32; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +exports.zero2 = zero2; + +function zero8(word) { + if (word.length === 7) + return '0' + word; + else if (word.length === 6) + return '00' + word; + else if (word.length === 5) + return '000' + word; + else if (word.length === 4) + return '0000' + word; + else if (word.length === 3) + return '00000' + word; + else if (word.length === 2) + return '000000' + word; + else if (word.length === 1) + return '0000000' + word; + else + return word; +} +exports.zero8 = zero8; + +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') + w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; + else + w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; + +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = (m >>> 16) & 0xff; + res[k + 2] = (m >>> 8) & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = (m >>> 16) & 0xff; + res[k + 1] = (m >>> 8) & 0xff; + res[k] = m & 0xff; + } + } + return res; +} +exports.split32 = split32; + +function rotr32(w, b) { + return (w >>> b) | (w << (32 - b)); +} +exports.rotr32 = rotr32; + +function rotl32(w, b) { + return (w << b) | (w >>> (32 - b)); +} +exports.rotl32 = rotl32; + +function sum32(a, b) { + return (a + b) >>> 0; +} +exports.sum32 = sum32; + +function sum32_3(a, b, c) { + return (a + b + c) >>> 0; +} +exports.sum32_3 = sum32_3; + +function sum32_4(a, b, c, d) { + return (a + b + c + d) >>> 0; +} +exports.sum32_4 = sum32_4; + +function sum32_5(a, b, c, d, e) { + return (a + b + c + d + e) >>> 0; +} +exports.sum32_5 = sum32_5; + +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; + +function sum64_hi(ah, al, bh, bl) { + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; + +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; + +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; + +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; + +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + lo = (lo + el) >>> 0; + carry += lo < el ? 1 : 0; + + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} +exports.sum64_5_hi = sum64_5_hi; + +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; + +function rotr64_hi(ah, al, num) { + var r = (al << (32 - num)) | (ah >>> num); + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; + +function rotr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; + +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; + +function shr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.shr64_lo = shr64_lo; + +},{"inherits":262,"minimalistic-assert":268}],240:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var utils = require('minimalistic-crypto-utils'); +var assert = require('minimalistic-assert'); + +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) + return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; + +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; + +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac() + .update(this.V) + .update([ 0x00 ]); + if (seed) + kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) + return; + + this.K = this._hmac() + .update(this.V) + .update([ 0x01 ]) + .update(seed) + .digest(); + this.V = this._hmac().update(this.V).digest(); +}; + +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; + +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) + throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } + + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); +}; + +},{"hash.js":228,"minimalistic-assert":268,"minimalistic-crypto-utils":269}],241:[function(require,module,exports){ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + +},{}],242:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("./types"); +const keys = Object.keys(types_1.typeHandlers); +// This map helps avoid validating for every single image type +const firstBytes = { + 0x38: 'psd', + 0x42: 'bmp', + 0x44: 'dds', + 0x47: 'gif', + 0x49: 'tiff', + 0x4d: 'tiff', + 0x52: 'webp', + 0x69: 'icns', + 0x89: 'png', + 0xff: 'jpg' +}; +function detector(buffer) { + const byte = buffer[0]; + if (byte in firstBytes) { + const type = firstBytes[byte]; + if (types_1.typeHandlers[type].validate(buffer)) { + return type; + } + } + const finder = (key) => types_1.typeHandlers[key].validate(buffer); + return keys.find(finder); +} +exports.detector = detector; + +},{"./types":246}],243:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +// fs.promises polyfill for node 8.x +if (!('promises' in fs)) { + class FileHandle { + constructor(fd) { + this.fd = fd; + } + stat() { + return new Promise((resolve, reject) => { + fs.fstat(this.fd, (err, stats) => { + if (err) { + reject(err); + } + else { + resolve(stats); + } + }); + }); + } + read(buffer, offset, length, position) { + return new Promise((resolve, reject) => { + fs.read(this.fd, buffer, offset, length, position, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + close() { + return new Promise((resolve, reject) => { + fs.close(this.fd, (err) => { + if (err) { + reject(err); + } + else { + resolve(); + } + }); + }); + } + } + Object.defineProperty(fs, 'promises', { + value: { + open: (filepath, flags) => (new Promise((resolve, reject) => { + fs.open(filepath, flags, (err, fd) => { + if (err) { + reject(err); + } + else { + resolve(new FileHandle(fd)); + } + }); + })), + }, + writable: false + }); +} + +},{"fs":177}],244:[function(require,module,exports){ +(function (process,Buffer){ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const path = require("path"); +const queue_1 = require("queue"); +const types_1 = require("./types"); +const detector_1 = require("./detector"); +require("./fs.promises"); +// Maximum buffer size, with a default of 512 kilobytes. +// TO-DO: make this adaptive based on the initial signature of the image +const MaxBufferSize = 512 * 1024; +// This queue is for async `fs` operations, to avoid reaching file-descriptor limits +const queue = new queue_1.default({ concurrency: 100, autostart: true }); +/** + * Return size information based on a buffer + * + * @param {Buffer} buffer + * @param {String} filepath + * @returns {Object} + */ +function lookup(buffer, filepath) { + // detect the file type.. don't rely on the extension + const type = detector_1.detector(buffer); + // find an appropriate handler for this file type + if (type && type in types_1.typeHandlers) { + const size = types_1.typeHandlers[type].calculate(buffer, filepath); + if (size !== undefined) { + size.type = type; + return size; + } + } + // throw up, if we don't understand the file + throw new TypeError('unsupported file type: ' + type + ' (file: ' + filepath + ')'); +} +/** + * Reads a file into a buffer. + * @param {String} filepath + * @returns {Promise} + */ +function asyncFileToBuffer(filepath) { + return __awaiter(this, void 0, void 0, function* () { + const handle = yield fs.promises.open(filepath, 'r'); + const { size } = yield handle.stat(); + if (size <= 0) { + throw new Error('Empty file'); + } + const bufferSize = Math.min(size, MaxBufferSize); + const buffer = Buffer.alloc(bufferSize); + yield handle.read(buffer, 0, bufferSize, 0); + yield handle.close(); + return buffer; + }); +} +/** + * Synchronously reads a file into a buffer, blocking the nodejs process. + * + * @param {String} filepath + * @returns {Buffer} + */ +function syncFileToBuffer(filepath) { + // read from the file, synchronously + const descriptor = fs.openSync(filepath, 'r'); + const size = fs.fstatSync(descriptor).size; + const bufferSize = Math.min(size, MaxBufferSize); + const buffer = Buffer.alloc(bufferSize); + fs.readSync(descriptor, buffer, 0, bufferSize, 0); + fs.closeSync(descriptor); + return buffer; +} +module.exports = exports = imageSize; // backwards compatibility +/** + * @param {Buffer|string} input - buffer or relative/absolute path of the image file + * @param {Function=} [callback] - optional function for async detection + */ +function imageSize(input, callback) { + // Handle buffer input + if (Buffer.isBuffer(input)) { + return lookup(input); + } + // input should be a string at this point + if (typeof input !== 'string') { + throw new TypeError('invalid invocation'); + } + // resolve the file path + const filepath = path.resolve(input); + if (typeof callback === 'function') { + queue.push(() => asyncFileToBuffer(filepath) + .then((buffer) => process.nextTick(callback, null, lookup(buffer, filepath))) + .catch(callback)); + } + else { + const buffer = syncFileToBuffer(filepath); + return lookup(buffer, filepath); + } +} +exports.imageSize = imageSize; +exports.setConcurrency = (c) => { queue.concurrency = c; }; +exports.types = Object.keys(types_1.typeHandlers); + +}).call(this,require('_process'),require("buffer").Buffer) +},{"./detector":242,"./fs.promises":243,"./types":246,"_process":284,"buffer":182,"fs":177,"path":276,"queue":296}],245:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +// Abstract reading multi-byte unsigned integers +function readUInt(buffer, bits, offset, isBigEndian) { + offset = offset || 0; + const endian = isBigEndian ? 'BE' : 'LE'; + const methodName = ('readUInt' + bits + endian); + const method = buffer[methodName]; + return method.call(buffer, offset); +} +exports.readUInt = readUInt; + +},{}],246:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bmp_1 = require("./types/bmp"); +const cur_1 = require("./types/cur"); +const dds_1 = require("./types/dds"); +const gif_1 = require("./types/gif"); +const icns_1 = require("./types/icns"); +const ico_1 = require("./types/ico"); +const jpg_1 = require("./types/jpg"); +const ktx_1 = require("./types/ktx"); +const png_1 = require("./types/png"); +const pnm_1 = require("./types/pnm"); +const psd_1 = require("./types/psd"); +const svg_1 = require("./types/svg"); +const tiff_1 = require("./types/tiff"); +const webp_1 = require("./types/webp"); +exports.typeHandlers = { + bmp: bmp_1.BMP, + cur: cur_1.CUR, + dds: dds_1.DDS, + gif: gif_1.GIF, + icns: icns_1.ICNS, + ico: ico_1.ICO, + jpg: jpg_1.JPG, + ktx: ktx_1.KTX, + png: png_1.PNG, + pnm: pnm_1.PNM, + psd: psd_1.PSD, + svg: svg_1.SVG, + tiff: tiff_1.TIFF, + webp: webp_1.WEBP, +}; + +},{"./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){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BMP = { + validate(buffer) { + return ('BM' === buffer.toString('ascii', 0, 2)); + }, + calculate(buffer) { + return { + height: Math.abs(buffer.readInt32LE(22)), + width: buffer.readUInt32LE(18) + }; + } +}; + +},{}],248:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ico_1 = require("./ico"); +const TYPE_CURSOR = 2; +exports.CUR = { + validate(buffer) { + if (buffer.readUInt16LE(0) !== 0) { + return false; + } + return buffer.readUInt16LE(2) === TYPE_CURSOR; + }, + calculate(buffer) { + return ico_1.ICO.calculate(buffer); + } +}; + +},{"./ico":252}],249:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DDS = { + validate(buffer) { + return buffer.readUInt32LE(0) === 0x20534444; + }, + calculate(buffer) { + return { + height: buffer.readUInt32LE(12), + width: buffer.readUInt32LE(16) + }; + } +}; + +},{}],250:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const gifRegexp = /^GIF8[79]a/; +exports.GIF = { + validate(buffer) { + const signature = buffer.toString('ascii', 0, 6); + return (gifRegexp.test(signature)); + }, + calculate(buffer) { + return { + height: buffer.readUInt16LE(8), + width: buffer.readUInt16LE(6) + }; + } +}; + +},{}],251:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * ICNS Header + * + * | Offset | Size | Purpose | + * | 0 | 4 | Magic literal, must be "icns" (0x69, 0x63, 0x6e, 0x73) | + * | 4 | 4 | Length of file, in bytes, msb first. | + * + */ +const SIZE_HEADER = 4 + 4; // 8 +const FILE_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN +/** + * Image Entry + * + * | Offset | Size | Purpose | + * | 0 | 4 | Icon type, see OSType below. | + * | 4 | 4 | Length of data, in bytes (including type and length), msb first. | + * | 8 | n | Icon data | + */ +const ENTRY_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN +/* tslint:disable:object-literal-sort-keys */ +const ICON_TYPE_SIZE = { + ICON: 32, + 'ICN#': 32, + // m => 16 x 16 + 'icm#': 16, + icm4: 16, + icm8: 16, + // s => 16 x 16 + 'ics#': 16, + ics4: 16, + ics8: 16, + is32: 16, + s8mk: 16, + icp4: 16, + // l => 32 x 32 + icl4: 32, + icl8: 32, + il32: 32, + l8mk: 32, + icp5: 32, + ic11: 32, + // h => 48 x 48 + ich4: 48, + ich8: 48, + ih32: 48, + h8mk: 48, + // . => 64 x 64 + icp6: 64, + ic12: 32, + // t => 128 x 128 + it32: 128, + t8mk: 128, + ic07: 128, + // . => 256 x 256 + ic08: 256, + ic13: 256, + // . => 512 x 512 + ic09: 512, + ic14: 512, + // . => 1024 x 1024 + ic10: 1024, +}; +/* tslint:enable:object-literal-sort-keys */ +function readImageHeader(buffer, imageOffset) { + const imageLengthOffset = imageOffset + ENTRY_LENGTH_OFFSET; + return [ + buffer.toString('ascii', imageOffset, imageLengthOffset), + buffer.readUInt32BE(imageLengthOffset) + ]; +} +function getImageSize(type) { + const size = ICON_TYPE_SIZE[type]; + return { width: size, height: size, type }; +} +exports.ICNS = { + validate(buffer) { + return ('icns' === buffer.toString('ascii', 0, 4)); + }, + calculate(buffer) { + const bufferLength = buffer.length; + const fileLength = buffer.readUInt32BE(FILE_LENGTH_OFFSET); + let imageOffset = SIZE_HEADER; + let imageHeader = readImageHeader(buffer, imageOffset); + let imageSize = getImageSize(imageHeader[0]); + imageOffset += imageHeader[1]; + if (imageOffset === fileLength) { + return imageSize; + } + const result = { + height: imageSize.height, + images: [imageSize], + width: imageSize.width + }; + while (imageOffset < fileLength && imageOffset < bufferLength) { + imageHeader = readImageHeader(buffer, imageOffset); + imageSize = getImageSize(imageHeader[0]); + imageOffset += imageHeader[1]; + result.images.push(imageSize); + } + return result; + } +}; + +},{}],252:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const TYPE_ICON = 1; +/** + * ICON Header + * + * | Offset | Size | Purpose | + * | 0 | 2 | Reserved. Must always be 0. | + * | 2 | 2 | Image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid. | + * | 4 | 2 | Number of images in the file. | + * + */ +const SIZE_HEADER = 2 + 2 + 2; // 6 +/** + * Image Entry + * + * | Offset | Size | Purpose | + * | 0 | 1 | Image width in pixels. Can be any number between 0 and 255. Value 0 means width is 256 pixels. | + * | 1 | 1 | Image height in pixels. Can be any number between 0 and 255. Value 0 means height is 256 pixels. | + * | 2 | 1 | Number of colors in the color palette. Should be 0 if the image does not use a color palette. | + * | 3 | 1 | Reserved. Should be 0. | + * | 4 | 2 | ICO format: Color planes. Should be 0 or 1. | + * | | | CUR format: The horizontal coordinates of the hotspot in number of pixels from the left. | + * | 6 | 2 | ICO format: Bits per pixel. | + * | | | CUR format: The vertical coordinates of the hotspot in number of pixels from the top. | + * | 8 | 4 | The size of the image's data in bytes | + * | 12 | 4 | The offset of BMP or PNG data from the beginning of the ICO/CUR file | + * + */ +const SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4; // 16 +function getSizeFromOffset(buffer, offset) { + const value = buffer.readUInt8(offset); + return value === 0 ? 256 : value; +} +function getImageSize(buffer, imageIndex) { + const offset = SIZE_HEADER + (imageIndex * SIZE_IMAGE_ENTRY); + return { + height: getSizeFromOffset(buffer, offset + 1), + width: getSizeFromOffset(buffer, offset) + }; +} +exports.ICO = { + validate(buffer) { + if (buffer.readUInt16LE(0) !== 0) { + return false; + } + return buffer.readUInt16LE(2) === TYPE_ICON; + }, + calculate(buffer) { + const nbImages = buffer.readUInt16LE(4); + const imageSize = getImageSize(buffer, 0); + if (nbImages === 1) { + return imageSize; + } + const result = { + height: imageSize.height, + images: [imageSize], + width: imageSize.width + }; + for (let imageIndex = 1; imageIndex < nbImages; imageIndex += 1) { + result.images.push(getImageSize(buffer, imageIndex)); + } + return result; + } +}; + +},{}],253:[function(require,module,exports){ +"use strict"; +// NOTE: we only support baseline and progressive JPGs here +// due to the structure of the loader class, we only get a buffer +// with a maximum size of 4096 bytes. so if the SOF marker is outside +// if this range we can't detect the file size correctly. +Object.defineProperty(exports, "__esModule", { value: true }); +const readUInt_1 = require("../readUInt"); +const EXIF_MARKER = '45786966'; +const APP1_DATA_SIZE_BYTES = 2; +const EXIF_HEADER_BYTES = 6; +const TIFF_BYTE_ALIGN_BYTES = 2; +const BIG_ENDIAN_BYTE_ALIGN = '4d4d'; +const LITTLE_ENDIAN_BYTE_ALIGN = '4949'; +// Each entry is exactly 12 bytes +const IDF_ENTRY_BYTES = 12; +const NUM_DIRECTORY_ENTRIES_BYTES = 2; +function isEXIF(buffer) { + return (buffer.toString('hex', 2, 6) === EXIF_MARKER); +} +function extractSize(buffer, index) { + return { + height: buffer.readUInt16BE(index), + width: buffer.readUInt16BE(index + 2) + }; +} +function validateExifBlock(buffer, index) { + // Skip APP1 Data Size + const exifBlock = buffer.slice(APP1_DATA_SIZE_BYTES, index); + // Consider byte alignment + const byteAlign = exifBlock.toString('hex', EXIF_HEADER_BYTES, EXIF_HEADER_BYTES + TIFF_BYTE_ALIGN_BYTES); + // Ignore Empty EXIF. Validate byte alignment + const isBigEndian = byteAlign === BIG_ENDIAN_BYTE_ALIGN; + const isLittleEndian = byteAlign === LITTLE_ENDIAN_BYTE_ALIGN; + if (isBigEndian || isLittleEndian) { + return extractOrientation(exifBlock, isBigEndian); + } +} +function extractOrientation(exifBlock, isBigEndian) { + // TODO: assert that this contains 0x002A + // let STATIC_MOTOROLA_TIFF_HEADER_BYTES = 2 + // let TIFF_IMAGE_FILE_DIRECTORY_BYTES = 4 + // TODO: derive from TIFF_IMAGE_FILE_DIRECTORY_BYTES + const idfOffset = 8; + // IDF osset works from right after the header bytes + // (so the offset includes the tiff byte align) + const offset = EXIF_HEADER_BYTES + idfOffset; + const idfDirectoryEntries = readUInt_1.readUInt(exifBlock, 16, offset, isBigEndian); + for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) { + const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + (directoryEntryNumber * IDF_ENTRY_BYTES); + const end = start + IDF_ENTRY_BYTES; + // Skip on corrupt EXIF blocks + if (start > exifBlock.length) { + return; + } + const block = exifBlock.slice(start, end); + const tagNumber = readUInt_1.readUInt(block, 16, 0, isBigEndian); + // 0x0112 (decimal: 274) is the `orientation` tag ID + if (tagNumber === 274) { + const dataFormat = readUInt_1.readUInt(block, 16, 2, isBigEndian); + if (dataFormat !== 3) { + return; + } + // unsinged int has 2 bytes per component + // if there would more than 4 bytes in total it's a pointer + const numberOfComponents = readUInt_1.readUInt(block, 32, 4, isBigEndian); + if (numberOfComponents !== 1) { + return; + } + return readUInt_1.readUInt(block, 16, 8, isBigEndian); + } + } +} +function validateBuffer(buffer, index) { + // index should be within buffer limits + if (index > buffer.length) { + throw new TypeError('Corrupt JPG, exceeded buffer limits'); + } + // Every JPEG block must begin with a 0xFF + if (buffer[index] !== 0xFF) { + throw new TypeError('Invalid JPG, marker table corrupted'); + } +} +exports.JPG = { + validate(buffer) { + const SOIMarker = buffer.toString('hex', 0, 2); + return ('ffd8' === SOIMarker); + }, + calculate(buffer) { + // Skip 4 chars, they are for signature + buffer = buffer.slice(4); + let orientation; + let next; + while (buffer.length) { + // read length of the next block + const i = buffer.readUInt16BE(0); + if (isEXIF(buffer)) { + orientation = validateExifBlock(buffer, i); + } + // ensure correct format + validateBuffer(buffer, i); + // 0xFFC0 is baseline standard(SOF) + // 0xFFC1 is baseline optimized(SOF) + // 0xFFC2 is progressive(SOF2) + next = buffer[i + 1]; + if (next === 0xC0 || next === 0xC1 || next === 0xC2) { + const size = extractSize(buffer, i + 5); + // TODO: is orientation=0 a valid answer here? + if (!orientation) { + return size; + } + return { + height: size.height, + orientation, + width: size.width + }; + } + // move to the next block + buffer = buffer.slice(i + 2); + } + throw new TypeError('Invalid JPG, no size found'); + } +}; + +},{"../readUInt":245}],254:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const SIGNATURE = 'KTX 11'; +exports.KTX = { + validate(buffer) { + return SIGNATURE === buffer.toString('ascii', 1, 7); + }, + calculate(buffer) { + return { + height: buffer.readUInt32LE(40), + width: buffer.readUInt32LE(36), + }; + } +}; + +},{}],255:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pngSignature = 'PNG\r\n\x1a\n'; +const pngImageHeaderChunkName = 'IHDR'; +// Used to detect "fried" png's: http://www.jongware.com/pngdefry.html +const pngFriedChunkName = 'CgBI'; +exports.PNG = { + validate(buffer) { + if (pngSignature === buffer.toString('ascii', 1, 8)) { + let chunkName = buffer.toString('ascii', 12, 16); + if (chunkName === pngFriedChunkName) { + chunkName = buffer.toString('ascii', 28, 32); + } + if (chunkName !== pngImageHeaderChunkName) { + throw new TypeError('Invalid PNG'); + } + return true; + } + return false; + }, + calculate(buffer) { + if (buffer.toString('ascii', 12, 16) === pngFriedChunkName) { + return { + height: buffer.readUInt32BE(36), + width: buffer.readUInt32BE(32) + }; + } + return { + height: buffer.readUInt32BE(20), + width: buffer.readUInt32BE(16) + }; + } +}; + +},{}],256:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const PNMTypes = { + P1: 'pbm/ascii', + P2: 'pgm/ascii', + P3: 'ppm/ascii', + P4: 'pbm', + P5: 'pgm', + P6: 'ppm', + P7: 'pam', + PF: 'pfm' +}; +const Signatures = Object.keys(PNMTypes); +const handlers = { + default: (lines) => { + let dimensions = []; + while (lines.length > 0) { + const line = lines.shift(); + if (line[0] === '#') { + continue; + } + dimensions = line.split(' '); + break; + } + if (dimensions.length === 2) { + return { + height: parseInt(dimensions[1], 10), + width: parseInt(dimensions[0], 10), + }; + } + else { + throw new TypeError('Invalid PNM'); + } + }, + pam: (lines) => { + const size = {}; + while (lines.length > 0) { + const line = lines.shift(); + if (line.length > 16 || line.charCodeAt(0) > 128) { + continue; + } + const [key, value] = line.split(' '); + if (key && value) { + size[key.toLowerCase()] = parseInt(value, 10); + } + if (size.height && size.width) { + break; + } + } + if (size.height && size.width) { + return { + height: size.height, + width: size.width + }; + } + else { + throw new TypeError('Invalid PAM'); + } + } +}; +exports.PNM = { + validate(buffer) { + const signature = buffer.toString('ascii', 0, 2); + return Signatures.includes(signature); + }, + calculate(buffer) { + const signature = buffer.toString('ascii', 0, 2); + const type = PNMTypes[signature]; + // TODO: this probably generates garbage. move to a stream based parser + const lines = buffer.toString('ascii', 3).split(/[\r\n]+/); + const handler = handlers[type] || handlers.default; + return handler(lines); + } +}; + +},{}],257:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PSD = { + validate(buffer) { + return ('8BPS' === buffer.toString('ascii', 0, 4)); + }, + calculate(buffer) { + return { + height: buffer.readUInt32BE(14), + width: buffer.readUInt32BE(18) + }; + } +}; + +},{}],258:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const svgReg = /"']|"[^"]*"|'[^']*')*>/; +const extractorRegExps = { + height: /\sheight=(['"])([^%]+?)\1/, + root: svgReg, + viewbox: /\sviewBox=(['"])(.+?)\1/, + width: /\swidth=(['"])([^%]+?)\1/, +}; +const INCH_CM = 2.54; +const units = { + cm: 96 / INCH_CM, + em: 16, + ex: 8, + m: 96 / INCH_CM * 100, + mm: 96 / INCH_CM / 10, + pc: 96 / 72 / 12, + pt: 96 / 72, +}; +function parseLength(len) { + const m = /([0-9.]+)([a-z]*)/.exec(len); + if (!m) { + return undefined; + } + return Math.round(parseFloat(m[1]) * (units[m[2]] || 1)); +} +function parseViewbox(viewbox) { + const bounds = viewbox.split(' '); + return { + height: parseLength(bounds[3]), + width: parseLength(bounds[2]) + }; +} +function parseAttributes(root) { + const width = root.match(extractorRegExps.width); + const height = root.match(extractorRegExps.height); + const viewbox = root.match(extractorRegExps.viewbox); + return { + height: height && parseLength(height[2]), + viewbox: viewbox && parseViewbox(viewbox[2]), + width: width && parseLength(width[2]), + }; +} +function calculateByDimensions(attrs) { + return { + height: attrs.height, + width: attrs.width, + }; +} +function calculateByViewbox(attrs) { + const viewbox = attrs && attrs.viewbox; + if (!viewbox) { + return; + } + const ratio = viewbox.width / viewbox.height; + if (attrs.width) { + return { + height: Math.floor(attrs.width / ratio), + width: attrs.width, + }; + } + if (attrs.height) { + return { + height: attrs.height, + width: Math.floor(attrs.height * ratio), + }; + } + return { + height: viewbox.height, + width: viewbox.width, + }; +} +exports.SVG = { + validate(buffer) { + const str = String(buffer); + return svgReg.test(str); + }, + calculate(buffer) { + const root = buffer.toString('utf8').match(extractorRegExps.root); + if (root) { + const attrs = parseAttributes(root[0]); + if (attrs.width && attrs.height) { + return calculateByDimensions(attrs); + } + if (attrs.viewbox) { + return calculateByViewbox(attrs); + } + } + throw new TypeError('Invalid SVG'); + } +}; + +},{}],259:[function(require,module,exports){ +(function (Buffer){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +// based on http://www.compix.com/fileformattif.htm +// TO-DO: support big-endian as well +const fs = require("fs"); +const readUInt_1 = require("../readUInt"); +// Read IFD (image-file-directory) into a buffer +function readIFD(buffer, filepath, isBigEndian) { + const ifdOffset = readUInt_1.readUInt(buffer, 32, 4, isBigEndian); + // read only till the end of the file + let bufferSize = 1024; + const fileSize = fs.statSync(filepath).size; + if (ifdOffset + bufferSize > fileSize) { + bufferSize = fileSize - ifdOffset - 10; + } + // populate the buffer + const endBuffer = Buffer.alloc(bufferSize); + const descriptor = fs.openSync(filepath, 'r'); + fs.readSync(descriptor, endBuffer, 0, bufferSize, ifdOffset); + return endBuffer.slice(2); +} +// TIFF values seem to be messed up on Big-Endian, this helps +function readValue(buffer, isBigEndian) { + const low = readUInt_1.readUInt(buffer, 16, 8, isBigEndian); + const high = readUInt_1.readUInt(buffer, 16, 10, isBigEndian); + return (high << 16) + low; +} +// move to the next tag +function nextTag(buffer) { + if (buffer.length > 24) { + return buffer.slice(12); + } +} +// Extract IFD tags from TIFF metadata +function extractTags(buffer, isBigEndian) { + const tags = {}; + let temp = buffer; + while (temp && temp.length) { + const code = readUInt_1.readUInt(temp, 16, 0, isBigEndian); + const type = readUInt_1.readUInt(temp, 16, 2, isBigEndian); + const length = readUInt_1.readUInt(temp, 32, 4, isBigEndian); + // 0 means end of IFD + if (code === 0) { + break; + } + else { + // 256 is width, 257 is height + // if (code === 256 || code === 257) { + if (length === 1 && (type === 3 || type === 4)) { + tags[code] = readValue(temp, isBigEndian); + } + // move to the next tag + temp = nextTag(temp); + } + } + return tags; +} +// Test if the TIFF is Big Endian or Little Endian +function determineEndianness(buffer) { + const signature = buffer.toString('ascii', 0, 2); + if ('II' === signature) { + return 'LE'; + } + else if ('MM' === signature) { + return 'BE'; + } +} +const signatures = [ + // '492049', // currently not supported + '49492a00', + '4d4d002a', +]; +exports.TIFF = { + validate(buffer) { + return signatures.includes(buffer.toString('hex', 0, 4)); + }, + calculate(buffer, filepath) { + if (!filepath) { + throw new TypeError('Tiff doesn\'t support buffer'); + } + // Determine BE/LE + const isBigEndian = determineEndianness(buffer) === 'BE'; + // read the IFD + const ifdBuffer = readIFD(buffer, filepath, isBigEndian); + // extract the tags from the IFD + const tags = extractTags(ifdBuffer, isBigEndian); + const width = tags[256]; + const height = tags[257]; + if (!width || !height) { + throw new TypeError('Invalid Tiff. Missing tags'); + } + return { height, width }; + } +}; + +}).call(this,require("buffer").Buffer) +},{"../readUInt":245,"buffer":182,"fs":177}],260:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function calculateExtended(buffer) { + return { + height: 1 + buffer.readUIntLE(7, 3), + width: 1 + buffer.readUIntLE(4, 3) + }; +} +function calculateLossless(buffer) { + return { + height: 1 + (((buffer[4] & 0xF) << 10) | (buffer[3] << 2) | ((buffer[2] & 0xC0) >> 6)), + width: 1 + (((buffer[2] & 0x3F) << 8) | buffer[1]) + }; +} +function calculateLossy(buffer) { + // `& 0x3fff` returns the last 14 bits + // TO-DO: include webp scaling in the calculations + return { + height: buffer.readInt16LE(8) & 0x3fff, + width: buffer.readInt16LE(6) & 0x3fff + }; +} +exports.WEBP = { + validate(buffer) { + const riffHeader = 'RIFF' === buffer.toString('ascii', 0, 4); + const webpHeader = 'WEBP' === buffer.toString('ascii', 8, 12); + const vp8Header = 'VP8' === buffer.toString('ascii', 12, 15); + return (riffHeader && webpHeader && vp8Header); + }, + calculate(buffer) { + const chunkHeader = buffer.toString('ascii', 12, 16); + buffer = buffer.slice(20, 30); + // Extended webp stream signature + if (chunkHeader === 'VP8X') { + const extendedHeader = buffer[0]; + const validStart = (extendedHeader & 0xc0) === 0; + const validEnd = (extendedHeader & 0x01) === 0; + if (validStart && validEnd) { + return calculateExtended(buffer); + } + else { + // TODO: breaking change + throw new TypeError('Invalid WebP'); + } + } + // Lossless webp stream signature + if (chunkHeader === 'VP8 ' && buffer[0] !== 0x2f) { + return calculateLossy(buffer); + } + // Lossy webp stream signature + const signature = buffer.toString('hex', 3, 6); + if (chunkHeader === 'VP8L' && signature !== '9d012a') { + return calculateLossless(buffer); + } + throw new TypeError('Invalid WebP'); + } +}; + +},{}],261:[function(require,module,exports){ + +var indexOf = [].indexOf; + +module.exports = function(arr, obj){ + if (indexOf) return arr.indexOf(obj); + for (var i = 0; i < arr.length; ++i) { + if (arr[i] === obj) return i; + } + return -1; +}; +},{}],262:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} + +},{}],263:[function(require,module,exports){ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +// The _isBuffer check is for Safari 5-7 support, because it's missing +// Object.prototype.constructor. Remove this eventually +module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) +} + +function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} + +// For Node v0.10 support. Remove this eventually. +function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) +} + +},{}],264:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],265:[function(require,module,exports){ +/** + * martinez v0.4.3 + * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor + * + * @author Alex Milevski + * @license MIT + * @preserve + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.martinez = {}))); +}(this, (function (exports) { 'use strict'; + + function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; } + + var SplayTree = function SplayTree(compare, noDuplicates) { + if ( compare === void 0 ) compare = DEFAULT_COMPARE; + if ( noDuplicates === void 0 ) noDuplicates = false; + + this._compare = compare; + this._root = null; + this._size = 0; + this._noDuplicates = !!noDuplicates; + }; + + var prototypeAccessors = { size: { configurable: true } }; + + + SplayTree.prototype.rotateLeft = function rotateLeft (x) { + var y = x.right; + if (y) { + x.right = y.left; + if (y.left) { y.left.parent = x; } + y.parent = x.parent; + } + + if (!x.parent) { this._root = y; } + else if (x === x.parent.left) { x.parent.left = y; } + else { x.parent.right = y; } + if (y) { y.left = x; } + x.parent = y; + }; + + + SplayTree.prototype.rotateRight = function rotateRight (x) { + var y = x.left; + if (y) { + x.left = y.right; + if (y.right) { y.right.parent = x; } + y.parent = x.parent; + } + + if (!x.parent) { this._root = y; } + else if(x === x.parent.left) { x.parent.left = y; } + else { x.parent.right = y; } + if (y) { y.right = x; } + x.parent = y; + }; + + + SplayTree.prototype._splay = function _splay (x) { + var this$1 = this; + + while (x.parent) { + var p = x.parent; + if (!p.parent) { + if (p.left === x) { this$1.rotateRight(p); } + else { this$1.rotateLeft(p); } + } else if (p.left === x && p.parent.left === p) { + this$1.rotateRight(p.parent); + this$1.rotateRight(p); + } else if (p.right === x && p.parent.right === p) { + this$1.rotateLeft(p.parent); + this$1.rotateLeft(p); + } else if (p.left === x && p.parent.right === p) { + this$1.rotateRight(p); + this$1.rotateLeft(p); + } else { + this$1.rotateLeft(p); + this$1.rotateRight(p); + } + } + }; + + + SplayTree.prototype.splay = function splay (x) { + var this$1 = this; + + var p, gp, ggp, l, r; + + while (x.parent) { + p = x.parent; + gp = p.parent; + + if (gp && gp.parent) { + ggp = gp.parent; + if (ggp.left === gp) { ggp.left= x; } + else { ggp.right = x; } + x.parent = ggp; + } else { + x.parent = null; + this$1._root = x; + } + + l = x.left; r = x.right; + + if (x === p.left) { // left + if (gp) { + if (gp.left === p) { + /* zig-zig */ + if (p.right) { + gp.left = p.right; + gp.left.parent = gp; + } else { gp.left = null; } + + p.right = gp; + gp.parent = p; + } else { + /* zig-zag */ + if (l) { + gp.right = l; + l.parent = gp; + } else { gp.right = null; } + + x.left = gp; + gp.parent = x; + } + } + if (r) { + p.left = r; + r.parent = p; + } else { p.left = null; } + + x.right= p; + p.parent = x; + } else { // right + if (gp) { + if (gp.right === p) { + /* zig-zig */ + if (p.left) { + gp.right = p.left; + gp.right.parent = gp; + } else { gp.right = null; } + + p.left = gp; + gp.parent = p; + } else { + /* zig-zag */ + if (r) { + gp.left = r; + r.parent = gp; + } else { gp.left = null; } + + x.right = gp; + gp.parent = x; + } + } + if (l) { + p.right = l; + l.parent = p; + } else { p.right = null; } + + x.left = p; + p.parent = x; + } + } + }; + + + SplayTree.prototype.replace = function replace (u, v) { + if (!u.parent) { this._root = v; } + else if (u === u.parent.left) { u.parent.left = v; } + else { u.parent.right = v; } + if (v) { v.parent = u.parent; } + }; + + + SplayTree.prototype.minNode = function minNode (u) { + if ( u === void 0 ) u = this._root; + + if (u) { while (u.left) { u = u.left; } } + return u; + }; + + + SplayTree.prototype.maxNode = function maxNode (u) { + if ( u === void 0 ) u = this._root; + + if (u) { while (u.right) { u = u.right; } } + return u; + }; + + + SplayTree.prototype.insert = function insert (key, data) { + var z = this._root; + var p = null; + var comp = this._compare; + var cmp; + + if (this._noDuplicates) { + while (z) { + p = z; + cmp = comp(z.key, key); + if (cmp === 0) { return; } + else if (comp(z.key, key) < 0) { z = z.right; } + else { z = z.left; } + } + } else { + while (z) { + p = z; + if (comp(z.key, key) < 0) { z = z.right; } + else { z = z.left; } + } + } + + z = { key: key, data: data, left: null, right: null, parent: p }; + + if (!p) { this._root = z; } + else if (comp(p.key, z.key) < 0) { p.right = z; } + else { p.left= z; } + + this.splay(z); + this._size++; + return z; + }; + + + SplayTree.prototype.find = function find (key) { + var z = this._root; + var comp = this._compare; + while (z) { + var cmp = comp(z.key, key); + if (cmp < 0) { z = z.right; } + else if (cmp > 0) { z = z.left; } + else { return z; } + } + return null; + }; + + /** + * Whether the tree contains a node with the given key + * @param{Key} key + * @return {boolean} true/false + */ + SplayTree.prototype.contains = function contains (key) { + var node = this._root; + var comparator = this._compare; + while (node){ + var cmp = comparator(key, node.key); + if (cmp === 0) { return true; } + else if (cmp < 0) { node = node.left; } + else { node = node.right; } + } + + return false; + }; + + + SplayTree.prototype.remove = function remove (key) { + var z = this.find(key); + + if (!z) { return false; } + + this.splay(z); + + if (!z.left) { this.replace(z, z.right); } + else if (!z.right) { this.replace(z, z.left); } + else { + var y = this.minNode(z.right); + if (y.parent !== z) { + this.replace(y, y.right); + y.right = z.right; + y.right.parent = y; + } + this.replace(z, y); + y.left = z.left; + y.left.parent = y; + } + + this._size--; + return true; + }; + + + SplayTree.prototype.removeNode = function removeNode (z) { + if (!z) { return false; } + + this.splay(z); + + if (!z.left) { this.replace(z, z.right); } + else if (!z.right) { this.replace(z, z.left); } + else { + var y = this.minNode(z.right); + if (y.parent !== z) { + this.replace(y, y.right); + y.right = z.right; + y.right.parent = y; + } + this.replace(z, y); + y.left = z.left; + y.left.parent = y; + } + + this._size--; + return true; + }; + + + SplayTree.prototype.erase = function erase (key) { + var z = this.find(key); + if (!z) { return; } + + this.splay(z); + + var s = z.left; + var t = z.right; + + var sMax = null; + if (s) { + s.parent = null; + sMax = this.maxNode(s); + this.splay(sMax); + this._root = sMax; + } + if (t) { + if (s) { sMax.right = t; } + else { this._root = t; } + t.parent = sMax; + } + + this._size--; + }; + + /** + * Removes and returns the node with smallest key + * @return {?Node} + */ + SplayTree.prototype.pop = function pop () { + var node = this._root, returnValue = null; + if (node) { + while (node.left) { node = node.left; } + returnValue = { key: node.key, data: node.data }; + this.remove(node.key); + } + return returnValue; + }; + + + /* eslint-disable class-methods-use-this */ + + /** + * Successor node + * @param{Node} node + * @return {?Node} + */ + SplayTree.prototype.next = function next (node) { + var successor = node; + if (successor) { + if (successor.right) { + successor = successor.right; + while (successor && successor.left) { successor = successor.left; } + } else { + successor = node.parent; + while (successor && successor.right === node) { + node = successor; successor = successor.parent; + } + } + } + return successor; + }; + + + /** + * Predecessor node + * @param{Node} node + * @return {?Node} + */ + SplayTree.prototype.prev = function prev (node) { + var predecessor = node; + if (predecessor) { + if (predecessor.left) { + predecessor = predecessor.left; + while (predecessor && predecessor.right) { predecessor = predecessor.right; } + } else { + predecessor = node.parent; + while (predecessor && predecessor.left === node) { + node = predecessor; + predecessor = predecessor.parent; + } + } + } + return predecessor; + }; + /* eslint-enable class-methods-use-this */ + + + /** + * @param{forEachCallback} callback + * @return {SplayTree} + */ + SplayTree.prototype.forEach = function forEach (callback) { + var current = this._root; + var s = [], done = false, i = 0; + + while (!done) { + // Reach the left most Node of the current Node + if (current) { + // Place pointer to a tree node on the stack + // before traversing the node's left subtree + s.push(current); + current = current.left; + } else { + // BackTrack from the empty subtree and visit the Node + // at the top of the stack; however, if the stack is + // empty you are done + if (s.length > 0) { + current = s.pop(); + callback(current, i++); + + // We have visited the node and its left + // subtree. Now, it's right subtree's turn + current = current.right; + } else { done = true; } + } + } + return this; + }; + + + /** + * Walk key range from `low` to `high`. Stops if `fn` returns a value. + * @param{Key} low + * @param{Key} high + * @param{Function} fn + * @param{*?} ctx + * @return {SplayTree} + */ + SplayTree.prototype.range = function range (low, high, fn, ctx) { + var this$1 = this; + + var Q = []; + var compare = this._compare; + var node = this._root, cmp; + + while (Q.length !== 0 || node) { + if (node) { + Q.push(node); + node = node.left; + } else { + node = Q.pop(); + cmp = compare(node.key, high); + if (cmp > 0) { + break; + } else if (compare(node.key, low) >= 0) { + if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned + } + node = node.right; + } + } + return this; + }; + + /** + * Returns all keys in order + * @return {Array} + */ + SplayTree.prototype.keys = function keys () { + var current = this._root; + var s = [], r = [], done = false; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + r.push(current.key); + current = current.right; + } else { done = true; } + } + } + return r; + }; + + + /** + * Returns `data` fields of all nodes in order. + * @return {Array} + */ + SplayTree.prototype.values = function values () { + var current = this._root; + var s = [], r = [], done = false; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + r.push(current.data); + current = current.right; + } else { done = true; } + } + } + return r; + }; + + + /** + * Returns node at given index + * @param{number} index + * @return {?Node} + */ + SplayTree.prototype.at = function at (index) { + // removed after a consideration, more misleading than useful + // index = index % this.size; + // if (index < 0) index = this.size - index; + + var current = this._root; + var s = [], done = false, i = 0; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + if (i === index) { return current; } + i++; + current = current.right; + } else { done = true; } + } + } + return null; + }; + + /** + * Bulk-load items. Both array have to be same size + * @param{Array} keys + * @param{Array}[values] + * @param{Boolean} [presort=false] Pre-sort keys and values, using + * tree's comparator. Sorting is done + * in-place + * @return {AVLTree} + */ + SplayTree.prototype.load = function load (keys, values, presort) { + if ( keys === void 0 ) keys = []; + if ( values === void 0 ) values = []; + if ( presort === void 0 ) presort = false; + + if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); } + var size = keys.length; + if (presort) { sort(keys, values, 0, size - 1, this._compare); } + this._root = loadRecursive(null, keys, values, 0, size); + this._size = size; + return this; + }; + + + SplayTree.prototype.min = function min () { + var node = this.minNode(this._root); + if (node) { return node.key; } + else { return null; } + }; + + + SplayTree.prototype.max = function max () { + var node = this.maxNode(this._root); + if (node) { return node.key; } + else { return null; } + }; + + SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; }; + prototypeAccessors.size.get = function () { return this._size; }; + + + /** + * Create a tree and load it with items + * @param{Array} keys + * @param{Array?} [values] + + * @param{Function?} [comparator] + * @param{Boolean?} [presort=false] Pre-sort keys and values, using + * tree's comparator. Sorting is done + * in-place + * @param{Boolean?} [noDuplicates=false] Allow duplicates + * @return {SplayTree} + */ + SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) { + return new SplayTree(comparator, noDuplicates).load(keys, values, presort); + }; + + Object.defineProperties( SplayTree.prototype, prototypeAccessors ); + + + function loadRecursive (parent, keys, values, start, end) { + var size = end - start; + if (size > 0) { + var middle = start + Math.floor(size / 2); + var key = keys[middle]; + var data = values[middle]; + var node = { key: key, data: data, parent: parent }; + node.left = loadRecursive(node, keys, values, start, middle); + node.right = loadRecursive(node, keys, values, middle + 1, end); + return node; + } + return null; + } + + + function sort(keys, values, left, right, compare) { + if (left >= right) { return; } + + var pivot = keys[(left + right) >> 1]; + var i = left - 1; + var j = right + 1; + + while (true) { + do { i++; } while (compare(keys[i], pivot) < 0); + do { j--; } while (compare(keys[j], pivot) > 0); + if (i >= j) { break; } + + var tmp = keys[i]; + keys[i] = keys[j]; + keys[j] = tmp; + + tmp = values[i]; + values[i] = values[j]; + values[j] = tmp; + } + + sort(keys, values, left, j, compare); + sort(keys, values, j + 1, right, compare); + } + + var NORMAL = 0; + var NON_CONTRIBUTING = 1; + var SAME_TRANSITION = 2; + var DIFFERENT_TRANSITION = 3; + + var INTERSECTION = 0; + var UNION = 1; + var DIFFERENCE = 2; + var XOR = 3; + + /** + * @param {SweepEvent} event + * @param {SweepEvent} prev + * @param {Operation} operation + */ + function computeFields (event, prev, operation) { + // compute inOut and otherInOut fields + if (prev === null) { + event.inOut = false; + event.otherInOut = true; + + // previous line segment in sweepline belongs to the same polygon + } else { + if (event.isSubject === prev.isSubject) { + event.inOut = !prev.inOut; + event.otherInOut = prev.otherInOut; + + // previous line segment in sweepline belongs to the clipping polygon + } else { + event.inOut = !prev.otherInOut; + event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; + } + + // compute prevInResult field + if (prev) { + event.prevInResult = (!inResult(prev, operation) || prev.isVertical()) + ? prev.prevInResult : prev; + } + } + + // check if the line segment belongs to the Boolean operation + event.inResult = inResult(event, operation); + } + + + /* eslint-disable indent */ + function inResult(event, operation) { + switch (event.type) { + case NORMAL: + switch (operation) { + case INTERSECTION: + return !event.otherInOut; + case UNION: + return event.otherInOut; + case DIFFERENCE: + // return (event.isSubject && !event.otherInOut) || + // (!event.isSubject && event.otherInOut); + return (event.isSubject && event.otherInOut) || + (!event.isSubject && !event.otherInOut); + case XOR: + return true; + } + break; + case SAME_TRANSITION: + return operation === INTERSECTION || operation === UNION; + case DIFFERENT_TRANSITION: + return operation === DIFFERENCE; + case NON_CONTRIBUTING: + return false; + } + return false; + } + /* eslint-enable indent */ + + var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) { + + /** + * Is left endpoint? + * @type {Boolean} + */ + this.left = left; + + /** + * @type {Array.} + */ + this.point = point; + + /** + * Other edge reference + * @type {SweepEvent} + */ + this.otherEvent = otherEvent; + + /** + * Belongs to source or clipping polygon + * @type {Boolean} + */ + this.isSubject = isSubject; + + /** + * Edge contribution type + * @type {Number} + */ + this.type = edgeType || NORMAL; + + + /** + * In-out transition for the sweepline crossing polygon + * @type {Boolean} + */ + this.inOut = false; + + + /** + * @type {Boolean} + */ + this.otherInOut = false; + + /** + * Previous event in result? + * @type {SweepEvent} + */ + this.prevInResult = null; + + /** + * Does event belong to result? + * @type {Boolean} + */ + this.inResult = false; + + + // connection step + + /** + * @type {Boolean} + */ + this.resultInOut = false; + + this.isExteriorRing = true; + }; + + + /** + * @param{Array.}p + * @return {Boolean} + */ + SweepEvent.prototype.isBelow = function isBelow (p) { + var p0 = this.point, p1 = this.otherEvent.point; + return this.left + ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 + // signedArea(this.point, this.otherEvent.point, p) > 0 : + : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; + //signedArea(this.otherEvent.point, this.point, p) > 0; + }; + + + /** + * @param{Array.}p + * @return {Boolean} + */ + SweepEvent.prototype.isAbove = function isAbove (p) { + return !this.isBelow(p); + }; + + + /** + * @return {Boolean} + */ + SweepEvent.prototype.isVertical = function isVertical () { + return this.point[0] === this.otherEvent.point[0]; + }; + + + SweepEvent.prototype.clone = function clone () { + var copy = new SweepEvent( + this.point, this.left, this.otherEvent, this.isSubject, this.type); + + copy.inResult = this.inResult; + copy.prevInResult = this.prevInResult; + copy.isExteriorRing = this.isExteriorRing; + copy.inOut = this.inOut; + copy.otherInOut = this.otherInOut; + + return copy; + }; + + function equals(p1, p2) { + if (p1[0] === p2[0]) { + if (p1[1] === p2[1]) { + return true; + } else { + return false; + } + } + return false; + } + + // const EPSILON = 1e-9; + // const abs = Math.abs; + // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164 + // Precision problem. + // + // module.exports = function equals(p1, p2) { + // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON; + // }; + + /** + * Signed area of the triangle (p0, p1, p2) + * @param {Array.} p0 + * @param {Array.} p1 + * @param {Array.} p2 + * @return {Number} + */ + function signedArea(p0, p1, p2) { + return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]); + } + + /** + * @param {SweepEvent} e1 + * @param {SweepEvent} e2 + * @return {Number} + */ + function compareEvents(e1, e2) { + var p1 = e1.point; + var p2 = e2.point; + + // Different x-coordinate + if (p1[0] > p2[0]) { return 1; } + if (p1[0] < p2[0]) { return -1; } + + // Different points, but same x-coordinate + // Event with lower y-coordinate is processed first + if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; } + + return specialCases(e1, e2, p1, p2); + } + + + /* eslint-disable no-unused-vars */ + function specialCases(e1, e2, p1, p2) { + // Same coordinates, but one is a left endpoint and the other is + // a right endpoint. The right endpoint is processed first + if (e1.left !== e2.left) + { return e1.left ? 1 : -1; } + + // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; + // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) + // Same coordinates, both events + // are left endpoints or right endpoints. + // not collinear + if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { + // the event associate to the bottom segment is processed first + return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1; + } + + return (!e1.isSubject && e2.isSubject) ? 1 : -1; + } + /* eslint-enable no-unused-vars */ + + /** + * @param {SweepEvent} se + * @param {Array.} p + * @param {Queue} queue + * @return {Queue} + */ + function divideSegment(se, p, queue) { + var r = new SweepEvent(p, false, se, se.isSubject); + var l = new SweepEvent(p, true, se.otherEvent, se.isSubject); + + /* eslint-disable no-console */ + if (equals(se.point, se.otherEvent.point)) { + + console.warn('what is that, a collapsed segment?', se); + } + /* eslint-enable no-console */ + + r.contourId = l.contourId = se.contourId; + + // avoid a rounding error. The left event would be processed after the right event + if (compareEvents(l, se.otherEvent) > 0) { + se.otherEvent.left = true; + l.left = false; + } + + // avoid a rounding error. The left event would be processed after the right event + // if (compareEvents(se, r) > 0) {} + + se.otherEvent.otherEvent = l; + se.otherEvent = r; + + queue.push(l); + queue.push(r); + + return queue; + } + + //const EPS = 1e-9; + + /** + * Finds the magnitude of the cross product of two vectors (if we pretend + * they're in three dimensions) + * + * @param {Object} a First vector + * @param {Object} b Second vector + * @private + * @returns {Number} The magnitude of the cross product + */ + function crossProduct(a, b) { + return (a[0] * b[1]) - (a[1] * b[0]); + } + + /** + * Finds the dot product of two vectors. + * + * @param {Object} a First vector + * @param {Object} b Second vector + * @private + * @returns {Number} The dot product + */ + function dotProduct(a, b) { + return (a[0] * b[0]) + (a[1] * b[1]); + } + + /** + * Finds the intersection (if any) between two line segments a and b, given the + * line segments' end points a1, a2 and b1, b2. + * + * This algorithm is based on Schneider and Eberly. + * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf + * Page 244. + * + * @param {Array.} a1 point of first line + * @param {Array.} a2 point of first line + * @param {Array.} b1 point of second line + * @param {Array.} b2 point of second line + * @param {Boolean=} noEndpointTouch whether to skip single touchpoints + * (meaning connected segments) as + * intersections + * @returns {Array.>|Null} If the lines intersect, the point of + * intersection. If they overlap, the two end points of the overlapping segment. + * Otherwise, null. + */ + function intersection (a1, a2, b1, b2, noEndpointTouch) { + // The algorithm expects our lines in the form P + sd, where P is a point, + // s is on the interval [0, 1], and d is a vector. + // We are passed two points. P can be the first point of each pair. The + // vector, then, could be thought of as the distance (in x and y components) + // from the first point to the second point. + // So first, let's make our vectors: + var va = [a2[0] - a1[0], a2[1] - a1[1]]; + var vb = [b2[0] - b1[0], b2[1] - b1[1]]; + // We also define a function to convert back to regular point form: + + /* eslint-disable arrow-body-style */ + + function toPoint(p, s, d) { + return [ + p[0] + s * d[0], + p[1] + s * d[1] + ]; + } + + /* eslint-enable arrow-body-style */ + + // The rest is pretty much a straight port of the algorithm. + var e = [b1[0] - a1[0], b1[1] - a1[1]]; + var kross = crossProduct(va, vb); + var sqrKross = kross * kross; + var sqrLenA = dotProduct(va, va); + //const sqrLenB = dotProduct(vb, vb); + + // Check for line intersection. This works because of the properties of the + // cross product -- specifically, two vectors are parallel if and only if the + // cross product is the 0 vector. The full calculation involves relative error + // to account for possible very small line segments. See Schneider & Eberly + // for details. + if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) { + // If they're not parallel, then (because these are line segments) they + // still might not actually intersect. This code checks that the + // intersection point of the lines is actually on both line segments. + var s = crossProduct(e, vb) / kross; + if (s < 0 || s > 1) { + // not on line segment a + return null; + } + var t = crossProduct(e, va) / kross; + if (t < 0 || t > 1) { + // not on line segment b + return null; + } + if (s === 0 || s === 1) { + // on an endpoint of line segment a + return noEndpointTouch ? null : [toPoint(a1, s, va)]; + } + if (t === 0 || t === 1) { + // on an endpoint of line segment b + return noEndpointTouch ? null : [toPoint(b1, t, vb)]; + } + return [toPoint(a1, s, va)]; + } + + // If we've reached this point, then the lines are either parallel or the + // same, but the segments could overlap partially or fully, or not at all. + // So we need to find the overlap, if any. To do that, we can use e, which is + // the (vector) difference between the two initial points. If this is parallel + // with the line itself, then the two lines are the same line, and there will + // be overlap. + //const sqrLenE = dotProduct(e, e); + kross = crossProduct(e, va); + sqrKross = kross * kross; + + if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { + // Lines are just parallel, not the same. No overlap. + return null; + } + + var sa = dotProduct(va, e) / sqrLenA; + var sb = sa + dotProduct(va, vb) / sqrLenA; + var smin = Math.min(sa, sb); + var smax = Math.max(sa, sb); + + // this is, essentially, the FindIntersection acting on floats from + // Schneider & Eberly, just inlined into this function. + if (smin <= 1 && smax >= 0) { + + // overlap on an end point + if (smin === 1) { + return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)]; + } + + if (smax === 0) { + return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)]; + } + + if (noEndpointTouch && smin === 0 && smax === 1) { return null; } + + // There's overlap on a segment -- two points of intersection. Return both. + return [ + toPoint(a1, smin > 0 ? smin : 0, va), + toPoint(a1, smax < 1 ? smax : 1, va) + ]; + } + + return null; + } + + /** + * @param {SweepEvent} se1 + * @param {SweepEvent} se2 + * @param {Queue} queue + * @return {Number} + */ + function possibleIntersection (se1, se2, queue) { + // that disallows self-intersecting polygons, + // did cost us half a day, so I'll leave it + // out of respect + // if (se1.isSubject === se2.isSubject) return; + var inter = intersection( + se1.point, se1.otherEvent.point, + se2.point, se2.otherEvent.point + ); + + var nintersections = inter ? inter.length : 0; + if (nintersections === 0) { return 0; } // no intersection + + // the line segments intersect at an endpoint of both line segments + if ((nintersections === 1) && + (equals(se1.point, se2.point) || + equals(se1.otherEvent.point, se2.otherEvent.point))) { + return 0; + } + + if (nintersections === 2 && se1.isSubject === se2.isSubject) { + // if(se1.contourId === se2.contourId){ + // console.warn('Edges of the same polygon overlap', + // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point); + // } + //throw new Error('Edges of the same polygon overlap'); + return 0; + } + + // The line segments associated to se1 and se2 intersect + if (nintersections === 1) { + + // if the intersection point is not an endpoint of se1 + if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) { + divideSegment(se1, inter[0], queue); + } + + // if the intersection point is not an endpoint of se2 + if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) { + divideSegment(se2, inter[0], queue); + } + return 1; + } + + // The line segments associated to se1 and se2 overlap + var events = []; + var leftCoincide = false; + var rightCoincide = false; + + if (equals(se1.point, se2.point)) { + leftCoincide = true; // linked + } else if (compareEvents(se1, se2) === 1) { + events.push(se2, se1); + } else { + events.push(se1, se2); + } + + if (equals(se1.otherEvent.point, se2.otherEvent.point)) { + rightCoincide = true; + } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { + events.push(se2.otherEvent, se1.otherEvent); + } else { + events.push(se1.otherEvent, se2.otherEvent); + } + + if ((leftCoincide && rightCoincide) || leftCoincide) { + // both line segments are equal or share the left endpoint + se2.type = NON_CONTRIBUTING; + se1.type = (se2.inOut === se1.inOut) + ? SAME_TRANSITION : DIFFERENT_TRANSITION; + + if (leftCoincide && !rightCoincide) { + // honestly no idea, but changing events selection from [2, 1] + // to [0, 1] fixes the overlapping self-intersecting polygons issue + divideSegment(events[1].otherEvent, events[0].point, queue); + } + return 2; + } + + // the line segments share the right endpoint + if (rightCoincide) { + divideSegment(events[0], events[1].point, queue); + return 3; + } + + // no line segment includes totally the other one + if (events[0] !== events[3].otherEvent) { + divideSegment(events[0], events[1].point, queue); + divideSegment(events[1], events[2].point, queue); + return 3; + } + + // one line segment includes the other one + divideSegment(events[0], events[1].point, queue); + divideSegment(events[3].otherEvent, events[2].point, queue); + + return 3; + } + + /** + * @param {SweepEvent} le1 + * @param {SweepEvent} le2 + * @return {Number} + */ + function compareSegments(le1, le2) { + if (le1 === le2) { return 0; } + + // Segments are not collinear + if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || + signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { + + // If they share their left endpoint use the right endpoint to sort + if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; } + + // Different left endpoint: use the left endpoint to sort + if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; } + + // has the line segment associated to e1 been inserted + // into S after the line segment associated to e2 ? + if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; } + + // The line segment associated to e2 has been inserted + // into S after the line segment associated to e1 + return le1.isBelow(le2.point) ? -1 : 1; + } + + if (le1.isSubject === le2.isSubject) { // same polygon + var p1 = le1.point, p2 = le2.point; + if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) { + p1 = le1.otherEvent.point; p2 = le2.otherEvent.point; + if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; } + else { return le1.contourId > le2.contourId ? 1 : -1; } + } + } else { // Segments are collinear, but belong to separate polygons + return le1.isSubject ? -1 : 1; + } + + return compareEvents(le1, le2) === 1 ? 1 : -1; + } + + function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) { + var sweepLine = new SplayTree(compareSegments); + var sortedEvents = []; + + var rightbound = Math.min(sbbox[2], cbbox[2]); + + var prev, next, begin; + + while (eventQueue.length !== 0) { + var event = eventQueue.pop(); + sortedEvents.push(event); + + // optimization by bboxes for intersection and difference goes here + if ((operation === INTERSECTION && event.point[0] > rightbound) || + (operation === DIFFERENCE && event.point[0] > sbbox[2])) { + break; + } + + if (event.left) { + next = prev = sweepLine.insert(event); + begin = sweepLine.minNode(); + + if (prev !== begin) { prev = sweepLine.prev(prev); } + else { prev = null; } + + next = sweepLine.next(next); + + var prevEvent = prev ? prev.key : null; + var prevprevEvent = (void 0); + computeFields(event, prevEvent, operation); + if (next) { + if (possibleIntersection(event, next.key, eventQueue) === 2) { + computeFields(event, prevEvent, operation); + computeFields(event, next.key, operation); + } + } + + if (prev) { + if (possibleIntersection(prev.key, event, eventQueue) === 2) { + var prevprev = prev; + if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); } + else { prevprev = null; } + + prevprevEvent = prevprev ? prevprev.key : null; + computeFields(prevEvent, prevprevEvent, operation); + computeFields(event, prevEvent, operation); + } + } + } else { + event = event.otherEvent; + next = prev = sweepLine.find(event); + + if (prev && next) { + + if (prev !== begin) { prev = sweepLine.prev(prev); } + else { prev = null; } + + next = sweepLine.next(next); + sweepLine.remove(event); + + if (next && prev) { + possibleIntersection(prev.key, next.key, eventQueue); + } + } + } + } + return sortedEvents; + } + + /** + * @param {Array.} sortedEvents + * @return {Array.} + */ + function orderEvents(sortedEvents) { + var event, i, len, tmp; + var resultEvents = []; + for (i = 0, len = sortedEvents.length; i < len; i++) { + event = sortedEvents[i]; + if ((event.left && event.inResult) || + (!event.left && event.otherEvent.inResult)) { + resultEvents.push(event); + } + } + // Due to overlapping edges the resultEvents array can be not wholly sorted + var sorted = false; + while (!sorted) { + sorted = true; + for (i = 0, len = resultEvents.length; i < len; i++) { + if ((i + 1) < len && + compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { + tmp = resultEvents[i]; + resultEvents[i] = resultEvents[i + 1]; + resultEvents[i + 1] = tmp; + sorted = false; + } + } + } + + + for (i = 0, len = resultEvents.length; i < len; i++) { + event = resultEvents[i]; + event.pos = i; + } + + // imagine, the right event is found in the beginning of the queue, + // when his left counterpart is not marked yet + for (i = 0, len = resultEvents.length; i < len; i++) { + event = resultEvents[i]; + if (!event.left) { + tmp = event.pos; + event.pos = event.otherEvent.pos; + event.otherEvent.pos = tmp; + } + } + + return resultEvents; + } + + + /** + * @param {Number} pos + * @param {Array.} resultEvents + * @param {Object>} processed + * @return {Number} + */ + function nextPos(pos, resultEvents, processed, origIndex) { + var newPos = pos + 1; + var length = resultEvents.length; + if (newPos > length - 1) { return pos - 1; } + var p = resultEvents[pos].point; + var p1 = resultEvents[newPos].point; + + + // while in range and not the current one by value + while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { + if (!processed[newPos]) { + return newPos; + } else { + newPos++; + } + p1 = resultEvents[newPos].point; + } + + newPos = pos - 1; + + while (processed[newPos] && newPos >= origIndex) { + newPos--; + } + return newPos; + } + + + /** + * @param {Array.} sortedEvents + * @return {Array.<*>} polygons + */ + function connectEdges(sortedEvents, operation) { + var i, len; + var resultEvents = orderEvents(sortedEvents); + + // "false"-filled array + var processed = {}; + var result = []; + var event; + + for (i = 0, len = resultEvents.length; i < len; i++) { + if (processed[i]) { continue; } + var contour = [[]]; + + if (!resultEvents[i].isExteriorRing) { + if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) { + result.push(contour); + } else if (result.length === 0) { + result.push([[contour]]); + } else { + result[result.length - 1].push(contour[0]); + } + } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) { + result[result.length - 1].push(contour[0]); + } else { + result.push(contour); + } + + var ringId = result.length - 1; + var pos = i; + + var initial = resultEvents[i].point; + contour[0].push(initial); + + while (pos >= i) { + event = resultEvents[pos]; + processed[pos] = true; + + if (event.left) { + event.resultInOut = false; + event.contourId = ringId; + } else { + event.otherEvent.resultInOut = true; + event.otherEvent.contourId = ringId; + } + + pos = event.pos; + processed[pos] = true; + contour[0].push(resultEvents[pos].point); + pos = nextPos(pos, resultEvents, processed, i); + } + + pos = pos === -1 ? i : pos; + + event = resultEvents[pos]; + processed[pos] = processed[event.pos] = true; + event.otherEvent.resultInOut = true; + event.otherEvent.contourId = ringId; + } + + // Handle if the result is a polygon (eg not multipoly) + // Commented it again, let's see what do we mean by that + // if (result.length === 1) result = result[0]; + return result; + } + + var tinyqueue = TinyQueue; + var default_1 = TinyQueue; + + function TinyQueue(data, compare) { + var this$1 = this; + + if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); } + + this.data = data || []; + this.length = this.data.length; + this.compare = compare || defaultCompare; + + if (this.length > 0) { + for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); } + } + } + + function defaultCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; + } + + TinyQueue.prototype = { + + push: function (item) { + this.data.push(item); + this.length++; + this._up(this.length - 1); + }, + + pop: function () { + if (this.length === 0) { return undefined; } + + var top = this.data[0]; + this.length--; + + if (this.length > 0) { + this.data[0] = this.data[this.length]; + this._down(0); + } + this.data.pop(); + + return top; + }, + + peek: function () { + return this.data[0]; + }, + + _up: function (pos) { + var data = this.data; + var compare = this.compare; + var item = data[pos]; + + while (pos > 0) { + var parent = (pos - 1) >> 1; + var current = data[parent]; + if (compare(item, current) >= 0) { break; } + data[pos] = current; + pos = parent; + } + + data[pos] = item; + }, + + _down: function (pos) { + var this$1 = this; + + var data = this.data; + var compare = this.compare; + var halfLength = this.length >> 1; + var item = data[pos]; + + while (pos < halfLength) { + var left = (pos << 1) + 1; + var right = left + 1; + var best = data[left]; + + if (right < this$1.length && compare(data[right], best) < 0) { + left = right; + best = data[right]; + } + if (compare(best, item) >= 0) { break; } + + data[pos] = best; + pos = left; + } + + data[pos] = item; + } + }; + tinyqueue.default = default_1; + + var max = Math.max; + var min = Math.min; + + var contourId = 0; + + + function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { + var i, len, s1, s2, e1, e2; + for (i = 0, len = contourOrHole.length - 1; i < len; i++) { + s1 = contourOrHole[i]; + s2 = contourOrHole[i + 1]; + e1 = new SweepEvent(s1, false, undefined, isSubject); + e2 = new SweepEvent(s2, false, e1, isSubject); + e1.otherEvent = e2; + + if (s1[0] === s2[0] && s1[1] === s2[1]) { + continue; // skip collapsed edges, or it breaks + } + + e1.contourId = e2.contourId = depth; + if (!isExteriorRing) { + e1.isExteriorRing = false; + e2.isExteriorRing = false; + } + if (compareEvents(e1, e2) > 0) { + e2.left = true; + } else { + e1.left = true; + } + + var x = s1[0], y = s1[1]; + bbox[0] = min(bbox[0], x); + bbox[1] = min(bbox[1], y); + bbox[2] = max(bbox[2], x); + bbox[3] = max(bbox[3], y); + + // Pushing it so the queue is sorted from left to right, + // with object on the left having the highest priority. + Q.push(e1); + Q.push(e2); + } + } + + + function fillQueue(subject, clipping, sbbox, cbbox, operation) { + var eventQueue = new tinyqueue(null, compareEvents); + var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk; + + for (i = 0, ii = subject.length; i < ii; i++) { + polygonSet = subject[i]; + for (j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (isExteriorRing) { contourId++; } + processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); + } + } + + for (i = 0, ii = clipping.length; i < ii; i++) { + polygonSet = clipping[i]; + for (j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (operation === DIFFERENCE) { isExteriorRing = false; } + if (isExteriorRing) { contourId++; } + processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); + } + } + + return eventQueue; + } + + var EMPTY = []; + + + function trivialOperation(subject, clipping, operation) { + var result = null; + if (subject.length * clipping.length === 0) { + if (operation === INTERSECTION) { + result = EMPTY; + } else if (operation === DIFFERENCE) { + result = subject; + } else if (operation === UNION || + operation === XOR) { + result = (subject.length === 0) ? clipping : subject; + } + } + return result; + } + + + function compareBBoxes(subject, clipping, sbbox, cbbox, operation) { + var result = null; + if (sbbox[0] > cbbox[2] || + cbbox[0] > sbbox[2] || + sbbox[1] > cbbox[3] || + cbbox[1] > sbbox[3]) { + if (operation === INTERSECTION) { + result = EMPTY; + } else if (operation === DIFFERENCE) { + result = subject; + } else if (operation === UNION || + operation === XOR) { + result = subject.concat(clipping); + } + } + return result; + } + + + function boolean(subject, clipping, operation) { + if (typeof subject[0][0][0] === 'number') { + subject = [subject]; + } + if (typeof clipping[0][0][0] === 'number') { + clipping = [clipping]; + } + var trivial = trivialOperation(subject, clipping, operation); + if (trivial) { + return trivial === EMPTY ? null : trivial; + } + var sbbox = [Infinity, Infinity, -Infinity, -Infinity]; + var cbbox = [Infinity, Infinity, -Infinity, -Infinity]; + + //console.time('fill queue'); + var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation); + //console.timeEnd('fill queue'); + + trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation); + if (trivial) { + return trivial === EMPTY ? null : trivial; + } + //console.time('subdivide edges'); + var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation); + //console.timeEnd('subdivide edges'); + + //console.time('connect vertices'); + var result = connectEdges(sortedEvents, operation); + //console.timeEnd('connect vertices'); + return result; + } + + function union (subject, clipping) { + return boolean(subject, clipping, UNION); + } + + function diff (subject, clipping) { + return boolean(subject, clipping, DIFFERENCE); + } + + function xor (subject, clipping){ + return boolean(subject, clipping, XOR); + } + + function intersection$1 (subject, clipping) { + return boolean(subject, clipping, INTERSECTION); + } + + /** + * @enum {Number} + */ + var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR }; + + exports.union = union; + exports.diff = diff; + exports.xor = xor; + exports.intersection = intersection$1; + exports.operations = operations; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + + +},{}],266:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var HashBase = require('hash-base') +var Buffer = require('safe-buffer').Buffer + +var ARRAY16 = new Array(16) + +function MD5 () { + HashBase.call(this, 64) + + // state + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 +} + +inherits(MD5, HashBase) + +MD5.prototype._update = function () { + var M = ARRAY16 + for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) + + var a = this._a + var b = this._b + var c = this._c + var d = this._d + + a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) + d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) + c = fnF(c, d, a, b, M[2], 0x242070db, 17) + b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) + a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) + d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) + c = fnF(c, d, a, b, M[6], 0xa8304613, 17) + b = fnF(b, c, d, a, M[7], 0xfd469501, 22) + a = fnF(a, b, c, d, M[8], 0x698098d8, 7) + d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) + c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) + b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) + a = fnF(a, b, c, d, M[12], 0x6b901122, 7) + d = fnF(d, a, b, c, M[13], 0xfd987193, 12) + c = fnF(c, d, a, b, M[14], 0xa679438e, 17) + b = fnF(b, c, d, a, M[15], 0x49b40821, 22) + + a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) + d = fnG(d, a, b, c, M[6], 0xc040b340, 9) + c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) + b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) + a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) + d = fnG(d, a, b, c, M[10], 0x02441453, 9) + c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) + b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) + a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) + d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) + c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) + b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) + a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) + d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) + c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) + b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) + + a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) + d = fnH(d, a, b, c, M[8], 0x8771f681, 11) + c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) + b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) + a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) + d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) + c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) + b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) + a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) + d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) + c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) + b = fnH(b, c, d, a, M[6], 0x04881d05, 23) + a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) + d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) + c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) + b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) + + a = fnI(a, b, c, d, M[0], 0xf4292244, 6) + d = fnI(d, a, b, c, M[7], 0x432aff97, 10) + c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) + b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) + a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) + d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) + c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) + b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) + a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) + d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) + c = fnI(c, d, a, b, M[6], 0xa3014314, 15) + b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) + a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) + d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) + c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) + b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) + + this._a = (this._a + a) | 0 + this._b = (this._b + b) | 0 + this._c = (this._c + c) | 0 + this._d = (this._d + d) | 0 +} + +MD5.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80 + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64) + this._update() + this._blockOffset = 0 + } + + this._block.fill(0, this._blockOffset, 56) + this._block.writeUInt32LE(this._length[0], 56) + this._block.writeUInt32LE(this._length[1], 60) + this._update() + + // produce result + var buffer = Buffer.allocUnsafe(16) + buffer.writeInt32LE(this._a, 0) + buffer.writeInt32LE(this._b, 4) + buffer.writeInt32LE(this._c, 8) + buffer.writeInt32LE(this._d, 12) + return buffer +} + +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} + +function fnF (a, b, c, d, m, k, s) { + return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 +} + +function fnG (a, b, c, d, m, k, s) { + return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 +} + +function fnH (a, b, c, d, m, k, s) { + return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 +} + +function fnI (a, b, c, d, m, k, s) { + return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 +} + +module.exports = MD5 + +},{"hash-base":227,"inherits":262,"safe-buffer":318}],267:[function(require,module,exports){ +var bn = require('bn.js'); +var brorand = require('brorand'); + +function MillerRabin(rand) { + this.rand = rand || new brorand.Rand(); +} +module.exports = MillerRabin; + +MillerRabin.create = function create(rand) { + return new MillerRabin(rand); +}; + +MillerRabin.prototype._randbelow = function _randbelow(n) { + var len = n.bitLength(); + var min_bytes = Math.ceil(len / 8); + + // Generage random bytes until a number less than n is found. + // This ensures that 0..n-1 have an equal probability of being selected. + do + var a = new bn(this.rand.generate(min_bytes)); + while (a.cmp(n) >= 0); + + return a; +}; + +MillerRabin.prototype._randrange = function _randrange(start, stop) { + // Generate a random number greater than or equal to start and less than stop. + var size = stop.sub(start); + return start.add(this._randbelow(size)); +}; + +MillerRabin.prototype.test = function test(n, k, cb) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + + if (!k) + k = Math.max(1, (len / 48) | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + + var rn1 = n1.toRed(red); + + var prime = true; + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + if (cb) + cb(a); + + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + + if (x.cmp(rone) === 0) + return false; + if (x.cmp(rn1) === 0) + break; + } + + if (i === s) + return false; + } + + return prime; +}; + +MillerRabin.prototype.getDivisor = function getDivisor(n, k) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + + if (!k) + k = Math.max(1, (len / 48) | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + + var rn1 = n1.toRed(red); + + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + + var g = n.gcd(a); + if (g.cmpn(1) !== 0) + return g; + + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + + if (x.cmp(rone) === 0) + return x.fromRed().subn(1).gcd(n); + if (x.cmp(rn1) === 0) + break; + } + + if (i === s) { + x = x.redSqr(); + return x.fromRed().subn(1).gcd(n); + } + } + + return false; +}; + +},{"bn.js":147,"brorand":148}],268:[function(require,module,exports){ +module.exports = assert; + +function assert(val, msg) { + if (!val) + throw new Error(msg || 'Assertion failed'); +} + +assert.equal = function assertEqual(l, r, msg) { + if (l != r) + throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); +}; + +},{}],269:[function(require,module,exports){ +'use strict'; + +var utils = exports; + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + return res; + } + if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (var i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } else { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) + res.push(hi, lo); + else + res.push(lo); + } + } + return res; +} +utils.toArray = toArray; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +utils.zero2 = zero2; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +utils.toHex = toHex; + +utils.encode = function encode(arr, enc) { + if (enc === 'hex') + return toHex(arr); + else + return arr; +}; + +},{}],270:[function(require,module,exports){ +exports.endianness = function () { return 'LE' }; + +exports.hostname = function () { + if (typeof location !== 'undefined') { + return location.hostname + } + else return ''; +}; + +exports.loadavg = function () { return [] }; + +exports.uptime = function () { return 0 }; + +exports.freemem = function () { + return Number.MAX_VALUE; +}; + +exports.totalmem = function () { + return Number.MAX_VALUE; +}; + +exports.cpus = function () { return [] }; + +exports.type = function () { return 'Browser' }; + +exports.release = function () { + if (typeof navigator !== 'undefined') { + return navigator.appVersion; + } + return ''; +}; + +exports.networkInterfaces += exports.getNetworkInterfaces += function () { return {} }; + +exports.arch = function () { return 'javascript' }; + +exports.platform = function () { return 'browser' }; + +exports.tmpdir = exports.tmpDir = function () { + return '/tmp'; +}; + +exports.EOL = '\n'; + +exports.homedir = function () { + return '/' +}; + +},{}],271:[function(require,module,exports){ +module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", +"2.16.840.1.101.3.4.1.2": "aes-128-cbc", +"2.16.840.1.101.3.4.1.3": "aes-128-ofb", +"2.16.840.1.101.3.4.1.4": "aes-128-cfb", +"2.16.840.1.101.3.4.1.21": "aes-192-ecb", +"2.16.840.1.101.3.4.1.22": "aes-192-cbc", +"2.16.840.1.101.3.4.1.23": "aes-192-ofb", +"2.16.840.1.101.3.4.1.24": "aes-192-cfb", +"2.16.840.1.101.3.4.1.41": "aes-256-ecb", +"2.16.840.1.101.3.4.1.42": "aes-256-cbc", +"2.16.840.1.101.3.4.1.43": "aes-256-ofb", +"2.16.840.1.101.3.4.1.44": "aes-256-cfb" +} +},{}],272:[function(require,module,exports){ +// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js +// Fedor, you are amazing. +'use strict' + +var asn1 = require('asn1.js') + +exports.certificate = require('./certificate') + +var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { + this.seq().obj( + this.key('version').int(), + this.key('modulus').int(), + this.key('publicExponent').int(), + this.key('privateExponent').int(), + this.key('prime1').int(), + this.key('prime2').int(), + this.key('exponent1').int(), + this.key('exponent2').int(), + this.key('coefficient').int() + ) +}) +exports.RSAPrivateKey = RSAPrivateKey + +var RSAPublicKey = asn1.define('RSAPublicKey', function () { + this.seq().obj( + this.key('modulus').int(), + this.key('publicExponent').int() + ) +}) +exports.RSAPublicKey = RSAPublicKey + +var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { + this.seq().obj( + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPublicKey').bitstr() + ) +}) +exports.PublicKey = PublicKey + +var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { + this.seq().obj( + this.key('algorithm').objid(), + this.key('none').null_().optional(), + this.key('curve').objid().optional(), + this.key('params').seq().obj( + this.key('p').int(), + this.key('q').int(), + this.key('g').int() + ).optional() + ) +}) + +var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { + this.seq().obj( + this.key('version').int(), + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPrivateKey').octstr() + ) +}) +exports.PrivateKey = PrivateKeyInfo +var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { + this.seq().obj( + this.key('algorithm').seq().obj( + this.key('id').objid(), + this.key('decrypt').seq().obj( + this.key('kde').seq().obj( + this.key('id').objid(), + this.key('kdeparams').seq().obj( + this.key('salt').octstr(), + this.key('iters').int() + ) + ), + this.key('cipher').seq().obj( + this.key('algo').objid(), + this.key('iv').octstr() + ) + ) + ), + this.key('subjectPrivateKey').octstr() + ) +}) + +exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo + +var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { + this.seq().obj( + this.key('version').int(), + this.key('p').int(), + this.key('q').int(), + this.key('g').int(), + this.key('pub_key').int(), + this.key('priv_key').int() + ) +}) +exports.DSAPrivateKey = DSAPrivateKey + +exports.DSAparam = asn1.define('DSAparam', function () { + this.int() +}) + +var ECPrivateKey = asn1.define('ECPrivateKey', function () { + this.seq().obj( + this.key('version').int(), + this.key('privateKey').octstr(), + this.key('parameters').optional().explicit(0).use(ECParameters), + this.key('publicKey').optional().explicit(1).bitstr() + ) +}) +exports.ECPrivateKey = ECPrivateKey + +var ECParameters = asn1.define('ECParameters', function () { + this.choice({ + namedCurve: this.objid() + }) +}) + +exports.signature = asn1.define('signature', function () { + this.seq().obj( + this.key('r').int(), + this.key('s').int() + ) +}) + +},{"./certificate":273,"asn1.js":132}],273:[function(require,module,exports){ +// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js +// thanks to @Rantanen + +'use strict' + +var asn = require('asn1.js') + +var Time = asn.define('Time', function () { + this.choice({ + utcTime: this.utctime(), + generalTime: this.gentime() + }) +}) + +var AttributeTypeValue = asn.define('AttributeTypeValue', function () { + this.seq().obj( + this.key('type').objid(), + this.key('value').any() + ) +}) + +var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { + this.seq().obj( + this.key('algorithm').objid(), + this.key('parameters').optional(), + this.key('curve').objid().optional() + ) +}) + +var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { + this.seq().obj( + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPublicKey').bitstr() + ) +}) + +var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { + this.setof(AttributeTypeValue) +}) + +var RDNSequence = asn.define('RDNSequence', function () { + this.seqof(RelativeDistinguishedName) +}) + +var Name = asn.define('Name', function () { + this.choice({ + rdnSequence: this.use(RDNSequence) + }) +}) + +var Validity = asn.define('Validity', function () { + this.seq().obj( + this.key('notBefore').use(Time), + this.key('notAfter').use(Time) + ) +}) + +var Extension = asn.define('Extension', function () { + this.seq().obj( + this.key('extnID').objid(), + this.key('critical').bool().def(false), + this.key('extnValue').octstr() + ) +}) + +var TBSCertificate = asn.define('TBSCertificate', function () { + this.seq().obj( + this.key('version').explicit(0).int().optional(), + this.key('serialNumber').int(), + this.key('signature').use(AlgorithmIdentifier), + this.key('issuer').use(Name), + this.key('validity').use(Validity), + this.key('subject').use(Name), + this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), + this.key('issuerUniqueID').implicit(1).bitstr().optional(), + this.key('subjectUniqueID').implicit(2).bitstr().optional(), + this.key('extensions').explicit(3).seqof(Extension).optional() + ) +}) + +var X509Certificate = asn.define('X509Certificate', function () { + this.seq().obj( + this.key('tbsCertificate').use(TBSCertificate), + this.key('signatureAlgorithm').use(AlgorithmIdentifier), + this.key('signatureValue').bitstr() + ) +}) + +module.exports = X509Certificate + +},{"asn1.js":132}],274:[function(require,module,exports){ +// adapted from https://github.com/apatil/pemstrip +var 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 +var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m +var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m +var evp = require('evp_bytestokey') +var ciphers = require('browserify-aes') +var Buffer = require('safe-buffer').Buffer +module.exports = function (okey, password) { + var key = okey.toString() + var match = key.match(findProc) + var decrypted + if (!match) { + var match2 = key.match(fullRegex) + decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64') + } else { + var suite = 'aes' + match[1] + var iv = Buffer.from(match[2], 'hex') + var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64') + var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key + var out = [] + var cipher = ciphers.createDecipheriv(suite, cipherKey, iv) + out.push(cipher.update(cipherText)) + out.push(cipher.final()) + decrypted = Buffer.concat(out) + } + var tag = key.match(startRegex)[1] + return { + tag: tag, + data: decrypted + } +} + +},{"browserify-aes":152,"evp_bytestokey":222,"safe-buffer":318}],275:[function(require,module,exports){ +var asn1 = require('./asn1') +var aesid = require('./aesid.json') +var fixProc = require('./fixProc') +var ciphers = require('browserify-aes') +var compat = require('pbkdf2') +var Buffer = require('safe-buffer').Buffer +module.exports = parseKeys + +function parseKeys (buffer) { + var password + if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { + password = buffer.passphrase + buffer = buffer.key + } + if (typeof buffer === 'string') { + buffer = Buffer.from(buffer) + } + + var stripped = fixProc(buffer, password) + + var type = stripped.tag + var data = stripped.data + var subtype, ndata + switch (type) { + case 'CERTIFICATE': + ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo + // falls through + case 'PUBLIC KEY': + if (!ndata) { + ndata = asn1.PublicKey.decode(data, 'der') + } + subtype = ndata.algorithm.algorithm.join('.') + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der') + case '1.2.840.10045.2.1': + ndata.subjectPrivateKey = ndata.subjectPublicKey + return { + type: 'ec', + data: ndata + } + case '1.2.840.10040.4.1': + ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der') + return { + type: 'dsa', + data: ndata.algorithm.params + } + default: throw new Error('unknown key id ' + subtype) + } + throw new Error('unknown key type ' + type) + case 'ENCRYPTED PRIVATE KEY': + data = asn1.EncryptedPrivateKey.decode(data, 'der') + data = decrypt(data, password) + // falls through + case 'PRIVATE KEY': + ndata = asn1.PrivateKey.decode(data, 'der') + subtype = ndata.algorithm.algorithm.join('.') + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der') + case '1.2.840.10045.2.1': + return { + curve: ndata.algorithm.curve, + privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey + } + case '1.2.840.10040.4.1': + ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der') + return { + type: 'dsa', + params: ndata.algorithm.params + } + default: throw new Error('unknown key id ' + subtype) + } + throw new Error('unknown key type ' + type) + case 'RSA PUBLIC KEY': + return asn1.RSAPublicKey.decode(data, 'der') + case 'RSA PRIVATE KEY': + return asn1.RSAPrivateKey.decode(data, 'der') + case 'DSA PRIVATE KEY': + return { + type: 'dsa', + params: asn1.DSAPrivateKey.decode(data, 'der') + } + case 'EC PRIVATE KEY': + data = asn1.ECPrivateKey.decode(data, 'der') + return { + curve: data.parameters.value, + privateKey: data.privateKey + } + default: throw new Error('unknown key type ' + type) + } +} +parseKeys.signature = asn1.signature +function decrypt (data, password) { + var salt = data.algorithm.decrypt.kde.kdeparams.salt + var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10) + var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')] + var iv = data.algorithm.decrypt.cipher.iv + var cipherText = data.subjectPrivateKey + var keylen = parseInt(algo.split('-')[1], 10) / 8 + var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1') + var cipher = ciphers.createDecipheriv(algo, key, iv) + var out = [] + out.push(cipher.update(cipherText)) + out.push(cipher.final()) + return Buffer.concat(out) +} + +},{"./aesid.json":271,"./asn1":272,"./fixProc":274,"browserify-aes":152,"pbkdf2":278,"safe-buffer":318}],276:[function(require,module,exports){ +(function (process){ +// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, +// backported and transplited with Babel, with backwards-compat fixes + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.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('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function (path) { + if (typeof path !== 'string') path = path + ''; + if (path.length === 0) return '.'; + var code = path.charCodeAt(0); + var hasRoot = code === 47 /*/*/; + var end = -1; + var matchedSlash = true; + for (var i = path.length - 1; i >= 1; --i) { + code = path.charCodeAt(i); + if (code === 47 /*/*/) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) return hasRoot ? '/' : '.'; + if (hasRoot && end === 1) { + // return '//'; + // Backwards-compat fix: + return '/'; + } + return path.slice(0, end); +}; + +function basename(path) { + if (typeof path !== 'string') path = path + ''; + + var start = 0; + var end = -1; + var matchedSlash = true; + var i; + + for (i = path.length - 1; i >= 0; --i) { + if (path.charCodeAt(i) === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + start = i + 1; + break; + } + } else if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // path component + matchedSlash = false; + end = i + 1; + } + } + + if (end === -1) return ''; + return path.slice(start, end); +} + +// Uses a mixed approach for backwards-compatibility, as ext behavior changed +// in new Node.js versions, so only basename() above is backported here +exports.basename = function (path, ext) { + var f = basename(path); + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + +exports.extname = function (path) { + if (typeof path !== 'string') path = path + ''; + var startDot = -1; + var startPart = 0; + var end = -1; + var matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + var preDotState = 0; + for (var i = path.length - 1; i >= 0; --i) { + var code = path.charCodeAt(i); + if (code === 47 /*/*/) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === 46 /*.*/) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) + startDot = i; + else if (preDotState !== 1) + preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if (startDot === -1 || end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ''; + } + return path.slice(startDot, end); +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":284}],277:[function(require,module,exports){ +'use strict'; + +module.exports = Pbf; + +var ieee754 = require('ieee754'); + +function Pbf(buf) { + this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0); + this.pos = 0; + this.type = 0; + this.length = this.buf.length; +} + +Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum +Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64 +Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields +Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32 + +var SHIFT_LEFT_32 = (1 << 16) * (1 << 16), + SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32; + +Pbf.prototype = { + + destroy: function() { + this.buf = null; + }, + + // === READING ================================================================= + + readFields: function(readField, result, end) { + end = end || this.length; + + while (this.pos < end) { + var val = this.readVarint(), + tag = val >> 3, + startPos = this.pos; + + this.type = val & 0x7; + readField(tag, result, this); + + if (this.pos === startPos) this.skip(val); + } + return result; + }, + + readMessage: function(readField, result) { + return this.readFields(readField, result, this.readVarint() + this.pos); + }, + + readFixed32: function() { + var val = readUInt32(this.buf, this.pos); + this.pos += 4; + return val; + }, + + readSFixed32: function() { + var val = readInt32(this.buf, this.pos); + this.pos += 4; + return val; + }, + + // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed) + + readFixed64: function() { + var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; + this.pos += 8; + return val; + }, + + readSFixed64: function() { + var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; + this.pos += 8; + return val; + }, + + readFloat: function() { + var val = ieee754.read(this.buf, this.pos, true, 23, 4); + this.pos += 4; + return val; + }, + + readDouble: function() { + var val = ieee754.read(this.buf, this.pos, true, 52, 8); + this.pos += 8; + return val; + }, + + readVarint: function(isSigned) { + var buf = this.buf, + val, b; + + b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val; + b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val; + b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val; + b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val; + b = buf[this.pos]; val |= (b & 0x0f) << 28; + + return readVarintRemainder(val, isSigned, this); + }, + + readVarint64: function() { // for compatibility with v2.0.1 + return this.readVarint(true); + }, + + readSVarint: function() { + var num = this.readVarint(); + return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding + }, + + readBoolean: function() { + return Boolean(this.readVarint()); + }, + + readString: function() { + var end = this.readVarint() + this.pos, + str = readUtf8(this.buf, this.pos, end); + this.pos = end; + return str; + }, + + readBytes: function() { + var end = this.readVarint() + this.pos, + buffer = this.buf.subarray(this.pos, end); + this.pos = end; + return buffer; + }, + + // verbose for performance reasons; doesn't affect gzipped size + + readPackedVarint: function(arr, isSigned) { + if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned)); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readVarint(isSigned)); + return arr; + }, + readPackedSVarint: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readSVarint()); + return arr; + }, + readPackedBoolean: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readBoolean()); + return arr; + }, + readPackedFloat: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readFloat()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readFloat()); + return arr; + }, + readPackedDouble: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readDouble()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readDouble()); + return arr; + }, + readPackedFixed32: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readFixed32()); + return arr; + }, + readPackedSFixed32: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readSFixed32()); + return arr; + }, + readPackedFixed64: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readFixed64()); + return arr; + }, + readPackedSFixed64: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readSFixed64()); + return arr; + }, + + skip: function(val) { + var type = val & 0x7; + if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {} + else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos; + else if (type === Pbf.Fixed32) this.pos += 4; + else if (type === Pbf.Fixed64) this.pos += 8; + else throw new Error('Unimplemented type: ' + type); + }, + + // === WRITING ================================================================= + + writeTag: function(tag, type) { + this.writeVarint((tag << 3) | type); + }, + + realloc: function(min) { + var length = this.length || 16; + + while (length < this.pos + min) length *= 2; + + if (length !== this.length) { + var buf = new Uint8Array(length); + buf.set(this.buf); + this.buf = buf; + this.length = length; + } + }, + + finish: function() { + this.length = this.pos; + this.pos = 0; + return this.buf.subarray(0, this.length); + }, + + writeFixed32: function(val) { + this.realloc(4); + writeInt32(this.buf, val, this.pos); + this.pos += 4; + }, + + writeSFixed32: function(val) { + this.realloc(4); + writeInt32(this.buf, val, this.pos); + this.pos += 4; + }, + + writeFixed64: function(val) { + this.realloc(8); + writeInt32(this.buf, val & -1, this.pos); + writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); + this.pos += 8; + }, + + writeSFixed64: function(val) { + this.realloc(8); + writeInt32(this.buf, val & -1, this.pos); + writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); + this.pos += 8; + }, + + writeVarint: function(val) { + val = +val || 0; + + if (val > 0xfffffff || val < 0) { + writeBigVarint(val, this); + return; + } + + this.realloc(4); + + this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; + this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; + this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; + this.buf[this.pos++] = (val >>> 7) & 0x7f; + }, + + writeSVarint: function(val) { + this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2); + }, + + writeBoolean: function(val) { + this.writeVarint(Boolean(val)); + }, + + writeString: function(str) { + str = String(str); + this.realloc(str.length * 4); + + this.pos++; // reserve 1 byte for short string length + + var startPos = this.pos; + // write the string directly to the buffer and see how much was written + this.pos = writeUtf8(this.buf, str, this.pos); + var len = this.pos - startPos; + + if (len >= 0x80) makeRoomForExtraLength(startPos, len, this); + + // finally, write the message length in the reserved place and restore the position + this.pos = startPos - 1; + this.writeVarint(len); + this.pos += len; + }, + + writeFloat: function(val) { + this.realloc(4); + ieee754.write(this.buf, val, this.pos, true, 23, 4); + this.pos += 4; + }, + + writeDouble: function(val) { + this.realloc(8); + ieee754.write(this.buf, val, this.pos, true, 52, 8); + this.pos += 8; + }, + + writeBytes: function(buffer) { + var len = buffer.length; + this.writeVarint(len); + this.realloc(len); + for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i]; + }, + + writeRawMessage: function(fn, obj) { + this.pos++; // reserve 1 byte for short message length + + // write the message directly to the buffer and see how much was written + var startPos = this.pos; + fn(obj, this); + var len = this.pos - startPos; + + if (len >= 0x80) makeRoomForExtraLength(startPos, len, this); + + // finally, write the message length in the reserved place and restore the position + this.pos = startPos - 1; + this.writeVarint(len); + this.pos += len; + }, + + writeMessage: function(tag, fn, obj) { + this.writeTag(tag, Pbf.Bytes); + this.writeRawMessage(fn, obj); + }, + + writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); }, + writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); }, + writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); }, + writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); }, + writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); }, + writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); }, + writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); }, + writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); }, + writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); }, + + writeBytesField: function(tag, buffer) { + this.writeTag(tag, Pbf.Bytes); + this.writeBytes(buffer); + }, + writeFixed32Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed32); + this.writeFixed32(val); + }, + writeSFixed32Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed32); + this.writeSFixed32(val); + }, + writeFixed64Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed64); + this.writeFixed64(val); + }, + writeSFixed64Field: function(tag, val) { + this.writeTag(tag, Pbf.Fixed64); + this.writeSFixed64(val); + }, + writeVarintField: function(tag, val) { + this.writeTag(tag, Pbf.Varint); + this.writeVarint(val); + }, + writeSVarintField: function(tag, val) { + this.writeTag(tag, Pbf.Varint); + this.writeSVarint(val); + }, + writeStringField: function(tag, str) { + this.writeTag(tag, Pbf.Bytes); + this.writeString(str); + }, + writeFloatField: function(tag, val) { + this.writeTag(tag, Pbf.Fixed32); + this.writeFloat(val); + }, + writeDoubleField: function(tag, val) { + this.writeTag(tag, Pbf.Fixed64); + this.writeDouble(val); + }, + writeBooleanField: function(tag, val) { + this.writeVarintField(tag, Boolean(val)); + } +}; + +function readVarintRemainder(l, s, p) { + var buf = p.buf, + h, b; + + b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s); + b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s); + b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s); + b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s); + b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s); + b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s); + + throw new Error('Expected varint not more than 10 bytes'); +} + +function readPackedEnd(pbf) { + return pbf.type === Pbf.Bytes ? + pbf.readVarint() + pbf.pos : pbf.pos + 1; +} + +function toNum(low, high, isSigned) { + if (isSigned) { + return high * 0x100000000 + (low >>> 0); + } + + return ((high >>> 0) * 0x100000000) + (low >>> 0); +} + +function writeBigVarint(val, pbf) { + var low, high; + + if (val >= 0) { + low = (val % 0x100000000) | 0; + high = (val / 0x100000000) | 0; + } else { + low = ~(-val % 0x100000000); + high = ~(-val / 0x100000000); + + if (low ^ 0xffffffff) { + low = (low + 1) | 0; + } else { + low = 0; + high = (high + 1) | 0; + } + } + + if (val >= 0x10000000000000000 || val < -0x10000000000000000) { + throw new Error('Given varint doesn\'t fit into 10 bytes'); + } + + pbf.realloc(10); + + writeBigVarintLow(low, high, pbf); + writeBigVarintHigh(high, pbf); +} + +function writeBigVarintLow(low, high, pbf) { + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; + pbf.buf[pbf.pos] = low & 0x7f; +} + +function writeBigVarintHigh(high, pbf) { + var lsb = (high & 0x07) << 4; + + pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return; + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; + pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; + pbf.buf[pbf.pos++] = high & 0x7f; +} + +function makeRoomForExtraLength(startPos, len, pbf) { + var extraLen = + len <= 0x3fff ? 1 : + len <= 0x1fffff ? 2 : + len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7)); + + // if 1 byte isn't enough for encoding message length, shift the data to the right + pbf.realloc(extraLen); + for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i]; +} + +function writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); } +function writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); } +function writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); } +function writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); } +function writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); } +function writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); } +function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); } +function writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); } +function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); } + +// Buffer code below from https://github.com/feross/buffer, MIT-licensed + +function readUInt32(buf, pos) { + return ((buf[pos]) | + (buf[pos + 1] << 8) | + (buf[pos + 2] << 16)) + + (buf[pos + 3] * 0x1000000); +} + +function writeInt32(buf, val, pos) { + buf[pos] = val; + buf[pos + 1] = (val >>> 8); + buf[pos + 2] = (val >>> 16); + buf[pos + 3] = (val >>> 24); +} + +function readInt32(buf, pos) { + return ((buf[pos]) | + (buf[pos + 1] << 8) | + (buf[pos + 2] << 16)) + + (buf[pos + 3] << 24); +} + +function readUtf8(buf, pos, end) { + var str = ''; + var i = pos; + + while (i < end) { + var b0 = buf[i]; + var c = null; // codepoint + var bytesPerSequence = + b0 > 0xEF ? 4 : + b0 > 0xDF ? 3 : + b0 > 0xBF ? 2 : 1; + + if (i + bytesPerSequence > end) break; + + var b1, b2, b3; + + if (bytesPerSequence === 1) { + if (b0 < 0x80) { + c = b0; + } + } else if (bytesPerSequence === 2) { + b1 = buf[i + 1]; + if ((b1 & 0xC0) === 0x80) { + c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F); + if (c <= 0x7F) { + c = null; + } + } + } else if (bytesPerSequence === 3) { + b1 = buf[i + 1]; + b2 = buf[i + 2]; + if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) { + c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F); + if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) { + c = null; + } + } + } else if (bytesPerSequence === 4) { + b1 = buf[i + 1]; + b2 = buf[i + 2]; + b3 = buf[i + 3]; + if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { + c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F); + if (c <= 0xFFFF || c >= 0x110000) { + c = null; + } + } + } + + if (c === null) { + c = 0xFFFD; + bytesPerSequence = 1; + + } else if (c > 0xFFFF) { + c -= 0x10000; + str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800); + c = 0xDC00 | c & 0x3FF; + } + + str += String.fromCharCode(c); + i += bytesPerSequence; + } + + return str; +} + +function writeUtf8(buf, str, pos) { + for (var i = 0, c, lead; i < str.length; i++) { + c = str.charCodeAt(i); // code point + + if (c > 0xD7FF && c < 0xE000) { + if (lead) { + if (c < 0xDC00) { + buf[pos++] = 0xEF; + buf[pos++] = 0xBF; + buf[pos++] = 0xBD; + lead = c; + continue; + } else { + c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000; + lead = null; + } + } else { + if (c > 0xDBFF || (i + 1 === str.length)) { + buf[pos++] = 0xEF; + buf[pos++] = 0xBF; + buf[pos++] = 0xBD; + } else { + lead = c; + } + continue; + } + } else if (lead) { + buf[pos++] = 0xEF; + buf[pos++] = 0xBF; + buf[pos++] = 0xBD; + lead = null; + } + + if (c < 0x80) { + buf[pos++] = c; + } else { + if (c < 0x800) { + buf[pos++] = c >> 0x6 | 0xC0; + } else { + if (c < 0x10000) { + buf[pos++] = c >> 0xC | 0xE0; + } else { + buf[pos++] = c >> 0x12 | 0xF0; + buf[pos++] = c >> 0xC & 0x3F | 0x80; + } + buf[pos++] = c >> 0x6 & 0x3F | 0x80; + } + buf[pos++] = c & 0x3F | 0x80; + } + } + return pos; +} + +},{"ieee754":241}],278:[function(require,module,exports){ +exports.pbkdf2 = require('./lib/async') +exports.pbkdf2Sync = require('./lib/sync') + +},{"./lib/async":279,"./lib/sync":282}],279:[function(require,module,exports){ +(function (process,global){ +var checkParameters = require('./precondition') +var defaultEncoding = require('./default-encoding') +var sync = require('./sync') +var Buffer = require('safe-buffer').Buffer + +var ZERO_BUF +var subtle = global.crypto && global.crypto.subtle +var toBrowser = { + 'sha': 'SHA-1', + 'sha-1': 'SHA-1', + 'sha1': 'SHA-1', + 'sha256': 'SHA-256', + 'sha-256': 'SHA-256', + 'sha384': 'SHA-384', + 'sha-384': 'SHA-384', + 'sha-512': 'SHA-512', + 'sha512': 'SHA-512' +} +var checks = [] +function checkNative (algo) { + if (global.process && !global.process.browser) { + return Promise.resolve(false) + } + if (!subtle || !subtle.importKey || !subtle.deriveBits) { + return Promise.resolve(false) + } + if (checks[algo] !== undefined) { + return checks[algo] + } + ZERO_BUF = ZERO_BUF || Buffer.alloc(8) + var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo) + .then(function () { + return true + }).catch(function () { + return false + }) + checks[algo] = prom + return prom +} + +function browserPbkdf2 (password, salt, iterations, length, algo) { + return subtle.importKey( + 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits'] + ).then(function (key) { + return subtle.deriveBits({ + name: 'PBKDF2', + salt: salt, + iterations: iterations, + hash: { + name: algo + } + }, key, length << 3) + }).then(function (res) { + return Buffer.from(res) + }) +} + +function resolvePromise (promise, callback) { + promise.then(function (out) { + process.nextTick(function () { + callback(null, out) + }) + }, function (e) { + process.nextTick(function () { + callback(e) + }) + }) +} +module.exports = function (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest + digest = undefined + } + + digest = digest || 'sha1' + var algo = toBrowser[digest.toLowerCase()] + + if (!algo || typeof global.Promise !== 'function') { + return process.nextTick(function () { + var out + try { + out = sync(password, salt, iterations, keylen, digest) + } catch (e) { + return callback(e) + } + callback(null, out) + }) + } + + checkParameters(password, salt, iterations, keylen) + if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2') + if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding) + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding) + + resolvePromise(checkNative(algo).then(function (resp) { + if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo) + + return sync(password, salt, iterations, keylen, digest) + }), callback) +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./default-encoding":280,"./precondition":281,"./sync":282,"_process":284,"safe-buffer":318}],280:[function(require,module,exports){ +(function (process){ +var defaultEncoding +/* istanbul ignore next */ +if (process.browser) { + defaultEncoding = 'utf-8' +} else { + var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10) + + defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary' +} +module.exports = defaultEncoding + +}).call(this,require('_process')) +},{"_process":284}],281:[function(require,module,exports){ +(function (Buffer){ +var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs + +function checkBuffer (buf, name) { + if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) { + throw new TypeError(name + ' must be a buffer or string') + } +} + +module.exports = function (password, salt, iterations, keylen) { + checkBuffer(password, 'Password') + checkBuffer(salt, 'Salt') + + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number') + } + + if (iterations < 0) { + throw new TypeError('Bad iterations') + } + + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number') + } + + if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */ + throw new TypeError('Bad key length') + } +} + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":263}],282:[function(require,module,exports){ +var md5 = require('create-hash/md5') +var RIPEMD160 = require('ripemd160') +var sha = require('sha.js') + +var checkParameters = require('./precondition') +var defaultEncoding = require('./default-encoding') +var Buffer = require('safe-buffer').Buffer +var ZEROS = Buffer.alloc(128) +var sizes = { + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + rmd160: 20, + ripemd160: 20 +} + +function Hmac (alg, key, saltLen) { + var hash = getDigest(alg) + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + if (key.length > blocksize) { + key = hash(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]) + var opad = Buffer.allocUnsafe(blocksize + sizes[alg]) + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4) + ipad.copy(ipad1, 0, 0, blocksize) + this.ipad1 = ipad1 + this.ipad2 = ipad + this.opad = opad + this.alg = alg + this.blocksize = blocksize + this.hash = hash + this.size = sizes[alg] +} + +Hmac.prototype.run = function (data, ipad) { + data.copy(ipad, this.blocksize) + var h = this.hash(ipad) + h.copy(this.opad, this.blocksize) + return this.hash(this.opad) +} + +function getDigest (alg) { + function shaFunc (data) { + return sha(alg).update(data).digest() + } + function rmd160Func (data) { + return new RIPEMD160().update(data).digest() + } + + if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func + if (alg === 'md5') return md5 + return shaFunc +} + +function pbkdf2 (password, salt, iterations, keylen, digest) { + checkParameters(password, salt, iterations, keylen) + + if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding) + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding) + + digest = digest || 'sha1' + + var hmac = new Hmac(digest, password, salt.length) + + var DK = Buffer.allocUnsafe(keylen) + var block1 = Buffer.allocUnsafe(salt.length + 4) + salt.copy(block1, 0, 0, salt.length) + + var destPos = 0 + var hLen = sizes[digest] + var l = Math.ceil(keylen / hLen) + + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length) + + var T = hmac.run(block1, hmac.ipad1) + var U = T + + for (var j = 1; j < iterations; j++) { + U = hmac.run(U, hmac.ipad2) + for (var k = 0; k < hLen; k++) T[k] ^= U[k] + } + + T.copy(DK, destPos) + destPos += hLen + } + + return DK +} + +module.exports = pbkdf2 + +},{"./default-encoding":280,"./precondition":281,"create-hash/md5":189,"ripemd160":317,"safe-buffer":318,"sha.js":320}],283:[function(require,module,exports){ +(function (process){ +'use strict'; + +if (typeof process === 'undefined' || + !process.version || + process.version.indexOf('v0.') === 0 || + process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { nextTick: nextTick }; +} else { + module.exports = process +} + +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + var len = arguments.length; + var args, i; + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + default: + args = new Array(len - 1); + i = 0; + while (i < args.length) { + args[i++] = arguments[i]; + } + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} + + +}).call(this,require('_process')) +},{"_process":284}],284:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // 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 + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // 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. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],285:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.proj4 = factory()); +}(this, (function () { 'use strict'; + + var globals = function(defs) { + defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"); + defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"); + 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"); + + defs.WGS84 = defs['EPSG:4326']; + defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857 + defs.GOOGLE = defs['EPSG:3857']; + defs['EPSG:900913'] = defs['EPSG:3857']; + defs['EPSG:102113'] = defs['EPSG:3857']; + }; + + var PJD_3PARAM = 1; + var PJD_7PARAM = 2; + var PJD_WGS84 = 4; // WGS84 or equivalent + var PJD_NODATUM = 5; // WGS84 or equivalent + var SEC_TO_RAD = 4.84813681109535993589914102357e-6; + var HALF_PI = Math.PI/2; + // ellipoid pj_set_ell.c + var SIXTH = 0.1666666666666666667; + /* 1/6 */ + var RA4 = 0.04722222222222222222; + /* 17/360 */ + var RA6 = 0.02215608465608465608; + var EPSLN = (typeof Number.EPSILON === 'undefined') ? 1.0e-10 : Number.EPSILON; + var D2R = 0.01745329251994329577; + var R2D = 57.29577951308232088; + var FORTPI = Math.PI/4; + var TWO_PI = Math.PI * 2; + // SPI is slightly greater than Math.PI, so values that exceed the -180..180 + // degree range by a tiny amount don't get wrapped. This prevents points that + // have drifted from their original location along the 180th meridian (due to + // floating point error) from changing their sign. + var SPI = 3.14159265359; + + var exports$1 = {}; + exports$1.greenwich = 0.0; //"0dE", + exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W", + exports$1.paris = 2.337229166667; //"2d20'14.025\"E", + exports$1.bogota = -74.080916666667; //"74d04'51.3\"W", + exports$1.madrid = -3.687938888889; //"3d41'16.58\"W", + exports$1.rome = 12.452333333333; //"12d27'8.4\"E", + exports$1.bern = 7.439583333333; //"7d26'22.5\"E", + exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E", + exports$1.ferro = -17.666666666667; //"17d40'W", + exports$1.brussels = 4.367975; //"4d22'4.71\"E", + exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E", + exports$1.athens = 23.7163375; //"23d42'58.815\"E", + exports$1.oslo = 10.722916666667; //"10d43'22.5\"E" + + var units = { + ft: {to_meter: 0.3048}, + 'us-ft': {to_meter: 1200 / 3937} + }; + + var ignoredChar = /[\s_\-\/\(\)]/g; + function match(obj, key) { + if (obj[key]) { + return obj[key]; + } + var keys = Object.keys(obj); + var lkey = key.toLowerCase().replace(ignoredChar, ''); + var i = -1; + var testkey, processedKey; + while (++i < keys.length) { + testkey = keys[i]; + processedKey = testkey.toLowerCase().replace(ignoredChar, ''); + if (processedKey === lkey) { + return obj[testkey]; + } + } + } + + var parseProj = function(defData) { + var self = {}; + var paramObj = defData.split('+').map(function(v) { + return v.trim(); + }).filter(function(a) { + return a; + }).reduce(function(p, a) { + var split = a.split('='); + split.push(true); + p[split[0].toLowerCase()] = split[1]; + return p; + }, {}); + var paramName, paramVal, paramOutname; + var params = { + proj: 'projName', + datum: 'datumCode', + rf: function(v) { + self.rf = parseFloat(v); + }, + lat_0: function(v) { + self.lat0 = v * D2R; + }, + lat_1: function(v) { + self.lat1 = v * D2R; + }, + lat_2: function(v) { + self.lat2 = v * D2R; + }, + lat_ts: function(v) { + self.lat_ts = v * D2R; + }, + lon_0: function(v) { + self.long0 = v * D2R; + }, + lon_1: function(v) { + self.long1 = v * D2R; + }, + lon_2: function(v) { + self.long2 = v * D2R; + }, + alpha: function(v) { + self.alpha = parseFloat(v) * D2R; + }, + lonc: function(v) { + self.longc = v * D2R; + }, + x_0: function(v) { + self.x0 = parseFloat(v); + }, + y_0: function(v) { + self.y0 = parseFloat(v); + }, + k_0: function(v) { + self.k0 = parseFloat(v); + }, + k: function(v) { + self.k0 = parseFloat(v); + }, + a: function(v) { + self.a = parseFloat(v); + }, + b: function(v) { + self.b = parseFloat(v); + }, + r_a: function() { + self.R_A = true; + }, + zone: function(v) { + self.zone = parseInt(v, 10); + }, + south: function() { + self.utmSouth = true; + }, + towgs84: function(v) { + self.datum_params = v.split(",").map(function(a) { + return parseFloat(a); + }); + }, + to_meter: function(v) { + self.to_meter = parseFloat(v); + }, + units: function(v) { + self.units = v; + var unit = match(units, v); + if (unit) { + self.to_meter = unit.to_meter; + } + }, + from_greenwich: function(v) { + self.from_greenwich = v * D2R; + }, + pm: function(v) { + var pm = match(exports$1, v); + self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R; + }, + nadgrids: function(v) { + if (v === '@null') { + self.datumCode = 'none'; + } + else { + self.nadgrids = v; + } + }, + axis: function(v) { + var legalAxis = "ewnsud"; + 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) { + self.axis = v; + } + } + }; + for (paramName in paramObj) { + paramVal = paramObj[paramName]; + if (paramName in params) { + paramOutname = params[paramName]; + if (typeof paramOutname === 'function') { + paramOutname(paramVal); + } + else { + self[paramOutname] = paramVal; + } + } + else { + self[paramName] = paramVal; + } + } + if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){ + self.datumCode = self.datumCode.toLowerCase(); + } + return self; + }; + + var NEUTRAL = 1; + var KEYWORD = 2; + var NUMBER = 3; + var QUOTED = 4; + var AFTERQUOTE = 5; + var ENDED = -1; + var whitespace = /\s/; + var latin = /[A-Za-z]/; + var keyword = /[A-Za-z84]/; + var endThings = /[,\]]/; + var digets = /[\d\.E\-\+]/; + // const ignoredChar = /[\s_\-\/\(\)]/g; + function Parser(text) { + if (typeof text !== 'string') { + throw new Error('not a string'); + } + this.text = text.trim(); + this.level = 0; + this.place = 0; + this.root = null; + this.stack = []; + this.currentObject = null; + this.state = NEUTRAL; + } + Parser.prototype.readCharicter = function() { + var char = this.text[this.place++]; + if (this.state !== QUOTED) { + while (whitespace.test(char)) { + if (this.place >= this.text.length) { + return; + } + char = this.text[this.place++]; + } + } + switch (this.state) { + case NEUTRAL: + return this.neutral(char); + case KEYWORD: + return this.keyword(char) + case QUOTED: + return this.quoted(char); + case AFTERQUOTE: + return this.afterquote(char); + case NUMBER: + return this.number(char); + case ENDED: + return; + } + }; + Parser.prototype.afterquote = function(char) { + if (char === '"') { + this.word += '"'; + this.state = QUOTED; + return; + } + if (endThings.test(char)) { + this.word = this.word.trim(); + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place); + }; + Parser.prototype.afterItem = function(char) { + if (char === ',') { + if (this.word !== null) { + this.currentObject.push(this.word); + } + this.word = null; + this.state = NEUTRAL; + return; + } + if (char === ']') { + this.level--; + if (this.word !== null) { + this.currentObject.push(this.word); + this.word = null; + } + this.state = NEUTRAL; + this.currentObject = this.stack.pop(); + if (!this.currentObject) { + this.state = ENDED; + } + + return; + } + }; + Parser.prototype.number = function(char) { + if (digets.test(char)) { + this.word += char; + return; + } + if (endThings.test(char)) { + this.word = parseFloat(this.word); + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place); + }; + Parser.prototype.quoted = function(char) { + if (char === '"') { + this.state = AFTERQUOTE; + return; + } + this.word += char; + return; + }; + Parser.prototype.keyword = function(char) { + if (keyword.test(char)) { + this.word += char; + return; + } + if (char === '[') { + var newObjects = []; + newObjects.push(this.word); + this.level++; + if (this.root === null) { + this.root = newObjects; + } else { + this.currentObject.push(newObjects); + } + this.stack.push(this.currentObject); + this.currentObject = newObjects; + this.state = NEUTRAL; + return; + } + if (endThings.test(char)) { + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place); + }; + Parser.prototype.neutral = function(char) { + if (latin.test(char)) { + this.word = char; + this.state = KEYWORD; + return; + } + if (char === '"') { + this.word = ''; + this.state = QUOTED; + return; + } + if (digets.test(char)) { + this.word = char; + this.state = NUMBER; + return; + } + if (endThings.test(char)) { + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place); + }; + Parser.prototype.output = function() { + while (this.place < this.text.length) { + this.readCharicter(); + } + if (this.state === ENDED) { + return this.root; + } + throw new Error('unable to parse string "' +this.text + '". State is ' + this.state); + }; + + function parseString(txt) { + var parser = new Parser(txt); + return parser.output(); + } + + function mapit(obj, key, value) { + if (Array.isArray(key)) { + value.unshift(key); + key = null; + } + var thing = key ? {} : obj; + + var out = value.reduce(function(newObj, item) { + sExpr(item, newObj); + return newObj + }, thing); + if (key) { + obj[key] = out; + } + } + + function sExpr(v, obj) { + if (!Array.isArray(v)) { + obj[v] = true; + return; + } + var key = v.shift(); + if (key === 'PARAMETER') { + key = v.shift(); + } + if (v.length === 1) { + if (Array.isArray(v[0])) { + obj[key] = {}; + sExpr(v[0], obj[key]); + return; + } + obj[key] = v[0]; + return; + } + if (!v.length) { + obj[key] = true; + return; + } + if (key === 'TOWGS84') { + obj[key] = v; + return; + } + if (!Array.isArray(key)) { + obj[key] = {}; + } + + var i; + switch (key) { + case 'UNIT': + case 'PRIMEM': + case 'VERT_DATUM': + obj[key] = { + name: v[0].toLowerCase(), + convert: v[1] + }; + if (v.length === 3) { + sExpr(v[2], obj[key]); + } + return; + case 'SPHEROID': + case 'ELLIPSOID': + obj[key] = { + name: v[0], + a: v[1], + rf: v[2] + }; + if (v.length === 4) { + sExpr(v[3], obj[key]); + } + return; + case 'PROJECTEDCRS': + case 'PROJCRS': + case 'GEOGCS': + case 'GEOCCS': + case 'PROJCS': + case 'LOCAL_CS': + case 'GEODCRS': + case 'GEODETICCRS': + case 'GEODETICDATUM': + case 'EDATUM': + case 'ENGINEERINGDATUM': + case 'VERT_CS': + case 'VERTCRS': + case 'VERTICALCRS': + case 'COMPD_CS': + case 'COMPOUNDCRS': + case 'ENGINEERINGCRS': + case 'ENGCRS': + case 'FITTED_CS': + case 'LOCAL_DATUM': + case 'DATUM': + v[0] = ['name', v[0]]; + mapit(obj, key, v); + return; + default: + i = -1; + while (++i < v.length) { + if (!Array.isArray(v[i])) { + return sExpr(v, obj[key]); + } + } + return mapit(obj, key, v); + } + } + + var D2R$1 = 0.01745329251994329577; + function rename(obj, params) { + var outName = params[0]; + var inName = params[1]; + if (!(outName in obj) && (inName in obj)) { + obj[outName] = obj[inName]; + if (params.length === 3) { + obj[outName] = params[2](obj[outName]); + } + } + } + + function d2r(input) { + return input * D2R$1; + } + + function cleanWKT(wkt) { + if (wkt.type === 'GEOGCS') { + wkt.projName = 'longlat'; + } else if (wkt.type === 'LOCAL_CS') { + wkt.projName = 'identity'; + wkt.local = true; + } else { + if (typeof wkt.PROJECTION === 'object') { + wkt.projName = Object.keys(wkt.PROJECTION)[0]; + } else { + wkt.projName = wkt.PROJECTION; + } + } + if (wkt.UNIT) { + wkt.units = wkt.UNIT.name.toLowerCase(); + if (wkt.units === 'metre') { + wkt.units = 'meter'; + } + if (wkt.UNIT.convert) { + if (wkt.type === 'GEOGCS') { + if (wkt.DATUM && wkt.DATUM.SPHEROID) { + wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a; + } + } else { + wkt.to_meter = wkt.UNIT.convert, 10; + } + } + } + var geogcs = wkt.GEOGCS; + if (wkt.type === 'GEOGCS') { + geogcs = wkt; + } + if (geogcs) { + //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){ + // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R; + //} + if (geogcs.DATUM) { + wkt.datumCode = geogcs.DATUM.name.toLowerCase(); + } else { + wkt.datumCode = geogcs.name.toLowerCase(); + } + if (wkt.datumCode.slice(0, 2) === 'd_') { + wkt.datumCode = wkt.datumCode.slice(2); + } + if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') { + wkt.datumCode = 'nzgd49'; + } + if (wkt.datumCode === 'wgs_1984') { + if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') { + wkt.sphere = true; + } + wkt.datumCode = 'wgs84'; + } + if (wkt.datumCode.slice(-6) === '_ferro') { + wkt.datumCode = wkt.datumCode.slice(0, - 6); + } + if (wkt.datumCode.slice(-8) === '_jakarta') { + wkt.datumCode = wkt.datumCode.slice(0, - 8); + } + if (~wkt.datumCode.indexOf('belge')) { + wkt.datumCode = 'rnb72'; + } + if (geogcs.DATUM && geogcs.DATUM.SPHEROID) { + wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk'); + if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') { + wkt.ellps = 'intl'; + } + + wkt.a = geogcs.DATUM.SPHEROID.a; + wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10); + } + if (~wkt.datumCode.indexOf('osgb_1936')) { + wkt.datumCode = 'osgb36'; + } + } + if (wkt.b && !isFinite(wkt.b)) { + wkt.b = wkt.a; + } + + function toMeter(input) { + var ratio = wkt.to_meter || 1; + return input * ratio; + } + var renamer = function(a) { + return rename(wkt, a); + }; + var list = [ + ['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', d2r], + ['longitude_of_center', 'Longitude_Of_Center'], + ['longc', 'longitude_of_center', d2r], + ['x0', 'false_easting', toMeter], + ['y0', 'false_northing', toMeter], + ['long0', 'central_meridian', d2r], + ['lat0', 'latitude_of_origin', d2r], + ['lat0', 'standard_parallel_1', d2r], + ['lat1', 'standard_parallel_1', d2r], + ['lat2', 'standard_parallel_2', d2r], + ['alpha', 'azimuth', d2r], + ['srsCode', 'name'] + ]; + list.forEach(renamer); + if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) { + wkt.long0 = wkt.longc; + } + if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) { + wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90); + wkt.lat_ts = wkt.lat1; + } + } + var wkt = function(wkt) { + var lisp = parseString(wkt); + var type = lisp.shift(); + var name = lisp.shift(); + lisp.unshift(['name', name]); + lisp.unshift(['type', type]); + var obj = {}; + sExpr(lisp, obj); + cleanWKT(obj); + return obj; + }; + + function defs(name) { + /*global console*/ + var that = this; + if (arguments.length === 2) { + var def = arguments[1]; + if (typeof def === 'string') { + if (def.charAt(0) === '+') { + defs[name] = parseProj(arguments[1]); + } + else { + defs[name] = wkt(arguments[1]); + } + } else { + defs[name] = def; + } + } + else if (arguments.length === 1) { + if (Array.isArray(name)) { + return name.map(function(v) { + if (Array.isArray(v)) { + defs.apply(that, v); + } + else { + defs(v); + } + }); + } + else if (typeof name === 'string') { + if (name in defs) { + return defs[name]; + } + } + else if ('EPSG' in name) { + defs['EPSG:' + name.EPSG] = name; + } + else if ('ESRI' in name) { + defs['ESRI:' + name.ESRI] = name; + } + else if ('IAU2000' in name) { + defs['IAU2000:' + name.IAU2000] = name; + } + else { + console.log(name); + } + return; + } + + + } + globals(defs); + + function testObj(code){ + return typeof code === 'string'; + } + function testDef(code){ + return code in defs; + } + var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS']; + function testWKT(code){ + return codeWords.some(function (word) { + return code.indexOf(word) > -1; + }); + } + function testProj(code){ + return code[0] === '+'; + } + function parse(code){ + if (testObj(code)) { + //check to see if this is a WKT string + if (testDef(code)) { + return defs[code]; + } + if (testWKT(code)) { + return wkt(code); + } + if (testProj(code)) { + return parseProj(code); + } + }else{ + return code; + } + } + + var extend = function(destination, source) { + destination = destination || {}; + var value, property; + if (!source) { + return destination; + } + for (property in source) { + value = source[property]; + if (value !== undefined) { + destination[property] = value; + } + } + return destination; + }; + + var msfnz = function(eccent, sinphi, cosphi) { + var con = eccent * sinphi; + return cosphi / (Math.sqrt(1 - con * con)); + }; + + var sign = function(x) { + return x<0 ? -1 : 1; + }; + + var adjust_lon = function(x) { + return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI)); + }; + + var tsfnz = function(eccent, phi, sinphi) { + var con = eccent * sinphi; + var com = 0.5 * eccent; + con = Math.pow(((1 - con) / (1 + con)), com); + return (Math.tan(0.5 * (HALF_PI - phi)) / con); + }; + + var phi2z = function(eccent, ts) { + var eccnth = 0.5 * eccent; + var con, dphi; + var phi = HALF_PI - 2 * Math.atan(ts); + for (var i = 0; i <= 15; i++) { + con = eccent * Math.sin(phi); + dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi; + phi += dphi; + if (Math.abs(dphi) <= 0.0000000001) { + return phi; + } + } + //console.log("phi2z has NoConvergence"); + return -9999; + }; + + function init() { + var con = this.b / this.a; + this.es = 1 - con * con; + if(!('x0' in this)){ + this.x0 = 0; + } + if(!('y0' in this)){ + this.y0 = 0; + } + this.e = Math.sqrt(this.es); + if (this.lat_ts) { + if (this.sphere) { + this.k0 = Math.cos(this.lat_ts); + } + else { + this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); + } + } + else { + if (!this.k0) { + if (this.k) { + this.k0 = this.k; + } + else { + this.k0 = 1; + } + } + } + } + + /* Mercator forward equations--mapping lat,long to x,y + --------------------------------------------------*/ + + function forward(p) { + var lon = p.x; + var lat = p.y; + // convert to radians + if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) { + return null; + } + + var x, y; + if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { + return null; + } + else { + if (this.sphere) { + x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); + y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat)); + } + else { + var sinphi = Math.sin(lat); + var ts = tsfnz(this.e, lat, sinphi); + x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); + y = this.y0 - this.a * this.k0 * Math.log(ts); + } + p.x = x; + p.y = y; + return p; + } + } + + /* Mercator inverse equations--mapping x,y to lat/long + --------------------------------------------------*/ + function inverse(p) { + + var x = p.x - this.x0; + var y = p.y - this.y0; + var lon, lat; + + if (this.sphere) { + lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0))); + } + else { + var ts = Math.exp(-y / (this.a * this.k0)); + lat = phi2z(this.e, ts); + if (lat === -9999) { + return null; + } + } + lon = adjust_lon(this.long0 + x / (this.a * this.k0)); + + p.x = lon; + p.y = lat; + return p; + } + + var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"]; + var merc = { + init: init, + forward: forward, + inverse: inverse, + names: names$1 + }; + + function init$1() { + //no-op for longlat + } + + function identity(pt) { + return pt; + } + var names$2 = ["longlat", "identity"]; + var longlat = { + init: init$1, + forward: identity, + inverse: identity, + names: names$2 + }; + + var projs = [merc, longlat]; + var names$$1 = {}; + var projStore = []; + + function add(proj, i) { + var len = projStore.length; + if (!proj.names) { + console.log(i); + return true; + } + projStore[len] = proj; + proj.names.forEach(function(n) { + names$$1[n.toLowerCase()] = len; + }); + return this; + } + + function get(name) { + if (!name) { + return false; + } + var n = name.toLowerCase(); + if (typeof names$$1[n] !== 'undefined' && projStore[names$$1[n]]) { + return projStore[names$$1[n]]; + } + } + + function start() { + projs.forEach(add); + } + var projections = { + start: start, + add: add, + get: get + }; + + var exports$2 = {}; + exports$2.MERIT = { + a: 6378137.0, + rf: 298.257, + ellipseName: "MERIT 1983" + }; + + exports$2.SGS85 = { + a: 6378136.0, + rf: 298.257, + ellipseName: "Soviet Geodetic System 85" + }; + + exports$2.GRS80 = { + a: 6378137.0, + rf: 298.257222101, + ellipseName: "GRS 1980(IUGG, 1980)" + }; + + exports$2.IAU76 = { + a: 6378140.0, + rf: 298.257, + ellipseName: "IAU 1976" + }; + + exports$2.airy = { + a: 6377563.396, + b: 6356256.910, + ellipseName: "Airy 1830" + }; + + exports$2.APL4 = { + a: 6378137, + rf: 298.25, + ellipseName: "Appl. Physics. 1965" + }; + + exports$2.NWL9D = { + a: 6378145.0, + rf: 298.25, + ellipseName: "Naval Weapons Lab., 1965" + }; + + exports$2.mod_airy = { + a: 6377340.189, + b: 6356034.446, + ellipseName: "Modified Airy" + }; + + exports$2.andrae = { + a: 6377104.43, + rf: 300.0, + ellipseName: "Andrae 1876 (Den., Iclnd.)" + }; + + exports$2.aust_SA = { + a: 6378160.0, + rf: 298.25, + ellipseName: "Australian Natl & S. Amer. 1969" + }; + + exports$2.GRS67 = { + a: 6378160.0, + rf: 298.2471674270, + ellipseName: "GRS 67(IUGG 1967)" + }; + + exports$2.bessel = { + a: 6377397.155, + rf: 299.1528128, + ellipseName: "Bessel 1841" + }; + + exports$2.bess_nam = { + a: 6377483.865, + rf: 299.1528128, + ellipseName: "Bessel 1841 (Namibia)" + }; + + exports$2.clrk66 = { + a: 6378206.4, + b: 6356583.8, + ellipseName: "Clarke 1866" + }; + + exports$2.clrk80 = { + a: 6378249.145, + rf: 293.4663, + ellipseName: "Clarke 1880 mod." + }; + + exports$2.clrk58 = { + a: 6378293.645208759, + rf: 294.2606763692654, + ellipseName: "Clarke 1858" + }; + + exports$2.CPM = { + a: 6375738.7, + rf: 334.29, + ellipseName: "Comm. des Poids et Mesures 1799" + }; + + exports$2.delmbr = { + a: 6376428.0, + rf: 311.5, + ellipseName: "Delambre 1810 (Belgium)" + }; + + exports$2.engelis = { + a: 6378136.05, + rf: 298.2566, + ellipseName: "Engelis 1985" + }; + + exports$2.evrst30 = { + a: 6377276.345, + rf: 300.8017, + ellipseName: "Everest 1830" + }; + + exports$2.evrst48 = { + a: 6377304.063, + rf: 300.8017, + ellipseName: "Everest 1948" + }; + + exports$2.evrst56 = { + a: 6377301.243, + rf: 300.8017, + ellipseName: "Everest 1956" + }; + + exports$2.evrst69 = { + a: 6377295.664, + rf: 300.8017, + ellipseName: "Everest 1969" + }; + + exports$2.evrstSS = { + a: 6377298.556, + rf: 300.8017, + ellipseName: "Everest (Sabah & Sarawak)" + }; + + exports$2.fschr60 = { + a: 6378166.0, + rf: 298.3, + ellipseName: "Fischer (Mercury Datum) 1960" + }; + + exports$2.fschr60m = { + a: 6378155.0, + rf: 298.3, + ellipseName: "Fischer 1960" + }; + + exports$2.fschr68 = { + a: 6378150.0, + rf: 298.3, + ellipseName: "Fischer 1968" + }; + + exports$2.helmert = { + a: 6378200.0, + rf: 298.3, + ellipseName: "Helmert 1906" + }; + + exports$2.hough = { + a: 6378270.0, + rf: 297.0, + ellipseName: "Hough" + }; + + exports$2.intl = { + a: 6378388.0, + rf: 297.0, + ellipseName: "International 1909 (Hayford)" + }; + + exports$2.kaula = { + a: 6378163.0, + rf: 298.24, + ellipseName: "Kaula 1961" + }; + + exports$2.lerch = { + a: 6378139.0, + rf: 298.257, + ellipseName: "Lerch 1979" + }; + + exports$2.mprts = { + a: 6397300.0, + rf: 191.0, + ellipseName: "Maupertius 1738" + }; + + exports$2.new_intl = { + a: 6378157.5, + b: 6356772.2, + ellipseName: "New International 1967" + }; + + exports$2.plessis = { + a: 6376523.0, + rf: 6355863.0, + ellipseName: "Plessis 1817 (France)" + }; + + exports$2.krass = { + a: 6378245.0, + rf: 298.3, + ellipseName: "Krassovsky, 1942" + }; + + exports$2.SEasia = { + a: 6378155.0, + b: 6356773.3205, + ellipseName: "Southeast Asia" + }; + + exports$2.walbeck = { + a: 6376896.0, + b: 6355834.8467, + ellipseName: "Walbeck" + }; + + exports$2.WGS60 = { + a: 6378165.0, + rf: 298.3, + ellipseName: "WGS 60" + }; + + exports$2.WGS66 = { + a: 6378145.0, + rf: 298.25, + ellipseName: "WGS 66" + }; + + exports$2.WGS7 = { + a: 6378135.0, + rf: 298.26, + ellipseName: "WGS 72" + }; + + var WGS84 = exports$2.WGS84 = { + a: 6378137.0, + rf: 298.257223563, + ellipseName: "WGS 84" + }; + + exports$2.sphere = { + a: 6370997.0, + b: 6370997.0, + ellipseName: "Normal Sphere (r=6370997)" + }; + + function eccentricity(a, b, rf, R_A) { + var a2 = a * a; // used in geocentric + var b2 = b * b; // used in geocentric + var es = (a2 - b2) / a2; // e ^ 2 + var e = 0; + if (R_A) { + a *= 1 - es * (SIXTH + es * (RA4 + es * RA6)); + a2 = a * a; + es = 0; + } else { + e = Math.sqrt(es); // eccentricity + } + var ep2 = (a2 - b2) / b2; // used in geocentric + return { + es: es, + e: e, + ep2: ep2 + }; + } + function sphere(a, b, rf, ellps, sphere) { + if (!a) { // do we have an ellipsoid? + var ellipse = match(exports$2, ellps); + if (!ellipse) { + ellipse = WGS84; + } + a = ellipse.a; + b = ellipse.b; + rf = ellipse.rf; + } + + if (rf && !b) { + b = (1.0 - 1.0 / rf) * a; + } + if (rf === 0 || Math.abs(a - b) < EPSLN) { + sphere = true; + b = a; + } + return { + a: a, + b: b, + rf: rf, + sphere: sphere + }; + } + + var exports$3 = {}; + exports$3.wgs84 = { + towgs84: "0,0,0", + ellipse: "WGS84", + datumName: "WGS84" + }; + + exports$3.ch1903 = { + towgs84: "674.374,15.056,405.346", + ellipse: "bessel", + datumName: "swiss" + }; + + exports$3.ggrs87 = { + towgs84: "-199.87,74.79,246.62", + ellipse: "GRS80", + datumName: "Greek_Geodetic_Reference_System_1987" + }; + + exports$3.nad83 = { + towgs84: "0,0,0", + ellipse: "GRS80", + datumName: "North_American_Datum_1983" + }; + + exports$3.nad27 = { + nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", + ellipse: "clrk66", + datumName: "North_American_Datum_1927" + }; + + exports$3.potsdam = { + towgs84: "606.0,23.0,413.0", + ellipse: "bessel", + datumName: "Potsdam Rauenberg 1950 DHDN" + }; + + exports$3.carthage = { + towgs84: "-263.0,6.0,431.0", + ellipse: "clark80", + datumName: "Carthage 1934 Tunisia" + }; + + exports$3.hermannskogel = { + towgs84: "653.0,-212.0,449.0", + ellipse: "bessel", + datumName: "Hermannskogel" + }; + + exports$3.ire65 = { + towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", + ellipse: "mod_airy", + datumName: "Ireland 1965" + }; + + exports$3.rassadiran = { + towgs84: "-133.63,-157.5,-158.62", + ellipse: "intl", + datumName: "Rassadiran" + }; + + exports$3.nzgd49 = { + towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", + ellipse: "intl", + datumName: "New Zealand Geodetic Datum 1949" + }; + + exports$3.osgb36 = { + towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", + ellipse: "airy", + datumName: "Airy 1830" + }; + + exports$3.s_jtsk = { + towgs84: "589,76,480", + ellipse: 'bessel', + datumName: 'S-JTSK (Ferro)' + }; + + exports$3.beduaram = { + towgs84: '-106,-87,188', + ellipse: 'clrk80', + datumName: 'Beduaram' + }; + + exports$3.gunung_segara = { + towgs84: '-403,684,41', + ellipse: 'bessel', + datumName: 'Gunung Segara Jakarta' + }; + + exports$3.rnb72 = { + towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1", + ellipse: "intl", + datumName: "Reseau National Belge 1972" + }; + + function datum(datumCode, datum_params, a, b, es, ep2) { + var out = {}; + + if (datumCode === undefined || datumCode === 'none') { + out.datum_type = PJD_NODATUM; + } else { + out.datum_type = PJD_WGS84; + } + + if (datum_params) { + out.datum_params = datum_params.map(parseFloat); + if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) { + out.datum_type = PJD_3PARAM; + } + if (out.datum_params.length > 3) { + if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) { + out.datum_type = PJD_7PARAM; + out.datum_params[3] *= SEC_TO_RAD; + out.datum_params[4] *= SEC_TO_RAD; + out.datum_params[5] *= SEC_TO_RAD; + out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0; + } + } + } + + out.a = a; //datum object also uses these values + out.b = b; + out.es = es; + out.ep2 = ep2; + return out; + } + + function Projection$1(srsCode,callback) { + if (!(this instanceof Projection$1)) { + return new Projection$1(srsCode); + } + callback = callback || function(error){ + if(error){ + throw error; + } + }; + var json = parse(srsCode); + if(typeof json !== 'object'){ + callback(srsCode); + return; + } + var ourProj = Projection$1.projections.get(json.projName); + if(!ourProj){ + callback(srsCode); + return; + } + if (json.datumCode && json.datumCode !== 'none') { + var datumDef = match(exports$3, json.datumCode); + if (datumDef) { + json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null; + json.ellps = datumDef.ellipse; + json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode; + } + } + json.k0 = json.k0 || 1.0; + json.axis = json.axis || 'enu'; + json.ellps = json.ellps || 'wgs84'; + var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere); + var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A); + var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2); + + extend(this, json); // transfer everything over from the projection because we don't know what we'll need + extend(this, ourProj); // transfer all the methods from the projection + + // copy the 4 things over we calulated in deriveConstants.sphere + this.a = sphere_.a; + this.b = sphere_.b; + this.rf = sphere_.rf; + this.sphere = sphere_.sphere; + + // copy the 3 things we calculated in deriveConstants.eccentricity + this.es = ecc.es; + this.e = ecc.e; + this.ep2 = ecc.ep2; + + // add in the datum object + this.datum = datumObj; + + // init the projection + this.init(); + + // legecy callback from back in the day when it went to spatialreference.org + callback(null, this); + + } + Projection$1.projections = projections; + Projection$1.projections.start(); + + function compareDatums(source, dest) { + if (source.datum_type !== dest.datum_type) { + return false; // false, datums are not equal + } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) { + // the tolerance for es is to ensure that GRS80 and WGS84 + // are considered identical + return false; + } else if (source.datum_type === PJD_3PARAM) { + 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]); + } else if (source.datum_type === PJD_7PARAM) { + 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]); + } else { + return true; // datums are equal + } + } // cs_compare_datums() + + /* + * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates + * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), + * according to the current ellipsoid parameters. + * + * Latitude : Geodetic latitude in radians (input) + * Longitude : Geodetic longitude in radians (input) + * Height : Geodetic height, in meters (input) + * X : Calculated Geocentric X coordinate, in meters (output) + * Y : Calculated Geocentric Y coordinate, in meters (output) + * Z : Calculated Geocentric Z coordinate, in meters (output) + * + */ + function geodeticToGeocentric(p, es, a) { + var Longitude = p.x; + var Latitude = p.y; + var Height = p.z ? p.z : 0; //Z value not always supplied + + var Rn; /* Earth radius at location */ + var Sin_Lat; /* Math.sin(Latitude) */ + var Sin2_Lat; /* Square of Math.sin(Latitude) */ + var Cos_Lat; /* Math.cos(Latitude) */ + + /* + ** Don't blow up if Latitude is just a little out of the value + ** range as it may just be a rounding issue. Also removed longitude + ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001. + */ + if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) { + Latitude = -HALF_PI; + } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) { + Latitude = HALF_PI; + } else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) { + /* Latitude out of range */ + //..reportError('geocent:lat out of range:' + Latitude); + return null; + } + + if (Longitude > Math.PI) { + Longitude -= (2 * Math.PI); + } + Sin_Lat = Math.sin(Latitude); + Cos_Lat = Math.cos(Latitude); + Sin2_Lat = Sin_Lat * Sin_Lat; + Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat)); + return { + x: (Rn + Height) * Cos_Lat * Math.cos(Longitude), + y: (Rn + Height) * Cos_Lat * Math.sin(Longitude), + z: ((Rn * (1 - es)) + Height) * Sin_Lat + }; + } // cs_geodetic_to_geocentric() + + function geocentricToGeodetic(p, es, a, b) { + /* local defintions and variables */ + /* end-criterium of loop, accuracy of sin(Latitude) */ + var genau = 1e-12; + var genau2 = (genau * genau); + var maxiter = 30; + + var P; /* distance between semi-minor axis and location */ + var RR; /* distance between center and location */ + var CT; /* sin of geocentric latitude */ + var ST; /* cos of geocentric latitude */ + var RX; + var RK; + var RN; /* Earth radius at location */ + var CPHI0; /* cos of start or old geodetic latitude in iterations */ + var SPHI0; /* sin of start or old geodetic latitude in iterations */ + var CPHI; /* cos of searched geodetic latitude */ + var SPHI; /* sin of searched geodetic latitude */ + var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ + var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ + + var X = p.x; + var Y = p.y; + var Z = p.z ? p.z : 0.0; //Z value not always supplied + var Longitude; + var Latitude; + var Height; + + P = Math.sqrt(X * X + Y * Y); + RR = Math.sqrt(X * X + Y * Y + Z * Z); + + /* special cases for latitude and longitude */ + if (P / a < genau) { + + /* special case, if P=0. (X=0., Y=0.) */ + Longitude = 0.0; + + /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis + * of ellipsoid (=center of mass), Latitude becomes PI/2 */ + if (RR / a < genau) { + Latitude = HALF_PI; + Height = -b; + return { + x: p.x, + y: p.y, + z: p.z + }; + } + } else { + /* ellipsoidal (geodetic) longitude + * interval: -PI < Longitude <= +PI */ + Longitude = Math.atan2(Y, X); + } + + /* -------------------------------------------------------------- + * Following iterative algorithm was developped by + * "Institut for Erdmessung", University of Hannover, July 1988. + * Internet: www.ife.uni-hannover.de + * Iterative computation of CPHI,SPHI and Height. + * Iteration of CPHI and SPHI to 10**-12 radian resp. + * 2*10**-7 arcsec. + * -------------------------------------------------------------- + */ + CT = Z / RR; + ST = P / RR; + RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST); + CPHI0 = ST * (1.0 - es) * RX; + SPHI0 = CT * RX; + iter = 0; + + /* loop to find sin(Latitude) resp. Latitude + * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ + do { + iter++; + RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0); + + /* ellipsoidal (geodetic) height */ + Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0); + + RK = es * RN / (RN + Height); + RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST); + CPHI = ST * (1.0 - RK) * RX; + SPHI = CT * RX; + SDPHI = SPHI * CPHI0 - CPHI * SPHI0; + CPHI0 = CPHI; + SPHI0 = SPHI; + } + while (SDPHI * SDPHI > genau2 && iter < maxiter); + + /* ellipsoidal (geodetic) latitude */ + Latitude = Math.atan(SPHI / Math.abs(CPHI)); + return { + x: Longitude, + y: Latitude, + z: Height + }; + } // cs_geocentric_to_geodetic() + + /****************************************************************/ + // pj_geocentic_to_wgs84( p ) + // p = point to transform in geocentric coordinates (x,y,z) + + + /** point object, nothing fancy, just allows values to be + passed back and forth by reference rather than by value. + Other point classes may be used as long as they have + x and y properties, which will get modified in the transform method. + */ + function geocentricToWgs84(p, datum_type, datum_params) { + + if (datum_type === PJD_3PARAM) { + // if( x[io] === HUGE_VAL ) + // continue; + return { + x: p.x + datum_params[0], + y: p.y + datum_params[1], + z: p.z + datum_params[2], + }; + } else if (datum_type === PJD_7PARAM) { + var Dx_BF = datum_params[0]; + var Dy_BF = datum_params[1]; + var Dz_BF = datum_params[2]; + var Rx_BF = datum_params[3]; + var Ry_BF = datum_params[4]; + var Rz_BF = datum_params[5]; + var M_BF = datum_params[6]; + // if( x[io] === HUGE_VAL ) + // continue; + return { + x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF, + y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF, + z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF + }; + } + } // cs_geocentric_to_wgs84 + + /****************************************************************/ + // pj_geocentic_from_wgs84() + // coordinate system definition, + // point to transform in geocentric coordinates (x,y,z) + function geocentricFromWgs84(p, datum_type, datum_params) { + + if (datum_type === PJD_3PARAM) { + //if( x[io] === HUGE_VAL ) + // continue; + return { + x: p.x - datum_params[0], + y: p.y - datum_params[1], + z: p.z - datum_params[2], + }; + + } else if (datum_type === PJD_7PARAM) { + var Dx_BF = datum_params[0]; + var Dy_BF = datum_params[1]; + var Dz_BF = datum_params[2]; + var Rx_BF = datum_params[3]; + var Ry_BF = datum_params[4]; + var Rz_BF = datum_params[5]; + var M_BF = datum_params[6]; + var x_tmp = (p.x - Dx_BF) / M_BF; + var y_tmp = (p.y - Dy_BF) / M_BF; + var z_tmp = (p.z - Dz_BF) / M_BF; + //if( x[io] === HUGE_VAL ) + // continue; + + return { + x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp, + y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp, + z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp + }; + } //cs_geocentric_from_wgs84() + } + + function checkParams(type) { + return (type === PJD_3PARAM || type === PJD_7PARAM); + } + + var datum_transform = function(source, dest, point) { + // Short cut if the datums are identical. + if (compareDatums(source, dest)) { + return point; // in this case, zero is sucess, + // whereas cs_compare_datums returns 1 to indicate TRUE + // confusing, should fix this + } + + // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest + if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) { + return point; + } + + // If this datum requires grid shifts, then apply it to geodetic coordinates. + + // Do we need to go through geocentric coordinates? + if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) { + return point; + } + + // Convert to geocentric coordinates. + point = geodeticToGeocentric(point, source.es, source.a); + // Convert between datums + if (checkParams(source.datum_type)) { + point = geocentricToWgs84(point, source.datum_type, source.datum_params); + } + if (checkParams(dest.datum_type)) { + point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params); + } + return geocentricToGeodetic(point, dest.es, dest.a, dest.b); + + }; + + var adjust_axis = function(crs, denorm, point) { + var xin = point.x, + yin = point.y, + zin = point.z || 0.0; + var v, t, i; + var out = {}; + for (i = 0; i < 3; i++) { + if (denorm && i === 2 && point.z === undefined) { + continue; + } + if (i === 0) { + v = xin; + t = 'x'; + } + else if (i === 1) { + v = yin; + t = 'y'; + } + else { + v = zin; + t = 'z'; + } + switch (crs.axis[i]) { + case 'e': + out[t] = v; + break; + case 'w': + out[t] = -v; + break; + case 'n': + out[t] = v; + break; + case 's': + out[t] = -v; + break; + case 'u': + if (point[t] !== undefined) { + out.z = v; + } + break; + case 'd': + if (point[t] !== undefined) { + out.z = -v; + } + break; + default: + //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName); + return null; + } + } + return out; + }; + + var toPoint = function (array){ + var out = { + x: array[0], + y: array[1] + }; + if (array.length>2) { + out.z = array[2]; + } + if (array.length>3) { + out.m = array[3]; + } + return out; + }; + + function checkNotWGS(source, dest) { + 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'); + } + + function transform(source, dest, point) { + var wgs84; + if (Array.isArray(point)) { + point = toPoint(point); + } + + // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84 + if (source.datum && dest.datum && checkNotWGS(source, dest)) { + wgs84 = new Projection$1('WGS84'); + point = transform(source, wgs84, point); + source = wgs84; + } + // DGR, 2010/11/12 + if (source.axis !== 'enu') { + point = adjust_axis(source, false, point); + } + // Transform source points to long/lat, if they aren't already. + if (source.projName === 'longlat') { + point = { + x: point.x * D2R, + y: point.y * D2R + }; + } + else { + if (source.to_meter) { + point = { + x: point.x * source.to_meter, + y: point.y * source.to_meter + }; + } + point = source.inverse(point); // Convert Cartesian to longlat + } + // Adjust for the prime meridian if necessary + if (source.from_greenwich) { + point.x += source.from_greenwich; + } + + // Convert datums if needed, and if possible. + point = datum_transform(source.datum, dest.datum, point); + + // Adjust for the prime meridian if necessary + if (dest.from_greenwich) { + point = { + x: point.x - dest.from_greenwich, + y: point.y + }; + } + + if (dest.projName === 'longlat') { + // convert radians to decimal degrees + point = { + x: point.x * R2D, + y: point.y * R2D + }; + } else { // else project + point = dest.forward(point); + if (dest.to_meter) { + point = { + x: point.x / dest.to_meter, + y: point.y / dest.to_meter + }; + } + } + + // DGR, 2010/11/12 + if (dest.axis !== 'enu') { + return adjust_axis(dest, true, point); + } + + return point; + } + + var wgs84 = Projection$1('WGS84'); + + function transformer(from, to, coords) { + var transformedArray; + if (Array.isArray(coords)) { + transformedArray = transform(from, to, coords); + if (coords.length === 3) { + return [transformedArray.x, transformedArray.y, transformedArray.z]; + } + else { + return [transformedArray.x, transformedArray.y]; + } + } + else { + return transform(from, to, coords); + } + } + + function checkProj(item) { + if (item instanceof Projection$1) { + return item; + } + if (item.oProj) { + return item.oProj; + } + return Projection$1(item); + } + function proj4$1(fromProj, toProj, coord) { + fromProj = checkProj(fromProj); + var single = false; + var obj; + if (typeof toProj === 'undefined') { + toProj = fromProj; + fromProj = wgs84; + single = true; + } + else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) { + coord = toProj; + toProj = fromProj; + fromProj = wgs84; + single = true; + } + toProj = checkProj(toProj); + if (coord) { + return transformer(fromProj, toProj, coord); + } + else { + obj = { + forward: function(coords) { + return transformer(fromProj, toProj, coords); + }, + inverse: function(coords) { + return transformer(toProj, fromProj, coords); + } + }; + if (single) { + obj.oProj = toProj; + } + return obj; + } + } + + /** + * UTM zones are grouped, and assigned to one of a group of 6 + * sets. + * + * {int} @private + */ + var NUM_100K_SETS = 6; + + /** + * The column letters (for easting) of the lower left value, per + * set. + * + * {string} @private + */ + var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS'; + + /** + * The row letters (for northing) of the lower left value, per + * set. + * + * {string} @private + */ + var SET_ORIGIN_ROW_LETTERS = 'AFAFAF'; + + var A = 65; // A + var I = 73; // I + var O = 79; // O + var V = 86; // V + var Z = 90; // Z + var mgrs = { + forward: forward$1, + inverse: inverse$1, + toPoint: toPoint$1 + }; + /** + * Conversion of lat/lon to MGRS. + * + * @param {object} ll Object literal with lat and lon properties on a + * WGS84 ellipsoid. + * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for + * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5. + * @return {string} the MGRS string for the given location and accuracy. + */ + function forward$1(ll, accuracy) { + accuracy = accuracy || 5; // default accuracy 1m + return encode(LLtoUTM({ + lat: ll[1], + lon: ll[0] + }), accuracy); + } + + /** + * Conversion of MGRS to lat/lon. + * + * @param {string} mgrs MGRS string. + * @return {array} An array with left (longitude), bottom (latitude), right + * (longitude) and top (latitude) values in WGS84, representing the + * bounding box for the provided MGRS reference. + */ + function inverse$1(mgrs) { + var bbox = UTMtoLL(decode(mgrs.toUpperCase())); + if (bbox.lat && bbox.lon) { + return [bbox.lon, bbox.lat, bbox.lon, bbox.lat]; + } + return [bbox.left, bbox.bottom, bbox.right, bbox.top]; + } + + function toPoint$1(mgrs) { + var bbox = UTMtoLL(decode(mgrs.toUpperCase())); + if (bbox.lat && bbox.lon) { + return [bbox.lon, bbox.lat]; + } + return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2]; + } + /** + * Conversion from degrees to radians. + * + * @private + * @param {number} deg the angle in degrees. + * @return {number} the angle in radians. + */ + function degToRad(deg) { + return (deg * (Math.PI / 180.0)); + } + + /** + * Conversion from radians to degrees. + * + * @private + * @param {number} rad the angle in radians. + * @return {number} the angle in degrees. + */ + function radToDeg(rad) { + return (180.0 * (rad / Math.PI)); + } + + /** + * Converts a set of Longitude and Latitude co-ordinates to UTM + * using the WGS84 ellipsoid. + * + * @private + * @param {object} ll Object literal with lat and lon properties + * representing the WGS84 coordinate to be converted. + * @return {object} Object literal containing the UTM value with easting, + * northing, zoneNumber and zoneLetter properties, and an optional + * accuracy property in digits. Returns null if the conversion failed. + */ + function LLtoUTM(ll) { + var Lat = ll.lat; + var Long = ll.lon; + var a = 6378137.0; //ellip.radius; + var eccSquared = 0.00669438; //ellip.eccsq; + var k0 = 0.9996; + var LongOrigin; + var eccPrimeSquared; + var N, T, C, A, M; + var LatRad = degToRad(Lat); + var LongRad = degToRad(Long); + var LongOriginRad; + var ZoneNumber; + // (int) + ZoneNumber = Math.floor((Long + 180) / 6) + 1; + + //Make sure the longitude 180.00 is in Zone 60 + if (Long === 180) { + ZoneNumber = 60; + } + + // Special zone for Norway + if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { + ZoneNumber = 32; + } + + // Special zones for Svalbard + if (Lat >= 72.0 && Lat < 84.0) { + if (Long >= 0.0 && Long < 9.0) { + ZoneNumber = 31; + } + else if (Long >= 9.0 && Long < 21.0) { + ZoneNumber = 33; + } + else if (Long >= 21.0 && Long < 33.0) { + ZoneNumber = 35; + } + else if (Long >= 33.0 && Long < 42.0) { + ZoneNumber = 37; + } + } + + LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin + // in middle of + // zone + LongOriginRad = degToRad(LongOrigin); + + eccPrimeSquared = (eccSquared) / (1 - eccSquared); + + N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad)); + T = Math.tan(LatRad) * Math.tan(LatRad); + C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad); + A = Math.cos(LatRad) * (LongRad - LongOriginRad); + + 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)); + + 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); + + 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))); + if (Lat < 0.0) { + UTMNorthing += 10000000.0; //10000000 meter offset for + // southern hemisphere + } + + return { + northing: Math.round(UTMNorthing), + easting: Math.round(UTMEasting), + zoneNumber: ZoneNumber, + zoneLetter: getLetterDesignator(Lat) + }; + } + + /** + * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience + * class where the Zone can be specified as a single string eg."60N" which + * is then broken down into the ZoneNumber and ZoneLetter. + * + * @private + * @param {object} utm An object literal with northing, easting, zoneNumber + * and zoneLetter properties. If an optional accuracy property is + * provided (in meters), a bounding box will be returned instead of + * latitude and longitude. + * @return {object} An object literal containing either lat and lon values + * (if no accuracy was provided), or top, right, bottom and left values + * for the bounding box calculated according to the provided accuracy. + * Returns null if the conversion failed. + */ + function UTMtoLL(utm) { + + var UTMNorthing = utm.northing; + var UTMEasting = utm.easting; + var zoneLetter = utm.zoneLetter; + var zoneNumber = utm.zoneNumber; + // check the ZoneNummber is valid + if (zoneNumber < 0 || zoneNumber > 60) { + return null; + } + + var k0 = 0.9996; + var a = 6378137.0; //ellip.radius; + var eccSquared = 0.00669438; //ellip.eccsq; + var eccPrimeSquared; + var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared)); + var N1, T1, C1, R1, D, M; + var LongOrigin; + var mu, phi1Rad; + + // remove 500,000 meter offset for longitude + var x = UTMEasting - 500000.0; + var y = UTMNorthing; + + // We must know somehow if we are in the Northern or Southern + // hemisphere, this is the only time we use the letter So even + // if the Zone letter isn't exactly correct it should indicate + // the hemisphere correctly + if (zoneLetter < 'N') { + y -= 10000000.0; // remove 10,000,000 meter offset used + // for southern hemisphere + } + + // There are 60 zones with zone 1 being at West -180 to -174 + LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin + // in middle of + // zone + + eccPrimeSquared = (eccSquared) / (1 - eccSquared); + + M = y / k0; + mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256)); + + 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); + // double phi1 = ProjMath.radToDeg(phi1Rad); + + N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad)); + T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad); + C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad); + R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5); + D = x / (N1 * k0); + + 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); + lat = radToDeg(lat); + + 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); + lon = LongOrigin + radToDeg(lon); + + var result; + if (utm.accuracy) { + var topRight = UTMtoLL({ + northing: utm.northing + utm.accuracy, + easting: utm.easting + utm.accuracy, + zoneLetter: utm.zoneLetter, + zoneNumber: utm.zoneNumber + }); + result = { + top: topRight.lat, + right: topRight.lon, + bottom: lat, + left: lon + }; + } + else { + result = { + lat: lat, + lon: lon + }; + } + return result; + } + + /** + * Calculates the MGRS letter designator for the given latitude. + * + * @private + * @param {number} lat The latitude in WGS84 to get the letter designator + * for. + * @return {char} The letter designator. + */ + function getLetterDesignator(lat) { + //This is here as an error flag to show that the Latitude is + //outside MGRS limits + var LetterDesignator = 'Z'; + + if ((84 >= lat) && (lat >= 72)) { + LetterDesignator = 'X'; + } + else if ((72 > lat) && (lat >= 64)) { + LetterDesignator = 'W'; + } + else if ((64 > lat) && (lat >= 56)) { + LetterDesignator = 'V'; + } + else if ((56 > lat) && (lat >= 48)) { + LetterDesignator = 'U'; + } + else if ((48 > lat) && (lat >= 40)) { + LetterDesignator = 'T'; + } + else if ((40 > lat) && (lat >= 32)) { + LetterDesignator = 'S'; + } + else if ((32 > lat) && (lat >= 24)) { + LetterDesignator = 'R'; + } + else if ((24 > lat) && (lat >= 16)) { + LetterDesignator = 'Q'; + } + else if ((16 > lat) && (lat >= 8)) { + LetterDesignator = 'P'; + } + else if ((8 > lat) && (lat >= 0)) { + LetterDesignator = 'N'; + } + else if ((0 > lat) && (lat >= -8)) { + LetterDesignator = 'M'; + } + else if ((-8 > lat) && (lat >= -16)) { + LetterDesignator = 'L'; + } + else if ((-16 > lat) && (lat >= -24)) { + LetterDesignator = 'K'; + } + else if ((-24 > lat) && (lat >= -32)) { + LetterDesignator = 'J'; + } + else if ((-32 > lat) && (lat >= -40)) { + LetterDesignator = 'H'; + } + else if ((-40 > lat) && (lat >= -48)) { + LetterDesignator = 'G'; + } + else if ((-48 > lat) && (lat >= -56)) { + LetterDesignator = 'F'; + } + else if ((-56 > lat) && (lat >= -64)) { + LetterDesignator = 'E'; + } + else if ((-64 > lat) && (lat >= -72)) { + LetterDesignator = 'D'; + } + else if ((-72 > lat) && (lat >= -80)) { + LetterDesignator = 'C'; + } + return LetterDesignator; + } + + /** + * Encodes a UTM location as MGRS string. + * + * @private + * @param {object} utm An object literal with easting, northing, + * zoneLetter, zoneNumber + * @param {number} accuracy Accuracy in digits (1-5). + * @return {string} MGRS string for the given UTM location. + */ + function encode(utm, accuracy) { + // prepend with leading zeroes + var seasting = "00000" + utm.easting, + snorthing = "00000" + utm.northing; + + return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy); + } + + /** + * Get the two letter 100k designator for a given UTM easting, + * northing and zone number value. + * + * @private + * @param {number} easting + * @param {number} northing + * @param {number} zoneNumber + * @return the two letter 100k designator for the given UTM location. + */ + function get100kID(easting, northing, zoneNumber) { + var setParm = get100kSetForZone(zoneNumber); + var setColumn = Math.floor(easting / 100000); + var setRow = Math.floor(northing / 100000) % 20; + return getLetter100kID(setColumn, setRow, setParm); + } + + /** + * Given a UTM zone number, figure out the MGRS 100K set it is in. + * + * @private + * @param {number} i An UTM zone number. + * @return {number} the 100k set the UTM zone is in. + */ + function get100kSetForZone(i) { + var setParm = i % NUM_100K_SETS; + if (setParm === 0) { + setParm = NUM_100K_SETS; + } + + return setParm; + } + + /** + * Get the two-letter MGRS 100k designator given information + * translated from the UTM northing, easting and zone number. + * + * @private + * @param {number} column the column index as it relates to the MGRS + * 100k set spreadsheet, created from the UTM easting. + * Values are 1-8. + * @param {number} row the row index as it relates to the MGRS 100k set + * spreadsheet, created from the UTM northing value. Values + * are from 0-19. + * @param {number} parm the set block, as it relates to the MGRS 100k set + * spreadsheet, created from the UTM zone. Values are from + * 1-60. + * @return two letter MGRS 100k code. + */ + function getLetter100kID(column, row, parm) { + // colOrigin and rowOrigin are the letters at the origin of the set + var index = parm - 1; + var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index); + var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index); + + // colInt and rowInt are the letters to build to return + var colInt = colOrigin + column - 1; + var rowInt = rowOrigin + row; + var rollover = false; + + if (colInt > Z) { + colInt = colInt - Z + A - 1; + rollover = true; + } + + if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) { + colInt++; + } + + if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) { + colInt++; + + if (colInt === I) { + colInt++; + } + } + + if (colInt > Z) { + colInt = colInt - Z + A - 1; + } + + if (rowInt > V) { + rowInt = rowInt - V + A - 1; + rollover = true; + } + else { + rollover = false; + } + + if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) { + rowInt++; + } + + if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) { + rowInt++; + + if (rowInt === I) { + rowInt++; + } + } + + if (rowInt > V) { + rowInt = rowInt - V + A - 1; + } + + var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt); + return twoLetter; + } + + /** + * Decode the UTM parameters from a MGRS string. + * + * @private + * @param {string} mgrsString an UPPERCASE coordinate string is expected. + * @return {object} An object literal with easting, northing, zoneLetter, + * zoneNumber and accuracy (in meters) properties. + */ + function decode(mgrsString) { + + if (mgrsString && mgrsString.length === 0) { + throw ("MGRSPoint coverting from nothing"); + } + + var length = mgrsString.length; + + var hunK = null; + var sb = ""; + var testChar; + var i = 0; + + // get Zone number + while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) { + if (i >= 2) { + throw ("MGRSPoint bad conversion from: " + mgrsString); + } + sb += testChar; + i++; + } + + var zoneNumber = parseInt(sb, 10); + + if (i === 0 || i + 3 > length) { + // A good MGRS string has to be 4-5 digits long, + // ##AAA/#AAA at least. + throw ("MGRSPoint bad conversion from: " + mgrsString); + } + + var zoneLetter = mgrsString.charAt(i++); + + // Should we check the zone letter here? Why not. + if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') { + throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString); + } + + hunK = mgrsString.substring(i, i += 2); + + var set = get100kSetForZone(zoneNumber); + + var east100k = getEastingFromChar(hunK.charAt(0), set); + var north100k = getNorthingFromChar(hunK.charAt(1), set); + + // We have a bug where the northing may be 2000000 too low. + // How + // do we know when to roll over? + + while (north100k < getMinNorthing(zoneLetter)) { + north100k += 2000000; + } + + // calculate the char index for easting/northing separator + var remainder = length - i; + + if (remainder % 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" + mgrsString); + } + + var sep = remainder / 2; + + var sepEasting = 0.0; + var sepNorthing = 0.0; + var accuracyBonus, sepEastingString, sepNorthingString, easting, northing; + if (sep > 0) { + accuracyBonus = 100000.0 / Math.pow(10, sep); + sepEastingString = mgrsString.substring(i, i + sep); + sepEasting = parseFloat(sepEastingString) * accuracyBonus; + sepNorthingString = mgrsString.substring(i + sep); + sepNorthing = parseFloat(sepNorthingString) * accuracyBonus; + } + + easting = sepEasting + east100k; + northing = sepNorthing + north100k; + + return { + easting: easting, + northing: northing, + zoneLetter: zoneLetter, + zoneNumber: zoneNumber, + accuracy: accuracyBonus + }; + } + + /** + * Given the first letter from a two-letter MGRS 100k zone, and given the + * MGRS table set for the zone number, figure out the easting value that + * should be added to the other, secondary easting value. + * + * @private + * @param {char} e The first letter from a two-letter MGRS 100´k zone. + * @param {number} set The MGRS table set for the zone number. + * @return {number} The easting value for the given letter and set. + */ + function getEastingFromChar(e, set) { + // colOrigin is the letter at the origin of the set for the + // column + var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1); + var eastingValue = 100000.0; + var rewindMarker = false; + + while (curCol !== e.charCodeAt(0)) { + curCol++; + if (curCol === I) { + curCol++; + } + if (curCol === O) { + curCol++; + } + if (curCol > Z) { + if (rewindMarker) { + throw ("Bad character: " + e); + } + curCol = A; + rewindMarker = true; + } + eastingValue += 100000.0; + } + + return eastingValue; + } + + /** + * Given the second letter from a two-letter MGRS 100k zone, and given the + * MGRS table set for the zone number, figure out the northing value that + * should be added to the other, secondary northing value. You have to + * remember that Northings are determined from the equator, and the vertical + * cycle of letters mean a 2000000 additional northing meters. This happens + * approx. every 18 degrees of latitude. This method does *NOT* count any + * additional northings. You have to figure out how many 2000000 meters need + * to be added for the zone letter of the MGRS coordinate. + * + * @private + * @param {char} n Second letter of the MGRS 100k zone + * @param {number} set The MGRS table set number, which is dependent on the + * UTM zone number. + * @return {number} The northing value for the given letter and set. + */ + function getNorthingFromChar(n, set) { + + if (n > 'V') { + throw ("MGRSPoint given invalid Northing " + n); + } + + // rowOrigin is the letter at the origin of the set for the + // column + var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1); + var northingValue = 0.0; + var rewindMarker = false; + + while (curRow !== n.charCodeAt(0)) { + curRow++; + if (curRow === I) { + curRow++; + } + if (curRow === O) { + curRow++; + } + // fixing a bug making whole application hang in this loop + // when 'n' is a wrong character + if (curRow > V) { + if (rewindMarker) { // making sure that this loop ends + throw ("Bad character: " + n); + } + curRow = A; + rewindMarker = true; + } + northingValue += 100000.0; + } + + return northingValue; + } + + /** + * The function getMinNorthing returns the minimum northing value of a MGRS + * zone. + * + * Ported from Geotrans' c Lattitude_Band_Value structure table. + * + * @private + * @param {char} zoneLetter The MGRS zone to get the min northing for. + * @return {number} + */ + function getMinNorthing(zoneLetter) { + var northing; + switch (zoneLetter) { + case 'C': + northing = 1100000.0; + break; + case 'D': + northing = 2000000.0; + break; + case 'E': + northing = 2800000.0; + break; + case 'F': + northing = 3700000.0; + break; + case 'G': + northing = 4600000.0; + break; + case 'H': + northing = 5500000.0; + break; + case 'J': + northing = 6400000.0; + break; + case 'K': + northing = 7300000.0; + break; + case 'L': + northing = 8200000.0; + break; + case 'M': + northing = 9100000.0; + break; + case 'N': + northing = 0.0; + break; + case 'P': + northing = 800000.0; + break; + case 'Q': + northing = 1700000.0; + break; + case 'R': + northing = 2600000.0; + break; + case 'S': + northing = 3500000.0; + break; + case 'T': + northing = 4400000.0; + break; + case 'U': + northing = 5300000.0; + break; + case 'V': + northing = 6200000.0; + break; + case 'W': + northing = 7000000.0; + break; + case 'X': + northing = 7900000.0; + break; + default: + northing = -1.0; + } + if (northing >= 0.0) { + return northing; + } + else { + throw ("Invalid zone letter: " + zoneLetter); + } + + } + + function Point(x, y, z) { + if (!(this instanceof Point)) { + return new Point(x, y, z); + } + if (Array.isArray(x)) { + this.x = x[0]; + this.y = x[1]; + this.z = x[2] || 0.0; + } else if(typeof x === 'object') { + this.x = x.x; + this.y = x.y; + this.z = x.z || 0.0; + } else if (typeof x === 'string' && typeof y === 'undefined') { + var coords = x.split(','); + this.x = parseFloat(coords[0], 10); + this.y = parseFloat(coords[1], 10); + this.z = parseFloat(coords[2], 10) || 0.0; + } else { + this.x = x; + this.y = y; + this.z = z || 0.0; + } + console.warn('proj4.Point will be removed in version 3, use proj4.toPoint'); + } + + Point.fromMGRS = function(mgrsStr) { + return new Point(toPoint$1(mgrsStr)); + }; + Point.prototype.toMGRS = function(accuracy) { + return forward$1([this.x, this.y], accuracy); + }; + + var version = "2.4.3"; + + var C00 = 1; + var C02 = 0.25; + var C04 = 0.046875; + var C06 = 0.01953125; + var C08 = 0.01068115234375; + var C22 = 0.75; + var C44 = 0.46875; + var C46 = 0.01302083333333333333; + var C48 = 0.00712076822916666666; + var C66 = 0.36458333333333333333; + var C68 = 0.00569661458333333333; + var C88 = 0.3076171875; + + var pj_enfn = function(es) { + var en = []; + en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); + en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); + var t = es * es; + en[2] = t * (C44 - es * (C46 + es * C48)); + t *= es; + en[3] = t * (C66 - es * C68); + en[4] = t * es * C88; + return en; + }; + + var pj_mlfn = function(phi, sphi, cphi, en) { + cphi *= sphi; + sphi *= sphi; + return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4])))); + }; + + var MAX_ITER = 20; + + var pj_inv_mlfn = function(arg, es, en) { + var k = 1 / (1 - es); + var phi = arg; + for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */ + var s = Math.sin(phi); + var t = 1 - es * s * s; + //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg; + //phi -= t * (t * Math.sqrt(t)) * k; + t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k; + phi -= t; + if (Math.abs(t) < EPSLN) { + return phi; + } + } + //..reportError("cass:pj_inv_mlfn: Convergence error"); + return phi; + }; + + // Heavily based on this tmerc projection implementation + // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js + + function init$2() { + this.x0 = this.x0 !== undefined ? this.x0 : 0; + this.y0 = this.y0 !== undefined ? this.y0 : 0; + this.long0 = this.long0 !== undefined ? this.long0 : 0; + this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; + + if (this.es) { + this.en = pj_enfn(this.es); + this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en); + } + } + + /** + Transverse Mercator Forward - long/lat to x/y + long/lat in radians + */ + function forward$2(p) { + var lon = p.x; + var lat = p.y; + + var delta_lon = adjust_lon(lon - this.long0); + var con; + var x, y; + var sin_phi = Math.sin(lat); + var cos_phi = Math.cos(lat); + + if (!this.es) { + var b = cos_phi * Math.sin(delta_lon); + + if ((Math.abs(Math.abs(b) - 1)) < EPSLN) { + return (93); + } + else { + x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0; + y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2)); + b = Math.abs(y); + + if (b >= 1) { + if ((b - 1) > EPSLN) { + return (93); + } + else { + y = 0; + } + } + else { + y = Math.acos(y); + } + + if (lat < 0) { + y = -y; + } + + y = this.a * this.k0 * (y - this.lat0) + this.y0; + } + } + else { + var al = cos_phi * delta_lon; + var als = Math.pow(al, 2); + var c = this.ep2 * Math.pow(cos_phi, 2); + var cs = Math.pow(c, 2); + var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0; + var t = Math.pow(tq, 2); + var ts = Math.pow(t, 2); + con = 1 - this.es * Math.pow(sin_phi, 2); + al = al / Math.sqrt(con); + var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en); + + x = this.a * (this.k0 * al * (1 + + als / 6 * (1 - t + c + + als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c + + als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) + + this.x0; + + y = this.a * (this.k0 * (ml - this.ml0 + + sin_phi * delta_lon * al / 2 * (1 + + als / 12 * (5 - t + 9 * c + 4 * cs + + als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c + + als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) + + this.y0; + } + + p.x = x; + p.y = y; + + return p; + } + + /** + Transverse Mercator Inverse - x/y to long/lat + */ + function inverse$2(p) { + var con, phi; + var lat, lon; + var x = (p.x - this.x0) * (1 / this.a); + var y = (p.y - this.y0) * (1 / this.a); + + if (!this.es) { + var f = Math.exp(x / this.k0); + var g = 0.5 * (f - 1 / f); + var temp = this.lat0 + y / this.k0; + var h = Math.cos(temp); + con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2))); + lat = Math.asin(con); + + if (y < 0) { + lat = -lat; + } + + if ((g === 0) && (h === 0)) { + lon = 0; + } + else { + lon = adjust_lon(Math.atan2(g, h) + this.long0); + } + } + else { // ellipsoidal form + con = this.ml0 + y / this.k0; + phi = pj_inv_mlfn(con, this.es, this.en); + + if (Math.abs(phi) < HALF_PI) { + var sin_phi = Math.sin(phi); + var cos_phi = Math.cos(phi); + var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0; + var c = this.ep2 * Math.pow(cos_phi, 2); + var cs = Math.pow(c, 2); + var t = Math.pow(tan_phi, 2); + var ts = Math.pow(t, 2); + con = 1 - this.es * Math.pow(sin_phi, 2); + var d = x * Math.sqrt(con) / this.k0; + var ds = Math.pow(d, 2); + con = con * tan_phi; + + lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 - + ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs - + ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c - + ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t)))); + + lon = adjust_lon(this.long0 + (d * (1 - + ds / 6 * (1 + 2 * t + c - + ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c - + ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi)); + } + else { + lat = HALF_PI * sign(y); + lon = 0; + } + } + + p.x = lon; + p.y = lat; + + return p; + } + + var names$3 = ["Transverse_Mercator", "Transverse Mercator", "tmerc"]; + var tmerc = { + init: init$2, + forward: forward$2, + inverse: inverse$2, + names: names$3 + }; + + var sinh = function(x) { + var r = Math.exp(x); + r = (r - 1 / r) / 2; + return r; + }; + + var hypot = function(x, y) { + x = Math.abs(x); + y = Math.abs(y); + var a = Math.max(x, y); + var b = Math.min(x, y) / (a ? a : 1); + + return a * Math.sqrt(1 + Math.pow(b, 2)); + }; + + var log1py = function(x) { + var y = 1 + x; + var z = y - 1; + + return z === 0 ? x : x * Math.log(y) / z; + }; + + var asinhy = function(x) { + var y = Math.abs(x); + y = log1py(y * (1 + y / (hypot(1, y) + 1))); + + return x < 0 ? -y : y; + }; + + var gatg = function(pp, B) { + var cos_2B = 2 * Math.cos(2 * B); + var i = pp.length - 1; + var h1 = pp[i]; + var h2 = 0; + var h; + + while (--i >= 0) { + h = -h2 + cos_2B * h1 + pp[i]; + h2 = h1; + h1 = h; + } + + return (B + h * Math.sin(2 * B)); + }; + + var clens = function(pp, arg_r) { + var r = 2 * Math.cos(arg_r); + var i = pp.length - 1; + var hr1 = pp[i]; + var hr2 = 0; + var hr; + + while (--i >= 0) { + hr = -hr2 + r * hr1 + pp[i]; + hr2 = hr1; + hr1 = hr; + } + + return Math.sin(arg_r) * hr; + }; + + var cosh = function(x) { + var r = Math.exp(x); + r = (r + 1 / r) / 2; + return r; + }; + + var clens_cmplx = function(pp, arg_r, arg_i) { + var sin_arg_r = Math.sin(arg_r); + var cos_arg_r = Math.cos(arg_r); + var sinh_arg_i = sinh(arg_i); + var cosh_arg_i = cosh(arg_i); + var r = 2 * cos_arg_r * cosh_arg_i; + var i = -2 * sin_arg_r * sinh_arg_i; + var j = pp.length - 1; + var hr = pp[j]; + var hi1 = 0; + var hr1 = 0; + var hi = 0; + var hr2; + var hi2; + + while (--j >= 0) { + hr2 = hr1; + hi2 = hi1; + hr1 = hr; + hi1 = hi; + hr = -hr2 + r * hr1 - i * hi1 + pp[j]; + hi = -hi2 + i * hr1 + r * hi1; + } + + r = sin_arg_r * cosh_arg_i; + i = cos_arg_r * sinh_arg_i; + + return [r * hr - i * hi, r * hi + i * hr]; + }; + + // Heavily based on this etmerc projection implementation + // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js + + function init$3() { + if (this.es === undefined || this.es <= 0) { + throw new Error('incorrect elliptical usage'); + } + + this.x0 = this.x0 !== undefined ? this.x0 : 0; + this.y0 = this.y0 !== undefined ? this.y0 : 0; + this.long0 = this.long0 !== undefined ? this.long0 : 0; + this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; + + this.cgb = []; + this.cbg = []; + this.utg = []; + this.gtu = []; + + var f = this.es / (1 + Math.sqrt(1 - this.es)); + var n = f / (2 - f); + var np = n; + + this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 )))))); + this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725)))))); + + np = np * n; + this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945))))); + this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945))))); + + np = np * n; + this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835)))); + this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835)))); + + np = np * n; + this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175))); + this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175))); + + np = np * n; + this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237)); + this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185)); + + np = np * n; + this.cgb[5] = np * (601676 / 22275); + this.cbg[5] = np * (444337 / 155925); + + np = Math.pow(n, 2); + this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256))); + + this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800)))))); + this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800)))))); + + this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720))))); + this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360))))); + + np = np * n; + this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 )))); + this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440)))); + + np = np * n; + this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600))); + this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600))); + + np = np * n; + this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680)); + this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840)); + + np = np * n; + this.utg[5] = np * (-20648693 / 638668800); + this.gtu[5] = np * (212378941 / 319334400); + + var Z = gatg(this.cbg, this.lat0); + this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z)); + } + + function forward$3(p) { + var Ce = adjust_lon(p.x - this.long0); + var Cn = p.y; + + Cn = gatg(this.cbg, Cn); + var sin_Cn = Math.sin(Cn); + var cos_Cn = Math.cos(Cn); + var sin_Ce = Math.sin(Ce); + var cos_Ce = Math.cos(Ce); + + Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn); + Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce)); + Ce = asinhy(Math.tan(Ce)); + + var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce); + + Cn = Cn + tmp[0]; + Ce = Ce + tmp[1]; + + var x; + var y; + + if (Math.abs(Ce) <= 2.623395162778) { + x = this.a * (this.Qn * Ce) + this.x0; + y = this.a * (this.Qn * Cn + this.Zb) + this.y0; + } + else { + x = Infinity; + y = Infinity; + } + + p.x = x; + p.y = y; + + return p; + } + + function inverse$3(p) { + var Ce = (p.x - this.x0) * (1 / this.a); + var Cn = (p.y - this.y0) * (1 / this.a); + + Cn = (Cn - this.Zb) / this.Qn; + Ce = Ce / this.Qn; + + var lon; + var lat; + + if (Math.abs(Ce) <= 2.623395162778) { + var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce); + + Cn = Cn + tmp[0]; + Ce = Ce + tmp[1]; + Ce = Math.atan(sinh(Ce)); + + var sin_Cn = Math.sin(Cn); + var cos_Cn = Math.cos(Cn); + var sin_Ce = Math.sin(Ce); + var cos_Ce = Math.cos(Ce); + + Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn)); + Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn); + + lon = adjust_lon(Ce + this.long0); + lat = gatg(this.cgb, Cn); + } + else { + lon = Infinity; + lat = Infinity; + } + + p.x = lon; + p.y = lat; + + return p; + } + + var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc"]; + var etmerc = { + init: init$3, + forward: forward$3, + inverse: inverse$3, + names: names$4 + }; + + var adjust_zone = function(zone, lon) { + if (zone === undefined) { + zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1; + + if (zone < 0) { + return 0; + } else if (zone > 60) { + return 60; + } + } + return zone; + }; + + var dependsOn = 'etmerc'; + function init$4() { + var zone = adjust_zone(this.zone, this.long0); + if (zone === undefined) { + throw new Error('unknown utm zone'); + } + this.lat0 = 0; + this.long0 = ((6 * Math.abs(zone)) - 183) * D2R; + this.x0 = 500000; + this.y0 = this.utmSouth ? 10000000 : 0; + this.k0 = 0.9996; + + etmerc.init.apply(this); + this.forward = etmerc.forward; + this.inverse = etmerc.inverse; + } + + var names$5 = ["Universal Transverse Mercator System", "utm"]; + var utm = { + init: init$4, + names: names$5, + dependsOn: dependsOn + }; + + var srat = function(esinp, exp) { + return (Math.pow((1 - esinp) / (1 + esinp), exp)); + }; + + var MAX_ITER$1 = 20; + function init$6() { + var sphi = Math.sin(this.lat0); + var cphi = Math.cos(this.lat0); + cphi *= cphi; + this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi); + this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es)); + this.phic0 = Math.asin(sphi / this.C); + this.ratexp = 0.5 * this.C * this.e; + 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)); + } + + function forward$5(p) { + var lon = p.x; + var lat = p.y; + + 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; + p.x = this.C * lon; + return p; + } + + function inverse$5(p) { + var DEL_TOL = 1e-14; + var lon = p.x / this.C; + var lat = p.y; + var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C); + for (var i = MAX_ITER$1; i > 0; --i) { + lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI; + if (Math.abs(lat - p.y) < DEL_TOL) { + break; + } + p.y = lat; + } + /* convergence failed */ + if (!i) { + return null; + } + p.x = lon; + p.y = lat; + return p; + } + + var names$7 = ["gauss"]; + var gauss = { + init: init$6, + forward: forward$5, + inverse: inverse$5, + names: names$7 + }; + + function init$5() { + gauss.init.apply(this); + if (!this.rc) { + return; + } + this.sinc0 = Math.sin(this.phic0); + this.cosc0 = Math.cos(this.phic0); + this.R2 = 2 * this.rc; + if (!this.title) { + this.title = "Oblique Stereographic Alternative"; + } + } + + function forward$4(p) { + var sinc, cosc, cosl, k; + p.x = adjust_lon(p.x - this.long0); + gauss.forward.apply(this, [p]); + sinc = Math.sin(p.y); + cosc = Math.cos(p.y); + cosl = Math.cos(p.x); + k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl); + p.x = k * cosc * Math.sin(p.x); + p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl); + p.x = this.a * p.x + this.x0; + p.y = this.a * p.y + this.y0; + return p; + } + + function inverse$4(p) { + var sinc, cosc, lon, lat, rho; + p.x = (p.x - this.x0) / this.a; + p.y = (p.y - this.y0) / this.a; + + p.x /= this.k0; + p.y /= this.k0; + if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) { + var c = 2 * Math.atan2(rho, this.R2); + sinc = Math.sin(c); + cosc = Math.cos(c); + lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho); + lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc); + } + else { + lat = this.phic0; + lon = 0; + } + + p.x = lon; + p.y = lat; + gauss.inverse.apply(this, [p]); + p.x = adjust_lon(p.x + this.long0); + return p; + } + + var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative"]; + var sterea = { + init: init$5, + forward: forward$4, + inverse: inverse$4, + names: names$6 + }; + + function ssfn_(phit, sinphi, eccen) { + sinphi *= eccen; + return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen)); + } + + function init$7() { + this.coslat0 = Math.cos(this.lat0); + this.sinlat0 = Math.sin(this.lat0); + if (this.sphere) { + if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { + this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts)); + } + } + else { + if (Math.abs(this.coslat0) <= EPSLN) { + if (this.lat0 > 0) { + //North pole + //trace('stere:north pole'); + this.con = 1; + } + else { + //South pole + //trace('stere:south pole'); + this.con = -1; + } + } + this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e)); + if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { + 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)); + } + this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0); + this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI; + this.cosX0 = Math.cos(this.X0); + this.sinX0 = Math.sin(this.X0); + } + } + + // Stereographic forward equations--mapping lat,long to x,y + function forward$6(p) { + var lon = p.x; + var lat = p.y; + var sinlat = Math.sin(lat); + var coslat = Math.cos(lat); + var A, X, sinX, cosX, ts, rh; + var dlon = adjust_lon(lon - this.long0); + + if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) { + //case of the origine point + //trace('stere:this is the origin point'); + p.x = NaN; + p.y = NaN; + return p; + } + if (this.sphere) { + //trace('stere:sphere case'); + A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon)); + p.x = this.a * A * coslat * Math.sin(dlon) + this.x0; + p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0; + return p; + } + else { + X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI; + cosX = Math.cos(X); + sinX = Math.sin(X); + if (Math.abs(this.coslat0) <= EPSLN) { + ts = tsfnz(this.e, lat * this.con, this.con * sinlat); + rh = 2 * this.a * this.k0 * ts / this.cons; + p.x = this.x0 + rh * Math.sin(lon - this.long0); + p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0); + //trace(p.toString()); + return p; + } + else if (Math.abs(this.sinlat0) < EPSLN) { + //Eq + //trace('stere:equateur'); + A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon)); + p.y = A * sinX; + } + else { + //other case + //trace('stere:normal case'); + A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon))); + p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0; + } + p.x = A * cosX * Math.sin(dlon) + this.x0; + } + //trace(p.toString()); + return p; + } + + //* Stereographic inverse equations--mapping x,y to lat/long + function inverse$6(p) { + p.x -= this.x0; + p.y -= this.y0; + var lon, lat, ts, ce, Chi; + var rh = Math.sqrt(p.x * p.x + p.y * p.y); + if (this.sphere) { + var c = 2 * Math.atan(rh / (0.5 * this.a * this.k0)); + lon = this.long0; + lat = this.lat0; + if (rh <= EPSLN) { + p.x = lon; + p.y = lat; + return p; + } + lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh); + if (Math.abs(this.coslat0) < EPSLN) { + if (this.lat0 > 0) { + lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); + } + else { + lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); + } + } + else { + 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))); + } + p.x = lon; + p.y = lat; + return p; + } + else { + if (Math.abs(this.coslat0) <= EPSLN) { + if (rh <= EPSLN) { + lat = this.lat0; + lon = this.long0; + p.x = lon; + p.y = lat; + //trace(p.toString()); + return p; + } + p.x *= this.con; + p.y *= this.con; + ts = rh * this.cons / (2 * this.a * this.k0); + lat = this.con * phi2z(this.e, ts); + lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y)); + } + else { + ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1)); + lon = this.long0; + if (rh <= EPSLN) { + Chi = this.X0; + } + else { + Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh); + 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))); + } + lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi))); + } + } + p.x = lon; + p.y = lat; + + //trace(p.toString()); + return p; + + } + + var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"]; + var stere = { + init: init$7, + forward: forward$6, + inverse: inverse$6, + names: names$8, + ssfn_: ssfn_ + }; + + /* + references: + Formules et constantes pour le Calcul pour la + projection cylindrique conforme à axe oblique et pour la transformation entre + des systèmes de référence. + http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf + */ + + function init$8() { + var phy0 = this.lat0; + this.lambda0 = this.long0; + var sinPhy0 = Math.sin(phy0); + var semiMajorAxis = this.a; + var invF = this.rf; + var flattening = 1 / invF; + var e2 = 2 * flattening - Math.pow(flattening, 2); + var e = this.e = Math.sqrt(e2); + this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2)); + this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4)); + this.b0 = Math.asin(sinPhy0 / this.alpha); + var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2)); + var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2)); + var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0)); + this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3; + } + + function forward$7(p) { + var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2)); + var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y))); + var S = -this.alpha * (Sa1 + Sa2) + this.K; + + // spheric latitude + var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4); + + // spheric longitude + var I = this.alpha * (p.x - this.lambda0); + + // psoeudo equatorial rotation + var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I))); + + var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I)); + + p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0; + p.x = this.R * rotI + this.x0; + return p; + } + + function inverse$7(p) { + var Y = p.x - this.x0; + var X = p.y - this.y0; + + var rotI = Y / this.R; + var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4); + + var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI)); + var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB))); + + var lambda = this.lambda0 + I / this.alpha; + + var S = 0; + var phy = b; + var prevPhy = -1000; + var iteration = 0; + while (Math.abs(phy - prevPhy) > 0.0000001) { + if (++iteration > 20) { + //...reportError("omercFwdInfinity"); + return; + } + //S = Math.log(Math.tan(Math.PI / 4 + phy / 2)); + 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)); + prevPhy = phy; + phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2; + } + + p.x = lambda; + p.y = phy; + return p; + } + + var names$9 = ["somerc"]; + var somerc = { + init: init$8, + forward: forward$7, + inverse: inverse$7, + names: names$9 + }; + + /* Initialize the Oblique Mercator projection + ------------------------------------------*/ + function init$9() { + this.no_off = this.no_off || false; + this.no_rot = this.no_rot || false; + + if (isNaN(this.k0)) { + this.k0 = 1; + } + var sinlat = Math.sin(this.lat0); + var coslat = Math.cos(this.lat0); + var con = this.e * sinlat; + + this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4)); + this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con); + var t0 = tsfnz(this.e, this.lat0, sinlat); + var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con)); + if (dl * dl < 1) { + dl = 1; + } + var fl; + var gl; + if (!isNaN(this.longc)) { + //Central point and azimuth method + + if (this.lat0 >= 0) { + fl = dl + Math.sqrt(dl * dl - 1); + } + else { + fl = dl - Math.sqrt(dl * dl - 1); + } + this.el = fl * Math.pow(t0, this.bl); + gl = 0.5 * (fl - 1 / fl); + this.gamma0 = Math.asin(Math.sin(this.alpha) / dl); + this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl; + + } + else { + //2 points method + var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1)); + var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2)); + if (this.lat0 >= 0) { + this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); + } + else { + this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); + } + var hl = Math.pow(t1, this.bl); + var ll = Math.pow(t2, this.bl); + fl = this.el / hl; + gl = 0.5 * (fl - 1 / fl); + var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl); + var pl = (ll - hl) / (ll + hl); + var dlon12 = adjust_lon(this.long1 - this.long2); + this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl; + this.long0 = adjust_lon(this.long0); + var dlon10 = adjust_lon(this.long1 - this.long0); + this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl); + this.alpha = Math.asin(dl * Math.sin(this.gamma0)); + } + + if (this.no_off) { + this.uc = 0; + } + else { + if (this.lat0 >= 0) { + this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); + } + else { + this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); + } + } + + } + + /* Oblique Mercator forward equations--mapping lat,long to x,y + ----------------------------------------------------------*/ + function forward$8(p) { + var lon = p.x; + var lat = p.y; + var dlon = adjust_lon(lon - this.long0); + var us, vs; + var con; + if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { + if (lat > 0) { + con = -1; + } + else { + con = 1; + } + vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5)); + us = -1 * con * HALF_PI * this.al / this.bl; + } + else { + var t = tsfnz(this.e, lat, Math.sin(lat)); + var ql = this.el / Math.pow(t, this.bl); + var sl = 0.5 * (ql - 1 / ql); + var tl = 0.5 * (ql + 1 / ql); + var vl = Math.sin(this.bl * (dlon)); + var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl; + if (Math.abs(Math.abs(ul) - 1) <= EPSLN) { + vs = Number.POSITIVE_INFINITY; + } + else { + vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl; + } + if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) { + us = this.al * this.bl * (dlon); + } + else { + us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl; + } + } + + if (this.no_rot) { + p.x = this.x0 + us; + p.y = this.y0 + vs; + } + else { + + us -= this.uc; + p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha); + p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha); + } + return p; + } + + function inverse$8(p) { + var us, vs; + if (this.no_rot) { + vs = p.y - this.y0; + us = p.x - this.x0; + } + else { + vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha); + us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha); + us += this.uc; + } + var qp = Math.exp(-1 * this.bl * vs / this.al); + var sp = 0.5 * (qp - 1 / qp); + var tp = 0.5 * (qp + 1 / qp); + var vp = Math.sin(this.bl * us / this.al); + var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp; + var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl); + if (Math.abs(up - 1) < EPSLN) { + p.x = this.long0; + p.y = HALF_PI; + } + else if (Math.abs(up + 1) < EPSLN) { + p.x = this.long0; + p.y = -1 * HALF_PI; + } + else { + p.y = phi2z(this.e, ts); + 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); + } + return p; + } + + var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"]; + var omerc = { + init: init$9, + forward: forward$8, + inverse: inverse$8, + names: names$10 + }; + + function init$10() { + + // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north + //double c_lat; /* center latitude */ + //double c_lon; /* center longitude */ + //double lat1; /* first standard parallel */ + //double lat2; /* second standard parallel */ + //double r_maj; /* major axis */ + //double r_min; /* minor axis */ + //double false_east; /* x offset in meters */ + //double false_north; /* y offset in meters */ + + if (!this.lat2) { + this.lat2 = this.lat1; + } //if lat2 is not defined + if (!this.k0) { + this.k0 = 1; + } + this.x0 = this.x0 || 0; + this.y0 = this.y0 || 0; + // Standard Parallels cannot be equal and on opposite sides of the equator + if (Math.abs(this.lat1 + this.lat2) < EPSLN) { + return; + } + + var temp = this.b / this.a; + this.e = Math.sqrt(1 - temp * temp); + + var sin1 = Math.sin(this.lat1); + var cos1 = Math.cos(this.lat1); + var ms1 = msfnz(this.e, sin1, cos1); + var ts1 = tsfnz(this.e, this.lat1, sin1); + + var sin2 = Math.sin(this.lat2); + var cos2 = Math.cos(this.lat2); + var ms2 = msfnz(this.e, sin2, cos2); + var ts2 = tsfnz(this.e, this.lat2, sin2); + + var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0)); + + if (Math.abs(this.lat1 - this.lat2) > EPSLN) { + this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2); + } + else { + this.ns = sin1; + } + if (isNaN(this.ns)) { + this.ns = sin1; + } + this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns)); + this.rh = this.a * this.f0 * Math.pow(ts0, this.ns); + if (!this.title) { + this.title = "Lambert Conformal Conic"; + } + } + + // Lambert Conformal conic forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + function forward$9(p) { + + var lon = p.x; + var lat = p.y; + + // singular cases : + if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) { + lat = sign(lat) * (HALF_PI - 2 * EPSLN); + } + + var con = Math.abs(Math.abs(lat) - HALF_PI); + var ts, rh1; + if (con > EPSLN) { + ts = tsfnz(this.e, lat, Math.sin(lat)); + rh1 = this.a * this.f0 * Math.pow(ts, this.ns); + } + else { + con = lat * this.ns; + if (con <= 0) { + return null; + } + rh1 = 0; + } + var theta = this.ns * adjust_lon(lon - this.long0); + p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0; + p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0; + + return p; + } + + // Lambert Conformal Conic inverse equations--mapping x,y to lat/long + // ----------------------------------------------------------------- + function inverse$9(p) { + + var rh1, con, ts; + var lat, lon; + var x = (p.x - this.x0) / this.k0; + var y = (this.rh - (p.y - this.y0) / this.k0); + if (this.ns > 0) { + rh1 = Math.sqrt(x * x + y * y); + con = 1; + } + else { + rh1 = -Math.sqrt(x * x + y * y); + con = -1; + } + var theta = 0; + if (rh1 !== 0) { + theta = Math.atan2((con * x), (con * y)); + } + if ((rh1 !== 0) || (this.ns > 0)) { + con = 1 / this.ns; + ts = Math.pow((rh1 / (this.a * this.f0)), con); + lat = phi2z(this.e, ts); + if (lat === -9999) { + return null; + } + } + else { + lat = -HALF_PI; + } + lon = adjust_lon(theta / this.ns + this.long0); + + p.x = lon; + p.y = lat; + return p; + } + + var names$11 = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"]; + var lcc = { + init: init$10, + forward: forward$9, + inverse: inverse$9, + names: names$11 + }; + + function init$11() { + this.a = 6377397.155; + this.es = 0.006674372230614; + this.e = Math.sqrt(this.es); + if (!this.lat0) { + this.lat0 = 0.863937979737193; + } + if (!this.long0) { + this.long0 = 0.7417649320975901 - 0.308341501185665; + } + /* if scale not set default to 0.9999 */ + if (!this.k0) { + this.k0 = 0.9999; + } + this.s45 = 0.785398163397448; /* 45 */ + 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; + } + + /* ellipsoid */ + /* calculate xy from lat/lon */ + /* Constants, identical to inverse transform function */ + function forward$10(p) { + var gfi, u, deltav, s, d, eps, ro; + var lon = p.x; + var lat = p.y; + var delta_lon = adjust_lon(lon - this.long0); + /* Transformation */ + gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2)); + u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45); + deltav = -delta_lon * this.alfa; + s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav)); + d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s)); + eps = this.n * d; + ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n); + p.y = ro * Math.cos(eps) / 1; + p.x = ro * Math.sin(eps) / 1; + + if (!this.czech) { + p.y *= -1; + p.x *= -1; + } + return (p); + } + + /* calculate lat/lon from xy */ + function inverse$10(p) { + var u, deltav, s, d, eps, ro, fi1; + var ok; + + /* Transformation */ + /* revert y, x*/ + var tmp = p.x; + p.x = p.y; + p.y = tmp; + if (!this.czech) { + p.y *= -1; + p.x *= -1; + } + ro = Math.sqrt(p.x * p.x + p.y * p.y); + eps = Math.atan2(p.y, p.x); + d = eps / Math.sin(this.s0); + s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45); + u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d)); + deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u)); + p.x = this.long0 - deltav / this.alfa; + fi1 = u; + ok = 0; + var iter = 0; + do { + 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); + if (Math.abs(fi1 - p.y) < 0.0000000001) { + ok = 1; + } + fi1 = p.y; + iter += 1; + } while (ok === 0 && iter < 15); + if (iter >= 15) { + return null; + } + + return (p); + } + + var names$12 = ["Krovak", "krovak"]; + var krovak = { + init: init$11, + forward: forward$10, + inverse: inverse$10, + names: names$12 + }; + + var mlfn = function(e0, e1, e2, e3, phi) { + return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi)); + }; + + var e0fn = function(x) { + return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x))); + }; + + var e1fn = function(x) { + return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x))); + }; + + var e2fn = function(x) { + return (0.05859375 * x * x * (1 + 0.75 * x)); + }; + + var e3fn = function(x) { + return (x * x * x * (35 / 3072)); + }; + + var gN = function(a, e, sinphi) { + var temp = e * sinphi; + return a / Math.sqrt(1 - temp * temp); + }; + + var adjust_lat = function(x) { + return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI)); + }; + + var imlfn = function(ml, e0, e1, e2, e3) { + var phi; + var dphi; + + phi = ml / e0; + for (var i = 0; i < 15; i++) { + 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)); + phi += dphi; + if (Math.abs(dphi) <= 0.0000000001) { + return phi; + } + } + + //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations"); + return NaN; + }; + + function init$12() { + if (!this.sphere) { + this.e0 = e0fn(this.es); + this.e1 = e1fn(this.es); + this.e2 = e2fn(this.es); + this.e3 = e3fn(this.es); + this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); + } + } + + /* Cassini forward equations--mapping lat,long to x,y + -----------------------------------------------------------------------*/ + function forward$11(p) { + + /* Forward equations + -----------------*/ + var x, y; + var lam = p.x; + var phi = p.y; + lam = adjust_lon(lam - this.long0); + + if (this.sphere) { + x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam)); + y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0); + } + else { + //ellipsoid + var sinphi = Math.sin(phi); + var cosphi = Math.cos(phi); + var nl = gN(this.a, this.e, sinphi); + var tl = Math.tan(phi) * Math.tan(phi); + var al = lam * Math.cos(phi); + var asq = al * al; + var cl = this.es * cosphi * cosphi / (1 - this.es); + var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); + + x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120)); + y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24); + + + } + + p.x = x + this.x0; + p.y = y + this.y0; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$11(p) { + p.x -= this.x0; + p.y -= this.y0; + var x = p.x / this.a; + var y = p.y / this.a; + var phi, lam; + + if (this.sphere) { + var dd = y + this.lat0; + phi = Math.asin(Math.sin(dd) * Math.cos(x)); + lam = Math.atan2(Math.tan(x), Math.cos(dd)); + } + else { + /* ellipsoid */ + var ml1 = this.ml0 / this.a + y; + var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3); + if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) { + p.x = this.long0; + p.y = HALF_PI; + if (y < 0) { + p.y *= -1; + } + return p; + } + var nl1 = gN(this.a, this.e, Math.sin(phi1)); + + var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es); + var tl1 = Math.pow(Math.tan(phi1), 2); + var dl = x * this.a / nl1; + var dsq = dl * dl; + phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24); + lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1); + + } + + p.x = adjust_lon(lam + this.long0); + p.y = adjust_lat(phi); + return p; + + } + + var names$13 = ["Cassini", "Cassini_Soldner", "cass"]; + var cass = { + init: init$12, + forward: forward$11, + inverse: inverse$11, + names: names$13 + }; + + var qsfnz = function(eccent, sinphi) { + var con; + if (eccent > 1.0e-7) { + con = eccent * sinphi; + return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con)))); + } + else { + return (2 * sinphi); + } + }; + + /* + reference + "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. + */ + + var S_POLE = 1; + + var N_POLE = 2; + var EQUIT = 3; + var OBLIQ = 4; + + /* Initialize the Lambert Azimuthal Equal Area projection + ------------------------------------------------------*/ + function init$13() { + var t = Math.abs(this.lat0); + if (Math.abs(t - HALF_PI) < EPSLN) { + this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE; + } + else if (Math.abs(t) < EPSLN) { + this.mode = this.EQUIT; + } + else { + this.mode = this.OBLIQ; + } + if (this.es > 0) { + var sinphi; + + this.qp = qsfnz(this.e, 1); + this.mmf = 0.5 / (1 - this.es); + this.apa = authset(this.es); + switch (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(0.5 * this.qp); + this.dd = 1 / this.rq; + this.xmf = 1; + this.ymf = 0.5 * this.qp; + break; + case this.OBLIQ: + this.rq = Math.sqrt(0.5 * this.qp); + sinphi = Math.sin(this.lat0); + this.sinb1 = qsfnz(this.e, sinphi) / this.qp; + this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1); + this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1); + this.ymf = (this.xmf = this.rq) / this.dd; + this.xmf *= this.dd; + break; + } + } + else { + if (this.mode === this.OBLIQ) { + this.sinph0 = Math.sin(this.lat0); + this.cosph0 = Math.cos(this.lat0); + } + } + } + + /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y + -----------------------------------------------------------------------*/ + function forward$12(p) { + + /* Forward equations + -----------------*/ + var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi; + var lam = p.x; + var phi = p.y; + + lam = adjust_lon(lam - this.long0); + if (this.sphere) { + sinphi = Math.sin(phi); + cosphi = Math.cos(phi); + coslam = Math.cos(lam); + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; + if (y <= EPSLN) { + return null; + } + y = Math.sqrt(2 / y); + x = y * cosphi * Math.sin(lam); + y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; + } + else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { + if (this.mode === this.N_POLE) { + coslam = -coslam; + } + if (Math.abs(phi + this.phi0) < EPSLN) { + return null; + } + y = FORTPI - phi * 0.5; + y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y)); + x = y * Math.sin(lam); + y *= coslam; + } + } + else { + sinb = 0; + cosb = 0; + b = 0; + coslam = Math.cos(lam); + sinlam = Math.sin(lam); + sinphi = Math.sin(phi); + q = qsfnz(this.e, sinphi); + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + sinb = q / this.qp; + cosb = Math.sqrt(1 - sinb * sinb); + } + switch (this.mode) { + case this.OBLIQ: + b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam; + break; + case this.EQUIT: + b = 1 + cosb * coslam; + break; + case this.N_POLE: + b = HALF_PI + phi; + q = this.qp - q; + break; + case this.S_POLE: + b = phi - HALF_PI; + q = this.qp + q; + break; + } + if (Math.abs(b) < EPSLN) { + return null; + } + switch (this.mode) { + case this.OBLIQ: + case this.EQUIT: + b = Math.sqrt(2 / b); + if (this.mode === this.OBLIQ) { + y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam); + } + else { + y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf; + } + x = this.xmf * b * cosb * sinlam; + break; + case this.N_POLE: + case this.S_POLE: + if (q >= 0) { + x = (b = Math.sqrt(q)) * sinlam; + y = coslam * ((this.mode === this.S_POLE) ? b : -b); + } + else { + x = y = 0; + } + break; + } + } + + p.x = this.a * x + this.x0; + p.y = this.a * y + this.y0; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$12(p) { + p.x -= this.x0; + p.y -= this.y0; + var x = p.x / this.a; + var y = p.y / this.a; + var lam, phi, cCe, sCe, q, rho, ab; + if (this.sphere) { + var cosz = 0, + rh, sinz = 0; + + rh = Math.sqrt(x * x + y * y); + phi = rh * 0.5; + if (phi > 1) { + return null; + } + phi = 2 * Math.asin(phi); + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + sinz = Math.sin(phi); + cosz = Math.cos(phi); + } + switch (this.mode) { + case this.EQUIT: + phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh); + x *= sinz; + y = cosz * rh; + break; + case this.OBLIQ: + phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh); + x *= sinz * this.cosph0; + y = (cosz - Math.sin(phi) * this.sinph0) * rh; + break; + case this.N_POLE: + y = -y; + phi = HALF_PI - phi; + break; + case this.S_POLE: + phi -= HALF_PI; + break; + } + lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y); + } + else { + ab = 0; + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + x /= this.dd; + y *= this.dd; + rho = Math.sqrt(x * x + y * y); + if (rho < EPSLN) { + p.x = 0; + p.y = this.phi0; + return p; + } + sCe = 2 * Math.asin(0.5 * rho / this.rq); + cCe = Math.cos(sCe); + x *= (sCe = Math.sin(sCe)); + if (this.mode === this.OBLIQ) { + ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho; + q = this.qp * ab; + y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe; + } + else { + ab = y * sCe / rho; + q = this.qp * ab; + y = rho * cCe; + } + } + else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { + if (this.mode === this.N_POLE) { + y = -y; + } + q = (x * x + y * y); + if (!q) { + p.x = 0; + p.y = this.phi0; + return p; + } + ab = 1 - q / this.qp; + if (this.mode === this.S_POLE) { + ab = -ab; + } + } + lam = Math.atan2(x, y); + phi = authlat(Math.asin(ab), this.apa); + } + + p.x = adjust_lon(this.long0 + lam); + p.y = phi; + return p; + } + + /* determine latitude from authalic latitude */ + var P00 = 0.33333333333333333333; + + var P01 = 0.17222222222222222222; + var P02 = 0.10257936507936507936; + var P10 = 0.06388888888888888888; + var P11 = 0.06640211640211640211; + var P20 = 0.01641501294219154443; + + function authset(es) { + var t; + var APA = []; + APA[0] = es * P00; + t = es * es; + APA[0] += t * P01; + APA[1] = t * P10; + t *= es; + APA[0] += t * P02; + APA[1] += t * P11; + APA[2] = t * P20; + return APA; + } + + function authlat(beta, APA) { + var t = beta + beta; + return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t)); + } + + var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"]; + var laea = { + init: init$13, + forward: forward$12, + inverse: inverse$12, + names: names$14, + S_POLE: S_POLE, + N_POLE: N_POLE, + EQUIT: EQUIT, + OBLIQ: OBLIQ + }; + + var asinz = function(x) { + if (Math.abs(x) > 1) { + x = (x > 1) ? 1 : -1; + } + return Math.asin(x); + }; + + function init$14() { + + if (Math.abs(this.lat1 + this.lat2) < EPSLN) { + return; + } + 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 = msfnz(this.e3, this.sin_po, this.cos_po); + this.qs1 = qsfnz(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 = msfnz(this.e3, this.sin_po, this.cos_po); + this.qs2 = qsfnz(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 = qsfnz(this.e3, this.sin_po, this.cos_po); + + if (Math.abs(this.lat1 - this.lat2) > EPSLN) { + this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1); + } + else { + 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; + } + + /* Albers Conical Equal Area forward equations--mapping lat,long to x,y + -------------------------------------------------------------------*/ + function forward$13(p) { + + var lon = p.x; + var lat = p.y; + + this.sin_phi = Math.sin(lat); + this.cos_phi = Math.cos(lat); + + var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi); + var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0; + var theta = this.ns0 * adjust_lon(lon - this.long0); + var x = rh1 * Math.sin(theta) + this.x0; + var y = this.rh - rh1 * Math.cos(theta) + this.y0; + + p.x = x; + p.y = y; + return p; + } + + function inverse$13(p) { + var rh1, qs, con, theta, lon, lat; + + p.x -= this.x0; + p.y = this.rh - p.y + this.y0; + if (this.ns0 >= 0) { + rh1 = Math.sqrt(p.x * p.x + p.y * p.y); + con = 1; + } + else { + rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); + con = -1; + } + theta = 0; + if (rh1 !== 0) { + theta = Math.atan2(con * p.x, con * p.y); + } + con = rh1 * this.ns0 / this.a; + if (this.sphere) { + lat = Math.asin((this.c - con * con) / (2 * this.ns0)); + } + else { + qs = (this.c - con * con) / this.ns0; + lat = this.phi1z(this.e3, qs); + } + + lon = adjust_lon(theta / this.ns0 + this.long0); + p.x = lon; + p.y = lat; + return p; + } + + /* Function to compute phi1, the latitude for the inverse of the + Albers Conical Equal-Area projection. + -------------------------------------------*/ + function phi1z(eccent, qs) { + var sinphi, cosphi, con, com, dphi; + var phi = asinz(0.5 * qs); + if (eccent < EPSLN) { + return phi; + } + + var eccnts = eccent * eccent; + for (var i = 1; i <= 25; i++) { + sinphi = Math.sin(phi); + cosphi = Math.cos(phi); + con = eccent * sinphi; + com = 1 - con * con; + dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con))); + phi = phi + dphi; + if (Math.abs(dphi) <= 1e-7) { + return phi; + } + } + return null; + } + + var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"]; + var aea = { + init: init$14, + forward: forward$13, + inverse: inverse$13, + names: names$15, + phi1z: phi1z + }; + + /* + reference: + Wolfram Mathworld "Gnomonic Projection" + http://mathworld.wolfram.com/GnomonicProjection.html + Accessed: 12th November 2009 + */ + function init$15() { + + /* Place parameters in static storage for common use + -------------------------------------------------*/ + this.sin_p14 = Math.sin(this.lat0); + this.cos_p14 = Math.cos(this.lat0); + // Approximation for projecting points to the horizon (infinity) + this.infinity_dist = 1000 * this.a; + this.rc = 1; + } + + /* Gnomonic forward equations--mapping lat,long to x,y + ---------------------------------------------------*/ + function forward$14(p) { + var sinphi, cosphi; /* sin and cos value */ + var dlon; /* delta longitude value */ + var coslon; /* cos of longitude */ + var ksp; /* scale factor */ + var g; + var x, y; + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + dlon = adjust_lon(lon - this.long0); + + sinphi = Math.sin(lat); + cosphi = Math.cos(lat); + + coslon = Math.cos(dlon); + g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; + ksp = 1; + if ((g > 0) || (Math.abs(g) <= EPSLN)) { + x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g; + y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g; + } + else { + + // Point is in the opposing hemisphere and is unprojectable + // We still need to return a reasonable point, so we project + // to infinity, on a bearing + // equivalent to the northern hemisphere equivalent + // This is a reasonable approximation for short shapes and lines that + // straddle the horizon. + + x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon); + y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); + + } + p.x = x; + p.y = y; + return p; + } + + function inverse$14(p) { + var rh; /* Rho */ + var sinc, cosc; + var c; + var lon, lat; + + /* Inverse equations + -----------------*/ + p.x = (p.x - this.x0) / this.a; + p.y = (p.y - this.y0) / this.a; + + p.x /= this.k0; + p.y /= this.k0; + + if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) { + c = Math.atan2(rh, this.rc); + sinc = Math.sin(c); + cosc = Math.cos(c); + + lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh); + lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc); + lon = adjust_lon(this.long0 + lon); + } + else { + lat = this.phic0; + lon = 0; + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$16 = ["gnom"]; + var gnom = { + init: init$15, + forward: forward$14, + inverse: inverse$14, + names: names$16 + }; + + var iqsfnz = function(eccent, q) { + var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent)); + if (Math.abs(Math.abs(q) - temp) < 1.0E-6) { + if (q < 0) { + return (-1 * HALF_PI); + } + else { + return HALF_PI; + } + } + //var phi = 0.5* q/(1-eccent*eccent); + var phi = Math.asin(0.5 * q); + var dphi; + var sin_phi; + var cos_phi; + var con; + for (var i = 0; i < 30; i++) { + sin_phi = Math.sin(phi); + cos_phi = Math.cos(phi); + con = eccent * sin_phi; + 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))); + phi += dphi; + if (Math.abs(dphi) <= 0.0000000001) { + return phi; + } + } + + //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations"); + return NaN; + }; + + /* + reference: + "Cartographic Projection Procedures for the UNIX Environment- + A User's Manual" by Gerald I. Evenden, + USGS Open File Report 90-284and Release 4 Interim Reports (2003) + */ + function init$16() { + //no-op + if (!this.sphere) { + this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); + } + } + + /* Cylindrical Equal Area forward equations--mapping lat,long to x,y + ------------------------------------------------------------*/ + function forward$15(p) { + var lon = p.x; + var lat = p.y; + var x, y; + /* Forward equations + -----------------*/ + var dlon = adjust_lon(lon - this.long0); + if (this.sphere) { + x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); + y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); + } + else { + var qs = qsfnz(this.e, Math.sin(lat)); + x = this.x0 + this.a * this.k0 * dlon; + y = this.y0 + this.a * qs * 0.5 / this.k0; + } + + p.x = x; + p.y = y; + return p; + } + + /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long + ------------------------------------------------------------*/ + function inverse$15(p) { + p.x -= this.x0; + p.y -= this.y0; + var lon, lat; + + if (this.sphere) { + lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts)); + lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts)); + } + else { + lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a); + lon = adjust_lon(this.long0 + p.x / (this.a * this.k0)); + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$17 = ["cea"]; + var cea = { + init: init$16, + forward: forward$15, + inverse: inverse$15, + names: names$17 + }; + + function init$17() { + + 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); + } + + // forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + function forward$16(p) { + + var lon = p.x; + var lat = p.y; + + var dlon = adjust_lon(lon - this.long0); + var dlat = adjust_lat(lat - this.lat0); + p.x = this.x0 + (this.a * dlon * this.rc); + p.y = this.y0 + (this.a * dlat); + return p; + } + + // inverse equations--mapping x,y to lat/long + // ----------------------------------------------------------------- + function inverse$16(p) { + + var x = p.x; + var y = p.y; + + p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc))); + p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a))); + return p; + } + + var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"]; + var eqc = { + init: init$17, + forward: forward$16, + inverse: inverse$16, + names: names$18 + }; + + var MAX_ITER$2 = 20; + + function init$18() { + /* Place parameters in static storage for common use + -------------------------------------------------*/ + this.temp = this.b / this.a; + 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 + this.e = Math.sqrt(this.es); + this.e0 = e0fn(this.es); + this.e1 = e1fn(this.es); + this.e2 = e2fn(this.es); + this.e3 = e3fn(this.es); + 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 + } + + /* Polyconic forward equations--mapping lat,long to x,y + ---------------------------------------------------*/ + function forward$17(p) { + var lon = p.x; + var lat = p.y; + var x, y, el; + var dlon = adjust_lon(lon - this.long0); + el = dlon * Math.sin(lat); + if (this.sphere) { + if (Math.abs(lat) <= EPSLN) { + x = this.a * dlon; + y = -1 * this.a * this.lat0; + } + else { + x = this.a * Math.sin(el) / Math.tan(lat); + y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat)); + } + } + else { + if (Math.abs(lat) <= EPSLN) { + x = this.a * dlon; + y = -1 * this.ml0; + } + else { + var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat); + x = nl * Math.sin(el); + y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el)); + } + + } + p.x = x + this.x0; + p.y = y + this.y0; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$17(p) { + var lon, lat, x, y, i; + var al, bl; + var phi, dphi; + x = p.x - this.x0; + y = p.y - this.y0; + + if (this.sphere) { + if (Math.abs(y + this.a * this.lat0) <= EPSLN) { + lon = adjust_lon(x / this.a + this.long0); + lat = 0; + } + else { + al = this.lat0 + y / this.a; + bl = x * x / this.a / this.a + al * al; + phi = al; + var tanphi; + for (i = MAX_ITER$2; i; --i) { + tanphi = Math.tan(phi); + dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1); + phi += dphi; + if (Math.abs(dphi) <= EPSLN) { + lat = phi; + break; + } + } + lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat)); + } + } + else { + if (Math.abs(y + this.ml0) <= EPSLN) { + lat = 0; + lon = adjust_lon(this.long0 + x / this.a); + } + else { + + al = (this.ml0 + y) / this.a; + bl = x * x / this.a / this.a + al * al; + phi = al; + var cl, mln, mlnp, ma; + var con; + for (i = MAX_ITER$2; i; --i) { + con = this.e * Math.sin(phi); + cl = Math.sqrt(1 - con * con) * Math.tan(phi); + mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); + mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi); + ma = mln / this.a; + 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); + phi -= dphi; + if (Math.abs(dphi) <= EPSLN) { + lat = phi; + break; + } + } + + //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0); + cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat); + lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat)); + } + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$19 = ["Polyconic", "poly"]; + var poly = { + init: init$18, + forward: forward$17, + inverse: inverse$17, + names: names$19 + }; + + /* + reference + Department of Land and Survey Technical Circular 1973/32 + http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf + OSG Technical Report 4.1 + http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf + */ + + /** + * iterations: Number of iterations to refine inverse transform. + * 0 -> km accuracy + * 1 -> m accuracy -- suitable for most mapping applications + * 2 -> mm accuracy + */ + + + function init$19() { + this.A = []; + this.A[1] = 0.6399175073; + this.A[2] = -0.1358797613; + this.A[3] = 0.063294409; + this.A[4] = -0.02526853; + this.A[5] = 0.0117879; + this.A[6] = -0.0055161; + this.A[7] = 0.0026906; + this.A[8] = -0.001333; + this.A[9] = 0.00067; + this.A[10] = -0.00034; + + this.B_re = []; + this.B_im = []; + this.B_re[1] = 0.7557853228; + this.B_im[1] = 0; + this.B_re[2] = 0.249204646; + this.B_im[2] = 0.003371507; + this.B_re[3] = -0.001541739; + this.B_im[3] = 0.041058560; + this.B_re[4] = -0.10162907; + this.B_im[4] = 0.01727609; + this.B_re[5] = -0.26623489; + this.B_im[5] = -0.36249218; + this.B_re[6] = -0.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] = -0.577245789; + this.C_im[2] = -0.007809598; + this.C_re[3] = 0.508307513; + this.C_im[3] = -0.112208952; + this.C_re[4] = -0.15094762; + this.C_im[4] = 0.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] = 0.5185406398; + this.D[3] = -0.03333098; + this.D[4] = -0.1052906; + this.D[5] = -0.0368594; + this.D[6] = 0.007317; + this.D[7] = 0.01220; + this.D[8] = 0.00394; + this.D[9] = -0.0013; + } + + /** + New Zealand Map Grid Forward - long/lat to x/y + long/lat in radians + */ + function forward$18(p) { + var n; + var lon = p.x; + var lat = p.y; + + var delta_lat = lat - this.lat0; + var delta_lon = lon - this.long0; + + // 1. Calculate d_phi and d_psi ... // and d_lambda + // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians. + var d_phi = delta_lat / SEC_TO_RAD * 1E-5; + var d_lambda = delta_lon; + var d_phi_n = 1; // d_phi^0 + + var d_psi = 0; + for (n = 1; n <= 10; n++) { + d_phi_n = d_phi_n * d_phi; + d_psi = d_psi + this.A[n] * d_phi_n; + } + + // 2. Calculate theta + var th_re = d_psi; + var th_im = d_lambda; + + // 3. Calculate z + var th_n_re = 1; + var th_n_im = 0; // theta^0 + var th_n_re1; + var th_n_im1; + + var z_re = 0; + var z_im = 0; + for (n = 1; n <= 6; n++) { + th_n_re1 = th_n_re * th_re - th_n_im * th_im; + th_n_im1 = th_n_im * th_re + th_n_re * th_im; + th_n_re = th_n_re1; + th_n_im = th_n_im1; + z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im; + z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im; + } + + // 4. Calculate easting and northing + p.x = (z_im * this.a) + this.x0; + p.y = (z_re * this.a) + this.y0; + + return p; + } + + /** + New Zealand Map Grid Inverse - x/y to long/lat + */ + function inverse$18(p) { + var n; + var x = p.x; + var y = p.y; + + var delta_x = x - this.x0; + var delta_y = y - this.y0; + + // 1. Calculate z + var z_re = delta_y / this.a; + var z_im = delta_x / this.a; + + // 2a. Calculate theta - first approximation gives km accuracy + var z_n_re = 1; + var z_n_im = 0; // z^0 + var z_n_re1; + var z_n_im1; + + var th_re = 0; + var th_im = 0; + for (n = 1; n <= 6; n++) { + z_n_re1 = z_n_re * z_re - z_n_im * z_im; + z_n_im1 = z_n_im * z_re + z_n_re * z_im; + z_n_re = z_n_re1; + z_n_im = z_n_im1; + th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im; + th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im; + } + + // 2b. Iterate to refine the accuracy of the calculation + // 0 iterations gives km accuracy + // 1 iteration gives m accuracy -- good enough for most mapping applications + // 2 iterations bives mm accuracy + for (var i = 0; i < this.iterations; i++) { + var th_n_re = th_re; + var th_n_im = th_im; + var th_n_re1; + var th_n_im1; + + var num_re = z_re; + var num_im = z_im; + for (n = 2; n <= 6; n++) { + th_n_re1 = th_n_re * th_re - th_n_im * th_im; + th_n_im1 = th_n_im * th_re + th_n_re * th_im; + th_n_re = th_n_re1; + th_n_im = th_n_im1; + num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); + num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); + } + + th_n_re = 1; + th_n_im = 0; + var den_re = this.B_re[1]; + var den_im = this.B_im[1]; + for (n = 2; n <= 6; n++) { + th_n_re1 = th_n_re * th_re - th_n_im * th_im; + th_n_im1 = th_n_im * th_re + th_n_re * th_im; + th_n_re = th_n_re1; + th_n_im = th_n_im1; + den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); + den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); + } + + // Complex division + var den2 = den_re * den_re + den_im * den_im; + th_re = (num_re * den_re + num_im * den_im) / den2; + th_im = (num_im * den_re - num_re * den_im) / den2; + } + + // 3. Calculate d_phi ... // and d_lambda + var d_psi = th_re; + var d_lambda = th_im; + var d_psi_n = 1; // d_psi^0 + + var d_phi = 0; + for (n = 1; n <= 9; n++) { + d_psi_n = d_psi_n * d_psi; + d_phi = d_phi + this.D[n] * d_psi_n; + } + + // 4. Calculate latitude and longitude + // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians. + var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5); + var lon = this.long0 + d_lambda; + + p.x = lon; + p.y = lat; + + return p; + } + + var names$20 = ["New_Zealand_Map_Grid", "nzmg"]; + var nzmg = { + init: init$19, + forward: forward$18, + inverse: inverse$18, + names: names$20 + }; + + /* + reference + "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. + */ + + + /* Initialize the Miller Cylindrical projection + -------------------------------------------*/ + function init$20() { + //no-op + } + + /* Miller Cylindrical forward equations--mapping lat,long to x,y + ------------------------------------------------------------*/ + function forward$19(p) { + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + var dlon = adjust_lon(lon - this.long0); + var x = this.x0 + this.a * dlon; + var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25; + + p.x = x; + p.y = y; + return p; + } + + /* Miller Cylindrical inverse equations--mapping x,y to lat/long + ------------------------------------------------------------*/ + function inverse$19(p) { + p.x -= this.x0; + p.y -= this.y0; + + var lon = adjust_lon(this.long0 + p.x / this.a); + var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4); + + p.x = lon; + p.y = lat; + return p; + } + + var names$21 = ["Miller_Cylindrical", "mill"]; + var mill = { + init: init$20, + forward: forward$19, + inverse: inverse$19, + names: names$21 + }; + + var MAX_ITER$3 = 20; + function init$21() { + /* Place parameters in static storage for common use + -------------------------------------------------*/ + + + if (!this.sphere) { + this.en = pj_enfn(this.es); + } + else { + 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); + } + + } + + /* Sinusoidal forward equations--mapping lat,long to x,y + -----------------------------------------------------*/ + function forward$20(p) { + var x, y; + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + lon = adjust_lon(lon - this.long0); + + if (this.sphere) { + if (!this.m) { + lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat; + } + else { + var k = this.n * Math.sin(lat); + for (var i = MAX_ITER$3; i; --i) { + var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat)); + lat -= V; + if (Math.abs(V) < EPSLN) { + break; + } + } + } + x = this.a * this.C_x * lon * (this.m + Math.cos(lat)); + y = this.a * this.C_y * lat; + + } + else { + + var s = Math.sin(lat); + var c = Math.cos(lat); + y = this.a * pj_mlfn(lat, s, c, this.en); + x = this.a * lon * c / Math.sqrt(1 - this.es * s * s); + } + + p.x = x; + p.y = y; + return p; + } + + function inverse$20(p) { + var lat, temp, lon, s; + + p.x -= this.x0; + lon = p.x / this.a; + p.y -= this.y0; + lat = p.y / this.a; + + if (this.sphere) { + lat /= this.C_y; + lon = lon / (this.C_x * (this.m + Math.cos(lat))); + if (this.m) { + lat = asinz((this.m * lat + Math.sin(lat)) / this.n); + } + else if (this.n !== 1) { + lat = asinz(Math.sin(lat) / this.n); + } + lon = adjust_lon(lon + this.long0); + lat = adjust_lat(lat); + } + else { + lat = pj_inv_mlfn(p.y / this.a, this.es, this.en); + s = Math.abs(lat); + if (s < HALF_PI) { + s = Math.sin(lat); + temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat)); + //temp = this.long0 + p.x / (this.a * Math.cos(lat)); + lon = adjust_lon(temp); + } + else if ((s - EPSLN) < HALF_PI) { + lon = this.long0; + } + } + p.x = lon; + p.y = lat; + return p; + } + + var names$22 = ["Sinusoidal", "sinu"]; + var sinu = { + init: init$21, + forward: forward$20, + inverse: inverse$20, + names: names$22 + }; + + function init$22() {} + /* Mollweide forward equations--mapping lat,long to x,y + ----------------------------------------------------*/ + function forward$21(p) { + + /* Forward equations + -----------------*/ + var lon = p.x; + var lat = p.y; + + var delta_lon = adjust_lon(lon - this.long0); + var theta = lat; + var con = Math.PI * Math.sin(lat); + + /* Iterate using the Newton-Raphson method to find theta + -----------------------------------------------------*/ + for (var i = 0; true; i++) { + var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta)); + theta += delta_theta; + if (Math.abs(delta_theta) < EPSLN) { + break; + } + } + theta /= 2; + + /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting" + this is done here because of precision problems with "cos(theta)" + --------------------------------------------------------------------------*/ + if (Math.PI / 2 - Math.abs(lat) < EPSLN) { + delta_lon = 0; + } + var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0; + var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0; + + p.x = x; + p.y = y; + return p; + } + + function inverse$21(p) { + var theta; + var arg; + + /* Inverse equations + -----------------*/ + p.x -= this.x0; + p.y -= this.y0; + arg = p.y / (1.4142135623731 * this.a); + + /* Because of division by zero problems, 'arg' can not be 1. Therefore + a number very close to one is used instead. + -------------------------------------------------------------------*/ + if (Math.abs(arg) > 0.999999999999) { + arg = 0.999999999999; + } + theta = Math.asin(arg); + var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta)))); + if (lon < (-Math.PI)) { + lon = -Math.PI; + } + if (lon > Math.PI) { + lon = Math.PI; + } + arg = (2 * theta + Math.sin(2 * theta)) / Math.PI; + if (Math.abs(arg) > 1) { + arg = 1; + } + var lat = Math.asin(arg); + + p.x = lon; + p.y = lat; + return p; + } + + var names$23 = ["Mollweide", "moll"]; + var moll = { + init: init$22, + forward: forward$21, + inverse: inverse$21, + names: names$23 + }; + + function init$23() { + + /* Place parameters in static storage for common use + -------------------------------------------------*/ + // Standard Parallels cannot be equal and on opposite sides of the equator + if (Math.abs(this.lat1 + this.lat2) < EPSLN) { + return; + } + 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 = e0fn(this.es); + this.e1 = e1fn(this.es); + this.e2 = e2fn(this.es); + this.e3 = e3fn(this.es); + + this.sinphi = Math.sin(this.lat1); + this.cosphi = Math.cos(this.lat1); + + this.ms1 = msfnz(this.e, this.sinphi, this.cosphi); + this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1); + + if (Math.abs(this.lat1 - this.lat2) < EPSLN) { + this.ns = this.sinphi; + } + else { + this.sinphi = Math.sin(this.lat2); + this.cosphi = Math.cos(this.lat2); + this.ms2 = msfnz(this.e, this.sinphi, this.cosphi); + this.ml2 = mlfn(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 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); + this.rh = this.a * (this.g - this.ml0); + } + + /* Equidistant Conic forward equations--mapping lat,long to x,y + -----------------------------------------------------------*/ + function forward$22(p) { + var lon = p.x; + var lat = p.y; + var rh1; + + /* Forward equations + -----------------*/ + if (this.sphere) { + rh1 = this.a * (this.g - lat); + } + else { + var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat); + rh1 = this.a * (this.g - ml); + } + var theta = this.ns * adjust_lon(lon - this.long0); + var x = this.x0 + rh1 * Math.sin(theta); + var y = this.y0 + this.rh - rh1 * Math.cos(theta); + p.x = x; + p.y = y; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$22(p) { + p.x -= this.x0; + p.y = this.rh - p.y + this.y0; + var con, rh1, lat, lon; + if (this.ns >= 0) { + rh1 = Math.sqrt(p.x * p.x + p.y * p.y); + con = 1; + } + else { + rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); + con = -1; + } + var theta = 0; + if (rh1 !== 0) { + theta = Math.atan2(con * p.x, con * p.y); + } + + if (this.sphere) { + lon = adjust_lon(this.long0 + theta / this.ns); + lat = adjust_lat(this.g - rh1 / this.a); + p.x = lon; + p.y = lat; + return p; + } + else { + var ml = this.g - rh1 / this.a; + lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3); + lon = adjust_lon(this.long0 + theta / this.ns); + p.x = lon; + p.y = lat; + return p; + } + + } + + var names$24 = ["Equidistant_Conic", "eqdc"]; + var eqdc = { + init: init$23, + forward: forward$22, + inverse: inverse$22, + names: names$24 + }; + + /* Initialize the Van Der Grinten projection + ----------------------------------------*/ + function init$24() { + //this.R = 6370997; //Radius of earth + this.R = this.a; + } + + function forward$23(p) { + + var lon = p.x; + var lat = p.y; + + /* Forward equations + -----------------*/ + var dlon = adjust_lon(lon - this.long0); + var x, y; + + if (Math.abs(lat) <= EPSLN) { + x = this.x0 + this.R * dlon; + y = this.y0; + } + var theta = asinz(2 * Math.abs(lat / Math.PI)); + if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) { + x = this.x0; + if (lat >= 0) { + y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta); + } + else { + y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta); + } + // return(OK); + } + var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI)); + var asq = al * al; + var sinth = Math.sin(theta); + var costh = Math.cos(theta); + + var g = costh / (sinth + costh - 1); + var gsq = g * g; + var m = g * (2 / sinth - 1); + var msq = m * m; + var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq); + if (dlon < 0) { + con = -con; + } + x = this.x0 + con; + //con = Math.abs(con / (Math.PI * this.R)); + var q = asq + g; + con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq); + if (lat >= 0) { + //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); + y = this.y0 + con; + } + else { + //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); + y = this.y0 - con; + } + p.x = x; + p.y = y; + return p; + } + + /* Van Der Grinten inverse equations--mapping x,y to lat/long + ---------------------------------------------------------*/ + function inverse$23(p) { + var lon, lat; + var xx, yy, xys, c1, c2, c3; + var a1; + var m1; + var con; + var th1; + var d; + + /* inverse equations + -----------------*/ + p.x -= this.x0; + p.y -= this.y0; + con = Math.PI * this.R; + xx = p.x / con; + yy = p.y / con; + xys = xx * xx + yy * yy; + c1 = -Math.abs(yy) * (1 + xys); + c2 = c1 - 2 * yy * yy + xx * xx; + c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys; + d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27; + a1 = (c1 - c2 * c2 / 3 / c3) / c3; + m1 = 2 * Math.sqrt(-a1 / 3); + con = ((3 * d) / a1) / m1; + if (Math.abs(con) > 1) { + if (con >= 0) { + con = 1; + } + else { + con = -1; + } + } + th1 = Math.acos(con) / 3; + if (p.y >= 0) { + lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; + } + else { + lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; + } + + if (Math.abs(xx) < EPSLN) { + lon = this.long0; + } + else { + lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx); + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"]; + var vandg = { + init: init$24, + forward: forward$23, + inverse: inverse$23, + names: names$25 + }; + + function init$25() { + this.sin_p12 = Math.sin(this.lat0); + this.cos_p12 = Math.cos(this.lat0); + } + + function forward$24(p) { + var lon = p.x; + var lat = p.y; + var sinphi = Math.sin(p.y); + var cosphi = Math.cos(p.y); + var dlon = adjust_lon(lon - this.long0); + 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; + if (this.sphere) { + if (Math.abs(this.sin_p12 - 1) <= EPSLN) { + //North Pole case + p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon); + p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon); + return p; + } + else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { + //South Pole case + p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon); + p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon); + return p; + } + else { + //default case + cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon); + c = Math.acos(cos_c); + kp = c / Math.sin(c); + p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon); + p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon)); + return p; + } + } + else { + e0 = e0fn(this.es); + e1 = e1fn(this.es); + e2 = e2fn(this.es); + e3 = e3fn(this.es); + if (Math.abs(this.sin_p12 - 1) <= EPSLN) { + //North Pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + Ml = this.a * mlfn(e0, e1, e2, e3, lat); + p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon); + p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon); + return p; + } + else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { + //South Pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + Ml = this.a * mlfn(e0, e1, e2, e3, lat); + p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon); + p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon); + return p; + } + else { + //Default case + tanphi = sinphi / cosphi; + Nl1 = gN(this.a, this.e, this.sin_p12); + Nl = gN(this.a, this.e, sinphi); + psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi)); + Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon)); + if (Az === 0) { + s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); + } + else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) { + s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); + } + else { + s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az)); + } + G = this.e * this.sin_p12 / Math.sqrt(1 - this.es); + H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es); + GH = G * H; + Hs = H * H; + s2 = s * s; + s3 = s2 * s; + s4 = s3 * s; + s5 = s4 * s; + 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); + p.x = this.x0 + c * Math.sin(Az); + p.y = this.y0 + c * Math.cos(Az); + return p; + } + } + + + } + + function inverse$24(p) { + p.x -= this.x0; + p.y -= this.y0; + var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F; + if (this.sphere) { + rh = Math.sqrt(p.x * p.x + p.y * p.y); + if (rh > (2 * HALF_PI * this.a)) { + return; + } + z = rh / this.a; + + sinz = Math.sin(z); + cosz = Math.cos(z); + + lon = this.long0; + if (Math.abs(rh) <= EPSLN) { + lat = this.lat0; + } + else { + lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh); + con = Math.abs(this.lat0) - HALF_PI; + if (Math.abs(con) <= EPSLN) { + if (this.lat0 >= 0) { + lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); + } + else { + lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); + } + } + else { + /*con = cosz - this.sin_p12 * Math.sin(lat); + if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) { + //no-op, just keep the lon value as is + } else { + var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh)); + lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh))); + }*/ + lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz)); + } + } + + p.x = lon; + p.y = lat; + return p; + } + else { + e0 = e0fn(this.es); + e1 = e1fn(this.es); + e2 = e2fn(this.es); + e3 = e3fn(this.es); + if (Math.abs(this.sin_p12 - 1) <= EPSLN) { + //North pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + rh = Math.sqrt(p.x * p.x + p.y * p.y); + M = Mlp - rh; + lat = imlfn(M / this.a, e0, e1, e2, e3); + lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); + p.x = lon; + p.y = lat; + return p; + } + else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { + //South pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + rh = Math.sqrt(p.x * p.x + p.y * p.y); + M = rh - Mlp; + + lat = imlfn(M / this.a, e0, e1, e2, e3); + lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); + p.x = lon; + p.y = lat; + return p; + } + else { + //default case + rh = Math.sqrt(p.x * p.x + p.y * p.y); + Az = Math.atan2(p.x, p.y); + N1 = gN(this.a, this.e, this.sin_p12); + cosAz = Math.cos(Az); + tmp = this.e * this.cos_p12 * cosAz; + A = -tmp * tmp / (1 - this.es); + B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es); + D = rh / N1; + Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24; + F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6; + psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz); + lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi))); + lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es)); + p.x = lon; + p.y = lat; + return p; + } + } + + } + + var names$26 = ["Azimuthal_Equidistant", "aeqd"]; + var aeqd = { + init: init$25, + forward: forward$24, + inverse: inverse$24, + names: names$26 + }; + + function init$26() { + //double temp; /* temporary variable */ + + /* Place parameters in static storage for common use + -------------------------------------------------*/ + this.sin_p14 = Math.sin(this.lat0); + this.cos_p14 = Math.cos(this.lat0); + } + + /* Orthographic forward equations--mapping lat,long to x,y + ---------------------------------------------------*/ + function forward$25(p) { + var sinphi, cosphi; /* sin and cos value */ + var dlon; /* delta longitude value */ + var coslon; /* cos of longitude */ + var ksp; /* scale factor */ + var g, x, y; + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + dlon = adjust_lon(lon - this.long0); + + sinphi = Math.sin(lat); + cosphi = Math.cos(lat); + + coslon = Math.cos(dlon); + g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; + ksp = 1; + if ((g > 0) || (Math.abs(g) <= EPSLN)) { + x = this.a * ksp * cosphi * Math.sin(dlon); + y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); + } + p.x = x; + p.y = y; + return p; + } + + function inverse$25(p) { + var rh; /* height above ellipsoid */ + var z; /* angle */ + var sinz, cosz; /* sin of z and cos of z */ + var con; + var lon, lat; + /* Inverse equations + -----------------*/ + p.x -= this.x0; + p.y -= this.y0; + rh = Math.sqrt(p.x * p.x + p.y * p.y); + z = asinz(rh / this.a); + + sinz = Math.sin(z); + cosz = Math.cos(z); + + lon = this.long0; + if (Math.abs(rh) <= EPSLN) { + lat = this.lat0; + p.x = lon; + p.y = lat; + return p; + } + lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh); + con = Math.abs(this.lat0) - HALF_PI; + if (Math.abs(con) <= EPSLN) { + if (this.lat0 >= 0) { + lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); + } + else { + lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); + } + p.x = lon; + p.y = lat; + return p; + } + lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz)); + p.x = lon; + p.y = lat; + return p; + } + + var names$27 = ["ortho"]; + var ortho = { + init: init$26, + forward: forward$25, + inverse: inverse$25, + names: names$27 + }; + + var includedProjections = function(proj4){ + proj4.Proj.projections.add(tmerc); + proj4.Proj.projections.add(etmerc); + proj4.Proj.projections.add(utm); + proj4.Proj.projections.add(sterea); + proj4.Proj.projections.add(stere); + proj4.Proj.projections.add(somerc); + proj4.Proj.projections.add(omerc); + proj4.Proj.projections.add(lcc); + proj4.Proj.projections.add(krovak); + proj4.Proj.projections.add(cass); + proj4.Proj.projections.add(laea); + proj4.Proj.projections.add(aea); + proj4.Proj.projections.add(gnom); + proj4.Proj.projections.add(cea); + proj4.Proj.projections.add(eqc); + proj4.Proj.projections.add(poly); + proj4.Proj.projections.add(nzmg); + proj4.Proj.projections.add(mill); + proj4.Proj.projections.add(sinu); + proj4.Proj.projections.add(moll); + proj4.Proj.projections.add(eqdc); + proj4.Proj.projections.add(vandg); + proj4.Proj.projections.add(aeqd); + proj4.Proj.projections.add(ortho); + }; + + proj4$1.defaultDatum = 'WGS84'; //default datum + proj4$1.Proj = Projection$1; + proj4$1.WGS84 = new proj4$1.Proj('WGS84'); + proj4$1.Point = Point; + proj4$1.toPoint = toPoint; + proj4$1.defs = defs; + proj4$1.transform = transform; + proj4$1.mgrs = mgrs; + proj4$1.version = version; + includedProjections(proj4$1); + + return proj4$1; + +}))); + +},{}],286:[function(require,module,exports){ +exports.publicEncrypt = require('./publicEncrypt') +exports.privateDecrypt = require('./privateDecrypt') + +exports.privateEncrypt = function privateEncrypt (key, buf) { + return exports.publicEncrypt(key, buf, true) +} + +exports.publicDecrypt = function publicDecrypt (key, buf) { + return exports.privateDecrypt(key, buf, true) +} + +},{"./privateDecrypt":288,"./publicEncrypt":289}],287:[function(require,module,exports){ +var createHash = require('create-hash') +var Buffer = require('safe-buffer').Buffer + +module.exports = function (seed, len) { + var t = Buffer.alloc(0) + var i = 0 + var c + while (t.length < len) { + c = i2ops(i++) + t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]) + } + return t.slice(0, len) +} + +function i2ops (c) { + var out = Buffer.allocUnsafe(4) + out.writeUInt32BE(c, 0) + return out +} + +},{"create-hash":188,"safe-buffer":318}],288:[function(require,module,exports){ +var parseKeys = require('parse-asn1') +var mgf = require('./mgf') +var xor = require('./xor') +var BN = require('bn.js') +var crt = require('browserify-rsa') +var createHash = require('create-hash') +var withPublic = require('./withPublic') +var Buffer = require('safe-buffer').Buffer + +module.exports = function privateDecrypt (privateKey, enc, reverse) { + var padding + if (privateKey.padding) { + padding = privateKey.padding + } else if (reverse) { + padding = 1 + } else { + padding = 4 + } + + var key = parseKeys(privateKey) + var k = key.modulus.byteLength() + if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { + throw new Error('decryption error') + } + var msg + if (reverse) { + msg = withPublic(new BN(enc), key) + } else { + msg = crt(enc, key) + } + var zBuffer = Buffer.alloc(k - msg.length) + msg = Buffer.concat([zBuffer, msg], k) + if (padding === 4) { + return oaep(key, msg) + } else if (padding === 1) { + return pkcs1(key, msg, reverse) + } else if (padding === 3) { + return msg + } else { + throw new Error('unknown padding') + } +} + +function oaep (key, msg) { + var k = key.modulus.byteLength() + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() + var hLen = iHash.length + if (msg[0] !== 0) { + throw new Error('decryption error') + } + var maskedSeed = msg.slice(1, hLen + 1) + var maskedDb = msg.slice(hLen + 1) + var seed = xor(maskedSeed, mgf(maskedDb, hLen)) + var db = xor(maskedDb, mgf(seed, k - hLen - 1)) + if (compare(iHash, db.slice(0, hLen))) { + throw new Error('decryption error') + } + var i = hLen + while (db[i] === 0) { + i++ + } + if (db[i++] !== 1) { + throw new Error('decryption error') + } + return db.slice(i) +} + +function pkcs1 (key, msg, reverse) { + var p1 = msg.slice(0, 2) + var i = 2 + var status = 0 + while (msg[i++] !== 0) { + if (i >= msg.length) { + status++ + break + } + } + var ps = msg.slice(2, i - 1) + + if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) { + status++ + } + if (ps.length < 8) { + status++ + } + if (status) { + throw new Error('decryption error') + } + return msg.slice(i) +} +function compare (a, b) { + a = Buffer.from(a) + b = Buffer.from(b) + var dif = 0 + var len = a.length + if (a.length !== b.length) { + dif++ + len = Math.min(a.length, b.length) + } + var i = -1 + while (++i < len) { + dif += (a[i] ^ b[i]) + } + return dif +} + +},{"./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){ +var parseKeys = require('parse-asn1') +var randomBytes = require('randombytes') +var createHash = require('create-hash') +var mgf = require('./mgf') +var xor = require('./xor') +var BN = require('bn.js') +var withPublic = require('./withPublic') +var crt = require('browserify-rsa') +var Buffer = require('safe-buffer').Buffer + +module.exports = function publicEncrypt (publicKey, msg, reverse) { + var padding + if (publicKey.padding) { + padding = publicKey.padding + } else if (reverse) { + padding = 1 + } else { + padding = 4 + } + var key = parseKeys(publicKey) + var paddedMsg + if (padding === 4) { + paddedMsg = oaep(key, msg) + } else if (padding === 1) { + paddedMsg = pkcs1(key, msg, reverse) + } else if (padding === 3) { + paddedMsg = new BN(msg) + if (paddedMsg.cmp(key.modulus) >= 0) { + throw new Error('data too long for modulus') + } + } else { + throw new Error('unknown padding') + } + if (reverse) { + return crt(paddedMsg, key) + } else { + return withPublic(paddedMsg, key) + } +} + +function oaep (key, msg) { + var k = key.modulus.byteLength() + var mLen = msg.length + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() + var hLen = iHash.length + var hLen2 = 2 * hLen + if (mLen > k - hLen2 - 2) { + throw new Error('message too long') + } + var ps = Buffer.alloc(k - mLen - hLen2 - 2) + var dblen = k - hLen - 1 + var seed = randomBytes(hLen) + var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)) + var maskedSeed = xor(seed, mgf(maskedDb, hLen)) + return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)) +} +function pkcs1 (key, msg, reverse) { + var mLen = msg.length + var k = key.modulus.byteLength() + if (mLen > k - 11) { + throw new Error('message too long') + } + var ps + if (reverse) { + ps = Buffer.alloc(k - mLen - 3, 0xff) + } else { + ps = nonZero(k - mLen - 3) + } + return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)) +} +function nonZero (len) { + var out = Buffer.allocUnsafe(len) + var i = 0 + var cache = randomBytes(len * 2) + var cur = 0 + var num + while (i < len) { + if (cur === cache.length) { + cache = randomBytes(len * 2) + cur = 0 + } + num = cache[cur++] + if (num) { + out[i++] = num + } + } + return out +} + +},{"./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){ +var BN = require('bn.js') +var Buffer = require('safe-buffer').Buffer + +function withPublic (paddedMsg, key) { + return Buffer.from(paddedMsg + .toRed(BN.mont(key.modulus)) + .redPow(new BN(key.publicExponent)) + .fromRed() + .toArray()) +} + +module.exports = withPublic + +},{"bn.js":147,"safe-buffer":318}],291:[function(require,module,exports){ +module.exports = function xor (a, b) { + var len = a.length + var i = -1 + while (++i < len) { + a[i] ^= b[i] + } + return a +} + +},{}],292:[function(require,module,exports){ +(function (global){ +/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],293:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; + + if (typeof qs !== 'string' || qs.length === 0) { + return obj; + } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; + } + + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; + } + + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; + + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } + + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); + + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +},{}],294:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; + + case 'boolean': + return v ? 'true' : 'false'; + + case 'number': + return isFinite(v) ? v : ''; + + default: + return ''; + } +}; + +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; + } + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + + } + + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} + +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; +}; + +},{}],295:[function(require,module,exports){ +'use strict'; + +exports.decode = exports.parse = require('./decode'); +exports.encode = exports.stringify = require('./encode'); + +},{"./decode":293,"./encode":294}],296:[function(require,module,exports){ +var inherits = require('inherits') +var EventEmitter = require('events').EventEmitter + +module.exports = Queue +module.exports.default = Queue + +function Queue (options) { + if (!(this instanceof Queue)) { + return new Queue(options) + } + + EventEmitter.call(this) + options = options || {} + this.concurrency = options.concurrency || Infinity + this.timeout = options.timeout || 0 + this.autostart = options.autostart || false + this.results = options.results || null + this.pending = 0 + this.session = 0 + this.running = false + this.jobs = [] + this.timers = {} +} +inherits(Queue, EventEmitter) + +var arrayMethods = [ + 'pop', + 'shift', + 'indexOf', + 'lastIndexOf' +] + +arrayMethods.forEach(function (method) { + Queue.prototype[method] = function () { + return Array.prototype[method].apply(this.jobs, arguments) + } +}) + +Queue.prototype.slice = function (begin, end) { + this.jobs = this.jobs.slice(begin, end) + return this +} + +Queue.prototype.reverse = function () { + this.jobs.reverse() + return this +} + +var arrayAddMethods = [ + 'push', + 'unshift', + 'splice' +] + +arrayAddMethods.forEach(function (method) { + Queue.prototype[method] = function () { + var methodResult = Array.prototype[method].apply(this.jobs, arguments) + if (this.autostart) { + this.start() + } + return methodResult + } +}) + +Object.defineProperty(Queue.prototype, 'length', { + get: function () { + return this.pending + this.jobs.length + } +}) + +Queue.prototype.start = function (cb) { + if (cb) { + callOnErrorOrEnd.call(this, cb) + } + + this.running = true + + if (this.pending >= this.concurrency) { + return + } + + if (this.jobs.length === 0) { + if (this.pending === 0) { + done.call(this) + } + return + } + + var self = this + var job = this.jobs.shift() + var once = true + var session = this.session + var timeoutId = null + var didTimeout = false + var resultIndex = null + var timeout = job.timeout || this.timeout + + function next (err, result) { + if (once && self.session === session) { + once = false + self.pending-- + if (timeoutId !== null) { + delete self.timers[timeoutId] + clearTimeout(timeoutId) + } + + if (err) { + self.emit('error', err, job) + } else if (didTimeout === false) { + if (resultIndex !== null) { + self.results[resultIndex] = Array.prototype.slice.call(arguments, 1) + } + self.emit('success', result, job) + } + + if (self.session === session) { + if (self.pending === 0 && self.jobs.length === 0) { + done.call(self) + } else if (self.running) { + self.start() + } + } + } + } + + if (timeout) { + timeoutId = setTimeout(function () { + didTimeout = true + if (self.listeners('timeout').length > 0) { + self.emit('timeout', next, job) + } else { + next() + } + }, timeout) + this.timers[timeoutId] = timeoutId + } + + if (this.results) { + resultIndex = this.results.length + this.results[resultIndex] = null + } + + this.pending++ + self.emit('start', job) + var promise = job(next) + if (promise && promise.then && typeof promise.then === 'function') { + promise.then(function (result) { + return next(null, result) + }).catch(function (err) { + return next(err || true) + }) + } + + if (this.running && this.jobs.length > 0) { + this.start() + } +} + +Queue.prototype.stop = function () { + this.running = false +} + +Queue.prototype.end = function (err) { + clearTimers.call(this) + this.jobs.length = 0 + this.pending = 0 + done.call(this, err) +} + +function clearTimers () { + for (var key in this.timers) { + var timeoutId = this.timers[key] + delete this.timers[key] + clearTimeout(timeoutId) + } +} + +function callOnErrorOrEnd (cb) { + var self = this + this.on('error', onerror) + this.on('end', onend) + + function onerror (err) { self.end(err) } + function onend (err) { + self.removeListener('error', onerror) + self.removeListener('end', onend) + cb(err, this.results) + } +} + +function done (err) { + this.session++ + this.running = false + this.emit('end', err) +} + +},{"events":221,"inherits":262}],297:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.quickselect = factory()); +}(this, (function () { 'use strict'; + +function quickselect(arr, k, left, right, compare) { + quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare); +} + +function quickselectStep(arr, k, left, right, compare) { + + while (right > left) { + if (right - left > 600) { + var n = right - left + 1; + var m = k - left + 1; + var z = Math.log(n); + var s = 0.5 * Math.exp(2 * z / 3); + var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); + var newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); + var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); + quickselectStep(arr, k, newLeft, newRight, compare); + } + + var t = arr[k]; + var i = left; + var j = right; + + swap(arr, left, k); + if (compare(arr[right], t) > 0) swap(arr, left, right); + + while (i < j) { + swap(arr, i, j); + i++; + j--; + while (compare(arr[i], t) < 0) i++; + while (compare(arr[j], t) > 0) j--; + } + + if (compare(arr[left], t) === 0) swap(arr, left, j); + else { + j++; + swap(arr, j, right); + } + + if (j <= k) left = j + 1; + if (k <= j) right = j - 1; + } +} + +function swap(arr, i, j) { + var tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; +} + +function defaultCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; +} + +return quickselect; + +}))); + +},{}],298:[function(require,module,exports){ +(function (process,global){ +'use strict' + +// limit of Crypto.getRandomValues() +// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues +var MAX_BYTES = 65536 + +// Node supports requesting up to this number of bytes +// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 +var MAX_UINT32 = 4294967295 + +function oldBrowser () { + throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') +} + +var Buffer = require('safe-buffer').Buffer +var crypto = global.crypto || global.msCrypto + +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes +} else { + module.exports = oldBrowser +} + +function randomBytes (size, cb) { + // phantomjs needs to throw + if (size > MAX_UINT32) throw new RangeError('requested too many random bytes') + + var bytes = Buffer.allocUnsafe(size) + + if (size > 0) { // getRandomValues fails on IE if size == 0 + if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues + // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + for (var generated = 0; generated < size; generated += MAX_BYTES) { + // buffer.slice automatically checks if the end is past the end of + // the buffer so we don't have to here + crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)) + } + } else { + crypto.getRandomValues(bytes) + } + } + + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes) + }) + } + + return bytes +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"_process":284,"safe-buffer":318}],299:[function(require,module,exports){ +(function (process,global){ +'use strict' + +function oldBrowser () { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') +} +var safeBuffer = require('safe-buffer') +var randombytes = require('randombytes') +var Buffer = safeBuffer.Buffer +var kBufferMaxLength = safeBuffer.kMaxLength +var crypto = global.crypto || global.msCrypto +var kMaxUint32 = Math.pow(2, 32) - 1 +function assertOffset (offset, length) { + if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare + throw new TypeError('offset must be a number') + } + + if (offset > kMaxUint32 || offset < 0) { + throw new TypeError('offset must be a uint32') + } + + if (offset > kBufferMaxLength || offset > length) { + throw new RangeError('offset out of range') + } +} + +function assertSize (size, offset, length) { + if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare + throw new TypeError('size must be a number') + } + + if (size > kMaxUint32 || size < 0) { + throw new TypeError('size must be a uint32') + } + + if (size + offset > length || size > kBufferMaxLength) { + throw new RangeError('buffer too small') + } +} +if ((crypto && crypto.getRandomValues) || !process.browser) { + exports.randomFill = randomFill + exports.randomFillSync = randomFillSync +} else { + exports.randomFill = oldBrowser + exports.randomFillSync = oldBrowser +} +function randomFill (buf, offset, size, cb) { + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array') + } + + if (typeof offset === 'function') { + cb = offset + offset = 0 + size = buf.length + } else if (typeof size === 'function') { + cb = size + size = buf.length - offset + } else if (typeof cb !== 'function') { + throw new TypeError('"cb" argument must be a function') + } + assertOffset(offset, buf.length) + assertSize(size, offset, buf.length) + return actualFill(buf, offset, size, cb) +} + +function actualFill (buf, offset, size, cb) { + if (process.browser) { + var ourBuf = buf.buffer + var uint = new Uint8Array(ourBuf, offset, size) + crypto.getRandomValues(uint) + if (cb) { + process.nextTick(function () { + cb(null, buf) + }) + return + } + return buf + } + if (cb) { + randombytes(size, function (err, bytes) { + if (err) { + return cb(err) + } + bytes.copy(buf, offset) + cb(null, buf) + }) + return + } + var bytes = randombytes(size) + bytes.copy(buf, offset) + return buf +} +function randomFillSync (buf, offset, size) { + if (typeof offset === 'undefined') { + offset = 0 + } + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array') + } + + assertOffset(offset, buf.length) + + if (size === undefined) size = buf.length - offset + + assertSize(size, offset, buf.length) + + return actualFill(buf, offset, size) +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"_process":284,"randombytes":298,"safe-buffer":318}],300:[function(require,module,exports){ +'use strict'; + +module.exports = rbush; +module.exports.default = rbush; + +var quickselect = require('quickselect'); + +function rbush(maxEntries, format) { + if (!(this instanceof rbush)) return new rbush(maxEntries, format); + + // max entries in a node is 9 by default; min node fill is 40% for best performance + this._maxEntries = Math.max(4, maxEntries || 9); + this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); + + if (format) { + this._initFormat(format); + } + + this.clear(); +} + +rbush.prototype = { + + all: function () { + return this._all(this.data, []); + }, + + search: function (bbox) { + + var node = this.data, + result = [], + toBBox = this.toBBox; + + if (!intersects(bbox, node)) return result; + + var nodesToSearch = [], + i, len, child, childBBox; + + while (node) { + for (i = 0, len = node.children.length; i < len; i++) { + + child = node.children[i]; + childBBox = node.leaf ? toBBox(child) : child; + + if (intersects(bbox, childBBox)) { + if (node.leaf) result.push(child); + else if (contains(bbox, childBBox)) this._all(child, result); + else nodesToSearch.push(child); + } + } + node = nodesToSearch.pop(); + } + + return result; + }, + + collides: function (bbox) { + + var node = this.data, + toBBox = this.toBBox; + + if (!intersects(bbox, node)) return false; + + var nodesToSearch = [], + i, len, child, childBBox; + + while (node) { + for (i = 0, len = node.children.length; i < len; i++) { + + child = node.children[i]; + childBBox = node.leaf ? toBBox(child) : child; + + if (intersects(bbox, childBBox)) { + if (node.leaf || contains(bbox, childBBox)) return true; + nodesToSearch.push(child); + } + } + node = nodesToSearch.pop(); + } + + return false; + }, + + load: function (data) { + if (!(data && data.length)) return this; + + if (data.length < this._minEntries) { + for (var i = 0, len = data.length; i < len; i++) { + this.insert(data[i]); + } + return this; + } + + // recursively build the tree with the given data from scratch using OMT algorithm + var node = this._build(data.slice(), 0, data.length - 1, 0); + + if (!this.data.children.length) { + // save as is if tree is empty + this.data = node; + + } else if (this.data.height === node.height) { + // split root if trees have the same height + this._splitRoot(this.data, node); + + } else { + if (this.data.height < node.height) { + // swap trees if inserted one is bigger + var tmpNode = this.data; + this.data = node; + node = tmpNode; + } + + // insert the small tree into the large tree at appropriate level + this._insert(node, this.data.height - node.height - 1, true); + } + + return this; + }, + + insert: function (item) { + if (item) this._insert(item, this.data.height - 1); + return this; + }, + + clear: function () { + this.data = createNode([]); + return this; + }, + + remove: function (item, equalsFn) { + if (!item) return this; + + var node = this.data, + bbox = this.toBBox(item), + path = [], + indexes = [], + i, parent, index, goingUp; + + // depth-first iterative tree traversal + while (node || path.length) { + + if (!node) { // go up + node = path.pop(); + parent = path[path.length - 1]; + i = indexes.pop(); + goingUp = true; + } + + if (node.leaf) { // check current node + index = findItem(item, node.children, equalsFn); + + if (index !== -1) { + // item found, remove the item and condense tree upwards + node.children.splice(index, 1); + path.push(node); + this._condense(path); + return this; + } + } + + if (!goingUp && !node.leaf && contains(node, bbox)) { // go down + path.push(node); + indexes.push(i); + i = 0; + parent = node; + node = node.children[0]; + + } else if (parent) { // go right + i++; + node = parent.children[i]; + goingUp = false; + + } else node = null; // nothing found + } + + return this; + }, + + toBBox: function (item) { return item; }, + + compareMinX: compareNodeMinX, + compareMinY: compareNodeMinY, + + toJSON: function () { return this.data; }, + + fromJSON: function (data) { + this.data = data; + return this; + }, + + _all: function (node, result) { + var nodesToSearch = []; + while (node) { + if (node.leaf) result.push.apply(result, node.children); + else nodesToSearch.push.apply(nodesToSearch, node.children); + + node = nodesToSearch.pop(); + } + return result; + }, + + _build: function (items, left, right, height) { + + var N = right - left + 1, + M = this._maxEntries, + node; + + if (N <= M) { + // reached leaf level; return leaf + node = createNode(items.slice(left, right + 1)); + calcBBox(node, this.toBBox); + return node; + } + + if (!height) { + // target height of the bulk-loaded tree + height = Math.ceil(Math.log(N) / Math.log(M)); + + // target number of root entries to maximize storage utilization + M = Math.ceil(N / Math.pow(M, height - 1)); + } + + node = createNode([]); + node.leaf = false; + node.height = height; + + // split the items into M mostly square tiles + + var N2 = Math.ceil(N / M), + N1 = N2 * Math.ceil(Math.sqrt(M)), + i, j, right2, right3; + + multiSelect(items, left, right, N1, this.compareMinX); + + for (i = left; i <= right; i += N1) { + + right2 = Math.min(i + N1 - 1, right); + + multiSelect(items, i, right2, N2, this.compareMinY); + + for (j = i; j <= right2; j += N2) { + + right3 = Math.min(j + N2 - 1, right2); + + // pack each entry recursively + node.children.push(this._build(items, j, right3, height - 1)); + } + } + + calcBBox(node, this.toBBox); + + return node; + }, + + _chooseSubtree: function (bbox, node, level, path) { + + var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; + + while (true) { + path.push(node); + + if (node.leaf || path.length - 1 === level) break; + + minArea = minEnlargement = Infinity; + + for (i = 0, len = node.children.length; i < len; i++) { + child = node.children[i]; + area = bboxArea(child); + enlargement = enlargedArea(bbox, child) - area; + + // choose entry with the least area enlargement + if (enlargement < minEnlargement) { + minEnlargement = enlargement; + minArea = area < minArea ? area : minArea; + targetNode = child; + + } else if (enlargement === minEnlargement) { + // otherwise choose one with the smallest area + if (area < minArea) { + minArea = area; + targetNode = child; + } + } + } + + node = targetNode || node.children[0]; + } + + return node; + }, + + _insert: function (item, level, isNode) { + + var toBBox = this.toBBox, + bbox = isNode ? item : toBBox(item), + insertPath = []; + + // find the best node for accommodating the item, saving all nodes along the path too + var node = this._chooseSubtree(bbox, this.data, level, insertPath); + + // put the item into the node + node.children.push(item); + extend(node, bbox); + + // split on node overflow; propagate upwards if necessary + while (level >= 0) { + if (insertPath[level].children.length > this._maxEntries) { + this._split(insertPath, level); + level--; + } else break; + } + + // adjust bboxes along the insertion path + this._adjustParentBBoxes(bbox, insertPath, level); + }, + + // split overflowed node into two + _split: function (insertPath, level) { + + var node = insertPath[level], + M = node.children.length, + m = this._minEntries; + + this._chooseSplitAxis(node, m, M); + + var splitIndex = this._chooseSplitIndex(node, m, M); + + var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex)); + newNode.height = node.height; + newNode.leaf = node.leaf; + + calcBBox(node, this.toBBox); + calcBBox(newNode, this.toBBox); + + if (level) insertPath[level - 1].children.push(newNode); + else this._splitRoot(node, newNode); + }, + + _splitRoot: function (node, newNode) { + // split root node + this.data = createNode([node, newNode]); + this.data.height = node.height + 1; + this.data.leaf = false; + calcBBox(this.data, this.toBBox); + }, + + _chooseSplitIndex: function (node, m, M) { + + var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; + + minOverlap = minArea = Infinity; + + for (i = m; i <= M - m; i++) { + bbox1 = distBBox(node, 0, i, this.toBBox); + bbox2 = distBBox(node, i, M, this.toBBox); + + overlap = intersectionArea(bbox1, bbox2); + area = bboxArea(bbox1) + bboxArea(bbox2); + + // choose distribution with minimum overlap + if (overlap < minOverlap) { + minOverlap = overlap; + index = i; + + minArea = area < minArea ? area : minArea; + + } else if (overlap === minOverlap) { + // otherwise choose distribution with minimum area + if (area < minArea) { + minArea = area; + index = i; + } + } + } + + return index; + }, + + // sorts node children by the best axis for split + _chooseSplitAxis: function (node, m, M) { + + var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX, + compareMinY = node.leaf ? this.compareMinY : compareNodeMinY, + xMargin = this._allDistMargin(node, m, M, compareMinX), + yMargin = this._allDistMargin(node, m, M, compareMinY); + + // if total distributions margin value is minimal for x, sort by minX, + // otherwise it's already sorted by minY + if (xMargin < yMargin) node.children.sort(compareMinX); + }, + + // total margin of all possible split distributions where each node is at least m full + _allDistMargin: function (node, m, M, compare) { + + node.children.sort(compare); + + var toBBox = this.toBBox, + leftBBox = distBBox(node, 0, m, toBBox), + rightBBox = distBBox(node, M - m, M, toBBox), + margin = bboxMargin(leftBBox) + bboxMargin(rightBBox), + i, child; + + for (i = m; i < M - m; i++) { + child = node.children[i]; + extend(leftBBox, node.leaf ? toBBox(child) : child); + margin += bboxMargin(leftBBox); + } + + for (i = M - m - 1; i >= m; i--) { + child = node.children[i]; + extend(rightBBox, node.leaf ? toBBox(child) : child); + margin += bboxMargin(rightBBox); + } + + return margin; + }, + + _adjustParentBBoxes: function (bbox, path, level) { + // adjust bboxes along the given tree path + for (var i = level; i >= 0; i--) { + extend(path[i], bbox); + } + }, + + _condense: function (path) { + // go through the path, removing empty nodes and updating bboxes + for (var i = path.length - 1, siblings; i >= 0; i--) { + if (path[i].children.length === 0) { + if (i > 0) { + siblings = path[i - 1].children; + siblings.splice(siblings.indexOf(path[i]), 1); + + } else this.clear(); + + } else calcBBox(path[i], this.toBBox); + } + }, + + _initFormat: function (format) { + // data format (minX, minY, maxX, maxY accessors) + + // uses eval-type function compilation instead of just accepting a toBBox function + // because the algorithms are very sensitive to sorting functions performance, + // so they should be dead simple and without inner calls + + var compareArr = ['return a', ' - b', ';']; + + this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); + this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); + + this.toBBox = new Function('a', + 'return {minX: a' + format[0] + + ', minY: a' + format[1] + + ', maxX: a' + format[2] + + ', maxY: a' + format[3] + '};'); + } +}; + +function findItem(item, items, equalsFn) { + if (!equalsFn) return items.indexOf(item); + + for (var i = 0; i < items.length; i++) { + if (equalsFn(item, items[i])) return i; + } + return -1; +} + +// calculate node's bbox from bboxes of its children +function calcBBox(node, toBBox) { + distBBox(node, 0, node.children.length, toBBox, node); +} + +// min bounding rectangle of node children from k to p-1 +function distBBox(node, k, p, toBBox, destNode) { + if (!destNode) destNode = createNode(null); + destNode.minX = Infinity; + destNode.minY = Infinity; + destNode.maxX = -Infinity; + destNode.maxY = -Infinity; + + for (var i = k, child; i < p; i++) { + child = node.children[i]; + extend(destNode, node.leaf ? toBBox(child) : child); + } + + return destNode; +} + +function extend(a, b) { + a.minX = Math.min(a.minX, b.minX); + a.minY = Math.min(a.minY, b.minY); + a.maxX = Math.max(a.maxX, b.maxX); + a.maxY = Math.max(a.maxY, b.maxY); + return a; +} + +function compareNodeMinX(a, b) { return a.minX - b.minX; } +function compareNodeMinY(a, b) { return a.minY - b.minY; } + +function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); } +function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); } + +function enlargedArea(a, b) { + return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) * + (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY)); +} + +function intersectionArea(a, b) { + var minX = Math.max(a.minX, b.minX), + minY = Math.max(a.minY, b.minY), + maxX = Math.min(a.maxX, b.maxX), + maxY = Math.min(a.maxY, b.maxY); + + return Math.max(0, maxX - minX) * + Math.max(0, maxY - minY); +} + +function contains(a, b) { + return a.minX <= b.minX && + a.minY <= b.minY && + b.maxX <= a.maxX && + b.maxY <= a.maxY; +} + +function intersects(a, b) { + return b.minX <= a.maxX && + b.minY <= a.maxY && + b.maxX >= a.minX && + b.maxY >= a.minY; +} + +function createNode(children) { + return { + children: children, + height: 1, + leaf: true, + minX: Infinity, + minY: Infinity, + maxX: -Infinity, + maxY: -Infinity + }; +} + +// sort an array so that items come in groups of n unsorted items, with groups sorted between each other; +// combines selection algorithm with binary divide & conquer approach + +function multiSelect(arr, left, right, n, compare) { + var stack = [left, right], + mid; + + while (stack.length) { + right = stack.pop(); + left = stack.pop(); + + if (right - left <= n) continue; + + mid = left + Math.ceil((right - left) / n / 2) * n; + quickselect(arr, mid, left, right, compare); + + stack.push(left, mid, mid, right); + } +} + +},{"quickselect":297}],301:[function(require,module,exports){ +module.exports = require('./lib/_stream_duplex.js'); + +},{"./lib/_stream_duplex.js":302}],302:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + pna.nextTick(cb, err); +}; +},{"./_stream_readable":304,"./_stream_writable":306,"core-util-is":186,"inherits":262,"process-nextick-args":283}],303:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; +},{"./_stream_transform":305,"core-util-is":186,"inherits":262}],304:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + 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]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, unpipeInfo); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this, unpipeInfo); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + 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); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./_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){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + + cb(er); + + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} +},{"./_stream_duplex":302,"core-util-is":186,"inherits":262}],306:[function(require,module,exports){ +(function (process,global,setImmediate){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = global.Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = require('./internal/streams/destroy'); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + 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); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = corkReq; + } else { + state.corkedRequestsFree = corkReq; + } +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) +},{"./_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){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = require('safe-buffer').Buffer; +var util = require('util'); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + if (this.length === 1) return this.head.data; + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ length: this.length }); + return this.constructor.name + ' ' + obj; + }; +} +},{"safe-buffer":310,"util":149}],308:[function(require,module,exports){ +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { + pna.nextTick(emitErrorNT, this, err); + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + pna.nextTick(emitErrorNT, _this, err); + if (_this._writableState) { + _this._writableState.errorEmitted = true; + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; +},{"process-nextick-args":283}],309:[function(require,module,exports){ +module.exports = require('events').EventEmitter; + +},{"events":221}],310:[function(require,module,exports){ +arguments[4][178][0].apply(exports,arguments) +},{"buffer":182,"dup":178}],311:[function(require,module,exports){ +module.exports = require('./readable').PassThrough + +},{"./readable":312}],312:[function(require,module,exports){ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); + +},{"./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){ +module.exports = require('./readable').Transform + +},{"./readable":312}],314:[function(require,module,exports){ +module.exports = require('./lib/_stream_writable.js'); + +},{"./lib/_stream_writable.js":306}],315:[function(require,module,exports){ +'use strict'; + +var proj4 = require('proj4').hasOwnProperty('default') ? require('proj4').default : require('proj4'); +// Checks if `list` looks like a `[x, y]`. +function isXY(list) { + return list.length >= 2 && + typeof list[0] === 'number' && + typeof list[1] === 'number'; +} + +function traverseCoords(coordinates, callback) { + if (isXY(coordinates)) return callback(coordinates); + return coordinates.map(function(coord){return traverseCoords(coord, callback);}); +} + +// Simplistic shallow clone that will work for a normal GeoJSON object. +function clone(obj) { + if (null == obj || 'object' !== typeof obj) return obj; + var copy = obj.constructor(); + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; + } + return copy; +} + +function traverseGeoJson(geometryCb, nodeCb, geojson) { + if (geojson == null) return geojson; + + var r = clone(geojson); + var self = traverseGeoJson.bind(this, geometryCb, nodeCb); + + switch (geojson.type) { + case 'Feature': + r.geometry = self(geojson.geometry); + break; + case 'FeatureCollection': + r.features = r.features.map(self); + break; + case 'GeometryCollection': + r.geometries = r.geometries.map(self); + break; + default: + geometryCb(r); + break; + } + + if (nodeCb) nodeCb(r); + + return r; +} + +function detectCrs(geojson, projs) { + var crsInfo = geojson.crs, + crs; + + if (crsInfo === undefined) { + throw new Error('Unable to detect CRS, GeoJSON has no "crs" property.'); + } + + if (crsInfo.type === 'name') { + crs = projs[crsInfo.properties.name]; + } else if (crsInfo.type === 'EPSG') { + crs = projs['EPSG:' + crsInfo.properties.code]; + } + + if (!crs) { + throw new Error('CRS defined in crs section could not be identified: ' + JSON.stringify(crsInfo)); + } + + return crs; +} + +function determineCrs(crs, projs) { + if (typeof crs === 'string' || crs instanceof String) { + return projs[crs] || proj4.Proj(crs); + } + + return crs; +} + +function calcBbox(geojson) { + var min = [Number.MAX_VALUE, Number.MAX_VALUE], + max = [-Number.MAX_VALUE, -Number.MAX_VALUE]; + traverseGeoJson(function(_gj) { + traverseCoords(_gj.coordinates, function(xy) { + min[0] = Math.min(min[0], xy[0]); + min[1] = Math.min(min[1], xy[1]); + max[0] = Math.max(max[0], xy[0]); + max[1] = Math.max(max[1], xy[1]); + }); + }, null, geojson); + return [min[0], min[1], max[0], max[1]]; +} + +function reproject(geojson, from, to, projs) { + projs = projs || {}; + if (!from) { + from = detectCrs(geojson, projs); + } else { + from = determineCrs(from, projs); + } + + to = determineCrs(to, projs); + var transform = proj4(from, to).forward.bind(transform); + + var transformGeometryCoords = function(gj) { + // No easy way to put correct CRS info into the GeoJSON, + // and definitely wrong to keep the old, so delete it. + if (gj.crs) { + delete gj.crs; + } + gj.coordinates = traverseCoords(gj.coordinates, transform); + } + + var transformBbox = function(gj) { + if (gj.bbox) { + gj.bbox = calcBbox(gj); + } + } + + return traverseGeoJson(transformGeometryCoords, transformBbox, geojson); +} + +module.exports = { + detectCrs: detectCrs, + + reproject: reproject, + + reverse: function(geojson) { + return traverseGeoJson(function(gj) { + gj.coordinates = traverseCoords(gj.coordinates, function(xy) { + return [ xy[1], xy[0] ]; + }); + }, null, geojson); + }, + + toWgs84: function(geojson, from, projs) { + return reproject(geojson, from, proj4.WGS84, projs); + } +}; + +},{"proj4":316}],316:[function(require,module,exports){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.proj4 = factory()); +}(this, (function () { 'use strict'; + + var globals = function(defs) { + defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"); + defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"); + 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"); + + defs.WGS84 = defs['EPSG:4326']; + defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857 + defs.GOOGLE = defs['EPSG:3857']; + defs['EPSG:900913'] = defs['EPSG:3857']; + defs['EPSG:102113'] = defs['EPSG:3857']; + }; + + var PJD_3PARAM = 1; + var PJD_7PARAM = 2; + var PJD_WGS84 = 4; // WGS84 or equivalent + var PJD_NODATUM = 5; // WGS84 or equivalent + var SEC_TO_RAD = 4.84813681109535993589914102357e-6; + var HALF_PI = Math.PI/2; + // ellipoid pj_set_ell.c + var SIXTH = 0.1666666666666666667; + /* 1/6 */ + var RA4 = 0.04722222222222222222; + /* 17/360 */ + var RA6 = 0.02215608465608465608; + var EPSLN = 1.0e-10; + // you'd think you could use Number.EPSILON above but that makes + // Mollweide get into an infinate loop. + + var D2R = 0.01745329251994329577; + var R2D = 57.29577951308232088; + var FORTPI = Math.PI/4; + var TWO_PI = Math.PI * 2; + // SPI is slightly greater than Math.PI, so values that exceed the -180..180 + // degree range by a tiny amount don't get wrapped. This prevents points that + // have drifted from their original location along the 180th meridian (due to + // floating point error) from changing their sign. + var SPI = 3.14159265359; + + var exports$1 = {}; + exports$1.greenwich = 0.0; //"0dE", + exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W", + exports$1.paris = 2.337229166667; //"2d20'14.025\"E", + exports$1.bogota = -74.080916666667; //"74d04'51.3\"W", + exports$1.madrid = -3.687938888889; //"3d41'16.58\"W", + exports$1.rome = 12.452333333333; //"12d27'8.4\"E", + exports$1.bern = 7.439583333333; //"7d26'22.5\"E", + exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E", + exports$1.ferro = -17.666666666667; //"17d40'W", + exports$1.brussels = 4.367975; //"4d22'4.71\"E", + exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E", + exports$1.athens = 23.7163375; //"23d42'58.815\"E", + exports$1.oslo = 10.722916666667; //"10d43'22.5\"E" + + var units = { + ft: {to_meter: 0.3048}, + 'us-ft': {to_meter: 1200 / 3937} + }; + + var ignoredChar = /[\s_\-\/\(\)]/g; + function match(obj, key) { + if (obj[key]) { + return obj[key]; + } + var keys = Object.keys(obj); + var lkey = key.toLowerCase().replace(ignoredChar, ''); + var i = -1; + var testkey, processedKey; + while (++i < keys.length) { + testkey = keys[i]; + processedKey = testkey.toLowerCase().replace(ignoredChar, ''); + if (processedKey === lkey) { + return obj[testkey]; + } + } + } + + var parseProj = function(defData) { + var self = {}; + var paramObj = defData.split('+').map(function(v) { + return v.trim(); + }).filter(function(a) { + return a; + }).reduce(function(p, a) { + var split = a.split('='); + split.push(true); + p[split[0].toLowerCase()] = split[1]; + return p; + }, {}); + var paramName, paramVal, paramOutname; + var params = { + proj: 'projName', + datum: 'datumCode', + rf: function(v) { + self.rf = parseFloat(v); + }, + lat_0: function(v) { + self.lat0 = v * D2R; + }, + lat_1: function(v) { + self.lat1 = v * D2R; + }, + lat_2: function(v) { + self.lat2 = v * D2R; + }, + lat_ts: function(v) { + self.lat_ts = v * D2R; + }, + lon_0: function(v) { + self.long0 = v * D2R; + }, + lon_1: function(v) { + self.long1 = v * D2R; + }, + lon_2: function(v) { + self.long2 = v * D2R; + }, + alpha: function(v) { + self.alpha = parseFloat(v) * D2R; + }, + lonc: function(v) { + self.longc = v * D2R; + }, + x_0: function(v) { + self.x0 = parseFloat(v); + }, + y_0: function(v) { + self.y0 = parseFloat(v); + }, + k_0: function(v) { + self.k0 = parseFloat(v); + }, + k: function(v) { + self.k0 = parseFloat(v); + }, + a: function(v) { + self.a = parseFloat(v); + }, + b: function(v) { + self.b = parseFloat(v); + }, + r_a: function() { + self.R_A = true; + }, + zone: function(v) { + self.zone = parseInt(v, 10); + }, + south: function() { + self.utmSouth = true; + }, + towgs84: function(v) { + self.datum_params = v.split(",").map(function(a) { + return parseFloat(a); + }); + }, + to_meter: function(v) { + self.to_meter = parseFloat(v); + }, + units: function(v) { + self.units = v; + var unit = match(units, v); + if (unit) { + self.to_meter = unit.to_meter; + } + }, + from_greenwich: function(v) { + self.from_greenwich = v * D2R; + }, + pm: function(v) { + var pm = match(exports$1, v); + self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R; + }, + nadgrids: function(v) { + if (v === '@null') { + self.datumCode = 'none'; + } + else { + self.nadgrids = v; + } + }, + axis: function(v) { + var legalAxis = "ewnsud"; + 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) { + self.axis = v; + } + } + }; + for (paramName in paramObj) { + paramVal = paramObj[paramName]; + if (paramName in params) { + paramOutname = params[paramName]; + if (typeof paramOutname === 'function') { + paramOutname(paramVal); + } + else { + self[paramOutname] = paramVal; + } + } + else { + self[paramName] = paramVal; + } + } + if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){ + self.datumCode = self.datumCode.toLowerCase(); + } + return self; + }; + + var NEUTRAL = 1; + var KEYWORD = 2; + var NUMBER = 3; + var QUOTED = 4; + var AFTERQUOTE = 5; + var ENDED = -1; + var whitespace = /\s/; + var latin = /[A-Za-z]/; + var keyword = /[A-Za-z84]/; + var endThings = /[,\]]/; + var digets = /[\d\.E\-\+]/; + // const ignoredChar = /[\s_\-\/\(\)]/g; + function Parser(text) { + if (typeof text !== 'string') { + throw new Error('not a string'); + } + this.text = text.trim(); + this.level = 0; + this.place = 0; + this.root = null; + this.stack = []; + this.currentObject = null; + this.state = NEUTRAL; + } + Parser.prototype.readCharicter = function() { + var char = this.text[this.place++]; + if (this.state !== QUOTED) { + while (whitespace.test(char)) { + if (this.place >= this.text.length) { + return; + } + char = this.text[this.place++]; + } + } + switch (this.state) { + case NEUTRAL: + return this.neutral(char); + case KEYWORD: + return this.keyword(char) + case QUOTED: + return this.quoted(char); + case AFTERQUOTE: + return this.afterquote(char); + case NUMBER: + return this.number(char); + case ENDED: + return; + } + }; + Parser.prototype.afterquote = function(char) { + if (char === '"') { + this.word += '"'; + this.state = QUOTED; + return; + } + if (endThings.test(char)) { + this.word = this.word.trim(); + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place); + }; + Parser.prototype.afterItem = function(char) { + if (char === ',') { + if (this.word !== null) { + this.currentObject.push(this.word); + } + this.word = null; + this.state = NEUTRAL; + return; + } + if (char === ']') { + this.level--; + if (this.word !== null) { + this.currentObject.push(this.word); + this.word = null; + } + this.state = NEUTRAL; + this.currentObject = this.stack.pop(); + if (!this.currentObject) { + this.state = ENDED; + } + + return; + } + }; + Parser.prototype.number = function(char) { + if (digets.test(char)) { + this.word += char; + return; + } + if (endThings.test(char)) { + this.word = parseFloat(this.word); + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place); + }; + Parser.prototype.quoted = function(char) { + if (char === '"') { + this.state = AFTERQUOTE; + return; + } + this.word += char; + return; + }; + Parser.prototype.keyword = function(char) { + if (keyword.test(char)) { + this.word += char; + return; + } + if (char === '[') { + var newObjects = []; + newObjects.push(this.word); + this.level++; + if (this.root === null) { + this.root = newObjects; + } else { + this.currentObject.push(newObjects); + } + this.stack.push(this.currentObject); + this.currentObject = newObjects; + this.state = NEUTRAL; + return; + } + if (endThings.test(char)) { + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place); + }; + Parser.prototype.neutral = function(char) { + if (latin.test(char)) { + this.word = char; + this.state = KEYWORD; + return; + } + if (char === '"') { + this.word = ''; + this.state = QUOTED; + return; + } + if (digets.test(char)) { + this.word = char; + this.state = NUMBER; + return; + } + if (endThings.test(char)) { + this.afterItem(char); + return; + } + throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place); + }; + Parser.prototype.output = function() { + while (this.place < this.text.length) { + this.readCharicter(); + } + if (this.state === ENDED) { + return this.root; + } + throw new Error('unable to parse string "' +this.text + '". State is ' + this.state); + }; + + function parseString(txt) { + var parser = new Parser(txt); + return parser.output(); + } + + function mapit(obj, key, value) { + if (Array.isArray(key)) { + value.unshift(key); + key = null; + } + var thing = key ? {} : obj; + + var out = value.reduce(function(newObj, item) { + sExpr(item, newObj); + return newObj + }, thing); + if (key) { + obj[key] = out; + } + } + + function sExpr(v, obj) { + if (!Array.isArray(v)) { + obj[v] = true; + return; + } + var key = v.shift(); + if (key === 'PARAMETER') { + key = v.shift(); + } + if (v.length === 1) { + if (Array.isArray(v[0])) { + obj[key] = {}; + sExpr(v[0], obj[key]); + return; + } + obj[key] = v[0]; + return; + } + if (!v.length) { + obj[key] = true; + return; + } + if (key === 'TOWGS84') { + obj[key] = v; + return; + } + if (!Array.isArray(key)) { + obj[key] = {}; + } + + var i; + switch (key) { + case 'UNIT': + case 'PRIMEM': + case 'VERT_DATUM': + obj[key] = { + name: v[0].toLowerCase(), + convert: v[1] + }; + if (v.length === 3) { + sExpr(v[2], obj[key]); + } + return; + case 'SPHEROID': + case 'ELLIPSOID': + obj[key] = { + name: v[0], + a: v[1], + rf: v[2] + }; + if (v.length === 4) { + sExpr(v[3], obj[key]); + } + return; + case 'PROJECTEDCRS': + case 'PROJCRS': + case 'GEOGCS': + case 'GEOCCS': + case 'PROJCS': + case 'LOCAL_CS': + case 'GEODCRS': + case 'GEODETICCRS': + case 'GEODETICDATUM': + case 'EDATUM': + case 'ENGINEERINGDATUM': + case 'VERT_CS': + case 'VERTCRS': + case 'VERTICALCRS': + case 'COMPD_CS': + case 'COMPOUNDCRS': + case 'ENGINEERINGCRS': + case 'ENGCRS': + case 'FITTED_CS': + case 'LOCAL_DATUM': + case 'DATUM': + v[0] = ['name', v[0]]; + mapit(obj, key, v); + return; + default: + i = -1; + while (++i < v.length) { + if (!Array.isArray(v[i])) { + return sExpr(v, obj[key]); + } + } + return mapit(obj, key, v); + } + } + + var D2R$1 = 0.01745329251994329577; + function rename(obj, params) { + var outName = params[0]; + var inName = params[1]; + if (!(outName in obj) && (inName in obj)) { + obj[outName] = obj[inName]; + if (params.length === 3) { + obj[outName] = params[2](obj[outName]); + } + } + } + + function d2r(input) { + return input * D2R$1; + } + + function cleanWKT(wkt) { + if (wkt.type === 'GEOGCS') { + wkt.projName = 'longlat'; + } else if (wkt.type === 'LOCAL_CS') { + wkt.projName = 'identity'; + wkt.local = true; + } else { + if (typeof wkt.PROJECTION === 'object') { + wkt.projName = Object.keys(wkt.PROJECTION)[0]; + } else { + wkt.projName = wkt.PROJECTION; + } + } + if (wkt.UNIT) { + wkt.units = wkt.UNIT.name.toLowerCase(); + if (wkt.units === 'metre') { + wkt.units = 'meter'; + } + if (wkt.UNIT.convert) { + if (wkt.type === 'GEOGCS') { + if (wkt.DATUM && wkt.DATUM.SPHEROID) { + wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a; + } + } else { + wkt.to_meter = wkt.UNIT.convert, 10; + } + } + } + var geogcs = wkt.GEOGCS; + if (wkt.type === 'GEOGCS') { + geogcs = wkt; + } + if (geogcs) { + //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){ + // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R; + //} + if (geogcs.DATUM) { + wkt.datumCode = geogcs.DATUM.name.toLowerCase(); + } else { + wkt.datumCode = geogcs.name.toLowerCase(); + } + if (wkt.datumCode.slice(0, 2) === 'd_') { + wkt.datumCode = wkt.datumCode.slice(2); + } + if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') { + wkt.datumCode = 'nzgd49'; + } + if (wkt.datumCode === 'wgs_1984') { + if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') { + wkt.sphere = true; + } + wkt.datumCode = 'wgs84'; + } + if (wkt.datumCode.slice(-6) === '_ferro') { + wkt.datumCode = wkt.datumCode.slice(0, - 6); + } + if (wkt.datumCode.slice(-8) === '_jakarta') { + wkt.datumCode = wkt.datumCode.slice(0, - 8); + } + if (~wkt.datumCode.indexOf('belge')) { + wkt.datumCode = 'rnb72'; + } + if (geogcs.DATUM && geogcs.DATUM.SPHEROID) { + wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk'); + if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') { + wkt.ellps = 'intl'; + } + + wkt.a = geogcs.DATUM.SPHEROID.a; + wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10); + } + + if (geogcs.DATUM && geogcs.DATUM.TOWGS84) { + wkt.datum_params = geogcs.DATUM.TOWGS84; + } + if (~wkt.datumCode.indexOf('osgb_1936')) { + wkt.datumCode = 'osgb36'; + } + if (~wkt.datumCode.indexOf('osni_1952')) { + wkt.datumCode = 'osni52'; + } + if (~wkt.datumCode.indexOf('tm65') + || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) { + wkt.datumCode = 'ire65'; + } + if (wkt.datumCode === 'ch1903+') { + wkt.datumCode = 'ch1903'; + } + if (~wkt.datumCode.indexOf('israel')) { + wkt.datumCode = 'isr93'; + } + } + if (wkt.b && !isFinite(wkt.b)) { + wkt.b = wkt.a; + } + + function toMeter(input) { + var ratio = wkt.to_meter || 1; + return input * ratio; + } + var renamer = function(a) { + return rename(wkt, a); + }; + var list = [ + ['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'], + ['latitude_of_center', 'Latitude_of_center'], + ['lat0', 'latitude_of_center', d2r], + ['longitude_of_center', 'Longitude_Of_Center'], + ['longitude_of_center', 'Longitude_of_center'], + ['longc', 'longitude_of_center', d2r], + ['x0', 'false_easting', toMeter], + ['y0', 'false_northing', toMeter], + ['long0', 'central_meridian', d2r], + ['lat0', 'latitude_of_origin', d2r], + ['lat0', 'standard_parallel_1', d2r], + ['lat1', 'standard_parallel_1', d2r], + ['lat2', 'standard_parallel_2', d2r], + ['azimuth', 'Azimuth'], + ['alpha', 'azimuth', d2r], + ['srsCode', 'name'] + ]; + list.forEach(renamer); + if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) { + wkt.long0 = wkt.longc; + } + if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) { + wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90); + wkt.lat_ts = wkt.lat1; + } + } + var wkt = function(wkt) { + var lisp = parseString(wkt); + var type = lisp.shift(); + var name = lisp.shift(); + lisp.unshift(['name', name]); + lisp.unshift(['type', type]); + var obj = {}; + sExpr(lisp, obj); + cleanWKT(obj); + return obj; + }; + + function defs(name) { + /*global console*/ + var that = this; + if (arguments.length === 2) { + var def = arguments[1]; + if (typeof def === 'string') { + if (def.charAt(0) === '+') { + defs[name] = parseProj(arguments[1]); + } + else { + defs[name] = wkt(arguments[1]); + } + } else { + defs[name] = def; + } + } + else if (arguments.length === 1) { + if (Array.isArray(name)) { + return name.map(function(v) { + if (Array.isArray(v)) { + defs.apply(that, v); + } + else { + defs(v); + } + }); + } + else if (typeof name === 'string') { + if (name in defs) { + return defs[name]; + } + } + else if ('EPSG' in name) { + defs['EPSG:' + name.EPSG] = name; + } + else if ('ESRI' in name) { + defs['ESRI:' + name.ESRI] = name; + } + else if ('IAU2000' in name) { + defs['IAU2000:' + name.IAU2000] = name; + } + else { + console.log(name); + } + return; + } + + + } + globals(defs); + + function testObj(code){ + return typeof code === 'string'; + } + function testDef(code){ + return code in defs; + } + var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS']; + function testWKT(code){ + return codeWords.some(function (word) { + return code.indexOf(word) > -1; + }); + } + var codes = ['3857', '900913', '3785', '102113']; + function checkMercator(item) { + var auth = match(item, 'authority'); + if (!auth) { + return; + } + var code = match(auth, 'epsg'); + return code && codes.indexOf(code) > -1; + } + function checkProjStr(item) { + var ext = match(item, 'extension'); + if (!ext) { + return; + } + return match(ext, 'proj4'); + } + function testProj(code){ + return code[0] === '+'; + } + function parse(code){ + if (testObj(code)) { + //check to see if this is a WKT string + if (testDef(code)) { + return defs[code]; + } + if (testWKT(code)) { + var out = wkt(code); + // test of spetial case, due to this being a very common and often malformed + if (checkMercator(out)) { + return defs['EPSG:3857']; + } + var maybeProjStr = checkProjStr(out); + if (maybeProjStr) { + return parseProj(maybeProjStr); + } + return out; + } + if (testProj(code)) { + return parseProj(code); + } + }else{ + return code; + } + } + + var extend = function(destination, source) { + destination = destination || {}; + var value, property; + if (!source) { + return destination; + } + for (property in source) { + value = source[property]; + if (value !== undefined) { + destination[property] = value; + } + } + return destination; + }; + + var msfnz = function(eccent, sinphi, cosphi) { + var con = eccent * sinphi; + return cosphi / (Math.sqrt(1 - con * con)); + }; + + var sign = function(x) { + return x<0 ? -1 : 1; + }; + + var adjust_lon = function(x) { + return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI)); + }; + + var tsfnz = function(eccent, phi, sinphi) { + var con = eccent * sinphi; + var com = 0.5 * eccent; + con = Math.pow(((1 - con) / (1 + con)), com); + return (Math.tan(0.5 * (HALF_PI - phi)) / con); + }; + + var phi2z = function(eccent, ts) { + var eccnth = 0.5 * eccent; + var con, dphi; + var phi = HALF_PI - 2 * Math.atan(ts); + for (var i = 0; i <= 15; i++) { + con = eccent * Math.sin(phi); + dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi; + phi += dphi; + if (Math.abs(dphi) <= 0.0000000001) { + return phi; + } + } + //console.log("phi2z has NoConvergence"); + return -9999; + }; + + function init() { + var con = this.b / this.a; + this.es = 1 - con * con; + if(!('x0' in this)){ + this.x0 = 0; + } + if(!('y0' in this)){ + this.y0 = 0; + } + this.e = Math.sqrt(this.es); + if (this.lat_ts) { + if (this.sphere) { + this.k0 = Math.cos(this.lat_ts); + } + else { + this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); + } + } + else { + if (!this.k0) { + if (this.k) { + this.k0 = this.k; + } + else { + this.k0 = 1; + } + } + } + } + + /* Mercator forward equations--mapping lat,long to x,y + --------------------------------------------------*/ + + function forward(p) { + var lon = p.x; + var lat = p.y; + // convert to radians + if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) { + return null; + } + + var x, y; + if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { + return null; + } + else { + if (this.sphere) { + x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); + y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat)); + } + else { + var sinphi = Math.sin(lat); + var ts = tsfnz(this.e, lat, sinphi); + x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); + y = this.y0 - this.a * this.k0 * Math.log(ts); + } + p.x = x; + p.y = y; + return p; + } + } + + /* Mercator inverse equations--mapping x,y to lat/long + --------------------------------------------------*/ + function inverse(p) { + + var x = p.x - this.x0; + var y = p.y - this.y0; + var lon, lat; + + if (this.sphere) { + lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0))); + } + else { + var ts = Math.exp(-y / (this.a * this.k0)); + lat = phi2z(this.e, ts); + if (lat === -9999) { + return null; + } + } + lon = adjust_lon(this.long0 + x / (this.a * this.k0)); + + p.x = lon; + p.y = lat; + return p; + } + + var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"]; + var merc = { + init: init, + forward: forward, + inverse: inverse, + names: names$1 + }; + + function init$1() { + //no-op for longlat + } + + function identity(pt) { + return pt; + } + var names$2 = ["longlat", "identity"]; + var longlat = { + init: init$1, + forward: identity, + inverse: identity, + names: names$2 + }; + + var projs = [merc, longlat]; + var names = {}; + var projStore = []; + + function add(proj, i) { + var len = projStore.length; + if (!proj.names) { + console.log(i); + return true; + } + projStore[len] = proj; + proj.names.forEach(function(n) { + names[n.toLowerCase()] = len; + }); + return this; + } + + function get(name) { + if (!name) { + return false; + } + var n = name.toLowerCase(); + if (typeof names[n] !== 'undefined' && projStore[names[n]]) { + return projStore[names[n]]; + } + } + + function start() { + projs.forEach(add); + } + var projections = { + start: start, + add: add, + get: get + }; + + var exports$2 = {}; + exports$2.MERIT = { + a: 6378137.0, + rf: 298.257, + ellipseName: "MERIT 1983" + }; + + exports$2.SGS85 = { + a: 6378136.0, + rf: 298.257, + ellipseName: "Soviet Geodetic System 85" + }; + + exports$2.GRS80 = { + a: 6378137.0, + rf: 298.257222101, + ellipseName: "GRS 1980(IUGG, 1980)" + }; + + exports$2.IAU76 = { + a: 6378140.0, + rf: 298.257, + ellipseName: "IAU 1976" + }; + + exports$2.airy = { + a: 6377563.396, + b: 6356256.910, + ellipseName: "Airy 1830" + }; + + exports$2.APL4 = { + a: 6378137, + rf: 298.25, + ellipseName: "Appl. Physics. 1965" + }; + + exports$2.NWL9D = { + a: 6378145.0, + rf: 298.25, + ellipseName: "Naval Weapons Lab., 1965" + }; + + exports$2.mod_airy = { + a: 6377340.189, + b: 6356034.446, + ellipseName: "Modified Airy" + }; + + exports$2.andrae = { + a: 6377104.43, + rf: 300.0, + ellipseName: "Andrae 1876 (Den., Iclnd.)" + }; + + exports$2.aust_SA = { + a: 6378160.0, + rf: 298.25, + ellipseName: "Australian Natl & S. Amer. 1969" + }; + + exports$2.GRS67 = { + a: 6378160.0, + rf: 298.2471674270, + ellipseName: "GRS 67(IUGG 1967)" + }; + + exports$2.bessel = { + a: 6377397.155, + rf: 299.1528128, + ellipseName: "Bessel 1841" + }; + + exports$2.bess_nam = { + a: 6377483.865, + rf: 299.1528128, + ellipseName: "Bessel 1841 (Namibia)" + }; + + exports$2.clrk66 = { + a: 6378206.4, + b: 6356583.8, + ellipseName: "Clarke 1866" + }; + + exports$2.clrk80 = { + a: 6378249.145, + rf: 293.4663, + ellipseName: "Clarke 1880 mod." + }; + + exports$2.clrk58 = { + a: 6378293.645208759, + rf: 294.2606763692654, + ellipseName: "Clarke 1858" + }; + + exports$2.CPM = { + a: 6375738.7, + rf: 334.29, + ellipseName: "Comm. des Poids et Mesures 1799" + }; + + exports$2.delmbr = { + a: 6376428.0, + rf: 311.5, + ellipseName: "Delambre 1810 (Belgium)" + }; + + exports$2.engelis = { + a: 6378136.05, + rf: 298.2566, + ellipseName: "Engelis 1985" + }; + + exports$2.evrst30 = { + a: 6377276.345, + rf: 300.8017, + ellipseName: "Everest 1830" + }; + + exports$2.evrst48 = { + a: 6377304.063, + rf: 300.8017, + ellipseName: "Everest 1948" + }; + + exports$2.evrst56 = { + a: 6377301.243, + rf: 300.8017, + ellipseName: "Everest 1956" + }; + + exports$2.evrst69 = { + a: 6377295.664, + rf: 300.8017, + ellipseName: "Everest 1969" + }; + + exports$2.evrstSS = { + a: 6377298.556, + rf: 300.8017, + ellipseName: "Everest (Sabah & Sarawak)" + }; + + exports$2.fschr60 = { + a: 6378166.0, + rf: 298.3, + ellipseName: "Fischer (Mercury Datum) 1960" + }; + + exports$2.fschr60m = { + a: 6378155.0, + rf: 298.3, + ellipseName: "Fischer 1960" + }; + + exports$2.fschr68 = { + a: 6378150.0, + rf: 298.3, + ellipseName: "Fischer 1968" + }; + + exports$2.helmert = { + a: 6378200.0, + rf: 298.3, + ellipseName: "Helmert 1906" + }; + + exports$2.hough = { + a: 6378270.0, + rf: 297.0, + ellipseName: "Hough" + }; + + exports$2.intl = { + a: 6378388.0, + rf: 297.0, + ellipseName: "International 1909 (Hayford)" + }; + + exports$2.kaula = { + a: 6378163.0, + rf: 298.24, + ellipseName: "Kaula 1961" + }; + + exports$2.lerch = { + a: 6378139.0, + rf: 298.257, + ellipseName: "Lerch 1979" + }; + + exports$2.mprts = { + a: 6397300.0, + rf: 191.0, + ellipseName: "Maupertius 1738" + }; + + exports$2.new_intl = { + a: 6378157.5, + b: 6356772.2, + ellipseName: "New International 1967" + }; + + exports$2.plessis = { + a: 6376523.0, + rf: 6355863.0, + ellipseName: "Plessis 1817 (France)" + }; + + exports$2.krass = { + a: 6378245.0, + rf: 298.3, + ellipseName: "Krassovsky, 1942" + }; + + exports$2.SEasia = { + a: 6378155.0, + b: 6356773.3205, + ellipseName: "Southeast Asia" + }; + + exports$2.walbeck = { + a: 6376896.0, + b: 6355834.8467, + ellipseName: "Walbeck" + }; + + exports$2.WGS60 = { + a: 6378165.0, + rf: 298.3, + ellipseName: "WGS 60" + }; + + exports$2.WGS66 = { + a: 6378145.0, + rf: 298.25, + ellipseName: "WGS 66" + }; + + exports$2.WGS7 = { + a: 6378135.0, + rf: 298.26, + ellipseName: "WGS 72" + }; + + var WGS84 = exports$2.WGS84 = { + a: 6378137.0, + rf: 298.257223563, + ellipseName: "WGS 84" + }; + + exports$2.sphere = { + a: 6370997.0, + b: 6370997.0, + ellipseName: "Normal Sphere (r=6370997)" + }; + + function eccentricity(a, b, rf, R_A) { + var a2 = a * a; // used in geocentric + var b2 = b * b; // used in geocentric + var es = (a2 - b2) / a2; // e ^ 2 + var e = 0; + if (R_A) { + a *= 1 - es * (SIXTH + es * (RA4 + es * RA6)); + a2 = a * a; + es = 0; + } else { + e = Math.sqrt(es); // eccentricity + } + var ep2 = (a2 - b2) / b2; // used in geocentric + return { + es: es, + e: e, + ep2: ep2 + }; + } + function sphere(a, b, rf, ellps, sphere) { + if (!a) { // do we have an ellipsoid? + var ellipse = match(exports$2, ellps); + if (!ellipse) { + ellipse = WGS84; + } + a = ellipse.a; + b = ellipse.b; + rf = ellipse.rf; + } + + if (rf && !b) { + b = (1.0 - 1.0 / rf) * a; + } + if (rf === 0 || Math.abs(a - b) < EPSLN) { + sphere = true; + b = a; + } + return { + a: a, + b: b, + rf: rf, + sphere: sphere + }; + } + + var exports$3 = {}; + exports$3.wgs84 = { + towgs84: "0,0,0", + ellipse: "WGS84", + datumName: "WGS84" + }; + + exports$3.ch1903 = { + towgs84: "674.374,15.056,405.346", + ellipse: "bessel", + datumName: "swiss" + }; + + exports$3.ggrs87 = { + towgs84: "-199.87,74.79,246.62", + ellipse: "GRS80", + datumName: "Greek_Geodetic_Reference_System_1987" + }; + + exports$3.nad83 = { + towgs84: "0,0,0", + ellipse: "GRS80", + datumName: "North_American_Datum_1983" + }; + + exports$3.nad27 = { + nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", + ellipse: "clrk66", + datumName: "North_American_Datum_1927" + }; + + exports$3.potsdam = { + towgs84: "606.0,23.0,413.0", + ellipse: "bessel", + datumName: "Potsdam Rauenberg 1950 DHDN" + }; + + exports$3.carthage = { + towgs84: "-263.0,6.0,431.0", + ellipse: "clark80", + datumName: "Carthage 1934 Tunisia" + }; + + exports$3.hermannskogel = { + towgs84: "653.0,-212.0,449.0", + ellipse: "bessel", + datumName: "Hermannskogel" + }; + + exports$3.osni52 = { + towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", + ellipse: "airy", + datumName: "Irish National" + }; + + exports$3.ire65 = { + towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", + ellipse: "mod_airy", + datumName: "Ireland 1965" + }; + + exports$3.rassadiran = { + towgs84: "-133.63,-157.5,-158.62", + ellipse: "intl", + datumName: "Rassadiran" + }; + + exports$3.nzgd49 = { + towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", + ellipse: "intl", + datumName: "New Zealand Geodetic Datum 1949" + }; + + exports$3.osgb36 = { + towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", + ellipse: "airy", + datumName: "Airy 1830" + }; + + exports$3.s_jtsk = { + towgs84: "589,76,480", + ellipse: 'bessel', + datumName: 'S-JTSK (Ferro)' + }; + + exports$3.beduaram = { + towgs84: '-106,-87,188', + ellipse: 'clrk80', + datumName: 'Beduaram' + }; + + exports$3.gunung_segara = { + towgs84: '-403,684,41', + ellipse: 'bessel', + datumName: 'Gunung Segara Jakarta' + }; + + exports$3.rnb72 = { + towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1", + ellipse: "intl", + datumName: "Reseau National Belge 1972" + }; + + function datum(datumCode, datum_params, a, b, es, ep2) { + var out = {}; + + if (datumCode === undefined || datumCode === 'none') { + out.datum_type = PJD_NODATUM; + } else { + out.datum_type = PJD_WGS84; + } + + if (datum_params) { + out.datum_params = datum_params.map(parseFloat); + if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) { + out.datum_type = PJD_3PARAM; + } + if (out.datum_params.length > 3) { + if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) { + out.datum_type = PJD_7PARAM; + out.datum_params[3] *= SEC_TO_RAD; + out.datum_params[4] *= SEC_TO_RAD; + out.datum_params[5] *= SEC_TO_RAD; + out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0; + } + } + } + + out.a = a; //datum object also uses these values + out.b = b; + out.es = es; + out.ep2 = ep2; + return out; + } + + function Projection(srsCode,callback) { + if (!(this instanceof Projection)) { + return new Projection(srsCode); + } + callback = callback || function(error){ + if(error){ + throw error; + } + }; + var json = parse(srsCode); + if(typeof json !== 'object'){ + callback(srsCode); + return; + } + var ourProj = Projection.projections.get(json.projName); + if(!ourProj){ + callback(srsCode); + return; + } + if (json.datumCode && json.datumCode !== 'none') { + var datumDef = match(exports$3, json.datumCode); + if (datumDef) { + json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null; + json.ellps = datumDef.ellipse; + json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode; + } + } + json.k0 = json.k0 || 1.0; + json.axis = json.axis || 'enu'; + json.ellps = json.ellps || 'wgs84'; + var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere); + var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A); + var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2); + + extend(this, json); // transfer everything over from the projection because we don't know what we'll need + extend(this, ourProj); // transfer all the methods from the projection + + // copy the 4 things over we calulated in deriveConstants.sphere + this.a = sphere_.a; + this.b = sphere_.b; + this.rf = sphere_.rf; + this.sphere = sphere_.sphere; + + // copy the 3 things we calculated in deriveConstants.eccentricity + this.es = ecc.es; + this.e = ecc.e; + this.ep2 = ecc.ep2; + + // add in the datum object + this.datum = datumObj; + + // init the projection + this.init(); + + // legecy callback from back in the day when it went to spatialreference.org + callback(null, this); + + } + Projection.projections = projections; + Projection.projections.start(); + + 'use strict'; + function compareDatums(source, dest) { + if (source.datum_type !== dest.datum_type) { + return false; // false, datums are not equal + } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) { + // the tolerance for es is to ensure that GRS80 and WGS84 + // are considered identical + return false; + } else if (source.datum_type === PJD_3PARAM) { + 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]); + } else if (source.datum_type === PJD_7PARAM) { + 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]); + } else { + return true; // datums are equal + } + } // cs_compare_datums() + + /* + * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates + * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), + * according to the current ellipsoid parameters. + * + * Latitude : Geodetic latitude in radians (input) + * Longitude : Geodetic longitude in radians (input) + * Height : Geodetic height, in meters (input) + * X : Calculated Geocentric X coordinate, in meters (output) + * Y : Calculated Geocentric Y coordinate, in meters (output) + * Z : Calculated Geocentric Z coordinate, in meters (output) + * + */ + function geodeticToGeocentric(p, es, a) { + var Longitude = p.x; + var Latitude = p.y; + var Height = p.z ? p.z : 0; //Z value not always supplied + + var Rn; /* Earth radius at location */ + var Sin_Lat; /* Math.sin(Latitude) */ + var Sin2_Lat; /* Square of Math.sin(Latitude) */ + var Cos_Lat; /* Math.cos(Latitude) */ + + /* + ** Don't blow up if Latitude is just a little out of the value + ** range as it may just be a rounding issue. Also removed longitude + ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001. + */ + if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) { + Latitude = -HALF_PI; + } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) { + Latitude = HALF_PI; + } else if (Latitude < -HALF_PI) { + /* Latitude out of range */ + //..reportError('geocent:lat out of range:' + Latitude); + return { x: -Infinity, y: -Infinity, z: p.z }; + } else if (Latitude > HALF_PI) { + /* Latitude out of range */ + return { x: Infinity, y: Infinity, z: p.z }; + } + + if (Longitude > Math.PI) { + Longitude -= (2 * Math.PI); + } + Sin_Lat = Math.sin(Latitude); + Cos_Lat = Math.cos(Latitude); + Sin2_Lat = Sin_Lat * Sin_Lat; + Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat)); + return { + x: (Rn + Height) * Cos_Lat * Math.cos(Longitude), + y: (Rn + Height) * Cos_Lat * Math.sin(Longitude), + z: ((Rn * (1 - es)) + Height) * Sin_Lat + }; + } // cs_geodetic_to_geocentric() + + function geocentricToGeodetic(p, es, a, b) { + /* local defintions and variables */ + /* end-criterium of loop, accuracy of sin(Latitude) */ + var genau = 1e-12; + var genau2 = (genau * genau); + var maxiter = 30; + + var P; /* distance between semi-minor axis and location */ + var RR; /* distance between center and location */ + var CT; /* sin of geocentric latitude */ + var ST; /* cos of geocentric latitude */ + var RX; + var RK; + var RN; /* Earth radius at location */ + var CPHI0; /* cos of start or old geodetic latitude in iterations */ + var SPHI0; /* sin of start or old geodetic latitude in iterations */ + var CPHI; /* cos of searched geodetic latitude */ + var SPHI; /* sin of searched geodetic latitude */ + var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ + var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ + + var X = p.x; + var Y = p.y; + var Z = p.z ? p.z : 0.0; //Z value not always supplied + var Longitude; + var Latitude; + var Height; + + P = Math.sqrt(X * X + Y * Y); + RR = Math.sqrt(X * X + Y * Y + Z * Z); + + /* special cases for latitude and longitude */ + if (P / a < genau) { + + /* special case, if P=0. (X=0., Y=0.) */ + Longitude = 0.0; + + /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis + * of ellipsoid (=center of mass), Latitude becomes PI/2 */ + if (RR / a < genau) { + Latitude = HALF_PI; + Height = -b; + return { + x: p.x, + y: p.y, + z: p.z + }; + } + } else { + /* ellipsoidal (geodetic) longitude + * interval: -PI < Longitude <= +PI */ + Longitude = Math.atan2(Y, X); + } + + /* -------------------------------------------------------------- + * Following iterative algorithm was developped by + * "Institut for Erdmessung", University of Hannover, July 1988. + * Internet: www.ife.uni-hannover.de + * Iterative computation of CPHI,SPHI and Height. + * Iteration of CPHI and SPHI to 10**-12 radian resp. + * 2*10**-7 arcsec. + * -------------------------------------------------------------- + */ + CT = Z / RR; + ST = P / RR; + RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST); + CPHI0 = ST * (1.0 - es) * RX; + SPHI0 = CT * RX; + iter = 0; + + /* loop to find sin(Latitude) resp. Latitude + * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ + do { + iter++; + RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0); + + /* ellipsoidal (geodetic) height */ + Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0); + + RK = es * RN / (RN + Height); + RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST); + CPHI = ST * (1.0 - RK) * RX; + SPHI = CT * RX; + SDPHI = SPHI * CPHI0 - CPHI * SPHI0; + CPHI0 = CPHI; + SPHI0 = SPHI; + } + while (SDPHI * SDPHI > genau2 && iter < maxiter); + + /* ellipsoidal (geodetic) latitude */ + Latitude = Math.atan(SPHI / Math.abs(CPHI)); + return { + x: Longitude, + y: Latitude, + z: Height + }; + } // cs_geocentric_to_geodetic() + + /****************************************************************/ + // pj_geocentic_to_wgs84( p ) + // p = point to transform in geocentric coordinates (x,y,z) + + + /** point object, nothing fancy, just allows values to be + passed back and forth by reference rather than by value. + Other point classes may be used as long as they have + x and y properties, which will get modified in the transform method. + */ + function geocentricToWgs84(p, datum_type, datum_params) { + + if (datum_type === PJD_3PARAM) { + // if( x[io] === HUGE_VAL ) + // continue; + return { + x: p.x + datum_params[0], + y: p.y + datum_params[1], + z: p.z + datum_params[2], + }; + } else if (datum_type === PJD_7PARAM) { + var Dx_BF = datum_params[0]; + var Dy_BF = datum_params[1]; + var Dz_BF = datum_params[2]; + var Rx_BF = datum_params[3]; + var Ry_BF = datum_params[4]; + var Rz_BF = datum_params[5]; + var M_BF = datum_params[6]; + // if( x[io] === HUGE_VAL ) + // continue; + return { + x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF, + y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF, + z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF + }; + } + } // cs_geocentric_to_wgs84 + + /****************************************************************/ + // pj_geocentic_from_wgs84() + // coordinate system definition, + // point to transform in geocentric coordinates (x,y,z) + function geocentricFromWgs84(p, datum_type, datum_params) { + + if (datum_type === PJD_3PARAM) { + //if( x[io] === HUGE_VAL ) + // continue; + return { + x: p.x - datum_params[0], + y: p.y - datum_params[1], + z: p.z - datum_params[2], + }; + + } else if (datum_type === PJD_7PARAM) { + var Dx_BF = datum_params[0]; + var Dy_BF = datum_params[1]; + var Dz_BF = datum_params[2]; + var Rx_BF = datum_params[3]; + var Ry_BF = datum_params[4]; + var Rz_BF = datum_params[5]; + var M_BF = datum_params[6]; + var x_tmp = (p.x - Dx_BF) / M_BF; + var y_tmp = (p.y - Dy_BF) / M_BF; + var z_tmp = (p.z - Dz_BF) / M_BF; + //if( x[io] === HUGE_VAL ) + // continue; + + return { + x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp, + y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp, + z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp + }; + } //cs_geocentric_from_wgs84() + } + + function checkParams(type) { + return (type === PJD_3PARAM || type === PJD_7PARAM); + } + + var datum_transform = function(source, dest, point) { + // Short cut if the datums are identical. + if (compareDatums(source, dest)) { + return point; // in this case, zero is sucess, + // whereas cs_compare_datums returns 1 to indicate TRUE + // confusing, should fix this + } + + // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest + if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) { + return point; + } + + // If this datum requires grid shifts, then apply it to geodetic coordinates. + + // Do we need to go through geocentric coordinates? + if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) { + return point; + } + + // Convert to geocentric coordinates. + point = geodeticToGeocentric(point, source.es, source.a); + // Convert between datums + if (checkParams(source.datum_type)) { + point = geocentricToWgs84(point, source.datum_type, source.datum_params); + } + if (checkParams(dest.datum_type)) { + point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params); + } + return geocentricToGeodetic(point, dest.es, dest.a, dest.b); + + }; + + var adjust_axis = function(crs, denorm, point) { + var xin = point.x, + yin = point.y, + zin = point.z || 0.0; + var v, t, i; + var out = {}; + for (i = 0; i < 3; i++) { + if (denorm && i === 2 && point.z === undefined) { + continue; + } + if (i === 0) { + v = xin; + t = 'x'; + } + else if (i === 1) { + v = yin; + t = 'y'; + } + else { + v = zin; + t = 'z'; + } + switch (crs.axis[i]) { + case 'e': + out[t] = v; + break; + case 'w': + out[t] = -v; + break; + case 'n': + out[t] = v; + break; + case 's': + out[t] = -v; + break; + case 'u': + if (point[t] !== undefined) { + out.z = v; + } + break; + case 'd': + if (point[t] !== undefined) { + out.z = -v; + } + break; + default: + //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName); + return null; + } + } + return out; + }; + + var toPoint = function (array){ + var out = { + x: array[0], + y: array[1] + }; + if (array.length>2) { + out.z = array[2]; + } + if (array.length>3) { + out.m = array[3]; + } + return out; + }; + + var checkSanity = function (point) { + checkCoord(point.x); + checkCoord(point.y); + }; + function checkCoord(num) { + if (typeof Number.isFinite === 'function') { + if (Number.isFinite(num)) { + return; + } + throw new TypeError('coordinates must be finite numbers'); + } + if (typeof num !== 'number' || num !== num || !isFinite(num)) { + throw new TypeError('coordinates must be finite numbers'); + } + } + + function checkNotWGS(source, dest) { + 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'); + } + + function transform(source, dest, point) { + var wgs84; + if (Array.isArray(point)) { + point = toPoint(point); + } + checkSanity(point); + // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84 + if (source.datum && dest.datum && checkNotWGS(source, dest)) { + wgs84 = new Projection('WGS84'); + point = transform(source, wgs84, point); + source = wgs84; + } + // DGR, 2010/11/12 + if (source.axis !== 'enu') { + point = adjust_axis(source, false, point); + } + // Transform source points to long/lat, if they aren't already. + if (source.projName === 'longlat') { + point = { + x: point.x * D2R, + y: point.y * D2R + }; + } + else { + if (source.to_meter) { + point = { + x: point.x * source.to_meter, + y: point.y * source.to_meter + }; + } + point = source.inverse(point); // Convert Cartesian to longlat + } + // Adjust for the prime meridian if necessary + if (source.from_greenwich) { + point.x += source.from_greenwich; + } + + // Convert datums if needed, and if possible. + point = datum_transform(source.datum, dest.datum, point); + + // Adjust for the prime meridian if necessary + if (dest.from_greenwich) { + point = { + x: point.x - dest.from_greenwich, + y: point.y + }; + } + + if (dest.projName === 'longlat') { + // convert radians to decimal degrees + point = { + x: point.x * R2D, + y: point.y * R2D + }; + } else { // else project + point = dest.forward(point); + if (dest.to_meter) { + point = { + x: point.x / dest.to_meter, + y: point.y / dest.to_meter + }; + } + } + + // DGR, 2010/11/12 + if (dest.axis !== 'enu') { + return adjust_axis(dest, true, point); + } + + return point; + } + + var wgs84 = Projection('WGS84'); + + function transformer(from, to, coords) { + var transformedArray, out, keys; + if (Array.isArray(coords)) { + transformedArray = transform(from, to, coords); + if (coords.length === 3) { + return [transformedArray.x, transformedArray.y, transformedArray.z]; + } + else { + return [transformedArray.x, transformedArray.y]; + } + } + else { + out = transform(from, to, coords); + keys = Object.keys(coords); + if (keys.length === 2) { + return out; + } + keys.forEach(function (key) { + if (key === 'x' || key === 'y') { + return; + } + out[key] = coords[key]; + }); + return out; + } + } + + function checkProj(item) { + if (item instanceof Projection) { + return item; + } + if (item.oProj) { + return item.oProj; + } + return Projection(item); + } + function proj4$1(fromProj, toProj, coord) { + fromProj = checkProj(fromProj); + var single = false; + var obj; + if (typeof toProj === 'undefined') { + toProj = fromProj; + fromProj = wgs84; + single = true; + } + else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) { + coord = toProj; + toProj = fromProj; + fromProj = wgs84; + single = true; + } + toProj = checkProj(toProj); + if (coord) { + return transformer(fromProj, toProj, coord); + } + else { + obj = { + forward: function(coords) { + return transformer(fromProj, toProj, coords); + }, + inverse: function(coords) { + return transformer(toProj, fromProj, coords); + } + }; + if (single) { + obj.oProj = toProj; + } + return obj; + } + } + + /** + * UTM zones are grouped, and assigned to one of a group of 6 + * sets. + * + * {int} @private + */ + var NUM_100K_SETS = 6; + + /** + * The column letters (for easting) of the lower left value, per + * set. + * + * {string} @private + */ + var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS'; + + /** + * The row letters (for northing) of the lower left value, per + * set. + * + * {string} @private + */ + var SET_ORIGIN_ROW_LETTERS = 'AFAFAF'; + + var A = 65; // A + var I = 73; // I + var O = 79; // O + var V = 86; // V + var Z = 90; // Z + var mgrs = { + forward: forward$1, + inverse: inverse$1, + toPoint: toPoint$1 + }; + /** + * Conversion of lat/lon to MGRS. + * + * @param {object} ll Object literal with lat and lon properties on a + * WGS84 ellipsoid. + * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for + * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5. + * @return {string} the MGRS string for the given location and accuracy. + */ + function forward$1(ll, accuracy) { + accuracy = accuracy || 5; // default accuracy 1m + return encode(LLtoUTM({ + lat: ll[1], + lon: ll[0] + }), accuracy); + } + + /** + * Conversion of MGRS to lat/lon. + * + * @param {string} mgrs MGRS string. + * @return {array} An array with left (longitude), bottom (latitude), right + * (longitude) and top (latitude) values in WGS84, representing the + * bounding box for the provided MGRS reference. + */ + function inverse$1(mgrs) { + var bbox = UTMtoLL(decode(mgrs.toUpperCase())); + if (bbox.lat && bbox.lon) { + return [bbox.lon, bbox.lat, bbox.lon, bbox.lat]; + } + return [bbox.left, bbox.bottom, bbox.right, bbox.top]; + } + + function toPoint$1(mgrs) { + var bbox = UTMtoLL(decode(mgrs.toUpperCase())); + if (bbox.lat && bbox.lon) { + return [bbox.lon, bbox.lat]; + } + return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2]; + } + /** + * Conversion from degrees to radians. + * + * @private + * @param {number} deg the angle in degrees. + * @return {number} the angle in radians. + */ + function degToRad(deg) { + return (deg * (Math.PI / 180.0)); + } + + /** + * Conversion from radians to degrees. + * + * @private + * @param {number} rad the angle in radians. + * @return {number} the angle in degrees. + */ + function radToDeg(rad) { + return (180.0 * (rad / Math.PI)); + } + + /** + * Converts a set of Longitude and Latitude co-ordinates to UTM + * using the WGS84 ellipsoid. + * + * @private + * @param {object} ll Object literal with lat and lon properties + * representing the WGS84 coordinate to be converted. + * @return {object} Object literal containing the UTM value with easting, + * northing, zoneNumber and zoneLetter properties, and an optional + * accuracy property in digits. Returns null if the conversion failed. + */ + function LLtoUTM(ll) { + var Lat = ll.lat; + var Long = ll.lon; + var a = 6378137.0; //ellip.radius; + var eccSquared = 0.00669438; //ellip.eccsq; + var k0 = 0.9996; + var LongOrigin; + var eccPrimeSquared; + var N, T, C, A, M; + var LatRad = degToRad(Lat); + var LongRad = degToRad(Long); + var LongOriginRad; + var ZoneNumber; + // (int) + ZoneNumber = Math.floor((Long + 180) / 6) + 1; + + //Make sure the longitude 180.00 is in Zone 60 + if (Long === 180) { + ZoneNumber = 60; + } + + // Special zone for Norway + if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { + ZoneNumber = 32; + } + + // Special zones for Svalbard + if (Lat >= 72.0 && Lat < 84.0) { + if (Long >= 0.0 && Long < 9.0) { + ZoneNumber = 31; + } + else if (Long >= 9.0 && Long < 21.0) { + ZoneNumber = 33; + } + else if (Long >= 21.0 && Long < 33.0) { + ZoneNumber = 35; + } + else if (Long >= 33.0 && Long < 42.0) { + ZoneNumber = 37; + } + } + + LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin + // in middle of + // zone + LongOriginRad = degToRad(LongOrigin); + + eccPrimeSquared = (eccSquared) / (1 - eccSquared); + + N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad)); + T = Math.tan(LatRad) * Math.tan(LatRad); + C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad); + A = Math.cos(LatRad) * (LongRad - LongOriginRad); + + 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)); + + 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); + + 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))); + if (Lat < 0.0) { + UTMNorthing += 10000000.0; //10000000 meter offset for + // southern hemisphere + } + + return { + northing: Math.round(UTMNorthing), + easting: Math.round(UTMEasting), + zoneNumber: ZoneNumber, + zoneLetter: getLetterDesignator(Lat) + }; + } + + /** + * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience + * class where the Zone can be specified as a single string eg."60N" which + * is then broken down into the ZoneNumber and ZoneLetter. + * + * @private + * @param {object} utm An object literal with northing, easting, zoneNumber + * and zoneLetter properties. If an optional accuracy property is + * provided (in meters), a bounding box will be returned instead of + * latitude and longitude. + * @return {object} An object literal containing either lat and lon values + * (if no accuracy was provided), or top, right, bottom and left values + * for the bounding box calculated according to the provided accuracy. + * Returns null if the conversion failed. + */ + function UTMtoLL(utm) { + + var UTMNorthing = utm.northing; + var UTMEasting = utm.easting; + var zoneLetter = utm.zoneLetter; + var zoneNumber = utm.zoneNumber; + // check the ZoneNummber is valid + if (zoneNumber < 0 || zoneNumber > 60) { + return null; + } + + var k0 = 0.9996; + var a = 6378137.0; //ellip.radius; + var eccSquared = 0.00669438; //ellip.eccsq; + var eccPrimeSquared; + var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared)); + var N1, T1, C1, R1, D, M; + var LongOrigin; + var mu, phi1Rad; + + // remove 500,000 meter offset for longitude + var x = UTMEasting - 500000.0; + var y = UTMNorthing; + + // We must know somehow if we are in the Northern or Southern + // hemisphere, this is the only time we use the letter So even + // if the Zone letter isn't exactly correct it should indicate + // the hemisphere correctly + if (zoneLetter < 'N') { + y -= 10000000.0; // remove 10,000,000 meter offset used + // for southern hemisphere + } + + // There are 60 zones with zone 1 being at West -180 to -174 + LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin + // in middle of + // zone + + eccPrimeSquared = (eccSquared) / (1 - eccSquared); + + M = y / k0; + mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256)); + + 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); + // double phi1 = ProjMath.radToDeg(phi1Rad); + + N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad)); + T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad); + C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad); + R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5); + D = x / (N1 * k0); + + 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); + lat = radToDeg(lat); + + 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); + lon = LongOrigin + radToDeg(lon); + + var result; + if (utm.accuracy) { + var topRight = UTMtoLL({ + northing: utm.northing + utm.accuracy, + easting: utm.easting + utm.accuracy, + zoneLetter: utm.zoneLetter, + zoneNumber: utm.zoneNumber + }); + result = { + top: topRight.lat, + right: topRight.lon, + bottom: lat, + left: lon + }; + } + else { + result = { + lat: lat, + lon: lon + }; + } + return result; + } + + /** + * Calculates the MGRS letter designator for the given latitude. + * + * @private + * @param {number} lat The latitude in WGS84 to get the letter designator + * for. + * @return {char} The letter designator. + */ + function getLetterDesignator(lat) { + //This is here as an error flag to show that the Latitude is + //outside MGRS limits + var LetterDesignator = 'Z'; + + if ((84 >= lat) && (lat >= 72)) { + LetterDesignator = 'X'; + } + else if ((72 > lat) && (lat >= 64)) { + LetterDesignator = 'W'; + } + else if ((64 > lat) && (lat >= 56)) { + LetterDesignator = 'V'; + } + else if ((56 > lat) && (lat >= 48)) { + LetterDesignator = 'U'; + } + else if ((48 > lat) && (lat >= 40)) { + LetterDesignator = 'T'; + } + else if ((40 > lat) && (lat >= 32)) { + LetterDesignator = 'S'; + } + else if ((32 > lat) && (lat >= 24)) { + LetterDesignator = 'R'; + } + else if ((24 > lat) && (lat >= 16)) { + LetterDesignator = 'Q'; + } + else if ((16 > lat) && (lat >= 8)) { + LetterDesignator = 'P'; + } + else if ((8 > lat) && (lat >= 0)) { + LetterDesignator = 'N'; + } + else if ((0 > lat) && (lat >= -8)) { + LetterDesignator = 'M'; + } + else if ((-8 > lat) && (lat >= -16)) { + LetterDesignator = 'L'; + } + else if ((-16 > lat) && (lat >= -24)) { + LetterDesignator = 'K'; + } + else if ((-24 > lat) && (lat >= -32)) { + LetterDesignator = 'J'; + } + else if ((-32 > lat) && (lat >= -40)) { + LetterDesignator = 'H'; + } + else if ((-40 > lat) && (lat >= -48)) { + LetterDesignator = 'G'; + } + else if ((-48 > lat) && (lat >= -56)) { + LetterDesignator = 'F'; + } + else if ((-56 > lat) && (lat >= -64)) { + LetterDesignator = 'E'; + } + else if ((-64 > lat) && (lat >= -72)) { + LetterDesignator = 'D'; + } + else if ((-72 > lat) && (lat >= -80)) { + LetterDesignator = 'C'; + } + return LetterDesignator; + } + + /** + * Encodes a UTM location as MGRS string. + * + * @private + * @param {object} utm An object literal with easting, northing, + * zoneLetter, zoneNumber + * @param {number} accuracy Accuracy in digits (1-5). + * @return {string} MGRS string for the given UTM location. + */ + function encode(utm, accuracy) { + // prepend with leading zeroes + var seasting = "00000" + utm.easting, + snorthing = "00000" + utm.northing; + + return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy); + } + + /** + * Get the two letter 100k designator for a given UTM easting, + * northing and zone number value. + * + * @private + * @param {number} easting + * @param {number} northing + * @param {number} zoneNumber + * @return the two letter 100k designator for the given UTM location. + */ + function get100kID(easting, northing, zoneNumber) { + var setParm = get100kSetForZone(zoneNumber); + var setColumn = Math.floor(easting / 100000); + var setRow = Math.floor(northing / 100000) % 20; + return getLetter100kID(setColumn, setRow, setParm); + } + + /** + * Given a UTM zone number, figure out the MGRS 100K set it is in. + * + * @private + * @param {number} i An UTM zone number. + * @return {number} the 100k set the UTM zone is in. + */ + function get100kSetForZone(i) { + var setParm = i % NUM_100K_SETS; + if (setParm === 0) { + setParm = NUM_100K_SETS; + } + + return setParm; + } + + /** + * Get the two-letter MGRS 100k designator given information + * translated from the UTM northing, easting and zone number. + * + * @private + * @param {number} column the column index as it relates to the MGRS + * 100k set spreadsheet, created from the UTM easting. + * Values are 1-8. + * @param {number} row the row index as it relates to the MGRS 100k set + * spreadsheet, created from the UTM northing value. Values + * are from 0-19. + * @param {number} parm the set block, as it relates to the MGRS 100k set + * spreadsheet, created from the UTM zone. Values are from + * 1-60. + * @return two letter MGRS 100k code. + */ + function getLetter100kID(column, row, parm) { + // colOrigin and rowOrigin are the letters at the origin of the set + var index = parm - 1; + var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index); + var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index); + + // colInt and rowInt are the letters to build to return + var colInt = colOrigin + column - 1; + var rowInt = rowOrigin + row; + var rollover = false; + + if (colInt > Z) { + colInt = colInt - Z + A - 1; + rollover = true; + } + + if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) { + colInt++; + } + + if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) { + colInt++; + + if (colInt === I) { + colInt++; + } + } + + if (colInt > Z) { + colInt = colInt - Z + A - 1; + } + + if (rowInt > V) { + rowInt = rowInt - V + A - 1; + rollover = true; + } + else { + rollover = false; + } + + if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) { + rowInt++; + } + + if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) { + rowInt++; + + if (rowInt === I) { + rowInt++; + } + } + + if (rowInt > V) { + rowInt = rowInt - V + A - 1; + } + + var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt); + return twoLetter; + } + + /** + * Decode the UTM parameters from a MGRS string. + * + * @private + * @param {string} mgrsString an UPPERCASE coordinate string is expected. + * @return {object} An object literal with easting, northing, zoneLetter, + * zoneNumber and accuracy (in meters) properties. + */ + function decode(mgrsString) { + + if (mgrsString && mgrsString.length === 0) { + throw ("MGRSPoint coverting from nothing"); + } + + var length = mgrsString.length; + + var hunK = null; + var sb = ""; + var testChar; + var i = 0; + + // get Zone number + while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) { + if (i >= 2) { + throw ("MGRSPoint bad conversion from: " + mgrsString); + } + sb += testChar; + i++; + } + + var zoneNumber = parseInt(sb, 10); + + if (i === 0 || i + 3 > length) { + // A good MGRS string has to be 4-5 digits long, + // ##AAA/#AAA at least. + throw ("MGRSPoint bad conversion from: " + mgrsString); + } + + var zoneLetter = mgrsString.charAt(i++); + + // Should we check the zone letter here? Why not. + if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') { + throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString); + } + + hunK = mgrsString.substring(i, i += 2); + + var set = get100kSetForZone(zoneNumber); + + var east100k = getEastingFromChar(hunK.charAt(0), set); + var north100k = getNorthingFromChar(hunK.charAt(1), set); + + // We have a bug where the northing may be 2000000 too low. + // How + // do we know when to roll over? + + while (north100k < getMinNorthing(zoneLetter)) { + north100k += 2000000; + } + + // calculate the char index for easting/northing separator + var remainder = length - i; + + if (remainder % 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" + mgrsString); + } + + var sep = remainder / 2; + + var sepEasting = 0.0; + var sepNorthing = 0.0; + var accuracyBonus, sepEastingString, sepNorthingString, easting, northing; + if (sep > 0) { + accuracyBonus = 100000.0 / Math.pow(10, sep); + sepEastingString = mgrsString.substring(i, i + sep); + sepEasting = parseFloat(sepEastingString) * accuracyBonus; + sepNorthingString = mgrsString.substring(i + sep); + sepNorthing = parseFloat(sepNorthingString) * accuracyBonus; + } + + easting = sepEasting + east100k; + northing = sepNorthing + north100k; + + return { + easting: easting, + northing: northing, + zoneLetter: zoneLetter, + zoneNumber: zoneNumber, + accuracy: accuracyBonus + }; + } + + /** + * Given the first letter from a two-letter MGRS 100k zone, and given the + * MGRS table set for the zone number, figure out the easting value that + * should be added to the other, secondary easting value. + * + * @private + * @param {char} e The first letter from a two-letter MGRS 100´k zone. + * @param {number} set The MGRS table set for the zone number. + * @return {number} The easting value for the given letter and set. + */ + function getEastingFromChar(e, set) { + // colOrigin is the letter at the origin of the set for the + // column + var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1); + var eastingValue = 100000.0; + var rewindMarker = false; + + while (curCol !== e.charCodeAt(0)) { + curCol++; + if (curCol === I) { + curCol++; + } + if (curCol === O) { + curCol++; + } + if (curCol > Z) { + if (rewindMarker) { + throw ("Bad character: " + e); + } + curCol = A; + rewindMarker = true; + } + eastingValue += 100000.0; + } + + return eastingValue; + } + + /** + * Given the second letter from a two-letter MGRS 100k zone, and given the + * MGRS table set for the zone number, figure out the northing value that + * should be added to the other, secondary northing value. You have to + * remember that Northings are determined from the equator, and the vertical + * cycle of letters mean a 2000000 additional northing meters. This happens + * approx. every 18 degrees of latitude. This method does *NOT* count any + * additional northings. You have to figure out how many 2000000 meters need + * to be added for the zone letter of the MGRS coordinate. + * + * @private + * @param {char} n Second letter of the MGRS 100k zone + * @param {number} set The MGRS table set number, which is dependent on the + * UTM zone number. + * @return {number} The northing value for the given letter and set. + */ + function getNorthingFromChar(n, set) { + + if (n > 'V') { + throw ("MGRSPoint given invalid Northing " + n); + } + + // rowOrigin is the letter at the origin of the set for the + // column + var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1); + var northingValue = 0.0; + var rewindMarker = false; + + while (curRow !== n.charCodeAt(0)) { + curRow++; + if (curRow === I) { + curRow++; + } + if (curRow === O) { + curRow++; + } + // fixing a bug making whole application hang in this loop + // when 'n' is a wrong character + if (curRow > V) { + if (rewindMarker) { // making sure that this loop ends + throw ("Bad character: " + n); + } + curRow = A; + rewindMarker = true; + } + northingValue += 100000.0; + } + + return northingValue; + } + + /** + * The function getMinNorthing returns the minimum northing value of a MGRS + * zone. + * + * Ported from Geotrans' c Lattitude_Band_Value structure table. + * + * @private + * @param {char} zoneLetter The MGRS zone to get the min northing for. + * @return {number} + */ + function getMinNorthing(zoneLetter) { + var northing; + switch (zoneLetter) { + case 'C': + northing = 1100000.0; + break; + case 'D': + northing = 2000000.0; + break; + case 'E': + northing = 2800000.0; + break; + case 'F': + northing = 3700000.0; + break; + case 'G': + northing = 4600000.0; + break; + case 'H': + northing = 5500000.0; + break; + case 'J': + northing = 6400000.0; + break; + case 'K': + northing = 7300000.0; + break; + case 'L': + northing = 8200000.0; + break; + case 'M': + northing = 9100000.0; + break; + case 'N': + northing = 0.0; + break; + case 'P': + northing = 800000.0; + break; + case 'Q': + northing = 1700000.0; + break; + case 'R': + northing = 2600000.0; + break; + case 'S': + northing = 3500000.0; + break; + case 'T': + northing = 4400000.0; + break; + case 'U': + northing = 5300000.0; + break; + case 'V': + northing = 6200000.0; + break; + case 'W': + northing = 7000000.0; + break; + case 'X': + northing = 7900000.0; + break; + default: + northing = -1.0; + } + if (northing >= 0.0) { + return northing; + } + else { + throw ("Invalid zone letter: " + zoneLetter); + } + + } + + function Point(x, y, z) { + if (!(this instanceof Point)) { + return new Point(x, y, z); + } + if (Array.isArray(x)) { + this.x = x[0]; + this.y = x[1]; + this.z = x[2] || 0.0; + } else if(typeof x === 'object') { + this.x = x.x; + this.y = x.y; + this.z = x.z || 0.0; + } else if (typeof x === 'string' && typeof y === 'undefined') { + var coords = x.split(','); + this.x = parseFloat(coords[0], 10); + this.y = parseFloat(coords[1], 10); + this.z = parseFloat(coords[2], 10) || 0.0; + } else { + this.x = x; + this.y = y; + this.z = z || 0.0; + } + console.warn('proj4.Point will be removed in version 3, use proj4.toPoint'); + } + + Point.fromMGRS = function(mgrsStr) { + return new Point(toPoint$1(mgrsStr)); + }; + Point.prototype.toMGRS = function(accuracy) { + return forward$1([this.x, this.y], accuracy); + }; + + var version = "2.5.0"; + + var C00 = 1; + var C02 = 0.25; + var C04 = 0.046875; + var C06 = 0.01953125; + var C08 = 0.01068115234375; + var C22 = 0.75; + var C44 = 0.46875; + var C46 = 0.01302083333333333333; + var C48 = 0.00712076822916666666; + var C66 = 0.36458333333333333333; + var C68 = 0.00569661458333333333; + var C88 = 0.3076171875; + + var pj_enfn = function(es) { + var en = []; + en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); + en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); + var t = es * es; + en[2] = t * (C44 - es * (C46 + es * C48)); + t *= es; + en[3] = t * (C66 - es * C68); + en[4] = t * es * C88; + return en; + }; + + var pj_mlfn = function(phi, sphi, cphi, en) { + cphi *= sphi; + sphi *= sphi; + return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4])))); + }; + + var MAX_ITER = 20; + + var pj_inv_mlfn = function(arg, es, en) { + var k = 1 / (1 - es); + var phi = arg; + for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */ + var s = Math.sin(phi); + var t = 1 - es * s * s; + //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg; + //phi -= t * (t * Math.sqrt(t)) * k; + t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k; + phi -= t; + if (Math.abs(t) < EPSLN) { + return phi; + } + } + //..reportError("cass:pj_inv_mlfn: Convergence error"); + return phi; + }; + + // Heavily based on this tmerc projection implementation + // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js + + function init$2() { + this.x0 = this.x0 !== undefined ? this.x0 : 0; + this.y0 = this.y0 !== undefined ? this.y0 : 0; + this.long0 = this.long0 !== undefined ? this.long0 : 0; + this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; + + if (this.es) { + this.en = pj_enfn(this.es); + this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en); + } + } + + /** + Transverse Mercator Forward - long/lat to x/y + long/lat in radians + */ + function forward$2(p) { + var lon = p.x; + var lat = p.y; + + var delta_lon = adjust_lon(lon - this.long0); + var con; + var x, y; + var sin_phi = Math.sin(lat); + var cos_phi = Math.cos(lat); + + if (!this.es) { + var b = cos_phi * Math.sin(delta_lon); + + if ((Math.abs(Math.abs(b) - 1)) < EPSLN) { + return (93); + } + else { + x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0; + y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2)); + b = Math.abs(y); + + if (b >= 1) { + if ((b - 1) > EPSLN) { + return (93); + } + else { + y = 0; + } + } + else { + y = Math.acos(y); + } + + if (lat < 0) { + y = -y; + } + + y = this.a * this.k0 * (y - this.lat0) + this.y0; + } + } + else { + var al = cos_phi * delta_lon; + var als = Math.pow(al, 2); + var c = this.ep2 * Math.pow(cos_phi, 2); + var cs = Math.pow(c, 2); + var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0; + var t = Math.pow(tq, 2); + var ts = Math.pow(t, 2); + con = 1 - this.es * Math.pow(sin_phi, 2); + al = al / Math.sqrt(con); + var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en); + + x = this.a * (this.k0 * al * (1 + + als / 6 * (1 - t + c + + als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c + + als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) + + this.x0; + + y = this.a * (this.k0 * (ml - this.ml0 + + sin_phi * delta_lon * al / 2 * (1 + + als / 12 * (5 - t + 9 * c + 4 * cs + + als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c + + als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) + + this.y0; + } + + p.x = x; + p.y = y; + + return p; + } + + /** + Transverse Mercator Inverse - x/y to long/lat + */ + function inverse$2(p) { + var con, phi; + var lat, lon; + var x = (p.x - this.x0) * (1 / this.a); + var y = (p.y - this.y0) * (1 / this.a); + + if (!this.es) { + var f = Math.exp(x / this.k0); + var g = 0.5 * (f - 1 / f); + var temp = this.lat0 + y / this.k0; + var h = Math.cos(temp); + con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2))); + lat = Math.asin(con); + + if (y < 0) { + lat = -lat; + } + + if ((g === 0) && (h === 0)) { + lon = 0; + } + else { + lon = adjust_lon(Math.atan2(g, h) + this.long0); + } + } + else { // ellipsoidal form + con = this.ml0 + y / this.k0; + phi = pj_inv_mlfn(con, this.es, this.en); + + if (Math.abs(phi) < HALF_PI) { + var sin_phi = Math.sin(phi); + var cos_phi = Math.cos(phi); + var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0; + var c = this.ep2 * Math.pow(cos_phi, 2); + var cs = Math.pow(c, 2); + var t = Math.pow(tan_phi, 2); + var ts = Math.pow(t, 2); + con = 1 - this.es * Math.pow(sin_phi, 2); + var d = x * Math.sqrt(con) / this.k0; + var ds = Math.pow(d, 2); + con = con * tan_phi; + + lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 - + ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs - + ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c - + ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t)))); + + lon = adjust_lon(this.long0 + (d * (1 - + ds / 6 * (1 + 2 * t + c - + ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c - + ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi)); + } + else { + lat = HALF_PI * sign(y); + lon = 0; + } + } + + p.x = lon; + p.y = lat; + + return p; + } + + var names$3 = ["Transverse_Mercator", "Transverse Mercator", "tmerc"]; + var tmerc = { + init: init$2, + forward: forward$2, + inverse: inverse$2, + names: names$3 + }; + + var sinh = function(x) { + var r = Math.exp(x); + r = (r - 1 / r) / 2; + return r; + }; + + var hypot = function(x, y) { + x = Math.abs(x); + y = Math.abs(y); + var a = Math.max(x, y); + var b = Math.min(x, y) / (a ? a : 1); + + return a * Math.sqrt(1 + Math.pow(b, 2)); + }; + + var log1py = function(x) { + var y = 1 + x; + var z = y - 1; + + return z === 0 ? x : x * Math.log(y) / z; + }; + + var asinhy = function(x) { + var y = Math.abs(x); + y = log1py(y * (1 + y / (hypot(1, y) + 1))); + + return x < 0 ? -y : y; + }; + + var gatg = function(pp, B) { + var cos_2B = 2 * Math.cos(2 * B); + var i = pp.length - 1; + var h1 = pp[i]; + var h2 = 0; + var h; + + while (--i >= 0) { + h = -h2 + cos_2B * h1 + pp[i]; + h2 = h1; + h1 = h; + } + + return (B + h * Math.sin(2 * B)); + }; + + var clens = function(pp, arg_r) { + var r = 2 * Math.cos(arg_r); + var i = pp.length - 1; + var hr1 = pp[i]; + var hr2 = 0; + var hr; + + while (--i >= 0) { + hr = -hr2 + r * hr1 + pp[i]; + hr2 = hr1; + hr1 = hr; + } + + return Math.sin(arg_r) * hr; + }; + + var cosh = function(x) { + var r = Math.exp(x); + r = (r + 1 / r) / 2; + return r; + }; + + var clens_cmplx = function(pp, arg_r, arg_i) { + var sin_arg_r = Math.sin(arg_r); + var cos_arg_r = Math.cos(arg_r); + var sinh_arg_i = sinh(arg_i); + var cosh_arg_i = cosh(arg_i); + var r = 2 * cos_arg_r * cosh_arg_i; + var i = -2 * sin_arg_r * sinh_arg_i; + var j = pp.length - 1; + var hr = pp[j]; + var hi1 = 0; + var hr1 = 0; + var hi = 0; + var hr2; + var hi2; + + while (--j >= 0) { + hr2 = hr1; + hi2 = hi1; + hr1 = hr; + hi1 = hi; + hr = -hr2 + r * hr1 - i * hi1 + pp[j]; + hi = -hi2 + i * hr1 + r * hi1; + } + + r = sin_arg_r * cosh_arg_i; + i = cos_arg_r * sinh_arg_i; + + return [r * hr - i * hi, r * hi + i * hr]; + }; + + // Heavily based on this etmerc projection implementation + // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js + + function init$3() { + if (this.es === undefined || this.es <= 0) { + throw new Error('incorrect elliptical usage'); + } + + this.x0 = this.x0 !== undefined ? this.x0 : 0; + this.y0 = this.y0 !== undefined ? this.y0 : 0; + this.long0 = this.long0 !== undefined ? this.long0 : 0; + this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; + + this.cgb = []; + this.cbg = []; + this.utg = []; + this.gtu = []; + + var f = this.es / (1 + Math.sqrt(1 - this.es)); + var n = f / (2 - f); + var np = n; + + this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 )))))); + this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725)))))); + + np = np * n; + this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945))))); + this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945))))); + + np = np * n; + this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835)))); + this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835)))); + + np = np * n; + this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175))); + this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175))); + + np = np * n; + this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237)); + this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185)); + + np = np * n; + this.cgb[5] = np * (601676 / 22275); + this.cbg[5] = np * (444337 / 155925); + + np = Math.pow(n, 2); + this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256))); + + this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800)))))); + this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800)))))); + + this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720))))); + this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360))))); + + np = np * n; + this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 )))); + this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440)))); + + np = np * n; + this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600))); + this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600))); + + np = np * n; + this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680)); + this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840)); + + np = np * n; + this.utg[5] = np * (-20648693 / 638668800); + this.gtu[5] = np * (212378941 / 319334400); + + var Z = gatg(this.cbg, this.lat0); + this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z)); + } + + function forward$3(p) { + var Ce = adjust_lon(p.x - this.long0); + var Cn = p.y; + + Cn = gatg(this.cbg, Cn); + var sin_Cn = Math.sin(Cn); + var cos_Cn = Math.cos(Cn); + var sin_Ce = Math.sin(Ce); + var cos_Ce = Math.cos(Ce); + + Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn); + Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce)); + Ce = asinhy(Math.tan(Ce)); + + var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce); + + Cn = Cn + tmp[0]; + Ce = Ce + tmp[1]; + + var x; + var y; + + if (Math.abs(Ce) <= 2.623395162778) { + x = this.a * (this.Qn * Ce) + this.x0; + y = this.a * (this.Qn * Cn + this.Zb) + this.y0; + } + else { + x = Infinity; + y = Infinity; + } + + p.x = x; + p.y = y; + + return p; + } + + function inverse$3(p) { + var Ce = (p.x - this.x0) * (1 / this.a); + var Cn = (p.y - this.y0) * (1 / this.a); + + Cn = (Cn - this.Zb) / this.Qn; + Ce = Ce / this.Qn; + + var lon; + var lat; + + if (Math.abs(Ce) <= 2.623395162778) { + var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce); + + Cn = Cn + tmp[0]; + Ce = Ce + tmp[1]; + Ce = Math.atan(sinh(Ce)); + + var sin_Cn = Math.sin(Cn); + var cos_Cn = Math.cos(Cn); + var sin_Ce = Math.sin(Ce); + var cos_Ce = Math.cos(Ce); + + Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn)); + Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn); + + lon = adjust_lon(Ce + this.long0); + lat = gatg(this.cgb, Cn); + } + else { + lon = Infinity; + lat = Infinity; + } + + p.x = lon; + p.y = lat; + + return p; + } + + var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc"]; + var etmerc = { + init: init$3, + forward: forward$3, + inverse: inverse$3, + names: names$4 + }; + + var adjust_zone = function(zone, lon) { + if (zone === undefined) { + zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1; + + if (zone < 0) { + return 0; + } else if (zone > 60) { + return 60; + } + } + return zone; + }; + + var dependsOn = 'etmerc'; + function init$4() { + var zone = adjust_zone(this.zone, this.long0); + if (zone === undefined) { + throw new Error('unknown utm zone'); + } + this.lat0 = 0; + this.long0 = ((6 * Math.abs(zone)) - 183) * D2R; + this.x0 = 500000; + this.y0 = this.utmSouth ? 10000000 : 0; + this.k0 = 0.9996; + + etmerc.init.apply(this); + this.forward = etmerc.forward; + this.inverse = etmerc.inverse; + } + + var names$5 = ["Universal Transverse Mercator System", "utm"]; + var utm = { + init: init$4, + names: names$5, + dependsOn: dependsOn + }; + + var srat = function(esinp, exp) { + return (Math.pow((1 - esinp) / (1 + esinp), exp)); + }; + + var MAX_ITER$1 = 20; + function init$6() { + var sphi = Math.sin(this.lat0); + var cphi = Math.cos(this.lat0); + cphi *= cphi; + this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi); + this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es)); + this.phic0 = Math.asin(sphi / this.C); + this.ratexp = 0.5 * this.C * this.e; + 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)); + } + + function forward$5(p) { + var lon = p.x; + var lat = p.y; + + 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; + p.x = this.C * lon; + return p; + } + + function inverse$5(p) { + var DEL_TOL = 1e-14; + var lon = p.x / this.C; + var lat = p.y; + var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C); + for (var i = MAX_ITER$1; i > 0; --i) { + lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI; + if (Math.abs(lat - p.y) < DEL_TOL) { + break; + } + p.y = lat; + } + /* convergence failed */ + if (!i) { + return null; + } + p.x = lon; + p.y = lat; + return p; + } + + var names$7 = ["gauss"]; + var gauss = { + init: init$6, + forward: forward$5, + inverse: inverse$5, + names: names$7 + }; + + function init$5() { + gauss.init.apply(this); + if (!this.rc) { + return; + } + this.sinc0 = Math.sin(this.phic0); + this.cosc0 = Math.cos(this.phic0); + this.R2 = 2 * this.rc; + if (!this.title) { + this.title = "Oblique Stereographic Alternative"; + } + } + + function forward$4(p) { + var sinc, cosc, cosl, k; + p.x = adjust_lon(p.x - this.long0); + gauss.forward.apply(this, [p]); + sinc = Math.sin(p.y); + cosc = Math.cos(p.y); + cosl = Math.cos(p.x); + k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl); + p.x = k * cosc * Math.sin(p.x); + p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl); + p.x = this.a * p.x + this.x0; + p.y = this.a * p.y + this.y0; + return p; + } + + function inverse$4(p) { + var sinc, cosc, lon, lat, rho; + p.x = (p.x - this.x0) / this.a; + p.y = (p.y - this.y0) / this.a; + + p.x /= this.k0; + p.y /= this.k0; + if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) { + var c = 2 * Math.atan2(rho, this.R2); + sinc = Math.sin(c); + cosc = Math.cos(c); + lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho); + lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc); + } + else { + lat = this.phic0; + lon = 0; + } + + p.x = lon; + p.y = lat; + gauss.inverse.apply(this, [p]); + p.x = adjust_lon(p.x + this.long0); + return p; + } + + var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative","Double_Stereographic"]; + var sterea = { + init: init$5, + forward: forward$4, + inverse: inverse$4, + names: names$6 + }; + + function ssfn_(phit, sinphi, eccen) { + sinphi *= eccen; + return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen)); + } + + function init$7() { + this.coslat0 = Math.cos(this.lat0); + this.sinlat0 = Math.sin(this.lat0); + if (this.sphere) { + if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { + this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts)); + } + } + else { + if (Math.abs(this.coslat0) <= EPSLN) { + if (this.lat0 > 0) { + //North pole + //trace('stere:north pole'); + this.con = 1; + } + else { + //South pole + //trace('stere:south pole'); + this.con = -1; + } + } + this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e)); + if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { + 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)); + } + this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0); + this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI; + this.cosX0 = Math.cos(this.X0); + this.sinX0 = Math.sin(this.X0); + } + } + + // Stereographic forward equations--mapping lat,long to x,y + function forward$6(p) { + var lon = p.x; + var lat = p.y; + var sinlat = Math.sin(lat); + var coslat = Math.cos(lat); + var A, X, sinX, cosX, ts, rh; + var dlon = adjust_lon(lon - this.long0); + + if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) { + //case of the origine point + //trace('stere:this is the origin point'); + p.x = NaN; + p.y = NaN; + return p; + } + if (this.sphere) { + //trace('stere:sphere case'); + A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon)); + p.x = this.a * A * coslat * Math.sin(dlon) + this.x0; + p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0; + return p; + } + else { + X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI; + cosX = Math.cos(X); + sinX = Math.sin(X); + if (Math.abs(this.coslat0) <= EPSLN) { + ts = tsfnz(this.e, lat * this.con, this.con * sinlat); + rh = 2 * this.a * this.k0 * ts / this.cons; + p.x = this.x0 + rh * Math.sin(lon - this.long0); + p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0); + //trace(p.toString()); + return p; + } + else if (Math.abs(this.sinlat0) < EPSLN) { + //Eq + //trace('stere:equateur'); + A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon)); + p.y = A * sinX; + } + else { + //other case + //trace('stere:normal case'); + A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon))); + p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0; + } + p.x = A * cosX * Math.sin(dlon) + this.x0; + } + //trace(p.toString()); + return p; + } + + //* Stereographic inverse equations--mapping x,y to lat/long + function inverse$6(p) { + p.x -= this.x0; + p.y -= this.y0; + var lon, lat, ts, ce, Chi; + var rh = Math.sqrt(p.x * p.x + p.y * p.y); + if (this.sphere) { + var c = 2 * Math.atan(rh / (2 * this.a * this.k0)); + lon = this.long0; + lat = this.lat0; + if (rh <= EPSLN) { + p.x = lon; + p.y = lat; + return p; + } + lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh); + if (Math.abs(this.coslat0) < EPSLN) { + if (this.lat0 > 0) { + lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); + } + else { + lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); + } + } + else { + 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))); + } + p.x = lon; + p.y = lat; + return p; + } + else { + if (Math.abs(this.coslat0) <= EPSLN) { + if (rh <= EPSLN) { + lat = this.lat0; + lon = this.long0; + p.x = lon; + p.y = lat; + //trace(p.toString()); + return p; + } + p.x *= this.con; + p.y *= this.con; + ts = rh * this.cons / (2 * this.a * this.k0); + lat = this.con * phi2z(this.e, ts); + lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y)); + } + else { + ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1)); + lon = this.long0; + if (rh <= EPSLN) { + Chi = this.X0; + } + else { + Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh); + 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))); + } + lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi))); + } + } + p.x = lon; + p.y = lat; + + //trace(p.toString()); + return p; + + } + + var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"]; + var stere = { + init: init$7, + forward: forward$6, + inverse: inverse$6, + names: names$8, + ssfn_: ssfn_ + }; + + /* + references: + Formules et constantes pour le Calcul pour la + projection cylindrique conforme à axe oblique et pour la transformation entre + des systèmes de référence. + http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf + */ + + function init$8() { + var phy0 = this.lat0; + this.lambda0 = this.long0; + var sinPhy0 = Math.sin(phy0); + var semiMajorAxis = this.a; + var invF = this.rf; + var flattening = 1 / invF; + var e2 = 2 * flattening - Math.pow(flattening, 2); + var e = this.e = Math.sqrt(e2); + this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2)); + this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4)); + this.b0 = Math.asin(sinPhy0 / this.alpha); + var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2)); + var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2)); + var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0)); + this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3; + } + + function forward$7(p) { + var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2)); + var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y))); + var S = -this.alpha * (Sa1 + Sa2) + this.K; + + // spheric latitude + var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4); + + // spheric longitude + var I = this.alpha * (p.x - this.lambda0); + + // psoeudo equatorial rotation + var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I))); + + var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I)); + + p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0; + p.x = this.R * rotI + this.x0; + return p; + } + + function inverse$7(p) { + var Y = p.x - this.x0; + var X = p.y - this.y0; + + var rotI = Y / this.R; + var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4); + + var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI)); + var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB))); + + var lambda = this.lambda0 + I / this.alpha; + + var S = 0; + var phy = b; + var prevPhy = -1000; + var iteration = 0; + while (Math.abs(phy - prevPhy) > 0.0000001) { + if (++iteration > 20) { + //...reportError("omercFwdInfinity"); + return; + } + //S = Math.log(Math.tan(Math.PI / 4 + phy / 2)); + 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)); + prevPhy = phy; + phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2; + } + + p.x = lambda; + p.y = phy; + return p; + } + + var names$9 = ["somerc"]; + var somerc = { + init: init$8, + forward: forward$7, + inverse: inverse$7, + names: names$9 + }; + + /* Initialize the Oblique Mercator projection + ------------------------------------------*/ + function init$9() { + this.no_off = this.no_off || false; + this.no_rot = this.no_rot || false; + + if (isNaN(this.k0)) { + this.k0 = 1; + } + var sinlat = Math.sin(this.lat0); + var coslat = Math.cos(this.lat0); + var con = this.e * sinlat; + + this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4)); + this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con); + var t0 = tsfnz(this.e, this.lat0, sinlat); + var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con)); + if (dl * dl < 1) { + dl = 1; + } + var fl; + var gl; + if (!isNaN(this.longc)) { + //Central point and azimuth method + + if (this.lat0 >= 0) { + fl = dl + Math.sqrt(dl * dl - 1); + } + else { + fl = dl - Math.sqrt(dl * dl - 1); + } + this.el = fl * Math.pow(t0, this.bl); + gl = 0.5 * (fl - 1 / fl); + this.gamma0 = Math.asin(Math.sin(this.alpha) / dl); + this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl; + + } + else { + //2 points method + var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1)); + var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2)); + if (this.lat0 >= 0) { + this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); + } + else { + this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); + } + var hl = Math.pow(t1, this.bl); + var ll = Math.pow(t2, this.bl); + fl = this.el / hl; + gl = 0.5 * (fl - 1 / fl); + var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl); + var pl = (ll - hl) / (ll + hl); + var dlon12 = adjust_lon(this.long1 - this.long2); + this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl; + this.long0 = adjust_lon(this.long0); + var dlon10 = adjust_lon(this.long1 - this.long0); + this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl); + this.alpha = Math.asin(dl * Math.sin(this.gamma0)); + } + + if (this.no_off) { + this.uc = 0; + } + else { + if (this.lat0 >= 0) { + this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); + } + else { + this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); + } + } + + } + + /* Oblique Mercator forward equations--mapping lat,long to x,y + ----------------------------------------------------------*/ + function forward$8(p) { + var lon = p.x; + var lat = p.y; + var dlon = adjust_lon(lon - this.long0); + var us, vs; + var con; + if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { + if (lat > 0) { + con = -1; + } + else { + con = 1; + } + vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5)); + us = -1 * con * HALF_PI * this.al / this.bl; + } + else { + var t = tsfnz(this.e, lat, Math.sin(lat)); + var ql = this.el / Math.pow(t, this.bl); + var sl = 0.5 * (ql - 1 / ql); + var tl = 0.5 * (ql + 1 / ql); + var vl = Math.sin(this.bl * (dlon)); + var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl; + if (Math.abs(Math.abs(ul) - 1) <= EPSLN) { + vs = Number.POSITIVE_INFINITY; + } + else { + vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl; + } + if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) { + us = this.al * this.bl * (dlon); + } + else { + us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl; + } + } + + if (this.no_rot) { + p.x = this.x0 + us; + p.y = this.y0 + vs; + } + else { + + us -= this.uc; + p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha); + p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha); + } + return p; + } + + function inverse$8(p) { + var us, vs; + if (this.no_rot) { + vs = p.y - this.y0; + us = p.x - this.x0; + } + else { + vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha); + us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha); + us += this.uc; + } + var qp = Math.exp(-1 * this.bl * vs / this.al); + var sp = 0.5 * (qp - 1 / qp); + var tp = 0.5 * (qp + 1 / qp); + var vp = Math.sin(this.bl * us / this.al); + var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp; + var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl); + if (Math.abs(up - 1) < EPSLN) { + p.x = this.long0; + p.y = HALF_PI; + } + else if (Math.abs(up + 1) < EPSLN) { + p.x = this.long0; + p.y = -1 * HALF_PI; + } + else { + p.y = phi2z(this.e, ts); + 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); + } + return p; + } + + var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"]; + var omerc = { + init: init$9, + forward: forward$8, + inverse: inverse$8, + names: names$10 + }; + + function init$10() { + + // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north + //double c_lat; /* center latitude */ + //double c_lon; /* center longitude */ + //double lat1; /* first standard parallel */ + //double lat2; /* second standard parallel */ + //double r_maj; /* major axis */ + //double r_min; /* minor axis */ + //double false_east; /* x offset in meters */ + //double false_north; /* y offset in meters */ + + if (!this.lat2) { + this.lat2 = this.lat1; + } //if lat2 is not defined + if (!this.k0) { + this.k0 = 1; + } + this.x0 = this.x0 || 0; + this.y0 = this.y0 || 0; + // Standard Parallels cannot be equal and on opposite sides of the equator + if (Math.abs(this.lat1 + this.lat2) < EPSLN) { + return; + } + + var temp = this.b / this.a; + this.e = Math.sqrt(1 - temp * temp); + + var sin1 = Math.sin(this.lat1); + var cos1 = Math.cos(this.lat1); + var ms1 = msfnz(this.e, sin1, cos1); + var ts1 = tsfnz(this.e, this.lat1, sin1); + + var sin2 = Math.sin(this.lat2); + var cos2 = Math.cos(this.lat2); + var ms2 = msfnz(this.e, sin2, cos2); + var ts2 = tsfnz(this.e, this.lat2, sin2); + + var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0)); + + if (Math.abs(this.lat1 - this.lat2) > EPSLN) { + this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2); + } + else { + this.ns = sin1; + } + if (isNaN(this.ns)) { + this.ns = sin1; + } + this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns)); + this.rh = this.a * this.f0 * Math.pow(ts0, this.ns); + if (!this.title) { + this.title = "Lambert Conformal Conic"; + } + } + + // Lambert Conformal conic forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + function forward$9(p) { + + var lon = p.x; + var lat = p.y; + + // singular cases : + if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) { + lat = sign(lat) * (HALF_PI - 2 * EPSLN); + } + + var con = Math.abs(Math.abs(lat) - HALF_PI); + var ts, rh1; + if (con > EPSLN) { + ts = tsfnz(this.e, lat, Math.sin(lat)); + rh1 = this.a * this.f0 * Math.pow(ts, this.ns); + } + else { + con = lat * this.ns; + if (con <= 0) { + return null; + } + rh1 = 0; + } + var theta = this.ns * adjust_lon(lon - this.long0); + p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0; + p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0; + + return p; + } + + // Lambert Conformal Conic inverse equations--mapping x,y to lat/long + // ----------------------------------------------------------------- + function inverse$9(p) { + + var rh1, con, ts; + var lat, lon; + var x = (p.x - this.x0) / this.k0; + var y = (this.rh - (p.y - this.y0) / this.k0); + if (this.ns > 0) { + rh1 = Math.sqrt(x * x + y * y); + con = 1; + } + else { + rh1 = -Math.sqrt(x * x + y * y); + con = -1; + } + var theta = 0; + if (rh1 !== 0) { + theta = Math.atan2((con * x), (con * y)); + } + if ((rh1 !== 0) || (this.ns > 0)) { + con = 1 / this.ns; + ts = Math.pow((rh1 / (this.a * this.f0)), con); + lat = phi2z(this.e, ts); + if (lat === -9999) { + return null; + } + } + else { + lat = -HALF_PI; + } + lon = adjust_lon(theta / this.ns + this.long0); + + p.x = lon; + p.y = lat; + return p; + } + + var names$11 = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"]; + var lcc = { + init: init$10, + forward: forward$9, + inverse: inverse$9, + names: names$11 + }; + + function init$11() { + this.a = 6377397.155; + this.es = 0.006674372230614; + this.e = Math.sqrt(this.es); + if (!this.lat0) { + this.lat0 = 0.863937979737193; + } + if (!this.long0) { + this.long0 = 0.7417649320975901 - 0.308341501185665; + } + /* if scale not set default to 0.9999 */ + if (!this.k0) { + this.k0 = 0.9999; + } + this.s45 = 0.785398163397448; /* 45 */ + 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; + } + + /* ellipsoid */ + /* calculate xy from lat/lon */ + /* Constants, identical to inverse transform function */ + function forward$10(p) { + var gfi, u, deltav, s, d, eps, ro; + var lon = p.x; + var lat = p.y; + var delta_lon = adjust_lon(lon - this.long0); + /* Transformation */ + gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2)); + u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45); + deltav = -delta_lon * this.alfa; + s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav)); + d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s)); + eps = this.n * d; + ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n); + p.y = ro * Math.cos(eps) / 1; + p.x = ro * Math.sin(eps) / 1; + + if (!this.czech) { + p.y *= -1; + p.x *= -1; + } + return (p); + } + + /* calculate lat/lon from xy */ + function inverse$10(p) { + var u, deltav, s, d, eps, ro, fi1; + var ok; + + /* Transformation */ + /* revert y, x*/ + var tmp = p.x; + p.x = p.y; + p.y = tmp; + if (!this.czech) { + p.y *= -1; + p.x *= -1; + } + ro = Math.sqrt(p.x * p.x + p.y * p.y); + eps = Math.atan2(p.y, p.x); + d = eps / Math.sin(this.s0); + s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45); + u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d)); + deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u)); + p.x = this.long0 - deltav / this.alfa; + fi1 = u; + ok = 0; + var iter = 0; + do { + 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); + if (Math.abs(fi1 - p.y) < 0.0000000001) { + ok = 1; + } + fi1 = p.y; + iter += 1; + } while (ok === 0 && iter < 15); + if (iter >= 15) { + return null; + } + + return (p); + } + + var names$12 = ["Krovak", "krovak"]; + var krovak = { + init: init$11, + forward: forward$10, + inverse: inverse$10, + names: names$12 + }; + + var mlfn = function(e0, e1, e2, e3, phi) { + return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi)); + }; + + var e0fn = function(x) { + return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x))); + }; + + var e1fn = function(x) { + return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x))); + }; + + var e2fn = function(x) { + return (0.05859375 * x * x * (1 + 0.75 * x)); + }; + + var e3fn = function(x) { + return (x * x * x * (35 / 3072)); + }; + + var gN = function(a, e, sinphi) { + var temp = e * sinphi; + return a / Math.sqrt(1 - temp * temp); + }; + + var adjust_lat = function(x) { + return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI)); + }; + + var imlfn = function(ml, e0, e1, e2, e3) { + var phi; + var dphi; + + phi = ml / e0; + for (var i = 0; i < 15; i++) { + 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)); + phi += dphi; + if (Math.abs(dphi) <= 0.0000000001) { + return phi; + } + } + + //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations"); + return NaN; + }; + + function init$12() { + if (!this.sphere) { + this.e0 = e0fn(this.es); + this.e1 = e1fn(this.es); + this.e2 = e2fn(this.es); + this.e3 = e3fn(this.es); + this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); + } + } + + /* Cassini forward equations--mapping lat,long to x,y + -----------------------------------------------------------------------*/ + function forward$11(p) { + + /* Forward equations + -----------------*/ + var x, y; + var lam = p.x; + var phi = p.y; + lam = adjust_lon(lam - this.long0); + + if (this.sphere) { + x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam)); + y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0); + } + else { + //ellipsoid + var sinphi = Math.sin(phi); + var cosphi = Math.cos(phi); + var nl = gN(this.a, this.e, sinphi); + var tl = Math.tan(phi) * Math.tan(phi); + var al = lam * Math.cos(phi); + var asq = al * al; + var cl = this.es * cosphi * cosphi / (1 - this.es); + var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); + + x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120)); + y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24); + + + } + + p.x = x + this.x0; + p.y = y + this.y0; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$11(p) { + p.x -= this.x0; + p.y -= this.y0; + var x = p.x / this.a; + var y = p.y / this.a; + var phi, lam; + + if (this.sphere) { + var dd = y + this.lat0; + phi = Math.asin(Math.sin(dd) * Math.cos(x)); + lam = Math.atan2(Math.tan(x), Math.cos(dd)); + } + else { + /* ellipsoid */ + var ml1 = this.ml0 / this.a + y; + var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3); + if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) { + p.x = this.long0; + p.y = HALF_PI; + if (y < 0) { + p.y *= -1; + } + return p; + } + var nl1 = gN(this.a, this.e, Math.sin(phi1)); + + var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es); + var tl1 = Math.pow(Math.tan(phi1), 2); + var dl = x * this.a / nl1; + var dsq = dl * dl; + phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24); + lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1); + + } + + p.x = adjust_lon(lam + this.long0); + p.y = adjust_lat(phi); + return p; + + } + + var names$13 = ["Cassini", "Cassini_Soldner", "cass"]; + var cass = { + init: init$12, + forward: forward$11, + inverse: inverse$11, + names: names$13 + }; + + var qsfnz = function(eccent, sinphi) { + var con; + if (eccent > 1.0e-7) { + con = eccent * sinphi; + return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con)))); + } + else { + return (2 * sinphi); + } + }; + + /* + reference + "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. + */ + + var S_POLE = 1; + + var N_POLE = 2; + var EQUIT = 3; + var OBLIQ = 4; + + /* Initialize the Lambert Azimuthal Equal Area projection + ------------------------------------------------------*/ + function init$13() { + var t = Math.abs(this.lat0); + if (Math.abs(t - HALF_PI) < EPSLN) { + this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE; + } + else if (Math.abs(t) < EPSLN) { + this.mode = this.EQUIT; + } + else { + this.mode = this.OBLIQ; + } + if (this.es > 0) { + var sinphi; + + this.qp = qsfnz(this.e, 1); + this.mmf = 0.5 / (1 - this.es); + this.apa = authset(this.es); + switch (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(0.5 * this.qp); + this.dd = 1 / this.rq; + this.xmf = 1; + this.ymf = 0.5 * this.qp; + break; + case this.OBLIQ: + this.rq = Math.sqrt(0.5 * this.qp); + sinphi = Math.sin(this.lat0); + this.sinb1 = qsfnz(this.e, sinphi) / this.qp; + this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1); + this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1); + this.ymf = (this.xmf = this.rq) / this.dd; + this.xmf *= this.dd; + break; + } + } + else { + if (this.mode === this.OBLIQ) { + this.sinph0 = Math.sin(this.lat0); + this.cosph0 = Math.cos(this.lat0); + } + } + } + + /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y + -----------------------------------------------------------------------*/ + function forward$12(p) { + + /* Forward equations + -----------------*/ + var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi; + var lam = p.x; + var phi = p.y; + + lam = adjust_lon(lam - this.long0); + if (this.sphere) { + sinphi = Math.sin(phi); + cosphi = Math.cos(phi); + coslam = Math.cos(lam); + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; + if (y <= EPSLN) { + return null; + } + y = Math.sqrt(2 / y); + x = y * cosphi * Math.sin(lam); + y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; + } + else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { + if (this.mode === this.N_POLE) { + coslam = -coslam; + } + if (Math.abs(phi + this.phi0) < EPSLN) { + return null; + } + y = FORTPI - phi * 0.5; + y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y)); + x = y * Math.sin(lam); + y *= coslam; + } + } + else { + sinb = 0; + cosb = 0; + b = 0; + coslam = Math.cos(lam); + sinlam = Math.sin(lam); + sinphi = Math.sin(phi); + q = qsfnz(this.e, sinphi); + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + sinb = q / this.qp; + cosb = Math.sqrt(1 - sinb * sinb); + } + switch (this.mode) { + case this.OBLIQ: + b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam; + break; + case this.EQUIT: + b = 1 + cosb * coslam; + break; + case this.N_POLE: + b = HALF_PI + phi; + q = this.qp - q; + break; + case this.S_POLE: + b = phi - HALF_PI; + q = this.qp + q; + break; + } + if (Math.abs(b) < EPSLN) { + return null; + } + switch (this.mode) { + case this.OBLIQ: + case this.EQUIT: + b = Math.sqrt(2 / b); + if (this.mode === this.OBLIQ) { + y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam); + } + else { + y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf; + } + x = this.xmf * b * cosb * sinlam; + break; + case this.N_POLE: + case this.S_POLE: + if (q >= 0) { + x = (b = Math.sqrt(q)) * sinlam; + y = coslam * ((this.mode === this.S_POLE) ? b : -b); + } + else { + x = y = 0; + } + break; + } + } + + p.x = this.a * x + this.x0; + p.y = this.a * y + this.y0; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$12(p) { + p.x -= this.x0; + p.y -= this.y0; + var x = p.x / this.a; + var y = p.y / this.a; + var lam, phi, cCe, sCe, q, rho, ab; + if (this.sphere) { + var cosz = 0, + rh, sinz = 0; + + rh = Math.sqrt(x * x + y * y); + phi = rh * 0.5; + if (phi > 1) { + return null; + } + phi = 2 * Math.asin(phi); + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + sinz = Math.sin(phi); + cosz = Math.cos(phi); + } + switch (this.mode) { + case this.EQUIT: + phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh); + x *= sinz; + y = cosz * rh; + break; + case this.OBLIQ: + phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh); + x *= sinz * this.cosph0; + y = (cosz - Math.sin(phi) * this.sinph0) * rh; + break; + case this.N_POLE: + y = -y; + phi = HALF_PI - phi; + break; + case this.S_POLE: + phi -= HALF_PI; + break; + } + lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y); + } + else { + ab = 0; + if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { + x /= this.dd; + y *= this.dd; + rho = Math.sqrt(x * x + y * y); + if (rho < EPSLN) { + p.x = 0; + p.y = this.phi0; + return p; + } + sCe = 2 * Math.asin(0.5 * rho / this.rq); + cCe = Math.cos(sCe); + x *= (sCe = Math.sin(sCe)); + if (this.mode === this.OBLIQ) { + ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho; + q = this.qp * ab; + y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe; + } + else { + ab = y * sCe / rho; + q = this.qp * ab; + y = rho * cCe; + } + } + else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { + if (this.mode === this.N_POLE) { + y = -y; + } + q = (x * x + y * y); + if (!q) { + p.x = 0; + p.y = this.phi0; + return p; + } + ab = 1 - q / this.qp; + if (this.mode === this.S_POLE) { + ab = -ab; + } + } + lam = Math.atan2(x, y); + phi = authlat(Math.asin(ab), this.apa); + } + + p.x = adjust_lon(this.long0 + lam); + p.y = phi; + return p; + } + + /* determine latitude from authalic latitude */ + var P00 = 0.33333333333333333333; + + var P01 = 0.17222222222222222222; + var P02 = 0.10257936507936507936; + var P10 = 0.06388888888888888888; + var P11 = 0.06640211640211640211; + var P20 = 0.01641501294219154443; + + function authset(es) { + var t; + var APA = []; + APA[0] = es * P00; + t = es * es; + APA[0] += t * P01; + APA[1] = t * P10; + t *= es; + APA[0] += t * P02; + APA[1] += t * P11; + APA[2] = t * P20; + return APA; + } + + function authlat(beta, APA) { + var t = beta + beta; + return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t)); + } + + var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"]; + var laea = { + init: init$13, + forward: forward$12, + inverse: inverse$12, + names: names$14, + S_POLE: S_POLE, + N_POLE: N_POLE, + EQUIT: EQUIT, + OBLIQ: OBLIQ + }; + + var asinz = function(x) { + if (Math.abs(x) > 1) { + x = (x > 1) ? 1 : -1; + } + return Math.asin(x); + }; + + function init$14() { + + if (Math.abs(this.lat1 + this.lat2) < EPSLN) { + return; + } + 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 = msfnz(this.e3, this.sin_po, this.cos_po); + this.qs1 = qsfnz(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 = msfnz(this.e3, this.sin_po, this.cos_po); + this.qs2 = qsfnz(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 = qsfnz(this.e3, this.sin_po, this.cos_po); + + if (Math.abs(this.lat1 - this.lat2) > EPSLN) { + this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1); + } + else { + 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; + } + + /* Albers Conical Equal Area forward equations--mapping lat,long to x,y + -------------------------------------------------------------------*/ + function forward$13(p) { + + var lon = p.x; + var lat = p.y; + + this.sin_phi = Math.sin(lat); + this.cos_phi = Math.cos(lat); + + var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi); + var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0; + var theta = this.ns0 * adjust_lon(lon - this.long0); + var x = rh1 * Math.sin(theta) + this.x0; + var y = this.rh - rh1 * Math.cos(theta) + this.y0; + + p.x = x; + p.y = y; + return p; + } + + function inverse$13(p) { + var rh1, qs, con, theta, lon, lat; + + p.x -= this.x0; + p.y = this.rh - p.y + this.y0; + if (this.ns0 >= 0) { + rh1 = Math.sqrt(p.x * p.x + p.y * p.y); + con = 1; + } + else { + rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); + con = -1; + } + theta = 0; + if (rh1 !== 0) { + theta = Math.atan2(con * p.x, con * p.y); + } + con = rh1 * this.ns0 / this.a; + if (this.sphere) { + lat = Math.asin((this.c - con * con) / (2 * this.ns0)); + } + else { + qs = (this.c - con * con) / this.ns0; + lat = this.phi1z(this.e3, qs); + } + + lon = adjust_lon(theta / this.ns0 + this.long0); + p.x = lon; + p.y = lat; + return p; + } + + /* Function to compute phi1, the latitude for the inverse of the + Albers Conical Equal-Area projection. + -------------------------------------------*/ + function phi1z(eccent, qs) { + var sinphi, cosphi, con, com, dphi; + var phi = asinz(0.5 * qs); + if (eccent < EPSLN) { + return phi; + } + + var eccnts = eccent * eccent; + for (var i = 1; i <= 25; i++) { + sinphi = Math.sin(phi); + cosphi = Math.cos(phi); + con = eccent * sinphi; + com = 1 - con * con; + dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con))); + phi = phi + dphi; + if (Math.abs(dphi) <= 1e-7) { + return phi; + } + } + return null; + } + + var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"]; + var aea = { + init: init$14, + forward: forward$13, + inverse: inverse$13, + names: names$15, + phi1z: phi1z + }; + + /* + reference: + Wolfram Mathworld "Gnomonic Projection" + http://mathworld.wolfram.com/GnomonicProjection.html + Accessed: 12th November 2009 + */ + function init$15() { + + /* Place parameters in static storage for common use + -------------------------------------------------*/ + this.sin_p14 = Math.sin(this.lat0); + this.cos_p14 = Math.cos(this.lat0); + // Approximation for projecting points to the horizon (infinity) + this.infinity_dist = 1000 * this.a; + this.rc = 1; + } + + /* Gnomonic forward equations--mapping lat,long to x,y + ---------------------------------------------------*/ + function forward$14(p) { + var sinphi, cosphi; /* sin and cos value */ + var dlon; /* delta longitude value */ + var coslon; /* cos of longitude */ + var ksp; /* scale factor */ + var g; + var x, y; + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + dlon = adjust_lon(lon - this.long0); + + sinphi = Math.sin(lat); + cosphi = Math.cos(lat); + + coslon = Math.cos(dlon); + g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; + ksp = 1; + if ((g > 0) || (Math.abs(g) <= EPSLN)) { + x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g; + y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g; + } + else { + + // Point is in the opposing hemisphere and is unprojectable + // We still need to return a reasonable point, so we project + // to infinity, on a bearing + // equivalent to the northern hemisphere equivalent + // This is a reasonable approximation for short shapes and lines that + // straddle the horizon. + + x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon); + y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); + + } + p.x = x; + p.y = y; + return p; + } + + function inverse$14(p) { + var rh; /* Rho */ + var sinc, cosc; + var c; + var lon, lat; + + /* Inverse equations + -----------------*/ + p.x = (p.x - this.x0) / this.a; + p.y = (p.y - this.y0) / this.a; + + p.x /= this.k0; + p.y /= this.k0; + + if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) { + c = Math.atan2(rh, this.rc); + sinc = Math.sin(c); + cosc = Math.cos(c); + + lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh); + lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc); + lon = adjust_lon(this.long0 + lon); + } + else { + lat = this.phic0; + lon = 0; + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$16 = ["gnom"]; + var gnom = { + init: init$15, + forward: forward$14, + inverse: inverse$14, + names: names$16 + }; + + var iqsfnz = function(eccent, q) { + var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent)); + if (Math.abs(Math.abs(q) - temp) < 1.0E-6) { + if (q < 0) { + return (-1 * HALF_PI); + } + else { + return HALF_PI; + } + } + //var phi = 0.5* q/(1-eccent*eccent); + var phi = Math.asin(0.5 * q); + var dphi; + var sin_phi; + var cos_phi; + var con; + for (var i = 0; i < 30; i++) { + sin_phi = Math.sin(phi); + cos_phi = Math.cos(phi); + con = eccent * sin_phi; + 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))); + phi += dphi; + if (Math.abs(dphi) <= 0.0000000001) { + return phi; + } + } + + //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations"); + return NaN; + }; + + /* + reference: + "Cartographic Projection Procedures for the UNIX Environment- + A User's Manual" by Gerald I. Evenden, + USGS Open File Report 90-284and Release 4 Interim Reports (2003) + */ + function init$16() { + //no-op + if (!this.sphere) { + this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); + } + } + + /* Cylindrical Equal Area forward equations--mapping lat,long to x,y + ------------------------------------------------------------*/ + function forward$15(p) { + var lon = p.x; + var lat = p.y; + var x, y; + /* Forward equations + -----------------*/ + var dlon = adjust_lon(lon - this.long0); + if (this.sphere) { + x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); + y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); + } + else { + var qs = qsfnz(this.e, Math.sin(lat)); + x = this.x0 + this.a * this.k0 * dlon; + y = this.y0 + this.a * qs * 0.5 / this.k0; + } + + p.x = x; + p.y = y; + return p; + } + + /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long + ------------------------------------------------------------*/ + function inverse$15(p) { + p.x -= this.x0; + p.y -= this.y0; + var lon, lat; + + if (this.sphere) { + lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts)); + lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts)); + } + else { + lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a); + lon = adjust_lon(this.long0 + p.x / (this.a * this.k0)); + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$17 = ["cea"]; + var cea = { + init: init$16, + forward: forward$15, + inverse: inverse$15, + names: names$17 + }; + + function init$17() { + + 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); + } + + // forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + function forward$16(p) { + + var lon = p.x; + var lat = p.y; + + var dlon = adjust_lon(lon - this.long0); + var dlat = adjust_lat(lat - this.lat0); + p.x = this.x0 + (this.a * dlon * this.rc); + p.y = this.y0 + (this.a * dlat); + return p; + } + + // inverse equations--mapping x,y to lat/long + // ----------------------------------------------------------------- + function inverse$16(p) { + + var x = p.x; + var y = p.y; + + p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc))); + p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a))); + return p; + } + + var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"]; + var eqc = { + init: init$17, + forward: forward$16, + inverse: inverse$16, + names: names$18 + }; + + var MAX_ITER$2 = 20; + + function init$18() { + /* Place parameters in static storage for common use + -------------------------------------------------*/ + this.temp = this.b / this.a; + 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 + this.e = Math.sqrt(this.es); + this.e0 = e0fn(this.es); + this.e1 = e1fn(this.es); + this.e2 = e2fn(this.es); + this.e3 = e3fn(this.es); + 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 + } + + /* Polyconic forward equations--mapping lat,long to x,y + ---------------------------------------------------*/ + function forward$17(p) { + var lon = p.x; + var lat = p.y; + var x, y, el; + var dlon = adjust_lon(lon - this.long0); + el = dlon * Math.sin(lat); + if (this.sphere) { + if (Math.abs(lat) <= EPSLN) { + x = this.a * dlon; + y = -1 * this.a * this.lat0; + } + else { + x = this.a * Math.sin(el) / Math.tan(lat); + y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat)); + } + } + else { + if (Math.abs(lat) <= EPSLN) { + x = this.a * dlon; + y = -1 * this.ml0; + } + else { + var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat); + x = nl * Math.sin(el); + y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el)); + } + + } + p.x = x + this.x0; + p.y = y + this.y0; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$17(p) { + var lon, lat, x, y, i; + var al, bl; + var phi, dphi; + x = p.x - this.x0; + y = p.y - this.y0; + + if (this.sphere) { + if (Math.abs(y + this.a * this.lat0) <= EPSLN) { + lon = adjust_lon(x / this.a + this.long0); + lat = 0; + } + else { + al = this.lat0 + y / this.a; + bl = x * x / this.a / this.a + al * al; + phi = al; + var tanphi; + for (i = MAX_ITER$2; i; --i) { + tanphi = Math.tan(phi); + dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1); + phi += dphi; + if (Math.abs(dphi) <= EPSLN) { + lat = phi; + break; + } + } + lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat)); + } + } + else { + if (Math.abs(y + this.ml0) <= EPSLN) { + lat = 0; + lon = adjust_lon(this.long0 + x / this.a); + } + else { + + al = (this.ml0 + y) / this.a; + bl = x * x / this.a / this.a + al * al; + phi = al; + var cl, mln, mlnp, ma; + var con; + for (i = MAX_ITER$2; i; --i) { + con = this.e * Math.sin(phi); + cl = Math.sqrt(1 - con * con) * Math.tan(phi); + mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); + mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi); + ma = mln / this.a; + 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); + phi -= dphi; + if (Math.abs(dphi) <= EPSLN) { + lat = phi; + break; + } + } + + //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0); + cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat); + lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat)); + } + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$19 = ["Polyconic", "poly"]; + var poly = { + init: init$18, + forward: forward$17, + inverse: inverse$17, + names: names$19 + }; + + /* + reference + Department of Land and Survey Technical Circular 1973/32 + http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf + OSG Technical Report 4.1 + http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf + */ + + /** + * iterations: Number of iterations to refine inverse transform. + * 0 -> km accuracy + * 1 -> m accuracy -- suitable for most mapping applications + * 2 -> mm accuracy + */ + + + function init$19() { + this.A = []; + this.A[1] = 0.6399175073; + this.A[2] = -0.1358797613; + this.A[3] = 0.063294409; + this.A[4] = -0.02526853; + this.A[5] = 0.0117879; + this.A[6] = -0.0055161; + this.A[7] = 0.0026906; + this.A[8] = -0.001333; + this.A[9] = 0.00067; + this.A[10] = -0.00034; + + this.B_re = []; + this.B_im = []; + this.B_re[1] = 0.7557853228; + this.B_im[1] = 0; + this.B_re[2] = 0.249204646; + this.B_im[2] = 0.003371507; + this.B_re[3] = -0.001541739; + this.B_im[3] = 0.041058560; + this.B_re[4] = -0.10162907; + this.B_im[4] = 0.01727609; + this.B_re[5] = -0.26623489; + this.B_im[5] = -0.36249218; + this.B_re[6] = -0.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] = -0.577245789; + this.C_im[2] = -0.007809598; + this.C_re[3] = 0.508307513; + this.C_im[3] = -0.112208952; + this.C_re[4] = -0.15094762; + this.C_im[4] = 0.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] = 0.5185406398; + this.D[3] = -0.03333098; + this.D[4] = -0.1052906; + this.D[5] = -0.0368594; + this.D[6] = 0.007317; + this.D[7] = 0.01220; + this.D[8] = 0.00394; + this.D[9] = -0.0013; + } + + /** + New Zealand Map Grid Forward - long/lat to x/y + long/lat in radians + */ + function forward$18(p) { + var n; + var lon = p.x; + var lat = p.y; + + var delta_lat = lat - this.lat0; + var delta_lon = lon - this.long0; + + // 1. Calculate d_phi and d_psi ... // and d_lambda + // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians. + var d_phi = delta_lat / SEC_TO_RAD * 1E-5; + var d_lambda = delta_lon; + var d_phi_n = 1; // d_phi^0 + + var d_psi = 0; + for (n = 1; n <= 10; n++) { + d_phi_n = d_phi_n * d_phi; + d_psi = d_psi + this.A[n] * d_phi_n; + } + + // 2. Calculate theta + var th_re = d_psi; + var th_im = d_lambda; + + // 3. Calculate z + var th_n_re = 1; + var th_n_im = 0; // theta^0 + var th_n_re1; + var th_n_im1; + + var z_re = 0; + var z_im = 0; + for (n = 1; n <= 6; n++) { + th_n_re1 = th_n_re * th_re - th_n_im * th_im; + th_n_im1 = th_n_im * th_re + th_n_re * th_im; + th_n_re = th_n_re1; + th_n_im = th_n_im1; + z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im; + z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im; + } + + // 4. Calculate easting and northing + p.x = (z_im * this.a) + this.x0; + p.y = (z_re * this.a) + this.y0; + + return p; + } + + /** + New Zealand Map Grid Inverse - x/y to long/lat + */ + function inverse$18(p) { + var n; + var x = p.x; + var y = p.y; + + var delta_x = x - this.x0; + var delta_y = y - this.y0; + + // 1. Calculate z + var z_re = delta_y / this.a; + var z_im = delta_x / this.a; + + // 2a. Calculate theta - first approximation gives km accuracy + var z_n_re = 1; + var z_n_im = 0; // z^0 + var z_n_re1; + var z_n_im1; + + var th_re = 0; + var th_im = 0; + for (n = 1; n <= 6; n++) { + z_n_re1 = z_n_re * z_re - z_n_im * z_im; + z_n_im1 = z_n_im * z_re + z_n_re * z_im; + z_n_re = z_n_re1; + z_n_im = z_n_im1; + th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im; + th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im; + } + + // 2b. Iterate to refine the accuracy of the calculation + // 0 iterations gives km accuracy + // 1 iteration gives m accuracy -- good enough for most mapping applications + // 2 iterations bives mm accuracy + for (var i = 0; i < this.iterations; i++) { + var th_n_re = th_re; + var th_n_im = th_im; + var th_n_re1; + var th_n_im1; + + var num_re = z_re; + var num_im = z_im; + for (n = 2; n <= 6; n++) { + th_n_re1 = th_n_re * th_re - th_n_im * th_im; + th_n_im1 = th_n_im * th_re + th_n_re * th_im; + th_n_re = th_n_re1; + th_n_im = th_n_im1; + num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); + num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); + } + + th_n_re = 1; + th_n_im = 0; + var den_re = this.B_re[1]; + var den_im = this.B_im[1]; + for (n = 2; n <= 6; n++) { + th_n_re1 = th_n_re * th_re - th_n_im * th_im; + th_n_im1 = th_n_im * th_re + th_n_re * th_im; + th_n_re = th_n_re1; + th_n_im = th_n_im1; + den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); + den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); + } + + // Complex division + var den2 = den_re * den_re + den_im * den_im; + th_re = (num_re * den_re + num_im * den_im) / den2; + th_im = (num_im * den_re - num_re * den_im) / den2; + } + + // 3. Calculate d_phi ... // and d_lambda + var d_psi = th_re; + var d_lambda = th_im; + var d_psi_n = 1; // d_psi^0 + + var d_phi = 0; + for (n = 1; n <= 9; n++) { + d_psi_n = d_psi_n * d_psi; + d_phi = d_phi + this.D[n] * d_psi_n; + } + + // 4. Calculate latitude and longitude + // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians. + var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5); + var lon = this.long0 + d_lambda; + + p.x = lon; + p.y = lat; + + return p; + } + + var names$20 = ["New_Zealand_Map_Grid", "nzmg"]; + var nzmg = { + init: init$19, + forward: forward$18, + inverse: inverse$18, + names: names$20 + }; + + /* + reference + "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, + The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. + */ + + + /* Initialize the Miller Cylindrical projection + -------------------------------------------*/ + function init$20() { + //no-op + } + + /* Miller Cylindrical forward equations--mapping lat,long to x,y + ------------------------------------------------------------*/ + function forward$19(p) { + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + var dlon = adjust_lon(lon - this.long0); + var x = this.x0 + this.a * dlon; + var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25; + + p.x = x; + p.y = y; + return p; + } + + /* Miller Cylindrical inverse equations--mapping x,y to lat/long + ------------------------------------------------------------*/ + function inverse$19(p) { + p.x -= this.x0; + p.y -= this.y0; + + var lon = adjust_lon(this.long0 + p.x / this.a); + var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4); + + p.x = lon; + p.y = lat; + return p; + } + + var names$21 = ["Miller_Cylindrical", "mill"]; + var mill = { + init: init$20, + forward: forward$19, + inverse: inverse$19, + names: names$21 + }; + + var MAX_ITER$3 = 20; + function init$21() { + /* Place parameters in static storage for common use + -------------------------------------------------*/ + + + if (!this.sphere) { + this.en = pj_enfn(this.es); + } + else { + 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); + } + + } + + /* Sinusoidal forward equations--mapping lat,long to x,y + -----------------------------------------------------*/ + function forward$20(p) { + var x, y; + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + lon = adjust_lon(lon - this.long0); + + if (this.sphere) { + if (!this.m) { + lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat; + } + else { + var k = this.n * Math.sin(lat); + for (var i = MAX_ITER$3; i; --i) { + var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat)); + lat -= V; + if (Math.abs(V) < EPSLN) { + break; + } + } + } + x = this.a * this.C_x * lon * (this.m + Math.cos(lat)); + y = this.a * this.C_y * lat; + + } + else { + + var s = Math.sin(lat); + var c = Math.cos(lat); + y = this.a * pj_mlfn(lat, s, c, this.en); + x = this.a * lon * c / Math.sqrt(1 - this.es * s * s); + } + + p.x = x; + p.y = y; + return p; + } + + function inverse$20(p) { + var lat, temp, lon, s; + + p.x -= this.x0; + lon = p.x / this.a; + p.y -= this.y0; + lat = p.y / this.a; + + if (this.sphere) { + lat /= this.C_y; + lon = lon / (this.C_x * (this.m + Math.cos(lat))); + if (this.m) { + lat = asinz((this.m * lat + Math.sin(lat)) / this.n); + } + else if (this.n !== 1) { + lat = asinz(Math.sin(lat) / this.n); + } + lon = adjust_lon(lon + this.long0); + lat = adjust_lat(lat); + } + else { + lat = pj_inv_mlfn(p.y / this.a, this.es, this.en); + s = Math.abs(lat); + if (s < HALF_PI) { + s = Math.sin(lat); + temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat)); + //temp = this.long0 + p.x / (this.a * Math.cos(lat)); + lon = adjust_lon(temp); + } + else if ((s - EPSLN) < HALF_PI) { + lon = this.long0; + } + } + p.x = lon; + p.y = lat; + return p; + } + + var names$22 = ["Sinusoidal", "sinu"]; + var sinu = { + init: init$21, + forward: forward$20, + inverse: inverse$20, + names: names$22 + }; + + function init$22() {} + /* Mollweide forward equations--mapping lat,long to x,y + ----------------------------------------------------*/ + function forward$21(p) { + + /* Forward equations + -----------------*/ + var lon = p.x; + var lat = p.y; + + var delta_lon = adjust_lon(lon - this.long0); + var theta = lat; + var con = Math.PI * Math.sin(lat); + + /* Iterate using the Newton-Raphson method to find theta + -----------------------------------------------------*/ + while (true) { + var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta)); + theta += delta_theta; + if (Math.abs(delta_theta) < EPSLN) { + break; + } + } + theta /= 2; + + /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting" + this is done here because of precision problems with "cos(theta)" + --------------------------------------------------------------------------*/ + if (Math.PI / 2 - Math.abs(lat) < EPSLN) { + delta_lon = 0; + } + var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0; + var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0; + + p.x = x; + p.y = y; + return p; + } + + function inverse$21(p) { + var theta; + var arg; + + /* Inverse equations + -----------------*/ + p.x -= this.x0; + p.y -= this.y0; + arg = p.y / (1.4142135623731 * this.a); + + /* Because of division by zero problems, 'arg' can not be 1. Therefore + a number very close to one is used instead. + -------------------------------------------------------------------*/ + if (Math.abs(arg) > 0.999999999999) { + arg = 0.999999999999; + } + theta = Math.asin(arg); + var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta)))); + if (lon < (-Math.PI)) { + lon = -Math.PI; + } + if (lon > Math.PI) { + lon = Math.PI; + } + arg = (2 * theta + Math.sin(2 * theta)) / Math.PI; + if (Math.abs(arg) > 1) { + arg = 1; + } + var lat = Math.asin(arg); + + p.x = lon; + p.y = lat; + return p; + } + + var names$23 = ["Mollweide", "moll"]; + var moll = { + init: init$22, + forward: forward$21, + inverse: inverse$21, + names: names$23 + }; + + function init$23() { + + /* Place parameters in static storage for common use + -------------------------------------------------*/ + // Standard Parallels cannot be equal and on opposite sides of the equator + if (Math.abs(this.lat1 + this.lat2) < EPSLN) { + return; + } + 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 = e0fn(this.es); + this.e1 = e1fn(this.es); + this.e2 = e2fn(this.es); + this.e3 = e3fn(this.es); + + this.sinphi = Math.sin(this.lat1); + this.cosphi = Math.cos(this.lat1); + + this.ms1 = msfnz(this.e, this.sinphi, this.cosphi); + this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1); + + if (Math.abs(this.lat1 - this.lat2) < EPSLN) { + this.ns = this.sinphi; + } + else { + this.sinphi = Math.sin(this.lat2); + this.cosphi = Math.cos(this.lat2); + this.ms2 = msfnz(this.e, this.sinphi, this.cosphi); + this.ml2 = mlfn(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 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); + this.rh = this.a * (this.g - this.ml0); + } + + /* Equidistant Conic forward equations--mapping lat,long to x,y + -----------------------------------------------------------*/ + function forward$22(p) { + var lon = p.x; + var lat = p.y; + var rh1; + + /* Forward equations + -----------------*/ + if (this.sphere) { + rh1 = this.a * (this.g - lat); + } + else { + var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat); + rh1 = this.a * (this.g - ml); + } + var theta = this.ns * adjust_lon(lon - this.long0); + var x = this.x0 + rh1 * Math.sin(theta); + var y = this.y0 + this.rh - rh1 * Math.cos(theta); + p.x = x; + p.y = y; + return p; + } + + /* Inverse equations + -----------------*/ + function inverse$22(p) { + p.x -= this.x0; + p.y = this.rh - p.y + this.y0; + var con, rh1, lat, lon; + if (this.ns >= 0) { + rh1 = Math.sqrt(p.x * p.x + p.y * p.y); + con = 1; + } + else { + rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); + con = -1; + } + var theta = 0; + if (rh1 !== 0) { + theta = Math.atan2(con * p.x, con * p.y); + } + + if (this.sphere) { + lon = adjust_lon(this.long0 + theta / this.ns); + lat = adjust_lat(this.g - rh1 / this.a); + p.x = lon; + p.y = lat; + return p; + } + else { + var ml = this.g - rh1 / this.a; + lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3); + lon = adjust_lon(this.long0 + theta / this.ns); + p.x = lon; + p.y = lat; + return p; + } + + } + + var names$24 = ["Equidistant_Conic", "eqdc"]; + var eqdc = { + init: init$23, + forward: forward$22, + inverse: inverse$22, + names: names$24 + }; + + /* Initialize the Van Der Grinten projection + ----------------------------------------*/ + function init$24() { + //this.R = 6370997; //Radius of earth + this.R = this.a; + } + + function forward$23(p) { + + var lon = p.x; + var lat = p.y; + + /* Forward equations + -----------------*/ + var dlon = adjust_lon(lon - this.long0); + var x, y; + + if (Math.abs(lat) <= EPSLN) { + x = this.x0 + this.R * dlon; + y = this.y0; + } + var theta = asinz(2 * Math.abs(lat / Math.PI)); + if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) { + x = this.x0; + if (lat >= 0) { + y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta); + } + else { + y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta); + } + // return(OK); + } + var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI)); + var asq = al * al; + var sinth = Math.sin(theta); + var costh = Math.cos(theta); + + var g = costh / (sinth + costh - 1); + var gsq = g * g; + var m = g * (2 / sinth - 1); + var msq = m * m; + var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq); + if (dlon < 0) { + con = -con; + } + x = this.x0 + con; + //con = Math.abs(con / (Math.PI * this.R)); + var q = asq + g; + con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq); + if (lat >= 0) { + //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); + y = this.y0 + con; + } + else { + //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); + y = this.y0 - con; + } + p.x = x; + p.y = y; + return p; + } + + /* Van Der Grinten inverse equations--mapping x,y to lat/long + ---------------------------------------------------------*/ + function inverse$23(p) { + var lon, lat; + var xx, yy, xys, c1, c2, c3; + var a1; + var m1; + var con; + var th1; + var d; + + /* inverse equations + -----------------*/ + p.x -= this.x0; + p.y -= this.y0; + con = Math.PI * this.R; + xx = p.x / con; + yy = p.y / con; + xys = xx * xx + yy * yy; + c1 = -Math.abs(yy) * (1 + xys); + c2 = c1 - 2 * yy * yy + xx * xx; + c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys; + d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27; + a1 = (c1 - c2 * c2 / 3 / c3) / c3; + m1 = 2 * Math.sqrt(-a1 / 3); + con = ((3 * d) / a1) / m1; + if (Math.abs(con) > 1) { + if (con >= 0) { + con = 1; + } + else { + con = -1; + } + } + th1 = Math.acos(con) / 3; + if (p.y >= 0) { + lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; + } + else { + lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; + } + + if (Math.abs(xx) < EPSLN) { + lon = this.long0; + } + else { + lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx); + } + + p.x = lon; + p.y = lat; + return p; + } + + var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"]; + var vandg = { + init: init$24, + forward: forward$23, + inverse: inverse$23, + names: names$25 + }; + + function init$25() { + this.sin_p12 = Math.sin(this.lat0); + this.cos_p12 = Math.cos(this.lat0); + } + + function forward$24(p) { + var lon = p.x; + var lat = p.y; + var sinphi = Math.sin(p.y); + var cosphi = Math.cos(p.y); + var dlon = adjust_lon(lon - this.long0); + 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; + if (this.sphere) { + if (Math.abs(this.sin_p12 - 1) <= EPSLN) { + //North Pole case + p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon); + p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon); + return p; + } + else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { + //South Pole case + p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon); + p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon); + return p; + } + else { + //default case + cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon); + c = Math.acos(cos_c); + kp = c / Math.sin(c); + p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon); + p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon)); + return p; + } + } + else { + e0 = e0fn(this.es); + e1 = e1fn(this.es); + e2 = e2fn(this.es); + e3 = e3fn(this.es); + if (Math.abs(this.sin_p12 - 1) <= EPSLN) { + //North Pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + Ml = this.a * mlfn(e0, e1, e2, e3, lat); + p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon); + p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon); + return p; + } + else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { + //South Pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + Ml = this.a * mlfn(e0, e1, e2, e3, lat); + p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon); + p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon); + return p; + } + else { + //Default case + tanphi = sinphi / cosphi; + Nl1 = gN(this.a, this.e, this.sin_p12); + Nl = gN(this.a, this.e, sinphi); + psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi)); + Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon)); + if (Az === 0) { + s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); + } + else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) { + s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); + } + else { + s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az)); + } + G = this.e * this.sin_p12 / Math.sqrt(1 - this.es); + H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es); + GH = G * H; + Hs = H * H; + s2 = s * s; + s3 = s2 * s; + s4 = s3 * s; + s5 = s4 * s; + 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); + p.x = this.x0 + c * Math.sin(Az); + p.y = this.y0 + c * Math.cos(Az); + return p; + } + } + + + } + + function inverse$24(p) { + p.x -= this.x0; + p.y -= this.y0; + var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F; + if (this.sphere) { + rh = Math.sqrt(p.x * p.x + p.y * p.y); + if (rh > (2 * HALF_PI * this.a)) { + return; + } + z = rh / this.a; + + sinz = Math.sin(z); + cosz = Math.cos(z); + + lon = this.long0; + if (Math.abs(rh) <= EPSLN) { + lat = this.lat0; + } + else { + lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh); + con = Math.abs(this.lat0) - HALF_PI; + if (Math.abs(con) <= EPSLN) { + if (this.lat0 >= 0) { + lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); + } + else { + lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); + } + } + else { + /*con = cosz - this.sin_p12 * Math.sin(lat); + if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) { + //no-op, just keep the lon value as is + } else { + var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh)); + lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh))); + }*/ + lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz)); + } + } + + p.x = lon; + p.y = lat; + return p; + } + else { + e0 = e0fn(this.es); + e1 = e1fn(this.es); + e2 = e2fn(this.es); + e3 = e3fn(this.es); + if (Math.abs(this.sin_p12 - 1) <= EPSLN) { + //North pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + rh = Math.sqrt(p.x * p.x + p.y * p.y); + M = Mlp - rh; + lat = imlfn(M / this.a, e0, e1, e2, e3); + lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); + p.x = lon; + p.y = lat; + return p; + } + else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { + //South pole case + Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); + rh = Math.sqrt(p.x * p.x + p.y * p.y); + M = rh - Mlp; + + lat = imlfn(M / this.a, e0, e1, e2, e3); + lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); + p.x = lon; + p.y = lat; + return p; + } + else { + //default case + rh = Math.sqrt(p.x * p.x + p.y * p.y); + Az = Math.atan2(p.x, p.y); + N1 = gN(this.a, this.e, this.sin_p12); + cosAz = Math.cos(Az); + tmp = this.e * this.cos_p12 * cosAz; + A = -tmp * tmp / (1 - this.es); + B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es); + D = rh / N1; + Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24; + F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6; + psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz); + lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi))); + lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es)); + p.x = lon; + p.y = lat; + return p; + } + } + + } + + var names$26 = ["Azimuthal_Equidistant", "aeqd"]; + var aeqd = { + init: init$25, + forward: forward$24, + inverse: inverse$24, + names: names$26 + }; + + function init$26() { + //double temp; /* temporary variable */ + + /* Place parameters in static storage for common use + -------------------------------------------------*/ + this.sin_p14 = Math.sin(this.lat0); + this.cos_p14 = Math.cos(this.lat0); + } + + /* Orthographic forward equations--mapping lat,long to x,y + ---------------------------------------------------*/ + function forward$25(p) { + var sinphi, cosphi; /* sin and cos value */ + var dlon; /* delta longitude value */ + var coslon; /* cos of longitude */ + var ksp; /* scale factor */ + var g, x, y; + var lon = p.x; + var lat = p.y; + /* Forward equations + -----------------*/ + dlon = adjust_lon(lon - this.long0); + + sinphi = Math.sin(lat); + cosphi = Math.cos(lat); + + coslon = Math.cos(dlon); + g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; + ksp = 1; + if ((g > 0) || (Math.abs(g) <= EPSLN)) { + x = this.a * ksp * cosphi * Math.sin(dlon); + y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); + } + p.x = x; + p.y = y; + return p; + } + + function inverse$25(p) { + var rh; /* height above ellipsoid */ + var z; /* angle */ + var sinz, cosz; /* sin of z and cos of z */ + var con; + var lon, lat; + /* Inverse equations + -----------------*/ + p.x -= this.x0; + p.y -= this.y0; + rh = Math.sqrt(p.x * p.x + p.y * p.y); + z = asinz(rh / this.a); + + sinz = Math.sin(z); + cosz = Math.cos(z); + + lon = this.long0; + if (Math.abs(rh) <= EPSLN) { + lat = this.lat0; + p.x = lon; + p.y = lat; + return p; + } + lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh); + con = Math.abs(this.lat0) - HALF_PI; + if (Math.abs(con) <= EPSLN) { + if (this.lat0 >= 0) { + lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); + } + else { + lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); + } + p.x = lon; + p.y = lat; + return p; + } + lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz)); + p.x = lon; + p.y = lat; + return p; + } + + var names$27 = ["ortho"]; + var ortho = { + init: init$26, + forward: forward$25, + inverse: inverse$25, + names: names$27 + }; + + // QSC projection rewritten from the original PROJ4 + // https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c + + /* constants */ + var FACE_ENUM = { + FRONT: 1, + RIGHT: 2, + BACK: 3, + LEFT: 4, + TOP: 5, + BOTTOM: 6 + }; + + var AREA_ENUM = { + AREA_0: 1, + AREA_1: 2, + AREA_2: 3, + AREA_3: 4 + }; + + function init$27() { + + 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 || "Quadrilateralized Spherical Cube"; + + /* Determine the cube face from the center of projection. */ + if (this.lat0 >= HALF_PI - FORTPI / 2.0) { + this.face = FACE_ENUM.TOP; + } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) { + this.face = FACE_ENUM.BOTTOM; + } else if (Math.abs(this.long0) <= FORTPI) { + this.face = FACE_ENUM.FRONT; + } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) { + this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT; + } else { + this.face = FACE_ENUM.BACK; + } + + /* Fill in useful values for the ellipsoid <-> sphere shift + * described in [LK12]. */ + if (this.es !== 0) { + this.one_minus_f = 1 - (this.a - this.b) / this.a; + this.one_minus_f_squared = this.one_minus_f * this.one_minus_f; + } + } + + // QSC forward equations--mapping lat,long to x,y + // ----------------------------------------------------------------- + function forward$26(p) { + var xy = {x: 0, y: 0}; + var lat, lon; + var theta, phi; + var t, mu; + /* nu; */ + var area = {value: 0}; + + // move lon according to projection's lon + p.x -= this.long0; + + /* Convert the geodetic latitude to a geocentric latitude. + * This corresponds to the shift from the ellipsoid to the sphere + * described in [LK12]. */ + if (this.es !== 0) {//if (P->es != 0) { + lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y)); + } else { + lat = p.y; + } + + /* Convert the input lat, lon into theta, phi as used by QSC. + * This depends on the cube face and the area on it. + * For the top and bottom face, we can compute theta and phi + * directly from phi, lam. For the other faces, we must use + * unit sphere cartesian coordinates as an intermediate step. */ + lon = p.x; //lon = lp.lam; + if (this.face === FACE_ENUM.TOP) { + phi = HALF_PI - lat; + if (lon >= FORTPI && lon <= HALF_PI + FORTPI) { + area.value = AREA_ENUM.AREA_0; + theta = lon - HALF_PI; + } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) { + area.value = AREA_ENUM.AREA_1; + theta = (lon > 0.0 ? lon - SPI : lon + SPI); + } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) { + area.value = AREA_ENUM.AREA_2; + theta = lon + HALF_PI; + } else { + area.value = AREA_ENUM.AREA_3; + theta = lon; + } + } else if (this.face === FACE_ENUM.BOTTOM) { + phi = HALF_PI + lat; + if (lon >= FORTPI && lon <= HALF_PI + FORTPI) { + area.value = AREA_ENUM.AREA_0; + theta = -lon + HALF_PI; + } else if (lon < FORTPI && lon >= -FORTPI) { + area.value = AREA_ENUM.AREA_1; + theta = -lon; + } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) { + area.value = AREA_ENUM.AREA_2; + theta = -lon - HALF_PI; + } else { + area.value = AREA_ENUM.AREA_3; + theta = (lon > 0.0 ? -lon + SPI : -lon - SPI); + } + } else { + var q, r, s; + var sinlat, coslat; + var sinlon, coslon; + + if (this.face === FACE_ENUM.RIGHT) { + lon = qsc_shift_lon_origin(lon, +HALF_PI); + } else if (this.face === FACE_ENUM.BACK) { + lon = qsc_shift_lon_origin(lon, +SPI); + } else if (this.face === FACE_ENUM.LEFT) { + lon = qsc_shift_lon_origin(lon, -HALF_PI); + } + sinlat = Math.sin(lat); + coslat = Math.cos(lat); + sinlon = Math.sin(lon); + coslon = Math.cos(lon); + q = coslat * coslon; + r = coslat * sinlon; + s = sinlat; + + if (this.face === FACE_ENUM.FRONT) { + phi = Math.acos(q); + theta = qsc_fwd_equat_face_theta(phi, s, r, area); + } else if (this.face === FACE_ENUM.RIGHT) { + phi = Math.acos(r); + theta = qsc_fwd_equat_face_theta(phi, s, -q, area); + } else if (this.face === FACE_ENUM.BACK) { + phi = Math.acos(-q); + theta = qsc_fwd_equat_face_theta(phi, s, -r, area); + } else if (this.face === FACE_ENUM.LEFT) { + phi = Math.acos(-r); + theta = qsc_fwd_equat_face_theta(phi, s, q, area); + } else { + /* Impossible */ + phi = theta = 0; + area.value = AREA_ENUM.AREA_0; + } + } + + /* Compute mu and nu for the area of definition. + * For mu, see Eq. (3-21) in [OL76], but note the typos: + * compare with Eq. (3-14). For nu, see Eq. (3-38). */ + mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI)); + t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta))))); + + /* Apply the result to the real area. */ + if (area.value === AREA_ENUM.AREA_1) { + mu += HALF_PI; + } else if (area.value === AREA_ENUM.AREA_2) { + mu += SPI; + } else if (area.value === AREA_ENUM.AREA_3) { + mu += 1.5 * SPI; + } + + /* Now compute x, y from mu and nu */ + xy.x = t * Math.cos(mu); + xy.y = t * Math.sin(mu); + xy.x = xy.x * this.a + this.x0; + xy.y = xy.y * this.a + this.y0; + + p.x = xy.x; + p.y = xy.y; + return p; + } + + // QSC inverse equations--mapping x,y to lat/long + // ----------------------------------------------------------------- + function inverse$26(p) { + var lp = {lam: 0, phi: 0}; + var mu, nu, cosmu, tannu; + var tantheta, theta, cosphi, phi; + var t; + var area = {value: 0}; + + /* de-offset */ + p.x = (p.x - this.x0) / this.a; + p.y = (p.y - this.y0) / this.a; + + /* Convert the input x, y to the mu and nu angles as used by QSC. + * This depends on the area of the cube face. */ + nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y)); + mu = Math.atan2(p.y, p.x); + if (p.x >= 0.0 && p.x >= Math.abs(p.y)) { + area.value = AREA_ENUM.AREA_0; + } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) { + area.value = AREA_ENUM.AREA_1; + mu -= HALF_PI; + } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) { + area.value = AREA_ENUM.AREA_2; + mu = (mu < 0.0 ? mu + SPI : mu - SPI); + } else { + area.value = AREA_ENUM.AREA_3; + mu += HALF_PI; + } + + /* Compute phi and theta for the area of definition. + * The inverse projection is not described in the original paper, but some + * good hints can be found here (as of 2011-12-14): + * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302 + * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */ + t = (SPI / 12) * Math.tan(mu); + tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2))); + theta = Math.atan(tantheta); + cosmu = Math.cos(mu); + tannu = Math.tan(nu); + cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta)))); + if (cosphi < -1) { + cosphi = -1; + } else if (cosphi > +1) { + cosphi = +1; + } + + /* Apply the result to the real area on the cube face. + * For the top and bottom face, we can compute phi and lam directly. + * For the other faces, we must use unit sphere cartesian coordinates + * as an intermediate step. */ + if (this.face === FACE_ENUM.TOP) { + phi = Math.acos(cosphi); + lp.phi = HALF_PI - phi; + if (area.value === AREA_ENUM.AREA_0) { + lp.lam = theta + HALF_PI; + } else if (area.value === AREA_ENUM.AREA_1) { + lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI); + } else if (area.value === AREA_ENUM.AREA_2) { + lp.lam = theta - HALF_PI; + } else /* area.value == AREA_ENUM.AREA_3 */ { + lp.lam = theta; + } + } else if (this.face === FACE_ENUM.BOTTOM) { + phi = Math.acos(cosphi); + lp.phi = phi - HALF_PI; + if (area.value === AREA_ENUM.AREA_0) { + lp.lam = -theta + HALF_PI; + } else if (area.value === AREA_ENUM.AREA_1) { + lp.lam = -theta; + } else if (area.value === AREA_ENUM.AREA_2) { + lp.lam = -theta - HALF_PI; + } else /* area.value == AREA_ENUM.AREA_3 */ { + lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI); + } + } else { + /* Compute phi and lam via cartesian unit sphere coordinates. */ + var q, r, s; + q = cosphi; + t = q * q; + if (t >= 1) { + s = 0; + } else { + s = Math.sqrt(1 - t) * Math.sin(theta); + } + t += s * s; + if (t >= 1) { + r = 0; + } else { + r = Math.sqrt(1 - t); + } + /* Rotate q,r,s into the correct area. */ + if (area.value === AREA_ENUM.AREA_1) { + t = r; + r = -s; + s = t; + } else if (area.value === AREA_ENUM.AREA_2) { + r = -r; + s = -s; + } else if (area.value === AREA_ENUM.AREA_3) { + t = r; + r = s; + s = -t; + } + /* Rotate q,r,s into the correct cube face. */ + if (this.face === FACE_ENUM.RIGHT) { + t = q; + q = -r; + r = t; + } else if (this.face === FACE_ENUM.BACK) { + q = -q; + r = -r; + } else if (this.face === FACE_ENUM.LEFT) { + t = q; + q = r; + r = -t; + } + /* Now compute phi and lam from the unit sphere coordinates. */ + lp.phi = Math.acos(-s) - HALF_PI; + lp.lam = Math.atan2(r, q); + if (this.face === FACE_ENUM.RIGHT) { + lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI); + } else if (this.face === FACE_ENUM.BACK) { + lp.lam = qsc_shift_lon_origin(lp.lam, -SPI); + } else if (this.face === FACE_ENUM.LEFT) { + lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI); + } + } + + /* Apply the shift from the sphere to the ellipsoid as described + * in [LK12]. */ + if (this.es !== 0) { + var invert_sign; + var tanphi, xa; + invert_sign = (lp.phi < 0 ? 1 : 0); + tanphi = Math.tan(lp.phi); + xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared); + lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa)); + if (invert_sign) { + lp.phi = -lp.phi; + } + } + + lp.lam += this.long0; + p.x = lp.lam; + p.y = lp.phi; + return p; + } + + /* Helper function for forward projection: compute the theta angle + * and determine the area number. */ + function qsc_fwd_equat_face_theta(phi, y, x, area) { + var theta; + if (phi < EPSLN) { + area.value = AREA_ENUM.AREA_0; + theta = 0.0; + } else { + theta = Math.atan2(y, x); + if (Math.abs(theta) <= FORTPI) { + area.value = AREA_ENUM.AREA_0; + } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) { + area.value = AREA_ENUM.AREA_1; + theta -= HALF_PI; + } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) { + area.value = AREA_ENUM.AREA_2; + theta = (theta >= 0.0 ? theta - SPI : theta + SPI); + } else { + area.value = AREA_ENUM.AREA_3; + theta += HALF_PI; + } + } + return theta; + } + + /* Helper function: shift the longitude. */ + function qsc_shift_lon_origin(lon, offset) { + var slon = lon + offset; + if (slon < -SPI) { + slon += TWO_PI; + } else if (slon > +SPI) { + slon -= TWO_PI; + } + return slon; + } + + var names$28 = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"]; + var qsc = { + init: init$27, + forward: forward$26, + inverse: inverse$26, + names: names$28 + }; + + // Robinson projection + // Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c + // Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039 + + var COEFS_X = [ + [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06], + [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06], + [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07], + [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06], + [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06], + [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08], + [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06], + [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06], + [0.9216, -0.00467746, -0.00010457, 4.81243e-06], + [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06], + [0.8679, -0.00609363, -0.000113898, 3.32484e-06], + [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07], + [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07], + [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06], + [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06], + [0.6732, -0.00986209, -0.000199569, 1.91974e-05], + [0.6213, -0.010418, 8.83923e-05, 6.24051e-06], + [0.5722, -0.00906601, 0.000182, 6.24051e-06], + [0.5322, -0.00677797, 0.000275608, 6.24051e-06] + ]; + + var COEFS_Y = [ + [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11], + [0.0620, 0.0124, -1.26793e-09, 4.22642e-10], + [0.1240, 0.0124, 5.07171e-09, -1.60604e-09], + [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09], + [0.2480, 0.0124002, 7.10039e-08, -2.24e-08], + [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08], + [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07], + [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07], + [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07], + [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07], + [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07], + [0.6769, 0.011713, -3.20223e-05, -5.16405e-07], + [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07], + [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06], + [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09], + [0.8936, 0.00969686, -6.4636e-05, -8.547e-06], + [0.9394, 0.00840947, -0.000192841, -4.2106e-06], + [0.9761, 0.00616527, -0.000256, -4.2106e-06], + [1.0000, 0.00328947, -0.000319159, -4.2106e-06] + ]; + + var FXC = 0.8487; + var FYC = 1.3523; + var C1 = R2D/5; // rad to 5-degree interval + var RC1 = 1/C1; + var NODES = 18; + + var poly3_val = function(coefs, x) { + return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3])); + }; + + var poly3_der = function(coefs, x) { + return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]); + }; + + function newton_rapshon(f_df, start, max_err, iters) { + var x = start; + for (; iters; --iters) { + var upd = f_df(x); + x -= upd; + if (Math.abs(upd) < max_err) { + break; + } + } + return x; + } + + function init$28() { + this.x0 = this.x0 || 0; + this.y0 = this.y0 || 0; + this.long0 = this.long0 || 0; + this.es = 0; + this.title = this.title || "Robinson"; + } + + function forward$27(ll) { + var lon = adjust_lon(ll.x - this.long0); + + var dphi = Math.abs(ll.y); + var i = Math.floor(dphi * C1); + if (i < 0) { + i = 0; + } else if (i >= NODES) { + i = NODES - 1; + } + dphi = R2D * (dphi - RC1 * i); + var xy = { + x: poly3_val(COEFS_X[i], dphi) * lon, + y: poly3_val(COEFS_Y[i], dphi) + }; + if (ll.y < 0) { + xy.y = -xy.y; + } + + xy.x = xy.x * this.a * FXC + this.x0; + xy.y = xy.y * this.a * FYC + this.y0; + return xy; + } + + function inverse$27(xy) { + var ll = { + x: (xy.x - this.x0) / (this.a * FXC), + y: Math.abs(xy.y - this.y0) / (this.a * FYC) + }; + + if (ll.y >= 1) { // pathologic case + ll.x /= COEFS_X[NODES][0]; + ll.y = xy.y < 0 ? -HALF_PI : HALF_PI; + } else { + // find table interval + var i = Math.floor(ll.y * NODES); + if (i < 0) { + i = 0; + } else if (i >= NODES) { + i = NODES - 1; + } + for (;;) { + if (COEFS_Y[i][0] > ll.y) { + --i; + } else if (COEFS_Y[i+1][0] <= ll.y) { + ++i; + } else { + break; + } + } + // linear interpolation in 5 degree interval + var coefs = COEFS_Y[i]; + var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]); + // find t so that poly3_val(coefs, t) = ll.y + t = newton_rapshon(function(x) { + return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x); + }, t, EPSLN, 100); + + ll.x /= poly3_val(COEFS_X[i], t); + ll.y = (5 * i + t) * D2R; + if (xy.y < 0) { + ll.y = -ll.y; + } + } + + ll.x = adjust_lon(ll.x + this.long0); + return ll; + } + + var names$29 = ["Robinson", "robin"]; + var robin = { + init: init$28, + forward: forward$27, + inverse: inverse$27, + names: names$29 + }; + + var includedProjections = function(proj4){ + proj4.Proj.projections.add(tmerc); + proj4.Proj.projections.add(etmerc); + proj4.Proj.projections.add(utm); + proj4.Proj.projections.add(sterea); + proj4.Proj.projections.add(stere); + proj4.Proj.projections.add(somerc); + proj4.Proj.projections.add(omerc); + proj4.Proj.projections.add(lcc); + proj4.Proj.projections.add(krovak); + proj4.Proj.projections.add(cass); + proj4.Proj.projections.add(laea); + proj4.Proj.projections.add(aea); + proj4.Proj.projections.add(gnom); + proj4.Proj.projections.add(cea); + proj4.Proj.projections.add(eqc); + proj4.Proj.projections.add(poly); + proj4.Proj.projections.add(nzmg); + proj4.Proj.projections.add(mill); + proj4.Proj.projections.add(sinu); + proj4.Proj.projections.add(moll); + proj4.Proj.projections.add(eqdc); + proj4.Proj.projections.add(vandg); + proj4.Proj.projections.add(aeqd); + proj4.Proj.projections.add(ortho); + proj4.Proj.projections.add(qsc); + proj4.Proj.projections.add(robin); + }; + + proj4$1.defaultDatum = 'WGS84'; //default datum + proj4$1.Proj = Projection; + proj4$1.WGS84 = new proj4$1.Proj('WGS84'); + proj4$1.Point = Point; + proj4$1.toPoint = toPoint; + proj4$1.defs = defs; + proj4$1.transform = transform; + proj4$1.mgrs = mgrs; + proj4$1.version = version; + includedProjections(proj4$1); + + return proj4$1; + +}))); + +},{}],317:[function(require,module,exports){ +'use strict' +var Buffer = require('buffer').Buffer +var inherits = require('inherits') +var HashBase = require('hash-base') + +var ARRAY16 = new Array(16) + +var zl = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +] + +var zr = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +] + +var sl = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +] + +var sr = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +] + +var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] +var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] + +function RIPEMD160 () { + HashBase.call(this, 64) + + // state + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 +} + +inherits(RIPEMD160, HashBase) + +RIPEMD160.prototype._update = function () { + var words = ARRAY16 + for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) + + var al = this._a | 0 + var bl = this._b | 0 + var cl = this._c | 0 + var dl = this._d | 0 + var el = this._e | 0 + + var ar = this._a | 0 + var br = this._b | 0 + var cr = this._c | 0 + var dr = this._d | 0 + var er = this._e | 0 + + // computation + for (var i = 0; i < 80; i += 1) { + var tl + var tr + if (i < 16) { + tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) + tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) + } else if (i < 32) { + tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) + tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) + } else if (i < 48) { + tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) + tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) + } else if (i < 64) { + tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) + tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) + } else { // if (i<80) { + tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) + tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) + } + + al = el + el = dl + dl = rotl(cl, 10) + cl = bl + bl = tl + + ar = er + er = dr + dr = rotl(cr, 10) + cr = br + br = tr + } + + // update state + var t = (this._b + cl + dr) | 0 + this._b = (this._c + dl + er) | 0 + this._c = (this._d + el + ar) | 0 + this._d = (this._e + al + br) | 0 + this._e = (this._a + bl + cr) | 0 + this._a = t +} + +RIPEMD160.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80 + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64) + this._update() + this._blockOffset = 0 + } + + this._block.fill(0, this._blockOffset, 56) + this._block.writeUInt32LE(this._length[0], 56) + this._block.writeUInt32LE(this._length[1], 60) + this._update() + + // produce result + var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) + buffer.writeInt32LE(this._a, 0) + buffer.writeInt32LE(this._b, 4) + buffer.writeInt32LE(this._c, 8) + buffer.writeInt32LE(this._d, 12) + buffer.writeInt32LE(this._e, 16) + return buffer +} + +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} + +function fn1 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn2 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 +} + +function fn3 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn4 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 +} + +function fn5 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 +} + +module.exports = RIPEMD160 + +},{"buffer":182,"hash-base":227,"inherits":262}],318:[function(require,module,exports){ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + +},{"buffer":182}],319:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +// prototype class for hash functions +function Hash (blockSize, finalSize) { + this._block = Buffer.alloc(blockSize) + this._finalSize = finalSize + this._blockSize = blockSize + this._len = 0 +} + +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8' + data = Buffer.from(data, enc) + } + + var block = this._block + var blockSize = this._blockSize + var length = data.length + var accum = this._len + + for (var offset = 0; offset < length;) { + var assigned = accum % blockSize + var remainder = Math.min(length - offset, blockSize - assigned) + + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i] + } + + accum += remainder + offset += remainder + + if ((accum % blockSize) === 0) { + this._update(block) + } + } + + this._len += length + return this +} + +Hash.prototype.digest = function (enc) { + var rem = this._len % this._blockSize + + this._block[rem] = 0x80 + + // zero (rem + 1) trailing bits, where (rem + 1) is the smallest + // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize + this._block.fill(0, rem + 1) + + if (rem >= this._finalSize) { + this._update(this._block) + this._block.fill(0) + } + + var bits = this._len * 8 + + // uint32 + if (bits <= 0xffffffff) { + this._block.writeUInt32BE(bits, this._blockSize - 4) + + // uint64 + } else { + var lowBits = (bits & 0xffffffff) >>> 0 + var highBits = (bits - lowBits) / 0x100000000 + + this._block.writeUInt32BE(highBits, this._blockSize - 8) + this._block.writeUInt32BE(lowBits, this._blockSize - 4) + } + + this._update(this._block) + var hash = this._hash() + + return enc ? hash.toString(enc) : hash +} + +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass') +} + +module.exports = Hash + +},{"safe-buffer":318}],320:[function(require,module,exports){ +var exports = module.exports = function SHA (algorithm) { + algorithm = algorithm.toLowerCase() + + var Algorithm = exports[algorithm] + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') + + return new Algorithm() +} + +exports.sha = require('./sha') +exports.sha1 = require('./sha1') +exports.sha224 = require('./sha224') +exports.sha256 = require('./sha256') +exports.sha384 = require('./sha384') +exports.sha512 = require('./sha512') + +},{"./sha":321,"./sha1":322,"./sha224":323,"./sha256":324,"./sha384":325,"./sha512":326}],321:[function(require,module,exports){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ + +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha, Hash) + +Sha.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha + +},{"./hash":319,"inherits":262,"safe-buffer":318}],322:[function(require,module,exports){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha1 () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha1, Hash) + +Sha1.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl1 (num) { + return (num << 1) | (num >>> 31) +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha1.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha1.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha1 + +},{"./hash":319,"inherits":262,"safe-buffer":318}],323:[function(require,module,exports){ +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits') +var Sha256 = require('./sha256') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var W = new Array(64) + +function Sha224 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha224, Sha256) + +Sha224.prototype.init = function () { + this._a = 0xc1059ed8 + this._b = 0x367cd507 + this._c = 0x3070dd17 + this._d = 0xf70e5939 + this._e = 0xffc00b31 + this._f = 0x68581511 + this._g = 0x64f98fa7 + this._h = 0xbefa4fa4 + + return this +} + +Sha224.prototype._hash = function () { + var H = Buffer.allocUnsafe(28) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + + return H +} + +module.exports = Sha224 + +},{"./hash":319,"./sha256":324,"inherits":262,"safe-buffer":318}],324:[function(require,module,exports){ +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +] + +var W = new Array(64) + +function Sha256 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha256, Hash) + +Sha256.prototype.init = function () { + this._a = 0x6a09e667 + this._b = 0xbb67ae85 + this._c = 0x3c6ef372 + this._d = 0xa54ff53a + this._e = 0x510e527f + this._f = 0x9b05688c + this._g = 0x1f83d9ab + this._h = 0x5be0cd19 + + return this +} + +function ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) +} + +function sigma1 (x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) +} + +function gamma0 (x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) +} + +function gamma1 (x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) +} + +Sha256.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + var f = this._f | 0 + var g = this._g | 0 + var h = this._h | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 + + for (var j = 0; j < 64; ++j) { + var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 + var T2 = (sigma0(a) + maj(a, b, c)) | 0 + + h = g + g = f + f = e + e = (d + T1) | 0 + d = c + c = b + b = a + a = (T1 + T2) | 0 + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 + this._f = (f + this._f) | 0 + this._g = (g + this._g) | 0 + this._h = (h + this._h) | 0 +} + +Sha256.prototype._hash = function () { + var H = Buffer.allocUnsafe(32) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + H.writeInt32BE(this._h, 28) + + return H +} + +module.exports = Sha256 + +},{"./hash":319,"inherits":262,"safe-buffer":318}],325:[function(require,module,exports){ +var inherits = require('inherits') +var SHA512 = require('./sha512') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var W = new Array(160) + +function Sha384 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha384, SHA512) + +Sha384.prototype.init = function () { + this._ah = 0xcbbb9d5d + this._bh = 0x629a292a + this._ch = 0x9159015a + this._dh = 0x152fecd8 + this._eh = 0x67332667 + this._fh = 0x8eb44a87 + this._gh = 0xdb0c2e0d + this._hh = 0x47b5481d + + this._al = 0xc1059ed8 + this._bl = 0x367cd507 + this._cl = 0x3070dd17 + this._dl = 0xf70e5939 + this._el = 0xffc00b31 + this._fl = 0x68581511 + this._gl = 0x64f98fa7 + this._hl = 0xbefa4fa4 + + return this +} + +Sha384.prototype._hash = function () { + var H = Buffer.allocUnsafe(48) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + + return H +} + +module.exports = Sha384 + +},{"./hash":319,"./sha512":326,"inherits":262,"safe-buffer":318}],326:[function(require,module,exports){ +var inherits = require('inherits') +var Hash = require('./hash') +var Buffer = require('safe-buffer').Buffer + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +] + +var W = new Array(160) + +function Sha512 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha512, Hash) + +Sha512.prototype.init = function () { + this._ah = 0x6a09e667 + this._bh = 0xbb67ae85 + this._ch = 0x3c6ef372 + this._dh = 0xa54ff53a + this._eh = 0x510e527f + this._fh = 0x9b05688c + this._gh = 0x1f83d9ab + this._hh = 0x5be0cd19 + + this._al = 0xf3bcc908 + this._bl = 0x84caa73b + this._cl = 0xfe94f82b + this._dl = 0x5f1d36f1 + this._el = 0xade682d1 + this._fl = 0x2b3e6c1f + this._gl = 0xfb41bd6b + this._hl = 0x137e2179 + + return this +} + +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) +} + +function sigma1 (x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +} + +function Gamma0 (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +} + +function Gamma0l (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) +} + +function Gamma1 (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) +} + +function Gamma1l (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) +} + +function getCarry (a, b) { + return (a >>> 0) < (b >>> 0) ? 1 : 0 +} + +Sha512.prototype._update = function (M) { + var W = this._w + + var ah = this._ah | 0 + var bh = this._bh | 0 + var ch = this._ch | 0 + var dh = this._dh | 0 + var eh = this._eh | 0 + var fh = this._fh | 0 + var gh = this._gh | 0 + var hh = this._hh | 0 + + var al = this._al | 0 + var bl = this._bl | 0 + var cl = this._cl | 0 + var dl = this._dl | 0 + var el = this._el | 0 + var fl = this._fl | 0 + var gl = this._gl | 0 + var hl = this._hl | 0 + + for (var i = 0; i < 32; i += 2) { + W[i] = M.readInt32BE(i * 4) + W[i + 1] = M.readInt32BE(i * 4 + 4) + } + for (; i < 160; i += 2) { + var xh = W[i - 15 * 2] + var xl = W[i - 15 * 2 + 1] + var gamma0 = Gamma0(xh, xl) + var gamma0l = Gamma0l(xl, xh) + + xh = W[i - 2 * 2] + xl = W[i - 2 * 2 + 1] + var gamma1 = Gamma1(xh, xl) + var gamma1l = Gamma1l(xl, xh) + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7h = W[i - 7 * 2] + var Wi7l = W[i - 7 * 2 + 1] + + var Wi16h = W[i - 16 * 2] + var Wi16l = W[i - 16 * 2 + 1] + + var Wil = (gamma0l + Wi7l) | 0 + var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 + Wil = (Wil + gamma1l) | 0 + Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 + Wil = (Wil + Wi16l) | 0 + Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 + + W[i] = Wih + W[i + 1] = Wil + } + + for (var j = 0; j < 160; j += 2) { + Wih = W[j] + Wil = W[j + 1] + + var majh = maj(ah, bh, ch) + var majl = maj(al, bl, cl) + + var sigma0h = sigma0(ah, al) + var sigma0l = sigma0(al, ah) + var sigma1h = sigma1(eh, el) + var sigma1l = sigma1(el, eh) + + // t1 = h + sigma1 + ch + K[j] + W[j] + var Kih = K[j] + var Kil = K[j + 1] + + var chh = Ch(eh, fh, gh) + var chl = Ch(el, fl, gl) + + var t1l = (hl + sigma1l) | 0 + var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 + t1l = (t1l + chl) | 0 + t1h = (t1h + chh + getCarry(t1l, chl)) | 0 + t1l = (t1l + Kil) | 0 + t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 + t1l = (t1l + Wil) | 0 + t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 + + // t2 = sigma0 + maj + var t2l = (sigma0l + majl) | 0 + var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 + + hh = gh + hl = gl + gh = fh + gl = fl + fh = eh + fl = el + el = (dl + t1l) | 0 + eh = (dh + t1h + getCarry(el, dl)) | 0 + dh = ch + dl = cl + ch = bh + cl = bl + bh = ah + bl = al + al = (t1l + t2l) | 0 + ah = (t1h + t2h + getCarry(al, t1l)) | 0 + } + + this._al = (this._al + al) | 0 + this._bl = (this._bl + bl) | 0 + this._cl = (this._cl + cl) | 0 + this._dl = (this._dl + dl) | 0 + this._el = (this._el + el) | 0 + this._fl = (this._fl + fl) | 0 + this._gl = (this._gl + gl) | 0 + this._hl = (this._hl + hl) | 0 + + this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 + this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 + this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 + this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 + this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 + this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 + this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 + this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 +} + +Sha512.prototype._hash = function () { + var H = Buffer.allocUnsafe(64) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + writeInt64BE(this._gh, this._gl, 48) + writeInt64BE(this._hh, this._hl, 56) + + return H +} + +module.exports = Sha512 + +},{"./hash":319,"inherits":262,"safe-buffer":318}],327:[function(require,module,exports){ +(function (process,Buffer,__dirname){ + +// We are modularizing this manually because the current modularize setting in Emscripten has some issues: +// https://github.com/kripken/emscripten/issues/5820 +// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`, +// which is able to be used/called before the WASM is loaded. +// The modularization below exports a promise that loads and resolves to the actual sql.js module. +// That way, this module can't be used before the WASM is finished loading. + +// We are going to define a function that a user will call to start loading initializing our Sql.js library +// 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 +// Instead, we want to return the previously loaded module + +// TODO: Make this not declare a global if used in the browser +var initSqlJsPromise = undefined; + +var initSqlJs = function (moduleConfig) { + + if (initSqlJsPromise){ + return initSqlJsPromise; + } + // If we're here, we've never called this function before + initSqlJsPromise = new Promise((resolveModule, reject) => { + + // We are modularizing this manually because the current modularize setting in Emscripten has some issues: + // https://github.com/kripken/emscripten/issues/5820 + + // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add + // properties to it, like `preRun`, `postRun`, etc + // We are using that to get notified when the WASM has finished loading. + // Only then will we return our promise + + // If they passed in a moduleConfig object, use that + // Otherwise, initialize Module to the empty object + var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {}; + + // EMCC only allows for a single onAbort function (not an array of functions) + // So if the user defined their own onAbort function, we remember it and call it + var originalOnAbortFunction = Module['onAbort']; + Module['onAbort'] = function (errorThatCausedAbort) { + reject(new Error(errorThatCausedAbort)); + if (originalOnAbortFunction){ + originalOnAbortFunction(errorThatCausedAbort); + } + }; + + Module['postRun'] = Module['postRun'] || []; + Module['postRun'].push(function () { + // When Emscripted calls postRun, this promise resolves with the built Module + resolveModule(Module); + }); + + // There is a section of code in the emcc-generated code below that looks like this: + // (Note that this is lowercase `module`) + // if (typeof module !== 'undefined') { + // module['exports'] = Module; + // } + // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js! + // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags, + // but that carries with it additional unnecessary baggage/bugs we don't want either. + // So, we have three options: + // 1) We undefine `module` + // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later + // 3) We write a script to remove those lines of code as part of the Make process. + // + // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward + // 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. + // That's a nice side effect since we're handling the modularization efforts ourselves + module = undefined; + + // The emcc-generated code and shell-post.js code goes below, + // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort +var aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {}); +var 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= +function(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?bc;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?bd;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)); +break;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?ab;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>>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;kc;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?cd;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, +v);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", +"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", +"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", +"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(" ")); +var 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", +"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= +10;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; +x="function"===typeof importScripts;y="object"===typeof process&&"function"===typeof require&&!ya&&!x;za=!ya&&!y&&!x;var z=""; +if(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>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; +function 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} +function 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>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; +function 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>2]=0;for(a=e+d;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; +function u(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16e?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):""} +function r(a,b,c,d){if(!(0=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} +function oa(a){for(var b=0,c=0;c=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){0ab&&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; +function bb(a){for(;0>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>0]=d.charCodeAt(n);l[k>>0]=0;D[b+ +4*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} +function 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)} +function 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)} +var 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=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),0b)a.da.length=b;else for(;a.da.length=a.node.ha)return 0;a=Math.min(a.node.ha-e,d);if(8b)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!== +(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>2)}catch(c){if(!c.code)throw c; +throw 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, +uid: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; +throw 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, +b,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; +throw 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, +Gb={};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>>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}} +function 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)} +function 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} +function 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")} +function 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);} +function 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}} +function $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)} +function 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)} +function 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)}} +function 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()})} +function 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()})} +function 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)&& +("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} +function 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=[]} +function 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} +function 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} +function 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=""}))}var Ic;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c} +function 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>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; +function 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} +function 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} +function Ia(a){if(2130706432=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); +function 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()>2]=d,D[Uc()+4>>2]=e):(D[Uc()>>2]=e,D[Uc()+4>>2]=d)}} +function 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]= +a;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>4; +e=(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>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(dd?-K.ja:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0; +case 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"); +d&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, +e=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= +b;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; +if(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}, +X: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; +case 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; +case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}nb(22);return-1}, +ac: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}}, +ag:function(){C("OOM")},ah:Oc,ai:60480,aj:Ga};// EMSCRIPTEN_START_ASM +var Z=(/** @suppress {uselessCode} */ function(global,env,buffer) { +"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} +// EMSCRIPTEN_START_FUNCS +function 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<>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>0|(0==(l|0)?(e[Xc>>1]|0)>>>0>>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>>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>>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>>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>>0&s>>>0>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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<>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>>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>>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>>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>>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} +function $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<>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<>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>>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>>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>>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<>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<>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<>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>>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>>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<>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<>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<>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<>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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} +function 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<>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<>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<>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<>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>>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>>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>>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>>0|(0==(m|0)?(e[n+276>>1]|0)>>>0>>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>>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>>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>>0|(0==(n|0)?(e[k+276>>1]|0)>>>0>>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<>0]|0)==0?0:1<>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>>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>>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>>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>>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

        >>0|(0==(p|0)?(e[f+276>>1]|0)>>>0>>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<>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>>0|(0==(k|0)?(e[b+276>>1]|0)>>>0>>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>>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>>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>>0|(0==(k|0)?(e[d+276>>1]|0)>>>0>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0>>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} +function 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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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<>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<>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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} +function 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>>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>>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>>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>>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>>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<>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<>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

        >>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>>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>>0|(0==(h|0)?(e[n+276>>1]|0)>>>0>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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} +function 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<>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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

        >>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

        >>0))break;h=zf(d,l,u,1,1)|0;j=j+1|0;if(!(j>>>0>>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

        >>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>>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>>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>>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>>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>>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>>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>>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<>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<>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>>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>>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>>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} +function 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>>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<>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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<>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

        >>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>>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>>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>>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

        >>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>>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>>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>>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

        >>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>>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>>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>>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>>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>>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>>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>>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>>0|(0==(f|0)?(e[b+276>>1]|0)>>>0>>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>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0>>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>>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>>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>>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>>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>>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} +function 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>>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>>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>>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>>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>>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>>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>>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>>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>>0:0)?(O=c[W>>2]|0,0<(l|0)|0==(l|0)&O>>>0>>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>>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>>0|(0==(l|0)?(e[m+276>>1]|0)>>>0>>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>>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

        >>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>>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>>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>>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>>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>>0&i>>>0>>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>>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>>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<>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} +function 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>>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>>0|(0==(i|0)?(e[x+276>>1]|0)>>>0>>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>>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>>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>>0)return;l=a+52|0;e=c[l>>2]|0;if((d-b|0)>>>0>>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>>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>>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>>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>>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>>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>>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>>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>>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

        >>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

        >>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>>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} +function 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<>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>>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<>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>>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>>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<>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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

        >>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

        >>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>>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>>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>>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>>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<>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} +function 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>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(!(ek){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(!(nk){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>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(!(kj){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(!(kj){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(!(jk){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>>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>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>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>>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>>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>>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>>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>>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>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>>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>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>>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>>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>>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>>0>>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>>0>>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>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>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>>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>>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>>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>2];B=+f[n+8+(z<<2)>>2];f[A>>2]=C>B?C:B;g=g+2|0}while(g>>>0>>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>>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>2];D=+f[g+8+(j<<2)>>2];f[k>>2]=E>D?E:D;b=b+2|0}while(b>>>0>>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>>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>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>>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>>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>>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>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>>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>>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>>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} +function 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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>0)){if(l>>>0>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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

        >>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

        >>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>>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>>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>>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>>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>>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} +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;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>>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>>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>>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>>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>>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>>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<>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>>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

        >>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>>0|(0==(o|0)?(e[q+276>>1]|0)>>>0

        >>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>>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>>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>>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>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>>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>>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>>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>>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>>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>>0|(0==(k|0)?(e[ka+276>>1]|0)>>>0>>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>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>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>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>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>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>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>>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} +function 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

        >>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>>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>>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>>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>>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>>0)do{if(a[g>>0]|0)break a;g=g+1|0}while(g>>>0>>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

        >>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

        >>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>>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>>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} +function 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<>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>0|(ia|0)==(l|0)&ja>>>0>>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<>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<>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<>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>>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>>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>>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<>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>>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>>0|(D|0)==(t|0)&j>>>0>>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>>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>>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>>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>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>>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>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>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>>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<>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>>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>>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>>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>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>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>>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} +function 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>>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>>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>>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>>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>>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>>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>>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>>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>>0){l=b;while(1){if(a[l>>0]|0)break;b=l+1|0;if(b>>>0>>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

        >>0)do{if(a[e>>0]|0)break a;e=e+1|0}while(e>>>0

        >>0);while(0);if(e>>>0

        >>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>>0)o=b;else while(1){if((a[b>>0]|0)>=0){o=b;break b}b=b+-1|0;if(b>>>0>>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>>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>>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>>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>>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}} +function 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>>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>>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>>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>>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>>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>>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>>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<>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>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>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>>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>>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} +function 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<>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<>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<>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<>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<>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<>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<>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<>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<>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<>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<>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>>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<>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<>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}} +function 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>>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>>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>>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>>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>>0){while(1){n=a[l>>0]|0;if(n<<24>>24)break;j=l+1|0;if(j>>>0>>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} +function 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>>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>>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>>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>>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>>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>>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>>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

        >>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

        >>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>>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<>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>>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>>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>>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>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0>>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>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0>>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>>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>>0|(0==(k|0)?(e[j+276>>1]|0)>>>0>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>0)}else{j=0;b=0;m=0}while(0);c:do if(f>>>0>>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>>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>>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>>0)l=e;else break}else e=l}else e=l;while(0);if(f>>>0>>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>>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>>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>>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>>0){while(1){g=a[i>>0]|0;if(!(a[880+(g&255)>>0]&1))break;g=i+o|0;if(g>>>0>>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>>0){i=g;do{if((a[i>>0]|0)!=48)break c;i=i+o|0}while(i>>>0>>0)}else i=g;while(0);do if(i>>>0>>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>>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} +function 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>>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(hf&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>>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>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>>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>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>>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>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>>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(no){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

        >>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>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>>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

        >>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>>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} +function 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<>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<>>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<>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<>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>>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<>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<>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<>>16&4;q=q<>>16&2;j=14-(i|m|j)+(q<>>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>>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<>>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>>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<>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<>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<>>16&4;v=v<>>16&2;d=14-(t|u|d)+(v<>>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<>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

        >>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<>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<>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<>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<>>16&4;v=v<>>16&2;e=14-(t|u|e)+(v<>>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<>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>>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>>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<>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<>>16&4;v=v<>>16&2;e=14-(t|u|e)+(v<>>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<>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>>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>>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<>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<>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<>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<>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<>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<>>16&4;j=j<>>16&2;e=14-(g|h|e)+(j<>>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<>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>>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>>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>>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<>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<>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<>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<>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<>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<>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<>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<>>16&4;i=i<>>16&2;e=14-(d|g|e)+(i<>>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<>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>>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>>2>>>0?(n=d-(h<<2)|0,f>>>0>>0&g>>>0>>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>>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>>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>>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>>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<>2]=d<>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>>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<>>(m>>>0)&b;g=0;i=l<>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<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>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<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>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-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-32|0}function cw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b<>>32-c|0);return 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)} +function 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>>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<>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<>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>>0|(0==(m|0)?(e[A>>1]|0)>>>0>>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>>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>>0|(0==(n|0)?(e[M+276>>1]|0)>>>0>>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>>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>>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>>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<>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>>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>>0|(0==(t|0)?(e[xa+276>>1]|0)>>>0>>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>>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>>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<>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>>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>>0|(0==(n|0)?(e[K+276>>1]|0)>>>0>>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<>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} +function 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<>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>>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>>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<>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<>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<>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} +function 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<>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<>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>>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>>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<>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} +function 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

        >>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>>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>>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>>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>>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} + +// EMSCRIPTEN_END_FUNCS +var 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}}) + + +// EMSCRIPTEN_END_ASM +(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; +var 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; +f._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; +f._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; +f._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; +f._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; +f.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; +if(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, +ed,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", +hd)}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)}; +function 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"== +typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();fb.unshift(a)}bb(fb)}}if(!(0 self._pos) { + var newData = response.substr(self._pos) + if (self._charset === 'x-user-defined') { + var buffer = new Buffer(newData.length) + for (var i = 0; i < newData.length; i++) + buffer[i] = newData.charCodeAt(i) & 0xff + + self.push(buffer) + } else { + self.push(newData, self._charset) + } + self._pos = response.length + } + break + case 'arraybuffer': + if (xhr.readyState !== rStates.DONE || !xhr.response) + break + response = xhr.response + self.push(new Buffer(new Uint8Array(response))) + break + case 'moz-chunked-arraybuffer': // take whole + response = xhr.response + if (xhr.readyState !== rStates.LOADING || !response) + break + self.push(new Buffer(new Uint8Array(response))) + break + case 'ms-stream': + response = xhr.response + if (xhr.readyState !== rStates.LOADING) + break + var reader = new global.MSStreamReader() + reader.onprogress = function () { + if (reader.result.byteLength > self._pos) { + self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos)))) + self._pos = reader.result.byteLength + } + } + reader.onload = function () { + self.push(null) + } + // reader.onerror = ??? // TODO: this + reader.readAsArrayBuffer(response) + break + } + + // The ms-stream case handles end separately in reader.onload() + if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') { + self.push(null) + } +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) +},{"./capability":330,"_process":284,"buffer":182,"inherits":262,"readable-stream":312}],333:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var Buffer = require('safe-buffer').Buffer; +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + 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': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + 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; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} +},{"safe-buffer":334}],334:[function(require,module,exports){ +arguments[4][178][0].apply(exports,arguments) +},{"buffer":182,"dup":178}],335:[function(require,module,exports){ +(function (setImmediate,clearImmediate){ +var nextTick = require('process/browser.js').nextTick; +var apply = Function.prototype.apply; +var slice = Array.prototype.slice; +var immediateIds = {}; +var nextImmediateId = 0; + +// DOM APIs, for completeness + +exports.setTimeout = function() { + return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); +}; +exports.setInterval = function() { + return new Timeout(apply.call(setInterval, window, arguments), clearInterval); +}; +exports.clearTimeout = +exports.clearInterval = function(timeout) { timeout.close(); }; + +function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; +} +Timeout.prototype.unref = Timeout.prototype.ref = function() {}; +Timeout.prototype.close = function() { + this._clearFn.call(window, this._id); +}; + +// Does not start the time, just sets up the members needed. +exports.enroll = function(item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; +}; + +exports.unenroll = function(item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; +}; + +exports._unrefActive = exports.active = function(item) { + clearTimeout(item._idleTimeoutId); + + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) + item._onTimeout(); + }, msecs); + } +}; + +// That's not how node.js implements it but the exposed api is the same. +exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { + var id = nextImmediateId++; + var args = arguments.length < 2 ? false : slice.call(arguments, 1); + + immediateIds[id] = true; + + nextTick(function onNextTick() { + if (immediateIds[id]) { + // fn.call() is faster so we optimize for the common use-case + // @see http://jsperf.com/call-apply-segu + if (args) { + fn.apply(null, args); + } else { + fn.call(null); + } + // Prevent ids from leaking + exports.clearImmediate(id); + } + }); + + return id; +}; + +exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { + delete immediateIds[id]; +}; +}).call(this,require("timers").setImmediate,require("timers").clearImmediate) +},{"process/browser.js":284,"timers":335}],336:[function(require,module,exports){ +var Buffer = require('buffer').Buffer + +module.exports = function (buf) { + // If the buffer is backed by a Uint8Array, a faster version will work + if (buf instanceof Uint8Array) { + // If the buffer isn't a subarray, return the underlying ArrayBuffer + if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { + return buf.buffer + } else if (typeof buf.buffer.slice === 'function') { + // Otherwise we need to get a proper copy + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) + } + } + + if (Buffer.isBuffer(buf)) { + // This is the slow version that will work with any Buffer + // implementation (even in old browsers) + var arrayCopy = new Uint8Array(buf.length) + var len = buf.length + for (var i = 0; i < len; i++) { + arrayCopy[i] = buf[i] + } + return arrayCopy.buffer + } else { + throw new Error('Argument must be a Buffer') + } +} + +},{"buffer":182}],337:[function(require,module,exports){ +var undefined = (void 0); // Paranoia + +// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to +// create, and consume so much memory, that the browser appears frozen. +var MAX_ARRAY_LENGTH = 1e5; + +// Approximations of internal ECMAScript conversion functions +var ECMAScript = (function() { + // Stash a copy in case other scripts modify these + var opts = Object.prototype.toString, + ophop = Object.prototype.hasOwnProperty; + + return { + // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues: + Class: function(v) { return opts.call(v).replace(/^\[object *|\]$/g, ''); }, + HasProperty: function(o, p) { return p in o; }, + HasOwnProperty: function(o, p) { return ophop.call(o, p); }, + IsCallable: function(o) { return typeof o === 'function'; }, + ToInt32: function(v) { return v >> 0; }, + ToUint32: function(v) { return v >>> 0; } + }; +}()); + +// Snapshot intrinsics +var LN2 = Math.LN2, + abs = Math.abs, + floor = Math.floor, + log = Math.log, + min = Math.min, + pow = Math.pow, + round = Math.round; + +// ES5: lock down object properties +function configureProperties(obj) { + if (getOwnPropNames && defineProp) { + var props = getOwnPropNames(obj), i; + for (i = 0; i < props.length; i += 1) { + defineProp(obj, props[i], { + value: obj[props[i]], + writable: false, + enumerable: false, + configurable: false + }); + } + } +} + +// emulate ES5 getter/setter API using legacy APIs +// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx +// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but +// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless) +var defineProp +if (Object.defineProperty && (function() { + try { + Object.defineProperty({}, 'x', {}); + return true; + } catch (e) { + return false; + } + })()) { + defineProp = Object.defineProperty; +} else { + defineProp = function(o, p, desc) { + if (!o === Object(o)) throw new TypeError("Object.defineProperty called on non-object"); + if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); } + if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); } + if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; } + return o; + }; +} + +var getOwnPropNames = Object.getOwnPropertyNames || function (o) { + if (o !== Object(o)) throw new TypeError("Object.getOwnPropertyNames called on non-object"); + var props = [], p; + for (p in o) { + if (ECMAScript.HasOwnProperty(o, p)) { + props.push(p); + } + } + return props; +}; + +// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value) +// for index in 0 ... obj.length +function makeArrayAccessors(obj) { + if (!defineProp) { return; } + + if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError("Array too large for polyfill"); + + function makeArrayAccessor(index) { + defineProp(obj, index, { + 'get': function() { return obj._getter(index); }, + 'set': function(v) { obj._setter(index, v); }, + enumerable: true, + configurable: false + }); + } + + var i; + for (i = 0; i < obj.length; i += 1) { + makeArrayAccessor(i); + } +} + +// Internal conversion functions: +// pack() - take a number (interpreted as Type), output a byte array +// unpack() - take a byte array, output a Type-like number + +function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; } +function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; } + +function packI8(n) { return [n & 0xff]; } +function unpackI8(bytes) { return as_signed(bytes[0], 8); } + +function packU8(n) { return [n & 0xff]; } +function unpackU8(bytes) { return as_unsigned(bytes[0], 8); } + +function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; } + +function packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; } +function unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); } + +function packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; } +function unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); } + +function packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } +function unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } + +function packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } +function unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } + +function packIEEE754(v, ebits, fbits) { + + var bias = (1 << (ebits - 1)) - 1, + s, e, f, ln, + i, bits, str, bytes; + + function roundToEven(n) { + var w = floor(n), f = n - w; + if (f < 0.5) + return w; + if (f > 0.5) + return w + 1; + return w % 2 ? w + 1 : w; + } + + // Compute sign, exponent, fraction + if (v !== v) { + // NaN + // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping + e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0; + } else if (v === Infinity || v === -Infinity) { + e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0; + } else if (v === 0) { + e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0; + } else { + s = v < 0; + v = abs(v); + + if (v >= pow(2, 1 - bias)) { + e = min(floor(log(v) / LN2), 1023); + f = roundToEven(v / pow(2, e) * pow(2, fbits)); + if (f / pow(2, fbits) >= 2) { + e = e + 1; + f = 1; + } + if (e > bias) { + // Overflow + e = (1 << ebits) - 1; + f = 0; + } else { + // Normalized + e = e + bias; + f = f - pow(2, fbits); + } + } else { + // Denormalized + e = 0; + f = roundToEven(v / pow(2, 1 - bias - fbits)); + } + } + + // Pack sign, exponent, fraction + bits = []; + for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); } + for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); } + bits.push(s ? 1 : 0); + bits.reverse(); + str = bits.join(''); + + // Bits to bytes + bytes = []; + while (str.length) { + bytes.push(parseInt(str.substring(0, 8), 2)); + str = str.substring(8); + } + return bytes; +} + +function unpackIEEE754(bytes, ebits, fbits) { + + // Bytes to bits + var bits = [], i, j, b, str, + bias, s, e, f; + + for (i = bytes.length; i; i -= 1) { + b = bytes[i - 1]; + for (j = 8; j; j -= 1) { + bits.push(b % 2 ? 1 : 0); b = b >> 1; + } + } + bits.reverse(); + str = bits.join(''); + + // Unpack sign, exponent, fraction + bias = (1 << (ebits - 1)) - 1; + s = parseInt(str.substring(0, 1), 2) ? -1 : 1; + e = parseInt(str.substring(1, 1 + ebits), 2); + f = parseInt(str.substring(1 + ebits), 2); + + // Produce number + if (e === (1 << ebits) - 1) { + return f !== 0 ? NaN : s * Infinity; + } else if (e > 0) { + // Normalized + return s * pow(2, e - bias) * (1 + f / pow(2, fbits)); + } else if (f !== 0) { + // Denormalized + return s * pow(2, -(bias - 1)) * (f / pow(2, fbits)); + } else { + return s < 0 ? -0 : 0; + } +} + +function unpackF64(b) { return unpackIEEE754(b, 11, 52); } +function packF64(v) { return packIEEE754(v, 11, 52); } +function unpackF32(b) { return unpackIEEE754(b, 8, 23); } +function packF32(v) { return packIEEE754(v, 8, 23); } + + +// +// 3 The ArrayBuffer Type +// + +(function() { + + /** @constructor */ + var ArrayBuffer = function ArrayBuffer(length) { + length = ECMAScript.ToInt32(length); + if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer'); + + this.byteLength = length; + this._bytes = []; + this._bytes.length = length; + + var i; + for (i = 0; i < this.byteLength; i += 1) { + this._bytes[i] = 0; + } + + configureProperties(this); + }; + + exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer; + + // + // 4 The ArrayBufferView Type + // + + // NOTE: this constructor is not exported + /** @constructor */ + var ArrayBufferView = function ArrayBufferView() { + //this.buffer = null; + //this.byteOffset = 0; + //this.byteLength = 0; + }; + + // + // 5 The Typed Array View Types + // + + function makeConstructor(bytesPerElement, pack, unpack) { + // Each TypedArray type requires a distinct constructor instance with + // identical logic, which this produces. + + var ctor; + ctor = function(buffer, byteOffset, length) { + var array, sequence, i, s; + + if (!arguments.length || typeof arguments[0] === 'number') { + // Constructor(unsigned long length) + this.length = ECMAScript.ToInt32(arguments[0]); + if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer'); + + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; + } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) { + // Constructor(TypedArray array) + array = arguments[0]; + + this.length = array.length; + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; + + for (i = 0; i < this.length; i += 1) { + this._setter(i, array._getter(i)); + } + } else if (typeof arguments[0] === 'object' && + !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { + // Constructor(sequence array) + sequence = arguments[0]; + + this.length = ECMAScript.ToUint32(sequence.length); + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + this.buffer = new ArrayBuffer(this.byteLength); + this.byteOffset = 0; + + for (i = 0; i < this.length; i += 1) { + s = sequence[i]; + this._setter(i, Number(s)); + } + } else if (typeof arguments[0] === 'object' && + (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { + // Constructor(ArrayBuffer buffer, + // optional unsigned long byteOffset, optional unsigned long length) + this.buffer = buffer; + + this.byteOffset = ECMAScript.ToUint32(byteOffset); + if (this.byteOffset > this.buffer.byteLength) { + throw new RangeError("byteOffset out of range"); + } + + if (this.byteOffset % this.BYTES_PER_ELEMENT) { + // The given byteOffset must be a multiple of the element + // size of the specific type, otherwise an exception is raised. + throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size."); + } + + if (arguments.length < 3) { + this.byteLength = this.buffer.byteLength - this.byteOffset; + + if (this.byteLength % this.BYTES_PER_ELEMENT) { + throw new RangeError("length of buffer minus byteOffset not a multiple of the element size"); + } + this.length = this.byteLength / this.BYTES_PER_ELEMENT; + } else { + this.length = ECMAScript.ToUint32(length); + this.byteLength = this.length * this.BYTES_PER_ELEMENT; + } + + if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { + throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); + } + } else { + throw new TypeError("Unexpected argument type(s)"); + } + + this.constructor = ctor; + + configureProperties(this); + makeArrayAccessors(this); + }; + + ctor.prototype = new ArrayBufferView(); + ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement; + ctor.prototype._pack = pack; + ctor.prototype._unpack = unpack; + ctor.BYTES_PER_ELEMENT = bytesPerElement; + + // getter type (unsigned long index); + ctor.prototype._getter = function(index) { + if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); + + index = ECMAScript.ToUint32(index); + if (index >= this.length) { + return undefined; + } + + var bytes = [], i, o; + for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; + i < this.BYTES_PER_ELEMENT; + i += 1, o += 1) { + bytes.push(this.buffer._bytes[o]); + } + return this._unpack(bytes); + }; + + // NONSTANDARD: convenience alias for getter: type get(unsigned long index); + ctor.prototype.get = ctor.prototype._getter; + + // setter void (unsigned long index, type value); + ctor.prototype._setter = function(index, value) { + if (arguments.length < 2) throw new SyntaxError("Not enough arguments"); + + index = ECMAScript.ToUint32(index); + if (index >= this.length) { + return undefined; + } + + var bytes = this._pack(value), i, o; + for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; + i < this.BYTES_PER_ELEMENT; + i += 1, o += 1) { + this.buffer._bytes[o] = bytes[i]; + } + }; + + // void set(TypedArray array, optional unsigned long offset); + // void set(sequence array, optional unsigned long offset); + ctor.prototype.set = function(index, value) { + if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); + var array, sequence, offset, len, + i, s, d, + byteOffset, byteLength, tmp; + + if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) { + // void set(TypedArray array, optional unsigned long offset); + array = arguments[0]; + offset = ECMAScript.ToUint32(arguments[1]); + + if (offset + array.length > this.length) { + throw new RangeError("Offset plus length of array is out of range"); + } + + byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT; + byteLength = array.length * this.BYTES_PER_ELEMENT; + + if (array.buffer === this.buffer) { + tmp = []; + for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) { + tmp[i] = array.buffer._bytes[s]; + } + for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) { + this.buffer._bytes[d] = tmp[i]; + } + } else { + for (i = 0, s = array.byteOffset, d = byteOffset; + i < byteLength; i += 1, s += 1, d += 1) { + this.buffer._bytes[d] = array.buffer._bytes[s]; + } + } + } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') { + // void set(sequence array, optional unsigned long offset); + sequence = arguments[0]; + len = ECMAScript.ToUint32(sequence.length); + offset = ECMAScript.ToUint32(arguments[1]); + + if (offset + len > this.length) { + throw new RangeError("Offset plus length of array is out of range"); + } + + for (i = 0; i < len; i += 1) { + s = sequence[i]; + this._setter(offset + i, Number(s)); + } + } else { + throw new TypeError("Unexpected argument type(s)"); + } + }; + + // TypedArray subarray(long begin, optional long end); + ctor.prototype.subarray = function(start, end) { + function clamp(v, min, max) { return v < min ? min : v > max ? max : v; } + + start = ECMAScript.ToInt32(start); + end = ECMAScript.ToInt32(end); + + if (arguments.length < 1) { start = 0; } + if (arguments.length < 2) { end = this.length; } + + if (start < 0) { start = this.length + start; } + if (end < 0) { end = this.length + end; } + + start = clamp(start, 0, this.length); + end = clamp(end, 0, this.length); + + var len = end - start; + if (len < 0) { + len = 0; + } + + return new this.constructor( + this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len); + }; + + return ctor; + } + + var Int8Array = makeConstructor(1, packI8, unpackI8); + var Uint8Array = makeConstructor(1, packU8, unpackU8); + var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8); + var Int16Array = makeConstructor(2, packI16, unpackI16); + var Uint16Array = makeConstructor(2, packU16, unpackU16); + var Int32Array = makeConstructor(4, packI32, unpackI32); + var Uint32Array = makeConstructor(4, packU32, unpackU32); + var Float32Array = makeConstructor(4, packF32, unpackF32); + var Float64Array = makeConstructor(8, packF64, unpackF64); + + exports.Int8Array = exports.Int8Array || Int8Array; + exports.Uint8Array = exports.Uint8Array || Uint8Array; + exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray; + exports.Int16Array = exports.Int16Array || Int16Array; + exports.Uint16Array = exports.Uint16Array || Uint16Array; + exports.Int32Array = exports.Int32Array || Int32Array; + exports.Uint32Array = exports.Uint32Array || Uint32Array; + exports.Float32Array = exports.Float32Array || Float32Array; + exports.Float64Array = exports.Float64Array || Float64Array; +}()); + +// +// 6 The DataView View Type +// + +(function() { + function r(array, index) { + return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index]; + } + + var IS_BIG_ENDIAN = (function() { + var u16array = new(exports.Uint16Array)([0x1234]), + u8array = new(exports.Uint8Array)(u16array.buffer); + return r(u8array, 0) === 0x12; + }()); + + // Constructor(ArrayBuffer buffer, + // optional unsigned long byteOffset, + // optional unsigned long byteLength) + /** @constructor */ + var DataView = function DataView(buffer, byteOffset, byteLength) { + if (arguments.length === 0) { + buffer = new exports.ArrayBuffer(0); + } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) { + throw new TypeError("TypeError"); + } + + this.buffer = buffer || new exports.ArrayBuffer(0); + + this.byteOffset = ECMAScript.ToUint32(byteOffset); + if (this.byteOffset > this.buffer.byteLength) { + throw new RangeError("byteOffset out of range"); + } + + if (arguments.length < 3) { + this.byteLength = this.buffer.byteLength - this.byteOffset; + } else { + this.byteLength = ECMAScript.ToUint32(byteLength); + } + + if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { + throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); + } + + configureProperties(this); + }; + + function makeGetter(arrayType) { + return function(byteOffset, littleEndian) { + + byteOffset = ECMAScript.ToUint32(byteOffset); + + if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { + throw new RangeError("Array index out of range"); + } + byteOffset += this.byteOffset; + + var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT), + bytes = [], i; + for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { + bytes.push(r(uint8Array, i)); + } + + if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { + bytes.reverse(); + } + + return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0); + }; + } + + DataView.prototype.getUint8 = makeGetter(exports.Uint8Array); + DataView.prototype.getInt8 = makeGetter(exports.Int8Array); + DataView.prototype.getUint16 = makeGetter(exports.Uint16Array); + DataView.prototype.getInt16 = makeGetter(exports.Int16Array); + DataView.prototype.getUint32 = makeGetter(exports.Uint32Array); + DataView.prototype.getInt32 = makeGetter(exports.Int32Array); + DataView.prototype.getFloat32 = makeGetter(exports.Float32Array); + DataView.prototype.getFloat64 = makeGetter(exports.Float64Array); + + function makeSetter(arrayType) { + return function(byteOffset, value, littleEndian) { + + byteOffset = ECMAScript.ToUint32(byteOffset); + if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { + throw new RangeError("Array index out of range"); + } + + // Get bytes + var typeArray = new arrayType([value]), + byteArray = new exports.Uint8Array(typeArray.buffer), + bytes = [], i, byteView; + + for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { + bytes.push(r(byteArray, i)); + } + + // Flip if necessary + if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { + bytes.reverse(); + } + + // Write them + byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT); + byteView.set(bytes); + }; + } + + DataView.prototype.setUint8 = makeSetter(exports.Uint8Array); + DataView.prototype.setInt8 = makeSetter(exports.Int8Array); + DataView.prototype.setUint16 = makeSetter(exports.Uint16Array); + DataView.prototype.setInt16 = makeSetter(exports.Int16Array); + DataView.prototype.setUint32 = makeSetter(exports.Uint32Array); + DataView.prototype.setInt32 = makeSetter(exports.Int32Array); + DataView.prototype.setFloat32 = makeSetter(exports.Float32Array); + DataView.prototype.setFloat64 = makeSetter(exports.Float64Array); + + exports.DataView = exports.DataView || DataView; + +}()); + +},{}],338:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +var punycode = require('punycode'); +var util = require('./util'); + +exports.parse = urlParse; +exports.resolve = urlResolve; +exports.resolveObject = urlResolveObject; +exports.format = urlFormat; + +exports.Url = Url; + +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.host = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.query = null; + this.pathname = null; + this.path = null; + this.href = null; +} + +// Reference: RFC 3986, RFC 1808, RFC 2396 + +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, + + // Special case for a simple path URL + simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, + + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], + + // RFC 2396: characters not allowed for various reasons. + unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), + + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = ['\''].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), + hostEndingChars = ['/', '?', '#'], + hostnameMaxLen = 255, + hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + unsafeProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }, + querystring = require('querystring'); + +function urlParse(url, parseQueryString, slashesDenoteHost) { + if (url && util.isObject(url) && url instanceof Url) return url; + + var u = new Url; + u.parse(url, parseQueryString, slashesDenoteHost); + return u; +} + +Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { + if (!util.isString(url)) { + throw new TypeError("Parameter 'url' must be a string, not " + typeof url); + } + + // Copy chrome, IE, opera backslash-handling behavior. + // Back slashes before the query string get converted to forward slashes + // See: https://code.google.com/p/chromium/issues/detail?id=25916 + var queryIndex = url.indexOf('?'), + splitter = + (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', + uSplit = url.split(splitter), + slashRegex = /\\/g; + uSplit[0] = uSplit[0].replace(slashRegex, '/'); + url = uSplit.join(splitter); + + var rest = url; + + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); + + if (!slashesDenoteHost && url.split('#').length === 1) { + // Try fast path regexp + var simplePath = simplePathPattern.exec(rest); + if (simplePath) { + this.path = rest; + this.href = rest; + this.pathname = simplePath[1]; + if (simplePath[2]) { + this.search = simplePath[2]; + if (parseQueryString) { + this.query = querystring.parse(this.search.substr(1)); + } else { + this.query = this.search.substr(1); + } + } else if (parseQueryString) { + this.search = ''; + this.query = {}; + } + return this; + } + } + + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + var lowerProto = proto.toLowerCase(); + this.protocol = lowerProto; + rest = rest.substr(proto.length); + } + + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + this.slashes = true; + } + } + + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { + + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c + + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. + + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (var i = 0; i < hostEndingChars.length; i++) { + var hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } + + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = decodeURIComponent(auth); + } + + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (var i = 0; i < nonHostChars.length; i++) { + var hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) + hostEnd = rest.length; + + this.host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); + + // pull out port. + this.parseHost(); + + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; + + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; + + // validate a little. + if (!ipv6Hostname) { + var hostparts = this.hostname.split(/\./); + for (var i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) continue; + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = '/' + notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break; + } + } + } + } + + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; + } else { + // hostnames are always lower case. + this.hostname = this.hostname.toLowerCase(); + } + + if (!ipv6Hostname) { + // IDNA Support: Returns a punycoded representation of "domain". + // It only converts parts of the domain name that + // have non-ASCII characters, i.e. it doesn't matter if + // you call it with a domain that already is ASCII-only. + this.hostname = punycode.toASCII(this.hostname); + } + + var p = this.port ? ':' + this.port : ''; + var h = this.hostname || ''; + this.host = h + p; + this.href += this.host; + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + if (rest[0] !== '/') { + rest = '/' + rest; + } + } + } + + // now rest is set to the post-host stuff. + // chop off any delim chars. + if (!unsafeProtocol[lowerProto]) { + + // First, make 100% sure that any "autoEscape" chars get + // escaped, even if encodeURIComponent doesn't think they + // need to be. + for (var i = 0, l = autoEscape.length; i < l; i++) { + var ae = autoEscape[i]; + if (rest.indexOf(ae) === -1) + continue; + var esc = encodeURIComponent(ae); + if (esc === ae) { + esc = escape(ae); + } + rest = rest.split(ae).join(esc); + } + } + + + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + this.query = rest.substr(qm + 1); + if (parseQueryString) { + this.query = querystring.parse(this.query); + } + rest = rest.slice(0, qm); + } else if (parseQueryString) { + // no query string, but parseQueryString still requested + this.search = ''; + this.query = {}; + } + if (rest) this.pathname = rest; + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = '/'; + } + + //to support http.request + if (this.pathname || this.search) { + var p = this.pathname || ''; + var s = this.search || ''; + this.path = p + s; + } + + // finally, reconstruct the href based on what has been validated. + this.href = this.format(); + return this; +}; + +// format a parsed object into a url string +function urlFormat(obj) { + // ensure it's an object, and not a string url. + // If it's an obj, this is a no-op. + // this way, you can call url_format() on strings + // to clean up potentially wonky urls. + if (util.isString(obj)) obj = urlParse(obj); + if (!(obj instanceof Url)) return Url.prototype.format.call(obj); + return obj.format(); +} + +Url.prototype.format = function() { + var auth = this.auth || ''; + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ':'); + auth += '@'; + } + + var protocol = this.protocol || '', + pathname = this.pathname || '', + hash = this.hash || '', + host = false, + query = ''; + + if (this.host) { + host = auth + this.host; + } else if (this.hostname) { + host = auth + (this.hostname.indexOf(':') === -1 ? + this.hostname : + '[' + this.hostname + ']'); + if (this.port) { + host += ':' + this.port; + } + } + + if (this.query && + util.isObject(this.query) && + Object.keys(this.query).length) { + query = querystring.stringify(this.query); + } + + var search = this.search || (query && ('?' + query)) || ''; + + if (protocol && protocol.substr(-1) !== ':') protocol += ':'; + + // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. + // unless they had them to begin with. + if (this.slashes || + (!protocol || slashedProtocol[protocol]) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } + + if (hash && hash.charAt(0) !== '#') hash = '#' + hash; + if (search && search.charAt(0) !== '?') search = '?' + search; + + pathname = pathname.replace(/[?#]/g, function(match) { + return encodeURIComponent(match); + }); + search = search.replace('#', '%23'); + + return protocol + host + pathname + search + hash; +}; + +function urlResolve(source, relative) { + return urlParse(source, false, true).resolve(relative); +} + +Url.prototype.resolve = function(relative) { + return this.resolveObject(urlParse(relative, false, true)).format(); +}; + +function urlResolveObject(source, relative) { + if (!source) return relative; + return urlParse(source, false, true).resolveObject(relative); +} + +Url.prototype.resolveObject = function(relative) { + if (util.isString(relative)) { + var rel = new Url(); + rel.parse(relative, false, true); + relative = rel; + } + + var result = new Url(); + var tkeys = Object.keys(this); + for (var tk = 0; tk < tkeys.length; tk++) { + var tkey = tkeys[tk]; + result[tkey] = this[tkey]; + } + + // hash is always overridden, no matter what. + // even href="" will remove it. + result.hash = relative.hash; + + // if the relative url is empty, then there's nothing left to do here. + if (relative.href === '') { + result.href = result.format(); + return result; + } + + // hrefs like //foo/bar always cut to the protocol. + if (relative.slashes && !relative.protocol) { + // take everything except the protocol from relative + var rkeys = Object.keys(relative); + for (var rk = 0; rk < rkeys.length; rk++) { + var rkey = rkeys[rk]; + if (rkey !== 'protocol') + result[rkey] = relative[rkey]; + } + + //urlParse appends trailing / to urls like http://www.example.com + if (slashedProtocol[result.protocol] && + result.hostname && !result.pathname) { + result.path = result.pathname = '/'; + } + + result.href = result.format(); + return result; + } + + if (relative.protocol && relative.protocol !== result.protocol) { + // if it's a known url protocol, then changing + // the protocol does weird things + // first, if it's not file:, then we MUST have a host, + // and if there was a path + // to begin with, then we MUST have a path. + // if it is file:, then the host is dropped, + // because that's known to be hostless. + // anything else is assumed to be absolute. + if (!slashedProtocol[relative.protocol]) { + var keys = Object.keys(relative); + for (var v = 0; v < keys.length; v++) { + var k = keys[v]; + result[k] = relative[k]; + } + result.href = result.format(); + return result; + } + + result.protocol = relative.protocol; + if (!relative.host && !hostlessProtocol[relative.protocol]) { + var relPath = (relative.pathname || '').split('/'); + while (relPath.length && !(relative.host = relPath.shift())); + if (!relative.host) relative.host = ''; + if (!relative.hostname) relative.hostname = ''; + if (relPath[0] !== '') relPath.unshift(''); + if (relPath.length < 2) relPath.unshift(''); + result.pathname = relPath.join('/'); + } else { + result.pathname = relative.pathname; + } + result.search = relative.search; + result.query = relative.query; + result.host = relative.host || ''; + result.auth = relative.auth; + result.hostname = relative.hostname || relative.host; + result.port = relative.port; + // to support http.request + if (result.pathname || result.search) { + var p = result.pathname || ''; + var s = result.search || ''; + result.path = p + s; + } + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; + } + + var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), + isRelAbs = ( + relative.host || + relative.pathname && relative.pathname.charAt(0) === '/' + ), + mustEndAbs = (isRelAbs || isSourceAbs || + (result.host && relative.pathname)), + removeAllDots = mustEndAbs, + srcPath = result.pathname && result.pathname.split('/') || [], + relPath = relative.pathname && relative.pathname.split('/') || [], + psychotic = result.protocol && !slashedProtocol[result.protocol]; + + // if the url is a non-slashed url, then relative + // links like ../.. should be able + // to crawl up to the hostname, as well. This is strange. + // result.protocol has already been set by now. + // Later on, put the first path part into the host field. + if (psychotic) { + result.hostname = ''; + result.port = null; + if (result.host) { + if (srcPath[0] === '') srcPath[0] = result.host; + else srcPath.unshift(result.host); + } + result.host = ''; + if (relative.protocol) { + relative.hostname = null; + relative.port = null; + if (relative.host) { + if (relPath[0] === '') relPath[0] = relative.host; + else relPath.unshift(relative.host); + } + relative.host = null; + } + mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); + } + + if (isRelAbs) { + // it's absolute. + result.host = (relative.host || relative.host === '') ? + relative.host : result.host; + result.hostname = (relative.hostname || relative.hostname === '') ? + relative.hostname : result.hostname; + result.search = relative.search; + result.query = relative.query; + srcPath = relPath; + // fall through to the dot-handling below. + } else if (relPath.length) { + // it's relative + // throw away the existing file, and take the new path instead. + if (!srcPath) srcPath = []; + srcPath.pop(); + srcPath = srcPath.concat(relPath); + result.search = relative.search; + result.query = relative.query; + } else if (!util.isNullOrUndefined(relative.search)) { + // just pull out the search. + // like href='?foo'. + // Put this after the other two cases because it simplifies the booleans + if (psychotic) { + result.hostname = result.host = srcPath.shift(); + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + result.search = relative.search; + result.query = relative.query; + //to support http.request + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.href = result.format(); + return result; + } + + if (!srcPath.length) { + // no path at all. easy. + // we've already handled the other stuff above. + result.pathname = null; + //to support http.request + if (result.search) { + result.path = '/' + result.search; + } else { + result.path = null; + } + result.href = result.format(); + return result; + } + + // if a url ENDs in . or .., then it must get a trailing slash. + // however, if it ends in anything else non-slashy, + // then it must NOT get a trailing slash. + var last = srcPath.slice(-1)[0]; + var hasTrailingSlash = ( + (result.host || relative.host || srcPath.length > 1) && + (last === '.' || last === '..') || last === ''); + + // strip single dots, resolve double dots to parent dir + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = srcPath.length; i >= 0; i--) { + last = srcPath[i]; + if (last === '.') { + srcPath.splice(i, 1); + } else if (last === '..') { + srcPath.splice(i, 1); + up++; + } else if (up) { + srcPath.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (!mustEndAbs && !removeAllDots) { + for (; up--; up) { + srcPath.unshift('..'); + } + } + + if (mustEndAbs && srcPath[0] !== '' && + (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { + srcPath.unshift(''); + } + + if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { + srcPath.push(''); + } + + var isAbsolute = srcPath[0] === '' || + (srcPath[0] && srcPath[0].charAt(0) === '/'); + + // put the host back + if (psychotic) { + result.hostname = result.host = isAbsolute ? '' : + srcPath.length ? srcPath.shift() : ''; + //occationaly the auth can get stuck only in host + //this especially happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + + mustEndAbs = mustEndAbs || (result.host && srcPath.length); + + if (mustEndAbs && !isAbsolute) { + srcPath.unshift(''); + } + + if (!srcPath.length) { + result.pathname = null; + result.path = null; + } else { + result.pathname = srcPath.join('/'); + } + + //to support request.http + if (!util.isNull(result.pathname) || !util.isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.auth = relative.auth || result.auth; + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; +}; + +Url.prototype.parseHost = function() { + var host = this.host; + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) this.hostname = host; +}; + +},{"./util":339,"punycode":292,"querystring":295}],339:[function(require,module,exports){ +'use strict'; + +module.exports = { + isString: function(arg) { + return typeof(arg) === 'string'; + }, + isObject: function(arg) { + return typeof(arg) === 'object' && arg !== null; + }, + isNull: function(arg) { + return arg === null; + }, + isNullOrUndefined: function(arg) { + return arg == null; + } +}; + +},{}],340:[function(require,module,exports){ +(function (global){ + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],341:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],342:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],343:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./support/isBuffer":342,"_process":284,"inherits":341}],344:[function(require,module,exports){ +var indexOf = require('indexof'); + +var Object_keys = function (obj) { + if (Object.keys) return Object.keys(obj) + else { + var res = []; + for (var key in obj) res.push(key) + return res; + } +}; + +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn) + else for (var i = 0; i < xs.length; i++) { + fn(xs[i], i, xs); + } +}; + +var defineProp = (function() { + try { + Object.defineProperty({}, '_', {}); + return function(obj, name, value) { + Object.defineProperty(obj, name, { + writable: true, + enumerable: false, + configurable: true, + value: value + }) + }; + } catch(e) { + return function(obj, name, value) { + obj[name] = value; + }; + } +}()); + +var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', +'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', +'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', +'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', +'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; + +function Context() {} +Context.prototype = {}; + +var Script = exports.Script = function NodeScript (code) { + if (!(this instanceof Script)) return new Script(code); + this.code = code; +}; + +Script.prototype.runInContext = function (context) { + if (!(context instanceof Context)) { + throw new TypeError("needs a 'context' argument."); + } + + var iframe = document.createElement('iframe'); + if (!iframe.style) iframe.style = {}; + iframe.style.display = 'none'; + + document.body.appendChild(iframe); + + var win = iframe.contentWindow; + var wEval = win.eval, wExecScript = win.execScript; + + if (!wEval && wExecScript) { + // win.eval() magically appears when this is called in IE: + wExecScript.call(win, 'null'); + wEval = win.eval; + } + + forEach(Object_keys(context), function (key) { + win[key] = context[key]; + }); + forEach(globals, function (key) { + if (context[key]) { + win[key] = context[key]; + } + }); + + var winKeys = Object_keys(win); + + var res = wEval.call(win, this.code); + + forEach(Object_keys(win), function (key) { + // Avoid copying circular objects like `top` and `window` by only + // updating existing context properties or new properties in the `win` + // that was only introduced after the eval. + if (key in context || indexOf(winKeys, key) === -1) { + context[key] = win[key]; + } + }); + + forEach(globals, function (key) { + if (!(key in context)) { + defineProp(context, key, win[key]); + } + }); + + document.body.removeChild(iframe); + + return res; +}; + +Script.prototype.runInThisContext = function () { + return eval(this.code); // maybe... +}; + +Script.prototype.runInNewContext = function (context) { + var ctx = Script.createContext(context); + var res = this.runInContext(ctx); + + forEach(Object_keys(ctx), function (key) { + context[key] = ctx[key]; + }); + + return res; +}; + +forEach(Object_keys(Script.prototype), function (name) { + exports[name] = Script[name] = function (code) { + var s = Script(code); + return s[name].apply(s, [].slice.call(arguments, 1)); + }; +}); + +exports.createScript = function (code) { + return exports.Script(code); +}; + +exports.createContext = Script.createContext = function (context) { + var copy = new Context(); + if(typeof context === 'object') { + forEach(Object_keys(context), function (key) { + copy[key] = context[key]; + }); + } + return copy; +}; + +},{"indexof":261}],345:[function(require,module,exports){ +var Pbf = require('pbf') +var GeoJSONWrapper = require('./lib/geojson_wrapper') + +module.exports = fromVectorTileJs +module.exports.fromVectorTileJs = fromVectorTileJs +module.exports.fromGeojsonVt = fromGeojsonVt +module.exports.GeoJSONWrapper = GeoJSONWrapper + +/** + * Serialize a vector-tile-js-created tile to pbf + * + * @param {Object} tile + * @return {Buffer} uncompressed, pbf-serialized tile data + */ +function fromVectorTileJs (tile) { + var out = new Pbf() + writeTile(tile, out) + return out.finish() +} + +/** + * Serialized a geojson-vt-created tile to pbf. + * + * @param {Object} layers - An object mapping layer names to geojson-vt-created vector tile objects + * @param {Object} [options] - An object specifying the vector-tile specification version and extent that were used to create `layers`. + * @param {Number} [options.version=1] - Version of vector-tile spec used + * @param {Number} [options.extent=4096] - Extent of the vector tile + * @return {Buffer} uncompressed, pbf-serialized tile data + */ +function fromGeojsonVt (layers, options) { + options = options || {} + var l = {} + for (var k in layers) { + l[k] = new GeoJSONWrapper(layers[k].features, options) + l[k].name = k + l[k].version = options.version + l[k].extent = options.extent + } + return fromVectorTileJs({layers: l}) +} + +function writeTile (tile, pbf) { + for (var key in tile.layers) { + pbf.writeMessage(3, writeLayer, tile.layers[key]) + } +} + +function writeLayer (layer, pbf) { + pbf.writeVarintField(15, layer.version || 1) + pbf.writeStringField(1, layer.name || '') + pbf.writeVarintField(5, layer.extent || 4096) + + var i + var context = { + keys: [], + values: [], + keycache: {}, + valuecache: {} + } + + for (i = 0; i < layer.length; i++) { + context.feature = layer.feature(i) + pbf.writeMessage(2, writeFeature, context) + } + + var keys = context.keys + for (i = 0; i < keys.length; i++) { + pbf.writeStringField(3, keys[i]) + } + + var values = context.values + for (i = 0; i < values.length; i++) { + pbf.writeMessage(4, writeValue, values[i]) + } +} + +function writeFeature (context, pbf) { + var feature = context.feature + + if (feature.id !== undefined) { + pbf.writeVarintField(1, feature.id) + } + + pbf.writeMessage(2, writeProperties, context) + pbf.writeVarintField(3, feature.type) + pbf.writeMessage(4, writeGeometry, feature) +} + +function writeProperties (context, pbf) { + var feature = context.feature + var keys = context.keys + var values = context.values + var keycache = context.keycache + var valuecache = context.valuecache + + for (var key in feature.properties) { + var keyIndex = keycache[key] + if (typeof keyIndex === 'undefined') { + keys.push(key) + keyIndex = keys.length - 1 + keycache[key] = keyIndex + } + pbf.writeVarint(keyIndex) + + var value = feature.properties[key] + var type = typeof value + if (type !== 'string' && type !== 'boolean' && type !== 'number') { + value = JSON.stringify(value) + } + var valueKey = type + ':' + value + var valueIndex = valuecache[valueKey] + if (typeof valueIndex === 'undefined') { + values.push(value) + valueIndex = values.length - 1 + valuecache[valueKey] = valueIndex + } + pbf.writeVarint(valueIndex) + } +} + +function command (cmd, length) { + return (length << 3) + (cmd & 0x7) +} + +function zigzag (num) { + return (num << 1) ^ (num >> 31) +} + +function writeGeometry (feature, pbf) { + var geometry = feature.loadGeometry() + var type = feature.type + var x = 0 + var y = 0 + var rings = geometry.length + for (var r = 0; r < rings; r++) { + var ring = geometry[r] + var count = 1 + if (type === 1) { + count = ring.length + } + pbf.writeVarint(command(1, count)) // moveto + // do not write polygon closing path as lineto + var lineCount = type === 3 ? ring.length - 1 : ring.length + for (var i = 0; i < lineCount; i++) { + if (i === 1 && type !== 1) { + pbf.writeVarint(command(2, lineCount - 1)) // lineto + } + var dx = ring[i].x - x + var dy = ring[i].y - y + pbf.writeVarint(zigzag(dx)) + pbf.writeVarint(zigzag(dy)) + x += dx + y += dy + } + if (type === 3) { + pbf.writeVarint(command(7, 1)) // closepath + } + } +} + +function writeValue (value, pbf) { + var type = typeof value + if (type === 'string') { + pbf.writeStringField(1, value) + } else if (type === 'boolean') { + pbf.writeBooleanField(7, value) + } else if (type === 'number') { + if (value % 1 !== 0) { + pbf.writeDoubleField(3, value) + } else if (value < 0) { + pbf.writeSVarintField(6, value) + } else { + pbf.writeVarintField(5, value) + } + } +} + +},{"./lib/geojson_wrapper":346,"pbf":277}],346:[function(require,module,exports){ +'use strict' + +var Point = require('@mapbox/point-geometry') +var VectorTileFeature = require('@mapbox/vector-tile').VectorTileFeature + +module.exports = GeoJSONWrapper + +// conform to vectortile api +function GeoJSONWrapper (features, options) { + this.options = options || {} + this.features = features + this.length = features.length +} + +GeoJSONWrapper.prototype.feature = function (i) { + return new FeatureWrapper(this.features[i], this.options.extent) +} + +function FeatureWrapper (feature, extent) { + this.id = typeof feature.id === 'number' ? feature.id : undefined + this.type = feature.type + this.rawGeometry = feature.type === 1 ? [feature.geometry] : feature.geometry + this.properties = feature.tags + this.extent = extent || 4096 +} + +FeatureWrapper.prototype.loadGeometry = function () { + var rings = this.rawGeometry + this.geometry = [] + + for (var i = 0; i < rings.length; i++) { + var ring = rings[i] + var newRing = [] + for (var j = 0; j < ring.length; j++) { + newRing.push(new Point(ring[j][0], ring[j][1])) + } + this.geometry.push(newRing) + } + return this.geometry +} + +FeatureWrapper.prototype.bbox = function () { + if (!this.geometry) this.loadGeometry() + + var rings = this.geometry + var x1 = Infinity + var x2 = -Infinity + var y1 = Infinity + var y2 = -Infinity + + for (var i = 0; i < rings.length; i++) { + var ring = rings[i] + + for (var j = 0; j < ring.length; j++) { + var coord = ring[j] + + x1 = Math.min(x1, coord.x) + x2 = Math.max(x2, coord.x) + y1 = Math.min(y1, coord.y) + y2 = Math.max(y2, coord.y) + } + } + + return [x1, y1, x2, y2] +} + +FeatureWrapper.prototype.toGeoJSON = VectorTileFeature.prototype.toGeoJSON + +},{"@mapbox/point-geometry":112,"@mapbox/vector-tile":113}],347:[function(require,module,exports){ +var bundleFn = arguments[3]; +var sources = arguments[4]; +var cache = arguments[5]; + +var stringify = JSON.stringify; + +module.exports = function (fn, options) { + var wkey; + var cacheKeys = Object.keys(cache); + + for (var i = 0, l = cacheKeys.length; i < l; i++) { + var key = cacheKeys[i]; + var exp = cache[key].exports; + // Using babel as a transpiler to use esmodule, the export will always + // be an object with the default export as a property of it. To ensure + // the existing api and babel esmodule exports are both supported we + // check for both + if (exp === fn || exp && exp.default === fn) { + wkey = key; + break; + } + } + + if (!wkey) { + wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16); + var wcache = {}; + for (var i = 0, l = cacheKeys.length; i < l; i++) { + var key = cacheKeys[i]; + wcache[key] = key; + } + sources[wkey] = [ + 'function(require,module,exports){' + fn + '(self); }', + wcache + ]; + } + var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16); + + var scache = {}; scache[wkey] = wkey; + sources[skey] = [ + 'function(require,module,exports){' + + // try to call default if defined to also support babel esmodule exports + 'var f = require(' + stringify(wkey) + ');' + + '(f.default ? f.default : f)(self);' + + '}', + scache + ]; + + var workerSources = {}; + resolveSources(skey); + + function resolveSources(key) { + workerSources[key] = true; + + for (var depPath in sources[key][1]) { + var depKey = sources[key][1][depPath]; + if (!workerSources[depKey]) { + resolveSources(depKey); + } + } + } + + var src = '(' + bundleFn + ')({' + + Object.keys(workerSources).map(function (key) { + return stringify(key) + ':[' + + sources[key][0] + + ',' + stringify(sources[key][1]) + ']' + ; + }).join(',') + + '},{},[' + stringify(skey) + '])' + ; + + var URL = window.URL || window.webkitURL || window.mozURL || window.msURL; + + var blob = new Blob([src], { type: 'text/javascript' }); + if (options && options.bare) { return blob; } + var workerUrl = URL.createObjectURL(blob); + var worker = new Worker(workerUrl); + worker.objectURL = workerUrl; + return worker; +}; + +},{}],348:[function(require,module,exports){ +(function (Buffer){ +module.exports = BinaryReader; + +function BinaryReader(buffer, isBigEndian) { + this.buffer = buffer; + this.position = 0; + this.isBigEndian = isBigEndian || false; +} + +function _read(readLE, readBE, size) { + return function () { + var value; + + if (this.isBigEndian) + value = readBE.call(this.buffer, this.position); + else + value = readLE.call(this.buffer, this.position); + + this.position += size; + + return value; + }; +} + +BinaryReader.prototype.readUInt8 = _read(Buffer.prototype.readUInt8, Buffer.prototype.readUInt8, 1); +BinaryReader.prototype.readUInt16 = _read(Buffer.prototype.readUInt16LE, Buffer.prototype.readUInt16BE, 2); +BinaryReader.prototype.readUInt32 = _read(Buffer.prototype.readUInt32LE, Buffer.prototype.readUInt32BE, 4); +BinaryReader.prototype.readInt8 = _read(Buffer.prototype.readInt8, Buffer.prototype.readInt8, 1); +BinaryReader.prototype.readInt16 = _read(Buffer.prototype.readInt16LE, Buffer.prototype.readInt16BE, 2); +BinaryReader.prototype.readInt32 = _read(Buffer.prototype.readInt32LE, Buffer.prototype.readInt32BE, 4); +BinaryReader.prototype.readFloat = _read(Buffer.prototype.readFloatLE, Buffer.prototype.readFloatBE, 4); +BinaryReader.prototype.readDouble = _read(Buffer.prototype.readDoubleLE, Buffer.prototype.readDoubleBE, 8); + +BinaryReader.prototype.readVarInt = function () { + var nextByte, + result = 0, + bytesRead = 0; + + do { + nextByte = this.buffer[this.position + bytesRead]; + result += (nextByte & 0x7F) << (7 * bytesRead); + bytesRead++; + } while (nextByte >= 0x80); + + this.position += bytesRead; + + return result; +}; + +}).call(this,require("buffer").Buffer) +},{"buffer":182}],349:[function(require,module,exports){ +(function (Buffer){ +module.exports = BinaryWriter; + +function BinaryWriter(size, allowResize) { + this.buffer = new Buffer(size); + this.position = 0; + this.allowResize = allowResize; +} + +function _write(write, size) { + return function (value, noAssert) { + this.ensureSize(size); + + write.call(this.buffer, value, this.position, noAssert); + this.position += size; + }; +} + +BinaryWriter.prototype.writeUInt8 = _write(Buffer.prototype.writeUInt8, 1); +BinaryWriter.prototype.writeUInt16LE = _write(Buffer.prototype.writeUInt16LE, 2); +BinaryWriter.prototype.writeUInt16BE = _write(Buffer.prototype.writeUInt16BE, 2); +BinaryWriter.prototype.writeUInt32LE = _write(Buffer.prototype.writeUInt32LE, 4); +BinaryWriter.prototype.writeUInt32BE = _write(Buffer.prototype.writeUInt32BE, 4); +BinaryWriter.prototype.writeInt8 = _write(Buffer.prototype.writeInt8, 1); +BinaryWriter.prototype.writeInt16LE = _write(Buffer.prototype.writeInt16LE, 2); +BinaryWriter.prototype.writeInt16BE = _write(Buffer.prototype.writeInt16BE, 2); +BinaryWriter.prototype.writeInt32LE = _write(Buffer.prototype.writeInt32LE, 4); +BinaryWriter.prototype.writeInt32BE = _write(Buffer.prototype.writeInt32BE, 4); +BinaryWriter.prototype.writeFloatLE = _write(Buffer.prototype.writeFloatLE, 4); +BinaryWriter.prototype.writeFloatBE = _write(Buffer.prototype.writeFloatBE, 4); +BinaryWriter.prototype.writeDoubleLE = _write(Buffer.prototype.writeDoubleLE, 8); +BinaryWriter.prototype.writeDoubleBE = _write(Buffer.prototype.writeDoubleBE, 8); + +BinaryWriter.prototype.writeBuffer = function (buffer) { + this.ensureSize(buffer.length); + + buffer.copy(this.buffer, this.position, 0, buffer.length); + this.position += buffer.length; +}; + +BinaryWriter.prototype.writeVarInt = function (value) { + var length = 1; + + while ((value & 0xFFFFFF80) !== 0) { + this.writeUInt8((value & 0x7F) | 0x80); + value >>>= 7; + length++; + } + + this.writeUInt8(value & 0x7F); + + return length; +}; + +BinaryWriter.prototype.ensureSize = function (size) { + if (this.buffer.length < this.position + size) { + if (this.allowResize) { + var tempBuffer = new Buffer(this.position + size); + this.buffer.copy(tempBuffer, 0, 0, this.buffer.length); + this.buffer = tempBuffer; + } + else { + throw new RangeError('index out of range'); + } + } +}; + +}).call(this,require("buffer").Buffer) +},{"buffer":182}],350:[function(require,module,exports){ +(function (Buffer){ +module.exports = Geometry; + +var Types = require('./types'); +var Point = require('./point'); +var LineString = require('./linestring'); +var Polygon = require('./polygon'); +var MultiPoint = require('./multipoint'); +var MultiLineString = require('./multilinestring'); +var MultiPolygon = require('./multipolygon'); +var GeometryCollection = require('./geometrycollection'); +var BinaryReader = require('./binaryreader'); +var BinaryWriter = require('./binarywriter'); +var WktParser = require('./wktparser'); +var ZigZag = require('./zigzag.js'); + +function Geometry() { + this.srid = undefined; + this.hasZ = false; + this.hasM = false; +} + +Geometry.parse = function (value, options) { + var valueType = typeof value; + + if (valueType === 'string' || value instanceof WktParser) + return Geometry._parseWkt(value); + else if (Buffer.isBuffer(value) || value instanceof BinaryReader) + return Geometry._parseWkb(value, options); + else + throw new Error('first argument must be a string or Buffer'); +}; + +Geometry._parseWkt = function (value) { + var wktParser, + srid; + + if (value instanceof WktParser) + wktParser = value; + else + wktParser = new WktParser(value); + + var match = wktParser.matchRegex([/^SRID=(\d+);/]); + if (match) + srid = parseInt(match[1], 10); + + var geometryType = wktParser.matchType(); + var dimension = wktParser.matchDimension(); + + var options = { + srid: srid, + hasZ: dimension.hasZ, + hasM: dimension.hasM + }; + + switch (geometryType) { + case Types.wkt.Point: + return Point._parseWkt(wktParser, options); + case Types.wkt.LineString: + return LineString._parseWkt(wktParser, options); + case Types.wkt.Polygon: + return Polygon._parseWkt(wktParser, options); + case Types.wkt.MultiPoint: + return MultiPoint._parseWkt(wktParser, options); + case Types.wkt.MultiLineString: + return MultiLineString._parseWkt(wktParser, options); + case Types.wkt.MultiPolygon: + return MultiPolygon._parseWkt(wktParser, options); + case Types.wkt.GeometryCollection: + return GeometryCollection._parseWkt(wktParser, options); + } +}; + +Geometry._parseWkb = function (value, parentOptions) { + var binaryReader, + wkbType, + geometryType, + options = {}; + + if (value instanceof BinaryReader) + binaryReader = value; + else + binaryReader = new BinaryReader(value); + + binaryReader.isBigEndian = !binaryReader.readInt8(); + + wkbType = binaryReader.readUInt32(); + + options.hasSrid = (wkbType & 0x20000000) === 0x20000000; + options.isEwkb = (wkbType & 0x20000000) || (wkbType & 0x40000000) || (wkbType & 0x80000000); + + if (options.hasSrid) + options.srid = binaryReader.readUInt32(); + + options.hasZ = false; + options.hasM = false; + + if (!options.isEwkb && (!parentOptions || !parentOptions.isEwkb)) { + if (wkbType >= 1000 && wkbType < 2000) { + options.hasZ = true; + geometryType = wkbType - 1000; + } + else if (wkbType >= 2000 && wkbType < 3000) { + options.hasM = true; + geometryType = wkbType - 2000; + } + else if (wkbType >= 3000 && wkbType < 4000) { + options.hasZ = true; + options.hasM = true; + geometryType = wkbType - 3000; + } + else { + geometryType = wkbType; + } + } + else { + if (wkbType & 0x80000000) + options.hasZ = true; + if (wkbType & 0x40000000) + options.hasM = true; + + geometryType = wkbType & 0xF; + } + + switch (geometryType) { + case Types.wkb.Point: + return Point._parseWkb(binaryReader, options); + case Types.wkb.LineString: + return LineString._parseWkb(binaryReader, options); + case Types.wkb.Polygon: + return Polygon._parseWkb(binaryReader, options); + case Types.wkb.MultiPoint: + return MultiPoint._parseWkb(binaryReader, options); + case Types.wkb.MultiLineString: + return MultiLineString._parseWkb(binaryReader, options); + case Types.wkb.MultiPolygon: + return MultiPolygon._parseWkb(binaryReader, options); + case Types.wkb.GeometryCollection: + return GeometryCollection._parseWkb(binaryReader, options); + default: + throw new Error('GeometryType ' + geometryType + ' not supported'); + } +}; + +Geometry.parseTwkb = function (value) { + var binaryReader, + options = {}; + + if (value instanceof BinaryReader) + binaryReader = value; + else + binaryReader = new BinaryReader(value); + + var type = binaryReader.readUInt8(); + var metadataHeader = binaryReader.readUInt8(); + + var geometryType = type & 0x0F; + options.precision = ZigZag.decode(type >> 4); + options.precisionFactor = Math.pow(10, options.precision); + + options.hasBoundingBox = metadataHeader >> 0 & 1; + options.hasSizeAttribute = metadataHeader >> 1 & 1; + options.hasIdList = metadataHeader >> 2 & 1; + options.hasExtendedPrecision = metadataHeader >> 3 & 1; + options.isEmpty = metadataHeader >> 4 & 1; + + if (options.hasExtendedPrecision) { + var extendedPrecision = binaryReader.readUInt8(); + options.hasZ = (extendedPrecision & 0x01) === 0x01; + options.hasM = (extendedPrecision & 0x02) === 0x02; + + options.zPrecision = ZigZag.decode((extendedPrecision & 0x1C) >> 2); + options.zPrecisionFactor = Math.pow(10, options.zPrecision); + + options.mPrecision = ZigZag.decode((extendedPrecision & 0xE0) >> 5); + options.mPrecisionFactor = Math.pow(10, options.mPrecision); + } + else { + options.hasZ = false; + options.hasM = false; + } + + if (options.hasSizeAttribute) + binaryReader.readVarInt(); + if (options.hasBoundingBox) { + var dimensions = 2; + + if (options.hasZ) + dimensions++; + if (options.hasM) + dimensions++; + + for (var i = 0; i < dimensions; i++) { + binaryReader.readVarInt(); + binaryReader.readVarInt(); + } + } + + switch (geometryType) { + case Types.wkb.Point: + return Point._parseTwkb(binaryReader, options); + case Types.wkb.LineString: + return LineString._parseTwkb(binaryReader, options); + case Types.wkb.Polygon: + return Polygon._parseTwkb(binaryReader, options); + case Types.wkb.MultiPoint: + return MultiPoint._parseTwkb(binaryReader, options); + case Types.wkb.MultiLineString: + return MultiLineString._parseTwkb(binaryReader, options); + case Types.wkb.MultiPolygon: + return MultiPolygon._parseTwkb(binaryReader, options); + case Types.wkb.GeometryCollection: + return GeometryCollection._parseTwkb(binaryReader, options); + default: + throw new Error('GeometryType ' + geometryType + ' not supported'); + } +}; + +Geometry.parseGeoJSON = function (value) { + return Geometry._parseGeoJSON(value); +}; + +Geometry._parseGeoJSON = function (value, isSubGeometry) { + var geometry; + + switch (value.type) { + case Types.geoJSON.Point: + geometry = Point._parseGeoJSON(value); break; + case Types.geoJSON.LineString: + geometry = LineString._parseGeoJSON(value); break; + case Types.geoJSON.Polygon: + geometry = Polygon._parseGeoJSON(value); break; + case Types.geoJSON.MultiPoint: + geometry = MultiPoint._parseGeoJSON(value); break; + case Types.geoJSON.MultiLineString: + geometry = MultiLineString._parseGeoJSON(value); break; + case Types.geoJSON.MultiPolygon: + geometry = MultiPolygon._parseGeoJSON(value); break; + case Types.geoJSON.GeometryCollection: + geometry = GeometryCollection._parseGeoJSON(value); break; + default: + throw new Error('GeometryType ' + value.type + ' not supported'); + } + + if (value.crs && value.crs.type && value.crs.type === 'name' && value.crs.properties && value.crs.properties.name) { + var crs = value.crs.properties.name; + + if (crs.indexOf('EPSG:') === 0) + geometry.srid = parseInt(crs.substring(5)); + else if (crs.indexOf('urn:ogc:def:crs:EPSG::') === 0) + geometry.srid = parseInt(crs.substring(22)); + else + throw new Error('Unsupported crs: ' + crs); + } + else if (!isSubGeometry) { + geometry.srid = 4326; + } + + return geometry; +}; + +Geometry.prototype.toEwkt = function () { + return 'SRID=' + this.srid + ';' + this.toWkt(); +}; + +Geometry.prototype.toEwkb = function () { + var ewkb = new BinaryWriter(this._getWkbSize() + 4); + var wkb = this.toWkb(); + + ewkb.writeInt8(1); + ewkb.writeUInt32LE(wkb.slice(1, 5).readUInt32LE(0) | 0x20000000, true); + ewkb.writeUInt32LE(this.srid); + + ewkb.writeBuffer(wkb.slice(5)); + + return ewkb.buffer; +}; + +Geometry.prototype._getWktType = function (wktType, isEmpty) { + var wkt = wktType; + + if (this.hasZ && this.hasM) + wkt += ' ZM '; + else if (this.hasZ) + wkt += ' Z '; + else if (this.hasM) + wkt += ' M '; + + if (isEmpty && !this.hasZ && !this.hasM) + wkt += ' '; + + if (isEmpty) + wkt += 'EMPTY'; + + return wkt; +}; + +Geometry.prototype._getWktCoordinate = function (point) { + var coordinates = point.x + ' ' + point.y; + + if (this.hasZ) + coordinates += ' ' + point.z; + if (this.hasM) + coordinates += ' ' + point.m; + + return coordinates; +}; + +Geometry.prototype._writeWkbType = function (wkb, geometryType, parentOptions) { + var dimensionType = 0; + + if (typeof this.srid === 'undefined' && (!parentOptions || typeof parentOptions.srid === 'undefined')) { + if (this.hasZ && this.hasM) + dimensionType += 3000; + else if(this.hasZ) + dimensionType += 1000; + else if(this.hasM) + dimensionType += 2000; + } + else { + if (this.hasZ) + dimensionType |= 0x80000000; + if (this.hasM) + dimensionType |= 0x40000000; + } + + wkb.writeUInt32LE(dimensionType + geometryType, true); +}; + +Geometry.getTwkbPrecision = function (xyPrecision, zPrecision, mPrecision) { + return { + xy: xyPrecision, + z: zPrecision, + m: mPrecision, + xyFactor: Math.pow(10, xyPrecision), + zFactor: Math.pow(10, zPrecision), + mFactor: Math.pow(10, mPrecision) + }; +}; + +Geometry.prototype._writeTwkbHeader = function (twkb, geometryType, precision, isEmpty) { + var type = (ZigZag.encode(precision.xy) << 4) + geometryType; + var metadataHeader = (this.hasZ || this.hasM) << 3; + metadataHeader += isEmpty << 4; + + twkb.writeUInt8(type); + twkb.writeUInt8(metadataHeader); + + if (this.hasZ || this.hasM) { + var extendedPrecision = 0; + if (this.hasZ) + extendedPrecision |= 0x1; + if (this.hasM) + extendedPrecision |= 0x2; + + twkb.writeUInt8(extendedPrecision); + } +}; + +Geometry.prototype.toGeoJSON = function (options) { + var geoJSON = {}; + + if (this.srid) { + if (options) { + if (options.shortCrs) { + geoJSON.crs = { + type: 'name', + properties: { + name: 'EPSG:' + this.srid + } + }; + } + else if (options.longCrs) { + geoJSON.crs = { + type: 'name', + properties: { + name: 'urn:ogc:def:crs:EPSG::' + this.srid + } + }; + } + } + } + + return geoJSON; +}; + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../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){ +module.exports = GeometryCollection; + +var util = require('util'); + +var Types = require('./types'); +var Geometry = require('./geometry'); +var BinaryWriter = require('./binarywriter'); + +function GeometryCollection(geometries, srid) { + Geometry.call(this); + + this.geometries = geometries || []; + this.srid = srid; + + if (this.geometries.length > 0) { + this.hasZ = this.geometries[0].hasZ; + this.hasM = this.geometries[0].hasM; + } +} + +util.inherits(GeometryCollection, Geometry); + +GeometryCollection.Z = function (geometries, srid) { + var geometryCollection = new GeometryCollection(geometries, srid); + geometryCollection.hasZ = true; + return geometryCollection; +}; + +GeometryCollection.M = function (geometries, srid) { + var geometryCollection = new GeometryCollection(geometries, srid); + geometryCollection.hasM = true; + return geometryCollection; +}; + +GeometryCollection.ZM = function (geometries, srid) { + var geometryCollection = new GeometryCollection(geometries, srid); + geometryCollection.hasZ = true; + geometryCollection.hasM = true; + return geometryCollection; +}; + +GeometryCollection._parseWkt = function (value, options) { + var geometryCollection = new GeometryCollection(); + geometryCollection.srid = options.srid; + geometryCollection.hasZ = options.hasZ; + geometryCollection.hasM = options.hasM; + + if (value.isMatch(['EMPTY'])) + return geometryCollection; + + value.expectGroupStart(); + + do { + geometryCollection.geometries.push(Geometry.parse(value)); + } while (value.isMatch([','])); + + value.expectGroupEnd(); + + return geometryCollection; +}; + +GeometryCollection._parseWkb = function (value, options) { + var geometryCollection = new GeometryCollection(); + geometryCollection.srid = options.srid; + geometryCollection.hasZ = options.hasZ; + geometryCollection.hasM = options.hasM; + + var geometryCount = value.readUInt32(); + + for (var i = 0; i < geometryCount; i++) + geometryCollection.geometries.push(Geometry.parse(value, options)); + + return geometryCollection; +}; + +GeometryCollection._parseTwkb = function (value, options) { + var geometryCollection = new GeometryCollection(); + geometryCollection.hasZ = options.hasZ; + geometryCollection.hasM = options.hasM; + + if (options.isEmpty) + return geometryCollection; + + var geometryCount = value.readVarInt(); + + for (var i = 0; i < geometryCount; i++) + geometryCollection.geometries.push(Geometry.parseTwkb(value)); + + return geometryCollection; +}; + +GeometryCollection._parseGeoJSON = function (value) { + var geometryCollection = new GeometryCollection(); + + for (var i = 0; i < value.geometries.length; i++) + geometryCollection.geometries.push(Geometry._parseGeoJSON(value.geometries[i], true)); + + if (geometryCollection.geometries.length > 0) + geometryCollection.hasZ = geometryCollection.geometries[0].hasZ; + + return geometryCollection; +}; + +GeometryCollection.prototype.toWkt = function () { + if (this.geometries.length === 0) + return this._getWktType(Types.wkt.GeometryCollection, true); + + var wkt = this._getWktType(Types.wkt.GeometryCollection, false) + '('; + + for (var i = 0; i < this.geometries.length; i++) + wkt += this.geometries[i].toWkt() + ','; + + wkt = wkt.slice(0, -1); + wkt += ')'; + + return wkt; +}; + +GeometryCollection.prototype.toWkb = function () { + var wkb = new BinaryWriter(this._getWkbSize()); + + wkb.writeInt8(1); + + this._writeWkbType(wkb, Types.wkb.GeometryCollection); + wkb.writeUInt32LE(this.geometries.length); + + for (var i = 0; i < this.geometries.length; i++) + wkb.writeBuffer(this.geometries[i].toWkb({ srid: this.srid })); + + return wkb.buffer; +}; + +GeometryCollection.prototype.toTwkb = function () { + var twkb = new BinaryWriter(0, true); + + var precision = Geometry.getTwkbPrecision(5, 0, 0); + var isEmpty = this.geometries.length === 0; + + this._writeTwkbHeader(twkb, Types.wkb.GeometryCollection, precision, isEmpty); + + if (this.geometries.length > 0) { + twkb.writeVarInt(this.geometries.length); + + for (var i = 0; i < this.geometries.length; i++) + twkb.writeBuffer(this.geometries[i].toTwkb()); + } + + return twkb.buffer; +}; + +GeometryCollection.prototype._getWkbSize = function () { + var size = 1 + 4 + 4; + + for (var i = 0; i < this.geometries.length; i++) + size += this.geometries[i]._getWkbSize(); + + return size; +}; + +GeometryCollection.prototype.toGeoJSON = function (options) { + var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); + geoJSON.type = Types.geoJSON.GeometryCollection; + geoJSON.geometries = []; + + for (var i = 0; i < this.geometries.length; i++) + geoJSON.geometries.push(this.geometries[i].toGeoJSON()); + + return geoJSON; +}; + +},{"./binarywriter":349,"./geometry":350,"./types":358,"util":343}],352:[function(require,module,exports){ +module.exports = LineString; + +var util = require('util'); + +var Geometry = require('./geometry'); +var Types = require('./types'); +var Point = require('./point'); +var BinaryWriter = require('./binarywriter'); + +function LineString(points, srid) { + Geometry.call(this); + + this.points = points || []; + this.srid = srid; + + if (this.points.length > 0) { + this.hasZ = this.points[0].hasZ; + this.hasM = this.points[0].hasM; + } +} + +util.inherits(LineString, Geometry); + +LineString.Z = function (points, srid) { + var lineString = new LineString(points, srid); + lineString.hasZ = true; + return lineString; +}; + +LineString.M = function (points, srid) { + var lineString = new LineString(points, srid); + lineString.hasM = true; + return lineString; +}; + +LineString.ZM = function (points, srid) { + var lineString = new LineString(points, srid); + lineString.hasZ = true; + lineString.hasM = true; + return lineString; +}; + +LineString._parseWkt = function (value, options) { + var lineString = new LineString(); + lineString.srid = options.srid; + lineString.hasZ = options.hasZ; + lineString.hasM = options.hasM; + + if (value.isMatch(['EMPTY'])) + return lineString; + + value.expectGroupStart(); + lineString.points.push.apply(lineString.points, value.matchCoordinates(options)); + value.expectGroupEnd(); + + return lineString; +}; + +LineString._parseWkb = function (value, options) { + var lineString = new LineString(); + lineString.srid = options.srid; + lineString.hasZ = options.hasZ; + lineString.hasM = options.hasM; + + var pointCount = value.readUInt32(); + + for (var i = 0; i < pointCount; i++) + lineString.points.push(Point._readWkbPoint(value, options)); + + return lineString; +}; + +LineString._parseTwkb = function (value, options) { + var lineString = new LineString(); + lineString.hasZ = options.hasZ; + lineString.hasM = options.hasM; + + if (options.isEmpty) + return lineString; + + var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); + var pointCount = value.readVarInt(); + + for (var i = 0; i < pointCount; i++) + lineString.points.push(Point._readTwkbPoint(value, options, previousPoint)); + + return lineString; +}; + +LineString._parseGeoJSON = function (value) { + var lineString = new LineString(); + + if (value.coordinates.length > 0) + lineString.hasZ = value.coordinates[0].length > 2; + + for (var i = 0; i < value.coordinates.length; i++) + lineString.points.push(Point._readGeoJSONPoint(value.coordinates[i])); + + return lineString; +}; + +LineString.prototype.toWkt = function () { + if (this.points.length === 0) + return this._getWktType(Types.wkt.LineString, true); + + return this._getWktType(Types.wkt.LineString, false) + this._toInnerWkt(); +}; + +LineString.prototype._toInnerWkt = function () { + var innerWkt = '('; + + for (var i = 0; i < this.points.length; i++) + innerWkt += this._getWktCoordinate(this.points[i]) + ','; + + innerWkt = innerWkt.slice(0, -1); + innerWkt += ')'; + + return innerWkt; +}; + +LineString.prototype.toWkb = function (parentOptions) { + var wkb = new BinaryWriter(this._getWkbSize()); + + wkb.writeInt8(1); + + this._writeWkbType(wkb, Types.wkb.LineString, parentOptions); + wkb.writeUInt32LE(this.points.length); + + for (var i = 0; i < this.points.length; i++) + this.points[i]._writeWkbPoint(wkb); + + return wkb.buffer; +}; + +LineString.prototype.toTwkb = function () { + var twkb = new BinaryWriter(0, true); + + var precision = Geometry.getTwkbPrecision(5, 0, 0); + var isEmpty = this.points.length === 0; + + this._writeTwkbHeader(twkb, Types.wkb.LineString, precision, isEmpty); + + if (this.points.length > 0) { + twkb.writeVarInt(this.points.length); + + var previousPoint = new Point(0, 0, 0, 0); + for (var i = 0; i < this.points.length; i++) + this.points[i]._writeTwkbPoint(twkb, precision, previousPoint); + } + + return twkb.buffer; +}; + +LineString.prototype._getWkbSize = function () { + var coordinateSize = 16; + + if (this.hasZ) + coordinateSize += 8; + if (this.hasM) + coordinateSize += 8; + + return 1 + 4 + 4 + (this.points.length * coordinateSize); +}; + +LineString.prototype.toGeoJSON = function (options) { + var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); + geoJSON.type = Types.geoJSON.LineString; + geoJSON.coordinates = []; + + for (var i = 0; i < this.points.length; i++) { + if (this.hasZ) + geoJSON.coordinates.push([this.points[i].x, this.points[i].y, this.points[i].z]); + else + geoJSON.coordinates.push([this.points[i].x, this.points[i].y]); + } + + return geoJSON; +}; + +},{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],353:[function(require,module,exports){ +module.exports = MultiLineString; + +var util = require('util'); + +var Types = require('./types'); +var Geometry = require('./geometry'); +var Point = require('./point'); +var LineString = require('./linestring'); +var BinaryWriter = require('./binarywriter'); + +function MultiLineString(lineStrings, srid) { + Geometry.call(this); + + this.lineStrings = lineStrings || []; + this.srid = srid; + + if (this.lineStrings.length > 0) { + this.hasZ = this.lineStrings[0].hasZ; + this.hasM = this.lineStrings[0].hasM; + } +} + +util.inherits(MultiLineString, Geometry); + +MultiLineString.Z = function (lineStrings, srid) { + var multiLineString = new MultiLineString(lineStrings, srid); + multiLineString.hasZ = true; + return multiLineString; +}; + +MultiLineString.M = function (lineStrings, srid) { + var multiLineString = new MultiLineString(lineStrings, srid); + multiLineString.hasM = true; + return multiLineString; +}; + +MultiLineString.ZM = function (lineStrings, srid) { + var multiLineString = new MultiLineString(lineStrings, srid); + multiLineString.hasZ = true; + multiLineString.hasM = true; + return multiLineString; +}; + +MultiLineString._parseWkt = function (value, options) { + var multiLineString = new MultiLineString(); + multiLineString.srid = options.srid; + multiLineString.hasZ = options.hasZ; + multiLineString.hasM = options.hasM; + + if (value.isMatch(['EMPTY'])) + return multiLineString; + + value.expectGroupStart(); + + do { + value.expectGroupStart(); + multiLineString.lineStrings.push(new LineString(value.matchCoordinates(options))); + value.expectGroupEnd(); + } while (value.isMatch([','])); + + value.expectGroupEnd(); + + return multiLineString; +}; + +MultiLineString._parseWkb = function (value, options) { + var multiLineString = new MultiLineString(); + multiLineString.srid = options.srid; + multiLineString.hasZ = options.hasZ; + multiLineString.hasM = options.hasM; + + var lineStringCount = value.readUInt32(); + + for (var i = 0; i < lineStringCount; i++) + multiLineString.lineStrings.push(Geometry.parse(value, options)); + + return multiLineString; +}; + +MultiLineString._parseTwkb = function (value, options) { + var multiLineString = new MultiLineString(); + multiLineString.hasZ = options.hasZ; + multiLineString.hasM = options.hasM; + + if (options.isEmpty) + return multiLineString; + + var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); + var lineStringCount = value.readVarInt(); + + for (var i = 0; i < lineStringCount; i++) { + var lineString = new LineString(); + lineString.hasZ = options.hasZ; + lineString.hasM = options.hasM; + + var pointCount = value.readVarInt(); + + for (var j = 0; j < pointCount; j++) + lineString.points.push(Point._readTwkbPoint(value, options, previousPoint)); + + multiLineString.lineStrings.push(lineString); + } + + return multiLineString; +}; + +MultiLineString._parseGeoJSON = function (value) { + var multiLineString = new MultiLineString(); + + if (value.coordinates.length > 0 && value.coordinates[0].length > 0) + multiLineString.hasZ = value.coordinates[0][0].length > 2; + + for (var i = 0; i < value.coordinates.length; i++) + multiLineString.lineStrings.push(LineString._parseGeoJSON({ coordinates: value.coordinates[i] })); + + return multiLineString; +}; + +MultiLineString.prototype.toWkt = function () { + if (this.lineStrings.length === 0) + return this._getWktType(Types.wkt.MultiLineString, true); + + var wkt = this._getWktType(Types.wkt.MultiLineString, false) + '('; + + for (var i = 0; i < this.lineStrings.length; i++) + wkt += this.lineStrings[i]._toInnerWkt() + ','; + + wkt = wkt.slice(0, -1); + wkt += ')'; + + return wkt; +}; + +MultiLineString.prototype.toWkb = function () { + var wkb = new BinaryWriter(this._getWkbSize()); + + wkb.writeInt8(1); + + this._writeWkbType(wkb, Types.wkb.MultiLineString); + wkb.writeUInt32LE(this.lineStrings.length); + + for (var i = 0; i < this.lineStrings.length; i++) + wkb.writeBuffer(this.lineStrings[i].toWkb({ srid: this.srid })); + + return wkb.buffer; +}; + +MultiLineString.prototype.toTwkb = function () { + var twkb = new BinaryWriter(0, true); + + var precision = Geometry.getTwkbPrecision(5, 0, 0); + var isEmpty = this.lineStrings.length === 0; + + this._writeTwkbHeader(twkb, Types.wkb.MultiLineString, precision, isEmpty); + + if (this.lineStrings.length > 0) { + twkb.writeVarInt(this.lineStrings.length); + + var previousPoint = new Point(0, 0, 0, 0); + for (var i = 0; i < this.lineStrings.length; i++) { + twkb.writeVarInt(this.lineStrings[i].points.length); + + for (var j = 0; j < this.lineStrings[i].points.length; j++) + this.lineStrings[i].points[j]._writeTwkbPoint(twkb, precision, previousPoint); + } + } + + return twkb.buffer; +}; + +MultiLineString.prototype._getWkbSize = function () { + var size = 1 + 4 + 4; + + for (var i = 0; i < this.lineStrings.length; i++) + size += this.lineStrings[i]._getWkbSize(); + + return size; +}; + +MultiLineString.prototype.toGeoJSON = function (options) { + var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); + geoJSON.type = Types.geoJSON.MultiLineString; + geoJSON.coordinates = []; + + for (var i = 0; i < this.lineStrings.length; i++) + geoJSON.coordinates.push(this.lineStrings[i].toGeoJSON().coordinates); + + return geoJSON; +}; + +},{"./binarywriter":349,"./geometry":350,"./linestring":352,"./point":356,"./types":358,"util":343}],354:[function(require,module,exports){ +module.exports = MultiPoint; + +var util = require('util'); + +var Types = require('./types'); +var Geometry = require('./geometry'); +var Point = require('./point'); +var BinaryWriter = require('./binarywriter'); + +function MultiPoint(points, srid) { + Geometry.call(this); + + this.points = points || []; + this.srid = srid; + + if (this.points.length > 0) { + this.hasZ = this.points[0].hasZ; + this.hasM = this.points[0].hasM; + } +} + +util.inherits(MultiPoint, Geometry); + +MultiPoint.Z = function (points, srid) { + var multiPoint = new MultiPoint(points, srid); + multiPoint.hasZ = true; + return multiPoint; +}; + +MultiPoint.M = function (points, srid) { + var multiPoint = new MultiPoint(points, srid); + multiPoint.hasM = true; + return multiPoint; +}; + +MultiPoint.ZM = function (points, srid) { + var multiPoint = new MultiPoint(points, srid); + multiPoint.hasZ = true; + multiPoint.hasM = true; + return multiPoint; +}; + +MultiPoint._parseWkt = function (value, options) { + var multiPoint = new MultiPoint(); + multiPoint.srid = options.srid; + multiPoint.hasZ = options.hasZ; + multiPoint.hasM = options.hasM; + + if (value.isMatch(['EMPTY'])) + return multiPoint; + + value.expectGroupStart(); + multiPoint.points.push.apply(multiPoint.points, value.matchCoordinates(options)); + value.expectGroupEnd(); + + return multiPoint; +}; + +MultiPoint._parseWkb = function (value, options) { + var multiPoint = new MultiPoint(); + multiPoint.srid = options.srid; + multiPoint.hasZ = options.hasZ; + multiPoint.hasM = options.hasM; + + var pointCount = value.readUInt32(); + + for (var i = 0; i < pointCount; i++) + multiPoint.points.push(Geometry.parse(value, options)); + + return multiPoint; +}; + +MultiPoint._parseTwkb = function (value, options) { + var multiPoint = new MultiPoint(); + multiPoint.hasZ = options.hasZ; + multiPoint.hasM = options.hasM; + + if (options.isEmpty) + return multiPoint; + + var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); + var pointCount = value.readVarInt(); + + for (var i = 0; i < pointCount; i++) + multiPoint.points.push(Point._readTwkbPoint(value, options, previousPoint)); + + return multiPoint; +}; + +MultiPoint._parseGeoJSON = function (value) { + var multiPoint = new MultiPoint(); + + if (value.coordinates.length > 0) + multiPoint.hasZ = value.coordinates[0].length > 2; + + for (var i = 0; i < value.coordinates.length; i++) + multiPoint.points.push(Point._parseGeoJSON({ coordinates: value.coordinates[i] })); + + return multiPoint; +}; + +MultiPoint.prototype.toWkt = function () { + if (this.points.length === 0) + return this._getWktType(Types.wkt.MultiPoint, true); + + var wkt = this._getWktType(Types.wkt.MultiPoint, false) + '('; + + for (var i = 0; i < this.points.length; i++) + wkt += this._getWktCoordinate(this.points[i]) + ','; + + wkt = wkt.slice(0, -1); + wkt += ')'; + + return wkt; +}; + +MultiPoint.prototype.toWkb = function () { + var wkb = new BinaryWriter(this._getWkbSize()); + + wkb.writeInt8(1); + + this._writeWkbType(wkb, Types.wkb.MultiPoint); + wkb.writeUInt32LE(this.points.length); + + for (var i = 0; i < this.points.length; i++) + wkb.writeBuffer(this.points[i].toWkb({ srid: this.srid })); + + return wkb.buffer; +}; + +MultiPoint.prototype.toTwkb = function () { + var twkb = new BinaryWriter(0, true); + + var precision = Geometry.getTwkbPrecision(5, 0, 0); + var isEmpty = this.points.length === 0; + + this._writeTwkbHeader(twkb, Types.wkb.MultiPoint, precision, isEmpty); + + if (this.points.length > 0) { + twkb.writeVarInt(this.points.length); + + var previousPoint = new Point(0, 0, 0, 0); + for (var i = 0; i < this.points.length; i++) + this.points[i]._writeTwkbPoint(twkb, precision, previousPoint); + } + + return twkb.buffer; +}; + +MultiPoint.prototype._getWkbSize = function () { + var coordinateSize = 16; + + if (this.hasZ) + coordinateSize += 8; + if (this.hasM) + coordinateSize += 8; + + coordinateSize += 5; + + return 1 + 4 + 4 + (this.points.length * coordinateSize); +}; + +MultiPoint.prototype.toGeoJSON = function (options) { + var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); + geoJSON.type = Types.geoJSON.MultiPoint; + geoJSON.coordinates = []; + + for (var i = 0; i < this.points.length; i++) + geoJSON.coordinates.push(this.points[i].toGeoJSON().coordinates); + + return geoJSON; +}; + +},{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],355:[function(require,module,exports){ +module.exports = MultiPolygon; + +var util = require('util'); + +var Types = require('./types'); +var Geometry = require('./geometry'); +var Point = require('./point'); +var Polygon = require('./polygon'); +var BinaryWriter = require('./binarywriter'); + +function MultiPolygon(polygons, srid) { + Geometry.call(this); + + this.polygons = polygons || []; + this.srid = srid; + + if (this.polygons.length > 0) { + this.hasZ = this.polygons[0].hasZ; + this.hasM = this.polygons[0].hasM; + } +} + +util.inherits(MultiPolygon, Geometry); + +MultiPolygon.Z = function (polygons, srid) { + var multiPolygon = new MultiPolygon(polygons, srid); + multiPolygon.hasZ = true; + return multiPolygon; +}; + +MultiPolygon.M = function (polygons, srid) { + var multiPolygon = new MultiPolygon(polygons, srid); + multiPolygon.hasM = true; + return multiPolygon; +}; + +MultiPolygon.ZM = function (polygons, srid) { + var multiPolygon = new MultiPolygon(polygons, srid); + multiPolygon.hasZ = true; + multiPolygon.hasM = true; + return multiPolygon; +}; + +MultiPolygon._parseWkt = function (value, options) { + var multiPolygon = new MultiPolygon(); + multiPolygon.srid = options.srid; + multiPolygon.hasZ = options.hasZ; + multiPolygon.hasM = options.hasM; + + if (value.isMatch(['EMPTY'])) + return multiPolygon; + + value.expectGroupStart(); + + do { + value.expectGroupStart(); + + var exteriorRing = []; + var interiorRings = []; + + value.expectGroupStart(); + exteriorRing.push.apply(exteriorRing, value.matchCoordinates(options)); + value.expectGroupEnd(); + + while (value.isMatch([','])) { + value.expectGroupStart(); + interiorRings.push(value.matchCoordinates(options)); + value.expectGroupEnd(); + } + + multiPolygon.polygons.push(new Polygon(exteriorRing, interiorRings)); + + value.expectGroupEnd(); + + } while (value.isMatch([','])); + + value.expectGroupEnd(); + + return multiPolygon; +}; + +MultiPolygon._parseWkb = function (value, options) { + var multiPolygon = new MultiPolygon(); + multiPolygon.srid = options.srid; + multiPolygon.hasZ = options.hasZ; + multiPolygon.hasM = options.hasM; + + var polygonCount = value.readUInt32(); + + for (var i = 0; i < polygonCount; i++) + multiPolygon.polygons.push(Geometry.parse(value, options)); + + return multiPolygon; +}; + +MultiPolygon._parseTwkb = function (value, options) { + var multiPolygon = new MultiPolygon(); + multiPolygon.hasZ = options.hasZ; + multiPolygon.hasM = options.hasM; + + if (options.isEmpty) + return multiPolygon; + + var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); + var polygonCount = value.readVarInt(); + + for (var i = 0; i < polygonCount; i++) { + var polygon = new Polygon(); + polygon.hasZ = options.hasZ; + polygon.hasM = options.hasM; + + var ringCount = value.readVarInt(); + var exteriorRingCount = value.readVarInt(); + + for (var j = 0; j < exteriorRingCount; j++) + polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint)); + + for (j = 1; j < ringCount; j++) { + var interiorRing = []; + + var interiorRingCount = value.readVarInt(); + + for (var k = 0; k < interiorRingCount; k++) + interiorRing.push(Point._readTwkbPoint(value, options, previousPoint)); + + polygon.interiorRings.push(interiorRing); + } + + multiPolygon.polygons.push(polygon); + } + + return multiPolygon; +}; + +MultiPolygon._parseGeoJSON = function (value) { + var multiPolygon = new MultiPolygon(); + + if (value.coordinates.length > 0 && value.coordinates[0].length > 0 && value.coordinates[0][0].length > 0) + multiPolygon.hasZ = value.coordinates[0][0][0].length > 2; + + for (var i = 0; i < value.coordinates.length; i++) + multiPolygon.polygons.push(Polygon._parseGeoJSON({ coordinates: value.coordinates[i] })); + + return multiPolygon; +}; + +MultiPolygon.prototype.toWkt = function () { + if (this.polygons.length === 0) + return this._getWktType(Types.wkt.MultiPolygon, true); + + var wkt = this._getWktType(Types.wkt.MultiPolygon, false) + '('; + + for (var i = 0; i < this.polygons.length; i++) + wkt += this.polygons[i]._toInnerWkt() + ','; + + wkt = wkt.slice(0, -1); + wkt += ')'; + + return wkt; +}; + +MultiPolygon.prototype.toWkb = function () { + var wkb = new BinaryWriter(this._getWkbSize()); + + wkb.writeInt8(1); + + this._writeWkbType(wkb, Types.wkb.MultiPolygon); + wkb.writeUInt32LE(this.polygons.length); + + for (var i = 0; i < this.polygons.length; i++) + wkb.writeBuffer(this.polygons[i].toWkb({ srid: this.srid })); + + return wkb.buffer; +}; + +MultiPolygon.prototype.toTwkb = function () { + var twkb = new BinaryWriter(0, true); + + var precision = Geometry.getTwkbPrecision(5, 0, 0); + var isEmpty = this.polygons.length === 0; + + this._writeTwkbHeader(twkb, Types.wkb.MultiPolygon, precision, isEmpty); + + if (this.polygons.length > 0) { + twkb.writeVarInt(this.polygons.length); + + var previousPoint = new Point(0, 0, 0, 0); + for (var i = 0; i < this.polygons.length; i++) { + twkb.writeVarInt(1 + this.polygons[i].interiorRings.length); + + twkb.writeVarInt(this.polygons[i].exteriorRing.length); + + for (var j = 0; j < this.polygons[i].exteriorRing.length; j++) + this.polygons[i].exteriorRing[j]._writeTwkbPoint(twkb, precision, previousPoint); + + for (j = 0; j < this.polygons[i].interiorRings.length; j++) { + twkb.writeVarInt(this.polygons[i].interiorRings[j].length); + + for (var k = 0; k < this.polygons[i].interiorRings[j].length; k++) + this.polygons[i].interiorRings[j][k]._writeTwkbPoint(twkb, precision, previousPoint); + } + } + } + + return twkb.buffer; +}; + +MultiPolygon.prototype._getWkbSize = function () { + var size = 1 + 4 + 4; + + for (var i = 0; i < this.polygons.length; i++) + size += this.polygons[i]._getWkbSize(); + + return size; +}; + +MultiPolygon.prototype.toGeoJSON = function (options) { + var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); + geoJSON.type = Types.geoJSON.MultiPolygon; + geoJSON.coordinates = []; + + for (var i = 0; i < this.polygons.length; i++) + geoJSON.coordinates.push(this.polygons[i].toGeoJSON().coordinates); + + return geoJSON; +}; + +},{"./binarywriter":349,"./geometry":350,"./point":356,"./polygon":357,"./types":358,"util":343}],356:[function(require,module,exports){ +module.exports = Point; + +var util = require('util'); + +var Geometry = require('./geometry'); +var Types = require('./types'); +var BinaryWriter = require('./binarywriter'); +var ZigZag = require('./zigzag.js'); + +function Point(x, y, z, m, srid) { + Geometry.call(this); + + this.x = x; + this.y = y; + this.z = z; + this.m = m; + this.srid = srid; + + this.hasZ = typeof this.z !== 'undefined'; + this.hasM = typeof this.m !== 'undefined'; +} + +util.inherits(Point, Geometry); + +Point.Z = function (x, y, z, srid) { + var point = new Point(x, y, z, undefined, srid); + point.hasZ = true; + return point; +}; + +Point.M = function (x, y, m, srid) { + var point = new Point(x, y, undefined, m, srid); + point.hasM = true; + return point; +}; + +Point.ZM = function (x, y, z, m, srid) { + var point = new Point(x, y, z, m, srid); + point.hasZ = true; + point.hasM = true; + return point; +}; + +Point._parseWkt = function (value, options) { + var point = new Point(); + point.srid = options.srid; + point.hasZ = options.hasZ; + point.hasM = options.hasM; + + if (value.isMatch(['EMPTY'])) + return point; + + value.expectGroupStart(); + + var coordinate = value.matchCoordinate(options); + + point.x = coordinate.x; + point.y = coordinate.y; + point.z = coordinate.z; + point.m = coordinate.m; + + value.expectGroupEnd(); + + return point; +}; + +Point._parseWkb = function (value, options) { + var point = Point._readWkbPoint(value, options); + point.srid = options.srid; + return point; +}; + +Point._readWkbPoint = function (value, options) { + return new Point(value.readDouble(), value.readDouble(), + options.hasZ ? value.readDouble() : undefined, + options.hasM ? value.readDouble() : undefined); +}; + +Point._parseTwkb = function (value, options) { + var point = new Point(); + point.hasZ = options.hasZ; + point.hasM = options.hasM; + + if (options.isEmpty) + return point; + + point.x = ZigZag.decode(value.readVarInt()) / options.precisionFactor; + point.y = ZigZag.decode(value.readVarInt()) / options.precisionFactor; + point.z = options.hasZ ? ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor : undefined; + point.m = options.hasM ? ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor : undefined; + + return point; +}; + +Point._readTwkbPoint = function (value, options, previousPoint) { + previousPoint.x += ZigZag.decode(value.readVarInt()) / options.precisionFactor; + previousPoint.y += ZigZag.decode(value.readVarInt()) / options.precisionFactor; + + if (options.hasZ) + previousPoint.z += ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor; + if (options.hasM) + previousPoint.m += ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor; + + return new Point(previousPoint.x, previousPoint.y, previousPoint.z, previousPoint.m); +}; + +Point._parseGeoJSON = function (value) { + return Point._readGeoJSONPoint(value.coordinates); +}; + +Point._readGeoJSONPoint = function (coordinates) { + if (coordinates.length === 0) + return new Point(); + + if (coordinates.length > 2) + return new Point(coordinates[0], coordinates[1], coordinates[2]); + + return new Point(coordinates[0], coordinates[1]); +}; + +Point.prototype.toWkt = function () { + if (typeof this.x === 'undefined' && typeof this.y === 'undefined' && + typeof this.z === 'undefined' && typeof this.m === 'undefined') + return this._getWktType(Types.wkt.Point, true); + + return this._getWktType(Types.wkt.Point, false) + '(' + this._getWktCoordinate(this) + ')'; +}; + +Point.prototype.toWkb = function (parentOptions) { + var wkb = new BinaryWriter(this._getWkbSize()); + + wkb.writeInt8(1); + this._writeWkbType(wkb, Types.wkb.Point, parentOptions); + + if (typeof this.x === 'undefined' && typeof this.y === 'undefined') { + wkb.writeDoubleLE(NaN); + wkb.writeDoubleLE(NaN); + + if (this.hasZ) + wkb.writeDoubleLE(NaN); + if (this.hasM) + wkb.writeDoubleLE(NaN); + } + else { + this._writeWkbPoint(wkb); + } + + return wkb.buffer; +}; + +Point.prototype._writeWkbPoint = function (wkb) { + wkb.writeDoubleLE(this.x); + wkb.writeDoubleLE(this.y); + + if (this.hasZ) + wkb.writeDoubleLE(this.z); + if (this.hasM) + wkb.writeDoubleLE(this.m); +}; + +Point.prototype.toTwkb = function () { + var twkb = new BinaryWriter(0, true); + + var precision = Geometry.getTwkbPrecision(5, 0, 0); + var isEmpty = typeof this.x === 'undefined' && typeof this.y === 'undefined'; + + this._writeTwkbHeader(twkb, Types.wkb.Point, precision, isEmpty); + + if (!isEmpty) + this._writeTwkbPoint(twkb, precision, new Point(0, 0, 0, 0)); + + return twkb.buffer; +}; + +Point.prototype._writeTwkbPoint = function (twkb, precision, previousPoint) { + var x = this.x * precision.xyFactor; + var y = this.y * precision.xyFactor; + var z = this.z * precision.zFactor; + var m = this.m * precision.mFactor; + + twkb.writeVarInt(ZigZag.encode(x - previousPoint.x)); + twkb.writeVarInt(ZigZag.encode(y - previousPoint.y)); + if (this.hasZ) + twkb.writeVarInt(ZigZag.encode(z - previousPoint.z)); + if (this.hasM) + twkb.writeVarInt(ZigZag.encode(m - previousPoint.m)); + + previousPoint.x = x; + previousPoint.y = y; + previousPoint.z = z; + previousPoint.m = m; +}; + +Point.prototype._getWkbSize = function () { + var size = 1 + 4 + 8 + 8; + + if (this.hasZ) + size += 8; + if (this.hasM) + size += 8; + + return size; +}; + +Point.prototype.toGeoJSON = function (options) { + var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); + geoJSON.type = Types.geoJSON.Point; + + if (typeof this.x === 'undefined' && typeof this.y === 'undefined') + geoJSON.coordinates = []; + else if (typeof this.z !== 'undefined') + geoJSON.coordinates = [this.x, this.y, this.z]; + else + geoJSON.coordinates = [this.x, this.y]; + + return geoJSON; +}; + +},{"./binarywriter":349,"./geometry":350,"./types":358,"./zigzag.js":361,"util":343}],357:[function(require,module,exports){ +module.exports = Polygon; + +var util = require('util'); + +var Geometry = require('./geometry'); +var Types = require('./types'); +var Point = require('./point'); +var BinaryWriter = require('./binarywriter'); + +function Polygon(exteriorRing, interiorRings, srid) { + Geometry.call(this); + + this.exteriorRing = exteriorRing || []; + this.interiorRings = interiorRings || []; + this.srid = srid; + + if (this.exteriorRing.length > 0) { + this.hasZ = this.exteriorRing[0].hasZ; + this.hasM = this.exteriorRing[0].hasM; + } +} + +util.inherits(Polygon, Geometry); + +Polygon.Z = function (exteriorRing, interiorRings, srid) { + var polygon = new Polygon(exteriorRing, interiorRings, srid); + polygon.hasZ = true; + return polygon; +}; + +Polygon.M = function (exteriorRing, interiorRings, srid) { + var polygon = new Polygon(exteriorRing, interiorRings, srid); + polygon.hasM = true; + return polygon; +}; + +Polygon.ZM = function (exteriorRing, interiorRings, srid) { + var polygon = new Polygon(exteriorRing, interiorRings, srid); + polygon.hasZ = true; + polygon.hasM = true; + return polygon; +}; + +Polygon._parseWkt = function (value, options) { + var polygon = new Polygon(); + polygon.srid = options.srid; + polygon.hasZ = options.hasZ; + polygon.hasM = options.hasM; + + if (value.isMatch(['EMPTY'])) + return polygon; + + value.expectGroupStart(); + + value.expectGroupStart(); + polygon.exteriorRing.push.apply(polygon.exteriorRing, value.matchCoordinates(options)); + value.expectGroupEnd(); + + while (value.isMatch([','])) { + value.expectGroupStart(); + polygon.interiorRings.push(value.matchCoordinates(options)); + value.expectGroupEnd(); + } + + value.expectGroupEnd(); + + return polygon; +}; + +Polygon._parseWkb = function (value, options) { + var polygon = new Polygon(); + polygon.srid = options.srid; + polygon.hasZ = options.hasZ; + polygon.hasM = options.hasM; + + var ringCount = value.readUInt32(); + + if (ringCount > 0) { + var exteriorRingCount = value.readUInt32(); + + for (var i = 0; i < exteriorRingCount; i++) + polygon.exteriorRing.push(Point._readWkbPoint(value, options)); + + for (i = 1; i < ringCount; i++) { + var interiorRing = []; + + var interiorRingCount = value.readUInt32(); + + for (var j = 0; j < interiorRingCount; j++) + interiorRing.push(Point._readWkbPoint(value, options)); + + polygon.interiorRings.push(interiorRing); + } + } + + return polygon; +}; + +Polygon._parseTwkb = function (value, options) { + var polygon = new Polygon(); + polygon.hasZ = options.hasZ; + polygon.hasM = options.hasM; + + if (options.isEmpty) + return polygon; + + var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); + var ringCount = value.readVarInt(); + var exteriorRingCount = value.readVarInt(); + + for (var i = 0; i < exteriorRingCount; i++) + polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint)); + + for (i = 1; i < ringCount; i++) { + var interiorRing = []; + + var interiorRingCount = value.readVarInt(); + + for (var j = 0; j < interiorRingCount; j++) + interiorRing.push(Point._readTwkbPoint(value, options, previousPoint)); + + polygon.interiorRings.push(interiorRing); + } + + return polygon; +}; + +Polygon._parseGeoJSON = function (value) { + var polygon = new Polygon(); + + if (value.coordinates.length > 0 && value.coordinates[0].length > 0) + polygon.hasZ = value.coordinates[0][0].length > 2; + + for (var i = 0; i < value.coordinates.length; i++) { + if (i > 0) + polygon.interiorRings.push([]); + + for (var j = 0; j < value.coordinates[i].length; j++) { + if (i === 0) + polygon.exteriorRing.push(Point._readGeoJSONPoint(value.coordinates[i][j])); + else + polygon.interiorRings[i - 1].push(Point._readGeoJSONPoint(value.coordinates[i][j])); + } + } + + return polygon; +}; + +Polygon.prototype.toWkt = function () { + if (this.exteriorRing.length === 0) + return this._getWktType(Types.wkt.Polygon, true); + + return this._getWktType(Types.wkt.Polygon, false) + this._toInnerWkt(); +}; + +Polygon.prototype._toInnerWkt = function () { + var innerWkt = '(('; + + for (var i = 0; i < this.exteriorRing.length; i++) + innerWkt += this._getWktCoordinate(this.exteriorRing[i]) + ','; + + innerWkt = innerWkt.slice(0, -1); + innerWkt += ')'; + + for (i = 0; i < this.interiorRings.length; i++) { + innerWkt += ',('; + + for (var j = 0; j < this.interiorRings[i].length; j++) { + innerWkt += this._getWktCoordinate(this.interiorRings[i][j]) + ','; + } + + innerWkt = innerWkt.slice(0, -1); + innerWkt += ')'; + } + + innerWkt += ')'; + + return innerWkt; +}; + +Polygon.prototype.toWkb = function (parentOptions) { + var wkb = new BinaryWriter(this._getWkbSize()); + + wkb.writeInt8(1); + + this._writeWkbType(wkb, Types.wkb.Polygon, parentOptions); + + if (this.exteriorRing.length > 0) { + wkb.writeUInt32LE(1 + this.interiorRings.length); + wkb.writeUInt32LE(this.exteriorRing.length); + } + else { + wkb.writeUInt32LE(0); + } + + for (var i = 0; i < this.exteriorRing.length; i++) + this.exteriorRing[i]._writeWkbPoint(wkb); + + for (i = 0; i < this.interiorRings.length; i++) { + wkb.writeUInt32LE(this.interiorRings[i].length); + + for (var j = 0; j < this.interiorRings[i].length; j++) + this.interiorRings[i][j]._writeWkbPoint(wkb); + } + + return wkb.buffer; +}; + +Polygon.prototype.toTwkb = function () { + var twkb = new BinaryWriter(0, true); + + var precision = Geometry.getTwkbPrecision(5, 0, 0); + var isEmpty = this.exteriorRing.length === 0; + + this._writeTwkbHeader(twkb, Types.wkb.Polygon, precision, isEmpty); + + if (this.exteriorRing.length > 0) { + twkb.writeVarInt(1 + this.interiorRings.length); + + twkb.writeVarInt(this.exteriorRing.length); + + var previousPoint = new Point(0, 0, 0, 0); + for (var i = 0; i < this.exteriorRing.length; i++) + this.exteriorRing[i]._writeTwkbPoint(twkb, precision, previousPoint); + + for (i = 0; i < this.interiorRings.length; i++) { + twkb.writeVarInt(this.interiorRings[i].length); + + for (var j = 0; j < this.interiorRings[i].length; j++) + this.interiorRings[i][j]._writeTwkbPoint(twkb, precision, previousPoint); + } + } + + return twkb.buffer; +}; + +Polygon.prototype._getWkbSize = function () { + var coordinateSize = 16; + + if (this.hasZ) + coordinateSize += 8; + if (this.hasM) + coordinateSize += 8; + + var size = 1 + 4 + 4; + + if (this.exteriorRing.length > 0) + size += 4 + (this.exteriorRing.length * coordinateSize); + + for (var i = 0; i < this.interiorRings.length; i++) + size += 4 + (this.interiorRings[i].length * coordinateSize); + + return size; +}; + +Polygon.prototype.toGeoJSON = function (options) { + var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); + geoJSON.type = Types.geoJSON.Polygon; + geoJSON.coordinates = []; + + if (this.exteriorRing.length > 0) { + var exteriorRing = []; + + for (var i = 0; i < this.exteriorRing.length; i++) { + if (this.hasZ) + exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y, this.exteriorRing[i].z]); + else + exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y]); + } + + geoJSON.coordinates.push(exteriorRing); + } + + for (var j = 0; j < this.interiorRings.length; j++) { + var interiorRing = []; + + for (var k = 0; k < this.interiorRings[j].length; k++) { + if (this.hasZ) + interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y, this.interiorRings[j][k].z]); + else + interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y]); + } + + geoJSON.coordinates.push(interiorRing); + } + + return geoJSON; +}; + +},{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],358:[function(require,module,exports){ +module.exports = { + wkt: { + Point: 'POINT', + LineString: 'LINESTRING', + Polygon: 'POLYGON', + MultiPoint: 'MULTIPOINT', + MultiLineString: 'MULTILINESTRING', + MultiPolygon: 'MULTIPOLYGON', + GeometryCollection: 'GEOMETRYCOLLECTION' + }, + wkb: { + Point: 1, + LineString: 2, + Polygon: 3, + MultiPoint: 4, + MultiLineString: 5, + MultiPolygon: 6, + GeometryCollection: 7 + }, + geoJSON: { + Point: 'Point', + LineString: 'LineString', + Polygon: 'Polygon', + MultiPoint: 'MultiPoint', + MultiLineString: 'MultiLineString', + MultiPolygon: 'MultiPolygon', + GeometryCollection: 'GeometryCollection' + } +}; + +},{}],359:[function(require,module,exports){ +module.exports = WktParser; + +var Types = require('./types'); +var Point = require('./point'); + +function WktParser(value) { + this.value = value; + this.position = 0; +} + +WktParser.prototype.match = function (tokens) { + this.skipWhitespaces(); + + for (var i = 0; i < tokens.length; i++) { + if (this.value.substring(this.position).indexOf(tokens[i]) === 0) { + this.position += tokens[i].length; + return tokens[i]; + } + } + + return null; +}; + +WktParser.prototype.matchRegex = function (tokens) { + this.skipWhitespaces(); + + for (var i = 0; i < tokens.length; i++) { + var match = this.value.substring(this.position).match(tokens[i]); + + if (match) { + this.position += match[0].length; + return match; + } + } + + return null; +}; + +WktParser.prototype.isMatch = function (tokens) { + this.skipWhitespaces(); + + for (var i = 0; i < tokens.length; i++) { + if (this.value.substring(this.position).indexOf(tokens[i]) === 0) { + this.position += tokens[i].length; + return true; + } + } + + return false; +}; + +WktParser.prototype.matchType = function () { + var geometryType = this.match([Types.wkt.Point, Types.wkt.LineString, Types.wkt.Polygon, Types.wkt.MultiPoint, + Types.wkt.MultiLineString, Types.wkt.MultiPolygon, Types.wkt.GeometryCollection]); + + if (!geometryType) + throw new Error('Expected geometry type'); + + return geometryType; +}; + +WktParser.prototype.matchDimension = function () { + var dimension = this.match(['ZM', 'Z', 'M']); + + switch (dimension) { + case 'ZM': return { hasZ: true, hasM: true }; + case 'Z': return { hasZ: true, hasM: false }; + case 'M': return { hasZ: false, hasM: true }; + default: return { hasZ: false, hasM: false }; + } +}; + +WktParser.prototype.expectGroupStart = function () { + if (!this.isMatch(['('])) + throw new Error('Expected group start'); +}; + +WktParser.prototype.expectGroupEnd = function () { + if (!this.isMatch([')'])) + throw new Error('Expected group end'); +}; + +WktParser.prototype.matchCoordinate = function (options) { + var match; + + if (options.hasZ && options.hasM) + match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]); + else if (options.hasZ || options.hasM) + match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]); + else + match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]); + + if (!match) + throw new Error('Expected coordinates'); + + if (options.hasZ && options.hasM) + return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4])); + else if (options.hasZ) + return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3])); + else if (options.hasM) + return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3])); + else + return new Point(parseFloat(match[1]), parseFloat(match[2])); +}; + +WktParser.prototype.matchCoordinates = function (options) { + var coordinates = []; + + do { + var startsWithBracket = this.isMatch(['(']); + + coordinates.push(this.matchCoordinate(options)); + + if (startsWithBracket) + this.expectGroupEnd(); + } while (this.isMatch([','])); + + return coordinates; +}; + +WktParser.prototype.skipWhitespaces = function () { + while (this.position < this.value.length && this.value[this.position] === ' ') + this.position++; +}; + +},{"./point":356,"./types":358}],360:[function(require,module,exports){ +exports.Types = require('./types'); +exports.Geometry = require('./geometry'); +exports.Point = require('./point'); +exports.LineString = require('./linestring'); +exports.Polygon = require('./polygon'); +exports.MultiPoint = require('./multipoint'); +exports.MultiLineString = require('./multilinestring'); +exports.MultiPolygon = require('./multipolygon'); +exports.GeometryCollection = require('./geometrycollection'); +},{"./geometry":350,"./geometrycollection":351,"./linestring":352,"./multilinestring":353,"./multipoint":354,"./multipolygon":355,"./point":356,"./polygon":357,"./types":358}],361:[function(require,module,exports){ +module.exports = { + encode: function (value) { + return (value << 1) ^ (value >> 31); + }, + decode: function (value) { + return (value >> 1) ^ (-(value & 1)); + } +}; + +},{}],362:[function(require,module,exports){ +module.exports = extend + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +function extend() { + var target = {} + + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i] + + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target +} + +},{}]},{},[1])(1) +}); diff --git a/libs/potree/lazylibs/geopackage/geopackage.min.js b/libs/potree/lazylibs/geopackage/geopackage.min.js new file mode 100644 index 0000000..856963d --- /dev/null +++ b/libs/potree/lazylibs/geopackage/geopackage.min.js @@ -0,0 +1,97 @@ +(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 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;o1){return callback(new Error("Unexpected state. More than one Tile Matrix Set matched for table name: "+tableName+", count: "+results.length))}var tileMatrixSet=new TileMatrixSet;tms.populateObjectFromResult(tileMatrixSet,results[0]);this.getTileDaoWithTileMatrixSet(tileMatrixSet,callback)}.bind(this))};GeoPackage.prototype.getTileTables=function(callback){var tms=this.getTileMatrixSetDao();tms.isTableExists(function(err,exists){if(!exists){return callback(null,[])}tms.getTileTables(callback)})};GeoPackage.prototype.getFeatureTables=function(callback){var gcd=this.getGeometryColumnsDao();gcd.isTableExists(function(err,exists){if(!exists){return callback(null,[])}gcd.getFeatureTables(callback)})};GeoPackage.prototype.getGeometryColumnsDao=function(){return new GeometryColumnsDao(this.connection)};GeoPackage.prototype.getFeatureDaoWithGeometryColumns=function(geometryColumns,callback){if(!geometryColumns){return callback(new Error("Non null Geometry Columns is required to create Feature DAO"))}var tableReader=new FeatureTableReader(geometryColumns);var featureTable=tableReader.readFeatureTable(this.connection,function(err,featureTable){if(err){return callback(err)}var dao=new FeatureDao(this.connection,featureTable,geometryColumns,this.metadataDb);callback(null,dao)}.bind(this))};GeoPackage.prototype.getFeatureDaoWithContents=function(contents,callback){};GeoPackage.prototype.getFeatureDaoWithTableName=function(tableName,callback){var self=this;var dao=this.getGeometryColumnsDao();var geometryColumns=dao.queryForTableName(tableName,function(err,geometryColumns){if(!geometryColumns){return callback(new Error("No Feature Table exists for table name: "+tableName))}self.getFeatureDaoWithGeometryColumns(geometryColumns,callback)})};module.exports=GeoPackage},{"./core/contents":"/data/github/geopackage-node/lib/core/contents/index.js","./core/srs":"/data/github/geopackage-node/lib/core/srs/index.js","./features/columns":"/data/github/geopackage-node/lib/features/columns/index.js","./features/user/featureDao":"/data/github/geopackage-node/lib/features/user/featureDao.js","./features/user/featureTableReader":"/data/github/geopackage-node/lib/features/user/featureTableReader.js","./tiles/matrix":"/data/github/geopackage-node/lib/tiles/matrix/index.js","./tiles/matrixset":"/data/github/geopackage-node/lib/tiles/matrixset/index.js","./tiles/user/tileDao":"/data/github/geopackage-node/lib/tiles/user/tileDao.js","./tiles/user/tileTableReader":"/data/github/geopackage-node/lib/tiles/user/tileTableReader.js",async:"/data/github/geopackage-node/node_modules/async/lib/async.js"}],"/data/github/geopackage-node/lib/geoPackageConstants.js":[function(require,module,exports){exports.GEOPACKAGE_EXTENSION="gpkg";exports.GEOPACKAGE_EXTENDED_EXTENSION="gpkx";exports.APPLICATION_ID="GP10";exports.GEOPACKAGE_EXTENSION_AUTHOR=exports.GEOPACKAGE_EXTENSION;exports.GEOMETRY_EXTENSION_PREFIX="geom";exports.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER="GP";exports.GEOPACKAGE_GEOMETRY_VERSION_1=0;exports.SQLITE_HEADER_PREFIX="SQLite format 3"},{}],"/data/github/geopackage-node/lib/geoPackageManager.js":[function(require,module,exports){var async=require("async"),path=require("path"),GeoPackage=require("./geoPackage"),GeoPackageValidate=require("./validate/geoPackageValidate"),GeoPackageConnection=require("./db/geoPackageConnection");module.exports.open=function(filePath,callback){var error=GeoPackageValidate.validateGeoPackageExtension(filePath);if(error)return callback(error);var results={};async.waterfall([function(callback){GeoPackageConnection.connect(filePath,function(err,connection){if(err){console.log("cannot open "+filePath);return callback(err)}results.connection=connection;callback(err,results)})},function(results,callback){results.geoPackage=new GeoPackage(path.basename(filePath),filePath,results.connection);callback(null,results)},function(results,callback){GeoPackageValidate.hasMinimumTables(results.geoPackage,function(err){callback(err,results)})}],function(err,results){if(err){return callback(err)}callback(err,results.geoPackage)})}},{"./db/geoPackageConnection":"/data/github/geopackage-node/lib/db/geoPackageConnection.js","./geoPackage":"/data/github/geopackage-node/lib/geoPackage.js","./validate/geoPackageValidate":"/data/github/geopackage-node/lib/validate/geoPackageValidate.js",async:"/data/github/geopackage-node/node_modules/async/lib/async.js",path:"/data/github/geopackage-node/node_modules/browserify/node_modules/path-browserify/index.js"}],"/data/github/geopackage-node/lib/geom/geometryData.js":[function(require,module,exports){(function(Buffer){var GeoPackageConstants=require("../geoPackageConstants");var wkx=require("wkx");var BIG_ENDIAN=0;var LITTLE_ENDIAN=1;var GeometryData=function(buffer){this.empty=true;this.byteOrder=BIG_ENDIAN;this.fromData(buffer)};module.exports=GeometryData;GeometryData.prototype.fromData=function(buffer){this.buffer=buffer;if(buffer instanceof Uint8Array){this.buffer=buffer=new Buffer(buffer)}var magicString=buffer.toString("ascii",0,2);if(magicString!==GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER){throw new Error("Unexpected GeoPackage Geometry magic number: "+magicString+", Expected: "+GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER)}var version=buffer.readUInt8(2);if(version!==GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1){throw new Error("Unexpected GeoPackage Geometry version "+version+", Expected: "+GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1)}var flags=buffer.readUInt8(3);var envelopeIndicator=this.readFlags(flags);this.srsId=buffer[this.byteOrder?"readUInt32LE":"readUInt32BE"](4);this.envelope=this.readEnvelope(envelopeIndicator,buffer);var offset=this.envelope.offset;var wkbBuffer=buffer.slice(offset);this.geometry=wkx.Geometry.parse(wkbBuffer)};GeometryData.prototype.readFlags=function(flagsInt){var reserved7=flagsInt>>7&1;var reserved6=flagsInt>>6&1;if(reserved7!==0||reserved6!==0){throw new Error("Unexpected GeoPackage Geometry flags. Flag bit 7 and 6 should both be 0, 7="+reserved7+", 6="+reserved6)}var binaryType=flagsInt>>5&1;this.extended=binaryType==1;var emptyValue=flagsInt>>4&1;this.empty=emptyValue==1;var envelopeIndicator=flagsInt>>1&7;if(envelopeIndicator>4){throw new Error("Unexpected GeoPackage Geometry flags. Envelope contents indicator must be between 0 and 4. Actual: "+envelopeIndicator)}var byteOrderValue=flagsInt&1;this.byteOrder=byteOrderValue;return envelopeIndicator};GeometryData.prototype.readEnvelope=function(envelopeIndicator,buffer){var readDoubleMethod="readDouble"+(this.byteOrder?"LE":"BE");var envelopeByteOffset=8;reads=0;var envelope={};if(envelopeIndicator<=0){envelope.offset=envelopeByteOffset;return envelope}envelope.minX=buffer[readDoubleMethod](envelopeByteOffset+8*reads++);envelope.maxX=buffer[readDoubleMethod](envelopeByteOffset+8*reads++);envelope.minY=buffer[readDoubleMethod](envelopeByteOffset+8*reads++);envelope.maxY=buffer[readDoubleMethod](envelopeByteOffset+8*reads++);envelope.hasZ=false;var minZ=undefined;var maxZ=undefined;envelope.hasM=false;var minM=undefined;var maxM=undefined;if(envelopeIndicator===2||envelopeIndicator===4){envelope.hasZ=true;envelope.minZ=buffer[readDoubleMethod](envelopeByteOffset+8*reads++);envelope.maxZ=buffer[readDoubleMethod](envelopeByteOffset+8*reads++)}if(envelopeIndicator===3||envelopeIndicator===4){envelope.hasM=true;envelope.minM=buffer[readDoubleMethod](envelopeByteOffset+8*reads++);envelope.maxM=buffer[readDoubleMethod](envelopeByteOffset+8*reads++)}envelope.offset=envelopeByteOffset+8*reads;return envelope}}).call(this,require("buffer").Buffer)},{"../geoPackageConstants":"/data/github/geopackage-node/lib/geoPackageConstants.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",wkx:"/data/github/geopackage-node/node_modules/wkx/lib/wkx.js"}],"/data/github/geopackage-node/lib/geopackage.js":[function(require,module,exports){arguments[4]["/data/github/geopackage-node/lib/geoPackage.js"][0].apply(exports,arguments)},{"./core/contents":"/data/github/geopackage-node/lib/core/contents/index.js","./core/srs":"/data/github/geopackage-node/lib/core/srs/index.js","./features/columns":"/data/github/geopackage-node/lib/features/columns/index.js","./features/user/featureDao":"/data/github/geopackage-node/lib/features/user/featureDao.js","./features/user/featureTableReader":"/data/github/geopackage-node/lib/features/user/featureTableReader.js","./tiles/matrix":"/data/github/geopackage-node/lib/tiles/matrix/index.js","./tiles/matrixset":"/data/github/geopackage-node/lib/tiles/matrixset/index.js","./tiles/user/tileDao":"/data/github/geopackage-node/lib/tiles/user/tileDao.js","./tiles/user/tileTableReader":"/data/github/geopackage-node/lib/tiles/user/tileTableReader.js",async:"/data/github/geopackage-node/node_modules/async/lib/async.js"}],"/data/github/geopackage-node/lib/tiles/creator/index.js":[function(require,module,exports){(function(process){var fileType=require("file-type");module.exports.initialize=function(width,height,callback){if(typeof process!=="undefined"&&process.version){new LwipTileCreator(width,height,callback)}else{new CanvasTileCreator(width,height,callback)}};function CanvasTileCreator(width,height,callback){this.canvas=document.createElement("canvas");this.canvas.width=width;this.canvas.height=height;this.ctx=this.canvas.getContext("2d");callback(null,this)}CanvasTileCreator.prototype.addTile=function(tileData,xOffset,yOffset,callback){var type=fileType(tileData);var base64Data=btoa(String.fromCharCode.apply(null,tileData));var image=document.createElement("img");image.onload=function(){this.ctx.drawImage(image,xOffset,yOffset);callback()}.bind(this);image.src="data:"+type.mime+";base64,"+base64Data};CanvasTileCreator.prototype.getCompleteTile=function(format,callback){callback(null,this.canvas.toDataURL())};function LwipTileCreator(width,height,callback){this.lwip=require("lwip");this.width=width;this.height=height;this.lwip.create(this.width*3,this.height*3,function(err,image){this.image=image;callback(null,this)}.bind(this))}LwipTileCreator.prototype.addTile=function(tileData,xOffset,yOffset,callback){var type=fileType(tileData);this.lwip.open(tileData,type.ext,function(err,tile){this.image.paste(xOffset+this.width,yOffset+this.height,tile,callback)}.bind(this))};LwipTileCreator.prototype.getCompleteTile=function(format,callback){this.image.writeFile("/tmp/lwip.png",function(err){this.image.batch().crop(this.width,this.height).toBuffer(format,callback)}.bind(this))}}).call(this,require("_process"))},{_process:"/data/github/geopackage-node/node_modules/browserify/node_modules/process/browser.js","file-type":"/data/github/geopackage-node/node_modules/file-type/index.js",lwip:false}],"/data/github/geopackage-node/lib/tiles/matrix/index.js":[function(require,module,exports){var Dao=require("../../dao/dao"),TileMatrixSetDao=require("../matrixset").TileMatrixSetDao;var util=require("util");var TileMatrix=function(){this.tableName;this.zoomLevel;this.matrixWidth;this.matrixHeight;this.tileWidth;this.tileHeight;this.pixelXSize;this.pixelYSize};var TileMatrixDao=function(connection){Dao.call(this,connection)};util.inherits(TileMatrixDao,Dao);TileMatrixDao.prototype.createObject=function(){return new TileMatrix};TileMatrixDao.prototype.getContents=function(tileMatrix,callback){var dao=this.getContentsDao();return dao.queryForIdObject(tileMatrix.tableName,callback)};TileMatrixDao.prototype.getContentsDao=function(){var ContentsDao=require("../../core/contents").ContentsDao;return new ContentsDao(this.connection)};TileMatrixDao.prototype.getTileMatrixSet=function(tileMatrix,callback){var dao=this.getTileMatrixSetDao();return dao.queryForIdObject(tileMatrix.tableName,callback)};TileMatrixDao.prototype.getTileMatrixSetDao=function(){return new TileMatrixSetDao(this.connection)};TileMatrixDao.TABLE_NAME="gpkg_tile_matrix";TileMatrixDao.COLUMN_PK1="table_name";TileMatrixDao.COLUMN_PK2="zoom_level";TileMatrixDao.COLUMN_TABLE_NAME="table_name";TileMatrixDao.COLUMN_ZOOM_LEVEL="zoom_level";TileMatrixDao.COLUMN_MATRIX_WIDTH="matrix_width";TileMatrixDao.COLUMN_MATRIX_HEIGHT="matrix_height";TileMatrixDao.COLUMN_TILE_WIDTH="tile_width";TileMatrixDao.COLUMN_TILE_HEIGHT="tile_height";TileMatrixDao.COLUMN_PIXEL_X_SIZE="pixel_x_size";TileMatrixDao.COLUMN_PIXEL_Y_SIZE="pixel_y_size";TileMatrix.TABLE_NAME="tableName";TileMatrix.ZOOM_LEVEL="zoomLevel";TileMatrix.MATRIX_WIDTH="matrixWidth";TileMatrix.MATRIX_HEIGHT="matrixHeight";TileMatrix.TILE_WIDTH="tileWidth";TileMatrix.TILE_HEIGHT="tileHeight";TileMatrix.PIXEL_X_SIZE="pixelXSize";TileMatrix.PIXEL_Y_SIZE="pixelYSize";TileMatrixDao.prototype.tableName="gpkg_tile_matrix";TileMatrixDao.prototype.idColumns=[TileMatrixDao.COLUMN_PK1,TileMatrixDao.COLUMN_PK2];TileMatrixDao.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];TileMatrixDao.prototype.columnToPropertyMap={};TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_TABLE_NAME]=TileMatrix.TABLE_NAME;TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_ZOOM_LEVEL]=TileMatrix.ZOOM_LEVEL;TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_MATRIX_WIDTH]=TileMatrix.MATRIX_WIDTH;TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_MATRIX_HEIGHT]=TileMatrix.MATRIX_HEIGHT;TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_TILE_WIDTH]=TileMatrix.TILE_WIDTH;TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_TILE_HEIGHT]=TileMatrix.TILE_HEIGHT;TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_PIXEL_X_SIZE]=TileMatrix.PIXEL_X_SIZE;TileMatrixDao.prototype.columnToPropertyMap[TileMatrixDao.COLUMN_PIXEL_Y_SIZE]=TileMatrix.PIXEL_Y_SIZE;TileMatrixDao.columnIndexToPropertyMap=[TileMatrix.TABLE_NAME,TileMatrix.ZOOM_LEVEL,TileMatrix.MATRIX_WIDTH,TileMatrix.MATRIX_HEIGHT,TileMatrix.TILE_WIDTH,TileMatrix.TILE_HEIGHT,TileMatrix.PIXEL_X_SIZE,TileMatrix.PIXEL_Y_SIZE];module.exports.TileMatrixDao=TileMatrixDao;module.exports.TileMatrix=TileMatrix},{"../../core/contents":"/data/github/geopackage-node/lib/core/contents/index.js","../../dao/dao":"/data/github/geopackage-node/lib/dao/dao.js","../matrixset":"/data/github/geopackage-node/lib/tiles/matrixset/index.js",util:"/data/github/geopackage-node/node_modules/browserify/node_modules/util/util.js"}],"/data/github/geopackage-node/lib/tiles/matrixset/index.js":[function(require,module,exports){var Dao=require("../../dao/dao"),BoundingBox=require("../../boundingBox"),SpatialReferenceSystemDao=require("../../core/srs").SpatialReferenceSystemDao;var util=require("util");var TileMatrixSet=function(){this.tableName;this.srsId;this.minX;this.minY;this.maxX; +this.maxY};TileMatrixSet.prototype.setBoundingBox=function(boundingBox){this.minX=boundingBox.minLongitude;this.maxX=boundingBox.maxLongitude;this.minY=boundingBox.minLatitude;this.maxY=boundingBox.maxLatitude};TileMatrixSet.prototype.getBoundingBox=function(){return new BoundingBox(this.minX,this.maxX,this.minY,this.maxY)};var TileMatrixSetDao=function(connection){Dao.call(this,connection);this.connection=connection};util.inherits(TileMatrixSetDao,Dao);TileMatrixSetDao.prototype.createObject=function(){return new TileMatrixSet};TileMatrixSetDao.prototype.getTileTables=function(callback){var tableNames=[];this.connection.each("select "+TileMatrixSetDao.COLUMN_TABLE_NAME+" from "+TileMatrixSetDao.TABLE_NAME,function(err,result){if(err)return callback(err);tableNames.push(result[TileMatrixSetDao.COLUMN_TABLE_NAME])},function(err,numberOfResults){callback(err,tableNames)})};TileMatrixSetDao.prototype.getProjection=function(tileMatrixSet,callback){this.getSrs(tileMatrixSet,function(err,srs){if(err)return callback(err);if(!srs)return callback();var srsDao=this.getSpatialReferenceSystemDao();callback(null,srsDao.getProjection(srs))}.bind(this))};TileMatrixSetDao.prototype.getSrs=function(tileMatrixSet,callback){var dao=this.getSpatialReferenceSystemDao();dao.queryForIdObject(tileMatrixSet.srsId,callback)};TileMatrixSetDao.prototype.getContents=function(tileMatrixSet,callback){var dao=this.getContentsDao();dao.queryForIdObject(tileMatrixSet.tableName,callback)};TileMatrixSetDao.prototype.getSpatialReferenceSystemDao=function(){return new SpatialReferenceSystemDao(this.connection)};TileMatrixSetDao.prototype.getContentsDao=function(){var ContentsDao=require("../../core/contents").ContentsDao;return new ContentsDao(this.connection)};TileMatrixSet.TABLE_NAME="tableName";TileMatrixSet.MIN_X="minX";TileMatrixSet.MIN_Y="minY";TileMatrixSet.MAX_X="maxX";TileMatrixSet.MAX_Y="maxY";TileMatrixSet.SRS_ID="srsId";TileMatrixSetDao.TABLE_NAME="gpkg_tile_matrix_set";TileMatrixSetDao.COLUMN_PK="table_name";TileMatrixSetDao.COLUMN_TABLE_NAME="table_name";TileMatrixSetDao.COLUMN_SRS_ID="srs_id";TileMatrixSetDao.COLUMN_MIN_X="min_x";TileMatrixSetDao.COLUMN_MIN_Y="min_y";TileMatrixSetDao.COLUMN_MAX_X="max_x";TileMatrixSetDao.COLUMN_MAX_Y="max_y";TileMatrixSetDao.prototype.tableName="gpkg_tile_matrix_set";TileMatrixSetDao.prototype.idColumns=[TileMatrixSetDao.COLUMN_PK];TileMatrixSetDao.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];TileMatrixSetDao.prototype.columnToPropertyMap={};TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_TABLE_NAME]=TileMatrixSet.TABLE_NAME;TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_SRS_ID]=TileMatrixSet.SRS_ID;TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_X]=TileMatrixSet.MIN_X;TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_Y]=TileMatrixSet.MIN_Y;TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_X]=TileMatrixSet.MAX_X;TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_Y]=TileMatrixSet.MAX_Y;TileMatrixSetDao.columnIndexToPropertyMap=[TileMatrixSet.TABLE_NAME,TileMatrixSet.SRS_ID,TileMatrixSet.MIN_X,TileMatrixSet.MIN_Y,TileMatrixSet.MAX_X,TileMatrixSet.MAX_Y];module.exports.TileMatrixSetDao=TileMatrixSetDao;module.exports.TileMatrixSet=TileMatrixSet},{"../../boundingBox":"/data/github/geopackage-node/lib/boundingBox.js","../../core/contents":"/data/github/geopackage-node/lib/core/contents/index.js","../../core/srs":"/data/github/geopackage-node/lib/core/srs/index.js","../../dao/dao":"/data/github/geopackage-node/lib/dao/dao.js",util:"/data/github/geopackage-node/node_modules/browserify/node_modules/util/util.js"}],"/data/github/geopackage-node/lib/tiles/retriever/index.js":[function(require,module,exports){var TileMatrixSetDao=require("../matrixset").TileMatrixSetDao,TileBoundingBoxUtils=require("../tileBoundingBoxUtils"),TileCreator=require("../creator");var async=require("async");var GeoPackageTileRetriever=function(tileDao,width,height){this.tileDao=tileDao;this.tileDao.adjustTileMatrixLengths();this.width=width;this.height=height};module.exports=GeoPackageTileRetriever;GeoPackageTileRetriever.prototype.getWebMercatorBoundingBox=function(callback){if(this.setWebMercatorBoundingBox){return callback(null,this.setWebMercatorBoundingBox)}else{var tileMatrixSetDao=new TileMatrixSetDao(this.tileDao.connection);var tileMatrixSet=this.tileDao.tileMatrixSet;tileMatrixSetDao.getSrs(tileMatrixSet,function(err,srs){this.setProjectionBoundingBox=tileMatrixSet.getBoundingBox();this.setWebMercatorBoundingBox=this.setProjectionBoundingBox.projectBoundingBox("EPSG:3857","EPSG:3857");callback(null,this.setWebMercatorBoundingBox)}.bind(this))}};GeoPackageTileRetriever.prototype.hasTile=function(x,y,zoom,callback){var webMercatorBoundingBox=TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x,y,zoom);this.getTileMatrixWithWebMercatorBoundingBox(webMercatorBoundingBox,function(err,tileMatrix){var tileResults=[];this.retrieveTileResults(webMercatorBoundingBox,tileMatrix,function(err,result){tileResults.push(result)},function(err){if(tileResults&&tileResults.length>0){return callback(err,true)}callback(err,false)})}.bind(this))};GeoPackageTileRetriever.prototype.getTile=function(x,y,zoom,callback){var webMercatorBoundingBox=TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x,y,zoom);this.getTileWithBounds(webMercatorBoundingBox,zoom,callback)};GeoPackageTileRetriever.prototype.getTileWithWgs84Bounds=function(wgs84BoundingBox,zoom,callback){var webMercatorBoundingBox=wgs84BoundingBox.projectBoundingBox("EPSG:4326","EPSG:3857");this.getTileWithBounds(webMercatorBoundingBox,zoom,callback)};GeoPackageTileRetriever.prototype.getTileWithBounds=function(webMercatorBoundingBox,zoom,callback){var tiles=[];this.getTileMatrixWithWebMercatorBoundingBox(webMercatorBoundingBox,zoom,function(err,tileMatrix){if(err||!tileMatrix)return callback();var tileWidth=tileMatrix.tileWidth;var tileHeight=tileMatrix.tileHeight;TileCreator.initialize(this.width||tileWidth,this.height||tileHeight,function(err,creator){this.retrieveTileResults(webMercatorBoundingBox,tileMatrix,function(err,tile){this.getWebMercatorBoundingBox(function(err,box){var tileWebMercatorBoundingBox=TileBoundingBoxUtils.getWebMercatorBoundingBox(box,tileMatrix,tile.getTileColumn(),tile.getTileRow());var overlap=TileBoundingBoxUtils.overlapWithBoundingBox(webMercatorBoundingBox,tileWebMercatorBoundingBox);if(overlap){var xOffset=Math.round(TileBoundingBoxUtils.getXPixelOffset(this.width||tileWidth,webMercatorBoundingBox,tileWebMercatorBoundingBox.minLongitude));var yOffset=Math.round(TileBoundingBoxUtils.getYPixelOffset(this.height||tileHeight,webMercatorBoundingBox,tileWebMercatorBoundingBox.maxLatitude));if(xOffset<=-(this.height||tileHeight)||xOffset>=(this.height||tileHeight)||yOffset<=-(this.width||tileWidth)||yOffset>=(this.width||tileWidth)){}else{tiles.push({data:tile.getTileData(),xOffset:xOffset,yOffset:yOffset})}}}.bind(this))}.bind(this),function(err){async.eachSeries(tiles,function(tile,callback){creator.addTile(tile.data,tile.xOffset,tile.yOffset,callback)},function(err){creator.getCompleteTile("png",callback)})})}.bind(this))}.bind(this))};GeoPackageTileRetriever.prototype.getTileMatrixWithWebMercatorBoundingBox=function(webMercatorBoundingBox,zoom,callback){if(!callback){callback=zoom;zoom=undefined}var tileMatrix;this.getWebMercatorBoundingBox(function(err,setWebMercatorBoundingBox){var overlap=TileBoundingBoxUtils.overlapWithBoundingBox(webMercatorBoundingBox,setWebMercatorBoundingBox);if(overlap){var distance=webMercatorBoundingBox.maxLongitude-webMercatorBoundingBox.minLongitude;var zoomLevel=zoom;if(zoom===undefined||zoom===null){zoomLevel=this.tileDao.getZoomLevelWithLength(distance)}if(zoomLevel!==undefined&&zoomLevel!==null){tileMatrix=this.tileDao.getTileMatrixWithZoomLevel(zoomLevel)}}callback(null,tileMatrix)}.bind(this))};GeoPackageTileRetriever.prototype.retrieveTileResults=function(webMercatorBoundingBox,tileMatrix,tileCallback,doneCallback){if(tileMatrix){this.getWebMercatorBoundingBox(function(err,setWebMercatorBoundingBox){var tileGrid=TileBoundingBoxUtils.getTileGridWithWebMercatorTotalBoundingBox(setWebMercatorBoundingBox,tileMatrix.matrixWidth,tileMatrix.matrixHeight,webMercatorBoundingBox);this.tileDao.queryByTileGrid(tileGrid,tileMatrix.zoomLevel,tileCallback,doneCallback)}.bind(this))}else{doneCallback()}}},{"../creator":"/data/github/geopackage-node/lib/tiles/creator/index.js","../matrixset":"/data/github/geopackage-node/lib/tiles/matrixset/index.js","../tileBoundingBoxUtils":"/data/github/geopackage-node/lib/tiles/tileBoundingBoxUtils.js",async:"/data/github/geopackage-node/node_modules/async/lib/async.js"}],"/data/github/geopackage-node/lib/tiles/tileBoundingBoxUtils.js":[function(require,module,exports){var BoundingBox=require("../boundingBox"),TileGrid=require("./tileGrid");var proj4=require("proj4");var WEB_MERCATOR_HALF_WORLD_WIDTH=20037508.342789244;module.exports.overlapWithBoundingBox=function(boundingBox,boundingBox2){var minLongitude=Math.max(boundingBox.minLongitude,boundingBox2.minLongitude);var maxLongitude=Math.min(boundingBox.maxLongitude,boundingBox2.maxLongitude);var minLatitude=Math.max(boundingBox.minLatitude,boundingBox2.minLatitude);var maxLatitude=Math.min(boundingBox.maxLatitude,boundingBox2.maxLatitude);var overlap;if(minLongitude=0){if(minColumn<0){minColumn=0}if(maxColumn>=matrixWidth){maxColumn=matrixWidth-1}}var maxRow=module.exports.getTileRowWithWebMercatorTotalBoundingBox(webMercatorTotalBox,matrixHeight,webMercatorBoundingBox.minLatitude,true);var minRow=module.exports.getTileRowWithWebMercatorTotalBoundingBox(webMercatorTotalBox,matrixHeight,webMercatorBoundingBox.maxLatitude);if(minRow=0){if(minRow<0){minRow=0}if(maxRow>=matrixHeight){maxRow=matrixHeight-1}}var tileGrid=new TileGrid(minColumn,maxColumn,minRow,maxRow);return tileGrid};module.exports.getTileColumnWithWebMercatorTotalBoundingBox=function(webMercatorTotalBox,matrixWidth,longitude,max){var minX=webMercatorTotalBox.minLongitude;var maxX=webMercatorTotalBox.maxLongitude;var tileId;if(longitude=maxX){tileId=matrixWidth}else{var matrixWidthMeters=maxX-minX;var tileWidth=matrixWidthMeters/matrixWidth;var tileIdDouble=(longitude-minX)/tileWidth;tileId=parseInt(tileIdDouble);if(max){if(tileIdDouble===tileId){tileId--}}}return tileId};module.exports.getTileRowWithWebMercatorTotalBoundingBox=function(webMercatorTotalBox,matrixHeight,latitude,max){var minY=webMercatorTotalBox.minLatitude;var maxY=webMercatorTotalBox.maxLatitude;var tileId;if(latitude=maxY){tileId=-1}else{var matrixHeightMeters=maxY-minY;var tileHeight=matrixHeightMeters/matrixHeight;var tileIdDouble=(maxY-latitude)/tileHeight;tileId=parseInt(tileIdDouble);if(max){if(tileIdDouble===tileId){tileId--}}}return tileId};module.exports.getWebMercatorBoundingBox=function(webMercatorTotalBox,tileMatrix,tileColumn,tileRow){var tileMatrixWidth=tileMatrix.matrixWidth;var tileMatrixHeight=tileMatrix.matrixHeight;var tileGrid=new TileGrid(tileColumn,tileColumn,tileRow,tileRow);var matrixMinX=webMercatorTotalBox.minLongitude;var matrixMaxX=webMercatorTotalBox.maxLongitude;var matrixWidth=matrixMaxX-matrixMinX;var tileWidth=matrixWidth/tileMatrixWidth;var minLon=matrixMinX+tileWidth*tileGrid.minX;var maxLon=minLon+tileWidth*(tileGrid.maxX+1-tileGrid.minX);var matrixMinY=webMercatorTotalBox.minLatitude;var matrixMaxY=webMercatorTotalBox.maxLatitude;var matrixHeight=matrixMaxY-matrixMinY;var tileHeight=matrixHeight/tileMatrixHeight;var maxLat=matrixMaxY-tileHeight*tileGrid.minY;var minLat=maxLat-tileHeight*(tileGrid.maxY+1-tileGrid.minY);var boundingBox=new BoundingBox(minLon,maxLon,minLat,maxLat);return boundingBox};module.exports.getWebMercatorBoundingBoxWithWebMercatorTotalBoundingBox=function(webMercatorTotalBox,tileMatrixWidth,tileMatrixHeight,tileGrid){var matrixMinX=webMercatorTotalBox.minLongitude;var matrixMaxX=webMercatorTotalBox.maxLongitude;var matrixWidth=matrixMaxX-matrixMinX;var tileWidth=matrixWidth/tileMatrixWidth;var minLon=matrixMinX+tileWidth*tileGrid.minX;var maxLon=minLon+tileWidth*(tileGrid.maxX+1-tileGrid.minX);var matrixMinY=webMercatorTotalBox.minLatitude;var matrixMaxY=webMercatorTotalBox.maxLatitude;var matrixHeight=matrixMaxY-matrixMinY;var tileHeight=matrixHeight/tileMatrixHeight;var maxLat=matrixMaxY-tileHeight*tileGrid.minY;var minLat=maxLat-tileHeight*(tileGrid.maxY+1-tileGrid.minY);return new BoundingBox(minLon,maxLon,minLat,maxLat)}},{"../boundingBox":"/data/github/geopackage-node/lib/boundingBox.js","./tileGrid":"/data/github/geopackage-node/lib/tiles/tileGrid.js",proj4:"/data/github/geopackage-node/node_modules/proj4/lib/index.js"}],"/data/github/geopackage-node/lib/tiles/tileGrid.js":[function(require,module,exports){var TileGrid=function(minX,maxX,minY,maxY){this.minX=minX;this.maxX=maxX;this.minY=minY;this.maxY=maxY};TileGrid.prototype.count=function(){return(this.maxX+1-this.minX)*(this.maxY+1-this.minY)};TileGrid.prototype.equals=function(tileGrid){if(!tileGrid)return false;return this.minX===tileGrid.minX&&this.maxX===tileGrid.maxX&&this.minY===tileGrid.minY&&this.maxY===tileGrid.maxY};module.exports=TileGrid},{}],"/data/github/geopackage-node/lib/tiles/user/tileColumn.js":[function(require,module,exports){var UserColumn=require("../../user/userColumn"),DataTypes=require("../../db/dataTypes"),TileTable=require("./tileTable");var util=require("util");var TileColumn=function(index,name,dataType,max,notNull,defaultValue,primaryKey){UserColumn.call(this,index,name,dataType,max,notNull,defaultValue,primaryKey);if(dataType===DataTypes.GPKG_DT_GEOMETRY){throw new Error("Data Type is required to create column: "+name)}};util.inherits(TileColumn,UserColumn);TileColumn.createIdColumn=function(index){return new TileColumn(index,TileTable.COLUMN_ID,DataTypes.GPKG_DT_INTEGER,null,false,null,true)};TileColumn.createZoomLevelColumn=function(index){return new TileColumn(index,TileTable.COLUMN_ZOOM_LEVEL,DataTypes.GPKG_DT_INTEGER,null,true,null,false)};TileColumn.createTileColumnColumn=function(index){return new TileColumn(index,TileTable.COLUMN_TILE_COLUMN,DataTypes.GPKG_DT_INTEGER,null,true,null,false)};TileColumn.createTileRowColumn=function(index){return new TileColumn(index,TileTable.COLUMN_TILE_ROW,DataTypes.GPKG_DT_INTEGER,null,true,null,false)};TileColumn.createTileDataColumn=function(index){return new TileColumn(index,TileTable.COLUMN_TILE_DATA,DataTypes.GPKG_DT_BLOB,null,true,null,false)};module.exports=TileColumn},{"../../db/dataTypes":"/data/github/geopackage-node/lib/db/dataTypes.js","../../user/userColumn":"/data/github/geopackage-node/lib/user/userColumn.js","./tileTable":"/data/github/geopackage-node/lib/tiles/user/tileTable.js",util:"/data/github/geopackage-node/node_modules/browserify/node_modules/util/util.js"}],"/data/github/geopackage-node/lib/tiles/user/tileDao.js":[function(require,module,exports){var UserDao=require("../../user/UserDao"),TileGrid=require("../tileGrid"),TileRow=require("./tileRow"),TileMatrixSetDao=require("../matrixset").TileMatrixSetDao,BoundingBoxUtils=require("../tileBoundingBoxUtils"),ColumnValues=require("../../dao/columnValues"),TileTable=require("./tileTable"),TileDaoUtils=require("./tileDaoUtils");var util=require("util"),proj4=require("proj4"),async=require("async");var TileDao=function(connection,table,tileMatrixSet,tileMatrices,callback){UserDao.call(this,connection,table);this.connection=connection;this.tileMatrixSet=tileMatrixSet;this.tileMatrices=tileMatrices;this.zoomLevelToTileMatrix=[];this.widths=[];this.heights=[];if(tileMatrices.length===0){this.minZoom=0;this.maxZoom=0}else{this.minZoom=this.tileMatrices[0].zoomLevel;this.maxZoom=this.tileMatrices[this.tileMatrices.length-1].zoomLevel}for(var i=this.tileMatrices.length-1;i>=0;i--){var tileMatrix=this.tileMatrices[i];this.zoomLevelToTileMatrix[tileMatrix.zoomLevel]=tileMatrix}this.initialize(callback)};util.inherits(TileDao,UserDao);TileDao.prototype.initialize=function(callback){var tileMatrixSetDao=this.getTileMatrixSetDao();tileMatrixSetDao.getSrs(this.tileMatrixSet,function(err,srs){if(srs.definition&&srs.definition!=="undefined"){this.projection=proj4(srs.definition)}else{this.projection=proj4(srs.organization+":"+srs.organizationCoordsysId)}for(var i=this.tileMatrices.length-1;i>=0;i--){var tileMatrix=this.tileMatrices[i];var width=tileMatrix.pixelXSize*parseInt(tileMatrix.tileWidth);var height=tileMatrix.pixelYSize*parseInt(tileMatrix.tileHeight);if(this.projection.to_meter){width=this.projection.to_meter*tileMatrix.pixelXSize*parseInt(tileMatrix.tileWidth);height=this.projection.to_meter*tileMatrix.pixelYSize*parseInt(tileMatrix.tileHeight)}this.widths.push(width);this.heights.push(height)}callback(null,this)}.bind(this))};TileDao.prototype.createObject=function(){throw new Error("not implemented")};TileDao.prototype.getBoundingBoxWithZoomLevel=function(zoomLevel,callback){var boundingBox;var tileMatrix=this.getTileMatrixWithZoomLevel(zoomLevel);if(tileMatrix){this.queryForTileGridWithZoomLevel(zoomLevel,function(err,tileGrid){if(tileGrid){var matrixSetBoundingBox=this.getBoundingBox();boundingBox=BoundingBoxUtils.getWebMercatorBoundingBoxWithWebMercatorTotalBoundingBox(matrixSetBoundingBox,tileMatrix.matrixWidth,tileMatrix.matrixHeight,tileGrid)}callback(err,boundingBox)}.bind(this))}else{callback(null,boundingBox)}};TileDao.prototype.getBoundingBox=function(){return this.tileMatrixSet.getBoundingBox()};TileDao.prototype.queryForTileGridWithZoomLevel=function(zoomLevel,callback){var where=this.buildWhereWithFieldAndValue(TileTable.COLUMN_ZOOM_LEVEL,zoomLevel);var whereArgs=this.buildWhereArgsWithValue(zoomLevel);async.series({minX:function(callback){this.minOfColumn(TileTable.COLUMN_TILE_COLUMN,where,whereArgs,callback)}.bind(this),maxX:function(callback){this.maxOfColumn(TileTable.COLUMN_TILE_COLUMN,where,whereArgs,callback)}.bind(this),minY:function(callback){this.minOfColumn(TileTable.COLUMN_TILE_ROW,where,whereArgs,callback)}.bind(this),maxY:function(callback){this.maxOfColumn(TileTable.COLUMN_TILE_ROW,where,whereArgs,callback)}.bind(this)},function(err,results){if(err)return callback(err);var tileGrid;if(results.minX!=null&&results.minY!=null&&results.maxX!=null&&results.maxY!=null){tileGrid=new TileGrid(results.minX,results.maxX,results.minY,results.maxY)}callback(err,tileGrid)})};TileDao.prototype.getTileGridWithZoomLevel=function(zoomLevel){var tileGrid;var tileMatrix=this.getTileMatrixWithZoomLevel(zoomLevel);if(tileMatrix){tileGrid=new TileGrid(0,parseInt(tileMatrix.matrixWidth)-1,0,parseInt(tileMatrix.matrixHeight)-1)}return tileGrid};TileDao.prototype.getTileTable=function(){return this.table};TileDao.prototype.getTileRow=function(result){return this.getRow(result)};TileDao.prototype.newRowWithColumnTypes=function(columnTypes,values){return new TileRow(this.getTileTable(),columnTypes,values)};TileDao.prototype.newRow=function(){return new TileRow(this.getTileTable())};TileDao.prototype.adjustTileMatrixLengths=function(){TileDaoUtils.adjustTileMatrixLengths(this.tileMatrixSet,this.tileMatrices)};TileDao.prototype.getTileMatrixWithZoomLevel=function(zoomLevel){return this.zoomLevelToTileMatrix[zoomLevel]};TileDao.prototype.queryForTile=function(column,row,zoomLevel,callback){var fieldValues=new ColumnValues;fieldValues.addColumn(TileTable.COLUMN_TILE_COLUMN,column);fieldValues.addColumn(TileTable.COLUMN_TILE_ROW,row);fieldValues.addColumn(TileTable.COLUMN_ZOOM_LEVEL,zoomLevel);this.queryForFieldValues(fieldValues,function(err,result){var tileRow=this.getTileRow(result);callback(err,tileRow)}.bind(this))};TileDao.prototype.queryForTilesWithZoomLevel=function(zoomLevel,tileCallback,doneCallback){this.queryForEqWithFieldAndValue(TileTable.COLUMN_ZOOM_LEVEL,zoomLevel,function(err,result){if(!tileCallback)return;if(err||!result)return tileCallback(err);tileCallback(err,this.getTileRow(result))}.bind(this),doneCallback)};TileDao.prototype.queryForTilesDescending=function(zoomLevel,tileCallback,doneCallback){this.queryForEqWithField(TileTable.COLUMN_ZOOM_LEVEL,zoomLevel,undefined,undefined,TileTable.COLUMN_TILE_COLUMN+" DESC, "+TileTable.COLUMN_TILE_ROW+", DESC",function(err,result){if(!tileCallback)return;if(err||!result)return tileCallback(err);tileCallback(err,this.getTileRow(result))}.bind(this),doneCallback)};TileDao.prototype.queryForTilesInColumn=function(column,zoomLevel,tileCallback,doneCallback){var fieldValues=new ColumnValues;fieldValues.addColumn(TileTable.COLUMN_TILE_COLUMN,column);fieldValues.addColumn(TileTable.COLUMN_ZOOM_LEVEL,zoomLevel);this.queryForFieldValues(fieldValues,function(err,result){if(!tileCallback)return;if(err||!result)return tileCallback(err);tileCallback(err,this.getTileRow(result))}.bind(this),doneCallback)};TileDao.prototype.queryForTilesInRow=function(row,zoomLevel,tileCallback,doneCallback){var fieldValues=new ColumnValues;fieldValues.addColumn(TileTable.COLUMN_TILE_ROW,row);fieldValues.addColumn(TileTable.COLUMN_ZOOM_LEVEL,zoomLevel);this.queryForFieldValues(fieldValues,function(err,result){if(!tileCallback)return;if(err||!result)return tileCallback(err);tileCallback(err,this.getTileRow(result))}.bind(this),doneCallback)};TileDao.prototype.getZoomLevelWithLength=function(length){return TileDaoUtils.getZoomLevel(this.widths,this.heights,this.tileMatrices,length)};TileDao.prototype.queryByTileGrid=function(tileGrid,zoomLevel,tileCallback,doneCallback){if(!tileGrid)return doneCallback();var where="";where+=this.buildWhereWithFieldAndValue(TileTable.COLUMN_ZOOM_LEVEL,zoomLevel);where+=" and ";where+=this.buildWhereWithFieldAndValueAndOperation(TileTable.COLUMN_TILE_COLUMN,tileGrid.minX,">=");where+=" and ";where+=this.buildWhereWithFieldAndValueAndOperation(TileTable.COLUMN_TILE_COLUMN,tileGrid.maxX,"<=");where+=" and ";where+=this.buildWhereWithFieldAndValueAndOperation(TileTable.COLUMN_TILE_ROW,tileGrid.minY,">=");where+=" and ";where+=this.buildWhereWithFieldAndValueAndOperation(TileTable.COLUMN_TILE_ROW,tileGrid.maxY,"<=");var whereArgs=this.buildWhereArgsWithValueArray([zoomLevel,tileGrid.minX,tileGrid.maxX,tileGrid.minY,tileGrid.maxY]);this.queryWhereWithArgsDistinct(where,whereArgs,function(err,result){if(!tileCallback)return;if(err||!result)return tileCallback(err);tileCallback(err,this.getTileRow(result))}.bind(this),doneCallback)};TileDao.prototype.getTileMatrixSetDao=function(){return new TileMatrixSetDao(this.connection)};module.exports=TileDao},{"../../dao/columnValues":"/data/github/geopackage-node/lib/dao/columnValues.js","../../user/UserDao":"/data/github/geopackage-node/lib/user/UserDao.js","../matrixset":"/data/github/geopackage-node/lib/tiles/matrixset/index.js","../tileBoundingBoxUtils":"/data/github/geopackage-node/lib/tiles/tileBoundingBoxUtils.js","../tileGrid":"/data/github/geopackage-node/lib/tiles/tileGrid.js","./tileDaoUtils":"/data/github/geopackage-node/lib/tiles/user/tileDaoUtils.js","./tileRow":"/data/github/geopackage-node/lib/tiles/user/tileRow.js","./tileTable":"/data/github/geopackage-node/lib/tiles/user/tileTable.js",async:"/data/github/geopackage-node/node_modules/async/lib/async.js",proj4:"/data/github/geopackage-node/node_modules/proj4/lib/index.js",util:"/data/github/geopackage-node/node_modules/browserify/node_modules/util/util.js"}],"/data/github/geopackage-node/lib/tiles/user/tileDaoUtils.js":[function(require,module,exports){module.exports.adjustTileMatrixLengths=function(tileMatrixSet,tileMatrices){var tileMatrixWidth=tileMatrixSet.maxX-tileMatrixSet.minX;var tileMatrixHeight=tileMatrixSet.maxY-tileMatrixSet.minY;for(var i=0;iparseInt(tileMatrix.matrixWidth)){tileMatrix.matrixWidth=parseInt(tempMatrixWidth)}if(tempMatrixHeight>parseInt(tileMatrix.matrixHeight)){tileMatrix.matrixHeight=parseInt(tempMatrixHeight)}}};module.exports.getZoomLevel=function(widths,heights,tileMatrices,length){var zoomLevel;var widthIndex=widths.length;var heightIndex=heights.length;for(var i=0;ilength){widthIndex=i;break}}for(var i=0;ilength){heightIndex=i;break}}if(widthIndex===0){if(length=widths[widthIndex-1]/.51){widthIndex=-1}else{widthIndex=widthIndex-1}}else if(length-widths[widthIndex-1]=heights[heightIndex-1]/.51){heightIndex=-1}else{heightIndex=heightIndex-1}}else if(length-heights[heightIndex-1]=0&&heightIndex>=0){var index=widthIndex=0){var tileMatrix=tileMatrices[tileMatrices.length-index-1];zoomLevel=tileMatrix.zoomLevel}}return zoomLevel}},{}],"/data/github/geopackage-node/lib/tiles/user/tileRow.js":[function(require,module,exports){var UserRow=require("../../user/UserRow");var util=require("util");var TileRow=function(tileTable,columnTypes,values){UserRow.call(this,tileTable,columnTypes,values);this.tileTable=tileTable};util.inherits(TileRow,UserRow);TileRow.prototype.toObjectValue=function(value){return value};TileRow.prototype.toDatabaseValue=function(value){return value};TileRow.prototype.getZoomLevelColumnIndex=function(){return this.tileTable.zoomLevelIndex};TileRow.prototype.getZoomLevelColumn=function(){return this.tileTable.getZoomLevelColumn()};TileRow.prototype.getZoomLevel=function(){return this.getValueWithColumnName(this.getZoomLevelColumn().name)};TileRow.prototype.setZoomLevel=function(zoomLevel){this.setValueWithIndex(this.getZoomLevelColumnIndex(),zoomLevel)};TileRow.prototype.getTileColumnColumnIndex=function(){return this.tileTable.tileColumnIndex};TileRow.prototype.getTileColumnColumn=function(){return this.tileTable.getTileColumnColumn()};TileRow.prototype.getTileColumn=function(){return this.getValueWithColumnName(this.getTileColumnColumn().name)};TileRow.prototype.setTileColumn=function(tileColumn){this.setValueWithColumnName(this.getTileColumnColumn().name,tileColumn)};TileRow.prototype.getTileRowColumnIndex=function(){return this.tileTable.tileRowIndex};TileRow.prototype.getTileRowColumn=function(){return this.tileTable.getTileRowColumn()};TileRow.prototype.getTileRow=function(){return this.getValueWithColumnName(this.getTileRowColumn().name)};TileRow.prototype.setTileRow=function(tileRow){this.setValueWithColumnName(this.getTileRowColumn().name,tileRow)};TileRow.prototype.getTileDataColumnIndex=function(){return this.tileTable.tileDataIndex};TileRow.prototype.getTileDataColumn=function(){return this.tileTable.getTileDataColumn()};TileRow.prototype.getTileData=function(){return this.getValueWithColumnName(this.getTileDataColumn().name)};TileRow.prototype.setTileData=function(tileData){this.setValueWithColumnName(this.getTileDataColumn().name,tileData)};TileRow.prototype.getTileDataImage=function(){};module.exports=TileRow},{"../../user/UserRow":"/data/github/geopackage-node/lib/user/UserRow.js",util:"/data/github/geopackage-node/node_modules/browserify/node_modules/util/util.js"}],"/data/github/geopackage-node/lib/tiles/user/tileTable.js":[function(require,module,exports){var UserTable=require("../../user/userTable");var util=require("util");var TileTable=function(tableName,columns){UserTable.call(this,tableName,columns);var zoomLevel;var tileColumn;var tileRow;var tileData;for(var i=0;i-1){var maxString=type.substring(maxStart+1,type.length-1);if(maxString!==""){max=parseInt(maxString);type=type.substring(0,maxStart)}}}var defaultValueIndex=result[GPKG_UTR_DFLT_VALUE];try{var column=this.createColumnWithResults(result,index,name,type,max,notNull,defaultValueIndex,primarykey);columnList.push(column)}catch(e){console.err(e);return callback(e)}}if(columnList.length===0){return callback(new Error("Table does not exist: "+this.tableName))}var table=this.createTableWithNameAndColumns(this.tableName,columnList);callback(null,table)}.bind(this))};UserTableReader.prototype.createColumnWithResults=function(result,index,name,type,max,notNull,defaultValueIndex,primaryKey){var dataType=DataTypes.fromName(type);var defaultValue=undefined;if(defaultValueIndex){}return new UserColumn(index,name,dataType,max,notNull,defaultValue,primaryKey)};UserTableReader.prototype.createTableWithNameAndColumns=function(tableName,columns){return new UserTable(tableName,columns)};module.exports=UserTableReader},{"../db/dataTypes":"/data/github/geopackage-node/lib/db/dataTypes.js","./userColumn":"/data/github/geopackage-node/lib/user/userColumn.js","./userTable":"/data/github/geopackage-node/lib/user/userTable.js"}],"/data/github/geopackage-node/lib/user/userColumn.js":[function(require,module,exports){var DataTypes=require("../db/dataTypes");function UserColumn(index,name,dataType,max,notNull,defaultValue,primaryKey){this.index=index;this.name=name;this.dataType=dataType;this.max=max;this.notNull=notNull,this.defaultValue=defaultValue;this.primaryKey=primaryKey;this.validateMax()}UserColumn.prototype.getTypeName=function(){var type=undefined;if(this.dataType!==DataTypes.GPKG_DT_GEOMETRY){type=DataTypes.name(this.dataType)}return type};UserColumn.prototype.validateMax=function(){if(this.max&&this.dataType!=="TEXT"&&this.dataType!=="BLOB"){throw new Error("Column max is only supported for TEXT and BLOB columns. column: "+self.name+", max: "+self.max+", type: "+self.dataType)}};module.exports=UserColumn},{"../db/dataTypes":"/data/github/geopackage-node/lib/db/dataTypes.js"}],"/data/github/geopackage-node/lib/user/userRow.js":[function(require,module,exports){arguments[4]["/data/github/geopackage-node/lib/user/UserRow.js"][0].apply(exports,arguments)},{}],"/data/github/geopackage-node/lib/user/userTable.js":[function(require,module,exports){var UserTable=function(tableName,columns){this.tableName=tableName;columns.sort(function(a,b){return a.index-b.index});for(var i=0;i=0&&arr.length%1===0}function _arrayEach(arr,iterator){var index=-1,length=arr.length;while(++index3){eachfn(arr,limit,iteratee,done)}else{cb=iterator;iterator=limit;eachfn(arr,iteratee,done)}}}async.any=async.some=_createTester(async.eachOf,toBool,identity);async.someLimit=_createTester(async.eachOfLimit,toBool,identity);async.all=async.every=_createTester(async.eachOf,notId,notId);async.everyLimit=_createTester(async.eachOfLimit,notId,notId);function _findGetResult(v,x){return x}async.detect=_createTester(async.eachOf,identity,_findGetResult);async.detectSeries=_createTester(async.eachOfSeries,identity,_findGetResult);async.detectLimit=_createTester(async.eachOfLimit,identity,_findGetResult);async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{callback(null,_map(results.sort(comparator),function(x){return x.value}))}});function comparator(left,right){var a=left.criteria,b=right.criteria;return ab?1:0}};async.auto=function(tasks,concurrency,callback){if(typeof arguments[1]==="function"){callback=concurrency;concurrency=null}callback=_once(callback||noop);var keys=_keys(tasks);var remainingTasks=keys.length;if(!remainingTasks){return callback(null)}if(!concurrency){concurrency=remainingTasks}var results={};var runningTasks=0;var hasError=false;var listeners=[];function addListener(fn){listeners.unshift(fn)}function removeListener(fn){var idx=_indexOf(listeners,fn);if(idx>=0)listeners.splice(idx,1)}function taskComplete(){remainingTasks--;_arrayEach(listeners.slice(0),function(fn){fn()})}addListener(function(){if(!remainingTasks){callback(null,results)}});_arrayEach(keys,function(k){if(hasError)return;var task=_isArray(tasks[k])?tasks[k]:[tasks[k]];var taskCallback=_restParam(function(err,args){runningTasks--;if(args.length<=1){args=args[0]}if(err){var safeResults={};_forEachOf(results,function(val,rkey){safeResults[rkey]=val});safeResults[k]=args;hasError=true;callback(err,safeResults)}else{results[k]=args;async.setImmediate(taskComplete)}});var requires=task.slice(0,task.length-1);var len=requires.length;var dep;while(len--){if(!(dep=tasks[requires[len]])){throw new Error("Has nonexistent dependency in "+requires.join(", "))}if(_isArray(dep)&&_indexOf(dep,k)>=0){throw new Error("Has cyclic dependencies")}}function ready(){return runningTasks3){throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)")}else if(length<=2&&typeof times==="function"){callback=task;task=times}if(typeof times!=="function"){parseTimes(opts,times)}opts.callback=callback;opts.task=task;function wrappedTask(wrappedCallback,wrappedResults){function retryAttempt(task,finalAttempt){return function(seriesCallback){task(function(err,result){seriesCallback(!err||finalAttempt,{err:err,result:result})},wrappedResults)}}function retryInterval(interval){return function(seriesCallback){setTimeout(function(){seriesCallback(null)},interval)}}while(opts.times){var finalAttempt=!(opts.times-=1);attempts.push(retryAttempt(opts.task,finalAttempt));if(!finalAttempt&&opts.interval>0){attempts.push(retryInterval(opts.interval))}}async.series(attempts,function(done,data){data=data[data.length-1];(wrappedCallback||opts.callback)(data.err,data.result)})}return opts.callback?wrappedTask():wrappedTask};async.waterfall=function(tasks,callback){callback=_once(callback||noop);if(!_isArray(tasks)){var err=new Error("First argument to waterfall must be an array of functions");return callback(err)}if(!tasks.length){return callback()}function wrapIterator(iterator){return _restParam(function(err,args){if(err){callback.apply(null,[err].concat(args))}else{var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}ensureAsync(iterator).apply(null,args)}})}wrapIterator(async.iterator(tasks))()};function _parallel(eachfn,tasks,callback){callback=callback||noop;var results=_isArrayLike(tasks)?[]:{};eachfn(tasks,function(task,key,callback){task(_restParam(function(err,args){if(args.length<=1){args=args[0]}results[key]=args;callback(err)}))},function(err){callback(err,results)})}async.parallel=function(tasks,callback){_parallel(async.eachOf,tasks,callback)};async.parallelLimit=function(tasks,limit,callback){_parallel(_eachOfLimit(limit),tasks,callback)};async.series=function(tasks,callback){_parallel(async.eachOfSeries,tasks,callback)};async.iterator=function(tasks){function makeCallback(index){function fn(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()}fn.next=function(){return index>>1);if(compare(item,sequence[mid])>=0){beg=mid}else{end=mid-1}}return beg}function _insert(q,data,priority,callback){if(callback!=null&&typeof callback!=="function"){throw new Error("task callback must be a function")}q.started=true;if(!_isArray(data)){data=[data]}if(data.length===0){return async.setImmediate(function(){q.drain()})}_arrayEach(data,function(task){var item={data:task,priority:priority,callback:typeof callback==="function"?callback:noop};q.tasks.splice(_binarySearch(q.tasks,item,_compareTasks)+1,0,item);if(q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var q=async.queue(worker,concurrency);q.push=function(data,priority,callback){_insert(q,data,priority,callback)};delete q.unshift;return q};async.cargo=function(worker,payload){return _queue(worker,1,payload)};function _console_fn(name){return _restParam(function(fn,args){fn.apply(null,args.concat([_restParam(function(err,args){if(typeof console==="object"){if(err){if(console.error){console.error(err)}}else if(console[name]){_arrayEach(args,function(x){console[name](x)})}}})]))})}async.log=_console_fn("log");async.dir=_console_fn("dir");async.memoize=function(fn,hasher){var memo={};var queues={};var has=Object.prototype.hasOwnProperty;hasher=hasher||identity;var memoized=_restParam(function memoized(args){var callback=args.pop();var key=hasher.apply(null,args);if(has.call(memo,key)){async.setImmediate(function(){callback.apply(null,memo[key])})}else if(has.call(queues,key)){ +queues[key].push(callback)}else{queues[key]=[callback];fn.apply(null,args.concat([_restParam(function(args){memo[key]=args;var q=queues[key];delete queues[key];for(var i=0,l=q.length;i1)return new Buffer(arg,arguments[1]);return new Buffer(arg)}if(!Buffer.TYPED_ARRAY_SUPPORT){this.length=0;this.parent=undefined}if(typeof arg==="number"){return fromNumber(this,arg)}if(typeof arg==="string"){return fromString(this,arg,arguments.length>1?arguments[1]:"utf8")}return fromObject(this,arg)}Buffer._augment=function(arr){arr.__proto__=Buffer.prototype;return arr};function fromNumber(that,length){that=allocate(that,length<0?0:checked(length)|0);if(!Buffer.TYPED_ARRAY_SUPPORT){for(var i=0;i>>1;if(fromPool)that.parent=rootParent;return that}function checked(length){if(length>=kMaxLength()){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+kMaxLength().toString(16)+" bytes")}return length|0}function SlowBuffer(subject,encoding){if(!(this instanceof SlowBuffer))return new SlowBuffer(subject,encoding);var buf=new Buffer(subject,encoding);delete buf.parent;return buf}Buffer.isBuffer=function isBuffer(b){return!!(b!=null&&b._isBuffer)};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;start=start|0;end=end===undefined||end===Infinity?this.length:end|0;if(!encoding)encoding="utf8";if(start<0)start=0;if(end>this.length)end=this.length;if(end<=start)return"";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"binary":return binarySlice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype._isBuffer=true;Buffer.prototype.toString=function toString(){var length=this.length|0;if(length===0)return"";if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments)};Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return""};Buffer.prototype.compare=function compare(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");return Buffer.compare(this,b)};Buffer.prototype.indexOf=function indexOf(val,byteOffset){if(byteOffset>2147483647)byteOffset=2147483647;else if(byteOffset<-2147483648)byteOffset=-2147483648;byteOffset>>=0;if(this.length===0)return-1;if(byteOffset>=this.length)return-1;if(byteOffset<0)byteOffset=Math.max(this.length+byteOffset,0);if(typeof val==="string"){if(val.length===0)return-1;return String.prototype.indexOf.call(this,val,byteOffset)}if(Buffer.isBuffer(val)){return arrayIndexOf(this,val,byteOffset)}if(typeof val==="number"){if(Buffer.TYPED_ARRAY_SUPPORT&&Uint8Array.prototype.indexOf==="function"){return Uint8Array.prototype.indexOf.call(this,val,byteOffset)}return arrayIndexOf(this,[val],byteOffset)}function arrayIndexOf(arr,val,byteOffset){var foundIndex=-1;for(var i=0;byteOffset+iremaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new Error("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;iremaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"binary":return binaryWrite(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}var res="";var i=0;while(ilen)end=len;var out="";for(var i=start;ilen){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(endlength)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError("buffer must be a Buffer instance");if(value>max||valuebuf.length)throw new RangeError("index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength),0);var mul=1;var i=0;this[offset]=value&255;while(++i=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,255,0);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);this[offset]=value&255;return offset+1};function objectWriteUInt16(buf,value,offset,littleEndian){if(value<0)value=65535+value+1;for(var i=0,j=Math.min(buf.length-offset,2);i>>(littleEndian?i:1-i)*8}}Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};function objectWriteUInt32(buf,value,offset,littleEndian){if(value<0)value=4294967295+value+1;for(var i=0,j=Math.min(buf.length-offset,4);i>>(littleEndian?i:3-i)*8&255}}Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=value<0?1:0;this[offset]=value&255;while(++i>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=value<0?1:0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("index out of range");if(offset<0)throw new RangeError("index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e38,-3.4028234663852886e38)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157e308,-1.7976931348623157e308)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart=0;i--){target[i+targetStart]=this[i+start]}}else if(len<1e3||!Buffer.TYPED_ARRAY_SUPPORT){for(i=0;i=this.length)throw new RangeError("start out of bounds");if(end<0||end>this.length)throw new RangeError("end out of bounds");var i;if(typeof value==="number"){for(i=start;i55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"base64-js":"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/node_modules/base64-js/lib/b64.js",ieee754:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/node_modules/ieee754/index.js",isarray:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/node_modules/isarray/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/node_modules/base64-js/lib/b64.js":[function(require,module,exports){"use strict";exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;function init(){var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i0){throw new Error("Invalid string. Length must be a multiple of 4")}placeHolders=b64[len-2]==="="?2:b64[len-1]==="="?1:0;arr=new Arr(len*3/4-placeHolders);l=placeHolders>0?len-4:len; +var L=0;for(i=0,j=0;i>16&255;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}if(placeHolders===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[L++]=tmp&255}else if(placeHolders===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;ilen2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];output+=lookup[tmp>>2];output+=lookup[tmp<<4&63];output+="=="}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];output+=lookup[tmp>>10];output+=lookup[tmp>>4&63];output+=lookup[tmp<<2&63];output+="="}parts.push(output);return parts.join("")}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/node_modules/ieee754/index.js":[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/node_modules/isarray/index.js":[function(require,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=="[object Array]"}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/index.js":[function(require,module,exports){"use strict";exports.randomBytes=exports.rng=exports.pseudoRandomBytes=exports.prng=require("randombytes");exports.createHash=exports.Hash=require("create-hash");exports.createHmac=exports.Hmac=require("create-hmac");var hashes=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(Object.keys(require("browserify-sign/algos")));exports.getHashes=function(){return hashes};var p=require("pbkdf2");exports.pbkdf2=p.pbkdf2;exports.pbkdf2Sync=p.pbkdf2Sync;var aes=require("browserify-cipher");["Cipher","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers"].forEach(function(key){exports[key]=aes[key]});var dh=require("diffie-hellman");["DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman"].forEach(function(key){exports[key]=dh[key]});var sign=require("browserify-sign");["createSign","Sign","createVerify","Verify"].forEach(function(key){exports[key]=sign[key]});exports.createECDH=require("create-ecdh");var publicEncrypt=require("public-encrypt");["publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt"].forEach(function(key){exports[key]=publicEncrypt[key]});["createCredentials"].forEach(function(name){exports[name]=function(){throw new Error(["sorry, "+name+" is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))}})},{"browserify-cipher":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/browser.js","browserify-sign":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/browser.js","browserify-sign/algos":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/algos.js","create-ecdh":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-ecdh/browser.js","create-hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/browser.js","create-hmac":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hmac/browser.js","diffie-hellman":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/diffie-hellman/browser.js",pbkdf2:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/pbkdf2/browser.js","public-encrypt":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/public-encrypt/browser.js",randombytes:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/randombytes/browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/browser.js":[function(require,module,exports){var ebtk=require("evp_bytestokey");var aes=require("browserify-aes/browser");var DES=require("browserify-des");var desModes=require("browserify-des/modes");var aesModes=require("browserify-aes/modes");function createCipher(suite,password){var keyLen,ivLen;suite=suite.toLowerCase();if(aesModes[suite]){keyLen=aesModes[suite].key;ivLen=aesModes[suite].iv}else if(desModes[suite]){keyLen=desModes[suite].key*8;ivLen=desModes[suite].iv}else{throw new TypeError("invalid suite type")}var keys=ebtk(password,false,keyLen,ivLen);return createCipheriv(suite,keys.key,keys.iv)}function createDecipher(suite,password){var keyLen,ivLen;suite=suite.toLowerCase();if(aesModes[suite]){keyLen=aesModes[suite].key;ivLen=aesModes[suite].iv}else if(desModes[suite]){keyLen=desModes[suite].key*8;ivLen=desModes[suite].iv}else{throw new TypeError("invalid suite type")}var keys=ebtk(password,false,keyLen,ivLen);return createDecipheriv(suite,keys.key,keys.iv)}function createCipheriv(suite,key,iv){suite=suite.toLowerCase();if(aesModes[suite]){return aes.createCipheriv(suite,key,iv)}else if(desModes[suite]){return new DES({key:key,iv:iv,mode:suite})}else{throw new TypeError("invalid suite type")}}function createDecipheriv(suite,key,iv){suite=suite.toLowerCase();if(aesModes[suite]){return aes.createDecipheriv(suite,key,iv)}else if(desModes[suite]){return new DES({key:key,iv:iv,mode:suite,decrypt:true})}else{throw new TypeError("invalid suite type")}}exports.createCipher=exports.Cipher=createCipher;exports.createCipheriv=exports.Cipheriv=createCipheriv;exports.createDecipher=exports.Decipher=createDecipher;exports.createDecipheriv=exports.Decipheriv=createDecipheriv;function getCiphers(){return Object.keys(desModes).concat(aes.getCiphers())}exports.listCiphers=exports.getCiphers=getCiphers},{"browserify-aes/browser":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/browser.js","browserify-aes/modes":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/modes.js","browserify-des":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/index.js","browserify-des/modes":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/modes.js",evp_bytestokey:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/evp_bytestokey/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/aes.js":[function(require,module,exports){(function(Buffer){var uint_max=Math.pow(2,32);function fixup_uint32(x){var ret,x_pos;ret=x>uint_max||x<0?(x_pos=Math.abs(x)%uint_max,x<0?uint_max-x_pos:x_pos):x;return ret}function scrub_vec(v){for(var i=0;i>>8^sx&255^99;this.SBOX[x]=sx;this.INV_SBOX[sx]=x;x2=d[x];x4=d[x2];x8=d[x4];t=d[sx]*257^sx*16843008;this.SUB_MIX[0][x]=t<<24|t>>>8;this.SUB_MIX[1][x]=t<<16|t>>>16;this.SUB_MIX[2][x]=t<<8|t>>>24;this.SUB_MIX[3][x]=t;t=x8*16843009^x4*65537^x2*257^x*16843008;this.INV_SUB_MIX[0][sx]=t<<24|t>>>8;this.INV_SUB_MIX[1][sx]=t<<16|t>>>16;this.INV_SUB_MIX[2][sx]=t<<8|t>>>24;this.INV_SUB_MIX[3][sx]=t;if(x===0){x=xi=1}else{x=x2^d[d[d[x8^x2]]];xi^=d[d[xi]]}}return true};var G=new Global;AES.blockSize=4*4;AES.prototype.blockSize=AES.blockSize;AES.keySize=256/8;AES.prototype.keySize=AES.keySize;function bufferToArray(buf){var len=buf.length/4;var out=new Array(len);var i=-1;while(++i>>24,t=G.SBOX[t>>>24]<<24|G.SBOX[t>>>16&255]<<16|G.SBOX[t>>>8&255]<<8|G.SBOX[t&255],t^=G.RCON[ksRow/keySize|0]<<24):keySize>6&&ksRow%keySize===4?t=G.SBOX[t>>>24]<<24|G.SBOX[t>>>16&255]<<16|G.SBOX[t>>>8&255]<<8|G.SBOX[t&255]:void 0,this._keySchedule[ksRow-keySize]^t)}this._invKeySchedule=[];for(invKsRow=0;invKsRow>>24]]^G.INV_SUB_MIX[1][G.SBOX[t>>>16&255]]^G.INV_SUB_MIX[2][G.SBOX[t>>>8&255]]^G.INV_SUB_MIX[3][G.SBOX[t&255]]}return true};AES.prototype.encryptBlock=function(M){M=bufferToArray(new Buffer(M));var out=this._doCryptBlock(M,this._keySchedule,G.SUB_MIX,G.SBOX);var buf=new Buffer(16);buf.writeUInt32BE(out[0],0);buf.writeUInt32BE(out[1],4);buf.writeUInt32BE(out[2],8);buf.writeUInt32BE(out[3],12);return buf};AES.prototype.decryptBlock=function(M){M=bufferToArray(new Buffer(M));var temp=[M[3],M[1]];M[1]=temp[0];M[3]=temp[1];var out=this._doCryptBlock(M,this._invKeySchedule,G.INV_SUB_MIX,G.INV_SBOX);var buf=new Buffer(16);buf.writeUInt32BE(out[0],0);buf.writeUInt32BE(out[3],4);buf.writeUInt32BE(out[2],8);buf.writeUInt32BE(out[1],12);return buf};AES.prototype.scrub=function(){scrub_vec(this._keySchedule);scrub_vec(this._invKeySchedule);scrub_vec(this._key)};AES.prototype._doCryptBlock=function(M,keySchedule,SUB_MIX,SBOX){var ksRow,s0,s1,s2,s3,t0,t1,t2,t3;s0=M[0]^keySchedule[0];s1=M[1]^keySchedule[1];s2=M[2]^keySchedule[2];s3=M[3]^keySchedule[3];ksRow=4;for(var round=1;round>>24]^SUB_MIX[1][s1>>>16&255]^SUB_MIX[2][s2>>>8&255]^SUB_MIX[3][s3&255]^keySchedule[ksRow++];t1=SUB_MIX[0][s1>>>24]^SUB_MIX[1][s2>>>16&255]^SUB_MIX[2][s3>>>8&255]^SUB_MIX[3][s0&255]^keySchedule[ksRow++];t2=SUB_MIX[0][s2>>>24]^SUB_MIX[1][s3>>>16&255]^SUB_MIX[2][s0>>>8&255]^SUB_MIX[3][s1&255]^keySchedule[ksRow++];t3=SUB_MIX[0][s3>>>24]^SUB_MIX[1][s0>>>16&255]^SUB_MIX[2][s1>>>8&255]^SUB_MIX[3][s2&255]^keySchedule[ksRow++];s0=t0;s1=t1;s2=t2;s3=t3}t0=(SBOX[s0>>>24]<<24|SBOX[s1>>>16&255]<<16|SBOX[s2>>>8&255]<<8|SBOX[s3&255])^keySchedule[ksRow++];t1=(SBOX[s1>>>24]<<24|SBOX[s2>>>16&255]<<16|SBOX[s3>>>8&255]<<8|SBOX[s0&255])^keySchedule[ksRow++];t2=(SBOX[s2>>>24]<<24|SBOX[s3>>>16&255]<<16|SBOX[s0>>>8&255]<<8|SBOX[s1&255])^keySchedule[ksRow++];t3=(SBOX[s3>>>24]<<24|SBOX[s0>>>16&255]<<16|SBOX[s1>>>8&255]<<8|SBOX[s2&255])^keySchedule[ksRow++];return[fixup_uint32(t0),fixup_uint32(t1),fixup_uint32(t2),fixup_uint32(t3)]};exports.AES=AES}).call(this,require("buffer").Buffer)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/authCipher.js":[function(require,module,exports){(function(Buffer){var aes=require("./aes");var Transform=require("cipher-base");var inherits=require("inherits");var GHASH=require("./ghash");var xor=require("buffer-xor");inherits(StreamCipher,Transform);module.exports=StreamCipher;function StreamCipher(mode,key,iv,decrypt){if(!(this instanceof StreamCipher)){return new StreamCipher(mode,key,iv)}Transform.call(this);this._finID=Buffer.concat([iv,new Buffer([0,0,0,1])]);iv=Buffer.concat([iv,new Buffer([0,0,0,2])]);this._cipher=new aes.AES(key);this._prev=new Buffer(iv.length);this._cache=new Buffer("");this._secCache=new Buffer("");this._decrypt=decrypt;this._alen=0;this._len=0;iv.copy(this._prev);this._mode=mode;var h=new Buffer(4);h.fill(0);this._ghash=new GHASH(this._cipher.encryptBlock(h));this._authTag=null;this._called=false}StreamCipher.prototype._update=function(chunk){if(!this._called&&this._alen){var rump=16-this._alen%16;if(rump<16){rump=new Buffer(rump);rump.fill(0);this._ghash.update(rump)}}this._called=true;var out=this._mode.encrypt(this,chunk);if(this._decrypt){this._ghash.update(chunk)}else{this._ghash.update(out)}this._len+=chunk.length;return out};StreamCipher.prototype._final=function(){if(this._decrypt&&!this._authTag){throw new Error("Unsupported state or unable to authenticate data")}var tag=xor(this._ghash.final(this._alen*8,this._len*8),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(xorTest(tag,this._authTag)){throw new Error("Unsupported state or unable to authenticate data")}}else{this._authTag=tag}this._cipher.scrub()};StreamCipher.prototype.getAuthTag=function getAuthTag(){if(!this._decrypt&&Buffer.isBuffer(this._authTag)){return this._authTag}else{throw new Error("Attempting to get auth tag in unsupported state")}};StreamCipher.prototype.setAuthTag=function setAuthTag(tag){if(this._decrypt){this._authTag=tag}else{throw new Error("Attempting to set auth tag in unsupported state")}};StreamCipher.prototype.setAAD=function setAAD(buf){if(!this._called){this._ghash.update(buf);this._alen+=buf.length}else{throw new Error("Attempting to set AAD in unsupported state")}};function xorTest(a,b){var out=0;if(a.length!==b.length){out++}var len=Math.min(a.length,b.length);var i=-1;while(++i16){out=this.cache.slice(0,16);this.cache=this.cache.slice(16);return out}}else{if(this.cache.length>=16){out=this.cache.slice(0,16);this.cache=this.cache.slice(16);return out}}return null};Splitter.prototype.flush=function(){if(this.cache.length){return this.cache}};function unpad(last){var padded=last[15];var i=-1;while(++i15){var out=this.cache.slice(0,16);this.cache=this.cache.slice(16);return out}return null};Splitter.prototype.flush=function(){var len=16-this.cache.length;var padBuff=new Buffer(len);var i=-1;while(++i0;j--){Vi[j]=Vi[j]>>>1|(Vi[j-1]&1)<<31}Vi[0]=Vi[0]>>>1;if(lsb_Vi){Vi[0]=Vi[0]^225<<24}}this.state=fromArray(Zi)};GHASH.prototype.update=function(buf){this.cache=Buffer.concat([this.cache,buf]);var chunk;while(this.cache.length>=16){chunk=this.cache.slice(0,16);this.cache=this.cache.slice(16);this.ghash(chunk)}};GHASH.prototype.final=function(abl,bl){if(this.cache.length){this.ghash(Buffer.concat([this.cache,zeros],16))}this.ghash(fromArray([0,abl,0,bl]));return this.state};function toArray(buf){return[buf.readUInt32BE(0),buf.readUInt32BE(4),buf.readUInt32BE(8),buf.readUInt32BE(12)]}function fromArray(out){out=out.map(fixup_uint32);var buf=new Buffer(16);buf.writeUInt32BE(out[0],0);buf.writeUInt32BE(out[1],4);buf.writeUInt32BE(out[2],8);buf.writeUInt32BE(out[3],12);return buf}var uint_max=Math.pow(2,32);function fixup_uint32(x){var ret,x_pos;ret=x>uint_max||x<0?(x_pos=Math.abs(x)%uint_max,x<0?uint_max-x_pos:x_pos):x;return ret}function xor(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}}).call(this,require("buffer").Buffer)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/modes.js":[function(require,module,exports){exports["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"};exports["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"};exports["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"};exports["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"};exports["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"};exports["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"};exports["aes128"]=exports["aes-128-cbc"];exports["aes192"]=exports["aes-192-cbc"];exports["aes256"]=exports["aes-256-cbc"];exports["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream" +};exports["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"};exports["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"};exports["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"};exports["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"};exports["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"};exports["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"};exports["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"};exports["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"};exports["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"};exports["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"};exports["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"};exports["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"};exports["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"};exports["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"};exports["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"};exports["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"};exports["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/modes/cbc.js":[function(require,module,exports){var xor=require("buffer-xor");exports.encrypt=function(self,block){var data=xor(block,self._prev);self._prev=self._cipher.encryptBlock(data);return self._prev};exports.decrypt=function(self,block){var pad=self._prev;self._prev=block;var out=self._cipher.decryptBlock(block);return xor(out,pad)}},{"buffer-xor":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/node_modules/buffer-xor/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/modes/cfb.js":[function(require,module,exports){(function(Buffer){var xor=require("buffer-xor");exports.encrypt=function(self,data,decrypt){var out=new Buffer("");var len;while(data.length){if(self._cache.length===0){self._cache=self._cipher.encryptBlock(self._prev);self._prev=new Buffer("")}if(self._cache.length<=data.length){len=self._cache.length;out=Buffer.concat([out,encryptStart(self,data.slice(0,len),decrypt)]);data=data.slice(len)}else{out=Buffer.concat([out,encryptStart(self,data,decrypt)]);break}}return out};function encryptStart(self,data,decrypt){var len=data.length;var out=xor(data,self._cache);self._cache=self._cache.slice(len);self._prev=Buffer.concat([self._prev,decrypt?data:out]);return out}}).call(this,require("buffer").Buffer)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js","buffer-xor":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/node_modules/buffer-xor/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/modes/cfb1.js":[function(require,module,exports){(function(Buffer){function encryptByte(self,byteParam,decrypt){var pad;var i=-1;var len=8;var out=0;var bit,value;while(++i>i%8;self._prev=shiftIn(self._prev,decrypt?bit:value)}return out}exports.encrypt=function(self,chunk,decrypt){var len=chunk.length;var out=new Buffer(len);var i=-1;while(++i>7}return out}}).call(this,require("buffer").Buffer)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/modes/cfb8.js":[function(require,module,exports){(function(Buffer){function encryptByte(self,byteParam,decrypt){var pad=self._cipher.encryptBlock(self._prev);var out=pad[0]^byteParam;self._prev=Buffer.concat([self._prev.slice(1),new Buffer([decrypt?byteParam:out])]);return out}exports.encrypt=function(self,chunk,decrypt){var len=chunk.length;var out=new Buffer(len);var i=-1;while(++i0;count--){inputOff+=this._buffer(data,inputOff);outputOff+=this._flushBuffer(out,outputOff)}inputOff+=this._buffer(data,inputOff);return out};Cipher.prototype.final=function final(buffer){var first;if(buffer)first=this.update(buffer);var last;if(this.type==="encrypt")last=this._finalEncrypt();else last=this._finalDecrypt();if(first)return first.concat(last);else return last};Cipher.prototype._pad=function _pad(buffer,off){if(off===0)return false;while(off>>1];kL=utils.r28shl(kL,shift);kR=utils.r28shl(kR,shift);utils.pc2(kL,kR,state.keys,i)}};DES.prototype._update=function _update(inp,inOff,out,outOff){var state=this._desState;var l=utils.readUInt32BE(inp,inOff);var r=utils.readUInt32BE(inp,inOff+4);utils.ip(l,r,state.tmp,0);l=state.tmp[0];r=state.tmp[1];if(this.type==="encrypt")this._encrypt(state,l,r,state.tmp,0);else this._decrypt(state,l,r,state.tmp,0);l=state.tmp[0];r=state.tmp[1];utils.writeUInt32BE(out,l,outOff);utils.writeUInt32BE(out,r,outOff+4)};DES.prototype._pad=function _pad(buffer,off){var value=buffer.length-off;for(var i=off;i>>0;l=t}utils.rip(r,l,out,off)};DES.prototype._decrypt=function _decrypt(state,lStart,rStart,out,off){var l=rStart;var r=lStart;for(var i=state.keys.length-2;i>=0;i-=2){var keyL=state.keys[i];var keyR=state.keys[i+1];utils.expand(l,state.tmp,0);keyL^=state.tmp[0];keyR^=state.tmp[1];var s=utils.substitute(keyL,keyR);var f=utils.permute(s);var t=l;l=(r^f)>>>0;r=t}utils.rip(l,r,out,off)}},{"../des":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/des.js/lib/des.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js","minimalistic-assert":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/des.js/node_modules/minimalistic-assert/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/des.js/lib/des/ede.js":[function(require,module,exports){"use strict";var assert=require("minimalistic-assert");var inherits=require("inherits");var des=require("../des");var Cipher=des.Cipher;var DES=des.DES;function EDEState(type,key){assert.equal(key.length,24,"Invalid key length");var k1=key.slice(0,8);var k2=key.slice(8,16);var k3=key.slice(16,24);if(type==="encrypt"){this.ciphers=[DES.create({type:"encrypt",key:k1}),DES.create({type:"decrypt",key:k2}),DES.create({type:"encrypt",key:k3})]}else{this.ciphers=[DES.create({type:"decrypt",key:k3}),DES.create({type:"encrypt",key:k2}),DES.create({type:"decrypt",key:k1})]}}function EDE(options){Cipher.call(this,options);var state=new EDEState(this.type,this.options.key);this._edeState=state}inherits(EDE,Cipher);module.exports=EDE;EDE.create=function create(options){return new EDE(options)};EDE.prototype._update=function _update(inp,inOff,out,outOff){var state=this._edeState;state.ciphers[0]._update(inp,inOff,out,outOff);state.ciphers[1]._update(out,outOff,out,outOff);state.ciphers[2]._update(out,outOff,out,outOff)};EDE.prototype._pad=DES.prototype._pad;EDE.prototype._unpad=DES.prototype._unpad},{"../des":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/des.js/lib/des.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js","minimalistic-assert":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/des.js/node_modules/minimalistic-assert/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-des/node_modules/des.js/lib/des/utils.js":[function(require,module,exports){"use strict";exports.readUInt32BE=function readUInt32BE(bytes,off){var res=bytes[0+off]<<24|bytes[1+off]<<16|bytes[2+off]<<8|bytes[3+off];return res>>>0};exports.writeUInt32BE=function writeUInt32BE(bytes,value,off){bytes[0+off]=value>>>24;bytes[1+off]=value>>>16&255;bytes[2+off]=value>>>8&255;bytes[3+off]=value&255};exports.ip=function ip(inL,inR,out,off){var outL=0;var outR=0;for(var i=6;i>=0;i-=2){for(var j=0;j<=24;j+=8){outL<<=1;outL|=inR>>>j+i&1}for(var j=0;j<=24;j+=8){outL<<=1;outL|=inL>>>j+i&1}}for(var i=6;i>=0;i-=2){for(var j=1;j<=25;j+=8){outR<<=1;outR|=inR>>>j+i&1}for(var j=1;j<=25;j+=8){outR<<=1;outR|=inL>>>j+i&1}}out[off+0]=outL>>>0;out[off+1]=outR>>>0};exports.rip=function rip(inL,inR,out,off){var outL=0;var outR=0;for(var i=0;i<4;i++){for(var j=24;j>=0;j-=8){outL<<=1;outL|=inR>>>j+i&1;outL<<=1;outL|=inL>>>j+i&1}}for(var i=4;i<8;i++){for(var j=24;j>=0;j-=8){outR<<=1;outR|=inR>>>j+i&1;outR<<=1;outR|=inL>>>j+i&1}}out[off+0]=outL>>>0;out[off+1]=outR>>>0};exports.pc1=function pc1(inL,inR,out,off){var outL=0;var outR=0;for(var i=7;i>=5;i--){for(var j=0;j<=24;j+=8){outL<<=1;outL|=inR>>j+i&1}for(var j=0;j<=24;j+=8){outL<<=1;outL|=inL>>j+i&1}}for(var j=0;j<=24;j+=8){outL<<=1;outL|=inR>>j+i&1}for(var i=1;i<=3;i++){for(var j=0;j<=24;j+=8){outR<<=1;outR|=inR>>j+i&1}for(var j=0;j<=24;j+=8){outR<<=1;outR|=inL>>j+i&1}}for(var j=0;j<=24;j+=8){outR<<=1;outR|=inL>>j+i&1}out[off+0]=outL>>>0;out[off+1]=outR>>>0};exports.r28shl=function r28shl(num,shift){return num<>>28-shift};var pc2table=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];exports.pc2=function pc2(inL,inR,out,off){var outL=0;var outR=0;var len=pc2table.length>>>1;for(var i=0;i>>pc2table[i]&1}for(var i=len;i>>pc2table[i]&1}out[off+0]=outL>>>0;out[off+1]=outR>>>0};exports.expand=function expand(r,out,off){var outL=0;var outR=0;outL=(r&1)<<5|r>>>27;for(var i=23;i>=15;i-=4){outL<<=6;outL|=r>>>i&63}for(var i=11;i>=3;i-=4){outR|=r>>>i&63;outR<<=6}outR|=(r&31)<<1|r>>>31;out[off+0]=outL>>>0;out[off+1]=outR>>>0};var sTable=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];exports.substitute=function substitute(inL,inR){var out=0;for(var i=0;i<4;i++){var b=inL>>>18-i*6&63;var sb=sTable[i*64+b];out<<=4;out|=sb}for(var i=0;i<4;i++){var b=inR>>>18-i*6&63;var sb=sTable[4*64+i*64+b];out<<=4;out|=sb}return out>>>0};var permuteTable=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];exports.permute=function permute(num){var out=0;for(var i=0;i>>permuteTable[i]&1}return out>>>0};exports.padSplit=function padSplit(num,size,group){var str=num.toString(2);while(str.length0){bufs.push(md_buf)}bufs.push(password);if(salt){bufs.push(salt)}md_buf=md5(Buffer.concat(bufs));bufs=[];i=0;if(keyLen>0){while(true){if(keyLen===0){break}if(i===md_buf.length){break}key[ki++]=md_buf[i];keyLen--;i++}}if(ivLen>0&&i!==md_buf.length){while(true){if(ivLen===0){break}if(i===md_buf.length){break}iv[ii++]=md_buf[i];ivLen--;i++}}if(keyLen===0&&ivLen===0){break}}for(i=0;i0)return left;return right};BN.min=function min(left,right){if(left.cmp(right)<0)return left;return right};BN.prototype._init=function init(number,base,endian){if(typeof number==="number"){return this._initNumber(number,base,endian)}if(typeof number==="object"){return this._initArray(number,base,endian)}if(base==="hex"){base=16}assert(base===(base|0)&&base>=2&&base<=36);number=number.toString().replace(/\s+/g,"");var start=0;if(number[0]==="-"){start++}if(base===16){this._parseHex(number,start)}else{this._parseBase(number,base,start)}if(number[0]==="-"){this.negative=1}this.strip();if(endian!=="le")return;this._initArray(this.toArray(),base,endian)};BN.prototype._initNumber=function _initNumber(number,base,endian){if(number<0){this.negative=1;number=-number}if(number<67108864){this.words=[number&67108863];this.length=1}else if(number<4503599627370496){this.words=[number&67108863,number/67108864&67108863];this.length=2}else{assert(number<9007199254740992);this.words=[number&67108863,number/67108864&67108863,1];this.length=3}if(endian!=="le")return;this._initArray(this.toArray(),base,endian)};BN.prototype._initArray=function _initArray(number,base,endian){assert(typeof number.length==="number");if(number.length<=0){this.words=[0];this.length=1;return this}this.length=Math.ceil(number.length/3);this.words=new Array(this.length);for(var i=0;i=0;i-=3){w=number[i]|number[i-1]<<8|number[i-2]<<16;this.words[j]|=w<>>26-off&67108863;off+=24;if(off>=26){off-=26;j++}}}else if(endian==="le"){for(i=0,j=0;i>>26-off&67108863;off+=24;if(off>=26){off-=26;j++}}}return this.strip()};function parseHex(str,start,end){var r=0;var len=Math.min(str.length,end);for(var i=start;i=49&&c<=54){r|=c-49+10}else if(c>=17&&c<=22){r|=c-17+10}else{r|=c&15}}return r}BN.prototype._parseHex=function _parseHex(number,start){this.length=Math.ceil((number.length-start)/6);this.words=new Array(this.length);for(var i=0;i=start;i-=6){w=parseHex(number,i,i+6);this.words[j]|=w<>>26-off&4194303;off+=24;if(off>=26){off-=26;j++}}if(i+6!==start){w=parseHex(number,start,i+6);this.words[j]|=w<>>26-off&4194303}this.strip()};function parseBase(str,start,end,mul){var r=0;var len=Math.min(str.length,end);for(var i=start;i=49){r+=c-49+10}else if(c>=17){r+=c-17+10}else{r+=c}}return r}BN.prototype._parseBase=function _parseBase(number,base,start){this.words=[0];this.length=1;for(var limbLen=0,limbPow=1;limbPow<=67108863;limbPow*=base){limbLen++}limbLen--;limbPow=limbPow/base|0;var total=number.length-start;var mod=total%limbLen;var end=Math.min(total,total-mod)+start;var word=0;for(var i=start;i1&&this.words[this.length-1]===0){this.length--}return this._normSign()};BN.prototype._normSign=function _normSign(){if(this.length===1&&this.words[0]===0){this.negative=0}return this};BN.prototype.inspect=function inspect(){return(this.red?""};var zeros=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"];var groupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5];var groupBases=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];BN.prototype.toString=function toString(base,padding){base=base||10;padding=padding|0||1;var out;if(base===16||base==="hex"){out="";var off=0;var carry=0;for(var i=0;i>>24-off&16777215;if(carry!==0||i!==this.length-1){out=zeros[6-word.length]+word+out}else{out=word+out}off+=2;if(off>=26){off-=26;i--}}if(carry!==0){out=carry.toString(16)+out}while(out.length%padding!==0){out="0"+out}if(this.negative!==0){out="-"+out}return out}if(base===(base|0)&&base>=2&&base<=36){var groupSize=groupSizes[base];var groupBase=groupBases[base];out="";var c=this.clone();c.negative=0;while(!c.isZero()){var r=c.modn(groupBase).toString(base);c=c.idivn(groupBase);if(!c.isZero()){out=zeros[groupSize-r.length]+r+out}else{out=r+out}}if(this.isZero()){out="0"+out}while(out.length%padding!==0){out="0"+out}if(this.negative!==0){out="-"+out}return out}assert(false,"Base should be between 2 and 36")};BN.prototype.toNumber=function toNumber(){var length=this.bitLength();var ret;if(length<=26){ret=this.words[0]}else if(length<=52){ret=this.words[1]*67108864+this.words[0]}else if(length===53){ret=4503599627370496+this.words[1]*67108864+this.words[0]}else{assert(false,"Number can only safely store up to 53 bits")}return this.negative!==0?-ret:ret};BN.prototype.toJSON=function toJSON(){return this.toString(16)};BN.prototype.toBuffer=function toBuffer(endian,length){assert(typeof Buffer!=="undefined");return this.toArrayLike(Buffer,endian,length)};BN.prototype.toArray=function toArray(endian,length){return this.toArrayLike(Array,endian,length)};BN.prototype.toArrayLike=function toArrayLike(ArrayType,endian,length){var byteLength=this.byteLength();var reqLength=length||Math.max(1,byteLength);assert(byteLength<=reqLength,"byte array longer than desired length");assert(reqLength>0,"Requested array length <= 0");this.strip();var littleEndian=endian==="le";var res=new ArrayType(reqLength);var b,i;var q=this.clone();if(!littleEndian){for(i=0;i=4096){r+=13;t>>>=13}if(t>=64){r+=7;t>>>=7}if(t>=8){r+=4;t>>>=4}if(t>=2){r+=2;t>>>=2}return r+t}}BN.prototype._zeroBits=function _zeroBits(w){if(w===0)return 26;var t=w;var r=0;if((t&8191)===0){r+=13;t>>>=13}if((t&127)===0){r+=7;t>>>=7}if((t&15)===0){r+=4;t>>>=4}if((t&3)===0){r+=2;t>>>=2}if((t&1)===0){r++}return r};BN.prototype.bitLength=function bitLength(){var w=this.words[this.length-1];var hi=this._countBits(w);return(this.length-1)*26+hi};function toBitArray(num){var w=new Array(num.bitLength());for(var bit=0;bit>>wbit}return w}BN.prototype.zeroBits=function zeroBits(){if(this.isZero())return 0;var r=0;for(var i=0;inum.length)return this.clone().ior(num);return num.clone().ior(this)};BN.prototype.uor=function uor(num){if(this.length>num.length)return this.clone().iuor(num);return num.clone().iuor(this)};BN.prototype.iuand=function iuand(num){var b;if(this.length>num.length){b=num}else{b=this}for(var i=0;inum.length)return this.clone().iand(num);return num.clone().iand(this)};BN.prototype.uand=function uand(num){if(this.length>num.length)return this.clone().iuand(num);return num.clone().iuand(this)};BN.prototype.iuxor=function iuxor(num){var a;var b;if(this.length>num.length){a=this;b=num}else{a=num;b=this}for(var i=0;inum.length)return this.clone().ixor(num);return num.clone().ixor(this)};BN.prototype.uxor=function uxor(num){if(this.length>num.length)return this.clone().iuxor(num);return num.clone().iuxor(this)};BN.prototype.inotn=function inotn(width){assert(typeof width==="number"&&width>=0);var bytesNeeded=Math.ceil(width/26)|0;var bitsLeft=width%26;this._expand(bytesNeeded);if(bitsLeft>0){bytesNeeded--}for(var i=0;i0){this.words[i]=~this.words[i]&67108863>>26-bitsLeft}return this.strip()};BN.prototype.notn=function notn(width){return this.clone().inotn(width)};BN.prototype.setn=function setn(bit,val){assert(typeof bit==="number"&&bit>=0);var off=bit/26|0;var wbit=bit%26;this._expand(off+1);if(val){this.words[off]=this.words[off]|1<num.length){a=this;b=num}else{a=num;b=this}var carry=0;for(var i=0;i>>26}for(;carry!==0&&i>>26}this.length=a.length;if(carry!==0){this.words[this.length]=carry;this.length++}else if(a!==this){for(;inum.length)return this.clone().iadd(num);return num.clone().iadd(this)};BN.prototype.isub=function isub(num){if(num.negative!==0){num.negative=0;var r=this.iadd(num);num.negative=1;return r._normSign()}else if(this.negative!==0){this.negative=0;this.iadd(num);this.negative=1;return this._normSign()}var cmp=this.cmp(num);if(cmp===0){this.negative=0;this.length=1;this.words[0]=0;return this}var a,b;if(cmp>0){a=this;b=num}else{a=num;b=this}var carry=0;for(var i=0;i>26;this.words[i]=r&67108863}for(;carry!==0&&i>26;this.words[i]=r&67108863}if(carry===0&&i>>26;var rword=carry&67108863;var maxJ=Math.min(k,num.length-1);for(var j=Math.max(0,k-self.length+1);j<=maxJ;j++){var i=k-j|0;a=self.words[i]|0;b=num.words[j]|0;r=a*b+rword;ncarry+=r/67108864|0;rword=r&67108863}out.words[k]=rword|0;carry=ncarry|0}if(carry!==0){out.words[k]=carry|0}else{out.length--}return out.strip()}var comb10MulTo=function comb10MulTo(self,num,out){var a=self.words;var b=num.words;var o=out.words;var c=0;var lo;var mid;var hi;var a0=a[0]|0;var al0=a0&8191;var ah0=a0>>>13;var a1=a[1]|0;var al1=a1&8191;var ah1=a1>>>13;var a2=a[2]|0;var al2=a2&8191;var ah2=a2>>>13;var a3=a[3]|0;var al3=a3&8191;var ah3=a3>>>13;var a4=a[4]|0;var al4=a4&8191;var ah4=a4>>>13;var a5=a[5]|0;var al5=a5&8191;var ah5=a5>>>13;var a6=a[6]|0;var al6=a6&8191;var ah6=a6>>>13;var a7=a[7]|0;var al7=a7&8191;var ah7=a7>>>13;var a8=a[8]|0;var al8=a8&8191;var ah8=a8>>>13;var a9=a[9]|0;var al9=a9&8191;var ah9=a9>>>13;var b0=b[0]|0;var bl0=b0&8191;var bh0=b0>>>13;var b1=b[1]|0;var bl1=b1&8191;var bh1=b1>>>13;var b2=b[2]|0;var bl2=b2&8191;var bh2=b2>>>13;var b3=b[3]|0;var bl3=b3&8191;var bh3=b3>>>13;var b4=b[4]|0;var bl4=b4&8191;var bh4=b4>>>13;var b5=b[5]|0;var bl5=b5&8191;var bh5=b5>>>13;var b6=b[6]|0;var bl6=b6&8191;var bh6=b6>>>13;var b7=b[7]|0;var bl7=b7&8191;var bh7=b7>>>13;var b8=b[8]|0;var bl8=b8&8191;var bh8=b8>>>13;var b9=b[9]|0;var bl9=b9&8191;var bh9=b9>>>13;out.negative=self.negative^num.negative;out.length=19;lo=Math.imul(al0,bl0);mid=Math.imul(al0,bh0);mid+=Math.imul(ah0,bl0);hi=Math.imul(ah0,bh0);var w0=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w0>>>26);w0&=67108863;lo=Math.imul(al1,bl0);mid=Math.imul(al1,bh0);mid+=Math.imul(ah1,bl0);hi=Math.imul(ah1,bh0);lo+=Math.imul(al0,bl1);mid+=Math.imul(al0,bh1);mid+=Math.imul(ah0,bl1);hi+=Math.imul(ah0,bh1);var w1=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w1>>>26);w1&=67108863;lo=Math.imul(al2,bl0);mid=Math.imul(al2,bh0);mid+=Math.imul(ah2,bl0);hi=Math.imul(ah2,bh0);lo+=Math.imul(al1,bl1);mid+=Math.imul(al1,bh1);mid+=Math.imul(ah1,bl1);hi+=Math.imul(ah1,bh1);lo+=Math.imul(al0,bl2);mid+=Math.imul(al0,bh2);mid+=Math.imul(ah0,bl2);hi+=Math.imul(ah0,bh2);var w2=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w2>>>26);w2&=67108863;lo=Math.imul(al3,bl0);mid=Math.imul(al3,bh0);mid+=Math.imul(ah3,bl0);hi=Math.imul(ah3,bh0);lo+=Math.imul(al2,bl1);mid+=Math.imul(al2,bh1);mid+=Math.imul(ah2,bl1);hi+=Math.imul(ah2,bh1);lo+=Math.imul(al1,bl2);mid+=Math.imul(al1,bh2);mid+=Math.imul(ah1,bl2);hi+=Math.imul(ah1,bh2);lo+=Math.imul(al0,bl3);mid+=Math.imul(al0,bh3);mid+=Math.imul(ah0,bl3);hi+=Math.imul(ah0,bh3);var w3=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w3>>>26);w3&=67108863;lo=Math.imul(al4,bl0);mid=Math.imul(al4,bh0);mid+=Math.imul(ah4,bl0);hi=Math.imul(ah4,bh0);lo+=Math.imul(al3,bl1);mid+=Math.imul(al3,bh1);mid+=Math.imul(ah3,bl1);hi+=Math.imul(ah3,bh1);lo+=Math.imul(al2,bl2);mid+=Math.imul(al2,bh2);mid+=Math.imul(ah2,bl2);hi+=Math.imul(ah2,bh2);lo+=Math.imul(al1,bl3);mid+=Math.imul(al1,bh3);mid+=Math.imul(ah1,bl3);hi+=Math.imul(ah1,bh3);lo+=Math.imul(al0,bl4);mid+=Math.imul(al0,bh4);mid+=Math.imul(ah0,bl4);hi+=Math.imul(ah0,bh4);var w4=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w4>>>26);w4&=67108863;lo=Math.imul(al5,bl0);mid=Math.imul(al5,bh0);mid+=Math.imul(ah5,bl0);hi=Math.imul(ah5,bh0);lo+=Math.imul(al4,bl1);mid+=Math.imul(al4,bh1);mid+=Math.imul(ah4,bl1);hi+=Math.imul(ah4,bh1);lo+=Math.imul(al3,bl2);mid+=Math.imul(al3,bh2);mid+=Math.imul(ah3,bl2);hi+=Math.imul(ah3,bh2);lo+=Math.imul(al2,bl3);mid+=Math.imul(al2,bh3);mid+=Math.imul(ah2,bl3);hi+=Math.imul(ah2,bh3);lo+=Math.imul(al1,bl4);mid+=Math.imul(al1,bh4);mid+=Math.imul(ah1,bl4);hi+=Math.imul(ah1,bh4);lo+=Math.imul(al0,bl5);mid+=Math.imul(al0,bh5);mid+=Math.imul(ah0,bl5);hi+=Math.imul(ah0,bh5);var w5=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w5>>>26);w5&=67108863;lo=Math.imul(al6,bl0);mid=Math.imul(al6,bh0);mid+=Math.imul(ah6,bl0);hi=Math.imul(ah6,bh0);lo+=Math.imul(al5,bl1);mid+=Math.imul(al5,bh1);mid+=Math.imul(ah5,bl1);hi+=Math.imul(ah5,bh1);lo+=Math.imul(al4,bl2);mid+=Math.imul(al4,bh2);mid+=Math.imul(ah4,bl2);hi+=Math.imul(ah4,bh2);lo+=Math.imul(al3,bl3);mid+=Math.imul(al3,bh3);mid+=Math.imul(ah3,bl3);hi+=Math.imul(ah3,bh3);lo+=Math.imul(al2,bl4);mid+=Math.imul(al2,bh4);mid+=Math.imul(ah2,bl4);hi+=Math.imul(ah2,bh4);lo+=Math.imul(al1,bl5);mid+=Math.imul(al1,bh5);mid+=Math.imul(ah1,bl5);hi+=Math.imul(ah1,bh5);lo+=Math.imul(al0,bl6);mid+=Math.imul(al0,bh6);mid+=Math.imul(ah0,bl6);hi+=Math.imul(ah0,bh6);var w6=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w6>>>26);w6&=67108863;lo=Math.imul(al7,bl0);mid=Math.imul(al7,bh0);mid+=Math.imul(ah7,bl0);hi=Math.imul(ah7,bh0);lo+=Math.imul(al6,bl1);mid+=Math.imul(al6,bh1);mid+=Math.imul(ah6,bl1);hi+=Math.imul(ah6,bh1);lo+=Math.imul(al5,bl2);mid+=Math.imul(al5,bh2);mid+=Math.imul(ah5,bl2);hi+=Math.imul(ah5,bh2);lo+=Math.imul(al4,bl3);mid+=Math.imul(al4,bh3);mid+=Math.imul(ah4,bl3);hi+=Math.imul(ah4,bh3);lo+=Math.imul(al3,bl4);mid+=Math.imul(al3,bh4);mid+=Math.imul(ah3,bl4);hi+=Math.imul(ah3,bh4);lo+=Math.imul(al2,bl5);mid+=Math.imul(al2,bh5);mid+=Math.imul(ah2,bl5);hi+=Math.imul(ah2,bh5);lo+=Math.imul(al1,bl6);mid+=Math.imul(al1,bh6);mid+=Math.imul(ah1,bl6);hi+=Math.imul(ah1,bh6);lo+=Math.imul(al0,bl7);mid+=Math.imul(al0,bh7);mid+=Math.imul(ah0,bl7);hi+=Math.imul(ah0,bh7);var w7=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w7>>>26);w7&=67108863;lo=Math.imul(al8,bl0);mid=Math.imul(al8,bh0);mid+=Math.imul(ah8,bl0);hi=Math.imul(ah8,bh0);lo+=Math.imul(al7,bl1);mid+=Math.imul(al7,bh1);mid+=Math.imul(ah7,bl1);hi+=Math.imul(ah7,bh1);lo+=Math.imul(al6,bl2);mid+=Math.imul(al6,bh2);mid+=Math.imul(ah6,bl2);hi+=Math.imul(ah6,bh2);lo+=Math.imul(al5,bl3);mid+=Math.imul(al5,bh3);mid+=Math.imul(ah5,bl3);hi+=Math.imul(ah5,bh3);lo+=Math.imul(al4,bl4);mid+=Math.imul(al4,bh4);mid+=Math.imul(ah4,bl4);hi+=Math.imul(ah4,bh4);lo+=Math.imul(al3,bl5);mid+=Math.imul(al3,bh5);mid+=Math.imul(ah3,bl5);hi+=Math.imul(ah3,bh5);lo+=Math.imul(al2,bl6);mid+=Math.imul(al2,bh6);mid+=Math.imul(ah2,bl6);hi+=Math.imul(ah2,bh6);lo+=Math.imul(al1,bl7);mid+=Math.imul(al1,bh7);mid+=Math.imul(ah1,bl7);hi+=Math.imul(ah1,bh7);lo+=Math.imul(al0,bl8);mid+=Math.imul(al0,bh8);mid+=Math.imul(ah0,bl8);hi+=Math.imul(ah0,bh8);var w8=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w8>>>26);w8&=67108863;lo=Math.imul(al9,bl0);mid=Math.imul(al9,bh0);mid+=Math.imul(ah9,bl0);hi=Math.imul(ah9,bh0);lo+=Math.imul(al8,bl1);mid+=Math.imul(al8,bh1);mid+=Math.imul(ah8,bl1);hi+=Math.imul(ah8,bh1);lo+=Math.imul(al7,bl2);mid+=Math.imul(al7,bh2);mid+=Math.imul(ah7,bl2);hi+=Math.imul(ah7,bh2);lo+=Math.imul(al6,bl3);mid+=Math.imul(al6,bh3);mid+=Math.imul(ah6,bl3);hi+=Math.imul(ah6,bh3);lo+=Math.imul(al5,bl4);mid+=Math.imul(al5,bh4);mid+=Math.imul(ah5,bl4);hi+=Math.imul(ah5,bh4);lo+=Math.imul(al4,bl5);mid+=Math.imul(al4,bh5);mid+=Math.imul(ah4,bl5);hi+=Math.imul(ah4,bh5);lo+=Math.imul(al3,bl6);mid+=Math.imul(al3,bh6);mid+=Math.imul(ah3,bl6);hi+=Math.imul(ah3,bh6);lo+=Math.imul(al2,bl7);mid+=Math.imul(al2,bh7);mid+=Math.imul(ah2,bl7);hi+=Math.imul(ah2,bh7);lo+=Math.imul(al1,bl8);mid+=Math.imul(al1,bh8);mid+=Math.imul(ah1,bl8);hi+=Math.imul(ah1,bh8);lo+=Math.imul(al0,bl9);mid+=Math.imul(al0,bh9);mid+=Math.imul(ah0,bl9);hi+=Math.imul(ah0,bh9);var w9=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w9>>>26);w9&=67108863;lo=Math.imul(al9,bl1);mid=Math.imul(al9,bh1);mid+=Math.imul(ah9,bl1);hi=Math.imul(ah9,bh1);lo+=Math.imul(al8,bl2);mid+=Math.imul(al8,bh2);mid+=Math.imul(ah8,bl2);hi+=Math.imul(ah8,bh2);lo+=Math.imul(al7,bl3);mid+=Math.imul(al7,bh3);mid+=Math.imul(ah7,bl3);hi+=Math.imul(ah7,bh3);lo+=Math.imul(al6,bl4);mid+=Math.imul(al6,bh4);mid+=Math.imul(ah6,bl4);hi+=Math.imul(ah6,bh4);lo+=Math.imul(al5,bl5);mid+=Math.imul(al5,bh5);mid+=Math.imul(ah5,bl5);hi+=Math.imul(ah5,bh5);lo+=Math.imul(al4,bl6);mid+=Math.imul(al4,bh6);mid+=Math.imul(ah4,bl6);hi+=Math.imul(ah4,bh6);lo+=Math.imul(al3,bl7);mid+=Math.imul(al3,bh7);mid+=Math.imul(ah3,bl7);hi+=Math.imul(ah3,bh7);lo+=Math.imul(al2,bl8);mid+=Math.imul(al2,bh8);mid+=Math.imul(ah2,bl8);hi+=Math.imul(ah2,bh8);lo+=Math.imul(al1,bl9);mid+=Math.imul(al1,bh9);mid+=Math.imul(ah1,bl9);hi+=Math.imul(ah1,bh9);var w10=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w10>>>26);w10&=67108863;lo=Math.imul(al9,bl2);mid=Math.imul(al9,bh2);mid+=Math.imul(ah9,bl2);hi=Math.imul(ah9,bh2);lo+=Math.imul(al8,bl3);mid+=Math.imul(al8,bh3);mid+=Math.imul(ah8,bl3);hi+=Math.imul(ah8,bh3);lo+=Math.imul(al7,bl4);mid+=Math.imul(al7,bh4);mid+=Math.imul(ah7,bl4);hi+=Math.imul(ah7,bh4);lo+=Math.imul(al6,bl5);mid+=Math.imul(al6,bh5);mid+=Math.imul(ah6,bl5);hi+=Math.imul(ah6,bh5);lo+=Math.imul(al5,bl6);mid+=Math.imul(al5,bh6);mid+=Math.imul(ah5,bl6);hi+=Math.imul(ah5,bh6);lo+=Math.imul(al4,bl7);mid+=Math.imul(al4,bh7);mid+=Math.imul(ah4,bl7);hi+=Math.imul(ah4,bh7);lo+=Math.imul(al3,bl8);mid+=Math.imul(al3,bh8);mid+=Math.imul(ah3,bl8);hi+=Math.imul(ah3,bh8);lo+=Math.imul(al2,bl9);mid+=Math.imul(al2,bh9);mid+=Math.imul(ah2,bl9);hi+=Math.imul(ah2,bh9);var w11=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w11>>>26);w11&=67108863;lo=Math.imul(al9,bl3);mid=Math.imul(al9,bh3);mid+=Math.imul(ah9,bl3);hi=Math.imul(ah9,bh3);lo+=Math.imul(al8,bl4);mid+=Math.imul(al8,bh4);mid+=Math.imul(ah8,bl4);hi+=Math.imul(ah8,bh4);lo+=Math.imul(al7,bl5);mid+=Math.imul(al7,bh5);mid+=Math.imul(ah7,bl5);hi+=Math.imul(ah7,bh5);lo+=Math.imul(al6,bl6);mid+=Math.imul(al6,bh6);mid+=Math.imul(ah6,bl6);hi+=Math.imul(ah6,bh6);lo+=Math.imul(al5,bl7);mid+=Math.imul(al5,bh7);mid+=Math.imul(ah5,bl7);hi+=Math.imul(ah5,bh7);lo+=Math.imul(al4,bl8);mid+=Math.imul(al4,bh8);mid+=Math.imul(ah4,bl8);hi+=Math.imul(ah4,bh8);lo+=Math.imul(al3,bl9);mid+=Math.imul(al3,bh9);mid+=Math.imul(ah3,bl9);hi+=Math.imul(ah3,bh9);var w12=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w12>>>26);w12&=67108863;lo=Math.imul(al9,bl4);mid=Math.imul(al9,bh4);mid+=Math.imul(ah9,bl4);hi=Math.imul(ah9,bh4);lo+=Math.imul(al8,bl5);mid+=Math.imul(al8,bh5);mid+=Math.imul(ah8,bl5);hi+=Math.imul(ah8,bh5);lo+=Math.imul(al7,bl6);mid+=Math.imul(al7,bh6);mid+=Math.imul(ah7,bl6);hi+=Math.imul(ah7,bh6);lo+=Math.imul(al6,bl7);mid+=Math.imul(al6,bh7);mid+=Math.imul(ah6,bl7);hi+=Math.imul(ah6,bh7);lo+=Math.imul(al5,bl8);mid+=Math.imul(al5,bh8);mid+=Math.imul(ah5,bl8);hi+=Math.imul(ah5,bh8);lo+=Math.imul(al4,bl9);mid+=Math.imul(al4,bh9);mid+=Math.imul(ah4,bl9);hi+=Math.imul(ah4,bh9);var w13=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w13>>>26);w13&=67108863;lo=Math.imul(al9,bl5);mid=Math.imul(al9,bh5);mid+=Math.imul(ah9,bl5);hi=Math.imul(ah9,bh5);lo+=Math.imul(al8,bl6);mid+=Math.imul(al8,bh6);mid+=Math.imul(ah8,bl6);hi+=Math.imul(ah8,bh6);lo+=Math.imul(al7,bl7);mid+=Math.imul(al7,bh7);mid+=Math.imul(ah7,bl7);hi+=Math.imul(ah7,bh7);lo+=Math.imul(al6,bl8);mid+=Math.imul(al6,bh8);mid+=Math.imul(ah6,bl8);hi+=Math.imul(ah6,bh8);lo+=Math.imul(al5,bl9);mid+=Math.imul(al5,bh9);mid+=Math.imul(ah5,bl9);hi+=Math.imul(ah5,bh9);var w14=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w14>>>26);w14&=67108863;lo=Math.imul(al9,bl6);mid=Math.imul(al9,bh6);mid+=Math.imul(ah9,bl6);hi=Math.imul(ah9,bh6);lo+=Math.imul(al8,bl7);mid+=Math.imul(al8,bh7);mid+=Math.imul(ah8,bl7);hi+=Math.imul(ah8,bh7);lo+=Math.imul(al7,bl8);mid+=Math.imul(al7,bh8);mid+=Math.imul(ah7,bl8);hi+=Math.imul(ah7,bh8);lo+=Math.imul(al6,bl9);mid+=Math.imul(al6,bh9);mid+=Math.imul(ah6,bl9);hi+=Math.imul(ah6,bh9);var w15=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w15>>>26);w15&=67108863;lo=Math.imul(al9,bl7);mid=Math.imul(al9,bh7);mid+=Math.imul(ah9,bl7);hi=Math.imul(ah9,bh7);lo+=Math.imul(al8,bl8);mid+=Math.imul(al8,bh8);mid+=Math.imul(ah8,bl8);hi+=Math.imul(ah8,bh8);lo+=Math.imul(al7,bl9);mid+=Math.imul(al7,bh9);mid+=Math.imul(ah7,bl9);hi+=Math.imul(ah7,bh9);var w16=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w16>>>26);w16&=67108863;lo=Math.imul(al9,bl8);mid=Math.imul(al9,bh8);mid+=Math.imul(ah9,bl8);hi=Math.imul(ah9,bh8);lo+=Math.imul(al8,bl9);mid+=Math.imul(al8,bh9);mid+=Math.imul(ah8,bl9);hi+=Math.imul(ah8,bh9);var w17=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w17>>>26);w17&=67108863;lo=Math.imul(al9,bl9);mid=Math.imul(al9,bh9);mid+=Math.imul(ah9,bl9);hi=Math.imul(ah9,bh9);var w18=c+lo+((mid&8191)<<13);c=hi+(mid>>>13)+(w18>>>26);w18&=67108863;o[0]=w0;o[1]=w1;o[2]=w2;o[3]=w3;o[4]=w4;o[5]=w5;o[6]=w6;o[7]=w7;o[8]=w8;o[9]=w9;o[10]=w10;o[11]=w11;o[12]=w12;o[13]=w13;o[14]=w14;o[15]=w15;o[16]=w16;o[17]=w17;o[18]=w18;if(c!==0){o[19]=c;out.length++}return out};if(!Math.imul){comb10MulTo=smallMulTo}function bigMulTo(self,num,out){out.negative=num.negative^self.negative;out.length=self.length+num.length;var carry=0;var hncarry=0;for(var k=0;k>>26)|0;hncarry+=ncarry>>>26;ncarry&=67108863}out.words[k]=rword;carry=ncarry;ncarry=hncarry}if(carry!==0){out.words[k]=carry}else{out.length--}return out.strip()}function jumboMulTo(self,num,out){var fftm=new FFTM;return fftm.mulp(self,num,out)}BN.prototype.mulTo=function mulTo(num,out){var res;var len=this.length+num.length;if(this.length===10&&num.length===10){res=comb10MulTo(this,num,out)}else if(len<63){res=smallMulTo(this,num,out)}else if(len<1024){res=bigMulTo(this,num,out)}else{res=jumboMulTo(this,num,out)}return res};function FFTM(x,y){this.x=x;this.y=y}FFTM.prototype.makeRBT=function makeRBT(N){var t=new Array(N);var l=BN.prototype._countBits(N)-1;for(var i=0;i>=1}return rb};FFTM.prototype.permute=function permute(rbt,rws,iws,rtws,itws,N){for(var i=0;i>>1){i++}return 1<>>13;rws[2*i+1]=carry&8191;carry=carry>>>13}for(i=2*len;i>=26;carry+=w/67108864|0;carry+=lo>>>26;this.words[i]=lo&67108863}if(carry!==0){this.words[i]=carry;this.length++}return this};BN.prototype.muln=function muln(num){return this.clone().imuln(num)};BN.prototype.sqr=function sqr(){return this.mul(this)};BN.prototype.isqr=function isqr(){return this.imul(this.clone())};BN.prototype.pow=function pow(num){var w=toBitArray(num);if(w.length===0)return new BN(1);var res=this;for(var i=0;i=0);var r=bits%26;var s=(bits-r)/26;var carryMask=67108863>>>26-r<<26-r;var i;if(r!==0){var carry=0;for(i=0;i>>26-r}if(carry){this.words[i]=carry;this.length++}}if(s!==0){for(i=this.length-1;i>=0;i--){this.words[i+s]=this.words[i]}for(i=0;i=0);var h;if(hint){h=(hint-hint%26)/26}else{h=0}var r=bits%26;var s=Math.min((bits-r)/26,this.length);var mask=67108863^67108863>>>r<s){this.length-=s;for(i=0;i=0&&(carry!==0||i>=h);i--){var word=this.words[i]|0;this.words[i]=carry<<26-r|word>>>r;carry=word&mask}if(maskedWords&&carry!==0){maskedWords.words[maskedWords.length++]=carry}if(this.length===0){this.words[0]=0;this.length=1}return this.strip()};BN.prototype.ishrn=function ishrn(bits,hint,extended){assert(this.negative===0);return this.iushrn(bits,hint,extended)};BN.prototype.shln=function shln(bits){return this.clone().ishln(bits)};BN.prototype.ushln=function ushln(bits){return this.clone().iushln(bits)};BN.prototype.shrn=function shrn(bits){return this.clone().ishrn(bits)};BN.prototype.ushrn=function ushrn(bits){return this.clone().iushrn(bits)};BN.prototype.testn=function testn(bit){assert(typeof bit==="number"&&bit>=0);var r=bit%26;var s=(bit-r)/26;var q=1<=0);var r=bits%26;var s=(bits-r)/26;assert(this.negative===0,"imaskn works only with positive numbers");if(r!==0){s++}this.length=Math.min(s,this.length);if(r!==0){var mask=67108863^67108863>>>r<=67108864;i++){this.words[i]-=67108864;if(i===this.length-1){this.words[i+1]=1}else{this.words[i+1]++}}this.length=Math.max(this.length,i+1);return this};BN.prototype.isubn=function isubn(num){assert(typeof num==="number");assert(num<67108864);if(num<0)return this.iaddn(-num);if(this.negative!==0){this.negative=0;this.iaddn(num);this.negative=1;return this}this.words[0]-=num;if(this.length===1&&this.words[0]<0){this.words[0]=-this.words[0];this.negative=1}else{for(var i=0;i>26)-(right/67108864|0);this.words[i+shift]=w&67108863}for(;i>26;this.words[i+shift]=w&67108863}if(carry===0)return this.strip();assert(carry===-1);carry=0;for(i=0;i>26;this.words[i]=w&67108863}this.negative=1;return this.strip()};BN.prototype._wordDiv=function _wordDiv(num,mode){var shift=this.length-num.length;var a=this.clone();var b=num;var bhi=b.words[b.length-1]|0;var bhiBits=this._countBits(bhi);shift=26-bhiBits;if(shift!==0){b=b.ushln(shift);a.iushln(shift);bhi=b.words[b.length-1]|0}var m=a.length-b.length;var q;if(mode!=="mod"){q=new BN(null);q.length=m+1;q.words=new Array(q.length);for(var i=0;i=0;j--){var qj=(a.words[b.length+j]|0)*67108864+(a.words[b.length+j-1]|0);qj=Math.min(qj/bhi|0,67108863);a._ishlnsubmul(b,qj,j);while(a.negative!==0){qj--;a.negative=0;a._ishlnsubmul(b,1,j);if(!a.isZero()){a.negative^=1}}if(q){q.words[j]=qj}}if(q){q.strip()}a.strip();if(mode!=="div"&&shift!==0){a.iushrn(shift)}return{div:q||null,mod:a}};BN.prototype.divmod=function divmod(num,mode,positive){assert(!num.isZero());if(this.isZero()){return{div:new BN(0),mod:new BN(0)}}var div,mod,res;if(this.negative!==0&&num.negative===0){res=this.neg().divmod(num,mode);if(mode!=="mod"){div=res.div.neg()}if(mode!=="div"){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.iadd(num)}}return{div:div,mod:mod}}if(this.negative===0&&num.negative!==0){res=this.divmod(num.neg(),mode);if(mode!=="mod"){div=res.div.neg()}return{div:div,mod:res.mod}}if((this.negative&num.negative)!==0){res=this.neg().divmod(num.neg(),mode);if(mode!=="div"){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.isub(num)}}return{div:res.div,mod:mod}}if(num.length>this.length||this.cmp(num)<0){return{div:new BN(0),mod:this}}if(num.length===1){if(mode==="div"){return{div:this.divn(num.words[0]),mod:null}}if(mode==="mod"){return{div:null,mod:new BN(this.modn(num.words[0]))}}return{div:this.divn(num.words[0]),mod:new BN(this.modn(num.words[0]))}}return this._wordDiv(num,mode)};BN.prototype.div=function div(num){return this.divmod(num,"div",false).div};BN.prototype.mod=function mod(num){return this.divmod(num,"mod",false).mod};BN.prototype.umod=function umod(num){return this.divmod(num,"mod",true).mod};BN.prototype.divRound=function divRound(num){var dm=this.divmod(num);if(dm.mod.isZero())return dm.div;var mod=dm.div.negative!==0?dm.mod.isub(num):dm.mod;var half=num.ushrn(1);var r2=num.andln(1);var cmp=mod.cmp(half);if(cmp<0||r2===1&&cmp===0)return dm.div;return dm.div.negative!==0?dm.div.isubn(1):dm.div.iaddn(1)};BN.prototype.modn=function modn(num){assert(num<=67108863);var p=(1<<26)%num;var acc=0;for(var i=this.length-1;i>=0;i--){acc=(p*acc+(this.words[i]|0))%num}return acc};BN.prototype.idivn=function idivn(num){assert(num<=67108863);var carry=0;for(var i=this.length-1;i>=0;i--){var w=(this.words[i]|0)+carry*67108864;this.words[i]=w/num|0;carry=w%num}return this.strip()};BN.prototype.divn=function divn(num){return this.clone().idivn(num)};BN.prototype.egcd=function egcd(p){assert(p.negative===0);assert(!p.isZero());var x=this;var y=p.clone();if(x.negative!==0){x=x.umod(p)}else{x=x.clone()}var A=new BN(1);var B=new BN(0);var C=new BN(0);var D=new BN(1);var g=0;while(x.isEven()&&y.isEven()){x.iushrn(1);y.iushrn(1);++g}var yp=y.clone();var xp=x.clone();while(!x.isZero()){for(var i=0,im=1;(x.words[0]&im)===0&&i<26;++i,im<<=1);if(i>0){x.iushrn(i);while(i-- >0){if(A.isOdd()||B.isOdd()){A.iadd(yp);B.isub(xp)}A.iushrn(1);B.iushrn(1)}}for(var j=0,jm=1;(y.words[0]&jm)===0&&j<26;++j,jm<<=1);if(j>0){y.iushrn(j);while(j-- >0){if(C.isOdd()||D.isOdd()){C.iadd(yp);D.isub(xp)}C.iushrn(1);D.iushrn(1)}}if(x.cmp(y)>=0){x.isub(y);A.isub(C);B.isub(D)}else{y.isub(x);C.isub(A);D.isub(B)}}return{a:C,b:D,gcd:y.iushln(g)}};BN.prototype._invmp=function _invmp(p){assert(p.negative===0);assert(!p.isZero());var a=this;var b=p.clone();if(a.negative!==0){a=a.umod(p)}else{a=a.clone()}var x1=new BN(1);var x2=new BN(0);var delta=b.clone();while(a.cmpn(1)>0&&b.cmpn(1)>0){for(var i=0,im=1;(a.words[0]&im)===0&&i<26;++i,im<<=1);if(i>0){a.iushrn(i);while(i-- >0){if(x1.isOdd()){x1.iadd(delta)}x1.iushrn(1)}}for(var j=0,jm=1;(b.words[0]&jm)===0&&j<26;++j,jm<<=1);if(j>0){b.iushrn(j);while(j-- >0){if(x2.isOdd()){x2.iadd(delta)}x2.iushrn(1)}}if(a.cmp(b)>=0){a.isub(b);x1.isub(x2)}else{b.isub(a);x2.isub(x1)}}var res;if(a.cmpn(1)===0){res=x1}else{res=x2}if(res.cmpn(0)<0){res.iadd(p)}return res};BN.prototype.gcd=function gcd(num){if(this.isZero())return num.abs();if(num.isZero())return this.abs();var a=this.clone();var b=num.clone();a.negative=0;b.negative=0;for(var shift=0;a.isEven()&&b.isEven();shift++){a.iushrn(1);b.iushrn(1)}do{while(a.isEven()){a.iushrn(1)}while(b.isEven()){b.iushrn(1)}var r=a.cmp(b);if(r<0){var t=a;a=b;b=t}else if(r===0||b.cmpn(1)===0){break}a.isub(b)}while(true);return b.iushln(shift)};BN.prototype.invm=function invm(num){return this.egcd(num).a.umod(num)};BN.prototype.isEven=function isEven(){return(this.words[0]&1)===0};BN.prototype.isOdd=function isOdd(){return(this.words[0]&1)===1};BN.prototype.andln=function andln(num){return this.words[0]&num};BN.prototype.bincn=function bincn(bit){assert(typeof bit==="number");var r=bit%26;var s=(bit-r)/26;var q=1<>>26;w&=67108863;this.words[i]=w}if(carry!==0){this.words[i]=carry;this.length++}return this};BN.prototype.isZero=function isZero(){return this.length===1&&this.words[0]===0};BN.prototype.cmpn=function cmpn(num){var negative=num<0;if(this.negative!==0&&!negative)return-1;if(this.negative===0&&negative)return 1;this.strip();var res;if(this.length>1){res=1}else{if(negative){num=-num}assert(num<=67108863,"Number is too big");var w=this.words[0]|0;res=w===num?0:wnum.length)return 1;if(this.length=0;i--){var a=this.words[i]|0;var b=num.words[i]|0;if(a===b)continue;if(ab){res=1}break}return res};BN.prototype.gtn=function gtn(num){return this.cmpn(num)===1};BN.prototype.gt=function gt(num){return this.cmp(num)===1};BN.prototype.gten=function gten(num){return this.cmpn(num)>=0};BN.prototype.gte=function gte(num){return this.cmp(num)>=0};BN.prototype.ltn=function ltn(num){return this.cmpn(num)===-1};BN.prototype.lt=function lt(num){return this.cmp(num)===-1};BN.prototype.lten=function lten(num){return this.cmpn(num)<=0};BN.prototype.lte=function lte(num){return this.cmp(num)<=0};BN.prototype.eqn=function eqn(num){return this.cmpn(num)===0};BN.prototype.eq=function eq(num){return this.cmp(num)===0};BN.red=function red(num){return new Red(num)};BN.prototype.toRed=function toRed(ctx){assert(!this.red,"Already a number in reduction context");assert(this.negative===0,"red works only with positives");return ctx.convertTo(this)._forceRed(ctx)};BN.prototype.fromRed=function fromRed(){assert(this.red,"fromRed works only with numbers in reduction context");return this.red.convertFrom(this)};BN.prototype._forceRed=function _forceRed(ctx){this.red=ctx;return this};BN.prototype.forceRed=function forceRed(ctx){assert(!this.red,"Already a number in reduction context");return this._forceRed(ctx)};BN.prototype.redAdd=function redAdd(num){assert(this.red,"redAdd works only with red numbers");return this.red.add(this,num)};BN.prototype.redIAdd=function redIAdd(num){assert(this.red,"redIAdd works only with red numbers");return this.red.iadd(this,num)};BN.prototype.redSub=function redSub(num){assert(this.red,"redSub works only with red numbers");return this.red.sub(this,num)};BN.prototype.redISub=function redISub(num){assert(this.red,"redISub works only with red numbers");return this.red.isub(this,num)};BN.prototype.redShl=function redShl(num){assert(this.red,"redShl works only with red numbers");return this.red.shl(this,num)};BN.prototype.redMul=function redMul(num){assert(this.red,"redMul works only with red numbers");this.red._verify2(this,num);return this.red.mul(this,num)};BN.prototype.redIMul=function redIMul(num){assert(this.red,"redMul works only with red numbers");this.red._verify2(this,num);return this.red.imul(this,num)};BN.prototype.redSqr=function redSqr(){assert(this.red,"redSqr works only with red numbers");this.red._verify1(this);return this.red.sqr(this)};BN.prototype.redISqr=function redISqr(){assert(this.red,"redISqr works only with red numbers");this.red._verify1(this);return this.red.isqr(this)};BN.prototype.redSqrt=function redSqrt(){assert(this.red,"redSqrt works only with red numbers");this.red._verify1(this);return this.red.sqrt(this)};BN.prototype.redInvm=function redInvm(){assert(this.red,"redInvm works only with red numbers");this.red._verify1(this);return this.red.invm(this)};BN.prototype.redNeg=function redNeg(){assert(this.red,"redNeg works only with red numbers");this.red._verify1(this);return this.red.neg(this)};BN.prototype.redPow=function redPow(num){assert(this.red&&!num.red,"redPow(normalNum)");this.red._verify1(this);return this.red.pow(this,num)};var primes={k256:null,p224:null,p192:null,p25519:null};function MPrime(name,p){this.name=name;this.p=new BN(p,16);this.n=this.p.bitLength();this.k=new BN(1).iushln(this.n).isub(this.p);this.tmp=this._tmp()}MPrime.prototype._tmp=function _tmp(){var tmp=new BN(null);tmp.words=new Array(Math.ceil(this.n/13));return tmp};MPrime.prototype.ireduce=function ireduce(num){var r=num;var rlen;do{this.split(r,this.tmp);r=this.imulK(r);r=r.iadd(this.tmp);rlen=r.bitLength()}while(rlen>this.n);var cmp=rlen0){r.isub(this.p)}else{r.strip()}return r};MPrime.prototype.split=function split(input,out){input.iushrn(this.n,0,out)};MPrime.prototype.imulK=function imulK(num){return num.imul(this.k)};function K256(){MPrime.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}inherits(K256,MPrime);K256.prototype.split=function split(input,output){var mask=4194303;var outLen=Math.min(input.length,9);for(var i=0;i>>22;prev=next}prev>>>=22;input.words[i-10]=prev;if(prev===0&&input.length>10){input.length-=10}else{input.length-=9}};K256.prototype.imulK=function imulK(num){num.words[num.length]=0;num.words[num.length+1]=0;num.length+=2;var lo=0;for(var i=0;i>>=26;num.words[i]=lo;carry=hi}if(carry!==0){num.words[num.length++]=carry}return num};BN._prime=function prime(name){if(primes[name])return primes[name];var prime;if(name==="k256"){prime=new K256}else if(name==="p224"){prime=new P224}else if(name==="p192"){prime=new P192}else if(name==="p25519"){prime=new P25519}else{throw new Error("Unknown prime "+name)}primes[name]=prime;return prime};function Red(m){if(typeof m==="string"){var prime=BN._prime(m);this.m=prime.p;this.prime=prime}else{this.m=m;this.prime=null}}Red.prototype._verify1=function _verify1(a){assert(a.negative===0,"red works only with positives");assert(a.red,"red works only with red numbers")};Red.prototype._verify2=function _verify2(a,b){assert((a.negative|b.negative)===0,"red works only with positives");assert(a.red&&a.red===b.red,"red works only with red numbers")};Red.prototype.imod=function imod(a){if(this.prime)return this.prime.ireduce(a)._forceRed(this);return a.umod(this.m)._forceRed(this)};Red.prototype.neg=function neg(a){if(a.isZero()){return a.clone()}return this.m.sub(a)._forceRed(this)};Red.prototype.add=function add(a,b){this._verify2(a,b);var res=a.add(b);if(res.cmp(this.m)>=0){res.isub(this.m)}return res._forceRed(this)};Red.prototype.iadd=function iadd(a,b){this._verify2(a,b);var res=a.iadd(b);if(res.cmp(this.m)>=0){res.isub(this.m)}return res};Red.prototype.sub=function sub(a,b){this._verify2(a,b);var res=a.sub(b);if(res.cmpn(0)<0){res.iadd(this.m)}return res._forceRed(this)};Red.prototype.isub=function isub(a,b){this._verify2(a,b);var res=a.isub(b);if(res.cmpn(0)<0){res.iadd(this.m)}return res};Red.prototype.shl=function shl(a,num){this._verify1(a);return this.imod(a.ushln(num))};Red.prototype.imul=function imul(a,b){this._verify2(a,b);return this.imod(a.imul(b))};Red.prototype.mul=function mul(a,b){this._verify2(a,b);return this.imod(a.mul(b))};Red.prototype.isqr=function isqr(a){return this.imul(a,a.clone())};Red.prototype.sqr=function sqr(a){return this.mul(a,a)};Red.prototype.sqrt=function sqrt(a){if(a.isZero())return a.clone();var mod3=this.m.andln(3);assert(mod3%2===1);if(mod3===3){var pow=this.m.add(new BN(1)).iushrn(2);return this.pow(a,pow)}var q=this.m.subn(1);var s=0;while(!q.isZero()&&q.andln(1)===0){s++;q.iushrn(1)}assert(!q.isZero());var one=new BN(1).toRed(this);var nOne=one.redNeg();var lpow=this.m.subn(1).iushrn(1);var z=this.m.bitLength();z=new BN(2*z*z).toRed(this);while(this.pow(z,lpow).cmp(nOne)!==0){z.redIAdd(nOne)}var c=this.pow(z,q);var r=this.pow(a,q.addn(1).iushrn(1));var t=this.pow(a,q);var m=s;while(t.cmp(one)!==0){var tmp=t;for(var i=0;tmp.cmp(one)!==0;i++){tmp=tmp.redSqr()}assert(i=0;i--){var word=num.words[i];for(var j=start-1;j>=0;j--){var bit=word>>j&1;if(res!==wnd[0]){res=this.sqr(res)}if(bit===0&¤t===0){currentLen=0;continue}current<<=1;current|=bit;currentLen++;if(currentLen!==windowSize&&(i!==0||j!==0))continue;res=this.mul(res,wnd[current]);currentLen=0;current=0}start=26}return res};Red.prototype.convertTo=function convertTo(num){var r=num.umod(this.m);return r===num?r.clone():r};Red.prototype.convertFrom=function convertFrom(num){var res=num.clone();res.red=null;return res};BN.mont=function mont(num){return new Mont(num)};function Mont(m){Red.call(this,m);this.shift=this.m.bitLength();if(this.shift%26!==0){this.shift+=26-this.shift%26}this.r=new BN(1).iushln(this.shift);this.r2=this.imod(this.r.sqr());this.rinv=this.r._invmp(this.m);this.minv=this.rinv.mul(this.r).isubn(1).div(this.m);this.minv=this.minv.umod(this.r);this.minv=this.r.sub(this.minv)}inherits(Mont,Red);Mont.prototype.convertTo=function convertTo(num){return this.imod(num.ushln(this.shift))};Mont.prototype.convertFrom=function convertFrom(num){var r=this.imod(num.mul(this.rinv));r.red=null;return r};Mont.prototype.imul=function imul(a,b){if(a.isZero()||b.isZero()){a.words[0]=0;a.length=1;return a}var t=a.imul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m)}else if(u.cmpn(0)<0){res=u.iadd(this.m)}return res._forceRed(this)};Mont.prototype.mul=function mul(a,b){if(a.isZero()||b.isZero())return new BN(0)._forceRed(this);var t=a.mul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m)}else if(u.cmpn(0)<0){res=u.iadd(this.m)}return res._forceRed(this)};Mont.prototype.invm=function invm(a){var res=this.imod(a._invmp(this.m).mul(this.r2));return res._forceRed(this)}})(typeof module==="undefined"||module,this)},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/browserify-rsa/index.js":[function(require,module,exports){(function(Buffer){var bn=require("bn.js");var randomBytes=require("randombytes");module.exports=crt;function blind(priv){var r=getr(priv);var blinder=r.toRed(bn.mont(priv.modulus)).redPow(new bn(priv.publicExponent)).fromRed();return{blinder:blinder,unblinder:r.invm(priv.modulus)}}function crt(msg,priv){var blinds=blind(priv);var len=priv.modulus.byteLength();var mod=bn.mont(priv.modulus);var blinded=new bn(msg).mul(blinds.blinder).umod(priv.modulus);var c1=blinded.toRed(bn.mont(priv.prime1));var c2=blinded.toRed(bn.mont(priv.prime2));var qinv=priv.coefficient;var p=priv.prime1;var q=priv.prime2;var m1=c1.redPow(priv.exponent1);var m2=c2.redPow(priv.exponent2);m1=m1.fromRed();m2=m2.fromRed();var h=m1.isub(m2).imul(qinv).umod(p);h.imul(q);m2.iadd(h);return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false,len))}crt.getr=getr;function getr(priv){var len=priv.modulus.byteLength();var r=new bn(randomBytes(len));while(r.cmp(priv.modulus)>=0||!r.umod(priv.prime1)||!r.umod(priv.prime2)){r=new bn(randomBytes(len))}return r}}).call(this,require("buffer").Buffer)},{"bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",randombytes:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/randombytes/browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js":[function(require,module,exports){"use strict";var elliptic=exports;elliptic.version=require("../package.json").version;elliptic.utils=require("./elliptic/utils");elliptic.rand=require("brorand");elliptic.hmacDRBG=require("./elliptic/hmac-drbg");elliptic.curve=require("./elliptic/curve");elliptic.curves=require("./elliptic/curves");elliptic.ec=require("./elliptic/ec");elliptic.eddsa=require("./elliptic/eddsa")},{"../package.json":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/package.json","./elliptic/curve":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/index.js","./elliptic/curves":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curves.js","./elliptic/ec":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/ec/index.js","./elliptic/eddsa":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/eddsa/index.js","./elliptic/hmac-drbg":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/hmac-drbg.js","./elliptic/utils":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/utils.js",brorand:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/node_modules/brorand/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/base.js":[function(require,module,exports){"use strict";var BN=require("bn.js");var elliptic=require("../../elliptic");var utils=elliptic.utils;var getNAF=utils.getNAF;var getJSF=utils.getJSF;var assert=utils.assert;function BaseCurve(type,conf){this.type=type;this.p=new BN(conf.p,16);this.red=conf.prime?BN.red(conf.prime):BN.mont(this.p);this.zero=new BN(0).toRed(this.red);this.one=new BN(1).toRed(this.red);this.two=new BN(2).toRed(this.red);this.n=conf.n&&new BN(conf.n,16);this.g=conf.g&&this.pointFromJSON(conf.g,conf.gRed);this._wnafT1=new Array(4);this._wnafT2=new Array(4);this._wnafT3=new Array(4);this._wnafT4=new Array(4)}module.exports=BaseCurve;BaseCurve.prototype.point=function point(){throw new Error("Not implemented")};BaseCurve.prototype.validate=function validate(){throw new Error("Not implemented")};BaseCurve.prototype._fixedNafMul=function _fixedNafMul(p,k){assert(p.precomputed);var doubles=p._getDoubles();var naf=getNAF(k,1);var I=(1<=j;k--)nafW=(nafW<<1)+naf[k];repr.push(nafW)}var a=this.jpoint(null,null,null);var b=this.jpoint(null,null,null);for(var i=I;i>0;i--){for(var j=0;j=0;i--){for(var k=0;i>=0&&naf[i]===0;i--)k++;if(i>=0)k++;acc=acc.dblp(k);if(i<0)break;var z=naf[i];assert(z!==0);if(p.type==="affine"){if(z>0)acc=acc.mixedAdd(wnd[z-1>>1]);else acc=acc.mixedAdd(wnd[-z-1>>1].neg())}else{if(z>0)acc=acc.add(wnd[z-1>>1]);else acc=acc.add(wnd[-z-1>>1].neg())}}return p.type==="affine"?acc.toP():acc};BaseCurve.prototype._wnafMulAdd=function _wnafMulAdd(defW,points,coeffs,len){var wndWidth=this._wnafT1;var wnd=this._wnafT2;var naf=this._wnafT3;var max=0;for(var i=0;i=1;i-=2){var a=i-1;var b=i;if(wndWidth[a]!==1||wndWidth[b]!==1){naf[a]=getNAF(coeffs[a],wndWidth[a]);naf[b]=getNAF(coeffs[b],wndWidth[b]);max=Math.max(naf[a].length,max);max=Math.max(naf[b].length,max);continue}var comb=[points[a],null,null,points[b]];if(points[a].y.cmp(points[b].y)===0){comb[1]=points[a].add(points[b]);comb[2]=points[a].toJ().mixedAdd(points[b].neg())}else if(points[a].y.cmp(points[b].y.redNeg())===0){comb[1]=points[a].toJ().mixedAdd(points[b]);comb[2]=points[a].add(points[b].neg())}else{comb[1]=points[a].toJ().mixedAdd(points[b]); +comb[2]=points[a].toJ().mixedAdd(points[b].neg())}var index=[-3,-1,-5,-7,0,7,5,1,3];var jsf=getJSF(coeffs[a],coeffs[b]);max=Math.max(jsf[0].length,max);naf[a]=new Array(max);naf[b]=new Array(max);for(var j=0;j=0;i--){var k=0;while(i>=0){var zero=true;for(var j=0;j=0)k++;acc=acc.dblp(k);if(i<0)break;for(var j=0;j0)p=wnd[j][z-1>>1];else if(z<0)p=wnd[j][-z-1>>1].neg();if(p.type==="affine")acc=acc.mixedAdd(p);else acc=acc.add(p)}}for(var i=0;i=Math.ceil((k.bitLength()+1)/doubles.step)};BasePoint.prototype._getDoubles=function _getDoubles(step,power){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;var doubles=[this];var acc=this;for(var i=0;i";return""};Point.prototype.isInfinity=function isInfinity(){return this.x.cmpn(0)===0&&this.y.cmp(this.z)===0};Point.prototype._extDbl=function _extDbl(){var a=this.x.redSqr();var b=this.y.redSqr();var c=this.z.redSqr();c=c.redIAdd(c);var d=this.curve._mulA(a);var e=this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);var g=d.redAdd(b);var f=g.redSub(c);var h=d.redSub(b);var nx=e.redMul(f);var ny=g.redMul(h);var nt=e.redMul(h);var nz=f.redMul(g);return this.curve.point(nx,ny,nz,nt)};Point.prototype._projDbl=function _projDbl(){var b=this.x.redAdd(this.y).redSqr();var c=this.x.redSqr();var d=this.y.redSqr();var nx;var ny;var nz;if(this.curve.twisted){var e=this.curve._mulA(c);var f=e.redAdd(d);if(this.zOne){nx=b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));ny=f.redMul(e.redSub(d));nz=f.redSqr().redSub(f).redSub(f)}else{var h=this.z.redSqr();var j=f.redSub(h).redISub(h);nx=b.redSub(c).redISub(d).redMul(j);ny=f.redMul(e.redSub(d));nz=f.redMul(j)}}else{var e=c.redAdd(d);var h=this.curve._mulC(this.c.redMul(this.z)).redSqr();var j=e.redSub(h).redSub(h);nx=this.curve._mulC(b.redISub(e)).redMul(j);ny=this.curve._mulC(e).redMul(c.redISub(d));nz=e.redMul(j)}return this.curve.point(nx,ny,nz)};Point.prototype.dbl=function dbl(){if(this.isInfinity())return this;if(this.curve.extended)return this._extDbl();else return this._projDbl()};Point.prototype._extAdd=function _extAdd(p){var a=this.y.redSub(this.x).redMul(p.y.redSub(p.x));var b=this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));var c=this.t.redMul(this.curve.dd).redMul(p.t);var d=this.z.redMul(p.z.redAdd(p.z));var e=b.redSub(a);var f=d.redSub(c);var g=d.redAdd(c);var h=b.redAdd(a);var nx=e.redMul(f);var ny=g.redMul(h);var nt=e.redMul(h);var nz=f.redMul(g);return this.curve.point(nx,ny,nz,nt)};Point.prototype._projAdd=function _projAdd(p){var a=this.z.redMul(p.z);var b=a.redSqr();var c=this.x.redMul(p.x);var d=this.y.redMul(p.y);var e=this.curve.d.redMul(c).redMul(d);var f=b.redSub(e);var g=b.redAdd(e);var tmp=this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);var nx=a.redMul(f).redMul(tmp);var ny;var nz;if(this.curve.twisted){ny=a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));nz=f.redMul(g)}else{ny=a.redMul(g).redMul(d.redSub(c));nz=this.curve._mulC(f).redMul(g)}return this.curve.point(nx,ny,nz)};Point.prototype.add=function add(p){if(this.isInfinity())return p;if(p.isInfinity())return this;if(this.curve.extended)return this._extAdd(p);else return this._projAdd(p)};Point.prototype.mul=function mul(k){if(this._hasDoubles(k))return this.curve._fixedNafMul(this,k);else return this.curve._wnafMul(this,k)};Point.prototype.mulAdd=function mulAdd(k1,p,k2){return this.curve._wnafMulAdd(1,[this,p],[k1,k2],2)};Point.prototype.normalize=function normalize(){if(this.zOne)return this;var zi=this.z.redInvm();this.x=this.x.redMul(zi);this.y=this.y.redMul(zi);if(this.t)this.t=this.t.redMul(zi);this.z=this.curve.one;this.zOne=true;return this};Point.prototype.neg=function neg(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())};Point.prototype.getX=function getX(){this.normalize();return this.x.fromRed()};Point.prototype.getY=function getY(){this.normalize();return this.y.fromRed()};Point.prototype.eq=function eq(other){return this===other||this.getX().cmp(other.getX())===0&&this.getY().cmp(other.getY())===0};Point.prototype.toP=Point.prototype.normalize;Point.prototype.mixedAdd=Point.prototype.add},{"../../elliptic":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js","../curve":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/index.js","bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/index.js":[function(require,module,exports){"use strict";var curve=exports;curve.base=require("./base");curve.short=require("./short");curve.mont=require("./mont");curve.edwards=require("./edwards")},{"./base":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/base.js","./edwards":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/edwards.js","./mont":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/mont.js","./short":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/short.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/mont.js":[function(require,module,exports){"use strict";var curve=require("../curve");var BN=require("bn.js");var inherits=require("inherits");var Base=curve.base;var elliptic=require("../../elliptic");var utils=elliptic.utils;function MontCurve(conf){Base.call(this,"mont",conf);this.a=new BN(conf.a,16).toRed(this.red);this.b=new BN(conf.b,16).toRed(this.red);this.i4=new BN(4).toRed(this.red).redInvm();this.two=new BN(2).toRed(this.red);this.a24=this.i4.redMul(this.a.redAdd(this.two))}inherits(MontCurve,Base);module.exports=MontCurve;MontCurve.prototype.validate=function validate(point){var x=point.normalize().x;var x2=x.redSqr();var rhs=x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);var y=rhs.redSqrt();return y.redSqr().cmp(rhs)===0};function Point(curve,x,z){Base.BasePoint.call(this,curve,"projective");if(x===null&&z===null){this.x=this.curve.one;this.z=this.curve.zero}else{this.x=new BN(x,16);this.z=new BN(z,16);if(!this.x.red)this.x=this.x.toRed(this.curve.red);if(!this.z.red)this.z=this.z.toRed(this.curve.red)}}inherits(Point,Base.BasePoint);MontCurve.prototype.decodePoint=function decodePoint(bytes,enc){return this.point(utils.toArray(bytes,enc),1)};MontCurve.prototype.point=function point(x,z){return new Point(this,x,z)};MontCurve.prototype.pointFromJSON=function pointFromJSON(obj){return Point.fromJSON(this,obj)};Point.prototype.precompute=function precompute(){};Point.prototype._encode=function _encode(){return this.getX().toArray("be",this.curve.p.byteLength())};Point.fromJSON=function fromJSON(curve,obj){return new Point(curve,obj[0],obj[1]||curve.one)};Point.prototype.inspect=function inspect(){if(this.isInfinity())return"";return""};Point.prototype.isInfinity=function isInfinity(){return this.z.cmpn(0)===0};Point.prototype.dbl=function dbl(){var a=this.x.redAdd(this.z);var aa=a.redSqr();var b=this.x.redSub(this.z);var bb=b.redSqr();var c=aa.redSub(bb);var nx=aa.redMul(bb);var nz=c.redMul(bb.redAdd(this.curve.a24.redMul(c)));return this.curve.point(nx,nz)};Point.prototype.add=function add(){throw new Error("Not supported on Montgomery curve")};Point.prototype.diffAdd=function diffAdd(p,diff){var a=this.x.redAdd(this.z);var b=this.x.redSub(this.z);var c=p.x.redAdd(p.z);var d=p.x.redSub(p.z);var da=d.redMul(a);var cb=c.redMul(b);var nx=diff.z.redMul(da.redAdd(cb).redSqr());var nz=diff.x.redMul(da.redISub(cb).redSqr());return this.curve.point(nx,nz)};Point.prototype.mul=function mul(k){var t=k.clone();var a=this;var b=this.curve.point(null,null);var c=this;for(var bits=[];t.cmpn(0)!==0;t.iushrn(1))bits.push(t.andln(1));for(var i=bits.length-1;i>=0;i--){if(bits[i]===0){a=a.diffAdd(b,c);b=b.dbl()}else{b=a.diffAdd(b,c);a=a.dbl()}}return b};Point.prototype.mulAdd=function mulAdd(){throw new Error("Not supported on Montgomery curve")};Point.prototype.eq=function eq(other){return this.getX().cmp(other.getX())===0};Point.prototype.normalize=function normalize(){this.x=this.x.redMul(this.z.redInvm());this.z=this.curve.one;return this};Point.prototype.getX=function getX(){this.normalize();return this.x.fromRed()}},{"../../elliptic":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js","../curve":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/index.js","bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/short.js":[function(require,module,exports){"use strict";var curve=require("../curve");var elliptic=require("../../elliptic");var BN=require("bn.js");var inherits=require("inherits");var Base=curve.base;var assert=elliptic.utils.assert;function ShortCurve(conf){Base.call(this,"short",conf);this.a=new BN(conf.a,16).toRed(this.red);this.b=new BN(conf.b,16).toRed(this.red);this.tinv=this.two.redInvm();this.zeroA=this.a.fromRed().cmpn(0)===0;this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0;this.endo=this._getEndomorphism(conf);this._endoWnafT1=new Array(4);this._endoWnafT2=new Array(4)}inherits(ShortCurve,Base);module.exports=ShortCurve;ShortCurve.prototype._getEndomorphism=function _getEndomorphism(conf){if(!this.zeroA||!this.g||!this.n||this.p.modn(3)!==1)return;var beta;var lambda;if(conf.beta){beta=new BN(conf.beta,16).toRed(this.red)}else{var betas=this._getEndoRoots(this.p);beta=betas[0].cmp(betas[1])<0?betas[0]:betas[1];beta=beta.toRed(this.red)}if(conf.lambda){lambda=new BN(conf.lambda,16)}else{var lambdas=this._getEndoRoots(this.n);if(this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta))===0){lambda=lambdas[0]}else{lambda=lambdas[1];assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta))===0)}}var basis;if(conf.basis){basis=conf.basis.map(function(vec){return{a:new BN(vec.a,16),b:new BN(vec.b,16)}})}else{basis=this._getEndoBasis(lambda)}return{beta:beta,lambda:lambda,basis:basis}};ShortCurve.prototype._getEndoRoots=function _getEndoRoots(num){var red=num===this.p?this.red:BN.mont(num);var tinv=new BN(2).toRed(red).redInvm();var ntinv=tinv.redNeg();var s=new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);var l1=ntinv.redAdd(s).fromRed();var l2=ntinv.redSub(s).fromRed();return[l1,l2]};ShortCurve.prototype._getEndoBasis=function _getEndoBasis(lambda){var aprxSqrt=this.n.ushrn(Math.floor(this.n.bitLength()/2));var u=lambda;var v=this.n.clone();var x1=new BN(1);var y1=new BN(0);var x2=new BN(0);var y2=new BN(1);var a0;var b0;var a1;var b1;var a2;var b2;var prevR;var i=0;var r;var x;while(u.cmpn(0)!==0){var q=v.div(u);r=v.sub(q.mul(u));x=x2.sub(q.mul(x1));var y=y2.sub(q.mul(y1));if(!a1&&r.cmp(aprxSqrt)<0){a0=prevR.neg();b0=x1;a1=r.neg();b1=x}else if(a1&&++i===2){break}prevR=r;v=u;u=r;x2=x1;x1=x;y2=y1;y1=y}a2=r.neg();b2=x;var len1=a1.sqr().add(b1.sqr());var len2=a2.sqr().add(b2.sqr());if(len2.cmp(len1)>=0){a2=a0;b2=b0}if(a1.negative){a1=a1.neg();b1=b1.neg()}if(a2.negative){a2=a2.neg();b2=b2.neg()}return[{a:a1,b:b1},{a:a2,b:b2}]};ShortCurve.prototype._endoSplit=function _endoSplit(k){var basis=this.endo.basis;var v1=basis[0];var v2=basis[1];var c1=v2.b.mul(k).divRound(this.n);var c2=v1.b.neg().mul(k).divRound(this.n);var p1=c1.mul(v1.a);var p2=c2.mul(v2.a);var q1=c1.mul(v1.b);var q2=c2.mul(v2.b);var k1=k.sub(p1).sub(p2);var k2=q1.add(q2).neg();return{k1:k1,k2:k2}};ShortCurve.prototype.pointFromX=function pointFromX(x,odd){x=new BN(x,16);if(!x.red)x=x.toRed(this.red);var y2=x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);var y=y2.redSqrt();if(y.redSqr().redSub(y2).cmp(this.zero)!==0)throw new Error("invalid point");var isOdd=y.fromRed().isOdd();if(odd&&!isOdd||!odd&&isOdd)y=y.redNeg();return this.point(x,y)};ShortCurve.prototype.validate=function validate(point){if(point.inf)return true;var x=point.x;var y=point.y;var ax=this.a.redMul(x);var rhs=x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);return y.redSqr().redISub(rhs).cmpn(0)===0};ShortCurve.prototype._endoWnafMulAdd=function _endoWnafMulAdd(points,coeffs){var npoints=this._endoWnafT1;var ncoeffs=this._endoWnafT2;for(var i=0;i";return""};Point.prototype.isInfinity=function isInfinity(){return this.inf};Point.prototype.add=function add(p){if(this.inf)return p;if(p.inf)return this;if(this.eq(p))return this.dbl();if(this.neg().eq(p))return this.curve.point(null,null);if(this.x.cmp(p.x)===0)return this.curve.point(null,null);var c=this.y.redSub(p.y);if(c.cmpn(0)!==0)c=c.redMul(this.x.redSub(p.x).redInvm());var nx=c.redSqr().redISub(this.x).redISub(p.x);var ny=c.redMul(this.x.redSub(nx)).redISub(this.y);return this.curve.point(nx,ny)};Point.prototype.dbl=function dbl(){if(this.inf)return this;var ys1=this.y.redAdd(this.y);if(ys1.cmpn(0)===0)return this.curve.point(null,null);var a=this.curve.a;var x2=this.x.redSqr();var dyinv=ys1.redInvm();var c=x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);var nx=c.redSqr().redISub(this.x.redAdd(this.x));var ny=c.redMul(this.x.redSub(nx)).redISub(this.y);return this.curve.point(nx,ny)};Point.prototype.getX=function getX(){return this.x.fromRed()};Point.prototype.getY=function getY(){return this.y.fromRed()};Point.prototype.mul=function mul(k){k=new BN(k,16);if(this._hasDoubles(k))return this.curve._fixedNafMul(this,k);else if(this.curve.endo)return this.curve._endoWnafMulAdd([this],[k]);else return this.curve._wnafMul(this,k)};Point.prototype.mulAdd=function mulAdd(k1,p2,k2){var points=[this,p2];var coeffs=[k1,k2];if(this.curve.endo)return this.curve._endoWnafMulAdd(points,coeffs);else return this.curve._wnafMulAdd(1,points,coeffs,2)};Point.prototype.eq=function eq(p){return this===p||this.inf===p.inf&&(this.inf||this.x.cmp(p.x)===0&&this.y.cmp(p.y)===0)};Point.prototype.neg=function neg(_precompute){if(this.inf)return this;var res=this.curve.point(this.x,this.y.redNeg());if(_precompute&&this.precomputed){var pre=this.precomputed;var negate=function(p){return p.neg()};res.precomputed={naf:pre.naf&&{wnd:pre.naf.wnd,points:pre.naf.points.map(negate)},doubles:pre.doubles&&{step:pre.doubles.step,points:pre.doubles.points.map(negate)}}}return res};Point.prototype.toJ=function toJ(){if(this.inf)return this.curve.jpoint(null,null,null);var res=this.curve.jpoint(this.x,this.y,this.curve.one);return res};function JPoint(curve,x,y,z){Base.BasePoint.call(this,curve,"jacobian");if(x===null&&y===null&&z===null){this.x=this.curve.one;this.y=this.curve.one;this.z=new BN(0)}else{this.x=new BN(x,16);this.y=new BN(y,16);this.z=new BN(z,16)}if(!this.x.red)this.x=this.x.toRed(this.curve.red);if(!this.y.red)this.y=this.y.toRed(this.curve.red);if(!this.z.red)this.z=this.z.toRed(this.curve.red);this.zOne=this.z===this.curve.one}inherits(JPoint,Base.BasePoint);ShortCurve.prototype.jpoint=function jpoint(x,y,z){return new JPoint(this,x,y,z)};JPoint.prototype.toP=function toP(){if(this.isInfinity())return this.curve.point(null,null);var zinv=this.z.redInvm();var zinv2=zinv.redSqr();var ax=this.x.redMul(zinv2);var ay=this.y.redMul(zinv2).redMul(zinv);return this.curve.point(ax,ay)};JPoint.prototype.neg=function neg(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)};JPoint.prototype.add=function add(p){if(this.isInfinity())return p;if(p.isInfinity())return this;var pz2=p.z.redSqr();var z2=this.z.redSqr();var u1=this.x.redMul(pz2);var u2=p.x.redMul(z2);var s1=this.y.redMul(pz2.redMul(p.z));var s2=p.y.redMul(z2.redMul(this.z));var h=u1.redSub(u2);var r=s1.redSub(s2);if(h.cmpn(0)===0){if(r.cmpn(0)!==0)return this.curve.jpoint(null,null,null);else return this.dbl()}var h2=h.redSqr();var h3=h2.redMul(h);var v=u1.redMul(h2);var nx=r.redSqr().redIAdd(h3).redISub(v).redISub(v);var ny=r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));var nz=this.z.redMul(p.z).redMul(h);return this.curve.jpoint(nx,ny,nz)};JPoint.prototype.mixedAdd=function mixedAdd(p){if(this.isInfinity())return p.toJ();if(p.isInfinity())return this;var z2=this.z.redSqr();var u1=this.x;var u2=p.x.redMul(z2);var s1=this.y;var s2=p.y.redMul(z2).redMul(this.z);var h=u1.redSub(u2);var r=s1.redSub(s2);if(h.cmpn(0)===0){if(r.cmpn(0)!==0)return this.curve.jpoint(null,null,null);else return this.dbl()}var h2=h.redSqr();var h3=h2.redMul(h);var v=u1.redMul(h2);var nx=r.redSqr().redIAdd(h3).redISub(v).redISub(v);var ny=r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));var nz=this.z.redMul(h);return this.curve.jpoint(nx,ny,nz)};JPoint.prototype.dblp=function dblp(pow){if(pow===0)return this;if(this.isInfinity())return this;if(!pow)return this.dbl();if(this.curve.zeroA||this.curve.threeA){var r=this;for(var i=0;i";return""};JPoint.prototype.isInfinity=function isInfinity(){return this.z.cmpn(0)===0}},{"../../elliptic":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js","../curve":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curve/index.js","bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js", +inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/curves.js":[function(require,module,exports){"use strict";var curves=exports;var hash=require("hash.js");var elliptic=require("../elliptic");var assert=elliptic.utils.assert;function PresetCurve(options){if(options.type==="short")this.curve=new elliptic.curve.short(options);else if(options.type==="edwards")this.curve=new elliptic.curve.edwards(options);else this.curve=new elliptic.curve.mont(options);this.g=this.curve.g;this.n=this.curve.n;this.hash=options.hash;assert(this.g.validate(),"Invalid curve");assert(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}curves.PresetCurve=PresetCurve;function defineCurve(name,options){Object.defineProperty(curves,name,{configurable:true,enumerable:true,get:function(){var curve=new PresetCurve(options);Object.defineProperty(curves,name,{configurable:true,enumerable:true,value:curve});return curve}})}defineCurve("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:hash.sha256,gRed:false,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]});defineCurve("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:hash.sha256,gRed:false,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]});defineCurve("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:hash.sha256,gRed:false,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]});defineCurve("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff "+"fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff "+"fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f "+"5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 "+"f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:hash.sha384,gRed:false,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 "+"5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 "+"0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]});defineCurve("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff "+"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff "+"ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff "+"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff "+"ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b "+"99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd "+"3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff "+"ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 "+"f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:hash.sha512,gRed:false,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 "+"053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 "+"a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 "+"579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 "+"3fad0761 353c7086 a272c240 88be9476 9fd16650"]});defineCurve("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:hash.sha256,gRed:false,g:["9"]});defineCurve("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:hash.sha256,gRed:false,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var pre;try{pre=require("./precomputed/secp256k1")}catch(e){pre=undefined}defineCurve("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:hash.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:false,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",pre]})},{"../elliptic":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js","./precomputed/secp256k1":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","hash.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/node_modules/hash.js/lib/hash.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/ec/index.js":[function(require,module,exports){"use strict";var BN=require("bn.js");var elliptic=require("../../elliptic");var utils=elliptic.utils;var assert=utils.assert;var KeyPair=require("./key");var Signature=require("./signature");function EC(options){if(!(this instanceof EC))return new EC(options);if(typeof options==="string"){assert(elliptic.curves.hasOwnProperty(options),"Unknown curve "+options);options=elliptic.curves[options]}if(options instanceof elliptic.curves.PresetCurve)options={curve:options};this.curve=options.curve.curve;this.n=this.curve.n;this.nh=this.n.ushrn(1);this.g=this.curve.g;this.g=options.curve.g;this.g.precompute(options.curve.n.bitLength()+1);this.hash=options.hash||options.curve.hash}module.exports=EC;EC.prototype.keyPair=function keyPair(options){return new KeyPair(this,options)};EC.prototype.keyFromPrivate=function keyFromPrivate(priv,enc){return KeyPair.fromPrivate(this,priv,enc)};EC.prototype.keyFromPublic=function keyFromPublic(pub,enc){return KeyPair.fromPublic(this,pub,enc)};EC.prototype.genKeyPair=function genKeyPair(options){if(!options)options={};var drbg=new elliptic.hmacDRBG({hash:this.hash,pers:options.pers,entropy:options.entropy||elliptic.rand(this.hash.hmacStrength),nonce:this.n.toArray()});var bytes=this.n.byteLength();var ns2=this.n.sub(new BN(2));do{var priv=new BN(drbg.generate(bytes));if(priv.cmp(ns2)>0)continue;priv.iaddn(1);return this.keyFromPrivate(priv)}while(true)};EC.prototype._truncateToN=function truncateToN(msg,truncOnly){var delta=msg.byteLength()*8-this.n.bitLength();if(delta>0)msg=msg.ushrn(delta);if(!truncOnly&&msg.cmp(this.n)>=0)return msg.sub(this.n);else return msg};EC.prototype.sign=function sign(msg,key,enc,options){if(typeof enc==="object"){options=enc;enc=null}if(!options)options={};key=this.keyFromPrivate(key,enc);msg=this._truncateToN(new BN(msg,16));var bytes=this.n.byteLength();var bkey=key.getPrivate().toArray("be",bytes);var nonce=msg.toArray("be",bytes);var drbg=new elliptic.hmacDRBG({hash:this.hash,entropy:bkey,nonce:nonce,pers:options.pers,persEnc:options.persEnc});var ns1=this.n.sub(new BN(1));for(var iter=0;true;iter++){var k=options.k?options.k(iter):new BN(drbg.generate(this.n.byteLength()));k=this._truncateToN(k,true);if(k.cmpn(1)<=0||k.cmp(ns1)>=0)continue;var kp=this.g.mul(k);if(kp.isInfinity())continue;var kpX=kp.getX();var r=kpX.umod(this.n);if(r.cmpn(0)===0)continue;var s=k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));s=s.umod(this.n);if(s.cmpn(0)===0)continue;var recoveryParam=(kp.getY().isOdd()?1:0)|(kpX.cmp(r)!==0?2:0);if(options.canonical&&s.cmp(this.nh)>0){s=this.n.sub(s);recoveryParam^=1}return new Signature({r:r,s:s,recoveryParam:recoveryParam})}};EC.prototype.verify=function verify(msg,signature,key,enc){msg=this._truncateToN(new BN(msg,16));key=this.keyFromPublic(key,enc);signature=new Signature(signature,"hex");var r=signature.r;var s=signature.s;if(r.cmpn(1)<0||r.cmp(this.n)>=0)return false;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return false;var sinv=s.invm(this.n);var u1=sinv.mul(msg).umod(this.n);var u2=sinv.mul(r).umod(this.n);var p=this.g.mulAdd(u1,key.getPublic(),u2);if(p.isInfinity())return false;return p.getX().umod(this.n).cmp(r)===0};EC.prototype.recoverPubKey=function(msg,signature,j,enc){assert((3&j)===j,"The recovery param is more than two bits");signature=new Signature(signature,enc);var n=this.n;var e=new BN(msg);var r=signature.r;var s=signature.s;var isYOdd=j&1;var isSecondKey=j>>1;if(r.cmp(this.curve.p.umod(this.curve.n))>=0&&isSecondKey)throw new Error("Unable to find sencond key candinate");if(isSecondKey)r=this.curve.pointFromX(r.add(this.curve.n),isYOdd);else r=this.curve.pointFromX(r,isYOdd);var eNeg=n.sub(e);var rInv=signature.r.invm(n);return this.g.mulAdd(eNeg,r,s).mul(rInv)};EC.prototype.getKeyRecoveryParam=function(e,signature,Q,enc){signature=new Signature(signature,enc);if(signature.recoveryParam!==null)return signature.recoveryParam;for(var i=0;i<4;i++){var Qprime;try{Qprime=this.recoverPubKey(e,signature,i)}catch(e){continue}if(Qprime.eq(Q))return i}throw new Error("Unable to find valid recovery factor")}},{"../../elliptic":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js","./key":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/ec/key.js","./signature":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/ec/signature.js","bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/ec/key.js":[function(require,module,exports){"use strict";var BN=require("bn.js");function KeyPair(ec,options){this.ec=ec;this.priv=null;this.pub=null;if(options.priv)this._importPrivate(options.priv,options.privEnc);if(options.pub)this._importPublic(options.pub,options.pubEnc)}module.exports=KeyPair;KeyPair.fromPublic=function fromPublic(ec,pub,enc){if(pub instanceof KeyPair)return pub;return new KeyPair(ec,{pub:pub,pubEnc:enc})};KeyPair.fromPrivate=function fromPrivate(ec,priv,enc){if(priv instanceof KeyPair)return priv;return new KeyPair(ec,{priv:priv,privEnc:enc})};KeyPair.prototype.validate=function validate(){var pub=this.getPublic();if(pub.isInfinity())return{result:false,reason:"Invalid public key"};if(!pub.validate())return{result:false,reason:"Public key is not a point"};if(!pub.mul(this.ec.curve.n).isInfinity())return{result:false,reason:"Public key * N != O"};return{result:true,reason:null}};KeyPair.prototype.getPublic=function getPublic(compact,enc){if(typeof compact==="string"){enc=compact;compact=null}if(!this.pub)this.pub=this.ec.g.mul(this.priv);if(!enc)return this.pub;return this.pub.encode(enc,compact)};KeyPair.prototype.getPrivate=function getPrivate(enc){if(enc==="hex")return this.priv.toString(16,2);else return this.priv};KeyPair.prototype._importPrivate=function _importPrivate(key,enc){this.priv=new BN(key,enc||16);this.priv=this.priv.umod(this.ec.curve.n)};KeyPair.prototype._importPublic=function _importPublic(key,enc){if(key.x||key.y){this.pub=this.ec.curve.point(key.x,key.y);return}this.pub=this.ec.curve.decodePoint(key,enc)};KeyPair.prototype.derive=function derive(pub){return pub.mul(this.priv).getX()};KeyPair.prototype.sign=function sign(msg,enc,options){return this.ec.sign(msg,this,enc,options)};KeyPair.prototype.verify=function verify(msg,signature){return this.ec.verify(msg,signature,this)};KeyPair.prototype.inspect=function inspect(){return""}},{"bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/ec/signature.js":[function(require,module,exports){"use strict";var BN=require("bn.js");var elliptic=require("../../elliptic");var utils=elliptic.utils;var assert=utils.assert;function Signature(options,enc){if(options instanceof Signature)return options;if(this._importDER(options,enc))return;assert(options.r&&options.s,"Signature without r or s");this.r=new BN(options.r,16);this.s=new BN(options.s,16);if(options.recoveryParam===undefined)this.recoveryParam=null;else this.recoveryParam=options.recoveryParam}module.exports=Signature;function Position(){this.place=0}function getLength(buf,p){var initial=buf[p.place++];if(!(initial&128)){return initial}var octetLen=initial&15;var val=0;for(var i=0,off=p.place;i>>3);arr.push(octets|128);while(--octets){arr.push(len>>>(octets<<3)&255)}arr.push(len)}Signature.prototype.toDER=function toDER(enc){var r=this.r.toArray();var s=this.s.toArray();if(r[0]&128)r=[0].concat(r);if(s[0]&128)s=[0].concat(s);r=rmPadding(r);s=rmPadding(s);while(!s[0]&&!(s[1]&128)){s=s.slice(1)}var arr=[2];constructLength(arr,r.length);arr=arr.concat(r);arr.push(2);constructLength(arr,s.length);var backHalf=arr.concat(s);var res=[48];constructLength(res,backHalf.length);res=res.concat(backHalf);return utils.encode(res,enc)}},{"../../elliptic":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js","bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic/eddsa/index.js":[function(require,module,exports){"use strict";var hash=require("hash.js");var elliptic=require("../../elliptic");var utils=elliptic.utils;var assert=utils.assert;var parseBytes=utils.parseBytes;var KeyPair=require("./key");var Signature=require("./signature");function EDDSA(curve){assert(curve==="ed25519","only tested with ed25519 so far");if(!(this instanceof EDDSA))return new EDDSA(curve);var curve=elliptic.curves[curve].curve;this.curve=curve;this.g=curve.g;this.g.precompute(curve.n.bitLength()+1);this.pointClass=curve.point().constructor;this.encodingLength=Math.ceil(curve.n.bitLength()/8);this.hash=hash.sha512}module.exports=EDDSA;EDDSA.prototype.sign=function sign(message,secret){message=parseBytes(message);var key=this.keyFromSecret(secret);var r=this.hashInt(key.messagePrefix(),message);var R=this.g.mul(r);var Rencoded=this.encodePoint(R);var s_=this.hashInt(Rencoded,key.pubBytes(),message).mul(key.priv());var S=r.add(s_).umod(this.curve.n);return this.makeSignature({R:R,S:S,Rencoded:Rencoded})};EDDSA.prototype.verify=function verify(message,sig,pub){message=parseBytes(message);sig=this.makeSignature(sig);var key=this.keyFromPublic(pub);var h=this.hashInt(sig.Rencoded(),key.pubBytes(),message);var SG=this.g.mul(sig.S());var RplusAh=sig.R().add(key.pub().mul(h));return RplusAh.eq(SG)};EDDSA.prototype.hashInt=function hashInt(){var hash=this.hash();for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits");this._init(entropy,nonce,pers)}module.exports=HmacDRBG;HmacDRBG.prototype._init=function init(entropy,nonce,pers){var seed=entropy.concat(nonce).concat(pers);this.K=new Array(this.outLen/8);this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits");this._update(entropy.concat(add||[]));this.reseed=1};HmacDRBG.prototype.generate=function generate(len,enc,add,addEnc){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");if(typeof enc!=="string"){addEnc=add;add=enc;enc=null}if(add){add=utils.toArray(add,addEnc);this._update(add)}var temp=[];while(temp.length>8;var lo=c&255;if(hi)res.push(hi,lo);else res.push(lo)}}else if(enc==="hex"){msg=msg.replace(/[^a-z0-9]+/gi,"");if(msg.length%2!==0)msg="0"+msg;for(var i=0;i=0){var z;if(k.isOdd()){var mod=k.andln(ws-1);if(mod>(ws>>1)-1)z=(ws>>1)-mod;else z=mod;k.isubn(z)}else{z=0}naf.push(z);var shift=k.cmpn(0)!==0&&k.andln(ws-1)===0?w+1:1;for(var i=1;i0||k2.cmpn(-d2)>0){var m14=k1.andln(3)+d1&3;var m24=k2.andln(3)+d2&3;if(m14===3)m14=-1;if(m24===3)m24=-1;var u1;if((m14&1)===0){u1=0}else{var m8=k1.andln(7)+d1&7;if((m8===3||m8===5)&&m24===2)u1=-m14;else u1=m14}jsf[0].push(u1);var u2;if((m24&1)===0){u2=0}else{var m8=k2.andln(7)+d2&7;if((m8===3||m8===5)&&m14===2)u2=-m24;else u2=m24}jsf[1].push(u2);if(2*d1===u1+1)d1=1-d1;if(2*d2===u2+1)d2=1-d2;k1.iushrn(1);k2.iushrn(1)}return jsf}utils.getJSF=getJSF;function cachedProperty(obj,computer){var name=computer.name;var key="_"+name;obj.prototype[name]=function cachedProperty(){return this[key]!==undefined?this[key]:this[key]=computer.call(this)}}utils.cachedProperty=cachedProperty;function parseBytes(bytes){return typeof bytes==="string"?utils.toArray(bytes,"hex"):bytes}utils.parseBytes=parseBytes;function intFromLE(bytes){return new BN(bytes,"hex","le")}utils.intFromLE=intFromLE},{"bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/node_modules/brorand/index.js":[function(require,module,exports){var r;module.exports=function rand(len){if(!r)r=new Rand(null);return r.generate(len)};function Rand(rand){this.rand=rand}module.exports.Rand=Rand;Rand.prototype.generate=function generate(len){return this._rand(len)};if(typeof window==="object"){if(window.crypto&&window.crypto.getRandomValues){Rand.prototype._rand=function _rand(n){var arr=new Uint8Array(n);window.crypto.getRandomValues(arr);return arr}}else if(window.msCrypto&&window.msCrypto.getRandomValues){Rand.prototype._rand=function _rand(n){var arr=new Uint8Array(n);window.msCrypto.getRandomValues(arr);return arr}}else{Rand.prototype._rand=function(){throw new Error("Not implemented yet")}}}else{try{var crypto=require("cry"+"pto");Rand.prototype._rand=function _rand(n){return crypto.randomBytes(n)}}catch(e){Rand.prototype._rand=function _rand(n){var res=new Uint8Array(n);for(var i=0;i=this._delta8){msg=this.pending;var r=msg.length%this._delta8;this.pending=msg.slice(msg.length-r,msg.length);if(this.pending.length===0)this.pending=null;msg=utils.join32(msg,0,msg.length-r,this.endian);for(var i=0;i>>24&255;res[i++]=len>>>16&255;res[i++]=len>>>8&255;res[i++]=len&255}else{res[i++]=len&255;res[i++]=len>>>8&255;res[i++]=len>>>16&255;res[i++]=len>>>24&255;res[i++]=0;res[i++]=0;res[i++]=0;res[i++]=0;for(var t=8;tthis.blockSize)key=(new this.Hash).update(key).digest();assert(key.length<=this.blockSize);for(var i=key.length;i>>3}function g1_256(x){return rotr32(x,17)^rotr32(x,19)^x>>>10}function ft_1(s,x,y,z){if(s===0)return ch32(x,y,z);if(s===1||s===3)return p32(x,y,z);if(s===2)return maj32(x,y,z)}function ch64_hi(xh,xl,yh,yl,zh,zl){var r=xh&yh^~xh&zh;if(r<0)r+=4294967296;return r}function ch64_lo(xh,xl,yh,yl,zh,zl){var r=xl&yl^~xl&zl;if(r<0)r+=4294967296;return r}function maj64_hi(xh,xl,yh,yl,zh,zl){var r=xh&yh^xh&zh^yh&zh;if(r<0)r+=4294967296;return r}function maj64_lo(xh,xl,yh,yl,zh,zl){var r=xl&yl^xl&zl^yl&zl;if(r<0)r+=4294967296;return r}function s0_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,28);var c1_hi=rotr64_hi(xl,xh,2);var c2_hi=rotr64_hi(xl,xh,7);var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=4294967296;return r}function s0_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,28);var c1_lo=rotr64_lo(xl,xh,2);var c2_lo=rotr64_lo(xl,xh,7);var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=4294967296;return r}function s1_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,14);var c1_hi=rotr64_hi(xh,xl,18);var c2_hi=rotr64_hi(xl,xh,9);var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=4294967296;return r}function s1_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,14);var c1_lo=rotr64_lo(xh,xl,18);var c2_lo=rotr64_lo(xl,xh,9);var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=4294967296;return r}function g0_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,1);var c1_hi=rotr64_hi(xh,xl,8);var c2_hi=shr64_hi(xh,xl,7);var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=4294967296;return r}function g0_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,1);var c1_lo=rotr64_lo(xh,xl,8);var c2_lo=shr64_lo(xh,xl,7);var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=4294967296;return r}function g1_512_hi(xh,xl){var c0_hi=rotr64_hi(xh,xl,19);var c1_hi=rotr64_hi(xl,xh,29);var c2_hi=shr64_hi(xh,xl,6);var r=c0_hi^c1_hi^c2_hi;if(r<0)r+=4294967296;return r}function g1_512_lo(xh,xl){var c0_lo=rotr64_lo(xh,xl,19);var c1_lo=rotr64_lo(xl,xh,29);var c2_lo=shr64_lo(xh,xl,6);var r=c0_lo^c1_lo^c2_lo;if(r<0)r+=4294967296;return r}},{"../hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/node_modules/hash.js/lib/hash.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/node_modules/hash.js/lib/hash/utils.js":[function(require,module,exports){var utils=exports;var inherits=require("inherits");function toArray(msg,enc){if(Array.isArray(msg))return msg.slice();if(!msg)return[];var res=[];if(typeof msg==="string"){if(!enc){for(var i=0;i>8;var lo=c&255;if(hi)res.push(hi,lo);else res.push(lo)}}else if(enc==="hex"){msg=msg.replace(/[^a-z0-9]+/gi,"");if(msg.length%2!==0)msg="0"+msg;for(var i=0;i>>24|w>>>8&65280|w<<8&16711680|(w&255)<<24;return res>>>0}utils.htonl=htonl;function toHex32(msg,endian){var res="";for(var i=0;i>>0}return res}utils.join32=join32;function split32(msg,endian){var res=new Array(msg.length*4);for(var i=0,k=0;i>>24;res[k+1]=m>>>16&255;res[k+2]=m>>>8&255;res[k+3]=m&255}else{res[k+3]=m>>>24;res[k+2]=m>>>16&255;res[k+1]=m>>>8&255;res[k]=m&255}}return res}utils.split32=split32;function rotr32(w,b){return w>>>b|w<<32-b}utils.rotr32=rotr32;function rotl32(w,b){return w<>>32-b}utils.rotl32=rotl32;function sum32(a,b){return a+b>>>0}utils.sum32=sum32;function sum32_3(a,b,c){return a+b+c>>>0}utils.sum32_3=sum32_3;function sum32_4(a,b,c,d){return a+b+c+d>>>0}utils.sum32_4=sum32_4;function sum32_5(a,b,c,d,e){return a+b+c+d+e>>>0}utils.sum32_5=sum32_5;function assert(cond,msg){if(!cond)throw new Error(msg||"Assertion failed")}utils.assert=assert;utils.inherits=inherits;function sum64(buf,pos,ah,al){var bh=buf[pos];var bl=buf[pos+1];var lo=al+bl>>>0;var hi=(lo>>0;buf[pos+1]=lo}exports.sum64=sum64;function sum64_hi(ah,al,bh,bl){var lo=al+bl>>>0;var hi=(lo>>0}exports.sum64_hi=sum64_hi;function sum64_lo(ah,al,bh,bl){var lo=al+bl;return lo>>>0}exports.sum64_lo=sum64_lo;function sum64_4_hi(ah,al,bh,bl,ch,cl,dh,dl){var carry=0;var lo=al;lo=lo+bl>>>0;carry+=lo>>0;carry+=lo>>0;carry+=lo>>0}exports.sum64_4_hi=sum64_4_hi;function sum64_4_lo(ah,al,bh,bl,ch,cl,dh,dl){var lo=al+bl+cl+dl;return lo>>>0}exports.sum64_4_lo=sum64_4_lo;function sum64_5_hi(ah,al,bh,bl,ch,cl,dh,dl,eh,el){var carry=0;var lo=al;lo=lo+bl>>>0;carry+=lo>>0;carry+=lo>>0;carry+=lo>>0;carry+=lo>>0}exports.sum64_5_hi=sum64_5_hi;function sum64_5_lo(ah,al,bh,bl,ch,cl,dh,dl,eh,el){var lo=al+bl+cl+dl+el;return lo>>>0}exports.sum64_5_lo=sum64_5_lo;function rotr64_hi(ah,al,num){var r=al<<32-num|ah>>>num;return r>>>0}exports.rotr64_hi=rotr64_hi;function rotr64_lo(ah,al,num){var r=ah<<32-num|al>>>num;return r>>>0}exports.rotr64_lo=rotr64_lo;function shr64_hi(ah,al,num){return ah>>>num}exports.shr64_hi=shr64_hi;function shr64_lo(ah,al,num){var r=ah<<32-num|al>>>num;return r>>>0}exports.shr64_lo=shr64_lo},{inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/package.json":[function(require,module,exports){module.exports={name:"elliptic",version:"6.2.3",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{coverage:"npm run unit --coverage",coveralls:"npm run coverage && cat ./coverage/lcov.info | coveralls",jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/*-test.js"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{coveralls:"^2.11.3",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"c32f20b22b420eb6af3c6dda28963deb7facf823",_id:"elliptic@6.2.3",_shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",_from:"elliptic@>=6.0.0 <7.0.0",_npmVersion:"3.3.12",_nodeVersion:"5.4.1",_npmUser:{name:"indutny",email:"fedor@indutny.com"},dist:{shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz",readme:"ERROR: No README data found!"}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/aesid.json":[function(require,module,exports){module.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/asn1.js":[function(require,module,exports){var asn1=require("asn1.js");var RSAPrivateKey=asn1.define("RSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())});exports.RSAPrivateKey=RSAPrivateKey;var RSAPublicKey=asn1.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});exports.RSAPublicKey=RSAPublicKey;var PublicKey=asn1.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(AlgorithmIdentifier),this.key("subjectPublicKey").bitstr())});exports.PublicKey=PublicKey;var AlgorithmIdentifier=asn1.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())});var PrivateKeyInfo=asn1.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(AlgorithmIdentifier),this.key("subjectPrivateKey").octstr())});exports.PrivateKey=PrivateKeyInfo;var EncryptedPrivateKeyInfo=asn1.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});exports.EncryptedPrivateKey=EncryptedPrivateKeyInfo;var DSAPrivateKey=asn1.define("DSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())});exports.DSAPrivateKey=DSAPrivateKey;exports.DSAparam=asn1.define("DSAparam",function(){this.int()});var ECPrivateKey=asn1.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(ECParameters),this.key("publicKey").optional().explicit(1).bitstr())});exports.ECPrivateKey=ECPrivateKey;var ECParameters=asn1.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});exports.signature=asn1.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},{"asn1.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/fixProc.js":[function(require,module,exports){(function(Buffer){var findProc=/Proc-Type: 4,ENCRYPTED\r?\nDEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\r?\n\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n/m;var startRegex=/^-----BEGIN (.*) KEY-----\r?\n/m;var fullRegex=/^-----BEGIN (.*) KEY-----\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n-----END \1 KEY-----$/m;var evp=require("evp_bytestokey");var ciphers=require("browserify-aes");module.exports=function(okey,password){var key=okey.toString();var match=key.match(findProc);var decrypted;if(!match){var match2=key.match(fullRegex);decrypted=new Buffer(match2[2].replace(/\r?\n/g,""),"base64")}else{var suite="aes"+match[1];var iv=new Buffer(match[2],"hex");var cipherText=new Buffer(match[3].replace(/\r?\n/g,""),"base64");var cipherKey=evp(password,iv.slice(0,8),parseInt(match[1],10)).key;var out=[];var cipher=ciphers.createDecipheriv(suite,cipherKey,iv);out.push(cipher.update(cipherText));out.push(cipher.final());decrypted=Buffer.concat(out)}var tag=key.match(startRegex)[1]+" KEY";return{tag:tag,data:decrypted}}}).call(this,require("buffer").Buffer)},{"browserify-aes":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/browserify-aes/browser.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",evp_bytestokey:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/evp_bytestokey/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/index.js":[function(require,module,exports){(function(Buffer){var asn1=require("./asn1");var aesid=require("./aesid.json");var fixProc=require("./fixProc");var ciphers=require("browserify-aes");var compat=require("pbkdf2");module.exports=parseKeys;function parseKeys(buffer){var password;if(typeof buffer==="object"&&!Buffer.isBuffer(buffer)){password=buffer.passphrase;buffer=buffer.key}if(typeof buffer==="string"){buffer=new Buffer(buffer)}var stripped=fixProc(buffer,password);var type=stripped.tag;var data=stripped.data;var subtype,ndata;switch(type){case"PUBLIC KEY":ndata=asn1.PublicKey.decode(data,"der");subtype=ndata.algorithm.algorithm.join(".");switch(subtype){case"1.2.840.113549.1.1.1":return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":ndata.subjectPrivateKey=ndata.subjectPublicKey;return{type:"ec",data:ndata};case"1.2.840.10040.4.1":ndata.algorithm.params.pub_key=asn1.DSAparam.decode(ndata.subjectPublicKey.data,"der");return{type:"dsa",data:ndata.algorithm.params};default:throw new Error("unknown key id "+subtype)}throw new Error("unknown key type "+type);case"ENCRYPTED PRIVATE KEY":data=asn1.EncryptedPrivateKey.decode(data,"der");data=decrypt(data,password);case"PRIVATE KEY":ndata=asn1.PrivateKey.decode(data,"der");subtype=ndata.algorithm.algorithm.join(".");switch(subtype){case"1.2.840.113549.1.1.1":return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:ndata.algorithm.curve,privateKey:asn1.ECPrivateKey.decode(ndata.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":ndata.algorithm.params.priv_key=asn1.DSAparam.decode(ndata.subjectPrivateKey,"der");return{type:"dsa",params:ndata.algorithm.params};default:throw new Error("unknown key id "+subtype)}throw new Error("unknown key type "+type);case"RSA PUBLIC KEY":return asn1.RSAPublicKey.decode(data,"der");case"RSA PRIVATE KEY":return asn1.RSAPrivateKey.decode(data,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:asn1.DSAPrivateKey.decode(data,"der")};case"EC PRIVATE KEY":data=asn1.ECPrivateKey.decode(data,"der");return{curve:data.parameters.value,privateKey:data.privateKey};default:throw new Error("unknown key type "+type)}}parseKeys.signature=asn1.signature;function decrypt(data,password){var salt=data.algorithm.decrypt.kde.kdeparams.salt;var iters=parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(),10);var algo=aesid[data.algorithm.decrypt.cipher.algo.join(".")];var iv=data.algorithm.decrypt.cipher.iv;var cipherText=data.subjectPrivateKey;var keylen=parseInt(algo.split("-")[1],10)/8;var key=compat.pbkdf2Sync(password,salt,iters,keylen);var cipher=ciphers.createDecipheriv(algo,key,iv);var out=[];out.push(cipher.update(cipherText));out.push(cipher.final());return Buffer.concat(out)}}).call(this,require("buffer").Buffer)},{"./aesid.json":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/aesid.json","./asn1":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/asn1.js","./fixProc":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/fixProc.js","browserify-aes":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/browserify-aes/browser.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",pbkdf2:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/pbkdf2/browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1.js":[function(require,module,exports){var asn1=exports;asn1.bignum=require("bn.js");asn1.define=require("./asn1/api").define;asn1.base=require("./asn1/base");asn1.constants=require("./asn1/constants");asn1.decoders=require("./asn1/decoders");asn1.encoders=require("./asn1/encoders")},{"./asn1/api":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/api.js","./asn1/base":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/index.js","./asn1/constants":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/constants/index.js","./asn1/decoders":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/decoders/index.js","./asn1/encoders":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/encoders/index.js","bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/api.js":[function(require,module,exports){var asn1=require("../asn1");var inherits=require("inherits");var api=exports;api.define=function define(name,body){return new Entity(name,body)};function Entity(name,body){this.name=name;this.body=body;this.decoders={};this.encoders={}}Entity.prototype._createNamed=function createNamed(base){var named;try{named=require("vm").runInThisContext("(function "+this.name+"(entity) {\n"+" this._initNamed(entity);\n"+"})")}catch(e){named=function(entity){this._initNamed(entity)}}inherits(named,base);named.prototype._initNamed=function initnamed(entity){base.call(this,entity)};return new named(this)};Entity.prototype._getDecoder=function _getDecoder(enc){if(!this.decoders.hasOwnProperty(enc))this.decoders[enc]=this._createNamed(asn1.decoders[enc]);return this.decoders[enc]};Entity.prototype.decode=function decode(data,enc,options){return this._getDecoder(enc).decode(data,options)};Entity.prototype._getEncoder=function _getEncoder(enc){if(!this.encoders.hasOwnProperty(enc))this.encoders[enc]=this._createNamed(asn1.encoders[enc]);return this.encoders[enc]};Entity.prototype.encode=function encode(data,enc,reporter){return this._getEncoder(enc).encode(data,reporter)}},{"../asn1":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js",vm:"/data/github/geopackage-node/node_modules/browserify/node_modules/vm-browserify/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/buffer.js":[function(require,module,exports){var inherits=require("inherits");var Reporter=require("../base").Reporter;var Buffer=require("buffer").Buffer;function DecoderBuffer(base,options){Reporter.call(this,options);if(!Buffer.isBuffer(base)){this.error("Input not Buffer");return}this.base=base;this.offset=0;this.length=base.length}inherits(DecoderBuffer,Reporter);exports.DecoderBuffer=DecoderBuffer;DecoderBuffer.prototype.save=function save(){return{offset:this.offset,reporter:Reporter.prototype.save.call(this)}};DecoderBuffer.prototype.restore=function restore(save){var res=new DecoderBuffer(this.base);res.offset=save.offset;res.length=this.offset;this.offset=save.offset;Reporter.prototype.restore.call(this,save.reporter);return res};DecoderBuffer.prototype.isEmpty=function isEmpty(){return this.offset===this.length};DecoderBuffer.prototype.readUInt8=function readUInt8(fail){if(this.offset+1<=this.length)return this.base.readUInt8(this.offset++,true);else return this.error(fail||"DecoderBuffer overrun")};DecoderBuffer.prototype.skip=function skip(bytes,fail){if(!(this.offset+bytes<=this.length))return this.error(fail||"DecoderBuffer overrun");var res=new DecoderBuffer(this.base);res._reporterState=this._reporterState;res.offset=this.offset;res.length=this.offset+bytes;this.offset+=bytes;return res};DecoderBuffer.prototype.raw=function raw(save){return this.base.slice(save?save.offset:this.offset,this.length)};function EncoderBuffer(value,reporter){if(Array.isArray(value)){this.length=0;this.value=value.map(function(item){if(!(item instanceof EncoderBuffer))item=new EncoderBuffer(item,reporter);this.length+=item.length;return item},this)}else if(typeof value==="number"){if(!(0<=value&&value<=255))return reporter.error("non-byte EncoderBuffer value");this.value=value;this.length=1}else if(typeof value==="string"){this.value=value;this.length=Buffer.byteLength(value)}else if(Buffer.isBuffer(value)){this.value=value;this.length=value.length}else{return reporter.error("Unsupported type: "+typeof value)}}exports.EncoderBuffer=EncoderBuffer;EncoderBuffer.prototype.join=function join(out,offset){if(!out)out=new Buffer(this.length);if(!offset)offset=0;if(this.length===0)return out;if(Array.isArray(this.value)){this.value.forEach(function(item){item.join(out,offset);offset+=item.length})}else{if(typeof this.value==="number")out[offset]=this.value;else if(typeof this.value==="string")out.write(this.value,offset);else if(Buffer.isBuffer(this.value))this.value.copy(out,offset);offset+=this.length}return out}},{"../base":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/index.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/index.js":[function(require,module,exports){var base=exports;base.Reporter=require("./reporter").Reporter;base.DecoderBuffer=require("./buffer").DecoderBuffer;base.EncoderBuffer=require("./buffer").EncoderBuffer;base.Node=require("./node")},{"./buffer":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/buffer.js","./node":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/node.js","./reporter":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/reporter.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/node.js":[function(require,module,exports){var Reporter=require("../base").Reporter;var EncoderBuffer=require("../base").EncoderBuffer;var DecoderBuffer=require("../base").DecoderBuffer;var assert=require("minimalistic-assert");var tags=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"];var methods=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(tags);var overrided=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];function Node(enc,parent){var state={};this._baseState=state;state.enc=enc;state.parent=parent||null;state.children=null;state.tag=null;state.args=null;state.reverseArgs=null;state.choice=null;state.optional=false;state.any=false;state.obj=false;state.use=null;state.useDecoder=null; +state.key=null;state["default"]=null;state.explicit=null;state.implicit=null;state.contains=null;if(!state.parent){state.children=[];this._wrap()}}module.exports=Node;var stateProps=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit"];Node.prototype.clone=function clone(){var state=this._baseState;var cstate={};stateProps.forEach(function(prop){cstate[prop]=state[prop]});var res=new this.constructor(cstate.parent);res._baseState=cstate;return res};Node.prototype._wrap=function wrap(){var state=this._baseState;methods.forEach(function(method){this[method]=function _wrappedMethod(){var clone=new this.constructor(this);state.children.push(clone);return clone[method].apply(clone,arguments)}},this)};Node.prototype._init=function init(body){var state=this._baseState;assert(state.parent===null);body.call(this);state.children=state.children.filter(function(child){return child._baseState.parent===this},this);assert.equal(state.children.length,1,"Root node can have only one child")};Node.prototype._useArgs=function useArgs(args){var state=this._baseState;var children=args.filter(function(arg){return arg instanceof this.constructor},this);args=args.filter(function(arg){return!(arg instanceof this.constructor)},this);if(children.length!==0){assert(state.children===null);state.children=children;children.forEach(function(child){child._baseState.parent=this},this)}if(args.length!==0){assert(state.args===null);state.args=args;state.reverseArgs=args.map(function(arg){if(typeof arg!=="object"||arg.constructor!==Object)return arg;var res={};Object.keys(arg).forEach(function(key){if(key==(key|0))key|=0;var value=arg[key];res[value]=key});return res})}};overrided.forEach(function(method){Node.prototype[method]=function _overrided(){var state=this._baseState;throw new Error(method+" not implemented for encoding: "+state.enc)}});tags.forEach(function(tag){Node.prototype[tag]=function _tagMethod(){var state=this._baseState;var args=Array.prototype.slice.call(arguments);assert(state.tag===null);state.tag=tag;this._useArgs(args);return this}});Node.prototype.use=function use(item){var state=this._baseState;assert(state.use===null);state.use=item;return this};Node.prototype.optional=function optional(){var state=this._baseState;state.optional=true;return this};Node.prototype.def=function def(val){var state=this._baseState;assert(state["default"]===null);state["default"]=val;state.optional=true;return this};Node.prototype.explicit=function explicit(num){var state=this._baseState;assert(state.explicit===null&&state.implicit===null);state.explicit=num;return this};Node.prototype.implicit=function implicit(num){var state=this._baseState;assert(state.explicit===null&&state.implicit===null);state.implicit=num;return this};Node.prototype.obj=function obj(){var state=this._baseState;var args=Array.prototype.slice.call(arguments);state.obj=true;if(args.length!==0)this._useArgs(args);return this};Node.prototype.key=function key(newKey){var state=this._baseState;assert(state.key===null);state.key=newKey;return this};Node.prototype.any=function any(){var state=this._baseState;state.any=true;return this};Node.prototype.choice=function choice(obj){var state=this._baseState;assert(state.choice===null);state.choice=obj;this._useArgs(Object.keys(obj).map(function(key){return obj[key]}));return this};Node.prototype.contains=function contains(item){var state=this._baseState;assert(state.use===null);state.contains=item;return this};Node.prototype._decode=function decode(input){var state=this._baseState;if(state.parent===null)return input.wrapResult(state.children[0]._decode(input));var result=state["default"];var present=true;var prevKey;if(state.key!==null)prevKey=input.enterKey(state.key);if(state.optional){var tag=null;if(state.explicit!==null)tag=state.explicit;else if(state.implicit!==null)tag=state.implicit;else if(state.tag!==null)tag=state.tag;if(tag===null&&!state.any){var save=input.save();try{if(state.choice===null)this._decodeGeneric(state.tag,input);else this._decodeChoice(input);present=true}catch(e){present=false}input.restore(save)}else{present=this._peekTag(input,tag,state.any);if(input.isError(present))return present}}var prevObj;if(state.obj&&present)prevObj=input.enterObject();if(present){if(state.explicit!==null){var explicit=this._decodeTag(input,state.explicit);if(input.isError(explicit))return explicit;input=explicit}if(state.use===null&&state.choice===null){if(state.any)var save=input.save();var body=this._decodeTag(input,state.implicit!==null?state.implicit:state.tag,state.any);if(input.isError(body))return body;if(state.any)result=input.raw(save);else input=body}if(state.any)result=result;else if(state.choice===null)result=this._decodeGeneric(state.tag,input);else result=this._decodeChoice(input);if(input.isError(result))return result;if(!state.any&&state.choice===null&&state.children!==null){state.children.forEach(function decodeChildren(child){child._decode(input)})}if(state.contains&&(state.tag==="octstr"||state.tag==="bitstr")){var data=new DecoderBuffer(result);result=this._getUse(state.contains,input._reporterState.obj)._decode(data)}}if(state.obj&&present)result=input.leaveObject(prevObj);if(state.key!==null&&(result!==null||present===true))input.leaveKey(prevKey,state.key,result);return result};Node.prototype._decodeGeneric=function decodeGeneric(tag,input){var state=this._baseState;if(tag==="seq"||tag==="set")return null;if(tag==="seqof"||tag==="setof")return this._decodeList(input,tag,state.args[0]);else if(/str$/.test(tag))return this._decodeStr(input,tag);else if(tag==="objid"&&state.args)return this._decodeObjid(input,state.args[0],state.args[1]);else if(tag==="objid")return this._decodeObjid(input,null,null);else if(tag==="gentime"||tag==="utctime")return this._decodeTime(input,tag);else if(tag==="null_")return this._decodeNull(input);else if(tag==="bool")return this._decodeBool(input);else if(tag==="int"||tag==="enum")return this._decodeInt(input,state.args&&state.args[0]);else if(state.use!==null)return this._getUse(state.use,input._reporterState.obj)._decode(input);else return input.error("unknown tag: "+tag);return null};Node.prototype._getUse=function _getUse(entity,obj){var state=this._baseState;state.useDecoder=this._use(entity,obj);assert(state.useDecoder._baseState.parent===null);state.useDecoder=state.useDecoder._baseState.children[0];if(state.implicit!==state.useDecoder._baseState.implicit){state.useDecoder=state.useDecoder.clone();state.useDecoder._baseState.implicit=state.implicit}return state.useDecoder};Node.prototype._decodeChoice=function decodeChoice(input){var state=this._baseState;var result=null;var match=false;Object.keys(state.choice).some(function(key){var save=input.save();var node=state.choice[key];try{var value=node._decode(input);if(input.isError(value))return false;result={type:key,value:value};match=true}catch(e){input.restore(save);return false}return true},this);if(!match)return input.error("Choice not matched");return result};Node.prototype._createEncoderBuffer=function createEncoderBuffer(data){return new EncoderBuffer(data,this.reporter)};Node.prototype._encode=function encode(data,reporter,parent){var state=this._baseState;if(state["default"]!==null&&state["default"]===data)return;var result=this._encodeValue(data,reporter,parent);if(result===undefined)return;if(this._skipDefault(result,reporter,parent))return;return result};Node.prototype._encodeValue=function encode(data,reporter,parent){var state=this._baseState;if(state.parent===null)return state.children[0]._encode(data,reporter||new Reporter);var result=null;var present=true;this.reporter=reporter;if(state.optional&&data===undefined){if(state["default"]!==null)data=state["default"];else return}var prevKey;var content=null;var primitive=false;if(state.any){result=this._createEncoderBuffer(data)}else if(state.choice){result=this._encodeChoice(data,reporter)}else if(state.contains){content=this._getUse(state.contains,parent)._encode(data,reporter);primitive=true}else if(state.children){content=state.children.map(function(child){if(child._baseState.tag==="null_")return child._encode(null,reporter,data);if(child._baseState.key===null)return reporter.error("Child should have a key");var prevKey=reporter.enterKey(child._baseState.key);if(typeof data!=="object")return reporter.error("Child expected, but input is not object");var res=child._encode(data[child._baseState.key],reporter,data);reporter.leaveKey(prevKey);return res},this).filter(function(child){return child});content=this._createEncoderBuffer(content)}else{if(state.tag==="seqof"||state.tag==="setof"){if(!(state.args&&state.args.length===1))return reporter.error("Too many args for : "+state.tag);if(!Array.isArray(data))return reporter.error("seqof/setof, but data is not Array");var child=this.clone();child._baseState.implicit=null;content=this._createEncoderBuffer(data.map(function(item){var state=this._baseState;return this._getUse(state.args[0],data)._encode(item,reporter)},child))}else if(state.use!==null){result=this._getUse(state.use,parent)._encode(data,reporter)}else{content=this._encodePrimitive(state.tag,data);primitive=true}}var result;if(!state.any&&state.choice===null){var tag=state.implicit!==null?state.implicit:state.tag;var cls=state.implicit===null?"universal":"context";if(tag===null){if(state.use===null)reporter.error("Tag could be ommited only for .use()")}else{if(state.use===null)result=this._encodeComposite(tag,primitive,cls,content)}}if(state.explicit!==null)result=this._encodeComposite(state.explicit,false,"context",result);return result};Node.prototype._encodeChoice=function encodeChoice(data,reporter){var state=this._baseState;var node=state.choice[data.type];if(!node){assert(false,data.type+" not found in "+JSON.stringify(Object.keys(state.choice)))}return node._encode(data.value,reporter)};Node.prototype._encodePrimitive=function encodePrimitive(tag,data){var state=this._baseState;if(/str$/.test(tag))return this._encodeStr(data,tag);else if(tag==="objid"&&state.args)return this._encodeObjid(data,state.reverseArgs[0],state.args[1]);else if(tag==="objid")return this._encodeObjid(data,null,null);else if(tag==="gentime"||tag==="utctime")return this._encodeTime(data,tag);else if(tag==="null_")return this._encodeNull();else if(tag==="int"||tag==="enum")return this._encodeInt(data,state.args&&state.reverseArgs[0]);else if(tag==="bool")return this._encodeBool(data);else throw new Error("Unsupported tag: "+tag)};Node.prototype._isNumstr=function isNumstr(str){return/^[0-9 ]*$/.test(str)};Node.prototype._isPrintstr=function isPrintstr(str){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str)}},{"../base":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/index.js","minimalistic-assert":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/node_modules/minimalistic-assert/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/base/reporter.js":[function(require,module,exports){var inherits=require("inherits");function Reporter(options){this._reporterState={obj:null,path:[],options:options||{},errors:[]}}exports.Reporter=Reporter;Reporter.prototype.isError=function isError(obj){return obj instanceof ReporterError};Reporter.prototype.save=function save(){var state=this._reporterState;return{obj:state.obj,pathLen:state.path.length}};Reporter.prototype.restore=function restore(data){var state=this._reporterState;state.obj=data.obj;state.path=state.path.slice(0,data.pathLen)};Reporter.prototype.enterKey=function enterKey(key){return this._reporterState.path.push(key)};Reporter.prototype.leaveKey=function leaveKey(index,key,value){var state=this._reporterState;state.path=state.path.slice(0,index-1);if(state.obj!==null)state.obj[key]=value};Reporter.prototype.enterObject=function enterObject(){var state=this._reporterState;var prev=state.obj;state.obj={};return prev};Reporter.prototype.leaveObject=function leaveObject(prev){var state=this._reporterState;var now=state.obj;state.obj=prev;return now};Reporter.prototype.error=function error(msg){var err;var state=this._reporterState;var inherited=msg instanceof ReporterError;if(inherited){err=msg}else{err=new ReporterError(state.path.map(function(elem){return"["+JSON.stringify(elem)+"]"}).join(""),msg.message||msg,msg.stack)}if(!state.options.partial)throw err;if(!inherited)state.errors.push(err);return err};Reporter.prototype.wrapResult=function wrapResult(result){var state=this._reporterState;if(!state.options.partial)return result;return{result:this.isError(result)?null:result,errors:state.errors}};function ReporterError(path,msg){this.path=path;this.rethrow(msg)}inherits(ReporterError,Error);ReporterError.prototype.rethrow=function rethrow(msg){this.message=msg+" at: "+(this.path||"(shallow)");Error.captureStackTrace(this,ReporterError);return this}},{inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/constants/der.js":[function(require,module,exports){var constants=require("../constants");exports.tagClass={0:"universal",1:"application",2:"context",3:"private"};exports.tagClassByName=constants._reverse(exports.tagClass);exports.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"};exports.tagByName=constants._reverse(exports.tag)},{"../constants":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/constants/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/constants/index.js":[function(require,module,exports){var constants=exports;constants._reverse=function reverse(map){var res={};Object.keys(map).forEach(function(key){if((key|0)==key)key=key|0;var value=map[key];res[value]=key});return res};constants.der=require("./der")},{"./der":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/constants/der.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/decoders/der.js":[function(require,module,exports){var inherits=require("inherits");var asn1=require("../../asn1");var base=asn1.base;var bignum=asn1.bignum;var der=asn1.constants.der;function DERDecoder(entity){this.enc="der";this.name=entity.name;this.entity=entity;this.tree=new DERNode;this.tree._init(entity.body)}module.exports=DERDecoder;DERDecoder.prototype.decode=function decode(data,options){if(!(data instanceof base.DecoderBuffer))data=new base.DecoderBuffer(data,options);return this.tree._decode(data,options)};function DERNode(parent){base.Node.call(this,"der",parent)}inherits(DERNode,base.Node);DERNode.prototype._peekTag=function peekTag(buffer,tag,any){if(buffer.isEmpty())return false;var state=buffer.save();var decodedTag=derDecodeTag(buffer,'Failed to peek tag: "'+tag+'"');if(buffer.isError(decodedTag))return decodedTag;buffer.restore(state);return decodedTag.tag===tag||decodedTag.tagStr===tag||decodedTag.tagStr+"of"===tag||any};DERNode.prototype._decodeTag=function decodeTag(buffer,tag,any){var decodedTag=derDecodeTag(buffer,'Failed to decode tag of "'+tag+'"');if(buffer.isError(decodedTag))return decodedTag;var len=derDecodeLen(buffer,decodedTag.primitive,'Failed to get length of "'+tag+'"');if(buffer.isError(len))return len;if(!any&&decodedTag.tag!==tag&&decodedTag.tagStr!==tag&&decodedTag.tagStr+"of"!==tag){return buffer.error('Failed to match tag: "'+tag+'"')}if(decodedTag.primitive||len!==null)return buffer.skip(len,'Failed to match body of: "'+tag+'"');var state=buffer.save();var res=this._skipUntilEnd(buffer,'Failed to skip indefinite length body: "'+this.tag+'"');if(buffer.isError(res))return res;len=buffer.offset-state.offset;buffer.restore(state);return buffer.skip(len,'Failed to match body of: "'+tag+'"')};DERNode.prototype._skipUntilEnd=function skipUntilEnd(buffer,fail){while(true){var tag=derDecodeTag(buffer,fail);if(buffer.isError(tag))return tag;var len=derDecodeLen(buffer,tag.primitive,fail);if(buffer.isError(len))return len;var res;if(tag.primitive||len!==null)res=buffer.skip(len);else res=this._skipUntilEnd(buffer,fail);if(buffer.isError(res))return res;if(tag.tagStr==="end")break}};DERNode.prototype._decodeList=function decodeList(buffer,tag,decoder){var result=[];while(!buffer.isEmpty()){var possibleEnd=this._peekTag(buffer,"end");if(buffer.isError(possibleEnd))return possibleEnd;var res=decoder.decode(buffer,"der");if(buffer.isError(res)&&possibleEnd)break;result.push(res)}return result};DERNode.prototype._decodeStr=function decodeStr(buffer,tag){if(tag==="bitstr"){var unused=buffer.readUInt8();if(buffer.isError(unused))return unused;return{unused:unused,data:buffer.raw()}}else if(tag==="bmpstr"){var raw=buffer.raw();if(raw.length%2===1)return buffer.error("Decoding of string type: bmpstr length mismatch");var str="";for(var i=0;i>6];var primitive=(tag&32)===0;if((tag&31)===31){var oct=tag;tag=0;while((oct&128)===128){oct=buf.readUInt8(fail);if(buf.isError(oct))return oct;tag<<=7;tag|=oct&127}}else{tag&=31}var tagStr=der.tag[tag];return{cls:cls,primitive:primitive,tag:tag,tagStr:tagStr}}function derDecodeLen(buf,primitive,fail){var len=buf.readUInt8(fail);if(buf.isError(len))return len;if(!primitive&&len===128)return null;if((len&128)===0){return len}var num=len&127;if(num>=4)return buf.error("length octect is too long");len=0;for(var i=0;i=256;i>>=8)lenOctets++;var header=new Buffer(1+1+lenOctets);header[0]=encodedTag;header[1]=128|lenOctets;for(var i=1+lenOctets,j=content.length;j>0;i--,j>>=8)header[i]=j&255;return this._createEncoderBuffer([header,content])};DERNode.prototype._encodeStr=function encodeStr(str,tag){if(tag==="bitstr"){return this._createEncoderBuffer([str.unused|0,str.data])}else if(tag==="bmpstr"){var buf=new Buffer(str.length*2);for(var i=0;i=40)return this.reporter.error("Second objid identifier OOB");id.splice(0,2,id[0]*40+id[1])}var size=0;for(var i=0;i=128;ident>>=7)size++}var objid=new Buffer(size);var offset=objid.length-1;for(var i=id.length-1;i>=0;i--){var ident=id[i];objid[offset--]=ident&127;while((ident>>=7)>0)objid[offset--]=128|ident&127}return this._createEncoderBuffer(objid)};function two(num){if(num<10)return"0"+num;else return num}DERNode.prototype._encodeTime=function encodeTime(time,tag){var str;var date=new Date(time);if(tag==="gentime"){str=[two(date.getFullYear()),two(date.getUTCMonth()+1),two(date.getUTCDate()),two(date.getUTCHours()),two(date.getUTCMinutes()),two(date.getUTCSeconds()),"Z"].join("")}else if(tag==="utctime"){str=[two(date.getFullYear()%100),two(date.getUTCMonth()+1),two(date.getUTCDate()),two(date.getUTCHours()),two(date.getUTCMinutes()),two(date.getUTCSeconds()),"Z"].join("")}else{this.reporter.error("Encoding "+tag+" time is not supported yet")}return this._encodeStr(str,"octstr")};DERNode.prototype._encodeNull=function encodeNull(){return this._createEncoderBuffer("")};DERNode.prototype._encodeInt=function encodeInt(num,values){if(typeof num==="string"){if(!values)return this.reporter.error("String int or enum given, but no values map");if(!values.hasOwnProperty(num)){return this.reporter.error("Values map doesn't contain: "+JSON.stringify(num))}num=values[num]}if(typeof num!=="number"&&!Buffer.isBuffer(num)){var numArray=num.toArray();if(!num.sign&&numArray[0]&128){numArray.unshift(0)}num=new Buffer(numArray)}if(Buffer.isBuffer(num)){var size=num.length;if(num.length===0)size++;var out=new Buffer(size);num.copy(out);if(num.length===0)out[0]=0;return this._createEncoderBuffer(out)}if(num<128)return this._createEncoderBuffer(num);if(num<256)return this._createEncoderBuffer([0,num]);var size=1;for(var i=num;i>=256;i>>=8)size++;var out=new Array(size);for(var i=out.length-1;i>=0;i--){out[i]=num&255;num>>=8}if(out[0]&128){out.unshift(0)}return this._createEncoderBuffer(new Buffer(out))};DERNode.prototype._encodeBool=function encodeBool(value){return this._createEncoderBuffer(value?255:0)};DERNode.prototype._use=function use(entity,obj){if(typeof entity==="function")entity=entity(obj);return entity._getEncoder("der").tree};DERNode.prototype._skipDefault=function skipDefault(dataBuffer,reporter,parent){var state=this._baseState;var i;if(state["default"]===null)return false;var data=dataBuffer.join();if(state.defaultBuffer===undefined)state.defaultBuffer=this._encodeValue(state["default"],reporter,parent).join();if(data.length!==state.defaultBuffer.length)return false;for(i=0;i=31)return reporter.error("Multi-octet tag encoding unsupported");if(!primitive)res|=32;res|=der.tagClassByName[cls||"universal"]<<6;return res}},{"../../asn1":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/encoders/index.js":[function(require,module,exports){var encoders=exports;encoders.der=require("./der");encoders.pem=require("./pem")},{"./der":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/encoders/der.js","./pem":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/encoders/pem.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/node_modules/asn1.js/lib/asn1/encoders/pem.js":[function(require,module,exports){var inherits=require("inherits");var Buffer=require("buffer").Buffer;var asn1=require("../../asn1");var DEREncoder=require("./der");function PEMEncoder(entity){DEREncoder.call(this,entity);this.enc="pem"}inherits(PEMEncoder,DEREncoder);module.exports=PEMEncoder;PEMEncoder.prototype.encode=function encode(data,options){var buf=DEREncoder.prototype.encode.call(this,data);var p=buf.toString("base64");var out=["-----BEGIN "+options.label+"-----"];for(var i=0;i0){bits.ishrn(shift)}return bits}function bits2octets(bits,q){bits=bits2int(bits,q);bits=bits.mod(q);var out=new Buffer(bits.toArray());if(out.length=q){throw new Error("invalid sig")}}module.exports=verify}).call(this,require("buffer").Buffer)},{"./curves":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/curves.js","bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",elliptic:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/elliptic/lib/elliptic.js","parse-asn1":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/parse-asn1/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-ecdh/browser.js":[function(require,module,exports){(function(Buffer){var elliptic=require("elliptic");var BN=require("bn.js");module.exports=function createECDH(curve){return new ECDH(curve)};var aliases={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};aliases.p224=aliases.secp224r1;aliases.p256=aliases.secp256r1=aliases.prime256v1;aliases.p192=aliases.secp192r1=aliases.prime192v1;aliases.p384=aliases.secp384r1;aliases.p521=aliases.secp521r1;function ECDH(curve){this.curveType=aliases[curve];if(!this.curveType){this.curveType={name:curve}}this.curve=new elliptic.ec(this.curveType.name);this.keys=void 0}ECDH.prototype.generateKeys=function(enc,format){this.keys=this.curve.genKeyPair();return this.getPublicKey(enc,format)};ECDH.prototype.computeSecret=function(other,inenc,enc){inenc=inenc||"utf8";if(!Buffer.isBuffer(other)){other=new Buffer(other,inenc)}var otherPub=this.curve.keyFromPublic(other).getPublic();var out=otherPub.mul(this.keys.getPrivate()).getX();return formatReturnValue(out,enc,this.curveType.byteLength)};ECDH.prototype.getPublicKey=function(enc,format){var key=this.keys.getPublic(format==="compressed",true);if(format==="hybrid"){if(key[key.length-1]%2){key[0]=7}else{key[0]=6}}return formatReturnValue(key,enc)};ECDH.prototype.getPrivateKey=function(enc){return formatReturnValue(this.keys.getPrivate(),enc)};ECDH.prototype.setPublicKey=function(pub,enc){enc=enc||"utf8";if(!Buffer.isBuffer(pub)){pub=new Buffer(pub,enc)}this.keys._importPublic(pub);return this};ECDH.prototype.setPrivateKey=function(priv,enc){enc=enc||"utf8";if(!Buffer.isBuffer(priv)){priv=new Buffer(priv,enc)}var _priv=new BN(priv);_priv=_priv.toString(16);this.keys._importPrivate(_priv);return this};function formatReturnValue(bn,enc,len){if(!Array.isArray(bn)){bn=bn.toArray()}var buf=new Buffer(bn);if(len&&buf.length>5]|=128<>>9<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&65535}function bit_rol(num,cnt){return num<>>32-cnt}module.exports=function md5(buf){return helpers.hash(buf,core_md5,16)}},{"./helpers":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/helpers.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/cipher-base/index.js":[function(require,module,exports){arguments[4]["/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-cipher/node_modules/browserify-aes/node_modules/cipher-base/index.js"][0].apply(exports,arguments)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js",stream:"/data/github/geopackage-node/node_modules/browserify/node_modules/stream-browserify/index.js",string_decoder:"/data/github/geopackage-node/node_modules/browserify/node_modules/string_decoder/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/ripemd160/lib/ripemd160.js":[function(require,module,exports){(function(Buffer){var zl=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13];var zr=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11];var sl=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6];var sr=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];var hl=[0,1518500249,1859775393,2400959708,2840853838];var hr=[1352829926,1548603684,1836072691,2053994217,0];function bytesToWords(bytes){var words=[];for(var i=0,b=0;i>>5]|=bytes[i]<<24-b%32}return words}function wordsToBytes(words){var bytes=[];for(var b=0;b>>5]>>>24-b%32&255)}return bytes}function processBlock(H,M,offset){for(var i=0;i<16;i++){var offset_i=offset+i;var M_offset_i=M[offset_i];M[offset_i]=(M_offset_i<<8|M_offset_i>>>24)&16711935|(M_offset_i<<24|M_offset_i>>>8)&4278255360}var al,bl,cl,dl,el;var ar,br,cr,dr,er;ar=al=H[0];br=bl=H[1];cr=cl=H[2];dr=dl=H[3];er=el=H[4];var t;for(i=0;i<80;i+=1){t=al+M[offset+zl[i]]|0;if(i<16){t+=f1(bl,cl,dl)+hl[0]}else if(i<32){t+=f2(bl,cl,dl)+hl[1]}else if(i<48){t+=f3(bl,cl,dl)+hl[2]}else if(i<64){t+=f4(bl,cl,dl)+hl[3]}else{t+=f5(bl,cl,dl)+hl[4]}t=t|0;t=rotl(t,sl[i]);t=t+el|0;al=el;el=dl;dl=rotl(cl,10);cl=bl;bl=t;t=ar+M[offset+zr[i]]|0;if(i<16){t+=f5(br,cr,dr)+hr[0]}else if(i<32){t+=f4(br,cr,dr)+hr[1]}else if(i<48){t+=f3(br,cr,dr)+hr[2]}else if(i<64){t+=f2(br,cr,dr)+hr[3]}else{t+=f1(br,cr,dr)+hr[4]}t=t|0;t=rotl(t,sr[i]);t=t+er|0;ar=er;er=dr;dr=rotl(cr,10);cr=br;br=t}t=H[1]+cl+dr|0;H[1]=H[2]+dl+er|0;H[2]=H[3]+el+ar|0;H[3]=H[4]+al+br|0;H[4]=H[0]+bl+cr|0;H[0]=t}function f1(x,y,z){return x^y^z}function f2(x,y,z){return x&y|~x&z}function f3(x,y,z){return(x|~y)^z}function f4(x,y,z){return x&z|y&~z}function f5(x,y,z){return x^(y|~z)}function rotl(x,n){return x<>>32-n}function ripemd160(message){var H=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof message==="string"){message=new Buffer(message,"utf8")}var m=bytesToWords(message);var nBitsLeft=message.length*8;var nBitsTotal=message.length*8;m[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;m[(nBitsLeft+64>>>9<<4)+14]=(nBitsTotal<<8|nBitsTotal>>>24)&16711935|(nBitsTotal<<24|nBitsTotal>>>8)&4278255360;for(var i=0;i>>24)&16711935|(H_i<<24|H_i>>>8)&4278255360}var digestbytes=wordsToBytes(H);return new Buffer(digestbytes)}module.exports=ripemd160}).call(this,require("buffer").Buffer)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/hash.js":[function(require,module,exports){(function(Buffer){function Hash(blockSize,finalSize){this._block=new Buffer(blockSize);this._finalSize=finalSize;this._blockSize=blockSize;this._len=0;this._s=0}Hash.prototype.update=function(data,enc){if(typeof data==="string"){enc=enc||"utf8";data=new Buffer(data,enc)}var l=this._len+=data.length;var s=this._s||0;var f=0;var buffer=this._block;while(s=this._finalSize*8){this._update(this._block);this._block.fill(0)}this._block.writeInt32BE(l,this._blockSize-4);var hash=this._update(this._block)||this._hash();return enc?hash.toString(enc):hash};Hash.prototype._update=function(){throw new Error("_update must be implemented by subclass")};module.exports=Hash}).call(this,require("buffer").Buffer)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/index.js":[function(require,module,exports){var exports=module.exports=function SHA(algorithm){algorithm=algorithm.toLowerCase();var Algorithm=exports[algorithm];if(!Algorithm)throw new Error(algorithm+" is not supported (we accept pull requests)");return new Algorithm};exports.sha=require("./sha");exports.sha1=require("./sha1");exports.sha224=require("./sha224");exports.sha256=require("./sha256");exports.sha384=require("./sha384");exports.sha512=require("./sha512")},{"./sha":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha.js","./sha1":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha1.js","./sha224":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha224.js","./sha256":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha256.js","./sha384":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha384.js","./sha512":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha512.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha.js":[function(require,module,exports){(function(Buffer){var inherits=require("inherits");var Hash=require("./hash");var K=[1518500249,1859775393,2400959708|0,3395469782|0];var W=new Array(80);function Sha(){this.init();this._w=W;Hash.call(this,64,56)}inherits(Sha,Hash);Sha.prototype.init=function(){this._a=1732584193;this._b=4023233417;this._c=2562383102;this._d=271733878;this._e=3285377520;return this};function rotl5(num){return num<<5|num>>>27}function rotl30(num){return num<<30|num>>>2}function ft(s,b,c,d){if(s===0)return b&c|~b&d;if(s===2)return b&c|b&d|c&d;return b^c^d}Sha.prototype._update=function(M){var W=this._w;var a=this._a|0;var b=this._b|0;var c=this._c|0;var d=this._d|0;var e=this._e|0;for(var i=0;i<16;++i)W[i]=M.readInt32BE(i*4);for(;i<80;++i)W[i]=W[i-3]^W[i-8]^W[i-14]^W[i-16];for(var j=0;j<80;++j){var s=~~(j/20);var t=rotl5(a)+ft(s,b,c,d)+e+W[j]+K[s]|0;e=d;d=c;c=rotl30(b);b=a;a=t}this._a=a+this._a|0;this._b=b+this._b|0;this._c=c+this._c|0;this._d=d+this._d|0;this._e=e+this._e|0};Sha.prototype._hash=function(){var H=new Buffer(20);H.writeInt32BE(this._a|0,0);H.writeInt32BE(this._b|0,4);H.writeInt32BE(this._c|0,8);H.writeInt32BE(this._d|0,12);H.writeInt32BE(this._e|0,16);return H};module.exports=Sha}).call(this,require("buffer").Buffer)},{"./hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/hash.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha1.js":[function(require,module,exports){(function(Buffer){var inherits=require("inherits");var Hash=require("./hash");var K=[1518500249,1859775393,2400959708|0,3395469782|0];var W=new Array(80);function Sha1(){this.init();this._w=W;Hash.call(this,64,56)}inherits(Sha1,Hash);Sha1.prototype.init=function(){this._a=1732584193;this._b=4023233417;this._c=2562383102;this._d=271733878;this._e=3285377520;return this};function rotl1(num){return num<<1|num>>>31}function rotl5(num){return num<<5|num>>>27}function rotl30(num){return num<<30|num>>>2}function ft(s,b,c,d){if(s===0)return b&c|~b&d;if(s===2)return b&c|b&d|c&d;return b^c^d}Sha1.prototype._update=function(M){var W=this._w;var a=this._a|0;var b=this._b|0;var c=this._c|0;var d=this._d|0;var e=this._e|0;for(var i=0;i<16;++i)W[i]=M.readInt32BE(i*4);for(;i<80;++i)W[i]=rotl1(W[i-3]^W[i-8]^W[i-14]^W[i-16]);for(var j=0;j<80;++j){var s=~~(j/20);var t=rotl5(a)+ft(s,b,c,d)+e+W[j]+K[s]|0;e=d;d=c;c=rotl30(b);b=a;a=t}this._a=a+this._a|0;this._b=b+this._b|0;this._c=c+this._c|0;this._d=d+this._d|0;this._e=e+this._e|0};Sha1.prototype._hash=function(){var H=new Buffer(20);H.writeInt32BE(this._a|0,0);H.writeInt32BE(this._b|0,4);H.writeInt32BE(this._c|0,8);H.writeInt32BE(this._d|0,12);H.writeInt32BE(this._e|0,16);return H};module.exports=Sha1}).call(this,require("buffer").Buffer); +},{"./hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/hash.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha224.js":[function(require,module,exports){(function(Buffer){var inherits=require("inherits");var Sha256=require("./sha256");var Hash=require("./hash");var W=new Array(64);function Sha224(){this.init();this._w=W;Hash.call(this,64,56)}inherits(Sha224,Sha256);Sha224.prototype.init=function(){this._a=3238371032;this._b=914150663;this._c=812702999;this._d=4144912697;this._e=4290775857;this._f=1750603025;this._g=1694076839;this._h=3204075428;return this};Sha224.prototype._hash=function(){var H=new Buffer(28);H.writeInt32BE(this._a,0);H.writeInt32BE(this._b,4);H.writeInt32BE(this._c,8);H.writeInt32BE(this._d,12);H.writeInt32BE(this._e,16);H.writeInt32BE(this._f,20);H.writeInt32BE(this._g,24);return H};module.exports=Sha224}).call(this,require("buffer").Buffer)},{"./hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/hash.js","./sha256":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha256.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha256.js":[function(require,module,exports){(function(Buffer){var inherits=require("inherits");var Hash=require("./hash");var K=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];var W=new Array(64);function Sha256(){this.init();this._w=W;Hash.call(this,64,56)}inherits(Sha256,Hash);Sha256.prototype.init=function(){this._a=1779033703;this._b=3144134277;this._c=1013904242;this._d=2773480762;this._e=1359893119;this._f=2600822924;this._g=528734635;this._h=1541459225;return this};function ch(x,y,z){return z^x&(y^z)}function maj(x,y,z){return x&y|z&(x|y)}function sigma0(x){return(x>>>2|x<<30)^(x>>>13|x<<19)^(x>>>22|x<<10)}function sigma1(x){return(x>>>6|x<<26)^(x>>>11|x<<21)^(x>>>25|x<<7)}function gamma0(x){return(x>>>7|x<<25)^(x>>>18|x<<14)^x>>>3}function gamma1(x){return(x>>>17|x<<15)^(x>>>19|x<<13)^x>>>10}Sha256.prototype._update=function(M){var W=this._w;var a=this._a|0;var b=this._b|0;var c=this._c|0;var d=this._d|0;var e=this._e|0;var f=this._f|0;var g=this._g|0;var h=this._h|0;for(var i=0;i<16;++i)W[i]=M.readInt32BE(i*4);for(;i<64;++i)W[i]=gamma1(W[i-2])+W[i-7]+gamma0(W[i-15])+W[i-16]|0;for(var j=0;j<64;++j){var T1=h+sigma1(e)+ch(e,f,g)+K[j]+W[j]|0;var T2=sigma0(a)+maj(a,b,c)|0;h=g;g=f;f=e;e=d+T1|0;d=c;c=b;b=a;a=T1+T2|0}this._a=a+this._a|0;this._b=b+this._b|0;this._c=c+this._c|0;this._d=d+this._d|0;this._e=e+this._e|0;this._f=f+this._f|0;this._g=g+this._g|0;this._h=h+this._h|0};Sha256.prototype._hash=function(){var H=new Buffer(32);H.writeInt32BE(this._a,0);H.writeInt32BE(this._b,4);H.writeInt32BE(this._c,8);H.writeInt32BE(this._d,12);H.writeInt32BE(this._e,16);H.writeInt32BE(this._f,20);H.writeInt32BE(this._g,24);H.writeInt32BE(this._h,28);return H};module.exports=Sha256}).call(this,require("buffer").Buffer)},{"./hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/hash.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha384.js":[function(require,module,exports){(function(Buffer){var inherits=require("inherits");var SHA512=require("./sha512");var Hash=require("./hash");var W=new Array(160);function Sha384(){this.init();this._w=W;Hash.call(this,128,112)}inherits(Sha384,SHA512);Sha384.prototype.init=function(){this._ah=3418070365;this._bh=1654270250;this._ch=2438529370;this._dh=355462360;this._eh=1731405415;this._fh=2394180231;this._gh=3675008525;this._hh=1203062813;this._al=3238371032;this._bl=914150663;this._cl=812702999;this._dl=4144912697;this._el=4290775857;this._fl=1750603025;this._gl=1694076839;this._hl=3204075428;return this};Sha384.prototype._hash=function(){var H=new Buffer(48);function writeInt64BE(h,l,offset){H.writeInt32BE(h,offset);H.writeInt32BE(l,offset+4)}writeInt64BE(this._ah,this._al,0);writeInt64BE(this._bh,this._bl,8);writeInt64BE(this._ch,this._cl,16);writeInt64BE(this._dh,this._dl,24);writeInt64BE(this._eh,this._el,32);writeInt64BE(this._fh,this._fl,40);return H};module.exports=Sha384}).call(this,require("buffer").Buffer)},{"./hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/hash.js","./sha512":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha512.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/sha512.js":[function(require,module,exports){(function(Buffer){var inherits=require("inherits");var Hash=require("./hash");var K=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];var W=new Array(160);function Sha512(){this.init();this._w=W;Hash.call(this,128,112)}inherits(Sha512,Hash);Sha512.prototype.init=function(){this._ah=1779033703;this._bh=3144134277;this._ch=1013904242;this._dh=2773480762;this._eh=1359893119;this._fh=2600822924;this._gh=528734635;this._hh=1541459225;this._al=4089235720;this._bl=2227873595;this._cl=4271175723;this._dl=1595750129;this._el=2917565137;this._fl=725511199;this._gl=4215389547;this._hl=327033209;return this};function Ch(x,y,z){return z^x&(y^z)}function maj(x,y,z){return x&y|z&(x|y)}function sigma0(x,xl){return(x>>>28|xl<<4)^(xl>>>2|x<<30)^(xl>>>7|x<<25)}function sigma1(x,xl){return(x>>>14|xl<<18)^(x>>>18|xl<<14)^(xl>>>9|x<<23)}function Gamma0(x,xl){return(x>>>1|xl<<31)^(x>>>8|xl<<24)^x>>>7}function Gamma0l(x,xl){return(x>>>1|xl<<31)^(x>>>8|xl<<24)^(x>>>7|xl<<25)}function Gamma1(x,xl){return(x>>>19|xl<<13)^(xl>>>29|x<<3)^x>>>6}function Gamma1l(x,xl){return(x>>>19|xl<<13)^(xl>>>29|x<<3)^(x>>>6|xl<<26)}function getCarry(a,b){return a>>>0>>0?1:0}Sha512.prototype._update=function(M){var W=this._w;var ah=this._ah|0;var bh=this._bh|0;var ch=this._ch|0;var dh=this._dh|0;var eh=this._eh|0;var fh=this._fh|0;var gh=this._gh|0;var hh=this._hh|0;var al=this._al|0;var bl=this._bl|0;var cl=this._cl|0;var dl=this._dl|0;var el=this._el|0;var fl=this._fl|0;var gl=this._gl|0;var hl=this._hl|0;for(var i=0;i<32;i+=2){W[i]=M.readInt32BE(i*4);W[i+1]=M.readInt32BE(i*4+4)}for(;i<160;i+=2){var xh=W[i-15*2];var xl=W[i-15*2+1];var gamma0=Gamma0(xh,xl);var gamma0l=Gamma0l(xl,xh);xh=W[i-2*2];xl=W[i-2*2+1];var gamma1=Gamma1(xh,xl);var gamma1l=Gamma1l(xl,xh);var Wi7h=W[i-7*2];var Wi7l=W[i-7*2+1];var Wi16h=W[i-16*2];var Wi16l=W[i-16*2+1];var Wil=gamma0l+Wi7l|0;var Wih=gamma0+Wi7h+getCarry(Wil,gamma0l)|0;Wil=Wil+gamma1l|0;Wih=Wih+gamma1+getCarry(Wil,gamma1l)|0;Wil=Wil+Wi16l|0;Wih=Wih+Wi16h+getCarry(Wil,Wi16l)|0;W[i]=Wih;W[i+1]=Wil}for(var j=0;j<160;j+=2){Wih=W[j];Wil=W[j+1];var majh=maj(ah,bh,ch);var majl=maj(al,bl,cl);var sigma0h=sigma0(ah,al);var sigma0l=sigma0(al,ah);var sigma1h=sigma1(eh,el);var sigma1l=sigma1(el,eh);var Kih=K[j];var Kil=K[j+1];var chh=Ch(eh,fh,gh);var chl=Ch(el,fl,gl);var t1l=hl+sigma1l|0;var t1h=hh+sigma1h+getCarry(t1l,hl)|0;t1l=t1l+chl|0;t1h=t1h+chh+getCarry(t1l,chl)|0;t1l=t1l+Kil|0;t1h=t1h+Kih+getCarry(t1l,Kil)|0;t1l=t1l+Wil|0;t1h=t1h+Wih+getCarry(t1l,Wil)|0;var t2l=sigma0l+majl|0;var t2h=sigma0h+majh+getCarry(t2l,sigma0l)|0;hh=gh;hl=gl;gh=fh;gl=fl;fh=eh;fl=el;el=dl+t1l|0;eh=dh+t1h+getCarry(el,dl)|0;dh=ch;dl=cl;ch=bh;cl=bl;bh=ah;bl=al;al=t1l+t2l|0;ah=t1h+t2h+getCarry(al,t1l)|0}this._al=this._al+al|0;this._bl=this._bl+bl|0;this._cl=this._cl+cl|0;this._dl=this._dl+dl|0;this._el=this._el+el|0;this._fl=this._fl+fl|0;this._gl=this._gl+gl|0;this._hl=this._hl+hl|0;this._ah=this._ah+ah+getCarry(this._al,al)|0;this._bh=this._bh+bh+getCarry(this._bl,bl)|0;this._ch=this._ch+ch+getCarry(this._cl,cl)|0;this._dh=this._dh+dh+getCarry(this._dl,dl)|0;this._eh=this._eh+eh+getCarry(this._el,el)|0;this._fh=this._fh+fh+getCarry(this._fl,fl)|0;this._gh=this._gh+gh+getCarry(this._gl,gl)|0;this._hh=this._hh+hh+getCarry(this._hl,hl)|0};Sha512.prototype._hash=function(){var H=new Buffer(64);function writeInt64BE(h,l,offset){H.writeInt32BE(h,offset);H.writeInt32BE(l,offset+4)}writeInt64BE(this._ah,this._al,0);writeInt64BE(this._bh,this._bl,8);writeInt64BE(this._ch,this._cl,16);writeInt64BE(this._dh,this._dl,24);writeInt64BE(this._eh,this._el,32);writeInt64BE(this._fh,this._fl,40);writeInt64BE(this._gh,this._gl,48);writeInt64BE(this._hh,this._hl,56);return H};module.exports=Sha512}).call(this,require("buffer").Buffer)},{"./hash":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hash/node_modules/sha.js/hash.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/create-hmac/browser.js":[function(require,module,exports){(function(Buffer){"use strict";var createHash=require("create-hash/browser");var inherits=require("inherits");var Transform=require("stream").Transform;var ZEROS=new Buffer(128);ZEROS.fill(0);function Hmac(alg,key){Transform.call(this);alg=alg.toLowerCase();if(typeof key==="string"){key=new Buffer(key)}var blocksize=alg==="sha512"||alg==="sha384"?128:64;this._alg=alg;this._key=key;if(key.length>blocksize){key=createHash(alg).update(key).digest()}else if(key.lengthbits){num.ishrn(1)}if(num.isEven()){num.iadd(ONE)}if(!num.testn(1)){num.iadd(TWO)}if(!gen.cmp(TWO)){while(num.mod(TWENTYFOUR).cmp(ELEVEN)){num.iadd(FOUR)}}else if(!gen.cmp(FIVE)){while(num.mod(TEN).cmp(THREE)){num.iadd(FOUR)}}n2=num.shrn(1);if(simpleSieve(n2)&&simpleSieve(num)&&fermatTest(n2)&&fermatTest(num)&&millerRabin.test(n2)&&millerRabin.test(num)){return num}}}},{"bn.js":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","miller-rabin":"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/diffie-hellman/node_modules/miller-rabin/lib/mr.js",randombytes:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/randombytes/browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/diffie-hellman/lib/primes.json":[function(require,module,exports){module.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js":[function(require,module,exports){arguments[4]["/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/browserify-sign/node_modules/bn.js/lib/bn.js"][0].apply(exports,arguments)},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/node_modules/diffie-hellman/node_modules/miller-rabin/lib/mr.js":[function(require,module,exports){var bn=require("bn.js");var brorand=require("brorand");function MillerRabin(rand){this.rand=rand||new brorand.Rand}module.exports=MillerRabin;MillerRabin.create=function create(rand){return new MillerRabin(rand)};MillerRabin.prototype._rand=function _rand(n){var len=n.bitLength();var buf=this.rand.generate(Math.ceil(len/8));buf[0]|=3;var mask=len&7;if(mask!==0)buf[buf.length-1]>>=7-mask;return new bn(buf)};MillerRabin.prototype.test=function test(n,k,cb){var len=n.bitLength();var red=bn.mont(n);var rone=new bn(1).toRed(red);if(!k)k=Math.max(1,len/48|0);var n1=n.subn(1);var n2=n1.subn(1);for(var s=0;!n1.testn(s);s++){}var d=n.shrn(s);var rn1=n1.toRed(red);var prime=true;for(;k>0;k--){var a=this._rand(n2);if(cb)cb(a);var x=a.toRed(red).redPow(d);if(x.cmp(rone)===0||x.cmp(rn1)===0)continue;for(var i=1;i0;k--){var a=this._rand(n2);var g=n.gcd(a);if(g.cmpn(1)!==0)return g;var x=a.toRed(red).redPow(d);if(x.cmp(rone)===0||x.cmp(rn1)===0)continue;for(var i=1;iMAX_ALLOC){throw new TypeError("Bad key length")}digest=digest||"sha1";if(!Buffer.isBuffer(password))password=new Buffer(password,"binary");if(!Buffer.isBuffer(salt))salt=new Buffer(salt,"binary");var hLen;var l=1;var DK=new Buffer(keylen);var block1=new Buffer(salt.length+4);salt.copy(block1,0,0,salt.length);var r;var T;for(var i=1;i<=l;i++){block1.writeUInt32BE(i,salt.length);var U=createHmac(digest,password).update(block1).digest();if(!hLen){hLen=U.length;T=new Buffer(hLen);l=Math.ceil(keylen/hLen);r=keylen-(l-1)*hLen}U.copy(T,0,0,hLen);for(var j=1;jk||new bn(enc).cmp(key.modulus)>=0){throw new Error("decryption error")}var msg;if(reverse){msg=withPublic(new bn(enc),key)}else{msg=crt(enc,key)}var zBuffer=new Buffer(k-msg.length);zBuffer.fill(0);msg=Buffer.concat([zBuffer,msg],k);if(padding===4){return oaep(key,msg)}else if(padding===1){return pkcs1(key,msg,reverse)}else if(padding===3){return msg}else{throw new Error("unknown padding")}};function oaep(key,msg){var n=key.modulus;var k=key.modulus.byteLength();var mLen=msg.length;var iHash=createHash("sha1").update(new Buffer("")).digest();var hLen=iHash.length;var hLen2=2*hLen;if(msg[0]!==0){throw new Error("decryption error")}var maskedSeed=msg.slice(1,hLen+1);var maskedDb=msg.slice(hLen+1);var seed=xor(maskedSeed,mgf(maskedDb,hLen));var db=xor(maskedDb,mgf(seed,k-hLen-1));if(compare(iHash,db.slice(0,hLen))){throw new Error("decryption error")}var i=hLen;while(db[i]===0){i++}if(db[i++]!==1){throw new Error("decryption error")}return db.slice(i)}function pkcs1(key,msg,reverse){var p1=msg.slice(0,2);var i=2;var status=0;while(msg[i++]!==0){if(i>=msg.length){status++;break}}var ps=msg.slice(2,i-1);var p2=msg.slice(i-1,i);if(p1.toString("hex")!=="0002"&&!reverse||p1.toString("hex")!=="0001"&&reverse){status++}if(ps.length<8){status++}if(status){throw new Error("decryption error")}return msg.slice(i)}function compare(a,b){a=new Buffer(a);b=new Buffer(b);var dif=0;var len=a.length;if(a.length!==b.length){dif++;len=Math.min(a.length,b.length)}var i=-1;while(++i=0){throw new Error("data too long for modulus")}}else{throw new Error("unknown padding")}if(reverse){return crt(paddedMsg,key)}else{return withPublic(paddedMsg,key)}};function oaep(key,msg){var k=key.modulus.byteLength();var mLen=msg.length;var iHash=createHash("sha1").update(new Buffer("")).digest();var hLen=iHash.length;var hLen2=2*hLen;if(mLen>k-hLen2-2){throw new Error("message too long")}var ps=new Buffer(k-mLen-hLen2-2);ps.fill(0);var dblen=k-hLen-1;var seed=randomBytes(hLen);var maskedDb=xor(Buffer.concat([iHash,ps,new Buffer([1]),msg],dblen),mgf(seed,dblen));var maskedSeed=xor(seed,mgf(maskedDb,hLen));return new bn(Buffer.concat([new Buffer([0]),maskedSeed,maskedDb],k))}function pkcs1(key,msg,reverse){var mLen=msg.length;var k=key.modulus.byteLength();if(mLen>k-11){throw new Error("message too long")}var ps;if(reverse){ps=new Buffer(k-mLen-3);ps.fill(255)}else{ps=nonZero(k-mLen-3)}return new bn(Buffer.concat([new Buffer([0,reverse?1:2]),ps,new Buffer([0]),msg],k))}function nonZero(len,crypto){var out=new Buffer(len);var i=0;var cache=randomBytes(len*2);var cur=0;var num;while(i65536)throw new Error("requested too many random bytes");var rawBytes=new global.Uint8Array(size);if(size>0){crypto.getRandomValues(rawBytes)}var bytes=new Buffer(rawBytes.buffer);if(typeof cb==="function"){return process.nextTick(function(){cb(null,bytes)})}return bytes}}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{},require("buffer").Buffer)},{_process:"/data/github/geopackage-node/node_modules/browserify/node_modules/process/browser.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/events/events.js":[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}throw TypeError('Uncaught, unspecified "error" event.')}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:args=Array.prototype.slice.call(arguments,1);handler.apply(this,args)}}else if(isObject(handler)){args=Array.prototype.slice.call(arguments,1);listeners=handler.slice();len=listeners.length;for(i=0;i0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-- >0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else if(listeners){while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener))return 1;else if(evlistener)return evlistener.length}return 0};EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type)};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js":[function(require,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":[function(require,module,exports){module.exports=function(obj){return!!(obj!=null&&(obj._isBuffer||obj.constructor&&typeof obj.constructor.isBuffer==="function"&&obj.constructor.isBuffer(obj)))}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/path-browserify/index.js":[function(require,module,exports){(function(process){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}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i1){for(var i=1;i0){if(state.ended&&!addToFront){var e=new Error("stream.push() after EOF");stream.emit("error",e)}else if(state.endEmitted&&addToFront){var e=new Error("stream.unshift() after end event");stream.emit("error",e)}else{var skipAdd;if(state.decoder&&!addToFront&&!encoding){chunk=state.decoder.write(chunk);skipAdd=!state.objectMode&&chunk.length===0}if(!addToFront)state.reading=false;if(!skipAdd){if(state.flowing&&state.length===0&&!state.sync){stream.emit("data",chunk);stream.read(0)}else{state.length+=state.objectMode?1:chunk.length;if(addToFront)state.buffer.unshift(chunk);else state.buffer.push(chunk);if(state.needReadable)emitReadable(stream)}}maybeReadMore(stream,state)}}else if(!addToFront){state.reading=false}return needMoreData(state)}function needMoreData(state){return!state.ended&&(state.needReadable||state.length=MAX_HWM){ +n=MAX_HWM}else{n--;n|=n>>>1;n|=n>>>2;n|=n>>>4;n|=n>>>8;n|=n>>>16;n++}return n}function howMuchToRead(n,state){if(state.length===0&&state.ended)return 0;if(state.objectMode)return n===0?0:1;if(n===null||isNaN(n)){if(state.flowing&&state.buffer.length)return state.buffer[0].length;else return state.length}if(n<=0)return 0;if(n>state.highWaterMark)state.highWaterMark=computeNewHighWaterMark(n);if(n>state.length){if(!state.ended){state.needReadable=true;return 0}else{return state.length}}return n}Readable.prototype.read=function(n){debug("read",n);var state=this._readableState;var nOrig=n;if(typeof n!=="number"||n>0)state.emittedReadable=false;if(n===0&&state.needReadable&&(state.length>=state.highWaterMark||state.ended)){debug("read: emitReadable",state.length,state.ended);if(state.length===0&&state.ended)endReadable(this);else emitReadable(this);return null}n=howMuchToRead(n,state);if(n===0&&state.ended){if(state.length===0)endReadable(this);return null}var doRead=state.needReadable;debug("need readable",doRead);if(state.length===0||state.length-n0)ret=fromList(n,state);else ret=null;if(ret===null){state.needReadable=true;n=0}state.length-=n;if(state.length===0&&!state.ended)state.needReadable=true;if(nOrig!==n&&state.ended&&state.length===0)endReadable(this);if(ret!==null)this.emit("data",ret);return ret};function chunkInvalid(state,chunk){var er=null;if(!Buffer.isBuffer(chunk)&&typeof chunk!=="string"&&chunk!==null&&chunk!==undefined&&!state.objectMode){er=new TypeError("Invalid non-string/buffer chunk")}return er}function onEofChunk(stream,state){if(state.ended)return;if(state.decoder){var chunk=state.decoder.end();if(chunk&&chunk.length){state.buffer.push(chunk);state.length+=state.objectMode?1:chunk.length}}state.ended=true;emitReadable(stream)}function emitReadable(stream){var state=stream._readableState;state.needReadable=false;if(!state.emittedReadable){debug("emitReadable",state.flowing);state.emittedReadable=true;if(state.sync)processNextTick(emitReadable_,stream);else emitReadable_(stream)}}function emitReadable_(stream){debug("emit readable");stream.emit("readable");flow(stream)}function maybeReadMore(stream,state){if(!state.readingMore){state.readingMore=true;processNextTick(maybeReadMore_,stream,state)}}function maybeReadMore_(stream,state){var len=state.length;while(!state.reading&&!state.flowing&&!state.ended&&state.length=length){if(stringMode)ret=list.join("");else if(list.length===1)ret=list[0];else ret=Buffer.concat(list,length);list.length=0}else{if(n0)throw new Error("endReadable called on non-empty stream");if(!state.endEmitted){state.ended=true;processNextTick(endReadableNT,state,stream)}}function endReadableNT(state,stream){if(!state.endEmitted&&state.length===0){state.endEmitted=true;stream.readable=false;stream.emit("end")}}function forEach(xs,f){for(var i=0,l=xs.length;i-1?setImmediate:processNextTick;var Buffer=require("buffer").Buffer;Writable.WritableState=WritableState;var util=require("core-util-is");util.inherits=require("inherits");var internalUtil={deprecate:require("util-deprecate")};var Stream;(function(){try{Stream=require("st"+"ream")}catch(_){}finally{if(!Stream)Stream=require("events").EventEmitter}})();var Buffer=require("buffer").Buffer;util.inherits(Writable,Stream);function nop(){}function WriteReq(chunk,encoding,cb){this.chunk=chunk;this.encoding=encoding;this.callback=cb;this.next=null}var Duplex;function WritableState(options,stream){Duplex=Duplex||require("./_stream_duplex");options=options||{};this.objectMode=!!options.objectMode;if(stream instanceof Duplex)this.objectMode=this.objectMode||!!options.writableObjectMode;var hwm=options.highWaterMark;var defaultHwm=this.objectMode?16:16*1024;this.highWaterMark=hwm||hwm===0?hwm:defaultHwm;this.highWaterMark=~~this.highWaterMark;this.needDrain=false;this.ending=false;this.ended=false;this.finished=false;var noDecode=options.decodeStrings===false;this.decodeStrings=!noDecode;this.defaultEncoding=options.defaultEncoding||"utf8";this.length=0;this.writing=false;this.corked=0;this.sync=true;this.bufferProcessing=false;this.onwrite=function(er){onwrite(stream,er)};this.writecb=null;this.writelen=0;this.bufferedRequest=null;this.lastBufferedRequest=null;this.pendingcb=0;this.prefinished=false;this.errorEmitted=false;this.bufferedRequestCount=0;this.corkedRequestsFree=new CorkedRequest(this);this.corkedRequestsFree.next=new CorkedRequest(this)}WritableState.prototype.getBuffer=function writableStateGetBuffer(){var current=this.bufferedRequest;var out=[];while(current){out.push(current);current=current.next}return out};(function(){try{Object.defineProperty(WritableState.prototype,"buffer",{get:internalUtil.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer "+"instead.")})}catch(_){}})();var Duplex;function Writable(options){Duplex=Duplex||require("./_stream_duplex");if(!(this instanceof Writable)&&!(this instanceof Duplex))return new Writable(options);this._writableState=new WritableState(options,this);this.writable=true;if(options){if(typeof options.write==="function")this._write=options.write;if(typeof options.writev==="function")this._writev=options.writev}Stream.call(this)}Writable.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))};function writeAfterEnd(stream,cb){var er=new Error("write after end");stream.emit("error",er);processNextTick(cb,er)}function validChunk(stream,state,chunk,cb){var valid=true;if(!Buffer.isBuffer(chunk)&&typeof chunk!=="string"&&chunk!==null&&chunk!==undefined&&!state.objectMode){var er=new TypeError("Invalid non-string/buffer chunk");stream.emit("error",er);processNextTick(cb,er);valid=false}return valid}Writable.prototype.write=function(chunk,encoding,cb){var state=this._writableState;var ret=false;if(typeof encoding==="function"){cb=encoding;encoding=null}if(Buffer.isBuffer(chunk))encoding="buffer";else if(!encoding)encoding=state.defaultEncoding;if(typeof cb!=="function")cb=nop;if(state.ended)writeAfterEnd(this,cb);else if(validChunk(this,state,chunk,cb)){state.pendingcb++;ret=writeOrBuffer(this,state,chunk,encoding,cb)}return ret};Writable.prototype.cork=function(){var state=this._writableState;state.corked++};Writable.prototype.uncork=function(){var state=this._writableState;if(state.corked){state.corked--;if(!state.writing&&!state.corked&&!state.finished&&!state.bufferProcessing&&state.bufferedRequest)clearBuffer(this,state)}};Writable.prototype.setDefaultEncoding=function setDefaultEncoding(encoding){if(typeof encoding==="string")encoding=encoding.toLowerCase();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);this._writableState.defaultEncoding=encoding};function decodeChunk(state,chunk,encoding){if(!state.objectMode&&state.decodeStrings!==false&&typeof chunk==="string"){chunk=new Buffer(chunk,encoding)}return chunk}function writeOrBuffer(stream,state,chunk,encoding,cb){chunk=decodeChunk(state,chunk,encoding);if(Buffer.isBuffer(chunk))encoding="buffer";var len=state.objectMode?1:chunk.length;state.length+=len;var ret=state.length=this.charLength-this.charReceived?this.charLength-this.charReceived:buffer.length;buffer.copy(this.charBuffer,this.charReceived,0,available);this.charReceived+=available;if(this.charReceived=55296&&charCode<=56319){this.charLength+=this.surrogateSize;charStr="";continue}this.charReceived=this.charLength=0;if(buffer.length===0){return charStr}break}this.detectIncompleteChar(buffer);var end=buffer.length;if(this.charLength){buffer.copy(this.charBuffer,0,buffer.length-this.charReceived,end);end-=this.charReceived}charStr+=buffer.toString(this.encoding,0,end);var end=charStr.length-1;var charCode=charStr.charCodeAt(end);if(charCode>=55296&&charCode<=56319){var size=this.surrogateSize;this.charLength+=size;this.charReceived+=size;this.charBuffer.copy(this.charBuffer,size,0,size);buffer.copy(this.charBuffer,0,0,size);return charStr.substring(0,end)}return charStr};StringDecoder.prototype.detectIncompleteChar=function(buffer){var i=buffer.length>=3?3:buffer.length;for(;i>0;i--){var c=buffer[buffer.length-i];if(i==1&&c>>5==6){this.charLength=2;break}if(i<=2&&c>>4==14){this.charLength=3;break}if(i<=3&&c>>3==30){this.charLength=4;break}}this.charReceived=i};StringDecoder.prototype.end=function(buffer){var res="";if(buffer&&buffer.length)res=this.write(buffer);if(this.charReceived){var cr=this.charReceived;var buf=this.charBuffer;var enc=this.encoding;res+=buf.slice(0,cr).toString(enc)}return res};function passThroughWrite(buffer){return buffer.toString(this.encoding)}function utf16DetectIncompleteChar(buffer){this.charReceived=buffer.length%2;this.charLength=this.charReceived?2:0}function base64DetectIncompleteChar(buffer){this.charReceived=buffer.length%3;this.charLength=this.charReceived?3:0}},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/util/support/isBufferBrowser.js":[function(require,module,exports){module.exports=function isBuffer(arg){return arg&&typeof arg==="object"&&typeof arg.copy==="function"&&typeof arg.fill==="function"&&typeof arg.readUInt8==="function"}},{}],"/data/github/geopackage-node/node_modules/browserify/node_modules/util/util.js":[function(require,module,exports){(function(process,global){var formatRegExp=/%[sdj%]/g;exports.format=function(f){if(!isString(f)){var objects=[];for(var i=0;i=len)return x;switch(x){case"%s":return String(args[i++]);case"%d":return Number(args[i++]);case"%j":try{return JSON.stringify(args[i++])}catch(_){return"[Circular]"}default:return x}});for(var x=args[i];i=3)ctx.depth=arguments[2];if(arguments.length>=4)ctx.colors=arguments[3];if(isBoolean(opts)){ctx.showHidden=opts}else if(opts){exports._extend(ctx,opts)}if(isUndefined(ctx.showHidden))ctx.showHidden=false;if(isUndefined(ctx.depth))ctx.depth=2;if(isUndefined(ctx.colors))ctx.colors=false;if(isUndefined(ctx.customInspect))ctx.customInspect=true;if(ctx.colors)ctx.stylize=stylizeWithColor;return formatValue(ctx,obj,ctx.depth)}exports.inspect=inspect;inspect.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};inspect.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"};function stylizeWithColor(str,styleType){var style=inspect.styles[styleType];if(style){return"["+inspect.colors[style][0]+"m"+str+"["+inspect.colors[style][1]+"m"}else{return str}}function stylizeNoColor(str,styleType){return str}function arrayToHash(array){var hash={};array.forEach(function(val,idx){hash[val]=true});return hash}function formatValue(ctx,value,recurseTimes){if(ctx.customInspect&&value&&isFunction(value.inspect)&&value.inspect!==exports.inspect&&!(value.constructor&&value.constructor.prototype===value)){var ret=value.inspect(recurseTimes,ctx);if(!isString(ret)){ret=formatValue(ctx,ret,recurseTimes)}return ret}var primitive=formatPrimitive(ctx,value);if(primitive){return primitive}var keys=Object.keys(value);var visibleKeys=arrayToHash(keys);if(ctx.showHidden){keys=Object.getOwnPropertyNames(value)}if(isError(value)&&(keys.indexOf("message")>=0||keys.indexOf("description")>=0)){return formatError(value)}if(keys.length===0){if(isFunction(value)){var name=value.name?": "+value.name:"";return ctx.stylize("[Function"+name+"]","special")}if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}if(isDate(value)){return ctx.stylize(Date.prototype.toString.call(value),"date")}if(isError(value)){return formatError(value)}}var base="",array=false,braces=["{","}"];if(isArray(value)){array=true;braces=["[","]"]}if(isFunction(value)){var n=value.name?": "+value.name:"";base=" [Function"+n+"]"}if(isRegExp(value)){base=" "+RegExp.prototype.toString.call(value)}if(isDate(value)){base=" "+Date.prototype.toUTCString.call(value)}if(isError(value)){base=" "+formatError(value)}if(keys.length===0&&(!array||value.length==0)){return braces[0]+base+braces[1]}if(recurseTimes<0){if(isRegExp(value)){return ctx.stylize(RegExp.prototype.toString.call(value),"regexp")}else{return ctx.stylize("[Object]","special")}}ctx.seen.push(value);var output;if(array){output=formatArray(ctx,value,recurseTimes,visibleKeys,keys)}else{output=keys.map(function(key){return formatProperty(ctx,value,recurseTimes,visibleKeys,key,array)})}ctx.seen.pop();return reduceToSingleString(output,base,braces)}function formatPrimitive(ctx,value){if(isUndefined(value))return ctx.stylize("undefined","undefined");if(isString(value)){var simple="'"+JSON.stringify(value).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return ctx.stylize(simple,"string")}if(isNumber(value))return ctx.stylize(""+value,"number");if(isBoolean(value))return ctx.stylize(""+value,"boolean");if(isNull(value))return ctx.stylize("null","null")}function formatError(value){return"["+Error.prototype.toString.call(value)+"]"}function formatArray(ctx,value,recurseTimes,visibleKeys,keys){var output=[];for(var i=0,l=value.length;i-1){if(array){str=str.split("\n").map(function(line){return" "+line}).join("\n").substr(2)}else{str="\n"+str.split("\n").map(function(line){return" "+line}).join("\n")}}}else{str=ctx.stylize("[Circular]","special")}}if(isUndefined(name)){if(array&&key.match(/^\d+$/)){return str}name=JSON.stringify(""+key);if(name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)){name=name.substr(1,name.length-2);name=ctx.stylize(name,"name")}else{name=name.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'");name=ctx.stylize(name,"string")}}return name+": "+str}function reduceToSingleString(output,base,braces){var numLinesEst=0;var length=output.reduce(function(prev,cur){numLinesEst++;if(cur.indexOf("\n")>=0)numLinesEst++;return prev+cur.replace(/\u001b\[\d\d?m/g,"").length+1},0);if(length>60){return braces[0]+(base===""?"":base+"\n ")+" "+output.join(",\n ")+" "+braces[1]}return braces[0]+base+" "+output.join(", ")+" "+braces[1]}function isArray(ar){return Array.isArray(ar)}exports.isArray=isArray;function isBoolean(arg){return typeof arg==="boolean"}exports.isBoolean=isBoolean;function isNull(arg){return arg===null}exports.isNull=isNull;function isNullOrUndefined(arg){return arg==null}exports.isNullOrUndefined=isNullOrUndefined;function isNumber(arg){return typeof arg==="number"}exports.isNumber=isNumber;function isString(arg){return typeof arg==="string"}exports.isString=isString;function isSymbol(arg){return typeof arg==="symbol"}exports.isSymbol=isSymbol;function isUndefined(arg){return arg===void 0}exports.isUndefined=isUndefined;function isRegExp(re){return isObject(re)&&objectToString(re)==="[object RegExp]"}exports.isRegExp=isRegExp;function isObject(arg){return typeof arg==="object"&&arg!==null}exports.isObject=isObject;function isDate(d){return isObject(d)&&objectToString(d)==="[object Date]"}exports.isDate=isDate;function isError(e){return isObject(e)&&(objectToString(e)==="[object Error]"||e instanceof Error)}exports.isError=isError;function isFunction(arg){return typeof arg==="function"}exports.isFunction=isFunction;function isPrimitive(arg){return arg===null||typeof arg==="boolean"||typeof arg==="number"||typeof arg==="string"||typeof arg==="symbol"||typeof arg==="undefined"}exports.isPrimitive=isPrimitive;exports.isBuffer=require("./support/isBuffer");function objectToString(o){return Object.prototype.toString.call(o)}function pad(n){return n<10?"0"+n.toString(10):n.toString(10)}var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function timestamp(){var d=new Date;var time=[pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(":");return[d.getDate(),months[d.getMonth()],time].join(" ")}exports.log=function(){console.log("%s - %s",timestamp(),exports.format.apply(exports,arguments))};exports.inherits=require("inherits");exports._extend=function(origin,add){if(!add||!isObject(add))return origin;var keys=Object.keys(add);var i=keys.length;while(i--){origin[keys[i]]=add[keys[i]]}return origin};function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./support/isBuffer":"/data/github/geopackage-node/node_modules/browserify/node_modules/util/support/isBufferBrowser.js",_process:"/data/github/geopackage-node/node_modules/browserify/node_modules/process/browser.js",inherits:"/data/github/geopackage-node/node_modules/browserify/node_modules/inherits/inherits_browser.js"}],"/data/github/geopackage-node/node_modules/browserify/node_modules/vm-browserify/index.js":[function(require,module,exports){var indexOf=require("indexof");var Object_keys=function(obj){if(Object.keys)return Object.keys(obj);else{var res=[];for(var key in obj)res.push(key);return res}};var forEach=function(xs,fn){if(xs.forEach)return xs.forEach(fn);else for(var i=0;i1)){return null}if(buf[0]===255&&buf[1]===216&&buf[2]===255){return{ext:"jpg",mime:"image/jpeg"}}if(buf[0]===137&&buf[1]===80&&buf[2]===78&&buf[3]===71){return{ext:"png",mime:"image/png"}}if(buf[0]===71&&buf[1]===73&&buf[2]===70){return{ext:"gif",mime:"image/gif"}}if(buf[8]===87&&buf[9]===69&&buf[10]===66&&buf[11]===80){return{ext:"webp",mime:"image/webp"}}if((buf[0]===73&&buf[1]===73&&buf[2]===42&&buf[3]===0||buf[0]===77&&buf[1]===77&&buf[2]===0&&buf[3]===42)&&buf[8]===67&&buf[9]===82){return{ext:"cr2",mime:"image/x-canon-cr2"}}if(buf[0]===73&&buf[1]===73&&buf[2]===42&&buf[3]===0||buf[0]===77&&buf[1]===77&&buf[2]===0&&buf[3]===42){return{ext:"tif",mime:"image/tiff"}}if(buf[0]===66&&buf[1]===77){return{ext:"bmp",mime:"image/bmp"}}if(buf[0]===73&&buf[1]===73&&buf[2]===188){return{ext:"jxr",mime:"image/vnd.ms-photo"}}if(buf[0]===56&&buf[1]===66&&buf[2]===80&&buf[3]===83){return{ext:"psd",mime:"image/vnd.adobe.photoshop"}}if(buf[0]===80&&buf[1]===75&&buf[2]===3&&buf[3]===4&&buf[30]===109&&buf[31]===105&&buf[32]===109&&buf[33]===101&&buf[34]===116&&buf[35]===121&&buf[36]===112&&buf[37]===101&&buf[38]===97&&buf[39]===112&&buf[40]===112&&buf[41]===108&&buf[42]===105&&buf[43]===99&&buf[44]===97&&buf[45]===116&&buf[46]===105&&buf[47]===111&&buf[48]===110&&buf[49]===47&&buf[50]===101&&buf[51]===112&&buf[52]===117&&buf[53]===98&&buf[54]===43&&buf[55]===122&&buf[56]===105&&buf[57]===112){return{ext:"epub",mime:"application/epub+zip"}}if(buf[0]===80&&buf[1]===75&&buf[2]===3&&buf[3]===4&&buf[30]===77&&buf[31]===69&&buf[32]===84&&buf[33]===65&&buf[34]===45&&buf[35]===73&&buf[36]===78&&buf[37]===70&&buf[38]===47&&buf[39]===109&&buf[40]===111&&buf[41]===122&&buf[42]===105&&buf[43]===108&&buf[44]===108&&buf[45]===97&&buf[46]===46&&buf[47]===114&&buf[48]===115&&buf[49]===97){return{ext:"xpi",mime:"application/x-xpinstall"}}if(buf[0]===80&&buf[1]===75&&(buf[2]===3||buf[2]===5||buf[2]===7)&&(buf[3]===4||buf[3]===6||buf[3]===8)){return{ext:"zip",mime:"application/zip"}}if(buf[257]===117&&buf[258]===115&&buf[259]===116&&buf[260]===97&&buf[261]===114){return{ext:"tar",mime:"application/x-tar"}}if(buf[0]===82&&buf[1]===97&&buf[2]===114&&buf[3]===33&&buf[4]===26&&buf[5]===7&&(buf[6]===0||buf[6]===1)){return{ext:"rar",mime:"application/x-rar-compressed"}}if(buf[0]===31&&buf[1]===139&&buf[2]===8){return{ext:"gz",mime:"application/gzip"}}if(buf[0]===66&&buf[1]===90&&buf[2]===104){return{ext:"bz2",mime:"application/x-bzip2"}}if(buf[0]===55&&buf[1]===122&&buf[2]===188&&buf[3]===175&&buf[4]===39&&buf[5]===28){return{ext:"7z",mime:"application/x-7z-compressed"}}if(buf[0]===120&&buf[1]===1){return{ext:"dmg",mime:"application/x-apple-diskimage"}}if(buf[0]===0&&buf[1]===0&&buf[2]===0&&(buf[3]===24||buf[3]===32)&&buf[4]===102&&buf[5]===116&&buf[6]===121&&buf[7]===112||buf[0]===51&&buf[1]===103&&buf[2]===112&&buf[3]===53||buf[0]===0&&buf[1]===0&&buf[2]===0&&buf[3]===28&&buf[4]===102&&buf[5]===116&&buf[6]===121&&buf[7]===112&&buf[8]===109&&buf[9]===112&&buf[10]===52&&buf[11]===50&&buf[16]===109&&buf[17]===112&&buf[18]===52&&buf[19]===49&&buf[20]===109&&buf[21]===112&&buf[22]===52&&buf[23]===50&&buf[24]===105&&buf[25]===115&&buf[26]===111&&buf[27]===109||buf[0]===0&&buf[1]===0&&buf[2]===0&&buf[3]===28&&buf[4]===102&&buf[5]===116&&buf[6]===121&&buf[7]===112&&buf[8]===105&&buf[9]===115&&buf[10]===111&&buf[11]===109||buf[0]===0&&buf[1]===0&&buf[2]===0&&buf[3]===28&&buf[4]===102&&buf[5]===116&&buf[6]===121&&buf[7]===112&&buf[8]===109&&buf[9]===112&&buf[10]===52&&buf[11]===50&&buf[12]===0&&buf[13]===0&&buf[14]===0&&buf[15]===0){return{ext:"mp4",mime:"video/mp4"}}if(buf[0]===0&&buf[1]===0&&buf[2]===0&&buf[3]===28&&buf[4]===102&&buf[5]===116&&buf[6]===121&&buf[7]===112&&buf[8]===77&&buf[9]===52&&buf[10]===86){return{ext:"m4v",mime:"video/x-m4v"}}if(buf[0]===77&&buf[1]===84&&buf[2]===104&&buf[3]===100){return{ext:"mid",mime:"audio/midi"}}if(buf[31]===109&&buf[32]===97&&buf[33]===116&&buf[34]===114&&buf[35]===111&&buf[36]===115&&buf[37]===107&&buf[38]===97){return{ext:"mkv",mime:"video/x-matroska"}}if(buf[0]===26&&buf[1]===69&&buf[2]===223&&buf[3]===163){return{ext:"webm",mime:"video/webm"}}if(buf[0]===0&&buf[1]===0&&buf[2]===0&&buf[3]===20&&buf[4]===102&&buf[5]===116&&buf[6]===121&&buf[7]===112){return{ext:"mov",mime:"video/quicktime"}}if(buf[0]===82&&buf[1]===73&&buf[2]===70&&buf[3]===70&&buf[8]===65&&buf[9]===86&&buf[10]===73){return{ext:"avi",mime:"video/x-msvideo"}}if(buf[0]===48&&buf[1]===38&&buf[2]===178&&buf[3]===117&&buf[4]===142&&buf[5]===102&&buf[6]===207&&buf[7]===17&&buf[8]===166&&buf[9]===217){return{ext:"wmv",mime:"video/x-ms-wmv"}}if(buf[0]===0&&buf[1]===0&&buf[2]===1&&buf[3].toString(16)[0]==="b"){return{ext:"mpg",mime:"video/mpeg"}}if(buf[0]===73&&buf[1]===68&&buf[2]===51||buf[0]===255&&buf[1]===251){return{ext:"mp3",mime:"audio/mpeg"}}if(buf[4]===102&&buf[5]===116&&buf[6]===121&&buf[7]===112&&buf[8]===77&&buf[9]===52&&buf[10]===65||buf[0]===77&&buf[1]===52&&buf[2]===65&&buf[3]===32){return{ext:"m4a",mime:"audio/m4a"}}if(buf[28]===79&&buf[29]===112&&buf[30]===117&&buf[31]===115&&buf[32]===72&&buf[33]===101&&buf[34]===97&&buf[35]===100){return{ext:"opus",mime:"audio/opus"}}if(buf[0]===79&&buf[1]===103&&buf[2]===103&&buf[3]===83){return{ext:"ogg",mime:"audio/ogg"}}if(buf[0]===102&&buf[1]===76&&buf[2]===97&&buf[3]===67){return{ext:"flac",mime:"audio/x-flac"}}if(buf[0]===82&&buf[1]===73&&buf[2]===70&&buf[3]===70&&buf[8]===87&&buf[9]===65&&buf[10]===86&&buf[11]===69){return{ext:"wav",mime:"audio/x-wav"}}if(buf[0]===35&&buf[1]===33&&buf[2]===65&&buf[3]===77&&buf[4]===82&&buf[5]===10){return{ext:"amr",mime:"audio/amr"}}if(buf[0]===37&&buf[1]===80&&buf[2]===68&&buf[3]===70){return{ext:"pdf",mime:"application/pdf"}}if(buf[0]===77&&buf[1]===90){return{ext:"exe",mime:"application/x-msdownload"}}if((buf[0]===67||buf[0]===70)&&buf[1]===87&&buf[2]===83){return{ext:"swf",mime:"application/x-shockwave-flash"}}if(buf[0]===123&&buf[1]===92&&buf[2]===114&&buf[3]===116&&buf[4]===102){return{ext:"rtf",mime:"application/rtf"}}if(buf[0]===119&&buf[1]===79&&buf[2]===70&&buf[3]===70&&(buf[4]===0&&buf[5]===1&&buf[6]===0&&buf[7]===0||buf[4]===79&&buf[5]===84&&buf[6]===84&&buf[7]===79)){return{ext:"woff",mime:"application/font-woff"}}if(buf[0]===119&&buf[1]===79&&buf[2]===70&&buf[3]===50&&(buf[4]===0&&buf[5]===1&&buf[6]===0&&buf[7]===0||buf[4]===79&&buf[5]===84&&buf[6]===84&&buf[7]===79)){return{ext:"woff2",mime:"application/font-woff"}}if(buf[34]===76&&buf[35]===80&&(buf[8]===0&&buf[9]===0&&buf[10]===1||buf[8]===1&&buf[9]===0&&buf[10]===2||buf[8]===2&&buf[9]===0&&buf[10]===2)){return{ext:"eot",mime:"application/octet-stream"}}if(buf[0]===0&&buf[1]===1&&buf[2]===0&&buf[3]===0&&buf[4]===0){return{ext:"ttf",mime:"application/font-sfnt"}}if(buf[0]===79&&buf[1]===84&&buf[2]===84&&buf[3]===79&&buf[4]===0){return{ext:"otf",mime:"application/font-sfnt"}}if(buf[0]===0&&buf[1]===0&&buf[2]===1&&buf[3]===0){return{ext:"ico",mime:"image/x-icon"}}if(buf[0]===70&&buf[1]===76&&buf[2]===86&&buf[3]===1){return{ext:"flv",mime:"video/x-flv"}}if(buf[0]===37&&buf[1]===33){return{ext:"ps",mime:"application/postscript"}}if(buf[0]===253&&buf[1]===55&&buf[2]===122&&buf[3]===88&&buf[4]===90&&buf[5]===0){return{ext:"xz",mime:"application/x-xz"}}if(buf[0]===83&&buf[1]===81&&buf[2]===76&&buf[3]===105){return{ext:"sqlite",mime:"application/x-sqlite3"}}if(buf[0]===78&&buf[1]===69&&buf[2]===83&&buf[3]===26){return{ext:"nes",mime:"application/x-nintendo-nes-rom"}}if(buf[0]===67&&buf[1]===114&&buf[2]===50&&buf[3]===52){return{ext:"crx",mime:"application/x-google-chrome-extension"}}if(buf[0]===77&&buf[1]===83&&buf[2]===67&&buf[3]===70||buf[0]===73&&buf[1]===83&&buf[2]===99&&buf[3]===40){return{ext:"cab",mime:"application/vnd.ms-cab-compressed"}}if(buf[0]===33&&buf[1]===60&&buf[2]===97&&buf[3]===114&&buf[4]===99&&buf[5]===104&&buf[6]===62&&buf[7]===10&&buf[8]===100&&buf[9]===101&&buf[10]===98&&buf[11]===105&&buf[12]===97&&buf[13]===110&&buf[14]===45&&buf[15]===98&&buf[16]===105&&buf[17]===110&&buf[18]===97&&buf[19]===114&&buf[20]===121){return{ext:"deb",mime:"application/x-deb"}}if(buf[0]===33&&buf[1]===60&&buf[2]===97&&buf[3]===114&&buf[4]===99&&buf[5]===104&&buf[6]===62){return{ext:"ar",mime:"application/x-unix-archive"}}if(buf[0]===237&&buf[1]===171&&buf[2]===238&&buf[3]===219){return{ext:"rpm",mime:"application/x-rpm"}}if(buf[0]===31&&buf[1]===160||buf[0]===31&&buf[1]===157){return{ext:"Z",mime:"application/x-compress"}}if(buf[0]===76&&buf[1]===90&&buf[2]===73&&buf[3]===80){return{ext:"lz",mime:"application/x-lzip"}}if(buf[0]===208&&buf[1]===207&&buf[2]===17&&buf[3]===224&&buf[4]===161&&buf[5]===177&&buf[6]===26&&buf[7]===225){return{ext:"msi",mime:"application/x-msi"}}return null}},{}],"/data/github/geopackage-node/node_modules/leaflet/dist/leaflet-src.js":[function(require,module,exports){(function(window,document,undefined){var oldL=window.L,L={};L.version="0.7.7";if(typeof module==="object"&&typeof module.exports==="object"){module.exports=L}else if(typeof define==="function"&&define.amd){define(L)}L.noConflict=function(){window.L=oldL;return this};window.L=L;L.Util={extend:function(dest){var sources=Array.prototype.slice.call(arguments,1),i,j,len,src;for(j=0,len=sources.length;j2?Array.prototype.slice.call(arguments,2):null;return function(){return fn.apply(obj,args||arguments)}},stamp:function(){var lastId=0,key="_leaflet_id";return function(obj){obj[key]=obj[key]||++lastId;return obj[key]}}(),invokeEach:function(obj,method,context){var i,args;if(typeof obj==="object"){args=Array.prototype.slice.call(arguments,3);for(i in obj){method.apply(context,[i,obj[i]].concat(args))}return true}return false},limitExecByInterval:function(fn,time,context){var lock,execOnUnlock;return function wrapperFn(){var args=arguments;if(lock){execOnUnlock=true;return}lock=true;setTimeout(function(){lock=false;if(execOnUnlock){wrapperFn.apply(context,args);execOnUnlock=false}},time);fn.apply(context,args)}},falseFn:function(){return false},formatNum:function(num,digits){var pow=Math.pow(10,digits||5);return Math.round(num*pow)/pow},trim:function(str){return str.trim?str.trim():str.replace(/^\s+|\s+$/g,"")},splitWords:function(str){return L.Util.trim(str).split(/\s+/)},setOptions:function(obj,options){obj.options=L.extend({},obj.options,options);return obj.options},getParamString:function(obj,existingUrl,uppercase){var params=[];for(var i in obj){params.push(encodeURIComponent(uppercase?i.toUpperCase():i)+"="+encodeURIComponent(obj[i]))}return(!existingUrl||existingUrl.indexOf("?")===-1?"?":"&")+params.join("&")},template:function(str,data){return str.replace(/\{ *([\w_]+) *\}/g,function(str,key){var value=data[key];if(value===undefined){throw new Error("No value provided for variable "+str)}else if(typeof value==="function"){value=value(data)}return value})},isArray:Array.isArray||function(obj){return Object.prototype.toString.call(obj)==="[object Array]"},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="};(function(){function getPrefixed(name){var i,fn,prefixes=["webkit","moz","o","ms"];for(i=0;i0||type+"_idx"in events&&events[type+"_idx_len"]>0)},removeEventListener:function(types,fn,context){if(!this[eventsKey]){return this}if(!types){return this.clearAllEventListeners()}if(L.Util.invokeEach(types,this.removeEventListener,this,fn,context)){return this}var events=this[eventsKey],contextId=context&&context!==this&&L.stamp(context),i,len,type,listeners,j,indexKey,indexLenKey,typeIndex,removed;types=L.Util.splitWords(types);for(i=0,len=types.length;i=0;j--){if(listeners[j].action===fn&&(!context||listeners[j].context===context)){removed=listeners.splice(j,1);removed[0].action=L.Util.falseFn}}if(context&&typeIndex&&listeners.length===0){delete typeIndex[contextId];events[indexLenKey]--}}}}return this},clearAllEventListeners:function(){delete this[eventsKey];return this},fireEvent:function(type,data){if(!this.hasEventListeners(type)){return this}var event=L.Util.extend({},data,{type:type,target:this});var events=this[eventsKey],listeners,i,len,typeIndex,contextId;if(events[type]){listeners=events[type].slice();for(i=0,len=listeners.length;i1||"matchMedia"in window&&window.matchMedia("(min-resolution:144dpi)")&&window.matchMedia("(min-resolution:144dpi)").matches,doc=document.documentElement,ie3d=ie&&"transition"in doc.style,webkit3d="WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix&&!android23,gecko3d="MozPerspective"in doc.style,opera3d="OTransition"in doc.style,any3d=!window.L_DISABLE_3D&&(ie3d||webkit3d||gecko3d||opera3d)&&!phantomjs;var touch=!window.L_NO_TOUCH&&!phantomjs&&(pointer||"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch);L.Browser={ie:ie,ielt9:ielt9,webkit:webkit,gecko:gecko&&!webkit&&!window.opera&&!ie,android:android,android23:android23,chrome:chrome,ie3d:ie3d,webkit3d:webkit3d,gecko3d:gecko3d,opera3d:opera3d,any3d:any3d,mobile:mobile,mobileWebkit:mobile&&webkit,mobileWebkit3d:mobile&&webkit3d,mobileOpera:mobile&&window.opera,touch:touch,msPointer:msPointer,pointer:pointer,retina:retina}})();L.Point=function(x,y,round){this.x=round?Math.round(x):x;this.y=round?Math.round(y):y};L.Point.prototype={clone:function(){return new L.Point(this.x,this.y)},add:function(point){return this.clone()._add(L.point(point))},_add:function(point){this.x+=point.x;this.y+=point.y;return this},subtract:function(point){return this.clone()._subtract(L.point(point))},_subtract:function(point){this.x-=point.x;this.y-=point.y;return this},divideBy:function(num){return this.clone()._divideBy(num)},_divideBy:function(num){this.x/=num;this.y/=num;return this},multiplyBy:function(num){return this.clone()._multiplyBy(num)},_multiplyBy:function(num){this.x*=num;this.y*=num;return this},round:function(){return this.clone()._round()},_round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},floor:function(){return this.clone()._floor()},_floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},distanceTo:function(point){point=L.point(point);var x=point.x-this.x,y=point.y-this.y;return Math.sqrt(x*x+y*y)},equals:function(point){point=L.point(point);return point.x===this.x&&point.y===this.y},contains:function(point){point=L.point(point);return Math.abs(point.x)<=Math.abs(this.x)&&Math.abs(point.y)<=Math.abs(this.y)},toString:function(){return"Point("+L.Util.formatNum(this.x)+", "+L.Util.formatNum(this.y)+")"}};L.point=function(x,y,round){if(x instanceof L.Point){return x}if(L.Util.isArray(x)){return new L.Point(x[0],x[1])}if(x===undefined||x===null){return x}return new L.Point(x,y,round)};L.Bounds=function(a,b){if(!a){return}var points=b?[a,b]:a;for(var i=0,len=points.length;i=this.min.x&&max.x<=this.max.x&&min.y>=this.min.y&&max.y<=this.max.y},intersects:function(bounds){bounds=L.bounds(bounds);var min=this.min,max=this.max,min2=bounds.min,max2=bounds.max,xIntersects=max2.x>=min.x&&min2.x<=max.x,yIntersects=max2.y>=min.y&&min2.y<=max.y;return xIntersects&&yIntersects},isValid:function(){return!!(this.min&&this.max)}};L.bounds=function(a,b){if(!a||a instanceof L.Bounds){return a}return new L.Bounds(a,b)};L.Transformation=function(a,b,c,d){this._a=a;this._b=b;this._c=c;this._d=d};L.Transformation.prototype={transform:function(point,scale){return this._transform(point.clone(),scale)},_transform:function(point,scale){scale=scale||1;point.x=scale*(this._a*point.x+this._b);point.y=scale*(this._c*point.y+this._d);return point},untransform:function(point,scale){scale=scale||1;return new L.Point((point.x/scale-this._b)/this._a,(point.y/scale-this._d)/this._c)}};L.DomUtil={get:function(id){return typeof id==="string"?document.getElementById(id):id},getStyle:function(el,style){var value=el.style[style];if(!value&&el.currentStyle){value=el.currentStyle[style]}if((!value||value==="auto")&&document.defaultView){var css=document.defaultView.getComputedStyle(el,null);value=css?css[style]:null}return value==="auto"?null:value},getViewportOffset:function(element){var top=0,left=0,el=element,docBody=document.body,docEl=document.documentElement,pos;do{top+=el.offsetTop||0;left+=el.offsetLeft||0;top+=parseInt(L.DomUtil.getStyle(el,"borderTopWidth"),10)||0;left+=parseInt(L.DomUtil.getStyle(el,"borderLeftWidth"),10)||0;pos=L.DomUtil.getStyle(el,"position");if(el.offsetParent===docBody&&pos==="absolute"){break}if(pos==="fixed"){top+=docBody.scrollTop||docEl.scrollTop||0;left+=docBody.scrollLeft||docEl.scrollLeft||0;break}if(pos==="relative"&&!el.offsetLeft){var width=L.DomUtil.getStyle(el,"width"),maxWidth=L.DomUtil.getStyle(el,"max-width"),r=el.getBoundingClientRect();if(width!=="none"||maxWidth!=="none"){left+=r.left+el.clientLeft}top+=r.top+(docBody.scrollTop||docEl.scrollTop||0);break}el=el.offsetParent}while(el);el=element;do{if(el===docBody){break}top-=el.scrollTop||0;left-=el.scrollLeft||0;el=el.parentNode}while(el);return new L.Point(left,top)},documentIsLtr:function(){if(!L.DomUtil._docIsLtrCached){L.DomUtil._docIsLtrCached=true;L.DomUtil._docIsLtr=L.DomUtil.getStyle(document.body,"direction")==="ltr"}return L.DomUtil._docIsLtr},create:function(tagName,className,container){var el=document.createElement(tagName);el.className=className;if(container){container.appendChild(el)}return el},hasClass:function(el,name){if(el.classList!==undefined){return el.classList.contains(name)}var className=L.DomUtil._getClass(el);return className.length>0&&new RegExp("(^|\\s)"+name+"(\\s|$)").test(className)},addClass:function(el,name){if(el.classList!==undefined){var classes=L.Util.splitWords(name);for(var i=0,len=classes.length;i=sw.lat&&ne2.lat<=ne.lat&&sw2.lng>=sw.lng&&ne2.lng<=ne.lng},intersects:function(bounds){bounds=L.latLngBounds(bounds);var sw=this._southWest,ne=this._northEast,sw2=bounds.getSouthWest(),ne2=bounds.getNorthEast(),latIntersects=ne2.lat>=sw.lat&&sw2.lat<=ne.lat,lngIntersects=ne2.lng>=sw.lng&&sw2.lng<=ne.lng;return latIntersects&&lngIntersects},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(bounds){if(!bounds){return false}bounds=L.latLngBounds(bounds);return this._southWest.equals(bounds.getSouthWest())&&this._northEast.equals(bounds.getNorthEast())},isValid:function(){return!!(this._southWest&&this._northEast)}};L.latLngBounds=function(a,b){if(!a||a instanceof L.LatLngBounds){return a}return new L.LatLngBounds(a,b)};L.Projection={};L.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(latlng){var d=L.LatLng.DEG_TO_RAD,max=this.MAX_LATITUDE,lat=Math.max(Math.min(max,latlng.lat),-max),x=latlng.lng*d,y=lat*d;y=Math.log(Math.tan(Math.PI/4+y/2));return new L.Point(x,y)},unproject:function(point){var d=L.LatLng.RAD_TO_DEG,lng=point.x*d,lat=(2*Math.atan(Math.exp(point.y))-Math.PI/2)*d;return new L.LatLng(lat,lng)}};L.Projection.LonLat={project:function(latlng){return new L.Point(latlng.lng,latlng.lat)},unproject:function(point){return new L.LatLng(point.y,point.x)}};L.CRS={latLngToPoint:function(latlng,zoom){var projectedPoint=this.projection.project(latlng),scale=this.scale(zoom);return this.transformation._transform(projectedPoint,scale)},pointToLatLng:function(point,zoom){var scale=this.scale(zoom),untransformedPoint=this.transformation.untransform(point,scale);return this.projection.unproject(untransformedPoint)},project:function(latlng){return this.projection.project(latlng)},scale:function(zoom){return 256*Math.pow(2,zoom)},getSize:function(zoom){var s=this.scale(zoom);return L.point(s,s)}};L.CRS.Simple=L.extend({},L.CRS,{projection:L.Projection.LonLat,transformation:new L.Transformation(1,0,-1,0),scale:function(zoom){return Math.pow(2,zoom)}});L.CRS.EPSG3857=L.extend({},L.CRS,{code:"EPSG:3857",projection:L.Projection.SphericalMercator,transformation:new L.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(latlng){var projectedPoint=this.projection.project(latlng),earthRadius=6378137;return projectedPoint.multiplyBy(earthRadius)}});L.CRS.EPSG900913=L.extend({},L.CRS.EPSG3857,{code:"EPSG:900913"});L.CRS.EPSG4326=L.extend({},L.CRS,{code:"EPSG:4326",projection:L.Projection.LonLat,transformation:new L.Transformation(1/360,.5,-1/360,.5)});L.Map=L.Class.extend({includes:L.Mixin.Events,options:{crs:L.CRS.EPSG3857,fadeAnimation:L.DomUtil.TRANSITION&&!L.Browser.android23,trackResize:true,markerZoomAnimation:L.DomUtil.TRANSITION&&L.Browser.any3d},initialize:function(id,options){options=L.setOptions(this,options);this._initContainer(id);this._initLayout();this._onResize=L.bind(this._onResize,this);this._initEvents();if(options.maxBounds){this.setMaxBounds(options.maxBounds)}if(options.center&&options.zoom!==undefined){this.setView(L.latLng(options.center),options.zoom,{reset:true})}this._handlers=[];this._layers={};this._zoomBoundLayers={};this._tileLayersNum=0;this.callInitHooks();this._addLayers(options.layers)},setView:function(center,zoom){zoom=zoom===undefined?this.getZoom():zoom;this._resetView(L.latLng(center),this._limitZoom(zoom));return this},setZoom:function(zoom,options){if(!this._loaded){this._zoom=this._limitZoom(zoom);return this}return this.setView(this.getCenter(),zoom,{zoom:options})},zoomIn:function(delta,options){return this.setZoom(this._zoom+(delta||1),options)},zoomOut:function(delta,options){return this.setZoom(this._zoom-(delta||1),options)},setZoomAround:function(latlng,zoom,options){var scale=this.getZoomScale(zoom),viewHalf=this.getSize().divideBy(2),containerPoint=latlng instanceof L.Point?latlng:this.latLngToContainerPoint(latlng),centerOffset=containerPoint.subtract(viewHalf).multiplyBy(1-1/scale),newCenter=this.containerPointToLatLng(viewHalf.add(centerOffset));return this.setView(newCenter,zoom,{zoom:options})},fitBounds:function(bounds,options){options=options||{};bounds=bounds.getBounds?bounds.getBounds():L.latLngBounds(bounds);var paddingTL=L.point(options.paddingTopLeft||options.padding||[0,0]),paddingBR=L.point(options.paddingBottomRight||options.padding||[0,0]),zoom=this.getBoundsZoom(bounds,false,paddingTL.add(paddingBR));zoom=options.maxZoom?Math.min(options.maxZoom,zoom):zoom;var paddingOffset=paddingBR.subtract(paddingTL).divideBy(2),swPoint=this.project(bounds.getSouthWest(),zoom),nePoint=this.project(bounds.getNorthEast(),zoom),center=this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset),zoom);return this.setView(center,zoom,options)},fitWorld:function(options){return this.fitBounds([[-90,-180],[90,180]],options)},panTo:function(center,options){return this.setView(center,this._zoom,{pan:options})},panBy:function(offset){this.fire("movestart");this._rawPanBy(L.point(offset));this.fire("move");return this.fire("moveend")},setMaxBounds:function(bounds){bounds=L.latLngBounds(bounds);this.options.maxBounds=bounds;if(!bounds){return this.off("moveend",this._panInsideMaxBounds,this)}if(this._loaded){this._panInsideMaxBounds()}return this.on("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(bounds,options){var center=this.getCenter(),newCenter=this._limitCenter(center,this._zoom,bounds);if(center.equals(newCenter)){return this}return this.panTo(newCenter,options)},addLayer:function(layer){var id=L.stamp(layer);if(this._layers[id]){return this}this._layers[id]=layer;if(layer.options&&(!isNaN(layer.options.maxZoom)||!isNaN(layer.options.minZoom))){this._zoomBoundLayers[id]=layer;this._updateZoomLevels()}if(this.options.zoomAnimation&&L.TileLayer&&layer instanceof L.TileLayer){this._tileLayersNum++;this._tileLayersToLoad++;layer.on("load",this._onTileLayerLoad,this)}if(this._loaded){this._layerAdd(layer)}return this},removeLayer:function(layer){var id=L.stamp(layer);if(!this._layers[id]){return this}if(this._loaded){layer.onRemove(this)}delete this._layers[id];if(this._loaded){this.fire("layerremove",{layer:layer})}if(this._zoomBoundLayers[id]){delete this._zoomBoundLayers[id];this._updateZoomLevels()}if(this.options.zoomAnimation&&L.TileLayer&&layer instanceof L.TileLayer){this._tileLayersNum--;this._tileLayersToLoad--;layer.off("load",this._onTileLayerLoad,this)}return this},hasLayer:function(layer){if(!layer){return false}return L.stamp(layer)in this._layers},eachLayer:function(method,context){for(var i in this._layers){method.call(context,this._layers[i])}return this},invalidateSize:function(options){if(!this._loaded){return this}options=L.extend({animate:false,pan:true},options===true?{animate:true}:options);var oldSize=this.getSize();this._sizeChanged=true;this._initialCenter=null;var newSize=this.getSize(),oldCenter=oldSize.divideBy(2).round(),newCenter=newSize.divideBy(2).round(),offset=oldCenter.subtract(newCenter);if(!offset.x&&!offset.y){return this}if(options.animate&&options.pan){this.panBy(offset)}else{if(options.pan){this._rawPanBy(offset)}this.fire("move");if(options.debounceMoveend){clearTimeout(this._sizeTimer);this._sizeTimer=setTimeout(L.bind(this.fire,this,"moveend"),200)}else{this.fire("moveend")}}return this.fire("resize",{oldSize:oldSize,newSize:newSize})},addHandler:function(name,HandlerClass){if(!HandlerClass){return this}var handler=this[name]=new HandlerClass(this);this._handlers.push(handler);if(this.options[name]){handler.enable()}return this},remove:function(){if(this._loaded){this.fire("unload")}this._initEvents("off");try{delete this._container._leaflet}catch(e){this._container._leaflet=undefined}this._clearPanes();if(this._clearControlPos){this._clearControlPos()}this._clearHandlers();return this},getCenter:function(){this._checkIfLoaded();if(this._initialCenter&&!this._moved()){return this._initialCenter}return this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var bounds=this.getPixelBounds(),sw=this.unproject(bounds.getBottomLeft()),ne=this.unproject(bounds.getTopRight());return new L.LatLngBounds(sw,ne)},getMinZoom:function(){return this.options.minZoom===undefined?this._layersMinZoom===undefined?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===undefined?this._layersMaxZoom===undefined?Infinity:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(bounds,inside,padding){bounds=L.latLngBounds(bounds);var zoom=this.getMinZoom()-(inside?1:0),maxZoom=this.getMaxZoom(),size=this.getSize(),nw=bounds.getNorthWest(),se=bounds.getSouthEast(),zoomNotFound=true,boundsSize;padding=L.point(padding||[0,0]);do{zoom++;boundsSize=this.project(se,zoom).subtract(this.project(nw,zoom)).add(padding);zoomNotFound=!inside?size.contains(boundsSize):boundsSize.x0?Math.round(left-right)/2:Math.max(0,Math.ceil(left))-Math.max(0,Math.floor(right))},_limitZoom:function(zoom){var min=this.getMinZoom(),max=this.getMaxZoom();return Math.max(min,Math.min(max,zoom))}});L.map=function(id,options){return new L.Map(id,options)};L.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(latlng){var d=L.LatLng.DEG_TO_RAD,max=this.MAX_LATITUDE,lat=Math.max(Math.min(max,latlng.lat),-max),r=this.R_MAJOR,r2=this.R_MINOR,x=latlng.lng*d*r,y=lat*d,tmp=r2/r,eccent=Math.sqrt(1-tmp*tmp),con=eccent*Math.sin(y);con=Math.pow((1-con)/(1+con),eccent*.5);var ts=Math.tan(.5*(Math.PI*.5-y))/con;y=-r*Math.log(ts);return new L.Point(x,y)},unproject:function(point){var d=L.LatLng.RAD_TO_DEG,r=this.R_MAJOR,r2=this.R_MINOR,lng=point.x*d/r,tmp=r2/r,eccent=Math.sqrt(1-tmp*tmp),ts=Math.exp(-point.y/r),phi=Math.PI/2-2*Math.atan(ts),numIter=15,tol=1e-7,i=numIter,dphi=.1,con;while(Math.abs(dphi)>tol&&--i>0){con=eccent*Math.sin(phi);dphi=Math.PI/2-2*Math.atan(ts*Math.pow((1-con)/(1+con),.5*eccent))-phi;phi+=dphi}return new L.LatLng(phi*d,lng)}};L.CRS.EPSG3395=L.extend({},L.CRS,{code:"EPSG:3395",projection:L.Projection.Mercator,transformation:function(){var m=L.Projection.Mercator,r=m.R_MAJOR,scale=.5/(Math.PI*r);return new L.Transformation(scale,.5,-scale,.5)}()});L.TileLayer=L.Class.extend({includes:L.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:L.Browser.mobile,updateWhenIdle:L.Browser.mobile},initialize:function(url,options){options=L.setOptions(this,options);if(options.detectRetina&&L.Browser.retina&&options.maxZoom>0){options.tileSize=Math.floor(options.tileSize/2);options.zoomOffset++;if(options.minZoom>0){options.minZoom--}this.options.maxZoom--}if(options.bounds){options.bounds=L.latLngBounds(options.bounds)}this._url=url;var subdomains=this.options.subdomains;if(typeof subdomains==="string"){this.options.subdomains=subdomains.split("")}},onAdd:function(map){this._map=map;this._animated=map._zoomAnimated;this._initContainer();map.on({viewreset:this._reset,moveend:this._update},this);if(this._animated){map.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this)}if(!this.options.updateWhenIdle){this._limitedUpdate=L.Util.limitExecByInterval(this._update,150,this);map.on("move",this._limitedUpdate,this)}this._reset();this._update()},addTo:function(map){map.addLayer(this);return this},onRemove:function(map){this._container.parentNode.removeChild(this._container);map.off({viewreset:this._reset,moveend:this._update},this);if(this._animated){map.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this)}if(!this.options.updateWhenIdle){map.off("move",this._limitedUpdate,this)}this._container=null;this._map=null},bringToFront:function(){var pane=this._map._panes.tilePane;if(this._container){pane.appendChild(this._container);this._setAutoZIndex(pane,Math.max)}return this},bringToBack:function(){var pane=this._map._panes.tilePane;if(this._container){pane.insertBefore(this._container,pane.firstChild);this._setAutoZIndex(pane,Math.min)}return this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(opacity){this.options.opacity=opacity;if(this._map){this._updateOpacity()}return this},setZIndex:function(zIndex){this.options.zIndex=zIndex;this._updateZIndex();return this},setUrl:function(url,noRedraw){this._url=url;if(!noRedraw){this.redraw()}return this},redraw:function(){if(this._map){this._reset({hard:true});this._update()}return this},_updateZIndex:function(){if(this._container&&this.options.zIndex!==undefined){this._container.style.zIndex=this.options.zIndex}},_setAutoZIndex:function(pane,compare){var layers=pane.children,edgeZIndex=-compare(Infinity,-Infinity),zIndex,i,len;for(i=0,len=layers.length;izoomN){tileSize=Math.round(map.getZoomScale(zoom)/map.getZoomScale(zoomN)*tileSize)}return tileSize},_update:function(){if(!this._map){return}var map=this._map,bounds=map.getPixelBounds(),zoom=map.getZoom(),tileSize=this._getTileSize();if(zoom>this.options.maxZoom||zoom=limit.x)||tilePoint.y<0||tilePoint.y>=limit.y){return false}}if(options.bounds){var tileSize=this._getTileSize(),nwPoint=tilePoint.multiplyBy(tileSize),sePoint=nwPoint.add([tileSize,tileSize]),nw=this._map.unproject(nwPoint),se=this._map.unproject(sePoint);if(!options.continuousWorld&&!options.noWrap){nw=nw.wrap();se=se.wrap()}if(!options.bounds.intersects([nw,se])){return false}}return true},_removeOtherTiles:function(bounds){var kArr,x,y,key;for(key in this._tiles){kArr=key.split(":");x=parseInt(kArr[0],10);y=parseInt(kArr[1],10);if(xbounds.max.x||ybounds.max.y){this._removeTile(key)}}},_removeTile:function(key){var tile=this._tiles[key];this.fire("tileunload",{tile:tile,url:tile.src});if(this.options.reuseTiles){L.DomUtil.removeClass(tile,"leaflet-tile-loaded");this._unusedTiles.push(tile)}else if(tile.parentNode===this._tileContainer){this._tileContainer.removeChild(tile)}if(!L.Browser.android){tile.onload=null;tile.src=L.Util.emptyImageUrl}delete this._tiles[key]},_addTile:function(tilePoint,container){var tilePos=this._getTilePos(tilePoint);var tile=this._getTile();L.DomUtil.setPosition(tile,tilePos,L.Browser.chrome);this._tiles[tilePoint.x+":"+tilePoint.y]=tile;this._loadTile(tile,tilePoint);if(tile.parentNode!==this._tileContainer){container.appendChild(tile)}},_getZoomForUrl:function(){var options=this.options,zoom=this._map.getZoom();if(options.zoomReverse){zoom=options.maxZoom-zoom}zoom+=options.zoomOffset;return options.maxNativeZoom?Math.min(zoom,options.maxNativeZoom):zoom},_getTilePos:function(tilePoint){var origin=this._map.getPixelOrigin(),tileSize=this._getTileSize();return tilePoint.multiplyBy(tileSize).subtract(origin)},getTileUrl:function(tilePoint){return L.Util.template(this._url,L.extend({s:this._getSubdomain(tilePoint),z:tilePoint.z,x:tilePoint.x,y:tilePoint.y},this.options))},_getWrapTileNum:function(){var crs=this._map.options.crs,size=crs.getSize(this._map.getZoom());return size.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(tilePoint){var limit=this._getWrapTileNum();if(!this.options.continuousWorld&&!this.options.noWrap){tilePoint.x=(tilePoint.x%limit.x+limit.x)%limit.x}if(this.options.tms){tilePoint.y=limit.y-tilePoint.y-1}tilePoint.z=this._getZoomForUrl()},_getSubdomain:function(tilePoint){var index=Math.abs(tilePoint.x+tilePoint.y)%this.options.subdomains.length;return this.options.subdomains[index]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var tile=this._unusedTiles.pop();this._resetTile(tile);return tile}return this._createTile()},_resetTile:function(){},_createTile:function(){var tile=L.DomUtil.create("img","leaflet-tile");tile.style.width=tile.style.height=this._getTileSize()+"px";tile.galleryimg="no";tile.onselectstart=tile.onmousemove=L.Util.falseFn;if(L.Browser.ielt9&&this.options.opacity!==undefined){L.DomUtil.setOpacity(tile,this.options.opacity)}if(L.Browser.mobileWebkit3d){tile.style.WebkitBackfaceVisibility="hidden"}return tile},_loadTile:function(tile,tilePoint){tile._layer=this;tile.onload=this._tileOnLoad;tile.onerror=this._tileOnError;this._adjustTilePoint(tilePoint);tile.src=this.getTileUrl(tilePoint);this.fire("tileloadstart",{tile:tile,url:tile.src})},_tileLoaded:function(){this._tilesToLoad--;if(this._animated){L.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated")}if(!this._tilesToLoad){this.fire("load");if(this._animated){clearTimeout(this._clearBgBufferTimer);this._clearBgBufferTimer=setTimeout(L.bind(this._clearBgBuffer,this),500)}}},_tileOnLoad:function(){var layer=this._layer;if(this.src!==L.Util.emptyImageUrl){L.DomUtil.addClass(this,"leaflet-tile-loaded");layer.fire("tileload",{tile:this,url:this.src})}layer._tileLoaded()},_tileOnError:function(){var layer=this._layer;layer.fire("tileerror",{tile:this,url:this.src});var newUrl=layer.options.errorTileUrl;if(newUrl){this.src=newUrl}layer._tileLoaded()}});L.tileLayer=function(url,options){return new L.TileLayer(url,options)};L.TileLayer.WMS=L.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:false},initialize:function(url,options){this._url=url;var wmsParams=L.extend({},this.defaultWmsParams),tileSize=options.tileSize||this.options.tileSize;if(options.detectRetina&&L.Browser.retina){wmsParams.width=wmsParams.height=tileSize*2}else{wmsParams.width=wmsParams.height=tileSize}for(var i in options){if(!this.options.hasOwnProperty(i)&&i!=="crs"){wmsParams[i]=options[i]}}this.wmsParams=wmsParams;L.setOptions(this,options)},onAdd:function(map){this._crs=this.options.crs||map.options.crs;this._wmsVersion=parseFloat(this.wmsParams.version);var projectionKey=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[projectionKey]=this._crs.code;L.TileLayer.prototype.onAdd.call(this,map)},getTileUrl:function(tilePoint){var map=this._map,tileSize=this.options.tileSize,nwPoint=tilePoint.multiplyBy(tileSize),sePoint=nwPoint.add([tileSize,tileSize]),nw=this._crs.project(map.unproject(nwPoint,tilePoint.z)),se=this._crs.project(map.unproject(sePoint,tilePoint.z)),bbox=this._wmsVersion>=1.3&&this._crs===L.CRS.EPSG4326?[se.y,nw.x,nw.y,se.x].join(","):[nw.x,se.y,se.x,nw.y].join(","),url=L.Util.template(this._url,{s:this._getSubdomain(tilePoint)});return url+L.Util.getParamString(this.wmsParams,url,true)+"&BBOX="+bbox},setParams:function(params,noRedraw){L.extend(this.wmsParams,params);if(!noRedraw){this.redraw()}return this}});L.tileLayer.wms=function(url,options){return new L.TileLayer.WMS(url,options)};L.TileLayer.Canvas=L.TileLayer.extend({options:{async:false},initialize:function(options){L.setOptions(this,options)},redraw:function(){if(this._map){this._reset({hard:true});this._update()}for(var i in this._tiles){this._redrawTile(this._tiles[i])}return this},_redrawTile:function(tile){this.drawTile(tile,tile._tilePoint,this._map._zoom)},_createTile:function(){var tile=L.DomUtil.create("canvas","leaflet-tile");tile.width=tile.height=this.options.tileSize;tile.onselectstart=tile.onmousemove=L.Util.falseFn;return tile},_loadTile:function(tile,tilePoint){tile._layer=this;tile._tilePoint=tilePoint;this._redrawTile(tile);if(!this.options.async){this.tileDrawn(tile)}},drawTile:function(){},tileDrawn:function(tile){this._tileOnLoad.call(tile)}});L.tileLayer.canvas=function(options){return new L.TileLayer.Canvas(options)};L.ImageOverlay=L.Class.extend({includes:L.Mixin.Events,options:{opacity:1},initialize:function(url,bounds,options){this._url=url;this._bounds=L.latLngBounds(bounds);L.setOptions(this,options)},onAdd:function(map){this._map=map;if(!this._image){this._initImage()}map._panes.overlayPane.appendChild(this._image);map.on("viewreset",this._reset,this);if(map.options.zoomAnimation&&L.Browser.any3d){map.on("zoomanim",this._animateZoom,this)}this._reset()},onRemove:function(map){map.getPanes().overlayPane.removeChild(this._image);map.off("viewreset",this._reset,this);if(map.options.zoomAnimation){map.off("zoomanim",this._animateZoom,this)}},addTo:function(map){map.addLayer(this);return this},setOpacity:function(opacity){this.options.opacity=opacity;this._updateOpacity();return this},bringToFront:function(){if(this._image){this._map._panes.overlayPane.appendChild(this._image)}return this},bringToBack:function(){var pane=this._map._panes.overlayPane;if(this._image){pane.insertBefore(this._image,pane.firstChild)}return this},setUrl:function(url){this._url=url;this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=L.DomUtil.create("img","leaflet-image-layer");if(this._map.options.zoomAnimation&&L.Browser.any3d){L.DomUtil.addClass(this._image,"leaflet-zoom-animated")}else{L.DomUtil.addClass(this._image,"leaflet-zoom-hide")}this._updateOpacity();L.extend(this._image,{galleryimg:"no",onselectstart:L.Util.falseFn,onmousemove:L.Util.falseFn,onload:L.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(e){var map=this._map,image=this._image,scale=map.getZoomScale(e.zoom),nw=this._bounds.getNorthWest(),se=this._bounds.getSouthEast(),topLeft=map._latLngToNewLayerPoint(nw,e.zoom,e.center),size=map._latLngToNewLayerPoint(se,e.zoom,e.center)._subtract(topLeft),origin=topLeft._add(size._multiplyBy(1/2*(1-1/scale)));image.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(origin)+" scale("+scale+") "},_reset:function(){var image=this._image,topLeft=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),size=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(topLeft);L.DomUtil.setPosition(image,topLeft);image.style.width=size.x+"px";image.style.height=size.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){L.DomUtil.setOpacity(this._image,this.options.opacity)}});L.imageOverlay=function(url,bounds,options){return new L.ImageOverlay(url,bounds,options)};L.Icon=L.Class.extend({options:{className:""},initialize:function(options){L.setOptions(this,options)},createIcon:function(oldIcon){return this._createIcon("icon",oldIcon)},createShadow:function(oldIcon){return this._createIcon("shadow",oldIcon)},_createIcon:function(name,oldIcon){var src=this._getIconUrl(name);if(!src){if(name==="icon"){throw new Error("iconUrl not set in Icon options (see the docs).")}return null}var img;if(!oldIcon||oldIcon.tagName!=="IMG"){img=this._createImg(src)}else{img=this._createImg(src,oldIcon)}this._setIconStyles(img,name);return img},_setIconStyles:function(img,name){var options=this.options,size=L.point(options[name+"Size"]),anchor;if(name==="shadow"){anchor=L.point(options.shadowAnchor||options.iconAnchor)}else{anchor=L.point(options.iconAnchor)}if(!anchor&&size){anchor=size.divideBy(2,true)}img.className="leaflet-marker-"+name+" "+options.className;if(anchor){img.style.marginLeft=-anchor.x+"px";img.style.marginTop=-anchor.y+"px"}if(size){img.style.width=size.x+"px";img.style.height=size.y+"px"}},_createImg:function(src,el){el=el||document.createElement("img");el.src=src;return el},_getIconUrl:function(name){if(L.Browser.retina&&this.options[name+"RetinaUrl"]){return this.options[name+"RetinaUrl"]}return this.options[name+"Url"]}});L.icon=function(options){return new L.Icon(options)};L.Icon.Default=L.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(name){var key=name+"Url";if(this.options[key]){return this.options[key]}if(L.Browser.retina&&name==="icon"){name+="-2x"}var path=L.Icon.Default.imagePath;if(!path){throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.")}return path+"/marker-"+name+".png"}});L.Icon.Default.imagePath=function(){var scripts=document.getElementsByTagName("script"),leafletRe=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;var i,len,src,matches,path;for(i=0,len=scripts.length;imaxHeight){style.height=maxHeight+"px";L.DomUtil.addClass(container,scrolledClass)}else{L.DomUtil.removeClass(container,scrolledClass)}this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(!this._map){return}var pos=this._map.latLngToLayerPoint(this._latlng),animated=this._animated,offset=L.point(this.options.offset);if(animated){L.DomUtil.setPosition(this._container,pos)}this._containerBottom=-offset.y-(animated?0:pos.y);this._containerLeft=-Math.round(this._containerWidth/2)+offset.x+(animated?0:pos.x);this._container.style.bottom=this._containerBottom+"px";this._container.style.left=this._containerLeft+"px"},_zoomAnimation:function(opt){var pos=this._map._latLngToNewLayerPoint(this._latlng,opt.zoom,opt.center);L.DomUtil.setPosition(this._container,pos)},_adjustPan:function(){if(!this.options.autoPan){return}var map=this._map,containerHeight=this._container.offsetHeight,containerWidth=this._containerWidth,layerPos=new L.Point(this._containerLeft,-containerHeight-this._containerBottom);if(this._animated){layerPos._add(L.DomUtil.getPosition(this._container))}var containerPos=map.layerPointToContainerPoint(layerPos),padding=L.point(this.options.autoPanPadding),paddingTL=L.point(this.options.autoPanPaddingTopLeft||padding),paddingBR=L.point(this.options.autoPanPaddingBottomRight||padding),size=map.getSize(),dx=0,dy=0;if(containerPos.x+containerWidth+paddingBR.x>size.x){dx=containerPos.x+containerWidth-size.x+paddingBR.x}if(containerPos.x-dx-paddingTL.x<0){dx=containerPos.x-paddingTL.x}if(containerPos.y+containerHeight+paddingBR.y>size.y){dy=containerPos.y+containerHeight-size.y+paddingBR.y}if(containerPos.y-dy-paddingTL.y<0){dy=containerPos.y-paddingTL.y}if(dx||dy){map.fire("autopanstart").panBy([dx,dy])}},_onCloseButtonClick:function(e){this._close();L.DomEvent.stop(e)}});L.popup=function(options,source){return new L.Popup(options,source)};L.Map.include({openPopup:function(popup,latlng,options){this.closePopup();if(!(popup instanceof L.Popup)){var content=popup;popup=new L.Popup(options).setLatLng(latlng).setContent(content)}popup._isOpen=true;this._popup=popup;return this.addLayer(popup)},closePopup:function(popup){if(!popup||popup===this._popup){popup=this._popup;this._popup=null}if(popup){this.removeLayer(popup);popup._isOpen=false}return this}});L.Marker.include({openPopup:function(){if(this._popup&&this._map&&!this._map.hasLayer(this._popup)){this._popup.setLatLng(this._latlng);this._map.openPopup(this._popup)}return this},closePopup:function(){if(this._popup){this._popup._close()}return this},togglePopup:function(){if(this._popup){if(this._popup._isOpen){this.closePopup()}else{this.openPopup()}}return this},bindPopup:function(content,options){var anchor=L.point(this.options.icon.options.popupAnchor||[0,0]);anchor=anchor.add(L.Popup.prototype.options.offset);if(options&&options.offset){anchor=anchor.add(options.offset)}options=L.extend({offset:anchor},options);if(!this._popupHandlersAdded){this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this);this._popupHandlersAdded=true}if(content instanceof L.Popup){L.setOptions(content,options);this._popup=content;content._source=this}else{this._popup=new L.Popup(options,this).setContent(content)}return this},setPopupContent:function(content){if(this._popup){this._popup.setContent(content)}return this},unbindPopup:function(){if(this._popup){this._popup=null;this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this);this._popupHandlersAdded=false}return this},getPopup:function(){return this._popup},_movePopup:function(e){this._popup.setLatLng(e.latlng)}});L.LayerGroup=L.Class.extend({initialize:function(layers){this._layers={};var i,len;if(layers){for(i=0,len=layers.length;i';var shape=div.firstChild;shape.style.behavior="url(#default#VML)";return shape&&typeof shape.adj==="object"}catch(e){return false}}();L.Path=L.Browser.svg||!L.Browser.vml?L.Path:L.Path.extend({statics:{VML:true,CLIP_PADDING:.02},_createElement:function(){try{document.namespaces.add("lvml","urn:schemas-microsoft-com:vml");return function(name){return document.createElement("')}}catch(e){return function(name){return document.createElement("<"+name+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var container=this._container=this._createElement("shape");L.DomUtil.addClass(container,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:""));if(this.options.clickable){L.DomUtil.addClass(container,"leaflet-clickable")}container.coordsize="1 1";this._path=this._createElement("path");container.appendChild(this._path);this._map._pathRoot.appendChild(container)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var stroke=this._stroke,fill=this._fill,options=this.options,container=this._container;container.stroked=options.stroke;container.filled=options.fill;if(options.stroke){if(!stroke){stroke=this._stroke=this._createElement("stroke");stroke.endcap="round";container.appendChild(stroke)}stroke.weight=options.weight+"px";stroke.color=options.color;stroke.opacity=options.opacity;if(options.dashArray){stroke.dashStyle=L.Util.isArray(options.dashArray)?options.dashArray.join(" "):options.dashArray.replace(/( *, *)/g," ")}else{stroke.dashStyle=""}if(options.lineCap){stroke.endcap=options.lineCap.replace("butt","flat")}if(options.lineJoin){stroke.joinstyle=options.lineJoin}}else if(stroke){container.removeChild(stroke);this._stroke=null}if(options.fill){if(!fill){fill=this._fill=this._createElement("fill");container.appendChild(fill)}fill.color=options.fillColor||options.color;fill.opacity=options.fillOpacity}else if(fill){container.removeChild(fill);this._fill=null}},_updatePath:function(){var style=this._container.style;style.display="none";this._path.v=this.getPathString()+" ";style.display=""}});L.Map.include(L.Browser.svg||!L.Browser.vml?{}:{_initPathRoot:function(){if(this._pathRoot){return}var root=this._pathRoot=document.createElement("div");root.className="leaflet-vml-container";this._panes.overlayPane.appendChild(root);this.on("moveend",this._updatePathViewport);this._updatePathViewport()}});L.Browser.canvas=function(){return!!document.createElement("canvas").getContext}();L.Path=L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?L.Path:L.Path.extend({statics:{CANVAS:true,SVG:false},redraw:function(){if(this._map){this.projectLatlngs();this._requestUpdate()}return this},setStyle:function(style){L.setOptions(this,style);if(this._map){this._updateStyle();this._requestUpdate()}return this},onRemove:function(map){map.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this);if(this.options.clickable){this._map.off("click",this._onClick,this);this._map.off("mousemove",this._onMouseMove,this)}this._requestUpdate();this.fire("remove");this._map=null},_requestUpdate:function(){if(this._map&&!L.Path._updateRequest){L.Path._updateRequest=L.Util.requestAnimFrame(this._fireMapMoveEnd,this._map)}},_fireMapMoveEnd:function(){L.Path._updateRequest=null;this.fire("moveend")},_initElements:function(){this._map._initPathRoot();this._ctx=this._map._canvasCtx},_updateStyle:function(){var options=this.options;if(options.stroke){this._ctx.lineWidth=options.weight;this._ctx.strokeStyle=options.color}if(options.fill){this._ctx.fillStyle=options.fillColor||options.color}if(options.lineCap){this._ctx.lineCap=options.lineCap}if(options.lineJoin){this._ctx.lineJoin=options.lineJoin}},_drawPath:function(){var i,j,len,len2,point,drawMethod;this._ctx.beginPath();for(i=0,len=this._parts.length;imaxSqDist){index=i;maxSqDist=sqDist}}if(maxSqDist>sqTolerance){markers[index]=1;this._simplifyDPStep(points,markers,sqTolerance,first,index);this._simplifyDPStep(points,markers,sqTolerance,index,last)}},_reducePoints:function(points,sqTolerance){var reducedPoints=[points[0]];for(var i=1,prev=0,len=points.length;isqTolerance){reducedPoints.push(points[i]);prev=i}}if(prevbounds.max.x){code|=2}if(p.ybounds.max.y){code|=8}return code},_sqDist:function(p1,p2){var dx=p2.x-p1.x,dy=p2.y-p1.y;return dx*dx+dy*dy},_sqClosestPointOnSegment:function(p,p1,p2,sqDist){var x=p1.x,y=p1.y,dx=p2.x-x,dy=p2.y-y,dot=dx*dx+dy*dy,t;if(dot>0){t=((p.x-x)*dx+(p.y-y)*dy)/dot;if(t>1){x=p2.x;y=p2.y}else if(t>0){x+=dx*t;y+=dy*t}}dx=p.x-x;dy=p.y-y;return sqDist?dx*dx+dy*dy:new L.Point(x,y)}};L.Polyline=L.Path.extend({initialize:function(latlngs,options){L.Path.prototype.initialize.call(this,options);this._latlngs=this._convertLatLngs(latlngs)},options:{smoothFactor:1,noClip:false},projectLatlngs:function(){this._originalPoints=[];for(var i=0,len=this._latlngs.length;i=2&&latlngs[0].equals(latlngs[latlngs.length-1])){latlngs.pop()}},projectLatlngs:function(){L.Polyline.prototype.projectLatlngs.call(this);this._holePoints=[];if(!this._holes){return}var i,j,len,len2;for(i=0,len=this._holes.length;ivp.max.x||p.y-r>vp.max.y||p.x+rp.y!==p2.y>p.y&&p.x<(p2.x-p1.x)*(p.y-p1.y)/(p2.y-p1.y)+p1.x){inside=!inside}}}return inside}});L.Circle.include(!L.Path.CANVAS?{}:{_drawPath:function(){var p=this._point;this._ctx.beginPath();this._ctx.arc(p.x,p.y,this._radius,0,Math.PI*2,false)},_containsPoint:function(p){var center=this._point,w2=this.options.stroke?this.options.weight/2:0;return p.distanceTo(center)<=this._radius+w2}});L.CircleMarker.include(!L.Path.CANVAS?{}:{_updateStyle:function(){L.Path.prototype._updateStyle.call(this)}});L.GeoJSON=L.FeatureGroup.extend({initialize:function(geojson,options){L.setOptions(this,options);this._layers={};if(geojson){this.addData(geojson)}},addData:function(geojson){var features=L.Util.isArray(geojson)?geojson:geojson.features,i,len,feature;if(features){for(i=0,len=features.length;i=0;i--){L.DomEvent.on(el,L.Draggable.START[i],stop)}return L.DomEvent.on(el,"click",L.DomEvent._fakeStop).on(el,"dblclick",stop)},preventDefault:function(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}return this},stop:function(e){return L.DomEvent.preventDefault(e).stopPropagation(e)},getMousePosition:function(e,container){if(!container){return new L.Point(e.clientX,e.clientY)}var rect=container.getBoundingClientRect();return new L.Point(e.clientX-rect.left-container.clientLeft,e.clientY-rect.top-container.clientTop)},getWheelDelta:function(e){var delta=0;if(e.wheelDelta){delta=e.wheelDelta/120}if(e.detail){delta=-e.detail/3}return delta},_skipEvents:{},_fakeStop:function(e){L.DomEvent._skipEvents[e.type]=true},_skipped:function(e){var skipped=this._skipEvents[e.type];this._skipEvents[e.type]=false;return skipped},_checkMouse:function(el,e){var related=e.relatedTarget;if(!related){return true}try{while(related&&related!==el){related=related.parentNode}}catch(err){return false}return related!==el},_getEvent:function(){var e=window.event;if(!e){var caller=arguments.callee.caller;while(caller){e=caller["arguments"][0];if(e&&window.Event===e.constructor){break}caller=caller.caller}}return e},_filterClick:function(e,handler){var timeStamp=e.timeStamp||e.originalEvent.timeStamp,elapsed=L.DomEvent._lastClick&&timeStamp-L.DomEvent._lastClick;if(elapsed&&elapsed>100&&elapsed<500||e.target._simulatedClick&&!e._simulated){L.DomEvent.stop(e);return}L.DomEvent._lastClick=timeStamp;return handler(e)}};L.DomEvent.on=L.DomEvent.addListener;L.DomEvent.off=L.DomEvent.removeListener;L.Draggable=L.Class.extend({includes:L.Mixin.Events,statics:{START:L.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(element,dragStartTarget){this._element=element;this._dragStartTarget=dragStartTarget||element},enable:function(){if(this._enabled){return}for(var i=L.Draggable.START.length-1;i>=0;i--){L.DomEvent.on(this._dragStartTarget,L.Draggable.START[i],this._onDown,this)}this._enabled=true},disable:function(){if(!this._enabled){return}for(var i=L.Draggable.START.length-1;i>=0;i--){L.DomEvent.off(this._dragStartTarget,L.Draggable.START[i],this._onDown,this)}this._enabled=false;this._moved=false},_onDown:function(e){this._moved=false;if(e.shiftKey||e.which!==1&&e.button!==1&&!e.touches){return}L.DomEvent.stopPropagation(e);if(L.Draggable._disabled){return}L.DomUtil.disableImageDrag();L.DomUtil.disableTextSelection();if(this._moving){return}var first=e.touches?e.touches[0]:e;this._startPoint=new L.Point(first.clientX,first.clientY);this._startPos=this._newPos=L.DomUtil.getPosition(this._element);L.DomEvent.on(document,L.Draggable.MOVE[e.type],this._onMove,this).on(document,L.Draggable.END[e.type],this._onUp,this)},_onMove:function(e){if(e.touches&&e.touches.length>1){this._moved=true;return}var first=e.touches&&e.touches.length===1?e.touches[0]:e,newPoint=new L.Point(first.clientX,first.clientY),offset=newPoint.subtract(this._startPoint);if(!offset.x&&!offset.y){return}if(L.Browser.touch&&Math.abs(offset.x)+Math.abs(offset.y)<3){return}L.DomEvent.preventDefault(e);if(!this._moved){this.fire("dragstart");this._moved=true;this._startPos=L.DomUtil.getPosition(this._element).subtract(offset);L.DomUtil.addClass(document.body,"leaflet-dragging");this._lastTarget=e.target||e.srcElement;L.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")}this._newPos=this._startPos.add(offset);this._moving=true;L.Util.cancelAnimFrame(this._animRequest);this._animRequest=L.Util.requestAnimFrame(this._updatePosition,this,true,this._dragStartTarget)},_updatePosition:function(){this.fire("predrag");L.DomUtil.setPosition(this._element,this._newPos);this.fire("drag")},_onUp:function(){L.DomUtil.removeClass(document.body,"leaflet-dragging");if(this._lastTarget){L.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target");this._lastTarget=null}for(var i in L.Draggable.MOVE){L.DomEvent.off(document,L.Draggable.MOVE[i],this._onMove).off(document,L.Draggable.END[i],this._onUp)}L.DomUtil.enableImageDrag();L.DomUtil.enableTextSelection();if(this._moved&&this._moving){L.Util.cancelAnimFrame(this._animRequest);this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})}this._moving=false}});L.Handler=L.Class.extend({initialize:function(map){this._map=map},enable:function(){if(this._enabled){return}this._enabled=true;this.addHooks()},disable:function(){if(!this._enabled){return}this._enabled=false;this.removeHooks()},enabled:function(){return!!this._enabled}});L.Map.mergeOptions({dragging:true,inertia:!L.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:Infinity,inertiaThreshold:L.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:false});L.Map.Drag=L.Handler.extend({addHooks:function(){if(!this._draggable){var map=this._map;this._draggable=new L.Draggable(map._mapPane,map._container);this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this);if(map.options.worldCopyJump){this._draggable.on("predrag",this._onPreDrag,this);map.on("viewreset",this._onViewReset,this);map.whenReady(this._onViewReset,this)}}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var map=this._map;if(map._panAnim){map._panAnim.stop()}map.fire("movestart").fire("dragstart");if(map.options.inertia){this._positions=[];this._times=[]}},_onDrag:function(){if(this._map.options.inertia){var time=this._lastTime=+new Date,pos=this._lastPos=this._draggable._newPos;this._positions.push(pos);this._times.push(time);if(time-this._times[0]>200){this._positions.shift();this._times.shift()}}this._map.fire("move").fire("drag")},_onViewReset:function(){var pxCenter=this._map.getSize()._divideBy(2),pxWorldCenter=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=pxWorldCenter.subtract(pxCenter).x;this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var worldWidth=this._worldWidth,halfWidth=Math.round(worldWidth/2),dx=this._initialWorldOffset,x=this._draggable._newPos.x,newX1=(x-halfWidth+dx)%worldWidth+halfWidth-dx,newX2=(x+halfWidth+dx)%worldWidth-halfWidth-dx,newX=Math.abs(newX1+dx)options.inertiaThreshold||!this._positions[0];map.fire("dragend",e);if(noInertia){map.fire("moveend")}else{var direction=this._lastPos.subtract(this._positions[0]),duration=(this._lastTime+delay-this._times[0])/1e3,ease=options.easeLinearity,speedVector=direction.multiplyBy(ease/duration),speed=speedVector.distanceTo([0,0]),limitedSpeed=Math.min(options.inertiaMaxSpeed,speed),limitedSpeedVector=speedVector.multiplyBy(limitedSpeed/speed),decelerationDuration=limitedSpeed/(options.inertiaDeceleration*ease),offset=limitedSpeedVector.multiplyBy(-decelerationDuration/2).round();if(!offset.x||!offset.y){map.fire("moveend")}else{offset=map._limitOffset(offset,map.options.maxBounds);L.Util.requestAnimFrame(function(){map.panBy(offset,{duration:decelerationDuration,easeLinearity:ease,noMoveStart:true})})}}}});L.Map.addInitHook("addHandler","dragging",L.Map.Drag);L.Map.mergeOptions({doubleClickZoom:true});L.Map.DoubleClickZoom=L.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(e){var map=this._map,zoom=map.getZoom()+(e.originalEvent.shiftKey?-1:1);if(map.options.doubleClickZoom==="center"){map.setZoom(zoom)}else{map.setZoomAround(e.containerPoint,zoom)}}});L.Map.addInitHook("addHandler","doubleClickZoom",L.Map.DoubleClickZoom);L.Map.mergeOptions({scrollWheelZoom:true});L.Map.ScrollWheelZoom=L.Handler.extend({addHooks:function(){L.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this);L.DomEvent.on(this._map._container,"MozMousePixelScroll",L.DomEvent.preventDefault);this._delta=0},removeHooks:function(){L.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll);L.DomEvent.off(this._map._container,"MozMousePixelScroll",L.DomEvent.preventDefault)},_onWheelScroll:function(e){var delta=L.DomEvent.getWheelDelta(e);this._delta+=delta;this._lastMousePos=this._map.mouseEventToContainerPoint(e);if(!this._startTime){this._startTime=+new Date}var left=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer);this._timer=setTimeout(L.bind(this._performZoom,this),left);L.DomEvent.preventDefault(e);L.DomEvent.stopPropagation(e)},_performZoom:function(){var map=this._map,delta=this._delta,zoom=map.getZoom();delta=delta>0?Math.ceil(delta):Math.floor(delta);delta=Math.max(Math.min(delta,4),-4);delta=map._limitZoom(zoom+delta)-zoom;this._delta=0;this._startTime=null;if(!delta){return}if(map.options.scrollWheelZoom==="center"){map.setZoom(zoom+delta)}else{map.setZoomAround(this._lastMousePos,zoom+delta)}}});L.Map.addInitHook("addHandler","scrollWheelZoom",L.Map.ScrollWheelZoom);L.extend(L.DomEvent,{_touchstart:L.Browser.msPointer?"MSPointerDown":L.Browser.pointer?"pointerdown":"touchstart",_touchend:L.Browser.msPointer?"MSPointerUp":L.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(obj,handler,id){var last,doubleTap=false,delay=250,touch,pre="_leaflet_",touchstart=this._touchstart,touchend=this._touchend,trackedTouches=[];function onTouchStart(e){var count;if(L.Browser.pointer){trackedTouches.push(e.pointerId);count=trackedTouches.length}else{count=e.touches.length}if(count>1){return}var now=Date.now(),delta=now-(last||now);touch=e.touches?e.touches[0]:e;doubleTap=delta>0&&delta<=delay;last=now}function onTouchEnd(e){if(L.Browser.pointer){var idx=trackedTouches.indexOf(e.pointerId);if(idx===-1){return}trackedTouches.splice(idx,1)}if(doubleTap){if(L.Browser.pointer){var newTouch={},prop;for(var i in touch){prop=touch[i];if(typeof prop==="function"){newTouch[i]=prop.bind(touch)}else{newTouch[i]=prop}}touch=newTouch}touch.type="dblclick";handler(touch);last=null}}obj[pre+touchstart+id]=onTouchStart;obj[pre+touchend+id]=onTouchEnd;var endElement=L.Browser.pointer?document.documentElement:obj;obj.addEventListener(touchstart,onTouchStart,false);endElement.addEventListener(touchend,onTouchEnd,false);if(L.Browser.pointer){endElement.addEventListener(L.DomEvent.POINTER_CANCEL,onTouchEnd,false)}return this},removeDoubleTapListener:function(obj,id){var pre="_leaflet_";obj.removeEventListener(this._touchstart,obj[pre+this._touchstart+id],false);(L.Browser.pointer?document.documentElement:obj).removeEventListener(this._touchend,obj[pre+this._touchend+id],false);if(L.Browser.pointer){document.documentElement.removeEventListener(L.DomEvent.POINTER_CANCEL,obj[pre+this._touchend+id],false)}return this}});L.extend(L.DomEvent,{POINTER_DOWN:L.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:L.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:L.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:L.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:false,addPointerListener:function(obj,type,handler,id){switch(type){case"touchstart":return this.addPointerListenerStart(obj,type,handler,id);case"touchend":return this.addPointerListenerEnd(obj,type,handler,id);case"touchmove":return this.addPointerListenerMove(obj,type,handler,id);default:throw"Unknown touch event type"}},addPointerListenerStart:function(obj,type,handler,id){var pre="_leaflet_",pointers=this._pointers;var cb=function(e){if(e.pointerType!=="mouse"&&e.pointerType!==e.MSPOINTER_TYPE_MOUSE){L.DomEvent.preventDefault(e)}var alreadyInArray=false;for(var i=0;i1){return}}if(!this._moved){L.DomUtil.addClass(map._mapPane,"leaflet-touching");map.fire("movestart").fire("zoomstart");this._moved=true}L.Util.cancelAnimFrame(this._animRequest);this._animRequest=L.Util.requestAnimFrame(this._updateOnMove,this,true,this._map._container);L.DomEvent.preventDefault(e)},_updateOnMove:function(){var map=this._map,origin=this._getScaleOrigin(),center=map.layerPointToLatLng(origin),zoom=map.getScaleZoom(this._scale);map._animateZoom(center,zoom,this._startCenter,this._scale,this._delta,false,true)},_onTouchEnd:function(){if(!this._moved||!this._zooming){this._zooming=false;return}var map=this._map;this._zooming=false;L.DomUtil.removeClass(map._mapPane,"leaflet-touching");L.Util.cancelAnimFrame(this._animRequest);L.DomEvent.off(document,"touchmove",this._onTouchMove).off(document,"touchend",this._onTouchEnd);var origin=this._getScaleOrigin(),center=map.layerPointToLatLng(origin),oldZoom=map.getZoom(),floatZoomDelta=map.getScaleZoom(this._scale)-oldZoom,roundZoomDelta=floatZoomDelta>0?Math.ceil(floatZoomDelta):Math.floor(floatZoomDelta),zoom=map._limitZoom(oldZoom+roundZoomDelta),scale=map.getZoomScale(zoom)/this._scale;map._animateZoom(center,zoom,origin,scale)},_getScaleOrigin:function(){var centerOffset=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(centerOffset)}});L.Map.addInitHook("addHandler","touchZoom",L.Map.TouchZoom);L.Map.mergeOptions({tap:true,tapTolerance:15});L.Map.Tap=L.Handler.extend({addHooks:function(){L.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){L.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(e){if(!e.touches){return}L.DomEvent.preventDefault(e);this._fireClick=true;if(e.touches.length>1){this._fireClick=false;clearTimeout(this._holdTimeout);return}var first=e.touches[0],el=first.target;this._startPos=this._newPos=new L.Point(first.clientX,first.clientY);if(el.tagName&&el.tagName.toLowerCase()==="a"){L.DomUtil.addClass(el,"leaflet-active")}this._holdTimeout=setTimeout(L.bind(function(){if(this._isTapValid()){this._fireClick=false;this._onUp();this._simulateEvent("contextmenu",first)}},this),1e3);L.DomEvent.on(document,"touchmove",this._onMove,this).on(document,"touchend",this._onUp,this)},_onUp:function(e){clearTimeout(this._holdTimeout);L.DomEvent.off(document,"touchmove",this._onMove,this).off(document,"touchend",this._onUp,this);if(this._fireClick&&e&&e.changedTouches){var first=e.changedTouches[0],el=first.target;if(el&&el.tagName&&el.tagName.toLowerCase()==="a"){L.DomUtil.removeClass(el,"leaflet-active")}if(this._isTapValid()){this._simulateEvent("click",first)}}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(e){var first=e.touches[0];this._newPos=new L.Point(first.clientX,first.clientY)},_simulateEvent:function(type,e){var simulatedEvent=document.createEvent("MouseEvents");simulatedEvent._simulated=true;e.target._simulatedClick=true;simulatedEvent.initMouseEvent(type,true,true,window,1,e.screenX,e.screenY,e.clientX,e.clientY,false,false,false,false,0,null);e.target.dispatchEvent(simulatedEvent)}});if(L.Browser.touch&&!L.Browser.pointer){L.Map.addInitHook("addHandler","tap",L.Map.Tap)}L.Map.mergeOptions({boxZoom:true});L.Map.BoxZoom=L.Handler.extend({initialize:function(map){this._map=map;this._container=map._container;this._pane=map._panes.overlayPane;this._moved=false},addHooks:function(){L.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.off(this._container,"mousedown",this._onMouseDown);this._moved=false},moved:function(){return this._moved},_onMouseDown:function(e){this._moved=false;if(!e.shiftKey||e.which!==1&&e.button!==1){return false}L.DomUtil.disableTextSelection();L.DomUtil.disableImageDrag();this._startLayerPoint=this._map.mouseEventToLayerPoint(e);L.DomEvent.on(document,"mousemove",this._onMouseMove,this).on(document,"mouseup",this._onMouseUp,this).on(document,"keydown",this._onKeyDown,this)},_onMouseMove:function(e){if(!this._moved){this._box=L.DomUtil.create("div","leaflet-zoom-box",this._pane);L.DomUtil.setPosition(this._box,this._startLayerPoint);this._container.style.cursor="crosshair";this._map.fire("boxzoomstart")}var startPoint=this._startLayerPoint,box=this._box,layerPoint=this._map.mouseEventToLayerPoint(e),offset=layerPoint.subtract(startPoint),newPos=new L.Point(Math.min(layerPoint.x,startPoint.x),Math.min(layerPoint.y,startPoint.y));L.DomUtil.setPosition(box,newPos);this._moved=true;box.style.width=Math.max(0,Math.abs(offset.x)-4)+"px";box.style.height=Math.max(0,Math.abs(offset.y)-4)+"px"},_finish:function(){if(this._moved){this._pane.removeChild(this._box);this._container.style.cursor=""}L.DomUtil.enableTextSelection();L.DomUtil.enableImageDrag();L.DomEvent.off(document,"mousemove",this._onMouseMove).off(document,"mouseup",this._onMouseUp).off(document,"keydown",this._onKeyDown)},_onMouseUp:function(e){this._finish();var map=this._map,layerPoint=map.mouseEventToLayerPoint(e);if(this._startLayerPoint.equals(layerPoint)){return}var bounds=new L.LatLngBounds(map.layerPointToLatLng(this._startLayerPoint),map.layerPointToLatLng(layerPoint));map.fitBounds(bounds);map.fire("boxzoomend",{boxZoomBounds:bounds})},_onKeyDown:function(e){if(e.keyCode===27){this._finish()}}});L.Map.addInitHook("addHandler","boxZoom",L.Map.BoxZoom);L.Map.mergeOptions({keyboard:true,keyboardPanOffset:80,keyboardZoomOffset:1});L.Map.Keyboard=L.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(map){this._map=map;this._setPanOffset(map.options.keyboardPanOffset);this._setZoomOffset(map.options.keyboardZoomOffset)},addHooks:function(){var container=this._map._container;if(container.tabIndex===-1){container.tabIndex="0"}L.DomEvent.on(container,"focus",this._onFocus,this).on(container,"blur",this._onBlur,this).on(container,"mousedown",this._onMouseDown,this);this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var container=this._map._container;L.DomEvent.off(container,"focus",this._onFocus,this).off(container,"blur",this._onBlur,this).off(container,"mousedown",this._onMouseDown,this);this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(this._focused){return}var body=document.body,docEl=document.documentElement,top=body.scrollTop||docEl.scrollTop,left=body.scrollLeft||docEl.scrollLeft;this._map._container.focus();window.scrollTo(left,top)},_onFocus:function(){this._focused=true;this._map.fire("focus")},_onBlur:function(){this._focused=false;this._map.fire("blur")},_setPanOffset:function(pan){var keys=this._panKeys={},codes=this.keyCodes,i,len;for(i=0,len=codes.left.length;iLeaflet'},initialize:function(options){L.setOptions(this,options);this._attributions={}},onAdd:function(map){this._container=L.DomUtil.create("div","leaflet-control-attribution");L.DomEvent.disableClickPropagation(this._container);for(var i in map._layers){if(map._layers[i].getAttribution){this.addAttribution(map._layers[i].getAttribution())}}map.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this);this._update();return this._container},onRemove:function(map){map.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(prefix){this.options.prefix=prefix;this._update();return this},addAttribution:function(text){if(!text){return}if(!this._attributions[text]){this._attributions[text]=0}this._attributions[text]++;this._update();return this},removeAttribution:function(text){if(!text){return}if(this._attributions[text]){this._attributions[text]--;this._update()}return this},_update:function(){if(!this._map){return}var attribs=[];for(var i in this._attributions){if(this._attributions[i]){attribs.push(i)}}var prefixAndAttribs=[];if(this.options.prefix){prefixAndAttribs.push(this.options.prefix); +}if(attribs.length){prefixAndAttribs.push(attribs.join(", "))}this._container.innerHTML=prefixAndAttribs.join(" | ")},_onLayerAdd:function(e){if(e.layer.getAttribution){this.addAttribution(e.layer.getAttribution())}},_onLayerRemove:function(e){if(e.layer.getAttribution){this.removeAttribution(e.layer.getAttribution())}}});L.Map.mergeOptions({attributionControl:true});L.Map.addInitHook(function(){if(this.options.attributionControl){this.attributionControl=(new L.Control.Attribution).addTo(this)}});L.control.attribution=function(options){return new L.Control.Attribution(options)};L.Control.Scale=L.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:true,imperial:true,updateWhenIdle:false},onAdd:function(map){this._map=map;var className="leaflet-control-scale",container=L.DomUtil.create("div",className),options=this.options;this._addScales(options,className,container);map.on(options.updateWhenIdle?"moveend":"move",this._update,this);map.whenReady(this._update,this);return container},onRemove:function(map){map.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(options,className,container){if(options.metric){this._mScale=L.DomUtil.create("div",className+"-line",container)}if(options.imperial){this._iScale=L.DomUtil.create("div",className+"-line",container)}},_update:function(){var bounds=this._map.getBounds(),centerLat=bounds.getCenter().lat,halfWorldMeters=6378137*Math.PI*Math.cos(centerLat*Math.PI/180),dist=halfWorldMeters*(bounds.getNorthEast().lng-bounds.getSouthWest().lng)/180,size=this._map.getSize(),options=this.options,maxMeters=0;if(size.x>0){maxMeters=dist*(options.maxWidth/size.x)}this._updateScales(options,maxMeters)},_updateScales:function(options,maxMeters){if(options.metric&&maxMeters){this._updateMetric(maxMeters)}if(options.imperial&&maxMeters){this._updateImperial(maxMeters)}},_updateMetric:function(maxMeters){var meters=this._getRoundNum(maxMeters);this._mScale.style.width=this._getScaleWidth(meters/maxMeters)+"px";this._mScale.innerHTML=meters<1e3?meters+" m":meters/1e3+" km"},_updateImperial:function(maxMeters){var maxFeet=maxMeters*3.2808399,scale=this._iScale,maxMiles,miles,feet;if(maxFeet>5280){maxMiles=maxFeet/5280;miles=this._getRoundNum(maxMiles);scale.style.width=this._getScaleWidth(miles/maxMiles)+"px";scale.innerHTML=miles+" mi"}else{feet=this._getRoundNum(maxFeet);scale.style.width=this._getScaleWidth(feet/maxFeet)+"px";scale.innerHTML=feet+" ft"}},_getScaleWidth:function(ratio){return Math.round(this.options.maxWidth*ratio)-10},_getRoundNum:function(num){var pow10=Math.pow(10,(Math.floor(num)+"").length-1),d=num/pow10;d=d>=10?10:d>=5?5:d>=3?3:d>=2?2:1;return pow10*d}});L.control.scale=function(options){return new L.Control.Scale(options)};L.Control.Layers=L.Control.extend({options:{collapsed:true,position:"topright",autoZIndex:true},initialize:function(baseLayers,overlays,options){L.setOptions(this,options);this._layers={};this._lastZIndex=0;this._handlingClick=false;for(var i in baseLayers){this._addLayer(baseLayers[i],i)}for(i in overlays){this._addLayer(overlays[i],i,true)}},onAdd:function(map){this._initLayout();this._update();map.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this);return this._container},onRemove:function(map){map.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(layer,name){this._addLayer(layer,name);this._update();return this},addOverlay:function(layer,name){this._addLayer(layer,name,true);this._update();return this},removeLayer:function(layer){var id=L.stamp(layer);delete this._layers[id];this._update();return this},_initLayout:function(){var className="leaflet-control-layers",container=this._container=L.DomUtil.create("div",className);container.setAttribute("aria-haspopup",true);if(!L.Browser.touch){L.DomEvent.disableClickPropagation(container).disableScrollPropagation(container)}else{L.DomEvent.on(container,"click",L.DomEvent.stopPropagation)}var form=this._form=L.DomUtil.create("form",className+"-list");if(this.options.collapsed){if(!L.Browser.android){L.DomEvent.on(container,"mouseover",this._expand,this).on(container,"mouseout",this._collapse,this)}var link=this._layersLink=L.DomUtil.create("a",className+"-toggle",container);link.href="#";link.title="Layers";if(L.Browser.touch){L.DomEvent.on(link,"click",L.DomEvent.stop).on(link,"click",this._expand,this)}else{L.DomEvent.on(link,"focus",this._expand,this)}L.DomEvent.on(form,"click",function(){setTimeout(L.bind(this._onInputClick,this),0)},this);this._map.on("click",this._collapse,this)}else{this._expand()}this._baseLayersList=L.DomUtil.create("div",className+"-base",form);this._separator=L.DomUtil.create("div",className+"-separator",form);this._overlaysList=L.DomUtil.create("div",className+"-overlays",form);container.appendChild(form)},_addLayer:function(layer,name,overlay){var id=L.stamp(layer);this._layers[id]={layer:layer,name:name,overlay:overlay};if(this.options.autoZIndex&&layer.setZIndex){this._lastZIndex++;layer.setZIndex(this._lastZIndex)}},_update:function(){if(!this._container){return}this._baseLayersList.innerHTML="";this._overlaysList.innerHTML="";var baseLayersPresent=false,overlaysPresent=false,i,obj;for(i in this._layers){obj=this._layers[i];this._addItem(obj);overlaysPresent=overlaysPresent||obj.overlay;baseLayersPresent=baseLayersPresent||!obj.overlay}this._separator.style.display=overlaysPresent&&baseLayersPresent?"":"none"},_onLayerChange:function(e){var obj=this._layers[L.stamp(e.layer)];if(!obj){return}if(!this._handlingClick){this._update()}var type=obj.overlay?e.type==="layeradd"?"overlayadd":"overlayremove":e.type==="layeradd"?"baselayerchange":null;if(type){this._map.fire(type,obj)}},_createRadioElement:function(name,checked){var radioHtml='=0){this._onZoomTransitionEnd()}},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(center,zoom,options){if(this._animatingZoom){return true}options=options||{};if(!this._zoomAnimated||options.animate===false||this._nothingToAnimate()||Math.abs(zoom-this._zoom)>this.options.zoomAnimationThreshold){return false}var scale=this.getZoomScale(zoom),offset=this._getCenterOffset(center)._divideBy(1-1/scale),origin=this._getCenterLayerPoint()._add(offset);if(options.animate!==true&&!this.getSize().contains(offset)){return false}this.fire("movestart").fire("zoomstart");this._animateZoom(center,zoom,origin,scale,null,true);return true},_animateZoom:function(center,zoom,origin,scale,delta,backwards,forTouchZoom){if(!forTouchZoom){this._animatingZoom=true}L.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim");this._animateToCenter=center;this._animateToZoom=zoom;if(L.Draggable){L.Draggable._disabled=true}L.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:center,zoom:zoom,origin:origin,scale:scale,delta:delta,backwards:backwards});setTimeout(L.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){if(!this._animatingZoom){return}this._animatingZoom=false;L.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim");L.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,true,true);if(L.Draggable){L.Draggable._disabled=false}},this)}});L.TileLayer.include({_animateZoom:function(e){if(!this._animating){this._animating=true;this._prepareBgBuffer()}var bg=this._bgBuffer,transform=L.DomUtil.TRANSFORM,initialTransform=e.delta?L.DomUtil.getTranslateString(e.delta):bg.style[transform],scaleStr=L.DomUtil.getScaleString(e.scale,e.origin);bg.style[transform]=e.backwards?scaleStr+" "+initialTransform:initialTransform+" "+scaleStr},_endZoomAnim:function(){var front=this._tileContainer,bg=this._bgBuffer;front.style.visibility="";front.parentNode.appendChild(front);L.Util.falseFn(bg.offsetWidth);var zoom=this._map.getZoom();if(zoom>this.options.maxZoom||zoom.5&&frontLoaded<.5){front.style.visibility="hidden";this._stopLoadingImages(front);return}bg.style.visibility="hidden";bg.style[L.DomUtil.TRANSFORM]="";this._tileContainer=bg;bg=this._bgBuffer=front;this._stopLoadingImages(bg);clearTimeout(this._clearBgBufferTimer)},_getLoadedTilesPercentage:function(container){var tiles=container.getElementsByTagName("img"),i,len,count=0;for(i=0,len=tiles.length;i1){x=x>1?1:-1}return Math.asin(x)}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/e0fn.js":[function(require,module,exports){module.exports=function(x){return 1-.25*x*(1+x/16*(3+1.25*x))}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/e1fn.js":[function(require,module,exports){module.exports=function(x){return.375*x*(1+.25*x*(1+.46875*x))}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/e2fn.js":[function(require,module,exports){module.exports=function(x){return.05859375*x*x*(1+.75*x)}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/e3fn.js":[function(require,module,exports){module.exports=function(x){return x*x*x*(35/3072)}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/gN.js":[function(require,module,exports){module.exports=function(a,e,sinphi){var temp=e*sinphi;return a/Math.sqrt(1-temp*temp)}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/imlfn.js":[function(require,module,exports){module.exports=function(ml,e0,e1,e2,e3){var phi;var dphi;phi=ml/e0;for(var i=0;i<15;i++){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));phi+=dphi;if(Math.abs(dphi)<=1e-10){return phi}}return NaN}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/iqsfnz.js":[function(require,module,exports){var HALF_PI=Math.PI/2;module.exports=function(eccent,q){var temp=1-(1-eccent*eccent)/(2*eccent)*Math.log((1-eccent)/(1+eccent));if(Math.abs(Math.abs(q)-temp)<1e-6){if(q<0){return-1*HALF_PI}else{return HALF_PI}}var phi=Math.asin(.5*q);var dphi;var sin_phi;var cos_phi;var con;for(var i=0;i<30;i++){sin_phi=Math.sin(phi);cos_phi=Math.cos(phi);con=eccent*sin_phi;dphi=Math.pow(1-con*con,2)/(2*cos_phi)*(q/(1-eccent*eccent)-sin_phi/(1-con*con)+.5/eccent*Math.log((1-con)/(1+con)));phi+=dphi;if(Math.abs(dphi)<=1e-10){return phi}}return NaN}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/mlfn.js":[function(require,module,exports){module.exports=function(e0,e1,e2,e3,phi){return e0*phi-e1*Math.sin(2*phi)+e2*Math.sin(4*phi)-e3*Math.sin(6*phi)}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/msfnz.js":[function(require,module,exports){module.exports=function(eccent,sinphi,cosphi){var con=eccent*sinphi;return cosphi/Math.sqrt(1-con*con)}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/phi2z.js":[function(require,module,exports){var HALF_PI=Math.PI/2;module.exports=function(eccent,ts){var eccnth=.5*eccent;var con,dphi;var phi=HALF_PI-2*Math.atan(ts);for(var i=0;i<=15;i++){con=eccent*Math.sin(phi);dphi=HALF_PI-2*Math.atan(ts*Math.pow((1-con)/(1+con),eccnth))-phi;phi+=dphi;if(Math.abs(dphi)<=1e-10){return phi}}return-9999}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/pj_enfn.js":[function(require,module,exports){var C00=1;var C02=.25;var C04=.046875;var C06=.01953125;var C08=.01068115234375;var C22=.75;var C44=.46875;var C46=.013020833333333334;var C48=.007120768229166667;var C66=.3645833333333333;var C68=.005696614583333333;var C88=.3076171875;module.exports=function(es){var en=[];en[0]=C00-es*(C02+es*(C04+es*(C06+es*C08)));en[1]=es*(C22-es*(C04+es*(C06+es*C08)));var t=es*es;en[2]=t*(C44-es*(C46+es*C48));t*=es;en[3]=t*(C66-es*C68);en[4]=t*es*C88;return en}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/pj_inv_mlfn.js":[function(require,module,exports){var pj_mlfn=require("./pj_mlfn");var EPSLN=1e-10;var MAX_ITER=20;module.exports=function(arg,es,en){var k=1/(1-es);var phi=arg;for(var i=MAX_ITER;i;--i){var s=Math.sin(phi);var t=1-es*s*s;t=(pj_mlfn(phi,s,Math.cos(phi),en)-arg)*(t*Math.sqrt(t))*k;phi-=t;if(Math.abs(t)1e-7){con=eccent*sinphi;return(1-eccent*eccent)*(sinphi/(1-con*con)-.5/eccent*Math.log((1-con)/(1+con)))}else{return 2*sinphi}}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/sign.js":[function(require,module,exports){module.exports=function(x){return x<0?-1:1}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/srat.js":[function(require,module,exports){module.exports=function(esinp,exp){return Math.pow((1-esinp)/(1+esinp),exp)}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/toPoint.js":[function(require,module,exports){module.exports=function(array){var out={x:array[0],y:array[1]};if(array.length>2){out.z=array[2]}if(array.length>3){out.m=array[3]}return out}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/common/tsfnz.js":[function(require,module,exports){var HALF_PI=Math.PI/2;module.exports=function(eccent,phi,sinphi){var con=eccent*sinphi;var com=.5*eccent;con=Math.pow((1-con)/(1+con),com);return Math.tan(.5*(HALF_PI-phi))/con}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/constants/Datum.js":[function(require,module,exports){exports.wgs84={towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"};exports.ch1903={towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"};exports.ggrs87={towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"};exports.nad83={towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"};exports.nad27={nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"};exports.potsdam={towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"};exports.carthage={towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"};exports.hermannskogel={towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"};exports.ire65={towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"};exports.rassadiran={towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"};exports.nzgd49={towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"};exports.osgb36={towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"};exports.s_jtsk={towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"};exports.beduaram={towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"};exports.gunung_segara={towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"};exports.rnb72={towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/constants/Ellipsoid.js":[function(require,module,exports){exports.MERIT={a:6378137,rf:298.257,ellipseName:"MERIT 1983"};exports.SGS85={a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"};exports.GRS80={a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"};exports.IAU76={a:6378140,rf:298.257,ellipseName:"IAU 1976"};exports.airy={a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"};exports.APL4={a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"};exports.NWL9D={a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"};exports.mod_airy={a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"};exports.andrae={a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"};exports.aust_SA={a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"};exports.GRS67={a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"};exports.bessel={a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"};exports.bess_nam={a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"};exports.clrk66={a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"};exports.clrk80={a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."};exports.clrk58={a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"};exports.CPM={a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"};exports.delmbr={a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"};exports.engelis={a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"};exports.evrst30={a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"};exports.evrst48={a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"};exports.evrst56={a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"};exports.evrst69={a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"};exports.evrstSS={a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"};exports.fschr60={a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"};exports.fschr60m={a:6378155,rf:298.3,ellipseName:"Fischer 1960"};exports.fschr68={a:6378150,rf:298.3,ellipseName:"Fischer 1968"};exports.helmert={a:6378200,rf:298.3,ellipseName:"Helmert 1906"};exports.hough={a:6378270,rf:297,ellipseName:"Hough"};exports.intl={a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"};exports.kaula={a:6378163,rf:298.24,ellipseName:"Kaula 1961"};exports.lerch={a:6378139,rf:298.257,ellipseName:"Lerch 1979"};exports.mprts={a:6397300,rf:191,ellipseName:"Maupertius 1738"};exports.new_intl={a:6378157.5,b:6356772.2,ellipseName:"New International 1967"};exports.plessis={a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"};exports.krass={a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"};exports.SEasia={a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"};exports.walbeck={a:6376896,b:6355834.8467,ellipseName:"Walbeck"};exports.WGS60={a:6378165,rf:298.3,ellipseName:"WGS 60"};exports.WGS66={a:6378145,rf:298.25,ellipseName:"WGS 66"};exports.WGS7={a:6378135,rf:298.26,ellipseName:"WGS 72"};exports.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};exports.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/constants/PrimeMeridian.js":[function(require,module,exports){exports.greenwich=0;exports.lisbon=-9.131906111111;exports.paris=2.337229166667;exports.bogota=-74.080916666667;exports.madrid=-3.687938888889;exports.rome=12.452333333333;exports.bern=7.439583333333;exports.jakarta=106.807719444444;exports.ferro=-17.666666666667;exports.brussels=4.367975;exports.stockholm=18.058277777778;exports.athens=23.7163375;exports.oslo=10.722916666667},{}],"/data/github/geopackage-node/node_modules/proj4/lib/constants/units.js":[function(require,module,exports){exports.ft={to_meter:.3048};exports["us-ft"]={to_meter:1200/3937}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/core.js":[function(require,module,exports){var proj=require("./Proj");var transform=require("./transform");var wgs84=proj("WGS84");function transformer(from,to,coords){var transformedArray;if(Array.isArray(coords)){transformedArray=transform(from,to,coords);if(coords.length===3){return[transformedArray.x,transformedArray.y,transformedArray.z]}else{return[transformedArray.x,transformedArray.y]}}else{return transform(from,to,coords)}}function checkProj(item){if(item instanceof proj){ +return item}if(item.oProj){return item.oProj}return proj(item)}function proj4(fromProj,toProj,coord){fromProj=checkProj(fromProj);var single=false;var obj;if(typeof toProj==="undefined"){toProj=fromProj;fromProj=wgs84;single=true}else if(typeof toProj.x!=="undefined"||Array.isArray(toProj)){coord=toProj;toProj=fromProj;fromProj=wgs84;single=true}toProj=checkProj(toProj);if(coord){return transformer(fromProj,toProj,coord)}else{obj={forward:function(coords){return transformer(fromProj,toProj,coords)},inverse:function(coords){return transformer(toProj,fromProj,coords)}};if(single){obj.oProj=toProj}return obj}}module.exports=proj4},{"./Proj":"/data/github/geopackage-node/node_modules/proj4/lib/Proj.js","./transform":"/data/github/geopackage-node/node_modules/proj4/lib/transform.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/datum.js":[function(require,module,exports){var HALF_PI=Math.PI/2;var PJD_3PARAM=1;var PJD_7PARAM=2;var PJD_GRIDSHIFT=3;var PJD_WGS84=4;var PJD_NODATUM=5;var SEC_TO_RAD=484813681109536e-20;var AD_C=1.0026;var COS_67P5=.3826834323650898;var datum=function(proj){if(!(this instanceof datum)){return new datum(proj)}this.datum_type=PJD_WGS84;if(!proj){return}if(proj.datumCode&&proj.datumCode==="none"){this.datum_type=PJD_NODATUM}if(proj.datum_params){this.datum_params=proj.datum_params.map(parseFloat);if(this.datum_params[0]!==0||this.datum_params[1]!==0||this.datum_params[2]!==0){this.datum_type=PJD_3PARAM}if(this.datum_params.length>3){if(this.datum_params[3]!==0||this.datum_params[4]!==0||this.datum_params[5]!==0||this.datum_params[6]!==0){this.datum_type=PJD_7PARAM;this.datum_params[3]*=SEC_TO_RAD;this.datum_params[4]*=SEC_TO_RAD;this.datum_params[5]*=SEC_TO_RAD;this.datum_params[6]=this.datum_params[6]/1e6+1}}}this.datum_type=proj.grids?PJD_GRIDSHIFT:this.datum_type;this.a=proj.a;this.b=proj.b;this.es=proj.es;this.ep2=proj.ep2;if(this.datum_type===PJD_GRIDSHIFT){this.grids=proj.grids}};datum.prototype={compare_datums:function(dest){if(this.datum_type!==dest.datum_type){return false}else if(this.a!==dest.a||Math.abs(this.es-dest.es)>5e-11){return false}else if(this.datum_type===PJD_3PARAM){return this.datum_params[0]===dest.datum_params[0]&&this.datum_params[1]===dest.datum_params[1]&&this.datum_params[2]===dest.datum_params[2]}else if(this.datum_type===PJD_7PARAM){return this.datum_params[0]===dest.datum_params[0]&&this.datum_params[1]===dest.datum_params[1]&&this.datum_params[2]===dest.datum_params[2]&&this.datum_params[3]===dest.datum_params[3]&&this.datum_params[4]===dest.datum_params[4]&&this.datum_params[5]===dest.datum_params[5]&&this.datum_params[6]===dest.datum_params[6]}else if(this.datum_type===PJD_GRIDSHIFT||dest.datum_type===PJD_GRIDSHIFT){return this.nadgrids===dest.nadgrids}else{return true}},geodetic_to_geocentric:function(p){var Longitude=p.x;var Latitude=p.y;var Height=p.z?p.z:0;var X;var Y;var Z;var Error_Code=0;var Rn;var Sin_Lat;var Sin2_Lat;var Cos_Lat;if(Latitude<-HALF_PI&&Latitude>-1.001*HALF_PI){Latitude=-HALF_PI}else if(Latitude>HALF_PI&&Latitude<1.001*HALF_PI){Latitude=HALF_PI}else if(Latitude<-HALF_PI||Latitude>HALF_PI){return null}if(Longitude>Math.PI){Longitude-=2*Math.PI}Sin_Lat=Math.sin(Latitude);Cos_Lat=Math.cos(Latitude);Sin2_Lat=Sin_Lat*Sin_Lat;Rn=this.a/Math.sqrt(1-this.es*Sin2_Lat);X=(Rn+Height)*Cos_Lat*Math.cos(Longitude);Y=(Rn+Height)*Cos_Lat*Math.sin(Longitude);Z=(Rn*(1-this.es)+Height)*Sin_Lat;p.x=X;p.y=Y;p.z=Z;return Error_Code},geocentric_to_geodetic:function(p){var genau=1e-12;var genau2=genau*genau;var maxiter=30;var P;var RR;var CT;var ST;var RX;var RK;var RN;var CPHI0;var SPHI0;var CPHI;var SPHI;var SDPHI;var At_Pole;var iter;var X=p.x;var Y=p.y;var Z=p.z?p.z:0;var Longitude;var Latitude;var Height;At_Pole=false;P=Math.sqrt(X*X+Y*Y);RR=Math.sqrt(X*X+Y*Y+Z*Z);if(P/this.agenau2&&iter0){Longitude=HALF_PI}else if(Y<0){Longitude=-HALF_PI}else{At_Pole=true;Longitude=0;if(Z>0){Latitude=HALF_PI}else if(Z<0){Latitude=-HALF_PI}else{Latitude=HALF_PI;Height=-this.b;return}}}W2=X*X+Y*Y;W=Math.sqrt(W2);T0=Z*AD_C;S0=Math.sqrt(T0*T0+W2);Sin_B0=T0/S0;Cos_B0=W/S0;Sin3_B0=Sin_B0*Sin_B0*Sin_B0;T1=Z+this.b*this.ep2*Sin3_B0;Sum=W-this.a*this.es*Cos_B0*Cos_B0*Cos_B0;S1=Math.sqrt(T1*T1+Sum*Sum);Sin_p1=T1/S1;Cos_p1=Sum/S1;Rn=this.a/Math.sqrt(1-this.es*Sin_p1*Sin_p1);if(Cos_p1>=COS_67P5){Height=W/Cos_p1-Rn}else if(Cos_p1<=-COS_67P5){Height=W/-Cos_p1-Rn}else{Height=Z/Sin_p1+Rn*(this.es-1)}if(At_Pole===false){Latitude=Math.atan(Sin_p1/Cos_p1)}p.x=Longitude;p.y=Latitude;p.z=Height;return p},geocentric_to_wgs84:function(p){if(this.datum_type===PJD_3PARAM){p.x+=this.datum_params[0];p.y+=this.datum_params[1];p.z+=this.datum_params[2]}else if(this.datum_type===PJD_7PARAM){var Dx_BF=this.datum_params[0];var Dy_BF=this.datum_params[1];var Dz_BF=this.datum_params[2];var Rx_BF=this.datum_params[3];var Ry_BF=this.datum_params[4];var Rz_BF=this.datum_params[5];var M_BF=this.datum_params[6];var x_out=M_BF*(p.x-Rz_BF*p.y+Ry_BF*p.z)+Dx_BF;var y_out=M_BF*(Rz_BF*p.x+p.y-Rx_BF*p.z)+Dy_BF;var z_out=M_BF*(-Ry_BF*p.x+Rx_BF*p.y+p.z)+Dz_BF;p.x=x_out;p.y=y_out;p.z=z_out}},geocentric_from_wgs84:function(p){if(this.datum_type===PJD_3PARAM){p.x-=this.datum_params[0];p.y-=this.datum_params[1];p.z-=this.datum_params[2]}else if(this.datum_type===PJD_7PARAM){var Dx_BF=this.datum_params[0];var Dy_BF=this.datum_params[1];var Dz_BF=this.datum_params[2];var Rx_BF=this.datum_params[3];var Ry_BF=this.datum_params[4];var Rz_BF=this.datum_params[5];var M_BF=this.datum_params[6];var x_tmp=(p.x-Dx_BF)/M_BF;var y_tmp=(p.y-Dy_BF)/M_BF;var z_tmp=(p.z-Dz_BF)/M_BF;p.x=x_tmp+Rz_BF*y_tmp-Ry_BF*z_tmp;p.y=-Rz_BF*x_tmp+y_tmp+Rx_BF*z_tmp;p.z=Ry_BF*x_tmp-Rx_BF*y_tmp+z_tmp}}};module.exports=datum},{}],"/data/github/geopackage-node/node_modules/proj4/lib/datum_transform.js":[function(require,module,exports){var PJD_3PARAM=1;var PJD_7PARAM=2;var PJD_GRIDSHIFT=3;var PJD_NODATUM=5;var SRS_WGS84_SEMIMAJOR=6378137;var SRS_WGS84_ESQUARED=.006694379990141316;module.exports=function(source,dest,point){var wp,i,l;function checkParams(fallback){return fallback===PJD_3PARAM||fallback===PJD_7PARAM}if(source.compare_datums(dest)){return point}if(source.datum_type===PJD_NODATUM||dest.datum_type===PJD_NODATUM){return point}var src_a=source.a;var src_es=source.es;var dst_a=dest.a;var dst_es=dest.es;var fallback=source.datum_type;if(fallback===PJD_GRIDSHIFT){if(this.apply_gridshift(source,0,point)===0){source.a=SRS_WGS84_SEMIMAJOR;source.es=SRS_WGS84_ESQUARED}else{if(!source.datum_params){source.a=src_a;source.es=source.es;return point}wp=1;for(i=0,l=source.datum_params.length;i3){fallback=PJD_7PARAM}else{fallback=PJD_3PARAM}}}if(dest.datum_type===PJD_GRIDSHIFT){dest.a=SRS_WGS84_SEMIMAJOR;dest.es=SRS_WGS84_ESQUARED}if(source.es!==dest.es||source.a!==dest.a||checkParams(fallback)||checkParams(dest.datum_type)){source.geodetic_to_geocentric(point);if(checkParams(source.datum_type)){source.geocentric_to_wgs84(point)}if(checkParams(dest.datum_type)){dest.geocentric_from_wgs84(point)}dest.geocentric_to_geodetic(point)}if(dest.datum_type===PJD_GRIDSHIFT){this.apply_gridshift(dest,1,point)}source.a=src_a;source.es=src_es;dest.a=dst_a;dest.es=dst_es;return point}},{}],"/data/github/geopackage-node/node_modules/proj4/lib/defs.js":[function(require,module,exports){var globals=require("./global");var parseProj=require("./projString");var wkt=require("./wkt");function defs(name){var that=this;if(arguments.length===2){var def=arguments[1];if(typeof def==="string"){if(def.charAt(0)==="+"){defs[name]=parseProj(arguments[1])}else{defs[name]=wkt(arguments[1])}}else{defs[name]=def}}else if(arguments.length===1){if(Array.isArray(name)){return name.map(function(v){if(Array.isArray(v)){defs.apply(that,v)}else{defs(v)}})}else if(typeof name==="string"){if(name in defs){return defs[name]}}else if("EPSG"in name){defs["EPSG:"+name.EPSG]=name}else if("ESRI"in name){defs["ESRI:"+name.ESRI]=name}else if("IAU2000"in name){defs["IAU2000:"+name.IAU2000]=name}else{console.log(name)}return}}globals(defs);module.exports=defs},{"./global":"/data/github/geopackage-node/node_modules/proj4/lib/global.js","./projString":"/data/github/geopackage-node/node_modules/proj4/lib/projString.js","./wkt":"/data/github/geopackage-node/node_modules/proj4/lib/wkt.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/deriveConstants.js":[function(require,module,exports){var Datum=require("./constants/Datum");var Ellipsoid=require("./constants/Ellipsoid");var extend=require("./extend");var datum=require("./datum");var EPSLN=1e-10;var SIXTH=.16666666666666666;var RA4=.04722222222222222;var RA6=.022156084656084655;module.exports=function(json){if(json.datumCode&&json.datumCode!=="none"){var datumDef=Datum[json.datumCode];if(datumDef){json.datum_params=datumDef.towgs84?datumDef.towgs84.split(","):null;json.ellps=datumDef.ellipse;json.datumName=datumDef.datumName?datumDef.datumName:json.datumCode}}if(!json.a){var ellipse=Ellipsoid[json.ellps]?Ellipsoid[json.ellps]:Ellipsoid.WGS84;extend(json,ellipse)}if(json.rf&&!json.b){json.b=(1-1/json.rf)*json.a}if(json.rf===0||Math.abs(json.a-json.b)EPSLN){this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1)}else{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};exports.forward=function(p){var lon=p.x;var lat=p.y;this.sin_phi=Math.sin(lat);this.cos_phi=Math.cos(lat);var qs=qsfnz(this.e3,this.sin_phi,this.cos_phi);var rh1=this.a*Math.sqrt(this.c-this.ns0*qs)/this.ns0;var theta=this.ns0*adjust_lon(lon-this.long0);var x=rh1*Math.sin(theta)+this.x0;var y=this.rh-rh1*Math.cos(theta)+this.y0;p.x=x;p.y=y;return p};exports.inverse=function(p){var rh1,qs,con,theta,lon,lat;p.x-=this.x0;p.y=this.rh-p.y+this.y0;if(this.ns0>=0){rh1=Math.sqrt(p.x*p.x+p.y*p.y);con=1}else{rh1=-Math.sqrt(p.x*p.x+p.y*p.y);con=-1}theta=0;if(rh1!==0){theta=Math.atan2(con*p.x,con*p.y)}con=rh1*this.ns0/this.a;if(this.sphere){lat=Math.asin((this.c-con*con)/(2*this.ns0))}else{qs=(this.c-con*con)/this.ns0;lat=this.phi1z(this.e3,qs)}lon=adjust_lon(theta/this.ns0+this.long0);p.x=lon;p.y=lat;return p};exports.phi1z=function(eccent,qs){var sinphi,cosphi,con,com,dphi;var phi=asinz(.5*qs);if(eccent2*HALF_PI*this.a){return}z=rh/this.a;sinz=Math.sin(z);cosz=Math.cos(z);lon=this.long0;if(Math.abs(rh)<=EPSLN){lat=this.lat0}else{lat=asinz(cosz*this.sin_p12+p.y*sinz*this.cos_p12/rh);con=Math.abs(this.lat0)-HALF_PI;if(Math.abs(con)<=EPSLN){if(this.lat0>=0){lon=adjust_lon(this.long0+Math.atan2(p.x,-p.y))}else{lon=adjust_lon(this.long0-Math.atan2(-p.x,p.y))}}else{lon=adjust_lon(this.long0+Math.atan2(p.x*sinz,rh*this.cos_p12*cosz-p.y*this.sin_p12*sinz))}}p.x=lon;p.y=lat;return p}else{e0=e0fn(this.es);e1=e1fn(this.es);e2=e2fn(this.es);e3=e3fn(this.es);if(Math.abs(this.sin_p12-1)<=EPSLN){Mlp=this.a*mlfn(e0,e1,e2,e3,HALF_PI);rh=Math.sqrt(p.x*p.x+p.y*p.y);M=Mlp-rh;lat=imlfn(M/this.a,e0,e1,e2,e3);lon=adjust_lon(this.long0+Math.atan2(p.x,-1*p.y));p.x=lon;p.y=lat;return p}else if(Math.abs(this.sin_p12+1)<=EPSLN){Mlp=this.a*mlfn(e0,e1,e2,e3,HALF_PI);rh=Math.sqrt(p.x*p.x+p.y*p.y);M=rh-Mlp;lat=imlfn(M/this.a,e0,e1,e2,e3);lon=adjust_lon(this.long0+Math.atan2(p.x,p.y));p.x=lon;p.y=lat;return p}else{rh=Math.sqrt(p.x*p.x+p.y*p.y);Az=Math.atan2(p.x,p.y);N1=gN(this.a,this.e,this.sin_p12);cosAz=Math.cos(Az);tmp=this.e*this.cos_p12*cosAz;A=-tmp*tmp/(1-this.es);B=3*this.es*(1-A)*this.sin_p12*this.cos_p12*cosAz/(1-this.es);D=rh/N1;Ee=D-A*(1+A)*Math.pow(D,3)/6-B*(1+3*A)*Math.pow(D,4)/24;F=1-A*Ee*Ee/2-D*Ee*Ee*Ee/6;psi=Math.asin(this.sin_p12*Math.cos(Ee)+this.cos_p12*Math.sin(Ee)*cosAz);lon=adjust_lon(this.long0+Math.asin(Math.sin(Az)*Math.sin(Ee)/Math.cos(psi)));lat=Math.atan((1-this.es*F*this.sin_p12/Math.sin(psi))*Math.tan(psi)/(1-this.es));p.x=lon;p.y=lat;return p}}};exports.names=["Azimuthal_Equidistant","aeqd"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/asinz":"/data/github/geopackage-node/node_modules/proj4/lib/common/asinz.js","../common/e0fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e0fn.js","../common/e1fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e1fn.js","../common/e2fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e2fn.js","../common/e3fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e3fn.js","../common/gN":"/data/github/geopackage-node/node_modules/proj4/lib/common/gN.js","../common/imlfn":"/data/github/geopackage-node/node_modules/proj4/lib/common/imlfn.js","../common/mlfn":"/data/github/geopackage-node/node_modules/proj4/lib/common/mlfn.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/cass.js":[function(require,module,exports){var mlfn=require("../common/mlfn");var e0fn=require("../common/e0fn");var e1fn=require("../common/e1fn");var e2fn=require("../common/e2fn");var e3fn=require("../common/e3fn");var gN=require("../common/gN");var adjust_lon=require("../common/adjust_lon");var adjust_lat=require("../common/adjust_lat");var imlfn=require("../common/imlfn");var HALF_PI=Math.PI/2;var EPSLN=1e-10;exports.init=function(){if(!this.sphere){this.e0=e0fn(this.es);this.e1=e1fn(this.es);this.e2=e2fn(this.es);this.e3=e3fn(this.es);this.ml0=this.a*mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)}};exports.forward=function(p){var x,y;var lam=p.x;var phi=p.y;lam=adjust_lon(lam-this.long0);if(this.sphere){x=this.a*Math.asin(Math.cos(phi)*Math.sin(lam));y=this.a*(Math.atan2(Math.tan(phi),Math.cos(lam))-this.lat0)}else{var sinphi=Math.sin(phi);var cosphi=Math.cos(phi);var nl=gN(this.a,this.e,sinphi);var tl=Math.tan(phi)*Math.tan(phi);var al=lam*Math.cos(phi);var asq=al*al;var cl=this.es*cosphi*cosphi/(1-this.es);var ml=this.a*mlfn(this.e0,this.e1,this.e2,this.e3,phi);x=nl*al*(1-asq*tl*(1/6-(8-tl+8*cl)*asq/120));y=ml-this.ml0+nl*sinphi/cosphi*asq*(.5+(5-tl+6*cl)*asq/24)}p.x=x+this.x0;p.y=y+this.y0;return p};exports.inverse=function(p){p.x-=this.x0;p.y-=this.y0;var x=p.x/this.a;var y=p.y/this.a;var phi,lam;if(this.sphere){var dd=y+this.lat0;phi=Math.asin(Math.sin(dd)*Math.cos(x));lam=Math.atan2(Math.tan(x),Math.cos(dd))}else{var ml1=this.ml0/this.a+y;var phi1=imlfn(ml1,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(phi1)-HALF_PI)<=EPSLN){p.x=this.long0;p.y=HALF_PI;if(y<0){p.y*=-1}return p}var nl1=gN(this.a,this.e,Math.sin(phi1));var rl1=nl1*nl1*nl1/this.a/this.a*(1-this.es);var tl1=Math.pow(Math.tan(phi1),2);var dl=x*this.a/nl1;var dsq=dl*dl;phi=phi1-nl1*Math.tan(phi1)/rl1*dl*dl*(.5-(1+3*tl1)*dl*dl/24);lam=dl*(1-dsq*(tl1/3+(1+3*tl1)*tl1*dsq/15))/Math.cos(phi1)}p.x=adjust_lon(lam+this.long0);p.y=adjust_lat(phi);return p};exports.names=["Cassini","Cassini_Soldner","cass"]},{"../common/adjust_lat":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lat.js","../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/e0fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e0fn.js","../common/e1fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e1fn.js","../common/e2fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e2fn.js","../common/e3fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e3fn.js","../common/gN":"/data/github/geopackage-node/node_modules/proj4/lib/common/gN.js","../common/imlfn":"/data/github/geopackage-node/node_modules/proj4/lib/common/imlfn.js","../common/mlfn":"/data/github/geopackage-node/node_modules/proj4/lib/common/mlfn.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/cea.js":[function(require,module,exports){var adjust_lon=require("../common/adjust_lon");var qsfnz=require("../common/qsfnz");var msfnz=require("../common/msfnz");var iqsfnz=require("../common/iqsfnz");exports.init=function(){if(!this.sphere){this.k0=msfnz(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))}};exports.forward=function(p){var lon=p.x;var lat=p.y;var x,y;var dlon=adjust_lon(lon-this.long0);if(this.sphere){x=this.x0+this.a*dlon*Math.cos(this.lat_ts);y=this.y0+this.a*Math.sin(lat)/Math.cos(this.lat_ts)}else{var qs=qsfnz(this.e,Math.sin(lat));x=this.x0+this.a*this.k0*dlon;y=this.y0+this.a*qs*.5/this.k0}p.x=x;p.y=y;return p};exports.inverse=function(p){p.x-=this.x0;p.y-=this.y0;var lon,lat;if(this.sphere){lon=adjust_lon(this.long0+p.x/this.a/Math.cos(this.lat_ts)); +lat=Math.asin(p.y/this.a*Math.cos(this.lat_ts))}else{lat=iqsfnz(this.e,2*p.y*this.k0/this.a);lon=adjust_lon(this.long0+p.x/(this.a*this.k0))}p.x=lon;p.y=lat;return p};exports.names=["cea"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/iqsfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/iqsfnz.js","../common/msfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/msfnz.js","../common/qsfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/qsfnz.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/eqc.js":[function(require,module,exports){var adjust_lon=require("../common/adjust_lon");var adjust_lat=require("../common/adjust_lat");exports.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)};exports.forward=function(p){var lon=p.x;var lat=p.y;var dlon=adjust_lon(lon-this.long0);var dlat=adjust_lat(lat-this.lat0);p.x=this.x0+this.a*dlon*this.rc;p.y=this.y0+this.a*dlat;return p};exports.inverse=function(p){var x=p.x;var y=p.y;p.x=adjust_lon(this.long0+(x-this.x0)/(this.a*this.rc));p.y=adjust_lat(this.lat0+(y-this.y0)/this.a);return p};exports.names=["Equirectangular","Equidistant_Cylindrical","eqc"]},{"../common/adjust_lat":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lat.js","../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/eqdc.js":[function(require,module,exports){var e0fn=require("../common/e0fn");var e1fn=require("../common/e1fn");var e2fn=require("../common/e2fn");var e3fn=require("../common/e3fn");var msfnz=require("../common/msfnz");var mlfn=require("../common/mlfn");var adjust_lon=require("../common/adjust_lon");var adjust_lat=require("../common/adjust_lat");var imlfn=require("../common/imlfn");var EPSLN=1e-10;exports.init=function(){if(Math.abs(this.lat1+this.lat2)=0){rh1=Math.sqrt(p.x*p.x+p.y*p.y);con=1}else{rh1=-Math.sqrt(p.x*p.x+p.y*p.y);con=-1}var theta=0;if(rh1!==0){theta=Math.atan2(con*p.x,con*p.y)}if(this.sphere){lon=adjust_lon(this.long0+theta/this.ns);lat=adjust_lat(this.g-rh1/this.a);p.x=lon;p.y=lat;return p}else{var ml=this.g-rh1/this.a;lat=imlfn(ml,this.e0,this.e1,this.e2,this.e3);lon=adjust_lon(this.long0+theta/this.ns);p.x=lon;p.y=lat;return p}};exports.names=["Equidistant_Conic","eqdc"]},{"../common/adjust_lat":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lat.js","../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/e0fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e0fn.js","../common/e1fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e1fn.js","../common/e2fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e2fn.js","../common/e3fn":"/data/github/geopackage-node/node_modules/proj4/lib/common/e3fn.js","../common/imlfn":"/data/github/geopackage-node/node_modules/proj4/lib/common/imlfn.js","../common/mlfn":"/data/github/geopackage-node/node_modules/proj4/lib/common/mlfn.js","../common/msfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/msfnz.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/gauss.js":[function(require,module,exports){var FORTPI=Math.PI/4;var srat=require("../common/srat");var HALF_PI=Math.PI/2;var MAX_ITER=20;exports.init=function(){var sphi=Math.sin(this.lat0);var cphi=Math.cos(this.lat0);cphi*=cphi;this.rc=Math.sqrt(1-this.es)/(1-this.es*sphi*sphi);this.C=Math.sqrt(1+this.es*cphi*cphi/(1-this.es));this.phic0=Math.asin(sphi/this.C);this.ratexp=.5*this.C*this.e;this.K=Math.tan(.5*this.phic0+FORTPI)/(Math.pow(Math.tan(.5*this.lat0+FORTPI),this.C)*srat(this.e*sphi,this.ratexp))};exports.forward=function(p){var lon=p.x;var lat=p.y;p.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*lat+FORTPI),this.C)*srat(this.e*Math.sin(lat),this.ratexp))-HALF_PI;p.x=this.C*lon;return p};exports.inverse=function(p){var DEL_TOL=1e-14;var lon=p.x/this.C;var lat=p.y;var num=Math.pow(Math.tan(.5*lat+FORTPI)/this.K,1/this.C);for(var i=MAX_ITER;i>0;--i){lat=2*Math.atan(num*srat(this.e*Math.sin(p.y),-.5*this.e))-HALF_PI;if(Math.abs(lat-p.y)0||Math.abs(g)<=EPSLN){x=this.x0+this.a*ksp*cosphi*Math.sin(dlon)/g;y=this.y0+this.a*ksp*(this.cos_p14*sinphi-this.sin_p14*cosphi*coslon)/g}else{x=this.x0+this.infinity_dist*cosphi*Math.sin(dlon);y=this.y0+this.infinity_dist*(this.cos_p14*sinphi-this.sin_p14*cosphi*coslon)}p.x=x;p.y=y;return p};exports.inverse=function(p){var rh;var sinc,cosc;var c;var lon,lat;p.x=(p.x-this.x0)/this.a;p.y=(p.y-this.y0)/this.a;p.x/=this.k0;p.y/=this.k0;if(rh=Math.sqrt(p.x*p.x+p.y*p.y)){c=Math.atan2(rh,this.rc);sinc=Math.sin(c);cosc=Math.cos(c);lat=asinz(cosc*this.sin_p14+p.y*sinc*this.cos_p14/rh);lon=Math.atan2(p.x*sinc,rh*this.cos_p14*cosc-p.y*this.sin_p14*sinc);lon=adjust_lon(this.long0+lon)}else{lat=this.phic0;lon=0}p.x=lon;p.y=lat;return p};exports.names=["gnom"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/asinz":"/data/github/geopackage-node/node_modules/proj4/lib/common/asinz.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/krovak.js":[function(require,module,exports){var adjust_lon=require("../common/adjust_lon");exports.init=function(){this.a=6377397.155;this.es=.006674372230614;this.e=Math.sqrt(this.es);if(!this.lat0){this.lat0=.863937979737193}if(!this.long0){this.long0=.7417649320975901-.308341501185665}if(!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};exports.forward=function(p){var gfi,u,deltav,s,d,eps,ro;var lon=p.x;var lat=p.y;var delta_lon=adjust_lon(lon-this.long0);gfi=Math.pow((1+this.e*Math.sin(lat))/(1-this.e*Math.sin(lat)),this.alfa*this.e/2);u=2*(Math.atan(this.k*Math.pow(Math.tan(lat/2+this.s45),this.alfa)/gfi)-this.s45);deltav=-delta_lon*this.alfa;s=Math.asin(Math.cos(this.ad)*Math.sin(u)+Math.sin(this.ad)*Math.cos(u)*Math.cos(deltav));d=Math.asin(Math.cos(u)*Math.sin(deltav)/Math.cos(s));eps=this.n*d;ro=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(s/2+this.s45),this.n);p.y=ro*Math.cos(eps)/1;p.x=ro*Math.sin(eps)/1;if(!this.czech){p.y*=-1;p.x*=-1}return p};exports.inverse=function(p){var u,deltav,s,d,eps,ro,fi1;var ok;var tmp=p.x;p.x=p.y;p.y=tmp;if(!this.czech){p.y*=-1;p.x*=-1}ro=Math.sqrt(p.x*p.x+p.y*p.y);eps=Math.atan2(p.y,p.x);d=eps/Math.sin(this.s0);s=2*(Math.atan(Math.pow(this.ro0/ro,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45);u=Math.asin(Math.cos(this.ad)*Math.sin(s)-Math.sin(this.ad)*Math.cos(s)*Math.cos(d));deltav=Math.asin(Math.cos(s)*Math.sin(d)/Math.cos(u));p.x=this.long0-deltav/this.alfa;fi1=u;ok=0;var iter=0;do{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);if(Math.abs(fi1-p.y)<1e-10){ok=1}fi1=p.y;iter+=1}while(ok===0&&iter<15);if(iter>=15){return null}return p};exports.names=["Krovak","krovak"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/laea.js":[function(require,module,exports){var HALF_PI=Math.PI/2;var FORTPI=Math.PI/4;var EPSLN=1e-10;var qsfnz=require("../common/qsfnz");var adjust_lon=require("../common/adjust_lon");exports.S_POLE=1;exports.N_POLE=2;exports.EQUIT=3;exports.OBLIQ=4;exports.init=function(){var t=Math.abs(this.lat0);if(Math.abs(t-HALF_PI)0){var sinphi;this.qp=qsfnz(this.e,1);this.mmf=.5/(1-this.es);this.apa=this.authset(this.es);switch(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);sinphi=Math.sin(this.lat0);this.sinb1=qsfnz(this.e,sinphi)/this.qp;this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1);this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*sinphi*sinphi)*this.rq*this.cosb1);this.ymf=(this.xmf=this.rq)/this.dd;this.xmf*=this.dd;break}}else{if(this.mode===this.OBLIQ){this.sinph0=Math.sin(this.lat0);this.cosph0=Math.cos(this.lat0)}}};exports.forward=function(p){var x,y,coslam,sinlam,sinphi,q,sinb,cosb,b,cosphi;var lam=p.x;var phi=p.y;lam=adjust_lon(lam-this.long0);if(this.sphere){sinphi=Math.sin(phi);cosphi=Math.cos(phi);coslam=Math.cos(lam);if(this.mode===this.OBLIQ||this.mode===this.EQUIT){y=this.mode===this.EQUIT?1+cosphi*coslam:1+this.sinph0*sinphi+this.cosph0*cosphi*coslam;if(y<=EPSLN){return null}y=Math.sqrt(2/y);x=y*cosphi*Math.sin(lam);y*=this.mode===this.EQUIT?sinphi:this.cosph0*sinphi-this.sinph0*cosphi*coslam}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE){coslam=-coslam}if(Math.abs(phi+this.phi0)=0){x=(b=Math.sqrt(q))*sinlam;y=coslam*(this.mode===this.S_POLE?b:-b)}else{x=y=0}break}}p.x=this.a*x+this.x0;p.y=this.a*y+this.y0;return p};exports.inverse=function(p){p.x-=this.x0;p.y-=this.y0;var x=p.x/this.a;var y=p.y/this.a;var lam,phi,cCe,sCe,q,rho,ab;if(this.sphere){var cosz=0,rh,sinz=0;rh=Math.sqrt(x*x+y*y);phi=rh*.5;if(phi>1){return null}phi=2*Math.asin(phi);if(this.mode===this.OBLIQ||this.mode===this.EQUIT){sinz=Math.sin(phi);cosz=Math.cos(phi)}switch(this.mode){case this.EQUIT:phi=Math.abs(rh)<=EPSLN?0:Math.asin(y*sinz/rh);x*=sinz;y=cosz*rh;break;case this.OBLIQ:phi=Math.abs(rh)<=EPSLN?this.phi0:Math.asin(cosz*this.sinph0+y*sinz*this.cosph0/rh);x*=sinz*this.cosph0;y=(cosz-Math.sin(phi)*this.sinph0)*rh;break;case this.N_POLE:y=-y;phi=HALF_PI-phi;break;case this.S_POLE:phi-=HALF_PI;break}lam=y===0&&(this.mode===this.EQUIT||this.mode===this.OBLIQ)?0:Math.atan2(x,y)}else{ab=0;if(this.mode===this.OBLIQ||this.mode===this.EQUIT){x/=this.dd;y*=this.dd;rho=Math.sqrt(x*x+y*y);if(rhoEPSLN){this.ns=Math.log(ms1/ms2)/Math.log(ts1/ts2)}else{this.ns=sin1}if(isNaN(this.ns)){this.ns=sin1}this.f0=ms1/(this.ns*Math.pow(ts1,this.ns));this.rh=this.a*this.f0*Math.pow(ts0,this.ns);if(!this.title){this.title="Lambert Conformal Conic"}};exports.forward=function(p){var lon=p.x;var lat=p.y;if(Math.abs(2*Math.abs(lat)-Math.PI)<=EPSLN){lat=sign(lat)*(HALF_PI-2*EPSLN)}var con=Math.abs(Math.abs(lat)-HALF_PI);var ts,rh1;if(con>EPSLN){ts=tsfnz(this.e,lat,Math.sin(lat));rh1=this.a*this.f0*Math.pow(ts,this.ns)}else{con=lat*this.ns;if(con<=0){return null}rh1=0}var theta=this.ns*adjust_lon(lon-this.long0);p.x=this.k0*(rh1*Math.sin(theta))+this.x0;p.y=this.k0*(this.rh-rh1*Math.cos(theta))+this.y0;return p};exports.inverse=function(p){var rh1,con,ts;var lat,lon;var x=(p.x-this.x0)/this.k0;var y=this.rh-(p.y-this.y0)/this.k0;if(this.ns>0){rh1=Math.sqrt(x*x+y*y);con=1}else{rh1=-Math.sqrt(x*x+y*y);con=-1}var theta=0;if(rh1!==0){theta=Math.atan2(con*x,con*y)}if(rh1!==0||this.ns>0){con=1/this.ns;ts=Math.pow(rh1/(this.a*this.f0),con);lat=phi2z(this.e,ts);if(lat===-9999){return null}}else{lat=-HALF_PI}lon=adjust_lon(theta/this.ns+this.long0);p.x=lon;p.y=lat;return p};exports.names=["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_2SP","lcc"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/msfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/msfnz.js","../common/phi2z":"/data/github/geopackage-node/node_modules/proj4/lib/common/phi2z.js","../common/sign":"/data/github/geopackage-node/node_modules/proj4/lib/common/sign.js","../common/tsfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/tsfnz.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/longlat.js":[function(require,module,exports){exports.init=function(){};function identity(pt){return pt}exports.forward=identity;exports.inverse=identity;exports.names=["longlat","identity"]},{}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/merc.js":[function(require,module,exports){var msfnz=require("../common/msfnz");var HALF_PI=Math.PI/2;var EPSLN=1e-10;var R2D=57.29577951308232;var adjust_lon=require("../common/adjust_lon");var FORTPI=Math.PI/4;var tsfnz=require("../common/tsfnz");var phi2z=require("../common/phi2z");exports.init=function(){var con=this.b/this.a;this.es=1-con*con;if(!("x0"in this)){this.x0=0}if(!("y0"in this)){this.y0=0}this.e=Math.sqrt(this.es);if(this.lat_ts){if(this.sphere){this.k0=Math.cos(this.lat_ts)}else{this.k0=msfnz(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))}}else{if(!this.k0){if(this.k){this.k0=this.k}else{this.k0=1}}}};exports.forward=function(p){var lon=p.x;var lat=p.y;if(lat*R2D>90&&lat*R2D<-90&&lon*R2D>180&&lon*R2D<-180){return null}var x,y;if(Math.abs(Math.abs(lat)-HALF_PI)<=EPSLN){return null}else{if(this.sphere){x=this.x0+this.a*this.k0*adjust_lon(lon-this.long0);y=this.y0+this.a*this.k0*Math.log(Math.tan(FORTPI+.5*lat))}else{var sinphi=Math.sin(lat);var ts=tsfnz(this.e,lat,sinphi);x=this.x0+this.a*this.k0*adjust_lon(lon-this.long0);y=this.y0-this.a*this.k0*Math.log(ts)}p.x=x;p.y=y;return p}};exports.inverse=function(p){var x=p.x-this.x0;var y=p.y-this.y0;var lon,lat;if(this.sphere){lat=HALF_PI-2*Math.atan(Math.exp(-y/(this.a*this.k0)))}else{var ts=Math.exp(-y/(this.a*this.k0));lat=phi2z(this.e,ts);if(lat===-9999){return null}}lon=adjust_lon(this.long0+x/(this.a*this.k0));p.x=lon;p.y=lat;return p};exports.names=["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/msfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/msfnz.js","../common/phi2z":"/data/github/geopackage-node/node_modules/proj4/lib/common/phi2z.js","../common/tsfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/tsfnz.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/mill.js":[function(require,module,exports){var adjust_lon=require("../common/adjust_lon");exports.init=function(){};exports.forward=function(p){var lon=p.x;var lat=p.y;var dlon=adjust_lon(lon-this.long0);var x=this.x0+this.a*dlon;var y=this.y0+this.a*Math.log(Math.tan(Math.PI/4+lat/2.5))*1.25;p.x=x;p.y=y;return p};exports.inverse=function(p){p.x-=this.x0;p.y-=this.y0;var lon=adjust_lon(this.long0+p.x/this.a);var lat=2.5*(Math.atan(Math.exp(.8*p.y/this.a))-Math.PI/4);p.x=lon;p.y=lat;return p};exports.names=["Miller_Cylindrical","mill"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/moll.js":[function(require,module,exports){var adjust_lon=require("../common/adjust_lon");var EPSLN=1e-10;exports.init=function(){};exports.forward=function(p){var lon=p.x;var lat=p.y;var delta_lon=adjust_lon(lon-this.long0);var theta=lat;var con=Math.PI*Math.sin(lat);for(var i=0;true;i++){var delta_theta=-(theta+Math.sin(theta)-con)/(1+Math.cos(theta));theta+=delta_theta;if(Math.abs(delta_theta).999999999999){arg=.999999999999}theta=Math.asin(arg);var lon=adjust_lon(this.long0+p.x/(.900316316158*this.a*Math.cos(theta)));if(lon<-Math.PI){lon=-Math.PI}if(lon>Math.PI){lon=Math.PI}arg=(2*theta+Math.sin(2*theta))/Math.PI;if(Math.abs(arg)>1){arg=1}var lat=Math.asin(arg);p.x=lon;p.y=lat;return p};exports.names=["Mollweide","moll"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/nzmg.js":[function(require,module,exports){var SEC_TO_RAD=484813681109536e-20;exports.iterations=1;exports.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};exports.forward=function(p){var n;var lon=p.x;var lat=p.y;var delta_lat=lat-this.lat0;var delta_lon=lon-this.long0;var d_phi=delta_lat/SEC_TO_RAD*1e-5;var d_lambda=delta_lon;var d_phi_n=1;var d_psi=0;for(n=1;n<=10;n++){d_phi_n=d_phi_n*d_phi;d_psi=d_psi+this.A[n]*d_phi_n}var th_re=d_psi;var th_im=d_lambda;var th_n_re=1;var th_n_im=0;var th_n_re1;var th_n_im1;var z_re=0;var z_im=0;for(n=1;n<=6;n++){th_n_re1=th_n_re*th_re-th_n_im*th_im;th_n_im1=th_n_im*th_re+th_n_re*th_im;th_n_re=th_n_re1;th_n_im=th_n_im1;z_re=z_re+this.B_re[n]*th_n_re-this.B_im[n]*th_n_im;z_im=z_im+this.B_im[n]*th_n_re+this.B_re[n]*th_n_im}p.x=z_im*this.a+this.x0;p.y=z_re*this.a+this.y0;return p};exports.inverse=function(p){var n;var x=p.x;var y=p.y;var delta_x=x-this.x0;var delta_y=y-this.y0;var z_re=delta_y/this.a;var z_im=delta_x/this.a;var z_n_re=1;var z_n_im=0;var z_n_re1;var z_n_im1;var th_re=0;var th_im=0;for(n=1;n<=6;n++){z_n_re1=z_n_re*z_re-z_n_im*z_im;z_n_im1=z_n_im*z_re+z_n_re*z_im;z_n_re=z_n_re1;z_n_im=z_n_im1;th_re=th_re+this.C_re[n]*z_n_re-this.C_im[n]*z_n_im;th_im=th_im+this.C_im[n]*z_n_re+this.C_re[n]*z_n_im}for(var i=0;i=0){fl=dl+Math.sqrt(dl*dl-1)}else{fl=dl-Math.sqrt(dl*dl-1)}this.el=fl*Math.pow(t0,this.bl);gl=.5*(fl-1/fl);this.gamma0=Math.asin(Math.sin(this.alpha)/dl);this.long0=this.longc-Math.asin(gl*Math.tan(this.gamma0))/this.bl}else{var t1=tsfnz(this.e,this.lat1,Math.sin(this.lat1));var t2=tsfnz(this.e,this.lat2,Math.sin(this.lat2));if(this.lat0>=0){this.el=(dl+Math.sqrt(dl*dl-1))*Math.pow(t0,this.bl)}else{this.el=(dl-Math.sqrt(dl*dl-1))*Math.pow(t0,this.bl)}var hl=Math.pow(t1,this.bl);var ll=Math.pow(t2,this.bl);fl=this.el/hl;gl=.5*(fl-1/fl);var jl=(this.el*this.el-ll*hl)/(this.el*this.el+ll*hl);var pl=(ll-hl)/(ll+hl);var dlon12=adjust_lon(this.long1-this.long2);this.long0=.5*(this.long1+this.long2)-Math.atan(jl*Math.tan(.5*this.bl*dlon12)/pl)/this.bl;this.long0=adjust_lon(this.long0);var dlon10=adjust_lon(this.long1-this.long0);this.gamma0=Math.atan(Math.sin(this.bl*dlon10)/gl);this.alpha=Math.asin(dl*Math.sin(this.gamma0))}if(this.no_off){this.uc=0}else{if(this.lat0>=0){this.uc=this.al/this.bl*Math.atan2(Math.sqrt(dl*dl-1),Math.cos(this.alpha))}else{this.uc=-1*this.al/this.bl*Math.atan2(Math.sqrt(dl*dl-1),Math.cos(this.alpha))}}};exports.forward=function(p){var lon=p.x;var lat=p.y;var dlon=adjust_lon(lon-this.long0);var us,vs;var con;if(Math.abs(Math.abs(lat)-HALF_PI)<=EPSLN){if(lat>0){con=-1}else{con=1}vs=this.al/this.bl*Math.log(Math.tan(FORTPI+con*this.gamma0*.5));us=-1*con*HALF_PI*this.al/this.bl}else{var t=tsfnz(this.e,lat,Math.sin(lat));var ql=this.el/Math.pow(t,this.bl);var sl=.5*(ql-1/ql);var tl=.5*(ql+1/ql);var vl=Math.sin(this.bl*dlon);var ul=(sl*Math.sin(this.gamma0)-vl*Math.cos(this.gamma0))/tl;if(Math.abs(Math.abs(ul)-1)<=EPSLN){vs=Number.POSITIVE_INFINITY}else{vs=.5*this.al*Math.log((1-ul)/(1+ul))/this.bl}if(Math.abs(Math.cos(this.bl*dlon))<=EPSLN){us=this.al*this.bl*dlon}else{us=this.al*Math.atan2(sl*Math.cos(this.gamma0)+vl*Math.sin(this.gamma0),Math.cos(this.bl*dlon))/this.bl}}if(this.no_rot){p.x=this.x0+us;p.y=this.y0+vs}else{us-=this.uc;p.x=this.x0+vs*Math.cos(this.alpha)+us*Math.sin(this.alpha);p.y=this.y0+us*Math.cos(this.alpha)-vs*Math.sin(this.alpha)}return p};exports.inverse=function(p){var us,vs;if(this.no_rot){vs=p.y-this.y0;us=p.x-this.x0}else{vs=(p.x-this.x0)*Math.cos(this.alpha)-(p.y-this.y0)*Math.sin(this.alpha);us=(p.y-this.y0)*Math.cos(this.alpha)+(p.x-this.x0)*Math.sin(this.alpha);us+=this.uc}var qp=Math.exp(-1*this.bl*vs/this.al);var sp=.5*(qp-1/qp);var tp=.5*(qp+1/qp);var vp=Math.sin(this.bl*us/this.al);var up=(vp*Math.cos(this.gamma0)+sp*Math.sin(this.gamma0))/tp;var ts=Math.pow(this.el/Math.sqrt((1+up)/(1-up)),1/this.bl);if(Math.abs(up-1)1e-7){if(++iteration>20){return}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));prevPhy=phy;phy=2*Math.atan(Math.exp(S))-Math.PI/2}p.x=lambda;p.y=phy;return p};exports.names=["somerc"]},{}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/stere.js":[function(require,module,exports){var HALF_PI=Math.PI/2;var EPSLN=1e-10;var sign=require("../common/sign");var msfnz=require("../common/msfnz");var tsfnz=require("../common/tsfnz");var phi2z=require("../common/phi2z");var adjust_lon=require("../common/adjust_lon");exports.ssfn_=function(phit,sinphi,eccen){sinphi*=eccen;return Math.tan(.5*(HALF_PI+phit))*Math.pow((1-sinphi)/(1+sinphi),.5*eccen)};exports.init=function(){this.coslat0=Math.cos(this.lat0);this.sinlat0=Math.sin(this.lat0);if(this.sphere){if(this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=EPSLN){this.k0=.5*(1+sign(this.lat0)*Math.sin(this.lat_ts))}}else{if(Math.abs(this.coslat0)<=EPSLN){if(this.lat0>0){this.con=1}else{this.con=-1}}this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e));if(this.k0===1&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=EPSLN){this.k0=.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))}this.ms1=msfnz(this.e,this.sinlat0,this.coslat0);this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-HALF_PI;this.cosX0=Math.cos(this.X0);this.sinX0=Math.sin(this.X0)}};exports.forward=function(p){var lon=p.x;var lat=p.y;var sinlat=Math.sin(lat);var coslat=Math.cos(lat);var A,X,sinX,cosX,ts,rh;var dlon=adjust_lon(lon-this.long0);if(Math.abs(Math.abs(lon-this.long0)-Math.PI)<=EPSLN&&Math.abs(lat+this.lat0)<=EPSLN){p.x=NaN;p.y=NaN;return p}if(this.sphere){A=2*this.k0/(1+this.sinlat0*sinlat+this.coslat0*coslat*Math.cos(dlon));p.x=this.a*A*coslat*Math.sin(dlon)+this.x0;p.y=this.a*A*(this.coslat0*sinlat-this.sinlat0*coslat*Math.cos(dlon))+this.y0;return p}else{X=2*Math.atan(this.ssfn_(lat,sinlat,this.e))-HALF_PI;cosX=Math.cos(X);sinX=Math.sin(X);if(Math.abs(this.coslat0)<=EPSLN){ts=tsfnz(this.e,lat*this.con,this.con*sinlat);rh=2*this.a*this.k0*ts/this.cons;p.x=this.x0+rh*Math.sin(lon-this.long0);p.y=this.y0-this.con*rh*Math.cos(lon-this.long0);return p}else if(Math.abs(this.sinlat0)0){lon=adjust_lon(this.long0+Math.atan2(p.x,-1*p.y))}else{lon=adjust_lon(this.long0+Math.atan2(p.x,p.y))}}else{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)))}p.x=lon;p.y=lat;return p}else{if(Math.abs(this.coslat0)<=EPSLN){if(rh<=EPSLN){lat=this.lat0;lon=this.long0;p.x=lon;p.y=lat;return p}p.x*=this.con;p.y*=this.con;ts=rh*this.cons/(2*this.a*this.k0);lat=this.con*phi2z(this.e,ts);lon=this.con*adjust_lon(this.con*this.long0+Math.atan2(p.x,-1*p.y))}else{ce=2*Math.atan(rh*this.cosX0/(2*this.a*this.k0*this.ms1));lon=this.long0;if(rh<=EPSLN){Chi=this.X0}else{Chi=Math.asin(Math.cos(ce)*this.sinX0+p.y*Math.sin(ce)*this.cosX0/rh);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)))}lat=-1*phi2z(this.e,Math.tan(.5*(HALF_PI+Chi)))}}p.x=lon;p.y=lat;return p};exports.names=["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","../common/msfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/msfnz.js","../common/phi2z":"/data/github/geopackage-node/node_modules/proj4/lib/common/phi2z.js","../common/sign":"/data/github/geopackage-node/node_modules/proj4/lib/common/sign.js","../common/tsfnz":"/data/github/geopackage-node/node_modules/proj4/lib/common/tsfnz.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/sterea.js":[function(require,module,exports){var gauss=require("./gauss");var adjust_lon=require("../common/adjust_lon");exports.init=function(){gauss.init.apply(this);if(!this.rc){return}this.sinc0=Math.sin(this.phic0);this.cosc0=Math.cos(this.phic0);this.R2=2*this.rc;if(!this.title){this.title="Oblique Stereographic Alternative"}};exports.forward=function(p){var sinc,cosc,cosl,k;p.x=adjust_lon(p.x-this.long0);gauss.forward.apply(this,[p]);sinc=Math.sin(p.y);cosc=Math.cos(p.y);cosl=Math.cos(p.x);k=this.k0*this.R2/(1+this.sinc0*sinc+this.cosc0*cosc*cosl);p.x=k*cosc*Math.sin(p.x);p.y=k*(this.cosc0*sinc-this.sinc0*cosc*cosl);p.x=this.a*p.x+this.x0;p.y=this.a*p.y+this.y0;return p};exports.inverse=function(p){var sinc,cosc,lon,lat,rho;p.x=(p.x-this.x0)/this.a;p.y=(p.y-this.y0)/this.a;p.x/=this.k0;p.y/=this.k0;if(rho=Math.sqrt(p.x*p.x+p.y*p.y)){var c=2*Math.atan2(rho,this.R2);sinc=Math.sin(c);cosc=Math.cos(c);lat=Math.asin(cosc*this.sinc0+p.y*sinc*this.cosc0/rho);lon=Math.atan2(p.x*sinc,rho*this.cosc0*cosc-p.y*this.sinc0*sinc)}else{lat=this.phic0;lon=0}p.x=lon;p.y=lat;gauss.inverse.apply(this,[p]);p.x=adjust_lon(p.x+this.long0);return p};exports.names=["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative"]},{"../common/adjust_lon":"/data/github/geopackage-node/node_modules/proj4/lib/common/adjust_lon.js","./gauss":"/data/github/geopackage-node/node_modules/proj4/lib/projections/gauss.js"}],"/data/github/geopackage-node/node_modules/proj4/lib/projections/tmerc.js":[function(require,module,exports){var e0fn=require("../common/e0fn");var e1fn=require("../common/e1fn");var e2fn=require("../common/e2fn");var e3fn=require("../common/e3fn");var mlfn=require("../common/mlfn");var adjust_lon=require("../common/adjust_lon");var HALF_PI=Math.PI/2;var EPSLN=1e-10;var sign=require("../common/sign");var asinz=require("../common/asinz");exports.init=function(){this.e0=e0fn(this.es);this.e1=e1fn(this.es);this.e2=e2fn(this.es);this.e3=e3fn(this.es);this.ml0=this.a*mlfn(this.e0,this.e1,this.e2,this.e3,this.lat0)};exports.forward=function(p){var lon=p.x;var lat=p.y;var delta_lon=adjust_lon(lon-this.long0);var con;var x,y;var sin_phi=Math.sin(lat);var cos_phi=Math.cos(lat);if(this.sphere){var b=cos_phi*Math.sin(delta_lon);if(Math.abs(Math.abs(b)-1)<1e-10){return 93}else{x=.5*this.a*this.k0*Math.log((1+b)/(1-b));con=Math.acos(cos_phi*Math.cos(delta_lon)/Math.sqrt(1-b*b));if(lat<0){con=-con}y=this.a*this.k0*(con-this.lat0)}}else{var al=cos_phi*delta_lon;var als=Math.pow(al,2);var c=this.ep2*Math.pow(cos_phi,2);var tq=Math.tan(lat);var t=Math.pow(tq,2);con=1-this.es*Math.pow(sin_phi,2);var n=this.a/Math.sqrt(con);var ml=this.a*mlfn(this.e0,this.e1,this.e2,this.e3,lat);x=this.k0*n*al*(1+als/6*(1-t+c+als/20*(5-18*t+Math.pow(t,2)+72*c-58*this.ep2)))+this.x0;y=this.k0*(ml-this.ml0+n*tq*(als*(.5+als/24*(5-t+9*c+4*Math.pow(c,2)+als/30*(61-58*t+Math.pow(t,2)+600*c-330*this.ep2)))))+this.y0}p.x=x;p.y=y;return p};exports.inverse=function(p){var con,phi;var delta_phi;var i;var max_iter=6;var lat,lon;if(this.sphere){var f=Math.exp(p.x/(this.a*this.k0));var g=.5*(f-1/f);var temp=this.lat0+p.y/(this.a*this.k0);var h=Math.cos(temp);con=Math.sqrt((1-h*h)/(1+g*g));lat=asinz(con);if(temp<0){lat=-lat}if(g===0&&h===0){lon=this.long0}else{lon=adjust_lon(Math.atan2(g,h)+this.long0)}}else{var x=p.x-this.x0;var y=p.y-this.y0;con=(this.ml0+y/this.k0)/this.a;phi=con;for(i=0;true;i++){delta_phi=(con+this.e1*Math.sin(2*phi)-this.e2*Math.sin(4*phi)+this.e3*Math.sin(6*phi))/this.e0-phi;phi+=delta_phi;if(Math.abs(delta_phi)<=EPSLN){break}if(i>=max_iter){return 95}}if(Math.abs(phi)=0){y=this.y0+Math.PI*this.R*Math.tan(.5*theta)}else{y=this.y0+Math.PI*this.R*-Math.tan(.5*theta)}}var al=.5*Math.abs(Math.PI/dlon-dlon/Math.PI);var asq=al*al;var sinth=Math.sin(theta);var costh=Math.cos(theta);var g=costh/(sinth+costh-1);var gsq=g*g;var m=g*(2/sinth-1);var msq=m*m;var con=Math.PI*this.R*(al*(g-msq)+Math.sqrt(asq*(g-msq)*(g-msq)-(msq+asq)*(gsq-msq)))/(msq+asq);if(dlon<0){con=-con}x=this.x0+con;var q=asq+g;con=Math.PI*this.R*(m*q-al*Math.sqrt((msq+asq)*(asq+1)-q*q))/(msq+asq);if(lat>=0){y=this.y0+con}else{y=this.y0-con}p.x=x;p.y=y;return p};exports.inverse=function(p){var lon,lat;var xx,yy,xys,c1,c2,c3;var a1;var m1;var con;var th1;var d;p.x-=this.x0;p.y-=this.y0;con=Math.PI*this.R;xx=p.x/con;yy=p.y/con;xys=xx*xx+yy*yy;c1=-Math.abs(yy)*(1+xys);c2=c1-2*yy*yy+xx*xx;c3=-2*c1+1+2*yy*yy+xys*xys;d=yy*yy/c3+(2*c2*c2*c2/c3/c3/c3-9*c1*c2/c3/c3)/27;a1=(c1-c2*c2/3/c3)/c3;m1=2*Math.sqrt(-a1/3);con=3*d/a1/m1;if(Math.abs(con)>1){if(con>=0){con=1}else{con=-1}}th1=Math.acos(con)/3;if(p.y>=0){lat=(-m1*Math.cos(th1+Math.PI/3)-c2/3/c3)*Math.PI}else{lat=-(-m1*Math.cos(th1+Math.PI/3)-c2/3/c3)*Math.PI}if(Math.abs(xx)-1){obj[key]={name:v[0].toLowerCase(),convert:v[1]};if(v.length===3){obj[key].auth=v[2]}}else if(key==="SPHEROID"){obj[key]={name:v[0],a:v[1],rf:v[2]};if(v.length===4){obj[key].auth=v[3]}}else if(["GEOGCS","GEOCCS","DATUM","VERT_CS","COMPD_CS","LOCAL_CS","FITTED_CS","LOCAL_DATUM"].indexOf(key)>-1){v[0]=["name",v[0]];mapit(obj,key,v)}else if(v.every(function(aa){return Array.isArray(aa)})){mapit(obj,key,v)}else{sExpr(v,obj[key])}}}}function rename(obj,params){var outName=params[0];var inName=params[1];if(!(outName in obj)&&inName in obj){obj[outName]=obj[inName];if(params.length===3){obj[outName]=params[2](obj[outName])}}}function d2r(input){return input*D2R}function cleanWKT(wkt){if(wkt.type==="GEOGCS"){wkt.projName="longlat"}else if(wkt.type==="LOCAL_CS"){wkt.projName="identity";wkt.local=true}else{if(typeof wkt.PROJECTION==="object"){wkt.projName=Object.keys(wkt.PROJECTION)[0]}else{wkt.projName=wkt.PROJECTION}}if(wkt.UNIT){wkt.units=wkt.UNIT.name.toLowerCase();if(wkt.units==="metre"){wkt.units="meter"}if(wkt.UNIT.convert){if(wkt.type==="GEOGCS"){if(wkt.DATUM&&wkt.DATUM.SPHEROID){wkt.to_meter=parseFloat(wkt.UNIT.convert,10)*wkt.DATUM.SPHEROID.a}}else{wkt.to_meter=parseFloat(wkt.UNIT.convert,10)}}}if(wkt.GEOGCS){if(wkt.GEOGCS.DATUM){wkt.datumCode=wkt.GEOGCS.DATUM.name.toLowerCase()}else{wkt.datumCode=wkt.GEOGCS.name.toLowerCase()}if(wkt.datumCode.slice(0,2)==="d_"){wkt.datumCode=wkt.datumCode.slice(2)}if(wkt.datumCode==="new_zealand_geodetic_datum_1949"||wkt.datumCode==="new_zealand_1949"){wkt.datumCode="nzgd49"}if(wkt.datumCode==="wgs_1984"){if(wkt.PROJECTION==="Mercator_Auxiliary_Sphere"){wkt.sphere=true}wkt.datumCode="wgs84"}if(wkt.datumCode.slice(-6)==="_ferro"){wkt.datumCode=wkt.datumCode.slice(0,-6)}if(wkt.datumCode.slice(-8)==="_jakarta"){wkt.datumCode=wkt.datumCode.slice(0,-8)}if(~wkt.datumCode.indexOf("belge")){wkt.datumCode="rnb72"}if(wkt.GEOGCS.DATUM&&wkt.GEOGCS.DATUM.SPHEROID){wkt.ellps=wkt.GEOGCS.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk");if(wkt.ellps.toLowerCase().slice(0,13)==="international"){wkt.ellps="intl"}wkt.a=wkt.GEOGCS.DATUM.SPHEROID.a;wkt.rf=parseFloat(wkt.GEOGCS.DATUM.SPHEROID.rf,10)}if(~wkt.datumCode.indexOf("osgb_1936")){wkt.datumCode="osgb36"}}if(wkt.b&&!isFinite(wkt.b)){wkt.b=wkt.a}function toMeter(input){var ratio=wkt.to_meter||1;return parseFloat(input,10)*ratio}var renamer=function(a){return rename(wkt,a)};var list=[["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",d2r],["longitude_of_center","Longitude_Of_Center"],["longc","longitude_of_center",d2r],["x0","false_easting",toMeter],["y0","false_northing",toMeter],["long0","central_meridian",d2r],["lat0","latitude_of_origin",d2r],["lat0","standard_parallel_1",d2r],["lat1","standard_parallel_1",d2r],["lat2","standard_parallel_2",d2r],["alpha","azimuth",d2r],["srsCode","name"]];list.forEach(renamer);if(!wkt.long0&&wkt.longc&&(wkt.projName==="Albers_Conic_Equal_Area"||wkt.projName==="Lambert_Azimuthal_Equal_Area")){wkt.long0=wkt.longc}if(!wkt.lat_ts&&wkt.lat1&&(wkt.projName==="Stereographic_South_Pole"||wkt.projName==="Polar Stereographic (variant B)")){wkt.lat0=d2r(wkt.lat1>0?90:-90);wkt.lat_ts=wkt.lat1}}module.exports=function(wkt,self){var lisp=JSON.parse((","+wkt).replace(/\s*\,\s*([A-Z_0-9]+?)(\[)/g,',["$1",').slice(1).replace(/\s*\,\s*([A-Z_0-9]+?)\]/g,',"$1"]').replace(/,\["VERTCS".+/,""));var type=lisp.shift();var name=lisp.shift();lisp.unshift(["name",name]);lisp.unshift(["type",type]);lisp.unshift("output");var obj={};sExpr(lisp,obj);cleanWKT(obj.output);return extend(self,obj.output)}},{"./extend":"/data/github/geopackage-node/node_modules/proj4/lib/extend.js"}],"/data/github/geopackage-node/node_modules/proj4/node_modules/mgrs/mgrs.js":[function(require,module,exports){var NUM_100K_SETS=6;var SET_ORIGIN_COLUMN_LETTERS="AJSAJS";var SET_ORIGIN_ROW_LETTERS="AFAFAF";var A=65;var I=73;var O=79;var V=86;var Z=90;exports.forward=function(ll,accuracy){accuracy=accuracy||5;return encode(LLtoUTM({lat:ll[1],lon:ll[0]}),accuracy)};exports.inverse=function(mgrs){var bbox=UTMtoLL(decode(mgrs.toUpperCase()));if(bbox.lat&&bbox.lon){return[bbox.lon,bbox.lat,bbox.lon,bbox.lat]}return[bbox.left,bbox.bottom,bbox.right,bbox.top]};exports.toPoint=function(mgrs){var bbox=UTMtoLL(decode(mgrs.toUpperCase()));if(bbox.lat&&bbox.lon){return[bbox.lon,bbox.lat]}return[(bbox.left+bbox.right)/2,(bbox.top+bbox.bottom)/2]};function degToRad(deg){return deg*(Math.PI/180)}function radToDeg(rad){return 180*(rad/Math.PI)}function LLtoUTM(ll){var Lat=ll.lat;var Long=ll.lon;var a=6378137;var eccSquared=.00669438;var k0=.9996;var LongOrigin;var eccPrimeSquared;var N,T,C,A,M;var LatRad=degToRad(Lat);var LongRad=degToRad(Long);var LongOriginRad;var ZoneNumber;ZoneNumber=Math.floor((Long+180)/6)+1;if(Long===180){ZoneNumber=60}if(Lat>=56&&Lat<64&&Long>=3&&Long<12){ZoneNumber=32}if(Lat>=72&&Lat<84){if(Long>=0&&Long<9){ZoneNumber=31}else if(Long>=9&&Long<21){ZoneNumber=33}else if(Long>=21&&Long<33){ZoneNumber=35}else if(Long>=33&&Long<42){ZoneNumber=37}}LongOrigin=(ZoneNumber-1)*6-180+3;LongOriginRad=degToRad(LongOrigin);eccPrimeSquared=eccSquared/(1-eccSquared);N=a/Math.sqrt(1-eccSquared*Math.sin(LatRad)*Math.sin(LatRad));T=Math.tan(LatRad)*Math.tan(LatRad);C=eccPrimeSquared*Math.cos(LatRad)*Math.cos(LatRad);A=Math.cos(LatRad)*(LongRad-LongOriginRad);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));var UTMEasting=k0*N*(A+(1-T+C)*A*A*A/6+(5-18*T+T*T+72*C-58*eccPrimeSquared)*A*A*A*A*A/120)+5e5;var UTMNorthing=k0*(M+N*Math.tan(LatRad)*(A*A/2+(5-T+9*C+4*C*C)*A*A*A*A/24+(61-58*T+T*T+600*C-330*eccPrimeSquared)*A*A*A*A*A*A/720));if(Lat<0){UTMNorthing+=1e7}return{northing:Math.round(UTMNorthing),easting:Math.round(UTMEasting),zoneNumber:ZoneNumber,zoneLetter:getLetterDesignator(Lat)}}function UTMtoLL(utm){var UTMNorthing=utm.northing;var UTMEasting=utm.easting;var zoneLetter=utm.zoneLetter;var zoneNumber=utm.zoneNumber;if(zoneNumber<0||zoneNumber>60){return null}var k0=.9996;var a=6378137;var eccSquared=.00669438;var eccPrimeSquared;var e1=(1-Math.sqrt(1-eccSquared))/(1+Math.sqrt(1-eccSquared));var N1,T1,C1,R1,D,M;var LongOrigin;var mu,phi1Rad;var x=UTMEasting-5e5;var y=UTMNorthing;if(zoneLetter<"N"){y-=1e7}LongOrigin=(zoneNumber-1)*6-180+3;eccPrimeSquared=eccSquared/(1-eccSquared);M=y/k0;mu=M/(a*(1-eccSquared/4-3*eccSquared*eccSquared/64-5*eccSquared*eccSquared*eccSquared/256));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);N1=a/Math.sqrt(1-eccSquared*Math.sin(phi1Rad)*Math.sin(phi1Rad));T1=Math.tan(phi1Rad)*Math.tan(phi1Rad);C1=eccPrimeSquared*Math.cos(phi1Rad)*Math.cos(phi1Rad);R1=a*(1-eccSquared)/Math.pow(1-eccSquared*Math.sin(phi1Rad)*Math.sin(phi1Rad),1.5);D=x/(N1*k0);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);lat=radToDeg(lat);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);lon=LongOrigin+radToDeg(lon);var result;if(utm.accuracy){var topRight=UTMtoLL({northing:utm.northing+utm.accuracy,easting:utm.easting+utm.accuracy,zoneLetter:utm.zoneLetter,zoneNumber:utm.zoneNumber});result={top:topRight.lat,right:topRight.lon,bottom:lat,left:lon}}else{result={lat:lat,lon:lon}}return result}function getLetterDesignator(lat){var LetterDesignator="Z";if(84>=lat&&lat>=72){LetterDesignator="X"}else if(72>lat&&lat>=64){LetterDesignator="W"}else if(64>lat&&lat>=56){LetterDesignator="V"}else if(56>lat&&lat>=48){LetterDesignator="U"}else if(48>lat&&lat>=40){LetterDesignator="T"}else if(40>lat&&lat>=32){LetterDesignator="S"}else if(32>lat&&lat>=24){LetterDesignator="R"}else if(24>lat&&lat>=16){LetterDesignator="Q"}else if(16>lat&&lat>=8){LetterDesignator="P"}else if(8>lat&&lat>=0){LetterDesignator="N"}else if(0>lat&&lat>=-8){LetterDesignator="M"}else if(-8>lat&&lat>=-16){LetterDesignator="L"}else if(-16>lat&&lat>=-24){LetterDesignator="K"}else if(-24>lat&&lat>=-32){LetterDesignator="J"}else if(-32>lat&&lat>=-40){LetterDesignator="H"}else if(-40>lat&&lat>=-48){LetterDesignator="G"}else if(-48>lat&&lat>=-56){LetterDesignator="F"}else if(-56>lat&&lat>=-64){LetterDesignator="E"}else if(-64>lat&&lat>=-72){LetterDesignator="D"}else if(-72>lat&&lat>=-80){LetterDesignator="C"}return LetterDesignator}function encode(utm,accuracy){var seasting="00000"+utm.easting,snorthing="00000"+utm.northing;return utm.zoneNumber+utm.zoneLetter+get100kID(utm.easting,utm.northing,utm.zoneNumber)+seasting.substr(seasting.length-5,accuracy)+snorthing.substr(snorthing.length-5,accuracy)}function get100kID(easting,northing,zoneNumber){var setParm=get100kSetForZone(zoneNumber);var setColumn=Math.floor(easting/1e5);var setRow=Math.floor(northing/1e5)%20;return getLetter100kID(setColumn,setRow,setParm)}function get100kSetForZone(i){var setParm=i%NUM_100K_SETS;if(setParm===0){setParm=NUM_100K_SETS}return setParm}function getLetter100kID(column,row,parm){var index=parm-1;var colOrigin=SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);var rowOrigin=SET_ORIGIN_ROW_LETTERS.charCodeAt(index);var colInt=colOrigin+column-1;var rowInt=rowOrigin+row;var rollover=false;if(colInt>Z){colInt=colInt-Z+A-1;rollover=true}if(colInt===I||colOriginI||(colInt>I||colOriginO||(colInt>O||colOriginZ){colInt=colInt-Z+A-1}if(rowInt>V){rowInt=rowInt-V+A-1;rollover=true}else{rollover=false}if(rowInt===I||rowOriginI||(rowInt>I||rowOriginO||(rowInt>O||rowOriginV){rowInt=rowInt-V+A-1}var twoLetter=String.fromCharCode(colInt)+String.fromCharCode(rowInt);return twoLetter}function decode(mgrsString){if(mgrsString&&mgrsString.length===0){throw"MGRSPoint coverting from nothing"}var length=mgrsString.length;var hunK=null;var sb="";var testChar;var i=0;while(!/[A-Z]/.test(testChar=mgrsString.charAt(i))){if(i>=2){throw"MGRSPoint bad conversion from: "+mgrsString}sb+=testChar;i++}var zoneNumber=parseInt(sb,10);if(i===0||i+3>length){throw"MGRSPoint bad conversion from: "+mgrsString}var zoneLetter=mgrsString.charAt(i++);if(zoneLetter<="A"||zoneLetter==="B"||zoneLetter==="Y"||zoneLetter>="Z"||zoneLetter==="I"||zoneLetter==="O"){throw"MGRSPoint zone letter "+zoneLetter+" not handled: "+mgrsString}hunK=mgrsString.substring(i,i+=2);var set=get100kSetForZone(zoneNumber);var east100k=getEastingFromChar(hunK.charAt(0),set);var north100k=getNorthingFromChar(hunK.charAt(1),set);while(north100k0){accuracyBonus=1e5/Math.pow(10,sep);sepEastingString=mgrsString.substring(i,i+sep);sepEasting=parseFloat(sepEastingString)*accuracyBonus;sepNorthingString=mgrsString.substring(i+sep);sepNorthing=parseFloat(sepNorthingString)*accuracyBonus}easting=sepEasting+east100k;northing=sepNorthing+north100k;return{easting:easting,northing:northing,zoneLetter:zoneLetter,zoneNumber:zoneNumber,accuracy:accuracyBonus}}function getEastingFromChar(e,set){var curCol=SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set-1);var eastingValue=1e5;var rewindMarker=false;while(curCol!==e.charCodeAt(0)){curCol++;if(curCol===I){curCol++}if(curCol===O){curCol++}if(curCol>Z){if(rewindMarker){throw"Bad character: "+e}curCol=A;rewindMarker=true}eastingValue+=1e5}return eastingValue}function getNorthingFromChar(n,set){if(n>"V"){throw"MGRSPoint given invalid Northing "+n}var curRow=SET_ORIGIN_ROW_LETTERS.charCodeAt(set-1);var northingValue=0;var rewindMarker=false;while(curRow!==n.charCodeAt(0)){curRow++;if(curRow===I){curRow++}if(curRow===O){curRow++}if(curRow>V){if(rewindMarker){throw"Bad character: "+n}curRow=A;rewindMarker=true}northingValue+=1e5}return northingValue}function getMinNorthing(zoneLetter){var northing;switch(zoneLetter){case"C":northing=11e5;break;case"D":northing=2e6;break;case"E":northing=28e5;break;case"F":northing=37e5; +break;case"G":northing=46e5;break;case"H":northing=55e5;break;case"J":northing=64e5;break;case"K":northing=73e5;break;case"L":northing=82e5;break;case"M":northing=91e5;break;case"N":northing=0;break;case"P":northing=8e5;break;case"Q":northing=17e5;break;case"R":northing=26e5;break;case"S":northing=35e5;break;case"T":northing=44e5;break;case"U":northing=53e5;break;case"V":northing=62e5;break;case"W":northing=7e6;break;case"X":northing=79e5;break;default:northing=-1}if(northing>=0){return northing}else{throw"Invalid zone letter: "+zoneLetter}}},{}],"/data/github/geopackage-node/node_modules/proj4/package.json":[function(require,module,exports){module.exports={name:"proj4",version:"2.3.14",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:"~12.0.1","grunt-browserify":"~4.0.1","grunt-contrib-uglify":"~0.11.1",curl:"git://github.com/cujojs/curl.git",istanbul:"~0.2.4",tin:"~0.4.0"},dependencies:{mgrs:"~0.0.2"},contributors:[{name:"Mike Adair",email:"madair@dmsolutions.ca"},{name:"Richard Greenwood",email:"rich@greenwoodmap.com"},{name:"Calvin Metcalf",email:"calvin.metcalf@gmail.com"},{name:"Richard Marsden",url:"http://www.winwaed.com"},{name:"T. Mittan"},{name:"D. Steinwand"},{name:"S. Nelson"}],gitHead:"7619c8a63df1eae5bad0b9ad31ca1d87b0549243",bugs:{url:"https://github.com/proj4js/proj4js/issues"},homepage:"https://github.com/proj4js/proj4js#readme",_id:"proj4@2.3.14",_shasum:"928906144388980c914c5a357fc493aba59a747a",_from:"proj4@>=2.3.14 <3.0.0",_npmVersion:"2.14.12",_nodeVersion:"4.2.6",_npmUser:{name:"ahocevar",email:"andreas.hocevar@gmail.com"},dist:{shasum:"928906144388980c914c5a357fc493aba59a747a",tarball:"https://registry.npmjs.org/proj4/-/proj4-2.3.14.tgz"},maintainers:[{name:"cwmma",email:"calvin.metcalf@gmail.com"},{name:"ahocevar",email:"andreas.hocevar@gmail.com"}],_npmOperationalInternal:{host:"packages-13-west.internal.npmjs.com",tmp:"tmp/proj4-2.3.14.tgz_1457689264880_0.9409773757215589"},_resolved:"https://registry.npmjs.org/proj4/-/proj4-2.3.14.tgz",readme:"ERROR: No README data found!"}},{}],"/data/github/geopackage-node/node_modules/reproject/index.js":[function(require,module,exports){"use strict";var proj4=require("proj4");function isXY(list){return list.length>=2&&typeof list[0]==="number"&&typeof list[1]==="number"}function traverseCoords(coordinates,callback){if(isXY(coordinates))return callback(coordinates);return coordinates.map(function(coord){return traverseCoords(coord,callback)})}function clone(obj){if(null==obj||"object"!==typeof obj)return obj;var copy=obj.constructor();for(var attr in obj){if(obj.hasOwnProperty(attr))copy[attr]=obj[attr]}return copy}function traverseGeoJson(geojson,leafCallback,nodeCallback){if(geojson==null)return geojson;var r=clone(geojson);if(geojson.type==="Feature"){r.geometry=traverseGeoJson(geojson.geometry,leafCallback,nodeCallback)}else if(geojson.type==="FeatureCollection"){r.features=r.features.map(function(gj){return traverseGeoJson(gj,leafCallback,nodeCallback)})}else if(geojson.type==="GeometryCollection"){r.geometries=r.geometries.map(function(gj){return traverseGeoJson(gj,leafCallback,nodeCallback)})}else{if(leafCallback)leafCallback(r)}if(nodeCallback)nodeCallback(r);return r}function detectCrs(geojson,projs){var crsInfo=geojson.crs,crs;if(crsInfo===undefined){throw new Error('Unable to detect CRS, GeoJSON has no "crs" property.')}if(crsInfo.type==="name"){crs=projs[crsInfo.properties.name]}else if(crsInfo.type==="EPSG"){crs=projs["EPSG:"+crsInfo.properties.code]}if(!crs){throw new Error("CRS defined in crs section could not be identified: "+JSON.stringify(crsInfo))}return crs}function determineCrs(crs,projs){if(typeof crs==="string"||crs instanceof String){return projs[crs]||proj4.Proj(crs)}return crs}function reproject(geojson,from,to,projs){projs=projs||{};if(!from){from=detectCrs(geojson,projs)}else{from=determineCrs(from,projs)}to=determineCrs(to,projs);var transform=proj4(from,to);return traverseGeoJson(geojson,function(gj){if(gj.crs){delete gj.crs}gj.coordinates=traverseCoords(gj.coordinates,function(xy){return transform.forward(xy)})},function(gj){if(gj.bbox){gj.bbox=function(){var min=[Number.MAX_VALUE,Number.MAX_VALUE],max=[-Number.MAX_VALUE,-Number.MAX_VALUE];traverseGeoJson(gj,function(_gj){traverseCoords(_gj.coordinates,function(xy){min[0]=Math.min(min[0],xy[0]);min[1]=Math.min(min[1],xy[1]);max[0]=Math.max(max[0],xy[0]);max[1]=Math.max(max[1],xy[1])})});return[min[0],min[1],max[0],max[1]]}()}})}module.exports={detectCrs:detectCrs,reproject:reproject,reverse:function(geojson){return traverseGeoJson(geojson,function(gj){gj.coordinates=traverseCoords(gj.coordinates,function(xy){return[xy[1],xy[0]]})})},toWgs84:function(geojson,from,projs){return reproject(geojson,from,proj4.WGS84,projs)}}},{proj4:"/data/github/geopackage-node/node_modules/proj4/lib/index.js"}],"/data/github/geopackage-node/node_modules/sql.js/js/sql.js":[function(require,module,exports){(function(process,Buffer,__dirname){var SQL=function(){var f;f||(f=eval("(function() { try { return Module || {} } catch(e) { return {} } })()"));var aa={},ba;for(ba in f)f.hasOwnProperty(ba)&&(aa[ba]=f[ba]);var ca="object"===typeof window,da="function"===typeof importScripts,ea="object"===typeof process&&"function"===typeof require&&!ca&&!da,fa=!ca&&!ea&&!da;if(ea){f.print||(f.print=function(a){process.stdout.write(a+"\n")});f.printErr||(f.printErr=function(a){process.stderr.write(a+"\n")});var ga=require("fs"),ia=require("path");f.read=function(a,b){a=ia.normalize(a);var c=ga.readFileSync(a);c||a==ia.resolve(a)||(a=path.join(__dirname,"..","src",a),c=ga.readFileSync(a));c&&!b&&(c=c.toString());return c};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};f.load=function(a){ja(read(a))};f.thisProgram||(f.thisProgram=1 0) var gc = undefined");else if(ca||da)f.read=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},"undefined"!=typeof arguments&&(f.arguments=arguments),"undefined"!==typeof console?(f.print||(f.print=function(a){console.log(a)}),f.printErr||(f.printErr=function(a){console.log(a)})):f.print||(f.print=function(){}),da&&(f.load=importScripts),"undefined"===typeof f.setWindowTitle&&(f.setWindowTitle=function(a){document.title=a});else throw"Unknown runtime environment. Where are we?";function ja(a){eval.call(null,a)}!f.load&&f.read&&(f.load=function(a){ja(f.read(a))});f.print||(f.print=function(){});f.printErr||(f.printErr=f.print);f.arguments||(f.arguments=[]);f.thisProgram||(f.thisProgram="./this.program");f.print=f.print;f.fa=f.printErr;f.preRun=[];f.postRun=[];for(ba in aa)aa.hasOwnProperty(ba)&&(f[ba]=aa[ba]);var l={Qb:function(a){la=a},Ab:function(){return la},qa:function(){return k},ga:function(a){k=a},Xa:function(a){switch(a){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:return"*"===a[a.length-1]?l.M:"i"===a[0]?(a=parseInt(a.substr(1)),assert(0===a%8),a/8):0}},xb:function(a){return Math.max(l.Xa(a),l.M)},oe:16,Ke:function(a,b){"double"===b||"i64"===b?a&7&&(assert(4===(a&7)),a+=4):assert(0===(a&3));return a},ye:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?l.xb(a):0),l.M):Math.min(b,8):8},T:function(a,b,c){return c&&c.length?(c.splice||(c=Array.prototype.slice.call(c)),c.splice(0,0,b),f["dynCall_"+a].apply(null,c)):f["dynCall_"+a].call(null,b)},A:[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],La:function(a){for(var b=0;b=na)p("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+na+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 "),a=!0;return a?(n=b,0):b},ta:function(a,b){return Math.ceil(a/(b?b:16))*(b?b:16)},He:function(a,b,c){return c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(b|0)},aa:8,M:4,re:0};f.Runtime=l;l.addFunction=l.La;l.removeFunction=l.Mb;var oa=!1,pa,qa,la;function assert(a,b){a||p("Assertion failed: "+b)}function ra(a){var b=f["_"+a];if(!b)try{b=eval("_"+a)}catch(c){}assert(b,"Cannot call unknown function "+a+" (perhaps LLVM optimizations or closure removed it?)");return b}var sa,ta;(function(){function a(a){a=a.toString().match(d).slice(1);return{arguments:a[0],body:a[1],returnValue:a[2]}}var b={stackSave:function(){l.qa()},stackRestore:function(){l.ga()},arrayToC:function(a){var b=l.R(a.length);ua(a,b);return b},stringToC:function(a){var b=0;null!==a&&void 0!==a&&0!==a&&(b=l.R((a.length<<2)+1),wa(a,b));return b}},c={string:b.stringToC,array:b.arrayToC};ta=function(a,b,d,e,g){a=ra(a);var v=[],G=0;if(e)for(var I=0;I>0]=b;break;case"i8":u[a>>0]=b;break;case"i16":za[a>>1]=b;break;case"i32":w[a>>2]=b;break;case"i64":qa=[b>>>0,(pa=b,1<=+Aa(pa)?0>>0:~~+Da((pa-+(~~pa>>>0))/4294967296)>>>0:0)];w[a>>2]=qa[0];w[a+4>>2]=qa[1];break;case"float":Ea[a>>2]=b;break;case"double":Fa[a>>3]=b;break;default:p("invalid type for setValue: "+c)}}f.setValue=ya;function y(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case"i1":return u[a>>0];case"i8":return u[a>>0];case"i16":return za[a>>1];case"i32":return w[a>>2];case"i64":return w[a>>2];case"float":return Ea[a>>2];case"double":return Fa[a>>3];default:p("invalid type for setValue: "+b)}return null}f.getValue=y;f.ALLOC_NORMAL=0;f.ALLOC_STACK=1;f.ALLOC_STATIC=2;f.ALLOC_DYNAMIC=3;f.ALLOC_NONE=4;function z(a,b,c,d){var e,g;"number"===typeof a?(e=!0,g=a):(e=!1,g=a.length);var h="string"===typeof b?b:null;c=4==c?d:[Ga,l.R,l.bb,l.ba][void 0===c?2:c](Math.max(g,h?1:b.length));if(e){d=c;assert(0==(c&3));for(a=c+(g&-4);d>2]=0;for(a=c+g;d>0]=0;return c}if("i8"===h)return a.subarray||a.slice?A.set(a,c):A.set(new Uint8Array(a),c),c;d=0;for(var m,t;d>0];c|=d;if(0==d&&!b)break;e++;if(b&&e==b)break}b||(b=e);d="";if(128>c){for(;0>0];if(!c)return b;b+=String.fromCharCode(c)}};f.stringToAscii=function(a,b){return Ka(a,b,!1)};function La(a,b){for(var c,d,e,g,h,m,t="";;){c=a[b++];if(!c)return t;c&128?(d=a[b++]&63,192==(c&224)?t+=String.fromCharCode((c&31)<<6|d):(e=a[b++]&63,224==(c&240)?c=(c&15)<<12|d<<6|e:(g=a[b++]&63,240==(c&248)?c=(c&7)<<18|d<<12|e<<6|g:(h=a[b++]&63,248==(c&252)?c=(c&3)<<24|d<<18|e<<12|g<<6|h:(m=a[b++]&63,c=(c&1)<<30|d<<24|e<<18|g<<12|h<<6|m))),65536>c?t+=String.fromCharCode(c):(c-=65536,t+=String.fromCharCode(55296|c>>10,56320|c&1023)))):t+=String.fromCharCode(c)}}f.UTF8ArrayToString=La;f.UTF8ToString=function(a){return La(A,a)};function Ma(a,b,c,d){if(!(0=h&&(h=65536+((h&1023)<<10)|a.charCodeAt(++g)&1023);if(127>=h){if(c>=d)break;b[c++]=h}else{if(2047>=h){if(c+1>=d)break;b[c++]=192|h>>6}else{if(65535>=h){if(c+2>=d)break;b[c++]=224|h>>12}else{if(2097151>=h){if(c+3>=d)break;b[c++]=240|h>>18}else{if(67108863>=h){if(c+4>=d)break;b[c++]=248|h>>24}else{if(c+5>=d)break;b[c++]=252|h>>30;b[c++]=128|h>>24&63}b[c++]=128|h>>18&63}b[c++]=128|h>>12&63}b[c++]=128|h>>6&63}b[c++]=128|h&63}}b[c]=0;return c-e}f.stringToUTF8Array=Ma;f.stringToUTF8=function(a,b,c){return Ma(a,A,b,c)};function Na(a){for(var b=0,c=0;c=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:2097151>=d?b+4:67108863>=d?b+5:b+6}return b}f.lengthBytesUTF8=Na;f.UTF16ToString=function(a){for(var b=0,c="";;){var d=za[a+2*b>>1];if(0==d)return c;++b;c+=String.fromCharCode(d)}};f.stringToUTF16=function(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=a.charCodeAt(e),b+=2;za[b>>1]=0;return b-d};f.lengthBytesUTF16=function(a){return 2*a.length};f.UTF32ToString=function(a){for(var b=0,c="";;){var d=w[a+4*b>>2];if(0==d)return c;++b;65536<=d?(d=d-65536,c+=String.fromCharCode(55296|d>>10,56320|d&1023)):c+=String.fromCharCode(d)}};f.stringToUTF32=function(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=g)var h=a.charCodeAt(++e),g=65536+((g&1023)<<10)|h&1023;w[b>>2]=g;b+=4;if(b+4>c)break}w[b>>2]=0;return b-d};f.lengthBytesUTF32=function(a){for(var b=0,c=0;c=d&&++c;b+=4}return b};function Oa(a){function b(c,d,e){d=d||Infinity;var g="",h=[],v;if("N"===a[m]){m++;"K"===a[m]&&m++;for(v=[];"E"!==a[m];)if("S"===a[m]){m++;var F=a.indexOf("_",m);v.push(r[a.substring(m,F)||0]||"?");m=F+1}else if("C"===a[m])v.push(v[v.length-1]),m+=2;else{var F=parseInt(a.substr(m)),ha=F.toString().length;if(!F||!ha){m--;break}var lc=a.substr(m+ha,F);v.push(lc);r.push(lc);m+=ha+F}m++;v=v.join("::");d--;if(0===d)return c?[v]:v}else if(("K"===a[m]||x&&"L"===a[m])&&m++,F=parseInt(a.substr(m)))ha=F.toString().length,v=a.substr(m+ha,F),m+=ha+F;x=!1;"I"===a[m]?(m++,F=b(!0),ha=b(!0,1,!0),g+=ha[0]+" "+v+"<"+F.join(", ")+">"):g=v;a:for(;m$a?2*$a:$a+16777216;$a!==na&&(na=$a);assert("undefined"!==typeof Int32Array&&"undefined"!==typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support");var buffer;buffer=new ArrayBuffer(na);u=new Int8Array(buffer);za=new Int16Array(buffer);w=new Int32Array(buffer);A=new Uint8Array(buffer);Ta=new Uint16Array(buffer);Ua=new Uint32Array(buffer);Ea=new Float32Array(buffer);Fa=new Float64Array(buffer);w[0]=255;assert(255===A[0]&&0===A[3],"Typed arrays 2 must be run on a little-endian system");f.HEAP=void 0;f.buffer=buffer;f.HEAP8=u;f.HEAP16=za;f.HEAP32=w;f.HEAPU8=A;f.HEAPU16=Ta;f.HEAPU32=Ua;f.HEAPF32=Ea;f.HEAPF64=Fa;function ab(a){for(;0>0]=a[c],c+=1}f.writeStringToMemory=wa;function ua(a,b){for(var c=0;c>0]=a[c]}f.writeArrayToMemory=ua;function Ka(a,b,c){for(var d=0;d>0]=a.charCodeAt(d);c||(u[b>>0]=0)}f.writeAsciiToMemory=Ka;Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(a,b){var c=a&65535,d=b&65535;return c*d+((a>>>16)*d+c*(b>>>16)<<16)|0});Math.De=Math.imul;Math.clz32||(Math.clz32=function(a){a=a>>>0;for(var b=0;32>b;b++)if(a&1<<31-b)return b;return 32});Math.ue=Math.clz32;var Aa=Math.abs,ib=Math.cos,jb=Math.sin,kb=Math.tan,lb=Math.acos,mb=Math.asin,nb=Math.atan,ob=Math.atan2,pb=Math.exp,qb=Math.log,rb=Math.sqrt,Da=Math.ceil,Ca=Math.floor,sb=Math.pow,Ba=Math.min,tb=0,ub=null,vb=null;function wb(){tb++;f.monitorRunDependencies&&f.monitorRunDependencies(tb)}f.addRunDependency=wb;function xb(){tb--;f.monitorRunDependencies&&f.monitorRunDependencies(tb);if(0==tb&&(null!==ub&&(clearInterval(ub),ub=null),vb)){var a=vb;vb=null;a()}}f.removeRunDependency=xb;f.preloadedImages={};f.preloadedAudios={};Va=8;ma=Va+50112;cb.push();z([1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,254,255,255,127,0,0,0,0,128,0,0,0,244,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,67,0,0,1,0,1,0,130,0,0,0,151,67,0,0,1,0,1,0,131,0,0,0,156,67,0,0,1,0,1,0,132,0,0,0,161,67,0,0,2,0,1,0,133,0,0,0,166,67,0,0,2,0,1,0,133,0,0,0,172,67,0,0,1,0,1,0,134,0,0,0,178,67,0,0,1,0,1,0,135,0,0,0,184,67,0,0,1,0,1,0,136,0,0,0,190,67,0,0,2,0,1,0,137,0,0,0,201,67,0,0,1,0,1,0,138,0,0,0,209,67,0,0,1,0,1,0,139,0,0,0,217,67,0,0,1,0,1,0,140,0,0,0,221,67,0,0,1,0,1,0,141,0,0,0,225,67,0,0,1,0,1,0,142,0,0,0,229,67,0,0,1,0,1,0,143,0,0,0,233,67,0,0,1,0,1,0,144,0,0,0,238,67,0,0,1,0,1,0,145,0,0,0,243,67,0,0,1,0,1,0,146,0,0,0,248,67,0,0,1,0,1,0,147,0,0,0,253,67,0,0,1,0,1,0,148,0,0,0,232,101,0,0,1,0,1,0,149,0,0,0,1,68,0,0,1,0,1,0,150,0,0,0,7,68,0,0,2,0,1,0,151,0,0,0,13,68,0,0,1,0,1,0,152,0,0,0,18,68,0,0,1,0,1,0,153,0,0,0,23,68,0,0,1,0,1,0,154,0,0,0,30,68,0,0,1,0,1,0,155,0,0,0,35,68,0,0,1,0,1,0,156,0,0,0,41,68,0,0,0,0,1,1,157,0,0,0,44,68,0,0,2,0,1,0,158,0,0,0,54,68,0,0,2,0,1,0,159,0,0,0,54,68,0,0,3,0,1,0,159,0,0,0,64,68,0,0,2,0,1,0,160,0,0,0,72,68,0,0,2,0,1,0,161,0,0,0,81,68,0,0,1,0,1,0,162,0,0,0,89,68,0,0,1,0,1,0,163,0,0,0,96,68,0,0,2,0,1,0,164,0,0,0,101,68,0,0,2,0,1,0,165,0,0,0,106,68,0,0,2,0,1,0,166,0,0,0,111,68,0,0,2,0,1,0,167,0,0,0,121,68,0,0,1,0,0,0,168,0,0,0,130,0,0,0,127,68,0,0,1,0,0,0,168,0,0,0,131,0,0,0,76,105,0,0,1,0,0,0,169,0,0,0,132,0,0,0,136,68,0,0,1,0,0,0,169,0,0,0,133,0,0,0,143,68,0,0,1,0,0,0,169,0,0,0,134,0,0,0,158,68,0,0,1,0,0,0,169,0,0,0,135,0,0,0,0,0,0,0,128,48,0,0,128,32,14,0,128,32,200,3,0,0,0,0,128,255,255,255,0,248,255,255,0,0,255,255,1,0,0,0,0,0,0,0,223,183,0,0,235,183,0,0,247,183,0,0,15,184,0,0,26,184,0,0,46,184,0,0,60,184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,44,0,0,0,0,2,0,0,0,0,0,0,184,177,0,0,12,28,0,0,130,0,0,0,130,0,0,0,130,0,0,0,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,132,0,0,0,133,0,0,0,133,0,0,0,134,0,0,0,3,0,0,0,44,0,0,0,0,2,0,0,0,0,0,0,189,177,0,0,16,28,0,0,130,0,0,0,130,0,0,0,130,0,0,0,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,132,0,0,0,133,0,0,0,133,0,0,0,134,0,0,0,3,0,0,0,44,0,0,0,0,2,0,0,0,0,0,0,199,177,0,0,20,28,0,0,130,0,0,0,130,0,0,0,130,0,0,0,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,132,0,0,0,133,0,0,0,133,0,0,0,134,0,0,0,3,0,0,0,44,0,0,0,0,2,0,0,0,0,0,0,212,177,0,0,12,28,0,0,130,0,0,0,130,0,0,0,130,0,0,0,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,131,0,0,0,130,0,0,0,131,0,0,0,132,0,0,0,132,0,0,0,133,0,0,0,133,0,0,0,134,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,202,154,59,0,202,154,59,208,7,0,0,232,3,0,0,244,1,0,0,168,97,0,0,127,0,0,0,10,0,0,0,80,195,0,0,231,3,0,0,232,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,130,0,0,0,131,0,0,0,135,0,0,0,130,0,0,0,131,0,0,0,136,0,0,0,132,0,0,0,131,0,0,0,133,0,0,0,134,0,0,0,134,0,0,0,137,0,0,0,132,0,0,0,135,0,0,0,136,0,0,0,137,0,0,0,138,0,0,0,132,0,0,0,138,0,0,0,139,0,0,0,140,0,0,0,141,0,0,0,0,0,0,0,132,0,0,0,132,0,0,0,142,0,0,0,139,0,0,0,139,0,0,0,143,0,0,0,140,0,0,0,133,0,0,0,141,0,0,0,142,0,0,0,135,0,0,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,84,0,0,21,85,0,0,89,85,0,0,117,85,0,0,146,85,0,0,173,85,0,0,201,85,0,0,226,85,0,0,250,85,0,0,59,86,0,0,118,86,0,0,186,86,0,0,234,86,0,0,90,87,0,0,225,87,0,0,21,88,0,0,87,88,0,0,130,88,0,0,189,88,0,0,228,88,0,0,16,89,0,0,57,89,0,0,104,89,0,0,146,89,0,0,66,75,0,0,66,75,0,0,184,89,0,0,239,89,0,0,44,90,0,0,149,90,0,0,252,90,0,0,51,91,0,0,109,91,0,0,216,91,0,0,39,92,0,0,104,92,0,0,164,92,0,0,212,92,0,0,62,93,0,0,135,93,0,0,99,83,0,0,170,0,0,0,107,83,0,0,171,0,0,0,125,83,0,0,172,0,0,0,115,83,0,0,173,0,0,0,79,96,0,0,2,0,4,0,82,96,0,0,3,1,3,0,86,96,0,0,3,1,2,0,90,96,0,0,4,0,1,0,115,83,0,0,9,0,0,0,59,100,0,0,6,0,0,0,178,97,0,0,8,0,0,0,187,97,0,0,10,0,0,0,66,100,0,0,5,0,0,0,116,97,0,0,7,0,0,0,72,100,0,0,10,0,0,0,83,100,0,0,10,0,0,0,0,0,0,0,136,0,0,0,143,0,0,0,133,0,0,0,144,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0,137,0,0,0,145,0,0,0,134,0,0,0,146,0,0,0,134,0,0,0,0,0,0,0,0,0,0,0,135,0,0,0,135,0,0,0,145,0,0,0,147,0,0,0,147,0,0,0,146,0,0,0,148,0,0,0,134,0,0,0,149,0,0,0,150,0,0,0,138,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,151,0,0,0,135,0,0,0,152,0,0,0,136,0,0,0,0,0,0,0,255,255,255,255,255,255,0,252,1,0,0,248,1,0,0,248,48,0,0,0,7,232,0,0,6,108,1,0,47,236,1,0,7,172,2,0,1,208,2,0,3,216,2,0,1,236,2,0,1,252,2,0,1,92,3,0,1,220,3,0,4,8,11,0,14,72,11,0,7,148,11,0,1,180,11,0,129,188,11,0,1,212,13,0,1,248,13,0,2,16,14,0,1,28,14,0,1,216,15,0,8,8,18,0,6,104,21,0,2,36,22,0,1,60,22,0,55,68,22,0,2,204,23,0,5,0,24,0,22,24,24,0,2,120,24,0,21,44,25,0,4,168,25,0,1,192,25,0,1,80,27,0,15,88,27,0,7,156,27,0,2,244,27,0,14,0,28,0,1,60,28,0,1,68,28,0,27,192,28,0,11,152,30,0,9,172,31,0,4,216,31,0,4,88,32,0,9,108,32,0,3,148,32,0,5,164,32,0,15,192,32,0,3,100,33,0,1,120,33,0,27,144,35,0,4,0,36,0,3,232,36,0,18,248,36,0,7,68,37,0,4,136,37,0,1,192,37,0,3,4,38,0,1,240,38,0,7,248,38,0,2,28,39,0,3,44,39,0,1,92,39,0,2,136,39,0,2,200,39,0,2,232,39,0,3,4,40,0,1,240,40,0,5,248,40,0,2,28,41,0,3,44,41,0,1,68,41,0,2,192,41,0,1,212,41,0,3,4,42,0,1,240,42,0,8,248,42,0,3,28,43,0,3,44,43,0,2,136,43,0,2,192,43,0,3,4,44,0,1,240,44,0,7,248,44,0,2,28,45,0,3,44,45,0,2,88,45,0,2,136,45,0,1,192,45,0,1,8,46,0,5,248,46,0,3,24,47,0,4,40,47,0,1,92,47,0,8,204,47,0,3,4,48,0,7,248,48,0,3,24,49,0,4,40,49,0,2,84,49,0,2,136,49,0,1,252,49,0,2,8,50,0,1,240,50,0,7,248,50,0,3,24,51,0,4,40,51,0,2,84,51,0,2,136,51,0,2,8,52,0,7,248,52,0,3,24,53,0,4,40,53,0,1,92,53,0,2,136,53,0,1,228,53,0,2,8,54,0,1,40,55,0,6,60,55,0,1,88,55,0,8,96,55,0,3,200,55,0,1,196,56,0,7,208,56,0,1,252,56,0,9,28,57,0,2,104,57,0,1,196,58,0,6,208,58,0,2,236,58,0,6,32,59,0,31,4,60,0,12,208,60,0,23,196,61,0,11,52,62,0,36,100,62,0,15,248,62,0,13,56,63,0,20,172,64,0,6,40,65,0,4,88,65,0,3,120,65,0,3,136,65,0,7,156,65,0,4,196,65,0,12,8,66,0,1,60,66,0,6,104,66,0,1,236,67,0,12,116,77,0,10,64,78,0,1,0,80,0,2,180,89,0,1,0,90,0,2,108,90,0,3,172,91,0,3,72,92,0,5,200,92,0,2,72,93,0,2,200,93,0,35,208,94,0,4,96,95,0,1,116,95,0,15,0,96,0,1,164,98,0,12,128,100,0,12,192,100,0,1,0,101,0,2,16,101,0,17,192,102,0,2,32,103,0,34,120,103,0,5,92,104,0,2,120,104,0,10,84,105,0,29,128,105,0,1,252,105,0,7,128,106,0,6,160,106,0,5,0,108,0,17,208,108,0,35,104,109,0,3,0,110,0,13,132,110,0,14,152,111,0,4,240,111,0,20,144,112,0,5,236,112,0,2,248,113,0,8,0,115,0,25,64,115,0,1,180,115,0,3,200,115,0,39,0,119,0,4,240,119,0,1,244,126,0,3,252,126,0,3,52,127,0,3,116,127,0,3,180,127,0,2,244,127,0,101,0,128,0,6,168,129,0,5,232,129,0,5,40,130,0,26,128,130,0,33,64,131,0,2,0,132,0,4,12,132,0,2,32,132,0,1,80,132,0,3,88,132,0,6,120,132,0,1,148,132,0,1,156,132,0,1,164,132,0,1,184,132,0,2,232,132,0,5,0,133,0,4,40,133,0,1,60,133,0,100,66,134,0,39,0,144,0,11,0,145,0,78,112,146,0,0,2,148,0,117,4,156,0,185,83,158,0,10,64,173,0,6,148,179,0,3,188,179,0,4,228,179,0,2,248,179,0,1,192,181,0,1,252,181,0,79,128,183,0,12,192,184,0,26,0,186,0,89,108,186,0,214,0,188,0,12,192,191,0,5,0,192,0,25,32,192,0,7,168,192,0,2,216,192,0,3,244,192,0,4,100,194,0,1,128,194,0,1,236,195,0,2,64,198,0,10,88,198,0,36,0,199,0,31,0,200,0,30,168,200,0,1,64,201,0,32,128,201,0,39,40,202,0,63,0,203,0,0,1,204,0,64,0,55,1,55,64,146,2,2,248,147,2,3,52,152,2,16,188,153,2,1,124,154,2,8,192,155,2,23,0,156,2,2,128,156,2,2,36,158,2,1,8,160,2,1,24,160,2,1,44,160,2,9,140,160,2,4,216,160,2,4,208,161,2,2,0,162,2,17,208,162,2,2,56,163,2,18,128,163,2,3,224,163,2,10,152,164,2,13,28,165,2,1,124,165,2,4,0,166,2,27,204,166,2,2,120,167,2,14,164,168,2,1,12,169,2,2,48,169,2,4,112,169,2,3,220,169,2,1,236,169,2,1,192,170,2,3,200,170,2,2,220,170,2,2,248,170,2,1,4,171,2,2,120,171,2,7,172,171,2,2,212,171,2,11,140,175,2,1,0,96,3,2,252,109,3,2,252,111,3,1,252,127,3,1,120,236,3,1,164,236,3,16,200,238,3,2,248,244,3,2,240,247,3,26,0,248,3,7,128,248,3,35,192,248,3,19,80,249,3,4,160,249,3,1,252,251,3,15,4,252,3,7,104,252,3,6,236,252,3,11,108,253,3,7,128,255,3,7,160,255,3,5,228,255,3,3,0,4,4,9,220,4,4,17,228,5,4,12,64,6,4,46,64,7,4,1,124,14,4,1,64,15,4,1,92,33,4,1,124,36,4,1,252,36,4,3,4,40,4,2,20,40,4,4,48,40,4,3,224,40,4,1,252,40,4,9,64,41,4,1,252,41,4,7,228,44,4,3,0,64,4,22,224,64,4,3,0,66,4,18,192,66,4,3,0,68,4,14,156,68,4,4,0,69,4,3,0,70,4,14,204,70,4,4,20,71,4,13,172,90,4,4,192,145,4,46,68,189,5,4,60,190,5,246,0,64,7,39,0,68,7,181,164,68,7,70,0,72,7,87,0,76,7,1,4,91,7,1,108,91,7,1,236,91,7,1,84,92,7,1,212,92,7,1,60,93,7,1,188,93,7,1,36,94,7,1,164,94,7,1,12,95,7,2,192,187,7,44,0,192,7,100,192,192,7,15,128,194,7,14,196,194,7,15,4,195,7,15,68,195,7,31,64,196,7,60,192,196,7,43,192,197,7,29,152,199,7,43,64,200,7,9,0,201,7,2,64,201,7,33,0,204,7,6,192,204,7,70,220,204,7,20,0,206,7,37,128,206,7,5,24,207,7,17,128,207,7,63,0,208,7,1,0,209,7,182,8,209,7,4,228,211,7,62,0,212,7,4,0,213,7,24,64,213,7,70,236,215,7,11,20,217,7,70,0,218,7,116,0,220,7,1,4,0,56,96,128,0,56,240,0,4,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,153,0,0,0,135,0,0,0,136,0,0,0,140,0,0,0,148,0,0,0,149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,105,0,0,0,0,2,0,172,105,0,0,0,0,4,0,0,0,0,0,0,0,0,0,148,105,0,0,1,0,0,0,151,105,0,0,2,0,0,0,154,105,0,0,6,0,0,0,158,105,0,0,128,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,154,0,0,0,136,0,0,0,141,0,0,0,130,0,0,0,155,0,0,0,142,0,0,0,174,0,0,0,130,0,0,0,131,0,0,0,137,0,0,0,138,0,0,0,156,0,0,0,139,0,0,0,150,0,0,0,157,0,0,0,158,0,0,0,159,0,0,0,140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,189,136,0,0,1,0,0,0,66,81,0,0,1,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,175,0,0,0,0,0,0,0,32,124,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,176,0,0,0,0,0,0,0,22,124,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,177,0,0,0,0,0,0,0,2,124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,82,0,0,95,124,0,0,108,124,0,0,0,0,0,0,121,124,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,178,0,0,0,0,0,0,0,115,125,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,0,0,0,0,0,0,179,0,0,0,0,0,0,0,240,125,0,0,0,0,0,0,0,0,0,0,67,133,0,0,0,0,0,0,8,0,0,0,35,129,0,0,1,1,0,0,0,0,0,0,82,133,0,0,2,0,0,0,0,0,16,0,98,133,0,0,3,0,0,0,0,0,0,0,158,128,0,0,4,1,0,0,0,0,0,0,67,129,0,0,5,0,0,0,0,0,0,0,111,133,0,0,6,0,0,0,0,0,0,0,131,133,0,0,2,0,0,0,0,0,0,16,147,133,0,0,2,0,0,0,16,0,0,0,168,133,0,0,7,0,0,0,0,0,0,0,183,133,0,0,8,0,0,0,0,0,0,0,199,133,0,0,2,0,0,0,128,0,0,0,213,133,0,0,0,2,0,0,15,0,0,0,226,133,0,0,10,1,0,0,0,0,0,0,240,133,0,0,11,1,0,0,0,0,0,0,3,134,0,0,2,0,0,0,0,0,0,1,22,134,0,0,2,0,0,0,0,1,0,0,170,130,0,0,12,0,0,0,0,0,0,0,45,134,0,0,13,1,0,0,0,0,0,0,63,134,0,0,14,1,0,0,0,0,0,0,80,134,0,0,2,0,0,0,0,0,8,0,93,134,0,0,0,2,0,0,0,0,0,0,108,134,0,0,2,0,0,0,4,0,0,0,126,134,0,0,2,0,0,0,8,0,0,0,136,134,0,0,2,0,0,0,0,32,0,0,161,134,0,0,15,1,0,0,0,0,0,0,180,134,0,0,16,1,0,0,0,0,0,0,191,134,0,0,17,1,0,0,0,0,0,0,202,134,0,0,16,1,0,0,1,0,0,0,9,130,0,0,18,1,0,0,0,0,0,0,3,129,0,0,19,1,0,0,0,0,0,0,16,129,0,0,20,0,0,0,0,0,0,0,214,134,0,0,2,0,0,0,0,128,0,0,246,128,0,0,22,0,0,0,0,0,0,0,233,134,0,0,23,1,0,0,0,0,0,0,79,129,0,0,24,0,0,0,0,0,0,0,248,134,0,0,23,1,0,0,0,0,0,0,205,128,0,0,25,0,0,0,0,0,0,0,3,135,0,0,2,0,0,0,0,0,0,2,14,135,0,0,18,1,0,0,0,0,0,0,26,135,0,0,2,0,0,0,0,64,0,0,43,135,0,0,2,0,0,0,0,0,4,0,62,135,0,0,2,0,0,0,0,0,2,0,88,135,0,0,0,0,0,0,1,0,0,0,215,128,0,0,26,0,0,0,0,0,0,0,103,135,0,0,2,0,0,0,64,0,0,0,122,135,0,0,27,0,0,0,0,0,0,0,32,131,0,0,28,0,0,0,0,0,0,0,136,135,0,0,29,1,0,0,0,0,0,0,146,129,0,0,30,1,0,0,0,0,0,0,142,135,0,0,31,1,0,0,0,0,0,0,89,129,0,0,32,0,0,0,0,0,0,0,100,129,0,0,33,0,0,0,0,0,0,0,48,131,0,0,34,0,0,0,0,0,0,0,153,135,0,0,0,0,0,0,6,0,0,0,5,131,0,0,35,0,0,0,0,0,0,0,166,135,0,0,36,1,0,0,0,0,0,0,181,135,0,0,2,0,0,0,0,8,1,0,165,132,0,0,120,132,0,0,197,132,0,0,202,132,0,0,210,132,0,0,134,132,0,0,13,132,0,0,178,132,0,0,184,132,0,0,190,132,0,0,159,132,0,0,165,132,0,0,120,132,0,0,88,97,0,0,169,132,0,0,174,132,0,0,82,132,0,0,120,132,0,0,137,132,0,0,144,132,0,0,151,132,0,0,130,132,0,0,132,132,0,0,134,132,0,0,82,132,0,0,120,132,0,0,125,132,0,0,82,132,0,0,120,132,0,0,79,132,0,0,82,132,0,0,13,132,0,0,86,132,0,0,91,132,0,0,94,132,0,0,104,132,0,0,114,132,0,0,13,132,0,0,248,99,0,0,19,132,0,0,26,132,0,0,74,131,0,0,1,0,0,0,79,131,0,0,1,0,0,0,85,131,0,0,2,0,0,0,94,131,0,0,3,0,0,0,103,131,0,0,2,0,0,0,111,131,0,0,3,0,0,0,119,131,0,0,0,0,0,0,126,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,131,0,0,232,101,0,0,61,131,0,0,44,133,0,0,51,133,0,0,59,133,0,0,252,130,0,0,158,105,0,0,63,133,0,0,114,132,0,0,64,0,0,0,141,131,0,0,66,0,0,0,136,131,0,0,65,0,0,0,113,139,0,0,67,0,0,0,79,120,0,0,3,0,0,0,75,120,0,0,3,0,0,0,66,75,0,0,150,149,0,0,156,149,0,0,161,149,0,0,166,149,0,0,26,150,0,0,32,150,0,0,40,150,0,0,255,157,0,0,4,158,0,0,11,158,0,0,14,158,0,0,17,158,0,0,20,158,0,0,23,158,0,0,26,158,0,0,34,158,0,0,66,100,0,0,86,132,0,0,43,158,0,0,62,169,0,0,71,169,0,0,78,169,0,0,84,169,0,0,167,169,0,0,177,169,0,0,188,169,0,0,200,169,0,0,211,169,0,0,222,169,0,0,233,169,0,0,238,169,0,0,243,169,0,0,254,169,0,0,10,170,0,0,17,170,0,0,25,170,0,0,33,170,0,0,38,170,0,0,44,170,0,0,51,170,0,0,65,170,0,0,78,170,0,0,84,170,0,0,88,170,0,0,99,170,0,0,104,170,0,0,112,170,0,0,118,170,0,0,125,170,0,0,130,170,0,0,139,170,0,0,144,170,0,0,153,170,0,0,158,170,0,0,163,170,0,0,169,170,0,0,177,170,0,0,187,170,0,0,195,170,0,0,205,170,0,0,214,170,0,0,221,170,0,0,231,170,0,0,244,170,0,0,249,170,0,0,5,171,0,0,13,171,0,0,18,171,0,0,23,171,0,0,26,171,0,0,32,171,0,0,39,171,0,0,48,171,0,0,59,171,0,0,65,171,0,0,76,171,0,0,86,171,0,0,96,171,0,0,105,171,0,0,115,171,0,0,129,171,0,0,143,171,0,0,154,171,0,0,167,171,0,0,178,171,0,0,184,171,0,0,196,171,0,0,203,171,0,0,210,171,0,0,217,171,0,0,224,171,0,0,235,171,0,0,244,171,0,0,250,171,0,0,4,172,0,0,7,172,0,0,11,172,0,0,20,172,0,0,29,172,0,0,36,172,0,0,43,172,0,0,51,172,0,0,54,172,0,0,57,172,0,0,60,172,0,0,63,172,0,0,66,172,0,0,69,172,0,0,79,172,0,0,86,172,0,0,92,172,0,0,102,172,0,0,113,172,0,0,117,172,0,0,126,172,0,0,135,172,0,0,142,172,0,0,152,172,0,0,159,172,0,0,166,172,0,0,173,172,0,0,181,172,0,0,192,172,0,0,206,172,0,0,217,172,0,0,224,172,0,0,232,172,0,0,238,172,0,0,246,172,0,0,251,172,0,0,6,173,0,0,11,173,0,0,18,173,0,0,31,173,0,0,41,173,0,0,51,173,0,0,56,173,0,0,65,173,0,0,71,173,0,0,77,173,0,0,83,173,0,0,89,173,0,0,97,173,0,0,103,173,0,0,115,173,0,0,127,173,0,0,139,173,0,0,151,173,0,0,164,173,0,0,174,173,0,0,184,173,0,0,196,173,0,0,208,173,0,0,218,173,0,0,229,173,0,0,240,173,0,0,248,173,0,0,253,173,0,0,3,174,0,0,13,174,0,0,22,174,0,0,29,174,0,0,35,174,0,0,47,174,0,0,57,174,0,0,70,174,0,0,83,174,0,0,92,174,0,0,100,174,0,0,109,174,0,0,120,174,0,0,127,174,0,0,137,174,0,0,144,174,0,0,152,174,0,0,161,174,0,0,167,174,0,0,175,174,0,0,181,174,0,0,189,174,0,0,199,174,0,0,208,174,0,0,213,174,0,0,224,174,0,0,229,174,0,0,57,175,0,0,70,175,0,0,0,0,0,0,106,175,0,0,131,175,0,0,162,175,0,0,181,175,0,0,136,126,0,0,206,175,0,0,243,175,0,0,255,175,0,0,14,176,0,0,47,176,0,0,65,176,0,0,90,176,0,0,119,176,0,0,136,176,0,0,96,160,0,0,90,74,0,0,159,176,0,0,177,176,0,0,195,176,0,0,234,176,0,0,9,177,0,0,30,177,0,0,62,177,0,0,96,177,0,0,151,0,0,0,152,0,0,0,153,0,0,0,1,0,0,0,160,0,0,0,137,0,0,0,138,0,0,0,143,0,0,0,154,0,0,0,155,0,0,0,156,0,0,0,157,0,0,0,158,0,0,0,144,0,0,0,161,0,0,0,162,0,0,0,0,0,0,0,136,0,0,0,141,0,0,0,159,0,0,0,139,0,0,0,137,0,0,0,3,178,0,0,145,0,0,0,0,0,0,0,222,177,0,0,163,0,0,0,0,0,0,0,81,105,0,0,160,0,0,0,0,0,0,0,8,178,0,0,161,0,0,0,0,0,0,0,15,178,0,0,162,0,0,0,0,0,0,0,20,178,0,0,163,0,0,0,0,0,0,0,26,178,0,0,164,0,0,0,0,0,0,0,36,178,0,0,146,0,0,0,0,0,0,0,42,178,0,0,147,0,0,0,0,0,0,0,47,178,0,0,0,0,0,0,0,0,0,0,53,178,0,0,0,0,0,0,0,0,0,0,61,178,0,0,148,0,0,0,0,0,0,0,67,178,0,0,0,0,0,0,0,0,0,0,74,178,0,0,0,0,0,0,0,0,0,0,83,178,0,0,165,0,0,0,0,0,0,0,90,178,0,0,0,0,0,0,0,0,0,0,100,178,0,0,164,0,0,0,0,0,0,0,107,178,0,0,166,0,0,0,0,0,0,0,121,178,0,0,167,0,0,0,0,0,0,0,127,178,0,0,165,0,0,0,0,0,0,0,133,178,0,0,149,0,0,0,0,0,0,0,140,178,0,0,130,0,0,0,0,0,0,0,148,178,0,0,137,0,0,0,0,0,0,0,153,178,0,0,168,0,0,0,0,0,0,0,160,178,0,0,0,0,0,0,0,0,0,0,167,178,0,0,131,0,0,0,0,0,0,0,179,178,0,0,150,0,0,0,0,0,0,0,188,178,0,0,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,179,0,0,38,179,0,0,47,179,0,0,52,179,0,0,3,0,0,0,166,0,0,0,137,0,0,0,138,0,0,0,143,0,0,0,154,0,0,0,155,0,0,0,170,0,0,0,171,0,0,0,172,0,0,0,144,0,0,0,161,0,0,0,162,0,0,0,0,0,0,0,136,0,0,0,141,0,0,0,159,0,0,0,139,0,0,0,137,0,0,0,0,0,0,0,3,0,0,0,167,0,0,0,137,0,0,0,138,0,0,0,143,0,0,0,154,0,0,0,155,0,0,0,173,0,0,0,174,0,0,0,175,0,0,0,144,0,0,0,161,0,0,0,162,0,0,0,140,0,0,0,136,0,0,0,141,0,0,0,159,0,0,0,139,0,0,0,137,0,0,0,0,0,0,0,1,0,1,8,1,0,0,0,0,0,0,0,180,0,0,0,0,0,0,0,46,182,0,0,0,0,0,0,0,0,0,0,2,0,1,8,1,0,0,0,0,0,0,0,180,0,0,0,0,0,0,0,46,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,2,0,0,0,0,0,0,0,180,0,0,0,0,0,0,0,52,182,0,0,0,0,0,0,0,0,0,0,2,0,1,8,2,0,0,0,0,0,0,0,180,0,0,0,0,0,0,0,52,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,3,0,0,0,0,0,0,0,180,0,0,0,0,0,0,0,58,182,0,0,0,0,0,0,0,0,0,0,2,0,1,8,3,0,0,0,0,0,0,0,180,0,0,0,0,0,0,0,58,182,0,0,0,0,0,0,0,0,0,0,255,255,33,8,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,181,142,0,0,0,0,0,0,0,0,0,0,0,0,33,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,181,142,0,0,0,0,0,0,0,0,0,0,1,0,33,16,0,0,0,0,0,0,0,0,182,0,0,0,142,0,0,0,181,142,0,0,0,0,0,0,0,0,0,0,255,255,33,8,1,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,185,142,0,0,0,0,0,0,0,0,0,0,0,0,33,8,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,142,0,0,0,0,0,0,0,0,0,0,1,0,33,16,1,0,0,0,0,0,0,0,182,0,0,0,142,0,0,0,185,142,0,0,0,0,0,0,0,0,0,0,1,0,129,8,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,63,182,0,0,0,0,0,0,0,0,0,0,1,0,65,8,0,0,0,0,0,0,0,0,184,0,0,0,0,0,0,0,70,182,0,0,0,0,0,0,0,0,0,0,2,0,1,8,0,0,0,0,0,0,0,0,185,0,0,0,0,0,0,0,77,182,0,0,0,0,0,0,0,0,0,0,2,0,1,8,0,0,0,0,0,0,0,0,186,0,0,0,0,0,0,0,83,182,0,0,0,0,0,0,0,0,0,0,3,0,1,8,0,0,0,0,0,0,0,0,186,0,0,0,0,0,0,0,83,182,0,0,0,0,0,0,0,0,0,0,255,255,1,8,0,0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,90,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,97,182,0,0,0,0,0,0,0,0,0,0,255,255,1,8,0,0,0,0,0,0,0,0,189,0,0,0,0,0,0,0,105,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,190,0,0,0,0,0,0,0,110,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,191,0,0,0,0,0,0,0,114,182,0,0,0,0,0,0,0,0,0,0,2,0,1,8,0,0,0,0,0,0,0,0,191,0,0,0,0,0,0,0,114,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,120,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,193,0,0,0,0,0,0,0,126,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,182,0,0,0,0,0,0,0,0,0,0,0,0,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,182,0,0,0,0,0,0,0,0,0,0,255,255,1,10,0,0,0,0,0,0,0,0,194,0,0,0,0,0,0,0,132,182,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,195,0,0,0,0,0,0,0,141,182,0,0,0,0,0,0,0,0,0,0,2,0,1,10,0,0,0,0,0,0,0,0,194,0,0,0,0,0,0,0,145,182,0,0,0,0,0,0,0,0,0,0,1,0,1,12,0,0,0,0,0,0,0,0,194,0,0,0,0,0,0,0,152,182,0,0,0,0,0,0,0,0,0,0,2,0,1,12,0,0,0,0,0,0,0,0,194,0,0,0,0,0,0,0,161,182,0,0,0,0,0,0,0,0,0,0,1,0,1,12,0,0,0,0,0,0,0,0,194,0,0,0,0,0,0,0,172,182,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,196,0,0,0,0,0,0,0,179,182,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,197,0,0,0,0,0,0,0,186,182,0,0,0,0,0,0,0,0,0,0,2,0,33,8,0,0,0,0,0,0,0,0,198,0,0,0,0,0,0,0,197,182,0,0,0,0,0,0,0,0,0,0,0,0,1,32,0,0,0,0,0,0,0,0,194,0,0,0,0,0,0,0,204,182,0,0,0,0,0,0,0,0,0,0,0,0,1,32,0,0,0,0,0,0,0,0,199,0,0,0,0,0,0,0,219,182,0,0,0,0,0,0,0,0,0,0,2,0,1,8,0,0,0,0,0,0,0,0,200,0,0,0,0,0,0,0,236,182,0,0,0,0,0,0,0,0,0,0,1,0,1,32,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,247,182,0,0,0,0,0,0,0,0,0,0,1,0,1,32,0,0,0,0,0,0,0,0,202,0,0,0,0,0,0,0,17,183,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,203,0,0,0,0,0,0,0,42,183,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,204,0,0,0,0,0,0,0,48,183,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,205,0,0,0,0,0,0,0,66,183,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,206,0,0,0,0,0,0,0,74,183,0,0,0,0,0,0,0,0,0,0,3,0,1,8,0,0,0,0,0,0,0,0,207,0,0,0,0,0,0,0,88,183,0,0,0,0,0,0,0,0,0,0,1,0,1,8,0,0,0,0,0,0,0,0,208,0,0,0,0,0,0,0,96,183,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,209,0,0,0,143,0,0,0,105,183,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,209,0,0,0,144,0,0,0,109,183,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,209,0,0,0,145,0,0,0,115,183,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,210,0,0,0,146,0,0,0,119,183,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,210,0,0,0,146,0,0,0,119,183,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,211,0,0,0,147,0,0,0,125,183,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,0,211,0,0,0,147,0,0,0,125,183,0,0,0,0,0,0,0,0,0,0,2,0,13,8,58,75,0,0,0,0,0,0,212,0,0,0,0,0,0,0,141,131,0,0,0,0,0,0,0,0,0,0,2,0,5,8,62,75,0,0,0,0,0,0,212,0,0,0,0,0,0,0,136,131,0,0,0,0,0,0,0,0,0,0,3,0,5,8,62,75,0,0,0,0,0,0,212,0,0,0,0,0,0,0,136,131,0,0,0,0,0,0,0,0,0,0,2,0,1,8,0,0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,173,180,0,0,0,0,0,0,0,0,0,0,2,0,1,8,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,193,180,0,0,0,0,0,0,0,0,0,0,3,0,1,8,0,0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,215,180,0,0,0,0,0,0,0,0,0,0,255,255,1,32,0,0,0,0,0,0,0,0,216,0,0,0,0,0,0,0,2,181,0,0,0,0,0,0,0,0,0,0,255,255,1,32,0,0,0,0,0,0,0,0,217,0,0,0,0,0,0,0,12,181,0,0,0,0,0,0,0,0,0,0,255,255,1,32,0,0,0,0,0,0,0,0,218,0,0,0,0,0,0,0,17,181,0,0,0,0,0,0,0,0,0,0,255,255,1,32,0,0,0,0,0,0,0,0,219,0,0,0,0,0,0,0,22,181,0,0,0,0,0,0,0,0,0,0,255,255,1,32,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,31,181,0,0,0,0,0,0,0,0,0,0,0,0,1,32,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,40,181,0,0,0,0,0,0,0,0,0,0,0,0,1,32,0,0,0,0,0,0,0,0,222,0,0,0,0,0,0,0,53,181,0,0,0,0,0,0,0,0,0,0,0,0,1,32,0,0,0,0,0,0,0,0,223,0,0,0,0,0,0,0,71,181,0,0,0,0,0,0,0,0,0,0,158,141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,39,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,151,0,0,0,152,0,0,0,196,191,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255],"i8",4,l.aa); +z([2,0,2,0,8,0,9,0,14,0,16,0,20,0,23,0,25,0,25,0,29,0,33,0,36,0,41,0,46,0,48,0,53,0,54,0,59,0,62,0,65,0,67,0,69,0,78,0,81,0,86,0,91,0,95,0,96,0,101,0,105,0,109,0,117,0,122,0,128,0,136,0,142,0,152,0,159,0,162,0,162,0,165,0,167,0,167,0,171,0,176,0,179,0,184,0,184,0,188,0,192,0,199,0,204,0,209,0,212,0,218,0,221,0,225,0,234,0,240,0,240,0,240,0,243,0,246,0,250,0,251,0,255,0,5,1,9,1,16,1,22,1,34,1,40,1,49,1,51,1,57,1,62,1,64,1,71,1,76,1,81,1,87,1,93,1,98,1,102,1,105,1,111,1,115,1,122,1,124,1,131,1,133,1,135,1,144,1,148,1,154,1,160,1,168,1,173,1,173,1,189,1,196,1,203,1,204,1,211,1,215,1,219,1,223,1,227,1,230,1,232,1,234,1,240,1,244,1,252,1,1,2,9,2,12,2,17,2,22,2,28,2,32,2,37,2,0,0,2,0,3,0,5,0,6,0,7,0,8,0,9,0,33,0,32,0,30,0,28,0,26,0,65,0,14,26,181,0,64,1,192,0,14,23,216,0,14,7,0,1,1,48,50,1,1,6,57,1,1,16,74,1,1,46,120,1,116,1,121,1,1,6,127,1,104,1,129,1,50,1,130,1,1,4,134,1,44,1,135,1,0,1,137,1,42,2,139,1,0,1,142,1,32,1,143,1,38,1,144,1,40,1,145,1,0,1,147,1,42,1,148,1,46,1,150,1,52,1,151,1,48,1,152,1,0,1,156,1,52,1,157,1,54,1,159,1,56,1,160,1,1,6,166,1,60,1,167,1,0,1,169,1,60,1,172,1,0,1,174,1,60,1,175,1,0,1,177,1,58,2,179,1,1,4,183,1,62,1,184,1,0,1,188,1,0,1,196,1,2,1,197,1,0,1,199,1,2,1,200,1,0,1,202,1,2,1,203,1,1,18,222,1,1,18,241,1,2,1,242,1,1,4,246,1,122,1,247,1,134,1,248,1,1,40,32,2,110,1,34,2,1,18,58,2,70,1,59,2,0,1,61,2,108,1,62,2,68,1,65,2,0,1,67,2,106,1,68,2,28,1,69,2,30,1,70,2,1,10,69,3,36,1,112,3,1,4,118,3,0,1,134,3,18,1,136,3,16,3,140,3,26,1,142,3,24,2,145,3,14,17,163,3,14,9,194,3,0,1,207,3,4,1,208,3,140,1,209,3,142,1,213,3,146,1,214,3,144,1,216,3,1,24,240,3,136,1,241,3,138,1,244,3,130,1,245,3,128,1,247,3,0,1,249,3,152,1,250,3,0,1,253,3,110,3,0,4,34,16,16,4,14,32,96,4,1,34,138,4,1,54,192,4,6,1,193,4,1,14,208,4,1,88,49,5,22,38,160,16,66,38,199,16,66,1,205,16,66,1,0,30,1,150,155,30,132,1,158,30,96,1,160,30,1,96,8,31,150,8,24,31,150,6,40,31,150,8,56,31,150,8,72,31,150,6,89,31,151,8,104,31,150,8,136,31,150,8,152,31,150,8,168,31,150,8,184,31,150,2,186,31,126,2,188,31,148,1,190,31,100,1,200,31,124,4,204,31,148,1,216,31,150,2,218,31,120,2,232,31,150,2,234,31,118,2,236,31,152,1,248,31,112,2,250,31,114,2,252,31,148,1,38,33,98,1,42,33,92,1,43,33,94,1,50,33,12,1,96,33,8,16,131,33,0,1,182,36,10,26,0,44,22,47,96,44,0,1,98,44,88,1,99,44,102,1,100,44,90,1,103,44,1,6,109,44,84,1,110,44,86,1,111,44,80,1,112,44,82,1,114,44,0,1,117,44,0,1,126,44,78,2,128,44,1,100,235,44,1,4,242,44,0,1,64,166,1,46,128,166,1,24,34,167,1,14,50,167,1,62,121,167,1,4,125,167,76,1,126,167,1,10,139,167,0,1,141,167,74,1,144,167,1,4,160,167,1,10,170,167,72,1,33,255,14,26,1,0,2,0,8,0,15,0,16,0,26,0,28,0,32,0,37,0,38,0,40,0,48,0,63,0,64,0,69,0,71,0,79,0,80,0,116,0,202,0,203,0,205,0,206,0,207,0,209,0,210,0,211,0,213,0,214,0,217,0,218,0,219,0,7,3,96,28,40,42,43,42,188,90,216,90,252,117,193,213,225,213,226,213,228,213,3,214,9,214,25,214,65,223,186,223,65,226,163,226,251,227,26,241,244,254,61,255,93,255,126,255,128,255,130,255,135,255,144,255,156,255,159,255,170,255,182,255,192,255,196,255,198,255,200,255,202,255,208,255,226,255,231,255,234,255,241,255,247,255,248,255,249,255,0,0,5,7,56,7,67,7,99,7,136,7,148,7,203,7,232,7,248,7,12,8,62,8,120,8,158,8,216,8,238,8,40,9,79,9,168,9,184,9,212,9,36,10,108,10,172,10,222,10,26,11,78,11,138,11,168,11,184,11,212,11,8,13,128,13,112,14,128,14,144,14,160,14,56,15,72,15,88,15,128,15,168,15,200,15,10,16,42,16,74,16,106,16,138,16,170,16,200,16,216,16,248,16,56,17,72,17,120,17,152,17,4,24,54,24,120,24,136,24,216,24,29,25,105,25,129,25,8,240,28,240,94,240,152,240,202,240,248,240,8,241,30,241,88,241,104,241,140,241,184,241,218,241,252,241,46,242,170,242,202,242,248,242,10,243,94,243,156,243,234,243,14,244,72,244,90,244,120,244,140,244,176,244,184,244,192,244,200,244,10,245,204,245,74,246,106,246,42,247,158,247,113,255,186,3,86,0,21,0,206,255,23,0,79,0,134,0,226,0,136,255,129,255,146,0,161,0,35,1,93,1,110,1,55,1,126,1,118,1,231,0,108,1,111,1,140,1,142,1,236,0,61,1,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,204,1,247,1,55,2,57,2,60,2,65,2,68,2,70,2,72,2,75,2,81,2,119,2,132,2,134,2,137,2,143,2,145,2,147,2,149,2,152,2,158,2,196,2,208,2,247,2,3,3,42,3,54,3,93,3,105,3,144,3,162,3,179,3,182,3,189,3,191,3,195,3,198,3,200,3,230,3,237,3,245,3,254,3,1,4,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,153,255,218,1,212,0,15,0,242,1,222,0,255,1,153,255,97,0,45,2,153,255,153,255,153,255,153,255,176,255,9,0,59,0,19,0,38,1,38,1,203,255,194,255,178,2,179,2,223,2,225,2,228,2,232,2,133,0,54,1,148,0,74,1,160,0,124,1,18,3,20,3,145,1,40,1,21,3,221,2,85,0,210,2,214,255,68,1,252,1,16,3,60,3,61,3,62,3,166,2,201,2,151,1,69,0,150,0,194,0,188,0,33,1,45,1,147,1,205,1,229,1,56,2,105,2,161,2,212,2,11,3,24,3,56,3,63,3,69,3,74,3,78,3,80,3,113,3,124,3,132,3,163,3,168,3,190,1,142,3,143,3,176,3,181,3,133,3,187,3,199,3,210,3,155,3,224,3,225,3,188,3,228,3,231,3,242,3,33,1,250,3,9,4,19,4,22,4,25,4,32,4,166,3,205,3,229,3,232,3,234,3,133,3,244,3,251,3,36,4,246,3,236,3,252,3,207,3,0,4,208,3,16,4,11,4,23,4,21,4,253,3,239,3,27,4,29,4,7,4,10,4,59,4,2,4,58,4,60,4,240,3,241,3,65,4,12,4,44,4,35,4,45,4,47,4,48,4,49,4,81,4,87,4,52,4,26,4,56,4,66,4,55,4,91,4,93,4,34,4,24,4,104,4,114,4,116,4,100,4,121,4,124,4,125,4,127,4,107,4,111,4,113,4,117,4,106,4,118,4,119,4,120,4,123,4,110,4,126,4,128,4,82,4,88,4,89,4,92,4,90,4,101,4,99,4,103,4,147,4,151,4,95,4,140,4,96,4,97,4,142,4,122,4,131,4,133,4,136,4,143,4,187,4,190,4,200,4,201,4,208,4,209,4,210,4,211,4,108,4,129,4,109,4,177,4,184,4,204,4,55,1,26,5,145,0,139,2,2,0,192,0,140,2,82,1,12,3,92,0,92,0,92,0,92,0,85,0,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,88,0,88,0,88,0,87,0,79,1,71,1,88,3,88,3,92,0,92,0,92,0,92,0,185,2,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,76,0,39,3,74,0,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,79,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,12,3,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,100,1,40,3,8,3,189,2,177,2,177,2,86,0,83,0,166,0,1,1,41,3,203,2,174,1,86,0,83,0,166,0,68,1,185,2,88,3,88,3,201,0,158,0,20,1,131,1,15,1,130,1,188,0,177,2,177,2,60,3,86,0,83,0,166,0,13,1,65,3,49,0,123,0,87,0,79,1,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,239,0,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,251,2,77,1,76,1,216,0,152,1,138,1,69,0,231,0,137,1,178,2,179,2,140,1,142,3,251,0,98,1,250,0,32,1,59,1,174,1,140,3,174,1,141,3,89,0,89,0,88,0,88,0,88,0,87,0,79,1,135,1,88,3,88,3,178,2,179,2,183,0,95,0,123,0,128,1,125,1,124,1,65,3,31,0,65,3,49,0,144,3,144,3,239,2,240,2,123,1,123,0,55,1,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,114,0,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,174,1,152,1,143,1,179,1,145,2,88,3,88,3,90,1,57,0,232,0,60,3,109,0,192,2,110,1,177,2,177,2,107,1,57,3,248,2,97,0,237,2,240,2,65,3,49,0,196,2,196,2,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,167,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,114,0,22,0,105,1,176,2,58,0,152,1,134,1,251,0,93,1,240,0,213,0,250,2,177,2,177,2,79,3,173,2,115,0,105,1,231,0,137,1,177,2,177,2,140,1,183,0,177,2,177,2,128,1,125,1,124,1,105,1,88,3,88,3,178,2,179,2,160,0,159,0,223,0,123,1,226,2,25,0,38,3,195,2,73,3,143,0,177,2,177,2,67,3,136,1,83,1,254,2,254,2,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,146,3,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,72,3,72,3,72,3,10,1,1,1,178,2,179,2,10,3,194,2,86,0,83,0,166,0,219,0,178,2,179,2,225,2,1,0,178,2,179,2,177,2,177,2,177,2,177,2,174,1,86,0,83,0,166,0,249,0,176,2,169,3,88,3,88,3,171,1,187,2,188,2,60,3,42,1,178,2,179,2,221,0,174,2,115,0,123,0,176,3,27,3,65,3,48,0,86,1,49,1,202,3,79,3,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,114,0,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,172,3,73,3,167,2,201,2,173,1,67,3,174,1,251,0,98,1,250,0,99,1,32,1,178,2,179,2,178,2,179,2,29,1,173,3,84,1,203,3,31,1,210,0,23,0,174,0,25,3,64,3,174,1,97,1,65,3,10,0,88,3,88,3,24,0,174,3,151,0,241,2,72,3,72,3,72,3,26,3,200,3,10,5,65,1,142,1,10,5,100,1,96,1,242,2,65,3,49,0,167,3,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,120,1,114,0,139,3,193,2,174,1,139,3,72,1,122,3,114,0,65,3,10,0,198,3,174,1,89,3,89,3,64,1,189,0,163,0,64,3,165,0,174,1,138,3,88,1,67,1,138,3,136,3,65,3,10,0,197,3,50,1,88,3,88,3,187,0,163,1,65,3,10,0,220,0,101,3,104,3,64,3,222,0,147,1,65,3,49,0,195,4,25,3,68,0,169,3,150,1,245,0,66,0,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,93,3,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,148,1,213,0,250,2,66,3,89,1,114,0,172,3,134,3,112,1,215,2,5,0,60,1,192,0,140,1,4,3,12,3,13,1,230,0,242,0,3,3,244,0,141,1,164,0,173,3,129,1,123,0,91,1,55,0,99,1,73,1,88,3,88,3,216,2,77,1,76,1,176,2,200,3,11,5,212,2,174,3,11,5,157,1,214,0,65,3,9,0,106,1,30,1,187,3,115,0,206,2,55,1,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,144,3,144,3,20,5,20,5,246,2,88,3,88,3,69,1,198,3,12,3,65,3,35,0,235,2,208,2,78,1,187,2,188,2,209,3,140,2,82,1,243,0,233,2,152,3,152,3,113,1,187,0,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,114,0,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,174,1,186,3,174,1,112,0,54,1,174,1,181,2,61,1,186,2,144,1,174,1,25,3,103,1,174,1,249,3,174,1,192,0,174,1,145,1,12,3,174,1,104,1,65,3,36,0,65,3,12,0,174,1,65,3,27,0,60,1,88,3,88,3,65,3,37,0,20,0,65,3,38,0,65,3,39,0,65,3,28,0,72,0,65,3,29,0,151,2,152,2,153,2,8,1,65,3,40,0,234,0,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,55,1,174,1,186,2,174,1,149,3,147,0,174,1,165,0,148,3,19,1,65,3,41,0,174,1,12,3,174,1,21,0,174,1,3,1,174,1,6,1,18,1,174,1,111,1,65,3,42,0,65,3,11,0,174,1,65,3,43,0,235,0,88,3,88,3,25,3,65,3,99,0,65,3,44,0,65,3,45,0,65,3,32,0,75,0,65,3,46,0,49,1,199,3,1,1,1,1,65,3,47,0,55,1,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,174,1,186,0,185,0,184,0,238,0,88,3,88,3,138,2,2,0,40,4,65,3,33,0,227,2,217,0,218,0,1,1,203,3,1,1,170,1,61,1,1,1,6,3,65,3,117,0,1,1,55,1,93,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,174,1,62,1,124,0,212,0,163,0,88,3,88,3,175,3,132,3,130,3,65,3,118,0,247,2,214,2,213,2,1,1,243,2,33,1,33,1,221,2,222,2,193,3,65,3,119,0,170,2,55,1,93,0,82,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,174,1,204,2,246,0,66,1,75,1,88,3,88,3,0,1,114,0,101,1,65,3,53,0,40,3,145,3,145,3,164,3,156,0,160,1,164,1,168,1,162,3,41,3,65,3,34,0,108,1,55,1,253,0,94,0,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,174,1,114,0,114,0,114,0,192,3,88,3,88,3,51,1,2,1,62,3,65,3,100,0,191,0,252,0,121,1,11,1,68,0,197,0,68,0,5,1,204,2,1,3,65,3,50,0,71,0,143,3,143,3,7,1,84,0,100,3,103,3,92,3,92,3,91,0,91,0,92,0,92,0,92,0,92,0,174,1,90,0,90,0,90,0,90,0,89,0,89,0,88,0,88,0,88,0,87,0,79,1,80,0,169,1,34,3,3,0,190,4,191,0,174,1,9,1,80,1,80,1,65,3,101,0,229,2,80,0,169,1,129,3,3,0,211,2,210,2,172,1,209,2,80,1,80,1,174,1,125,3,14,1,174,1,197,0,65,3,102,0,174,1,32,3,172,1,174,1,183,2,174,1,75,3,111,0,158,1,174,1,16,3,153,1,174,1,63,3,174,1,65,3,98,0,123,0,65,3,116,0,79,3,158,1,65,3,49,0,11,3,65,3,113,0,65,3,106,0,226,0,123,0,65,3,105,0,79,3,65,3,103,0,65,3,104,0,23,3,155,1,77,0,78,0,34,1,156,1,174,1,35,1,114,0,79,0,176,1,175,1,133,1,174,1,67,3,77,0,78,0,129,3,71,3,152,1,154,1,174,1,79,0,176,1,175,1,116,1,191,2,67,3,65,3,52,0,174,1,80,0,169,1,174,1,3,0,65,3,54,0,4,3,75,3,80,1,80,1,172,2,3,3,65,3,51,0,72,3,72,3,72,3,74,3,19,0,172,1,160,2,65,3,26,0,159,2,65,3,30,0,161,2,72,3,72,3,72,3,74,3,19,0,207,0,149,2,22,1,48,1,148,0,24,1,158,1,26,1,248,0,102,1,54,3,126,1,6,0,92,1,161,0,17,1,80,0,169,1,79,3,3,0,166,3,127,3,208,2,126,3,80,1,80,1,40,1,157,0,159,1,241,0,28,1,162,2,190,3,194,0,185,3,172,1,183,3,180,3,77,0,78,0,9,3,63,1,56,0,59,0,135,0,79,0,176,1,175,1,121,0,66,0,67,3,146,0,128,0,94,1,158,1,51,3,130,0,95,1,131,0,132,0,133,0,119,1,173,0,107,0,138,0,149,0,79,3,109,1,178,0,62,0,70,0,169,1,168,3,3,0,59,3,121,3,115,1,255,0,80,1,80,1,24,3,72,3,72,3,72,3,74,3,19,0,77,0,78,0,147,3,172,1,208,0,179,0,144,0,79,0,176,1,175,1,117,1,4,1,67,3,180,0,70,1,163,2,181,0,52,1,232,2,132,1,231,2,219,2,158,1,206,2,230,2,218,2,200,2,146,1,53,1,199,2,16,1,20,3,65,0,198,2,79,3,197,2,21,1,193,0,21,3,19,3,23,1,108,3,73,0,72,3,72,3,72,3,74,3,19,0,18,3,25,1,162,1,27,1,166,1,227,0,77,0,78,0,74,1,228,0,229,0,96,0,255,2,79,0,176,1,175,1,151,1,67,0,67,3,215,0,36,1,37,1,149,1,38,1,47,1,46,1,45,1,204,0,43,1,39,1,202,0,164,2,169,2,7,0,177,1,157,2,203,0,205,0,206,0,125,0,110,0,57,1,178,1,155,2,154,2,146,2,168,0,224,0,237,0,72,3,72,3,72,3,74,3,19,0,120,0,144,2,81,1,236,0,155,0,167,0,85,1,233,0,58,1,108,0,137,3,135,3,58,3,127,0,126,0,244,2,170,0,129,0,172,0,247,0,160,3,134,0,136,0,171,0,60,0,61,0,123,0,169,0,137,0,165,3,175,0,176,0,159,3,8,0,13,0,177,0,254,0,150,3,139,0,191,0,156,3,140,0,114,1,166,2,150,0,118,1,182,0,18,1,12,1,141,0,122,0,63,0,14,0,122,1,15,0,127,1,64,0,225,0,78,3,77,3,106,3,16,0,4,0,217,2,253,2,2,3,162,0,139,1,209,0,211,0,142,0,33,3,110,3,28,3,56,1,71,0,68,0,107,3,105,3,171,3,190,0,161,1,170,3,17,0,195,0,196,0,152,0,18,0,207,3,199,0,208,3,153,0,198,0,154,0,165,1,109,3,76,3,184,2,81,0,200,0,41,1,87,1,251,3,250,3,44,1,141,2,16,16,2,16,5,0,33,4,75,5,46,4,180,4,180,4,180,4,90,0,60,0,237,255,58,0,58,0,186,0,180,4,180,4,180,4,180,4,180,4,180,4,180,4,67,0,67,0,182,0,80,1,218,0,38,2,135,0,7,1,84,1,161,1,238,1,59,2,110,2,187,2,8,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,59,3,110,3,59,3,161,3,212,3,212,3,132,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,234,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,180,4,185,255,209,255,209,255,209,255,209,255,209,255,250,255,88,0,190,255,218,0,218,0,162,1,239,1,23,2,23,2,33,0,43,0,10,0,226,255,167,255,167,255,167,255,11,0,169,1,169,1,12,1,199,1,93,2,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,172,2,138,0,10,0,43,0,125,0,125,0,125,0,125,0,125,0,125,0,167,255,167,255,167,255,228,0,85,1,85,1,207,0,20,1,44,1,24,1,96,1,98,1,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,51,2,51,2,51,2,218,0,218,0,179,1,218,0,218,0,218,0,67,2,218,0,218,0,73,2,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,218,0,69,2,0,3,199,2,199,2,199,2,192,2,215,0,41,4,244,2,178,1,197,2,197,2,200,2,178,1,200,2,22,2,90,3,129,2,185,3,197,2,168,255,185,3,185,3,99,3,233,1,191,1,176,4,94,4,94,4,179,4,179,4,94,4,205,4,160,4,102,4,218,4,218,4,218,4,218,4,94,4,226,4,102,4,205,4,160,4,160,4,102,4,94,4,226,4,115,4,213,4,94,4,94,4,226,4,253,4,94,4,226,4,94,4,226,4,253,4,181,4,181,4,181,4,235,4,253,4,181,4,186,4,181,4,235,4,181,4,181,4,171,4,194,4,171,4,194,4,171,4,194,4,171,4,194,4,94,4,94,4,174,4,253,4,230,4,230,4,253,4,199,4,207,4,206,4,212,4,102,4,66,5,68,5,83,5,83,5,93,5,93,5,93,5,93,5,167,255,167,255,167,255,167,255,167,255,167,255,221,1,35,2,130,1,50,3,238,2,253,2,188,2,238,3,219,2,243,3,247,3,248,3,249,3,180,3,68,3,167,3,191,2,255,3,31,4,40,4,53,4,87,3,150,3,63,4,61,4,99,2,112,5,114,5,97,5,236,4,105,5,53,5,108,5,102,5,103,5,7,5,254,4,17,5,9,5,110,5,8,5,118,5,134,5,13,5,6,5,60,5,61,5,32,5,116,5,109,5,24,5,146,5,143,5,127,5,43,5,11,5,98,5,128,5,99,5,94,5,113,5,49,5,135,5,138,5,141,5,50,5,56,5,142,5,115,5,144,5,145,5,140,5,147,5,117,5,148,5,149,5,119,5,125,5,150,5,151,5,152,5,63,5,154,5,157,5,155,5,156,5,59,5,160,5,161,5,158,5,159,5,163,5,64,5,164,5,162,5,165,5,166,5,164,5,169,5,170,5,171,5,173,5,174,5,178,5,176,5,180,5,179,5,172,5,181,5,182,5,184,5,185,5,181,5,187,5,186,5,188,5,189,5,191,5,82,5,92,5,95,5,96,5,192,5,204,5,219,5,214,3,20,5,20,5,20,5,190,4,190,4,190,4,25,5,20,5,85,4,114,4,114,4,250,4,25,5,25,5,25,5,25,5,25,5,25,5,188,4,25,5,25,5,25,5,20,5,25,5,89,4,120,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,249,4,251,4,128,4,127,4,230,4,101,4,125,4,118,4,122,4,191,4,184,4,185,4,183,4,187,4,192,4,25,5,121,4,153,4,168,4,152,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,162,4,167,4,174,4,166,4,163,4,155,4,154,4,156,4,157,4,25,5,25,5,240,3,50,4,25,5,25,5,158,4,25,5,252,3,159,4,171,4,170,4,169,4,247,3,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,214,3,20,5,25,5,25,5,20,5,20,5,20,5,20,5,20,5,20,5,12,5,89,4,79,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,0,5,254,4,25,5,203,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,85,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,220,3,25,5,223,4,85,4,85,4,85,4,87,4,65,4,77,4,222,3,124,4,103,4,103,4,235,4,124,4,235,4,21,4,44,4,18,4,114,4,103,4,186,4,114,4,114,4,86,4,77,4,25,5,5,5,94,4,94,4,253,4,253,4,94,4,133,4,54,4,124,4,61,4,61,4,61,4,61,4,94,4,237,3,124,4,133,4,54,4,54,4,124,4,94,4,237,3,229,4,227,4,94,4,94,4,237,3,196,4,94,4,237,3,94,4,237,3,196,4,52,4,52,4,52,4,36,4,196,4,52,4,21,4,52,4,36,4,52,4,52,4,107,4,102,4,107,4,102,4,107,4,102,4,107,4,102,4,94,4,94,4,25,5,196,4,200,4,200,4,196,4,119,4,108,4,117,4,115,4,124,4,243,3,39,4,230,3,230,3,219,3,219,3,219,3,219,3,17,5,17,5,12,5,23,4,23,4,6,4,25,5,25,5,25,5,25,5,25,5,25,5,254,3,25,5,205,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,140,4,25,5,215,3,7,5,25,5,25,5,4,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,233,4,25,5,25,5,25,5,25,5,25,5,25,5,226,4,225,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,68,4,25,5,25,5,25,5,72,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,116,4,25,5,109,4,25,5,189,4,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,25,5,22,5,25,5,25,5,25,5,21,5,25,5,25,5,25,5,25,5,25,5,142,4,25,5,141,4,145,4,25,5,228,3,25,5,16,0,2,2,12,0,14,0,24,0,31,0,59,0,15,39,97,99,111,115,0,97,115,105,110,0,97,116,97,110,0,97,116,110,50,0,97,116,97,110,50,0,97,99,111,115,104,0,97,115,105,110,104,0,97,116,97,110,104,0,100,105,102,102,101,114,101,110,99,101,0,100,101,103,114,101,101,115,0,114,97,100,105,97,110,115,0,99,111,115,0,115,105,110,0,116,97,110,0,99,111,116,0,99,111,115,104,0,115,105,110,104,0,116,97,110,104,0,99,111,116,104,0,101,120,112,0,108,111,103,49,48,0,112,111,119,101,114,0,115,105,103,110,0,115,113,114,116,0,115,113,117,97,114,101,0,99,101,105,108,0,102,108,111,111,114,0,112,105,0,114,101,112,108,105,99,97,116,101,0,99,104,97,114,105,110,100,101,120,0,108,101,102,116,115,116,114,0,114,105,103,104,116,115,116,114,0,114,101,118,101,114,115,101,0,112,114,111,112,101,114,0,112,97,100,108,0,112,97,100,114,0,112,97,100,99,0,115,116,114,102,105,108,116,101,114,0,115,116,100,101,118,0,118,97,114,105,97,110,99,101,0,109,101,100,105,97,110,0,108,111,119,101,114,95,113,117,97,114,116,105,108,101,0,117,112,112,101,114,95,113,117,97,114,116,105,108,101,0,102,111,114,32,110,111,100,101,0,97,114,103,99,61,61,49,0,99,47,101,120,116,101,110,115,105,111,110,45,102,117,110,99,116,105,111,110,115,46,99,0,97,99,111,115,70,117,110,99,0,97,115,105,110,70,117,110,99,0,97,116,97,110,70,117,110,99,0,97,114,103,99,61,61,50,0,97,116,110,50,70,117,110,99,0,97,99,111,115,104,70,117,110,99,0,97,115,105,110,104,70,117,110,99,0,97,116,97,110,104,70,117,110,99,0,100,105,102,102,101,114,101,110,99,101,70,117,110,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,0,1,2,0,0,2,2,4,5,5,0,1,2,6,2,3,0,1,0,2,0,2,0,0,0,0,0,0,0,1,2,3,0,1,2,0,0,2,2,4,5,5,0,1,2,6,2,3,0,1,0,2,0,2,0,0,0,0,0,63,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,114,97,100,50,100,101,103,70,117,110,99,0,100,101,103,50,114,97,100,70,117,110,99,0,99,111,115,70,117,110,99,0,115,105,110,70,117,110,99,0,116,97,110,70,117,110,99,0,99,111,116,70,117,110,99,0,99,111,115,104,70,117,110,99,0,115,105,110,104,70,117,110,99,0,116,97,110,104,70,117,110,99,0,99,111,116,104,70,117,110,99,0,101,120,112,70,117,110,99,0,108,111,103,70,117,110,99,0,108,111,103,49,48,70,117,110,99,0,112,111,119,101,114,70,117,110,99,0,115,105,103,110,70,117,110,99,0,115,113,114,116,70,117,110,99,0,115,113,117,97,114,101,70,117,110,99,0,99,101,105,108,70,117,110,99,0,102,108,111,111,114,70,117,110,99,0,100,111,109,97,105,110,32,101,114,114,111,114,0,97,114,103,99,61,61,51,32,124,124,97,114,103,99,61,61,50,0,99,104,97,114,105,110,100,101,120,70,117,110,99,0,108,101,102,116,70,117,110,99,0,114,105,103,104,116,70,117,110,99,0,49,61,61,97,114,103,99,0,114,101,118,101,114,115,101,70,117,110,99,0,112,114,111,112,101,114,70,117,110,99,0,112,97,100,108,70,117,110,99,0,122,60,61,122,84,101,114,109,0,115,113,108,105,116,101,51,85,116,102,56,67,104,97,114,76,101,110,0,112,97,100,114,70,117,110,99,0,112,97,100,99,70,117,110,99,0,115,116,114,102,105,108,116,101,114,70,117,110,99,0,118,97,114,105,97,110,99,101,83,116,101,112,0,109,111,100,101,83,116,101,112,0,51,46,49,49,46,48,0,83,81,76,73,84,69,95,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,3,5,1,5,1,5,2,5,2,5,1,5,1,5,4,5,3,5,1,5,1,5,2,5,2,5,1,5,1,5,115,116,114,105,110,103,32,111,114,32,98,108,111,98,32,116,111,111,32,98,105,103,0,99,97,110,110,111,116,32,111,112,101,110,32,118,105,114,116,117,97,108,32,116,97,98,108,101,58,32,37,115,0,99,97,110,110,111,116,32,111,112,101,110,32,116,97,98,108,101,32,119,105,116,104,111,117,116,32,114,111,119,105,100,58,32,37,115,0,99,97,110,110,111,116,32,111,112,101,110,32,118,105,101,119,58,32,37,115,0,110,111,32,115,117,99,104,32,99,111,108,117,109,110,58,32,34,37,115,34,0,102,111,114,101,105,103,110,32,107,101,121,0,105,110,100,101,120,101,100,0,99,97,110,110,111,116,32,111,112,101,110,32,37,115,32,99,111,108,117,109,110,32,102,111,114,32,119,114,105,116,105,110,103,0,148,0,0,0,54,0,0,0,28,1,1,0,70,0,7,1,47,0,0,1,33,1,0,0,13,0,2,0,61,0,0,0,21,0,0,0,37,115,0,42,63,91,0,37,95,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,12,12,12,12,12,12,12,12,12,12,0,0,0,0,0,0,0,10,10,10,10,10,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,64,0,42,42,42,42,42,42,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,0,0,0,0,0,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,4,3,2,5,116,114,105,103,103,101,114,0,116,101,109,112,0,50,48,49,54,45,48,50,45,49,53,32,49,55,58,50,57,58,50,52,32,51,100,56,54,50,102,50,48,55,101,51,97,100,99,48,48,102,55,56,48,54,54,55,57,57,97,99,53,97,56,99,50,56,50,52,51,48,97,53,102,0,117,110,107,110,111,119,110,32,100,97,116,97,98,97,115,101,58,32,37,115,0,73,78,84,69,71,69,82,0,57,50,50,51,51,55,50,48,51,54,56,53,52,55,55,53,56,48,0,2,2,3,5,3,4,5,4,0,1,2,4,9,12,15,20,111,110,111,102,102,97,108,115,101,121,101,115,116,114,117,101,120,116,114,97,102,117,108,108,0,1,0,0,0,1,1,3,2,76,105,117,74,0,45,0,0,82,0,77,0,0,42,12,78,15,0,116,85,54,112,0,19,0,0,121,0,119,115,0,22,93,0,9,0,0,70,71,0,69,6,0,48,90,102,0,118,101,0,0,44,0,103,24,0,17,0,122,53,23,0,5,110,25,96,0,0,124,106,60,123,57,28,55,0,91,0,100,26,0,99,0,0,0,95,92,97,88,109,14,39,108,0,81,0,18,89,111,32,0,120,80,113,62,46,84,0,0,94,40,59,114,0,36,0,0,29,0,86,63,64,0,20,61,0,56,7,7,5,4,6,4,5,3,6,7,3,6,6,7,7,3,8,2,6,5,4,4,3,10,4,6,11,6,2,7,5,5,9,6,9,9,7,10,10,4,6,2,3,9,4,2,6,5,7,4,5,7,6,6,5,6,5,5,9,7,7,3,2,4,4,7,3,6,4,7,6,12,6,9,4,6,5,4,7,6,5,6,7,5,4,5,6,5,7,3,7,13,2,2,4,6,6,8,5,17,12,7,8,8,2,4,4,4,4,4,2,2,6,5,8,5,8,3,5,5,6,4,9,3,82,69,73,78,68,69,88,69,68,69,83,67,65,80,69,65,67,72,69,67,75,69,89,66,69,70,79,82,69,73,71,78,79,82,69,71,69,88,80,76,65,73,78,83,84,69,65,68,68,65,84,65,66,65,83,69,76,69,67,84,65,66,76,69,70,84,72,69,78,68,69,70,69,82,82,65,66,76,69,76,83,69,88,67,69,80,84,82,65,78,83,65,67,84,73,79,78,65,84,85,82,65,76,84,69,82,65,73,83,69,88,67,76,85,83,73,86,69,88,73,83,84,83,65,86,69,80,79,73,78,84,69,82,83,69,67,84,82,73,71,71,69,82,69,70,69,82,69,78,67,69,83,67,79,78,83,84,82,65,73,78,84,79,70,70,83,69,84,69,77,80,79,82,65,82,89,85,78,73,81,85,69,82,89,87,73,84,72,79,85,84,69,82,69,76,69,65,83,69,65,84,84,65,67,72,65,86,73,78,71,82,79,85,80,68,65,84,69,66,69,71,73,78,78,69,82,69,67,85,82,83,73,86,69,66,69,84,87,69,69,78,79,84,78,85,76,76,73,75,69,67,65,83,67,65,68,69,76,69,84,69,67,65,83,69,67,79,76,76,65,84,69,67,82,69,65,84,69,67,85,82,82,69,78,84,95,68,65,84,69,68,69,84,65,67,72,73,77,77,69,68,73,65,84,69,74,79,73,78,83,69,82,84,77,65,84,67,72,80,76,65,78,65,76,89,90,69,80,82,65,71,77,65,66,79,82,84,86,65,76,85,69,83,86,73,82,84,85,65,76,73,77,73,84,87,72,69,78,87,72,69,82,69,78,65,77,69,65,70,84,69,82,69,80,76,65,67,69,65,78,68,69,70,65,85,76,84,65,85,84,79,73,78,67,82,69,77,69,78,84,67,65,83,84,67,79,76,85,77,78,67,79,77,77,73,84,67,79,78,70,76,73,67,84,67,82,79,83,83,67,85,82,82,69,78,84,95,84,73,77,69,83,84,65,77,80,82,73,77,65,82,89,68,69,70,69,82,82,69,68,73,83,84,73,78,67,84,68,82,79,80,70,65,73,76,70,82,79,77,70,85,76,76,71,76,79,66,89,73,70,73,83,78,85,76,76,79,82,68,69,82,69,83,84,82,73,67,84,82,73,71,72,84,82,79,76,76,66,65,67,75,82,79,87,85,78,73,79,78,85,83,73,78,71,86,65,67,85,85,77,86,73,69,87,73,78,73,84,73,65,76,76,89,67,28,140,42,84,44,104,53,35,113,46,47,50,2,49,142,41,24,119,16,98,138,11,112,139,117,6,30,107,98,141,57,9,20,13,118,62,105,99,131,55,54,111,21,21,71,103,3,25,66,98,14,34,128,127,110,5,98,58,74,77,19,52,101,50,37,33,109,136,95,17,69,43,8,124,108,51,4,32,56,29,120,65,129,137,130,68,31,59,72,100,106,15,75,38,39,10,40,98,69,69,102,7,121,73,114,45,123,98,50,36,18,76,126,60,98,12,61,115,125,63,64,48,116,0,0,0,0,4,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,13,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,21,0,0,0,0,0,50,0,43,3,47,0,0,0,0,30,0,58,0,38,0,0,0,1,66,0,0,67,0,41,0,0,0,0,0,0,49,65,0,0,0,0,31,52,16,34,10,0,0,0,0,0,0,0,11,72,79,0,8,0,104,98,0,107,0,87,0,75,51,0,27,37,73,83,0,35,68,0,0,95,82,79,87,73,68,95,0,82,79,87,73,68,0,79,73,68,0,115,113,108,105,116,101,95,116,101,109,112,95,109,97,115,116,101,114,0,115,113,108,105,116,101,95,109,97,115,116,101,114,0,49,0,67,82,69,65,84,69,32,84,65,66,76,69,32,120,40,116,121,112,101,32,116,101,120,116,44,110,97,109,101,32,116,101,120,116,44,116,98,108,95,110,97,109,101,32,116,101,120,116,44,114,111,111,116,112,97,103,101,32,105,110,116,101,103,101,114,44],"i8",4,l.aa+10622);z([115,113,108,32,116,101,120,116,41,0,97,116,116,97,99,104,101,100,32,100,97,116,97,98,97,115,101,115,32,109,117,115,116,32,117,115,101,32,116,104,101,32,115,97,109,101,32,116,101,120,116,32,101,110,99,111,100,105,110,103,32,97,115,32,109,97,105,110,32,100,97,116,97,98,97,115,101,0,117,110,115,117,112,112,111,114,116,101,100,32,102,105,108,101,32,102,111,114,109,97,116,0,83,69,76,69,67,84,32,110,97,109,101,44,32,114,111,111,116,112,97,103,101,44,32,115,113,108,32,70,82,79,77,32,34,37,119,34,46,37,115,32,79,82,68,69,82,32,66,89,32,114,111,119,105,100,0,115,113,108,105,116,101,95,115,116,97,116,49,0,83,69,76,69,67,84,32,116,98,108,44,105,100,120,44,115,116,97,116,32,70,82,79,77,32,37,81,46,115,113,108,105,116,101,95,115,116,97,116,49,0,117,110,111,114,100,101,114,101,100,42,0,115,122,61,91,48,45,57,93,42,0,110,111,115,107,105,112,115,99,97,110,42,0,99,114,101,97,116,101,32,0,105,110,118,97,108,105,100,32,114,111,111,116,112,97,103,101,0,63,0,109,97,108,102,111,114,109,101,100,32,100,97,116,97,98,97,115,101,32,115,99,104,101,109,97,32,40,37,115,41,0,37,122,32,45,32,37,115,0,100,97,116,97,98,97,115,101,32,99,111,114,114,117,112,116,105,111,110,32,97,116,32,108,105,110,101,32,37,100,32,111,102,32,91,37,46,49,48,115,93,0,117,110,97,98,108,101,32,116,111,32,100,101,108,101,116,101,47,109,111,100,105,102,121,32,99,111,108,108,97,116,105,111,110,32,115,101,113,117,101,110,99,101,32,100,117,101,32,116,111,32,97,99,116,105,118,101,32,115,116,97,116,101,109,101,110,116,115,0,78,79,67,65,83,69,0,82,84,82,73,77,0,109,97,105,110,0,115,105,109,112,108,101,0,112,111,114,116,101,114,0,117,110,105,99,111,100,101,54,49,0,102,116,115,51,95,116,111,107,101,110,105,122,101,114,0,115,110,105,112,112,101,116,0,111,102,102,115,101,116,115,0,109,97,116,99,104,105,110,102,111,0,111,112,116,105,109,105,122,101,0,102,116,115,51,0,102,116,115,52,0,102,116,115,51,116,111,107,101,110,105,122,101,0,67,82,69,65,84,69,32,84,65,66,76,69,32,120,40,105,110,112,117,116,44,32,116,111,107,101,110,44,32,115,116,97,114,116,44,32,101,110,100,44,32,112,111,115,105,116,105,111,110,41,0,117,110,107,110,111,119,110,32,116,111,107,101,110,105,122,101,114,58,32,37,115,0,65,76,84,69,82,32,84,65,66,76,69,32,37,81,46,39,37,113,95,99,111,110,116,101,110,116,39,32,32,82,69,78,65,77,69,32,84,79,32,39,37,113,95,99,111,110,116,101,110,116,39,59,0,65,76,84,69,82,32,84,65,66,76,69,32,37,81,46,39,37,113,95,100,111,99,115,105,122,101,39,32,32,82,69,78,65,77,69,32,84,79,32,39,37,113,95,100,111,99,115,105,122,101,39,59,0,65,76,84,69,82,32,84,65,66,76,69,32,37,81,46,39,37,113,95,115,116,97,116,39,32,32,82,69,78,65,77,69,32,84,79,32,39,37,113,95,115,116,97,116,39,59,0,65,76,84,69,82,32,84,65,66,76,69,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,32,82,69,78,65,77,69,32,84,79,32,39,37,113,95,115,101,103,109,101,110,116,115,39,59,0,65,76,84,69,82,32,84,65,66,76,69,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,32,32,82,69,78,65,77,69,32,84,79,32,39,37,113,95,115,101,103,100,105,114,39,59,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,99,111,110,116,101,110,116,39,32,87,72,69,82,69,32,114,111,119,105,100,32,61,32,63,0,83,69,76,69,67,84,32,78,79,84,32,69,88,73,83,84,83,40,83,69,76,69,67,84,32,100,111,99,105,100,32,70,82,79,77,32,37,81,46,39,37,113,95,99,111,110,116,101,110,116,39,32,87,72,69,82,69,32,114,111,119,105,100,33,61,63,41,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,99,111,110,116,101,110,116,39,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,100,111,99,115,105,122,101,39,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,115,116,97,116,39,0,83,69,76,69,67,84,32,37,115,32,87,72,69,82,69,32,114,111,119,105,100,61,63,0,83,69,76,69,67,84,32,40,83,69,76,69,67,84,32,109,97,120,40,105,100,120,41,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,41,32,43,32,49,0,82,69,80,76,65,67,69,32,73,78,84,79,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,40,98,108,111,99,107,105,100,44,32,98,108,111,99,107,41,32,86,65,76,85,69,83,40,63,44,32,63,41,0,83,69,76,69,67,84,32,99,111,97,108,101,115,99,101,40,40,83,69,76,69,67,84,32,109,97,120,40,98,108,111,99,107,105,100,41,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,41,32,43,32,49,44,32,49,41,0,82,69,80,76,65,67,69,32,73,78,84,79,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,86,65,76,85,69,83,40,63,44,63,44,63,44,63,44,63,44,63,41,0,83,69,76,69,67,84,32,105,100,120,44,32,115,116,97,114,116,95,98,108,111,99,107,44,32,108,101,97,118,101,115,95,101,110,100,95,98,108,111,99,107,44,32,101,110,100,95,98,108,111,99,107,44,32,114,111,111,116,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,32,79,82,68,69,82,32,66,89,32,105,100,120,32,65,83,67,0,83,69,76,69,67,84,32,105,100,120,44,32,115,116,97,114,116,95,98,108,111,99,107,44,32,108,101,97,118,101,115,95,101,110,100,95,98,108,111,99,107,44,32,101,110,100,95,98,108,111,99,107,44,32,114,111,111,116,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,66,69,84,87,69,69,78,32,63,32,65,78,68,32,63,79,82,68,69,82,32,66,89,32,108,101,118,101,108,32,68,69,83,67,44,32,105,100,120,32,65,83,67,0,83,69,76,69,67,84,32,99,111,117,110,116,40,42,41,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,0,83,69,76,69,67,84,32,109,97,120,40,108,101,118,101,108,41,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,66,69,84,87,69,69,78,32,63,32,65,78,68,32,63,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,32,87,72,69,82,69,32,98,108,111,99,107,105,100,32,66,69,84,87,69,69,78,32,63,32,65,78,68,32,63,0,73,78,83,69,82,84,32,73,78,84,79,32,37,81,46,39,37,113,95,99,111,110,116,101,110,116,39,32,86,65,76,85,69,83,40,37,115,41,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,100,111,99,115,105,122,101,39,32,87,72,69,82,69,32,100,111,99,105,100,32,61,32,63,0,82,69,80,76,65,67,69,32,73,78,84,79,32,37,81,46,39,37,113,95,100,111,99,115,105,122,101,39,32,86,65,76,85,69,83,40,63,44,63,41,0,83,69,76,69,67,84,32,115,105,122,101,32,70,82,79,77,32,37,81,46,39,37,113,95,100,111,99,115,105,122,101,39,32,87,72,69,82,69,32,100,111,99,105,100,61,63,0,83,69,76,69,67,84,32,118,97,108,117,101,32,70,82,79,77,32,37,81,46,39,37,113,95,115,116,97,116,39,32,87,72,69,82,69,32,105,100,61,63,0,82,69,80,76,65,67,69,32,73,78,84,79,32,37,81,46,39,37,113,95,115,116,97,116,39,32,86,65,76,85,69,83,40,63,44,63,41,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,66,69,84,87,69,69,78,32,63,32,65,78,68,32,63,0,83,69,76,69,67,84,32,63,32,85,78,73,79,78,32,83,69,76,69,67,84,32,108,101,118,101,108,32,47,32,40,49,48,50,52,32,42,32,63,41,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,0,83,69,76,69,67,84,32,108,101,118,101,108,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,71,82,79,85,80,32,66,89,32,108,101,118,101,108,32,72,65,86,73,78,71,32,99,111,117,110,116,40,42,41,62,61,63,32,32,79,82,68,69,82,32,66,89,32,40,108,101,118,101,108,32,37,37,32,49,48,50,52,41,32,65,83,67,32,76,73,77,73,84,32,49,0,83,69,76,69,67,84,32,50,32,42,32,116,111,116,97,108,40,49,32,43,32,108,101,97,118,101,115,95,101,110,100,95,98,108,111,99,107,32,45,32,115,116,97,114,116,95,98,108,111,99,107,41,32,32,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,32,65,78,68,32,105,100,120,32,60,32,63,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,32,65,78,68,32,105,100,120,32,61,32,63,0,85,80,68,65,84,69,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,83,69,84,32,105,100,120,32,61,32,63,32,87,72,69,82,69,32,108,101,118,101,108,61,63,32,65,78,68,32,105,100,120,61,63,0,83,69,76,69,67,84,32,105,100,120,44,32,115,116,97,114,116,95,98,108,111,99,107,44,32,108,101,97,118,101,115,95,101,110,100,95,98,108,111,99,107,44,32,101,110,100,95,98,108,111,99,107,44,32,114,111,111,116,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,32,65,78,68,32,105,100,120,32,61,32,63,0,85,80,68,65,84,69,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,83,69,84,32,115,116,97,114,116,95,98,108,111,99,107,32,61,32,63,44,32,114,111,111,116,32,61,32,63,87,72,69,82,69,32,108,101,118,101,108,32,61,32,63,32,65,78,68,32,105,100,120,32,61,32,63,0,83,69,76,69,67,84,32,49,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,32,87,72,69,82,69,32,98,108,111,99,107,105,100,61,63,32,65,78,68,32,98,108,111,99,107,32,73,83,32,78,85,76,76,0,83,69,76,69,67,84,32,105,100,120,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,61,63,32,79,82,68,69,82,32,66,89,32,49,32,65,83,67,0,83,69,76,69,67,84,32,109,97,120,40,32,108,101,118,101,108,32,37,37,32,49,48,50,52,32,41,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,0,83,69,76,69,67,84,32,108,101,118,101,108,44,32,105,100,120,44,32,101,110,100,95,98,108,111,99,107,32,70,82,79,77,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,87,72,69,82,69,32,108,101,118,101,108,32,66,69,84,87,69,69,78,32,63,32,65,78,68,32,63,32,79,82,68,69,82,32,66,89,32,108,101,118,101,108,32,68,69,83,67,44,32,105,100,120,32,65,83,67,0,85,80,68,65,84,69,32,79,82,32,70,65,73,76,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,83,69,84,32,108,101,118,101,108,61,45,49,44,105,100,120,61,63,32,87,72,69,82,69,32,108,101,118,101,108,61,63,32,65,78,68,32,105,100,120,61,63,0,85,80,68,65,84,69,32,79,82,32,70,65,73,76,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,32,83,69,84,32,108,101,118,101,108,61,63,32,87,72,69,82,69,32,108,101,118,101,108,61,45,49,0,37,108,108,100,32,37,108,108,100,0,37,115,95,115,101,103,109,101,110,116,115,0,98,108,111,99,107,0,83,69,76,69,67,84,32,49,32,70,82,79,77,32,37,81,46,115,113,108,105,116,101,95,109,97,115,116,101,114,32,87,72,69,82,69,32,116,98,108,95,110,97,109,101,61,39,37,113,95,115,116,97,116,39,0,112,99,120,0,83,69,76,69,67,84,32,37,115,32,87,72,69,82,69,32,114,111,119,105,100,32,61,32,63,0,117,110,114,101,99,111,103,110,105,122,101,100,32,109,97,116,99,104,105,110,102,111,32,114,101,113,117,101,115,116,58,32,37,99,0,105,108,108,101,103,97,108,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,32,116,111,32,37,115,0,73,110,100,101,120,32,111,112,116,105,109,105,122,101,100,0,73,110,100,101,120,32,97,108,114,101,97,100,121,32,111,112,116,105,109,97,108,0,83,65,86,69,80,79,73,78,84,32,102,116,115,51,0,82,69,76,69,65,83,69,32,102,116,115,51,0,82,79,76,76,66,65,67,75,32,84,79,32,102,116,115,51,0,37,100,32,37,100,32,37,100,32,37,100,32,0,60,98,62,0,60,47,98,62,0,60,98,62,46,46,46,60,47,98,62,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,116,111,32,102,117,110,99,116,105,111,110,32,115,110,105,112,112,101,116,40,41,0,114,101,98,117,105,108,100,0,105,110,116,101,103,114,105,116,121,45,99,104,101,99,107,0,109,101,114,103,101,61,0,97,117,116,111,109,101,114,103,101,61,0,67,82,69,65,84,69,32,84,65,66,76,69,32,73,70,32,78,79,84,32,69,88,73,83,84,83,32,37,81,46,39,37,113,95,115,116,97,116,39,40,105,100,32,73,78,84,69,71,69,82,32,80,82,73,77,65,82,89,32,75,69,89,44,32,118,97,108,117,101,32,66,76,79,66,41,59,0,83,69,76,69,67,84,32,37,115,0,68,69,83,67,0,65,83,67,0,83,69,76,69,67,84,32,37,115,32,87,72,69,82,69,32,114,111,119,105,100,32,66,69,84,87,69,69,78,32,37,108,108,100,32,65,78,68,32,37,108,108,100,32,79,82,68,69,82,32,66,89,32,114,111,119,105,100,32,37,115,0,83,69,76,69,67,84,32,37,115,32,79,82,68,69,82,32,66,89,32,114,111,119,105,100,32,37,115,0,70,84,83,32,101,120,112,114,101,115,115,105,111,110,32,116,114,101,101,32,105,115,32,116,111,111,32,108,97,114,103,101,32,40,109,97,120,105,109,117,109,32,100,101,112,116,104,32,37,100,41,0,109,97,108,102,111,114,109,101,100,32,77,65,84,67,72,32,101,120,112,114,101,115,115,105,111,110,58,32,91,37,115,93,0,79,82,0,65,78,68,0,78,79,84,0,78,69,65,82,0,68,82,79,80,32,84,65,66,76,69,32,73,70,32,69,88,73,83,84,83,32,37,81,46,39,37,113,95,99,111,110,116,101,110,116,39,0,68,82,79,80,32,84,65,66,76,69,32,73,70,32,69,88,73,83,84,83,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,0,68,82,79,80,32,84,65,66,76,69,32,73,70,32,69,88,73,83,84,83,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,0,68,82,79,80,32,84,65,66,76,69,32,73,70,32,69,88,73,83,84,83,32,37,81,46,39,37,113,95,100,111,99,115,105,122,101,39,0,68,82,79,80,32,84,65,66,76,69,32,73,70,32,69,88,73,83,84,83,32,37,81,46,39,37,113,95,115,116,97,116,39,0,116,111,107,101,110,105,122,101,0,117,110,114,101,99,111,103,110,105,122,101,100,32,112,97,114,97,109,101,116,101,114,58,32,37,115,0,117,110,114,101,99,111,103,110,105,122,101,100,32,109,97,116,99,104,105,110,102,111,58,32,37,115,0,97,115,99,0,100,101,115,99,0,117,110,114,101,99,111,103,110,105,122,101,100,32,111,114,100,101,114,58,32,37,115,0,99,111,110,116,101,110,116,0,101,114,114,111,114,32,112,97,114,115,105,110,103,32,112,114,101,102,105,120,32,112,97,114,97,109,101,116,101,114,58,32,37,115,0,110,111,32,115,117,99,104,32,99,111,108,117,109,110,58,32,37,115,0,99,111,109,112,114,101,115,115,0,117,110,99,111,109,112,114,101,115,115,0,109,105,115,115,105,110,103,32,37,115,32,112,97,114,97,109,101,116,101,114,32,105,110,32,102,116,115,52,32,99,111,110,115,116,114,117,99,116,111,114,0,95,95,108,97,110,103,105,100,0,37,81,44,32,0,37,122,37,81,44,32,0,67,82,69,65,84,69,32,84,65,66,76,69,32,120,40,37,115,32,37,81,32,72,73,68,68,69,78,44,32,100,111,99,105,100,32,72,73,68,68,69,78,44,32,37,81,32,72,73,68,68,69,78,41,0,80,82,65,71,77,65,32,37,81,46,112,97,103,101,95,115,105,122,101,0,100,111,99,105,100,32,73,78,84,69,71,69,82,32,80,82,73,77,65,82,89,32,75,69,89,0,37,122,44,32,39,99,37,100,37,113,39,0,37,122,44,32,108,97,110,103,105,100,0,67,82,69,65,84,69,32,84,65,66,76,69,32,37,81,46,39,37,113,95,99,111,110,116,101,110,116,39,40,37,115,41,0,67,82,69,65,84,69,32,84,65,66,76,69,32,37,81,46,39,37,113,95,115,101,103,109,101,110,116,115,39,40,98,108,111,99,107,105,100,32,73,78,84,69,71,69,82,32,80,82,73,77,65,82,89,32,75,69,89,44,32,98,108,111,99,107,32,66,76,79,66,41,59,0,67,82,69,65,84,69,32,84,65,66,76,69,32,37,81,46,39,37,113,95,115,101,103,100,105,114,39,40,108,101,118,101,108,32,73,78,84,69,71,69,82,44,105,100,120,32,73,78,84,69,71,69,82,44,115,116,97,114,116,95,98,108,111,99,107,32,73,78,84,69,71,69,82,44,108,101,97,118,101,115,95,101,110,100,95,98,108,111,99,107,32,73,78,84,69,71,69,82,44,101,110,100,95,98,108,111,99,107,32,73,78,84,69,71,69,82,44,114,111,111,116,32,66,76,79,66,44,80,82,73,77,65,82,89,32,75,69,89,40,108,101,118,101,108,44,32,105,100,120,41,41,59,0,67,82,69,65,84,69,32,84,65,66,76,69,32,37,81,46,39,37,113,95,100,111,99,115,105,122,101,39,40,100,111,99,105,100,32,73,78,84,69,71,69,82,32,80,82,73,77,65,82,89,32,75,69,89,44,32,115,105,122,101,32,66,76,79,66,41,59,0,44,37,115,40,63,41,0,44,32,63,0,37,115,37,115,0,100,111,99,105,100,0,44,37,115,40,120,46,39,99,37,100,37,113,39,41,0,44,32,120,46,37,81,0,108,97,110,103,105,100,0,114,111,119,105,100,0,44,32,120,46,39,37,113,39,0,95,99,111,110,116,101,110,116,0,32,70,82,79,77,32,39,37,113,39,46,39,37,113,37,115,39,32,65,83,32,120,0,83,69,76,69,67,84,32,42,32,70,82,79,77,32,37,81,46,37,81,0,112,114,101,102,105,120,0,111,114,100,101,114,0,108,97,110,103,117,97,103,101,105,100,0,110,111,116,105,110,100,101,120,101,100,0,117,110,107,110,111,119,110,32,116,111,107,101,110,105,122,101,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,102,116,115,51,116,111,107,101,110,105,122,101,58,32,100,105,115,97,98,108,101,100,32,45,32,114,101,98,117,105,108,100,32,119,105,116,104,32,45,68,83,81,76,73,84,69,95,69,78,65,66,76,69,95,70,84,83,51,95,84,79,75,69,78,73,90,69,82,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,115,101,115,115,0,115,115,0,115,101,105,0,105,0,100,101,101,0,101,101,0,103,110,105,0,100,101,0,116,97,0,97,116,101,0,108,98,0,98,108,101,0,122,105,0,105,122,101,0,108,97,110,111,105,116,97,0,108,97,110,111,105,116,0,116,105,111,110,0,105,99,110,101,0,101,110,99,101,0,105,99,110,97,0,97,110,99,101,0,114,101,122,105,0,105,103,111,108,0,108,111,103,0,105,108,98,0,105,108,108,97,0,97,108,0,105,108,116,110,101,0,101,110,116,0,105,108,101,0,101,0,105,108,115,117,111,0,111,117,115,0,110,111,105,116,97,122,105,0,110,111,105,116,97,0,114,111,116,97,0,109,115,105,108,97,0,115,115,101,110,101,118,105,0,105,118,101,0,115,115,101,110,108,117,102,0,102,117,108,0,115,115,101,110,115,117,111,0,105,116,105,108,97,0,105,116,105,118,105,0,105,116,105,108,105,98,0,101,116,97,99,105,0,105,99,0,101,118,105,116,97,0,101,122,105,108,97,0,105,116,105,99,105,0,108,97,99,105,0,108,117,102,0,115,115,101,110,0,116,110,101,109,101,0,116,110,101,109,0,116,110,101,0,110,111,105,0,101,116,97,0,105,116,105,0,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,2,1,102,116,115,52,97,117,120,0,42,0,67,82,69,65,84,69,32,84,65,66,76,69,32,120,40,116,101,114,109,44,32,99,111,108,44,32,100,111,99,117,109,101,110,116,115,44,32,111,99,99,117,114,114,101,110,99,101,115,44,32,108,97,110,103,117,97,103,101,105,100,32,72,73,68,68,69,78,41,0,105,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,115,32,116,111,32,102,116,115,52,97,117,120,32,99,111,110,115,116,114,117,99,116,111,114,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,0,1,2,3,0,1,0,0,0,97,99,101,105,110,111,117,121,121,97,99,100,101,101,103,104,105,106,107,108,110,111,114,115,116,117,117,119,121,122,111,117,97,105,111,117,103,107,111,106,103,110,97,101,105,111,114,117,115,116,104,97,101,111,121,0,0,0,0,0,0,0,0,97,98,100,100,101,102,103,104,104,105,107,108,108,109,110,112,114,114,115,116,117,118,119,119,120,121,122,104,116,119,121,97,101,105,111,117,121,114,101,109,111,118,101,95,100,105,97,99,114,105,116,105,99,115,61,49,0,114,101,109,111,118,101,95,100,105,97,99,114,105,116,105,99,115,61,48,0,116,111,107,101,110,99,104,97,114,115,61,0,115,101,112,97,114,97,116,111,114,115,61,0,97,117,116,111,109,97,116,105,99,32,101,120,116,101,110,115,105,111,110,32,108,111,97,100,105,110,103,32,102,97,105,108,101,100,58,32,37,115,0,77,65,84,67,72,0,58,109,101,109,111,114,121,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,101,99,111,118,101,114,101,100,32,37,100,32,112,97,103,101,115,32,102,114,111,109,32,37,115,0,217,213,5,249,32,161,99,215,99,97,110,110,111,116,32,108,105,109,105,116,32,87,65,76,32,115,105,122,101,58,32,37,115,0,99,97,110,110,111,116,32,111,112,101,110,32,102,105,108,101,32,97,116,32,108,105,110,101,32,37,100,32,111,102,32,91,37,46,49,48,115,93,0,114,101,99,111,118,101,114,101,100,32,37,100,32,102,114,97,109,101,115,32,102,114,111,109,32,87,65,76,32,102,105,108,101,32,37,115,0,45,106,111,117,114,110,97,108,0,0,45,119,97,108,0,0,110,111,108,111,99,107,0,105,109,109,117,116,97,98,108,101,0,0,102,105,108,101,58,0,108,111,99,97,108,104,111,115,116,0,105,110,118,97,108,105,100,32,117,114,105,32,97,117,116,104,111,114,105,116,121,58,32,37,46,42,115,0,118,102,115,0,99,97,99,104,101,0,109,111,100,101,0,97,99,99,101,115,115,0,110,111,32,115,117,99,104,32,37,115,32,109,111,100,101,58,32,37,115,0,37,115,32,109,111,100,101,32,110,111,116,32,97,108,108,111,119,101,100,58,32,37,115,0,110,111,32,115,117,99,104,32,118,102,115,58,32,37,115,0,114,111,0,114,119,0,114,119,99,0,109,101,109,111,114,121,0,115,104,97,114,101,100,0,112,114,105,118,97,116,101,0,117,110,97,98,108,101,32,116,111,32,117,115,101,32,102,117,110,99,116,105,111,110,32,37,115,32,105,110,32,116,104,101,32,114,101,113,117,101,115,116,101,100,32,99,111,110,116,101,120,116,0,117,110,97,98,108,101,32,116,111,32,100,101,108,101,116,101,47,109,111,100,105,102,121,32,117,115,101,114,45,102,117,110,99,116,105,111,110,32,100,117,101,32,116,111,32,97,99,116,105,118,101,32,115,116,97,116,101,109,101,110,116,115,0,117,110,97,98,108,101,32,116,111,32,99,108,111,115,101,32,100,117,101,32,116,111,32,117,110,102,105,110,97,108,105,122,101,100,32,115,116,97,116,101,109,101,110,116,115,32,111,114,32,117,110,102,105,110,105,115,104,101,100,32,98,97,99,107,117,112,115,0,102,97,105,108,101,100,32,109,101,109,111,114,121,32,114,101,115,105,122,101,32,37,117,32,116,111,32,37,117,32,98,121,116,101,115,0,102,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,37,117,32,98,121,116,101,115,32,111,102,32,109,101,109,111,114,121,0,117,110,114,101,99,111,103,110,105,122,101,100,32,116,111,107,101,110,58,32,34,37,84,34,0,110,101,97,114,32,34,37,84,34,58,32,115,121,110,116,97,120,32,101,114,114,111,114,0,117,110,107,110,111,119,110,32,116,97,98,108,101,32,111,112,116,105,111,110,58,32,37,46,42,115,0,115,101,116,32,108,105,115,116,0,116,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,32,111,110,32,102,117,110,99,116,105,111,110,32,37,84,0,113,117,97,108,105,102,105,101,100,32,116,97,98,108,101,32,110,97,109,101,115,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32,73,78,83,69,82,84,44,32,85,80,68,65,84,69,44,32,97,110,100,32,68,69,76,69,84,69,32,115,116,97,116,101,109,101,110,116,115,32,119,105,116,104,105,110,32,116,114,105,103,103,101,114,115,0,116,104,101,32,73,78,68,69,88,69,68,32,66,89,32,99,108,97,117,115,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32,85,80,68,65,84,69,32,111,114,32,68,69,76,69,84,69,32,115,116,97,116,101,109,101,110,116,115,32,119,105,116,104,105,110,32,116,114,105,103,103,101,114,115,0,116,104,101,32,78,79,84,32,73,78,68,69,88,69,68,32,99,108,97,117,115,101,32,105,115,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32,85,80,68,65,84,69,32,111,114,32,68,69,76,69,84,69,32,115,116,97,116,101,109,101,110,116,115,32,119,105,116,104,105,110,32,116,114,105,103,103,101,114,115,0,144,1,145,2,145,1,146,1,146,3,147,0,147,1,147,3,148,1,149,3,151,0,151,1,151,2,150,0,150,1,150,1,150,1,149,2,149,2,149,2,153,1,153,0,149,2,149,3,149,5,149,2,154,6,156,1,158,0,158,3,157,1,157,0,155,5,155,2,162,0,162,2,160,3,160,1,164,3,165,1,152,1,152,1,152,1,166,0,166,1,168,1,168,4,168,6,169,1,169,2,170,1,170,1,167,2,167,0,173,2,173,2,173,4,173,3,173,3,173,2,173,2,173,3,173,5,173,2,173,4,173,4,173,1,173,2,178,0,178,1,180,0,180,2,182,2,182,3,182,3,182,3,183,2,183,2,183,1,183,1,183,2,181,3,181,2,184,0,184,2,184,2,161,0,161,2,185,3,185,1,186,1,186,0,187,2,187,7,187,5,187,5,187,10,190,0,190,1,176,0,176,3,191,0,191,2,192,1,192,1,192,1,149,4,194,2,194,0,149,9,149,4,149,1,163,2,196,1,196,3,199,1,199,2,199,1,197,9,197,1,208,4,208,5,200,1,200,1,200,0,211,2,211,0,201,3,201,2,201,4,212,2,212,1,212,0,202,0,202,2,214,2,214,0,213,7,213,9,213,7,213,7,159,0,159,2,195,2,215,1,215,2,215,3,215,4,217,2,217,0,216,0,216,3,216,2,218,4,218,0,206,0,206,3,188,4,188,2,177,1,177,1,177,0,204,0,204,3,205,0,205,2,207,0,207,2,207,4,207,4,149,6,203,0,203,2,149,8,220,5,220,3,149,6,149,7,221,2,221,1,222,0,222,3,219,3,219,1,175,1,175,3,174,1,175,1,175,1,175,3,175,5,174,1,174,1,175,1,175,3,175,6,175,5,175,4,174,1,175,3,175,3,175,3,175,3,175,3,175,3,175,3,175,3,223,1,223,2,175,3,175,5,175,2,175,3,175,3,175,4,175,2,175,2,175,2,175,2,224,1,224,2,175,5,225,1,225,2,175,5,175,3,175,5,175,4,175,4,175,5,227,5,227,4,228,2,228,0,226,1,226,0,210,1,210,0,209,3,209,1,149,12,229,1,229,0,179,0,179,3,189,5,189,3,230,0,230,2,149,4,149,1,149,2,149,3,149,5,149,6,149,5,149,6,231,1,231,1,231,1,231,1,231,1,171,2,171,1,172,2,149,5,232,11,234,1,234,1,234,2,234,0,235,1,235,1,235,3,236,0,236,3,237,0,237,2,233,3,233,2,239,1,239,3,240,0,240,3,240,2,238,7,238,5,238,5,238,1,175,4,175,6,193,1,193,1,193,1,149,4,149,6,149,3,242,0,242,2,241,1,241,0,149,1,149,3,149,1,149,3,149,6,149,6,243,1,244,0,244,1,149,1,149,4,245,8,246,1,246,3,247,0,247,2,248,1,248,3,249,1,250,0,250,4,250,2,198,0,198,2,198,3,251,6,251,8,100,117,112,108,105,99,97,116,101,32,87,73,84,72,32,116,97,98,108,101,32,110,97,109,101,58,32,37,115,0,110,111,116,32,97,117,116,104,111,114,105,122,101,100,0,97,117,116,104,111,114,105,122,101,114,32,109,97,108,102,117,110,99,116,105,111,110,0,67,82,69,65,84,69,32,86,73,82,84,85,65,76,32,84,65,66,76,69,32,37,84,0,85,80,68,65,84,69,32,37,81,46,37,115,32,83,69,84,32,116,121,112,101,61,39,116,97,98,108,101,39,44,32,110,97,109,101,61,37,81,44,32,116,98,108,95,110,97,109,101,61,37,81,44,32,114,111,111,116,112,97,103,101,61,48,44,32,115,113,108,61,37,81,32,87,72,69,82,69,32,114,111,119,105,100,61,35,37,100,0,110,97,109,101,61,39,37,113,39,32,65,78,68,32,116,121,112,101,61,39,116,97,98,108,101,39,0,118,105,114,116,117,97,108,32,116,97,98,108,101,115,32,109,97,121,32,110,111,116,32,98,101,32,97,108,116,101,114,101,100,0,67,97,110,110,111,116,32,97,100,100,32,97,32,99,111,108,117,109,110,32,116,111,32,97,32,118,105,101,119,0,115,113,108,105,116,101,95,97,108,116,101,114,116,97,98,95,37,115,0,117,110,97,98,108,101,32,116,111,32,111,112,101,110,32,97,32,116,101,109,112,111,114,97,114,121,32,100,97,116,97,98,97,115,101,32,102,105,108,101,32,102,111,114,32,115,116,111,114,105,110,103,32,116,101,109,112,111,114,97,114,121,32,116,97,98,108,101,115,0,115,113,108,105,116,101,95,0,116,97,98,108,101,32,37,115,32,109,97,121,32,110,111,116,32,98,101,32,97,108,116,101,114,101,100,0,67,97,110,110,111,116,32,97,100,100,32,97,32,80,82,73,77,65,82,89,32,75,69,89,32,99,111,108,117,109,110,0,67,97,110,110,111,116,32,97,100,100,32,97,32,85,78,73,81,85,69,32,99,111,108,117,109,110,0,67,97,110,110,111,116,32,97,100,100,32,97,32,82,69,70,69,82,69,78,67,69,83,32,99,111,108,117,109,110,32,119,105,116,104,32,110,111,110,45,78,85,76,76,32,100,101,102,97,117,108,116,32,118,97,108,117,101,0,67,97,110,110,111,116,32,97,100,100,32,97,32,78,79,84,32,78,85,76,76,32,99,111,108,117,109,110,32,119,105,116,104,32,100,101,102,97,117,108,116,32,118,97,108,117,101,32,78,85,76,76,0,67,97,110,110,111,116,32,97,100,100,32,97,32,99,111,108,117,109,110,32,119,105,116,104,32,110,111,110,45,99,111,110,115,116,97,110,116,32,100,101,102,97,117,108,116,0,85,80,68,65,84,69,32,34,37,119,34,46,37,115,32,83,69,84,32,115,113,108,32,61,32,115,117,98,115,116,114,40,115,113,108,44,49,44,37,100,41,32,124,124,32,39,44,32,39,32,124,124,32,37,81,32,124,124,32,115,117,98,115,116,114,40,115,113,108,44,37,100,41,32,87,72,69,82,69,32,116,121,112,101,32,61,32,39,116,97,98,108,101,39,32,65,78,68,32,110,97,109,101,32,61,32,37,81,0,116,98,108,95,110,97,109,101,61,37,81,0,116,121,112,101,61,39,116,114,105,103,103,101,114,39,32,65,78,68,32,40,37,115,41,0,110,97,109,101,61,37,81,0,37,115,32,79,82,32,110,97,109,101,61,37,81,0,45,0,37,108,108,100,0,37,33,46,49,53,103,0,116,104,101,114,101,32,105,115,32,97,108,114,101,97,100,121,32,97,110,111,116,104,101,114,32,116,97,98,108,101,32,111,114,32,105,110,100,101,120,32,119,105,116,104,32,116,104,105,115,32,110,97,109,101,58,32,37,115,0,118,105,101,119,32,37,115,32,109,97,121,32,110,111,116,32,98,101,32,97,108,116,101,114,101,100,0,85,80,68,65,84,69,32,34,37,119,34,46,37,115,32,83,69,84,32,115,113,108,32,61,32,115,113,108,105,116,101,95,114,101,110,97,109,101,95,112,97,114,101,110,116,40,115,113,108,44,32,37,81,44,32,37,81,41,32,87,72,69,82,69,32,37,115,59,0,85,80,68,65,84,69,32,37,81,46,37,115,32,83,69,84,32,115,113,108,32,61,32,67,65,83,69,32,87,72,69,78,32,116,121,112,101,32,61,32,39,116,114,105,103,103,101,114,39,32,84,72,69,78,32,115,113,108,105,116,101,95,114,101,110,97,109,101,95,116,114,105,103,103,101,114,40,115,113,108,44,32,37,81,41,69,76,83,69,32,115,113,108,105,116,101,95,114,101,110,97,109,101,95,116,97,98,108,101,40,115,113,108,44,32,37,81,41,32,69,78,68,44,32,116,98,108,95,110,97,109,101,32,61,32,37,81,44,32,110,97,109,101,32,61,32,67,65,83,69,32,87,72,69,78,32,116,121,112,101,61,39,116,97,98,108,101,39,32,84,72,69,78,32,37,81,32,87,72,69,78,32,110,97,109,101,32,76,73,75,69,32,39,115,113,108,105,116,101,95,97,117,116,111,105,110,100,101,120,37,37,39,32,65,78,68,32,116,121,112,101,61,39,105,110,100,101,120,39,32,84,72,69,78,32,39,115,113,108,105,116,101,95,97,117,116,111,105,110,100,101,120,95,39,32,124,124,32,37,81,32,124,124,32,115,117,98,115,116,114,40,110,97,109,101,44,37,100,43,49,56,41,32,69,76,83,69,32,110,97,109,101,32,69,78,68,32,87,72,69,82,69,32,116,98,108,95,110,97,109,101,61,37,81,32,67,79,76,76,65,84,69,32,110,111,99,97,115,101,32,65,78,68,32,40,116,121,112,101,61,39,116,97,98,108,101,39,32,79,82,32,116,121,112,101,61,39,105,110,100,101,120,39,32,79,82,32,116,121,112,101,61,39,116,114,105,103,103,101,114,39,41,59,0,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,0,85,80,68,65,84,69,32,34,37,119,34,46,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,32,115,101,116,32,110,97,109,101,32,61,32,37,81,32,87,72,69,82,69,32,110,97,109,101,32,61,32,37,81,0,85,80,68,65,84,69,32,115,113,108,105,116,101,95,116,101,109,112,95,109,97,115,116,101,114,32,83,69,84,32,115,113,108,32,61,32,115,113,108,105,116,101,95,114,101,110,97,109,101,95,116,114,105,103,103,101,114,40,115,113,108,44,32,37,81,41,44,32,116,98,108,95,110,97,109,101,32,61,32,37,81,32,87,72,69,82,69,32,37,115,59,0,118,105,101,119,32,37,115,32,105,115,32,99,105,114,99,117,108,97,114,108,121,32,100,101,102,105,110,101,100,0,110,111,32,115,117,99,104,32,99,111,108,108,97,116,105,111,110,32,115,101,113,117,101,110,99,101,58,32,37,115,0,3,2,1,97,32,71,82,79,85,80,32,66,89,32,99,108,97,117,115,101,32,105,115,32,114,101,113,117,105,114,101,100,32,98,101,102,111,114,101,32,72,65,86,73,78,71,0,79,82,68,69,82,0,71,82,79,85,80,0,97,103,103,114,101,103,97,116,101,32,102,117,110,99,116,105,111,110,115,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,116,104,101,32,71,82,79,85,80,32,66,89,32,99,108,97,117,115,101,0,116,111,111,32,109,97,110,121,32,116,101,114,109,115,32,105,110,32,79,82,68,69,82,32,66,89,32,99,108,97,117,115,101,0,37,114,32,79,82,68,69,82,32,66,89,32,116,101,114,109,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,97,110,121,32,99,111,108,117,109,110,32,105,110,32,116,104,101,32,114,101,115,117,108,116,32,115,101,116,0,37,114,32,37,115,32,66,89,32,116,101,114,109,32,111,117,116,32,111,102,32,114,97,110,103,101,32,45,32,115,104,111,117,108,100,32,98,101,32,98,101,116,119,101,101,110,32,49,32,97,110,100,32,37,100,0,97,108,108,32,86,65,76,85,69,83,32,109,117,115,116,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,116,101,114,109,115,0,83,69,76,69,67,84,115,32,116,111,32,116,104,101,32,108,101,102,116,32,97,110,100,32,114,105,103,104,116,32,111,102,32,37,115,32,100,111,32,110,111,116,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,114,101,115,117,108,116,32,99,111,108,117,109,110,115,0,85,78,73,79,78,32,65,76,76,0,73,78,84,69,82,83,69,67,84,0,69,88,67,69,80,84,0,85,78,73,79,78,0,116,111,111,32,109,97,110,121,32,116,101,114,109,115,32,105,110,32,37,115,32,66,89,32,99,108,97,117,115,101,0,69,120,112,114,101,115,115,105,111,110,32,116,114,101,101,32,105,115,32,116,111,111,32,108,97,114,103,101,32,40,109,97,120,105,109,117,109,32,100,101,112,116,104,32,37,100,41,0,116,104,101,32,34,46,34,32,111,112,101,114,97,116,111,114,0,102,117,110,99,116,105,111,110,115,0,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,116,111,32,108,105,107,101,108,105,104,111,111,100,40,41,32,109,117,115,116,32,98,101,32,97,32,99,111,110,115,116,97,110,116,32,98,101,116,119,101,101,110,32,48,46,48,32,97,110,100,32,49,46,48,0,110,111,116,32,97,117,116,104,111,114,105,122,101,100,32,116,111,32,117,115,101,32,102,117,110,99,116,105,111,110,58,32,37,115,0,110,111,110,45,100,101,116,101,114,109,105,110,105,115,116,105,99,32,102,117,110,99,116,105,111,110,115,0,109,105,115,117,115,101,32,111,102,32,97,103,103,114,101,103,97,116,101,32,102,117,110,99,116,105,111,110,32,37,46,42,115,40,41,0,110,111,32,115,117,99,104,32,102,117,110,99,116,105,111,110,58,32,37,46,42,115,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,116,111,32,102,117,110,99,116,105,111,110,32,37,46,42,115,40,41,0,115,117,98,113,117,101,114,105,101,115,0,112,97,114,97,109,101,116,101,114,115,0,112,97,114,116,105,97,108,32,105,110,100,101,120,32,87,72,69,82,69,32,99,108,97,117,115,101,115,0,105,110,100,101,120,32,101,120,112,114,101,115,115,105,111,110,115,0,67,72,69,67,75,32,99,111,110,115,116,114,97,105,110,116,115,0,37,115,32,112,114,111,104,105,98,105,116,101,100,32,105,110,32,37,115,0,110,101,119,0,111,108,100,0,109,105,115,117,115,101,32,111,102,32,97,108,105,97,115,101,100,32,97,103,103,114,101,103,97,116,101,32,37,115,0,110,111,32,115,117,99,104,32,99,111,108,117,109,110,0,97,109,98,105,103,117,111,117,115,32,99,111,108,117,109,110,32,110,97,109,101,0,37,115,58,32,37,115,46,37,115,46,37,115,0,37,115,58,32,37,115,46,37,115,0,37,115,58,32,37,115,0,97,99,99,101,115,115,32,116,111,32,37,115,46,37,115,46,37,115,32,105,115,32,112,114,111,104,105,98,105,116,101,100,0,97,99,99,101,115,115,32,116,111,32,37,115,46,37,115,32,105,115,32,112,114,111,104,105,98,105,116,101,100,0,115,113,108,105,116,101,95,115,113,95,37,112,0,116,111,111,32,109,97,110,121,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,34,37,115,34,58,32,109,97,120,32,54,53,53,51,53,0,37,115,46,37,115,0,37,115,46,37,115,46,37,115,0,110,111,32,115,117,99,104,32,116,97,98,108,101,58,32,37,115,0,110,111,32,116,97,98,108,101,115,32,115,112,101,99,105,102,105,101,100,0,116,111,111,32,109,97,110,121,32,99,111,108,117,109,110,115,32,105,110,32,114,101,115,117,108,116,32,115,101,116,0,97,32,78,65,84,85,82,65,76,32],"i8",4,l.aa+20862); +z([106,111,105,110,32,109,97,121,32,110,111,116,32,104,97,118,101,32,97,110,32,79,78,32,111,114,32,85,83,73,78,71,32,99,108,97,117,115,101,0,99,97,110,110,111,116,32,104,97,118,101,32,98,111,116,104,32,79,78,32,97,110,100,32,85,83,73,78,71,32,99,108,97,117,115,101,115,32,105,110,32,116,104,101,32,115,97,109,101,32,106,111,105,110,0,99,97,110,110,111,116,32,106,111,105,110,32,117,115,105,110,103,32,99,111,108,117,109,110,32,37,115,32,45,32,99,111,108,117,109,110,32,110,111,116,32,112,114,101,115,101,110,116,32,105,110,32,98,111,116,104,32,116,97,98,108,101,115,0,110,111,32,115,117,99,104,32,105,110,100,101,120,58,32,37,115,0,39,37,115,39,32,105,115,32,110,111,116,32,97,32,102,117,110,99,116,105,111,110,0,109,117,108,116,105,112,108,101,32,114,101,102,101,114,101,110,99,101,115,32,116,111,32,114,101,99,117,114,115,105,118,101,32,116,97,98,108,101,58,32,37,115,0,99,105,114,99,117,108,97,114,32,114,101,102,101,114,101,110,99,101,58,32,37,115,0,116,97,98,108,101,32,37,115,32,104,97,115,32,37,100,32,118,97,108,117,101,115,32,102,111,114,32,37,100,32,99,111,108,117,109,110,115,0,109,117,108,116,105,112,108,101,32,114,101,99,117,114,115,105,118,101,32,114,101,102,101,114,101,110,99,101,115,58,32,37,115,0,114,101,99,117,114,115,105,118,101,32,114,101,102,101,114,101,110,99,101,32,105,110,32,97,32,115,117,98,113,117,101,114,121,58,32,37,115,0,37,46,42,122,58,37,117,0,110,111,32,115,117,99,104,32,109,111,100,117,108,101,58,32,37,115,0,118,116,97,98,108,101,32,99,111,110,115,116,114,117,99,116,111,114,32,99,97,108,108,101,100,32,114,101,99,117,114,115,105,118,101,108,121,58,32,37,115,0,118,116,97,98,108,101,32,99,111,110,115,116,114,117,99,116,111,114,32,102,97,105,108,101,100,58,32,37,115,0,118,116,97,98,108,101,32,99,111,110,115,116,114,117,99,116,111,114,32,100,105,100,32,110,111,116,32,100,101,99,108,97,114,101,32,115,99,104,101,109,97,58,32,37,115,0,104,105,100,100,101,110,0,32,104,105,100,100,101,110,0,111,98,106,101,99,116,32,110,97,109,101,32,114,101,115,101,114,118,101,100,32,102,111,114,32,105,110,116,101,114,110,97,108,32,117,115,101,58,32,37,115,0,99,111,114,114,117,112,116,32,100,97,116,97,98,97,115,101,0,117,110,107,110,111,119,110,32,100,97,116,97,98,97,115,101,32,37,84,0,105,100,120,0,116,98,108,0,115,113,108,105,116,101,95,37,0,66,66,66,0,115,116,97,116,95,103,101,116,0,37,108,108,117,0,32,37,108,108,117,0,115,116,97,116,95,112,117,115,104,0,115,116,97,116,95,105,110,105,116,0,67,82,69,65,84,69,32,84,65,66,76,69,32,37,81,46,37,115,40,37,115,41,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,37,115,32,87,72,69,82,69,32,37,115,61,37,81,0,116,98,108,44,105,100,120,44,115,116,97,116,0,115,113,108,105,116,101,95,115,116,97,116,51,0,115,113,108,105,116,101,95,115,116,97,116,52,0,117,110,97,98,108,101,32,116,111,32,105,100,101,110,116,105,102,121,32,116,104,101,32,111,98,106,101,99,116,32,116,111,32,98,101,32,114,101,105,110,100,101,120,101,100,0,105,110,100,101,120,32,39,37,113,39,0,44,32,0,109,105,115,117,115,101,32,111,102,32,97,103,103,114,101,103,97,116,101,58,32,37,115,40,41,0,117,110,107,110,111,119,110,32,102,117,110,99,116,105,111,110,58,32,37,46,42,115,40,41,0,82,65,73,83,69,40,41,32,109,97,121,32,111,110,108,121,32,98,101,32,117,115,101,100,32,119,105,116,104,105,110,32,97,32,116,114,105,103,103,101,114,45,112,114,111,103,114,97,109,0,67,79,82,82,69,76,65,84,69,68,32,0,76,73,83,84,0,83,67,65,76,65,82,0,69,88,69,67,85,84,69,32,37,115,37,115,32,83,85,66,81,85,69,82,89,32,37,100,0,48,120,0,104,101,120,32,108,105,116,101,114,97,108,32,116,111,111,32,98,105,103,58,32,37,115,0,115,113,108,105,116,101,95,100,101,116,97,99,104,0,110,111,32,115,117,99,104,32,100,97,116,97,98,97,115,101,58,32,37,115,0,99,97,110,110,111,116,32,100,101,116,97,99,104,32,100,97,116,97,98,97,115,101,32,37,115,0,99,97,110,110,111,116,32,68,69,84,65,67,72,32,100,97,116,97,98,97,115,101,32,119,105,116,104,105,110,32,116,114,97,110,115,97,99,116,105,111,110,0,100,97,116,97,98,97,115,101,32,37,115,32,105,115,32,108,111,99,107,101,100,0,115,113,108,105,116,101,95,97,116,116,97,99,104,0,116,111,111,32,109,97,110,121,32,97,116,116,97,99,104,101,100,32,100,97,116,97,98,97,115,101,115,32,45,32,109,97,120,32,37,100,0,99,97,110,110,111,116,32,65,84,84,65,67,72,32,100,97,116,97,98,97,115,101,32,119,105,116,104,105,110,32,116,114,97,110,115,97,99,116,105,111,110,0,100,97,116,97,98,97,115,101,32,37,115,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,117,115,101,0,100,97,116,97,98,97,115,101,32,105,115,32,97,108,114,101,97,100,121,32,97,116,116,97,99,104,101,100,0,111,117,116,32,111,102,32,109,101,109,111,114,121,0,117,110,97,98,108,101,32,116,111,32,111,112,101,110,32,100,97,116,97,98,97,115,101,58,32,37,115,0,110,111,32,115,117,99,104,32,116,114,105,103,103,101,114,58,32,37,83,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,37,115,32,87,72,69,82,69,32,110,97,109,101,61,37,81,32,65,78,68,32,116,121,112,101,61,39,116,114,105,103,103,101,114,39,0,116,101,109,112,111,114,97,114,121,32,116,114,105,103,103,101,114,32,109,97,121,32,110,111,116,32,104,97,118,101,32,113,117,97,108,105,102,105,101,100,32,110,97,109,101,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,116,114,105,103,103,101,114,115,32,111,110,32,118,105,114,116,117,97,108,32,116,97,98,108,101,115,0,116,114,105,103,103,101,114,32,37,84,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,116,114,105,103,103,101,114,32,111,110,32,115,121,115,116,101,109,32,116,97,98,108,101,0,66,69,70,79,82,69,0,65,70,84,69,82,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,37,115,32,116,114,105,103,103,101,114,32,111,110,32,118,105,101,119,58,32,37,83,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,73,78,83,84,69,65,68,32,79,70,32,116,114,105,103,103,101,114,32,111,110,32,116,97,98,108,101,58,32,37,83,0,37,115,32,37,84,32,99,97,110,110,111,116,32,114,101,102,101,114,101,110,99,101,32,111,98,106,101,99,116,115,32,105,110,32,100,97,116,97,98,97,115,101,32,37,115,0,37,115,32,99,97,110,110,111,116,32,117,115,101,32,118,97,114,105,97,98,108,101,115,0,73,78,83,69,82,84,32,73,78,84,79,32,37,81,46,37,115,32,86,65,76,85,69,83,40,39,116,114,105,103,103,101,114,39,44,37,81,44,37,81,44,48,44,39,67,82,69,65,84,69,32,84,82,73,71,71,69,82,32,37,113,39,41,0,116,121,112,101,61,39,116,114,105,103,103,101,114,39,32,65,78,68,32,110,97,109,101,61,39,37,113,39,0,45,37,84,0,114,101,115,117,108,116,0,99,97,99,104,101,95,115,105,122,101,0,2,0,0,0,51,0,1,3,138,1,8,0,22,0,2,0,90,1,2,1,138,1,8,0,22,0,1,0,160,0,0,0,33,1,1,0,112,97,103,101,95,115,105,122,101,0,115,101,99,117,114,101,95,100,101,108,101,116,101,0,110,111,114,109,97,108,0,101,120,99,108,117,115,105,118,101,0,108,111,99,107,105,110,103,95,109,111,100,101,0,106,111,117,114,110,97,108,95,109,111,100,101,0,106,111,117,114,110,97,108,95,115,105,122,101,95,108,105,109,105,116,0,97,117,116,111,95,118,97,99,117,117,109,0,2,0,1,0,51,0,1,4,45,1,0,0,21,0,2,0,52,0,7,0,99,97,99,104,101,95,115,112,105,108,108,0,109,109,97,112,95,115,105,122,101,0,116,101,109,112,95,115,116,111,114,101,0,116,101,109,112,95,115,116,111,114,101,95,100,105,114,101,99,116,111,114,121,0,110,111,116,32,97,32,119,114,105,116,97,98,108,101,32,100,105,114,101,99,116,111,114,121,0,115,121,110,99,104,114,111,110,111,117,115,0,83,97,102,101,116,121,32,108,101,118,101,108,32,109,97,121,32,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,105,110,115,105,100,101,32,97,32,116,114,97,110,115,97,99,116,105,111,110,0,105,115,115,105,115,105,0,115,115,105,105,0,115,105,105,0,105,105,115,0,105,115,105,0,105,115,105,115,105,0,105,115,115,0,105,115,0,105,105,115,115,115,115,115,115,0,78,79,78,69,0,115,105,0,105,110,116,101,103,114,105,116,121,95,99,104,101,99,107,0,42,42,42,32,105,110,32,100,97,116,97,98,97,115,101,32,37,115,32,42,42,42,10,0,78,85,76,76,32,118,97,108,117,101,32,105,110,32,37,115,46,37,115,0,114,111,119,32,0,32,109,105,115,115,105,110,103,32,102,114,111,109,32,105,110,100,101,120,32,0,110,111,110,45,117,110,105,113,117,101,32,101,110,116,114,121,32,105,110,32,105,110,100,101,120,32,0,119,114,111,110,103,32,35,32,111,102,32,101,110,116,114,105,101,115,32,105,110,32,105,110,100,101,120,32,0,37,1,0,0,45,1,4,0,97,0,3,0,33,3,1,0,111,107,0,101,110,99,111,100,105,110,103,0,117,110,115,117,112,112,111,114,116,101,100,32,101,110,99,111,100,105,110,103,58,32,37,115,0,2,0,1,0,52,0,0,0,2,0,0,0,51,0,1,0,33,1,1,0,99,111,109,112,105,108,101,95,111,112,116,105,111,110,0,102,117,108,108,0,114,101,115,116,97,114,116,0,116,114,117,110,99,97,116,101,0,119,97,108,95,97,117,116,111,99,104,101,99,107,112,111,105,110,116,0,116,105,109,101,111,117,116,0,115,111,102,116,95,104,101,97,112,95,108,105,109,105,116,0,116,104,114,101,97,100,115,0,98,117,115,121,0,99,104,101,99,107,112,111,105,110,116,101,100,0,85,84,70,56,0,85,84,70,45,56,0,85,84,70,45,49,54,108,101,0,85,84,70,45,49,54,98,101,0,85,84,70,49,54,108,101,0,85,84,70,49,54,98,101,0,85,84,70,45,49,54,0,85,84,70,49,54,0,37,95,0,0,108,105,107,101,0,103,108,111,98,0,76,73,75,69,32,111,114,32,71,76,79,66,32,112,97,116,116,101,114,110,32,116,111,111,32,99,111,109,112,108,101,120,0,69,83,67,65,80,69,32,101,120,112,114,101,115,115,105,111,110,32,109,117,115,116,32,98,101,32,97,32,115,105,110,103,108,101,32,99,104,97,114,97,99,116,101,114,0,102,111,114,101,105,103,110,32,107,101,121,32,109,105,115,109,97,116,99,104,32,45,32,34,37,119,34,32,114,101,102,101,114,101,110,99,105,110,103,32,34,37,119,34,0,116,97,98,108,101,0,112,97,114,101,110,116,0,102,107,105,100,0,83,69,84,32,78,85,76,76,0,83,69,84,32,68,69,70,65,85,76,84,0,67,65,83,67,65,68,69,0,82,69,83,84,82,73,67,84,0,78,79,32,65,67,84,73,79,78,0,105,100,0,115,101,113,0,102,114,111,109,0,116,111,0,111,110,95,117,112,100,97,116,101,0,111,110,95,100,101,108,101,116,101,0,109,97,116,99,104,0,110,97,109,101,0,102,105,108,101,0,99,0,117,0,112,107,0,117,110,105,113,117,101,0,111,114,105,103,105,110,0,112,97,114,116,105,97,108,0,115,101,113,110,111,0,99,105,100,0,99,111,108,108,0,107,101,121,0,105,110,100,101,120,0,119,105,100,116,104,0,104,101,105,103,104,116,0,116,121,112,101,0,110,111,116,110,117,108,108,0,100,102,108,116,95,118,97,108,117,101,0,116,101,109,112,111,114,97,114,121,32,115,116,111,114,97,103,101,32,99,97,110,110,111,116,32,98,101,32,99,104,97,110,103,101,100,32,102,114,111,109,32,119,105,116,104,105,110,32,97,32,116,114,97,110,115,97,99,116,105,111,110,0,110,111,110,101,0,105,110,99,114,101,109,101,110,116,97,108,0,100,101,108,101,116,101,0,112,101,114,115,105,115,116,0,111,102,102,0,119,97,108,0,97,112,112,108,105,99,97,116,105,111,110,95,105,100,0,97,117,116,111,109,97,116,105,99,95,105,110,100,101,120,0,98,117,115,121,95,116,105,109,101,111,117,116,0,99,97,115,101,95,115,101,110,115,105,116,105,118,101,95,108,105,107,101,0,99,101,108,108,95,115,105,122,101,95,99,104,101,99,107,0,99,104,101,99,107,112,111,105,110,116,95,102,117,108,108,102,115,121,110,99,0,99,111,108,108,97,116,105,111,110,95,108,105,115,116,0,99,111,109,112,105,108,101,95,111,112,116,105,111,110,115,0,99,111,117,110,116,95,99,104,97,110,103,101,115,0,100,97,116,97,95,118,101,114,115,105,111,110,0,100,97,116,97,98,97,115,101,95,108,105,115,116,0,100,101,102,97,117,108,116,95,99,97,99,104,101,95,115,105,122,101,0,100,101,102,101,114,95,102,111,114,101,105,103,110,95,107,101,121,115,0,101,109,112,116,121,95,114,101,115,117,108,116,95,99,97,108,108,98,97,99,107,115,0,102,111,114,101,105,103,110,95,107,101,121,95,99,104,101,99,107,0,102,111,114,101,105,103,110,95,107,101,121,95,108,105,115,116,0,102,111,114,101,105,103,110,95,107,101,121,115,0,102,114,101,101,108,105,115,116,95,99,111,117,110,116,0,102,117,108,108,95,99,111,108,117,109,110,95,110,97,109,101,115,0,102,117,108,108,102,115,121,110,99,0,105,103,110,111,114,101,95,99,104,101,99,107,95,99,111,110,115,116,114,97,105,110,116,115,0,105,110,99,114,101,109,101,110,116,97,108,95,118,97,99,117,117,109,0,105,110,100,101,120,95,105,110,102,111,0,105,110,100,101,120,95,108,105,115,116,0,105,110,100,101,120,95,120,105,110,102,111,0,108,101,103,97,99,121,95,102,105,108,101,95,102,111,114,109,97,116,0,109,97,120,95,112,97,103,101,95,99,111,117,110,116,0,112,97,103,101,95,99,111,117,110,116,0,113,117,101,114,121,95,111,110,108,121,0,113,117,105,99,107,95,99,104,101,99,107,0,114,101,97,100,95,117,110,99,111,109,109,105,116,116,101,100,0,114,101,99,117,114,115,105,118,101,95,116,114,105,103,103,101,114,115,0,114,101,118,101,114,115,101,95,117,110,111,114,100,101,114,101,100,95,115,101,108,101,99,116,115,0,115,99,104,101,109,97,95,118,101,114,115,105,111,110,0,115,104,111,114,116,95,99,111,108,117,109,110,95,110,97,109,101,115,0,115,104,114,105,110,107,95,109,101,109,111,114,121,0,115,116,97,116,115,0,116,97,98,108,101,95,105,110,102,111,0,117,115,101,114,95,118,101,114,115,105,111,110,0,119,97,108,95,99,104,101,99,107,112,111,105,110,116,0,119,114,105,116,97,98,108,101,95,115,99,104,101,109,97,0,110,111,32,115,117,99,104,32,105,110,100,101,120,58,32,37,83,0,105,110,100,101,120,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,85,78,73,81,85,69,32,111,114,32,80,82,73,77,65,82,89,32,75,69,89,32,99,111,110,115,116,114,97,105,110,116,32,99,97,110,110,111,116,32,98,101,32,100,114,111,112,112,101,100,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,37,115,32,87,72,69,82,69,32,110,97,109,101,61,37,81,32,65,78,68,32,116,121,112,101,61,39,105,110,100,101,120,39,0,85,80,68,65,84,69,32,37,81,46,37,115,32,83,69,84,32,114,111,111,116,112,97,103,101,61,37,100,32,87,72,69,82,69,32,35,37,100,32,65,78,68,32,114,111,111,116,112,97,103,101,61,35,37,100,0,115,113,108,105,116,101,95,115,116,97,116,37,100,0,115,121,110,116,97,120,32,101,114,114,111,114,32,97,102,116,101,114,32,99,111,108,117,109,110,32,110,97,109,101,32,34,37,46,42,115,34,0,48,0,118,97,114,105,97,98,108,101,32,110,117,109,98,101,114,32,109,117,115,116,32,98,101,32,98,101,116,119,101,101,110,32,63,49,32,97,110,100,32,63,37,100,0,116,111,111,32,109,97,110,121,32,83,81,76,32,118,97,114,105,97,98,108,101,115,0,116,97,98,108,101,32,37,83,32,104,97,115,32,110,111,32,99,111,108,117,109,110,32,110,97,109,101,100,32,37,115,0,116,97,98,108,101,32,37,83,32,104,97,115,32,37,100,32,99,111,108,117,109,110,115,32,98,117,116,32,37,100,32,118,97,108,117,101,115,32,119,101,114,101,32,115,117,112,112,108,105,101,100,0,37,100,32,118,97,108,117,101,115,32,102,111,114,32,37,100,32,99,111,108,117,109,110,115,0,114,111,119,115,32,105,110,115,101,114,116,101,100,0,77,0,2,0,74,0,0,0,49,0,2,0,75,0,0,0,61,0,0,0,97,116,32,109,111,115,116,32,37,100,32,116,97,98,108,101,115,32,105,110,32,97,32,106,111,105,110,0,66,64,63,65,0,0,108,105,66,63,65,64,117,115,114,116,7,6,108,105,83,69,65,82,67,72,0,83,67,65,78,0,32,83,85,66,81,85,69,82,89,32,37,100,0,32,84,65,66,76,69,32,37,115,0,32,65,83,32,37,115,0,80,82,73,77,65,82,89,32,75,69,89,0,65,85,84,79,77,65,84,73,67,32,80,65,82,84,73,65,76,32,67,79,86,69,82,73,78,71,32,73,78,68,69,88,0,65,85,84,79,77,65,84,73,67,32,67,79,86,69,82,73,78,71,32,73,78,68,69,88,0,67,79,86,69,82,73,78,71,32,73,78,68,69,88,32,37,115,0,73,78,68,69,88,32,37,115,0,32,85,83,73,78,71,32,0,61,0,62,63,32,65,78,68,32,114,111,119,105,100,60,0,62,0,60,0,32,85,83,73,78,71,32,73,78,84,69,71,69,82,32,80,82,73,77,65,82,89,32,75,69,89,32,40,114,111,119,105,100,37,115,63,41,0,32,86,73,82,84,85,65,76,32,84,65,66,76,69,32,73,78,68,69,88,32,37,100,58,37,115,0,32,40,0,32,65,78,68,32,0,37,115,61,63,0,65,78,89,40,37,115,41,0,41,0,60,101,120,112,114,62,0,97,117,116,111,109,97,116,105,99,32,105,110,100,101,120,32,111,110,32,37,115,40,37,115,41,0,97,117,116,111,45,105,110,100,101,120,0,110,111,32,113,117,101,114,121,32,115,111,108,117,116,105,111,110,0,10,10,9,9,8,8,7,7,7,6,6,6,5,5,5,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,37,115,46,120,66,101,115,116,73,110,100,101,120,40,41,32,109,97,108,102,117,110,99,116,105,111,110,0,116,97,98,108,101,32,37,115,58,32,120,66,101,115,116,73,110,100,101,120,32,114,101,116,117,114,110,101,100,32,97,110,32,105,110,118,97,108,105,100,32,112,108,97,110,0,83,81,66,73,78,65,82,89,0,114,101,103,101,120,112,0,116,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,32,111,110,32,37,115,40,41,32,45,32,109,97,120,32,37,100,0,45,45,32,84,82,73,71,71,69,82,32,37,115,0,0,0,0,1,1,1,1,1,0,16,0,1,0,1,1,2,1,2,3,18,8,0,16,16,16,16,0,16,16,0,0,16,16,0,0,0,0,2,3,2,2,0,0,1,1,3,3,0,0,0,16,16,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,38,38,16,16,0,3,3,11,11,11,11,11,11,0,38,38,38,38,38,38,38,38,38,38,0,18,16,0,0,0,0,0,16,0,1,1,1,1,4,4,0,0,16,1,1,1,1,16,0,0,16,16,0,0,0,0,0,0,6,35,11,1,16,16,0,1,4,3,26,3,3,3,0,0,0,1,0,0,0,0,0,0,0,1,0,16,16,1,0,0,0,0,1,2,3,4,6,8,8,0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,70,79,82,69,73,71,78,32,75,69,89,32,99,111,110,115,116,114,97,105,110,116,32,102,97,105,108,101,100,0,37,115,46,114,111,119,105,100,0,116,97,98,108,101,32,37,115,32,109,97,121,32,110,111,116,32,98,101,32,109,111,100,105,102,105,101,100,0,99,97,110,110,111,116,32,109,111,100,105,102,121,32,37,115,32,98,101,99,97,117,115,101,32,105,116,32,105,115,32,97,32,118,105,101,119,0,114,111,119,115,32,117,112,100,97,116,101,100,0,116,111,111,32,109,97,110,121,32,99,111,108,117,109,110,115,32,105,110,32,37,115,0,114,111,119,115,32,100,101,108,101,116,101,100,0,0,7,4,6,4,40,10,5,32,14,5,48,19,4,56,23,5,1,28,5,3,110,97,116,117,114,97,108,101,102,116,111,117,116,101,114,105,103,104,116,102,117,108,108,105,110,110,101,114,99,114,111,115,115,0,32,0,117,110,107,110,111,119,110,32,111,114,32,117,110,115,117,112,112,111,114,116,101,100,32,106,111,105,110,32,116,121,112,101,58,32,37,84,32,37,84,37,115,37,84,0,82,73,71,72,84,32,97,110,100,32,70,85,76,76,32,79,85,84,69,82,32,74,79,73,78,115,32,97,114,101,32,110,111,116,32,99,117,114,114,101,110,116,108,121,32,115,117,112,112,111,114,116,101,100,0,79,78,0,85,83,73,78,71,0,97,32,74,79,73,78,32,99,108,97,117,115,101,32,105,115,32,114,101,113,117,105,114,101,100,32,98,101,102,111,114,101,32,37,115,0,116,111,111,32,109,97,110,121,32,116,101,114,109,115,32,105,110,32,99,111,109,112,111,117,110,100,32,83,69,76,69,67,84,0,101,120,112,101,99,116,101,100,32,37,100,32,99,111,108,117,109,110,115,32,102,111,114,32,39,37,115,39,32,98,117,116,32,103,111,116,32,37,100,0,68,73,83,84,73,78,67,84,0,71,82,79,85,80,32,66,89,0,82,73,71,72,84,32,80,65,82,84,32,79,70,32,79,82,68,69,82,32,66,89,0,79,82,68,69,82,32,66,89,0,99,111,108,117,109,110,37,100,0,109,105,110,0,109,97,120,0,32,85,83,73,78,71,32,67,79,86,69,82,73,78,71,32,73,78,68,69,88,32,0,83,67,65,78,32,84,65,66,76,69,32,37,115,37,115,37,115,0,68,73,83,84,73,78,67,84,32,97,103,103,114,101,103,97,116,101,115,32,109,117,115,116,32,104,97,118,101,32,101,120,97,99,116,108,121,32,111,110,101,32,97,114,103,117,109,101,110,116,0,85,83,69,32,84,69,77,80,32,66,45,84,82,69,69,32,70,79,82,32,37,115,0,79,82,68,69,82,32,66,89,32,99,108,97,117,115,101,32,115,104,111,117,108,100,32,99,111,109,101,32,97,102,116,101,114,32,37,115,32,110,111,116,32,98,101,102,111,114,101,0,76,73,77,73,84,32,99,108,97,117,115,101,32,115,104,111,117,108,100,32,99,111,109,101,32,97,102,116,101,114,32,37,115,32,110,111,116,32,98,101,102,111,114,101,0,85,83,73,78,71,32,84,69,77,80,32,66,45,84,82,69,69,32,0,67,79,77,80,79,85,78,68,32,83,85,66,81,85,69,82,73,69,83,32,37,100,32,65,78,68,32,37,100,32,37,115,40,37,115,41,0,114,101,99,117,114,115,105,118,101,32,97,103,103,114,101,103,97,116,101,32,113,117,101,114,105,101,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,111,110,108,121,32,97,32,115,105,110,103,108,101,32,114,101,115,117,108,116,32,97,108,108,111,119,101,100,32,102,111,114,32,97,32,83,69,76,69,67,84,32,116,104,97,116,32,105,115,32,112,97,114,116,32,111,102,32,97,110,32,101,120,112,114,101,115,115,105,111,110,0,112,97,114,97,109,101,116,101,114,115,32,97,114,101,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,118,105,101,119,115,0,118,105,101,119,0,115,113,108,105,116,101,95,115,116,97,116,0,116,97,98,108,101,32,37,115,32,109,97,121,32,110,111,116,32,98,101,32,100,114,111,112,112,101,100,0,117,115,101,32,68,82,79,80,32,84,65,66,76,69,32,116,111,32,100,101,108,101,116,101,32,116,97,98,108,101,32,37,115,0,117,115,101,32,68,82,79,80,32,86,73,69,87,32,116,111,32,100,101,108,101,116,101,32,118,105,101,119,32,37,115,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,32,87,72,69,82,69,32,110,97,109,101,61,37,81,0,68,69,76,69,84,69,32,70,82,79,77,32,37,81,46,37,115,32,87,72,69,82,69,32,116,98,108,95,110,97,109,101,61,37,81,32,97,110,100,32,116,121,112,101,33,61,39,116,114,105,103,103,101,114,39,0,102,111,114,101,105,103,110,32,107,101,121,32,111,110,32,37,115,32,115,104,111,117,108,100,32,114,101,102,101,114,101,110,99,101,32,111,110,108,121,32,111,110,101,32,99,111,108,117,109,110,32,111,102,32,116,97,98,108,101,32,37,84,0,110,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,32,105,110,32,102,111,114,101,105,103,110,32,107,101,121,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,99,111,108,117,109,110,115,32,105,110,32,116,104,101,32,114,101,102,101,114,101,110,99,101,100,32,116,97,98,108,101,0,117,110,107,110,111,119,110,32,99,111,108,117,109,110,32,34,37,115,34,32,105,110,32,102,111,114,101,105,103,110,32,107,101,121,32,100,101,102,105,110,105,116,105,111,110,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,97,32,84,69,77,80,32,105,110,100,101,120,32,111,110,32,110,111,110,45,84,69,77,80,32,116,97,98,108,101,32,34,37,115,34,0,97,108,116,101,114,116,97,98,95,0,116,97,98,108,101,32,37,115,32,109,97,121,32,110,111,116,32,98,101,32,105,110,100,101,120,101,100,0,118,105,101,119,115,32,109,97,121,32,110,111,116,32,98,101,32,105,110,100,101,120,101,100,0,118,105,114,116,117,97,108,32,116,97,98,108,101,115,32,109,97,121,32,110,111,116,32,98,101,32,105,110,100,101,120,101,100,0,116,104,101,114,101,32,105,115,32,97,108,114,101,97,100,121,32,97,32,116,97,98,108,101,32,110,97,109,101,100,32,37,115,0,105,110,100,101,120,32,37,115,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,0,115,113,108,105,116,101,95,97,117,116,111,105,110,100,101,120,95,37,115,95,37,100,0,101,120,112,114,101,115,115,105,111,110,115,32,112,114,111,104,105,98,105,116,101,100,32,105,110,32,80,82,73,77,65,82,89,32,75,69,89,32,97,110,100,32,85,78,73,81,85,69,32,99,111,110,115,116,114,97,105,110,116,115,0,99,111,110,102,108,105,99,116,105,110,103,32,79,78,32,67,79,78,70,76,73,67,84,32,99,108,97,117,115,101,115,32,115,112,101,99,105,102,105,101,100,0,32,85,78,73,81,85,69,0,67,82,69,65,84,69,37,115,32,73,78,68,69,88,32,37,46,42,115,0,73,78,83,69,82,84,32,73,78,84,79,32,37,81,46,37,115,32,86,65,76,85,69,83,40,39,105,110,100,101,120,39,44,37,81,44,37,81,44,35,37,100,44,37,81,41,59,0,110,97,109,101,61,39,37,113,39,32,65,78,68,32,116,121,112,101,61,39,105,110,100,101,120,39,0,116,97,98,108,101,32,34,37,115,34,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,112,114,105,109,97,114,121,32,107,101,121,0,65,85,84,79,73,78,67,82,69,77,69,78,84,32,105,115,32,111,110,108,121,32,97,108,108,111,119,101,100,32,111,110,32,97,110,32,73,78,84,69,71,69,82,32,80,82,73,77,65,82,89,32,75,69,89,0,100,101,102,97,117,108,116,32,118,97,108,117,101,32,111,102,32,99,111,108,117,109,110,32,91,37,115,93,32,105,115,32,110,111,116,32,99,111,110,115,116,97,110,116,0,116,111,111,32,109,97,110,121,32,99,111,108,117,109,110,115,32,111,110,32,37,115,0,100,117,112,108,105,99,97,116,101,32,99,111,108,117,109,110,32,110,97,109,101,58,32,37,115,0,65,85,84,79,73,78,67,82,69,77,69,78,84,32,110,111,116,32,97,108,108,111,119,101,100,32,111,110,32,87,73,84,72,79,85,84,32,82,79,87,73,68,32,116,97,98,108,101,115,0,80,82,73,77,65,82,89,32,75,69,89,32,109,105,115,115,105,110,103,32,111,110,32,116,97,98,108,101,32,37,115,0,84,65,66,76,69,0,86,73,69,87,0,67,82,69,65,84,69,32,37,115,32,37,46,42,115,0,85,80,68,65,84,69,32,37,81,46,37,115,32,83,69,84,32,116,121,112,101,61,39,37,115,39,44,32,110,97,109,101,61,37,81,44,32,116,98,108,95,110,97,109,101,61,37,81,44,32,114,111,111,116,112,97,103,101,61,35,37,100,44,32,115,113,108,61,37,81,32,87,72,69,82,69,32,114,111,119,105,100,61,35,37,100,0,67,82,69,65,84,69,32,84,65,66,76,69,32,37,81,46,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,40,110,97,109,101,44,115,101,113,41,0,116,98,108,95,110,97,109,101,61,39,37,113,39,32,65,78,68,32,116,121,112,101,33,61,39,116,114,105,103,103,101,114,39,0,44,0,10,32,32,0,44,10,32,32,0,10,41,0,67,82,69,65,84,69,32,84,65,66,76,69,32,0,32,84,69,88,84,0,32,78,85,77,0,32,73,78,84,0,32,82,69,65,76,0,116,101,109,112,111,114,97,114,121,32,116,97,98,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101,32,117,110,113,117,97,108,105,102,105,101,100,0,2,4,8,6,116,97,98,108,101,32,37,84,32,97,108,114,101,97,100,121,32,101,120,105,115,116,115,0,116,104,101,114,101,32,105,115,32,97,108,114,101,97,100,121,32,97,110,32,105,110,100,101,120,32,110,97,109,101,100,32,37,115,0,6,0,0,0,0,0,66,69,71,73,78,0,82,69,76,69,65,83,69,0,82,79,76,76,66,65,67,75,0,67,79,77,77,73,84,0,25,0,0,0,108,0,9,0,47,0,0,0,78,0,7,0,103,0,0,0,47,0,1,0,13,0,9,0,7,0,2,0,22,0,0,0,61,0,0,0,112,97,114,115,101,114,32,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,19,144,145,146,147,24,1,2,27,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,91,92,93,94,95,19,50,51,80,81,82,83,27,85,86,87,88,89,90,91,92,93,94,95,137,177,139,71,72,73,74,75,76,77,78,79,80,81,82,83,95,85,86,87,88,89,90,91,92,93,94,95,19,97,85,86,87,88,89,90,91,92,93,94,95,152,33,212,173,27,28,223,224,225,152,42,181,152,223,224,225,95,97,50,51,99,100,101,102,103,104,105,27,28,59,223,224,225,112,174,175,66,94,95,71,72,73,74,75,76,77,78,79,80,81,82,83,195,85,86,87,88,89,90,91,92,93,94,95,19,197,89,90,220,209,210,26,119,120,97,98,208,100,108,109,110,152,157,152,107,152,109,89,90,91,92,93,94,95,163,50,51,97,98,99,55,66,102,103,104,174,175,174,175,132,133,192,193,113,66,19,71,72,73,74,75,76,77,78,79,80,81,82,83,198,85,86,87,88,89,90,91,92,93,94,95,152,209,210,148,149,50,51,100,53,154,59,156,174,229,27,28,232,163,163,22,192,193,174,175,27,28,71,72,73,74,75,76,77,78,79,80,81,82,83,251,85,86,87,88,89,90,91,92,93,94,95,19,198,198,152,152,24,209,210,108,109,110,196,197,27,28,69,164,165,152,119,120,27,28,208,99,27,28,102,103,104,152,50,51,97,98,89,90,185,113,187,22,177,174,97,58,27,28,101,115,245,117,118,71,72,73,74,75,76,77,78,79,80,81,82,83,11,85,86,87,88,89,90,91,92,93,94,95,19,132,133,134,23,152,97,98,91,174,223,224,225,239,97,98,187,22,97,98,27,28,27,28,152,223,224,225,239,152,163,50,51,170,171,172,59,160,97,98,239,164,165,66,242,124,174,175,195,22,23,69,71,72,73,74,75,76,77,78,79,80,81,82,83,198,85,86,87,88,89,90,91,92,93,94,95,19,12,97,21,23,152,101,152,108,109,110,221,152,97,98,97,98,152,29,243,70,226,23,233,26,26,152,152,238,174,175,50,51,22,45,24,47,132,133,134,124,22,23,188,163,26,152,65,59,174,175,163,71,72,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,19,19,198,152,23,152,152,209,103,198,174,175,70,152,50,51,219,213,214,152,98,152,171,172,188,171,172,174,175,248,249,50,51,51,251,174,175,220,74,75,152,188,152,174,175,140,124,26,163,188,16,130,71,72,73,74,75,76,77,78,79,80,81,82,83,101,85,86,87,88,89,90,91,92,93,94,95,19,209,196,197,23,231,198,12,231,219,37,22,107,24,208,116,27,112,201,62,121,64,152,152,29,52,66,221,211,221,219,50,51,60,89,90,152,22,23,183,45,26,47,22,174,175,238,152,164,165,106,19,71,72,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,132,133,119,120,163,50,51,111,70,97,174,175,181,182,170,171,172,0,1,2,140,190,108,109,110,51,71,72,73,74,75,76,77,78,79,80,81,82,83,198,85,86,87,88,89,90,91,92,93,94,95,19,152,152,152,22,166,152,168,169,27,19,152,26,19,152,122,152,24,152,28,27,152,28,174,175,174,175,152,174,175,107,50,51,174,175,22,174,175,174,175,174,175,138,174,175,7,8,9,16,174,175,152,71,72,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,19,152,97,152,31,24,152,98,35,101,174,175,152,97,152,79,152,62,152,64,112,152,49,174,175,174,175,152,174,175,152,50,51,124,174,175,174,175,174,175,174,175,138,174,175,22,23,152,152,174,175,19,71,72,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,152,108,109,110,152,50,51,146,147,23,174,175,26,195,195,152,70,152,168,169,152,26,174,175,152,19,71,72,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,152,246,247,213,214,50,51,195,152,195,174,175,195,100,101,152,195,152,152,7,8,152,174,175,163,19,71,72,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,152,27,152,189,189,50,51,195,198,152,174,175,33,132,133,152,123,163,163,163,152,42,174,175,152,19,152,72,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,152,198,198,198,23,50,51,26,152,23,174,175,26,23,23,23,26,26,26,152,97,23,174,175,26,132,133,152,73,74,75,76,77,78,79,80,81,82,83,152,85,86,87,88,89,90,91,92,93,94,95,19,20,23,22,23,26,152,152,27,28,174,175,152,19,20,27,22,183,183,38,152,27,28,152,23,152,152,26,174,175,152,152,38,152,23,152,27,26,57,152,215,163,152,152,152,174,175,66,174,175,69,57,174,175,152,174,175,174,175,212,66,174,175,69,174,175,174,175,152,152,89,90,152,193,152,152,198,96,97,98,91,152,101,89,90,97,152,209,210,152,96,97,98,235,152,101,174,175,152,19,20,152,22,174,175,116,97,27,28,152,121,174,175,132,133,134,135,136,38,152,174,175,152,174,175,152,132,133,134,135,136,234,152,212,150,199,212,57,212,240,240,203,178,200,216,186,177,19,20,69,22,203,177,182,177,27,28,202,200,228,216,216,155,39,122,159,38,159,41,89,90,91,159,241,241,22,96,97,98,71,130,101,222,191,18,57,203,194,159,194,194,194,18,158,244,191,222,69,159,158,137,19,20,203,22,191,203,46,236,27,28,159,132,133,134,135,136,89,90,237,38,159,158,22,96,97,98,179,159,101,158,48,159,158,179,176,107,176,184,57,106,176,184,176,125,179,178,176,218,107,176,69,176,217,159,218,218,217,159,137,132,133,134,135,136,218,217,179,217,179,227,89,90,95,230,230,129,207,96,97,98,126,128,101,5,206,205,127,204,10,11,12,13,14,203,25,17,162,26,161,13,153,153,6,247,180,250,151,151,151,151,32,180,34,132,133,134,135,136,167,4,3,43,22,15,68,142,250,16,23,23,120,111,131,20,56,123,125,16,1,123,131,63,79,79,66,67,111,28,36,122,1,5,22,107,140,54,54,26,61,107,44,20,24,19,105,112,23,22,40,22,22,53,22,53,22,53,23,23,23,22,22,30,116,23,122,26,23,23,22,28,11,124,114,26,26,23,23,23,36,24,23,36,26,22,22,36,23,122,23,22,26,22,24,23,23,23,22,122,23,141,122,122,15,1,0,0,27,27,27,27,0,27,27,27,0,27,27,27,27,0,0,0,27,0,0,27,0,0,0,27,0,0,0,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,7,7,27,7,7,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,7,15,8,5,4,22,24,8,17,18,21,20,23,11,26,16,3,3,3,3,3,3,3,3,3,3,5,19,12,14,13,6,5,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,1,9,27,27,27,1,8,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,1,27,10,27,25,27,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,105,110,118,97,108,105,100,0,65,80,73,32,99,97,108,108,32,119,105,116,104,32,37,115,32,100,97,116,97,98,97,115,101,32,99,111,110,110,101,99,116,105,111,110,32,112,111,105,110,116,101,114,0,100,97,116,97,98,97,115,101,32,115,99,104,101,109,97,32,105,115,32,108,111,99,107,101,100,58,32,37,115,0,115,116,97,116,101,109,101,110,116,32,116,111,111,32,108,111,110,103,0,97,100,100,114,0,111,112,99,111,100,101,0,112,49,0,112,50,0,112,51,0,112,52,0,112,53,0,99,111,109,109,101,110,116,0,115,101,108,101,99,116,105,100,0,100,101,116,97,105,108,0,78,85,76,76,0,117,110,111,112,101,110,101,100,0,114,101,97,108,0,105,110,116,101,103,101,114,0,110,117,108,108,0,99,97,110,110,111,116,32,111,112,101,110,32,118,97,108,117,101,32,111,102,32,116,121,112,101,32,37,115,0,110,111,32,115,117,99,104,32,114,111,119,105,100,58,32,37,108,108,100,0,110,111,32,115,117,99,104,32,118,105,101,119,0,110,111,32,115,117,99,104,32,116,97,98,108,101,0,98,105,110,100,32,111,110,32,97,32,98,117,115,121,32,112,114,101,112,97,114,101,100,32,115,116,97,116,101,109,101,110,116,58,32,91,37,115,93,0,97,98,111,114,116,32,97,116,32,37,100,32,105,110,32,91,37,115,93,58,32,37,115,0,37,115,32,99,111,110,115,116,114,97,105,110,116,32,102,97,105,108,101,100,58,32,37,115,0,37,115,32,99,111,110,115,116,114,97,105,110,116,32,102,97,105,108,101,100,0,0,0,0,0,1,2,0,2,2,0,1,2,1,1,1,2,1,2,0,0,0,0,0,0,0,0,99,97,110,110,111,116,32,111,112,101,110,32,115,97,118,101,112,111,105,110,116,32,45,32,83,81,76,32,115,116,97,116,101,109,101,110,116,115,32,105,110,32,112,114,111,103,114,101,115,115,0,110,111,32,115,117,99,104,32,115,97,118,101,112,111,105,110,116,58,32,37,115,0,99,97,110,110,111,116,32,114,101,108,101,97,115,101,32,115,97,118,101,112,111,105,110,116,32,45,32,83,81,76,32,115,116,97,116,101,109,101,110,116,115,32,105,110,32,112,114,111,103,114,101,115,115,0,99,97,110,110,111,116,32,99,111,109,109,105,116,32,116,114,97,110,115,97,99,116,105,111,110,32,45,32,83,81,76,32,115,116,97,116,101,109,101,110,116,115,32,105,110,32,112,114,111,103,114,101,115,115,0,99,97,110,110,111,116,32,114,111,108,108,98,97,99,107,32,45,32,110,111,32,116,114,97,110,115,97,99,116,105,111,110,32,105,115,32,97,99,116,105,118,101,0,99,97,110,110,111,116,32,99,111,109,109,105,116,32,45,32,110,111,32,116,114,97,110,115,97,99,116,105,111,110,32,105,115,32,97,99,116,105,118,101,0,99,97,110,110,111,116,32,115,116,97,114,116,32,97,32,116,114,97,110,115,97,99,116,105,111,110,32,119,105,116,104,105,110,32,97,32,116,114,97,110,115,97,99,116,105,111,110,0,100,97,116,97,98,97,115,101,32,115,99,104,101,109,97,32,104,97,115,32,99,104,97,110,103,101,100,0,83,69,76,69,67,84,32,110,97,109,101,44,32,114,111,111,116,112,97,103,101,44,32,115,113,108,32,70,82,79,77,32,39,37,113,39,46,37,115,32,87,72,69,82,69,32,37,115,32,79,82,68,69,82,32,66,89,32,114,111,119,105,100,0,116,111,111,32,109,97,110,121,32,108,101,118,101,108,115,32,111,102,32,116,114,105,103,103,101,114,32,114,101,99,117,114,115,105,111,110,0,105,110,116,111,0,111,117,116,32,111,102,0,99,97,110,110,111,116,32,99,104,97,110,103,101,32,37,115,32,119,97,108,32,109,111,100,101,32,102,114,111,109,32,119,105,116,104,105,110,32,97,32,116,114,97,110,115,97,99,116,105,111,110,0,100,97,116,97,98,97,115,101,32,116,97,98,108,101,32,105,115,32,108,111,99,107,101,100,58,32,37,115,0,115,116,97,116,101,109,101,110,116,32,97,98,111,114,116,115,32,97,116,32,37,100,58,32,91,37,115,93,32,37,115,0,45,45,32,0,39,37,46,42,113,39,0,122,101,114,111,98,108,111,98,40,37,100,41,0,120,39,0,37,48,50,120,0,39,0,99,97,110,110,111,116],"i8",4,l.aa+31102); +z([32,86,65,67,85,85,77,32,102,114,111,109,32,119,105,116,104,105,110,32,97,32,116,114,97,110,115,97,99,116,105,111,110,0,99,97,110,110,111,116,32,86,65,67,85,85,77,32,45,32,83,81,76,32,115,116,97,116,101,109,101,110,116,115,32,105,110,32,112,114,111,103,114,101,115,115,0,65,84,84,65,67,72,32,39,58,109,101,109,111,114,121,58,39,32,65,83,32,118,97,99,117,117,109,95,100,98,59,0,65,84,84,65,67,72,32,39,39,32,65,83,32,118,97,99,117,117,109,95,100,98,59,0,80,82,65,71,77,65,32,118,97,99,117,117,109,95,100,98,46,115,121,110,99,104,114,111,110,111,117,115,61,79,70,70,0,66,69,71,73,78,59,0,83,69,76,69,67,84,32,39,67,82,69,65,84,69,32,84,65,66,76,69,32,118,97,99,117,117,109,95,100,98,46,39,32,124,124,32,115,117,98,115,116,114,40,115,113,108,44,49,52,41,32,32,32,70,82,79,77,32,115,113,108,105,116,101,95,109,97,115,116,101,114,32,87,72,69,82,69,32,116,121,112,101,61,39,116,97,98,108,101,39,32,65,78,68,32,110,97,109,101,33,61,39,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,39,32,32,32,65,78,68,32,99,111,97,108,101,115,99,101,40,114,111,111,116,112,97,103,101,44,49,41,62,48,0,83,69,76,69,67,84,32,39,67,82,69,65,84,69,32,73,78,68,69,88,32,118,97,99,117,117,109,95,100,98,46,39,32,124,124,32,115,117,98,115,116,114,40,115,113,108,44,49,52,41,32,32,70,82,79,77,32,115,113,108,105,116,101,95,109,97,115,116,101,114,32,87,72,69,82,69,32,115,113,108,32,76,73,75,69,32,39,67,82,69,65,84,69,32,73,78,68,69,88,32,37,39,32,0,83,69,76,69,67,84,32,39,67,82,69,65,84,69,32,85,78,73,81,85,69,32,73,78,68,69,88,32,118,97,99,117,117,109,95,100,98,46,39,32,124,124,32,115,117,98,115,116,114,40,115,113,108,44,50,49,41,32,32,32,70,82,79,77,32,115,113,108,105,116,101,95,109,97,115,116,101,114,32,87,72,69,82,69,32,115,113,108,32,76,73,75,69,32,39,67,82,69,65,84,69,32,85,78,73,81,85,69,32,73,78,68,69,88,32,37,39,0,83,69,76,69,67,84,32,39,73,78,83,69,82,84,32,73,78,84,79,32,118,97,99,117,117,109,95,100,98,46,39,32,124,124,32,113,117,111,116,101,40,110,97,109,101,41,32,124,124,32,39,32,83,69,76,69,67,84,32,42,32,70,82,79,77,32,109,97,105,110,46,39,32,124,124,32,113,117,111,116,101,40,110,97,109,101,41,32,124,124,32,39,59,39,70,82,79,77,32,109,97,105,110,46,115,113,108,105,116,101,95,109,97,115,116,101,114,32,87,72,69,82,69,32,116,121,112,101,32,61,32,39,116,97,98,108,101,39,32,65,78,68,32,110,97,109,101,33,61,39,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,39,32,32,32,65,78,68,32,99,111,97,108,101,115,99,101,40,114,111,111,116,112,97,103,101,44,49,41,62,48,0,83,69,76,69,67,84,32,39,68,69,76,69,84,69,32,70,82,79,77,32,118,97,99,117,117,109,95,100,98,46,39,32,124,124,32,113,117,111,116,101,40,110,97,109,101,41,32,124,124,32,39,59,39,32,70,82,79,77,32,118,97,99,117,117,109,95,100,98,46,115,113,108,105,116,101,95,109,97,115,116,101,114,32,87,72,69,82,69,32,110,97,109,101,61,39,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,39,32,0,83,69,76,69,67,84,32,39,73,78,83,69,82,84,32,73,78,84,79,32,118,97,99,117,117,109,95,100,98,46,39,32,124,124,32,113,117,111,116,101,40,110,97,109,101,41,32,124,124,32,39,32,83,69,76,69,67,84,32,42,32,70,82,79,77,32,109,97,105,110,46,39,32,124,124,32,113,117,111,116,101,40,110,97,109,101,41,32,124,124,32,39,59,39,32,70,82,79,77,32,118,97,99,117,117,109,95,100,98,46,115,113,108,105,116,101,95,109,97,115,116,101,114,32,87,72,69,82,69,32,110,97,109,101,61,61,39,115,113,108,105,116,101,95,115,101,113,117,101,110,99,101,39,59,0,73,78,83,69,82,84,32,73,78,84,79,32,118,97,99,117,117,109,95,100,98,46,115,113,108,105,116,101,95,109,97,115,116,101,114,32,32,32,83,69,76,69,67,84,32,116,121,112,101,44,32,110,97,109,101,44,32,116,98,108,95,110,97,109,101,44,32,114,111,111,116,112,97,103,101,44,32,115,113,108,32,32,32,32,70,82,79,77,32,109,97,105,110,46,115,113,108,105,116,101,95,109,97,115,116,101,114,32,32,32,87,72,69,82,69,32,116,121,112,101,61,39,118,105,101,119,39,32,79,82,32,116,121,112,101,61,39,116,114,105,103,103,101,114,39,32,32,32,32,32,32,79,82,32,40,116,121,112,101,61,39,116,97,98,108,101,39,32,65,78,68,32,114,111,111,116,112,97,103,101,61,48,41,0,1,1,3,0,5,0,6,0,8,0,77,97,105,110,32,102,114,101,101,108,105,115,116,58,32,0,80,97,103,101,32,37,100,32,105,115,32,110,101,118,101,114,32,117,115,101,100,0,80,111,105,110,116,101,114,32,109,97,112,32,112,97,103,101,32,37,100,32,105,115,32,114,101,102,101,114,101,110,99,101,100,0,10,0,80,97,103,101,32,37,100,58,32,0,117,110,97,98,108,101,32,116,111,32,103,101,116,32,116,104,101,32,112,97,103,101,46,32,101,114,114,111,114,32,99,111,100,101,61,37,100,0,98,116,114,101,101,73,110,105,116,80,97,103,101,40,41,32,114,101,116,117,114,110,115,32,101,114,114,111,114,32,99,111,100,101,32,37,100,0,79,110,32,116,114,101,101,32,112,97,103,101,32,37,100,32,99,101,108,108,32,37,100,58,32,0,79,110,32,112,97,103,101,32,37,100,32,97,116,32,114,105,103,104,116,32,99,104,105,108,100,58,32,0,79,102,102,115,101,116,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,32,37,100,46,46,37,100,0,69,120,116,101,110,100,115,32,111,102,102,32,101,110,100,32,111,102,32,112,97,103,101,0,82,111,119,105,100,32,37,108,108,100,32,111,117,116,32,111,102,32,111,114,100,101,114,0,67,104,105,108,100,32,112,97,103,101,32,100,101,112,116,104,32,100,105,102,102,101,114,115,0,77,117,108,116,105,112,108,101,32,117,115,101,115,32,102,111,114,32,98,121,116,101,32,37,117,32,111,102,32,112,97,103,101,32,37,100,0,70,114,97,103,109,101,110,116,97,116,105,111,110,32,111,102,32,37,100,32,98,121,116,101,115,32,114,101,112,111,114,116,101,100,32,97,115,32,37,100,32,111,110,32,112,97,103,101,32,37,100,0,105,110,118,97,108,105,100,32,112,97,103,101,32,110,117,109,98,101,114,32,37,100,0,50,110,100,32,114,101,102,101,114,101,110,99,101,32,116,111,32,112,97,103,101,32,37,100,0,70,97,105,108,101,100,32,116,111,32,114,101,97,100,32,112,116,114,109,97,112,32,107,101,121,61,37,100,0,66,97,100,32,112,116,114,32,109,97,112,32,101,110,116,114,121,32,107,101,121,61,37,100,32,101,120,112,101,99,116,101,100,61,40,37,100,44,37,100,41,32,103,111,116,61,40,37,100,44,37,100,41,0,37,100,32,111,102,32,37,100,32,112,97,103,101,115,32,109,105,115,115,105,110,103,32,102,114,111,109,32,111,118,101,114,102,108,111,119,32,108,105,115,116,32,115,116,97,114,116,105,110,103,32,97,116,32,37,100,0,102,97,105,108,101,100,32,116,111,32,103,101,116,32,112,97,103,101,32,37,100,0,102,114,101,101,108,105,115,116,32,108,101,97,102,32,99,111,117,110,116,32,116,111,111,32,98,105,103,32,111,110,32,112,97,103,101,32,37,100,0,102,114,101,101,45,112,97,103,101,32,99,111,117,110,116,32,105,110,32,104,101,97,100,101,114,32,105,115,32,116,111,111,32,115,109,97,108,108,0,0,1,2,3,4,6,8,83,81,76,105,116,101,32,102,111,114,109,97,116,32,51,0,37,115,45,109,106,88,88,88,88,88,88,57,88,88,122,0,77,74,32,100,101,108,101,116,101,58,32,37,115,0,77,74,32,99,111,108,108,105,100,101,58,32,37,115,0,45,109,106,37,48,54,88,57,37,48,50,88,0,78,79,84,32,78,85,76,76,0,85,78,73,81,85,69,0,67,72,69,67,75,0,70,79,82,69,73,71,78,32,75,69,89,0,37,46,50,120,0,107,40,37,100,0,66,0,44,37,115,37,115,0,40,37,46,50,48,115,41,0,37,115,40,37,100,41,0,37,100,0,37,46,49,54,103,0,40,98,108,111,98,41,0,118,116,97,98,58,37,112,0,44,37,100,0,93,0,112,114,111,103,114,97,109,0,83,97,118,101,112,111,105,110,116,0,65,117,116,111,67,111,109,109,105,116,0,84,114,97,110,115,97,99,116,105,111,110,0,83,111,114,116,101,114,78,101,120,116,0,80,114,101,118,73,102,79,112,101,110,0,78,101,120,116,73,102,79,112,101,110,0,80,114,101,118,0,78,101,120,116,0,67,104,101,99,107,112,111,105,110,116,0,74,111,117,114,110,97,108,77,111,100,101,0,86,97,99,117,117,109,0,86,70,105,108,116,101,114,0,86,85,112,100,97,116,101,0,71,111,116,111,0,71,111,115,117,98,0,82,101,116,117,114,110,0,73,110,105,116,67,111,114,111,117,116,105,110,101,0,69,110,100,67,111,114,111,117,116,105,110,101,0,89,105,101,108,100,0,78,111,116,0,72,97,108,116,73,102,78,117,108,108,0,72,97,108,116,0,73,110,116,101,103,101,114,0,73,110,116,54,52,0,83,116,114,105,110,103,0,78,117,108,108,0,83,111,102,116,78,117,108,108,0,66,108,111,98,0,86,97,114,105,97,98,108,101,0,77,111,118,101,0,67,111,112,121,0,83,67,111,112,121,0,73,110,116,67,111,112,121,0,82,101,115,117,108,116,82,111,119,0,67,111,108,108,83,101,113,0,70,117,110,99,116,105,111,110,48,0,70,117,110,99,116,105,111,110,0,65,100,100,73,109,109,0,77,117,115,116,66,101,73,110,116,0,82,101,97,108,65,102,102,105,110,105,116,121,0,67,97,115,116,0,80,101,114,109,117,116,97,116,105,111,110,0,67,111,109,112,97,114,101,0,74,117,109,112,0,79,110,99,101,0,73,102,0,73,102,78,111,116,0,67,111,108,117,109,110,0,65,102,102,105,110,105,116,121,0,77,97,107,101,82,101,99,111,114,100,0,67,111,117,110,116,0,82,101,97,100,67,111,111,107,105,101,0,83,101,116,67,111,111,107,105,101,0,82,101,111,112,101,110,73,100,120,0,79,112,101,110,82,101,97,100,0,79,112,101,110,87,114,105,116,101,0,79,112,101,110,65,117,116,111,105,110,100,101,120,0,79,112,101,110,69,112,104,101,109,101,114,97,108,0,83,111,114,116,101,114,79,112,101,110,0,83,101,113,117,101,110,99,101,84,101,115,116,0,79,112,101,110,80,115,101,117,100,111,0,67,108,111,115,101,0,67,111,108,117,109,110,115,85,115,101,100,0,83,101,101,107,76,84,0,83,101,101,107,76,69,0,83,101,101,107,71,69,0,83,101,101,107,71,84,0,78,111,67,111,110,102,108,105,99,116,0,78,111,116,70,111,117,110,100,0,70,111,117,110,100,0,78,111,116,69,120,105,115,116,115,0,79,114,0,65,110,100,0,83,101,113,117,101,110,99,101,0,78,101,119,82,111,119,105,100,0,73,110,115,101,114,116,0,73,115,78,117,108,108,0,78,111,116,78,117,108,108,0,78,101,0,69,113,0,71,116,0,76,101,0,76,116,0,71,101,0,73,110,115,101,114,116,73,110,116,0,66,105,116,65,110,100,0,66,105,116,79,114,0,83,104,105,102,116,76,101,102,116,0,83,104,105,102,116,82,105,103,104,116,0,65,100,100,0,83,117,98,116,114,97,99,116,0,77,117,108,116,105,112,108,121,0,68,105,118,105,100,101,0,82,101,109,97,105,110,100,101,114,0,67,111,110,99,97,116,0,68,101,108,101,116,101,0,66,105,116,78,111,116,0,83,116,114,105,110,103,56,0,82,101,115,101,116,67,111,117,110,116,0,83,111,114,116,101,114,67,111,109,112,97,114,101,0,83,111,114,116,101,114,68,97,116,97,0,82,111,119,75,101,121,0,82,111,119,68,97,116,97,0,82,111,119,105,100,0,78,117,108,108,82,111,119,0,76,97,115,116,0,83,111,114,116,101,114,83,111,114,116,0,83,111,114,116,0,82,101,119,105,110,100,0,83,111,114,116,101,114,73,110,115,101,114,116,0,73,100,120,73,110,115,101,114,116,0,73,100,120,68,101,108,101,116,101,0,83,101,101,107,0,73,100,120,82,111,119,105,100,0,73,100,120,76,69,0,73,100,120,71,84,0,73,100,120,76,84,0,73,100,120,71,69,0,68,101,115,116,114,111,121,0,67,108,101,97,114,0,82,101,115,101,116,83,111,114,116,101,114,0,67,114,101,97,116,101,73,110,100,101,120,0,67,114,101,97,116,101,84,97,98,108,101,0,80,97,114,115,101,83,99,104,101,109,97,0,76,111,97,100,65,110,97,108,121,115,105,115,0,68,114,111,112,84,97,98,108,101,0,68,114,111,112,73,110,100,101,120,0,68,114,111,112,84,114,105,103,103,101,114,0,73,110,116,101,103,114,105,116,121,67,107,0,82,111,119,83,101,116,65,100,100,0,82,111,119,83,101,116,82,101,97,100,0,82,111,119,83,101,116,84,101,115,116,0,80,114,111,103,114,97,109,0,82,101,97,108,0,80,97,114,97,109,0,70,107,67,111,117,110,116,101,114,0,70,107,73,102,90,101,114,111,0,77,101,109,77,97,120,0,73,102,80,111,115,0,79,102,102,115,101,116,76,105,109,105,116,0,73,102,78,111,116,90,101,114,111,0,68,101,99,114,74,117,109,112,90,101,114,111,0,74,117,109,112,90,101,114,111,73,110,99,114,0,65,103,103,83,116,101,112,48,0,65,103,103,83,116,101,112,0,65,103,103,70,105,110,97,108,0,73,110,99,114,86,97,99,117,117,109,0,69,120,112,105,114,101,0,84,97,98,108,101,76,111,99,107,0,86,66,101,103,105,110,0,86,67,114,101,97,116,101,0,86,68,101,115,116,114,111,121,0,86,79,112,101,110,0,86,67,111,108,117,109,110,0,86,78,101,120,116,0,86,82,101,110,97,109,101,0,80,97,103,101,99,111,117,110,116,0,77,97,120,80,103,99,110,116,0,73,110,105,116,0,67,117,114,115,111,114,72,105,110,116,0,78,111,111,112,0,69,120,112,108,97,105,110,0,65,80,73,32,99,97,108,108,101,100,32,119,105,116,104,32,78,85,76,76,32,112,114,101,112,97,114,101,100,32,115,116,97,116,101,109,101,110,116,0,117,110,107,110,111,119,110,32,101,114,114,111,114,0,97,98,111,114,116,32,100,117,101,32,116,111,32,82,79,76,76,66,65,67,75,0,110,111,116,32,97,110,32,101,114,114,111,114,0,83,81,76,32,108,111,103,105,99,32,101,114,114,111,114,32,111,114,32,109,105,115,115,105,110,103,32,100,97,116,97,98,97,115,101,0,97,99,99,101,115,115,32,112,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,99,97,108,108,98,97,99,107,32,114,101,113,117,101,115,116,101,100,32,113,117,101,114,121,32,97,98,111,114,116,0,100,97,116,97,98,97,115,101,32,105,115,32,108,111,99,107,101,100,0,100,97,116,97,98,97,115,101,32,116,97,98,108,101,32,105,115,32,108,111,99,107,101,100,0,97,116,116,101,109,112,116,32,116,111,32,119,114,105,116,101,32,97,32,114,101,97,100,111,110,108,121,32,100,97,116,97,98,97,115,101,0,105,110,116,101,114,114,117,112,116,101,100,0,100,105,115,107,32,73,47,79,32,101,114,114,111,114,0,100,97,116,97,98,97,115,101,32,100,105,115,107,32,105,109,97,103,101,32,105,115,32,109,97,108,102,111,114,109,101,100,0,117,110,107,110,111,119,110,32,111,112,101,114,97,116,105,111,110,0,100,97,116,97,98,97,115,101,32,111,114,32,100,105,115,107,32,105,115,32,102,117,108,108,0,117,110,97,98,108,101,32,116,111,32,111,112,101,110,32,100,97,116,97,98,97,115,101,32,102,105,108,101,0,108,111,99,107,105,110,103,32,112,114,111,116,111,99,111,108,0,116,97,98,108,101,32,99,111,110,116,97,105,110,115,32,110,111,32,100,97,116,97,0,99,111,110,115,116,114,97,105,110,116,32,102,97,105,108,101,100,0,100,97,116,97,116,121,112,101,32,109,105,115,109,97,116,99,104,0,108,105,98,114,97,114,121,32,114,111,117,116,105,110,101,32,99,97,108,108,101,100,32,111,117,116,32,111,102,32,115,101,113,117,101,110,99,101,0,108,97,114,103,101,32,102,105,108,101,32,115,117,112,112,111,114,116,32,105,115,32,100,105,115,97,98,108,101,100,0,97,117,116,104,111,114,105,122,97,116,105,111,110,32,100,101,110,105,101,100,0,97,117,120,105,108,105,97,114,121,32,100,97,116,97,98,97,115,101,32,102,111,114,109,97,116,32,101,114,114,111,114,0,98,105,110,100,32,111,114,32,99,111,108,117,109,110,32,105,110,100,101,120,32,111,117,116,32,111,102,32,114,97,110,103,101,0,102,105,108,101,32,105,115,32,101,110,99,114,121,112,116,101,100,32,111,114,32,105,115,32,110,111,116,32,97,32,100,97,116,97,98,97,115,101,0,65,80,73,32,99,97,108,108,101,100,32,119,105,116,104,32,102,105,110,97,108,105,122,101,100,32,112,114,101,112,97,114,101,100,32,115,116,97,116,101,109,101,110,116,0,64,32,32,0,117,110,105,120,0,117,110,105,120,45,110,111,110,101,0,117,110,105,120,45,100,111,116,102,105,108,101,0,117,110,105,120,45,101,120,99,108,0,99,108,111,115,101,0,111,115,95,117,110,105,120,46,99,58,37,100,58,32,40,37,100,41,32,37,115,40,37,115,41,32,45,32,37,115,0,111,112,101,110,0,103,101,116,99,119,100,0,115,116,97,116,0,102,115,116,97,116,0,102,116,114,117,110,99,97,116,101,0,102,99,110,116,108,0,114,101,97,100,0,112,114,101,97,100,0,112,114,101,97,100,54,52,0,119,114,105,116,101,0,112,119,114,105,116,101,0,112,119,114,105,116,101,54,52,0,102,99,104,109,111,100,0,102,97,108,108,111,99,97,116,101,0,117,110,108,105,110,107,0,111,112,101,110,68,105,114,101,99,116,111,114,121,0,109,107,100,105,114,0,114,109,100,105,114,0,102,99,104,111,119,110,0,103,101,116,101,117,105,100,0,109,109,97,112,0,109,117,110,109,97,112,0,109,114,101,109,97,112,0,103,101,116,112,97,103,101,115,105,122,101,0,114,101,97,100,108,105,110,107,0,108,115,116,97,116,0,97,116,116,101,109,112,116,32,116,111,32,111,112,101,110,32,34,37,115,34,32,97,115,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,37,100,0,47,100,101,118,47,110,117,108,108,0,37,115,47,101,116,105,108,113,115,95,37,108,108,120,37,99,0,83,81,76,73,84,69,95,84,77,80,68,73,82,0,84,77,80,68,73,82,0,47,118,97,114,47,116,109,112,0,47,117,115,114,47,116,109,112,0,47,116,109,112,0,46,0,102,117,108,108,95,102,115,121,110,99,0,47,100,101,118,47,117,114,97,110,100,111,109,0,102,115,121,110,99,0,112,115,111,119,0,37,115,46,108,111,99,107,0,99,97,110,110,111,116,32,102,115,116,97,116,32,100,98,32,102,105,108,101,32,37,115,0,102,105,108,101,32,117,110,108,105,110,107,101,100,32,119,104,105,108,101,32,111,112,101,110,58,32,37,115,0,109,117,108,116,105,112,108,101,32,108,105,110,107,115,32,116,111,32,102,105,108,101,58,32,37,115,0,102,105,108,101,32,114,101,110,97,109,101,100,32,119,104,105,108,101,32,111,112,101,110,58,32,37,115,0,37,115,45,115,104,109,0,114,101,97,100,111,110,108,121,95,115,104,109,0,37,0,100,10,1,1,0,0,115,0,4,6,0,0,103,0,1,4,30,0,122,0,4,7,0,0,113,0,4,10,0,0,81,0,4,11,0,0,119,0,4,15,0,0,99,0,0,9,0,0,111,8,0,1,0,2,117,10,0,1,0,0,120,16,0,1,16,1,88,16,0,1,0,4,102,0,1,2,0,0,101,0,1,3,30,0,69,0,1,3,14,0,71,0,1,4,14,0,105,10,1,1,0,0,110,0,0,5,0,0,37,0,0,8,0,0,112,16,0,14,0,1,84,0,2,12,0,0,83,0,2,13,0,0,114,10,3,16,0,0,116,104,115,116,110,100,114,100,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,0,45,120,48,0,88,48,0,78,97,78,0,73,110,102,0,40,78,85,76,76,41,0,115,113,108,105,116,101,95,114,101,110,97,109,101,95,116,97,98,108,101,0,115,113,108,105,116,101,95,114,101,110,97,109,101,95,116,114,105,103,103,101,114,0,115,113,108,105,116,101,95,114,101,110,97,109,101,95,112,97,114,101,110,116,0,37,115,37,46,42,115,34,37,119,34,0,37,46,42,115,34,37,119,34,37,115,0,106,117,108,105,97,110,100,97,121,0,100,97,116,101,0,116,105,109,101,0,100,97,116,101,116,105,109,101,0,115,116,114,102,116,105,109,101,0,99,117,114,114,101,110,116,95,116,105,109,101,0,99,117,114,114,101,110,116,95,116,105,109,101,115,116,97,109,112,0,99,117,114,114,101,110,116,95,100,97,116,101,0,37,48,50,100,0,37,48,54,46,51,102,0,37,48,51,100,0,37,48,52,100,0,108,111,99,97,108,116,105,109,101,0,117,110,105,120,101,112,111,99,104,0,117,116,99,0,119,101,101,107,100,97,121,32,0,115,116,97,114,116,32,111,102,32,0,109,111,110,116,104,0,121,101,97,114,0,100,97,121,0,104,111,117,114,0,109,105,110,117,116,101,0,115,101,99,111,110,100,0,50,48,99,58,50,48,101,0,50,48,101,0,50,48,98,58,50,48,101,0,108,111,99,97,108,32,116,105,109,101,32,117,110,97,118,97,105,108,97,98,108,101,0,110,111,119,0,52,48,102,45,50,49,97,45,50,49,100,0,37,48,52,100,45,37,48,50,100,45,37,48,50,100,32,37,48,50,100,58,37,48,50,100,58,37,48,50,100,0,37,48,50,100,58,37,48,50,100,58,37,48,50,100,0,37,48,52,100,45,37,48,50,100,45,37,48,50,100,0,108,116,114,105,109,0,114,116,114,105,109,0,116,114,105,109,0,116,121,112,101,111,102,0,108,101,110,103,116,104,0,105,110,115,116,114,0,115,117,98,115,116,114,0,112,114,105,110,116,102,0,117,110,105,99,111,100,101,0,99,104,97,114,0,97,98,115,0,114,111,117,110,100,0,117,112,112,101,114,0,108,111,119,101,114,0,99,111,97,108,101,115,99,101,0,104,101,120,0,105,102,110,117,108,108,0,117,110,108,105,107,101,108,121,0,108,105,107,101,108,105,104,111,111,100,0,108,105,107,101,108,121,0,114,97,110,100,111,109,0,114,97,110,100,111,109,98,108,111,98,0,110,117,108,108,105,102,0,115,113,108,105,116,101,95,118,101,114,115,105,111,110,0,115,113,108,105,116,101,95,115,111,117,114,99,101,95,105,100,0,115,113,108,105,116,101,95,108,111,103,0,115,113,108,105,116,101,95,99,111,109,112,105,108,101,111,112,116,105,111,110,95,117,115,101,100,0,115,113,108,105,116,101,95,99,111,109,112,105,108,101,111,112,116,105,111,110,95,103,101,116,0,113,117,111,116,101,0,108,97,115,116,95,105,110,115,101,114,116,95,114,111,119,105,100,0,99,104,97,110,103,101,115,0,116,111,116,97,108,95,99,104,97,110,103,101,115,0,114,101,112,108,97,99,101,0,122,101,114,111,98,108,111,98,0,115,117,109,0,116,111,116,97,108,0,97,118,103,0,99,111,117,110,116,0,103,114,111,117,112,95,99,111,110,99,97,116,0,105,110,116,101,103,101,114,32,111,118,101,114,102,108,111,119,0,37,33,46,50,48,101,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,37,46,42,102,0,116,101,120,116,0,98,108,111,98,0,1,109,105,115,117,115,101,32,97,116,32,108,105,110,101,32,37,100,32,111,102,32,91,37,46,49,48,115,93,0,68,73,83,65,66,76,69,95,76,70,83,0,69,78,65,66,76,69,95,70,84,83,51,0,69,78,65,66,76,69,95,70,84,83,51,95,80,65,82,69,78,84,72,69,83,73,83,0,73,78,84,54,52,95,84,89,80,69,0,79,77,73,84,95,76,79,65,68,95,69,88,84,69,78,83,73,79,78,0,83,89,83,84,69,77,95,77,65,76,76,79,67,0,84,72,82,69,65,68,83,65,70,69,61,48,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,47,112,114,111,99,47,115,101,108,102,47,102,100,47],"i8",4,l.aa+41342);var yb=l.ta(z(12,"i8",2),8);assert(0==yb%8);f._i64Subtract=zb;f._i64Add=Ab;var D={H:1,J:2,Kd:3,Gc:4,O:5,Ka:6,$b:7,dd:8,L:9,nc:10,Ga:11,Ud:11,Ia:12,Y:13,zc:14,rd:15,Z:16,Ha:17,Vd:18,ha:19,ia:20,S:21,p:22,Zc:23,eb:24,$:25,Rd:26,Ac:27,nd:28,ja:29,Hd:30,Sc:31,Bd:32,wc:33,fb:34,jd:42,Dc:43,oc:44,Jc:45,Kc:46,Lc:47,Rc:48,Sd:49,bd:50,Ic:51,tc:35,ed:37,fc:52,ic:53,Wd:54,$c:55,jc:56,kc:57,uc:35,lc:59,pd:60,cd:61,Od:62,od:63,kd:64,ld:65,Gd:66,gd:67,cc:68,Ld:69,pc:70,Cd:71,Uc:72,xc:73,hc:74,wd:76,gc:77,Fd:78,Mc:79,Nc:80,Qc:81,Pc:82,Oc:83,qd:38,Ja:39,Vc:36,sa:40,xd:95,Ad:96,sc:104,ad:105,dc:97,Ed:91,ud:88,md:92,Id:108,rc:111,ac:98,qc:103,Yc:101,Wc:100,Pd:110,Bc:112,Cc:113,Fc:115,ec:114,vc:89,Tc:90,Dd:93,Jd:94,bc:99,Xc:102,Hc:106,sd:107,Qd:109,Td:87,yc:122,Md:116,vd:95,hd:123,Ec:84,yd:75,mc:125,td:131,zd:130,Nd:86},Bb={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 Cb(a){f.___errno_location&&(w[f.___errno_location()>>2]=a);return a}function Db(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 Eb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=Db(a.split("/").filter(function(a){return!!a}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a}function Fb(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 Gb(a){if("/"===a)return"/";var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function Hb(){var a=Array.prototype.slice.call(arguments,0);return Eb(a.join("/"))}function E(a,b){return Eb(a+"/"+b)}function Ib(){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=Db(a.split("/").filter(function(a){return!!a}),!b).join("/");return(b?"/":"")+a||"."}var Jb=[];function Kb(a,b){Jb[a]={input:[],output:[],W:b};Lb(a,Mb)}var Mb={open:function(a){var b=Jb[a.g.rdev];if(!b)throw new H(D.ha);a.tty=b;a.seekable=!1},close:function(a){a.tty.W.flush(a.tty)},flush:function(a){a.tty.W.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.W.Ya)throw new H(D.Ka);for(var e=0,g=0;ga.e.length&&(a.e=J.wb(a),a.q=a.e.length);if(!a.e||a.e.subarray){var c=a.e?a.e.buffer.byteLength:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.e,a.e=new Uint8Array(b),0b)a.e.length=b;else for(;a.e.length=a.g.q)return 0;a=Math.min(a.g.q-e,d);assert(0<=a);if(8b)throw new H(D.p);return b},Ma:function(a,b,c){J.Sa(a.g,b+c);a.g.q=Math.max(a.g.q,b+c)},oa:function(a,b,c,d,e,g,h){if(32768!==(a.g.mode&61440))throw new H(D.ha);c=a.g.e;if(h&2||c.buffer!==b&&c.buffer!==b.buffer){if(0>1)}catch(c){if(!c.code)throw c;throw new H(D[c.code])}return b.mode},F:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.D.Ba.root);b.reverse();return Hb.apply(null,b)},Ta:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},ub:function(a){a&=-32769;if(a in L.Ta)return L.Ta[a];throw new H(D.p)},k:{G:function(a){a=L.F(a);var b;try{b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new H(D[c.code])}L.na&&!b.P&&(b.P=4096);L.na&&!b.blocks&&(b.blocks=(b.size+b.P-1)/b.P|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,uid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,P:b.P,blocks:b.blocks}},B:function(a,b){var c=L.F(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 H(D[d.code])}},lookup:function(a,b){var c=E(L.F(a),b),c=L.Wa(c);return L.createNode(a,b,c)},da:function(a,b,c,d){a=L.createNode(a,b,c,d);b=L.F(a);try{K(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,"",{mode:a.mode})}catch(e){if(!e.code)throw e;throw new H(D[e.code])}return a},rename:function(a,b,c){a=L.F(a);b=E(L.F(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new H(D[d.code])}},unlink:function(a,b){var c=E(L.F(a),b);try{fs.unlinkSync(c)}catch(d){if(!d.code)throw d;throw new H(D[d.code])}},rmdir:function(a,b){var c=E(L.F(a),b);try{fs.rmdirSync(c)}catch(d){if(!d.code)throw d;throw new H(D[d.code])}},readdir:function(a){a=L.F(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new H(D[b.code])}},symlink:function(a,b,c){a=E(L.F(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new H(D[d.code])}},readlink:function(a){var b=L.F(a);try{return b=fs.readlinkSync(b),b=Tb.relative(Tb.resolve(a.D.Ba.root),b)}catch(c){if(!c.code)throw c;throw new H(D[c.code])}}},n:{open:function(a){var b=L.F(a.g);try{32768===(a.g.mode&61440)&&(a.ea=fs.openSync(b,L.ub(a.flags)))}catch(c){if(!c.code)throw c;throw new H(D[c.code])}},close:function(a){try{32768===(a.g.mode&61440)&&a.ea&&fs.closeSync(a.ea)}catch(b){if(!b.code)throw b;throw new H(D[b.code])}},read:function(a,b,c,d,e){if(0===d)return 0;var g=new Buffer(d),h;try{h=fs.readSync(a.ea,g,0,d,e)}catch(m){throw new H(D[m.code])}if(0b)throw new H(D.p);return b}}};z(1,"i32*",2);z(1,"i32*",2);z(1,"i32*",2);var Ub=null,Vb=[null],M=[],Wb=1,Xb=null,Yb=!0,N={},H=null,Rb={};function O(a,b){a=Ib("/",a);b=b||{};if(!a)return{path:"",g:null};var c={Ua:!0,Da:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8>>0)%Xb.length}function ac(a){var b=$b(a.parent.id,a.name);a.V=Xb[b];Xb[b]=a}function bc(a){var b=$b(a.parent.id,a.name);if(Xb[b]===a)Xb[b]=a.V;else for(b=Xb[b];b;){if(b.V===a){b.V=a.V;break}b=b.V}}function Sb(a,b){var c;if(c=(c=cc(a,"x"))?c:a.k.lookup?0:D.Y)throw new H(c,a);for(c=Xb[$b(a.id,b)];c;c=c.V){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.k.lookup(a,b)}function Qb(a,b,c,d){dc||(dc=function(a,b,c,d){a||(a=this);this.parent=a;this.D=a.D;this.U=null;this.id=Wb++;this.name=b;this.mode=c;this.k={};this.n={};this.rdev=d},dc.prototype={},Object.defineProperties(dc.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}},Fb:{get:function(){return K(this.mode)}},Eb:{get:function(){return 8192===(this.mode&61440)}}}));a=new dc(a,b,c,d);ac(a);return a}function K(a){return 16384===(a&61440)}var ec={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 cc(a,b){if(Yb)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 D.Y}else return D.Y;return 0}function fc(a,b){try{return Sb(a,b),D.Ha}catch(c){}return cc(a,"wx")}function gc(a,b,c){var d;try{d=Sb(a,b)}catch(e){return e.o}if(a=cc(a,"wx"))return a;if(c){if(!K(d.mode))return D.ia;if(d===d.parent||"/"===P(d))return D.Z}else if(K(d.mode))return D.S;return 0}function hc(a){var b;b=4096;for(a=a||0;a<=b;a++)if(!M[a])return a;throw new H(D.eb)}function ic(a,b){jc||(jc=function(){},jc.prototype={},Object.defineProperties(jc.prototype,{object:{get:function(){return this.g},set:function(a){this.g=a}},Fe:{get:function(){return 1!==(this.flags&2097155)}},Ge:{get:function(){return 0!==(this.flags&2097155)}},Ee:{get:function(){return this.flags&1024}}}));var c=new jc,d;for(d in a)c[d]=a[d];a=c;c=hc(b);a.fd=c;return M[c]=a}var Pb={open:function(a){a.n=Vb[a.g.rdev].n;a.n.open&&a.n.open(a)},N:function(){throw new H(D.ja)}};function Lb(a,b){Vb[a]={n:b}}function kc(a,b){var c="/"===b,d=!b,e;if(c&&Ub)throw new H(D.Z);if(!c&&!d){e=O(b,{Ua:!1});b=e.path;e=e.g;if(e.U)throw new H(D.Z);if(!K(e.mode))throw new H(D.ia)}var d={type:a,Ba:{},$a:b,Jb:[]},g=a.D(d);g.D=d;d.root=g;c?Ub=g:e&&(e.U=d,e.D&&e.D.Jb.push(d))}function mc(a,b,c){var d=O(a,{parent:!0}).g;a=Gb(a);if(!a||"."===a||".."===a)throw new H(D.p);var e=fc(d,a);if(e)throw new H(e);if(!d.k.da)throw new H(D.H);return d.k.da(d,a,b,c)}function nc(a,b){b=(void 0!==b?b:438)&4095;b|=32768;return mc(a,b,0)}function Q(a,b){b=(void 0!==b?b:511)&1023;b|=16384;return mc(a,b,0)}function oc(a,b,c){"undefined"===typeof c&&(c=b,b=438);return mc(a,b|8192,c)}function pc(a,b){if(!Ib(a))throw new H(D.J);var c=O(b,{parent:!0}).g;if(!c)throw new H(D.J);var d=Gb(b),e=fc(c,d);if(e)throw new H(e);if(!c.k.symlink)throw new H(D.H);return c.k.symlink(c,d,a)}function qc(a){var b=O(a,{parent:!0}).g,c=Gb(a),d=Sb(b,c),e=gc(b,c,!1);if(e)throw e===D.S&&(e=D.H),new H(e);if(!b.k.unlink)throw new H(D.H);if(d.U)throw new H(D.Z);try{N.willDeletePath&&N.willDeletePath(a)}catch(g){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.k.unlink(b,c);bc(d);try{if(N.onDeletePath)N.onDeletePath(a)}catch(h){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+h.message)}}function Zb(a){a=O(a).g;if(!a)throw new H(D.J);if(!a.k.readlink)throw new H(D.p);return Ib(P(a.parent),a.k.readlink(a))}function rc(a,b){var c=O(a,{Q:!b}).g;if(!c)throw new H(D.J);if(!c.k.G)throw new H(D.H);return c.k.G(c)}function sc(a){return rc(a,!0)}function tc(a,b){var c;"string"===typeof a?c=O(a,{Q:!0}).g:c=a;if(!c.k.B)throw new H(D.H);c.k.B(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})}function uc(a){var b;"string"===typeof a?b=O(a,{Q:!0}).g:b=a;if(!b.k.B)throw new H(D.H);b.k.B(b,{timestamp:Date.now()})}function vc(a,b){if(0>b)throw new H(D.p);var c;"string"===typeof a?c=O(a,{Q:!0}).g:c=a;if(!c.k.B)throw new H(D.H);if(K(c.mode))throw new H(D.S);if(32768!==(c.mode&61440))throw new H(D.p);var d=cc(c,"w");if(d)throw new H(d);c.k.B(c,{size:b,timestamp:Date.now()})}function wc(a,b,c,d){if(""===a)throw new H(D.J);if("string"===typeof b){var e=ec[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;var g;if("object"===typeof a)g=a;else{a=Eb(a);try{g=O(a,{Q:!(b&131072)}).g}catch(h){}}e=!1;if(b&64)if(g){if(b&128)throw new H(D.Ha)}else g=mc(a,c,0),e=!0;if(!g)throw new H(D.J);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!K(g.mode))throw new H(D.ia);if(!e&&(g?40960===(g.mode&61440)?c=D.sa:K(g.mode)&&(0!==(b&2097155)||b&512)?c=D.S:(c=["r","w","rw"][b&3],b&512&&(c+="w"),c=cc(g,c)):c=D.J,c))throw new H(c);b&512&&vc(g,0);b&=-641;d=ic({g:g,path:P(g),flags:b,seekable:!0,position:0,n:g.n,Sb:[],error:!1},d);d.n.open&&d.n.open(d);!f.logReadFiles||b&1||(xc||(xc={}),a in xc||(xc[a]=1,f.printErr("read file: "+a)));try{N.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),N.onOpenFile(a,g))}catch(m){console.log("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+m.message)}return d}function yc(a){a.za&&(a.za=null);try{a.n.close&&a.n.close(a)}catch(b){throw b}finally{M[a.fd]=null}}function zc(a,b,c){if(!a.seekable||!a.n.N)throw new H(D.ja);a.position=a.n.N(a,b,c);a.Sb=[]}function Ac(a,b,c,d,e){if(0>d||0>e)throw new H(D.p);if(1===(a.flags&2097155))throw new H(D.L);if(K(a.g.mode))throw new H(D.S);if(!a.n.read)throw new H(D.p);var g=!0;if("undefined"===typeof e)e=a.position,g=!1;else if(!a.seekable)throw new H(D.ja);b=a.n.read(a,b,c,d,e);g||(a.position+=b);return b}function Bc(a,b,c,d,e,g){if(0>d||0>e)throw new H(D.p);if(0===(a.flags&2097155))throw new H(D.L);if(K(a.g.mode))throw new H(D.S);if(!a.n.write)throw new H(D.p);a.flags&1024&&zc(a,0,2);var h=!0;if("undefined"===typeof e)e=a.position,h=!1;else if(!a.seekable)throw new H(D.ja);b=a.n.write(a,b,c,d,e,g);h||(a.position+=b);try{if(a.path&&N.onWriteToFile)N.onWriteToFile(a.path)}catch(m){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+m.message)}return b}function Cc(){H||(H=function(a,b){this.g=b;this.Pb=function(a){this.o=a;for(var b in D)if(D[b]===a){this.code=b;break}};this.Pb(a);this.message=Bb[a]},H.prototype=Error(),H.prototype.constructor=H,[D.J].forEach(function(a){Rb[a]=new H(a);Rb[a].stack=""}))}var Dc;function Ec(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}function Fc(a,b,c,d){a=E("string"===typeof a?a:P(a),b);return nc(a,Ec(c,d))}function Gc(a,b,c,d,e,g){a=b?E("string"===typeof a?a:P(a),b):a;d=Ec(d,e);e=nc(a,d);if(c){if("string"===typeof c){a=Array(c.length);b=0;for(var h=c.length;b>2]=d.dev;w[c+4>>2]=0;w[c+8>>2]=d.ino;w[c+12>>2]=d.mode;w[c+16>>2]=d.nlink;w[c+20>>2]=d.uid;w[c+24>>2]=d.gid;w[c+28>>2]=d.rdev;w[c+32>>2]=0;w[c+36>>2]=d.size;w[c+40>>2]=4096;w[c+44>>2]=d.blocks;w[c+48>>2]=d.atime.getTime()/1e3|0;w[c+52>>2]=0;w[c+56>>2]=d.mtime.getTime()/1e3|0;w[c+60>>2]=0;w[c+64>>2]=d.ctime.getTime()/1e3|0;w[c+68>>2]=0;w[c+72>>2]=d.ino;return 0}var S=0;function T(){S+=4;return w[S-4>>2]}function U(){return q(T())}function Lc(){var a;a=T();a=M[a];if(!a)throw new H(D.L);return a}var xa=void 0;function Mc(a){a=a/1e3;if((ca||da)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b>2]=60*-(new Date).getTimezoneOffset();var b=new Date(2e3,0,1),c=new Date(2e3,6,1);w[Pc>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c),d=z(B(d),"i8",0),e=z(B(e),"i8",0);c.getTimezoneOffset()>2]=d,w[Oc+4>>2]=e):(w[Oc>>2]=e,w[Oc+4>>2]=d)}}function Sc(a,b){Rc();var c=new Date(1e3*w[a>>2]);w[b>>2]=c.getSeconds();w[b+4>>2]=c.getMinutes();w[b+8>>2]=c.getHours();w[b+12>>2]=c.getDate();w[b+16>>2]=c.getMonth();w[b+20>>2]=c.getFullYear()-1900;w[b+24>>2]=c.getDay();var d=new Date(c.getFullYear(),0,1);w[b+28>>2]=(c.getTime()-d.getTime())/864e5|0;w[b+36>>2]=-(60*c.getTimezoneOffset());c=c.getTimezoneOffset()==Math.min(d.getTimezoneOffset(),new Date(2e3,6,1).getTimezoneOffset())|0;w[b+32>>2]=c;w[b+40>>2]=w[Oc+(c?l.M:0)>>2];return b}f._bitshift64Lshr=Tc;function Uc(a,b){eb.push(function(){l.T("vi",a,[b])});Uc.level=eb.length}var Vc=z(1,"i32*",2);function Wc(a){var b,c;Wc.C?(c=w[Vc>>2],b=w[c>>2]):(Wc.C=!0,V.USER=V.LOGNAME="web_user",V.PATH="/",V.PWD="/",V.HOME="/home/web_user",V.LANG="C",V._=f.thisProgram,b=z(1024,"i8",2),c=z(256,"i8*",2),w[c>>2]=b,w[Vc>>2]=c);var d=[],e=0,g;for(g in a)if("string"===typeof a[g]){var h=g+"="+a[g];d.push(h);e+=h.length}if(1024>2]=b,b+=h.length+1;w[c+4*d.length>>2]=0}var V={};function Xc(a){if(0===a)return 0;a=q(a);if(!V.hasOwnProperty(a))return 0;Xc.C&&Pa(Xc.C);Xc.C=z(B(V[a]),"i8",0);return Xc.C}f._memcpy=Yc;function Ia(a){Ia.Va||(n=Sa(),Ia.Va=!0,assert(l.ba),Ia.Gb=l.ba,l.ba=function(){p("cannot dynamically allocate, sbrk now has control")});var b=n;return 0==a||Ia.Gb(a)?b:4294967295}f._memmove=Zc;function $c(a,b){S=b;return 0}f._memset=ad;f._bitshift64Shl=bd;var cd=Ca;function dd(a,b){ed=a;fd=b;if(!gd)return 1;if(0==a)hd=function(){setTimeout(id,b)},jd="timeout";else if(1==a)hd=function(){kd(id)},jd="rAF";else if(2==a){if(!window.setImmediate){var c=[];window.addEventListener("message",function(a){a.source===window&&"__emcc"===a.data&&(a.stopPropagation(),c.shift()())},!0);window.setImmediate=function(a){c.push(a);window.postMessage("__emcc","*")}}hd=function(){window.setImmediate(id)};jd="immediate"}return 0}function ld(a,b,c,d,e){f.noExitRuntime=!0;assert(!gd,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");gd=a;md=d;var g=nd;id=function(){if(!oa)if(0>h-6&63,h=h-6,c=c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[v];2==h?(c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(g&3)<<4],c+="=="):4==h&&(c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(g&15)<<2],c+="=");G.src="data:audio/x-"+b.substr(-3)+";base64,"+c;m(G)}};G.src=x;Dd(function(){m(G)})}else return t()}});var c=f.canvas;c&&(c.Ea=c.requestPointerLock||c.mozRequestPointerLock||c.webkitRequestPointerLock||c.msRequestPointerLock||function(){},c.Ra=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},c.Ra=c.Ra.bind(document),document.addEventListener("pointerlockchange",a,!1),document.addEventListener("mozpointerlockchange",a,!1),document.addEventListener("webkitpointerlockchange",a,!1),document.addEventListener("mspointerlockchange",a,!1),f.elementPointerLock&&c.addEventListener("click",function(a){!vd&&c.Ea&&(c.Ea(),a.preventDefault())},!1))}}function Ed(a,b,c,d){if(b&&f.wa&&a==f.canvas)return f.wa;var e,g;if(b){g={antialias:!1,alpha:!1};if(d)for(var h in d)g[h]=d[h];if(g=GL.createContext(a,g))e=GL.getContext(g).Zd;a.style.backgroundColor="black"}else e=a.getContext("2d");if(!e)return null;c&&(b||assert("undefined"===typeof GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),f.wa=e,b&&GL.Ie(g),f.Le=b,wd.forEach(function(a){a()}),xd());return e}var Fd=!1,Gd=void 0,Hd=void 0;function Id(a,b,c){function d(){ud=!1;var a=e.parentNode;(document.webkitFullScreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.mozFullscreenElement||document.fullScreenElement||document.fullscreenElement||document.msFullScreenElement||document.msFullscreenElement||document.webkitCurrentFullScreenElement)===a?(e.Pa=document.cancelFullScreen||document.mozCancelFullScreen||document.webkitCancelFullScreen||document.msExitFullscreen||document.exitFullscreen||function(){},e.Pa=e.Pa.bind(document),Gd&&e.Ea(),ud=!0,Hd&&Jd()):(a.parentNode.insertBefore(e,a),a.parentNode.removeChild(a),Hd&&Kd());if(f.onFullScreen)f.onFullScreen(ud);Ld(e)}Gd=a;Hd=b;Md=c;"undefined"===typeof Gd&&(Gd=!0);"undefined"===typeof Hd&&(Hd=!1);"undefined"===typeof Md&&(Md=null);var e=f.canvas;Fd||(Fd=!0,document.addEventListener("fullscreenchange",d,!1),document.addEventListener("mozfullscreenchange",d,!1),document.addEventListener("webkitfullscreenchange",d,!1),document.addEventListener("MSFullscreenChange",d,!1));var g=document.createElement("div");e.parentNode.insertBefore(g,e);g.appendChild(e);g.C=g.requestFullScreen||g.mozRequestFullScreen||g.msRequestFullscreen||(g.webkitRequestFullScreen?function(){g.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null);c?g.C({Me:c}):g.C()}var Nd=0;function Od(a){var b=Date.now();if(0===Nd)Nd=b+1e3/60;else for(;b+2>=Nd;)Nd+=1e3/60;b=Math.max(Nd-b,0);setTimeout(a,b)}function kd(a){"undefined"===typeof window?Od(a):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Od),window.requestAnimationFrame(a))}function Dd(a){f.noExitRuntime=!0;setTimeout(function(){oa||a()},1e4)}function Cd(a){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[a.substr(a.lastIndexOf(".")+1)]}function Pd(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):c()};d.onerror=c;d.send(null)}function Qd(a,b,c){Pd(a,function(c){assert(c,'Loading data file "'+a+'" failed (no arrayBuffer).');b(new Uint8Array(c));xb()},function(){if(c)c();else throw'Loading data file "'+a+'" failed.'});wb()}var Rd=[];function Sd(){var a=f.canvas;Rd.forEach(function(b){b(a.width,a.height)})}function Jd(){if("undefined"!=typeof SDL){var a=Ua[SDL.screen+0*l.M>>2];w[SDL.screen+0*l.M>>2]=a|8388608}Sd()}function Kd(){if("undefined"!=typeof SDL){var a=Ua[SDL.screen+0*l.M>>2];w[SDL.screen+0*l.M>>2]=a&-8388609}Sd()}function Ld(a,b,c){b&&c?(a.Tb=b,a.Cb=c):(b=a.Tb,c=a.Cb);var d=b,e=c;f.forcedAspectRatio&&0this.length-1||0>a)){var b=a%this.chunkSize;return this.Bb(a/this.chunkSize|0)[b]}};m.prototype.Ob=function(a){this.Bb=a};m.prototype.Oa=function(){var a=new XMLHttpRequest;a.open("HEAD",c,!1);a.send(null);if(!(200<=a.status&&300>a.status||304===a.status))throw Error("Couldn't load "+c+". Status: "+a.status);var b=Number(a.getResponseHeader("Content-length")),d,e=1048576;(d=a.getResponseHeader("Accept-Ranges"))&&"bytes"===d||(e=b);var g=this;g.Ob(function(a){var d=a*e,h=(a+1)*e-1,h=Math.min(h,b-1);if("undefined"===typeof g.ma[a]){var m=g.ma;if(d>h)throw Error("invalid range ("+d+", "+h+") or no bytes requested!");if(h>b-1)throw Error("only "+b+" bytes available! programmer error!");var r=new XMLHttpRequest;r.open("GET",c,!1);b!==e&&r.setRequestHeader("Range","bytes="+d+"-"+h);"undefined"!=typeof Uint8Array&&(r.responseType="arraybuffer");r.overrideMimeType&&r.overrideMimeType("text/plain; charset=x-user-defined");r.send(null);if(!(200<=r.status&&300>r.status||304===r.status))throw Error("Couldn't load "+c+". Status: "+r.status);d=void 0!==r.response?new Uint8Array(r.response||[]):B(r.responseText||"",!0);m[a]=d}if("undefined"===typeof g.ma[a])throw Error("doXHR failed!");return g.ma[a]});this.lb=b;this.kb=e;this.Aa=!0};if("undefined"!==typeof XMLHttpRequest){if(!da)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";g=new m;Object.defineProperty(g,"length",{get:function(){this.Aa||this.Oa();return this.lb}});Object.defineProperty(g,"chunkSize",{get:function(){this.Aa||this.Oa();return this.kb}});h=void 0}else h=c,g=void 0;var t=Fc(a,b,d,e);g?t.e=g:h&&(t.e=null,t.url=h);Object.defineProperty(t,"usedBytes",{get:function(){return this.e.length}});var r={};Object.keys(t.n).forEach(function(a){var b=t.n[a];r[a]=function(){if(!Ic(t))throw new H(D.O);return b.apply(null,arguments)}});r.read=function(a,b,c,d,e){if(!Ic(t))throw new H(D.O);a=a.g.e;if(e>=a.length)return 0;d=Math.min(a.length-e,d);assert(0<=d);if(a.slice)for(var g=0;g=g)e=-D.p;else{var h=Zb(c),h=h.slice(0,Math.max(0,g));wa(h,d,!0);e=h.length}return e}catch(m){return"undefined"!==typeof R&&m instanceof H||p(m),-m.o}},_sin:jb,_exp:pb,_utimes:function(a,b){var c;b?(c=1e3*w[b+8>>2],c+=w[b+12>>2]/1e3):c=Date.now();a=q(a);try{var d=c,e=O(a,{Q:!0}).g;e.k.B(e,{timestamp:Math.max(d,c)});return 0}catch(g){if(!(g instanceof H))throw g+" : "+Qa();Cb(g.o);return-1}},_llvm_pow_f64:sb,_acos:lb,___syscall54:function(a,b){S=b;try{var c=Lc(),d=T();switch(d){case 21505:return c.tty?0:-D.$;case 21506:return c.tty?0:-D.$;case 21519:if(!c.tty)return-D.$;var e=T();return w[e>>2]=0;case 21520:return c.tty?-D.p:-D.$;case 21531:e=T();if(!c.n.Db)throw new H(D.$);return c.n.Db(c,d,e);default:p("bad ioctl syscall "+d)}}catch(g){return"undefined"!==typeof R&&g instanceof H||p(g),-g.o}},_pthread_cleanup_push:Uc,_abort:function(){f.abort()},___syscall40:function(a,b){S=b;try{var c=U(),d=O(c,{parent:!0}).g,e=Gb(c),g=Sb(d,e),h=gc(d,e,!0);if(h)throw new H(h);if(!d.k.rmdir)throw new H(D.H);if(g.U)throw new H(D.Z);try{N.willDeletePath&&N.willDeletePath(c)}catch(m){console.log("FS.trackingDelegate['willDeletePath']('"+c+"') threw an exception: "+m.message)}d.k.rmdir(d,e);bc(g);try{if(N.onDeletePath)N.onDeletePath(c)}catch(t){console.log("FS.trackingDelegate['onDeletePath']('"+c+"') threw an exception: "+t.message)}return 0}catch(r){return"undefined"!==typeof R&&r instanceof H||p(r),-r.o}},___syscall118:function(a,b){S=b;try{return Lc(),0}catch(c){return"undefined"!==typeof R&&c instanceof H||p(c),-c.o}},___setErrNo:Cb,___syscall20:function(a,b){S=b;return 42},___syscall183:function(a,b){S=b;try{var c=T(),d=T();if(0===d)return-D.p;if(2>d)return-D.fb;Ka("/",c);return c}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},___assert_fail:function(a,b,c,d){oa=!0;throw"Assertion failed: "+q(a)+", at: "+[b?q(b):"unknown filename",c,d?q(d):"unknown function"]+" at "+Qa()},_usleep:Mc,_asin:mb,___buildEnvironment:Wc,___syscall202:$c,___syscall91:function(a,b){S=b;try{var c=T(),d=T(),e=Jc[c];if(!e)return 0;if(d===e.Hb){var g=M[e.fd],h=e.flags,m=new Uint8Array(A.subarray(c,c+d));g&&g.n.pa&&g.n.pa(g,m,0,d,h);Jc[c]=null;e.ua&&Pa(e.Ib)}return 0}catch(t){return"undefined"!==typeof R&&t instanceof H||p(t),-t.o}},_cos:ib,___syscall39:function(a,b){S=b;try{var c=U(),d=T(),c=Eb(c);"/"===c[c.length-1]&&(c=c.substr(0,c.length-1));Q(c,d);return 0}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},_localtime_r:Sc,_tzset:Rc,_emscripten_set_main_loop_timing:dd,_sbrk:Ia,___syscall192:function(a,b){S=b;try{var c=T(),d=T(),e=T(),g=T(),h=T(),m=T(),m=m<<12,t,r=!1;if(-1===h){t=Ga(d);if(!t)return-D.Ia;ad(t,0,d);r=!0}else{var x=M[h];if(!x)return-D.L;var v,G=A;if(1===(x.flags&2097155))throw new H(D.Y);if(!x.n.oa)throw new H(D.ha);v=x.n.oa(x,G,c,d,m,e,g);t=v.Kb;r=v.ua}Jc[t]={Ib:t,Hb:d,ua:r,fd:h,flags:g};return t}catch(I){return"undefined"!==typeof R&&I instanceof H||p(I),-I.o}},___syscall197:function(a,b){S=b;try{var c=Lc(),d=T();return Kc(rc,c.path,d)}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},___syscall196:function(a,b){S=b;try{var c=U(),d=T();return Kc(sc,c,d)}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},___syscall195:function(a,b){S=b;try{var c=U(),d=T();return Kc(rc,c,d)}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},___syscall194:function(a,b){S=b;try{var c=T();assert(0===T());var d=T(),e=T();0<=d?assert(0===e):assert(-1===e);var g=M[c];if(!g)throw new H(D.L);if(0===(g.flags&2097155))throw new H(D.p);vc(g.g,d);return 0}catch(h){return"undefined"!==typeof R&&h instanceof H||p(h),-h.o}},___syscall212:function(a,b){S=b;try{var c=U();T();T();uc(c);return 0}catch(d){return"undefined"!==typeof R&&d instanceof H||p(d),-d.o}},_sysconf:function(a){switch(a){case 30:return 4096;case 85:return $a/4096;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;case 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;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}Cb(D.p);return-1},___syscall94:function(a,b){S=b;try{var c=T(),d=T(),e=M[c];if(!e)throw new H(D.L);tc(e.g,d);return 0}catch(g){return"undefined"!==typeof R&&g instanceof H||p(g),-g.o}},_nanosleep:function(a,b){var c=w[a>>2],d=w[a+4>>2];0!==b&&(w[b>>2]=0,w[b+4>>2]=0);return Mc(1e6*c+d/1e3)},_emscripten_memcpy_big:function(a,b,c){A.set(A.subarray(b,b+c),a);return a},___syscall221:function(a,b){S=b;try{var c=Lc();switch(T()){case 0:var d=T();return 0>d?-D.p:wc(c.path,c.flags,0,d).fd;case 1:case 2:return 0;case 3:return c.flags;case 4:return d=T(),c.flags|=d,0;case 12:case 12:return d=T(),za[d+0>>1]=2,0;case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-D.p;case 9:return Cb(D.p),-1;default:return-D.p}}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},_floor:cd,_atan:nb,___syscall201:function(){return $c.apply(null,arguments)},_pthread_self:function(){return 0},_getenv:Xc,___syscall33:function(a,b){S=b;try{var c=U(),d;var e=T();if(e&-8)d=-D.p;else{var g;g=O(c,{Q:!0}).g;c="";e&4&&(c+="r");e&2&&(c+="w");e&1&&(c+="x");d=c&&cc(g,c)?-D.Y:0}return d}catch(h){return"undefined"!==typeof R&&h instanceof H||p(h),-h.o}},_log:qb,___unlock:function(){},___syscall140:function(a,b){S=b;try{var c=Lc(),d=T(),e=T(),g=T(),h=T();assert(0===d);zc(c,e,h);w[g>>2]=c.position;c.za&&0===e&&0===h&&(c.za=null);return 0}catch(m){return"undefined"!==typeof R&&m instanceof H||p(m),-m.o}},___syscall15:function(a,b){S=b;try{var c=U(),d=T();tc(c,d);return 0}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},_emscripten_set_main_loop:ld,___syscall10:function(a,b){S=b;try{var c=U();qc(c);return 0}catch(d){return"undefined"!==typeof R&&d instanceof H||p(d),-d.o}},_tan:kb,___syscall3:function(a,b){S=b;try{var c=Lc(),d=T(),e=T();return Ac(c,u,d,e)}catch(g){return"undefined"!==typeof R&&g instanceof H||p(g),-g.o}},___lock:function(){},___syscall6:function(a,b){S=b;try{var c=Lc();yc(c);return 0}catch(d){return"undefined"!==typeof R&&d instanceof H||p(d),-d.o}},___syscall5:function(a,b){S=b;try{var c=U(),d=T(),e=T();return wc(c,d,e).fd}catch(g){return"undefined"!==typeof R&&g instanceof H||p(g),-g.o}},___syscall4:function(a,b){S=b;try{var c=Lc(),d=T(),e=T();return Bc(c,u,d,e)}catch(g){return"undefined"!==typeof R&&g instanceof H||p(g),-g.o}},_time:function(a){var b=Date.now()/1e3|0;a&&(w[a>>2]=b);return b},_atan2:ob,_gettimeofday:function(a){var b=Date.now();w[a>>2]=b/1e3|0;w[a+4>>2]=b%1e3*1e3|0;return 0},_ceil:Td,_sqrt:rb,_localtime:function(a){return Sc(a,Nc)},___syscall207:function(a,b){S=b;try{var c=T();T();T();var d=M[c];if(!d)throw new H(D.L);uc(d.g);return 0}catch(e){return"undefined"!==typeof R&&e instanceof H||p(e),-e.o}},___syscall146:function(a,b){S=b;try{var c=Lc(),d=T(),e;a:{for(var g=T(),h=0,m=0;m>2],w[d+(8*m+4)>>2],void 0);if(0>t){e=-1;break a}h+=t}e=h}return e}catch(r){return"undefined"!==typeof R&&r instanceof H||p(r),-r.o}},STACKTOP:k,STACK_MAX:Xa,tempDoublePtr:yb,ABORT:oa,cttz_i8:Ud};var W=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.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|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,y=0,z=0,A=0,B=0.0;var C=0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=global.Math.floor;var N=global.Math.abs;var O=global.Math.sqrt;var P=global.Math.pow;var Q=global.Math.cos;var R=global.Math.sin;var S=global.Math.tan;var T=global.Math.acos;var U=global.Math.asin;var V=global.Math.atan;var W=global.Math.atan2;var X=global.Math.exp;var Y=global.Math.log;var Z=global.Math.ceil;var _=global.Math.imul;var $=global.Math.min;var aa=global.Math.clz32;var ba=env.abort;var ca=env.assert;var da=env.invoke_iiii;var ea=env.jsCall_iiii;var fa=env.invoke_i;var ga=env.jsCall_i;var ha=env.invoke_vi;var ia=env.jsCall_vi;var ja=env.invoke_vii;var ka=env.jsCall_vii;var la=env.invoke_iiiiiii;var ma=env.jsCall_iiiiiii;var na=env.invoke_ii;var oa=env.jsCall_ii;var pa=env.invoke_viii;var qa=env.jsCall_viii;var ra=env.invoke_v;var sa=env.jsCall_v;var ta=env.invoke_iiiii;var ua=env.jsCall_iiiii;var va=env.invoke_viiiiii;var wa=env.jsCall_viiiiii;var xa=env.invoke_iii;var ya=env.jsCall_iii;var za=env.invoke_iiiiii;var Aa=env.jsCall_iiiiii;var Ba=env.invoke_viiii;var Ca=env.jsCall_viiii;var Da=env._pthread_cleanup_pop;var Ea=env.___syscall85;var Fa=env._sin;var Ga=env._exp;var Ha=env._utimes;var Ia=env._llvm_pow_f64;var Ja=env._acos;var Ka=env.___syscall54;var La=env._pthread_cleanup_push;var Ma=env._abort;var Na=env.___syscall40;var Oa=env.___syscall118;var Pa=env.___setErrNo;var Qa=env.___syscall20;var Ra=env.___syscall183;var Sa=env.___assert_fail;var Ta=env._usleep;var Ua=env._asin;var Va=env.___buildEnvironment;var Wa=env.___syscall202;var Xa=env.___syscall91;var Ya=env._cos;var Za=env.___syscall39;var _a=env._localtime_r;var $a=env._tzset;var ab=env._emscripten_set_main_loop_timing;var bb=env._sbrk;var cb=env.___syscall192;var db=env.___syscall197;var eb=env.___syscall196;var fb=env.___syscall195;var gb=env.___syscall194;var hb=env.___syscall212;var ib=env._sysconf;var jb=env.___syscall94;var kb=env._nanosleep;var lb=env._emscripten_memcpy_big;var mb=env.___syscall221;var nb=env._floor;var ob=env._atan;var pb=env.___syscall201;var qb=env._pthread_self;var rb=env._getenv;var sb=env.___syscall33;var tb=env._log;var ub=env.___unlock;var vb=env.___syscall140;var wb=env.___syscall15;var xb=env._emscripten_set_main_loop;var yb=env.___syscall10;var zb=env._tan;var Ab=env.___syscall3;var Bb=env.___lock;var Cb=env.___syscall6;var Db=env.___syscall5;var Eb=env.___syscall4;var Fb=env._time;var Gb=env._atan2;var Hb=env._gettimeofday;var Ib=env._ceil;var Jb=env._sqrt;var Kb=env._localtime;var Lb=env.___syscall207;var Mb=env.___syscall146;var Nb=0.0;function $b(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function ac(){return i|0}function bc(a){a=a|0;i=a}function cc(a,b){a=a|0;b=b|0;i=a;j=b}function dc(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function ec(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function fc(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function gc(a){a=a|0;C=a}function hc(){return C|0}function ic(b){b=b|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=b;c[f>>2]=0;while(1){if((c[f>>2]|0)>>>0>=40)break;c[g>>2]=0;switch(d[352+((c[f>>2]|0)*12|0)+5>>0]|0){case 1:{c[g>>2]=c[e>>2];break}case 2:{c[g>>2]=-1;break}default:{}}vf(c[e>>2]|0,c[352+((c[f>>2]|0)*12|0)>>2]|0,a[352+((c[f>>2]|0)*12|0)+4>>0]|0,d[352+((c[f>>2]|0)*12|0)+6>>0]|0,c[g>>2]|0,c[352+((c[f>>2]|0)*12|0)+8>>2]|0,0,0)|0;c[f>>2]=(c[f>>2]|0)+1}c[f>>2]=0;while(1){if((c[f>>2]|0)>>>0>=6)break;c[h>>2]=0;switch(d[832+(c[f>>2]<<4)+5>>0]|0){case 1:{c[h>>2]=c[e>>2];break}case 2:{c[h>>2]=-1;break}default:{}}vf(c[e>>2]|0,c[832+(c[f>>2]<<4)>>2]|0,a[832+(c[f>>2]<<4)+4>>0]|0,1,c[h>>2]|0,0,c[832+(c[f>>2]<<4)+8>>2]|0,c[832+(c[f>>2]<<4)+12>>2]|0)|0;c[f>>2]=(c[f>>2]|0)+1}i=j;return 0}function jc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,378,17622);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+T(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,379,17631);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+U(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function lc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,380,17640);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+V(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function mc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;h[j>>3]=0.0;if((c[l>>2]|0)!=2)Sa(17649,17598,570,17657);if((fe(c[c[f>>2]>>2]|0)|0)!=5?(fe(c[(c[f>>2]|0)+4>>2]|0)|0)!=5:0){h[g>>3]=+ce(c[c[f>>2]>>2]|0);h[j>>3]=+ce(c[(c[f>>2]|0)+4>>2]|0);ie(c[e>>2]|0,+W(+ +h[g>>3],+ +h[j>>3]));i=k;return}me(c[e>>2]|0);i=k;return}function nc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,394,17666);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+ZP(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function oc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,402,17676);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+_P(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function pc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,410,17686);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+$P(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function qc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+64|0;f=o+32|0;p=o+28|0;g=o+24|0;m=o+20|0;n=o+16|0;j=o+12|0;h=o+8|0;k=o+4|0;l=o;c[f>>2]=b;c[p>>2]=d;c[g>>2]=e;c[m>>2]=o+48;c[n>>2]=o+40;c[j>>2]=0;c[h>>2]=0;if((c[p>>2]|0)!=2)Sa(17649,17598,1680,17696);if((fe(c[c[g>>2]>>2]|0)|0)!=5?(fe(c[(c[g>>2]|0)+4>>2]|0)|0)!=5:0){c[k>>2]=ae(c[c[g>>2]>>2]|0)|0;c[l>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;md(c[k>>2]|0,c[m>>2]|0);md(c[l>>2]|0,c[n>>2]|0);c[h>>2]=0;while(1){if((c[h>>2]|0)>=4)break;p=nd(c[m>>2]|0)|0;if((p|0)==(nd(c[n>>2]|0)|0))c[j>>2]=(c[j>>2]|0)+1;do{p=(c[m>>2]|0)+1|0;c[m>>2]=p}while((192&a[p>>0]|0)==128);do{p=(c[n>>2]|0)+1|0;c[n>>2]=p}while((192&a[p>>0]|0)==128);c[h>>2]=(c[h>>2]|0)+1}ke(c[f>>2]|0,c[j>>2]|0);i=o;return}me(c[f>>2]|0);i=o;return}function rc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,498,18100);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+od(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function sc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,499,18112);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+pd(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,420,18124);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+Q(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function uc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,419,18132);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+R(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function vc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,421,18140);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+S(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function wc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,422,18148);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+qd(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function xc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,446,18156);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+aQ(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,438,18165);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+eQ(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function zc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,454,18174);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+fQ(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function Ac(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,456,18183);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+rd(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function Bc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,474,18192);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+X(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function Cc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,472,18200);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+Y(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function Dc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,473,18208);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+cQ(+h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function Ec(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0;l=i;i=i+48|0;e=l+32|0;m=l+28|0;f=l+24|0;g=l+16|0;j=l+8|0;k=l;c[e>>2]=a;c[m>>2]=b;c[f>>2]=d;h[g>>3]=0.0;h[j>>3]=0.0;if((c[m>>2]|0)!=2)Sa(17649,17598,546,18218);if((fe(c[c[f>>2]>>2]|0)|0)!=5?(fe(c[(c[f>>2]|0)+4>>2]|0)|0)!=5:0){h[g>>3]=+ce(c[c[f>>2]>>2]|0);h[j>>3]=+ce(c[(c[f>>2]|0)+4>>2]|0);c[(SP()|0)>>2]=0;h[k>>3]=+P(+ +h[g>>3],+ +h[j>>3]);m=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(m){ie(e,+h[k>>3]);i=l;return}else{m=TP(c[(SP()|0)>>2]|0)|0;je(e,m,c[(SP()|0)>>2]|0);i=l;return}}me(c[e>>2]|0);i=l;return}function Fc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;j=k+24|0;l=k+20|0;e=k+16|0;g=k+8|0;f=k;c[j>>2]=a;c[l>>2]=b;c[e>>2]=d;h[g>>3]=0.0;a=f;c[a>>2]=0;c[a+4>>2]=0;if((c[l>>2]|0)!=1)Sa(17590,17598,590,18228);switch(fe(c[c[e>>2]>>2]|0)|0){case 1:{l=f;c[l>>2]=ee(c[c[e>>2]>>2]|0)|0;c[l+4>>2]=C;l=f;g=c[l+4>>2]|0;if((g|0)>0|(g|0)==0&(c[l>>2]|0)>>>0>0)e=1;else e=(c[f+4>>2]|0)<0?-1:0;l=f;c[l>>2]=e;c[l+4>>2]=((e|0)<0)<<31>>31;l=f;le(c[j>>2]|0,c[l>>2]|0,c[l+4>>2]|0);i=k;return}case 5:{me(c[j>>2]|0);i=k;return}default:{h[g>>3]=+ce(c[c[e>>2]>>2]|0);if(+h[g>>3]>0.0)e=1;else e=+h[g>>3]<0.0?-1:0;h[g>>3]=+(e|0);ie(c[j>>2]|0,+h[g>>3]);i=k;return}}}function Gc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[g>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,375,18237);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[e>>2]|0);i=k;return}h[g>>3]=+ce(c[c[f>>2]>>2]|0);c[(SP()|0)>>2]=0;h[j>>3]=+O(+ +h[g>>3]);l=(c[(SP()|0)>>2]|0)==0;e=c[e>>2]|0;if(l){ie(e,+h[j>>3]);i=k;return}else{l=TP(c[(SP()|0)>>2]|0)|0;je(e,l,c[(SP()|0)>>2]|0);i=k;return}}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+24|0;l=k+20|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;a=g;c[a>>2]=0;c[a+4>>2]=0;h[j>>3]=0.0;if((c[l>>2]|0)!=1)Sa(17590,17598,514,18246);switch(fe(c[c[f>>2]>>2]|0)|0){case 1:{a=g;c[a>>2]=ee(c[c[f>>2]>>2]|0)|0;c[a+4>>2]=C;a=c[e>>2]|0;j=g;l=g;le(a,rR(c[j>>2]|0,c[j+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0,C);i=k;return}case 5:{me(c[e>>2]|0);i=k;return}default:{h[j>>3]=+ce(c[c[f>>2]>>2]|0);ie(c[e>>2]|0,+h[j>>3]*+h[j>>3]);i=k;return}}}function Ic(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0;k=i;i=i+48|0;e=k+32|0;l=k+28|0;f=k+24|0;j=k+16|0;g=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[j>>3]=0.0;a=k+8|0;c[a>>2]=0;c[a+4>>2]=0;if((c[l>>2]|0)!=1)Sa(17590,17598,620,18257);switch(fe(c[c[f>>2]>>2]|0)|0){case 1:{l=g;c[l>>2]=ee(c[c[f>>2]>>2]|0)|0;c[l+4>>2]=C;l=g;le(c[e>>2]|0,c[l>>2]|0,c[l+4>>2]|0);i=k;return}case 5:{me(c[e>>2]|0);i=k;return}default:{h[j>>3]=+ce(c[c[f>>2]>>2]|0);m=+Z(+ +h[j>>3]);le(c[e>>2]|0,~~m>>>0,+N(m)>=1.0?m>0.0?~~+$(+M(m/4294967296.0),4294967295.0)>>>0:~~+Z((m-+(~~m>>>0))/4294967296.0)>>>0:0);i=k;return}}}function Jc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0;k=i;i=i+48|0;e=k+32|0;l=k+28|0;f=k+24|0;j=k+16|0;g=k;c[e>>2]=a;c[l>>2]=b;c[f>>2]=d;h[j>>3]=0.0;a=k+8|0;c[a>>2]=0;c[a+4>>2]=0;if((c[l>>2]|0)!=1)Sa(17590,17598,645,18266);switch(fe(c[c[f>>2]>>2]|0)|0){case 1:{l=g;c[l>>2]=ee(c[c[f>>2]>>2]|0)|0; +c[l+4>>2]=C;l=g;le(c[e>>2]|0,c[l>>2]|0,c[l+4>>2]|0);i=k;return}case 5:{me(c[e>>2]|0);i=k;return}default:{h[j>>3]=+ce(c[c[f>>2]>>2]|0);m=+M(+ +h[j>>3]);le(c[e>>2]|0,~~m>>>0,+N(m)>=1.0?m>0.0?~~+$(+M(m/4294967296.0),4294967295.0)>>>0:~~+Z((m-+(~~m>>>0))/4294967296.0)>>>0:0);i=k;return}}}function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e+8|0;c[f>>2]=a;c[e+4>>2]=b;c[e>>2]=d;ie(c[f>>2]|0,3.141592653589793);i=e;return}function Lc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+64|0;e=n+48|0;o=n+44|0;f=n+40|0;l=n+36|0;m=n+32|0;h=n+24|0;j=n+16|0;k=n+8|0;g=n;c[e>>2]=a;c[o>>2]=b;c[f>>2]=d;a=g;c[a>>2]=0;c[a+4>>2]=0;if((c[o>>2]|0)!=2){i=n;return}if(5==(fe(c[c[f>>2]>>2]|0)|0)){i=n;return}a=ee(c[(c[f>>2]|0)+4>>2]|0)|0;o=h;c[o>>2]=a;c[o+4>>2]=C;if((c[h+4>>2]|0)<0){je(c[e>>2]|0,18276,-1);i=n;return}a=be(c[c[f>>2]>>2]|0)|0;o=j;c[o>>2]=a;c[o+4>>2]=((a|0)<0)<<31>>31;o=j;a=h;a=rR(c[o>>2]|0,c[o+4>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;o=k;c[o>>2]=a;c[o+4>>2]=C;o=k;o=gR(c[o>>2]|0,c[o+4>>2]|0,1,0)|0;c[l>>2]=Id(o)|0;o=j;o=gR(c[o>>2]|0,c[o+4>>2]|0,1,0)|0;c[m>>2]=Id(o)|0;if((c[l>>2]|0)!=0&(c[m>>2]|0)!=0){o=c[m>>2]|0;zQ(o,ae(c[c[f>>2]>>2]|0)|0)|0;o=g;c[o>>2]=0;c[o+4>>2]=0;while(1){k=g;d=c[k+4>>2]|0;o=h;a=c[o+4>>2]|0;if(!((d|0)<(a|0)|((d|0)==(a|0)?(c[k>>2]|0)>>>0<(c[o>>2]|0)>>>0:0)))break;o=c[l>>2]|0;a=g;k=j;k=rR(c[a>>2]|0,c[a+4>>2]|0,c[k>>2]|0,c[k+4>>2]|0)|0;zQ(o+k|0,c[m>>2]|0)|0;k=g;k=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;o=g;c[o>>2]=k;c[o+4>>2]=C}ne(c[e>>2]|0,c[l>>2]|0,-1,-1);Kd(c[l>>2]|0);Kd(c[m>>2]|0);i=n;return}te(c[e>>2]|0);if(c[l>>2]|0)Kd(c[l>>2]|0);if(!(c[m>>2]|0)){i=n;return}Kd(c[m>>2]|0);i=n;return}function Mc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+24|0;f=m+20|0;g=m+16|0;k=m+12|0;l=m+8|0;j=m+4|0;h=m;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[j>>2]=0;c[h>>2]=0;if(!((c[f>>2]|0)==3|(c[f>>2]|0)==2))Sa(18289,17598,1038,18307);if(5!=(fe(c[c[g>>2]>>2]|0)|0)?5!=(fe(c[(c[g>>2]|0)+4>>2]|0)|0):0){c[k>>2]=ae(c[c[g>>2]>>2]|0)|0;if(!(c[k>>2]|0)){i=m;return}c[l>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;if((c[f>>2]|0)==3){a=(de(c[(c[g>>2]|0)+8>>2]|0)|0)-1|0;c[j>>2]=a;c[j>>2]=(c[j>>2]|0)<0?0:a}else c[j>>2]=0;c[h>>2]=sd(c[k>>2]|0,c[l>>2]|0,c[j>>2]|0,0)|0;ke(c[e>>2]|0,(c[h>>2]|0)+1|0);i=m;return}me(c[e>>2]|0);i=m;return}function Nc(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+48|0;g=p+32|0;q=p+28|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;n=p+8|0;o=p+4|0;m=p;c[g>>2]=b;c[q>>2]=e;c[h>>2]=f;c[j>>2]=0;c[k>>2]=0;c[l>>2]=0;if((c[q>>2]|0)!=2)Sa(17649,17598,1073,18321);if(5!=(fe(c[c[h>>2]>>2]|0)|0)?5!=(fe(c[(c[h>>2]|0)+4>>2]|0)|0):0){c[n>>2]=ae(c[c[h>>2]>>2]|0)|0;c[l>>2]=de(c[(c[h>>2]|0)+4>>2]|0)|0;c[o>>2]=c[n>>2];a:while(1){if(!(nd(c[o>>2]|0)|0))break;q=c[j>>2]|0;c[j>>2]=q+1;if((q|0)>=(c[l>>2]|0))break;while(1){q=(c[o>>2]|0)+1|0;c[o>>2]=q;if((192&(d[q>>0]|0)|0)!=128)continue a}}c[k>>2]=(c[o>>2]|0)-(c[n>>2]|0);c[m>>2]=Id((c[o>>2]|0)-(c[n>>2]|0)+1|0)|0;if(c[m>>2]|0){DQ(c[m>>2]|0,c[n>>2]|0,(c[o>>2]|0)-(c[n>>2]|0)|0)|0;a[(c[m>>2]|0)+(c[k>>2]|0)>>0]=0;ne(c[g>>2]|0,c[m>>2]|0,-1,-1);Kd(c[m>>2]|0);i=p;return}else{te(c[g>>2]|0);i=p;return}}me(c[g>>2]|0);i=p;return}function Oc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+48|0;f=p+36|0;q=p+32|0;g=p+28|0;k=p+24|0;h=p+20|0;j=p+16|0;m=p+12|0;o=p+8|0;n=p+4|0;l=p;c[f>>2]=b;c[q>>2]=d;c[g>>2]=e;c[k>>2]=0;c[h>>2]=0;c[j>>2]=0;if((c[q>>2]|0)!=2)Sa(17649,17598,1113,18330);if(5!=(fe(c[c[g>>2]>>2]|0)|0)?5!=(fe(c[(c[g>>2]|0)+4>>2]|0)|0):0){c[m>>2]=ae(c[c[g>>2]>>2]|0)|0;c[k>>2]=de(c[(c[g>>2]|0)+4>>2]|0)|0;c[o>>2]=c[m>>2];while(1){if(!(nd(c[o>>2]|0)|0))break;do{q=(c[o>>2]|0)+1|0;c[o>>2]=q}while((192&a[q>>0]|0)==128);c[h>>2]=(c[h>>2]|0)+1}c[n>>2]=c[o>>2];c[o>>2]=c[m>>2];q=(c[h>>2]|0)-(c[k>>2]|0)|0;c[j>>2]=q;c[j>>2]=(c[j>>2]|0)<0?0:q;a:while(1){q=c[j>>2]|0;c[j>>2]=q+-1;if((q|0)<=0)break;while(1){q=(c[o>>2]|0)+1|0;c[o>>2]=q;if((192&a[q>>0]|0)!=128)continue a}}c[l>>2]=Id((c[n>>2]|0)-(c[o>>2]|0)+1|0)|0;if(c[l>>2]|0){zQ(c[l>>2]|0,c[o>>2]|0)|0;ne(c[f>>2]|0,c[l>>2]|0,-1,-1);Kd(c[l>>2]|0);i=p;return}else{te(c[f>>2]|0);i=p;return}}me(c[f>>2]|0);i=p;return}function Pc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;f=o+32|0;p=o+28|0;g=o+24|0;m=o+20|0;n=o+16|0;k=o+12|0;l=o+8|0;j=o+4|0;h=o;c[f>>2]=b;c[p>>2]=d;c[g>>2]=e;c[j>>2]=0;c[h>>2]=0;if(1!=(c[p>>2]|0))Sa(18340,17598,1323,18348);if(5==(fe(c[c[g>>2]>>2]|0)|0)){me(c[f>>2]|0);i=o;return}c[m>>2]=ae(c[c[g>>2]>>2]|0)|0;c[j>>2]=BQ(c[m>>2]|0)|0;c[k>>2]=Id((c[j>>2]|0)+1|0)|0;if(!(c[k>>2]|0)){te(c[f>>2]|0);i=o;return}c[l>>2]=(c[k>>2]|0)+(c[j>>2]|0);p=c[l>>2]|0;c[l>>2]=p+-1;a[p>>0]=0;c[n>>2]=c[m>>2];a:while(1){if(!(nd(c[n>>2]|0)|0))break;c[m>>2]=c[n>>2];do{p=(c[n>>2]|0)+1|0;c[n>>2]=p}while((192&a[p>>0]|0)==128);c[h>>2]=1;while(1){if(((c[n>>2]|0)+(0-(c[h>>2]|0))|0)>>>0<(c[m>>2]|0)>>>0)continue a;j=a[(c[n>>2]|0)+(0-(c[h>>2]|0))>>0]|0;p=c[l>>2]|0;c[l>>2]=p+-1;a[p>>0]=j;c[h>>2]=(c[h>>2]|0)+1}}ne(c[f>>2]|0,c[k>>2]|0,-1,-1);Kd(c[k>>2]|0);i=o;return}function Qc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;g=n+24|0;o=n+20|0;f=n+16|0;k=n+12|0;l=n+8|0;m=n+4|0;j=n+28|0;h=n;c[g>>2]=b;c[o>>2]=d;c[f>>2]=e;c[h>>2]=1;if((c[o>>2]|0)!=1)Sa(17590,17598,724,18360);if(5==(fe(c[c[f>>2]>>2]|0)|0)){me(c[g>>2]|0);i=n;return}c[k>>2]=ae(c[c[f>>2]>>2]|0)|0;c[l>>2]=td(c[k>>2]|0)|0;if(!(c[l>>2]|0)){te(c[g>>2]|0);i=n;return}c[m>>2]=c[l>>2];while(1){o=c[k>>2]|0;c[k>>2]=o+1;o=a[o>>0]|0;a[j>>0]=o;if(!(o<<24>>24))break;if(NP(a[j>>0]|0)|0)c[h>>2]=1;else{f=a[j>>0]|0;if((c[h>>2]|0)==1)a[j>>0]=RP(f)|0;else a[j>>0]=QP(f)|0;c[h>>2]=0}b=a[j>>0]|0;o=c[m>>2]|0;c[m>>2]=o+1;a[o>>0]=b}a[c[m>>2]>>0]=0;ne(c[g>>2]|0,c[l>>2]|0,-1,-1);Kd(c[l>>2]|0);i=n;return}function Rc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;m=o+40|0;p=o+36|0;f=o+32|0;h=o+8|0;k=o;g=o+28|0;j=o+24|0;n=o+20|0;l=o+16|0;c[m>>2]=b;c[p>>2]=d;c[f>>2]=e;c[g>>2]=0;if((c[p>>2]|0)!=2)Sa(17649,17598,771,18371);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[m>>2]|0);i=o;return}c[j>>2]=ae(c[c[f>>2]>>2]|0)|0;b=ee(c[(c[f>>2]|0)+4>>2]|0)|0;p=h;c[p>>2]=b;c[p+4>>2]=C;if((c[h+4>>2]|0)<0){je(c[m>>2]|0,18276,-1);i=o;return}d=ud(c[j>>2]|0,-1)|0;b=k;c[b>>2]=d;c[b+4>>2]=((d|0)<0)<<31>>31;b=k;d=c[b+4>>2]|0;p=h;e=c[p+4>>2]|0;f=c[j>>2]|0;do if((d|0)>(e|0)|((d|0)==(e|0)?(c[b>>2]|0)>>>0>=(c[p>>2]|0)>>>0:0)){c[n>>2]=td(f)|0;f=c[m>>2]|0;if(c[n>>2]|0){ne(f,c[n>>2]|0,-1,-1);break}te(f);i=o;return}else{p=BQ(f)|0;b=h;b=gR(p|0,0,c[b>>2]|0,c[b+4>>2]|0)|0;p=k;p=fR(b|0,C|0,c[p>>2]|0,c[p+4>>2]|0)|0;p=gR(p|0,C|0,1,0)|0;c[n>>2]=Id(p)|0;if(!(c[n>>2]|0)){te(c[m>>2]|0);i=o;return}c[l>>2]=c[n>>2];c[g>>2]=1;while(1){d=c[g>>2]|0;b=k;b=gR(d|0,((d|0)<0)<<31>>31|0,c[b>>2]|0,c[b+4>>2]|0)|0;d=C;p=h;e=c[p+4>>2]|0;f=c[l>>2]|0;if(!((d|0)<(e|0)|((d|0)==(e|0)?b>>>0<=(c[p>>2]|0)>>>0:0)))break;c[l>>2]=f+1;a[f>>0]=32;c[g>>2]=(c[g>>2]|0)+1}zQ(f,c[j>>2]|0)|0}while(0);ne(c[m>>2]|0,c[n>>2]|0,-1,-1);Kd(c[n>>2]|0);i=o;return}function Sc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+64|0;n=p+48|0;q=p+44|0;f=p+40|0;k=p+16|0;l=p+8|0;h=p;j=p+36|0;g=p+32|0;o=p+28|0;m=p+24|0;c[n>>2]=b;c[q>>2]=d;c[f>>2]=e;c[j>>2]=0;if((c[q>>2]|0)!=2)Sa(17649,17598,825,18408);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[n>>2]|0);i=p;return}c[g>>2]=ae(c[c[f>>2]>>2]|0)|0;b=ee(c[(c[f>>2]|0)+4>>2]|0)|0;q=k;c[q>>2]=b;c[q+4>>2]=C;if((c[k+4>>2]|0)<0){je(c[n>>2]|0,18276,-1);i=p;return}d=ud(c[g>>2]|0,-1)|0;b=l;c[b>>2]=d;c[b+4>>2]=((d|0)<0)<<31>>31;b=l;d=c[b+4>>2]|0;q=k;e=c[q+4>>2]|0;f=c[g>>2]|0;do if((d|0)>(e|0)|((d|0)==(e|0)?(c[b>>2]|0)>>>0>=(c[q>>2]|0)>>>0:0)){c[o>>2]=td(f)|0;f=c[n>>2]|0;if(c[o>>2]|0){ne(f,c[o>>2]|0,-1,-1);break}te(f);i=p;return}else{q=h;c[q>>2]=BQ(f)|0;c[q+4>>2]=0;q=h;b=k;b=gR(c[q>>2]|0,c[q+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;q=l;q=fR(b|0,C|0,c[q>>2]|0,c[q+4>>2]|0)|0;q=gR(q|0,C|0,1,0)|0;c[o>>2]=Id(q)|0;if(!(c[o>>2]|0)){te(c[n>>2]|0);i=p;return}q=zQ(c[o>>2]|0,c[g>>2]|0)|0;c[m>>2]=q+(c[h>>2]|0);c[j>>2]=1;while(1){b=c[j>>2]|0;h=l;h=gR(b|0,((b|0)<0)<<31>>31|0,c[h>>2]|0,c[h+4>>2]|0)|0;b=C;q=k;g=c[q+4>>2]|0;f=c[m>>2]|0;if(!((b|0)<(g|0)|((b|0)==(g|0)?h>>>0<=(c[q>>2]|0)>>>0:0)))break;c[m>>2]=f+1;a[f>>0]=32;c[j>>2]=(c[j>>2]|0)+1}a[f>>0]=0}while(0);ne(c[n>>2]|0,c[o>>2]|0,-1,-1);Kd(c[o>>2]|0);i=p;return}function Tc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+64|0;n=p+48|0;q=p+44|0;f=p+40|0;k=p+16|0;l=p+8|0;h=p;j=p+36|0;g=p+32|0;o=p+28|0;m=p+24|0;c[n>>2]=b;c[q>>2]=d;c[f>>2]=e;c[j>>2]=0;if((c[q>>2]|0)!=2)Sa(17649,17598,880,18417);if((fe(c[c[f>>2]>>2]|0)|0)==5){me(c[n>>2]|0);i=p;return}c[g>>2]=ae(c[c[f>>2]>>2]|0)|0;b=ee(c[(c[f>>2]|0)+4>>2]|0)|0;q=k;c[q>>2]=b;c[q+4>>2]=C;if((c[k+4>>2]|0)<0){je(c[n>>2]|0,18276,-1);i=p;return}d=ud(c[g>>2]|0,-1)|0;b=l;c[b>>2]=d;c[b+4>>2]=((d|0)<0)<<31>>31;b=l;d=c[b+4>>2]|0;q=k;e=c[q+4>>2]|0;f=c[g>>2]|0;do if((d|0)>(e|0)|((d|0)==(e|0)?(c[b>>2]|0)>>>0>=(c[q>>2]|0)>>>0:0)){c[o>>2]=td(f)|0;f=c[n>>2]|0;if(c[o>>2]|0){ne(f,c[o>>2]|0,-1,-1);break}te(f);i=p;return}else{q=h;c[q>>2]=BQ(f)|0;c[q+4>>2]=0;q=h;b=k;b=gR(c[q>>2]|0,c[q+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;q=l;q=fR(b|0,C|0,c[q>>2]|0,c[q+4>>2]|0)|0;q=gR(q|0,C|0,1,0)|0;c[o>>2]=Id(q)|0;if(!(c[o>>2]|0)){te(c[n>>2]|0);i=p;return}c[m>>2]=c[o>>2];c[j>>2]=1;while(1){d=c[j>>2]<<1;b=l;b=gR(d|0,((d|0)<0)<<31>>31|0,c[b>>2]|0,c[b+4>>2]|0)|0;d=C;q=k;e=c[q+4>>2]|0;f=c[m>>2]|0;if(!((d|0)<(e|0)|((d|0)==(e|0)?b>>>0<=(c[q>>2]|0)>>>0:0)))break;c[m>>2]=f+1;a[f>>0]=32;c[j>>2]=(c[j>>2]|0)+1}zQ(f,c[g>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+(c[h>>2]|0);while(1){b=c[j>>2]|0;h=l;h=gR(b|0,((b|0)<0)<<31>>31|0,c[h>>2]|0,c[h+4>>2]|0)|0;b=C;q=k;g=c[q+4>>2]|0;f=c[m>>2]|0;if(!((b|0)<(g|0)|((b|0)==(g|0)?h>>>0<=(c[q>>2]|0)>>>0:0)))break;c[m>>2]=f+1;a[f>>0]=32;c[j>>2]=(c[j>>2]|0)+1}a[f>>0]=0}while(0);ne(c[n>>2]|0,c[o>>2]|0,-1,-1);Kd(c[o>>2]|0);i=p;return}function Uc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+48|0;f=r+44|0;s=r+40|0;g=r+36|0;n=r+32|0;o=r+28|0;k=r+24|0;l=r+20|0;m=r+16|0;p=r+12|0;q=r+8|0;h=r+4|0;j=r;c[f>>2]=b;c[s>>2]=d;c[g>>2]=e;c[h>>2]=0;c[j>>2]=0;if((c[s>>2]|0)!=2)Sa(17649,17598,939,18426);if((fe(c[c[g>>2]>>2]|0)|0)!=5?(fe(c[(c[g>>2]|0)+4>>2]|0)|0)!=5:0){c[n>>2]=ae(c[c[g>>2]>>2]|0)|0;c[o>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;c[p>>2]=Id((BQ(c[n>>2]|0)|0)+1|0)|0;if(!(c[p>>2]|0)){te(c[f>>2]|0);i=r;return}c[q>>2]=c[p>>2];c[k>>2]=c[n>>2];a:while(1){s=nd(c[k>>2]|0)|0;c[h>>2]=s;if(!s)break;c[l>>2]=c[o>>2];b:while(1){s=nd(c[l>>2]|0)|0;c[j>>2]=s;if(!s)break;if((c[j>>2]|0)==(c[h>>2]|0))break;while(1){s=(c[l>>2]|0)+1|0;c[l>>2]=s;if((192&a[s>>0]|0)!=128)continue b}}if(c[j>>2]|0){c[m>>2]=c[l>>2];do{s=(c[m>>2]|0)+1|0;c[m>>2]=s}while((192&a[s>>0]|0)==128);DQ(c[q>>2]|0,c[l>>2]|0,(c[m>>2]|0)-(c[l>>2]|0)|0)|0;c[q>>2]=(c[q>>2]|0)+((c[m>>2]|0)-(c[l>>2]|0))}while(1){s=(c[k>>2]|0)+1|0;c[k>>2]=s;if((192&a[s>>0]|0)!=128)continue a}}a[c[q>>2]>>0]=0;ne(c[f>>2]|0,c[p>>2]|0,-1,-1);Kd(c[p>>2]|0);i=r;return}me(c[f>>2]|0);i=r;return}function Vc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;e=l+28|0;m=l+24|0;f=l+20|0;j=l+16|0;g=l+8|0;k=l;c[e>>2]=a;c[m>>2]=b;c[f>>2]=d;if((c[m>>2]|0)!=1)Sa(17590,17598,1395,18440);c[j>>2]=xe(c[e>>2]|0,24)|0;if(5==(Te(c[c[f>>2]>>2]|0)|0)){i=l;return}a=(c[j>>2]|0)+16|0;m=a;m=gR(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;c[a>>2]=m;c[a+4>>2]=C;h[k>>3]=+ce(c[c[f>>2]>>2]|0);h[g>>3]=+h[k>>3]-+h[c[j>>2]>>3];a=(c[j>>2]|0)+16|0;m=c[j>>2]|0;h[m>>3]=+h[m>>3]+ +h[g>>3]/(+((c[a>>2]|0)>>>0)+4294967296.0*+(c[a+4>>2]|0));m=(c[j>>2]|0)+8|0;h[m>>3]=+h[m>>3]+ +h[g>>3]*(+h[k>>3]-+h[c[j>>2]>>3]);i=l;return}function Wc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=xe(c[b>>2]|0,0)|0;if((c[d>>2]|0)!=0?(a=(c[d>>2]|0)+16|0,f=c[a+4>>2]|0,(f|0)>0|(f|0)==0&(c[a>>2]|0)>>>0>1):0){a=c[b>>2]|0;g=+h[(c[d>>2]|0)+8>>3];f=(c[d>>2]|0)+16|0;f=fR(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;ie(a,+O(+(g/(+(f>>>0)+4294967296.0*+(C|0)))));i=e;return}ie(c[b>>2]|0,0.0);i=e;return}function Xc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=xe(c[b>>2]|0,0)|0;if((c[d>>2]|0)!=0?(a=(c[d>>2]|0)+16|0,f=c[a+4>>2]|0,(f|0)>0|(f|0)==0&(c[a>>2]|0)>>>0>1):0){a=c[b>>2]|0;g=+h[(c[d>>2]|0)+8>>3];f=(c[d>>2]|0)+16|0;f=fR(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;ie(a,g/(+(f>>>0)+4294967296.0*+(C|0)));i=e;return}ie(c[b>>2]|0,0.0);i=e;return}function Yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+80|0;e=q+64|0;r=q+60|0;f=q+56|0;n=q+52|0;p=q+8|0;o=q;m=q+48|0;l=q+44|0;k=q+40|0;g=q+28|0;j=q+16|0;c[e>>2]=a;c[r>>2]=b;c[f>>2]=d;a=p;c[a>>2]=0;c[a+4>>2]=0;h[o>>3]=0.0;if((c[r>>2]|0)!=1)Sa(17590,17598,1418,18453);c[k>>2]=Te(c[c[f>>2]>>2]|0)|0;if((c[k>>2]|0)==5){i=q;return}c[n>>2]=xe(c[e>>2]|0,64)|0;do if(!(c[(c[n>>2]|0)+56>>2]|0)){e=aR(1,12)|0;c[(c[n>>2]|0)+56>>2]=e;e=c[n>>2]|0;if((c[k>>2]|0)==1){r=c[e+56>>2]|0;bd(g,176);c[r>>2]=c[g>>2];c[r+4>>2]=c[g+4>>2];c[r+8>>2]=c[g+8>>2];r=(c[n>>2]|0)+48|0;c[r>>2]=0;c[r+4>>2]=0;break}else{r=e+48|0;c[r>>2]=1;c[r+4>>2]=0;r=c[(c[n>>2]|0)+56>>2]|0;bd(j,177);c[r>>2]=c[j>>2];c[r+4>>2]=c[j+4>>2];c[r+8>>2]=c[j+8>>2];break}}while(0);r=(c[n>>2]|0)+16|0;e=r;e=gR(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;c[r>>2]=e;c[r+4>>2]=C;r=(c[n>>2]|0)+48|0;e=c[c[f>>2]>>2]|0;if(0==(c[r>>2]|0)?0==(c[r+4>>2]|0):0){r=ee(e)|0;o=p;c[o>>2]=r;c[o+4>>2]=C;c[m>>2]=aR(1,8)|0;o=p;p=c[o+4>>2]|0;r=c[m>>2]|0;c[r>>2]=c[o>>2];c[r+4>>2]=p;fd(c[(c[n>>2]|0)+56>>2]|0,c[m>>2]|0);i=q;return}else{h[o>>3]=+ce(e);c[l>>2]=aR(1,8)|0;h[c[l>>2]>>3]=+h[o>>3];fd(c[(c[n>>2]|0)+56>>2]|0,c[l>>2]|0);i=q;return}}function Zc(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=xe(c[b>>2]|0,0)|0;if(!(c[d>>2]|0)){i=e;return}if(!(c[(c[d>>2]|0)+56>>2]|0)){i=e;return}hd(c[(c[d>>2]|0)+56>>2]|0,131,c[d>>2]|0);jd(c[(c[d>>2]|0)+56>>2]|0);$Q(c[(c[d>>2]|0)+56>>2]|0);a=(c[d>>2]|0)+40|0;if(!(1==(c[a>>2]|0)?0==(c[a+4>>2]|0):0)){i=e;return}f=(c[d>>2]|0)+48|0;a=c[b>>2]|0;b=c[d>>2]|0;if(0==(c[f>>2]|0)?0==(c[f+4>>2]|0):0){f=b;le(a,c[f>>2]|0,c[f+4>>2]|0);i=e;return}else{ie(a,+h[b+8>>3]);i=e;return}}function _c(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=xe(c[b>>2]|0,0)|0;if(!(c[d>>2]|0)){i=e;return}a=(c[d>>2]|0)+16|0;h[(c[d>>2]|0)+24>>3]=(+((c[a>>2]|0)>>>0)+4294967296.0*+(c[a+4>>2]|0))/2.0;wd(c[b>>2]|0);i=e;return}function $c(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=xe(c[b>>2]|0,0)|0;if(!(c[d>>2]|0)){i=e;return}a=(c[d>>2]|0)+16|0;h[(c[d>>2]|0)+24>>3]=(+((c[a>>2]|0)>>>0)+4294967296.0*+(c[a+4>>2]|0))/4.0;wd(c[b>>2]|0);i=e;return}function ad(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=xe(c[b>>2]|0,0)|0;if(!(c[d>>2]|0)){i=e;return}a=(c[d>>2]|0)+16|0;a=rR(c[a>>2]|0,c[a+4>>2]|0,3,0)|0;h[(c[d>>2]|0)+24>>3]=(+(a>>>0)+4294967296.0*+(C|0))/4.0;wd(c[b>>2]|0);i=e;return}function bd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+12|0;e=d;c[f>>2]=b;c[e+4>>2]=c[f>>2];c[e>>2]=0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];i=d;return}function cd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=i;i=i+16|0;h=f+12|0;g=f+8|0;e=f;c[h>>2]=a;c[g>>2]=b;c[f+4>>2]=d;c[e>>2]=aR(c[h>>2]|0,c[g>>2]|0)|0;i=f;return c[e>>2]|0}function dd(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;$Q(c[d>>2]|0);i=b;return}function ed(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;g=k+12|0;h=k+8|0;j=k+4|0;f=k;c[e>>2]=a;c[g>>2]=b;c[h>>2]=d;if(!(c[c[e>>2]>>2]|0)){c[f>>2]=cd(1,24,17581)|0;c[(c[f>>2]|0)+8>>2]=c[h>>2];j=(c[f>>2]|0)+16|0;c[j>>2]=1;c[j+4>>2]=0;c[c[e>>2]>>2]=c[f>>2];i=k;return}c[j>>2]=Yb[c[g>>2]&255](c[(c[c[e>>2]>>2]|0)+8>>2]|0,c[h>>2]|0)|0;if(!(c[j>>2]|0)){j=(c[c[e>>2]>>2]|0)+16|0;g=j;g=gR(c[g>>2]|0,c[g+4>>2]|0,1,0)|0;c[j>>2]=g;c[j+4>>2]=C;dd(c[h>>2]|0);i=k;return}e=c[c[e>>2]>>2]|0;if((c[j>>2]|0)>0){ed(e,c[g>>2]|0,c[h>>2]|0);i=k;return}else{ed(e+4|0,c[g>>2]|0,c[h>>2]|0);i=k;return}}function fd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;ed(c[f>>2]|0,c[(c[f>>2]|0)+4>>2]|0,c[e>>2]|0);i=d;return}function gd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(!(c[e>>2]|0)){i=h;return}if(c[c[e>>2]>>2]|0)gd(c[c[e>>2]>>2]|0,c[f>>2]|0,c[g>>2]|0);d=(c[e>>2]|0)+16|0;_b[c[f>>2]&255](c[(c[e>>2]|0)+8>>2]|0,c[d>>2]|0,c[d+4>>2]|0,c[g>>2]|0);if(!(c[(c[e>>2]|0)+4>>2]|0)){i=h;return}gd(c[(c[e>>2]|0)+4>>2]|0,c[f>>2]|0,c[g>>2]|0);i=h;return}function hd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;gd(c[c[h>>2]>>2]|0,c[g>>2]|0,c[f>>2]|0);i=e;return}function id(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}dd(c[(c[b>>2]|0)+8>>2]|0);if(c[c[b>>2]>>2]|0)id(c[c[b>>2]>>2]|0);if(c[(c[b>>2]|0)+4>>2]|0)id(c[(c[b>>2]|0)+4>>2]|0);dd(c[b>>2]|0);i=d;return}function jd(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;id(c[c[d>>2]>>2]|0);i=b;return}function kd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;g=i;i=i+32|0;d=g+24|0;j=g+20|0;h=g+16|0;e=g+8|0;f=g;c[j>>2]=a;c[h>>2]=b;j=c[j>>2]|0;a=c[j+4>>2]|0;b=e;c[b>>2]=c[j>>2];c[b+4>>2]=a;h=c[h>>2]|0;b=c[h+4>>2]|0;a=f;c[a>>2]=c[h>>2];c[a+4>>2]=b;a=e;b=f;if((c[a>>2]|0)==(c[b>>2]|0)?(c[a+4>>2]|0)==(c[b+4>>2]|0):0){c[d>>2]=0;j=c[d>>2]|0;i=g;return j|0}h=e;b=c[h+4>>2]|0;j=f;f=c[j+4>>2]|0;if((b|0)<(f|0)|((b|0)==(f|0)?(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0:0)){c[d>>2]=-1;j=c[d>>2]|0;i=g;return j|0}else{c[d>>2]=1;j=c[d>>2]|0;i=g;return j|0}return 0}function ld(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0;g=i;i=i+32|0;d=g+24|0;k=g+20|0;j=g+16|0;e=g+8|0;f=g;c[k>>2]=a;c[j>>2]=b;h[e>>3]=+h[c[k>>2]>>3];h[f>>3]=+h[c[j>>2]>>3];do if(!(+h[e>>3]==+h[f>>3]))if(+h[e>>3]<+h[f>>3]){c[d>>2]=-1;break}else{c[d>>2]=1;break}else c[d>>2]=0;while(0);i=g;return c[d>>2]|0}function md(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;j=l+12|0;h=l+8|0;k=l+4|0;g=l;c[f>>2]=b;c[j>>2]=e;c[h>>2]=0;while(1){if(!(d[(c[f>>2]|0)+(c[h>>2]|0)>>0]|0))break;if(!((MP(d[(c[f>>2]|0)+(c[h>>2]|0)>>0]|0)|0)!=0^1))break;c[h>>2]=(c[h>>2]|0)+1}if(!(a[(c[f>>2]|0)+(c[h>>2]|0)>>0]|0)){zQ(c[j>>2]|0,17839)|0;i=l;return}e=(RP(d[(c[f>>2]|0)+(c[h>>2]|0)>>0]|0)|0)&255;a[c[j>>2]>>0]=e;c[k>>2]=1;while(1){if((c[k>>2]|0)>=4)break;if(!(d[(c[f>>2]|0)+(c[h>>2]|0)>>0]|0))break;c[g>>2]=d[17711+(d[(c[f>>2]|0)+(c[h>>2]|0)>>0]&127)>>0];if((c[g>>2]|0)>0){b=(c[g>>2]|0)+48&255;e=c[k>>2]|0;c[k>>2]=e+1;a[(c[j>>2]|0)+e>>0]=b}c[h>>2]=(c[h>>2]|0)+1}while(1){f=c[k>>2]|0;if((c[k>>2]|0)>=4)break;c[k>>2]=f+1;a[(c[j>>2]|0)+f>>0]=48}a[(c[j>>2]|0)+f>>0]=0;i=l;return}function nd(a){a=a|0;var b=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;b=h+8|0;e=h+4|0;f=h;c[b>>2]=a;a=c[b>>2]|0;c[b>>2]=a+1;c[e>>2]=d[a>>0];c[f>>2]=d[17844+(c[e>>2]|0)>>0];switch(c[f>>2]|0){case 4:{c[e>>2]=65533;g=c[e>>2]|0;i=h;return g|0}case 3:{a=c[e>>2]<<6;g=c[b>>2]|0;c[b>>2]=g+1;c[e>>2]=a+(d[g>>0]|0);g=4;break}case 2:{g=4;break}case 1:break;default:{g=c[e>>2]|0;i=h;return g|0}}if((g|0)==4){a=c[e>>2]<<6;g=c[b>>2]|0;c[b>>2]=g+1;c[e>>2]=a+(d[g>>0]|0)}a=c[e>>2]<<6;g=c[b>>2]|0;c[b>>2]=g+1;c[e>>2]=a+(d[g>>0]|0);c[e>>2]=(c[e>>2]|0)-(c[928+(c[f>>2]<<2)>>2]|0);if(((c[944+(c[f>>2]<<2)>>2]&c[e>>2]|0)!=0?(c[e>>2]&-2048|0)!=55296:0)?(c[e>>2]&-2|0)!=65534:0){g=c[e>>2]|0;i=h;return g|0}c[e>>2]=65533;g=c[e>>2]|0;i=h;return g|0}function od(a){a=+a;var b=0,c=0;c=i;i=i+16|0;b=c;h[b>>3]=a;i=c;return+(+h[b>>3]*180.0/3.141592653589793)}function pd(a){a=+a;var b=0,c=0;c=i;i=i+16|0;b=c;h[b>>3]=a;i=c;return+(+h[b>>3]*3.141592653589793/180.0)}function qd(a){a=+a;var b=0,c=0;b=i;i=i+16|0;c=b;h[c>>3]=a;a=1.0/+S(+ +h[c>>3]);i=b;return+a}function rd(a){a=+a;var b=0,c=0;b=i;i=i+16|0;c=b;h[c>>3]=a;a=1.0/+fQ(+h[c>>3]);i=b;return+a}function sd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;g=t+40|0;h=t+36|0;j=t+32|0;k=t+28|0;l=t+24|0;m=t+20|0;p=t+16|0;q=t+12|0;r=t+8|0;n=t+4|0;o=t;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=0;c[p>>2]=-1;if(!(a[c[h>>2]>>0]|0)){c[g>>2]=-1;s=c[g>>2]|0;i=t;return s|0}a:while(1){if(!(nd(c[j>>2]|0)|0))break;d=c[m>>2]|0;c[m>>2]=d+1;if((d|0)>=(c[k>>2]|0))break;while(1){d=(c[j>>2]|0)+1|0;c[j>>2]=d;if((192&a[d>>0]|0)!=128)continue a}}c[m>>2]=0;while(1){if(!(nd(c[j>>2]|0)|0))break;c[q>>2]=c[h>>2];c[r>>2]=c[j>>2];do{c[n>>2]=nd(c[q>>2]|0)|0;c[o>>2]=nd(c[r>>2]|0)|0;do{d=(c[q>>2]|0)+1|0;c[q>>2]=d}while((192&a[d>>0]|0)==128);do{d=(c[r>>2]|0)+1|0;c[r>>2]=d}while((192&a[d>>0]|0)==128)}while(((c[n>>2]|0)!=0?(c[n>>2]|0)==(c[o>>2]|0):0)&(c[o>>2]|0)!=0);if(!(c[n>>2]|0)){s=14;break}do{d=(c[j>>2]|0)+1|0;c[j>>2]=d}while((192&a[d>>0]|0)==128);c[m>>2]=(c[m>>2]|0)+1}if((s|0)==14)c[p>>2]=c[m>>2];if(c[l>>2]|0)c[c[l>>2]>>2]=c[j>>2];s=c[p>>2]|0;c[g>>2]=(c[p>>2]|0)>=0?s+(c[k>>2]|0)|0:s;s=c[g>>2]|0;i=t;return s|0}function td(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=Id((BQ(c[d>>2]|0)|0)+1|0)|0;a=zQ(c[e>>2]|0,c[d>>2]|0)|0;i=b;return a|0}function ud(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[f>>2]=b;c[g>>2]=e;c[j>>2]=0;if((c[g>>2]|0)>=0)c[h>>2]=(c[f>>2]|0)+(c[g>>2]|0);else c[h>>2]=-1;if((c[f>>2]|0)>>>0>(c[h>>2]|0)>>>0)Sa(18380,17598,316,18389);while(1){if(!(a[c[f>>2]>>0]|0)){f=10;break}if((c[f>>2]|0)>>>0>=(c[h>>2]|0)>>>0){f=10;break}c[f>>2]=(c[f>>2]|0)+((d[17844+(d[c[f>>2]>>0]|0)>>0]|0)+1);c[j>>2]=(c[j>>2]|0)+1}if((f|0)==10){i=k;return c[j>>2]|0}return 0}function vd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+48|0;m=l+32|0;j=l+16|0;n=l+28|0;g=l+8|0;f=l;k=l+24|0;c[m>>2]=a;a=j;c[a>>2]=b;c[a+4>>2]=d;c[n>>2]=e;c[k>>2]=c[n>>2];e=(c[k>>2]|0)+48|0;b=c[m>>2]|0;if(0==(c[e>>2]|0)?0==(c[e+4>>2]|0):0){n=c[b>>2]|0;m=g;c[m>>2]=n;c[m+4>>2]=((n|0)<0)<<31>>31;m=(c[k>>2]|0)+32|0;n=j;b=c[k>>2]|0;if((c[m>>2]|0)==(c[n>>2]|0)?(c[m+4>>2]|0)==(c[n+4>>2]|0):0){n=b+40|0;m=n;m=gR(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;c[n>>2]=m;c[n+4>>2]=C;i=l;return}m=b+32|0;e=c[m+4>>2]|0;n=j;f=c[n+4>>2]|0;if(!((e|0)<(f|0)|((e|0)==(f|0)?(c[m>>2]|0)>>>0<(c[n>>2]|0)>>>0:0))){i=l;return}n=c[g+4>>2]|0;m=c[k>>2]|0;c[m>>2]=c[g>>2];c[m+4>>2]=n;m=c[j+4>>2]|0;n=(c[k>>2]|0)+32|0;c[n>>2]=c[j>>2];c[n+4>>2]=m;n=(c[k>>2]|0)+40|0;c[n>>2]=1;c[n+4>>2]=0;i=l;return}else{h[f>>3]=+h[b>>3];m=(c[k>>2]|0)+32|0;n=j;b=c[k>>2]|0;if((c[m>>2]|0)==(c[n>>2]|0)?(c[m+4>>2]|0)==(c[n+4>>2]|0):0){n=b+40|0;m=n;m=gR(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;c[n>>2]=m;c[n+4>>2]=C;i=l;return}m=b+32|0;e=c[m+4>>2]|0;n=j;g=c[n+4>>2]|0;if(!((e|0)<(g|0)|((e|0)==(g|0)?(c[m>>2]|0)>>>0<(c[n>>2]|0)>>>0:0))){i=l;return}h[(c[k>>2]|0)+8>>3]=+h[f>>3];m=c[j+4>>2]|0;n=(c[k>>2]|0)+32|0;c[n>>2]=c[j>>2];c[n+4>>2]=m;n=(c[k>>2]|0)+40|0;c[n>>2]=1;c[n+4>>2]=0;i=l;return}}function wd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=i;i=i+16|0;b=f+4|0;e=f;c[b>>2]=a;c[e>>2]=xe(c[b>>2]|0,0)|0;if(!(c[e>>2]|0)){i=f;return}if(!(c[(c[e>>2]|0)+56>>2]|0)){i=f;return}c[(c[e>>2]|0)+60>>2]=0;hd(c[(c[e>>2]|0)+56>>2]|0,132,c[e>>2]|0);jd(c[(c[e>>2]|0)+56>>2]|0);$Q(c[(c[e>>2]|0)+56>>2]|0);d=(c[e>>2]|0)+48|0;if(!(0==(c[d>>2]|0)?0==(c[d+4>>2]|0):0)){d=(c[e>>2]|0)+40|0;ie(c[b>>2]|0,+h[(c[e>>2]|0)+8>>3]/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0)));i=f;return}g=(c[e>>2]|0)+40|0;b=c[b>>2]|0;d=c[e>>2]|0;a=c[d>>2]|0;d=c[d+4>>2]|0;if(1==(c[g>>2]|0)?0==(c[g+4>>2]|0):0){le(b,a,d);i=f;return}else{g=(c[e>>2]|0)+40|0;ie(b,(+(a>>>0)+4294967296.0*+(d|0))*1.0/(+((c[g>>2]|0)>>>0)+4294967296.0*+(c[g+4>>2]|0)));i=f;return}}function xd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+64|0;j=q+56|0;m=q+32|0;r=q+52|0;o=q+24|0;n=q+16|0;f=q+8|0;k=q;g=q+48|0;l=q+44|0;p=q+40|0;c[j>>2]=a;a=m;c[a>>2]=b;c[a+4>>2]=d;c[r>>2]=e;c[p>>2]=c[r>>2];if((c[(c[p>>2]|0)+60>>2]|0)>0){i=q;return}h[f>>3]=+h[(c[p>>2]|0)+24>>3];r=(c[p>>2]|0)+16|0;h[k>>3]=+((c[r>>2]|0)>>>0)+4294967296.0*+(c[r+4>>2]|0)-+h[(c[p>>2]|0)+24>>3];r=(c[p>>2]|0)+32|0;e=m;e=gR(c[r>>2]|0,c[r+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;c[g>>2]=e;e=(c[p>>2]|0)+16|0;r=(c[p>>2]|0)+32|0;r=fR(c[e>>2]|0,c[e+4>>2]|0,c[r>>2]|0,c[r+4>>2]|0)|0;c[l>>2]=r;do if(+(c[g>>2]|0)>=+h[f>>3]){b=c[p>>2]|0;if(!(+(c[l>>2]|0)>=+h[k>>3])){c[b+60>>2]=1;break}r=b+40|0;b=r;b=gR(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;c[r>>2]=b;c[r+4>>2]=C;r=(c[p>>2]|0)+48|0;b=c[j>>2]|0;if(0==(c[r>>2]|0)?0==(c[r+4>>2]|0):0){n=c[b>>2]|0;r=o;c[r>>2]=n;c[r+4>>2]=((n|0)<0)<<31>>31;r=c[p>>2]|0;n=r;o=gR(c[n>>2]|0,c[n+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0;c[r>>2]=o;c[r+4>>2]=C;break}else{h[n>>3]=+h[b>>3];r=(c[p>>2]|0)+8|0;h[r>>3]=+h[r>>3]+ +h[n>>3];break}}while(0);o=m;r=(c[p>>2]|0)+32|0;p=r;p=gR(c[p>>2]|0,c[p+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0;c[r>>2]=p;c[r+4>>2]=C;i=q;return}function yd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+12|0;d=h+8|0;e=h+4|0;f=h;c[d>>2]=b;if(!(zd(c[d>>2]|0,18469,7)|0))c[d>>2]=(c[d>>2]|0)+7;c[f>>2]=If(c[d>>2]|0)|0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=7){d=9;break}if((zd(c[d>>2]|0,c[968+(c[e>>2]<<2)>>2]|0,c[f>>2]|0)|0)==0?(Jf(a[(c[968+(c[e>>2]<<2)>>2]|0)+(c[f>>2]|0)>>0]|0)|0)==0:0){d=7;break}c[e>>2]=(c[e>>2]|0)+1}if((d|0)==7){c[g>>2]=1;g=c[g>>2]|0;i=h;return g|0}else if((d|0)==9){c[g>>2]=0;g=c[g>>2]|0;i=h;return g|0}return 0}function zd(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+20|0;f=m+16|0;g=m+12|0;h=m+8|0;j=m+4|0;k=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;e=c[g>>2]|0;if(!(c[f>>2]|0)){c[l>>2]=(e|0)!=0?-1:0;l=c[l>>2]|0;i=m;return l|0}if(!e){c[l>>2]=1;l=c[l>>2]|0;i=m;return l|0}c[j>>2]=c[f>>2];c[k>>2]=c[g>>2];while(1){g=c[h>>2]|0;c[h>>2]=g+-1;if((g|0)<=0)break;if(!(d[c[j>>2]>>0]|0))break;if((d[18477+(d[c[j>>2]>>0]|0)>>0]|0|0)!=(d[18477+(d[c[k>>2]>>0]|0)>>0]|0|0))break;c[j>>2]=(c[j>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+1}if((c[h>>2]|0)<0)e=0;else e=(d[18477+(d[c[j>>2]>>0]|0)>>0]|0)-(d[18477+(d[c[k>>2]>>0]|0)>>0]|0)|0;c[l>>2]=e;l=c[l>>2]|0;i=m;return l|0}function Ad(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;if((c[d>>2]|0)>=0&(c[d>>2]|0)<7){c[b>>2]=c[968+(c[d>>2]<<2)>>2];a=c[b>>2]|0;i=e;return a|0}else{c[b>>2]=0;a=c[b>>2]|0;i=e;return a|0}return 0}function Bd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+20|0;h=m+16|0;j=m+12|0;k=m+8|0;l=m+4|0;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;if((c[h>>2]|0)<0|(c[h>>2]|0)>=10){c[g>>2]=Kf(16368)|0;l=c[g>>2]|0;i=m;return l|0}if(a[18733+(c[h>>2]|0)>>0]|0)b=Lf()|0;else b=Mf()|0;c[m>>2]=b;j=c[j>>2]|0;c[j>>2]=c[996+(c[h>>2]<<2)>>2];c[j+4>>2]=0;k=c[k>>2]|0;c[k>>2]=c[1036+(c[h>>2]<<2)>>2];c[k+4>>2]=0;if(c[l>>2]|0)c[1036+(c[h>>2]<<2)>>2]=c[996+(c[h>>2]<<2)>>2];c[g>>2]=0;l=c[g>>2]|0;i=m;return l|0}function Cd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=i;i=i+16|0;b=f+12|0;d=f+8|0;e=f+4|0;g=f;c[d>>2]=a;c[e>>2]=0;c[g>>2]=Dd()|0;if(c[g>>2]|0){c[b>>2]=0;g=c[b>>2]|0;i=f;return g|0}c[e>>2]=c[269];while(1){if((c[e>>2]|0)==0|(c[d>>2]|0)==0)break;if(!(yQ(c[d>>2]|0,c[(c[e>>2]|0)+16>>2]|0)|0))break;c[e>>2]=c[(c[e>>2]|0)+12>>2]}c[b>>2]=c[e>>2];g=c[b>>2]|0;i=f;return g|0}function Dd(){var a=0,b=0,d=0,e=0,f=0;f=i;i=i+16|0;d=f+8|0;e=f+4|0;a=f;if(c[59]|0){c[d>>2]=0;e=c[d>>2]|0;i=f;return e|0}c[e>>2]=0;if(c[e>>2]|0){c[d>>2]=c[e>>2];e=c[d>>2]|0;i=f;return e|0}c[61]=1;if(!(c[62]|0))c[e>>2]=Tf()|0;if(((c[e>>2]|0)==0?(c[62]=1,(c[65]|0)==0):0)?(c[65]=8,!((c[3]|0)==0|(c[65]|0)!=0)):0)c[e>>2]=7;if(!(c[e>>2]|0))c[64]=(c[64]|0)+1;if(c[e>>2]|0){c[d>>2]=c[e>>2];e=c[d>>2]|0;i=f;return e|0}if((c[59]|0)==0&(c[60]|0)==0){c[a>>2]=1080;c[60]=1;a=c[a>>2]|0;b=a+92|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));Uf();if(!(c[63]|0))c[e>>2]=Vf()|0;if(!(c[e>>2]|0)){c[63]=1;c[e>>2]=Wf()|0}if(!(c[e>>2]|0)){Xf(c[53]|0,c[54]|0,c[55]|0);c[59]=1}c[60]=0}c[64]=(c[64]|0)+-1;if((c[64]|0)<=0)c[65]=0;c[d>>2]=c[e>>2];e=c[d>>2]|0;i=f;return e|0}function Ed(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;f=h+8|0;g=h+4|0;d=h;c[f>>2]=a;c[g>>2]=b;c[d>>2]=Dd()|0;if(c[d>>2]|0){c[e>>2]=c[d>>2];g=c[e>>2]|0;i=h;return g|0}Yf(c[f>>2]|0);b=c[269]|0;if((c[g>>2]|0)!=0|(c[269]|0)==0){c[(c[f>>2]|0)+12>>2]=b;c[269]=c[f>>2]}else{c[(c[f>>2]|0)+12>>2]=c[b+12>>2];c[(c[269]|0)+12>>2]=c[f>>2]}c[e>>2]=0;g=c[e>>2]|0;i=h;return g|0}function Fd(a){a=a|0;var b=0;b=i;i=i+16|0;c[b>>2]=a;i=b;return 0}function Gd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+48|0;e=j+32|0;f=j+24|0;h=j+16|0;g=j+8|0;d=j;k=j+40|0;l=f;c[l>>2]=a;c[l+4>>2]=b;c[k>>2]=Dd()|0;if(c[k>>2]|0){k=e;c[k>>2]=-1;c[k+4>>2]=-1;k=e;l=k;l=c[l>>2]|0;k=k+4|0;k=c[k>>2]|0;C=k;i=j;return l|0}b=288;k=c[b+4>>2]|0;l=h;c[l>>2]=c[b>>2];c[l+4>>2]=k;if((c[f+4>>2]|0)<0){l=c[h+4>>2]|0;k=e;c[k>>2]=c[h>>2];c[k+4>>2]=l;k=e;l=k;l=c[l>>2]|0;k=k+4|0;k=c[k>>2]|0;C=k;i=j;return l|0}b=f;l=c[b+4>>2]|0;k=288;c[k>>2]=c[b>>2];c[k+4>>2]=l;k=Zf(0)|0;l=d;c[l>>2]=k;c[l+4>>2]=C;l=f;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0){l=f;b=c[l+4>>2]|0;a=d;k=c[a+4>>2]|0;a=(b|0)<(k|0)|((b|0)==(k|0)?(c[l>>2]|0)>>>0<=(c[a>>2]|0)>>>0:0)}else a=0;c[77]=a&1;l=Hd()|0;k=f;k=fR(l|0,C|0,c[k>>2]|0,c[k+4>>2]|0)|0;l=g;c[l>>2]=k;c[l+4>>2]=C;l=g;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)Fd(c[g>>2]&2147483647)|0;l=c[h+4>>2]|0;k=e;c[k>>2]=c[h>>2];c[k+4>>2]=l;k=e;l=k;l=c[l>>2]|0;k=k+4|0;k=c[k>>2]|0;C=k;i=j;return l|0}function Hd(){var a=0,b=0;b=i;i=i+16|0;a=b+8|0;Bd(0,a,b,0)|0;C=c[a+4>>2]|0;i=b;return c[a>>2]|0}function Id(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;d=e+4|0;b=e;c[b>>2]=a;if(Dd()|0){c[d>>2]=0;d=c[d>>2]|0;i=e;return d|0}if((c[b>>2]|0)<=0)b=0;else{b=c[b>>2]|0;b=_f(b,((b|0)<0)<<31>>31)|0}c[d>>2]=b;d=c[d>>2]|0;i=e;return d|0}function Jd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;e=f;g=e;c[g>>2]=a;c[g+4>>2]=b;if(Dd()|0){c[d>>2]=0;g=c[d>>2]|0;i=f;return g|0}else{g=e;c[d>>2]=_f(c[g>>2]|0,c[g+4>>2]|0)|0;g=c[d>>2]|0;i=f;return g|0}return 0}function Kd(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}if(c[2]|0){ag(0,$f(c[b>>2]|0)|0);ag(9,1);Qb[c[48>>2]&255](c[b>>2]|0);i=d;return}else{Qb[c[48>>2]&255](c[b>>2]|0);i=d;return}}function Ld(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[e>>2]=a;c[f>>2]=b;if(Dd()|0){c[d>>2]=0;a=c[d>>2]|0;i=g;return a|0}if((c[f>>2]|0)<0)c[f>>2]=0;a=c[f>>2]|0;c[d>>2]=bg(c[e>>2]|0,a,((a|0)<0)<<31>>31)|0;a=c[d>>2]|0;i=g;return a|0}function Md(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;f=h+8|0;g=h;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;if(Dd()|0){c[e>>2]=0;a=c[e>>2]|0;i=h;return a|0}else{a=g;c[e>>2]=bg(c[f>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;a=c[e>>2]|0;i=h;return a|0}return 0}function Nd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+128|0;d=j+40|0;e=j+36|0;f=j+32|0;h=j+28|0;g=j;c[e>>2]=a;c[f>>2]=b;if(Dd()|0){c[d>>2]=0;a=c[d>>2]|0;i=j;return a|0}else{cg(g,0,j+44|0,70,1e9);dg(g,c[e>>2]|0,c[f>>2]|0);c[h>>2]=eg(g)|0;c[d>>2]=c[h>>2];a=c[d>>2]|0;i=j;return a|0}return 0}function Od(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;d=h+28|0;e=h+24|0;f=h+8|0;g=h;c[e>>2]=a;if(Dd()|0){c[d>>2]=0;a=c[d>>2]|0;i=h;return a|0}else{c[f>>2]=b;c[g>>2]=Nd(c[e>>2]|0,f)|0;c[d>>2]=c[g>>2];a=c[d>>2]|0;i=h;return a|0}return 0}function Pd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+48|0;f=l+44|0;g=l+40|0;m=l+36|0;h=l+32|0;j=l+28|0;k=l;c[g>>2]=a;c[m>>2]=b;c[h>>2]=d;c[j>>2]=e;e=c[m>>2]|0;if((c[g>>2]|0)<=0){c[f>>2]=e;m=c[f>>2]|0;i=l;return m|0}else{cg(k,0,e,c[g>>2]|0,0);dg(k,c[h>>2]|0,c[j>>2]|0);c[f>>2]=eg(k)|0;m=c[f>>2]|0;i=l;return m|0}return 0}function Qd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;g=i;i=i+32|0;l=g+28|0;k=g+24|0;j=g+20|0;f=g+16|0;h=g;c[l>>2]=a;c[k>>2]=b;c[j>>2]=d;c[h>>2]=e;c[f>>2]=Pd(c[l>>2]|0,c[k>>2]|0,c[j>>2]|0,h)|0;i=g;return c[f>>2]|0}function Rd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+32|0;e=h+20|0;f=h+16|0;g=h;c[e>>2]=a;c[f>>2]=b;if(!(c[66]|0)){i=h;return}c[g>>2]=d;fg(c[e>>2]|0,c[f>>2]|0,g);i=h;return}function Sd(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+288|0;f=m+12|0;g=m+8|0;k=m+272|0;l=m+4|0;h=m;j=m+16|0;c[f>>2]=b;c[g>>2]=e;c[l>>2]=c[g>>2];if(Dd()|0){i=m;return}if((c[f>>2]|0)<=0|(c[g>>2]|0)==0){a[18743]=0;i=m;return}if(!(a[18743]|0)){a[18745]=0;a[18744]=0;gg(Cd(0)|0,256,j)|0;c[h>>2]=0;while(1){if((c[h>>2]|0)>=256)break;a[18746+(c[h>>2]|0)>>0]=c[h>>2];c[h>>2]=(c[h>>2]|0)+1}c[h>>2]=0;while(1){if((c[h>>2]|0)>=256)break;a[18745]=(d[18745]|0)+((d[18746+(c[h>>2]|0)>>0]|0)+(a[j+(c[h>>2]|0)>>0]|0));a[k>>0]=a[18746+(d[18745]|0)>>0]|0;a[18746+(d[18745]|0)>>0]=a[18746+(c[h>>2]|0)>>0]|0;a[18746+(c[h>>2]|0)>>0]=a[k>>0]|0;c[h>>2]=(c[h>>2]|0)+1}a[18743]=1}do{a[18744]=(a[18744]|0)+1<<24>>24;a[k>>0]=a[18746+(d[18744]|0)>>0]|0; +a[18745]=(d[18745]|0)+(d[k>>0]|0);a[18746+(d[18744]|0)>>0]=a[18746+(d[18745]|0)>>0]|0;a[18746+(d[18745]|0)>>0]=a[k>>0]|0;a[k>>0]=(d[k>>0]|0)+(d[18746+(d[18744]|0)>>0]|0);j=a[18746+(d[k>>0]|0)>>0]|0;e=c[l>>2]|0;c[l>>2]=e+1;a[e>>0]=j;e=(c[f>>2]|0)+-1|0;c[f>>2]=e}while((e|0)!=0);i=m;return}function Td(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;g=k+16|0;e=k+12|0;f=k+8|0;h=k+4|0;j=k;c[e>>2]=a;c[f>>2]=b;a=c[f>>2]|0;if(!(c[e>>2]|0)){c[g>>2]=(a|0)!=0?-1:0;j=c[g>>2]|0;i=k;return j|0}if(!a){c[g>>2]=1;j=c[g>>2]|0;i=k;return j|0}c[h>>2]=c[e>>2];c[j>>2]=c[f>>2];while(1){if(d[c[h>>2]>>0]|0)b=(d[18477+(d[c[h>>2]>>0]|0)>>0]|0|0)==(d[18477+(d[c[j>>2]>>0]|0)>>0]|0|0);else b=0;a=c[h>>2]|0;if(!b)break;c[h>>2]=a+1;c[j>>2]=(c[j>>2]|0)+1}c[g>>2]=(d[18477+(d[a>>0]|0)>>0]|0)-(d[18477+(d[c[j>>2]>>0]|0)>>0]|0);j=c[g>>2]|0;i=k;return j|0}function Ud(){var a=0,b=0;b=i;i=i+16|0;a=b;c[a>>2]=0;while(1){if((c[a>>2]|0)>>>0>=4)break;Ed(1172+((c[a>>2]|0)*88|0)|0,(c[a>>2]|0)==0&1)|0;c[a>>2]=(c[a>>2]|0)+1}i=b;return 0}function Vd(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0;F=i;i=i+112|0;r=F+108|0;e=F+104|0;D=F+100|0;f=F+96|0;B=F+92|0;p=F+88|0;z=F+84|0;x=F+80|0;j=F+76|0;m=F+72|0;s=F+68|0;h=F+64|0;o=F+60|0;k=F+56|0;q=F+52|0;v=F+16|0;y=F+48|0;g=F+44|0;l=F+40|0;u=F+8|0;t=F;n=F+36|0;A=F+32|0;w=F+28|0;E=F+24|0;c[r>>2]=a;c[e>>2]=b;c[B>>2]=0;c[p>>2]=0;kg(c[(c[r>>2]|0)+24>>2]|0);c[D>>2]=c[(c[r>>2]|0)+28>>2];if(lg(c[D>>2]|0)|0){E=c[D>>2]|0;i=F;return E|0}c[z>>2]=Of(c[(c[r>>2]|0)+24>>2]|0)|0;c[x>>2]=Of(c[(c[r>>2]|0)+4>>2]|0)|0;c[m>>2]=-1;c[s>>2]=0;if((c[c[r>>2]>>2]|0)!=0?(d[(c[(c[(c[r>>2]|0)+24>>2]|0)+4>>2]|0)+20>>0]|0|0)==2:0)c[D>>2]=5;else c[D>>2]=0;if((0==(c[D>>2]|0)?(c[(c[r>>2]|0)+12>>2]|0)==0:0)?(a=mg(c[(c[r>>2]|0)+4>>2]|0,2)|0,c[D>>2]=a,0==(a|0)):0){c[(c[r>>2]|0)+12>>2]=1;ng(c[(c[r>>2]|0)+4>>2]|0,1,(c[r>>2]|0)+8|0)}if((c[D>>2]|0)==0?0==(og(c[(c[r>>2]|0)+24>>2]|0)|0):0){c[D>>2]=mg(c[(c[r>>2]|0)+24>>2]|0,0)|0;c[s>>2]=1}c[B>>2]=pg(c[(c[r>>2]|0)+24>>2]|0)|0;c[p>>2]=pg(c[(c[r>>2]|0)+4>>2]|0)|0;c[f>>2]=qg(Of(c[(c[r>>2]|0)+4>>2]|0)|0)|0;if(0==(c[D>>2]|0)&(c[f>>2]|0)==5?(c[B>>2]|0)!=(c[p>>2]|0):0)c[D>>2]=8;c[m>>2]=rg(c[(c[r>>2]|0)+24>>2]|0)|0;c[j>>2]=0;while(1){if((c[e>>2]|0)>=0?(c[j>>2]|0)>=(c[e>>2]|0):0)break;if((c[(c[r>>2]|0)+16>>2]|0)>>>0>(c[m>>2]|0)>>>0)break;if(!((c[D>>2]|0)!=0^1))break;c[h>>2]=c[(c[r>>2]|0)+16>>2];if((c[h>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[(c[(c[r>>2]|0)+24>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0)?(c[D>>2]=sg(c[z>>2]|0,c[h>>2]|0,o,2)|0,(c[D>>2]|0)==0):0){b=c[r>>2]|0;a=c[h>>2]|0;c[D>>2]=ug(b,a,tg(c[o>>2]|0)|0,0)|0;vg(c[o>>2]|0)}a=(c[r>>2]|0)+16|0;c[a>>2]=(c[a>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1}do if(!(c[D>>2]|0)){c[(c[r>>2]|0)+36>>2]=c[m>>2];c[(c[r>>2]|0)+32>>2]=(c[m>>2]|0)+1-(c[(c[r>>2]|0)+16>>2]|0);if((c[(c[r>>2]|0)+16>>2]|0)>>>0>(c[m>>2]|0)>>>0){c[D>>2]=101;break}if(!(c[(c[r>>2]|0)+40>>2]|0))wg(c[r>>2]|0)}while(0);if((c[D>>2]|0)==101){if(!(c[m>>2]|0)){c[D>>2]=xg(c[(c[r>>2]|0)+4>>2]|0)|0;c[m>>2]=1}if((c[D>>2]|0)==0|(c[D>>2]|0)==101)c[D>>2]=yg(c[(c[r>>2]|0)+4>>2]|0,1,(c[(c[r>>2]|0)+8>>2]|0)+1|0)|0;if(!(c[D>>2]|0)){if(c[c[r>>2]>>2]|0)zg(c[c[r>>2]>>2]|0);if((c[f>>2]|0)==5)c[D>>2]=Ag(c[(c[r>>2]|0)+4>>2]|0,2)|0}if(!(c[D>>2]|0)){if((c[B>>2]|0)<(c[p>>2]|0)){c[q>>2]=(c[p>>2]|0)/(c[B>>2]|0)|0;c[k>>2]=((c[m>>2]|0)+(c[q>>2]|0)-1|0)/(c[q>>2]|0)|0;if((c[k>>2]|0)==((((c[381]|0)>>>0)/((c[(c[(c[(c[r>>2]|0)+4>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0))c[k>>2]=(c[k>>2]|0)+-1}else c[k>>2]=_(c[m>>2]|0,(c[B>>2]|0)/(c[p>>2]|0)|0)|0;if((c[B>>2]|0)<(c[p>>2]|0)){q=c[B>>2]|0;o=c[m>>2]|0;o=rR(q|0,((q|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;q=v;c[q>>2]=o;c[q+4>>2]=C;c[y>>2]=Bg(c[x>>2]|0)|0;Cg(c[x>>2]|0,l);c[g>>2]=c[k>>2];while(1){if(c[D>>2]|0)break;if((c[g>>2]|0)>>>0>(c[l>>2]|0)>>>0)break;do if((c[g>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[(c[(c[r>>2]|0)+4>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0)){c[D>>2]=sg(c[x>>2]|0,c[g>>2]|0,n,0)|0;if(c[D>>2]|0)break;c[D>>2]=Dg(c[n>>2]|0)|0;vg(c[n>>2]|0)}while(0);c[g>>2]=(c[g>>2]|0)+1}if(!(c[D>>2]|0))c[D>>2]=Eg(c[x>>2]|0,0,1)|0;o=(c[381]|0)+(c[p>>2]|0)|0;a=((o|0)<0)<<31>>31;q=v;n=c[q+4>>2]|0;if((a|0)<(n|0)|((a|0)==(n|0)?o>>>0<(c[q>>2]|0)>>>0:0)){f=(c[381]|0)+(c[p>>2]|0)|0;e=f;f=((f|0)<0)<<31>>31}else{f=v;e=c[f>>2]|0;f=c[f+4>>2]|0}p=t;c[p>>2]=e;c[p+4>>2]=f;p=(c[381]|0)+(c[B>>2]|0)|0;q=u;c[q>>2]=p;c[q+4>>2]=((p|0)<0)<<31>>31;while(1){if(c[D>>2]|0)break;p=u;n=c[p+4>>2]|0;q=t;o=c[q+4>>2]|0;if(!((n|0)<(o|0)|((n|0)==(o|0)?(c[p>>2]|0)>>>0<(c[q>>2]|0)>>>0:0)))break;c[A>>2]=0;p=u;q=c[B>>2]|0;q=pR(c[p>>2]|0,c[p+4>>2]|0,q|0,((q|0)<0)<<31>>31|0)|0;q=gR(q|0,C|0,1,0)|0;c[w>>2]=q;c[D>>2]=sg(c[z>>2]|0,c[w>>2]|0,A,0)|0;if(!(c[D>>2]|0)){c[E>>2]=tg(c[A>>2]|0)|0;q=u;c[D>>2]=Fg(c[y>>2]|0,c[E>>2]|0,c[B>>2]|0,c[q>>2]|0,c[q+4>>2]|0)|0}vg(c[A>>2]|0);p=c[B>>2]|0;q=u;p=gR(c[q>>2]|0,c[q+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;q=u;c[q>>2]=p;c[q+4>>2]=C}if(!(c[D>>2]|0)){E=v;c[D>>2]=Gg(c[y>>2]|0,c[E>>2]|0,c[E+4>>2]|0)|0}if(!(c[D>>2]|0))c[D>>2]=Hg(c[x>>2]|0,0)|0}else{Ig(c[x>>2]|0,c[k>>2]|0);c[D>>2]=Eg(c[x>>2]|0,0,0)|0}if(!(c[D>>2]|0)){E=Jg(c[(c[r>>2]|0)+4>>2]|0,0)|0;c[D>>2]=E;c[D>>2]=0==(E|0)?101:E}}}if(c[s>>2]|0){Kg(c[(c[r>>2]|0)+24>>2]|0,0)|0;Jg(c[(c[r>>2]|0)+24>>2]|0,0)|0}if((c[D>>2]|0)==3082)c[D>>2]=7;c[(c[r>>2]|0)+28>>2]=c[D>>2];E=c[D>>2]|0;i=F;return E|0}function Wd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;d=h+16|0;e=h+12|0;b=h+8|0;f=h+4|0;g=h;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}c[f>>2]=c[(c[e>>2]|0)+20>>2];kg(c[(c[e>>2]|0)+24>>2]|0);if(c[c[e>>2]>>2]|0){a=(c[(c[e>>2]|0)+24>>2]|0)+16|0;c[a>>2]=(c[a>>2]|0)+-1}if(c[(c[e>>2]|0)+40>>2]|0){c[b>>2]=Lg(Of(c[(c[e>>2]|0)+24>>2]|0)|0)|0;while(1){if((c[c[b>>2]>>2]|0)==(c[e>>2]|0))break;c[b>>2]=(c[c[b>>2]>>2]|0)+44}c[c[b>>2]>>2]=c[(c[e>>2]|0)+44>>2]}Mg(c[(c[e>>2]|0)+4>>2]|0,0,0)|0;if((c[(c[e>>2]|0)+28>>2]|0)==101)a=0;else a=c[(c[e>>2]|0)+28>>2]|0;c[g>>2]=a;if(c[c[e>>2]>>2]|0){jg(c[c[e>>2]>>2]|0,c[g>>2]|0);Ng(c[c[e>>2]>>2]|0)}if(c[c[e>>2]>>2]|0)Kd(c[e>>2]|0);Ng(c[f>>2]|0);c[d>>2]=c[g>>2];g=c[d>>2]|0;i=h;return g|0}function Xd(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];if(!(c[b>>2]|0)){e=0;i=d;return e|0}e=c[(c[b>>2]|0)+168>>2]|0;i=d;return e|0}function Yd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;b=h+16|0;d=h+12|0;f=h+8|0;g=h+4|0;e=h;c[d>>2]=a;if(!(c[d>>2]|0))c[f>>2]=0;else{c[g>>2]=c[d>>2];c[e>>2]=c[c[g>>2]>>2];if(Og(c[g>>2]|0)|0){c[b>>2]=Kf(72362)|0;g=c[b>>2]|0;i=h;return g|0}a=(c[g>>2]|0)+128|0;d=c[a+4>>2]|0;if((d|0)>0|(d|0)==0&(c[a>>2]|0)>>>0>0)Pg(c[e>>2]|0,c[g>>2]|0);c[f>>2]=Qg(c[g>>2]|0)|0;c[f>>2]=Rg(c[e>>2]|0,c[f>>2]|0)|0;Ng(c[e>>2]|0)}c[b>>2]=c[f>>2];g=c[b>>2]|0;i=h;return g|0}function Zd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;e=g+8|0;f=g+4|0;d=g;c[b>>2]=a;if(!(c[b>>2]|0)){c[e>>2]=0;f=c[e>>2]|0;i=g;return f|0}c[f>>2]=c[b>>2];c[d>>2]=c[c[f>>2]>>2];a=(c[f>>2]|0)+128|0;b=c[a+4>>2]|0;if((b|0)>0|(b|0)==0&(c[a>>2]|0)>>>0>0)Pg(c[d>>2]|0,c[f>>2]|0);c[e>>2]=Sg(c[f>>2]|0)|0;Tg(c[f>>2]|0);c[e>>2]=Rg(c[d>>2]|0,c[e>>2]|0)|0;f=c[e>>2]|0;i=g;return f|0}function _d(a){a=a|0;var d=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;d=h+8|0;g=h+4|0;f=h;c[j>>2]=a;c[g>>2]=0;c[f>>2]=c[j>>2];c[d>>2]=0;while(1){if((c[d>>2]|0)>=(b[(c[f>>2]|0)+68>>1]|0))break;Ug((c[(c[f>>2]|0)+60>>2]|0)+((c[d>>2]|0)*40|0)|0);b[(c[(c[f>>2]|0)+60>>2]|0)+((c[d>>2]|0)*40|0)+8>>1]=1;c[d>>2]=(c[d>>2]|0)+1}if(!((e[(c[f>>2]|0)+88>>1]|0)>>>8&1)){j=c[g>>2]|0;i=h;return j|0}if(!(c[(c[f>>2]|0)+188>>2]|0)){j=c[g>>2]|0;i=h;return j|0}j=(c[f>>2]|0)+88|0;b[j>>1]=b[j>>1]&-9|8;j=c[g>>2]|0;i=h;return j|0}function $d(a){a=a|0;var d=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+8|0;d=h+4|0;f=h;c[d>>2]=a;c[f>>2]=c[d>>2];if(!((e[(c[f>>2]|0)+8>>1]|0)&18)){c[g>>2]=ae(c[d>>2]|0)|0;g=c[g>>2]|0;i=h;return g|0}if(Vg(c[f>>2]|0)|0){c[g>>2]=0;g=c[g>>2]|0;i=h;return g|0}a=(c[f>>2]|0)+8|0;b[a>>1]=e[a>>1]|0|16;if(c[(c[f>>2]|0)+12>>2]|0)d=c[(c[f>>2]|0)+16>>2]|0;else d=0;c[g>>2]=d;g=c[g>>2]|0;i=h;return g|0}function ae(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Wg(c[d>>2]|0,1)|0;i=b;return a|0}function be(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Xg(c[d>>2]|0,1)|0;i=b;return a|0}function ce(a){a=a|0;var b=0.0,d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;b=+Yg(c[e>>2]|0);i=d;return+b}function de(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Zg(c[d>>2]|0)|0;i=b;return a|0}function ee(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Zg(c[d>>2]|0)|0;i=b;return a|0}function fe(a){a=a|0;var b=0,f=0;f=i;i=i+16|0;b=f;c[b>>2]=a;i=f;return d[19002+((e[(c[b>>2]|0)+8>>1]|0)&31)>>0]|0|0}function ge(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;ah(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,0,c[g>>2]|0);i=f;return}function he(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,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+12|0;j=l;k=l+8|0;c[g>>2]=a;c[h>>2]=b;b=j;c[b>>2]=d;c[b+4>>2]=e;c[k>>2]=f;b=j;f=c[b+4>>2]|0;if(f>>>0>0|(f|0)==0&(c[b>>2]|0)>>>0>2147483647){bh(c[h>>2]|0,c[k>>2]|0,c[g>>2]|0)|0;i=l;return}else{ah(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,0,c[k>>2]|0);i=l;return}}function ie(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+8|0;e=d;c[f>>2]=a;h[e>>3]=b;ch(c[c[f>>2]>>2]|0,+h[e>>3]);i=d;return}function je(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;j=f+8|0;h=f+4|0;g=f;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;c[(c[j>>2]|0)+20>>2]=1;a[(c[j>>2]|0)+25>>0]=1;dh(c[c[j>>2]>>2]|0,c[h>>2]|0,c[g>>2]|0,1,-1)|0;i=f;return}function ke(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;a=c[f>>2]|0;eh(c[c[e>>2]>>2]|0,a,((a|0)<0)<<31>>31);i=d;return}function le(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;a=g;eh(c[c[f>>2]>>2]|0,c[a>>2]|0,c[a+4>>2]|0);i=e;return}function me(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;fh(c[c[d>>2]>>2]|0);i=b;return}function ne(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;ah(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,1,c[g>>2]|0);i=f;return}function oe(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;k=p+16|0;l=p+12|0;m=p;n=p+8|0;o=p+20|0;c[k>>2]=b;c[l>>2]=e;e=m;c[e>>2]=f;c[e+4>>2]=g;c[n>>2]=h;a[o>>0]=j;if((d[o>>0]|0)==4)a[o>>0]=(a[960]|0)==0?3:2;e=m;h=c[e+4>>2]|0;if(h>>>0>0|(h|0)==0&(c[e>>2]|0)>>>0>2147483647){bh(c[l>>2]|0,c[n>>2]|0,c[k>>2]|0)|0;i=p;return}else{ah(c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,a[o>>0]|0,c[n>>2]|0);i=p;return}}function pe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;gh(c[c[f>>2]>>2]|0,c[e>>2]|0)|0;i=d;return}function qe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;e=h+16|0;f=h+12|0;g=h;k=h+8|0;c[f>>2]=a;j=g;c[j>>2]=b;c[j+4>>2]=d;c[k>>2]=c[c[f>>2]>>2];d=g;j=c[d+4>>2]|0;a=c[(c[(c[k>>2]|0)+32>>2]|0)+88>>2]|0;b=((a|0)<0)<<31>>31;if(j>>>0>b>>>0|((j|0)==(b|0)?(c[d>>2]|0)>>>0>a>>>0:0)){c[e>>2]=18;k=c[e>>2]|0;i=h;return k|0}else{hh(c[c[f>>2]>>2]|0,c[g>>2]|0);c[e>>2]=0;k=c[e>>2]|0;i=h;return k|0}return 0}function re(b,d){b=b|0;d=d|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=b;c[g>>2]=d;c[(c[f>>2]|0)+20>>2]=c[g>>2];a[(c[f>>2]|0)+25>>0]=1;if(!((e[(c[c[f>>2]>>2]|0)+8>>1]|0)&1)){i=h;return}b=c[c[f>>2]>>2]|0;dh(b,ih(c[g>>2]|0)|0,-1,1,0)|0;i=h;return}function se(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;c[(c[e>>2]|0)+20>>2]=18;a[(c[e>>2]|0)+25>>0]=1;dh(c[c[e>>2]>>2]|0,19034,-1,1,0)|0;i=d;return}function te(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;fh(c[c[e>>2]>>2]|0);c[(c[e>>2]|0)+20>>2]=7;a[(c[e>>2]|0)+25>>0]=1;jh(c[(c[c[e>>2]>>2]|0)+32>>2]|0);i=d;return}function ue(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;e=o+32|0;f=o+28|0;j=o+24|0;k=o+20|0;m=o+16|0;g=o+12|0;h=o+8|0;l=o+4|0;n=o;c[f>>2]=d;c[j>>2]=0;c[k>>2]=0;c[m>>2]=c[f>>2];c[g>>2]=0;if(kh(c[m>>2]|0)|0){c[e>>2]=Kf(72913)|0;n=c[e>>2]|0;i=o;return n|0}c[h>>2]=c[c[m>>2]>>2];d=(c[m>>2]|0)+88|0;b[d>>1]=b[d>>1]&-513;while(1){d=lh(c[m>>2]|0)|0;c[j>>2]=d;if((d|0)!=17)break;d=c[g>>2]|0;c[g>>2]=d+1;if((d|0)>=50)break;c[l>>2]=c[(c[m>>2]|0)+76>>2];d=mh(c[m>>2]|0)|0;c[j>>2]=d;c[k>>2]=d;if(c[j>>2]|0)break;Zd(c[f>>2]|0)|0;if((c[l>>2]|0)<0)continue;d=(c[m>>2]|0)+88|0;b[d>>1]=b[d>>1]&-513|512}do if(c[k>>2]|0){c[n>>2]=ae(c[(c[h>>2]|0)+236>>2]|0)|0;Sf(c[h>>2]|0,c[(c[m>>2]|0)+44>>2]|0);if(a[(c[h>>2]|0)+65>>0]|0){c[(c[m>>2]|0)+44>>2]=0;c[j>>2]=7;c[(c[m>>2]|0)+80>>2]=7;break}else{n=nh(c[h>>2]|0,c[n>>2]|0)|0;c[(c[m>>2]|0)+44>>2]=n;c[(c[m>>2]|0)+80>>2]=c[k>>2];break}}while(0);c[j>>2]=Rg(c[h>>2]|0,c[j>>2]|0)|0;c[e>>2]=c[j>>2];n=c[e>>2]|0;i=o;return n|0}function ve(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[(c[b>>2]|0)+4>>2]|0)+4>>2]|0}function we(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[c[b>>2]>>2]|0)+32>>2]|0}function xe(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+8|0;h=g+4|0;f=g;c[h>>2]=a;c[f>>2]=b;b=c[h>>2]|0;if(!((e[(c[(c[h>>2]|0)+8>>2]|0)+8>>1]|0)&8192)){c[d>>2]=oh(b,c[f>>2]|0)|0;h=c[d>>2]|0;i=g;return h|0}else{c[d>>2]=c[(c[b+8>>2]|0)+16>>2];h=c[d>>2]|0;i=g;return h|0}return 0}function ye(a){a=a|0;var b=0,d=0,f=0;d=i;i=i+16|0;f=d+4|0;b=d;c[f>>2]=a;c[b>>2]=c[f>>2];if(!(c[b>>2]|0)){f=0;i=d;return f|0}f=e[(c[b>>2]|0)+84>>1]|0;i=d;return f|0}function ze(a){a=a|0;var b=0,d=0,f=0,g=0;f=i;i=i+16|0;b=f+8|0;g=f+4|0;d=f;c[g>>2]=a;c[d>>2]=c[g>>2];if((c[d>>2]|0)!=0?(c[(c[d>>2]|0)+20>>2]|0)!=0:0){c[b>>2]=e[(c[d>>2]|0)+84>>1];g=c[b>>2]|0;i=f;return g|0}c[b>>2]=0;g=c[b>>2]|0;i=f;return g|0}function Ae(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e+4|0;d=e;c[f>>2]=a;c[g>>2]=b;c[d>>2]=$d(qh(c[f>>2]|0,c[g>>2]|0)|0)|0;rh(c[f>>2]|0);i=e;return c[d>>2]|0}function Be(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e+4|0;d=e;c[f>>2]=a;c[g>>2]=b;c[d>>2]=be(qh(c[f>>2]|0,c[g>>2]|0)|0)|0;rh(c[f>>2]|0);i=e;return c[d>>2]|0}function Ce(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;f=e+12|0;g=e+8|0;d=e;c[f>>2]=a;c[g>>2]=b;h[d>>3]=+ce(qh(c[f>>2]|0,c[g>>2]|0)|0);rh(c[f>>2]|0);i=e;return+ +h[d>>3]}function De(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e+4|0;d=e;c[f>>2]=a;c[g>>2]=b;c[d>>2]=de(qh(c[f>>2]|0,c[g>>2]|0)|0)|0;rh(c[f>>2]|0);i=e;return c[d>>2]|0}function Ee(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;f=d+12|0;g=d+8|0;e=d;c[f>>2]=a;c[g>>2]=b;b=ee(qh(c[f>>2]|0,c[g>>2]|0)|0)|0;a=e;c[a>>2]=b;c[a+4>>2]=C;rh(c[f>>2]|0);a=e;C=c[a+4>>2]|0;i=d;return c[a>>2]|0}function Fe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e+4|0;d=e;c[f>>2]=a;c[g>>2]=b;c[d>>2]=ae(qh(c[f>>2]|0,c[g>>2]|0)|0)|0;rh(c[f>>2]|0);i=e;return c[d>>2]|0}function Ge(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0;h=i;i=i+16|0;f=h+8|0;j=h+4|0;g=h;c[f>>2]=a;c[j>>2]=d;c[g>>2]=qh(c[f>>2]|0,c[j>>2]|0)|0;if(!((e[(c[g>>2]|0)+8>>1]|0)&2048)){j=c[f>>2]|0;rh(j);j=c[g>>2]|0;i=h;return j|0}j=(c[g>>2]|0)+8|0;b[j>>1]=(e[j>>1]|0)&-2049;j=(c[g>>2]|0)+8|0;b[j>>1]=e[j>>1]|0|4096;j=c[f>>2]|0;rh(j);j=c[g>>2]|0;i=h;return j|0}function He(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e+4|0;d=e;c[f>>2]=a;c[g>>2]=b;c[d>>2]=fe(qh(c[f>>2]|0,c[g>>2]|0)|0)|0;rh(c[f>>2]|0);i=e;return c[d>>2]|0}function Ie(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=sh(c[f>>2]|0,c[e>>2]|0,169,0)|0;i=d;return a|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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;m=g+16|0;l=g+12|0;k=g+8|0;j=g+4|0;h=g;c[m>>2]=a;c[l>>2]=b;c[k>>2]=d;c[j>>2]=e;c[h>>2]=f;d=th(c[m>>2]|0,c[l>>2]|0,c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,0)|0;i=g;return d|0}function Ke(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+20|0;e=k+16|0;f=k;j=k+12|0;g=k+8|0;c[l>>2]=a;c[e>>2]=b;h[f>>3]=d;c[g>>2]=c[l>>2];c[j>>2]=uh(c[g>>2]|0,c[e>>2]|0)|0;if(c[j>>2]|0){l=c[j>>2]|0;i=k;return l|0}ch((c[(c[g>>2]|0)+60>>2]|0)+(((c[e>>2]|0)-1|0)*40|0)|0,+h[f>>3]);l=c[j>>2]|0;i=k;return l|0}function Le(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;h=e;c[g>>2]=a;c[f>>2]=b;c[h>>2]=d;a=c[h>>2]|0;a=Me(c[g>>2]|0,c[f>>2]|0,a,((a|0)<0)<<31>>31)|0;i=e;return a|0}function Me(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+20|0;f=k+16|0;g=k;j=k+12|0;h=k+8|0;c[l>>2]=a;c[f>>2]=b;a=g;c[a>>2]=d;c[a+4>>2]=e;c[h>>2]=c[l>>2];c[j>>2]=uh(c[h>>2]|0,c[f>>2]|0)|0;if(c[j>>2]|0){l=c[j>>2]|0;i=k;return l|0}l=g;eh((c[(c[h>>2]|0)+60>>2]|0)+(((c[f>>2]|0)-1|0)*40|0)|0,c[l>>2]|0,c[l+4>>2]|0);l=c[j>>2]|0;i=k;return l|0}function Ne(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+12|0;f=e+8|0;d=e+4|0;g=e;c[h>>2]=a;c[f>>2]=b;c[g>>2]=c[h>>2];c[d>>2]=uh(c[g>>2]|0,c[f>>2]|0)|0;i=e;return c[d>>2]|0}function Oe(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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;m=g+16|0;l=g+12|0;k=g+8|0;j=g+4|0;h=g;c[m>>2]=a;c[l>>2]=b;c[k>>2]=d;c[j>>2]=e;c[h>>2]=f;d=th(c[m>>2]|0,c[l>>2]|0,c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,1)|0;i=g;return d|0}function Pe(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;g=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=b;c[j>>2]=d;c[k>>2]=f;switch(fe(c[k>>2]|0)|0){case 1:{k=c[k>>2]|0;c[l>>2]=Me(c[g>>2]|0,c[j>>2]|0,c[k>>2]|0,c[k+4>>2]|0)|0;l=c[l>>2]|0;i=m;return l|0}case 2:{c[l>>2]=Ke(c[g>>2]|0,c[j>>2]|0,+h[c[k>>2]>>3])|0;l=c[l>>2]|0;i=m;return l|0}case 4:{b=c[g>>2]|0;g=c[j>>2]|0;d=c[k>>2]|0;if((e[(c[k>>2]|0)+8>>1]|0)&16384){c[l>>2]=Qe(b,g,c[d>>2]|0)|0;l=c[l>>2]|0;i=m;return l|0}else{c[l>>2]=Je(b,g,c[d+16>>2]|0,c[(c[k>>2]|0)+12>>2]|0,-1)|0;l=c[l>>2]|0;i=m;return l|0}}case 3:{c[l>>2]=th(c[g>>2]|0,c[j>>2]|0,c[(c[k>>2]|0)+16>>2]|0,c[(c[k>>2]|0)+12>>2]|0,-1,a[(c[k>>2]|0)+10>>0]|0)|0;l=c[l>>2]|0;i=m;return l|0}default:{c[l>>2]=Ne(c[g>>2]|0,c[j>>2]|0)|0;l=c[l>>2]|0;i=m;return l|0}}return 0}function Qe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;k=j+16|0;e=j+12|0;f=j+8|0;h=j+4|0;g=j;c[k>>2]=a;c[e>>2]=b;c[f>>2]=d;c[g>>2]=c[k>>2];c[h>>2]=uh(c[g>>2]|0,c[e>>2]|0)|0;if(c[h>>2]|0){k=c[h>>2]|0;i=j;return k|0}hh((c[(c[g>>2]|0)+60>>2]|0)+(((c[e>>2]|0)-1|0)*40|0)|0,c[f>>2]|0);k=c[h>>2]|0;i=j;return k|0}function Re(a){a=a|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[f>>2]=a;c[d>>2]=c[f>>2];if(!(c[d>>2]|0)){f=0;i=e;return f|0}f=b[(c[d>>2]|0)+68>>1]|0;i=e;return f|0}function Se(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=c[f>>2]|0;b=c[e>>2]|0;b=vh(a,b,If(c[e>>2]|0)|0)|0;i=d;return b|0}function Te(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=fe(c[b>>2]|0)|0;if((c[d>>2]|0)!=3){a=c[d>>2]|0;i=f;return a|0}c[e>>2]=c[b>>2];xh(c[e>>2]|0,0);c[d>>2]=fe(c[b>>2]|0)|0;a=c[d>>2]|0;i=f;return a|0}function Ue(f,g,h,j,k,l,m,n){f=f|0;g=g|0;h=h|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,M=0,N=0,O=0,P=0,Q=0;Q=i;i=i+144|0;M=Q+48|0;L=Q+40|0;N=Q+32|0;E=Q+24|0;D=Q+16|0;C=Q+8|0;F=Q+132|0;o=Q+128|0;p=Q+124|0;G=Q+120|0;q=Q;r=Q+116|0;H=Q+112|0;x=Q+108|0;t=Q+104|0;K=Q+100|0;O=Q+96|0;A=Q+92|0;J=Q+88|0;I=Q+84|0;P=Q+80|0;z=Q+76|0;y=Q+72|0;v=Q+68|0;w=Q+64|0;B=Q+60|0;u=Q+56|0;s=Q+52|0;c[F>>2]=f;c[o>>2]=g;c[p>>2]=h;c[G>>2]=j;h=q;c[h>>2]=k;c[h+4>>2]=l;c[r>>2]=m;c[H>>2]=n;c[x>>2]=0;c[K>>2]=0;c[O>>2]=0;c[J>>2]=0;c[I>>2]=0;c[c[H>>2]>>2]=0;c[r>>2]=((c[r>>2]|0)!=0^1^1)&1;c[I>>2]=ph(c[F>>2]|0,28,0)|0;a:do if((c[I>>2]|0)!=0?(c[J>>2]=yh(c[F>>2]|0,544,0)|0,(c[J>>2]|0)!=0):0){while(1){kR(c[J>>2]|0,0,544)|0;c[c[J>>2]>>2]=c[F>>2];Sf(c[F>>2]|0,c[O>>2]|0);c[O>>2]=0;Nf(c[F>>2]|0);c[A>>2]=zh(c[J>>2]|0,0,c[p>>2]|0,c[o>>2]|0)|0;if((c[A>>2]|0)!=0?(d[(c[A>>2]|0)+42>>0]&16|0)!=0:0){c[A>>2]=0;h=c[J>>2]|0;c[C>>2]=c[p>>2];Ah(h,19057,C)}if((c[A>>2]|0)!=0?(d[(c[A>>2]|0)+42>>0]&32|0)!=0:0){c[A>>2]=0;h=c[J>>2]|0;c[D>>2]=c[p>>2];Ah(h,19087,D)}if((c[A>>2]|0)!=0?(c[(c[A>>2]|0)+12>>2]|0)!=0:0){c[A>>2]=0;h=c[J>>2]|0;c[E>>2]=c[p>>2];Ah(h,19123,E)}if(!(c[A>>2]|0)){k=13;break}c[t>>2]=0;while(1){if((c[t>>2]|0)>=(b[(c[A>>2]|0)+34>>1]|0))break;if(!(Td(c[(c[(c[A>>2]|0)+4>>2]|0)+((c[t>>2]|0)*24|0)>>2]|0,c[G>>2]|0)|0))break;c[t>>2]=(c[t>>2]|0)+1}if((c[t>>2]|0)==(b[(c[A>>2]|0)+34>>1]|0)){k=21;break}if(c[r>>2]|0){c[P>>2]=0;b:do if(c[(c[F>>2]|0)+24>>2]&524288){c[y>>2]=c[(c[A>>2]|0)+16>>2];while(1){if(!(c[y>>2]|0))break b;c[v>>2]=0;while(1){if((c[v>>2]|0)>=(c[(c[y>>2]|0)+20>>2]|0))break;if((c[(c[y>>2]|0)+36+(c[v>>2]<<3)>>2]|0)==(c[t>>2]|0))c[P>>2]=19165;c[v>>2]=(c[v>>2]|0)+1}c[y>>2]=c[(c[y>>2]|0)+4>>2]}}while(0);c[z>>2]=c[(c[A>>2]|0)+8>>2];while(1){if(!(c[z>>2]|0))break;c[w>>2]=0;while(1){if((c[w>>2]|0)>=(e[(c[z>>2]|0)+50>>1]|0))break;if(!((b[(c[(c[z>>2]|0)+4>>2]|0)+(c[w>>2]<<1)>>1]|0)!=(c[t>>2]|0)?(b[(c[(c[z>>2]|0)+4>>2]|0)+(c[w>>2]<<1)>>1]|0)!=-2:0))c[P>>2]=19177;c[w>>2]=(c[w>>2]|0)+1}c[z>>2]=c[(c[z>>2]|0)+20>>2]}if(c[P>>2]|0){k=42;break}}h=Ch(c[J>>2]|0)|0;c[(c[I>>2]|0)+20>>2]=h;if(c[(c[I>>2]|0)+20>>2]|0){c[B>>2]=c[(c[I>>2]|0)+20>>2];c[u>>2]=Dh(c[F>>2]|0,c[(c[A>>2]|0)+64>>2]|0)|0;Eh(c[B>>2]|0,2,c[u>>2]|0,c[r>>2]|0,c[c[(c[A>>2]|0)+64>>2]>>2]|0,c[(c[(c[A>>2]|0)+64>>2]|0)+4>>2]|0)|0;Fh(c[B>>2]|0,1);c[s>>2]=Gh(c[B>>2]|0,9,19219,0)|0;Hh(c[B>>2]|0,c[u>>2]|0);if(!(d[(c[F>>2]|0)+65>>0]|0)){c[(c[s>>2]|0)+4>>2]=c[u>>2];c[(c[s>>2]|0)+8>>2]=c[(c[A>>2]|0)+28>>2];c[(c[s>>2]|0)+12>>2]=c[r>>2];Ih(c[B>>2]|0,1,c[c[A>>2]>>2]|0,0)}if(!(d[(c[F>>2]|0)+65>>0]|0)){if(c[r>>2]|0)a[(c[s>>2]|0)+20>>0]=55;c[(c[s>>2]|0)+20+8>>2]=c[(c[A>>2]|0)+28>>2];c[(c[s>>2]|0)+20+12>>2]=c[u>>2];a[(c[s>>2]|0)+20+1>>0]=-14;c[(c[s>>2]|0)+20+16>>2]=(b[(c[A>>2]|0)+34>>1]|0)+1;c[(c[s>>2]|0)+80+8>>2]=b[(c[A>>2]|0)+34>>1];b[(c[J>>2]|0)+444>>1]=1;c[(c[J>>2]|0)+76>>2]=1;c[(c[J>>2]|0)+72>>2]=1;Jh(c[B>>2]|0,c[J>>2]|0)}}c[c[I>>2]>>2]=c[r>>2];c[(c[I>>2]|0)+12>>2]=c[t>>2];c[(c[I>>2]|0)+24>>2]=c[F>>2];if(a[(c[F>>2]|0)+65>>0]|0)break a;h=q;Me(c[(c[I>>2]|0)+20>>2]|0,1,c[h>>2]|0,c[h+4>>2]|0)|0;h=q;c[K>>2]=Kh(c[I>>2]|0,c[h>>2]|0,c[h+4>>2]|0,O)|0;h=(c[x>>2]|0)+1|0;c[x>>2]=h;if(!((h|0)<50?(c[K>>2]|0)==17:0))break a}if((k|0)==13){if(c[(c[J>>2]|0)+4>>2]|0){Sf(c[F>>2]|0,c[O>>2]|0);c[O>>2]=c[(c[J>>2]|0)+4>>2];c[(c[J>>2]|0)+4>>2]=0}c[K>>2]=1;break}else if((k|0)==21){Sf(c[F>>2]|0,c[O>>2]|0);P=c[F>>2]|0;c[N>>2]=c[G>>2];c[O>>2]=Bh(P,19144,N)|0;c[K>>2]=1;break}else if((k|0)==42){Sf(c[F>>2]|0,c[O>>2]|0);N=c[F>>2]|0;c[L>>2]=c[P>>2];c[O>>2]=Bh(N,19185,L)|0;c[K>>2]=1;break}}while(0);if((c[K>>2]|0)==0?(d[(c[F>>2]|0)+65>>0]|0)==0:0){c[c[H>>2]>>2]=c[I>>2];L=c[F>>2]|0;P=c[K>>2]|0;N=c[O>>2]|0;N=(N|0)!=0;N=N?19255:0;I=c[O>>2]|0;c[M>>2]=I;hg(L,P,N,M);N=c[F>>2]|0;P=c[O>>2]|0;Sf(N,P);P=c[J>>2]|0;Lh(P);P=c[F>>2]|0;O=c[J>>2]|0;Sf(P,O);O=c[F>>2]|0;P=c[K>>2]|0;P=Rg(O,P)|0;c[K>>2]=P;P=c[K>>2]|0;i=Q;return P|0}if((c[I>>2]|0)!=0?(c[(c[I>>2]|0)+20>>2]|0)!=0:0)Qg(c[(c[I>>2]|0)+20>>2]|0)|0;Sf(c[F>>2]|0,c[I>>2]|0);L=c[F>>2]|0;P=c[K>>2]|0;N=c[O>>2]|0;N=(N|0)!=0;N=N?19255:0;I=c[O>>2]|0;c[M>>2]=I;hg(L,P,N,M);N=c[F>>2]|0;P=c[O>>2]|0;Sf(N,P);P=c[J>>2]|0;Lh(P);P=c[F>>2]|0;O=c[J>>2]|0;Sf(P,O);O=c[F>>2]|0;P=c[K>>2]|0;P=Rg(O,P)|0;c[K>>2]=P;P=c[K>>2]|0;i=Q;return P|0}function Ve(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+12|0;d=f+8|0;e=f+4|0;b=f;c[g>>2]=a;c[d>>2]=c[g>>2];if(c[d>>2]|0){c[b>>2]=c[(c[d>>2]|0)+24>>2];c[e>>2]=Yd(c[(c[d>>2]|0)+20>>2]|0)|0;Sf(c[b>>2]|0,c[d>>2]|0);g=c[e>>2]|0;i=f;return g|0}else{c[e>>2]=0;g=c[e>>2]|0;i=f;return g|0}return 0}function We(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;b=Nh(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0,138)|0;i=f;return b|0}function Xe(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];if(!(c[b>>2]|0)){e=0;i=d;return e|0}if(!(c[(c[b>>2]|0)+20>>2]|0)){e=0;i=d;return e|0}e=c[(c[b>>2]|0)+4>>2]|0;i=d;return e|0}function Ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;k=m+8|0;e=m+32|0;n=m+28|0;f=m;j=m+24|0;h=m+20|0;g=m+16|0;l=m+12|0;c[n>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[h>>2]=c[n>>2];if(!(c[h>>2]|0)){c[e>>2]=Kf(81515)|0;n=c[e>>2]|0;i=m;return n|0}c[g>>2]=c[(c[h>>2]|0)+24>>2];if(c[(c[h>>2]|0)+20>>2]|0){n=f;c[j>>2]=Kh(c[h>>2]|0,c[n>>2]|0,c[n+4>>2]|0,l)|0;if(c[j>>2]|0){h=c[g>>2]|0;a=c[j>>2]|0;n=(c[l>>2]|0)!=0?19255:0;c[k>>2]=c[l>>2];hg(h,a,n,k);Sf(c[g>>2]|0,c[l>>2]|0)}}else c[j>>2]=4;c[j>>2]=Rg(c[g>>2]|0,c[j>>2]|0)|0;c[e>>2]=c[j>>2];n=c[e>>2]|0;i=m;return n|0}function Ze(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;b=(Ph(c[f>>2]|0,c[e>>2]|0,19258,91)|0)==0&1;i=d;return b|0}function _e(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;b=(Ph(c[h>>2]|0,c[g>>2]|0,19262,c[f>>2]|0)|0)==0&1;i=e;return b|0}function $e(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+64|0;j=z+56|0;k=z+52|0;l=z+48|0;m=z+44|0;n=z+40|0;o=z+36|0;w=z+32|0;x=z+28|0;v=z+24|0;p=z+20|0;r=z+16|0;t=z+12|0;q=z+8|0;s=z+4|0;u=z;c[k>>2]=b;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[w>>2]=0;c[v>>2]=0;c[p>>2]=0;if(!(Qh(c[k>>2]|0)|0)){c[j>>2]=Kf(105510)|0;y=c[j>>2]|0;i=z;return y|0}if(!(c[l>>2]|0))c[l>>2]=19266;jg(c[k>>2]|0,0);a:while(1){if(c[w>>2]|0)break;if(!(a[c[l>>2]>>0]|0))break;c[q>>2]=0;c[v>>2]=0;c[w>>2]=af(c[k>>2]|0,c[l>>2]|0,-1,v,x)|0;if(c[w>>2]|0)continue;if(!(c[v>>2]|0)){c[l>>2]=c[x>>2];continue}c[r>>2]=0;c[t>>2]=ye(c[v>>2]|0)|0;do{c[w>>2]=ue(c[v>>2]|0)|0;do if(c[m>>2]|0){if(100!=(c[w>>2]|0)){if(101!=(c[w>>2]|0)|(c[r>>2]|0)!=0)break;if(!(c[(c[k>>2]|0)+24>>2]&256))break}if(!(c[r>>2]|0)){c[p>>2]=ph(c[k>>2]|0,(c[t>>2]<<1<<2)+1|0,0)|0;if(!(c[p>>2]|0))break a;c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[t>>2]|0))break;e=Ie(c[v>>2]|0,c[s>>2]|0)|0;c[(c[p>>2]|0)+(c[s>>2]<<2)>>2]=e;c[s>>2]=(c[s>>2]|0)+1}c[r>>2]=1}b:do if((c[w>>2]|0)==100){c[q>>2]=(c[p>>2]|0)+(c[t>>2]<<2);c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[t>>2]|0))break b;e=Fe(c[v>>2]|0,c[s>>2]|0)|0;c[(c[q>>2]|0)+(c[s>>2]<<2)>>2]=e;if((c[(c[q>>2]|0)+(c[s>>2]<<2)>>2]|0)==0?(He(c[v>>2]|0,c[s>>2]|0)|0)!=5:0){y=27;break a}c[s>>2]=(c[s>>2]|0)+1}}while(0);if(Wb[c[m>>2]&255](c[n>>2]|0,c[t>>2]|0,c[q>>2]|0,c[p>>2]|0)|0){y=30;break a}}while(0)}while((c[w>>2]|0)==100);c[w>>2]=Qg(c[v>>2]|0)|0;c[v>>2]=0;c[l>>2]=c[x>>2];while(1){if(!(d[19267+(d[c[l>>2]>>0]|0)>>0]&1))break;c[l>>2]=(c[l>>2]|0)+1}Sf(c[k>>2]|0,c[p>>2]|0);c[p>>2]=0}if((y|0)==27)jh(c[k>>2]|0);else if((y|0)==30){c[w>>2]=4;Qg(c[v>>2]|0)|0;c[v>>2]=0;jg(c[k>>2]|0,4)}if(c[v>>2]|0)Qg(c[v>>2]|0)|0;Sf(c[k>>2]|0,c[p>>2]|0);c[w>>2]=Rg(c[k>>2]|0,c[w>>2]|0)|0;do if((c[w>>2]|0)!=0&(c[o>>2]|0)!=0){c[u>>2]=1+(If(bf(c[k>>2]|0)|0)|0);y=c[u>>2]|0;y=_f(y,((y|0)<0)<<31>>31)|0;c[c[o>>2]>>2]=y;if(c[c[o>>2]>>2]|0){e=c[c[o>>2]>>2]|0;y=bf(c[k>>2]|0)|0;iR(e|0,y|0,c[u>>2]|0)|0;break}else{c[w>>2]=7;jg(c[k>>2]|0,7);break}}else if(c[o>>2]|0)c[c[o>>2]>>2]=0;while(0);c[j>>2]=c[w>>2];y=c[j>>2]|0;i=z;return y|0}function af(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,j=0,k=0,l=0,m=0,n=0;h=i;i=i+32|0;n=h+20|0;m=h+16|0;l=h+12|0;k=h+8|0;j=h+4|0;g=h;c[n>>2]=a;c[m>>2]=b;c[l>>2]=d;c[k>>2]=e;c[j>>2]=f;c[g>>2]=Rh(c[n>>2]|0,c[m>>2]|0,c[l>>2]|0,1,0,c[k>>2]|0,c[j>>2]|0)|0;i=h;return c[g>>2]|0}function bf(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[e>>2]=b;if(!(c[e>>2]|0)){c[d>>2]=ih(7)|0;f=c[d>>2]|0;i=g;return f|0}if(!(Sh(c[e>>2]|0)|0)){c[d>>2]=ih(Kf(134947)|0)|0;f=c[d>>2]|0;i=g;return f|0}if(!(a[(c[e>>2]|0)+65>>0]|0)){c[f>>2]=ae(c[(c[e>>2]|0)+236>>2]|0)|0;if(!(c[f>>2]|0))c[f>>2]=ih(c[(c[e>>2]|0)+52>>2]|0)|0}else c[f>>2]=ih(7)|0;c[d>>2]=c[f>>2];f=c[d>>2]|0;i=g;return f|0}function cf(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,j=0,k=0,l=0,m=0,n=0;h=i;i=i+32|0;n=h+20|0;m=h+16|0;l=h+12|0;k=h+8|0;j=h+4|0;g=h;c[n>>2]=a;c[m>>2]=b;c[l>>2]=d;c[k>>2]=e;c[j>>2]=f;c[g>>2]=Rh(c[n>>2]|0,c[m>>2]|0,c[l>>2]|0,0,0,c[k>>2]|0,c[j>>2]|0)|0;i=h;return c[g>>2]|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,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;b=Th(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0,0)|0;i=f;return b|0}function ef(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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;m=g+16|0;l=g+12|0;k=g+8|0;j=g+4|0;h=g;c[m>>2]=a;c[l>>2]=b;c[k>>2]=d;c[j>>2]=e;c[h>>2]=f;b=Th(c[m>>2]|0,c[l>>2]|0,c[k>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;i=g;return b|0}function ff(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;o=q;g=q+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;n=q+12|0;m=q+8|0;p=q+4|0;c[h>>2]=e;c[j>>2]=f;c[n>>2]=0;c[p>>2]=0;c[k>>2]=c[(c[h>>2]|0)+328>>2];if((c[k>>2]|0)!=0?(c[(c[k>>2]|0)+12>>2]|0)==0:0){c[m>>2]=c[(c[k>>2]|0)+4>>2];c[l>>2]=ph(c[h>>2]|0,544,0)|0;if(!(c[l>>2]|0))c[n>>2]=7;else{a[(c[l>>2]|0)+454>>0]=1;c[c[l>>2]>>2]=c[h>>2];c[(c[l>>2]|0)+428>>2]=1;if((((0==(Uh(c[l>>2]|0,c[j>>2]|0,p)|0)?(c[(c[l>>2]|0)+488>>2]|0)!=0:0)?(a[(c[h>>2]|0)+65>>0]|0)==0:0)?(c[(c[(c[l>>2]|0)+488>>2]|0)+12>>2]|0)==0:0)?(d[(c[(c[l>>2]|0)+488>>2]|0)+42>>0]&16|0)==0:0){if(!(c[(c[m>>2]|0)+4>>2]|0)){c[(c[m>>2]|0)+4>>2]=c[(c[(c[l>>2]|0)+488>>2]|0)+4>>2];b[(c[m>>2]|0)+34>>1]=b[(c[(c[l>>2]|0)+488>>2]|0)+34>>1]|0;b[(c[(c[l>>2]|0)+488>>2]|0)+34>>1]=0;c[(c[(c[l>>2]|0)+488>>2]|0)+4>>2]=0}c[(c[k>>2]|0)+12>>2]=1}else{m=c[h>>2]|0;f=(c[p>>2]|0)!=0?19255:0;c[o>>2]=c[p>>2];hg(m,1,f,o);Sf(c[h>>2]|0,c[p>>2]|0);c[n>>2]=1}a[(c[l>>2]|0)+454>>0]=0;if(c[(c[l>>2]|0)+8>>2]|0)Qg(c[(c[l>>2]|0)+8>>2]|0)|0;Qf(c[h>>2]|0,c[(c[l>>2]|0)+488>>2]|0);Lh(c[l>>2]|0);Sf(c[h>>2]|0,c[l>>2]|0)}c[n>>2]=Rg(c[h>>2]|0,c[n>>2]|0)|0;c[g>>2]=c[n>>2];p=c[g>>2]|0;i=q;return p|0}jg(c[h>>2]|0,21);c[g>>2]=Kf(119136)|0;p=c[g>>2]|0;i=q;return p|0}function gf(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[19523+((d[(c[b>>2]|0)+70>>0]|0)-1)>>0]|0|0}function hf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+28|0;l=k+24|0;g=k+8|0;j=k+4|0;h=k;c[f>>2]=b;c[l>>2]=d;c[j>>2]=0;c[g>>2]=e;do if((c[l>>2]|0)==1){c[h>>2]=c[(c[f>>2]|0)+328>>2];if(c[h>>2]|0){e=(c[g>>2]|0)+(4-1)&~(4-1);l=c[e>>2]|0;c[g>>2]=e+4;a[(c[c[h>>2]>>2]|0)+16>>0]=l;break}else{c[j>>2]=Kf(119587)|0;break}}else c[j>>2]=Kf(119595)|0;while(0);if(!(c[j>>2]|0)){l=c[j>>2]|0;i=k;return l|0}jg(c[f>>2]|0,c[j>>2]|0);l=c[j>>2]|0;i=k;return l|0}function jf(){return 18462}function kf(){return 19541}function lf(){return 3011e3}function mf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+48|0;h=k+44|0;d=k+40|0;e=k+24|0;j=k+16|0;g=k+8|0;f=k;c[d>>2]=a;c[j>>2]=0;if(c[59]|0){c[h>>2]=Kf(133154)|0;j=c[h>>2]|0;i=k;return j|0}c[e>>2]=b;do switch(c[d>>2]|0){case 4:{g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[11]=c[b>>2];c[12]=c[b+4>>2];c[13]=c[b+8>>2];c[14]=c[b+12>>2];c[15]=c[b+16>>2];c[16]=c[b+20>>2];c[17]=c[b+24>>2];c[18]=c[b+28>>2];break}case 5:{if(!(c[11]|0))Xh();g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[b>>2]=c[11];c[b+4>>2]=c[12];c[b+8>>2]=c[13];c[b+12>>2]=c[14];c[b+16>>2]=c[15];c[b+20>>2]=c[16];c[b+24>>2]=c[17];c[b+28>>2]=c[18];break}case 9:{g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[2]=b;break}case 6:{g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[50]=b;b=(c[e>>2]|0)+(4-1)&~(4-1);g=c[b>>2]|0;c[e>>2]=b+4;c[51]=g;g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[52]=b;break}case 7:{g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[53]=b;b=(c[e>>2]|0)+(4-1)&~(4-1);g=c[b>>2]|0;c[e>>2]=b+4;c[54]=g;g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[55]=b;break}case 24:{g=(Yh()|0)+(Zh()|0)+(_h()|0)|0;a=(c[e>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[e>>2]=a+4;c[b>>2]=g;break}case 14:break;case 15:{c[j>>2]=1;break}case 18:{d=(c[e>>2]|0)+(4-1)&~(4-1);f=c[d>>2]|0;c[e>>2]=d+4;d=112;e=f;f=d+52|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));break}case 19:{if(!(c[30]|0))$h();f=(c[e>>2]|0)+(4-1)&~(4-1);d=c[f>>2]|0;c[e>>2]=f+4;e=112;f=d+52|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));break}case 13:{b=(c[e>>2]|0)+(4-1)&~(4-1);g=c[b>>2]|0;c[e>>2]=b+4;c[9]=g;g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[10]=b;break}case 16:{b=(c[e>>2]|0)+(4-1)&~(4-1);g=c[b>>2]|0;c[e>>2]=b+4;c[66]=g;g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[67]=b;break}case 17:{g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[5]=b;break}case 20:{g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[6]=b;break}case 22:{b=(c[e>>2]|0)+(8-1)&~(8-1);a=b;d=c[a>>2]|0;a=c[a+4>>2]|0;c[e>>2]=b+8;b=g;c[b>>2]=d;c[b+4>>2]=a;b=(c[e>>2]|0)+(8-1)&~(8-1); +a=b;d=c[a>>2]|0;a=c[a+4>>2]|0;c[e>>2]=b+8;e=f;c[e>>2]=d;c[e+4>>2]=a;e=f;b=c[e+4>>2]|0;e=(c[f+4>>2]|0)<0|((b|0)>0|(b|0)==0&(c[e>>2]|0)>>>0>0);b=f;c[b>>2]=e?0:d;c[b+4>>2]=e?0:a;if((c[g+4>>2]|0)<0){b=g;c[b>>2]=0;c[b+4>>2]=0}a=g;d=c[a+4>>2]|0;b=f;e=c[b+4>>2]|0;if((d|0)>(e|0)|((d|0)==(e|0)?(c[a>>2]|0)>>>0>(c[b>>2]|0)>>>0:0)){e=f;a=c[e+4>>2]|0;b=g;c[b>>2]=c[e>>2];c[b+4>>2]=a}b=c[f+4>>2]|0;a=192;c[a>>2]=c[f>>2];c[a+4>>2]=b;a=g;g=c[a+4>>2]|0;b=184;c[b>>2]=c[a>>2];c[b+4>>2]=g;break}case 25:{g=(c[e>>2]|0)+(4-1)&~(4-1);b=c[g>>2]|0;c[e>>2]=g+4;c[58]=b;break}default:c[j>>2]=1}while(0);c[h>>2]=c[j>>2];j=c[h>>2]|0;i=k;return j|0}function nf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;d=g+8|0;e=g+4|0;f=g;c[b>>2]=a;Nf(c[b>>2]|0);c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+20>>2]|0))break;c[e>>2]=c[(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4)+4>>2];if(c[e>>2]|0){c[f>>2]=Of(c[e>>2]|0)|0;ai(c[f>>2]|0)}c[d>>2]=(c[d>>2]|0)+1}i=g;return 0}function of(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=(c[d>>2]|0)+32|0;C=c[a+4>>2]|0;i=b;return c[a>>2]|0}function pf(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+80>>2]|0}function qf(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+84>>2]|0}function rf(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=di(c[d>>2]|0,0)|0;i=b;return a|0}function sf(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=di(c[d>>2]|0,1)|0;i=b;return a|0}function tf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e+8|0;h=e+4|0;g=e;c[f>>2]=a;c[h>>2]=b;c[g>>2]=d;c[(c[f>>2]|0)+448>>2]=c[h>>2];c[(c[f>>2]|0)+448+4>>2]=c[g>>2];c[(c[f>>2]|0)+448+8>>2]=0;c[(c[f>>2]|0)+496>>2]=0;i=e;return 0}function uf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;a=c[d>>2]|0;if((c[e>>2]|0)>0){tf(a,178,c[d>>2]|0)|0;c[(c[d>>2]|0)+496>>2]=c[e>>2];i=f;return 0}else{tf(a,0,0)|0;i=f;return 0}return 0}function vf(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=i;i=i+32|0;s=k+28|0;r=k+24|0;q=k+20|0;p=k+16|0;o=k+12|0;n=k+8|0;m=k+4|0;l=k;c[s>>2]=a;c[r>>2]=b;c[q>>2]=d;c[p>>2]=e;c[o>>2]=f;c[n>>2]=g;c[m>>2]=h;c[l>>2]=j;b=wf(c[s>>2]|0,c[r>>2]|0,c[q>>2]|0,c[p>>2]|0,c[o>>2]|0,c[n>>2]|0,c[m>>2]|0,c[l>>2]|0,0)|0;i=k;return b|0}function wf(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;x=i;i=i+48|0;l=x+40|0;m=x+36|0;n=x+32|0;o=x+28|0;p=x+24|0;q=x+20|0;r=x+16|0;s=x+12|0;t=x+8|0;v=x+4|0;u=x;c[l>>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]=j;c[t>>2]=k;c[v>>2]=1;c[u>>2]=0;do if(c[t>>2]|0){c[u>>2]=ph(c[l>>2]|0,12,0)|0;a=c[t>>2]|0;if(c[u>>2]|0){c[(c[u>>2]|0)+4>>2]=a;c[(c[u>>2]|0)+8>>2]=c[p>>2];w=5;break}else{Qb[a&255](c[p>>2]|0);break}}else w=5;while(0);if(((w|0)==5?(c[v>>2]=fi(c[l>>2]|0,c[m>>2]|0,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)|0,(c[u>>2]|0)!=0):0)?(c[c[u>>2]>>2]|0)==0:0){Qb[c[t>>2]&255](c[p>>2]|0);Sf(c[l>>2]|0,c[u>>2]|0)}c[v>>2]=Rg(c[l>>2]|0,c[v>>2]|0)|0;i=x;return c[v>>2]|0}function xf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+16|0;f=j+12|0;g=j+8|0;k=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[k>>2]=If(c[f>>2]|0)|0;c[h>>2]=0;if(!(gi(c[e>>2]|0,c[f>>2]|0,c[k>>2]|0,c[g>>2]|0,1,0)|0))c[h>>2]=fi(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0,1,0,224,0,0,0)|0;c[h>>2]=Rg(c[e>>2]|0,c[h>>2]|0)|0;i=j;return c[h>>2]|0}function yf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[f>>2]=a;c[d>>2]=b;a=c[f>>2]|0;if((c[d>>2]|0)>0){zf(a,139,c[d>>2]|0)|0;i=e;return 0}else{zf(a,0,0)|0;i=e;return 0}return 0}function zf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f+12|0;j=f+8|0;h=f+4|0;e=f;c[g>>2]=a;c[j>>2]=b;c[h>>2]=d;c[e>>2]=c[(c[g>>2]|0)+220>>2];c[(c[g>>2]|0)+216>>2]=c[j>>2];c[(c[g>>2]|0)+220>>2]=c[h>>2];i=f;return c[e>>2]|0}function Af(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r;h=r+32|0;j=r+28|0;k=r+24|0;l=r+20|0;m=r+16|0;n=r+12|0;p=r+8|0;o=r+4|0;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=10;if(c[m>>2]|0)c[c[m>>2]>>2]=-1;if(c[n>>2]|0)c[c[n>>2]>>2]=-1;if((c[l>>2]|0)<0|(c[l>>2]|0)>3){c[h>>2]=21;d=c[h>>2]|0;i=r;return d|0}if((c[k>>2]|0)!=0?(a[c[k>>2]>>0]|0)!=0:0)c[o>>2]=ji(c[j>>2]|0,c[k>>2]|0)|0;if((c[o>>2]|0)<0){c[p>>2]=1;d=c[j>>2]|0;c[q>>2]=c[k>>2];hg(d,1,19602,q)}else{c[(c[j>>2]|0)+448+8>>2]=0;c[p>>2]=ki(c[j>>2]|0,c[o>>2]|0,c[l>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;jg(c[j>>2]|0,c[p>>2]|0)}c[p>>2]=Rg(c[j>>2]|0,c[p>>2]|0)|0;c[h>>2]=c[p>>2];d=c[h>>2]|0;i=r;return d|0}function Bf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;b=Af(c[f>>2]|0,c[e>>2]|0,0,0,0)|0;i=d;return b|0}function Cf(a){a=a|0;var b=0,e=0,f=0;f=i;i=i+16|0;b=f+4|0;e=f;c[e>>2]=a;if((c[e>>2]|0)!=0?(Sh(c[e>>2]|0)|0)==0:0){c[b>>2]=Kf(135016)|0;a=c[b>>2]|0;i=f;return a|0}if((c[e>>2]|0)!=0?(d[(c[e>>2]|0)+65>>0]|0|0)==0:0){c[b>>2]=c[(c[e>>2]|0)+52>>2]&c[(c[e>>2]|0)+56>>2];a=c[b>>2]|0;i=f;return a|0}c[b>>2]=7;a=c[b>>2]|0;i=f;return a|0}function Df(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;if((c[g>>2]|0)<0|(c[g>>2]|0)>=12){c[e>>2]=-1;j=c[e>>2]|0;i=k;return j|0}c[j>>2]=c[(c[f>>2]|0)+88+(c[g>>2]<<2)>>2];if((c[h>>2]|0)>=0){if((c[h>>2]|0)>(c[1536+(c[g>>2]<<2)>>2]|0))c[h>>2]=c[1536+(c[g>>2]<<2)>>2];c[(c[f>>2]|0)+88+(c[g>>2]<<2)>>2]=c[h>>2]}c[e>>2]=c[j>>2];j=c[e>>2]|0;i=k;return j|0}function Ef(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=mi(c[f>>2]|0,c[e>>2]|0,6,0)|0;i=d;return a|0}function Ff(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+32|0;o=m+28|0;n=m+24|0;f=m+20|0;g=m+16|0;l=m+12|0;j=m+8|0;k=m+4|0;h=m;c[o>>2]=a;c[n>>2]=b;c[f>>2]=d;c[g>>2]=e;c[l>>2]=1;c[j>>2]=si(c[o>>2]|0,c[n>>2]|0)|0;if(!(c[j>>2]|0)){o=c[l>>2]|0;i=m;return o|0}kg(c[j>>2]|0);c[k>>2]=Of(c[j>>2]|0)|0;c[h>>2]=Bg(c[k>>2]|0)|0;if((c[f>>2]|0)==7){c[c[g>>2]>>2]=c[h>>2];c[l>>2]=0;o=c[l>>2]|0;i=m;return o|0}if((c[f>>2]|0)==27){o=ti(c[k>>2]|0)|0;c[c[g>>2]>>2]=o;c[l>>2]=0;o=c[l>>2]|0;i=m;return o|0}if((c[f>>2]|0)==28){o=ui(c[k>>2]|0)|0;c[c[g>>2]>>2]=o;c[l>>2]=0;o=c[l>>2]|0;i=m;return o|0}if(c[c[h>>2]>>2]|0){c[l>>2]=vi(c[h>>2]|0,c[f>>2]|0,c[g>>2]|0)|0;o=c[l>>2]|0;i=m;return o|0}else{c[l>>2]=12;o=c[l>>2]|0;i=m;return o|0}return 0}function Gf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j+12|0;e=j+8|0;f=j+4|0;g=j;c[e>>2]=b;c[f>>2]=d;if((c[e>>2]|0)==0|(c[f>>2]|0)==0){c[h>>2]=0;h=c[h>>2]|0;i=j;return h|0}d=(If(c[e>>2]|0)|0)+1|0;c[e>>2]=(c[e>>2]|0)+d;while(1){if(!(a[c[e>>2]>>0]|0)){b=8;break}c[g>>2]=yQ(c[e>>2]|0,c[f>>2]|0)|0;d=(If(c[e>>2]|0)|0)+1|0;c[e>>2]=(c[e>>2]|0)+d;d=c[e>>2]|0;if(!(c[g>>2]|0)){b=6;break}d=(If(d)|0)+1|0;c[e>>2]=(c[e>>2]|0)+d}if((b|0)==6){c[h>>2]=d;h=c[h>>2]|0;i=j;return h|0}else if((b|0)==8){c[h>>2]=0;h=c[h>>2]|0;i=j;return h|0}return 0}function Hf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;j=g+12|0;h=g+8|0;e=g+4|0;f=g;c[j>>2]=a;c[h>>2]=b;c[e>>2]=d;c[f>>2]=Gf(c[j>>2]|0,c[h>>2]|0)|0;c[e>>2]=(c[e>>2]|0)!=0&1;if(c[f>>2]|0){j=(Bi(c[f>>2]|0,c[e>>2]&255)|0)&255;i=g;return j|0}else{j=c[e>>2]|0;i=g;return j|0}return 0}function If(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;if(!(c[d>>2]|0))c[b>>2]=0;else c[b>>2]=1073741823&(BQ(c[d>>2]|0)|0);i=e;return c[b>>2]|0}function Jf(b){b=b|0;var c=0,e=0;e=i;i=i+16|0;c=e;a[c>>0]=b;i=e;return((d[19267+(d[c>>0]|0)>>0]|0)&70|0)!=0|0}function Kf(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b;e=b+8|0;c[e>>2]=a;e=c[e>>2]|0;a=(kf()|0)+20|0;c[d>>2]=e;c[d+4>>2]=a;Rd(21,47042,d);i=b;return 21}function Lf(){return c[417]|0}function Mf(){return c[70]|0}function Nf(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+20>>2]|0))break;c[e>>2]=c[(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4)+4>>2];if(c[e>>2]|0)c[(c[(c[e>>2]|0)+4>>2]|0)+4>>2]=c[c[e>>2]>>2];c[d>>2]=(c[d>>2]|0)+1}i=f;return}function Of(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[c[(c[b>>2]|0)+4>>2]>>2]|0}function Pf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=f;return}bv(c[d>>2]|0,c[(c[e>>2]|0)+28>>2]|0);Sf(c[d>>2]|0,c[c[e>>2]>>2]|0);Sf(c[d>>2]|0,c[(c[e>>2]|0)+4>>2]|0);Zu(c[d>>2]|0,c[(c[e>>2]|0)+12>>2]|0);_u(c[d>>2]|0,c[(c[e>>2]|0)+16>>2]|0);Sf(c[d>>2]|0,c[e>>2]|0);i=f;return}function Qf(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+16|0;f=l+12|0;g=l+8|0;h=l+4|0;j=l;c[e>>2]=a;c[f>>2]=d;if(!(c[f>>2]|0)){i=l;return}if(!((c[e>>2]|0)!=0?(c[(c[e>>2]|0)+528>>2]|0)!=0:0))k=4;if((k|0)==4?(d=(c[f>>2]|0)+36|0,k=(b[d>>1]|0)+-1<<16>>16,b[d>>1]=k,(k&65535|0)>0):0){i=l;return}c[g>>2]=c[(c[f>>2]|0)+8>>2];while(1){if(!(c[g>>2]|0))break;c[h>>2]=c[(c[g>>2]|0)+20>>2];if(!((c[e>>2]|0)!=0?(c[(c[e>>2]|0)+528>>2]|0)!=0:0)){c[j>>2]=c[c[g>>2]>>2];Oj((c[(c[g>>2]|0)+24>>2]|0)+24|0,c[j>>2]|0,0)|0}WG(c[e>>2]|0,c[g>>2]|0);c[g>>2]=c[h>>2]}LP(c[e>>2]|0,c[f>>2]|0);RG(c[e>>2]|0,c[f>>2]|0);Sf(c[e>>2]|0,c[c[f>>2]>>2]|0);Sf(c[e>>2]|0,c[(c[f>>2]|0)+20>>2]|0);Wu(c[e>>2]|0,c[(c[f>>2]|0)+12>>2]|0);Vu(c[e>>2]|0,c[(c[f>>2]|0)+24>>2]|0);CH(c[e>>2]|0,c[f>>2]|0);Sf(c[e>>2]|0,c[f>>2]|0);i=l;return}function Rf(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;h=l+16|0;j=l+12|0;g=l+8|0;f=l+4|0;k=l;c[h>>2]=a;c[j>>2]=d;oC(c[(c[j>>2]|0)+60>>2]|0,b[(c[j>>2]|0)+68>>1]|0);oC(c[(c[j>>2]|0)+16>>2]|0,e[(c[j>>2]|0)+84>>1]<<1);c[g>>2]=c[(c[j>>2]|0)+192>>2];while(1){if(!(c[g>>2]|0))break;c[f>>2]=c[(c[g>>2]|0)+24>>2];KP(c[h>>2]|0,c[c[g>>2]>>2]|0,c[(c[g>>2]|0)+4>>2]|0);Sf(c[h>>2]|0,c[g>>2]|0);c[g>>2]=c[f>>2]}c[k>>2]=(b[(c[j>>2]|0)+70>>1]|0)-1;while(1){a=c[h>>2]|0;if((c[k>>2]|0)<0)break;Sf(a,c[(c[(c[j>>2]|0)+64>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+-1}Sf(a,c[(c[j>>2]|0)+64>>2]|0);KP(c[h>>2]|0,c[(c[j>>2]|0)+4>>2]|0,c[(c[j>>2]|0)+32>>2]|0);Sf(c[h>>2]|0,c[(c[j>>2]|0)+16>>2]|0);Sf(c[h>>2]|0,c[(c[j>>2]|0)+168>>2]|0);Sf(c[h>>2]|0,c[(c[j>>2]|0)+172>>2]|0);i=l;return}function Sf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=g;return}if(c[d>>2]|0){a=c[d>>2]|0;b=c[e>>2]|0;if(c[(c[d>>2]|0)+528>>2]|0){JP(a,b);i=g;return}if(au(a,b)|0){c[f>>2]=c[e>>2];c[c[f>>2]>>2]=c[(c[d>>2]|0)+248+28>>2];c[(c[d>>2]|0)+248+28>>2]=c[f>>2];f=(c[d>>2]|0)+248+8|0;c[f>>2]=(c[f>>2]|0)+-1;i=g;return}}Kd(c[e>>2]|0);i=g;return}function Tf(){var a=0,b=0,d=0,e=0,f=0,g=0;g=i;i=i+32|0;e=g+16|0;a=g+12|0;b=g+8|0;f=g+4|0;d=g;if(!(c[11]|0))Xh();c[70]=0;c[71]=0;c[72]=0;c[73]=0;c[74]=0;c[75]=0;c[76]=0;c[77]=0;c[70]=8;if((c[50]|0)!=0&(c[51]|0)>=100&(c[52]|0)>0){c[f>>2]=c[51]&-8;c[51]=c[f>>2];c[d>>2]=c[50];c[b>>2]=c[52];c[75]=c[d>>2];c[76]=c[b>>2];c[a>>2]=0;while(1){if((c[a>>2]|0)>=((c[b>>2]|0)-1|0))break;c[c[d>>2]>>2]=(c[d>>2]|0)+(c[f>>2]|0);c[d>>2]=c[c[d>>2]>>2];c[a>>2]=(c[a>>2]|0)+1}c[c[d>>2]>>2]=0;c[74]=(c[d>>2]|0)+4}else{c[74]=0;c[50]=0;c[51]=0;c[52]=0}if((c[53]|0)==0|(c[54]|0)<512|(c[55]|0)<=0){c[53]=0;c[54]=0}c[e>>2]=Tb[c[64>>2]&255](c[18]|0)|0;if(!(c[e>>2]|0)){f=c[e>>2]|0;i=g;return f|0}c[70]=0;c[71]=0;c[72]=0;c[73]=0;c[74]=0;c[75]=0;c[76]=0;c[77]=0;f=c[e>>2]|0;i=g;return f|0}function Uf(){var a=0,b=0,d=0,e=0;e=i;i=i+16|0;b=e+8|0;d=e+4|0;a=e;c[d>>2]=1080;c[a>>2]=7788;c[b>>2]=0;while(1){if((c[b>>2]|0)>=57)break;Yt(c[d>>2]|0,(c[a>>2]|0)+(c[b>>2]<<5)|0);c[b>>2]=(c[b>>2]|0)+1}tO();uO();i=e;return}function Vf(){if(!(c[30]|0))$h();return Tb[c[120>>2]&255](c[29]|0)|0}function Wf(){var a=0,b=0,d=0;d=i;i=i+16|0;a=d+4|0;b=d;c[b>>2]=Id(10)|0;if(!(c[b>>2]|0)){c[a>>2]=7;b=c[a>>2]|0;i=d;return b|0}else{Kd(c[b>>2]|0);c[a>>2]=Ud()|0;b=c[a>>2]|0;i=d;return b|0}return 0}function Xf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(!(c[409]|0)){i=j;return}if(!(c[e>>2]|0)){c[g>>2]=0;c[f>>2]=0}c[f>>2]=c[f>>2]&-8;c[412]=c[f>>2];b=c[g>>2]|0;c[419]=b;c[413]=b;if((c[g>>2]|0)>90)d=10;else d=((c[g>>2]|0)/10|0)+1|0;c[414]=d;c[415]=c[e>>2];c[418]=0;c[420]=0;while(1){b=c[g>>2]|0;c[g>>2]=b+-1;d=c[e>>2]|0;if(!b)break;c[h>>2]=d;c[c[h>>2]>>2]=c[418];c[418]=c[h>>2];c[e>>2]=(c[e>>2]|0)+(c[f>>2]|0)}c[416]=d;i=j;return}function Yf(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;if(!(c[d>>2]|0)){i=f;return}if((c[269]|0)==(c[d>>2]|0)){c[269]=c[(c[d>>2]|0)+12>>2];i=f;return}if(!(c[269]|0)){i=f;return}c[e>>2]=c[269];while(1){if(c[(c[e>>2]|0)+12>>2]|0)b=(c[(c[e>>2]|0)+12>>2]|0)!=(c[d>>2]|0);else b=0;a=c[(c[e>>2]|0)+12>>2]|0;if(!b)break;c[e>>2]=a}if((a|0)!=(c[d>>2]|0)){i=f;return}c[(c[e>>2]|0)+12>>2]=c[(c[d>>2]|0)+12>>2];i=f;return}function Zf(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;C=0;i=d;return c[996+(c[b>>2]<<2)>>2]|0}function _f(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f;e=f+8|0;g=d;c[g>>2]=a;c[g+4>>2]=b;g=d;b=d;a=c[b+4>>2]|0;if((c[g>>2]|0)==0&(c[g+4>>2]|0)==0|(a>>>0>0|(a|0)==0&(c[b>>2]|0)>>>0>=2147483392)){c[e>>2]=0;g=c[e>>2]|0;i=f;return g|0}if(c[2]|0){sO(c[d>>2]|0,e)|0;g=c[e>>2]|0;i=f;return g|0}else{c[e>>2]=Tb[c[44>>2]&255](c[d>>2]|0)|0;g=c[e>>2]|0;i=f;return g|0}return 0}function $f(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Tb[c[56>>2]&255](c[d>>2]|0)|0;i=b;return a|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=996+(c[f>>2]<<2)|0;c[a>>2]=(c[a>>2]|0)-(c[e>>2]|0);i=d;return}function bg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;e=m+28|0;f=m+24|0;g=m;k=m+20|0;j=m+16|0;h=m+12|0;l=m+8|0;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=g;b=c[d>>2]|0;d=c[d+4>>2]|0;if(!(c[f>>2]|0)){c[e>>2]=_f(b,d)|0;l=c[e>>2]|0;i=m;return l|0}if((b|0)==0&(d|0)==0){Kd(c[f>>2]|0);c[e>>2]=0;l=c[e>>2]|0;i=m;return l|0}a=g;d=c[a+4>>2]|0;if(d>>>0>0|(d|0)==0&(c[a>>2]|0)>>>0>=2147483392){c[e>>2]=0;l=c[e>>2]|0;i=m;return l|0}c[k>>2]=$f(c[f>>2]|0)|0;c[j>>2]=Tb[c[60>>2]&255](c[g>>2]|0)|0;do if((c[k>>2]|0)!=(c[j>>2]|0)){if(!(c[2]|0)){c[l>>2]=Yb[c[52>>2]&255](c[f>>2]|0,c[j>>2]|0)|0;break}Mi(5,c[g>>2]|0);c[h>>2]=(c[j>>2]|0)-(c[k>>2]|0);d=Zf(0)|0;n=C;b=288;a=c[h>>2]|0;a=fR(c[b>>2]|0,c[b+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;b=C;if((n|0)>(b|0)|(n|0)==(b|0)&d>>>0>=a>>>0)rO(c[h>>2]|0);c[l>>2]=Yb[c[52>>2]&255](c[f>>2]|0,c[j>>2]|0)|0;n=288;h=c[n+4>>2]|0;if((c[l>>2]|0)==0&((h|0)>0|(h|0)==0&(c[n>>2]|0)>>>0>0)){rO(c[g>>2]|0);c[l>>2]=Yb[c[52>>2]&255](c[f>>2]|0,c[j>>2]|0)|0}if(c[l>>2]|0){c[j>>2]=$f(c[l>>2]|0)|0;Ni(0,(c[j>>2]|0)-(c[k>>2]|0)|0)}}else c[l>>2]=c[f>>2];while(0);c[e>>2]=c[l>>2];n=c[e>>2]|0;i=m;return n|0}function cg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;h=i;i=i+32|0;j=h+16|0;m=h+12|0;n=h+8|0;l=h+4|0;k=h;c[j>>2]=b;c[m>>2]=d;c[n>>2]=e;c[l>>2]=f;c[k>>2]=g;e=c[n>>2]|0;c[(c[j>>2]|0)+4>>2]=e;c[(c[j>>2]|0)+8>>2]=e;c[c[j>>2]>>2]=c[m>>2];c[(c[j>>2]|0)+12>>2]=0;c[(c[j>>2]|0)+16>>2]=c[l>>2];c[(c[j>>2]|0)+20>>2]=c[k>>2];a[(c[j>>2]|0)+24>>0]=0;a[(c[j>>2]|0)+25>>0]=0;i=h;return}function dg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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,_=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;ra=i;i=i+272|0;j=ra+176|0;k=ra+172|0;l=ra+168|0;q=ra+164|0;p=ra+160|0;aa=ra+156|0;Q=ra+152|0;K=ra+148|0;ja=ra+144|0;B=ra+268|0;F=ra+267|0;z=ra+266|0;x=ra+265|0;y=ra+264|0;H=ra+263|0;D=ra+262|0;E=ra+261|0;t=ra+260|0;na=ra+259|0;m=ra+258|0;ha=ra+257|0;ba=ra+256|0;R=ra+32|0;ea=ra+24|0;L=ra+140|0;pa=ra+136|0;T=ra+132|0;oa=ra+128|0;w=ra+124|0;u=ra+120|0;W=ra+116|0;fa=ra+16|0;A=ra+255|0;G=ra+254|0;X=ra+112|0;o=ra+184|0;ka=ra+108|0;ca=ra+104|0;ia=ra+8|0;la=ra+100|0;s=ra+96|0;n=ra+183|0;$=ra+92|0;ma=ra+182|0;ga=ra;I=ra+88|0;U=ra+84|0;J=ra+80|0;N=ra+76|0;O=ra+72|0;S=ra+68|0;M=ra+64|0;V=ra+60|0;r=ra+181|0;da=ra+180|0;v=ra+56|0;_=ra+52|0;Z=ra+48|0;P=ra+44|0;Y=ra+40|0;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;a[na>>0]=0;c[oa>>2]=0;c[X>>2]=0;c[p>>2]=0;if(a[(c[j>>2]|0)+25>>0]|0){b=d[(c[j>>2]|0)+25>>0]&2;a[m>>0]=b;if(b&255){e=c[l>>2]|0;f=(c[e>>2]|0)+(4-1)&~(4-1);b=c[f>>2]|0;c[e>>2]=f+4;c[X>>2]=b}a[ha>>0]=d[(c[j>>2]|0)+25>>0]&1}else{a[ha>>0]=0;a[m>>0]=0}a:while(1){b=a[c[k>>2]>>0]|0;c[q>>2]=b;if(!b){qa=268;break}if((c[q>>2]|0)!=37){c[p>>2]=c[k>>2];do{c[k>>2]=(c[k>>2]|0)+1;if(!(a[c[k>>2]>>0]|0))break}while((a[c[k>>2]>>0]|0)!=37);aA(c[j>>2]|0,c[p>>2]|0,(c[k>>2]|0)-(c[p>>2]|0)|0);if(!(a[c[k>>2]>>0]|0)){qa=268;break}}b=(c[k>>2]|0)+1|0;c[k>>2]=b;b=a[b>>0]|0;c[q>>2]=b;if(!b){qa=13;break}a[H>>0]=0;a[y>>0]=0;a[x>>0]=0;a[z>>0]=0;a[F>>0]=0;a[B>>0]=0;a[t>>0]=0;do{switch(c[q>>2]|0){case 45:{a[B>>0]=1;break}case 43:{a[F>>0]=1;break}case 32:{a[z>>0]=1;break}case 35:{a[x>>0]=1;break}case 33:{a[y>>0]=1;break}case 48:{a[H>>0]=1;break}default:a[t>>0]=1}if(a[t>>0]|0)break;b=(c[k>>2]|0)+1|0;c[k>>2]=b;b=a[b>>0]|0;c[q>>2]=b}while((b|0)!=0);if((c[q>>2]|0)==42){if(a[m>>0]|0){b=mO(c[X>>2]|0)|0;c[ja>>2]=b}else{e=c[l>>2]|0;f=(c[e>>2]|0)+(4-1)&~(4-1);b=c[f>>2]|0;c[e>>2]=f+4;c[ja>>2]=b}if((c[ja>>2]|0)<0){a[B>>0]=1;c[ja>>2]=(c[ja>>2]|0)>=-2147483647?0-(c[ja>>2]|0)|0:0}b=(c[k>>2]|0)+1|0;c[k>>2]=b;c[q>>2]=a[b>>0]}else{c[ka>>2]=0;while(1){f=c[ka>>2]|0;if(!((c[q>>2]|0)>=48?(c[q>>2]|0)<=57:0))break;c[ka>>2]=(f*10|0)+(c[q>>2]|0)-48;b=(c[k>>2]|0)+1|0;c[k>>2]=b;c[q>>2]=a[b>>0]}c[ja>>2]=f&2147483647}do if((c[q>>2]|0)==46){b=(c[k>>2]|0)+1|0;c[k>>2]=b;c[q>>2]=a[b>>0];if((c[q>>2]|0)!=42){c[ca>>2]=0;while(1){f=c[ca>>2]|0;if(!((c[q>>2]|0)>=48?(c[q>>2]|0)<=57:0))break;c[ca>>2]=(f*10|0)+(c[q>>2]|0)-48;b=(c[k>>2]|0)+1|0;c[k>>2]=b;c[q>>2]=a[b>>0]}c[aa>>2]=f&2147483647;break}if(a[m>>0]|0){b=mO(c[X>>2]|0)|0;c[aa>>2]=b}else{e=c[l>>2]|0;f=(c[e>>2]|0)+(4-1)&~(4-1);b=c[f>>2]|0;c[e>>2]=f+4;c[aa>>2]=b}b=(c[k>>2]|0)+1|0;c[k>>2]=b;c[q>>2]=a[b>>0];if((c[aa>>2]|0)<0)c[aa>>2]=(c[aa>>2]|0)>=-2147483647?0-(c[aa>>2]|0)|0:-1}else c[aa>>2]=-1;while(0);do if((c[q>>2]|0)==108){a[D>>0]=1;b=(c[k>>2]|0)+1|0;c[k>>2]=b;c[q>>2]=a[b>>0];if((c[q>>2]|0)==108){a[E>>0]=1;b=(c[k>>2]|0)+1|0;c[k>>2]=b;c[q>>2]=a[b>>0];break}else{a[E>>0]=0;break}}else{a[E>>0]=0;a[D>>0]=0}while(0);c[L>>2]=46051;a[na>>0]=0;c[K>>2]=0;while(1){if((c[K>>2]|0)>=23)break;f=c[K>>2]|0;if((c[q>>2]|0)==(a[46051+((c[K>>2]|0)*6|0)>>0]|0)){qa=56;break}c[K>>2]=f+1}if((qa|0)==56){qa=0;c[L>>2]=46051+(f*6|0);if((d[ha>>0]|0)==0?(d[(c[L>>2]|0)+2>>0]&2|0)!=0:0){qa=268;break}a[na>>0]=a[(c[L>>2]|0)+3>>0]|0}b:do switch(d[na>>0]|0){case 14:{a[E>>0]=0;a[D>>0]=1;qa=62;break}case 1:case 16:{qa=62;break}case 4:case 3:case 2:{if(a[m>>0]|0)h[ea>>3]=+nO(c[X>>2]|0);else{b=c[l>>2]|0;e=(c[b>>2]|0)+(8-1)&~(8-1);g=+h[e>>3];c[b>>2]=e+8;h[ea>>3]=g}if((c[aa>>2]|0)<0)c[aa>>2]=6;do if(!(+h[ea>>3]<0.0)){if(a[F>>0]|0){a[ba>>0]=43;break}if(a[z>>0]|0){a[ba>>0]=32;break}else{a[ba>>0]=0;break}}else{h[ea>>3]=-+h[ea>>3];a[ba>>0]=45}while(0);if((d[na>>0]|0)==4&(c[aa>>2]|0)>0)c[aa>>2]=(c[aa>>2]|0)+-1;c[K>>2]=c[aa>>2]&4095;h[fa>>3]=.5;while(1){if((c[K>>2]|0)<=0)break;c[K>>2]=(c[K>>2]|0)+-1;h[fa>>3]=+h[fa>>3]*.1}if((d[na>>0]|0)==2)h[ea>>3]=+h[ea>>3]+ +h[fa>>3];c[w>>2]=0;if(HF(+h[ea>>3])|0){c[p>>2]=46238;c[Q>>2]=3;break b}if(+h[ea>>3]>0.0){h[ga>>3]=1.0;while(1){if(!(+h[ea>>3]>=+h[ga>>3]*1.e+100?(c[w>>2]|0)<=350:0))break;h[ga>>3]=+h[ga>>3]*1.e+100;c[w>>2]=(c[w>>2]|0)+100}while(1){if(!(+h[ea>>3]>=+h[ga>>3]*1.0e10?(c[w>>2]|0)<=350:0))break;h[ga>>3]=+h[ga>>3]*1.0e10;c[w>>2]=(c[w>>2]|0)+10}while(1){g=+h[ga>>3];if(!(+h[ea>>3]>=+h[ga>>3]*10.0?(c[w>>2]|0)<=350:0))break;h[ga>>3]=g*10.0;c[w>>2]=(c[w>>2]|0)+1}h[ea>>3]=+h[ea>>3]/g;while(1){if(!(+h[ea>>3]<1.0e-08))break;h[ea>>3]=+h[ea>>3]*1.0e8;c[w>>2]=(c[w>>2]|0)-8}while(1){if(!(+h[ea>>3]<1.0))break;h[ea>>3]=+h[ea>>3]*10.0;c[w>>2]=(c[w>>2]|0)+-1}if((c[w>>2]|0)>350){c[p>>2]=o;a[o>>0]=a[ba>>0]|0;b=o+((a[ba>>0]|0)!=0&1)|0;a[b>>0]=a[46242]|0;a[b+1>>0]=a[46243]|0;a[b+2>>0]=a[46244]|0;a[b+3>>0]=a[46245]|0;c[Q>>2]=3+((a[ba>>0]|0)!=0&1);break b}}c[p>>2]=o;if((d[na>>0]|0)!=2?(h[ea>>3]=+h[ea>>3]+ +h[fa>>3],+h[ea>>3]>=10.0):0){h[ea>>3]=+h[ea>>3]*.1;c[w>>2]=(c[w>>2]|0)+1}c:do if((d[na>>0]|0)==4){a[G>>0]=((a[x>>0]|0)!=0^1)&1;do if((c[w>>2]|0)>=-4){if((c[w>>2]|0)>(c[aa>>2]|0))break;c[aa>>2]=(c[aa>>2]|0)-(c[w>>2]|0);a[na>>0]=2;break c}while(0);a[na>>0]=3}else a[G>>0]=a[y>>0]|0;while(0);if((d[na>>0]|0)==3)c[u>>2]=0;else c[u>>2]=c[w>>2];b=(c[u>>2]|0)>0?c[u>>2]|0:0;e=c[aa>>2]|0;e=gR(b|0,((b|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;b=c[ja>>2]|0;b=gR(e|0,C|0,b|0,((b|0)<0)<<31>>31|0)|0;e=C;if((e|0)>0|(e|0)==0&b>>>0>55?(b=(c[u>>2]|0)>0?c[u>>2]|0:0,e=c[aa>>2]|0,e=gR(b|0,((b|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0,b=c[ja>>2]|0,b=gR(e|0,C|0,b|0,((b|0)<0)<<31>>31|0)|0,b=gR(b|0,C|0,15,0)|0,b=_f(b,C)|0,c[oa>>2]=b,c[p>>2]=b,(c[p>>2]|0)==0):0){qa=161;break a}c[pa>>2]=c[p>>2];c[W>>2]=16+((d[y>>0]|0)*10|0);a[A>>0]=((c[aa>>2]|0)>0?1:0)|d[x>>0]|d[y>>0];if(a[ba>>0]|0){e=a[ba>>0]|0;b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=e}d:do if((c[u>>2]|0)<0){b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=48}else while(1){if((c[u>>2]|0)<0)break d;e=oO(ea,W)|0;b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=e;c[u>>2]=(c[u>>2]|0)+-1}while(0);if(a[A>>0]|0){b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=46}c[u>>2]=(c[u>>2]|0)+1;while(1){if((c[u>>2]|0)>=0)break;b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=48;c[aa>>2]=(c[aa>>2]|0)+-1;c[u>>2]=(c[u>>2]|0)+1}while(1){b=c[aa>>2]|0;c[aa>>2]=b+-1;if((b|0)<=0)break;e=oO(ea,W)|0;b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=e}do if(d[G>>0]|0){if(!(d[A>>0]|0))break;while(1){f=(c[p>>2]|0)+-1|0;if((a[(c[p>>2]|0)+-1>>0]|0)!=48)break;c[p>>2]=f;a[f>>0]=0}if((a[f>>0]|0)!=46)break;f=c[p>>2]|0;if(a[y>>0]|0){c[p>>2]=f+1;a[f>>0]=48;break}else{b=f+-1|0;c[p>>2]=b;a[b>>0]=0;break}}while(0);if((d[na>>0]|0)==3){f=a[46198+(d[(c[L>>2]|0)+4>>0]|0)>>0]|0;b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=f;b=(c[w>>2]|0)<0;f=c[p>>2]|0;c[p>>2]=f+1;if(b){a[f>>0]=45;c[w>>2]=0-(c[w>>2]|0)}else a[f>>0]=43;if((c[w>>2]|0)>=100){e=((c[w>>2]|0)/100|0)+48&255;b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=e;c[w>>2]=(c[w>>2]|0)%100|0}b=((c[w>>2]|0)/10|0)+48&255;e=c[p>>2]|0;c[p>>2]=e+1;a[e>>0]=b;e=((c[w>>2]|0)%10|0)+48&255;b=c[p>>2]|0;c[p>>2]=b+1;a[b>>0]=e}a[c[p>>2]>>0]=0;c[Q>>2]=(c[p>>2]|0)-(c[pa>>2]|0);c[p>>2]=c[pa>>2];if((d[H>>0]|0)==0|(a[B>>0]|0)!=0)break b;if((c[Q>>2]|0)>=(c[ja>>2]|0))break b;c[U>>2]=(c[ja>>2]|0)-(c[Q>>2]|0);c[I>>2]=c[ja>>2];while(1){if((c[I>>2]|0)<(c[U>>2]|0))break;a[(c[p>>2]|0)+(c[I>>2]|0)>>0]=a[(c[p>>2]|0)+((c[I>>2]|0)-(c[U>>2]|0))>>0]|0;c[I>>2]=(c[I>>2]|0)+-1}c[I>>2]=(a[ba>>0]|0)!=0&1;while(1){b=c[U>>2]|0;c[U>>2]=b+-1;if(!b)break;b=c[I>>2]|0;c[I>>2]=b+1;a[(c[p>>2]|0)+b>>0]=48}c[Q>>2]=c[ja>>2];break}case 5:{if(!(a[m>>0]|0)){e=c[(c[j>>2]|0)+12>>2]|0;f=c[l>>2]|0;sa=(c[f>>2]|0)+(4-1)&~(4-1);b=c[sa>>2]|0;c[f>>2]=sa+4;c[b>>2]=e}c[ja>>2]=0;c[Q>>2]=0;break}case 8:{a[o>>0]=37;c[p>>2]=o;c[Q>>2]=1;break}case 9:{if(a[m>>0]|0){c[p>>2]=pO(c[X>>2]|0)|0;if(c[p>>2]|0)f=a[c[p>>2]>>0]|0;else f=0;c[q>>2]=f}else{b=c[l>>2]|0;e=(c[b>>2]|0)+(4-1)&~(4-1);sa=c[e>>2]|0;c[b>>2]=e+4;c[q>>2]=sa}if((c[aa>>2]|0)>1){c[ja>>2]=(c[ja>>2]|0)-((c[aa>>2]|0)-1);if(!((c[ja>>2]|0)<=1|(a[B>>0]|0)!=0)){qO(c[j>>2]|0,(c[ja>>2]|0)-1|0,32);c[ja>>2]=0}qO(c[j>>2]|0,(c[aa>>2]|0)-1|0,c[q>>2]&255)}c[Q>>2]=1;a[o>>0]=c[q>>2];c[p>>2]=o;break}case 7:case 6:{if(a[m>>0]|0){c[p>>2]=pO(c[X>>2]|0)|0;a[na>>0]=6}else{b=c[l>>2]|0;e=(c[b>>2]|0)+(4-1)&~(4-1);sa=c[e>>2]|0;c[b>>2]=e+4;c[p>>2]=sa}if(c[p>>2]|0){if((d[na>>0]|0)==7)c[oa>>2]=c[p>>2]}else c[p>>2]=19266;if((c[aa>>2]|0)<0){c[Q>>2]=If(c[p>>2]|0)|0;break b}c[Q>>2]=0;while(1){if((c[Q>>2]|0)>=(c[aa>>2]|0))break b;if(!(a[(c[p>>2]|0)+(c[Q>>2]|0)>>0]|0))break b;c[Q>>2]=(c[Q>>2]|0)+1}}case 15:case 11:case 10:{a[da>>0]=(d[na>>0]|0)==15?34:39;if(a[m>>0]|0)c[v>>2]=pO(c[X>>2]|0)|0;else{b=c[l>>2]|0;e=(c[b>>2]|0)+(4-1)&~(4-1);sa=c[e>>2]|0;c[b>>2]=e+4;c[v>>2]=sa}c[M>>2]=(c[v>>2]|0)==0&1;if(c[M>>2]|0)c[v>>2]=(d[na>>0]|0)==11?40498:46246;c[O>>2]=c[aa>>2];c[S>>2]=0;c[J>>2]=0;while(1){if(!(c[O>>2]|0))break;sa=a[(c[v>>2]|0)+(c[J>>2]|0)>>0]|0;a[r>>0]=sa;if(!(sa<<24>>24))break;if((a[r>>0]|0)==(a[da>>0]|0))c[S>>2]=(c[S>>2]|0)+1;c[J>>2]=(c[J>>2]|0)+1;c[O>>2]=(c[O>>2]|0)+-1}if(c[M>>2]|0)f=0;else f=(d[na>>0]|0)==11;c[V>>2]=f&1;c[S>>2]=(c[S>>2]|0)+((c[J>>2]|0)+3);if((c[S>>2]|0)>70){sa=c[S>>2]|0;sa=_f(sa,((sa|0)<0)<<31>>31)|0;c[oa>>2]=sa;c[p>>2]=sa;if(!(c[p>>2]|0)){qa=241;break a}}else c[p>>2]=o;c[N>>2]=0;if(c[V>>2]|0){b=a[da>>0]|0;sa=c[N>>2]|0;c[N>>2]=sa+1;a[(c[p>>2]|0)+sa>>0]=b}c[O>>2]=c[J>>2];c[J>>2]=0;while(1){if((c[J>>2]|0)>=(c[O>>2]|0))break;b=a[(c[v>>2]|0)+(c[J>>2]|0)>>0]|0;a[r>>0]=b;sa=c[N>>2]|0;c[N>>2]=sa+1;a[(c[p>>2]|0)+sa>>0]=b;if((a[r>>0]|0)==(a[da>>0]|0)){b=a[r>>0]|0;sa=c[N>>2]|0;c[N>>2]=sa+1;a[(c[p>>2]|0)+sa>>0]=b}c[J>>2]=(c[J>>2]|0)+1}if(c[V>>2]|0){b=a[da>>0]|0;sa=c[N>>2]|0;c[N>>2]=sa+1;a[(c[p>>2]|0)+sa>>0]=b}a[(c[p>>2]|0)+(c[N>>2]|0)>>0]=0;c[Q>>2]=c[N>>2];break}case 12:{b=c[l>>2]|0;e=(c[b>>2]|0)+(4-1)&~(4-1);sa=c[e>>2]|0;c[b>>2]=e+4;c[_>>2]=sa;if((c[_>>2]|0)!=0?(c[(c[_>>2]|0)+4>>2]|0)!=0:0)aA(c[j>>2]|0,c[c[_>>2]>>2]|0,c[(c[_>>2]|0)+4>>2]|0);c[ja>>2]=0;c[Q>>2]=0;break}case 13:{e=c[l>>2]|0;sa=(c[e>>2]|0)+(4-1)&~(4-1);b=c[sa>>2]|0;c[e>>2]=sa+4;c[Z>>2]=b;b=c[l>>2]|0;e=(c[b>>2]|0)+(4-1)&~(4-1);sa=c[e>>2]|0;c[b>>2]=e+4;c[P>>2]=sa;c[Y>>2]=(c[Z>>2]|0)+8+((c[P>>2]|0)*72|0);if(c[(c[Y>>2]|0)+4>>2]|0){AD(c[j>>2]|0,c[(c[Y>>2]|0)+4>>2]|0);aA(c[j>>2]|0,45876,1)}AD(c[j>>2]|0,c[(c[Y>>2]|0)+8>>2]|0);c[ja>>2]=0;c[Q>>2]=0;break}default:{qa=268;break a}}while(0);if((qa|0)==62){qa=0;f=(a[m>>0]|0)!=0;do if(d[(c[L>>2]|0)+2>>0]&1){do if(!f){f=c[l>>2]|0;if(a[E>>0]|0){sa=(c[f>>2]|0)+(8-1)&~(8-1);b=sa;e=c[b>>2]|0;b=c[b+4>>2]|0;c[f>>2]=sa+8;sa=ia;c[sa>>2]=e;c[sa+4>>2]=b;break}else{sa=(c[f>>2]|0)+(4-1)&~(4-1);b=c[sa>>2]|0;c[f>>2]=sa+4;sa=ia;c[sa>>2]=b;c[sa+4>>2]=((b|0)<0)<<31>>31;break}}else{b=mO(c[X>>2]|0)|0;sa=ia;c[sa>>2]=b;c[sa+4>>2]=C}while(0);e=ia;f=c[e>>2]|0;e=c[e+4>>2]|0;if((c[ia+4>>2]|0)<0){if((f|0)==0&(e|0)==-2147483648){sa=R;c[sa>>2]=0;c[sa+4>>2]=-2147483648}else{b=ia;b=fR(0,0,c[b>>2]|0,c[b+4>>2]|0)|0;sa=R;c[sa>>2]=b;c[sa+4>>2]=C}a[ba>>0]=45;break}sa=R;c[sa>>2]=f;c[sa+4>>2]=e;if(a[F>>0]|0){a[ba>>0]=43;break}if(a[z>>0]|0){a[ba>>0]=32;break}else{a[ba>>0]=0;break}}else{do if(!f){f=c[l>>2]|0;if(a[E>>0]|0){sa=(c[f>>2]|0)+(8-1)&~(8-1);b=sa;e=c[b>>2]|0;b=c[b+4>>2]|0;c[f>>2]=sa+8;sa=R;c[sa>>2]=e;c[sa+4>>2]=b;break}else{sa=(c[f>>2]|0)+(4-1)&~(4-1);b=c[sa>>2]|0;c[f>>2]=sa+4;sa=R;c[sa>>2]=b;c[sa+4>>2]=0;break}}else{b=mO(c[X>>2]|0)|0;sa=R;c[sa>>2]=b;c[sa+4>>2]=C}while(0);a[ba>>0]=0}while(0);sa=R;if((c[sa>>2]|0)==0&(c[sa+4>>2]|0)==0)a[x>>0]=0;if((d[H>>0]|0)!=0?(c[aa>>2]|0)<((c[ja>>2]|0)-((a[ba>>0]|0)!=0&1)|0):0)c[aa>>2]=(c[ja>>2]|0)-((a[ba>>0]|0)!=0&1);if((c[aa>>2]|0)>=60){c[T>>2]=(c[aa>>2]|0)+10;sa=c[T>>2]|0;sa=_f(sa,((sa|0)<0)<<31>>31)|0;c[oa>>2]=sa;c[pa>>2]=sa;if(!(c[pa>>2]|0)){qa=92;break}}else{c[T>>2]=70;c[pa>>2]=o}c[p>>2]=(c[pa>>2]|0)+((c[T>>2]|0)-1);if((d[na>>0]|0)==16){sa=R;sa=tR(c[sa>>2]|0,c[sa+4>>2]|0,10,0)|0;c[la>>2]=sa;if(!((c[la>>2]|0)<4?(sa=R,sa=sR(c[sa>>2]|0,c[sa+4>>2]|0,10,0)|0,sa=tR(sa|0,C|0,10,0)|0,!((sa|0)==1&(C|0)==0)):0))c[la>>2]=0;sa=a[46189+((c[la>>2]<<1)+1)>>0]|0;b=(c[p>>2]|0)+-1|0;c[p>>2]=b;a[b>>0]=sa;b=a[46189+(c[la>>2]<<1)>>0]|0;sa=(c[p>>2]|0)+-1|0;c[p>>2]=sa;a[sa>>0]=b}c[s>>2]=46198+(d[(c[L>>2]|0)+4>>0]|0);a[n>>0]=a[(c[L>>2]|0)+1>>0]|0;do{sa=R;sa=tR(c[sa>>2]|0,c[sa+4>>2]|0,d[n>>0]|0,0)|0;sa=a[(c[s>>2]|0)+sa>>0]|0;b=(c[p>>2]|0)+-1|0;c[p>>2]=b;a[b>>0]=sa;b=R;b=sR(c[b>>2]|0,c[b+4>>2]|0,d[n>>0]|0,0)|0;sa=R;c[sa>>2]=b;c[sa+4>>2]=C;sa=R;b=c[sa+4>>2]|0}while(b>>>0>0|(b|0)==0&(c[sa>>2]|0)>>>0>0);c[Q>>2]=(c[pa>>2]|0)+((c[T>>2]|0)-1)-(c[p>>2]|0);c[K>>2]=(c[aa>>2]|0)-(c[Q>>2]|0);while(1){if((c[K>>2]|0)<=0)break;sa=(c[p>>2]|0)+-1|0;c[p>>2]=sa;a[sa>>0]=48;c[K>>2]=(c[K>>2]|0)+-1}if(a[ba>>0]|0){b=a[ba>>0]|0;sa=(c[p>>2]|0)+-1|0;c[p>>2]=sa;a[sa>>0]=b}e:do if((d[x>>0]|0)!=0?(d[(c[L>>2]|0)+5>>0]|0)!=0:0){c[$>>2]=46231+(d[(c[L>>2]|0)+5>>0]|0);while(1){sa=a[c[$>>2]>>0]|0;a[ma>>0]=sa;if(!(sa<<24>>24))break e;b=a[ma>>0]|0;sa=(c[p>>2]|0)+-1|0;c[p>>2]=sa;a[sa>>0]=b;c[$>>2]=(c[$>>2]|0)+1}}while(0);c[Q>>2]=(c[pa>>2]|0)+((c[T>>2]|0)-1)-(c[p>>2]|0)}c[ja>>2]=(c[ja>>2]|0)-(c[Q>>2]|0);if(!((c[ja>>2]|0)<=0|(a[B>>0]|0)!=0))qO(c[j>>2]|0,c[ja>>2]|0,32);aA(c[j>>2]|0,c[p>>2]|0,c[Q>>2]|0);if((c[ja>>2]|0)>0?(d[B>>0]|0)!=0:0)qO(c[j>>2]|0,c[ja>>2]|0,32);if(c[oa>>2]|0){Sf(c[c[j>>2]>>2]|0,c[oa>>2]|0);c[oa>>2]=0}c[k>>2]=(c[k>>2]|0)+1}if((qa|0)==13){aA(c[j>>2]|0,46049,1);i=ra;return}else if((qa|0)==92){eA(c[j>>2]|0,1);i=ra;return}else if((qa|0)==161){eA(c[j>>2]|0,1);i=ra;return}else if((qa|0)==241){eA(c[j>>2]|0,1);i=ra;return}else if((qa|0)==268){i=ra;return}}function eg(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;do if(((c[(c[e>>2]|0)+8>>2]|0)!=0?(a[(c[(c[e>>2]|0)+8>>2]|0)+(c[(c[e>>2]|0)+12>>2]|0)>>0]=0,(c[(c[e>>2]|0)+20>>2]|0)>>>0>0):0)?((d[(c[e>>2]|0)+25>>0]|0)&4|0)==0:0){b=yh(c[c[e>>2]>>2]|0,(c[(c[e>>2]|0)+12>>2]|0)+1|0,0)|0;c[(c[e>>2]|0)+8>>2]=b;b=c[e>>2]|0;if(c[(c[e>>2]|0)+8>>2]|0){iR(c[b+8>>2]|0,c[(c[e>>2]|0)+4>>2]|0,(c[(c[e>>2]|0)+12>>2]|0)+1|0)|0;b=(c[e>>2]|0)+25|0;a[b>>0]=d[b>>0]|0|4;break}else{eA(b,1);break}}while(0);i=f;return c[(c[e>>2]|0)+8>>2]|0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+256|0;h=e+36|0;j=e+32|0;f=e+28|0;g=e;c[h>>2]=a;c[j>>2]=b;c[f>>2]=d;cg(g,0,e+40|0,210,0);dg(g,c[j>>2]|0,c[f>>2]|0);f=c[66]|0;d=c[67]|0;a=c[h>>2]|0;b=eg(g)|0;Ub[f&255](d,a,b);i=e;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;d=Ob[c[(c[h>>2]|0)+56>>2]&255](c[h>>2]|0,c[g>>2]|0,c[f>>2]|0)|0;i=e;return d|0}function hg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+28|0;g=l+24|0;h=l+20|0;k=l+16|0;j=l;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+52>>2]=c[g>>2];a=c[f>>2]|0;if(!(c[h>>2]|0)){jg(a,c[g>>2]|0);i=l;return}if((c[a+236>>2]|0)==0?(g=Vh(c[f>>2]|0)|0,c[(c[f>>2]|0)+236>>2]=g,(g|0)==0):0){i=l;return}c[j>>2]=e;c[k>>2]=Zw(c[f>>2]|0,c[h>>2]|0,j)|0;Wh(c[(c[f>>2]|0)+236>>2]|0,-1,c[k>>2]|0,1,170);i=l;return}function ig(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f;e=f+8|0;g=d;c[g>>2]=a;c[g+4>>2]=b;b=d;c[e>>2]=_f(c[b>>2]|0,c[b+4>>2]|0)|0;if(!(c[e>>2]|0)){g=c[e>>2]|0;i=f;return g|0}kR(c[e>>2]|0,0,c[d>>2]|0)|0;g=c[e>>2]|0;i=f;return g|0}function jg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e+4|0;f=e;c[d>>2]=a;c[f>>2]=b;c[(c[d>>2]|0)+52>>2]=c[f>>2];if(!(c[(c[d>>2]|0)+236>>2]|0)){i=e;return}PM(c[(c[d>>2]|0)+236>>2]|0);i=e;return}function kg(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;c[(c[(c[d>>2]|0)+4>>2]|0)+4>>2]=c[c[d>>2]>>2];i=b;return}function lg(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!((c[b>>2]|0)!=0&(c[b>>2]|0)!=5)){a=0;a=a&1;i=d;return a|0}a=(c[b>>2]|0)!=6;a=a&1;i=d;return a|0}function mg(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+24|0;j=p+20|0;l=p+16|0;o=p+12|0;k=p+8|0;m=p+4|0;n=p;c[h>>2]=f;c[j>>2]=g;c[l>>2]=c[(c[h>>2]|0)+4>>2];c[o>>2]=0;kg(c[h>>2]|0);do if((d[(c[h>>2]|0)+8>>0]|0)!=2?(c[j>>2]|0)!=0?1:(d[(c[h>>2]|0)+8>>0]|0)!=1:0){if((c[j>>2]|0)!=0?(e[(c[l>>2]|0)+22>>1]&1|0)!=0:0){c[o>>2]=8;break}c[k>>2]=0;if((c[j>>2]|0)!=0?(d[(c[l>>2]|0)+20>>0]|0)==2:0)g=8;else g=7;a:do if((g|0)==7)if(!(e[(c[l>>2]|0)+22>>1]&64)){if((c[j>>2]|0)>1){c[m>>2]=c[(c[l>>2]|0)+72>>2];while(1){if(!(c[m>>2]|0))break a;f=c[m>>2]|0;if((c[c[m>>2]>>2]|0)!=(c[h>>2]|0))break;c[m>>2]=c[f+12>>2]}c[k>>2]=c[c[f>>2]>>2]}}else g=8;while(0);if((g|0)==8)c[k>>2]=c[c[(c[l>>2]|0)+76>>2]>>2];if(c[k>>2]|0){c[o>>2]=262;break}c[o>>2]=mH(c[h>>2]|0,1,1)|0;if(!(c[o>>2]|0)){m=(c[l>>2]|0)+22|0;b[m>>1]=e[m>>1]&-9;if(!(c[(c[l>>2]|0)+44>>2]|0)){m=(c[l>>2]|0)+22|0;b[m>>1]=e[m>>1]|8}while(1){if((c[(c[l>>2]|0)+12>>2]|0)==0?(m=MM(c[l>>2]|0)|0,c[o>>2]=m,0==(m|0)):0)continue;do if((c[o>>2]|0)==0&(c[j>>2]|0)!=0){if(e[(c[l>>2]|0)+22>>1]&1){c[o>>2]=8;break}k=c[c[l>>2]>>2]|0;m=(c[j>>2]|0)>1&1;c[o>>2]=NM(k,m,Sq(c[c[h>>2]>>2]|0)|0)|0;if(!(c[o>>2]|0))c[o>>2]=VL(c[l>>2]|0)|0}while(0);if(c[o>>2]|0)rB(c[l>>2]|0);if((c[o>>2]&255|0)!=5)break;if(d[(c[l>>2]|0)+20>>0]|0)break;if(!(Yq(c[l>>2]|0)|0))break}if(!(c[o>>2]|0)){if((d[(c[h>>2]|0)+8>>0]|0)==0?(m=(c[l>>2]|0)+40|0,c[m>>2]=(c[m>>2]|0)+1,(a[(c[h>>2]|0)+9>>0]|0)!=0):0){a[(c[h>>2]|0)+32+8>>0]=1;c[(c[h>>2]|0)+32+12>>2]=c[(c[l>>2]|0)+72>>2];c[(c[l>>2]|0)+72>>2]=(c[h>>2]|0)+32}a[(c[h>>2]|0)+8>>0]=(c[j>>2]|0)!=0?2:1;if((d[(c[h>>2]|0)+8>>0]|0)>(d[(c[l>>2]|0)+20>>0]|0))a[(c[l>>2]|0)+20>>0]=a[(c[h>>2]|0)+8>>0]|0; +if(c[j>>2]|0){c[n>>2]=c[(c[l>>2]|0)+12>>2];c[(c[l>>2]|0)+76>>2]=c[h>>2];m=(c[l>>2]|0)+22|0;b[m>>1]=e[m>>1]&-33;if((c[j>>2]|0)>1){m=(c[l>>2]|0)+22|0;b[m>>1]=e[m>>1]|32}m=c[(c[l>>2]|0)+44>>2]|0;if((m|0)!=($q((c[(c[n>>2]|0)+56>>2]|0)+28|0)|0)?(c[o>>2]=Dg(c[(c[n>>2]|0)+72>>2]|0)|0,(c[o>>2]|0)==0):0)Xs((c[(c[n>>2]|0)+56>>2]|0)+28|0,c[(c[l>>2]|0)+44>>2]|0)}}}}while(0);if(!((c[o>>2]|0)==0&(c[j>>2]|0)!=0)){o=c[o>>2]|0;i=p;return o|0}c[o>>2]=SL(c[c[l>>2]>>2]|0,c[(c[c[h>>2]>>2]|0)+500>>2]|0)|0;o=c[o>>2]|0;i=p;return o|0}function ng(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=c[(c[e>>2]|0)+4>>2];kg(c[e>>2]|0);if((c[f>>2]|0)==15){d=LM(c[c[h>>2]>>2]|0)|0;c[c[g>>2]>>2]=d+(c[(c[e>>2]|0)+20>>2]|0);i=j;return}else{d=$q((c[(c[(c[h>>2]|0)+12>>2]|0)+56>>2]|0)+(36+(c[f>>2]<<2))|0)|0;c[c[g>>2]>>2]=d;i=j;return}}function og(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return(d[(c[b>>2]|0)+8>>0]|0|0)!=0|0}function pg(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[(c[b>>2]|0)+4>>2]|0)+32>>2]|0}function qg(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[(c[b>>2]|0)+5>>0]|0|0}function rg(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=$E(c[(c[d>>2]|0)+4>>2]|0)|0;i=b;return a|0}function sg(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+48|0;k=t+44|0;l=t+40|0;m=t+36|0;n=t+32|0;u=t+28|0;s=t+24|0;r=t+20|0;p=t+16|0;q=t+12|0;o=t+8|0;h=t+4|0;g=t;c[l>>2]=a;c[m>>2]=b;c[n>>2]=e;c[u>>2]=f;c[s>>2]=0;c[r>>2]=0;c[p>>2]=0;c[q>>2]=c[u>>2]&1;c[o>>2]=0;if((c[m>>2]|0)>>>0<=1&(c[m>>2]|0)==0){c[k>>2]=Lj(49076)|0;u=c[k>>2]|0;i=t;return u|0}do if(c[(c[l>>2]|0)+44>>2]|0){c[s>>2]=c[(c[l>>2]|0)+44>>2];j=23}else{if(((c[o>>2]|0)!=0?(sr(c[l>>2]|0)|0)!=0:0)?(c[s>>2]=xs(c[(c[l>>2]|0)+216>>2]|0,c[m>>2]|0,p)|0,(c[s>>2]|0)!=0):0)break;if((c[o>>2]|0)!=0&(c[p>>2]|0)==0){c[h>>2]=0;e=c[(c[l>>2]|0)+64>>2]|0;u=c[(c[l>>2]|0)+160>>2]|0;u=rR((c[m>>2]|0)-1|0,0,u|0,((u|0)<0)<<31>>31|0)|0;c[s>>2]=$K(e,u,C,c[(c[l>>2]|0)+160>>2]|0,h)|0;if((c[s>>2]|0)==0&(c[h>>2]|0)!=0){if((d[(c[l>>2]|0)+17>>0]|0|0)>1)c[r>>2]=Zr(c[l>>2]|0,c[m>>2]|0)|0;f=c[l>>2]|0;if(!(c[r>>2]|0))c[s>>2]=IM(f,c[m>>2]|0,c[h>>2]|0,r)|0;else{e=c[f+64>>2]|0;u=c[(c[l>>2]|0)+160>>2]|0;u=rR((c[m>>2]|0)-1|0,0,u|0,((u|0)<0)<<31>>31|0)|0;Cs(e,u,C,c[h>>2]|0)|0}if(c[r>>2]|0){c[c[n>>2]>>2]=c[r>>2];c[k>>2]=0;u=c[k>>2]|0;i=t;return u|0}}if(c[s>>2]|0)break}c[g>>2]=cs(c[(c[l>>2]|0)+212>>2]|0,c[m>>2]|0,3)|0;if(!(c[g>>2]|0)){c[s>>2]=JM(c[(c[l>>2]|0)+212>>2]|0,c[m>>2]|0,g)|0;if(c[s>>2]|0)break;if(!(c[g>>2]|0)){c[c[n>>2]>>2]=0;c[r>>2]=0;c[s>>2]=7;break}}j=ds(c[(c[l>>2]|0)+212>>2]|0,c[m>>2]|0,c[g>>2]|0)|0;c[c[n>>2]>>2]=j;c[r>>2]=j;j=23}while(0);do if((j|0)==23){if(c[s>>2]|0){c[r>>2]=0;break}f=c[l>>2]|0;if(!((c[q>>2]|0)!=0?1:(c[(c[r>>2]|0)+16>>2]|0)==0)){u=f+192|0;c[u>>2]=(c[u>>2]|0)+1;c[k>>2]=0;u=c[k>>2]|0;i=t;return u|0}c[(c[r>>2]|0)+16>>2]=f;if((c[m>>2]|0)>>>0<=2147483647?(c[m>>2]|0)!=(((c[381]|0)/(c[(c[l>>2]|0)+160>>2]|0)|0)+1|0):0){if(((d[(c[l>>2]|0)+16>>0]|0|0)==0?!((c[q>>2]|0)!=0?1:(c[(c[l>>2]|0)+28>>2]|0)>>>0<(c[m>>2]|0)>>>0):0)?(c[c[(c[l>>2]|0)+64>>2]>>2]|0)!=0:0){u=(sr(c[l>>2]|0)|0)!=0;if(u&(c[o>>2]|0)==0?(c[s>>2]=xs(c[(c[l>>2]|0)+216>>2]|0,c[m>>2]|0,p)|0,(c[s>>2]|0)!=0):0)break;u=(c[l>>2]|0)+192+4|0;c[u>>2]=(c[u>>2]|0)+1;c[s>>2]=ys(c[r>>2]|0,c[p>>2]|0)|0;if(c[s>>2]|0)break}else{if((c[m>>2]|0)>>>0>(c[(c[l>>2]|0)+164>>2]|0)>>>0){c[s>>2]=13;break}if(c[q>>2]|0){Sj();if((c[m>>2]|0)>>>0<=(c[(c[l>>2]|0)+32>>2]|0)>>>0)gj(c[(c[l>>2]|0)+60>>2]|0,c[m>>2]|0)|0;Ht(c[l>>2]|0,c[m>>2]|0)|0;Tj()}kR(c[(c[r>>2]|0)+4>>2]|0,0,c[(c[l>>2]|0)+160>>2]|0)|0}c[k>>2]=0;u=c[k>>2]|0;i=t;return u|0}c[s>>2]=Lj(49165)|0}while(0);if(c[r>>2]|0)ws(c[r>>2]|0);Bs(c[l>>2]|0);c[c[n>>2]>>2]=0;c[k>>2]=c[s>>2];u=c[k>>2]|0;i=t;return u|0}function tg(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+4>>2]|0}function ug(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=i;i=i+80|0;g=w+68|0;x=w+64|0;h=w+60|0;j=w+56|0;q=w+52|0;p=w+48|0;o=w+44|0;n=w+40|0;l=w+8|0;v=w+36|0;m=w;r=w+32|0;k=w+28|0;t=w+24|0;s=w+20|0;u=w+16|0;c[g>>2]=b;c[x>>2]=d;c[h>>2]=e;c[j>>2]=f;c[q>>2]=Of(c[(c[g>>2]|0)+4>>2]|0)|0;c[p>>2]=pg(c[(c[g>>2]|0)+24>>2]|0)|0;c[o>>2]=pg(c[(c[g>>2]|0)+4>>2]|0)|0;c[n>>2]=(c[p>>2]|0)<(c[o>>2]|0)?c[p>>2]|0:c[o>>2]|0;b=c[p>>2]|0;b=rR(c[x>>2]|0,0,b|0,((b|0)<0)<<31>>31|0)|0;e=l;c[e>>2]=b;c[e+4>>2]=C;c[v>>2]=0;if((c[p>>2]|0)!=(c[o>>2]|0)?(DJ(c[q>>2]|0)|0)!=0:0)c[v>>2]=8;x=l;e=c[p>>2]|0;e=fR(c[x>>2]|0,c[x+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;x=m;c[x>>2]=e;c[x+4>>2]=C;while(1){if(c[v>>2]|0){g=14;break}e=m;d=c[e+4>>2]|0;x=l;b=c[x+4>>2]|0;if(!((d|0)<(b|0)|((d|0)==(b|0)?(c[e>>2]|0)>>>0<(c[x>>2]|0)>>>0:0))){g=14;break}c[r>>2]=0;e=m;x=c[o>>2]|0;x=pR(c[e>>2]|0,c[e+4>>2]|0,x|0,((x|0)<0)<<31>>31|0)|0;c[k>>2]=x+1;if((c[k>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[(c[(c[g>>2]|0)+4>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0)){x=sg(c[q>>2]|0,c[k>>2]|0,r,0)|0;c[v>>2]=x;if((0==(x|0)?(x=Dg(c[r>>2]|0)|0,c[v>>2]=x,0==(x|0)):0)?(x=m,e=c[p>>2]|0,e=qR(c[x>>2]|0,c[x+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0,c[t>>2]=(c[h>>2]|0)+e,c[s>>2]=tg(c[r>>2]|0)|0,e=m,x=c[o>>2]|0,x=qR(c[e>>2]|0,c[e+4>>2]|0,x|0,((x|0)<0)<<31>>31|0)|0,c[u>>2]=(c[s>>2]|0)+x,iR(c[u>>2]|0,c[t>>2]|0,c[n>>2]|0)|0,a[(It(c[r>>2]|0)|0)>>0]=0,x=m,(c[x>>2]|0)==0&(c[x+4>>2]|0)==0&(c[j>>2]|0)==0):0){x=(c[u>>2]|0)+28|0;Xs(x,rg(c[(c[g>>2]|0)+24>>2]|0)|0)}vg(c[r>>2]|0)}e=c[o>>2]|0;x=m;e=gR(c[x>>2]|0,c[x+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;x=m;c[x>>2]=e;c[x+4>>2]=C}if((g|0)==14){i=w;return c[v>>2]|0}return 0}function vg(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}zs(c[b>>2]|0);i=d;return}function wg(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=Lg(Of(c[(c[d>>2]|0)+24>>2]|0)|0)|0;c[(c[d>>2]|0)+44>>2]=c[c[e>>2]>>2];c[c[e>>2]>>2]=c[d>>2];c[(c[d>>2]|0)+40>>2]=1;i=b;return}function xg(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;kg(c[e>>2]|0);c[(c[(c[e>>2]|0)+4>>2]|0)+44>>2]=0;c[b>>2]=VL(c[(c[e>>2]|0)+4>>2]|0)|0;i=d;return c[b>>2]|0}function yg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;m=l+20|0;f=l+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[m>>2]=b;c[f>>2]=d;c[g>>2]=e;c[h>>2]=c[(c[m>>2]|0)+4>>2];kg(c[m>>2]|0);c[j>>2]=c[(c[(c[h>>2]|0)+12>>2]|0)+56>>2];c[k>>2]=Dg(c[(c[(c[h>>2]|0)+12>>2]|0)+72>>2]|0)|0;if(c[k>>2]|0){m=c[k>>2]|0;i=l;return m|0}Xs((c[j>>2]|0)+(36+(c[f>>2]<<2))|0,c[g>>2]|0);if((c[f>>2]|0)!=7){m=c[k>>2]|0;i=l;return m|0}a[(c[h>>2]|0)+18>>0]=c[g>>2];m=c[k>>2]|0;i=l;return m|0}function zg(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;Nf(c[b>>2]|0);c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+20>>2]|0))break;c[e>>2]=(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4);if(c[(c[e>>2]|0)+12>>2]|0)tj(c[(c[e>>2]|0)+12>>2]|0);c[d>>2]=(c[d>>2]|0)+1}e=(c[b>>2]|0)+24|0;c[e>>2]=c[e>>2]&-3;ju(c[b>>2]|0);mB(c[b>>2]|0);i=f;return}function Ag(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+16|0;j=n+12|0;l=n+8|0;m=n+4|0;k=n;c[h>>2]=f;c[j>>2]=g;c[l>>2]=c[(c[h>>2]|0)+4>>2];f=(c[l>>2]|0)+22|0;b[f>>1]=(e[f>>1]|0)&-17;if((c[j>>2]|0)==1){f=(c[l>>2]|0)+22|0;b[f>>1]=e[f>>1]|0|16}c[m>>2]=mg(c[h>>2]|0,0)|0;do if(!(c[m>>2]|0)){c[k>>2]=c[(c[(c[l>>2]|0)+12>>2]|0)+56>>2];if((d[(c[k>>2]|0)+18>>0]|0|0)==(c[j>>2]&255|0)?(d[(c[k>>2]|0)+19>>0]|0|0)==(c[j>>2]&255|0):0)break;c[m>>2]=mg(c[h>>2]|0,2)|0;if((c[m>>2]|0)==0?(c[m>>2]=Dg(c[(c[(c[l>>2]|0)+12>>2]|0)+72>>2]|0)|0,(c[m>>2]|0)==0):0){a[(c[k>>2]|0)+18>>0]=c[j>>2];a[(c[k>>2]|0)+19>>0]=c[j>>2]}}while(0);f=(c[l>>2]|0)+22|0;b[f>>1]=(e[f>>1]|0)&-17;i=n;return c[m>>2]|0}function Bg(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+64>>2]|0}function Cg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;c[c[e>>2]>>2]=c[(c[f>>2]|0)+28>>2];i=d;return}function Dg(a){a=a|0;var b=0,d=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;b=g+4|0;f=g;c[b>>2]=a;c[f>>2]=c[(c[b>>2]|0)+16>>2];if(c[(c[f>>2]|0)+44>>2]|0){c[d>>2]=c[(c[f>>2]|0)+44>>2];f=c[d>>2]|0;i=g;return f|0}if(((e[(c[b>>2]|0)+24>>1]|0)&4|0)!=0?(c[(c[f>>2]|0)+28>>2]|0)>>>0>=(c[(c[b>>2]|0)+20>>2]|0)>>>0:0)if(c[(c[f>>2]|0)+104>>2]|0){c[d>>2]=lt(c[b>>2]|0)|0;f=c[d>>2]|0;i=g;return f|0}else{c[d>>2]=0;f=c[d>>2]|0;i=g;return f|0}b=c[b>>2]|0;if((c[(c[f>>2]|0)+156>>2]|0)>>>0>(c[(c[f>>2]|0)+160>>2]|0)>>>0){c[d>>2]=DM(b)|0;f=c[d>>2]|0;i=g;return f|0}else{c[d>>2]=EM(b)|0;f=c[d>>2]|0;i=g;return f|0}return 0}function Eg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+28|0;h=p+24|0;j=p+20|0;k=p+16|0;o=p+12|0;m=p+8|0;n=p+4|0;l=p;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[o>>2]=0;f=c[h>>2]|0;if(c[(c[h>>2]|0)+44>>2]|0){c[g>>2]=c[f+44>>2];o=c[g>>2]|0;i=p;return o|0}if((d[f+17>>0]|0)<3){c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}f=c[h>>2]|0;do if(!(a[(c[h>>2]|0)+16>>0]|0)){e=(sr(f)|0)!=0;f=c[h>>2]|0;if(e){c[m>>2]=qs(c[f+212>>2]|0)|0;c[n>>2]=0;if(!(c[m>>2]|0)){c[o>>2]=sg(c[h>>2]|0,1,n,0)|0;c[m>>2]=c[n>>2];c[(c[m>>2]|0)+12>>2]=0}if(c[m>>2]|0)c[o>>2]=mt(c[h>>2]|0,c[m>>2]|0,c[(c[h>>2]|0)+28>>2]|0,1)|0;vg(c[n>>2]|0);if(c[o>>2]|0)break;rr(c[(c[h>>2]|0)+212>>2]|0);break}c[o>>2]=BM(f,0)|0;if((((c[o>>2]|0)==0?(c[o>>2]=CM(c[h>>2]|0,c[j>>2]|0)|0,(c[o>>2]|0)==0):0)?(c[o>>2]=nt(c[h>>2]|0,0)|0,(c[o>>2]|0)==0):0)?(n=c[h>>2]|0,c[o>>2]=ot(n,qs(c[(c[h>>2]|0)+212>>2]|0)|0)|0,(c[o>>2]|0)==0):0){rr(c[(c[h>>2]|0)+212>>2]|0);if((c[(c[h>>2]|0)+28>>2]|0)>>>0>(c[(c[h>>2]|0)+36>>2]|0)>>>0){c[l>>2]=(c[(c[h>>2]|0)+28>>2]|0)-((c[(c[h>>2]|0)+28>>2]|0)==(((c[381]|0)/(c[(c[h>>2]|0)+160>>2]|0)|0)+1|0)&1);c[o>>2]=ur(c[h>>2]|0,c[l>>2]|0)|0;if((c[o>>2]|0)!=0|(c[k>>2]|0)!=0)break}else if(c[k>>2]|0)break;c[o>>2]=Hg(c[h>>2]|0,c[j>>2]|0)|0}}else _i(c[f+96>>2]|0);while(0);if((c[o>>2]|0)==0?(sr(c[h>>2]|0)|0)==0:0)a[(c[h>>2]|0)+17>>0]=5;c[g>>2]=c[o>>2];o=c[g>>2]|0;i=p;return o|0}function Fg(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,j=0,k=0,l=0;g=i;i=i+32|0;k=g+16|0;j=g+12|0;h=g+8|0;l=g;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;b=l;c[b>>2]=e;c[b+4>>2]=f;b=l;b=Zb[c[(c[c[k>>2]>>2]|0)+12>>2]&255](c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;i=g;return b|0}function Gg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;e=j+20|0;f=j+8|0;g=j;h=j+16|0;c[e>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[h>>2]=Si(c[e>>2]|0,g)|0;if(c[h>>2]|0){h=c[h>>2]|0;i=j;return h|0}b=c[g+4>>2]|0;a=f;d=c[a+4>>2]|0;if(!((b|0)>(d|0)|((b|0)==(d|0)?(c[g>>2]|0)>>>0>(c[a>>2]|0)>>>0:0))){h=c[h>>2]|0;i=j;return h|0}a=f;c[h>>2]=nr(c[e>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;h=c[h>>2]|0;i=j;return h|0}function Hg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[f>>2]=b;c[g>>2]=e;c[j>>2]=0;if(c[c[(c[f>>2]|0)+64>>2]>>2]|0){c[h>>2]=c[g>>2];e=vi(c[(c[f>>2]|0)+64>>2]|0,21,c[h>>2]|0)|0;c[j>>2]=e;c[j>>2]=(c[j>>2]|0)==12?0:e}if(c[j>>2]|0){e=c[j>>2]|0;i=k;return e|0}if(a[(c[f>>2]|0)+7>>0]|0){e=c[j>>2]|0;i=k;return e|0}c[j>>2]=or(c[(c[f>>2]|0)+64>>2]|0,d[(c[f>>2]|0)+12>>0]|0)|0;e=c[j>>2]|0;i=k;return e|0}function Ig(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;c[(c[e>>2]|0)+28>>2]=c[f>>2];i=d;return}function Jg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;k=l+4|0;j=l;c[g>>2]=b;c[h>>2]=e;if(!(d[(c[g>>2]|0)+8>>0]|0)){c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}kg(c[g>>2]|0);do if((d[(c[g>>2]|0)+8>>0]|0|0)==2){c[j>>2]=c[(c[g>>2]|0)+4>>2];c[k>>2]=AM(c[c[j>>2]>>2]|0)|0;if(!((c[k>>2]|0)!=0&(c[h>>2]|0)==0)){k=(c[g>>2]|0)+20|0;c[k>>2]=(c[k>>2]|0)+-1;a[(c[j>>2]|0)+20>>0]=1;vM(c[j>>2]|0);break}c[f>>2]=c[k>>2];k=c[f>>2]|0;i=l;return k|0}while(0);wM(c[g>>2]|0);c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}function Kg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;k=l+4|0;j=l;c[g>>2]=b;c[h>>2]=e;c[k>>2]=0;if((d[(c[g>>2]|0)+8>>0]|0)==2){c[j>>2]=c[(c[g>>2]|0)+4>>2];kg(c[g>>2]|0);if((a[(c[j>>2]|0)+17>>0]|0)!=0?(c[k>>2]=zM(c[j>>2]|0)|0,(c[k>>2]|0)!=0):0){c[f>>2]=c[k>>2];e=c[f>>2]|0;i=l;return e|0}if(a[(c[j>>2]|0)+19>>0]|0)Ig(c[c[j>>2]>>2]|0,c[(c[j>>2]|0)+44>>2]|0);c[k>>2]=Eg(c[c[j>>2]>>2]|0,c[h>>2]|0,0)|0}c[f>>2]=c[k>>2];e=c[f>>2]|0;i=l;return e|0}function Lg(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[b>>2]|0)+96|0}function Mg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+32|0;h=q+28|0;j=q+24|0;n=q+20|0;l=q+16|0;m=q+12|0;o=q+8|0;p=q+4|0;k=q;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;c[l>>2]=c[(c[g>>2]|0)+4>>2];kg(c[g>>2]|0);if(!(c[h>>2]|0)){f=nH(c[l>>2]|0,0,0)|0;c[h>>2]=f;c[n>>2]=f;if(c[n>>2]|0)c[j>>2]=0}else c[n>>2]=0;if((c[h>>2]|0)!=0?(c[o>>2]=oI(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0)|0,(c[o>>2]|0)!=0):0)c[n>>2]=c[o>>2];if((d[(c[g>>2]|0)+8>>0]|0|0)!=2){f=c[g>>2]|0;wM(f);f=c[n>>2]|0;i=q;return f|0}c[p>>2]=jr(c[c[l>>2]>>2]|0)|0;if(c[p>>2]|0)c[n>>2]=c[p>>2];if(!(nF(c[l>>2]|0,1,m,0)|0)){c[k>>2]=$q((c[(c[m>>2]|0)+56>>2]|0)+28|0)|0;if(!(c[k>>2]|0))Cg(c[c[l>>2]>>2]|0,k);c[(c[l>>2]|0)+44>>2]=c[k>>2];qB(c[m>>2]|0)}a[(c[l>>2]|0)+20>>0]=1;vM(c[l>>2]|0);f=c[g>>2]|0;wM(f);f=c[n>>2]|0;i=q;return f|0}function Ng(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;d=n+32|0;e=n+28|0;f=n+24|0;j=n+20|0;m=n+16|0;k=n+12|0;g=n+8|0;h=n+4|0;l=n;c[d>>2]=b;if((c[(c[d>>2]|0)+76>>2]|0)!=1691352191){i=n;return}if(eu(c[d>>2]|0)|0){i=n;return}qI(c[d>>2]|0,0);rI(c[d>>2]|0);c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[d>>2]|0)+20>>2]|0))break;c[j>>2]=(c[(c[d>>2]|0)+16>>2]|0)+(c[f>>2]<<4);if((c[(c[j>>2]|0)+4>>2]|0)!=0?(lB(c[(c[j>>2]|0)+4>>2]|0)|0,c[(c[j>>2]|0)+4>>2]=0,(c[f>>2]|0)!=1):0)c[(c[j>>2]|0)+12>>2]=0;c[f>>2]=(c[f>>2]|0)+1}if(c[(c[(c[d>>2]|0)+16>>2]|0)+16+12>>2]|0)tj(c[(c[(c[d>>2]|0)+16>>2]|0)+16+12>>2]|0);ju(c[d>>2]|0);mB(c[d>>2]|0);c[f>>2]=0;while(1){if((c[f>>2]|0)>=23)break;c[g>>2]=c[(c[d>>2]|0)+340+(c[f>>2]<<2)>>2];while(1){if(!(c[g>>2]|0))break;c[k>>2]=c[(c[g>>2]|0)+24>>2];while(1){if(!(c[g>>2]|0))break;bu(c[d>>2]|0,c[g>>2]|0);c[m>>2]=c[(c[g>>2]|0)+8>>2];Sf(c[d>>2]|0,c[g>>2]|0);c[g>>2]=c[m>>2]}c[g>>2]=c[k>>2]}c[f>>2]=(c[f>>2]|0)+1}c[e>>2]=c[(c[d>>2]|0)+432+8>>2];while(1){if(!(c[e>>2]|0))break;c[h>>2]=c[(c[e>>2]|0)+8>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=3)break;if(c[(c[h>>2]|0)+((c[f>>2]|0)*20|0)+16>>2]|0)Qb[c[(c[h>>2]|0)+((c[f>>2]|0)*20|0)+16>>2]&255](c[(c[h>>2]|0)+((c[f>>2]|0)*20|0)+8>>2]|0);c[f>>2]=(c[f>>2]|0)+1}Sf(c[d>>2]|0,c[h>>2]|0);c[e>>2]=c[c[e>>2]>>2]}vj((c[d>>2]|0)+432|0);c[e>>2]=c[(c[d>>2]|0)+312+8>>2];while(1){if(!(c[e>>2]|0))break;c[l>>2]=c[(c[e>>2]|0)+8>>2];if(c[(c[l>>2]|0)+12>>2]|0)Qb[c[(c[l>>2]|0)+12>>2]&255](c[(c[l>>2]|0)+8>>2]|0);BH(c[d>>2]|0,c[l>>2]|0);Sf(c[d>>2]|0,c[l>>2]|0);c[e>>2]=c[c[e>>2]>>2]}vj((c[d>>2]|0)+312|0);jg(c[d>>2]|0,0);$g(c[(c[d>>2]|0)+236>>2]|0);c[(c[d>>2]|0)+76>>2]=-1254786768;Sf(c[d>>2]|0,c[(c[(c[d>>2]|0)+16>>2]|0)+16+12>>2]|0);c[(c[d>>2]|0)+76>>2]=-1623446221;if(a[(c[d>>2]|0)+248+6>>0]|0)Kd(c[(c[d>>2]|0)+248+32>>2]|0);Kd(c[d>>2]|0);i=n;return}function Og(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;b=d+8|0;e=d+4|0;c[e>>2]=a;if(!(c[c[e>>2]>>2]|0)){Rd(21,45447,d);c[b>>2]=1;e=c[b>>2]|0;i=d;return e|0}else{c[b>>2]=0;e=c[b>>2]|0;i=d;return e|0}return 0}function Pg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+16|0;f=d+12|0;e=d+8|0;h=d;c[f>>2]=a;c[e>>2]=b;IH(c[c[f>>2]>>2]|0,h)|0;g=c[(c[f>>2]|0)+184>>2]|0;f=c[(c[f>>2]|0)+188>>2]|0;a=c[(c[e>>2]|0)+168>>2]|0;b=(c[e>>2]|0)+128|0;b=fR(c[h>>2]|0,c[h+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;b=rR(b|0,C|0,1e6,0)|0;_b[g&255](f,a,b,C);b=(c[e>>2]|0)+128|0;c[b>>2]=0;c[b+4>>2]=0;i=d;return}function Qg(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=0;if(!((c[(c[b>>2]|0)+40>>2]|0)!=-1108210269?(c[(c[b>>2]|0)+40>>2]|0)!=1369188723:0))c[d>>2]=Sg(c[b>>2]|0)|0;Tu(c[b>>2]|0);i=e;return c[d>>2]|0}function Rg(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=b;if((c[g>>2]|0)==3082?1:(d[(c[f>>2]|0)+65>>0]|0|0)!=0){c[e>>2]=uM(c[f>>2]|0)|0;b=c[e>>2]|0;i=h;return b|0}else{c[e>>2]=c[g>>2]&c[(c[f>>2]|0)+56>>2];b=c[e>>2]|0;i=h;return b|0}return 0}function Sg(a){a=a|0;var d=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;g=h;d=h+8|0;f=h+4|0;c[d>>2]=a;c[f>>2]=c[c[d>>2]>>2];TH(c[d>>2]|0)|0;a=c[d>>2]|0;if((c[(c[d>>2]|0)+76>>2]|0)>=0){MH(a)|0;Sf(c[f>>2]|0,c[(c[d>>2]|0)+44>>2]|0);c[(c[d>>2]|0)+44>>2]=0;if((e[(c[d>>2]|0)+88>>1]|0)>>>4&1){g=(c[d>>2]|0)+88|0;b[g>>1]=b[g>>1]&-9|8}}else if((c[a+80>>2]|0)!=0?((e[(c[d>>2]|0)+88>>1]|0)>>>3&1|0)!=0:0){k=c[f>>2]|0;j=c[(c[d>>2]|0)+80>>2]|0;a=(c[(c[d>>2]|0)+44>>2]|0)!=0?19255:0;c[g>>2]=c[(c[d>>2]|0)+44>>2];hg(k,j,a,g);Sf(c[f>>2]|0,c[(c[d>>2]|0)+44>>2]|0);c[(c[d>>2]|0)+44>>2]=0}tM(c[d>>2]|0);k=(c[d>>2]|0)+136|0;c[k>>2]=0;c[k+4>>2]=0;c[(c[d>>2]|0)+40>>2]=649915045;i=h;return c[(c[d>>2]|0)+80>>2]&c[(c[f>>2]|0)+56>>2]|0}function Tg(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;c[(c[e>>2]|0)+40>>2]=-1108210269;c[(c[e>>2]|0)+76>>2]=-1;c[(c[e>>2]|0)+80>>2]=0;a[(c[e>>2]|0)+86>>0]=2;c[(c[e>>2]|0)+92>>2]=0;c[(c[e>>2]|0)+72>>2]=1;a[(c[e>>2]|0)+87>>0]=-1;c[(c[e>>2]|0)+104>>2]=0;b=(c[e>>2]|0)+144|0;c[b>>2]=0;c[b+4>>2]=0;i=d;return}function Ug(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(((e[(c[b>>2]|0)+8>>1]|0)&9312|0)==0?(c[(c[b>>2]|0)+24>>2]|0)==0:0){i=d;return}sM(c[b>>2]|0);i=d;return}function Vg(a){a=a|0;var d=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+8|0;f=h+4|0;g=h;c[f>>2]=a;do if((e[(c[f>>2]|0)+8>>1]|0)&16384){a=(c[(c[f>>2]|0)+12>>2]|0)+(c[c[f>>2]>>2]|0)|0;c[g>>2]=a;c[g>>2]=(c[g>>2]|0)<=0?1:a;if(!(ux(c[f>>2]|0,c[g>>2]|0,1)|0)){kR((c[(c[f>>2]|0)+16>>2]|0)+(c[(c[f>>2]|0)+12>>2]|0)|0,0,c[c[f>>2]>>2]|0)|0;a=(c[f>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[c[f>>2]>>2]|0);a=(c[f>>2]|0)+8|0;b[a>>1]=(e[a>>1]|0)&-16897;break}c[d>>2]=7;a=c[d>>2]|0;i=h;return a|0}while(0);c[d>>2]=0;a=c[d>>2]|0;i=h;return a|0}function Wg(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k+4|0;h=k;j=k+8|0;c[h>>2]=b;a[j>>0]=f;do if(c[h>>2]|0){if(((e[(c[h>>2]|0)+8>>1]|0)&514|0)==514?(d[(c[h>>2]|0)+10>>0]|0|0)==(d[j>>0]|0|0):0){c[g>>2]=c[(c[h>>2]|0)+16>>2];break}if((e[(c[h>>2]|0)+8>>1]|0)&1){c[g>>2]=0;break}else{c[g>>2]=rM(c[h>>2]|0,a[j>>0]|0)|0;break}}else c[g>>2]=0;while(0);i=k;return c[g>>2]|0}function Xg(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;j=l+8|0;g=l+4|0;h=l+12|0;k=l;c[g>>2]=b;a[h>>0]=f;c[k>>2]=c[g>>2];if(((e[(c[k>>2]|0)+8>>1]|0)&2|0)!=0?(d[(c[g>>2]|0)+10>>0]|0|0)==(d[h>>0]|0|0):0){c[j>>2]=c[(c[k>>2]|0)+12>>2];k=c[j>>2]|0;i=l;return k|0}b=e[(c[k>>2]|0)+8>>1]|0;if((e[(c[k>>2]|0)+8>>1]|0)&16){f=c[(c[k>>2]|0)+12>>2]|0;if(b&16384){c[j>>2]=f+(c[c[k>>2]>>2]|0);k=c[j>>2]|0;i=l;return k|0}else{c[j>>2]=f;k=c[j>>2]|0;i=l;return k|0}}else if(b&1){c[j>>2]=0;k=c[j>>2]|0;i=l;return k|0}else{c[j>>2]=qM(c[g>>2]|0,a[h>>0]|0)|0;k=c[j>>2]|0;i=l;return k|0}return 0}function Yg(b){b=b|0;var d=0,f=0,g=0,j=0,k=0,l=0.0;k=i;i=i+32|0;f=k+8|0;g=k+16|0;j=k;c[g>>2]=b;d=c[g>>2]|0;if((e[(c[g>>2]|0)+8>>1]|0)&8){h[f>>3]=+h[d>>3];l=+h[f>>3];i=k;return+l}b=c[g>>2]|0;if((e[d+8>>1]|0)&4){j=b;h[f>>3]=+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0);l=+h[f>>3];i=k;return+l}if((e[b+8>>1]|0)&18){h[j>>3]=0.0;Ky(c[(c[g>>2]|0)+16>>2]|0,j,c[(c[g>>2]|0)+12>>2]|0,a[(c[g>>2]|0)+10>>0]|0)|0;h[f>>3]=+h[j>>3];l=+h[f>>3];i=k;return+l}else{h[f>>3]=0.0;l=+h[f>>3];i=k;return+l}return 0.0}function Zg(b){b=b|0;var d=0,f=0,g=0,j=0,k=0;k=i;i=i+32|0;d=k+8|0;f=k+20|0;g=k+16|0;j=k;c[f>>2]=b;c[g>>2]=e[(c[f>>2]|0)+8>>1];do if(!(c[g>>2]&4)){if(c[g>>2]&8){b=qx(+h[c[f>>2]>>3])|0;j=d;c[j>>2]=b;c[j+4>>2]=C;break}if(c[g>>2]&18){g=j;c[g>>2]=0;c[g+4>>2]=0;Hi(c[(c[f>>2]|0)+16>>2]|0,j,c[(c[f>>2]|0)+12>>2]|0,a[(c[f>>2]|0)+10>>0]|0)|0;g=j;b=c[g+4>>2]|0;j=d;c[j>>2]=c[g>>2];c[j+4>>2]=b;break}else{j=d;c[j>>2]=0;c[j+4>>2]=0;break}}else{g=c[f>>2]|0;b=c[g+4>>2]|0;j=d;c[j>>2]=c[g>>2];c[j+4>>2]=b}while(0);j=d;C=c[j+4>>2]|0;i=k;return c[j>>2]|0}function _g(d){d=d|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[g>>2]=d;if((e[(c[g>>2]|0)+8>>1]|0)&16384)Vg(c[g>>2]|0)|0;c[h>>2]=e[(c[g>>2]|0)+8>>1];do if(c[h>>2]&18){if((c[(c[g>>2]|0)+24>>2]|0)!=0?(c[(c[g>>2]|0)+16>>2]|0)==(c[(c[g>>2]|0)+20>>2]|0):0)break;if(!(ux(c[g>>2]|0,(c[(c[g>>2]|0)+12>>2]|0)+2|0,1)|0)){a[(c[(c[g>>2]|0)+16>>2]|0)+(c[(c[g>>2]|0)+12>>2]|0)>>0]=0;a[(c[(c[g>>2]|0)+16>>2]|0)+((c[(c[g>>2]|0)+12>>2]|0)+1)>>0]=0;d=(c[g>>2]|0)+8|0;b[d>>1]=e[d>>1]|0|512;break}c[f>>2]=7;d=c[f>>2]|0;i=j;return d|0}while(0);d=(c[g>>2]|0)+8|0;b[d>>1]=(e[d>>1]|0)&-4097;c[f>>2]=0;d=c[f>>2]|0;i=j;return d|0}function $g(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}Ug(c[b>>2]|0);Sf(c[(c[b>>2]|0)+32>>2]|0,c[b>>2]|0);i=d;return}function ah(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;j=i;i=i+32|0;h=j+12|0;n=j+8|0;m=j+4|0;l=j+16|0;k=j;c[h>>2]=b;c[n>>2]=d;c[m>>2]=e;a[l>>0]=f;c[k>>2]=g;if((dh(c[c[h>>2]>>2]|0,c[n>>2]|0,c[m>>2]|0,a[l>>0]|0,c[k>>2]|0)|0)!=18){i=j;return}se(c[h>>2]|0);i=j;return}function bh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(!((c[f>>2]|0)==0|(c[f>>2]|0)==(-1|0)))Qb[c[f>>2]&255](c[e>>2]|0);if(!(c[g>>2]|0)){i=h;return 18}se(c[g>>2]|0);i=h;return 18}function ch(a,d){a=a|0;d=+d;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+8|0;f=g;c[e>>2]=a;h[f>>3]=d;fh(c[e>>2]|0);if(HF(+h[f>>3])|0){i=g;return}h[c[e>>2]>>3]=+h[f>>3];b[(c[e>>2]|0)+8>>1]=8;i=g;return}function dh(f,g,h,j,k){f=f|0;g=g|0;h=h|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;u=i;i=i+48|0;n=u+28|0;o=u+24|0;l=u+20|0;v=u+16|0;p=u+34|0;q=u+12|0;t=u+8|0;s=u+4|0;r=u+32|0;m=u;c[o>>2]=f;c[l>>2]=g;c[v>>2]=h;a[p>>0]=j;c[q>>2]=k;c[t>>2]=c[v>>2];b[r>>1]=0;j=c[o>>2]|0;if(!(c[l>>2]|0)){fh(j);c[n>>2]=0;v=c[n>>2]|0;i=u;return v|0}if(c[j+32>>2]|0)c[s>>2]=c[(c[(c[o>>2]|0)+32>>2]|0)+88>>2];else c[s>>2]=1e9;b[r>>1]=(d[p>>0]|0)==0?16:2;if((c[t>>2]|0)<0){a:do if((d[p>>0]|0)==1){c[t>>2]=If(c[l>>2]|0)|0;if((c[t>>2]|0)>(c[s>>2]|0))c[t>>2]=(c[s>>2]|0)+1}else{c[t>>2]=0;while(1){if((c[t>>2]|0)>(c[s>>2]|0))break a;if(!(a[(c[l>>2]|0)+(c[t>>2]|0)>>0]|a[(c[l>>2]|0)+((c[t>>2]|0)+1)>>0]))break a;c[t>>2]=(c[t>>2]|0)+2}}while(0);b[r>>1]=e[r>>1]|512}do if((c[q>>2]|0)!=(-1|0)){v=(c[q>>2]|0)==170;Ug(c[o>>2]|0);j=c[l>>2]|0;c[(c[o>>2]|0)+16>>2]=j;if(v){c[(c[o>>2]|0)+20>>2]=j;v=$t(c[(c[o>>2]|0)+32>>2]|0,c[(c[o>>2]|0)+20>>2]|0)|0;c[(c[o>>2]|0)+24>>2]=v;break}else{c[(c[o>>2]|0)+36>>2]=c[q>>2];b[r>>1]=e[r>>1]|((c[q>>2]|0)==0?2048:1024);break}}else{c[m>>2]=c[t>>2];if(e[r>>1]&512)c[m>>2]=(c[m>>2]|0)+((d[p>>0]|0)==1?1:2);if((c[t>>2]|0)>(c[s>>2]|0)){c[n>>2]=18;v=c[n>>2]|0;i=u;return v|0}if(!(tx(c[o>>2]|0,(c[m>>2]|0)>32?c[m>>2]|0:32)|0)){iR(c[(c[o>>2]|0)+16>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;break}c[n>>2]=7;v=c[n>>2]|0;i=u;return v|0}while(0);c[(c[o>>2]|0)+12>>2]=c[t>>2];b[(c[o>>2]|0)+8>>1]=b[r>>1]|0;a[(c[o>>2]|0)+10>>0]=(d[p>>0]|0)==0?1:d[p>>0]|0;if((d[(c[o>>2]|0)+10>>0]|0)!=1?(pM(c[o>>2]|0)|0)!=0:0){c[n>>2]=7;v=c[n>>2]|0;i=u;return v|0}if((c[t>>2]|0)>(c[s>>2]|0)){c[n>>2]=18;v=c[n>>2]|0;i=u;return v|0}else{c[n>>2]=0;v=c[n>>2]|0;i=u;return v|0}return 0}function eh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;g=j+8|0;h=j;c[g>>2]=a;a=h;c[a>>2]=d;c[a+4>>2]=f;if((e[(c[g>>2]|0)+8>>1]|0)&9312){a=h;oM(c[g>>2]|0,c[a>>2]|0,c[a+4>>2]|0);i=j;return}else{f=h;h=c[f+4>>2]|0;a=c[g>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=h;b[(c[g>>2]|0)+8>>1]=4;i=j;return}}function fh(a){a=a|0;var d=0,f=0;d=i;i=i+16|0;f=d;c[f>>2]=a;a=c[f>>2]|0;if((e[(c[f>>2]|0)+8>>1]|0)&9312){DF(a);i=d;return}else{b[a+8>>1]=1;i=d;return}}function gh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=a;c[g>>2]=d;c[h>>2]=0;if((e[(c[f>>2]|0)+8>>1]|0)&9312)DF(c[f>>2]|0);a=c[f>>2]|0;d=c[g>>2]|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];a=(c[f>>2]|0)+8|0;b[a>>1]=(e[a>>1]|0)&-1025;if(!((e[(c[f>>2]|0)+8>>1]|0)&18)){h=c[h>>2]|0;i=j;return h|0}if((e[(c[g>>2]|0)+8>>1]|0)&2048){h=c[h>>2]|0;i=j;return h|0}a=(c[f>>2]|0)+8|0;b[a>>1]=e[a>>1]|0|4096;c[h>>2]=_g(c[f>>2]|0)|0;h=c[h>>2]|0;i=j;return h|0}function hh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=d;c[g>>2]=e;Ug(c[f>>2]|0);b[(c[f>>2]|0)+8>>1]=16400;c[(c[f>>2]|0)+12>>2]=0;if((c[g>>2]|0)<0)c[g>>2]=0;c[c[f>>2]>>2]=c[g>>2];a[(c[f>>2]|0)+10>>0]=1;c[(c[f>>2]|0)+16>>2]=0;i=h;return}function ih(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=44821;if((c[b>>2]|0)!=516){c[b>>2]=c[b>>2]&255;if((c[b>>2]|0)>=0&(c[b>>2]|0)<27?(c[7072+(c[b>>2]<<2)>>2]|0)!=0:0)c[d>>2]=c[7072+(c[b>>2]<<2)>>2]}else c[d>>2]=44835;i=e;return c[d>>2]|0}function jh(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;if(d[(c[e>>2]|0)+65>>0]|0){i=f;return}if(d[(c[e>>2]|0)+66>>0]|0){i=f;return}a[(c[e>>2]|0)+65>>0]=1;if((c[(c[e>>2]|0)+160>>2]|0)>0)c[(c[e>>2]|0)+240>>2]=1;b=(c[e>>2]|0)+248|0;c[b>>2]=(c[b>>2]|0)+1;i=f;return}function kh(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+8|0;d=e+4|0;c[d>>2]=a;if(!(c[d>>2]|0)){Rd(21,44781,e);c[b>>2]=1;a=c[b>>2]|0;i=e;return a|0}else{c[b>>2]=Og(c[d>>2]|0)|0;a=c[b>>2]|0;i=e;return a|0}return 0}function lh(d){d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=d;if((c[(c[g>>2]|0)+40>>2]|0)!=-1108210269)Zd(c[g>>2]|0)|0;c[h>>2]=c[c[g>>2]>>2];d=c[g>>2]|0;if(a[(c[h>>2]|0)+65>>0]|0){c[d+80>>2]=7;c[f>>2]=7;j=c[f>>2]|0;i=k;return j|0}if((c[d+76>>2]|0)<=0?((e[(c[g>>2]|0)+88>>1]|0)>>>3&1|0)!=0:0){c[(c[g>>2]|0)+80>>2]=17;c[j>>2]=1}else{if((c[(c[g>>2]|0)+76>>2]|0)<0){if(!(c[(c[h>>2]|0)+148>>2]|0))c[(c[h>>2]|0)+240>>2]=0;if(((c[(c[h>>2]|0)+184>>2]|0)!=0?(a[(c[h>>2]|0)+140+5>>0]|0)==0:0)?(c[(c[g>>2]|0)+168>>2]|0)!=0:0)IH(c[c[h>>2]>>2]|0,(c[g>>2]|0)+128|0)|0;d=(c[h>>2]|0)+148|0;c[d>>2]=(c[d>>2]|0)+1;if(!((e[(c[g>>2]|0)+88>>1]|0)>>>6&1)){d=(c[h>>2]|0)+156|0;c[d>>2]=(c[d>>2]|0)+1}if((e[(c[g>>2]|0)+88>>1]|0)>>>7&1){d=(c[h>>2]|0)+152|0;c[d>>2]=(c[d>>2]|0)+1}c[(c[g>>2]|0)+76>>2]=0}if(b[(c[g>>2]|0)+88>>1]&3)c[j>>2]=JH(c[g>>2]|0)|0;else{d=(c[h>>2]|0)+160|0;c[d>>2]=(c[d>>2]|0)+1;c[j>>2]=KH(c[g>>2]|0)|0;d=(c[h>>2]|0)+160|0;c[d>>2]=(c[d>>2]|0)+-1}if((c[j>>2]|0)!=100?(d=(c[g>>2]|0)+128|0,l=c[d+4>>2]|0,(l|0)>0|(l|0)==0&(c[d>>2]|0)>>>0>0):0)Pg(c[h>>2]|0,c[g>>2]|0);if((c[j>>2]|0)==101?(l=LH(c[h>>2]|0)|0,c[(c[g>>2]|0)+80>>2]=l,(c[(c[g>>2]|0)+80>>2]|0)!=0):0)c[j>>2]=1;c[(c[h>>2]|0)+52>>2]=c[j>>2];if(7==(Rg(c[c[g>>2]>>2]|0,c[(c[g>>2]|0)+80>>2]|0)|0))c[(c[g>>2]|0)+80>>2]=7}if(((c[j>>2]|0)!=100?((e[(c[g>>2]|0)+88>>1]|0)>>>8&1|0)!=0:0)&(c[j>>2]|0)!=101)c[j>>2]=MH(c[g>>2]|0)|0;c[f>>2]=c[j>>2]&c[(c[h>>2]|0)+56>>2];l=c[f>>2]|0;i=k;return l|0}function mh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;b=h+20|0;d=h+16|0;g=h+12|0;f=h+8|0;j=h+4|0;e=h;c[d>>2]=a;c[j>>2]=Xd(c[d>>2]|0)|0;c[e>>2]=wA(c[d>>2]|0)|0;c[g>>2]=Rh(c[e>>2]|0,c[j>>2]|0,-1,0,c[d>>2]|0,f,0)|0;if(!(c[g>>2]|0)){GH(c[f>>2]|0,c[d>>2]|0);wh(c[f>>2]|0,c[d>>2]|0)|0;HH(c[f>>2]|0);Qg(c[f>>2]|0)|0;c[b>>2]=0;j=c[b>>2]|0;i=h;return j|0}if((c[g>>2]|0)==7)jh(c[e>>2]|0);c[b>>2]=c[g>>2];j=c[b>>2]|0;i=h;return j|0}function nh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;f=j+8|0;h=j+4|0;g=j;c[e>>2]=a;c[f>>2]=b;if(!(c[f>>2]|0)){c[d>>2]=0;h=c[d>>2]|0;i=j;return h|0}c[g>>2]=(If(c[f>>2]|0)|0)+1;b=c[g>>2]|0;c[h>>2]=yh(c[e>>2]|0,b,((b|0)<0)<<31>>31)|0;if(c[h>>2]|0)iR(c[h>>2]|0,c[f>>2]|0,c[g>>2]|0)|0;c[d>>2]=c[h>>2];h=c[d>>2]|0;i=j;return h|0}function oh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=d;c[g>>2]=c[(c[e>>2]|0)+8>>2];d=c[g>>2]|0;if((c[f>>2]|0)>0){tx(d,c[f>>2]|0)|0;b[(c[g>>2]|0)+8>>1]=8192;c[c[g>>2]>>2]=c[(c[e>>2]|0)+4>>2];if(c[(c[g>>2]|0)+16>>2]|0)kR(c[(c[g>>2]|0)+16>>2]|0,0,c[f>>2]|0)|0}else{fh(d);c[(c[g>>2]|0)+16>>2]=0}i=h;return c[(c[g>>2]|0)+16>>2]|0}function ph(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;h=g+12|0;e=g;f=g+8|0;c[h>>2]=a;a=e;c[a>>2]=b;c[a+4>>2]=d;a=e;c[f>>2]=yh(c[h>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;if(!(c[f>>2]|0)){h=c[f>>2]|0;i=g;return h|0}kR(c[f>>2]|0,0,c[e>>2]|0)|0;h=c[f>>2]|0;i=g;return h|0}function qh(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;d=h+8|0;g=h+4|0;f=h;c[j>>2]=a;c[d>>2]=b;c[g>>2]=c[j>>2];if(((c[g>>2]|0)!=0?(c[(c[g>>2]|0)+20>>2]|0)!=0:0)?(c[d>>2]|0)>=0?(c[d>>2]|0)<(e[(c[g>>2]|0)+84>>1]|0|0):0:0){c[f>>2]=(c[(c[g>>2]|0)+20>>2]|0)+((c[d>>2]|0)*40|0);j=c[f>>2]|0;i=h;return j|0}if((c[g>>2]|0)!=0?(c[c[g>>2]>>2]|0)!=0:0)jg(c[c[g>>2]>>2]|0,25);c[f>>2]=FH()|0;j=c[f>>2]|0;i=h;return j|0}function rh(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];if(!(c[b>>2]|0)){i=d;return}e=Rg(c[c[b>>2]>>2]|0,c[(c[b>>2]|0)+80>>2]|0)|0;c[(c[b>>2]|0)+80>>2]=e;i=d;return}function sh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+32|0;p=o+28|0;g=o+24|0;h=o+20|0;j=o+16|0;n=o+12|0;m=o+8|0;l=o+4|0;k=o;c[p>>2]=b;c[g>>2]=d;c[h>>2]=e;c[j>>2]=f;c[n>>2]=0;c[m>>2]=c[p>>2];c[k>>2]=c[c[m>>2]>>2];c[l>>2]=ye(c[p>>2]|0)|0;if(!((c[g>>2]|0)>=0?(c[g>>2]|0)<(c[l>>2]|0):0)){p=c[n>>2]|0;i=o;return p|0}p=_(c[j>>2]|0,c[l>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+p;c[n>>2]=Tb[c[h>>2]&255]((c[(c[m>>2]|0)+16>>2]|0)+((c[g>>2]|0)*40|0)|0)|0;if(!(a[(c[k>>2]|0)+65>>0]|0)){p=c[n>>2]|0;i=o;return p|0}li(c[k>>2]|0);c[n>>2]=0;p=c[n>>2]|0;i=o;return p|0}function th(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;t=s+28|0;k=s+24|0;l=s+20|0;m=s+16|0;n=s+12|0;o=s+32|0;p=s+8|0;q=s+4|0;r=s;c[t>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;a[o>>0]=j;c[p>>2]=c[t>>2];c[r>>2]=uh(c[p>>2]|0,c[k>>2]|0)|0;if(c[r>>2]|0){if(!((c[n>>2]|0)!=0&(c[n>>2]|0)!=(-1|0))){t=c[r>>2]|0;i=s;return t|0}Qb[c[n>>2]&255](c[l>>2]|0);t=c[r>>2]|0;i=s;return t|0}if(!(c[l>>2]|0)){t=c[r>>2]|0;i=s;return t|0}c[q>>2]=(c[(c[p>>2]|0)+60>>2]|0)+(((c[k>>2]|0)-1|0)*40|0);c[r>>2]=dh(c[q>>2]|0,c[l>>2]|0,c[m>>2]|0,a[o>>0]|0,c[n>>2]|0)|0;if((c[r>>2]|0)==0?(d[o>>0]|0|0)!=0:0)c[r>>2]=Zt(c[q>>2]|0,d[(c[c[p>>2]>>2]|0)+62>>0]|0)|0;jg(c[c[p>>2]>>2]|0,c[r>>2]|0);c[r>>2]=Rg(c[c[p>>2]>>2]|0,c[r>>2]|0)|0;t=c[r>>2]|0;i=s;return t|0}function uh(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;f=m+16|0;g=m+12|0;h=m+8|0;j=m+4|0;c[g>>2]=a;c[h>>2]=d;if(kh(c[g>>2]|0)|0){c[f>>2]=Kf(73485)|0;l=c[f>>2]|0;i=m;return l|0}if((c[(c[g>>2]|0)+40>>2]|0)==-1108210269?(c[(c[g>>2]|0)+76>>2]|0)<0:0){if((c[h>>2]|0)>=1?(c[h>>2]|0)<=(b[(c[g>>2]|0)+68>>1]|0):0){c[h>>2]=(c[h>>2]|0)+-1;c[j>>2]=(c[(c[g>>2]|0)+60>>2]|0)+((c[h>>2]|0)*40|0);Ug(c[j>>2]|0);b[(c[j>>2]|0)+8>>1]=1;jg(c[c[g>>2]>>2]|0,0);do if((e[(c[g>>2]|0)+88>>1]|0)>>>8&1){if(!((c[h>>2]|0)<32?(c[(c[g>>2]|0)+188>>2]&1<>2]|0)!=0:0))l=12;if((l|0)==12?(c[(c[g>>2]|0)+188>>2]|0)!=-1:0)break;l=(c[g>>2]|0)+88|0;b[l>>1]=b[l>>1]&-9|8}while(0);c[f>>2]=0;l=c[f>>2]|0;i=m;return l|0}jg(c[c[g>>2]>>2]|0,25);c[f>>2]=25;l=c[f>>2]|0;i=m;return l|0}jg(c[c[g>>2]>>2]|0,21);c[k>>2]=c[(c[g>>2]|0)+168>>2];Rd(21,40606,k);c[f>>2]=Kf(73493)|0;l=c[f>>2]|0;i=m;return l|0}function vh(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;if(!(c[h>>2]|0)){c[g>>2]=0;e=c[g>>2]|0;i=n;return e|0}a:do if(c[j>>2]|0){c[l>>2]=0;while(1){if((c[l>>2]|0)>=(b[(c[h>>2]|0)+70>>1]|0))break a;c[m>>2]=c[(c[(c[h>>2]|0)+64>>2]|0)+(c[l>>2]<<2)>>2];if(((c[m>>2]|0)!=0?(CQ(c[m>>2]|0,c[j>>2]|0,c[k>>2]|0)|0)==0:0)?(a[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0)==0:0)break;c[l>>2]=(c[l>>2]|0)+1}c[g>>2]=(c[l>>2]|0)+1;e=c[g>>2]|0;i=n;return e|0}while(0);c[g>>2]=0;e=c[g>>2]|0;i=n;return e|0}function wh(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;k=h+16|0;j=h+12|0;f=h+8|0;g=h+4|0;e=h;c[k>>2]=a;c[j>>2]=d;c[f>>2]=c[k>>2];c[g>>2]=c[j>>2];c[e>>2]=0;while(1){if((c[e>>2]|0)>=(b[(c[f>>2]|0)+68>>1]|0))break;EH((c[(c[g>>2]|0)+60>>2]|0)+((c[e>>2]|0)*40|0)|0,(c[(c[f>>2]|0)+60>>2]|0)+((c[e>>2]|0)*40|0)|0);c[e>>2]=(c[e>>2]|0)+1}i=h;return 0}function xh(d,f){d=d|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;j=n+16|0;m=n+8|0;l=n;k=n+24|0;c[g>>2]=d;c[j>>2]=f;a[k>>0]=a[(c[g>>2]|0)+10>>0]|0;if(!(Ky(c[(c[g>>2]|0)+16>>2]|0,m,c[(c[g>>2]|0)+12>>2]|0,a[k>>0]|0)|0)){i=n;return}if(!(Hi(c[(c[g>>2]|0)+16>>2]|0,l,c[(c[g>>2]|0)+12>>2]|0,a[k>>0]|0)|0)){d=c[l+4>>2]|0;m=c[g>>2]|0;c[m>>2]=c[l>>2];c[m+4>>2]=d;m=(c[g>>2]|0)+8|0;b[m>>1]=e[m>>1]|0|4;i=n;return}h[c[g>>2]>>3]=+h[m>>3];m=(c[g>>2]|0)+8|0;b[m>>1]=e[m>>1]|0|8;if(!(c[j>>2]|0)){i=n;return}px(c[g>>2]|0);i=n;return}function yh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0; +j=i;i=i+32|0;e=j+16|0;f=j+12|0;g=j;h=j+8|0;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;if(c[f>>2]|0){h=g;c[e>>2]=Fw(c[f>>2]|0,c[h>>2]|0,c[h+4>>2]|0)|0;h=c[e>>2]|0;i=j;return h|0}else{a=g;c[h>>2]=_f(c[a>>2]|0,c[a+4>>2]|0)|0;c[e>>2]=c[h>>2];h=c[e>>2]|0;i=j;return h|0}return 0}function zh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;q=r+16|0;p=r;k=r+52|0;l=r+48|0;g=r+44|0;m=r+40|0;n=r+36|0;o=r+32|0;j=r+28|0;h=r+24|0;c[l>>2]=b;c[g>>2]=d;c[m>>2]=e;c[n>>2]=f;if(pz(c[l>>2]|0)|0){c[k>>2]=0;q=c[k>>2]|0;i=r;return q|0}c[o>>2]=pi(c[c[l>>2]>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;if(!(c[o>>2]|0)){c[j>>2]=(c[g>>2]|0)!=0?40579:40592;if(((ji(c[c[l>>2]>>2]|0,c[n>>2]|0)|0)<1?(c[h>>2]=nj((c[c[l>>2]>>2]|0)+312|0,c[m>>2]|0)|0,(c[h>>2]|0)!=0):0)?(AH(c[l>>2]|0,c[h>>2]|0)|0)!=0:0){c[k>>2]=c[(c[h>>2]|0)+16>>2];q=c[k>>2]|0;i=r;return q|0}d=c[l>>2]|0;g=c[j>>2]|0;if(c[n>>2]|0){n=c[n>>2]|0;q=c[m>>2]|0;c[p>>2]=g;c[p+4>>2]=n;c[p+8>>2]=q;Ah(d,30884,p)}else{p=c[m>>2]|0;c[q>>2]=g;c[q+4>>2]=p;Ah(d,30894,q)}a[(c[l>>2]|0)+17>>0]=1}c[k>>2]=c[o>>2];q=c[k>>2]|0;i=r;return q|0}function Ah(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+48|0;f=j+32|0;l=j+28|0;h=j+24|0;k=j+8|0;g=j;c[f>>2]=b;c[l>>2]=d;c[g>>2]=c[c[f>>2]>>2];c[k>>2]=e;c[h>>2]=Zw(c[g>>2]|0,c[l>>2]|0,k)|0;if(a[(c[g>>2]|0)+69>>0]|0){Sf(c[g>>2]|0,c[h>>2]|0);i=j;return}else{l=(c[f>>2]|0)+68|0;c[l>>2]=(c[l>>2]|0)+1;Sf(c[g>>2]|0,c[(c[f>>2]|0)+4>>2]|0);c[(c[f>>2]|0)+4>>2]=c[h>>2];c[(c[f>>2]|0)+12>>2]=1;i=j;return}}function Bh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+32|0;j=f+28|0;h=f+24|0;g=f+8|0;e=f;c[j>>2]=a;c[h>>2]=b;c[g>>2]=d;c[e>>2]=Zw(c[j>>2]|0,c[h>>2]|0,g)|0;i=f;return c[e>>2]|0}function Ch(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=c[c[d>>2]>>2];c[f>>2]=ph(c[e>>2]|0,208,0)|0;if(!(c[f>>2]|0)){c[b>>2]=0;a=c[b>>2]|0;i=g;return a|0}c[c[f>>2]>>2]=c[e>>2];if(c[(c[e>>2]|0)+4>>2]|0)c[(c[(c[e>>2]|0)+4>>2]|0)+48>>2]=c[f>>2];c[(c[f>>2]|0)+52>>2]=c[(c[e>>2]|0)+4>>2];c[(c[f>>2]|0)+48>>2]=0;c[(c[e>>2]|0)+4>>2]=c[f>>2];c[(c[f>>2]|0)+40>>2]=649915045;c[(c[f>>2]|0)+24>>2]=c[d>>2];c[b>>2]=c[f>>2];a=c[b>>2]|0;i=g;return a|0}function Dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=-1e6;if(!(c[e>>2]|0)){f=c[f>>2]|0;i=g;return f|0}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[d>>2]|0)+20>>2]|0)){d=6;break}if((c[(c[(c[d>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+12>>2]|0)==(c[e>>2]|0)){d=6;break}c[f>>2]=(c[f>>2]|0)+1}if((d|0)==6){f=c[f>>2]|0;i=g;return f|0}return 0}function Eh(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;j=i;i=i+32|0;l=j+24|0;p=j+20|0;o=j+16|0;n=j+12|0;m=j+8|0;k=j+4|0;h=j;c[l>>2]=a;c[p>>2]=b;c[o>>2]=d;c[n>>2]=e;c[m>>2]=f;c[k>>2]=g;c[h>>2]=Vw(c[l>>2]|0,c[p>>2]|0,c[o>>2]|0,c[n>>2]|0,c[m>>2]|0)|0;Ih(c[l>>2]|0,c[h>>2]|0,c[k>>2]|0,-14);i=j;return c[h>>2]|0}function Fh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g;f=g+4|0;c[e>>2]=b;a[f>>0]=d;if(a[(c[c[e>>2]>>2]|0)+65>>0]|0){i=g;return}a[(c[(c[e>>2]|0)+4>>2]|0)+(((c[(c[e>>2]|0)+32>>2]|0)-1|0)*20|0)+3>>0]=a[f>>0]|0;i=g;return}function Gh(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+28|0;j=p+24|0;k=p+20|0;l=p+16|0;m=p+8|0;o=p+4|0;n=p;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[p+12>>2]=g;if(((c[(c[j>>2]|0)+32>>2]|0)+(c[k>>2]|0)|0)>(c[(c[(c[j>>2]|0)+24>>2]|0)+88>>2]|0)?(Xw(c[j>>2]|0,c[k>>2]|0)|0)!=0:0){c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}b=(c[(c[j>>2]|0)+4>>2]|0)+((c[(c[j>>2]|0)+32>>2]|0)*20|0)|0;c[o>>2]=b;c[n>>2]=b;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[k>>2]|0))break;a[c[o>>2]>>0]=a[c[l>>2]>>0]|0;c[(c[o>>2]|0)+4>>2]=a[(c[l>>2]|0)+1>>0];c[(c[o>>2]|0)+8>>2]=a[(c[l>>2]|0)+2>>0];if((d[35754+(d[c[l>>2]>>0]|0)>>0]&1|0)!=0?(a[(c[l>>2]|0)+2>>0]|0)>0:0){b=(c[o>>2]|0)+8|0;c[b>>2]=(c[b>>2]|0)+(c[(c[j>>2]|0)+32>>2]|0)}c[(c[o>>2]|0)+12>>2]=a[(c[l>>2]|0)+3>>0];a[(c[o>>2]|0)+1>>0]=0;c[(c[o>>2]|0)+16>>2]=0;a[(c[o>>2]|0)+3>>0]=0;c[m>>2]=(c[m>>2]|0)+1;c[l>>2]=(c[l>>2]|0)+4;c[o>>2]=(c[o>>2]|0)+20}o=(c[j>>2]|0)+32|0;c[o>>2]=(c[o>>2]|0)+(c[k>>2]|0);c[h>>2]=c[n>>2];o=c[h>>2]|0;i=p;return o|0}function Hh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;a=(c[d>>2]|0)+96|0;c[a>>2]=c[a>>2]|1<>2];if((c[e>>2]|0)==1){i=f;return}if(!(zH(c[(c[(c[c[d>>2]>>2]|0)+16>>2]|0)+(c[e>>2]<<4)+4>>2]|0)|0)){i=f;return}a=(c[d>>2]|0)+100|0;c[a>>2]=c[a>>2]|1<>2];i=f;return}function Ih(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;k=n+12|0;l=n+8|0;m=n+4|0;j=n;c[g>>2]=b;c[h>>2]=d;c[k>>2]=e;c[l>>2]=f;c[j>>2]=c[c[g>>2]>>2];if(a[(c[j>>2]|0)+65>>0]|0){if((c[l>>2]|0)==-10){i=n;return}qA(c[j>>2]|0,c[l>>2]|0,c[k>>2]|0);i=n;return}if((c[h>>2]|0)<0)c[h>>2]=(c[(c[g>>2]|0)+32>>2]|0)-1;c[m>>2]=(c[(c[g>>2]|0)+4>>2]|0)+((c[h>>2]|0)*20|0);if((c[l>>2]|0)<0?(a[(c[m>>2]|0)+1>>0]|0)==0:0){g=c[k>>2]|0;if((c[l>>2]|0)==-14){c[(c[m>>2]|0)+16>>2]=g;a[(c[m>>2]|0)+1>>0]=-14;i=n;return}if(!g){i=n;return}c[(c[m>>2]|0)+16>>2]=c[k>>2];a[(c[m>>2]|0)+1>>0]=c[l>>2];if((c[l>>2]|0)!=-10){i=n;return}yH(c[k>>2]|0);i=n;return}xH(c[g>>2]|0,c[m>>2]|0,c[k>>2]|0,c[l>>2]|0);i=n;return}function Jh(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r+44|0;h=r+40|0;j=r+36|0;p=r+32|0;n=r+28|0;m=r+24|0;l=r+20|0;o=r+16|0;k=r+12|0;q=r;c[g>>2]=e;c[h>>2]=f;c[j>>2]=c[c[g>>2]>>2];c[p>>2]=b[(c[h>>2]|0)+444>>1];c[n>>2]=c[(c[h>>2]|0)+76>>2];c[m>>2]=c[(c[h>>2]|0)+72>>2];c[l>>2]=c[(c[h>>2]|0)+400>>2];f=c[(c[h>>2]|0)+84>>2]|0;c[o>>2]=f;c[o>>2]=(c[o>>2]|0)==0?1:f;c[n>>2]=(c[n>>2]|0)+(c[m>>2]|0);c[k>>2]=((c[(c[g>>2]|0)+32>>2]|0)*20|0)+7&-8;c[q>>2]=(c[(c[g>>2]|0)+4>>2]|0)+(c[k>>2]|0);c[q+4>>2]=(c[(c[h>>2]|0)+92>>2]|0)-(c[k>>2]|0)&-8;if((c[q+4>>2]|0)>0)kR(c[q>>2]|0,0,c[q+4>>2]|0)|0;SE(c[g>>2]|0,l);if(d[(c[h>>2]|0)+20>>0]|0)e=(d[(c[h>>2]|0)+21>>0]|0)!=0;else e=0;f=(c[g>>2]|0)+88|0;b[f>>1]=b[f>>1]&-33|(e&1)<<5&65535;if((c[n>>2]|0)<10?(d[(c[h>>2]|0)+453>>0]|0)!=0:0)c[n>>2]=10;f=(c[g>>2]|0)+88|0;b[f>>1]=b[f>>1]&-9;do{c[q+8>>2]=0;f=wH(q,c[(c[g>>2]|0)+8>>2]|0,(c[n>>2]|0)*40|0)|0;c[(c[g>>2]|0)+8>>2]=f;f=wH(q,c[(c[g>>2]|0)+60>>2]|0,(c[p>>2]|0)*40|0)|0;c[(c[g>>2]|0)+60>>2]=f;f=wH(q,c[(c[g>>2]|0)+12>>2]|0,c[l>>2]<<2)|0;c[(c[g>>2]|0)+12>>2]=f;f=wH(q,c[(c[g>>2]|0)+56>>2]|0,c[m>>2]<<2)|0;c[(c[g>>2]|0)+56>>2]=f;f=wH(q,c[(c[g>>2]|0)+200>>2]|0,c[o>>2]|0)|0;c[(c[g>>2]|0)+200>>2]=f;if(!(c[q+8>>2]|0))break;f=c[q+8>>2]|0;f=ph(c[j>>2]|0,f,((f|0)<0)<<31>>31)|0;c[(c[g>>2]|0)+172>>2]=f;c[q>>2]=f;c[q+4>>2]=c[q+8>>2]}while((a[(c[j>>2]|0)+65>>0]|0)!=0^1);c[(c[g>>2]|0)+36>>2]=c[m>>2];c[(c[g>>2]|0)+196>>2]=c[o>>2];a:do if(c[(c[g>>2]|0)+60>>2]|0){b[(c[g>>2]|0)+68>>1]=c[p>>2];c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[p>>2]|0))break a;b[(c[(c[g>>2]|0)+60>>2]|0)+((c[k>>2]|0)*40|0)+8>>1]=1;c[(c[(c[g>>2]|0)+60>>2]|0)+((c[k>>2]|0)*40|0)+32>>2]=c[j>>2];c[k>>2]=(c[k>>2]|0)+1}}while(0);b[(c[g>>2]|0)+70>>1]=c[(c[h>>2]|0)+448>>2];c[(c[g>>2]|0)+64>>2]=c[(c[h>>2]|0)+476>>2];c[(c[h>>2]|0)+448>>2]=0;c[(c[h>>2]|0)+476>>2]=0;if(!(c[(c[g>>2]|0)+8>>2]|0)){p=c[h>>2]|0;p=p+453|0;p=a[p>>0]|0;p=p&255;q=c[g>>2]|0;q=q+88|0;p=p&65535;o=b[q>>1]|0;p=p&3;o=o&-4;p=o|p;b[q>>1]=p;q=c[g>>2]|0;Tg(q);i=r;return}q=(c[g>>2]|0)+8|0;c[q>>2]=(c[q>>2]|0)+-40;c[(c[g>>2]|0)+28>>2]=c[n>>2];c[k>>2]=1;while(1){if((c[k>>2]|0)>(c[n>>2]|0))break;b[(c[(c[g>>2]|0)+8>>2]|0)+((c[k>>2]|0)*40|0)+8>>1]=128;c[(c[(c[g>>2]|0)+8>>2]|0)+((c[k>>2]|0)*40|0)+32>>2]=c[j>>2];c[k>>2]=(c[k>>2]|0)+1}p=c[h>>2]|0;p=p+453|0;p=a[p>>0]|0;p=p&255;q=c[g>>2]|0;q=q+88|0;p=p&65535;o=b[q>>1]|0;p=p&3;o=o&-4;p=o|p;b[q>>1]=p;q=c[g>>2]|0;Tg(q);i=r;return}function Kh(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+64|0;q=s+24|0;p=s+16|0;k=s+8|0;l=s+52|0;m=s;n=s+48|0;o=s+44|0;r=s+40|0;g=s+36|0;h=s+32|0;j=s+28|0;c[l>>2]=a;a=m;c[a>>2]=d;c[a+4>>2]=e;c[n>>2]=f;c[r>>2]=0;c[g>>2]=c[(c[l>>2]|0)+20>>2];e=m;a=c[e+4>>2]|0;f=c[(c[g>>2]|0)+60>>2]|0;c[f>>2]=c[e>>2];c[f+4>>2]=a;c[o>>2]=ue(c[(c[l>>2]|0)+20>>2]|0)|0;do if((c[o>>2]|0)==100){c[h>>2]=c[c[(c[g>>2]|0)+56>>2]>>2];c[j>>2]=c[(c[h>>2]|0)+80+(c[(c[l>>2]|0)+12>>2]<<2)>>2];d=c[l>>2]|0;if((c[j>>2]|0)>>>0>=12){c[(c[l>>2]|0)+8>>2]=c[(c[h>>2]|0)+80+((c[d+12>>2]|0)+(b[(c[h>>2]|0)+12>>1]|0)<<2)>>2];k=uF(c[j>>2]|0)|0;c[(c[l>>2]|0)+4>>2]=k;c[(c[l>>2]|0)+16>>2]=c[(c[h>>2]|0)+16>>2];vH(c[(c[l>>2]|0)+16>>2]|0);break}e=c[d+24>>2]|0;if(!(c[j>>2]|0))d=40525;else d=(c[j>>2]|0)==7?40512:40517;c[k>>2]=d;c[r>>2]=Bh(e,40530,k)|0;c[o>>2]=1;Yd(c[(c[l>>2]|0)+20>>2]|0)|0;c[(c[l>>2]|0)+20>>2]=0}while(0);if((c[o>>2]|0)==100){c[o>>2]=0;q=c[r>>2]|0;r=c[n>>2]|0;c[r>>2]=q;r=c[o>>2]|0;i=s;return r|0}if(!(c[(c[l>>2]|0)+20>>2]|0)){q=c[r>>2]|0;r=c[n>>2]|0;c[r>>2]=q;r=c[o>>2]|0;i=s;return r|0}c[o>>2]=Yd(c[(c[l>>2]|0)+20>>2]|0)|0;c[(c[l>>2]|0)+20>>2]=0;d=c[(c[l>>2]|0)+24>>2]|0;if(!(c[o>>2]|0)){l=m;m=c[l+4>>2]|0;q=p;c[q>>2]=c[l>>2];c[q+4>>2]=m;c[r>>2]=Bh(d,40559,p)|0;c[o>>2]=1;q=c[r>>2]|0;r=c[n>>2]|0;c[r>>2]=q;r=c[o>>2]|0;i=s;return r|0}else{c[q>>2]=bf(c[(c[l>>2]|0)+24>>2]|0)|0;c[r>>2]=Bh(d,19255,q)|0;q=c[r>>2]|0;r=c[n>>2]|0;c[r>>2]=q;r=c[o>>2]|0;i=s;return r|0}return 0}function Lh(b){b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;if(!(c[e>>2]|0)){i=g;return}c[f>>2]=c[c[e>>2]>>2];Sf(c[f>>2]|0,c[(c[e>>2]|0)+120>>2]|0);Vu(c[f>>2]|0,c[(c[e>>2]|0)+324>>2]|0);if(c[f>>2]|0){b=(c[f>>2]|0)+248|0;c[b>>2]=(c[b>>2]|0)-(d[(c[e>>2]|0)+24>>0]|0)}a[(c[e>>2]|0)+24>>0]=0;i=g;return}function Mh(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[h>>2]=a;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;if(!(d[(c[h>>2]|0)+66>>0]|0)){c[g>>2]=4;m=c[g>>2]|0;i=n;return m|0}if((d[(c[h>>2]|0)+66>>0]|0|0)>=3)e=WE(c[h>>2]|0)|0;else e=0;c[m>>2]=e;if(!(c[m>>2]|0))c[m>>2]=hF(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0,0)|0;c[g>>2]=c[m>>2];m=c[g>>2]|0;i=n;return m|0}function Nh(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+48|0;g=r+36|0;s=r+32|0;h=r+28|0;j=r+24|0;k=r+20|0;l=r+16|0;o=r+12|0;n=r+8|0;p=r+4|0;m=r;c[s>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[n>>2]=c[s>>2];if(!(c[n>>2]|0)){c[g>>2]=Kf(81441)|0;s=c[g>>2]|0;i=r;return s|0}c[m>>2]=c[(c[n>>2]|0)+24>>2];c[p>>2]=c[(c[n>>2]|0)+20>>2];do if(!((c[j>>2]|0)<0|(c[k>>2]|0)<0)?(a=c[k>>2]|0,b=c[j>>2]|0,b=gR(a|0,((a|0)<0)<<31>>31|0,b|0,((b|0)<0)<<31>>31|0)|0,a=C,s=c[(c[n>>2]|0)+4>>2]|0,f=((s|0)<0)<<31>>31,!((a|0)>(f|0)|(a|0)==(f|0)&b>>>0>s>>>0)):0){if(!(c[p>>2]|0)){c[o>>2]=4;break}uH(c[(c[n>>2]|0)+16>>2]|0);c[o>>2]=Wb[c[l>>2]&255](c[(c[n>>2]|0)+16>>2]|0,(c[k>>2]|0)+(c[(c[n>>2]|0)+8>>2]|0)|0,c[j>>2]|0,c[h>>2]|0)|0;if((c[o>>2]|0)==4){Qg(c[p>>2]|0)|0;c[(c[n>>2]|0)+20>>2]=0;break}else{c[(c[p>>2]|0)+80>>2]=c[o>>2];break}}else q=5;while(0);if((q|0)==5)c[o>>2]=1;jg(c[m>>2]|0,c[o>>2]|0);c[o>>2]=Rg(c[m>>2]|0,c[o>>2]|0)|0;c[g>>2]=c[o>>2];s=c[g>>2]|0;i=r;return s|0}function Oh(a){a=a|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[f>>2]=a;c[d>>2]=c[(c[f>>2]|0)+4>>2];while(1){if(!(c[d>>2]|0))break;f=(c[d>>2]|0)+88|0;b[f>>1]=b[f>>1]&-9|8;c[d>>2]=c[(c[d>>2]|0)+52>>2]}i=e;return}function Ph(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+64|0;s=x+52|0;t=x+48|0;u=x+44|0;v=x+40|0;w=x+36|0;q=x+32|0;r=x+28|0;n=x+24|0;m=x+20|0;p=x+56|0;l=x+16|0;o=x+12|0;j=x+8|0;k=x+4|0;h=x;c[t>>2]=b;c[u>>2]=e;c[v>>2]=f;c[w>>2]=g;c[n>>2]=d[(c[v>>2]|0)+1>>0];c[m>>2]=d[c[v>>2]>>0];a[p>>0]=a[(c[v>>2]|0)+3>>0]|0;c[l>>2]=0;a:while(1){if((d[c[t>>2]>>0]|0)<128){g=c[t>>2]|0;c[t>>2]=g+1;g=d[g>>0]|0}else g=jC(t)|0;c[q>>2]=g;if(!g){b=83;break}if((c[q>>2]|0)==(c[m>>2]|0)){b=7;break}do if((c[q>>2]|0)==(c[w>>2]|0)){if(!(d[(c[v>>2]|0)+2>>0]|0)){c[q>>2]=jC(t)|0;if(!(c[q>>2]|0)){b=49;break a}c[l>>2]=c[t>>2];break}c[j>>2]=0;c[k>>2]=0;c[h>>2]=0;c[q>>2]=jC(u)|0;if(!(c[q>>2]|0)){b=52;break a}c[r>>2]=jC(t)|0;if((c[r>>2]|0)==94){c[h>>2]=1;c[r>>2]=jC(t)|0}if((c[r>>2]|0)==93){if((c[q>>2]|0)==93)c[k>>2]=1;c[r>>2]=jC(t)|0}while(1){g=c[r>>2]|0;if(!((c[r>>2]|0)!=0?(c[r>>2]|0)!=93:0))break;if(((g|0)==45?(d[c[t>>2]>>0]|0)!=93:0)?(c[j>>2]|0)>>>0>0?(d[c[t>>2]>>0]|0)!=0:0:0){c[r>>2]=jC(t)|0;if((c[q>>2]|0)>>>0>=(c[j>>2]|0)>>>0?(c[q>>2]|0)>>>0<=(c[r>>2]|0)>>>0:0)c[k>>2]=1;c[j>>2]=0}else{if((c[q>>2]|0)==(c[r>>2]|0))c[k>>2]=1;c[j>>2]=c[r>>2]}c[r>>2]=jC(t)|0}if(!g){b=73;break a}if(!(c[k>>2]^c[h>>2])){b=73;break a}else continue a}while(0);if((d[c[u>>2]>>0]|0)<128){g=c[u>>2]|0;c[u>>2]=g+1;g=d[g>>0]|0}else g=jC(u)|0;c[r>>2]=g;if((c[q>>2]|0)==(c[r>>2]|0))continue;if((d[p>>0]|0)!=0&(c[q>>2]|0)>>>0<128&(c[r>>2]|0)>>>0<128?(d[18477+(c[q>>2]&255)>>0]|0)==(d[18477+(c[r>>2]&255)>>0]|0):0)continue;if((c[q>>2]|0)!=(c[n>>2]|0)){b=82;break}if(!((c[r>>2]|0)!=0?(c[t>>2]|0)!=(c[l>>2]|0):0)){b=82;break}}if((b|0)==7){while(1){b=0;if((d[c[t>>2]>>0]|0)<128){g=c[t>>2]|0;c[t>>2]=g+1;g=d[g>>0]|0}else g=jC(t)|0;c[q>>2]=g;if((g|0)==(c[m>>2]|0))g=1;else g=(c[q>>2]|0)==(c[n>>2]|0);f=c[q>>2]|0;if(!g)break;if((f|0)!=(c[n>>2]|0)){b=7;continue}if(!(jC(u)|0)){b=15;break}else b=7}if((b|0)==15){c[s>>2]=0;w=c[s>>2]|0;i=x;return w|0}if(!f){c[s>>2]=1;w=c[s>>2]|0;i=x;return w|0}do if((c[q>>2]|0)==(c[w>>2]|0)){if(!(d[(c[v>>2]|0)+2>>0]|0)){c[q>>2]=jC(t)|0;if(c[q>>2]|0)break;c[s>>2]=0;w=c[s>>2]|0;i=x;return w|0}b:while(1){if(d[c[u>>2]>>0]|0)g=(Ph((c[t>>2]|0)+-1|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0)==0;else g=0;f=c[u>>2]|0;if(!g)break;c[u>>2]=f+1;if((d[f>>0]|0)<192)continue;while(1){if((d[c[u>>2]>>0]&192|0)!=128)continue b;c[u>>2]=(c[u>>2]|0)+1}}c[s>>2]=(d[f>>0]|0)!=0&1;w=c[s>>2]|0;i=x;return w|0}while(0);c:do if((c[q>>2]|0)>>>0<=128){g=c[q>>2]|0;if(a[p>>0]|0){c[o>>2]=g&~(d[19267+(c[q>>2]&255)>>0]&32);c[q>>2]=d[18477+(c[q>>2]&255)>>0]}else c[o>>2]=g;while(1){p=c[u>>2]|0;c[u>>2]=p+1;p=d[p>>0]|0;c[r>>2]=p;if(!p)break c;if((c[r>>2]|0)!=(c[q>>2]|0)?(c[r>>2]|0)!=(c[o>>2]|0):0)continue;if(Ph(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0)break}c[s>>2]=1;w=c[s>>2]|0;i=x;return w|0}else{while(1){if((d[c[u>>2]>>0]|0)<128){g=c[u>>2]|0;c[u>>2]=g+1;g=d[g>>0]|0}else g=jC(u)|0;c[r>>2]=g;if(!g)break c;if((c[r>>2]|0)!=(c[q>>2]|0))continue;if(Ph(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0)break}c[s>>2]=1;w=c[s>>2]|0;i=x;return w|0}while(0);c[s>>2]=0;w=c[s>>2]|0;i=x;return w|0}else if((b|0)==49){c[s>>2]=0;w=c[s>>2]|0;i=x;return w|0}else if((b|0)==52){c[s>>2]=0;w=c[s>>2]|0;i=x;return w|0}else if((b|0)==73){c[s>>2]=0;w=c[s>>2]|0;i=x;return w|0}else if((b|0)==82){c[s>>2]=0;w=c[s>>2]|0;i=x;return w|0}else if((b|0)==83){c[s>>2]=(d[c[u>>2]>>0]|0)==0&1;w=c[s>>2]|0;i=x;return w|0}return 0}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[d>>2]=a;do if(!(c[d>>2]|0)){hH(40498);c[b>>2]=0}else{c[e>>2]=c[(c[d>>2]|0)+76>>2];if((c[e>>2]|0)==-1607883113){c[b>>2]=1;break}if(Sh(c[d>>2]|0)|0)hH(40503);c[b>>2]=0}while(0);i=f;return c[b>>2]|0}function Rh(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;j=s+32|0;k=s+28|0;l=s+24|0;m=s+20|0;n=s+16|0;o=s+12|0;p=s+8|0;q=s+4|0;r=s;c[k>>2]=a;c[l>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[c[p>>2]>>2]=0;b=(Qh(c[k>>2]|0)|0)==0;if(b|(c[l>>2]|0)==0){c[j>>2]=Kf(110077)|0;b=c[j>>2]|0;i=s;return b|0}Nf(c[k>>2]|0);c[r>>2]=iH(c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;if((c[r>>2]|0)==17){Yd(c[c[p>>2]>>2]|0)|0;c[r>>2]=iH(c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0)|0}c[j>>2]=c[r>>2];b=c[j>>2]|0;i=s;return b|0}function Sh(a){a=a|0;var b=0,d=0,e=0,f=0;d=i;i=i+16|0;b=d+8|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=c[(c[f>>2]|0)+76>>2];if((c[e>>2]|0)!=1266094736&(c[e>>2]|0)!=-1607883113&(c[e>>2]|0)!=-264537850){hH(40345);c[b>>2]=0;f=c[b>>2]|0;i=d;return f|0}else{c[b>>2]=1;f=c[b>>2]|0;i=d;return f|0}return 0}function Th(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r+36|0;h=r+32|0;j=r+28|0;k=r+24|0;l=r+20|0;p=r+16|0;m=r+12|0;o=r+8|0;n=r+4|0;q=r;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[p>>2]=0;c[m>>2]=If(c[h>>2]|0)|0;if(!(nj((c[g>>2]|0)+312|0,c[h>>2]|0)|0)){c[o>>2]=Fw(c[g>>2]|0,20+(c[m>>2]|0)+1|0,0)|0;if((c[o>>2]|0)!=0?(c[q>>2]=(c[o>>2]|0)+20,iR(c[q>>2]|0,c[h>>2]|0,(c[m>>2]|0)+1|0)|0,c[(c[o>>2]|0)+4>>2]=c[q>>2],c[c[o>>2]>>2]=c[j>>2],c[(c[o>>2]|0)+8>>2]=c[k>>2],c[(c[o>>2]|0)+12>>2]=c[l>>2],c[(c[o>>2]|0)+16>>2]=0,c[n>>2]=Oj((c[g>>2]|0)+312|0,c[q>>2]|0,c[o>>2]|0)|0,(c[n>>2]|0)!=0):0){jh(c[g>>2]|0);Sf(c[g>>2]|0,c[n>>2]|0)}}else c[p>>2]=Kf(118442)|0;c[p>>2]=Rg(c[g>>2]|0,c[p>>2]|0)|0;if(!((c[p>>2]|0)!=0&(c[l>>2]|0)!=0)){b=c[p>>2]|0;i=r;return b|0}Qb[c[l>>2]&255](c[k>>2]|0);b=c[p>>2]|0;i=r;return b|0}function Uh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+80|0;g=z+72|0;q=z+16|0;p=z+8|0;o=z;s=z+68|0;t=z+64|0;h=z+60|0;j=z+56|0;w=z+52|0;v=z+48|0;m=z+44|0;n=z+40|0;k=z+36|0;u=z+32|0;l=z+28|0;x=z+24|0;y=z+20|0;c[t>>2]=b;c[h>>2]=e;c[j>>2]=f;c[w>>2]=0;c[k>>2]=-1;c[u>>2]=c[c[t>>2]>>2];c[l>>2]=c[(c[u>>2]|0)+88+4>>2];if(!(c[(c[u>>2]|0)+148>>2]|0))c[(c[u>>2]|0)+240>>2]=0;c[(c[t>>2]|0)+12>>2]=0;c[(c[t>>2]|0)+484>>2]=c[h>>2];c[v>>2]=0;c[m>>2]=Pu(179)|0;if(!(c[m>>2]|0)){jh(c[u>>2]|0);c[s>>2]=7;y=c[s>>2]|0;i=z;return y|0}while(1){if(!(a[(c[h>>2]|0)+(c[v>>2]|0)>>0]|0))break;c[(c[t>>2]|0)+508>>2]=(c[h>>2]|0)+(c[v>>2]|0);e=Qu((c[h>>2]|0)+(c[v>>2]|0)|0,n)|0;c[(c[t>>2]|0)+508+4>>2]=e;c[v>>2]=(c[v>>2]|0)+(c[(c[t>>2]|0)+508+4>>2]|0);if((c[v>>2]|0)>(c[l>>2]|0)){r=7;break}if((c[n>>2]|0)>=159){if(c[(c[u>>2]|0)+240>>2]|0){r=10;break}if((c[n>>2]|0)==160){r=12;break}else continue}if((c[n>>2]|0)==1)c[(c[t>>2]|0)+484>>2]=(c[h>>2]|0)+(c[v>>2]|0);b=c[m>>2]|0;f=c[n>>2]|0;A=(c[t>>2]|0)+508|0;e=c[t>>2]|0;c[g>>2]=c[A>>2];c[g+4>>2]=c[A+4>>2];Ru(b,f,g,e);c[k>>2]=c[n>>2];if(c[(c[t>>2]|0)+12>>2]|0)break;if(d[(c[u>>2]|0)+65>>0]|0)break}if((r|0)==7)c[(c[t>>2]|0)+12>>2]=18;else if((r|0)==10)c[(c[t>>2]|0)+12>>2]=9;else if((r|0)==12){A=c[t>>2]|0;c[o>>2]=(c[t>>2]|0)+508;Ah(A,27316,o)}if((c[(c[t>>2]|0)+12>>2]|0)==0?(d[(c[u>>2]|0)+65>>0]|0)==0:0){if((c[k>>2]|0)!=1){r=c[m>>2]|0;e=(c[t>>2]|0)+508|0;A=c[t>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];Ru(r,1,g,A);c[(c[t>>2]|0)+484>>2]=(c[h>>2]|0)+(c[v>>2]|0)}if((c[(c[t>>2]|0)+12>>2]|0)==0?(d[(c[u>>2]|0)+65>>0]|0)==0:0){r=c[m>>2]|0;e=(c[t>>2]|0)+508|0;A=c[t>>2]|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];Ru(r,0,g,A)}}Su(c[m>>2]|0,148);if(a[(c[u>>2]|0)+65>>0]|0)c[(c[t>>2]|0)+12>>2]=7;if(((c[(c[t>>2]|0)+12>>2]|0)!=0?(c[(c[t>>2]|0)+12>>2]|0)!=101:0)?(c[(c[t>>2]|0)+4>>2]|0)==0:0){A=c[u>>2]|0;c[p>>2]=ih(c[(c[t>>2]|0)+12>>2]|0)|0;A=Bh(A,19255,p)|0;c[(c[t>>2]|0)+4>>2]=A}if(c[(c[t>>2]|0)+4>>2]|0){c[c[j>>2]>>2]=c[(c[t>>2]|0)+4>>2];A=c[(c[t>>2]|0)+12>>2]|0;c[q>>2]=c[c[j>>2]>>2];Rd(A,19255,q);c[(c[t>>2]|0)+4>>2]=0;c[w>>2]=(c[w>>2]|0)+1}if(((c[(c[t>>2]|0)+8>>2]|0)!=0?(c[(c[t>>2]|0)+68>>2]|0)>0:0)?(d[(c[t>>2]|0)+18>>0]|0)==0:0){Tu(c[(c[t>>2]|0)+8>>2]|0);c[(c[t>>2]|0)+8>>2]=0}if(!(d[(c[t>>2]|0)+18>>0]|0)){Sf(c[u>>2]|0,c[(c[t>>2]|0)+408>>2]|0);c[(c[t>>2]|0)+408>>2]=0;c[(c[t>>2]|0)+404>>2]=0}Kd(c[(c[t>>2]|0)+524>>2]|0);if(!(a[(c[t>>2]|0)+454>>0]|0))Qf(c[u>>2]|0,c[(c[t>>2]|0)+488>>2]|0);Uu(c[u>>2]|0,c[(c[t>>2]|0)+540>>2]|0);Pf(c[u>>2]|0,c[(c[t>>2]|0)+492>>2]|0);c[v>>2]=(c[(c[t>>2]|0)+448>>2]|0)-1;while(1){g=c[u>>2]|0;if((c[v>>2]|0)<0)break;Sf(g,c[(c[(c[t>>2]|0)+476>>2]|0)+(c[v>>2]<<2)>>2]|0);c[v>>2]=(c[v>>2]|0)+-1}Sf(g,c[(c[t>>2]|0)+476>>2]|0);while(1){if(!(c[(c[t>>2]|0)+412>>2]|0))break;c[x>>2]=c[(c[t>>2]|0)+412>>2];c[(c[t>>2]|0)+412>>2]=c[c[x>>2]>>2];Sf(c[u>>2]|0,c[x>>2]|0)}while(1){if(!(c[(c[t>>2]|0)+528>>2]|0))break;c[y>>2]=c[(c[t>>2]|0)+528>>2];c[(c[t>>2]|0)+528>>2]=c[(c[y>>2]|0)+68>>2];Qf(c[u>>2]|0,c[y>>2]|0)}c[s>>2]=c[w>>2];A=c[s>>2]|0;i=z;return A|0}function Vh(a){a=a|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=ph(c[d>>2]|0,40,0)|0;if(!(c[e>>2]|0)){e=c[e>>2]|0;i=f;return e|0}b[(c[e>>2]|0)+8>>1]=1;c[(c[e>>2]|0)+32>>2]=c[d>>2];e=c[e>>2]|0;i=f;return e|0}function Wh(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+12|0;j=n+8|0;k=n+4|0;l=n+16|0;m=n;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;a[l>>0]=f;c[m>>2]=g;if(!(c[h>>2]|0)){i=n;return}dh(c[h>>2]|0,c[k>>2]|0,c[j>>2]|0,a[l>>0]|0,c[m>>2]|0)|0;i=n;return}function Xh(){var a=0,b=0;a=i;i=i+16|0;b=a;c[b>>2]=5028;mf(4,b)|0;i=a;return}function Yh(){return 88}function Zh(){return 40}function _h(){return 32}function $h(){var a=0,b=0;a=i;i=i+16|0;b=a;c[b>>2]=4976;mf(18,b)|0;i=a;return}function ai(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;ku(c[(c[d>>2]|0)+212>>2]|0);i=b;return}function bi(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;if(!(c[b>>2]|0)){a=0;a=a&1;i=e;return a|0}a=(d[(c[b>>2]|0)+8>>0]|0|0)==2;a=a&1;i=e;return a|0}function ci(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;p=q+8|0;n=q+4|0;o=q;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;if(c[(c[j>>2]|0)+248+8>>2]|0){c[h>>2]=5;f=c[h>>2]|0;i=q;return f|0}if(a[(c[j>>2]|0)+248+6>>0]|0)Kd(c[(c[j>>2]|0)+248+32>>2]|0);f=c[l>>2]&-8;c[l>>2]=f;c[l>>2]=(c[l>>2]|0)<=4?0:f;if((c[m>>2]|0)<0)c[m>>2]=0;do if(!((c[l>>2]|0)==0|(c[m>>2]|0)==0)){if(c[k>>2]|0){c[p>>2]=c[k>>2];break}Sj();f=_(c[l>>2]|0,c[m>>2]|0)|0;c[p>>2]=_f(f,((f|0)<0)<<31>>31)|0;Tj();if(c[p>>2]|0){f=$f(c[p>>2]|0)|0;c[m>>2]=(f|0)/(c[l>>2]|0)|0}}else{c[l>>2]=0;c[p>>2]=0}while(0);c[(c[j>>2]|0)+248+32>>2]=c[p>>2];c[(c[j>>2]|0)+248+28>>2]=0;b[(c[j>>2]|0)+248+4>>1]=c[l>>2];if(c[p>>2]|0){c[o>>2]=c[p>>2];c[n>>2]=(c[m>>2]|0)-1;while(1){if((c[n>>2]|0)<0)break;c[c[o>>2]>>2]=c[(c[j>>2]|0)+248+28>>2];c[(c[j>>2]|0)+248+28>>2]=c[o>>2];c[o>>2]=(c[o>>2]|0)+(c[l>>2]|0);c[n>>2]=(c[n>>2]|0)+-1}c[(c[j>>2]|0)+248+36>>2]=c[o>>2];c[(c[j>>2]|0)+248>>2]=0;a[(c[j>>2]|0)+248+6>>0]=(c[k>>2]|0)==0?1:0}else{c[(c[j>>2]|0)+248+32>>2]=c[j>>2];c[(c[j>>2]|0)+248+36>>2]=c[j>>2];c[(c[j>>2]|0)+248>>2]=1;a[(c[j>>2]|0)+248+6>>0]=0}c[h>>2]=0;f=c[h>>2]|0;i=q;return f|0}function di(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;d=h+12|0;e=h+8|0;f=h+4|0;c[e>>2]=a;c[f>>2]=b;if(!(c[e>>2]|0)){c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}if(!(Sh(c[e>>2]|0)|0)){c[d>>2]=Kf(133819)|0;g=c[d>>2]|0;i=h;return g|0}cu(c[e>>2]|0);du(c[e>>2]|0)|0;if((c[f>>2]|0)==0?(eu(c[e>>2]|0)|0)!=0:0){hg(c[e>>2]|0,5,27174,g);c[d>>2]=5;g=c[d>>2]|0;i=h;return g|0}c[(c[e>>2]|0)+76>>2]=1691352191;Ng(c[e>>2]|0);c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}function ei(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;f=i;i=i+32|0;d=f+16|0;j=f+12|0;h=f+8|0;e=f+4|0;g=f;c[j>>2]=a;c[h>>2]=b;c[e>>2]=c[j>>2];c[g>>2]=c[(c[j>>2]|0)+496>>2];if((((c[h>>2]|0)+1|0)*1e3|0)>(c[g>>2]|0)){c[d>>2]=0;j=c[d>>2]|0;i=f;return j|0}else{ri(c[c[e>>2]>>2]|0,1e6)|0;c[d>>2]=1;j=c[d>>2]|0;i=f;return j|0}return 0}function Py(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;n=t+44|0;h=t+40|0;o=t+36|0;l=t+32|0;q=t+28|0;m=t+24|0;p=t+20|0;j=t+16|0;r=t+12|0;s=t+8|0;k=t;c[h>>2]=f;c[o>>2]=g;if(!(c[(c[o>>2]|0)+52>>2]|0)){c[n>>2]=0;s=c[n>>2]|0;i=t;return s|0}if(!(c[(c[o>>2]|0)+48>>2]|0)){c[n>>2]=0;s=c[n>>2]|0;i=t;return s|0}c[m>>2]=c[o>>2];while(1){if(!(c[m>>2]|0))break;if((d[(c[m>>2]|0)+4>>0]|0|0)!=116?(d[(c[m>>2]|0)+4>>0]|0|0)!=119:0)break;c[m>>2]=c[(c[m>>2]|0)+52>>2]}if(!(c[m>>2]|0)){c[n>>2]=0;s=c[n>>2]|0;i=t;return s|0}c[j>>2]=c[(c[(c[o>>2]|0)+48>>2]|0)+4>>2];c[l>>2]=(c[c[(c[o>>2]|0)+48>>2]>>2]|0)-1;while(1){if((c[l>>2]|0)<0)break;if(c[(c[(c[j>>2]|0)+((c[l>>2]|0)*20|0)>>2]|0)+4>>2]&256)break;c[l>>2]=(c[l>>2]|0)+-1}if((c[l>>2]|0)<0){c[n>>2]=0;s=c[n>>2]|0;i=t;return s|0}c[s>>2]=c[c[h>>2]>>2];c[p>>2]=c[c[s>>2]>>2];c[q>>2]=ph(c[p>>2]|0,72,0)|0;if(!(c[q>>2]|0)){c[n>>2]=2;s=c[n>>2]|0;i=t;return s|0}c[k>>2]=0;c[k+4>>2]=0;c[r>>2]=Ev(c[s>>2]|0,0,0,0,k,c[q>>2]|0,0,0)|0;if(!(c[r>>2]|0)){c[n>>2]=2;s=c[n>>2]|0;i=t;return s|0}else{h=c[q>>2]|0;j=c[o>>2]|0;k=h+72|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));c[(c[o>>2]|0)+32>>2]=c[r>>2];s=c[s>>2]|0;s=Gv(s,0,Jv(c[p>>2]|0,158,0)|0)|0;c[c[o>>2]>>2]=s;a[(c[o>>2]|0)+4>>0]=119;c[(c[o>>2]|0)+36>>2]=0;c[(c[q>>2]|0)+40>>2]=0;c[(c[q>>2]|0)+44>>2]=0;c[(c[q>>2]|0)+48>>2]=0;c[(c[o>>2]|0)+52>>2]=0;c[(c[o>>2]|0)+56>>2]=0;c[(c[o>>2]|0)+68>>2]=0;s=(c[o>>2]|0)+6|0;b[s>>1]=(e[s>>1]|0)&-129;s=(c[o>>2]|0)+6|0;b[s>>1]=e[s>>1]|0|16384;c[(c[(c[q>>2]|0)+52>>2]|0)+56>>2]=c[q>>2];c[(c[q>>2]|0)+60>>2]=0;c[(c[q>>2]|0)+64>>2]=0;c[n>>2]=0;s=c[n>>2]|0;i=t;return s|0}return 0}function Qy(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,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=i;i=i+208|0;Q=Y+56|0;P=Y+48|0;O=Y+40|0;N=Y+24|0;R=Y+16|0;p=Y+8|0;m=Y;q=Y+196|0;h=Y+192|0;r=Y+188|0;F=Y+184|0;u=Y+180|0;w=Y+176|0;x=Y+172|0;J=Y+168|0;A=Y+164|0;C=Y+160|0;t=Y+156|0;z=Y+152|0;G=Y+148|0;B=Y+144|0;l=Y+202|0;o=Y+140|0;k=Y+136|0;j=Y+200|0;s=Y+132|0;E=Y+128|0;n=Y+124|0;y=Y+120|0;M=Y+116|0;V=Y+112|0;I=Y+108|0;H=Y+104|0;W=Y+100|0;U=Y+96|0;v=Y+92|0;T=Y+88|0;S=Y+84|0;X=Y+80|0;L=Y+72|0;D=Y+64|0;K=Y+60|0;c[h>>2]=f;c[r>>2]=g;c[F>>2]=c[c[h>>2]>>2];c[t>>2]=c[c[F>>2]>>2];b[l>>1]=b[(c[r>>2]|0)+6>>1]|0;f=(c[r>>2]|0)+6|0;b[f>>1]=e[f>>1]|32;if(a[(c[t>>2]|0)+65>>0]|0){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}if((c[(c[r>>2]|0)+32>>2]|0)!=0?(e[l>>1]&32|0)==0:0){c[J>>2]=c[(c[r>>2]|0)+32>>2];c[A>>2]=c[c[r>>2]>>2];if((c[(c[h>>2]|0)+12>>2]|0)==132){l=c[F>>2]|0;Qv(l,c[(Sy(c[r>>2]|0)|0)+68>>2]|0,0)}Ix(c[F>>2]|0,c[J>>2]|0);c[u>>2]=0;c[C>>2]=(c[J>>2]|0)+8;a:while(1){if((c[u>>2]|0)>=(c[c[J>>2]>>2]|0)){j=38;break}if(!((d[(c[C>>2]|0)+36+1>>0]|0)>>>5&1)){if(Ty(c[h>>2]|0,c[C>>2]|0)|0){j=12;break}do if(!(c[(c[C>>2]|0)+16>>2]|0)){if(!(c[(c[C>>2]|0)+8>>2]|0)){c[k>>2]=c[(c[C>>2]|0)+20>>2];if(Zx(c[h>>2]|0,c[k>>2]|0)|0){j=16;break a}l=ph(c[t>>2]|0,72,0)|0;c[o>>2]=l;c[(c[C>>2]|0)+16>>2]=l;if(!(c[o>>2]|0)){j=18;break a}b[(c[o>>2]|0)+36>>1]=1;l=c[t>>2]|0;c[m>>2]=c[o>>2];l=Bh(l,30964,m)|0;c[c[o>>2]>>2]=l;while(1){if(!(c[(c[k>>2]|0)+52>>2]|0))break;c[k>>2]=c[(c[k>>2]|0)+52>>2]}Gx(c[F>>2]|0,c[c[k>>2]>>2]|0,(c[o>>2]|0)+34|0,(c[o>>2]|0)+4|0)|0;b[(c[o>>2]|0)+32>>1]=-1;b[(c[o>>2]|0)+38>>1]=200;l=(c[o>>2]|0)+42|0;a[l>>0]=d[l>>0]|2;break}l=_w(c[F>>2]|0,0,c[C>>2]|0)|0;c[o>>2]=l;c[(c[C>>2]|0)+16>>2]=l;if(!(c[o>>2]|0)){j=24;break a}if((e[(c[o>>2]|0)+36>>1]|0)==65535){j=26;break a}l=(c[o>>2]|0)+36|0;b[l>>1]=(b[l>>1]|0)+1<<16>>16;if((d[(c[o>>2]|0)+42>>0]&16|0)==0?(Uy(c[F>>2]|0,c[C>>2]|0)|0)!=0:0){j=29;break a}if((d[(c[o>>2]|0)+42>>0]&16|0)==0?(c[(c[o>>2]|0)+12>>2]|0)==0:0)break;if(zx(c[F>>2]|0,c[o>>2]|0)|0){j=33;break a}l=Hx(c[t>>2]|0,c[(c[o>>2]|0)+12>>2]|0,0)|0;c[(c[C>>2]|0)+20>>2]=l;b[j>>1]=b[(c[o>>2]|0)+34>>1]|0;b[(c[o>>2]|0)+34>>1]=-1;Zx(c[h>>2]|0,c[(c[C>>2]|0)+20>>2]|0)|0;b[(c[o>>2]|0)+34>>1]=b[j>>1]|0}while(0);if(Vy(c[F>>2]|0,c[C>>2]|0)|0){j=36;break}}c[u>>2]=(c[u>>2]|0)+1;c[C>>2]=(c[C>>2]|0)+72}if((j|0)==12){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==16){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==18){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==24){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==26){X=c[F>>2]|0;c[p>>2]=c[c[o>>2]>>2];Ah(X,30977,p);c[(c[C>>2]|0)+16>>2]=0;c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==29){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==33){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==36){c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}else if((j|0)==38){if((d[(c[t>>2]|0)+65>>0]|0)==0?(Wy(c[F>>2]|0,c[r>>2]|0)|0)==0:0){c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[c[A>>2]>>2]|0))break;c[z>>2]=c[(c[(c[A>>2]|0)+4>>2]|0)+((c[x>>2]|0)*20|0)>>2];if((d[c[z>>2]>>0]|0)==158)break;if((d[c[z>>2]>>0]|0)==122?(d[c[(c[z>>2]|0)+16>>2]>>0]|0)==158:0)break;c[x>>2]=(c[x>>2]|0)+1}if((c[x>>2]|0)<(c[c[A>>2]>>2]|0)){c[s>>2]=c[(c[A>>2]|0)+4>>2];c[E>>2]=0;c[n>>2]=c[(c[c[F>>2]>>2]|0)+24>>2];if(c[n>>2]&4)h=(c[n>>2]&64|0)==0;else h=0;c[y>>2]=h&1;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[c[A>>2]>>2]|0))break;c[z>>2]=c[(c[s>>2]|0)+((c[x>>2]|0)*20|0)>>2];c[G>>2]=c[(c[z>>2]|0)+16>>2];do if((d[c[z>>2]>>0]|0)!=158){if((d[c[z>>2]>>0]|0)==122?(d[c[G>>2]>>0]|0)==158:0){j=58;break}c[E>>2]=Gv(c[F>>2]|0,c[E>>2]|0,c[(c[s>>2]|0)+((c[x>>2]|0)*20|0)>>2]|0)|0;if(c[E>>2]|0){c[(c[(c[E>>2]|0)+4>>2]|0)+(((c[c[E>>2]>>2]|0)-1|0)*20|0)+4>>2]=c[(c[s>>2]|0)+((c[x>>2]|0)*20|0)+4>>2];c[(c[(c[E>>2]|0)+4>>2]|0)+(((c[c[E>>2]>>2]|0)-1|0)*20|0)+8>>2]=c[(c[s>>2]|0)+((c[x>>2]|0)*20|0)+8>>2];c[(c[s>>2]|0)+((c[x>>2]|0)*20|0)+4>>2]=0;c[(c[s>>2]|0)+((c[x>>2]|0)*20|0)+8>>2]=0}c[(c[s>>2]|0)+((c[x>>2]|0)*20|0)>>2]=0}else j=58;while(0);do if((j|0)==58){j=0;c[M>>2]=0;c[V>>2]=0;if((d[c[z>>2]>>0]|0)==122)c[V>>2]=c[(c[(c[z>>2]|0)+12>>2]|0)+8>>2];c[u>>2]=0;c[C>>2]=(c[J>>2]|0)+8;while(1){if((c[u>>2]|0)>=(c[c[J>>2]>>2]|0))break;c[I>>2]=c[(c[C>>2]|0)+16>>2];c[H>>2]=c[(c[C>>2]|0)+20>>2];c[W>>2]=c[(c[C>>2]|0)+12>>2];c[U>>2]=0;if(!(c[W>>2]|0))c[W>>2]=c[c[I>>2]>>2];if(a[(c[t>>2]|0)+65>>0]|0)break;if((c[H>>2]|0)!=0?(e[(c[H>>2]|0)+6>>1]&1024|0)!=0:0)j=72;else j=67;do if((j|0)==67){j=0;c[H>>2]=0;if((c[V>>2]|0)!=0?(Td(c[V>>2]|0,c[W>>2]|0)|0)!=0:0)break;c[v>>2]=Dh(c[t>>2]|0,c[(c[I>>2]|0)+64>>2]|0)|0;if((c[v>>2]|0)>=0)h=c[(c[(c[t>>2]|0)+16>>2]|0)+(c[v>>2]<<4)>>2]|0;else h=26308;c[U>>2]=h;j=72}while(0);b:do if((j|0)==72){j=0;c[w>>2]=0;while(1){if((c[w>>2]|0)>=(b[(c[I>>2]|0)+34>>1]|0))break b;c[T>>2]=c[(c[(c[I>>2]|0)+4>>2]|0)+((c[w>>2]|0)*24|0)>>2];if(!((c[V>>2]|0)!=0&(c[H>>2]|0)!=0?(Ly(c[(c[(c[c[H>>2]>>2]|0)+4>>2]|0)+((c[w>>2]|0)*20|0)+8>>2]|0,0,c[V>>2]|0,0)|0)==0:0))j=76;do if((j|0)==76){j=0;if((e[(c[r>>2]|0)+6>>1]&32768|0)==0?(d[(c[(c[I>>2]|0)+4>>2]|0)+((c[w>>2]|0)*24|0)+23>>0]&2|0)!=0:0)break;c[M>>2]=1;if((c[u>>2]|0)>0&(c[V>>2]|0)==0){if((d[(c[C>>2]|0)+36>>0]&4|0)!=0?(Xy(c[J>>2]|0,c[u>>2]|0,c[T>>2]|0,0,0)|0)!=0:0)break;if((Yy(c[(c[C>>2]|0)+52>>2]|0,c[T>>2]|0)|0)>=0)break}c[G>>2]=Jv(c[t>>2]|0,27,c[T>>2]|0)|0;c[S>>2]=c[T>>2];c[X>>2]=0;do if(c[y>>2]|0)j=84;else{if((c[c[J>>2]>>2]|0)>1){j=84;break}c[B>>2]=c[G>>2]}while(0);do if((j|0)==84){j=0;c[D>>2]=Jv(c[t>>2]|0,27,c[W>>2]|0)|0;c[B>>2]=rv(c[F>>2]|0,122,c[D>>2]|0,c[G>>2]|0,0)|0;if(c[U>>2]|0){c[D>>2]=Jv(c[t>>2]|0,27,c[U>>2]|0)|0;c[B>>2]=rv(c[F>>2]|0,122,c[D>>2]|0,c[B>>2]|0,0)|0}if(!(c[y>>2]|0))break;p=c[t>>2]|0;o=c[T>>2]|0;c[R>>2]=c[W>>2];c[R+4>>2]=o;c[S>>2]=Bh(p,31016,R)|0;c[X>>2]=c[S>>2]}while(0);c[E>>2]=Gv(c[F>>2]|0,c[E>>2]|0,c[B>>2]|0)|0;Cy(L,c[S>>2]|0);Hv(c[F>>2]|0,c[E>>2]|0,L,0);do if(c[E>>2]|0){if(!(e[(c[r>>2]|0)+6>>1]&1024))break;c[K>>2]=(c[(c[E>>2]|0)+4>>2]|0)+(((c[c[E>>2]>>2]|0)-1|0)*20|0);h=c[t>>2]|0;if(c[H>>2]|0){p=nh(h,c[(c[(c[c[H>>2]>>2]|0)+4>>2]|0)+((c[w>>2]|0)*20|0)+8>>2]|0)|0;c[(c[K>>2]|0)+8>>2]=p}else{o=c[W>>2]|0;p=c[S>>2]|0;c[N>>2]=c[U>>2];c[N+4>>2]=o;c[N+8>>2]=p;p=Bh(h,31022,N)|0;c[(c[K>>2]|0)+8>>2]=p}p=(c[K>>2]|0)+13|0;a[p>>0]=a[p>>0]&-3|2}while(0);Sf(c[t>>2]|0,c[X>>2]|0)}while(0);c[w>>2]=(c[w>>2]|0)+1}}while(0);c[u>>2]=(c[u>>2]|0)+1;c[C>>2]=(c[C>>2]|0)+72}if(!(c[M>>2]|0)){h=c[F>>2]|0;if(c[V>>2]|0){c[O>>2]=c[V>>2];Ah(h,31031,O);break}else{Ah(h,31049,P);break}}}while(0);c[x>>2]=(c[x>>2]|0)+1}Vu(c[t>>2]|0,c[A>>2]|0);c[c[r>>2]>>2]=c[E>>2]}if((c[c[r>>2]>>2]|0)!=0?(c[c[c[r>>2]>>2]>>2]|0)>(c[(c[t>>2]|0)+88+8>>2]|0):0){Ah(c[F>>2]|0,31069,Q);c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}c[q>>2]=0;X=c[q>>2]|0;i=Y;return X|0}c[q>>2]=2;X=c[q>>2]|0;i=Y;return X|0}}c[q>>2]=1;X=c[q>>2]|0;i=Y;return X|0}function Ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=i;i=i+16|0;h=f+12|0;g=f+8|0;d=f+4|0;e=f;c[h>>2]=a;c[g>>2]=b;c[d>>2]=c[c[h>>2]>>2];c[e>>2]=c[(Sy(c[g>>2]|0)|0)+68>>2];if(!(c[e>>2]|0)){i=f;return}c[(c[d>>2]|0)+536>>2]=c[(c[e>>2]|0)+4>>2];i=f;return}function Sy(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;while(1){a=c[b>>2]|0;if(!(c[(c[b>>2]|0)+56>>2]|0))break;c[b>>2]=c[a+56>>2]}i=d;return a|0}function Ty(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+96|0;u=B+16|0;o=B+8|0;j=B;v=B+88|0;w=B+84|0;k=B+80|0;y=B+76|0;h=B+72|0;x=B+68|0;p=B+64|0;t=B+60|0;r=B+56|0;A=B+52|0;s=B+48|0;q=B+44|0;z=B+40|0;l=B+36|0;n=B+32|0;m=B+28|0;c[w>>2]=f;c[k>>2]=g;c[y>>2]=c[c[w>>2]>>2];c[h>>2]=c[c[y>>2]>>2];c[x>>2]=kz(c[(c[y>>2]|0)+536>>2]|0,c[k>>2]|0,p)|0;if(c[x>>2]|0){g=c[y>>2]|0;if(c[(c[x>>2]|0)+12>>2]|0){A=c[(c[x>>2]|0)+12>>2]|0;c[j>>2]=c[c[x>>2]>>2];Ah(g,A,j);c[v>>2]=1;A=c[v>>2]|0;i=B;return A|0}if(Uy(g,c[k>>2]|0)|0){c[v>>2]=1;A=c[v>>2]|0;i=B;return A|0}j=ph(c[h>>2]|0,72,0)|0;c[t>>2]=j; +c[(c[k>>2]|0)+16>>2]=j;if(!(c[t>>2]|0)){c[v>>2]=2;A=c[v>>2]|0;i=B;return A|0}b[(c[t>>2]|0)+36>>1]=1;j=nh(c[h>>2]|0,c[c[x>>2]>>2]|0)|0;c[c[t>>2]>>2]=j;b[(c[t>>2]|0)+32>>1]=-1;b[(c[t>>2]|0)+38>>1]=200;j=(c[t>>2]|0)+42|0;a[j>>0]=d[j>>0]|66;j=Hx(c[h>>2]|0,c[(c[x>>2]|0)+8>>2]|0,0)|0;c[(c[k>>2]|0)+20>>2]=j;if(a[(c[h>>2]|0)+65>>0]|0){c[v>>2]=7;A=c[v>>2]|0;i=B;return A|0}c[A>>2]=c[(c[k>>2]|0)+20>>2];if((d[(c[A>>2]|0)+4>>0]|0)==116)g=1;else g=(d[(c[A>>2]|0)+4>>0]|0)==115;c[q>>2]=g&1;a:do if(c[q>>2]|0){c[n>>2]=c[(c[(c[k>>2]|0)+20>>2]|0)+32>>2];c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[c[n>>2]>>2]|0))break a;c[m>>2]=(c[n>>2]|0)+8+((c[l>>2]|0)*72|0);if(((c[(c[m>>2]|0)+4>>2]|0)==0?(c[(c[m>>2]|0)+8>>2]|0)!=0:0)?0==(Td(c[(c[m>>2]|0)+8>>2]|0,c[c[x>>2]>>2]|0)|0):0){c[(c[m>>2]|0)+16>>2]=c[t>>2];k=(c[m>>2]|0)+36+1|0;a[k>>0]=a[k>>0]&-33|32;k=(c[t>>2]|0)+36|0;b[k>>1]=(b[k>>1]|0)+1<<16>>16;k=(c[A>>2]|0)+6|0;b[k>>1]=e[k>>1]|8192}c[l>>2]=(c[l>>2]|0)+1}}while(0);if((e[(c[t>>2]|0)+36>>1]|0)>2){A=c[y>>2]|0;c[o>>2]=c[c[x>>2]>>2];Ah(A,31310,o);c[v>>2]=1;A=c[v>>2]|0;i=B;return A|0}c[(c[x>>2]|0)+12>>2]=31353;c[z>>2]=c[(c[y>>2]|0)+536>>2];c[(c[y>>2]|0)+536>>2]=c[p>>2];g=c[A>>2]|0;if(c[q>>2]|0)g=c[g+52>>2]|0;Zx(c[w>>2]|0,g)|0;c[(c[y>>2]|0)+536>>2]=c[p>>2];c[s>>2]=c[A>>2];while(1){g=c[s>>2]|0;if(!(c[(c[s>>2]|0)+52>>2]|0))break;c[s>>2]=c[g+52>>2]}c[r>>2]=c[g>>2];if(c[(c[x>>2]|0)+4>>2]|0){if((c[r>>2]|0)!=0?(c[c[r>>2]>>2]|0)!=(c[c[(c[x>>2]|0)+4>>2]>>2]|0):0){A=c[y>>2]|0;t=c[c[r>>2]>>2]|0;w=c[c[(c[x>>2]|0)+4>>2]>>2]|0;c[u>>2]=c[c[x>>2]>>2];c[u+4>>2]=t;c[u+8>>2]=w;Ah(A,31376,u);c[(c[y>>2]|0)+536>>2]=c[z>>2];c[v>>2]=1;A=c[v>>2]|0;i=B;return A|0}c[r>>2]=c[(c[x>>2]|0)+4>>2]}Gx(c[y>>2]|0,c[r>>2]|0,(c[t>>2]|0)+34|0,(c[t>>2]|0)+4|0)|0;if(c[q>>2]|0){g=(c[x>>2]|0)+12|0;if(e[(c[A>>2]|0)+6>>1]&8192)c[g>>2]=31414;else c[g>>2]=31448;Zx(c[w>>2]|0,c[A>>2]|0)|0}c[(c[x>>2]|0)+12>>2]=0;c[(c[y>>2]|0)+536>>2]=c[z>>2]}c[v>>2]=0;A=c[v>>2]|0;i=B;return A|0}function Uy(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;e=j+12|0;f=j+8|0;g=j+4|0;c[f>>2]=a;c[g>>2]=b;if((d[(c[g>>2]|0)+36+1>>0]|0)>>>2&1){a=c[f>>2]|0;c[h>>2]=c[(c[g>>2]|0)+8>>2];Ah(a,31287,h);c[e>>2]=1;h=c[e>>2]|0;i=j;return h|0}else{c[e>>2]=0;h=c[e>>2]|0;i=j;return h|0}return 0}function Vy(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;l=n;f=n+28|0;g=n+24|0;h=n+20|0;k=n+16|0;m=n+12|0;j=n+8|0;c[g>>2]=b;c[h>>2]=e;do if((c[(c[h>>2]|0)+16>>2]|0)!=0?((d[(c[h>>2]|0)+36+1>>0]|0)>>>1&1|0)!=0:0){c[k>>2]=c[(c[h>>2]|0)+16>>2];c[m>>2]=c[(c[h>>2]|0)+64>>2];c[j>>2]=c[(c[k>>2]|0)+8>>2];while(1){if(!(c[j>>2]|0))break;if(!(Td(c[c[j>>2]>>2]|0,c[m>>2]|0)|0))break;c[j>>2]=c[(c[j>>2]|0)+20>>2]}if(c[j>>2]|0){c[(c[h>>2]|0)+68>>2]=c[j>>2];break}k=c[g>>2]|0;c[l>>2]=c[m>>2];c[l+4>>2]=0;Ah(k,31269,l);a[(c[g>>2]|0)+17>>0]=1;c[f>>2]=1;m=c[f>>2]|0;i=n;return m|0}while(0);c[f>>2]=0;m=c[f>>2]|0;i=n;return m|0}function Wy(a,e){a=a|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+96|0;A=C+16|0;z=C+8|0;y=C;w=C+92|0;x=C+88|0;f=C+84|0;u=C+80|0;g=C+76|0;o=C+72|0;p=C+68|0;s=C+64|0;q=C+60|0;t=C+56|0;n=C+52|0;v=C+48|0;h=C+44|0;k=C+40|0;r=C+36|0;B=C+32|0;j=C+28|0;l=C+24|0;m=C+20|0;c[x>>2]=a;c[f>>2]=e;c[u>>2]=c[(c[f>>2]|0)+32>>2];c[p>>2]=(c[u>>2]|0)+8;c[s>>2]=(c[p>>2]|0)+72;c[g>>2]=0;a:while(1){if((c[g>>2]|0)>=((c[c[u>>2]>>2]|0)-1|0)){f=28;break}c[q>>2]=c[(c[p>>2]|0)+16>>2];c[t>>2]=c[(c[s>>2]|0)+16>>2];b:do if(!((c[q>>2]|0)==0|(c[t>>2]|0)==0)){c[n>>2]=(d[(c[s>>2]|0)+36>>0]&32|0)!=0&1;c:do if(d[(c[s>>2]|0)+36>>0]&4){if(c[(c[s>>2]|0)+48>>2]|0){f=7;break a}if(c[(c[s>>2]|0)+52>>2]|0){f=7;break a}c[o>>2]=0;while(1){if((c[o>>2]|0)>=(b[(c[t>>2]|0)+34>>1]|0))break c;c[v>>2]=c[(c[(c[t>>2]|0)+4>>2]|0)+((c[o>>2]|0)*24|0)>>2];if(Xy(c[u>>2]|0,(c[g>>2]|0)+1|0,c[v>>2]|0,h,k)|0)_y(c[x>>2]|0,c[u>>2]|0,c[h>>2]|0,c[k>>2]|0,(c[g>>2]|0)+1|0,c[o>>2]|0,c[n>>2]|0,(c[f>>2]|0)+36|0);c[o>>2]=(c[o>>2]|0)+1}}while(0);if((c[(c[s>>2]|0)+48>>2]|0)!=0?(c[(c[s>>2]|0)+52>>2]|0)!=0:0){f=15;break a}if(c[(c[s>>2]|0)+48>>2]|0){if(c[n>>2]|0)$y(c[(c[s>>2]|0)+48>>2]|0,c[(c[s>>2]|0)+44>>2]|0);a=az(c[c[x>>2]>>2]|0,c[(c[f>>2]|0)+36>>2]|0,c[(c[s>>2]|0)+48>>2]|0)|0;c[(c[f>>2]|0)+36>>2]=a;c[(c[s>>2]|0)+48>>2]=0}if(c[(c[s>>2]|0)+52>>2]|0){c[r>>2]=c[(c[s>>2]|0)+52>>2];c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[(c[r>>2]|0)+4>>2]|0))break b;c[B>>2]=c[(c[c[r>>2]>>2]|0)+(c[o>>2]<<3)>>2];c[m>>2]=Zy(c[t>>2]|0,c[B>>2]|0)|0;if((c[m>>2]|0)<0){f=25;break a}if(!(Xy(c[u>>2]|0,(c[g>>2]|0)+1|0,c[B>>2]|0,j,l)|0)){f=25;break a}_y(c[x>>2]|0,c[u>>2]|0,c[j>>2]|0,c[l>>2]|0,(c[g>>2]|0)+1|0,c[m>>2]|0,c[n>>2]|0,(c[f>>2]|0)+36|0);c[o>>2]=(c[o>>2]|0)+1}}}while(0);c[g>>2]=(c[g>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+72;c[p>>2]=(c[p>>2]|0)+72}if((f|0)==7){B=c[x>>2]|0;c[y>>2]=0;Ah(B,31100,y);c[w>>2]=1;B=c[w>>2]|0;i=C;return B|0}else if((f|0)==15){Ah(c[x>>2]|0,31150,z);c[w>>2]=1;B=c[w>>2]|0;i=C;return B|0}else if((f|0)==25){z=c[x>>2]|0;c[A>>2]=c[B>>2];Ah(z,31205,A);c[w>>2]=1;B=c[w>>2]|0;i=C;return B|0}else if((f|0)==28){c[w>>2]=0;B=c[w>>2]|0;i=C;return B|0}return 0}function Xy(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;g=q+28|0;h=q+24|0;j=q+20|0;k=q+16|0;l=q+12|0;m=q+8|0;n=q+4|0;o=q;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[j>>2]|0)){p=8;break}c[o>>2]=Zy(c[(c[h>>2]|0)+8+((c[n>>2]|0)*72|0)+16>>2]|0,c[k>>2]|0)|0;if((c[o>>2]|0)>=0)break;c[n>>2]=(c[n>>2]|0)+1}if((p|0)==8){c[g>>2]=0;p=c[g>>2]|0;i=q;return p|0}if(c[l>>2]|0){c[c[l>>2]>>2]=c[n>>2];c[c[m>>2]>>2]=c[o>>2]}c[g>>2]=1;p=c[g>>2]|0;i=q;return p|0}function Yy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+12|0;d=h+8|0;e=h+4|0;f=h;c[d>>2]=a;c[e>>2]=b;if(!(c[d>>2]|0)){c[g>>2]=-1;g=c[g>>2]|0;i=h;return g|0}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[d>>2]|0)+4>>2]|0)){a=8;break}a=(Td(c[(c[c[d>>2]>>2]|0)+(c[f>>2]<<3)>>2]|0,c[e>>2]|0)|0)==0;b=c[f>>2]|0;if(a){a=6;break}c[f>>2]=b+1}if((a|0)==6){c[g>>2]=b;g=c[g>>2]|0;i=h;return g|0}else if((a|0)==8){c[g>>2]=-1;g=c[g>>2]|0;i=h;return g|0}return 0}function Zy(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j+12|0;e=j+8|0;f=j+4|0;g=j;c[e>>2]=a;c[f>>2]=d;c[g>>2]=0;while(1){if((c[g>>2]|0)>=(b[(c[e>>2]|0)+34>>1]|0)){a=6;break}a=(Td(c[(c[(c[e>>2]|0)+4>>2]|0)+((c[g>>2]|0)*24|0)>>2]|0,c[f>>2]|0)|0)==0;d=c[g>>2]|0;if(a){a=4;break}c[g>>2]=d+1}if((a|0)==4){c[h>>2]=d;h=c[h>>2]|0;i=j;return h|0}else if((a|0)==6){c[h>>2]=-1;h=c[h>>2]|0;i=j;return h|0}return 0}function _y(a,d,e,f,g,h,j,k){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;p=i;i=i+48|0;s=p+44|0;v=p+40|0;x=p+36|0;w=p+32|0;u=p+28|0;t=p+24|0;q=p+20|0;l=p+16|0;m=p+12|0;r=p+8|0;n=p+4|0;o=p;c[s>>2]=a;c[v>>2]=d;c[x>>2]=e;c[w>>2]=f;c[u>>2]=g;c[t>>2]=h;c[q>>2]=j;c[l>>2]=k;c[m>>2]=c[c[s>>2]>>2];c[r>>2]=jz(c[m>>2]|0,c[v>>2]|0,c[x>>2]|0,c[w>>2]|0)|0;c[n>>2]=jz(c[m>>2]|0,c[v>>2]|0,c[u>>2]|0,c[t>>2]|0)|0;c[o>>2]=rv(c[s>>2]|0,79,c[r>>2]|0,c[n>>2]|0,0)|0;if(!((c[o>>2]|0)!=0&(c[q>>2]|0)!=0)){v=c[m>>2]|0;x=c[l>>2]|0;x=c[x>>2]|0;w=c[o>>2]|0;w=az(v,x,w)|0;x=c[l>>2]|0;c[x>>2]=w;i=p;return}v=(c[o>>2]|0)+4|0;c[v>>2]=c[v>>2]|1;b[(c[o>>2]|0)+36>>1]=c[(c[n>>2]|0)+28>>2];v=c[m>>2]|0;x=c[l>>2]|0;x=c[x>>2]|0;w=c[o>>2]|0;w=az(v,x,w)|0;x=c[l>>2]|0;c[x>>2]=w;i=p;return}function $y(a,e){a=a|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=a;c[g>>2]=e;while(1){if(!(c[f>>2]|0))break;a=(c[f>>2]|0)+4|0;c[a>>2]=c[a>>2]|1;b[(c[f>>2]|0)+36>>1]=c[g>>2];a:do if((d[c[f>>2]>>0]|0|0)==151?(c[(c[f>>2]|0)+20>>2]|0)!=0:0){c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[c[(c[f>>2]|0)+20>>2]>>2]|0))break a;$y(c[(c[(c[(c[f>>2]|0)+20>>2]|0)+4>>2]|0)+((c[h>>2]|0)*20|0)>>2]|0,c[g>>2]|0);c[h>>2]=(c[h>>2]|0)+1}}while(0);$y(c[(c[f>>2]|0)+12>>2]|0,c[g>>2]|0);c[f>>2]=c[(c[f>>2]|0)+16>>2]}i=j;return}function az(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;a=c[h>>2]|0;if(!(c[g>>2]|0)){c[e>>2]=a;j=c[e>>2]|0;i=k;return j|0}b=c[g>>2]|0;if(!a){c[e>>2]=b;j=c[e>>2]|0;i=k;return j|0}if((bz(b)|0)==0?(bz(c[h>>2]|0)|0)==0:0){c[j>>2]=cz(c[f>>2]|0,72,0,0)|0;dz(c[f>>2]|0,c[j>>2]|0,c[g>>2]|0,c[h>>2]|0);c[e>>2]=c[j>>2];j=c[e>>2]|0;i=k;return j|0}Zu(c[f>>2]|0,c[g>>2]|0);Zu(c[f>>2]|0,c[h>>2]|0);c[e>>2]=cz(c[f>>2]|0,132,5092,0)|0;j=c[e>>2]|0;i=k;return j|0}function bz(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=0;do if(!(c[(c[d>>2]|0)+4>>2]&1))if(ky(c[d>>2]|0,e)|0){c[b>>2]=(c[e>>2]|0)==0&1;break}else{c[b>>2]=0;break}else c[b>>2]=0;while(0);i=f;return c[b>>2]|0}function cz(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;p=q+12|0;o=q+8|0;n=q+4|0;m=q;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[o>>2]=0;c[n>>2]=0;do if(c[k>>2]|0){if(((c[j>>2]|0)==132?(c[c[k>>2]>>2]|0)!=0:0)?(Li(c[c[k>>2]>>2]|0,n)|0)!=0:0)break;c[o>>2]=(c[(c[k>>2]|0)+4>>2]|0)+1}while(0);c[p>>2]=Fw(c[h>>2]|0,48+(c[o>>2]|0)|0,0)|0;if(!(c[p>>2]|0)){p=c[p>>2]|0;i=q;return p|0}h=c[p>>2]|0;d=h+48|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(d|0));a[c[p>>2]>>0]=c[j>>2];b[(c[p>>2]|0)+34>>1]=-1;do if(c[k>>2]|0){h=c[p>>2]|0;if(!(c[o>>2]|0)){o=h+4|0;c[o>>2]=c[o>>2]|1024;c[(c[p>>2]|0)+8>>2]=c[n>>2];break}c[(c[p>>2]|0)+8>>2]=h+48;if(c[(c[k>>2]|0)+4>>2]|0)iR(c[(c[p>>2]|0)+8>>2]|0,c[c[k>>2]>>2]|0,c[(c[k>>2]|0)+4>>2]|0)|0;a[(c[(c[p>>2]|0)+8>>2]|0)+(c[(c[k>>2]|0)+4>>2]|0)>>0]=0;if(((c[l>>2]|0)!=0&(c[o>>2]|0)>=3?(o=a[c[c[k>>2]>>2]>>0]|0,c[m>>2]=o,(o|0)==39|(c[m>>2]|0)==34|(c[m>>2]|0)==91|(c[m>>2]|0)==96):0)?(Jw(c[(c[p>>2]|0)+8>>2]|0)|0,(c[m>>2]|0)==34):0){o=(c[p>>2]|0)+4|0;c[o>>2]=c[o>>2]|64}}while(0);c[(c[p>>2]|0)+24>>2]=1;p=c[p>>2]|0;i=q;return p|0}function dz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if(!(c[g>>2]|0)){Zu(c[f>>2]|0,c[h>>2]|0);Zu(c[f>>2]|0,c[j>>2]|0);i=k;return}if(c[j>>2]|0){c[(c[g>>2]|0)+16>>2]=c[j>>2];b=(c[g>>2]|0)+4|0;c[b>>2]=c[b>>2]|2097408&c[(c[j>>2]|0)+4>>2]}if(c[h>>2]|0){c[(c[g>>2]|0)+12>>2]=c[h>>2];b=(c[g>>2]|0)+4|0;c[b>>2]=c[b>>2]|2097408&c[(c[h>>2]|0)+4>>2]}ez(c[g>>2]|0);i=k;return}function ez(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=0;fz(c[(c[b>>2]|0)+12>>2]|0,d);fz(c[(c[b>>2]|0)+16>>2]|0,d);a=(c[b>>2]|0)+20|0;if(!(c[(c[b>>2]|0)+4>>2]&2048)){if(c[a>>2]|0){hz(c[(c[b>>2]|0)+20>>2]|0,d);f=2097408&(iz(c[(c[b>>2]|0)+20>>2]|0)|0);a=(c[b>>2]|0)+4|0;c[a>>2]=c[a>>2]|f}}else gz(c[a>>2]|0,d);c[(c[b>>2]|0)+24>>2]=(c[d>>2]|0)+1;i=e;return}function fz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(!(c[d>>2]|0)){i=f;return}if((c[(c[d>>2]|0)+24>>2]|0)<=(c[c[e>>2]>>2]|0)){i=f;return}c[c[e>>2]>>2]=c[(c[d>>2]|0)+24>>2];i=f;return}function gz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(!(c[d>>2]|0)){i=f;return}fz(c[(c[d>>2]|0)+36>>2]|0,c[e>>2]|0);fz(c[(c[d>>2]|0)+44>>2]|0,c[e>>2]|0);fz(c[(c[d>>2]|0)+60>>2]|0,c[e>>2]|0);fz(c[(c[d>>2]|0)+64>>2]|0,c[e>>2]|0);hz(c[c[d>>2]>>2]|0,c[e>>2]|0);hz(c[(c[d>>2]|0)+40>>2]|0,c[e>>2]|0);hz(c[(c[d>>2]|0)+48>>2]|0,c[e>>2]|0);gz(c[(c[d>>2]|0)+52>>2]|0,c[e>>2]|0);i=f;return}function hz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(!(c[d>>2]|0)){i=g;return}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[d>>2]>>2]|0))break;fz(c[(c[(c[d>>2]|0)+4>>2]|0)+((c[f>>2]|0)*20|0)>>2]|0,c[e>>2]|0);c[f>>2]=(c[f>>2]|0)+1}i=g;return}function iz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;d=g+8|0;e=g+4|0;f=g;c[b>>2]=a;c[e>>2]=0;if(!(c[b>>2]|0)){a=c[e>>2]|0;i=g;return a|0}c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[c[b>>2]>>2]|0))break;c[f>>2]=c[(c[(c[b>>2]|0)+4>>2]|0)+((c[d>>2]|0)*20|0)>>2];if(c[f>>2]|0)c[e>>2]=c[e>>2]|c[(c[f>>2]|0)+4>>2];c[d>>2]=(c[d>>2]|0)+1}a=c[e>>2]|0;i=g;return a|0}function jz(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;n=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[n>>2]=a;c[g>>2]=d;c[h>>2]=e;c[j>>2]=f;c[k>>2]=cz(c[n>>2]|0,152,0,0)|0;if(!(c[k>>2]|0)){n=c[k>>2]|0;i=m;return n|0}c[l>>2]=(c[g>>2]|0)+8+((c[h>>2]|0)*72|0);c[(c[k>>2]|0)+44>>2]=c[(c[l>>2]|0)+16>>2];c[(c[k>>2]|0)+28>>2]=c[(c[l>>2]|0)+44>>2];if((b[(c[(c[k>>2]|0)+44>>2]|0)+32>>1]|0)==(c[j>>2]|0))b[(c[k>>2]|0)+32>>1]=-1;else{b[(c[k>>2]|0)+32>>1]=c[j>>2];e=lR(1,0,((c[j>>2]|0)>=64?63:c[j>>2]|0)|0)|0;n=(c[l>>2]|0)+56|0;l=n;d=c[l+4>>2]|C;c[n>>2]=c[l>>2]|e;c[n+4>>2]=d}n=(c[k>>2]|0)+4|0;c[n>>2]=c[n>>2]|4;n=c[k>>2]|0;i=m;return n|0}function kz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+24|0;f=m+20|0;g=m+16|0;h=m+12|0;l=m+8|0;k=m+4|0;j=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;a:do if((c[(c[g>>2]|0)+4>>2]|0)==0?(d=c[(c[g>>2]|0)+8>>2]|0,c[l>>2]=d,(d|0)!=0):0){c[k>>2]=c[f>>2];b:while(1){if(!(c[k>>2]|0))break a;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[c[k>>2]>>2]|0))break;if(!(Td(c[l>>2]|0,c[(c[k>>2]|0)+8+(c[j>>2]<<4)>>2]|0)|0))break b;c[j>>2]=(c[j>>2]|0)+1}c[k>>2]=c[(c[k>>2]|0)+4>>2]}c[c[h>>2]>>2]=c[k>>2];c[e>>2]=(c[k>>2]|0)+8+(c[j>>2]<<4);l=c[e>>2]|0;i=m;return l|0}while(0);c[e>>2]=0;l=c[e>>2]|0;i=m;return l|0}function lz(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r+36|0;h=r+32|0;j=r+28|0;k=r+24|0;n=r+20|0;l=r+16|0;m=r+12|0;o=r+8|0;p=r+4|0;q=r;c[h>>2]=a;c[j>>2]=e;c[k>>2]=f;if(!(c[j>>2]|0)){c[g>>2]=0;q=c[g>>2]|0;i=r;return q|0}if((c[c[j>>2]>>2]|0)>0)a=((c[c[j>>2]>>2]|0)-1|0)*72|0;else a=0;c[m>>2]=80+a;m=c[m>>2]|0;c[n>>2]=Fw(c[h>>2]|0,m,((m|0)<0)<<31>>31)|0;if(!(c[n>>2]|0)){c[g>>2]=0;q=c[g>>2]|0;i=r;return q|0}m=c[c[j>>2]>>2]|0;c[(c[n>>2]|0)+4>>2]=m;c[c[n>>2]>>2]=m;c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[c[j>>2]>>2]|0))break;c[o>>2]=(c[n>>2]|0)+8+((c[l>>2]|0)*72|0);c[p>>2]=(c[j>>2]|0)+8+((c[l>>2]|0)*72|0);c[c[o>>2]>>2]=c[c[p>>2]>>2];m=nh(c[h>>2]|0,c[(c[p>>2]|0)+4>>2]|0)|0;c[(c[o>>2]|0)+4>>2]=m;m=nh(c[h>>2]|0,c[(c[p>>2]|0)+8>>2]|0)|0;c[(c[o>>2]|0)+8>>2]=m;m=nh(c[h>>2]|0,c[(c[p>>2]|0)+12>>2]|0)|0;c[(c[o>>2]|0)+12>>2]=m;c[(c[o>>2]|0)+36>>2]=c[(c[p>>2]|0)+36>>2];c[(c[o>>2]|0)+44>>2]=c[(c[p>>2]|0)+44>>2];c[(c[o>>2]|0)+24>>2]=c[(c[p>>2]|0)+24>>2];c[(c[o>>2]|0)+28>>2]=c[(c[p>>2]|0)+28>>2];if((d[(c[o>>2]|0)+36+1>>0]|0)>>>1&1){m=nh(c[h>>2]|0,c[(c[p>>2]|0)+64>>2]|0)|0;c[(c[o>>2]|0)+64>>2]=m}c[(c[o>>2]|0)+68>>2]=c[(c[p>>2]|0)+68>>2];if((d[(c[o>>2]|0)+36+1>>0]|0)>>>2&1){m=vy(c[h>>2]|0,c[(c[p>>2]|0)+64>>2]|0,c[k>>2]|0)|0;c[(c[o>>2]|0)+64>>2]=m}m=c[(c[p>>2]|0)+16>>2]|0;c[(c[o>>2]|0)+16>>2]=m;c[q>>2]=m;if(c[q>>2]|0){m=(c[q>>2]|0)+36|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16}f=Hx(c[h>>2]|0,c[(c[p>>2]|0)+20>>2]|0,c[k>>2]|0)|0;c[(c[o>>2]|0)+20>>2]=f;f=ny(c[h>>2]|0,c[(c[p>>2]|0)+48>>2]|0,c[k>>2]|0)|0;c[(c[o>>2]|0)+48>>2]=f;f=nz(c[h>>2]|0,c[(c[p>>2]|0)+52>>2]|0)|0;c[(c[o>>2]|0)+52>>2]=f;f=(c[p>>2]|0)+56|0;e=c[f+4>>2]|0;m=(c[o>>2]|0)+56|0;c[m>>2]=c[f>>2];c[m+4>>2]=e;c[l>>2]=(c[l>>2]|0)+1}c[g>>2]=c[n>>2];q=c[g>>2]|0;i=r;return q|0}function mz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;h=j+8|0;g=j+4|0;f=j;c[d>>2]=a;c[e>>2]=b;c[h>>2]=0;if(!(c[e>>2]|0)){h=c[h>>2]|0;i=j;return h|0}c[g>>2]=24+((c[c[e>>2]>>2]|0)-1<<4);b=c[g>>2]|0;c[h>>2]=ph(c[d>>2]|0,b,((b|0)<0)<<31>>31)|0;if(!(c[h>>2]|0)){h=c[h>>2]|0;i=j;return h|0}c[c[h>>2]>>2]=c[c[e>>2]>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0))break;b=Hx(c[d>>2]|0,c[(c[e>>2]|0)+8+(c[f>>2]<<4)+8>>2]|0,0)|0;c[(c[h>>2]|0)+8+(c[f>>2]<<4)+8>>2]=b;b=vy(c[d>>2]|0,c[(c[e>>2]|0)+8+(c[f>>2]<<4)+4>>2]|0,0)|0;c[(c[h>>2]|0)+8+(c[f>>2]<<4)+4>>2]=b;b=nh(c[d>>2]|0,c[(c[e>>2]|0)+8+(c[f>>2]<<4)>>2]|0)|0;c[(c[h>>2]|0)+8+(c[f>>2]<<4)>>2]=b;c[f>>2]=(c[f>>2]|0)+1}h=c[h>>2]|0;i=j;return h|0}function nz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;d=l+24|0;e=l+20|0;f=l+16|0;h=l+12|0;g=l+8|0;j=l+4|0;k=l;c[e>>2]=a;c[f>>2]=b;if(!(c[f>>2]|0)){c[d>>2]=0;k=c[d>>2]|0;i=l;return k|0}c[h>>2]=Fw(c[e>>2]|0,8,0)|0;if(!(c[h>>2]|0)){c[d>>2]=0;k=c[d>>2]|0;i=l;return k|0}c[(c[h>>2]|0)+4>>2]=c[(c[f>>2]|0)+4>>2];b=Fw(c[e>>2]|0,c[(c[f>>2]|0)+4>>2]<<3,0)|0;c[c[h>>2]>>2]=b;if(!(c[c[h>>2]>>2]|0)){Sf(c[e>>2]|0,c[h>>2]|0);c[d>>2]=0;k=c[d>>2]|0;i=l;return k|0}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[f>>2]|0)+4>>2]|0))break;c[j>>2]=(c[c[h>>2]>>2]|0)+(c[g>>2]<<3);c[k>>2]=(c[c[f>>2]>>2]|0)+(c[g>>2]<<3);b=nh(c[e>>2]|0,c[c[k>>2]>>2]|0)|0;c[c[j>>2]>>2]=b;c[(c[j>>2]|0)+4>>2]=c[(c[k>>2]|0)+4>>2];c[g>>2]=(c[g>>2]|0)+1}c[d>>2]=c[h>>2];k=c[d>>2]|0;i=l;return k|0}function oz(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+144|0;A=N+32|0;K=N+24|0;J=N+16|0;m=N+8|0;l=N;E=N+132|0;F=N+128|0;n=N+124|0;o=N+120|0;p=N+116|0;G=N+112|0;z=N+96|0;H=N+92|0;I=N+88|0;q=N+84|0;v=N+80|0;L=N+76|0;M=N+72|0;t=N+68|0;k=N+64|0;B=N+60|0;s=N+56|0;y=N+136|0;C=N+52|0;x=N+48|0;r=N+44|0;u=N+40|0;w=N+36|0;c[F>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[G>>2]=j;c[q>>2]=c[(c[n>>2]|0)+52>>2];c[v>>2]=c[(c[n>>2]|0)+48>>2];c[L>>2]=0;c[k>>2]=c[(c[F>>2]|0)+328>>2];while(1){if(!(c[k>>2]|0))break;if((c[(c[k>>2]|0)+4>>2]|0)==(c[n>>2]|0)){D=4;break}c[k>>2]=c[(c[k>>2]|0)+8>>2]}if((D|0)==4){M=c[F>>2]|0;c[l>>2]=c[c[n>>2]>>2];M=Bh(M,31513,l)|0;c[c[G>>2]>>2]=M;c[E>>2]=6;M=c[E>>2]|0;i=N;return M|0}h=c[F>>2]|0;c[m>>2]=c[c[n>>2]>>2];c[M>>2]=Bh(h,19255,m)|0;if(!(c[M>>2]|0)){c[E>>2]=7;M=c[E>>2]|0;i=N;return M|0}c[H>>2]=ph(c[F>>2]|0,28,0)|0;e=c[F>>2]|0;if(!(c[H>>2]|0)){Sf(e,c[M>>2]|0);c[E>>2]=7;M=c[E>>2]|0;i=N;return M|0}c[c[H>>2]>>2]=e;c[(c[H>>2]|0)+4>>2]=c[o>>2];c[t>>2]=Dh(c[F>>2]|0,c[(c[n>>2]|0)+64>>2]|0)|0;c[(c[(c[n>>2]|0)+52>>2]|0)+4>>2]=c[(c[(c[F>>2]|0)+16>>2]|0)+(c[t>>2]<<4)>>2];c[z+4>>2]=c[n>>2];c[z>>2]=c[H>>2];c[z+8>>2]=c[(c[F>>2]|0)+328>>2];c[z+12>>2]=0;c[(c[F>>2]|0)+328>>2]=z;c[I>>2]=Sb[c[p>>2]&255](c[F>>2]|0,c[(c[o>>2]|0)+8>>2]|0,c[v>>2]|0,c[q>>2]|0,(c[H>>2]|0)+8|0,L)|0;c[(c[F>>2]|0)+328>>2]=c[z+8>>2];if((c[I>>2]|0)==7)jh(c[F>>2]|0);a:do if(!(c[I>>2]|0)){if(c[(c[H>>2]|0)+8>>2]|0){L=c[(c[H>>2]|0)+8>>2]|0;c[L>>2]=0;c[L+4>>2]=0;c[L+8>>2]=0;c[c[(c[H>>2]|0)+8>>2]>>2]=c[c[o>>2]>>2];c[(c[H>>2]|0)+12>>2]=1;if(!(c[z+12>>2]|0)){c[B>>2]=31585;K=c[F>>2]|0;L=c[B>>2]|0;c[A>>2]=c[c[n>>2]>>2];L=Bh(K,L,A)|0;c[c[G>>2]>>2]=L;hu(c[H>>2]|0);c[I>>2]=1;break}a[y>>0]=0;c[(c[H>>2]|0)+24>>2]=c[(c[n>>2]|0)+56>>2];c[(c[n>>2]|0)+56>>2]=c[H>>2];c[s>>2]=0;while(1){if((c[s>>2]|0)>=(b[(c[n>>2]|0)+34>>1]|0))break a;c[C>>2]=c[(c[(c[n>>2]|0)+4>>2]|0)+((c[s>>2]|0)*24|0)+12>>2];c[r>>2]=0;do if(c[C>>2]|0){c[x>>2]=If(c[C>>2]|0)|0;if(!(zd(31631,c[C>>2]|0,6)|0)){if((a[(c[C>>2]|0)+6>>0]|0)!=0?(a[(c[C>>2]|0)+6>>0]|0)!=32:0)D=27}else D=27;b:do if((D|0)==27){D=0;c[r>>2]=0;while(1){if((c[r>>2]|0)>=(c[x>>2]|0))break b;if(!(zd(31638,(c[C>>2]|0)+(c[r>>2]|0)|0,7)|0)){if(!(a[(c[C>>2]|0)+((c[r>>2]|0)+7)>>0]|0))break;if((a[(c[C>>2]|0)+((c[r>>2]|0)+7)>>0]|0)==32)break}c[r>>2]=(c[r>>2]|0)+1}c[r>>2]=(c[r>>2]|0)+1}while(0);if((c[r>>2]|0)>=(c[x>>2]|0)){L=(c[n>>2]|0)+42|0;a[L>>0]=d[L>>0]|d[y>>0];break}c[w>>2]=6+((a[(c[C>>2]|0)+((c[r>>2]|0)+6)>>0]|0)!=0?1:0);c[u>>2]=c[r>>2];while(1){if(((c[u>>2]|0)+(c[w>>2]|0)|0)>(c[x>>2]|0))break;a[(c[C>>2]|0)+(c[u>>2]|0)>>0]=a[(c[C>>2]|0)+((c[u>>2]|0)+(c[w>>2]|0))>>0]|0;c[u>>2]=(c[u>>2]|0)+1}if((c[r>>2]|0)>0?(a[(c[C>>2]|0)+(c[r>>2]|0)>>0]|0)==0:0)a[(c[C>>2]|0)+((c[r>>2]|0)-1)>>0]=0;L=(c[(c[n>>2]|0)+4>>2]|0)+((c[s>>2]|0)*24|0)+23|0;a[L>>0]=d[L>>0]|2;a[y>>0]=-128}else{L=(c[n>>2]|0)+42|0;a[L>>0]=d[L>>0]|d[y>>0]}while(0);c[s>>2]=(c[s>>2]|0)+1}}}else{e=c[F>>2]|0;if(!(c[L>>2]|0)){c[J>>2]=c[M>>2];L=Bh(e,31555,J)|0;c[c[G>>2]>>2]=L}else{c[K>>2]=c[L>>2];K=Bh(e,19255,K)|0;c[c[G>>2]>>2]=K;Kd(c[L>>2]|0)}Sf(c[F>>2]|0,c[H>>2]|0)}while(0);Sf(c[F>>2]|0,c[M>>2]|0);c[E>>2]=c[I>>2];M=c[E>>2]|0;i=N;return M|0}function pz(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;f=g+4|0;e=g;c[d>>2]=b;c[f>>2]=0;c[e>>2]=c[c[d>>2]>>2];if(!(a[(c[e>>2]|0)+140+5>>0]|0))c[f>>2]=oi(c[e>>2]|0,(c[d>>2]|0)+4|0)|0;if(!(c[f>>2]|0)){f=c[f>>2]|0;i=g;return f|0}c[(c[d>>2]|0)+12>>2]=c[f>>2];b=(c[d>>2]|0)+68|0;c[b>>2]=(c[b>>2]|0)+1;f=c[f>>2]|0;i=g;return f|0}function qz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+48|0;d=l+32|0;e=l+28|0;n=l+24|0;m=l+20|0;j=l+16|0;g=l+12|0;f=l+8|0;h=l+4|0;k=l;c[d>>2]=a;c[e>>2]=b;c[n>>2]=c[c[d>>2]>>2];c[m>>2]=c[(c[(c[n>>2]|0)+16>>2]|0)+(c[e>>2]<<4)+12>>2];ax(c[d>>2]|0,0,c[e>>2]|0);c[g>>2]=c[(c[d>>2]|0)+72>>2];a=(c[d>>2]|0)+72|0;c[a>>2]=(c[a>>2]|0)+3;uz(c[d>>2]|0,c[e>>2]|0,c[g>>2]|0,0,0);c[f>>2]=(c[(c[d>>2]|0)+76>>2]|0)+1;c[h>>2]=c[(c[d>>2]|0)+72>>2];c[j>>2]=c[(c[m>>2]|0)+8+8>>2];while(1){if(!(c[j>>2]|0))break;c[k>>2]=c[(c[j>>2]|0)+8>>2];vz(c[d>>2]|0,c[k>>2]|0,0,c[g>>2]|0,c[f>>2]|0,c[h>>2]|0);c[j>>2]=c[c[j>>2]>>2]}wz(c[d>>2]|0,c[e>>2]|0);i=l;return}function rz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=i;i=i+16|0;g=e+12|0;h=e+8|0;d=e+4|0;f=e;c[g>>2]=a;c[h>>2]=b;c[f>>2]=Dw(c[g>>2]|0,c[h>>2]|0)|0;c[d>>2]=ji(c[g>>2]|0,c[f>>2]|0)|0;Sf(c[g>>2]|0,c[f>>2]|0);i=e;return c[d>>2]|0}function sz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=Dh(c[c[e>>2]>>2]|0,c[(c[f>>2]|0)+64>>2]|0)|0;ax(c[e>>2]|0,0,c[h>>2]|0);c[j>>2]=c[(c[e>>2]|0)+72>>2];d=(c[e>>2]|0)+72|0;c[d>>2]=(c[d>>2]|0)+3;d=c[e>>2]|0;a=c[h>>2]|0;b=c[j>>2]|0;if(c[g>>2]|0)uz(d,a,b,c[c[g>>2]>>2]|0,31725);else uz(d,a,b,c[c[f>>2]>>2]|0,31729);vz(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0,c[j>>2]|0,(c[(c[e>>2]|0)+76>>2]|0)+1|0,c[(c[e>>2]|0)+72>>2]|0);wz(c[e>>2]|0,c[h>>2]|0);i=k;return}function tz(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r+8|0;p=r;h=r+36|0;j=r+32|0;k=r+28|0;l=r+24|0;m=r+20|0;o=r+16|0;n=r+12|0;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=c[c[j>>2]>>2];e=(c[n>>2]|0)+140|0;if((c[(c[l>>2]|0)+4>>2]|0)>>>0>0){if(a[e+5>>0]|0){Ah(c[j>>2]|0,31688,p);c[h>>2]=-1;q=c[h>>2]|0;i=r;return q|0}c[c[m>>2]>>2]=c[l>>2];c[o>>2]=rz(c[n>>2]|0,c[k>>2]|0)|0;if((c[o>>2]|0)<0){p=c[j>>2]|0;c[q>>2]=c[k>>2];Ah(p,31705,q);c[h>>2]=-1;q=c[h>>2]|0;i=r;return q|0}}else{c[o>>2]=d[e+4>>0];c[c[m>>2]>>2]=c[k>>2]}c[h>>2]=c[o>>2];q=c[h>>2]|0;i=r;return q|0}function uz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+96|0;v=x+16|0;u=x;h=x+84|0;j=x+80|0;k=x+76|0;l=x+72|0;m=x+68|0;q=x+64|0;p=x+60|0;r=x+56|0;t=x+52|0;o=x+40|0;n=x+88|0;w=x+36|0;s=x+32|0;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[p>>2]=c[c[h>>2]>>2];c[t>>2]=Pw(c[h>>2]|0)|0;if(!(c[t>>2]|0)){i=x;return}c[r>>2]=(c[(c[p>>2]|0)+16>>2]|0)+(c[j>>2]<<4);c[q>>2]=0;while(1){if((c[q>>2]|0)>=3)break;c[w>>2]=c[5224+(c[q>>2]<<3)>>2];g=pi(c[p>>2]|0,c[w>>2]|0,c[c[r>>2]>>2]|0)|0;c[s>>2]=g;do if(!g){if(c[5224+(c[q>>2]<<3)+4>>2]|0){g=c[h>>2]|0;b=c[w>>2]|0;f=c[5224+(c[q>>2]<<3)+4>>2]|0;c[u>>2]=c[c[r>>2]>>2];c[u+4>>2]=b;c[u+8>>2]=f;Ow(g,31786,u);c[o+(c[q>>2]<<2)>>2]=c[(c[h>>2]|0)+396>>2];a[n+(c[q>>2]|0)>>0]=16}}else{c[o+(c[q>>2]<<2)>>2]=c[(c[s>>2]|0)+28>>2];a[n+(c[q>>2]|0)>>0]=0;yz(c[h>>2]|0,c[j>>2]|0,c[o+(c[q>>2]<<2)>>2]|0,1,c[w>>2]|0);if(c[l>>2]|0){g=c[h>>2]|0;e=c[w>>2]|0;b=c[m>>2]|0;f=c[l>>2]|0;c[v>>2]=c[c[r>>2]>>2];c[v+4>>2]=e;c[v+8>>2]=b;c[v+12>>2]=f;Ow(g,31809,v);break}else{Rw(c[t>>2]|0,119,c[o+(c[q>>2]<<2)>>2]|0,c[j>>2]|0)|0;break}}while(0);c[q>>2]=(c[q>>2]|0)+1}c[q>>2]=0;while(1){if(!(c[5224+(c[q>>2]<<3)+4>>2]|0))break;Eh(c[t>>2]|0,55,(c[k>>2]|0)+(c[q>>2]|0)|0,c[o+(c[q>>2]<<2)>>2]|0,c[j>>2]|0,3)|0;Fh(c[t>>2]|0,a[n+(c[q>>2]|0)>>0]|0);c[q>>2]=(c[q>>2]|0)+1}i=x;return}function vz(b,f,g,h,j,k){b=b|0;f=f|0;g=g|0;h=h|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;R=i;i=i+128|0;n=R+116|0;o=R+112|0;p=R+108|0;q=R+104|0;l=R+100|0;m=R+96|0;u=R+92|0;F=R+88|0;y=R+84|0;z=R+80|0;O=R+76|0;w=R+72|0;A=R+68|0;x=R+64|0;D=R+120|0;I=R+60|0;L=R+56|0;G=R+52|0;N=R+48|0;M=R+44|0;H=R+40|0;K=R+36|0;J=R+32|0;B=R+28|0;t=R+24|0;s=R+20|0;P=R+16|0;C=R+12|0;v=R+8|0;r=R+4|0;E=R;c[n>>2]=b;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[l>>2]=j;c[m>>2]=k;c[u>>2]=c[c[n>>2]>>2];c[A>>2]=-1;a[D>>0]=1;f=c[l>>2]|0;c[l>>2]=f+1;c[I>>2]=f;f=c[l>>2]|0;c[l>>2]=f+1;c[L>>2]=f;f=c[l>>2]|0;c[l>>2]=f+1;c[G>>2]=f;f=c[l>>2]|0;c[l>>2]=f+1;c[N>>2]=f;f=c[l>>2]|0;c[l>>2]=f+1;c[M>>2]=f;f=c[l>>2]|0;c[l>>2]=f+1;c[H>>2]=f;f=c[l>>2]|0;c[l>>2]=f+1;c[K>>2]=f;c[J>>2]=c[l>>2];if((c[(c[n>>2]|0)+76>>2]|0)>(c[l>>2]|0))l=c[(c[n>>2]|0)+76>>2]|0;else l=c[l>>2]|0;c[(c[n>>2]|0)+76>>2]=l;c[O>>2]=Pw(c[n>>2]|0)|0;if((c[O>>2]|0)==0|(c[o>>2]|0)==0){i=R;return}if(!(c[(c[o>>2]|0)+28>>2]|0)){i=R;return}if(!(_e(31733,c[c[o>>2]>>2]|0,0)|0)){i=R;return}c[x>>2]=Dh(c[u>>2]|0,c[(c[o>>2]|0)+64>>2]|0)|0;if(Mw(c[n>>2]|0,28,c[c[o>>2]>>2]|0,0,c[(c[(c[u>>2]|0)+16>>2]|0)+(c[x>>2]<<4)>>2]|0)|0){i=R;return}yz(c[n>>2]|0,c[x>>2]|0,c[(c[o>>2]|0)+28>>2]|0,0,c[c[o>>2]>>2]|0);f=c[m>>2]|0;c[m>>2]=f+1;c[z>>2]=f;f=c[m>>2]|0;c[m>>2]=f+1;c[y>>2]=f;if((c[(c[n>>2]|0)+72>>2]|0)>(c[m>>2]|0))l=c[(c[n>>2]|0)+72>>2]|0;else l=c[m>>2]|0;c[(c[n>>2]|0)+72>>2]=l;zz(c[n>>2]|0,c[z>>2]|0,c[x>>2]|0,c[o>>2]|0,54);Tw(c[O>>2]|0,c[M>>2]|0,c[c[o>>2]>>2]|0)|0;c[F>>2]=c[(c[o>>2]|0)+8>>2];while(1){l=c[p>>2]|0;if(!(c[F>>2]|0))break;if(!((l|0)!=0?(c[p>>2]|0)!=(c[F>>2]|0):0))Q=15;do if((Q|0)==15){Q=0;if(!(c[(c[F>>2]|0)+36>>2]|0))a[D>>0]=0;if(((d[(c[o>>2]|0)+42>>0]|0)&32|0)!=0?(a[(c[F>>2]|0)+55>>0]&3|0)==2:0){c[B>>2]=e[(c[F>>2]|0)+50>>1];c[P>>2]=c[c[o>>2]>>2];c[C>>2]=(c[B>>2]|0)-1}else{c[B>>2]=e[(c[F>>2]|0)+52>>1];c[P>>2]=c[c[F>>2]>>2];if((d[(c[F>>2]|0)+55>>0]|0)>>>3&1)l=e[(c[F>>2]|0)+50>>1]|0;else l=c[B>>2]|0;c[C>>2]=l-1}Tw(c[O>>2]|0,c[H>>2]|0,c[P>>2]|0)|0;if((c[(c[n>>2]|0)+76>>2]|0)>((c[J>>2]|0)+(c[C>>2]|0)|0))l=c[(c[n>>2]|0)+76>>2]|0;else l=(c[J>>2]|0)+(c[C>>2]|0)|0;c[(c[n>>2]|0)+76>>2]=l;Vw(c[O>>2]|0,54,c[y>>2]|0,c[(c[F>>2]|0)+44>>2]|0,c[x>>2]|0)|0;Az(c[n>>2]|0,c[F>>2]|0);Rw(c[O>>2]|0,22,c[B>>2]|0,(c[L>>2]|0)+1|0)|0;Rw(c[O>>2]|0,22,e[(c[F>>2]|0)+50>>1]|0,(c[L>>2]|0)+2|0)|0;Uw(c[O>>2]|0,35,0,(c[L>>2]|0)+1|0,c[L>>2]|0,5108,-5)|0;Fh(c[O>>2]|0,2);c[t>>2]=xz(c[O>>2]|0,108,c[y>>2]|0)|0;Rw(c[O>>2]|0,22,0,c[G>>2]|0)|0;c[s>>2]=Bz(c[O>>2]|0)|0;if((c[C>>2]|0)>0){c[v>>2]=Cz(c[O>>2]|0)|0;c[r>>2]=Fw(c[u>>2]|0,c[C>>2]<<2,0)|0;if(!(c[r>>2]|0))break;Yw(c[O>>2]|0,13)|0;c[s>>2]=Bz(c[O>>2]|0)|0;if(((c[C>>2]|0)==1?(e[(c[F>>2]|0)+50>>1]|0|0)==1:0)?(d[(c[F>>2]|0)+54>>0]|0|0)!=0:0)Rw(c[O>>2]|0,77,c[J>>2]|0,c[v>>2]|0)|0;c[w>>2]=0;while(1){if((c[w>>2]|0)>=(c[C>>2]|0))break;c[E>>2]=Dz(c[n>>2]|0,c[(c[(c[F>>2]|0)+32>>2]|0)+(c[w>>2]<<2)>>2]|0)|0;Rw(c[O>>2]|0,22,c[w>>2]|0,c[G>>2]|0)|0;Vw(c[O>>2]|0,47,c[y>>2]|0,c[w>>2]|0,c[N>>2]|0)|0;m=Uw(c[O>>2]|0,78,c[N>>2]|0,0,(c[J>>2]|0)+(c[w>>2]|0)|0,c[E>>2]|0,-4)|0;c[(c[r>>2]|0)+(c[w>>2]<<2)>>2]=m;Fh(c[O>>2]|0,-128);c[w>>2]=(c[w>>2]|0)+1}Rw(c[O>>2]|0,22,c[C>>2]|0,c[G>>2]|0)|0;Ez(c[O>>2]|0,c[v>>2]|0)|0;Fz(c[O>>2]|0,(c[s>>2]|0)-1|0);c[w>>2]=0;while(1){l=c[O>>2]|0;if((c[w>>2]|0)>=(c[C>>2]|0))break;Fz(l,c[(c[r>>2]|0)+(c[w>>2]<<2)>>2]|0);Vw(c[O>>2]|0,47,c[y>>2]|0,c[w>>2]|0,(c[J>>2]|0)+(c[w>>2]|0)|0)|0;c[w>>2]=(c[w>>2]|0)+1}Gz(l,c[v>>2]|0);Sf(c[u>>2]|0,c[r>>2]|0)}Uw(c[O>>2]|0,35,1,c[L>>2]|0,c[N>>2]|0,5140,-5)|0;Fh(c[O>>2]|0,2);Rw(c[O>>2]|0,7,c[y>>2]|0,c[s>>2]|0)|0;Hz(c[O>>2]|0,c[L>>2]|0,0,c[K>>2]|0);Uw(c[O>>2]|0,49,c[M>>2]|0,3,c[N>>2]|0,31742,0)|0;Rw(c[O>>2]|0,74,c[q>>2]|0,c[I>>2]|0)|0;Vw(c[O>>2]|0,75,c[q>>2]|0,c[N>>2]|0,c[I>>2]|0)|0;Fh(c[O>>2]|0,8);Fz(c[O>>2]|0,c[t>>2]|0)}while(0);c[F>>2]=c[(c[F>>2]|0)+20>>2]}if(l){i=R;return}if(!(d[D>>0]|0)){i=R;return}Rw(c[O>>2]|0,50,c[z>>2]|0,c[K>>2]|0)|0;c[A>>2]=xz(c[O>>2]|0,46,c[K>>2]|0)|0;Rw(c[O>>2]|0,25,0,c[H>>2]|0)|0;Uw(c[O>>2]|0,49,c[M>>2]|0,3,c[N>>2]|0,31742,0)|0;Rw(c[O>>2]|0,74,c[q>>2]|0,c[I>>2]|0)|0;Vw(c[O>>2]|0,75,c[q>>2]|0,c[N>>2]|0,c[I>>2]|0)|0;Fh(c[O>>2]|0,8);Fz(c[O>>2]|0,c[A>>2]|0);i=R;return}function wz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+8|0;d=f+4|0;e=f;c[g>>2]=a;c[d>>2]=b;c[e>>2]=Pw(c[g>>2]|0)|0;if(!(c[e>>2]|0)){i=f;return}xz(c[e>>2]|0,124,c[d>>2]|0)|0;i=f;return}function xz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;d=Vw(c[h>>2]|0,c[g>>2]|0,c[f>>2]|0,0,0)|0;i=e;return d|0}function yz(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;t=s+28|0;m=s+24|0;n=s+20|0;o=s+32|0;p=s+16|0;q=s+12|0;j=s+8|0;k=s+4|0;r=s;c[t>>2]=b;c[m>>2]=e;c[n>>2]=f;a[o>>0]=g;c[p>>2]=h;e=c[t>>2]|0;if(c[(c[t>>2]|0)+416>>2]|0)e=c[e+416>>2]|0;c[q>>2]=e;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[(c[q>>2]|0)+404>>2]|0))break;c[r>>2]=(c[(c[q>>2]|0)+408>>2]|0)+(c[j>>2]<<4);if((c[c[r>>2]>>2]|0)==(c[m>>2]|0)?(c[(c[r>>2]|0)+4>>2]|0)==(c[n>>2]|0):0){l=7;break}c[j>>2]=(c[j>>2]|0)+1}if((l|0)==7){if(d[(c[r>>2]|0)+8>>0]|0)e=1;else e=(d[o>>0]|0|0)!=0;a[(c[r>>2]|0)+8>>0]=e&1;i=s;return}c[k>>2]=(c[(c[q>>2]|0)+404>>2]|0)+1<<4;e=c[k>>2]|0;e=vx(c[c[q>>2]>>2]|0,c[(c[q>>2]|0)+408>>2]|0,e,((e|0)<0)<<31>>31)|0;c[(c[q>>2]|0)+408>>2]=e;e=(c[q>>2]|0)+404|0;if(c[(c[q>>2]|0)+408>>2]|0){t=c[e>>2]|0;c[e>>2]=t+1;c[r>>2]=(c[(c[q>>2]|0)+408>>2]|0)+(t<<4);c[c[r>>2]>>2]=c[m>>2];c[(c[r>>2]|0)+4>>2]=c[n>>2];a[(c[r>>2]|0)+8>>0]=a[o>>0]|0;c[(c[r>>2]|0)+12>>2]=c[p>>2];i=s;return}else{c[e>>2]=0;jh(c[c[q>>2]>>2]|0);i=s;return}}function zz(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;n=q+8|0;p=q+4|0;o=q;c[j>>2]=a;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[p>>2]=Pw(c[j>>2]|0)|0;yz(c[j>>2]|0,c[l>>2]|0,c[(c[m>>2]|0)+28>>2]|0,((c[n>>2]|0)==55?1:0)&255,c[c[m>>2]>>2]|0);if(!(d[(c[m>>2]|0)+42>>0]&32)){Eh(c[p>>2]|0,c[n>>2]|0,c[k>>2]|0,c[(c[m>>2]|0)+28>>2]|0,c[l>>2]|0,b[(c[m>>2]|0)+34>>1]|0)|0;i=q;return}else{c[o>>2]=Ej(c[m>>2]|0)|0;Vw(c[p>>2]|0,c[n>>2]|0,c[k>>2]|0,c[(c[o>>2]|0)+44>>2]|0,c[l>>2]|0)|0;Az(c[j>>2]|0,c[o>>2]|0);i=q;return}}function Az(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;f=d+8|0;e=d+4|0;g=d;c[f>>2]=a;c[e>>2]=b;c[g>>2]=c[(c[f>>2]|0)+8>>2];a=c[g>>2]|0;Ih(a,-1,Pz(c[f>>2]|0,c[e>>2]|0)|0,-6);i=d;return}function Bz(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+32>>2]|0}function Cz(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;f=e+8|0;d=e+4|0;b=e;c[f>>2]=a;c[d>>2]=c[(c[f>>2]|0)+24>>2];f=(c[d>>2]|0)+116|0;a=c[f>>2]|0;c[f>>2]=a+1;c[b>>2]=a;if(!(c[b>>2]&(c[b>>2]|0)-1)){f=vx(c[c[d>>2]>>2]|0,c[(c[d>>2]|0)+120>>2]|0,(c[b>>2]<<1)+1<<2,0)|0;c[(c[d>>2]|0)+120>>2]=f}if(!(c[(c[d>>2]|0)+120>>2]|0)){f=c[b>>2]|0;f=-1-f|0;i=e;return f|0}c[(c[(c[d>>2]|0)+120>>2]|0)+(c[b>>2]<<2)>>2]=-1;f=c[b>>2]|0;f=-1-f|0;i=e;return f|0}function Dz(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;f=k+12|0;g=k+8|0;m=k+4|0;h=k+17|0;l=k+16|0;j=k;c[f>>2]=b;c[g>>2]=e;c[m>>2]=c[c[f>>2]>>2];a[h>>0]=a[(c[m>>2]|0)+62>>0]|0;a[l>>0]=a[(c[m>>2]|0)+140+5>>0]|0;c[j>>2]=Mj(c[m>>2]|0,a[h>>0]|0,c[g>>2]|0,d[l>>0]|0)|0;if(a[l>>0]|0){m=c[j>>2]|0;i=k;return m|0}if((c[j>>2]|0)!=0?(c[(c[j>>2]|0)+12>>2]|0)!=0:0){m=c[j>>2]|0;i=k;return m|0}c[j>>2]=Px(c[f>>2]|0,a[h>>0]|0,c[j>>2]|0,c[g>>2]|0)|0;m=c[j>>2]|0;i=k;return m|0}function Ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=Vw(c[f>>2]|0,13,0,c[e>>2]|0,0)|0;i=d;return a|0}function Fz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;c[(c[(c[e>>2]|0)+24>>2]|0)+96>>2]=(c[(c[e>>2]|0)+32>>2]|0)-1;Lz(c[e>>2]|0,c[f>>2]|0,c[(c[e>>2]|0)+32>>2]|0);i=d;return}function Gz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+12|0;h=g+8|0;f=g+4|0;e=g;c[d>>2]=a;c[h>>2]=b;c[f>>2]=c[(c[d>>2]|0)+24>>2];c[e>>2]=-1-(c[h>>2]|0);if(c[(c[f>>2]|0)+120>>2]|0)c[(c[(c[f>>2]|0)+120>>2]|0)+(c[e>>2]<<2)>>2]=c[(c[d>>2]|0)+32>>2];c[(c[f>>2]|0)+96>>2]=(c[(c[d>>2]|0)+32>>2]|0)-1;i=g;return}function Hz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f+12|0;j=f+8|0;h=f;c[g>>2]=a;c[j>>2]=b;c[f+4>>2]=d;c[h>>2]=e;Uw(c[g>>2]|0,35,0,c[j>>2]|0,c[h>>2]|0,5172,-5)|0;Fh(c[g>>2]|0,1);i=f;return}function Iz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+64|0;l=o+24|0;k=o+16|0;e=o+56|0;p=o+48|0;j=o+44|0;m=o+40|0;f=o+36|0;n=o+32|0;h=o+8|0;g=o;c[e>>2]=a;c[o+52>>2]=b;c[p>>2]=d;c[j>>2]=$d(c[c[p>>2]>>2]|0)|0;a=((c[(c[j>>2]|0)+12>>2]|0)+1|0)*25|0;c[n>>2]=ig(a,((a|0)<0)<<31>>31)|0;if(!(c[n>>2]|0)){te(c[e>>2]|0);i=o;return}p=c[n>>2]|0;a=k;c[a>>2]=c[c[j>>2]>>2]; +c[a+4>>2]=0;Qd(24,p,31755,k)|0;p=c[n>>2]|0;c[m>>2]=p+(If(c[n>>2]|0)|0);c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[j>>2]|0)+12>>2]|0))break;p=h;c[p>>2]=(c[(c[(c[j>>2]|0)+20+4>>2]|0)+(c[f>>2]<<2)>>2]|0)+1;c[p+4>>2]=0;p=h;p=gR(c[c[j>>2]>>2]|0,0,c[p>>2]|0,c[p+4>>2]|0)|0;p=fR(p|0,C|0,1,0)|0;d=h;d=sR(p|0,C|0,c[d>>2]|0,c[d+4>>2]|0)|0;p=g;c[p>>2]=d;c[p+4>>2]=C;p=c[m>>2]|0;d=g;a=c[d+4>>2]|0;k=l;c[k>>2]=c[d>>2];c[k+4>>2]=a;Qd(24,p,31760,l)|0;p=If(c[m>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+p;c[f>>2]=(c[f>>2]|0)+1}ne(c[e>>2]|0,c[n>>2]|0,-1,148);i=o;return}function Jz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;j=h+12|0;e=h+8|0;g=h+4|0;f=h;c[h+20>>2]=a;c[h+16>>2]=b;c[j>>2]=d;c[g>>2]=$d(c[c[j>>2]>>2]|0)|0;c[f>>2]=de(c[(c[j>>2]|0)+4>>2]|0)|0;if(!(c[c[g>>2]>>2]|0)){c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[g>>2]|0)+8>>2]|0))break;c[(c[(c[g>>2]|0)+20>>2]|0)+(c[e>>2]<<2)>>2]=1;c[e>>2]=(c[e>>2]|0)+1}j=c[g>>2]|0;g=c[j>>2]|0;g=g+1|0;c[j>>2]=g;i=h;return}Kz(c[g>>2]|0,c[f>>2]|0);c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[f>>2]|0))break;j=(c[(c[g>>2]|0)+20>>2]|0)+(c[e>>2]<<2)|0;c[j>>2]=(c[j>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+1}c[e>>2]=c[f>>2];while(1){if((c[e>>2]|0)>=(c[(c[g>>2]|0)+8>>2]|0))break;j=(c[(c[g>>2]|0)+20+4>>2]|0)+(c[e>>2]<<2)|0;c[j>>2]=(c[j>>2]|0)+1;c[(c[(c[g>>2]|0)+20>>2]|0)+(c[e>>2]<<2)>>2]=1;c[e>>2]=(c[e>>2]|0)+1}j=c[g>>2]|0;g=c[j>>2]|0;g=g+1|0;c[j>>2]=g;i=h;return}function Kz(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return}function Lz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;h=e;c[g>>2]=a;c[f>>2]=b;c[h>>2]=d;d=c[h>>2]|0;c[(Mz(c[g>>2]|0,c[f>>2]|0)|0)+8>>2]=d;i=e;return}function Mz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[f>>2]=b;c[g>>2]=d;if((c[g>>2]|0)<0)c[g>>2]=(c[(c[f>>2]|0)+32>>2]|0)-1;if(a[(c[c[f>>2]>>2]|0)+65>>0]|0){c[e>>2]=5204;b=c[e>>2]|0;i=h;return b|0}else{c[e>>2]=(c[(c[f>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0);b=c[e>>2]|0;i=h;return b|0}return 0}function Nz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+48|0;e=l+32|0;n=l+24|0;k=l+20|0;g=l+16|0;j=l+12|0;h=l+8|0;m=l+4|0;f=l;c[e>>2]=a;c[l+28>>2]=b;c[n>>2]=d;c[g>>2]=de(c[c[n>>2]>>2]|0)|0;c[h>>2]=(c[g>>2]|0)+1&-2;c[j>>2]=de(c[(c[n>>2]|0)+4>>2]|0)|0;c[m>>2]=56+(c[h>>2]<<2)+(c[h>>2]<<2);c[f>>2]=we(c[e>>2]|0)|0;a=c[m>>2]|0;c[k>>2]=ph(c[f>>2]|0,a,((a|0)<0)<<31>>31)|0;if(!(c[k>>2]|0)){te(c[e>>2]|0);i=l;return}else{c[(c[k>>2]|0)+52>>2]=c[f>>2];c[c[k>>2]>>2]=0;c[(c[k>>2]|0)+8>>2]=c[g>>2];c[(c[k>>2]|0)+12>>2]=c[j>>2];c[(c[k>>2]|0)+20+4>>2]=(c[k>>2]|0)+56;c[(c[k>>2]|0)+20>>2]=(c[(c[k>>2]|0)+20+4>>2]|0)+(c[h>>2]<<2);ge(c[e>>2]|0,c[k>>2]|0,56,153);i=l;return}}function Oz(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];Sf(c[(c[d>>2]|0)+52>>2]|0,c[d>>2]|0);i=b;return}function Pz(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+28|0;j=p+24|0;k=p+20|0;l=p+16|0;m=p+12|0;g=p+8|0;n=p+4|0;o=p;c[j>>2]=b;c[k>>2]=f;c[m>>2]=e[(c[k>>2]|0)+52>>1];c[g>>2]=e[(c[k>>2]|0)+50>>1];if(c[(c[j>>2]|0)+68>>2]|0){c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}f=c[c[j>>2]>>2]|0;if((d[(c[k>>2]|0)+55>>0]|0)>>>3&1)c[n>>2]=Qz(f,c[g>>2]|0,(c[m>>2]|0)-(c[g>>2]|0)|0)|0;else c[n>>2]=Qz(f,c[m>>2]|0,0)|0;if(c[n>>2]|0){c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[m>>2]|0))break;c[o>>2]=c[(c[(c[k>>2]|0)+32>>2]|0)+(c[l>>2]<<2)>>2];if((c[o>>2]|0)==35690)f=0;else f=Dz(c[j>>2]|0,c[o>>2]|0)|0;c[(c[n>>2]|0)+20+(c[l>>2]<<2)>>2]=f;a[(c[(c[n>>2]|0)+16>>2]|0)+(c[l>>2]|0)>>0]=a[(c[(c[k>>2]|0)+28>>2]|0)+(c[l>>2]|0)>>0]|0;c[l>>2]=(c[l>>2]|0)+1}if(c[(c[j>>2]|0)+68>>2]|0){Rz(c[n>>2]|0);c[n>>2]=0}}c[h>>2]=c[n>>2];o=c[h>>2]|0;i=p;return o|0}function Qz(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=d;c[h>>2]=e;c[j>>2]=f;c[k>>2]=((c[h>>2]|0)+(c[j>>2]|0)|0)*5;c[l>>2]=_f(24+(c[k>>2]|0)|0,0)|0;if(c[l>>2]|0){c[(c[l>>2]|0)+16>>2]=(c[l>>2]|0)+20+((c[h>>2]|0)+(c[j>>2]|0)<<2);b[(c[l>>2]|0)+6>>1]=c[h>>2];b[(c[l>>2]|0)+8>>1]=c[j>>2];a[(c[l>>2]|0)+4>>0]=a[(c[g>>2]|0)+62>>0]|0;c[(c[l>>2]|0)+12>>2]=c[g>>2];c[c[l>>2]>>2]=1;kR((c[l>>2]|0)+24|0,0,c[k>>2]|0)|0;l=c[l>>2]|0;i=m;return l|0}else{jh(c[g>>2]|0);l=c[l>>2]|0;i=m;return l|0}return 0}function Rz(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}a=c[b>>2]|0;c[a>>2]=(c[a>>2]|0)+-1;if(c[c[b>>2]>>2]|0){i=d;return}Sf(0,c[b>>2]|0);i=d;return}function Sz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;d=l+24|0;e=l+20|0;j=l+16|0;g=l+12|0;f=l+8|0;h=l+4|0;k=l;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[c[d>>2]>>2];c[g>>2]=0;c[j>>2]=c[(c[f>>2]|0)+16>>2];while(1){if((c[g>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0))break;c[h>>2]=c[(c[(c[j>>2]|0)+12>>2]|0)+8+8>>2];while(1){if(!(c[h>>2]|0))break;c[k>>2]=c[(c[h>>2]|0)+8>>2];Tz(c[d>>2]|0,c[k>>2]|0,c[e>>2]|0);c[h>>2]=c[c[h>>2]>>2]}c[g>>2]=(c[g>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+16}i=l;return}function Tz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[j>>2]=c[(c[f>>2]|0)+8>>2];while(1){if(!(c[j>>2]|0))break;if(!((c[g>>2]|0)!=0?(hB(c[g>>2]|0,c[j>>2]|0)|0)==0:0)){c[h>>2]=Dh(c[c[e>>2]>>2]|0,c[(c[f>>2]|0)+64>>2]|0)|0;ax(c[e>>2]|0,0,c[h>>2]|0);Uz(c[e>>2]|0,c[j>>2]|0,-1)}c[j>>2]=c[(c[j>>2]|0)+20>>2]}i=k;return}function Uz(a,b,f){a=a|0;b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=i;i=i+80|0;n=x+64|0;o=x+60|0;g=x+56|0;l=x+52|0;t=x+48|0;r=x+44|0;s=x+40|0;p=x+36|0;q=x+32|0;m=x+28|0;j=x+24|0;w=x+20|0;k=x+16|0;v=x+12|0;y=x+8|0;h=x+4|0;u=x;c[n>>2]=a;c[o>>2]=b;c[g>>2]=f;c[l>>2]=c[(c[o>>2]|0)+12>>2];a=(c[n>>2]|0)+72|0;b=c[a>>2]|0;c[a>>2]=b+1;c[t>>2]=b;b=(c[n>>2]|0)+72|0;a=c[b>>2]|0;c[b>>2]=a+1;c[r>>2]=a;c[y>>2]=c[c[n>>2]>>2];c[h>>2]=Dh(c[y>>2]|0,c[(c[o>>2]|0)+24>>2]|0)|0;if(Mw(c[n>>2]|0,27,c[c[o>>2]>>2]|0,0,c[(c[(c[y>>2]|0)+16>>2]|0)+(c[h>>2]<<4)>>2]|0)|0){i=x;return}yz(c[n>>2]|0,c[h>>2]|0,c[(c[l>>2]|0)+28>>2]|0,1,c[c[l>>2]>>2]|0);c[w>>2]=Pw(c[n>>2]|0)|0;if(!(c[w>>2]|0)){i=x;return}if((c[g>>2]|0)>=0)c[m>>2]=c[g>>2];else c[m>>2]=c[(c[o>>2]|0)+44>>2];c[k>>2]=Pz(c[n>>2]|0,c[o>>2]|0)|0;a=(c[n>>2]|0)+72|0;b=c[a>>2]|0;c[a>>2]=b+1;c[s>>2]=b;b=c[w>>2]|0;a=c[s>>2]|0;y=e[(c[o>>2]|0)+50>>1]|0;Uw(b,58,a,0,y,Vz(c[k>>2]|0)|0,-6)|0;zz(c[n>>2]|0,c[t>>2]|0,c[h>>2]|0,c[l>>2]|0,54);c[p>>2]=Rw(c[w>>2]|0,108,c[t>>2]|0,0)|0;c[v>>2]=Wz(c[n>>2]|0)|0;Xz(c[n>>2]|0,c[o>>2]|0,c[t>>2]|0,c[v>>2]|0,0,j,0,0)|0;Rw(c[w>>2]|0,109,c[s>>2]|0,c[v>>2]|0)|0;Yz(c[n>>2]|0,c[j>>2]|0);Rw(c[w>>2]|0,7,c[t>>2]|0,(c[p>>2]|0)+1|0)|0;Fz(c[w>>2]|0,c[p>>2]|0);if((c[g>>2]|0)<0)Rw(c[w>>2]|0,119,c[m>>2]|0,c[h>>2]|0)|0;Uw(c[w>>2]|0,55,c[r>>2]|0,c[m>>2]|0,c[h>>2]|0,c[k>>2]|0,-6)|0;Fh(c[w>>2]|0,(1|((c[g>>2]|0)>=0?16:0))&255);c[p>>2]=Rw(c[w>>2]|0,106,c[s>>2]|0,0)|0;y=(c[k>>2]|0)!=0?(d[(c[o>>2]|0)+54>>0]|0|0)!=0:0;g=Bz(c[w>>2]|0)|0;if(y){c[u>>2]=g+3;Ez(c[w>>2]|0,c[u>>2]|0)|0;c[q>>2]=Bz(c[w>>2]|0)|0;Eh(c[w>>2]|0,99,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0,e[(c[o>>2]|0)+50>>1]|0)|0;Zz(c[n>>2]|0,2,c[o>>2]|0)}else c[q>>2]=g;Vw(c[w>>2]|0,100,c[s>>2]|0,c[v>>2]|0,c[r>>2]|0)|0;Vw(c[w>>2]|0,105,c[r>>2]|0,0,-1)|0;Vw(c[w>>2]|0,110,c[r>>2]|0,c[v>>2]|0,0)|0;Fh(c[w>>2]|0,16);_z(c[n>>2]|0,c[v>>2]|0);Rw(c[w>>2]|0,3,c[s>>2]|0,c[q>>2]|0)|0;Fz(c[w>>2]|0,c[p>>2]|0);xz(c[w>>2]|0,61,c[t>>2]|0)|0;xz(c[w>>2]|0,61,c[r>>2]|0)|0;xz(c[w>>2]|0,61,c[s>>2]|0)|0;i=x;return}function Vz(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(c[b>>2]|0){a=c[b>>2]|0;c[a>>2]=(c[a>>2]|0)+1}i=d;return c[b>>2]|0}function Wz(b){b=b|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+4|0;f=g;c[f>>2]=b;b=c[f>>2]|0;if(!(d[(c[f>>2]|0)+19>>0]|0)){b=b+76|0;f=(c[b>>2]|0)+1|0;c[b>>2]=f;c[e>>2]=f;f=c[e>>2]|0;i=g;return f|0}else{h=b+19|0;b=(a[h>>0]|0)+-1<<24>>24;a[h>>0]=b;c[e>>2]=c[(c[f>>2]|0)+28+((b&255)<<2)>>2];f=c[e>>2]|0;i=g;return f|0}return 0}function Xz(a,e,f,g,h,j,k,l){a=a|0;e=e|0;f=f|0;g=g|0;h=h|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;y=i;i=i+48|0;o=y+44|0;p=y+40|0;q=y+36|0;r=y+32|0;m=y+28|0;n=y+24|0;s=y+20|0;t=y+16|0;x=y+12|0;u=y+8|0;w=y+4|0;v=y;c[o>>2]=a;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[m>>2]=h;c[n>>2]=j;c[s>>2]=k;c[t>>2]=l;c[x>>2]=c[(c[o>>2]|0)+8>>2];do if(c[n>>2]|0)if(c[(c[p>>2]|0)+36>>2]|0){l=Cz(c[x>>2]|0)|0;c[c[n>>2]>>2]=l;c[(c[o>>2]|0)+104>>2]=c[q>>2];iA(c[o>>2]|0);jA(c[o>>2]|0,c[(c[p>>2]|0)+36>>2]|0,c[c[n>>2]>>2]|0,16);break}else{c[c[n>>2]>>2]=0;break}while(0);if((c[m>>2]|0)!=0?((d[(c[p>>2]|0)+55>>0]|0)>>>3&1|0)!=0:0)m=b[(c[p>>2]|0)+50>>1]|0;else m=b[(c[p>>2]|0)+52>>1]|0;c[v>>2]=m&65535;c[w>>2]=kA(c[o>>2]|0,c[v>>2]|0)|0;do if(c[s>>2]|0){if((c[w>>2]|0)==(c[t>>2]|0)?(c[(c[s>>2]|0)+36>>2]|0)==0:0)break;c[s>>2]=0}while(0);c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[v>>2]|0))break;if(!(((c[s>>2]|0)!=0?(b[(c[(c[s>>2]|0)+4>>2]|0)+(c[u>>2]<<1)>>1]|0)==(b[(c[(c[p>>2]|0)+4>>2]|0)+(c[u>>2]<<1)>>1]|0):0)?(b[(c[(c[s>>2]|0)+4>>2]|0)+(c[u>>2]<<1)>>1]|0)!=-2:0)){lA(c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[u>>2]|0,(c[w>>2]|0)+(c[u>>2]|0)|0);mA(c[x>>2]|0,39)|0}c[u>>2]=(c[u>>2]|0)+1}if(!(c[r>>2]|0)){t=c[o>>2]|0;u=c[w>>2]|0;x=c[v>>2]|0;nA(t,u,x);x=c[w>>2]|0;i=y;return x|0}Vw(c[x>>2]|0,49,c[w>>2]|0,c[v>>2]|0,c[r>>2]|0)|0;t=c[o>>2]|0;u=c[w>>2]|0;x=c[v>>2]|0;nA(t,u,x);x=c[w>>2]|0;i=y;return x|0}function Yz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=f;return}Gz(c[(c[d>>2]|0)+8>>2]|0,c[e>>2]|0);gA(c[d>>2]|0);i=f;return}function Zz(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+80|0;p=s+8|0;o=s;h=s+68|0;j=s+64|0;k=s+60|0;r=s+56|0;m=s+52|0;l=s+24|0;n=s+20|0;q=s+16|0;c[h>>2]=d;c[j>>2]=f;c[k>>2]=g;c[n>>2]=c[(c[k>>2]|0)+12>>2];cg(l,c[c[h>>2]>>2]|0,0,0,200);if(c[(c[k>>2]|0)+40>>2]|0){c[o>>2]=c[c[k>>2]>>2];$z(l,31924,o);o=eg(l)|0;c[r>>2]=o;o=c[h>>2]|0;p=c[k>>2]|0;p=p+55|0;p=a[p>>0]|0;p=p&3;p=p&255;p=(p|0)==2;p=p?1555:2067;q=c[j>>2]|0;r=c[r>>2]|0;bA(o,p,q,r,-1,2);i=s;return}c[m>>2]=0;while(1){if((c[m>>2]|0)>=(e[(c[k>>2]|0)+50>>1]|0))break;c[q>>2]=c[(c[(c[n>>2]|0)+4>>2]|0)+((b[(c[(c[k>>2]|0)+4>>2]|0)+(c[m>>2]<<1)>>1]|0)*24|0)>>2];if(c[m>>2]|0)aA(l,31935,2);o=c[q>>2]|0;c[p>>2]=c[c[n>>2]>>2];c[p+4>>2]=o;$z(l,31016,p);c[m>>2]=(c[m>>2]|0)+1}o=eg(l)|0;c[r>>2]=o;o=c[h>>2]|0;p=c[k>>2]|0;p=p+55|0;p=a[p>>0]|0;p=p&3;p=p&255;p=(p|0)==2;p=p?1555:2067;q=c[j>>2]|0;r=c[r>>2]|0;bA(o,p,q,r,-1,2);i=s;return}function _z(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k+12|0;h=k+8|0;f=k+4|0;j=k;c[g>>2]=b;c[h>>2]=e;if(!(c[h>>2]|0)){i=k;return}if((d[(c[g>>2]|0)+19>>0]|0|0)>=8){i=k;return}c[f>>2]=0;c[j>>2]=(c[g>>2]|0)+124;while(1){if((c[f>>2]|0)>=10){f=8;break}if((c[(c[j>>2]|0)+12>>2]|0)==(c[h>>2]|0)){f=6;break}c[f>>2]=(c[f>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+20}if((f|0)==6){a[(c[j>>2]|0)+6>>0]=1;i=k;return}else if((f|0)==8){h=c[h>>2]|0;b=(c[g>>2]|0)+19|0;j=a[b>>0]|0;a[b>>0]=j+1<<24>>24;c[(c[g>>2]|0)+28+((j&255)<<2)>>2]=h;i=k;return}}function $z(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+32|0;h=e+20|0;g=e+16|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;dg(c[h>>2]|0,c[g>>2]|0,f);i=e;return}function aA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(((c[(c[e>>2]|0)+12>>2]|0)+(c[g>>2]|0)|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){cA(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0);i=h;return}else{b=(c[e>>2]|0)+12|0;c[b>>2]=(c[b>>2]|0)+(c[g>>2]|0);iR((c[(c[e>>2]|0)+8>>2]|0)+((c[(c[e>>2]|0)+12>>2]|0)-(c[g>>2]|0))|0,c[f>>2]|0,c[g>>2]|0)|0;i=h;return}}function bA(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;j=q+16|0;k=q+12|0;l=q+8|0;m=q+4|0;n=q+21|0;o=q+20|0;p=q;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;a[n>>0]=g;a[o>>0]=h;c[p>>2]=Pw(c[j>>2]|0)|0;if((c[l>>2]|0)==2)Bx(c[j>>2]|0);Uw(c[p>>2]|0,21,c[k>>2]|0,c[l>>2]|0,0,c[m>>2]|0,a[n>>0]|0)|0;Fh(c[p>>2]|0,a[o>>0]|0);i=q;return}function cA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[g>>2]=dA(c[e>>2]|0,c[g>>2]|0)|0;if((c[g>>2]|0)<=0){i=h;return}iR((c[(c[e>>2]|0)+8>>2]|0)+(c[(c[e>>2]|0)+12>>2]|0)|0,c[f>>2]|0,c[g>>2]|0)|0;b=(c[e>>2]|0)+12|0;c[b>>2]=(c[b>>2]|0)+(c[g>>2]|0);i=h;return}function dA(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;h=m+24|0;j=m+20|0;k=m+16|0;l=m+12|0;g=m+8|0;f=m;c[j>>2]=b;c[k>>2]=e;if(a[(c[j>>2]|0)+24>>0]|0){c[h>>2]=0;l=c[h>>2]|0;i=m;return l|0}e=c[j>>2]|0;if(!(c[(c[j>>2]|0)+20>>2]|0)){c[k>>2]=(c[e+16>>2]|0)-(c[(c[j>>2]|0)+12>>2]|0)-1;eA(c[j>>2]|0,2);c[h>>2]=c[k>>2];l=c[h>>2]|0;i=m;return l|0}if(d[e+25>>0]&4)e=c[(c[j>>2]|0)+8>>2]|0;else e=0;c[g>>2]=e;e=f;c[e>>2]=c[(c[j>>2]|0)+12>>2];c[e+4>>2]=0;e=(c[k>>2]|0)+1|0;b=f;e=gR(c[b>>2]|0,c[b+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;b=f;c[b>>2]=e;c[b+4>>2]=C;b=f;b=gR(c[b>>2]|0,c[b+4>>2]|0,c[(c[j>>2]|0)+12>>2]|0,0)|0;e=C;if((e|0)<0|((e|0)==0?b>>>0<=(c[(c[j>>2]|0)+20>>2]|0)>>>0:0)){e=f;e=gR(c[e>>2]|0,c[e+4>>2]|0,c[(c[j>>2]|0)+12>>2]|0,0)|0;b=f;c[b>>2]=e;c[b+4>>2]=C}b=f;e=c[b+4>>2]|0;if((e|0)>0|((e|0)==0?(c[b>>2]|0)>>>0>(c[(c[j>>2]|0)+20>>2]|0)>>>0:0)){fA(c[j>>2]|0);eA(c[j>>2]|0,2);c[h>>2]=0;l=c[h>>2]|0;i=m;return l|0}c[(c[j>>2]|0)+16>>2]=c[f>>2];if(c[c[j>>2]>>2]|0)c[l>>2]=Ew(c[c[j>>2]>>2]|0,c[g>>2]|0,c[(c[j>>2]|0)+16>>2]|0,0)|0;else c[l>>2]=Md(c[g>>2]|0,c[(c[j>>2]|0)+16>>2]|0,0)|0;e=c[j>>2]|0;if(!(c[l>>2]|0)){fA(e);eA(c[j>>2]|0,1);c[h>>2]=0;l=c[h>>2]|0;i=m;return l|0}if((d[e+25>>0]&4|0)==0?(c[(c[j>>2]|0)+12>>2]|0)>>>0>0:0)iR(c[l>>2]|0,c[(c[j>>2]|0)+8>>2]|0,c[(c[j>>2]|0)+12>>2]|0)|0;c[(c[j>>2]|0)+8>>2]=c[l>>2];l=$t(c[c[j>>2]>>2]|0,c[l>>2]|0)|0;c[(c[j>>2]|0)+16>>2]=l;l=(c[j>>2]|0)+25|0;a[l>>0]=d[l>>0]|4;c[h>>2]=c[k>>2];l=c[h>>2]|0;i=m;return l|0}function eA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e;g=e+4|0;c[f>>2]=b;a[g>>0]=d;a[(c[f>>2]|0)+24>>0]=a[g>>0]|0;c[(c[f>>2]|0)+16>>2]=0;i=e;return}function fA(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;if(!((d[(c[e>>2]|0)+25>>0]|0)&4)){b=c[e>>2]|0;b=b+8|0;c[b>>2]=0;i=f;return}Sf(c[c[e>>2]>>2]|0,c[(c[e>>2]|0)+8>>2]|0);b=(c[e>>2]|0)+25|0;a[b>>0]=(d[b>>0]|0)&-5;b=c[e>>2]|0;b=b+8|0;c[b>>2]=0;i=f;return}function gA(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;a=(c[b>>2]|0)+108|0;c[a>>2]=(c[a>>2]|0)+-1;c[d>>2]=0;c[e>>2]=(c[b>>2]|0)+124;while(1){if((c[d>>2]|0)>=10)break;if((c[(c[e>>2]|0)+12>>2]|0)!=0?(c[(c[e>>2]|0)+8>>2]|0)>(c[(c[b>>2]|0)+108>>2]|0):0){hA(c[b>>2]|0,c[e>>2]|0);c[(c[e>>2]|0)+12>>2]=0}c[d>>2]=(c[d>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+20}i=f;return}function hA(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=b;c[g>>2]=e;if(!(a[(c[g>>2]|0)+6>>0]|0)){i=h;return}if((d[(c[f>>2]|0)+19>>0]|0)<8){e=c[(c[g>>2]|0)+12>>2]|0;j=(c[f>>2]|0)+19|0;b=a[j>>0]|0;a[j>>0]=b+1<<24>>24;c[(c[f>>2]|0)+28+((b&255)<<2)>>2]=e}a[(c[g>>2]|0)+6>>0]=0;i=h;return}function iA(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=(c[d>>2]|0)+108|0;c[a>>2]=(c[a>>2]|0)+1;i=b;return}function jA(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;g=m+20|0;n=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=a;c[n>>2]=b;c[h>>2]=e;c[j>>2]=f;c[k>>2]=c[c[g>>2]>>2];c[l>>2]=ny(c[k>>2]|0,c[n>>2]|0,0)|0;if(d[(c[k>>2]|0)+65>>0]|0){a=c[k>>2]|0;n=c[l>>2]|0;Zu(a,n);i=m;return}LA(c[g>>2]|0,c[l>>2]|0,c[h>>2]|0,c[j>>2]|0);a=c[k>>2]|0;n=c[l>>2]|0;Zu(a,n);i=m;return}function kA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+12|0;e=g+8|0;f=g+4|0;h=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[(c[d>>2]|0)+64>>2];c[h>>2]=c[(c[d>>2]|0)+60>>2];if((c[e>>2]|0)<=(c[h>>2]|0)){h=(c[d>>2]|0)+64|0;c[h>>2]=(c[h>>2]|0)+(c[e>>2]|0);h=(c[d>>2]|0)+60|0;c[h>>2]=(c[h>>2]|0)-(c[e>>2]|0);h=c[f>>2]|0;i=g;return h|0}else{c[f>>2]=(c[(c[d>>2]|0)+76>>2]|0)+1;h=(c[d>>2]|0)+76|0;c[h>>2]=(c[h>>2]|0)+(c[e>>2]|0);h=c[f>>2]|0;i=g;return h|0}return 0}function lA(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+16|0;j=o+12|0;k=o+8|0;l=o+4|0;m=o;n=o+20|0;c[h>>2]=a;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;b[n>>1]=b[(c[(c[j>>2]|0)+4>>2]|0)+(c[l>>2]<<1)>>1]|0;if((b[n>>1]|0)==-2){c[(c[h>>2]|0)+104>>2]=c[k>>2];sA(c[h>>2]|0,c[(c[(c[(c[j>>2]|0)+40>>2]|0)+4>>2]|0)+((c[l>>2]|0)*20|0)>>2]|0,c[m>>2]|0);i=o;return}else{tA(c[(c[h>>2]|0)+8>>2]|0,c[(c[j>>2]|0)+12>>2]|0,c[k>>2]|0,b[n>>1]|0,c[m>>2]|0);i=o;return}}function mA(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0;h=i;i=i+16|0;f=h+4|0;g=h;j=h+8|0;c[g>>2]=b;a[j>>0]=e;if(((c[(c[g>>2]|0)+32>>2]|0)-1|0)>(c[(c[(c[g>>2]|0)+24>>2]|0)+96>>2]|0)?(d[(c[(c[g>>2]|0)+4>>2]|0)+(((c[(c[g>>2]|0)+32>>2]|0)-1|0)*20|0)>>0]|0|0)==(d[j>>0]|0|0):0){c[f>>2]=pA(c[g>>2]|0,(c[(c[g>>2]|0)+32>>2]|0)-1|0)|0;j=c[f>>2]|0;i=h;return j|0}c[f>>2]=0;j=c[f>>2]|0;i=h;return j|0}function nA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;oA(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0);if((c[g>>2]|0)<=(c[(c[e>>2]|0)+60>>2]|0)){i=h;return}c[(c[e>>2]|0)+60>>2]=c[g>>2];c[(c[e>>2]|0)+64>>2]=c[f>>2];i=h;return}function oA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;e=l+24|0;f=l+20|0;m=l+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[e>>2]=a;c[f>>2]=b;c[m>>2]=d;c[h>>2]=(c[f>>2]|0)+(c[m>>2]|0)-1;c[g>>2]=0;c[j>>2]=(c[e>>2]|0)+124;while(1){if((c[g>>2]|0)>=10)break;c[k>>2]=c[(c[j>>2]|0)+12>>2];if((c[k>>2]|0)>=(c[f>>2]|0)?(c[k>>2]|0)<=(c[h>>2]|0):0){hA(c[e>>2]|0,c[j>>2]|0);c[(c[j>>2]|0)+12>>2]=0}c[g>>2]=(c[g>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+20}i=l;return}function pA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=d;if(a[(c[c[f>>2]>>2]|0)+65>>0]|0){c[e>>2]=0;h=c[e>>2]|0;i=j;return h|0}else{c[h>>2]=(c[(c[f>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0);qA(c[c[f>>2]>>2]|0,a[(c[h>>2]|0)+1>>0]|0,c[(c[h>>2]|0)+16>>2]|0);a[(c[h>>2]|0)+1>>0]=0;c[(c[h>>2]|0)+16>>2]=0;a[c[h>>2]>>0]=-96;c[e>>2]=1;h=c[e>>2]|0;i=j;return h|0}return 0}function qA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j+12|0;e=j+8|0;f=j+4|0;h=j;c[g>>2]=a;c[e>>2]=b;c[f>>2]=d;if(!(c[f>>2]|0)){i=j;return}switch(c[e>>2]|0){case-20:{rA(c[g>>2]|0,c[(c[f>>2]|0)+4>>2]|0);break}case-15:case-1:case-13:case-12:break;case-6:{if(c[(c[g>>2]|0)+528>>2]|0){i=j;return}Rz(c[f>>2]|0);i=j;return}case-11:{if(c[(c[g>>2]|0)+528>>2]|0){i=j;return}Kd(c[f>>2]|0);i=j;return}case-5:{rA(c[g>>2]|0,c[f>>2]|0);i=j;return}case-8:{e=c[f>>2]|0;if(!(c[(c[g>>2]|0)+528>>2]|0)){$g(e);i=j;return}c[h>>2]=e;if(c[(c[h>>2]|0)+24>>2]|0)Sf(c[g>>2]|0,c[(c[h>>2]|0)+20>>2]|0);Sf(c[g>>2]|0,c[h>>2]|0);i=j;return}case-10:{if(c[(c[g>>2]|0)+528>>2]|0){i=j;return}hu(c[f>>2]|0);i=j;return}default:{i=j;return}}Sf(c[g>>2]|0,c[f>>2]|0);i=j;return}function rA(a,b){a=a|0;b=b|0;var d=0,f=0,g=0;g=i;i=i+16|0;d=g+4|0;f=g;c[d>>2]=a;c[f>>2]=b;if(!(c[f>>2]|0)){i=g;return}if(!((e[(c[f>>2]|0)+2>>1]|0)&16)){i=g;return}Sf(c[d>>2]|0,c[f>>2]|0);i=g;return}function sA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[j>>2]=c[c[f>>2]>>2];c[g>>2]=ny(c[j>>2]|0,c[g>>2]|0,0)|0;if(a[(c[j>>2]|0)+65>>0]|0){b=c[j>>2]|0;e=c[g>>2]|0;Zu(b,e);i=k;return}xA(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0);b=c[j>>2]|0;e=c[g>>2]|0;Zu(b,e);i=k;return}function tA(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;n=q+8|0;o=q+4|0;p=q;c[j>>2]=a;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;if((c[m>>2]|0)>=0?(c[m>>2]|0)!=(b[(c[k>>2]|0)+32>>1]|0):0){c[o>>2]=(d[(c[k>>2]|0)+42>>0]&16|0)!=0?153:47;c[p>>2]=c[m>>2];if(d[(c[k>>2]|0)+42>>0]&32){a=Ej(c[k>>2]|0)|0;c[p>>2]=(uA(a,c[m>>2]&65535)|0)<<16>>16}Vw(c[j>>2]|0,c[o>>2]|0,c[l>>2]|0,c[p>>2]|0,c[n>>2]|0)|0}else Rw(c[j>>2]|0,103,c[l>>2]|0,c[n>>2]|0)|0;if((c[m>>2]|0)<0){i=q;return}vA(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0);i=q;return}function uA(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k+10|0;f=k+4|0;g=k+8|0;h=k;c[f>>2]=a;b[g>>1]=d;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(e[(c[f>>2]|0)+52>>1]|0)){d=6;break}a=c[h>>2]|0;if((b[g>>1]|0)==(b[(c[(c[f>>2]|0)+4>>2]|0)+(c[h>>2]<<1)>>1]|0)){d=4;break}c[h>>2]=a+1}if((d|0)==4){b[j>>1]=a;j=b[j>>1]|0;i=k;return j|0}else if((d|0)==6){b[j>>1]=-1;j=b[j>>1]|0;i=k;return j|0}return 0}function vA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+20|0;h=o+16|0;j=o+12|0;k=o+8|0;n=o+4|0;l=o+24|0;m=o;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;if(c[(c[h>>2]|0)+12>>2]|0){i=o;return}c[n>>2]=0;a[l>>0]=a[(wA(c[g>>2]|0)|0)+62>>0]|0;c[m>>2]=(c[(c[h>>2]|0)+4>>2]|0)+((c[j>>2]|0)*24|0);b=wA(c[g>>2]|0)|0;dx(b,c[(c[m>>2]|0)+4>>2]|0,a[l>>0]|0,a[(c[m>>2]|0)+21>>0]|0,n)|0;if(c[n>>2]|0)Ih(c[g>>2]|0,-1,c[n>>2]|0,-8);if((a[(c[(c[h>>2]|0)+4>>2]|0)+((c[j>>2]|0)*24|0)+21>>0]|0)!=69){i=o;return}xz(c[g>>2]|0,39,c[k>>2]|0)|0;i=o;return}function wA(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[c[b>>2]>>2]|0}function xA(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;if((c[g>>2]|0)!=0?(d[c[g>>2]>>0]|0|0)==157:0){Rw(c[(c[f>>2]|0)+8>>2]|0,30,c[(c[g>>2]|0)+28>>2]|0,c[h>>2]|0)|0;i=k;return}c[j>>2]=yA(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;if((c[j>>2]|0)==(c[h>>2]|0)){i=k;return}if(!(c[(c[f>>2]|0)+8>>2]|0)){i=k;return}Rw(c[(c[f>>2]|0)+8>>2]|0,31,c[j>>2]|0,c[h>>2]|0)|0;i=k;return}function yA(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,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=i;i=i+320|0;C=la+16|0;H=la+8|0;B=la;da=la+308|0;ea=la+304|0;J=la+300|0;fa=la+296|0;ja=la+292|0;o=la+288|0;ga=la+284|0;ha=la+280|0;ia=la+276|0;R=la+272|0;y=la+268|0;z=la+264|0;A=la+260|0;L=la+256|0;U=la+208|0;q=la+200|0;r=la+196|0;m=la+192|0;n=la+188|0;D=la+184|0;E=la+180|0;u=la+176|0;j=la+172|0;s=la+168|0;T=la+164|0;S=la+160|0;Q=la+156|0;G=la+152|0;I=la+148|0;K=la+144|0;O=la+140|0;F=la+313|0;P=la+136|0;M=la+132|0;N=la+312|0;k=la+128|0;l=la+124|0;v=la+120|0;t=la+116|0;w=la+112|0;x=la+108|0;p=la+104|0;W=la+100|0;Z=la+96|0;Y=la+92|0;X=la+88|0;aa=la+84|0;V=la+80|0;$=la+32|0;ca=la+24|0;ba=la+20|0;c[ea>>2]=f;c[J>>2]=g;c[fa>>2]=h;c[ja>>2]=c[(c[ea>>2]|0)+8>>2];c[ga>>2]=c[fa>>2];c[ha>>2]=0;c[ia>>2]=0;c[L>>2]=c[c[ea>>2]>>2];if(!(c[ja>>2]|0)){c[da>>2]=0;ka=c[da>>2]|0;i=la;return ka|0}if(!(c[J>>2]|0))c[o>>2]=101;else c[o>>2]=d[c[J>>2]>>0];a:do switch(c[o>>2]|0){case 154:{c[q>>2]=c[(c[J>>2]|0)+40>>2];c[r>>2]=(c[(c[q>>2]|0)+28>>2]|0)+((b[(c[J>>2]|0)+34>>1]|0)*24|0);if(!(a[c[q>>2]>>0]|0)){c[ga>>2]=c[(c[r>>2]|0)+16>>2];break a}if(a[(c[q>>2]|0)+1>>0]|0)Vw(c[ja>>2]|0,47,c[(c[q>>2]|0)+8>>2]|0,c[(c[r>>2]|0)+12>>2]|0,c[fa>>2]|0)|0;else ka=11;break}case 152:{ka=11;break}case 132:{AA(c[ea>>2]|0,c[J>>2]|0,0,c[fa>>2]|0);break}case 133:{BA(c[ja>>2]|0,c[(c[J>>2]|0)+8>>2]|0,0,c[fa>>2]|0);break}case 97:{Tw(c[ja>>2]|0,c[fa>>2]|0,c[(c[J>>2]|0)+8>>2]|0)|0;break}case 101:{Rw(c[ja>>2]|0,25,0,c[fa>>2]|0)|0;break}case 134:{c[D>>2]=(c[(c[J>>2]|0)+8>>2]|0)+2;c[n>>2]=(If(c[D>>2]|0)|0)-1;c[E>>2]=ox(wA(c[ja>>2]|0)|0,c[D>>2]|0,c[n>>2]|0)|0;Uw(c[ja>>2]|0,27,(c[n>>2]|0)/2|0,c[fa>>2]|0,0,c[E>>2]|0,-1)|0;break}case 135:{Rw(c[ja>>2]|0,28,b[(c[J>>2]|0)+32>>1]|0,c[fa>>2]|0)|0;if(a[(c[(c[J>>2]|0)+8>>2]|0)+1>>0]|0)Ih(c[ja>>2]|0,-1,c[(c[(c[ea>>2]|0)+476>>2]|0)+((b[(c[J>>2]|0)+32>>1]|0)-1<<2)>>2]|0,-2);break}case 157:{c[ga>>2]=c[(c[J>>2]|0)+28>>2];break}case 38:{c[ga>>2]=yA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,c[fa>>2]|0)|0;if((c[ga>>2]|0)!=(c[fa>>2]|0)){Rw(c[ja>>2]|0,31,c[ga>>2]|0,c[fa>>2]|0)|0;c[ga>>2]=c[fa>>2]}Rw(c[ja>>2]|0,40,c[fa>>2]|0,(jx(c[(c[J>>2]|0)+8>>2]|0,0)|0)<<24>>24)|0;CA(c[ea>>2]|0,c[ga>>2]|0,1);break}case 79:case 78:case 83:case 80:case 81:case 82:{c[R>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,ha)|0;c[y>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+16>>2]|0,ia)|0;EA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,c[(c[J>>2]|0)+16>>2]|0,c[o>>2]|0,c[R>>2]|0,c[y>>2]|0,c[ga>>2]|0,32)|0;break}case 148:case 73:{c[R>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,ha)|0;c[y>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+16>>2]|0,ia)|0;c[o>>2]=(c[o>>2]|0)==73?79:78;EA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,c[(c[J>>2]|0)+16>>2]|0,c[o>>2]|0,c[R>>2]|0,c[y>>2]|0,c[ga>>2]|0,160)|0;break}case 94:case 88:case 87:case 92:case 86:case 85:case 93:case 90:case 91:case 89:case 71:case 72:{c[R>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,ha)|0;c[y>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+16>>2]|0,ia)|0;Vw(c[ja>>2]|0,c[o>>2]|0,c[y>>2]|0,c[R>>2]|0,c[fa>>2]|0)|0;break}case 155:{c[u>>2]=c[(c[J>>2]|0)+12>>2];do if((d[c[u>>2]>>0]|0)!=132)if((d[c[u>>2]>>0]|0)==133){BA(c[ja>>2]|0,c[(c[u>>2]|0)+8>>2]|0,1,c[fa>>2]|0);break}else{a[U>>0]=-124;c[U+4>>2]=17408;c[U+8>>2]=0;c[R>>2]=DA(c[ea>>2]|0,U,ha)|0;c[y>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,ia)|0;Vw(c[ja>>2]|0,90,c[y>>2]|0,c[R>>2]|0,c[fa>>2]|0)|0;break}else AA(c[ea>>2]|0,c[u>>2]|0,1,c[fa>>2]|0);while(0);c[ga>>2]=c[fa>>2];break}case 19:case 96:{c[R>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,ha)|0;c[ga>>2]=c[fa>>2];Rw(c[ja>>2]|0,c[o>>2]|0,c[R>>2]|0,c[ga>>2]|0)|0;break}case 77:case 76:{Rw(c[ja>>2]|0,22,1,c[fa>>2]|0)|0;c[R>>2]=DA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,ha)|0;c[j>>2]=xz(c[ja>>2]|0,c[o>>2]|0,c[R>>2]|0)|0;Rw(c[ja>>2]|0,22,0,c[fa>>2]|0)|0;Fz(c[ja>>2]|0,c[j>>2]|0);break}case 153:{c[s>>2]=c[(c[J>>2]|0)+40>>2];if(!(c[s>>2]|0)){ja=c[ea>>2]|0;c[B>>2]=c[(c[J>>2]|0)+8>>2];Ah(ja,31938,B);break a}else{c[ga>>2]=c[(c[(c[s>>2]|0)+40>>2]|0)+(b[(c[J>>2]|0)+34>>1]<<4)+8>>2];break a}}case 151:{c[K>>2]=0;a[F>>0]=a[(c[L>>2]|0)+62>>0]|0;c[P>>2]=0;if(c[(c[J>>2]|0)+4>>2]&16384)c[T>>2]=0;else c[T>>2]=c[(c[J>>2]|0)+20>>2];if(c[T>>2]|0)j=c[c[T>>2]>>2]|0;else j=0;c[S>>2]=j;c[I>>2]=c[(c[J>>2]|0)+8>>2];c[G>>2]=If(c[I>>2]|0)|0;c[Q>>2]=gi(c[L>>2]|0,c[I>>2]|0,c[G>>2]|0,c[S>>2]|0,a[F>>0]|0,0)|0;if((c[Q>>2]|0)!=0?(c[(c[Q>>2]|0)+16>>2]|0)==0:0){if(e[(c[Q>>2]|0)+2>>1]&512){c[M>>2]=Cz(c[ja>>2]|0)|0;xA(c[ea>>2]|0,c[c[(c[T>>2]|0)+4>>2]>>2]|0,c[fa>>2]|0);c[O>>2]=1;while(1){j=c[ja>>2]|0;if((c[O>>2]|0)>=(c[S>>2]|0))break;Rw(j,77,c[fa>>2]|0,c[M>>2]|0)|0;oA(c[ea>>2]|0,c[fa>>2]|0,1);iA(c[ea>>2]|0);xA(c[ea>>2]|0,c[(c[(c[T>>2]|0)+4>>2]|0)+((c[O>>2]|0)*20|0)>>2]|0,c[fa>>2]|0);gA(c[ea>>2]|0);c[O>>2]=(c[O>>2]|0)+1}Gz(j,c[M>>2]|0);break a}if(e[(c[Q>>2]|0)+2>>1]&1024){c[ga>>2]=yA(c[ea>>2]|0,c[c[(c[T>>2]|0)+4>>2]>>2]|0,c[fa>>2]|0)|0;break a}c[O>>2]=0;while(1){if((c[O>>2]|0)>=(c[S>>2]|0))break;if((c[O>>2]|0)<32?(FA(c[(c[(c[T>>2]|0)+4>>2]|0)+((c[O>>2]|0)*20|0)>>2]|0)|0)!=0:0)c[K>>2]=c[K>>2]|1<>2];if(!((c[P>>2]|0)!=0?1:(e[(c[Q>>2]|0)+2>>1]&32|0)==0))c[P>>2]=Ox(c[ea>>2]|0,c[(c[(c[T>>2]|0)+4>>2]|0)+((c[O>>2]|0)*20|0)>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+1}if(c[T>>2]|0){j=c[ea>>2]|0;if(c[K>>2]|0){c[R>>2]=(c[j+76>>2]|0)+1;ca=(c[ea>>2]|0)+76|0;c[ca>>2]=(c[ca>>2]|0)+(c[S>>2]|0)}else c[R>>2]=kA(j,c[S>>2]|0)|0;do if(e[(c[Q>>2]|0)+2>>1]&192){a[N>>0]=a[c[c[(c[T>>2]|0)+4>>2]>>2]>>0]|0;if((d[N>>0]|0)!=152?(d[N>>0]|0)!=154:0)break;a[(c[c[(c[T>>2]|0)+4>>2]>>2]|0)+38>>0]=e[(c[Q>>2]|0)+2>>1]&192}while(0);iA(c[ea>>2]|0);GA(c[ea>>2]|0,c[T>>2]|0,c[R>>2]|0,0,3)|0;gA(c[ea>>2]|0)}else c[R>>2]=0;if((c[S>>2]|0)>=2?(c[(c[J>>2]|0)+4>>2]&128|0)!=0:0)c[Q>>2]=HA(c[L>>2]|0,c[Q>>2]|0,c[S>>2]|0,c[(c[(c[T>>2]|0)+4>>2]|0)+20>>2]|0)|0;else ka=77;if((ka|0)==77?(c[S>>2]|0)>0:0)c[Q>>2]=HA(c[L>>2]|0,c[Q>>2]|0,c[S>>2]|0,c[c[(c[T>>2]|0)+4>>2]>>2]|0)|0;if(e[(c[Q>>2]|0)+2>>1]&32){if(!(c[P>>2]|0))c[P>>2]=c[(c[L>>2]|0)+8>>2];Uw(c[ja>>2]|0,34,0,0,0,c[P>>2]|0,-4)|0}Uw(c[ja>>2]|0,35,c[K>>2]|0,c[R>>2]|0,c[fa>>2]|0,c[Q>>2]|0,-5)|0;Fh(c[ja>>2]|0,c[S>>2]&255);if(!((c[S>>2]|0)!=0&(c[K>>2]|0)==0))break a;nA(c[ea>>2]|0,c[R>>2]|0,c[S>>2]|0);break a}ja=c[ea>>2]|0;fa=c[I>>2]|0;c[H>>2]=c[G>>2];c[H+4>>2]=fa;Ah(ja,31964,H);break}case 119:case 20:{c[ga>>2]=IA(c[ea>>2]|0,c[J>>2]|0,0,0)|0;break}case 75:{c[k>>2]=Cz(c[ja>>2]|0)|0;c[l>>2]=Cz(c[ja>>2]|0)|0;Rw(c[ja>>2]|0,25,0,c[fa>>2]|0)|0;JA(c[ea>>2]|0,c[J>>2]|0,c[k>>2]|0,c[l>>2]|0);Rw(c[ja>>2]|0,22,1,c[fa>>2]|0)|0;Gz(c[ja>>2]|0,c[k>>2]|0);Rw(c[ja>>2]|0,37,c[fa>>2]|0,0)|0;Gz(c[ja>>2]|0,c[l>>2]|0);break}case 74:{c[v>>2]=c[(c[J>>2]|0)+12>>2];c[t>>2]=c[(c[(c[J>>2]|0)+20>>2]|0)+4>>2];c[w>>2]=c[c[t>>2]>>2];c[R>>2]=DA(c[ea>>2]|0,c[v>>2]|0,ha)|0;c[y>>2]=DA(c[ea>>2]|0,c[w>>2]|0,ia)|0;c[z>>2]=Wz(c[ea>>2]|0)|0;c[A>>2]=Wz(c[ea>>2]|0)|0;EA(c[ea>>2]|0,c[v>>2]|0,c[w>>2]|0,83,c[R>>2]|0,c[y>>2]|0,c[z>>2]|0,32)|0;c[t>>2]=(c[t>>2]|0)+20;c[w>>2]=c[c[t>>2]>>2];_z(c[ea>>2]|0,c[ia>>2]|0);c[y>>2]=DA(c[ea>>2]|0,c[w>>2]|0,ia)|0;EA(c[ea>>2]|0,c[v>>2]|0,c[w>>2]|0,81,c[R>>2]|0,c[y>>2]|0,c[A>>2]|0,32)|0;Vw(c[ja>>2]|0,72,c[z>>2]|0,c[A>>2]|0,c[fa>>2]|0)|0;_z(c[ea>>2]|0,c[z>>2]|0);_z(c[ea>>2]|0,c[A>>2]|0);break}case 156:case 95:{c[ga>>2]=yA(c[ea>>2]|0,c[(c[J>>2]|0)+12>>2]|0,c[fa>>2]|0)|0;break}case 62:{c[x>>2]=c[(c[J>>2]|0)+44>>2];c[p>>2]=(_(c[(c[J>>2]|0)+28>>2]|0,(b[(c[x>>2]|0)+34>>1]|0)+1|0)|0)+1+(b[(c[J>>2]|0)+32>>1]|0);Rw(c[ja>>2]|0,134,c[p>>2]|0,c[fa>>2]|0)|0;if((b[(c[J>>2]|0)+32>>1]|0)>=0?(a[(c[(c[x>>2]|0)+4>>2]|0)+((b[(c[J>>2]|0)+32>>1]|0)*24|0)+21>>0]|0)==69:0)xz(c[ja>>2]|0,39,c[fa>>2]|0)|0;break}case 57:{if(!(c[(c[ea>>2]|0)+420>>2]|0)){Ah(c[ea>>2]|0,31989,C);c[da>>2]=0;ka=c[da>>2]|0;i=la;return ka|0}if((a[(c[J>>2]|0)+1>>0]|0)==2)Bx(c[ea>>2]|0);if((a[(c[J>>2]|0)+1>>0]|0)==4){Uw(c[ja>>2]|0,21,0,4,0,c[(c[J>>2]|0)+8>>2]|0,0)|0;break a}else{bA(c[ea>>2]|0,1811,a[(c[J>>2]|0)+1>>0]|0,c[(c[J>>2]|0)+8>>2]|0,0,0);break a}}default:{c[ba>>2]=0;c[aa>>2]=c[(c[J>>2]|0)+20>>2];c[V>>2]=c[(c[aa>>2]|0)+4>>2];c[Y>>2]=c[c[aa>>2]>>2];c[W>>2]=Cz(c[ja>>2]|0)|0;T=c[(c[J>>2]|0)+12>>2]|0;c[ca>>2]=T;if(T){j=U;k=c[ca>>2]|0;l=j+48|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));KA(U,DA(c[ea>>2]|0,c[ca>>2]|0,ha)|0);a[$>>0]=79;c[$+12>>2]=U;c[ba>>2]=$;c[ha>>2]=0}c[X>>2]=0;while(1){if((c[X>>2]|0)>=((c[Y>>2]|0)-1|0))break;iA(c[ea>>2]|0);j=c[(c[V>>2]|0)+((c[X>>2]|0)*20|0)>>2]|0;if(c[ca>>2]|0)c[$+16>>2]=j;else c[ba>>2]=j;c[Z>>2]=Cz(c[ja>>2]|0)|0;LA(c[ea>>2]|0,c[ba>>2]|0,c[Z>>2]|0,16);xA(c[ea>>2]|0,c[(c[V>>2]|0)+(((c[X>>2]|0)+1|0)*20|0)>>2]|0,c[fa>>2]|0);Ez(c[ja>>2]|0,c[W>>2]|0)|0;gA(c[ea>>2]|0);Gz(c[ja>>2]|0,c[Z>>2]|0);c[X>>2]=(c[X>>2]|0)+2}if(c[Y>>2]&1){iA(c[ea>>2]|0);xA(c[ea>>2]|0,c[(c[(c[aa>>2]|0)+4>>2]|0)+(((c[Y>>2]|0)-1|0)*20|0)>>2]|0,c[fa>>2]|0);gA(c[ea>>2]|0)}else Rw(c[ja>>2]|0,25,0,c[fa>>2]|0)|0;Gz(c[ja>>2]|0,c[W>>2]|0)}}while(0);b:do if((ka|0)==11){c[m>>2]=c[(c[J>>2]|0)+28>>2];do if((c[m>>2]|0)<0)if((c[(c[ea>>2]|0)+100>>2]|0)>0){c[ga>>2]=(b[(c[J>>2]|0)+32>>1]|0)+(c[(c[ea>>2]|0)+100>>2]|0);break b}else{c[m>>2]=c[(c[ea>>2]|0)+104>>2];break}while(0);c[ga>>2]=zA(c[ea>>2]|0,c[(c[J>>2]|0)+44>>2]|0,b[(c[J>>2]|0)+32>>1]|0,c[m>>2]|0,c[fa>>2]|0,a[(c[J>>2]|0)+38>>0]|0)|0}while(0);_z(c[ea>>2]|0,c[ha>>2]|0);_z(c[ea>>2]|0,c[ia>>2]|0);c[da>>2]=c[ga>>2];ka=c[da>>2]|0;i=la;return ka|0}function zA(d,e,f,g,h,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+48|0;k=v+32|0;l=v+28|0;m=v+24|0;n=v+20|0;o=v+16|0;p=v+12|0;q=v+36|0;t=v+8|0;r=v+4|0;s=v;c[l>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;a[q>>0]=j;c[t>>2]=c[(c[l>>2]|0)+8>>2];c[r>>2]=0;c[s>>2]=(c[l>>2]|0)+124;while(1){if((c[r>>2]|0)>=10)break;if(((c[(c[s>>2]|0)+12>>2]|0)>0?(c[c[s>>2]>>2]|0)==(c[o>>2]|0):0)?(b[(c[s>>2]|0)+4>>1]|0)==(c[n>>2]|0):0){u=6;break}c[r>>2]=(c[r>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+20}if((u|0)==6){t=(c[l>>2]|0)+112|0;u=c[t>>2]|0;c[t>>2]=u+1;c[(c[s>>2]|0)+16>>2]=u;fB(c[l>>2]|0,c[(c[s>>2]|0)+12>>2]|0);c[k>>2]=c[(c[s>>2]|0)+12>>2];u=c[k>>2]|0;i=v;return u|0}tA(c[t>>2]|0,c[m>>2]|0,c[o>>2]|0,c[n>>2]|0,c[p>>2]|0);if(a[q>>0]|0)Fh(c[t>>2]|0,a[q>>0]|0);else gB(c[l>>2]|0,c[o>>2]|0,c[n>>2]|0,c[p>>2]|0);c[k>>2]=c[p>>2];u=c[k>>2]|0;i=v;return u|0}function AA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+48|0;n=p+8|0;f=p+40|0;q=p+36|0;g=p+32|0;h=p+28|0;l=p+24|0;k=p+20|0;j=p+16|0;m=p;o=p+12|0;c[f>>2]=a;c[q>>2]=b;c[g>>2]=d;c[h>>2]=e;c[l>>2]=c[(c[f>>2]|0)+8>>2];e=(c[q>>2]|0)+8|0;if(c[(c[q>>2]|0)+4>>2]&1024){c[k>>2]=c[e>>2];if(c[g>>2]|0)c[k>>2]=0-(c[k>>2]|0);Rw(c[l>>2]|0,22,c[k>>2]|0,c[h>>2]|0)|0;i=p;return}c[o>>2]=c[e>>2];c[j>>2]=Ci(c[o>>2]|0,m)|0;if((c[j>>2]|0)!=0?!((c[j>>2]|0)==2&(c[g>>2]|0)!=0):0)if(!(zd(c[o>>2]|0,32088,2)|0)){q=c[f>>2]|0;c[n>>2]=c[o>>2];Ah(q,32091,n);i=p;return}else{BA(c[l>>2]|0,c[o>>2]|0,c[g>>2]|0,c[h>>2]|0);i=p;return}if(c[g>>2]|0){o=(c[j>>2]|0)==2;n=m;n=fR(0,0,c[n>>2]|0,c[n+4>>2]|0)|0;q=m;c[q>>2]=o?0:n;c[q+4>>2]=o?-2147483648:C}eB(c[l>>2]|0,23,0,c[h>>2]|0,0,m,-13)|0;i=p;return}function BA(a,b,d,e){a=a|0;b=b|0; +d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;j=m+12|0;k=m+8|0;l=m;c[f>>2]=a;c[g>>2]=b;c[j>>2]=d;c[k>>2]=e;if(!(c[g>>2]|0)){i=m;return}b=c[g>>2]|0;Ky(b,l,If(c[g>>2]|0)|0,1)|0;if(c[j>>2]|0)h[l>>3]=-+h[l>>3];eB(c[f>>2]|0,133,0,c[k>>2]|0,0,l,-12)|0;i=m;return}function CA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;oA(c[h>>2]|0,c[g>>2]|0,c[f>>2]|0);i=e;return}function DA(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;f=q+32|0;g=q+28|0;h=q+24|0;j=q+20|0;o=q+16|0;l=q+12|0;k=q+8|0;m=q+4|0;n=q;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[h>>2]=Tx(c[h>>2]|0)|0;if(((d[(c[g>>2]|0)+23>>0]|0|0)!=0?(d[c[h>>2]>>0]|0|0)!=157:0)?(dB(c[h>>2]|0)|0)!=0:0){c[l>>2]=c[(c[g>>2]|0)+324>>2];c[c[j>>2]>>2]=0;a:do if(c[l>>2]|0){c[m>>2]=c[(c[l>>2]|0)+4>>2];c[k>>2]=c[c[l>>2]>>2];while(1){if((c[k>>2]|0)<=0)break a;if(((d[(c[m>>2]|0)+13>>0]|0)>>>2&1|0)!=0?(py(c[c[m>>2]>>2]|0,c[h>>2]|0,-1)|0)==0:0)break;c[m>>2]=(c[m>>2]|0)+20;c[k>>2]=(c[k>>2]|0)+-1}c[f>>2]=c[(c[m>>2]|0)+16>>2];p=c[f>>2]|0;i=q;return p|0}while(0);e=(c[g>>2]|0)+76|0;n=(c[e>>2]|0)+1|0;c[e>>2]=n;c[o>>2]=n;_A(c[g>>2]|0,c[h>>2]|0,c[o>>2]|0,1)}else p=12;do if((p|0)==12){c[n>>2]=Wz(c[g>>2]|0)|0;c[o>>2]=yA(c[g>>2]|0,c[h>>2]|0,c[n>>2]|0)|0;if((c[o>>2]|0)==(c[n>>2]|0)){c[c[j>>2]>>2]=c[n>>2];break}else{_z(c[g>>2]|0,c[n>>2]|0);c[c[j>>2]>>2]=0;break}}while(0);c[f>>2]=c[o>>2];p=c[f>>2]|0;i=q;return p|0}function EA(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=i;i=i+48|0;n=l+40|0;v=l+36|0;u=l+32|0;s=l+28|0;p=l+24|0;r=l+20|0;q=l+16|0;t=l+12|0;m=l+8|0;k=l+4|0;o=l;c[n>>2]=a;c[v>>2]=b;c[u>>2]=d;c[s>>2]=e;c[p>>2]=f;c[r>>2]=g;c[q>>2]=h;c[t>>2]=j;c[o>>2]=VA(c[n>>2]|0,c[v>>2]|0,c[u>>2]|0)|0;c[m>>2]=(cB(c[v>>2]|0,c[u>>2]|0,c[t>>2]|0)|0)&255;c[k>>2]=Uw(c[(c[n>>2]|0)+8>>2]|0,c[s>>2]|0,c[r>>2]|0,c[q>>2]|0,c[p>>2]|0,c[o>>2]|0,-4)|0;Fh(c[(c[n>>2]|0)+8>>2]|0,c[m>>2]&255);i=l;return c[k>>2]|0}function FA(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=$A(c[d>>2]|0,1,0)|0;i=b;return a|0}function GA(b,f,g,h,j){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+64|0;k=z+44|0;l=z+40|0;m=z+36|0;n=z+32|0;o=z+49|0;v=z+28|0;q=z+24|0;s=z+20|0;t=z+16|0;p=z+48|0;x=z+12|0;u=z+8|0;r=z+4|0;w=z;c[k>>2]=b;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;a[o>>0]=j;a[p>>0]=(d[o>>0]&1|0)!=0?30:31;c[x>>2]=c[(c[k>>2]|0)+8>>2];c[t>>2]=c[c[l>>2]>>2];if(!(a[(c[k>>2]|0)+23>>0]|0))a[o>>0]=d[o>>0]&-3;c[v>>2]=c[(c[l>>2]|0)+4>>2];c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[t>>2]|0))break;c[u>>2]=c[c[v>>2]>>2];if((d[o>>0]&4|0)!=0?(g=e[(c[(c[l>>2]|0)+4>>2]|0)+((c[q>>2]|0)*20|0)+16>>1]|0,c[s>>2]=g,(g|0)>0):0)Rw(c[x>>2]|0,d[p>>0]|0,(c[s>>2]|0)+(c[n>>2]|0)-1|0,(c[m>>2]|0)+(c[q>>2]|0)|0)|0;else y=8;do if((y|0)==8){y=0;if((d[o>>0]&2|0)!=0?(FA(c[u>>2]|0)|0)!=0:0){_A(c[k>>2]|0,c[u>>2]|0,(c[m>>2]|0)+(c[q>>2]|0)|0,0);break}c[r>>2]=yA(c[k>>2]|0,c[u>>2]|0,(c[m>>2]|0)+(c[q>>2]|0)|0)|0;if((c[r>>2]|0)!=((c[m>>2]|0)+(c[q>>2]|0)|0)){if((((d[p>>0]|0)==30?(g=Mz(c[x>>2]|0,-1)|0,c[w>>2]=g,(d[g>>0]|0)==30):0)?((c[(c[w>>2]|0)+4>>2]|0)+(c[(c[w>>2]|0)+12>>2]|0)+1|0)==(c[r>>2]|0):0)?((c[(c[w>>2]|0)+8>>2]|0)+(c[(c[w>>2]|0)+12>>2]|0)+1|0)==((c[m>>2]|0)+(c[q>>2]|0)|0):0){g=(c[w>>2]|0)+12|0;c[g>>2]=(c[g>>2]|0)+1;break}Rw(c[x>>2]|0,d[p>>0]|0,c[r>>2]|0,(c[m>>2]|0)+(c[q>>2]|0)|0)|0}}while(0);c[q>>2]=(c[q>>2]|0)+1;c[v>>2]=(c[v>>2]|0)+20}i=z;return c[t>>2]|0}function HA(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+64|0;k=z+56|0;l=z+52|0;m=z+48|0;n=z+44|0;o=z+40|0;t=z+36|0;u=z+32|0;r=z+28|0;w=z+24|0;q=z+20|0;s=z+16|0;v=z+12|0;y=z+8|0;x=z+4|0;p=z;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[o>>2]=j;c[w>>2]=0;c[q>>2]=0;c[v>>2]=0;if(!(c[o>>2]|0)){c[k>>2]=c[m>>2];y=c[k>>2]|0;i=z;return y|0}if((d[c[o>>2]>>0]|0)!=152){c[k>>2]=c[m>>2];y=c[k>>2]|0;i=z;return y|0}c[t>>2]=c[(c[o>>2]|0)+44>>2];if(!(c[t>>2]|0)){c[k>>2]=c[m>>2];y=c[k>>2]|0;i=z;return y|0}if(!(d[(c[t>>2]|0)+42>>0]&16)){c[k>>2]=c[m>>2];y=c[k>>2]|0;i=z;return y|0}c[u>>2]=c[(Ax(c[l>>2]|0,c[t>>2]|0)|0)+8>>2];c[r>>2]=c[c[u>>2]>>2];if(!(c[(c[r>>2]|0)+72>>2]|0)){c[k>>2]=c[m>>2];y=c[k>>2]|0;i=z;return y|0}c[y>>2]=nh(c[l>>2]|0,c[(c[m>>2]|0)+20>>2]|0)|0;if(c[y>>2]|0){c[x>>2]=c[y>>2];while(1){if(!(a[c[x>>2]>>0]|0))break;a[c[x>>2]>>0]=a[18477+(d[c[x>>2]>>0]|0)>>0]|0;c[x>>2]=(c[x>>2]|0)+1}r=c[(c[r>>2]|0)+72>>2]|0;t=c[u>>2]|0;u=c[n>>2]|0;x=c[y>>2]|0;c[p>>2]=w;c[v>>2]=Zb[r&255](t,u,x,c[p>>2]|0,q)|0;Sf(c[l>>2]|0,c[y>>2]|0)}if(!(c[v>>2]|0)){c[k>>2]=c[m>>2];y=c[k>>2]|0;i=z;return y|0}y=c[l>>2]|0;c[s>>2]=ph(y,32+(If(c[(c[m>>2]|0)+20>>2]|0)|0)+1|0,0)|0;if(!(c[s>>2]|0)){c[k>>2]=c[m>>2];y=c[k>>2]|0;i=z;return y|0}else{x=c[s>>2]|0;y=c[m>>2]|0;c[x>>2]=c[y>>2];c[x+4>>2]=c[y+4>>2];c[x+8>>2]=c[y+8>>2];c[x+12>>2]=c[y+12>>2];c[x+16>>2]=c[y+16>>2];c[x+20>>2]=c[y+20>>2];c[x+24>>2]=c[y+24>>2];c[x+28>>2]=c[y+28>>2];c[(c[s>>2]|0)+20>>2]=(c[s>>2]|0)+32;x=c[(c[s>>2]|0)+20>>2]|0;y=c[(c[m>>2]|0)+20>>2]|0;iR(x|0,y|0,(If(c[(c[m>>2]|0)+20>>2]|0)|0)+1|0)|0;c[(c[s>>2]|0)+12>>2]=c[w>>2];c[(c[s>>2]|0)+4>>2]=c[q>>2];y=(c[s>>2]|0)+2|0;b[y>>1]=e[y>>1]|16;c[k>>2]=c[s>>2];y=c[k>>2]|0;i=z;return y|0}return 0}function IA(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=i;i=i+160|0;k=M;t=M+140|0;u=M+136|0;v=M+132|0;w=M+128|0;x=M+124|0;C=M+120|0;J=M+116|0;K=M+112|0;l=M+108|0;z=M+144|0;y=M+104|0;n=M+100|0;F=M+96|0;s=M+92|0;p=M+72|0;q=M+68|0;A=M+64|0;r=M+60|0;E=M+56|0;G=M+52|0;H=M+48|0;I=M+44|0;D=M+40|0;B=M+36|0;o=M+32|0;m=M+12|0;c[u>>2]=f;c[v>>2]=g;c[w>>2]=h;c[x>>2]=j;c[C>>2]=-1;c[J>>2]=0;c[K>>2]=Pw(c[u>>2]|0)|0;if(!(c[K>>2]|0)){c[t>>2]=0;L=c[t>>2]|0;i=M;return L|0}iA(c[u>>2]|0);if(!(c[(c[v>>2]|0)+4>>2]&32))c[C>>2]=UA(c[u>>2]|0)|0;if((d[(c[u>>2]|0)+453>>0]|0)==2){h=c[c[u>>2]>>2]|0;g=(d[c[v>>2]>>0]|0)==75?32051:32056;f=c[(c[u>>2]|0)+472>>2]|0;c[k>>2]=(c[C>>2]|0)>=0?19266:32039;c[k+4>>2]=g;c[k+8>>2]=f;c[l>>2]=Bh(h,32063,k)|0;Uw(c[K>>2]|0,161,c[(c[u>>2]|0)+468>>2]|0,0,0,c[l>>2]|0,-1)|0}j=c[v>>2]|0;do if((d[c[v>>2]>>0]|0)==75){c[n>>2]=c[j+12>>2];c[F>>2]=0;a[z>>0]=Nx(c[n>>2]|0)|0;n=(c[u>>2]|0)+72|0;o=c[n>>2]|0;c[n>>2]=o+1;c[(c[v>>2]|0)+28>>2]=o;c[y>>2]=Rw(c[K>>2]|0,57,c[(c[v>>2]|0)+28>>2]|0,((c[x>>2]|0)!=0^1)&1)|0;if(c[x>>2]|0)j=0;else j=Qz(c[c[u>>2]>>2]|0,1,1)|0;c[F>>2]=j;j=(c[v>>2]|0)+20|0;do if(!(c[(c[v>>2]|0)+4>>2]&2048)){if(c[j>>2]|0){c[r>>2]=c[(c[v>>2]|0)+20>>2];if(!(a[z>>0]|0))a[z>>0]=65;if(c[F>>2]|0){s=Ox(c[u>>2]|0,c[(c[v>>2]|0)+12>>2]|0)|0;c[(c[F>>2]|0)+20>>2]=s}c[G>>2]=Wz(c[u>>2]|0)|0;c[H>>2]=Wz(c[u>>2]|0)|0;if(c[x>>2]|0)Rw(c[K>>2]|0,25,0,c[H>>2]|0)|0;c[A>>2]=c[c[r>>2]>>2];c[E>>2]=c[(c[r>>2]|0)+4>>2];while(1){if((c[A>>2]|0)<=0)break;c[D>>2]=c[c[E>>2]>>2];if((c[C>>2]|0)>=0?(FA(c[D>>2]|0)|0)==0:0){pA(c[K>>2]|0,c[C>>2]|0)|0;c[C>>2]=-1}if((c[x>>2]|0)!=0?(ky(c[D>>2]|0,B)|0)!=0:0)Vw(c[K>>2]|0,84,c[(c[v>>2]|0)+28>>2]|0,c[H>>2]|0,c[B>>2]|0)|0;else L=29;do if((L|0)==29){L=0;c[I>>2]=yA(c[u>>2]|0,c[D>>2]|0,c[G>>2]|0)|0;j=c[K>>2]|0;g=c[I>>2]|0;if(c[x>>2]|0){Rw(j,38,g,(Bz(c[K>>2]|0)|0)+2|0)|0;Vw(c[K>>2]|0,75,c[(c[v>>2]|0)+28>>2]|0,c[H>>2]|0,c[I>>2]|0)|0;break}else{Uw(j,49,g,1,c[H>>2]|0,z,1)|0;CA(c[u>>2]|0,c[I>>2]|0,1);Rw(c[K>>2]|0,110,c[(c[v>>2]|0)+28>>2]|0,c[H>>2]|0)|0;break}}while(0);c[A>>2]=(c[A>>2]|0)+-1;c[E>>2]=(c[E>>2]|0)+20}_z(c[u>>2]|0,c[G>>2]|0);_z(c[u>>2]|0,c[H>>2]|0)}}else{c[s>>2]=c[j>>2];ZA(p,11,c[(c[v>>2]|0)+28>>2]|0);a[p+1>>0]=a[z>>0]|0;c[(c[s>>2]|0)+8>>2]=0;if(!(Cv(c[u>>2]|0,c[s>>2]|0,p)|0)){c[q>>2]=c[c[s>>2]>>2];L=VA(c[u>>2]|0,c[(c[v>>2]|0)+12>>2]|0,c[c[(c[q>>2]|0)+4>>2]>>2]|0)|0;c[(c[F>>2]|0)+20>>2]=L;break}Rz(c[F>>2]|0);c[t>>2]=0;L=c[t>>2]|0;i=M;return L|0}while(0);if(c[F>>2]|0)Ih(c[K>>2]|0,c[y>>2]|0,c[F>>2]|0,-6)}else{c[o>>2]=c[j+20>>2];I=(c[u>>2]|0)+76|0;L=(c[I>>2]|0)+1|0;c[I>>2]=L;ZA(m,0,L);if((d[c[v>>2]>>0]|0)==119){a[m>>0]=10;c[m+8>>2]=c[m+4>>2];Rw(c[K>>2]|0,25,0,c[m+4>>2]|0)|0}else{a[m>>0]=3;Rw(c[K>>2]|0,22,0,c[m+4>>2]|0)|0}Zu(c[c[u>>2]>>2]|0,c[(c[o>>2]|0)+60>>2]|0);L=rv(c[u>>2]|0,132,0,0,5100)|0;c[(c[o>>2]|0)+60>>2]=L;c[(c[o>>2]|0)+8>>2]=0;L=(c[o>>2]|0)+6|0;b[L>>1]=e[L>>1]&-513;if(!(Cv(c[u>>2]|0,c[o>>2]|0,m)|0)){c[J>>2]=c[m+4>>2];break}c[t>>2]=0;L=c[t>>2]|0;i=M;return L|0}while(0);if(c[w>>2]|0)XA(c[K>>2]|0,c[(c[v>>2]|0)+28>>2]|0,c[w>>2]|0);if((c[C>>2]|0)>=0)Fz(c[K>>2]|0,c[C>>2]|0);gA(c[u>>2]|0);c[t>>2]=c[J>>2];L=c[t>>2]|0;i=M;return L|0}function JA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+80|0;s=z+64|0;r=z+60|0;t=z+56|0;u=z+52|0;x=z+48|0;p=z+68|0;q=z+44|0;w=z+40|0;y=z+36|0;k=z+32|0;j=z+28|0;h=z+24|0;l=z+20|0;n=z+16|0;m=z+12|0;g=z+8|0;o=z+4|0;v=z;c[s>>2]=b;c[r>>2]=d;c[t>>2]=e;c[u>>2]=f;c[x>>2]=0;c[y>>2]=c[(c[s>>2]|0)+8>>2];c[q>>2]=PA(c[s>>2]|0,c[r>>2]|0,3,(c[t>>2]|0)==(c[u>>2]|0)?0:x)|0;a[p>>0]=QA(c[r>>2]|0)|0;iA(c[s>>2]|0);c[w>>2]=Wz(c[s>>2]|0)|0;xA(c[s>>2]|0,c[(c[r>>2]|0)+12>>2]|0,c[w>>2]|0);e=c[r>>2]|0;if((c[q>>2]|0)!=5){do if(RA(c[e+12>>2]|0)|0){e=c[y>>2]|0;f=c[w>>2]|0;if((c[u>>2]|0)==(c[t>>2]|0)){Rw(e,76,f,c[u>>2]|0)|0;break}else{c[o>>2]=xz(e,77,f)|0;Rw(c[y>>2]|0,108,c[(c[r>>2]|0)+28>>2]|0,c[t>>2]|0)|0;Ez(c[y>>2]|0,c[u>>2]|0)|0;Fz(c[y>>2]|0,c[o>>2]|0);break}}while(0);e=c[y>>2]|0;f=c[w>>2]|0;if((c[q>>2]|0)==1){Rw(e,38,f,c[t>>2]|0)|0;Vw(c[y>>2]|0,70,c[(c[r>>2]|0)+28>>2]|0,c[t>>2]|0,c[w>>2]|0)|0;x=c[s>>2]|0;y=c[w>>2]|0;_z(x,y);y=c[s>>2]|0;gA(y);i=z;return}Uw(e,48,f,1,0,p,1)|0;f=c[y>>2]|0;e=c[(c[r>>2]|0)+28>>2]|0;if(!(c[x>>2]|0)){Eh(f,68,e,c[t>>2]|0,c[w>>2]|0,1)|0;x=c[s>>2]|0;y=c[w>>2]|0;_z(x,y);y=c[s>>2]|0;gA(y);i=z;return}else{c[v>>2]=Eh(f,69,e,0,c[w>>2]|0,1)|0;Rw(c[y>>2]|0,76,c[x>>2]|0,c[u>>2]|0)|0;Ez(c[y>>2]|0,c[t>>2]|0)|0;Fz(c[y>>2]|0,c[v>>2]|0);x=c[s>>2]|0;y=c[w>>2]|0;_z(x,y);y=c[s>>2]|0;gA(y);i=z;return}}c[k>>2]=c[e+20>>2];c[j>>2]=Ox(c[s>>2]|0,c[(c[r>>2]|0)+12>>2]|0)|0;c[h>>2]=Cz(c[y>>2]|0)|0;c[m>>2]=0;if((c[u>>2]|0)!=(c[t>>2]|0)){c[m>>2]=Wz(c[s>>2]|0)|0;Vw(c[y>>2]|0,85,c[w>>2]|0,c[w>>2]|0,c[m>>2]|0)|0}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[c[k>>2]>>2]|0))break;c[l>>2]=DA(c[s>>2]|0,c[(c[(c[k>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)>>2]|0,n)|0;if((c[m>>2]|0)!=0?(RA(c[(c[(c[k>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)>>2]|0)|0)!=0:0)Vw(c[y>>2]|0,85,c[m>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;if((c[g>>2]|0)>=((c[c[k>>2]>>2]|0)-1|0)?(c[u>>2]|0)==(c[t>>2]|0):0){Uw(c[y>>2]|0,78,c[w>>2]|0,c[t>>2]|0,c[l>>2]|0,c[j>>2]|0,-4)|0;Fh(c[y>>2]|0,(a[p>>0]|16)&255)}else{Uw(c[y>>2]|0,79,c[w>>2]|0,c[h>>2]|0,c[l>>2]|0,c[j>>2]|0,-4)|0;Fh(c[y>>2]|0,a[p>>0]|0)}_z(c[s>>2]|0,c[n>>2]|0);c[g>>2]=(c[g>>2]|0)+1}if(c[m>>2]|0){Rw(c[y>>2]|0,76,c[m>>2]|0,c[u>>2]|0)|0;Ez(c[y>>2]|0,c[t>>2]|0)|0}Gz(c[y>>2]|0,c[h>>2]|0);_z(c[s>>2]|0,c[m>>2]|0);x=c[s>>2]|0;y=c[w>>2]|0;_z(x,y);y=c[s>>2]|0;gA(y);i=z;return}function KA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;a[(c[f>>2]|0)+38>>0]=a[c[f>>2]>>0]|0;a[c[f>>2]>>0]=-99;c[(c[f>>2]|0)+28>>2]=c[g>>2];b=(c[f>>2]|0)+4|0;c[b>>2]=c[b>>2]&-4097;i=e;return}function LA(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;g=t+44|0;h=t+40|0;j=t+36|0;k=t+32|0;s=t+28|0;n=t+24|0;q=t+20|0;r=t+16|0;o=t+12|0;p=t+8|0;l=t+4|0;m=t;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[s>>2]=c[(c[g>>2]|0)+8>>2];c[n>>2]=0;c[q>>2]=0;c[r>>2]=0;if((c[s>>2]|0)==0|(c[h>>2]|0)==0){i=t;return}c[n>>2]=((d[c[h>>2]>>0]|0)+0^1)-0;a:do switch(d[c[h>>2]>>0]|0|0){case 72:{LA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0,c[k>>2]|0);iA(c[g>>2]|0);LA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[j>>2]|0,c[k>>2]|0);gA(c[g>>2]|0);break}case 71:{c[l>>2]=Cz(c[s>>2]|0)|0;MA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[l>>2]|0,c[k>>2]^16);iA(c[g>>2]|0);LA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[j>>2]|0,c[k>>2]|0);Gz(c[s>>2]|0,c[l>>2]|0);gA(c[g>>2]|0);break}case 19:{MA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0,c[k>>2]|0);break}case 79:case 78:case 83:case 80:case 81:case 82:{c[o>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,q)|0;c[p>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,r)|0;EA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;break}case 148:case 73:{c[o>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,q)|0;c[p>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,r)|0;c[n>>2]=(d[c[h>>2]>>0]|0|0)==73?78:79;EA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[j>>2]|0,128)|0;break}case 77:case 76:{c[o>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,q)|0;Rw(c[s>>2]|0,c[n>>2]|0,c[o>>2]|0,c[j>>2]|0)|0;break}case 74:{NA(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,0,c[k>>2]|0);break}case 75:if(c[k>>2]|0){JA(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[j>>2]|0);break a}else{c[m>>2]=Cz(c[s>>2]|0)|0;JA(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[m>>2]|0);Gz(c[s>>2]|0,c[m>>2]|0);break a}default:{if(bz(c[h>>2]|0)|0){Ez(c[s>>2]|0,c[j>>2]|0)|0;break a}if(!(OA(c[h>>2]|0)|0)){c[o>>2]=DA(c[g>>2]|0,c[h>>2]|0,q)|0;Vw(c[s>>2]|0,46,c[o>>2]|0,c[j>>2]|0,(c[k>>2]|0)!=0&1)|0}}}while(0);_z(c[g>>2]|0,c[q>>2]|0);_z(c[g>>2]|0,c[r>>2]|0);i=t;return}function MA(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+64|0;g=u+48|0;h=u+44|0;j=u+40|0;k=u+36|0;t=u+32|0;o=u+28|0;r=u+24|0;s=u+20|0;p=u+16|0;q=u+12|0;l=u+8|0;m=u+4|0;n=u;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[t>>2]=c[(c[g>>2]|0)+8>>2];c[o>>2]=0;c[r>>2]=0;c[s>>2]=0;if((c[t>>2]|0)==0|(c[h>>2]|0)==0){i=u;return}c[o>>2]=d[c[h>>2]>>0];a:do switch(c[o>>2]|0){case 72:{c[l>>2]=Cz(c[t>>2]|0)|0;LA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[l>>2]|0,c[k>>2]^16);iA(c[g>>2]|0);MA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[j>>2]|0,c[k>>2]|0);Gz(c[t>>2]|0,c[l>>2]|0);gA(c[g>>2]|0);break}case 71:{MA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0,c[k>>2]|0);iA(c[g>>2]|0);MA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[j>>2]|0,c[k>>2]|0);gA(c[g>>2]|0);break}case 19:{LA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0,c[k>>2]|0);break}case 79:case 78:case 83:case 80:case 81:case 82:{c[p>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,r)|0;c[q>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,s)|0;EA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;break}case 148:case 73:{c[p>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,r)|0;c[q>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,s)|0;c[o>>2]=(c[o>>2]|0)==73?79:78;EA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[j>>2]|0,128)|0;break}case 77:case 76:{c[p>>2]=DA(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,r)|0;Rw(c[t>>2]|0,c[o>>2]|0,c[p>>2]|0,c[j>>2]|0)|0;break}case 74:{NA(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,1,c[k>>2]|0);break}case 75:{c[m>>2]=Cz(c[t>>2]|0)|0;c[n>>2]=(c[k>>2]|0)!=0?c[j>>2]|0:c[m>>2]|0;JA(c[g>>2]|0,c[h>>2]|0,c[m>>2]|0,c[n>>2]|0);Ez(c[t>>2]|0,c[j>>2]|0)|0;Gz(c[t>>2]|0,c[m>>2]|0);break}default:{if(OA(c[h>>2]|0)|0){Ez(c[t>>2]|0,c[j>>2]|0)|0;break a}if(!(bz(c[h>>2]|0)|0)){c[p>>2]=DA(c[g>>2]|0,c[h>>2]|0,r)|0;Vw(c[t>>2]|0,45,c[p>>2]|0,c[j>>2]|0,(c[k>>2]|0)!=0&1)|0}}}while(0);_z(c[g>>2]|0,c[r>>2]|0);_z(c[g>>2]|0,c[s>>2]|0);i=u;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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+224|0;o=s+216|0;h=s+212|0;m=s+208|0;p=s+204|0;n=s+200|0;q=s+152|0;j=s+104|0;k=s+56|0;l=s+8|0;r=s;c[o>>2]=b;c[h>>2]=d;c[m>>2]=e;c[p>>2]=f;c[n>>2]=g;c[r>>2]=0;e=l;g=c[(c[h>>2]|0)+12>>2]|0;f=e+48|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(f|0));a[q>>0]=72;c[q+12>>2]=j;c[q+16>>2]=k;a[j>>0]=83;c[j+12>>2]=l;c[j+16>>2]=c[c[(c[(c[h>>2]|0)+20>>2]|0)+4>>2]>>2];a[k>>0]=81;c[k+12>>2]=l;c[k+16>>2]=c[(c[(c[(c[h>>2]|0)+20>>2]|0)+4>>2]|0)+20>>2];KA(l,DA(c[o>>2]|0,l,r)|0);f=c[o>>2]|0;g=c[m>>2]|0;e=c[n>>2]|0;if(c[p>>2]|0){MA(f,q,g,e);q=c[o>>2]|0;r=c[r>>2]|0;_z(q,r);i=s;return}else{LA(f,q,g,e);q=c[o>>2]|0;r=c[r>>2]|0;_z(q,r);i=s;return}}function OA(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=0;do if(!(c[(c[d>>2]|0)+4>>2]&1))if(ky(c[d>>2]|0,e)|0){c[b>>2]=(c[e>>2]|0)!=0&1;break}else{c[b>>2]=0;break}else c[b>>2]=0;while(0);i=f;return c[b>>2]|0}function PA(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+80|0;l=F+72|0;m=F+68|0;n=F+64|0;o=F+60|0;k=F+56|0;r=F+52|0;w=F+48|0;x=F+44|0;E=F+40|0;q=F+36|0;B=F+32|0;y=F+28|0;u=F+78|0;v=F+76|0;s=F+24|0;z=F+20|0;A=F+16|0;p=F+12|0;t=F+8|0;D=F+4|0;C=F;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[o>>2]=j;c[r>>2]=0;g=(c[l>>2]|0)+72|0;j=c[g>>2]|0;c[g>>2]=j+1;c[w>>2]=j;c[E>>2]=Pw(c[l>>2]|0)|0;c[x>>2]=(c[n>>2]&4|0)!=0&1;if(c[(c[m>>2]|0)+4>>2]&2048)h=c[(c[m>>2]|0)+20>>2]|0;else h=0;c[k>>2]=h;a:do if((c[(c[l>>2]|0)+68>>2]|0)==0?(TA(c[k>>2]|0)|0)!=0:0){c[q>>2]=c[c[l>>2]>>2];c[B>>2]=c[(c[(c[k>>2]|0)+32>>2]|0)+8+16>>2];c[y>>2]=c[c[(c[c[k>>2]>>2]|0)+4>>2]>>2];b[u>>1]=b[(c[y>>2]|0)+32>>1]|0;b[v>>1]=Dh(c[q>>2]|0,c[(c[B>>2]|0)+64>>2]|0)|0;bx(c[l>>2]|0,b[v>>1]|0);yz(c[l>>2]|0,b[v>>1]|0,c[(c[B>>2]|0)+28>>2]|0,0,c[c[B>>2]>>2]|0);h=c[l>>2]|0;if((b[u>>1]|0)<0){c[s>>2]=UA(h)|0;zz(c[l>>2]|0,c[w>>2]|0,b[v>>1]|0,c[B>>2]|0,54);c[r>>2]=1;Fz(c[E>>2]|0,c[s>>2]|0);break}c[A>>2]=VA(h,c[(c[m>>2]|0)+12>>2]|0,c[y>>2]|0)|0;c[p>>2]=WA(c[m>>2]|0,a[(c[(c[B>>2]|0)+4>>2]|0)+((b[u>>1]|0)*24|0)+21>>0]|0)|0;c[z>>2]=c[(c[B>>2]|0)+8>>2];while(1){if(!((c[z>>2]|0)!=0&(c[r>>2]|0)==0&(c[p>>2]|0)!=0))break a;do if((b[c[(c[z>>2]|0)+4>>2]>>1]|0)==(b[u>>1]|0)?(y=Mj(c[q>>2]|0,a[(c[q>>2]|0)+62>>0]|0,c[c[(c[z>>2]|0)+32>>2]>>2]|0,0)|0,(y|0)==(c[A>>2]|0)):0){if(c[x>>2]|0){if((e[(c[z>>2]|0)+50>>1]|0)!=1)break;if(!(d[(c[z>>2]|0)+54>>0]|0))break}c[t>>2]=UA(c[l>>2]|0)|0;Vw(c[E>>2]|0,54,c[w>>2]|0,c[(c[z>>2]|0)+44>>2]|0,b[v>>1]|0)|0;Az(c[l>>2]|0,c[z>>2]|0);c[r>>2]=3+(d[c[(c[z>>2]|0)+28>>2]>>0]|0);if((c[o>>2]|0)!=0?(a[(c[(c[B>>2]|0)+4>>2]|0)+((b[u>>1]|0)*24|0)+20>>0]|0)==0:0){s=(c[l>>2]|0)+76|0;y=(c[s>>2]|0)+1|0;c[s>>2]=y;c[c[o>>2]>>2]=y;XA(c[E>>2]|0,c[w>>2]|0,c[c[o>>2]>>2]|0)}Fz(c[E>>2]|0,c[t>>2]|0)}while(0);c[z>>2]=c[(c[z>>2]|0)+20>>2]}}while(0);do if(((c[r>>2]|0)==0?(c[n>>2]&1|0)!=0:0)?(c[(c[m>>2]|0)+4>>2]&2048|0)==0:0){if((YA(c[m>>2]|0)|0)!=0?(c[c[(c[m>>2]|0)+20>>2]>>2]|0)>2:0)break;c[r>>2]=5}while(0);if(c[r>>2]|0){c[(c[m>>2]|0)+28>>2]=c[w>>2];E=c[r>>2]|0;i=F;return E|0}c[D>>2]=c[(c[l>>2]|0)+428>>2];c[C>>2]=0;c[r>>2]=2;if(c[n>>2]&4){c[(c[l>>2]|0)+428>>2]=0;if((b[(c[(c[m>>2]|0)+12>>2]|0)+32>>1]|0)<0?(c[(c[m>>2]|0)+4>>2]&2048|0)==0:0)c[r>>2]=1}else if(c[o>>2]|0){B=(c[l>>2]|0)+76|0;E=(c[B>>2]|0)+1|0;c[B>>2]=E;c[C>>2]=E;c[c[o>>2]>>2]=E}IA(c[l>>2]|0,c[m>>2]|0,c[C>>2]|0,(c[r>>2]|0)==1&1)|0;c[(c[l>>2]|0)+428>>2]=c[D>>2];E=c[r>>2]|0;i=F;return E|0}function QA(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f;e=f+4|0;c[d>>2]=b;a[e>>0]=Nx(c[(c[d>>2]|0)+12>>2]|0)|0;b=c[d>>2]|0;if(c[(c[d>>2]|0)+16>>2]|0){a[e>>0]=SA(c[b+16>>2]|0,a[e>>0]|0)|0;e=a[e>>0]|0;i=f;return e|0}if(c[b+4>>2]&2048){a[e>>0]=SA(c[c[(c[c[(c[d>>2]|0)+20>>2]>>2]|0)+4>>2]>>2]|0,a[e>>0]|0)|0;e=a[e>>0]|0;i=f;return e|0}if(a[e>>0]|0){e=a[e>>0]|0;i=f;return e|0}a[e>>0]=65;e=a[e>>0]|0;i=f;return e|0}function RA(e){e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k+4|0;g=k;h=k+8|0;c[g>>2]=e;while(1){if((d[c[g>>2]>>0]|0)==156)f=1;else f=(d[c[g>>2]>>0]|0)==155;e=c[g>>2]|0;if(!f)break;c[g>>2]=c[e+12>>2]}a[h>>0]=a[e>>0]|0;if((d[h>>0]|0)==157)a[h>>0]=a[(c[g>>2]|0)+38>>0]|0;switch(d[h>>0]|0){case 134:case 133:case 97:case 132:{c[j>>2]=0;j=c[j>>2]|0;i=k;return j|0}case 152:{if(!(c[(c[g>>2]|0)+4>>2]&1048576))if((b[(c[g>>2]|0)+32>>1]|0)>=0)e=(d[(c[(c[(c[g>>2]|0)+44>>2]|0)+4>>2]|0)+((b[(c[g>>2]|0)+32>>1]|0)*24|0)+20>>0]|0)==0;else e=0;else e=1;c[j>>2]=e&1;j=c[j>>2]|0;i=k;return j|0}default:{c[j>>2]=1;j=c[j>>2]|0;i=k;return j|0}}return 0}function SA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h+6|0;j=h;f=h+5|0;g=h+4|0;c[j>>2]=b;a[f>>0]=d;a[g>>0]=Nx(c[j>>2]|0)|0;if((a[g>>0]|0)!=0?(a[f>>0]|0)!=0:0){if((a[g>>0]|0)<67?(a[f>>0]|0)<67:0){a[e>>0]=65;j=a[e>>0]|0;i=h;return j|0}a[e>>0]=67;j=a[e>>0]|0;i=h;return j|0}if((a[g>>0]|0)!=0|(a[f>>0]|0)!=0){a[e>>0]=(a[g>>0]|0)+(a[f>>0]|0);j=a[e>>0]|0;i=h;return j|0}else{a[e>>0]=65;j=a[e>>0]|0;i=h;return j|0}return 0}function TA(a){a=a|0;var b=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;b=k+16|0;f=k+12|0;h=k+8|0;g=k+4|0;j=k;c[f>>2]=a;do if(c[f>>2]|0){if(c[(c[f>>2]|0)+52>>2]|0){c[b>>2]=0;break}if((e[(c[f>>2]|0)+6>>1]|0)&9){c[b>>2]=0;break}if(c[(c[f>>2]|0)+60>>2]|0){c[b>>2]=0;break}if(c[(c[f>>2]|0)+36>>2]|0){c[b>>2]=0;break}c[h>>2]=c[(c[f>>2]|0)+32>>2];if((c[c[h>>2]>>2]|0)!=1){c[b>>2]=0;break}if(c[(c[h>>2]|0)+8+20>>2]|0){c[b>>2]=0;break}c[j>>2]=c[(c[h>>2]|0)+8+16>>2];if(!(c[j>>2]|0)){c[b>>2]=0;break}if((d[(c[j>>2]|0)+42>>0]|0)&16){c[b>>2]=0;break}c[g>>2]=c[c[f>>2]>>2];if((c[c[g>>2]>>2]|0)!=1){c[b>>2]=0;break}if((d[c[c[(c[g>>2]|0)+4>>2]>>2]>>0]|0|0)!=152){c[b>>2]=0;break}else{c[b>>2]=1;break}}else c[b>>2]=0;while(0);i=k;return c[b>>2]|0}function UA(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=Pw(c[e>>2]|0)|0;d=c[d>>2]|0;e=(c[e>>2]|0)+84|0;a=c[e>>2]|0;c[e>>2]=a+1;a=xz(d,44,a)|0;i=b;return a|0}function VA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(c[(c[f>>2]|0)+4>>2]&256){c[h>>2]=Ox(c[e>>2]|0,c[f>>2]|0)|0;d=c[h>>2]|0;i=j;return d|0}if((c[g>>2]|0)!=0?(c[(c[g>>2]|0)+4>>2]&256|0)!=0:0){c[h>>2]=Ox(c[e>>2]|0,c[g>>2]|0)|0;d=c[h>>2]|0;i=j;return d|0}c[h>>2]=Ox(c[e>>2]|0,c[f>>2]|0)|0;if(c[h>>2]|0){d=c[h>>2]|0;i=j;return d|0}c[h>>2]=Ox(c[e>>2]|0,c[g>>2]|0)|0;d=c[h>>2]|0;i=j;return d|0}function WA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;e=g+4|0;j=g;f=g+9|0;h=g+8|0;c[j>>2]=b;a[f>>0]=d;a[h>>0]=QA(c[j>>2]|0)|0;switch(a[h>>0]|0){case 65:{c[e>>2]=1;break}case 66:{c[e>>2]=(a[f>>0]|0)==66&1;break}default:c[e>>2]=(a[f>>0]|0)>=67&1}i=g;return c[e>>2]|0}function XA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+16|0;g=e+12|0;j=e+8|0;h=e+4|0;f=e;c[g>>2]=a;c[j>>2]=b;c[h>>2]=d;Rw(c[g>>2]|0,22,0,c[h>>2]|0)|0;c[f>>2]=xz(c[g>>2]|0,108,c[j>>2]|0)|0;Vw(c[g>>2]|0,47,c[j>>2]|0,0,c[h>>2]|0)|0;Fh(c[g>>2]|0,-128);Fz(c[g>>2]|0,c[f>>2]|0);i=e;return}function YA(a){a=a|0;var b=0,d=0,e=0,f=0;d=i;i=i+16|0;e=d+8|0;f=d+4|0;b=d;c[e>>2]=a;c[f>>2]=c[(c[e>>2]|0)+12>>2];c[(c[e>>2]|0)+12>>2]=0;c[b>>2]=FA(c[e>>2]|0)|0;c[(c[e>>2]|0)+12>>2]=c[f>>2];i=d;return c[b>>2]|0}function ZA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f+8|0;j=f+4|0;h=f;c[g>>2]=b;c[j>>2]=d;c[h>>2]=e;a[c[g>>2]>>0]=c[j>>2];c[(c[g>>2]|0)+4>>2]=c[h>>2];a[(c[g>>2]|0)+1>>0]=0;c[(c[g>>2]|0)+8>>2]=0;c[(c[g>>2]|0)+12>>2]=0;i=f;return}function _A(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;h=n+16|0;o=n+12|0;j=n+8|0;k=n+20|0;l=n+4|0;m=n;c[h>>2]=b;c[o>>2]=e;c[j>>2]=f;a[k>>0]=g;c[l>>2]=c[(c[h>>2]|0)+324>>2];c[o>>2]=ny(c[c[h>>2]>>2]|0,c[o>>2]|0,0)|0;c[l>>2]=Gv(c[h>>2]|0,c[l>>2]|0,c[o>>2]|0)|0;if(!(c[l>>2]|0)){g=c[l>>2]|0;o=c[h>>2]|0;o=o+324|0;c[o>>2]=g;i=n;return}c[m>>2]=(c[(c[l>>2]|0)+4>>2]|0)+(((c[c[l>>2]>>2]|0)-1|0)*20|0);c[(c[m>>2]|0)+16>>2]=c[j>>2];g=(c[m>>2]|0)+13|0;a[g>>0]=a[g>>0]&-5|((d[k>>0]|0)&1)<<2&255;g=c[l>>2]|0;o=c[h>>2]|0;o=o+324|0;c[o>>2]=g;i=n;return}function $A(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;h=i;i=i+48|0;j=h+36|0;l=h+32|0;k=h+28|0;g=h;c[j>>2]=b;c[l>>2]=e;c[k>>2]=f;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;a[g+20>>0]=c[l>>2];c[g+4>>2]=197;c[g+8>>2]=198;c[g+24>>2]=c[k>>2];by(g,c[j>>2]|0)|0;i=h;return d[g+20>>0]|0|0}function aB(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+8|0;g=k+4|0;h=k;c[g>>2]=b;c[h>>2]=e;if((d[(c[g>>2]|0)+20>>0]|0|0)==2?(c[(c[h>>2]|0)+4>>2]&1|0)!=0:0){a[(c[g>>2]|0)+20>>0]=0;c[f>>2]=2}else j=4;a:do if((j|0)==4){b:do switch(d[c[h>>2]>>0]|0|0){case 151:{if((d[(c[g>>2]|0)+20>>0]|0|0)<4?(c[(c[h>>2]|0)+4>>2]&524288|0)==0:0){a[(c[g>>2]|0)+20>>0]=0;c[f>>2]=2;break a}c[f>>2]=0;break a}case 154:case 153:case 152:case 27:{if((d[(c[g>>2]|0)+20>>0]|0|0)==3?(c[(c[h>>2]|0)+28>>2]|0)==(c[(c[g>>2]|0)+24>>2]|0):0){c[f>>2]=0;break a}a[(c[g>>2]|0)+20>>0]=0;c[f>>2]=2;break a}case 135:{if((d[(c[g>>2]|0)+20>>0]|0|0)==5){a[c[h>>2]>>0]=101;break b}if((d[(c[g>>2]|0)+20>>0]|0|0)==4){a[(c[g>>2]|0)+20>>0]=0;c[f>>2]=2;break a}break}default:{}}while(0);c[f>>2]=0}while(0);i=k;return c[f>>2]|0}function bB(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e+4|0;c[f>>2]=b;c[e>>2]=d;a[(c[f>>2]|0)+20>>0]=0;i=e;return 2}function cB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;g=i;i=i+16|0;j=g+8|0;k=g+4|0;h=g;f=g+12|0;c[j>>2]=b;c[k>>2]=d;c[h>>2]=e;a[f>>0]=Nx(c[k>>2]|0)|0;d=(SA(c[j>>2]|0,a[f>>0]|0)|0)&255;a[f>>0]=d|c[h>>2]&255;i=g;return a[f>>0]|0}function dB(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=$A(c[d>>2]|0,2,0)|0;i=b;return a|0}function eB(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;k=s+28|0;l=s+24|0;m=s+20|0;n=s+16|0;o=s+12|0;p=s+8|0;q=s+4|0;r=s;c[k>>2]=b;c[l>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=j;c[r>>2]=Fw(wA(c[k>>2]|0)|0,8,0)|0;if(c[r>>2]|0){h=c[r>>2]|0;j=c[p>>2]|0;a[h>>0]=a[j>>0]|0;a[h+1>>0]=a[j+1>>0]|0;a[h+2>>0]=a[j+2>>0]|0;a[h+3>>0]=a[j+3>>0]|0;a[h+4>>0]=a[j+4>>0]|0;a[h+5>>0]=a[j+5>>0]|0;a[h+6>>0]=a[j+6>>0]|0;a[h+7>>0]=a[j+7>>0]|0}h=Uw(c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[r>>2]|0,c[q>>2]|0)|0;i=s;return h|0}function fB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;e=h+8|0;f=h+4|0;g=h;c[j>>2]=b;c[e>>2]=d;c[f>>2]=0;c[g>>2]=(c[j>>2]|0)+124;while(1){if((c[f>>2]|0)>=10)break;if((c[(c[g>>2]|0)+12>>2]|0)==(c[e>>2]|0))a[(c[g>>2]|0)+6>>0]=0;c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+20}i=h;return}function gB(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;j=s+28|0;k=s+24|0;l=s+20|0;m=s+16|0;n=s+12|0;p=s+8|0;o=s+4|0;q=s;c[j>>2]=d;c[k>>2]=f;c[l>>2]=g;c[m>>2]=h;if((e[(c[c[j>>2]>>2]|0)+60>>1]|0)&2){i=s;return}c[n>>2]=0;c[q>>2]=(c[j>>2]|0)+124;while(1){if((c[n>>2]|0)>=10)break;if(!(c[(c[q>>2]|0)+12>>2]|0)){r=5;break}c[n>>2]=(c[n>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+20}if((r|0)==5){c[(c[q>>2]|0)+8>>2]=c[(c[j>>2]|0)+108>>2];c[c[q>>2]>>2]=c[k>>2];b[(c[q>>2]|0)+4>>1]=c[l>>2];c[(c[q>>2]|0)+12>>2]=c[m>>2];a[(c[q>>2]|0)+6>>0]=0;d=(c[j>>2]|0)+112|0;r=c[d>>2]|0;c[d>>2]=r+1;c[(c[q>>2]|0)+16>>2]=r;i=s;return}c[p>>2]=2147483647;c[o>>2]=-1;c[n>>2]=0;c[q>>2]=(c[j>>2]|0)+124;while(1){if((c[n>>2]|0)>=10)break;if((c[(c[q>>2]|0)+16>>2]|0)<(c[p>>2]|0)){c[o>>2]=c[n>>2];c[p>>2]=c[(c[q>>2]|0)+16>>2]}c[n>>2]=(c[n>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+20}if((c[o>>2]|0)<0){i=s;return}c[q>>2]=(c[j>>2]|0)+124+((c[o>>2]|0)*20|0);c[(c[q>>2]|0)+8>>2]=c[(c[j>>2]|0)+108>>2];c[c[q>>2]>>2]=c[k>>2];b[(c[q>>2]|0)+4>>1]=c[l>>2];c[(c[q>>2]|0)+12>>2]=c[m>>2];a[(c[q>>2]|0)+6>>0]=0;d=(c[j>>2]|0)+112|0;r=c[d>>2]|0;c[d>>2]=r+1;c[(c[q>>2]|0)+16>>2]=r;i=s;return}function hB(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+16|0;f=l+12|0;g=l+8|0;h=l+4|0;j=l;c[f>>2]=a;c[g>>2]=d;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(e[(c[g>>2]|0)+52>>1]|0)){f=7;break}c[j>>2]=c[(c[(c[g>>2]|0)+32>>2]|0)+(c[h>>2]<<2)>>2];if((b[(c[(c[g>>2]|0)+4>>2]|0)+(c[h>>2]<<1)>>1]|0)>=0?0==(Td(c[j>>2]|0,c[f>>2]|0)|0):0){f=5;break}c[h>>2]=(c[h>>2]|0)+1}if((f|0)==5){c[k>>2]=1;k=c[k>>2]|0;i=l;return k|0}else if((f|0)==7){c[k>>2]=0;k=c[k>>2]|0;i=l;return k|0}return 0}function iB(a,e,f,g,h,j,k){a=a|0;e=e|0;f=f|0;g=g|0;h=h|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;y=i;i=i+80|0;l=y+76|0;m=y+72|0;n=y+68|0;o=y+64|0;p=y+60|0;q=y+56|0;r=y+52|0;t=y+48|0;v=y+16|0;w=y+12|0;s=y+8|0;u=y+4|0;x=y;c[l>>2]=a;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=j;c[r>>2]=k;c[s>>2]=c[c[l>>2]>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;c[v+16>>2]=0;c[v+20>>2]=0;c[v+24>>2]=0;c[v+28>>2]=0;c[v>>2]=c[l>>2];e=jB(v,c[p>>2]|0)|0;c[t>>2]=e;do if((0==(e|0)?(e=jB(v,c[q>>2]|0)|0,c[t>>2]=e,0==(e|0)):0)?(e=jB(v,c[r>>2]|0)|0,c[t>>2]=e,0==(e|0)):0){if(c[o>>2]|0){if((d[c[o>>2]>>0]|0)==97)c[x>>2]=c[(c[o>>2]|0)+8>>2];else c[x>>2]=0;c[t>>2]=Mw(c[l>>2]|0,c[m>>2]|0,c[x>>2]|0,0,0)|0;if(c[t>>2]|0)break}c[w>>2]=Pw(c[l>>2]|0)|0;c[u>>2]=kA(c[l>>2]|0,4)|0;xA(c[l>>2]|0,c[p>>2]|0,c[u>>2]|0);xA(c[l>>2]|0,c[q>>2]|0,(c[u>>2]|0)+1|0);xA(c[l>>2]|0,c[r>>2]|0,(c[u>>2]|0)+2|0);if(c[w>>2]|0){Uw(c[w>>2]|0,35,0,(c[u>>2]|0)+3-(b[c[n>>2]>>1]|0)|0,(c[u>>2]|0)+3|0,c[n>>2]|0,-5)|0;Fh(c[w>>2]|0,b[c[n>>2]>>1]&255);xz(c[w>>2]|0,147,(c[m>>2]|0)==24&1)|0}}while(0);Zu(c[s>>2]|0,c[p>>2]|0);Zu(c[s>>2]|0,c[q>>2]|0);Zu(c[s>>2]|0,c[r>>2]|0);i=y;return}function jB(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=e;c[h>>2]=0;do if(c[g>>2]|0)if((d[c[g>>2]>>0]|0|0)!=27){c[h>>2]=fy(c[f>>2]|0,c[g>>2]|0)|0;break}else{a[c[g>>2]>>0]=97;break}while(0);i=j;return c[h>>2]|0}function kB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+192|0;n=q+24|0;m=q+16|0;l=q+8|0;k=q;f=q+52|0;r=q+44|0;p=q+40|0;g=q+36|0;h=q+32|0;j=q+28|0;o=q+56|0;c[f>>2]=b;c[q+48>>2]=d;c[r>>2]=e;c[p>>2]=ae(c[c[r>>2]>>2]|0)|0;c[g>>2]=we(c[f>>2]|0)|0;c[j>>2]=0;if(!(c[p>>2]|0))c[p>>2]=19266;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[(c[g>>2]|0)+20>>2]|0))break;c[j>>2]=(c[(c[g>>2]|0)+16>>2]|0)+(c[h>>2]<<4);if((c[(c[j>>2]|0)+4>>2]|0)!=0?(Td(c[c[j>>2]>>2]|0,c[p>>2]|0)|0)==0:0)break;c[h>>2]=(c[h>>2]|0)+1}do if((c[h>>2]|0)>=(c[(c[g>>2]|0)+20>>2]|0)){c[k>>2]=c[p>>2];Qd(128,o,32129,k)|0}else{if((c[h>>2]|0)<2){c[l>>2]=c[p>>2];Qd(128,o,32150,l)|0;break}if(!(a[(c[g>>2]|0)+63>>0]|0)){Qd(128,o,32176,m)|0;break}if((og(c[(c[j>>2]|0)+4>>2]|0)|0)==0?(fu(c[(c[j>>2]|0)+4>>2]|0)|0)==0:0){lB(c[(c[j>>2]|0)+4>>2]|0)|0;c[(c[j>>2]|0)+4>>2]=0;c[(c[j>>2]|0)+12>>2]=0;mB(c[g>>2]|0);i=q;return}c[n>>2]=c[p>>2];Qd(128,o,32218,n)|0}while(0);je(c[f>>2]|0,o,-1);i=q;return}function lB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[d>>2]=b;c[e>>2]=c[(c[d>>2]|0)+4>>2];kg(c[d>>2]|0);c[f>>2]=c[(c[e>>2]|0)+8>>2];while(1){if(!(c[f>>2]|0))break;c[g>>2]=c[f>>2];c[f>>2]=c[(c[f>>2]|0)+8>>2];if((c[c[g>>2]>>2]|0)!=(c[d>>2]|0))continue;nB(c[g>>2]|0)|0}Mg(c[d>>2]|0,0,0)|0;if(!((a[(c[d>>2]|0)+9>>0]|0)!=0?(oB(c[e>>2]|0)|0)==0:0)){ar(c[c[e>>2]>>2]|0)|0;if((c[(c[e>>2]|0)+52>>2]|0)!=0?(c[(c[e>>2]|0)+48>>2]|0)!=0:0)Qb[c[(c[e>>2]|0)+52>>2]&255](c[(c[e>>2]|0)+48>>2]|0);Sf(0,c[(c[e>>2]|0)+48>>2]|0);Pi(c[e>>2]|0);Kd(c[e>>2]|0)}if(c[(c[d>>2]|0)+28>>2]|0)c[(c[(c[d>>2]|0)+28>>2]|0)+24>>2]=c[(c[d>>2]|0)+24>>2];if(!(c[(c[d>>2]|0)+24>>2]|0)){g=c[d>>2]|0;Kd(g);i=h;return 0}c[(c[(c[d>>2]|0)+24>>2]|0)+28>>2]=c[(c[d>>2]|0)+28>>2];g=c[d>>2]|0;Kd(g);i=h;return 0}function mB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;b=g+12|0;d=g+8|0;e=g+4|0;f=g;c[b>>2]=a;c[e>>2]=2;c[d>>2]=2;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+20>>2]|0))break;c[f>>2]=(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4);if(!(c[(c[f>>2]|0)+4>>2]|0)){Sf(c[b>>2]|0,c[c[f>>2]>>2]|0);c[c[f>>2]>>2]=0}else{if((c[e>>2]|0)<(c[d>>2]|0)){a=(c[(c[b>>2]|0)+16>>2]|0)+(c[e>>2]<<4)|0;h=(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4)|0;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]}c[e>>2]=(c[e>>2]|0)+1}c[d>>2]=(c[d>>2]|0)+1}c[(c[b>>2]|0)+20>>2]=c[e>>2];if((c[(c[b>>2]|0)+20>>2]|0)>2){i=g;return}if((c[(c[b>>2]|0)+16>>2]|0)==((c[b>>2]|0)+460|0)){i=g;return}h=(c[b>>2]|0)+460|0;f=c[(c[b>>2]|0)+16>>2]|0;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];c[h+24>>2]=c[f+24>>2];c[h+28>>2]=c[f+28>>2];Sf(c[b>>2]|0,c[(c[b>>2]|0)+16>>2]|0);c[(c[b>>2]|0)+16>>2]=(c[b>>2]|0)+460;i=g;return}function nB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;g=j+12|0;e=j+8|0;f=j+4|0;h=j;c[d>>2]=b;c[g>>2]=c[c[d>>2]>>2];if(!(c[g>>2]|0)){i=j;return 0}c[f>>2]=c[(c[d>>2]|0)+4>>2];kg(c[g>>2]|0);pB(c[d>>2]|0);a:do if((c[(c[f>>2]|0)+8>>2]|0)==(c[d>>2]|0))c[(c[f>>2]|0)+8>>2]=c[(c[d>>2]|0)+8>>2];else{c[h>>2]=c[(c[f>>2]|0)+8>>2];while(1){if((c[(c[h>>2]|0)+8>>2]|0)==(c[d>>2]|0))break;c[h>>2]=c[(c[h>>2]|0)+8>>2];if(!(c[h>>2]|0))break a}c[(c[h>>2]|0)+8>>2]=c[(c[d>>2]|0)+8>>2]}while(0);c[e>>2]=0;while(1){if((c[e>>2]|0)>(a[(c[d>>2]|0)+68>>0]|0))break;qB(c[(c[d>>2]|0)+120+(c[e>>2]<<2)>>2]|0);c[e>>2]=(c[e>>2]|0)+1}rB(c[f>>2]|0);Kd(c[(c[d>>2]|0)+12>>2]|0);i=j;return 0}function oB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[f>>2]=0;b=(c[d>>2]|0)+64|0;c[b>>2]=(c[b>>2]|0)+-1;if((c[(c[d>>2]|0)+64>>2]|0)>0){ +f=c[f>>2]|0;i=g;return f|0}if((c[1208]|0)!=(c[d>>2]|0)){c[e>>2]=c[1208];while(1){if(c[e>>2]|0)b=(c[(c[e>>2]|0)+68>>2]|0)!=(c[d>>2]|0);else b=0;a=c[e>>2]|0;if(!b)break;c[e>>2]=c[a+68>>2]}if(a)c[(c[e>>2]|0)+68>>2]=c[(c[d>>2]|0)+68>>2]}else c[1208]=c[(c[d>>2]|0)+68>>2];c[f>>2]=1;f=c[f>>2]|0;i=g;return f|0}function pB(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;Kd(c[(c[e>>2]|0)+48>>2]|0);c[(c[e>>2]|0)+48>>2]=0;a[(c[e>>2]|0)+66>>0]=0;i=d;return}function qB(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}sB(c[b>>2]|0);i=d;return}function rB(a){a=a|0;var b=0,e=0,f=0;f=i;i=i+16|0;b=f+4|0;e=f;c[b>>2]=a;if(d[(c[b>>2]|0)+20>>0]|0){i=f;return}if(!(c[(c[b>>2]|0)+12>>2]|0)){i=f;return}c[e>>2]=c[(c[b>>2]|0)+12>>2];c[(c[b>>2]|0)+12>>2]=0;sB(c[e>>2]|0);i=f;return}function sB(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;zs(c[(c[d>>2]|0)+72>>2]|0);i=b;return}function tB(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=i;i=i+128|0;w=E+48|0;v=E+40|0;y=E+32|0;x=E+24|0;k=E+16|0;j=E+8|0;h=E;n=E+116|0;F=E+108|0;g=E+104|0;u=E+100|0;p=E+96|0;C=E+92|0;B=E+88|0;D=E+84|0;z=E+80|0;q=E+76|0;o=E+72|0;A=E+68|0;t=E+64|0;l=E+60|0;s=E+56|0;r=E+52|0;c[n>>2]=b;c[E+112>>2]=e;c[F>>2]=f;c[u>>2]=0;c[p>>2]=we(c[n>>2]|0)|0;c[D>>2]=0;c[z>>2]=0;c[A>>2]=0;c[B>>2]=ae(c[c[F>>2]>>2]|0)|0;c[C>>2]=ae(c[(c[F>>2]|0)+4>>2]|0)|0;if(!(c[B>>2]|0))c[B>>2]=19266;if(!(c[C>>2]|0))c[C>>2]=19266;e=c[p>>2]|0;do if((c[(c[p>>2]|0)+20>>2]|0)<((c[(c[p>>2]|0)+88+28>>2]|0)+2|0)){if(!(a[e+63>>0]|0)){c[A>>2]=Bh(c[p>>2]|0,32291,j)|0;break}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[p>>2]|0)+20>>2]|0))break;c[l>>2]=c[(c[(c[p>>2]|0)+16>>2]|0)+(c[g>>2]<<4)>>2];if(!(Td(c[l>>2]|0,c[C>>2]|0)|0)){m=12;break}c[g>>2]=(c[g>>2]|0)+1}if((m|0)==12){F=c[p>>2]|0;c[k>>2]=c[C>>2];c[A>>2]=Bh(F,32333,k)|0;break}e=c[p>>2]|0;do if((c[(c[p>>2]|0)+16>>2]|0)==((c[p>>2]|0)+460|0)){c[o>>2]=Fw(e,48,0)|0;if(!(c[o>>2]|0)){i=E;return}else{F=c[o>>2]|0;m=c[(c[p>>2]|0)+16>>2]|0;c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];c[F+8>>2]=c[m+8>>2];c[F+12>>2]=c[m+12>>2];c[F+16>>2]=c[m+16>>2];c[F+20>>2]=c[m+20>>2];c[F+24>>2]=c[m+24>>2];c[F+28>>2]=c[m+28>>2];break}}else{c[o>>2]=Ew(e,c[(c[p>>2]|0)+16>>2]|0,(c[(c[p>>2]|0)+20>>2]|0)+1<<4,0)|0;if(!(c[o>>2]|0)){i=E;return}}while(0);c[(c[p>>2]|0)+16>>2]=c[o>>2];c[o>>2]=(c[(c[p>>2]|0)+16>>2]|0)+(c[(c[p>>2]|0)+20>>2]<<4);F=c[o>>2]|0;c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[q>>2]=c[(c[p>>2]|0)+48>>2];c[u>>2]=Wj(c[(c[c[p>>2]>>2]|0)+16>>2]|0,c[B>>2]|0,q,t,D,z)|0;if(c[u>>2]|0){if((c[u>>2]|0)==7)jh(c[p>>2]|0);je(c[n>>2]|0,c[z>>2]|0,-1);Kd(c[z>>2]|0);i=E;return}c[q>>2]=c[q>>2]|256;c[u>>2]=Xj(c[t>>2]|0,c[D>>2]|0,c[p>>2]|0,(c[o>>2]|0)+4|0,0,c[q>>2]|0)|0;Kd(c[D>>2]|0);F=(c[p>>2]|0)+20|0;c[F>>2]=(c[F>>2]|0)+1;if((c[u>>2]|0)!=19){if(!(c[u>>2]|0)){F=Yj(c[p>>2]|0,c[(c[o>>2]|0)+4>>2]|0)|0;c[(c[o>>2]|0)+12>>2]=F;if(c[(c[o>>2]|0)+12>>2]|0){if((d[(c[(c[o>>2]|0)+12>>2]|0)+76>>0]|0)!=0?(d[(c[(c[o>>2]|0)+12>>2]|0)+77>>0]|0)!=(d[(c[p>>2]|0)+62>>0]|0):0){c[A>>2]=Bh(c[p>>2]|0,20880,y)|0;c[u>>2]=1}}else c[u>>2]=7;kg(c[(c[o>>2]|0)+4>>2]|0);c[s>>2]=Of(c[(c[o>>2]|0)+4>>2]|0)|0;uB(c[s>>2]|0,d[(c[p>>2]|0)+67>>0]|0)|0;F=c[(c[o>>2]|0)+4>>2]|0;vB(F,vB(c[(c[(c[p>>2]|0)+16>>2]|0)+4>>2]|0,-1)|0)|0;wB(c[(c[o>>2]|0)+4>>2]|0,3|c[(c[p>>2]|0)+24>>2]&56)|0}}else{c[u>>2]=1;c[A>>2]=Bh(c[p>>2]|0,32363,x)|0}a[(c[o>>2]|0)+8>>0]=3;F=nh(c[p>>2]|0,c[C>>2]|0)|0;c[c[o>>2]>>2]=F;if((c[u>>2]|0)==0?(c[c[o>>2]>>2]|0)==0:0)c[u>>2]=7;if(!(c[u>>2]|0)){Nf(c[p>>2]|0);c[u>>2]=oi(c[p>>2]|0,A)|0}if(!(c[u>>2]|0)){i=E;return}c[r>>2]=(c[(c[p>>2]|0)+20>>2]|0)-1;if(c[(c[(c[p>>2]|0)+16>>2]|0)+(c[r>>2]<<4)+4>>2]|0){lB(c[(c[(c[p>>2]|0)+16>>2]|0)+(c[r>>2]<<4)+4>>2]|0)|0;c[(c[(c[p>>2]|0)+16>>2]|0)+(c[r>>2]<<4)+4>>2]=0;c[(c[(c[p>>2]|0)+16>>2]|0)+(c[r>>2]<<4)+12>>2]=0}zg(c[p>>2]|0);c[(c[p>>2]|0)+20>>2]=c[r>>2];if((c[u>>2]|0)==7|(c[u>>2]|0)==3082){jh(c[p>>2]|0);Sf(c[p>>2]|0,c[A>>2]|0);c[A>>2]=Bh(c[p>>2]|0,32392,v)|0;break}if(!(c[A>>2]|0)){F=c[p>>2]|0;c[w>>2]=c[B>>2];c[A>>2]=Bh(F,32406,w)|0}}else{c[h>>2]=c[(c[p>>2]|0)+88+28>>2];c[A>>2]=Bh(e,32254,h)|0}while(0);if(c[A>>2]|0){je(c[n>>2]|0,c[A>>2]|0,-1);Sf(c[p>>2]|0,c[A>>2]|0)}if(!(c[u>>2]|0)){i=E;return}re(c[n>>2]|0,c[u>>2]|0);i=E;return}function uB(b,e){b=b|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=b;c[g>>2]=e;if(((c[g>>2]|0)>=0?(a[(c[f>>2]|0)+13>>0]|0)==0:0)?(yB(c[(c[f>>2]|0)+216>>2]|0)|0)==0:0)a[(c[f>>2]|0)+4>>0]=c[g>>2];i=h;return d[(c[f>>2]|0)+4>>0]|0}function vB(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=a;c[h>>2]=d;if(!(c[g>>2]|0)){c[f>>2]=0;a=c[f>>2]|0;i=k;return a|0}kg(c[g>>2]|0);if((c[h>>2]|0)>=0?(a=(c[(c[g>>2]|0)+4>>2]|0)+22|0,b[a>>1]=(e[a>>1]|0)&-5,(c[h>>2]|0)!=0):0){a=(c[(c[g>>2]|0)+4>>2]|0)+22|0;b[a>>1]=e[a>>1]|0|4}c[j>>2]=((e[(c[(c[g>>2]|0)+4>>2]|0)+22>>1]|0)&4|0)!=0&1;c[f>>2]=c[j>>2];a=c[f>>2]|0;i=k;return a|0}function wB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;g=d+8|0;e=d+4|0;f=d;c[g>>2]=a;c[e>>2]=b;c[f>>2]=c[(c[g>>2]|0)+4>>2];kg(c[g>>2]|0);xB(c[c[f>>2]>>2]|0,c[e>>2]|0);i=d;return 0}function xB(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j+8|0;h=j+4|0;f=j;c[g>>2]=b;c[h>>2]=e;c[f>>2]=c[h>>2]&7;if(a[(c[g>>2]|0)+13>>0]|0){a[(c[g>>2]|0)+7>>0]=1;a[(c[g>>2]|0)+8>>0]=0;a[(c[g>>2]|0)+9>>0]=0}else{a[(c[g>>2]|0)+7>>0]=(c[f>>2]|0)==1?1:0;a[(c[g>>2]|0)+8>>0]=(c[f>>2]|0)>>>0>=3?1:0;a[(c[g>>2]|0)+9>>0]=(c[f>>2]|0)==4?1:0}do if(!(a[(c[g>>2]|0)+7>>0]|0)){if(c[h>>2]&8){a[(c[g>>2]|0)+12>>0]=3;a[(c[g>>2]|0)+10>>0]=3;break}e=(c[h>>2]&16|0)!=0;a[(c[g>>2]|0)+12>>0]=2;f=(c[g>>2]|0)+10|0;if(e){a[f>>0]=3;break}else{a[f>>0]=2;break}}else{a[(c[g>>2]|0)+12>>0]=0;a[(c[g>>2]|0)+10>>0]=0}while(0);a[(c[g>>2]|0)+11>>0]=a[(c[g>>2]|0)+12>>0]|0;if(a[(c[g>>2]|0)+8>>0]|0){e=(c[g>>2]|0)+11|0;a[e>>0]=d[e>>0]|32}f=(c[g>>2]|0)+21|0;b=d[f>>0]|0;if(c[h>>2]&32){a[f>>0]=b&-2;i=j;return}else{a[f>>0]=b|1;i=j;return}}function yB(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;if(!(c[b>>2]|0)){a=0;a=a&1;i=e;return a|0}a=(d[(c[b>>2]|0)+43>>0]|0|0)==2;a=a&1;i=e;return a|0}function zB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[c[d>>2]>>2];c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0))break;c[h>>2]=(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4);do if(c[(c[h>>2]|0)+4>>2]|0){if((c[e>>2]|0)!=0?0!=(Td(c[e>>2]|0,c[c[h>>2]>>2]|0)|0):0)break;bx(c[d>>2]|0,c[g>>2]|0)}while(0);c[g>>2]=(c[g>>2]|0)+1}i=j;return}function AB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;l=o;d=o+44|0;e=o+40|0;j=o+36|0;k=o+32|0;g=o+28|0;h=o+24|0;f=o+20|0;m=o+16|0;n=o+12|0;c[d>>2]=a;c[e>>2]=b;c[g>>2]=c[c[d>>2]>>2];c[h>>2]=Dh(c[c[d>>2]>>2]|0,c[(c[e>>2]|0)+20>>2]|0)|0;c[j>>2]=BB(c[e>>2]|0)|0;c[f>>2]=16;c[m>>2]=c[(c[(c[g>>2]|0)+16>>2]|0)+(c[h>>2]<<4)>>2];c[n>>2]=(c[h>>2]|0)==1?20769:20788;if((c[h>>2]|0)==1)c[f>>2]=14;if(Mw(c[d>>2]|0,c[f>>2]|0,c[c[e>>2]>>2]|0,c[c[j>>2]>>2]|0,c[m>>2]|0)|0){i=o;return}if(Mw(c[d>>2]|0,9,c[n>>2]|0,0,c[m>>2]|0)|0){i=o;return}n=Pw(c[d>>2]|0)|0;c[k>>2]=n;if(!n){i=o;return}n=c[d>>2]|0;b=(c[h>>2]|0)==1?20769:20788;m=c[c[e>>2]>>2]|0;c[l>>2]=c[(c[(c[g>>2]|0)+16>>2]|0)+(c[h>>2]<<4)>>2];c[l+4>>2]=b;c[l+8>>2]=m;Ow(n,32454,l);Qw(c[d>>2]|0,c[h>>2]|0);Uw(c[k>>2]|0,127,c[h>>2]|0,0,0,c[c[e>>2]>>2]|0,0)|0;i=o;return}function BB(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=nj((c[(c[d>>2]|0)+24>>2]|0)+8|0,c[(c[d>>2]|0)+4>>2]|0)|0;i=b;return a|0}function CB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+12|0;f=k+16|0;g=k+8|0;h=k+4|0;j=k;c[l>>2]=b;a[f>>0]=d;c[g>>2]=e;c[h>>2]=ph(c[l>>2]|0,36+(c[(c[g>>2]|0)+4>>2]|0)+1|0,0)|0;if(!(c[h>>2]|0)){l=c[h>>2]|0;i=k;return l|0}c[j>>2]=(c[h>>2]|0)+36;iR(c[j>>2]|0,c[c[g>>2]>>2]|0,c[(c[g>>2]|0)+4>>2]|0)|0;Jw(c[j>>2]|0)|0;c[(c[h>>2]|0)+12>>2]=c[j>>2];a[c[h>>2]>>0]=a[f>>0]|0;l=c[h>>2]|0;i=k;return l|0}function DB(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h+12|0;j=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[j>>2]=d;c[f>>2]=(c[j>>2]|0)+8;c[g>>2]=_w(c[e>>2]|0,0,c[f>>2]|0)|0;Qf(c[c[e>>2]>>2]|0,c[(c[f>>2]|0)+16>>2]|0);c[(c[f>>2]|0)+16>>2]=c[g>>2];if(c[g>>2]|0){j=(c[g>>2]|0)+36|0;b[j>>1]=(b[j>>1]|0)+1<<16>>16}if(!(Vy(c[e>>2]|0,c[f>>2]|0)|0)){j=c[g>>2]|0;i=h;return j|0}c[g>>2]=0;j=c[g>>2]|0;i=h;return j|0}function EB(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,j=0,k=0,l=0,m=0,n=0;g=i;i=i+32|0;h=g+20|0;n=g+16|0;j=g+12|0;l=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[n>>2]=b;c[j>>2]=d;c[l>>2]=e;c[k>>2]=f;c[m>>2]=c[c[n>>2]>>2];c[c[h>>2]>>2]=c[n>>2];c[(c[h>>2]|0)+12>>2]=c[(c[(c[m>>2]|0)+16>>2]|0)+(c[j>>2]<<4)>>2];c[(c[h>>2]|0)+4>>2]=c[(c[(c[m>>2]|0)+16>>2]|0)+(c[j>>2]<<4)+12>>2];c[(c[h>>2]|0)+16>>2]=c[l>>2];c[(c[h>>2]|0)+20>>2]=c[k>>2];c[(c[h>>2]|0)+8>>2]=(c[j>>2]|0)==1&1;i=g;return}function FB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+48|0;k=l;g=l+32|0;h=l+28|0;d=l+24|0;e=l+20|0;f=l+16|0;j=l+12|0;c[h>>2]=a;c[d>>2]=b;if(!(c[d>>2]|0)){c[g>>2]=0;k=c[g>>2]|0;i=l;return k|0}c[f>>2]=c[(c[h>>2]|0)+12>>2];c[e>>2]=0;c[j>>2]=(c[d>>2]|0)+8;while(1){if((c[e>>2]|0)>=(c[c[d>>2]>>2]|0)){d=15;break}if(!(c[(c[h>>2]|0)+8>>2]|0)){if((c[(c[j>>2]|0)+4>>2]|0)!=0?(Td(c[(c[j>>2]|0)+4>>2]|0,c[f>>2]|0)|0)!=0:0){d=8;break}Sf(c[c[c[h>>2]>>2]>>2]|0,c[(c[j>>2]|0)+4>>2]|0);c[(c[j>>2]|0)+4>>2]=0;c[c[j>>2]>>2]=c[(c[h>>2]|0)+4>>2]}if(GB(c[h>>2]|0,c[(c[j>>2]|0)+20>>2]|0)|0){d=11;break}if(HB(c[h>>2]|0,c[(c[j>>2]|0)+48>>2]|0)|0){d=13;break}c[e>>2]=(c[e>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+72}if((d|0)==8){f=c[c[h>>2]>>2]|0;b=c[(c[h>>2]|0)+20>>2]|0;j=c[(c[j>>2]|0)+4>>2]|0;c[k>>2]=c[(c[h>>2]|0)+16>>2];c[k+4>>2]=b;c[k+8>>2]=j;Ah(f,32752,k);c[g>>2]=1;k=c[g>>2]|0;i=l;return k|0}else if((d|0)==11){c[g>>2]=1;k=c[g>>2]|0;i=l;return k|0}else if((d|0)==13){c[g>>2]=1;k=c[g>>2]|0;i=l;return k|0}else if((d|0)==15){c[g>>2]=0;k=c[g>>2]|0;i=l;return k|0}return 0}function GB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g+8|0;d=g+4|0;e=g;c[d>>2]=a;c[e>>2]=b;while(1){if(!(c[e>>2]|0)){d=20;break}if(IB(c[d>>2]|0,c[c[e>>2]>>2]|0)|0){d=4;break}if(FB(c[d>>2]|0,c[(c[e>>2]|0)+32>>2]|0)|0){d=6;break}if(HB(c[d>>2]|0,c[(c[e>>2]|0)+36>>2]|0)|0){d=8;break}if(IB(c[d>>2]|0,c[(c[e>>2]|0)+40>>2]|0)|0){d=10;break}if(HB(c[d>>2]|0,c[(c[e>>2]|0)+44>>2]|0)|0){d=12;break}if(IB(c[d>>2]|0,c[(c[e>>2]|0)+48>>2]|0)|0){d=14;break}if(HB(c[d>>2]|0,c[(c[e>>2]|0)+60>>2]|0)|0){d=16;break}if(HB(c[d>>2]|0,c[(c[e>>2]|0)+64>>2]|0)|0){d=18;break}c[e>>2]=c[(c[e>>2]|0)+52>>2]}if((d|0)==4)c[f>>2]=1;else if((d|0)==6)c[f>>2]=1;else if((d|0)==8)c[f>>2]=1;else if((d|0)==10)c[f>>2]=1;else if((d|0)==12)c[f>>2]=1;else if((d|0)==14)c[f>>2]=1;else if((d|0)==16)c[f>>2]=1;else if((d|0)==18)c[f>>2]=1;else if((d|0)==20)c[f>>2]=0;i=g;return c[f>>2]|0}function HB(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;g=k+12|0;h=k+8|0;f=k+4|0;c[h>>2]=b;c[f>>2]=e;while(1){if(!(c[f>>2]|0)){e=16;break}if((d[c[f>>2]>>0]|0)==135){if(!(a[(c[c[c[h>>2]>>2]>>2]|0)+140+5>>0]|0)){e=6;break}a[c[f>>2]>>0]=101}if(c[(c[f>>2]|0)+4>>2]&16384){e=16;break}e=c[h>>2]|0;b=(c[f>>2]|0)+20|0;if(c[(c[f>>2]|0)+4>>2]&2048){if(GB(e,c[b>>2]|0)|0){e=10;break}}else if(IB(e,c[b>>2]|0)|0){e=12;break}if(HB(c[h>>2]|0,c[(c[f>>2]|0)+16>>2]|0)|0){e=14;break}c[f>>2]=c[(c[f>>2]|0)+12>>2]}if((e|0)==6){f=c[c[h>>2]>>2]|0;c[j>>2]=c[(c[h>>2]|0)+16>>2];Ah(f,32798,j);c[g>>2]=1;j=c[g>>2]|0;i=k;return j|0}else if((e|0)==10){c[g>>2]=1;j=c[g>>2]|0;i=k;return j|0}else if((e|0)==12){c[g>>2]=1;j=c[g>>2]|0;i=k;return j|0}else if((e|0)==14){c[g>>2]=1;j=c[g>>2]|0;i=k;return j|0}else if((e|0)==16){c[g>>2]=0;j=c[g>>2]|0;i=k;return j|0}return 0}function IB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;h=j+16|0;d=j+12|0;e=j+8|0;f=j+4|0;g=j;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){c[h>>2]=0;h=c[h>>2]|0;i=j;return h|0}c[f>>2]=0;c[g>>2]=c[(c[e>>2]|0)+4>>2];while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0)){d=8;break}if(HB(c[d>>2]|0,c[c[g>>2]>>2]|0)|0){d=6;break}c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+20}if((d|0)==6){c[h>>2]=1;h=c[h>>2]|0;i=j;return h|0}else if((d|0)==8){c[h>>2]=0;h=c[h>>2]|0;i=j;return h|0}return 0}function JB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g+8|0;d=g+4|0;e=g;c[d>>2]=a;c[e>>2]=b;while(1){if(!(c[e>>2]|0)){d=10;break}if(GB(c[d>>2]|0,c[(c[e>>2]|0)+8>>2]|0)|0){d=4;break}if(HB(c[d>>2]|0,c[(c[e>>2]|0)+16>>2]|0)|0){d=6;break}if(IB(c[d>>2]|0,c[(c[e>>2]|0)+20>>2]|0)|0){d=8;break}c[e>>2]=c[(c[e>>2]|0)+28>>2]}if((d|0)==4)c[f>>2]=1;else if((d|0)==6)c[f>>2]=1;else if((d|0)==8)c[f>>2]=1;else if((d|0)==10)c[f>>2]=0;i=g;return c[f>>2]|0}function KB(a){a=a|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;a=(c[e>>2]|0)+88|0;b[a>>1]=b[a>>1]&-17|16;i=d;return}function LB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(!(c[g>>2]|0)){i=h;return}Tw(c[e>>2]|0,1,c[g>>2]|0)|0;MB(c[e>>2]|0,c[f>>2]|0);Rw(c[e>>2]|0,33,1,1)|0;i=h;return}function MB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;_B(c[f>>2]|0,1,e);i=d;return}function NB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f+12|0;h=f+8|0;j=f;c[g>>2]=a;c[h>>2]=b;b=j;c[b>>2]=d;c[b+4>>2]=e;eB(c[g>>2]|0,23,0,1,0,j,-13)|0;MB(c[g>>2]|0,c[h>>2]|0);Rw(c[g>>2]|0,33,1,1)|0;i=f;return}function OB(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+32|0;f=j+16|0;l=j+12|0;h=j+8|0;g=j+4|0;k=j;c[f>>2]=a;c[l>>2]=d;c[k>>2]=c[c[f>>2]>>2];oC(c[(c[f>>2]|0)+16>>2]|0,(e[(c[f>>2]|0)+84>>1]|0)<<1);Sf(c[k>>2]|0,c[(c[f>>2]|0)+16>>2]|0);c[g>>2]=c[l>>2]<<1;b[(c[f>>2]|0)+84>>1]=c[l>>2];a=ph(c[k>>2]|0,(c[g>>2]|0)*40|0,0)|0;c[h>>2]=a;c[(c[f>>2]|0)+16>>2]=a;if(!(c[(c[f>>2]|0)+16>>2]|0)){i=j;return}while(1){l=c[g>>2]|0;c[g>>2]=l+-1;if((l|0)<=0)break;b[(c[h>>2]|0)+8>>1]=1;c[(c[h>>2]|0)+32>>2]=c[c[f>>2]>>2];c[h>>2]=(c[h>>2]|0)+40}i=j;return}function PB(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+32|0;j=r+28|0;k=r+24|0;l=r+20|0;m=r+16|0;n=r+12|0;o=r+8|0;q=r+4|0;p=r;c[k>>2]=b;c[l>>2]=d;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;if(a[(c[c[k>>2]>>2]|0)+65>>0]|0){c[j>>2]=7;g=c[j>>2]|0;i=r;return g|0}else{g=(c[l>>2]|0)+(_(c[m>>2]|0,e[(c[k>>2]|0)+84>>1]|0)|0)|0;c[p>>2]=(c[(c[k>>2]|0)+16>>2]|0)+(g*40|0);c[q>>2]=dh(c[p>>2]|0,c[n>>2]|0,-1,1,c[o>>2]|0)|0;c[j>>2]=c[q>>2];g=c[j>>2]|0;i=r;return g|0}return 0}function QB(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+4|0;d=f;c[d>>2]=a;do if(c[d>>2]|0){if(!(Td(c[d>>2]|0,33004)|0)){c[b>>2]=1;break}if(!(Td(c[d>>2]|0,32997)|0))c[b>>2]=0;else e=6}else e=6;while(0);if((e|0)==6)c[b>>2]=-1;i=f;return c[b>>2]|0}function RB(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;if((c[d>>2]|0)==6)c[b>>2]=0;else c[b>>2]=c[6256+(c[d>>2]<<2)>>2];i=e;return c[b>>2]|0}function SB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+8|0;f=g;c[e>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;a=f;d=c[a+4>>2]|0;if((d|0)>-1|(d|0)==-1&(c[a>>2]|0)>>>0>=4294967295){b=f;d=c[b+4>>2]|0;a=(c[e>>2]|0)+168|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;a=f;nC(c[(c[e>>2]|0)+216>>2]|0,c[a>>2]|0,c[a+4>>2]|0)}a=(c[e>>2]|0)+168|0;C=c[a+4>>2]|0;i=g;return c[a>>2]|0}function TB(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;kg(c[d>>2]|0);if(!(a[(c[(c[d>>2]|0)+4>>2]|0)+17>>0]|0)){b=0;c[e>>2]=b;e=c[e>>2]|0;i=f;return e|0}b=(a[(c[(c[d>>2]|0)+4>>2]|0)+18>>0]|0)!=0^1?1:2;c[e>>2]=b;e=c[e>>2]|0;i=f;return e|0}function UB(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[d>>2]=a;do if(Td(c[d>>2]|0,34075)|0){if(!(Td(c[d>>2]|0,33519)|0)){c[b>>2]=1;break}if(!(Td(c[d>>2]|0,34080)|0)){c[b>>2]=2;break}else{c[e>>2]=Ki(c[d>>2]|0)|0;c[b>>2]=((c[e>>2]|0)>=0&(c[e>>2]|0)<=2?c[e>>2]|0:0)&255;break}}else c[b>>2]=0;while(0);i=f;return c[b>>2]|0}function VB(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;l=k+12|0;m=k+8|0;h=k+4|0;j=k;g=k+16|0;c[l>>2]=b;c[m>>2]=f;c[h>>2]=c[(c[l>>2]|0)+4>>2];c[j>>2]=0;a[g>>0]=c[m>>2];kg(c[l>>2]|0);if(((e[(c[h>>2]|0)+22>>1]|0)&2|0)!=0?(((d[g>>0]|0|0)!=0?1:0)|0)!=(d[(c[h>>2]|0)+17>>0]|0|0):0){c[j>>2]=8;m=c[j>>2]|0;i=k;return m|0}a[(c[h>>2]|0)+17>>0]=(d[g>>0]|0|0)!=0?1:0;a[(c[h>>2]|0)+18>>0]=(d[g>>0]|0|0)==2?1:0;m=c[j>>2]|0;i=k;return m|0}function WB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+12|0;f=e+8|0;g=e+4|0;d=e;c[h>>2]=a;c[f>>2]=b;c[g>>2]=c[(c[h>>2]|0)+4>>2];kg(c[h>>2]|0);c[d>>2]=lC(c[c[g>>2]>>2]|0,c[f>>2]|0)|0;i=e;return c[d>>2]|0}function XB(b){b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;g=h+4|0;f=h;c[e>>2]=b;if(!(a[(c[e>>2]|0)+63>>0]|0)){i=h;return}c[g>>2]=c[(c[e>>2]|0)+16>>2];c[f>>2]=c[(c[e>>2]|0)+20>>2];while(1){b=c[f>>2]|0;c[f>>2]=b+-1;if((b|0)<=0)break;if(c[(c[g>>2]|0)+4>>2]|0)wB(c[(c[g>>2]|0)+4>>2]|0,d[(c[g>>2]|0)+8>>0]|c[(c[e>>2]|0)+24>>2]&56)|0;c[g>>2]=(c[g>>2]|0)+16}i=h;return}function YB(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+16|0;g=k+12|0;l=k+8|0;j=k+4|0;h=k;c[g>>2]=b;c[l>>2]=e;c[j>>2]=kC(c[l>>2]|0)|0;c[h>>2]=c[c[g>>2]>>2];if((d[(c[h>>2]|0)+64>>0]|0|0)==(c[j>>2]|0)){c[f>>2]=0;l=c[f>>2]|0;i=k;return l|0}if(ZB(c[g>>2]|0)|0){c[f>>2]=1;l=c[f>>2]|0;i=k;return l|0}else{a[(c[h>>2]|0)+64>>0]=c[j>>2];c[f>>2]=0;l=c[f>>2]|0;i=k;return l|0}return 0}function ZB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;d=h+12|0;e=h+8|0;f=h+4|0;c[e>>2]=b;c[f>>2]=c[c[e>>2]>>2];do if(c[(c[(c[f>>2]|0)+16>>2]|0)+16+4>>2]|0){if((a[(c[f>>2]|0)+63>>0]|0)!=0?(og(c[(c[(c[f>>2]|0)+16>>2]|0)+16+4>>2]|0)|0)==0:0){lB(c[(c[(c[f>>2]|0)+16>>2]|0)+16+4>>2]|0)|0;c[(c[(c[f>>2]|0)+16>>2]|0)+16+4>>2]=0;zg(c[f>>2]|0);break}Ah(c[e>>2]|0,34013,g);c[d>>2]=1;g=c[d>>2]|0;i=h;return g|0}while(0);c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}function _B(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;OB(c[e>>2]|0,c[f>>2]|0);c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[f>>2]|0))break;PB(c[e>>2]|0,c[h>>2]|0,0,c[(c[g>>2]|0)+(c[h>>2]<<2)>>2]|0,0)|0;c[h>>2]=(c[h>>2]|0)+1}i=j;return}function $B(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;g=o+32|0;h=o+28|0;j=o+24|0;k=o+8|0;m=o+4|0;l=o+36|0;n=o;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[m>>2]=0;while(1){e=a[(c[j>>2]|0)+(c[m>>2]|0)>>0]|0;a[l>>0]=e;if(!(e<<24>>24))break;if((a[l>>0]|0)==115){f=(c[k>>2]|0)+(4-1)&~(4-1);b=c[f>>2]|0;c[k>>2]=f+4;c[n>>2]=b;b=c[g>>2]|0;f=(c[n>>2]|0)==0?25:97;e=c[h>>2]|0;c[h>>2]=e+1;Uw(b,f,0,e,0,c[n>>2]|0,0)|0}else{b=c[g>>2]|0;e=(c[k>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[k>>2]=e+4;e=c[h>>2]|0;c[h>>2]=e+1;Rw(b,22,f,e)|0}c[m>>2]=(c[m>>2]|0)+1}i=o;return}function aC(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;g=h+8|0;e=h+16|0;f=h;b[e>>1]=a;if((b[e>>1]|0)<10){f=g;c[f>>2]=1;c[f+4>>2]=0;f=g;g=f;g=c[g>>2]|0;f=f+4|0;f=c[f>>2]|0;C=f;i=h;return g|0}k=(b[e>>1]|0)%10|0;j=f;c[j>>2]=k;c[j+4>>2]=((k|0)<0)<<31>>31;b[e>>1]=(b[e>>1]|0)/10|0;j=f;k=c[j+4>>2]|0;d=f;a=c[d>>2]|0;d=c[d+4>>2]|0;if(!(k>>>0>0|(k|0)==0&(c[j>>2]|0)>>>0>=5)){if(d>>>0>0|(d|0)==0&a>>>0>=1){j=f;j=fR(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=f;c[k>>2]=j;c[k+4>>2]=C}}else{j=fR(a|0,d|0,2,0)|0;k=f;c[k>>2]=j;c[k+4>>2]=C}if((b[e>>1]|0)<3){k=f;k=gR(c[k>>2]|0,c[k+4>>2]|0,8,0)|0;k=hR(k|0,C|0,3-(b[e>>1]|0)|0)|0;j=g;c[j>>2]=k;c[j+4>>2]=C;j=g;k=j;k=c[k>>2]|0;j=j+4|0;j=c[j>>2]|0;C=j;i=h;return k|0}if((b[e>>1]|0)>60){a=-1;d=2147483647}else{a=f;a=gR(c[a>>2]|0,c[a+4>>2]|0,8,0)|0;a=lR(a|0,C|0,(b[e>>1]|0)-3|0)|0;d=C}j=g;c[j>>2]=a;c[j+4>>2]=d;j=g;k=j;k=c[k>>2]|0;j=j+4|0;j=c[j>>2]|0;C=j;i=h;return k|0}function bC(b){b=b|0;var e=0,f=0,g=0;f=i;i=i+16|0;g=f+4|0;e=f;a[g>>0]=b;switch(d[g>>0]|0|0){case 7:{c[e>>2]=33823;break}case 8:{c[e>>2]=33832;break}case 9:{c[e>>2]=33844;break}case 6:{c[e>>2]=33852;break}default:c[e>>2]=33861}i=f;return c[e>>2]|0}function cC(f,g,h,j,k){f=f|0;g=g|0;h=h|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;D=i;i=i+80|0;y=D;l=D+64|0;m=D+60|0;n=D+56|0;o=D+52|0;p=D+48|0;q=D+44|0;x=D+40|0;r=D+36|0;w=D+32|0;B=D+28|0;s=D+24|0;t=D+20|0;v=D+16|0;u=D+68|0;z=D+12|0;A=D+8|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;c[q>>2]=k;c[x>>2]=0;c[r>>2]=0;c[w>>2]=c[(c[o>>2]|0)+20>>2];c[B>>2]=c[(c[o>>2]|0)+36+4>>2];do if((c[w>>2]|0)==1){if((b[(c[n>>2]|0)+32>>1]|0)>=0){if(!(c[B>>2]|0)){c[l>>2]=0;C=c[l>>2]|0;i=D;return C|0}if(!(Td(c[(c[(c[n>>2]|0)+4>>2]|0)+((b[(c[n>>2]|0)+32>>1]|0)*24|0)>>2]|0,c[B>>2]|0)|0)){c[l>>2]=0;C=c[l>>2]|0;i=D;return C|0}}}else if(c[q>>2]|0){c[r>>2]=Fw(c[c[m>>2]>>2]|0,c[w>>2]<<2,0)|0;if(c[r>>2]|0){c[c[q>>2]>>2]=c[r>>2];break}c[l>>2]=1;C=c[l>>2]|0;i=D;return C|0}while(0);c[x>>2]=c[(c[n>>2]|0)+8>>2];a:while(1){if(!(c[x>>2]|0))break;do if((e[(c[x>>2]|0)+50>>1]|0)==(c[w>>2]|0)?(d[(c[x>>2]|0)+54>>0]|0)!=0:0){if(!(c[B>>2]|0))if((a[(c[x>>2]|0)+55>>0]&3|0)==2){C=17;break a}else break;c[t>>2]=0;while(1){if((c[t>>2]|0)>=(c[w>>2]|0))break;b[u>>1]=b[(c[(c[x>>2]|0)+4>>2]|0)+(c[t>>2]<<1)>>1]|0;if((b[u>>1]|0)<0)break;j=c[(c[(c[n>>2]|0)+4>>2]|0)+((b[u>>1]|0)*24|0)+16>>2]|0;c[z>>2]=j;c[z>>2]=(c[z>>2]|0)!=0?j:35690;if(Td(c[(c[(c[x>>2]|0)+32>>2]|0)+(c[t>>2]<<2)>>2]|0,c[z>>2]|0)|0)break;c[A>>2]=c[(c[(c[n>>2]|0)+4>>2]|0)+((b[u>>1]|0)*24|0)>>2];c[v>>2]=0;while(1){if((c[v>>2]|0)>=(c[w>>2]|0))break;if(!(Td(c[(c[o>>2]|0)+36+(c[v>>2]<<3)+4>>2]|0,c[A>>2]|0)|0)){C=28;break}c[v>>2]=(c[v>>2]|0)+1}if((C|0)==28?(C=0,(c[r>>2]|0)!=0):0)c[(c[r>>2]|0)+(c[t>>2]<<2)>>2]=c[(c[o>>2]|0)+36+(c[v>>2]<<3)>>2];if((c[v>>2]|0)==(c[w>>2]|0))break;c[t>>2]=(c[t>>2]|0)+1}if((c[t>>2]|0)==(c[w>>2]|0))break a}while(0);c[x>>2]=c[(c[x>>2]|0)+20>>2]}b:do if((C|0)==17?(c[r>>2]|0)!=0:0){c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[w>>2]|0))break b;c[(c[r>>2]|0)+(c[s>>2]<<2)>>2]=c[(c[o>>2]|0)+36+(c[s>>2]<<3)>>2];c[s>>2]=(c[s>>2]|0)+1}}while(0);if(c[x>>2]|0){c[c[p>>2]>>2]=c[x>>2];c[l>>2]=0;C=c[l>>2]|0;i=D;return C|0}if(!(a[(c[m>>2]|0)+442>>0]|0)){C=c[m>>2]|0;B=c[(c[o>>2]|0)+8>>2]|0;c[y>>2]=c[c[c[o>>2]>>2]>>2];c[y+4>>2]=B;Ah(C,33760,y)}Sf(c[c[m>>2]>>2]|0,c[r>>2]|0);c[l>>2]=1;C=c[l>>2]|0;i=D;return C|0}function dC(d,f){d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+16|0;g=o+12|0;j=o+8|0;l=o+4|0;m=o;n=o+20|0;k=o+22|0;c[g>>2]=d;c[j>>2]=f;if(!(c[(c[j>>2]|0)+16>>2]|0)){c[m>>2]=c[(c[j>>2]|0)+12>>2];f=(e[(c[j>>2]|0)+52>>1]|0)+1|0;f=yh(0,f,((f|0)<0)<<31>>31)|0;c[(c[j>>2]|0)+16>>2]=f;if(!(c[(c[j>>2]|0)+16>>2]|0)){jh(c[g>>2]|0);c[h>>2]=0;n=c[h>>2]|0;i=o;return n|0}c[l>>2]=0;while(1){g=c[l>>2]|0;d=c[j>>2]|0;if((c[l>>2]|0)>=(e[(c[j>>2]|0)+52>>1]|0))break;b[n>>1]=b[(c[d+4>>2]|0)+(g<<1)>>1]|0;g=b[n>>1]|0;do if((b[n>>1]|0)<0){d=c[l>>2]|0;f=c[j>>2]|0;if((g|0)==-1){a[(c[f+16>>2]|0)+d>>0]=68;break}else{f=Nx(c[(c[(c[f+40>>2]|0)+4>>2]|0)+(d*20|0)>>2]|0)|0;a[k>>0]=f;a[k>>0]=(a[k>>0]|0)==0?65:f;a[(c[(c[j>>2]|0)+16>>2]|0)+(c[l>>2]|0)>>0]=a[k>>0]|0;break}}else a[(c[(c[j>>2]|0)+16>>2]|0)+(c[l>>2]|0)>>0]=a[(c[(c[m>>2]|0)+4>>2]|0)+(g*24|0)+21>>0]|0;while(0);c[l>>2]=(c[l>>2]|0)+1}a[(c[d+16>>2]|0)+g>>0]=0}c[h>>2]=c[(c[j>>2]|0)+16>>2];n=c[h>>2]|0;i=o;return n|0}function eC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(c[e>>2]|0)c[f>>2]=33668;else c[f>>2]=19262;fi(c[d>>2]|0,33672,2,1,c[f>>2]|0,212,0,0,0)|0;fi(c[d>>2]|0,33672,3,1,c[f>>2]|0,212,0,0,0)|0;fi(c[d>>2]|0,33677,2,1,19258,212,0,0,0)|0;iC(c[d>>2]|0,33677,12);iC(c[d>>2]|0,33672,((c[e>>2]|0)!=0?12:4)&255);i=g;return}function fC(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=0;c[e>>2]=(c[b>>2]|0)+124;while(1){if((c[d>>2]|0)>=10)break;if(c[(c[e>>2]|0)+12>>2]|0){hA(c[b>>2]|0,c[e>>2]|0);c[(c[e>>2]|0)+12>>2]=0}c[d>>2]=(c[d>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+20}i=f;return}function gC(b,e,f,g,h,j,k,l){b=b|0;e=e|0;f=f|0;g=g|0;h=h|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;C=i;i=i+64|0;p=C+52|0;q=C+48|0;r=C+44|0;s=C+40|0;t=C+56|0;u=C+36|0;v=C+32|0;w=C+28|0;m=C+24|0;x=C+20|0;y=C+16|0;n=C+12|0;A=C+8|0;B=C+4|0;z=C;c[q>>2]=b;c[r>>2]=e;c[s>>2]=f;a[t>>0]=g;c[u>>2]=h;c[v>>2]=j;c[w>>2]=k;c[m>>2]=l;if((d[(c[r>>2]|0)+42>>0]|0)&16){c[p>>2]=0;B=c[p>>2]|0;i=C;return B|0}c[y>>2]=Dh(c[c[q>>2]>>2]|0,c[(c[r>>2]|0)+64>>2]|0)|0;c[B>>2]=Pw(c[q>>2]|0)|0;if((c[u>>2]|0)<0)c[u>>2]=c[(c[q>>2]|0)+72>>2];l=c[u>>2]|0;c[u>>2]=l+1;c[n>>2]=l;if(c[w>>2]|0)c[c[w>>2]>>2]=c[n>>2];do if(!((d[(c[r>>2]|0)+42>>0]|0)&32)){if((c[v>>2]|0)!=0?(d[c[v>>2]>>0]|0|0)==0:0){o=11;break}zz(c[q>>2]|0,c[n>>2]|0,c[y>>2]|0,c[r>>2]|0,c[s>>2]|0)}else o=11;while(0);if((o|0)==11)yz(c[q>>2]|0,c[y>>2]|0,c[(c[r>>2]|0)+28>>2]|0,(c[s>>2]|0)==55&255,c[c[r>>2]>>2]|0);if(c[m>>2]|0)c[c[m>>2]>>2]=c[u>>2];c[x>>2]=0;c[A>>2]=c[(c[r>>2]|0)+8>>2];while(1){m=c[u>>2]|0;if(!(c[A>>2]|0))break;c[u>>2]=m+1;c[z>>2]=m;if(!((c[v>>2]|0)!=0?(d[(c[v>>2]|0)+((c[x>>2]|0)+1)>>0]|0|0)==0:0)){Vw(c[B>>2]|0,c[s>>2]|0,c[z>>2]|0,c[(c[A>>2]|0)+44>>2]|0,c[y>>2]|0)|0;Az(c[q>>2]|0,c[A>>2]|0)}if((a[(c[A>>2]|0)+55>>0]&3|0)==2?((d[(c[r>>2]|0)+42>>0]|0)&32|0)!=0:0){if(c[w>>2]|0)c[c[w>>2]>>2]=c[z>>2]}else Fh(c[B>>2]|0,a[t>>0]|0);c[A>>2]=c[(c[A>>2]|0)+20>>2];c[x>>2]=(c[x>>2]|0)+1}if((m|0)>(c[(c[q>>2]|0)+72>>2]|0))c[(c[q>>2]|0)+72>>2]=c[u>>2];c[p>>2]=c[x>>2];B=c[p>>2]|0;i=C;return B|0}function hC(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=i;i=i+48|0;f=o+36|0;g=o+32|0;h=o+28|0;l=o+24|0;m=o+20|0;j=o+16|0;q=o+12|0;p=o+8|0;k=o+4|0;n=o;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;c[p>>2]=we(c[f>>2]|0)|0;c[k>>2]=ve(c[f>>2]|0)|0;c[m>>2]=ae(c[c[h>>2]>>2]|0)|0;c[l>>2]=ae(c[(c[h>>2]|0)+4>>2]|0)|0;c[q>>2]=be(c[c[h>>2]>>2]|0)|0;if((c[q>>2]|0)>(c[(c[p>>2]|0)+88+32>>2]|0)){je(c[f>>2]|0,33682,-1);i=o;return}do if((c[g>>2]|0)==3){c[n>>2]=ae(c[(c[h>>2]|0)+8>>2]|0)|0;if(!(c[n>>2]|0)){i=o;return}if((Cx(c[n>>2]|0,-1)|0)==1){c[j>>2]=jC(n)|0;break}je(c[f>>2]|0,33715,-1);i=o;return}else c[j>>2]=d[(c[k>>2]|0)+2>>0];while(0);if(!((c[l>>2]|0)!=0&(c[m>>2]|0)!=0)){i=o;return}q=c[f>>2]|0;ke(q,Ph(c[m>>2]|0,c[l>>2]|0,c[k>>2]|0,c[j>>2]|0)|0);i=o;return}function iC(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;l=i;i=i+16|0;n=l+8|0;m=l+4|0;j=l+12|0;k=l;c[n>>2]=f;c[m>>2]=g;a[j>>0]=h;h=c[n>>2]|0;g=c[m>>2]|0;c[k>>2]=gi(h,g,If(c[m>>2]|0)|0,2,1,0)|0;if(!(c[k>>2]|0)){i=l;return}n=(c[k>>2]|0)+2|0;b[n>>1]=e[n>>1]|0|(d[j>>0]|0);i=l;return}function jC(a){a=a|0;var b=0,e=0,f=0,g=0,h=0;f=i;i=i+16|0;b=f+4|0;e=f;c[b>>2]=a;g=c[b>>2]|0;a=c[g>>2]|0;c[g>>2]=a+1;c[e>>2]=d[a>>0];if((c[e>>2]|0)>>>0<192){g=c[e>>2]|0;i=f;return g|0}c[e>>2]=d[26420+((c[e>>2]|0)-192)>>0];while(1){a=c[e>>2]|0;if(((d[c[c[b>>2]>>2]>>0]|0)&192|0)!=128)break;h=c[b>>2]|0;g=c[h>>2]|0;c[h>>2]=g+1;c[e>>2]=(a<<6)+(63&(d[g>>0]|0))}if((a>>>0>=128?(c[e>>2]&-2048|0)!=55296:0)?(c[e>>2]&-2|0)!=65534:0){h=c[e>>2]|0;i=f;return h|0}c[e>>2]=65533;h=c[e>>2]|0;i=f;return h|0}function kC(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+4|0;e=g;c[e>>2]=b;if((a[c[e>>2]>>0]|0)>=48?(a[c[e>>2]>>0]|0)<=50:0)c[d>>2]=(a[c[e>>2]>>0]|0)-48;else f=4;do if((f|0)==4){if(!(Td(c[e>>2]|0,33917)|0)){c[d>>2]=1;break}if(!(Td(c[e>>2]|0,27038)|0)){c[d>>2]=2;break}else{c[d>>2]=0;break}}while(0);i=g;return c[d>>2]|0}function lC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=mC(c[(c[f>>2]|0)+212>>2]|0,c[e>>2]|0)|0;i=d;return a|0}function mC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(c[e>>2]|0){if((c[e>>2]|0)<0){b=c[e>>2]|0;b=rR(-1024,-1,b|0,((b|0)<0)<<31>>31|0)|0;a=(c[(c[d>>2]|0)+24>>2]|0)+(c[(c[d>>2]|0)+28>>2]|0)|0;a=pR(b|0,C|0,a|0,((a|0)<0)<<31>>31|0)|0;c[e>>2]=a}c[(c[d>>2]|0)+20>>2]=c[e>>2]}c[f>>2]=Zi(c[d>>2]|0)|0;if((c[f>>2]|0)>=(c[(c[d>>2]|0)+20>>2]|0)){f=c[f>>2]|0;i=g;return f|0}c[f>>2]=c[(c[d>>2]|0)+20>>2];f=c[f>>2]|0;i=g;return f|0}function nC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+8|0;f=g;c[e>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;if(!(c[e>>2]|0)){i=g;return}d=f;f=c[d+4>>2]|0;a=(c[e>>2]|0)+16|0;c[a>>2]=c[d>>2];c[a+4>>2]=f;i=g;return}function oC(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k+12|0;f=k+8|0;j=k+4|0;h=k;c[g>>2]=a;c[f>>2]=d;if(!((c[g>>2]|0)!=0&(c[f>>2]|0)!=0)){i=k;return}c[j>>2]=(c[g>>2]|0)+((c[f>>2]|0)*40|0);c[h>>2]=c[(c[g>>2]|0)+32>>2];if(c[(c[h>>2]|0)+528>>2]|0){do{if(c[(c[g>>2]|0)+24>>2]|0)Sf(c[h>>2]|0,c[(c[g>>2]|0)+20>>2]|0);a=(c[g>>2]|0)+40|0;c[g>>2]=a}while(a>>>0<(c[j>>2]|0)>>>0);i=k;return}do{f=c[g>>2]|0;if(!((e[(c[g>>2]|0)+8>>1]|0)&9312)){if(c[f+24>>2]|0){Sf(c[h>>2]|0,c[(c[g>>2]|0)+20>>2]|0);c[(c[g>>2]|0)+24>>2]=0}}else Ug(f);b[(c[g>>2]|0)+8>>1]=128;a=(c[g>>2]|0)+40|0;c[g>>2]=a}while(a>>>0<(c[j>>2]|0)>>>0);i=k;return}function pC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+80|0;l=o+8|0;k=o;f=o+44|0;p=o+40|0;g=o+36|0;h=o+32|0;j=o+28|0;m=o+24|0;n=o+48|0;c[f>>2]=a;c[p>>2]=b;c[g>>2]=d;c[h>>2]=e;c[m>>2]=c[(c[(c[c[f>>2]>>2]|0)+16>>2]|0)+(c[p>>2]<<4)>>2];c[j>>2]=1;while(1){if((c[j>>2]|0)>4)break;c[k>>2]=c[j>>2];Qd(24,n,34953,k)|0;if(pi(c[c[f>>2]>>2]|0,n,c[m>>2]|0)|0){p=c[f>>2]|0;e=c[g>>2]|0;d=c[h>>2]|0;c[l>>2]=c[m>>2];c[l+4>>2]=n;c[l+8>>2]=e;c[l+12>>2]=d;Ow(p,31809,l)}c[j>>2]=(c[j>>2]|0)+1}i=o;return}function qC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+48|0;h=e;g=e+36|0;j=e+32|0;l=e+28|0;k=e+24|0;f=e+20|0;c[g>>2]=a;c[j>>2]=b;c[l>>2]=d;c[k>>2]=Pw(c[g>>2]|0)|0;c[f>>2]=Wz(c[g>>2]|0)|0;Vw(c[k>>2]|0,118,c[j>>2]|0,c[f>>2]|0,c[l>>2]|0)|0;Bx(c[g>>2]|0);a=c[g>>2]|0;k=(c[l>>2]|0)==1?20769:20788;j=c[j>>2]|0;d=c[f>>2]|0;b=c[f>>2]|0;c[h>>2]=c[(c[(c[c[g>>2]>>2]|0)+16>>2]|0)+(c[l>>2]<<4)>>2];c[h+4>>2]=k;c[h+8>>2]=j;c[h+12>>2]=d;c[h+16>>2]=b;Ow(a,34897,h);_z(c[g>>2]|0,c[f>>2]|0);i=e;return}function rC(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r+36|0;h=r+32|0;j=r+28|0;k=r+24|0;l=r+20|0;m=r+16|0;q=r+12|0;n=r+8|0;p=r+4|0;o=r;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=c[c[l>>2]>>2];do if(!(c[n>>2]&(c[n>>2]|0)-1)){c[p>>2]=(c[n>>2]|0)==0?1:c[n>>2]<<1;d=_(c[p>>2]|0,c[k>>2]|0)|0;c[o>>2]=Ew(c[h>>2]|0,c[j>>2]|0,d,((d|0)<0)<<31>>31)|0;if(c[o>>2]|0){c[j>>2]=c[o>>2];break}c[c[m>>2]>>2]=-1;c[g>>2]=c[j>>2];q=c[g>>2]|0;i=r;return q|0}while(0);c[q>>2]=c[j>>2];d=_(c[n>>2]|0,c[k>>2]|0)|0;kR((c[q>>2]|0)+d|0,0,c[k>>2]|0)|0;c[c[m>>2]>>2]=c[n>>2];q=c[l>>2]|0;c[q>>2]=(c[q>>2]|0)+1;c[g>>2]=c[j>>2];q=c[g>>2]|0;i=r;return q|0}function sC(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;n=q+8|0;p=q+4|0;o=q;c[h>>2]=a;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=0;c[p>>2]=0;if(c[(c[c[h>>2]>>2]|0)+24>>2]&8388608)c[p>>2]=fx(c[h>>2]|0,c[j>>2]|0)|0;c[o>>2]=c[p>>2];while(1){if(!(c[o>>2]|0))break;if((d[(c[o>>2]|0)+8>>0]|0|0)==(c[k>>2]|0)?(MF(c[(c[o>>2]|0)+16>>2]|0,c[l>>2]|0)|0)!=0:0)c[n>>2]=c[n>>2]|(d[(c[o>>2]|0)+9>>0]|0);c[o>>2]=c[(c[o>>2]|0)+32>>2]}if(!(c[m>>2]|0)){a=c[n>>2]|0;a=(a|0)!=0;b=c[p>>2]|0;b=a?b:0;i=q;return b|0}c[c[m>>2]>>2]=c[n>>2];a=c[n>>2]|0;a=(a|0)!=0;b=c[p>>2]|0;b=a?b:0;i=q;return b|0}function tC(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;l=n+8|0;k=n;f=n+24|0;g=n+20|0;h=n+16|0;j=n+12|0;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;if(!(((d[(c[h>>2]|0)+42>>0]|0)&16|0)!=0?(c[(c[c[(Ax(c[c[g>>2]>>2]|0,c[h>>2]|0)|0)+4>>2]>>2]|0)+52>>2]|0)==0:0))m=3;do if((m|0)==3){if((((d[(c[h>>2]|0)+42>>0]|0)&1|0)!=0?(c[(c[c[g>>2]>>2]|0)+24>>2]&2048|0)==0:0)?(d[(c[g>>2]|0)+18>>0]|0|0)==0:0)break;if((c[j>>2]|0)==0?(c[(c[h>>2]|0)+12>>2]|0)!=0:0){m=c[g>>2]|0;c[l>>2]=c[c[h>>2]>>2];Ah(m,36112,l);c[f>>2]=1;m=c[f>>2]|0;i=n;return m|0}c[f>>2]=0;m=c[f>>2]|0;i=n;return m|0}while(0);m=c[g>>2]|0;c[k>>2]=c[c[h>>2]>>2];Ah(m,36083,k);c[f>>2]=1;m=c[f>>2]|0;i=n;return m|0}function uC(a){a=a|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;a=(c[e>>2]|0)+88|0;b[a>>1]=b[a>>1]&-5|4;i=d;return}function vC(f,g,h,j,k){f=f|0;g=g|0;h=h|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;O=i;i=i+128|0;u=O+108|0;v=O+104|0;w=O+100|0;l=O+96|0;r=O+92|0;x=O+88|0;z=O+84|0;n=O+80|0;I=O+76|0;J=O+72|0;H=O+68|0;o=O+64|0;C=O+60|0;D=O+56|0;F=O+52|0;E=O+48|0;y=O+44|0;s=O+40|0;A=O+36|0;B=O+32|0;M=O+28|0;t=O+24|0;q=O+20|0;K=O+16|0;L=O+12|0;m=O+8|0;p=O+4|0;G=O+112|0;N=O;c[v>>2]=f;c[w>>2]=g;c[l>>2]=h;c[r>>2]=j;c[x>>2]=k;c[z>>2]=c[c[v>>2]>>2];c[A>>2]=0;c[B>>2]=0;c[q>>2]=0;if(!(c[l>>2]|0)){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if((c[(c[v>>2]|0)+536>>2]|0)==0?(c[(c[l>>2]|0)+68>>2]|0)==0:0){if(fx(c[v>>2]|0,c[w>>2]|0)|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(d[(c[w>>2]|0)+42>>0]&16){ +c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if((c[r>>2]|0)==10){if((b[(c[w>>2]|0)+32>>1]|0)>=0)c[r>>2]=d[(c[w>>2]|0)+43>>0];if((c[r>>2]|0)==10)c[r>>2]=2}if((c[c[(c[l>>2]|0)+32>>2]>>2]|0)!=1){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(c[(c[(c[l>>2]|0)+32>>2]|0)+8+20>>2]|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(c[(c[l>>2]|0)+36>>2]|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(c[(c[l>>2]|0)+48>>2]|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(c[(c[l>>2]|0)+40>>2]|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(c[(c[l>>2]|0)+60>>2]|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(c[(c[l>>2]|0)+52>>2]|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(e[(c[l>>2]|0)+6>>1]&1){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}c[n>>2]=c[c[l>>2]>>2];if((c[c[n>>2]>>2]|0)!=1){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if((d[c[c[(c[n>>2]|0)+4>>2]>>2]>>0]|0)!=158){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}c[o>>2]=(c[(c[l>>2]|0)+32>>2]|0)+8;c[I>>2]=_w(c[v>>2]|0,0,c[o>>2]|0)|0;if(!(c[I>>2]|0)){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if((c[I>>2]|0)==(c[w>>2]|0)){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(((d[(c[w>>2]|0)+42>>0]&32|0)==0|0)!=((d[(c[I>>2]|0)+42>>0]&32|0)==0|0)){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(d[(c[I>>2]|0)+42>>0]&16){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if(c[(c[I>>2]|0)+12>>2]|0){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if((b[(c[w>>2]|0)+34>>1]|0)!=(b[(c[I>>2]|0)+34>>1]|0)){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}if((b[(c[w>>2]|0)+32>>1]|0)!=(b[(c[I>>2]|0)+32>>1]|0)){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}c[C>>2]=0;a:while(1){if((c[C>>2]|0)>=(b[(c[w>>2]|0)+34>>1]|0)){l=64;break}c[m>>2]=(c[(c[w>>2]|0)+4>>2]|0)+((c[C>>2]|0)*24|0);c[p>>2]=(c[(c[I>>2]|0)+4>>2]|0)+((c[C>>2]|0)*24|0);if((a[(c[m>>2]|0)+21>>0]|0)!=(a[(c[p>>2]|0)+21>>0]|0)){l=52;break}if(Td(c[(c[m>>2]|0)+16>>2]|0,c[(c[p>>2]|0)+16>>2]|0)|0){l=54;break}if((d[(c[m>>2]|0)+20>>0]|0)!=0?(a[(c[p>>2]|0)+20>>0]|0)==0:0){l=57;break}do if((c[C>>2]|0)>0){if(((c[(c[m>>2]|0)+8>>2]|0)==0|0)!=((c[(c[p>>2]|0)+8>>2]|0)==0|0)){l=62;break a}if(!(c[(c[m>>2]|0)+8>>2]|0))break;if(yQ(c[(c[m>>2]|0)+8>>2]|0,c[(c[p>>2]|0)+8>>2]|0)|0){l=62;break a}}while(0);c[C>>2]=(c[C>>2]|0)+1}if((l|0)==52){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}else if((l|0)==54){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}else if((l|0)==57){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}else if((l|0)==62){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}else if((l|0)==64){c[H>>2]=c[(c[w>>2]|0)+8>>2];while(1){if(!(c[H>>2]|0))break;if(d[(c[H>>2]|0)+54>>0]|0)c[q>>2]=1;c[J>>2]=c[(c[I>>2]|0)+8>>2];while(1){if(!(c[J>>2]|0))break;if(OF(c[H>>2]|0,c[J>>2]|0)|0)break;c[J>>2]=c[(c[J>>2]|0)+20>>2]}if(!(c[J>>2]|0)){l=73;break}c[H>>2]=c[(c[H>>2]|0)+20>>2]}if((l|0)==73){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}do if(c[(c[w>>2]|0)+24>>2]|0){if(!(qy(c[(c[I>>2]|0)+24>>2]|0,c[(c[w>>2]|0)+24>>2]|0,-1)|0))break;c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}while(0);do if(c[(c[z>>2]|0)+24>>2]&524288){if(!(c[(c[w>>2]|0)+16>>2]|0))break;c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}while(0);if(c[(c[z>>2]|0)+24>>2]&128){c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}c[D>>2]=Dh(c[z>>2]|0,c[(c[I>>2]|0)+64>>2]|0)|0;c[M>>2]=Pw(c[v>>2]|0)|0;bx(c[v>>2]|0,c[D>>2]|0);p=(c[v>>2]|0)+72|0;h=c[p>>2]|0;c[p>>2]=h+1;c[F>>2]=h;h=(c[v>>2]|0)+72|0;p=c[h>>2]|0;c[h>>2]=p+1;c[E>>2]=p;c[t>>2]=wC(c[v>>2]|0,c[x>>2]|0,c[w>>2]|0)|0;c[K>>2]=Wz(c[v>>2]|0)|0;c[L>>2]=Wz(c[v>>2]|0)|0;zz(c[v>>2]|0,c[E>>2]|0,c[x>>2]|0,c[w>>2]|0,55);do if(!(c[(c[z>>2]|0)+24>>2]&134217728)){if((b[(c[w>>2]|0)+32>>1]|0)<0){if(!((c[q>>2]|0)!=0?1:(c[(c[w>>2]|0)+8>>2]|0)!=0))l=87}else if(!(c[q>>2]|0))l=87;if((l|0)==87?!((c[r>>2]|0)!=2&(c[r>>2]|0)!=1):0)break;c[y>>2]=Rw(c[M>>2]|0,108,c[E>>2]|0,0)|0;c[A>>2]=Yw(c[M>>2]|0,13)|0;Fz(c[M>>2]|0,c[y>>2]|0)}while(0);l=c[v>>2]|0;if(!(d[(c[I>>2]|0)+42>>0]&32)){zz(l,c[F>>2]|0,c[D>>2]|0,c[I>>2]|0,54);c[B>>2]=Rw(c[M>>2]|0,108,c[F>>2]|0,0)|0;do if((b[(c[w>>2]|0)+32>>1]|0)<0){l=c[M>>2]|0;if(!(c[(c[w>>2]|0)+8>>2]|0)){c[y>>2]=Rw(l,74,c[E>>2]|0,c[L>>2]|0)|0;break}else{c[y>>2]=Rw(l,103,c[F>>2]|0,c[L>>2]|0)|0;break}}else{c[y>>2]=Rw(c[M>>2]|0,103,c[F>>2]|0,c[L>>2]|0)|0;c[s>>2]=Vw(c[M>>2]|0,70,c[E>>2]|0,0,c[L>>2]|0)|0;CE(c[v>>2]|0,c[r>>2]|0,c[w>>2]|0);Fz(c[M>>2]|0,c[s>>2]|0);CC(c[v>>2]|0,c[t>>2]|0,c[L>>2]|0)}while(0);Rw(c[M>>2]|0,102,c[F>>2]|0,c[K>>2]|0)|0;Uw(c[M>>2]|0,75,c[E>>2]|0,c[K>>2]|0,c[L>>2]|0,c[c[w>>2]>>2]|0,0)|0;Fh(c[M>>2]|0,11);Rw(c[M>>2]|0,7,c[F>>2]|0,c[y>>2]|0)|0;Rw(c[M>>2]|0,61,c[F>>2]|0,0)|0;Rw(c[M>>2]|0,61,c[E>>2]|0,0)|0}else{yz(l,c[x>>2]|0,c[(c[w>>2]|0)+28>>2]|0,1,c[c[w>>2]>>2]|0);yz(c[v>>2]|0,c[D>>2]|0,c[(c[I>>2]|0)+28>>2]|0,0,c[c[I>>2]>>2]|0)}c[H>>2]=c[(c[w>>2]|0)+8>>2];while(1){if(!(c[H>>2]|0))break;a[G>>0]=0;c[J>>2]=c[(c[I>>2]|0)+8>>2];while(1){if(!(c[J>>2]|0))break;if(OF(c[H>>2]|0,c[J>>2]|0)|0)break;c[J>>2]=c[(c[J>>2]|0)+20>>2]}Vw(c[M>>2]|0,54,c[F>>2]|0,c[(c[J>>2]|0)+44>>2]|0,c[D>>2]|0)|0;Az(c[v>>2]|0,c[J>>2]|0);Vw(c[M>>2]|0,55,c[E>>2]|0,c[(c[H>>2]|0)+44>>2]|0,c[x>>2]|0)|0;Az(c[v>>2]|0,c[H>>2]|0);Fh(c[M>>2]|0,1);c[y>>2]=Rw(c[M>>2]|0,108,c[F>>2]|0,0)|0;Rw(c[M>>2]|0,101,c[F>>2]|0,c[K>>2]|0)|0;do if(c[(c[z>>2]|0)+24>>2]&134217728){c[C>>2]=0;while(1){if((c[C>>2]|0)>=(e[(c[J>>2]|0)+52>>1]|0))break;c[N>>2]=c[(c[(c[J>>2]|0)+32>>2]|0)+(c[C>>2]<<2)>>2];if(Td(35690,c[N>>2]|0)|0)break;c[C>>2]=(c[C>>2]|0)+1}if((c[C>>2]|0)!=(e[(c[J>>2]|0)+52>>1]|0))break;a[G>>0]=16;Vw(c[M>>2]|0,105,c[E>>2]|0,0,-1)|0}while(0);do if(d[(c[I>>2]|0)+42>>0]&32){if((a[(c[H>>2]|0)+55>>0]&3|0)!=2)break;a[G>>0]=d[G>>0]|1}while(0);Vw(c[M>>2]|0,110,c[E>>2]|0,c[K>>2]|0,1)|0;Fh(c[M>>2]|0,a[G>>0]|0);Rw(c[M>>2]|0,7,c[F>>2]|0,(c[y>>2]|0)+1|0)|0;Fz(c[M>>2]|0,c[y>>2]|0);Rw(c[M>>2]|0,61,c[F>>2]|0,0)|0;Rw(c[M>>2]|0,61,c[E>>2]|0,0)|0;c[H>>2]=c[(c[H>>2]|0)+20>>2]}if(c[B>>2]|0)Fz(c[M>>2]|0,c[B>>2]|0);_z(c[v>>2]|0,c[L>>2]|0);_z(c[v>>2]|0,c[K>>2]|0);if(c[A>>2]|0){Rw(c[M>>2]|0,21,0,0)|0;Fz(c[M>>2]|0,c[A>>2]|0);Rw(c[M>>2]|0,61,c[E>>2]|0,0)|0;c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}else{c[u>>2]=1;N=c[u>>2]|0;i=O;return N|0}}}c[u>>2]=0;N=c[u>>2]|0;i=O;return N|0}function wC(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+24|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;m=n+4|0;l=n;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=0;if((d[(c[j>>2]|0)+42>>0]|0)&8){b=c[g>>2]|0;if(c[(c[g>>2]|0)+416>>2]|0)b=c[b+416>>2]|0;c[m>>2]=b;c[l>>2]=c[(c[m>>2]|0)+412>>2];while(1){if(c[l>>2]|0)a=(c[(c[l>>2]|0)+4>>2]|0)!=(c[j>>2]|0);else a=0;b=c[l>>2]|0;if(!a)break;c[l>>2]=c[b>>2]}do if(!b){c[l>>2]=Fw(c[c[g>>2]>>2]|0,16,0)|0;if(c[l>>2]|0){c[c[l>>2]>>2]=c[(c[m>>2]|0)+412>>2];c[(c[m>>2]|0)+412>>2]=c[l>>2];c[(c[l>>2]|0)+4>>2]=c[j>>2];c[(c[l>>2]|0)+8>>2]=c[h>>2];h=(c[m>>2]|0)+76|0;c[h>>2]=(c[h>>2]|0)+1;h=(c[m>>2]|0)+76|0;j=(c[h>>2]|0)+1|0;c[h>>2]=j;c[(c[l>>2]|0)+12>>2]=j;m=(c[m>>2]|0)+76|0;c[m>>2]=(c[m>>2]|0)+1;break}c[f>>2]=0;m=c[f>>2]|0;i=n;return m|0}while(0);c[k>>2]=c[(c[l>>2]|0)+12>>2]}c[f>>2]=c[k>>2];m=c[f>>2]|0;i=n;return m|0}function xC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;xz(c[f>>2]|0,17,c[g>>2]|0)|0;a[(c[(c[f>>2]|0)+24>>2]|0)+19>>0]=0;c[(c[(c[f>>2]|0)+24>>2]|0)+60>>2]=0;i=e;return}function yC(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r+40|0;f=r+36|0;g=r+32|0;h=r+28|0;p=r+24|0;j=r+20|0;k=r+16|0;n=r+12|0;m=r+8|0;l=r+4|0;o=r;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;c[p>>2]=Pw(c[f>>2]|0)|0;c[k>>2]=Bz(c[p>>2]|0)|0;if((d[(c[h>>2]|0)+42>>0]|0)&16)f=Ax(c[c[f>>2]>>2]|0,c[h>>2]|0)|0;else f=0;c[n>>2]=f;c[j>>2]=1;a:while(1){if((c[j>>2]|0)>=(c[k>>2]|0)){f=18;break}c[m>>2]=Mz(c[p>>2]|0,c[j>>2]|0)|0;b:do if((d[c[m>>2]>>0]|0|0)==54?(c[(c[m>>2]|0)+12>>2]|0)==(c[g>>2]|0):0){c[o>>2]=c[(c[m>>2]|0)+8>>2];if((c[o>>2]|0)==(c[(c[h>>2]|0)+28>>2]|0)){f=8;break a}c[l>>2]=c[(c[h>>2]|0)+8>>2];while(1){if(!(c[l>>2]|0))break b;if((c[o>>2]|0)==(c[(c[l>>2]|0)+44>>2]|0)){f=12;break a}c[l>>2]=c[(c[l>>2]|0)+20>>2]}}while(0);if((d[c[m>>2]>>0]|0|0)==152?(c[(c[m>>2]|0)+16>>2]|0)==(c[n>>2]|0):0){f=16;break}c[j>>2]=(c[j>>2]|0)+1}if((f|0)==8){c[q>>2]=1;q=c[q>>2]|0;i=r;return q|0}else if((f|0)==12){c[q>>2]=1;q=c[q>>2]|0;i=r;return q|0}else if((f|0)==16){c[q>>2]=1;q=c[q>>2]|0;i=r;return q|0}else if((f|0)==18){c[q>>2]=0;q=c[q>>2]|0;i=r;return q|0}return 0}function zC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;i=i+32|0;k=e+16|0;g=e+12|0;h=e+8|0;j=e+4|0;f=e;c[k>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=c[(c[k>>2]|0)+8>>2];xA(c[k>>2]|0,c[g>>2]|0,c[h>>2]|0);a=(c[k>>2]|0)+76|0;d=(c[a>>2]|0)+1|0;c[a>>2]=d;c[f>>2]=d;Rw(c[j>>2]|0,30,c[h>>2]|0,c[f>>2]|0)|0;KA(c[g>>2]|0,c[f>>2]|0);i=e;return}function AC(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;k=n+12|0;l=n+8|0;m=n+4|0;j=n;c[g>>2]=d;c[h>>2]=e;c[k>>2]=f;c[m>>2]=c[(c[h>>2]|0)+20>>2];if(!(c[m>>2]|0)){c[j>>2]=wA(c[g>>2]|0)|0;d=(b[(c[h>>2]|0)+34>>1]|0)+1|0;c[m>>2]=yh(0,d,((d|0)<0)<<31>>31)|0;if(!(c[m>>2]|0)){jh(c[j>>2]|0);i=n;return}c[l>>2]=0;while(1){if((c[l>>2]|0)>=(b[(c[h>>2]|0)+34>>1]|0))break;a[(c[m>>2]|0)+(c[l>>2]|0)>>0]=a[(c[(c[h>>2]|0)+4>>2]|0)+((c[l>>2]|0)*24|0)+21>>0]|0;c[l>>2]=(c[l>>2]|0)+1}do{d=c[l>>2]|0;c[l>>2]=d+-1;a[(c[m>>2]|0)+d>>0]=0;if((c[l>>2]|0)<0)break}while((a[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)==65);c[(c[h>>2]|0)+20>>2]=c[m>>2]}c[l>>2]=If(c[m>>2]|0)|0;if(!(c[l>>2]|0)){i=n;return}g=c[g>>2]|0;if(c[k>>2]|0){Uw(g,48,c[k>>2]|0,c[l>>2]|0,0,c[m>>2]|0,c[l>>2]|0)|0;i=n;return}else{Ih(g,-1,c[m>>2]|0,c[l>>2]|0);i=n;return}}function BC(a,b,e,f,g,h,j,k,l){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|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;v=i;i=i+48|0;m=v+36|0;w=v+32|0;n=v+28|0;o=v+24|0;p=v+20|0;q=v+16|0;r=v+12|0;s=v+8|0;t=v+4|0;u=v;c[m>>2]=a;c[w>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=j;c[s>>2]=k;c[t>>2]=l;c[u>>2]=c[w>>2];while(1){if(!(c[u>>2]|0))break;if(((d[(c[u>>2]|0)+8>>0]|0|0)==(c[n>>2]|0)?(d[(c[u>>2]|0)+9>>0]|0|0)==(c[p>>2]|0):0)?(MF(c[(c[u>>2]|0)+16>>2]|0,c[o>>2]|0)|0)!=0:0)LE(c[m>>2]|0,c[u>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0);c[u>>2]=c[(c[u>>2]|0)+32>>2]}i=v;return}function CC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if((c[f>>2]|0)<=0){i=h;return}Rw(c[(c[e>>2]|0)+8>>2]|0,137,c[f>>2]|0,c[g>>2]|0)|0;i=h;return}function DC(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;if((d[(c[f>>2]|0)+23>>0]|0|0)!=0?(FA(c[g>>2]|0)|0)!=0:0){_A(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,0);i=j;return}xA(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0);i=j;return}function EC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+20|0;d=k+16|0;h=k+12|0;f=k+8|0;g=k+4|0;e=k;c[l>>2]=a;c[d>>2]=b;a=c[l>>2]|0;if(c[(c[l>>2]|0)+416>>2]|0)a=c[a+416>>2]|0;c[h>>2]=a;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[h>>2]|0)+456>>2]|0))break;if((c[d>>2]|0)==(c[(c[(c[h>>2]|0)+524>>2]|0)+(c[f>>2]<<2)>>2]|0)){j=10;break}c[f>>2]=(c[f>>2]|0)+1}if((j|0)==10){i=k;return}c[g>>2]=(c[(c[h>>2]|0)+456>>2]|0)+1<<2;l=c[g>>2]|0;c[e>>2]=Md(c[(c[h>>2]|0)+524>>2]|0,l,((l|0)<0)<<31>>31)|0;if(c[e>>2]|0){c[(c[h>>2]|0)+524>>2]=c[e>>2];j=c[d>>2]|0;g=(c[h>>2]|0)+456|0;l=c[g>>2]|0;c[g>>2]=l+1;c[(c[(c[h>>2]|0)+524>>2]|0)+(l<<2)>>2]=j;i=k;return}else{jh(c[c[h>>2]>>2]|0);i=k;return}}function FC(f,g,h,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|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,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,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;na=i;i=i+192|0;A=na;E=na+176|0;F=na+172|0;H=na+168|0;I=na+164|0;J=na+160|0;K=na+156|0;L=na+152|0;M=na+183|0;N=na+182|0;O=na+148|0;G=na+144|0;s=na+140|0;ka=na+136|0;ca=na+132|0;da=na+128|0;S=na+124|0;T=na+120|0;Z=na+116|0;w=na+112|0;$=na+108|0;t=na+104|0;ja=na+100|0;_=na+96|0;X=na+92|0;W=na+88|0;Y=na+181|0;R=na+180|0;ia=na+84|0;B=na+80|0;x=na+76|0;v=na+72|0;y=na+68|0;C=na+64|0;u=na+60|0;z=na+56|0;ga=na+52|0;ha=na+48|0;V=na+44|0;Q=na+40|0;U=na+36|0;la=na+32|0;ma=na+28|0;P=na+24|0;aa=na+20|0;fa=na+16|0;ba=na+12|0;ea=na+8|0;c[E>>2]=f;c[F>>2]=g;c[H>>2]=h;c[I>>2]=j;c[J>>2]=k;c[K>>2]=l;c[L>>2]=m;a[M>>0]=n;a[N>>0]=o;c[O>>2]=p;c[G>>2]=q;c[s>>2]=r;c[da>>2]=0;c[ja>>2]=0;c[X>>2]=0;c[W>>2]=0;a[R>>0]=0;c[ia>>2]=-1;a[Y>>0]=(c[L>>2]|0)!=0;c[S>>2]=c[c[E>>2]>>2];c[ka>>2]=Pw(c[E>>2]|0)|0;c[w>>2]=b[(c[F>>2]|0)+34>>1];if(!(d[(c[F>>2]|0)+42>>0]&32)){c[da>>2]=0;c[_>>2]=1}else{c[da>>2]=Ej(c[F>>2]|0)|0;c[_>>2]=e[(c[da>>2]|0)+50>>1]}c[T>>2]=0;while(1){if((c[T>>2]|0)>=(c[w>>2]|0))break;a:do if((c[T>>2]|0)!=(b[(c[F>>2]|0)+32>>1]|0)){if((c[s>>2]|0)!=0?(c[(c[s>>2]|0)+(c[T>>2]<<2)>>2]|0)<0:0)break;c[$>>2]=d[(c[(c[F>>2]|0)+4>>2]|0)+((c[T>>2]|0)*24|0)+20>>0];if(c[$>>2]|0){if((d[N>>0]|0)==10){if((c[$>>2]|0)==10)c[$>>2]=2}else c[$>>2]=d[N>>0];if((c[$>>2]|0)==5?(c[(c[(c[F>>2]|0)+4>>2]|0)+((c[T>>2]|0)*24|0)+4>>2]|0)==0:0)c[$>>2]=2;switch(c[$>>2]|0){case 2:{Bx(c[E>>2]|0);break}case 3:case 1:break;case 4:{Rw(c[ka>>2]|0,76,(c[K>>2]|0)+1+(c[T>>2]|0)|0,c[O>>2]|0)|0;break a}default:{c[t>>2]=xz(c[ka>>2]|0,77,(c[K>>2]|0)+1+(c[T>>2]|0)|0)|0;xA(c[E>>2]|0,c[(c[(c[F>>2]|0)+4>>2]|0)+((c[T>>2]|0)*24|0)+4>>2]|0,(c[K>>2]|0)+1+(c[T>>2]|0)|0);Fz(c[ka>>2]|0,c[t>>2]|0);break a}}m=c[S>>2]|0;l=c[(c[(c[F>>2]|0)+4>>2]|0)+((c[T>>2]|0)*24|0)>>2]|0;c[A>>2]=c[c[F>>2]>>2];c[A+4>>2]=l;c[B>>2]=Bh(m,31016,A)|0;Uw(c[ka>>2]|0,20,1299,c[$>>2]|0,(c[K>>2]|0)+1+(c[T>>2]|0)|0,c[B>>2]|0,-1)|0;Fh(c[ka>>2]|0,1)}}while(0);c[T>>2]=(c[T>>2]|0)+1}b:do if((c[(c[F>>2]|0)+24>>2]|0)!=0?(c[(c[S>>2]|0)+24>>2]&8192|0)==0:0){c[x>>2]=c[(c[F>>2]|0)+24>>2];c[(c[E>>2]|0)+100>>2]=(c[K>>2]|0)+1;c[$>>2]=(d[N>>0]|0)!=10?d[N>>0]|0:2;c[T>>2]=0;while(1){if((c[T>>2]|0)>=(c[c[x>>2]>>2]|0))break b;c[y>>2]=c[(c[(c[x>>2]|0)+4>>2]|0)+((c[T>>2]|0)*20|0)>>2];if(!((c[s>>2]|0)!=0?(BE(c[y>>2]|0,c[s>>2]|0,d[M>>0]|0)|0)!=0:0)){c[v>>2]=Cz(c[ka>>2]|0)|0;MA(c[E>>2]|0,c[y>>2]|0,c[v>>2]|0,16);if((c[$>>2]|0)==4)Ez(c[ka>>2]|0,c[O>>2]|0)|0;else{c[C>>2]=c[(c[(c[x>>2]|0)+4>>2]|0)+((c[T>>2]|0)*20|0)+4>>2];if(!(c[C>>2]|0))c[C>>2]=c[c[F>>2]>>2];if((c[$>>2]|0)==5)c[$>>2]=2;bA(c[E>>2]|0,275,c[$>>2]|0,c[C>>2]|0,0,3)}Gz(c[ka>>2]|0,c[v>>2]|0)}c[T>>2]=(c[T>>2]|0)+1}}while(0);if((d[M>>0]|0)!=0&(c[da>>2]|0)==0){c[u>>2]=Cz(c[ka>>2]|0)|0;c[$>>2]=d[(c[F>>2]|0)+43>>0];if((d[N>>0]|0)==10){if((c[$>>2]|0)==10)c[$>>2]=2}else c[$>>2]=d[N>>0];if(a[Y>>0]|0){Vw(c[ka>>2]|0,79,c[K>>2]|0,c[u>>2]|0,c[L>>2]|0)|0;Fh(c[ka>>2]|0,-112)}c:do if((c[$>>2]|0)==5?(d[N>>0]|0)!=5:0){c[ca>>2]=c[(c[F>>2]|0)+8>>2];while(1){if(!(c[ca>>2]|0))break c;if((d[(c[ca>>2]|0)+54>>0]|0)==4)break;if((d[(c[ca>>2]|0)+54>>0]|0)==3)break;c[ca>>2]=c[(c[ca>>2]|0)+20>>2]}c[X>>2]=Yw(c[ka>>2]|0,13)|0}while(0);Vw(c[ka>>2]|0,70,c[I>>2]|0,c[u>>2]|0,c[K>>2]|0)|0;switch(c[$>>2]|0){case 3:case 2:case 1:{D=55;break}case 5:{c[z>>2]=0;if(c[(c[S>>2]|0)+24>>2]&262144)c[z>>2]=sC(c[E>>2]|0,c[F>>2]|0,109,0,0)|0;if((c[z>>2]|0)==0?(DE(c[E>>2]|0,c[F>>2]|0,0,0)|0)==0:0){if(c[(c[F>>2]|0)+8>>2]|0){EE(c[E>>2]|0);GE(c[E>>2]|0,c[F>>2]|0,c[I>>2]|0,c[J>>2]|0,0,-1)}}else{EE(c[E>>2]|0);FE(c[E>>2]|0,c[F>>2]|0,c[z>>2]|0,c[I>>2]|0,c[J>>2]|0,c[K>>2]|0,1,0,5,1,-1)}c[ja>>2]=1;break}case 4:{Ez(c[ka>>2]|0,c[O>>2]|0)|0;break}default:{c[$>>2]=2;D=55}}if((D|0)==55)CE(c[E>>2]|0,c[$>>2]|0,c[F>>2]|0);Gz(c[ka>>2]|0,c[u>>2]|0);if(c[X>>2]|0){c[W>>2]=Yw(c[ka>>2]|0,13)|0;Fz(c[ka>>2]|0,c[X>>2]|0)}}c[Z>>2]=0;c[ca>>2]=c[(c[F>>2]|0)+8>>2];while(1){if(!(c[ca>>2]|0))break;do if(c[(c[H>>2]|0)+(c[Z>>2]<<2)>>2]|0){if(!(d[R>>0]|0)){AC(c[ka>>2]|0,c[F>>2]|0,(c[K>>2]|0)+1|0);a[R>>0]=1}c[V>>2]=(c[J>>2]|0)+(c[Z>>2]|0);c[Q>>2]=Cz(c[ka>>2]|0)|0;if(c[(c[ca>>2]|0)+36>>2]|0){Rw(c[ka>>2]|0,25,0,c[(c[H>>2]|0)+(c[Z>>2]<<2)>>2]|0)|0;c[(c[E>>2]|0)+100>>2]=(c[K>>2]|0)+1;jA(c[E>>2]|0,c[(c[ca>>2]|0)+36>>2]|0,c[Q>>2]|0,16);c[(c[E>>2]|0)+100>>2]=0}c[ga>>2]=kA(c[E>>2]|0,e[(c[ca>>2]|0)+52>>1]|0)|0;c[T>>2]=0;while(1){if((c[T>>2]|0)>=(e[(c[ca>>2]|0)+52>>1]|0))break;c[U>>2]=b[(c[(c[ca>>2]|0)+4>>2]|0)+(c[T>>2]<<1)>>1];do if((c[U>>2]|0)==-2){c[(c[E>>2]|0)+100>>2]=(c[K>>2]|0)+1;sA(c[E>>2]|0,c[(c[(c[(c[ca>>2]|0)+40>>2]|0)+4>>2]|0)+((c[T>>2]|0)*20|0)>>2]|0,(c[ga>>2]|0)+(c[T>>2]|0)|0);c[(c[E>>2]|0)+100>>2]=0}else{if((c[U>>2]|0)!=-1?(c[U>>2]|0)!=(b[(c[F>>2]|0)+32>>1]|0):0)c[la>>2]=(c[U>>2]|0)+(c[K>>2]|0)+1;else{if((c[ia>>2]|0)==((c[ga>>2]|0)+(c[T>>2]|0)|0))break;c[la>>2]=c[K>>2];if(c[(c[ca>>2]|0)+36>>2]|0)s=-1;else s=(c[ga>>2]|0)+(c[T>>2]|0)|0;c[ia>>2]=s}Rw(c[ka>>2]|0,(c[U>>2]|0)<0?32:31,c[la>>2]|0,(c[ga>>2]|0)+(c[T>>2]|0)|0)|0}while(0);c[T>>2]=(c[T>>2]|0)+1}Vw(c[ka>>2]|0,49,c[ga>>2]|0,e[(c[ca>>2]|0)+52>>1]|0,c[(c[H>>2]|0)+(c[Z>>2]<<2)>>2]|0)|0;CA(c[E>>2]|0,c[ga>>2]|0,e[(c[ca>>2]|0)+52>>1]|0);if(((d[Y>>0]|0)!=0?(c[da>>2]|0)==(c[ca>>2]|0):0)?(d[M>>0]|0)==0:0){Gz(c[ka>>2]|0,c[Q>>2]|0);break}c[$>>2]=d[(c[ca>>2]|0)+54>>0];if(!(c[$>>2]|0)){nA(c[E>>2]|0,c[ga>>2]|0,e[(c[ca>>2]|0)+52>>1]|0);Gz(c[ka>>2]|0,c[Q>>2]|0);break}if((d[N>>0]|0)==10){if((c[$>>2]|0)==10)c[$>>2]=2}else c[$>>2]=d[N>>0];Eh(c[ka>>2]|0,67,c[V>>2]|0,c[Q>>2]|0,c[ga>>2]|0,e[(c[ca>>2]|0)+50>>1]|0)|0;if((c[ca>>2]|0)==(c[da>>2]|0))s=c[ga>>2]|0;else s=kA(c[E>>2]|0,c[_>>2]|0)|0;c[ha>>2]=s;d:do if((d[Y>>0]|0)!=0|(c[$>>2]|0)==5){if(!(d[(c[F>>2]|0)+42>>0]&32)){Rw(c[ka>>2]|0,113,c[V>>2]|0,c[ha>>2]|0)|0;if(!(a[Y>>0]|0))break;Vw(c[ka>>2]|0,79,c[ha>>2]|0,c[Q>>2]|0,c[L>>2]|0)|0;Fh(c[ka>>2]|0,-112);break}e:do if((c[ca>>2]|0)!=(c[da>>2]|0)){c[T>>2]=0;while(1){if((c[T>>2]|0)>=(e[(c[da>>2]|0)+50>>1]|0))break e;c[ma>>2]=(uA(c[ca>>2]|0,b[(c[(c[da>>2]|0)+4>>2]|0)+(c[T>>2]<<1)>>1]|0)|0)<<16>>16;Vw(c[ka>>2]|0,47,c[V>>2]|0,c[ma>>2]|0,(c[ha>>2]|0)+(c[T>>2]|0)|0)|0;c[T>>2]=(c[T>>2]|0)+1}}while(0);if(a[Y>>0]|0){D=Bz(c[ka>>2]|0)|0;c[P>>2]=D+(e[(c[da>>2]|0)+50>>1]|0);c[aa>>2]=78;c[fa>>2]=(a[(c[ca>>2]|0)+55>>0]&3|0)==2?c[ga>>2]|0:c[ha>>2]|0;c[T>>2]=0;while(1){if((c[T>>2]|0)>=(e[(c[da>>2]|0)+50>>1]|0))break d;c[ba>>2]=Dz(c[E>>2]|0,c[(c[(c[da>>2]|0)+32>>2]|0)+(c[T>>2]<<2)>>2]|0)|0;c[ma>>2]=b[(c[(c[da>>2]|0)+4>>2]|0)+(c[T>>2]<<1)>>1];if((c[T>>2]|0)==((e[(c[da>>2]|0)+50>>1]|0)-1|0)){c[P>>2]=c[Q>>2];c[aa>>2]=79}Uw(c[ka>>2]|0,c[aa>>2]|0,(c[L>>2]|0)+1+(c[ma>>2]|0)|0,c[P>>2]|0,(c[fa>>2]|0)+(c[T>>2]|0)|0,c[ba>>2]|0,-4)|0;Fh(c[ka>>2]|0,-112);c[T>>2]=(c[T>>2]|0)+1}}}while(0);switch(c[$>>2]|0){case 3:case 2:case 1:{Zz(c[E>>2]|0,c[$>>2]|0,c[ca>>2]|0);break}case 4:{Ez(c[ka>>2]|0,c[O>>2]|0)|0;break}default:{c[ea>>2]=0;EE(c[E>>2]|0);if(c[(c[S>>2]|0)+24>>2]&262144)c[ea>>2]=sC(c[E>>2]|0,c[F>>2]|0,109,0,0)|0;FE(c[E>>2]|0,c[F>>2]|0,c[ea>>2]|0,c[I>>2]|0,c[J>>2]|0,c[ha>>2]|0,c[_>>2]&65535,0,5,((c[ca>>2]|0)==(c[da>>2]|0)?1:0)&255,-1);c[ja>>2]=1}}Gz(c[ka>>2]|0,c[Q>>2]|0);nA(c[E>>2]|0,c[ga>>2]|0,e[(c[ca>>2]|0)+52>>1]|0);if((c[ha>>2]|0)!=(c[ga>>2]|0))nA(c[E>>2]|0,c[ha>>2]|0,c[_>>2]|0)}while(0);c[ca>>2]=c[(c[ca>>2]|0)+20>>2];c[Z>>2]=(c[Z>>2]|0)+1}if(!(c[X>>2]|0)){la=c[ja>>2]|0;ma=c[G>>2]|0;c[ma>>2]=la;i=na;return}Ez(c[ka>>2]|0,(c[X>>2]|0)+1|0)|0;Fz(c[ka>>2]|0,c[W>>2]|0);la=c[ja>>2]|0;ma=c[G>>2]|0;c[ma>>2]=la;i=na;return}function GC(e,f,g,h,j,k){e=e|0;f=f|0;g=g|0;h=h|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;O=i;i=i+112|0;l=O+108|0;m=O+104|0;n=O+100|0;o=O+96|0;p=O+92|0;q=O+88|0;v=O+84|0;D=O+80|0;z=O+76|0;M=O+72|0;C=O+68|0;I=O+64|0;E=O+60|0;t=O+56|0;r=O+52|0;y=O+48|0;x=O+44|0;u=O+40|0;K=O+36|0;A=O+32|0;B=O+28|0;J=O+24|0;L=O+20|0;F=O+16|0;H=O+12|0;s=O+8|0;G=O+4|0;w=O;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;c[q>>2]=k;c[v>>2]=c[c[l>>2]>>2];c[C>>2]=d[(c[l>>2]|0)+442>>0];if(!(c[(c[v>>2]|0)+24>>2]&524288)){i=O;return}c[z>>2]=Dh(c[v>>2]|0,c[(c[m>>2]|0)+64>>2]|0)|0;c[M>>2]=c[(c[(c[v>>2]|0)+16>>2]|0)+(c[z>>2]<<4)>>2];c[D>>2]=c[(c[m>>2]|0)+16>>2];a:while(1){if(!(c[D>>2]|0)){N=39;break}c[E>>2]=0;c[t>>2]=0;c[u>>2]=0;if(!(((c[p>>2]|0)!=0?(Td(c[c[m>>2]>>2]|0,c[(c[D>>2]|0)+8>>2]|0)|0)!=0:0)?(KC(c[m>>2]|0,c[D>>2]|0,c[p>>2]|0,c[q>>2]|0)|0)==0:0))N=7;do if((N|0)==7){N=0;if(a[(c[l>>2]|0)+442>>0]|0)c[I>>2]=pi(c[v>>2]|0,c[(c[D>>2]|0)+8>>2]|0,c[M>>2]|0)|0;else c[I>>2]=zh(c[l>>2]|0,0,c[(c[D>>2]|0)+8>>2]|0,c[M>>2]|0)|0;if((c[I>>2]|0)!=0?(cC(c[l>>2]|0,c[I>>2]|0,c[D>>2]|0,E,t)|0)==0:0){if(c[t>>2]|0)c[r>>2]=c[t>>2];else{c[y>>2]=c[(c[D>>2]|0)+36>>2];c[r>>2]=y}c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[(c[D>>2]|0)+20>>2]|0))break;if((c[(c[r>>2]|0)+(c[x>>2]<<2)>>2]|0)==(b[(c[m>>2]|0)+32>>1]|0))c[(c[r>>2]|0)+(c[x>>2]<<2)>>2]=-1;if(c[(c[v>>2]|0)+288>>2]|0){if(c[E>>2]|0)j=b[(c[(c[E>>2]|0)+4>>2]|0)+(c[x>>2]<<1)>>1]|0;else j=b[(c[I>>2]|0)+32>>1]|0;c[L>>2]=c[(c[(c[I>>2]|0)+4>>2]|0)+((j<<16>>16)*24|0)>>2];c[J>>2]=Oy(c[l>>2]|0,c[c[I>>2]>>2]|0,c[L>>2]|0,c[z>>2]|0)|0;c[u>>2]=(c[J>>2]|0)==2&1}c[x>>2]=(c[x>>2]|0)+1}yz(c[l>>2]|0,c[z>>2]|0,c[(c[I>>2]|0)+28>>2]|0,0,c[c[I>>2]>>2]|0);g=(c[l>>2]|0)+72|0;c[g>>2]=(c[g>>2]|0)+1;if(c[n>>2]|0)LC(c[l>>2]|0,c[z>>2]|0,c[I>>2]|0,c[E>>2]|0,c[D>>2]|0,c[r>>2]|0,c[n>>2]|0,-1,c[u>>2]|0);if((c[o>>2]|0)!=0?(MC(c[l>>2]|0,c[D>>2]|0)|0)==0:0)LC(c[l>>2]|0,c[z>>2]|0,c[I>>2]|0,c[E>>2]|0,c[D>>2]|0,c[r>>2]|0,c[o>>2]|0,1,c[u>>2]|0);Sf(c[v>>2]|0,c[t>>2]|0);break}if(!(c[C>>2]|0)){N=59;break a}if(d[(c[v>>2]|0)+65>>0]|0){N=59;break a}if(!(c[I>>2]|0)){c[K>>2]=Pw(c[l>>2]|0)|0;g=Bz(c[K>>2]|0)|0;c[A>>2]=g+(c[(c[D>>2]|0)+20>>2]|0)+1;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[(c[D>>2]|0)+20>>2]|0))break;c[B>>2]=(c[(c[D>>2]|0)+36+(c[x>>2]<<3)>>2]|0)+(c[n>>2]|0)+1;Rw(c[K>>2]|0,76,c[B>>2]|0,c[A>>2]|0)|0;c[x>>2]=(c[x>>2]|0)+1}Rw(c[K>>2]|0,135,d[(c[D>>2]|0)+24>>0]|0,-1)|0}}while(0);c[D>>2]=c[(c[D>>2]|0)+4>>2]}if((N|0)==39){c[D>>2]=Ex(c[m>>2]|0)|0;b:while(1){if(!(c[D>>2]|0)){N=59;break}c[F>>2]=0;c[s>>2]=0;if(!((c[p>>2]|0)!=0?(NC(c[m>>2]|0,c[D>>2]|0,c[p>>2]|0,c[q>>2]|0)|0)==0:0))N=43;do if((N|0)==43){N=0;if((((a[(c[D>>2]|0)+24>>0]|0)==0?(c[(c[v>>2]|0)+24>>2]&16777216|0)==0:0)?(c[(c[l>>2]|0)+416>>2]|0)==0:0)?(a[(c[l>>2]|0)+20>>0]|0)==0:0)break;if(cC(c[l>>2]|0,c[m>>2]|0,c[D>>2]|0,F,s)|0){if(!(c[C>>2]|0)){N=59;break b}if(d[(c[v>>2]|0)+65>>0]|0){N=59;break b}else break}c[H>>2]=Nv(c[v>>2]|0,0,0,0)|0;if(c[H>>2]|0){c[G>>2]=(c[H>>2]|0)+8;c[(c[G>>2]|0)+16>>2]=c[c[D>>2]>>2];c[(c[G>>2]|0)+8>>2]=c[c[c[D>>2]>>2]>>2];L=(c[(c[G>>2]|0)+16>>2]|0)+36|0;b[L>>1]=(b[L>>1]|0)+1<<16>>16;L=(c[l>>2]|0)+72|0;M=c[L>>2]|0;c[L>>2]=M+1;c[(c[G>>2]|0)+44>>2]=M;if(c[o>>2]|0)OC(c[l>>2]|0,c[H>>2]|0,c[m>>2]|0,c[F>>2]|0,c[D>>2]|0,c[s>>2]|0,c[o>>2]|0,-1);if((c[n>>2]|0)!=0?(c[w>>2]=d[(c[D>>2]|0)+25+((c[p>>2]|0)!=0&1)>>0],OC(c[l>>2]|0,c[H>>2]|0,c[m>>2]|0,c[F>>2]|0,c[D>>2]|0,c[s>>2]|0,c[n>>2]|0,1),((c[w>>2]|0)!=9?(a[(c[D>>2]|0)+24>>0]|0)==0:0)&(c[w>>2]|0)!=7):0)Bx(c[l>>2]|0);c[(c[G>>2]|0)+8>>2]=0;Yu(c[v>>2]|0,c[H>>2]|0)}Sf(c[v>>2]|0,c[s>>2]|0)}while(0);c[D>>2]=c[(c[D>>2]|0)+12>>2]}if((N|0)==59){i=O;return}}else if((N|0)==59){i=O;return}}function HC(e,f,g,h,j,k,l,m,n){e=e|0;f=f|0;g=g|0;h=h|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;E=i;i=i+64|0;o=E+52|0;p=E+48|0;q=E+44|0;r=E+40|0;s=E+36|0;t=E+32|0;u=E+28|0;v=E+24|0;w=E+20|0;D=E+16|0;z=E+12|0;A=E+57|0;B=E+8|0;C=E+4|0;y=E;x=E+56|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=j;c[t>>2]=k;c[u>>2]=l;c[v>>2]=m;c[w>>2]=n;a[x>>0]=0;c[D>>2]=Pw(c[o>>2]|0)|0;c[y>>2]=0;c[z>>2]=c[(c[p>>2]|0)+8>>2];while(1){if(!(c[z>>2]|0))break;if(c[(c[t>>2]|0)+(c[y>>2]<<2)>>2]|0){a[x>>0]=1;if(c[(c[z>>2]|0)+36>>2]|0){j=c[D>>2]|0;n=c[(c[t>>2]|0)+(c[y>>2]<<2)>>2]|0;Rw(j,76,n,(Bz(c[D>>2]|0)|0)+2|0)|0}Rw(c[D>>2]|0,110,(c[r>>2]|0)+(c[y>>2]|0)|0,c[(c[t>>2]|0)+(c[y>>2]<<2)>>2]|0)|0;a[A>>0]=0;a[A>>0]=(c[w>>2]|0)!=0?16:0;if((a[(c[z>>2]|0)+55>>0]&3|0)==2?(d[(c[p>>2]|0)+42>>0]&32|0)!=0:0)a[A>>0]=d[A>>0]|1;Fh(c[D>>2]|0,a[A>>0]|0)}c[z>>2]=c[(c[z>>2]|0)+20>>2];c[y>>2]=(c[y>>2]|0)+1}if(d[(c[p>>2]|0)+42>>0]&32){i=E;return}c[B>>2]=(c[s>>2]|0)+1;c[C>>2]=Wz(c[o>>2]|0)|0;Vw(c[D>>2]|0,49,c[B>>2]|0,b[(c[p>>2]|0)+34>>1]|0,c[C>>2]|0)|0;if(!(a[x>>0]|0))AC(c[D>>2]|0,c[p>>2]|0,0);CA(c[o>>2]|0,c[B>>2]|0,b[(c[p>>2]|0)+34>>1]|0);if(a[(c[o>>2]|0)+18>>0]|0)a[A>>0]=0;else{a[A>>0]=1;a[A>>0]=d[A>>0]|((c[u>>2]|0)!=0?4:2)}if(c[v>>2]|0)a[A>>0]=d[A>>0]|8;if(c[w>>2]|0)a[A>>0]=d[A>>0]|16;Vw(c[D>>2]|0,75,c[q>>2]|0,c[C>>2]|0,c[s>>2]|0)|0;if(!(a[(c[o>>2]|0)+18>>0]|0))Ih(c[D>>2]|0,-1,c[c[p>>2]>>2]|0,0);Fh(c[D>>2]|0,a[A>>0]|0);i=E;return}function IC(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[(c[b>>2]|0)+412>>2]|0)){i=d;return}JC(c[b>>2]|0);i=d;return}function JC(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;d=m+28|0;j=m+24|0;l=m+20|0;f=m+16|0;e=m+12|0;k=m+8|0;g=m+4|0;h=m;c[d>>2]=b;c[l>>2]=c[(c[d>>2]|0)+8>>2];c[f>>2]=c[c[d>>2]>>2];c[j>>2]=c[(c[d>>2]|0)+412>>2];while(1){if(!(c[j>>2]|0)){d=5;break}c[k>>2]=(c[(c[f>>2]|0)+16>>2]|0)+(c[(c[j>>2]|0)+8>>2]<<4);c[h>>2]=c[(c[j>>2]|0)+12>>2];c[g>>2]=Wz(c[d>>2]|0)|0;zz(c[d>>2]|0,0,c[(c[j>>2]|0)+8>>2]|0,c[(c[(c[k>>2]|0)+12>>2]|0)+72>>2]|0,55);c[e>>2]=Gh(c[l>>2]|0,5,35196,0)|0;if(!(c[e>>2]|0)){d=5;break}c[(c[e>>2]|0)+4>>2]=(c[h>>2]|0)+1;c[(c[e>>2]|0)+20+8>>2]=(c[h>>2]|0)+1;c[(c[e>>2]|0)+40+4>>2]=(c[h>>2]|0)-1;c[(c[e>>2]|0)+40+12>>2]=c[g>>2];c[(c[e>>2]|0)+60+8>>2]=c[g>>2];c[(c[e>>2]|0)+60+12>>2]=(c[h>>2]|0)+1;a[(c[e>>2]|0)+60+3>>0]=8;_z(c[d>>2]|0,c[g>>2]|0);c[j>>2]=c[c[j>>2]>>2]}if((d|0)==5){i=m;return}}function KC(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;n=o+24|0;g=o+20|0;h=o+16|0;j=o+12|0;k=o+8|0;l=o+4|0;m=o;c[g>>2]=a;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[(c[h>>2]|0)+20>>2]|0)){g=8;break}c[m>>2]=c[(c[h>>2]|0)+36+(c[l>>2]<<3)>>2];if((c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]|0)>=0){g=4;break}if((c[k>>2]|0)!=0?(c[m>>2]|0)==(b[(c[g>>2]|0)+32>>1]|0):0){g=6;break}c[l>>2]=(c[l>>2]|0)+1}if((g|0)==4){c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}else if((g|0)==6){c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}else if((g|0)==8){c[n>>2]=0;n=c[n>>2]|0;i=o;return n|0}return 0}function fi(d,f,g,h,j,k,l,m,n){d=d|0;f=f|0;g=g|0;h=h|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;D=i;i=i+64|0;C=D;p=D+56|0;q=D+52|0;r=D+48|0;s=D+44|0;t=D+40|0;u=D+36|0;v=D+32|0;w=D+28|0;x=D+24|0;y=D+20|0;B=D+16|0;A=D+12|0;z=D+8|0;o=D+4|0;c[q>>2]=d;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=j;c[v>>2]=k;c[w>>2]=l;c[x>>2]=m;c[y>>2]=n;do if(c[r>>2]|0){if((c[v>>2]|0)!=0?(c[x>>2]|0)!=0|(c[w>>2]|0)!=0:0)break;if(((c[v>>2]|0)==0&(c[x>>2]|0)!=0^1|(c[w>>2]|0)!=0?!((((c[v>>2]|0)!=0|(c[x>>2]|0)!=0)^1)&(c[w>>2]|0)!=0|(c[s>>2]|0)<-1|(c[s>>2]|0)>127):0)?(f=If(c[r>>2]|0)|0,c[A>>2]=f,255>=(f|0)):0){c[z>>2]=c[t>>2]&2048;c[t>>2]=c[t>>2]&7;do if((c[t>>2]|0)!=4){if((c[t>>2]|0)==5){c[o>>2]=fi(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,1|c[z>>2],c[u>>2]|0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0)|0;if(!(c[o>>2]|0))c[o>>2]=fi(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,2|c[z>>2],c[u>>2]|0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0)|0;if(!(c[o>>2]|0)){c[t>>2]=3;break}c[p>>2]=c[o>>2];C=c[p>>2]|0;i=D;return C|0}}else c[t>>2]=(a[960]|0)==0?3:2;while(0);c[B>>2]=gi(c[q>>2]|0,c[r>>2]|0,c[A>>2]|0,c[s>>2]|0,c[t>>2]&255,0)|0;do if(((c[B>>2]|0)!=0?(e[(c[B>>2]|0)+2>>1]&3|0)==(c[t>>2]|0):0)?(b[c[B>>2]>>1]|0)==(c[s>>2]|0):0){d=c[q>>2]|0;if(!(c[(c[q>>2]|0)+148>>2]|0)){Oh(d);break}hg(d,5,27111,C);c[p>>2]=5;C=c[p>>2]|0;i=D;return C|0}while(0);c[B>>2]=gi(c[q>>2]|0,c[r>>2]|0,c[A>>2]|0,c[s>>2]|0,c[t>>2]&255,1)|0;if(!(c[B>>2]|0)){c[p>>2]=7;C=c[p>>2]|0;i=D;return C|0}bu(c[q>>2]|0,c[B>>2]|0);if(c[y>>2]|0){C=c[y>>2]|0;c[C>>2]=(c[C>>2]|0)+1}c[(c[B>>2]|0)+28>>2]=c[y>>2];b[(c[B>>2]|0)+2>>1]=e[(c[B>>2]|0)+2>>1]&3|c[z>>2];c[(c[B>>2]|0)+12>>2]=(c[v>>2]|0)!=0?c[v>>2]|0:c[w>>2]|0;c[(c[B>>2]|0)+16>>2]=c[x>>2];c[(c[B>>2]|0)+4>>2]=c[u>>2];b[c[B>>2]>>1]=c[s>>2];c[p>>2]=0;C=c[p>>2]|0;i=D;return C|0}}while(0);c[p>>2]=Kf(134386)|0;C=c[p>>2]|0;i=D;return C|0}function gi(e,f,g,h,j,k){e=e|0;f=f|0;g=g|0;h=h|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=i;i=i+64|0;l=z+44|0;m=z+40|0;n=z+36|0;o=z+32|0;p=z+28|0;q=z+49|0;r=z+48|0;u=z+24|0;v=z+20|0;s=z+16|0;t=z+12|0;x=z+8|0;w=z+4|0;y=z;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;a[q>>0]=j;a[r>>0]=k;c[v>>2]=0;c[s>>2]=0;c[t>>2]=((d[18477+(d[c[n>>2]>>0]|0)>>0]|0)+(c[o>>2]|0)|0)%23|0;c[u>>2]=Wt((c[m>>2]|0)+340|0,c[t>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;while(1){if(!(c[u>>2]|0))break;c[x>>2]=Xt(c[u>>2]|0,c[p>>2]|0,a[q>>0]|0)|0;if((c[x>>2]|0)>(c[s>>2]|0)){c[v>>2]=c[u>>2];c[s>>2]=c[x>>2]}c[u>>2]=c[(c[u>>2]|0)+8>>2]}a:do if(!(a[r>>0]|0)){if((c[v>>2]|0)!=0?(c[(c[m>>2]|0)+24>>2]&2097152|0)==0:0)break;c[w>>2]=1080;c[s>>2]=0;c[u>>2]=Wt(c[w>>2]|0,c[t>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;while(1){if(!(c[u>>2]|0))break a;c[y>>2]=Xt(c[u>>2]|0,c[p>>2]|0,a[q>>0]|0)|0;if((c[y>>2]|0)>(c[s>>2]|0)){c[v>>2]=c[u>>2];c[s>>2]=c[y>>2]}c[u>>2]=c[(c[u>>2]|0)+8>>2]}}while(0);if((d[r>>0]|0)!=0&(c[s>>2]|0)<6?(f=ph(c[m>>2]|0,32+(c[o>>2]|0)+1|0,0)|0,c[v>>2]=f,(f|0)!=0):0){c[(c[v>>2]|0)+20>>2]=(c[v>>2]|0)+32;b[c[v>>2]>>1]=c[p>>2];b[(c[v>>2]|0)+2>>1]=d[q>>0]|0;iR(c[(c[v>>2]|0)+20>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;a[(c[(c[v>>2]|0)+20>>2]|0)+(c[o>>2]|0)>>0]=0;Yt((c[m>>2]|0)+340|0,c[v>>2]|0)}do if(c[v>>2]|0){if((c[(c[v>>2]|0)+12>>2]|0)==0?(d[r>>0]|0)==0:0)break;c[l>>2]=c[v>>2];f=c[l>>2]|0;i=z;return f|0}while(0);c[l>>2]=0;f=c[l>>2]|0;i=z;return f|0}function hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+32|0;h=e;g=e+20|0;j=e+8|0;f=e+4|0;c[g>>2]=a;c[e+16>>2]=b;c[e+12>>2]=d;c[j>>2]=c[(c[(c[g>>2]|0)+4>>2]|0)+20>>2];c[h>>2]=c[j>>2];c[f>>2]=Od(27060,h)|0;je(c[g>>2]|0,c[f>>2]|0,-1);Kd(c[f>>2]|0);i=e;return}function ii(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;j=h+12|0;f=h+8|0;g=h+4|0;k=h;c[j>>2]=a;c[f>>2]=b;c[g>>2]=d;c[k>>2]=e;if((c[k>>2]|0)<(c[j>>2]|0)){i=h;return 0}Sj();Bf(c[f>>2]|0,c[g>>2]|0)|0;Tj();i=h;return 0}function ji(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;h=j+8|0;g=j+4|0;f=j;c[d>>2]=a;c[e>>2]=b;c[h>>2]=-1;if(!(c[e>>2]|0)){h=c[h>>2]|0;i=j;return h|0}c[f>>2]=If(c[e>>2]|0)|0;c[h>>2]=(c[(c[d>>2]|0)+20>>2]|0)-1;c[g>>2]=(c[(c[d>>2]|0)+16>>2]|0)+(c[h>>2]<<4);while(1){if((c[h>>2]|0)<0){d=7;break}b=c[f>>2]|0;if((b|0)==(If(c[c[g>>2]>>2]|0)|0)?0==(Td(c[c[g>>2]>>2]|0,c[e>>2]|0)|0):0){d=7;break}c[h>>2]=(c[h>>2]|0)+-1;c[g>>2]=(c[g>>2]|0)+-16}if((d|0)==7){h=c[h>>2]|0;i=j;return h|0}return 0}function ki(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+28|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;o=p+8|0;n=p+4|0;m=p;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[o>>2]=0;c[m>>2]=0;c[n>>2]=0;while(1){if(!((c[n>>2]|0)<(c[(c[g>>2]|0)+20>>2]|0)?(c[o>>2]|0)==0:0))break;if(((c[h>>2]|0)==10?1:(c[n>>2]|0)==(c[h>>2]|0))?(c[o>>2]=Ut(c[(c[(c[g>>2]|0)+16>>2]|0)+(c[n>>2]<<4)+4>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0)|0,c[k>>2]=0,c[l>>2]=0,(c[o>>2]|0)==5):0){c[m>>2]=1;c[o>>2]=0}c[n>>2]=(c[n>>2]|0)+1}i=p;return((c[o>>2]|0)==0&(c[m>>2]|0)!=0?5:c[o>>2]|0)|0}function li(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;if(!(d[(c[e>>2]|0)+65>>0]|0)){i=f;return}if(c[(c[e>>2]|0)+160>>2]|0){i=f;return}a[(c[e>>2]|0)+65>>0]=0;c[(c[e>>2]|0)+240>>2]=0;b=(c[e>>2]|0)+248|0;c[b>>2]=(c[b>>2]|0)+-1;i=f;return}function mi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;p=s;h=s+40|0;j=s+36|0;k=s+32|0;l=s+28|0;m=s+24|0;n=s+20|0;o=s+16|0;g=s+12|0;r=s+8|0;q=s+4|0;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[r>>2]=0;c[q>>2]=0;c[c[k>>2]>>2]=0;c[o>>2]=Dd()|0;if(c[o>>2]|0){c[h>>2]=c[o>>2];r=c[h>>2]|0;i=s;return r|0}if(!(1<<(c[l>>2]&7)&70)){c[h>>2]=Kf(135519)|0;r=c[h>>2]|0;i=s;return r|0}do if(c[3]|0){if(c[l>>2]&32768){c[g>>2]=0;break}if(c[l>>2]&65536){c[g>>2]=1;break}else{c[g>>2]=c[4];break}}else c[g>>2]=0;while(0);if(!(c[l>>2]&262144)){if(c[57]|0)c[l>>2]=c[l>>2]|131072}else c[l>>2]=c[l>>2]&-131073;c[l>>2]=c[l>>2]&-655129;c[n>>2]=ig(536,0)|0;do if(c[n>>2]|0){if((c[g>>2]|0)!=0?(c[(c[n>>2]|0)+12>>2]=8,(c[(c[n>>2]|0)+12>>2]|0)==0):0){Kd(c[n>>2]|0);c[n>>2]=0;break}c[(c[n>>2]|0)+56>>2]=255;c[(c[n>>2]|0)+20>>2]=2;c[(c[n>>2]|0)+76>>2]=-264537850;c[(c[n>>2]|0)+16>>2]=(c[n>>2]|0)+460;e=(c[n>>2]|0)+88|0;g=1536;d=e+48|0;do{c[e>>2]=c[g>>2];e=e+4|0;g=g+4|0}while((e|0)<(d|0));c[(c[n>>2]|0)+88+44>>2]=0;a[(c[n>>2]|0)+63>>0]=1;a[(c[n>>2]|0)+68>>0]=-1;d=184;b=c[d+4>>2]|0;f=(c[n>>2]|0)+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=b;c[(c[n>>2]|0)+72>>2]=0;c[(c[n>>2]|0)+136>>2]=2147483647;f=(c[n>>2]|0)+24|0;c[f>>2]=c[f>>2]|9437280;uj((c[n>>2]|0)+432|0);uj((c[n>>2]|0)+312|0);ni(c[n>>2]|0,35690,1,0,141,0)|0;ni(c[n>>2]|0,35690,3,0,141,0)|0;ni(c[n>>2]|0,35690,2,0,141,0)|0;ni(c[n>>2]|0,21290,1,0,142,0)|0;ni(c[n>>2]|0,21297,1,1,141,0)|0;if(!(a[(c[n>>2]|0)+65>>0]|0)){f=Mj(c[n>>2]|0,1,35690,0)|0;c[(c[n>>2]|0)+8>>2]=f; +c[(c[n>>2]|0)+48>>2]=c[l>>2];c[o>>2]=Wj(c[m>>2]|0,c[j>>2]|0,l,c[n>>2]|0,r,q)|0;if(c[o>>2]|0){if((c[o>>2]|0)==7)jh(c[n>>2]|0);j=c[n>>2]|0;l=c[o>>2]|0;m=(c[q>>2]|0)!=0?19255:0;c[p>>2]=c[q>>2];hg(j,l,m,p);Kd(c[q>>2]|0);break}c[o>>2]=Xj(c[c[n>>2]>>2]|0,c[r>>2]|0,c[n>>2]|0,(c[(c[n>>2]|0)+16>>2]|0)+4|0,0,c[l>>2]|256)|0;if(c[o>>2]|0){if((c[o>>2]|0)==3082)c[o>>2]=7;jg(c[n>>2]|0,c[o>>2]|0);break}kg(c[(c[(c[n>>2]|0)+16>>2]|0)+4>>2]|0);q=Yj(c[n>>2]|0,c[(c[(c[n>>2]|0)+16>>2]|0)+4>>2]|0)|0;c[(c[(c[n>>2]|0)+16>>2]|0)+12>>2]=q;if(!(a[(c[n>>2]|0)+65>>0]|0))a[(c[n>>2]|0)+62>>0]=a[(c[(c[(c[n>>2]|0)+16>>2]|0)+12>>2]|0)+77>>0]|0;q=Yj(c[n>>2]|0,0)|0;c[(c[(c[n>>2]|0)+16>>2]|0)+16+12>>2]=q;c[c[(c[n>>2]|0)+16>>2]>>2]=21303;a[(c[(c[n>>2]|0)+16>>2]|0)+8>>0]=3;c[(c[(c[n>>2]|0)+16>>2]|0)+16>>2]=19536;a[(c[(c[n>>2]|0)+16>>2]|0)+16+8>>0]=1;c[(c[n>>2]|0)+76>>2]=-1607883113;if(!(a[(c[n>>2]|0)+65>>0]|0)){jg(c[n>>2]|0,0);Zj(c[n>>2]|0);c[o>>2]=Cf(c[n>>2]|0)|0;if((c[o>>2]|0)==0?(_j(c[n>>2]|0),c[o>>2]=Cf(c[n>>2]|0)|0,(c[o>>2]|0)!=0):0)break;if((c[o>>2]|0)==0?(a[(c[n>>2]|0)+65>>0]|0)==0:0)c[o>>2]=$j(c[n>>2]|0)|0;if(c[o>>2]|0)jg(c[n>>2]|0,c[o>>2]|0);ci(c[n>>2]|0,0,c[9]|0,c[10]|0)|0;yf(c[n>>2]|0,1e3)|0}}}while(0);c[o>>2]=Cf(c[n>>2]|0)|0;if((c[o>>2]|0)!=7){if(c[o>>2]|0)c[(c[n>>2]|0)+76>>2]=1266094736}else{rf(c[n>>2]|0)|0;c[n>>2]=0}c[c[k>>2]>>2]=c[n>>2];Kd(c[r>>2]|0);c[h>>2]=c[o>>2]&255;r=c[h>>2]|0;i=s;return r|0}function ni(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+64|0;w=x;k=x+44|0;l=x+40|0;m=x+36|0;n=x+48|0;o=x+32|0;p=x+28|0;q=x+24|0;v=x+20|0;s=x+16|0;r=x+12|0;t=x+8|0;u=x+4|0;c[l>>2]=b;c[m>>2]=e;a[n>>0]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=j;c[s>>2]=d[n>>0];if((c[s>>2]|0)==4|(c[s>>2]|0)==8)c[s>>2]=(a[960]|0)==0?3:2;if((c[s>>2]|0)<1|(c[s>>2]|0)>3){c[k>>2]=Kf(135070)|0;w=c[k>>2]|0;i=x;return w|0}c[v>>2]=Mj(c[l>>2]|0,c[s>>2]&255,c[m>>2]|0,0)|0;a:do if((c[v>>2]|0)!=0?(c[(c[v>>2]|0)+12>>2]|0)!=0:0){b=c[l>>2]|0;if(c[(c[l>>2]|0)+148>>2]|0){hg(b,5,21222,w);c[k>>2]=5;w=c[k>>2]|0;i=x;return w|0}Oh(b);if((d[(c[v>>2]|0)+4>>0]&-9|0)==(c[s>>2]|0)){c[r>>2]=nj((c[l>>2]|0)+432|0,c[m>>2]|0)|0;c[t>>2]=0;while(1){if((c[t>>2]|0)>=3)break a;c[u>>2]=(c[r>>2]|0)+((c[t>>2]|0)*20|0);if((d[(c[u>>2]|0)+4>>0]|0)==(d[(c[v>>2]|0)+4>>0]|0)){if(c[(c[u>>2]|0)+16>>2]|0)Qb[c[(c[u>>2]|0)+16>>2]&255](c[(c[u>>2]|0)+8>>2]|0);c[(c[u>>2]|0)+12>>2]=0}c[t>>2]=(c[t>>2]|0)+1}}}while(0);c[v>>2]=Mj(c[l>>2]|0,c[s>>2]&255,c[m>>2]|0,1)|0;if(!(c[v>>2]|0)){c[k>>2]=7;w=c[k>>2]|0;i=x;return w|0}else{c[(c[v>>2]|0)+12>>2]=c[p>>2];c[(c[v>>2]|0)+8>>2]=c[o>>2];c[(c[v>>2]|0)+16>>2]=c[q>>2];a[(c[v>>2]|0)+4>>0]=c[s>>2]|d[n>>0]&8;jg(c[l>>2]|0,0);c[k>>2]=0;w=c[k>>2]|0;i=x;return w|0}return 0}function oi(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;j=l+8|0;k=l+4|0;h=l;c[f>>2]=b;c[g>>2]=d;c[h>>2]=((c[(c[f>>2]|0)+24>>2]&2|0)!=0^1)&1;c[k>>2]=0;a[(c[f>>2]|0)+140+5>>0]=1;a[(c[f>>2]|0)+62>>0]=a[(c[(c[(c[f>>2]|0)+16>>2]|0)+12>>2]|0)+77>>0]|0;c[j>>2]=0;while(1){if(c[k>>2]|0)break;if((c[j>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0))break;if(!((c[j>>2]|0)==1?1:((e[(c[(c[(c[f>>2]|0)+16>>2]|0)+(c[j>>2]<<4)+12>>2]|0)+78>>1]|0)&1|0)==1)?(c[k>>2]=qj(c[f>>2]|0,c[j>>2]|0,c[g>>2]|0)|0,(c[k>>2]|0)!=0):0)rj(c[f>>2]|0,c[j>>2]|0);c[j>>2]=(c[j>>2]|0)+1}if(((c[k>>2]|0)==0?((e[(c[(c[(c[f>>2]|0)+16>>2]|0)+16+12>>2]|0)+78>>1]|0)&1|0)!=1:0)?(c[k>>2]=qj(c[f>>2]|0,1,c[g>>2]|0)|0,(c[k>>2]|0)!=0):0)rj(c[f>>2]|0,1);a[(c[f>>2]|0)+140+5>>0]=0;if(!((c[k>>2]|0)==0&(c[h>>2]|0)!=0)){k=c[k>>2]|0;i=l;return k|0}sj(c[f>>2]|0);k=c[k>>2]|0;i=l;return k|0}function pi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+20|0;f=m+16|0;g=m+12|0;k=m+8|0;h=m+4|0;j=m;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[k>>2]=0;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0)){l=7;break}b=c[h>>2]|0;c[j>>2]=(c[h>>2]|0)<2?b^1:b;if(!((c[g>>2]|0)!=0?(Td(c[g>>2]|0,c[(c[(c[e>>2]|0)+16>>2]|0)+(c[j>>2]<<4)>>2]|0)|0)!=0:0))l=5;if((l|0)==5?(l=0,c[k>>2]=nj((c[(c[(c[e>>2]|0)+16>>2]|0)+(c[j>>2]<<4)+12>>2]|0)+8|0,c[f>>2]|0)|0,(c[k>>2]|0)!=0):0){l=7;break}c[h>>2]=(c[h>>2]|0)+1}if((l|0)==7){i=m;return c[k>>2]|0}return 0}function qi(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;do if(Td(c[d>>2]|0,20751)|0){if(!(Td(c[d>>2]|0,20759)|0)){c[b>>2]=1;break}if(!(Td(c[d>>2]|0,20765)|0)){c[b>>2]=1;break}else{c[b>>2]=0;break}}else c[b>>2]=1;while(0);i=e;return c[b>>2]|0}function ri(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=Yb[c[(c[f>>2]|0)+60>>2]&255](c[f>>2]|0,c[e>>2]|0)|0;i=d;return a|0}function si(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;f=h+8|0;d=h+4|0;g=h;c[f>>2]=a;c[d>>2]=b;c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0)){d=8;break}if(c[(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4)+4>>2]|0){if(!(c[d>>2]|0)){d=6;break}if(!(Td(c[d>>2]|0,c[(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4)>>2]|0)|0)){d=6;break}}c[g>>2]=(c[g>>2]|0)+1}if((d|0)==6){c[e>>2]=c[(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4)+4>>2];g=c[e>>2]|0;i=h;return g|0}else if((d|0)==8){c[e>>2]=0;g=c[e>>2]|0;i=h;return g|0}return 0}function ti(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[c[b>>2]>>2]|0}function ui(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=c[d>>2]|0;if(c[(c[d>>2]|0)+216>>2]|0){d=mj(c[a+216>>2]|0)|0;i=b;return d|0}else{d=c[a+68>>2]|0;i=b;return d|0}return 0}function vi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;d=Ob[c[(c[c[h>>2]>>2]|0)+40>>2]&255](c[h>>2]|0,c[g>>2]|0,c[f>>2]|0)|0;i=e;return d|0}function wi(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=c[68];if(!(c[d>>2]|0)){d=0;i=e;return d|0}d=Tb[c[d>>2]&255](c[b>>2]|0)|0;i=e;return d|0}function xi(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+32|0;h=o+24|0;p=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;n=o+4|0;m=o;c[p>>2]=a;c[j>>2]=d;c[k>>2]=f;c[l>>2]=g;c[n>>2]=0;c[m>>2]=c[(c[p>>2]|0)+4>>2];kg(c[p>>2]|0);if((e[(c[m>>2]|0)+22>>1]|0)&2){c[h>>2]=8;p=c[h>>2]|0;i=o;return p|0}if((c[k>>2]|0)<0)c[k>>2]=(c[(c[m>>2]|0)+32>>2]|0)-(c[(c[m>>2]|0)+36>>2]|0);if((c[j>>2]|0)>=512&(c[j>>2]|0)<=65536?((c[j>>2]|0)-1&c[j>>2]|0)==0:0){c[(c[m>>2]|0)+32>>2]=c[j>>2];Pi(c[m>>2]|0)}c[n>>2]=Qi(c[c[m>>2]>>2]|0,(c[m>>2]|0)+32|0,c[k>>2]|0)|0;c[(c[m>>2]|0)+36>>2]=(c[(c[m>>2]|0)+32>>2]|0)-(c[k>>2]&65535);if(c[l>>2]|0){p=(c[m>>2]|0)+22|0;b[p>>1]=e[p>>1]|0|2}c[h>>2]=c[n>>2];p=c[h>>2]|0;i=o;return p|0}function yi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;d=e;c[g>>2]=a;c[f>>2]=b;c[d>>2]=27;Oi(c[g>>2]|0,c[f>>2]|0,d)|0;i=e;return c[d>>2]|0}function zi(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;Mi(8,c[b>>2]|0);if((c[76]|0)!=0?(c[51]|0)>=(c[b>>2]|0):0){c[d>>2]=c[75];c[75]=c[c[75]>>2];c[76]=(c[76]|0)+-1;Ni(3,1);d=c[d>>2]|0;i=e;return d|0}a=c[b>>2]|0;c[d>>2]=_f(a,((a|0)<0)<<31>>31)|0;if(!((c[2]|0)!=0&(c[d>>2]|0)!=0)){d=c[d>>2]|0;i=e;return d|0}Ni(4,$f(c[d>>2]|0)|0);d=c[d>>2]|0;i=e;return d|0}function Ai(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;e=f+4|0;d=f;c[b>>2]=a;if(!(c[b>>2]|0)){i=f;return}if((c[b>>2]|0)>>>0>=(c[50]|0)>>>0?(c[b>>2]|0)>>>0<(c[74]|0)>>>0:0){c[e>>2]=c[b>>2];c[c[e>>2]>>2]=c[75];c[75]=c[e>>2];c[76]=(c[76]|0)+1;ag(3,1);i=f;return}if(c[2]|0){c[d>>2]=$f(c[b>>2]|0)|0;ag(4,c[d>>2]|0);ag(0,c[d>>2]|0);ag(9,1);Qb[c[48>>2]&255](c[b>>2]|0);i=f;return}else{Qb[c[48>>2]&255](c[b>>2]|0);i=f;return}}function Bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;g=e;f=e+4|0;c[g>>2]=b;a[f>>0]=d;b=((Ji(c[g>>2]|0,1,a[f>>0]|0)|0)&255|0)!=0&255;i=e;return b|0}function Ci(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+24|0;f=m+20|0;g=m+16|0;k=m;h=m+12|0;j=m+8|0;c[f>>2]=b;c[g>>2]=e;do if((a[c[f>>2]>>0]|0)==48){if((a[(c[f>>2]|0)+1>>0]|0)!=120?(a[(c[f>>2]|0)+1>>0]|0)!=88:0)break;if(d[19267+(d[(c[f>>2]|0)+2>>0]|0)>>0]&8){b=k;c[b>>2]=0;c[b+4>>2]=0;c[h>>2]=2;while(1){e=c[h>>2]|0;if((a[(c[f>>2]|0)+(c[h>>2]|0)>>0]|0)!=48)break;c[h>>2]=e+1}c[j>>2]=e;while(1){if(!(d[19267+(d[(c[f>>2]|0)+(c[j>>2]|0)>>0]|0)>>0]&8))break;b=k;b=rR(c[b>>2]|0,c[b+4>>2]|0,16,0)|0;e=C;e=gR(b|0,e|0,(Gi(a[(c[f>>2]|0)+(c[j>>2]|0)>>0]|0)|0)&255|0,0)|0;b=k;c[b>>2]=e;c[b+4>>2]=C;c[j>>2]=(c[j>>2]|0)+1}g=c[g>>2]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];if(!(a[(c[f>>2]|0)+(c[j>>2]|0)>>0]|0))e=((c[j>>2]|0)-(c[h>>2]|0)|0)<=16;else e=0;c[l>>2]=e?0:1;l=c[l>>2]|0;i=m;return l|0}}while(0);j=c[f>>2]|0;k=c[g>>2]|0;c[l>>2]=Hi(j,k,If(c[f>>2]|0)|0,1)|0;l=c[l>>2]|0;i=m;return l|0}function Di(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Fi(c[c[(c[d>>2]|0)+4>>2]>>2]|0,1)|0;i=b;return a|0}function Ei(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return((e[(c[(c[b>>2]|0)+4>>2]|0)+22>>1]|0)&1|0)!=0|0}function Fi(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;f=i;i=i+16|0;e=f+4|0;g=f;c[e>>2]=a;c[g>>2]=b;if((c[g>>2]|0)!=0?(d[(c[e>>2]|0)+16>>0]|0|0)!=0:0){g=19266;i=f;return g|0}g=c[(c[e>>2]|0)+176>>2]|0;i=f;return g|0}function Gi(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;c[b>>2]=(c[b>>2]|0)+((1&c[b>>2]>>6)*9|0);i=d;return c[b>>2]&15|0}function Hi(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+64|0;l=w+48|0;m=w+44|0;n=w+40|0;h=w+36|0;j=w+52|0;q=w+32|0;k=w;r=w+28|0;p=w+24|0;o=w+20|0;s=w+16|0;u=w+12|0;t=w+8|0;c[m>>2]=b;c[n>>2]=e;c[h>>2]=f;a[j>>0]=g;b=k;c[b>>2]=0;c[b+4>>2]=0;c[r>>2]=0;c[o>>2]=0;c[s>>2]=0;c[t>>2]=(c[m>>2]|0)+(c[h>>2]|0);if((d[j>>0]|0)==1)c[q>>2]=1;else{c[q>>2]=2;c[p>>2]=3-(d[j>>0]|0);while(1){if((c[p>>2]|0)>=(c[h>>2]|0))break;if(a[(c[m>>2]|0)+(c[p>>2]|0)>>0]|0)break;c[p>>2]=(c[p>>2]|0)+2}c[s>>2]=(c[p>>2]|0)<(c[h>>2]|0)&1;c[t>>2]=(c[m>>2]|0)+(c[p>>2]|0)+(d[j>>0]|0)+-3;c[m>>2]=(c[m>>2]|0)+(d[j>>0]&1)}while(1){if((c[m>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;if(!(d[19267+(d[c[m>>2]>>0]|0)>>0]&1))break;c[m>>2]=(c[m>>2]|0)+(c[q>>2]|0)}do if((c[m>>2]|0)>>>0<(c[t>>2]|0)>>>0){if((a[c[m>>2]>>0]|0)==45){c[r>>2]=1;c[m>>2]=(c[m>>2]|0)+(c[q>>2]|0);break}if((a[c[m>>2]>>0]|0)==43)c[m>>2]=(c[m>>2]|0)+(c[q>>2]|0)}while(0);c[u>>2]=c[m>>2];while(1){if((c[m>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;if((a[c[m>>2]>>0]|0)!=48)break;c[m>>2]=(c[m>>2]|0)+(c[q>>2]|0)}c[p>>2]=0;while(1){if(((c[m>>2]|0)+(c[p>>2]|0)|0)>>>0<(c[t>>2]|0)>>>0?(b=a[(c[m>>2]|0)+(c[p>>2]|0)>>0]|0,c[o>>2]=b,(b|0)>=48):0)h=(c[o>>2]|0)<=57;else h=0;g=k;j=c[g>>2]|0;g=c[g+4>>2]|0;if(!h)break;b=rR(j|0,g|0,10,0)|0;e=c[o>>2]|0;e=gR(b|0,C|0,e|0,((e|0)<0)<<31>>31|0)|0;e=fR(e|0,C|0,48,0)|0;b=k;c[b>>2]=e;c[b+4>>2]=C;c[p>>2]=(c[p>>2]|0)+(c[q>>2]|0)}f=(c[r>>2]|0)!=0;do if(!(g>>>0>2147483647|(g|0)==2147483647&j>>>0>4294967295)){j=k;h=c[j>>2]|0;j=c[j+4>>2]|0;if(f){k=fR(0,0,h|0,j|0)|0;n=c[n>>2]|0;c[n>>2]=k;c[n+4>>2]=C;break}else{n=c[n>>2]|0;c[n>>2]=h;c[n+4>>2]=j;break}}else{n=c[n>>2]|0;c[n>>2]=f?0:-1;c[n+4>>2]=f?-2147483648:2147483647}while(0);if(!((c[o>>2]|0)!=0?((c[m>>2]|0)+(c[p>>2]|0)|0)>>>0<(c[t>>2]|0)>>>0:0))v=33;do if((v|0)==33){if((c[p>>2]|0)==0?(c[u>>2]|0)==(c[m>>2]|0):0)break;if(!((c[s>>2]|0)!=0?1:(c[p>>2]|0)>((c[q>>2]|0)*19|0))){if((c[p>>2]|0)<((c[q>>2]|0)*19|0)){c[l>>2]=0;v=c[l>>2]|0;i=w;return v|0}c[o>>2]=Ii(c[m>>2]|0,c[q>>2]|0)|0;if((c[o>>2]|0)<0){c[l>>2]=0;v=c[l>>2]|0;i=w;return v|0}if((c[o>>2]|0)>0){c[l>>2]=1;v=c[l>>2]|0;i=w;return v|0}else{c[l>>2]=(c[r>>2]|0)!=0?0:2;v=c[l>>2]|0;i=w;return v|0}}}while(0);c[l>>2]=1;v=c[l>>2]|0;i=w;return v|0}function Ii(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[e>>2]=b;c[f>>2]=d;c[g>>2]=0;c[j>>2]=19631;c[h>>2]=0;while(1){if(!((c[g>>2]|0)==0?(c[h>>2]|0)<18:0))break;b=_(c[h>>2]|0,c[f>>2]|0)|0;c[g>>2]=((a[(c[e>>2]|0)+b>>0]|0)-(a[(c[j>>2]|0)+(c[h>>2]|0)>>0]|0)|0)*10;c[h>>2]=(c[h>>2]|0)+1}if(c[g>>2]|0){b=c[g>>2]|0;i=k;return b|0}c[g>>2]=(a[(c[e>>2]|0)+((c[f>>2]|0)*18|0)>>0]|0)-56;b=c[g>>2]|0;i=k;return b|0}function Ji(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;k=n+17|0;g=n+12|0;h=n+8|0;l=n+16|0;m=n+4|0;j=n;c[g>>2]=b;c[h>>2]=e;a[l>>0]=f;f=c[g>>2]|0;if((d[19267+(d[c[g>>2]>>0]|0)>>0]|0)&4){a[k>>0]=Ki(f)|0;m=a[k>>0]|0;i=n;return m|0}c[j>>2]=If(f)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=8){f=11;break}if((d[19650+(c[m>>2]|0)>>0]|0|0)==(c[j>>2]|0)?(zd(19666+(d[19658+(c[m>>2]|0)>>0]|0)|0,c[g>>2]|0,c[j>>2]|0)|0)==0:0){if(!(c[h>>2]|0)){f=9;break}if((d[19691+(c[m>>2]|0)>>0]|0|0)<=1){f=9;break}}c[m>>2]=(c[m>>2]|0)+1}if((f|0)==9){a[k>>0]=a[19691+(c[m>>2]|0)>>0]|0;m=a[k>>0]|0;i=n;return m|0}else if((f|0)==11){a[k>>0]=a[l>>0]|0;m=a[k>>0]|0;i=n;return m|0}return 0}function Ki(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=0;if(c[b>>2]|0)Li(c[b>>2]|0,d)|0;i=e;return c[d>>2]|0}function Li(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;j=o+32|0;k=o+28|0;l=o+24|0;h=o;m=o+20|0;f=o+16|0;g=o+12|0;n=o+8|0;c[k>>2]=b;c[l>>2]=e;b=h;c[b>>2]=0;c[b+4>>2]=0;c[g>>2]=0;do if((a[c[k>>2]>>0]|0)!=45){e=c[k>>2]|0;if((a[c[k>>2]>>0]|0)==43){c[k>>2]=e+1;break}if((a[e>>0]|0)==48){if((a[(c[k>>2]|0)+1>>0]|0)!=120?(a[(c[k>>2]|0)+1>>0]|0)!=88:0)break;if(d[19267+(d[(c[k>>2]|0)+2>>0]|0)>>0]&8){c[n>>2]=0;c[k>>2]=(c[k>>2]|0)+2;while(1){if((a[c[k>>2]>>0]|0)!=48)break;c[k>>2]=(c[k>>2]|0)+1}c[m>>2]=0;while(1){e=c[n>>2]|0;if(!((d[19267+(d[(c[k>>2]|0)+(c[m>>2]|0)>>0]|0)>>0]&8|0)!=0?(c[m>>2]|0)<8:0))break;c[n>>2]=(e<<4)+((Gi(a[(c[k>>2]|0)+(c[m>>2]|0)>>0]|0)|0)&255);c[m>>2]=(c[m>>2]|0)+1}if((e&-2147483648|0)==0?(d[19267+(d[(c[k>>2]|0)+(c[m>>2]|0)>>0]|0)>>0]&8|0)==0:0){c[c[l>>2]>>2]=c[n>>2];c[j>>2]=1;n=c[j>>2]|0;i=o;return n|0}c[j>>2]=0;n=c[j>>2]|0;i=o;return n|0}}}else{c[g>>2]=1;c[k>>2]=(c[k>>2]|0)+1}while(0);while(1){if((a[c[k>>2]>>0]|0)!=48)break;c[k>>2]=(c[k>>2]|0)+1}c[m>>2]=0;while(1){if((c[m>>2]|0)>=11)break;n=(a[(c[k>>2]|0)+(c[m>>2]|0)>>0]|0)-48|0;c[f>>2]=n;if(!((n|0)>=0&(c[f>>2]|0)<=9))break;n=h;n=rR(c[n>>2]|0,c[n+4>>2]|0,10,0)|0;b=c[f>>2]|0;b=gR(n|0,C|0,b|0,((b|0)<0)<<31>>31|0)|0;n=h;c[n>>2]=b;c[n+4>>2]=C;c[m>>2]=(c[m>>2]|0)+1}if((c[m>>2]|0)>10){c[j>>2]=0;n=c[j>>2]|0;i=o;return n|0}m=h;n=c[g>>2]|0;n=fR(c[m>>2]|0,c[m+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;m=C;if((m|0)>0|(m|0)==0&n>>>0>2147483647){c[j>>2]=0;n=c[j>>2]|0;i=o;return n|0}if(c[g>>2]|0){m=h;m=fR(0,0,c[m>>2]|0,c[m+4>>2]|0)|0;n=h;c[n>>2]=m;c[n+4>>2]=C}c[c[l>>2]>>2]=c[h>>2];c[j>>2]=1;n=c[j>>2]|0;i=o;return n|0}function Mi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=a;c[g>>2]=b;c[e>>2]=c[g>>2];if((c[e>>2]|0)>>>0<=(c[1036+(c[d>>2]<<2)>>2]|0)>>>0){i=f;return}c[1036+(c[d>>2]<<2)>>2]=c[e>>2];i=f;return}function Ni(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e+4|0;f=e;c[d>>2]=a;c[f>>2]=b;a=996+(c[d>>2]<<2)|0;c[a>>2]=(c[a>>2]|0)+(c[f>>2]|0);if((c[996+(c[d>>2]<<2)>>2]|0)>>>0<=(c[1036+(c[d>>2]<<2)>>2]|0)>>>0){i=e;return}c[1036+(c[d>>2]<<2)>>2]=c[996+(c[d>>2]<<2)>>2];i=e;return}function Oi(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+20|0;j=p+16|0;k=p+12|0;l=p+8|0;m=p+4|0;n=p;c[h>>2]=b;c[j>>2]=f;c[k>>2]=g;if((c[j>>2]|0)<2){o=c[j>>2]|0;i=p;return o|0}c[l>>2]=(d[18477+(d[c[h>>2]>>0]|0)>>0]<<2^(d[18477+(d[(c[h>>2]|0)+((c[j>>2]|0)-1)>>0]|0)>>0]|0)*3^c[j>>2]|0)%127|0;c[l>>2]=(d[19699+(c[l>>2]|0)>>0]|0)-1;while(1){if((c[l>>2]|0)<0){o=13;break}if((d[19826+(c[l>>2]|0)>>0]|0)==(c[j>>2]|0)){c[m>>2]=0;c[n>>2]=19950+(e[10628+(c[l>>2]<<1)>>1]|0);while(1){if((c[m>>2]|0)<(c[j>>2]|0))g=(a[(c[h>>2]|0)+(c[m>>2]|0)>>0]&-33|0)==(a[(c[n>>2]|0)+(c[m>>2]|0)>>0]|0);else g=0;f=c[m>>2]|0;if(!g)break;c[m>>2]=f+1}if((f|0)>=(c[j>>2]|0))break}c[l>>2]=(d[20627+(c[l>>2]|0)>>0]|0)-1}if((o|0)==13){o=c[j>>2]|0;i=p;return o|0}c[c[k>>2]>>2]=d[20503+(c[l>>2]|0)>>0];o=c[j>>2]|0;i=p;return o|0}function Pi(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[(c[b>>2]|0)+80>>2]|0)){i=d;return}a=(c[b>>2]|0)+80|0;c[a>>2]=(c[a>>2]|0)+-4;Wi(c[(c[b>>2]|0)+80>>2]|0);c[(c[b>>2]|0)+80>>2]=0;i=d;return}function Qi(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+28|0;h=p+24|0;j=p+20|0;n=p+16|0;m=p+12|0;l=p+8|0;k=p;c[g>>2]=a;c[h>>2]=e;c[j>>2]=f;c[n>>2]=0;c[m>>2]=c[c[h>>2]>>2];if(!((d[(c[g>>2]|0)+16>>0]|0)!=0?(c[(c[g>>2]|0)+28>>2]|0)!=0:0))o=3;do if(((o|0)==3?(o=(Ri(c[(c[g>>2]|0)+212>>2]|0)|0)==0,o&(c[m>>2]|0)!=0):0)?(c[m>>2]|0)!=(c[(c[g>>2]|0)+160>>2]|0):0){c[l>>2]=0;o=k;c[o>>2]=0;c[o+4>>2]=0;if((d[(c[g>>2]|0)+17>>0]|0)>0?(c[c[(c[g>>2]|0)+64>>2]>>2]|0)!=0:0)c[n>>2]=Si(c[(c[g>>2]|0)+64>>2]|0,k)|0;if((c[n>>2]|0)==0?(c[l>>2]=Ti(c[m>>2]|0)|0,(c[l>>2]|0)==0):0)c[n>>2]=7;if(!(c[n>>2]|0)){Ui(c[g>>2]|0);c[n>>2]=Vi(c[(c[g>>2]|0)+212>>2]|0,c[m>>2]|0)|0}if(!(c[n>>2]|0)){Wi(c[(c[g>>2]|0)+208>>2]|0);c[(c[g>>2]|0)+208>>2]=c[l>>2];o=k;o=gR(c[o>>2]|0,c[o+4>>2]|0,c[m>>2]|0,0)|0;o=fR(o|0,C|0,1,0)|0;o=pR(o|0,C|0,c[m>>2]|0,0)|0;c[(c[g>>2]|0)+28>>2]=o;c[(c[g>>2]|0)+160>>2]=c[m>>2];break}else{Wi(c[l>>2]|0);break}}while(0);c[c[h>>2]>>2]=c[(c[g>>2]|0)+160>>2];if(c[n>>2]|0){o=c[n>>2]|0;i=p;return o|0}if((c[j>>2]|0)<0)c[j>>2]=b[(c[g>>2]|0)+150>>1];b[(c[g>>2]|0)+150>>1]=c[j>>2];Xi(c[g>>2]|0);o=c[n>>2]|0;i=p;return o|0}function Ri(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+12>>2]|0}function Si(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;b=Yb[c[(c[c[f>>2]>>2]|0)+24>>2]&255](c[f>>2]|0,c[e>>2]|0)|0;i=d;return b|0}function Ti(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=ej(c[d>>2]|0)|0;i=b;return a|0}function Ui(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=(c[d>>2]|0)+108|0;c[a>>2]=(c[a>>2]|0)+1;_i(c[(c[d>>2]|0)+96>>2]|0);$i(c[(c[d>>2]|0)+212>>2]|0);i=b;return}function Vi(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=a;c[g>>2]=b;if(c[(c[f>>2]|0)+24>>2]|0){c[h>>2]=Ob[c[128>>2]&255](c[g>>2]|0,(c[(c[f>>2]|0)+28>>2]|0)+40|0,d[(c[f>>2]|0)+32>>0]|0)|0;if(!(c[h>>2]|0)){c[e>>2]=7;b=c[e>>2]|0;i=j;return b|0}k=c[33]|0;a=c[h>>2]|0;b=Zi(c[f>>2]|0)|0;Rb[k&255](a,b);if(c[(c[f>>2]|0)+44>>2]|0)Qb[c[156>>2]&255](c[(c[f>>2]|0)+44>>2]|0);c[(c[f>>2]|0)+44>>2]=c[h>>2];c[(c[f>>2]|0)+24>>2]=c[g>>2]}c[e>>2]=0;k=c[e>>2]|0;i=j;return k|0}function Wi(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Yi(c[d>>2]|0);i=b;return}function Xi(a){a=a|0;var b=0;b=i;i=i+16|0;c[b>>2]=a;i=b;return}function Yi(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=0;if(!(c[b>>2]|0)){i=f;return}if((c[b>>2]|0)>>>0>=(c[415]|0)>>>0?(c[b>>2]|0)>>>0<(c[416]|0)>>>0:0){ag(1,1);c[e>>2]=c[b>>2];c[c[e>>2]>>2]=c[418];c[418]=c[e>>2];c[419]=(c[419]|0)+1;c[420]=(c[419]|0)<(c[414]|0)&1;i=f;return}c[d>>2]=$f(c[b>>2]|0)|0;ag(2,c[d>>2]|0);Kd(c[b>>2]|0);i=f;return}function Zi(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;a=c[(c[d>>2]|0)+16>>2]|0;if((c[(c[d>>2]|0)+16>>2]|0)>=0){c[b>>2]=a;d=c[b>>2]|0;i=e;return d|0}else{a=rR(-1024,-1,a|0,((a|0)<0)<<31>>31|0)|0;d=(c[(c[d>>2]|0)+24>>2]|0)+(c[(c[d>>2]|0)+28>>2]|0)|0;d=pR(a|0,C|0,d|0,((d|0)<0)<<31>>31|0)|0;c[b>>2]=d;d=c[b>>2]|0;i=e;return d|0}return 0}function _i(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];while(1){if(!(c[b>>2]|0))break;c[(c[b>>2]|0)+16>>2]=1;c[b>>2]=c[(c[b>>2]|0)+44>>2]}i=d;return}function $i(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;aj(c[d>>2]|0,0);i=b;return}function aj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[d>>2]=a;c[e>>2]=b;if(!(c[(c[d>>2]|0)+44>>2]|0)){i=j;return}c[f>>2]=c[c[d>>2]>>2];while(1){if(!(c[f>>2]|0))break;c[g>>2]=c[(c[f>>2]|0)+32>>2];if((c[(c[f>>2]|0)+20>>2]|0)>>>0>(c[e>>2]|0)>>>0)bj(c[f>>2]|0);c[f>>2]=c[g>>2]}if(((c[e>>2]|0)==0?(c[(c[d>>2]|0)+12>>2]|0)!=0:0)?(c[h>>2]=Ob[c[140>>2]&255](c[(c[d>>2]|0)+44>>2]|0,1,0)|0,(c[h>>2]|0)!=0):0){kR(c[c[h>>2]>>2]|0,0,c[(c[d>>2]|0)+24>>2]|0)|0;c[e>>2]=1}Rb[c[152>>2]&255](c[(c[d>>2]|0)+44>>2]|0,(c[e>>2]|0)+1|0);i=j;return}function bj(a){a=a|0;var d=0,f=0;f=i;i=i+16|0;d=f;c[d>>2]=a;if(!(e[(c[d>>2]|0)+24>>1]&2)){i=f;return}cj(c[d>>2]|0,1);a=(c[d>>2]|0)+24|0;b[a>>1]=e[a>>1]&-15;a=(c[d>>2]|0)+24|0;b[a>>1]=e[a>>1]|1;if(b[(c[d>>2]|0)+26>>1]|0){i=f;return}dj(c[d>>2]|0);i=f;return}function cj(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;j=l+8|0;h=l+12|0;k=l+4|0;g=l;c[j>>2]=b;a[h>>0]=f;c[k>>2]=c[(c[j>>2]|0)+28>>2];if(d[h>>0]&1){if((c[(c[k>>2]|0)+8>>2]|0)==(c[j>>2]|0)){c[g>>2]=c[(c[j>>2]|0)+36>>2];while(1){if(c[g>>2]|0)f=(e[(c[g>>2]|0)+24>>1]&8|0)!=0;else f=0;b=c[g>>2]|0;if(!f)break;c[g>>2]=c[b+36>>2]}c[(c[k>>2]|0)+8>>2]=b}f=c[(c[j>>2]|0)+36>>2]|0;if(c[(c[j>>2]|0)+32>>2]|0)c[(c[(c[j>>2]|0)+32>>2]|0)+36>>2]=f;else c[(c[k>>2]|0)+4>>2]=f;f=c[(c[j>>2]|0)+32>>2]|0;if(!(c[(c[j>>2]|0)+36>>2]|0)){c[c[k>>2]>>2]=f;if((c[c[k>>2]>>2]|0)==0?(d[(c[k>>2]|0)+32>>0]|0)!=0:0)a[(c[k>>2]|0)+33>>0]=2}else c[(c[(c[j>>2]|0)+36>>2]|0)+32>>2]=f;c[(c[j>>2]|0)+32>>2]=0;c[(c[j>>2]|0)+36>>2]=0}if(!(d[h>>0]&2)){i=l;return}c[(c[j>>2]|0)+32>>2]=c[c[k>>2]>>2];f=c[j>>2]|0;if(!(c[(c[j>>2]|0)+32>>2]|0)){c[(c[k>>2]|0)+4>>2]=f;if(a[(c[k>>2]|0)+32>>0]|0)a[(c[k>>2]|0)+33>>0]=1}else c[(c[(c[j>>2]|0)+32>>2]|0)+36>>2]=f;c[c[k>>2]>>2]=c[j>>2];if(c[(c[k>>2]|0)+8>>2]|0){i=l;return}if(e[(c[j>>2]|0)+24>>1]&8){i=l;return}c[(c[k>>2]|0)+8>>2]=c[j>>2];i=l;return}function dj(b){b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=b;if(!(a[(c[(c[d>>2]|0)+28>>2]|0)+32>>0]|0)){i=e;return}Ub[c[144>>2]&255](c[(c[(c[d>>2]|0)+28>>2]|0)+44>>2]|0,c[c[d>>2]>>2]|0,0);i=e;return}function ej(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=0;if((c[b>>2]|0)<=(c[412]|0)?(c[d>>2]=c[418],(c[d>>2]|0)!=0):0){c[418]=c[c[418]>>2];c[419]=(c[419]|0)+-1;c[420]=(c[419]|0)<(c[414]|0)&1;Mi(7,c[b>>2]|0);Ni(1,1)}if(c[d>>2]|0){e=c[d>>2]|0;i=f;return e|0}a=c[b>>2]|0;c[d>>2]=_f(a,((a|0)<0)<<31>>31)|0;if(!(c[d>>2]|0)){e=c[d>>2]|0;i=f;return e|0}c[e>>2]=$f(c[d>>2]|0)|0;Mi(7,c[b>>2]|0);Ni(2,c[e>>2]|0);e=c[d>>2]|0;i=f;return e|0}function fj(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=ig(512,0)|0;if(!(c[d>>2]|0)){d=c[d>>2]|0;i=e;return d|0}c[c[d>>2]>>2]=c[b>>2];d=c[d>>2]|0;i=e;return d|0}function gj(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+28|0;h=p+24|0;j=p+20|0;l=p+16|0;f=p+12|0;m=p+8|0;n=p+4|0;k=p;c[h>>2]=b;c[j>>2]=e;if(!(c[h>>2]|0)){c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}c[j>>2]=(c[j>>2]|0)+-1;while(1){if((c[c[h>>2]>>2]|0)>>>0<=4e3)break;if(!(c[(c[h>>2]|0)+8>>2]|0))break;c[f>>2]=((c[j>>2]|0)>>>0)/((c[(c[h>>2]|0)+8>>2]|0)>>>0)|0;c[j>>2]=((c[j>>2]|0)>>>0)%((c[(c[h>>2]|0)+8>>2]|0)>>>0)|0;if((c[(c[h>>2]|0)+12+(c[f>>2]<<2)>>2]|0)==0?(b=fj(c[(c[h>>2]|0)+8>>2]|0)|0,c[(c[h>>2]|0)+12+(c[f>>2]<<2)>>2]=b,(c[(c[h>>2]|0)+12+(c[f>>2]<<2)>>2]|0)==0):0){o=8;break}c[h>>2]=c[(c[h>>2]|0)+12+(c[f>>2]<<2)>>2]}if((o|0)==8){c[g>>2]=7;o=c[g>>2]|0;i=p;return o|0}f=c[j>>2]|0;if((c[c[h>>2]>>2]|0)>>>0<=4e3){o=(c[h>>2]|0)+12+(((c[j>>2]|0)>>>0)/8|0)|0;a[o>>0]=d[o>>0]|0|1<<(f&7);c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}c[j>>2]=f+1;c[l>>2]=(f>>>0)%125|0;a:do if(!(c[(c[h>>2]|0)+12+(c[l>>2]<<2)>>2]|0)){if((c[(c[h>>2]|0)+4>>2]|0)>>>0>=124)o=17}else{while(1){if((c[(c[h>>2]|0)+12+(c[l>>2]<<2)>>2]|0)==(c[j>>2]|0))break;o=(c[l>>2]|0)+1|0;c[l>>2]=o;c[l>>2]=(c[l>>2]|0)>>>0>=125?0:o;if(!(c[(c[h>>2]|0)+12+(c[l>>2]<<2)>>2]|0)){o=17;break a}}c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}while(0);if((o|0)==17?(c[(c[h>>2]|0)+4>>2]|0)>>>0>=62:0){c[k>>2]=yh(0,500,0)|0;if(!(c[k>>2]|0)){c[g>>2]=7;o=c[g>>2]|0;i=p;return o|0}iR(c[k>>2]|0,(c[h>>2]|0)+12|0,500)|0;kR((c[h>>2]|0)+12|0,0,500)|0;c[(c[h>>2]|0)+8>>2]=(((c[c[h>>2]>>2]|0)+125-1|0)>>>0)/125|0;c[n>>2]=gj(c[h>>2]|0,c[j>>2]|0)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>>>0>=125)break;if(c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]|0){o=gj(c[h>>2]|0,c[(c[k>>2]|0)+(c[m>>2]<<2)>>2]|0)|0;c[n>>2]=c[n>>2]|o}c[m>>2]=(c[m>>2]|0)+1}Sf(0,c[k>>2]|0);c[g>>2]=c[n>>2];o=c[g>>2]|0;i=p;return o|0}o=(c[h>>2]|0)+4|0;c[o>>2]=(c[o>>2]|0)+1;c[(c[h>>2]|0)+12+(c[l>>2]<<2)>>2]=c[j>>2];c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}function hj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+24|0;h=p+20|0;j=p+16|0;l=p+12|0;n=p+8|0;k=p+4|0;m=p;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;if(!(c[g>>2]|0)){i=p;return}c[h>>2]=(c[h>>2]|0)+-1;while(1){if(!(c[(c[g>>2]|0)+8>>2]|0))break;c[l>>2]=((c[h>>2]|0)>>>0)/((c[(c[g>>2]|0)+8>>2]|0)>>>0)|0;c[h>>2]=((c[h>>2]|0)>>>0)%((c[(c[g>>2]|0)+8>>2]|0)>>>0)|0;c[g>>2]=c[(c[g>>2]|0)+12+(c[l>>2]<<2)>>2];if(!(c[g>>2]|0)){o=16;break}}if((o|0)==16){i=p;return}if((c[c[g>>2]>>2]|0)>>>0<=4e3){o=(c[g>>2]|0)+12+(((c[h>>2]|0)>>>0)/8|0)|0;a[o>>0]=(d[o>>0]|0)&~(1<<(c[h>>2]&7));i=p;return}c[k>>2]=c[j>>2];iR(c[k>>2]|0,(c[g>>2]|0)+12|0,500)|0;kR((c[g>>2]|0)+12|0,0,500)|0;c[(c[g>>2]|0)+4>>2]=0;c[n>>2]=0;while(1){if((c[n>>2]|0)>>>0>=125)break;if((c[(c[k>>2]|0)+(c[n>>2]<<2)>>2]|0)!=0?(c[(c[k>>2]|0)+(c[n>>2]<<2)>>2]|0)!=((c[h>>2]|0)+1|0):0){c[m>>2]=(((c[(c[k>>2]|0)+(c[n>>2]<<2)>>2]|0)-1|0)>>>0)%125|0;o=(c[g>>2]|0)+4|0;c[o>>2]=(c[o>>2]|0)+1;while(1){if(!(c[(c[g>>2]|0)+12+(c[m>>2]<<2)>>2]|0))break;o=(c[m>>2]|0)+1|0;c[m>>2]=o;c[m>>2]=(c[m>>2]|0)>>>0>=125?0:o}c[(c[g>>2]|0)+12+(c[m>>2]<<2)>>2]=c[(c[k>>2]|0)+(c[n>>2]<<2)>>2]}c[n>>2]=(c[n>>2]|0)+1}i=p;return}function ij(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(!(c[d>>2]|0)){a=0;a=a&1;i=f;return a|0}a=(lj(c[d>>2]|0,c[e>>2]|0)|0)!=0;a=a&1;i=f;return a|0}function jj(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[c[b>>2]>>2]|0}function kj(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(!(c[b>>2]|0)){i=e;return}a:do if(c[(c[b>>2]|0)+8>>2]|0){c[d>>2]=0;while(1){if((c[d>>2]|0)>>>0>=125)break a;kj(c[(c[b>>2]|0)+12+(c[d>>2]<<2)>>2]|0);c[d>>2]=(c[d>>2]|0)+1}}while(0);Kd(c[b>>2]|0);i=e;return}function lj(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+12|0;j=l+8|0;e=l+4|0;k=l;c[h>>2]=a;c[j>>2]=b;c[j>>2]=(c[j>>2]|0)+-1;if((c[j>>2]|0)>>>0>=(c[c[h>>2]>>2]|0)>>>0){c[g>>2]=0;k=c[g>>2]|0;i=l;return k|0}while(1){if(!(c[(c[h>>2]|0)+8>>2]|0))break;c[e>>2]=((c[j>>2]|0)>>>0)/((c[(c[h>>2]|0)+8>>2]|0)>>>0)|0;c[j>>2]=((c[j>>2]|0)>>>0)%((c[(c[h>>2]|0)+8>>2]|0)>>>0)|0;c[h>>2]=c[(c[h>>2]|0)+12+(c[e>>2]<<2)>>2];if(!(c[h>>2]|0)){f=5;break}}if((f|0)==5){c[g>>2]=0;k=c[g>>2]|0;i=l;return k|0}e=c[j>>2]|0;if((c[c[h>>2]>>2]|0)>>>0<=4e3){c[g>>2]=((d[(c[h>>2]|0)+12+((e>>>0)/8|0)>>0]|0)&1<<(c[j>>2]&7)|0)!=0&1;k=c[g>>2]|0;i=l;return k|0}c[j>>2]=e+1;c[k>>2]=(e>>>0)%125|0;while(1){if(!(c[(c[h>>2]|0)+12+(c[k>>2]<<2)>>2]|0)){f=13;break}if((c[(c[h>>2]|0)+12+(c[k>>2]<<2)>>2]|0)==(c[j>>2]|0)){f=11;break}c[k>>2]=(((c[k>>2]|0)+1|0)>>>0)%125|0}if((f|0)==11){c[g>>2]=1;k=c[g>>2]|0;i=l;return k|0}else if((f|0)==13){c[g>>2]=0;k=c[g>>2]|0;i=l;return k|0}return 0}function mj(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+8>>2]|0}function nj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;g=e+12|0;f=e+8|0;d=e+4|0;c[g>>2]=a;c[f>>2]=b;c[d>>2]=oj(c[g>>2]|0,c[f>>2]|0,e)|0;if(!(c[d>>2]|0)){g=0;i=e;return g|0}g=c[(c[d>>2]|0)+8>>2]|0;i=e;return g|0}function oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;m=n+28|0;e=n+24|0;j=n+20|0;f=n+16|0;l=n+12|0;k=n+8|0;g=n+4|0;h=n;c[e>>2]=a;c[j>>2]=b;c[f>>2]=d;if(c[(c[e>>2]|0)+12>>2]|0){b=pj(c[j>>2]|0)|0;c[g>>2]=(b>>>0)%((c[c[e>>2]>>2]|0)>>>0)|0;c[h>>2]=(c[(c[e>>2]|0)+12>>2]|0)+(c[g>>2]<<3);c[l>>2]=c[(c[h>>2]|0)+4>>2];c[k>>2]=c[c[h>>2]>>2]}else{c[g>>2]=0;c[l>>2]=c[(c[e>>2]|0)+8>>2];c[k>>2]=c[(c[e>>2]|0)+4>>2]}c[c[f>>2]>>2]=c[g>>2];while(1){b=c[k>>2]|0;c[k>>2]=b+-1;if(!b){e=9;break}b=(Td(c[(c[l>>2]|0)+12>>2]|0,c[j>>2]|0)|0)==0;f=c[l>>2]|0;if(b){e=7;break}c[l>>2]=c[f>>2]}if((e|0)==7){c[m>>2]=f;m=c[m>>2]|0;i=n;return m|0}else if((e|0)==9){c[m>>2]=0;m=c[m>>2]|0;i=n;return m|0}return 0}function pj(b){b=b|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h+4|0;g=h;f=h+8|0;c[e>>2]=b;c[g>>2]=0;while(1){j=c[e>>2]|0;c[e>>2]=j+1;j=a[j>>0]|0;a[f>>0]=j;b=c[g>>2]|0;if(!(j&255))break;c[g>>2]=b<<3^c[g>>2]^(d[18477+(d[f>>0]|0)>>0]|0)}i=h;return b|0}function qj(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+128|0;w=A;l=A+108|0;m=A+104|0;n=A+100|0;o=A+96|0;u=A+92|0;j=A+88|0;v=A+84|0;t=A+80|0;B=A+64|0;r=A+40|0;q=A+24|0;y=A+20|0;s=A+16|0;p=A+112|0;z=A+12|0;x=A+8|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[s>>2]=0;h=(c[n>>2]|0)==1?20769:20788;c[y>>2]=h;c[B>>2]=h;c[B+4>>2]=20802;c[B+8>>2]=20804;c[B+12>>2]=0;c[q>>2]=c[m>>2];c[q+8>>2]=c[n>>2];c[q+12>>2]=0;c[q+4>>2]=c[o>>2];wj(q,3,B,0)|0;if(!(c[q+12>>2]|0)){c[t>>2]=(c[(c[m>>2]|0)+16>>2]|0)+(c[n>>2]<<4);if(!(c[(c[t>>2]|0)+4>>2]|0)){if((c[n>>2]|0)==1){B=(c[(c[(c[m>>2]|0)+16>>2]|0)+16+12>>2]|0)+78|0;b[B>>1]=e[B>>1]|1}c[l>>2]=0;B=c[l>>2]|0;i=A;return B|0}kg(c[(c[t>>2]|0)+4>>2]|0);do if(!(og(c[(c[t>>2]|0)+4>>2]|0)|0)){c[u>>2]=mg(c[(c[t>>2]|0)+4>>2]|0,0)|0;if(c[u>>2]|0){z=c[o>>2]|0;B=c[m>>2]|0;xj(z,B,ih(c[u>>2]|0)|0);break}else{c[s>>2]=1;k=11;break}}else k=11;while(0);a:do if((k|0)==11){c[j>>2]=0;while(1){if((c[j>>2]|0)>=5)break;ng(c[(c[t>>2]|0)+4>>2]|0,(c[j>>2]|0)+1|0,r+(c[j>>2]<<2)|0);c[j>>2]=(c[j>>2]|0)+1}c[c[(c[t>>2]|0)+12>>2]>>2]=c[r>>2];f=c[n>>2]|0;do if(c[r+16>>2]|0){j=c[r+16>>2]|0;if(!f){B=j&3;a[p>>0]=B;a[p>>0]=(d[p>>0]|0)==0?1:B;a[(c[m>>2]|0)+62>>0]=a[p>>0]|0;break}if((j|0)!=(d[(c[m>>2]|0)+62>>0]|0)){xj(c[o>>2]|0,c[m>>2]|0,20880);c[u>>2]=1;break a}}else{B=(c[(c[(c[m>>2]|0)+16>>2]|0)+(f<<4)+12>>2]|0)+78|0;b[B>>1]=e[B>>1]|4}while(0);a[(c[(c[t>>2]|0)+12>>2]|0)+77>>0]=a[(c[m>>2]|0)+62>>0]|0;if(!(c[(c[(c[t>>2]|0)+12>>2]|0)+80>>2]|0)){B=yj(c[r+8>>2]|0)|0;c[v>>2]=B;c[v>>2]=(c[v>>2]|0)==0?2e3:B;c[(c[(c[t>>2]|0)+12>>2]|0)+80>>2]=c[v>>2];zj(c[(c[t>>2]|0)+4>>2]|0,c[(c[(c[t>>2]|0)+12>>2]|0)+80>>2]|0)|0}a[(c[(c[t>>2]|0)+12>>2]|0)+76>>0]=c[r+4>>2];if(!(d[(c[(c[t>>2]|0)+12>>2]|0)+76>>0]|0))a[(c[(c[t>>2]|0)+12>>2]|0)+76>>0]=1;if((d[(c[(c[t>>2]|0)+12>>2]|0)+76>>0]|0)>4){xj(c[o>>2]|0,c[m>>2]|0,20948);c[u>>2]=1;break}if((c[n>>2]|0)==0?(c[r+4>>2]|0)>=4:0){B=(c[m>>2]|0)+24|0;c[B>>2]=c[B>>2]&-32769}B=c[m>>2]|0;y=c[y>>2]|0;c[w>>2]=c[(c[(c[m>>2]|0)+16>>2]|0)+(c[n>>2]<<4)>>2];c[w+4>>2]=y;c[z>>2]=Bh(B,20972,w)|0;c[x>>2]=c[(c[m>>2]|0)+288>>2];c[(c[m>>2]|0)+288>>2]=0;c[u>>2]=$e(c[m>>2]|0,c[z>>2]|0,140,q,0)|0;c[(c[m>>2]|0)+288>>2]=c[x>>2];if(!(c[u>>2]|0))c[u>>2]=c[q+12>>2];Sf(c[m>>2]|0,c[z>>2]|0);if(!(c[u>>2]|0))Aj(c[m>>2]|0,c[n>>2]|0)|0;if(a[(c[m>>2]|0)+65>>0]|0){c[u>>2]=7;zg(c[m>>2]|0)}if((c[u>>2]|0)!=0?(c[(c[m>>2]|0)+24>>2]&65536|0)==0:0)break;B=(c[(c[(c[m>>2]|0)+16>>2]|0)+(c[n>>2]<<4)+12>>2]|0)+78|0;b[B>>1]=e[B>>1]|1;c[u>>2]=0}while(0);if(c[s>>2]|0)Bj(c[(c[t>>2]|0)+4>>2]|0)|0}else c[u>>2]=c[q+12>>2];if((c[u>>2]|0)==7|(c[u>>2]|0)==3082)jh(c[m>>2]|0);c[l>>2]=c[u>>2];B=c[l>>2]|0;i=A;return B|0}function rj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=a;c[g>>2]=b;c[e>>2]=(c[(c[d>>2]|0)+16>>2]|0)+(c[g>>2]<<4);tj(c[(c[e>>2]|0)+12>>2]|0);if((c[g>>2]|0)==1){i=f;return}c[e>>2]=(c[(c[d>>2]|0)+16>>2]|0)+16;tj(c[(c[e>>2]|0)+12>>2]|0);i=f;return}function sj(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=(c[d>>2]|0)+24|0;c[a>>2]=c[a>>2]&-3;i=b;return}function tj(a){a=a|0;var d=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+64|0;l=k+48|0;h=k+32|0;j=k+16|0;d=k+8|0;f=k+4|0;g=k;c[l>>2]=a;c[f>>2]=c[l>>2];a=(c[f>>2]|0)+8|0;c[h>>2]=c[a>>2];c[h+4>>2]=c[a+4>>2];c[h+8>>2]=c[a+8>>2];c[h+12>>2]=c[a+12>>2];a=(c[f>>2]|0)+40|0;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];uj((c[f>>2]|0)+40|0);vj((c[f>>2]|0)+24|0);c[d>>2]=c[j+8>>2];while(1){if(!(c[d>>2]|0))break;Pf(0,c[(c[d>>2]|0)+8>>2]|0);c[d>>2]=c[c[d>>2]>>2]}vj(j);uj((c[f>>2]|0)+8|0);c[d>>2]=c[h+8>>2];while(1){if(!(c[d>>2]|0))break;c[g>>2]=c[(c[d>>2]|0)+8>>2];Qf(0,c[g>>2]|0);c[d>>2]=c[c[d>>2]>>2]}vj(h);vj((c[f>>2]|0)+56|0);c[(c[f>>2]|0)+72>>2]=0;if(!((e[(c[f>>2]|0)+78>>1]|0)&1)){i=k;return}l=(c[f>>2]|0)+4|0;c[l>>2]=(c[l>>2]|0)+1;l=(c[f>>2]|0)+78|0;b[l>>1]=(e[l>>1]|0)&-2;i=k;return}function uj(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+8>>2]=0;c[(c[d>>2]|0)+4>>2]=0;c[c[d>>2]>>2]=0;c[(c[d>>2]|0)+12>>2]=0;i=b;return}function vj(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=c[(c[b>>2]|0)+8>>2];c[(c[b>>2]|0)+8>>2]=0;Kd(c[(c[b>>2]|0)+12>>2]|0);c[(c[b>>2]|0)+12>>2]=0;c[c[b>>2]>>2]=0;while(1){if(!(c[d>>2]|0))break;c[e>>2]=c[c[d>>2]>>2];Kd(c[d>>2]|0);c[d>>2]=c[e>>2]}c[(c[b>>2]|0)+4>>2]=0;i=f;return}function wj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+48|0;j=r+40|0;s=r+36|0;k=r+28|0; +n=r+20|0;l=r+16|0;m=r+12|0;q=r+8|0;p=r+4|0;o=r;c[s>>2]=d;c[r+32>>2]=f;c[k>>2]=g;c[r+24>>2]=h;c[n>>2]=c[s>>2];c[l>>2]=c[c[n>>2]>>2];c[m>>2]=c[(c[n>>2]|0)+8>>2];d=(c[(c[(c[l>>2]|0)+16>>2]|0)+(c[m>>2]<<4)+12>>2]|0)+78|0;b[d>>1]=e[d>>1]&-5;if(a[(c[l>>2]|0)+65>>0]|0){Kj(c[n>>2]|0,c[c[k>>2]>>2]|0,0);c[j>>2]=1;s=c[j>>2]|0;i=r;return s|0}if(!(c[k>>2]|0)){c[j>>2]=0;s=c[j>>2]|0;i=r;return s|0}a:do if(!(c[(c[k>>2]|0)+4>>2]|0))Kj(c[n>>2]|0,c[c[k>>2]>>2]|0,0);else{if(zd(c[(c[k>>2]|0)+8>>2]|0,21114,7)|0){do if(c[c[k>>2]>>2]|0){if((c[(c[k>>2]|0)+8>>2]|0)!=0?(a[c[(c[k>>2]|0)+8>>2]>>0]|0)!=0:0)break;c[o>>2]=Fj(c[l>>2]|0,c[c[k>>2]>>2]|0,c[(c[(c[l>>2]|0)+16>>2]|0)+(c[m>>2]<<4)>>2]|0)|0;if(!(c[o>>2]|0))break a;if(Li(c[(c[k>>2]|0)+4>>2]|0,(c[o>>2]|0)+44|0)|0)break a;Kj(c[n>>2]|0,c[c[k>>2]>>2]|0,21122);break a}while(0);Kj(c[n>>2]|0,c[c[k>>2]>>2]|0,0);break}a[(c[l>>2]|0)+140+4>>0]=c[m>>2];s=Ki(c[(c[k>>2]|0)+4>>2]|0)|0;c[(c[l>>2]|0)+140>>2]=s;a[(c[l>>2]|0)+140+6>>0]=0;cf(c[l>>2]|0,c[(c[k>>2]|0)+8>>2]|0,-1,p,0)|0;c[q>>2]=c[(c[l>>2]|0)+52>>2];a[(c[l>>2]|0)+140+4>>0]=0;do if(0!=(c[q>>2]|0)?(a[(c[l>>2]|0)+140+6>>0]|0)==0:0){c[(c[n>>2]|0)+12>>2]=c[q>>2];if((c[q>>2]|0)==7){jh(c[l>>2]|0);break}if((c[q>>2]|0)!=9?(c[q>>2]&255|0)!=6:0){q=c[n>>2]|0;s=c[c[k>>2]>>2]|0;Kj(q,s,bf(c[l>>2]|0)|0)}}while(0);Yd(c[p>>2]|0)|0}while(0);c[j>>2]=0;s=c[j>>2]|0;i=r;return s|0}function xj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e+8|0;h=e+4|0;g=e;c[f>>2]=a;c[h>>2]=b;c[g>>2]=d;Sf(c[h>>2]|0,c[c[f>>2]>>2]|0);d=nh(c[h>>2]|0,c[g>>2]|0)|0;c[c[f>>2]>>2]=d;i=e;return}function yj(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;a=c[d>>2]|0;do if((c[d>>2]|0)<0)if((a|0)==-2147483648){c[b>>2]=2147483647;break}else{c[b>>2]=0-(c[d>>2]|0);break}else c[b>>2]=a;while(0);i=e;return c[b>>2]|0}function zj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;g=d+8|0;e=d+4|0;f=d;c[g>>2]=a;c[e>>2]=b;c[f>>2]=c[(c[g>>2]|0)+4>>2];kg(c[g>>2]|0);Ij(c[c[f>>2]>>2]|0,c[e>>2]|0);i=d;return 0}function Aj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;l=n;d=n+40|0;e=n+36|0;f=n+32|0;k=n+24|0;g=n+16|0;m=n+12|0;j=n+8|0;h=n+4|0;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[(c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+12>>2]|0)+24+8>>2];while(1){if(!(c[g>>2]|0))break;c[h>>2]=c[(c[g>>2]|0)+8>>2];Cj(c[h>>2]|0);c[g>>2]=c[c[g>>2]>>2]}c[k>>2]=c[e>>2];c[k+4>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)>>2];if(!(pi(c[e>>2]|0,21027,c[k+4>>2]|0)|0)){c[d>>2]=1;m=c[d>>2]|0;i=n;return m|0}h=c[e>>2]|0;c[l>>2]=c[k+4>>2];c[m>>2]=Bh(h,21040,l)|0;if(!(c[m>>2]|0))c[j>>2]=7;else{c[j>>2]=$e(c[e>>2]|0,c[m>>2]|0,141,k,0)|0;Sf(c[e>>2]|0,c[m>>2]|0)}if((c[j>>2]|0)==7)jh(c[e>>2]|0);c[d>>2]=c[j>>2];m=c[d>>2]|0;i=n;return m|0}function Bj(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;kg(c[b>>2]|0);c[d>>2]=Kg(c[b>>2]|0,0)|0;if(c[d>>2]|0){d=c[d>>2]|0;i=e;return d|0}c[d>>2]=Jg(c[b>>2]|0,0)|0;d=c[d>>2]|0;i=e;return d|0}function Cj(a){a=a|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+12|0;h=l+16|0;g=l+8|0;k=l+4|0;j=l;c[f>>2]=a;b[h>>1]=b[5446]|0;b[h+2>>1]=b[5447]|0;b[h+4>>1]=b[5448]|0;b[h+6>>1]=b[5449]|0;b[h+8>>1]=b[5450]|0;c[g>>2]=c[(c[f>>2]|0)+8>>2];if(5<(e[(c[f>>2]|0)+50>>1]|0))a=5;else a=e[(c[f>>2]|0)+50>>1]|0;c[k>>2]=a;b[c[g>>2]>>1]=b[(c[(c[f>>2]|0)+12>>2]|0)+38>>1]|0;if((b[c[g>>2]>>1]|0)<33)b[c[g>>2]>>1]=33;iR((c[g>>2]|0)+2|0,h|0,c[k>>2]<<1|0)|0;c[j>>2]=(c[k>>2]|0)+1;while(1){if((c[j>>2]|0)>(e[(c[f>>2]|0)+50>>1]|0))break;b[(c[g>>2]|0)+(c[j>>2]<<1)>>1]=23;c[j>>2]=(c[j>>2]|0)+1}if(!(d[(c[f>>2]|0)+54>>0]|0)){i=l;return}b[(c[g>>2]|0)+(e[(c[f>>2]|0)+50>>1]<<1)>>1]=0;i=l;return}function Dj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+112|0;j=s+96|0;t=s+92|0;k=s+84|0;p=s+76|0;o=s+72|0;q=s+68|0;r=s+64|0;l=s+60|0;n=s+56|0;m=s;c[t>>2]=d;c[s+88>>2]=f;c[k>>2]=g;c[s+80>>2]=h;c[p>>2]=c[t>>2];if(((c[k>>2]|0)!=0?(c[c[k>>2]>>2]|0)!=0:0)?(c[(c[k>>2]|0)+8>>2]|0)!=0:0){c[q>>2]=pi(c[c[p>>2]>>2]|0,c[c[k>>2]>>2]|0,c[(c[p>>2]|0)+4>>2]|0)|0;if(!(c[q>>2]|0)){c[j>>2]=0;t=c[j>>2]|0;i=s;return t|0}do if(c[(c[k>>2]|0)+4>>2]|0)if(!(Td(c[c[k>>2]>>2]|0,c[(c[k>>2]|0)+4>>2]|0)|0)){c[o>>2]=Ej(c[q>>2]|0)|0;break}else{c[o>>2]=Fj(c[c[p>>2]>>2]|0,c[(c[k>>2]|0)+4>>2]|0,c[(c[p>>2]|0)+4>>2]|0)|0;break}else c[o>>2]=0;while(0);c[r>>2]=c[(c[k>>2]|0)+8>>2];if(c[o>>2]|0){c[l>>2]=0;c[n>>2]=(e[(c[o>>2]|0)+50>>1]|0)+1;t=(c[o>>2]|0)+55|0;a[t>>0]=a[t>>0]&-5;Gj(c[r>>2]|0,c[n>>2]|0,c[l>>2]|0,c[(c[o>>2]|0)+8>>2]|0,c[o>>2]|0);if(!(c[(c[o>>2]|0)+36>>2]|0))b[(c[q>>2]|0)+38>>1]=b[c[(c[o>>2]|0)+8>>2]>>1]|0}else{b[m+48>>1]=b[(c[q>>2]|0)+40>>1]|0;Gj(c[r>>2]|0,1,0,(c[q>>2]|0)+38|0,m);b[(c[q>>2]|0)+40>>1]=b[m+48>>1]|0}c[j>>2]=0;t=c[j>>2]|0;i=s;return t|0}c[j>>2]=0;t=c[j>>2]|0;i=s;return t|0}function Ej(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[f>>2]=b;c[d>>2]=c[(c[f>>2]|0)+8>>2];while(1){if(!(c[d>>2]|0)){b=5;break}if(!((a[(c[d>>2]|0)+55>>0]&3|0)==2^1)){b=5;break}c[d>>2]=c[(c[d>>2]|0)+20>>2]}if((b|0)==5){i=e;return c[d>>2]|0}return 0}function Fj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;e=n+24|0;f=n+20|0;g=n+16|0;k=n+12|0;h=n+8|0;j=n+4|0;l=n;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[k>>2]=0;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0)){m=7;break}b=c[h>>2]|0;c[j>>2]=(c[h>>2]|0)<2?b^1:b;c[l>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[j>>2]<<4)+12>>2];if(!((c[g>>2]|0)!=0?(Td(c[g>>2]|0,c[(c[(c[e>>2]|0)+16>>2]|0)+(c[j>>2]<<4)>>2]|0)|0)!=0:0))m=5;if((m|0)==5?(m=0,c[k>>2]=nj((c[l>>2]|0)+24|0,c[f>>2]|0)|0,(c[k>>2]|0)!=0):0){m=7;break}c[h>>2]=(c[h>>2]|0)+1}if((m|0)==7){i=n;return c[k>>2]|0}return 0}function Gj(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+48|0;r=q+32|0;j=q+28|0;k=q+20|0;o=q+16|0;p=q+12|0;l=q+8|0;m=q+4|0;n=q;c[r>>2]=d;c[j>>2]=e;c[q+24>>2]=f;c[k>>2]=g;c[o>>2]=h;c[p>>2]=c[r>>2];c[m>>2]=0;while(1){if(!(a[c[p>>2]>>0]|0))break;if((c[m>>2]|0)>=(c[j>>2]|0))break;c[n>>2]=0;while(1){r=a[c[p>>2]>>0]|0;c[l>>2]=r;if(!((r|0)>=48?(c[l>>2]|0)<=57:0))break;c[n>>2]=((c[n>>2]|0)*10|0)+(c[l>>2]|0)-48;c[p>>2]=(c[p>>2]|0)+1}r=Hj(c[n>>2]|0,0)|0;b[(c[k>>2]|0)+(c[m>>2]<<1)>>1]=r;if((a[c[p>>2]>>0]|0)==32)c[p>>2]=(c[p>>2]|0)+1;c[m>>2]=(c[m>>2]|0)+1}r=(c[o>>2]|0)+55|0;a[r>>0]=a[r>>0]&-5;r=(c[o>>2]|0)+55|0;a[r>>0]=a[r>>0]&-65;a:while(1){if(!(a[c[p>>2]>>0]|0))break;do if(Ze(21081,c[p>>2]|0)|0){r=(Ze(21092,c[p>>2]|0)|0)==0;j=c[p>>2]|0;if(r){r=Ki(j+3|0)|0;r=Hj(r,((r|0)<0)<<31>>31)|0;b[(c[o>>2]|0)+48>>1]=r;break}if(!(Ze(21102,j)|0)){r=(c[o>>2]|0)+55|0;a[r>>0]=a[r>>0]&-65|64}}else{r=(c[o>>2]|0)+55|0;a[r>>0]=a[r>>0]&-5|4}while(0);while(1){if(!(a[c[p>>2]>>0]|0))break;if((a[c[p>>2]>>0]|0)==32)break;c[p>>2]=(c[p>>2]|0)+1}while(1){if((a[c[p>>2]>>0]|0)!=32)continue a;c[p>>2]=(c[p>>2]|0)+1}}i=q;return}function Hj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h+10|0;f=h;g=h+8|0;j=f;c[j>>2]=a;c[j+4>>2]=d;b[g>>1]=40;d=f;a=c[d+4>>2]|0;a:do if(a>>>0<0|(a|0)==0&(c[d>>2]|0)>>>0<8){j=f;d=c[j+4>>2]|0;if(d>>>0<0|(d|0)==0&(c[j>>2]|0)>>>0<2){b[e>>1]=0;j=b[e>>1]|0;i=h;return j|0}else while(1){j=f;d=c[j+4>>2]|0;if(!(d>>>0<0|(d|0)==0&(c[j>>2]|0)>>>0<8))break a;b[g>>1]=(b[g>>1]|0)-10;d=f;d=lR(c[d>>2]|0,c[d+4>>2]|0,1)|0;j=f;c[j>>2]=d;c[j+4>>2]=C}}else{while(1){j=f;d=c[j+4>>2]|0;if(!(d>>>0>0|(d|0)==0&(c[j>>2]|0)>>>0>255))break;b[g>>1]=(b[g>>1]|0)+40;d=f;d=hR(c[d>>2]|0,c[d+4>>2]|0,4)|0;j=f;c[j>>2]=d;c[j+4>>2]=C}while(1){j=f;d=c[j+4>>2]|0;if(!(d>>>0>0|(d|0)==0&(c[j>>2]|0)>>>0>15))break a;b[g>>1]=(b[g>>1]|0)+10;d=f;d=hR(c[d>>2]|0,c[d+4>>2]|0,1)|0;j=f;c[j>>2]=d;c[j+4>>2]=C}}while(0);b[e>>1]=(b[10876+((c[f>>2]&7)<<1)>>1]|0)+(b[g>>1]|0)-10;j=b[e>>1]|0;i=h;return j|0}function Ij(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;Jj(c[(c[f>>2]|0)+212>>2]|0,c[e>>2]|0);i=d;return}function Jj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;c[(c[f>>2]|0)+16>>2]=c[e>>2];e=c[33]|0;b=c[(c[f>>2]|0)+44>>2]|0;a=Zi(c[f>>2]|0)|0;Rb[e&255](b,a);i=d;return}function Kj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;m=o+8|0;l=o;g=o+32|0;h=o+28|0;j=o+24|0;k=o+20|0;n=o+16|0;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;c[k>>2]=c[c[g>>2]>>2];if((a[(c[k>>2]|0)+65>>0]|0)==0?(c[(c[k>>2]|0)+24>>2]&65536|0)==0:0){if(!(c[h>>2]|0))c[h>>2]=21139;e=c[k>>2]|0;c[l>>2]=c[h>>2];c[n>>2]=Bh(e,21141,l)|0;if(c[j>>2]|0){e=c[k>>2]|0;f=c[j>>2]|0;c[m>>2]=c[n>>2];c[m+4>>2]=f;c[n>>2]=Bh(e,21172,m)|0}Sf(c[k>>2]|0,c[c[(c[g>>2]|0)+4>>2]>>2]|0);c[c[(c[g>>2]|0)+4>>2]>>2]=c[n>>2]}if(d[(c[k>>2]|0)+65>>0]|0){f=7;e=c[g>>2]|0;e=e+12|0;c[e>>2]=f;i=o;return}f=Lj(109430)|0;e=c[g>>2]|0;e=e+12|0;c[e>>2]=f;i=o;return}function Lj(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b;e=b+8|0;c[e>>2]=a;e=c[e>>2]|0;a=(kf()|0)+20|0;c[d>>2]=e;c[d+4>>2]=a;Rd(11,21180,d);i=b;return 11}function Mj(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;n=m+12|0;h=m+16|0;j=m+8|0;k=m+4|0;l=m;c[n>>2]=b;a[h>>0]=e;c[j>>2]=f;c[k>>2]=g;g=c[n>>2]|0;if(c[j>>2]|0)c[l>>2]=Nj(g,c[j>>2]|0,c[k>>2]|0)|0;else c[l>>2]=c[g+8>>2];if(!(c[l>>2]|0)){n=c[l>>2]|0;i=m;return n|0}c[l>>2]=(c[l>>2]|0)+(((d[h>>0]|0)-1|0)*20|0);n=c[l>>2]|0;i=m;return n|0}function Nj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;f=l+20|0;g=l+16|0;m=l+12|0;j=l+8|0;h=l+4|0;k=l;c[f>>2]=b;c[g>>2]=d;c[m>>2]=e;c[j>>2]=nj((c[f>>2]|0)+432|0,c[g>>2]|0)|0;if(!(0==(c[j>>2]|0)&(c[m>>2]|0)!=0)){m=c[j>>2]|0;i=l;return m|0}c[h>>2]=If(c[g>>2]|0)|0;c[j>>2]=ph(c[f>>2]|0,60+(c[h>>2]|0)+1|0,0)|0;if(!(c[j>>2]|0)){m=c[j>>2]|0;i=l;return m|0}c[k>>2]=0;c[c[j>>2]>>2]=(c[j>>2]|0)+60;a[(c[j>>2]|0)+4>>0]=1;c[(c[j>>2]|0)+20>>2]=(c[j>>2]|0)+60;a[(c[j>>2]|0)+20+4>>0]=2;c[(c[j>>2]|0)+40>>2]=(c[j>>2]|0)+60;a[(c[j>>2]|0)+40+4>>0]=3;iR(c[c[j>>2]>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;a[(c[c[j>>2]>>2]|0)+(c[h>>2]|0)>>0]=0;c[k>>2]=Oj((c[f>>2]|0)+432|0,c[c[j>>2]>>2]|0,c[j>>2]|0)|0;if(!(c[k>>2]|0)){m=c[j>>2]|0;i=l;return m|0}jh(c[f>>2]|0);Sf(c[f>>2]|0,c[k>>2]|0);c[j>>2]=0;m=c[j>>2]|0;i=l;return m|0}function Oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;k=n+28|0;l=n+24|0;e=n+20|0;f=n+16|0;h=n+12|0;g=n+8|0;m=n+4|0;j=n;c[l>>2]=a;c[e>>2]=b;c[f>>2]=d;c[g>>2]=oj(c[l>>2]|0,c[e>>2]|0,h)|0;if(c[g>>2]|0){c[j>>2]=c[(c[g>>2]|0)+8>>2];if(!(c[f>>2]|0))Pj(c[l>>2]|0,c[g>>2]|0,c[h>>2]|0);else{c[(c[g>>2]|0)+8>>2]=c[f>>2];c[(c[g>>2]|0)+12>>2]=c[e>>2]}c[k>>2]=c[j>>2];m=c[k>>2]|0;i=n;return m|0}if(!(c[f>>2]|0)){c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}c[m>>2]=_f(16,0)|0;if(!(c[m>>2]|0)){c[k>>2]=c[f>>2];m=c[k>>2]|0;i=n;return m|0}c[(c[m>>2]|0)+12>>2]=c[e>>2];c[(c[m>>2]|0)+8>>2]=c[f>>2];b=(c[l>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+1;if(((c[(c[l>>2]|0)+4>>2]|0)>>>0>=10?(c[(c[l>>2]|0)+4>>2]|0)>>>0>c[c[l>>2]>>2]<<1>>>0:0)?(Qj(c[l>>2]|0,c[(c[l>>2]|0)+4>>2]<<1)|0)!=0:0){b=pj(c[e>>2]|0)|0;c[h>>2]=(b>>>0)%((c[c[l>>2]>>2]|0)>>>0)|0}if(c[(c[l>>2]|0)+12>>2]|0)e=(c[(c[l>>2]|0)+12>>2]|0)+(c[h>>2]<<3)|0;else e=0;Rj(c[l>>2]|0,e,c[m>>2]|0);c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}function Pj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;b=c[c[f>>2]>>2]|0;if(c[(c[f>>2]|0)+4>>2]|0)c[c[(c[f>>2]|0)+4>>2]>>2]=b;else c[(c[e>>2]|0)+8>>2]=b;if(c[c[f>>2]>>2]|0)c[(c[c[f>>2]>>2]|0)+4>>2]=c[(c[f>>2]|0)+4>>2];if(c[(c[e>>2]|0)+12>>2]|0){c[h>>2]=(c[(c[e>>2]|0)+12>>2]|0)+(c[g>>2]<<3);if((c[(c[h>>2]|0)+4>>2]|0)==(c[f>>2]|0))c[(c[h>>2]|0)+4>>2]=c[c[f>>2]>>2];h=c[h>>2]|0;c[h>>2]=(c[h>>2]|0)+-1}Kd(c[f>>2]|0);h=(c[e>>2]|0)+4|0;c[h>>2]=(c[h>>2]|0)+-1;if(c[(c[e>>2]|0)+4>>2]|0){i=j;return}vj(c[e>>2]|0);i=j;return}function Qj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;d=l+24|0;e=l+20|0;f=l+16|0;j=l+12|0;g=l+8|0;k=l+4|0;h=l;c[e>>2]=a;c[f>>2]=b;c[f>>2]=c[f>>2]<<3>>>0>1024?128:b;if((c[f>>2]|0)==(c[c[e>>2]>>2]|0)){c[d>>2]=0;a=c[d>>2]|0;i=l;return a|0}Sj();c[j>>2]=_f(c[f>>2]<<3,0)|0;Tj();if(!(c[j>>2]|0)){c[d>>2]=0;a=c[d>>2]|0;i=l;return a|0}Kd(c[(c[e>>2]|0)+12>>2]|0);c[(c[e>>2]|0)+12>>2]=c[j>>2];a=(($f(c[j>>2]|0)|0)>>>0)/8|0;c[f>>2]=a;c[c[e>>2]>>2]=a;kR(c[j>>2]|0,0,c[f>>2]<<3|0)|0;c[g>>2]=c[(c[e>>2]|0)+8>>2];c[(c[e>>2]|0)+8>>2]=0;while(1){if(!(c[g>>2]|0))break;a=pj(c[(c[g>>2]|0)+12>>2]|0)|0;c[h>>2]=(a>>>0)%((c[f>>2]|0)>>>0)|0;c[k>>2]=c[c[g>>2]>>2];Rj(c[e>>2]|0,(c[j>>2]|0)+(c[h>>2]<<3)|0,c[g>>2]|0);c[g>>2]=c[k>>2]}c[d>>2]=1;a=c[d>>2]|0;i=l;return a|0}function Rj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+12|0;e=j+8|0;g=j+4|0;h=j;c[f>>2]=a;c[e>>2]=b;c[g>>2]=d;if(c[e>>2]|0){if(c[c[e>>2]>>2]|0)b=c[(c[e>>2]|0)+4>>2]|0;else b=0;c[h>>2]=b;d=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+1;c[(c[e>>2]|0)+4>>2]=c[g>>2]}else c[h>>2]=0;if(!(c[h>>2]|0)){c[c[g>>2]>>2]=c[(c[f>>2]|0)+8>>2];if(c[(c[f>>2]|0)+8>>2]|0)c[(c[(c[f>>2]|0)+8>>2]|0)+4>>2]=c[g>>2];c[(c[g>>2]|0)+4>>2]=0;c[(c[f>>2]|0)+8>>2]=c[g>>2];i=j;return}c[c[g>>2]>>2]=c[h>>2];c[(c[g>>2]|0)+4>>2]=c[(c[h>>2]|0)+4>>2];b=c[g>>2]|0;if(c[(c[h>>2]|0)+4>>2]|0)c[c[(c[h>>2]|0)+4>>2]>>2]=b;else c[(c[f>>2]|0)+8>>2]=b;c[(c[h>>2]|0)+4>>2]=c[g>>2];i=j;return}function Sj(){if(!(c[421]|0))return;Vb[c[1684>>2]&255]();return}function Tj(){if(!(c[422]|0))return;Vb[c[1688>>2]&255]();return}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,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;n=o+4|0;m=o;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=(c[h>>2]|0)<(c[k>>2]|0)?c[h>>2]|0:c[k>>2]|0;c[n>>2]=vQ(c[j>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;if(c[n>>2]|0){n=c[n>>2]|0;i=o;return n|0}if(((c[g>>2]|0)!=0?(Tt((c[j>>2]|0)+(c[m>>2]|0)|0,(c[h>>2]|0)-(c[m>>2]|0)|0)|0)!=0:0)?(Tt((c[l>>2]|0)+(c[m>>2]|0)|0,(c[k>>2]|0)-(c[m>>2]|0)|0)|0)!=0:0){n=c[n>>2]|0;i=o;return n|0}c[n>>2]=(c[h>>2]|0)-(c[k>>2]|0);n=c[n>>2]|0;i=o;return n|0}function Vj(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,j=0,k=0,l=0,m=0;k=i;i=i+32|0;g=k+16|0;m=k+12|0;h=k+8|0;l=k+4|0;j=k;c[k+20>>2]=a;c[g>>2]=b;c[m>>2]=d;c[h>>2]=e;c[l>>2]=f;c[j>>2]=zd(c[m>>2]|0,c[l>>2]|0,(c[g>>2]|0)<(c[h>>2]|0)?c[g>>2]|0:c[h>>2]|0)|0;if(c[j>>2]|0){m=c[j>>2]|0;i=k;return m|0}c[j>>2]=(c[g>>2]|0)-(c[h>>2]|0);m=c[j>>2]|0;i=k;return m|0}function Wj(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,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;S=i;i=i+160|0;K=S+32|0;J=S+24|0;I=S+16|0;H=S+8|0;m=S+140|0;T=S+136|0;n=S+132|0;o=S+128|0;p=S+124|0;q=S+120|0;r=S+116|0;G=S+112|0;v=S+108|0;Q=S+104|0;M=S+100|0;t=S+144|0;l=S+96|0;O=S+92|0;u=S+88|0;x=S+84|0;y=S+80|0;k=S;F=S+76|0;D=S+72|0;P=S+68|0;E=S+64|0;s=S+60|0;N=S+56|0;A=S+52|0;z=S+48|0;w=S+44|0;B=S+40|0;L=S+36|0;c[T>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=j;c[G>>2]=0;c[v>>2]=c[c[o>>2]>>2];c[Q>>2]=c[T>>2];c[l>>2]=If(c[n>>2]|0)|0;a:do if(((c[v>>2]&64|0)!=0|(c[5]|0)!=0)&(c[l>>2]|0)>=5?(vQ(c[n>>2]|0,26902,5)|0)==0:0){c[y>>2]=0;e=(c[l>>2]|0)+2|0;T=k;c[T>>2]=e;c[T+4>>2]=((e|0)<0)<<31>>31;c[v>>2]=c[v>>2]|64;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[l>>2]|0))break;e=(a[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0)==38&1;T=k;e=gR(c[T>>2]|0,c[T+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;T=k;c[T>>2]=e;c[T+4>>2]=C;c[x>>2]=(c[x>>2]|0)+1}T=k;c[M>>2]=Jd(c[T>>2]|0,c[T+4>>2]|0)|0;if(!(c[M>>2]|0)){c[m>>2]=7;T=c[m>>2]|0;i=S;return T|0}c[x>>2]=5;do if((a[(c[n>>2]|0)+5>>0]|0)==47?(a[(c[n>>2]|0)+6>>0]|0)==47:0){c[x>>2]=7;while(1){if(a[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0)k=(a[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0)!=47;else k=0;l=c[x>>2]|0;if(!k)break;c[x>>2]=l+1}if((l|0)!=7){if((c[x>>2]|0)==16?(vQ(26908,(c[n>>2]|0)+7|0,9)|0)==0:0)break;T=(c[n>>2]|0)+7|0;c[H>>2]=(c[x>>2]|0)-7;c[H+4>>2]=T;T=Od(26918,H)|0;c[c[r>>2]>>2]=T;c[G>>2]=1;break a}}while(0);c[u>>2]=0;b:while(1){T=a[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0;a[t>>0]=T;if(!(T<<24>>24))break;if((a[t>>0]|0)==35)break;c[x>>2]=(c[x>>2]|0)+1;do if(((a[t>>0]|0)==37?(d[19267+(d[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0)>>0]&8|0)!=0:0)?(d[19267+(d[(c[n>>2]|0)+((c[x>>2]|0)+1)>>0]|0)>>0]&8|0)!=0:0){T=c[x>>2]|0;c[x>>2]=T+1;c[F>>2]=((Gi(a[(c[n>>2]|0)+T>>0]|0)|0)&255)<<4;T=c[x>>2]|0;c[x>>2]=T+1;T=(Gi(a[(c[n>>2]|0)+T>>0]|0)|0)&255;c[F>>2]=(c[F>>2]|0)+T;if(c[F>>2]|0){a[t>>0]=c[F>>2];break}while(1){T=a[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0;a[t>>0]=T;if(!(T<<24>>24))continue b;if((a[t>>0]|0)==35)continue b;if((c[u>>2]|0)==0?(a[t>>0]|0)==63:0)continue b;if((c[u>>2]|0)==1){if((a[t>>0]|0)==61)continue b;if((a[t>>0]|0)==38)continue b}if((c[u>>2]|0)==2?(a[t>>0]|0)==38:0)continue b;c[x>>2]=(c[x>>2]|0)+1}}else R=37;while(0);c:do if((R|0)==37){R=0;do if((c[u>>2]|0)==1){if((a[t>>0]|0)!=38?(a[t>>0]|0)!=61:0)break;if(!(a[(c[M>>2]|0)+((c[y>>2]|0)-1)>>0]|0))while(1){if(!(a[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0))continue b;if((a[(c[n>>2]|0)+(c[x>>2]|0)>>0]|0)==35)continue b;if((a[(c[n>>2]|0)+((c[x>>2]|0)-1)>>0]|0)==38)continue b;c[x>>2]=(c[x>>2]|0)+1}else{if((a[t>>0]|0)==38){T=c[y>>2]|0;c[y>>2]=T+1;a[(c[M>>2]|0)+T>>0]=0}else c[u>>2]=2;a[t>>0]=0;break c}}while(0);if(!((c[u>>2]|0)==0?(a[t>>0]|0)==63:0)){if((c[u>>2]|0)!=2)break;if((a[t>>0]|0)!=38)break}a[t>>0]=0;c[u>>2]=1}while(0);H=a[t>>0]|0;T=c[y>>2]|0;c[y>>2]=T+1;a[(c[M>>2]|0)+T>>0]=H}if((c[u>>2]|0)==1){T=c[y>>2]|0;c[y>>2]=T+1;a[(c[M>>2]|0)+T>>0]=0}T=c[y>>2]|0;c[y>>2]=T+1;a[(c[M>>2]|0)+T>>0]=0;T=c[y>>2]|0;c[y>>2]=T+1;a[(c[M>>2]|0)+T>>0]=0;T=(If(c[M>>2]|0)|0)+1|0;c[O>>2]=(c[M>>2]|0)+T;while(1){if(!(a[c[O>>2]>>0]|0)){R=84;break a}c[D>>2]=If(c[O>>2]|0)|0;c[P>>2]=(c[O>>2]|0)+((c[D>>2]|0)+1);c[E>>2]=If(c[P>>2]|0)|0;if((c[D>>2]|0)==3?(vQ(26946,c[O>>2]|0,3)|0)==0:0)c[Q>>2]=c[P>>2];else{c[s>>2]=0;c[N>>2]=0;c[A>>2]=0;c[z>>2]=0;if((c[D>>2]|0)==5?(vQ(26950,c[O>>2]|0,5)|0)==0:0){c[A>>2]=393216;c[s>>2]=4912;c[z>>2]=c[A>>2];c[N>>2]=26950}if((c[D>>2]|0)==4?(vQ(26956,c[O>>2]|0,4)|0)==0:0){c[A>>2]=135;c[s>>2]=4936;c[z>>2]=c[A>>2]&c[v>>2];c[N>>2]=26961}if(c[s>>2]|0){c[B>>2]=0;c[w>>2]=0;while(1){if(!(c[(c[s>>2]|0)+(c[w>>2]<<3)>>2]|0))break;c[L>>2]=c[(c[s>>2]|0)+(c[w>>2]<<3)>>2];T=c[E>>2]|0;if((T|0)==(If(c[L>>2]|0)|0)?0==(vQ(c[P>>2]|0,c[L>>2]|0,c[E>>2]|0)|0):0){R=73;break}c[w>>2]=(c[w>>2]|0)+1}if((R|0)==73){R=0;c[B>>2]=c[(c[s>>2]|0)+(c[w>>2]<<3)+4>>2]}if(!(c[B>>2]|0)){R=76;break}if((c[B>>2]&-129|0)>(c[z>>2]|0)){R=78;break}c[v>>2]=c[v>>2]&~c[A>>2]|c[B>>2]}}c[O>>2]=(c[P>>2]|0)+((c[E>>2]|0)+1)}if((R|0)==76){T=c[P>>2]|0;c[I>>2]=c[N>>2];c[I+4>>2]=T;T=Od(26968,I)|0;c[c[r>>2]>>2]=T;c[G>>2]=1;break}else if((R|0)==78){T=c[P>>2]|0;c[J>>2]=c[N>>2];c[J+4>>2]=T;T=Od(26988,J)|0;c[c[r>>2]>>2]=T;c[G>>2]=3;break}}else R=81;while(0);do if((R|0)==81){T=(c[l>>2]|0)+2|0;c[M>>2]=Jd(T,((T|0)<0)<<31>>31)|0;if(c[M>>2]|0){iR(c[M>>2]|0,c[n>>2]|0,c[l>>2]|0)|0;a[(c[M>>2]|0)+(c[l>>2]|0)>>0]=0;a[(c[M>>2]|0)+((c[l>>2]|0)+1)>>0]=0;c[v>>2]=c[v>>2]&-65;R=84;break}c[m>>2]=7;T=c[m>>2]|0;i=S;return T|0}while(0);if((R|0)==84?(T=Cd(c[Q>>2]|0)|0,c[c[p>>2]>>2]=T,(c[c[p>>2]>>2]|0)==0):0){c[K>>2]=c[Q>>2];T=Od(27012,K)|0;c[c[r>>2]>>2]=T;c[G>>2]=1}if(c[G>>2]|0){Kd(c[M>>2]|0);c[M>>2]=0}c[c[o>>2]>>2]=c[v>>2];c[c[q>>2]>>2]=c[M>>2];c[m>>2]=c[G>>2];T=c[m>>2]|0;i=S;return T|0}function Xj(f,g,h,j,k,l){f=f|0;g=g|0;h=h|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;I=i;i=i+192|0;C=I+76|0;m=I+72|0;n=I+68|0;o=I+64|0;D=I+60|0;p=I+56|0;q=I+52|0;F=I+48|0;E=I+44|0;H=I+36|0;x=I+180|0;z=I+80|0;u=I+32|0;t=I+28|0;v=I+24|0;w=I+20|0;A=I+16|0;s=I+12|0;y=I+8|0;r=I+4|0;G=I;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[D>>2]=j;c[p>>2]=k;c[q>>2]=l;c[F>>2]=0;c[I+40>>2]=0;c[H>>2]=0;if(!(c[n>>2]|0))h=1;else h=(a[c[n>>2]>>0]|0)==0;c[u>>2]=h&1;if((c[n>>2]|0)!=0?(yQ(c[n>>2]|0,26694)|0)==0:0)h=1;else B=5;do if((B|0)==5){if((c[u>>2]|0)!=0?(Sq(c[o>>2]|0)|0)!=0:0){h=1;break}h=(c[q>>2]&128|0)!=0}while(0);c[t>>2]=h&1;if(c[t>>2]|0)c[p>>2]=c[p>>2]|2;if((c[q>>2]&256|0)!=0?(c[t>>2]|0)!=0|(c[u>>2]|0)!=0:0)c[q>>2]=c[q>>2]&-257|512;c[E>>2]=ig(48,0)|0;if(!(c[E>>2]|0)){c[C>>2]=7;H=c[C>>2]|0;i=I;return H|0}a[(c[E>>2]|0)+8>>0]=0;c[c[E>>2]>>2]=c[o>>2];c[(c[E>>2]|0)+32>>2]=c[E>>2];c[(c[E>>2]|0)+32+4>>2]=1;do if(!(c[u>>2]|0)){if((c[t>>2]|0)!=0?(c[q>>2]&64|0)==0:0)break;if(c[q>>2]&131072){c[v>>2]=(If(c[n>>2]|0)|0)+1;c[w>>2]=(c[(c[m>>2]|0)+8>>2]|0)+1;u=(c[w>>2]|0)>(c[v>>2]|0)?c[w>>2]|0:c[v>>2]|0;c[A>>2]=_f(u,((u|0)<0)<<31>>31)|0;a[(c[E>>2]|0)+9>>0]=1;if(!(c[A>>2]|0)){Kd(c[E>>2]|0);c[C>>2]=7;H=c[C>>2]|0;i=I;return H|0}if(!(c[t>>2]|0)){c[H>>2]=Tq(c[m>>2]|0,c[n>>2]|0,c[w>>2]|0,c[A>>2]|0)|0;if(c[H>>2]|0){Kd(c[A>>2]|0);Kd(c[E>>2]|0);c[C>>2]=c[H>>2];H=c[C>>2]|0;i=I;return H|0}}else iR(c[A>>2]|0,c[n>>2]|0,c[v>>2]|0)|0;c[F>>2]=c[1208];while(1){if(!(c[F>>2]|0))break;w=c[A>>2]|0;if(0==(yQ(w,Fi(c[c[F>>2]>>2]|0,0)|0)|0)?(w=ti(c[c[F>>2]>>2]|0)|0,(w|0)==(c[m>>2]|0)):0){B=29;break}c[F>>2]=c[(c[F>>2]|0)+68>>2]}do if((B|0)==29){c[s>>2]=(c[(c[o>>2]|0)+20>>2]|0)-1;while(1){if((c[s>>2]|0)<0){B=35;break}c[y>>2]=c[(c[(c[o>>2]|0)+16>>2]|0)+(c[s>>2]<<4)+4>>2];if((c[y>>2]|0)!=0?(c[(c[y>>2]|0)+4>>2]|0)==(c[F>>2]|0):0)break;c[s>>2]=(c[s>>2]|0)+-1}if((B|0)==35){c[(c[E>>2]|0)+4>>2]=c[F>>2];y=(c[F>>2]|0)+64|0;c[y>>2]=(c[y>>2]|0)+1;break}Kd(c[A>>2]|0);Kd(c[E>>2]|0);c[C>>2]=19;H=c[C>>2]|0;i=I;return H|0}while(0);Kd(c[A>>2]|0)}}while(0);do if(!(c[F>>2]|0)){c[F>>2]=ig(84,0)|0;if(!(c[F>>2]|0)){c[H>>2]=7;break}c[H>>2]=Vq(c[m>>2]|0,c[F>>2]|0,c[n>>2]|0,88,c[p>>2]|0,c[q>>2]|0,149)|0;if(!(c[H>>2]|0)){A=(c[o>>2]|0)+40|0;Wq(c[c[F>>2]>>2]|0,c[A>>2]|0,c[A+4>>2]|0);c[H>>2]=Xq(c[c[F>>2]>>2]|0,100,z)|0}if(!(c[H>>2]|0)){a[(c[F>>2]|0)+16>>0]=c[p>>2];c[(c[F>>2]|0)+4>>2]=c[o>>2];Zq(c[c[F>>2]>>2]|0,171,c[F>>2]|0);c[(c[E>>2]|0)+4>>2]=c[F>>2];c[(c[F>>2]|0)+8>>2]=0;c[(c[F>>2]|0)+12>>2]=0;if((_q(c[c[F>>2]>>2]|0)|0)<<24>>24){A=(c[F>>2]|0)+22|0;b[A>>1]=e[A>>1]|1}c[(c[F>>2]|0)+32>>2]=d[z+16>>0]<<8|d[z+17>>0]<<16;if(((c[(c[F>>2]|0)+32>>2]|0)>>>0>=512?(c[(c[F>>2]|0)+32>>2]|0)>>>0<=65536:0)?((c[(c[F>>2]|0)+32>>2]|0)-1&c[(c[F>>2]|0)+32>>2]|0)==0:0){a[x>>0]=a[z+20>>0]|0;A=(c[F>>2]|0)+22|0;b[A>>1]=e[A>>1]|2;A=($q(z+52|0)|0)!=0;a[(c[F>>2]|0)+17>>0]=A?1:0;A=($q(z+64|0)|0)!=0;a[(c[F>>2]|0)+18>>0]=A?1:0}else{c[(c[F>>2]|0)+32>>2]=0;if(!((c[n>>2]|0)==0|(c[t>>2]|0)!=0)){a[(c[F>>2]|0)+17>>0]=0;a[(c[F>>2]|0)+18>>0]=0}a[x>>0]=0}c[H>>2]=Qi(c[c[F>>2]>>2]|0,(c[F>>2]|0)+32|0,d[x>>0]|0)|0;if(!(c[H>>2]|0)){c[(c[F>>2]|0)+36>>2]=(c[(c[F>>2]|0)+32>>2]|0)-(d[x>>0]|0);if(a[(c[E>>2]|0)+9>>0]|0){c[(c[F>>2]|0)+64>>2]=1;c[(c[F>>2]|0)+68>>2]=c[1208];c[1208]=c[F>>2];B=56}else B=56}}}else B=56;while(0);if((B|0)==56){a:do if(a[(c[E>>2]|0)+9>>0]|0){c[r>>2]=0;while(1){if((c[r>>2]|0)>=(c[(c[o>>2]|0)+20>>2]|0))break a;B=c[(c[(c[o>>2]|0)+16>>2]|0)+(c[r>>2]<<4)+4>>2]|0;c[G>>2]=B;if((B|0)!=0?(d[(c[G>>2]|0)+9>>0]|0)!=0:0)break;c[r>>2]=(c[r>>2]|0)+1}while(1){if(!(c[(c[G>>2]|0)+28>>2]|0))break;c[G>>2]=c[(c[G>>2]|0)+28>>2]}if((c[(c[E>>2]|0)+4>>2]|0)>>>0<(c[(c[G>>2]|0)+4>>2]|0)>>>0){c[(c[E>>2]|0)+24>>2]=c[G>>2];c[(c[E>>2]|0)+28>>2]=0;c[(c[G>>2]|0)+28>>2]=c[E>>2];break}while(1){if(c[(c[G>>2]|0)+24>>2]|0)k=(c[(c[(c[G>>2]|0)+24>>2]|0)+4>>2]|0)>>>0<(c[(c[E>>2]|0)+4>>2]|0)>>>0;else k=0;h=c[(c[G>>2]|0)+24>>2]|0;if(!k)break;c[G>>2]=h}c[(c[E>>2]|0)+24>>2]=h;c[(c[E>>2]|0)+28>>2]=c[G>>2];if(c[(c[E>>2]|0)+24>>2]|0)c[(c[(c[E>>2]|0)+24>>2]|0)+28>>2]=c[E>>2];c[(c[G>>2]|0)+24>>2]=c[E>>2]}while(0);c[c[D>>2]>>2]=c[E>>2]}if(!(c[H>>2]|0)){if(!(Rq(c[E>>2]|0,0,0)|0))Ij(c[c[(c[E>>2]|0)+4>>2]>>2]|0,2e3)}else{if((c[F>>2]|0)!=0?(c[c[F>>2]>>2]|0)!=0:0)ar(c[c[F>>2]>>2]|0)|0;Kd(c[F>>2]|0);Kd(c[E>>2]|0);c[c[D>>2]>>2]=0}c[C>>2]=c[H>>2];H=c[C>>2]|0;i=I;return H|0}function Yj(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=e;if(c[g>>2]|0)c[h>>2]=Rq(c[g>>2]|0,84,150)|0;else c[h>>2]=ph(0,84,0)|0;if(!(c[h>>2]|0)){jh(c[f>>2]|0);e=c[h>>2]|0;i=j;return e|0}if(d[(c[h>>2]|0)+76>>0]|0){e=c[h>>2]|0;i=j;return e|0}uj((c[h>>2]|0)+8|0);uj((c[h>>2]|0)+24|0);uj((c[h>>2]|0)+40|0);uj((c[h>>2]|0)+56|0);a[(c[h>>2]|0)+77>>0]=1;e=c[h>>2]|0;i=j;return e|0}function Zj(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;b=d+4|0;e=d;c[b>>2]=a;c[e>>2]=xf(c[b>>2]|0,26688,2)|0;if((c[e>>2]|0)!=7){i=d;return}jh(c[b>>2]|0);i=d;return}function _j(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;g=k;b=k+24|0;e=k+20|0;d=k+16|0;f=k+12|0;h=k+8|0;j=k+4|0;c[b>>2]=a;c[d>>2]=1;if(!(c[382]|0)){i=k;return}c[e>>2]=0;while(1){if(!(c[d>>2]|0))break;if((c[e>>2]|0)>>>0>=(c[382]|0)>>>0){c[h>>2]=0;c[d>>2]=0}else c[h>>2]=c[(c[383]|0)+(c[e>>2]<<2)>>2];c[j>>2]=0;if((c[h>>2]|0)!=0?(a=Ob[c[h>>2]&255](c[b>>2]|0,j,3980)|0,c[f>>2]=a,(a|0)!=0):0){l=c[b>>2]|0;a=c[f>>2]|0;c[g>>2]=c[j>>2];hg(l,a,26649,g);c[d>>2]=0}Kd(c[j>>2]|0);c[e>>2]=(c[e>>2]|0)+1}i=k;return}function $j(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;b=k+24|0;d=k+20|0;j=k+16|0;e=k+12|0;g=k+8|0;f=k+4|0;h=k;c[d>>2]=a;c[j>>2]=0;c[e>>2]=0;c[g>>2]=0;c[f>>2]=0;c[h>>2]=0;ak(h);c[j>>2]=bk(c[d>>2]|0)|0;if(c[j>>2]|0){c[b>>2]=c[j>>2];j=c[b>>2]|0;i=k;return j|0}ck(g);dk(f);c[e>>2]=Id(20)|0;if(c[e>>2]|0)ek(c[e>>2]|0,1,1);else c[j>>2]=7;do if(!(c[j>>2]|0)){if(((fk(c[e>>2]|0,21308,7,c[g>>2]|0)|0)==0?(fk(c[e>>2]|0,21315,7,c[f>>2]|0)|0)==0:0)?(fk(c[e>>2]|0,21322,10,c[h>>2]|0)|0)==0:0)break;c[j>>2]=7}while(0);if((((((0==(c[j>>2]|0)?(h=gk(c[d>>2]|0,c[e>>2]|0,21332)|0,c[j>>2]=h,0==(h|0)):0)?(h=xf(c[d>>2]|0,21347,-1)|0,c[j>>2]=h,0==(h|0)):0)?(h=xf(c[d>>2]|0,21355,1)|0,c[j>>2]=h,0==(h|0)):0)?(h=xf(c[d>>2]|0,21363,1)|0,c[j>>2]=h,0==(h|0)):0)?(h=xf(c[d>>2]|0,21363,2)|0,c[j>>2]=h,0==(h|0)):0)?(h=xf(c[d>>2]|0,21373,1)|0,c[j>>2]=h,0==(h|0)):0){c[j>>2]=ef(c[d>>2]|0,21382,1692,c[e>>2]|0,151)|0;if(!(c[j>>2]|0))c[j>>2]=ef(c[d>>2]|0,21387,1692,c[e>>2]|0,0)|0;if(!(c[j>>2]|0))c[j>>2]=ik(c[d>>2]|0,c[e>>2]|0)|0;c[b>>2]=c[j>>2];j=c[b>>2]|0;i=k;return j|0}if(c[e>>2]|0){jk(c[e>>2]|0);Kd(c[e>>2]|0)}c[b>>2]=c[j>>2];j=c[b>>2]|0;i=k;return j|0}function ak(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;c[c[d>>2]>>2]=2312;i=b;return}function bk(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=df(c[e>>2]|0,26300,2220,0)|0;i=d;return c[b>>2]|0}function ck(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;c[c[d>>2]>>2]=2192;i=b;return}function dk(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;c[c[d>>2]>>2]=2164;i=b;return}function ek(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f;j=f+5|0;h=f+4|0;c[g>>2]=b;a[j>>0]=d;a[h>>0]=e;a[c[g>>2]>>0]=a[j>>0]|0;a[(c[g>>2]|0)+1>>0]=a[h>>0]|0;c[(c[g>>2]|0)+8>>2]=0;c[(c[g>>2]|0)+4>>2]=0;c[(c[g>>2]|0)+12>>2]=0;c[(c[g>>2]|0)+16>>2]=0;i=f;return}function fk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;k=s+40|0;l=s+36|0;m=s+32|0;n=s+28|0;o=s+24|0;q=s+20|0;p=s+16|0;g=s+12|0;r=s+8|0;t=s+4|0;h=s;c[l>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[t>>2]=Bk(a[c[l>>2]>>0]|0)|0;c[q>>2]=Yb[c[t>>2]&255](c[m>>2]|0,c[n>>2]|0)|0;c[p>>2]=c[q>>2]&(c[(c[l>>2]|0)+12>>2]|0)-1;c[g>>2]=Ck(c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,c[p>>2]|0)|0;if(c[g>>2]|0){c[h>>2]=c[(c[g>>2]|0)+8>>2];if(!(c[o>>2]|0))Vp(c[l>>2]|0,c[g>>2]|0,c[p>>2]|0);else c[(c[g>>2]|0)+8>>2]=c[o>>2];c[k>>2]=c[h>>2];t=c[k>>2]|0;i=s;return t|0}if(!(c[o>>2]|0)){c[k>>2]=0;t=c[k>>2]|0;i=s;return t|0}if(!((c[(c[l>>2]|0)+12>>2]|0)==0?(Wp(c[l>>2]|0,8)|0)!=0:0))j=10;do if((j|0)==10){if((c[(c[l>>2]|0)+4>>2]|0)>=(c[(c[l>>2]|0)+12>>2]|0)?(Wp(c[l>>2]|0,c[(c[l>>2]|0)+12>>2]<<1)|0)!=0:0)break;c[r>>2]=Xp(20)|0;if(!(c[r>>2]|0)){c[k>>2]=c[o>>2];t=c[k>>2]|0;i=s;return t|0}do if((c[m>>2]|0)!=0?(a[(c[l>>2]|0)+1>>0]|0)!=0:0){f=Xp(c[n>>2]|0)|0;c[(c[r>>2]|0)+12>>2]=f;f=c[r>>2]|0;if(c[(c[r>>2]|0)+12>>2]|0){iR(c[f+12>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;break}kk(f);c[k>>2]=c[o>>2];t=c[k>>2]|0;i=s;return t|0}else c[(c[r>>2]|0)+12>>2]=c[m>>2];while(0);c[(c[r>>2]|0)+16>>2]=c[n>>2];t=(c[l>>2]|0)+4|0;c[t>>2]=(c[t>>2]|0)+1;c[p>>2]=c[q>>2]&(c[(c[l>>2]|0)+12>>2]|0)-1;Yp(c[l>>2]|0,(c[(c[l>>2]|0)+16>>2]|0)+(c[p>>2]<<3)|0,c[r>>2]|0);c[(c[r>>2]|0)+8>>2]=c[o>>2];c[k>>2]=0;t=c[k>>2]|0;i=s;return t|0}while(0);c[(c[l>>2]|0)+4>>2]=0;c[k>>2]=c[o>>2];t=c[k>>2]|0;i=s;return t|0}function gk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+20|0;k=j+16|0;f=j+12|0;h=j+8|0;g=j+4|0;c[e>>2]=a;c[k>>2]=b;c[f>>2]=d;c[h>>2]=0;c[g>>2]=c[k>>2];c[j>>2]=5;if(!(c[h>>2]|0))c[h>>2]=vf(c[e>>2]|0,c[f>>2]|0,1,5,c[g>>2]|0,225,0,0)|0;if(c[h>>2]|0){k=c[h>>2]|0;i=j;return k|0}c[h>>2]=vf(c[e>>2]|0,c[f>>2]|0,2,5,c[g>>2]|0,225,0,0)|0;k=c[h>>2]|0;i=j;return k|0}function hk(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];jk(c[d>>2]|0);Kd(c[d>>2]|0);i=b;return}function ik(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;d=e;c[g>>2]=a;c[f>>2]=b;c[d>>2]=df(c[g>>2]|0,21392,1784,c[f>>2]|0)|0;i=e;return c[d>>2]|0}function jk(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=b;c[e>>2]=c[(c[d>>2]|0)+8>>2];c[(c[d>>2]|0)+8>>2]=0;kk(c[(c[d>>2]|0)+16>>2]|0);c[(c[d>>2]|0)+16>>2]=0;c[(c[d>>2]|0)+12>>2]=0;while(1){if(!(c[e>>2]|0))break;c[f>>2]=c[c[e>>2]>>2];if((a[(c[d>>2]|0)+1>>0]|0)!=0?(c[(c[e>>2]|0)+12>>2]|0)!=0:0)kk(c[(c[e>>2]|0)+12>>2]|0);kk(c[e>>2]|0);c[e>>2]=c[f>>2]}c[(c[d>>2]|0)+4>>2]=0;i=g;return}function kk(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Kd(c[d>>2]|0);i=b;return}function lk(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,j=0,k=0,l=0,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=i;i=i+64|0;h=w+56|0;x=w+52|0;j=w+48|0;k=w+44|0;l=w+40|0;m=w+36|0;n=w+32|0;s=w+28|0;r=w+24|0;t=w+20|0;u=w+16|0;p=w+12|0;q=w+8|0;v=w+4|0;o=w;c[x>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[s>>2]=0;c[r>>2]=0;c[t>>2]=0;c[p>>2]=0;c[u>>2]=ff(c[x>>2]|0,21405)|0;if(c[u>>2]|0){c[h>>2]=c[u>>2];x=c[h>>2]|0;i=w;return x|0}c[q>>2]=(c[k>>2]|0)-3;c[u>>2]=wk(c[q>>2]|0,(c[l>>2]|0)+12|0,p)|0;if(!(c[u>>2]|0)){if((c[q>>2]|0)<1)c[v>>2]=21308;else c[v>>2]=c[c[p>>2]>>2];c[u>>2]=xk(c[j>>2]|0,c[v>>2]|0,r,c[n>>2]|0)|0}if(!(c[u>>2]|0)){c[o>>2]=(c[p>>2]|0)+4;c[u>>2]=Ob[c[(c[r>>2]|0)+4>>2]&255]((c[q>>2]|0)>1?(c[q>>2]|0)-1|0:0,c[o>>2]|0,t)|0}if((c[u>>2]|0)==0?(c[s>>2]=Id(20)|0,(c[s>>2]|0)==0):0)c[u>>2]=7;if(c[u>>2]|0){if(c[t>>2]|0)Tb[c[(c[r>>2]|0)+8>>2]&255](c[t>>2]|0)|0}else{x=c[s>>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[(c[s>>2]|0)+12>>2]=c[r>>2];c[(c[s>>2]|0)+16>>2]=c[t>>2];c[c[m>>2]>>2]=c[s>>2]}Kd(c[p>>2]|0);c[h>>2]=c[u>>2];x=c[h>>2]|0;i=w;return x|0}function mk(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+4|0;j=k;c[k+8>>2]=b;c[g>>2]=e;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[c[g>>2]>>2]|0)){e=8;break}if(((d[(c[(c[g>>2]|0)+4>>2]|0)+((c[j>>2]|0)*12|0)+5>>0]|0|0)!=0?(c[(c[(c[g>>2]|0)+4>>2]|0)+((c[j>>2]|0)*12|0)>>2]|0)==0:0)?(d[(c[(c[g>>2]|0)+4>>2]|0)+((c[j>>2]|0)*12|0)+4>>0]|0|0)==2:0){e=6;break}c[j>>2]=(c[j>>2]|0)+1}if((e|0)==6){c[(c[g>>2]|0)+20>>2]=1;c[(c[(c[g>>2]|0)+16>>2]|0)+(c[j>>2]<<3)>>2]=1;a[(c[(c[g>>2]|0)+16>>2]|0)+(c[j>>2]<<3)+4>>0]=1;h[(c[g>>2]|0)+40>>3]=1.0;c[f>>2]=0;j=c[f>>2]|0;i=k;return j|0}else if((e|0)==8){c[(c[g>>2]|0)+20>>2]=0;c[f>>2]=0;j=c[f>>2]|0;i=k;return j|0}return 0}function nk(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];Tb[c[(c[(c[d>>2]|0)+12>>2]|0)+8>>2]&255](c[(c[d>>2]|0)+16>>2]|0)|0;Kd(c[d>>2]|0);i=b;return 0}function ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+12|0;e=g+4|0;f=g;c[g+8>>2]=a;c[e>>2]=b;c[f>>2]=Id(36)|0;if(!(c[f>>2]|0)){c[d>>2]=7;f=c[d>>2]|0;i=g;return f|0}else{a=c[f>>2]|0;b=a+36|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[c[e>>2]>>2]=c[f>>2];c[d>>2]=0;f=c[d>>2]|0;i=g;return f|0}return 0}function pk(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];vk(c[d>>2]|0);Kd(c[d>>2]|0);i=b;return 0}function qk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+48|0;h=q+40|0;j=q+36|0;r=q+32|0;k=q+20|0;o=q+16|0;m=q+12|0;n=q+8|0;p=q+4|0;l=q;c[j>>2]=b;c[r>>2]=d;c[q+28>>2]=e;c[q+24>>2]=f;c[k>>2]=g;c[o>>2]=1;c[m>>2]=c[j>>2];c[n>>2]=c[c[j>>2]>>2];vk(c[m>>2]|0);do if((c[r>>2]|0)==1){c[p>>2]=ae(c[c[k>>2]>>2]|0)|0;c[l>>2]=be(c[c[k>>2]>>2]|0)|0;r=Id((c[l>>2]|0)+1|0)|0;c[(c[m>>2]|0)+4>>2]=r;if(!(c[(c[m>>2]|0)+4>>2]|0)){c[o>>2]=7;break}iR(c[(c[m>>2]|0)+4>>2]|0,c[p>>2]|0,c[l>>2]|0)|0;a[(c[(c[m>>2]|0)+4>>2]|0)+(c[l>>2]|0)>>0]=0;c[o>>2]=Wb[c[(c[(c[n>>2]|0)+12>>2]|0)+12>>2]&255](c[(c[n>>2]|0)+16>>2]|0,c[(c[m>>2]|0)+4>>2]|0,c[l>>2]|0,(c[m>>2]|0)+8|0)|0;if(!(c[o>>2]|0))c[c[(c[m>>2]|0)+8>>2]>>2]=c[(c[n>>2]|0)+16>>2]}while(0);if(c[o>>2]|0){c[h>>2]=c[o>>2];r=c[h>>2]|0;i=q;return r|0}else{c[h>>2]=rk(c[j>>2]|0)|0;r=c[h>>2]|0;i=q;return r|0}return 0}function rk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=i;i=i+16|0;g=e+12|0;b=e+8|0;f=e+4|0; +d=e;c[g>>2]=a;c[b>>2]=c[g>>2];c[f>>2]=c[c[g>>2]>>2];a=(c[b>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;c[d>>2]=Sb[c[(c[(c[f>>2]|0)+12>>2]|0)+20>>2]&255](c[(c[b>>2]|0)+8>>2]|0,(c[b>>2]|0)+16|0,(c[b>>2]|0)+20|0,(c[b>>2]|0)+24|0,(c[b>>2]|0)+28|0,(c[b>>2]|0)+32|0)|0;if(!(c[d>>2]|0)){g=c[d>>2]|0;i=e;return g|0}vk(c[b>>2]|0);if((c[d>>2]|0)!=101){g=c[d>>2]|0;i=e;return g|0}c[d>>2]=0;g=c[d>>2]|0;i=e;return g|0}function sk(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];i=d;return(c[(c[b>>2]|0)+16>>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,j=0;g=i;i=i+16|0;j=g+12|0;e=g+8|0;h=g+4|0;f=g;c[j>>2]=a;c[e>>2]=b;c[h>>2]=d;c[f>>2]=c[j>>2];switch(c[h>>2]|0){case 0:{ne(c[e>>2]|0,c[(c[f>>2]|0)+4>>2]|0,-1,-1);i=g;return 0}case 1:{ne(c[e>>2]|0,c[(c[f>>2]|0)+16>>2]|0,c[(c[f>>2]|0)+20>>2]|0,-1);i=g;return 0}case 2:{ke(c[e>>2]|0,c[(c[f>>2]|0)+24>>2]|0);i=g;return 0}case 3:{ke(c[e>>2]|0,c[(c[f>>2]|0)+28>>2]|0);i=g;return 0}default:{ke(c[e>>2]|0,c[(c[f>>2]|0)+32>>2]|0);i=g;return 0}}return 0}function uk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;g=d+8|0;e=d+4|0;f=d;c[g>>2]=a;c[e>>2]=b;c[f>>2]=c[g>>2];a=c[(c[f>>2]|0)+12>>2]|0;b=c[e>>2]|0;c[b>>2]=a;c[b+4>>2]=((a|0)<0)<<31>>31;i=d;return 0}function vk(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(c[(c[b>>2]|0)+8>>2]|0){c[d>>2]=c[c[b>>2]>>2];Tb[c[(c[(c[d>>2]|0)+12>>2]|0)+16>>2]&255](c[(c[b>>2]|0)+8>>2]|0)|0;c[(c[b>>2]|0)+8>>2]=0}Kd(c[(c[b>>2]|0)+4>>2]|0);c[(c[b>>2]|0)+4>>2]=0;c[(c[b>>2]|0)+16>>2]=0;c[(c[b>>2]|0)+20>>2]=0;c[(c[b>>2]|0)+24>>2]=0;c[(c[b>>2]|0)+28>>2]=0;c[(c[b>>2]|0)+32>>2]=0;c[(c[b>>2]|0)+12>>2]=0;i=e;return}function wk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;e=o+32|0;f=o+28|0;g=o+24|0;n=o+20|0;j=o+16|0;l=o+12|0;h=o+8|0;m=o+4|0;k=o;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[n>>2]=0;if(!(c[e>>2]|0)){c[c[g>>2]>>2]=0;n=c[n>>2]|0;i=o;return n|0}c[l>>2]=0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[e>>2]|0))break;d=(BQ(c[(c[f>>2]|0)+(c[j>>2]<<2)>>2]|0)|0)+1|0;c[l>>2]=(c[l>>2]|0)+d;c[j>>2]=(c[j>>2]|0)+1}d=Id((c[e>>2]<<2)+(c[l>>2]|0)|0)|0;c[h>>2]=d;c[c[g>>2]>>2]=d;if(!(c[h>>2]|0)){c[n>>2]=7;n=c[n>>2]|0;i=o;return n|0}c[m>>2]=(c[h>>2]|0)+(c[e>>2]<<2);c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[e>>2]|0))break;c[k>>2]=BQ(c[(c[f>>2]|0)+(c[j>>2]<<2)>>2]|0)|0;c[(c[h>>2]|0)+(c[j>>2]<<2)>>2]=c[m>>2];iR(c[m>>2]|0,c[(c[f>>2]|0)+(c[j>>2]<<2)>>2]|0,(c[k>>2]|0)+1|0)|0;Ik(c[m>>2]|0);c[m>>2]=(c[m>>2]|0)+((c[k>>2]|0)+1);c[j>>2]=(c[j>>2]|0)+1}n=c[n>>2]|0;i=o;return n|0}function xk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+32|0;l=m;f=m+28|0;o=m+24|0;g=m+20|0;h=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;c[o>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[n>>2]=BQ(c[g>>2]|0)|0;c[k>>2]=yk(c[o>>2]|0,c[g>>2]|0,(c[n>>2]|0)+1|0)|0;if(c[k>>2]|0){c[c[h>>2]>>2]=c[k>>2];c[f>>2]=0;o=c[f>>2]|0;i=m;return o|0}else{o=c[j>>2]|0;c[l>>2]=c[g>>2];zk(o,21456,l);c[f>>2]=1;o=c[f>>2]|0;i=m;return o|0}return 0}function yk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;j=f+12|0;h=f+8|0;g=f+4|0;e=f;c[j>>2]=a;c[h>>2]=b;c[g>>2]=d;c[e>>2]=Ak(c[j>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;if(!(c[e>>2]|0)){j=0;i=f;return j|0}j=c[(c[e>>2]|0)+8>>2]|0;i=f;return j|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=i;i=i+32|0;f=e+20|0;h=e+16|0;g=e;c[f>>2]=a;c[h>>2]=b;Kd(c[c[f>>2]>>2]|0);c[g>>2]=d;b=Nd(c[h>>2]|0,g)|0;c[c[f>>2]>>2]=b;i=e;return}function Ak(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if((c[g>>2]|0)!=0?(c[(c[g>>2]|0)+16>>2]|0)!=0:0){c[l>>2]=Bk(a[c[g>>2]>>0]|0)|0;c[k>>2]=Yb[c[l>>2]&255](c[h>>2]|0,c[j>>2]|0)|0;c[f>>2]=Ck(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[k>>2]&(c[(c[g>>2]|0)+12>>2]|0)-1)|0;l=c[f>>2]|0;i=m;return l|0}c[f>>2]=0;l=c[f>>2]|0;i=m;return l|0}function Bk(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;b=d+4|0;e=d;c[e>>2]=a;if((c[e>>2]|0)==1)c[b>>2]=180;else c[b>>2]=181;i=d;return c[b>>2]|0}function Ck(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;k=q+32|0;g=q+28|0;l=q+24|0;m=q+20|0;h=q+16|0;o=q+12|0;n=q+8|0;p=q+4|0;j=q;c[g>>2]=b;c[l>>2]=d;c[m>>2]=e;c[h>>2]=f;a:do if(c[(c[g>>2]|0)+16>>2]|0){c[j>>2]=(c[(c[g>>2]|0)+16>>2]|0)+(c[h>>2]<<3);c[o>>2]=c[(c[j>>2]|0)+4>>2];c[n>>2]=c[c[j>>2]>>2];c[p>>2]=Dk(a[c[g>>2]>>0]|0)|0;while(1){d=c[n>>2]|0;c[n>>2]=d+-1;if(!((d|0)!=0?(c[o>>2]|0)!=0:0))break a;d=(Wb[c[p>>2]&255](c[(c[o>>2]|0)+12>>2]|0,c[(c[o>>2]|0)+16>>2]|0,c[l>>2]|0,c[m>>2]|0)|0)==0;g=c[o>>2]|0;if(d)break;c[o>>2]=c[g>>2]}c[k>>2]=g;p=c[k>>2]|0;i=q;return p|0}while(0);c[k>>2]=0;p=c[k>>2]|0;i=q;return p|0}function Dk(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;b=d+4|0;e=d;c[e>>2]=a;if((c[e>>2]|0)==1)c[b>>2]=142;else c[b>>2]=143;i=d;return c[b>>2]|0}function Ek(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+16|0;g=k+12|0;h=k+8|0;j=k+4|0;l=k;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[l>>2]=e;if((c[h>>2]|0)!=(c[l>>2]|0)){c[f>>2]=1;l=c[f>>2]|0;i=k;return l|0}else{c[f>>2]=CQ(c[g>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;l=c[f>>2]|0;i=k;return l|0}return 0}function Fk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+16|0;g=k+12|0;h=k+8|0;j=k+4|0;l=k;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[l>>2]=e;if((c[h>>2]|0)!=(c[l>>2]|0)){c[f>>2]=1;l=c[f>>2]|0;i=k;return l|0}else{c[f>>2]=vQ(c[g>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;l=c[f>>2]|0;i=k;return l|0}return 0}function Gk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;e=h+8|0;g=h+4|0;f=h;c[j>>2]=b;c[e>>2]=d;c[g>>2]=c[j>>2];c[f>>2]=0;if((c[e>>2]|0)<=0)c[e>>2]=BQ(c[g>>2]|0)|0;while(1){d=c[f>>2]|0;if((c[e>>2]|0)<=0)break;b=d<<3^c[f>>2];j=c[g>>2]|0;c[g>>2]=j+1;c[f>>2]=b^a[j>>0];c[e>>2]=(c[e>>2]|0)+-1}i=h;return d&2147483647|0}function Hk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;e=h+8|0;f=h+4|0;g=h;c[j>>2]=b;c[e>>2]=d;c[f>>2]=0;c[g>>2]=c[j>>2];while(1){j=c[e>>2]|0;c[e>>2]=j+-1;d=c[f>>2]|0;if((j|0)<=0)break;b=d<<3^c[f>>2];j=c[g>>2]|0;c[g>>2]=j+1;c[f>>2]=b^a[j>>0]}i=h;return d&2147483647|0}function Ik(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+8|0;h=j+12|0;f=j+4|0;g=j;c[e>>2]=b;a[h>>0]=a[c[e>>2]>>0]|0;if((((a[h>>0]|0)!=91?(a[h>>0]|0)!=39:0)?(a[h>>0]|0)!=34:0)?(a[h>>0]|0)!=96:0){i=j;return}c[f>>2]=1;c[g>>2]=0;if((a[h>>0]|0)==91)a[h>>0]=93;while(1){if(!(a[(c[e>>2]|0)+(c[f>>2]|0)>>0]|0))break;b=c[f>>2]|0;d=b+1|0;if((a[(c[e>>2]|0)+(c[f>>2]|0)>>0]|0)!=(a[h>>0]|0)){c[f>>2]=d;b=a[(c[e>>2]|0)+b>>0]|0;d=c[g>>2]|0;c[g>>2]=d+1;a[(c[e>>2]|0)+d>>0]=b;continue}if((a[(c[e>>2]|0)+d>>0]|0)!=(a[h>>0]|0))break;b=a[h>>0]|0;d=c[g>>2]|0;c[g>>2]=d+1;a[(c[e>>2]|0)+d>>0]=b;c[f>>2]=(c[f>>2]|0)+2}a[(c[e>>2]|0)+(c[g>>2]|0)>>0]=0;i=j;return}function Jk(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,j=0,k=0,l=0,m=0,n=0,o=0;h=i;i=i+32|0;o=h+20|0;n=h+16|0;m=h+12|0;l=h+8|0;k=h+4|0;j=h;c[o>>2]=a;c[n>>2]=b;c[m>>2]=d;c[l>>2]=e;c[k>>2]=f;c[j>>2]=g;g=Fp(1,c[o>>2]|0,c[n>>2]|0,c[m>>2]|0,c[l>>2]|0,c[k>>2]|0,c[j>>2]|0)|0;i=h;return g|0}function Kk(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,j=0,k=0,l=0,m=0,n=0,o=0;h=i;i=i+32|0;o=h+20|0;n=h+16|0;m=h+12|0;l=h+8|0;k=h+4|0;j=h;c[o>>2]=a;c[n>>2]=b;c[m>>2]=d;c[l>>2]=e;c[k>>2]=f;c[j>>2]=g;g=Fp(0,c[o>>2]|0,c[n>>2]|0,c[m>>2]|0,c[l>>2]|0,c[k>>2]|0,c[j>>2]|0)|0;i=h;return g|0}function Lk(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,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=i;i=i+64|0;r=u+48|0;v=u+44|0;s=u+40|0;o=u+36|0;g=u+32|0;j=u+28|0;n=u+24|0;k=u+20|0;l=u+16|0;m=u+12|0;f=u+8|0;p=u+4|0;t=u;c[v>>2]=b;c[s>>2]=e;c[o>>2]=c[v>>2];c[j>>2]=-1;c[n>>2]=-1;c[k>>2]=-1;c[l>>2]=-1;c[(c[s>>2]|0)+20>>2]=0;h[(c[s>>2]|0)+40>>3]=5.0e6;c[g>>2]=0;a:while(1){if((c[g>>2]|0)>=(c[c[s>>2]>>2]|0))break;c[p>>2]=(c[(c[s>>2]|0)+4>>2]|0)+((c[g>>2]|0)*12|0);e=c[p>>2]|0;b:do if(!(d[(c[p>>2]|0)+5>>0]|0)){if((d[e+4>>0]|0)==64){q=5;break a}}else{if((c[e>>2]|0)<0)e=1;else e=(c[c[p>>2]>>2]|0)==((c[(c[o>>2]|0)+24>>2]|0)+1|0);c[f>>2]=e&1;if((c[j>>2]|0)<0?(c[f>>2]|0)!=0?(d[(c[p>>2]|0)+4>>0]|0)==2:0:0){c[(c[s>>2]|0)+20>>2]=1;h[(c[s>>2]|0)+40>>3]=1.0;c[j>>2]=c[g>>2]}if(((d[(c[p>>2]|0)+4>>0]|0)==64?(c[c[p>>2]>>2]|0)>=0:0)?(c[c[p>>2]>>2]|0)<=(c[(c[o>>2]|0)+24>>2]|0):0){c[(c[s>>2]|0)+20>>2]=2+(c[c[p>>2]>>2]|0);h[(c[s>>2]|0)+40>>3]=2.0;c[j>>2]=c[g>>2]}if((d[(c[p>>2]|0)+4>>0]|0)==2?(c[c[p>>2]>>2]|0)==((c[(c[o>>2]|0)+24>>2]|0)+2|0):0)c[n>>2]=c[g>>2];if(c[f>>2]|0)switch(d[(c[p>>2]|0)+4>>0]|0){case 4:case 32:{c[k>>2]=c[g>>2];break b}case 16:case 8:{c[l>>2]=c[g>>2];break b}default:break b}}while(0);c[g>>2]=(c[g>>2]|0)+1}if((q|0)==5){c[(c[s>>2]|0)+20>>2]=0;h[(c[s>>2]|0)+40>>3]=1.e+50;Dp(c[s>>2]|0,0,262144);c[r>>2]=0;v=c[r>>2]|0;i=u;return v|0}if((c[(c[s>>2]|0)+20>>2]|0)==1)Ep(c[s>>2]|0);c[m>>2]=1;if((c[j>>2]|0)>=0){v=c[m>>2]|0;c[m>>2]=v+1;c[(c[(c[s>>2]|0)+16>>2]|0)+(c[j>>2]<<3)>>2]=v;a[(c[(c[s>>2]|0)+16>>2]|0)+(c[j>>2]<<3)+4>>0]=1}if((c[n>>2]|0)>=0){v=(c[s>>2]|0)+20|0;c[v>>2]=c[v>>2]|65536;v=c[m>>2]|0;c[m>>2]=v+1;c[(c[(c[s>>2]|0)+16>>2]|0)+(c[n>>2]<<3)>>2]=v}if((c[k>>2]|0)>=0){v=(c[s>>2]|0)+20|0;c[v>>2]=c[v>>2]|131072;v=c[m>>2]|0;c[m>>2]=v+1;c[(c[(c[s>>2]|0)+16>>2]|0)+(c[k>>2]<<3)>>2]=v}if((c[l>>2]|0)>=0){v=(c[s>>2]|0)+20|0;c[v>>2]=c[v>>2]|262144;v=c[m>>2]|0;c[m>>2]=v+1;c[(c[(c[s>>2]|0)+16>>2]|0)+(c[l>>2]<<3)>>2]=v}do if((c[(c[s>>2]|0)+8>>2]|0)==1){c[t>>2]=c[(c[s>>2]|0)+12>>2];if((c[c[t>>2]>>2]|0)>=0?(c[c[t>>2]>>2]|0)!=((c[(c[o>>2]|0)+24>>2]|0)+1|0):0)break;e=(c[s>>2]|0)+24|0;if(a[(c[t>>2]|0)+4>>0]|0)c[e>>2]=24471;else c[e>>2]=24476;c[(c[s>>2]|0)+32>>2]=1}while(0);c[r>>2]=0;v=c[r>>2]|0;i=u;return v|0}function Mk(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;f=e+8|0;d=e+4|0;b=e;c[f>>2]=a;c[d>>2]=c[f>>2];c[b>>2]=0;while(1){if((c[b>>2]|0)>=40)break;Yd(c[(c[d>>2]|0)+56+(c[b>>2]<<2)>>2]|0)|0;c[b>>2]=(c[b>>2]|0)+1}Kd(c[(c[d>>2]|0)+240>>2]|0);Kd(c[(c[d>>2]|0)+216>>2]|0);Kd(c[(c[d>>2]|0)+220>>2]|0);Kd(c[(c[d>>2]|0)+40>>2]|0);Kd(c[(c[d>>2]|0)+44>>2]|0);Tb[c[(c[c[(c[d>>2]|0)+36>>2]>>2]|0)+8>>2]&255](c[(c[d>>2]|0)+36>>2]|0)|0;Kd(c[d>>2]|0);i=e;return 0}function Nk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+64|0;j=n+32|0;h=n+24|0;l=n+16|0;k=n+8|0;g=n;b=n+56|0;e=n+52|0;f=n+48|0;m=n+44|0;d=n+40|0;c[b>>2]=a;c[e>>2]=c[b>>2];c[f>>2]=0;c[m>>2]=c[(c[e>>2]|0)+16>>2];c[d>>2]=c[(c[e>>2]|0)+12>>2];if(!(c[(c[e>>2]|0)+40>>2]|0)){a=c[d>>2]|0;o=c[(c[e>>2]|0)+20>>2]|0;c[g>>2]=c[m>>2];c[g+4>>2]=o;hl(f,a,24671,g)}o=c[d>>2]|0;g=c[(c[e>>2]|0)+20>>2]|0;c[k>>2]=c[m>>2];c[k+4>>2]=g;hl(f,o,24708,k);o=c[d>>2]|0;k=c[(c[e>>2]|0)+20>>2]|0;c[l>>2]=c[m>>2];c[l+4>>2]=k;hl(f,o,24746,l);o=c[d>>2]|0;l=c[(c[e>>2]|0)+20>>2]|0;c[h>>2]=c[m>>2];c[h+4>>2]=l;hl(f,o,24782,h);o=c[d>>2]|0;l=c[(c[e>>2]|0)+20>>2]|0;c[j>>2]=c[m>>2];c[j+4>>2]=l;hl(f,o,24819,j);if(!(c[f>>2]|0)){o=Mk(c[b>>2]|0)|0;i=n;return o|0}else{o=c[f>>2]|0;i=n;return o|0}return 0}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;e=f+12|0;g=f+4|0;d=f;c[f+8>>2]=a;c[g>>2]=b;b=Id(96)|0;c[d>>2]=b;c[c[g>>2]>>2]=b;if(c[d>>2]|0){d=c[d>>2]|0;a=d+96|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(a|0));c[e>>2]=0;g=c[e>>2]|0;i=f;return g|0}else{c[e>>2]=7;g=c[e>>2]|0;i=f;return g|0}return 0}function Pk(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];Yd(c[(c[d>>2]|0)+8>>2]|0)|0;ap(c[(c[d>>2]|0)+12>>2]|0);Cp(c[d>>2]|0);Kd(c[(c[d>>2]|0)+44>>2]|0);tm(c[(c[d>>2]|0)+92>>2]|0);Kd(c[d>>2]|0);i=b;return 0}function Qk(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0;E=i;i=i+112|0;B=E+32|0;A=E;t=E+108|0;u=E+104|0;k=E+100|0;n=E+96|0;l=E+88|0;z=E+84|0;D=E+80|0;o=E+76|0;v=E+72|0;w=E+68|0;q=E+64|0;r=E+60|0;x=E+56|0;y=E+52|0;m=E+48|0;p=E+44|0;s=E+40|0;c[u>>2]=e;c[k>>2]=f;c[n>>2]=g;c[E+92>>2]=h;c[l>>2]=j;c[z>>2]=0;c[v>>2]=c[c[u>>2]>>2];c[w>>2]=c[u>>2];c[q>>2]=0;c[r>>2]=0;c[x>>2]=0;c[y>>2]=0;c[o>>2]=c[k>>2]&65535;c[m>>2]=0;if(c[o>>2]|0){e=c[m>>2]|0;c[m>>2]=e+1;c[q>>2]=c[(c[l>>2]|0)+(e<<2)>>2]}if(c[k>>2]&65536){e=c[m>>2]|0;c[m>>2]=e+1;c[r>>2]=c[(c[l>>2]|0)+(e<<2)>>2]}if(c[k>>2]&131072){e=c[m>>2]|0;c[m>>2]=e+1;c[x>>2]=c[(c[l>>2]|0)+(e<<2)>>2]}if(c[k>>2]&262144){e=c[m>>2]|0;c[m>>2]=e+1;c[y>>2]=c[(c[l>>2]|0)+(e<<2)>>2]}Yd(c[(c[w>>2]|0)+8>>2]|0)|0;Kd(c[(c[w>>2]|0)+44>>2]|0);tm(c[(c[w>>2]|0)+92>>2]|0);ap(c[(c[w>>2]|0)+12>>2]|0);k=(c[u>>2]|0)+4|0;l=k+92|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));e=bp(c[x>>2]|0,0,-2147483648)|0;h=(c[w>>2]|0)+72|0;c[h>>2]=e;c[h+4>>2]=C;h=bp(c[y>>2]|0,-1,2147483647)|0;e=(c[w>>2]|0)+80|0;c[e>>2]=h;c[e+4>>2]=C;if(c[n>>2]|0)a[(c[w>>2]|0)+52>>0]=(a[c[n>>2]>>0]|0)==68;else a[(c[w>>2]|0)+52>>0]=a[(c[v>>2]|0)+231>>0]|0;b[(c[w>>2]|0)+4>>1]=c[o>>2];do if((c[o>>2]|0)!=1&(c[o>>2]|0)!=0){c[p>>2]=(c[o>>2]|0)-2;c[s>>2]=ae(c[q>>2]|0)|0;if((c[s>>2]|0)==0?(fe(c[q>>2]|0)|0)!=5:0){c[t>>2]=7;D=c[t>>2]|0;i=E;return D|0}c[(c[w>>2]|0)+16>>2]=0;if(c[r>>2]|0){r=de(c[r>>2]|0)|0;c[(c[w>>2]|0)+16>>2]=r}c[z>>2]=cp(c[(c[v>>2]|0)+36>>2]|0,c[(c[w>>2]|0)+16>>2]|0,c[(c[v>>2]|0)+28>>2]|0,d[(c[v>>2]|0)+228>>0]|0,c[(c[v>>2]|0)+24>>2]|0,c[p>>2]|0,c[s>>2]|0,-1,(c[w>>2]|0)+12|0,(c[v>>2]|0)+8|0)|0;if(c[z>>2]|0){c[t>>2]=c[z>>2];D=c[t>>2]|0;i=E;return D|0}c[z>>2]=dp(c[w>>2]|0)|0;sm(c[v>>2]|0);if(!(c[z>>2]|0)){c[(c[w>>2]|0)+40>>2]=c[(c[w>>2]|0)+44>>2];s=(c[w>>2]|0)+32|0;c[s>>2]=0;c[s+4>>2]=0;break}c[t>>2]=c[z>>2];D=c[t>>2]|0;i=E;return D|0}while(0);do if(!(c[o>>2]|0)){k=c[(c[v>>2]|0)+216>>2]|0;l=c[w>>2]|0;if((c[x>>2]|0)!=0|(c[y>>2]|0)!=0){r=l+72|0;q=c[r>>2]|0;r=c[r+4>>2]|0;x=(c[w>>2]|0)+80|0;s=c[x>>2]|0;x=c[x+4>>2]|0;B=(d[(c[w>>2]|0)+52>>0]|0)!=0?24471:24476;c[A>>2]=k;y=A+8|0;c[y>>2]=q;c[y+4>>2]=r;y=A+16|0;c[y>>2]=s;c[y+4>>2]=x;c[A+24>>2]=B;c[D>>2]=Od(24480,A)|0}else{A=(d[l+52>>0]|0)!=0?24471:24476;c[B>>2]=k;c[B+4>>2]=A;c[D>>2]=Od(24542,B)|0}if(c[D>>2]|0){c[z>>2]=af(c[(c[v>>2]|0)+12>>2]|0,c[D>>2]|0,-1,(c[w>>2]|0)+8|0,0)|0;Kd(c[D>>2]|0);break}else{c[z>>2]=7;break}}else if((c[o>>2]|0)==1?(c[z>>2]=zn(c[w>>2]|0,(c[w>>2]|0)+8|0)|0,(c[z>>2]|0)==0):0)c[z>>2]=Pe(c[(c[w>>2]|0)+8>>2]|0,1,c[q>>2]|0)|0;while(0);if(c[z>>2]|0){c[t>>2]=c[z>>2];D=c[t>>2]|0;i=E;return D|0}else{c[t>>2]=Rk(c[u>>2]|0)|0;D=c[t>>2]|0;i=E;return D|0}return 0}function Rk(d){d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;g=h+4|0;f=h;c[e>>2]=d;c[f>>2]=c[e>>2];if((b[(c[f>>2]|0)+4>>1]|0)!=1?(b[(c[f>>2]|0)+4>>1]|0)!=0:0){c[g>>2]=$o(c[e>>2]|0)|0;g=c[g>>2]|0;i=h;return g|0}d=100!=(ue(c[(c[f>>2]|0)+8>>2]|0)|0);e=c[f>>2]|0;if(d){a[e+6>>0]=1;c[g>>2]=Zd(c[(c[f>>2]|0)+8>>2]|0)|0;g=c[g>>2]|0;i=h;return g|0}else{d=Ee(c[e+8>>2]|0,0)|0;f=(c[f>>2]|0)+32|0;c[f>>2]=d;c[f+4>>2]=C;c[g>>2]=0;g=c[g>>2]|0;i=h;return g|0}return 0}function Sk(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[(c[b>>2]|0)+6>>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,j=0,k=0,l=0,m=0;l=i;i=i+32|0;m=l+24|0;e=l+20|0;f=l+16|0;k=l+12|0;j=l+8|0;h=l+4|0;g=l;c[m>>2]=a;c[e>>2]=b;c[f>>2]=d;c[k>>2]=0;c[j>>2]=c[m>>2];c[h>>2]=c[c[m>>2]>>2];if((c[f>>2]|0)==((c[(c[h>>2]|0)+24>>2]|0)+1|0)){m=(c[j>>2]|0)+32|0;le(c[e>>2]|0,c[m>>2]|0,c[m+4>>2]|0);m=c[k>>2]|0;i=l;return m|0}if((c[f>>2]|0)==(c[(c[h>>2]|0)+24>>2]|0)){ge(c[e>>2]|0,j,4,-1);m=c[k>>2]|0;i=l;return m|0}if((c[f>>2]|0)==((c[(c[h>>2]|0)+24>>2]|0)+2|0)?(c[(c[j>>2]|0)+12>>2]|0)!=0:0){m=c[(c[j>>2]|0)+16>>2]|0;le(c[e>>2]|0,m,((m|0)<0)<<31>>31);m=c[k>>2]|0;i=l;return m|0}c[k>>2]=nn(0,c[j>>2]|0)|0;if(c[k>>2]|0){m=c[k>>2]|0;i=l;return m|0}if((c[f>>2]|0)==((c[(c[h>>2]|0)+24>>2]|0)+2|0)){c[g>>2]=0;if(c[(c[h>>2]|0)+44>>2]|0)c[g>>2]=De(c[(c[j>>2]|0)+8>>2]|0,(c[(c[h>>2]|0)+24>>2]|0)+1|0)|0;ke(c[e>>2]|0,c[g>>2]|0);m=c[k>>2]|0;i=l;return m|0}else{m=ze(c[(c[j>>2]|0)+8>>2]|0)|0;if((m|0)<=((c[f>>2]|0)+1|0)){m=c[k>>2]|0;i=l;return m|0}m=c[e>>2]|0;pe(m,Ge(c[(c[j>>2]|0)+8>>2]|0,(c[f>>2]|0)+1|0)|0);m=c[k>>2]|0;i=l;return m|0}return 0}function Uk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;g=d+8|0;f=d+4|0;e=d;c[g>>2]=a;c[f>>2]=b;c[e>>2]=c[g>>2];e=(c[e>>2]|0)+32|0;a=c[e+4>>2]|0;b=c[f>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;i=d;return 0}function Vk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;a=Ao(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;i=f;return a|0}function Wk(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];c[(c[d>>2]|0)+52>>2]=0;a=fl(c[d>>2]|0)|0;i=b;return a|0}function Xk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=i;i=i+32|0;h=g+20|0;e=g+12|0;f=g+8|0;d=g+4|0;b=g;c[h>>2]=a;c[g+16>>2]=64;c[e>>2]=c[h>>2];c[f>>2]=gl(c[e>>2]|0)|0;if(((((c[f>>2]|0)==0?(c[(c[e>>2]|0)+52>>2]|0)>>>0>4:0)?(c[(c[e>>2]|0)+48>>2]|0)!=0:0)?(c[(c[e>>2]|0)+48>>2]|0)!=255:0)?(c[d>>2]=0,c[f>>2]=_n(c[e>>2]|0,d)|0,c[b>>2]=_(c[(c[e>>2]|0)+52>>2]|0,c[d>>2]|0)|0,c[b>>2]=(c[b>>2]|0)+((c[b>>2]|0)/2|0),(c[b>>2]|0)>64):0)c[f>>2]=$n(c[e>>2]|0,c[b>>2]|0,c[(c[e>>2]|0)+48>>2]|0)|0;sm(c[e>>2]|0);i=g;return c[f>>2]|0}function Yk(a){a=a|0;var b=0;b=i;i=i+16|0;c[b>>2]=a;i=b;return 0}function Zk(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];dl(c[d>>2]|0);i=b;return 0}function _k(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,j=0,k=0,l=0,m=0,n=0;m=i;i=i+80|0;j=m+64|0;n=m+60|0;g=m+48|0;k=m+44|0;l=m+8|0;h=m;c[n>>2]=e;e=c[n>>2]|0;c[m+56>>2]=a;c[m+52>>2]=b;c[g>>2]=d;c[k>>2]=e;c[m+40>>2]=f;c[l>>2]=c[509];c[l+4>>2]=c[510];c[l+8>>2]=c[511];c[l+12>>2]=c[512];c[l+16>>2]=c[513];c[l+20>>2]=c[514];c[l+24>>2]=c[515];c[l+28>>2]=c[516];c[h>>2]=0;while(1){if((c[h>>2]|0)>=4){b=6;break}n=(yQ(c[g>>2]|0,c[l+(c[h>>2]<<3)>>2]|0)|0)==0;a=c[h>>2]|0;if(n){b=4;break}c[h>>2]=a+1}if((b|0)==4){c[c[k>>2]>>2]=c[l+(a<<3)+4>>2];c[j>>2]=1;n=c[j>>2]|0;i=m;return n|0}else if((b|0)==6){c[j>>2]=0;n=c[j>>2]|0;i=m;return n|0}return 0}function $k(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+96|0;l=o+64|0;k=o+48|0;n=o+32|0;m=o+16|0;j=o;p=o+92|0;e=o+88|0;g=o+84|0;f=o+80|0;h=o+76|0;c[p>>2]=b;c[e>>2]=d;c[g>>2]=c[p>>2];c[f>>2]=c[(c[g>>2]|0)+12>>2];c[h>>2]=fl(c[g>>2]|0)|0;if(!(c[h>>2]|0))c[h>>2]=gl(c[g>>2]|0)|0;if(!(c[(c[g>>2]|0)+40>>2]|0)){p=c[f>>2]|0;b=c[(c[g>>2]|0)+20>>2]|0;d=c[e>>2]|0;c[j>>2]=c[(c[g>>2]|0)+16>>2];c[j+4>>2]=b;c[j+8>>2]=d;hl(h,p,21478,j)}if(a[(c[g>>2]|0)+230>>0]|0){p=c[f>>2]|0;j=c[(c[g>>2]|0)+20>>2]|0;d=c[e>>2]|0;c[m>>2]=c[(c[g>>2]|0)+16>>2];c[m+4>>2]=j;c[m+8>>2]=d;hl(h,p,21531,m)}if(a[(c[g>>2]|0)+229>>0]|0){p=c[f>>2]|0;m=c[(c[g>>2]|0)+20>>2]|0;d=c[e>>2]|0;c[n>>2]=c[(c[g>>2]|0)+16>>2];c[n+4>>2]=m;c[n+8>>2]=d;hl(h,p,21584,n)}p=c[f>>2]|0;d=c[(c[g>>2]|0)+20>>2]|0;n=c[e>>2]|0;c[k>>2]=c[(c[g>>2]|0)+16>>2];c[k+4>>2]=d;c[k+8>>2]=n;hl(h,p,21631,k);p=c[f>>2]|0;n=c[(c[g>>2]|0)+20>>2]|0;d=c[e>>2]|0;c[l>>2]=c[(c[g>>2]|0)+16>>2];c[l+4>>2]=n;c[l+8>>2]=d;hl(h,p,21685,l);i=o;return c[h>>2]|0}function al(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+8|0;f=g;c[e>>2]=a;c[g+4>>2]=b;c[f>>2]=0;if(d[(c[e>>2]|0)+232>>0]|0){f=c[f>>2]|0;i=g;return f|0}c[f>>2]=Xk(c[e>>2]|0)|0;f=c[f>>2]|0;i=g;return f|0}function bl(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 0}function cl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+8|0;e=d;c[f>>2]=a;c[d+4>>2]=b;c[e>>2]=c[f>>2];dl(c[e>>2]|0);i=d;return 0}function dl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;b=h+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[b>>2]=a;c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+248>>2]|0))break;c[f>>2]=(c[(c[b>>2]|0)+252>>2]|0)+((c[d>>2]|0)*24|0)+4;c[e>>2]=c[(c[f>>2]|0)+8>>2];while(1){if(!(c[e>>2]|0))break;c[g>>2]=c[(c[e>>2]|0)+8>>2];el(c[g>>2]|0);c[e>>2]=c[c[e>>2]>>2]}jk(c[f>>2]|0);c[d>>2]=(c[d>>2]|0)+1}c[(c[b>>2]|0)+260>>2]=0;i=h;return}function el(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Kd(c[d>>2]|0);i=b;return}function fl(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;j=m;e=m+28|0;h=m+24|0;k=m+20|0;l=m+16|0;g=m+12|0;f=m+8|0;c[e>>2]=b;c[h>>2]=0;if((d[(c[e>>2]|0)+229>>0]|0|0)!=2){l=c[h>>2]|0;i=m;return l|0}c[k>>2]=24028;k=c[k>>2]|0;b=c[(c[e>>2]|0)+20>>2]|0;c[j>>2]=c[(c[e>>2]|0)+16>>2];c[j+4>>2]=b;c[l>>2]=Od(k,j)|0;if(!(c[l>>2]|0)){c[h>>2]=7;l=c[h>>2]|0;i=m;return l|0}c[g>>2]=0;c[h>>2]=af(c[(c[e>>2]|0)+12>>2]|0,c[l>>2]|0,-1,g,0)|0;if((c[h>>2]|0)==0?(c[f>>2]=(ue(c[g>>2]|0)|0)==100&1,c[h>>2]=Yd(c[g>>2]|0)|0,(c[h>>2]|0)==0):0)a[(c[e>>2]|0)+229>>0]=c[f>>2];Kd(c[l>>2]|0);l=c[h>>2]|0;i=m;return l|0}function gl(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;h=j+8|0;f=j+4|0;g=j;c[e>>2]=a;c[h>>2]=0;c[f>>2]=0;while(1){if(!(c[h>>2]|0))a=(c[f>>2]|0)<(c[(c[e>>2]|0)+248>>2]|0);else a=0;b=c[e>>2]|0;if(!a)break;b=il(b,c[(c[e>>2]|0)+272>>2]|0,c[f>>2]|0,-1)|0;c[h>>2]=b;c[h>>2]=(c[h>>2]|0)==101?0:b;c[f>>2]=(c[f>>2]|0)+1}dl(b);if(c[h>>2]|0){h=c[h>>2]|0;i=j;return h|0}if(!(d[(c[e>>2]|0)+229>>0]|0)){h=c[h>>2]|0;i=j;return h|0}if((c[(c[e>>2]|0)+48>>2]|0)!=255){h=c[h>>2]|0;i=j;return h|0}if((c[(c[e>>2]|0)+52>>2]|0)>>>0<=0){h=c[h>>2]|0;i=j;return h|0}c[g>>2]=0;c[h>>2]=jl(c[e>>2]|0,22,g,0)|0;if(c[h>>2]|0){h=c[h>>2]|0;i=j;return h|0}Le(c[g>>2]|0,1,2)|0;c[h>>2]=ue(c[g>>2]|0)|0;if((c[h>>2]|0)==100){f=De(c[g>>2]|0,0)|0;c[(c[e>>2]|0)+48>>2]=f;if((c[(c[e>>2]|0)+48>>2]|0)==1)c[(c[e>>2]|0)+48>>2]=8}else if((c[h>>2]|0)==101)c[(c[e>>2]|0)+48>>2]=0;c[h>>2]=Zd(c[g>>2]|0)|0;h=c[h>>2]|0;i=j;return h|0}function hl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+48|0;f=l+32|0;g=l+28|0;h=l+24|0;j=l+8|0;k=l;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;if(c[c[f>>2]>>2]|0){i=l;return}c[j>>2]=e;c[k>>2]=Nd(c[h>>2]|0,j)|0;if(!(c[k>>2]|0)){c[c[f>>2]>>2]=7;i=l;return}else{d=$e(c[g>>2]|0,c[k>>2]|0,0,0,0)|0;c[c[f>>2]>>2]=d;Kd(c[k>>2]|0);i=l;return}}function il(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+128|0;f=s+120|0;g=s+116|0;h=s+112|0;j=s+108|0;r=s+104|0;n=s+100|0;p=s+8|0;q=s+96|0;m=s+80|0;l=s+24|0;k=s+16|0;o=s;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[n>>2]=0;a=p;c[a>>2]=0;c[a+4>>2]=0;c[q>>2]=0;c[k>>2]=0;a=o;c[a>>2]=0;c[a+4>>2]=0;c[r>>2]=kl(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,0,0,1,0,l)|0;a:do if((c[r>>2]|0)==0?(c[l+4>>2]|0)!=0:0){if((c[j>>2]|0)!=-1?(c[r>>2]=ll(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,o)|0,(c[r>>2]|0)!=0):0)break;do if((c[j>>2]|0)==-2)if((c[l+4>>2]|0)==1){c[r>>2]=101;break a}else{b=o;e=c[b+4>>2]|0;a=p;c[a>>2]=c[b>>2];c[a+4>>2]=e;c[k>>2]=1;break}else{e=ml(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,(c[j>>2]|0)+1|0)|0;a=p;c[a>>2]=e;c[a+4>>2]=C;c[r>>2]=nl(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,(c[j>>2]|0)+1|0,n)|0;if((c[j>>2]|0)!=-1){a=p;b=c[a+4>>2]|0;d=o;e=c[d+4>>2]|0;d=(b|0)>(e|0)|((b|0)==(e|0)?(c[a>>2]|0)>>>0>(c[d>>2]|0)>>>0:0)}else d=0;c[k>>2]=d&1}while(0);if(!(c[r>>2]|0)){c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+12>>2]=1;a=m+12|0;c[a>>2]=c[a>>2]|((c[k>>2]|0)!=0?2:0);c[r>>2]=ol(c[f>>2]|0,l,m)|0;while(1){if(c[r>>2]|0)break;c[r>>2]=pl(c[f>>2]|0,l)|0;if((c[r>>2]|0)!=100)break;c[r>>2]=ql(c[f>>2]|0,q,1,c[l+40>>2]|0,c[l+44>>2]|0,c[l+48>>2]|0,c[l+52>>2]|0)|0}if(!(c[r>>2]|0)){if((c[j>>2]|0)!=-1){c[r>>2]=rl(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0;if(!((c[r>>2]|0)==0&(c[q>>2]|0)!=0))break}else if(!(c[q>>2]|0))break;m=p;c[r>>2]=sl(c[f>>2]|0,c[q>>2]|0,c[m>>2]|0,c[m+4>>2]|0,c[n>>2]|0)|0;if(!(c[r>>2]|0)){if((c[j>>2]|0)!=-1?(n=p,k=c[n+4>>2]|0,o,m=c[o+4>>2]|0,!((k|0)<(m|0)|((k|0)==(m|0)?(c[n>>2]|0)>>>0<(c[o>>2]|0)>>>0:0))):0)break;o=p;p=(c[q>>2]|0)+56|0;c[r>>2]=tl(c[f>>2]|0,c[o>>2]|0,c[o+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0)|0}}}}while(0);ul(c[q>>2]|0);vl(l);i=s;return c[r>>2]|0}function jl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+240|0;o=t+24|0;n=t+16|0;g=t;h=t+228|0;j=t+224|0;q=t+220|0;k=t+216|0;f=t+56|0;s=t+48|0;r=t+44|0;p=t+40|0;l=t+36|0;m=t+32|0;c[h>>2]=a;c[j>>2]=b;c[q>>2]=d;c[k>>2]=e;iR(f|0,1876,160)|0;c[s>>2]=0;c[r>>2]=c[(c[h>>2]|0)+56+(c[j>>2]<<2)>>2];do if(!(c[r>>2]|0)){a=c[j>>2]|0;do if((c[j>>2]|0)!=18){e=c[f+(c[j>>2]<<2)>>2]|0;b=c[h>>2]|0;if((a|0)==7){c[n>>2]=c[b+216>>2];c[p>>2]=Od(e,n)|0;break}else{n=c[(c[h>>2]|0)+20>>2]|0;c[o>>2]=c[b+16>>2];c[o+4>>2]=n;c[p>>2]=Od(e,o)|0;break}}else{o=c[f+(a<<2)>>2]|0;f=c[(c[h>>2]|0)+20>>2]|0;n=c[(c[h>>2]|0)+220>>2]|0;c[g>>2]=c[(c[h>>2]|0)+16>>2];c[g+4>>2]=f;c[g+8>>2]=n;c[p>>2]=Od(o,g)|0}while(0);if(c[p>>2]|0){c[s>>2]=af(c[(c[h>>2]|0)+12>>2]|0,c[p>>2]|0,-1,r,0)|0;Kd(c[p>>2]|0);c[(c[h>>2]|0)+56+(c[j>>2]<<2)>>2]=c[r>>2];break}else{c[s>>2]=7;break}}while(0);if(!(c[k>>2]|0)){p=c[r>>2]|0;r=c[q>>2]|0;c[r>>2]=p;s=c[s>>2]|0;i=t;return s|0}c[m>>2]=Re(c[r>>2]|0)|0;c[l>>2]=0;while(1){if(c[s>>2]|0){e=15;break}if((c[l>>2]|0)>=(c[m>>2]|0)){e=15;break}c[s>>2]=Pe(c[r>>2]|0,(c[l>>2]|0)+1|0,c[(c[k>>2]|0)+(c[l>>2]<<2)>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+1}if((e|0)==15){p=c[r>>2]|0;r=c[q>>2]|0;c[r>>2]=p;s=c[s>>2]|0;i=t;return s|0}return 0}function kl(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;u=i;i=i+48|0;l=u+32|0;m=u+28|0;n=u+24|0;o=u+20|0;p=u+16|0;q=u+12|0;r=u+8|0;s=u+4|0;t=u;c[l>>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]=j;c[t>>2]=k;d=c[t>>2]|0;b=d+56|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(b|0));t=dm(c[l>>2]|0,c[m>>2]|0,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[t>>2]|0)|0;i=u;return t|0}function ll(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+24|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=jl(c[g>>2]|0,15,l,0)|0;if(c[m>>2]|0){c[f>>2]=c[m>>2];m=c[f>>2]|0;i=n;return m|0}m=c[l>>2]|0;e=ml(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,0)|0;Me(m,1,e,C)|0;e=c[l>>2]|0;m=ml(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,1023)|0;Me(e,2,m,C)|0;if(100==(ue(c[l>>2]|0)|0)){e=Ee(c[l>>2]|0,0)|0;m=c[k>>2]|0;c[m>>2]=e;c[m+4>>2]=C}c[f>>2]=Zd(c[l>>2]|0)|0;m=c[f>>2]|0;i=n;return m|0}function ml(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+32|0;k=f+20|0;l=f+16|0;j=f+12|0;g=f+8|0;h=f;c[k>>2]=a;c[l>>2]=b;c[j>>2]=d;c[g>>2]=e;a=c[l>>2]|0;e=c[(c[k>>2]|0)+248>>2]|0;e=rR(a|0,((a|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;a=c[j>>2]|0;a=gR(e|0,C|0,a|0,((a|0)<0)<<31>>31|0)|0;a=rR(a|0,C|0,1024,0)|0;e=h;c[e>>2]=a;c[e+4>>2]=C;e=h;a=c[g>>2]|0;a=gR(c[e>>2]|0,c[e+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;i=f;return a|0}function nl(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+28|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;o=p+8|0;n=p+4|0;m=p;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=0;c[o>>2]=jl(c[g>>2]|0,8,n,0)|0;if(!(c[o>>2]|0)){a=c[n>>2]|0;f=ml(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;Me(a,1,f,C)|0;if(100==(ue(c[n>>2]|0)|0))c[m>>2]=De(c[n>>2]|0,0)|0;c[o>>2]=Zd(c[n>>2]|0)|0}if(c[o>>2]|0){o=c[o>>2]|0;i=p;return o|0}if((c[m>>2]|0)>=16){c[o>>2]=il(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[c[l>>2]>>2]=0;o=c[o>>2]|0;i=p;return o|0}else{c[c[l>>2]>>2]=c[m>>2];o=c[o>>2]|0;i=p;return o|0}return 0}function ol(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;c[(c[g>>2]|0)+12>>2]=c[f>>2];d=bm(c[h>>2]|0,c[g>>2]|0,c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+4>>2]|0)|0;i=e;return d|0}function pl(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;K=i;i=i+128|0;f=K+120|0;g=K+116|0;h=K+112|0;H=K+108|0;s=K+104|0;u=K+100|0;q=K+96|0;t=K+92|0;v=K+88|0;r=K+84|0;l=K+80|0;B=K+76|0;E=K+72|0;I=K+68|0;A=K+64|0;m=K+60|0;G=K+56|0;y=K+52|0;p=K+16|0;w=K+48|0;F=K+44|0;z=K+40|0;x=K+36|0;o=K+8|0;n=K;k=K+32|0;j=K+28|0;D=K+24|0;c[g>>2]=b;c[h>>2]=e;c[H>>2]=0;c[s>>2]=c[(c[(c[h>>2]|0)+12>>2]|0)+12>>2]&2;c[u>>2]=c[(c[(c[h>>2]|0)+12>>2]|0)+12>>2]&1;c[q>>2]=c[(c[(c[h>>2]|0)+12>>2]|0)+12>>2]&4;c[t>>2]=c[(c[(c[h>>2]|0)+12>>2]|0)+12>>2]&8;c[v>>2]=c[(c[(c[h>>2]|0)+12>>2]|0)+12>>2]&16;c[r>>2]=c[(c[(c[h>>2]|0)+12>>2]|0)+12>>2]&32;c[l>>2]=c[c[h>>2]>>2];c[B>>2]=c[(c[h>>2]|0)+4>>2];c[E>>2]=c[(c[h>>2]|0)+12>>2];c[I>>2]=(d[(c[g>>2]|0)+231>>0]|0)!=0?182:183;if(!(c[(c[h>>2]|0)+4>>2]|0)){c[f>>2]=0;J=c[f>>2]|0;i=K;return J|0}a:while(1){c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[(c[h>>2]|0)+8>>2]|0))break;c[G>>2]=c[(c[l>>2]|0)+(c[m>>2]<<2)>>2];if(a[(c[G>>2]|0)+4>>0]|0)Kl(c[G>>2]|0);else c[H>>2]=Ll(c[g>>2]|0,c[G>>2]|0,0)|0;if(c[H>>2]|0){J=9;break a}c[m>>2]=(c[m>>2]|0)+1}Nl(c[l>>2]|0,c[B>>2]|0,c[(c[h>>2]|0)+8>>2]|0,184);c[(c[h>>2]|0)+8>>2]=0;if(!(c[(c[c[l>>2]>>2]|0)+40>>2]|0)){J=61;break}c[(c[h>>2]|0)+44>>2]=c[(c[c[l>>2]>>2]|0)+60>>2];c[(c[h>>2]|0)+40>>2]=c[(c[c[l>>2]>>2]|0)+64>>2];if(!((c[v>>2]|0)!=0?1:(c[c[E>>2]>>2]|0)==0)){if((c[(c[h>>2]|0)+44>>2]|0)<(c[(c[E>>2]|0)+4>>2]|0)){J=61;break}if((c[t>>2]|0)==0?(c[(c[h>>2]|0)+44>>2]|0)>(c[(c[E>>2]|0)+4>>2]|0):0){J=61;break}if(vQ(c[(c[h>>2]|0)+40>>2]|0,c[c[E>>2]>>2]|0,c[(c[E>>2]|0)+4>>2]|0)|0){J=61;break}}c[A>>2]=1;while(1){if(((c[A>>2]|0)<(c[B>>2]|0)?(c[(c[(c[l>>2]|0)+(c[A>>2]<<2)>>2]|0)+40>>2]|0)!=0:0)?(c[(c[(c[l>>2]|0)+(c[A>>2]<<2)>>2]|0)+60>>2]|0)==(c[(c[h>>2]|0)+44>>2]|0):0)e=0==(vQ(c[(c[h>>2]|0)+40>>2]|0,c[(c[(c[l>>2]|0)+(c[A>>2]<<2)>>2]|0)+64>>2]|0,c[(c[h>>2]|0)+44>>2]|0)|0);else e=0;b=c[A>>2]|0;if(!e)break;c[A>>2]=b+1}do if(!((b|0)!=1|(c[s>>2]|0)!=0|(c[r>>2]|0)!=0)){if((d[(c[g>>2]|0)+231>>0]|0)!=0?((c[(c[c[l>>2]>>2]|0)+56>>2]|0)!=0|0)!=0:0){J=32;break}c[(c[h>>2]|0)+52>>2]=c[(c[c[l>>2]>>2]|0)+76>>2];if(c[(c[c[l>>2]>>2]|0)+56>>2]|0){c[H>>2]=Ol(c[h>>2]|0,c[(c[c[l>>2]>>2]|0)+72>>2]|0,c[(c[h>>2]|0)+52>>2]|0)|0;c[(c[h>>2]|0)+48>>2]=c[(c[h>>2]|0)+16>>2]}else c[(c[h>>2]|0)+48>>2]=c[(c[c[l>>2]>>2]|0)+72>>2];if(!(c[H>>2]|0))c[H>>2]=100}else J=32;while(0);if((J|0)==32){J=0;c[y>>2]=0;e=p;c[e>>2]=0;c[e+4>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[A>>2]|0))break;Pl(c[g>>2]|0,c[(c[l>>2]|0)+(c[m>>2]<<2)>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+1}Nl(c[l>>2]|0,c[A>>2]|0,c[A>>2]|0,c[I>>2]|0);while(1){if(!(c[(c[c[l>>2]>>2]|0)+80>>2]|0))break;c[F>>2]=0;c[z>>2]=0;L=(c[c[l>>2]>>2]|0)+88|0;b=c[L+4>>2]|0;e=o;c[e>>2]=c[L>>2];c[e+4>>2]=b;Ql(c[g>>2]|0,c[c[l>>2]>>2]|0,F,z)|0;c[w>>2]=1;while(1){if((c[w>>2]|0)>=(c[A>>2]|0))break;if(!(c[(c[(c[l>>2]|0)+(c[w>>2]<<2)>>2]|0)+80>>2]|0))break;e=(c[(c[l>>2]|0)+(c[w>>2]<<2)>>2]|0)+88|0;L=o;if(!((c[e>>2]|0)==(c[L>>2]|0)?(c[e+4>>2]|0)==(c[L+4>>2]|0):0))break;Ql(c[g>>2]|0,c[(c[l>>2]|0)+(c[w>>2]<<2)>>2]|0,0,0)|0;c[w>>2]=(c[w>>2]|0)+1}if(c[q>>2]|0)Rl(c[(c[E>>2]|0)+8>>2]|0,0,F,z);do if((c[s>>2]|0)==0|(c[z>>2]|0)>0){if((c[y>>2]|0)>0?(d[(c[g>>2]|0)+231>>0]|0)!=0:0){L=p;e=o;e=fR(c[L>>2]|0,c[L+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;L=n;c[L>>2]=e;c[L+4>>2]=C}else{L=o;e=p;e=fR(c[L>>2]|0,c[L+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;L=n;c[L>>2]=e;c[L+4>>2]=C}L=n;L=Dl(c[L>>2]|0,c[L+4>>2]|0)|0;c[x>>2]=L+((c[u>>2]|0)!=0?(c[z>>2]|0)+1|0:0);if(((c[y>>2]|0)+(c[x>>2]|0)|0)>(c[(c[h>>2]|0)+20>>2]|0)){c[(c[h>>2]|0)+20>>2]=(c[y>>2]|0)+(c[x>>2]|0)<<1;c[k>>2]=Ld(c[(c[h>>2]|0)+16>>2]|0,c[(c[h>>2]|0)+20>>2]|0)|0;if(!(c[k>>2]|0)){J=50;break a}c[(c[h>>2]|0)+16>>2]=c[k>>2]}b=(c[(c[h>>2]|0)+16>>2]|0)+(c[y>>2]|0)|0;if(c[r>>2]|0){c[j>>2]=b;L=n;c[D>>2]=Sl(c[L>>2]|0,c[L+4>>2]|0,c[F>>2]|0,c[z>>2]|0,c[j>>2]|0)|0;if(!(c[D>>2]|0))break;b=o;e=c[b+4>>2]|0;L=p;c[L>>2]=c[b>>2];c[L+4>>2]=e;c[y>>2]=(c[y>>2]|0)+(c[D>>2]|0);break}else{e=n;b=El(b,c[e>>2]|0,c[e+4>>2]|0)|0;c[y>>2]=(c[y>>2]|0)+b;b=o;e=c[b+4>>2]|0;L=p;c[L>>2]=c[b>>2];c[L+4>>2]=e;if(!(c[u>>2]|0))break;iR((c[(c[h>>2]|0)+16>>2]|0)+(c[y>>2]|0)|0,c[F>>2]|0,c[z>>2]|0)|0;c[y>>2]=(c[y>>2]|0)+(c[z>>2]|0);L=c[y>>2]|0;c[y>>2]=L+1;a[(c[(c[h>>2]|0)+16>>2]|0)+L>>0]=0;break}}while(0);Nl(c[l>>2]|0,c[A>>2]|0,c[w>>2]|0,c[I>>2]|0)}if((c[y>>2]|0)>0){c[(c[h>>2]|0)+48>>2]=c[(c[h>>2]|0)+16>>2];c[(c[h>>2]|0)+52>>2]=c[y>>2];c[H>>2]=100}}c[(c[h>>2]|0)+8>>2]=c[A>>2];if(c[H>>2]|0){J=61;break}}if((J|0)==9){c[f>>2]=c[H>>2];L=c[f>>2]|0;i=K;return L|0}else if((J|0)==50){c[f>>2]=7;L=c[f>>2]|0;i=K;return L|0}else if((J|0)==61){c[f>>2]=c[H>>2];L=c[f>>2]|0;i=K;return L|0}return 0}function ql(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,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=i;i=i+80|0;j=B+68|0;k=B+64|0;l=B+60|0;m=B+56|0;n=B+52|0;o=B+48|0;p=B+44|0;q=B+40|0;t=B+36|0;v=B+32|0;u=B+28|0;s=B+24|0;x=B+20|0;y=B+16|0;w=B+12|0;z=B+8|0;r=B+4|0;A=B;c[k>>2]=a;c[l>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[x>>2]=c[c[l>>2]>>2];if(!(c[x>>2]|0)){c[x>>2]=Id(64)|0;if(!(c[x>>2]|0)){c[j>>2]=7;A=c[j>>2]|0;i=B;return A|0}g=c[x>>2]|0;d=g+64|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(d|0));c[c[l>>2]>>2]=c[x>>2];l=Id(c[(c[k>>2]|0)+224>>2]|0)|0;c[(c[x>>2]|0)+48>>2]=l;if(!(c[(c[x>>2]|0)+48>>2]|0)){ +c[j>>2]=7;A=c[j>>2]|0;i=B;return A|0}c[(c[x>>2]|0)+40>>2]=c[(c[k>>2]|0)+224>>2];c[y>>2]=jl(c[k>>2]|0,10,w,0)|0;if(c[y>>2]|0){c[j>>2]=c[y>>2];A=c[j>>2]|0;i=B;return A|0}if(100==(ue(c[w>>2]|0)|0)){e=Ee(c[w>>2]|0,0)|0;b=(c[x>>2]|0)+16|0;c[b>>2]=e;c[b+4>>2]=C;b=(c[x>>2]|0)+16|0;e=c[b+4>>2]|0;l=(c[x>>2]|0)+8|0;c[l>>2]=c[b>>2];c[l+4>>2]=e}c[y>>2]=Zd(c[w>>2]|0)|0;if(c[y>>2]|0){c[j>>2]=c[y>>2];A=c[j>>2]|0;i=B;return A|0}}c[s>>2]=c[(c[x>>2]|0)+44>>2];c[t>>2]=Gl(c[(c[x>>2]|0)+24>>2]|0,c[(c[x>>2]|0)+28>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;c[v>>2]=(c[o>>2]|0)-(c[t>>2]|0);y=c[t>>2]|0;y=Dl(y,((y|0)<0)<<31>>31)|0;w=c[v>>2]|0;w=y+(Dl(w,((w|0)<0)<<31>>31)|0)|0;w=w+(c[v>>2]|0)|0;y=c[q>>2]|0;y=w+(Dl(y,((y|0)<0)<<31>>31)|0)|0;c[u>>2]=y+(c[q>>2]|0);do if((c[s>>2]|0)>0?((c[s>>2]|0)+(c[u>>2]|0)|0)>(c[(c[k>>2]|0)+224>>2]|0):0){l=c[k>>2]|0;e=(c[x>>2]|0)+16|0;y=e;w=c[y>>2]|0;y=c[y+4>>2]|0;b=gR(w|0,y|0,1,0)|0;c[e>>2]=b;c[e+4>>2]=C;c[z>>2]=zl(l,w,y,c[(c[x>>2]|0)+48>>2]|0,c[s>>2]|0)|0;if(c[z>>2]|0){c[j>>2]=c[z>>2];A=c[j>>2]|0;i=B;return A|0}y=(c[k>>2]|0)+52|0;c[y>>2]=(c[y>>2]|0)+1;c[z>>2]=Hl(c[k>>2]|0,c[x>>2]|0,c[m>>2]|0,c[n>>2]|0,(c[t>>2]|0)+1|0)|0;if(!(c[z>>2]|0)){c[s>>2]=0;c[(c[x>>2]|0)+28>>2]=0;c[t>>2]=0;c[v>>2]=c[o>>2];y=c[o>>2]|0;y=1+(Dl(y,((y|0)<0)<<31>>31)|0)|0;y=y+(c[o>>2]|0)|0;z=c[q>>2]|0;z=y+(Dl(z,((z|0)<0)<<31>>31)|0)|0;c[u>>2]=z+(c[q>>2]|0);break}c[j>>2]=c[z>>2];A=c[j>>2]|0;i=B;return A|0}while(0);y=c[u>>2]|0;z=(c[x>>2]|0)+56|0;w=z;y=gR(c[w>>2]|0,c[w+4>>2]|0,y|0,((y|0)<0)<<31>>31|0)|0;c[z>>2]=y;c[z+4>>2]=C;do if((c[u>>2]|0)>(c[(c[x>>2]|0)+40>>2]|0)){c[r>>2]=Ld(c[(c[x>>2]|0)+48>>2]|0,c[u>>2]|0)|0;if(c[r>>2]|0){c[(c[x>>2]|0)+48>>2]=c[r>>2];c[(c[x>>2]|0)+40>>2]=c[u>>2];break}c[j>>2]=7;A=c[j>>2]|0;i=B;return A|0}while(0);z=c[t>>2]|0;z=El((c[(c[x>>2]|0)+48>>2]|0)+(c[s>>2]|0)|0,z,((z|0)<0)<<31>>31)|0;c[s>>2]=(c[s>>2]|0)+z;z=c[v>>2]|0;z=El((c[(c[x>>2]|0)+48>>2]|0)+(c[s>>2]|0)|0,z,((z|0)<0)<<31>>31)|0;c[s>>2]=(c[s>>2]|0)+z;iR((c[(c[x>>2]|0)+48>>2]|0)+(c[s>>2]|0)|0,(c[n>>2]|0)+(c[t>>2]|0)|0,c[v>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[v>>2]|0);z=c[q>>2]|0;z=El((c[(c[x>>2]|0)+48>>2]|0)+(c[s>>2]|0)|0,z,((z|0)<0)<<31>>31)|0;c[s>>2]=(c[s>>2]|0)+z;iR((c[(c[x>>2]|0)+48>>2]|0)+(c[s>>2]|0)|0,c[p>>2]|0,c[q>>2]|0)|0;c[(c[x>>2]|0)+44>>2]=(c[s>>2]|0)+(c[q>>2]|0);if(c[m>>2]|0){do if((c[o>>2]|0)>(c[(c[x>>2]|0)+32>>2]|0)){c[A>>2]=Ld(c[(c[x>>2]|0)+36>>2]|0,c[o>>2]<<1)|0;if(c[A>>2]|0){c[(c[x>>2]|0)+32>>2]=c[o>>2]<<1;c[(c[x>>2]|0)+36>>2]=c[A>>2];c[(c[x>>2]|0)+24>>2]=c[A>>2];break}c[j>>2]=7;A=c[j>>2]|0;i=B;return A|0}while(0);iR(c[(c[x>>2]|0)+24>>2]|0,c[n>>2]|0,c[o>>2]|0)|0}else c[(c[x>>2]|0)+24>>2]=c[n>>2];c[(c[x>>2]|0)+28>>2]=c[o>>2];c[j>>2]=0;A=c[j>>2]|0;i=B;return A|0}function rl(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;l=s+36|0;m=s+32|0;n=s+28|0;o=s+24|0;p=s+20|0;h=s+16|0;j=s+12|0;r=s+8|0;k=s+4|0;q=s;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[h>>2]=f;c[j>>2]=g;c[r>>2]=0;c[q>>2]=0;c[k>>2]=0;while(1){if(c[r>>2]|0)break;if((c[k>>2]|0)>=(c[j>>2]|0))break;c[r>>2]=Fl(c[m>>2]|0,c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)|0;c[k>>2]=(c[k>>2]|0)+1}if(c[r>>2]|0){c[l>>2]=c[r>>2];r=c[l>>2]|0;i=s;return r|0}h=c[m>>2]|0;if((c[p>>2]|0)==-2){c[r>>2]=jl(h,26,q,0)|0;if(!(c[r>>2]|0)){p=c[q>>2]|0;a=ml(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,0)|0;Me(p,1,a,C)|0;a=c[q>>2]|0;p=ml(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,1023)|0;Me(a,2,p,C)|0}}else{c[r>>2]=jl(h,16,q,0)|0;if(!(c[r>>2]|0)){a=c[q>>2]|0;p=ml(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;Me(a,1,p,C)|0}}if(!(c[r>>2]|0)){ue(c[q>>2]|0)|0;c[r>>2]=Zd(c[q>>2]|0)|0}c[l>>2]=c[r>>2];r=c[l>>2]|0;i=s;return r|0}function sl(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+44|0;h=q+40|0;j=q+16|0;k=q+36|0;o=q+32|0;l=q+8|0;m=q;p=q+28|0;n=q+24|0;c[g>>2]=a;c[h>>2]=b;b=j;c[b>>2]=d;c[b+4>>2]=e;c[k>>2]=f;if(!(c[c[h>>2]>>2]|0)){b=j;p=(c[h>>2]|0)+56|0;c[o>>2]=Bl(c[g>>2]|0,c[b>>2]|0,c[b+4>>2]|0,c[k>>2]|0,0,0,0,0,0,0,c[p>>2]|0,c[p+4>>2]|0,c[(c[h>>2]|0)+48>>2]|0,c[(c[h>>2]|0)+44>>2]|0)|0;p=c[g>>2]|0;p=p+52|0;b=c[p>>2]|0;b=b+1|0;c[p>>2]=b;p=c[o>>2]|0;i=q;return p|0}b=l;c[b>>2]=0;c[b+4>>2]=0;c[p>>2]=0;c[n>>2]=0;b=(c[h>>2]|0)+16|0;e=c[b+4>>2]|0;f=m;c[f>>2]=c[b>>2];c[f+4>>2]=e;f=c[g>>2]|0;e=(c[h>>2]|0)+16|0;b=e;a=c[b>>2]|0;b=c[b+4>>2]|0;d=gR(a|0,b|0,1,0)|0;c[e>>2]=d;c[e+4>>2]=C;c[o>>2]=zl(f,a,b,c[(c[h>>2]|0)+48>>2]|0,c[(c[h>>2]|0)+44>>2]|0)|0;if(!(c[o>>2]|0)){a=(c[h>>2]|0)+8|0;b=(c[h>>2]|0)+16|0;c[o>>2]=Al(c[g>>2]|0,c[c[h>>2]>>2]|0,1,c[a>>2]|0,c[a+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0,l,p,n)|0}if(c[o>>2]|0){p=c[g>>2]|0;p=p+52|0;b=c[p>>2]|0;b=b+1|0;c[p>>2]=b;p=c[o>>2]|0;i=q;return p|0}f=(c[h>>2]|0)+8|0;a=l;b=(c[h>>2]|0)+56|0;c[o>>2]=Bl(c[g>>2]|0,c[j>>2]|0,c[j+4>>2]|0,c[k>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[m>>2]|0,c[m+4>>2]|0,c[a>>2]|0,c[a+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0,c[p>>2]|0,c[n>>2]|0)|0;p=c[g>>2]|0;p=p+52|0;b=c[p>>2]|0;b=b+1|0;c[p>>2]=b;p=c[o>>2]|0;i=q;return p|0}function tl(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,j=0,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=i;i=i+80|0;g=v+72|0;h=v+40|0;j=v+32|0;t=v+68|0;q=v+64|0;k=v+60|0;n=v+24|0;o=v+16|0;p=v+8|0;l=v;m=v+56|0;r=v+52|0;s=v+48|0;c[g>>2]=a;a=h;c[a>>2]=b;c[a+4>>2]=d;a=j;c[a>>2]=e;c[a+4>>2]=f;c[t>>2]=0;c[t>>2]=jl(c[g>>2]|0,37,q,0)|0;if(c[t>>2]|0){u=c[t>>2]|0;i=v;return u|0}c[k>>2]=0;f=h;f=pR(c[f>>2]|0,c[f+4>>2]|0,1024,0)|0;f=gR(f|0,C|0,1,0)|0;f=rR(f|0,C|0,1024,0)|0;f=fR(f|0,C|0,1,0)|0;a=n;c[a>>2]=f;c[a+4>>2]=C;a=j;a=rR(c[a>>2]|0,c[a+4>>2]|0,3,0)|0;a=pR(a|0,C|0,2,0)|0;j=o;c[j>>2]=a;c[j+4>>2]=C;j=c[q>>2]|0;a=h;a=gR(c[a>>2]|0,c[a+4>>2]|0,1,0)|0;Me(j,1,a,C)|0;a=n;Me(c[q>>2]|0,2,c[a>>2]|0,c[a+4>>2]|0)|0;while(1){if(100!=(ue(c[q>>2]|0)|0))break;a=p;c[a>>2]=0;c[a+4>>2]=0;yl(c[q>>2]|0,2,l,p);a=p;n=c[a+4>>2]|0;if((n|0)<0|(n|0)==0&(c[a>>2]|0)>>>0<=0){u=6;break}n=p;f=c[n+4>>2]|0;a=o;j=c[a+4>>2]|0;if((f|0)>(j|0)|((f|0)==(j|0)?(c[n>>2]|0)>>>0>(c[a>>2]|0)>>>0:0)){u=6;break}c[k>>2]=1}if((u|0)==6)c[k>>2]=0;c[t>>2]=Zd(c[q>>2]|0)|0;if(!(c[k>>2]|0)){u=c[t>>2]|0;i=v;return u|0}c[m>>2]=0;c[r>>2]=0;c[s>>2]=0;if(!(c[t>>2]|0))c[t>>2]=jl(c[g>>2]|0,38,r,0)|0;if(!(c[t>>2]|0))c[t>>2]=jl(c[g>>2]|0,39,s,0)|0;a:do if(!(c[t>>2]|0)){u=h;Me(c[q>>2]|0,1,c[u>>2]|0,c[u+4>>2]|0)|0;do{if(100!=(ue(c[q>>2]|0)|0))break a;a=c[r>>2]|0;u=c[m>>2]|0;c[m>>2]=u+1;Le(a,1,u)|0;u=c[r>>2]|0;Le(u,2,De(c[q>>2]|0,0)|0)|0;u=c[r>>2]|0;Le(u,3,De(c[q>>2]|0,1)|0)|0;ue(c[r>>2]|0)|0;c[t>>2]=Zd(c[r>>2]|0)|0}while((c[t>>2]|0)==0);Zd(c[q>>2]|0)|0}while(0);if(!(c[t>>2]|0))c[t>>2]=Zd(c[q>>2]|0)|0;if(c[t>>2]|0){u=c[t>>2]|0;i=v;return u|0}u=h;Me(c[s>>2]|0,1,c[u>>2]|0,c[u+4>>2]|0)|0;ue(c[s>>2]|0)|0;c[t>>2]=Zd(c[s>>2]|0)|0;u=c[t>>2]|0;i=v;return u|0}function ul(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}Kd(c[(c[b>>2]|0)+48>>2]|0);Kd(c[(c[b>>2]|0)+36>>2]|0);xl(c[c[b>>2]>>2]|0);Kd(c[b>>2]|0);i=d;return}function vl(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(!(c[b>>2]|0)){i=e;return}c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+4>>2]|0))break;wl(c[(c[c[b>>2]>>2]|0)+(c[d>>2]<<2)>>2]|0);c[d>>2]=(c[d>>2]|0)+1}Kd(c[c[b>>2]>>2]|0);Kd(c[(c[b>>2]|0)+16>>2]|0);c[(c[b>>2]|0)+4>>2]=0;c[c[b>>2]>>2]=0;c[(c[b>>2]|0)+16>>2]=0;i=e;return}function wl(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;if(!(c[b>>2]|0)){a=c[b>>2]|0;Kd(a);i=e;return}if(!(c[(c[b>>2]|0)+56>>2]|0))Kd(c[(c[b>>2]|0)+64>>2]|0);if(!(d[(c[b>>2]|0)+5>>0]|0))Kd(c[(c[b>>2]|0)+40>>2]|0);Ve(c[(c[b>>2]|0)+52>>2]|0)|0;a=c[b>>2]|0;Kd(a);i=e;return}function xl(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;if(!(c[b>>2]|0)){i=f;return}c[d>>2]=c[(c[b>>2]|0)+8>>2];xl(c[c[d>>2]>>2]|0);while(1){if(!(c[d>>2]|0))break;c[e>>2]=c[(c[d>>2]|0)+4>>2];if((c[(c[d>>2]|0)+36>>2]|0)!=((c[d>>2]|0)+40|0))Kd(c[(c[d>>2]|0)+36>>2]|0);Kd(c[(c[d>>2]|0)+28>>2]|0);Kd(c[d>>2]|0);c[d>>2]=c[e>>2]}i=f;return}function yl(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=i;i=i+48|0;p=n+32|0;o=n+28|0;g=n+24|0;h=n+20|0;m=n+16|0;j=n+12|0;k=n+8|0;l=n;c[p>>2]=a;c[o>>2]=b;c[g>>2]=e;c[h>>2]=f;c[m>>2]=Fe(c[p>>2]|0,c[o>>2]|0)|0;if(!(c[m>>2]|0)){i=n;return}c[k>>2]=1;p=l;c[p>>2]=0;c[p+4>>2]=0;c[j>>2]=0;while(1){if((d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0|0)>=48)b=(d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0|0)<=57;else b=0;e=l;a=c[e>>2]|0;e=c[e+4>>2]|0;if(!b)break;p=rR(a|0,e|0,10,0)|0;o=(d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0)-48|0;o=gR(p|0,C|0,o|0,((o|0)<0)<<31>>31|0)|0;p=l;c[p>>2]=o;c[p+4>>2]=C;c[j>>2]=(c[j>>2]|0)+1}p=c[g>>2]|0;c[p>>2]=a;c[p+4>>2]=e;while(1){if((d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0|0)!=32)break;c[j>>2]=(c[j>>2]|0)+1}p=l;c[p>>2]=0;c[p+4>>2]=0;if((d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0|0)==45){c[j>>2]=(c[j>>2]|0)+1;c[k>>2]=-1}while(1){if((d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0|0)>=48)b=(d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0|0)<=57;else b=0;e=l;a=c[e>>2]|0;e=c[e+4>>2]|0;if(!b)break;p=rR(a|0,e|0,10,0)|0;o=(d[(c[m>>2]|0)+(c[j>>2]|0)>>0]|0)-48|0;o=gR(p|0,C|0,o|0,((o|0)<0)<<31>>31|0)|0;p=l;c[p>>2]=o;c[p+4>>2]=C;c[j>>2]=(c[j>>2]|0)+1}o=c[k>>2]|0;o=rR(a|0,e|0,o|0,((o|0)<0)<<31>>31|0)|0;p=c[h>>2]|0;c[p>>2]=o;c[p+4>>2]=C;i=n;return}function zl(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,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;n=m+24|0;g=m;h=m+20|0;j=m+16|0;k=m+12|0;l=m+8|0;c[n>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;c[h>>2]=e;c[j>>2]=f;c[l>>2]=jl(c[n>>2]|0,9,k,0)|0;if(c[l>>2]|0){n=c[l>>2]|0;i=m;return n|0}n=g;Me(c[k>>2]|0,1,c[n>>2]|0,c[n+4>>2]|0)|0;Je(c[k>>2]|0,2,c[h>>2]|0,c[j>>2]|0,0)|0;ue(c[k>>2]|0)|0;c[l>>2]=Zd(c[k>>2]|0)|0;n=c[l>>2]|0;i=m;return n|0}function Al(a,b,d,e,f,g,h,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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=i;i=i+80|0;o=B+72|0;p=B+68|0;q=B+64|0;r=B+24|0;s=B+16|0;t=B+60|0;m=B+56|0;n=B+52|0;A=B+48|0;w=B+44|0;z=B+40|0;u=B+8|0;v=B;x=B+36|0;y=B+32|0;c[o>>2]=a;c[p>>2]=b;c[q>>2]=d;b=r;c[b>>2]=e;c[b+4>>2]=f;b=s;c[b>>2]=g;c[b+4>>2]=h;c[t>>2]=j;c[m>>2]=k;c[n>>2]=l;c[A>>2]=0;if(!(c[c[p>>2]>>2]|0)){j=r;c[w>>2]=Cl(c[p>>2]|0,c[q>>2]|0,c[j>>2]|0,c[j+4>>2]|0)|0;j=s;j=fR(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;l=c[t>>2]|0;c[l>>2]=j;c[l+4>>2]=C;c[c[n>>2]>>2]=(c[(c[p>>2]|0)+32>>2]|0)-(c[w>>2]|0);c[c[m>>2]>>2]=(c[(c[p>>2]|0)+36>>2]|0)+(c[w>>2]|0);A=c[A>>2]|0;i=B;return A|0}l=s;j=c[l+4>>2]|0;k=u;c[k>>2]=c[l>>2];c[k+4>>2]=j;k=r;j=c[k+4>>2]|0;l=v;c[l>>2]=c[k>>2];c[l+4>>2]=j;c[z>>2]=c[(c[p>>2]|0)+8>>2];while(1){if(!((c[z>>2]|0)!=0?(c[A>>2]|0)==0:0))break;l=v;c[x>>2]=Cl(c[z>>2]|0,c[q>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0;c[y>>2]=(c[(c[z>>2]|0)+32>>2]|0)-(c[x>>2]|0);l=u;c[A>>2]=zl(c[o>>2]|0,c[l>>2]|0,c[l+4>>2]|0,(c[(c[z>>2]|0)+36>>2]|0)+(c[x>>2]|0)|0,c[y>>2]|0)|0;l=u;l=gR(c[l>>2]|0,c[l+4>>2]|0,1,0)|0;j=u;c[j>>2]=l;c[j+4>>2]=C;j=(c[(c[z>>2]|0)+12>>2]|0)+1|0;l=v;j=gR(c[l>>2]|0,c[l+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0;l=v;c[l>>2]=j;c[l+4>>2]=C;c[z>>2]=c[(c[z>>2]|0)+4>>2]}if(c[A>>2]|0){A=c[A>>2]|0;i=B;return A|0}j=s;l=u;c[A>>2]=Al(c[o>>2]|0,c[c[p>>2]>>2]|0,(c[q>>2]|0)+1|0,c[j>>2]|0,c[j+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0,c[t>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;A=c[A>>2]|0;i=B;return A|0}function Bl(a,b,d,e,f,g,h,j,k,l,m,n,o,p){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;D=i;i=i+96|0;B=D+40|0;q=D+84|0;E=D+80|0;r=D+32|0;s=D+76|0;t=D+24|0;u=D+16|0;v=D+8|0;w=D;x=D+72|0;y=D+68|0;z=D+64|0;A=D+60|0;C=D+56|0;c[E>>2]=a;a=r;c[a>>2]=b;c[a+4>>2]=d;c[s>>2]=e;a=t;c[a>>2]=f;c[a+4>>2]=g;a=u;c[a>>2]=h;c[a+4>>2]=j;a=v;c[a>>2]=k;c[a+4>>2]=l;a=w;c[a>>2]=m;c[a+4>>2]=n;c[x>>2]=o;c[y>>2]=p;c[A>>2]=jl(c[E>>2]|0,11,z,0)|0;if(!(c[A>>2]|0)){E=r;Me(c[z>>2]|0,1,c[E>>2]|0,c[E+4>>2]|0)|0;Le(c[z>>2]|0,2,c[s>>2]|0)|0;E=t;Me(c[z>>2]|0,3,c[E>>2]|0,c[E+4>>2]|0)|0;E=u;Me(c[z>>2]|0,4,c[E>>2]|0,c[E+4>>2]|0)|0;E=w;do if((c[E>>2]|0)==0&(c[E+4>>2]|0)==0){E=v;Me(c[z>>2]|0,5,c[E>>2]|0,c[E+4>>2]|0)|0}else{e=v;p=c[e+4>>2]|0;o=w;a=c[o>>2]|0;o=c[o+4>>2]|0;E=B;c[E>>2]=c[e>>2];c[E+4>>2]=p;E=B+8|0;c[E>>2]=a;c[E+4>>2]=o;c[C>>2]=Od(24e3,B)|0;if(c[C>>2]|0){Oe(c[z>>2]|0,5,c[C>>2]|0,-1,148)|0;break}c[q>>2]=7;E=c[q>>2]|0;i=D;return E|0}while(0);Je(c[z>>2]|0,6,c[x>>2]|0,c[y>>2]|0,0)|0;ue(c[z>>2]|0)|0;c[A>>2]=Zd(c[z>>2]|0)|0}c[q>>2]=c[A>>2];E=c[q>>2]|0;i=D;return E|0}function Cl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;j=h+16|0;l=h+12|0;k=h;g=h+8|0;c[j>>2]=b;c[l>>2]=d;b=k;c[b>>2]=e;c[b+4>>2]=f;b=k;c[g>>2]=10-(Dl(c[b>>2]|0,c[b+4>>2]|0)|0);a[(c[(c[j>>2]|0)+36>>2]|0)+(c[g>>2]|0)>>0]=c[l>>2];b=k;El((c[(c[j>>2]|0)+36>>2]|0)+((c[g>>2]|0)+1)|0,c[b>>2]|0,c[b+4>>2]|0)|0;i=h;return c[g>>2]|0}function Dl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f;e=f+8|0;g=d;c[g>>2]=a;c[g+4>>2]=b;c[e>>2]=0;do{c[e>>2]=(c[e>>2]|0)+1;b=d;b=hR(c[b>>2]|0,c[b+4>>2]|0,7)|0;g=d;c[g>>2]=b;c[g+4>>2]=C;g=d}while((c[g>>2]|0)!=0|(c[g+4>>2]|0)!=0);i=f;return c[e>>2]|0}function El(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;g=k+20|0;l=k+8|0;h=k+16|0;j=k;c[g>>2]=b;b=l;c[b>>2]=e;c[b+4>>2]=f;c[h>>2]=c[g>>2];e=l;f=c[e+4>>2]|0;b=j;c[b>>2]=c[e>>2];c[b+4>>2]=f;do{l=(c[j>>2]&127|128)&255;b=c[h>>2]|0;c[h>>2]=b+1;a[b>>0]=l;b=j;b=hR(c[b>>2]|0,c[b+4>>2]|0,7)|0;l=j;c[l>>2]=b;c[l+4>>2]=C;l=j}while((c[l>>2]|0)!=0|(c[l+4>>2]|0)!=0);l=(c[h>>2]|0)+-1|0;a[l>>0]=(d[l>>0]|0)&127;i=k;return(c[h>>2]|0)-(c[g>>2]|0)|0}function Fl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;g=h+4|0;f=h;c[d>>2]=a;c[e>>2]=b;c[g>>2]=0;b=(c[e>>2]|0)+8|0;if(!((c[b>>2]|0)!=0|(c[b+4>>2]|0)!=0)){g=c[g>>2]|0;i=h;return g|0}c[g>>2]=jl(c[d>>2]|0,17,f,0)|0;if(c[g>>2]|0){g=c[g>>2]|0;i=h;return g|0}b=(c[e>>2]|0)+8|0;Me(c[f>>2]|0,1,c[b>>2]|0,c[b+4>>2]|0)|0;b=(c[e>>2]|0)+24|0;Me(c[f>>2]|0,2,c[b>>2]|0,c[b+4>>2]|0)|0;ue(c[f>>2]|0)|0;c[g>>2]=Zd(c[f>>2]|0)|0;g=c[g>>2]|0;i=h;return g|0}function Gl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+12|0;j=l+8|0;k=l;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[l+4>>2]=f;c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[h>>2]|0)){g=5;break}if((a[(c[g>>2]|0)+(c[k>>2]|0)>>0]|0)!=(a[(c[j>>2]|0)+(c[k>>2]|0)>>0]|0)){g=5;break}c[k>>2]=(c[k>>2]|0)+1}if((g|0)==5){i=l;return c[k>>2]|0}return 0}function Hl(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,j=0,k=0,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=i;i=i+64|0;m=w+56|0;n=w+52|0;o=w+48|0;p=w+44|0;q=w+40|0;r=w+36|0;u=w+32|0;v=w+28|0;s=w+24|0;g=w+20|0;j=w+16|0;h=w+12|0;k=w+8|0;l=w+4|0;t=w;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;c[u>>2]=c[c[o>>2]>>2];do if(c[u>>2]|0){c[g>>2]=c[(c[u>>2]|0)+32>>2];c[j>>2]=c[g>>2];c[h>>2]=Gl(c[(c[u>>2]|0)+16>>2]|0,c[(c[u>>2]|0)+20>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;c[k>>2]=(c[r>>2]|0)-(c[h>>2]|0);b=c[h>>2]|0;b=Dl(b,((b|0)<0)<<31>>31)|0;e=c[k>>2]|0;e=b+(Dl(e,((e|0)<0)<<31>>31)|0)|0;c[j>>2]=(c[j>>2]|0)+(e+(c[k>>2]|0));if((c[j>>2]|0)>(c[(c[n>>2]|0)+224>>2]|0)?(c[(c[u>>2]|0)+16>>2]|0)!=0:0)break;if((c[j>>2]|0)>(c[(c[n>>2]|0)+224>>2]|0)?(v=Id(c[j>>2]|0)|0,c[(c[u>>2]|0)+36>>2]=v,(c[(c[u>>2]|0)+36>>2]|0)==0):0){c[m>>2]=7;v=c[m>>2]|0;i=w;return v|0}if(c[(c[u>>2]|0)+16>>2]|0){v=c[h>>2]|0;v=El((c[(c[u>>2]|0)+36>>2]|0)+(c[g>>2]|0)|0,v,((v|0)<0)<<31>>31)|0;c[g>>2]=(c[g>>2]|0)+v}v=c[k>>2]|0;v=El((c[(c[u>>2]|0)+36>>2]|0)+(c[g>>2]|0)|0,v,((v|0)<0)<<31>>31)|0;c[g>>2]=(c[g>>2]|0)+v;iR((c[(c[u>>2]|0)+36>>2]|0)+(c[g>>2]|0)|0,(c[q>>2]|0)+(c[h>>2]|0)|0,c[k>>2]|0)|0;c[(c[u>>2]|0)+32>>2]=(c[g>>2]|0)+(c[k>>2]|0);v=(c[u>>2]|0)+12|0;c[v>>2]=(c[v>>2]|0)+1;if(c[p>>2]|0){do if((c[(c[u>>2]|0)+24>>2]|0)<(c[r>>2]|0)){c[l>>2]=Ld(c[(c[u>>2]|0)+28>>2]|0,c[r>>2]<<1)|0;if(c[l>>2]|0){c[(c[u>>2]|0)+24>>2]=c[r>>2]<<1;c[(c[u>>2]|0)+28>>2]=c[l>>2];break}c[m>>2]=7;v=c[m>>2]|0;i=w;return v|0}while(0);c[(c[u>>2]|0)+16>>2]=c[(c[u>>2]|0)+28>>2];iR(c[(c[u>>2]|0)+16>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;c[(c[u>>2]|0)+20>>2]=c[r>>2]}else{c[(c[u>>2]|0)+16>>2]=c[q>>2];c[(c[u>>2]|0)+20>>2]=c[r>>2]}c[m>>2]=0;v=c[m>>2]|0;i=w;return v|0}while(0);c[s>>2]=Id(40+(c[(c[n>>2]|0)+224>>2]|0)|0)|0;if(!(c[s>>2]|0)){c[m>>2]=7;v=c[m>>2]|0;i=w;return v|0}d=c[s>>2]|0;g=d+40|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(g|0));c[(c[s>>2]|0)+32>>2]=11;c[(c[s>>2]|0)+36>>2]=(c[s>>2]|0)+40;if(c[u>>2]|0){c[t>>2]=c[c[u>>2]>>2];c[v>>2]=Hl(c[n>>2]|0,t,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;if(!(c[c[u>>2]>>2]|0))c[c[u>>2]>>2]=c[t>>2];c[(c[u>>2]|0)+4>>2]=c[s>>2];c[(c[s>>2]|0)+8>>2]=c[(c[u>>2]|0)+8>>2];c[c[s>>2]>>2]=c[t>>2];c[(c[s>>2]|0)+28>>2]=c[(c[u>>2]|0)+28>>2];c[(c[s>>2]|0)+24>>2]=c[(c[u>>2]|0)+24>>2];c[(c[u>>2]|0)+28>>2]=0}else{c[(c[s>>2]|0)+8>>2]=c[s>>2];c[v>>2]=Hl(c[n>>2]|0,s,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)|0}c[c[o>>2]>>2]=c[s>>2];c[m>>2]=c[v>>2];v=c[m>>2]|0;i=w;return v|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=((c[(c[d>>2]|0)+80>>2]|0)==0&1)-((c[(c[e>>2]|0)+80>>2]|0)==0&1);if(c[f>>2]|0){f=c[f>>2]|0;i=g;return f|0}a=(c[d>>2]|0)+88|0;b=(c[e>>2]|0)+88|0;if((c[a>>2]|0)==(c[b>>2]|0)?(c[a+4>>2]|0)==(c[b+4>>2]|0):0){c[f>>2]=(c[c[e>>2]>>2]|0)-(c[c[d>>2]>>2]|0);f=c[f>>2]|0;i=g;return f|0}else{a=(c[d>>2]|0)+88|0;d=c[a+4>>2]|0;b=(c[e>>2]|0)+88|0;e=c[b+4>>2]|0;c[f>>2]=(d|0)<(e|0)|((d|0)==(e|0)?(c[a>>2]|0)>>>0<(c[b>>2]|0)>>>0:0)?1:-1;f=c[f>>2]|0;i=g;return f|0}return 0}function Jl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=((c[(c[d>>2]|0)+80>>2]|0)==0&1)-((c[(c[e>>2]|0)+80>>2]|0)==0&1);if(c[f>>2]|0){f=c[f>>2]|0;i=g;return f|0}a=(c[d>>2]|0)+88|0;b=(c[e>>2]|0)+88|0;if((c[a>>2]|0)==(c[b>>2]|0)?(c[a+4>>2]|0)==(c[b+4>>2]|0):0){c[f>>2]=(c[c[e>>2]>>2]|0)-(c[c[d>>2]>>2]|0);f=c[f>>2]|0;i=g;return f|0}else{a=(c[d>>2]|0)+88|0;d=c[a+4>>2]|0;b=(c[e>>2]|0)+88|0;e=c[b+4>>2]|0;c[f>>2]=(d|0)>(e|0)|((d|0)==(e|0)?(c[a>>2]|0)>>>0>(c[b>>2]|0)>>>0:0)?1:-1;f=c[f>>2]|0;i=g;return f|0}return 0}function Kl(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;if(d[(c[b>>2]|0)+5>>0]|0){a=c[b>>2]|0;a=a+40|0;c[a>>2]=0;i=e;return}Kd(c[(c[b>>2]|0)+40>>2]|0);Ve(c[(c[b>>2]|0)+52>>2]|0)|0;c[(c[b>>2]|0)+52>>2]=0;a=c[b>>2]|0;a=a+40|0;c[a>>2]=0;i=e;return}function Ll(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+64|0;s=v+52|0;g=v+48|0;t=v+44|0;h=v+40|0;q=v+36|0;u=v+32|0;o=v+28|0;p=v+24|0;l=v+20|0;j=v+16|0;m=v+12|0;k=v+8|0;n=v+4|0;r=v;c[g>>2]=b;c[t>>2]=e;c[h>>2]=f;f=c[t>>2]|0;if(c[(c[t>>2]|0)+72>>2]|0)c[u>>2]=(c[(c[t>>2]|0)+72>>2]|0)+(c[f+76>>2]|0);else c[u>>2]=c[f+40>>2];if(!((c[u>>2]|0)!=0?(c[u>>2]|0)>>>0<((c[(c[t>>2]|0)+40>>2]|0)+(c[(c[t>>2]|0)+44>>2]|0)|0)>>>0:0)){f=c[t>>2]|0;if(c[(c[t>>2]|0)+56>>2]|0){c[l>>2]=c[c[f+56>>2]>>2];Kd(c[(c[t>>2]|0)+40>>2]|0);c[(c[t>>2]|0)+40>>2]=0;do if(c[l>>2]|0){c[m>>2]=c[(c[l>>2]|0)+8>>2];c[k>>2]=(c[c[m>>2]>>2]|0)+1;c[(c[t>>2]|0)+64>>2]=c[(c[l>>2]|0)+12>>2];c[(c[t>>2]|0)+60>>2]=c[(c[l>>2]|0)+16>>2];c[j>>2]=Id(c[k>>2]|0)|0;if(c[j>>2]|0){iR(c[j>>2]|0,c[(c[m>>2]|0)+4>>2]|0,c[k>>2]|0)|0;u=c[k>>2]|0;c[(c[t>>2]|0)+76>>2]=u;c[(c[t>>2]|0)+44>>2]=u;u=c[j>>2]|0;c[(c[t>>2]|0)+72>>2]=u;c[(c[t>>2]|0)+40>>2]=u;u=(c[t>>2]|0)+56|0;c[u>>2]=(c[u>>2]|0)+4;break}c[s>>2]=7;u=c[s>>2]|0;i=v;return u|0}while(0);c[s>>2]=0;u=c[s>>2]|0;i=v;return u|0}Kl(f);l=(c[t>>2]|0)+32|0;j=c[l+4>>2]|0;m=(c[t>>2]|0)+16|0;k=c[m+4>>2]|0;if((j|0)>(k|0)|((j|0)==(k|0)?(c[l>>2]|0)>>>0>=(c[m>>2]|0)>>>0:0)){c[s>>2]=0;u=c[s>>2]|0;i=v;return u|0}k=c[g>>2]|0;j=(c[t>>2]|0)+32|0;l=j;l=gR(c[l>>2]|0,c[l+4>>2]|0,1,0)|0;m=C;c[j>>2]=l;c[j+4>>2]=m;c[q>>2]=am(k,l,m,(c[t>>2]|0)+40|0,(c[t>>2]|0)+44|0,(c[h>>2]|0)!=0?(c[t>>2]|0)+48|0:0)|0;if(c[q>>2]|0){c[s>>2]=c[q>>2];u=c[s>>2]|0;i=v;return u|0}if((c[h>>2]|0)!=0?(c[(c[t>>2]|0)+48>>2]|0)<(c[(c[t>>2]|0)+44>>2]|0):0){c[(c[t>>2]|0)+52>>2]=c[(c[g>>2]|0)+244>>2];c[(c[g>>2]|0)+244>>2]=0}c[u>>2]=c[(c[t>>2]|0)+40>>2]}c[q>>2]=Yl(c[t>>2]|0,c[u>>2]|0,20)|0;if(c[q>>2]|0){c[s>>2]=c[q>>2];u=c[s>>2]|0;i=v;return u|0}f=c[u>>2]|0;if(d[c[u>>2]>>0]&128)f=Vl(f,o)|0;else{c[o>>2]=d[f>>0];f=1}c[u>>2]=(c[u>>2]|0)+f;f=c[u>>2]|0;if(d[c[u>>2]>>0]&128)f=Vl(f,p)|0;else{c[p>>2]=d[f>>0];f=1}c[u>>2]=(c[u>>2]|0)+f;if(!((c[o>>2]|0)<0|(c[p>>2]|0)<=0)?((c[u>>2]|0)+(c[p>>2]|0)|0)>>>0<=((c[(c[t>>2]|0)+40>>2]|0)+(c[(c[t>>2]|0)+44>>2]|0)|0)>>>0:0){do if(((c[o>>2]|0)+(c[p>>2]|0)|0)>(c[(c[t>>2]|0)+68>>2]|0)){c[n>>2]=(c[o>>2]|0)+(c[p>>2]|0)<<1;c[r>>2]=Ld(c[(c[t>>2]|0)+64>>2]|0,c[n>>2]|0)|0;if(c[r>>2]|0){c[(c[t>>2]|0)+64>>2]=c[r>>2];c[(c[t>>2]|0)+68>>2]=c[n>>2];break}c[s>>2]=7;u=c[s>>2]|0;i=v;return u|0}while(0);c[q>>2]=Yl(c[t>>2]|0,c[u>>2]|0,(c[p>>2]|0)+10|0)|0;if(c[q>>2]|0){c[s>>2]=c[q>>2];u=c[s>>2]|0;i=v;return u|0}iR((c[(c[t>>2]|0)+64>>2]|0)+(c[o>>2]|0)|0,c[u>>2]|0,c[p>>2]|0)|0;c[(c[t>>2]|0)+60>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[u>>2]=(c[u>>2]|0)+(c[p>>2]|0);f=c[u>>2]|0;if(d[c[u>>2]>>0]&128)f=Vl(f,(c[t>>2]|0)+76|0)|0;else{c[(c[t>>2]|0)+76>>2]=d[f>>0];f=1}c[u>>2]=(c[u>>2]|0)+f;c[(c[t>>2]|0)+72>>2]=c[u>>2];c[(c[t>>2]|0)+80>>2]=0;do if(((c[(c[t>>2]|0)+72>>2]|0)+(c[(c[t>>2]|0)+76>>2]|0)|0)>>>0<=((c[(c[t>>2]|0)+40>>2]|0)+(c[(c[t>>2]|0)+44>>2]|0)|0)>>>0){if((c[(c[t>>2]|0)+48>>2]|0)==0?(a[(c[(c[t>>2]|0)+72>>2]|0)+((c[(c[t>>2]|0)+76>>2]|0)-1)>>0]|0)!=0:0)break;c[s>>2]=0;u=c[s>>2]|0;i=v;return u|0}while(0);c[s>>2]=267;u=c[s>>2]|0;i=v;return u|0}c[s>>2]=267;u=c[s>>2]|0;i=v;return u|0}function Ml(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[d>>2]=a;c[e>>2]=b;if((c[(c[d>>2]|0)+40>>2]|0)!=0?(c[(c[e>>2]|0)+40>>2]|0)!=0:0){c[g>>2]=(c[(c[d>>2]|0)+60>>2]|0)-(c[(c[e>>2]|0)+60>>2]|0);a=c[(c[d>>2]|0)+64>>2]|0;b=c[(c[e>>2]|0)+64>>2]|0;if((c[g>>2]|0)<0)c[f>>2]=vQ(a,b,c[(c[d>>2]|0)+60>>2]|0)|0;else c[f>>2]=vQ(a,b,c[(c[e>>2]|0)+60>>2]|0)|0;if(!(c[f>>2]|0))c[f>>2]=c[g>>2]}else c[f>>2]=((c[(c[d>>2]|0)+40>>2]|0)==0&1)-((c[(c[e>>2]|0)+40>>2]|0)==0&1);if(c[f>>2]|0){g=c[f>>2]|0;i=h;return g|0}c[f>>2]=(c[c[e>>2]>>2]|0)-(c[c[d>>2]>>2]|0);g=c[f>>2]|0;i=h;return g|0}function Nl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+24|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if((c[h>>2]|0)==(c[g>>2]|0))c[h>>2]=(c[h>>2]|0)+-1;c[k>>2]=(c[h>>2]|0)-1;while(1){if((c[k>>2]|0)<0)break;c[l>>2]=c[k>>2];while(1){if((c[l>>2]|0)>=((c[g>>2]|0)-1|0))break;if((Yb[c[j>>2]&255](c[(c[f>>2]|0)+(c[l>>2]<<2)>>2]|0,c[(c[f>>2]|0)+((c[l>>2]|0)+1<<2)>>2]|0)|0)<0)break;c[m>>2]=c[(c[f>>2]|0)+((c[l>>2]|0)+1<<2)>>2];c[(c[f>>2]|0)+((c[l>>2]|0)+1<<2)>>2]=c[(c[f>>2]|0)+(c[l>>2]<<2)>>2];c[(c[f>>2]|0)+(c[l>>2]<<2)>>2]=c[m>>2];c[l>>2]=(c[l>>2]|0)+1}c[k>>2]=(c[k>>2]|0)+-1}i=n;return}function Ol(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;do if((c[h>>2]|0)>(c[(c[f>>2]|0)+20>>2]|0)){c[(c[f>>2]|0)+20>>2]=c[h>>2]<<1;c[j>>2]=Ld(c[(c[f>>2]|0)+16>>2]|0,c[(c[f>>2]|0)+20>>2]|0)|0;if(c[j>>2]|0){c[(c[f>>2]|0)+16>>2]=c[j>>2];break}c[e>>2]=7;j=c[e>>2]|0;i=k;return j|0}while(0);iR(c[(c[f>>2]|0)+16>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;c[e>>2]=0;j=c[e>>2]|0;i=k;return j|0}function Pl(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+12|0;f=k+8|0;j=k+4|0;g=k+16|0;h=k;c[l>>2]=b;c[f>>2]=e;c[j>>2]=0;if((d[(c[l>>2]|0)+231>>0]|0|0)!=0?(c[(c[f>>2]|0)+56>>2]|0)!=0:0){a[g>>0]=0;l=(c[f>>2]|0)+88|0;c[l>>2]=0;c[l+4>>2]=0;c[(c[f>>2]|0)+84>>2]=0;Wl(0,c[(c[f>>2]|0)+72>>2]|0,c[(c[f>>2]|0)+76>>2]|0,(c[f>>2]|0)+80|0,(c[f>>2]|0)+88|0,(c[f>>2]|0)+84|0,g);l=c[j>>2]|0;i=k;return l|0}c[j>>2]=Yl(c[f>>2]|0,c[(c[f>>2]|0)+72>>2]|0,10)|0;if(c[j>>2]|0){l=c[j>>2]|0;i=k;return l|0}c[h>>2]=Ul(c[(c[f>>2]|0)+72>>2]|0,(c[f>>2]|0)+88|0)|0;c[(c[f>>2]|0)+80>>2]=(c[(c[f>>2]|0)+72>>2]|0)+(c[h>>2]|0);l=c[j>>2]|0;i=k;return l|0}function Ql(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+48|0;s=u+36|0;t=u+32|0;r=u+28|0;h=u+24|0;j=u+20|0;q=u+16|0;o=u+12|0;l=u+41|0;k=u+40|0;p=u+8|0;n=u;c[t>>2]=b;c[r>>2]=e;c[h>>2]=f;c[j>>2]=g;c[q>>2]=0;c[o>>2]=c[(c[r>>2]|0)+80>>2];a[l>>0]=0;do if((d[(c[t>>2]|0)+231>>0]|0)!=0?(c[(c[r>>2]|0)+56>>2]|0)!=0:0){a[k>>0]=0;if(c[h>>2]|0){c[c[h>>2]>>2]=c[(c[r>>2]|0)+80>>2];c[c[j>>2]>>2]=(c[(c[r>>2]|0)+84>>2]|0)-1}Wl(0,c[(c[r>>2]|0)+72>>2]|0,c[(c[r>>2]|0)+76>>2]|0,o,(c[r>>2]|0)+88|0,(c[r>>2]|0)+84|0,k);if(a[k>>0]|0){c[(c[r>>2]|0)+80>>2]=0;break}else{c[(c[r>>2]|0)+80>>2]=c[o>>2];break}}else m=8;while(0);do if((m|0)==8){c[p>>2]=(c[(c[r>>2]|0)+72>>2]|0)+(c[(c[r>>2]|0)+76>>2]|0);while(1){if(a[c[o>>2]>>0]|a[l>>0]){f=c[o>>2]|0;c[o>>2]=f+1;a[l>>0]=a[f>>0]&128;continue}if(!(c[(c[r>>2]|0)+52>>2]|0))break;if((c[o>>2]|0)>>>0<((c[(c[r>>2]|0)+40>>2]|0)+(c[(c[r>>2]|0)+48>>2]|0)|0)>>>0)break;c[q>>2]=Xl(c[r>>2]|0)|0;if(c[q>>2]|0){m=14;break}}if((m|0)==14){c[s>>2]=c[q>>2];t=c[s>>2]|0;i=u;return t|0}c[o>>2]=(c[o>>2]|0)+1;if(c[h>>2]|0){c[c[h>>2]>>2]=c[(c[r>>2]|0)+80>>2];c[c[j>>2]>>2]=(c[o>>2]|0)-(c[(c[r>>2]|0)+80>>2]|0)-1}while(1){if((c[o>>2]|0)>>>0<(c[p>>2]|0)>>>0)h=(a[c[o>>2]>>0]|0)==0;else h=0;j=c[o>>2]|0;if(!h)break;c[o>>2]=j+1}h=c[r>>2]|0;if(j>>>0>=(c[p>>2]|0)>>>0){c[h+80>>2]=0;break}c[q>>2]=Yl(h,c[o>>2]|0,10)|0;if(!(c[q>>2]|0)){e=c[o>>2]|0;e=e+(Ul(c[o>>2]|0,n)|0)|0;c[(c[r>>2]|0)+80>>2]=e;e=n;l=c[e>>2]|0;e=c[e+4>>2]|0;h=(c[r>>2]|0)+88|0;k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;if(a[(c[t>>2]|0)+231>>0]|0){r=fR(j|0,k|0,l|0,e|0)|0;t=h;c[t>>2]=r;c[t+4>>2]=C;break}else{r=gR(j|0,k|0,l|0,e|0)|0;t=h;c[t>>2]=r;c[t+4>>2]=C;break}}}while(0);c[s>>2]=0;t=c[s>>2]|0;i=u;return t|0}function Rl(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;h=t+32|0;j=t+28|0;k=t+24|0;l=t+20|0;r=t+16|0;o=t+12|0;q=t+8|0;n=t+4|0;p=t;m=t+36|0;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[r>>2]=c[c[k>>2]>>2];c[o>>2]=c[c[l>>2]>>2];c[q>>2]=(c[r>>2]|0)+(c[o>>2]|0);c[n>>2]=0;c[p>>2]=c[r>>2];while(1){a[m>>0]=0;while(1){if((c[p>>2]|0)>>>0>=(c[q>>2]|0)>>>0)break;if(!((a[m>>0]|a[c[p>>2]>>0])&254))break;f=c[p>>2]|0;c[p>>2]=f+1;a[m>>0]=a[f>>0]&128}e=(c[p>>2]|0)-(c[r>>2]|0)|0;if((c[h>>2]|0)==(c[n>>2]|0)){s=7;break}c[o>>2]=(c[o>>2]|0)-e;c[r>>2]=c[p>>2];if(!(c[o>>2]|0))break;c[p>>2]=(c[r>>2]|0)+1;e=c[p>>2]|0;if(d[c[p>>2]>>0]&128)e=Vl(e,n)|0;else{c[n>>2]=d[e>>0];e=1}c[p>>2]=(c[p>>2]|0)+e}if((s|0)==7)c[o>>2]=e;if(!(c[j>>2]|0)){s=c[r>>2]|0;r=c[k>>2]|0;c[r>>2]=s;r=c[o>>2]|0;s=c[l>>2]|0;c[s>>2]=r;i=t;return}if(((c[r>>2]|0)+(c[o>>2]|0)|0)==(c[q>>2]|0)){s=c[r>>2]|0;r=c[k>>2]|0;c[r>>2]=s;r=c[o>>2]|0;s=c[l>>2]|0;c[s>>2]=r;i=t;return}kR((c[r>>2]|0)+(c[o>>2]|0)|0,0,(c[q>>2]|0)-((c[r>>2]|0)+(c[o>>2]|0))|0)|0;s=c[r>>2]|0;r=c[k>>2]|0;c[r>>2]=s;r=c[o>>2]|0;s=c[l>>2]|0;c[s>>2]=r;i=t;return}function Sl(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=i;i=i+48|0;h=p+8|0;r=p+40|0;q=p+36|0;j=p+32|0;m=p+28|0;k=p+24|0;n=p+20|0;o=p+16|0;l=p;s=h;c[s>>2]=b;c[s+4>>2]=d;c[r>>2]=e;c[q>>2]=f;c[j>>2]=g;c[m>>2]=0;c[k>>2]=0;c[n>>2]=c[r>>2];c[o>>2]=(c[r>>2]|0)+(c[q>>2]|0);if((a[c[n>>2]>>0]|0)!=1){if((a[c[n>>2]>>0]|0)==2){s=h;s=El((c[j>>2]|0)+(c[m>>2]|0)|0,c[s>>2]|0,c[s+4>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+s;s=c[m>>2]|0;c[m>>2]=s+1;a[(c[j>>2]|0)+s>>0]=2;c[k>>2]=1}Tl(0,n)}while(1){if((c[n>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;if((a[c[n>>2]>>0]|0)!=1)break;c[n>>2]=(c[n>>2]|0)+1;s=Ul(c[n>>2]|0,l)|0;c[n>>2]=(c[n>>2]|0)+s;if((a[c[n>>2]>>0]|0)==2){if(!(c[k>>2]|0)){s=h;s=El((c[j>>2]|0)+(c[m>>2]|0)|0,c[s>>2]|0,c[s+4>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+s;c[k>>2]=1}s=c[m>>2]|0;c[m>>2]=s+1;a[(c[j>>2]|0)+s>>0]=1;s=l;s=El((c[j>>2]|0)+(c[m>>2]|0)|0,c[s>>2]|0,c[s+4>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+s;s=c[m>>2]|0;c[m>>2]=s+1;a[(c[j>>2]|0)+s>>0]=2}Tl(0,n)}if(!(c[k>>2]|0)){s=c[m>>2]|0;i=p;return s|0}s=c[m>>2]|0;c[m>>2]=s+1;a[(c[j>>2]|0)+s>>0]=0;s=c[m>>2]|0;i=p;return s|0}function Tl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+16|0;f=l+12|0;k=l+8|0;g=l+20|0;h=l+4|0;j=l;c[e>>2]=b;c[f>>2]=d;c[k>>2]=c[c[f>>2]>>2];a[g>>0]=0;while(1){if(!(254&(a[c[k>>2]>>0]|a[g>>0])))break;d=c[k>>2]|0;c[k>>2]=d+1;a[g>>0]=a[d>>0]&128}if(!(c[e>>2]|0)){b=c[k>>2]|0;d=c[f>>2]|0;c[d>>2]=b;i=l;return}c[h>>2]=(c[k>>2]|0)-(c[c[f>>2]>>2]|0);c[j>>2]=c[c[e>>2]>>2];iR(c[j>>2]|0,c[c[f>>2]>>2]|0,c[h>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[h>>2]|0);c[c[e>>2]>>2]=c[j>>2];b=c[k>>2]|0;d=c[f>>2]|0;c[d>>2]=b;i=l;return}function Ul(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;e=n+36|0;f=n+32|0;g=n+28|0;l=n+24|0;h=n+20|0;j=n+8|0;m=n+16|0;k=n;c[f>>2]=b;c[g>>2]=d;c[l>>2]=c[f>>2];b=c[f>>2]|0;c[f>>2]=b+1;c[h>>2]=a[b>>0];b=c[h>>2]|0;if(!(c[h>>2]&128)){m=c[g>>2]|0;c[m>>2]=b;c[m+4>>2]=0;c[e>>2]=1;m=c[e>>2]|0;i=n;return m|0}d=c[f>>2]|0;c[f>>2]=d+1;c[h>>2]=b&127|a[d>>0]<<7;b=c[h>>2]|0;if(!(c[h>>2]&16384)){m=c[g>>2]|0;c[m>>2]=b;c[m+4>>2]=0;c[e>>2]=2;m=c[e>>2]|0;i=n;return m|0}d=c[f>>2]|0;c[f>>2]=d+1;c[h>>2]=b&16383|a[d>>0]<<14;b=c[h>>2]|0;if(!(c[h>>2]&2097152)){m=c[g>>2]|0;c[m>>2]=b;c[m+4>>2]=0;c[e>>2]=3;m=c[e>>2]|0;i=n;return m|0}d=c[f>>2]|0;c[f>>2]=d+1;c[h>>2]=b&2097151|a[d>>0]<<21;b=c[h>>2]|0;if(!(c[h>>2]&268435456)){m=c[g>>2]|0;c[m>>2]=b;c[m+4>>2]=0;c[e>>2]=4;m=c[e>>2]|0;i=n;return m|0}h=j;c[h>>2]=b&268435455;c[h+4>>2]=0;c[m>>2]=28;while(1){if((c[m>>2]|0)>63)break;h=c[f>>2]|0;c[f>>2]=h+1;h=a[h>>0]|0;d=k;c[d>>2]=h;c[d+4>>2]=((h|0)<0)<<31>>31;d=lR(c[k>>2]&127|0,0,c[m>>2]|0)|0;h=j;d=gR(c[h>>2]|0,c[h+4>>2]|0,d|0,C|0)|0;h=j;c[h>>2]=d;c[h+4>>2]=C;if((c[k>>2]&128|0)==0&0==0)break;c[m>>2]=(c[m>>2]|0)+7}k=c[j+4>>2]|0;m=c[g>>2]|0;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[e>>2]=(c[f>>2]|0)-(c[l>>2]|0);m=c[e>>2]|0;i=n;return m|0}function Vl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;c[f>>2]=d+1;c[h>>2]=a[d>>0];d=c[h>>2]&127;b=c[f>>2]|0;c[f>>2]=b+1;c[h>>2]=d|a[b>>0]<<7;b=c[h>>2]|0;if(!(c[h>>2]&16384)){c[c[g>>2]>>2]=b;c[e>>2]=2;h=c[e>>2]|0;i=j;return h|0}d=c[f>>2]|0;c[f>>2]=d+1;c[h>>2]=b&16383|a[d>>0]<<14;b=c[h>>2]|0;if(!(c[h>>2]&2097152)){c[c[g>>2]>>2]=b;c[e>>2]=3;h=c[e>>2]|0;i=j;return h|0}d=c[f>>2]|0;c[f>>2]=d+1;c[h>>2]=b&2097151|a[d>>0]<<21;b=c[h>>2]|0;if(!(c[h>>2]&268435456)){c[c[g>>2]>>2]=b;c[e>>2]=4;h=c[e>>2]|0;i=j;return h|0}else{c[h>>2]=b&268435455;c[c[g>>2]>>2]=c[h>>2]|(a[c[f>>2]>>0]&15)<<28;c[e>>2]=5;h=c[e>>2]|0;i=j;return h|0}return 0}function Wl(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+80|0;k=B+76|0;l=B+72|0;m=B+68|0;n=B+64|0;o=B+60|0;p=B+56|0;q=B+52|0;w=B+48|0;t=B+16|0;z=B+44|0;x=B+40|0;y=B+36|0;u=B+32|0;r=B+8|0;v=B+28|0;s=B;A=B+24|0;c[k>>2]=b;c[l>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=j;c[w>>2]=c[c[n>>2]>>2];if(c[w>>2]|0){c[v>>2]=(c[k>>2]|0)!=0?-1:1;_l(w,c[l>>2]|0,s);f=c[v>>2]|0;h=s;h=rR(f|0,((f|0)<0)<<31>>31|0,c[h>>2]|0,c[h+4>>2]|0)|0;f=c[o>>2]|0;g=f;h=fR(c[g>>2]|0,c[g+4>>2]|0,h|0,C|0)|0;c[f>>2]=h;c[f+4>>2]=C;if((c[w>>2]|0)==(c[l>>2]|0))a[c[q>>2]>>0]=1;else{c[A>>2]=c[w>>2];$l(c[l>>2]|0,w);c[c[p>>2]>>2]=(c[A>>2]|0)-(c[w>>2]|0)}c[c[n>>2]>>2]=c[w>>2];i=B;return}f=t;c[f>>2]=0;c[f+4>>2]=0;c[z>>2]=0;c[x>>2]=c[l>>2];c[y>>2]=(c[l>>2]|0)+(c[m>>2]|0);c[u>>2]=1;while(1){if((c[x>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break;f=Ul(c[x>>2]|0,r)|0;c[x>>2]=(c[x>>2]|0)+f;f=c[u>>2]|0;h=r;h=rR(f|0,((f|0)<0)<<31>>31|0,c[h>>2]|0,c[h+4>>2]|0)|0;f=t;h=gR(c[f>>2]|0,c[f+4>>2]|0,h|0,C|0)|0;f=t;c[f>>2]=h;c[f+4>>2]=C;c[z>>2]=c[x>>2];Zl(0,x);while(1){if((c[x>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break;if(a[c[x>>2]>>0]|0)break;c[x>>2]=(c[x>>2]|0)+1}c[u>>2]=(c[k>>2]|0)!=0?-1:1}c[c[p>>2]>>2]=(c[y>>2]|0)-(c[z>>2]|0);c[c[n>>2]>>2]=c[z>>2];g=t;h=c[g+4>>2]|0;f=c[o>>2]|0;c[f>>2]=c[g>>2];c[f+4>>2]=h;i=B;return}function Xl(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;e=g+8|0;d=g+4|0;f=g;c[e>>2]=b;if(((c[(c[e>>2]|0)+44>>2]|0)-(c[(c[e>>2]|0)+48>>2]|0)|0)<4096)b=(c[(c[e>>2]|0)+44>>2]|0)-(c[(c[e>>2]|0)+48>>2]|0)|0;else b=4096;c[d>>2]=b;c[f>>2]=We(c[(c[e>>2]|0)+52>>2]|0,(c[(c[e>>2]|0)+40>>2]|0)+(c[(c[e>>2]|0)+48>>2]|0)|0,c[d>>2]|0,c[(c[e>>2]|0)+48>>2]|0)|0;if(c[f>>2]|0){f=c[f>>2]|0;i=g;return f|0}b=(c[e>>2]|0)+48|0;c[b>>2]=(c[b>>2]|0)+(c[d>>2]|0);b=(c[(c[e>>2]|0)+40>>2]|0)+(c[(c[e>>2]|0)+48>>2]|0)|0;d=b+20|0;do{a[b>>0]=0;b=b+1|0}while((b|0)<(d|0));if((c[(c[e>>2]|0)+48>>2]|0)!=(c[(c[e>>2]|0)+44>>2]|0)){f=c[f>>2]|0;i=g;return f|0}Ve(c[(c[e>>2]|0)+52>>2]|0)|0;c[(c[e>>2]|0)+52>>2]=0;c[(c[e>>2]|0)+48>>2]=0;f=c[f>>2]|0;i=g;return f|0}function Yl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=0;while(1){if(!((c[h>>2]|0)==0?(c[(c[e>>2]|0)+52>>2]|0)!=0:0)){e=5;break}if(((c[f>>2]|0)-(c[(c[e>>2]|0)+40>>2]|0)+(c[g>>2]|0)|0)<=(c[(c[e>>2]|0)+48>>2]|0)){ +e=5;break}c[h>>2]=Xl(c[e>>2]|0)|0}if((e|0)==5){i=j;return c[h>>2]|0}return 0}function Zl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+16|0;f=l+12|0;k=l+8|0;g=l+20|0;h=l+4|0;j=l;c[e>>2]=b;c[f>>2]=d;c[k>>2]=c[c[f>>2]>>2];a[g>>0]=0;while(1){d=(a[c[k>>2]>>0]|a[g>>0]|0)!=0;b=c[k>>2]|0;c[k>>2]=b+1;if(!d)break;a[g>>0]=a[b>>0]&128}if(!(c[e>>2]|0)){j=c[k>>2]|0;k=c[f>>2]|0;c[k>>2]=j;i=l;return}c[h>>2]=(c[k>>2]|0)-(c[c[f>>2]>>2]|0);c[j>>2]=c[c[e>>2]>>2];iR(c[j>>2]|0,c[c[f>>2]>>2]|0,c[h>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[h>>2]|0);c[c[e>>2]>>2]=c[j>>2];j=c[k>>2]|0;k=c[f>>2]|0;c[k>>2]=j;i=l;return}function _l(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+20|0;g=l+16|0;h=l+12|0;j=l;k=l+8|0;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[k>>2]=(c[c[f>>2]>>2]|0)+-2;while(1){if((c[k>>2]|0)>>>0<(c[g>>2]|0)>>>0)break;if(!(a[c[k>>2]>>0]&128))break;c[k>>2]=(c[k>>2]|0)+-1}c[k>>2]=(c[k>>2]|0)+1;c[c[f>>2]>>2]=c[k>>2];Ul(c[k>>2]|0,j)|0;d=j;e=c[d+4>>2]|0;b=c[h>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=e;i=l;return}function $l(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;e=k+8|0;f=k+4|0;h=k;g=k+12|0;c[e>>2]=b;c[f>>2]=d;c[h>>2]=(c[c[f>>2]>>2]|0)+-2;a[g>>0]=0;do{if((c[h>>2]|0)>>>0<=(c[e>>2]|0)>>>0)break;d=c[h>>2]|0;c[h>>2]=d+-1;d=a[d>>0]|0;a[g>>0]=d}while((d<<24>>24|0)==0);while(1){if((c[h>>2]|0)>>>0>(c[e>>2]|0)>>>0)d=(a[c[h>>2]>>0]&128|a[g>>0]|0)!=0;else d=0;b=c[h>>2]|0;if(!d)break;c[h>>2]=b+-1;a[g>>0]=a[b>>0]|0}if(b>>>0<=(c[e>>2]|0)>>>0){if((a[g>>0]|0)==0?(c[c[f>>2]>>2]|0)>>>0>((c[h>>2]|0)+2|0)>>>0:0)j=11}else j=11;if((j|0)==11)c[h>>2]=(c[h>>2]|0)+2;do{j=c[h>>2]|0;c[h>>2]=j+1}while((a[j>>0]&128|0)!=0);c[c[f>>2]>>2]=c[h>>2];i=k;return}function am(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;o=t+8|0;p=t+40|0;j=t+36|0;k=t;q=t+32|0;l=t+28|0;m=t+24|0;s=t+20|0;n=t+16|0;r=t+12|0;c[j>>2]=b;b=k;c[b>>2]=d;c[b+4>>2]=e;c[q>>2]=f;c[l>>2]=g;c[m>>2]=h;d=c[j>>2]|0;if(c[(c[j>>2]|0)+244>>2]|0){o=k;c[s>>2]=Ye(c[d+244>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0}else{if(0==(c[d+240>>2]|0)?(c[o>>2]=c[(c[j>>2]|0)+20>>2],o=Od(24010,o)|0,c[(c[j>>2]|0)+240>>2]=o,0==(c[(c[j>>2]|0)+240>>2]|0)):0){c[p>>2]=7;s=c[p>>2]|0;i=t;return s|0}o=k;c[s>>2]=Ue(c[(c[j>>2]|0)+12>>2]|0,c[(c[j>>2]|0)+16>>2]|0,c[(c[j>>2]|0)+240>>2]|0,24022,c[o>>2]|0,c[o+4>>2]|0,0,(c[j>>2]|0)+244|0)|0}if((c[s>>2]|0)==0?(c[n>>2]=Xe(c[(c[j>>2]|0)+244>>2]|0)|0,c[c[l>>2]>>2]=c[n>>2],(c[q>>2]|0)!=0):0){c[r>>2]=Id((c[n>>2]|0)+20|0)|0;if(c[r>>2]|0){if((c[m>>2]|0)!=0&(c[n>>2]|0)>16384){c[n>>2]=4096;c[c[m>>2]>>2]=c[n>>2]}c[s>>2]=We(c[(c[j>>2]|0)+244>>2]|0,c[r>>2]|0,c[n>>2]|0,0)|0;d=(c[r>>2]|0)+(c[n>>2]|0)|0;e=d+20|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(e|0));if(c[s>>2]|0){Kd(c[r>>2]|0);c[r>>2]=0}}else c[s>>2]=7;c[c[q>>2]>>2]=c[r>>2]}c[p>>2]=c[s>>2];s=c[p>>2]|0;i=t;return s|0}function bm(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;n=r+36|0;g=r+32|0;o=r+28|0;h=r+24|0;j=r+20|0;k=r+16|0;p=r+12|0;m=r+8|0;l=r+4|0;q=r;c[g>>2]=a;c[o>>2]=b;c[h>>2]=e;c[j>>2]=f;c[p>>2]=c[(c[o>>2]|0)+4>>2];c[k>>2]=0;a:while(1){if(c[(c[o>>2]|0)+28>>2]|0){g=12;break}if((c[k>>2]|0)>=(c[(c[o>>2]|0)+4>>2]|0)){g=12;break}c[m>>2]=0;c[l>>2]=c[(c[c[o>>2]>>2]|0)+(c[k>>2]<<2)>>2];do{c[q>>2]=Ll(c[g>>2]|0,c[l>>2]|0,0)|0;if(c[q>>2]|0){g=6;break a}if(!(c[h>>2]|0))break;e=cm(c[l>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;c[m>>2]=e}while((e|0)<0);if((c[m>>2]|0)!=0?(d[(c[l>>2]|0)+4>>0]|0|0)!=0:0)Kl(c[l>>2]|0);c[k>>2]=(c[k>>2]|0)+1}if((g|0)==6){c[n>>2]=c[q>>2];q=c[n>>2]|0;i=r;return q|0}else if((g|0)==12){Nl(c[c[o>>2]>>2]|0,c[p>>2]|0,c[p>>2]|0,184);c[n>>2]=0;q=c[n>>2]|0;i=r;return q|0}return 0}function cm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+12|0;e=j+8|0;g=j+4|0;h=j;c[f>>2]=a;c[e>>2]=b;c[g>>2]=d;c[h>>2]=0;if(!(c[(c[f>>2]|0)+40>>2]|0)){h=c[h>>2]|0;i=j;return h|0}a=c[(c[f>>2]|0)+64>>2]|0;d=c[e>>2]|0;if((c[(c[f>>2]|0)+60>>2]|0)>(c[g>>2]|0))c[h>>2]=vQ(a,d,c[g>>2]|0)|0;else c[h>>2]=vQ(a,d,c[(c[f>>2]|0)+60>>2]|0)|0;if(c[h>>2]|0){h=c[h>>2]|0;i=j;return h|0}c[h>>2]=(c[(c[f>>2]|0)+60>>2]|0)-(c[g>>2]|0);h=c[h>>2]|0;i=j;return h|0}function dm(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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,D=0,E=0,F=0,G=0;G=i;i=i+96|0;l=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;D=G+52|0;A=G+48|0;E=G+44|0;y=G+40|0;z=G+36|0;w=G+16|0;v=G+8|0;u=G;x=G+32|0;F=G+28|0;B=G+24|0;c[l>>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]=j;c[t>>2]=k;c[D>>2]=0;c[A>>2]=0;if(((c[o>>2]|0)<0?(c[(c[l>>2]|0)+252>>2]|0)!=0:0)?(c[y>>2]=0,c[D>>2]=em(c[l>>2]|0,c[n>>2]|0,c[p>>2]|0,c[q>>2]|0,((c[r>>2]|0)!=0?1:(c[s>>2]|0)!=0)&1,y)|0,(c[D>>2]|0)==0&(c[y>>2]|0)!=0):0)c[D>>2]=fm(c[t>>2]|0,c[y>>2]|0)|0;a:do if((c[o>>2]|0)!=-1){if(!(c[D>>2]|0))c[D>>2]=gm(c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,A)|0;while(1){if(c[D>>2]|0)break a;f=ue(c[A>>2]|0)|0;c[D>>2]=f;if(100!=(f|0))break a;c[z>>2]=0;y=Ee(c[A>>2]|0,1)|0;f=w;c[f>>2]=y;c[f+4>>2]=C;f=Ee(c[A>>2]|0,2)|0;y=v;c[y>>2]=f;c[y+4>>2]=C;y=Ee(c[A>>2]|0,3)|0;f=u;c[f>>2]=y;c[f+4>>2]=C;c[x>>2]=Be(c[A>>2]|0,4)|0;c[F>>2]=Ae(c[A>>2]|0,4)|0;f=w;if(((c[f>>2]|0)!=0|(c[f+4>>2]|0)!=0)&(c[p>>2]|0)!=0){c[B>>2]=(c[r>>2]|0)!=0?v:0;c[D>>2]=hm(c[l>>2]|0,c[p>>2]|0,c[q>>2]|0,c[F>>2]|0,c[x>>2]|0,w,c[B>>2]|0)|0;if(c[D>>2]|0)break a;if((c[r>>2]|0)==0&(c[s>>2]|0)==0){k=w;y=c[k+4>>2]|0;f=v;c[f>>2]=c[k>>2];c[f+4>>2]=y}}k=w;y=v;f=u;c[D>>2]=im((c[(c[t>>2]|0)+4>>2]|0)+1|0,((c[r>>2]|0)==0?(c[s>>2]|0)==0:0)&1,c[k>>2]|0,c[k+4>>2]|0,c[y>>2]|0,c[y+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[F>>2]|0,c[x>>2]|0,z)|0;if(c[D>>2]|0)break a;c[D>>2]=fm(c[t>>2]|0,c[z>>2]|0)|0}}while(0);c[E>>2]=Zd(c[A>>2]|0)|0;if((c[D>>2]|0)!=101){f=c[D>>2]|0;i=G;return f|0}c[D>>2]=c[E>>2];f=c[D>>2]|0;i=G;return f|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,j=0,k=0,l=0,m=0,n=0,o=0,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=i;i=i+80|0;A=y+64|0;z=y+60|0;h=y+56|0;j=y+52|0;k=y+48|0;l=y+44|0;u=y+40|0;s=y+36|0;m=y+32|0;q=y+28|0;v=y+24|0;t=y+20|0;o=y+16|0;w=y+12|0;r=y+8|0;n=y+4|0;p=y;c[A>>2]=a;c[z>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[u>>2]=0;c[m>>2]=0;c[q>>2]=0;c[v>>2]=0;c[t>>2]=(c[(c[A>>2]|0)+252>>2]|0)+((c[z>>2]|0)*24|0)+4;if(c[k>>2]|0){c[o>>2]=0;c[s>>2]=c[(c[t>>2]|0)+8>>2];while(1){if(!(c[s>>2]|0))break;c[w>>2]=c[(c[s>>2]|0)+12>>2];c[r>>2]=c[(c[s>>2]|0)+16>>2];if(c[j>>2]|0){if((c[r>>2]|0)>=(c[j>>2]|0)?0==(vQ(c[w>>2]|0,c[h>>2]|0,c[j>>2]|0)|0):0)x=7}else x=7;if((x|0)==7){x=0;if((c[q>>2]|0)==(c[o>>2]|0)){c[o>>2]=(c[o>>2]|0)+16;c[n>>2]=Ld(c[m>>2]|0,c[o>>2]<<2)|0;if(!(c[n>>2]|0)){x=9;break}c[m>>2]=c[n>>2]}z=c[s>>2]|0;A=c[q>>2]|0;c[q>>2]=A+1;c[(c[m>>2]|0)+(A<<2)>>2]=z}c[s>>2]=c[c[s>>2]>>2]}if((x|0)==9){c[v>>2]=7;c[q>>2]=0}if((c[q>>2]|0)>1)uQ(c[m>>2]|0,c[q>>2]|0,4,185)}else{c[s>>2]=Ak(c[t>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;if(c[s>>2]|0){c[m>>2]=s;c[q>>2]=1}}do if((c[q>>2]|0)>0){c[p>>2]=96+((c[q>>2]|0)+1<<2);c[u>>2]=Id(c[p>>2]|0)|0;if(c[u>>2]|0){kR(c[u>>2]|0,0,c[p>>2]|0)|0;c[c[u>>2]>>2]=2147483647;c[(c[u>>2]|0)+56>>2]=(c[u>>2]|0)+96;iR(c[(c[u>>2]|0)+56>>2]|0,c[m>>2]|0,c[q>>2]<<2|0)|0;break}else{c[v>>2]=7;break}}while(0);if(!(c[k>>2]|0)){z=c[u>>2]|0;A=c[l>>2]|0;c[A>>2]=z;A=c[v>>2]|0;i=y;return A|0}Kd(c[m>>2]|0);z=c[u>>2]|0;A=c[l>>2]|0;c[A>>2]=z;A=c[v>>2]|0;i=y;return A|0}function fm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;do if(!((c[(c[e>>2]|0)+4>>2]|0)%16|0)){c[h>>2]=(c[(c[e>>2]|0)+4>>2]|0)+16<<2;c[g>>2]=Ld(c[c[e>>2]>>2]|0,c[h>>2]|0)|0;if(c[g>>2]|0){c[c[e>>2]>>2]=c[g>>2];break}wl(c[f>>2]|0);c[d>>2]=7;b=c[d>>2]|0;i=j;return b|0}while(0);a=c[f>>2]|0;h=(c[e>>2]|0)+4|0;b=c[h>>2]|0;c[h>>2]=b+1;c[(c[c[e>>2]>>2]|0)+(b<<2)>>2]=a;c[d>>2]=0;b=c[d>>2]|0;i=j;return b|0}function gm(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,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;n=o+4|0;m=o;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=0;d=c[g>>2]|0;if((c[k>>2]|0)<0){c[n>>2]=jl(d,13,m,0)|0;if(!(c[n>>2]|0)){k=c[m>>2]|0;f=ml(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,0)|0;Me(k,1,f,C)|0;f=c[m>>2]|0;k=ml(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,1023)|0;Me(f,2,k,C)|0}}else{c[n>>2]=jl(d,12,m,0)|0;if(!(c[n>>2]|0)){f=c[m>>2]|0;k=ml(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;Me(f,1,k,C)|0}}c[c[l>>2]>>2]=c[m>>2];i=o;return c[n>>2]|0}function hm(a,b,e,f,g,h,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+48|0;n=v+40|0;o=v+36|0;p=v+32|0;k=v+28|0;l=v+24|0;q=v+20|0;r=v+16|0;t=v+12|0;m=v+8|0;u=v+4|0;s=v;c[n>>2]=a;c[o>>2]=b;c[p>>2]=e;c[k>>2]=f;c[l>>2]=g;c[q>>2]=h;c[r>>2]=j;c[t>>2]=0;g=c[k>>2]|0;if((d[c[k>>2]>>0]|0)&128)Vl(g,m)|0;else c[m>>2]=d[g>>0];c[t>>2]=jm(c[o>>2]|0,c[p>>2]|0,c[k>>2]|0,c[l>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;if(!((c[t>>2]|0)==0&(c[m>>2]|0)>1)){u=c[t>>2]|0;i=v;return u|0}c[u>>2]=0;c[s>>2]=0;if((c[q>>2]|0)!=0&(c[r>>2]|0)!=0?(l=c[q>>2]|0,m=c[r>>2]|0,(c[l>>2]|0)!=(c[m>>2]|0)?1:(c[l+4>>2]|0)!=(c[m+4>>2]|0)):0){m=c[q>>2]|0;c[t>>2]=am(c[n>>2]|0,c[m>>2]|0,c[m+4>>2]|0,u,s,0)|0;if(!(c[t>>2]|0))c[t>>2]=hm(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[u>>2]|0,c[s>>2]|0,c[q>>2]|0,0)|0;Kd(c[u>>2]|0);c[q>>2]=0;c[u>>2]=0}if(!(c[t>>2]|0)){if(c[q>>2]|0){e=c[q>>2]|0;g=c[e>>2]|0;e=c[e+4>>2]|0}else{e=c[r>>2]|0;g=c[e>>2]|0;e=c[e+4>>2]|0}c[t>>2]=am(c[n>>2]|0,g,e,u,s,0)|0}if(!(c[t>>2]|0))c[t>>2]=hm(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[u>>2]|0,c[s>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;Kd(c[u>>2]|0);u=c[t>>2]|0;i=v;return u|0}function im(b,d,e,f,g,h,j,k,l,m,n){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;z=i;i=i+64|0;t=z+52|0;u=z+48|0;v=z+44|0;w=z+16|0;o=z+8|0;p=z;q=z+40|0;r=z+36|0;s=z+32|0;y=z+28|0;x=z+24|0;c[u>>2]=b;c[v>>2]=d;b=w;c[b>>2]=e;c[b+4>>2]=f;b=o;c[b>>2]=g;c[b+4>>2]=h;b=p;c[b>>2]=j;c[b+4>>2]=k;c[q>>2]=l;c[r>>2]=m;c[s>>2]=n;c[x>>2]=0;l=w;if((c[l>>2]|0)==0&(c[l+4>>2]|0)==0)c[x>>2]=(c[r>>2]|0)+20;c[y>>2]=Id(96+(c[x>>2]|0)|0)|0;if(!(c[y>>2]|0)){c[t>>2]=7;y=c[t>>2]|0;i=z;return y|0}e=c[y>>2]|0;f=e+96|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));c[c[y>>2]>>2]=c[u>>2];a[(c[y>>2]|0)+4>>0]=(c[v>>2]|0)!=0;l=w;u=c[l+4>>2]|0;v=(c[y>>2]|0)+8|0;c[v>>2]=c[l>>2];c[v+4>>2]=u;v=c[o+4>>2]|0;u=(c[y>>2]|0)+16|0;c[u>>2]=c[o>>2];c[u+4>>2]=v;u=c[p+4>>2]|0;v=(c[y>>2]|0)+24|0;c[v>>2]=c[p>>2];c[v+4>>2]=u;if(c[x>>2]|0){c[(c[y>>2]|0)+40>>2]=(c[y>>2]|0)+96;a[(c[y>>2]|0)+5>>0]=1;c[(c[y>>2]|0)+44>>2]=c[r>>2];iR(c[(c[y>>2]|0)+40>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;e=(c[(c[y>>2]|0)+40>>2]|0)+(c[r>>2]|0)|0;f=e+20|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0))}else{w=fR(c[w>>2]|0,c[w+4>>2]|0,1,0)|0;x=(c[y>>2]|0)+32|0;c[x>>2]=w;c[x+4>>2]=C}c[c[s>>2]>>2]=c[y>>2];c[t>>2]=0;y=c[t>>2]|0;i=z;return y|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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;A=i;i=i+80|0;u=A+76|0;j=A+72|0;k=A+68|0;D=A+64|0;B=A+60|0;v=A+56|0;w=A+52|0;y=A+48|0;r=A+44|0;s=A+40|0;z=A+36|0;n=A+32|0;m=A+28|0;x=A;l=A+24|0;q=A+20|0;p=A+16|0;o=A+12|0;t=A+8|0;c[j>>2]=a;c[k>>2]=b;c[D>>2]=e;c[B>>2]=f;c[v>>2]=g;c[w>>2]=h;c[y>>2]=0;c[r>>2]=c[D>>2];c[s>>2]=(c[r>>2]|0)+(c[B>>2]|0);c[z>>2]=0;c[n>>2]=0;c[m>>2]=1;a=Ul(c[r>>2]|0,x)|0;c[r>>2]=(c[r>>2]|0)+a;a=Ul(c[r>>2]|0,x)|0;c[r>>2]=(c[r>>2]|0)+a;if((c[r>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[u>>2]=267;D=c[u>>2]|0;i=A;return D|0}while(1){if((c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0){f=28;break}if(!((c[v>>2]|0)!=0?1:(c[w>>2]|0)!=0)){f=28;break}c[p>>2]=0;if(!(c[m>>2]|0)){f=c[r>>2]|0;if((d[c[r>>2]>>0]|0)&128)f=Vl(f,p)|0;else{c[p>>2]=d[f>>0];f=1}c[r>>2]=(c[r>>2]|0)+f}c[m>>2]=0;f=c[r>>2]|0;if((d[c[r>>2]>>0]|0)&128)f=Vl(f,q)|0;else{c[q>>2]=d[f>>0];f=1}c[r>>2]=(c[r>>2]|0)+f;if((c[p>>2]|0)<0|(c[q>>2]|0)<0){f=15;break}if(((c[r>>2]|0)+(c[q>>2]|0)|0)>>>0>(c[s>>2]|0)>>>0){f=15;break}if(((c[p>>2]|0)+(c[q>>2]|0)|0)>(c[n>>2]|0)){c[n>>2]=(c[p>>2]|0)+(c[q>>2]|0)<<1;c[t>>2]=Ld(c[z>>2]|0,c[n>>2]|0)|0;if(!(c[t>>2]|0)){f=18;break}c[z>>2]=c[t>>2]}iR((c[z>>2]|0)+(c[p>>2]|0)|0,c[r>>2]|0,c[q>>2]|0)|0;c[o>>2]=(c[p>>2]|0)+(c[q>>2]|0);c[r>>2]=(c[r>>2]|0)+(c[q>>2]|0);c[l>>2]=vQ(c[j>>2]|0,c[z>>2]|0,(c[o>>2]|0)>(c[k>>2]|0)?c[k>>2]|0:c[o>>2]|0)|0;do if(c[v>>2]|0){if((c[l>>2]|0)>=0){if(c[l>>2]|0)break;if((c[o>>2]|0)<=(c[k>>2]|0))break}a=x;B=c[a+4>>2]|0;D=c[v>>2]|0;c[D>>2]=c[a>>2];c[D+4>>2]=B;c[v>>2]=0}while(0);if((c[w>>2]|0)!=0&(c[l>>2]|0)<0){a=x;B=c[a+4>>2]|0;D=c[w>>2]|0;c[D>>2]=c[a>>2];c[D+4>>2]=B;c[w>>2]=0}B=x;B=gR(c[B>>2]|0,c[B+4>>2]|0,1,0)|0;D=x;c[D>>2]=B;c[D+4>>2]=C}if((f|0)==15)c[y>>2]=267;else if((f|0)==18)c[y>>2]=7;else if((f|0)==28){if(c[v>>2]|0){t=x;B=c[t+4>>2]|0;D=c[v>>2]|0;c[D>>2]=c[t>>2];c[D+4>>2]=B}if(c[w>>2]|0){B=c[x+4>>2]|0;D=c[w>>2]|0;c[D>>2]=c[x>>2];c[D+4>>2]=B}}Kd(c[z>>2]|0);c[u>>2]=c[y>>2];D=c[u>>2]|0;i=A;return D|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;g=i;i=i+32|0;m=g+28|0;l=g+24|0;k=g+20|0;j=g+16|0;e=g+12|0;f=g+8|0;h=g+4|0;d=g;c[m>>2]=a;c[l>>2]=b;c[k>>2]=c[(c[c[m>>2]>>2]|0)+12>>2];c[j>>2]=c[(c[c[l>>2]>>2]|0)+12>>2];c[e>>2]=c[(c[c[m>>2]>>2]|0)+16>>2];c[f>>2]=c[(c[c[l>>2]>>2]|0)+16>>2];c[h>>2]=(c[e>>2]|0)<(c[f>>2]|0)?c[e>>2]|0:c[f>>2]|0;c[d>>2]=vQ(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;if(c[d>>2]|0){m=c[d>>2]|0;i=g;return m|0}c[d>>2]=(c[e>>2]|0)-(c[f>>2]|0);m=c[d>>2]|0;i=g;return m|0}function lm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;h=p+32|0;e=p+28|0;f=p+24|0;l=p+20|0;o=p+16|0;n=p+12|0;m=p+8|0;j=p+4|0;k=p;c[h>>2]=a;c[e>>2]=b;c[f>>2]=d;c[o>>2]=24274;c[n>>2]=24278;c[m>>2]=24283;c[j>>2]=-1;c[k>>2]=15;d=c[h>>2]|0;if((c[e>>2]|0)>6){je(d,24294,-1);i=p;return}if(pm(d,21347,c[c[f>>2]>>2]|0,l)|0){i=p;return}switch(c[e>>2]|0){case 6:{c[k>>2]=de(c[(c[f>>2]|0)+20>>2]|0)|0;g=6;break}case 5:{g=6;break}case 4:{g=7;break}case 3:{g=8;break}case 2:{g=9;break}default:{}}if((g|0)==6){c[j>>2]=de(c[(c[f>>2]|0)+16>>2]|0)|0;g=7}if((g|0)==7){c[m>>2]=ae(c[(c[f>>2]|0)+12>>2]|0)|0;g=8}if((g|0)==8){c[n>>2]=ae(c[(c[f>>2]|0)+8>>2]|0)|0;g=9}if((g|0)==9)c[o>>2]=ae(c[(c[f>>2]|0)+4>>2]|0)|0;if(!((c[m>>2]|0)!=0&(c[n>>2]|0)!=0&(c[o>>2]|0)!=0)){te(c[h>>2]|0);i=p;return}d=c[h>>2]|0;if(!(c[k>>2]|0)){ne(d,19266,-1,0);i=p;return}if(nn(d,c[l>>2]|0)|0){i=p;return}Sn(c[h>>2]|0,c[l>>2]|0,c[o>>2]|0,c[n>>2]|0,c[m>>2]|0,c[j>>2]|0,c[k>>2]|0);i=p;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+12|0;h=g+4|0;f=g;c[e>>2]=a;c[g+8>>2]=b;c[h>>2]=d;if(pm(c[e>>2]|0,21355,c[c[h>>2]>>2]|0,f)|0){i=g;return}if(nn(c[e>>2]|0,c[f>>2]|0)|0){i=g;return}On(c[e>>2]|0,c[f>>2]|0);i=g;return}function nm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+20|0;k=j+12|0;h=j+8|0;f=j+4|0;g=j;c[e>>2]=a;c[j+16>>2]=b;c[k>>2]=d;if(pm(c[e>>2]|0,21373,c[c[k>>2]>>2]|0,g)|0){i=j;return}c[f>>2]=c[c[g>>2]>>2];c[h>>2]=Mn(c[f>>2]|0)|0;switch(c[h>>2]|0){case 0:{ne(c[e>>2]|0,24178,-1,0);i=j;return}case 101:{ne(c[e>>2]|0,24194,-1,0);i=j;return}default:{re(c[e>>2]|0,c[h>>2]|0);i=j;return}}}function om(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(pm(c[e>>2]|0,21363,c[c[g>>2]>>2]|0,h)|0){i=k;return}c[j>>2]=0;if((c[f>>2]|0)>1)c[j>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;qm(c[e>>2]|0,c[h>>2]|0,c[j>>2]|0);i=k;return}function pm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;n=p;g=p+28|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;o=p+4|0;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;if((fe(c[k>>2]|0)|0)==4?(be(c[k>>2]|0)|0)==4:0){d=$d(c[k>>2]|0)|0;a[m>>0]=a[d>>0]|0;a[m+1>>0]=a[d+1>>0]|0;a[m+2>>0]=a[d+2>>0]|0;a[m+3>>0]=a[d+3>>0]|0;c[c[l>>2]>>2]=c[m>>2];c[g>>2]=0;d=c[g>>2]|0;i=p;return d|0}c[n>>2]=c[j>>2];c[o>>2]=Od(24149,n)|0;je(c[h>>2]|0,c[o>>2]|0,-1);Kd(c[o>>2]|0);c[g>>2]=1;d=c[g>>2]|0;i=p;return d|0}function qm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;g=k+12|0;f=k+8|0;h=k+4|0;j=k;c[e>>2]=a;c[g>>2]=b;c[f>>2]=d;c[h>>2]=c[c[g>>2]>>2];if(c[f>>2]|0)c[j>>2]=c[f>>2];else c[j>>2]=24084;e=c[e>>2]|0;if(c[(c[g>>2]|0)+12>>2]|0){rm(e,c[g>>2]|0,c[j>>2]|0);sm(c[h>>2]|0);i=k;return}else{ge(e,19266,0,0);i=k;return}}function rm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+80|0;f=u+76|0;g=u+72|0;h=u+68|0;q=u;o=u+64|0;p=u+60|0;k=u+56|0;j=u+52|0;r=u+48|0;n=u+44|0;l=u+40|0;s=u+36|0;m=u+32|0;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[o>>2]=c[c[g>>2]>>2];c[p>>2]=0;c[k>>2]=0;c[j>>2]=0;c[r>>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[q+24>>2]=0;c[q+28>>2]=0;c[q>>2]=c[g>>2];c[q+4>>2]=c[(c[o>>2]|0)+24>>2];if((c[(c[g>>2]|0)+92>>2]|0)!=0?(yQ(c[(c[(c[g>>2]|0)+92>>2]|0)+12>>2]|0,c[h>>2]|0)|0)!=0:0){tm(c[(c[g>>2]|0)+92>>2]|0);c[(c[g>>2]|0)+92>>2]=0}if(!(c[(c[g>>2]|0)+92>>2]|0)){c[n>>2]=0;e=um(c[(c[g>>2]|0)+12>>2]|0)|0;c[(c[g>>2]|0)+20>>2]=e;c[q+8>>2]=c[(c[g>>2]|0)+20>>2];c[l>>2]=0;while(1){if(!(a[(c[h>>2]|0)+(c[l>>2]|0)>>0]|0))break;c[s>>2]=0;if(vm(c[o>>2]|0,a[(c[h>>2]|0)+(c[l>>2]|0)>>0]|0,s)|0){t=8;break}e=wm(q,a[(c[h>>2]|0)+(c[l>>2]|0)>>0]|0)|0;c[n>>2]=(c[n>>2]|0)+e;c[l>>2]=(c[l>>2]|0)+1}if((t|0)==8){je(c[f>>2]|0,c[s>>2]|0,-1);Kd(c[s>>2]|0);i=u;return}t=xm(c[n>>2]|0,c[h>>2]|0)|0;c[(c[g>>2]|0)+92>>2]=t;if(!(c[(c[g>>2]|0)+92>>2]|0))c[p>>2]=7;c[(c[g>>2]|0)+88>>2]=1;c[k>>2]=1}if((c[p>>2]|0)==0?(c[r>>2]=ym(c[(c[g>>2]|0)+92>>2]|0,j)|0,(c[r>>2]|0)==0):0)c[p>>2]=7;if((c[p>>2]|0)==0?(c[q+28>>2]=c[j>>2],c[q+8>>2]=c[(c[g>>2]|0)+20>>2],c[p>>2]=zm(c[g>>2]|0,c[k>>2]|0,q,c[h>>2]|0)|0,(c[k>>2]|0)!=0):0)Am(c[(c[g>>2]|0)+92>>2]|0);if(!(c[p>>2]|0)){c[m>>2]=c[(c[(c[g>>2]|0)+92>>2]|0)+4>>2]<<2;ge(c[f>>2]|0,c[j>>2]|0,c[m>>2]|0,c[r>>2]|0);i=u;return}re(c[f>>2]|0,c[p>>2]|0);if(!(c[r>>2]|0)){i=u;return}Qb[c[r>>2]&255](c[j>>2]|0);i=u;return}function sm(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Ve(c[(c[d>>2]|0)+244>>2]|0)|0;c[(c[d>>2]|0)+244>>2]=0;i=b;return}function tm(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;if(!(c[e>>2]|0)){i=f;return}a[c[e>>2]>>0]=0;if(d[c[e>>2]>>0]|0){i=f;return}if(d[(c[e>>2]|0)+1>>0]|0){i=f;return}if(d[(c[e>>2]|0)+2>>0]|0){i=f;return}Kd(c[e>>2]|0);i=f;return}function um(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=0;Hm(c[e>>2]|0,153,b)|0;i=d;return c[b>>2]|0}function vm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m;g=m+12|0;h=m+8|0;j=m+16|0;k=m+4|0;c[h>>2]=b;a[j>>0]=e;c[k>>2]=f;do if((a[j>>0]|0)!=112?(a[j>>0]|0)!=99:0){if((a[j>>0]|0)==110?(d[(c[h>>2]|0)+228>>0]|0)!=0:0)break;if((a[j>>0]|0)==97?(d[(c[h>>2]|0)+228>>0]|0)!=0:0)break;if((a[j>>0]|0)==108?(d[(c[h>>2]|0)+230>>0]|0)!=0:0)break;if((((a[j>>0]|0)!=115?(a[j>>0]|0)!=120:0)?(a[j>>0]|0)!=121:0)?(a[j>>0]|0)!=98:0){f=c[k>>2]|0;c[l>>2]=a[j>>0];zk(f,24114,l);c[g>>2]=1;l=c[g>>2]|0;i=m;return l|0}}while(0);c[g>>2]=0;l=c[g>>2]|0;i=m;return l|0}function wm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+4|0;h=g+8|0;f=g;c[e>>2]=b;a[h>>0]=d;switch(a[h>>0]|0){case 99:case 112:case 110:{c[f>>2]=1;break}case 115:case 108:case 97:{c[f>>2]=c[(c[e>>2]|0)+4>>2];break}case 121:{c[f>>2]=_(c[(c[e>>2]|0)+4>>2]|0,c[(c[e>>2]|0)+8>>2]|0)|0;break}case 98:{c[f>>2]=_(c[(c[e>>2]|0)+8>>2]|0,((c[(c[e>>2]|0)+4>>2]|0)+31|0)/32|0)|0;break}default:c[f>>2]=(_(c[(c[e>>2]|0)+4>>2]|0,c[(c[e>>2]|0)+8>>2]|0)|0)*3}i=g;return c[f>>2]|0}function xm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;j=k+8|0;g=k+4|0;h=k;c[e>>2]=b;c[f>>2]=d;c[g>>2]=((c[e>>2]<<1)+1<<2)+20;c[h>>2]=BQ(c[f>>2]|0)|0;c[j>>2]=Id((c[g>>2]|0)+(c[h>>2]|0)+1|0)|0;if(!(c[j>>2]|0)){d=c[j>>2]|0;i=k;return d|0}kR(c[j>>2]|0,0,c[g>>2]|0)|0;c[(c[j>>2]|0)+16>>2]=(c[j>>2]|0)+16+4-(c[j>>2]|0);c[(c[j>>2]|0)+16+(1+(c[e>>2]|0)<<2)>>2]=(c[(c[j>>2]|0)+16>>2]|0)+((c[e>>2]|0)+1<<2);c[(c[j>>2]|0)+4>>2]=c[e>>2];c[(c[j>>2]|0)+12>>2]=(c[j>>2]|0)+(c[g>>2]|0);iR(c[(c[j>>2]|0)+12>>2]|0,c[f>>2]|0,(c[h>>2]|0)+1|0)|0;a[c[j>>2]>>0]=1;d=c[j>>2]|0;i=k;return d|0}function ym(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[f>>2]=b;c[g>>2]=e;c[j>>2]=0;c[h>>2]=0;e=c[f>>2]|0;do if(d[(c[f>>2]|0)+1>>0]|0){b=c[f>>2]|0;if(!(d[e+2>>0]|0)){a[b+2>>0]=1;c[h>>2]=(c[f>>2]|0)+16+((c[(c[f>>2]|0)+4>>2]|0)+2<<2);c[j>>2]=152;break}c[h>>2]=Id(c[b+4>>2]<<2)|0;if((c[h>>2]|0)!=0?(c[j>>2]=148,(c[(c[f>>2]|0)+8>>2]|0)!=0):0)iR(c[h>>2]|0,(c[f>>2]|0)+16+4|0,c[(c[f>>2]|0)+4>>2]<<2|0)|0}else{a[e+1>>0]=1;c[h>>2]=(c[f>>2]|0)+16+4;c[j>>2]=152}while(0);c[c[g>>2]>>2]=c[h>>2];i=k;return c[j>>2]|0}function zm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+96|0;g=B+92|0;h=B+88|0;j=B+84|0;k=B+80|0;A=B+76|0;n=B+72|0;y=B+68|0;z=B+64|0;r=B+24|0;s=B+16|0;l=B+60|0;o=B+56|0;q=B+52|0;t=B+8|0;x=B+48|0;p=B+44|0;m=B+40|0;u=B;v=B+36|0;w=B+32|0;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[A>>2]=0;c[y>>2]=c[c[g>>2]>>2];c[z>>2]=0;c[n>>2]=0;while(1){if(c[A>>2]|0){g=31;break}if(!(a[(c[k>>2]|0)+(c[n>>2]|0)>>0]|0)){g=31;break}a[(c[j>>2]|0)+24>>0]=a[(c[k>>2]|0)+(c[n>>2]|0)>>0]|0;a:do switch(a[(c[k>>2]|0)+(c[n>>2]|0)>>0]|0){case 112:{if(c[h>>2]|0)c[c[(c[j>>2]|0)+28>>2]>>2]=c[(c[j>>2]|0)+8>>2];break}case 99:{if(c[h>>2]|0)c[c[(c[j>>2]|0)+28>>2]>>2]=c[(c[j>>2]|0)+4>>2];break}case 110:{if(c[h>>2]|0){f=r;c[f>>2]=0;c[f+4>>2]=0;c[A>>2]=Bm(c[y>>2]|0,z,r,0)|0;c[c[(c[j>>2]|0)+28>>2]>>2]=c[r>>2]}break}case 97:{if((c[h>>2]|0)!=0?(c[A>>2]=Bm(c[y>>2]|0,z,s,l)|0,(c[A>>2]|0)==0):0){c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[(c[j>>2]|0)+4>>2]|0))break a;f=Ul(c[l>>2]|0,t)|0;c[l>>2]=(c[l>>2]|0)+f;f=c[t>>2]|0;e=s;e=pR(c[e>>2]|0,c[e+4>>2]|0,2,0)|0;e=gR(f|0,0,e|0,C|0)|0;f=s;f=pR(e|0,C|0,c[f>>2]|0,c[f+4>>2]|0)|0;c[q>>2]=f;c[(c[(c[j>>2]|0)+28>>2]|0)+(c[o>>2]<<2)>>2]=c[q>>2];c[o>>2]=(c[o>>2]|0)+1}}break}case 108:{c[x>>2]=0;f=(c[g>>2]|0)+32|0;c[A>>2]=Cm(c[y>>2]|0,c[f>>2]|0,c[f+4>>2]|0,x)|0;b:do if(!(c[A>>2]|0)){c[m>>2]=Ae(c[x>>2]|0,0)|0;c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[(c[j>>2]|0)+4>>2]|0))break b;f=Ul(c[m>>2]|0,u)|0;c[m>>2]=(c[m>>2]|0)+f;c[(c[(c[j>>2]|0)+28>>2]|0)+(c[p>>2]<<2)>>2]=c[u>>2];c[p>>2]=(c[p>>2]|0)+1}}while(0);Zd(c[x>>2]|0)|0;break}case 115:{c[A>>2]=Dm(c[g>>2]|0,0,0)|0;if(!(c[A>>2]|0))c[A>>2]=Em(c[g>>2]|0,c[j>>2]|0)|0;break}case 121:case 98:{c[v>>2]=(wm(c[j>>2]|0,a[(c[k>>2]|0)+(c[n>>2]|0)>>0]|0)|0)<<2;kR(c[(c[j>>2]|0)+28>>2]|0,0,c[v>>2]|0)|0;Fm(c[(c[g>>2]|0)+12>>2]|0,c[j>>2]|0);break}default:{c[w>>2]=c[(c[g>>2]|0)+12>>2];c[A>>2]=Dm(c[g>>2]|0,0,0)|0;if(!(c[A>>2]|0)){if(c[h>>2]|0){if((c[(c[g>>2]|0)+24>>2]|0)!=0?(c[A>>2]=Bm(c[y>>2]|0,z,(c[j>>2]|0)+16|0,0)|0,(c[A>>2]|0)!=0):0)break a;c[A>>2]=Hm(c[w>>2]|0,154,c[j>>2]|0)|0;Im(c[g>>2]|0,A)|0;if(c[A>>2]|0)break a}Hm(c[w>>2]|0,155,c[j>>2]|0)|0}}}while(0);e=wm(c[j>>2]|0,a[(c[k>>2]|0)+(c[n>>2]|0)>>0]|0)|0;f=(c[j>>2]|0)+28|0;c[f>>2]=(c[f>>2]|0)+(e<<2);c[n>>2]=(c[n>>2]|0)+1}if((g|0)==31){Zd(c[z>>2]|0)|0;i=B;return c[A>>2]|0}return 0}function Am(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+8>>2]=1;iR((c[d>>2]|0)+16+(2+(c[(c[d>>2]|0)+4>>2]|0)<<2)|0,(c[d>>2]|0)+16+4|0,c[(c[d>>2]|0)+4>>2]<<2|0)|0;i=b;return}function Bm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;f=p+36|0;g=p+32|0;h=p+28|0;j=p+24|0;k=p+20|0;n=p+16|0;l=p+12|0;m=p;o=p+8|0;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[c[h>>2]>>2]|0)==0?(c[o>>2]=Jn(c[g>>2]|0,c[h>>2]|0)|0,(c[o>>2]|0)!=0):0){c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}c[n>>2]=c[c[h>>2]>>2];c[l>>2]=Ae(c[n>>2]|0,0)|0;o=Ul(c[l>>2]|0,m)|0;c[l>>2]=(c[l>>2]|0)+o;o=m;if((c[o>>2]|0)==0&(c[o+4>>2]|0)==0){c[f>>2]=267;o=c[f>>2]|0;i=p;return o|0}o=c[j>>2]|0;c[o>>2]=c[m>>2];c[o+4>>2]=0;if(c[k>>2]|0)c[c[k>>2]>>2]=c[l>>2];c[f>>2]=0;o=c[f>>2]|0;i=p;return o|0}function Cm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;h=f+12|0;j=f;g=f+8|0;c[h>>2]=a;a=j;c[a>>2]=b;c[a+4>>2]=d;c[g>>2]=e;e=j;e=In(c[h>>2]|0,c[e>>2]|0,c[e+4>>2]|0,c[g>>2]|0)|0;i=f;return e|0}function Dm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;k=j+24|0;e=j+20|0;f=j+16|0;g=j+12|0;h=j;c[k>>2]=a;c[e>>2]=b;c[f>>2]=d;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h>>2]=c[k>>2];c[g>>2]=Hm(c[(c[k>>2]|0)+12>>2]|0,156,h)|0;if(c[e>>2]|0)c[c[e>>2]>>2]=c[h+4>>2];if(!(c[f>>2]|0)){k=c[g>>2]|0;i=j;return k|0}c[c[f>>2]>>2]=c[h+8>>2];k=c[g>>2]|0;i=j;return k|0}function Em(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+64|0;q=t+56|0;d=t+52|0;e=t+48|0;r=t+44|0;f=t+40|0;g=t+36|0;l=t+32|0;o=t+28|0;h=t+24|0;j=t+20|0;s=t+16|0;n=t+12|0;m=t+8|0;k=t+4|0;p=t;c[d>>2]=a;c[e>>2]=b;c[l>>2]=0;c[r>>2]=Id(c[(c[d>>2]|0)+20>>2]<<4)|0;if(!(c[r>>2]|0)){c[q>>2]=7;s=c[q>>2]|0;i=t;return s|0}kR(c[r>>2]|0,0,c[(c[d>>2]|0)+20>>2]<<4|0)|0;Hm(c[(c[d>>2]|0)+12>>2]|0,157,c[r>>2]|0)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+8>>2]|0))break;c[o>>2]=(c[r>>2]|0)+(c[f>>2]<<4);c[l>>2]=(c[l>>2]|0)-(c[(c[(c[c[o>>2]>>2]|0)+20>>2]|0)+64>>2]|0);c[(c[o>>2]|0)+4>>2]=c[l>>2];c[f>>2]=(c[f>>2]|0)+1}c[g>>2]=0;a:while(1){if((c[g>>2]|0)>=(c[(c[e>>2]|0)+4>>2]|0)){d=33;break}c[h>>2]=0;c[j>>2]=0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+8>>2]|0))break;c[n>>2]=(c[r>>2]|0)+(c[f>>2]<<4);c[s>>2]=Km(c[d>>2]|0,c[c[n>>2]>>2]|0,c[g>>2]|0,(c[n>>2]|0)+8|0)|0;if(c[s>>2]|0){d=11;break a}if(c[(c[n>>2]|0)+8>>2]|0){c[(c[n>>2]|0)+12>>2]=c[(c[n>>2]|0)+4>>2];Gn((c[r>>2]|0)+(c[f>>2]<<4)|0)|0;c[j>>2]=(c[j>>2]|0)+1}c[f>>2]=(c[f>>2]|0)+1}while(1){if((c[j>>2]|0)<=0)break;c[m>>2]=0;c[k>>2]=0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+8>>2]|0))break;c[p>>2]=(c[r>>2]|0)+(c[f>>2]<<4);if(c[(c[p>>2]|0)+8>>2]|0){if(!((c[m>>2]|0)!=0?(c[(c[p>>2]|0)+12>>2]|0)>=(c[(c[m>>2]|0)+12>>2]|0):0))c[m>>2]=c[p>>2];if((c[k>>2]|0)!=0?(c[(c[p>>2]|0)+12>>2]|0)!=(c[(c[p>>2]|0)+-16+12>>2]|0):0)c[k>>2]=1;else c[k>>2]=(c[k>>2]|0)+1;if((c[k>>2]|0)>(c[h>>2]|0))c[h>>2]=c[k>>2]}else c[k>>2]=0;c[f>>2]=(c[f>>2]|0)+1}if(!(Gn(c[m>>2]|0)|0))continue;c[j>>2]=(c[j>>2]|0)+-1}c[(c[(c[e>>2]|0)+28>>2]|0)+(c[g>>2]<<2)>>2]=c[h>>2];c[g>>2]=(c[g>>2]|0)+1}if((d|0)==11){c[q>>2]=c[s>>2];s=c[q>>2]|0;i=t;return s|0}else if((d|0)==33){Kd(c[r>>2]|0);c[q>>2]=0;s=c[q>>2]|0;i=t;return s|0}return 0}function Fm(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=a;c[f>>2]=b;if(d[(c[e>>2]|0)+32>>0]|0){i=g;return}b=(c[e>>2]|0)+24|0;a=(c[c[f>>2]>>2]|0)+32|0;if(!((c[b>>2]|0)==(c[a>>2]|0)?(c[b+4>>2]|0)==(c[a+4>>2]|0):0)){i=g;return}b=c[e>>2]|0;if(c[(c[e>>2]|0)+12>>2]|0){Fm(c[b+12>>2]|0,c[f>>2]|0);Fm(c[(c[e>>2]|0)+16>>2]|0,c[f>>2]|0);i=g;return}else{En(b,c[f>>2]|0);i=g;return}}function Gm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+16|0;g=e+12|0;h=e+8|0;j=e+4|0;f=e;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[f>>2]=c[j>>2];a=_((c[h>>2]|0)*3|0,c[(c[f>>2]|0)+4>>2]|0)|0;a=Bn(c[c[f>>2]>>2]|0,c[g>>2]|0,(c[(c[f>>2]|0)+28>>2]|0)+(a<<2)|0)|0;i=e;return a|0}function Hm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+16|0;j=e+12|0;g=e+8|0;f=e+4|0;h=e;c[j>>2]=a;c[g>>2]=b;c[f>>2]=d;c[h>>2]=0;b=An(c[j>>2]|0,h,c[g>>2]|0,c[f>>2]|0)|0;i=e;return b|0}function Im(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;g=h+4|0;f=h;c[d>>2]=a;c[e>>2]=b;c[g>>2]=c[c[e>>2]>>2];c[f>>2]=0;if(c[g>>2]|0){b=c[g>>2]|0;b=(b|0)==0;g=c[f>>2]|0;g=(g|0)!=0;g=b?g:0;g=g&1;i=h;return g|0}if((c[(c[d>>2]|0)+24>>2]|0)!=0?(c[g>>2]=nn(0,c[d>>2]|0)|0,(c[g>>2]|0)==0):0)c[g>>2]=on(c[d>>2]|0)|0;c[f>>2]=0==(pn(c[d>>2]|0,c[(c[d>>2]|0)+12>>2]|0,g)|0)&1;qn(c[d>>2]|0);c[c[e>>2]>>2]=c[g>>2];b=c[g>>2]|0;b=(b|0)==0;g=c[f>>2]|0;g=(g|0)!=0;g=b?g:0;g=g&1;i=h;return g|0}function Jm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+32|0;e=l+28|0;m=l+24|0;n=l+20|0;k=l+16|0;h=l+12|0;g=l+8|0;f=l+4|0;j=l;c[e>>2]=a;c[m>>2]=b;c[n>>2]=d;c[k>>2]=0;c[h>>2]=c[n>>2];c[g>>2]=(_(c[m>>2]|0,c[(c[h>>2]|0)+4>>2]|0)|0)*3;c[f>>2]=0;while(1){if(!((c[f>>2]|0)<(c[(c[h>>2]|0)+4>>2]|0)?(c[k>>2]|0)==0:0))break;c[k>>2]=Km(c[c[h>>2]>>2]|0,c[e>>2]|0,c[f>>2]|0,j)|0;if(c[j>>2]|0){n=Lm(j)|0;c[(c[(c[h>>2]|0)+28>>2]|0)+((c[g>>2]|0)+((c[f>>2]|0)*3|0)<<2)>>2]=n}else c[(c[(c[h>>2]|0)+28>>2]|0)+((c[g>>2]|0)+((c[f>>2]|0)*3|0)<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+1}i=l;return c[k>>2]|0}function Fp(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,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;ha=i;i=i+288|0;V=ha+40|0;U=ha+32|0;T=ha+24|0;q=ha+16|0;r=ha+8|0;p=ha;v=ha+280|0;w=ha+276|0;ia=ha+272|0;k=ha+268|0;x=ha+264|0;da=ha+260|0;y=ha+256|0;S=ha+252|0;ea=ha+248|0;ga=ha+244|0;E=ha+240|0;L=ha+236|0;F=ha+232|0;R=ha+228|0;M=ha+224|0;Z=ha+220|0;N=ha+216|0;P=ha+212|0;G=ha+208|0;z=ha+204|0;fa=ha+200|0;O=ha+196|0;A=ha+192|0;D=ha+188|0;C=ha+184|0;ba=ha+180|0;X=ha+176|0;ca=ha+172|0;Y=ha+168|0;_=ha+164|0;B=ha+160|0;Q=ha+156|0;s=ha+152|0;n=ha+148|0;t=ha+144|0;l=ha+80|0;m=ha+76|0;o=ha+72|0;H=ha+68|0;I=ha+64|0;W=ha+60|0;J=ha+56|0;K=ha+52|0;aa=ha+48|0;$=ha+44|0;c[v>>2]=b;c[w>>2]=d;c[ia>>2]=e;c[k>>2]=f;c[x>>2]=g;c[da>>2]=h;c[y>>2]=j;c[S>>2]=c[ia>>2];c[ea>>2]=0;c[ga>>2]=0;c[R>>2]=0;c[M>>2]=0;c[G>>2]=(a[(c[c[x>>2]>>2]|0)+3>>0]|0)==52&1;c[fa>>2]=0;c[O>>2]=0;c[A>>2]=0;c[D>>2]=0;c[C>>2]=0;c[ba>>2]=0;c[X>>2]=0;c[ca>>2]=0;c[Y>>2]=0;c[_>>2]=0;c[B>>2]=0;c[Q>>2]=0;c[N>>2]=(BQ(c[(c[x>>2]|0)+4>>2]|0)|0)+1;c[P>>2]=(BQ(c[(c[x>>2]|0)+8>>2]|0)|0)+1;c[L>>2]=(c[k>>2]|0)-2<<2;c[z>>2]=Id(c[L>>2]|0)|0;if(c[z>>2]|0){kR(c[z>>2]|0,0,c[L>>2]|0)|0;c[B>>2]=Id(c[L>>2]|0)|0}if(c[B>>2]|0)kR(c[B>>2]|0,0,c[L>>2]|0)|0;do if((c[z>>2]|0)!=0&(c[B>>2]|0)!=0){c[E>>2]=3;while(1){if(c[ga>>2]|0)break;if((c[E>>2]|0)>=(c[k>>2]|0))break;c[s>>2]=c[(c[x>>2]|0)+(c[E>>2]<<2)>>2];if((((c[fa>>2]|0)==0?(BQ(c[s>>2]|0)|0)>>>0>8:0)?0==(zd(c[s>>2]|0,24853,8)|0):0)?0==(Gp(a[(c[s>>2]|0)+8>>0]|0)|0):0)c[ga>>2]=Hp(c[S>>2]|0,(c[s>>2]|0)+9|0,fa,c[y>>2]|0)|0;else u=15;do if((u|0)==15){u=0;if((c[G>>2]|0)!=0?(Ip(c[s>>2]|0,n,t)|0)!=0:0){f=l;g=2100;d=f+64|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(d|0));if(!(c[t>>2]|0)){c[ga>>2]=7;break}c[m>>2]=0;while(1){if((c[m>>2]|0)>=8)break;c[o>>2]=l+(c[m>>2]<<3);if((c[n>>2]|0)==(c[(c[o>>2]|0)+4>>2]|0)?(zd(c[s>>2]|0,c[c[o>>2]>>2]|0,c[(c[o>>2]|0)+4>>2]|0)|0)==0:0)break;c[m>>2]=(c[m>>2]|0)+1}a:do if((c[m>>2]|0)==8){ia=c[y>>2]|0;c[p>>2]=c[s>>2];zk(ia,24862,p);c[ga>>2]=1}else switch(c[m>>2]|0){case 0:{if(!((BQ(c[t>>2]|0)|0)==4?(zd(c[t>>2]|0,21382,4)|0)==0:0)){ia=c[y>>2]|0;c[r>>2]=c[t>>2];zk(ia,24889,r);c[ga>>2]=1}c[D>>2]=1;break a}case 1:{Kd(c[ba>>2]|0);c[ba>>2]=c[t>>2];c[t>>2]=0;break a}case 2:{Kd(c[X>>2]|0);c[X>>2]=c[t>>2];c[t>>2]=0;break a}case 3:{Kd(c[ca>>2]|0);c[ca>>2]=c[t>>2];c[t>>2]=0;break a}case 4:{if(!((BQ(c[t>>2]|0)|0)==3?(zd(c[t>>2]|0,24916,3)|0)==0:0))u=36;do if((u|0)==36){u=0;if((BQ(c[t>>2]|0)|0)==4?(zd(c[t>>2]|0,24920,4)|0)==0:0)break;ia=c[y>>2]|0;c[q>>2]=c[t>>2];zk(ia,24925,q);c[ga>>2]=1}while(0);if((a[c[t>>2]>>0]|0)==100)f=1;else f=(a[c[t>>2]>>0]|0)==68;c[C>>2]=f&1;break a}case 5:{Kd(c[Y>>2]|0);c[Y>>2]=c[t>>2];c[t>>2]=0;break a}case 6:{Kd(c[_>>2]|0);c[_>>2]=c[t>>2];c[t>>2]=0;break a}case 7:{j=c[t>>2]|0;ia=c[Q>>2]|0;c[Q>>2]=ia+1;c[(c[B>>2]|0)+(ia<<2)>>2]=j;c[t>>2]=0;break a}default:break a}while(0);Kd(c[t>>2]|0);break}j=(BQ(c[s>>2]|0)|0)+1|0;c[R>>2]=(c[R>>2]|0)+j;j=c[s>>2]|0;ia=c[M>>2]|0;c[M>>2]=ia+1;c[(c[z>>2]|0)+(ia<<2)>>2]=j}while(0);c[E>>2]=(c[E>>2]|0)+1}b:do if(((c[ga>>2]|0)==0&(c[Y>>2]|0)!=0?(Kd(c[X>>2]|0),Kd(c[ca>>2]|0),c[X>>2]=0,c[ca>>2]=0,(c[M>>2]|0)==0):0)?(Kd(c[z>>2]|0),c[z>>2]=0,c[ga>>2]=Jp(c[w>>2]|0,c[(c[x>>2]|0)+4>>2]|0,c[Y>>2]|0,z,M,R,c[y>>2]|0)|0,(c[ga>>2]|0)==0&(c[_>>2]|0)!=0):0){c[H>>2]=0;while(1){if((c[H>>2]|0)>=(c[M>>2]|0))break b;ia=(Td(c[_>>2]|0,c[(c[z>>2]|0)+(c[H>>2]<<2)>>2]|0)|0)==0;f=c[H>>2]|0;if(ia)break;c[H>>2]=f+1}c[I>>2]=f;while(1){if((c[I>>2]|0)>=(c[M>>2]|0))break;c[(c[z>>2]|0)+(c[I>>2]<<2)>>2]=c[(c[z>>2]|0)+((c[I>>2]|0)+1<<2)>>2];c[I>>2]=(c[I>>2]|0)+1}c[M>>2]=(c[M>>2]|0)+-1}while(0);if(!(c[ga>>2]|0)){if(!(c[M>>2]|0)){c[c[z>>2]>>2]=24948;c[R>>2]=8;c[M>>2]=1}if((c[fa>>2]|0)==0?(c[ga>>2]=Hp(c[S>>2]|0,21308,fa,c[y>>2]|0)|0,(c[ga>>2]|0)!=0):0)break;c[ga>>2]=Kp(c[ba>>2]|0,O,A)|0;if((c[ga>>2]|0)==1){ia=c[y>>2]|0;c[T>>2]=c[ba>>2];zk(ia,24956,T)}if(!(c[ga>>2]|0)){c[L>>2]=280+(c[M>>2]<<2)+((c[O>>2]|0)*24|0)+(c[M>>2]|0)+(c[P>>2]|0)+(c[N>>2]|0)+(c[R>>2]|0);c[ea>>2]=Id(c[L>>2]|0)|0; +if(!(c[ea>>2]|0)){c[ga>>2]=7;break}kR(c[ea>>2]|0,0,c[L>>2]|0)|0;c[(c[ea>>2]|0)+12>>2]=c[w>>2];c[(c[ea>>2]|0)+24>>2]=c[M>>2];c[(c[ea>>2]|0)+260>>2]=0;c[(c[ea>>2]|0)+28>>2]=(c[ea>>2]|0)+280;c[(c[ea>>2]|0)+36>>2]=c[fa>>2];c[(c[ea>>2]|0)+256>>2]=1048576;a[(c[ea>>2]|0)+230>>0]=((c[G>>2]|0)!=0?(c[D>>2]|0)==0:0)&1;a[(c[ea>>2]|0)+229>>0]=c[G>>2];a[(c[ea>>2]|0)+228>>0]=c[G>>2];a[(c[ea>>2]|0)+231>>0]=c[C>>2];c[(c[ea>>2]|0)+48>>2]=255;c[(c[ea>>2]|0)+40>>2]=c[Y>>2];c[(c[ea>>2]|0)+44>>2]=c[_>>2];c[Y>>2]=0;c[_>>2]=0;c[(c[ea>>2]|0)+252>>2]=(c[(c[ea>>2]|0)+28>>2]|0)+(c[M>>2]<<2);iR(c[(c[ea>>2]|0)+252>>2]|0,c[A>>2]|0,(c[O>>2]|0)*24|0)|0;c[(c[ea>>2]|0)+248>>2]=c[O>>2];c[E>>2]=0;while(1){if((c[E>>2]|0)>=(c[O>>2]|0))break;ek((c[(c[ea>>2]|0)+252>>2]|0)+((c[E>>2]|0)*24|0)+4|0,1,1);c[E>>2]=(c[E>>2]|0)+1}c[(c[ea>>2]|0)+32>>2]=(c[(c[ea>>2]|0)+252>>2]|0)+((c[O>>2]|0)*24|0);c[Z>>2]=(c[(c[ea>>2]|0)+32>>2]|0)+(c[M>>2]|0);c[(c[ea>>2]|0)+20>>2]=c[Z>>2];iR(c[Z>>2]|0,c[(c[x>>2]|0)+8>>2]|0,c[P>>2]|0)|0;c[Z>>2]=(c[Z>>2]|0)+(c[P>>2]|0);c[(c[ea>>2]|0)+16>>2]=c[Z>>2];iR(c[Z>>2]|0,c[(c[x>>2]|0)+4>>2]|0,c[N>>2]|0)|0;c[Z>>2]=(c[Z>>2]|0)+(c[N>>2]|0);c[F>>2]=0;while(1){if((c[F>>2]|0)>=(c[M>>2]|0))break;c[J>>2]=0;c[W>>2]=Lp(c[(c[z>>2]|0)+(c[F>>2]<<2)>>2]|0,J)|0;iR(c[Z>>2]|0,c[W>>2]|0,c[J>>2]|0)|0;a[(c[Z>>2]|0)+(c[J>>2]|0)>>0]=0;Ik(c[Z>>2]|0);c[(c[(c[ea>>2]|0)+28>>2]|0)+(c[F>>2]<<2)>>2]=c[Z>>2];c[Z>>2]=(c[Z>>2]|0)+((c[J>>2]|0)+1);c[F>>2]=(c[F>>2]|0)+1}c[F>>2]=0;while(1){if((c[F>>2]|0)>=(c[M>>2]|0))break;c[K>>2]=BQ(c[(c[(c[ea>>2]|0)+28>>2]|0)+(c[F>>2]<<2)>>2]|0)|0;c[E>>2]=0;while(1){if((c[E>>2]|0)>=(c[Q>>2]|0))break;c[aa>>2]=c[(c[B>>2]|0)+(c[E>>2]<<2)>>2];if(((c[aa>>2]|0)!=0?(ia=c[K>>2]|0,(ia|0)==(BQ(c[aa>>2]|0)|0)):0)?0==(zd(c[(c[(c[ea>>2]|0)+28>>2]|0)+(c[F>>2]<<2)>>2]|0,c[aa>>2]|0,c[K>>2]|0)|0):0){a[(c[(c[ea>>2]|0)+32>>2]|0)+(c[F>>2]|0)>>0]=1;Kd(c[aa>>2]|0);c[(c[B>>2]|0)+(c[E>>2]<<2)>>2]=0}c[E>>2]=(c[E>>2]|0)+1}c[F>>2]=(c[F>>2]|0)+1}c[E>>2]=0;while(1){if((c[E>>2]|0)>=(c[Q>>2]|0))break;if(c[(c[B>>2]|0)+(c[E>>2]<<2)>>2]|0){ia=c[y>>2]|0;c[U>>2]=c[(c[B>>2]|0)+(c[E>>2]<<2)>>2];zk(ia,24991,U);c[ga>>2]=1}c[E>>2]=(c[E>>2]|0)+1}if((c[ga>>2]|0)==0?((c[X>>2]|0)==0|0)!=((c[ca>>2]|0)==0|0):0){c[$>>2]=(c[X>>2]|0)==0?25010:25019;c[ga>>2]=1;ia=c[y>>2]|0;c[V>>2]=c[$>>2];zk(ia,25030,V)}ia=Mp(c[ea>>2]|0,c[ca>>2]|0,ga)|0;c[(c[ea>>2]|0)+216>>2]=ia;ia=Np(c[ea>>2]|0,c[X>>2]|0,ga)|0;c[(c[ea>>2]|0)+220>>2]=ia;if(!(c[ga>>2]|0)){if(c[v>>2]|0)c[ga>>2]=Op(c[ea>>2]|0)|0;if(!((c[G>>2]|0)!=0|(c[v>>2]|0)!=0))a[(c[ea>>2]|0)+229>>0]=2;Pp(ga,c[ea>>2]|0);c[(c[ea>>2]|0)+224>>2]=(c[(c[ea>>2]|0)+236>>2]|0)-35;Qp(ga,c[ea>>2]|0)}}}}else c[ga>>2]=7;while(0);Kd(c[ba>>2]|0);Kd(c[A>>2]|0);Kd(c[X>>2]|0);Kd(c[ca>>2]|0);Kd(c[Y>>2]|0);Kd(c[_>>2]|0);c[E>>2]=0;while(1){if((c[E>>2]|0)>=(c[Q>>2]|0))break;Kd(c[(c[B>>2]|0)+(c[E>>2]<<2)>>2]|0);c[E>>2]=(c[E>>2]|0)+1}Kd(c[z>>2]|0);Kd(c[B>>2]|0);f=c[ea>>2]|0;if(!(c[ga>>2]|0)){c[c[da>>2]>>2]=f;ia=c[ga>>2]|0;i=ha;return ia|0}if(f){Mk(c[ea>>2]|0)|0;ia=c[ga>>2]|0;i=ha;return ia|0}if(!(c[fa>>2]|0)){ia=c[ga>>2]|0;i=ha;return ia|0}Tb[c[(c[c[fa>>2]>>2]|0)+8>>2]&255](c[fa>>2]|0)|0;ia=c[ga>>2]|0;i=ha;return ia|0}function Gp(b){b=b|0;var c=0,d=0;d=i;i=i+16|0;c=d;a[c>>0]=b;if(a[c>>0]&128){b=1;b=b&1;i=d;return b|0}b=(a[25712+(a[c>>0]|0)>>0]|0)!=0;b=b&1;i=d;return b|0}function Hp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;y=i;i=i+80|0;t=y+16|0;s=y+8|0;z=y;g=y+76|0;h=y+72|0;A=y+68|0;j=y+64|0;k=y+60|0;r=y+56|0;u=y+52|0;p=y+48|0;v=y+44|0;w=y+40|0;o=y+36|0;l=y+32|0;n=y+28|0;q=y+24|0;m=y+20|0;c[h>>2]=b;c[A>>2]=d;c[j>>2]=e;c[k>>2]=f;c[u>>2]=c[A>>2];c[p>>2]=0;c[z>>2]=c[A>>2];c[v>>2]=Od(19255,z)|0;if(!(c[v>>2]|0)){c[g>>2]=7;A=c[g>>2]|0;i=y;return A|0}A=BQ(c[v>>2]|0)|0;c[w>>2]=(c[v>>2]|0)+A;c[u>>2]=Lp(c[v>>2]|0,p)|0;if(!(c[u>>2]|0))c[u>>2]=c[v>>2];a[(c[u>>2]|0)+(c[p>>2]|0)>>0]=0;Ik(c[u>>2]|0);z=c[h>>2]|0;A=c[u>>2]|0;c[o>>2]=yk(z,A,(BQ(c[u>>2]|0)|0)+1|0)|0;if(c[o>>2]|0){c[l>>2]=0;c[n>>2]=0;c[u>>2]=(c[u>>2]|0)+((c[p>>2]|0)+1);while(1){if((c[u>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;A=Lp(c[u>>2]|0,p)|0;c[u>>2]=A;if(!A)break;c[q>>2]=(c[n>>2]|0)+1<<2;c[m>>2]=Ld(c[l>>2]|0,c[q>>2]|0)|0;if(!(c[m>>2]|0)){x=11;break}c[l>>2]=c[m>>2];z=c[u>>2]|0;A=c[n>>2]|0;c[n>>2]=A+1;c[(c[l>>2]|0)+(A<<2)>>2]=z;a[(c[u>>2]|0)+(c[p>>2]|0)>>0]=0;Ik(c[u>>2]|0);c[u>>2]=(c[u>>2]|0)+((c[p>>2]|0)+1)}if((x|0)==11){Kd(c[v>>2]|0);Kd(c[l>>2]|0);c[g>>2]=7;A=c[g>>2]|0;i=y;return A|0}c[r>>2]=Ob[c[(c[o>>2]|0)+4>>2]&255](c[n>>2]|0,c[l>>2]|0,c[j>>2]|0)|0;if(c[r>>2]|0)zk(c[k>>2]|0,25694,t);else c[c[c[j>>2]>>2]>>2]=c[o>>2];Kd(c[l>>2]|0)}else{A=c[k>>2]|0;c[s>>2]=c[u>>2];zk(A,21456,s);c[r>>2]=1}Kd(c[v>>2]|0);c[g>>2]=c[r>>2];A=c[g>>2]|0;i=y;return A|0}function Ip(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;k=o;f=o+24|0;g=o+20|0;h=o+16|0;j=o+12|0;m=o+8|0;l=o+4|0;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[l>>2]=c[g>>2];while(1){d=c[l>>2]|0;if((a[c[l>>2]>>0]|0)==61)break;if(!(a[d>>0]|0)){n=4;break}c[l>>2]=(c[l>>2]|0)+1}if((n|0)==4){c[f>>2]=0;n=c[f>>2]|0;i=o;return n|0}c[c[h>>2]>>2]=d-(c[g>>2]|0);c[k>>2]=(c[l>>2]|0)+1;c[m>>2]=Od(19255,k)|0;if(c[m>>2]|0)Ik(c[m>>2]|0);c[c[j>>2]>>2]=c[m>>2];c[f>>2]=1;n=c[f>>2]|0;i=o;return n|0}function Jp(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+96|0;w=A+8|0;B=A;j=A+80|0;C=A+76|0;D=A+72|0;k=A+68|0;l=A+64|0;m=A+60|0;n=A+56|0;v=A+52|0;z=A+48|0;u=A+44|0;o=A+40|0;s=A+36|0;r=A+32|0;p=A+28|0;x=A+24|0;t=A+20|0;y=A+16|0;q=A+12|0;c[j>>2]=a;c[C>>2]=b;c[D>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[v>>2]=0;c[u>>2]=0;d=c[D>>2]|0;c[B>>2]=c[C>>2];c[B+4>>2]=d;c[z>>2]=Od(25639,B)|0;if(c[z>>2]|0){c[v>>2]=cf(c[j>>2]|0,c[z>>2]|0,-1,u,0)|0;if(c[v>>2]|0){D=c[n>>2]|0;c[w>>2]=bf(c[j>>2]|0)|0;zk(D,19255,w)}}else c[v>>2]=7;Kd(c[z>>2]|0);if(c[v>>2]|0){D=c[v>>2]|0;i=A;return D|0}c[s>>2]=0;c[r>>2]=ye(c[u>>2]|0)|0;c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[r>>2]|0))break;c[x>>2]=Ie(c[u>>2]|0,c[p>>2]|0)|0;D=(BQ(c[x>>2]|0)|0)+1|0;c[s>>2]=(c[s>>2]|0)+D;c[p>>2]=(c[p>>2]|0)+1}c[o>>2]=Id((c[r>>2]<<2)+(c[s>>2]|0)|0)|0;a:do if(!(c[o>>2]|0))c[v>>2]=7;else{c[t>>2]=(c[o>>2]|0)+(c[r>>2]<<2);c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[r>>2]|0))break a;c[y>>2]=Ie(c[u>>2]|0,c[p>>2]|0)|0;c[q>>2]=(BQ(c[y>>2]|0)|0)+1;iR(c[t>>2]|0,c[y>>2]|0,c[q>>2]|0)|0;c[(c[o>>2]|0)+(c[p>>2]<<2)>>2]=c[t>>2];c[t>>2]=(c[t>>2]|0)+(c[q>>2]|0);c[p>>2]=(c[p>>2]|0)+1}}while(0);Yd(c[u>>2]|0)|0;c[c[l>>2]>>2]=c[r>>2];c[c[m>>2]>>2]=c[s>>2];c[c[k>>2]>>2]=c[o>>2];D=c[v>>2]|0;i=A;return D|0}function Kp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;f=q+36|0;g=q+32|0;h=q+28|0;j=q+24|0;k=q+20|0;m=q+16|0;o=q+12|0;p=q+8|0;l=q+4|0;n=q;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[m>>2]=1;a:do if((c[g>>2]|0)!=0?(a[c[g>>2]>>0]|0)!=0:0){c[m>>2]=(c[m>>2]|0)+1;c[o>>2]=c[g>>2];while(1){if(!(a[c[o>>2]>>0]|0))break a;if((a[c[o>>2]>>0]|0)==44)c[m>>2]=(c[m>>2]|0)+1;c[o>>2]=(c[o>>2]|0)+1}}while(0);c[k>>2]=Id((c[m>>2]|0)*24|0)|0;c[c[j>>2]>>2]=c[k>>2];if(!(c[k>>2]|0)){c[f>>2]=7;b=c[f>>2]|0;i=q;return b|0}kR(c[k>>2]|0,0,(c[m>>2]|0)*24|0)|0;b:do if(c[g>>2]|0){c[p>>2]=c[g>>2];c[l>>2]=1;while(1){if((c[l>>2]|0)>=(c[m>>2]|0))break b;c[n>>2]=0;if(Tp(p,n)|0)break;if(!(c[n>>2]|0)){c[m>>2]=(c[m>>2]|0)+-1;c[l>>2]=(c[l>>2]|0)+-1}else c[(c[k>>2]|0)+((c[l>>2]|0)*24|0)>>2]=c[n>>2];c[p>>2]=(c[p>>2]|0)+1;c[l>>2]=(c[l>>2]|0)+1}c[f>>2]=1;b=c[f>>2]|0;i=q;return b|0}while(0);c[c[h>>2]>>2]=c[m>>2];c[f>>2]=0;b=c[f>>2]|0;i=q;return b|0}function Lp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+16|0;l=k+12|0;g=k+8|0;h=k+4|0;j=k;e=k+20|0;c[l>>2]=b;c[g>>2]=d;c[j>>2]=0;c[h>>2]=c[l>>2];a:while(1){if(c[j>>2]|0){d=21;break}a[e>>0]=a[c[h>>2]>>0]|0;switch(a[e>>0]|0){case 0:{d=4;break a}case 96:case 34:case 39:{c[j>>2]=c[h>>2];while(1){l=(c[j>>2]|0)+1|0;c[j>>2]=l;if(!(a[l>>0]|0))continue a;if((a[c[j>>2]>>0]|0)!=(a[e>>0]|0))continue;l=(c[j>>2]|0)+1|0;c[j>>2]=l;if((a[l>>0]|0)!=(a[e>>0]|0))continue a}}case 91:{c[j>>2]=(c[h>>2]|0)+1;while(1){if(a[c[j>>2]>>0]|0)b=(a[c[j>>2]>>0]|0)!=93;else b=0;d=c[j>>2]|0;if(!b)break;c[j>>2]=d+1}if(!(a[d>>0]|0))continue a;c[j>>2]=(c[j>>2]|0)+1;continue a}default:{l=(Gp(a[c[h>>2]>>0]|0)|0)!=0;d=(c[h>>2]|0)+1|0;if(!l){c[h>>2]=d;continue a}c[j>>2]=d;while(1){if(!(Gp(a[c[j>>2]>>0]|0)|0))continue a;c[j>>2]=(c[j>>2]|0)+1}}}}if((d|0)==4){c[f>>2]=0;l=c[f>>2]|0;i=k;return l|0}else if((d|0)==21){c[c[g>>2]>>2]=(c[j>>2]|0)-(c[h>>2]|0);c[f>>2]=c[h>>2];l=c[f>>2]|0;i=k;return l|0}return 0}function Mp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+96|0;r=t+56|0;l=t+48|0;k=t+40|0;n=t+32|0;m=t+24|0;j=t+8|0;h=t;q=t+92|0;e=t+88|0;f=t+84|0;s=t+80|0;o=t+76|0;p=t+72|0;g=t+68|0;c[q>>2]=a;c[e>>2]=b;c[f>>2]=d;c[s>>2]=0;c[o>>2]=0;if(c[(c[q>>2]|0)+40>>2]|0){Sp(c[f>>2]|0,s,25592,n);c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[q>>2]|0)+24>>2]|0))break;p=c[f>>2]|0;c[k>>2]=c[(c[(c[q>>2]|0)+28>>2]|0)+(c[g>>2]<<2)>>2];Sp(p,s,25598,k);c[g>>2]=(c[g>>2]|0)+1}if(c[(c[q>>2]|0)+44>>2]|0){p=c[f>>2]|0;c[l>>2]=c[(c[q>>2]|0)+44>>2];Sp(p,s,25578,l)}}else{if(c[e>>2]|0){b=Rp(c[e>>2]|0)|0;c[p>>2]=b;c[o>>2]=b}else c[p>>2]=19266;Sp(c[f>>2]|0,s,25557,h);c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[q>>2]|0)+24>>2]|0))break;b=c[f>>2]|0;l=c[g>>2]|0;n=c[(c[(c[q>>2]|0)+28>>2]|0)+(c[g>>2]<<2)>>2]|0;c[j>>2]=c[p>>2];c[j+4>>2]=l;c[j+8>>2]=n;Sp(b,s,25563,j);c[g>>2]=(c[g>>2]|0)+1}if(c[(c[q>>2]|0)+44>>2]|0){p=c[f>>2]|0;c[m>>2]=25585;Sp(p,s,25578,m)}Kd(c[o>>2]|0)}e=c[f>>2]|0;f=c[(c[q>>2]|0)+16>>2]|0;g=c[q>>2]|0;if(c[(c[q>>2]|0)+40>>2]|0){b=c[g+40>>2]|0;p=c[q>>2]|0;p=p+40|0;p=c[p>>2]|0;p=(p|0)!=0;p=p?19266:25607;c[r>>2]=f;q=r+4|0;c[q>>2]=b;q=r+8|0;c[q>>2]=p;Sp(e,s,25616,r);s=c[s>>2]|0;i=t;return s|0}else{b=c[g+20>>2]|0;p=c[q>>2]|0;p=p+40|0;p=c[p>>2]|0;p=(p|0)!=0;p=p?19266:25607;c[r>>2]=f;q=r+4|0;c[q>>2]=b;q=r+8|0;c[q>>2]=p;Sp(e,s,25616,r);s=c[s>>2]|0;i=t;return s|0}return 0}function Np(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;k=o+16|0;j=o+8|0;e=o+44|0;f=o+40|0;g=o+36|0;n=o+32|0;l=o+28|0;m=o+24|0;h=o+20|0;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[n>>2]=0;c[l>>2]=0;if(c[f>>2]|0){b=Rp(c[f>>2]|0)|0;c[m>>2]=b;c[l>>2]=b}else c[m>>2]=19266;Sp(c[g>>2]|0,n,21139,o);c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[(c[e>>2]|0)+24>>2]|0))break;b=c[g>>2]|0;c[j>>2]=c[m>>2];Sp(b,n,25541,j);c[h>>2]=(c[h>>2]|0)+1}if(!(c[(c[e>>2]|0)+44>>2]|0)){m=c[l>>2]|0;Kd(m);n=c[n>>2]|0;i=o;return n|0}Sp(c[g>>2]|0,n,25548,k);m=c[l>>2]|0;Kd(m);n=c[n>>2]|0;i=o;return n|0}function Op(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+112|0;m=r+64|0;k=r+56|0;j=r+48|0;h=r+32|0;n=r+24|0;l=r+8|0;d=r+96|0;g=r+92|0;f=r+88|0;e=r+84|0;q=r+80|0;p=r+76|0;o=r+72|0;c[d>>2]=b;c[g>>2]=0;c[e>>2]=c[(c[d>>2]|0)+12>>2];if(!(c[(c[d>>2]|0)+40>>2]|0)){c[q>>2]=c[(c[d>>2]|0)+44>>2];c[p>>2]=Od(25166,r)|0;c[f>>2]=0;while(1){if(!(c[p>>2]|0))break;if((c[f>>2]|0)>=(c[(c[d>>2]|0)+24>>2]|0))break;c[o>>2]=c[(c[(c[d>>2]|0)+28>>2]|0)+(c[f>>2]<<2)>>2];s=c[f>>2]|0;b=c[o>>2]|0;c[l>>2]=c[p>>2];c[l+4>>2]=s;c[l+8>>2]=b;c[p>>2]=Od(25192,l)|0;c[f>>2]=(c[f>>2]|0)+1}if((c[q>>2]|0)!=0&(c[p>>2]|0)!=0){s=c[q>>2]|0;c[n>>2]=c[p>>2];c[n+4>>2]=s;c[p>>2]=Od(25204,n)|0}if(!(c[p>>2]|0))c[g>>2]=7;s=c[e>>2]|0;o=c[(c[d>>2]|0)+20>>2]|0;q=c[p>>2]|0;c[h>>2]=c[(c[d>>2]|0)+16>>2];c[h+4>>2]=o;c[h+8>>2]=q;hl(g,s,25215,h);Kd(c[p>>2]|0)}s=c[e>>2]|0;q=c[(c[d>>2]|0)+20>>2]|0;c[j>>2]=c[(c[d>>2]|0)+16>>2];c[j+4>>2]=q;hl(g,s,25248,j);s=c[e>>2]|0;q=c[(c[d>>2]|0)+20>>2]|0;c[k>>2]=c[(c[d>>2]|0)+16>>2];c[k+4>>2]=q;hl(g,s,25320,k);if(a[(c[d>>2]|0)+230>>0]|0){s=c[e>>2]|0;q=c[(c[d>>2]|0)+20>>2]|0;c[m>>2]=c[(c[d>>2]|0)+16>>2];c[m+4>>2]=q;hl(g,s,25473,m)}if(!(a[(c[d>>2]|0)+229>>0]|0)){s=c[g>>2]|0;i=r;return s|0}Xo(g,c[d>>2]|0);s=c[g>>2]|0;i=r;return s|0}function Pp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;h=k;d=k+20|0;e=k+16|0;g=k+12|0;j=k+8|0;f=k+4|0;c[d>>2]=a;c[e>>2]=b;if(c[c[d>>2]>>2]|0){i=k;return}c[h>>2]=c[(c[e>>2]|0)+16>>2];c[j>>2]=Od(25146,h)|0;do if(c[j>>2]|0){c[g>>2]=cf(c[(c[e>>2]|0)+12>>2]|0,c[j>>2]|0,-1,f,0)|0;if(!(c[g>>2]|0)){ue(c[f>>2]|0)|0;h=De(c[f>>2]|0,0)|0;c[(c[e>>2]|0)+236>>2]=h;c[g>>2]=Yd(c[f>>2]|0)|0;break}if((c[g>>2]|0)==23){c[(c[e>>2]|0)+236>>2]=1024;c[g>>2]=0}}else c[g>>2]=7;while(0);Kd(c[j>>2]|0);c[c[d>>2]>>2]=c[g>>2];i=k;return}function Qp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+64|0;l=p+24|0;k=p+16|0;e=p+8|0;d=p;f=p+60|0;g=p+56|0;h=p+52|0;j=p+48|0;o=p+44|0;m=p+40|0;n=p+36|0;c[f>>2]=a;c[g>>2]=b;if(c[c[f>>2]>>2]|0){i=p;return}if(c[(c[g>>2]|0)+44>>2]|0)b=c[(c[g>>2]|0)+44>>2]|0;else b=25071;c[n>>2]=b;a=c[(c[g>>2]|0)+12>>2]|0;c[d>>2]=1;hf(a,1,d)|0;c[e>>2]=c[c[(c[g>>2]|0)+28>>2]>>2];c[m>>2]=Od(25080,e)|0;c[h>>2]=1;while(1){if(c[m>>2]|0)a=(c[h>>2]|0)<(c[(c[g>>2]|0)+24>>2]|0);else a=0;b=c[m>>2]|0;if(!a)break;e=c[(c[(c[g>>2]|0)+28>>2]|0)+(c[h>>2]<<2)>>2]|0;c[k>>2]=b;c[k+4>>2]=e;c[m>>2]=Od(25085,k)|0;c[h>>2]=(c[h>>2]|0)+1}k=c[(c[g>>2]|0)+20>>2]|0;n=c[n>>2]|0;c[l>>2]=b;c[l+4>>2]=k;c[l+8>>2]=n;c[o>>2]=Od(25092,l)|0;if((c[m>>2]|0)!=0&(c[o>>2]|0)!=0)c[j>>2]=ff(c[(c[g>>2]|0)+12>>2]|0,c[o>>2]|0)|0;else c[j>>2]=7;Kd(c[o>>2]|0);Kd(c[m>>2]|0);c[c[f>>2]>>2]=c[j>>2];i=p;return}function Rp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;d=h+16|0;j=h+12|0;g=h+8|0;e=h+4|0;f=h;c[d>>2]=b;c[j>>2]=2+((BQ(c[d>>2]|0)|0)<<1)+1;c[g>>2]=Id(c[j>>2]|0)|0;if(!(c[g>>2]|0)){j=c[g>>2]|0;i=h;return j|0}c[f>>2]=c[g>>2];j=c[f>>2]|0;c[f>>2]=j+1;a[j>>0]=34;c[e>>2]=0;while(1){if(!(a[(c[d>>2]|0)+(c[e>>2]|0)>>0]|0))break;if((a[(c[d>>2]|0)+(c[e>>2]|0)>>0]|0)==34){j=c[f>>2]|0;c[f>>2]=j+1;a[j>>0]=34}b=a[(c[d>>2]|0)+(c[e>>2]|0)>>0]|0;j=c[f>>2]|0;c[f>>2]=j+1;a[j>>0]=b;c[e>>2]=(c[e>>2]|0)+1}j=c[f>>2]|0;c[f>>2]=j+1;a[j>>0]=34;j=c[f>>2]|0;c[f>>2]=j+1;a[j>>0]=0;j=c[g>>2]|0;i=h;return j|0}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,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;k=n;f=n+40|0;g=n+36|0;h=n+32|0;j=n+16|0;l=n+12|0;m=n+8|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;if(c[c[f>>2]>>2]|0){i=n;return}c[j>>2]=e;c[l>>2]=Nd(c[h>>2]|0,j)|0;if((c[l>>2]|0)!=0?(c[c[g>>2]>>2]|0)!=0:0){d=c[l>>2]|0;c[k>>2]=c[c[g>>2]>>2];c[k+4>>2]=d;c[m>>2]=Od(25552,k)|0;Kd(c[l>>2]|0);c[l>>2]=c[m>>2]}if(!(c[l>>2]|0))c[c[f>>2]>>2]=7;Kd(c[c[g>>2]>>2]|0);c[c[g>>2]>>2]=c[l>>2];i=n;return}function Tp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+20|0;f=l+16|0;g=l+12|0;j=l+4|0;h=l;c[f>>2]=b;c[g>>2]=d;c[l+8>>2]=1e7;c[h>>2]=0;c[j>>2]=c[c[f>>2]>>2];while(1){if((a[c[j>>2]>>0]|0)<48)break;if((a[c[j>>2]>>0]|0)>57)break;c[h>>2]=((c[h>>2]|0)*10|0)+((a[c[j>>2]>>0]|0)-48);if((c[h>>2]|0)>1e7){k=5;break}c[j>>2]=(c[j>>2]|0)+1}if((k|0)==5)c[h>>2]=0;if((c[j>>2]|0)==(c[c[f>>2]>>2]|0)){c[e>>2]=1;k=c[e>>2]|0;i=l;return k|0}else{c[c[g>>2]>>2]=c[h>>2];c[c[f>>2]>>2]=c[j>>2];c[e>>2]=0;k=c[e>>2]|0;i=l;return k|0}return 0}function Up(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+48|0;j=m;e=m+32|0;n=m+28|0;o=m+24|0;g=m+20|0;h=m+16|0;l=m+12|0;f=m+8|0;k=m+4|0;c[e>>2]=a;c[n>>2]=b;c[o>>2]=d;c[h>>2]=0;c[g>>2]=ve(c[e>>2]|0)|0;c[l>>2]=ae(c[c[o>>2]>>2]|0)|0;c[f>>2]=(be(c[c[o>>2]>>2]|0)|0)+1;if((c[n>>2]|0)==2){je(c[e>>2]|0,25840,-1);i=m;return}if(c[l>>2]|0)c[h>>2]=yk(c[g>>2]|0,c[l>>2]|0,c[f>>2]|0)|0;if(c[h>>2]|0){ge(c[e>>2]|0,h,4,-1);i=m;return}else{c[j>>2]=c[l>>2];c[k>>2]=Od(21456,j)|0;je(c[e>>2]|0,c[k>>2]|0,-1);Kd(c[k>>2]|0);i=m;return}}function Vp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;d=c[c[g>>2]>>2]|0;if(c[(c[g>>2]|0)+4>>2]|0)c[c[(c[g>>2]|0)+4>>2]>>2]=d;else c[(c[f>>2]|0)+8>>2]=d;if(c[c[g>>2]>>2]|0)c[(c[c[g>>2]>>2]|0)+4>>2]=c[(c[g>>2]|0)+4>>2];c[j>>2]=(c[(c[f>>2]|0)+16>>2]|0)+(c[h>>2]<<3);if((c[(c[j>>2]|0)+4>>2]|0)==(c[g>>2]|0))c[(c[j>>2]|0)+4>>2]=c[c[g>>2]>>2];h=c[j>>2]|0;c[h>>2]=(c[h>>2]|0)+-1;if((c[c[j>>2]>>2]|0)<=0)c[(c[j>>2]|0)+4>>2]=0;if((a[(c[f>>2]|0)+1>>0]|0)!=0?(c[(c[g>>2]|0)+12>>2]|0)!=0:0)kk(c[(c[g>>2]|0)+12>>2]|0);kk(c[g>>2]|0);j=(c[f>>2]|0)+4|0;c[j>>2]=(c[j>>2]|0)+-1;if((c[(c[f>>2]|0)+4>>2]|0)>0){i=k;return}jk(c[f>>2]|0);i=k;return}function Wp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;e=n+28|0;f=n+24|0;g=n+20|0;k=n+16|0;h=n+12|0;l=n+8|0;m=n+4|0;j=n;c[f>>2]=b;c[g>>2]=d;c[k>>2]=Xp(c[g>>2]<<3)|0;if(!(c[k>>2]|0)){c[e>>2]=1;m=c[e>>2]|0;i=n;return m|0}kk(c[(c[f>>2]|0)+16>>2]|0);c[(c[f>>2]|0)+16>>2]=c[k>>2];c[(c[f>>2]|0)+12>>2]=c[g>>2];c[m>>2]=Bk(a[c[f>>2]>>0]|0)|0;c[h>>2]=c[(c[f>>2]|0)+8>>2];c[(c[f>>2]|0)+8>>2]=0;while(1){if(!(c[h>>2]|0))break;b=Yb[c[m>>2]&255](c[(c[h>>2]|0)+12>>2]|0,c[(c[h>>2]|0)+16>>2]|0)|0;c[j>>2]=b&(c[g>>2]|0)-1;c[l>>2]=c[c[h>>2]>>2];Yp(c[f>>2]|0,(c[k>>2]|0)+(c[j>>2]<<3)|0,c[h>>2]|0);c[h>>2]=c[l>>2]}c[e>>2]=0;m=c[e>>2]|0;i=n;return m|0}function Xp(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=Id(c[b>>2]|0)|0;if(!(c[d>>2]|0)){d=c[d>>2]|0;i=e;return d|0}kR(c[d>>2]|0,0,c[b>>2]|0)|0;d=c[d>>2]|0;i=e;return d|0}function Yp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=c[(c[f>>2]|0)+4>>2];if(!(c[h>>2]|0)){c[c[g>>2]>>2]=c[(c[e>>2]|0)+8>>2];if(c[(c[e>>2]|0)+8>>2]|0)c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]=c[g>>2];c[(c[g>>2]|0)+4>>2]=0;c[(c[e>>2]|0)+8>>2]=c[g>>2];h=c[f>>2]|0;e=c[h>>2]|0;e=e+1|0;c[h>>2]=e;g=c[g>>2]|0;h=c[f>>2]|0;h=h+4|0;c[h>>2]=g;i=j;return}c[c[g>>2]>>2]=c[h>>2];c[(c[g>>2]|0)+4>>2]=c[(c[h>>2]|0)+4>>2];b=c[g>>2]|0;if(c[(c[h>>2]|0)+4>>2]|0)c[c[(c[h>>2]|0)+4>>2]>>2]=b;else c[(c[e>>2]|0)+8>>2]=b;c[(c[h>>2]|0)+4>>2]=c[g>>2];h=c[f>>2]|0;e=c[h>>2]|0;e=e+1|0;c[h>>2]=e;g=c[g>>2]|0;h=c[f>>2]|0;h=h+4|0;c[h>>2]=g;i=j;return}function Zp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+32|0;e=h+16|0;f=h+4|0;g=h;c[h+12>>2]=a;c[h+8>>2]=b;c[f>>2]=d;c[g>>2]=Id(4)|0;if(!(c[g>>2]|0)){c[e>>2]=7;g=c[e>>2]|0;i=h;return g|0}else{c[c[g>>2]>>2]=0;c[c[f>>2]>>2]=c[g>>2];c[e>>2]=0;g=c[e>>2]|0;i=h;return g|0}return 0}function _p(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Kd(c[d>>2]|0);i=b;return 0}function $p(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+20|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[l+16>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=Id(28)|0;if(!(c[k>>2]|0)){c[f>>2]=7;b=c[f>>2]|0;i=l;return b|0}c[(c[k>>2]|0)+4>>2]=c[g>>2];do if(c[g>>2]|0)if((c[h>>2]|0)<0){b=BQ(c[g>>2]|0)|0;c[(c[k>>2]|0)+8>>2]=b;break}else{c[(c[k>>2]|0)+8>>2]=c[h>>2];break}else c[(c[k>>2]|0)+8>>2]=0;while(0);c[(c[k>>2]|0)+12>>2]=0;c[(c[k>>2]|0)+16>>2]=0;c[(c[k>>2]|0)+20>>2]=0;c[(c[k>>2]|0)+24>>2]=0;c[c[j>>2]>>2]=c[k>>2];c[f>>2]=0;b=c[f>>2]|0;i=l;return b|0}function aq(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];Kd(c[(c[d>>2]|0)+20>>2]|0);Kd(c[d>>2]|0);i=b;return 0}function bq(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 j=0,k=0,l=0,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=i;i=i+64|0;j=w+48|0;x=w+44|0;k=w+40|0;l=w+36|0;m=w+32|0;n=w+28|0;o=w+24|0;p=w+20|0;u=w+16|0;r=w+12|0;q=w+8|0;s=w+4|0;t=w;c[x>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=c[x>>2];c[u>>2]=c[(c[p>>2]|0)+4>>2];do{if((c[(c[p>>2]|0)+12>>2]|0)>=(c[(c[p>>2]|0)+8>>2]|0)){v=23;break}while(1){if((c[(c[p>>2]|0)+12>>2]|0)<(c[(c[p>>2]|0)+8>>2]|0)?(x=a[(c[u>>2]|0)+(c[(c[p>>2]|0)+12>>2]|0)>>0]|0,c[q>>2]=x,(x&128|0)==0):0)if((c[q>>2]|0)<48)b=1;else b=(a[25909+((c[q>>2]|0)-48)>>0]|0)!=0^1;else b=0;g=(c[p>>2]|0)+12|0;h=c[g>>2]|0;if(!b)break;c[g>>2]=h+1}c[r>>2]=h;while(1){if((c[(c[p>>2]|0)+12>>2]|0)<(c[(c[p>>2]|0)+8>>2]|0)){x=a[(c[u>>2]|0)+(c[(c[p>>2]|0)+12>>2]|0)>>0]|0;c[q>>2]=x;if(!(x&128))if((c[q>>2]|0)<48)b=1;else b=(a[25909+((c[q>>2]|0)-48)>>0]|0)!=0^1;else b=0;b=b^1}else b=0;g=(c[p>>2]|0)+12|0;h=c[g>>2]|0;if(!b)break;c[g>>2]=h+1}}while((h|0)<=(c[r>>2]|0));if((v|0)==23){c[j>>2]=101;x=c[j>>2]|0;i=w;return x|0}c[s>>2]=(c[(c[p>>2]|0)+12>>2]|0)-(c[r>>2]|0);do if((c[s>>2]|0)>(c[(c[p>>2]|0)+24>>2]|0)){c[(c[p>>2]|0)+24>>2]=(c[s>>2]|0)+20;c[t>>2]=Ld(c[(c[p>>2]|0)+20>>2]|0,c[(c[p>>2]|0)+24>>2]|0)|0;if(c[t>>2]|0){c[(c[p>>2]|0)+20>>2]=c[t>>2];break}c[j>>2]=7;x=c[j>>2]|0;i=w;return x|0}while(0);cq((c[u>>2]|0)+(c[r>>2]|0)|0,c[s>>2]|0,c[(c[p>>2]|0)+20>>2]|0,c[l>>2]|0);c[c[k>>2]>>2]=c[(c[p>>2]|0)+20>>2];c[c[m>>2]>>2]=c[r>>2];c[c[n>>2]>>2]=c[(c[p>>2]|0)+12>>2];v=(c[p>>2]|0)+16|0;x=c[v>>2]|0;c[v>>2]=x+1;c[c[o>>2]>>2]=x;c[j>>2]=0;x=c[j>>2]|0;i=w;return x|0}function cq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+64|0;g=s+28|0;h=s+24|0;o=s+20|0;p=s+16|0;q=s+12|0;k=s+8|0;m=s+36|0;r=s+4|0;l=s;j=s+32|0;c[g>>2]=b;c[h>>2]=d;c[o>>2]=e;c[p>>2]=f;if((c[h>>2]|0)<3|(c[h>>2]|0)>=21){dq(c[g>>2]|0,c[h>>2]|0,c[o>>2]|0,c[p>>2]|0);i=s;return}c[q>>2]=0;c[k>>2]=22;while(1){if((c[q>>2]|0)>=(c[h>>2]|0))break;a[j>>0]=a[(c[g>>2]|0)+(c[q>>2]|0)>>0]|0;if((a[j>>0]|0)>=65?(a[j>>0]|0)<=90:0)a[m+(c[k>>2]|0)>>0]=(a[j>>0]|0)+97-65;else{if((a[j>>0]|0)<97){n=11;break}if((a[j>>0]|0)>122){n=11;break}a[m+(c[k>>2]|0)>>0]=a[j>>0]|0}c[q>>2]=(c[q>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+-1}if((n|0)==11){dq(c[g>>2]|0,c[h>>2]|0,c[o>>2]|0,c[p>>2]|0);i=s;return}n=m+23|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;c[r>>2]=m+((c[k>>2]|0)+1);if((((a[c[r>>2]>>0]|0)==115?(eq(r,25989,25994,0)|0)==0:0)?(eq(r,25997,26001,0)|0)==0:0)?(eq(r,25994,25994,0)|0)==0:0)c[r>>2]=(c[r>>2]|0)+1;c[l>>2]=c[r>>2];do if(!(eq(r,26003,26007,172)|0)){if((eq(r,26010,19266,173)|0)==0?(eq(r,26014,19266,173)|0)==0:0)break;if((((c[r>>2]|0)!=(c[l>>2]|0)?(eq(r,26017,26020,0)|0)==0:0)?(eq(r,26024,26027,0)|0)==0:0)?(eq(r,26031,26034,0)|0)==0:0){if((((hq(c[r>>2]|0)|0)!=0?(a[c[r>>2]>>0]|0)!=108:0)?(a[c[r>>2]>>0]|0)!=115:0)?(a[c[r>>2]>>0]|0)!=122:0){c[r>>2]=(c[r>>2]|0)+1;break}if((iq(c[r>>2]|0)|0)!=0?(jq(c[r>>2]|0)|0)!=0:0){n=(c[r>>2]|0)+-1|0;c[r>>2]=n;a[n>>0]=101}}}while(0);if((a[c[r>>2]>>0]|0)==121?(gq((c[r>>2]|0)+1|0)|0)!=0:0)a[c[r>>2]>>0]=105;switch(a[(c[r>>2]|0)+1>>0]|0){case 97:{if(!(eq(r,26038,26020,172)|0))eq(r,26046,26053,172)|0;break}case 99:{if(!(eq(r,26058,26063,172)|0))eq(r,26068,26073,172)|0;break}case 101:{eq(r,26078,26034,172)|0;break}case 103:{eq(r,26083,26088,172)|0;break}case 108:{if((((eq(r,26092,26027,172)|0)==0?(eq(r,26096,26101,172)|0)==0:0)?(eq(r,26104,26110,172)|0)==0:0)?(eq(r,26114,26118,172)|0)==0:0)eq(r,26120,26126,172)|0;break}case 111:{if((eq(r,26130,26034,172)|0)==0?(eq(r,26138,26020,172)|0)==0:0)eq(r,26144,26020,172)|0;break}case 115:{if(((eq(r,26149,26101,172)|0)==0?(eq(r,26155,26163,172)|0)==0:0)?(eq(r,26167,26175,172)|0)==0:0)eq(r,26179,26126,172)|0;break}case 116:{if((eq(r,26187,26101,172)|0)==0?(eq(r,26193,26163,172)|0)==0:0)eq(r,26199,26027,172)|0;break}default:{}}switch(a[c[r>>2]>>0]|0){case 101:{if((eq(r,26206,26212,172)|0)==0?(eq(r,26215,19266,172)|0)==0:0)eq(r,26221,26101,172)|0;break}case 105:{eq(r,26227,26212,172)|0;break}case 108:{if(!(eq(r,26233,26212,172)|0))eq(r,26238,19266,172)|0;break}case 115:{eq(r,26242,19266,172)|0;break}default:{}}a:do switch(a[(c[r>>2]|0)+1>>0]|0){case 97:{if((a[c[r>>2]>>0]|0)==108?(kq((c[r>>2]|0)+2|0)|0)!=0:0)c[r>>2]=(c[r>>2]|0)+2;break}case 99:{if((a[c[r>>2]>>0]|0)==101?(a[(c[r>>2]|0)+2>>0]|0)==110:0){if((a[(c[r>>2]|0)+3>>0]|0)!=97?(a[(c[r>>2]|0)+3>>0]|0)!=101:0)break a;if(kq((c[r>>2]|0)+4|0)|0)c[r>>2]=(c[r>>2]|0)+4}break}case 101:{if((a[c[r>>2]>>0]|0)==114?(kq((c[r>>2]|0)+2|0)|0)!=0:0)c[r>>2]=(c[r>>2]|0)+2;break}case 105:{if((a[c[r>>2]>>0]|0)==99?(kq((c[r>>2]|0)+2|0)|0)!=0:0)c[r>>2]=(c[r>>2]|0)+2;break}case 108:{if((a[c[r>>2]>>0]|0)==101?(a[(c[r>>2]|0)+2>>0]|0)==98:0){if((a[(c[r>>2]|0)+3>>0]|0)!=97?(a[(c[r>>2]|0)+3>>0]|0)!=105:0)break a;if(kq((c[r>>2]|0)+4|0)|0)c[r>>2]=(c[r>>2]|0)+4}break}case 110:{if((a[c[r>>2]>>0]|0)==116){g=c[r>>2]|0;if((a[(c[r>>2]|0)+2>>0]|0)==97){if(!(kq(g+3|0)|0))break a;c[r>>2]=(c[r>>2]|0)+3;break a}if(((a[g+2>>0]|0)==101?(eq(r,26247,19266,174)|0)==0:0)?(eq(r,26253,19266,174)|0)==0:0)eq(r,26258,19266,174)|0}break}case 111:{g=c[r>>2]|0;if((a[c[r>>2]>>0]|0)==117){if(!(kq(g+2|0)|0))break a;c[r>>2]=(c[r>>2]|0)+2;break a}if((a[g+3>>0]|0)!=115?(a[(c[r>>2]|0)+3>>0]|0)!=116:0)break a;eq(r,26262,19266,174)|0;break}case 115:{if(((a[c[r>>2]>>0]|0)==109?(a[(c[r>>2]|0)+2>>0]|0)==105:0)?(kq((c[r>>2]|0)+3|0)|0)!=0:0)c[r>>2]=(c[r>>2]|0)+3;break}case 116:{if(!(eq(r,26266,19266,174)|0))eq(r,26270,19266,174)|0;break}case 117:{if(((a[c[r>>2]>>0]|0)==115?(a[(c[r>>2]|0)+2>>0]|0)==111:0)?(kq((c[r>>2]|0)+3|0)|0)!=0:0)c[r>>2]=(c[r>>2]|0)+3;break}case 122:case 118:{if(((a[c[r>>2]>>0]|0)==101?(a[(c[r>>2]|0)+2>>0]|0)==105:0)?(kq((c[r>>2]|0)+3|0)|0)!=0:0)c[r>>2]=(c[r>>2]|0)+3;break}default:{}}while(0);do if((a[c[r>>2]>>0]|0)==101){n=(kq((c[r>>2]|0)+1|0)|0)!=0;g=(c[r>>2]|0)+1|0;if(n){c[r>>2]=g;break}if((iq(g)|0)!=0?(jq((c[r>>2]|0)+1|0)|0)==0:0)c[r>>2]=(c[r>>2]|0)+1}while(0);if(((kq(c[r>>2]|0)|0)!=0?(a[c[r>>2]>>0]|0)==108:0)?(a[(c[r>>2]|0)+1>>0]|0)==108:0)c[r>>2]=(c[r>>2]|0)+1;n=BQ(c[r>>2]|0)|0;c[q>>2]=n;c[c[p>>2]>>2]=n;a[(c[o>>2]|0)+(c[q>>2]|0)>>0]=0;while(1){if(!(a[c[r>>2]>>0]|0))break;n=c[r>>2]|0;c[r>>2]=n+1;n=a[n>>0]|0;p=(c[q>>2]|0)+-1|0;c[q>>2]=p;a[(c[o>>2]|0)+p>>0]=n}i=s;return}function dq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+28|0;h=q+24|0;j=q+20|0;k=q+16|0;n=q+12|0;p=q+8|0;o=q+4|0;m=q;l=q+32|0;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[m>>2]=0;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[h>>2]|0))break;a[l>>0]=a[(c[g>>2]|0)+(c[n>>2]|0)>>0]|0;if((a[l>>0]|0)>=65?(a[l>>0]|0)<=90:0)a[(c[j>>2]|0)+(c[n>>2]|0)>>0]=(a[l>>0]|0)-65+97;else{if((a[l>>0]|0)>=48?(a[l>>0]|0)<=57:0)c[m>>2]=1;a[(c[j>>2]|0)+(c[n>>2]|0)>>0]=a[l>>0]|0}c[n>>2]=(c[n>>2]|0)+1}c[p>>2]=(c[m>>2]|0)!=0?3:10;if((c[h>>2]|0)<=(c[p>>2]<<1|0)){b=c[n>>2]|0;e=c[j>>2]|0;b=e+b|0;a[b>>0]=0;b=c[n>>2]|0;e=c[k>>2]|0;c[e>>2]=b;i=q;return}c[o>>2]=c[p>>2];c[n>>2]=(c[h>>2]|0)-(c[p>>2]|0);while(1){if((c[n>>2]|0)>=(c[h>>2]|0))break;a[(c[j>>2]|0)+(c[o>>2]|0)>>0]=a[(c[j>>2]|0)+(c[n>>2]|0)>>0]|0;c[n>>2]=(c[n>>2]|0)+1;c[o>>2]=(c[o>>2]|0)+1}c[n>>2]=c[o>>2];b=c[n>>2]|0;e=c[j>>2]|0;b=e+b|0;a[b>>0]=0;b=c[n>>2]|0;e=c[k>>2]|0;c[e>>2]=b;i=q;return}function eq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=c[c[h>>2]>>2];while(1){if(!(a[c[j>>2]>>0]|0))break;if((a[c[j>>2]>>0]|0)!=(a[c[m>>2]>>0]|0))break;c[m>>2]=(c[m>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1}if(a[c[j>>2]>>0]|0){c[g>>2]=0;e=c[g>>2]|0;i=n;return e|0}if((c[l>>2]|0)!=0?(Tb[c[l>>2]&255](c[m>>2]|0)|0)==0:0){c[g>>2]=1;e=c[g>>2]|0;i=n;return e|0}while(1){if(!(a[c[k>>2]>>0]|0))break;d=c[k>>2]|0;c[k>>2]=d+1;d=a[d>>0]|0;e=(c[m>>2]|0)+-1|0;c[m>>2]=e;a[e>>0]=d}c[c[h>>2]>>2]=c[m>>2];c[g>>2]=1;e=c[g>>2]|0;i=n;return e|0}function fq(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+4|0;e=f;c[e>>2]=b;while(1){g=(lq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}if(!(a[b>>0]|0)){c[d>>2]=0;g=c[d>>2]|0;i=f;return g|0}while(1){g=(mq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}c[d>>2]=(a[b>>0]|0)!=0&1;g=c[d>>2]|0;i=f;return g|0}function gq(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e;c[d>>2]=b;while(1){f=(mq(c[d>>2]|0)|0)!=0;b=c[d>>2]|0;if(!f)break;c[d>>2]=b+1}i=e;return(a[b>>0]|0)!=0|0}function hq(b){b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=b;if(!(mq(c[d>>2]|0)|0)){b=0;b=b&1;i=e;return b|0}b=(a[c[d>>2]>>0]|0)==(a[(c[d>>2]|0)+1>>0]|0);b=b&1;i=e;return b|0}function iq(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+4|0;e=f;c[e>>2]=b;while(1){g=(lq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}if(!(a[b>>0]|0)){c[d>>2]=0;g=c[d>>2]|0;i=f;return g|0}while(1){g=(mq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}if(!(a[b>>0]|0)){c[d>>2]=0;g=c[d>>2]|0;i=f;return g|0}while(1){g=(lq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}if(!(a[b>>0]|0)){c[d>>2]=1;g=c[d>>2]|0;i=f;return g|0}while(1){g=(mq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}c[d>>2]=(a[b>>0]|0)==0&1;g=c[d>>2]|0;i=f;return g|0}function jq(b){b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=b;if(((((mq(c[d>>2]|0)|0)!=0?(a[c[d>>2]>>0]|0)!=119:0)?(a[c[d>>2]>>0]|0)!=120:0)?(a[c[d>>2]>>0]|0)!=121:0)?(lq((c[d>>2]|0)+1|0)|0)!=0:0)d=(mq((c[d>>2]|0)+2|0)|0)!=0;else d=0;i=e;return d&1|0}function kq(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+4|0;e=f;c[e>>2]=b;while(1){g=(lq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}if(!(a[b>>0]|0)){c[d>>2]=0;g=c[d>>2]|0;i=f;return g|0}while(1){g=(mq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}if(!(a[b>>0]|0)){c[d>>2]=0;g=c[d>>2]|0;i=f;return g|0}while(1){g=(lq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}if(!(a[b>>0]|0)){c[d>>2]=0;g=c[d>>2]|0;i=f;return g|0}while(1){g=(mq(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!g)break;c[e>>2]=b+1}c[d>>2]=(a[b>>0]|0)!=0&1;g=c[d>>2]|0;i=f;return g|0}function lq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+8|0;e=h+4|0;f=h;g=h+12|0;c[e>>2]=b;a[g>>0]=a[c[e>>2]>>0]|0;if(!(a[g>>0]|0)){c[d>>2]=0;b=c[d>>2]|0;i=h;return b|0}c[f>>2]=a[26274+((a[g>>0]|0)-97)>>0];if((c[f>>2]|0)<2){c[d>>2]=1-(c[f>>2]|0);b=c[d>>2]|0;i=h;return b|0}else{c[d>>2]=mq((c[e>>2]|0)+1|0)|0;b=c[d>>2]|0;i=h;return b|0}return 0}function mq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+8|0;d=h+4|0;e=h;f=h+12|0;c[d>>2]=b;a[f>>0]=a[c[d>>2]>>0]|0;if(!(a[f>>0]|0)){c[g>>2]=0;g=c[g>>2]|0;i=h;return g|0}c[e>>2]=a[26274+((a[f>>0]|0)-97)>>0];if((c[e>>2]|0)<2){c[g>>2]=c[e>>2];g=c[g>>2]|0;i=h;return g|0}if(!(a[(c[d>>2]|0)+1>>0]|0))d=1;else d=(lq((c[d>>2]|0)+1|0)|0)!=0;c[g>>2]=d&1;g=c[g>>2]|0;i=h;return g|0}function nq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+28|0;h=q+24|0;j=q+20|0;k=q+16|0;p=q+12|0;m=q+8|0;o=q+4|0;l=q+32|0;n=q;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[p>>2]=Id(132)|0;if(!(c[p>>2]|0)){c[g>>2]=7;p=c[g>>2]|0;i=q;return p|0}kR(c[p>>2]|0,0,132)|0;a:do if((c[h>>2]|0)>1){c[o>>2]=BQ(c[(c[j>>2]|0)+4>>2]|0)|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[o>>2]|0))break a;a[l>>0]=a[(c[(c[j>>2]|0)+4>>2]|0)+(c[m>>2]|0)>>0]|0;if((d[l>>0]|0|0)>=128)break;a[(c[p>>2]|0)+4+(d[l>>0]|0)>>0]=1;c[m>>2]=(c[m>>2]|0)+1}Kd(c[p>>2]|0);c[g>>2]=1;p=c[g>>2]|0;i=q;return p|0}else{c[n>>2]=1;while(1){if((c[n>>2]|0)>=128)break a;f=(tq(c[n>>2]|0)|0)!=0^1;a[(c[p>>2]|0)+4+(c[n>>2]|0)>>0]=f?-1:0;c[n>>2]=(c[n>>2]|0)+1}}while(0);c[c[k>>2]>>2]=c[p>>2];c[g>>2]=0;p=c[g>>2]|0;i=q;return p|0}function oq(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Kd(c[d>>2]|0);i=b;return 0}function pq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+20|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[l+16>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=Id(28)|0;if(!(c[k>>2]|0)){c[f>>2]=7;e=c[f>>2]|0;i=l;return e|0}c[(c[k>>2]|0)+4>>2]=c[g>>2];do if(c[g>>2]|0)if((c[h>>2]|0)<0){e=BQ(c[g>>2]|0)|0;c[(c[k>>2]|0)+8>>2]=e;break}else{c[(c[k>>2]|0)+8>>2]=c[h>>2];break}else c[(c[k>>2]|0)+8>>2]=0;while(0);c[(c[k>>2]|0)+12>>2]=0;c[(c[k>>2]|0)+16>>2]=0;c[(c[k>>2]|0)+20>>2]=0;c[(c[k>>2]|0)+24>>2]=0;c[c[j>>2]>>2]=c[k>>2];c[f>>2]=0;e=c[f>>2]|0;i=l;return e|0}function qq(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];Kd(c[(c[d>>2]|0)+20>>2]|0);Kd(c[d>>2]|0);i=b;return 0}function rq(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+64|0;n=z+52|0;A=z+48|0;o=z+44|0;p=z+40|0;q=z+36|0;r=z+32|0;s=z+28|0;t=z+24|0;l=z+20|0;y=z+16|0;w=z+12|0;v=z+8|0;x=z+4|0;k=z;u=z+56|0;c[A>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=j;c[t>>2]=c[A>>2];c[l>>2]=c[c[A>>2]>>2];c[y>>2]=c[(c[t>>2]|0)+4>>2];do{if((c[(c[t>>2]|0)+12>>2]|0)>=(c[(c[t>>2]|0)+8>>2]|0)){m=25;break}while(1){if((c[(c[t>>2]|0)+12>>2]|0)<(c[(c[t>>2]|0)+8>>2]|0))b=(sq(c[l>>2]|0,a[(c[y>>2]|0)+(c[(c[t>>2]|0)+12>>2]|0)>>0]|0)|0)!=0;else b=0;h=(c[t>>2]|0)+12|0;j=c[h>>2]|0;if(!b)break;c[h>>2]=j+1}c[w>>2]=j;while(1){if((c[(c[t>>2]|0)+12>>2]|0)<(c[(c[t>>2]|0)+8>>2]|0))b=(sq(c[l>>2]|0,a[(c[y>>2]|0)+(c[(c[t>>2]|0)+12>>2]|0)>>0]|0)|0)!=0^1;else b=0;h=(c[t>>2]|0)+12|0;j=c[h>>2]|0;if(!b)break;c[h>>2]=j+1}}while((j|0)<=(c[w>>2]|0));if((m|0)==25){c[n>>2]=101;A=c[n>>2]|0;i=z;return A|0}c[x>>2]=(c[(c[t>>2]|0)+12>>2]|0)-(c[w>>2]|0);do if((c[x>>2]|0)>(c[(c[t>>2]|0)+24>>2]|0)){c[(c[t>>2]|0)+24>>2]=(c[x>>2]|0)+20;c[k>>2]=Ld(c[(c[t>>2]|0)+20>>2]|0,c[(c[t>>2]|0)+24>>2]|0)|0;if(c[k>>2]|0){c[(c[t>>2]|0)+20>>2]=c[k>>2]; +break}c[n>>2]=7;A=c[n>>2]|0;i=z;return A|0}while(0);c[v>>2]=0;while(1){if((c[v>>2]|0)>=(c[x>>2]|0))break;a[u>>0]=a[(c[y>>2]|0)+((c[w>>2]|0)+(c[v>>2]|0))>>0]|0;if((d[u>>0]|0|0)>=65?(d[u>>0]|0|0)<=90:0)b=(d[u>>0]|0)-65+97|0;else b=d[u>>0]|0;a[(c[(c[t>>2]|0)+20>>2]|0)+(c[v>>2]|0)>>0]=b;c[v>>2]=(c[v>>2]|0)+1}c[c[o>>2]>>2]=c[(c[t>>2]|0)+20>>2];c[c[p>>2]>>2]=c[x>>2];c[c[q>>2]>>2]=c[w>>2];c[c[r>>2]>>2]=c[(c[t>>2]|0)+12>>2];y=(c[t>>2]|0)+16|0;A=c[y>>2]|0;c[y>>2]=A+1;c[c[s>>2]>>2]=A;c[n>>2]=0;A=c[n>>2]|0;i=z;return A|0}function sq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h;g=h+4|0;c[f>>2]=b;a[g>>0]=e;if((d[g>>0]|0)>=128){b=0;b=b&1;i=h;return b|0}b=(a[(c[f>>2]|0)+4+(d[g>>0]|0)>>0]|0)!=0;b=b&1;i=h;return b|0}function tq(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!((c[b>>2]|0)>=48&(c[b>>2]|0)<=57)?!((c[b>>2]|0)>=65&(c[b>>2]|0)<=90):0)b=(c[b>>2]|0)>=97?(c[b>>2]|0)<=122:0;else b=1;i=d;return b&1|0}function uq(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,j=0,k=0,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=i;i=i+64|0;t=w;h=w+56|0;j=w+52|0;k=w+44|0;l=w+40|0;m=w+36|0;n=w+32|0;u=w+28|0;v=w+24|0;p=w+20|0;q=w+16|0;o=w+12|0;s=w+8|0;r=w+4|0;c[j>>2]=a;c[w+48>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;do if(!((c[k>>2]|0)!=4&(c[k>>2]|0)!=5)){c[u>>2]=c[(c[l>>2]|0)+4>>2];c[p>>2]=BQ(c[u>>2]|0)|0;if((c[k>>2]|0)==5){if((c[p>>2]|0)!=4)break;if(zd(19536,c[u>>2]|0,4)|0)break;c[u>>2]=c[(c[l>>2]|0)+12>>2];c[p>>2]=BQ(c[u>>2]|0)|0;c[v>>2]=c[(c[l>>2]|0)+16>>2]}else c[v>>2]=c[(c[l>>2]|0)+12>>2];c[q>>2]=BQ(c[v>>2]|0)|0;c[s>>2]=ff(c[j>>2]|0,26310)|0;if(c[s>>2]|0){c[h>>2]=c[s>>2];v=c[h>>2]|0;i=w;return v|0}c[o>>2]=296+(c[p>>2]|0)+(c[q>>2]|0)+2;c[r>>2]=Id(c[o>>2]|0)|0;if(c[r>>2]|0){kR(c[r>>2]|0,0,c[o>>2]|0)|0;c[(c[r>>2]|0)+12>>2]=(c[r>>2]|0)+16;c[(c[(c[r>>2]|0)+12>>2]|0)+16>>2]=(c[(c[r>>2]|0)+12>>2]|0)+280;c[(c[(c[r>>2]|0)+12>>2]|0)+20>>2]=(c[(c[(c[r>>2]|0)+12>>2]|0)+16>>2]|0)+((c[p>>2]|0)+1);c[(c[(c[r>>2]|0)+12>>2]|0)+12>>2]=c[j>>2];c[(c[(c[r>>2]|0)+12>>2]|0)+248>>2]=1;iR(c[(c[(c[r>>2]|0)+12>>2]|0)+16>>2]|0,c[u>>2]|0,c[p>>2]|0)|0;iR(c[(c[(c[r>>2]|0)+12>>2]|0)+20>>2]|0,c[v>>2]|0,c[q>>2]|0)|0;Ik(c[(c[(c[r>>2]|0)+12>>2]|0)+20>>2]|0);c[c[m>>2]>>2]=c[r>>2];c[h>>2]=0;v=c[h>>2]|0;i=w;return v|0}else{c[h>>2]=7;v=c[h>>2]|0;i=w;return v|0}}while(0);zk(c[n>>2]|0,26379,t);c[h>>2]=1;v=c[h>>2]|0;i=w;return v|0}function vq(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;k=q+32|0;f=q+28|0;l=q+24|0;m=q+20|0;o=q+16|0;n=q+12|0;p=q+8|0;j=q+4|0;g=q;c[q+36>>2]=b;c[k>>2]=e;c[l>>2]=-1;c[m>>2]=-1;c[o>>2]=-1;c[n>>2]=-1;c[p>>2]=1;if(((c[(c[k>>2]|0)+8>>2]|0)==1?(c[c[(c[k>>2]|0)+12>>2]>>2]|0)==0:0)?(d[(c[(c[k>>2]|0)+12>>2]|0)+4>>0]|0)==0:0)c[(c[k>>2]|0)+32>>2]=1;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[k>>2]>>2]|0))break;if(a[(c[(c[k>>2]|0)+4>>2]|0)+((c[f>>2]|0)*12|0)+5>>0]|0){c[j>>2]=d[(c[(c[k>>2]|0)+4>>2]|0)+((c[f>>2]|0)*12|0)+4>>0];c[g>>2]=c[(c[(c[k>>2]|0)+4>>2]|0)+((c[f>>2]|0)*12|0)>>2];if(!(c[g>>2]|0)){if((c[j>>2]|0)==2)c[l>>2]=c[f>>2];if((c[j>>2]|0)==16)c[o>>2]=c[f>>2];if((c[j>>2]|0)==8)c[o>>2]=c[f>>2];if((c[j>>2]|0)==4)c[m>>2]=c[f>>2];if((c[j>>2]|0)==32)c[m>>2]=c[f>>2]}if((c[g>>2]|0)==4&(c[j>>2]|0)==2)c[n>>2]=c[f>>2]}c[f>>2]=(c[f>>2]|0)+1}f=(c[k>>2]|0)+20|0;if((c[l>>2]|0)<0){c[f>>2]=0;h[(c[k>>2]|0)+40>>3]=2.0e4;if((c[m>>2]|0)>=0){l=(c[k>>2]|0)+20|0;c[l>>2]=(c[l>>2]|0)+2;l=c[p>>2]|0;c[p>>2]=l+1;c[(c[(c[k>>2]|0)+16>>2]|0)+(c[m>>2]<<3)>>2]=l;m=(c[k>>2]|0)+40|0;h[m>>3]=+h[m>>3]/2.0}if((c[o>>2]|0)>=0){m=(c[k>>2]|0)+20|0;c[m>>2]=(c[m>>2]|0)+4;m=c[p>>2]|0;c[p>>2]=m+1;c[(c[(c[k>>2]|0)+16>>2]|0)+(c[o>>2]<<3)>>2]=m;o=(c[k>>2]|0)+40|0;h[o>>3]=+h[o>>3]/2.0}}else{c[f>>2]=1;o=c[p>>2]|0;c[p>>2]=o+1;c[(c[(c[k>>2]|0)+16>>2]|0)+(c[l>>2]<<3)>>2]=o;h[(c[k>>2]|0)+40>>3]=5.0}if((c[n>>2]|0)<0){i=q;return 0}o=c[p>>2]|0;c[p>>2]=o+1;c[(c[(c[k>>2]|0)+16>>2]|0)+(c[n>>2]<<3)>>2]=o;p=(c[k>>2]|0)+40|0;h[p>>3]=+h[p>>3]+-1.0;i=q;return 0}function wq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+12|0;d=f+8|0;e=f+4|0;b=f;c[g>>2]=a;c[d>>2]=c[g>>2];c[e>>2]=c[(c[d>>2]|0)+12>>2];c[b>>2]=0;while(1){if((c[b>>2]|0)>=40)break;Yd(c[(c[e>>2]|0)+56+(c[b>>2]<<2)>>2]|0)|0;c[b>>2]=(c[b>>2]|0)+1}Kd(c[(c[e>>2]|0)+240>>2]|0);Kd(c[d>>2]|0);i=f;return 0}function xq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+12|0;e=g+4|0;f=g;c[g+8>>2]=a;c[e>>2]=b;c[f>>2]=Id(120)|0;if(c[f>>2]|0){a=c[f>>2]|0;b=a+120|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[c[e>>2]>>2]=c[f>>2];c[d>>2]=0;f=c[d>>2]|0;i=g;return f|0}else{c[d>>2]=7;f=c[d>>2]|0;i=g;return f|0}return 0}function yq(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+16|0;f=b+8|0;e=b+4|0;d=b;c[f>>2]=a;c[e>>2]=c[(c[c[f>>2]>>2]|0)+12>>2];c[d>>2]=c[f>>2];sm(c[e>>2]|0);vl((c[d>>2]|0)+4|0);Kd(c[(c[d>>2]|0)+60>>2]|0);Kd(c[(c[d>>2]|0)+76>>2]|0);Kd(c[(c[d>>2]|0)+112>>2]|0);Kd(c[d>>2]|0);i=b;return 0}function zq(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,j=0,k=0,l=0,m=0,n=0,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=i;i=i+80|0;x=z+8|0;w=z;g=z+76|0;h=z+72|0;j=z+68|0;k=z+60|0;l=z+56|0;t=z+52|0;u=z+48|0;v=z+44|0;s=z+40|0;o=z+36|0;m=z+32|0;n=z+28|0;q=z+24|0;p=z+20|0;r=z+16|0;y=z+12|0;c[h>>2]=a;c[j>>2]=b;c[z+64>>2]=d;c[k>>2]=e;c[l>>2]=f;c[t>>2]=c[h>>2];c[u>>2]=c[(c[c[h>>2]>>2]|0)+12>>2];c[s>>2]=0;c[o>>2]=0;c[m>>2]=-1;c[n>>2]=-1;c[q>>2]=-1;c[p>>2]=-1;c[r>>2]=0;if((c[j>>2]|0)!=1){c[s>>2]=1;if(c[j>>2]&2){a=c[r>>2]|0;c[r>>2]=a+1;c[n>>2]=a}if(c[j>>2]&4){a=c[r>>2]|0;c[r>>2]=a+1;c[q>>2]=a}}else{a=c[r>>2]|0;c[r>>2]=a+1;c[m>>2]=a}if((c[r>>2]|0)<(c[k>>2]|0)){a=c[r>>2]|0;c[r>>2]=a+1;c[p>>2]=a}vl((c[t>>2]|0)+4|0);Kd(c[(c[t>>2]|0)+60>>2]|0);Kd(c[(c[t>>2]|0)+112>>2]|0);kR((c[t>>2]|0)+4|0,0,(c[t>>2]|0)+120-((c[t>>2]|0)+4)|0)|0;c[(c[t>>2]|0)+60+12>>2]=3;if(c[s>>2]|0){a=(c[t>>2]|0)+60+12|0;c[a>>2]=c[a>>2]|16}if(((c[m>>2]|0)>=0|(c[n>>2]|0)>=0?(c[y>>2]=ae(c[c[l>>2]>>2]|0)|0,(c[y>>2]|0)!=0):0)?(c[w>>2]=c[y>>2],y=Od(19255,w)|0,c[(c[t>>2]|0)+60>>2]=y,y=be(c[c[l>>2]>>2]|0)|0,c[(c[t>>2]|0)+60+4>>2]=y,(c[(c[t>>2]|0)+60>>2]|0)==0):0){c[g>>2]=7;y=c[g>>2]|0;i=z;return y|0}if((c[q>>2]|0)>=0?(c[x>>2]=ae(c[(c[l>>2]|0)+(c[q>>2]<<2)>>2]|0)|0,y=Od(19255,x)|0,c[(c[t>>2]|0)+76>>2]=y,y=be(c[(c[l>>2]|0)+(c[q>>2]<<2)>>2]|0)|0,c[(c[t>>2]|0)+80>>2]=y,(c[(c[t>>2]|0)+76>>2]|0)==0):0){c[g>>2]=7;y=c[g>>2]|0;i=z;return y|0}if((c[p>>2]|0)>=0){y=de(c[(c[l>>2]|0)+(c[p>>2]<<2)>>2]|0)|0;c[o>>2]=y;c[o>>2]=(c[o>>2]|0)<0?0:y}c[(c[t>>2]|0)+84>>2]=c[o>>2];c[v>>2]=kl(c[u>>2]|0,c[o>>2]|0,0,-2,c[(c[t>>2]|0)+60>>2]|0,c[(c[t>>2]|0)+60+4>>2]|0,0,c[s>>2]|0,(c[t>>2]|0)+4|0)|0;if(!(c[v>>2]|0))c[v>>2]=ol(c[u>>2]|0,(c[t>>2]|0)+4|0,(c[t>>2]|0)+60|0)|0;if(!(c[v>>2]|0))c[v>>2]=Aq(c[h>>2]|0)|0;c[g>>2]=c[v>>2];y=c[g>>2]|0;i=z;return y|0}function Aq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+64|0;d=q+52|0;r=q+48|0;m=q+44|0;b=q+40|0;n=q+36|0;g=q+32|0;l=q+28|0;e=q+24|0;h=q+20|0;f=q+16|0;k=q+12|0;j=q+8|0;o=q;c[r>>2]=a;c[m>>2]=c[r>>2];c[b>>2]=c[(c[c[r>>2]>>2]|0)+12>>2];a=(c[m>>2]|0)+96|0;r=a;r=gR(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;c[a>>2]=r;c[a+4>>2]=C;a=(c[m>>2]|0)+104|0;c[a>>2]=(c[a>>2]|0)+1;while(1){if((c[(c[m>>2]|0)+104>>2]|0)>=(c[(c[m>>2]|0)+108>>2]|0))break;r=(c[(c[m>>2]|0)+112>>2]|0)+(c[(c[m>>2]|0)+104>>2]<<4)|0;a=c[r+4>>2]|0;if((a|0)>0|(a|0)==0&(c[r>>2]|0)>>>0>0){p=4;break}r=(c[m>>2]|0)+104|0;c[r>>2]=(c[r>>2]|0)+1}if((p|0)==4){c[d>>2]=0;r=c[d>>2]|0;i=q;return r|0}c[n>>2]=pl(c[b>>2]|0,(c[m>>2]|0)+4|0)|0;do if((c[n>>2]|0)==100){c[g>>2]=0;c[l>>2]=c[(c[m>>2]|0)+4+52>>2];c[e>>2]=c[(c[m>>2]|0)+4+48>>2];c[f>>2]=0;do if(c[(c[m>>2]|0)+76>>2]|0){a=c[m>>2]|0;if((c[(c[m>>2]|0)+80>>2]|0)<(c[(c[m>>2]|0)+4+44>>2]|0))a=c[a+80>>2]|0;else a=c[a+4+44>>2]|0;c[k>>2]=a;c[j>>2]=vQ(c[(c[m>>2]|0)+76>>2]|0,c[(c[m>>2]|0)+4+40>>2]|0,c[k>>2]|0)|0;if((c[j>>2]|0)>=0){if(c[j>>2]|0)break;if((c[(c[m>>2]|0)+4+44>>2]|0)<=(c[(c[m>>2]|0)+80>>2]|0))break}c[(c[m>>2]|0)+88>>2]=1;c[d>>2]=0;r=c[d>>2]|0;i=q;return r|0}while(0);if(Eq(c[m>>2]|0,2)|0){c[d>>2]=7;r=c[d>>2]|0;i=q;return r|0}kR(c[(c[m>>2]|0)+112>>2]|0,0,c[(c[m>>2]|0)+108>>2]<<4|0)|0;c[h>>2]=0;a:while(1){if((c[g>>2]|0)>=(c[l>>2]|0)){p=32;break}r=o;c[r>>2]=0;c[r+4>>2]=0;r=Ul((c[e>>2]|0)+(c[g>>2]|0)|0,o)|0;c[g>>2]=(c[g>>2]|0)+r;switch(c[f>>2]|0){case 0:{r=c[(c[m>>2]|0)+112>>2]|0;k=r;c[r>>2]=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;c[r+4>>2]=C;c[f>>2]=1;c[h>>2]=0;continue a}case 1:{r=o;k=c[r+4>>2]|0;if((k|0)>0|(k|0)==0&(c[r>>2]|0)>>>0>1){r=(c[(c[m>>2]|0)+112>>2]|0)+16|0;k=r;k=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;c[r>>2]=k;c[r+4>>2]=C}c[f>>2]=2;break}case 2:break;default:{c[h>>2]=c[o>>2];if(Eq(c[m>>2]|0,(c[h>>2]|0)+2|0)|0)break a;r=(c[(c[m>>2]|0)+112>>2]|0)+((c[h>>2]|0)+1<<4)|0;k=r;c[r>>2]=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;c[r+4>>2]=C;c[f>>2]=2;continue a}}r=o;if((c[r>>2]|0)==0&(c[r+4>>2]|0)==0){c[f>>2]=0;continue}r=o;if((c[r>>2]|0)==1&(c[r+4>>2]|0)==0){c[f>>2]=3;continue}else{r=(c[(c[m>>2]|0)+112>>2]|0)+((c[h>>2]|0)+1<<4)+8|0;k=r;k=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;c[r>>2]=k;c[r+4>>2]=C;r=(c[(c[m>>2]|0)+112>>2]|0)+8|0;k=r;k=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;c[r>>2]=k;c[r+4>>2]=C;continue}}if((p|0)==32){c[(c[m>>2]|0)+104>>2]=0;c[n>>2]=0;break}c[d>>2]=7;r=c[d>>2]|0;i=q;return r|0}else c[(c[m>>2]|0)+88>>2]=1;while(0);c[d>>2]=c[n>>2];r=c[d>>2]|0;i=q;return r|0}function Bq(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];i=d;return c[(c[b>>2]|0)+88>>2]|0}function Cq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;j=g+12|0;e=g+8|0;h=g+4|0;f=g;c[j>>2]=a;c[e>>2]=b;c[h>>2]=d;c[f>>2]=c[j>>2];switch(c[h>>2]|0){case 0:{ne(c[e>>2]|0,c[(c[f>>2]|0)+4+40>>2]|0,c[(c[f>>2]|0)+4+44>>2]|0,-1);i=g;return 0}case 1:{e=c[e>>2]|0;if(c[(c[f>>2]|0)+104>>2]|0){ke(e,(c[(c[f>>2]|0)+104>>2]|0)-1|0);i=g;return 0}else{ne(e,26308,-1,0);i=g;return 0}}case 2:{j=(c[(c[f>>2]|0)+112>>2]|0)+(c[(c[f>>2]|0)+104>>2]<<4)|0;le(c[e>>2]|0,c[j>>2]|0,c[j+4>>2]|0);i=g;return 0}case 3:{j=(c[(c[f>>2]|0)+112>>2]|0)+(c[(c[f>>2]|0)+104>>2]<<4)+8|0;le(c[e>>2]|0,c[j>>2]|0,c[j+4>>2]|0);i=g;return 0}default:{ke(c[e>>2]|0,c[(c[f>>2]|0)+84>>2]|0);i=g;return 0}}return 0}function Dq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;g=d+8|0;f=d+4|0;e=d;c[g>>2]=a;c[f>>2]=b;c[e>>2]=c[g>>2];e=(c[e>>2]|0)+96|0;a=c[e+4>>2]|0;b=c[f>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;i=d;return 0}function Eq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;do if((c[f>>2]|0)>(c[(c[e>>2]|0)+108>>2]|0)){c[g>>2]=Ld(c[(c[e>>2]|0)+112>>2]|0,c[f>>2]<<4)|0;if(c[g>>2]|0){kR((c[g>>2]|0)+(c[(c[e>>2]|0)+108>>2]<<4)|0,0,(c[f>>2]|0)-(c[(c[e>>2]|0)+108>>2]|0)<<4|0)|0;c[(c[e>>2]|0)+112>>2]=c[g>>2];c[(c[e>>2]|0)+108>>2]=c[f>>2];break}c[d>>2]=7;a=c[d>>2]|0;i=h;return a|0}while(0);c[d>>2]=0;a=c[d>>2]|0;i=h;return a|0}function Fq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;e=p+32|0;f=p+28|0;g=p+24|0;h=p+20|0;l=p+16|0;j=p+12|0;m=p+8|0;n=p+4|0;k=p;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[m>>2]=0;c[l>>2]=Id(16)|0;if(!(c[l>>2]|0)){c[e>>2]=7;o=c[e>>2]|0;i=p;return o|0}d=c[l>>2]|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[(c[l>>2]|0)+4>>2]=1;c[j>>2]=0;while(1){if(c[m>>2]|0)break;if((c[j>>2]|0)>=(c[f>>2]|0))break;c[n>>2]=c[(c[g>>2]|0)+(c[j>>2]<<2)>>2];c[k>>2]=BQ(c[n>>2]|0)|0;if((c[k>>2]|0)==19?(vQ(26585,c[n>>2]|0,19)|0)==0:0)c[(c[l>>2]|0)+4>>2]=1;else o=9;do if((o|0)==9){o=0;if((c[k>>2]|0)==19?(vQ(26605,c[n>>2]|0,19)|0)==0:0){c[(c[l>>2]|0)+4>>2]=0;break}if((c[k>>2]|0)>=11?(vQ(26625,c[n>>2]|0,11)|0)==0:0){c[m>>2]=Qq(c[l>>2]|0,1,(c[n>>2]|0)+11|0,(c[k>>2]|0)-11|0)|0;break}if((c[k>>2]|0)>=11?(vQ(26637,c[n>>2]|0,11)|0)==0:0){c[m>>2]=Qq(c[l>>2]|0,0,(c[n>>2]|0)+11|0,(c[k>>2]|0)-11|0)|0;break}c[m>>2]=1}while(0);c[j>>2]=(c[j>>2]|0)+1}if(c[m>>2]|0){Gq(c[l>>2]|0)|0;c[l>>2]=0}c[c[h>>2]>>2]=c[l>>2];c[e>>2]=c[m>>2];o=c[e>>2]|0;i=p;return o|0}function Gq(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(!(c[b>>2]|0)){i=e;return 0}c[d>>2]=c[b>>2];Kd(c[(c[d>>2]|0)+12>>2]|0);Kd(c[d>>2]|0);i=e;return 0}function Hq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+20|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[l+16>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=Id(28)|0;if(!(c[k>>2]|0)){c[f>>2]=7;e=c[f>>2]|0;i=l;return e|0}e=c[k>>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;c[e+24>>2]=0;c[(c[k>>2]|0)+4>>2]=c[g>>2];do if(c[g>>2]|0)if((c[h>>2]|0)<0){e=BQ(c[g>>2]|0)|0;c[(c[k>>2]|0)+8>>2]=e;break}else{c[(c[k>>2]|0)+8>>2]=c[h>>2];break}else c[(c[k>>2]|0)+8>>2]=0;while(0);c[c[j>>2]>>2]=c[k>>2];c[f>>2]=0;e=c[f>>2]|0;i=l;return e|0}function Iq(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];Kd(c[(c[d>>2]|0)+20>>2]|0);Kd(c[d>>2]|0);i=b;return 0}function Jq(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=i;i=i+80|0;p=A+64|0;B=A+60|0;q=A+56|0;r=A+52|0;s=A+48|0;t=A+44|0;u=A+40|0;v=A+36|0;m=A+32|0;k=A+28|0;y=A+24|0;w=A+20|0;z=A+16|0;x=A+12|0;o=A+8|0;l=A+4|0;n=A;c[B>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=j;c[v>>2]=c[B>>2];c[m>>2]=c[c[v>>2]>>2];c[k>>2]=0;c[w>>2]=(c[(c[v>>2]|0)+4>>2]|0)+(c[(c[v>>2]|0)+12>>2]|0);c[z>>2]=c[w>>2];c[o>>2]=(c[(c[v>>2]|0)+4>>2]|0)+(c[(c[v>>2]|0)+8>>2]|0);while(1){if((c[w>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;B=c[w>>2]|0;c[w>>2]=B+1;c[k>>2]=d[B>>0];do if((c[k>>2]|0)>=192){c[k>>2]=d[26420+((c[k>>2]|0)-192)>>0];while(1){if((c[w>>2]|0)!=(c[o>>2]|0))b=((d[c[w>>2]>>0]|0)&192|0)==128;else b=0;e=c[k>>2]|0;if(!b)break;B=c[w>>2]|0;c[w>>2]=B+1;c[k>>2]=(e<<6)+(63&(d[B>>0]|0))}if(((e|0)>=128?(c[k>>2]&-2048|0)!=55296:0)?(c[k>>2]&-2|0)!=65534:0)break;c[k>>2]=65533}while(0);if(Kq(c[m>>2]|0,c[k>>2]|0)|0)break;c[z>>2]=c[w>>2]}if((c[z>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[p>>2]=101;B=c[p>>2]|0;i=A;return B|0}c[y>>2]=c[(c[v>>2]|0)+20>>2];while(1){if(((c[y>>2]|0)-(c[(c[v>>2]|0)+20>>2]|0)|0)>=((c[(c[v>>2]|0)+24>>2]|0)-4|0)){c[n>>2]=Ld(c[(c[v>>2]|0)+20>>2]|0,(c[(c[v>>2]|0)+24>>2]|0)+64|0)|0;if(!(c[n>>2]|0)){b=20;break}c[y>>2]=(c[n>>2]|0)+((c[y>>2]|0)-(c[(c[v>>2]|0)+20>>2]|0));c[(c[v>>2]|0)+20>>2]=c[n>>2];B=(c[v>>2]|0)+24|0;c[B>>2]=(c[B>>2]|0)+64}c[x>>2]=c[w>>2];c[l>>2]=Lq(c[k>>2]|0,c[(c[m>>2]|0)+4>>2]|0)|0;do if(c[l>>2]|0){b=c[l>>2]|0;if((c[l>>2]|0)<128){B=c[y>>2]|0;c[y>>2]=B+1;a[B>>0]=b;break}e=c[l>>2]|0;if((b|0)<2048){f=c[y>>2]|0;c[y>>2]=f+1;a[f>>0]=192+(e>>6&31);f=128+(c[l>>2]&63)&255;B=c[y>>2]|0;c[y>>2]=B+1;a[B>>0]=f;break}b=c[l>>2]|0;if((e|0)<65536){B=c[y>>2]|0;c[y>>2]=B+1;a[B>>0]=224+(b>>12&15);B=128+(c[l>>2]>>6&63)&255;f=c[y>>2]|0;c[y>>2]=f+1;a[f>>0]=B;f=128+(c[l>>2]&63)&255;B=c[y>>2]|0;c[y>>2]=B+1;a[B>>0]=f;break}else{f=c[y>>2]|0;c[y>>2]=f+1;a[f>>0]=240+(b>>18&7);f=128+(c[l>>2]>>12&63)&255;B=c[y>>2]|0;c[y>>2]=B+1;a[B>>0]=f;B=128+(c[l>>2]>>6&63)&255;f=c[y>>2]|0;c[y>>2]=f+1;a[f>>0]=B;f=128+(c[l>>2]&63)&255;B=c[y>>2]|0;c[y>>2]=B+1;a[B>>0]=f;break}}while(0);if((c[w>>2]|0)>>>0>=(c[o>>2]|0)>>>0){b=43;break}B=c[w>>2]|0;c[w>>2]=B+1;c[k>>2]=d[B>>0];do if((c[k>>2]|0)>=192){c[k>>2]=d[26420+((c[k>>2]|0)-192)>>0];while(1){if((c[w>>2]|0)!=(c[o>>2]|0))e=((d[c[w>>2]>>0]|0)&192|0)==128;else e=0;b=c[k>>2]|0;if(!e)break;B=c[w>>2]|0;c[w>>2]=B+1;c[k>>2]=(b<<6)+(63&(d[B>>0]|0))}if(((b|0)>=128?(c[k>>2]&-2048|0)!=55296:0)?(c[k>>2]&-2|0)!=65534:0)break;c[k>>2]=65533}while(0);if(Kq(c[m>>2]|0,c[k>>2]|0)|0)continue;if(!(Mq(c[k>>2]|0)|0)){b=43;break}}if((b|0)==20){c[p>>2]=7;B=c[p>>2]|0;i=A;return B|0}else if((b|0)==43){c[(c[v>>2]|0)+12>>2]=(c[w>>2]|0)-(c[(c[v>>2]|0)+4>>2]|0);c[c[q>>2]>>2]=c[(c[v>>2]|0)+20>>2];c[c[r>>2]>>2]=(c[y>>2]|0)-(c[(c[v>>2]|0)+20>>2]|0);c[c[s>>2]>>2]=(c[z>>2]|0)-(c[(c[v>>2]|0)+4>>2]|0);c[c[t>>2]>>2]=(c[x>>2]|0)-(c[(c[v>>2]|0)+4>>2]|0);z=(c[v>>2]|0)+16|0;B=c[z>>2]|0;c[z>>2]=B+1;c[c[u>>2]>>2]=B;c[p>>2]=0;B=c[p>>2]|0;i=A;return B|0}return 0}function Kq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=Oq(c[e>>2]|0)|0;a=a^(Pq(c[f>>2]|0,c[e>>2]|0)|0);i=d;return a|0}function Lq(a,b){a=a|0;b=b|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;f=p+32|0;g=p+28|0;o=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;h=p+4|0;n=p;c[f>>2]=a;c[g>>2]=b;c[o>>2]=c[f>>2];b=c[f>>2]|0;if((c[f>>2]|0)<128){if(!((b|0)>=65&(c[f>>2]|0)<=90)){o=c[o>>2]|0;i=p;return o|0}c[o>>2]=(c[f>>2]|0)+32;o=c[o>>2]|0;i=p;return o|0}if((b|0)>=65536){if(!((c[f>>2]|0)>=66560&(c[f>>2]|0)<66600)){o=c[o>>2]|0;i=p;return o|0}c[o>>2]=(c[f>>2]|0)+40;o=c[o>>2]|0;i=p;return o|0}c[j>>2]=162;c[k>>2]=0;c[l>>2]=-1;while(1){if((c[j>>2]|0)<(c[k>>2]|0))break;c[m>>2]=((c[j>>2]|0)+(c[k>>2]|0)|0)/2|0;c[h>>2]=(c[f>>2]|0)-(e[10902+(c[m>>2]<<2)>>1]|0);b=c[m>>2]|0;if((c[h>>2]|0)>=0){c[l>>2]=b;c[k>>2]=(c[m>>2]|0)+1;continue}else{c[j>>2]=b-1;continue}}if(((c[l>>2]|0)>=0?(c[n>>2]=10902+(c[l>>2]<<2),(c[f>>2]|0)<((e[c[n>>2]>>1]|0)+(d[(c[n>>2]|0)+3>>0]|0)|0)):0)?0==(1&(d[(c[n>>2]|0)+2>>0]|0)&((e[c[n>>2]>>1]|0)^c[f>>2])|0):0)c[o>>2]=(c[f>>2]|0)+(e[11554+((d[(c[n>>2]|0)+2>>0]|0)>>1<<1)>>1]|0)&65535;if(!(c[g>>2]|0)){o=c[o>>2]|0;i=p;return o|0}c[o>>2]=Nq(c[o>>2]|0)|0;o=c[o>>2]|0;i=p;return o|0}function Mq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g+12|0;b=g+8|0;d=g+4|0;e=g;c[b>>2]=a;c[d>>2]=134389727;c[e>>2]=221688;if((c[b>>2]|0)<768|(c[b>>2]|0)>817){c[f>>2]=0;f=c[f>>2]|0;i=g;return f|0}if((c[b>>2]|0)<800)b=c[d>>2]&1<<(c[b>>2]|0)-768;else b=c[e>>2]&1<<(c[b>>2]|0)-768-32;c[f>>2]=b;f=c[f>>2]|0;i=g;return f|0}function Nq(b){b=b|0;var d=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+336|0;g=p+20|0;j=p+24|0;h=p+226|0;o=p+16|0;m=p+12|0;k=p+8|0;l=p+4|0;n=p;c[g>>2]=b;iR(j|0,11708,202)|0;b=h;d=26484;f=b+101|0;do{a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}while((b|0)<(f|0));c[o>>2]=c[g>>2]<<3|7;c[m>>2]=0;c[k>>2]=100;c[l>>2]=0;while(1){if((c[k>>2]|0)<(c[l>>2]|0))break;c[n>>2]=((c[k>>2]|0)+(c[l>>2]|0)|0)/2|0;b=c[n>>2]|0;if((c[o>>2]|0)>>>0>=(e[j+(c[n>>2]<<1)>>1]|0)>>>0){c[m>>2]=b;c[l>>2]=(c[n>>2]|0)+1;continue}else{c[k>>2]=b-1;continue}}if((c[g>>2]|0)>((e[j+(c[m>>2]<<1)>>1]>>3)+(e[j+(c[m>>2]<<1)>>1]&7)|0)){o=c[g>>2]|0;i=p;return o|0}else{o=a[h+(c[m>>2]|0)>>0]|0;i=p;return o|0}return 0}function Oq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;b=k+24|0;d=k+20|0;j=k+16|0;g=k+12|0;e=k+8|0;f=k+4|0;h=k;c[d>>2]=a;a=c[d>>2]|0;if((c[d>>2]|0)<128){c[b>>2]=(c[2340+(a>>5<<2)>>2]&1<<(c[d>>2]&31)|0)==0&1;j=c[b>>2]|0;i=k;return j|0}if((a|0)>=4194304){c[b>>2]=1;j=c[b>>2]|0;i=k;return j|0}c[j>>2]=c[d>>2]<<10|1023;c[g>>2]=0;c[e>>2]=405;c[f>>2]=0;while(1){if((c[e>>2]|0)<(c[f>>2]|0))break;c[h>>2]=((c[e>>2]|0)+(c[f>>2]|0)|0)/2|0;a=c[h>>2]|0;if((c[j>>2]|0)>>>0>=(c[2356+(c[h>>2]<<2)>>2]|0)>>>0){c[g>>2]=a;c[f>>2]=(c[h>>2]|0)+1;continue}else{c[e>>2]=a-1;continue}}c[b>>2]=(c[d>>2]|0)>>>0>=(((c[2356+(c[g>>2]<<2)>>2]|0)>>>10)+(c[2356+(c[g>>2]<<2)>>2]&1023)|0)>>>0&1;j=c[b>>2]|0;i=k;return j|0}function Pq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+24|0;d=l+20|0;f=l+16|0;g=l+12|0;j=l+8|0;h=l+4|0;k=l;c[d>>2]=a;c[f>>2]=b;a:do if((c[(c[d>>2]|0)+8>>2]|0)>0){c[g>>2]=c[(c[d>>2]|0)+12>>2];c[j>>2]=0;c[h>>2]=(c[(c[d>>2]|0)+8>>2]|0)-1;while(1){if((c[h>>2]|0)<(c[j>>2]|0))break a;c[k>>2]=((c[h>>2]|0)+(c[j>>2]|0)|0)/2|0;if((c[f>>2]|0)==(c[(c[g>>2]|0)+(c[k>>2]<<2)>>2]|0))break;d=c[k>>2]|0;if((c[f>>2]|0)>(c[(c[g>>2]|0)+(c[k>>2]<<2)>>2]|0)){c[j>>2]=d+1;continue}else{c[h>>2]=d-1;continue}}c[e>>2]=1;k=c[e>>2]|0;i=l;return k|0}while(0);c[e>>2]=0;k=c[e>>2]|0;i=l;return k|0}function Qq(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+64|0;j=t+48|0;k=t+44|0;l=t+40|0;g=t+36|0;u=t+32|0;r=t+28|0;s=t+24|0;o=t+20|0;h=t+16|0;m=t+12|0;q=t+8|0;n=t+4|0;p=t;c[k>>2]=a;c[l>>2]=b;c[g>>2]=e;c[u>>2]=f;c[r>>2]=c[g>>2];c[s>>2]=(c[r>>2]|0)+(c[u>>2]|0);c[h>>2]=0;while(1){if((c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;u=c[r>>2]|0;c[r>>2]=u+1;c[o>>2]=d[u>>0];do if((c[o>>2]|0)>=192){c[o>>2]=d[26420+((c[o>>2]|0)-192)>>0];while(1){if((c[r>>2]|0)!=(c[s>>2]|0))b=((d[c[r>>2]>>0]|0)&192|0)==128;else b=0;f=c[o>>2]|0;if(!b)break;u=c[r>>2]|0;c[r>>2]=u+1;c[o>>2]=(f<<6)+(63&(d[u>>0]|0))}if(((f|0)>=128?(c[o>>2]&-2048|0)!=55296:0)?(c[o>>2]&-2|0)!=65534:0)break;c[o>>2]=65533}while(0);u=Oq(c[o>>2]|0)|0;if((u|0)==(c[l>>2]|0))continue;if(Mq(c[o>>2]|0)|0)continue;c[h>>2]=(c[h>>2]|0)+1}if(c[h>>2]|0){c[m>>2]=Ld(c[(c[k>>2]|0)+12>>2]|0,(c[(c[k>>2]|0)+8>>2]|0)+(c[h>>2]|0)<<2)|0;if(!(c[m>>2]|0)){c[j>>2]=7;u=c[j>>2]|0;i=t;return u|0}c[q>>2]=c[(c[k>>2]|0)+8>>2];c[r>>2]=c[g>>2];while(1){if((c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;u=c[r>>2]|0;c[r>>2]=u+1;c[o>>2]=d[u>>0];do if((c[o>>2]|0)>=192){c[o>>2]=d[26420+((c[o>>2]|0)-192)>>0];while(1){if((c[r>>2]|0)!=(c[s>>2]|0))b=((d[c[r>>2]>>0]|0)&192|0)==128;else b=0;f=c[o>>2]|0;if(!b)break;u=c[r>>2]|0;c[r>>2]=u+1;c[o>>2]=(f<<6)+(63&(d[u>>0]|0))}if(((f|0)>=128?(c[o>>2]&-2048|0)!=55296:0)?(c[o>>2]&-2|0)!=65534:0)break;c[o>>2]=65533}while(0);u=Oq(c[o>>2]|0)|0;if((u|0)==(c[l>>2]|0))continue;if(Mq(c[o>>2]|0)|0)continue;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[q>>2]|0))break;if((c[(c[m>>2]|0)+(c[n>>2]<<2)>>2]|0)>=(c[o>>2]|0))break;c[n>>2]=(c[n>>2]|0)+1}c[p>>2]=c[q>>2];while(1){if((c[p>>2]|0)<=(c[n>>2]|0))break;c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]=c[(c[m>>2]|0)+((c[p>>2]|0)-1<<2)>>2];c[p>>2]=(c[p>>2]|0)+-1}c[(c[m>>2]|0)+(c[n>>2]<<2)>>2]=c[o>>2];c[q>>2]=(c[q>>2]|0)+1}c[(c[k>>2]|0)+12>>2]=c[m>>2];c[(c[k>>2]|0)+8>>2]=c[q>>2]}c[j>>2]=0;u=c[j>>2]|0;i=t;return u|0}function Rq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;e=h+8|0;f=h+4|0;g=h;c[j>>2]=a;c[e>>2]=b;c[f>>2]=d;c[g>>2]=c[(c[j>>2]|0)+4>>2];kg(c[j>>2]|0);if(!((c[e>>2]|0)!=0?(c[(c[g>>2]|0)+48>>2]|0)==0:0)){j=c[g>>2]|0;j=j+48|0;j=c[j>>2]|0;i=h;return j|0}j=c[e>>2]|0;j=ph(0,j,((j|0)<0)<<31>>31)|0;c[(c[g>>2]|0)+48>>2]=j;c[(c[g>>2]|0)+52>>2]=c[f>>2];j=c[g>>2]|0;j=j+48|0;j=c[j>>2]|0;i=h;return j|0}function Sq(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return(d[(c[b>>2]|0)+64>>0]|0|0)==2|0}function Tq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;g=i;i=i+16|0;l=g+12|0;k=g+8|0;j=g+4|0;h=g;c[l>>2]=b;c[k>>2]=d;c[j>>2]=e;c[h>>2]=f;a[c[h>>2]>>0]=0;f=Wb[c[(c[l>>2]|0)+36>>2]&255](c[l>>2]|0,c[k>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;i=g;return f|0}function Uq(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;c[e>>2]=It(c[d>>2]|0)|0;if(!(a[c[e>>2]>>0]|0)){i=f;return}a[c[e>>2]>>0]=0;if((Jt(c[d>>2]|0)|0)<=1){i=f;return}Kt(c[e>>2]|0)|0;i=f;return}function Vq(d,e,f,g,h,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;L=i;i=i+112|0;s=L+96|0;t=L+92|0;u=L+88|0;v=L+84|0;w=L+80|0;l=L+76|0;x=L+72|0;y=L+68|0;o=L+64|0;D=L+60|0;E=L+56|0;H=L+52|0;B=L+48|0;F=L+44|0;m=L+40|0;J=L+36|0;C=L+32|0;I=L+28|0;p=L+24|0;G=L+20|0;r=L+16|0;n=L+12|0;q=L+8|0;z=L+4|0;A=L;c[t>>2]=d;c[u>>2]=e;c[v>>2]=f;c[w>>2]=g;c[l>>2]=h;c[x>>2]=j;c[y>>2]=k;c[D>>2]=0;c[E>>2]=0;c[H>>2]=0;c[B>>2]=0;c[F>>2]=0;c[J>>2]=0;c[C>>2]=0;c[I>>2]=(c[l>>2]&1|0)==0&1;c[p>>2]=it()|0;c[G>>2]=1024;c[r>>2]=0;c[n>>2]=0;f=c[(c[t>>2]|0)+4>>2]|0;if((f|0)>(Jr()|0))c[m>>2]=(c[(c[t>>2]|0)+4>>2]|0)+7&-8;else c[m>>2]=(Jr()|0)+7&-8;c[c[u>>2]>>2]=0;do if(((c[l>>2]&2|0)!=0?(c[B>>2]=1,(c[v>>2]|0)!=0):0)?(a[c[v>>2]>>0]|0)!=0:0){c[J>>2]=nh(0,c[v>>2]|0)|0;if(c[J>>2]|0){c[C>>2]=If(c[J>>2]|0)|0;c[v>>2]=0;break}c[s>>2]=7;K=c[s>>2]|0;i=L;return K|0}while(0);if((c[v>>2]|0)!=0?(a[c[v>>2]>>0]|0)!=0:0){c[C>>2]=(c[(c[t>>2]|0)+8>>2]|0)+1;f=c[C>>2]<<1;c[J>>2]=yh(0,f,((f|0)<0)<<31>>31)|0;if(!(c[J>>2]|0)){c[s>>2]=7;K=c[s>>2]|0;i=L;return K|0}a[c[J>>2]>>0]=0;c[E>>2]=Tq(c[t>>2]|0,c[v>>2]|0,c[C>>2]|0,c[J>>2]|0)|0;c[C>>2]=If(c[J>>2]|0)|0;f=(If(c[v>>2]|0)|0)+1|0;f=(c[v>>2]|0)+f|0;c[r>>2]=f;c[q>>2]=f;while(1){l=c[q>>2]|0;if(!(a[c[q>>2]>>0]|0))break;f=(If(l)|0)+1|0;c[q>>2]=(c[q>>2]|0)+f;f=(If(c[q>>2]|0)|0)+1|0;c[q>>2]=(c[q>>2]|0)+f}c[n>>2]=l+1-(c[r>>2]|0);if((c[E>>2]|0)==0?((c[C>>2]|0)+8|0)>(c[(c[t>>2]|0)+8>>2]|0):0)c[E>>2]=et(48375)|0;if(c[E>>2]|0){Sf(0,c[J>>2]|0);c[s>>2]=c[E>>2];K=c[s>>2]|0;i=L;return K|0}}c[o>>2]=ig(224+((c[p>>2]|0)+7&-8)+((c[(c[t>>2]|0)+4>>2]|0)+7&-8)+(c[m>>2]<<1)+(c[C>>2]|0)+1+(c[n>>2]|0)+(c[C>>2]|0)+8+2+(c[C>>2]|0)+4+2|0,0)|0;if(!(c[o>>2]|0)){Sf(0,c[J>>2]|0);c[s>>2]=7;K=c[s>>2]|0;i=L;return K|0}c[D>>2]=c[o>>2];q=(c[o>>2]|0)+224|0;c[o>>2]=q;c[(c[D>>2]|0)+212>>2]=q;q=(c[o>>2]|0)+((c[p>>2]|0)+7&-8)|0;c[o>>2]=q;c[(c[D>>2]|0)+64>>2]=q;q=(c[o>>2]|0)+((c[(c[t>>2]|0)+4>>2]|0)+7&-8)|0;c[o>>2]=q;c[(c[D>>2]|0)+72>>2]=q;q=(c[o>>2]|0)+(c[m>>2]|0)|0;c[o>>2]=q;c[(c[D>>2]|0)+68>>2]=q;q=(c[o>>2]|0)+(c[m>>2]|0)|0;c[o>>2]=q;c[(c[D>>2]|0)+176>>2]=q;if(c[J>>2]|0){q=(c[o>>2]|0)+((c[C>>2]|0)+1+(c[n>>2]|0))|0;c[o>>2]=q;c[(c[D>>2]|0)+180>>2]=q;iR(c[(c[D>>2]|0)+176>>2]|0,c[J>>2]|0,c[C>>2]|0)|0;if(c[n>>2]|0)iR((c[(c[D>>2]|0)+176>>2]|0)+((c[C>>2]|0)+1)|0,c[r>>2]|0,c[n>>2]|0)|0;iR(c[(c[D>>2]|0)+180>>2]|0,c[J>>2]|0,c[C>>2]|0)|0;l=(c[(c[D>>2]|0)+180>>2]|0)+(c[C>>2]|0)|0;h=26868;g=l+10|0;do{a[l>>0]=a[h>>0]|0;l=l+1|0;h=h+1|0}while((l|0)<(g|0));c[(c[D>>2]|0)+220>>2]=(c[(c[D>>2]|0)+180>>2]|0)+((c[C>>2]|0)+8+1);iR(c[(c[D>>2]|0)+220>>2]|0,c[J>>2]|0,c[C>>2]|0)|0;C=(c[(c[D>>2]|0)+220>>2]|0)+(c[C>>2]|0)|0;a[C>>0]=a[26878]|0;a[C+1>>0]=a[26879]|0;a[C+2>>0]=a[26880]|0;a[C+3>>0]=a[26881]|0;a[C+4>>0]=a[26882]|0;Sf(0,c[J>>2]|0)}c[c[D>>2]>>2]=c[t>>2];c[(c[D>>2]|0)+152>>2]=c[x>>2];do if((c[v>>2]|0)!=0?(a[c[v>>2]>>0]|0)!=0:0){c[z>>2]=0;c[E>>2]=Vr(c[t>>2]|0,c[(c[D>>2]|0)+176>>2]|0,c[(c[D>>2]|0)+64>>2]|0,c[x>>2]|0,z)|0;c[F>>2]=c[z>>2]&1;if(!(c[E>>2]|0)){c[A>>2]=Sr(c[(c[D>>2]|0)+64>>2]|0)|0;do if((c[F>>2]|0)==0?(Rr(c[D>>2]|0),(c[G>>2]|0)>>>0<(c[(c[D>>2]|0)+156>>2]|0)>>>0):0)if((c[(c[D>>2]|0)+156>>2]|0)>>>0>8192){c[G>>2]=8192;break}else{c[G>>2]=c[(c[D>>2]|0)+156>>2];break}while(0);J=(Hf(c[v>>2]|0,26884,0)|0)&255;a[(c[D>>2]|0)+14>>0]=J;if((c[A>>2]&8192|0)==0?(Hf(c[v>>2]|0,26891,0)|0)==0:0)break;c[x>>2]=c[x>>2]|1;K=39}}else K=39;while(0);if((K|0)==39){c[H>>2]=1;a[(c[D>>2]|0)+17>>0]=1;a[(c[D>>2]|0)+18>>0]=4;a[(c[D>>2]|0)+14>>0]=1;c[F>>2]=c[x>>2]&1}if(!(c[E>>2]|0))c[E>>2]=Qi(c[D>>2]|0,G,-1)|0;if(!(c[E>>2]|0)){c[w>>2]=(c[w>>2]|0)+7&-8;c[E>>2]=kt(c[G>>2]|0,c[w>>2]|0,((c[B>>2]|0)!=0^1)&1,(c[B>>2]|0)!=0^1?186:0,c[D>>2]|0,c[(c[D>>2]|0)+212>>2]|0)|0}if(c[E>>2]|0){hr(c[(c[D>>2]|0)+64>>2]|0)|0;Wi(c[(c[D>>2]|0)+208>>2]|0);Kd(c[D>>2]|0);c[s>>2]=c[E>>2];K=c[s>>2]|0;i=L;return K|0}a[(c[D>>2]|0)+6>>0]=c[I>>2];c[(c[D>>2]|0)+164>>2]=1073741823;a[(c[D>>2]|0)+13>>0]=c[H>>2];a[(c[D>>2]|0)+4>>0]=c[H>>2];a[(c[D>>2]|0)+19>>0]=a[(c[D>>2]|0)+13>>0]|0;a[(c[D>>2]|0)+16>>0]=c[B>>2];a[(c[D>>2]|0)+15>>0]=c[F>>2];a[(c[D>>2]|0)+7>>0]=a[(c[D>>2]|0)+13>>0]|0;if(!(a[(c[D>>2]|0)+7>>0]|0)){a[(c[D>>2]|0)+8>>0]=1;a[(c[D>>2]|0)+9>>0]=0;a[(c[D>>2]|0)+12>>0]=2;a[(c[D>>2]|0)+11>>0]=34;a[(c[D>>2]|0)+10>>0]=2}b[(c[D>>2]|0)+148>>1]=c[w>>2];K=(c[D>>2]|0)+168|0;c[K>>2]=-1;c[K+4>>2]=-1;Rr(c[D>>2]|0);if(c[I>>2]|0){if(c[B>>2]|0)a[(c[D>>2]|0)+5>>0]=4}else a[(c[D>>2]|0)+5>>0]=2;c[(c[D>>2]|0)+204>>2]=c[y>>2];c[c[u>>2]>>2]=c[D>>2];c[s>>2]=0;K=c[s>>2]|0;i=L;return K|0}function Wq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;b=g;d=c[b+4>>2]|0;a=(c[f>>2]|0)+136|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;Xi(c[f>>2]|0);i=e;return}function Xq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=0;kR(c[g>>2]|0,0,c[f>>2]|0)|0;if(!(c[c[(c[e>>2]|0)+64>>2]>>2]|0)){h=c[h>>2]|0;i=j;return h|0}a=Wr(c[(c[e>>2]|0)+64>>2]|0,c[g>>2]|0,c[f>>2]|0,0,0)|0;c[h>>2]=a;c[h>>2]=(c[h>>2]|0)==522?0:a;h=c[h>>2]|0;i=j;return h|0}function Yq(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];a=ht((c[(c[d>>2]|0)+4>>2]|0)+448|0)|0;i=b;return a|0}function Zq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;e=g+12|0;j=g+8|0;h=g+4|0;f=g;c[e>>2]=a;c[j>>2]=b;c[h>>2]=d;c[(c[e>>2]|0)+184>>2]=c[j>>2];c[(c[e>>2]|0)+188>>2]=c[h>>2];if(!(c[c[(c[e>>2]|0)+64>>2]>>2]|0)){i=g;return}c[f>>2]=(c[e>>2]|0)+184;Js(c[(c[e>>2]|0)+64>>2]|0,15,c[f>>2]|0);i=g;return}function _q(b){b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=b;i=e;return a[(c[d>>2]|0)+15>>0]|0}function $q(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return(d[c[b>>2]>>0]|0)<<24|(d[(c[b>>2]|0)+1>>0]|0)<<16|(d[(c[b>>2]|0)+2>>0]|0)<<8|(d[(c[b>>2]|0)+3>>0]|0)|0}function ar(b){b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;c[f>>2]=c[(c[e>>2]|0)+208>>2];Sj();br(c[e>>2]|0);a[(c[e>>2]|0)+4>>0]=0;cr(c[(c[e>>2]|0)+216>>2]|0,d[(c[e>>2]|0)+10>>0]|0,c[(c[e>>2]|0)+160>>2]|0,c[f>>2]|0)|0;c[(c[e>>2]|0)+216>>2]=0;Ui(c[e>>2]|0);b=c[e>>2]|0;if(a[(c[e>>2]|0)+16>>0]|0)dr(b);else{if(c[c[b+68>>2]>>2]|0){b=c[e>>2]|0;fr(b,er(c[e>>2]|0)|0)|0}gr(c[e>>2]|0)}Tj();hr(c[(c[e>>2]|0)+68>>2]|0)|0;hr(c[(c[e>>2]|0)+64>>2]|0)|0;Wi(c[f>>2]|0);ir(c[(c[e>>2]|0)+212>>2]|0);Kd(c[e>>2]|0);i=g;return 0}function br(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;f=e+8|0;b=e+4|0;d=e;c[f>>2]=a;c[b>>2]=c[(c[f>>2]|0)+144>>2];while(1){if(!(c[b>>2]|0))break;c[d>>2]=c[(c[b>>2]|0)+12>>2];Kd(c[b>>2]|0);c[b>>2]=c[d>>2]}i=e;return}function cr(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;o=p+8|0;n=p+4|0;m=p;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[o>>2]=0;if(!(c[h>>2]|0)){g=c[o>>2]|0;i=p;return g|0}c[n>>2]=0;c[o>>2]=Hs(c[(c[h>>2]|0)+4>>2]|0,4)|0;do if(!(c[o>>2]|0)){if(!(d[(c[h>>2]|0)+43>>0]|0))a[(c[h>>2]|0)+43>>0]=1;c[o>>2]=Is(c[h>>2]|0,0,0,0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0,0,0)|0;if(!(c[o>>2]|0)){c[m>>2]=-1;Js(c[(c[h>>2]|0)+4>>2]|0,10,m);if((c[m>>2]|0)!=1){c[n>>2]=1;break}g=(c[h>>2]|0)+16|0;e=c[g+4>>2]|0;if((e|0)>0|(e|0)==0&(c[g>>2]|0)>>>0>=0)Ks(c[h>>2]|0,0,0)}}while(0);Ls(c[h>>2]|0,c[n>>2]|0);hr(c[(c[h>>2]|0)+8>>2]|0)|0;if(c[n>>2]|0){Sj();qr(c[c[h>>2]>>2]|0,c[(c[h>>2]|0)+108>>2]|0,0)|0;Tj()}Kd(c[(c[h>>2]|0)+32>>2]|0);Kd(c[h>>2]|0);g=c[o>>2]|0;i=p;return g|0}function dr(b){b=b|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h+8|0;g=h+4|0;f=h;c[e>>2]=b;kj(c[(c[e>>2]|0)+60>>2]|0);c[(c[e>>2]|0)+60>>2]=0;lr(c[e>>2]|0);j=(sr(c[e>>2]|0)|0)!=0;b=c[e>>2]|0;if(!j){if(!(a[b+4>>0]|0)){if(c[c[(c[e>>2]|0)+64>>2]>>2]|0)b=Sr(c[(c[e>>2]|0)+64>>2]|0)|0;else b=0;c[f>>2]=b;if(!(0!=(c[f>>2]&2048|0)?1==(d[(c[e>>2]|0)+5>>0]&5|0):0))hr(c[(c[e>>2]|0)+68>>2]|0)|0;c[g>>2]=wr(c[e>>2]|0,0)|0;if((c[g>>2]|0)!=0?(d[(c[e>>2]|0)+17>>0]|0)==6:0)a[(c[e>>2]|0)+18>>0]=5;a[(c[e>>2]|0)+19>>0]=0;a[(c[e>>2]|0)+17>>0]=0}}else{Gs(c[b+216>>2]|0);a[(c[e>>2]|0)+17>>0]=0}if(!(c[(c[e>>2]|0)+44>>2]|0)){j=c[e>>2]|0;j=j+80|0;g=j;c[g>>2]=0;j=j+4|0;c[j>>2]=0;j=c[e>>2]|0;j=j+88|0;g=j;c[g>>2]=0;j=j+4|0;c[j>>2]=0;j=c[e>>2]|0;j=j+20|0;a[j>>0]=0;i=h;return}Ui(c[e>>2]|0);a[(c[e>>2]|0)+19>>0]=a[(c[e>>2]|0)+13>>0]|0;a[(c[e>>2]|0)+17>>0]=0;c[(c[e>>2]|0)+44>>2]=0;j=c[e>>2]|0;j=j+80|0;g=j;c[g>>2]=0;j=j+4|0;c[j>>2]=0;j=c[e>>2]|0;j=j+88|0;g=j;c[g>>2]=0;j=j+4|0;c[j>>2]=0;j=c[e>>2]|0;j=j+20|0;a[j>>0]=0;i=h;return}function er(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;c[e>>2]=0;if(!(a[(c[d>>2]|0)+7>>0]|0))c[e>>2]=or(c[(c[d>>2]|0)+68>>2]|0,2)|0;if(c[e>>2]|0){e=c[e>>2]|0;i=f;return e|0}c[e>>2]=Si(c[(c[d>>2]|0)+68>>2]|0,(c[d>>2]|0)+88|0)|0;e=c[e>>2]|0;i=f;return e|0}function fr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+8|0;f=g+4|0;h=g;c[e>>2]=b;c[f>>2]=d;c[h>>2]=c[f>>2]&255;if(!((c[h>>2]|0)==13|(c[h>>2]|0)==10)){h=c[f>>2]|0;i=g;return h|0}c[(c[e>>2]|0)+44>>2]=c[f>>2];a[(c[e>>2]|0)+17>>0]=6;h=c[f>>2]|0;i=g;return h|0}function gr(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;do if((d[(c[e>>2]|0)+17>>0]|0)!=6?(d[(c[e>>2]|0)+17>>0]|0)!=0:0){if((d[(c[e>>2]|0)+17>>0]|0)>=2){Sj();jr(c[e>>2]|0)|0;Tj();break}if(!(a[(c[e>>2]|0)+4>>0]|0))kr(c[e>>2]|0,0,0)|0}while(0);dr(c[e>>2]|0);i=f;return}function hr(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=0;if(!(c[c[b>>2]>>2]|0)){d=c[d>>2]|0;i=e;return d|0}c[d>>2]=Tb[c[(c[c[b>>2]>>2]|0)+4>>2]&255](c[b>>2]|0)|0;c[c[b>>2]>>2]=0;d=c[d>>2]|0;i=e;return d|0}function ir(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Qb[c[156>>2]&255](c[(c[d>>2]|0)+44>>2]|0);i=b;return}function jr(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;h=k+8|0;j=k+4|0;g=k;c[f>>2]=b;c[h>>2]=0;b=c[f>>2]|0;if((d[(c[f>>2]|0)+17>>0]|0)==6){c[e>>2]=c[b+44>>2];j=c[e>>2]|0;i=k;return j|0}if((d[b+17>>0]|0)<=1){c[e>>2]=0;j=c[e>>2]|0;i=k;return j|0}l=(sr(c[f>>2]|0)|0)!=0;b=c[f>>2]|0;do if(l){c[h>>2]=Kr(b,2,-1)|0;c[j>>2]=kr(c[f>>2]|0,d[(c[f>>2]|0)+20>>0]|0,0)|0;if(!(c[h>>2]|0))c[h>>2]=c[j>>2]}else{if((c[c[b+68>>2]>>2]|0)!=0?(d[(c[f>>2]|0)+17>>0]|0)!=2:0){ +c[h>>2]=Lr(c[f>>2]|0,0)|0;break}c[g>>2]=d[(c[f>>2]|0)+17>>0];c[h>>2]=kr(c[f>>2]|0,0,0)|0;if((c[g>>2]|0)>2?(a[(c[f>>2]|0)+16>>0]|0)==0:0){c[(c[f>>2]|0)+44>>2]=4;a[(c[f>>2]|0)+17>>0]=6;c[e>>2]=c[h>>2];l=c[e>>2]|0;i=k;return l|0}}while(0);c[e>>2]=fr(c[f>>2]|0,c[h>>2]|0)|0;l=c[e>>2]|0;i=k;return l|0}function kr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;j=o+16|0;k=o+12|0;m=o+8|0;n=o+4|0;l=o;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=0;c[n>>2]=0;if((d[(c[h>>2]|0)+17>>0]|0)<2?(d[(c[h>>2]|0)+18>>0]|0)<2:0){c[g>>2]=0;n=c[g>>2]|0;i=o;return n|0}lr(c[h>>2]|0);a:do if(c[c[(c[h>>2]|0)+68>>2]>>2]|0){b=(mr(c[(c[h>>2]|0)+68>>2]|0)|0)!=0;f=c[h>>2]|0;if(b){hr(c[f+68>>2]|0)|0;break}e=c[h>>2]|0;if((d[f+5>>0]|0)==3){l=e+80|0;if(!((c[l>>2]|0)==0&(c[l+4>>2]|0)==0)){c[m>>2]=nr(c[(c[h>>2]|0)+68>>2]|0,0,0)|0;if((c[m>>2]|0)==0?(d[(c[h>>2]|0)+8>>0]|0)!=0:0)c[m>>2]=or(c[(c[h>>2]|0)+68>>2]|0,d[(c[h>>2]|0)+12>>0]|0)|0}else c[m>>2]=0;l=(c[h>>2]|0)+80|0;c[l>>2]=0;c[l+4>>2]=0;break}else{do if((d[e+5>>0]|0)!=1){if((d[(c[h>>2]|0)+4>>0]|0)!=0?(d[(c[h>>2]|0)+5>>0]|0)!=5:0)break;c[l>>2]=((a[(c[h>>2]|0)+13>>0]|0)!=0?0:1)&1;hr(c[(c[h>>2]|0)+68>>2]|0)|0;if(!(c[l>>2]|0))break a;c[m>>2]=qr(c[c[h>>2]>>2]|0,c[(c[h>>2]|0)+180>>2]|0,d[(c[h>>2]|0)+9>>0]|0)|0;break a}while(0);c[m>>2]=pr(c[h>>2]|0,c[j>>2]|0)|0;l=(c[h>>2]|0)+80|0;c[l>>2]=0;c[l+4>>2]=0;break}}while(0);kj(c[(c[h>>2]|0)+60>>2]|0);c[(c[h>>2]|0)+60>>2]=0;c[(c[h>>2]|0)+48>>2]=0;rr(c[(c[h>>2]|0)+212>>2]|0);aj(c[(c[h>>2]|0)+212>>2]|0,c[(c[h>>2]|0)+28>>2]|0);if(!(sr(c[h>>2]|0)|0)){if((c[m>>2]|0)==0&(c[k>>2]|0)!=0?(c[(c[h>>2]|0)+36>>2]|0)>>>0>(c[(c[h>>2]|0)+28>>2]|0)>>>0:0)c[m>>2]=ur(c[h>>2]|0,c[(c[h>>2]|0)+28>>2]|0)|0}else c[n>>2]=tr(c[(c[h>>2]|0)+216>>2]|0)|0;if((c[m>>2]|0)==0&(c[k>>2]|0)!=0?(c[c[(c[h>>2]|0)+64>>2]>>2]|0)!=0:0){l=vi(c[(c[h>>2]|0)+64>>2]|0,22,0)|0;c[m>>2]=l;c[m>>2]=(c[m>>2]|0)==12?0:l}do if(!(a[(c[h>>2]|0)+4>>0]|0)){if((sr(c[h>>2]|0)|0)!=0?(vr(c[(c[h>>2]|0)+216>>2]|0,0)|0)==0:0)break;c[n>>2]=wr(c[h>>2]|0,1)|0;a[(c[h>>2]|0)+19>>0]=0}while(0);a[(c[h>>2]|0)+17>>0]=1;a[(c[h>>2]|0)+20>>0]=0;c[g>>2]=(c[m>>2]|0)==0?c[n>>2]|0:c[m>>2]|0;n=c[g>>2]|0;i=o;return n|0}function lr(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[d>>2]|0)+104>>2]|0))break;kj(c[(c[(c[d>>2]|0)+100>>2]|0)+((c[e>>2]|0)*48|0)+16>>2]|0);c[e>>2]=(c[e>>2]|0)+1}if(!((a[(c[d>>2]|0)+4>>0]|0)!=0?(mr(c[(c[d>>2]|0)+72>>2]|0)|0)==0:0))hr(c[(c[d>>2]|0)+72>>2]|0)|0;Kd(c[(c[d>>2]|0)+100>>2]|0);c[(c[d>>2]|0)+100>>2]=0;c[(c[d>>2]|0)+104>>2]=0;c[(c[d>>2]|0)+56>>2]=0;i=f;return}function mr(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[c[b>>2]>>2]|0)==4836|0}function nr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;a=g;a=Ob[c[(c[c[f>>2]>>2]|0)+16>>2]&255](c[f>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;i=e;return a|0}function or(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=Yb[c[(c[c[f>>2]>>2]|0)+20>>2]&255](c[f>>2]|0,c[e>>2]|0)|0;i=d;return a|0}function pr(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;f=l+24|0;g=l+20|0;j=l+16|0;h=l+8|0;k=l;c[f>>2]=b;c[g>>2]=e;c[j>>2]=0;b=(c[f>>2]|0)+80|0;if(!((c[b>>2]|0)!=0|(c[b+4>>2]|0)!=0)){k=c[j>>2]|0;i=l;return k|0}m=(c[f>>2]|0)+168|0;e=c[m+4>>2]|0;b=h;c[b>>2]=c[m>>2];c[b+4>>2]=e;b=h;e=c[(c[f>>2]|0)+68>>2]|0;if((c[g>>2]|0)!=0|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0)c[j>>2]=nr(e,0,0)|0;else c[j>>2]=Fg(e,26703,28,0,0)|0;if((c[j>>2]|0)==0?(a[(c[f>>2]|0)+7>>0]|0)==0:0)c[j>>2]=or(c[(c[f>>2]|0)+68>>2]|0,16|d[(c[f>>2]|0)+12>>0])|0;m=h;g=c[m+4>>2]|0;if(!((c[j>>2]|0)==0&((g|0)>0|(g|0)==0&(c[m>>2]|0)>>>0>0))){m=c[j>>2]|0;i=l;return m|0}c[j>>2]=Si(c[(c[f>>2]|0)+68>>2]|0,k)|0;if(c[j>>2]|0){m=c[j>>2]|0;i=l;return m|0}b=c[k+4>>2]|0;m=h;g=c[m+4>>2]|0;if(!((b|0)>(g|0)|((b|0)==(g|0)?(c[k>>2]|0)>>>0>(c[m>>2]|0)>>>0:0))){m=c[j>>2]|0;i=l;return m|0}m=h;c[j>>2]=nr(c[(c[f>>2]|0)+68>>2]|0,c[m>>2]|0,c[m+4>>2]|0)|0;m=c[j>>2]|0;i=l;return m|0}function qr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;b=Ob[c[(c[h>>2]|0)+28>>2]&255](c[h>>2]|0,c[g>>2]|0,c[f>>2]|0)|0;i=e;return b|0}function rr(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;while(1){a=c[c[b>>2]>>2]|0;c[d>>2]=a;if(!a)break;bj(c[d>>2]|0)}i=e;return}function sr(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[(c[b>>2]|0)+216>>2]|0)!=0|0}function tr(b){b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=b;if(!(a[(c[d>>2]|0)+44>>0]|0)){i=e;return 0}Br(c[d>>2]|0,0,1);a[(c[d>>2]|0)+44>>0]=0;c[(c[d>>2]|0)+104>>2]=0;a[(c[d>>2]|0)+47>>0]=0;i=e;return 0}function ur(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+48|0;e=m+32|0;f=m+28|0;k=m+24|0;g=m+8|0;h=m;l=m+20|0;j=m+16|0;c[e>>2]=a;c[f>>2]=b;c[k>>2]=0;if(!(c[c[(c[e>>2]|0)+64>>2]>>2]|0)){l=c[k>>2]|0;i=m;return l|0}if((d[(c[e>>2]|0)+17>>0]|0|0)<4?(d[(c[e>>2]|0)+17>>0]|0|0)!=0:0){l=c[k>>2]|0;i=m;return l|0}c[l>>2]=c[(c[e>>2]|0)+160>>2];c[k>>2]=Si(c[(c[e>>2]|0)+64>>2]|0,g)|0;b=c[l>>2]|0;b=rR(b|0,((b|0)<0)<<31>>31|0,c[f>>2]|0,0)|0;a=h;c[a>>2]=b;c[a+4>>2]=C;if(c[k>>2]|0){l=c[k>>2]|0;i=m;return l|0}b=g;a=h;if(!((c[b>>2]|0)!=(c[a>>2]|0)?1:(c[b+4>>2]|0)!=(c[a+4>>2]|0))){l=c[k>>2]|0;i=m;return l|0}b=g;o=c[b+4>>2]|0;a=h;n=c[a+4>>2]|0;if(!((o|0)>(n|0)|((o|0)==(n|0)?(c[b>>2]|0)>>>0>(c[a>>2]|0)>>>0:0))){b=g;n=c[l>>2]|0;n=gR(c[b>>2]|0,c[b+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;b=C;o=h;a=c[o+4>>2]|0;if((b|0)<(a|0)|((b|0)==(a|0)?n>>>0<=(c[o>>2]|0)>>>0:0)){c[j>>2]=c[(c[e>>2]|0)+208>>2];kR(c[j>>2]|0,0,c[l>>2]|0)|0;a=c[(c[e>>2]|0)+64>>2]|0;j=c[j>>2]|0;n=c[l>>2]|0;o=c[l>>2]|0;o=fR(c[h>>2]|0,c[h+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;c[k>>2]=Fg(a,j,n,o,C)|0}}else{o=h;c[k>>2]=nr(c[(c[e>>2]|0)+64>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0}if(c[k>>2]|0){o=c[k>>2]|0;i=m;return o|0}c[(c[e>>2]|0)+36>>2]=c[f>>2];o=c[k>>2]|0;i=m;return o|0}function vr(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=e;c[h>>2]=f;if(c[h>>2]|0){f=c[g>>2]|0;if((c[h>>2]|0)>0){zr(f,3+(b[(c[g>>2]|0)+40>>1]|0)|0);a[(c[g>>2]|0)+43>>0]=1;c[j>>2]=1;j=c[j>>2]|0;i=k;return j|0}else{c[j>>2]=(d[f+43>>0]|0)==0&1;j=c[j>>2]|0;i=k;return j|0}}if(!(a[(c[g>>2]|0)+43>>0]|0)){c[j>>2]=0;j=c[j>>2]|0;i=k;return j|0}a[(c[g>>2]|0)+43>>0]=0;if(yr(c[g>>2]|0,3+(b[(c[g>>2]|0)+40>>1]|0)|0)|0)a[(c[g>>2]|0)+43>>0]=1;c[j>>2]=(d[(c[g>>2]|0)+43>>0]|0)==0&1;j=c[j>>2]|0;i=k;return j|0}function wr(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=e;c[h>>2]=0;if(!(c[c[(c[f>>2]|0)+64>>2]>>2]|0)){h=c[h>>2]|0;i=j;return h|0}if(d[(c[f>>2]|0)+14>>0]|0)e=0;else e=xr(c[(c[f>>2]|0)+64>>2]|0,c[g>>2]|0)|0;c[h>>2]=e;if((d[(c[f>>2]|0)+18>>0]|0|0)==5){h=c[h>>2]|0;i=j;return h|0}a[(c[f>>2]|0)+18>>0]=c[g>>2];h=c[h>>2]|0;i=j;return h|0}function xr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;b=Yb[c[(c[c[f>>2]>>2]|0)+32>>2]&255](c[f>>2]|0,c[e>>2]|0)|0;i=d;return b|0}function yr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=d;if(a[(c[f>>2]|0)+43>>0]|0){c[e>>2]=0;h=c[e>>2]|0;i=j;return h|0}else{c[h>>2]=Ar(c[(c[f>>2]|0)+4>>2]|0,c[g>>2]|0,1,6)|0;c[e>>2]=c[h>>2];h=c[e>>2]|0;i=j;return h|0}return 0}function zr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;c[f>>2]=d;if(a[(c[e>>2]|0)+43>>0]|0){i=g;return}Ar(c[(c[e>>2]|0)+4>>2]|0,c[f>>2]|0,1,5)|0;i=g;return}function Ar(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;b=Wb[c[(c[c[k>>2]>>2]|0)+56>>2]&255](c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;i=f;return b|0}function Br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;if(a[(c[f>>2]|0)+43>>0]|0){i=j;return}Ar(c[(c[f>>2]|0)+4>>2]|0,c[g>>2]|0,c[h>>2]|0,9)|0;i=j;return}function Cr(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Fr(c[d>>2]|0,0,0)|0;i=b;return 0}function Dr(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=i;i=i+64|0;t=r+52|0;s=r+48|0;n=r+44|0;o=r+8|0;p=r+40|0;m=r+36|0;l=r+32|0;g=r+28|0;q=r+24|0;h=r;j=r+20|0;k=r+16|0;c[t>>2]=a;c[s>>2]=b;c[n>>2]=d;d=o;c[d>>2]=e;c[d+4>>2]=f;c[p>>2]=c[t>>2];c[m>>2]=c[s>>2];c[l>>2]=c[n>>2];d=(c[p>>2]|0)+24|0;a=o;b=o;a:do if(((c[d>>2]|0)!=(c[a>>2]|0)?1:(c[d+4>>2]|0)!=(c[a+4>>2]|0))|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0){t=h;c[t>>2]=0;c[t+4>>2]=0;c[q>>2]=c[(c[p>>2]|0)+4>>2];while(1){if(!(c[q>>2]|0))break a;s=h;s=gR(c[s>>2]|0,c[s+4>>2]|0,1020,0)|0;a=C;t=o;b=c[t+4>>2]|0;if(!((a|0)<(b|0)|((a|0)==(b|0)?s>>>0<=(c[t>>2]|0)>>>0:0)))break a;s=h;s=gR(c[s>>2]|0,c[s+4>>2]|0,1020,0)|0;t=h;c[t>>2]=s;c[t+4>>2]=C;c[q>>2]=c[c[q>>2]>>2]}}else c[q>>2]=c[(c[p>>2]|0)+24+8>>2];while(0);t=o;t=qR(c[t>>2]|0,c[t+4>>2]|0,1020,0)|0;c[g>>2]=t;while(1){c[j>>2]=1020-(c[g>>2]|0);c[k>>2]=(c[l>>2]|0)<(1020-(c[g>>2]|0)|0)?c[l>>2]|0:1020-(c[g>>2]|0)|0;iR(c[m>>2]|0,(c[q>>2]|0)+4+(c[g>>2]|0)|0,c[k>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+(c[k>>2]|0);c[l>>2]=(c[l>>2]|0)-(c[j>>2]|0);c[g>>2]=0;if((c[l>>2]|0)<0){e=10;break}t=c[c[q>>2]>>2]|0;c[q>>2]=t;if(!((t|0)!=0&(c[l>>2]|0)>0)){e=10;break}}if((e|0)==10){t=o;s=c[n>>2]|0;s=gR(c[t>>2]|0,c[t+4>>2]|0,s|0,((s|0)<0)<<31>>31|0)|0;t=(c[p>>2]|0)+24|0;c[t>>2]=s;c[t+4>>2]=C;c[(c[p>>2]|0)+24+8>>2]=c[q>>2];i=r;return 0}return 0}function Er(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=i;i=i+64|0;o=p+48|0;s=p+44|0;q=p+40|0;r=p+36|0;k=p+32|0;j=p+28|0;n=p+24|0;l=p+20|0;g=p+16|0;h=p+12|0;m=p+8|0;c[s>>2]=a;c[q>>2]=b;c[r>>2]=d;b=p;c[b>>2]=e;c[b+4>>2]=f;c[k>>2]=c[s>>2];c[j>>2]=c[r>>2];c[n>>2]=c[q>>2];while(1){if((c[j>>2]|0)<=0){e=11;break}c[l>>2]=c[(c[k>>2]|0)+8+8>>2];s=(c[k>>2]|0)+8|0;s=qR(c[s>>2]|0,c[s+4>>2]|0,1020,0)|0;c[g>>2]=s;c[h>>2]=(c[j>>2]|0)<(1020-(c[g>>2]|0)|0)?c[j>>2]|0:1020-(c[g>>2]|0)|0;if(!(c[g>>2]|0)){c[m>>2]=Id(1024)|0;if(!(c[m>>2]|0)){e=5;break}c[c[m>>2]>>2]=0;e=c[m>>2]|0;if(c[l>>2]|0)c[c[l>>2]>>2]=e;else c[(c[k>>2]|0)+4>>2]=e;c[(c[k>>2]|0)+8+8>>2]=c[m>>2]}iR((c[(c[k>>2]|0)+8+8>>2]|0)+4+(c[g>>2]|0)|0,c[n>>2]|0,c[h>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+(c[h>>2]|0);c[j>>2]=(c[j>>2]|0)-(c[h>>2]|0);r=c[h>>2]|0;s=(c[k>>2]|0)+8|0;q=s;r=gR(c[q>>2]|0,c[q+4>>2]|0,r|0,((r|0)<0)<<31>>31|0)|0;c[s>>2]=r;c[s+4>>2]=C}if((e|0)==5){c[o>>2]=3082;s=c[o>>2]|0;i=p;return s|0}else if((e|0)==11){c[o>>2]=0;s=c[o>>2]|0;i=p;return s|0}return 0}function Fr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;e=h+20|0;j=h+16|0;f=h+12|0;g=h+8|0;c[e>>2]=a;a=h;c[a>>2]=b;c[a+4>>2]=d;c[j>>2]=c[e>>2];c[f>>2]=c[(c[j>>2]|0)+4>>2];while(1){if(!(c[f>>2]|0))break;c[g>>2]=c[f>>2];c[f>>2]=c[c[f>>2]>>2];Kd(c[g>>2]|0)}Ir(c[e>>2]|0);i=h;return 0}function Gr(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 0}function Hr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;g=d+8|0;f=d+4|0;e=d;c[g>>2]=a;c[f>>2]=b;c[e>>2]=c[g>>2];e=(c[e>>2]|0)+8|0;a=c[e+4>>2]|0;b=c[f>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;i=d;return 0}function Ir(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];a=c[d>>2]|0;kR(a|0,0,Jr()|0)|0;c[c[d>>2]>>2]=4836;i=b;return}function Jr(){return 40}function Kr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;j=m+24|0;e=m+20|0;f=m+16|0;l=m+12|0;g=m+8|0;h=m+4|0;k=m;c[j>>2]=a;c[e>>2]=b;c[f>>2]=d;c[l>>2]=c[(c[j>>2]|0)+44>>2];if(c[l>>2]|0){l=c[l>>2]|0;i=m;return l|0}if((c[f>>2]|0)>=(c[(c[j>>2]|0)+104>>2]|0)){l=c[l>>2]|0;i=m;return l|0}c[h>>2]=(c[f>>2]|0)+((c[e>>2]|0)==1?0:1);c[g>>2]=c[h>>2];while(1){if((c[g>>2]|0)>=(c[(c[j>>2]|0)+104>>2]|0))break;kj(c[(c[(c[j>>2]|0)+100>>2]|0)+((c[g>>2]|0)*48|0)+16>>2]|0);c[g>>2]=(c[g>>2]|0)+1}c[(c[j>>2]|0)+104>>2]=c[h>>2];if((c[e>>2]|0)!=1){if((sr(c[j>>2]|0)|0)==0?(c[c[(c[j>>2]|0)+68>>2]>>2]|0)==0:0){l=c[l>>2]|0;i=m;return l|0}if(!(c[h>>2]|0))e=0;else e=(c[(c[j>>2]|0)+100>>2]|0)+(((c[h>>2]|0)-1|0)*48|0)|0;c[k>>2]=e;c[l>>2]=gs(c[j>>2]|0,c[k>>2]|0)|0;l=c[l>>2]|0;i=m;return l|0}if(c[h>>2]|0){l=c[l>>2]|0;i=m;return l|0}if(!(c[c[(c[j>>2]|0)+72>>2]>>2]|0)){l=c[l>>2]|0;i=m;return l|0}if(mr(c[(c[j>>2]|0)+72>>2]|0)|0)c[l>>2]=nr(c[(c[j>>2]|0)+72>>2]|0,0,0)|0;c[(c[j>>2]|0)+56>>2]=0;l=c[l>>2]|0;i=m;return l|0}function Lr(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+64|0;r=t+8|0;m=t+56|0;n=t+52|0;j=t+48|0;k=t;g=t+44|0;l=t+40|0;f=t+36|0;p=t+32|0;q=t+28|0;s=t+24|0;h=t+20|0;o=t+16|0;c[m>>2]=b;c[n>>2]=e;c[j>>2]=c[c[m>>2]>>2];c[f>>2]=0;c[q>>2]=1;c[s>>2]=0;c[o>>2]=0;c[p>>2]=Si(c[(c[m>>2]|0)+68>>2]|0,k)|0;a:do if(!(c[p>>2]|0)){c[s>>2]=c[(c[m>>2]|0)+208>>2];c[p>>2]=Mr(c[(c[m>>2]|0)+68>>2]|0,c[s>>2]|0,(c[(c[c[m>>2]>>2]|0)+8>>2]|0)+1|0)|0;if((c[p>>2]|0)==0?(a[c[s>>2]>>0]|0)!=0:0)c[p>>2]=Nr(c[j>>2]|0,c[s>>2]|0,0,q)|0;c[s>>2]=0;if((c[p>>2]|0)==0&(c[q>>2]|0)!=0){j=(c[m>>2]|0)+80|0;c[j>>2]=0;c[j+4>>2]=0;c[h>>2]=c[n>>2];b:while(1){j=k;c[p>>2]=Or(c[m>>2]|0,c[n>>2]|0,c[j>>2]|0,c[j+4>>2]|0,g,f)|0;if(c[p>>2]|0){e=8;break}if((c[g>>2]|0)==-1){b=k;b=fR(c[b>>2]|0,c[b+4>>2]|0,c[(c[m>>2]|0)+156>>2]|0,0)|0;j=(c[(c[m>>2]|0)+160>>2]|0)+8|0;j=pR(b|0,C|0,j|0,((j|0)<0)<<31>>31|0)|0;c[g>>2]=j}if(!((c[g>>2]|0)!=0|(c[n>>2]|0)!=0)?(b=(c[m>>2]|0)+88|0,b=gR(c[b>>2]|0,c[b+4>>2]|0,c[(c[m>>2]|0)+156>>2]|0,0)|0,j=(c[m>>2]|0)+80|0,(b|0)==(c[j>>2]|0)?(C|0)==(c[j+4>>2]|0):0):0){j=k;b=(c[m>>2]|0)+80|0;b=fR(c[j>>2]|0,c[j+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;j=(c[(c[m>>2]|0)+160>>2]|0)+8|0;j=pR(b|0,C|0,j|0,((j|0)<0)<<31>>31|0)|0;c[g>>2]=j}j=(c[m>>2]|0)+80|0;if((c[j+4>>2]|0)==0?(c[j>>2]|0)==(c[(c[m>>2]|0)+156>>2]|0):0){c[p>>2]=ur(c[m>>2]|0,c[f>>2]|0)|0;if(c[p>>2]|0)break a;c[(c[m>>2]|0)+28>>2]=c[f>>2]}c[l>>2]=0;while(1){if((c[l>>2]|0)>>>0>=(c[g>>2]|0)>>>0)continue b;if(c[h>>2]|0){Ui(c[m>>2]|0);c[h>>2]=0}c[p>>2]=Pr(c[m>>2]|0,(c[m>>2]|0)+80|0,0,1,0)|0;if(c[p>>2]|0)break;c[o>>2]=(c[o>>2]|0)+1;c[l>>2]=(c[l>>2]|0)+1}if((c[p>>2]|0)!=101){e=26;break}e=k;b=c[e+4>>2]|0;j=(c[m>>2]|0)+80|0;c[j>>2]=c[e>>2];c[j+4>>2]=b}if((e|0)==8){if((c[p>>2]|0)!=101)break;c[p>>2]=0;break}else if((e|0)==26){if((c[p>>2]|0)!=522)break;c[p>>2]=0;break}}}while(0);a[(c[m>>2]|0)+19>>0]=a[(c[m>>2]|0)+13>>0]|0;if(!(c[p>>2]|0)){c[s>>2]=c[(c[m>>2]|0)+208>>2];c[p>>2]=Mr(c[(c[m>>2]|0)+68>>2]|0,c[s>>2]|0,(c[(c[c[m>>2]>>2]|0)+8>>2]|0)+1|0)|0}do if(!(c[p>>2]|0)){if((d[(c[m>>2]|0)+17>>0]|0)<4?(d[(c[m>>2]|0)+17>>0]|0)!=0:0)break;c[p>>2]=Hg(c[m>>2]|0,0)|0}while(0);if(!(c[p>>2]|0))c[p>>2]=kr(c[m>>2]|0,(a[c[s>>2]>>0]|0)!=0&1,0)|0;if((c[p>>2]|0)==0?(c[q>>2]|0)!=0?(a[c[s>>2]>>0]|0)!=0:0:0)c[p>>2]=Qr(c[m>>2]|0,c[s>>2]|0)|0;if(!((c[n>>2]|0)!=0&(c[o>>2]|0)!=0)){s=c[m>>2]|0;Rr(s);s=c[p>>2]|0;i=t;return s|0}s=c[(c[m>>2]|0)+180>>2]|0;c[r>>2]=c[o>>2];c[r+4>>2]=s;Rd(539,26731,r);s=c[m>>2]|0;Rr(s);s=c[p>>2]|0;i=t;return s|0}function Mr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;f=q+36|0;g=q+32|0;h=q+28|0;j=q+24|0;n=q+20|0;m=q+16|0;o=q;l=q+12|0;p=q+8|0;k=q+40|0;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;a[c[h>>2]>>0]=0;e=Si(c[g>>2]|0,o)|0;c[n>>2]=e;d=o;b=c[d+4>>2]|0;if((((((!(0!=(e|0)|((b|0)<0|(b|0)==0&(c[d>>2]|0)>>>0<16))?(b=c[g>>2]|0,d=o,d=fR(c[d>>2]|0,c[d+4>>2]|0,16,0)|0,d=Xr(b,d,C,m)|0,c[n>>2]=d,0==(d|0)):0)?!((c[m>>2]|0)==0?1:(c[m>>2]|0)>>>0>=(c[j>>2]|0)>>>0):0)?(b=c[g>>2]|0,d=o,d=fR(c[d>>2]|0,c[d+4>>2]|0,12,0)|0,d=Xr(b,d,C,l)|0,c[n>>2]=d,0==(d|0)):0)?(b=c[g>>2]|0,d=o,d=fR(c[d>>2]|0,c[d+4>>2]|0,8,0)|0,d=Wr(b,k,8,d,C)|0,c[n>>2]=d,0==(d|0)):0)?(vQ(k,26758,8)|0)==0:0)?(k=c[g>>2]|0,e=c[h>>2]|0,b=c[m>>2]|0,d=o,d=fR(c[d>>2]|0,c[d+4>>2]|0,16,0)|0,d=fR(d|0,C|0,c[m>>2]|0,0)|0,d=Wr(k,e,b,d,C)|0,c[n>>2]=d,0==(d|0)):0){c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break;c[l>>2]=(c[l>>2]|0)-(a[(c[h>>2]|0)+(c[p>>2]|0)>>0]|0);c[p>>2]=(c[p>>2]|0)+1}if(c[l>>2]|0)c[m>>2]=0;a[(c[h>>2]|0)+(c[m>>2]|0)>>0]=0;c[f>>2]=0;d=c[f>>2]|0;i=q;return d|0}c[f>>2]=c[n>>2];d=c[f>>2]|0;i=q;return d|0}function Nr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;b=Wb[c[(c[k>>2]|0)+32>>2]&255](c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;i=f;return b|0}function Or(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;h=s+44|0;j=s+40|0;k=s+36|0;t=s+8|0;l=s+32|0;m=s+28|0;r=s+24|0;n=s+48|0;o=s;p=s+20|0;q=s+16|0;c[j>>2]=a;c[k>>2]=b;b=t;c[b>>2]=d;c[b+4>>2]=e;c[l>>2]=f;c[m>>2]=g;b=fs(c[j>>2]|0)|0;f=(c[j>>2]|0)+80|0;c[f>>2]=b;c[f+4>>2]=C;f=(c[j>>2]|0)+80|0;f=gR(c[f>>2]|0,c[f+4>>2]|0,c[(c[j>>2]|0)+156>>2]|0,0)|0;b=C;a=t;g=c[a+4>>2]|0;if((b|0)>(g|0)|((b|0)==(g|0)?f>>>0>(c[a>>2]|0)>>>0:0)){c[h>>2]=101;t=c[h>>2]|0;i=s;return t|0}f=(c[j>>2]|0)+80|0;a=c[f+4>>2]|0;t=o;c[t>>2]=c[f>>2];c[t+4>>2]=a;if(!((c[k>>2]|0)==0?(a=o,t=(c[j>>2]|0)+88|0,!((c[a>>2]|0)!=(c[t>>2]|0)?1:(c[a+4>>2]|0)!=(c[t+4>>2]|0))):0)){t=o;c[r>>2]=Wr(c[(c[j>>2]|0)+68>>2]|0,n,8,c[t>>2]|0,c[t+4>>2]|0)|0;if(c[r>>2]|0){c[h>>2]=c[r>>2];t=c[h>>2]|0;i=s;return t|0}if(vQ(n,26758,8)|0){c[h>>2]=101;t=c[h>>2]|0;i=s;return t|0}}a=c[(c[j>>2]|0)+68>>2]|0;t=o;t=gR(c[t>>2]|0,c[t+4>>2]|0,8,0)|0;t=Xr(a,t,C,c[l>>2]|0)|0;c[r>>2]=t;if((0==(t|0)?(a=c[(c[j>>2]|0)+68>>2]|0,t=o,t=gR(c[t>>2]|0,c[t+4>>2]|0,12,0)|0,t=Xr(a,t,C,(c[j>>2]|0)+52|0)|0,c[r>>2]=t,0==(t|0)):0)?(a=c[(c[j>>2]|0)+68>>2]|0,t=o,t=gR(c[t>>2]|0,c[t+4>>2]|0,16,0)|0,t=Xr(a,t,C,c[m>>2]|0)|0,c[r>>2]=t,0==(t|0)):0){t=(c[j>>2]|0)+80|0;do if((c[t>>2]|0)==0&(c[t+4>>2]|0)==0){a=c[(c[j>>2]|0)+68>>2]|0;t=o;t=gR(c[t>>2]|0,c[t+4>>2]|0,20,0)|0;t=Xr(a,t,C,q)|0;c[r>>2]=t;if(0==(t|0)?(a=c[(c[j>>2]|0)+68>>2]|0,t=o,t=gR(c[t>>2]|0,c[t+4>>2]|0,24,0)|0,t=Xr(a,t,C,p)|0,c[r>>2]=t,0==(t|0)):0){if(!(c[p>>2]|0))c[p>>2]=c[(c[j>>2]|0)+160>>2];if((!((c[p>>2]|0)>>>0<512|(c[q>>2]|0)>>>0<32|(c[p>>2]|0)>>>0>65536|(c[q>>2]|0)>>>0>65536)?((c[p>>2]|0)-1&c[p>>2]|0)==0:0)?((c[q>>2]|0)-1&c[q>>2]|0)==0:0){c[r>>2]=Qi(c[j>>2]|0,p,-1)|0;c[(c[j>>2]|0)+156>>2]=c[q>>2];break}c[h>>2]=101;t=c[h>>2]|0;i=s;return t|0}c[h>>2]=c[r>>2];t=c[h>>2]|0;i=s;return t|0}while(0);t=(c[j>>2]|0)+80|0;a=t;a=gR(c[a>>2]|0,c[a+4>>2]|0,c[(c[j>>2]|0)+156>>2]|0,0)|0;c[t>>2]=a;c[t+4>>2]=C;c[h>>2]=c[r>>2];t=c[h>>2]|0;i=s;return t|0}c[h>>2]=c[r>>2];t=c[h>>2]|0;i=s;return t|0}function Pr(f,g,h,j,k){f=f|0;g=g|0;h=h|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;B=i;i=i+64|0;y=B+60|0;o=B+56|0;p=B+52|0;l=B+48|0;q=B+44|0;r=B+40|0;A=B+36|0;z=B+32|0;v=B+28|0;m=B+24|0;s=B+20|0;n=B+16|0;t=B+12|0;u=B;x=B+8|0;c[o>>2]=f;c[p>>2]=g;c[l>>2]=h;c[q>>2]=j;c[r>>2]=k;c[s>>2]=c[(c[o>>2]|0)+208>>2];j=c[o>>2]|0;if(c[q>>2]|0)j=c[j+68>>2]|0;else j=c[j+72>>2]|0;c[n>>2]=j;f=c[p>>2]|0;c[A>>2]=Xr(c[n>>2]|0,c[f>>2]|0,c[f+4>>2]|0,v)|0;if(c[A>>2]|0){c[y>>2]=c[A>>2];A=c[y>>2]|0;i=B;return A|0}k=c[n>>2]|0;h=c[s>>2]|0;g=c[(c[o>>2]|0)+160>>2]|0;f=c[p>>2]|0;f=gR(c[f>>2]|0,c[f+4>>2]|0,4,0)|0;c[A>>2]=Wr(k,h,g,f,C)|0;if(c[A>>2]|0){c[y>>2]=c[A>>2];A=c[y>>2]|0;i=B;return A|0}g=(c[(c[o>>2]|0)+160>>2]|0)+4+(c[q>>2]<<2)|0;f=c[p>>2]|0;h=f;g=gR(c[h>>2]|0,c[h+4>>2]|0,g|0,((g|0)<0)<<31>>31|0)|0;c[f>>2]=g;c[f+4>>2]=C;if((c[v>>2]|0)!=0?(c[v>>2]|0)!=(((c[381]|0)/(c[(c[o>>2]|0)+160>>2]|0)|0)+1|0):0){if((c[v>>2]|0)>>>0<=(c[(c[o>>2]|0)+28>>2]|0)>>>0?(ij(c[l>>2]|0,c[v>>2]|0)|0)==0:0){if(c[q>>2]|0){f=c[n>>2]|0;n=c[p>>2]|0;n=fR(c[n>>2]|0,c[n+4>>2]|0,4,0)|0;c[A>>2]=Xr(f,n,C,m)|0;if(c[A>>2]|0){c[y>>2]=c[A>>2];A=c[y>>2]|0;i=B;return A|0}if((c[r>>2]|0)==0?(n=Yr(c[o>>2]|0,c[s>>2]|0)|0,(n|0)!=(c[m>>2]|0)):0){c[y>>2]=101;A=c[y>>2]|0;i=B;return A|0}}if((c[l>>2]|0)!=0?(n=gj(c[l>>2]|0,c[v>>2]|0)|0,c[A>>2]=n,(n|0)!=0):0){c[y>>2]=c[A>>2];A=c[y>>2]|0;i=B;return A|0}if((c[v>>2]|0)==1?(b[(c[o>>2]|0)+150>>1]|0)!=(d[(c[s>>2]|0)+20>>0]|0):0)b[(c[o>>2]|0)+150>>1]=d[(c[s>>2]|0)+20>>0]|0;if(sr(c[o>>2]|0)|0)c[z>>2]=0;else c[z>>2]=Zr(c[o>>2]|0,c[v>>2]|0)|0;if(c[q>>2]|0){if(d[(c[o>>2]|0)+7>>0]|0)j=1;else{n=c[p>>2]|0;l=c[n+4>>2]|0;j=(c[o>>2]|0)+88|0;m=c[j+4>>2]|0;j=(l|0)<(m|0)|((l|0)==(m|0)?(c[n>>2]|0)>>>0<=(c[j>>2]|0)>>>0:0)}c[t>>2]=j&1}else{if(!(c[z>>2]|0))j=1;else j=0==(e[(c[z>>2]|0)+24>>1]&8|0);c[t>>2]=j&1}do if(c[c[(c[o>>2]|0)+64>>2]>>2]|0){if((d[(c[o>>2]|0)+17>>0]|0)>=4){if(!(c[t>>2]|0)){w=44;break}}else if(!((c[t>>2]|0)!=0?(d[(c[o>>2]|0)+17>>0]|0)==0:0)){w=44;break}n=c[(c[o>>2]|0)+160>>2]|0;n=rR((c[v>>2]|0)-1|0,0,n|0,((n|0)<0)<<31>>31|0)|0;t=u;c[t>>2]=n;c[t+4>>2]=C;c[A>>2]=Fg(c[(c[o>>2]|0)+64>>2]|0,c[s>>2]|0,c[(c[o>>2]|0)+160>>2]|0,c[u>>2]|0,c[u+4>>2]|0)|0;if((c[v>>2]|0)>>>0>(c[(c[o>>2]|0)+36>>2]|0)>>>0)c[(c[o>>2]|0)+36>>2]=c[v>>2];if(c[(c[o>>2]|0)+96>>2]|0){_r(c[(c[o>>2]|0)+96>>2]|0,c[v>>2]|0,c[s>>2]|0);c[s>>2]=c[s>>2]}}else w=44;while(0);do if((w|0)==44?(c[q>>2]|0)==0&(c[z>>2]|0)==0:0){w=(c[o>>2]|0)+21|0;a[w>>0]=d[w>>0]|2;c[A>>2]=sg(c[o>>2]|0,c[v>>2]|0,z,1)|0;w=(c[o>>2]|0)+21|0;a[w>>0]=d[w>>0]&-3;if(!(c[A>>2]|0)){w=(c[z>>2]|0)+24|0;b[w>>1]=e[w>>1]&-17;$r(c[z>>2]|0);break}c[y>>2]=c[A>>2];A=c[y>>2]|0;i=B;return A|0}while(0);if(c[z>>2]|0){c[x>>2]=c[(c[z>>2]|0)+4>>2];iR(c[x>>2]|0,c[s>>2]|0,c[(c[o>>2]|0)+160>>2]|0)|0;Qb[c[(c[o>>2]|0)+204>>2]&255](c[z>>2]|0);do if(c[q>>2]|0){if((c[r>>2]|0)!=0?(u=c[p>>2]|0,s=c[u+4>>2]|0,w=(c[o>>2]|0)+88|0,t=c[w+4>>2]|0,!((s|0)<(t|0)|((s|0)==(t|0)?(c[u>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0))):0)break;bj(c[z>>2]|0)}while(0);if((c[v>>2]|0)==1){h=(c[o>>2]|0)+112|0;j=(c[x>>2]|0)+24|0;k=h+16|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0))}as(c[z>>2]|0)}c[y>>2]=c[A>>2];A=c[y>>2]|0;i=B;return A|0}c[y>>2]=0;A=c[y>>2]|0;i=B;return A|0}c[y>>2]=101;A=c[y>>2]|0;i=B;return A|0}function Qr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+64|0;t=s+60|0;e=s+56|0;n=s+52|0;o=s+48|0;m=s+44|0;l=s+40|0;q=s+36|0;j=s;p=s+32|0;r=s+28|0;k=s+24|0;g=s+16|0;f=s+12|0;h=s+8|0;c[t>>2]=b;c[e>>2]=d;c[n>>2]=c[c[t>>2]>>2];c[q>>2]=0;d=c[(c[n>>2]|0)+4>>2]<<1;c[m>>2]=ig(d,((d|0)<0)<<31>>31)|0;c[l>>2]=(c[m>>2]|0)+(c[(c[n>>2]|0)+4>>2]|0);if(c[m>>2]|0){c[s+20>>2]=16385;c[o>>2]=Vr(c[n>>2]|0,c[e>>2]|0,c[m>>2]|0,16385,0)|0}else c[o>>2]=7;a:do if((c[o>>2]|0)==0?(c[o>>2]=Si(c[m>>2]|0,j)|0,(c[o>>2]|0)==0):0){c[k>>2]=(c[(c[n>>2]|0)+8>>2]|0)+1;d=j;t=c[k>>2]|0;t=gR(c[d>>2]|0,c[d+4>>2]|0,t|0,((t|0)<0)<<31>>31|0)|0;t=gR(t|0,C|0,1,0)|0;c[q>>2]=_f(t,C)|0;if(!(c[q>>2]|0)){c[o>>2]=7;break}t=j;t=gR(c[t>>2]|0,c[t+4>>2]|0,1,0)|0;c[r>>2]=(c[q>>2]|0)+t;c[o>>2]=Wr(c[m>>2]|0,c[q>>2]|0,c[j>>2]|0,0,0)|0;if(!(c[o>>2]|0)){a[(c[q>>2]|0)+(c[j>>2]|0)>>0]=0;c[p>>2]=c[q>>2];while(1){d=(c[p>>2]|0)-(c[q>>2]|0)|0;u=((d|0)<0)<<31>>31;t=j;b=c[t+4>>2]|0;if(!((u|0)<(b|0)|((u|0)==(b|0)?d>>>0<(c[t>>2]|0)>>>0:0)))break;c[o>>2]=Nr(c[n>>2]|0,c[p>>2]|0,0,g)|0;if(c[o>>2]|0)break a;if(c[g>>2]|0){c[h>>2]=2049;c[o>>2]=Vr(c[n>>2]|0,c[p>>2]|0,c[l>>2]|0,c[h>>2]|0,0)|0;if(c[o>>2]|0)break a;c[o>>2]=Mr(c[l>>2]|0,c[r>>2]|0,c[k>>2]|0)|0;hr(c[l>>2]|0)|0;if(c[o>>2]|0)break a;if(a[c[r>>2]>>0]|0)b=(yQ(c[r>>2]|0,c[e>>2]|0)|0)==0;else b=0;c[f>>2]=b&1;if(c[f>>2]|0)break a}u=(If(c[p>>2]|0)|0)+1|0;c[p>>2]=(c[p>>2]|0)+u}hr(c[m>>2]|0)|0;c[o>>2]=qr(c[n>>2]|0,c[e>>2]|0,0)|0}}while(0);Kd(c[q>>2]|0);if(!(c[m>>2]|0)){u=c[o>>2]|0;i=s;return u|0}hr(c[m>>2]|0)|0;Kd(c[m>>2]|0);u=c[o>>2]|0;i=s;return u|0}function Rr(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;if((d[(c[b>>2]|0)+13>>0]|0|0)==0?((Sr(c[(c[b>>2]|0)+64>>2]|0)|0)&4096|0)==0:0){a=Tr(c[(c[b>>2]|0)+64>>2]|0)|0;c[(c[b>>2]|0)+156>>2]=a;i=e;return}c[(c[b>>2]|0)+156>>2]=512;i=e;return}function Sr(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Tb[c[(c[c[d>>2]>>2]|0)+48>>2]&255](c[d>>2]|0)|0;i=b;return a|0}function Tr(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=Ur(c[e>>2]|0)|0;if((c[b>>2]|0)>=32){if((c[b>>2]|0)>65536)c[b>>2]=65536}else c[b>>2]=512;i=d;return c[b>>2]|0}function Ur(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=c[(c[c[b>>2]>>2]|0)+44>>2];if(!(c[d>>2]|0)){d=4096;i=e;return d|0}d=Tb[c[d>>2]&255](c[b>>2]|0)|0;i=e;return d|0}function Vr(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,j=0,k=0,l=0,m=0,n=0;h=i;i=i+32|0;n=h+20|0;m=h+16|0;l=h+12|0;k=h+8|0;j=h+4|0;g=h;c[n>>2]=a;c[m>>2]=b;c[l>>2]=d;c[k>>2]=e;c[j>>2]=f;c[g>>2]=Zb[c[(c[n>>2]|0)+24>>2]&255](c[n>>2]|0,c[m>>2]|0,c[l>>2]|0,c[k>>2]&556927,c[j>>2]|0)|0;i=h;return c[g>>2]|0}function Wr(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,j=0,k=0,l=0;g=i;i=i+32|0;k=g+16|0;j=g+12|0;h=g+8|0;l=g;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;b=l;c[b>>2]=e;c[b+4>>2]=f;b=l;b=Zb[c[(c[c[k>>2]>>2]|0)+8>>2]&255](c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;i=g;return b|0}function Xr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+32|0;k=j+16|0;l=j;f=j+12|0;g=j+20|0;h=j+8|0;c[k>>2]=a;a=l;c[a>>2]=b;c[a+4>>2]=d;c[f>>2]=e;e=l;c[h>>2]=Wr(c[k>>2]|0,g,4,c[e>>2]|0,c[e+4>>2]|0)|0;if(c[h>>2]|0){l=c[h>>2]|0;i=j;return l|0}l=$q(g)|0;c[c[f>>2]>>2]=l;l=c[h>>2]|0;i=j;return l|0}function Yr(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;e=h+8|0;f=h+4|0;g=h;c[j>>2]=a;c[e>>2]=b;c[f>>2]=c[(c[j>>2]|0)+52>>2];c[g>>2]=(c[(c[j>>2]|0)+160>>2]|0)-200;while(1){if((c[g>>2]|0)<=0)break;c[f>>2]=(c[f>>2]|0)+(d[(c[e>>2]|0)+(c[g>>2]|0)>>0]|0);c[g>>2]=(c[g>>2]|0)-200}i=h;return c[f>>2]|0}function Zr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=cs(c[(c[e>>2]|0)+212>>2]|0,c[f>>2]|0,0)|0;if(!(c[g>>2]|0)){c[d>>2]=0;b=c[d>>2]|0;i=h;return b|0}else{c[d>>2]=ds(c[(c[e>>2]|0)+212>>2]|0,c[f>>2]|0,c[g>>2]|0)|0;b=c[d>>2]|0;i=h;return b|0}return 0}function _r(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(!(c[e>>2]|0)){i=h;return}bs(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0);i=h;return}function $r(a){a=a|0;var d=0,f=0;f=i;i=i+16|0;d=f;c[d>>2]=a;if(!((e[(c[d>>2]|0)+24>>1]|0)&33)){i=f;return}a=(c[d>>2]|0)+24|0;b[a>>1]=(e[a>>1]|0)&-33;if(!((e[(c[d>>2]|0)+24>>1]|0)&1)){i=f;return}a=(c[d>>2]|0)+24|0;b[a>>1]=(e[a>>1]|0)^3;cj(c[d>>2]|0,2);i=f;return}function as(a){a=a|0;var d=0,f=0,g=0;f=i;i=i+16|0;d=f;c[d>>2]=a;g=(c[(c[d>>2]|0)+28>>2]|0)+12|0;c[g>>2]=(c[g>>2]|0)+-1;g=(c[d>>2]|0)+26|0;a=(b[g>>1]|0)+-1<<16>>16;b[g>>1]=a;if(a<<16>>16){i=f;return}a=c[d>>2]|0;if((e[(c[d>>2]|0)+24>>1]|0)&1){dj(a);i=f;return}if(!(c[a+36>>2]|0)){i=f;return}cj(c[d>>2]|0,3);i=f;return}function bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;do{if(((lg(c[(c[e>>2]|0)+28>>2]|0)|0)==0?(c[f>>2]|0)>>>0<(c[(c[e>>2]|0)+16>>2]|0)>>>0:0)?(c[h>>2]=ug(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0,1)|0,(c[h>>2]|0)!=0):0)c[(c[e>>2]|0)+28>>2]=c[h>>2];a=c[(c[e>>2]|0)+44>>2]|0;c[e>>2]=a}while((a|0)!=0);i=j;return}function cs(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;j=f+12|0;h=f+8|0;k=f+4|0;g=f;c[j>>2]=a;c[h>>2]=b;c[k>>2]=e;c[g>>2]=c[k>>2]&(d[(c[j>>2]|0)+33>>0]|0);b=Ob[c[140>>2]&255](c[(c[j>>2]|0)+44>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;i=f;return b|0}function ds(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+16|0;l=k+12|0;g=k+8|0;h=k+4|0;j=k;c[l>>2]=a;c[g>>2]=d;c[h>>2]=e;c[j>>2]=c[(c[h>>2]|0)+4>>2];a=c[l>>2]|0;if(c[c[j>>2]>>2]|0){l=a+12|0;c[l>>2]=(c[l>>2]|0)+1;l=(c[j>>2]|0)+26|0;b[l>>1]=(b[l>>1]|0)+1<<16>>16;c[f>>2]=c[j>>2];l=c[f>>2]|0;i=k;return l|0}else{c[f>>2]=es(a,c[g>>2]|0,c[h>>2]|0)|0;l=c[f>>2]|0;i=k;return l|0}return 0}function es(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=d;c[h>>2]=e;c[j>>2]=c[(c[h>>2]|0)+4>>2];a=c[j>>2]|0;e=a+40|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(e|0));c[c[j>>2]>>2]=c[h>>2];c[(c[j>>2]|0)+4>>2]=c[c[h>>2]>>2];c[(c[j>>2]|0)+8>>2]=(c[j>>2]|0)+40;kR(c[(c[j>>2]|0)+8>>2]|0,0,c[(c[f>>2]|0)+28>>2]|0)|0;c[(c[j>>2]|0)+28>>2]=c[f>>2];c[(c[j>>2]|0)+20>>2]=c[g>>2];b[(c[j>>2]|0)+24>>1]=1;j=ds(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;i=k;return j|0}function fs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=i;i=i+32|0;b=f+16|0;e=f+8|0;d=f;c[b>>2]=a;h=e;c[h>>2]=0;c[h+4>>2]=0;h=(c[b>>2]|0)+80|0;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=d;if(!((c[a>>2]|0)!=0|(c[a+4>>2]|0)!=0)){g=e;h=g;h=c[h>>2]|0;g=g+4|0;g=c[g>>2]|0;C=g;i=f;return h|0}h=d;h=fR(c[h>>2]|0,c[h+4>>2]|0,1,0)|0;h=pR(h|0,C|0,c[(c[b>>2]|0)+156>>2]|0,0)|0;h=gR(h|0,C|0,1,0)|0;h=rR(h|0,C|0,c[(c[b>>2]|0)+156>>2]|0,0)|0;g=e;c[g>>2]=h;c[g+4>>2]=C;g=e;h=g;h=c[h>>2]|0;g=g+4|0;g=c[g>>2]|0;C=g;i=f;return h|0}function gs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+64|0;e=s+56|0;f=s+52|0;g=s+48|0;q=s+16|0;j=s+8|0;p=s+44|0;o=s+40|0;k=s+36|0;m=s+32|0;h=s+28|0;l=s+24|0;n=s;c[f>>2]=b;c[g>>2]=d;c[p>>2]=0;c[o>>2]=0;if((c[g>>2]|0)!=0?(c[o>>2]=fj(c[(c[g>>2]|0)+20>>2]|0)|0,(c[o>>2]|0)==0):0){c[e>>2]=7;r=c[e>>2]|0;i=s;return r|0}if(c[g>>2]|0)b=c[(c[g>>2]|0)+20>>2]|0;else b=c[(c[f>>2]|0)+32>>2]|0;c[(c[f>>2]|0)+28>>2]=b;a[(c[f>>2]|0)+19>>0]=a[(c[f>>2]|0)+13>>0]|0;if((c[g>>2]|0)==0?(sr(c[f>>2]|0)|0)!=0:0){c[e>>2]=hs(c[f>>2]|0)|0;r=c[e>>2]|0;i=s;return r|0}t=(c[f>>2]|0)+80|0;b=c[t+4>>2]|0;d=q;c[d>>2]=c[t>>2];c[d+4>>2]=b;a:do if((c[g>>2]|0)!=0?(sr(c[f>>2]|0)|0)==0:0){t=(c[g>>2]|0)+8|0;if((c[t>>2]|0)!=0|(c[t+4>>2]|0)!=0){d=(c[g>>2]|0)+8|0;b=c[d>>2]|0;d=c[d+4>>2]|0}else{d=q;b=c[d>>2]|0;d=c[d+4>>2]|0}t=j;c[t>>2]=b;c[t+4>>2]=d;b=c[g>>2]|0;d=c[b+4>>2]|0;t=(c[f>>2]|0)+80|0;c[t>>2]=c[b>>2];c[t+4>>2]=d;while(1){if(c[p>>2]|0)break a;d=(c[f>>2]|0)+80|0;u=c[d+4>>2]|0;t=j;b=c[t+4>>2]|0;if(!((u|0)<(b|0)|((u|0)==(b|0)?(c[d>>2]|0)>>>0<(c[t>>2]|0)>>>0:0)))break a;c[p>>2]=Pr(c[f>>2]|0,(c[f>>2]|0)+80|0,c[o>>2]|0,1,1)|0}}else r=19;while(0);if((r|0)==19){u=(c[f>>2]|0)+80|0;c[u>>2]=0;c[u+4>>2]=0}b:while(1){if(c[p>>2]|0)break;t=(c[f>>2]|0)+80|0;j=c[t+4>>2]|0;u=q;r=c[u+4>>2]|0;if(!((j|0)<(r|0)|((j|0)==(r|0)?(c[t>>2]|0)>>>0<(c[u>>2]|0)>>>0:0)))break;c[m>>2]=0;u=q;c[p>>2]=Or(c[f>>2]|0,0,c[u>>2]|0,c[u+4>>2]|0,m,h)|0;if((c[m>>2]|0)==0?(t=(c[f>>2]|0)+88|0,t=gR(c[t>>2]|0,c[t+4>>2]|0,c[(c[f>>2]|0)+156>>2]|0,0)|0,u=(c[f>>2]|0)+80|0,(t|0)==(c[u>>2]|0)?(C|0)==(c[u+4>>2]|0):0):0){u=q;t=(c[f>>2]|0)+80|0;t=fR(c[u>>2]|0,c[u+4>>2]|0,c[t>>2]|0,c[t+4>>2]|0)|0;u=(c[(c[f>>2]|0)+160>>2]|0)+8|0;u=pR(t|0,C|0,u|0,((u|0)<0)<<31>>31|0)|0;c[m>>2]=u}c[k>>2]=0;while(1){if(c[p>>2]|0)continue b;if((c[k>>2]|0)>>>0>=(c[m>>2]|0)>>>0)continue b;t=(c[f>>2]|0)+80|0;j=c[t+4>>2]|0;u=q;r=c[u+4>>2]|0;if(!((j|0)<(r|0)|((j|0)==(r|0)?(c[t>>2]|0)>>>0<(c[u>>2]|0)>>>0:0)))continue b;c[p>>2]=Pr(c[f>>2]|0,(c[f>>2]|0)+80|0,c[o>>2]|0,1,1)|0;c[k>>2]=(c[k>>2]|0)+1}}c:do if(c[g>>2]|0){t=4+(c[(c[f>>2]|0)+160>>2]|0)|0;t=rR(c[(c[g>>2]|0)+24>>2]|0,0,t|0,((t|0)<0)<<31>>31|0)|0;u=n;c[u>>2]=t;c[u+4>>2]=C;if(sr(c[f>>2]|0)|0)c[p>>2]=is(c[(c[f>>2]|0)+216>>2]|0,(c[g>>2]|0)+28|0)|0;c[l>>2]=c[(c[g>>2]|0)+24>>2];while(1){if(c[p>>2]|0)break c;if((c[l>>2]|0)>>>0>=(c[(c[f>>2]|0)+56>>2]|0)>>>0)break c;c[p>>2]=Pr(c[f>>2]|0,n,c[o>>2]|0,0,1)|0;c[l>>2]=(c[l>>2]|0)+1}}while(0);kj(c[o>>2]|0);if(!(c[p>>2]|0)){r=q;t=c[r+4>>2]|0;u=(c[f>>2]|0)+80|0;c[u>>2]=c[r>>2];c[u+4>>2]=t}c[e>>2]=c[p>>2];u=c[e>>2]|0;i=s;return u|0}function hs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;f=g+8|0;d=g+4|0;e=g;c[b>>2]=a;c[(c[b>>2]|0)+28>>2]=c[(c[b>>2]|0)+32>>2];c[f>>2]=ps(c[(c[b>>2]|0)+216>>2]|0,187,c[b>>2]|0)|0;c[d>>2]=qs(c[(c[b>>2]|0)+212>>2]|0)|0;while(1){if(!((c[d>>2]|0)!=0?(c[f>>2]|0)==0:0))break;c[e>>2]=c[(c[d>>2]|0)+12>>2];c[f>>2]=os(c[b>>2]|0,c[(c[d>>2]|0)+20>>2]|0)|0;c[d>>2]=c[e>>2]}i=g;return c[f>>2]|0}function is(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;if((c[(c[e>>2]|0)+12>>2]|0)!=(c[(c[d>>2]|0)+112>>2]|0)){c[c[e>>2]>>2]=0;c[(c[e>>2]|0)+12>>2]=c[(c[d>>2]|0)+112>>2]}if((c[c[e>>2]>>2]|0)>>>0>=(c[(c[d>>2]|0)+52+16>>2]|0)>>>0){f=c[f>>2]|0;i=g;return f|0}c[(c[d>>2]|0)+52+16>>2]=c[c[e>>2]>>2];c[(c[d>>2]|0)+52+24>>2]=c[(c[e>>2]|0)+4>>2];c[(c[d>>2]|0)+52+24+4>>2]=c[(c[e>>2]|0)+8>>2];js(c[d>>2]|0);f=c[f>>2]|0;i=g;return f|0}function js(a){a=a|0;var d=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;d=m+24|0;f=m+20|0;g=m+16|0;k=m+12|0;j=m+8|0;l=m+4|0;h=m;c[d>>2]=a;c[f>>2]=0;c[g>>2]=0;c[k>>2]=0;c[j>>2]=0;if(!(c[(c[d>>2]|0)+52+16>>2]|0)){i=m;return}a=c[d>>2]|0;ls(a,ks(c[(c[d>>2]|0)+52+16>>2]|0)|0,f,g,k)|0;c[j>>2]=(c[(c[d>>2]|0)+52+16>>2]|0)-(c[k>>2]|0);c[h>>2]=0;while(1){if((c[h>>2]|0)>=8192)break;if((e[(c[f>>2]|0)+(c[h>>2]<<1)>>1]|0|0)>(c[j>>2]|0))b[(c[f>>2]|0)+(c[h>>2]<<1)>>1]=0;c[h>>2]=(c[h>>2]|0)+1}c[l>>2]=(c[f>>2]|0)-((c[g>>2]|0)+((c[j>>2]|0)+1<<2)); +kR((c[g>>2]|0)+((c[j>>2]|0)+1<<2)|0,0,c[l>>2]|0)|0;i=m;return}function ks(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=(((c[e>>2]|0)+4096-4062-1|0)>>>0)/4096|0;i=d;return c[b>>2]|0}function ls(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+48|0;q=p+32|0;g=p+28|0;h=p+24|0;j=p+20|0;k=p+16|0;o=p+12|0;m=p+8|0;n=p+4|0;l=p;c[q>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[o>>2]=ms(c[q>>2]|0,c[g>>2]|0,m)|0;if(c[o>>2]|0){q=c[o>>2]|0;i=p;return q|0}c[l>>2]=(c[m>>2]|0)+16384;if(!(c[g>>2]|0)){c[m>>2]=(c[m>>2]|0)+136;c[n>>2]=0}else c[n>>2]=4062+((c[g>>2]|0)-1<<12);c[c[j>>2]>>2]=(c[m>>2]|0)+-4;c[c[h>>2]>>2]=c[l>>2];c[c[k>>2]>>2]=c[n>>2];q=c[o>>2]|0;i=p;return q|0}function ms(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;j=o+16|0;k=o+12|0;n=o+8|0;m=o+4|0;l=o;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[n>>2]=0;do if((c[(c[h>>2]|0)+24>>2]|0)<=(c[j>>2]|0)){c[m>>2]=(c[j>>2]|0)+1<<2;f=c[m>>2]|0;c[l>>2]=Md(c[(c[h>>2]|0)+32>>2]|0,f,((f|0)<0)<<31>>31)|0;if(c[l>>2]|0){kR((c[l>>2]|0)+(c[(c[h>>2]|0)+24>>2]<<2)|0,0,(c[j>>2]|0)+1-(c[(c[h>>2]|0)+24>>2]|0)<<2|0)|0;c[(c[h>>2]|0)+32>>2]=c[l>>2];c[(c[h>>2]|0)+24>>2]=(c[j>>2]|0)+1;break}c[c[k>>2]>>2]=0;c[g>>2]=7;n=c[g>>2]|0;i=o;return n|0}while(0);do if(!(c[(c[(c[h>>2]|0)+32>>2]|0)+(c[j>>2]<<2)>>2]|0))if((d[(c[h>>2]|0)+43>>0]|0|0)==2){f=ig(32768,0)|0;c[(c[(c[h>>2]|0)+32>>2]|0)+(c[j>>2]<<2)>>2]=f;if(c[(c[(c[h>>2]|0)+32>>2]|0)+(c[j>>2]<<2)>>2]|0)break;c[n>>2]=7;break}else{c[n>>2]=ns(c[(c[h>>2]|0)+4>>2]|0,c[j>>2]|0,32768,d[(c[h>>2]|0)+44>>0]|0,(c[(c[h>>2]|0)+32>>2]|0)+(c[j>>2]<<2)|0)|0;if((c[n>>2]|0)!=8)break;f=(c[h>>2]|0)+46|0;a[f>>0]=d[f>>0]|0|2;c[n>>2]=0;break}while(0);c[c[k>>2]>>2]=c[(c[(c[h>>2]|0)+32>>2]|0)+(c[j>>2]<<2)>>2];c[g>>2]=c[n>>2];n=c[g>>2]|0;i=o;return n|0}function ns(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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;m=g+16|0;l=g+12|0;k=g+8|0;j=g+4|0;h=g;c[m>>2]=a;c[l>>2]=b;c[k>>2]=d;c[j>>2]=e;c[h>>2]=f;f=Zb[c[(c[c[m>>2]>>2]|0)+52>>2]&255](c[m>>2]|0,c[l>>2]|0,c[k>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;i=g;return f|0}function os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;k=h+20|0;j=h+16|0;g=h+12|0;e=h+8|0;f=h+4|0;d=h;c[k>>2]=a;c[j>>2]=b;c[g>>2]=0;c[e>>2]=c[k>>2];c[f>>2]=Zr(c[e>>2]|0,c[j>>2]|0)|0;do if(c[f>>2]|0){if((vs(c[f>>2]|0)|0)==1){ws(c[f>>2]|0);break}c[d>>2]=0;c[g>>2]=xs(c[(c[e>>2]|0)+216>>2]|0,c[(c[f>>2]|0)+20>>2]|0,d)|0;if(!(c[g>>2]|0))c[g>>2]=ys(c[f>>2]|0,c[d>>2]|0)|0;if(!(c[g>>2]|0))Qb[c[(c[e>>2]|0)+204>>2]&255](c[f>>2]|0);zs(c[f>>2]|0)}while(0);_i(c[(c[e>>2]|0)+96>>2]|0);i=h;return c[g>>2]|0}function ps(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;l=m+8|0;k=m+4|0;j=m;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[l>>2]=0;if(!(a[(c[f>>2]|0)+44>>0]|0)){l=c[l>>2]|0;i=m;return l|0}c[k>>2]=c[(c[f>>2]|0)+52+16>>2];e=(c[f>>2]|0)+52|0;b=ts(c[f>>2]|0)|0;d=e+48|0;do{a[e>>0]=a[b>>0]|0;e=e+1|0;b=b+1|0}while((e|0)<(d|0));c[j>>2]=(c[(c[f>>2]|0)+52+16>>2]|0)+1;while(1){if(c[l>>2]|0)break;if((c[j>>2]|0)>>>0>(c[k>>2]|0)>>>0)break;e=c[g>>2]|0;b=c[h>>2]|0;d=us(c[f>>2]|0,c[j>>2]|0)|0;c[l>>2]=Yb[e&255](b,d)|0;c[j>>2]=(c[j>>2]|0)+1}if((c[k>>2]|0)==(c[(c[f>>2]|0)+52+16>>2]|0)){l=c[l>>2]|0;i=m;return l|0}js(c[f>>2]|0);l=c[l>>2]|0;i=m;return l|0}function qs(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=c[c[b>>2]>>2];while(1){if(!(c[d>>2]|0))break;c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+32>>2];c[d>>2]=c[(c[d>>2]|0)+32>>2]}a=rs(c[c[b>>2]>>2]|0)|0;i=e;return a|0}function rs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+144|0;d=j+136|0;f=j+8|0;h=j+4|0;g=j;c[d>>2]=a;a=f;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));while(1){if(!(c[d>>2]|0))break;c[h>>2]=c[d>>2];c[d>>2]=c[(c[h>>2]|0)+12>>2];c[(c[h>>2]|0)+12>>2]=0;c[g>>2]=0;while(1){if((c[g>>2]|0)>=31)break;if(!(c[f+(c[g>>2]<<2)>>2]|0)){e=6;break}c[h>>2]=ss(c[f+(c[g>>2]<<2)>>2]|0,c[h>>2]|0)|0;c[f+(c[g>>2]<<2)>>2]=0;c[g>>2]=(c[g>>2]|0)+1}if((e|0)==6){e=0;c[f+(c[g>>2]<<2)>>2]=c[h>>2]}if((c[g>>2]|0)!=31)continue;b=ss(c[f+(c[g>>2]<<2)>>2]|0,c[h>>2]|0)|0;c[f+(c[g>>2]<<2)>>2]=b}c[h>>2]=c[f>>2];c[g>>2]=1;while(1){a=c[h>>2]|0;if((c[g>>2]|0)>=32)break;c[h>>2]=ss(a,c[f+(c[g>>2]<<2)>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+1}i=j;return a|0}function ss(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+64|0;d=h+52|0;e=h+48|0;g=h+8|0;f=h;c[d>>2]=a;c[e>>2]=b;c[f>>2]=g;while(1){a=c[d>>2]|0;if(!((c[d>>2]|0)!=0?(c[e>>2]|0)!=0:0))break;if((c[a+20>>2]|0)>>>0<(c[(c[e>>2]|0)+20>>2]|0)>>>0){c[(c[f>>2]|0)+12>>2]=c[d>>2];c[f>>2]=c[d>>2];c[d>>2]=c[(c[d>>2]|0)+12>>2];continue}else{c[(c[f>>2]|0)+12>>2]=c[e>>2];c[f>>2]=c[e>>2];c[e>>2]=c[(c[e>>2]|0)+12>>2];continue}}if(a){c[(c[f>>2]|0)+12>>2]=c[d>>2];g=g+12|0;g=c[g>>2]|0;i=h;return g|0}if(c[e>>2]|0){c[(c[f>>2]|0)+12>>2]=c[e>>2];g=g+12|0;g=c[g>>2]|0;i=h;return g|0}else{c[(c[f>>2]|0)+12>>2]=0;g=g+12|0;g=c[g>>2]|0;i=h;return g|0}return 0}function ts(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[c[(c[b>>2]|0)+32>>2]>>2]|0}function us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+12|0;e=g+8|0;h=g+4|0;f=g;c[e>>2]=a;c[h>>2]=b;c[f>>2]=ks(c[h>>2]|0)|0;b=c[h>>2]|0;if(!(c[f>>2]|0)){c[d>>2]=c[(c[c[(c[e>>2]|0)+32>>2]>>2]|0)+(34+b-1<<2)>>2];h=c[d>>2]|0;i=g;return h|0}else{c[d>>2]=c[(c[(c[(c[e>>2]|0)+32>>2]|0)+(c[f>>2]<<2)>>2]|0)+((((b-1-4062|0)>>>0)%4096|0)<<2)>>2];h=c[d>>2]|0;i=g;return h|0}return 0}function vs(a){a=a|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=a;i=e;return b[(c[d>>2]|0)+26>>1]|0}function ws(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if((e[(c[b>>2]|0)+24>>1]|0)&2)cj(c[b>>2]|0,1);a=(c[(c[b>>2]|0)+28>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+-1;Ub[c[144>>2]&255](c[(c[(c[b>>2]|0)+28>>2]|0)+44>>2]|0,c[c[b>>2]>>2]|0,1);i=d;return}function xs(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+64|0;s=w+56|0;g=w+52|0;h=w+48|0;t=w+44|0;u=w+40|0;o=w+36|0;m=w+32|0;p=w+28|0;j=w+24|0;k=w+20|0;q=w+16|0;n=w+12|0;r=w+8|0;v=w+4|0;l=w;c[g>>2]=a;c[h>>2]=d;c[t>>2]=f;c[u>>2]=0;c[o>>2]=c[(c[g>>2]|0)+52+16>>2];if((c[o>>2]|0)!=0?(b[(c[g>>2]|0)+40>>1]|0)!=0:0){c[p>>2]=ks(c[(c[g>>2]|0)+100>>2]|0)|0;c[m>>2]=ks(c[o>>2]|0)|0;a:while(1){if(!((c[m>>2]|0)>=(c[p>>2]|0)?(c[u>>2]|0)==0:0)){g=18;break}c[v>>2]=ls(c[g>>2]|0,c[m>>2]|0,j,k,q)|0;if(c[v>>2]|0){g=7;break}c[r>>2]=8192;c[n>>2]=Es(c[h>>2]|0)|0;while(1){if(!(b[(c[j>>2]|0)+(c[n>>2]<<1)>>1]|0))break;c[l>>2]=(e[(c[j>>2]|0)+(c[n>>2]<<1)>>1]|0)+(c[q>>2]|0);if(((c[l>>2]|0)>>>0<=(c[o>>2]|0)>>>0?(c[l>>2]|0)>>>0>=(c[(c[g>>2]|0)+100>>2]|0)>>>0:0)?(c[(c[k>>2]|0)+(e[(c[j>>2]|0)+(c[n>>2]<<1)>>1]<<2)>>2]|0)==(c[h>>2]|0):0)c[u>>2]=c[l>>2];f=c[r>>2]|0;c[r>>2]=f+-1;if(!f){g=15;break a}c[n>>2]=Fs(c[n>>2]|0)|0}c[m>>2]=(c[m>>2]|0)+-1}if((g|0)==7){c[s>>2]=c[v>>2];v=c[s>>2]|0;i=w;return v|0}else if((g|0)==15){c[s>>2]=Lj(53690)|0;v=c[s>>2]|0;i=w;return v|0}else if((g|0)==18){c[c[t>>2]>>2]=c[u>>2];c[s>>2]=0;v=c[s>>2]|0;i=w;return v|0}}c[c[t>>2]>>2]=0;c[s>>2]=0;v=c[s>>2]|0;i=w;return v|0}function ys(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;e=n+32|0;f=n+28|0;h=n+24|0;j=n+20|0;m=n+16|0;k=n+12|0;g=n;l=n+8|0;c[e>>2]=b;c[f>>2]=d;c[h>>2]=c[(c[e>>2]|0)+16>>2];c[j>>2]=c[(c[e>>2]|0)+20>>2];c[m>>2]=0;c[k>>2]=c[(c[h>>2]|0)+160>>2];if(c[f>>2]|0)c[m>>2]=Ds(c[(c[h>>2]|0)+216>>2]|0,c[f>>2]|0,c[k>>2]|0,c[(c[e>>2]|0)+4>>2]|0)|0;else{d=c[(c[h>>2]|0)+160>>2]|0;d=rR((c[j>>2]|0)-1|0,0,d|0,((d|0)<0)<<31>>31|0)|0;b=g;c[b>>2]=d;c[b+4>>2]=C;b=g;k=Wr(c[(c[h>>2]|0)+64>>2]|0,c[(c[e>>2]|0)+4>>2]|0,c[k>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;c[m>>2]=k;c[m>>2]=(c[m>>2]|0)==522?0:k}if((c[j>>2]|0)!=1){m=c[m>>2]|0;i=n;return m|0}if(c[m>>2]|0){d=(c[h>>2]|0)+112|0;f=d+16|0;do{a[d>>0]=255;d=d+1|0}while((d|0)<(f|0));m=c[m>>2]|0;i=n;return m|0}else{c[l>>2]=(c[(c[e>>2]|0)+4>>2]|0)+24;d=(c[h>>2]|0)+112|0;e=c[l>>2]|0;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));m=c[m>>2]|0;i=n;return m|0}return 0}function zs(a){a=a|0;var b=0,d=0,f=0;d=i;i=i+16|0;f=d+4|0;b=d;c[f>>2]=a;c[b>>2]=c[(c[f>>2]|0)+16>>2];a=c[f>>2]|0;if((e[(c[f>>2]|0)+24>>1]|0)&64){As(a);f=c[b>>2]|0;Bs(f);i=d;return}else{as(a);f=c[b>>2]|0;Bs(f);i=d;return}}function As(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+16|0;d=b+4|0;f=b;c[d>>2]=a;c[f>>2]=c[(c[d>>2]|0)+16>>2];e=(c[f>>2]|0)+128|0;c[e>>2]=(c[e>>2]|0)+-1;c[(c[d>>2]|0)+12>>2]=c[(c[f>>2]|0)+144>>2];c[(c[f>>2]|0)+144>>2]=c[d>>2];e=c[(c[f>>2]|0)+64>>2]|0;a=c[(c[f>>2]|0)+160>>2]|0;a=rR((c[(c[d>>2]|0)+20>>2]|0)-1|0,0,a|0,((a|0)<0)<<31>>31|0)|0;Cs(e,a,C,c[(c[d>>2]|0)+4>>2]|0)|0;i=b;return}function Bs(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(c[(c[b>>2]|0)+128>>2]|0){i=d;return}if(Ri(c[(c[b>>2]|0)+212>>2]|0)|0){i=d;return}gr(c[b>>2]|0);i=d;return}function Cs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=i;i=i+16|0;c[f+12>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[f+8>>2]=e;i=f;return 0}function Ds(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;g=i;i=i+32|0;l=g+24|0;n=g+20|0;h=g+16|0;k=g+12|0;j=g+8|0;m=g;c[l>>2]=a;c[n>>2]=b;c[h>>2]=d;c[k>>2]=f;c[j>>2]=e[(c[l>>2]|0)+52+14>>1];c[j>>2]=(c[j>>2]&65024)+((c[j>>2]&1)<<16);f=(c[j>>2]|0)+24|0;f=rR((c[n>>2]|0)-1|0,0,f|0,((f|0)<0)<<31>>31|0)|0;f=gR(32,0,f|0,C|0)|0;f=gR(f|0,C|0,24,0)|0;a=m;c[a>>2]=f;c[a+4>>2]=C;a=m;a=Wr(c[(c[l>>2]|0)+8>>2]|0,c[k>>2]|0,(c[h>>2]|0)>(c[j>>2]|0)?c[j>>2]|0:c[h>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;i=g;return a|0}function Es(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[b>>2]|0)*383&8191|0}function Fs(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[b>>2]|0)+1&8191|0}function Gs(a){a=a|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=a;tr(c[d>>2]|0)|0;if((b[(c[d>>2]|0)+40>>1]|0)<0){i=e;return}zr(c[d>>2]|0,3+(b[(c[d>>2]|0)+40>>1]|0)|0);b[(c[d>>2]|0)+40>>1]=-1;i=e;return}function Hs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;b=Yb[c[(c[c[f>>2]>>2]|0)+28>>2]&255](c[f>>2]|0,c[e>>2]|0)|0;i=d;return b|0}function Is(b,d,e,f,g,h,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;A=i;i=i+64|0;z=A+52|0;v=A+48|0;w=A+44|0;m=A+40|0;n=A+36|0;o=A+32|0;p=A+28|0;q=A+24|0;r=A+20|0;s=A+16|0;y=A+12|0;t=A+8|0;x=A+4|0;u=A;c[v>>2]=b;c[w>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=j;c[r>>2]=k;c[s>>2]=l;c[t>>2]=0;c[x>>2]=c[w>>2];c[u>>2]=c[m>>2];if(a[(c[v>>2]|0)+46>>0]|0){c[z>>2]=8;z=c[z>>2]|0;i=A;return z|0}c[y>>2]=Ns(c[v>>2]|0,1,1)|0;if(c[y>>2]|0){c[z>>2]=c[y>>2];z=c[z>>2]|0;i=A;return z|0}a[(c[v>>2]|0)+45>>0]=1;do if(c[w>>2]|0){c[y>>2]=Os(c[v>>2]|0,c[m>>2]|0,c[n>>2]|0,0,1)|0;if(!(c[y>>2]|0)){a[(c[v>>2]|0)+44>>0]=1;break}if((c[y>>2]|0)==5){c[x>>2]=0;c[u>>2]=0;c[y>>2]=0}}while(0);if(((c[y>>2]|0)==0?(c[y>>2]=Ps(c[v>>2]|0,t)|0,(c[t>>2]|0)!=0):0)?(c[c[c[(c[v>>2]|0)+4>>2]>>2]>>2]|0)>=3:0)Cs(c[(c[v>>2]|0)+4>>2]|0,0,0,0)|0;if(!(c[y>>2]|0)){if((c[(c[v>>2]|0)+52+16>>2]|0)!=0?(j=Qs(c[v>>2]|0)|0,(j|0)!=(c[p>>2]|0)):0)c[y>>2]=Lj(54390)|0;else c[y>>2]=Rs(c[v>>2]|0,c[x>>2]|0,c[u>>2]|0,c[n>>2]|0,c[o>>2]|0,c[q>>2]|0)|0;if((c[y>>2]|0)==0|(c[y>>2]|0)==5){if(c[r>>2]|0)c[c[r>>2]>>2]=c[(c[v>>2]|0)+52+16>>2];if(c[s>>2]|0){j=c[(Ss(c[v>>2]|0)|0)>>2]|0;c[c[s>>2]>>2]=j}}}if(c[t>>2]|0){m=(c[v>>2]|0)+52|0;n=m+48|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0))}tr(c[v>>2]|0)|0;Br(c[v>>2]|0,1,1);a[(c[v>>2]|0)+45>>0]=0;if((c[y>>2]|0)==0?(c[w>>2]|0)!=(c[x>>2]|0):0)m=5;else m=c[y>>2]|0;c[z>>2]=m;z=c[z>>2]|0;i=A;return z|0}function Js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;Ob[c[(c[c[h>>2]>>2]|0)+40>>2]&255](c[h>>2]|0,c[g>>2]|0,c[f>>2]|0)|0;i=e;return}function Ks(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k+16|0;e=k+24|0;f=k+8|0;h=k;g=k+20|0;c[e>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;Sj();c[g>>2]=Si(c[(c[e>>2]|0)+8>>2]|0,h)|0;if((c[g>>2]|0)==0?(a=h,b=c[a+4>>2]|0,h=f,d=c[h+4>>2]|0,(b|0)>(d|0)|((b|0)==(d|0)?(c[a>>2]|0)>>>0>(c[h>>2]|0)>>>0:0)):0){h=f;c[g>>2]=nr(c[(c[e>>2]|0)+8>>2]|0,c[h>>2]|0,c[h+4>>2]|0)|0}Tj();if(!(c[g>>2]|0)){i=k;return}h=c[g>>2]|0;c[j>>2]=c[(c[e>>2]|0)+108>>2];Rd(h,26766,j);i=k;return}function Ls(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;if((d[(c[e>>2]|0)+43>>0]|0|0)!=2){Ms(c[(c[e>>2]|0)+4>>2]|0,c[f>>2]|0)|0;i=h;return}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[e>>2]|0)+24>>2]|0))break;Kd(c[(c[(c[e>>2]|0)+32>>2]|0)+(c[g>>2]<<2)>>2]|0);c[(c[(c[e>>2]|0)+32>>2]|0)+(c[g>>2]<<2)>>2]=0;c[g>>2]=(c[g>>2]|0)+1}i=h;return}function Ms(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=Yb[c[(c[c[f>>2]>>2]|0)+64>>2]&255](c[f>>2]|0,c[e>>2]|0)|0;i=d;return a|0}function Ns(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if(a[(c[g>>2]|0)+43>>0]|0){c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}else{c[k>>2]=Ar(c[(c[g>>2]|0)+4>>2]|0,c[h>>2]|0,c[j>>2]|0,10)|0;c[f>>2]=c[k>>2];k=c[f>>2]|0;i=l;return k|0}return 0}function Os(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,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;while(1){c[m>>2]=Ns(c[g>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;if(!((c[h>>2]|0)!=0&(c[m>>2]|0)==5)){g=4;break}if(!(Tb[c[h>>2]&255](c[j>>2]|0)|0)){g=4;break}}if((g|0)==4){i=n;return c[m>>2]|0}return 0}function Ps(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;l=m+8|0;j=m+4|0;k=m;c[g>>2]=b;c[h>>2]=e;c[l>>2]=ms(c[g>>2]|0,0,k)|0;if(c[l>>2]|0){c[f>>2]=c[l>>2];l=c[f>>2]|0;i=m;return l|0}if(c[k>>2]|0)e=ct(c[g>>2]|0,c[h>>2]|0)|0;else e=1;c[j>>2]=e;do if(c[j>>2]|0){e=c[g>>2]|0;if((d[(c[g>>2]|0)+46>>0]|0)&2){k=yr(e,0)|0;c[l>>2]=k;if(k)break;zr(c[g>>2]|0,0);c[l>>2]=264;break}b=Ns(e,0,1)|0;c[l>>2]=b;if(!b){a[(c[g>>2]|0)+44>>0]=1;k=ms(c[g>>2]|0,0,k)|0;c[l>>2]=k;if(0==(k|0)?(c[j>>2]=ct(c[g>>2]|0,c[h>>2]|0)|0,(c[j>>2]|0)!=0):0){c[l>>2]=dt(c[g>>2]|0)|0;c[c[h>>2]>>2]=1}a[(c[g>>2]|0)+44>>0]=0;Br(c[g>>2]|0,0,1)}}while(0);if((c[j>>2]|0)==0?(c[(c[g>>2]|0)+52>>2]|0)!=3007e3:0)c[l>>2]=et(53243)|0;c[f>>2]=c[l>>2];l=c[f>>2]|0;i=m;return l|0}function Qs(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return((e[(c[b>>2]|0)+52+14>>1]|0)&65024)+(((e[(c[b>>2]|0)+52+14>>1]|0)&1)<<16)|0}function Rs(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0;H=i;i=i+112|0;h=H+104|0;j=H+100|0;k=H+96|0;l=H+92|0;m=H+88|0;n=H+84|0;o=H+80|0;A=H+76|0;E=H+72|0;z=H+68|0;q=H+64|0;r=H+60|0;u=H+56|0;t=H+52|0;p=H+48|0;y=H+44|0;F=H+40|0;x=H+24|0;v=H+36|0;w=H+16|0;s=H+8|0;D=H;B=H+32|0;c[j>>2]=a;c[k>>2]=b;c[l>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[A>>2]=0;c[z>>2]=0;c[q>>2]=0;c[r>>2]=0;c[E>>2]=Qs(c[j>>2]|0)|0;c[y>>2]=Ss(c[j>>2]|0)|0;a:do if((c[c[y>>2]>>2]|0)>>>0<(c[(c[j>>2]|0)+52+16>>2]|0)>>>0){c[A>>2]=Ts(c[j>>2]|0,z)|0;if(c[A>>2]|0){c[h>>2]=c[A>>2];G=c[h>>2]|0;i=H;return G|0}c[u>>2]=c[(c[j>>2]|0)+52+16>>2];c[t>>2]=c[(c[j>>2]|0)+52+20>>2];c[p>>2]=1;while(1){if((c[p>>2]|0)>=5)break;c[F>>2]=c[(c[y>>2]|0)+4+(c[p>>2]<<2)>>2];do if((c[u>>2]|0)>>>0>(c[F>>2]|0)>>>0){c[A>>2]=Os(c[j>>2]|0,c[l>>2]|0,c[m>>2]|0,3+(c[p>>2]|0)|0,1)|0;if(!(c[A>>2]|0)){c[(c[y>>2]|0)+4+(c[p>>2]<<2)>>2]=(c[p>>2]|0)==1?c[u>>2]|0:-1;Br(c[j>>2]|0,3+(c[p>>2]|0)|0,1);break}if((c[A>>2]|0)!=5)break a;c[u>>2]=c[F>>2];c[l>>2]=0}while(0);c[p>>2]=(c[p>>2]|0)+1}if((c[c[y>>2]>>2]|0)>>>0<(c[u>>2]|0)>>>0?(G=Os(c[j>>2]|0,c[l>>2]|0,c[m>>2]|0,3,1)|0,c[A>>2]=G,(G|0)==0):0){c[v>>2]=c[c[y>>2]>>2];c[(c[y>>2]|0)+32>>2]=c[u>>2];if(c[n>>2]|0)c[A>>2]=or(c[(c[j>>2]|0)+8>>2]|0,c[n>>2]|0)|0;if(((c[A>>2]|0)==0?(g=c[E>>2]|0,g=rR(c[t>>2]|0,0,g|0,((g|0)<0)<<31>>31|0)|0,G=w,c[G>>2]=g,c[G+4>>2]=C,c[A>>2]=Si(c[(c[j>>2]|0)+4>>2]|0,x)|0,(c[A>>2]|0)==0):0)?(g=x,d=c[g+4>>2]|0,G=w,F=c[G+4>>2]|0,(d|0)<(F|0)|((d|0)==(F|0)?(c[g>>2]|0)>>>0<(c[G>>2]|0)>>>0:0)):0)Js(c[(c[j>>2]|0)+4>>2]|0,5,w);b:while(1){if(c[A>>2]|0)break;while(1){if(Us(c[z>>2]|0,q,r)|0)break b;if((c[r>>2]|0)>>>0<=(c[v>>2]|0)>>>0)continue b;if((c[r>>2]|0)>>>0>(c[u>>2]|0)>>>0)continue b;if((c[q>>2]|0)>>>0>(c[t>>2]|0)>>>0)continue b;g=(c[E>>2]|0)+24|0;g=rR((c[r>>2]|0)-1|0,0,g|0,((g|0)<0)<<31>>31|0)|0;g=gR(32,0,g|0,C|0)|0;g=gR(g|0,C|0,24,0)|0;G=s;c[G>>2]=g;c[G+4>>2]=C;G=s;c[A>>2]=Wr(c[(c[j>>2]|0)+8>>2]|0,c[o>>2]|0,c[E>>2]|0,c[G>>2]|0,c[G+4>>2]|0)|0;if(c[A>>2]|0)break b;g=c[E>>2]|0;g=rR((c[q>>2]|0)-1|0,0,g|0,((g|0)<0)<<31>>31|0)|0;G=s;c[G>>2]=g;c[G+4>>2]=C;G=s;c[A>>2]=Fg(c[(c[j>>2]|0)+4>>2]|0,c[o>>2]|0,c[E>>2]|0,c[G>>2]|0,c[G+4>>2]|0)|0;if(!((c[A>>2]|0)==0&(c[A>>2]|0)==0))break b}}if(!(c[A>>2]|0)){G=c[u>>2]|0;if((G|0)==(c[(ts(c[j>>2]|0)|0)+16>>2]|0)?(g=c[E>>2]|0,g=rR(c[(c[j>>2]|0)+52+20>>2]|0,0,g|0,((g|0)<0)<<31>>31|0)|0,G=D,c[G>>2]=g,c[G+4>>2]=C,G=D,c[A>>2]=nr(c[(c[j>>2]|0)+4>>2]|0,c[G>>2]|0,c[G+4>>2]|0)|0,(c[A>>2]|0)==0&(c[n>>2]|0)!=0):0)c[A>>2]=or(c[(c[j>>2]|0)+4>>2]|0,c[n>>2]|0)|0;if(!(c[A>>2]|0))c[c[y>>2]>>2]=c[u>>2]}Br(c[j>>2]|0,3,1)}if((c[A>>2]|0)==5){c[A>>2]=0;G=36}else G=36}else G=36;while(0);do if((G|0)==36?(c[A>>2]|0)==0&(c[k>>2]|0)!=0:0){if((c[c[y>>2]>>2]|0)>>>0<(c[(c[j>>2]|0)+52+16>>2]|0)>>>0){c[A>>2]=5;break}if((c[k>>2]|0)>=2?(Sd(4,B),c[A>>2]=Os(c[j>>2]|0,c[l>>2]|0,c[m>>2]|0,4,4)|0,(c[A>>2]|0)==0):0){if((c[k>>2]|0)==3){Vs(c[j>>2]|0,c[B>>2]|0);c[A>>2]=nr(c[(c[j>>2]|0)+8>>2]|0,0,0)|0}Br(c[j>>2]|0,4,4)}}while(0);Ws(c[z>>2]|0);c[h>>2]=c[A>>2];G=c[h>>2]|0;i=H;return G|0}function Ss(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[c[(c[b>>2]|0)+32>>2]>>2]|0)+96|0}function Ts(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+64|0;e=v+60|0;f=v+56|0;g=v+52|0;t=v+48|0;s=v+44|0;n=v+40|0;q=v+36|0;m=v+32|0;l=v+28|0;u=v+24|0;h=v+20|0;o=v+16|0;k=v+12|0;p=v+8|0;r=v+4|0;j=v;c[f>>2]=a;c[g>>2]=d;c[u>>2]=0;c[n>>2]=c[(c[f>>2]|0)+52+16>>2];c[s>>2]=(ks(c[n>>2]|0)|0)+1;c[q>>2]=28+(((c[s>>2]|0)-1|0)*20|0)+(c[n>>2]<<1);d=c[q>>2]|0;c[t>>2]=Jd(d,((d|0)<0)<<31>>31)|0;if(!(c[t>>2]|0)){c[e>>2]=7;u=c[e>>2]|0;i=v;return u|0}kR(c[t>>2]|0,0,c[q>>2]|0)|0;c[(c[t>>2]|0)+4>>2]=c[s>>2];c[l>>2]=Jd(((c[n>>2]|0)>>>0>4096?4096:c[n>>2]|0)<<1,0)|0;if(!(c[l>>2]|0))c[u>>2]=7;c[m>>2]=0;while(1){if(c[u>>2]|0)break;if((c[m>>2]|0)>=(c[s>>2]|0))break;c[u>>2]=ls(c[f>>2]|0,c[m>>2]|0,h,k,o)|0;if(!(c[u>>2]|0)){c[k>>2]=(c[k>>2]|0)+4;if(((c[m>>2]|0)+1|0)==(c[s>>2]|0))c[r>>2]=(c[n>>2]|0)-(c[o>>2]|0);else c[r>>2]=((c[h>>2]|0)-(c[k>>2]|0)|0)/4|0;c[j>>2]=(c[t>>2]|0)+8+((c[(c[t>>2]|0)+4>>2]|0)*20|0)+(c[o>>2]<<1);c[o>>2]=(c[o>>2]|0)+1;c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[r>>2]|0))break;b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=c[p>>2];c[p>>2]=(c[p>>2]|0)+1}at(c[k>>2]|0,c[l>>2]|0,c[j>>2]|0,r);c[(c[t>>2]|0)+8+((c[m>>2]|0)*20|0)+16>>2]=c[o>>2];c[(c[t>>2]|0)+8+((c[m>>2]|0)*20|0)+12>>2]=c[r>>2];c[(c[t>>2]|0)+8+((c[m>>2]|0)*20|0)+4>>2]=c[j>>2];c[(c[t>>2]|0)+8+((c[m>>2]|0)*20|0)+8>>2]=c[k>>2]}c[m>>2]=(c[m>>2]|0)+1}Kd(c[l>>2]|0);if(c[u>>2]|0)Ws(c[t>>2]|0);c[c[g>>2]>>2]=c[t>>2];c[e>>2]=c[u>>2];u=c[e>>2]|0;i=v;return u|0}function Us(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p+28|0;g=p+24|0;h=p+20|0;k=p+16|0;m=p+12|0;j=p+8|0;n=p+4|0;l=p;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[m>>2]=-1;c[k>>2]=c[c[f>>2]>>2];c[j>>2]=(c[(c[f>>2]|0)+4>>2]|0)-1;while(1){if((c[j>>2]|0)<0)break;c[n>>2]=(c[f>>2]|0)+8+((c[j>>2]|0)*20|0);while(1){if((c[c[n>>2]>>2]|0)>=(c[(c[n>>2]|0)+12>>2]|0))break;c[l>>2]=c[(c[(c[n>>2]|0)+8>>2]|0)+((e[(c[(c[n>>2]|0)+4>>2]|0)+(c[c[n>>2]>>2]<<1)>>1]|0)<<2)>>2];if((c[l>>2]|0)>>>0>(c[k>>2]|0)>>>0){o=6;break}b=c[n>>2]|0;c[b>>2]=(c[b>>2]|0)+1}if((o|0)==6?(o=0,(c[l>>2]|0)>>>0<(c[m>>2]|0)>>>0):0){c[m>>2]=c[l>>2];c[c[h>>2]>>2]=(c[(c[n>>2]|0)+16>>2]|0)+(e[(c[(c[n>>2]|0)+4>>2]|0)+(c[c[n>>2]>>2]<<1)>>1]|0)}c[j>>2]=(c[j>>2]|0)+-1}o=c[m>>2]|0;c[c[f>>2]>>2]=o;c[c[g>>2]>>2]=o;i=p;return(c[m>>2]|0)==-1|0}function Vs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;f=i;i=i+32|0;g=f+16|0;h=f+12|0;e=f+8|0;d=f+4|0;j=f;c[g>>2]=a;c[h>>2]=b;c[e>>2]=Ss(c[g>>2]|0)|0;c[j>>2]=(c[g>>2]|0)+52+32;b=(c[g>>2]|0)+112|0;c[b>>2]=(c[b>>2]|0)+1;c[(c[g>>2]|0)+52+16>>2]=0;b=c[j>>2]|0;Xs(b,1+($q(c[j>>2]|0)|0)|0);c[(c[g>>2]|0)+52+32+4>>2]=c[h>>2];Ys(c[g>>2]|0);c[c[e>>2]>>2]=0;c[(c[e>>2]|0)+32>>2]=0;c[(c[e>>2]|0)+4+4>>2]=0;c[d>>2]=2;while(1){if((c[d>>2]|0)>=5)break;c[(c[e>>2]|0)+4+(c[d>>2]<<2)>>2]=-1;c[d>>2]=(c[d>>2]|0)+1}i=f;return}function Ws(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Kd(c[d>>2]|0);i=b;return}function Xs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;a[c[f>>2]>>0]=(c[g>>2]|0)>>>24;a[(c[f>>2]|0)+1>>0]=(c[g>>2]|0)>>>16;a[(c[f>>2]|0)+2>>0]=(c[g>>2]|0)>>>8;a[(c[f>>2]|0)+3>>0]=c[g>>2];i=e;return}function Ys(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h+8|0;g=h+4|0;c[f>>2]=b;c[g>>2]=ts(c[f>>2]|0)|0;c[h>>2]=40;a[(c[f>>2]|0)+52+12>>0]=1;c[(c[f>>2]|0)+52>>2]=3007e3;Zs(1,(c[f>>2]|0)+52|0,40,0,(c[f>>2]|0)+52+40|0);b=(c[g>>2]|0)+48|0;d=(c[f>>2]|0)+52|0;e=b+48|0;do{a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}while((b|0)<(e|0));_s(c[f>>2]|0);b=c[g>>2]|0;d=(c[f>>2]|0)+52|0;e=b+48|0;do{a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}while((b|0)<(e|0));i=h;return}function Zs(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=i;i=i+48|0;g=o+32|0;q=o+28|0;p=o+24|0;h=o+20|0;j=o+16|0;m=o+12|0;n=o+8|0;k=o+4|0;l=o;c[g>>2]=a;c[q>>2]=b;c[p>>2]=d;c[h>>2]=e;c[j>>2]=f;c[k>>2]=c[q>>2];c[l>>2]=(c[q>>2]|0)+(c[p>>2]|0);if(c[h>>2]|0){c[m>>2]=c[c[h>>2]>>2];c[n>>2]=c[(c[h>>2]|0)+4>>2]}else{c[n>>2]=0;c[m>>2]=0}if(c[g>>2]|0){do{q=c[k>>2]|0;c[k>>2]=q+4;c[m>>2]=(c[m>>2]|0)+((c[q>>2]|0)+(c[n>>2]|0));q=c[k>>2]|0;c[k>>2]=q+4;c[n>>2]=(c[n>>2]|0)+((c[q>>2]|0)+(c[m>>2]|0))}while((c[k>>2]|0)>>>0<(c[l>>2]|0)>>>0);q=c[m>>2]|0;p=c[j>>2]|0;c[p>>2]=q;p=c[n>>2]|0;q=c[j>>2]|0;q=q+4|0;c[q>>2]=p;i=o;return}else{do{c[m>>2]=(c[m>>2]|0)+(((c[c[k>>2]>>2]&255)<<24)+((c[c[k>>2]>>2]&65280)<<8)+((c[c[k>>2]>>2]&16711680)>>>8)+((c[c[k>>2]>>2]&-16777216)>>>24)+(c[n>>2]|0));c[n>>2]=(c[n>>2]|0)+(((c[(c[k>>2]|0)+4>>2]&255)<<24)+((c[(c[k>>2]|0)+4>>2]&65280)<<8)+((c[(c[k>>2]|0)+4>>2]&16711680)>>>8)+((c[(c[k>>2]|0)+4>>2]&-16777216)>>>24)+(c[m>>2]|0));c[k>>2]=(c[k>>2]|0)+8}while((c[k>>2]|0)>>>0<(c[l>>2]|0)>>>0);q=c[m>>2]|0;p=c[j>>2]|0;c[p>>2]=q;p=c[n>>2]|0;q=c[j>>2]|0;q=q+4|0;c[q>>2]=p;i=o;return}}function _s(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;if((d[(c[b>>2]|0)+43>>0]|0|0)==2){i=e;return}$s(c[(c[b>>2]|0)+4>>2]|0);i=e;return}function $s(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Qb[c[(c[c[d>>2]>>2]|0)+60>>2]&255](c[d>>2]|0);i=b;return}function at(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+160|0;f=s+144|0;g=s+140|0;h=s+136|0;j=s+132|0;o=s+128|0;p=s+124|0;k=s+120|0;m=s+116|0;n=s+112|0;l=s+8|0;q=s+4|0;r=s;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[o>>2]=c[c[j>>2]>>2];c[p>>2]=0;c[k>>2]=0;c[n>>2]=0;b=l;a=b+104|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[o>>2]|0))break;c[p>>2]=1;c[k>>2]=(c[h>>2]|0)+(c[m>>2]<<1);c[n>>2]=0;while(1){if(!(c[m>>2]&1<>2]))break;c[q>>2]=l+(c[n>>2]<<3);bt(c[f>>2]|0,c[(c[q>>2]|0)+4>>2]|0,c[c[q>>2]>>2]|0,k,p,c[g>>2]|0);c[n>>2]=(c[n>>2]|0)+1}c[l+(c[n>>2]<<3)+4>>2]=c[k>>2];c[l+(c[n>>2]<<3)>>2]=c[p>>2];c[m>>2]=(c[m>>2]|0)+1}c[n>>2]=(c[n>>2]|0)+1;while(1){if((c[n>>2]|0)>>>0>=13)break;if(c[o>>2]&1<>2]){c[r>>2]=l+(c[n>>2]<<3);bt(c[f>>2]|0,c[(c[r>>2]|0)+4>>2]|0,c[c[r>>2]>>2]|0,k,p,c[g>>2]|0)}c[n>>2]=(c[n>>2]|0)+1}c[c[j>>2]>>2]=c[p>>2];i=s;return}function bt(a,d,f,g,h,j){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+64|0;k=y+44|0;l=y+40|0;m=y+36|0;n=y+32|0;o=y+28|0;p=y+24|0;s=y+20|0;u=y+16|0;t=y+12|0;w=y+8|0;q=y+4|0;v=y+48|0;r=y;c[k>>2]=a;c[l>>2]=d;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;c[s>>2]=0;c[u>>2]=0;c[t>>2]=0;c[w>>2]=c[c[o>>2]>>2];c[q>>2]=c[c[n>>2]>>2];while(1){if((c[u>>2]|0)>=(c[w>>2]|0)?(c[s>>2]|0)>=(c[m>>2]|0):0)break;do if((c[s>>2]|0)<(c[m>>2]|0)){if((c[u>>2]|0)<(c[w>>2]|0)?(c[(c[k>>2]|0)+((e[(c[l>>2]|0)+(c[s>>2]<<1)>>1]|0)<<2)>>2]|0)>>>0>=(c[(c[k>>2]|0)+((e[(c[q>>2]|0)+(c[u>>2]<<1)>>1]|0)<<2)>>2]|0)>>>0:0){x=8;break}h=c[s>>2]|0;c[s>>2]=h+1;b[v>>1]=b[(c[l>>2]|0)+(h<<1)>>1]|0}else x=8;while(0);if((x|0)==8){x=0;h=c[u>>2]|0;c[u>>2]=h+1;b[v>>1]=b[(c[q>>2]|0)+(h<<1)>>1]|0}c[r>>2]=c[(c[k>>2]|0)+((e[v>>1]|0)<<2)>>2];g=b[v>>1]|0;h=c[t>>2]|0;c[t>>2]=h+1;b[(c[p>>2]|0)+(h<<1)>>1]=g;if((c[s>>2]|0)>=(c[m>>2]|0))continue;if((c[(c[k>>2]|0)+((e[(c[l>>2]|0)+(c[s>>2]<<1)>>1]|0)<<2)>>2]|0)!=(c[r>>2]|0))continue;c[s>>2]=(c[s>>2]|0)+1}c[c[n>>2]>>2]=c[l>>2];c[c[o>>2]>>2]=c[t>>2];iR(c[l>>2]|0,c[p>>2]|0,c[t>>2]<<1|0)|0;i=y;return}function ct(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+128|0;h=p+120|0;j=p+116|0;k=p+112|0;l=p+104|0;n=p+56|0;o=p+8|0;m=p;c[j>>2]=b;c[k>>2]=f;c[m>>2]=ts(c[j>>2]|0)|0;f=n;b=c[m>>2]|0;g=f+48|0;do{a[f>>0]=a[b>>0]|0;f=f+1|0;b=b+1|0}while((f|0)<(g|0));_s(c[j>>2]|0);f=o;b=(c[m>>2]|0)+48|0;g=f+48|0;do{a[f>>0]=a[b>>0]|0;f=f+1|0;b=b+1|0}while((f|0)<(g|0));if(vQ(n,o,48)|0){c[h>>2]=1;o=c[h>>2]|0;i=p;return o|0}if(!(d[n+12>>0]|0)){c[h>>2]=1;o=c[h>>2]|0;i=p;return o|0}Zs(1,n,40,0,l);if((c[l>>2]|0)==(c[n+40>>2]|0)?(c[l+4>>2]|0)==(c[n+40+4>>2]|0):0){if(vQ((c[j>>2]|0)+52|0,n,48)|0){c[c[k>>2]>>2]=1;f=(c[j>>2]|0)+52|0;b=n;g=f+48|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0}while((f|0)<(g|0));c[(c[j>>2]|0)+36>>2]=((e[(c[j>>2]|0)+52+14>>1]|0)&65024)+(((e[(c[j>>2]|0)+52+14>>1]|0)&1)<<16)}c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}c[h>>2]=1;o=c[h>>2]|0;i=p;return o|0}function dt(e){e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0;E=i;i=i+144|0;B=E+16|0;g=E+96|0;h=E+92|0;y=E+88|0;u=E+8|0;m=E+80|0;p=E+76|0;t=E+72|0;j=E+104|0;l=E+68|0;z=E+64|0;k=E+60|0;o=E+56|0;q=E;A=E+52|0;s=E+48|0;D=E+44|0;r=E+40|0;x=E+36|0;v=E+32|0;w=E+28|0;n=E+24|0;c[h>>2]=e;c[m>>2]=0;c[m+4>>2]=0;c[p>>2]=1+(d[(c[h>>2]|0)+45>>0]|0);c[t>>2]=8-(c[p>>2]|0);c[y>>2]=Ns(c[h>>2]|0,c[p>>2]|0,c[t>>2]|0)|0;if(c[y>>2]|0){c[g>>2]=c[y>>2];D=c[g>>2]|0;i=E;return D|0}e=(c[h>>2]|0)+52|0;f=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));c[y>>2]=Si(c[(c[h>>2]|0)+8>>2]|0,u)|0;a:do if(!(c[y>>2]|0)){f=u;e=c[f+4>>2]|0;do if((e|0)>0|(e|0)==0&(c[f>>2]|0)>>>0>32){c[l>>2]=0;c[y>>2]=Wr(c[(c[h>>2]|0)+8>>2]|0,j,32,0,0)|0;if(c[y>>2]|0)break a;c[s>>2]=$q(j)|0;c[A>>2]=$q(j+8|0)|0;if((((c[s>>2]&-2|0)==931071618?!(((c[A>>2]|0)>65536?1:(c[A>>2]&(c[A>>2]|0)-1|0)!=0)|(c[A>>2]|0)<512):0)?(a[(c[h>>2]|0)+52+13>>0]=c[s>>2]&1,c[(c[h>>2]|0)+36>>2]=c[A>>2],s=$q(j+12|0)|0,c[(c[h>>2]|0)+112>>2]=s,s=(c[h>>2]|0)+52+32|0,f=j+16|0,a[s>>0]=a[f>>0]|0,a[s+1>>0]=a[f+1>>0]|0,a[s+2>>0]=a[f+2>>0]|0,a[s+3>>0]=a[f+3>>0]|0,a[s+4>>0]=a[f+4>>0]|0,a[s+5>>0]=a[f+5>>0]|0,a[s+6>>0]=a[f+6>>0]|0,a[s+7>>0]=a[f+7>>0]|0,Zs((d[(c[h>>2]|0)+52+13>>0]|0)==((a[960]|0)==0|0)&1,j,24,0,(c[h>>2]|0)+52+24|0),s=c[(c[h>>2]|0)+52+24>>2]|0,(s|0)==($q(j+24|0)|0)):0)?(s=c[(c[h>>2]|0)+52+24+4>>2]|0,(s|0)==($q(j+28|0)|0)):0){c[D>>2]=$q(j+4|0)|0;if((c[D>>2]|0)!=3007e3){c[y>>2]=et(52297)|0;break}c[z>>2]=(c[A>>2]|0)+24;D=c[z>>2]|0;c[l>>2]=Jd(D,((D|0)<0)<<31>>31)|0;if(!(c[l>>2]|0)){c[y>>2]=7;break a}c[k>>2]=(c[l>>2]|0)+24;c[o>>2]=0;D=q;c[D>>2]=32;c[D+4>>2]=0;while(1){f=q;s=c[z>>2]|0;s=gR(c[f>>2]|0,c[f+4>>2]|0,s|0,((s|0)<0)<<31>>31|0)|0;f=C;D=u;j=c[D+4>>2]|0;if(!((f|0)<(j|0)|((f|0)==(j|0)?s>>>0<=(c[D>>2]|0)>>>0:0)))break;c[o>>2]=(c[o>>2]|0)+1;D=q;c[y>>2]=Wr(c[(c[h>>2]|0)+8>>2]|0,c[l>>2]|0,c[z>>2]|0,c[D>>2]|0,c[D+4>>2]|0)|0;if(c[y>>2]|0)break;c[r>>2]=ft(c[h>>2]|0,x,v,c[k>>2]|0,c[l>>2]|0)|0;if(!(c[r>>2]|0))break;c[y>>2]=gt(c[h>>2]|0,c[o>>2]|0,c[x>>2]|0)|0;if(c[y>>2]|0)break;if(c[v>>2]|0){c[(c[h>>2]|0)+52+16>>2]=c[o>>2];c[(c[h>>2]|0)+52+20>>2]=c[v>>2];b[(c[h>>2]|0)+52+14>>1]=c[A>>2]&65280|c[A>>2]>>16;c[m>>2]=c[(c[h>>2]|0)+52+24>>2];c[m+4>>2]=c[(c[h>>2]|0)+52+24+4>>2]}s=c[z>>2]|0;D=q;s=gR(c[D>>2]|0,c[D+4>>2]|0,s|0,((s|0)<0)<<31>>31|0)|0;D=q;c[D>>2]=s;c[D+4>>2]=C}Kd(c[l>>2]|0)}}while(0);if(!(c[y>>2]|0)){c[(c[h>>2]|0)+52+24>>2]=c[m>>2];c[(c[h>>2]|0)+52+24+4>>2]=c[m+4>>2];Ys(c[h>>2]|0);c[w>>2]=Ss(c[h>>2]|0)|0;c[c[w>>2]>>2]=0;c[(c[w>>2]|0)+32>>2]=c[(c[h>>2]|0)+52+16>>2];c[(c[w>>2]|0)+4>>2]=0;c[n>>2]=1;while(1){if((c[n>>2]|0)>=5)break;c[(c[w>>2]|0)+4+(c[n>>2]<<2)>>2]=-1;c[n>>2]=(c[n>>2]|0)+1}if(c[(c[h>>2]|0)+52+16>>2]|0)c[(c[w>>2]|0)+4+4>>2]=c[(c[h>>2]|0)+52+16>>2];if(c[(c[h>>2]|0)+52+20>>2]|0){D=c[(c[h>>2]|0)+108>>2]|0;c[B>>2]=c[(c[h>>2]|0)+52+16>>2];c[B+4>>2]=D;Rd(283,26831,B)}}}while(0);Br(c[h>>2]|0,c[p>>2]|0,c[t>>2]|0);c[g>>2]=c[y>>2];D=c[g>>2]|0;i=E;return D|0}function et(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b;e=b+8|0;c[e>>2]=a;e=c[e>>2]|0;a=(kf()|0)+20|0;c[d>>2]=e;c[d+4>>2]=a;Rd(14,26792,d);i=b;return 14}function ft(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;j=s+32|0;k=s+28|0;l=s+24|0;m=s+20|0;n=s+16|0;o=s+12|0;q=s+8|0;p=s+4|0;r=s;c[k>>2]=b;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=(c[k>>2]|0)+52+24;if(vQ((c[k>>2]|0)+52+32|0,(c[o>>2]|0)+8|0,8)|0){c[j>>2]=0;f=c[j>>2]|0;i=s;return f|0}c[r>>2]=$q(c[o>>2]|0)|0;if(!(c[r>>2]|0)){c[j>>2]=0;f=c[j>>2]|0;i=s;return f|0}c[q>>2]=(d[(c[k>>2]|0)+52+13>>0]|0)==((a[960]|0)==0|0)&1;Zs(c[q>>2]|0,c[o>>2]|0,8,c[p>>2]|0,c[p>>2]|0);Zs(c[q>>2]|0,c[n>>2]|0,c[(c[k>>2]|0)+36>>2]|0,c[p>>2]|0,c[p>>2]|0);f=c[c[p>>2]>>2]|0;if((f|0)==($q((c[o>>2]|0)+16|0)|0)?(f=c[(c[p>>2]|0)+4>>2]|0,(f|0)==($q((c[o>>2]|0)+20|0)|0)):0){c[c[l>>2]>>2]=c[r>>2];f=$q((c[o>>2]|0)+4|0)|0;c[c[m>>2]>>2]=f;c[j>>2]=1;f=c[j>>2]|0;i=s;return f|0}c[j>>2]=0;f=c[j>>2]|0;i=s;return f|0}function gt(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;f=t+44|0;g=t+40|0;h=t+36|0;j=t+32|0;r=t+28|0;n=t+24|0;l=t+20|0;k=t+16|0;m=t+12|0;o=t+8|0;q=t+4|0;p=t;c[g>>2]=a;c[h>>2]=d;c[j>>2]=e;c[n>>2]=0;c[l>>2]=0;c[k>>2]=0;a=c[g>>2]|0;c[r>>2]=ls(a,ks(c[h>>2]|0)|0,k,l,n)|0;do if(!(c[r>>2]|0)){c[o>>2]=(c[h>>2]|0)-(c[n>>2]|0);if((c[o>>2]|0)==1){c[p>>2]=(c[k>>2]|0)+16384-((c[l>>2]|0)+4);kR((c[l>>2]|0)+4|0,0,c[p>>2]|0)|0}if(c[(c[l>>2]|0)+(c[o>>2]<<2)>>2]|0)js(c[g>>2]|0);c[q>>2]=c[o>>2];c[m>>2]=Es(c[j>>2]|0)|0;while(1){if(!(b[(c[k>>2]|0)+(c[m>>2]<<1)>>1]|0)){s=11;break}a=c[q>>2]|0;c[q>>2]=a+-1;if(!a)break;c[m>>2]=Fs(c[m>>2]|0)|0}if((s|0)==11){c[(c[l>>2]|0)+(c[o>>2]<<2)>>2]=c[j>>2];b[(c[k>>2]|0)+(c[m>>2]<<1)>>1]=c[o>>2];break}c[f>>2]=Lj(52166)|0;s=c[f>>2]|0;i=t;return s|0}while(0);c[f>>2]=c[r>>2];s=c[f>>2]|0;i=t;return s|0}function ht(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;d=f+8|0;b=f+4|0;e=f;c[b>>2]=a;if(((c[b>>2]|0)!=0?(c[c[b>>2]>>2]|0)!=0:0)?(c[(c[b>>2]|0)+8>>2]|0)>=0:0){c[e>>2]=Yb[c[c[b>>2]>>2]&255](c[(c[b>>2]|0)+4>>2]|0,c[(c[b>>2]|0)+8>>2]|0)|0;b=(c[b>>2]|0)+8|0;if(!(c[e>>2]|0))c[b>>2]=-1;else c[b>>2]=(c[b>>2]|0)+1;c[d>>2]=c[e>>2];e=c[d>>2]|0;i=f;return e|0}c[d>>2]=0;e=c[d>>2]|0;i=f;return e|0}function it(){return 48}function jt(a,b){a=a|0;b=b|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+16|0;l=k+12|0;g=k+8|0;h=k+4|0;j=k;c[l>>2]=a;c[g>>2]=b;c[h>>2]=c[l>>2];c[j>>2]=0;if(c[(c[h>>2]|0)+44>>2]|0){c[f>>2]=0;l=c[f>>2]|0;i=k;return l|0}do if(d[(c[h>>2]|0)+21>>0]|0){if(((d[(c[h>>2]|0)+21>>0]|0)&3|0)==0?((e[(c[g>>2]|0)+24>>1]|0)&8|0)==0:0)break;c[f>>2]=0;l=c[f>>2]|0;i=k;return l|0}while(0);c[(c[g>>2]|0)+12>>2]=0;l=(sr(c[h>>2]|0)|0)!=0;a=c[g>>2]|0;if(l){c[j>>2]=lt(a)|0;if(!(c[j>>2]|0))c[j>>2]=mt(c[h>>2]|0,c[g>>2]|0,0,0)|0}else{if(!(((e[a+24>>1]|0)&8|0)==0?(d[(c[h>>2]|0)+17>>0]|0|0)!=3:0))c[j>>2]=nt(c[h>>2]|0,1)|0;if(!(c[j>>2]|0))c[j>>2]=ot(c[h>>2]|0,c[g>>2]|0)|0}if(!(c[j>>2]|0))bj(c[g>>2]|0);c[f>>2]=fr(c[h>>2]|0,c[j>>2]|0)|0;l=c[f>>2]|0;i=k;return l|0}function kt(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;n=p+4|0;o=p;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;e=c[o>>2]|0;h=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));c[(c[o>>2]|0)+24>>2]=1;c[(c[o>>2]|0)+28>>2]=c[k>>2];a[(c[o>>2]|0)+32>>0]=c[l>>2];a[(c[o>>2]|0)+33>>0]=2;c[(c[o>>2]|0)+36>>2]=c[m>>2];c[(c[o>>2]|0)+40>>2]=c[n>>2];c[(c[o>>2]|0)+16>>2]=100;c[(c[o>>2]|0)+20>>2]=1;o=Vi(c[o>>2]|0,c[j>>2]|0)|0;i=p;return o|0}function lt(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;if(Dt(c[d>>2]|0)|0){c[b>>2]=Et(c[d>>2]|0)|0;a=c[b>>2]|0;i=e;return a|0}else{c[b>>2]=0;a=c[b>>2]|0;i=e;return a|0}return 0}function mt(a,b,e,f){ +a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+28|0;h=p+24|0;j=p+20|0;k=p+16|0;o=p+12|0;l=p+8|0;m=p+4|0;n=p;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;a:do if(c[k>>2]|0){c[n>>2]=h;c[l>>2]=0;c[m>>2]=c[h>>2];while(1){a=c[m>>2]|0;c[c[n>>2]>>2]=a;if(!a)break a;if((c[(c[m>>2]|0)+20>>2]|0)>>>0<=(c[j>>2]|0)>>>0){c[n>>2]=(c[m>>2]|0)+12;c[l>>2]=(c[l>>2]|0)+1}c[m>>2]=c[(c[m>>2]|0)+12>>2]}}else c[l>>2]=1;while(0);n=(c[g>>2]|0)+192+8|0;c[n>>2]=(c[n>>2]|0)+(c[l>>2]|0);if((c[(c[h>>2]|0)+20>>2]|0)==1)qt(c[h>>2]|0);c[o>>2]=wt(c[(c[g>>2]|0)+216>>2]|0,c[(c[g>>2]|0)+160>>2]|0,c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,d[(c[g>>2]|0)+11>>0]|0)|0;if(c[o>>2]|0){o=c[o>>2]|0;i=p;return o|0}if(!(c[(c[g>>2]|0)+96>>2]|0)){o=c[o>>2]|0;i=p;return o|0}c[m>>2]=c[h>>2];while(1){if(!(c[m>>2]|0))break;_r(c[(c[g>>2]|0)+96>>2]|0,c[(c[m>>2]|0)+20>>2]|0,c[(c[m>>2]|0)+4>>2]|0);c[m>>2]=c[(c[m>>2]|0)+12>>2]}o=c[o>>2]|0;i=p;return o|0}function nt(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;f=o+24|0;g=o+20|0;h=o+16|0;m=o+12|0;k=o+8|0;l=o;j=o+40|0;n=o+28|0;c[g>>2]=b;c[h>>2]=e;c[m>>2]=rt(c[g>>2]|0)|0;if(c[m>>2]|0){c[f>>2]=c[m>>2];n=c[f>>2]|0;i=o;return n|0}do if(!(a[(c[g>>2]|0)+7>>0]|0)){if((c[c[(c[g>>2]|0)+68>>2]>>2]|0)!=0?(d[(c[g>>2]|0)+5>>0]|0)!=4:0){c[k>>2]=Sr(c[(c[g>>2]|0)+64>>2]|0)|0;if(!(c[k>>2]&512)){a[n>>0]=a[26758]|0;a[n+1>>0]=a[26759]|0;a[n+2>>0]=a[26760]|0;a[n+3>>0]=a[26761]|0;a[n+4>>0]=a[26762]|0;a[n+5>>0]=a[26763]|0;a[n+6>>0]=a[26764]|0;a[n+7>>0]=a[26765]|0;Xs(n+8|0,c[(c[g>>2]|0)+48>>2]|0);e=fs(c[g>>2]|0)|0;b=l;c[b>>2]=e;c[b+4>>2]=C;b=l;c[m>>2]=Wr(c[(c[g>>2]|0)+68>>2]|0,j,8,c[b>>2]|0,c[b+4>>2]|0)|0;if((c[m>>2]|0)==0?0==(vQ(j,26758,8)|0):0){b=l;c[m>>2]=Fg(c[(c[g>>2]|0)+68>>2]|0,26901,1,c[b>>2]|0,c[b+4>>2]|0)|0}if((c[m>>2]|0)!=0&(c[m>>2]|0)!=522){c[f>>2]=c[m>>2];n=c[f>>2]|0;i=o;return n|0}if(((d[(c[g>>2]|0)+8>>0]|0)!=0?0==(c[k>>2]&1024|0):0)?(c[m>>2]=or(c[(c[g>>2]|0)+68>>2]|0,d[(c[g>>2]|0)+12>>0]|0)|0,(c[m>>2]|0)!=0):0){c[f>>2]=c[m>>2];n=c[f>>2]|0;i=o;return n|0}b=(c[g>>2]|0)+88|0;c[m>>2]=Fg(c[(c[g>>2]|0)+68>>2]|0,n,12,c[b>>2]|0,c[b+4>>2]|0)|0;if(c[m>>2]|0){c[f>>2]=c[m>>2];n=c[f>>2]|0;i=o;return n|0}}if(0==(c[k>>2]&1024|0)?(c[m>>2]=or(c[(c[g>>2]|0)+68>>2]|0,d[(c[g>>2]|0)+12>>0]|((d[(c[g>>2]|0)+12>>0]|0)==3?16:0))|0,(c[m>>2]|0)!=0):0){c[f>>2]=c[m>>2];n=c[f>>2]|0;i=o;return n|0}e=(c[g>>2]|0)+80|0;b=c[e+4>>2]|0;n=(c[g>>2]|0)+88|0;c[n>>2]=c[e>>2];c[n+4>>2]=b;if(!(c[h>>2]|0))break;if(c[k>>2]&512)break;c[(c[g>>2]|0)+48>>2]=0;c[m>>2]=st(c[g>>2]|0)|0;if(!(c[m>>2]|0))break;c[f>>2]=c[m>>2];n=c[f>>2]|0;i=o;return n|0}b=(c[g>>2]|0)+80|0;m=c[b+4>>2]|0;n=(c[g>>2]|0)+88|0;c[n>>2]=c[b>>2];c[n+4>>2]=m}while(0);tt(c[(c[g>>2]|0)+212>>2]|0);a[(c[g>>2]|0)+17>>0]=4;c[f>>2]=0;n=c[f>>2]|0;i=o;return n|0}function ot(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;g=n+32|0;h=n+28|0;m=n+24|0;f=n+8|0;l=n+20|0;j=n;k=n+16|0;c[g>>2]=b;c[h>>2]=d;c[m>>2]=0;if(!(c[c[(c[g>>2]|0)+64>>2]>>2]|0))c[m>>2]=pt(c[g>>2]|0,c[(c[g>>2]|0)+64>>2]|0,c[(c[g>>2]|0)+152>>2]|0)|0;do if((c[m>>2]|0)==0?(c[(c[g>>2]|0)+40>>2]|0)>>>0<(c[(c[g>>2]|0)+28>>2]|0)>>>0:0){if((c[(c[h>>2]|0)+12>>2]|0)==0?(c[(c[h>>2]|0)+20>>2]|0)>>>0<=(c[(c[g>>2]|0)+40>>2]|0)>>>0:0)break;d=c[(c[g>>2]|0)+160>>2]|0;d=rR(d|0,((d|0)<0)<<31>>31|0,c[(c[g>>2]|0)+28>>2]|0,0)|0;b=f;c[b>>2]=d;c[b+4>>2]=C;Js(c[(c[g>>2]|0)+64>>2]|0,5,f);c[(c[g>>2]|0)+40>>2]=c[(c[g>>2]|0)+28>>2]}while(0);while(1){if(!((c[m>>2]|0)==0?(c[h>>2]|0)!=0:0))break;c[l>>2]=c[(c[h>>2]|0)+20>>2];if((c[l>>2]|0)>>>0<=(c[(c[g>>2]|0)+28>>2]|0)>>>0?0==((e[(c[h>>2]|0)+24>>1]|0)&32|0):0){b=c[(c[g>>2]|0)+160>>2]|0;b=rR((c[l>>2]|0)-1|0,0,b|0,((b|0)<0)<<31>>31|0)|0;f=j;c[f>>2]=b;c[f+4>>2]=C;if((c[(c[h>>2]|0)+20>>2]|0)==1)qt(c[h>>2]|0);c[k>>2]=c[(c[h>>2]|0)+4>>2];f=j;c[m>>2]=Fg(c[(c[g>>2]|0)+64>>2]|0,c[k>>2]|0,c[(c[g>>2]|0)+160>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;if((c[l>>2]|0)==1){d=(c[g>>2]|0)+112|0;b=(c[k>>2]|0)+24|0;f=d+16|0;do{a[d>>0]=a[b>>0]|0;d=d+1|0;b=b+1|0}while((d|0)<(f|0))}if((c[l>>2]|0)>>>0>(c[(c[g>>2]|0)+36>>2]|0)>>>0)c[(c[g>>2]|0)+36>>2]=c[l>>2];f=(c[g>>2]|0)+192+8|0;c[f>>2]=(c[f>>2]|0)+1;_r(c[(c[g>>2]|0)+96>>2]|0,c[l>>2]|0,c[(c[h>>2]|0)+4>>2]|0)}c[h>>2]=c[(c[h>>2]|0)+12>>2]}i=n;return c[m>>2]|0}function pt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;j=f+12|0;h=f+8|0;g=f+4|0;e=f;c[j>>2]=a;c[h>>2]=b;c[g>>2]=d;c[g>>2]=c[g>>2]|30;c[e>>2]=Vr(c[c[j>>2]>>2]|0,0,c[h>>2]|0,c[g>>2]|0,0)|0;i=f;return c[e>>2]|0}function qt(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=($q((c[(c[d>>2]|0)+16>>2]|0)+112|0)|0)+1;Xs((c[(c[d>>2]|0)+4>>2]|0)+24|0,c[e>>2]|0);Xs((c[(c[d>>2]|0)+4>>2]|0)+92|0,c[e>>2]|0);Xs((c[(c[d>>2]|0)+4>>2]|0)+96|0,3011e3);i=b;return}function rt(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=c[(c[b>>2]|0)+44>>2];if((c[d>>2]|0)==0?0==(sr(c[b>>2]|0)|0):0)c[d>>2]=ut(c[b>>2]|0,4)|0;i=e;return c[d>>2]|0}function st(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+32|0;f=l+20|0;k=l+16|0;j=l+12|0;g=l+8|0;h=l+4|0;e=l;c[f>>2]=b;c[k>>2]=0;c[j>>2]=c[(c[f>>2]|0)+208>>2];c[g>>2]=c[(c[f>>2]|0)+160>>2];if((c[g>>2]|0)>>>0>(c[(c[f>>2]|0)+156>>2]|0)>>>0)c[g>>2]=c[(c[f>>2]|0)+156>>2];c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[f>>2]|0)+104>>2]|0))break;b=(c[(c[f>>2]|0)+100>>2]|0)+((c[e>>2]|0)*48|0)+8|0;if((c[b>>2]|0)==0&(c[b+4>>2]|0)==0){n=(c[f>>2]|0)+80|0;m=c[n+4>>2]|0;b=(c[(c[f>>2]|0)+100>>2]|0)+((c[e>>2]|0)*48|0)+8|0;c[b>>2]=c[n>>2];c[b+4>>2]=m}c[e>>2]=(c[e>>2]|0)+1}b=fs(c[f>>2]|0)|0;m=C;n=(c[f>>2]|0)+80|0;c[n>>2]=b;c[n+4>>2]=m;n=(c[f>>2]|0)+88|0;c[n>>2]=b;c[n+4>>2]=m;if(((d[(c[f>>2]|0)+7>>0]|0|0)==0?(d[(c[f>>2]|0)+5>>0]|0|0)!=4:0)?((Sr(c[(c[f>>2]|0)+64>>2]|0)|0)&512|0)==0:0){e=c[j>>2]|0;b=e+12|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(b|0))}else{n=c[j>>2]|0;a[n>>0]=a[26758]|0;a[n+1>>0]=a[26759]|0;a[n+2>>0]=a[26760]|0;a[n+3>>0]=a[26761]|0;a[n+4>>0]=a[26762]|0;a[n+5>>0]=a[26763]|0;a[n+6>>0]=a[26764]|0;a[n+7>>0]=a[26765]|0;Xs((c[j>>2]|0)+8|0,-1)}Sd(4,(c[f>>2]|0)+52|0);Xs((c[j>>2]|0)+12|0,c[(c[f>>2]|0)+52>>2]|0);Xs((c[j>>2]|0)+16|0,c[(c[f>>2]|0)+32>>2]|0);Xs((c[j>>2]|0)+20|0,c[(c[f>>2]|0)+156>>2]|0);Xs((c[j>>2]|0)+24|0,c[(c[f>>2]|0)+160>>2]|0);kR((c[j>>2]|0)+28|0,0,(c[g>>2]|0)-28|0)|0;c[h>>2]=0;while(1){if(c[k>>2]|0){e=17;break}if((c[h>>2]|0)>>>0>=(c[(c[f>>2]|0)+156>>2]|0)>>>0){e=17;break}n=(c[f>>2]|0)+80|0;c[k>>2]=Fg(c[(c[f>>2]|0)+68>>2]|0,c[j>>2]|0,c[g>>2]|0,c[n>>2]|0,c[n+4>>2]|0)|0;n=(c[f>>2]|0)+80|0;m=n;m=gR(c[m>>2]|0,c[m+4>>2]|0,c[g>>2]|0,0)|0;c[n>>2]=m;c[n+4>>2]=C;c[h>>2]=(c[h>>2]|0)+(c[g>>2]|0)}if((e|0)==17){i=l;return c[k>>2]|0}return 0}function tt(a){a=a|0;var d=0,f=0,g=0;g=i;i=i+16|0;d=g+4|0;f=g;c[d>>2]=a;c[f>>2]=c[c[d>>2]>>2];while(1){if(!(c[f>>2]|0))break;a=(c[f>>2]|0)+24|0;b[a>>1]=(e[a>>1]|0)&-9;c[f>>2]=c[(c[f>>2]|0)+32>>2]}c[(c[d>>2]|0)+8>>2]=c[(c[d>>2]|0)+4>>2];i=g;return}function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;while(1){c[f>>2]=vt(c[d>>2]|0,c[e>>2]|0)|0;if((c[f>>2]|0)!=5){d=4;break}if(!(Tb[c[(c[d>>2]|0)+184>>2]&255](c[(c[d>>2]|0)+188>>2]|0)|0)){d=4;break}}if((d|0)==4){i=g;return c[f>>2]|0}return 0}function vt(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=e;c[h>>2]=0;if((d[(c[f>>2]|0)+18>>0]|0|0)>=(c[g>>2]|0)?(d[(c[f>>2]|0)+18>>0]|0|0)!=5:0){h=c[h>>2]|0;i=j;return h|0}if(d[(c[f>>2]|0)+14>>0]|0)e=0;else e=Hs(c[(c[f>>2]|0)+64>>2]|0,c[g>>2]|0)|0;c[h>>2]=e;if(c[h>>2]|0){h=c[h>>2]|0;i=j;return h|0}if(!((c[g>>2]|0)==4?1:(d[(c[f>>2]|0)+18>>0]|0|0)!=5)){h=c[h>>2]|0;i=j;return h|0}a[(c[f>>2]|0)+18>>0]=c[g>>2];h=c[h>>2]|0;i=j;return h|0}function wt(f,g,h,j,k,l){f=f|0;g=g|0;h=h|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,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=i;i=i+176|0;u=M+128|0;v=M+124|0;w=M+120|0;x=M+116|0;y=M+112|0;z=M+108|0;A=M+104|0;H=M+100|0;B=M+96|0;F=M+92|0;G=M+88|0;E=M+84|0;K=M+80|0;D=M+40|0;L=M+16|0;p=M+76|0;o=M+72|0;n=M+136|0;m=M+64|0;s=M+60|0;r=M+56|0;q=M+8|0;t=M+52|0;I=M+48|0;J=M;c[v>>2]=f;c[w>>2]=g;c[x>>2]=h;c[y>>2]=j;c[z>>2]=k;c[A>>2]=l;c[G>>2]=0;c[E>>2]=0;c[p>>2]=0;c[o>>2]=ts(c[v>>2]|0)|0;if(vQ((c[v>>2]|0)+52|0,c[o>>2]|0,48)|0)c[p>>2]=(c[(c[o>>2]|0)+16>>2]|0)+1;g=xt(c[v>>2]|0)|0;c[H>>2]=g;if(g){c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}c[B>>2]=c[(c[v>>2]|0)+52+16>>2];if(!(c[B>>2]|0)){Xs(n,931071618|(a[960]|0)==0);Xs(n+4|0,3007e3);Xs(n+8|0,c[w>>2]|0);Xs(n+12|0,c[(c[v>>2]|0)+112>>2]|0);if(!(c[(c[v>>2]|0)+112>>2]|0))Sd(8,(c[v>>2]|0)+52+32|0);g=n+16|0;l=(c[v>>2]|0)+52+32|0;a[g>>0]=a[l>>0]|0;a[g+1>>0]=a[l+1>>0]|0;a[g+2>>0]=a[l+2>>0]|0;a[g+3>>0]=a[l+3>>0]|0;a[g+4>>0]=a[l+4>>0]|0;a[g+5>>0]=a[l+5>>0]|0;a[g+6>>0]=a[l+6>>0]|0;a[g+7>>0]=a[l+7>>0]|0;Zs(1,n,24,0,m);Xs(n+24|0,c[m>>2]|0);Xs(n+28|0,c[m+4>>2]|0);c[(c[v>>2]|0)+36>>2]=c[w>>2];a[(c[v>>2]|0)+52+13>>0]=(a[960]|0)==0;c[(c[v>>2]|0)+52+24>>2]=c[m>>2];c[(c[v>>2]|0)+52+24+4>>2]=c[m+4>>2];a[(c[v>>2]|0)+47>>0]=1;c[H>>2]=Fg(c[(c[v>>2]|0)+8>>2]|0,n,32,0,0)|0;if(c[H>>2]|0){c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}if(((c[A>>2]|0)!=0?(d[(c[v>>2]|0)+48>>0]|0)!=0:0)?(c[H>>2]=or(c[(c[v>>2]|0)+8>>2]|0,c[A>>2]&19)|0,(c[H>>2]|0)!=0):0){c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}}c[L>>2]=c[v>>2];c[L+4>>2]=c[(c[v>>2]|0)+8>>2];l=L+8|0;c[l>>2]=0;c[l+4>>2]=0;c[L+16>>2]=c[A>>2];c[L+20>>2]=c[w>>2];l=(c[w>>2]|0)+24|0;l=rR((c[B>>2]|0)+1-1|0,0,l|0,((l|0)<0)<<31>>31|0)|0;l=gR(32,0,l|0,C|0)|0;g=D;c[g>>2]=l;c[g+4>>2]=C;c[K>>2]=(c[w>>2]|0)+24;c[F>>2]=c[x>>2];while(1){if(!(c[F>>2]|0)){m=30;break}if(((c[p>>2]|0)!=0?(c[z>>2]|0)==0?1:(c[(c[F>>2]|0)+12>>2]|0)!=0:0)?(c[r>>2]=0,xs(c[v>>2]|0,c[(c[F>>2]|0)+20>>2]|0,r)|0,(c[r>>2]|0)>>>0>=(c[p>>2]|0)>>>0):0){l=(c[w>>2]|0)+24|0;l=rR((c[r>>2]|0)-1|0,0,l|0,((l|0)<0)<<31>>31|0)|0;l=gR(32,0,l|0,C|0)|0;l=gR(l|0,C|0,24,0)|0;g=q;c[g>>2]=l;c[g+4>>2]=C;if(!((c[(c[v>>2]|0)+104>>2]|0)!=0?(c[r>>2]|0)>>>0>=(c[(c[v>>2]|0)+104>>2]|0)>>>0:0))c[(c[v>>2]|0)+104>>2]=c[r>>2];c[t>>2]=c[(c[F>>2]|0)+4>>2];g=q;c[H>>2]=Fg(c[(c[v>>2]|0)+8>>2]|0,c[t>>2]|0,c[w>>2]|0,c[g>>2]|0,c[g+4>>2]|0)|0;if(c[H>>2]|0){m=22;break}g=(c[F>>2]|0)+24|0;b[g>>1]=e[g>>1]&-129}else{c[B>>2]=(c[B>>2]|0)+1;if(c[z>>2]|0)m=(c[(c[F>>2]|0)+12>>2]|0)==0?c[y>>2]|0:0;else m=0;c[s>>2]=m;g=D;c[H>>2]=yt(L,c[F>>2]|0,c[s>>2]|0,c[g>>2]|0,c[g+4>>2]|0)|0;if(c[H>>2]|0){m=27;break}c[G>>2]=c[F>>2];l=c[K>>2]|0;g=D;l=gR(c[g>>2]|0,c[g+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;g=D;c[g>>2]=l;c[g+4>>2]=C;g=(c[F>>2]|0)+24|0;b[g>>1]=e[g>>1]|128}c[F>>2]=c[(c[F>>2]|0)+12>>2]}if((m|0)==22){c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}else if((m|0)==27){c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}else if((m|0)==30){if(((c[z>>2]|0)!=0?(c[(c[v>>2]|0)+104>>2]|0)!=0:0)?(c[H>>2]=zt(c[v>>2]|0,c[B>>2]|0)|0,(c[H>>2]|0)!=0):0){c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}a:do if((c[z>>2]|0)!=0?(c[A>>2]&32|0)!=0:0){if(!(a[(c[v>>2]|0)+49>>0]|0)){c[H>>2]=or(c[L+4>>2]|0,c[A>>2]&19)|0;break}c[I>>2]=Tr(c[(c[v>>2]|0)+8>>2]|0)|0;t=D;A=c[I>>2]|0;A=gR(c[t>>2]|0,c[t+4>>2]|0,A|0,((A|0)<0)<<31>>31|0)|0;A=fR(A|0,C|0,1,0)|0;t=c[I>>2]|0;t=pR(A|0,C|0,t|0,((t|0)<0)<<31>>31|0)|0;A=c[I>>2]|0;A=rR(t|0,C|0,A|0,((A|0)<0)<<31>>31|0)|0;I=L+8|0;c[I>>2]=A;c[I+4>>2]=C;while(1){A=D;s=c[A+4>>2]|0;I=L+8|0;t=c[I+4>>2]|0;if(!((s|0)<(t|0)|((s|0)==(t|0)?(c[A>>2]|0)>>>0<(c[I>>2]|0)>>>0:0)))break a;I=D;c[H>>2]=yt(L,c[G>>2]|0,c[y>>2]|0,c[I>>2]|0,c[I+4>>2]|0)|0;if(c[H>>2]|0)break;A=c[K>>2]|0;I=D;A=gR(c[I>>2]|0,c[I+4>>2]|0,A|0,((A|0)<0)<<31>>31|0)|0;I=D;c[I>>2]=A;c[I+4>>2]=C;c[E>>2]=(c[E>>2]|0)+1}c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}while(0);if(((c[z>>2]|0)!=0?(d[(c[v>>2]|0)+47>>0]|0)!=0:0)?(L=(c[v>>2]|0)+16|0,K=c[L+4>>2]|0,(K|0)>0|(K|0)==0&(c[L>>2]|0)>>>0>=0):0){L=(c[v>>2]|0)+16|0;D=c[L+4>>2]|0;K=J;c[K>>2]=c[L>>2];c[K+4>>2]=D;K=(c[w>>2]|0)+24|0;K=rR((c[B>>2]|0)+(c[E>>2]|0)+1-1|0,0,K|0,((K|0)<0)<<31>>31|0)|0;K=gR(32,0,K|0,C|0)|0;D=C;L=(c[v>>2]|0)+16|0;I=c[L+4>>2]|0;if((D|0)>(I|0)|((D|0)==(I|0)?K>>>0>(c[L>>2]|0)>>>0:0)){K=(c[w>>2]|0)+24|0;K=rR((c[B>>2]|0)+(c[E>>2]|0)+1-1|0,0,K|0,((K|0)<0)<<31>>31|0)|0;K=gR(32,0,K|0,C|0)|0;L=J;c[L>>2]=K;c[L+4>>2]=C}L=J;Ks(c[v>>2]|0,c[L>>2]|0,c[L+4>>2]|0);a[(c[v>>2]|0)+47>>0]=0}c[B>>2]=c[(c[v>>2]|0)+52+16>>2];c[F>>2]=c[x>>2];while(1){if(!((c[F>>2]|0)!=0?(c[H>>2]|0)==0:0))break;if(e[(c[F>>2]|0)+24>>1]&128){c[B>>2]=(c[B>>2]|0)+1;c[H>>2]=gt(c[v>>2]|0,c[B>>2]|0,c[(c[F>>2]|0)+20>>2]|0)|0}c[F>>2]=c[(c[F>>2]|0)+12>>2]}while(1){if(!((c[H>>2]|0)==0?(c[E>>2]|0)>0:0))break;c[B>>2]=(c[B>>2]|0)+1;c[E>>2]=(c[E>>2]|0)+-1;c[H>>2]=gt(c[v>>2]|0,c[B>>2]|0,c[(c[G>>2]|0)+20>>2]|0)|0}if(!(c[H>>2]|0)){b[(c[v>>2]|0)+52+14>>1]=c[w>>2]&65280|c[w>>2]>>16;c[(c[v>>2]|0)+52+16>>2]=c[B>>2];if(c[z>>2]|0){L=(c[v>>2]|0)+52+8|0;c[L>>2]=(c[L>>2]|0)+1;c[(c[v>>2]|0)+52+20>>2]=c[y>>2]}if(c[z>>2]|0){Ys(c[v>>2]|0);c[(c[v>>2]|0)+12>>2]=c[B>>2]}}c[u>>2]=c[H>>2];L=c[u>>2]|0;i=M;return L|0}return 0}function xt(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;d=l+24|0;e=l+20|0;j=l+16|0;f=l+12|0;h=l+8|0;k=l+4|0;g=l;c[e>>2]=a;c[j>>2]=0;if(!(b[(c[e>>2]|0)+40>>1]|0)){c[h>>2]=Ss(c[e>>2]|0)|0;do if((c[c[h>>2]>>2]|0)>>>0>0){Sd(4,k);c[j>>2]=Ns(c[e>>2]|0,4,4)|0;if(!(c[j>>2]|0)){Vs(c[e>>2]|0,c[k>>2]|0);Br(c[e>>2]|0,4,4);break}if((c[j>>2]|0)!=5){c[d>>2]=c[j>>2];k=c[d>>2]|0;i=l;return k|0}}while(0);zr(c[e>>2]|0,3);b[(c[e>>2]|0)+40>>1]=-1;c[f>>2]=0;do{a=c[e>>2]|0;k=(c[f>>2]|0)+1|0;c[f>>2]=k;c[j>>2]=Ct(a,g,1,k)|0}while((c[j>>2]|0)==-1)}c[d>>2]=c[j>>2];k=c[d>>2]|0;i=l;return k|0}function yt(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=i;i=i+64|0;g=m+28|0;h=m+24|0;p=m+20|0;o=m+16|0;j=m;l=m+12|0;k=m+8|0;n=m+32|0;c[h>>2]=a;c[p>>2]=b;c[o>>2]=d;b=j;c[b>>2]=e;c[b+4>>2]=f;c[k>>2]=c[(c[p>>2]|0)+4>>2];At(c[c[h>>2]>>2]|0,c[(c[p>>2]|0)+20>>2]|0,c[o>>2]|0,c[k>>2]|0,n);b=j;c[l>>2]=Bt(c[h>>2]|0,n,24,c[b>>2]|0,c[b+4>>2]|0)|0;if(c[l>>2]|0){c[g>>2]=c[l>>2];p=c[g>>2]|0;i=m;return p|0}else{b=c[h>>2]|0;n=c[k>>2]|0;o=c[(c[h>>2]|0)+20>>2]|0;p=j;p=gR(c[p>>2]|0,c[p+4>>2]|0,24,0)|0;c[l>>2]=Bt(b,n,o,p,C)|0;c[g>>2]=c[l>>2];p=c[g>>2]|0;i=m;return p|0}return 0}function zt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+80|0;d=q+48|0;e=q+44|0;f=q+40|0;p=q+36|0;o=q+32|0;g=q+28|0;h=q+56|0;m=q+24|0;j=q+8|0;k=q;l=q+20|0;n=q+16|0;c[e>>2]=a;c[f>>2]=b;c[p>>2]=c[(c[e>>2]|0)+36>>2];c[o>>2]=0;c[g>>2]=Id((c[p>>2]|0)+24|0)|0;if(!(c[g>>2]|0)){c[d>>2]=7;p=c[d>>2]|0;i=q;return p|0}if((c[(c[e>>2]|0)+104>>2]|0)==1){a=j;c[a>>2]=24;c[a+4>>2]=0}else{b=(c[p>>2]|0)+24|0;b=rR((c[(c[e>>2]|0)+104>>2]|0)-1-1|0,0,b|0,((b|0)<0)<<31>>31|0)|0;b=gR(32,0,b|0,C|0)|0;b=gR(b|0,C|0,16,0)|0;a=j;c[a>>2]=b;c[a+4>>2]=C}a=j;c[o>>2]=Wr(c[(c[e>>2]|0)+8>>2]|0,c[g>>2]|0,8,c[a>>2]|0,c[a+4>>2]|0)|0;a=$q(c[g>>2]|0)|0;c[(c[e>>2]|0)+52+24>>2]=a;a=$q((c[g>>2]|0)+4|0)|0;c[(c[e>>2]|0)+52+24+4>>2]=a;c[m>>2]=c[(c[e>>2]|0)+104>>2];c[(c[e>>2]|0)+104>>2]=0;while(1){if(c[o>>2]|0)break;if((c[m>>2]|0)>>>0>(c[f>>2]|0)>>>0)break;b=(c[p>>2]|0)+24|0;b=rR((c[m>>2]|0)-1|0,0,b|0,((b|0)<0)<<31>>31|0)|0;b=gR(32,0,b|0,C|0)|0;a=k;c[a>>2]=b;c[a+4>>2]=C;a=k;c[o>>2]=Wr(c[(c[e>>2]|0)+8>>2]|0,c[g>>2]|0,(c[p>>2]|0)+24|0,c[a>>2]|0,c[a+4>>2]|0)|0;if(!(c[o>>2]|0)){c[l>>2]=$q(c[g>>2]|0)|0;c[n>>2]=$q((c[g>>2]|0)+4|0)|0;At(c[e>>2]|0,c[l>>2]|0,c[n>>2]|0,(c[g>>2]|0)+24|0,h);a=k;c[o>>2]=Fg(c[(c[e>>2]|0)+8>>2]|0,h,24,c[a>>2]|0,c[a+4>>2]|0)|0}c[m>>2]=(c[m>>2]|0)+1}Kd(c[g>>2]|0);c[d>>2]=c[o>>2];p=c[d>>2]|0;i=q;return p|0}function At(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=i;i=i+32|0;j=o+24|0;q=o+20|0;p=o+16|0;k=o+12|0;l=o+8|0;n=o+4|0;m=o;c[j>>2]=b;c[q>>2]=e;c[p>>2]=f;c[k>>2]=g;c[l>>2]=h;c[m>>2]=(c[j>>2]|0)+52+24;Xs(c[l>>2]|0,c[q>>2]|0);Xs((c[l>>2]|0)+4|0,c[p>>2]|0);g=(c[l>>2]|0)+8|0;if(!(c[(c[j>>2]|0)+104>>2]|0)){q=(c[j>>2]|0)+52+32|0;a[g>>0]=a[q>>0]|0;a[g+1>>0]=a[q+1>>0]|0;a[g+2>>0]=a[q+2>>0]|0;a[g+3>>0]=a[q+3>>0]|0;a[g+4>>0]=a[q+4>>0]|0;a[g+5>>0]=a[q+5>>0]|0;a[g+6>>0]=a[q+6>>0]|0;a[g+7>>0]=a[q+7>>0]|0;c[n>>2]=(d[(c[j>>2]|0)+52+13>>0]|0)==((a[960]|0)==0|0)&1;Zs(c[n>>2]|0,c[l>>2]|0,8,c[m>>2]|0,c[m>>2]|0);Zs(c[n>>2]|0,c[k>>2]|0,c[(c[j>>2]|0)+36>>2]|0,c[m>>2]|0,c[m>>2]|0);Xs((c[l>>2]|0)+16|0,c[c[m>>2]>>2]|0);Xs((c[l>>2]|0)+20|0,c[(c[m>>2]|0)+4>>2]|0);i=o;return}else{h=g+16|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));i=o;return}}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,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+28|0;h=o+24|0;j=o+20|0;k=o+16|0;l=o;n=o+12|0;m=o+8|0;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;a=l;c[a>>2]=e;c[a+4>>2]=f;a=l;f=c[a+4>>2]|0;b=(c[h>>2]|0)+8|0;d=c[b+4>>2]|0;if((f|0)<(d|0)|((f|0)==(d|0)?(c[a>>2]|0)>>>0<(c[b>>2]|0)>>>0:0)?(f=l,a=c[k>>2]|0,a=gR(c[f>>2]|0,c[f+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0,f=C,b=(c[h>>2]|0)+8|0,d=c[b+4>>2]|0,(f|0)>(d|0)|((f|0)==(d|0)?a>>>0>=(c[b>>2]|0)>>>0:0)):0){a=(c[h>>2]|0)+8|0;b=l;b=fR(c[a>>2]|0,c[a+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;c[m>>2]=b;b=l;c[n>>2]=Fg(c[(c[h>>2]|0)+4>>2]|0,c[j>>2]|0,c[m>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;if(c[n>>2]|0){c[g>>2]=c[n>>2];n=c[g>>2]|0;i=o;return n|0}a=c[m>>2]|0;b=l;a=gR(c[b>>2]|0,c[b+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;b=l;c[b>>2]=a;c[b+4>>2]=C;c[k>>2]=(c[k>>2]|0)-(c[m>>2]|0);c[j>>2]=(c[j>>2]|0)+(c[m>>2]|0);c[n>>2]=or(c[(c[h>>2]|0)+4>>2]|0,c[(c[h>>2]|0)+16>>2]&19)|0;if((c[k>>2]|0)==0|(c[n>>2]|0)!=0){c[g>>2]=c[n>>2];n=c[g>>2]|0;i=o;return n|0}}b=l;c[n>>2]=Fg(c[(c[h>>2]|0)+4>>2]|0,c[j>>2]|0,c[k>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;c[g>>2]=c[n>>2];n=c[g>>2]|0;i=o;return n|0}function Ct(a,e,f,g){a=a|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+64|0;v=w+48|0;h=w+44|0;j=w+40|0;k=w+36|0;l=w+32|0;r=w+28|0;p=w+24|0;o=w+20|0;m=w+16|0;s=w+12|0;n=w+8|0;q=w+4|0;t=w;c[h>>2]=a;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[s>>2]=0;if((c[l>>2]|0)>5){c[q>>2]=1;if((c[l>>2]|0)>100){c[v>>2]=15;v=c[v>>2]|0;i=w;return v|0}if((c[l>>2]|0)>=10)c[q>>2]=(_((c[l>>2]|0)-9|0,(c[l>>2]|0)-9|0)|0)*39;ri(c[c[h>>2]>>2]|0,c[q>>2]|0)|0}if(!(c[k>>2]|0)){c[s>>2]=Ps(c[h>>2]|0,c[j>>2]|0)|0;do if((c[s>>2]|0)==5){if(!(c[c[(c[h>>2]|0)+32>>2]>>2]|0)){c[s>>2]=-1;break}f=yr(c[h>>2]|0,2)|0;c[s>>2]=f;if(!f){zr(c[h>>2]|0,2);c[s>>2]=-1;break}if((c[s>>2]|0)==5)c[s>>2]=261}while(0);if(c[s>>2]|0){c[v>>2]=c[s>>2];v=c[v>>2]|0;i=w;return v|0}}c[r>>2]=Ss(c[h>>2]|0)|0;do if((c[k>>2]|0)==0?(c[c[r>>2]>>2]|0)==(c[(c[h>>2]|0)+52+16>>2]|0):0){c[s>>2]=yr(c[h>>2]|0,3)|0;_s(c[h>>2]|0);if(c[s>>2]|0){if((c[s>>2]|0)==5)break;c[v>>2]=c[s>>2];v=c[v>>2]|0;i=w;return v|0}u=ts(c[h>>2]|0)|0;u=(vQ(u,(c[h>>2]|0)+52|0,48)|0)!=0;h=c[h>>2]|0;if(u){zr(h,3);c[v>>2]=-1;v=c[v>>2]|0;i=w;return v|0}else{b[h+40>>1]=0;c[v>>2]=0;v=c[v>>2]|0;i=w;return v|0}}while(0);c[p>>2]=0;c[o>>2]=0;c[n>>2]=c[(c[h>>2]|0)+52+16>>2];c[m>>2]=1;while(1){if((c[m>>2]|0)>=5)break;c[t>>2]=c[(c[r>>2]|0)+4+(c[m>>2]<<2)>>2];if((c[p>>2]|0)>>>0<=(c[t>>2]|0)>>>0?(c[t>>2]|0)>>>0<=(c[n>>2]|0)>>>0:0){c[p>>2]=c[t>>2];c[o>>2]=c[m>>2]}c[m>>2]=(c[m>>2]|0)+1}a:do if(((d[(c[h>>2]|0)+46>>0]|0)&2|0)==0?(c[o>>2]|0)==0?1:(c[p>>2]|0)>>>0<(c[n>>2]|0)>>>0:0){c[m>>2]=1;while(1){if((c[m>>2]|0)>=5)break a;c[s>>2]=Ns(c[h>>2]|0,3+(c[m>>2]|0)|0,1)|0;if(!(c[s>>2]|0)){u=36;break}if((c[s>>2]|0)!=5)break;c[m>>2]=(c[m>>2]|0)+1}if((u|0)==36){u=c[n>>2]|0;c[(c[r>>2]|0)+4+(c[m>>2]<<2)>>2]=u;c[p>>2]=u;c[o>>2]=c[m>>2];Br(c[h>>2]|0,3+(c[m>>2]|0)|0,1);break}c[v>>2]=c[s>>2];v=c[v>>2]|0;i=w;return v|0}while(0);if(!(c[o>>2]|0)){c[v>>2]=(c[s>>2]|0)==5?-1:520;v=c[v>>2]|0;i=w;return v|0}c[s>>2]=yr(c[h>>2]|0,3+(c[o>>2]|0)|0)|0;if(c[s>>2]|0){c[v>>2]=(c[s>>2]|0)==5?-1:c[s>>2]|0;v=c[v>>2]|0;i=w;return v|0}c[(c[h>>2]|0)+100>>2]=(c[c[r>>2]>>2]|0)+1;_s(c[h>>2]|0);if((c[(c[r>>2]|0)+4+(c[o>>2]<<2)>>2]|0)==(c[p>>2]|0)?(u=ts(c[h>>2]|0)|0,(vQ(u,(c[h>>2]|0)+52|0,48)|0)==0):0){b[(c[h>>2]|0)+40>>1]=c[o>>2];c[v>>2]=c[s>>2];v=c[v>>2]|0;i=w;return v|0}zr(c[h>>2]|0,3+(c[o>>2]|0)|0);c[v>>2]=-1;v=c[v>>2]|0;i=w;return v|0}function Dt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;g=h+20|0;j=h+16|0;e=h+12|0;d=h+8|0;f=h+4|0;b=h;c[j>>2]=a;c[e>>2]=c[(c[j>>2]|0)+16>>2];c[f>>2]=c[(c[j>>2]|0)+20>>2];c[b>>2]=0;while(1){if((c[b>>2]|0)>=(c[(c[e>>2]|0)+104>>2]|0)){b=7;break}c[d>>2]=(c[(c[e>>2]|0)+100>>2]|0)+((c[b>>2]|0)*48|0);if((c[(c[d>>2]|0)+20>>2]|0)>>>0>=(c[f>>2]|0)>>>0?0==(lj(c[(c[d>>2]|0)+16>>2]|0,c[f>>2]|0)|0):0){b=5;break}c[b>>2]=(c[b>>2]|0)+1}if((b|0)==5){c[g>>2]=1;j=c[g>>2]|0;i=h;return j|0}else if((b|0)==7){c[g>>2]=0;j=c[g>>2]|0;i=h;return j|0}return 0}function Et(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;b=k+24|0;j=k+20|0;h=k+16|0;f=k+12|0;e=k;g=k+8|0;c[b>>2]=a;c[j>>2]=0;c[h>>2]=c[(c[b>>2]|0)+16>>2];if(((d[(c[h>>2]|0)+5>>0]|0|0)!=2?(c[j>>2]=Ft(c[h>>2]|0)|0,(c[j>>2]|0)==0):0)?(c[f>>2]=c[(c[b>>2]|0)+4>>2],l=4+(c[(c[h>>2]|0)+160>>2]|0)|0,l=rR(c[(c[h>>2]|0)+56>>2]|0,0,l|0,((l|0)<0)<<31>>31|0)|0,a=e,c[a>>2]=l,c[a+4>>2]=C,c[g>>2]=c[f>>2],a=e,c[j>>2]=Gt(c[(c[h>>2]|0)+72>>2]|0,c[a>>2]|0,c[a+4>>2]|0,c[(c[b>>2]|0)+20>>2]|0)|0,(c[j>>2]|0)==0):0){f=c[(c[h>>2]|0)+72>>2]|0;g=c[g>>2]|0;a=c[(c[h>>2]|0)+160>>2]|0;l=e;l=gR(c[l>>2]|0,c[l+4>>2]|0,4,0)|0;c[j>>2]=Fg(f,g,a,l,C)|0}if(c[j>>2]|0){l=c[j>>2]|0;i=k;return l|0}l=(c[h>>2]|0)+56|0;c[l>>2]=(c[l>>2]|0)+1;c[j>>2]=Ht(c[h>>2]|0,c[(c[b>>2]|0)+20>>2]|0)|0;l=c[j>>2]|0;i=k;return l|0}function Ft(a){a=a|0;var b=0,e=0,f=0;f=i;i=i+16|0;b=f+4|0;e=f;c[b>>2]=a;c[e>>2]=0;if(c[c[(c[b>>2]|0)+72>>2]>>2]|0){e=c[e>>2]|0;i=f;return e|0}if((d[(c[b>>2]|0)+5>>0]|0|0)!=4?(d[(c[b>>2]|0)+22>>0]|0|0)==0:0){c[e>>2]=pt(c[b>>2]|0,c[(c[b>>2]|0)+72>>2]|0,8192)|0;e=c[e>>2]|0;i=f;return e|0}Ir(c[(c[b>>2]|0)+72>>2]|0);e=c[e>>2]|0;i=f;return e|0}function Gt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+32|0;h=f+12|0;j=f;k=f+8|0;g=f+16|0;c[h>>2]=a;a=j;c[a>>2]=b;c[a+4>>2]=d;c[k>>2]=e;Xs(g,c[k>>2]|0);e=j;e=Fg(c[h>>2]|0,g,4,c[e>>2]|0,c[e+4>>2]|0)|0;i=f;return e|0}function Ht(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;f=j+8|0;h=j+4|0;g=j;c[d>>2]=a;c[e>>2]=b;c[h>>2]=0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[d>>2]|0)+104>>2]|0))break;c[g>>2]=(c[(c[d>>2]|0)+100>>2]|0)+((c[f>>2]|0)*48|0);if((c[e>>2]|0)>>>0<=(c[(c[g>>2]|0)+20>>2]|0)>>>0){b=gj(c[(c[g>>2]|0)+16>>2]|0,c[e>>2]|0)|0;c[h>>2]=c[h>>2]|b}c[f>>2]=(c[f>>2]|0)+1}i=j;return c[h>>2]|0}function It(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+8>>2]|0}function Jt(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=vs(c[d>>2]|0)|0;i=b;return a|0}function Kt(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+64|0;l=x+40|0;m=x+36|0;t=x+50|0;o=x+52|0;n=x+32|0;j=x+28|0;w=x+24|0;g=x+48|0;r=x+20|0;v=x+16|0;p=x+12|0;q=x+8|0;h=x+4|0;k=x;s=x+46|0;u=x+44|0;c[m>>2]=f;do if(!(a[c[m>>2]>>0]|0)){c[j>>2]=c[(c[m>>2]|0)+52>>2];a[o>>0]=a[(c[m>>2]|0)+5>>0]|0;c[n>>2]=c[(c[m>>2]|0)+56>>2];if(Lt(c[m>>2]|0,d[(c[n>>2]|0)+(d[o>>0]|0)>>0]|0)|0){c[l>>2]=Lj(57320)|0;w=c[l>>2]|0;i=x;return w|0}b[(c[m>>2]|0)+20>>1]=(c[(c[j>>2]|0)+32>>2]|0)-1;a[(c[m>>2]|0)+1>>0]=0;c[w>>2]=c[(c[j>>2]|0)+36>>2];f=(d[o>>0]|0)+8+(d[(c[m>>2]|0)+6>>0]|0)&65535;b[g>>1]=f;b[(c[m>>2]|0)+14>>1]=f;c[(c[m>>2]|0)+60>>2]=(c[n>>2]|0)+(c[w>>2]|0);c[(c[m>>2]|0)+64>>2]=(c[n>>2]|0)+(e[g>>1]|0);c[(c[m>>2]|0)+68>>2]=(c[n>>2]|0)+(d[(c[m>>2]|0)+6>>0]|0);c[v>>2]=((d[(c[n>>2]|0)+((d[o>>0]|0)+5)>>0]<<8|d[(c[n>>2]|0)+((d[o>>0]|0)+5)+1>>0])-1&65535)+1;b[(c[m>>2]|0)+18>>1]=d[(c[n>>2]|0)+((d[o>>0]|0)+3)>>0]<<8|d[(c[n>>2]|0)+((d[o>>0]|0)+3)+1>>0];if((e[(c[m>>2]|0)+18>>1]|0)>>>0>((((c[(c[j>>2]|0)+32>>2]|0)-8|0)>>>0)/6|0)>>>0){c[l>>2]=Lj(57338)|0;w=c[l>>2]|0;i=x;return w|0}c[p>>2]=(e[g>>1]|0)+(e[(c[m>>2]|0)+18>>1]<<1);c[q>>2]=(c[w>>2]|0)-4;do if(c[(c[(c[j>>2]|0)+4>>2]|0)+24>>2]&268435456){if(!(a[(c[m>>2]|0)+4>>0]|0))c[q>>2]=(c[q>>2]|0)+-1;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(e[(c[m>>2]|0)+18>>1]|0)){g=17;break}b[t>>1]=d[(c[n>>2]|0)+((e[g>>1]|0)+(c[h>>2]<<1))>>0]<<8|d[(c[n>>2]|0)+((e[g>>1]|0)+(c[h>>2]<<1))+1>>0];if((e[t>>1]|0)<(c[p>>2]|0)){g=13;break}if((e[t>>1]|0)>(c[q>>2]|0)){g=13;break}c[k>>2]=(Yb[c[(c[m>>2]|0)+76>>2]&255](c[m>>2]|0,(c[n>>2]|0)+(e[t>>1]|0)|0)|0)&65535;if(((e[t>>1]|0)+(c[k>>2]|0)|0)>(c[w>>2]|0)){g=15;break}c[h>>2]=(c[h>>2]|0)+1}if((g|0)==13){c[l>>2]=Lj(57366)|0;w=c[l>>2]|0;i=x;return w|0}else if((g|0)==15){c[l>>2]=Lj(57371)|0;w=c[l>>2]|0;i=x;return w|0}else if((g|0)==17){if(a[(c[m>>2]|0)+4>>0]|0)break;c[q>>2]=(c[q>>2]|0)+1;break}}while(0);b[t>>1]=d[(c[n>>2]|0)+((d[o>>0]|0)+1)>>0]<<8|d[(c[n>>2]|0)+((d[o>>0]|0)+1)+1>>0];c[r>>2]=(d[(c[n>>2]|0)+((d[o>>0]|0)+7)>>0]|0)+(c[v>>2]|0);while(1){if((e[t>>1]|0)<=0){g=29;break}if((e[t>>1]|0)<(c[p>>2]|0)){g=23;break}if((e[t>>1]|0)>(c[q>>2]|0)){g=23;break}b[s>>1]=d[(c[n>>2]|0)+(e[t>>1]|0)>>0]<<8|d[(c[n>>2]|0)+(e[t>>1]|0)+1>>0];b[u>>1]=d[(c[n>>2]|0)+((e[t>>1]|0)+2)>>0]<<8|d[(c[n>>2]|0)+((e[t>>1]|0)+2)+1>>0];if((e[s>>1]|0)>0?(e[s>>1]|0)<=((e[t>>1]|0)+(e[u>>1]|0)+3|0):0){g=27;break}if(((e[t>>1]|0)+(e[u>>1]|0)|0)>(c[w>>2]|0)){g=27;break}c[r>>2]=(c[r>>2]|0)+(e[u>>1]|0);b[t>>1]=b[s>>1]|0}if((g|0)==23){c[l>>2]=Lj(57391)|0;w=c[l>>2]|0;i=x;return w|0}else if((g|0)==27){c[l>>2]=Lj(57398)|0;w=c[l>>2]|0;i=x;return w|0}else if((g|0)==29){if((c[r>>2]|0)<=(c[w>>2]|0)){b[(c[m>>2]|0)+16>>1]=(c[r>>2]|0)-(c[p>>2]|0);a[c[m>>2]>>0]=1;break}c[l>>2]=Lj(57412)|0;w=c[l>>2]|0;i=x;return w|0}}while(0);c[l>>2]=0;w=c[l>>2]|0;i=x;return w|0}function Lt(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l+12|0;j=l+8|0;g=l+4|0;k=l;c[j>>2]=e;c[g>>2]=f;a[(c[j>>2]|0)+4>>0]=c[g>>2]>>3;c[g>>2]=c[g>>2]&-9;a[(c[j>>2]|0)+6>>0]=4-(d[(c[j>>2]|0)+4>>0]<<2);c[(c[j>>2]|0)+76>>2]=188;c[k>>2]=c[(c[j>>2]|0)+52>>2];do if((c[g>>2]|0)==5){a[(c[j>>2]|0)+2>>0]=1;g=(c[j>>2]|0)+3|0;if(a[(c[j>>2]|0)+4>>0]|0){a[g>>0]=1;c[(c[j>>2]|0)+80>>2]=226}else{a[g>>0]=0;c[(c[j>>2]|0)+76>>2]=189;c[(c[j>>2]|0)+80>>2]=227}b[(c[j>>2]|0)+10>>1]=b[(c[k>>2]|0)+28>>1]|0;b[(c[j>>2]|0)+12>>1]=b[(c[k>>2]|0)+30>>1]|0}else{if((c[g>>2]|0)==2){a[(c[j>>2]|0)+2>>0]=0;a[(c[j>>2]|0)+3>>0]=0;c[(c[j>>2]|0)+80>>2]=228;b[(c[j>>2]|0)+10>>1]=b[(c[k>>2]|0)+24>>1]|0;b[(c[j>>2]|0)+12>>1]=b[(c[k>>2]|0)+26>>1]|0;break}c[h>>2]=Lj(57278)|0;k=c[h>>2]|0;i=l;return k|0}while(0);a[(c[j>>2]|0)+7>>0]=a[(c[k>>2]|0)+21>>0]|0;c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}function Mt(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;m=n+12|0;l=n+8|0;k=n+4|0;j=n;c[g>>2]=b;c[h>>2]=f;c[m>>2]=(c[h>>2]|0)+(d[(c[g>>2]|0)+6>>0]|0);c[k>>2]=d[c[m>>2]>>0];a:do if((c[k>>2]|0)>>>0>=128){c[l>>2]=(c[m>>2]|0)+8;c[k>>2]=c[k>>2]&127;do{f=c[k>>2]<<7;b=(c[m>>2]|0)+1|0;c[m>>2]=b;c[k>>2]=f|d[b>>0]&127;if((d[c[m>>2]>>0]|0)<128)break a}while((c[m>>2]|0)>>>0<(c[l>>2]|0)>>>0)}while(0);c[m>>2]=(c[m>>2]|0)+1;b:do if(a[(c[g>>2]|0)+2>>0]|0){c[l>>2]=(c[m>>2]|0)+9;do{b=c[m>>2]|0;c[m>>2]=b+1;if(!(d[b>>0]&128))break b}while((c[m>>2]|0)>>>0<(c[l>>2]|0)>>>0)}while(0);if((c[k>>2]|0)>>>0<=(e[(c[g>>2]|0)+10>>1]|0)>>>0){b=(c[k>>2]|0)+((c[m>>2]|0)-(c[h>>2]|0))|0;c[k>>2]=b;c[k>>2]=(c[k>>2]|0)>>>0<4?4:b;b=c[k>>2]|0;b=b&65535;i=n;return b|0}c[j>>2]=e[(c[g>>2]|0)+12>>1];c[k>>2]=(c[j>>2]|0)+((((c[k>>2]|0)-(c[j>>2]|0)|0)>>>0)%(((c[(c[(c[g>>2]|0)+52>>2]|0)+36>>2]|0)-4|0)>>>0)|0);if((c[k>>2]|0)>>>0>(e[(c[g>>2]|0)+10>>1]|0)>>>0)c[k>>2]=c[j>>2];c[k>>2]=(c[k>>2]|0)+(4+((c[m>>2]|0)-(c[h>>2]|0)&65535));b=c[k>>2]|0;b=b&65535;i=n;return b|0}function Nt(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;h=q+32|0;j=q+28|0;k=q+24|0;p=q+20|0;m=q+16|0;l=q;n=q+12|0;o=q+8|0;c[h>>2]=a;c[j>>2]=f;c[k>>2]=g;c[p>>2]=c[j>>2];c[m>>2]=d[c[p>>2]>>0];a:do if((c[m>>2]|0)>>>0>=128){c[n>>2]=(c[p>>2]|0)+8;c[m>>2]=c[m>>2]&127;do{g=c[m>>2]<<7;a=(c[p>>2]|0)+1|0;c[p>>2]=a;c[m>>2]=g|(d[a>>0]|0)&127;if((d[c[p>>2]>>0]|0|0)<128)break a}while((c[p>>2]|0)>>>0<(c[n>>2]|0)>>>0)}while(0);c[p>>2]=(c[p>>2]|0)+1;a=l;c[a>>2]=d[c[p>>2]>>0];c[a+4>>2]=0;a=l;g=c[a+4>>2]|0;b:do if(g>>>0>0|(g|0)==0&(c[a>>2]|0)>>>0>=128){c[o>>2]=(c[p>>2]|0)+7;a=l;c[a>>2]=c[l>>2]&127;c[a+4>>2]=0;do{n=l;n=lR(c[n>>2]|0,c[n+4>>2]|0,7)|0;g=(c[p>>2]|0)+1|0;c[p>>2]=g;g=(d[g>>0]|0)&127;a=l;c[a>>2]=n|g;c[a+4>>2]=C|((g|0)<0)<<31>>31;if((d[c[p>>2]>>0]|0|0)<128)break b}while((c[p>>2]|0)>>>0<(c[o>>2]|0)>>>0);o=l;o=lR(c[o>>2]|0,c[o+4>>2]|0,8)|0;g=(c[p>>2]|0)+1|0;c[p>>2]=g;a=l;c[a>>2]=o|(d[g>>0]|0);c[a+4>>2]=C}while(0);c[p>>2]=(c[p>>2]|0)+1;o=l;g=c[o+4>>2]|0;a=c[k>>2]|0;c[a>>2]=c[o>>2];c[a+4>>2]=g;c[(c[k>>2]|0)+12>>2]=c[m>>2];c[(c[k>>2]|0)+8>>2]=c[p>>2];if((c[m>>2]|0)>>>0>(e[(c[h>>2]|0)+10>>1]|0)>>>0){Rt(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0);i=q;return}b[(c[k>>2]|0)+18>>1]=(c[m>>2]|0)+((c[p>>2]|0)-(c[j>>2]|0)&65535);if((e[(c[k>>2]|0)+18>>1]|0|0)<4)b[(c[k>>2]|0)+18>>1]=4;b[(c[k>>2]|0)+16>>1]=c[m>>2];i=q;return}function Ot(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;g=h+4|0;f=h;c[h+12>>2]=a;c[e>>2]=b;c[g>>2]=(c[e>>2]|0)+4;c[f>>2]=(c[g>>2]|0)+9;do{a=c[g>>2]|0;c[g>>2]=a+1;if(!((d[a>>0]|0)&128))break}while((c[g>>2]|0)>>>0<(c[f>>2]|0)>>>0);i=h;return(c[g>>2]|0)-(c[e>>2]|0)&65535|0}function Pt(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;h=f+4|0;g=f;c[f+8>>2]=a;c[h>>2]=d;c[g>>2]=e;a=4+((St((c[h>>2]|0)+4|0,c[g>>2]|0)|0)&255)&65535;b[(c[g>>2]|0)+18>>1]=a;c[(c[g>>2]|0)+12>>2]=0;b[(c[g>>2]|0)+16>>1]=0;c[(c[g>>2]|0)+8>>2]=0;i=f;return}function Qt(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+20|0;j=o+16|0;k=o+12|0;n=o+8|0;l=o+4|0;m=o;c[h>>2]=a;c[j>>2]=f;c[k>>2]=g;c[n>>2]=(c[j>>2]|0)+(d[(c[h>>2]|0)+6>>0]|0);c[l>>2]=d[c[n>>2]>>0];a:do if((c[l>>2]|0)>>>0>=128){c[m>>2]=(c[n>>2]|0)+8;c[l>>2]=c[l>>2]&127;do{g=c[l>>2]<<7;a=(c[n>>2]|0)+1|0;c[n>>2]=a;c[l>>2]=g|(d[a>>0]|0)&127;if((d[c[n>>2]>>0]|0|0)<128)break a}while((c[n>>2]|0)>>>0<(c[m>>2]|0)>>>0)}while(0);c[n>>2]=(c[n>>2]|0)+1;a=c[k>>2]|0;c[a>>2]=c[l>>2];c[a+4>>2]=0;c[(c[k>>2]|0)+12>>2]=c[l>>2];c[(c[k>>2]|0)+8>>2]=c[n>>2];if((c[l>>2]|0)>>>0>(e[(c[h>>2]|0)+10>>1]|0)>>>0){Rt(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0);i=o;return}b[(c[k>>2]|0)+18>>1]=(c[l>>2]|0)+((c[n>>2]|0)-(c[j>>2]|0)&65535);if((e[(c[k>>2]|0)+18>>1]|0|0)<4)b[(c[k>>2]|0)+18>>1]=4;b[(c[k>>2]|0)+16>>1]=c[l>>2];i=o;return}function Rt(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+32|0;n=l+20|0;g=l+16|0;h=l+12|0;j=l+8|0;m=l+4|0;k=l;c[n>>2]=a;c[g>>2]=d;c[h>>2]=f;c[j>>2]=e[(c[n>>2]|0)+12>>1];c[m>>2]=e[(c[n>>2]|0)+10>>1];c[k>>2]=(c[j>>2]|0)+((((c[(c[h>>2]|0)+12>>2]|0)-(c[j>>2]|0)|0)>>>0)%(((c[(c[(c[n>>2]|0)+52>>2]|0)+36>>2]|0)-4|0)>>>0)|0);if((c[k>>2]|0)<=(c[m>>2]|0))b[(c[h>>2]|0)+16>>1]=c[k>>2];else b[(c[h>>2]|0)+16>>1]=c[j>>2];b[(c[h>>2]|0)+18>>1]=((c[(c[h>>2]|0)+8>>2]|0)+(e[(c[h>>2]|0)+16>>1]|0)-(c[g>>2]|0)&65535)+4;i=l;return}function tE(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=i;i=i+96|0;r=F+80|0;s=F+76|0;k=F+72|0;t=F+68|0;u=F+64|0;G=F+60|0;E=F+56|0;z=F+52|0;m=F+48|0;n=F+44|0;p=F+40|0;v=F+36|0;q=F+84|0;w=F+32|0;A=F+28|0;x=F+24|0;C=F+20|0;o=F+16|0;l=F+12|0;y=F+8|0;D=F+4|0;B=F;c[s>>2]=e;c[k>>2]=f;c[t>>2]=g;c[u>>2]=h;c[G>>2]=j;c[E>>2]=0;c[w>>2]=c[c[s>>2]>>2];c[A>>2]=0;if(!(vE(c[w>>2]|0,c[k>>2]|0,c[G>>2]|0,q)|0)){c[r>>2]=0;G=c[r>>2]|0;i=F;return G|0}c[n>>2]=c[(c[k>>2]|0)+20>>2];c[m>>2]=c[(c[(c[n>>2]|0)+4>>2]|0)+20>>2];if(((d[c[m>>2]>>0]|0)==152?((Nx(c[m>>2]|0)|0)<<24>>24|0)==66:0)?(d[(c[(c[m>>2]|0)+44>>2]|0)+42>>0]&16|0)==0:0){c[z>>2]=Tx(c[c[(c[n>>2]|0)+4>>2]>>2]|0)|0;c[x>>2]=d[c[z>>2]>>0];if((c[x>>2]|0)!=135){if((c[x>>2]|0)==97)c[E>>2]=c[(c[z>>2]|0)+8>>2]}else{c[o>>2]=c[(c[s>>2]|0)+480>>2];c[l>>2]=b[(c[z>>2]|0)+32>>1];c[A>>2]=wE(c[o>>2]|0,c[l>>2]|0,65)|0;if((c[A>>2]|0)!=0?(fe(c[A>>2]|0)|0)==3:0)c[E>>2]=ae(c[A>>2]|0)|0;xE(c[(c[s>>2]|0)+8>>2]|0,c[l>>2]|0)}do if(c[E>>2]|0){c[v>>2]=0;while(1){G=a[(c[E>>2]|0)+(c[v>>2]|0)>>0]|0;c[p>>2]=G;if(((G|0)!=0?(c[p>>2]|0)!=(a[q>>0]|0):0)?(c[p>>2]|0)!=(a[q+1>>0]|0):0)k=(c[p>>2]|0)!=(a[q+2>>0]|0);else k=0;l=c[v>>2]|0;if(!k)break;c[v>>2]=l+1}if((l|0)!=0?255!=(d[(c[E>>2]|0)+((c[v>>2]|0)-1)>>0]|0):0){if((c[p>>2]|0)==(a[q>>0]|0))k=(a[(c[E>>2]|0)+((c[v>>2]|0)+1)>>0]|0)==0;else k=0;c[c[u>>2]>>2]=k&1;c[y>>2]=Jv(c[w>>2]|0,97,c[E>>2]|0)|0;if(c[y>>2]|0)a[(c[(c[y>>2]|0)+8>>2]|0)+(c[v>>2]|0)>>0]=0;c[c[t>>2]>>2]=c[y>>2];if((c[x>>2]|0)!=135)break;c[D>>2]=c[(c[s>>2]|0)+8>>2];xE(c[D>>2]|0,b[(c[z>>2]|0)+32>>1]|0);if(!(c[c[u>>2]>>2]|0))break;if(!(a[(c[(c[z>>2]|0)+8>>2]|0)+1>>0]|0))break;c[B>>2]=Wz(c[s>>2]|0)|0;yA(c[s>>2]|0,c[z>>2]|0,c[B>>2]|0)|0;G=c[D>>2]|0;yE(G,(Bz(c[D>>2]|0)|0)-1|0,0);_z(c[s>>2]|0,c[B>>2]|0);break}c[E>>2]=0}while(0);c[C>>2]=(c[E>>2]|0)!=0&1;$g(c[A>>2]|0);c[r>>2]=c[C>>2];G=c[r>>2]|0;i=F;return G|0}c[r>>2]=0;G=c[r>>2]|0;i=F;return G|0; +}function uE(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+64|0;k=n+56|0;h=n+52|0;l=n+48|0;m=n+16|0;g=n+8|0;f=n+4|0;j=n;c[h>>2]=b;c[l>>2]=e;c[m>>2]=c[1570];c[m+4>>2]=c[1571];c[m+8>>2]=c[1572];c[m+12>>2]=c[1573];c[m+16>>2]=c[1574];c[m+20>>2]=c[1575];c[m+24>>2]=c[1576];c[m+28>>2]=c[1577];if((d[c[h>>2]>>0]|0|0)!=151){c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}c[g>>2]=c[(c[h>>2]|0)+20>>2];if((c[g>>2]|0)!=0?(c[c[g>>2]>>2]|0)==2:0){c[f>>2]=c[(c[(c[g>>2]|0)+4>>2]|0)+20>>2];if((d[c[f>>2]>>0]|0|0)==152?((d[(c[(c[f>>2]|0)+44>>2]|0)+42>>0]|0)&16|0)!=0:0){c[j>>2]=0;while(1){if((c[j>>2]|0)>=4){f=14;break}e=(Td(c[(c[h>>2]|0)+8>>2]|0,c[m+(c[j>>2]<<3)>>2]|0)|0)==0;b=c[j>>2]|0;if(e){f=12;break}c[j>>2]=b+1}if((f|0)==12){a[c[l>>2]>>0]=a[m+(b<<3)+4>>0]|0;c[k>>2]=1;m=c[k>>2]|0;i=n;return m|0}else if((f|0)==14){c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}}c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}function vE(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;n=p+4|0;o=p;c[k>>2]=b;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;if(((d[c[l>>2]>>0]|0|0)==151?(c[(c[l>>2]|0)+20>>2]|0)!=0:0)?(c[c[(c[l>>2]|0)+20>>2]>>2]|0)==2:0){f=c[k>>2]|0;g=c[(c[l>>2]|0)+8>>2]|0;c[o>>2]=gi(f,g,If(c[(c[l>>2]|0)+8>>2]|0)|0,2,1,0)|0;if((c[o>>2]|0)!=0?((e[(c[o>>2]|0)+2>>1]|0)&4|0)!=0:0){g=c[n>>2]|0;f=c[(c[o>>2]|0)+4>>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;c[c[m>>2]>>2]=((e[(c[o>>2]|0)+2>>1]|0)&8|0)==0&1;c[j>>2]=1;g=c[j>>2]|0;i=p;return g|0}c[j>>2]=0;g=c[j>>2]|0;i=p;return g|0}c[j>>2]=0;g=c[j>>2]|0;i=p;return g|0}function wE(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+16|0;h=n+12|0;j=n+8|0;k=n+20|0;l=n+4|0;m=n;c[h>>2]=b;c[j>>2]=d;a[k>>0]=f;if((c[h>>2]|0)!=0?(c[l>>2]=(c[(c[h>>2]|0)+60>>2]|0)+(((c[j>>2]|0)-1|0)*40|0),0==((e[(c[l>>2]|0)+8>>1]|0)&1|0)):0){c[m>>2]=Vh(c[c[h>>2]>>2]|0)|0;if(c[m>>2]|0){gh(c[m>>2]|0,c[l>>2]|0)|0;lx(c[m>>2]|0,a[k>>0]|0,1)}c[g>>2]=c[m>>2];b=c[g>>2]|0;i=n;return b|0}c[g>>2]=0;b=c[g>>2]|0;i=n;return b|0}function xE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if((c[e>>2]|0)>32){c[(c[d>>2]|0)+188>>2]=-1;i=f;return}else{a=(c[d>>2]|0)+188|0;c[a>>2]=c[a>>2]|1<<(c[e>>2]|0)-1;i=f;return}}function yE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;h=e;c[g>>2]=a;c[f>>2]=b;c[h>>2]=d;d=c[h>>2]|0;c[(Mz(c[g>>2]|0,c[f>>2]|0)|0)+12>>2]=d;i=e;return}function zE(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+8|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=b;b=c[g>>2]|0;if((e[(c[f>>2]|0)+18>>1]|0|0)!=1024){c[d>>2]=(b|0)==0?c[f>>2]|0:0;g=c[d>>2]|0;i=h;return g|0}if((b|0)<(c[(c[(c[f>>2]|0)+12>>2]|0)+12>>2]|0)){c[d>>2]=(c[(c[(c[f>>2]|0)+12>>2]|0)+20>>2]|0)+((c[g>>2]|0)*48|0);g=c[d>>2]|0;i=h;return g|0}else{c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}return 0}function AE(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;m=s+28|0;n=s+24|0;j=s+20|0;k=s+16|0;o=s+32|0;l=s+12|0;r=s+8|0;q=s+4|0;p=s;c[m>>2]=d;c[n>>2]=f;c[j>>2]=g;c[k>>2]=h;b[o>>1]=e[(c[j>>2]|0)+18>>1]|0|(e[(c[k>>2]|0)+18>>1]|0);if(!((e[(c[j>>2]|0)+18>>1]|0)&62)){i=s;return}if(!((e[(c[k>>2]|0)+18>>1]|0)&62)){i=s;return}if(((e[o>>1]|0)&26|0)!=(e[o>>1]|0|0)?((e[o>>1]|0)&38|0)!=(e[o>>1]|0|0):0){i=s;return}if(py(c[(c[c[j>>2]>>2]|0)+12>>2]|0,c[(c[c[k>>2]>>2]|0)+12>>2]|0,-1)|0){i=s;return}if(py(c[(c[c[j>>2]>>2]|0)+16>>2]|0,c[(c[c[k>>2]>>2]|0)+16>>2]|0,-1)|0){i=s;return}do if((e[o>>1]|0)&(e[o>>1]|0)-1)if((e[o>>1]|0)&24){b[o>>1]=8;break}else{b[o>>1]=32;break}while(0);c[l>>2]=c[c[c[c[n>>2]>>2]>>2]>>2];c[r>>2]=ny(c[l>>2]|0,c[c[j>>2]>>2]|0,0)|0;if(!(c[r>>2]|0)){i=s;return}c[q>>2]=79;while(1){j=c[q>>2]|0;if((e[o>>1]|0|0)==(2<<(c[q>>2]|0)-79|0))break;c[q>>2]=j+1}a[c[r>>2]>>0]=j;c[p>>2]=nE(c[n>>2]|0,c[r>>2]|0,3)|0;jE(c[m>>2]|0,c[n>>2]|0,c[p>>2]|0);i=s;return}function BE(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;h=i;i=i+48|0;k=h+36|0;l=h+32|0;j=h+28|0;g=h;c[k>>2]=b;c[l>>2]=e;c[j>>2]=f;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;a[g+20>>0]=0;c[g+4>>2]=199;c[g+24>>2]=c[l>>2];by(g,c[k>>2]|0)|0;if(c[j>>2]|0){l=g+20|0;l=a[l>>0]|0;l=l<<24>>24!=0;l=l^1;l=l&1;i=h;return l|0}l=g+20|0;a[l>>0]=(d[l>>0]|0)&-3;l=g+20|0;l=a[l>>0]|0;l=l<<24>>24!=0;l=l^1;l=l&1;i=h;return l|0}function CE(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;l=n+8|0;k=n;f=n+28|0;g=n+24|0;h=n+20|0;m=n+16|0;j=n+12|0;c[f>>2]=a;c[g>>2]=d;c[h>>2]=e;a=c[c[f>>2]>>2]|0;d=c[c[h>>2]>>2]|0;if((b[(c[h>>2]|0)+32>>1]|0)>=0){h=c[(c[(c[h>>2]|0)+4>>2]|0)+((b[(c[h>>2]|0)+32>>1]|0)*24|0)>>2]|0;c[k>>2]=d;c[k+4>>2]=h;c[m>>2]=Bh(a,31016,k)|0;c[j>>2]=1555;h=c[f>>2]|0;k=c[j>>2]|0;l=c[g>>2]|0;m=c[m>>2]|0;bA(h,k,l,m,-1,2);i=n;return}else{c[l>>2]=d;c[m>>2]=Bh(a,36074,l)|0;c[j>>2]=2579;h=c[f>>2]|0;k=c[j>>2]|0;l=c[g>>2]|0;m=c[m>>2]|0;bA(h,k,l,m,-1,2);i=n;return}}function DE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;l=m+20|0;n=m+16|0;f=m+12|0;g=m+8|0;h=m+4|0;j=m;c[n>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;a:do if(c[(c[c[n>>2]>>2]|0)+24>>2]&524288){d=c[f>>2]|0;if(!(c[g>>2]|0)){if(Ex(d)|0)d=1;else d=(c[(c[f>>2]|0)+16>>2]|0)!=0;c[l>>2]=d&1;n=c[l>>2]|0;i=m;return n|0}c[j>>2]=c[d+16>>2];while(1){d=c[f>>2]|0;if(!(c[j>>2]|0))break;if(KC(d,c[j>>2]|0,c[g>>2]|0,c[h>>2]|0)|0){k=9;break}c[j>>2]=c[(c[j>>2]|0)+4>>2]}if((k|0)==9){c[l>>2]=1;n=c[l>>2]|0;i=m;return n|0}c[j>>2]=Ex(d)|0;while(1){if(!(c[j>>2]|0))break a;if(NC(c[f>>2]|0,c[j>>2]|0,c[g>>2]|0,c[h>>2]|0)|0)break;c[j>>2]=c[(c[j>>2]|0)+12>>2]}c[l>>2]=1;n=c[l>>2]|0;i=m;return n|0}while(0);c[l>>2]=0;n=c[l>>2]|0;i=m;return n|0}function EE(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[f>>2]=b;b=c[f>>2]|0;if(c[(c[f>>2]|0)+416>>2]|0)b=c[b+416>>2]|0;c[d>>2]=b;a[(c[d>>2]|0)+20>>0]=1;i=e;return}function FE(e,f,g,h,j,k,l,m,n,o,p){e=e|0;f=f|0;g=g|0;h=h|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;K=i;i=i+64|0;q=K+48|0;r=K+44|0;t=K+40|0;u=K+36|0;v=K+32|0;w=K+28|0;x=K+52|0;y=K+58|0;z=K+57|0;A=K+56|0;s=K+24|0;I=K+20|0;E=K+16|0;D=K+12|0;G=K+55|0;F=K+8|0;C=K+4|0;B=K;H=K+54|0;c[q>>2]=e;c[r>>2]=f;c[t>>2]=g;c[u>>2]=h;c[v>>2]=j;c[w>>2]=k;b[x>>1]=l;a[y>>0]=m;a[z>>0]=n;a[A>>0]=o;c[s>>2]=p;c[I>>2]=c[(c[q>>2]|0)+8>>2];c[E>>2]=0;c[D>>2]=Cz(c[I>>2]|0)|0;a[G>>0]=(d[(c[r>>2]|0)+42>>0]&32|0)==0?70:68;if(!(d[A>>0]|0))Eh(c[I>>2]|0,d[G>>0]|0,c[u>>2]|0,c[D>>2]|0,c[w>>2]|0,b[x>>1]|0)|0;g=(DE(c[q>>2]|0,c[r>>2]|0,0,0)|0)!=0;if(g|(c[t>>2]|0)!=0){c[F>>2]=HE(c[q>>2]|0,c[t>>2]|0,0,0,3,c[r>>2]|0,d[z>>0]|0)|0;g=IE(c[q>>2]|0,c[r>>2]|0)|0;c[F>>2]=c[F>>2]|g;c[E>>2]=(c[(c[q>>2]|0)+76>>2]|0)+1;g=(c[q>>2]|0)+76|0;c[g>>2]=(c[g>>2]|0)+(1+(b[(c[r>>2]|0)+34>>1]|0));Rw(c[I>>2]|0,30,c[w>>2]|0,c[E>>2]|0)|0;c[C>>2]=0;while(1){if((c[C>>2]|0)>=(b[(c[r>>2]|0)+34>>1]|0))break;if((c[F>>2]|0)!=-1){if((c[C>>2]|0)<=31?(c[F>>2]&1<>2]|0)!=0:0)J=9}else J=9;if((J|0)==9){J=0;tA(c[I>>2]|0,c[r>>2]|0,c[u>>2]|0,c[C>>2]|0,(c[E>>2]|0)+(c[C>>2]|0)+1|0)}c[C>>2]=(c[C>>2]|0)+1}c[B>>2]=Bz(c[I>>2]|0)|0;BC(c[q>>2]|0,c[t>>2]|0,109,0,1,c[r>>2]|0,c[E>>2]|0,d[z>>0]|0,c[D>>2]|0);J=c[B>>2]|0;if((J|0)<(Bz(c[I>>2]|0)|0))Eh(c[I>>2]|0,d[G>>0]|0,c[u>>2]|0,c[D>>2]|0,c[w>>2]|0,b[x>>1]|0)|0;GC(c[q>>2]|0,c[r>>2]|0,c[E>>2]|0,0,0,0)}if(c[(c[r>>2]|0)+12>>2]|0){e=c[q>>2]|0;H=c[r>>2]|0;G=c[E>>2]|0;JE(e,H,0,G,0,0);G=c[q>>2]|0;H=c[t>>2]|0;e=c[r>>2]|0;f=c[E>>2]|0;g=a[z>>0]|0;g=g&255;J=c[D>>2]|0;BC(G,H,109,0,2,e,f,g,J);I=c[I>>2]|0;J=c[D>>2]|0;Gz(I,J);i=K;return}a[H>>0]=0;GE(c[q>>2]|0,c[r>>2]|0,c[u>>2]|0,c[v>>2]|0,0,c[s>>2]|0);Rw(c[I>>2]|0,95,c[u>>2]|0,(d[y>>0]|0)!=0?1:0)|0;if(a[y>>0]|0)Ih(c[I>>2]|0,-1,c[c[r>>2]>>2]|0,0);if(d[A>>0]|0)Fh(c[I>>2]|0,4);if((c[s>>2]|0)>=0)xz(c[I>>2]|0,95,c[s>>2]|0)|0;if((d[A>>0]|0)==2)a[H>>0]=d[H>>0]|2;Fh(c[I>>2]|0,a[H>>0]|0);e=c[q>>2]|0;H=c[r>>2]|0;G=c[E>>2]|0;JE(e,H,0,G,0,0);G=c[q>>2]|0;H=c[t>>2]|0;e=c[r>>2]|0;f=c[E>>2]|0;g=a[z>>0]|0;g=g&255;J=c[D>>2]|0;BC(G,H,109,0,2,e,f,g,J);I=c[I>>2]|0;J=c[D>>2]|0;Gz(I,J);i=K;return}function GE(a,e,f,g,h,j){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+64|0;l=y+48|0;k=y+44|0;m=y+40|0;n=y+36|0;o=y+32|0;p=y+28|0;q=y+24|0;v=y+20|0;r=y+16|0;s=y+12|0;u=y+8|0;w=y+4|0;t=y;c[l>>2]=a;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;c[v>>2]=-1;c[u>>2]=0;c[w>>2]=c[(c[l>>2]|0)+8>>2];if(!((d[(c[k>>2]|0)+42>>0]|0)&32))h=0;else h=Ej(c[k>>2]|0)|0;c[t>>2]=h;c[q>>2]=0;c[s>>2]=c[(c[k>>2]|0)+8>>2];while(1){if(!(c[s>>2]|0))break;if(!((c[o>>2]|0)!=0?(c[(c[o>>2]|0)+(c[q>>2]<<2)>>2]|0)==0:0))x=7;if(((x|0)==7?(x=0,(c[s>>2]|0)!=(c[t>>2]|0)):0)?((c[n>>2]|0)+(c[q>>2]|0)|0)!=(c[p>>2]|0):0){c[v>>2]=Xz(c[l>>2]|0,c[s>>2]|0,c[m>>2]|0,0,1,r,c[u>>2]|0,c[v>>2]|0)|0;h=c[s>>2]|0;if((d[(c[s>>2]|0)+55>>0]|0)>>>3&1)h=b[h+50>>1]|0;else h=b[h+52>>1]|0;Vw(c[w>>2]|0,111,(c[n>>2]|0)+(c[q>>2]|0)|0,c[v>>2]|0,h&65535)|0;Yz(c[l>>2]|0,c[r>>2]|0);c[u>>2]=c[s>>2]}c[q>>2]=(c[q>>2]|0)+1;c[s>>2]=c[(c[s>>2]|0)+20>>2]}i=y;return}function HE(a,b,e,f,g,h,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+48|0;k=u+40|0;v=u+36|0;l=u+32|0;m=u+28|0;n=u+24|0;o=u+20|0;p=u+16|0;r=u+12|0;q=u+8|0;s=u+4|0;t=u;c[k>>2]=a;c[v>>2]=b;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;c[r>>2]=(c[l>>2]|0)!=0?110:109;c[q>>2]=0;c[s>>2]=c[v>>2];while(1){if(!(c[s>>2]|0))break;if((((d[(c[s>>2]|0)+8>>0]|0|0)==(c[r>>2]|0)?(c[n>>2]&(d[(c[s>>2]|0)+9>>0]|0)|0)!=0:0)?(MF(c[(c[s>>2]|0)+16>>2]|0,c[l>>2]|0)|0)!=0:0)?(c[t>>2]=ME(c[k>>2]|0,c[s>>2]|0,c[o>>2]|0,c[p>>2]|0)|0,(c[t>>2]|0)!=0):0)c[q>>2]=c[q>>2]|c[(c[t>>2]|0)+16+(c[m>>2]<<2)>>2];c[s>>2]=c[(c[s>>2]|0)+32>>2]}i=u;return c[q>>2]|0}function IE(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;j=m+12|0;k=m+8|0;h=m+4|0;l=m;c[f>>2]=a;c[g>>2]=d;c[j>>2]=0;if(!(c[(c[c[f>>2]>>2]|0)+24>>2]&524288)){l=c[j>>2]|0;i=m;return l|0}c[k>>2]=c[(c[g>>2]|0)+16>>2];while(1){if(!(c[k>>2]|0))break;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[(c[k>>2]|0)+20>>2]|0))break;if((c[(c[k>>2]|0)+36+(c[h>>2]<<3)>>2]|0)>31)a=-1;else a=1<>2]|0)+36+(c[h>>2]<<3)>>2];c[j>>2]=c[j>>2]|a;c[h>>2]=(c[h>>2]|0)+1}c[k>>2]=c[(c[k>>2]|0)+4>>2]}c[k>>2]=Ex(c[g>>2]|0)|0;while(1){if(!(c[k>>2]|0))break;c[l>>2]=0;cC(c[f>>2]|0,c[g>>2]|0,c[k>>2]|0,l,0)|0;a:do if(c[l>>2]|0){c[h>>2]=0;while(1){if((c[h>>2]|0)>=(e[(c[l>>2]|0)+50>>1]|0))break a;if((b[(c[(c[l>>2]|0)+4>>2]|0)+(c[h>>2]<<1)>>1]|0)>31)a=-1;else a=1<>2]|0)+4>>2]|0)+(c[h>>2]<<1)>>1];c[j>>2]=c[j>>2]|a;c[h>>2]=(c[h>>2]|0)+1}}while(0);c[k>>2]=c[(c[k>>2]|0)+12>>2]}l=c[j>>2]|0;i=m;return l|0}function JE(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+32|0;h=r+28|0;j=r+24|0;k=r+20|0;l=r+16|0;m=r+12|0;n=r+8|0;p=r+4|0;o=r;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;if(!(c[(c[c[h>>2]>>2]|0)+24>>2]&524288)){i=r;return}c[p>>2]=Ex(c[j>>2]|0)|0;while(1){if(!(c[p>>2]|0))break;if(!((c[m>>2]|0)!=0?(NC(c[j>>2]|0,c[p>>2]|0,c[m>>2]|0,c[n>>2]|0)|0)==0:0))q=6;if((q|0)==6?(q=0,c[o>>2]=KE(c[h>>2]|0,c[j>>2]|0,c[p>>2]|0,c[k>>2]|0)|0,(c[o>>2]|0)!=0):0)LE(c[h>>2]|0,c[o>>2]|0,c[j>>2]|0,c[l>>2]|0,2,0);c[p>>2]=c[(c[p>>2]|0)+12>>2]}i=r;return}function KE(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+144|0;j=N+136|0;k=N+132|0;l=N+128|0;m=N+124|0;n=N+120|0;q=N+116|0;o=N+112|0;D=N+108|0;s=N+104|0;L=N+100|0;u=N+96|0;x=N+92|0;p=N+88|0;C=N+84|0;F=N+80|0;y=N+76|0;B=N+72|0;r=N+68|0;E=N+64|0;J=N+56|0;I=N+48|0;H=N+40|0;K=N+32|0;t=N+28|0;w=N+24|0;z=N+20|0;v=N+16|0;G=N+8|0;A=N;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=c[c[k>>2]>>2];c[s>>2]=(c[n>>2]|0)!=0&1;c[o>>2]=d[(c[m>>2]|0)+25+(c[s>>2]|0)>>0];c[D>>2]=c[(c[m>>2]|0)+28+(c[s>>2]<<2)>>2];if(!((c[o>>2]|0)==0|(c[D>>2]|0)!=0)){c[x>>2]=0;c[p>>2]=0;c[C>>2]=0;c[F>>2]=0;c[y>>2]=0;c[B>>2]=0;c[E>>2]=0;if(cC(c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,x,p)|0){c[j>>2]=0;M=c[j>>2]|0;i=N;return M|0}c[r>>2]=0;while(1){if((c[r>>2]|0)>=(c[(c[m>>2]|0)+20>>2]|0))break;c[J>>2]=c[1578];c[J+4>>2]=c[1579];c[I>>2]=c[1580];c[I+4>>2]=c[1581];if(c[p>>2]|0)h=c[(c[p>>2]|0)+(c[r>>2]<<2)>>2]|0;else h=c[(c[m>>2]|0)+36>>2]|0;c[t>>2]=h;if(c[x>>2]|0)h=b[(c[(c[x>>2]|0)+4>>2]|0)+(c[r>>2]<<1)>>1]|0;else h=b[(c[l>>2]|0)+32>>1]|0;Cy(K,c[(c[(c[l>>2]|0)+4>>2]|0)+((h<<16>>16)*24|0)>>2]|0);Cy(H,c[(c[(c[c[m>>2]>>2]|0)+4>>2]|0)+((c[t>>2]|0)*24|0)>>2]|0);e=c[k>>2]|0;g=c[k>>2]|0;f=cz(c[q>>2]|0,27,J,0)|0;f=rv(g,122,f,cz(c[q>>2]|0,27,K,0)|0,0)|0;c[w>>2]=rv(e,79,f,cz(c[q>>2]|0,27,H,0)|0,0)|0;c[F>>2]=az(c[q>>2]|0,c[F>>2]|0,c[w>>2]|0)|0;if(c[n>>2]|0){h=c[k>>2]|0;e=c[k>>2]|0;g=cz(c[q>>2]|0,27,J,0)|0;g=rv(e,122,g,cz(c[q>>2]|0,27,K,0)|0,0)|0;e=c[k>>2]|0;f=cz(c[q>>2]|0,27,I,0)|0;c[w>>2]=rv(h,73,g,rv(e,122,f,cz(c[q>>2]|0,27,K,0)|0,0)|0,0)|0;c[E>>2]=az(c[q>>2]|0,c[E>>2]|0,c[w>>2]|0)|0}if((c[o>>2]|0)!=6?(c[o>>2]|0)!=9|(c[n>>2]|0)!=0:0){do if((c[o>>2]|0)!=9){if((c[o>>2]|0)!=8){c[z>>2]=rv(c[k>>2]|0,101,0,0,0)|0;break}c[v>>2]=c[(c[(c[c[m>>2]>>2]|0)+4>>2]|0)+((c[t>>2]|0)*24|0)+4>>2];if(c[v>>2]|0){c[z>>2]=ny(c[q>>2]|0,c[v>>2]|0,0)|0;break}else{c[z>>2]=rv(c[k>>2]|0,101,0,0,0)|0;break}}else{e=c[k>>2]|0;f=cz(c[q>>2]|0,27,I,0)|0;c[z>>2]=rv(e,122,f,cz(c[q>>2]|0,27,K,0)|0,0)|0}while(0);c[y>>2]=Gv(c[k>>2]|0,c[y>>2]|0,c[z>>2]|0)|0;Hv(c[k>>2]|0,c[y>>2]|0,H,0)}c[r>>2]=(c[r>>2]|0)+1}Sf(c[q>>2]|0,c[p>>2]|0);c[L>>2]=c[c[c[m>>2]>>2]>>2];c[u>>2]=If(c[L>>2]|0)|0;if((c[o>>2]|0)==6){c[G>>2]=c[L>>2];c[G+4>>2]=c[u>>2];c[A>>2]=Jv(c[q>>2]|0,57,36044)|0;if(c[A>>2]|0)a[(c[A>>2]|0)+1>>0]=2;I=c[k>>2]|0;J=Gv(c[k>>2]|0,0,c[A>>2]|0)|0;K=Nv(c[q>>2]|0,0,G,0)|0;c[B>>2]=Fv(I,J,K,c[F>>2]|0,0,0,0,0,0,0)|0;c[F>>2]=0}K=(c[q>>2]|0)+248|0;c[K>>2]=(c[K>>2]|0)+1;c[D>>2]=ph(c[q>>2]|0,72+(c[u>>2]|0)+1|0,0)|0;if((c[D>>2]|0)!=0?(K=(c[D>>2]|0)+36|0,c[(c[D>>2]|0)+28>>2]=K,c[C>>2]=K,c[(c[C>>2]|0)+12>>2]=(c[C>>2]|0)+36,iR(c[(c[C>>2]|0)+12>>2]|0,c[L>>2]|0,c[u>>2]|0)|0,L=ny(c[q>>2]|0,c[F>>2]|0,1)|0,c[(c[C>>2]|0)+16>>2]=L,L=vy(c[q>>2]|0,c[y>>2]|0,1)|0,c[(c[C>>2]|0)+20>>2]=L,L=Hx(c[q>>2]|0,c[B>>2]|0,1)|0,c[(c[C>>2]|0)+8>>2]=L,(c[E>>2]|0)!=0):0){c[E>>2]=rv(c[k>>2]|0,19,c[E>>2]|0,0,0)|0;L=ny(c[q>>2]|0,c[E>>2]|0,1)|0;c[(c[D>>2]|0)+12>>2]=L}L=(c[q>>2]|0)+248|0;c[L>>2]=(c[L>>2]|0)+-1;Zu(c[q>>2]|0,c[F>>2]|0);Zu(c[q>>2]|0,c[E>>2]|0);Vu(c[q>>2]|0,c[y>>2]|0);Wu(c[q>>2]|0,c[B>>2]|0);if((d[(c[q>>2]|0)+65>>0]|0|0)==1){LF(c[q>>2]|0,c[D>>2]|0);c[j>>2]=0;M=c[j>>2]|0;i=N;return M|0}switch(c[o>>2]|0){case 6:{a[c[C>>2]>>0]=119;break}case 9:{if(c[n>>2]|0)M=38;else a[c[C>>2]>>0]=109;break}default:M=38}if((M|0)==38)a[c[C>>2]>>0]=110;c[(c[C>>2]|0)+4>>2]=c[D>>2];c[(c[D>>2]|0)+20>>2]=c[(c[l>>2]|0)+64>>2];c[(c[D>>2]|0)+24>>2]=c[(c[l>>2]|0)+64>>2];c[(c[m>>2]|0)+28+(c[s>>2]<<2)>>2]=c[D>>2];a[(c[D>>2]|0)+8>>0]=(c[n>>2]|0)!=0?110:109}c[j>>2]=c[D>>2];M=c[j>>2]|0;i=N;return M|0}function LE(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=i;i=i+48|0;j=p+32|0;h=p+28|0;r=p+24|0;k=p+20|0;q=p+16|0;l=p+12|0;o=p+8|0;n=p+4|0;m=p;c[j>>2]=a;c[h>>2]=b;c[r>>2]=d;c[k>>2]=e;c[q>>2]=f;c[l>>2]=g;c[o>>2]=Pw(c[j>>2]|0)|0;c[n>>2]=ME(c[j>>2]|0,c[h>>2]|0,c[r>>2]|0,c[q>>2]|0)|0;if(!(c[n>>2]|0)){i=p;return}if(c[c[h>>2]>>2]|0)h=0==(c[(c[c[j>>2]>>2]|0)+24>>2]&262144|0);else h=0;c[m>>2]=h&1;e=c[o>>2]|0;k=c[k>>2]|0;q=c[l>>2]|0;l=(c[j>>2]|0)+76|0;r=(c[l>>2]|0)+1|0;c[l>>2]=r;Uw(e,132,k,q,r,c[(c[n>>2]|0)+8>>2]|0,-18)|0;Fh(c[o>>2]|0,c[m>>2]&255);i=p;return}function ME(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;l=m+4|0;k=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;e=c[f>>2]|0;if(c[(c[f>>2]|0)+416>>2]|0)e=c[e+416>>2]|0;c[l>>2]=e;c[k>>2]=c[(c[l>>2]|0)+532>>2];while(1){if(!(c[k>>2]|0))break;if((c[c[k>>2]>>2]|0)==(c[g>>2]|0)?(c[(c[k>>2]|0)+12>>2]|0)==(c[j>>2]|0):0)break;c[k>>2]=c[(c[k>>2]|0)+4>>2]}if(c[k>>2]|0){l=c[k>>2]|0;i=m;return l|0}c[k>>2]=NE(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;l=c[k>>2]|0;i=m;return l|0}function NE(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+96|0;w=x;h=x+84|0;j=x+80|0;k=x+76|0;l=x+72|0;m=x+68|0;s=x+64|0;n=x+60|0;p=x+56|0;t=x+52|0;v=x+48|0;u=x+16|0;q=x+12|0;r=x+8|0;o=x+4|0;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;g=c[j>>2]|0;if(c[(c[j>>2]|0)+416>>2]|0)g=c[g+416>>2]|0;c[s>>2]=g;c[n>>2]=c[c[j>>2]>>2];c[t>>2]=0;c[q>>2]=0;c[o>>2]=0;c[p>>2]=ph(c[n>>2]|0,24,0)|0;if(!(c[p>>2]|0)){c[h>>2]=0;w=c[h>>2]|0;i=x;return w|0}c[(c[p>>2]|0)+4>>2]=c[(c[s>>2]|0)+532>>2];c[(c[s>>2]|0)+532>>2]=c[p>>2];e=ph(c[n>>2]|0,28,0)|0;c[q>>2]=e;c[(c[p>>2]|0)+8>>2]=e;if(!(c[q>>2]|0)){c[h>>2]=0;w=c[h>>2]|0;i=x;return w|0}OE(c[(c[s>>2]|0)+8>>2]|0,c[q>>2]|0);c[c[p>>2]>>2]=c[k>>2];c[(c[p>>2]|0)+12>>2]=c[m>>2];c[(c[p>>2]|0)+16>>2]=-1;c[(c[p>>2]|0)+16+4>>2]=-1;c[r>>2]=ph(c[n>>2]|0,544,0)|0;if(!(c[r>>2]|0)){c[h>>2]=0;w=c[h>>2]|0;i=x;return w|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;c[u+28>>2]=0;c[u>>2]=c[r>>2];c[c[r>>2]>>2]=c[n>>2];c[(c[r>>2]|0)+420>>2]=c[l>>2];c[(c[r>>2]|0)+416>>2]=c[s>>2];c[(c[r>>2]|0)+496>>2]=c[c[k>>2]>>2];a[(c[r>>2]|0)+440>>0]=a[(c[k>>2]|0)+8>>0]|0;c[(c[r>>2]|0)+428>>2]=c[(c[j>>2]|0)+428>>2];c[v>>2]=Pw(c[r>>2]|0)|0;if(c[v>>2]|0){e=c[v>>2]|0;l=c[n>>2]|0;c[w>>2]=c[c[k>>2]>>2];Ih(e,-1,Bh(l,35740,w)|0,-1);if(c[(c[k>>2]|0)+12>>2]|0){c[t>>2]=ny(c[n>>2]|0,c[(c[k>>2]|0)+12>>2]|0,0)|0;if(0==(fy(u,c[t>>2]|0)|0)?(d[(c[n>>2]|0)+65>>0]|0|0)==0:0){c[o>>2]=Cz(c[v>>2]|0)|0;LA(c[r>>2]|0,c[t>>2]|0,c[o>>2]|0,16)}Zu(c[n>>2]|0,c[t>>2]|0)}PE(c[r>>2]|0,c[(c[k>>2]|0)+28>>2]|0,c[m>>2]|0)|0;if(c[o>>2]|0)Gz(c[v>>2]|0,c[o>>2]|0);Yw(c[v>>2]|0,21)|0;QE(c[j>>2]|0,c[r>>2]|0);if(!(d[(c[n>>2]|0)+65>>0]|0)){w=RE(c[v>>2]|0,(c[q>>2]|0)+4|0,(c[s>>2]|0)+400|0)|0;c[c[q>>2]>>2]=w}c[(c[q>>2]|0)+8>>2]=c[(c[r>>2]|0)+76>>2];c[(c[q>>2]|0)+12>>2]=c[(c[r>>2]|0)+72>>2];c[(c[q>>2]|0)+16>>2]=c[(c[r>>2]|0)+84>>2];c[(c[q>>2]|0)+20>>2]=c[k>>2];c[(c[p>>2]|0)+16>>2]=c[(c[r>>2]|0)+432>>2];c[(c[p>>2]|0)+16+4>>2]=c[(c[r>>2]|0)+436>>2];Tu(c[v>>2]|0)}Lh(c[r>>2]|0);Sf(c[n>>2]|0,c[r>>2]|0);c[h>>2]=c[p>>2];w=c[h>>2]|0;i=x;return w|0}function OE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;c[(c[f>>2]|0)+24>>2]=c[(c[e>>2]|0)+192>>2];c[(c[e>>2]|0)+192>>2]=c[f>>2];i=d;return}function PE(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;g=o+44|0;p=o+40|0;h=o+36|0;l=o+32|0;n=o+28|0;j=o+24|0;m=o+4|0;k=o;c[g>>2]=b;c[p>>2]=e;c[h>>2]=f;c[n>>2]=c[(c[g>>2]|0)+8>>2];c[j>>2]=c[c[g>>2]>>2];c[l>>2]=c[p>>2];while(1){if(!(c[l>>2]|0))break;if((c[h>>2]|0)==10)f=a[(c[l>>2]|0)+1>>0]|0;else f=c[h>>2]&255;a[(c[g>>2]|0)+441>>0]=f;switch(d[c[l>>2]>>0]|0|0){case 110:{b=c[g>>2]|0;e=KF(c[g>>2]|0,c[l>>2]|0)|0;p=vy(c[j>>2]|0,c[(c[l>>2]|0)+20>>2]|0,0)|0;Tv(b,e,p,ny(c[j>>2]|0,c[(c[l>>2]|0)+16>>2]|0,0)|0,d[(c[g>>2]|0)+441>>0]|0);break}case 108:{b=c[g>>2]|0;e=KF(c[g>>2]|0,c[l>>2]|0)|0;p=Hx(c[j>>2]|0,c[(c[l>>2]|0)+8>>2]|0,0)|0;Uv(b,e,p,nz(c[j>>2]|0,c[(c[l>>2]|0)+24>>2]|0)|0,d[(c[g>>2]|0)+441>>0]|0);break}case 109:{p=c[g>>2]|0;Rv(p,KF(c[g>>2]|0,c[l>>2]|0)|0,ny(c[j>>2]|0,c[(c[l>>2]|0)+16>>2]|0,0)|0);break}default:{c[k>>2]=Hx(c[j>>2]|0,c[(c[l>>2]|0)+8>>2]|0,0)|0;ZA(m,4,0);Cv(c[g>>2]|0,c[k>>2]|0,m)|0;Wu(c[j>>2]|0,c[k>>2]|0)}}if((d[c[l>>2]>>0]|0|0)!=119)Yw(c[n>>2]|0,98)|0;c[l>>2]=c[(c[l>>2]|0)+28>>2]}i=o;return 0}function QE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;b=c[e>>2]|0;if(!(c[(c[d>>2]|0)+68>>2]|0)){c[(c[d>>2]|0)+4>>2]=c[b+4>>2];c[(c[d>>2]|0)+68>>2]=c[(c[e>>2]|0)+68>>2];c[(c[d>>2]|0)+12>>2]=c[(c[e>>2]|0)+12>>2];i=f;return}else{Sf(c[b>>2]|0,c[(c[e>>2]|0)+4>>2]|0);i=f;return}}function RE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f+12|0;h=f+8|0;j=f+4|0;e=f;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[e>>2]=c[(c[g>>2]|0)+4>>2];SE(c[g>>2]|0,c[j>>2]|0);c[c[h>>2]>>2]=c[(c[g>>2]|0)+32>>2];c[(c[g>>2]|0)+4>>2]=0;i=f;return c[e>>2]|0}function SE(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r+28|0;h=r+24|0;k=r+20|0;m=r+16|0;o=r+12|0;p=r+8|0;j=r+4|0;n=r+32|0;l=r;c[g>>2]=e;c[h>>2]=f;c[m>>2]=c[c[h>>2]>>2];c[p>>2]=c[(c[g>>2]|0)+24>>2];c[j>>2]=c[(c[p>>2]|0)+120>>2];f=(c[g>>2]|0)+88|0;b[f>>1]=b[f>>1]&-65|64;f=(c[g>>2]|0)+88|0;b[f>>1]=b[f>>1]&-129;c[o>>2]=c[(c[g>>2]|0)+4>>2];c[k>>2]=(c[(c[g>>2]|0)+32>>2]|0)-1;while(1){if((c[k>>2]|0)<0)break;a[n>>0]=a[c[o>>2]>>0]|0;switch(d[n>>0]|0|0){case 2:{if(c[(c[o>>2]|0)+8>>2]|0){q=(c[g>>2]|0)+88|0;b[q>>1]=b[q>>1]&-65;q=6}else q=6;break}case 0:case 1:{q=6;break}case 9:case 10:case 8:{f=(c[g>>2]|0)+88|0;b[f>>1]=b[f>>1]&-65;f=(c[g>>2]|0)+88|0;b[f>>1]=b[f>>1]&-129|128;break}case 12:{if((c[(c[o>>2]|0)+8>>2]|0)>(c[m>>2]|0))c[m>>2]=c[(c[o>>2]|0)+8>>2];break}case 11:{c[l>>2]=c[(c[o>>2]|0)+-20+4>>2];if((c[l>>2]|0)>(c[m>>2]|0))c[m>>2]=c[l>>2];break}case 3:case 5:case 7:{c[(c[o>>2]|0)+16>>2]=200;a[(c[o>>2]|0)+1>>0]=-19;break}case 4:case 6:{c[(c[o>>2]|0)+16>>2]=201;a[(c[o>>2]|0)+1>>0]=-19;break}default:{}}if((q|0)==6){q=0;f=(c[g>>2]|0)+88|0;b[f>>1]=b[f>>1]&-129|128}a[(c[o>>2]|0)+2>>0]=a[35754+(d[n>>0]|0)>>0]|0;if(((d[(c[o>>2]|0)+2>>0]|0)&1|0)!=0?(c[(c[o>>2]|0)+8>>2]|0)<0:0)c[(c[o>>2]|0)+8>>2]=c[(c[j>>2]|0)+(-1-(c[(c[o>>2]|0)+8>>2]|0)<<2)>>2];c[k>>2]=(c[k>>2]|0)+-1;c[o>>2]=(c[o>>2]|0)+20}Sf(c[c[g>>2]>>2]|0,c[(c[p>>2]|0)+120>>2]|0);c[(c[p>>2]|0)+120>>2]=0;c[(c[p>>2]|0)+116>>2]=0;c[c[h>>2]>>2]=c[m>>2];i=r;return}function TE(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[j>>2]=f;c[k>>2]=g;b[(c[j>>2]|0)+16+18>>1]=0;f=(c[j>>2]|0)+64|0;a[f>>0]=d[f>>0]&-7;c[c[k>>2]>>2]=0;f=c[j>>2]|0;if((d[(c[j>>2]|0)+66>>0]|0)!=1){c[h>>2]=IF(f,c[k>>2]|0)|0;l=c[h>>2]|0;i=m;return l|0}c[l>>2]=c[(c[j>>2]|0)+120+(a[f+68>>0]<<2)>>2];f=(c[j>>2]|0)+80+(a[(c[j>>2]|0)+68>>0]<<1)|0;g=(b[f>>1]|0)+1<<16>>16;b[f>>1]=g;if((g&65535|0)>=(e[(c[l>>2]|0)+18>>1]|0)){l=(c[j>>2]|0)+80+(a[(c[j>>2]|0)+68>>0]<<1)|0;b[l>>1]=(b[l>>1]|0)+-1<<16>>16;c[h>>2]=IF(c[j>>2]|0,c[k>>2]|0)|0;l=c[h>>2]|0;i=m;return l|0}if(a[(c[l>>2]|0)+4>>0]|0){c[h>>2]=0;l=c[h>>2]|0;i=m;return l|0}else{c[h>>2]=JF(c[j>>2]|0)|0;l=c[h>>2]|0;i=m;return l|0}return 0}function UE(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l+8|0;j=l+4|0;k=l;c[j>>2]=f;c[k>>2]=g;c[c[k>>2]>>2]=0;g=(c[j>>2]|0)+64|0;a[g>>0]=d[g>>0]&-15;b[(c[j>>2]|0)+16+18>>1]=0;if(((d[(c[j>>2]|0)+66>>0]|0)==1?(e[(c[j>>2]|0)+80+(a[(c[j>>2]|0)+68>>0]<<1)>>1]|0)!=0:0)?(d[(c[(c[j>>2]|0)+120+(a[(c[j>>2]|0)+68>>0]<<2)>>2]|0)+4>>0]|0)!=0:0){g=(c[j>>2]|0)+80+(a[(c[j>>2]|0)+68>>0]<<1)|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;c[h>>2]=0;g=c[h>>2]|0;i=l;return g|0}c[h>>2]=VE(c[j>>2]|0,c[k>>2]|0)|0;g=c[h>>2]|0;i=l;return g|0}function VE(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;j=p+20|0;k=p+16|0;l=p+12|0;n=p+8|0;m=p+4|0;h=p;c[k>>2]=f;c[l>>2]=g;if((d[(c[k>>2]|0)+66>>0]|0)!=1){if((d[(c[k>>2]|0)+66>>0]|0)>=3)f=WE(c[k>>2]|0)|0;else f=0;c[n>>2]=f;if(c[n>>2]|0){c[j>>2]=c[n>>2];o=c[j>>2]|0;i=p;return o|0}if(!(d[(c[k>>2]|0)+66>>0]|0)){c[c[l>>2]>>2]=1;c[j>>2]=0;o=c[j>>2]|0;i=p;return o|0}if((c[(c[k>>2]|0)+60>>2]|0)!=0?(a[(c[k>>2]|0)+66>>0]=1,g=(c[(c[k>>2]|0)+60>>2]|0)<0,c[(c[k>>2]|0)+60>>2]=0,g):0){c[j>>2]=0;o=c[j>>2]|0;i=p;return o|0}}c[m>>2]=c[(c[k>>2]|0)+120+(a[(c[k>>2]|0)+68>>0]<<2)>>2];do if(a[(c[m>>2]|0)+4>>0]|0){while(1){f=a[(c[k>>2]|0)+68>>0]|0;if(e[(c[k>>2]|0)+80+(a[(c[k>>2]|0)+68>>0]<<1)>>1]|0)break;g=c[k>>2]|0;if(!f){o=17;break}ZE(g)}if((o|0)==17){a[g+66>>0]=0;c[c[l>>2]>>2]=1;c[j>>2]=0;o=c[j>>2]|0;i=p;return o|0}o=(c[k>>2]|0)+80+(f<<1)|0;b[o>>1]=(b[o>>1]|0)+-1<<16>>16;c[m>>2]=c[(c[k>>2]|0)+120+(a[(c[k>>2]|0)+68>>0]<<2)>>2];if((d[(c[m>>2]|0)+2>>0]|0)!=0?(a[(c[m>>2]|0)+4>>0]|0)==0:0){c[n>>2]=UE(c[k>>2]|0,c[l>>2]|0)|0;break}c[n>>2]=0}else{c[h>>2]=e[(c[k>>2]|0)+80+(a[(c[k>>2]|0)+68>>0]<<1)>>1];o=c[k>>2]|0;c[n>>2]=XE(o,$q((c[(c[m>>2]|0)+56>>2]|0)+(e[(c[m>>2]|0)+20>>1]&(d[(c[(c[m>>2]|0)+64>>2]|0)+(c[h>>2]<<1)>>0]<<8|d[(c[(c[m>>2]|0)+64>>2]|0)+(c[h>>2]<<1)+1>>0]))|0)|0)|0;if(!(c[n>>2]|0)){c[n>>2]=YE(c[k>>2]|0)|0;break}c[j>>2]=c[n>>2];o=c[j>>2]|0;i=p;return o|0}while(0);c[j>>2]=c[n>>2];o=c[j>>2]|0;i=p;return o|0}function WE(b){b=b|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;b=c[f>>2]|0;if((d[(c[f>>2]|0)+66>>0]|0|0)==4){c[e>>2]=c[b+60>>2];h=c[e>>2]|0;i=j;return h|0}a[b+66>>0]=0;b=(c[f>>2]|0)+40|0;c[g>>2]=bF(c[f>>2]|0,c[(c[f>>2]|0)+48>>2]|0,c[b>>2]|0,c[b+4>>2]|0,0,h)|0;if(((c[g>>2]|0)==0?(Kd(c[(c[f>>2]|0)+48>>2]|0),c[(c[f>>2]|0)+48>>2]=0,b=(c[f>>2]|0)+60|0,c[b>>2]=c[b>>2]|c[h>>2],(c[(c[f>>2]|0)+60>>2]|0)!=0):0)?(d[(c[f>>2]|0)+66>>0]|0|0)==1:0)a[(c[f>>2]|0)+66>>0]=2;c[e>>2]=c[g>>2];h=c[e>>2]|0;i=j;return h|0}function XE(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[h>>2]=e;c[j>>2]=f;c[k>>2]=c[(c[h>>2]|0)+4>>2];if((a[(c[h>>2]|0)+68>>0]|0)>=19){c[g>>2]=Lj(60332)|0;e=c[g>>2]|0;i=l;return e|0}else{b[(c[h>>2]|0)+16+18>>1]=0;e=(c[h>>2]|0)+64|0;a[e>>0]=d[e>>0]&-7;e=(c[h>>2]|0)+68|0;a[e>>0]=(a[e>>0]|0)+1<<24>>24;b[(c[h>>2]|0)+80+(a[(c[h>>2]|0)+68>>0]<<1)>>1]=0;c[g>>2]=_E(c[k>>2]|0,c[j>>2]|0,(c[h>>2]|0)+120+(a[(c[h>>2]|0)+68>>0]<<2)|0,c[h>>2]|0,d[(c[h>>2]|0)+65>>0]|0)|0;e=c[g>>2]|0;i=l;return e|0}return 0}function YE(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;k=n+16|0;l=n+12|0;j=n+8|0;m=n+4|0;h=n;c[l>>2]=f;c[m>>2]=0;c[h>>2]=0;while(1){f=c[(c[l>>2]|0)+120+(a[(c[l>>2]|0)+68>>0]<<2)>>2]|0;c[h>>2]=f;g=c[h>>2]|0;if(!((a[f+4>>0]|0)!=0^1)){f=5;break}c[j>>2]=$q((c[(c[h>>2]|0)+56>>2]|0)+((d[g+5>>0]|0)+8)|0)|0;b[(c[l>>2]|0)+80+(a[(c[l>>2]|0)+68>>0]<<1)>>1]=b[(c[h>>2]|0)+18>>1]|0;c[m>>2]=XE(c[l>>2]|0,c[j>>2]|0)|0;if(c[m>>2]|0){f=4;break}}if((f|0)==4){c[k>>2]=c[m>>2];m=c[k>>2]|0;i=n;return m|0}else if((f|0)==5){b[(c[l>>2]|0)+80+(a[(c[l>>2]|0)+68>>0]<<1)>>1]=(e[g+18>>1]|0)-1;c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}return 0}function ZE(e){e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;g=f;c[g>>2]=e;b[(c[g>>2]|0)+16+18>>1]=0;h=(c[g>>2]|0)+64|0;a[h>>0]=(d[h>>0]|0)&-7;h=(c[g>>2]|0)+68|0;e=a[h>>0]|0;a[h>>0]=e+-1<<24>>24;sB(c[(c[g>>2]|0)+120+(e<<24>>24<<2)>>2]|0);i=f;return}function _E(b,f,g,h,j){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;k=s+28|0;l=s+24|0;m=s+20|0;n=s+16|0;o=s+12|0;p=s+8|0;r=s+4|0;q=s;c[l>>2]=b;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;g=c[m>>2]|0;a:do if(g>>>0<=($E(c[l>>2]|0)|0)>>>0){c[r>>2]=sg(c[c[l>>2]>>2]|0,c[m>>2]|0,q,c[p>>2]|0)|0;if(!(c[r>>2]|0)){g=It(c[q>>2]|0)|0;c[c[n>>2]>>2]=g;if((d[c[c[n>>2]>>2]>>0]|0|0)==0?(aF(c[q>>2]|0,c[m>>2]|0,c[l>>2]|0)|0,c[r>>2]=Kt(c[c[n>>2]>>2]|0)|0,(c[r>>2]|0)!=0):0){qB(c[c[n>>2]>>2]|0);break}do if(c[o>>2]|0){if((e[(c[c[n>>2]>>2]|0)+18>>1]|0|0)>=1?(d[(c[c[n>>2]>>2]|0)+2>>0]|0|0)==(d[(c[o>>2]|0)+69>>0]|0|0):0)break;c[r>>2]=Lj(57580)|0;qB(c[c[n>>2]>>2]|0);break a}while(0);c[k>>2]=0;r=c[k>>2]|0;i=s;return r|0}}else c[r>>2]=Lj(57558)|0;while(0);if(c[o>>2]|0){g=(c[o>>2]|0)+68|0;a[g>>0]=(a[g>>0]|0)+-1<<24>>24}c[k>>2]=c[r>>2];r=c[k>>2]|0;i=s;return r|0}function $E(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+44>>2]|0}function aF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[j>>2]=It(c[f>>2]|0)|0;if((c[g>>2]|0)==(c[(c[j>>2]|0)+84>>2]|0)){d=c[j>>2]|0;i=k;return d|0}d=tg(c[f>>2]|0)|0;c[(c[j>>2]|0)+56>>2]=d;c[(c[j>>2]|0)+72>>2]=c[f>>2];c[(c[j>>2]|0)+52>>2]=c[h>>2];c[(c[j>>2]|0)+84>>2]=c[g>>2];a[(c[j>>2]|0)+5>>0]=(c[g>>2]|0)==1?100:0;d=c[j>>2]|0;i=k;return d|0}function bF(a,b,d,f,g,h){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+240|0;j=s+36|0;k=s+32|0;l=s+28|0;m=s;n=s+24|0;o=s+20|0;r=s+16|0;q=s+12|0;p=s+8|0;c[k>>2]=a;c[l>>2]=b;b=m;c[b>>2]=d;c[b+4>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=0;if(c[l>>2]|0){c[q>>2]=cF(c[(c[k>>2]|0)+72>>2]|0,s+40|0,200,p)|0;if(!(c[q>>2]|0)){c[j>>2]=7;r=c[j>>2]|0;i=s;return r|0}dF(c[(c[k>>2]|0)+72>>2]|0,c[m>>2]|0,c[l>>2]|0,c[q>>2]|0);if(!(e[(c[q>>2]|0)+8>>1]|0)){Sf(c[(c[(c[k>>2]|0)+72>>2]|0)+12>>2]|0,c[p>>2]|0);c[j>>2]=Lj(56338)|0;r=c[j>>2]|0;i=s;return r|0}}else c[q>>2]=0;h=m;c[r>>2]=eF(c[k>>2]|0,c[q>>2]|0,c[h>>2]|0,c[h+4>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;if(c[p>>2]|0)Sf(c[(c[(c[k>>2]|0)+72>>2]|0)+12>>2]|0,c[p>>2]|0);c[j>>2]=c[r>>2];r=c[j>>2]|0;i=s;return r|0}function cF(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+32|0;h=p+28|0;j=p+24|0;k=p+20|0;q=p+16|0;l=p+12|0;o=p+8|0;n=p+4|0;m=p;c[j>>2]=a;c[k>>2]=d;c[q>>2]=f;c[l>>2]=g;c[n>>2]=8-(c[k>>2]&7)&7;c[m>>2]=16+(((e[(c[j>>2]|0)+6>>1]|0)+1|0)*40|0);if((c[m>>2]|0)>((c[q>>2]|0)+(c[n>>2]|0)|0)){q=c[m>>2]|0;c[o>>2]=yh(c[(c[j>>2]|0)+12>>2]|0,q,((q|0)<0)<<31>>31)|0;c[c[l>>2]>>2]=c[o>>2];if(!(c[o>>2]|0)){c[h>>2]=0;q=c[h>>2]|0;i=p;return q|0}}else{c[o>>2]=(c[k>>2]|0)+(c[n>>2]|0);c[c[l>>2]>>2]=0}c[(c[o>>2]|0)+4>>2]=(c[o>>2]|0)+16;c[c[o>>2]>>2]=c[j>>2];b[(c[o>>2]|0)+8>>1]=(e[(c[j>>2]|0)+6>>1]|0)+1;c[h>>2]=c[o>>2];q=c[h>>2]|0;i=p;return q|0}function dF(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+48|0;k=u+36|0;l=u+32|0;v=u+28|0;s=u+24|0;m=u+20|0;n=u+16|0;o=u+12|0;t=u+40|0;r=u+8|0;p=u+4|0;q=u;c[k>>2]=f;c[l>>2]=g;c[v>>2]=h;c[s>>2]=j;c[m>>2]=c[v>>2];c[p>>2]=c[(c[s>>2]|0)+4>>2];a[(c[s>>2]|0)+10>>0]=0;g=c[m>>2]|0;if((d[c[m>>2]>>0]|0|0)<128){c[r>>2]=d[g>>0];g=1}else g=(tF(g,r)|0)&255;c[o>>2]=g&255;c[n>>2]=c[r>>2];b[t>>1]=0;while(1){if((c[o>>2]|0)>>>0>=(c[r>>2]|0)>>>0){g=11;break}if((c[n>>2]|0)>(c[l>>2]|0)){g=11;break}g=(c[m>>2]|0)+(c[o>>2]|0)|0;if((d[(c[m>>2]|0)+(c[o>>2]|0)>>0]|0|0)<128){c[q>>2]=d[g>>0];g=1}else g=(tF(g,q)|0)&255;c[o>>2]=(c[o>>2]|0)+(g&255);a[(c[p>>2]|0)+10>>0]=a[(c[k>>2]|0)+4>>0]|0;c[(c[p>>2]|0)+32>>2]=c[(c[k>>2]|0)+12>>2];c[(c[p>>2]|0)+24>>2]=0;v=vF((c[m>>2]|0)+(c[n>>2]|0)|0,c[q>>2]|0,c[p>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+v;c[p>>2]=(c[p>>2]|0)+40;v=(b[t>>1]|0)+1<<16>>16;b[t>>1]=v;if((v&65535|0)>=(e[(c[s>>2]|0)+8>>1]|0|0)){g=11;break}}if((g|0)==11){b[(c[s>>2]|0)+8>>1]=b[t>>1]|0;i=u;return}}function eF(f,g,h,j,k,l){f=f|0;g=g|0;h=h|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;F=i;i=i+96|0;m=F+80|0;n=F+76|0;o=F+72|0;p=F+8|0;q=F+68|0;r=F+64|0;C=F+60|0;E=F+56|0;v=F+52|0;D=F+48|0;u=F+44|0;s=F+40|0;t=F+36|0;B=F+32|0;y=F+28|0;x=F;w=F+24|0;A=F+20|0;z=F+16|0;c[n>>2]=f;c[o>>2]=g;g=p;c[g>>2]=h;c[g+4>>2]=j;c[q>>2]=k;c[r>>2]=l;if(((d[(c[n>>2]|0)+66>>0]|0)==1?(d[(c[n>>2]|0)+64>>0]&2|0)!=0:0)?(d[(c[n>>2]|0)+69>>0]|0)!=0:0){g=(c[n>>2]|0)+16|0;l=p;if((c[g>>2]|0)==(c[l>>2]|0)?(c[g+4>>2]|0)==(c[l+4>>2]|0):0){c[c[r>>2]>>2]=0;c[m>>2]=0;E=c[m>>2]|0;i=F;return E|0}if((d[(c[n>>2]|0)+64>>0]&8|0)!=0?(g=(c[n>>2]|0)+16|0,k=c[g+4>>2]|0,l=p,f=c[l+4>>2]|0,(k|0)<(f|0)|((k|0)==(f|0)?(c[g>>2]|0)>>>0<(c[l>>2]|0)>>>0:0)):0){c[c[r>>2]>>2]=-1;c[m>>2]=0;E=c[m>>2]|0;i=F;return E|0}}if(c[o>>2]|0){c[E>>2]=fF(c[o>>2]|0)|0;a[(c[o>>2]|0)+11>>0]=0}else c[E>>2]=0;c[C>>2]=gF(c[n>>2]|0)|0;if(c[C>>2]|0){c[m>>2]=c[C>>2];E=c[m>>2]|0;i=F;return E|0}if(!(d[(c[n>>2]|0)+66>>0]|0)){c[c[r>>2]>>2]=-1;c[m>>2]=0;E=c[m>>2]|0;i=F;return E|0}a:do{c[B>>2]=c[(c[n>>2]|0)+120+(a[(c[n>>2]|0)+68>>0]<<2)>>2];c[v>>2]=0;c[D>>2]=(e[(c[B>>2]|0)+18>>1]|0)-1;c[u>>2]=c[D>>2]>>1-(c[q>>2]|0);b[(c[n>>2]|0)+80+(a[(c[n>>2]|0)+68>>0]<<1)>>1]=c[u>>2];b:do if(!(c[E>>2]|0)){while(1){c[y>>2]=(c[(c[B>>2]|0)+68>>2]|0)+(e[(c[B>>2]|0)+20>>1]&(d[(c[(c[B>>2]|0)+64>>2]|0)+(c[u>>2]<<1)>>0]<<8|d[(c[(c[B>>2]|0)+64>>2]|0)+(c[u>>2]<<1)+1>>0]));c:do if(a[(c[B>>2]|0)+3>>0]|0)while(1){l=c[y>>2]|0;c[y>>2]=l+1;if(128>(d[l>>0]|0))break c;if((c[y>>2]|0)>>>0>=(c[(c[B>>2]|0)+60>>2]|0)>>>0){j=20;break a}}while(0);St(c[y>>2]|0,x)|0;g=x;k=c[g+4>>2]|0;l=p;f=c[l+4>>2]|0;if((k|0)<(f|0)|((k|0)==(f|0)?(c[g>>2]|0)>>>0<(c[l>>2]|0)>>>0:0)){c[v>>2]=(c[u>>2]|0)+1;if((c[v>>2]|0)>(c[D>>2]|0)){j=23;break}}else{g=x;k=c[g+4>>2]|0;l=p;f=c[l+4>>2]|0;if(!((k|0)>(f|0)|((k|0)==(f|0)?(c[g>>2]|0)>>>0>(c[l>>2]|0)>>>0:0))){j=27;break}c[D>>2]=(c[u>>2]|0)-1;if((c[v>>2]|0)>(c[D>>2]|0)){j=26;break}}c[u>>2]=(c[v>>2]|0)+(c[D>>2]|0)>>1}if((j|0)==23){c[s>>2]=-1;j=51;break}else if((j|0)==26){c[s>>2]=1;j=51;break}else if((j|0)==27){j=0;f=(c[n>>2]|0)+64|0;a[f>>0]=d[f>>0]|2;f=x;g=c[f+4>>2]|0;l=(c[n>>2]|0)+16|0;c[l>>2]=c[f>>2];c[l+4>>2]=g;b[(c[n>>2]|0)+80+(a[(c[n>>2]|0)+68>>0]<<1)>>1]=c[u>>2]; +if(a[(c[B>>2]|0)+4>>0]|0){j=29;break a}c[v>>2]=c[u>>2];break}}else while(1){c[y>>2]=(c[(c[B>>2]|0)+68>>2]|0)+(e[(c[B>>2]|0)+20>>1]&(d[(c[(c[B>>2]|0)+64>>2]|0)+(c[u>>2]<<1)>>0]<<8|d[(c[(c[B>>2]|0)+64>>2]|0)+(c[u>>2]<<1)+1>>0]));c[w>>2]=d[c[y>>2]>>0];do if((c[w>>2]|0)<=(d[(c[B>>2]|0)+7>>0]|0))c[s>>2]=Ob[c[E>>2]&255](c[w>>2]|0,(c[y>>2]|0)+1|0,c[o>>2]|0)|0;else{if((d[(c[y>>2]|0)+1>>0]&128|0)==0?(l=((c[w>>2]&127)<<7)+(d[(c[y>>2]|0)+1>>0]|0)|0,c[w>>2]=l,(l|0)<=(e[(c[B>>2]|0)+10>>1]|0)):0){c[s>>2]=Ob[c[E>>2]&255](c[w>>2]|0,(c[y>>2]|0)+2|0,c[o>>2]|0)|0;break}c[z>>2]=(c[y>>2]|0)+(0-(d[(c[B>>2]|0)+6>>0]|0));Ub[c[(c[B>>2]|0)+80>>2]&255](c[B>>2]|0,c[z>>2]|0,(c[n>>2]|0)+16|0);c[w>>2]=c[(c[n>>2]|0)+16>>2];if((c[w>>2]|0)<2){j=37;break a}l=(c[w>>2]|0)+18|0;c[A>>2]=_f(l,((l|0)<0)<<31>>31)|0;if(!(c[A>>2]|0)){j=39;break a}b[(c[n>>2]|0)+80+(a[(c[n>>2]|0)+68>>0]<<1)>>1]=c[u>>2];c[C>>2]=hF(c[n>>2]|0,0,c[w>>2]|0,c[A>>2]|0,2)|0;if(c[C>>2]|0){j=41;break a}c[s>>2]=Ob[c[E>>2]&255](c[w>>2]|0,c[A>>2]|0,c[o>>2]|0)|0;Kd(c[A>>2]|0)}while(0);if((c[s>>2]|0)<0)c[v>>2]=(c[u>>2]|0)+1;else{if((c[s>>2]|0)<=0){j=47;break a}c[D>>2]=(c[u>>2]|0)-1}if((c[v>>2]|0)>(c[D>>2]|0)){j=51;break b}c[u>>2]=(c[v>>2]|0)+(c[D>>2]|0)>>1}while(0);if((j|0)==51?(j=0,(a[(c[B>>2]|0)+4>>0]|0)!=0):0){j=52;break}h=c[B>>2]|0;if((c[v>>2]|0)>=(e[(c[B>>2]|0)+18>>1]|0))c[t>>2]=$q((c[(c[B>>2]|0)+56>>2]|0)+((d[h+5>>0]|0)+8)|0)|0;else c[t>>2]=$q((c[h+56>>2]|0)+(e[(c[B>>2]|0)+20>>1]&(d[(c[(c[B>>2]|0)+64>>2]|0)+(c[v>>2]<<1)>>0]<<8|d[(c[(c[B>>2]|0)+64>>2]|0)+(c[v>>2]<<1)+1>>0]))|0)|0;b[(c[n>>2]|0)+80+(a[(c[n>>2]|0)+68>>0]<<1)>>1]=c[v>>2];c[C>>2]=XE(c[n>>2]|0,c[t>>2]|0)|0}while((c[C>>2]|0)==0);if((j|0)==20){c[m>>2]=Lj(60709)|0;E=c[m>>2]|0;i=F;return E|0}else if((j|0)==29){c[c[r>>2]>>2]=0;c[C>>2]=0}else if((j|0)==37)c[C>>2]=Lj(60782)|0;else if((j|0)==39)c[C>>2]=7;else if((j|0)==41)Kd(c[A>>2]|0);else if((j|0)==47){c[c[r>>2]>>2]=0;c[C>>2]=0;b[(c[n>>2]|0)+80+(a[(c[n>>2]|0)+68>>0]<<1)>>1]=c[u>>2];if(a[(c[o>>2]|0)+11>>0]|0)c[C>>2]=11}else if((j|0)==52){b[(c[n>>2]|0)+80+(a[(c[n>>2]|0)+68>>0]<<1)>>1]=c[u>>2];c[c[r>>2]>>2]=c[s>>2];c[C>>2]=0}b[(c[n>>2]|0)+16+18>>1]=0;E=(c[n>>2]|0)+64|0;a[E>>0]=d[E>>0]&-7;c[m>>2]=c[C>>2];E=c[m>>2]|0;i=F;return E|0}function fF(b){b=b|0;var d=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+8|0;f=h+4|0;g=h;c[f>>2]=b;if(((e[(c[c[f>>2]>>2]|0)+6>>1]|0)+(e[(c[c[f>>2]>>2]|0)+8>>1]|0)|0)<=13){c[g>>2]=e[(c[(c[f>>2]|0)+4>>2]|0)+8>>1];b=(c[f>>2]|0)+12|0;if(a[c[(c[c[f>>2]>>2]|0)+16>>2]>>0]|0){a[b>>0]=1;a[(c[f>>2]|0)+13>>0]=-1}else{a[b>>0]=-1;a[(c[f>>2]|0)+13>>0]=1}if(c[g>>2]&4){c[d>>2]=160;g=c[d>>2]|0;i=h;return g|0}if((c[g>>2]&25|0)==0?(c[(c[c[f>>2]>>2]|0)+20>>2]|0)==0:0){c[d>>2]=161;g=c[d>>2]|0;i=h;return g|0}}c[d>>2]=162;g=c[d>>2]|0;i=h;return g|0}function gF(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[h>>2]=f;c[k>>2]=0;do if((d[(c[h>>2]|0)+66>>0]|0)>=3){f=c[h>>2]|0;if((d[(c[h>>2]|0)+66>>0]|0)!=4){pB(f);break}c[g>>2]=c[f+60>>2];l=c[g>>2]|0;i=m;return l|0}while(0);a:do if((a[(c[h>>2]|0)+68>>0]|0)>=0)while(1){if(!(a[(c[h>>2]|0)+68>>0]|0))break a;n=(c[h>>2]|0)+68|0;f=a[n>>0]|0;a[n>>0]=f+-1<<24>>24;sB(c[(c[h>>2]|0)+120+(f<<24>>24<<2)>>2]|0)}else{f=c[h>>2]|0;if(!(c[(c[h>>2]|0)+52>>2]|0)){a[f+66>>0]=0;c[g>>2]=0;n=c[g>>2]|0;i=m;return n|0}c[k>>2]=_E(c[(c[f>>2]|0)+4>>2]|0,c[(c[h>>2]|0)+52>>2]|0,(c[h>>2]|0)+120|0,0,d[(c[h>>2]|0)+65>>0]|0)|0;f=c[h>>2]|0;if(!(c[k>>2]|0)){a[f+68>>0]=0;a[(c[h>>2]|0)+69>>0]=a[(c[(c[h>>2]|0)+120>>2]|0)+2>>0]|0;break}a[f+66>>0]=0;c[g>>2]=c[k>>2];n=c[g>>2]|0;i=m;return n|0}while(0);c[j>>2]=c[(c[h>>2]|0)+120>>2];if((d[c[j>>2]>>0]|0)!=0?((c[(c[h>>2]|0)+72>>2]|0)==0|0)==(d[(c[j>>2]|0)+2>>0]|0):0){b[(c[h>>2]|0)+80>>1]=0;b[(c[h>>2]|0)+16+18>>1]=0;n=(c[h>>2]|0)+64|0;a[n>>0]=d[n>>0]&-15;do if((e[(c[j>>2]|0)+18>>1]|0)>0)a[(c[h>>2]|0)+66>>0]=1;else{if(a[(c[j>>2]|0)+4>>0]|0){a[(c[h>>2]|0)+66>>0]=0;break}if((c[(c[j>>2]|0)+84>>2]|0)==1){c[l>>2]=$q((c[(c[j>>2]|0)+56>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)+8)|0)|0;a[(c[h>>2]|0)+66>>0]=1;c[k>>2]=XE(c[h>>2]|0,c[l>>2]|0)|0;break}c[g>>2]=Lj(60470)|0;n=c[g>>2]|0;i=m;return n|0}while(0);c[g>>2]=c[k>>2];n=c[g>>2]|0;i=m;return n|0}c[g>>2]=Lj(60459)|0;n=c[g>>2]|0;i=m;return n|0}function hF(b,f,g,h,j){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+80|0;k=C+68|0;l=C+64|0;m=C+60|0;n=C+56|0;o=C+52|0;p=C+48|0;t=C+44|0;B=C+40|0;u=C+36|0;A=C+32|0;y=C+28|0;q=C+24|0;x=C+20|0;w=C+16|0;v=C+12|0;s=C+8|0;r=C+4|0;z=C;c[l>>2]=b;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;c[B>>2]=0;c[u>>2]=0;c[A>>2]=c[(c[l>>2]|0)+120+(a[(c[l>>2]|0)+68>>0]<<2)>>2];c[y>>2]=c[(c[l>>2]|0)+4>>2];iF(c[l>>2]|0);c[t>>2]=c[(c[l>>2]|0)+16+8>>2];if(((c[t>>2]|0)+(e[(c[l>>2]|0)+16+16>>1]|0)|0)>>>0>((c[(c[A>>2]|0)+56>>2]|0)+(c[(c[y>>2]|0)+36>>2]|0)|0)>>>0){c[k>>2]=Lj(60043)|0;B=c[k>>2]|0;i=C;return B|0}if((c[m>>2]|0)>>>0<(e[(c[l>>2]|0)+16+16>>1]|0)>>>0){c[q>>2]=c[n>>2];if(((c[q>>2]|0)+(c[m>>2]|0)|0)>>>0>(e[(c[l>>2]|0)+16+16>>1]|0)>>>0)c[q>>2]=(e[(c[l>>2]|0)+16+16>>1]|0)-(c[m>>2]|0);c[B>>2]=jF((c[t>>2]|0)+(c[m>>2]|0)|0,c[o>>2]|0,c[q>>2]|0,c[p>>2]&1,c[(c[A>>2]|0)+72>>2]|0)|0;c[m>>2]=0;c[o>>2]=(c[o>>2]|0)+(c[q>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[q>>2]|0)}else c[m>>2]=(c[m>>2]|0)-(e[(c[l>>2]|0)+16+16>>1]|0);a:do if((c[B>>2]|0)==0&(c[n>>2]|0)>>>0>0){c[x>>2]=(c[(c[y>>2]|0)+36>>2]|0)-4;c[w>>2]=$q((c[t>>2]|0)+(e[(c[l>>2]|0)+16+16>>1]|0)|0)|0;if((c[p>>2]|0)!=2?(d[(c[l>>2]|0)+64>>0]&4|0)==0:0){c[v>>2]=(((c[(c[l>>2]|0)+16+12>>2]|0)-(e[(c[l>>2]|0)+16+16>>1]|0)+(c[x>>2]|0)-1|0)>>>0)/((c[x>>2]|0)>>>0)|0;do if((c[v>>2]|0)>(c[(c[l>>2]|0)+56>>2]|0)){c[s>>2]=bg(c[(c[l>>2]|0)+12>>2]|0,c[v>>2]<<1<<2,0)|0;if(!(c[s>>2]|0)){c[B>>2]=7;break}else{c[(c[l>>2]|0)+56>>2]=c[v>>2]<<1;c[(c[l>>2]|0)+12>>2]=c[s>>2];break}}while(0);if(!(c[B>>2]|0)){kR(c[(c[l>>2]|0)+12>>2]|0,0,c[v>>2]<<2|0)|0;A=(c[l>>2]|0)+64|0;a[A>>0]=d[A>>0]|4}}if((d[(c[l>>2]|0)+64>>0]&4|0)!=0?(c[(c[(c[l>>2]|0)+12>>2]|0)+((((c[m>>2]|0)>>>0)/((c[x>>2]|0)>>>0)|0)<<2)>>2]|0)!=0:0){c[u>>2]=((c[m>>2]|0)>>>0)/((c[x>>2]|0)>>>0)|0;c[w>>2]=c[(c[(c[l>>2]|0)+12>>2]|0)+(c[u>>2]<<2)>>2];c[m>>2]=((c[m>>2]|0)>>>0)%((c[x>>2]|0)>>>0)|0}while(1){if(!((c[B>>2]|0)==0&(c[n>>2]|0)>>>0>0&(c[w>>2]|0)!=0))break a;if(d[(c[l>>2]|0)+64>>0]&4)c[(c[(c[l>>2]|0)+12>>2]|0)+(c[u>>2]<<2)>>2]=c[w>>2];if((c[m>>2]|0)>>>0>=(c[x>>2]|0)>>>0){if(c[(c[(c[l>>2]|0)+12>>2]|0)+((c[u>>2]|0)+1<<2)>>2]|0)c[w>>2]=c[(c[(c[l>>2]|0)+12>>2]|0)+((c[u>>2]|0)+1<<2)>>2];else c[B>>2]=kF(c[y>>2]|0,c[w>>2]|0,0,w)|0;c[m>>2]=(c[m>>2]|0)-(c[x>>2]|0)}else{c[r>>2]=c[n>>2];if(((c[r>>2]|0)+(c[m>>2]|0)|0)>>>0>(c[x>>2]|0)>>>0)c[r>>2]=(c[x>>2]|0)-(c[m>>2]|0);c[B>>2]=sg(c[c[y>>2]>>2]|0,c[w>>2]|0,z,(c[p>>2]&1|0)==0?2:0)|0;if(!(c[B>>2]|0)){c[t>>2]=tg(c[z>>2]|0)|0;c[w>>2]=$q(c[t>>2]|0)|0;c[B>>2]=jF((c[t>>2]|0)+((c[m>>2]|0)+4)|0,c[o>>2]|0,c[r>>2]|0,c[p>>2]&1,c[z>>2]|0)|0;vg(c[z>>2]|0);c[m>>2]=0}c[n>>2]=(c[n>>2]|0)-(c[r>>2]|0);c[o>>2]=(c[o>>2]|0)+(c[r>>2]|0)}c[u>>2]=(c[u>>2]|0)+1}}while(0);if((c[B>>2]|0)==0&(c[n>>2]|0)>>>0>0){c[k>>2]=Lj(60200)|0;B=c[k>>2]|0;i=C;return B|0}else{c[k>>2]=c[B>>2];B=c[k>>2]|0;i=C;return B|0}return 0}function iF(b){b=b|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=b;if(e[(c[f>>2]|0)+16+18>>1]|0){i=h;return}c[g>>2]=a[(c[f>>2]|0)+68>>0];b=(c[f>>2]|0)+64|0;a[b>>0]=d[b>>0]|2;oF(c[(c[f>>2]|0)+120+(c[g>>2]<<2)>>2]|0,e[(c[f>>2]|0)+80+(c[g>>2]<<1)>>1]|0,(c[f>>2]|0)+16|0);i=h;return}function jF(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,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;g=n+24|0;h=n+20|0;j=n+16|0;k=n+12|0;o=n+8|0;l=n+4|0;m=n;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[o>>2]=e;c[l>>2]=f;do if(c[o>>2]|0){c[m>>2]=Dg(c[l>>2]|0)|0;if(!(c[m>>2]|0)){iR(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;break}c[g>>2]=c[m>>2];o=c[g>>2]|0;i=n;return o|0}else iR(c[j>>2]|0,c[h>>2]|0,c[k>>2]|0)|0;while(0);c[g>>2]=0;o=c[g>>2]|0;i=n;return o|0}function kF(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;h=s+32|0;j=s+28|0;q=s+24|0;k=s+20|0;n=s+16|0;o=s+12|0;r=s+8|0;p=s+4|0;m=s;l=s+36|0;c[h>>2]=b;c[j>>2]=e;c[q>>2]=f;c[k>>2]=g;c[n>>2]=0;c[o>>2]=0;c[r>>2]=0;if(a[(c[h>>2]|0)+17>>0]|0){c[m>>2]=(c[j>>2]|0)+1;while(1){f=lF(c[h>>2]|0,c[m>>2]|0)|0;if((f|0)==(c[m>>2]|0))b=1;else b=(c[m>>2]|0)==((((c[381]|0)>>>0)/((c[(c[h>>2]|0)+32>>2]|0)>>>0)|0)+1|0);e=c[m>>2]|0;if(!b)break;c[m>>2]=e+1}if(((e>>>0<=($E(c[h>>2]|0)|0)>>>0?(c[r>>2]=mF(c[h>>2]|0,c[m>>2]|0,l,p)|0,(c[r>>2]|0)==0):0)?(d[l>>0]|0)==4:0)?(c[p>>2]|0)==(c[j>>2]|0):0){c[n>>2]=c[m>>2];c[r>>2]=101}}if((c[r>>2]|0)==0?(c[r>>2]=nF(c[h>>2]|0,c[j>>2]|0,o,(c[q>>2]|0)==0?2:0)|0,(c[r>>2]|0)==0):0)c[n>>2]=$q(c[(c[o>>2]|0)+56>>2]|0)|0;c[c[k>>2]>>2]=c[n>>2];e=c[o>>2]|0;if(c[q>>2]|0){c[c[q>>2]>>2]=e;q=c[r>>2]|0;q=(q|0)==101;r=c[r>>2]|0;r=q?0:r;i=s;return r|0}else{qB(e);q=c[r>>2]|0;q=(q|0)==101;r=c[r>>2]|0;r=q?0:r;i=s;return r|0}return 0}function lF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;d=k+20|0;e=k+16|0;f=k+12|0;h=k+8|0;g=k+4|0;j=k;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)>>>0<2){c[d>>2]=0;j=c[d>>2]|0;i=k;return j|0}c[h>>2]=(((c[(c[e>>2]|0)+36>>2]|0)>>>0)/5|0)+1;c[g>>2]=(((c[f>>2]|0)-2|0)>>>0)/((c[h>>2]|0)>>>0)|0;c[j>>2]=(_(c[g>>2]|0,c[h>>2]|0)|0)+2;if((c[j>>2]|0)==((((c[381]|0)>>>0)/((c[(c[e>>2]|0)+32>>2]|0)>>>0)|0)+1|0))c[j>>2]=(c[j>>2]|0)+1;c[d>>2]=c[j>>2];j=c[d>>2]|0;i=k;return j|0}function mF(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+48|0;h=r+36|0;s=r+32|0;j=r+28|0;k=r+24|0;l=r+20|0;o=r+16|0;m=r+12|0;p=r+8|0;n=r+4|0;q=r;c[s>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[m>>2]=lF(c[s>>2]|0,c[j>>2]|0)|0;c[q>>2]=sg(c[c[s>>2]>>2]|0,c[m>>2]|0,o,0)|0;if(c[q>>2]|0){c[h>>2]=c[q>>2];s=c[h>>2]|0;i=r;return s|0}c[p>>2]=tg(c[o>>2]|0)|0;c[n>>2]=((c[j>>2]|0)-(c[m>>2]|0)-1|0)*5;if((c[n>>2]|0)<0){vg(c[o>>2]|0);c[h>>2]=Lj(56557)|0;s=c[h>>2]|0;i=r;return s|0}a[c[k>>2]>>0]=a[(c[p>>2]|0)+(c[n>>2]|0)>>0]|0;if(c[l>>2]|0){s=$q((c[p>>2]|0)+((c[n>>2]|0)+1)|0)|0;c[c[l>>2]>>2]=s}vg(c[o>>2]|0);if((d[c[k>>2]>>0]|0|0)>=1?(d[c[k>>2]>>0]|0|0)<=5:0){c[h>>2]=0;s=c[h>>2]|0;i=r;return s|0}c[h>>2]=Lj(56565)|0;s=c[h>>2]|0;i=r;return s|0}function nF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;f=m+24|0;g=m+20|0;h=m+16|0;j=m+12|0;n=m+8|0;l=m+4|0;k=m;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[n>>2]=e;c[l>>2]=sg(c[c[g>>2]>>2]|0,c[h>>2]|0,k,c[n>>2]|0)|0;if(c[l>>2]|0){c[f>>2]=c[l>>2];n=c[f>>2]|0;i=m;return n|0}else{n=aF(c[k>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;c[c[j>>2]>>2]=n;c[f>>2]=0;n=c[f>>2]|0;i=m;return n|0}return 0}function oF(a,b,f){a=a|0;b=b|0;f=f|0;var g=0,h=0,j=0,k=0;g=i;i=i+16|0;k=g+8|0;j=g+4|0;h=g;c[k>>2]=a;c[j>>2]=b;c[h>>2]=f;Ub[c[(c[k>>2]|0)+80>>2]&255](c[k>>2]|0,(c[(c[k>>2]|0)+56>>2]|0)+((e[(c[k>>2]|0)+20>>1]|0)&((d[(c[(c[k>>2]|0)+64>>2]|0)+(c[j>>2]<<1)>>0]|0)<<8|(d[(c[(c[k>>2]|0)+64>>2]|0)+(c[j>>2]<<1)+1>>0]|0)))|0,c[h>>2]|0);i=g;return}function pF(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;n=s+52|0;o=s+48|0;p=s+44|0;q=s+40|0;h=s+36|0;t=s+32|0;r=s+28|0;m=s+24|0;l=s+16|0;k=s+8|0;j=s;c[o>>2]=b;c[p>>2]=f;c[q>>2]=g;c[h>>2]=(c[p>>2]|0)+(d[c[p>>2]>>0]&63);c[t>>2]=d[(c[p>>2]|0)+1>>0];b=c[(c[q>>2]|0)+4>>2]|0;f=c[b+4>>2]|0;g=k;c[g>>2]=c[b>>2];c[g+4>>2]=f;do switch(c[t>>2]|0){case 1:{m=a[c[h>>2]>>0]|0;t=j;c[t>>2]=m;c[t+4>>2]=((m|0)<0)<<31>>31;break}case 2:{m=a[c[h>>2]>>0]<<8|d[(c[h>>2]|0)+1>>0];t=j;c[t>>2]=m;c[t+4>>2]=((m|0)<0)<<31>>31;break}case 3:{m=a[c[h>>2]>>0]<<16|d[(c[h>>2]|0)+1>>0]<<8|d[(c[h>>2]|0)+2>>0];t=j;c[t>>2]=m;c[t+4>>2]=((m|0)<0)<<31>>31;break}case 4:{c[m>>2]=d[c[h>>2]>>0]<<24|d[(c[h>>2]|0)+1>>0]<<16|d[(c[h>>2]|0)+2>>0]<<8|d[(c[h>>2]|0)+3>>0];m=c[m>>2]|0;t=j;c[t>>2]=m;c[t+4>>2]=((m|0)<0)<<31>>31;break}case 5:{m=a[c[h>>2]>>0]<<8|d[(c[h>>2]|0)+1>>0];t=j;c[t>>2]=gR(d[(c[h>>2]|0)+2>>0]<<24|d[(c[h>>2]|0)+2+1>>0]<<16|d[(c[h>>2]|0)+2+2>>0]<<8|d[(c[h>>2]|0)+2+3>>0]|0,0,rR(0,1,m|0,((m|0)<0)<<31>>31|0)|0,C|0)|0;c[t+4>>2]=C;break}case 6:{t=l;c[t>>2]=d[c[h>>2]>>0]<<24|d[(c[h>>2]|0)+1>>0]<<16|d[(c[h>>2]|0)+2>>0]<<8|d[(c[h>>2]|0)+3>>0];c[t+4>>2]=0;t=c[l>>2]|0;m=l;c[m>>2]=d[(c[h>>2]|0)+4>>0]<<24|d[(c[h>>2]|0)+4+1>>0]<<16|d[(c[h>>2]|0)+4+2>>0]<<8|d[(c[h>>2]|0)+4+3>>0];c[m+4>>2]=t;m=c[l+4>>2]|0;t=j;c[t>>2]=c[l>>2];c[t+4>>2]=m;break}case 8:{t=j;c[t>>2]=0;c[t+4>>2]=0;break}case 9:{t=j;c[t>>2]=1;c[t+4>>2]=0;break}case 7:case 0:{c[n>>2]=rF(c[o>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;t=c[n>>2]|0;i=s;return t|0}default:{c[n>>2]=rF(c[o>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;t=c[n>>2]|0;i=s;return t|0}}while(0);m=k;g=c[m+4>>2]|0;t=j;l=c[t+4>>2]|0;do if(!((g|0)>(l|0)|((g|0)==(l|0)?(c[m>>2]|0)>>>0>(c[t>>2]|0)>>>0:0))){m=k;k=c[m+4>>2]|0;t=j;l=c[t+4>>2]|0;h=c[q>>2]|0;if((k|0)<(l|0)|((k|0)==(l|0)?(c[m>>2]|0)>>>0<(c[t>>2]|0)>>>0:0)){c[r>>2]=a[h+13>>0];break}if((e[h+8>>1]|0)>1){c[r>>2]=sF(c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,1)|0;break}else{c[r>>2]=a[(c[q>>2]|0)+10>>0];a[(c[q>>2]|0)+14>>0]=1;break}}else c[r>>2]=a[(c[q>>2]|0)+12>>0];while(0);c[n>>2]=c[r>>2];t=c[n>>2]|0;i=s;return t|0}function qF(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;q=s+36|0;j=s+32|0;k=s+28|0;l=s+24|0;m=s+20|0;h=s+16|0;r=s+12|0;n=s+8|0;o=s+4|0;p=s;c[j>>2]=b;c[k>>2]=f;c[l>>2]=g;c[m>>2]=c[k>>2];b=(c[m>>2]|0)+1|0;if((d[(c[m>>2]|0)+1>>0]|0)<128)c[h>>2]=d[b>>0];else tF(b,h)|0;do if((c[h>>2]|0)>=12){if(!(c[h>>2]&1)){c[r>>2]=a[(c[l>>2]|0)+13>>0];break}c[p>>2]=d[c[m>>2]>>0];c[o>>2]=((c[h>>2]|0)-12|0)/2|0;if(((c[p>>2]|0)+(c[o>>2]|0)|0)>(c[j>>2]|0)){r=(Lj(71970)|0)&255;a[(c[l>>2]|0)+11>>0]=r;c[q>>2]=0;r=c[q>>2]|0;i=s;return r|0}if((c[(c[(c[l>>2]|0)+4>>2]|0)+12>>2]|0)<(c[o>>2]|0))b=c[(c[(c[l>>2]|0)+4>>2]|0)+12>>2]|0;else b=c[o>>2]|0;c[n>>2]=b;c[r>>2]=vQ((c[m>>2]|0)+(c[p>>2]|0)|0,c[(c[(c[l>>2]|0)+4>>2]|0)+16>>2]|0,c[n>>2]|0)|0;if(c[r>>2]|0){b=c[l>>2]|0;if((c[r>>2]|0)>0){c[r>>2]=a[b+13>>0];break}else{c[r>>2]=a[b+12>>0];break}}c[r>>2]=(c[o>>2]|0)-(c[(c[(c[l>>2]|0)+4>>2]|0)+12>>2]|0);if(!(c[r>>2]|0))if((e[(c[l>>2]|0)+8>>1]|0)>1){c[r>>2]=sF(c[j>>2]|0,c[k>>2]|0,c[l>>2]|0,1)|0;break}else{c[r>>2]=a[(c[l>>2]|0)+10>>0];a[(c[l>>2]|0)+14>>0]=1;break}else{b=c[l>>2]|0;if((c[r>>2]|0)>0){c[r>>2]=a[b+13>>0];break}else{c[r>>2]=a[b+12>>0];break}}}else c[r>>2]=a[(c[l>>2]|0)+12>>0];while(0);c[q>>2]=c[r>>2];r=c[q>>2]|0;i=s;return r|0}function rF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;d=sF(c[h>>2]|0,c[g>>2]|0,c[f>>2]|0,0)|0;i=e;return d|0}function sF(f,g,j,k){f=f|0;g=g|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,D=0,E=0,F=0,G=0,H=0;F=i;i=i+128|0;A=F+124|0;m=F+120|0;H=F+116|0;B=F+112|0;G=F+108|0;o=F+104|0;p=F+100|0;z=F+96|0;q=F+92|0;E=F+88|0;w=F+84|0;D=F+80|0;n=F+76|0;s=F+16|0;l=F+72|0;y=F+68|0;r=F+8|0;x=F;t=F+64|0;v=F+60|0;u=F+56|0;c[m>>2]=f;c[H>>2]=g;c[B>>2]=j;c[G>>2]=k;c[E>>2]=0;c[w>>2]=c[(c[B>>2]|0)+4>>2];c[D>>2]=c[c[B>>2]>>2];c[n>>2]=c[H>>2];f=c[n>>2]|0;do if(c[G>>2]|0){k=(c[n>>2]|0)+1|0;if((d[f+1>>0]|0)<128){c[l>>2]=d[k>>0];k=1}else k=(tF(k,l)|0)&255;c[q>>2]=1+(k&255);c[z>>2]=d[c[n>>2]>>0];H=c[z>>2]|0;c[o>>2]=H+(uF(c[l>>2]|0)|0);c[p>>2]=1;c[w>>2]=(c[w>>2]|0)+40}else{k=c[n>>2]|0;if((d[f>>0]|0)<128){c[z>>2]=d[k>>0];k=1}else k=(tF(k,z)|0)&255;c[q>>2]=k&255;c[o>>2]=c[z>>2];if((c[o>>2]|0)>>>0<=(c[m>>2]|0)>>>0){c[p>>2]=0;break}H=(Lj(71688)|0)&255;a[(c[B>>2]|0)+11>>0]=H;c[A>>2]=0;H=c[A>>2]|0;i=F;return H|0}while(0);a:while(1){do if(e[(c[w>>2]|0)+8>>1]&4){c[y>>2]=d[(c[n>>2]|0)+(c[q>>2]|0)>>0];if((c[y>>2]|0)>>>0>=10){c[E>>2]=1;break}if(!(c[y>>2]|0)){c[E>>2]=-1;break}if((c[y>>2]|0)==7){vF((c[n>>2]|0)+(c[o>>2]|0)|0,c[y>>2]|0,s)|0;H=c[w>>2]|0;c[E>>2]=0-(wF(c[H>>2]|0,c[H+4>>2]|0,+h[s>>3])|0);break}j=xF(c[y>>2]|0,(c[n>>2]|0)+(c[o>>2]|0)|0)|0;H=r;c[H>>2]=j;c[H+4>>2]=C;H=c[w>>2]|0;j=c[H+4>>2]|0;G=x;c[G>>2]=c[H>>2];c[G+4>>2]=j;G=r;j=c[G+4>>2]|0;H=x;l=c[H+4>>2]|0;if((j|0)<(l|0)|((j|0)==(l|0)?(c[G>>2]|0)>>>0<(c[H>>2]|0)>>>0:0)){c[E>>2]=-1;break}G=r;j=c[G+4>>2]|0;H=x;l=c[H+4>>2]|0;if((j|0)>(l|0)|((j|0)==(l|0)?(c[G>>2]|0)>>>0>(c[H>>2]|0)>>>0:0))c[E>>2]=1}else{if(e[(c[w>>2]|0)+8>>1]&8){c[y>>2]=d[(c[n>>2]|0)+(c[q>>2]|0)>>0];if((c[y>>2]|0)>>>0>=10){c[E>>2]=1;break}if(!(c[y>>2]|0)){c[E>>2]=-1;break}vF((c[n>>2]|0)+(c[o>>2]|0)|0,c[y>>2]|0,s)|0;if((c[y>>2]|0)!=7){H=s;c[E>>2]=wF(c[H>>2]|0,c[H+4>>2]|0,+h[c[w>>2]>>3])|0;break}if(+h[s>>3]<+h[c[w>>2]>>3]){c[E>>2]=-1;break}if(!(+h[s>>3]>+h[c[w>>2]>>3]))break;c[E>>2]=1;break}if(!(e[(c[w>>2]|0)+8>>1]&2)){k=d[(c[n>>2]|0)+(c[q>>2]|0)>>0]|0;if(!(e[(c[w>>2]|0)+8>>1]&16)){c[y>>2]=k;c[E>>2]=(c[y>>2]|0)!=0&1;break}f=(c[n>>2]|0)+(c[q>>2]|0)|0;if((k|0)<128)c[y>>2]=d[f>>0];else tF(f,y)|0;if((c[y>>2]|0)>>>0>=12?(c[y>>2]&1|0)==0:0){c[v>>2]=(((c[y>>2]|0)-12|0)>>>0)/2|0;if(((c[o>>2]|0)+(c[v>>2]|0)|0)>>>0>(c[m>>2]|0)>>>0){k=59;break a}if((c[v>>2]|0)<(c[(c[w>>2]|0)+12>>2]|0))k=c[v>>2]|0;else k=c[(c[w>>2]|0)+12>>2]|0;c[u>>2]=k;c[E>>2]=vQ((c[n>>2]|0)+(c[o>>2]|0)|0,c[(c[w>>2]|0)+16>>2]|0,c[u>>2]|0)|0;if(c[E>>2]|0)break;c[E>>2]=(c[v>>2]|0)-(c[(c[w>>2]|0)+12>>2]|0);break}c[E>>2]=-1;break}k=(c[n>>2]|0)+(c[q>>2]|0)|0;if((d[(c[n>>2]|0)+(c[q>>2]|0)>>0]|0)<128)c[y>>2]=d[k>>0];else tF(k,y)|0;if((c[y>>2]|0)>>>0<12){c[E>>2]=-1;break}if(!(c[y>>2]&1)){c[E>>2]=1;break}c[s+12>>2]=(((c[y>>2]|0)-12|0)>>>0)/2|0;if(((c[o>>2]|0)+(c[s+12>>2]|0)|0)>>>0>(c[m>>2]|0)>>>0){k=43;break a}if(c[(c[D>>2]|0)+20+(c[p>>2]<<2)>>2]|0){a[s+10>>0]=a[(c[D>>2]|0)+4>>0]|0;c[s+32>>2]=c[(c[D>>2]|0)+12>>2];b[s+8>>1]=2;c[s+16>>2]=(c[n>>2]|0)+(c[o>>2]|0);c[E>>2]=yF(s,c[w>>2]|0,c[(c[D>>2]|0)+20+(c[p>>2]<<2)>>2]|0,(c[B>>2]|0)+11|0)|0;break}if((c[s+12>>2]|0)<(c[(c[w>>2]|0)+12>>2]|0))k=c[s+12>>2]|0;else k=c[(c[w>>2]|0)+12>>2]|0;c[t>>2]=k;c[E>>2]=vQ((c[n>>2]|0)+(c[o>>2]|0)|0,c[(c[w>>2]|0)+16>>2]|0,c[t>>2]|0)|0;if(!(c[E>>2]|0))c[E>>2]=(c[s+12>>2]|0)-(c[(c[w>>2]|0)+12>>2]|0)}while(0);f=c[p>>2]|0;if(c[E>>2]|0){k=67;break}c[p>>2]=f+1;c[w>>2]=(c[w>>2]|0)+40;H=uF(c[y>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+H;H=zF(c[y>>2]|0,0)|0;c[q>>2]=(c[q>>2]|0)+H;if((c[q>>2]|0)>>>0>=(c[z>>2]|0)>>>0){k=73;break}if((c[p>>2]|0)>=(e[(c[B>>2]|0)+8>>1]|0)){k=73;break}if((c[o>>2]|0)>>>0>(c[m>>2]|0)>>>0){k=73;break}}if((k|0)==43){H=(Lj(71763)|0)&255;a[(c[B>>2]|0)+11>>0]=H;c[A>>2]=0;H=c[A>>2]|0;i=F;return H|0}else if((k|0)==59){H=(Lj(71792)|0)&255;a[(c[B>>2]|0)+11>>0]=H;c[A>>2]=0;H=c[A>>2]|0;i=F;return H|0}else if((k|0)==67){if(a[(c[(c[D>>2]|0)+16>>2]|0)+f>>0]|0)c[E>>2]=0-(c[E>>2]|0);c[A>>2]=c[E>>2];H=c[A>>2]|0;i=F;return H|0}else if((k|0)==73){a[(c[B>>2]|0)+14>>0]=1;c[A>>2]=a[(c[B>>2]|0)+10>>0];H=c[A>>2]|0;i=F;return H|0}return 0}function tF(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+25|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;m=n;l=n+24|0;c[g>>2]=b;c[h>>2]=e;c[j>>2]=d[c[g>>2]>>0];c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=d[c[g>>2]>>0];if(!(c[k>>2]&128)){c[j>>2]=c[j>>2]&127;c[j>>2]=c[j>>2]<<7;c[c[h>>2]>>2]=c[j>>2]|c[k>>2];a[f>>0]=2;m=a[f>>0]|0;i=n;return m|0}c[g>>2]=(c[g>>2]|0)+1;c[j>>2]=c[j>>2]<<14;c[j>>2]=c[j>>2]|(d[c[g>>2]>>0]|0);if(!(c[j>>2]&128)){c[j>>2]=c[j>>2]&2080895;c[k>>2]=c[k>>2]&127;c[k>>2]=c[k>>2]<<7;c[c[h>>2]>>2]=c[j>>2]|c[k>>2];a[f>>0]=3;m=a[f>>0]|0;i=n;return m|0}c[g>>2]=(c[g>>2]|0)+-2;a[l>>0]=St(c[g>>2]|0,m)|0;e=m;if(0!=(c[e+4>>2]|0)?1:(c[m>>2]|0)!=(c[e>>2]|0))c[c[h>>2]>>2]=-1;else c[c[h>>2]>>2]=c[m>>2];a[f>>0]=a[l>>0]|0;m=a[f>>0]|0;i=n;return m|0}function uF(a){a=a|0;var b=0,e=0,f=0;e=i;i=i+16|0;b=e+4|0;f=e;c[f>>2]=a;a=c[f>>2]|0;if((c[f>>2]|0)>>>0>=128){c[b>>2]=((a-12|0)>>>0)/2|0;f=c[b>>2]|0;i=e;return f|0}else{c[b>>2]=d[35916+a>>0];f=c[b>>2]|0;i=e;return f|0}return 0}function vF(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;switch(c[k>>2]|0){case 0:case 11:case 10:{b[(c[l>>2]|0)+8>>1]=1;c[h>>2]=0;f=c[h>>2]|0;i=m;return f|0}case 1:{g=a[c[j>>2]>>0]|0;f=c[l>>2]|0;c[f>>2]=g;c[f+4>>2]=((g|0)<0)<<31>>31;b[(c[l>>2]|0)+8>>1]=4;c[h>>2]=1;f=c[h>>2]|0;i=m;return f|0}case 2:{g=a[c[j>>2]>>0]<<8|d[(c[j>>2]|0)+1>>0];f=c[l>>2]|0;c[f>>2]=g;c[f+4>>2]=((g|0)<0)<<31>>31;b[(c[l>>2]|0)+8>>1]=4;c[h>>2]=2;f=c[h>>2]|0;i=m;return f|0}case 3:{g=a[c[j>>2]>>0]<<16|d[(c[j>>2]|0)+1>>0]<<8|d[(c[j>>2]|0)+2>>0];f=c[l>>2]|0;c[f>>2]=g;c[f+4>>2]=((g|0)<0)<<31>>31;b[(c[l>>2]|0)+8>>1]=4;c[h>>2]=3;f=c[h>>2]|0;i=m;return f|0}case 4:{g=a[c[j>>2]>>0]<<24|d[(c[j>>2]|0)+1>>0]<<16|d[(c[j>>2]|0)+2>>0]<<8|d[(c[j>>2]|0)+3>>0];f=c[l>>2]|0;c[f>>2]=g;c[f+4>>2]=((g|0)<0)<<31>>31;b[(c[l>>2]|0)+8>>1]=4;c[h>>2]=4;f=c[h>>2]|0;i=m;return f|0}case 5:{f=d[(c[j>>2]|0)+2>>0]<<24|d[(c[j>>2]|0)+2+1>>0]<<16|d[(c[j>>2]|0)+2+2>>0]<<8|d[(c[j>>2]|0)+2+3>>0];g=a[c[j>>2]>>0]<<8|d[(c[j>>2]|0)+1>>0];g=gR(f|0,0,rR(0,1,g|0,((g|0)<0)<<31>>31|0)|0,C|0)|0;f=c[l>>2]|0;c[f>>2]=g;c[f+4>>2]=C;b[(c[l>>2]|0)+8>>1]=4;c[h>>2]=6;f=c[h>>2]|0;i=m;return f|0}case 7:case 6:{c[h>>2]=GF(c[j>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;f=c[h>>2]|0;i=m;return f|0}case 9:case 8:{f=c[l>>2]|0;c[f>>2]=(c[k>>2]|0)-8;c[f+4>>2]=0;b[(c[l>>2]|0)+8>>1]=4;c[h>>2]=0;f=c[h>>2]|0;i=m;return f|0}default:{c[(c[l>>2]|0)+16>>2]=c[j>>2];c[(c[l>>2]|0)+12>>2]=(((c[k>>2]|0)-12|0)>>>0)/2|0;b[(c[l>>2]|0)+8>>1]=b[15534+((c[k>>2]&1)<<1)>>1]|0;c[h>>2]=c[(c[l>>2]|0)+12>>2];f=c[h>>2]|0;i=m;return f|0}}return 0}function wF(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+48|0;e=l+32|0;f=l+24|0;g=l+16|0;k=l+8|0;j=l;m=f;c[m>>2]=a;c[m+4>>2]=b;h[g>>3]=d;if(+h[g>>3]<-9223372036854775808.0){c[e>>2]=1;m=c[e>>2]|0;i=l;return m|0}if(+h[g>>3]>9223372036854775808.0){c[e>>2]=-1;m=c[e>>2]|0;i=l;return m|0}d=+h[g>>3];n=+N(d)>=1.0?d>0.0?~~+$(+M(d/4294967296.0),4294967295.0)>>>0:~~+Z((d-+(~~d>>>0))/4294967296.0)>>>0:0;b=k;c[b>>2]=~~d>>>0;c[b+4>>2]=n;b=f;n=c[b+4>>2]|0;m=k;a=c[m+4>>2]|0;if((n|0)<(a|0)|((n|0)==(a|0)?(c[b>>2]|0)>>>0<(c[m>>2]|0)>>>0:0)){c[e>>2]=-1;n=c[e>>2]|0;i=l;return n|0}m=f;a=c[m+4>>2]|0;n=k;b=c[n+4>>2]|0;if((a|0)>(b|0)|((a|0)==(b|0)?(c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0:0)){n=k;if(((c[n>>2]|0)==0?(c[n+4>>2]|0)==-2147483648:0)&+h[g>>3]>0.0){c[e>>2]=-1;n=c[e>>2]|0;i=l;return n|0}else{c[e>>2]=1;n=c[e>>2]|0;i=l;return n|0}}n=f;h[j>>3]=+((c[n>>2]|0)>>>0)+4294967296.0*+(c[n+4>>2]|0);if(+h[j>>3]<+h[g>>3]){c[e>>2]=-1;n=c[e>>2]|0;i=l;return n|0}if(+h[j>>3]>+h[g>>3]){c[e>>2]=1;n=c[e>>2]|0;i=l;return n|0}else{c[e>>2]=0;n=c[e>>2]|0;i=l;return n|0}return 0}function xF(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+8|0;g=l+24|0;h=l+20|0;k=l+16|0;j=l;c[g>>2]=b;c[h>>2]=e;switch(c[g>>2]|0){case 1:case 0:{j=a[c[h>>2]>>0]|0;k=f;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;break}case 2:{j=a[c[h>>2]>>0]<<8|d[(c[h>>2]|0)+1>>0];k=f;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;break}case 3:{j=a[c[h>>2]>>0]<<16|d[(c[h>>2]|0)+1>>0]<<8|d[(c[h>>2]|0)+2>>0];k=f;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;break}case 4:{c[k>>2]=d[c[h>>2]>>0]<<24|d[(c[h>>2]|0)+1>>0]<<16|d[(c[h>>2]|0)+2>>0]<<8|d[(c[h>>2]|0)+3>>0];j=c[k>>2]|0;k=f;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;break}case 5:{b=d[(c[h>>2]|0)+2>>0]<<24|d[(c[h>>2]|0)+2+1>>0]<<16|d[(c[h>>2]|0)+2+2>>0]<<8|d[(c[h>>2]|0)+2+3>>0];j=a[c[h>>2]>>0]<<8|d[(c[h>>2]|0)+1>>0];k=f;c[k>>2]=gR(b|0,0,rR(0,1,j|0,((j|0)<0)<<31>>31|0)|0,C|0)|0;c[k+4>>2]=C;break}case 6:{k=j;c[k>>2]=d[c[h>>2]>>0]<<24|d[(c[h>>2]|0)+1>>0]<<16|d[(c[h>>2]|0)+2>>0]<<8|d[(c[h>>2]|0)+3>>0];c[k+4>>2]=0;k=c[j>>2]|0;b=j;c[b>>2]=d[(c[h>>2]|0)+4>>0]<<24|d[(c[h>>2]|0)+4+1>>0]<<16|d[(c[h>>2]|0)+4+2>>0]<<8|d[(c[h>>2]|0)+4+3>>0];c[b+4>>2]=k;b=j;j=c[b+4>>2]|0;k=f;c[k>>2]=c[b>>2];c[k+4>>2]=j;break}default:{k=f;c[k>>2]=(c[g>>2]|0)-8;c[k+4>>2]=0}}k=f;C=c[k+4>>2]|0;i=l;return c[k>>2]|0}function yF(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+128|0;h=u+116|0;j=u+112|0;k=u+108|0;l=u+104|0;m=u+100|0;r=u+96|0;s=u+92|0;t=u+88|0;p=u+84|0;q=u+80|0;n=u+40|0;o=u;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;if((d[(c[j>>2]|0)+10>>0]|0|0)==(d[(c[l>>2]|0)+4>>0]|0|0)){c[h>>2]=Zb[c[(c[l>>2]|0)+12>>2]&255](c[(c[l>>2]|0)+8>>2]|0,c[(c[j>>2]|0)+12>>2]|0,c[(c[j>>2]|0)+16>>2]|0,c[(c[k>>2]|0)+12>>2]|0,c[(c[k>>2]|0)+16>>2]|0)|0;t=c[h>>2]|0;i=u;return t|0}AF(n,c[(c[j>>2]|0)+32>>2]|0,1);AF(o,c[(c[j>>2]|0)+32>>2]|0,1);BF(n,c[j>>2]|0,4096);BF(o,c[k>>2]|0,4096);c[s>>2]=Wg(n,a[(c[l>>2]|0)+4>>0]|0)|0;c[p>>2]=(c[s>>2]|0)==0?0:c[n+12>>2]|0;c[t>>2]=Wg(o,a[(c[l>>2]|0)+4>>0]|0)|0;c[q>>2]=(c[t>>2]|0)==0?0:c[o+12>>2]|0;c[r>>2]=Zb[c[(c[l>>2]|0)+12>>2]&255](c[(c[l>>2]|0)+8>>2]|0,c[p>>2]|0,c[s>>2]|0,c[q>>2]|0,c[t>>2]|0)|0;if(((c[s>>2]|0)==0|(c[t>>2]|0)==0)&(c[m>>2]|0)!=0)a[c[m>>2]>>0]=7;Ug(n);Ug(o);c[h>>2]=c[r>>2];t=c[h>>2]|0;i=u;return t|0}function zF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f;e=f+8|0;g=d;c[g>>2]=a;c[g+4>>2]=b;c[e>>2]=1;while(1){b=d;b=hR(c[b>>2]|0,c[b+4>>2]|0,7)|0;g=C;a=d;c[a>>2]=b;c[a+4>>2]=g;a=c[e>>2]|0;if(!((b|0)!=0|(g|0)!=0))break;c[e>>2]=a+1}i=f;return a|0}function AF(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;g=f+4|0;h=f;j=f+8|0;c[g>>2]=a;c[h>>2]=d;b[j>>1]=e;b[(c[g>>2]|0)+8>>1]=b[j>>1]|0;c[(c[g>>2]|0)+32>>2]=c[h>>2];c[(c[g>>2]|0)+24>>2]=0;i=f;return}function BF(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=a;c[h>>2]=d;c[j>>2]=f;d=c[g>>2]|0;if((e[(c[g>>2]|0)+8>>1]|0)&9312){CF(d,c[h>>2]|0,c[j>>2]|0);i=k;return}f=c[h>>2]|0;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];c[d+16>>2]=c[f+16>>2];if((e[(c[h>>2]|0)+8>>1]|0)&2048){i=k;return}h=(c[g>>2]|0)+8|0;b[h>>1]=(e[h>>1]|0)&-7169;h=(c[g>>2]|0)+8|0;b[h>>1]=e[h>>1]|0|c[j>>2];i=k;return}function CF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;DF(c[h>>2]|0);BF(c[h>>2]|0,c[g>>2]|0,c[f>>2]|0);i=e;return}function DF(a){a=a|0;var d=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=a;if((e[(c[f>>2]|0)+8>>1]|0)&8192)EF(c[f>>2]|0,c[c[f>>2]>>2]|0)|0;a=c[f>>2]|0;do if(!((e[(c[f>>2]|0)+8>>1]|0)&1024)){d=c[f>>2]|0;if((e[a+8>>1]|0)&32){FF(c[d>>2]|0);break}if((e[d+8>>1]|0)&64){c[g>>2]=c[c[f>>2]>>2];c[(c[g>>2]|0)+4>>2]=c[(c[c[g>>2]>>2]|0)+180>>2];c[(c[c[g>>2]>>2]|0)+180>>2]=c[g>>2]}}else Qb[c[a+36>>2]&255](c[(c[f>>2]|0)+16>>2]|0);while(0);b[(c[f>>2]|0)+8>>1]=1;i=h;return}function EF(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+96|0;f=k+80|0;g=k+76|0;j=k+72|0;h=k+40|0;e=k;c[f>>2]=a;c[g>>2]=d;c[j>>2]=0;if(!(c[g>>2]|0)){j=c[j>>2]|0;i=k;return j|0}if(!(c[(c[g>>2]|0)+16>>2]|0)){j=c[j>>2]|0;i=k;return j|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[h+20>>2]=0;c[h+24>>2]=0;c[h+28>>2]=0;d=e;a=d+40|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(a|0));b[e+8>>1]=1;c[e+32>>2]=c[(c[f>>2]|0)+32>>2];c[h>>2]=e;c[h+8>>2]=c[f>>2];c[h+4>>2]=c[g>>2];Qb[c[(c[g>>2]|0)+16>>2]&255](h);if((c[(c[f>>2]|0)+24>>2]|0)>0)Sf(c[(c[f>>2]|0)+32>>2]|0,c[(c[f>>2]|0)+20>>2]|0);d=c[f>>2]|0;a=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(a|0));c[j>>2]=c[h+20>>2];j=c[j>>2]|0;i=k;return j|0}function FF(a){a=a|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=c[c[d>>2]>>2];while(1){if(!(c[e>>2]|0))break;c[f>>2]=c[c[e>>2]>>2];Sf(c[(c[d>>2]|0)+4>>2]|0,c[e>>2]|0);c[e>>2]=c[f>>2]}c[c[d>>2]>>2]=0;b[(c[d>>2]|0)+24>>1]=0;c[(c[d>>2]|0)+8>>2]=0;c[(c[d>>2]|0)+12>>2]=0;c[(c[d>>2]|0)+20>>2]=0;b[(c[d>>2]|0)+26>>1]=1;i=g;return}function GF(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0;k=i;i=i+32|0;n=k+20|0;l=k+16|0;g=k+12|0;j=k;m=k+8|0;c[n>>2]=a;c[l>>2]=e;c[g>>2]=f;f=j;c[f>>2]=(d[c[n>>2]>>0]|0)<<24|(d[(c[n>>2]|0)+1>>0]|0)<<16|(d[(c[n>>2]|0)+2>>0]|0)<<8|(d[(c[n>>2]|0)+3>>0]|0);c[f+4>>2]=0;c[m>>2]=(d[(c[n>>2]|0)+4>>0]|0)<<24|(d[(c[n>>2]|0)+4+1>>0]|0)<<16|(d[(c[n>>2]|0)+4+2>>0]|0)<<8|(d[(c[n>>2]|0)+4+3>>0]|0);f=gR(0,c[j>>2]|0,c[m>>2]|0,0)|0;e=j;c[e>>2]=f;c[e+4>>2]=C;if((c[l>>2]|0)==6){l=j;m=c[l+4>>2]|0;n=c[g>>2]|0;c[n>>2]=c[l>>2];c[n+4>>2]=m;b[(c[g>>2]|0)+8>>1]=4;i=k;return 8}else{n=c[g>>2]|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];n=(HF(+h[c[g>>2]>>3])|0)!=0;b[(c[g>>2]|0)+8>>1]=n?1:8;i=k;return 8}return 0}function HF(a){a=+a;var b=0,d=0,e=0,f=0,g=0;d=i;i=i+32|0;g=d+16|0;b=d+24|0;f=d+8|0;e=d;h[g>>3]=a;h[f>>3]=+h[g>>3];h[e>>3]=+h[f>>3];c[b>>2]=+h[f>>3]!=+h[e>>3]&1;i=d;return c[b>>2]|0}function IF(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+20|0;j=p+16|0;k=p+12|0;n=p+8|0;l=p+4|0;m=p;c[j>>2]=f;c[k>>2]=g;if((d[(c[j>>2]|0)+66>>0]|0)!=1){if((d[(c[j>>2]|0)+66>>0]|0)>=3)f=WE(c[j>>2]|0)|0;else f=0;c[n>>2]=f;if(c[n>>2]|0){c[h>>2]=c[n>>2];o=c[h>>2]|0;i=p;return o|0}if(!(d[(c[j>>2]|0)+66>>0]|0)){c[c[k>>2]>>2]=1;c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}if((c[(c[j>>2]|0)+60>>2]|0)!=0?(a[(c[j>>2]|0)+66>>0]=1,g=(c[(c[j>>2]|0)+60>>2]|0)>0,c[(c[j>>2]|0)+60>>2]=0,g):0){c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}}c[m>>2]=c[(c[j>>2]|0)+120+(a[(c[j>>2]|0)+68>>0]<<2)>>2];g=(c[j>>2]|0)+80+(a[(c[j>>2]|0)+68>>0]<<1)|0;f=(b[g>>1]|0)+1<<16>>16;b[g>>1]=f;c[l>>2]=f&65535;f=(a[(c[m>>2]|0)+4>>0]|0)!=0;if((c[l>>2]|0)<(e[(c[m>>2]|0)+18>>1]|0))if(f){c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}else{c[h>>2]=JF(c[j>>2]|0)|0;o=c[h>>2]|0;i=p;return o|0}if(!f){o=c[j>>2]|0;c[n>>2]=XE(o,$q((c[(c[m>>2]|0)+56>>2]|0)+((d[(c[m>>2]|0)+5>>0]|0)+8)|0)|0)|0;if(c[n>>2]|0){c[h>>2]=c[n>>2];o=c[h>>2]|0;i=p;return o|0}else{c[h>>2]=JF(c[j>>2]|0)|0;o=c[h>>2]|0;i=p;return o|0}}do{if(!(a[(c[j>>2]|0)+68>>0]|0)){o=17;break}ZE(c[j>>2]|0);c[m>>2]=c[(c[j>>2]|0)+120+(a[(c[j>>2]|0)+68>>0]<<2)>>2]}while((e[(c[j>>2]|0)+80+(a[(c[j>>2]|0)+68>>0]<<1)>>1]|0)>=(e[(c[m>>2]|0)+18>>1]|0));if((o|0)==17){c[c[k>>2]>>2]=1;a[(c[j>>2]|0)+66>>0]=0;c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}if(a[(c[m>>2]|0)+2>>0]|0){c[h>>2]=TE(c[j>>2]|0,c[k>>2]|0)|0;o=c[h>>2]|0;i=p;return o|0}else{c[h>>2]=0;o=c[h>>2]|0;i=p;return o|0}return 0}function JF(b){b=b|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;h=k+8|0;j=k+4|0;g=k;c[f>>2]=b;c[j>>2]=0;while(1){if(c[j>>2]|0){f=5;break}b=c[(c[f>>2]|0)+120+(a[(c[f>>2]|0)+68>>0]<<2)>>2]|0;c[g>>2]=b;if(!((a[b+4>>0]|0)!=0^1)){f=5;break}c[h>>2]=$q((c[(c[g>>2]|0)+56>>2]|0)+(e[(c[g>>2]|0)+20>>1]&(d[(c[(c[g>>2]|0)+64>>2]|0)+(e[(c[f>>2]|0)+80+(a[(c[f>>2]|0)+68>>0]<<1)>>1]<<1)>>0]<<8|d[(c[(c[g>>2]|0)+64>>2]|0)+(e[(c[f>>2]|0)+80+(a[(c[f>>2]|0)+68>>0]<<1)>>1]<<1)+1>>0]))|0)|0;c[j>>2]=XE(c[f>>2]|0,c[h>>2]|0)|0}if((f|0)==5){i=k;return c[j>>2]|0}return 0}function KF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;j=h+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[j>>2]=a;c[d>>2]=b;c[e>>2]=c[c[j>>2]>>2];c[g>>2]=Nv(c[e>>2]|0,0,0,0)|0;if(!(c[g>>2]|0)){j=c[g>>2]|0;i=h;return j|0}j=nh(c[e>>2]|0,c[(c[d>>2]|0)+12>>2]|0)|0;c[(c[g>>2]|0)+8+(((c[c[g>>2]>>2]|0)-1|0)*72|0)+8>>2]=j;c[f>>2]=Dh(c[e>>2]|0,c[(c[(c[d>>2]|0)+4>>2]|0)+20>>2]|0)|0;if(!((c[f>>2]|0)==0|(c[f>>2]|0)>=2)){j=c[g>>2]|0;i=h;return j|0}j=nh(c[e>>2]|0,c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)>>2]|0)|0;c[(c[g>>2]|0)+8+(((c[c[g>>2]>>2]|0)-1|0)*72|0)+4>>2]=j;j=c[g>>2]|0;i=h;return j|0}function LF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=g;return}c[f>>2]=c[(c[e>>2]|0)+28>>2];Zu(c[d>>2]|0,c[(c[f>>2]|0)+16>>2]|0);Vu(c[d>>2]|0,c[(c[f>>2]|0)+20>>2]|0);Wu(c[d>>2]|0,c[(c[f>>2]|0)+8>>2]|0);Zu(c[d>>2]|0,c[(c[e>>2]|0)+12>>2]|0);Sf(c[d>>2]|0,c[e>>2]|0);i=g;return}function MF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h+12|0;d=h+8|0;e=h+4|0;f=h;c[d>>2]=a;c[e>>2]=b;if((c[d>>2]|0)==0|(c[e>>2]|0)==0){c[g>>2]=1;g=c[g>>2]|0;i=h;return g|0}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0)){d=8;break}if((Yy(c[d>>2]|0,c[(c[(c[e>>2]|0)+4>>2]|0)+((c[f>>2]|0)*20|0)+4>>2]|0)|0)>=0){d=6;break}c[f>>2]=(c[f>>2]|0)+1}if((d|0)==6){c[g>>2]=1;g=c[g>>2]|0;i=h;return g|0}else if((d|0)==8){c[g>>2]=0;g=c[g>>2]|0;i=h;return g|0}return 0}function NF(e,f){e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;g=j+4|0;h=j;c[g>>2]=e;c[h>>2]=f;if((d[c[h>>2]>>0]|0)!=152){i=j;return 0}if((b[(c[h>>2]|0)+32>>1]|0)<0){e=(c[g>>2]|0)+20|0;a[e>>0]=d[e>>0]|2;i=j;return 0}if((c[(c[(c[g>>2]|0)+24>>2]|0)+(b[(c[h>>2]|0)+32>>1]<<2)>>2]|0)<0){i=j;return 0}e=(c[g>>2]|0)+20|0;a[e>>0]=d[e>>0]|1;i=j;return 0}function OF(a,f){a=a|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l+12|0;j=l+8|0;k=l+4|0;g=l;c[j>>2]=a;c[k>>2]=f;if((e[(c[j>>2]|0)+50>>1]|0)!=(e[(c[k>>2]|0)+50>>1]|0)){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}if((d[(c[j>>2]|0)+54>>0]|0)!=(d[(c[k>>2]|0)+54>>0]|0)){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(e[(c[k>>2]|0)+50>>1]|0)){g=17;break}if((b[(c[(c[k>>2]|0)+4>>2]|0)+(c[g>>2]<<1)>>1]|0)!=(b[(c[(c[j>>2]|0)+4>>2]|0)+(c[g>>2]<<1)>>1]|0)){g=8;break}if((b[(c[(c[k>>2]|0)+4>>2]|0)+(c[g>>2]<<1)>>1]|0)==-2?(py(c[(c[(c[(c[k>>2]|0)+40>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)>>2]|0,c[(c[(c[(c[j>>2]|0)+40>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)>>2]|0,-1)|0)!=0:0){ +g=11;break}if((d[(c[(c[k>>2]|0)+28>>2]|0)+(c[g>>2]|0)>>0]|0)!=(d[(c[(c[j>>2]|0)+28>>2]|0)+(c[g>>2]|0)>>0]|0)){g=13;break}if(Td(c[(c[(c[k>>2]|0)+32>>2]|0)+(c[g>>2]<<2)>>2]|0,c[(c[(c[j>>2]|0)+32>>2]|0)+(c[g>>2]<<2)>>2]|0)|0){g=15;break}c[g>>2]=(c[g>>2]|0)+1}if((g|0)==8){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}else if((g|0)==11){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}else if((g|0)==13){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}else if((g|0)==15){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}else if((g|0)==17)if(py(c[(c[k>>2]|0)+36>>2]|0,c[(c[j>>2]|0)+36>>2]|0,-1)|0){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}else{c[h>>2]=1;k=c[h>>2]|0;i=l;return k|0}return 0}function PF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e+8|0;h=e+4|0;g=e;c[f>>2]=a;c[h>>2]=b;c[g>>2]=d;c[(c[h>>2]|0)+4>>2]=c[f>>2];c[c[h>>2]>>2]=c[(c[f>>2]|0)+496>>2];c[(c[f>>2]|0)+496>>2]=c[g>>2];i=e;return}function QF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+64|0;f=p+48|0;g=p+44|0;h=p+40|0;j=p+36|0;l=p+16|0;o=p+12|0;n=p+8|0;k=p+4|0;m=p;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=c[c[f>>2]>>2];c[m>>2]=Dh(c[k>>2]|0,c[(c[g>>2]|0)+64>>2]|0)|0;c[h>>2]=ny(c[k>>2]|0,c[h>>2]|0,0)|0;c[n>>2]=Nv(c[k>>2]|0,0,0,0)|0;if(c[n>>2]|0){d=nh(c[k>>2]|0,c[c[g>>2]>>2]|0)|0;c[(c[n>>2]|0)+8+8>>2]=d;d=nh(c[k>>2]|0,c[(c[(c[k>>2]|0)+16>>2]|0)+(c[m>>2]<<4)>>2]|0)|0;c[(c[n>>2]|0)+8+4>>2]=d}c[o>>2]=Fv(c[f>>2]|0,0,c[n>>2]|0,c[h>>2]|0,0,0,0,-32768,0,0)|0;ZA(l,12,c[j>>2]|0);Cv(c[f>>2]|0,c[o>>2]|0,l)|0;Wu(c[k>>2]|0,c[o>>2]|0);i=p;return}function RF(d,e,f,g,h,j,k,l){d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;F=i;i=i+96|0;r=F+88|0;H=F+84|0;s=F+80|0;m=F+76|0;n=F+72|0;o=F+68|0;G=F+64|0;t=F+60|0;E=F+56|0;w=F+52|0;x=F+48|0;I=F+44|0;z=F+40|0;A=F+36|0;y=F+32|0;B=F+28|0;C=F+24|0;D=F+20|0;q=F+16|0;p=F+8|0;v=F+4|0;u=F;c[r>>2]=d;c[H>>2]=e;c[s>>2]=f;c[m>>2]=g;c[n>>2]=h;c[o>>2]=j;c[G>>2]=k;c[t>>2]=l;c[E>>2]=c[(c[r>>2]|0)+8>>2];c[I>>2]=c[c[r>>2]>>2];c[z>>2]=Ax(c[I>>2]|0,c[s>>2]|0)|0;c[y>>2]=2+(b[(c[s>>2]|0)+34>>1]|0);c[q>>2]=c[(c[H>>2]|0)+8+44>>2];f=(c[r>>2]|0)+72|0;k=c[f>>2]|0;c[f>>2]=k+1;c[w>>2]=k;c[u>>2]=Rw(c[E>>2]|0,57,c[w>>2]|0,c[y>>2]|0)|0;c[B>>2]=(c[(c[r>>2]|0)+76>>2]|0)+1;k=(c[r>>2]|0)+76|0;c[k>>2]=(c[k>>2]|0)+(c[y>>2]|0);k=(c[r>>2]|0)+76|0;f=(c[k>>2]|0)+1|0;c[k>>2]=f;c[C>>2]=f;f=(c[r>>2]|0)+76|0;k=(c[f>>2]|0)+1|0;c[f>>2]=k;c[D>>2]=k;c[A>>2]=RC(c[r>>2]|0,c[H>>2]|0,c[G>>2]|0,0,0,4,0)|0;if(!(c[A>>2]|0)){i=F;return}Rw(c[E>>2]|0,103,c[q>>2]|0,c[B>>2]|0)|0;if(c[n>>2]|0)xA(c[r>>2]|0,c[n>>2]|0,(c[B>>2]|0)+1|0);else Rw(c[E>>2]|0,103,c[q>>2]|0,(c[B>>2]|0)+1|0)|0;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(b[(c[s>>2]|0)+34>>1]|0))break;if((c[(c[o>>2]|0)+(c[x>>2]<<2)>>2]|0)>=0)xA(c[r>>2]|0,c[(c[(c[m>>2]|0)+4>>2]|0)+((c[(c[o>>2]|0)+(c[x>>2]<<2)>>2]|0)*20|0)>>2]|0,(c[B>>2]|0)+2+(c[x>>2]|0)|0);else Vw(c[E>>2]|0,153,c[q>>2]|0,c[x>>2]|0,(c[B>>2]|0)+2+(c[x>>2]|0)|0)|0;c[x>>2]=(c[x>>2]|0)+1}c[v>>2]=SF(c[A>>2]|0,p)|0;m=c[E>>2]|0;if(c[v>>2]|0){pA(m,c[u>>2]|0)|0;if(!(c[(c[r>>2]|0)+416>>2]|0))a[(c[r>>2]|0)+20>>0]=0}else{Vw(m,49,c[B>>2]|0,c[y>>2]|0,c[C>>2]|0)|0;Rw(c[E>>2]|0,74,c[w>>2]|0,c[D>>2]|0)|0;Vw(c[E>>2]|0,75,c[w>>2]|0,c[C>>2]|0,c[D>>2]|0)|0}a:do if(!(c[v>>2]|0)){SC(c[A>>2]|0);c[u>>2]=xz(c[E>>2]|0,108,c[w>>2]|0)|0;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[y>>2]|0))break a;Vw(c[E>>2]|0,47,c[w>>2]|0,c[x>>2]|0,(c[B>>2]|0)+(c[x>>2]|0)|0)|0;c[x>>2]=(c[x>>2]|0)+1}}while(0);EC(c[r>>2]|0,c[s>>2]|0);Uw(c[E>>2]|0,12,0,c[y>>2]|0,c[B>>2]|0,c[z>>2]|0,-10)|0;Fh(c[E>>2]|0,((c[t>>2]|0)==10?2:c[t>>2]|0)&255);Bx(c[r>>2]|0);if(!(c[v>>2]|0)){Rw(c[E>>2]|0,7,c[w>>2]|0,(c[u>>2]|0)+1|0)|0;Fz(c[E>>2]|0,c[u>>2]|0);Rw(c[E>>2]|0,61,c[w>>2]|0,0)|0;i=F;return}else{SC(c[A>>2]|0);i=F;return}}function SF(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;f=i;i=i+16|0;e=f+4|0;g=f;c[e>>2]=a;c[g>>2]=b;a=c[g>>2]|0;b=(c[e>>2]|0)+60|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];i=f;return d[(c[e>>2]|0)+38>>0]|0|0}function TF(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[(c[b>>2]|0)+4>>2]|0)){i=d;return}c[(c[(c[b>>2]|0)+4>>2]|0)+496>>2]=c[c[b>>2]>>2];c[(c[b>>2]|0)+4>>2]=0;i=d;return}function UF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;k=p+32|0;f=p+28|0;l=p+24|0;m=p+20|0;n=p+16|0;o=p+12|0;j=p+8|0;g=p+4|0;h=p;c[f>>2]=a;c[l>>2]=b;c[m>>2]=d;c[n>>2]=e;do if(((c[c[l>>2]>>2]|0)+(c[m>>2]|0)|0)>>>0>(c[(c[l>>2]|0)+4>>2]|0)>>>0){c[g>>2]=(c[c[l>>2]>>2]|0)+(c[m>>2]|0);c[j>>2]=Ew(c[f>>2]|0,c[l>>2]|0,80+(((c[g>>2]|0)-1|0)*72|0)|0,0)|0;if(c[j>>2]|0){c[l>>2]=c[j>>2];c[h>>2]=(((($t(c[f>>2]|0,c[j>>2]|0)|0)-80|0)>>>0)/72|0)+1;c[(c[l>>2]|0)+4>>2]=c[h>>2];break}c[k>>2]=c[l>>2];o=c[k>>2]|0;i=p;return o|0}while(0);c[o>>2]=(c[c[l>>2]>>2]|0)-1;while(1){if((c[o>>2]|0)<(c[n>>2]|0))break;f=(c[l>>2]|0)+8+(((c[o>>2]|0)+(c[m>>2]|0)|0)*72|0)|0;a=(c[l>>2]|0)+8+((c[o>>2]|0)*72|0)|0;e=f+72|0;do{c[f>>2]=c[a>>2];f=f+4|0;a=a+4|0}while((f|0)<(e|0));c[o>>2]=(c[o>>2]|0)+-1}b=c[l>>2]|0;c[b>>2]=(c[b>>2]|0)+(c[m>>2]|0);kR((c[l>>2]|0)+8+((c[n>>2]|0)*72|0)|0,0,(c[m>>2]|0)*72|0)|0;c[o>>2]=c[n>>2];while(1){if((c[o>>2]|0)>=((c[n>>2]|0)+(c[m>>2]|0)|0))break;c[(c[l>>2]|0)+8+((c[o>>2]|0)*72|0)+44>>2]=-1;c[o>>2]=(c[o>>2]|0)+1}c[k>>2]=c[l>>2];o=c[k>>2]|0;i=p;return o|0}function VF(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;j=i;i=i+32|0;h=j;f=j+20|0;g=j+16|0;m=j+12|0;l=j+8|0;k=j+4|0;c[g>>2]=a;c[m>>2]=b;c[l>>2]=e;c[k>>2]=d[c[m>>2]>>0];if((c[l>>2]|0)>1?(c[k>>2]|0)==10|(c[k>>2]|0)==11:0){Ah(c[g>>2]|0,36847,h);c[f>>2]=1;m=c[f>>2]|0;i=j;return m|0}c[f>>2]=0;m=c[f>>2]|0;i=j;return m|0}function WF(f,g,h,j,k){f=f|0;g=g|0;h=h|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;Q=i;i=i+128|0;y=Q+112|0;u=Q+108|0;v=Q+104|0;z=Q+100|0;l=Q+96|0;A=Q+92|0;n=Q+88|0;I=Q+84|0;K=Q+80|0;L=Q+76|0;J=Q+72|0;M=Q+68|0;G=Q+64|0;D=Q+60|0;C=Q+56|0;O=Q+52|0;N=Q+48|0;B=Q+44|0;m=Q+40|0;p=Q+36|0;r=Q+32|0;o=Q+28|0;q=Q+24|0;s=Q+20|0;w=Q+16|0;x=Q+12|0;F=Q+8|0;E=Q+116|0;P=Q+4|0;H=Q;c[u>>2]=f;c[v>>2]=g;c[z>>2]=h;c[l>>2]=j;c[A>>2]=k;c[n>>2]=c[(c[u>>2]|0)+496>>2];c[B>>2]=c[c[u>>2]>>2];if(e[(c[B>>2]|0)+60>>1]&1){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}c[J>>2]=c[(c[v>>2]|0)+32>>2];c[N>>2]=(c[J>>2]|0)+8+((c[z>>2]|0)*72|0);c[D>>2]=c[(c[N>>2]|0)+44>>2];c[K>>2]=c[(c[N>>2]|0)+20>>2];do if(c[A>>2]|0){if(c[l>>2]|0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((c[c[J>>2]>>2]|0)>1){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if(!((c[(c[v>>2]|0)+36>>2]|0)!=0?(c[(c[(c[v>>2]|0)+36>>2]|0)+4>>2]&2097152|0)!=0:0))t=10;if(((t|0)==10?((iz(c[c[v>>2]>>2]|0)|0)&2097152|0)==0:0)?((iz(c[(c[v>>2]|0)+48>>2]|0)|0)&2097152|0)==0:0)break;c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}while(0);c[M>>2]=c[(c[K>>2]|0)+32>>2];if((c[(c[K>>2]|0)+60>>2]|0)!=0?(c[(c[v>>2]|0)+60>>2]|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if(c[(c[K>>2]|0)+64>>2]|0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((e[(c[v>>2]|0)+6>>1]&128|0)!=0?(c[(c[K>>2]|0)+60>>2]|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if(!(c[c[M>>2]>>2]|0)){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if(e[(c[K>>2]|0)+6>>1]&1){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((c[(c[K>>2]|0)+60>>2]|0)!=0?(c[l>>2]|0)!=0?1:(c[c[J>>2]>>2]|0)>1:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((c[A>>2]|0)!=0?(e[(c[v>>2]|0)+6>>1]&1|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((c[(c[v>>2]|0)+48>>2]|0)!=0?(c[(c[K>>2]|0)+48>>2]|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((c[l>>2]|0)!=0?(c[(c[K>>2]|0)+48>>2]|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((c[(c[K>>2]|0)+60>>2]|0)!=0?(c[(c[v>>2]|0)+36>>2]|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((c[(c[K>>2]|0)+60>>2]|0)!=0?(e[(c[v>>2]|0)+6>>1]&1|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if(e[(c[K>>2]|0)+6>>1]&12288){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if((e[(c[v>>2]|0)+6>>1]&8192|0)!=0?(c[(c[K>>2]|0)+52>>2]|0)!=0:0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if(d[(c[N>>2]|0)+36>>0]&32){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}a:do if(c[(c[K>>2]|0)+52>>2]|0){if(c[(c[K>>2]|0)+48>>2]|0){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}do if(!(c[l>>2]|0)){if(e[(c[v>>2]|0)+6>>1]&1)break;if((c[c[J>>2]>>2]|0)!=1)break;c[L>>2]=c[K>>2];while(1){if(!(c[L>>2]|0))break;if(e[(c[L>>2]|0)+6>>1]&9){t=62;break}if((c[(c[L>>2]|0)+52>>2]|0)!=0?(d[(c[L>>2]|0)+4>>0]|0)!=116:0){t=62;break}if((c[c[(c[L>>2]|0)+32>>2]>>2]|0)<1){t=62;break}c[L>>2]=c[(c[L>>2]|0)+52>>2]}if((t|0)==62){c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}if(!(c[(c[v>>2]|0)+48>>2]|0))break a;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[c[(c[v>>2]|0)+48>>2]>>2]|0))break a;if(!(e[(c[(c[(c[v>>2]|0)+48>>2]|0)+4>>2]|0)+((c[m>>2]|0)*20|0)+16>>1]|0))break;c[m>>2]=(c[m>>2]|0)+1}c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}while(0);c[y>>2]=0;P=c[y>>2]|0;i=Q;return P|0}while(0);c[(c[u>>2]|0)+496>>2]=c[(c[N>>2]|0)+8>>2];Mw(c[u>>2]|0,21,0,0,0)|0;c[(c[u>>2]|0)+496>>2]=c[n>>2];c[K>>2]=c[(c[K>>2]|0)+52>>2];while(1){if(!(c[K>>2]|0))break;c[r>>2]=c[(c[v>>2]|0)+48>>2];c[o>>2]=c[(c[v>>2]|0)+60>>2];c[q>>2]=c[(c[v>>2]|0)+64>>2];c[s>>2]=c[(c[v>>2]|0)+52>>2];c[(c[v>>2]|0)+48>>2]=0;c[(c[v>>2]|0)+32>>2]=0;c[(c[v>>2]|0)+52>>2]=0;c[(c[v>>2]|0)+60>>2]=0;c[(c[v>>2]|0)+64>>2]=0;c[p>>2]=Hx(c[B>>2]|0,c[v>>2]|0,0)|0;c[(c[v>>2]|0)+64>>2]=c[q>>2];c[(c[v>>2]|0)+60>>2]=c[o>>2];c[(c[v>>2]|0)+48>>2]=c[r>>2];c[(c[v>>2]|0)+32>>2]=c[J>>2];a[(c[v>>2]|0)+4>>0]=116;l=c[s>>2]|0;if(!(c[p>>2]|0))c[(c[v>>2]|0)+52>>2]=l;else{c[(c[p>>2]|0)+52>>2]=l;if(c[s>>2]|0)c[(c[s>>2]|0)+56>>2]=c[p>>2];c[(c[p>>2]|0)+56>>2]=c[v>>2];c[(c[v>>2]|0)+52>>2]=c[p>>2]}if(a[(c[B>>2]|0)+65>>0]|0){t=78;break}c[K>>2]=c[(c[K>>2]|0)+52>>2]}if((t|0)==78){c[y>>2]=1;P=c[y>>2]|0;i=Q;return P|0}t=c[(c[N>>2]|0)+20>>2]|0;c[L>>2]=t;c[K>>2]=t;Sf(c[B>>2]|0,c[(c[N>>2]|0)+4>>2]|0);Sf(c[B>>2]|0,c[(c[N>>2]|0)+8>>2]|0);Sf(c[B>>2]|0,c[(c[N>>2]|0)+12>>2]|0);c[(c[N>>2]|0)+4>>2]=0;c[(c[N>>2]|0)+8>>2]=0;c[(c[N>>2]|0)+12>>2]=0;c[(c[N>>2]|0)+20>>2]=0;if(c[(c[N>>2]|0)+16>>2]|0){c[w>>2]=c[(c[N>>2]|0)+16>>2];if((e[(c[w>>2]|0)+36>>1]|0)==1){l=c[u>>2]|0;if(c[(c[u>>2]|0)+416>>2]|0)l=c[l+416>>2]|0;c[x>>2]=l;c[(c[w>>2]|0)+68>>2]=c[(c[x>>2]|0)+528>>2];c[(c[x>>2]|0)+528>>2]=c[w>>2]}else{x=(c[w>>2]|0)+36|0;b[x>>1]=(b[x>>1]|0)+-1<<16>>16}c[(c[N>>2]|0)+16>>2]=0}c[I>>2]=c[v>>2];while(1){if(!(c[I>>2]|0))break;a[E>>0]=0;c[M>>2]=c[(c[K>>2]|0)+32>>2];c[F>>2]=c[c[M>>2]>>2];c[J>>2]=c[(c[I>>2]|0)+32>>2];if(!(c[J>>2]|0)){x=Nv(c[B>>2]|0,0,0,0)|0;c[(c[I>>2]|0)+32>>2]=x;c[J>>2]=x;if(!(c[J>>2]|0))break}else a[E>>0]=a[(c[N>>2]|0)+36>>0]|0;if((c[F>>2]|0)>1?(x=UF(c[B>>2]|0,c[J>>2]|0,(c[F>>2]|0)-1|0,(c[z>>2]|0)+1|0)|0,c[J>>2]=x,c[(c[I>>2]|0)+32>>2]=x,(a[(c[B>>2]|0)+65>>0]|0)!=0):0)break;c[C>>2]=0;while(1){if((c[C>>2]|0)>=(c[F>>2]|0))break;_u(c[B>>2]|0,c[(c[J>>2]|0)+8+(((c[C>>2]|0)+(c[z>>2]|0)|0)*72|0)+52>>2]|0);l=(c[J>>2]|0)+8+(((c[C>>2]|0)+(c[z>>2]|0)|0)*72|0)|0;h=(c[M>>2]|0)+8+((c[C>>2]|0)*72|0)|0;m=l+72|0;do{c[l>>2]=c[h>>2];l=l+4|0;h=h+4|0}while((l|0)<(m|0));l=(c[M>>2]|0)+8+((c[C>>2]|0)*72|0)|0;m=l+72|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[C>>2]=(c[C>>2]|0)+1}a[(c[J>>2]|0)+8+((c[z>>2]|0)*72|0)+36>>0]=a[E>>0]|0;c[G>>2]=c[c[I>>2]>>2];c[C>>2]=0;while(1){if((c[C>>2]|0)>=(c[c[G>>2]>>2]|0))break;if(!(c[(c[(c[G>>2]|0)+4>>2]|0)+((c[C>>2]|0)*20|0)+4>>2]|0)){c[P>>2]=nh(c[B>>2]|0,c[(c[(c[G>>2]|0)+4>>2]|0)+((c[C>>2]|0)*20|0)+8>>2]|0)|0;Jw(c[P>>2]|0)|0;c[(c[(c[G>>2]|0)+4>>2]|0)+((c[C>>2]|0)*20|0)+4>>2]=c[P>>2]}c[C>>2]=(c[C>>2]|0)+1}if(c[(c[K>>2]|0)+48>>2]|0){c[H>>2]=c[(c[K>>2]|0)+48>>2];c[C>>2]=0;while(1){if((c[C>>2]|0)>=(c[c[H>>2]>>2]|0))break;b[(c[(c[H>>2]|0)+4>>2]|0)+((c[C>>2]|0)*20|0)+16>>1]=0;c[C>>2]=(c[C>>2]|0)+1}c[(c[I>>2]|0)+48>>2]=c[H>>2];c[(c[K>>2]|0)+48>>2]=0}c[O>>2]=ny(c[B>>2]|0,c[(c[K>>2]|0)+36>>2]|0,0)|0;if(c[A>>2]|0){c[(c[I>>2]|0)+44>>2]=c[(c[I>>2]|0)+36>>2];c[(c[I>>2]|0)+36>>2]=c[O>>2];w=c[B>>2]|0;x=c[(c[I>>2]|0)+44>>2]|0;x=az(w,x,ny(c[B>>2]|0,c[(c[K>>2]|0)+44>>2]|0,0)|0)|0;c[(c[I>>2]|0)+44>>2]=x;x=vy(c[B>>2]|0,c[(c[K>>2]|0)+40>>2]|0,0)|0;c[(c[I>>2]|0)+40>>2]=x}else{x=az(c[B>>2]|0,c[(c[I>>2]|0)+36>>2]|0,c[O>>2]|0)|0;c[(c[I>>2]|0)+36>>2]=x}EG(c[B>>2]|0,c[I>>2]|0,c[D>>2]|0,c[c[K>>2]>>2]|0,0);x=(c[I>>2]|0)+6|0;b[x>>1]=e[x>>1]|e[(c[K>>2]|0)+6>>1]&1;if(c[(c[K>>2]|0)+60>>2]|0){c[(c[I>>2]|0)+60>>2]=c[(c[K>>2]|0)+60>>2];c[(c[K>>2]|0)+60>>2]=0}c[I>>2]=c[(c[I>>2]|0)+52>>2];c[K>>2]=c[(c[K>>2]|0)+52>>2]}Wu(c[B>>2]|0,c[L>>2]|0);c[y>>2]=1;P=c[y>>2]|0;i=Q;return P|0}function XF(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,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;aa=i;i=i+240|0;$=aa+8|0;j=aa;k=aa+220|0;l=aa+216|0;m=aa+212|0;n=aa+208|0;V=aa+204|0;S=aa+200|0;_=aa+196|0;u=aa+176|0;J=aa+172|0;t=aa+168|0;D=aa+164|0;E=aa+160|0;o=aa+156|0;H=aa+152|0;Y=aa+148|0;I=aa+224|0;T=aa+144|0;N=aa+140|0;Q=aa+136|0;p=aa+132|0;Z=aa+112|0;y=aa+108|0;w=aa+104|0;A=aa+100|0;K=aa+96|0;W=aa+92|0;X=aa+88|0;z=aa+84|0;x=aa+80|0;B=aa+76|0;O=aa+72|0;R=aa+68|0;q=aa+64|0;F=aa+44|0;U=aa+40|0;L=aa+36|0;v=aa+32|0;M=aa+28|0;P=aa+24|0;s=aa+20|0;G=aa+16|0;r=aa+12|0;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[V>>2]=0;c[J>>2]=0;c[D>>2]=0;c[E>>2]=0;c[t>>2]=c[c[l>>2]>>2];c[S>>2]=c[(c[m>>2]|0)+52>>2];f=c[n>>2]|0;c[u>>2]=c[f>>2];c[u+4>>2]=c[f+4>>2];c[u+8>>2]=c[f+8>>2];c[u+12>>2]=c[f+12>>2];c[u+16>>2]=c[f+16>>2];a:do if(!(c[(c[S>>2]|0)+48>>2]|0)){g=c[l>>2]|0;if(c[(c[S>>2]|0)+60>>2]|0){c[$>>2]=xy(d[(c[m>>2]|0)+4>>0]|0)|0;Ah(g,36704,$);c[V>>2]=1;break}c[_>>2]=Pw(g)|0;if((d[u>>0]|0|0)==12){Rw(c[_>>2]|0,57,c[u+4>>2]|0,c[c[c[m>>2]>>2]>>2]|0)|0;Fh(c[_>>2]|0,8);a[u>>0]=14}if((e[(c[m>>2]|0)+6>>1]|0)&512){c[V>>2]=GG(c[l>>2]|0,c[m>>2]|0,u)|0;break}b:do if((e[(c[m>>2]|0)+6>>1]|0)&8192)HG(c[l>>2]|0,c[m>>2]|0,u);else{if(c[(c[m>>2]|0)+48>>2]|0){c[k>>2]=IG(c[l>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;$=c[k>>2]|0;i=aa;return $|0}switch(d[(c[m>>2]|0)+4>>0]|0|0){case 116:{c[o>>2]=0;c[(c[S>>2]|0)+8>>2]=c[(c[m>>2]|0)+8>>2];c[(c[S>>2]|0)+12>>2]=c[(c[m>>2]|0)+12>>2];c[(c[S>>2]|0)+60>>2]=c[(c[m>>2]|0)+60>>2];c[(c[S>>2]|0)+64>>2]=c[(c[m>>2]|0)+64>>2];c[D>>2]=c[(c[l>>2]|0)+472>>2];c[V>>2]=Cv(c[l>>2]|0,c[S>>2]|0,u)|0;c[(c[m>>2]|0)+60>>2]=0;c[(c[m>>2]|0)+64>>2]=0;if(c[V>>2]|0)break a;c[(c[m>>2]|0)+52>>2]=0;c[(c[m>>2]|0)+8>>2]=c[(c[S>>2]|0)+8>>2];c[(c[m>>2]|0)+12>>2]=c[(c[S>>2]|0)+12>>2];if((c[(c[m>>2]|0)+8>>2]|0)!=0?(c[o>>2]=xz(c[_>>2]|0,46,c[(c[m>>2]|0)+8>>2]|0)|0,(c[(c[m>>2]|0)+12>>2]|0)!=0):0)Vw(c[_>>2]|0,139,c[(c[m>>2]|0)+8>>2]|0,(c[(c[m>>2]|0)+12>>2]|0)+1|0,c[(c[m>>2]|0)+12>>2]|0)|0;c[E>>2]=c[(c[l>>2]|0)+472>>2];c[V>>2]=Cv(c[l>>2]|0,c[m>>2]|0,u)|0;c[J>>2]=c[(c[m>>2]|0)+52>>2];c[(c[m>>2]|0)+52>>2]=c[S>>2];Z=(c[S>>2]|0)+24|0;$=(c[m>>2]|0)+24|0;Y=$;c[$>>2]=gR(c[Y>>2]|0,c[Y+4>>2]|0,c[Z>>2]|0,c[Z+4>>2]|0)|0;c[$+4>>2]=C;if(((c[(c[S>>2]|0)+60>>2]|0)!=0?($=(ky(c[(c[S>>2]|0)+60>>2]|0,H)|0)!=0,$&(c[H>>2]|0)>0):0)?(Z=(c[m>>2]|0)+24|0,X=c[Z+4>>2]|0,$=c[H>>2]|0,Y=(($|0)<0)<<31>>31,X>>>0>Y>>>0|((X|0)==(Y|0)?(c[Z>>2]|0)>>>0>$>>>0:0)):0){Z=c[H>>2]|0;$=(c[m>>2]|0)+24|0;c[$>>2]=Z;c[$+4>>2]=((Z|0)<0)<<31>>31}if(!(c[o>>2]|0))break b;Fz(c[_>>2]|0,c[o>>2]|0);break b}case 115:case 117:{a[I>>0]=0;c[T>>2]=1;if((d[u>>0]|0|0)==(c[T>>2]|0))c[Y>>2]=c[u+4>>2];else{X=(c[l>>2]|0)+72|0;$=c[X>>2]|0;c[X>>2]=$+1;c[Y>>2]=$;c[p>>2]=Rw(c[_>>2]|0,57,c[Y>>2]|0,0)|0;c[(c[m>>2]|0)+16>>2]=c[p>>2];$=(Sy(c[m>>2]|0)|0)+6|0;b[$>>1]=e[$>>1]|0|16}ZA(Z,c[T>>2]|0,c[Y>>2]|0);c[D>>2]=c[(c[l>>2]|0)+472>>2];c[V>>2]=Cv(c[l>>2]|0,c[S>>2]|0,Z)|0;if(c[V>>2]|0)break a;if((d[(c[m>>2]|0)+4>>0]|0|0)==117)a[I>>0]=2;else a[I>>0]=1;c[(c[m>>2]|0)+52>>2]=0;c[N>>2]=c[(c[m>>2]|0)+60>>2];c[(c[m>>2]|0)+60>>2]=0;c[Q>>2]=c[(c[m>>2]|0)+64>>2];c[(c[m>>2]|0)+64>>2]=0;a[Z>>0]=a[I>>0]|0;c[E>>2]=c[(c[l>>2]|0)+472>>2];c[V>>2]=Cv(c[l>>2]|0,c[m>>2]|0,Z)|0;Vu(c[t>>2]|0,c[(c[m>>2]|0)+48>>2]|0);c[J>>2]=c[(c[m>>2]|0)+52>>2];c[(c[m>>2]|0)+52>>2]=c[S>>2];c[(c[m>>2]|0)+48>>2]=0;if((d[(c[m>>2]|0)+4>>0]|0|0)==115){Z=(c[S>>2]|0)+24|0;$=(c[m>>2]|0)+24|0;X=$;Z=gR(c[X>>2]|0,c[X+4>>2]|0,c[Z>>2]|0,c[Z+4>>2]|0)|0;c[$>>2]=Z;c[$+4>>2]=C}Zu(c[t>>2]|0,c[(c[m>>2]|0)+60>>2]|0);c[(c[m>>2]|0)+60>>2]=c[N>>2];c[(c[m>>2]|0)+64>>2]=c[Q>>2];c[(c[m>>2]|0)+8>>2]=0;c[(c[m>>2]|0)+12>>2]=0;if((d[u>>0]|0|0)==(c[T>>2]|0))break b;if((d[u>>0]|0|0)==9){c[K>>2]=c[m>>2];while(1){if(!(c[(c[K>>2]|0)+52>>2]|0))break;c[K>>2]=c[(c[K>>2]|0)+52>>2]}uG(c[l>>2]|0,c[(c[K>>2]|0)+32>>2]|0,c[c[K>>2]>>2]|0)}c[w>>2]=Cz(c[_>>2]|0)|0;c[y>>2]=Cz(c[_>>2]|0)|0;aG(c[l>>2]|0,c[m>>2]|0,c[w>>2]|0);Rw(c[_>>2]|0,108,c[Y>>2]|0,c[w>>2]|0)|0;c[A>>2]=Bz(c[_>>2]|0)|0;hG(c[l>>2]|0,c[m>>2]|0,c[c[m>>2]>>2]|0,c[Y>>2]|0,0,0,u,c[y>>2]|0,c[w>>2]|0);Gz(c[_>>2]|0,c[y>>2]|0);Rw(c[_>>2]|0,7,c[Y>>2]|0,c[A>>2]|0)|0;Gz(c[_>>2]|0,c[w>>2]|0);Rw(c[_>>2]|0,61,c[Y>>2]|0,0)|0;break b}default:{$=(c[l>>2]|0)+72|0;Z=c[$>>2]|0;c[$>>2]=Z+1;c[W>>2]=Z;Z=(c[l>>2]|0)+72|0;$=c[Z>>2]|0;c[Z>>2]=$+1;c[X>>2]=$;c[q>>2]=Rw(c[_>>2]|0,57,c[W>>2]|0,0)|0;c[(c[m>>2]|0)+16>>2]=c[q>>2];$=(Sy(c[m>>2]|0)|0)+6|0;b[$>>1]=e[$>>1]|0|16;ZA(F,1,c[W>>2]|0);c[D>>2]=c[(c[l>>2]|0)+472>>2];c[V>>2]=Cv(c[l>>2]|0,c[S>>2]|0,F)|0;if(c[V>>2]|0)break a;c[q>>2]=Rw(c[_>>2]|0,57,c[X>>2]|0,0)|0;c[(c[m>>2]|0)+16+4>>2]=c[q>>2];c[(c[m>>2]|0)+52>>2]=0;c[O>>2]=c[(c[m>>2]|0)+60>>2];c[(c[m>>2]|0)+60>>2]=0;c[R>>2]=c[(c[m>>2]|0)+64>>2];c[(c[m>>2]|0)+64>>2]=0;c[F+4>>2]=c[X>>2];c[E>>2]=c[(c[l>>2]|0)+472>>2];c[V>>2]=Cv(c[l>>2]|0,c[m>>2]|0,F)|0;c[J>>2]=c[(c[m>>2]|0)+52>>2];c[(c[m>>2]|0)+52>>2]=c[S>>2];Z=(c[m>>2]|0)+24|0;T=c[Z+4>>2]|0;$=(c[S>>2]|0)+24|0;Y=c[$+4>>2]|0;if(T>>>0>Y>>>0|((T|0)==(Y|0)?(c[Z>>2]|0)>>>0>(c[$>>2]|0)>>>0:0)){Y=(c[S>>2]|0)+24|0;Z=c[Y+4>>2]|0;$=(c[m>>2]|0)+24|0;c[$>>2]=c[Y>>2];c[$+4>>2]=Z}Zu(c[t>>2]|0,c[(c[m>>2]|0)+60>>2]|0);c[(c[m>>2]|0)+60>>2]=c[O>>2];c[(c[m>>2]|0)+64>>2]=c[R>>2];if((d[u>>0]|0|0)==9){c[L>>2]=c[m>>2];while(1){if(!(c[(c[L>>2]|0)+52>>2]|0))break;c[L>>2]=c[(c[L>>2]|0)+52>>2]}uG(c[l>>2]|0,c[(c[L>>2]|0)+32>>2]|0,c[c[L>>2]>>2]|0)}c[x>>2]=Cz(c[_>>2]|0)|0;c[z>>2]=Cz(c[_>>2]|0)|0;aG(c[l>>2]|0,c[m>>2]|0,c[x>>2]|0);Rw(c[_>>2]|0,108,c[W>>2]|0,c[x>>2]|0)|0;c[U>>2]=Wz(c[l>>2]|0)|0;c[B>>2]=Rw(c[_>>2]|0,101,c[W>>2]|0,c[U>>2]|0)|0;Eh(c[_>>2]|0,68,c[X>>2]|0,c[z>>2]|0,c[U>>2]|0,0)|0;_z(c[l>>2]|0,c[U>>2]|0);hG(c[l>>2]|0,c[m>>2]|0,c[c[m>>2]>>2]|0,c[W>>2]|0,0,0,u,c[z>>2]|0,c[x>>2]|0);Gz(c[_>>2]|0,c[z>>2]|0);Rw(c[_>>2]|0,7,c[W>>2]|0,c[B>>2]|0)|0;Gz(c[_>>2]|0,c[x>>2]|0);Rw(c[_>>2]|0,61,c[X>>2]|0,0)|0;Rw(c[_>>2]|0,61,c[W>>2]|0,0)|0;break b}}}while(0);JG(c[l>>2]|0,d[(c[m>>2]|0)+4>>0]|0,c[D>>2]|0,c[E>>2]|0,(d[(c[m>>2]|0)+4>>0]|0|0)!=116&1);if((e[(c[m>>2]|0)+6>>1]|0)&16){c[G>>2]=c[c[c[m>>2]>>2]>>2];c[M>>2]=Qz(c[t>>2]|0,c[G>>2]|0,1)|0;if(!(c[M>>2]|0)){c[V>>2]=7;break}c[v>>2]=0;c[s>>2]=(c[M>>2]|0)+20;while(1){if((c[v>>2]|0)>=(c[G>>2]|0))break;$=KG(c[l>>2]|0,c[m>>2]|0,c[v>>2]|0)|0;c[c[s>>2]>>2]=$;if(!(c[c[s>>2]>>2]|0))c[c[s>>2]>>2]=c[(c[t>>2]|0)+8>>2];c[v>>2]=(c[v>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+4}c[P>>2]=c[m>>2];while(1){if(!(c[P>>2]|0))break;c[v>>2]=0;while(1){if((c[v>>2]|0)>=2)break;c[r>>2]=c[(c[P>>2]|0)+16+(c[v>>2]<<2)>>2];if((c[r>>2]|0)<0)break;Lz(c[_>>2]|0,c[r>>2]|0,c[G>>2]|0);Z=c[_>>2]|0;$=c[r>>2]|0;Ih(Z,$,Vz(c[M>>2]|0)|0,-6);c[(c[P>>2]|0)+16+(c[v>>2]<<2)>>2]=-1;c[v>>2]=(c[v>>2]|0)+1}c[P>>2]=c[(c[P>>2]|0)+52>>2]}Rz(c[M>>2]|0)}}else{$=c[l>>2]|0;c[j>>2]=xy(d[(c[m>>2]|0)+4>>0]|0)|0;Ah($,36656,j);c[V>>2]=1}while(0);c[(c[n>>2]|0)+8>>2]=c[u+8>>2];c[(c[n>>2]|0)+12>>2]=c[u+12>>2];Wu(c[t>>2]|0,c[J>>2]|0);c[k>>2]=c[V>>2];$=c[k>>2]|0;i=aa;return $|0}function YF(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=0;gz(c[e>>2]|0,b);i=d;return c[b>>2]|0}function ZF(a,b,f,g){a=a|0;b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;o=p+4|0;n=p;c[j>>2]=a;c[k>>2]=b;c[l>>2]=f;c[m>>2]=g;c[n>>2]=0;if(!(c[l>>2]|0)){c[h>>2]=0;f=c[h>>2]|0;i=p;return f|0}if((e[(c[k>>2]|0)+6>>1]|0)&8200){c[h>>2]=0;f=c[h>>2]|0;i=p;return f|0}if(c[(c[k>>2]|0)+60>>2]|0){c[h>>2]=0;f=c[h>>2]|0;i=p;return f|0}while(1){if((d[c[l>>2]>>0]|0|0)!=72)break;f=ZF(c[j>>2]|0,c[k>>2]|0,c[(c[l>>2]|0)+16>>2]|0,c[m>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+f;c[l>>2]=c[(c[l>>2]|0)+12>>2]}if(c[(c[l>>2]|0)+4>>2]&1){c[h>>2]=0;f=c[h>>2]|0;i=p;return f|0}a:do if(ED(c[l>>2]|0,c[m>>2]|0)|0){c[n>>2]=(c[n>>2]|0)+1;while(1){if(!(c[k>>2]|0))break a;c[o>>2]=ny(c[j>>2]|0,c[l>>2]|0,0)|0;c[o>>2]=DG(c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,c[c[k>>2]>>2]|0)|0;f=az(c[j>>2]|0,c[(c[k>>2]|0)+36>>2]|0,c[o>>2]|0)|0;c[(c[k>>2]|0)+36>>2]=f;c[k>>2]=c[(c[k>>2]|0)+52>>2]}}while(0);c[h>>2]=c[n>>2];f=c[h>>2]|0;i=p;return f|0}function _F(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;a[(c[e>>2]|0)+19>>0]=0;c[(c[e>>2]|0)+60>>2]=0;i=d;return}function $F(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+48|0;g=q+36|0;h=q+32|0;j=q+28|0;r=q+24|0;m=q+20|0;o=q+16|0;p=q+12|0;k=q+8|0;l=q+4|0;n=q;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[r>>2]=f;c[k>>2]=c[c[g>>2]>>2];c[m>>2]=c[c[h>>2]>>2];c[o>>2]=Qz(c[k>>2]|0,(c[m>>2]|0)-(c[j>>2]|0)|0,(c[r>>2]|0)+1|0)|0;if(!(c[o>>2]|0)){r=c[o>>2]|0;i=q;return r|0}c[l>>2]=c[j>>2];c[p>>2]=(c[(c[h>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0);while(1){if((c[l>>2]|0)>=(c[m>>2]|0))break;c[n>>2]=Ox(c[g>>2]|0,c[c[p>>2]>>2]|0)|0;if(!(c[n>>2]|0))c[n>>2]=c[(c[k>>2]|0)+8>>2];c[(c[o>>2]|0)+20+((c[l>>2]|0)-(c[j>>2]|0)<<2)>>2]=c[n>>2];a[(c[(c[o>>2]|0)+16>>2]|0)+((c[l>>2]|0)-(c[j>>2]|0))>>0]=a[(c[p>>2]|0)+12>>0]|0;c[l>>2]=(c[l>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+20}r=c[o>>2]|0;i=q;return r|0}function aG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+24|0;f=m+20|0;g=m+16|0;l=m+12|0;h=m+8|0;j=m+4|0;k=m;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[l>>2]=0;c[h>>2]=0;if(c[(c[f>>2]|0)+8>>2]|0){i=m;return}fC(c[e>>2]|0);if(!(c[(c[f>>2]|0)+60>>2]|0)){i=m;return}b=(c[e>>2]|0)+76|0;a=(c[b>>2]|0)+1|0;c[b>>2]=a;c[h>>2]=a;c[(c[f>>2]|0)+8>>2]=a;c[l>>2]=Pw(c[e>>2]|0)|0;do if(ky(c[(c[f>>2]|0)+60>>2]|0,k)|0){Rw(c[l>>2]|0,22,c[k>>2]|0,c[h>>2]|0)|0;if(!(c[k>>2]|0)){Ez(c[l>>2]|0,c[g>>2]|0)|0;break}if((c[k>>2]|0)>=0?(b=(c[f>>2]|0)+24|0,g=c[b+4>>2]|0,a=c[k>>2]|0,d=((a|0)<0)<<31>>31,g>>>0>d>>>0|((g|0)==(d|0)?(c[b>>2]|0)>>>0>a>>>0:0)):0){b=c[k>>2]|0;a=(c[f>>2]|0)+24|0;c[a>>2]=b;c[a+4>>2]=((b|0)<0)<<31>>31}}else{xA(c[e>>2]|0,c[(c[f>>2]|0)+60>>2]|0,c[h>>2]|0);xz(c[l>>2]|0,38,c[h>>2]|0)|0;Rw(c[l>>2]|0,46,c[h>>2]|0,c[g>>2]|0)|0}while(0);if(!(c[(c[f>>2]|0)+64>>2]|0)){i=m;return}b=(c[e>>2]|0)+76|0;a=(c[b>>2]|0)+1|0;c[b>>2]=a;c[j>>2]=a;c[(c[f>>2]|0)+12>>2]=a;a=(c[e>>2]|0)+76|0;c[a>>2]=(c[a>>2]|0)+1;xA(c[e>>2]|0,c[(c[f>>2]|0)+64>>2]|0,c[j>>2]|0);xz(c[l>>2]|0,38,c[j>>2]|0)|0;Vw(c[l>>2]|0,139,c[h>>2]|0,(c[j>>2]|0)+1|0,c[j>>2]|0)|0;i=m;return}function bG(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;h=f+4|0;g=f;j=f+8|0;c[h>>2]=b;c[g>>2]=d;a[j>>0]=e;b=a[j>>0]|0;a[(Mz(c[h>>2]|0,c[g>>2]|0)|0)>>0]=b;i=f;return}function cG(a){a=a|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;a=aC(b[(c[e>>2]|0)+32>>1]|0)|0;i=d;return a|0}function dG(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[(c[b>>2]|0)+40>>0]|0|0}function eG(b){b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=b;i=e;return a[(c[d>>2]|0)+36>>0]|0}function fG(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+48>>2]|0}function gG(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+52>>2]|0}function hG(b,f,g,h,j,k,l,m,n){b=b|0;f=f|0;g=g|0;h=h|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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=i;i=i+144|0;P=V+124|0;Q=V+120|0;t=V+116|0;o=V+112|0;R=V+108|0;p=V+104|0;M=V+100|0;u=V+96|0;S=V+92|0;U=V+88|0;D=V+84|0;r=V+80|0;T=V+76|0;C=V+72|0;O=V+68|0;F=V+64|0;N=V+60|0;q=V+128|0;s=V+56|0;w=V+52|0;A=V+48|0;x=V+44|0;y=V+40|0;H=V+36|0;v=V+32|0;K=V+28|0;I=V+24|0;E=V+20|0;J=V+16|0;L=V+12|0;z=V+8|0;B=V+4|0;G=V;c[P>>2]=b;c[Q>>2]=f;c[t>>2]=g;c[o>>2]=h;c[R>>2]=j;c[p>>2]=k;c[M>>2]=l;c[u>>2]=m;c[S>>2]=n;c[U>>2]=c[(c[P>>2]|0)+8>>2];c[C>>2]=d[c[M>>2]>>0];c[O>>2]=c[(c[M>>2]|0)+4>>2];c[N>>2]=0;if(c[p>>2]|0)n=d[(c[p>>2]|0)+1>>0]|0;else n=0;c[r>>2]=n;if((c[R>>2]|0)!=0?(c[c[R>>2]>>2]|0)==0:0)c[R>>2]=0;if(!((c[R>>2]|0)!=0|(c[r>>2]|0)!=0))wG(c[U>>2]|0,c[(c[Q>>2]|0)+12>>2]|0,c[u>>2]|0);c[F>>2]=c[c[t>>2]>>2];if(c[(c[M>>2]|0)+8>>2]|0){if(((c[(c[M>>2]|0)+8>>2]|0)+(c[F>>2]|0)|0)>(c[(c[P>>2]|0)+76>>2]|0)){h=(c[P>>2]|0)+76|0;c[h>>2]=(c[h>>2]|0)+(c[F>>2]|0)}}else{if(c[R>>2]|0){c[N>>2]=c[c[c[R>>2]>>2]>>2];if(!((d[(c[R>>2]|0)+28>>0]|0)&1))c[N>>2]=(c[N>>2]|0)+1;h=(c[P>>2]|0)+76|0;c[h>>2]=(c[h>>2]|0)+(c[N>>2]|0)}c[(c[M>>2]|0)+8>>2]=(c[(c[P>>2]|0)+76>>2]|0)+1;h=(c[P>>2]|0)+76|0;c[h>>2]=(c[h>>2]|0)+(c[F>>2]|0)}c[(c[M>>2]|0)+12>>2]=c[F>>2];c[T>>2]=c[(c[M>>2]|0)+8>>2];a:do if((c[o>>2]|0)<0){if((c[C>>2]|0)!=3){if((c[C>>2]|0)==10|(c[C>>2]|0)==9|(c[C>>2]|0)==13)a[q>>0]=1;else a[q>>0]=0;GA(c[P>>2]|0,c[t>>2]|0,c[T>>2]|0,0,a[q>>0]|0)|0}}else{c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[F>>2]|0))break a;Vw(c[U>>2]|0,47,c[o>>2]|0,c[D>>2]|0,(c[T>>2]|0)+(c[D>>2]|0)|0)|0;c[D>>2]=(c[D>>2]|0)+1}}while(0);if(c[r>>2]|0){switch(d[(c[p>>2]|0)+1>>0]|0|0){case 2:{c[A>>2]=(c[(c[P>>2]|0)+76>>2]|0)+1;r=(c[P>>2]|0)+76|0;c[r>>2]=(c[r>>2]|0)+(c[F>>2]|0);pA(c[U>>2]|0,c[(c[p>>2]|0)+8>>2]|0)|0;c[s>>2]=Mz(c[U>>2]|0,c[(c[p>>2]|0)+8>>2]|0)|0;a[c[s>>2]>>0]=25;c[(c[s>>2]|0)+4>>2]=1;c[(c[s>>2]|0)+8>>2]=c[A>>2];c[w>>2]=(Bz(c[U>>2]|0)|0)+(c[F>>2]|0);c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[F>>2]|0))break;c[x>>2]=Ox(c[P>>2]|0,c[(c[(c[t>>2]|0)+4>>2]|0)+((c[D>>2]|0)*20|0)>>2]|0)|0;n=c[U>>2]|0;m=(c[T>>2]|0)+(c[D>>2]|0)|0;if((c[D>>2]|0)<((c[F>>2]|0)-1|0))Vw(n,78,m,c[w>>2]|0,(c[A>>2]|0)+(c[D>>2]|0)|0)|0;else Vw(n,79,m,c[u>>2]|0,(c[A>>2]|0)+(c[D>>2]|0)|0)|0;Ih(c[U>>2]|0,-1,c[x>>2]|0,-4);Fh(c[U>>2]|0,-128);c[D>>2]=(c[D>>2]|0)+1}Vw(c[U>>2]|0,30,c[T>>2]|0,c[A>>2]|0,(c[F>>2]|0)-1|0)|0;break}case 1:{pA(c[U>>2]|0,c[(c[p>>2]|0)+8>>2]|0)|0;break}default:xG(c[P>>2]|0,c[(c[p>>2]|0)+4>>2]|0,c[u>>2]|0,c[F>>2]|0,c[T>>2]|0)}if(!(c[R>>2]|0))wG(c[U>>2]|0,c[(c[Q>>2]|0)+12>>2]|0,c[u>>2]|0)}b:do switch(c[C>>2]|0){case 1:{c[y>>2]=Wz(c[P>>2]|0)|0;Vw(c[U>>2]|0,49,c[T>>2]|0,c[F>>2]|0,c[y>>2]|0)|0;Rw(c[U>>2]|0,110,c[O>>2]|0,c[y>>2]|0)|0;_z(c[P>>2]|0,c[y>>2]|0);break}case 2:{Vw(c[U>>2]|0,111,c[O>>2]|0,c[T>>2]|0,c[F>>2]|0)|0;break}case 12:case 14:case 6:case 5:{c[H>>2]=kA(c[P>>2]|0,(c[N>>2]|0)+1|0)|0;Vw(c[U>>2]|0,49,c[T>>2]|0,c[F>>2]|0,(c[H>>2]|0)+(c[N>>2]|0)|0)|0;if((c[C>>2]|0)==6){c[v>>2]=(Bz(c[U>>2]|0)|0)+4;Eh(c[U>>2]|0,69,(c[O>>2]|0)+1|0,c[v>>2]|0,c[H>>2]|0,0)|0;Rw(c[U>>2]|0,110,(c[O>>2]|0)+1|0,c[H>>2]|0)|0}n=c[P>>2]|0;if(c[R>>2]|0)CG(n,c[R>>2]|0,c[Q>>2]|0,(c[H>>2]|0)+(c[N>>2]|0)|0,c[T>>2]|0,1,c[N>>2]|0);else{c[K>>2]=Wz(n)|0;Rw(c[U>>2]|0,74,c[O>>2]|0,c[K>>2]|0)|0;Vw(c[U>>2]|0,75,c[O>>2]|0,c[H>>2]|0,c[K>>2]|0)|0;Fh(c[U>>2]|0,8);_z(c[P>>2]|0,c[K>>2]|0)}nA(c[P>>2]|0,c[H>>2]|0,(c[N>>2]|0)+1|0);break}case 11:{n=SA(c[c[(c[t>>2]|0)+4>>2]>>2]|0,a[(c[M>>2]|0)+1>>0]|0)|0;a[(c[M>>2]|0)+1>>0]=n;n=c[P>>2]|0;if(c[R>>2]|0){CG(n,c[R>>2]|0,c[Q>>2]|0,c[T>>2]|0,c[T>>2]|0,1,c[N>>2]|0);break b}else{c[I>>2]=Wz(n)|0;Uw(c[U>>2]|0,49,c[T>>2]|0,1,c[I>>2]|0,(c[M>>2]|0)+1|0,1)|0;CA(c[P>>2]|0,c[T>>2]|0,1);Rw(c[U>>2]|0,110,c[O>>2]|0,c[I>>2]|0)|0;_z(c[P>>2]|0,c[I>>2]|0);break b}}case 3:{Rw(c[U>>2]|0,22,1,c[O>>2]|0)|0;break}case 10:{if(c[R>>2]|0)CG(c[P>>2]|0,c[R>>2]|0,c[Q>>2]|0,c[T>>2]|0,c[T>>2]|0,1,c[N>>2]|0);break}case 9:case 13:{if(c[R>>2]|0){CG(c[P>>2]|0,c[R>>2]|0,c[Q>>2]|0,c[T>>2]|0,c[T>>2]|0,c[F>>2]|0,c[N>>2]|0);break b}n=c[U>>2]|0;if((c[C>>2]|0)==13){xz(n,18,c[(c[M>>2]|0)+4>>2]|0)|0;break b}else{Rw(n,33,c[T>>2]|0,c[F>>2]|0)|0;CA(c[P>>2]|0,c[T>>2]|0,c[F>>2]|0);break b}}case 7:case 8:{c[B>>2]=0;c[G>>2]=c[(c[M>>2]|0)+16>>2];c[E>>2]=c[c[G>>2]>>2];c[J>>2]=Wz(c[P>>2]|0)|0;c[L>>2]=kA(c[P>>2]|0,(c[E>>2]|0)+2|0)|0;c[z>>2]=(c[L>>2]|0)+(c[E>>2]|0)+1;if((c[C>>2]|0)==8)c[B>>2]=Eh(c[U>>2]|0,69,(c[O>>2]|0)+1|0,0,c[T>>2]|0,c[F>>2]|0)|0;Vw(c[U>>2]|0,49,c[T>>2]|0,c[F>>2]|0,c[z>>2]|0)|0;if((c[C>>2]|0)==8){Rw(c[U>>2]|0,110,(c[O>>2]|0)+1|0,c[z>>2]|0)|0;Fh(c[U>>2]|0,16)}c[D>>2]=0;while(1){n=c[U>>2]|0;if((c[D>>2]|0)>=(c[E>>2]|0))break;Rw(n,31,(c[T>>2]|0)+(e[(c[(c[G>>2]|0)+4>>2]|0)+((c[D>>2]|0)*20|0)+16>>1]|0)-1|0,(c[L>>2]|0)+(c[D>>2]|0)|0)|0;c[D>>2]=(c[D>>2]|0)+1}Rw(n,73,c[O>>2]|0,(c[L>>2]|0)+(c[E>>2]|0)|0)|0;Vw(c[U>>2]|0,49,c[L>>2]|0,(c[E>>2]|0)+2|0,c[J>>2]|0)|0;Rw(c[U>>2]|0,110,c[O>>2]|0,c[J>>2]|0)|0;if(c[B>>2]|0)Fz(c[U>>2]|0,c[B>>2]|0);_z(c[P>>2]|0,c[J>>2]|0);nA(c[P>>2]|0,c[L>>2]|0,(c[E>>2]|0)+2|0);break}default:{}}while(0);if(c[R>>2]|0){i=V;return}if(!(c[(c[Q>>2]|0)+8>>2]|0)){i=V;return}Rw(c[U>>2]|0,141,c[(c[Q>>2]|0)+8>>2]|0,c[S>>2]|0)|0;i=V;return}function iG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;g=h+4|0;f=h;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=h;return}c[g>>2]=c[(c[e>>2]|0)+4>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0))break;jG(c[d>>2]|0,c[c[g>>2]>>2]|0);c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+20}i=h;return}function jG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+48|0;g=d+32|0;e=d+28|0;f=d;c[g>>2]=a;c[e>>2]=b;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+4>>2]=202;c[f+8>>2]=203;c[f+24>>2]=c[g>>2];by(f,c[e>>2]|0)|0;i=d;return}function kG(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;h=k;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;c[e>>2]=a;c[f>>2]=b;if((d[(c[e>>2]|0)+453>>0]|0|0)!=2){i=k;return}c[g>>2]=c[(c[e>>2]|0)+8>>2];b=c[c[e>>2]>>2]|0;c[h>>2]=c[f>>2];c[j>>2]=Bh(b,36633,h)|0;Uw(c[g>>2]|0,161,c[(c[e>>2]|0)+468>>2]|0,0,0,c[j>>2]|0,-1)|0;i=k;return}function lG(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[(c[b>>2]|0)+37>>0]|0|0}function mG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;j=f+12|0;h=f+8|0;k=f+4|0;g=f;c[j>>2]=a;c[h>>2]=b;c[k>>2]=d;c[g>>2]=e;Vw(c[(c[j>>2]|0)+8>>2]|0,29,c[h>>2]|0,c[k>>2]|0,c[g>>2]|0)|0;oA(c[j>>2]|0,c[h>>2]|0,c[g>>2]|0);i=f;return}function nG(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+64|0;f=v+56|0;g=v+52|0;u=v+48|0;k=v+44|0;t=v+40|0;h=v+36|0;p=v+32|0;n=v+28|0;m=v+24|0;j=v+20|0;s=v+16|0;r=v+12|0;o=v+8|0;q=v+4|0;l=v;c[f>>2]=b;c[g>>2]=d;c[u>>2]=c[(c[f>>2]|0)+8>>2];c[t>>2]=0;c[h>>2]=0;a[c[g>>2]>>0]=1;c[k>>2]=0;c[p>>2]=c[(c[g>>2]|0)+40>>2];while(1){if((c[k>>2]|0)>=(c[(c[g>>2]|0)+44>>2]|0))break;c[j>>2]=0;c[r>>2]=c[(c[c[p>>2]>>2]|0)+20>>2];if(c[r>>2]|0){c[m>>2]=c[c[r>>2]>>2];c[s>>2]=kA(c[f>>2]|0,c[m>>2]|0)|0;GA(c[f>>2]|0,c[r>>2]|0,c[s>>2]|0,0,1)|0}else{c[m>>2]=0;c[s>>2]=0}if((c[(c[p>>2]|0)+12>>2]|0)>=0){c[j>>2]=Cz(c[u>>2]|0)|0;xG(c[f>>2]|0,c[(c[p>>2]|0)+12>>2]|0,c[j>>2]|0,1,c[s>>2]|0)}if((e[(c[(c[p>>2]|0)+4>>2]|0)+2>>1]|0)&32){c[o>>2]=0;c[l>>2]=0;c[q>>2]=c[(c[r>>2]|0)+4>>2];while(1){if(c[o>>2]|0)break;if((c[l>>2]|0)>=(c[m>>2]|0))break;c[o>>2]=Ox(c[f>>2]|0,c[c[q>>2]>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+20}if(!(c[o>>2]|0))c[o>>2]=c[(c[c[f>>2]>>2]|0)+8>>2];if((c[t>>2]|0)==0?(c[(c[g>>2]|0)+36>>2]|0)!=0:0){d=(c[f>>2]|0)+76|0;b=(c[d>>2]|0)+1|0;c[d>>2]=b;c[t>>2]=b}Uw(c[u>>2]|0,34,c[t>>2]|0,0,0,c[o>>2]|0,-4)|0}Uw(c[u>>2]|0,143,0,c[s>>2]|0,c[(c[p>>2]|0)+8>>2]|0,c[(c[p>>2]|0)+4>>2]|0,-5)|0;Fh(c[u>>2]|0,c[m>>2]&255);CA(c[f>>2]|0,c[s>>2]|0,c[m>>2]|0);nA(c[f>>2]|0,c[s>>2]|0,c[m>>2]|0);if(c[j>>2]|0){Gz(c[u>>2]|0,c[j>>2]|0);fC(c[f>>2]|0)}c[k>>2]=(c[k>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+16}if(c[t>>2]|0)c[h>>2]=xz(c[u>>2]|0,45,c[t>>2]|0)|0;fC(c[f>>2]|0);c[k>>2]=0;c[n>>2]=c[(c[g>>2]|0)+28>>2];while(1){if((c[k>>2]|0)>=(c[(c[g>>2]|0)+36>>2]|0))break;xA(c[f>>2]|0,c[(c[n>>2]|0)+20>>2]|0,c[(c[n>>2]|0)+16>>2]|0);c[k>>2]=(c[k>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+24}a[c[g>>2]>>0]=0;fC(c[f>>2]|0);if(!(c[h>>2]|0)){i=v;return}Fz(c[u>>2]|0,c[h>>2]|0);i=v;return}function oG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;k=j+20|0;d=j+16|0;h=j+12|0;e=j+8|0;f=j+4|0;g=j;c[k>>2]=a;c[d>>2]=b;c[h>>2]=c[(c[k>>2]|0)+8>>2];c[e>>2]=0;c[f>>2]=c[(c[d>>2]|0)+40>>2];while(1){if((c[e>>2]|0)>=(c[(c[d>>2]|0)+44>>2]|0))break;c[g>>2]=c[(c[c[f>>2]>>2]|0)+20>>2];if(c[g>>2]|0)b=c[c[g>>2]>>2]|0;else b=0;Uw(c[h>>2]|0,145,c[(c[f>>2]|0)+8>>2]|0,b,0,c[(c[f>>2]|0)+4>>2]|0,-5)|0;c[e>>2]=(c[e>>2]|0)+1;c[f>>2]=(c[f>>2]|0)+16}i=j;return}function pG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;l=m;d=m+32|0;e=m+28|0;k=m+24|0;f=m+20|0;h=m+16|0;n=m+12|0;g=m+8|0;j=m+4|0;c[d>>2]=a;c[e>>2]=b;c[k>>2]=c[(c[d>>2]|0)+8>>2];c[n>>2]=(c[(c[e>>2]|0)+44>>2]|0)+(c[(c[e>>2]|0)+32>>2]|0);if(!(c[n>>2]|0)){i=m;return}Vw(c[k>>2]|0,25,0,c[(c[e>>2]|0)+16>>2]|0,c[(c[e>>2]|0)+20>>2]|0)|0; +c[h>>2]=c[(c[e>>2]|0)+40>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+44>>2]|0))break;do if((c[(c[h>>2]|0)+12>>2]|0)>=0){c[g>>2]=c[c[h>>2]>>2];if((c[(c[g>>2]|0)+20>>2]|0)!=0?(c[c[(c[g>>2]|0)+20>>2]>>2]|0)==1:0){c[j>>2]=$F(c[d>>2]|0,c[(c[g>>2]|0)+20>>2]|0,0,0)|0;Uw(c[k>>2]|0,57,c[(c[h>>2]|0)+12>>2]|0,0,0,c[j>>2]|0,-6)|0;break}Ah(c[d>>2]|0,36582,l);c[(c[h>>2]|0)+12>>2]=-1}while(0);c[f>>2]=(c[f>>2]|0)+1;c[h>>2]=(c[h>>2]|0)+16}i=m;return}function qG(a,b){a=a|0;b=b|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;k=l+4|0;j=l;c[g>>2]=a;c[h>>2]=b;if((((c[(c[g>>2]|0)+36>>2]|0)==0?(c[c[c[g>>2]>>2]>>2]|0)==1:0)?(c[c[(c[g>>2]|0)+32>>2]>>2]|0)==1:0)?(c[(c[(c[g>>2]|0)+32>>2]|0)+8+20>>2]|0)==0:0){c[k>>2]=c[(c[(c[g>>2]|0)+32>>2]|0)+8+16>>2];c[j>>2]=c[c[(c[c[g>>2]>>2]|0)+4>>2]>>2];if((d[(c[k>>2]|0)+42>>0]|0)&16){c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}if((d[c[j>>2]>>0]|0|0)!=153){c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}if(!(c[(c[h>>2]|0)+44>>2]|0)){c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}if(!((e[(c[(c[(c[h>>2]|0)+40>>2]|0)+4>>2]|0)+2>>1]|0)&256)){c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}if(c[(c[j>>2]|0)+4>>2]&16){c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}else{c[f>>2]=c[k>>2];k=c[f>>2]|0;i=l;return k|0}}c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}function rG(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;l=n;j=n+28|0;k=n+24|0;g=n+20|0;h=n+16|0;m=n+12|0;c[j>>2]=b;c[k>>2]=e;c[g>>2]=f;if((d[(c[j>>2]|0)+453>>0]|0|0)!=2){i=n;return}if(c[g>>2]|0)if(!((d[(c[k>>2]|0)+42>>0]|0)&32))f=1;else f=(a[(c[g>>2]|0)+55>>0]&3|0)==2^1;else f=0;c[h>>2]=f&1;b=c[c[j>>2]>>2]|0;e=(c[h>>2]|0)!=0?36541:19266;if(c[h>>2]|0)f=c[c[g>>2]>>2]|0;else f=19266;c[l>>2]=c[c[k>>2]>>2];c[l+4>>2]=e;c[l+8>>2]=f;c[m>>2]=Bh(b,36564,l)|0;Uw(c[(c[j>>2]|0)+8>>2]|0,161,c[(c[j>>2]|0)+468>>2]|0,0,0,c[m>>2]|0,-1)|0;i=n;return}function sG(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+20|0;f=l+16|0;g=l+12|0;j=l+8|0;h=l+4|0;k=l;c[e>>2]=a;c[f>>2]=b;c[g>>2]=0;c[c[f>>2]>>2]=0;do if((((c[(c[e>>2]|0)+44>>2]|0)==1?(c[j>>2]=c[c[(c[e>>2]|0)+40>>2]>>2],c[h>>2]=c[(c[j>>2]|0)+20>>2],(c[h>>2]|0)!=0):0)?(c[c[h>>2]>>2]|0)==1:0)?(d[c[c[(c[h>>2]|0)+4>>2]>>2]>>0]|0|0)==154:0){c[k>>2]=c[(c[j>>2]|0)+8>>2];if(!(Td(c[k>>2]|0,36533)|0)){c[g>>2]=1;c[c[f>>2]>>2]=c[h>>2];break}if(!(Td(c[k>>2]|0,36537)|0)){c[g>>2]=2;c[c[f>>2]>>2]=c[h>>2]}}while(0);i=l;return c[g>>2]&255|0}function tG(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+96|0;s=E+84|0;h=E+80|0;B=E+76|0;t=E+72|0;u=E+68|0;D=E+64|0;C=E+60|0;v=E+56|0;A=E+52|0;j=E+48|0;z=E+44|0;q=E+40|0;w=E+36|0;m=E+32|0;x=E+28|0;y=E+24|0;o=E+20|0;n=E+16|0;p=E+12|0;l=E+8|0;k=E+4|0;r=E;c[s>>2]=a;c[h>>2]=b;c[B>>2]=e;c[t>>2]=f;c[u>>2]=g;c[D>>2]=c[(c[s>>2]|0)+8>>2];c[C>>2]=c[(c[B>>2]|0)+24>>2];c[v>>2]=Cz(c[D>>2]|0)|0;c[j>>2]=0;c[q>>2]=c[c[B>>2]>>2];c[w>>2]=d[c[u>>2]>>0];c[m>>2]=c[(c[u>>2]|0)+4>>2];if(c[(c[B>>2]|0)+16>>2]|0){Rw(c[D>>2]|0,14,c[(c[B>>2]|0)+12>>2]|0,c[(c[B>>2]|0)+16>>2]|0)|0;Ez(c[D>>2]|0,c[C>>2]|0)|0;Gz(c[D>>2]|0,c[(c[B>>2]|0)+16>>2]|0)}c[z>>2]=c[(c[B>>2]|0)+8>>2];if((c[w>>2]|0)==9|(c[w>>2]|0)==13){c[y>>2]=0;c[x>>2]=c[(c[u>>2]|0)+8>>2];c[p>>2]=c[t>>2]}else{c[y>>2]=Wz(c[s>>2]|0)|0;c[x>>2]=Wz(c[s>>2]|0)|0;c[p>>2]=1}c[o>>2]=(c[c[q>>2]>>2]|0)-(c[(c[B>>2]|0)+4>>2]|0);if((d[(c[B>>2]|0)+28>>0]|0)&1){e=(c[s>>2]|0)+76|0;a=(c[e>>2]|0)+1|0;c[e>>2]=a;c[r>>2]=a;a=(c[s>>2]|0)+72|0;e=c[a>>2]|0;c[a>>2]=e+1;c[n>>2]=e;if(c[(c[B>>2]|0)+16>>2]|0)c[j>>2]=UA(c[s>>2]|0)|0;Vw(c[D>>2]|0,60,c[n>>2]|0,c[r>>2]|0,(c[o>>2]|0)+1+(c[p>>2]|0)|0)|0;if(c[j>>2]|0)Fz(c[D>>2]|0,c[j>>2]|0);c[A>>2]=1+(Rw(c[D>>2]|0,106,c[z>>2]|0,c[C>>2]|0)|0);wG(c[D>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[v>>2]|0);Vw(c[D>>2]|0,100,c[z>>2]|0,c[r>>2]|0,c[n>>2]|0)|0;c[k>>2]=0}else{c[A>>2]=1+(Rw(c[D>>2]|0,107,c[z>>2]|0,c[C>>2]|0)|0);wG(c[D>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[v>>2]|0);c[n>>2]=c[z>>2];c[k>>2]=1}c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[p>>2]|0))break;Vw(c[D>>2]|0,47,c[n>>2]|0,(c[o>>2]|0)+(c[k>>2]|0)+(c[l>>2]|0)|0,(c[x>>2]|0)+(c[l>>2]|0)|0)|0;c[l>>2]=(c[l>>2]|0)+1}a:do switch(c[w>>2]|0){case 12:{Rw(c[D>>2]|0,74,c[m>>2]|0,c[y>>2]|0)|0;Vw(c[D>>2]|0,75,c[m>>2]|0,c[x>>2]|0,c[y>>2]|0)|0;Fh(c[D>>2]|0,8);break}case 11:{Uw(c[D>>2]|0,49,c[x>>2]|0,1,c[y>>2]|0,(c[u>>2]|0)+1|0,1)|0;CA(c[s>>2]|0,c[x>>2]|0,1);Rw(c[D>>2]|0,110,c[m>>2]|0,c[y>>2]|0)|0;break}case 10:{mG(c[s>>2]|0,c[x>>2]|0,c[m>>2]|0,1);break}default:{h=c[D>>2]|0;j=c[u>>2]|0;if((c[w>>2]|0)==9){Rw(h,33,c[j+8>>2]|0,c[t>>2]|0)|0;CA(c[s>>2]|0,c[(c[u>>2]|0)+8>>2]|0,c[t>>2]|0);break a}else{xz(h,18,c[j+4>>2]|0)|0;break a}}}while(0);if(c[y>>2]|0){_z(c[s>>2]|0,c[x>>2]|0);_z(c[s>>2]|0,c[y>>2]|0)}Gz(c[D>>2]|0,c[v>>2]|0);k=c[D>>2]|0;j=c[z>>2]|0;h=c[A>>2]|0;if((d[(c[B>>2]|0)+28>>0]|0)&1)Rw(k,3,j,h)|0;else Rw(k,7,j,h)|0;if(!(c[(c[B>>2]|0)+12>>2]|0)){B=c[D>>2]|0;D=c[C>>2]|0;Gz(B,D);i=E;return}xz(c[D>>2]|0,15,c[(c[B>>2]|0)+12>>2]|0)|0;B=c[D>>2]|0;D=c[C>>2]|0;Gz(B,D);i=E;return}function uG(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+80|0;v=A+8|0;u=A;h=A+72|0;j=A+68|0;k=A+64|0;t=A+60|0;n=A+56|0;p=A+52|0;l=A+48|0;m=A+44|0;s=A+40|0;q=A+36|0;y=A+32|0;r=A+28|0;x=A+24|0;o=A+20|0;z=A+16|0;w=A+12|0;c[h>>2]=e;c[j>>2]=f;c[k>>2]=g;c[t>>2]=c[(c[h>>2]|0)+8>>2];c[l>>2]=c[c[h>>2]>>2];if(a[(c[h>>2]|0)+453>>0]|0){i=A;return}if(d[(c[h>>2]|0)+16>>0]|0){i=A;return}if(d[(c[l>>2]|0)+65>>0]|0){i=A;return}a[(c[h>>2]|0)+16>>0]=1;c[m>>2]=(c[(c[l>>2]|0)+24>>2]&4|0)!=0&1;c[s>>2]=(c[(c[l>>2]|0)+24>>2]&64|0)!=0&1;OB(c[t>>2]|0,c[c[k>>2]>>2]|0);c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[c[k>>2]>>2]|0))break;c[q>>2]=c[(c[(c[k>>2]|0)+4>>2]|0)+((c[n>>2]|0)*20|0)>>2];do if(c[q>>2]|0){if(c[(c[(c[k>>2]|0)+4>>2]|0)+((c[n>>2]|0)*20|0)+4>>2]|0){c[y>>2]=c[(c[(c[k>>2]|0)+4>>2]|0)+((c[n>>2]|0)*20|0)+4>>2];PB(c[t>>2]|0,c[n>>2]|0,0,c[y>>2]|0,-1)|0;break}if((d[c[q>>2]>>0]|0)!=152?(d[c[q>>2]>>0]|0)!=154:0){c[w>>2]=c[(c[(c[k>>2]|0)+4>>2]|0)+((c[n>>2]|0)*20|0)+8>>2];g=c[l>>2]|0;if(!(c[w>>2]|0)){c[v>>2]=(c[n>>2]|0)+1;g=Bh(g,36524,v)|0}else g=nh(g,c[w>>2]|0)|0;c[w>>2]=g;PB(c[t>>2]|0,c[n>>2]|0,0,c[w>>2]|0,170)|0;break}c[o>>2]=b[(c[q>>2]|0)+32>>1];c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[c[j>>2]>>2]|0))break;if((c[(c[j>>2]|0)+8+((c[p>>2]|0)*72|0)+44>>2]|0)==(c[(c[q>>2]|0)+28>>2]|0))break;c[p>>2]=(c[p>>2]|0)+1}c[r>>2]=c[(c[j>>2]|0)+8+((c[p>>2]|0)*72|0)+16>>2];if((c[o>>2]|0)<0)c[o>>2]=b[(c[r>>2]|0)+32>>1];if((c[o>>2]|0)<0)c[x>>2]=25592;else c[x>>2]=c[(c[(c[r>>2]|0)+4>>2]|0)+((c[o>>2]|0)*24|0)>>2];if(!((c[s>>2]|0)!=0|(c[m>>2]|0)!=0)){e=c[t>>2]|0;f=c[n>>2]|0;PB(e,f,0,nh(c[l>>2]|0,c[(c[(c[k>>2]|0)+4>>2]|0)+((c[n>>2]|0)*20|0)+8>>2]|0)|0,170)|0;break}if(c[m>>2]|0){c[z>>2]=0;f=c[l>>2]|0;e=c[x>>2]|0;c[u>>2]=c[c[r>>2]>>2];c[u+4>>2]=e;c[z>>2]=Bh(f,31016,u)|0;PB(c[t>>2]|0,c[n>>2]|0,0,c[z>>2]|0,170)|0;break}else{PB(c[t>>2]|0,c[n>>2]|0,0,c[x>>2]|0,-1)|0;break}}while(0);c[n>>2]=(c[n>>2]|0)+1}vG(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0);i=A;return}function vG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+64|0;m=l+56|0;n=l+52|0;e=l+48|0;j=l+44|0;f=l+40|0;h=l+8|0;g=l+4|0;k=l;c[m>>2]=a;c[n>>2]=b;c[e>>2]=d;c[j>>2]=c[(c[m>>2]|0)+8>>2];c[h+4>>2]=c[n>>2];c[h>>2]=c[m>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0))break;c[g>>2]=c[(c[(c[e>>2]|0)+4>>2]|0)+((c[f>>2]|0)*20|0)>>2];c[k>>2]=Mx(h,c[g>>2]|0,0)|0;PB(c[j>>2]|0,c[f>>2]|0,1,c[k>>2]|0,-1)|0;c[f>>2]=(c[f>>2]|0)+1}i=l;return}function wG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if((c[f>>2]|0)<=0){i=h;return}Vw(c[e>>2]|0,138,c[f>>2]|0,c[g>>2]|0,1)|0;i=h;return}function xG(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,j=0,k=0,l=0,m=0,n=0,o=0;g=i;i=i+32|0;j=g+24|0;k=g+20|0;o=g+16|0;m=g+12|0;n=g+8|0;l=g+4|0;h=g;c[j>>2]=a;c[k>>2]=b;c[o>>2]=d;c[m>>2]=e;c[n>>2]=f;c[l>>2]=c[(c[j>>2]|0)+8>>2];c[h>>2]=Wz(c[j>>2]|0)|0;Eh(c[l>>2]|0,69,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0,c[m>>2]|0)|0;Vw(c[l>>2]|0,49,c[n>>2]|0,c[m>>2]|0,c[h>>2]|0)|0;Rw(c[l>>2]|0,110,c[k>>2]|0,c[h>>2]|0)|0;_z(c[j>>2]|0,c[h>>2]|0);i=g;return}function yG(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+80|0;t=A+64|0;h=A+60|0;u=A+56|0;w=A+52|0;q=A+48|0;z=A+44|0;r=A+40|0;x=A+36|0;p=A+32|0;m=A+28|0;k=A+24|0;j=A+20|0;l=A+16|0;o=A+12|0;s=A+8|0;n=A+4|0;y=A;v=A+68|0;c[h>>2]=f;c[u>>2]=g;c[q>>2]=c[(c[h>>2]|0)+24>>2];c[z>>2]=c[c[q>>2]>>2];c[r>>2]=c[(c[q>>2]|0)+4>>2];c[x>>2]=c[(c[q>>2]|0)+12>>2];switch(d[c[u>>2]>>0]|0){case 152:case 154:{a:do if(c[r>>2]|0){c[p>>2]=(c[r>>2]|0)+8;c[w>>2]=0;while(1){if((c[w>>2]|0)>=(c[c[r>>2]>>2]|0))break a;if((c[(c[u>>2]|0)+28>>2]|0)==(c[(c[p>>2]|0)+44>>2]|0))break;c[w>>2]=(c[w>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+72}c[m>>2]=c[(c[x>>2]|0)+28>>2];c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[(c[x>>2]|0)+32>>2]|0))break;if((c[(c[m>>2]|0)+4>>2]|0)==(c[(c[u>>2]|0)+28>>2]|0)?(c[(c[m>>2]|0)+8>>2]|0)==(b[(c[u>>2]|0)+32>>1]|0):0)break;c[k>>2]=(c[k>>2]|0)+1;c[m>>2]=(c[m>>2]|0)+24}if((c[k>>2]|0)>=(c[(c[x>>2]|0)+32>>2]|0)?(y=AG(c[c[z>>2]>>2]|0,c[x>>2]|0)|0,c[k>>2]=y,(y|0)>=0):0){c[m>>2]=(c[(c[x>>2]|0)+28>>2]|0)+((c[k>>2]|0)*24|0);c[c[m>>2]>>2]=c[(c[u>>2]|0)+44>>2];c[(c[m>>2]|0)+4>>2]=c[(c[u>>2]|0)+28>>2];c[(c[m>>2]|0)+8>>2]=b[(c[u>>2]|0)+32>>1];y=(c[z>>2]|0)+76|0;z=(c[y>>2]|0)+1|0;c[y>>2]=z;c[(c[m>>2]|0)+16>>2]=z;c[(c[m>>2]|0)+12>>2]=-1;c[(c[m>>2]|0)+20>>2]=c[u>>2];b:do if(c[(c[x>>2]|0)+24>>2]|0){c[o>>2]=c[(c[x>>2]|0)+24>>2];c[s>>2]=c[(c[o>>2]|0)+4>>2];c[l>>2]=c[c[o>>2]>>2];c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[l>>2]|0))break b;c[n>>2]=c[c[s>>2]>>2];if(((d[c[n>>2]>>0]|0)==152?(c[(c[n>>2]|0)+28>>2]|0)==(c[(c[u>>2]|0)+28>>2]|0):0)?(b[(c[n>>2]|0)+32>>1]|0)==(b[(c[u>>2]|0)+32>>1]|0):0)break;c[j>>2]=(c[j>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+20}c[(c[m>>2]|0)+12>>2]=c[j>>2]}while(0);if((c[(c[m>>2]|0)+12>>2]|0)<0){y=(c[x>>2]|0)+12|0;z=c[y>>2]|0;c[y>>2]=z+1;c[(c[m>>2]|0)+12>>2]=z}}c[(c[u>>2]|0)+40>>2]=c[x>>2];a[c[u>>2]>>0]=-102;b[(c[u>>2]|0)+34>>1]=c[k>>2]}while(0);c[t>>2]=1;z=c[t>>2]|0;i=A;return z|0}case 153:{if((e[(c[q>>2]|0)+28>>1]&8|0)==0?(c[(c[h>>2]|0)+16>>2]|0)==(d[(c[u>>2]|0)+38>>0]|0):0){c[y>>2]=c[(c[x>>2]|0)+40>>2];c[w>>2]=0;while(1){if((c[w>>2]|0)>=(c[(c[x>>2]|0)+44>>2]|0))break;if(!(py(c[c[y>>2]>>2]|0,c[u>>2]|0,-1)|0))break;c[w>>2]=(c[w>>2]|0)+1;c[y>>2]=(c[y>>2]|0)+16}do if((c[w>>2]|0)>=(c[(c[x>>2]|0)+44>>2]|0)?(a[v>>0]=a[(c[c[z>>2]>>2]|0)+62>>0]|0,c[w>>2]=BG(c[c[z>>2]>>2]|0,c[x>>2]|0)|0,(c[w>>2]|0)>=0):0){c[y>>2]=(c[(c[x>>2]|0)+40>>2]|0)+(c[w>>2]<<4);c[c[y>>2]>>2]=c[u>>2];j=(c[z>>2]|0)+76|0;h=(c[j>>2]|0)+1|0;c[j>>2]=h;c[(c[y>>2]|0)+8>>2]=h;h=c[c[z>>2]>>2]|0;j=c[(c[u>>2]|0)+8>>2]|0;k=If(c[(c[u>>2]|0)+8>>2]|0)|0;if(c[(c[u>>2]|0)+20>>2]|0)l=c[c[(c[u>>2]|0)+20>>2]>>2]|0;else l=0;v=gi(h,j,k,l,a[v>>0]|0,0)|0;c[(c[y>>2]|0)+4>>2]=v;if(c[(c[u>>2]|0)+4>>2]&16){v=(c[z>>2]|0)+72|0;z=c[v>>2]|0;c[v>>2]=z+1;c[(c[y>>2]|0)+12>>2]=z;break}else{c[(c[y>>2]|0)+12>>2]=-1;break}}while(0);b[(c[u>>2]|0)+34>>1]=c[w>>2];c[(c[u>>2]|0)+40>>2]=c[x>>2];c[t>>2]=1;z=c[t>>2]|0;i=A;return z|0}c[t>>2]=0;z=c[t>>2]|0;i=A;return z|0}default:{c[t>>2]=0;z=c[t>>2]|0;i=A;return z|0}}return 0}function zG(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 0}function AG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;d=e;c[g>>2]=a;c[f>>2]=b;b=rC(c[g>>2]|0,c[(c[f>>2]|0)+28>>2]|0,24,(c[f>>2]|0)+32|0,d)|0;c[(c[f>>2]|0)+28>>2]=b;i=e;return c[d>>2]|0}function BG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;d=e;c[g>>2]=a;c[f>>2]=b;b=rC(c[g>>2]|0,c[(c[f>>2]|0)+40>>2]|0,16,(c[f>>2]|0)+44|0,d)|0;c[(c[f>>2]|0)+40>>2]=b;i=e;return c[d>>2]|0}function CG(b,f,g,h,j,k,l){b=b|0;f=f|0;g=g|0;h=h|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=i;i=i+96|0;r=J+88|0;s=J+84|0;m=J+80|0;n=J+76|0;o=J+72|0;t=J+68|0;p=J+64|0;I=J+60|0;x=J+56|0;z=J+52|0;q=J+48|0;F=J+44|0;H=J+40|0;B=J+36|0;C=J+32|0;y=J+28|0;G=J+24|0;v=J+20|0;w=J+16|0;E=J+12|0;A=J+8|0;D=J+4|0;u=J;c[r>>2]=b;c[s>>2]=f;c[m>>2]=g;c[n>>2]=h;c[o>>2]=j;c[t>>2]=k;c[p>>2]=l;c[I>>2]=c[(c[r>>2]|0)+8>>2];c[x>>2]=(d[(c[s>>2]|0)+28>>0]&1|0)==0&1;c[z>>2]=c[c[c[s>>2]>>2]>>2];c[q>>2]=(c[z>>2]|0)+(c[x>>2]|0)+(c[t>>2]|0);h=(c[r>>2]|0)+76|0;j=(c[h>>2]|0)+1|0;c[h>>2]=j;c[H>>2]=j;c[B>>2]=c[(c[s>>2]|0)+4>>2];if(c[p>>2]|0)c[F>>2]=(c[n>>2]|0)-(c[z>>2]|0)-(c[x>>2]|0);else{c[F>>2]=(c[(c[r>>2]|0)+76>>2]|0)+1;j=(c[r>>2]|0)+76|0;c[j>>2]=(c[j>>2]|0)+(c[q>>2]|0)}k=c[m>>2]|0;if(c[(c[m>>2]|0)+12>>2]|0)k=(c[k+12>>2]|0)+1|0;else k=c[k+8>>2]|0;c[y>>2]=k;m=Cz(c[I>>2]|0)|0;c[(c[s>>2]|0)+24>>2]=m;GA(c[r>>2]|0,c[c[s>>2]>>2]|0,c[F>>2]|0,c[o>>2]|0,5)|0;if(c[x>>2]|0)Rw(c[I>>2]|0,73,c[(c[s>>2]|0)+8>>2]|0,(c[F>>2]|0)+(c[z>>2]|0)|0)|0;if(!(c[p>>2]|0))mG(c[r>>2]|0,c[n>>2]|0,(c[F>>2]|0)+(c[z>>2]|0)+(c[x>>2]|0)|0,c[t>>2]|0);Vw(c[I>>2]|0,49,(c[F>>2]|0)+(c[B>>2]|0)|0,(c[q>>2]|0)-(c[B>>2]|0)|0,c[H>>2]|0)|0;if((c[B>>2]|0)>0){c[G>>2]=(c[(c[r>>2]|0)+76>>2]|0)+1;k=(c[r>>2]|0)+76|0;c[k>>2]=(c[k>>2]|0)+(c[(c[s>>2]|0)+4>>2]|0);c[A>>2]=(c[z>>2]|0)-(c[(c[s>>2]|0)+4>>2]|0)+(c[x>>2]|0);k=c[I>>2]|0;if(c[x>>2]|0)c[v>>2]=xz(k,46,(c[F>>2]|0)+(c[z>>2]|0)|0)|0;else c[v>>2]=xz(k,59,c[(c[s>>2]|0)+8>>2]|0)|0;Vw(c[I>>2]|0,42,c[G>>2]|0,c[F>>2]|0,c[(c[s>>2]|0)+4>>2]|0)|0;c[E>>2]=Mz(c[I>>2]|0,c[(c[s>>2]|0)+20>>2]|0)|0;if(a[(c[c[r>>2]>>2]|0)+65>>0]|0){i=J;return}c[(c[E>>2]|0)+8>>2]=(c[A>>2]|0)+(c[t>>2]|0);c[D>>2]=c[(c[E>>2]|0)+16>>2];kR(c[(c[D>>2]|0)+16>>2]|0,0,e[(c[D>>2]|0)+6>>1]|0)|0;Ih(c[I>>2]|0,-1,c[D>>2]|0,-6);D=$F(c[r>>2]|0,c[c[s>>2]>>2]|0,c[B>>2]|0,(e[(c[D>>2]|0)+8>>1]|0)-1|0)|0;c[(c[E>>2]|0)+16>>2]=D;c[w>>2]=Bz(c[I>>2]|0)|0;Vw(c[I>>2]|0,43,(c[w>>2]|0)+1|0,0,(c[w>>2]|0)+1|0)|0;D=Cz(c[I>>2]|0)|0;c[(c[s>>2]|0)+16>>2]=D;D=(c[r>>2]|0)+76|0;E=(c[D>>2]|0)+1|0;c[D>>2]=E;c[(c[s>>2]|0)+12>>2]=E;Rw(c[I>>2]|0,14,c[(c[s>>2]|0)+12>>2]|0,c[(c[s>>2]|0)+16>>2]|0)|0;xz(c[I>>2]|0,120,c[(c[s>>2]|0)+8>>2]|0)|0;if(c[y>>2]|0)Rw(c[I>>2]|0,46,c[y>>2]|0,c[(c[s>>2]|0)+24>>2]|0)|0;Fz(c[I>>2]|0,c[v>>2]|0);mG(c[r>>2]|0,c[F>>2]|0,c[G>>2]|0,c[(c[s>>2]|0)+4>>2]|0);Fz(c[I>>2]|0,c[w>>2]|0)}if(d[(c[s>>2]|0)+28>>0]&1)c[C>>2]=109;else c[C>>2]=110;Rw(c[I>>2]|0,c[C>>2]|0,c[(c[s>>2]|0)+8>>2]|0,c[H>>2]|0)|0;if(!(c[y>>2]|0)){i=J;return}c[u>>2]=Vw(c[I>>2]|0,140,c[y>>2]|0,0,1)|0;xz(c[I>>2]|0,105,c[(c[s>>2]|0)+8>>2]|0)|0;xz(c[I>>2]|0,95,c[(c[s>>2]|0)+8>>2]|0)|0;Fz(c[I>>2]|0,c[u>>2]|0);i=J;return}function DG(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;m=q+20|0;j=q+16|0;n=q+12|0;o=q+8|0;p=q+4|0;k=q;c[j>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if(!(c[n>>2]|0)){c[m>>2]=0;p=c[m>>2]|0;i=q;return p|0}do if((d[c[n>>2]>>0]|0)==152?(c[(c[n>>2]|0)+28>>2]|0)==(c[o>>2]|0):0)if((b[(c[n>>2]|0)+32>>1]|0)<0){a[c[n>>2]>>0]=101;break}else{c[k>>2]=ny(c[j>>2]|0,c[(c[(c[p>>2]|0)+4>>2]|0)+((b[(c[n>>2]|0)+32>>1]|0)*20|0)>>2]|0,0)|0;Zu(c[j>>2]|0,c[n>>2]|0);c[n>>2]=c[k>>2];break}else l=8;while(0);do if((l|0)==8){e=DG(c[j>>2]|0,c[(c[n>>2]|0)+12>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;c[(c[n>>2]|0)+12>>2]=e;e=DG(c[j>>2]|0,c[(c[n>>2]|0)+16>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;c[(c[n>>2]|0)+16>>2]=e;j=c[j>>2]|0;e=(c[n>>2]|0)+20|0;if(c[(c[n>>2]|0)+4>>2]&2048){EG(j,c[e>>2]|0,c[o>>2]|0,c[p>>2]|0,1);break}else{FG(j,c[e>>2]|0,c[o>>2]|0,c[p>>2]|0);break}}while(0);c[m>>2]=c[n>>2];p=c[m>>2]|0;i=q;return p|0}function EG(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;p=q+8|0;o=q+4|0;n=q;c[h>>2]=a;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;if(!(c[j>>2]|0)){i=q;return}while(1){FG(c[h>>2]|0,c[c[j>>2]>>2]|0,c[k>>2]|0,c[l>>2]|0);FG(c[h>>2]|0,c[(c[j>>2]|0)+40>>2]|0,c[k>>2]|0,c[l>>2]|0);FG(c[h>>2]|0,c[(c[j>>2]|0)+48>>2]|0,c[k>>2]|0,c[l>>2]|0);f=DG(c[h>>2]|0,c[(c[j>>2]|0)+44>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;c[(c[j>>2]|0)+44>>2]=f;f=DG(c[h>>2]|0,c[(c[j>>2]|0)+36>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;c[(c[j>>2]|0)+36>>2]=f;c[p>>2]=c[(c[j>>2]|0)+32>>2];c[n>>2]=c[c[p>>2]>>2];c[o>>2]=(c[p>>2]|0)+8;while(1){if((c[n>>2]|0)<=0)break;EG(c[h>>2]|0,c[(c[o>>2]|0)+20>>2]|0,c[k>>2]|0,c[l>>2]|0,1);if((d[(c[o>>2]|0)+36+1>>0]|0)>>>2&1)FG(c[h>>2]|0,c[(c[o>>2]|0)+64>>2]|0,c[k>>2]|0,c[l>>2]|0);c[n>>2]=(c[n>>2]|0)+-1;c[o>>2]=(c[o>>2]|0)+72}if(!(c[m>>2]|0)){h=9;break}f=c[(c[j>>2]|0)+52>>2]|0;c[j>>2]=f;if(!f){h=9;break}}if((h|0)==9){i=q;return}}function FG(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if(!(c[g>>2]|0)){i=l;return}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[c[g>>2]>>2]|0))break;b=DG(c[f>>2]|0,c[(c[(c[g>>2]|0)+4>>2]|0)+((c[k>>2]|0)*20|0)>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;c[(c[(c[g>>2]|0)+4>>2]|0)+((c[k>>2]|0)*20|0)>>2]=b;c[k>>2]=(c[k>>2]|0)+1}i=l;return}function GG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+20|0;f=l+16|0;g=l+12|0;j=l+8|0;h=l+4|0;k=l;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=1;c[k>>2]=0;while(1){if(!(c[(c[f>>2]|0)+52>>2]|0))break;c[f>>2]=c[(c[f>>2]|0)+52>>2];c[h>>2]=(c[h>>2]|0)+1}while(1){if(!(c[f>>2]|0)){e=7;break}c[j>>2]=c[(c[f>>2]|0)+52>>2];c[(c[f>>2]|0)+52>>2]=0;c[k>>2]=Cv(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0)|0;c[(c[f>>2]|0)+52>>2]=c[j>>2];if(c[k>>2]|0){e=7;break}d=c[h>>2]|0;a=(c[f>>2]|0)+24|0;c[a>>2]=d;c[a+4>>2]=((d|0)<0)<<31>>31;c[f>>2]=c[(c[f>>2]|0)+56>>2]}if((e|0)==7){i=l;return c[k>>2]|0}return 0}function HG(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+128|0;H=I;q=I+112|0;r=I+108|0;s=I+104|0;j=I+100|0;n=I+96|0;G=I+92|0;C=I+88|0;v=I+84|0;u=I+80|0;t=I+76|0;x=I+72|0;D=I+68|0;y=I+64|0;m=I+60|0;l=I+56|0;w=I+36|0;h=I+32|0;p=I+28|0;B=I+24|0;z=I+20|0;A=I+16|0;E=I+12|0;F=I+8|0;o=I+4|0;c[q>>2]=a;c[r>>2]=f;c[s>>2]=g;c[j>>2]=c[(c[r>>2]|0)+32>>2];c[n>>2]=c[c[c[r>>2]>>2]>>2];c[G>>2]=c[(c[q>>2]|0)+8>>2];c[C>>2]=c[(c[r>>2]|0)+52>>2];c[x>>2]=0;c[m>>2]=0;c[l>>2]=5;if(Mw(c[q>>2]|0,33,0,0,0)|0){i=I;return}c[t>>2]=Cz(c[G>>2]|0)|0;aG(c[q>>2]|0,c[r>>2]|0,c[t>>2]|0);c[z>>2]=c[(c[r>>2]|0)+60>>2];c[A>>2]=c[(c[r>>2]|0)+64>>2];c[E>>2]=c[(c[r>>2]|0)+8>>2];c[F>>2]=c[(c[r>>2]|0)+12>>2];c[(c[r>>2]|0)+64>>2]=0;c[(c[r>>2]|0)+60>>2]=0;c[(c[r>>2]|0)+12>>2]=0;c[(c[r>>2]|0)+8>>2]=0;c[B>>2]=c[(c[r>>2]|0)+48>>2];c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[c[j>>2]>>2]|0))break;f=c[h>>2]|0;if((d[(c[j>>2]|0)+8+((c[h>>2]|0)*72|0)+36+1>>0]|0)>>>5&1){k=5;break}c[h>>2]=f+1}if((k|0)==5)c[x>>2]=c[(c[j>>2]|0)+8+(f*72|0)+44>>2];k=(c[q>>2]|0)+72|0;f=c[k>>2]|0;c[k>>2]=f+1;c[y>>2]=f;f=(c[B>>2]|0)!=0;if((d[(c[r>>2]|0)+4>>0]|0|0)==115){c[l>>2]=f?8:6;j=(c[q>>2]|0)+72|0;k=c[j>>2]|0;c[j>>2]=k+1;c[m>>2]=k}else c[l>>2]=f?7:5;ZA(w,c[l>>2]|0,c[y>>2]|0);k=(c[q>>2]|0)+76|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l;c[D>>2]=l;Vw(c[G>>2]|0,60,c[x>>2]|0,c[D>>2]|0,c[n>>2]|0)|0;if(c[B>>2]|0){c[o>>2]=LG(c[q>>2]|0,c[r>>2]|0,1)|0;Uw(c[G>>2]|0,57,c[y>>2]|0,(c[c[B>>2]>>2]|0)+2|0,0,c[o>>2]|0,-6)|0;c[w+16>>2]=c[B>>2]}else Rw(c[G>>2]|0,57,c[y>>2]|0,c[n>>2]|0)|0;if(c[m>>2]|0){o=Rw(c[G>>2]|0,57,c[m>>2]|0,0)|0;c[(c[r>>2]|0)+16>>2]=o;o=(c[r>>2]|0)+6|0;b[o>>1]=e[o>>1]|0|16}c[(c[r>>2]|0)+48>>2]=0;c[(c[C>>2]|0)+56>>2]=0;c[p>>2]=Cv(c[q>>2]|0,c[C>>2]|0,w)|0;c[(c[C>>2]|0)+56>>2]=c[r>>2];if(!(c[p>>2]|0)){c[v>>2]=Rw(c[G>>2]|0,108,c[y>>2]|0,c[t>>2]|0)|0;xz(c[G>>2]|0,104,c[x>>2]|0)|0;f=c[G>>2]|0;g=c[y>>2]|0;if(c[B>>2]|0)Vw(f,47,g,(c[c[B>>2]>>2]|0)+1|0,c[D>>2]|0)|0;else Rw(f,102,g,c[D>>2]|0)|0;xz(c[G>>2]|0,95,c[y>>2]|0)|0;c[u>>2]=Cz(c[G>>2]|0)|0;wG(c[G>>2]|0,c[F>>2]|0,c[u>>2]|0);hG(c[q>>2]|0,c[r>>2]|0,c[c[r>>2]>>2]|0,c[x>>2]|0,0,0,c[s>>2]|0,c[u>>2]|0,c[t>>2]|0);if(c[E>>2]|0)Rw(c[G>>2]|0,141,c[E>>2]|0,c[t>>2]|0)|0;Gz(c[G>>2]|0,c[u>>2]|0);if((e[(c[r>>2]|0)+6>>1]|0)&8)Ah(c[q>>2]|0,36805,H);else{c[(c[r>>2]|0)+52>>2]=0;Cv(c[q>>2]|0,c[r>>2]|0,w)|0;c[(c[r>>2]|0)+52>>2]=c[C>>2]}Ez(c[G>>2]|0,c[v>>2]|0)|0;Gz(c[G>>2]|0,c[t>>2]|0)}Vu(c[c[q>>2]>>2]|0,c[(c[r>>2]|0)+48>>2]|0);c[(c[r>>2]|0)+48>>2]=c[B>>2];c[(c[r>>2]|0)+60>>2]=c[z>>2];c[(c[r>>2]|0)+64>>2]=c[A>>2];i=I;return}function IG(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,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;ca=i;i=i+224|0;q=ca+212|0;r=ca+208|0;s=ca+204|0;t=ca+200|0;j=ca+196|0;k=ca+192|0;T=ca+188|0;ba=ca+184|0;I=ca+164|0;J=ca+144|0;U=ca+140|0;V=ca+136|0;F=ca+132|0;G=ca+128|0;Y=ca+124|0;Z=ca+120|0;D=ca+116|0;E=ca+112|0;z=ca+108|0;A=ca+104|0;B=ca+100|0;y=ca+96|0;w=ca+92|0;x=ca+88|0;W=ca+84|0;X=ca+80|0;_=ca+76|0;$=ca+72|0;aa=ca+68|0;M=ca+64|0;N=ca+60|0;v=ca+56|0;P=ca+52|0;R=ca+48|0;S=ca+44|0;H=ca+40|0;p=ca+36|0;O=ca+32|0;u=ca+28|0;K=ca+24|0;L=ca+20|0;m=ca+16|0;o=ca+12|0;n=ca+8|0;l=ca+4|0;Q=ca;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[E>>2]=0;c[R>>2]=0;c[H>>2]=c[c[r>>2]>>2];c[ba>>2]=c[(c[r>>2]|0)+8>>2];c[N>>2]=Cz(c[ba>>2]|0)|0;c[M>>2]=Cz(c[ba>>2]|0)|0;c[P>>2]=d[(c[s>>2]|0)+4>>0];c[T>>2]=c[(c[s>>2]|0)+52>>2];c[p>>2]=c[(c[s>>2]|0)+48>>2];c[O>>2]=c[c[p>>2]>>2];a:do if((c[P>>2]|0)!=116){c[j>>2]=1;while(1){if(d[(c[H>>2]|0)+65>>0]|0)break a;if((c[j>>2]|0)>(c[c[c[s>>2]>>2]>>2]|0))break a;c[k>>2]=0;c[m>>2]=c[(c[p>>2]|0)+4>>2];while(1){if((c[k>>2]|0)>=(c[O>>2]|0))break;if((e[(c[m>>2]|0)+16>>1]|0|0)==(c[j>>2]|0))break;c[k>>2]=(c[k>>2]|0)+1;c[m>>2]=(c[m>>2]|0)+20}if((c[k>>2]|0)==(c[O>>2]|0)){c[o>>2]=Jv(c[H>>2]|0,132,0)|0;if(!(c[o>>2]|0))break;f=(c[o>>2]|0)+4|0;c[f>>2]=c[f>>2]|1024;c[(c[o>>2]|0)+8>>2]=c[j>>2];c[p>>2]=Gv(c[r>>2]|0,c[p>>2]|0,c[o>>2]|0)|0;if(c[p>>2]|0){h=c[j>>2]&65535;f=c[O>>2]|0;c[O>>2]=f+1;b[(c[(c[p>>2]|0)+4>>2]|0)+(f*20|0)+16>>1]=h}}c[j>>2]=(c[j>>2]|0)+1}c[q>>2]=7;ba=c[q>>2]|0;i=ca;return ba|0}while(0);c[u>>2]=Fw(c[H>>2]|0,(c[O>>2]|0)+1<<2,0)|0;if(c[u>>2]|0){c[c[u>>2]>>2]=c[O>>2];c[j>>2]=1;c[n>>2]=c[(c[p>>2]|0)+4>>2];while(1){if((c[j>>2]|0)>(c[O>>2]|0))break;c[(c[u>>2]|0)+(c[j>>2]<<2)>>2]=(e[(c[n>>2]|0)+16>>1]|0)-1;c[j>>2]=(c[j>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+20}c[S>>2]=LG(c[r>>2]|0,c[s>>2]|0,1)|0}else c[S>>2]=0;c[(c[s>>2]|0)+48>>2]=c[p>>2];f=vy(c[c[r>>2]>>2]|0,c[p>>2]|0,0)|0;c[(c[T>>2]|0)+48>>2]=f;b:do if((c[P>>2]|0)!=116){c[l>>2]=c[c[c[s>>2]>>2]>>2];c[_>>2]=(c[(c[r>>2]|0)+76>>2]|0)+1;f=(c[r>>2]|0)+76|0;c[f>>2]=(c[f>>2]|0)+((c[l>>2]|0)+1);Rw(c[ba>>2]|0,22,0,c[_>>2]|0)|0;c[R>>2]=Qz(c[H>>2]|0,c[l>>2]|0,1)|0;if(c[R>>2]|0){c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[l>>2]|0))break b;f=KG(c[r>>2]|0,c[s>>2]|0,c[j>>2]|0)|0;c[(c[R>>2]|0)+20+(c[j>>2]<<2)>>2]=f;a[(c[(c[R>>2]|0)+16>>2]|0)+(c[j>>2]|0)>>0]=0;c[j>>2]=(c[j>>2]|0)+1}}}else c[_>>2]=0;while(0);c[(c[s>>2]|0)+52>>2]=0;c[(c[T>>2]|0)+56>>2]=0;yy(c[r>>2]|0,c[s>>2]|0,c[(c[s>>2]|0)+48>>2]|0,29962)|0;if(!(c[(c[T>>2]|0)+52>>2]|0))yy(c[r>>2]|0,c[T>>2]|0,c[(c[T>>2]|0)+48>>2]|0,29962)|0;aG(c[r>>2]|0,c[s>>2]|0,c[N>>2]|0);if((c[P>>2]|0)==116?(c[(c[s>>2]|0)+8>>2]|0)!=0:0){j=(c[r>>2]|0)+76|0;f=(c[j>>2]|0)+1|0;c[j>>2]=f;c[W>>2]=f;f=(c[r>>2]|0)+76|0;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[X>>2]=j;j=c[s>>2]|0;if(c[(c[s>>2]|0)+12>>2]|0)j=(c[j+12>>2]|0)+1|0;else j=c[j+8>>2]|0;Rw(c[ba>>2]|0,30,j,c[W>>2]|0)|0;Rw(c[ba>>2]|0,30,c[W>>2]|0,c[X>>2]|0)|0}else{c[X>>2]=0;c[W>>2]=0}Zu(c[H>>2]|0,c[(c[s>>2]|0)+60>>2]|0);c[(c[s>>2]|0)+60>>2]=0;Zu(c[H>>2]|0,c[(c[s>>2]|0)+64>>2]|0);c[(c[s>>2]|0)+64>>2]=0;f=(c[r>>2]|0)+76|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;c[U>>2]=p;p=(c[r>>2]|0)+76|0;f=(c[p>>2]|0)+1|0;c[p>>2]=f;c[V>>2]=f;f=(c[r>>2]|0)+76|0;p=(c[f>>2]|0)+1|0;c[f>>2]=p;c[Y>>2]=p;p=(c[r>>2]|0)+76|0;f=(c[p>>2]|0)+1|0;c[p>>2]=f;c[Z>>2]=f;ZA(I,13,c[U>>2]|0);ZA(J,13,c[V>>2]|0);c[F>>2]=(Bz(c[ba>>2]|0)|0)+1;c[v>>2]=Vw(c[ba>>2]|0,16,c[U>>2]|0,0,c[F>>2]|0)|0;c[(c[T>>2]|0)+8>>2]=c[W>>2];c[K>>2]=c[(c[r>>2]|0)+472>>2];Cv(c[r>>2]|0,c[T>>2]|0,I)|0;xC(c[ba>>2]|0,c[U>>2]|0);Fz(c[ba>>2]|0,c[v>>2]|0);c[G>>2]=(Bz(c[ba>>2]|0)|0)+1;c[v>>2]=Vw(c[ba>>2]|0,16,c[V>>2]|0,0,c[G>>2]|0)|0;c[$>>2]=c[(c[s>>2]|0)+8>>2];c[aa>>2]=c[(c[s>>2]|0)+12>>2];c[(c[s>>2]|0)+8>>2]=c[X>>2];c[(c[s>>2]|0)+12>>2]=0;c[L>>2]=c[(c[r>>2]|0)+472>>2];Cv(c[r>>2]|0,c[s>>2]|0,J)|0;c[(c[s>>2]|0)+8>>2]=c[$>>2];c[(c[s>>2]|0)+12>>2]=c[aa>>2];xC(c[ba>>2]|0,c[V>>2]|0);c[D>>2]=MG(c[r>>2]|0,c[s>>2]|0,I,c[t>>2]|0,c[Y>>2]|0,c[_>>2]|0,c[R>>2]|0,c[N>>2]|0)|0;if((c[P>>2]|0)==116|(c[P>>2]|0)==115)c[E>>2]=MG(c[r>>2]|0,c[s>>2]|0,J,c[t>>2]|0,c[Z>>2]|0,c[_>>2]|0,c[R>>2]|0,c[N>>2]|0)|0;Rz(c[R>>2]|0);if((c[P>>2]|0)==117|(c[P>>2]|0)==118){aa=c[N>>2]|0;c[z>>2]=aa;c[A>>2]=aa}else{c[z>>2]=Rw(c[ba>>2]|0,14,c[Z>>2]|0,c[E>>2]|0)|0;c[A>>2]=Rw(c[ba>>2]|0,18,c[V>>2]|0,c[N>>2]|0)|0;Ez(c[ba>>2]|0,c[z>>2]|0)|0;$=(c[T>>2]|0)+24|0;aa=(c[s>>2]|0)+24|0;_=aa;$=gR(c[_>>2]|0,c[_+4>>2]|0,c[$>>2]|0,c[$+4>>2]|0)|0;c[aa>>2]=$;c[aa+4>>2]=C}if((c[P>>2]|0)==118){c[B>>2]=c[z>>2];$=(c[s>>2]|0)+24|0;X=c[$+4>>2]|0;aa=(c[T>>2]|0)+24|0;_=c[aa+4>>2]|0;if(X>>>0>_>>>0|((X|0)==(_|0)?(c[$>>2]|0)>>>0>(c[aa>>2]|0)>>>0:0)){_=(c[T>>2]|0)+24|0;$=c[_+4>>2]|0;aa=(c[s>>2]|0)+24|0;c[aa>>2]=c[_>>2];c[aa+4>>2]=$}}else{c[B>>2]=Rw(c[ba>>2]|0,14,c[Y>>2]|0,c[D>>2]|0)|0;Rw(c[ba>>2]|0,18,c[U>>2]|0,c[N>>2]|0)|0;Ez(c[ba>>2]|0,c[B>>2]|0)|0}c[y>>2]=Rw(c[ba>>2]|0,14,c[Y>>2]|0,c[D>>2]|0)|0;Rw(c[ba>>2]|0,18,c[U>>2]|0,c[z>>2]|0)|0;Ez(c[ba>>2]|0,c[M>>2]|0)|0;do if((c[P>>2]|0)!=116)if((c[P>>2]|0)==118){c[w>>2]=c[y>>2];c[y>>2]=(c[y>>2]|0)+1;break}else{c[w>>2]=Rw(c[ba>>2]|0,18,c[U>>2]|0,c[z>>2]|0)|0;Ez(c[ba>>2]|0,c[M>>2]|0)|0;break}else c[w>>2]=c[y>>2];while(0);c[x>>2]=Bz(c[ba>>2]|0)|0;if((c[P>>2]|0)==116|(c[P>>2]|0)==115)Rw(c[ba>>2]|0,14,c[Z>>2]|0,c[E>>2]|0)|0;Rw(c[ba>>2]|0,18,c[V>>2]|0,c[B>>2]|0)|0;Ez(c[ba>>2]|0,c[M>>2]|0)|0;Fz(c[ba>>2]|0,c[v>>2]|0);Rw(c[ba>>2]|0,18,c[U>>2]|0,c[A>>2]|0)|0;Rw(c[ba>>2]|0,18,c[V>>2]|0,c[B>>2]|0)|0;Gz(c[ba>>2]|0,c[M>>2]|0);Uw(c[ba>>2]|0,41,0,0,0,c[u>>2]|0,-15)|0;Uw(c[ba>>2]|0,42,c[I+8>>2]|0,c[J+8>>2]|0,c[O>>2]|0,c[S>>2]|0,-6)|0;Fh(c[ba>>2]|0,1);Vw(c[ba>>2]|0,43,c[y>>2]|0,c[w>>2]|0,c[x>>2]|0)|0;Gz(c[ba>>2]|0,c[N>>2]|0);if((d[c[t>>2]>>0]|0|0)==9){c[Q>>2]=c[T>>2];while(1){if(!(c[(c[Q>>2]|0)+52>>2]|0))break;c[Q>>2]=c[(c[Q>>2]|0)+52>>2]}uG(c[r>>2]|0,c[(c[Q>>2]|0)+32>>2]|0,c[c[Q>>2]>>2]|0)}if(c[(c[s>>2]|0)+52>>2]|0)Wu(c[H>>2]|0,c[(c[s>>2]|0)+52>>2]|0);c[(c[s>>2]|0)+52>>2]=c[T>>2];c[(c[T>>2]|0)+56>>2]=c[s>>2];JG(c[r>>2]|0,d[(c[s>>2]|0)+4>>0]|0,c[K>>2]|0,c[L>>2]|0,0);c[q>>2]=(c[(c[r>>2]|0)+68>>2]|0)!=0&1;ba=c[q>>2]|0;i=ca;return ba|0}function JG(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;o=q;h=q+40|0;j=q+36|0;k=q+32|0;l=q+28|0;m=q+24|0;n=q+20|0;p=q+16|0;c[h>>2]=a;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;if((d[(c[h>>2]|0)+453>>0]|0|0)!=2){i=q;return}c[n>>2]=c[(c[h>>2]|0)+8>>2];a=c[c[h>>2]>>2]|0;g=c[k>>2]|0;e=c[l>>2]|0;f=(c[m>>2]|0)!=0?36749:19266;b=xy(c[j>>2]|0)|0;c[o>>2]=g;c[o+4>>2]=e;c[o+8>>2]=f;c[o+12>>2]=b;c[p>>2]=Bh(a,36768,o)|0;Uw(c[n>>2]|0,161,c[(c[h>>2]|0)+468>>2]|0,0,0,c[p>>2]|0,-1)|0;i=q;return}function KG(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(c[(c[f>>2]|0)+52>>2]|0)c[h>>2]=KG(c[e>>2]|0,c[(c[f>>2]|0)+52>>2]|0,c[g>>2]|0)|0;else c[h>>2]=0;if(c[h>>2]|0){h=c[h>>2]|0;i=j;return h|0}if((c[g>>2]|0)>=(c[c[c[f>>2]>>2]>>2]|0)){h=c[h>>2]|0;i=j;return h|0}c[h>>2]=Ox(c[e>>2]|0,c[(c[(c[c[f>>2]>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)>>2]|0)|0;h=c[h>>2]|0;i=j;return h|0}function LG(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+48|0;g=r+40|0;h=r+36|0;s=r+32|0;o=r+28|0;l=r+24|0;j=r+20|0;p=r+16|0;k=r+12|0;n=r+8|0;q=r+4|0;m=r;c[g>>2]=b;c[h>>2]=d;c[s>>2]=f;c[o>>2]=c[(c[h>>2]|0)+48>>2];c[l>>2]=c[c[(c[h>>2]|0)+48>>2]>>2];c[j>>2]=c[c[g>>2]>>2];c[p>>2]=Qz(c[j>>2]|0,(c[l>>2]|0)+(c[s>>2]|0)|0,1)|0;if(!(c[p>>2]|0)){s=c[p>>2]|0;i=r;return s|0}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[l>>2]|0))break;c[n>>2]=(c[(c[o>>2]|0)+4>>2]|0)+((c[k>>2]|0)*20|0);c[q>>2]=c[c[n>>2]>>2];f=c[g>>2]|0;if(c[(c[q>>2]|0)+4>>2]&256)c[m>>2]=Ox(f,c[q>>2]|0)|0;else{c[m>>2]=KG(f,c[h>>2]|0,(e[(c[n>>2]|0)+16>>1]|0)-1|0)|0;if(!(c[m>>2]|0))c[m>>2]=c[(c[j>>2]|0)+8>>2];s=By(c[g>>2]|0,c[q>>2]|0,c[c[m>>2]>>2]|0)|0;c[(c[(c[o>>2]|0)+4>>2]|0)+((c[k>>2]|0)*20|0)>>2]=s}c[(c[p>>2]|0)+20+(c[k>>2]<<2)>>2]=c[m>>2];a[(c[(c[p>>2]|0)+16>>2]|0)+(c[k>>2]|0)>>0]=a[(c[(c[o>>2]|0)+4>>2]|0)+((c[k>>2]|0)*20|0)+12>>0]|0;c[k>>2]=(c[k>>2]|0)+1}s=c[p>>2]|0;i=r;return s|0}function MG(b,e,f,g,h,j,k,l){b=b|0;e=e|0;f=f|0;g=g|0;h=h|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;D=i;i=i+80|0;m=D+64|0;n=D+60|0;o=D+56|0;p=D+52|0;q=D+48|0;r=D+44|0;s=D+40|0;t=D+36|0;u=D+32|0;C=D+28|0;y=D+24|0;v=D+20|0;w=D+16|0;x=D+12|0;z=D+8|0;B=D+4|0;A=D;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=j;c[t>>2]=k;c[u>>2]=l;c[C>>2]=c[(c[n>>2]|0)+8>>2];c[v>>2]=Bz(c[C>>2]|0)|0;c[y>>2]=Cz(c[C>>2]|0)|0;if(c[s>>2]|0){c[w>>2]=xz(c[C>>2]|0,46,c[s>>2]|0)|0;k=c[C>>2]|0;b=c[(c[p>>2]|0)+8>>2]|0;j=(c[s>>2]|0)+1|0;h=c[(c[p>>2]|0)+12>>2]|0;c[x>>2]=Uw(k,42,b,j,h,Vz(c[t>>2]|0)|0,-6)|0;Vw(c[C>>2]|0,43,(c[x>>2]|0)+2|0,c[y>>2]|0,(c[x>>2]|0)+2|0)|0;Fz(c[C>>2]|0,c[w>>2]|0);Vw(c[C>>2]|0,30,c[(c[p>>2]|0)+8>>2]|0,(c[s>>2]|0)+1|0,(c[(c[p>>2]|0)+12>>2]|0)-1|0)|0;Rw(c[C>>2]|0,22,1,c[s>>2]|0)|0}if(a[(c[c[n>>2]>>2]|0)+65>>0]|0){c[m>>2]=0;C=c[m>>2]|0;i=D;return C|0}wG(c[C>>2]|0,c[(c[o>>2]|0)+12>>2]|0,c[y>>2]|0);switch(d[c[q>>2]>>0]|0){case 12:{c[z>>2]=Wz(c[n>>2]|0)|0;c[B>>2]=Wz(c[n>>2]|0)|0;Vw(c[C>>2]|0,49,c[(c[p>>2]|0)+8>>2]|0,c[(c[p>>2]|0)+12>>2]|0,c[z>>2]|0)|0;Rw(c[C>>2]|0,74,c[(c[q>>2]|0)+4>>2]|0,c[B>>2]|0)|0;Vw(c[C>>2]|0,75,c[(c[q>>2]|0)+4>>2]|0,c[z>>2]|0,c[B>>2]|0)|0;Fh(c[C>>2]|0,8);_z(c[n>>2]|0,c[B>>2]|0);_z(c[n>>2]|0,c[z>>2]|0);break}case 11:{h=SA(c[c[(c[c[o>>2]>>2]|0)+4>>2]>>2]|0,a[(c[q>>2]|0)+1>>0]|0)|0;a[(c[q>>2]|0)+1>>0]=h;c[A>>2]=Wz(c[n>>2]|0)|0;Uw(c[C>>2]|0,49,c[(c[p>>2]|0)+8>>2]|0,1,c[A>>2]|0,(c[q>>2]|0)+1|0,1)|0;CA(c[n>>2]|0,c[(c[p>>2]|0)+8>>2]|0,1);Rw(c[C>>2]|0,110,c[(c[q>>2]|0)+4>>2]|0,c[A>>2]|0)|0;_z(c[n>>2]|0,c[A>>2]|0);break}case 10:{mG(c[n>>2]|0,c[(c[p>>2]|0)+8>>2]|0,c[(c[q>>2]|0)+4>>2]|0,1);break}case 13:{if(!(c[(c[q>>2]|0)+8>>2]|0)){h=kA(c[n>>2]|0,c[(c[p>>2]|0)+12>>2]|0)|0;c[(c[q>>2]|0)+8>>2]=h;c[(c[q>>2]|0)+12>>2]=c[(c[p>>2]|0)+12>>2]}mG(c[n>>2]|0,c[(c[p>>2]|0)+8>>2]|0,c[(c[q>>2]|0)+8>>2]|0,c[(c[p>>2]|0)+12>>2]|0);xz(c[C>>2]|0,18,c[(c[q>>2]|0)+4>>2]|0)|0;break}default:{Rw(c[C>>2]|0,33,c[(c[p>>2]|0)+8>>2]|0,c[(c[p>>2]|0)+12>>2]|0)|0;CA(c[n>>2]|0,c[(c[p>>2]|0)+8>>2]|0,c[(c[p>>2]|0)+12>>2]|0)}}if(c[(c[o>>2]|0)+8>>2]|0)Rw(c[C>>2]|0,141,c[(c[o>>2]|0)+8>>2]|0,c[u>>2]|0)|0;Gz(c[C>>2]|0,c[y>>2]|0);xz(c[C>>2]|0,15,c[r>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;i=D;return C|0}function NG(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;n=o+4|0;m=o;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;c[k>>2]=c[c[g>>2]>>2];if(!(c[(c[k>>2]|0)+24>>2]&524288)){i=o;return}if((d[(c[j>>2]|0)+42>>0]|0)&16){i=o;return}if(c[(c[j>>2]|0)+12>>2]|0){i=o;return}c[l>>2]=0;c[n>>2]=Pw(c[g>>2]|0)|0;do if(!(Ex(c[j>>2]|0)|0)){c[m>>2]=c[(c[j>>2]|0)+16>>2];while(1){if(!(c[m>>2]|0))break;if(d[(c[m>>2]|0)+24>>0]|0)break;if(c[(c[k>>2]|0)+24>>2]&16777216)break;c[m>>2]=c[(c[m>>2]|0)+4>>2]}if(c[m>>2]|0){c[l>>2]=Cz(c[n>>2]|0)|0;Rw(c[n>>2]|0,136,1,c[l>>2]|0)|0;break}else{i=o;return}}while(0);a[(c[g>>2]|0)+442>>0]=1;f=c[g>>2]|0;Rv(f,lz(c[k>>2]|0,c[h>>2]|0,0)|0,0);a[(c[g>>2]|0)+442>>0]=0;if(!(c[(c[k>>2]|0)+24>>2]&16777216)){f=c[n>>2]|0;Rw(f,136,0,(Bz(c[n>>2]|0)|0)+2|0)|0;bA(c[g>>2]|0,787,2,0,-2,4)}if(!(c[l>>2]|0)){i=o;return}Gz(c[n>>2]|0,c[l>>2]|0);i=o;return}function OG(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;q=r+8|0;p=r;g=r+48|0;h=r+44|0;j=r+40|0;k=r+36|0;o=r+32|0;l=r+28|0;n=r+24|0;m=r+20|0;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=c[c[g>>2]>>2];c[m>>2]=(c[(c[l>>2]|0)+16>>2]|0)+(c[j>>2]<<4);c[o>>2]=Pw(c[g>>2]|0)|0;ax(c[g>>2]|0,1,c[j>>2]|0);if((d[(c[h>>2]|0)+42>>0]|0)&16)Yw(c[o>>2]|0,149)|0;c[n>>2]=fx(c[g>>2]|0,c[h>>2]|0)|0;while(1){if(!(c[n>>2]|0))break;AB(c[g>>2]|0,c[n>>2]|0);c[n>>2]=c[(c[n>>2]|0)+32>>2]}if((d[(c[h>>2]|0)+42>>0]|0)&8){n=c[g>>2]|0;b=c[c[h>>2]>>2]|0;c[p>>2]=c[c[m>>2]>>2];c[p+4>>2]=b;Ow(n,37066,p)}p=c[g>>2]|0;b=(c[j>>2]|0)==1?20769:20788;n=c[c[h>>2]>>2]|0;c[q>>2]=c[c[m>>2]>>2];c[q+4>>2]=b;c[q+8>>2]=n;Ow(p,37111,q);if((c[k>>2]|0)==0?((d[(c[h>>2]|0)+42>>0]|0)&16|0)==0:0)PG(c[g>>2]|0,c[h>>2]|0);if(!((d[(c[h>>2]|0)+42>>0]|0)&16)){o=c[o>>2]|0;p=c[j>>2]|0;q=c[h>>2]|0;q=c[q>>2]|0;Uw(o,125,p,0,0,q,0)|0;q=c[g>>2]|0;p=c[j>>2]|0; +Qw(q,p);p=c[l>>2]|0;q=c[j>>2]|0;QG(p,q);i=r;return}Uw(c[o>>2]|0,151,c[j>>2]|0,0,0,c[c[h>>2]>>2]|0,0)|0;o=c[o>>2]|0;p=c[j>>2]|0;q=c[h>>2]|0;q=c[q>>2]|0;Uw(o,125,p,0,0,q,0)|0;q=c[g>>2]|0;p=c[j>>2]|0;Qw(q,p);p=c[l>>2]|0;q=c[j>>2]|0;QG(p,q);i=r;return}function PG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;d=n+28|0;e=n+24|0;k=n+20|0;g=n+16|0;l=n+12|0;j=n+8|0;h=n+4|0;f=n;c[d>>2]=a;c[e>>2]=b;c[k>>2]=c[(c[e>>2]|0)+28>>2];c[g>>2]=0;while(1){c[j>>2]=0;if(!((c[g>>2]|0)!=0?(c[k>>2]|0)>=(c[g>>2]|0):0))c[j>>2]=c[k>>2];c[l>>2]=c[(c[e>>2]|0)+8>>2];while(1){if(!(c[l>>2]|0))break;c[h>>2]=c[(c[l>>2]|0)+44>>2];if(!((c[g>>2]|0)!=0?(c[h>>2]|0)>=(c[g>>2]|0):0))m=9;if((m|0)==9?(m=0,(c[h>>2]|0)>(c[j>>2]|0)):0)c[j>>2]=c[h>>2];c[l>>2]=c[(c[l>>2]|0)+20>>2]}if(!(c[j>>2]|0))break;c[f>>2]=Dh(c[c[d>>2]>>2]|0,c[(c[e>>2]|0)+64>>2]|0)|0;qC(c[d>>2]|0,c[j>>2]|0,c[f>>2]|0);c[g>>2]=c[j>>2]}i=n;return}function QG(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=d;if(((e[(c[(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4)+12>>2]|0)+78>>1]|0)&2|0)!=2){i=k;return}c[h>>2]=c[(c[(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4)+12>>2]|0)+8+8>>2];while(1){if(!(c[h>>2]|0))break;c[j>>2]=c[(c[h>>2]|0)+8>>2];if(c[(c[j>>2]|0)+12>>2]|0){RG(c[f>>2]|0,c[j>>2]|0);c[(c[j>>2]|0)+4>>2]=0;b[(c[j>>2]|0)+34>>1]=0}c[h>>2]=c[c[h>>2]>>2]}j=(c[(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4)+12>>2]|0)+78|0;b[j>>1]=(e[j>>1]|0)&-3;i=k;return}function RG(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=d;d=c[(c[f>>2]|0)+4>>2]|0;c[h>>2]=d;if(!d){i=j;return}c[g>>2]=0;while(1){a=c[e>>2]|0;if((c[g>>2]|0)>=(b[(c[f>>2]|0)+34>>1]|0))break;Sf(a,c[c[h>>2]>>2]|0);Zu(c[e>>2]|0,c[(c[h>>2]|0)+4>>2]|0);Sf(c[e>>2]|0,c[(c[h>>2]|0)+8>>2]|0);Sf(c[e>>2]|0,c[(c[h>>2]|0)+12>>2]|0);Sf(c[e>>2]|0,c[(c[h>>2]|0)+16>>2]|0);c[g>>2]=(c[g>>2]|0)+1;c[h>>2]=(c[h>>2]|0)+24}Sf(a,c[(c[f>>2]|0)+4>>2]|0);i=j;return}function SG(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+144|0;h=p+128|0;j=p+124|0;k=p+120|0;l=p+116|0;m=p+112|0;o=p;n=p+80|0;c[h>>2]=a;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[n+24>>2]=0;c[n+28>>2]=0;f=o;g=f+80|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[o>>2]=1;c[o+8+8>>2]=c[c[j>>2]>>2];c[o+8+16>>2]=c[j>>2];c[o+8+44>>2]=-1;c[n>>2]=c[h>>2];c[n+4>>2]=o;b[n+28>>1]=c[k>>2];o=(fy(n,c[l>>2]|0)|0)==0;if(!(o&(c[m>>2]|0)!=0)){i=p;return}gy(n,c[m>>2]|0)|0;i=p;return}function TG(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;b=c[e>>2]|0;if((d[c[e>>2]>>0]|0|0)==97){a[b>>0]=27;i=f;return}if((d[b>>0]|0|0)!=95){i=f;return}if((d[c[(c[e>>2]|0)+12>>2]>>0]|0|0)!=97){i=f;return}a[c[(c[e>>2]|0)+12>>2]>>0]=27;i=f;return}function UG(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k+12|0;f=k+8|0;g=k+4|0;h=k;c[f>>2]=a;c[g>>2]=d;c[h>>2]=e;while(1){e=c[g>>2]|0;c[g>>2]=e+-1;if((e|0)<=0){f=5;break}d=c[h>>2]|0;e=c[f>>2]|0;c[f>>2]=e+2;if((d|0)==(b[e>>1]|0)){f=4;break}}if((f|0)==4){c[j>>2]=1;j=c[j>>2]|0;i=k;return j|0}else if((f|0)==5){c[j>>2]=0;j=c[j>>2]|0;i=k;return j|0}return 0}function VG(a){a=a|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+12|0;j=l+8|0;h=l+4|0;g=l;k=l+16|0;c[f>>2]=a;c[j>>2]=0;c[g>>2]=c[(c[(c[f>>2]|0)+12>>2]|0)+4>>2];c[h>>2]=0;while(1){if((c[h>>2]|0)>=(e[(c[f>>2]|0)+52>>1]|0))break;b[k>>1]=b[(c[(c[f>>2]|0)+4>>2]|0)+(c[h>>2]<<1)>>1]|0;if((b[k>>1]|0)<0)a=1;else a=d[(c[g>>2]|0)+((b[(c[(c[f>>2]|0)+4>>2]|0)+(c[h>>2]<<1)>>1]|0)*24|0)+22>>0]|0;c[j>>2]=(c[j>>2]|0)+a;c[h>>2]=(c[h>>2]|0)+1}k=Hj(c[j>>2]<<2,0)|0;b[(c[f>>2]|0)+48>>1]=k;i=l;return}function WG(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=a;c[f>>2]=b;XG(c[e>>2]|0,c[f>>2]|0);Zu(c[e>>2]|0,c[(c[f>>2]|0)+36>>2]|0);Vu(c[e>>2]|0,c[(c[f>>2]|0)+40>>2]|0);Sf(c[e>>2]|0,c[(c[f>>2]|0)+16>>2]|0);if(!((d[(c[f>>2]|0)+55>>0]|0)>>>4&1)){a=c[e>>2]|0;b=c[f>>2]|0;Sf(a,b);i=g;return}Sf(c[e>>2]|0,c[(c[f>>2]|0)+32>>2]|0);a=c[e>>2]|0;b=c[f>>2]|0;Sf(a,b);i=g;return}function XG(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return}function YG(b,e){b=b|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;h=f;g=f+4|0;c[h>>2]=b;a[g>>0]=e;b=$A(c[h>>2]|0,4+(d[g>>0]|0)|0,0)|0;i=f;return b|0}function ZG(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+64|0;h=v+52|0;j=v+48|0;q=v+44|0;s=v+40|0;p=v+36|0;l=v+32|0;n=v+28|0;k=v+24|0;t=v+20|0;r=v+16|0;m=v+8|0;o=v;c[h>>2]=f;c[j>>2]=g;c[k>>2]=c[c[h>>2]>>2];c[t>>2]=c[(c[h>>2]|0)+8>>2];if(c[(c[h>>2]|0)+424>>2]|0)bG(c[t>>2]|0,c[(c[h>>2]|0)+424>>2]|0,121);f=c[j>>2]|0;do if((b[(c[j>>2]|0)+32>>1]|0)>=0){Cy(m,c[(c[(c[j>>2]|0)+4>>2]|0)+((b[f+32>>1]|0)*24|0)>>2]|0);t=c[h>>2]|0;c[r>>2]=Gv(t,0,cz(c[k>>2]|0,27,m,0)|0)|0;if(!(c[r>>2]|0)){i=v;return}a[(c[(c[r>>2]|0)+4>>2]|0)+12>>0]=a[(c[h>>2]|0)+452>>0]|0;c[s>>2]=vv(c[h>>2]|0,0,0,0,c[r>>2]|0,d[(c[j>>2]|0)+43>>0]|0,0,0,0,0)|0;if(!(c[s>>2]|0)){i=v;return}else{t=(c[s>>2]|0)+55|0;a[t>>0]=a[t>>0]&-4|2;b[(c[j>>2]|0)+32>>1]=-1;break}}else{c[s>>2]=Ej(f)|0;if(c[t>>2]|0)bG(c[t>>2]|0,c[(c[s>>2]|0)+44>>2]|0,13);c[n>>2]=1;c[l>>2]=1;while(1){if((c[l>>2]|0)>=(e[(c[s>>2]|0)+50>>1]|0))break;if(UG(c[(c[s>>2]|0)+4>>2]|0,c[n>>2]|0,b[(c[(c[s>>2]|0)+4>>2]|0)+(c[l>>2]<<1)>>1]|0)|0){t=(c[s>>2]|0)+52|0;b[t>>1]=(b[t>>1]|0)+-1<<16>>16}else{r=b[(c[(c[s>>2]|0)+4>>2]|0)+(c[l>>2]<<1)>>1]|0;t=c[n>>2]|0;c[n>>2]=t+1;b[(c[(c[s>>2]|0)+4>>2]|0)+(t<<1)>>1]=r}c[l>>2]=(c[l>>2]|0)+1}b[(c[s>>2]|0)+50>>1]=c[n>>2]}while(0);t=(c[s>>2]|0)+55|0;a[t>>0]=a[t>>0]&-33|32;c[p>>2]=e[(c[s>>2]|0)+50>>1];if(!(a[(c[k>>2]|0)+140+7>>0]|0)){c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[p>>2]|0))break;a[(c[(c[j>>2]|0)+4>>2]|0)+((b[(c[(c[s>>2]|0)+4>>2]|0)+(c[l>>2]<<1)>>1]|0)*24|0)+20>>0]=2;c[l>>2]=(c[l>>2]|0)+1}t=(c[s>>2]|0)+55|0;a[t>>0]=a[t>>0]&-9|8}c[(c[s>>2]|0)+44>>2]=c[(c[j>>2]|0)+28>>2];c[q>>2]=c[(c[j>>2]|0)+8>>2];a:while(1){if(!(c[q>>2]|0))break;b:do if((a[(c[q>>2]|0)+55>>0]&3|0)!=2){c[o>>2]=0;c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[p>>2]|0))break;if(!(UG(c[(c[q>>2]|0)+4>>2]|0,e[(c[q>>2]|0)+50>>1]|0,b[(c[(c[s>>2]|0)+4>>2]|0)+(c[l>>2]<<1)>>1]|0)|0))c[o>>2]=(c[o>>2]|0)+1;c[l>>2]=(c[l>>2]|0)+1}if(!(c[o>>2]|0)){b[(c[q>>2]|0)+52>>1]=b[(c[q>>2]|0)+50>>1]|0;break}if(cH(c[k>>2]|0,c[q>>2]|0,(e[(c[q>>2]|0)+50>>1]|0)+(c[o>>2]|0)|0)|0){u=46;break a}c[l>>2]=0;c[n>>2]=e[(c[q>>2]|0)+50>>1];while(1){if((c[l>>2]|0)>=(c[p>>2]|0))break b;if(!(UG(c[(c[q>>2]|0)+4>>2]|0,e[(c[q>>2]|0)+50>>1]|0,b[(c[(c[s>>2]|0)+4>>2]|0)+(c[l>>2]<<1)>>1]|0)|0)){b[(c[(c[q>>2]|0)+4>>2]|0)+(c[n>>2]<<1)>>1]=b[(c[(c[s>>2]|0)+4>>2]|0)+(c[l>>2]<<1)>>1]|0;c[(c[(c[q>>2]|0)+32>>2]|0)+(c[n>>2]<<2)>>2]=c[(c[(c[s>>2]|0)+32>>2]|0)+(c[l>>2]<<2)>>2];c[n>>2]=(c[n>>2]|0)+1}c[l>>2]=(c[l>>2]|0)+1}}while(0);c[q>>2]=c[(c[q>>2]|0)+20>>2]}if((u|0)==46){i=v;return}if((c[p>>2]|0)>=(b[(c[j>>2]|0)+34>>1]|0)){b[(c[s>>2]|0)+52>>1]=b[(c[j>>2]|0)+34>>1]|0;i=v;return}if(cH(c[k>>2]|0,c[s>>2]|0,b[(c[j>>2]|0)+34>>1]|0)|0){i=v;return}c[l>>2]=0;c[n>>2]=c[p>>2];while(1){if((c[l>>2]|0)>=(b[(c[j>>2]|0)+34>>1]|0))break;if(!(UG(c[(c[s>>2]|0)+4>>2]|0,c[n>>2]|0,c[l>>2]|0)|0)){b[(c[(c[s>>2]|0)+4>>2]|0)+(c[n>>2]<<1)>>1]=c[l>>2];c[(c[(c[s>>2]|0)+32>>2]|0)+(c[n>>2]<<2)>>2]=35690;c[n>>2]=(c[n>>2]|0)+1}c[l>>2]=(c[l>>2]|0)+1}i=v;return}function _G(a){a=a|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;h=j+8|0;g=j+4|0;f=j;c[e>>2]=a;c[h>>2]=0;c[f>>2]=b[(c[e>>2]|0)+34>>1];c[g>>2]=c[(c[e>>2]|0)+4>>2];while(1){if((c[f>>2]|0)<=0)break;c[h>>2]=(c[h>>2]|0)+(d[(c[g>>2]|0)+22>>0]|0);c[f>>2]=(c[f>>2]|0)+-1;c[g>>2]=(c[g>>2]|0)+24}if((b[(c[e>>2]|0)+32>>1]|0)>=0){g=c[h>>2]|0;g=g<<2;g=Hj(g,0)|0;h=c[e>>2]|0;h=h+40|0;b[h>>1]=g;i=j;return}c[h>>2]=(c[h>>2]|0)+1;g=c[h>>2]|0;g=g<<2;g=Hj(g,0)|0;h=c[e>>2]|0;h=h+40|0;b[h>>1]=g;i=j;return}function $G(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+80|0;q=w+16|0;p=w+8|0;g=w;h=w+68|0;f=w+64|0;j=w+60|0;k=w+56|0;l=w+52|0;n=w+48|0;u=w+44|0;s=w+40|0;t=w+36|0;r=w+32|0;o=w+28|0;m=w+24|0;v=w+20|0;c[f>>2]=d;c[j>>2]=e;c[n>>2]=0;c[o>>2]=c[(c[j>>2]|0)+4>>2];c[k>>2]=0;while(1){if((c[k>>2]|0)>=(b[(c[j>>2]|0)+34>>1]|0))break;e=(aH(c[c[o>>2]>>2]|0)|0)+5|0;c[n>>2]=(c[n>>2]|0)+e;c[k>>2]=(c[k>>2]|0)+1;c[o>>2]=(c[o>>2]|0)+24}e=aH(c[c[j>>2]>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+e;if((c[n>>2]|0)<50){c[s>>2]=19266;c[t>>2]=38266;c[r>>2]=35518}else{c[s>>2]=38268;c[t>>2]=38272;c[r>>2]=38277}c[n>>2]=(c[n>>2]|0)+(35+((b[(c[j>>2]|0)+34>>1]|0)*6|0));e=c[n>>2]|0;c[u>>2]=yh(0,e,((e|0)<0)<<31>>31)|0;if(!(c[u>>2]|0)){jh(c[f>>2]|0);c[h>>2]=0;v=c[h>>2]|0;i=w;return v|0}Qd(c[n>>2]|0,c[u>>2]|0,38280,g)|0;c[l>>2]=If(c[u>>2]|0)|0;bH(c[u>>2]|0,l,c[c[j>>2]>>2]|0);g=c[l>>2]|0;c[l>>2]=g+1;a[(c[u>>2]|0)+g>>0]=40;c[o>>2]=c[(c[j>>2]|0)+4>>2];c[k>>2]=0;while(1){f=(c[n>>2]|0)-(c[l>>2]|0)|0;d=(c[u>>2]|0)+(c[l>>2]|0)|0;if((c[k>>2]|0)>=(b[(c[j>>2]|0)+34>>1]|0))break;Qd(f,d,c[s>>2]|0,p)|0;g=If((c[u>>2]|0)+(c[l>>2]|0)|0)|0;c[l>>2]=(c[l>>2]|0)+g;c[s>>2]=c[t>>2];bH(c[u>>2]|0,l,c[c[o>>2]>>2]|0);c[v>>2]=c[6328+((a[(c[o>>2]|0)+21>>0]|0)-65<<2)>>2];c[m>>2]=If(c[v>>2]|0)|0;iR((c[u>>2]|0)+(c[l>>2]|0)|0,c[v>>2]|0,c[m>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[m>>2]|0);c[k>>2]=(c[k>>2]|0)+1;c[o>>2]=(c[o>>2]|0)+24}c[q>>2]=c[r>>2];Qd(f,d,19255,q)|0;c[h>>2]=c[u>>2];v=c[h>>2]|0;i=w;return v|0}function aH(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;c[e>>2]=0;while(1){if(!(a[c[d>>2]>>0]|0))break;if((a[c[d>>2]>>0]|0)==34)c[e>>2]=(c[e>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+1;c[d>>2]=(c[d>>2]|0)+1}i=f;return(c[e>>2]|0)+2|0}function bH(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;g=n+24|0;h=n+20|0;o=n+16|0;m=n+12|0;j=n+8|0;k=n+4|0;l=n;c[g>>2]=b;c[h>>2]=e;c[o>>2]=f;c[m>>2]=c[o>>2];c[j>>2]=c[c[h>>2]>>2];c[k>>2]=0;while(1){if(!(a[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0))break;if((d[19267+(d[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0)>>0]&6|0)==0?(d[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0)!=95:0)break;c[k>>2]=(c[k>>2]|0)+1}if(((d[19267+(d[c[m>>2]>>0]|0)>>0]&4|0)==0?(yi(c[m>>2]|0,c[k>>2]|0)|0)==27:0)?(d[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0)==0:0)e=(c[k>>2]|0)==0;else e=1;c[l>>2]=e&1;if(c[l>>2]|0){o=c[j>>2]|0;c[j>>2]=o+1;a[(c[g>>2]|0)+o>>0]=34}c[k>>2]=0;while(1){if(!(a[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0))break;f=a[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0;o=c[j>>2]|0;c[j>>2]=o+1;a[(c[g>>2]|0)+o>>0]=f;if((d[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0)==34){o=c[j>>2]|0;c[j>>2]=o+1;a[(c[g>>2]|0)+o>>0]=34}c[k>>2]=(c[k>>2]|0)+1}if(!(c[l>>2]|0)){m=c[j>>2]|0;o=c[g>>2]|0;m=o+m|0;a[m>>0]=0;m=c[j>>2]|0;o=c[h>>2]|0;c[o>>2]=m;i=n;return}m=c[j>>2]|0;c[j>>2]=m+1;a[(c[g>>2]|0)+m>>0]=34;m=c[j>>2]|0;o=c[g>>2]|0;m=o+m|0;a[m>>0]=0;m=c[j>>2]|0;o=c[h>>2]|0;c[o>>2]=m;i=n;return}function cH(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;n=o+4|0;m=o;c[j>>2]=d;c[k>>2]=f;c[l>>2]=g;if((e[(c[k>>2]|0)+52>>1]|0|0)>=(c[l>>2]|0)){c[h>>2]=0;n=c[h>>2]|0;i=o;return n|0}c[m>>2]=(c[l>>2]|0)*7;f=c[m>>2]|0;c[n>>2]=ph(c[j>>2]|0,f,((f|0)<0)<<31>>31)|0;if(!(c[n>>2]|0)){c[h>>2]=7;n=c[h>>2]|0;i=o;return n|0}else{iR(c[n>>2]|0,c[(c[k>>2]|0)+32>>2]|0,(e[(c[k>>2]|0)+52>>1]|0)<<2|0)|0;c[(c[k>>2]|0)+32>>2]=c[n>>2];c[n>>2]=(c[n>>2]|0)+(c[l>>2]<<2);iR(c[n>>2]|0,c[(c[k>>2]|0)+4>>2]|0,(e[(c[k>>2]|0)+52>>1]|0)<<1|0)|0;c[(c[k>>2]|0)+4>>2]=c[n>>2];c[n>>2]=(c[n>>2]|0)+(c[l>>2]<<1);iR(c[n>>2]|0,c[(c[k>>2]|0)+28>>2]|0,e[(c[k>>2]|0)+52>>1]|0|0)|0;c[(c[k>>2]|0)+28>>2]=c[n>>2];b[(c[k>>2]|0)+52>>1]=c[l>>2];n=(c[k>>2]|0)+55|0;a[n>>0]=a[n>>0]&-17|16;c[h>>2]=0;n=c[h>>2]|0;i=o;return n|0}return 0}function dH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;d=e+8|0;f=e+4|0;g=e;c[d>>2]=a;c[f>>2]=b;c[g>>2]=Pw(c[d>>2]|0)|0;yz(c[d>>2]|0,c[f>>2]|0,1,1,(c[f>>2]|0)==1?20769:20788);Eh(c[g>>2]|0,55,0,1,c[f>>2]|0,5)|0;if(c[(c[d>>2]|0)+72>>2]|0){i=e;return}c[(c[d>>2]|0)+72>>2]=1;i=e;return}function eH(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;b=j+16|0;e=j+12|0;h=j+8|0;f=j+4|0;g=j;c[b>>2]=a;c[h>>2]=Pw(c[b>>2]|0)|0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[b>>2]|0)+404>>2]|0))break;c[f>>2]=(c[(c[b>>2]|0)+408>>2]|0)+(c[e>>2]<<4);c[g>>2]=c[c[f>>2]>>2];Uw(c[h>>2]|0,148,c[g>>2]|0,c[(c[f>>2]|0)+4>>2]|0,d[(c[f>>2]|0)+8>>0]|0,c[(c[f>>2]|0)+12>>2]|0,-2)|0;c[e>>2]=(c[e>>2]|0)+1}i=j;return}function fH(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;d=l+24|0;h=l+20|0;f=l+16|0;j=l+12|0;g=l+8|0;k=l+4|0;e=l;c[d>>2]=b;c[f>>2]=c[c[d>>2]>>2];c[k>>2]=c[(c[d>>2]|0)+8>>2];c[h>>2]=c[(c[d>>2]|0)+412>>2];while(1){if(!(c[h>>2]|0)){d=5;break}c[j>>2]=(c[(c[f>>2]|0)+16>>2]|0)+(c[(c[h>>2]|0)+8>>2]<<4);c[g>>2]=c[(c[h>>2]|0)+12>>2];zz(c[d>>2]|0,0,c[(c[h>>2]|0)+8>>2]|0,c[(c[(c[j>>2]|0)+12>>2]|0)+72>>2]|0,54);Tw(c[k>>2]|0,(c[g>>2]|0)-1|0,c[c[(c[h>>2]|0)+4>>2]>>2]|0)|0;c[e>>2]=Gh(c[k>>2]|0,10,38456,0)|0;if(!(c[e>>2]|0)){d=5;break}c[(c[e>>2]|0)+8>>2]=c[g>>2];c[(c[e>>2]|0)+12>>2]=(c[g>>2]|0)+1;c[(c[e>>2]|0)+40+12>>2]=c[g>>2];c[(c[e>>2]|0)+60+4>>2]=(c[g>>2]|0)-1;c[(c[e>>2]|0)+60+12>>2]=c[g>>2];a[(c[e>>2]|0)+60+3>>0]=16;c[(c[e>>2]|0)+80+8>>2]=(c[g>>2]|0)+1;c[(c[e>>2]|0)+100+12>>2]=c[g>>2];c[(c[e>>2]|0)+160+8>>2]=c[g>>2];c[h>>2]=c[c[h>>2]>>2]}if((d|0)==5){i=l;return}}function gH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g;d=g+12|0;e=g+4|0;c[d>>2]=a;c[g+8>>2]=b;c[e>>2]=c[(c[d>>2]|0)+8>>2];a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)+-1;while(1){if((c[c[d>>2]>>2]|0)<0)break;$u(c[d>>2]|0)}Ah(c[e>>2]|0,38496,f);c[(c[d>>2]|0)+8>>2]=c[e>>2];i=g;return}function hH(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b;e=b+4|0;c[e>>2]=a;c[d>>2]=c[e>>2];Rd(21,40353,d);i=b;return}function iH(b,e,f,g,h,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|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;I=i;i=i+96|0;G=I+16|0;s=I+8|0;n=I;C=I+92|0;u=I+88|0;p=I+84|0;v=I+80|0;l=I+76|0;w=I+72|0;q=I+68|0;D=I+64|0;H=I+60|0;F=I+56|0;x=I+52|0;m=I+48|0;o=I+44|0;t=I+40|0;r=I+36|0;y=I+32|0;z=I+28|0;A=I+24|0;E=I+20|0;c[C>>2]=b;c[u>>2]=e;c[p>>2]=f;c[v>>2]=g;c[l>>2]=h;c[w>>2]=j;c[q>>2]=k;c[H>>2]=0;c[F>>2]=0;c[D>>2]=ph(c[C>>2]|0,544,0)|0;if(!(c[D>>2]|0)){c[F>>2]=7;H=c[D>>2]|0;Lh(H);H=c[C>>2]|0;G=c[D>>2]|0;Sf(H,G);G=c[C>>2]|0;H=c[F>>2]|0;H=Rg(G,H)|0;c[F>>2]=H;H=c[F>>2]|0;i=I;return H|0}c[(c[D>>2]|0)+480>>2]=c[l>>2];c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[(c[C>>2]|0)+20>>2]|0))break;c[m>>2]=c[(c[(c[C>>2]|0)+16>>2]|0)+(c[x>>2]<<4)+4>>2];if((c[m>>2]|0)!=0?(c[F>>2]=jH(c[m>>2]|0)|0,(c[F>>2]|0)!=0):0){B=7;break}c[x>>2]=(c[x>>2]|0)+1}if((B|0)==7){c[o>>2]=c[(c[(c[C>>2]|0)+16>>2]|0)+(c[x>>2]<<4)>>2];G=c[C>>2]|0;H=c[F>>2]|0;c[n>>2]=c[o>>2];hg(G,H,40398,n);H=c[D>>2]|0;Lh(H);H=c[C>>2]|0;G=c[D>>2]|0;Sf(H,G);G=c[C>>2]|0;H=c[F>>2]|0;H=Rg(G,H)|0;c[F>>2]=H;H=c[F>>2]|0;i=I;return H|0}ju(c[C>>2]|0);c[c[D>>2]>>2]=c[C>>2];c[(c[D>>2]|0)+428>>2]=0;do if((c[p>>2]|0)>=0){if((c[p>>2]|0)!=0?(a[(c[u>>2]|0)+((c[p>>2]|0)-1)>>0]|0)==0:0){B=17;break}c[r>>2]=c[(c[C>>2]|0)+88+4>>2];l=c[C>>2]|0;if((c[p>>2]|0)>(c[r>>2]|0)){hg(l,18,40428,s);c[F>>2]=Rg(c[C>>2]|0,18)|0;H=c[D>>2]|0;Lh(H);H=c[C>>2]|0;G=c[D>>2]|0;Sf(H,G);G=c[C>>2]|0;H=c[F>>2]|0;H=Rg(G,H)|0;c[F>>2]=H;H=c[F>>2]|0;i=I;return H|0}s=c[p>>2]|0;c[t>>2]=Iw(l,c[u>>2]|0,s,((s|0)<0)<<31>>31)|0;if(c[t>>2]|0){Uh(c[D>>2]|0,c[t>>2]|0,H)|0;c[(c[D>>2]|0)+484>>2]=(c[u>>2]|0)+((c[(c[D>>2]|0)+484>>2]|0)-(c[t>>2]|0));Sf(c[C>>2]|0,c[t>>2]|0);break}else{c[(c[D>>2]|0)+484>>2]=(c[u>>2]|0)+(c[p>>2]|0);break}}else B=17;while(0);if((B|0)==17)Uh(c[D>>2]|0,c[u>>2]|0,H)|0;if((c[(c[D>>2]|0)+12>>2]|0)==101)c[(c[D>>2]|0)+12>>2]=0;if(a[(c[D>>2]|0)+17>>0]|0)kH(c[D>>2]|0);if(a[(c[C>>2]|0)+65>>0]|0)c[(c[D>>2]|0)+12>>2]=7;if(c[q>>2]|0)c[c[q>>2]>>2]=c[(c[D>>2]|0)+484>>2];c[F>>2]=c[(c[D>>2]|0)+12>>2];a:do if(((c[F>>2]|0)==0?(c[(c[D>>2]|0)+8>>2]|0)!=0:0)?(d[(c[D>>2]|0)+453>>0]|0)!=0:0){l=c[(c[D>>2]|0)+8>>2]|0;if((d[(c[D>>2]|0)+453>>0]|0)==2){OB(l,4);c[y>>2]=8;c[z>>2]=12}else{OB(l,8);c[y>>2]=0;c[z>>2]=8}c[x>>2]=c[y>>2];while(1){if((c[x>>2]|0)>=(c[z>>2]|0))break a;PB(c[(c[D>>2]|0)+8>>2]|0,(c[x>>2]|0)-(c[y>>2]|0)|0,0,c[6360+(c[x>>2]<<2)>>2]|0,0)|0;c[x>>2]=(c[x>>2]|0)+1}}while(0);if(!(d[(c[C>>2]|0)+140+5>>0]|0)){c[A>>2]=c[(c[D>>2]|0)+8>>2];lH(c[A>>2]|0,c[u>>2]|0,(c[(c[D>>2]|0)+484>>2]|0)-(c[u>>2]|0)|0,c[v>>2]|0)}do if(c[(c[D>>2]|0)+8>>2]|0){if((c[F>>2]|0)==0?(d[(c[C>>2]|0)+65>>0]|0)==0:0){B=41;break}Qg(c[(c[D>>2]|0)+8>>2]|0)|0}else B=41;while(0);if((B|0)==41)c[c[w>>2]>>2]=c[(c[D>>2]|0)+8>>2];l=c[C>>2]|0;b=c[F>>2]|0;if(c[H>>2]|0){c[G>>2]=c[H>>2];hg(l,b,19255,G);Sf(c[C>>2]|0,c[H>>2]|0)}else jg(l,b);while(1){if(!(c[(c[D>>2]|0)+532>>2]|0))break;c[E>>2]=c[(c[D>>2]|0)+532>>2];c[(c[D>>2]|0)+532>>2]=c[(c[E>>2]|0)+4>>2];Sf(c[C>>2]|0,c[E>>2]|0)}H=c[D>>2]|0;Lh(H);H=c[C>>2]|0;G=c[D>>2]|0;Sf(H,G);G=c[C>>2]|0;H=c[F>>2]|0;H=Rg(G,H)|0;c[F>>2]=H;H=c[F>>2]|0;i=I;return H|0}function jH(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;kg(c[e>>2]|0);c[b>>2]=mH(c[e>>2]|0,1,1)|0;i=d;return c[b>>2]|0}function kH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;b=k+24|0;e=k+20|0;f=k+16|0;j=k+12|0;d=k+8|0;g=k+4|0;h=k;c[b>>2]=a;c[e>>2]=c[c[b>>2]>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0)){b=14;break}c[g>>2]=0;c[h>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+4>>2];if(c[h>>2]|0){if(!(og(c[h>>2]|0)|0)){c[j>>2]=mg(c[h>>2]|0,0)|0;if((c[j>>2]|0)==7|(c[j>>2]|0)==3082)jh(c[e>>2]|0);if(c[j>>2]|0){b=14;break}c[g>>2]=1}ng(c[h>>2]|0,1,d);if((c[d>>2]|0)!=(c[c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+12>>2]>>2]|0)){rj(c[e>>2]|0,c[f>>2]|0);c[(c[b>>2]|0)+12>>2]=17}if(c[g>>2]|0)Bj(c[h>>2]|0)|0}c[f>>2]=(c[f>>2]|0)+1}if((b|0)==14){i=k;return}}function lH(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[g>>2]=a;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;if(!(c[g>>2]|0)){i=l;return}d=c[j>>2]|0;d=Iw(c[c[g>>2]>>2]|0,c[h>>2]|0,d,((d|0)<0)<<31>>31)|0;c[(c[g>>2]|0)+168>>2]=d;d=(c[g>>2]|0)+88|0;b[d>>1]=b[d>>1]&-257|(c[k>>2]&1)<<8&65535;i=l;return}function mH(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;j=q+16|0;k=q+12|0;l=q+8|0;m=q+20|0;n=q+4|0;o=q;c[k>>2]=f;c[l>>2]=g;a[m>>0]=h;c[n>>2]=c[(c[k>>2]|0)+4>>2];if(!(a[(c[k>>2]|0)+9>>0]|0)){c[j>>2]=0;p=c[j>>2]|0;i=q;return p|0}if((c[(c[n>>2]|0)+76>>2]|0)!=(c[k>>2]|0)?(e[(c[n>>2]|0)+22>>1]&32|0)!=0:0){c[j>>2]=262;p=c[j>>2]|0;i=q;return p|0}c[o>>2]=c[(c[n>>2]|0)+72>>2];while(1){if(!(c[o>>2]|0)){p=15;break}if(((c[c[o>>2]>>2]|0)!=(c[k>>2]|0)?(c[(c[o>>2]|0)+4>>2]|0)==(c[l>>2]|0):0)?(d[(c[o>>2]|0)+8>>0]|0)!=(d[m>>0]|0):0)break;c[o>>2]=c[(c[o>>2]|0)+12>>2]}if((p|0)==15){c[j>>2]=0;p=c[j>>2]|0;i=q;return p|0}if((d[m>>0]|0)==2){p=(c[n>>2]|0)+22|0;b[p>>1]=e[p>>1]|64}c[j>>2]=262;p=c[j>>2]|0;i=q;return p|0}function nH(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;g=l+16|0;m=l+12|0;h=l+8|0;j=l+4|0;k=l;c[m>>2]=b;c[h>>2]=e;c[j>>2]=f;c[k>>2]=c[(c[m>>2]|0)+8>>2];while(1){if(!(c[k>>2]|0))break;if((c[k>>2]|0)!=(c[j>>2]|0)){if(!(c[h>>2]|0))break;if((c[(c[k>>2]|0)+52>>2]|0)==(c[h>>2]|0))break}c[k>>2]=c[(c[k>>2]|0)+8>>2]}if(c[k>>2]|0){c[g>>2]=oH(c[k>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;m=c[g>>2]|0;i=l;return m|0}if(c[j>>2]|0){m=(c[j>>2]|0)+64|0;a[m>>0]=(d[m>>0]|0)&-33}c[g>>2]=0;m=c[g>>2]|0;i=l;return m|0}function oH(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;j=l+16|0;f=l+12|0;g=l+8|0;h=l+4|0;k=l;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;a:while(1){do if((c[f>>2]|0)!=(c[h>>2]|0)){if(0!=(c[g>>2]|0)?(c[(c[f>>2]|0)+52>>2]|0)!=(c[g>>2]|0):0)break;if((d[(c[f>>2]|0)+66>>0]|0|0)!=1?(d[(c[f>>2]|0)+66>>0]|0|0)!=2:0){qH(c[f>>2]|0);break}c[k>>2]=pH(c[f>>2]|0)|0;if(c[k>>2]|0){f=8;break a}}while(0);c[f>>2]=c[(c[f>>2]|0)+8>>2];if(!(c[f>>2]|0)){f=11;break}}if((f|0)==8){c[j>>2]=c[k>>2];k=c[j>>2]|0;i=l;return k|0}else if((f|0)==11){c[j>>2]=0;k=c[j>>2]|0;i=l;return k|0}return 0}function pH(b){b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;b=c[e>>2]|0;if((d[(c[e>>2]|0)+66>>0]|0|0)==2)a[b+66>>0]=1;else c[b+60>>2]=0;c[f>>2]=rH(c[e>>2]|0)|0;if(!(c[f>>2]|0)){qH(c[e>>2]|0);a[(c[e>>2]|0)+66>>0]=3}e=(c[e>>2]|0)+64|0;a[e>>0]=(d[e>>0]|0)&-15;i=g;return c[f>>2]|0}function qH(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;c[e>>2]=0;while(1){if((c[e>>2]|0)>(a[(c[d>>2]|0)+68>>0]|0))break;qB(c[(c[d>>2]|0)+120+(c[e>>2]<<2)>>2]|0);c[(c[d>>2]|0)+120+(c[e>>2]<<2)>>2]=0;c[e>>2]=(c[e>>2]|0)+1}a[(c[d>>2]|0)+68>>0]=-1;i=f;return}function rH(a){a=a|0;var b=0,e=0,f=0,g=0;g=i;i=i+16|0;e=g+8|0;f=g+4|0;b=g;c[e>>2]=a;c[f>>2]=sH(c[e>>2]|0,(c[e>>2]|0)+40|0)|0;if(d[(c[e>>2]|0)+69>>0]|0){f=c[f>>2]|0;i=g;return f|0}a=(c[e>>2]|0)+40|0;c[b>>2]=_f(c[a>>2]|0,c[a+4>>2]|0)|0;if(!(c[b>>2]|0)){c[f>>2]=7;f=c[f>>2]|0;i=g;return f|0}c[f>>2]=tH(c[e>>2]|0,0,c[(c[e>>2]|0)+40>>2]|0,c[b>>2]|0)|0;a=c[b>>2]|0;if(!(c[f>>2]|0)){c[(c[e>>2]|0)+48>>2]=a;f=c[f>>2]|0;i=g;return f|0}else{Kd(a);f=c[f>>2]|0;i=g;return f|0}return 0}function sH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;iF(c[e>>2]|0);e=(c[e>>2]|0)+16|0;a=c[e+4>>2]|0;b=c[f>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;i=d;return 0}function tH(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;a=hF(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0,0)|0;i=f;return a|0}function uH(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;kg(c[c[d>>2]>>2]|0);i=b;return}function vH(b){b=b|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=b;b=(c[f>>2]|0)+64|0;a[b>>0]=d[b>>0]|0|16;a[(c[c[f>>2]>>2]|0)+11>>0]=1;i=e;return}function wH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(c[f>>2]|0){g=c[f>>2]|0;i=h;return g|0}c[g>>2]=(c[g>>2]|0)+7&-8;d=c[g>>2]|0;a=c[e>>2]|0;if((c[g>>2]|0)<=(c[(c[e>>2]|0)+4>>2]|0)){g=a+4|0;c[g>>2]=(c[g>>2]|0)-d;c[f>>2]=(c[c[e>>2]>>2]|0)+(c[(c[e>>2]|0)+4>>2]|0);g=c[f>>2]|0;i=h;return g|0}else{g=a+8|0;c[g>>2]=(c[g>>2]|0)+d;g=c[f>>2]|0;i=h;return g|0}return 0}function xH(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;if(a[(c[h>>2]|0)+1>>0]|0){qA(c[c[g>>2]>>2]|0,a[(c[h>>2]|0)+1>>0]|0,c[(c[h>>2]|0)+16>>2]|0);a[(c[h>>2]|0)+1>>0]=0;c[(c[h>>2]|0)+16>>2]=0}if((c[k>>2]|0)<0){Ih(c[g>>2]|0,((c[h>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0)|0)/20|0,c[j>>2]|0,c[k>>2]|0);i=l;return}if(!(c[k>>2]|0))c[k>>2]=If(c[j>>2]|0)|0;e=c[k>>2]|0;e=Iw(c[c[g>>2]>>2]|0,c[j>>2]|0,e,((e|0)<0)<<31>>31)|0;c[(c[h>>2]|0)+16>>2]=e;a[(c[h>>2]|0)+1>>0]=-1;i=l;return}function yH(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;i=b;return}function zH(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[(c[b>>2]|0)+9>>0]|0|0}function AH(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;p=r;g=r+36|0;h=r+32|0;j=r+28|0;m=r+24|0;n=r+20|0;q=r+16|0;l=r+12|0;o=r+8|0;k=r+4|0;c[h>>2]=e;c[j>>2]=f;c[m>>2]=c[c[j>>2]>>2];c[q>>2]=0;c[k>>2]=c[c[h>>2]>>2];if(c[(c[j>>2]|0)+16>>2]|0){c[g>>2]=1;q=c[g>>2]|0;i=r;return q|0}if((c[(c[m>>2]|0)+4>>2]|0)!=0?(c[(c[m>>2]|0)+4>>2]|0)!=(c[(c[m>>2]|0)+8>>2]|0):0){c[g>>2]=0;q=c[g>>2]|0;i=r;return q|0}c[l>>2]=(If(c[(c[j>>2]|0)+4>>2]|0)|0)+1;c[n>>2]=ph(c[k>>2]|0,72+(c[l>>2]|0)|0,0)|0;if(!(c[n>>2]|0)){c[g>>2]=0;q=c[g>>2]|0;i=r;return q|0}c[(c[j>>2]|0)+16>>2]=c[n>>2];c[c[n>>2]>>2]=(c[n>>2]|0)+72;iR(c[c[n>>2]>>2]|0,c[(c[j>>2]|0)+4>>2]|0,c[l>>2]|0)|0;b[(c[n>>2]|0)+36>>1]=1;c[(c[n>>2]|0)+64>>2]=c[(c[(c[k>>2]|0)+16>>2]|0)+12>>2];e=(c[n>>2]|0)+42|0;a[e>>0]=d[e>>0]|0|16;c[(c[n>>2]|0)+48>>2]=0;b[(c[n>>2]|0)+32>>1]=-1;e=c[k>>2]|0;f=c[n>>2]|0;Lw(e,f,nh(c[k>>2]|0,c[c[n>>2]>>2]|0)|0);Lw(c[k>>2]|0,c[n>>2]|0,0);f=c[k>>2]|0;e=c[n>>2]|0;Lw(f,e,nh(c[k>>2]|0,c[c[n>>2]>>2]|0)|0);c[o>>2]=oz(c[k>>2]|0,c[n>>2]|0,c[j>>2]|0,c[(c[m>>2]|0)+8>>2]|0,q)|0;if(c[o>>2]|0){o=c[h>>2]|0;c[p>>2]=c[q>>2];Ah(o,19255,p);Sf(c[k>>2]|0,c[q>>2]|0);BH(c[k>>2]|0,c[j>>2]|0);c[g>>2]=0;q=c[g>>2]|0;i=r;return q|0}else{c[g>>2]=1;q=c[g>>2]|0;i=r;return q|0}return 0}function BH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[(c[e>>2]|0)+16>>2];if(!(c[f>>2]|0)){i=g;return}RG(c[d>>2]|0,c[f>>2]|0);CH(c[d>>2]|0,c[f>>2]|0);Sf(c[d>>2]|0,c[f>>2]|0);c[(c[e>>2]|0)+16>>2]=0;i=g;return}function CH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(!((c[d>>2]|0)!=0?(c[(c[d>>2]|0)+528>>2]|0)!=0:0))DH(0,c[e>>2]|0)|0;if(!(c[(c[e>>2]|0)+52>>2]|0)){i=g;return}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+48>>2]|0))break;if((c[f>>2]|0)!=1)Sf(c[d>>2]|0,c[(c[(c[e>>2]|0)+52>>2]|0)+(c[f>>2]<<2)>>2]|0);c[f>>2]=(c[f>>2]|0)+1}Sf(c[d>>2]|0,c[(c[e>>2]|0)+52>>2]|0);i=g;return}function DH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;d=k+20|0;e=k+16|0;h=k+12|0;j=k+8|0;f=k+4|0;g=k;c[d>>2]=a;c[e>>2]=b;c[h>>2]=0;c[j>>2]=c[(c[e>>2]|0)+56>>2];c[(c[e>>2]|0)+56>>2]=0;while(1){if(!(c[j>>2]|0))break;c[f>>2]=c[c[j>>2]>>2];c[g>>2]=c[(c[j>>2]|0)+24>>2];if((c[f>>2]|0)==(c[d>>2]|0)){c[h>>2]=c[j>>2];c[(c[e>>2]|0)+56>>2]=c[h>>2];c[(c[h>>2]|0)+24>>2]=0}else{c[(c[j>>2]|0)+24>>2]=c[(c[f>>2]|0)+336>>2];c[(c[f>>2]|0)+336>>2]=c[j>>2]}c[j>>2]=c[g>>2]}i=k;return c[h>>2]|0}function EH(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=a;c[f>>2]=d;Ug(c[e>>2]|0);d=c[e>>2]|0;a=c[f>>2]|0;e=d+40|0;do{c[d>>2]=c[a>>2];d=d+4|0;a=a+4|0}while((d|0)<(e|0));b[(c[f>>2]|0)+8>>1]=1;c[(c[f>>2]|0)+24>>2]=0;i=g;return}function FH(){return 312}function GH(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+224|0;g=f+220|0;h=f+216|0;l=f;k=f+212|0;j=f+208|0;c[g>>2]=a;c[h>>2]=d;iR(l|0,c[g>>2]|0,208)|0;iR(c[g>>2]|0,c[h>>2]|0,208)|0;iR(c[h>>2]|0,l|0,208)|0;c[k>>2]=c[(c[g>>2]|0)+52>>2];c[(c[g>>2]|0)+52>>2]=c[(c[h>>2]|0)+52>>2];c[(c[h>>2]|0)+52>>2]=c[k>>2];c[k>>2]=c[(c[g>>2]|0)+48>>2];c[(c[g>>2]|0)+48>>2]=c[(c[h>>2]|0)+48>>2];c[(c[h>>2]|0)+48>>2]=c[k>>2];c[j>>2]=c[(c[g>>2]|0)+168>>2];c[(c[g>>2]|0)+168>>2]=c[(c[h>>2]|0)+168>>2];c[(c[h>>2]|0)+168>>2]=c[j>>2];d=(c[h>>2]|0)+88|0;b[d>>1]=b[d>>1]&-257|((e[(c[g>>2]|0)+88>>1]|0)>>>8&1)<<8&65535;i=f;return}function HH(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+80>>2]=0;i=b;return}function IH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;g=j+8|0;f=j;c[d>>2]=a;c[e>>2]=b;if((c[c[d>>2]>>2]|0)>=2?(c[(c[d>>2]|0)+72>>2]|0)!=0:0){c[g>>2]=Yb[c[(c[d>>2]|0)+72>>2]&255](c[d>>2]|0,c[e>>2]|0)|0;g=c[g>>2]|0;i=j;return g|0}c[g>>2]=Yb[c[(c[d>>2]|0)+64>>2]&255](c[d>>2]|0,f)|0;k=+h[f>>3]*864.0e5;a=+N(k)>=1.0?k>0.0?~~+$(+M(k/4294967296.0),4294967295.0)>>>0:~~+Z((k-+(~~k>>>0))/4294967296.0)>>>0:0;f=c[e>>2]|0;c[f>>2]=~~k>>>0;c[f+4>>2]=a;g=c[g>>2]|0;i=j;return g|0}function JH(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=i;i=i+80|0;w=y+8|0;q=y;r=y+68|0;s=y+64|0;n=y+60|0;o=y+56|0;g=y+52|0;p=y+48|0;h=y+44|0;j=y+40|0;v=y+36|0;t=y+32|0;x=y+28|0;u=y+24|0;k=y+20|0;m=y+16|0;l=y+12|0;c[s>>2]=f;c[o>>2]=0;c[g>>2]=0;c[p>>2]=0;c[h>>2]=c[c[s>>2]>>2];c[v>>2]=0;c[t>>2]=(c[(c[s>>2]|0)+8>>2]|0)+40;oC(c[t>>2]|0,8);c[(c[s>>2]|0)+20>>2]=0;if((c[(c[s>>2]|0)+80>>2]|0)==7){jh(c[h>>2]|0);c[r>>2]=1;x=c[r>>2]|0;i=y;return x|0}c[n>>2]=c[(c[s>>2]|0)+32>>2];a:do if((b[(c[s>>2]|0)+88>>1]&3|0)==1){c[p>>2]=(c[(c[s>>2]|0)+8>>2]|0)+360;if(e[(c[p>>2]|0)+8>>1]&16){c[o>>2]=((c[(c[p>>2]|0)+12>>2]|0)>>>0)/4|0;c[g>>2]=c[(c[p>>2]|0)+16>>2]}c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[o>>2]|0))break a;c[n>>2]=(c[n>>2]|0)+(c[(c[(c[g>>2]|0)+(c[j>>2]<<2)>>2]|0)+4>>2]|0);c[j>>2]=(c[j>>2]|0)+1}}while(0);do{z=(c[s>>2]|0)+76|0;f=c[z>>2]|0;c[z>>2]=f+1;c[j>>2]=f;if((c[j>>2]|0)>=(c[n>>2]|0))break;if((b[(c[s>>2]|0)+88>>1]&3|0)!=2)break}while((d[(c[(c[s>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0)>>0]|0)!=161);do if((c[j>>2]|0)>=(c[n>>2]|0)){c[(c[s>>2]|0)+80>>2]=0;c[v>>2]=101}else{if(c[(c[h>>2]|0)+240>>2]|0){c[(c[s>>2]|0)+80>>2]=9;c[v>>2]=1;z=c[s>>2]|0;SH(z,ih(c[(c[s>>2]|0)+80>>2]|0)|0,q);break}if((c[j>>2]|0)<(c[(c[s>>2]|0)+32>>2]|0))c[u>>2]=(c[(c[s>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0);else{c[j>>2]=(c[j>>2]|0)-(c[(c[s>>2]|0)+32>>2]|0);c[k>>2]=0;while(1){if((c[j>>2]|0)<(c[(c[(c[g>>2]|0)+(c[k>>2]<<2)>>2]|0)+4>>2]|0))break;c[j>>2]=(c[j>>2]|0)-(c[(c[(c[g>>2]|0)+(c[k>>2]<<2)>>2]|0)+4>>2]|0);c[k>>2]=(c[k>>2]|0)+1}c[u>>2]=(c[c[(c[g>>2]|0)+(c[k>>2]<<2)>>2]>>2]|0)+((c[j>>2]|0)*20|0)}if((b[(c[s>>2]|0)+88>>1]&3|0)==1?(b[(c[t>>2]|0)+8>>1]=4,q=c[j>>2]|0,z=c[t>>2]|0,c[z>>2]=q,c[z+4>>2]=((q|0)<0)<<31>>31,c[t>>2]=(c[t>>2]|0)+40,b[(c[t>>2]|0)+8>>1]=2562,z=mM(d[c[u>>2]>>0]|0)|0,c[(c[t>>2]|0)+16>>2]=z,z=If(c[(c[t>>2]|0)+16>>2]|0)|0,c[(c[t>>2]|0)+12>>2]=z,a[(c[t>>2]|0)+10>>0]=1,c[t>>2]=(c[t>>2]|0)+40,(a[(c[u>>2]|0)+1>>0]|0)==-18):0){c[m>>2]=(c[o>>2]|0)+1<<2;c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[o>>2]|0))break;if((c[(c[g>>2]|0)+(c[l>>2]<<2)>>2]|0)==(c[(c[u>>2]|0)+16>>2]|0))break;c[l>>2]=(c[l>>2]|0)+1}if((c[l>>2]|0)==(c[o>>2]|0)?0==(ux(c[p>>2]|0,c[m>>2]|0,(c[o>>2]|0)!=0&1)|0):0){c[g>>2]=c[(c[p>>2]|0)+16>>2];q=c[(c[u>>2]|0)+16>>2]|0;z=c[o>>2]|0;c[o>>2]=z+1;c[(c[g>>2]|0)+(z<<2)>>2]=q;z=(c[p>>2]|0)+8|0;b[z>>1]=e[z>>1]|16;c[(c[p>>2]|0)+12>>2]=c[o>>2]<<2}}b[(c[t>>2]|0)+8>>1]=4;q=c[(c[u>>2]|0)+4>>2]|0;z=c[t>>2]|0;c[z>>2]=q;c[z+4>>2]=((q|0)<0)<<31>>31;c[t>>2]=(c[t>>2]|0)+40;b[(c[t>>2]|0)+8>>1]=4;z=c[(c[u>>2]|0)+8>>2]|0;q=c[t>>2]|0;c[q>>2]=z;c[q+4>>2]=((z|0)<0)<<31>>31;c[t>>2]=(c[t>>2]|0)+40;b[(c[t>>2]|0)+8>>1]=4;q=c[(c[u>>2]|0)+12>>2]|0;z=c[t>>2]|0;c[z>>2]=q;c[z+4>>2]=((q|0)<0)<<31>>31;c[t>>2]=(c[t>>2]|0)+40;if(tx(c[t>>2]|0,100)|0){c[r>>2]=1;z=c[r>>2]|0;i=y;return z|0}b[(c[t>>2]|0)+8>>1]=514;c[x>>2]=nM(c[u>>2]|0,c[(c[t>>2]|0)+16>>2]|0,c[(c[t>>2]|0)+24>>2]|0)|0;g=c[t>>2]|0;if((c[x>>2]|0)!=(c[(c[t>>2]|0)+16>>2]|0))dh(g,c[x>>2]|0,-1,1,0)|0;else{z=If(c[g+16>>2]|0)|0;c[(c[t>>2]|0)+12>>2]=z;a[(c[t>>2]|0)+10>>0]=1}c[t>>2]=(c[t>>2]|0)+40;do if((b[(c[s>>2]|0)+88>>1]&3|0)==1){if(!(tx(c[t>>2]|0,4)|0)){b[(c[t>>2]|0)+8>>1]=514;c[(c[t>>2]|0)+12>>2]=2;z=c[(c[t>>2]|0)+16>>2]|0;c[w>>2]=d[(c[u>>2]|0)+3>>0];Qd(3,z,43360,w)|0;a[(c[t>>2]|0)+10>>0]=1;c[t>>2]=(c[t>>2]|0)+40;b[(c[t>>2]|0)+8>>1]=1;break}c[r>>2]=1;z=c[r>>2]|0;i=y;return z|0}while(0);b[(c[s>>2]|0)+84>>1]=8-((b[(c[s>>2]|0)+88>>1]&3)-1<<2);c[(c[s>>2]|0)+20>>2]=(c[(c[s>>2]|0)+8>>2]|0)+40;c[(c[s>>2]|0)+80>>2]=0;c[v>>2]=100}while(0);c[r>>2]=c[v>>2];z=c[r>>2]|0;i=y;return z|0}function dJ(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+80|0;k=x+64|0;j=x+60|0;l=x+56|0;s=x+52|0;q=x+48|0;r=x+44|0;h=x+40|0;t=x+36|0;u=x+32|0;v=x+28|0;w=x+24|0;p=x+20|0;f=x+16|0;o=x+12|0;g=x+8|0;n=x+4|0;m=x;c[j>>2]=b;c[l>>2]=e;c[s>>2]=0;c[h>>2]=0;c[p>>2]=0;if(!(a[(c[l>>2]|0)+63>>0]|0)){xj(c[j>>2]|0,c[l>>2]|0,41344);c[k>>2]=1;w=c[k>>2]|0;i=x;return w|0}if((c[(c[l>>2]|0)+148>>2]|0)>1){xj(c[j>>2]|0,c[l>>2]|0,41384);c[k>>2]=1;w=c[k>>2]|0;i=x;return w|0}c[t>>2]=c[(c[l>>2]|0)+24>>2];c[u>>2]=c[(c[l>>2]|0)+80>>2];c[v>>2]=c[(c[l>>2]|0)+84>>2];c[w>>2]=c[(c[l>>2]|0)+176>>2];b=(c[l>>2]|0)+24|0;c[b>>2]=c[b>>2]|2107392;b=(c[l>>2]|0)+24|0;c[b>>2]=c[b>>2]&-655361;c[(c[l>>2]|0)+176>>2]=0;c[q>>2]=c[(c[(c[l>>2]|0)+16>>2]|0)+4>>2];c[f>>2]=DJ(Of(c[q>>2]|0)|0)|0;c[g>>2]=c[(c[l>>2]|0)+20>>2];if(Sq(c[l>>2]|0)|0)c[h>>2]=41427;else c[h>>2]=41459;c[s>>2]=EJ(c[l>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;if((c[(c[l>>2]|0)+20>>2]|0)>(c[g>>2]|0))c[p>>2]=(c[(c[l>>2]|0)+16>>2]|0)+((c[(c[l>>2]|0)+20>>2]|0)-1<<4);a:do if((((c[s>>2]|0)==0?(c[r>>2]=c[(c[(c[l>>2]|0)+16>>2]|0)+((c[(c[l>>2]|0)+20>>2]|0)-1<<4)+4>>2],Bj(c[r>>2]|0)|0,c[o>>2]=FJ(c[q>>2]|0)|0,c[s>>2]=EJ(c[l>>2]|0,c[j>>2]|0,41483)|0,(c[s>>2]|0)==0):0)?(c[s>>2]=EJ(c[l>>2]|0,c[j>>2]|0,41516)|0,(c[s>>2]|0)==0):0)?(c[s>>2]=mg(c[q>>2]|0,2)|0,(c[s>>2]|0)==0):0){if((qg(Of(c[q>>2]|0)|0)|0)==5)c[(c[l>>2]|0)+72>>2]=0;b=c[r>>2]|0;h=pg(c[q>>2]|0)|0;do if(!(xi(b,h,c[o>>2]|0,0)|0)){if((c[f>>2]|0)==0?(xi(c[r>>2]|0,c[(c[l>>2]|0)+72>>2]|0,c[o>>2]|0,0)|0)!=0:0)break;if(!(d[(c[l>>2]|0)+65>>0]|0)){e=c[r>>2]|0;if((a[(c[l>>2]|0)+68>>0]|0)>=0)f=a[(c[l>>2]|0)+68>>0]|0;else f=TB(c[q>>2]|0)|0;VB(e,f)|0;c[s>>2]=GJ(c[l>>2]|0,c[j>>2]|0,41523)|0;if(c[s>>2]|0)break a;c[s>>2]=GJ(c[l>>2]|0,c[j>>2]|0,41671)|0;if(c[s>>2]|0)break a;c[s>>2]=GJ(c[l>>2]|0,c[j>>2]|0,41775)|0;if(c[s>>2]|0)break a;h=(c[l>>2]|0)+24|0;c[h>>2]=c[h>>2]|134217728;c[s>>2]=GJ(c[l>>2]|0,c[j>>2]|0,41893)|0;h=(c[l>>2]|0)+24|0;c[h>>2]=c[h>>2]&-134217729;if(c[s>>2]|0)break a;c[s>>2]=GJ(c[l>>2]|0,c[j>>2]|0,42089)|0;if(c[s>>2]|0)break a;c[s>>2]=GJ(c[l>>2]|0,c[j>>2]|0,42202)|0;if(c[s>>2]|0)break a;c[s>>2]=EJ(c[l>>2]|0,c[j>>2]|0,42357)|0;if(c[s>>2]|0)break a;c[m>>2]=0;while(1){e=c[q>>2]|0;if((c[m>>2]|0)>=10)break; +ng(e,d[42541+(c[m>>2]|0)>>0]|0,n);c[s>>2]=yg(c[r>>2]|0,d[42541+(c[m>>2]|0)>>0]|0,(c[n>>2]|0)+(d[42541+((c[m>>2]|0)+1)>>0]|0)|0)|0;if(c[s>>2]|0)break a;c[m>>2]=(c[m>>2]|0)+2}c[s>>2]=HJ(e,c[r>>2]|0)|0;if(c[s>>2]|0)break a;c[s>>2]=Bj(c[r>>2]|0)|0;if(c[s>>2]|0)break a;n=c[q>>2]|0;VB(n,TB(c[r>>2]|0)|0)|0;n=c[q>>2]|0;r=pg(c[r>>2]|0)|0;c[s>>2]=xi(n,r,c[o>>2]|0,1)|0;break a}}while(0);c[s>>2]=7}while(0);c[(c[l>>2]|0)+24>>2]=c[t>>2];c[(c[l>>2]|0)+80>>2]=c[u>>2];c[(c[l>>2]|0)+84>>2]=c[v>>2];c[(c[l>>2]|0)+176>>2]=c[w>>2];xi(c[q>>2]|0,-1,-1,1)|0;a[(c[l>>2]|0)+63>>0]=1;if(c[p>>2]|0){lB(c[(c[p>>2]|0)+4>>2]|0)|0;c[(c[p>>2]|0)+4>>2]=0;c[(c[p>>2]|0)+12>>2]=0}zg(c[l>>2]|0);c[k>>2]=c[s>>2];w=c[k>>2]|0;i=x;return w|0}function eJ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;k=j+20|0;h=j+16|0;g=j+12|0;f=j+8|0;e=j+4|0;d=j;c[k>>2]=b;c[g>>2]=c[(c[k>>2]|0)+4>>2];kg(c[k>>2]|0);if(!(a[(c[g>>2]|0)+17>>0]|0)){c[h>>2]=101;k=c[h>>2]|0;i=j;return k|0}c[f>>2]=$E(c[g>>2]|0)|0;c[e>>2]=$q((c[(c[(c[g>>2]|0)+12>>2]|0)+56>>2]|0)+36|0)|0;c[d>>2]=qJ(c[g>>2]|0,c[f>>2]|0,c[e>>2]|0)|0;if((c[f>>2]|0)>>>0<(c[d>>2]|0)>>>0){c[h>>2]=Lj(59178)|0;k=c[h>>2]|0;i=j;return k|0}if((c[e>>2]|0)>>>0<=0){c[h>>2]=101;k=c[h>>2]|0;i=j;return k|0}c[h>>2]=nH(c[g>>2]|0,0,0)|0;if(!(c[h>>2]|0)){rJ(c[g>>2]|0);c[h>>2]=sJ(c[g>>2]|0,c[d>>2]|0,c[f>>2]|0,0)|0}if(c[h>>2]|0){k=c[h>>2]|0;i=j;return k|0}c[h>>2]=Dg(c[(c[(c[g>>2]|0)+12>>2]|0)+72>>2]|0)|0;Xs((c[(c[(c[g>>2]|0)+12>>2]|0)+56>>2]|0)+28|0,c[(c[g>>2]|0)+44>>2]|0);k=c[h>>2]|0;i=j;return k|0}function fJ(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;g=m+8|0;h=m+4|0;j=m+13|0;l=m;k=m+12|0;c[g>>2]=b;c[h>>2]=e;a[j>>0]=f;c[l>>2]=0;if(!(a[(c[g>>2]|0)+9>>0]|0)){l=c[l>>2]|0;i=m;return l|0}a[k>>0]=1+(d[j>>0]|0);kg(c[g>>2]|0);c[l>>2]=mH(c[g>>2]|0,c[h>>2]|0,a[k>>0]|0)|0;if(c[l>>2]|0){l=c[l>>2]|0;i=m;return l|0}c[l>>2]=pJ(c[g>>2]|0,c[h>>2]|0,a[k>>0]|0)|0;l=c[l>>2]|0;i=m;return l|0}function gJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;d=m+24|0;e=m+20|0;f=m+16|0;k=m+12|0;j=m+8|0;g=m+4|0;h=m;c[e>>2]=a;c[f>>2]=b;c[k>>2]=0;if((c[(c[e>>2]|0)+308>>2]|0)>0?(c[(c[e>>2]|0)+332>>2]|0)==0:0){c[d>>2]=6;l=c[d>>2]|0;i=m;return l|0}if(!(c[f>>2]|0)){c[d>>2]=0;l=c[d>>2]|0;i=m;return l|0}c[j>>2]=c[c[(c[f>>2]|0)+8>>2]>>2];if(c[(c[j>>2]|0)+56>>2]|0){c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[e>>2]|0)+308>>2]|0))break;if((c[(c[(c[e>>2]|0)+332>>2]|0)+(c[g>>2]<<2)>>2]|0)==(c[f>>2]|0)){l=10;break}c[g>>2]=(c[g>>2]|0)+1}if((l|0)==10){c[d>>2]=0;l=c[d>>2]|0;i=m;return l|0}c[k>>2]=nJ(c[e>>2]|0)|0;if(((c[k>>2]|0)==0?(c[k>>2]=Tb[c[(c[j>>2]|0)+56>>2]&255](c[(c[f>>2]|0)+8>>2]|0)|0,(c[k>>2]|0)==0):0)?(c[h>>2]=(c[(c[e>>2]|0)+504>>2]|0)+(c[(c[e>>2]|0)+500>>2]|0),oJ(c[e>>2]|0,c[f>>2]|0),(c[h>>2]|0)!=0):0)c[k>>2]=nI(c[e>>2]|0,0,(c[h>>2]|0)-1|0)|0}c[d>>2]=c[k>>2];l=c[d>>2]|0;i=m;return l|0}function hJ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=i;i=i+48|0;l=n;f=n+32|0;o=n+28|0;p=n+24|0;g=n+20|0;k=n+16|0;j=n+12|0;h=n+8|0;m=n+4|0;c[f>>2]=a;c[o>>2]=b;c[p>>2]=d;c[g>>2]=e;c[k>>2]=0;c[j>>2]=pi(c[f>>2]|0,c[p>>2]|0,c[(c[(c[f>>2]|0)+16>>2]|0)+(c[o>>2]<<4)>>2]|0)|0;c[m>>2]=c[c[(c[j>>2]|0)+52>>2]>>2];c[h>>2]=nj((c[f>>2]|0)+312|0,c[m>>2]|0)|0;if(((c[h>>2]|0)!=0?(c[(c[c[h>>2]>>2]|0)+4>>2]|0)!=0:0)?(c[(c[c[h>>2]>>2]|0)+20>>2]|0)!=0:0)c[k>>2]=oz(c[f>>2]|0,c[j>>2]|0,c[h>>2]|0,c[(c[c[h>>2]>>2]|0)+4>>2]|0,c[g>>2]|0)|0;else{p=c[f>>2]|0;c[l>>2]=c[m>>2];p=Bh(p,31494,l)|0;c[c[g>>2]>>2]=p;c[k>>2]=1}if(c[k>>2]|0){p=c[k>>2]|0;i=n;return p|0}if(!(Ax(c[f>>2]|0,c[j>>2]|0)|0)){p=c[k>>2]|0;i=n;return p|0}c[k>>2]=nJ(c[f>>2]|0)|0;if(c[k>>2]|0){p=c[k>>2]|0;i=n;return p|0}p=c[f>>2]|0;oJ(p,Ax(c[f>>2]|0,c[j>>2]|0)|0);p=c[k>>2]|0;i=n;return p|0}function iJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+32|0;e=l+28|0;f=l+24|0;m=l+20|0;n=l+16|0;j=l+12|0;h=l+8|0;g=l+4|0;k=l;c[f>>2]=a;c[m>>2]=b;c[n>>2]=d;c[j>>2]=0;c[h>>2]=pi(c[f>>2]|0,c[n>>2]|0,c[(c[(c[f>>2]|0)+16>>2]|0)+(c[m>>2]<<4)>>2]|0)|0;do if((c[h>>2]|0)!=0?(c[(c[h>>2]|0)+56>>2]|0)!=0:0){c[g>>2]=c[(c[h>>2]|0)+56>>2];while(1){if(!(c[g>>2]|0)){a=8;break}if((c[(c[(c[g>>2]|0)+8>>2]|0)+4>>2]|0)>0){a=6;break}c[g>>2]=c[(c[g>>2]|0)+24>>2]}if((a|0)==6){c[e>>2]=6;n=c[e>>2]|0;i=l;return n|0}else if((a|0)==8){c[g>>2]=DH(c[f>>2]|0,c[h>>2]|0)|0;c[k>>2]=c[(c[c[(c[g>>2]|0)+4>>2]>>2]|0)+20>>2];c[j>>2]=Tb[c[k>>2]&255](c[(c[g>>2]|0)+8>>2]|0)|0;if(c[j>>2]|0)break;c[(c[g>>2]|0)+8>>2]=0;c[(c[h>>2]|0)+56>>2]=0;hu(c[g>>2]|0);break}}while(0);c[e>>2]=c[j>>2];n=c[e>>2]|0;i=l;return n|0}function jJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;d=e;c[g>>2]=a;c[f>>2]=b;kg(c[g>>2]|0);c[d>>2]=mJ(c[c[(c[g>>2]|0)+4>>2]>>2]|0,c[f>>2]|0)|0;i=e;return c[d>>2]|0}function kJ(f,g){f=f|0;g=g|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=i;i=i+256|0;z=D+72|0;B=D+64|0;A=D+56|0;y=D+48|0;x=D+40|0;k=D+148|0;l=D+144|0;m=D+140|0;p=D+136|0;u=D+132|0;q=D+128|0;t=D+124|0;o=D+120|0;v=D+116|0;C=D+88|0;j=D+84|0;r=D+80|0;n=D+152|0;w=D;s=D+76|0;c[k>>2]=f;c[l>>2]=g;c[p>>2]=0;c[u>>2]=1;c[m>>2]=c[c[k>>2]>>2];cg(C,c[m>>2]|0,D+156|0,100,c[(c[m>>2]|0)+88>>2]|0);if((c[(c[m>>2]|0)+160>>2]|0)>1){while(1){if(!(a[c[l>>2]>>0]|0))break;c[j>>2]=c[l>>2];do{B=c[l>>2]|0;c[l>>2]=B+1;if((a[B>>0]|0)==10)break}while((a[c[l>>2]>>0]|0)!=0);aA(C,41310,3);aA(C,c[j>>2]|0,(c[l>>2]|0)-(c[j>>2]|0)|0)}C=eg(C)|0;i=D;return C|0}if(!(b[(c[k>>2]|0)+68>>1]|0)){B=c[l>>2]|0;aA(C,B,If(c[l>>2]|0)|0);C=eg(C)|0;i=D;return C|0}while(1){if(!(a[c[l>>2]>>0]|0)){f=33;break}c[q>>2]=lJ(c[l>>2]|0,t)|0;aA(C,c[l>>2]|0,c[q>>2]|0);c[l>>2]=(c[l>>2]|0)+(c[q>>2]|0);if(!(c[t>>2]|0)){f=33;break}do if((a[c[l>>2]>>0]|0)==63)if((c[t>>2]|0)>1){Li((c[l>>2]|0)+1|0,p)|0;break}else{c[p>>2]=c[u>>2];break}else c[p>>2]=vh(c[k>>2]|0,c[l>>2]|0,c[t>>2]|0)|0;while(0);c[l>>2]=(c[l>>2]|0)+(c[t>>2]|0);c[u>>2]=(c[p>>2]|0)+1;c[v>>2]=(c[(c[k>>2]|0)+60>>2]|0)+(((c[p>>2]|0)-1|0)*40|0);if(e[(c[v>>2]|0)+8>>1]&1){aA(C,40498,4);continue}g=c[v>>2]|0;if(e[(c[v>>2]|0)+8>>1]&4){f=g;g=c[f+4>>2]|0;j=x;c[j>>2]=c[f>>2];c[j+4>>2]=g;$z(C,29137,x);continue}f=c[v>>2]|0;if(e[g+8>>1]&8){h[y>>3]=+h[f>>3];$z(C,29142,y);continue}if(e[f+8>>1]&2){a[n>>0]=a[(c[m>>2]|0)+62>>0]|0;if((d[n>>0]|0)!=1){f=w;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[w+32>>2]=c[m>>2];dh(w,c[(c[v>>2]|0)+16>>2]|0,c[(c[v>>2]|0)+12>>2]|0,a[n>>0]|0,0)|0;Zt(w,1)|0;c[v>>2]=w}c[r>>2]=c[(c[v>>2]|0)+12>>2];j=c[(c[v>>2]|0)+16>>2]|0;c[A>>2]=c[r>>2];c[A+4>>2]=j;$z(C,41314,A);if((d[n>>0]|0)==1)continue;Ug(w);continue}if(e[(c[v>>2]|0)+8>>1]&16384){c[B>>2]=c[c[v>>2]>>2];$z(C,41321,B);continue}aA(C,41334,2);c[s>>2]=c[(c[v>>2]|0)+12>>2];c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[s>>2]|0))break;c[z>>2]=a[(c[(c[v>>2]|0)+16>>2]|0)+(c[o>>2]|0)>>0]&255;$z(C,41337,z);c[o>>2]=(c[o>>2]|0)+1}aA(C,41342,1)}if((f|0)==33){C=eg(C)|0;i=D;return C|0}return 0}function lJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+16|0;f=l+12|0;j=l+8|0;h=l+4|0;g=l;c[e>>2]=b;c[f>>2]=d;c[h>>2]=0;c[c[f>>2]>>2]=0;while(1){if(!(a[c[e>>2]>>0]|0)){k=6;break}c[g>>2]=Qu(c[e>>2]|0,j)|0;d=c[g>>2]|0;if((c[j>>2]|0)==135)break;c[h>>2]=(c[h>>2]|0)+d;c[e>>2]=(c[e>>2]|0)+(c[g>>2]|0)}if((k|0)==6){k=c[h>>2]|0;i=l;return k|0}c[c[f>>2]>>2]=d;k=c[h>>2]|0;i=l;return k|0}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if((c[e>>2]|0)>0)c[(c[d>>2]|0)+164>>2]=c[e>>2];i=f;return c[(c[d>>2]|0)+164>>2]|0}function nJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+32|0;b=g+16|0;d=g+12|0;e=g+4|0;f=g;c[d>>2]=a;c[g+8>>2]=5;do if(!((c[(c[d>>2]|0)+308>>2]|0)%5|0)){c[f>>2]=(c[(c[d>>2]|0)+308>>2]|0)+5<<2;f=c[f>>2]|0;c[e>>2]=Ew(c[d>>2]|0,c[(c[d>>2]|0)+332>>2]|0,f,((f|0)<0)<<31>>31)|0;if(c[e>>2]|0){f=(c[e>>2]|0)+(c[(c[d>>2]|0)+308>>2]<<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[(c[d>>2]|0)+332>>2]=c[e>>2];break}c[b>>2]=7;f=c[b>>2]|0;i=g;return f|0}while(0);c[b>>2]=0;f=c[b>>2]|0;i=g;return f|0}function oJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=c[e>>2]|0;g=(c[f>>2]|0)+308|0;b=c[g>>2]|0;c[g>>2]=b+1;c[(c[(c[f>>2]|0)+332>>2]|0)+(b<<2)>>2]=a;yH(c[e>>2]|0);i=d;return}function pJ(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+20|0;h=p+16|0;j=p+12|0;k=p+24|0;l=p+8|0;n=p+4|0;m=p;c[h>>2]=b;c[j>>2]=e;a[k>>0]=f;c[l>>2]=c[(c[h>>2]|0)+4>>2];c[n>>2]=0;c[m>>2]=c[(c[l>>2]|0)+72>>2];while(1){if(!(c[m>>2]|0))break;if((c[(c[m>>2]|0)+4>>2]|0)==(c[j>>2]|0)?(c[c[m>>2]>>2]|0)==(c[h>>2]|0):0){o=5;break}c[m>>2]=c[(c[m>>2]|0)+12>>2]}if((o|0)==5)c[n>>2]=c[m>>2];do if(!(c[n>>2]|0)){c[n>>2]=ig(16,0)|0;if(c[n>>2]|0){c[(c[n>>2]|0)+4>>2]=c[j>>2];c[c[n>>2]>>2]=c[h>>2];c[(c[n>>2]|0)+12>>2]=c[(c[l>>2]|0)+72>>2];c[(c[l>>2]|0)+72>>2]=c[n>>2];break}c[g>>2]=7;o=c[g>>2]|0;i=p;return o|0}while(0);if((d[k>>0]|0|0)>(d[(c[n>>2]|0)+8>>0]|0|0))a[(c[n>>2]|0)+8>>0]=a[k>>0]|0;c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}function qJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;g=i;i=i+32|0;e=g+20|0;h=g+16|0;k=g+12|0;l=g+8|0;j=g+4|0;f=g;c[e>>2]=a;c[h>>2]=b;c[k>>2]=d;c[l>>2]=((c[(c[e>>2]|0)+36>>2]|0)>>>0)/5|0;a=(c[k>>2]|0)-(c[h>>2]|0)|0;a=a+(lF(c[e>>2]|0,c[h>>2]|0)|0)|0;c[j>>2]=((a+(c[l>>2]|0)|0)>>>0)/((c[l>>2]|0)>>>0)|0;c[f>>2]=(c[h>>2]|0)-(c[k>>2]|0)-(c[j>>2]|0);if((c[h>>2]|0)>>>0>((((c[381]|0)>>>0)/((c[(c[e>>2]|0)+32>>2]|0)>>>0)|0)+1|0)>>>0?(c[f>>2]|0)>>>0<((((c[381]|0)>>>0)/((c[(c[e>>2]|0)+32>>2]|0)>>>0)|0)+1|0)>>>0:0)c[f>>2]=(c[f>>2]|0)+-1;while(1){l=lF(c[e>>2]|0,c[f>>2]|0)|0;if((l|0)==(c[f>>2]|0))b=1;else b=(c[f>>2]|0)==((((c[381]|0)>>>0)/((c[(c[e>>2]|0)+32>>2]|0)>>>0)|0)+1|0);d=c[f>>2]|0;if(!b)break;c[f>>2]=d+-1}i=g;return d|0}function rJ(b){b=b|0;var e=0,f=0,g=0;f=i;i=i+16|0;g=f+4|0;e=f;c[g>>2]=b;c[e>>2]=c[(c[g>>2]|0)+8>>2];while(1){if(!(c[e>>2]|0))break;g=(c[e>>2]|0)+64|0;a[g>>0]=(d[g>>0]|0)&-5;c[e>>2]=c[(c[e>>2]|0)+8>>2]}i=f;return}function sJ(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+64|0;h=z+52|0;j=z+48|0;k=z+44|0;l=z+40|0;m=z+36|0;t=z+32|0;x=z+28|0;o=z+57|0;s=z+24|0;p=z+20|0;u=z+16|0;q=z+12|0;w=z+8|0;n=z+56|0;r=z+4|0;v=z;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;b=lF(c[j>>2]|0,c[l>>2]|0)|0;do if((b|0)!=(c[l>>2]|0)?(c[l>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[j>>2]|0)+32>>2]|0)>>>0)|0)+1|0):0){c[t>>2]=$q((c[(c[(c[j>>2]|0)+12>>2]|0)+56>>2]|0)+36|0)|0;if(!(c[t>>2]|0)){c[h>>2]=101;y=c[h>>2]|0;i=z;return y|0}c[x>>2]=mF(c[j>>2]|0,c[l>>2]|0,o,s)|0;if(c[x>>2]|0){c[h>>2]=c[x>>2];y=c[h>>2]|0;i=z;return y|0}if((d[o>>0]|0|0)==1){c[h>>2]=Lj(59063)|0;y=c[h>>2]|0;i=z;return y|0}if((d[o>>0]|0|0)==2){if(c[m>>2]|0)break;c[x>>2]=tJ(c[j>>2]|0,u,p,c[l>>2]|0,1)|0;if(!(c[x>>2]|0)){qB(c[u>>2]|0);break}c[h>>2]=c[x>>2];y=c[h>>2]|0;i=z;return y|0}a[n>>0]=0;c[r>>2]=0;c[x>>2]=nF(c[j>>2]|0,c[l>>2]|0,w,0)|0;if(c[x>>2]|0){c[h>>2]=c[x>>2];y=c[h>>2]|0;i=z;return y|0}if(!(c[m>>2]|0)){a[n>>0]=2;c[r>>2]=c[k>>2]}do{c[x>>2]=tJ(c[j>>2]|0,v,q,c[r>>2]|0,a[n>>0]|0)|0;if(c[x>>2]|0){y=19;break}qB(c[v>>2]|0);if(!(c[m>>2]|0))break}while((c[q>>2]|0)>>>0>(c[k>>2]|0)>>>0);if((y|0)==19){qB(c[w>>2]|0);c[h>>2]=c[x>>2];y=c[h>>2]|0;i=z;return y|0}c[x>>2]=uJ(c[j>>2]|0,c[w>>2]|0,a[o>>0]|0,c[s>>2]|0,c[q>>2]|0,c[m>>2]|0)|0;qB(c[w>>2]|0);if(c[x>>2]|0){c[h>>2]=c[x>>2];y=c[h>>2]|0;i=z;return y|0}}while(0);if(!(c[m>>2]|0)){while(1){c[l>>2]=(c[l>>2]|0)+-1;if((c[l>>2]|0)==((((c[381]|0)>>>0)/((c[(c[j>>2]|0)+32>>2]|0)>>>0)|0)+1|0))continue;y=lF(c[j>>2]|0,c[l>>2]|0)|0;if((y|0)!=(c[l>>2]|0))break}a[(c[j>>2]|0)+19>>0]=1;c[(c[j>>2]|0)+44>>2]=c[l>>2]}c[h>>2]=0;y=c[h>>2]|0;i=z;return y|0}function tJ(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=i;i=i+112|0;H=L+96|0;m=L+92|0;n=L+88|0;o=L+84|0;p=L+80|0;q=L+102|0;F=L+76|0;K=L+72|0;B=L+68|0;z=L+64|0;J=L+60|0;I=L+56|0;A=L+52|0;y=L+48|0;G=L+101|0;C=L+44|0;k=L+100|0;E=L+40|0;w=L+36|0;s=L+32|0;x=L+28|0;r=L+24|0;v=L+20|0;u=L+16|0;t=L+12|0;D=L+8|0;j=L+4|0;l=L;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;a[q>>0]=h;c[J>>2]=0;c[I>>2]=0;c[F>>2]=c[(c[m>>2]|0)+12>>2];c[A>>2]=$E(c[m>>2]|0)|0;c[B>>2]=$q((c[(c[F>>2]|0)+56>>2]|0)+36|0)|0;if((c[B>>2]|0)>>>0>=(c[A>>2]|0)>>>0){c[H>>2]=Lj(61115)|0;K=c[H>>2]|0;i=L;return K|0}a:do if((c[B>>2]|0)>>>0>0){a[G>>0]=0;c[C>>2]=0;do if((d[q>>0]|0)==1){if((c[p>>2]|0)>>>0<=(c[A>>2]|0)>>>0){c[K>>2]=mF(c[m>>2]|0,c[p>>2]|0,k,0)|0;if(c[K>>2]|0){c[H>>2]=c[K>>2];K=c[H>>2]|0;i=L;return K|0}else{if((d[k>>0]|0)!=2)break;a[G>>0]=1;break}}}else if((d[q>>0]|0)==2)a[G>>0]=1;while(0);c[K>>2]=Dg(c[(c[F>>2]|0)+72>>2]|0)|0;if(c[K>>2]|0){c[H>>2]=c[K>>2];K=c[H>>2]|0;i=L;return K|0}Xs((c[(c[F>>2]|0)+56>>2]|0)+36|0,(c[B>>2]|0)-1|0);b:while(1){c[I>>2]=c[J>>2];if(c[I>>2]|0)c[y>>2]=$q(c[(c[I>>2]|0)+56>>2]|0)|0;else c[y>>2]=$q((c[(c[F>>2]|0)+56>>2]|0)+32|0)|0;if((c[y>>2]|0)>>>0<=(c[A>>2]|0)>>>0?(e=c[C>>2]|0,c[C>>2]=e+1,e>>>0<=(c[B>>2]|0)>>>0):0)c[K>>2]=BJ(c[m>>2]|0,c[y>>2]|0,J,0)|0;else c[K>>2]=Lj(61171)|0;if(c[K>>2]|0){j=23;break}c[z>>2]=$q((c[(c[J>>2]|0)+56>>2]|0)+4|0)|0;c:do if((c[z>>2]|0)!=0|(a[G>>0]|0)!=0){if((c[z>>2]|0)>>>0>((((c[(c[m>>2]|0)+36>>2]|0)>>>0)/4|0)-2|0)>>>0){j=28;break b}do if(d[G>>0]|0){if((c[p>>2]|0)!=(c[y>>2]|0)){if((c[y>>2]|0)>>>0>=(c[p>>2]|0)>>>0)break;if((d[q>>0]|0)!=2)break}c[c[o>>2]>>2]=c[y>>2];c[c[n>>2]>>2]=c[J>>2];a[G>>0]=0;c[K>>2]=Dg(c[(c[J>>2]|0)+72>>2]|0)|0;if(c[K>>2]|0)break a;do if(!(c[z>>2]|0)){if(!(c[I>>2]|0)){e=(c[(c[F>>2]|0)+56>>2]|0)+32|0;f=c[(c[J>>2]|0)+56>>2]|0;a[e>>0]=a[f>>0]|0;a[e+1>>0]=a[f+1>>0]|0;a[e+2>>0]=a[f+2>>0]|0;a[e+3>>0]=a[f+3>>0]|0;break}c[K>>2]=Dg(c[(c[I>>2]|0)+72>>2]|0)|0;if(c[K>>2]|0)break a;e=c[(c[I>>2]|0)+56>>2]|0;f=c[(c[J>>2]|0)+56>>2]|0;a[e>>0]=a[f>>0]|0;a[e+1>>0]=a[f+1>>0]|0;a[e+2>>0]=a[f+2>>0]|0;a[e+3>>0]=a[f+3>>0]|0}else{c[w>>2]=$q((c[(c[J>>2]|0)+56>>2]|0)+8|0)|0;if((c[w>>2]|0)>>>0>(c[A>>2]|0)>>>0){j=40;break b}c[K>>2]=BJ(c[m>>2]|0,c[w>>2]|0,E,0)|0;if(c[K>>2]|0)break a;c[K>>2]=Dg(c[(c[E>>2]|0)+72>>2]|0)|0;h=c[E>>2]|0;if(c[K>>2]|0){j=43;break b}e=c[h+56>>2]|0;f=c[(c[J>>2]|0)+56>>2]|0;a[e>>0]=a[f>>0]|0;a[e+1>>0]=a[f+1>>0]|0;a[e+2>>0]=a[f+2>>0]|0;a[e+3>>0]=a[f+3>>0]|0;Xs((c[(c[E>>2]|0)+56>>2]|0)+4|0,(c[z>>2]|0)-1|0);iR((c[(c[E>>2]|0)+56>>2]|0)+8|0,(c[(c[J>>2]|0)+56>>2]|0)+12|0,(c[z>>2]|0)-1<<2|0)|0;qB(c[E>>2]|0);if(!(c[I>>2]|0)){Xs((c[(c[F>>2]|0)+56>>2]|0)+32|0,c[w>>2]|0);break}c[K>>2]=Dg(c[(c[I>>2]|0)+72>>2]|0)|0;if(c[K>>2]|0)break a;Xs(c[(c[I>>2]|0)+56>>2]|0,c[w>>2]|0)}while(0);c[J>>2]=0;break c}while(0);if((c[z>>2]|0)>>>0>0){c[r>>2]=c[(c[J>>2]|0)+56>>2];e=(c[p>>2]|0)>>>0>0;c[s>>2]=0;d:do if(e)if((d[q>>0]|0)==2){c[v>>2]=0;while(1){if((c[v>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break d;c[x>>2]=$q((c[r>>2]|0)+(8+(c[v>>2]<<2))|0)|0;j=c[v>>2]|0;if((c[x>>2]|0)>>>0<=(c[p>>2]|0)>>>0)break;c[v>>2]=j+1}c[s>>2]=j;break}else{e=$q((c[r>>2]|0)+8|0)|0;c[u>>2]=yj(e-(c[p>>2]|0)|0)|0;c[v>>2]=1;while(1){if((c[v>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break d;e=$q((c[r>>2]|0)+(8+(c[v>>2]<<2))|0)|0;c[t>>2]=yj(e-(c[p>>2]|0)|0)|0;if((c[t>>2]|0)<(c[u>>2]|0)){c[s>>2]=c[v>>2];c[u>>2]=c[t>>2]}c[v>>2]=(c[v>>2]|0)+1}}while(0);c[x>>2]=$q((c[r>>2]|0)+(8+(c[s>>2]<<2))|0)|0;if((c[x>>2]|0)>>>0>(c[A>>2]|0)>>>0){j=63;break b}if((a[G>>0]|0)!=0?(c[x>>2]|0)!=(c[p>>2]|0):0){if((c[x>>2]|0)>>>0>=(c[p>>2]|0)>>>0)break;if((d[q>>0]|0)!=2)break}c[c[o>>2]>>2]=c[x>>2];c[K>>2]=Dg(c[(c[J>>2]|0)+72>>2]|0)|0;if(c[K>>2]|0)break a;if((c[s>>2]|0)>>>0<((c[z>>2]|0)-1|0)>>>0){e=(c[r>>2]|0)+(8+(c[s>>2]<<2))|0;f=(c[r>>2]|0)+(4+(c[z>>2]<<2))|0;a[e>>0]=a[f>>0]|0;a[e+1>>0]=a[f+1>>0]|0;a[e+2>>0]=a[f+2>>0]|0;a[e+3>>0]=a[f+3>>0]|0}Xs((c[r>>2]|0)+4|0,(c[z>>2]|0)-1|0);e=(CJ(c[m>>2]|0,c[c[o>>2]>>2]|0)|0)!=0^1;c[D>>2]=e?1:0;c[K>>2]=BJ(c[m>>2]|0,c[c[o>>2]>>2]|0,c[n>>2]|0,c[D>>2]|0)|0;do if(!(c[K>>2]|0)){c[K>>2]=Dg(c[(c[c[n>>2]>>2]|0)+72>>2]|0)|0;if(!(c[K>>2]|0))break;qB(c[c[n>>2]>>2]|0);c[c[n>>2]>>2]=0}while(0);a[G>>0]=0}}else{c[K>>2]=Dg(c[(c[J>>2]|0)+72>>2]|0)|0;if(c[K>>2]|0)break a;c[c[o>>2]>>2]=c[y>>2];e=(c[(c[F>>2]|0)+56>>2]|0)+32|0;f=c[(c[J>>2]|0)+56>>2]|0;a[e>>0]=a[f>>0]|0;a[e+1>>0]=a[f+1>>0]|0;a[e+2>>0]=a[f+2>>0]|0;a[e+3>>0]=a[f+3>>0]|0;c[c[n>>2]>>2]=c[J>>2];c[J>>2]=0}while(0);qB(c[I>>2]|0);c[I>>2]=0;if(!(a[G>>0]|0))break a}if((j|0)==23){c[J>>2]=0;break}else if((j|0)==28){c[K>>2]=Lj(61200)|0;break}else if((j|0)==40){c[K>>2]=Lj(61234)|0;break}else if((j|0)==43){qB(h);break}else if((j|0)==63){c[K>>2]=Lj(61299)|0;break}}else{c[j>>2]=0==(d[(c[m>>2]|0)+19>>0]|0)?1:0;c[K>>2]=Dg(c[(c[(c[m>>2]|0)+12>>2]|0)+72>>2]|0)|0;if(c[K>>2]|0){c[H>>2]=c[K>>2];K=c[H>>2]|0;i=L;return K|0}G=(c[m>>2]|0)+44|0;c[G>>2]=(c[G>>2]|0)+1;if((c[(c[m>>2]|0)+44>>2]|0)==((((c[381]|0)>>>0)/((c[(c[m>>2]|0)+32>>2]|0)>>>0)|0)+1|0)){G=(c[m>>2]|0)+44|0;c[G>>2]=(c[G>>2]|0)+1}do if((d[(c[m>>2]|0)+17>>0]|0)!=0?(G=lF(c[m>>2]|0,c[(c[m>>2]|0)+44>>2]|0)|0,(G|0)==(c[(c[m>>2]|0)+44>>2]|0)):0){c[l>>2]=0;c[K>>2]=BJ(c[m>>2]|0,c[(c[m>>2]|0)+44>>2]|0,l,c[j>>2]|0)|0;if(!(c[K>>2]|0)){c[K>>2]=Dg(c[(c[l>>2]|0)+72>>2]|0)|0;qB(c[l>>2]|0)}if(c[K>>2]|0){c[H>>2]=c[K>>2];K=c[H>>2]|0;i=L;return K|0}else{G=(c[m>>2]|0)+44|0;c[G>>2]=(c[G>>2]|0)+1;if((c[(c[m>>2]|0)+44>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[m>>2]|0)+32>>2]|0)>>>0)|0)+1|0))break;G=(c[m>>2]|0)+44|0;c[G>>2]=(c[G>>2]|0)+1;break}}while(0);Xs((c[(c[(c[m>>2]|0)+12>>2]|0)+56>>2]|0)+28|0,c[(c[m>>2]|0)+44>>2]|0);c[c[o>>2]>>2]=c[(c[m>>2]|0)+44>>2];c[K>>2]=BJ(c[m>>2]|0,c[c[o>>2]>>2]|0,c[n>>2]|0,c[j>>2]|0)|0;if(c[K>>2]|0){c[H>>2]=c[K>>2];K=c[H>>2]|0;i=L;return K|0}else{c[K>>2]=Dg(c[(c[c[n>>2]>>2]|0)+72>>2]|0)|0;if(!(c[K>>2]|0))break;qB(c[c[n>>2]>>2]|0);c[c[n>>2]>>2]=0;break}}while(0);qB(c[J>>2]|0);qB(c[I>>2]|0);c[H>>2]=c[K>>2];K=c[H>>2]|0;i=L;return K|0}function uJ(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+48|0;n=v+40|0;o=v+36|0;k=v+32|0;p=v+44|0;q=v+28|0;r=v+24|0;w=v+20|0;t=v+16|0;s=v+12|0;x=v+8|0;u=v+4|0;l=v;c[o>>2]=b;c[k>>2]=e;a[p>>0]=f;c[q>>2]=g;c[r>>2]=h;c[w>>2]=j;c[s>>2]=c[(c[k>>2]|0)+84>>2];c[x>>2]=c[c[o>>2]>>2];c[u>>2]=vJ(c[x>>2]|0,c[(c[k>>2]|0)+72>>2]|0,c[r>>2]|0,c[w>>2]|0)|0;if(c[u>>2]|0){c[n>>2]=c[u>>2];x=c[n>>2]|0;i=v;return x|0}c[(c[k>>2]|0)+84>>2]=c[r>>2];if((d[p>>0]|0|0)!=5?(d[p>>0]|0|0)!=1:0){c[l>>2]=$q(c[(c[k>>2]|0)+56>>2]|0)|0;if((c[l>>2]|0)!=0?(xJ(c[o>>2]|0,c[l>>2]|0,4,c[r>>2]|0,u),(c[u>>2]|0)!=0):0){c[n>>2]=c[u>>2];x=c[n>>2]|0;i=v;return x|0}}else m=5;if((m|0)==5?(c[u>>2]=wJ(c[k>>2]|0)|0,(c[u>>2]|0)!=0):0){c[n>>2]=c[u>>2];x=c[n>>2]|0;i=v;return x|0}do if((d[p>>0]|0|0)!=1){c[u>>2]=nF(c[o>>2]|0,c[q>>2]|0,t,0)|0;if(c[u>>2]|0){c[n>>2]=c[u>>2];x=c[n>>2]|0;i=v;return x|0}c[u>>2]=Dg(c[(c[t>>2]|0)+72>>2]|0)|0;k=c[t>>2]|0;if(c[u>>2]|0){qB(k);c[n>>2]=c[u>>2];x=c[n>>2]|0;i=v;return x|0}else{c[u>>2]=yJ(k,c[s>>2]|0,c[r>>2]|0,a[p>>0]|0)|0;qB(c[t>>2]|0);if(c[u>>2]|0)break;xJ(c[o>>2]|0,c[r>>2]|0,a[p>>0]|0,c[q>>2]|0,u);break}}while(0);c[n>>2]=c[u>>2];x=c[n>>2]|0;i=v;return x|0}function vJ(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;k=t+36|0;l=t+32|0;m=t+28|0;n=t+24|0;j=t+20|0;r=t+16|0;o=t+12|0;s=t+8|0;p=t+4|0;q=t;c[l>>2]=d;c[m>>2]=f;c[n>>2]=g;c[j>>2]=h;c[o>>2]=0;if((a[(c[l>>2]|0)+16>>0]|0)!=0?(c[s>>2]=Dg(c[m>>2]|0)|0,(c[s>>2]|0)!=0):0){c[k>>2]=c[s>>2];s=c[k>>2]|0;i=t;return s|0}if((e[(c[m>>2]|0)+24>>1]&2|0)!=0?(g=lt(c[m>>2]|0)|0,c[s>>2]=g,0!=(g|0)):0){c[k>>2]=c[s>>2];s=c[k>>2]|0;i=t;return s|0}if(!((c[j>>2]|0)!=0?1:(e[(c[m>>2]|0)+24>>1]&8|0)==0))c[o>>2]=c[(c[m>>2]|0)+20>>2];g=(c[m>>2]|0)+24|0;b[g>>1]=e[g>>1]&-9;c[r>>2]=Zr(c[l>>2]|0,c[n>>2]|0)|0;do if(c[r>>2]|0){j=(c[m>>2]|0)+24|0;b[j>>1]=e[j>>1]|e[(c[r>>2]|0)+24>>1]&8;j=c[r>>2]|0;if(a[(c[l>>2]|0)+16>>0]|0){AJ(j,(c[(c[l>>2]|0)+28>>2]|0)+1|0);break}else{ws(j);break}}while(0);c[p>>2]=c[(c[m>>2]|0)+20>>2];AJ(c[m>>2]|0,c[n>>2]|0);$r(c[m>>2]|0);if(a[(c[l>>2]|0)+16>>0]|0){AJ(c[r>>2]|0,c[p>>2]|0);zs(c[r>>2]|0)}do if(c[o>>2]|0){c[s>>2]=sg(c[l>>2]|0,c[o>>2]|0,q,0)|0;if(!(c[s>>2]|0)){s=(c[q>>2]|0)+24|0;b[s>>1]=e[s>>1]|8;$r(c[q>>2]|0);zs(c[q>>2]|0);break}if((c[o>>2]|0)>>>0<=(c[(c[l>>2]|0)+32>>2]|0)>>>0)hj(c[(c[l>>2]|0)+60>>2]|0,c[o>>2]|0,c[(c[l>>2]|0)+208>>2]|0);c[k>>2]=c[s>>2];s=c[k>>2]|0;i=t;return s|0}while(0);c[k>>2]=0;s=c[k>>2]|0;i=t;return s|0}function wJ(b){b=b|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;f=q+32|0;j=q+28|0;l=q+24|0;p=q+20|0;m=q+16|0;k=q+36|0;o=q+12|0;n=q+8|0;g=q+4|0;h=q;c[f>>2]=b;c[m>>2]=c[(c[f>>2]|0)+52>>2];a[k>>0]=a[c[f>>2]>>0]|0;c[o>>2]=c[(c[f>>2]|0)+84>>2];c[p>>2]=Kt(c[f>>2]|0)|0;if(c[p>>2]|0){n=a[k>>0]|0;o=c[f>>2]|0;a[o>>0]=n;p=c[p>>2]|0;i=q;return p|0}c[l>>2]=e[(c[f>>2]|0)+18>>1];c[j>>2]=0;while(1){b=c[f>>2]|0;if((c[j>>2]|0)>=(c[l>>2]|0))break;c[n>>2]=(c[b+56>>2]|0)+(e[(c[f>>2]|0)+20>>1]&(d[(c[(c[f>>2]|0)+64>>2]|0)+(c[j>>2]<<1)>>0]<<8|d[(c[(c[f>>2]|0)+64>>2]|0)+(c[j>>2]<<1)+1>>0]));zJ(c[f>>2]|0,c[n>>2]|0,p);if(!(a[(c[f>>2]|0)+4>>0]|0)){c[g>>2]=$q(c[n>>2]|0)|0;xJ(c[m>>2]|0,c[g>>2]|0,5,c[o>>2]|0,p)}c[j>>2]=(c[j>>2]|0)+1}if(a[b+4>>0]|0){n=a[k>>0]|0;o=c[f>>2]|0;a[o>>0]=n;p=c[p>>2]|0;i=q;return p|0}c[h>>2]=$q((c[(c[f>>2]|0)+56>>2]|0)+((d[(c[f>>2]|0)+5>>0]|0)+8)|0)|0;xJ(c[m>>2]|0,c[h>>2]|0,5,c[o>>2]|0,p);n=a[k>>0]|0;o=c[f>>2]|0;a[o>>0]=n;p=c[p>>2]|0;i=q;return p|0}function xJ(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;j=t+32|0;k=t+28|0;l=t+36|0;m=t+24|0;n=t+20|0;q=t+16|0;r=t+12|0;o=t+8|0;p=t+4|0;s=t;c[j>>2]=b;c[k>>2]=e;a[l>>0]=f;c[m>>2]=g;c[n>>2]=h;if(c[c[n>>2]>>2]|0){i=t;return}if(!(c[k>>2]|0)){s=Lj(56501)|0;c[c[n>>2]>>2]=s;i=t;return}c[o>>2]=lF(c[j>>2]|0,c[k>>2]|0)|0;c[s>>2]=sg(c[c[j>>2]>>2]|0,c[o>>2]|0,q,0)|0;if(c[s>>2]|0){c[c[n>>2]>>2]=c[s>>2];i=t;return}c[p>>2]=((c[k>>2]|0)-(c[o>>2]|0)-1|0)*5;do if((c[p>>2]|0)>=0){c[r>>2]=tg(c[q>>2]|0)|0;if((d[l>>0]|0|0)==(d[(c[r>>2]|0)+(c[p>>2]|0)>>0]|0|0)?(g=$q((c[r>>2]|0)+((c[p>>2]|0)+1)|0)|0,(g|0)==(c[m>>2]|0)):0)break;g=Dg(c[q>>2]|0)|0;c[s>>2]=g;c[c[n>>2]>>2]=g;if(!(c[s>>2]|0)){a[(c[r>>2]|0)+(c[p>>2]|0)>>0]=a[l>>0]|0;Xs((c[r>>2]|0)+((c[p>>2]|0)+1)|0,c[m>>2]|0)}}else{s=Lj(56512)|0;c[c[n>>2]>>2]=s}while(0);vg(c[q>>2]|0);i=t;return}function yJ(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+64|0;j=v+52|0;k=v+48|0;l=v+44|0;m=v+40|0;n=v+57|0;q=v+56|0;o=v+36|0;r=v+32|0;t=v+28|0;s=v+24|0;p=v;c[k>>2]=b;c[l>>2]=f;c[m>>2]=g;a[n>>0]=h;h=c[k>>2]|0;do if((d[n>>0]|0|0)==4){u=$q(c[h+56>>2]|0)|0;if((u|0)==(c[l>>2]|0)){Xs(c[(c[k>>2]|0)+56>>2]|0,c[m>>2]|0);break}c[j>>2]=Lj(58893)|0;u=c[j>>2]|0;i=v;return u|0}else{a[q>>0]=a[h>>0]|0;c[t>>2]=Kt(c[k>>2]|0)|0;if(c[t>>2]|0){c[j>>2]=c[t>>2];u=c[j>>2]|0;i=v;return u|0}c[r>>2]=e[(c[k>>2]|0)+18>>1];c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[r>>2]|0))break;c[s>>2]=(c[(c[k>>2]|0)+56>>2]|0)+((e[(c[k>>2]|0)+20>>1]|0)&((d[(c[(c[k>>2]|0)+64>>2]|0)+(c[o>>2]<<1)>>0]|0)<<8|(d[(c[(c[k>>2]|0)+64>>2]|0)+(c[o>>2]<<1)+1>>0]|0)));if((d[n>>0]|0|0)==3){Ub[c[(c[k>>2]|0)+80>>2]&255](c[k>>2]|0,c[s>>2]|0,p);if(((e[p+16>>1]|0)>>>0<(c[p+12>>2]|0)>>>0?((c[s>>2]|0)+(e[p+18>>1]|0)+-1|0)>>>0<=((c[(c[k>>2]|0)+56>>2]|0)+(e[(c[k>>2]|0)+20>>1]|0)|0)>>>0:0)?(t=c[l>>2]|0,(t|0)==($q((c[s>>2]|0)+(e[p+18>>1]|0)+-4|0)|0)):0){u=13;break}}else{t=$q(c[s>>2]|0)|0;if((t|0)==(c[l>>2]|0)){u=15;break}}c[o>>2]=(c[o>>2]|0)+1}if((u|0)==13)Xs((c[s>>2]|0)+(e[p+18>>1]|0)+-4|0,c[m>>2]|0);else if((u|0)==15)Xs(c[s>>2]|0,c[m>>2]|0);do if((c[o>>2]|0)==(c[r>>2]|0)){if((d[n>>0]|0|0)==5?(u=$q((c[(c[k>>2]|0)+56>>2]|0)+((d[(c[k>>2]|0)+5>>0]|0)+8)|0)|0,(u|0)==(c[l>>2]|0)):0){Xs((c[(c[k>>2]|0)+56>>2]|0)+((d[(c[k>>2]|0)+5>>0]|0)+8)|0,c[m>>2]|0);break}c[j>>2]=Lj(58929)|0;u=c[j>>2]|0;i=v;return u|0}while(0);a[c[k>>2]>>0]=a[q>>0]|0}while(0);c[j>>2]=0;u=c[j>>2]|0;i=v;return u|0}function zJ(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+48|0;f=l+36|0;g=l+32|0;h=l+28|0;j=l;k=l+24|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;if(c[c[h>>2]>>2]|0){i=l;return}Ub[c[(c[f>>2]|0)+80>>2]&255](c[f>>2]|0,c[g>>2]|0,j);if((e[j+16>>1]|0)>>>0>=(c[j+12>>2]|0)>>>0){i=l;return}c[k>>2]=$q((c[g>>2]|0)+((e[j+18>>1]|0)-4)|0)|0;xJ(c[(c[f>>2]|0)+52>>2]|0,c[k>>2]|0,3,c[(c[f>>2]|0)+84>>2]|0,c[h>>2]|0);i=l;return}function AJ(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;h=f;c[d>>2]=a;c[g>>2]=b;c[h>>2]=c[(c[d>>2]|0)+28>>2];_b[c[148>>2]&255](c[(c[h>>2]|0)+44>>2]|0,c[c[d>>2]>>2]|0,c[(c[d>>2]|0)+20>>2]|0,c[g>>2]|0);c[(c[d>>2]|0)+20>>2]=c[g>>2];if(!((e[(c[d>>2]|0)+24>>1]|0)&2)){i=f;return}if(!((e[(c[d>>2]|0)+24>>1]|0)&8)){i=f;return}cj(c[d>>2]|0,3);i=f;return}function BJ(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;k=i;i=i+32|0;g=k+20|0;n=k+16|0;m=k+12|0;h=k+8|0;l=k+4|0;j=k;c[n>>2]=b;c[m>>2]=d;c[h>>2]=e;c[l>>2]=f;c[j>>2]=nF(c[n>>2]|0,c[m>>2]|0,c[h>>2]|0,c[l>>2]|0)|0;f=c[h>>2]|0;do if(!(c[j>>2]|0)){n=(Jt(c[(c[f>>2]|0)+72>>2]|0)|0)>1;f=c[c[h>>2]>>2]|0;if(!n){a[f>>0]=0;break}qB(f);c[c[h>>2]>>2]=0;c[g>>2]=Lj(57630)|0;n=c[g>>2]|0;i=k;return n|0}else c[f>>2]=0;while(0);c[g>>2]=c[j>>2];n=c[g>>2]|0;i=k;return n|0}function CJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+8|0;d=f+4|0;e=f;c[g>>2]=a;c[d>>2]=b;c[e>>2]=c[(c[g>>2]|0)+60>>2];if(!(c[e>>2]|0)){g=0;g=g&1;i=f;return g|0}g=c[d>>2]|0;if(g>>>0>(jj(c[e>>2]|0)|0)>>>0){g=1;g=g&1;i=f;return g|0}g=(ij(c[e>>2]|0,c[d>>2]|0)|0)!=0;g=g&1;i=f;return g|0}function DJ(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[(c[b>>2]|0)+16>>0]|0|0}function EJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;if(!(c[h>>2]|0)){c[e>>2]=7;d=c[e>>2]|0;i=k;return d|0}if(cf(c[f>>2]|0,c[h>>2]|0,-1,j,0)|0){b=c[g>>2]|0;d=c[f>>2]|0;xj(b,d,bf(c[f>>2]|0)|0);c[e>>2]=Cf(c[f>>2]|0)|0;d=c[e>>2]|0;i=k;return d|0}else{ue(c[j>>2]|0)|0;c[e>>2]=JJ(c[f>>2]|0,c[j>>2]|0,c[g>>2]|0)|0;d=c[e>>2]|0;i=k;return d|0}return 0}function FJ(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;kg(c[e>>2]|0);c[b>>2]=KJ(c[e>>2]|0)|0;i=d;return c[b>>2]|0}function GJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+20|0;f=k+16|0;g=k+12|0;l=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[l>>2]=d;c[j>>2]=cf(c[f>>2]|0,c[l>>2]|0,-1,h,0)|0;if(c[j>>2]|0){c[e>>2]=c[j>>2];l=c[e>>2]|0;i=k;return l|0}while(1){l=100==(ue(c[h>>2]|0)|0);a=c[f>>2]|0;if(!l){b=6;break}l=c[g>>2]|0;c[j>>2]=EJ(a,l,Fe(c[h>>2]|0,0)|0)|0;if(c[j>>2]|0){b=5;break}}if((b|0)==5){JJ(c[f>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;c[e>>2]=c[j>>2];l=c[e>>2]|0;i=k;return l|0}else if((b|0)==6){c[e>>2]=JJ(a,c[h>>2]|0,c[g>>2]|0)|0;l=c[e>>2]|0;i=k;return l|0}return 0}function HJ(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+80|0;h=m+68|0;j=m+64|0;l=m+60|0;g=m+56|0;k=m+8|0;f=m;c[h>>2]=a;c[j>>2]=d;kg(c[h>>2]|0);kg(c[j>>2]|0);c[g>>2]=Bg(Of(c[h>>2]|0)|0)|0;if((c[c[g>>2]>>2]|0)!=0?(d=pg(c[j>>2]|0)|0,d=rR(d|0,((d|0)<0)<<31>>31|0,rg(c[j>>2]|0)|0,0)|0,a=f,c[a>>2]=d,c[a+4>>2]=C,a=vi(c[g>>2]|0,11,f)|0,c[l>>2]=a,c[l>>2]=(c[l>>2]|0)==12?0:a,(c[l>>2]|0)!=0):0){l=c[l>>2]|0;i=m;return l|0}f=k;g=f+48|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[k+20>>2]=c[c[j>>2]>>2];c[k+24>>2]=c[j>>2];c[k+4>>2]=c[h>>2];c[k+16>>2]=1;Vd(k,2147483647)|0;c[l>>2]=Wd(k)|0;if(!(c[l>>2]|0)){k=(c[(c[h>>2]|0)+4>>2]|0)+22|0;b[k>>1]=(e[k>>1]|0)&-3;l=c[l>>2]|0;i=m;return l|0}else{IJ(Of(c[k+4>>2]|0)|0);l=c[l>>2]|0;i=m;return l|0}return 0}function IJ(b){b=b|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=b;if(a[(c[e>>2]|0)+16>>0]|0){i=f;return}if(d[(c[e>>2]|0)+13>>0]|0){i=f;return}Ui(c[e>>2]|0);i=f;return}function JJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h+12|0;j=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[j>>2]=b;c[f>>2]=d;c[g>>2]=Qg(c[j>>2]|0)|0;if(!(c[g>>2]|0)){j=c[g>>2]|0;i=h;return j|0}d=c[f>>2]|0;j=c[e>>2]|0;xj(d,j,bf(c[e>>2]|0)|0);j=c[g>>2]|0;i=h;return j|0}function KJ(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=(c[(c[(c[e>>2]|0)+4>>2]|0)+32>>2]|0)-(c[(c[(c[e>>2]|0)+4>>2]|0)+36>>2]|0);i=d;return c[b>>2]|0}function LJ(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+64|0;n=q+32|0;o=q+28|0;p=q+24|0;f=q+20|0;j=q+16|0;e=q+12|0;h=q+8|0;g=q+4|0;k=q;m=q+40|0;c[o>>2]=b;c[p>>2]=0;if((d[(c[o>>2]|0)+16>>0]|0)!=0?(c[(c[o>>2]|0)+44>>2]|0)!=0:0){c[n>>2]=c[(c[o>>2]|0)+44>>2];p=c[n>>2]|0;i=q;return p|0}do if((sr(c[o>>2]|0)|0)==0?(d[(c[o>>2]|0)+17>>0]|0)==0:0){c[f>>2]=1;c[p>>2]=ut(c[o>>2]|0,1)|0;if(!(c[p>>2]|0)){if((d[(c[o>>2]|0)+18>>0]|0)<=1)c[p>>2]=MJ(c[o>>2]|0,f)|0;if(!(c[p>>2]|0)){if(c[f>>2]|0){if(a[(c[o>>2]|0)+15>>0]|0){c[p>>2]=776;break}c[p>>2]=vt(c[o>>2]|0,4)|0;if(c[p>>2]|0)break;if((((c[c[(c[o>>2]|0)+68>>2]>>2]|0)==0?(c[j>>2]=c[c[o>>2]>>2],c[p>>2]=Nr(c[j>>2]|0,c[(c[o>>2]|0)+180>>2]|0,0,e)|0,(c[p>>2]|0)==0&(c[e>>2]|0)!=0):0)?(c[h>>2]=0,c[g>>2]=2050,c[p>>2]=Vr(c[j>>2]|0,c[(c[o>>2]|0)+180>>2]|0,c[(c[o>>2]|0)+68>>2]|0,c[g>>2]|0,h)|0,(c[p>>2]|0)==0):0)?(c[h>>2]&1|0)!=0:0){c[p>>2]=et(48855)|0;hr(c[(c[o>>2]|0)+68>>2]|0)|0}e=c[o>>2]|0;if(c[c[(c[o>>2]|0)+68>>2]>>2]|0){c[p>>2]=er(e)|0;if(!(c[p>>2]|0)){c[p>>2]=Lr(c[o>>2]|0,1)|0;a[(c[o>>2]|0)+17>>0]=0}}else if(!(a[e+4>>0]|0))wr(c[o>>2]|0,1)|0;if(c[p>>2]|0){fr(c[o>>2]|0,c[p>>2]|0)|0;break}}if((a[(c[o>>2]|0)+13>>0]|0)==0?(d[(c[o>>2]|0)+24>>0]|0)!=0:0){c[k>>2]=0;c[p>>2]=NJ(c[o>>2]|0,k)|0;if(c[p>>2]|0)break;if((c[k>>2]|0)>>>0>0){c[p>>2]=Wr(c[(c[o>>2]|0)+64>>2]|0,m,16,24,0)|0;if((c[p>>2]|0)!=0&(c[p>>2]|0)!=522)break}else{e=m;f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0))}if(vQ((c[o>>2]|0)+112|0,m,16)|0)Ui(c[o>>2]|0)}c[p>>2]=OJ(c[o>>2]|0)|0;l=35}}}else l=35;while(0);if((l|0)==35){if(sr(c[o>>2]|0)|0)c[p>>2]=PJ(c[o>>2]|0)|0;if((c[p>>2]|0)==0?(d[(c[o>>2]|0)+17>>0]|0)==0:0)c[p>>2]=NJ(c[o>>2]|0,(c[o>>2]|0)+28|0)|0}e=c[o>>2]|0;if(c[p>>2]|0)dr(e);else{a[e+17>>0]=1;a[(c[o>>2]|0)+24>>0]=1}c[n>>2]=c[p>>2];p=c[n>>2]|0;i=q;return p|0}function MJ(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;f=q+32|0;g=q+28|0;o=q+24|0;p=q+20|0;h=q+16|0;l=q+12|0;m=q+8|0;n=q+4|0;j=q;k=q+36|0;c[f>>2]=b;c[g>>2]=e;c[o>>2]=c[c[f>>2]>>2];c[p>>2]=0;c[h>>2]=1;c[l>>2]=((c[c[(c[f>>2]|0)+68>>2]>>2]|0)!=0^1^1)&1;c[c[g>>2]>>2]=0;if(!(c[l>>2]|0))c[p>>2]=Nr(c[o>>2]|0,c[(c[f>>2]|0)+180>>2]|0,0,h)|0;if(!((c[p>>2]|0)==0&(c[h>>2]|0)!=0)){p=c[p>>2]|0;i=q;return p|0}c[m>>2]=0;c[p>>2]=WJ(c[(c[f>>2]|0)+64>>2]|0,m)|0;if((c[p>>2]|0)!=0|(c[m>>2]|0)!=0){p=c[p>>2]|0;i=q;return p|0}c[p>>2]=NJ(c[f>>2]|0,n)|0;if(c[p>>2]|0){p=c[p>>2]|0;i=q;return p|0}if(!((c[n>>2]|0)!=0|(c[l>>2]|0)!=0)){Sj();if((vt(c[f>>2]|0,2)|0)==0?(qr(c[o>>2]|0,c[(c[f>>2]|0)+180>>2]|0,0)|0,(a[(c[f>>2]|0)+4>>0]|0)==0):0)wr(c[f>>2]|0,1)|0;Tj();p=c[p>>2]|0;i=q;return p|0}if(!(c[l>>2]|0)){c[j>>2]=2049;c[p>>2]=Vr(c[o>>2]|0,c[(c[f>>2]|0)+180>>2]|0,c[(c[f>>2]|0)+68>>2]|0,c[j>>2]|0,j)|0}if(!(c[p>>2]|0)){a[k>>0]=0;o=Wr(c[(c[f>>2]|0)+68>>2]|0,k,1,0,0)|0;c[p>>2]=o;c[p>>2]=(c[p>>2]|0)==522?0:o;if(!(c[l>>2]|0))hr(c[(c[f>>2]|0)+68>>2]|0)|0;c[c[g>>2]>>2]=(d[k>>0]|0)!=0&1;p=c[p>>2]|0;i=q;return p|0}else{if((c[p>>2]|0)!=14){p=c[p>>2]|0;i=q;return p|0}c[c[g>>2]>>2]=1;c[p>>2]=0;p=c[p>>2]|0;i=q;return p|0}return 0}function NJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;d=k+24|0;e=k+20|0;f=k+16|0;h=k+12|0;g=k;j=k+8|0;c[e>>2]=a;c[f>>2]=b;c[h>>2]=VJ(c[(c[e>>2]|0)+216>>2]|0)|0;if(!(c[h>>2]|0)){b=g;c[b>>2]=0;c[b+4>>2]=0;if((c[c[(c[e>>2]|0)+64>>2]>>2]|0)!=0?(c[j>>2]=Si(c[(c[e>>2]|0)+64>>2]|0,g)|0,(c[j>>2]|0)!=0):0){c[d>>2]=c[j>>2];j=c[d>>2]|0;i=k;return j|0}j=g;b=c[(c[e>>2]|0)+160>>2]|0;b=gR(c[j>>2]|0,c[j+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;b=fR(b|0,C|0,1,0)|0;j=c[(c[e>>2]|0)+160>>2]|0;j=pR(b|0,C|0,j|0,((j|0)<0)<<31>>31|0)|0;c[h>>2]=j}if((c[h>>2]|0)>>>0>(c[(c[e>>2]|0)+164>>2]|0)>>>0)c[(c[e>>2]|0)+164>>2]=c[h>>2];c[c[f>>2]>>2]=c[h>>2];c[d>>2]=0;j=c[d>>2]|0;i=k;return j|0}function OJ(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+12|0;k=l+8|0;j=l+4|0;f=l;c[h>>2]=b;c[k>>2]=0;do if(!(a[(c[h>>2]|0)+13>>0]|0)){c[k>>2]=NJ(c[h>>2]|0,f)|0;if(c[k>>2]|0){c[g>>2]=c[k>>2];k=c[g>>2]|0;i=l;return k|0}b=c[c[h>>2]>>2]|0;e=c[(c[h>>2]|0)+220>>2]|0;if(!(c[f>>2]|0)){f=qr(b,e,0)|0;c[k>>2]=f;c[k>>2]=(c[k>>2]|0)==5898?0:f;c[j>>2]=0}else c[k>>2]=Nr(b,e,0,j)|0;if(!(c[k>>2]|0)){b=c[h>>2]|0;if(c[j>>2]|0){c[k>>2]=RJ(b,0)|0;break}if((d[b+5>>0]|0)==5)a[(c[h>>2]|0)+5>>0]=0}}while(0);c[g>>2]=c[k>>2];k=c[g>>2]|0;i=l;return k|0}function PJ(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e+8|0;d=e+4|0;f=e;c[b>>2]=a;c[f>>2]=0;Gs(c[(c[b>>2]|0)+216>>2]|0);c[d>>2]=QJ(c[(c[b>>2]|0)+216>>2]|0,f)|0;if(!((c[d>>2]|0)!=0|(c[f>>2]|0)!=0)){ +f=c[d>>2]|0;i=e;return f|0}Ui(c[b>>2]|0);f=c[d>>2]|0;i=e;return f|0}function QJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;g=h+4|0;f=h;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;do{j=c[d>>2]|0;b=c[e>>2]|0;a=(c[f>>2]|0)+1|0;c[f>>2]=a;c[g>>2]=Ct(j,b,0,a)|0}while((c[g>>2]|0)==-1);i=h;return c[g>>2]|0}function RJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;e=k+12|0;f=k+8|0;g=k+4|0;h=k;c[f>>2]=b;c[g>>2]=d;c[h>>2]=0;do if((a[(c[f>>2]|0)+13>>0]|0)==0?(c[(c[f>>2]|0)+216>>2]|0)==0:0)if(aJ(c[f>>2]|0)|0){hr(c[(c[f>>2]|0)+68>>2]|0)|0;c[h>>2]=SJ(c[f>>2]|0)|0;if(c[h>>2]|0)break;a[(c[f>>2]|0)+5>>0]=5;a[(c[f>>2]|0)+17>>0]=0;break}else{c[e>>2]=14;j=c[e>>2]|0;i=k;return j|0}else j=7;while(0);if((j|0)==7)c[c[g>>2]>>2]=1;c[e>>2]=c[h>>2];j=c[e>>2]|0;i=k;return j|0}function SJ(b){b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;c[f>>2]=0;if(a[(c[e>>2]|0)+4>>0]|0)c[f>>2]=TJ(c[e>>2]|0)|0;if(c[f>>2]|0){b=c[e>>2]|0;Xi(b);f=c[f>>2]|0;i=g;return f|0}b=(c[e>>2]|0)+168|0;c[f>>2]=UJ(c[c[e>>2]>>2]|0,c[(c[e>>2]|0)+64>>2]|0,c[(c[e>>2]|0)+220>>2]|0,d[(c[e>>2]|0)+4>>0]|0,c[b>>2]|0,c[b+4>>2]|0,(c[e>>2]|0)+216|0)|0;b=c[e>>2]|0;Xi(b);f=c[f>>2]|0;i=g;return f|0}function TJ(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=vt(c[b>>2]|0,4)|0;if(!(c[d>>2]|0)){d=c[d>>2]|0;i=e;return d|0}wr(c[b>>2]|0,1)|0;d=c[d>>2]|0;i=e;return d|0}function UJ(d,e,f,g,h,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;w=i;i=i+48|0;l=w+44|0;m=w+40|0;n=w+36|0;o=w+32|0;p=w+28|0;q=w;r=w+24|0;v=w+20|0;u=w+16|0;s=w+12|0;t=w+8|0;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;f=q;c[f>>2]=h;c[f+4>>2]=j;c[r>>2]=k;c[c[r>>2]>>2]=0;c[u>>2]=ig(120+(c[(c[m>>2]|0)+4>>2]|0)|0,0)|0;if(!(c[u>>2]|0)){c[l>>2]=7;f=c[l>>2]|0;i=w;return f|0}c[c[u>>2]>>2]=c[m>>2];c[(c[u>>2]|0)+8>>2]=(c[u>>2]|0)+120;c[(c[u>>2]|0)+4>>2]=c[n>>2];b[(c[u>>2]|0)+40>>1]=-1;d=q;k=c[d+4>>2]|0;f=(c[u>>2]|0)+16|0;c[f>>2]=c[d>>2];c[f+4>>2]=k;c[(c[u>>2]|0)+108>>2]=c[o>>2];a[(c[u>>2]|0)+48>>0]=1;a[(c[u>>2]|0)+49>>0]=1;a[(c[u>>2]|0)+43>>0]=(c[p>>2]|0)!=0?2:0;c[s>>2]=524294;c[v>>2]=Vr(c[m>>2]|0,c[o>>2]|0,c[(c[u>>2]|0)+8>>2]|0,c[s>>2]|0,s)|0;if((c[v>>2]|0)==0?(c[s>>2]&1|0)!=0:0)a[(c[u>>2]|0)+46>>0]=1;if(c[v>>2]|0){Ls(c[u>>2]|0,0);hr(c[(c[u>>2]|0)+8>>2]|0)|0;Kd(c[u>>2]|0)}else{c[t>>2]=Sr(c[n>>2]|0)|0;if(c[t>>2]&1024)a[(c[u>>2]|0)+48>>0]=0;if(c[t>>2]&4096)a[(c[u>>2]|0)+49>>0]=0;c[c[r>>2]>>2]=c[u>>2]}c[l>>2]=c[v>>2];f=c[l>>2]|0;i=w;return f|0}function VJ(a){a=a|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[e>>2]=a;if((c[e>>2]|0)!=0?(b[(c[e>>2]|0)+40>>1]|0)>=0:0){c[d>>2]=c[(c[e>>2]|0)+52+20>>2];a=c[d>>2]|0;i=f;return a|0}c[d>>2]=0;a=c[d>>2]|0;i=f;return a|0}function WJ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;b=Yb[c[(c[c[f>>2]>>2]|0)+36>>2]&255](c[f>>2]|0,c[e>>2]|0)|0;i=d;return b|0}function XJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+176|0;d=g+168|0;f=g+164|0;b=g+160|0;e=g;c[d>>2]=a;kR(e|0,0,160)|0;while(1){if(!(c[d>>2]|0))break;c[b>>2]=c[(c[d>>2]|0)+8>>2];c[(c[d>>2]|0)+8>>2]=0;c[f>>2]=0;while(1){if(!(c[e+(c[f>>2]<<2)>>2]|0))break;c[d>>2]=_J(c[e+(c[f>>2]<<2)>>2]|0,c[d>>2]|0)|0;c[e+(c[f>>2]<<2)>>2]=0;c[f>>2]=(c[f>>2]|0)+1}c[e+(c[f>>2]<<2)>>2]=c[d>>2];c[d>>2]=c[b>>2]}c[d>>2]=0;c[f>>2]=0;while(1){a=c[d>>2]|0;if((c[f>>2]|0)>>>0>=40)break;c[d>>2]=_J(a,c[e+(c[f>>2]<<2)>>2]|0)|0;c[f>>2]=(c[f>>2]|0)+1}i=g;return a|0}function YJ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;d=g+8|0;e=g+4|0;f=g;c[b>>2]=a;c[e>>2]=c[b>>2];c[b>>2]=c[(c[e>>2]|0)+8>>2];c[(c[e>>2]|0)+8>>2]=0;c[(c[e>>2]|0)+12>>2]=0;c[d>>2]=1;while(1){a=c[e>>2]|0;if(!(c[b>>2]|0))break;c[f>>2]=a;c[e>>2]=c[b>>2];c[b>>2]=c[(c[e>>2]|0)+8>>2];c[(c[e>>2]|0)+12>>2]=c[f>>2];a=aK(b,c[d>>2]|0)|0;c[(c[e>>2]|0)+8>>2]=a;c[d>>2]=(c[d>>2]|0)+1}i=g;return a|0}function ZJ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j+12|0;e=j+8|0;h=j+4|0;f=j;c[g>>2]=a;c[e>>2]=b;c[h>>2]=d;a=c[g>>2]|0;if(c[(c[g>>2]|0)+12>>2]|0){ZJ(c[a+12>>2]|0,c[e>>2]|0,f);c[(c[f>>2]|0)+8>>2]=c[g>>2]}else c[c[e>>2]>>2]=a;a=c[g>>2]|0;if(c[(c[g>>2]|0)+8>>2]|0){ZJ(c[a+8>>2]|0,(c[g>>2]|0)+8|0,c[h>>2]|0);i=j;return}else{c[c[h>>2]>>2]=a;i=j;return}}function _J(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;d=h+24|0;e=h+20|0;f=h;g=h+16|0;c[d>>2]=a;c[e>>2]=b;c[g>>2]=f;while(1){a=c[d>>2]|0;if(!((c[d>>2]|0)!=0?(c[e>>2]|0)!=0:0))break;k=c[a+4>>2]|0;b=c[e>>2]|0;j=c[b+4>>2]|0;if((k|0)<(j|0)|((k|0)==(j|0)?(c[a>>2]|0)>>>0<(c[b>>2]|0)>>>0:0)){c[(c[g>>2]|0)+8>>2]=c[d>>2];c[d>>2]=c[(c[d>>2]|0)+8>>2];c[g>>2]=c[(c[g>>2]|0)+8>>2];continue}j=c[e>>2]|0;a=c[j+4>>2]|0;k=c[d>>2]|0;b=c[k+4>>2]|0;if((a|0)<(b|0)|((a|0)==(b|0)?(c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0:0)){c[(c[g>>2]|0)+8>>2]=c[e>>2];c[e>>2]=c[(c[e>>2]|0)+8>>2];c[g>>2]=c[(c[g>>2]|0)+8>>2];continue}else{c[d>>2]=c[(c[d>>2]|0)+8>>2];continue}}if(a){c[(c[g>>2]|0)+8>>2]=c[d>>2];k=f+8|0;k=c[k>>2]|0;i=h;return k|0}else{c[(c[g>>2]|0)+8>>2]=c[e>>2];k=f+8|0;k=c[k>>2]|0;i=h;return k|0}return 0}function $J(a){a=a|0;var d=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+8|0;f=h+4|0;g=h;c[f>>2]=a;do if(!(e[(c[f>>2]|0)+24>>1]|0)){c[g>>2]=Fw(c[(c[f>>2]|0)+4>>2]|0,1016,0)|0;if(c[g>>2]|0){c[c[g>>2]>>2]=c[c[f>>2]>>2];c[c[f>>2]>>2]=c[g>>2];c[(c[f>>2]|0)+16>>2]=(c[g>>2]|0)+8;b[(c[f>>2]|0)+24>>1]=63;break}c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}while(0);a=(c[f>>2]|0)+24|0;b[a>>1]=(b[a>>1]|0)+-1<<16>>16;a=(c[f>>2]|0)+16|0;g=c[a>>2]|0;c[a>>2]=g+16;c[d>>2]=g;g=c[d>>2]|0;i=h;return g|0}function aK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;e=j+16|0;f=j+12|0;g=j+8|0;h=j+4|0;d=j;c[f>>2]=a;c[g>>2]=b;if(!(c[c[f>>2]>>2]|0)){c[e>>2]=0;h=c[e>>2]|0;i=j;return h|0}b=c[f>>2]|0;if((c[g>>2]|0)==1){c[h>>2]=c[b>>2];c[c[f>>2]>>2]=c[(c[h>>2]|0)+8>>2];c[(c[h>>2]|0)+8>>2]=0;c[(c[h>>2]|0)+12>>2]=0;c[e>>2]=c[h>>2];h=c[e>>2]|0;i=j;return h|0}c[d>>2]=aK(b,(c[g>>2]|0)-1|0)|0;c[h>>2]=c[c[f>>2]>>2];b=c[d>>2]|0;if(!(c[h>>2]|0)){c[e>>2]=b;h=c[e>>2]|0;i=j;return h|0}else{c[(c[h>>2]|0)+12>>2]=b;c[c[f>>2]>>2]=c[(c[h>>2]|0)+8>>2];g=aK(c[f>>2]|0,(c[g>>2]|0)-1|0)|0;c[(c[h>>2]|0)+8>>2]=g;c[e>>2]=c[h>>2];h=c[e>>2]|0;i=j;return h|0}return 0}function bK(a){a=a|0;var d=0,f=0;f=i;i=i+16|0;d=f;c[d>>2]=a;if(!((e[(c[d>>2]|0)+26>>1]|0)&1)){a=XJ(c[(c[d>>2]|0)+8>>2]|0)|0;c[(c[d>>2]|0)+8>>2]=a}a=(c[d>>2]|0)+26|0;b[a>>1]=e[a>>1]|0|2;i=f;return}function cK(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;g=i;i=i+16|0;j=g+12|0;k=g+8|0;h=g+4|0;f=g;c[j>>2]=a;c[k>>2]=d;c[h>>2]=e;c[f>>2]=c[k>>2];c[c[f>>2]>>2]=0;c[(c[f>>2]|0)+4>>2]=c[j>>2];c[(c[f>>2]|0)+8>>2]=0;c[(c[f>>2]|0)+12>>2]=0;c[(c[f>>2]|0)+20>>2]=0;c[(c[f>>2]|0)+16>>2]=(c[f>>2]|0)+32;b[(c[f>>2]|0)+24>>1]=(((c[h>>2]|0)-32|0)>>>0)/16|0;b[(c[f>>2]|0)+26>>1]=1;c[(c[f>>2]|0)+28>>2]=0;i=g;return c[f>>2]|0}function dK(b,e){b=b|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;h=f+4|0;g=f;c[h>>2]=b;c[g>>2]=e;b=(c[(c[h>>2]|0)+8>>2]|0)+(((c[g>>2]|0)>>>0)/8|0)|0;a[b>>0]=d[b>>0]|0|1<<(c[g>>2]&7);i=f;return}function eK(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+80|0;o=x+32|0;p=x+24|0;w=x+16|0;v=x;q=x+76|0;h=x+72|0;r=x+68|0;s=x+64|0;j=x+60|0;t=x+56|0;u=x+52|0;n=x+48|0;m=x+44|0;l=x+40|0;k=x+36|0;c[q>>2]=b;c[h>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=c[s>>2];c[u>>2]=c[r>>2];while(1){b=c[s>>2]|0;c[s>>2]=b+-1;if((b|0)<=0){g=25;break}if(!(c[(c[q>>2]|0)+16>>2]|0)){g=25;break}f=c[q>>2]|0;if((c[r>>2]|0)<1){g=5;break}if(jK(f,c[r>>2]|0)|0){g=25;break}if(sg(c[(c[q>>2]|0)+4>>2]|0,c[r>>2]|0,n,0)|0){g=8;break}c[m>>2]=tg(c[n>>2]|0)|0;do if(!(c[h>>2]|0)){if((c[s>>2]|0)>0?(d[(c[c[q>>2]>>2]|0)+17>>0]|0)!=0:0){c[j>>2]=$q(c[m>>2]|0)|0;fK(c[q>>2]|0,c[j>>2]|0,4,c[r>>2]|0)}}else{c[l>>2]=$q((c[m>>2]|0)+4|0)|0;if(a[(c[c[q>>2]>>2]|0)+17>>0]|0)fK(c[q>>2]|0,c[r>>2]|0,2,0);if((c[l>>2]|0)>(((c[(c[c[q>>2]>>2]|0)+36>>2]|0)/4|0)-2|0)){b=c[q>>2]|0;c[p>>2]=c[r>>2];iK(b,43167,p);c[s>>2]=(c[s>>2]|0)+-1;break}c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[l>>2]|0))break;c[k>>2]=$q((c[m>>2]|0)+(8+(c[j>>2]<<2))|0)|0;if(a[(c[c[q>>2]>>2]|0)+17>>0]|0)fK(c[q>>2]|0,c[k>>2]|0,2,0);jK(c[q>>2]|0,c[k>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+1}c[s>>2]=(c[s>>2]|0)-(c[l>>2]|0)}while(0);c[r>>2]=$q(c[m>>2]|0)|0;vg(c[n>>2]|0);if(!(c[h>>2]|0))continue;if((c[s>>2]|0)>=((c[r>>2]|0)!=0|0))continue;iK(c[q>>2]|0,43206,o)}if((g|0)==5){t=c[t>>2]|0;w=c[u>>2]|0;c[v>>2]=(c[s>>2]|0)+1;c[v+4>>2]=t;c[v+8>>2]=w;iK(f,43088,v);i=x;return}else if((g|0)==8){v=c[q>>2]|0;c[w>>2]=c[r>>2];iK(v,43145,w);i=x;return}else if((g|0)==25){i=x;return}}function fK(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;q=r+8|0;p=r;h=r+44|0;j=r+40|0;k=r+49|0;l=r+36|0;o=r+32|0;m=r+48|0;n=r+28|0;c[h>>2]=b;c[j>>2]=e;a[k>>0]=f;c[l>>2]=g;c[o>>2]=mF(c[c[h>>2]>>2]|0,c[j>>2]|0,m,n)|0;if(c[o>>2]|0){if((c[o>>2]|0)==7|(c[o>>2]|0)==3082)c[(c[h>>2]|0)+24>>2]=1;q=c[h>>2]|0;c[p>>2]=c[j>>2];iK(q,43005,p);i=r;return}if((d[m>>0]|0|0)==(d[k>>0]|0|0)?(c[n>>2]|0)==(c[l>>2]|0):0){i=r;return}p=c[h>>2]|0;e=d[k>>0]|0;g=c[l>>2]|0;b=d[m>>0]|0;o=c[n>>2]|0;c[q>>2]=c[j>>2];c[q+4>>2]=e;c[q+8>>2]=g;c[q+12>>2]=b;c[q+16>>2]=o;iK(p,43034,q);i=r;return}function gK(b,f,g,h,j){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ca=i;i=i+256|0;Z=ca+96|0;Y=ca+88|0;X=ca+80|0;W=ca+72|0;$=ca+64|0;_=ca+48|0;m=ca+40|0;l=ca+32|0;n=ca+240|0;o=ca+236|0;p=ca+232|0;q=ca+228|0;r=ca+24|0;K=ca+224|0;A=ca+220|0;k=ca+216|0;w=ca+212|0;u=ca+208|0;M=ca+204|0;F=ca+200|0;y=ca+196|0;s=ca+192|0;E=ca+188|0;x=ca+184|0;D=ca+180|0;v=ca+176|0;I=ca+172|0;J=ca+168|0;H=ca+164|0;L=ca+160|0;V=ca+156|0;t=ca+152|0;z=ca+148|0;aa=ca+144|0;O=ca+140|0;S=ca+136|0;Q=ca+132|0;R=ca+128|0;P=ca+244|0;B=ca;G=ca+124|0;N=ca+120|0;T=ca+116|0;U=ca+112|0;C=ca+108|0;c[o>>2]=b;c[p>>2]=f;c[q>>2]=g;g=r;c[g>>2]=h;c[g+4>>2]=j;c[K>>2]=0;c[w>>2]=-1;c[x>>2]=1;c[D>>2]=1;c[z>>2]=0;c[O>>2]=0;c[S>>2]=c[(c[o>>2]|0)+28>>2];c[Q>>2]=c[(c[o>>2]|0)+32>>2];c[R>>2]=c[(c[o>>2]|0)+36>>2];a[P>>0]=0;c[H>>2]=c[c[o>>2]>>2];c[V>>2]=c[(c[H>>2]|0)+36>>2];if(!(c[p>>2]|0)){c[n>>2]=0;ba=c[n>>2]|0;i=ca;return ba|0}if(jK(c[o>>2]|0,c[p>>2]|0)|0){c[n>>2]=0;ba=c[n>>2]|0;i=ca;return ba|0}c[(c[o>>2]|0)+28>>2]=42625;c[(c[o>>2]|0)+32>>2]=c[p>>2];g=nF(c[H>>2]|0,c[p>>2]|0,K,0)|0;c[k>>2]=g;do if(!g){a[P>>0]=a[c[K>>2]>>0]|0;a[c[K>>2]>>0]=0;l=Kt(c[K>>2]|0)|0;c[k>>2]=l;if(l){ba=c[o>>2]|0;c[m>>2]=c[k>>2];iK(ba,42673,m);break}c[v>>2]=c[(c[K>>2]|0)+56>>2];c[y>>2]=d[(c[K>>2]|0)+5>>0];c[(c[o>>2]|0)+28>>2]=42711;c[t>>2]=((d[(c[v>>2]|0)+((c[y>>2]|0)+5)>>0]<<8|d[(c[v>>2]|0)+((c[y>>2]|0)+5)+1>>0])-1&65535)+1;c[E>>2]=d[(c[v>>2]|0)+((c[y>>2]|0)+3)>>0]<<8|d[(c[v>>2]|0)+((c[y>>2]|0)+3)+1>>0];c[s>>2]=(c[y>>2]|0)+12-(d[(c[K>>2]|0)+4>>0]<<2);c[J>>2]=(c[v>>2]|0)+((c[s>>2]|0)+((c[E>>2]|0)-1<<1));if(a[(c[K>>2]|0)+4>>0]|0){c[z>>2]=c[(c[o>>2]|0)+68>>2];c[c[z>>2]>>2]=0}else{c[M>>2]=$q((c[v>>2]|0)+((c[y>>2]|0)+8)|0)|0;if(a[(c[H>>2]|0)+17>>0]|0){c[(c[o>>2]|0)+28>>2]=42737;fK(c[o>>2]|0,c[M>>2]|0,5,c[p>>2]|0)}m=r;c[w>>2]=gK(c[o>>2]|0,c[M>>2]|0,r,c[m>>2]|0,c[m+4>>2]|0)|0;c[D>>2]=0}c[A>>2]=(c[E>>2]|0)-1;while(1){if((c[A>>2]|0)<0)break;if(!(c[(c[o>>2]|0)+16>>2]|0))break;c[(c[o>>2]|0)+36>>2]=c[A>>2];c[L>>2]=d[c[J>>2]>>0]<<8|d[(c[J>>2]|0)+1>>0];c[J>>2]=(c[J>>2]|0)+-2;do if((c[L>>2]|0)>>>0>=(c[t>>2]|0)>>>0?(c[L>>2]|0)>>>0<=((c[V>>2]|0)-4|0)>>>0:0){c[I>>2]=(c[v>>2]|0)+(c[L>>2]|0);Ub[c[(c[K>>2]|0)+80>>2]&255](c[K>>2]|0,c[I>>2]|0,B);if(((c[L>>2]|0)+(e[B+18>>1]|0)|0)>>>0>(c[V>>2]|0)>>>0){iK(c[o>>2]|0,42795,$);c[x>>2]=0;break}if(a[(c[K>>2]|0)+2>>0]|0){j=B;h=c[j>>2]|0;j=c[j+4>>2]|0;b=r;f=c[b>>2]|0;b=c[b+4>>2]|0;if(c[D>>2]|0){if((j|0)>(b|0)|(j|0)==(b|0)&h>>>0>f>>>0)ba=26}else if((j|0)>(b|0)|(j|0)==(b|0)&h>>>0>=f>>>0)ba=26;if((ba|0)==26){ba=0;m=c[o>>2]|0;g=B;k=c[g+4>>2]|0;l=W;c[l>>2]=c[g>>2];c[l+4>>2]=k;iK(m,42819,W)}k=B;l=c[k+4>>2]|0;m=r;c[m>>2]=c[k>>2];c[m+4>>2]=l}if((c[B+12>>2]|0)>>>0>(e[B+16>>1]|0)>>>0){c[G>>2]=(((c[B+12>>2]|0)-(e[B+16>>1]|0)+(c[V>>2]|0)-5|0)>>>0)/(((c[V>>2]|0)-4|0)>>>0)|0;c[N>>2]=$q((c[I>>2]|0)+((e[B+18>>1]|0)-4)|0)|0;if(a[(c[H>>2]|0)+17>>0]|0)fK(c[o>>2]|0,c[N>>2]|0,3,c[p>>2]|0);eK(c[o>>2]|0,0,c[N>>2]|0,c[G>>2]|0)}if(a[(c[K>>2]|0)+4>>0]|0){kK(c[z>>2]|0,c[L>>2]<<16|(c[L>>2]|0)+(e[B+18>>1]|0)-1);break}c[M>>2]=$q(c[I>>2]|0)|0;if(a[(c[H>>2]|0)+17>>0]|0)fK(c[o>>2]|0,c[M>>2]|0,5,c[p>>2]|0);m=r;c[u>>2]=gK(c[o>>2]|0,c[M>>2]|0,r,c[m>>2]|0,c[m+4>>2]|0)|0;c[D>>2]=0;if((c[u>>2]|0)!=(c[w>>2]|0)){iK(c[o>>2]|0,42843,X);c[w>>2]=c[u>>2]}}else ba=19;while(0);if((ba|0)==19){ba=0;m=c[o>>2]|0;k=c[t>>2]|0;l=(c[V>>2]|0)-4|0;c[_>>2]=c[L>>2];c[_+4>>2]=k;c[_+8>>2]=l;iK(m,42765,_);c[x>>2]=0}c[A>>2]=(c[A>>2]|0)+-1}X=r;_=c[X+4>>2]|0;$=c[q>>2]|0;c[$>>2]=c[X>>2];c[$+4>>2]=_;c[(c[o>>2]|0)+28>>2]=0;if((c[x>>2]|0)!=0?(c[(c[o>>2]|0)+16>>2]|0)>0:0){a:do if(!(a[(c[K>>2]|0)+4>>0]|0)){c[z>>2]=c[(c[o>>2]|0)+68>>2];c[c[z>>2]>>2]=0;c[A>>2]=(c[E>>2]|0)-1;while(1){if((c[A>>2]|0)<0)break a;c[L>>2]=d[(c[v>>2]|0)+((c[s>>2]|0)+(c[A>>2]<<1))>>0]<<8|d[(c[v>>2]|0)+((c[s>>2]|0)+(c[A>>2]<<1))+1>>0];c[T>>2]=(Yb[c[(c[K>>2]|0)+76>>2]&255](c[K>>2]|0,(c[v>>2]|0)+(c[L>>2]|0)|0)|0)&65535;kK(c[z>>2]|0,c[L>>2]<<16|(c[L>>2]|0)+(c[T>>2]|0)-1);c[A>>2]=(c[A>>2]|0)+-1}}while(0);c[A>>2]=d[(c[v>>2]|0)+((c[y>>2]|0)+1)>>0]<<8|d[(c[v>>2]|0)+((c[y>>2]|0)+1)+1>>0];while(1){if((c[A>>2]|0)<=0)break;c[U>>2]=d[(c[v>>2]|0)+((c[A>>2]|0)+2)>>0]<<8|d[(c[v>>2]|0)+((c[A>>2]|0)+2)+1>>0];kK(c[z>>2]|0,c[A>>2]<<16|(c[A>>2]|0)+(c[U>>2]|0)-1);c[C>>2]=d[(c[v>>2]|0)+(c[A>>2]|0)>>0]<<8|d[(c[v>>2]|0)+(c[A>>2]|0)+1>>0];c[A>>2]=c[C>>2]}c[F>>2]=0;c[O>>2]=(c[t>>2]|0)-1;while(1){if(!(lK(c[z>>2]|0,aa)|0))break;if((c[O>>2]&65535)>>>0>=(c[aa>>2]|0)>>>16>>>0){ba=51;break}c[F>>2]=(c[F>>2]|0)+(((c[aa>>2]|0)>>>16)-(c[O>>2]&65535)-1);c[O>>2]=c[aa>>2]}if((ba|0)==51){ba=c[o>>2]|0;$=c[p>>2]|0;c[Y>>2]=(c[aa>>2]|0)>>>16;c[Y+4>>2]=$;iK(ba,42868,Y)}c[F>>2]=(c[F>>2]|0)+((c[V>>2]|0)-(c[O>>2]&65535)-1);if((c[c[z>>2]>>2]|0)==0?(c[F>>2]|0)!=(d[(c[v>>2]|0)+((c[y>>2]|0)+7)>>0]|0):0){ba=c[o>>2]|0;$=d[(c[v>>2]|0)+((c[y>>2]|0)+7)>>0]|0;aa=c[p>>2]|0;c[Z>>2]=c[F>>2];c[Z+4>>2]=$;c[Z+8>>2]=aa;iK(ba,42905,Z)}}}else{ba=c[o>>2]|0;c[l>>2]=c[k>>2];iK(ba,42635,l)}while(0);if(!(c[x>>2]|0))a[c[K>>2]>>0]=a[P>>0]|0;qB(c[K>>2]|0);c[(c[o>>2]|0)+28>>2]=c[S>>2];c[(c[o>>2]|0)+32>>2]=c[Q>>2];c[(c[o>>2]|0)+36>>2]=c[R>>2];c[n>>2]=(c[w>>2]|0)+1;ba=c[n>>2]|0;i=ca;return ba|0}function hK(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g+4|0;e=g;c[f>>2]=a;c[e>>2]=b;i=g;return(d[(c[(c[f>>2]|0)+8>>2]|0)+(((c[e>>2]|0)>>>0)/8|0)>>0]|0)&1<<(c[e>>2]&7)|0}function iK(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k;f=k+28|0;g=k+24|0;h=k+8|0;c[f>>2]=a;c[g>>2]=b;if(!(c[(c[f>>2]|0)+16>>2]|0)){i=k;return}b=(c[f>>2]|0)+16|0;c[b>>2]=(c[b>>2]|0)+-1;b=(c[f>>2]|0)+20|0;c[b>>2]=(c[b>>2]|0)+1;c[h>>2]=e;if(c[(c[f>>2]|0)+40+12>>2]|0)aA((c[f>>2]|0)+40|0,42623,1);if(c[(c[f>>2]|0)+28>>2]|0){e=(c[f>>2]|0)+40|0;b=c[(c[f>>2]|0)+28>>2]|0;a=c[(c[f>>2]|0)+36>>2]|0;c[j>>2]=c[(c[f>>2]|0)+32>>2];c[j+4>>2]=a;$z(e,b,j)}dg((c[f>>2]|0)+40|0,c[g>>2]|0,h);if((d[(c[f>>2]|0)+40+24>>0]|0|0)!=1){i=k;return}c[(c[f>>2]|0)+24>>2]=1;i=k;return}function jK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;h=j+8|0;e=j;g=j+20|0;d=j+16|0;f=j+12|0;c[d>>2]=a;c[f>>2]=b;do if(c[f>>2]|0){b=c[d>>2]|0;a=c[f>>2]|0;if((c[f>>2]|0)>>>0>(c[(c[d>>2]|0)+12>>2]|0)>>>0){c[e>>2]=a;iK(b,42957,e);c[g>>2]=1;break}e=(hK(b,a)|0)!=0;a=c[d>>2]|0;b=c[f>>2]|0;if(e){c[h>>2]=b;iK(a,42980,h);c[g>>2]=1;break}else{dK(a,b);c[g>>2]=0;break}}else c[g>>2]=1;while(0);i=j;return c[g>>2]|0}function kK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;g=h+4|0;f=h;c[d>>2]=a;c[e>>2]=b;a=c[d>>2]|0;b=(c[a>>2]|0)+1|0;c[a>>2]=b;c[f>>2]=b;c[(c[d>>2]|0)+(c[f>>2]<<2)>>2]=c[e>>2];while(1){b=((c[f>>2]|0)>>>0)/2|0;c[g>>2]=b;if(b>>>0<=0){d=5;break}if((c[(c[d>>2]|0)+(c[g>>2]<<2)>>2]|0)>>>0<=(c[(c[d>>2]|0)+(c[f>>2]<<2)>>2]|0)>>>0){d=5;break}c[e>>2]=c[(c[d>>2]|0)+(c[g>>2]<<2)>>2];c[(c[d>>2]|0)+(c[g>>2]<<2)>>2]=c[(c[d>>2]|0)+(c[f>>2]<<2)>>2];c[(c[d>>2]|0)+(c[f>>2]<<2)>>2]=c[e>>2];c[f>>2]=c[g>>2]}if((d|0)==5){i=h;return}}function lK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;d=k+20|0;e=k+16|0;f=k+12|0;h=k+8|0;g=k+4|0;j=k;c[e>>2]=a;c[f>>2]=b;b=c[c[e>>2]>>2]|0;c[j>>2]=b;if(!b){c[d>>2]=0;j=c[d>>2]|0;i=k;return j|0}c[c[f>>2]>>2]=c[(c[e>>2]|0)+4>>2];c[(c[e>>2]|0)+4>>2]=c[(c[e>>2]|0)+(c[j>>2]<<2)>>2];c[(c[e>>2]|0)+(c[j>>2]<<2)>>2]=-1;b=c[e>>2]|0;c[b>>2]=(c[b>>2]|0)+-1;c[g>>2]=1;while(1){b=c[g>>2]<<1;c[h>>2]=b;if(b>>>0>(c[c[e>>2]>>2]|0)>>>0)break;if((c[(c[e>>2]|0)+(c[h>>2]<<2)>>2]|0)>>>0>(c[(c[e>>2]|0)+((c[h>>2]|0)+1<<2)>>2]|0)>>>0)c[h>>2]=(c[h>>2]|0)+1;if((c[(c[e>>2]|0)+(c[g>>2]<<2)>>2]|0)>>>0<(c[(c[e>>2]|0)+(c[h>>2]<<2)>>2]|0)>>>0)break;c[j>>2]=c[(c[e>>2]|0)+(c[g>>2]<<2)>>2];c[(c[e>>2]|0)+(c[g>>2]<<2)>>2]=c[(c[e>>2]|0)+(c[h>>2]<<2)>>2];c[(c[e>>2]|0)+(c[h>>2]<<2)>>2]=c[j>>2];c[g>>2]=c[h>>2]}c[d>>2]=1;j=c[d>>2]|0;i=k;return j|0}function mK(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(!(c[b>>2]|0)){a=c[b>>2]|0;Kd(a);i=e;return}c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[c[b>>2]>>2]|0))break;qK((c[(c[b>>2]|0)+12>>2]|0)+((c[d>>2]|0)*56|0)|0);c[d>>2]=(c[d>>2]|0)+1}a=c[b>>2]|0;Kd(a);i=e;return}function nK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[f>>2]=a;c[d>>2]=b;Sf(c[f>>2]|0,c[(c[d>>2]|0)+12>>2]|0);oK(0,c[(c[d>>2]|0)+16>>2]|0);if(c[(c[d>>2]|0)+40>>2]|0)pK(c[(c[d>>2]|0)+40>>2]|0)|0;if(!(c[(c[d>>2]|0)+56>>2]|0)){d=c[d>>2]|0;a=d+72|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(a|0));i=e;return}pK(c[(c[d>>2]|0)+56>>2]|0)|0;d=c[d>>2]|0;a=d+72|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(a|0));i=e;return}function oK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+12|0;h=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[h>>2]=b;c[e>>2]=c[h>>2];while(1){if(!(c[e>>2]|0))break;c[f>>2]=c[(c[e>>2]|0)+4>>2];Sf(c[d>>2]|0,c[e>>2]|0);c[e>>2]=c[f>>2]}i=g;return}function pK(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=0;c[b>>2]=hr(c[e>>2]|0)|0;Kd(c[e>>2]|0);i=d;return c[b>>2]|0}function qK(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;Kd(c[(c[b>>2]|0)+28>>2]|0);Kd(c[(c[b>>2]|0)+36>>2]|0);if(c[(c[b>>2]|0)+44>>2]|0)Cs(c[(c[b>>2]|0)+24>>2]|0,0,0,c[(c[b>>2]|0)+44>>2]|0)|0;rK(c[(c[b>>2]|0)+48>>2]|0);b=c[b>>2]|0;a=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));i=d;return}function rK(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(!(c[b>>2]|0)){i=d;return}mK(c[(c[b>>2]|0)+4>>2]|0);Kd(c[b>>2]|0);i=d;return}function sK(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;h=m+16|0;j=m;k=m+12|0;l=m+8|0;c[h>>2]=b;b=j;c[b>>2]=e;c[b+4>>2]=f;c[k>>2]=g;if(!(d[(c[h>>2]|0)+11>>0]|0)){i=m;return}a[(c[h>>2]|0)+11>>0]=0;c[l>>2]=c[(c[(c[h>>2]|0)+4>>2]|0)+8>>2];while(1){if(!(c[l>>2]|0))break;do if((d[(c[l>>2]|0)+64>>0]|0)&16){a[(c[h>>2]|0)+11>>0]=1;if((c[k>>2]|0)==0?(g=(c[l>>2]|0)+16|0,b=j,!((c[g>>2]|0)==(c[b>>2]|0)?(c[g+4>>2]|0)==(c[b+4>>2]|0):0)):0)break;a[(c[l>>2]|0)+66>>0]=0}while(0);c[l>>2]=c[(c[l>>2]|0)+8>>2]}i=m;return}function tK(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+48|0;p=u+36|0;k=u+32|0;j=u+28|0;q=u+24|0;l=u+20|0;s=u+16|0;t=u+12|0;n=u+8|0;m=u+4|0;r=u;o=u+40|0;c[k>>2]=b;c[j>>2]=f;c[q>>2]=g;c[l>>2]=h;h=c[j>>2]|0;if(h>>>0>($E(c[k>>2]|0)|0)>>>0){c[p>>2]=Lj(64010)|0;t=c[p>>2]|0;i=u;return t|0}c[t>>2]=_E(c[k>>2]|0,c[j>>2]|0,s,0,0)|0;if(c[t>>2]|0){c[p>>2]=c[t>>2];t=c[p>>2]|0;i=u;return t|0}a:do if(!(a[(c[s>>2]|0)+8>>0]|0)){a[(c[s>>2]|0)+8>>0]=1;c[r>>2]=d[(c[s>>2]|0)+5>>0];c[m>>2]=0;while(1){j=c[s>>2]|0;if((c[m>>2]|0)>=(e[(c[s>>2]|0)+18>>1]|0))break;c[n>>2]=(c[j+56>>2]|0)+(e[(c[s>>2]|0)+20>>1]&(d[(c[(c[s>>2]|0)+64>>2]|0)+(c[m>>2]<<1)>>0]<<8|d[(c[(c[s>>2]|0)+64>>2]|0)+(c[m>>2]<<1)+1>>0]));if((a[(c[s>>2]|0)+4>>0]|0)==0?(f=c[k>>2]|0,h=$q(c[n>>2]|0)|0,c[t>>2]=tK(f,h,1,c[l>>2]|0)|0,(c[t>>2]|0)!=0):0)break a;c[t>>2]=uK(c[s>>2]|0,c[n>>2]|0,o)|0;if(c[t>>2]|0)break a;c[m>>2]=(c[m>>2]|0)+1}if(a[j+4>>0]|0){if(c[l>>2]|0){o=c[l>>2]|0;c[o>>2]=(c[o>>2]|0)+(e[(c[s>>2]|0)+18>>1]|0)}}else{n=c[k>>2]|0;o=$q((c[(c[s>>2]|0)+56>>2]|0)+((c[r>>2]|0)+8)|0)|0;c[t>>2]=tK(n,o,1,c[l>>2]|0)|0;if(c[t>>2]|0)break}j=c[s>>2]|0;if(c[q>>2]|0){vK(j,t);break}q=Dg(c[j+72>>2]|0)|0;c[t>>2]=q;if(!q)wK(c[s>>2]|0,d[(c[(c[s>>2]|0)+56>>2]|0)+(c[r>>2]|0)>>0]|8)}else c[t>>2]=Lj(64015)|0;while(0);a[(c[s>>2]|0)+8>>0]=0;qB(c[s>>2]|0);c[p>>2]=c[t>>2];t=c[p>>2]|0;i=u;return t|0}function uK(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+80|0;g=t+64|0;h=t+60|0;j=t+56|0;u=t+52|0;p=t+48|0;l=t;o=t+44|0;r=t+40|0;m=t+36|0;n=t+32|0;k=t+28|0;q=t+24|0;c[h>>2]=a;c[j>>2]=d;c[u>>2]=f;c[p>>2]=c[(c[h>>2]|0)+52>>2];Ub[c[(c[h>>2]|0)+80>>2]&255](c[h>>2]|0,c[j>>2]|0,l);b[c[u>>2]>>1]=b[l+18>>1]|0;if((e[l+16>>1]|0|0)==(c[l+12>>2]|0)){c[g>>2]=0;u=c[g>>2]|0;i=t;return u|0}if(((c[j>>2]|0)+(e[l+18>>1]|0)+-1|0)>>>0>((c[(c[h>>2]|0)+56>>2]|0)+(e[(c[h>>2]|0)+20>>1]|0)|0)>>>0){c[g>>2]=Lj(61571)|0;u=c[g>>2]|0;i=t;return u|0}c[o>>2]=$q((c[j>>2]|0)+(e[l+18>>1]|0)+-4|0)|0;c[n>>2]=(c[(c[p>>2]|0)+36>>2]|0)-4;c[m>>2]=(((c[l+12>>2]|0)-(e[l+16>>1]|0)+(c[n>>2]|0)-1|0)>>>0)/((c[n>>2]|0)>>>0)|0;while(1){u=c[m>>2]|0;c[m>>2]=u+-1;if(!u){s=23;break}c[k>>2]=0;c[q>>2]=0;if((c[o>>2]|0)>>>0<2){s=9;break}u=c[o>>2]|0;if(u>>>0>($E(c[p>>2]|0)|0)>>>0){s=9;break}if((c[m>>2]|0)!=0?(c[r>>2]=kF(c[p>>2]|0,c[o>>2]|0,q,k)|0,(c[r>>2]|0)!=0):0){s=12;break}if((c[q>>2]|0)==0?(u=zK(c[p>>2]|0,c[o>>2]|0)|0,c[q>>2]=u,(u|0)==0):0)s=17;else if((Jt(c[(c[q>>2]|0)+72>>2]|0)|0)!=1)c[r>>2]=Lj(61607)|0;else s=17;if((s|0)==17){s=0;c[r>>2]=xK(c[p>>2]|0,c[q>>2]|0,c[o>>2]|0)|0}if(c[q>>2]|0)vg(c[(c[q>>2]|0)+72>>2]|0);if(c[r>>2]|0){s=21;break}c[o>>2]=c[k>>2]}if((s|0)==9){c[g>>2]=Lj(61587)|0;u=c[g>>2]|0;i=t;return u|0}else if((s|0)==12){c[g>>2]=c[r>>2];u=c[g>>2]|0;i=t;return u|0}else if((s|0)==21){c[g>>2]=c[r>>2];u=c[g>>2]|0;i=t;return u|0}else if((s|0)==23){c[g>>2]=0;u=c[g>>2]|0;i=t;return u|0}return 0}function vK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(c[c[e>>2]>>2]|0){i=f;return}b=xK(c[(c[d>>2]|0)+52>>2]|0,c[d>>2]|0,c[(c[d>>2]|0)+84>>2]|0)|0;c[c[e>>2]>>2]=b;i=f;return}function wK(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+12|0;j=o+8|0;k=o+4|0;n=o;m=o+18|0;l=o+16|0;c[h>>2]=f;c[j>>2]=g;c[k>>2]=c[(c[h>>2]|0)+56>>2];c[n>>2]=c[(c[h>>2]|0)+52>>2];a[m>>0]=a[(c[h>>2]|0)+5>>0]|0;if((e[(c[n>>2]|0)+22>>1]|0)&4)kR((c[k>>2]|0)+(d[m>>0]|0)|0,0,(c[(c[n>>2]|0)+36>>2]|0)-(d[m>>0]|0)|0)|0;a[(c[k>>2]|0)+(d[m>>0]|0)>>0]=c[j>>2];b[l>>1]=(d[m>>0]|0)+((c[j>>2]&8|0)==0?12:8);f=(c[k>>2]|0)+((d[m>>0]|0)+1)|0;a[f>>0]=0;a[f+1>>0]=0;a[f+2>>0]=0;a[f+3>>0]=0;a[(c[k>>2]|0)+((d[m>>0]|0)+7)>>0]=0;a[(c[k>>2]|0)+((d[m>>0]|0)+5)>>0]=(c[(c[n>>2]|0)+36>>2]|0)>>>8;a[(c[k>>2]|0)+((d[m>>0]|0)+5)+1>>0]=c[(c[n>>2]|0)+36>>2];b[(c[h>>2]|0)+16>>1]=(c[(c[n>>2]|0)+36>>2]|0)-(e[l>>1]|0);Lt(c[h>>2]|0,c[j>>2]|0)|0;b[(c[h>>2]|0)+14>>1]=b[l>>1]|0;c[(c[h>>2]|0)+60>>2]=(c[k>>2]|0)+(c[(c[n>>2]|0)+36>>2]|0);c[(c[h>>2]|0)+64>>2]=(c[k>>2]|0)+(e[l>>1]|0);c[(c[h>>2]|0)+68>>2]=(c[k>>2]|0)+(d[(c[h>>2]|0)+6>>0]|0);a[(c[h>>2]|0)+1>>0]=0;b[(c[h>>2]|0)+20>>1]=(c[(c[n>>2]|0)+32>>2]|0)-1;b[(c[h>>2]|0)+18>>1]=0;a[c[h>>2]>>0]=1;i=o;return}function xK(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;g=s+40|0;h=s+36|0;j=s+32|0;k=s+28|0;q=s+24|0;l=s+20|0;p=s+16|0;o=s+12|0;r=s+8|0;m=s+4|0;n=s;c[h>>2]=b;c[j>>2]=d;c[k>>2]=f;c[q>>2]=0;c[l>>2]=0;c[p>>2]=c[(c[h>>2]|0)+12>>2];if((c[k>>2]|0)>>>0<2){c[g>>2]=Lj(61425)|0;r=c[g>>2]|0;i=s;return r|0}if(c[j>>2]|0){c[o>>2]=c[j>>2];yK(c[(c[o>>2]|0)+72>>2]|0)}else c[o>>2]=zK(c[h>>2]|0,c[k>>2]|0)|0;c[r>>2]=Dg(c[(c[p>>2]|0)+72>>2]|0)|0;do if(!(c[r>>2]|0)){c[m>>2]=$q((c[(c[p>>2]|0)+56>>2]|0)+36|0)|0;Xs((c[(c[p>>2]|0)+56>>2]|0)+36|0,(c[m>>2]|0)+1|0);if(e[(c[h>>2]|0)+22>>1]&4){if((c[o>>2]|0)==0?(d=nF(c[h>>2]|0,c[k>>2]|0,o,0)|0,c[r>>2]=d,(d|0)!=0):0)break;d=Dg(c[(c[o>>2]|0)+72>>2]|0)|0;c[r>>2]=d;if(d)break;kR(c[(c[o>>2]|0)+56>>2]|0,0,c[(c[(c[o>>2]|0)+52>>2]|0)+32>>2]|0)|0}if((a[(c[h>>2]|0)+17>>0]|0)!=0?(xJ(c[h>>2]|0,c[k>>2]|0,2,0,r),(c[r>>2]|0)!=0):0)break;if(c[m>>2]|0){c[l>>2]=$q((c[(c[p>>2]|0)+56>>2]|0)+32|0)|0;c[r>>2]=nF(c[h>>2]|0,c[l>>2]|0,q,0)|0;if(c[r>>2]|0)break;c[n>>2]=$q((c[(c[q>>2]|0)+56>>2]|0)+4|0)|0;if((c[n>>2]|0)>>>0>((((c[(c[h>>2]|0)+36>>2]|0)>>>0)/4|0)-2|0)>>>0){c[r>>2]=Lj(61478)|0;break}if((c[n>>2]|0)>>>0<((((c[(c[h>>2]|0)+36>>2]|0)>>>0)/4|0)-8|0)>>>0){c[r>>2]=Dg(c[(c[q>>2]|0)+72>>2]|0)|0;if(c[r>>2]|0)break;Xs((c[(c[q>>2]|0)+56>>2]|0)+4|0,(c[n>>2]|0)+1|0);Xs((c[(c[q>>2]|0)+56>>2]|0)+(8+(c[n>>2]<<2))|0,c[k>>2]|0);if((c[o>>2]|0)!=0?(e[(c[h>>2]|0)+22>>1]&4|0)==0:0)AK(c[(c[o>>2]|0)+72>>2]|0);c[r>>2]=BK(c[h>>2]|0,c[k>>2]|0)|0;break}}if((c[o>>2]|0)==0?(d=nF(c[h>>2]|0,c[k>>2]|0,o,0)|0,c[r>>2]=d,0!=(d|0)):0)break;c[r>>2]=Dg(c[(c[o>>2]|0)+72>>2]|0)|0;if(!(c[r>>2]|0)){Xs(c[(c[o>>2]|0)+56>>2]|0,c[l>>2]|0);Xs((c[(c[o>>2]|0)+56>>2]|0)+4|0,0);Xs((c[(c[p>>2]|0)+56>>2]|0)+32|0,c[k>>2]|0)}}while(0);if(c[o>>2]|0)a[c[o>>2]>>0]=0;qB(c[o>>2]|0);qB(c[q>>2]|0);c[g>>2]=c[r>>2];r=c[g>>2]|0;i=s;return r|0}function yK(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;CK(c[d>>2]|0);i=b;return}function zK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Zr(c[c[e>>2]>>2]|0,c[f>>2]|0)|0;if(c[g>>2]|0){c[d>>2]=aF(c[g>>2]|0,c[f>>2]|0,c[e>>2]|0)|0;b=c[d>>2]|0;i=h;return b|0}else{c[d>>2]=0;b=c[d>>2]|0;i=h;return b|0}return 0}function AK(a){a=a|0;var d=0,f=0,g=0;g=i;i=i+16|0;d=g+4|0;f=g;c[d>>2]=a;c[f>>2]=c[(c[d>>2]|0)+16>>2];if(!((e[(c[d>>2]|0)+24>>1]|0)&2)){i=g;return}if(c[(c[f>>2]|0)+104>>2]|0){i=g;return}a=(c[d>>2]|0)+24|0;b[a>>1]=e[a>>1]|0|32;a=(c[d>>2]|0)+24|0;b[a>>1]=(e[a>>1]|0)&-5;i=g;return}function BK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;if((c[(c[d>>2]|0)+60>>2]|0)==0?(b=fj(c[(c[d>>2]|0)+44>>2]|0)|0,c[(c[d>>2]|0)+60>>2]=b,(c[(c[d>>2]|0)+60>>2]|0)==0):0)c[f>>2]=7;if(c[f>>2]|0){f=c[f>>2]|0;i=g;return f|0}b=c[e>>2]|0;if(b>>>0>(jj(c[(c[d>>2]|0)+60>>2]|0)|0)>>>0){f=c[f>>2]|0;i=g;return f|0}c[f>>2]=gj(c[(c[d>>2]|0)+60>>2]|0,c[e>>2]|0)|0;f=c[f>>2]|0;i=g;return f|0}function CK(a){a=a|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;a=(c[e>>2]|0)+26|0;b[a>>1]=(b[a>>1]|0)+1<<16>>16;a=(c[(c[e>>2]|0)+28>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+1;i=d;return}function DK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;f=p+32|0;g=p+28|0;h=p+24|0;j=p+20|0;o=p+16|0;n=p+12|0;l=p+8|0;k=p+4|0;m=p;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[n>>2]=0;c[l>>2]=c[(c[g>>2]|0)+4>>2];if(c[(c[l>>2]|0)+8>>2]|0){c[f>>2]=262;o=c[f>>2]|0;i=p;return o|0}if((c[h>>2]|0)>>>0<2){c[f>>2]=Lj(64136)|0;o=c[f>>2]|0;i=p;return o|0}c[o>>2]=nF(c[l>>2]|0,c[h>>2]|0,n,0)|0;if(c[o>>2]|0){c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}c[o>>2]=QI(c[g>>2]|0,c[h>>2]|0,0)|0;if(c[o>>2]|0){qB(c[n>>2]|0);c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}c[c[j>>2]>>2]=0;if(a[(c[l>>2]|0)+17>>0]|0){ng(c[g>>2]|0,4,k);d=c[n>>2]|0;do if((c[h>>2]|0)==(c[k>>2]|0)){vK(d,o);qB(c[n>>2]|0);if(c[o>>2]|0){c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}}else{qB(d);c[o>>2]=nF(c[l>>2]|0,c[k>>2]|0,m,0)|0;if(c[o>>2]|0){c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}c[o>>2]=uJ(c[l>>2]|0,c[m>>2]|0,1,0,c[h>>2]|0,0)|0;qB(c[m>>2]|0);if(c[o>>2]|0){c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}c[m>>2]=0;c[o>>2]=nF(c[l>>2]|0,c[k>>2]|0,m,0)|0;vK(c[m>>2]|0,o);qB(c[m>>2]|0);if(!(c[o>>2]|0)){c[c[j>>2]>>2]=c[k>>2];break}c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}while(0);c[k>>2]=(c[k>>2]|0)+-1;while(1){if((c[k>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[l>>2]|0)+32>>2]|0)>>>0)|0)+1|0)?(n=lF(c[l>>2]|0,c[k>>2]|0)|0,(n|0)!=(c[k>>2]|0)):0)break;c[k>>2]=(c[k>>2]|0)+-1}c[o>>2]=yg(c[g>>2]|0,4,c[k>>2]|0)|0}else{vK(c[n>>2]|0,o);qB(c[n>>2]|0)}c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}function EK(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;a[(c[e>>2]|0)+56>>0]=1;b=FK((c[e>>2]|0)+64|0,(c[e>>2]|0)+36|0)|0;i=d;return b|0}function FK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+64|0;e=l+60|0;f=l+56|0;d=l+52|0;j=l+48|0;k=l;g=l+44|0;h=l+40|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=c[(c[(c[e>>2]|0)+8>>2]|0)+24>>2];c[j>>2]=0;b=k;a=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));if(!(c[(c[e>>2]|0)+40>>2]|0))c[j>>2]=GK(c[d>>2]|0,0,0,(c[e>>2]|0)+40|0)|0;if(!(c[j>>2]|0))c[j>>2]=HK(c[e>>2]|0,c[f>>2]|0)|0;if(c[j>>2]|0){k=c[j>>2]|0;i=l;return k|0}c[h>>2]=0;d=(c[e>>2]|0)+40+8|0;IK(c[(c[e>>2]|0)+40>>2]|0,k,c[(c[(c[e>>2]|0)+8>>2]|0)+12>>2]|0,c[d>>2]|0,c[d+4>>2]|0);d=(c[e>>2]|0)+28|0;c[d>>2]=(c[d>>2]|0)+1;d=c[(c[f>>2]|0)+8>>2]|0;JK(k,d,((d|0)<0)<<31>>31);c[g>>2]=c[c[f>>2]>>2];while(1){b=c[g>>2]|0;if(!(c[g>>2]|0))break;c[h>>2]=c[b+4>>2];d=c[c[g>>2]>>2]|0;JK(k,d,((d|0)<0)<<31>>31);KK(k,(c[g>>2]|0)+8|0,c[c[g>>2]>>2]|0);if(!(c[(c[f>>2]|0)+4>>2]|0))Kd(c[g>>2]|0);c[g>>2]=c[h>>2]}c[c[f>>2]>>2]=b;c[j>>2]=LK(k,(c[e>>2]|0)+40+8|0)|0;k=c[j>>2]|0;i=l;return k|0}function GK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+28|0;g=l+24|0;h=l+20|0;k=l+16|0;j=l;c[g>>2]=a;a=l+8|0;c[a>>2]=b;c[a+4>>2]=d;c[h>>2]=e;if(wi(202)|0){c[f>>2]=3338;k=c[f>>2]|0;i=l;return k|0}c[k>>2]=TK(c[c[g>>2]>>2]|0,0,c[h>>2]|0,4126,k)|0;if(!(c[k>>2]|0)){e=j;c[e>>2]=0;c[e+4>>2]=0;Js(c[c[h>>2]>>2]|0,18,j)}c[f>>2]=c[k>>2];k=c[f>>2]|0;i=l;return k|0}function HK(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+28|0;g=n+24|0;h=n+20|0;k=n+16|0;j=n+12|0;l=n+8|0;e=n+4|0;m=n;c[g>>2]=a;c[h>>2]=b;c[e>>2]=MK(c[g>>2]|0)|0;if(c[e>>2]|0){c[f>>2]=c[e>>2];m=c[f>>2]|0;i=n;return m|0}c[l>>2]=c[c[h>>2]>>2];e=NK(c[(c[g>>2]|0)+8>>2]|0)|0;c[(c[g>>2]|0)+32>>2]=e;c[j>>2]=ig(256,0)|0;if(!(c[j>>2]|0)){c[f>>2]=7;m=c[f>>2]|0;i=n;return m|0}while(1){if(!(c[l>>2]|0))break;b=c[l>>2]|0;do if(c[(c[h>>2]|0)+4>>2]|0)if((b|0)==(c[(c[h>>2]|0)+4>>2]|0)){c[m>>2]=0;break}else{c[m>>2]=(c[(c[h>>2]|0)+4>>2]|0)+(c[(c[l>>2]|0)+4>>2]|0);break}else c[m>>2]=c[b+4>>2];while(0);c[(c[l>>2]|0)+4>>2]=0;c[k>>2]=0;while(1){if(!(c[(c[j>>2]|0)+(c[k>>2]<<2)>>2]|0))break;OK(c[g>>2]|0,c[l>>2]|0,c[(c[j>>2]|0)+(c[k>>2]<<2)>>2]|0,l);c[(c[j>>2]|0)+(c[k>>2]<<2)>>2]=0;c[k>>2]=(c[k>>2]|0)+1}c[(c[j>>2]|0)+(c[k>>2]<<2)>>2]=c[l>>2];c[l>>2]=c[m>>2]}c[l>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>=64)break;OK(c[g>>2]|0,c[l>>2]|0,c[(c[j>>2]|0)+(c[k>>2]<<2)>>2]|0,l);c[k>>2]=(c[k>>2]|0)+1}c[c[h>>2]>>2]=c[l>>2];Kd(c[j>>2]|0);c[f>>2]=d[(c[(c[g>>2]|0)+12>>2]|0)+11>>0];m=c[f>>2]|0;i=n;return m|0}function IK(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,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+12|0;j=l+8|0;k=l;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;a=k;c[a>>2]=e;c[a+4>>2]=f;e=c[h>>2]|0;f=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));a=c[j>>2]|0;a=_f(a,((a|0)<0)<<31>>31)|0;c[(c[h>>2]|0)+4>>2]=a;if(c[(c[h>>2]|0)+4>>2]|0){b=k;a=c[j>>2]|0;a=qR(c[b>>2]|0,c[b+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;c[(c[h>>2]|0)+12>>2]=a;c[(c[h>>2]|0)+16>>2]=a;a=c[(c[h>>2]|0)+12>>2]|0;a=fR(c[k>>2]|0,c[k+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;k=(c[h>>2]|0)+24|0;c[k>>2]=a;c[k+4>>2]=C;c[(c[h>>2]|0)+8>>2]=c[j>>2];c[(c[h>>2]|0)+32>>2]=c[g>>2];i=l;return}else{c[c[h>>2]>>2]=7;i=l;return}}function JK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+32|0;h=e+12|0;j=e;f=e+8|0;g=e+16|0;c[h>>2]=a;a=j;c[a>>2]=b;c[a+4>>2]=d;a=j;c[f>>2]=kI(g,c[a>>2]|0,c[a+4>>2]|0)|0;KK(c[h>>2]|0,g,c[f>>2]|0);i=e;return}function KK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[j>>2]=c[g>>2];while(1){if((c[j>>2]|0)<=0){e=9;break}if(c[c[e>>2]>>2]|0){e=9;break}c[h>>2]=c[j>>2];if((c[h>>2]|0)>((c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+16>>2]|0)|0))c[h>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+16>>2]|0);iR((c[(c[e>>2]|0)+4>>2]|0)+(c[(c[e>>2]|0)+16>>2]|0)|0,(c[f>>2]|0)+((c[g>>2]|0)-(c[j>>2]|0))|0,c[h>>2]|0)|0;b=(c[e>>2]|0)+16|0;c[b>>2]=(c[b>>2]|0)+(c[h>>2]|0);if((c[(c[e>>2]|0)+16>>2]|0)==(c[(c[e>>2]|0)+8>>2]|0)){l=c[(c[e>>2]|0)+32>>2]|0;d=(c[(c[e>>2]|0)+4>>2]|0)+(c[(c[e>>2]|0)+12>>2]|0)|0;b=(c[(c[e>>2]|0)+16>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0)|0;m=(c[e>>2]|0)+24|0;a=c[(c[e>>2]|0)+12>>2]|0;a=gR(c[m>>2]|0,c[m+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;a=Fg(l,d,b,a,C)|0;c[c[e>>2]>>2]=a;c[(c[e>>2]|0)+16>>2]=0;c[(c[e>>2]|0)+12>>2]=0;a=c[(c[e>>2]|0)+8>>2]|0;b=(c[e>>2]|0)+24|0;d=b;a=gR(c[d>>2]|0,c[d+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0; +c[b>>2]=a;c[b+4>>2]=C}c[j>>2]=(c[j>>2]|0)-(c[h>>2]|0)}if((e|0)==9){i=k;return}}function LK(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(((c[c[d>>2]>>2]|0)==0?(c[(c[d>>2]|0)+4>>2]|0)!=0:0)?(c[(c[d>>2]|0)+16>>2]|0)>(c[(c[d>>2]|0)+12>>2]|0):0){j=c[(c[d>>2]|0)+32>>2]|0;h=(c[(c[d>>2]|0)+4>>2]|0)+(c[(c[d>>2]|0)+12>>2]|0)|0;a=(c[(c[d>>2]|0)+16>>2]|0)-(c[(c[d>>2]|0)+12>>2]|0)|0;k=(c[d>>2]|0)+24|0;b=c[(c[d>>2]|0)+12>>2]|0;b=gR(c[k>>2]|0,c[k+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;b=Fg(j,h,a,b,C)|0;c[c[d>>2]>>2]=b}j=(c[d>>2]|0)+24|0;k=c[(c[d>>2]|0)+16>>2]|0;k=gR(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;e=c[e>>2]|0;c[e>>2]=k;c[e+4>>2]=C;Kd(c[(c[d>>2]|0)+4>>2]|0);c[f>>2]=c[c[d>>2]>>2];d=c[d>>2]|0;e=d+40|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));i=g;return c[f>>2]|0}function MK(d){d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[f>>2]=d;do if(!(c[(c[f>>2]|0)+12>>2]|0)){d=cF(c[(c[(c[f>>2]|0)+8>>2]|0)+28>>2]|0,0,0,g)|0;c[(c[f>>2]|0)+12>>2]=d;if(c[g>>2]|0){b[(c[(c[f>>2]|0)+12>>2]|0)+8>>1]=b[(c[(c[(c[f>>2]|0)+8>>2]|0)+28>>2]|0)+6>>1]|0;a[(c[(c[f>>2]|0)+12>>2]|0)+11>>0]=0;break}c[e>>2]=7;d=c[e>>2]|0;i=h;return d|0}while(0);c[e>>2]=0;d=c[e>>2]|0;i=h;return d|0}function NK(a){a=a|0;var b=0,e=0,f=0;f=i;i=i+16|0;b=f+4|0;e=f;c[e>>2]=a;do if((d[(c[e>>2]|0)+60>>0]|0|0)!=1)if((d[(c[e>>2]|0)+60>>0]|0|0)==2){c[b>>2]=139;break}else{c[b>>2]=140;break}else c[b>>2]=138;while(0);i=f;return c[b>>2]|0}function OK(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;f=o+28|0;g=o+24|0;h=o+20|0;j=o+16|0;l=o+12|0;m=o+8|0;k=o+4|0;n=o;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[l>>2]=0;c[m>>2]=l;c[k>>2]=0;while(1){if(!((c[g>>2]|0)!=0?(c[h>>2]|0)!=0:0))break;c[n>>2]=Sb[c[(c[f>>2]|0)+32>>2]&255](c[f>>2]|0,k,(c[g>>2]|0)+8|0,c[c[g>>2]>>2]|0,(c[h>>2]|0)+8|0,c[c[h>>2]>>2]|0)|0;if((c[n>>2]|0)<=0){c[c[m>>2]>>2]=c[g>>2];c[m>>2]=(c[g>>2]|0)+4;c[g>>2]=c[(c[g>>2]|0)+4>>2];continue}else{c[c[m>>2]>>2]=c[h>>2];c[m>>2]=(c[h>>2]|0)+4;c[h>>2]=c[(c[h>>2]|0)+4>>2];c[k>>2]=0;continue}}c[c[m>>2]>>2]=(c[g>>2]|0)!=0?c[g>>2]|0:c[h>>2]|0;c[c[j>>2]>>2]=c[l>>2];i=o;return}function PK(b,f,g,h,j,k){b=b|0;f=f|0;g=g|0;h=h|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;x=i;i=i+64|0;q=x+52|0;r=x+48|0;s=x+44|0;t=x+40|0;u=x+36|0;v=x+32|0;z=x+28|0;y=x+24|0;m=x+20|0;n=x+16|0;o=x+12|0;p=x+8|0;w=x+4|0;l=x;c[q>>2]=b;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=j;c[v>>2]=k;c[z>>2]=c[s>>2];c[y>>2]=c[u>>2];c[m>>2]=d[(c[z>>2]|0)+1>>0];c[n>>2]=d[(c[y>>2]|0)+1>>0];c[o>>2]=(c[z>>2]|0)+(d[c[z>>2]>>0]|0);c[p>>2]=(c[y>>2]|0)+(d[c[y>>2]>>0]|0);h=c[m>>2]|0;k=c[n>>2]|0;a:do if(!((c[m>>2]|0)>7&(c[n>>2]|0)>7)){if((h|0)==(k|0)){if((d[c[o>>2]>>0]^d[c[p>>2]>>0])&128){c[w>>2]=(d[c[o>>2]>>0]&128|0)!=0?-1:1;break}c[w>>2]=0;c[l>>2]=0;while(1){if((c[l>>2]|0)>=(d[43245+(c[m>>2]|0)>>0]|0))break a;z=(d[(c[o>>2]|0)+(c[l>>2]|0)>>0]|0)-(d[(c[p>>2]|0)+(c[l>>2]|0)>>0]|0)|0;c[w>>2]=z;if(z)break a;c[l>>2]=(c[l>>2]|0)+1}}do if((c[n>>2]|0)<=7)if((c[m>>2]|0)>7){c[w>>2]=-1;break}else{c[w>>2]=(c[m>>2]|0)-(c[n>>2]|0);break}else c[w>>2]=1;while(0);if((c[w>>2]|0)>0){if(!(d[c[o>>2]>>0]&128))break;c[w>>2]=-1;break}else{if(!(d[c[p>>2]>>0]&128))break;c[w>>2]=1;break}}else c[w>>2]=h-k;while(0);h=c[(c[(c[q>>2]|0)+8>>2]|0)+28>>2]|0;if(!(c[w>>2]|0)){if((e[h+6>>1]|0)<=1){z=c[w>>2]|0;i=x;return z|0}c[w>>2]=SK(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;z=c[w>>2]|0;i=x;return z|0}else{if(!(a[c[h+16>>2]>>0]|0)){z=c[w>>2]|0;i=x;return z|0}c[w>>2]=_(c[w>>2]|0,-1)|0;z=c[w>>2]|0;i=x;return z|0}return 0}function QK(b,f,g,h,j,k){b=b|0;f=f|0;g=g|0;h=h|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;x=i;i=i+64|0;q=x+48|0;r=x+44|0;s=x+40|0;t=x+36|0;u=x+32|0;v=x+28|0;y=x+24|0;n=x+20|0;o=x+16|0;p=x+12|0;l=x+8|0;m=x+4|0;w=x;c[q>>2]=b;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=j;c[v>>2]=k;c[y>>2]=c[s>>2];c[n>>2]=c[u>>2];c[o>>2]=(c[y>>2]|0)+(d[c[y>>2]>>0]|0);c[p>>2]=(c[n>>2]|0)+(d[c[n>>2]>>0]|0);h=(c[y>>2]|0)+1|0;if((d[(c[y>>2]|0)+1>>0]|0)<128)c[l>>2]=d[h>>0];else tF(h,l)|0;c[l>>2]=((c[l>>2]|0)-13|0)/2|0;h=(c[n>>2]|0)+1|0;if((d[(c[n>>2]|0)+1>>0]|0)<128)c[m>>2]=d[h>>0];else tF(h,m)|0;c[m>>2]=((c[m>>2]|0)-13|0)/2|0;c[w>>2]=vQ(c[o>>2]|0,c[p>>2]|0,(c[l>>2]|0)<(c[m>>2]|0)?c[l>>2]|0:c[m>>2]|0)|0;if(!(c[w>>2]|0))c[w>>2]=(c[l>>2]|0)-(c[m>>2]|0);h=c[(c[(c[q>>2]|0)+8>>2]|0)+28>>2]|0;if(!(c[w>>2]|0)){if((e[h+6>>1]|0)<=1){y=c[w>>2]|0;i=x;return y|0}c[w>>2]=SK(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;y=c[w>>2]|0;i=x;return y|0}else{if(!(a[c[h+16>>2]>>0]|0)){y=c[w>>2]|0;i=x;return y|0}c[w>>2]=_(c[w>>2]|0,-1)|0;y=c[w>>2]|0;i=x;return y|0}return 0}function RK(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;n=p+4|0;o=p;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[(c[h>>2]|0)+12>>2];if(c[c[j>>2]>>2]|0){a=c[l>>2]|0;b=c[k>>2]|0;o=c[o>>2]|0;o=rF(a,b,o)|0;i=p;return o|0}dF(c[(c[(c[h>>2]|0)+8>>2]|0)+28>>2]|0,c[n>>2]|0,c[m>>2]|0,c[o>>2]|0);c[c[j>>2]>>2]=1;a=c[l>>2]|0;b=c[k>>2]|0;o=c[o>>2]|0;o=rF(a,b,o)|0;i=p;return o|0}function SK(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;n=p+4|0;o=p;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[(c[h>>2]|0)+12>>2];if(c[c[j>>2]>>2]|0){a=c[l>>2]|0;b=c[k>>2]|0;o=c[o>>2]|0;o=sF(a,b,o,1)|0;i=p;return o|0}dF(c[(c[(c[h>>2]|0)+8>>2]|0)+28>>2]|0,c[n>>2]|0,c[m>>2]|0,c[o>>2]|0);c[c[j>>2]>>2]=1;a=c[l>>2]|0;b=c[k>>2]|0;o=c[o>>2]|0;o=sF(a,b,o,1)|0;i=p;return o|0}function TK(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,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;m=o+16|0;j=o+12|0;k=o+8|0;n=o+4|0;l=o;c[g>>2]=a;c[h>>2]=b;c[m>>2]=d;c[j>>2]=e;c[k>>2]=f;c[n>>2]=7;b=c[(c[g>>2]|0)+4>>2]|0;c[l>>2]=ig(b,((b|0)<0)<<31>>31)|0;if(!(c[l>>2]|0)){n=c[n>>2]|0;i=o;return n|0}c[n>>2]=Vr(c[g>>2]|0,c[h>>2]|0,c[l>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;g=c[l>>2]|0;if(c[n>>2]|0){Kd(g);n=c[n>>2]|0;i=o;return n|0}else{c[c[m>>2]>>2]=g;n=c[n>>2]|0;i=o;return n|0}return 0}function UK(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;e=q+36|0;f=q+32|0;o=q+28|0;j=q+24|0;n=q+20|0;h=q+16|0;l=q+12|0;m=q+8|0;g=q+4|0;k=q;c[e>>2]=a;c[f>>2]=b;c[j>>2]=c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2];c[n>>2]=c[(c[e>>2]|0)+4>>2];c[o>>2]=VK((c[(c[e>>2]|0)+12>>2]|0)+((c[j>>2]|0)*56|0)|0)|0;if(!(c[o>>2]|0)){c[g>>2]=0;c[l>>2]=(c[(c[e>>2]|0)+12>>2]|0)+((c[j>>2]&65534)*56|0);c[m>>2]=(c[(c[e>>2]|0)+12>>2]|0)+((c[j>>2]|1)*56|0);c[h>>2]=((c[c[e>>2]>>2]|0)+(c[j>>2]|0)|0)/2|0;while(1){if((c[h>>2]|0)<=0)break;do if(c[(c[l>>2]|0)+24>>2]|0)if(!(c[(c[m>>2]|0)+24>>2]|0)){c[k>>2]=-1;break}else{c[k>>2]=Sb[c[(c[n>>2]|0)+32>>2]&255](c[n>>2]|0,g,c[(c[l>>2]|0)+32>>2]|0,c[(c[l>>2]|0)+20>>2]|0,c[(c[m>>2]|0)+32>>2]|0,c[(c[m>>2]|0)+20>>2]|0)|0;break}else c[k>>2]=1;while(0);do if((c[k>>2]|0)<0)p=12;else{if((c[k>>2]|0)==0?(c[l>>2]|0)>>>0<(c[m>>2]|0)>>>0:0){p=12;break}if(c[(c[l>>2]|0)+24>>2]|0)c[g>>2]=0;c[(c[(c[e>>2]|0)+8>>2]|0)+(c[h>>2]<<2)>>2]=((c[m>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0)|0)/56|0;c[l>>2]=(c[(c[e>>2]|0)+12>>2]|0)+((c[(c[(c[e>>2]|0)+8>>2]|0)+((c[h>>2]^1)<<2)>>2]|0)*56|0)}while(0);if((p|0)==12){p=0;c[(c[(c[e>>2]|0)+8>>2]|0)+(c[h>>2]<<2)>>2]=((c[l>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0)|0)/56|0;c[m>>2]=(c[(c[e>>2]|0)+12>>2]|0)+((c[(c[(c[e>>2]|0)+8>>2]|0)+((c[h>>2]^1)<<2)>>2]|0)*56|0);c[g>>2]=0}c[h>>2]=(c[h>>2]|0)/2|0}c[c[f>>2]>>2]=(c[(c[(c[e>>2]|0)+12>>2]|0)+((c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]|0)*56|0)+24>>2]|0)==0&1}if(!(c[o>>2]|0)){p=d[(c[(c[n>>2]|0)+12>>2]|0)+11>>0]|0;i=q;return p|0}else{p=c[o>>2]|0;i=q;return p|0}return 0}function VK(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;j=i;i=i+32|0;b=j+24|0;d=j+20|0;h=j+16|0;f=j;g=j+12|0;e=j+8|0;c[d>>2]=a;c[h>>2]=0;k=f;c[k>>2]=0;c[k+4>>2]=0;k=c[d>>2]|0;m=c[k+4>>2]|0;a=(c[d>>2]|0)+8|0;l=c[a+4>>2]|0;if((m|0)>(l|0)|((m|0)==(l|0)?(c[k>>2]|0)>>>0>=(c[a>>2]|0)>>>0:0)){c[g>>2]=c[(c[d>>2]|0)+48>>2];c[e>>2]=1;if(((c[g>>2]|0)!=0?(c[h>>2]=WK(c[g>>2]|0)|0,(c[h>>2]|0)==0):0)?(c[(c[g>>2]|0)+20>>2]|0)==0:0){m=(c[g>>2]|0)+8|0;c[h>>2]=XK(c[c[g>>2]>>2]|0,c[d>>2]|0,(c[g>>2]|0)+32|0,c[m>>2]|0,c[m+4>>2]|0)|0;c[e>>2]=0}if(c[e>>2]|0){qK(c[d>>2]|0);c[b>>2]=c[h>>2];m=c[b>>2]|0;i=j;return m|0}}if(!(c[h>>2]|0))c[h>>2]=YK(c[d>>2]|0,f)|0;if(!(c[h>>2]|0)){c[(c[d>>2]|0)+20>>2]=c[f>>2];c[h>>2]=ZK(c[d>>2]|0,c[f>>2]|0,(c[d>>2]|0)+32|0)|0}c[b>>2]=c[h>>2];m=c[b>>2]|0;i=j;return m|0}function WK(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=0;c[d>>2]=aL(c[b>>2]|0)|0;f=(c[b>>2]|0)+32|0;a=(c[b>>2]|0)+32+16|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];f=(c[b>>2]|0)+32+8|0;a=(c[b>>2]|0)+8|0;if(!((c[f>>2]|0)==(c[a>>2]|0)?(c[f+4>>2]|0)==(c[a+4>>2]|0):0)){f=c[d>>2]|0;i=e;return f|0}c[(c[b>>2]|0)+20>>2]=1;f=c[d>>2]|0;i=e;return f|0}function XK(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+36|0;h=q+32|0;j=q+28|0;k=q+24|0;l=q;p=q+20|0;o=q+16|0;m=q+12|0;n=q+8|0;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;a=l;c[a>>2]=e;c[a+4>>2]=f;c[p>>2]=0;if(wi(201)|0){c[g>>2]=266;p=c[g>>2]|0;i=q;return p|0}if(c[(c[j>>2]|0)+44>>2]|0){Cs(c[(c[j>>2]|0)+24>>2]|0,0,0,c[(c[j>>2]|0)+44>>2]|0)|0;c[(c[j>>2]|0)+44>>2]=0}a=l;b=c[a+4>>2]|0;d=c[j>>2]|0;c[d>>2]=c[a>>2];c[d+4>>2]=b;d=(c[k>>2]|0)+8|0;b=c[d+4>>2]|0;a=(c[j>>2]|0)+8|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;c[(c[j>>2]|0)+24>>2]=c[c[k>>2]>>2];c[p>>2]=_K(c[h>>2]|0,c[k>>2]|0,(c[j>>2]|0)+44|0)|0;if((c[p>>2]|0)==0?(c[(c[j>>2]|0)+44>>2]|0)==0:0){c[o>>2]=c[(c[(c[h>>2]|0)+8>>2]|0)+12>>2];b=c[j>>2]|0;a=c[o>>2]|0;a=qR(c[b>>2]|0,c[b+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;c[m>>2]=a;if(!(c[(c[j>>2]|0)+36>>2]|0)){a=c[o>>2]|0;a=_f(a,((a|0)<0)<<31>>31)|0;c[(c[j>>2]|0)+36>>2]=a;if(!(c[(c[j>>2]|0)+36>>2]|0))c[p>>2]=7;c[(c[j>>2]|0)+40>>2]=c[o>>2]}if((c[p>>2]|0)==0&(c[m>>2]|0)!=0){c[n>>2]=(c[o>>2]|0)-(c[m>>2]|0);d=c[j>>2]|0;a=c[n>>2]|0;a=gR(c[d>>2]|0,c[d+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;d=C;o=(c[j>>2]|0)+8|0;b=c[o+4>>2]|0;if((d|0)>(b|0)|((d|0)==(b|0)?a>>>0>(c[o>>2]|0)>>>0:0)){a=(c[j>>2]|0)+8|0;o=c[j>>2]|0;o=fR(c[a>>2]|0,c[a+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0;c[n>>2]=o}o=c[j>>2]|0;c[p>>2]=Wr(c[(c[j>>2]|0)+24>>2]|0,(c[(c[j>>2]|0)+36>>2]|0)+(c[m>>2]|0)|0,c[n>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0}}c[g>>2]=c[p>>2];p=c[g>>2]|0;i=q;return p|0}function YK(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+48|0;f=p+24|0;g=p+20|0;h=p+16|0;m=p+12|0;k=p+32|0;j=p+8|0;l=p+4|0;n=p;c[g>>2]=b;c[h>>2]=e;e=c[g>>2]|0;b=c[e>>2]|0;e=c[e+4>>2]|0;do if(c[(c[g>>2]|0)+44>>2]|0){n=(St((c[(c[g>>2]|0)+44>>2]|0)+b|0,c[h>>2]|0)|0)&255;o=c[g>>2]|0;m=o;n=gR(c[m>>2]|0,c[m+4>>2]|0,n|0,0)|0;c[o>>2]=n;c[o+4>>2]=C}else{q=c[(c[g>>2]|0)+40>>2]|0;e=qR(b|0,e|0,q|0,((q|0)<0)<<31>>31|0)|0;c[m>>2]=e;if((c[m>>2]|0)!=0?((c[(c[g>>2]|0)+40>>2]|0)-(c[m>>2]|0)|0)>=9:0){o=(St((c[(c[g>>2]|0)+36>>2]|0)+(c[m>>2]|0)|0,c[h>>2]|0)|0)&255;q=c[g>>2]|0;n=q;o=gR(c[n>>2]|0,c[n+4>>2]|0,o|0,0)|0;c[q>>2]=o;c[q+4>>2]=C;break}c[l>>2]=0;while(1){c[n>>2]=ZK(c[g>>2]|0,1,j)|0;if(c[n>>2]|0)break;m=a[c[j>>2]>>0]|0;q=c[l>>2]|0;c[l>>2]=q+1;a[k+(q&15)>>0]=m;if(!((d[c[j>>2]>>0]|0)&128)){o=10;break}}if((o|0)==10){St(k,c[h>>2]|0)|0;break}c[f>>2]=c[n>>2];q=c[f>>2]|0;i=p;return q|0}while(0);c[f>>2]=0;q=c[f>>2]|0;i=p;return q|0}function ZK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=i;i=i+64|0;g=u+52|0;h=u+48|0;j=u+44|0;k=u+40|0;n=u+36|0;o=u+32|0;e=u+28|0;f=u+24|0;r=u+20|0;l=u+16|0;q=u+12|0;s=u+8|0;p=u+4|0;m=u;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;a=c[h>>2]|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(c[(c[h>>2]|0)+44>>2]|0){c[c[k>>2]>>2]=(c[(c[h>>2]|0)+44>>2]|0)+b;s=c[j>>2]|0;t=c[h>>2]|0;r=t;s=gR(c[r>>2]|0,c[r+4>>2]|0,s|0,((s|0)<0)<<31>>31|0)|0;c[t>>2]=s;c[t+4>>2]=C;c[g>>2]=0;t=c[g>>2]|0;i=u;return t|0}d=c[(c[h>>2]|0)+40>>2]|0;d=qR(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;c[n>>2]=d;if(!(c[n>>2]|0)){w=(c[h>>2]|0)+8|0;a=c[h>>2]|0;a=fR(c[w>>2]|0,c[w+4>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;w=C;d=c[(c[h>>2]|0)+40>>2]|0;v=((d|0)<0)<<31>>31;b=c[h>>2]|0;if((w|0)>(v|0)|(w|0)==(v|0)&a>>>0>d>>>0)c[e>>2]=c[b+40>>2];else{v=b+8|0;w=c[h>>2]|0;w=fR(c[v>>2]|0,c[v+4>>2]|0,c[w>>2]|0,c[w+4>>2]|0)|0;c[e>>2]=w}w=c[h>>2]|0;c[f>>2]=Wr(c[(c[h>>2]|0)+24>>2]|0,c[(c[h>>2]|0)+36>>2]|0,c[e>>2]|0,c[w>>2]|0,c[w+4>>2]|0)|0;if(c[f>>2]|0){c[g>>2]=c[f>>2];w=c[g>>2]|0;i=u;return w|0}}c[o>>2]=(c[(c[h>>2]|0)+40>>2]|0)-(c[n>>2]|0);do if((c[j>>2]|0)<=(c[o>>2]|0)){c[c[k>>2]>>2]=(c[(c[h>>2]|0)+36>>2]|0)+(c[n>>2]|0);v=c[j>>2]|0;w=c[h>>2]|0;t=w;v=gR(c[t>>2]|0,c[t+4>>2]|0,v|0,((v|0)<0)<<31>>31|0)|0;c[w>>2]=v;c[w+4>>2]=C}else{do if((c[(c[h>>2]|0)+16>>2]|0)<(c[j>>2]|0)){if(128>(c[(c[h>>2]|0)+16>>2]<<1|0))b=128;else b=c[(c[h>>2]|0)+16>>2]<<1;c[q>>2]=b;while(1){if((c[j>>2]|0)<=(c[q>>2]|0))break;c[q>>2]=c[q>>2]<<1}w=c[q>>2]|0;c[l>>2]=bg(c[(c[h>>2]|0)+28>>2]|0,w,((w|0)<0)<<31>>31)|0;if(c[l>>2]|0){c[(c[h>>2]|0)+16>>2]=c[q>>2];c[(c[h>>2]|0)+28>>2]=c[l>>2];break}c[g>>2]=7;w=c[g>>2]|0;i=u;return w|0}while(0);iR(c[(c[h>>2]|0)+28>>2]|0,(c[(c[h>>2]|0)+36>>2]|0)+(c[n>>2]|0)|0,c[o>>2]|0)|0;v=c[o>>2]|0;w=c[h>>2]|0;q=w;v=gR(c[q>>2]|0,c[q+4>>2]|0,v|0,((v|0)<0)<<31>>31|0)|0;c[w>>2]=v;c[w+4>>2]=C;c[r>>2]=(c[j>>2]|0)-(c[o>>2]|0);while(1){if((c[r>>2]|0)<=0){t=27;break}c[p>>2]=c[r>>2];if((c[r>>2]|0)>(c[(c[h>>2]|0)+40>>2]|0))c[p>>2]=c[(c[h>>2]|0)+40>>2];c[s>>2]=ZK(c[h>>2]|0,c[p>>2]|0,m)|0;if(c[s>>2]|0)break;iR((c[(c[h>>2]|0)+28>>2]|0)+((c[j>>2]|0)-(c[r>>2]|0))|0,c[m>>2]|0,c[p>>2]|0)|0;c[r>>2]=(c[r>>2]|0)-(c[p>>2]|0)}if((t|0)==27){c[c[k>>2]>>2]=c[(c[h>>2]|0)+28>>2];break}c[g>>2]=c[s>>2];w=c[g>>2]|0;i=u;return w|0}while(0);c[g>>2]=0;w=c[g>>2]|0;i=u;return w|0}function _K(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+32|0;l=j+16|0;e=j+12|0;f=j+8|0;h=j+4|0;g=j;c[l>>2]=a;c[e>>2]=b;c[f>>2]=d;c[h>>2]=0;a=(c[e>>2]|0)+8|0;k=c[a+4>>2]|0;d=c[(c[(c[(c[l>>2]|0)+8>>2]|0)+24>>2]|0)+136>>2]|0;b=((d|0)<0)<<31>>31;if(!((k|0)<(b|0)|((k|0)==(b|0)?(c[a>>2]|0)>>>0<=d>>>0:0))){l=c[h>>2]|0;i=j;return l|0}c[g>>2]=c[c[e>>2]>>2];if((c[c[c[g>>2]>>2]>>2]|0)<3){l=c[h>>2]|0;i=j;return l|0}c[h>>2]=$K(c[g>>2]|0,0,0,c[(c[e>>2]|0)+8>>2]|0,c[f>>2]|0)|0;l=c[h>>2]|0;i=j;return l|0}function $K(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;g=i;i=i+32|0;h=g+8|0;c[g+16>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;c[g+12>>2]=e;c[h>>2]=f;c[c[h>>2]>>2]=0;i=g;return 0}function aL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=i;i=i+96|0;b=o+88|0;l=o+84|0;m=o+80|0;f=o+48|0;j=o+76|0;p=o+72|0;h=o+68|0;n=o+8|0;d=o+64|0;k=o+60|0;g=o+56|0;e=o;c[b>>2]=a;c[l>>2]=0;r=(c[b>>2]|0)+8|0;q=c[r+4>>2]|0;a=f;c[a>>2]=c[r>>2];c[a+4>>2]=q;c[j>>2]=(c[b>>2]|0)+32+16;c[p>>2]=c[c[b>>2]>>2];c[h>>2]=c[(c[b>>2]|0)+4>>2];a=f;IK(c[c[j>>2]>>2]|0,n,c[(c[(c[p>>2]|0)+8>>2]|0)+12>>2]|0,c[a>>2]|0,c[a+4>>2]|0);while(1){if(c[l>>2]|0)break;c[k>>2]=(c[(c[h>>2]|0)+12>>2]|0)+((c[(c[(c[h>>2]|0)+8>>2]|0)+4>>2]|0)*56|0);c[g>>2]=c[(c[k>>2]|0)+20>>2];r=n+24|0;q=c[n+16>>2]|0;q=gR(c[r>>2]|0,c[r+4>>2]|0,q|0,((q|0)<0)<<31>>31|0)|0;r=e;c[r>>2]=q;c[r+4>>2]=C;if(!(c[(c[k>>2]|0)+24>>2]|0))break;a=e;p=c[g>>2]|0;p=gR(c[a>>2]|0,c[a+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;a=C;q=c[g>>2]|0;q=zF(q,((q|0)<0)<<31>>31)|0;q=gR(p|0,a|0,q|0,((q|0)<0)<<31>>31|0)|0;a=C;p=f;r=c[(c[b>>2]|0)+16>>2]|0;r=gR(c[p>>2]|0,c[p+4>>2]|0,r|0,((r|0)<0)<<31>>31|0)|0;p=C;if((a|0)>(p|0)|(a|0)==(p|0)&q>>>0>r>>>0)break;r=c[g>>2]|0;JK(n,r,((r|0)<0)<<31>>31);KK(n,c[(c[k>>2]|0)+32>>2]|0,c[g>>2]|0);c[l>>2]=UK(c[(c[b>>2]|0)+4>>2]|0,d)|0}c[m>>2]=LK(n,(c[j>>2]|0)+8|0)|0;if(c[l>>2]|0){r=c[l>>2]|0;i=o;return r|0}c[l>>2]=c[m>>2];r=c[l>>2]|0;i=o;return r|0}function bL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;f=g+8|0;e=g+4|0;d=g;c[b>>2]=a;c[e>>2]=(c[b>>2]|0)+64;c[d>>2]=0;c[f>>2]=cL(c[b>>2]|0,d)|0;if(!(c[f>>2]|0)){c[f>>2]=dL(c[e>>2]|0,c[d>>2]|0,0)|0;c[(c[b>>2]|0)+20>>2]=c[d>>2];c[d>>2]=0}if(!(c[f>>2]|0)){f=c[f>>2]|0;i=g;return f|0}mK(c[d>>2]|0);f=c[f>>2]|0;i=g;return f|0}function cL(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;e=s+52|0;f=s+48|0;n=s+44|0;r=s+40|0;k=s+36|0;q=s+32|0;p=s+28|0;l=s+24|0;h=s;g=s+20|0;j=s+16|0;o=s+12|0;m=s+8|0;c[e>>2]=a;c[f>>2]=b;c[n>>2]=0;c[r>>2]=0;c[k>>2]=0;while(1){if(c[r>>2]|0)break;if((c[k>>2]|0)>=(d[(c[e>>2]|0)+59>>0]|0|0))break;c[q>>2]=(c[e>>2]|0)+64+((c[k>>2]|0)*72|0);c[p>>2]=0;c[l>>2]=hL(c[(c[q>>2]|0)+28>>2]|0)|0;b=h;c[b>>2]=0;c[b+4>>2]=0;a:do if((c[(c[q>>2]|0)+28>>2]|0)<=16)c[r>>2]=iL(c[q>>2]|0,c[(c[q>>2]|0)+28>>2]|0,h,p)|0;else{c[j>>2]=0;c[p>>2]=jL(16)|0;if(!(c[p>>2]|0))c[r>>2]=7;c[g>>2]=0;while(1){if(!((c[g>>2]|0)<(c[(c[q>>2]|0)+28>>2]|0)?(c[r>>2]|0)==0:0))break a;c[o>>2]=0;if(((c[(c[q>>2]|0)+28>>2]|0)-(c[g>>2]|0)|0)<16)a=(c[(c[q>>2]|0)+28>>2]|0)-(c[g>>2]|0)|0;else a=16;c[m>>2]=a;c[r>>2]=iL(c[q>>2]|0,c[m>>2]|0,h,o)|0;if(!(c[r>>2]|0)){t=c[q>>2]|0;a=c[l>>2]|0;b=c[j>>2]|0;c[j>>2]=b+1;c[r>>2]=kL(t,a,b,c[p>>2]|0,c[o>>2]|0)|0}c[g>>2]=(c[g>>2]|0)+16}}while(0);a=c[p>>2]|0;if(!(c[r>>2]|0))c[n>>2]=a;else mK(a);c[k>>2]=(c[k>>2]|0)+1}if(!(c[r>>2]|0)){q=c[n>>2]|0;t=c[f>>2]|0;c[t>>2]=q;t=c[r>>2]|0;i=s;return t|0}mK(c[n>>2]|0);c[n>>2]=0;q=c[n>>2]|0;t=c[f>>2]|0;c[t>>2]=q;t=c[r>>2]|0;i=s;return t|0}function dL(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+24|0;g=n+20|0;h=n+16|0;l=n+8|0;j=n+4|0;k=n;c[g>>2]=a;c[h>>2]=b;c[n+12>>2]=e;c[l>>2]=0;c[k>>2]=c[c[h>>2]>>2];c[(c[h>>2]|0)+4>>2]=c[g>>2];c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[k>>2]|0))break;c[l>>2]=eL((c[(c[h>>2]|0)+12>>2]|0)+((c[j>>2]|0)*56|0)|0,0)|0;if(c[l>>2]|0){m=4;break}c[j>>2]=(c[j>>2]|0)+1}if((m|0)==4){c[f>>2]=c[l>>2];m=c[f>>2]|0;i=n;return m|0}c[j>>2]=(c[c[h>>2]>>2]|0)-1;while(1){if((c[j>>2]|0)<=0)break;fL(c[h>>2]|0,c[j>>2]|0);c[j>>2]=(c[j>>2]|0)+-1}c[f>>2]=d[(c[(c[g>>2]|0)+12>>2]|0)+11>>0];m=c[f>>2]|0;i=n;return m|0}function eL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+12|0;e=g+8|0;h=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[h>>2]=c[(c[d>>2]|0)+48>>2];c[f>>2]=0;if(!(c[h>>2]|0)){h=c[f>>2]|0;i=g;return h|0}c[f>>2]=gL(c[d>>2]|0,c[e>>2]|0)|0;h=c[f>>2]|0;i=g;return h|0}function fL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;d=o+36|0;e=o+32|0;g=o+28|0;h=o+24|0;j=o+20|0;k=o+16|0;l=o+12|0;m=o+8|0;f=o+4|0;n=o;c[d>>2]=a;c[e>>2]=b;b=c[e>>2]|0;if((c[e>>2]|0)>=((c[c[d>>2]>>2]|0)/2|0|0)){c[g>>2]=b-((c[c[d>>2]>>2]|0)/2|0)<<1;c[h>>2]=(c[g>>2]|0)+1}else{c[g>>2]=c[(c[(c[d>>2]|0)+8>>2]|0)+(b<<1<<2)>>2];c[h>>2]=c[(c[(c[d>>2]|0)+8>>2]|0)+((c[e>>2]<<1)+1<<2)>>2]}c[k>>2]=(c[(c[d>>2]|0)+12>>2]|0)+((c[g>>2]|0)*56|0);c[l>>2]=(c[(c[d>>2]|0)+12>>2]|0)+((c[h>>2]|0)*56|0);do if(c[(c[k>>2]|0)+24>>2]|0){if(!(c[(c[l>>2]|0)+24>>2]|0)){c[j>>2]=c[g>>2];break}c[m>>2]=c[(c[d>>2]|0)+4>>2];c[f>>2]=0;c[n>>2]=Sb[c[(c[m>>2]|0)+32>>2]&255](c[m>>2]|0,f,c[(c[k>>2]|0)+32>>2]|0,c[(c[k>>2]|0)+20>>2]|0,c[(c[l>>2]|0)+32>>2]|0,c[(c[l>>2]|0)+20>>2]|0)|0;if((c[n>>2]|0)<=0){c[j>>2]=c[g>>2];break}else{c[j>>2]=c[h>>2];break}}else c[j>>2]=c[h>>2];while(0);c[(c[(c[d>>2]|0)+8>>2]|0)+(c[e>>2]<<2)>>2]=c[j>>2];i=o;return}function gL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;d=k+24|0;l=k+20|0;j=k+16|0;g=k+12|0;h=k+8|0;e=k+4|0;f=k;c[d>>2]=a;c[l>>2]=b;c[j>>2]=0;c[g>>2]=c[(c[d>>2]|0)+48>>2];c[h>>2]=c[c[g>>2]>>2];c[e>>2]=c[(c[(c[h>>2]|0)+8>>2]|0)+24>>2];c[j>>2]=dL(c[h>>2]|0,c[(c[g>>2]|0)+4>>2]|0,c[l>>2]|0)|0;if(!(c[j>>2]|0)){c[f>>2]=c[(c[g>>2]|0)+16>>2];if(!(c[(c[h>>2]|0)+56>>2]|0)){l=(c[h>>2]|0)+56+8|0;c[j>>2]=GK(c[e>>2]|0,c[l>>2]|0,c[l+4>>2]|0,(c[h>>2]|0)+56|0)|0;l=(c[h>>2]|0)+56+8|0;c[l>>2]=0;c[l+4>>2]=0}if(!(c[j>>2]|0)){c[(c[g>>2]|0)+32+16>>2]=c[(c[h>>2]|0)+56>>2];b=(c[h>>2]|0)+56+8|0;l=c[b+4>>2]|0;a=(c[g>>2]|0)+8|0;c[a>>2]=c[b>>2];c[a+4>>2]=l;a=c[f>>2]|0;l=(c[h>>2]|0)+56+8|0;h=l;h=gR(c[h>>2]|0,c[h+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;c[l>>2]=h;c[l+4>>2]=C}}if(c[j>>2]|0){l=c[j>>2]|0;i=k;return l|0}c[j>>2]=VK(c[d>>2]|0)|0;l=c[j>>2]|0;i=k;return l|0}function hL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;b=f+12|0;d=f+8|0;e=f;c[b>>2]=a;c[d>>2]=0;a=e;c[a>>2]=16;c[a+4>>2]=0;while(1){g=e;j=c[g+4>>2]|0;a=c[b>>2]|0;h=((a|0)<0)<<31>>31;if(!((j|0)<(h|0)|((j|0)==(h|0)?(c[g>>2]|0)>>>0>>0:0)))break;h=e;h=rR(c[h>>2]|0,c[h+4>>2]|0,16,0)|0;j=e;c[j>>2]=h;c[j+4>>2]=C;c[d>>2]=(c[d>>2]|0)+1}i=f;return c[d>>2]|0}function iL(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;f=q+44|0;g=q+40|0;h=q+36|0;j=q+32|0;n=q+28|0;l=q+8|0;k=q+24|0;p=q+20|0;m=q;o=q+16|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;a=c[h>>2]|0;d=c[a+4>>2]|0;e=l;c[e>>2]=c[a>>2];c[e+4>>2]=d;c[p>>2]=0;e=jL(c[g>>2]|0)|0;c[n>>2]=e;c[c[j>>2]>>2]=e;if(!(c[n>>2]|0))c[p>>2]=7;c[k>>2]=0;while(1){if(!((c[k>>2]|0)<(c[g>>2]|0)?(c[p>>2]|0)==0:0))break;c[o>>2]=(c[(c[n>>2]|0)+12>>2]|0)+((c[k>>2]|0)*56|0);a=l;c[p>>2]=mL(c[f>>2]|0,(c[f>>2]|0)+40|0,c[a>>2]|0,c[a+4>>2]|0,c[o>>2]|0,m)|0;a=(c[o>>2]|0)+8|0;d=c[a+4>>2]|0;e=l;c[e>>2]=c[a>>2];c[e+4>>2]=d;c[k>>2]=(c[k>>2]|0)+1}if(!(c[p>>2]|0)){d=l;o=d;o=c[o>>2]|0;d=d+4|0;d=c[d>>2]|0;e=c[h>>2]|0;a=e;c[a>>2]=o;e=e+4|0;c[e>>2]=d;p=c[p>>2]|0;i=q;return p|0}mK(c[n>>2]|0);c[c[j>>2]>>2]=0;d=l;o=d;o=c[o>>2]|0;d=d+4|0;d=c[d>>2]|0;e=c[h>>2]|0;a=e;c[a>>2]=o;e=e+4|0;c[e>>2]=d;p=c[p>>2]|0;i=q;return p|0}function jL(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;e=g+8|0;d=g+4|0;f=g;c[b>>2]=a;c[e>>2]=2;while(1){a=c[e>>2]|0;if((c[e>>2]|0)>=(c[b>>2]|0))break;c[e>>2]=(c[e>>2]|0)+a}c[d>>2]=16+(a*60|0);if(wi(100)|0)a=0;else{a=c[d>>2]|0;a=ig(a,((a|0)<0)<<31>>31)|0}c[f>>2]=a;if(!(c[f>>2]|0)){f=c[f>>2]|0;i=g;return f|0}c[c[f>>2]>>2]=c[e>>2];c[(c[f>>2]|0)+4>>2]=0;c[(c[f>>2]|0)+12>>2]=(c[f>>2]|0)+16;c[(c[f>>2]|0)+8>>2]=(c[(c[f>>2]|0)+12>>2]|0)+((c[e>>2]|0)*56|0);f=c[f>>2]|0;i=g;return f|0}function kL(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,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=i;i=i+64|0;g=s+48|0;h=s+44|0;p=s+40|0;u=s+36|0;t=s+32|0;r=s+28|0;l=s+24|0;j=s+20|0;q=s+16|0;m=s+12|0;k=s+8|0;o=s+4|0;n=s;c[g>>2]=a;c[h>>2]=b;c[p>>2]=d;c[u>>2]=e;c[t>>2]=f;c[r>>2]=0;c[l>>2]=1;c[q>>2]=c[u>>2];c[r>>2]=lL(c[g>>2]|0,c[t>>2]|0,m)|0;c[j>>2]=1;while(1){if((c[j>>2]|0)>=(c[h>>2]|0))break;c[l>>2]=c[l>>2]<<4;c[j>>2]=(c[j>>2]|0)+1}c[j>>2]=1;while(1){if(!((c[j>>2]|0)<(c[h>>2]|0)?(c[r>>2]|0)==0:0))break;c[k>>2]=((c[p>>2]|0)/(c[l>>2]|0)|0|0)%16|0;c[o>>2]=(c[(c[q>>2]|0)+12>>2]|0)+((c[k>>2]|0)*56|0);do if(!(c[(c[o>>2]|0)+48>>2]|0)){c[n>>2]=jL(16)|0;if(!(c[n>>2]|0)){c[r>>2]=7;break}else{c[r>>2]=lL(c[g>>2]|0,c[n>>2]|0,(c[o>>2]|0)+48|0)|0;break}}while(0);if(!(c[r>>2]|0)){c[q>>2]=c[(c[(c[o>>2]|0)+48>>2]|0)+4>>2];c[l>>2]=(c[l>>2]|0)/16|0}c[j>>2]=(c[j>>2]|0)+1}g=c[m>>2]|0;if(!(c[r>>2]|0)){c[(c[(c[q>>2]|0)+12>>2]|0)+(((c[p>>2]|0)%16|0)*56|0)+48>>2]=g;u=c[r>>2]|0;i=s;return u|0}else{rK(g);u=c[r>>2]|0;i=s;return u|0}return 0}function lL(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;g=k+16|0;e=k+12|0;f=k+8|0;j=k+4|0;h=k;c[g>>2]=a;c[e>>2]=b;c[f>>2]=d;c[j>>2]=0;if(wi(100)|0)b=0;else b=ig(64,0)|0;c[c[f>>2]>>2]=b;c[h>>2]=b;b=c[e>>2]|0;if(!(c[h>>2]|0)){mK(b);c[j>>2]=7;j=c[j>>2]|0;i=k;return j|0}c[(c[h>>2]|0)+4>>2]=b;c[c[h>>2]>>2]=c[g>>2];b=c[(c[g>>2]|0)+8>>2]|0;if(((c[(c[(c[g>>2]|0)+8>>2]|0)+8>>2]|0)+9|0)>((c[(c[(c[g>>2]|0)+8>>2]|0)+4>>2]|0)/2|0|0))b=(c[b+8>>2]|0)+9|0;else b=(c[b+4>>2]|0)/2|0;c[(c[h>>2]|0)+16>>2]=b;f=c[(c[h>>2]|0)+16>>2]|0;h=(c[g>>2]|0)+56+8|0;g=h;g=gR(c[g>>2]|0,c[g+4>>2]|0,f|0,((f|0)<0)<<31>>31|0)|0;c[h>>2]=g;c[h+4>>2]=C;j=c[j>>2]|0;i=k;return j|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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=i;i=i+48|0;o=m+32|0;n=m+28|0;p=m+8|0;h=m+24|0;j=m+20|0;l=m+16|0;k=m;c[o>>2]=a;c[n>>2]=b;a=p;c[a>>2]=d;c[a+4>>2]=e;c[h>>2]=f;c[j>>2]=g;g=p;c[l>>2]=XK(c[o>>2]|0,c[h>>2]|0,c[n>>2]|0,c[g>>2]|0,c[g+4>>2]|0)|0;if(!(c[l>>2]|0)){o=k;c[o>>2]=0;c[o+4>>2]=0;c[l>>2]=YK(c[h>>2]|0,k)|0;o=c[h>>2]|0;p=k;p=gR(c[o>>2]|0,c[o+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0)|0;o=(c[h>>2]|0)+8|0;c[o>>2]=p;c[o+4>>2]=C;o=k;p=c[j>>2]|0;n=p;o=gR(c[n>>2]|0,c[n+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0;c[p>>2]=o;c[p+4>>2]=C}if(c[l>>2]|0){p=c[l>>2]|0;i=m;return p|0}c[l>>2]=VK(c[h>>2]|0)|0;p=c[l>>2]|0;i=m;return p|0}function nL(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return(d[(c[b>>2]|0)+66>>0]|0|0)!=1|0}function oL(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=b;c[e>>2]=pL(c[(c[d>>2]|0)+16>>2]|0,g)|0;c[(c[d>>2]|0)+56>>2]=0;if(!(c[g>>2]|0)){g=c[e>>2]|0;i=f;return g|0}a[(c[d>>2]|0)+2>>0]=1;g=c[e>>2]|0;i=f;return g|0}function pL(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j+12|0;h=j+8|0;e=j+4|0;f=j;c[h>>2]=a;c[e>>2]=b;if((d[(c[h>>2]|0)+66>>0]|0|0)>=3)a=WE(c[h>>2]|0)|0;else a=0;c[f>>2]=a;if(c[f>>2]|0){c[c[e>>2]>>2]=1;c[g>>2]=c[f>>2];h=c[g>>2]|0;i=j;return h|0}a=c[e>>2]|0;if((d[(c[h>>2]|0)+66>>0]|0|0)!=1)c[a>>2]=1;else c[a>>2]=0;c[g>>2]=0;h=c[g>>2]|0;i=j;return h|0}function qL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=b;c[f>>2]=d;b=c[e>>2]|0;if(a[(c[e>>2]|0)+56>>0]|0){c[h>>2]=(c[(c[(c[e>>2]|0)+20>>2]|0)+12>>2]|0)+((c[(c[(c[b+20>>2]|0)+8>>2]|0)+4>>2]|0)*56|0);c[c[f>>2]>>2]=c[(c[h>>2]|0)+20>>2];c[g>>2]=c[(c[h>>2]|0)+32>>2];h=c[g>>2]|0;i=j;return h|0}else{c[c[f>>2]>>2]=c[c[b+36>>2]>>2];c[g>>2]=(c[(c[e>>2]|0)+36>>2]|0)+8;h=c[g>>2]|0;i=j;return h|0}return 0}function rL(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;k=t+32|0;l=t+28|0;m=t+24|0;n=t+20|0;q=t+16|0;o=t+12|0;r=t+8|0;s=t+4|0;p=t;c[k>>2]=f;c[l>>2]=g;c[m>>2]=h;c[n>>2]=j;if(c[c[n>>2]>>2]|0){i=t;return}c[o>>2]=c[(c[k>>2]|0)+56>>2];c[r>>2]=(c[(c[k>>2]|0)+64>>2]|0)+(c[l>>2]<<1);c[q>>2]=(d[c[r>>2]>>0]|0)<<8|(d[(c[r>>2]|0)+1>>0]|0);c[p>>2]=d[(c[k>>2]|0)+5>>0];if((c[q>>2]|0)>>>0>=((d[(c[o>>2]|0)+((c[p>>2]|0)+5)>>0]|0)<<8|(d[(c[o>>2]|0)+((c[p>>2]|0)+5)+1>>0]|0))>>>0?((c[q>>2]|0)+(c[m>>2]|0)|0)>>>0<=(c[(c[(c[k>>2]|0)+52>>2]|0)+36>>2]|0)>>>0:0){c[s>>2]=IL(c[k>>2]|0,c[q>>2]&65535,c[m>>2]&65535)|0;if(c[s>>2]|0){c[c[n>>2]>>2]=c[s>>2];i=t;return}h=(c[k>>2]|0)+18|0;b[h>>1]=(b[h>>1]|0)+-1<<16>>16;if(!(e[(c[k>>2]|0)+18>>1]|0)){h=(c[o>>2]|0)+((c[p>>2]|0)+1)|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;a[(c[o>>2]|0)+((c[p>>2]|0)+7)>>0]=0;a[(c[o>>2]|0)+((c[p>>2]|0)+5)>>0]=(c[(c[(c[k>>2]|0)+52>>2]|0)+36>>2]|0)>>>8;a[(c[o>>2]|0)+((c[p>>2]|0)+5)+1>>0]=c[(c[(c[k>>2]|0)+52>>2]|0)+36>>2];b[(c[k>>2]|0)+16>>1]=(c[(c[(c[k>>2]|0)+52>>2]|0)+36>>2]|0)-(d[(c[k>>2]|0)+5>>0]|0)-(d[(c[k>>2]|0)+6>>0]|0)-8;i=t;return}else{jR(c[r>>2]|0,(c[r>>2]|0)+2|0,(e[(c[k>>2]|0)+18>>1]|0)-(c[l>>2]|0)<<1|0)|0;a[(c[o>>2]|0)+((c[p>>2]|0)+3)>>0]=(e[(c[k>>2]|0)+18>>1]|0)>>8;a[(c[o>>2]|0)+((c[p>>2]|0)+3)+1>>0]=b[(c[k>>2]|0)+18>>1];h=(c[k>>2]|0)+16|0;b[h>>1]=(e[h>>1]|0)+2;i=t;return}}h=Lj(61841)|0;c[c[n>>2]>>2]=h;i=t;return}function sL(f,g,h,j,k,l,m){f=f|0;g=g|0;h=h|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;z=i;i=i+48|0;n=z+44|0;o=z+40|0;p=z+36|0;q=z+32|0;r=z+28|0;s=z+24|0;t=z+20|0;v=z+16|0;w=z+12|0;u=z+8|0;x=z+4|0;y=z;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=j;c[r>>2]=k;c[s>>2]=l;c[t>>2]=m;c[v>>2]=0;if(c[c[t>>2]>>2]|0){i=z;return}if((d[(c[n>>2]|0)+1>>0]|0)==0?((c[q>>2]|0)+2|0)<=(e[(c[n>>2]|0)+16>>1]|0):0){c[y>>2]=Dg(c[(c[n>>2]|0)+72>>2]|0)|0;if(c[y>>2]|0){c[c[t>>2]>>2]=c[y>>2];i=z;return}c[u>>2]=c[(c[n>>2]|0)+56>>2];c[y>>2]=KL(c[n>>2]|0,c[q>>2]|0,v)|0;if(c[y>>2]|0){c[c[t>>2]>>2]=c[y>>2];i=z;return}j=(c[n>>2]|0)+16|0;b[j>>1]=(e[j>>1]|0)-(2+(c[q>>2]|0)&65535);iR((c[u>>2]|0)+(c[v>>2]|0)|0,c[p>>2]|0,c[q>>2]|0)|0;if(c[s>>2]|0)Xs((c[u>>2]|0)+(c[v>>2]|0)|0,c[s>>2]|0);c[x>>2]=(c[(c[n>>2]|0)+64>>2]|0)+(c[o>>2]<<1);jR((c[x>>2]|0)+2|0,c[x>>2]|0,(e[(c[n>>2]|0)+18>>1]|0)-(c[o>>2]|0)<<1|0)|0;a[c[x>>2]>>0]=c[v>>2]>>8;a[(c[x>>2]|0)+1>>0]=c[v>>2];y=(c[n>>2]|0)+18|0;b[y>>1]=(b[y>>1]|0)+1<<16>>16;y=(c[u>>2]|0)+((d[(c[n>>2]|0)+5>>0]|0)+4)|0;j=(a[y>>0]|0)+1<<24>>24;a[y>>0]=j;if(!(j&255)){j=(c[u>>2]|0)+((d[(c[n>>2]|0)+5>>0]|0)+3)|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24}if(!(a[(c[(c[n>>2]|0)+52>>2]|0)+17>>0]|0)){i=z;return}zJ(c[n>>2]|0,c[p>>2]|0,c[t>>2]|0);i=z;return}if(c[r>>2]|0){iR(c[r>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;c[p>>2]=c[r>>2]}if(c[s>>2]|0)Xs(c[p>>2]|0,c[s>>2]|0);y=(c[n>>2]|0)+1|0;j=a[y>>0]|0;a[y>>0]=j+1<<24>>24;c[w>>2]=j&255;c[(c[n>>2]|0)+32+(c[w>>2]<<2)>>2]=c[p>>2];b[(c[n>>2]|0)+22+(c[w>>2]<<1)>>1]=c[o>>2];i=z;return}function tL(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;g=r+32|0;q=r+28|0;l=r+24|0;h=r+36|0;m=r+20|0;k=r+16|0;n=r+12|0;o=r+8|0;j=r+4|0;p=r;c[g>>2]=f;c[q>>2]=0;c[l>>2]=(c[(c[(c[g>>2]|0)+4>>2]|0)+36>>2]<<1>>>0)/3|0;c[m>>2]=0;do{c[k>>2]=a[(c[g>>2]|0)+68>>0];c[n>>2]=c[(c[g>>2]|0)+120+(c[k>>2]<<2)>>2];f=a[(c[n>>2]|0)+1>>0]|0;if(!(c[k>>2]|0)){if(!(f<<24>>24))break;c[q>>2]=uL(c[n>>2]|0,(c[g>>2]|0)+120+4|0)|0;if(!(c[q>>2]|0)){a[(c[g>>2]|0)+68>>0]=1;b[(c[g>>2]|0)+80>>1]=0;b[(c[g>>2]|0)+80+2>>1]=0}}else{if((f&255|0)==0?(e[(c[n>>2]|0)+16>>1]|0)<=(c[l>>2]|0):0)break;c[o>>2]=c[(c[g>>2]|0)+120+((c[k>>2]|0)-1<<2)>>2];c[j>>2]=e[(c[g>>2]|0)+80+((c[k>>2]|0)-1<<1)>>1];c[q>>2]=Dg(c[(c[o>>2]|0)+72>>2]|0)|0;do if(!(c[q>>2]|0)){if(((((d[(c[n>>2]|0)+3>>0]|0)!=0?(d[(c[n>>2]|0)+1>>0]|0)==1:0)?(e[(c[n>>2]|0)+22>>1]|0)==(e[(c[n>>2]|0)+18>>1]|0):0)?(c[(c[o>>2]|0)+84>>2]|0)!=1:0)?(e[(c[o>>2]|0)+18>>1]|0)==(c[j>>2]|0):0){c[q>>2]=vL(c[o>>2]|0,c[n>>2]|0,h)|0;break}c[p>>2]=Ti(c[(c[(c[g>>2]|0)+4>>2]|0)+32>>2]|0)|0;c[q>>2]=wL(c[o>>2]|0,c[j>>2]|0,c[p>>2]|0,(c[k>>2]|0)==1&1,d[(c[g>>2]|0)+67>>0]&1)|0;if(c[m>>2]|0)Wi(c[m>>2]|0);c[m>>2]=c[p>>2]}while(0);a[(c[n>>2]|0)+1>>0]=0;qB(c[n>>2]|0);f=(c[g>>2]|0)+68|0;a[f>>0]=(a[f>>0]|0)+-1<<24>>24}}while((c[q>>2]|0)==0);if(!(c[m>>2]|0)){q=c[q>>2]|0;i=r;return q|0}Wi(c[m>>2]|0);q=c[q>>2]|0;i=r;return q|0}function uL(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;f=n+24|0;g=n+20|0;h=n+16|0;m=n+12|0;k=n+8|0;l=n+4|0;j=n;c[g>>2]=b;c[h>>2]=e;c[k>>2]=0;c[l>>2]=0;c[j>>2]=c[(c[g>>2]|0)+52>>2];c[m>>2]=Dg(c[(c[g>>2]|0)+72>>2]|0)|0;if((c[m>>2]|0)==0?(c[m>>2]=tJ(c[j>>2]|0,k,l,c[(c[g>>2]|0)+84>>2]|0,0)|0,BL(c[g>>2]|0,c[k>>2]|0,m),(a[(c[j>>2]|0)+17>>0]|0)!=0):0)xJ(c[j>>2]|0,c[l>>2]|0,5,c[(c[g>>2]|0)+84>>2]|0,m);if(c[m>>2]|0){c[c[h>>2]>>2]=0;qB(c[k>>2]|0);c[f>>2]=c[m>>2];m=c[f>>2]|0;i=n;return m|0}else{iR((c[k>>2]|0)+22|0,(c[g>>2]|0)+22|0,d[(c[g>>2]|0)+1>>0]<<1|0)|0;iR((c[k>>2]|0)+32|0,(c[g>>2]|0)+32|0,d[(c[g>>2]|0)+1>>0]<<2|0)|0;a[(c[k>>2]|0)+1>>0]=a[(c[g>>2]|0)+1>>0]|0;wK(c[g>>2]|0,d[c[(c[k>>2]|0)+56>>2]>>0]&-9);Xs((c[(c[g>>2]|0)+56>>2]|0)+((d[(c[g>>2]|0)+5>>0]|0)+8)|0,c[l>>2]|0);c[c[h>>2]>>2]=c[k>>2];c[f>>2]=0;m=c[f>>2]|0;i=n;return m|0}return 0}function vL(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+48|0;j=v+40|0;k=v+36|0;l=v+32|0;m=v+28|0;n=v+24|0;p=v+20|0;t=v+16|0;s=v+12|0;q=v+8|0;o=v+4|0;u=v+44|0;r=v;c[k>>2]=f;c[l>>2]=g;c[m>>2]=h;c[n>>2]=c[(c[l>>2]|0)+52>>2];if(!(e[(c[l>>2]|0)+18>>1]|0)){c[j>>2]=Lj(62338)|0;u=c[j>>2]|0;i=v;return u|0}c[t>>2]=tJ(c[n>>2]|0,p,s,0,0)|0;if(!(c[t>>2]|0)){c[q>>2]=(c[m>>2]|0)+4;c[o>>2]=c[(c[l>>2]|0)+32>>2];b[u>>1]=Yb[c[(c[l>>2]|0)+76>>2]&255](c[l>>2]|0,c[o>>2]|0)|0;wK(c[p>>2]|0,13);c[t>>2]=GL(c[p>>2]|0,1,o,u)|0;if(c[t>>2]|0){c[j>>2]=c[t>>2];u=c[j>>2]|0;i=v;return u|0}b[(c[p>>2]|0)+16>>1]=(c[(c[n>>2]|0)+36>>2]|0)-(e[(c[p>>2]|0)+14>>1]|0)-2-(e[u>>1]|0);if((a[(c[n>>2]|0)+17>>0]|0)!=0?(xJ(c[n>>2]|0,c[s>>2]|0,5,c[(c[k>>2]|0)+84>>2]|0,t),(e[u>>1]|0)>(e[(c[p>>2]|0)+12>>1]|0)):0)zJ(c[p>>2]|0,c[o>>2]|0,t);c[o>>2]=(c[(c[l>>2]|0)+56>>2]|0)+(e[(c[l>>2]|0)+20>>1]&(d[(c[(c[l>>2]|0)+64>>2]|0)+((e[(c[l>>2]|0)+18>>1]|0)-1<<1)>>0]<<8|d[(c[(c[l>>2]|0)+64>>2]|0)+((e[(c[l>>2]|0)+18>>1]|0)-1<<1)+1>>0]));c[r>>2]=(c[o>>2]|0)+9;do{u=c[o>>2]|0;c[o>>2]=u+1;if(!(d[u>>0]&128))break}while((c[o>>2]|0)>>>0<(c[r>>2]|0)>>>0);c[r>>2]=(c[o>>2]|0)+9;do{u=c[o>>2]|0;c[o>>2]=u+1;u=a[u>>0]|0;h=c[q>>2]|0;c[q>>2]=h+1;a[h>>0]=u;if(!(u&128))break}while((c[o>>2]|0)>>>0<(c[r>>2]|0)>>>0);sL(c[k>>2]|0,e[(c[k>>2]|0)+18>>1]|0,c[m>>2]|0,(c[q>>2]|0)-(c[m>>2]|0)|0,0,c[(c[l>>2]|0)+84>>2]|0,t);Xs((c[(c[k>>2]|0)+56>>2]|0)+((d[(c[k>>2]|0)+5>>0]|0)+8)|0,c[s>>2]|0);qB(c[p>>2]|0)}c[j>>2]=c[t>>2];u=c[j>>2]|0;i=v;return u|0}function wL(f,g,h,j,k){f=f|0;g=g|0;h=h|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,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; +Da=i;i=i+448|0;ga=Da+412|0;ha=Da+408|0;l=Da+404|0;Q=Da+400|0;ia=Da+396|0;C=Da+392|0;za=Da+388|0;t=Da+384|0;wa=Da+380|0;ya=Da+376|0;pa=Da+372|0;Y=Da+368|0;H=Da+364|0;Z=Da+360|0;Aa=Da+356|0;ua=Da+430|0;va=Da+352|0;Ca=Da+348|0;L=Da+344|0;q=Da+340|0;W=Da+336|0;A=Da+332|0;la=Da+320|0;ka=Da+300|0;K=Da+296|0;p=Da+288|0;na=Da+264|0;oa=Da+244|0;Ba=Da+224|0;o=Da+220|0;M=Da+216|0;ja=Da+432|0;S=Da+196|0;E=Da+176|0;D=Da+420|0;ma=Da+160|0;m=Da+152|0;v=Da+148|0;r=Da+144|0;n=Da+140|0;s=Da+418|0;x=Da+136|0;y=Da+132|0;z=Da+416|0;w=Da+128|0;u=Da+124|0;B=Da+120|0;P=Da+116|0;O=Da+112|0;N=Da+108|0;F=Da+104|0;I=Da+100|0;G=Da+96|0;J=Da+92|0;aa=Da+88|0;R=Da+84|0;T=Da+80|0;fa=Da+76|0;U=Da+72|0;V=Da+68|0;_=Da+64|0;ca=Da+60|0;$=Da+56|0;da=Da+52|0;ea=Da+48|0;ba=Da+44|0;X=Da;sa=Da+40|0;qa=Da+36|0;ra=Da+32|0;xa=Da+28|0;ta=Da+24|0;c[ha>>2]=f;c[l>>2]=g;c[Q>>2]=h;c[ia>>2]=j;c[C>>2]=k;c[t>>2]=0;c[wa>>2]=0;c[Aa>>2]=0;c[q>>2]=0;c[W>>2]=0;a[ja>>0]=0;a[ja+1>>0]=0;a[ja+2>>0]=0;a[ja+3>>0]=0;a[ja+4>>0]=0;c[ma>>2]=0;c[ma+8>>2]=0;c[za>>2]=c[(c[ha>>2]|0)+52>>2];if(!(c[Q>>2]|0)){c[ga>>2]=7;Ca=c[ga>>2]|0;i=Da;return Ca|0}c[pa>>2]=(d[(c[ha>>2]|0)+1>>0]|0)+(e[(c[ha>>2]|0)+18>>1]|0);if((c[pa>>2]|0)<2)c[Z>>2]=0;else{do if(c[l>>2]|0)if((c[l>>2]|0)==(c[pa>>2]|0)){c[Z>>2]=(c[pa>>2]|0)-2+(c[C>>2]|0);break}else{c[Z>>2]=(c[l>>2]|0)-1;break}else c[Z>>2]=0;while(0);c[pa>>2]=2-(c[C>>2]|0)}c[ya>>2]=(c[pa>>2]|0)+1;l=c[ha>>2]|0;if(((c[pa>>2]|0)+(c[Z>>2]|0)-(d[(c[ha>>2]|0)+1>>0]|0)|0)==(e[(c[ha>>2]|0)+18>>1]|0))c[K>>2]=(c[(c[ha>>2]|0)+56>>2]|0)+((d[l+5>>0]|0)+8);else c[K>>2]=(c[l+56>>2]|0)+(e[(c[ha>>2]|0)+20>>1]&(d[(c[(c[ha>>2]|0)+64>>2]|0)+((c[pa>>2]|0)+(c[Z>>2]|0)-(d[(c[ha>>2]|0)+1>>0]|0)<<1)>>0]<<8|d[(c[(c[ha>>2]|0)+64>>2]|0)+((c[pa>>2]|0)+(c[Z>>2]|0)-(d[(c[ha>>2]|0)+1>>0]|0)<<1)+1>>0]));c[M>>2]=$q(c[K>>2]|0)|0;while(1){c[Aa>>2]=_E(c[za>>2]|0,c[M>>2]|0,la+(c[pa>>2]<<2)|0,0,0)|0;if(c[Aa>>2]|0){h=16;break}c[t>>2]=(c[t>>2]|0)+(1+(e[(c[la+(c[pa>>2]<<2)>>2]|0)+18>>1]|0)+(d[(c[la+(c[pa>>2]<<2)>>2]|0)+1>>0]|0));f=c[pa>>2]|0;c[pa>>2]=f+-1;if(!f){h=26;break}if(((c[pa>>2]|0)+(c[Z>>2]|0)|0)==(e[(c[ha>>2]|0)+22>>1]|0)?(d[(c[ha>>2]|0)+1>>0]|0)!=0:0){c[p+(c[pa>>2]<<2)>>2]=c[(c[ha>>2]|0)+32>>2];c[M>>2]=$q(c[p+(c[pa>>2]<<2)>>2]|0)|0;f=(Yb[c[(c[ha>>2]|0)+76>>2]&255](c[ha>>2]|0,c[p+(c[pa>>2]<<2)>>2]|0)|0)&65535;c[Ba+(c[pa>>2]<<2)>>2]=f;a[(c[ha>>2]|0)+1>>0]=0;continue}c[p+(c[pa>>2]<<2)>>2]=(c[(c[ha>>2]|0)+56>>2]|0)+(e[(c[ha>>2]|0)+20>>1]&(d[(c[(c[ha>>2]|0)+64>>2]|0)+((c[pa>>2]|0)+(c[Z>>2]|0)-(d[(c[ha>>2]|0)+1>>0]|0)<<1)>>0]<<8|d[(c[(c[ha>>2]|0)+64>>2]|0)+((c[pa>>2]|0)+(c[Z>>2]|0)-(d[(c[ha>>2]|0)+1>>0]|0)<<1)+1>>0]));c[M>>2]=$q(c[p+(c[pa>>2]<<2)>>2]|0)|0;f=(Yb[c[(c[ha>>2]|0)+76>>2]&255](c[ha>>2]|0,c[p+(c[pa>>2]<<2)>>2]|0)|0)&65535;c[Ba+(c[pa>>2]<<2)>>2]=f;if(e[(c[za>>2]|0)+22>>1]&4){c[m>>2]=(c[p+(c[pa>>2]<<2)>>2]|0)-(c[(c[ha>>2]|0)+56>>2]|0);if(((c[m>>2]|0)+(c[Ba+(c[pa>>2]<<2)>>2]|0)|0)>(c[(c[za>>2]|0)+36>>2]|0)){h=23;break}iR((c[Q>>2]|0)+(c[m>>2]|0)|0,c[p+(c[pa>>2]<<2)>>2]|0,c[Ba+(c[pa>>2]<<2)>>2]|0)|0;c[p+(c[pa>>2]<<2)>>2]=(c[Q>>2]|0)+((c[p+(c[pa>>2]<<2)>>2]|0)-(c[(c[ha>>2]|0)+56>>2]|0))}rL(c[ha>>2]|0,(c[pa>>2]|0)+(c[Z>>2]|0)-(d[(c[ha>>2]|0)+1>>0]|0)|0,c[Ba+(c[pa>>2]<<2)>>2]|0,Aa)}a:do if((h|0)==16)kR(la|0,0,(c[pa>>2]|0)+1<<2|0)|0;else if((h|0)==23){c[Aa>>2]=Lj(62677)|0;kR(la|0,0,(c[pa>>2]|0)+1<<2|0)|0}else if((h|0)==26){c[t>>2]=(c[t>>2]|0)+3&-4;c[A>>2]=(c[t>>2]<<2)+(c[t>>2]<<1)+(c[(c[za>>2]|0)+32>>2]|0);c[ma+8>>2]=zi(c[A>>2]|0)|0;if(!(c[ma+8>>2]|0)){c[Aa>>2]=7;break}c[ma+12>>2]=(c[ma+8>>2]|0)+(c[t>>2]<<2);c[o>>2]=(c[ma+12>>2]|0)+(c[t>>2]<<1);c[ma+4>>2]=c[la>>2];b[ua>>1]=d[(c[ma+4>>2]|0)+4>>0]<<2;c[va>>2]=d[(c[ma+4>>2]|0)+3>>0];c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[ya>>2]|0))break;c[v>>2]=c[la+(c[pa>>2]<<2)>>2];c[r>>2]=e[(c[v>>2]|0)+18>>1];c[n>>2]=c[(c[v>>2]|0)+56>>2];b[s>>1]=b[(c[v>>2]|0)+20>>1]|0;c[x>>2]=(c[n>>2]|0)+(e[(c[v>>2]|0)+14>>1]|0);if((d[c[(c[v>>2]|0)+56>>2]>>0]|0)!=(d[c[(c[la>>2]|0)+56>>2]>>0]|0)){h=31;break}kR((c[ma+12>>2]|0)+(c[ma>>2]<<1)|0,0,(c[r>>2]|0)+(d[(c[v>>2]|0)+1>>0]|0)<<1|0)|0;b:do if((d[(c[v>>2]|0)+1>>0]|0)>0){c[r>>2]=e[(c[v>>2]|0)+22>>1];c[Y>>2]=0;while(1){if((c[Y>>2]|0)>=(c[r>>2]|0))break;c[(c[ma+8>>2]|0)+(c[ma>>2]<<2)>>2]=(c[n>>2]|0)+(e[s>>1]&(d[c[x>>2]>>0]<<8|d[(c[x>>2]|0)+1>>0]));c[x>>2]=(c[x>>2]|0)+2;c[ma>>2]=(c[ma>>2]|0)+1;c[Y>>2]=(c[Y>>2]|0)+1}c[H>>2]=0;while(1){if((c[H>>2]|0)>=(d[(c[v>>2]|0)+1>>0]|0))break b;c[(c[ma+8>>2]|0)+(c[ma>>2]<<2)>>2]=c[(c[v>>2]|0)+32+(c[H>>2]<<2)>>2];c[ma>>2]=(c[ma>>2]|0)+1;c[H>>2]=(c[H>>2]|0)+1}}while(0);c[y>>2]=(c[n>>2]|0)+(e[(c[v>>2]|0)+14>>1]|0)+(e[(c[v>>2]|0)+18>>1]<<1);while(1){if((c[x>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break;c[(c[ma+8>>2]|0)+(c[ma>>2]<<2)>>2]=(c[n>>2]|0)+(e[s>>1]&(d[c[x>>2]>>0]<<8|d[(c[x>>2]|0)+1>>0]));c[x>>2]=(c[x>>2]|0)+2;c[ma>>2]=(c[ma>>2]|0)+1}c[oa+(c[pa>>2]<<2)>>2]=c[ma>>2];if(!((c[va>>2]|0)!=0?1:(c[pa>>2]|0)>=((c[ya>>2]|0)-1|0))){b[z>>1]=c[Ba+(c[pa>>2]<<2)>>2];b[(c[ma+12>>2]|0)+(c[ma>>2]<<1)>>1]=b[z>>1]|0;c[w>>2]=(c[o>>2]|0)+(c[q>>2]|0);c[q>>2]=(c[q>>2]|0)+(e[z>>1]|0);iR(c[w>>2]|0,c[p+(c[pa>>2]<<2)>>2]|0,e[z>>1]|0)|0;c[(c[ma+8>>2]|0)+(c[ma>>2]<<2)>>2]=(c[w>>2]|0)+(e[ua>>1]|0);b[(c[ma+12>>2]|0)+(c[ma>>2]<<1)>>1]=(e[(c[ma+12>>2]|0)+(c[ma>>2]<<1)>>1]|0)-(e[ua>>1]|0);c:do if(a[(c[v>>2]|0)+4>>0]|0)while(1){if((e[(c[ma+12>>2]|0)+(c[ma>>2]<<1)>>1]|0)>=4)break c;A=c[q>>2]|0;c[q>>2]=A+1;a[(c[o>>2]|0)+A>>0]=0;A=(c[ma+12>>2]|0)+(c[ma>>2]<<1)|0;b[A>>1]=(b[A>>1]|0)+1<<16>>16}else{A=c[(c[ma+8>>2]|0)+(c[ma>>2]<<2)>>2]|0;t=(c[(c[v>>2]|0)+56>>2]|0)+8|0;a[A>>0]=a[t>>0]|0;a[A+1>>0]=a[t+1>>0]|0;a[A+2>>0]=a[t+2>>0]|0;a[A+3>>0]=a[t+3>>0]|0}while(0);c[ma>>2]=(c[ma>>2]|0)+1}c[pa>>2]=(c[pa>>2]|0)+1}if((h|0)==31){c[Aa>>2]=Lj(62744)|0;break}c[Ca>>2]=(c[(c[za>>2]|0)+36>>2]|0)-12+(e[ua>>1]|0);c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[ya>>2]|0))break;c[u>>2]=c[la+(c[pa>>2]<<2)>>2];c[Ba+(c[pa>>2]<<2)>>2]=(c[Ca>>2]|0)-(e[(c[u>>2]|0)+16>>1]|0);if((c[Ba+(c[pa>>2]<<2)>>2]|0)<0){h=52;break}c[Y>>2]=0;while(1){if((c[Y>>2]|0)>=(d[(c[u>>2]|0)+1>>0]|0))break;z=2+((Yb[c[(c[u>>2]|0)+76>>2]&255](c[u>>2]|0,c[(c[u>>2]|0)+32+(c[Y>>2]<<2)>>2]|0)|0)&65535)|0;A=Ba+(c[pa>>2]<<2)|0;c[A>>2]=(c[A>>2]|0)+z;c[Y>>2]=(c[Y>>2]|0)+1}c[na+(c[pa>>2]<<2)>>2]=c[oa+(c[pa>>2]<<2)>>2];c[pa>>2]=(c[pa>>2]|0)+1}if((h|0)==52){c[Aa>>2]=Lj(62842)|0;break}c[H>>2]=c[ya>>2];c[pa>>2]=0;d:while(1){if((c[pa>>2]|0)>=(c[H>>2]|0)){h=83;break}while(1){if((c[Ba+(c[pa>>2]<<2)>>2]|0)<=(c[Ca>>2]|0))break;if(((c[pa>>2]|0)+1|0)>=(c[H>>2]|0)){c[H>>2]=(c[pa>>2]|0)+2;if((c[H>>2]|0)>5){h=62;break d}c[Ba+((c[H>>2]|0)-1<<2)>>2]=0;c[na+((c[H>>2]|0)-1<<2)>>2]=c[ma>>2]}c[B>>2]=2+((xL(ma,(c[na+(c[pa>>2]<<2)>>2]|0)-1|0)|0)&65535);A=Ba+(c[pa>>2]<<2)|0;c[A>>2]=(c[A>>2]|0)-(c[B>>2]|0);do if(!(c[va>>2]|0))if((c[na+(c[pa>>2]<<2)>>2]|0)<(c[ma>>2]|0)){c[B>>2]=2+((xL(ma,c[na+(c[pa>>2]<<2)>>2]|0)|0)&65535);break}else{c[B>>2]=0;break}while(0);A=Ba+((c[pa>>2]|0)+1<<2)|0;c[A>>2]=(c[A>>2]|0)+(c[B>>2]|0);A=na+(c[pa>>2]<<2)|0;c[A>>2]=(c[A>>2]|0)+-1}while(1){if((c[na+(c[pa>>2]<<2)>>2]|0)>=(c[ma>>2]|0))break;c[B>>2]=2+((xL(ma,c[na+(c[pa>>2]<<2)>>2]|0)|0)&65535);if(((c[Ba+(c[pa>>2]<<2)>>2]|0)+(c[B>>2]|0)|0)>(c[Ca>>2]|0))break;A=Ba+(c[pa>>2]<<2)|0;c[A>>2]=(c[A>>2]|0)+(c[B>>2]|0);A=na+(c[pa>>2]<<2)|0;c[A>>2]=(c[A>>2]|0)+1;do if(!(c[va>>2]|0))if((c[na+(c[pa>>2]<<2)>>2]|0)<(c[ma>>2]|0)){c[B>>2]=2+((xL(ma,c[na+(c[pa>>2]<<2)>>2]|0)|0)&65535);break}else{c[B>>2]=0;break}while(0);A=Ba+((c[pa>>2]|0)+1<<2)|0;c[A>>2]=(c[A>>2]|0)-(c[B>>2]|0)}l=c[pa>>2]|0;if((c[na+(c[pa>>2]<<2)>>2]|0)<(c[ma>>2]|0)){if((c[pa>>2]|0)>0)h=c[na+((c[pa>>2]|0)-1<<2)>>2]|0;else h=0;if((c[na+(l<<2)>>2]|0)<=(h|0)){h=81;break}}else c[H>>2]=l+1;c[pa>>2]=(c[pa>>2]|0)+1}if((h|0)==62){c[Aa>>2]=Lj(62854)|0;break}else if((h|0)==81){c[Aa>>2]=Lj(62887)|0;break}else if((h|0)==83){c[pa>>2]=(c[H>>2]|0)-1;while(1){if((c[pa>>2]|0)<=0)break;c[P>>2]=c[Ba+(c[pa>>2]<<2)>>2];c[O>>2]=c[Ba+((c[pa>>2]|0)-1<<2)>>2];c[N>>2]=(c[na+((c[pa>>2]|0)-1<<2)>>2]|0)-1;c[F>>2]=(c[N>>2]|0)+1-(c[va>>2]|0);xL(ma,c[F>>2]|0)|0;do{xL(ma,c[N>>2]|0)|0;if(c[P>>2]|0){if(c[C>>2]|0)break;if(((c[P>>2]|0)+(e[(c[ma+12>>2]|0)+(c[F>>2]<<1)>>1]|0)+2|0)>((c[O>>2]|0)-((e[(c[ma+12>>2]|0)+(c[N>>2]<<1)>>1]|0)+2)|0))break}c[P>>2]=(c[P>>2]|0)+((e[(c[ma+12>>2]|0)+(c[F>>2]<<1)>>1]|0)+2);c[O>>2]=(c[O>>2]|0)-((e[(c[ma+12>>2]|0)+(c[N>>2]<<1)>>1]|0)+2);c[na+((c[pa>>2]|0)-1<<2)>>2]=c[N>>2];c[N>>2]=(c[N>>2]|0)+-1;c[F>>2]=(c[F>>2]|0)+-1}while((c[N>>2]|0)>=0);c[Ba+(c[pa>>2]<<2)>>2]=c[P>>2];c[Ba+((c[pa>>2]|0)-1<<2)>>2]=c[O>>2];if((c[pa>>2]|0)>1)l=c[na+((c[pa>>2]|0)-2<<2)>>2]|0;else l=0;if((c[na+((c[pa>>2]|0)-1<<2)>>2]|0)<=(l|0)){h=93;break}c[pa>>2]=(c[pa>>2]|0)+-1}if((h|0)==93){c[Aa>>2]=Lj(62929)|0;break}c[L>>2]=d[c[(c[la>>2]|0)+56>>2]>>0];c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[H>>2]|0))break;if((c[pa>>2]|0)<(c[ya>>2]|0)){P=c[la+(c[pa>>2]<<2)>>2]|0;c[ka+(c[pa>>2]<<2)>>2]=P;c[I>>2]=P;c[la+(c[pa>>2]<<2)>>2]=0;c[Aa>>2]=Dg(c[(c[I>>2]|0)+72>>2]|0)|0;c[wa>>2]=(c[wa>>2]|0)+1;if(c[Aa>>2]|0)break a}else{c[Aa>>2]=tJ(c[za>>2]|0,I,M,(c[C>>2]|0)!=0?1:c[M>>2]|0,0)|0;if(c[Aa>>2]|0)break a;wK(c[I>>2]|0,c[L>>2]|0);c[ka+(c[pa>>2]<<2)>>2]=c[I>>2];c[wa>>2]=(c[wa>>2]|0)+1;c[oa+(c[pa>>2]<<2)>>2]=c[ma>>2];if((a[(c[za>>2]|0)+17>>0]|0)!=0?(xJ(c[za>>2]|0,c[(c[I>>2]|0)+84>>2]|0,5,c[(c[ha>>2]|0)+84>>2]|0,Aa),(c[Aa>>2]|0)!=0):0)break a}c[pa>>2]=(c[pa>>2]|0)+1}c[pa>>2]=0;e:while(1){if((c[pa>>2]|0)>=(c[wa>>2]|0))break;P=c[(c[ka+(c[pa>>2]<<2)>>2]|0)+84>>2]|0;c[S+(c[pa>>2]<<2)>>2]=P;c[E+(c[pa>>2]<<2)>>2]=P;b[D+(c[pa>>2]<<1)>>1]=b[(c[(c[ka+(c[pa>>2]<<2)>>2]|0)+72>>2]|0)+24>>1]|0;c[Y>>2]=0;while(1){if((c[Y>>2]|0)>=(c[pa>>2]|0))break;if((c[S+(c[Y>>2]<<2)>>2]|0)==(c[S+(c[pa>>2]<<2)>>2]|0)){h=108;break e}c[Y>>2]=(c[Y>>2]|0)+1}c[pa>>2]=(c[pa>>2]|0)+1}if((h|0)==108){c[Aa>>2]=Lj(63003)|0;break}c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[wa>>2]|0))break;c[G>>2]=0;c[Y>>2]=1;while(1){if((c[Y>>2]|0)>=(c[wa>>2]|0))break;if((c[E+(c[Y>>2]<<2)>>2]|0)>>>0<(c[E+(c[G>>2]<<2)>>2]|0)>>>0)c[G>>2]=c[Y>>2];c[Y>>2]=(c[Y>>2]|0)+1}c[M>>2]=c[E+(c[G>>2]<<2)>>2];c[E+(c[G>>2]<<2)>>2]=-1;if((c[G>>2]|0)!=(c[pa>>2]|0)){if((c[G>>2]|0)>(c[pa>>2]|0))yL(c[(c[ka+(c[G>>2]<<2)>>2]|0)+72>>2]|0,(c[(c[za>>2]|0)+44>>2]|0)+(c[G>>2]|0)+1|0,0);yL(c[(c[ka+(c[pa>>2]<<2)>>2]|0)+72>>2]|0,c[M>>2]|0,b[D+(c[G>>2]<<1)>>1]|0);c[(c[ka+(c[pa>>2]<<2)>>2]|0)+84>>2]=c[M>>2]}c[pa>>2]=(c[pa>>2]|0)+1}Xs(c[K>>2]|0,c[(c[ka+((c[wa>>2]|0)-1<<2)>>2]|0)+84>>2]|0);if((c[L>>2]&8|0)==0?(c[ya>>2]|0)!=(c[wa>>2]|0):0){c[J>>2]=c[((c[wa>>2]|0)>(c[ya>>2]|0)?ka:la)+((c[ya>>2]|0)-1<<2)>>2];P=(c[(c[ka+((c[wa>>2]|0)-1<<2)>>2]|0)+56>>2]|0)+8|0;O=(c[(c[J>>2]|0)+56>>2]|0)+8|0;a[P>>0]=a[O>>0]|0;a[P+1>>0]=a[O+1>>0]|0;a[P+2>>0]=a[O+2>>0]|0;a[P+3>>0]=a[O+3>>0]|0}f:do if(a[(c[za>>2]|0)+17>>0]|0){c[aa>>2]=c[ka>>2];c[R>>2]=c[(c[aa>>2]|0)+56>>2];c[T>>2]=(e[(c[aa>>2]|0)+18>>1]|0)+(d[(c[aa>>2]|0)+1>>0]|0);c[fa>>2]=c[(c[za>>2]|0)+36>>2];c[U>>2]=0;c[V>>2]=0;c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[ma>>2]|0))break f;c[_>>2]=c[(c[ma+8>>2]|0)+(c[pa>>2]<<2)>>2];if((c[pa>>2]|0)==(c[T>>2]|0)){P=(c[V>>2]|0)+1|0;c[V>>2]=P;l=c[V>>2]|0;if((P|0)<(c[wa>>2]|0))l=c[ka+(l<<2)>>2]|0;else l=c[la+(l<<2)>>2]|0;c[ca>>2]=l;c[T>>2]=(c[T>>2]|0)+((e[(c[ca>>2]|0)+18>>1]|0)+(d[(c[ca>>2]|0)+1>>0]|0)+(((c[va>>2]|0)!=0^1)&1));c[R>>2]=c[(c[ca>>2]|0)+56>>2]}if(!((c[pa>>2]|0)==(c[na+(c[U>>2]<<2)>>2]|0)?(P=(c[U>>2]|0)+1|0,c[U>>2]=P,c[aa>>2]=c[ka+(P<<2)>>2],(c[va>>2]|0)==0):0))h=136;do if((h|0)==136){h=0;if((((c[V>>2]|0)<(c[wa>>2]|0)?(c[(c[aa>>2]|0)+84>>2]|0)==(c[S+(c[V>>2]<<2)>>2]|0):0)?(c[_>>2]|0)>>>0>=(c[R>>2]|0)>>>0:0)?(c[_>>2]|0)>>>0<((c[R>>2]|0)+(c[fa>>2]|0)|0)>>>0:0)break;if(!(b[ua>>1]|0)){O=c[za>>2]|0;P=$q(c[_>>2]|0)|0;xJ(O,P,5,c[(c[aa>>2]|0)+84>>2]|0,Aa)}P=(xL(ma,c[pa>>2]|0)|0)&65535;if((P|0)>(e[(c[aa>>2]|0)+12>>1]|0))zJ(c[aa>>2]|0,c[_>>2]|0,Aa);if(c[Aa>>2]|0)break a}while(0);c[pa>>2]=(c[pa>>2]|0)+1}}while(0);c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=((c[wa>>2]|0)-1|0))break;c[ba>>2]=c[ka+(c[pa>>2]<<2)>>2];c[Y>>2]=c[na+(c[pa>>2]<<2)>>2];c[$>>2]=c[(c[ma+8>>2]|0)+(c[Y>>2]<<2)>>2];c[ea>>2]=(e[(c[ma+12>>2]|0)+(c[Y>>2]<<1)>>1]|0)+(e[ua>>1]|0);c[da>>2]=(c[Q>>2]|0)+(c[W>>2]|0);do if(a[(c[ba>>2]|0)+4>>0]|0){if(c[va>>2]|0){c[Y>>2]=(c[Y>>2]|0)+-1;Ub[c[(c[ba>>2]|0)+80>>2]&255](c[ba>>2]|0,c[(c[ma+8>>2]|0)+(c[Y>>2]<<2)>>2]|0,X);c[$>>2]=c[da>>2];fa=X;c[ea>>2]=4+(kI((c[$>>2]|0)+4|0,c[fa>>2]|0,c[fa+4>>2]|0)|0);c[da>>2]=0;break}c[$>>2]=(c[$>>2]|0)+-4;if((e[(c[ma+12>>2]|0)+(c[Y>>2]<<1)>>1]|0)==4)c[ea>>2]=(Yb[c[(c[ha>>2]|0)+76>>2]&255](c[ha>>2]|0,c[$>>2]|0)|0)&65535}else{fa=(c[(c[ba>>2]|0)+56>>2]|0)+8|0;ca=c[$>>2]|0;a[fa>>0]=a[ca>>0]|0;a[fa+1>>0]=a[ca+1>>0]|0;a[fa+2>>0]=a[ca+2>>0]|0;a[fa+3>>0]=a[ca+3>>0]|0}while(0);c[W>>2]=(c[W>>2]|0)+(c[ea>>2]|0);sL(c[ha>>2]|0,(c[Z>>2]|0)+(c[pa>>2]|0)|0,c[$>>2]|0,c[ea>>2]|0,c[da>>2]|0,c[(c[ba>>2]|0)+84>>2]|0,Aa);if(c[Aa>>2]|0)break a;c[pa>>2]=(c[pa>>2]|0)+1}c[pa>>2]=1-(c[wa>>2]|0);while(1){if((c[pa>>2]|0)>=(c[wa>>2]|0))break;fa=c[pa>>2]|0;c[sa>>2]=(c[pa>>2]|0)<0?0-fa|0:fa;do if(!(a[ja+(c[sa>>2]|0)>>0]|0)){if((c[pa>>2]|0)<0?(c[oa+((c[sa>>2]|0)-1<<2)>>2]|0)<(c[na+((c[sa>>2]|0)-1<<2)>>2]|0):0)break;if(!(c[sa>>2]|0)){c[ra>>2]=0;c[qa>>2]=0;c[xa>>2]=c[na>>2]}else{if((c[sa>>2]|0)<(c[ya>>2]|0))l=(c[oa+((c[sa>>2]|0)-1<<2)>>2]|0)+(((c[va>>2]|0)!=0^1)&1)|0;else l=c[ma>>2]|0;c[ra>>2]=l;c[qa>>2]=(c[na+((c[sa>>2]|0)-1<<2)>>2]|0)+(((c[va>>2]|0)!=0^1)&1);c[xa>>2]=(c[na+(c[sa>>2]<<2)>>2]|0)-(c[qa>>2]|0)}c[Aa>>2]=zL(c[ka+(c[sa>>2]<<2)>>2]|0,c[ra>>2]|0,c[qa>>2]|0,c[xa>>2]|0,ma)|0;if(c[Aa>>2]|0)break a;fa=ja+(c[sa>>2]|0)|0;a[fa>>0]=(a[fa>>0]|0)+1<<24>>24;b[(c[ka+(c[sa>>2]<<2)>>2]|0)+16>>1]=(c[Ca>>2]|0)-(c[Ba+(c[sa>>2]<<2)>>2]|0)}while(0);c[pa>>2]=(c[pa>>2]|0)+1}if(((c[ia>>2]|0)!=0?(e[(c[ha>>2]|0)+18>>1]|0)==0:0)?(d[(c[ha>>2]|0)+5>>0]|0)<=(e[(c[ka>>2]|0)+16>>1]|0):0){c[Aa>>2]=AL(c[ka>>2]|0)|0;BL(c[ka>>2]|0,c[ha>>2]|0,Aa);vK(c[ka>>2]|0,Aa)}else h=174;g:do if((h|0)==174?!((b[ua>>1]|0)!=0?1:(d[(c[za>>2]|0)+17>>0]|0)==0):0){c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[wa>>2]|0))break g;c[ta>>2]=$q((c[(c[ka+(c[pa>>2]<<2)>>2]|0)+56>>2]|0)+8|0)|0;xJ(c[za>>2]|0,c[ta>>2]|0,5,c[(c[ka+(c[pa>>2]<<2)>>2]|0)+84>>2]|0,Aa);c[pa>>2]=(c[pa>>2]|0)+1}}while(0);c[pa>>2]=c[wa>>2];while(1){if((c[pa>>2]|0)>=(c[ya>>2]|0))break a;vK(c[la+(c[pa>>2]<<2)>>2]|0,Aa);c[pa>>2]=(c[pa>>2]|0)+1}}}while(0);Ai(c[ma+8>>2]|0);c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[ya>>2]|0))break;qB(c[la+(c[pa>>2]<<2)>>2]|0);c[pa>>2]=(c[pa>>2]|0)+1}c[pa>>2]=0;while(1){if((c[pa>>2]|0)>=(c[wa>>2]|0))break;qB(c[ka+(c[pa>>2]<<2)>>2]|0);c[pa>>2]=(c[pa>>2]|0)+1}c[ga>>2]=c[Aa>>2];Ca=c[ga>>2]|0;i=Da;return Ca|0}function xL(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=d;if(b[(c[(c[f>>2]|0)+12>>2]|0)+(c[g>>2]<<1)>>1]|0){b[e>>1]=b[(c[(c[f>>2]|0)+12>>2]|0)+(c[g>>2]<<1)>>1]|0;a=b[e>>1]|0;i=h;return a|0}else{b[e>>1]=JL(c[f>>2]|0,c[g>>2]|0)|0;a=b[e>>1]|0;i=h;return a|0}return 0}function yL(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;h=f+4|0;g=f;j=f+8|0;c[h>>2]=a;c[g>>2]=d;b[j>>1]=e;b[(c[h>>2]|0)+24>>1]=b[j>>1]|0;AJ(c[h>>2]|0,c[g>>2]|0);i=f;return}function zL(f,g,h,j,k){f=f|0;g=g|0;h=h|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;D=i;i=i+80|0;o=D+68|0;p=D+64|0;q=D+60|0;r=D+56|0;s=D+52|0;t=D+48|0;u=D+44|0;v=D+40|0;A=D+36|0;z=D+32|0;C=D+28|0;B=D+24|0;w=D+20|0;m=D+16|0;l=D+12|0;n=D+8|0;y=D+4|0;x=D;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=j;c[t>>2]=k;c[u>>2]=c[(c[p>>2]|0)+56>>2];c[v>>2]=d[(c[p>>2]|0)+5>>0];c[A>>2]=(c[(c[p>>2]|0)+64>>2]|0)+(c[s>>2]<<1);c[z>>2]=e[(c[p>>2]|0)+18>>1];c[m>>2]=(c[q>>2]|0)+(e[(c[p>>2]|0)+18>>1]|0)+(d[(c[p>>2]|0)+1>>0]|0);c[l>>2]=(c[r>>2]|0)+(c[s>>2]|0);if((c[q>>2]|0)<(c[r>>2]|0)){c[n>>2]=DL(c[p>>2]|0,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0,c[t>>2]|0)|0;jR(c[(c[p>>2]|0)+64>>2]|0,(c[(c[p>>2]|0)+64>>2]|0)+(c[n>>2]<<1)|0,c[z>>2]<<1|0)|0;c[z>>2]=(c[z>>2]|0)-(c[n>>2]|0)}if((c[l>>2]|0)<(c[m>>2]|0)){f=DL(c[p>>2]|0,c[l>>2]|0,(c[m>>2]|0)-(c[l>>2]|0)|0,c[t>>2]|0)|0;c[z>>2]=(c[z>>2]|0)-f}c[C>>2]=(c[u>>2]|0)+((((d[(c[u>>2]|0)+((c[v>>2]|0)+5)>>0]|0)<<8|(d[(c[u>>2]|0)+((c[v>>2]|0)+5)+1>>0]|0))-1&65535)+1);a:do if((c[C>>2]|0)>>>0>=(c[A>>2]|0)>>>0){if((c[r>>2]|0)<(c[q>>2]|0)){if((c[s>>2]|0)<((c[q>>2]|0)-(c[r>>2]|0)|0))h=c[s>>2]|0;else h=(c[q>>2]|0)-(c[r>>2]|0)|0;c[y>>2]=h;c[B>>2]=c[(c[p>>2]|0)+64>>2];jR((c[B>>2]|0)+(c[y>>2]<<1)|0,c[B>>2]|0,c[z>>2]<<1|0)|0;if(EL(c[p>>2]|0,c[A>>2]|0,C,c[B>>2]|0,c[r>>2]|0,c[y>>2]|0,c[t>>2]|0)|0)break;c[z>>2]=(c[z>>2]|0)+(c[y>>2]|0)}c[w>>2]=0;while(1){if((c[w>>2]|0)>=(d[(c[p>>2]|0)+1>>0]|0|0))break;c[x>>2]=(c[q>>2]|0)+(e[(c[p>>2]|0)+22+(c[w>>2]<<1)>>1]|0)-(c[r>>2]|0);if(((c[x>>2]|0)>=0?(c[x>>2]|0)<(c[s>>2]|0):0)?(c[B>>2]=(c[(c[p>>2]|0)+64>>2]|0)+(c[x>>2]<<1),jR((c[B>>2]|0)+2|0,c[B>>2]|0,(c[z>>2]|0)-(c[x>>2]|0)<<1|0)|0,c[z>>2]=(c[z>>2]|0)+1,(EL(c[p>>2]|0,c[A>>2]|0,C,c[B>>2]|0,(c[x>>2]|0)+(c[r>>2]|0)|0,1,c[t>>2]|0)|0)!=0):0)break a;c[w>>2]=(c[w>>2]|0)+1}c[B>>2]=(c[(c[p>>2]|0)+64>>2]|0)+(c[z>>2]<<1);if(!(EL(c[p>>2]|0,c[A>>2]|0,C,c[B>>2]|0,(c[r>>2]|0)+(c[z>>2]|0)|0,(c[s>>2]|0)-(c[z>>2]|0)|0,c[t>>2]|0)|0)){b[(c[p>>2]|0)+18>>1]=c[s>>2];a[(c[p>>2]|0)+1>>0]=0;a[(c[u>>2]|0)+((c[v>>2]|0)+3)>>0]=(e[(c[p>>2]|0)+18>>1]|0)>>8;a[(c[u>>2]|0)+((c[v>>2]|0)+3)+1>>0]=b[(c[p>>2]|0)+18>>1];a[(c[u>>2]|0)+((c[v>>2]|0)+5)>>0]=(c[C>>2]|0)-(c[u>>2]|0)>>8;a[(c[u>>2]|0)+((c[v>>2]|0)+5)+1>>0]=(c[C>>2]|0)-(c[u>>2]|0);c[o>>2]=0;C=c[o>>2]|0;i=D;return C|0}}while(0);FL(c[t>>2]|0,c[r>>2]|0,c[s>>2]|0);c[o>>2]=GL(c[p>>2]|0,c[s>>2]|0,(c[(c[t>>2]|0)+8>>2]|0)+(c[r>>2]<<2)|0,(c[(c[t>>2]|0)+12>>2]|0)+(c[r>>2]<<1)|0)|0;C=c[o>>2]|0;i=D;return C|0}function AL(b){b=b|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+80|0;f=y+64|0;g=y+60|0;m=y+56|0;r=y+52|0;l=y+48|0;s=y+44|0;v=y+40|0;j=y+36|0;h=y+32|0;p=y+28|0;k=y+24|0;u=y+20|0;t=y+16|0;n=y+12|0;o=y+8|0;q=y+4|0;w=y;c[g>>2]=b;c[u>>2]=0;b=c[(c[g>>2]|0)+56>>2]|0;c[k>>2]=b;c[t>>2]=b;c[l>>2]=d[(c[g>>2]|0)+5>>0];c[j>>2]=e[(c[g>>2]|0)+14>>1];c[p>>2]=e[(c[g>>2]|0)+18>>1];c[v>>2]=c[(c[(c[g>>2]|0)+52>>2]|0)+36>>2];c[h>>2]=c[v>>2];c[n>>2]=(c[j>>2]|0)+(c[p>>2]<<1);c[o>>2]=(c[v>>2]|0)-4;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[p>>2]|0)){x=14;break}c[q>>2]=(c[k>>2]|0)+((c[j>>2]|0)+(c[m>>2]<<1));c[r>>2]=(d[c[q>>2]>>0]|0)<<8|(d[(c[q>>2]|0)+1>>0]|0);if((c[r>>2]|0)<(c[n>>2]|0)){x=5;break}if((c[r>>2]|0)>(c[o>>2]|0)){x=5;break}c[s>>2]=(Yb[c[(c[g>>2]|0)+76>>2]&255](c[g>>2]|0,(c[t>>2]|0)+(c[r>>2]|0)|0)|0)&65535;c[h>>2]=(c[h>>2]|0)-(c[s>>2]|0);if((c[h>>2]|0)<(c[n>>2]|0)){x=8;break}if(((c[r>>2]|0)+(c[s>>2]|0)|0)>(c[v>>2]|0)){x=8;break}a[c[q>>2]>>0]=c[h>>2]>>8;a[(c[q>>2]|0)+1>>0]=c[h>>2];if(!(c[u>>2]|0)){if((c[h>>2]|0)!=(c[r>>2]|0)){c[u>>2]=CL(c[c[(c[g>>2]|0)+52>>2]>>2]|0)|0;c[w>>2]=(d[(c[k>>2]|0)+((c[l>>2]|0)+5)>>0]|0)<<8|(d[(c[k>>2]|0)+((c[l>>2]|0)+5)+1>>0]|0);iR((c[u>>2]|0)+(c[w>>2]|0)|0,(c[k>>2]|0)+(c[w>>2]|0)|0,(c[h>>2]|0)+(c[s>>2]|0)-(c[w>>2]|0)|0)|0;c[t>>2]=c[u>>2];x=12}}else x=12;if((x|0)==12){x=0;iR((c[k>>2]|0)+(c[h>>2]|0)|0,(c[t>>2]|0)+(c[r>>2]|0)|0,c[s>>2]|0)|0}c[m>>2]=(c[m>>2]|0)+1}if((x|0)==5){c[f>>2]=Lj(56934)|0;x=c[f>>2]|0;i=y;return x|0}else if((x|0)==8){c[f>>2]=Lj(56940)|0;x=c[f>>2]|0;i=y;return x|0}else if((x|0)==14){a[(c[k>>2]|0)+((c[l>>2]|0)+5)>>0]=c[h>>2]>>8;a[(c[k>>2]|0)+((c[l>>2]|0)+5)+1>>0]=c[h>>2];a[(c[k>>2]|0)+((c[l>>2]|0)+1)>>0]=0;a[(c[k>>2]|0)+((c[l>>2]|0)+2)>>0]=0;a[(c[k>>2]|0)+((c[l>>2]|0)+7)>>0]=0;kR((c[k>>2]|0)+(c[n>>2]|0)|0,0,(c[h>>2]|0)-(c[n>>2]|0)|0)|0;if(((c[h>>2]|0)-(c[n>>2]|0)|0)!=(e[(c[g>>2]|0)+16>>1]|0|0)){c[f>>2]=Lj(56964)|0;x=c[f>>2]|0;i=y;return x|0}else{c[f>>2]=0;x=c[f>>2]|0;i=y;return x|0}}return 0}function BL(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;h=s+36|0;j=s+32|0;k=s+28|0;q=s+24|0;l=s+20|0;m=s+16|0;o=s+12|0;p=s+8|0;r=s+4|0;n=s;c[h>>2]=b;c[j>>2]=f;c[k>>2]=g;if(c[c[k>>2]>>2]|0){i=s;return}c[q>>2]=c[(c[h>>2]|0)+52>>2];c[l>>2]=c[(c[h>>2]|0)+56>>2];c[m>>2]=c[(c[j>>2]|0)+56>>2];c[o>>2]=d[(c[h>>2]|0)+5>>0];c[p>>2]=(c[(c[j>>2]|0)+84>>2]|0)==1?100:0;c[n>>2]=d[(c[l>>2]|0)+((c[o>>2]|0)+5)>>0]<<8|d[(c[l>>2]|0)+((c[o>>2]|0)+5)+1>>0];iR((c[m>>2]|0)+(c[n>>2]|0)|0,(c[l>>2]|0)+(c[n>>2]|0)|0,(c[(c[q>>2]|0)+36>>2]|0)-(c[n>>2]|0)|0)|0;iR((c[m>>2]|0)+(c[p>>2]|0)|0,(c[l>>2]|0)+(c[o>>2]|0)|0,(e[(c[h>>2]|0)+14>>1]|0)+(e[(c[h>>2]|0)+18>>1]<<1)|0)|0;a[c[j>>2]>>0]=0;c[r>>2]=Kt(c[j>>2]|0)|0;if(c[r>>2]|0){c[c[k>>2]>>2]=c[r>>2];i=s;return}if(!(a[(c[q>>2]|0)+17>>0]|0)){i=s;return}r=wJ(c[j>>2]|0)|0;c[c[k>>2]>>2]=r;i=s;return}function CL(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+208>>2]|0}function DL(a,b,f,g){a=a|0;b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=i;i=i+64|0;h=w+56|0;j=w+52|0;x=w+48|0;y=w+44|0;k=w+40|0;l=w+36|0;q=w+32|0;s=w+28|0;o=w+24|0;m=w+20|0;n=w+16|0;r=w+12|0;u=w+8|0;p=w+4|0;t=w;c[j>>2]=a;c[x>>2]=b;c[y>>2]=f;c[k>>2]=g;c[l>>2]=c[(c[j>>2]|0)+56>>2];c[q>>2]=(c[l>>2]|0)+(c[(c[(c[j>>2]|0)+52>>2]|0)+36>>2]|0);c[s>>2]=(c[l>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)+8+(d[(c[j>>2]|0)+6>>0]|0));c[o>>2]=0;c[n>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[r>>2]=0;c[u>>2]=0;c[m>>2]=c[x>>2];while(1){if((c[m>>2]|0)>=(c[n>>2]|0))break;c[p>>2]=c[(c[(c[k>>2]|0)+8>>2]|0)+(c[m>>2]<<2)>>2];if((c[p>>2]|0)>>>0>=(c[s>>2]|0)>>>0?(c[p>>2]|0)>>>0<(c[q>>2]|0)>>>0:0){c[t>>2]=e[(c[(c[k>>2]|0)+12>>2]|0)+(c[m>>2]<<1)>>1];if((c[r>>2]|0)!=((c[p>>2]|0)+(c[t>>2]|0)|0)){if(c[r>>2]|0)IL(c[j>>2]|0,(c[r>>2]|0)-(c[l>>2]|0)&65535,c[u>>2]&65535)|0;c[r>>2]=c[p>>2];c[u>>2]=c[t>>2];if(((c[r>>2]|0)+(c[t>>2]|0)|0)>>>0>(c[q>>2]|0)>>>0){v=9;break}}else{c[r>>2]=c[p>>2];c[u>>2]=(c[u>>2]|0)+(c[t>>2]|0)}c[o>>2]=(c[o>>2]|0)+1}c[m>>2]=(c[m>>2]|0)+1}if((v|0)==9){c[h>>2]=0;y=c[h>>2]|0;i=w;return y|0}if(c[r>>2]|0)IL(c[j>>2]|0,(c[r>>2]|0)-(c[l>>2]|0)&65535,c[u>>2]&65535)|0;c[h>>2]=c[o>>2];y=c[h>>2]|0;i=w;return y|0}function EL(b,e,f,g,h,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|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;y=i;i=i+64|0;l=y+56|0;m=y+52|0;n=y+48|0;o=y+44|0;p=y+40|0;z=y+36|0;A=y+32|0;q=y+28|0;s=y+24|0;r=y+20|0;u=y+16|0;t=y+12|0;x=y+8|0;w=y+4|0;v=y;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[z>>2]=h;c[A>>2]=j;c[q>>2]=k;c[r>>2]=c[(c[m>>2]|0)+56>>2];c[u>>2]=c[c[o>>2]>>2];c[t>>2]=(c[z>>2]|0)+(c[A>>2]|0);c[s>>2]=c[z>>2];while(1){if((c[s>>2]|0)>=(c[t>>2]|0)){h=10;break}c[x>>2]=(xL(c[q>>2]|0,c[s>>2]|0)|0)&65535;if((d[(c[r>>2]|0)+1>>0]|0|0)==0?(d[(c[r>>2]|0)+2>>0]|0|0)==0:0)h=6;else h=5;if((h|0)==5?(h=0,A=HL(c[m>>2]|0,c[x>>2]|0,w)|0,c[v>>2]=A,(A|0)==0):0)h=6;if((h|0)==6){c[u>>2]=(c[u>>2]|0)+(0-(c[x>>2]|0));if((c[u>>2]|0)>>>0<(c[n>>2]|0)>>>0){h=7;break}c[v>>2]=c[u>>2]}jR(c[v>>2]|0,c[(c[(c[q>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0,c[x>>2]|0)|0;a[c[p>>2]>>0]=(c[v>>2]|0)-(c[r>>2]|0)>>8;a[(c[p>>2]|0)+1>>0]=(c[v>>2]|0)-(c[r>>2]|0);c[p>>2]=(c[p>>2]|0)+2;c[s>>2]=(c[s>>2]|0)+1}if((h|0)==7){c[l>>2]=1;A=c[l>>2]|0;i=y;return A|0}else if((h|0)==10){c[c[o>>2]>>2]=c[u>>2];c[l>>2]=0;A=c[l>>2]|0;i=y;return A|0}return 0}function FL(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=a;c[h>>2]=d;c[j>>2]=f;while(1){if((c[j>>2]|0)<=0)break;if(!(e[(c[(c[g>>2]|0)+12>>2]|0)+(c[h>>2]<<1)>>1]|0)){a=Yb[c[(c[(c[g>>2]|0)+4>>2]|0)+76>>2]&255](c[(c[g>>2]|0)+4>>2]|0,c[(c[(c[g>>2]|0)+8>>2]|0)+(c[h>>2]<<2)>>2]|0)|0;b[(c[(c[g>>2]|0)+12>>2]|0)+(c[h>>2]<<1)>>1]=a}c[h>>2]=(c[h>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+-1}i=k;return}function GL(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=i;i=i+64|0;r=x+52|0;s=x+48|0;t=x+44|0;k=x+40|0;l=x+36|0;v=x+32|0;u=x+28|0;y=x+24|0;p=x+20|0;m=x+16|0;o=x+12|0;q=x+8|0;w=x+4|0;n=x;c[s>>2]=f;c[t>>2]=g;c[k>>2]=h;c[l>>2]=j;c[v>>2]=d[(c[s>>2]|0)+5>>0];c[u>>2]=c[(c[s>>2]|0)+56>>2];c[y>>2]=c[(c[(c[s>>2]|0)+52>>2]|0)+36>>2];c[p>>2]=(c[u>>2]|0)+(c[y>>2]|0);c[o>>2]=c[(c[s>>2]|0)+64>>2];c[q>>2]=CL(c[c[(c[s>>2]|0)+52>>2]>>2]|0)|0;c[m>>2]=(d[(c[u>>2]|0)+((c[v>>2]|0)+5)>>0]|0)<<8|(d[(c[u>>2]|0)+((c[v>>2]|0)+5)+1>>0]|0);iR((c[q>>2]|0)+(c[m>>2]|0)|0,(c[u>>2]|0)+(c[m>>2]|0)|0,(c[y>>2]|0)-(c[m>>2]|0)|0)|0;c[w>>2]=c[p>>2];c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[t>>2]|0)){k=9;break}c[n>>2]=c[(c[k>>2]|0)+(c[m>>2]<<2)>>2];if((c[n>>2]|0)>>>0>=(c[u>>2]|0)>>>0?(c[n>>2]|0)>>>0<(c[p>>2]|0)>>>0:0)c[n>>2]=(c[q>>2]|0)+((c[n>>2]|0)-(c[u>>2]|0));c[w>>2]=(c[w>>2]|0)+(0-(e[(c[l>>2]|0)+(c[m>>2]<<1)>>1]|0));a[c[o>>2]>>0]=(c[w>>2]|0)-(c[u>>2]|0)>>8;a[(c[o>>2]|0)+1>>0]=(c[w>>2]|0)-(c[u>>2]|0);c[o>>2]=(c[o>>2]|0)+2;if((c[w>>2]|0)>>>0<(c[o>>2]|0)>>>0){k=7;break}iR(c[w>>2]|0,c[n>>2]|0,e[(c[l>>2]|0)+(c[m>>2]<<1)>>1]|0|0)|0;c[m>>2]=(c[m>>2]|0)+1}if((k|0)==7){c[r>>2]=Lj(62048)|0;y=c[r>>2]|0;i=x;return y|0}else if((k|0)==9){b[(c[s>>2]|0)+18>>1]=c[t>>2];a[(c[s>>2]|0)+1>>0]=0;a[(c[u>>2]|0)+((c[v>>2]|0)+1)>>0]=0;a[(c[u>>2]|0)+((c[v>>2]|0)+1)+1>>0]=0;a[(c[u>>2]|0)+((c[v>>2]|0)+3)>>0]=(e[(c[s>>2]|0)+18>>1]|0)>>8;a[(c[u>>2]|0)+((c[v>>2]|0)+3)+1>>0]=b[(c[s>>2]|0)+18>>1];a[(c[u>>2]|0)+((c[v>>2]|0)+5)>>0]=(c[w>>2]|0)-(c[u>>2]|0)>>8;a[(c[u>>2]|0)+((c[v>>2]|0)+5)+1>>0]=(c[w>>2]|0)-(c[u>>2]|0);a[(c[u>>2]|0)+((c[v>>2]|0)+7)>>0]=0;c[r>>2]=0;y=c[r>>2]|0;i=x;return y|0}return 0}function HL(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;j=t+40|0;k=t+36|0;h=t+32|0;l=t+28|0;n=t+24|0;m=t+20|0;o=t+16|0;p=t+12|0;s=t+8|0;r=t+4|0;q=t;c[k>>2]=b;c[h>>2]=f;c[l>>2]=g;c[n>>2]=d[(c[k>>2]|0)+5>>0];c[m>>2]=c[(c[k>>2]|0)+56>>2];c[o>>2]=(c[n>>2]|0)+1;c[p>>2]=(d[(c[m>>2]|0)+(c[o>>2]|0)>>0]|0)<<8|(d[(c[m>>2]|0)+(c[o>>2]|0)+1>>0]|0);c[r>>2]=c[(c[(c[k>>2]|0)+52>>2]|0)+36>>2];while(1){if((c[p>>2]|0)>((c[r>>2]|0)-4|0)){f=4;break}if((c[p>>2]|0)<((c[o>>2]|0)+4|0)){f=4;break}c[q>>2]=(d[(c[m>>2]|0)+((c[p>>2]|0)+2)>>0]|0)<<8|(d[(c[m>>2]|0)+((c[p>>2]|0)+2)+1>>0]|0);g=(c[q>>2]|0)-(c[h>>2]|0)|0;c[s>>2]=g;b=c[p>>2]|0;if((g|0)>=0){f=6;break}c[o>>2]=b;c[p>>2]=(d[(c[m>>2]|0)+(c[p>>2]|0)>>0]|0)<<8|(d[(c[m>>2]|0)+(c[p>>2]|0)+1>>0]|0);if(!(c[p>>2]|0)){f=16;break}}if((f|0)==4){s=Lj(56997)|0;c[c[l>>2]>>2]=s;c[j>>2]=0;s=c[j>>2]|0;i=t;return s|0}else if((f|0)==6){if((b|0)>=((e[(c[k>>2]|0)+14>>1]|0)+((e[(c[k>>2]|0)+18>>1]|0)<<1)|0)?((c[q>>2]|0)+(c[p>>2]|0)|0)<=(c[r>>2]|0):0){do if((c[s>>2]|0)<4){if((d[(c[m>>2]|0)+((c[n>>2]|0)+7)>>0]|0|0)<=57){r=(c[m>>2]|0)+(c[o>>2]|0)|0;q=(c[m>>2]|0)+(c[p>>2]|0)|0;a[r>>0]=a[q>>0]|0;a[r+1>>0]=a[q+1>>0]|0;r=(c[m>>2]|0)+((c[n>>2]|0)+7)|0;a[r>>0]=(d[r>>0]|0)+(c[s>>2]&255);break}c[j>>2]=0;s=c[j>>2]|0;i=t;return s|0}else{a[(c[m>>2]|0)+((c[p>>2]|0)+2)>>0]=c[s>>2]>>8;a[(c[m>>2]|0)+((c[p>>2]|0)+2)+1>>0]=c[s>>2]}while(0);c[j>>2]=(c[m>>2]|0)+((c[p>>2]|0)+(c[s>>2]|0));s=c[j>>2]|0;i=t;return s|0}s=Lj(57008)|0;c[c[l>>2]>>2]=s;c[j>>2]=0;s=c[j>>2]|0;i=t;return s|0}else if((f|0)==16){c[j>>2]=0;s=c[j>>2]|0;i=t;return s|0}return 0}function IL(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+48|0;j=x+20|0;k=x+16|0;l=x+32|0;m=x+30|0;t=x+28|0;q=x+26|0;o=x+35|0;v=x+34|0;s=x+24|0;r=x+12|0;p=x+8|0;n=x+4|0;u=x;c[k>>2]=f;b[l>>1]=g;b[m>>1]=h;a[v>>0]=0;b[s>>1]=b[m>>1]|0;c[r>>2]=(c[(c[(c[k>>2]|0)+52>>2]|0)+36>>2]|0)-4;c[p>>2]=(e[l>>1]|0)+(e[m>>1]|0);c[n>>2]=c[(c[k>>2]|0)+56>>2];if((e[(c[(c[k>>2]|0)+52>>2]|0)+22>>1]|0)&4)kR((c[n>>2]|0)+(e[l>>1]|0)|0,0,e[m>>1]|0|0)|0;a[o>>0]=a[(c[k>>2]|0)+5>>0]|0;b[t>>1]=(d[o>>0]|0)+1;if((d[(c[n>>2]|0)+((e[t>>1]|0)+1)>>0]|0|0)==0?(d[(c[n>>2]|0)+(e[t>>1]|0)>>0]|0|0)==0:0)b[q>>1]=0;else w=6;do if((w|0)==6){while(1){w=0;f=((d[(c[n>>2]|0)+(e[t>>1]|0)>>0]|0)<<8|(d[(c[n>>2]|0)+(e[t>>1]|0)+1>>0]|0))&65535;b[q>>1]=f;if((f&65535|0)>0)h=(e[q>>1]|0|0)<(e[l>>1]|0|0);else h=0;g=e[q>>1]|0;if(!h)break;if((g|0)<((e[t>>1]|0)+4|0)){w=10;break}b[t>>1]=b[q>>1]|0;w=6}if((w|0)==10){c[j>>2]=Lj(57169)|0;w=c[j>>2]|0;i=x;return w|0}if(g>>>0>(c[r>>2]|0)>>>0){c[j>>2]=Lj(57172)|0;w=c[j>>2]|0;i=x;return w|0}do if((e[q>>1]|0|0)!=0?((c[p>>2]|0)+3|0)>>>0>=(e[q>>1]|0)>>>0:0){a[v>>0]=(e[q>>1]|0)-(c[p>>2]|0);if((c[p>>2]|0)>>>0>(e[q>>1]|0)>>>0){c[j>>2]=Lj(57183)|0;w=c[j>>2]|0;i=x;return w|0}c[p>>2]=(e[q>>1]|0)+((d[(c[n>>2]|0)+((e[q>>1]|0)+2)>>0]|0)<<8|(d[(c[n>>2]|0)+((e[q>>1]|0)+2)+1>>0]|0));if((c[p>>2]|0)>>>0<=(c[(c[(c[k>>2]|0)+52>>2]|0)+36>>2]|0)>>>0){b[m>>1]=(c[p>>2]|0)-(e[l>>1]|0);b[q>>1]=(d[(c[n>>2]|0)+(e[q>>1]|0)>>0]|0)<<8|(d[(c[n>>2]|0)+(e[q>>1]|0)+1>>0]|0);break}c[j>>2]=Lj(57185)|0;w=c[j>>2]|0;i=x;return w|0}while(0);do if((e[t>>1]|0|0)>((d[o>>0]|0)+1|0)?(c[u>>2]=(e[t>>1]|0)+((d[(c[n>>2]|0)+((e[t>>1]|0)+2)>>0]|0)<<8|(d[(c[n>>2]|0)+((e[t>>1]|0)+2)+1>>0]|0)),((c[u>>2]|0)+3|0)>=(e[l>>1]|0|0)):0){if((c[u>>2]|0)<=(e[l>>1]|0|0)){a[v>>0]=(d[v>>0]|0)+((e[l>>1]|0)-(c[u>>2]|0));b[m>>1]=(c[p>>2]|0)-(e[t>>1]|0);b[l>>1]=b[t>>1]|0;break}c[j>>2]=Lj(57197)|0;w=c[j>>2]|0;i=x;return w|0}while(0);if((d[v>>0]|0|0)<=(d[(c[n>>2]|0)+((d[o>>0]|0)+7)>>0]|0|0)){w=(c[n>>2]|0)+((d[o>>0]|0)+7)|0;a[w>>0]=(d[w>>0]|0)-(d[v>>0]|0);break}c[j>>2]=Lj(57203)|0;w=c[j>>2]|0;i=x;return w|0}while(0);do if((e[l>>1]|0|0)==((d[(c[n>>2]|0)+((d[o>>0]|0)+5)>>0]|0)<<8|(d[(c[n>>2]|0)+((d[o>>0]|0)+5)+1>>0]|0)|0)){if((e[t>>1]|0|0)==((d[o>>0]|0)+1|0)){a[(c[n>>2]|0)+((d[o>>0]|0)+1)>>0]=(e[q>>1]|0)>>8;a[(c[n>>2]|0)+((d[o>>0]|0)+1)+1>>0]=b[q>>1];a[(c[n>>2]|0)+((d[o>>0]|0)+5)>>0]=(c[p>>2]|0)>>>8;a[(c[n>>2]|0)+((d[o>>0]|0)+5)+1>>0]=c[p>>2];break}c[j>>2]=Lj(57210)|0;w=c[j>>2]|0;i=x;return w|0}else{a[(c[n>>2]|0)+(e[t>>1]|0)>>0]=(e[l>>1]|0)>>8;a[(c[n>>2]|0)+(e[t>>1]|0)+1>>0]=b[l>>1];a[(c[n>>2]|0)+(e[l>>1]|0)>>0]=(e[q>>1]|0)>>8;a[(c[n>>2]|0)+(e[l>>1]|0)+1>>0]=b[q>>1];a[(c[n>>2]|0)+((e[l>>1]|0)+2)>>0]=(e[m>>1]|0)>>8;a[(c[n>>2]|0)+((e[l>>1]|0)+2)+1>>0]=b[m>>1]}while(0);w=(c[k>>2]|0)+16|0;b[w>>1]=(e[w>>1]|0)+(e[s>>1]|0);c[j>>2]=0;w=c[j>>2]|0;i=x;return w|0}function JL(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g+4|0;e=g;c[f>>2]=a;c[e>>2]=d;a=Yb[c[(c[(c[f>>2]|0)+4>>2]|0)+76>>2]&255](c[(c[f>>2]|0)+4>>2]|0,c[(c[(c[f>>2]|0)+8>>2]|0)+(c[e>>2]<<2)>>2]|0)|0;b[(c[(c[f>>2]|0)+12>>2]|0)+(c[e>>2]<<1)>>1]=a;i=g;return b[(c[(c[f>>2]|0)+12>>2]|0)+(c[e>>2]<<1)>>1]|0}function KL(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;h=t+36|0;j=t+32|0;k=t+28|0;l=t+24|0;o=t+20|0;m=t+16|0;r=t+12|0;q=t+8|0;n=t+4|0;p=t;c[j>>2]=b;c[k>>2]=f;c[l>>2]=g;c[o>>2]=d[(c[j>>2]|0)+5>>0];c[m>>2]=c[(c[j>>2]|0)+56>>2];c[q>>2]=0;c[n>>2]=(e[(c[j>>2]|0)+14>>1]|0)+((e[(c[j>>2]|0)+18>>1]|0)<<1);c[r>>2]=(d[(c[m>>2]|0)+((c[o>>2]|0)+5)>>0]|0)<<8|(d[(c[m>>2]|0)+((c[o>>2]|0)+5)+1>>0]|0);do if((c[n>>2]|0)>(c[r>>2]|0)){if((c[r>>2]|0)==0?(c[(c[(c[j>>2]|0)+52>>2]|0)+36>>2]|0)==65536:0){c[r>>2]=65536;break}c[h>>2]=Lj(57075)|0;s=c[h>>2]|0;i=t;return s|0}while(0);if(!((d[(c[m>>2]|0)+((c[o>>2]|0)+2)>>0]|0|0)==0?(d[(c[m>>2]|0)+((c[o>>2]|0)+1)>>0]|0|0)==0:0))s=8;if((s|0)==8?((c[n>>2]|0)+2|0)<=(c[r>>2]|0):0){c[p>>2]=HL(c[j>>2]|0,c[k>>2]|0,q)|0;if(c[p>>2]|0){c[c[l>>2]>>2]=(c[p>>2]|0)-(c[m>>2]|0);c[h>>2]=0;s=c[h>>2]|0;i=t;return s|0}if(c[q>>2]|0){c[h>>2]=c[q>>2];s=c[h>>2]|0;i=t;return s|0}}do if(((c[n>>2]|0)+2+(c[k>>2]|0)|0)>(c[r>>2]|0)){c[q>>2]=AL(c[j>>2]|0)|0;if(!(c[q>>2]|0)){c[r>>2]=(((d[(c[m>>2]|0)+((c[o>>2]|0)+5)>>0]|0)<<8|(d[(c[m>>2]|0)+((c[o>>2]|0)+5)+1>>0]|0))-1&65535)+1;break}c[h>>2]=c[q>>2];s=c[h>>2]|0;i=t;return s|0}while(0);c[r>>2]=(c[r>>2]|0)-(c[k>>2]|0);a[(c[m>>2]|0)+((c[o>>2]|0)+5)>>0]=c[r>>2]>>8;a[(c[m>>2]|0)+((c[o>>2]|0)+5)+1>>0]=c[r>>2];c[c[l>>2]>>2]=c[r>>2];c[h>>2]=0;s=c[h>>2]|0;i=t;return s|0}function LL(b,f,g,h,j,k,l,m,n){b=b|0;f=f|0;g=g|0;h=h|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,M=0,N=0;M=i;i=i+112|0;J=M+96|0;p=M+92|0;q=M+88|0;r=M+84|0;s=M;t=M+80|0;u=M+76|0;N=M+72|0;o=M+68|0;z=M+64|0;F=M+60|0;A=M+56|0;x=M+52|0;L=M+48|0;I=M+44|0;C=M+40|0;K=M+36|0;E=M+32|0;D=M+28|0;B=M+24|0;G=M+20|0;y=M+16|0;w=M+12|0;H=M+8|0;v=M+100|0;c[p>>2]=b;c[q>>2]=f;c[r>>2]=g;b=s;c[b>>2]=h;c[b+4>>2]=j;c[t>>2]=k;c[u>>2]=l;c[N>>2]=m;c[o>>2]=n;c[C>>2]=0;c[K>>2]=0;c[B>>2]=c[(c[p>>2]|0)+52>>2];c[G>>2]=0;c[y>>2]=d[(c[p>>2]|0)+6>>0];c[z>>2]=(c[u>>2]|0)+(c[N>>2]|0);if(a[(c[p>>2]|0)+3>>0]|0){if((c[z>>2]|0)>>>0<128){a[(c[q>>2]|0)+(c[y>>2]|0)>>0]=c[z>>2];h=1}else{h=c[z>>2]|0;h=kI((c[q>>2]|0)+(c[y>>2]|0)|0,h,((h|0)<0)<<31>>31)|0}c[y>>2]=(c[y>>2]|0)+(h&255)}N=s;N=kI((c[q>>2]|0)+(c[y>>2]|0)|0,c[N>>2]|0,c[N+4>>2]|0)|0;c[y>>2]=(c[y>>2]|0)+N;if(a[(c[p>>2]|0)+2>>0]|0){c[F>>2]=c[t>>2];c[A>>2]=c[u>>2];c[u>>2]=0}else{c[z>>2]=c[s>>2];c[F>>2]=c[r>>2];c[A>>2]=c[s>>2]}if((c[z>>2]|0)<=(e[(c[p>>2]|0)+10>>1]|0)){N=(c[y>>2]|0)+(c[z>>2]|0)|0;c[x>>2]=N;c[x>>2]=(c[x>>2]|0)<4?4:N; +c[c[o>>2]>>2]=c[x>>2];c[I>>2]=c[z>>2];c[E>>2]=c[q>>2]}else{c[w>>2]=e[(c[p>>2]|0)+12>>1];c[x>>2]=(c[w>>2]|0)+((((c[z>>2]|0)-(c[w>>2]|0)|0)>>>0)%(((c[(c[(c[p>>2]|0)+52>>2]|0)+36>>2]|0)-4|0)>>>0)|0);if((c[x>>2]|0)>(e[(c[p>>2]|0)+10>>1]|0))c[x>>2]=c[w>>2];c[I>>2]=c[x>>2];c[c[o>>2]>>2]=(c[x>>2]|0)+(c[y>>2]|0)+4;c[E>>2]=(c[q>>2]|0)+((c[y>>2]|0)+(c[x>>2]|0))}c[D>>2]=(c[q>>2]|0)+(c[y>>2]|0);while(1){if((c[z>>2]|0)<=0){h=35;break}if(!(c[I>>2]|0)){c[H>>2]=c[G>>2];if(a[(c[B>>2]|0)+17>>0]|0)while(1){c[G>>2]=(c[G>>2]|0)+1;N=lF(c[B>>2]|0,c[G>>2]|0)|0;if((N|0)==(c[G>>2]|0))continue;if((c[G>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[B>>2]|0)+32>>2]|0)>>>0)|0)+1|0))break}c[L>>2]=tJ(c[B>>2]|0,C,G,c[G>>2]|0,0)|0;if(((c[L>>2]|0)==0?(d[(c[B>>2]|0)+17>>0]|0)!=0:0)?(a[v>>0]=(c[H>>2]|0)!=0?4:3,xJ(c[B>>2]|0,c[G>>2]|0,a[v>>0]|0,c[H>>2]|0,L),(c[L>>2]|0)!=0):0)qB(c[C>>2]|0);if(c[L>>2]|0){h=24;break}Xs(c[E>>2]|0,c[G>>2]|0);qB(c[K>>2]|0);c[K>>2]=c[C>>2];c[E>>2]=c[(c[C>>2]|0)+56>>2];Xs(c[E>>2]|0,0);c[D>>2]=(c[(c[C>>2]|0)+56>>2]|0)+4;c[I>>2]=(c[(c[B>>2]|0)+36>>2]|0)-4}c[x>>2]=c[z>>2];if((c[x>>2]|0)>(c[I>>2]|0))c[x>>2]=c[I>>2];if((c[A>>2]|0)>0){if((c[x>>2]|0)>(c[A>>2]|0))c[x>>2]=c[A>>2];iR(c[D>>2]|0,c[F>>2]|0,c[x>>2]|0)|0}else kR(c[D>>2]|0,0,c[x>>2]|0)|0;c[z>>2]=(c[z>>2]|0)-(c[x>>2]|0);c[D>>2]=(c[D>>2]|0)+(c[x>>2]|0);c[F>>2]=(c[F>>2]|0)+(c[x>>2]|0);c[A>>2]=(c[A>>2]|0)-(c[x>>2]|0);c[I>>2]=(c[I>>2]|0)-(c[x>>2]|0);if(c[A>>2]|0)continue;c[A>>2]=c[u>>2];c[F>>2]=c[t>>2]}if((h|0)==24){qB(c[K>>2]|0);c[J>>2]=c[L>>2];N=c[J>>2]|0;i=M;return N|0}else if((h|0)==35){qB(c[K>>2]|0);c[J>>2]=0;N=c[J>>2]|0;i=M;return N|0}return 0}function ML(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[(c[e>>2]|0)+16>>2];if(!(c[f>>2]|0)){i=g;return}RI(c[d>>2]|0,c[f>>2]|0);Kd(c[(c[f>>2]|0)+36+4>>2]|0);Sf(c[d>>2]|0,c[f>>2]|0);c[(c[e>>2]|0)+16>>2]=0;i=g;return}function NL(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+64|0;g=u+44|0;h=u+40|0;j=u+36|0;k=u+32|0;n=u+28|0;p=u+24|0;r=u+20|0;t=u+16|0;s=u+12|0;q=u+8|0;o=u+4|0;l=u+48|0;m=u;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[n>>2]=c[(c[h>>2]|0)+4>>2];f=c[n>>2]|0;if(a[(c[n>>2]|0)+17>>0]|0){rJ(f);ng(c[h>>2]|0,4,r);c[r>>2]=(c[r>>2]|0)+1;while(1){e=c[r>>2]|0;if((e|0)!=(lF(c[n>>2]|0,c[r>>2]|0)|0)?(c[r>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[n>>2]|0)+32>>2]|0)>>>0)|0)+1|0):0)break;c[r>>2]=(c[r>>2]|0)+1}c[t>>2]=tJ(c[n>>2]|0,o,q,c[r>>2]|0,1)|0;if(c[t>>2]|0){c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}if((c[q>>2]|0)!=(c[r>>2]|0)){a[l>>0]=0;c[m>>2]=0;c[t>>2]=nH(c[n>>2]|0,0,0)|0;qB(c[o>>2]|0);if(c[t>>2]|0){c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}c[t>>2]=nF(c[n>>2]|0,c[r>>2]|0,p,0)|0;if(c[t>>2]|0){c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}c[t>>2]=mF(c[n>>2]|0,c[r>>2]|0,l,m)|0;if(!((d[l>>0]|0)!=1?(d[l>>0]|0)!=2:0))c[t>>2]=Lj(63920)|0;if(c[t>>2]|0){qB(c[p>>2]|0);c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}c[t>>2]=uJ(c[n>>2]|0,c[p>>2]|0,a[l>>0]|0,c[m>>2]|0,c[q>>2]|0,0)|0;qB(c[p>>2]|0);if(c[t>>2]|0){c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}c[t>>2]=nF(c[n>>2]|0,c[r>>2]|0,p,0)|0;if(c[t>>2]|0){c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}c[t>>2]=Dg(c[(c[p>>2]|0)+72>>2]|0)|0;if(c[t>>2]|0){qB(c[p>>2]|0);c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}}else c[p>>2]=c[o>>2];xJ(c[n>>2]|0,c[r>>2]|0,1,0,t);if(c[t>>2]|0){qB(c[p>>2]|0);c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}c[t>>2]=yg(c[h>>2]|0,4,c[r>>2]|0)|0;if(c[t>>2]|0){qB(c[p>>2]|0);c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}}else{c[t>>2]=tJ(f,p,r,1,0)|0;if(c[t>>2]|0){c[g>>2]=c[t>>2];t=c[g>>2]|0;i=u;return t|0}}if(c[k>>2]&1)c[s>>2]=13;else c[s>>2]=10;wK(c[p>>2]|0,c[s>>2]|0);vg(c[(c[p>>2]|0)+72>>2]|0);c[c[j>>2]>>2]=c[r>>2];c[g>>2]=0;t=c[g>>2]|0;i=u;return t|0}function OL(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+32|0;j=r+28|0;k=r+24|0;l=r+20|0;m=r+16|0;n=r+12|0;o=r+8|0;p=r+4|0;q=r;c[k>>2]=b;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=c[(c[k>>2]|0)+4>>2];if((c[m>>2]|0)!=0?(PL(c[p>>2]|0),(c[(c[p>>2]|0)+80>>2]|0)==0):0){c[j>>2]=7;f=c[j>>2]|0;i=r;return f|0}if((c[l>>2]|0)==1?($E(c[p>>2]|0)|0)==0:0)c[l>>2]=0;c[(c[o>>2]|0)+52>>2]=c[l>>2];a[(c[o>>2]|0)+68>>0]=-1;c[(c[o>>2]|0)+72>>2]=c[n>>2];c[c[o>>2]>>2]=c[k>>2];c[(c[o>>2]|0)+4>>2]=c[p>>2];a[(c[o>>2]|0)+64>>0]=(c[m>>2]|0)!=0?1:0;a[(c[o>>2]|0)+65>>0]=(c[m>>2]|0)!=0?0:2;c[q>>2]=c[(c[p>>2]|0)+8>>2];while(1){if(!(c[q>>2]|0))break;if((c[(c[q>>2]|0)+52>>2]|0)==(c[l>>2]|0)){f=(c[q>>2]|0)+64|0;a[f>>0]=d[f>>0]|0|32;f=(c[o>>2]|0)+64|0;a[f>>0]=d[f>>0]|0|32}c[q>>2]=c[(c[q>>2]|0)+8>>2]}c[(c[o>>2]|0)+8>>2]=c[(c[p>>2]|0)+8>>2];c[(c[p>>2]|0)+8>>2]=c[o>>2];a[(c[o>>2]|0)+66>>0]=0;c[j>>2]=0;f=c[j>>2]|0;i=r;return f|0}function PL(b){b=b|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=b;if(c[(c[d>>2]|0)+80>>2]|0){i=e;return}b=Ti(c[(c[d>>2]|0)+32>>2]|0)|0;c[(c[d>>2]|0)+80>>2]=b;if(!(c[(c[d>>2]|0)+80>>2]|0)){i=e;return}b=c[(c[d>>2]|0)+80>>2]|0;a[b>>0]=0;a[b+1>>0]=0;a[b+2>>0]=0;a[b+3>>0]=0;a[b+4>>0]=0;a[b+5>>0]=0;a[b+6>>0]=0;a[b+7>>0]=0;b=(c[d>>2]|0)+80|0;c[b>>2]=(c[b>>2]|0)+4;i=e;return}function QL(){return 200}function RL(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;a=c[b>>2]|0;b=a+68|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));i=d;return}function SL(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=b;if((c[g>>2]|0)>(c[(c[f>>2]|0)+104>>2]|0)?(d[(c[f>>2]|0)+6>>0]|0|0)!=0:0){c[e>>2]=TL(c[f>>2]|0,c[g>>2]|0)|0;a=c[e>>2]|0;i=h;return a|0}c[e>>2]=0;a=c[e>>2]|0;i=h;return a|0}function TL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;j=l+24|0;d=l+20|0;e=l+16|0;k=l+12|0;h=l+8|0;g=l+4|0;f=l;c[d>>2]=a;c[e>>2]=b;c[k>>2]=0;c[h>>2]=c[(c[d>>2]|0)+104>>2];c[f>>2]=bg(c[(c[d>>2]|0)+100>>2]|0,(c[e>>2]|0)*48|0,0)|0;if(!(c[f>>2]|0)){c[j>>2]=7;k=c[j>>2]|0;i=l;return k|0}kR((c[f>>2]|0)+((c[h>>2]|0)*48|0)|0,0,((c[e>>2]|0)-(c[h>>2]|0)|0)*48|0)|0;c[(c[d>>2]|0)+100>>2]=c[f>>2];c[g>>2]=c[h>>2];while(1){if((c[g>>2]|0)>=(c[e>>2]|0)){d=14;break}c[(c[f>>2]|0)+((c[g>>2]|0)*48|0)+20>>2]=c[(c[d>>2]|0)+28>>2];if((c[c[(c[d>>2]|0)+68>>2]>>2]|0)!=0?(a=(c[d>>2]|0)+80|0,b=c[a+4>>2]|0,(b|0)>0|(b|0)==0&(c[a>>2]|0)>>>0>0):0){h=(c[d>>2]|0)+80|0;b=c[h+4>>2]|0;a=(c[f>>2]|0)+((c[g>>2]|0)*48|0)|0;c[a>>2]=c[h>>2];c[a+4>>2]=b}else{a=(c[f>>2]|0)+((c[g>>2]|0)*48|0)|0;c[a>>2]=c[(c[d>>2]|0)+156>>2];c[a+4>>2]=0}c[(c[f>>2]|0)+((c[g>>2]|0)*48|0)+24>>2]=c[(c[d>>2]|0)+56>>2];a=fj(c[(c[d>>2]|0)+28>>2]|0)|0;c[(c[f>>2]|0)+((c[g>>2]|0)*48|0)+16>>2]=a;if(!(c[(c[f>>2]|0)+((c[g>>2]|0)*48|0)+16>>2]|0)){d=10;break}if(sr(c[d>>2]|0)|0)UL(c[(c[d>>2]|0)+216>>2]|0,(c[f>>2]|0)+((c[g>>2]|0)*48|0)+28|0);c[(c[d>>2]|0)+104>>2]=(c[g>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+1}if((d|0)==10){c[j>>2]=7;k=c[j>>2]|0;i=l;return k|0}else if((d|0)==14){c[j>>2]=c[k>>2];k=c[j>>2]|0;i=l;return k|0}return 0}function UL(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;c[c[e>>2]>>2]=c[(c[f>>2]|0)+52+16>>2];c[(c[e>>2]|0)+4>>2]=c[(c[f>>2]|0)+52+24>>2];c[(c[e>>2]|0)+8>>2]=c[(c[f>>2]|0)+52+24+4>>2];c[(c[e>>2]|0)+12>>2]=c[(c[f>>2]|0)+112>>2];i=d;return}function VL(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;j=n+16|0;k=n+12|0;m=n+8|0;l=n+4|0;g=n;c[k>>2]=f;if((c[(c[k>>2]|0)+44>>2]|0)>>>0>0){c[j>>2]=0;m=c[j>>2]|0;i=n;return m|0}c[m>>2]=c[(c[k>>2]|0)+12>>2];c[l>>2]=c[(c[m>>2]|0)+56>>2];c[g>>2]=Dg(c[(c[m>>2]|0)+72>>2]|0)|0;if(c[g>>2]|0){c[j>>2]=c[g>>2];m=c[j>>2]|0;i=n;return m|0}else{f=c[l>>2]|0;g=43252;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));a[(c[l>>2]|0)+16>>0]=(c[(c[k>>2]|0)+32>>2]|0)>>>8;a[(c[l>>2]|0)+17>>0]=(c[(c[k>>2]|0)+32>>2]|0)>>>16;a[(c[l>>2]|0)+18>>0]=1;a[(c[l>>2]|0)+19>>0]=1;a[(c[l>>2]|0)+20>>0]=(c[(c[k>>2]|0)+32>>2]|0)-(c[(c[k>>2]|0)+36>>2]|0);a[(c[l>>2]|0)+21>>0]=64;a[(c[l>>2]|0)+22>>0]=32;a[(c[l>>2]|0)+23>>0]=32;f=(c[l>>2]|0)+24|0;h=f+76|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(h|0));wK(c[m>>2]|0,13);m=(c[k>>2]|0)+22|0;b[m>>1]=e[m>>1]|0|2;Xs((c[l>>2]|0)+52|0,d[(c[k>>2]|0)+17>>0]|0);Xs((c[l>>2]|0)+64|0,d[(c[k>>2]|0)+18>>0]|0);c[(c[k>>2]|0)+44>>2]=1;a[(c[l>>2]|0)+31>>0]=1;c[j>>2]=0;m=c[j>>2]|0;i=n;return m|0}return 0}function WL(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;g=o+24|0;h=o+20|0;j=o;l=o+16|0;m=o+12|0;n=o+8|0;k=o+28|0;c[h>>2]=b;b=j;c[b>>2]=e;c[b+4>>2]=f;if(0!=0?1:(c[j+4>>2]&-16777216|0)!=0){a[(c[h>>2]|0)+8>>0]=c[j>>2];n=j;n=hR(c[n>>2]|0,c[n+4>>2]|0,8)|0;b=j;c[b>>2]=n;c[b+4>>2]=C;c[l>>2]=7;while(1){if((c[l>>2]|0)<0)break;a[(c[h>>2]|0)+(c[l>>2]|0)>>0]=c[j>>2]&127|128;n=j;n=hR(c[n>>2]|0,c[n+4>>2]|0,7)|0;b=j;c[b>>2]=n;c[b+4>>2]=C;c[l>>2]=(c[l>>2]|0)+-1}c[g>>2]=9;b=c[g>>2]|0;i=o;return b|0}c[n>>2]=0;do{b=(c[j>>2]&127|128)&255;f=c[n>>2]|0;c[n>>2]=f+1;a[k+f>>0]=b;f=j;f=hR(c[f>>2]|0,c[f+4>>2]|0,7)|0;b=j;c[b>>2]=f;c[b+4>>2]=C;b=j}while((c[b>>2]|0)!=0|(c[b+4>>2]|0)!=0);a[k>>0]=(d[k>>0]|0)&127;c[l>>2]=0;c[m>>2]=(c[n>>2]|0)-1;while(1){if((c[m>>2]|0)<0)break;a[(c[h>>2]|0)+(c[l>>2]|0)>>0]=a[k+(c[m>>2]|0)>>0]|0;c[m>>2]=(c[m>>2]|0)+-1;c[l>>2]=(c[l>>2]|0)+1}c[g>>2]=c[n>>2];b=c[g>>2]|0;i=o;return b|0}function XL(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;n=p+4|0;o=p;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;b[(c[n>>2]|0)+8>>1]=1;h=tx(c[n>>2]|0,(c[l>>2]|0)+2|0)|0;c[o>>2]=h;if(h){o=c[o>>2]|0;i=p;return o|0}e=c[j>>2]|0;j=c[k>>2]|0;f=c[l>>2]|0;g=c[(c[n>>2]|0)+16>>2]|0;if(c[m>>2]|0)c[o>>2]=tH(e,j,f,g)|0;else c[o>>2]=Mh(e,j,f,g)|0;if(!(c[o>>2]|0)){a[(c[(c[n>>2]|0)+16>>2]|0)+(c[l>>2]|0)>>0]=0;a[(c[(c[n>>2]|0)+16>>2]|0)+((c[l>>2]|0)+1)>>0]=0;b[(c[n>>2]|0)+8>>1]=528;c[(c[n>>2]|0)+12>>2]=c[l>>2];o=c[o>>2]|0;i=p;return o|0}else{Ug(c[n>>2]|0);o=c[o>>2]|0;i=p;return o|0}return 0}function YL(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=d;c[h>>2]=(c[(c[(c[f>>2]|0)+120+(a[(c[f>>2]|0)+68>>0]<<2)>>2]|0)+60>>2]|0)-(c[(c[f>>2]|0)+16+8>>2]|0);if((e[(c[f>>2]|0)+16+16>>1]|0)>>>0<(c[h>>2]|0)>>>0)c[h>>2]=e[(c[f>>2]|0)+16+16>>1];c[c[g>>2]>>2]=c[h>>2];i=j;return c[(c[f>>2]|0)+16+8>>2]|0}function ZL(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;g=h+4|0;f=h;c[e>>2]=b;b=(c[e>>2]|0)+40|0;c[f>>2]=eF(c[(c[e>>2]|0)+16>>2]|0,0,c[b>>2]|0,c[b+4>>2]|0,0,g)|0;if(c[f>>2]|0){c[d>>2]=c[f>>2];g=c[d>>2]|0;i=h;return g|0}if(c[g>>2]|0){c[d>>2]=Lj(70762)|0;g=c[d>>2]|0;i=h;return g|0}else{a[(c[e>>2]|0)+3>>0]=0;c[(c[e>>2]|0)+56>>2]=0;c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}return 0}function _L(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;if((c[(c[e>>2]|0)+12>>2]|0)>(c[(c[f>>2]|0)+12>>2]|0))a=c[(c[f>>2]|0)+12>>2]|0;else a=c[(c[e>>2]|0)+12>>2]|0;c[g>>2]=vQ(c[(c[e>>2]|0)+16>>2]|0,c[(c[f>>2]|0)+16>>2]|0,a)|0;if(c[g>>2]|0){c[d>>2]=c[g>>2];g=c[d>>2]|0;i=h;return g|0}else{c[d>>2]=(c[(c[e>>2]|0)+12>>2]|0)-(c[(c[f>>2]|0)+12>>2]|0);g=c[d>>2]|0;i=h;return g|0}return 0}function $L(d){d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[f>>2]=d;if(!(Ky(c[(c[f>>2]|0)+16>>2]|0,c[f>>2]|0,c[(c[f>>2]|0)+12>>2]|0,a[(c[f>>2]|0)+10>>0]|0)|0)){b[e>>1]=0;d=b[e>>1]|0;i=g;return d|0}if(!(Hi(c[(c[f>>2]|0)+16>>2]|0,c[f>>2]|0,c[(c[f>>2]|0)+12>>2]|0,a[(c[f>>2]|0)+10>>0]|0)|0)){b[e>>1]=4;d=b[e>>1]|0;i=g;return d|0}else{b[e>>1]=8;d=b[e>>1]|0;i=g;return d|0}return 0}function aM(d){d=d|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[g>>2]=d;if(ux(c[g>>2]|0,(c[(c[g>>2]|0)+12>>2]|0)+2|0,1)|0){c[f>>2]=7;d=c[f>>2]|0;i=h;return d|0}else{a[(c[(c[g>>2]|0)+16>>2]|0)+(c[(c[g>>2]|0)+12>>2]|0)>>0]=0;a[(c[(c[g>>2]|0)+16>>2]|0)+((c[(c[g>>2]|0)+12>>2]|0)+1)>>0]=0;d=(c[g>>2]|0)+8|0;b[d>>1]=e[d>>1]|0|512;c[f>>2]=0;d=c[f>>2]|0;i=h;return d|0}return 0}function bM(a){a=a|0;var d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=a;fh(c[d>>2]|0);b[(c[d>>2]|0)+8>>1]=4;i=e;return c[d>>2]|0}function cM(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;d=f+8|0;b=f+4|0;e=f;c[d>>2]=a;if(c[(c[d>>2]|0)+176>>2]|0){c[b>>2]=c[(c[d>>2]|0)+176>>2];while(1){a=c[b>>2]|0;if(!(c[(c[b>>2]|0)+4>>2]|0))break;c[b>>2]=c[a+4>>2]}RH(a)|0;c[(c[d>>2]|0)+176>>2]=0;c[(c[d>>2]|0)+184>>2]=0}kM(c[d>>2]|0);if(c[(c[d>>2]|0)+8>>2]|0)oC((c[(c[d>>2]|0)+8>>2]|0)+40|0,c[(c[d>>2]|0)+28>>2]|0);while(1){a=c[d>>2]|0;if(!(c[(c[d>>2]|0)+180>>2]|0))break;c[e>>2]=c[a+180>>2];c[(c[d>>2]|0)+180>>2]=c[(c[e>>2]|0)+4>>2];lM(c[e>>2]|0)}if(!(c[a+204>>2]|0)){i=f;return}bI(c[d>>2]|0,-1,0);i=f;return}function dM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0;H=i;i=i+144|0;z=H+32|0;B=H+24|0;A=H+16|0;y=H+8|0;d=H+128|0;e=H+124|0;I=H+120|0;f=H+116|0;j=H+112|0;v=H+108|0;l=H+104|0;n=H+100|0;o=H+96|0;p=H+92|0;u=H+88|0;k=H+84|0;F=H+80|0;E=H+76|0;t=H+72|0;m=H;w=H+68|0;x=H+64|0;h=H+60|0;g=H+56|0;q=H+52|0;D=H+48|0;r=H+44|0;s=H+40|0;c[e>>2]=a;c[I>>2]=b;c[j>>2]=0;c[v>>2]=0;c[l>>2]=0;c[v>>2]=eM(c[e>>2]|0,c[I>>2]|0)|0;c[f>>2]=0;while(1){if(c[v>>2]|0)break;if((c[f>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0))break;c[n>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+4>>2];if(bi(c[n>>2]|0)|0){c[l>>2]=1;if((c[f>>2]|0)!=1)c[j>>2]=(c[j>>2]|0)+1;kg(c[n>>2]|0);c[v>>2]=rt(Of(c[n>>2]|0)|0)|0}c[f>>2]=(c[f>>2]|0)+1}if(c[v>>2]|0){c[d>>2]=c[v>>2];I=c[d>>2]|0;i=H;return I|0}if(((c[l>>2]|0)!=0?(c[(c[e>>2]|0)+196>>2]|0)!=0:0)?(c[v>>2]=Tb[c[(c[e>>2]|0)+196>>2]&255](c[(c[e>>2]|0)+192>>2]|0)|0,(c[v>>2]|0)!=0):0){c[d>>2]=531;I=c[d>>2]|0;i=H;return I|0}I=0==(If(Di(c[(c[(c[e>>2]|0)+16>>2]|0)+4>>2]|0)|0)|0);if(I|(c[j>>2]|0)<=1){c[f>>2]=0;while(1){if(c[v>>2]|0)break;if((c[f>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0))break;c[o>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+4>>2];if(c[o>>2]|0)c[v>>2]=Kg(c[o>>2]|0,0)|0;c[f>>2]=(c[f>>2]|0)+1}c[f>>2]=0;while(1){if(c[v>>2]|0)break;if((c[f>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0))break;c[p>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+4>>2];if(c[p>>2]|0)c[v>>2]=Jg(c[p>>2]|0,0)|0;c[f>>2]=(c[f>>2]|0)+1}if(!(c[v>>2]|0))fM(c[e>>2]|0)|0}else{c[u>>2]=c[c[e>>2]>>2];c[k>>2]=0;c[F>>2]=0;c[E>>2]=Di(c[(c[(c[e>>2]|0)+16>>2]|0)+4>>2]|0)|0;c[t>>2]=0;I=m;c[I>>2]=0;c[I+4>>2]=0;c[x>>2]=0;c[h>>2]=If(c[E>>2]|0)|0;I=c[e>>2]|0;c[y>>2]=c[E>>2];c[F>>2]=Bh(I,43268,y)|0;if(!(c[F>>2]|0)){c[d>>2]=7;I=c[d>>2]|0;i=H;return I|0}do{if(c[x>>2]|0){if((c[x>>2]|0)>100){G=34;break}if((c[x>>2]|0)==1){c[B>>2]=c[F>>2];Rd(13,43298,B)}}c[x>>2]=(c[x>>2]|0)+1;Sd(4,g);I=(c[F>>2]|0)+(c[h>>2]|0)|0;E=c[g>>2]&255;c[z>>2]=(c[g>>2]|0)>>>8&16777215;c[z+4>>2]=E;Qd(13,I,43313,z)|0;c[v>>2]=Nr(c[u>>2]|0,c[F>>2]|0,0,w)|0}while((c[v>>2]|0)==0?(c[w>>2]|0)!=0:0);if((G|0)==34){c[A>>2]=c[F>>2];Rd(13,43284,A);qr(c[u>>2]|0,c[F>>2]|0,0)|0}if(!(c[v>>2]|0))c[v>>2]=TK(c[u>>2]|0,c[F>>2]|0,t,16406,0)|0;if(c[v>>2]|0){Sf(c[e>>2]|0,c[F>>2]|0);c[d>>2]=c[v>>2];I=c[d>>2]|0;i=H;return I|0}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0))break;c[q>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+4>>2];if((bi(c[q>>2]|0)|0)!=0?(c[D>>2]=gM(c[q>>2]|0)|0,(c[D>>2]|0)!=0):0){if((c[k>>2]|0)==0?(hM(c[q>>2]|0)|0)==0:0)c[k>>2]=1;A=c[t>>2]|0;B=c[D>>2]|0;I=(If(c[D>>2]|0)|0)+1|0;E=m;c[v>>2]=Fg(A,B,I,c[E>>2]|0,c[E+4>>2]|0)|0;E=(If(c[D>>2]|0)|0)+1|0;I=m;E=gR(c[I>>2]|0,c[I+4>>2]|0,E|0,((E|0)<0)<<31>>31|0)|0;I=m;c[I>>2]=E;c[I+4>>2]=C;if(c[v>>2]|0){G=50;break}}c[f>>2]=(c[f>>2]|0)+1}if((G|0)==50){pK(c[t>>2]|0)|0;qr(c[u>>2]|0,c[F>>2]|0,0)|0;Sf(c[e>>2]|0,c[F>>2]|0);c[d>>2]=c[v>>2];I=c[d>>2]|0;i=H;return I|0}if(((c[k>>2]|0)!=0?0==((Sr(c[t>>2]|0)|0)&1024|0):0)?(I=or(c[t>>2]|0,2)|0,c[v>>2]=I,0!=(I|0)):0){pK(c[t>>2]|0)|0;qr(c[u>>2]|0,c[F>>2]|0,0)|0;Sf(c[e>>2]|0,c[F>>2]|0);c[d>>2]=c[v>>2];I=c[d>>2]|0;i=H;return I|0}c[f>>2]=0;while(1){if(c[v>>2]|0)break;if((c[f>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0))break;c[r>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+4>>2];if(c[r>>2]|0)c[v>>2]=Kg(c[r>>2]|0,c[F>>2]|0)|0;c[f>>2]=(c[f>>2]|0)+1}pK(c[t>>2]|0)|0;if(c[v>>2]|0){Sf(c[e>>2]|0,c[F>>2]|0);c[d>>2]=c[v>>2];I=c[d>>2]|0;i=H;return I|0}c[v>>2]=qr(c[u>>2]|0,c[F>>2]|0,c[k>>2]|0)|0;Sf(c[e>>2]|0,c[F>>2]|0);c[F>>2]=0;if(c[v>>2]|0){c[d>>2]=c[v>>2];I=c[d>>2]|0;i=H;return I|0}Sj();c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[e>>2]|0)+20>>2]|0))break;c[s>>2]=c[(c[(c[e>>2]|0)+16>>2]|0)+(c[f>>2]<<4)+4>>2];if(c[s>>2]|0)Jg(c[s>>2]|0,1)|0;c[f>>2]=(c[f>>2]|0)+1}Tj();fM(c[e>>2]|0)|0}c[d>>2]=c[v>>2];I=c[d>>2]|0;i=H;return I|0}function eM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;h=l+24|0;d=l+20|0;e=l+16|0;k=l+12|0;j=l+8|0;g=l+4|0;f=l;c[h>>2]=a;c[d>>2]=b;c[k>>2]=0;c[j>>2]=c[(c[h>>2]|0)+332>>2];c[(c[h>>2]|0)+332>>2]=0;c[e>>2]=0;while(1){if(c[k>>2]|0){d=8;break}if((c[e>>2]|0)>=(c[(c[h>>2]|0)+308>>2]|0)){d=8;break}c[f>>2]=c[(c[(c[j>>2]|0)+(c[e>>2]<<2)>>2]|0)+8>>2];if((c[f>>2]|0)!=0?(b=c[(c[c[f>>2]>>2]|0)+60>>2]|0,c[g>>2]=b,(b|0)!=0):0){c[k>>2]=Tb[c[g>>2]&255](c[f>>2]|0)|0;GI(c[d>>2]|0,c[f>>2]|0)}c[e>>2]=(c[e>>2]|0)+1}if((d|0)==8){c[(c[h>>2]|0)+332>>2]=c[j>>2];i=l;return c[k>>2]|0}return 0}function fM(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;gu(c[d>>2]|0,64);i=b;return 0}function gM(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=jM(c[c[(c[d>>2]|0)+4>>2]>>2]|0)|0;i=b;return a|0}function hM(a){a=a|0;var b=0,d=0,e=0,f=0;d=i;i=i+16|0;f=d+8|0;e=d+4|0;b=d;c[f>>2]=a;c[e>>2]=c[(c[f>>2]|0)+4>>2];kg(c[f>>2]|0);c[b>>2]=iM(c[c[e>>2]>>2]|0)|0;i=d;return c[b>>2]|0}function iM(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return d[(c[b>>2]|0)+7>>0]|0|0}function jM(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+180>>2]|0}function kM(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;if(!(c[(c[b>>2]|0)+56>>2]|0)){i=f;return}c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+36>>2]|0))break;c[e>>2]=c[(c[(c[b>>2]|0)+56>>2]|0)+(c[d>>2]<<2)>>2];if(c[e>>2]|0){yI(c[b>>2]|0,c[e>>2]|0);c[(c[(c[b>>2]|0)+56>>2]|0)+(c[d>>2]<<2)>>2]=0}c[d>>2]=(c[d>>2]|0)+1}i=f;return}function lM(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;f=g+8|0;d=g+4|0;e=g;c[b>>2]=a;c[d>>2]=(c[b>>2]|0)+80;c[e>>2]=(c[d>>2]|0)+((c[(c[b>>2]|0)+60>>2]|0)*40|0);c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[b>>2]|0)+64>>2]|0))break;yI(c[c[b>>2]>>2]|0,c[(c[e>>2]|0)+(c[f>>2]<<2)>>2]|0);c[f>>2]=(c[f>>2]|0)+1}oC(c[d>>2]|0,c[(c[b>>2]|0)+60>>2]|0);Sf(c[c[c[b>>2]>>2]>>2]|0,c[b>>2]|0);i=g;return}function mM(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[6424+(c[b>>2]<<2)>>2]|0}function nM(f,g,j){f=f|0;g=g|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;L=i;i=i+192|0;y=L+88|0;x=L+80|0;w=L+72|0;I=L+64|0;H=L+56|0;v=L+48|0;u=L+40|0;t=L+32|0;A=L+24|0;z=L+16|0;E=L+8|0;s=L;k=L+176|0;l=L+172|0;M=L+168|0;K=L+164|0;J=L+136|0;B=L+132|0;D=L+128|0;C=L+124|0;F=L+120|0;p=L+116|0;q=L+112|0;G=L+108|0;r=L+104|0;n=L+100|0;m=L+96|0;o=L+92|0;c[k>>2]=f;c[l>>2]=g;c[M>>2]=j;c[K>>2]=c[l>>2];cg(J,0,c[l>>2]|0,c[M>>2]|0,0);a:do switch(a[(c[k>>2]|0)+1>>0]|0){case-6:{c[D>>2]=c[(c[k>>2]|0)+16>>2];c[s>>2]=e[(c[D>>2]|0)+6>>1];$z(J,43365,s);c[B>>2]=0;while(1){if((c[B>>2]|0)>=(e[(c[D>>2]|0)+6>>1]|0))break;c[C>>2]=c[(c[D>>2]|0)+20+(c[B>>2]<<2)>>2];if(c[C>>2]|0)k=c[c[C>>2]>>2]|0;else k=19266;c[F>>2]=k;M=(yQ(c[F>>2]|0,35690)|0)==0;c[F>>2]=M?43370:k;M=c[F>>2]|0;c[E>>2]=(d[(c[(c[D>>2]|0)+16>>2]|0)+(c[B>>2]|0)>>0]|0)!=0?29135:19266;c[E+4>>2]=M;$z(J,43372,E);c[B>>2]=(c[B>>2]|0)+1}aA(J,35518,1);break}case-4:{c[p>>2]=c[(c[k>>2]|0)+16>>2];c[z>>2]=c[c[p>>2]>>2];$z(J,43378,z);break}case-5:{c[q>>2]=c[(c[k>>2]|0)+16>>2];M=b[c[q>>2]>>1]|0;c[A>>2]=c[(c[q>>2]|0)+20>>2];c[A+4>>2]=M;$z(J,43386,A);break}case-13:{H=c[(c[k>>2]|0)+16>>2]|0;I=c[H+4>>2]|0;M=t;c[M>>2]=c[H>>2];c[M+4>>2]=I;$z(J,29137,t);break}case-14:{c[u>>2]=c[(c[k>>2]|0)+16>>2];$z(J,43393,u);break}case-12:{h[v>>3]=+h[c[(c[k>>2]|0)+16>>2]>>3];$z(J,43396,v);break}case-8:{c[G>>2]=c[(c[k>>2]|0)+16>>2];k=c[G>>2]|0;if(e[(c[G>>2]|0)+8>>1]&2){c[K>>2]=c[k+16>>2];break a}l=c[G>>2]|0;if(e[k+8>>1]&4){G=l;I=c[G+4>>2]|0;M=H;c[M>>2]=c[G>>2];c[M+4>>2]=I;$z(J,29137,H);break a}k=c[G>>2]|0;if(e[l+8>>1]&8){h[I>>3]=+h[k>>3];$z(J,43396,I);break a}if(e[k+8>>1]&1){c[K>>2]=40498;break a}else{c[K>>2]=43402;break a}}case-10:{c[r>>2]=c[(c[(c[k>>2]|0)+16>>2]|0)+8>>2];c[w>>2]=c[r>>2];$z(J,43409,w);break}case-15:{c[m>>2]=c[(c[k>>2]|0)+16>>2];c[o>>2]=c[c[m>>2]>>2];c[n>>2]=1;while(1){if((c[n>>2]|0)>=(c[o>>2]|0))break;c[x>>2]=c[(c[m>>2]|0)+(c[n>>2]<<2)>>2];$z(J,43417,x);c[n>>2]=(c[n>>2]|0)+1}a[c[l>>2]>>0]=91;aA(J,43421,1);break}case-18:{$z(J,43423,y);break}case-19:{a[c[l>>2]>>0]=0;break}default:{c[K>>2]=c[(c[k>>2]|0)+16>>2];if(!(c[K>>2]|0)){c[K>>2]=c[l>>2];a[c[l>>2]>>0]=0}}}while(0);eg(J)|0;i=L;return c[K>>2]|0}function oM(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;i=i+16|0;g=f+8|0;h=f;c[g>>2]=a;a=h;c[a>>2]=d;c[a+4>>2]=e;fh(c[g>>2]|0);d=h;e=c[d+4>>2]|0;a=c[g>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=e;b[(c[g>>2]|0)+8>>1]=4;i=f;return}function pM(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;g=m+4|0;l=m;k=m+10|0;h=m+9|0;j=m+8|0;c[g>>2]=f;c[l>>2]=0;a[k>>0]=0;if((c[(c[g>>2]|0)+12>>2]|0)>1){a[h>>0]=a[c[(c[g>>2]|0)+16>>2]>>0]|0;a[j>>0]=a[(c[(c[g>>2]|0)+16>>2]|0)+1>>0]|0;if((d[h>>0]|0)==254?(d[j>>0]|0)==255:0)a[k>>0]=3;if((d[h>>0]|0)==255?(d[j>>0]|0)==254:0)a[k>>0]=2}if(!(a[k>>0]|0)){l=c[l>>2]|0;i=m;return l|0}c[l>>2]=_g(c[g>>2]|0)|0;if(c[l>>2]|0){l=c[l>>2]|0;i=m;return l|0}f=(c[g>>2]|0)+12|0;c[f>>2]=(c[f>>2]|0)-2;jR(c[(c[g>>2]|0)+16>>2]|0,(c[(c[g>>2]|0)+16>>2]|0)+2|0,c[(c[g>>2]|0)+12>>2]|0)|0;a[(c[(c[g>>2]|0)+16>>2]|0)+(c[(c[g>>2]|0)+12>>2]|0)>>0]=0;a[(c[(c[g>>2]|0)+16>>2]|0)+((c[(c[g>>2]|0)+12>>2]|0)+1)>>0]=0;f=(c[g>>2]|0)+8|0;b[f>>1]=e[f>>1]|512;a[(c[g>>2]|0)+10>>0]=a[k>>0]|0;l=c[l>>2]|0;i=m;return l|0}function qM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+16|0;e=f;g=f+4|0;c[e>>2]=b;a[g>>0]=d;if(!(rM(c[e>>2]|0,a[g>>0]|0)|0)){g=0;i=f;return g|0}g=c[(c[e>>2]|0)+12>>2]|0;i=f;return g|0}function rM(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l+4|0;j=l;k=l+8|0;c[j>>2]=f;a[k>>0]=g;g=c[j>>2]|0;if((e[(c[j>>2]|0)+8>>1]|0)&18){f=g+8|0;b[f>>1]=e[f>>1]|0|2;if((e[(c[j>>2]|0)+8>>1]|0)&16384)Vg(c[j>>2]|0)|0;if((d[(c[j>>2]|0)+10>>0]|0|0)!=((d[k>>0]|0)&-9|0))Zt(c[j>>2]|0,(d[k>>0]|0)&-9)|0;if((((d[k>>0]|0)&8|0)!=0?1==(1&c[(c[j>>2]|0)+16>>2]|0):0)?(_g(c[j>>2]|0)|0)!=0:0){c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}YH(c[j>>2]|0)|0}else sx(g,a[k>>0]|0,0)|0;if((d[(c[j>>2]|0)+10>>0]|0|0)==((d[k>>0]|0)&-9|0)){c[h>>2]=c[(c[j>>2]|0)+16>>2];k=c[h>>2]|0;i=l;return k|0}else{c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}return 0}function sM(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if((e[(c[b>>2]|0)+8>>1]|0)&9312)DF(c[b>>2]|0);if(!(c[(c[b>>2]|0)+24>>2]|0)){a=c[b>>2]|0;a=a+16|0;c[a>>2]=0;i=d;return}Sf(c[(c[b>>2]|0)+32>>2]|0,c[(c[b>>2]|0)+20>>2]|0);c[(c[b>>2]|0)+24>>2]=0;a=c[b>>2]|0;a=a+16|0;c[a>>2]=0;i=d;return}function tM(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=c[c[d>>2]>>2];Sf(c[e>>2]|0,c[(c[d>>2]|0)+44>>2]|0);c[(c[d>>2]|0)+44>>2]=0;c[(c[d>>2]|0)+20>>2]=0;i=b;return}function uM(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;li(c[d>>2]|0);jg(c[d>>2]|0,7);i=b;return 7}function vM(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;kj(c[(c[d>>2]|0)+60>>2]|0);c[(c[d>>2]|0)+60>>2]=0;i=b;return}function wM(b){b=b|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+8|0;f=g+4|0;h=g;c[e>>2]=b;c[f>>2]=c[(c[e>>2]|0)+4>>2];c[h>>2]=c[c[e>>2]>>2];a[(c[f>>2]|0)+19>>0]=0;if((d[(c[e>>2]|0)+8>>0]|0|0)>0?(c[(c[h>>2]|0)+152>>2]|0)>1:0){xM(c[e>>2]|0);a[(c[e>>2]|0)+8>>0]=1;i=g;return}if((d[(c[e>>2]|0)+8>>0]|0|0)!=0?(yM(c[e>>2]|0),h=(c[f>>2]|0)+40|0,c[h>>2]=(c[h>>2]|0)+-1,0==(c[(c[f>>2]|0)+40>>2]|0)):0)a[(c[f>>2]|0)+20>>0]=0;a[(c[e>>2]|0)+8>>0]=0;rB(c[f>>2]|0);i=g;return}function xM(d){d=d|0;var f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+8|0;f=h+4|0;g=h;c[j>>2]=d;c[f>>2]=c[(c[j>>2]|0)+4>>2];if((c[(c[f>>2]|0)+76>>2]|0)!=(c[j>>2]|0)){i=h;return}c[(c[f>>2]|0)+76>>2]=0;j=(c[f>>2]|0)+22|0;b[j>>1]=(e[j>>1]|0)&-97;c[g>>2]=c[(c[f>>2]|0)+72>>2];while(1){if(!(c[g>>2]|0))break;a[(c[g>>2]|0)+8>>0]=1;c[g>>2]=c[(c[g>>2]|0)+12>>2]}i=h;return}function yM(a){a=a|0;var d=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j+12|0;h=j+8|0;f=j+4|0;d=j;c[g>>2]=a;c[h>>2]=c[(c[g>>2]|0)+4>>2];c[f>>2]=(c[h>>2]|0)+72;while(1){if(!(c[c[f>>2]>>2]|0))break;c[d>>2]=c[c[f>>2]>>2];a=(c[d>>2]|0)+12|0;if((c[c[d>>2]>>2]|0)!=(c[g>>2]|0)){c[f>>2]=a;continue}c[c[f>>2]>>2]=c[a>>2];if((c[(c[d>>2]|0)+4>>2]|0)==1)continue;Kd(c[d>>2]|0)}a=c[h>>2]|0;if((c[(c[h>>2]|0)+76>>2]|0)==(c[g>>2]|0)){c[a+76>>2]=0;h=(c[h>>2]|0)+22|0;b[h>>1]=(e[h>>1]|0)&-97;i=j;return}if((c[a+40>>2]|0)!=2){i=j;return}h=(c[h>>2]|0)+22|0;b[h>>1]=(e[h>>1]|0)&-65;i=j;return}function zM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;d=m+28|0;e=m+24|0;l=m+20|0;k=m+16|0;g=m+12|0;h=m+8|0;f=m+4|0;j=m;c[e>>2]=b;c[l>>2]=0;c[k>>2]=c[c[e>>2]>>2];rJ(c[e>>2]|0);do if(!(a[(c[e>>2]|0)+18>>0]|0)){c[j>>2]=$E(c[e>>2]|0)|0;b=lF(c[e>>2]|0,c[j>>2]|0)|0;if((b|0)!=(c[j>>2]|0)?(c[j>>2]|0)!=((((c[381]|0)>>>0)/((c[(c[e>>2]|0)+32>>2]|0)>>>0)|0)+1|0):0){c[h>>2]=$q((c[(c[(c[e>>2]|0)+12>>2]|0)+56>>2]|0)+36|0)|0;c[g>>2]=qJ(c[e>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;if((c[g>>2]|0)>>>0>(c[j>>2]|0)>>>0){c[d>>2]=Lj(59231)|0;l=c[d>>2]|0;i=m;return l|0}if((c[g>>2]|0)>>>0<(c[j>>2]|0)>>>0)c[l>>2]=nH(c[e>>2]|0,0,0)|0;c[f>>2]=c[j>>2];while(1){if(!((c[f>>2]|0)>>>0>(c[g>>2]|0)>>>0?(c[l>>2]|0)==0:0))break;c[l>>2]=sJ(c[e>>2]|0,c[g>>2]|0,c[f>>2]|0,1)|0;c[f>>2]=(c[f>>2]|0)+-1}if(((c[l>>2]|0)==101|(c[l>>2]|0)==0)&(c[h>>2]|0)>>>0>0){c[l>>2]=Dg(c[(c[(c[e>>2]|0)+12>>2]|0)+72>>2]|0)|0;Xs((c[(c[(c[e>>2]|0)+12>>2]|0)+56>>2]|0)+32|0,0);Xs((c[(c[(c[e>>2]|0)+12>>2]|0)+56>>2]|0)+36|0,0);Xs((c[(c[(c[e>>2]|0)+12>>2]|0)+56>>2]|0)+28|0,c[g>>2]|0);a[(c[e>>2]|0)+19>>0]=1;c[(c[e>>2]|0)+44>>2]=c[g>>2]}if(!(c[l>>2]|0))break;jr(c[k>>2]|0)|0;break}c[d>>2]=Lj(59226)|0;l=c[d>>2]|0;i=m;return l|0}while(0);c[d>>2]=c[l>>2];l=c[d>>2]|0;i=m;return l|0}function AM(b){b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[f>>2]=b;c[g>>2]=0;b=c[f>>2]|0;if(c[(c[f>>2]|0)+44>>2]|0){c[e>>2]=c[b+44>>2];g=c[e>>2]|0;i=h;return g|0}if(((d[b+17>>0]|0|0)==2?(d[(c[f>>2]|0)+4>>0]|0|0)!=0:0)?(d[(c[f>>2]|0)+5>>0]|0|0)==1:0){a[(c[f>>2]|0)+17>>0]=1;c[e>>2]=0;g=c[e>>2]|0;i=h;return g|0}b=(c[f>>2]|0)+108|0;c[b>>2]=(c[b>>2]|0)+1;c[g>>2]=kr(c[f>>2]|0,d[(c[f>>2]|0)+20>>0]|0,1)|0;c[e>>2]=fr(c[f>>2]|0,c[g>>2]|0)|0;g=c[e>>2]|0;i=h;return g|0}function BM(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;g=h+4|0;f=h;c[e>>2]=b;c[h+8>>2]=d;c[g>>2]=0;if(a[(c[e>>2]|0)+19>>0]|0){g=c[g>>2]|0;i=h;return g|0}if((c[(c[e>>2]|0)+28>>2]|0)>>>0<=0){g=c[g>>2]|0;i=h;return g|0}c[g>>2]=sg(c[e>>2]|0,1,f,0)|0;if(!(c[g>>2]|0))c[g>>2]=Dg(c[f>>2]|0)|0;if(!(c[g>>2]|0)){qt(c[f>>2]|0);a[(c[e>>2]|0)+19>>0]=1}vg(c[f>>2]|0);g=c[g>>2]|0;i=h;return g|0}function CM(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=i;i=i+48|0;f=o+36|0;g=o+32|0;h=o+28|0;n=o+24|0;m=o+20|0;k=o+8|0;l=o;j=o+16|0;c[g>>2]=b;c[h>>2]=e;c[j>>2]=0;if(((c[h>>2]|0)!=0?(d[(c[g>>2]|0)+5>>0]|0)!=4:0)?(c[c[(c[g>>2]|0)+68>>2]>>2]|0)!=0:0){a[(c[g>>2]|0)+20>>0]=1;c[m>>2]=0;while(1){if(!(a[(c[h>>2]|0)+(c[m>>2]|0)>>0]|0))break;c[j>>2]=(c[j>>2]|0)+(a[(c[h>>2]|0)+(c[m>>2]|0)>>0]|0);c[m>>2]=(c[m>>2]|0)+1}if(a[(c[g>>2]|0)+8>>0]|0){b=fs(c[g>>2]|0)|0;e=(c[g>>2]|0)+80|0;c[e>>2]=b;c[e+4>>2]=C}p=(c[g>>2]|0)+80|0;b=c[p+4>>2]|0;e=k;c[e>>2]=c[p>>2];c[e+4>>2]=b;e=k;e=Gt(c[(c[g>>2]|0)+68>>2]|0,c[e>>2]|0,c[e+4>>2]|0,((c[381]|0)/(c[(c[g>>2]|0)+160>>2]|0)|0)+1|0)|0;c[n>>2]=e;if((((0==(e|0)?(q=c[(c[g>>2]|0)+68>>2]|0,b=c[h>>2]|0,e=c[m>>2]|0,p=k,p=gR(c[p>>2]|0,c[p+4>>2]|0,4,0)|0,p=Fg(q,b,e,p,C)|0,c[n>>2]=p,0==(p|0)):0)?(p=c[(c[g>>2]|0)+68>>2]|0,e=k,e=gR(c[e>>2]|0,c[e+4>>2]|0,4,0)|0,q=c[m>>2]|0,q=gR(e|0,C|0,q|0,((q|0)<0)<<31>>31|0)|0,q=Gt(p,q,C,c[m>>2]|0)|0,c[n>>2]=q,0==(q|0)):0)?(p=c[(c[g>>2]|0)+68>>2]|0,e=k,e=gR(c[e>>2]|0,c[e+4>>2]|0,4,0)|0,q=c[m>>2]|0,q=gR(e|0,C|0,q|0,((q|0)<0)<<31>>31|0)|0,q=gR(q|0,C|0,4,0)|0,q=Gt(p,q,C,c[j>>2]|0)|0,c[n>>2]=q,0==(q|0)):0)?(p=c[(c[g>>2]|0)+68>>2]|0,e=k,e=gR(c[e>>2]|0,c[e+4>>2]|0,4,0)|0,q=c[m>>2]|0,q=gR(e|0,C|0,q|0,((q|0)<0)<<31>>31|0)|0,q=gR(q|0,C|0,8,0)|0,q=Fg(p,26758,8,q,C)|0,c[n>>2]=q,0==(q|0)):0){p=(c[m>>2]|0)+20|0;q=(c[g>>2]|0)+80|0;e=q;p=gR(c[e>>2]|0,c[e+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;c[q>>2]=p;c[q+4>>2]=C;q=Si(c[(c[g>>2]|0)+68>>2]|0,l)|0;c[n>>2]=q;if(0==(q|0)?(p=l,b=c[p+4>>2]|0,q=(c[g>>2]|0)+80|0,e=c[q+4>>2]|0,(b|0)>(e|0)|((b|0)==(e|0)?(c[p>>2]|0)>>>0>(c[q>>2]|0)>>>0:0)):0){q=(c[g>>2]|0)+80|0;c[n>>2]=nr(c[(c[g>>2]|0)+68>>2]|0,c[q>>2]|0,c[q+4>>2]|0)|0}c[f>>2]=c[n>>2];q=c[f>>2]|0;i=o;return q|0}c[f>>2]=c[n>>2];q=c[f>>2]|0;i=o;return q|0}c[f>>2]=0;q=c[f>>2]|0;i=o;return q|0}function DM(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+48|0;g=u+44|0;s=u+40|0;k=u+36|0;r=u+32|0;j=u+28|0;h=u+24|0;m=u+20|0;p=u+16|0;l=u+12|0;q=u+8|0;n=u+4|0;o=u;c[g>>2]=f;c[s>>2]=0;c[j>>2]=0;c[m>>2]=0;c[p>>2]=c[(c[g>>2]|0)+16>>2];c[l>>2]=((c[(c[p>>2]|0)+156>>2]|0)>>>0)/((c[(c[p>>2]|0)+160>>2]|0)>>>0)|0;f=(c[p>>2]|0)+21|0;a[f>>0]=d[f>>0]|0|4;c[r>>2]=((c[(c[g>>2]|0)+20>>2]|0)-1&~((c[l>>2]|0)-1))+1;c[k>>2]=c[(c[p>>2]|0)+28>>2];do if((c[(c[g>>2]|0)+20>>2]|0)>>>0<=(c[k>>2]|0)>>>0)if(((c[r>>2]|0)+(c[l>>2]|0)-1|0)>>>0>(c[k>>2]|0)>>>0){c[j>>2]=(c[k>>2]|0)+1-(c[r>>2]|0);break}else{c[j>>2]=c[l>>2];break}else c[j>>2]=(c[(c[g>>2]|0)+20>>2]|0)-(c[r>>2]|0)+1;while(0);c[h>>2]=0;while(1){if(!((c[h>>2]|0)<(c[j>>2]|0)?(c[s>>2]|0)==0:0))break;c[q>>2]=(c[r>>2]|0)+(c[h>>2]|0);if((c[q>>2]|0)!=(c[(c[g>>2]|0)+20>>2]|0)?(ij(c[(c[p>>2]|0)+60>>2]|0,c[q>>2]|0)|0)!=0:0){f=Zr(c[p>>2]|0,c[q>>2]|0)|0;c[n>>2]=f;if(f){if((e[(c[n>>2]|0)+24>>1]|0)&8)c[m>>2]=1;zs(c[n>>2]|0)}}else t=10;if(((t|0)==10?(t=0,(c[q>>2]|0)!=(((c[381]|0)/(c[(c[p>>2]|0)+160>>2]|0)|0)+1|0)):0)?(c[s>>2]=sg(c[p>>2]|0,c[q>>2]|0,n,0)|0,(c[s>>2]|0)==0):0){c[s>>2]=EM(c[n>>2]|0)|0;if((e[(c[n>>2]|0)+24>>1]|0)&8)c[m>>2]=1;zs(c[n>>2]|0)}c[h>>2]=(c[h>>2]|0)+1}if(!((c[s>>2]|0)==0&(c[m>>2]|0)!=0)){t=c[p>>2]|0;t=t+21|0;r=a[t>>0]|0;r=r&255;r=r&-5;r=r&255;a[t>>0]=r;t=c[s>>2]|0;i=u;return t|0}c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[j>>2]|0))break;c[o>>2]=Zr(c[p>>2]|0,(c[r>>2]|0)+(c[h>>2]|0)|0)|0;if(c[o>>2]|0){t=(c[o>>2]|0)+24|0;b[t>>1]=e[t>>1]|0|8;zs(c[o>>2]|0)}c[h>>2]=(c[h>>2]|0)+1}t=c[p>>2]|0;t=t+21|0;r=a[t>>0]|0;r=r&255;r=r&-5;r=r&255;a[t>>0]=r;t=c[s>>2]|0;i=u;return t|0}function EM(a){a=a|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=a;c[h>>2]=c[(c[g>>2]|0)+16>>2];c[j>>2]=0;if((d[(c[h>>2]|0)+17>>0]|0|0)==2?(c[j>>2]=FM(c[h>>2]|0)|0,(c[j>>2]|0)!=0):0){c[f>>2]=c[j>>2];j=c[f>>2]|0;i=k;return j|0}$r(c[g>>2]|0);do if((c[(c[h>>2]|0)+60>>2]|0)!=0?(lj(c[(c[h>>2]|0)+60>>2]|0,c[(c[g>>2]|0)+20>>2]|0)|0)==0:0){if((c[(c[g>>2]|0)+20>>2]|0)>>>0>(c[(c[h>>2]|0)+32>>2]|0)>>>0){if((d[(c[h>>2]|0)+17>>0]|0|0)==4)break;a=(c[g>>2]|0)+24|0;b[a>>1]=e[a>>1]|0|8;break}c[j>>2]=GM(c[g>>2]|0)|0;if(c[j>>2]|0){c[f>>2]=c[j>>2];j=c[f>>2]|0;i=k;return j|0}}while(0);a=(c[g>>2]|0)+24|0;b[a>>1]=e[a>>1]|0|4;if((c[(c[h>>2]|0)+104>>2]|0)>0)c[j>>2]=lt(c[g>>2]|0)|0;if((c[(c[h>>2]|0)+28>>2]|0)>>>0<(c[(c[g>>2]|0)+20>>2]|0)>>>0)c[(c[h>>2]|0)+28>>2]=c[(c[g>>2]|0)+20>>2];c[f>>2]=c[j>>2];j=c[f>>2]|0;i=k;return j|0}function FM(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;g=k+16|0;h=k+12|0;j=k+8|0;f=k+4|0;e=k;c[h>>2]=b;c[j>>2]=0;c[f>>2]=c[c[h>>2]>>2];b=c[h>>2]|0;if(c[(c[h>>2]|0)+44>>2]|0){c[g>>2]=c[b+44>>2];j=c[g>>2]|0;i=k;return j|0}if((sr(b)|0)==0?(d[(c[h>>2]|0)+5>>0]|0|0)!=2:0){b=fj(c[(c[h>>2]|0)+28>>2]|0)|0;c[(c[h>>2]|0)+60>>2]=b;if(!(c[(c[h>>2]|0)+60>>2]|0)){c[g>>2]=7;j=c[g>>2]|0;i=k;return j|0}do if(!(c[c[(c[h>>2]|0)+68>>2]>>2]|0)){b=c[h>>2]|0;if((d[(c[h>>2]|0)+5>>0]|0|0)==4){Ir(c[b+68>>2]|0);break}c[e>>2]=6|((d[b+13>>0]|0|0)!=0?4104:2048);c[j>>2]=HM(c[h>>2]|0)|0;if(!(c[j>>2]|0))c[j>>2]=Vr(c[f>>2]|0,c[(c[h>>2]|0)+180>>2]|0,c[(c[h>>2]|0)+68>>2]|0,c[e>>2]|0,0)|0}while(0);if(!(c[j>>2]|0)){c[(c[h>>2]|0)+48>>2]=0;f=(c[h>>2]|0)+80|0;c[f>>2]=0;c[f+4>>2]=0;a[(c[h>>2]|0)+20>>0]=0;f=(c[h>>2]|0)+88|0;c[f>>2]=0;c[f+4>>2]=0;c[j>>2]=st(c[h>>2]|0)|0}}b=c[h>>2]|0;if(c[j>>2]|0){kj(c[b+60>>2]|0);c[(c[h>>2]|0)+60>>2]=0}else a[b+17>>0]=3;c[g>>2]=c[j>>2];j=c[g>>2]|0;i=k;return j|0}function GM(a){a=a|0;var d=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=i;i=i+32|0;d=m+28|0;f=m+24|0;k=m+20|0;l=m+16|0;g=m+12|0;j=m+8|0;h=m;c[f>>2]=a;c[k>>2]=c[(c[f>>2]|0)+16>>2];o=(c[k>>2]|0)+80|0;n=c[o+4>>2]|0;a=h;c[a>>2]=c[o>>2];c[a+4>>2]=n;c[j>>2]=c[(c[f>>2]|0)+4>>2];c[g>>2]=Yr(c[k>>2]|0,c[j>>2]|0)|0;a=(c[f>>2]|0)+24|0;b[a>>1]=e[a>>1]|0|8;a=h;c[l>>2]=Gt(c[(c[k>>2]|0)+68>>2]|0,c[a>>2]|0,c[a+4>>2]|0,c[(c[f>>2]|0)+20>>2]|0)|0; +if(c[l>>2]|0){c[d>>2]=c[l>>2];o=c[d>>2]|0;i=m;return o|0}p=c[(c[k>>2]|0)+68>>2]|0;a=c[j>>2]|0;n=c[(c[k>>2]|0)+160>>2]|0;o=h;o=gR(c[o>>2]|0,c[o+4>>2]|0,4,0)|0;c[l>>2]=Fg(p,a,n,o,C)|0;if(c[l>>2]|0){c[d>>2]=c[l>>2];p=c[d>>2]|0;i=m;return p|0}o=c[(c[k>>2]|0)+68>>2]|0;n=h;p=c[(c[k>>2]|0)+160>>2]|0;p=gR(c[n>>2]|0,c[n+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;p=gR(p|0,C|0,4,0)|0;c[l>>2]=Gt(o,p,C,c[g>>2]|0)|0;if(c[l>>2]|0){c[d>>2]=c[l>>2];p=c[d>>2]|0;i=m;return p|0}else{o=8+(c[(c[k>>2]|0)+160>>2]|0)|0;p=(c[k>>2]|0)+80|0;n=p;o=gR(c[n>>2]|0,c[n+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;c[p>>2]=o;c[p+4>>2]=C;p=(c[k>>2]|0)+48|0;c[p>>2]=(c[p>>2]|0)+1;c[l>>2]=gj(c[(c[k>>2]|0)+60>>2]|0,c[(c[f>>2]|0)+20>>2]|0)|0;p=Ht(c[k>>2]|0,c[(c[f>>2]|0)+20>>2]|0)|0;c[l>>2]=c[l>>2]|p;c[d>>2]=c[l>>2];p=c[d>>2]|0;i=m;return p|0}return 0}function HM(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=b;c[f>>2]=0;if(a[(c[e>>2]|0)+13>>0]|0){c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}if(!(c[(c[e>>2]|0)+28>>2]|0)){c[d>>2]=0;g=c[d>>2]|0;i=h;return g|0}c[g>>2]=vi(c[(c[e>>2]|0)+64>>2]|0,20,f)|0;if((c[g>>2]|0)!=12){if((c[g>>2]|0)==0&(c[f>>2]|0)!=0)c[g>>2]=1032}else c[g>>2]=0;c[d>>2]=c[g>>2];g=c[d>>2]|0;i=h;return g|0}function IM(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;m=o+4|0;n=o;c[j>>2]=a;c[k>>2]=d;c[l>>2]=f;c[m>>2]=g;f=c[j>>2]|0;do if(c[(c[j>>2]|0)+144>>2]|0){g=c[f+144>>2]|0;c[n>>2]=g;c[c[m>>2]>>2]=g;c[(c[j>>2]|0)+144>>2]=c[(c[n>>2]|0)+12>>2];c[(c[n>>2]|0)+12>>2]=0;kR(c[(c[n>>2]|0)+8>>2]|0,0,e[(c[j>>2]|0)+148>>1]|0|0)|0}else{g=ig(40+(e[f+148>>1]|0)|0,0)|0;c[n>>2]=g;c[c[m>>2]>>2]=g;if(c[n>>2]|0){c[(c[n>>2]|0)+8>>2]=(c[n>>2]|0)+40;b[(c[n>>2]|0)+24>>1]=64;b[(c[n>>2]|0)+26>>1]=1;c[(c[n>>2]|0)+16>>2]=c[j>>2];break}m=c[(c[j>>2]|0)+64>>2]|0;n=c[(c[j>>2]|0)+160>>2]|0;n=rR((c[k>>2]|0)-1|0,0,n|0,((n|0)<0)<<31>>31|0)|0;Cs(m,n,C,c[l>>2]|0)|0;c[h>>2]=7;n=c[h>>2]|0;i=o;return n|0}while(0);c[(c[n>>2]|0)+20>>2]=c[k>>2];c[(c[n>>2]|0)+4>>2]=c[l>>2];n=(c[j>>2]|0)+128|0;c[n>>2]=(c[n>>2]|0)+1;c[h>>2]=0;n=c[h>>2]|0;i=o;return n|0}function JM(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;m=o+4|0;n=o;c[j>>2]=a;c[k>>2]=f;c[l>>2]=g;if((d[(c[j>>2]|0)+33>>0]|0)==2){c[h>>2]=0;n=c[h>>2]|0;i=o;return n|0}g=KM(c[j>>2]|0)|0;if((g|0)>(c[(c[j>>2]|0)+20>>2]|0)){c[m>>2]=c[(c[j>>2]|0)+8>>2];while(1){if(!(c[m>>2]|0))break;if((b[(c[m>>2]|0)+26>>1]|0)==0?(e[(c[m>>2]|0)+24>>1]&8|0)==0:0)break;c[m>>2]=c[(c[m>>2]|0)+36>>2]}c[(c[j>>2]|0)+8>>2]=c[m>>2];a:do if(!(c[m>>2]|0)){c[m>>2]=c[(c[j>>2]|0)+4>>2];while(1){if(!(c[m>>2]|0))break a;if(!(b[(c[m>>2]|0)+26>>1]|0))break a;c[m>>2]=c[(c[m>>2]|0)+36>>2]}}while(0);if((c[m>>2]|0)!=0?(c[n>>2]=Yb[c[(c[j>>2]|0)+36>>2]&255](c[(c[j>>2]|0)+40>>2]|0,c[m>>2]|0)|0,(c[n>>2]|0)!=0&(c[n>>2]|0)!=5):0){c[h>>2]=c[n>>2];n=c[h>>2]|0;i=o;return n|0}}n=Ob[c[140>>2]&255](c[(c[j>>2]|0)+44>>2]|0,c[k>>2]|0,2)|0;c[c[l>>2]>>2]=n;c[h>>2]=(c[c[l>>2]>>2]|0)==0?7:0;n=c[h>>2]|0;i=o;return n|0}function KM(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Tb[c[136>>2]&255](c[(c[d>>2]|0)+44>>2]|0)|0;i=b;return a|0}function LM(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[(c[b>>2]|0)+108>>2]|0}function MM(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;n=r+40|0;o=r+36|0;l=r+32|0;q=r+28|0;p=r+24|0;h=r+20|0;k=r+12|0;m=r+8|0;j=r+4|0;g=r;c[o>>2]=f;c[h>>2]=0;c[l>>2]=LJ(c[c[o>>2]>>2]|0)|0;if(c[l>>2]|0){c[n>>2]=c[l>>2];q=c[n>>2]|0;i=r;return q|0}c[l>>2]=nF(c[o>>2]|0,1,q,0)|0;if(c[l>>2]|0){c[n>>2]=c[l>>2];q=c[n>>2]|0;i=r;return q|0}f=$q((c[(c[q>>2]|0)+56>>2]|0)+28|0)|0;c[r+16>>2]=f;c[p>>2]=f;Cg(c[c[o>>2]>>2]|0,h);if(!((c[p>>2]|0)!=0?(vQ((c[(c[q>>2]|0)+56>>2]|0)+24|0,(c[(c[q>>2]|0)+56>>2]|0)+92|0,4)|0)==0:0))c[p>>2]=c[h>>2];a:do if((c[p>>2]|0)>0){c[j>>2]=c[(c[q>>2]|0)+56>>2];c[l>>2]=26;b:do if(!(vQ(c[j>>2]|0,43252,16)|0)){if((d[(c[j>>2]|0)+18>>0]|0|0)>2){f=(c[o>>2]|0)+22|0;b[f>>1]=e[f>>1]|0|1}if((d[(c[j>>2]|0)+19>>0]|0|0)<=2){do if((d[(c[j>>2]|0)+19>>0]|0|0)==2?((e[(c[o>>2]|0)+22>>1]|0)&16|0)==0:0){c[g>>2]=0;c[l>>2]=RJ(c[c[o>>2]>>2]|0,g)|0;if(c[l>>2]|0)break b;if(c[g>>2]|0){c[l>>2]=26;break}qB(c[q>>2]|0);c[n>>2]=0;q=c[n>>2]|0;i=r;return q|0}while(0);if((vQ((c[j>>2]|0)+21|0,45492,3)|0)==0?(c[k>>2]=(d[(c[j>>2]|0)+16>>0]|0)<<8|(d[(c[j>>2]|0)+17>>0]|0)<<16,!(((c[k>>2]|0)>>>0>65536?1:((c[k>>2]|0)-1&c[k>>2]|0)!=0)|(c[k>>2]|0)>>>0<=256)):0){c[m>>2]=(c[k>>2]|0)-(d[(c[j>>2]|0)+20>>0]|0);if((c[k>>2]|0)!=(c[(c[o>>2]|0)+32>>2]|0)){qB(c[q>>2]|0);c[(c[o>>2]|0)+36>>2]=c[m>>2];c[(c[o>>2]|0)+32>>2]=c[k>>2];Pi(c[o>>2]|0);c[l>>2]=Qi(c[c[o>>2]>>2]|0,(c[o>>2]|0)+32|0,(c[k>>2]|0)-(c[m>>2]|0)|0)|0;c[n>>2]=c[l>>2];q=c[n>>2]|0;i=r;return q|0}if((c[(c[(c[o>>2]|0)+4>>2]|0)+24>>2]&65536|0)==0?(c[p>>2]|0)>(c[h>>2]|0):0){c[l>>2]=Lj(58503)|0;break}if((c[m>>2]|0)>>>0>=480){c[(c[o>>2]|0)+32>>2]=c[k>>2];c[(c[o>>2]|0)+36>>2]=c[m>>2];m=($q((c[j>>2]|0)+52|0)|0)!=0;a[(c[o>>2]|0)+17>>0]=m?1:0;m=($q((c[j>>2]|0)+64|0)|0)!=0;a[(c[o>>2]|0)+18>>0]=m?1:0;break a}}}}while(0);qB(c[q>>2]|0);c[(c[o>>2]|0)+12>>2]=0;c[n>>2]=c[l>>2];q=c[n>>2]|0;i=r;return q|0}while(0);b[(c[o>>2]|0)+24>>1]=(((c[(c[o>>2]|0)+36>>2]|0)-12<<6>>>0)/255|0)-23;b[(c[o>>2]|0)+26>>1]=(((c[(c[o>>2]|0)+36>>2]|0)-12<<5>>>0)/255|0)-23;b[(c[o>>2]|0)+28>>1]=(c[(c[o>>2]|0)+36>>2]|0)-35;b[(c[o>>2]|0)+30>>1]=(((c[(c[o>>2]|0)+36>>2]|0)-12<<5>>>0)/255|0)-23;g=c[o>>2]|0;if((e[(c[o>>2]|0)+24>>1]|0|0)>127)a[g+21>>0]=127;else a[(c[o>>2]|0)+21>>0]=b[g+24>>1];c[(c[o>>2]|0)+12>>2]=c[q>>2];c[(c[o>>2]|0)+44>>2]=c[p>>2];c[n>>2]=0;q=c[n>>2]|0;i=r;return q|0}function NM(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;h=m+16|0;j=m+12|0;k=m+8|0;g=m+4|0;l=m;c[j>>2]=b;c[k>>2]=e;c[g>>2]=f;c[l>>2]=0;if(c[(c[j>>2]|0)+44>>2]|0){c[h>>2]=c[(c[j>>2]|0)+44>>2];l=c[h>>2]|0;i=m;return l|0}a[(c[j>>2]|0)+22>>0]=c[g>>2];if((d[(c[j>>2]|0)+17>>0]|0|0)==1){f=(sr(c[j>>2]|0)|0)!=0;g=c[j>>2]|0;if(!f){c[l>>2]=vt(g,2)|0;if((c[l>>2]|0)==0&(c[k>>2]|0)!=0)c[l>>2]=ut(c[j>>2]|0,4)|0}else{do if((d[g+4>>0]|0|0)!=0?(vr(c[(c[j>>2]|0)+216>>2]|0,-1)|0)!=0:0){c[l>>2]=vt(c[j>>2]|0,4)|0;if(!(c[l>>2]|0)){vr(c[(c[j>>2]|0)+216>>2]|0,1)|0;break}c[h>>2]=c[l>>2];l=c[h>>2]|0;i=m;return l|0}while(0);c[l>>2]=OM(c[(c[j>>2]|0)+216>>2]|0)|0}if(!(c[l>>2]|0)){a[(c[j>>2]|0)+17>>0]=2;c[(c[j>>2]|0)+40>>2]=c[(c[j>>2]|0)+28>>2];c[(c[j>>2]|0)+36>>2]=c[(c[j>>2]|0)+28>>2];c[(c[j>>2]|0)+32>>2]=c[(c[j>>2]|0)+28>>2];k=(c[j>>2]|0)+80|0;c[k>>2]=0;c[k+4>>2]=0}}c[h>>2]=c[l>>2];l=c[h>>2]|0;i=m;return l|0}function OM(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[e>>2]=b;if(a[(c[e>>2]|0)+46>>0]|0){c[d>>2]=8;f=c[d>>2]|0;i=g;return f|0}c[f>>2]=Ns(c[e>>2]|0,0,1)|0;if(c[f>>2]|0){c[d>>2]=c[f>>2];f=c[d>>2]|0;i=g;return f|0}a[(c[e>>2]|0)+44>>0]=1;b=(c[e>>2]|0)+52|0;if(vQ(b,ts(c[e>>2]|0)|0,48)|0){Br(c[e>>2]|0,0,1);a[(c[e>>2]|0)+44>>0]=0;c[f>>2]=517}c[d>>2]=c[f>>2];f=c[d>>2]|0;i=g;return f|0}function PM(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;fh(c[d>>2]|0);i=b;return}function QM(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,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=i;i=i+624|0;g=H+92|0;h=H+88|0;j=H+84|0;k=H+80|0;l=H+76|0;m=H+72|0;z=H+68|0;p=H+64|0;x=H+60|0;o=H+56|0;w=H+52|0;B=H+48|0;n=H+44|0;t=H+40|0;s=H+36|0;r=H+32|0;v=H+28|0;u=H+24|0;C=H+20|0;F=H+96|0;E=H+16|0;A=H+12|0;y=H+8|0;D=H+4|0;q=H;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[z>>2]=c[k>>2];c[p>>2]=-1;c[x>>2]=0;c[o>>2]=c[l>>2]&-256;c[B>>2]=0;c[n>>2]=0;c[t>>2]=c[l>>2]&16;c[s>>2]=c[l>>2]&8;c[r>>2]=c[l>>2]&4;c[v>>2]=c[l>>2]&1;c[u>>2]=c[l>>2]&2;if(c[r>>2]|0)if((c[o>>2]|0)==16384|(c[o>>2]|0)==2048)e=1;else e=(c[o>>2]|0)==524288;else e=0;c[C>>2]=e&1;c[E>>2]=c[j>>2];b=c[1926]|0;if((b|0)!=(LQ()|0)){c[1926]=LQ()|0;Sd(0,0)}e=c[z>>2]|0;d=e+44|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(d|0));e=c[E>>2]|0;do if((c[o>>2]|0)!=256){if(!e){c[B>>2]=FN(c[(c[h>>2]|0)+8>>2]|0,F)|0;if(!(c[B>>2]|0)){c[E>>2]=F;break}c[g>>2]=c[B>>2];G=c[g>>2]|0;i=H;return G|0}}else{c[A>>2]=WN(e,c[l>>2]|0)|0;if(!(c[A>>2]|0)){c[A>>2]=Jd(12,0)|0;if(!(c[A>>2]|0)){c[g>>2]=7;G=c[g>>2]|0;i=H;return G|0}}else c[p>>2]=c[c[A>>2]>>2];c[(c[z>>2]|0)+28>>2]=c[A>>2]}while(0);if(c[v>>2]|0)c[x>>2]=c[x>>2];if(c[u>>2]|0)c[x>>2]=c[x>>2]|2;if(c[r>>2]|0)c[x>>2]=c[x>>2]|64;if(c[t>>2]|0)c[x>>2]=c[x>>2]|131200;c[x>>2]=c[x>>2];do if((c[p>>2]|0)<0){c[B>>2]=XN(c[E>>2]|0,c[l>>2]|0,y,D,q)|0;if(c[B>>2]|0){c[g>>2]=c[B>>2];G=c[g>>2]|0;i=H;return G|0}c[p>>2]=BN(c[E>>2]|0,c[x>>2]|0,c[y>>2]|0)|0;if((c[p>>2]|0)<0?(F=(c[(SP()|0)>>2]|0)!=21,F&(c[u>>2]|0)!=0):0){c[l>>2]=c[l>>2]&-7;c[x>>2]=c[x>>2]&-67;c[l>>2]=c[l>>2]|1;c[x>>2]=c[x>>2];c[v>>2]=1;c[p>>2]=BN(c[E>>2]|0,c[x>>2]|0,c[y>>2]|0)|0}if((c[p>>2]|0)<0){F=et(33050)|0;c[B>>2]=xN(F,45571,c[E>>2]|0,33050)|0;break}if(c[l>>2]&526336){YN(c[p>>2]|0,c[D>>2]|0,c[q>>2]|0)|0;G=34}else G=34}else G=34;while(0);if((G|0)==34){if(c[m>>2]|0)c[c[m>>2]>>2]=c[l>>2];if(c[(c[z>>2]|0)+28>>2]|0){c[c[(c[z>>2]|0)+28>>2]>>2]=c[p>>2];c[(c[(c[z>>2]|0)+28>>2]|0)+4>>2]=c[l>>2]}if(c[s>>2]|0)Tb[c[7464>>2]&255](c[E>>2]|0)|0;c[w>>2]=(c[o>>2]|0)!=256&1;if(c[s>>2]|0)c[n>>2]=c[n>>2]|32;if(c[v>>2]|0)c[n>>2]=c[n>>2]|2;if(c[w>>2]|0)c[n>>2]=c[n>>2]|128;if(c[C>>2]|0)c[n>>2]=c[n>>2]|8;if(c[l>>2]&64)c[n>>2]=c[n>>2]|64;c[B>>2]=ZN(c[h>>2]|0,c[p>>2]|0,c[k>>2]|0,c[j>>2]|0,c[n>>2]|0)|0}if(c[B>>2]|0)Kd(c[(c[z>>2]|0)+28>>2]|0);c[g>>2]=c[B>>2];G=c[g>>2]|0;i=H;return G|0}function RM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+20|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[k+16>>2]=a;c[f>>2]=b;c[g>>2]=d;c[j>>2]=0;if((Tb[c[7464>>2]&255](c[f>>2]|0)|0)==-1){if((c[(SP()|0)>>2]|0)==2)c[j>>2]=5898;else c[j>>2]=xN(2570,45668,c[f>>2]|0,33178)|0;c[e>>2]=c[j>>2];b=c[e>>2]|0;i=k;return b|0}do if(c[g>>2]&1){c[j>>2]=Yb[c[7476>>2]&255](c[f>>2]|0,h)|0;if(c[j>>2]|0){c[j>>2]=0;break}if(MN(c[h>>2]|0,0,0)|0)c[j>>2]=xN(1290,45902,c[f>>2]|0,33188)|0;wN(0,c[h>>2]|0,33190)}while(0);c[e>>2]=c[j>>2];b=c[e>>2]|0;i=k;return b|0}function SM(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;j=i;i=i+96|0;f=j+84|0;k=j+80|0;g=j+76|0;h=j;c[j+88>>2]=a;c[f>>2]=b;c[k>>2]=d;c[g>>2]=e;if(!(c[k>>2]|0)){k=0==(Yb[c[7320>>2]&255](c[f>>2]|0,h)|0);c[c[g>>2]>>2]=(k?(c[h+36>>2]|0)>0:0)&1;i=j;return 0}else{k=(Yb[c[7296>>2]&255](c[f>>2]|0,6)|0)==0&1;c[c[g>>2]>>2]=k;i=j;return 0}return 0}function TM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+128|0;s=r+112|0;g=r+108|0;h=r+104|0;p=r+100|0;m=r+96|0;n=r+92|0;o=r+88|0;q=r+84|0;j=r+80|0;k=r+4|0;l=r;c[r+116>>2]=b;c[s>>2]=d;c[g>>2]=e;c[h>>2]=f;c[p>>2]=0;c[n>>2]=1;c[o>>2]=c[s>>2];c[q>>2]=0;while(1){c[j>>2]=0;if(Yb[c[7596>>2]&255](c[o>>2]|0,k)|0){if((c[(SP()|0)>>2]|0)!=2){s=et(33302)|0;c[p>>2]=xN(s,45756,c[o>>2]|0,33302)|0}}else c[j>>2]=(c[k+12>>2]&61440|0)==40960&1;if(c[j>>2]|0){if(!(c[q>>2]|0)){c[q>>2]=Id(c[g>>2]|0)|0;if(!(c[q>>2]|0))c[p>>2]=7}else{s=(c[n>>2]|0)+1|0;c[n>>2]=s;if((s|0)>100)c[p>>2]=et(33313)|0}do if(!(c[p>>2]|0)){c[m>>2]=Ob[c[7584>>2]&255](c[o>>2]|0,c[q>>2]|0,(c[g>>2]|0)-1|0)|0;if((c[m>>2]|0)<0){s=et(33319)|0;c[p>>2]=xN(s,45747,c[o>>2]|0,33319)|0;break}do if((a[c[q>>2]>>0]|0)!=47){c[l>>2]=If(c[o>>2]|0)|0;while(1){if((c[l>>2]|0)<=0)break;if((a[(c[o>>2]|0)+((c[l>>2]|0)-1)>>0]|0)==47)break;c[l>>2]=(c[l>>2]|0)+-1}if(((c[m>>2]|0)+(c[l>>2]|0)+1|0)>(c[g>>2]|0)){c[p>>2]=et(33325)|0;break}else{jR((c[q>>2]|0)+(c[l>>2]|0)|0,c[q>>2]|0,(c[m>>2]|0)+1|0)|0;iR(c[q>>2]|0,c[o>>2]|0,c[l>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+(c[l>>2]|0);break}}while(0);a[(c[q>>2]|0)+(c[m>>2]|0)>>0]=0}while(0);c[o>>2]=c[q>>2]}if((c[p>>2]|0)==0?(c[o>>2]|0)!=(c[h>>2]|0):0)c[p>>2]=VN(c[o>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;if(!(c[j>>2]|0)){g=30;break}c[o>>2]=c[h>>2];if(c[p>>2]|0){g=30;break}}if((g|0)==30){Kd(c[q>>2]|0);i=r;return c[p>>2]|0}return 0}function UM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[l+20>>2]=b;c[f>>2]=d;c[g>>2]=e;kR(c[g>>2]|0,0,c[f>>2]|0)|0;c[1926]=LQ()|0;c[h>>2]=BN(45889,0,0)|0;if((c[h>>2]|0)<0){Fb(k|0)|0;e=c[g>>2]|0;a[e>>0]=a[k>>0]|0;a[e+1>>0]=a[k+1>>0]|0;a[e+2>>0]=a[k+2>>0]|0;a[e+3>>0]=a[k+3>>0]|0;e=(c[g>>2]|0)+4|0;a[e>>0]=a[7704]|0;a[e+1>>0]=a[7705]|0;a[e+2>>0]=a[7706]|0;a[e+3>>0]=a[7707]|0;c[f>>2]=8;e=c[f>>2]|0;i=l;return e|0}do{c[j>>2]=Ob[c[7368>>2]&255](c[h>>2]|0,c[g>>2]|0,c[f>>2]|0)|0;if((c[j>>2]|0)>=0)break}while((c[(SP()|0)>>2]|0)==4);wN(0,c[h>>2]|0,33449);e=c[f>>2]|0;i=l;return e|0}function VM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[e+8>>2]=a;c[f>>2]=b;c[d>>2]=((c[f>>2]|0)+999999|0)/1e6|0;QQ(c[d>>2]|0)|0;i=e;return(c[d>>2]|0)*1e6|0}function WM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+32|0;f=e+12|0;g=e;d=e+8|0;c[e+16>>2]=a;c[f>>2]=b;b=g;c[b>>2]=0;c[b+4>>2]=0;c[d>>2]=YM(0,g)|0;b=g;h[c[f>>2]>>3]=(+((c[b>>2]|0)>>>0)+4294967296.0*+(c[b+4>>2]|0))/864.0e5;i=e;return c[d>>2]|0}function XM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=i;i=i+16|0;c[e+8>>2]=a;c[e+4>>2]=b;c[e>>2]=d;i=e;return 0}function YM(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=i;i=i+32|0;f=e+12|0;d=e+8|0;g=e;c[e+16>>2]=a;c[f>>2]=b;c[d>>2]=0;Hb(g|0,0)|0;b=c[g>>2]|0;b=rR(1e3,0,b|0,((b|0)<0)<<31>>31|0)|0;b=gR(1045635584,49096,b|0,C|0)|0;a=(c[g+4>>2]|0)/1e3|0;a=gR(b|0,C|0,a|0,((a|0)<0)<<31>>31|0)|0;b=c[f>>2]|0;c[b>>2]=a;c[b+4>>2]=C;i=e;return c[d>>2]|0}function ZM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+12|0;f=k+8|0;g=k+4|0;h=k;c[k+16>>2]=a;c[e>>2]=b;c[f>>2]=d;c[h>>2]=12;if(!(c[e>>2]|0)){c[h>>2]=0;c[g>>2]=0;while(1){if((c[g>>2]|0)>>>0>=28)break;if(c[7268+((c[g>>2]|0)*12|0)+8>>2]|0)c[7268+((c[g>>2]|0)*12|0)+4>>2]=c[7268+((c[g>>2]|0)*12|0)+8>>2];c[g>>2]=(c[g>>2]|0)+1}j=c[h>>2]|0;i=k;return j|0}c[g>>2]=0;while(1){if((c[g>>2]|0)>>>0>=28){j=16;break}b=(yQ(c[e>>2]|0,c[7268+((c[g>>2]|0)*12|0)>>2]|0)|0)==0;d=c[g>>2]|0;if(b)break;c[g>>2]=d+1}if((j|0)==16){j=c[h>>2]|0;i=k;return j|0}if(!(c[7268+(d*12|0)+8>>2]|0))c[7268+((c[g>>2]|0)*12|0)+8>>2]=c[7268+((c[g>>2]|0)*12|0)+4>>2];c[h>>2]=0;if(!(c[f>>2]|0))c[f>>2]=c[7268+((c[g>>2]|0)*12|0)+8>>2];c[7268+((c[g>>2]|0)*12|0)+4>>2]=c[f>>2];j=c[h>>2]|0;i=k;return j|0}function _M(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g+12|0;d=g+4|0;e=g;c[g+8>>2]=a;c[d>>2]=b;c[e>>2]=0;while(1){if((c[e>>2]|0)>>>0>=28){a=6;break}a=(yQ(c[d>>2]|0,c[7268+((c[e>>2]|0)*12|0)>>2]|0)|0)==0;b=c[e>>2]|0;if(a){a=4;break}c[e>>2]=b+1}if((a|0)==4){c[f>>2]=c[7268+(b*12|0)+4>>2];f=c[f>>2]|0;i=g;return f|0}else if((a|0)==6){c[f>>2]=0;f=c[f>>2]|0;i=g;return f|0}return 0}function $M(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g+12|0;d=g+4|0;e=g;c[g+8>>2]=a;c[d>>2]=b;c[e>>2]=-1;a:do if(c[d>>2]|0){c[e>>2]=0;while(1){if((c[e>>2]|0)>=27)break a;if(!(yQ(c[d>>2]|0,c[7268+((c[e>>2]|0)*12|0)>>2]|0)|0))break a;c[e>>2]=(c[e>>2]|0)+1}}while(0);c[e>>2]=(c[e>>2]|0)+1;while(1){if((c[e>>2]|0)>=28){d=11;break}a=c[e>>2]|0;if(c[7268+((c[e>>2]|0)*12|0)+4>>2]|0){d=9;break}c[e>>2]=a+1}if((d|0)==9){c[f>>2]=c[7268+(a*12|0)>>2];f=c[f>>2]|0;i=g;return f|0}else if((d|0)==11){c[f>>2]=0;f=c[f>>2]|0;i=g;return f|0}return 0}function aN(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 7192}function bN(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=c[d>>2];iN(c[d>>2]|0,0)|0;Kd(c[(c[e>>2]|0)+24>>2]|0);a=PN(c[d>>2]|0)|0;i=b;return a|0}function cN(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,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+32|0;g=m+28|0;o=m+24|0;h=m+20|0;j=m+16|0;n=m;l=m+12|0;k=m+8|0;c[o>>2]=a;c[h>>2]=b;c[j>>2]=d;b=n;c[b>>2]=e;c[b+4>>2]=f;c[l>>2]=c[o>>2];b=n;c[k>>2]=ON(c[l>>2]|0,c[b>>2]|0,c[b+4>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;if((c[k>>2]|0)==(c[j>>2]|0)){c[g>>2]=0;o=c[g>>2]|0;i=m;return o|0}if((c[k>>2]|0)<0){c[g>>2]=266;o=c[g>>2]|0;i=m;return o|0}else{KN(c[l>>2]|0,0);kR((c[h>>2]|0)+(c[k>>2]|0)|0,0,(c[j>>2]|0)-(c[k>>2]|0)|0)|0;c[g>>2]=522;o=c[g>>2]|0;i=m;return o|0}return 0}function dN(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,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;g=n+28|0;o=n+24|0;h=n+20|0;j=n+16|0;k=n;l=n+12|0;m=n+8|0;c[o>>2]=a;c[h>>2]=b;c[j>>2]=d;b=k;c[b>>2]=e;c[b+4>>2]=f;c[l>>2]=c[o>>2];c[m>>2]=0;while(1){o=k;o=IN(c[l>>2]|0,c[o>>2]|0,c[o+4>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;c[m>>2]=o;if(!((o|0)<(c[j>>2]|0)?(c[m>>2]|0)>0:0))break;c[j>>2]=(c[j>>2]|0)-(c[m>>2]|0);b=c[m>>2]|0;o=k;b=gR(c[o>>2]|0,c[o+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;o=k;c[o>>2]=b;c[o+4>>2]=C;c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0)}if((c[j>>2]|0)<=(c[m>>2]|0)){c[g>>2]=0;o=c[g>>2]|0;i=n;return o|0}if((c[m>>2]|0)<0?(c[(c[l>>2]|0)+20>>2]|0)!=28:0){c[g>>2]=778;o=c[g>>2]|0;i=n;return o|0}KN(c[l>>2]|0,0);c[g>>2]=13;o=c[g>>2]|0;i=n;return o|0}function eN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+20|0;k=j+16|0;f=j;g=j+12|0;h=j+8|0;c[k>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[g>>2]=c[k>>2];if((c[(c[g>>2]|0)+40>>2]|0)>0){k=f;a=c[(c[g>>2]|0)+40>>2]|0;a=gR(c[k>>2]|0,c[k+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;a=fR(a|0,C|0,1,0)|0;k=c[(c[g>>2]|0)+40>>2]|0;k=pR(a|0,C|0,k|0,((k|0)<0)<<31>>31|0)|0;a=c[(c[g>>2]|0)+40>>2]|0;a=rR(k|0,C|0,a|0,((a|0)<0)<<31>>31|0)|0;k=f;c[k>>2]=a;c[k+4>>2]=C}k=f;c[h>>2]=NN(c[(c[g>>2]|0)+12>>2]|0,c[k>>2]|0,c[k+4>>2]|0)|0;if(c[h>>2]|0){k=c[g>>2]|0;KN(k,c[(SP()|0)>>2]|0);c[e>>2]=xN(1546,45594,c[(c[g>>2]|0)+32>>2]|0,30893)|0;k=c[e>>2]|0;i=j;return k|0}else{c[e>>2]=0;k=c[e>>2]|0;i=j;return k|0}return 0}function fN(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;k=i;i=i+32|0;f=k+28|0;o=k+24|0;n=k+20|0;j=k+16|0;h=k+12|0;l=k+8|0;m=k+4|0;g=k;c[o>>2]=a;c[n>>2]=d;c[h>>2]=c[o>>2];c[l>>2]=c[n>>2]&16;c[m>>2]=(c[n>>2]&15|0)==3&1;c[j>>2]=MN(c[(c[h>>2]|0)+12>>2]|0,c[m>>2]|0,c[l>>2]|0)|0;d=c[h>>2]|0;if(c[j>>2]|0){KN(d,c[(SP()|0)>>2]|0);c[f>>2]=xN(1034,45878,c[(c[h>>2]|0)+32>>2]|0,30848)|0;o=c[f>>2]|0;i=k;return o|0}if((e[d+18>>1]|0)&8){c[j>>2]=Yb[c[7476>>2]&255](c[(c[h>>2]|0)+32>>2]|0,g)|0;if(!(c[j>>2]|0)){MN(c[g>>2]|0,0,0)|0;wN(c[h>>2]|0,c[g>>2]|0,30862)}else c[j>>2]=0;o=(c[h>>2]|0)+18|0;b[o>>1]=(e[o>>1]|0)&-9}c[f>>2]=c[j>>2];o=c[f>>2]|0;i=k;return o|0}function gN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+96|0;d=h+88|0;e=h+84|0;f=h+80|0;j=h+76|0;g=h;c[e>>2]=a;c[f>>2]=b;c[j>>2]=Yb[c[7332>>2]&255](c[(c[e>>2]|0)+12>>2]|0,g)|0;if(c[j>>2]|0){j=c[e>>2]|0;KN(j,c[(SP()|0)>>2]|0);c[d>>2]=1802;j=c[d>>2]|0;i=h;return j|0}b=c[g+36>>2]|0;j=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=((b|0)<0)<<31>>31;j=c[f>>2]|0;if((c[j>>2]|0)==1&(c[j+4>>2]|0)==0){j=c[f>>2]|0;c[j>>2]=0;c[j+4>>2]=0}c[d>>2]=0;j=c[d>>2]|0;i=h;return j|0}function hN(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;f=m+24|0;n=m+20|0;g=m+16|0;h=m+12|0;l=m+8|0;j=m+4|0;k=m;c[n>>2]=b;c[g>>2]=e;c[h>>2]=c[n>>2];c[l>>2]=c[(c[h>>2]|0)+24>>2];c[j>>2]=0;if((d[(c[h>>2]|0)+16>>0]|0|0)>0){a[(c[h>>2]|0)+16>>0]=c[g>>2];Ha(c[l>>2]|0,0)|0;c[f>>2]=0;n=c[f>>2]|0;i=m;return n|0}c[j>>2]=Yb[c[7488>>2]&255](c[l>>2]|0,511)|0;if((c[j>>2]|0)>=0){a[(c[h>>2]|0)+16>>0]=c[g>>2];c[f>>2]=c[j>>2];n=c[f>>2]|0;i=m;return n|0}c[k>>2]=c[(SP()|0)>>2];if(17!=(c[k>>2]|0)){c[j>>2]=LN(c[k>>2]|0,3850)|0;if((c[j>>2]|0)!=5)KN(c[h>>2]|0,c[k>>2]|0)}else c[j>>2]=5;c[f>>2]=c[j>>2];n=c[f>>2]|0;i=m;return n|0}function iN(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;f=m+24|0;n=m+20|0;g=m+16|0;h=m+12|0;l=m+8|0;j=m+4|0;k=m;c[n>>2]=b;c[g>>2]=e;c[h>>2]=c[n>>2];c[l>>2]=c[(c[h>>2]|0)+24>>2];if((d[(c[h>>2]|0)+16>>0]|0|0)==(c[g>>2]|0)){c[f>>2]=0;n=c[f>>2]|0;i=m;return n|0}if((c[g>>2]|0)==1){a[(c[h>>2]|0)+16>>0]=1;c[f>>2]=0;n=c[f>>2]|0;i=m;return n|0}c[j>>2]=Tb[c[7500>>2]&255](c[l>>2]|0)|0;if((c[j>>2]|0)>=0){a[(c[h>>2]|0)+16>>0]=0;c[f>>2]=0;n=c[f>>2]|0;i=m;return n|0}c[k>>2]=c[(SP()|0)>>2];if((c[k>>2]|0)==2)c[j>>2]=0;else{c[j>>2]=2058;KN(c[h>>2]|0,c[k>>2]|0)}c[f>>2]=c[j>>2];n=c[f>>2]|0;i=m;return n|0}function jN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;e=i;i=i+32|0;j=e+16|0;f=e+12|0;d=e+8|0;g=e+4|0;h=e;c[j>>2]=a;c[f>>2]=b;c[d>>2]=0;c[g>>2]=0;c[h>>2]=c[j>>2];c[g>>2]=(Yb[c[7296>>2]&255](c[(c[h>>2]|0)+24>>2]|0,0)|0)==0&1;c[c[f>>2]>>2]=c[g>>2];i=e;return c[d>>2]|0}function kN(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+32|0;k=m;f=m+28|0;o=m+24|0;n=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;l=m+4|0;c[o>>2]=a;c[n>>2]=b;c[g>>2]=e;c[h>>2]=c[o>>2];do switch(c[n>>2]|0){case 1:{c[c[g>>2]>>2]=d[(c[h>>2]|0)+16>>0];c[f>>2]=0;break}case 4:{c[c[g>>2]>>2]=c[(c[h>>2]|0)+20>>2];c[f>>2]=0;break}case 6:{c[(c[h>>2]|0)+40>>2]=c[c[g>>2]>>2];c[f>>2]=0;break}case 5:{o=c[g>>2]|0;c[j>>2]=DN(c[h>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0;c[f>>2]=c[j>>2];break}case 10:{EN(c[h>>2]|0,4,c[g>>2]|0);c[f>>2]=0;break}case 13:{EN(c[h>>2]|0,16,c[g>>2]|0);c[f>>2]=0;break}case 12:{c[k>>2]=c[(c[(c[h>>2]|0)+4>>2]|0)+16>>2];o=Od(19255,k)|0;c[c[g>>2]>>2]=o;c[f>>2]=0;break}case 16:{o=c[(c[(c[h>>2]|0)+4>>2]|0)+8>>2]|0;c[l>>2]=Jd(o,((o|0)<0)<<31>>31)|0;if(c[l>>2]|0){FN(c[(c[(c[h>>2]|0)+4>>2]|0)+8>>2]|0,c[l>>2]|0)|0;c[c[g>>2]>>2]=c[l>>2]}c[f>>2]=0;break}case 20:{o=GN(c[h>>2]|0)|0;c[c[g>>2]>>2]=o;c[f>>2]=0;break}default:c[f>>2]=12}while(0);i=m;return c[f>>2]|0}function lN(a){a=a|0;var b=0;b=i;i=i+16|0;c[b>>2]=a;i=b;return 4096}function mN(a){a=a|0;var b=0,d=0,f=0,g=0;d=i;i=i+16|0;g=d+8|0;f=d+4|0;b=d;c[g>>2]=a;c[f>>2]=c[g>>2];c[b>>2]=0;if(!((e[(c[f>>2]|0)+18>>1]|0)&16)){g=c[b>>2]|0;i=d;return g|0}c[b>>2]=c[b>>2]|4096;g=c[b>>2]|0;i=d;return g|0}function nN(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+48|0;v=u+32|0;h=u+28|0;j=u+24|0;k=u+20|0;p=u+16|0;o=u+12|0;r=u+8|0;q=u+4|0;s=u;n=u+40|0;l=u+38|0;m=u+36|0;c[v>>2]=a;c[h>>2]=d;c[j>>2]=f;c[k>>2]=g;c[p>>2]=c[v>>2];c[o>>2]=c[(c[p>>2]|0)+36>>2];c[q>>2]=c[c[o>>2]>>2];c[s>>2]=0;b[n>>1]=(1<<(c[h>>2]|0)+(c[j>>2]|0))-(1<>2]);if(c[k>>2]&1){b[l>>1]=0;c[r>>2]=c[(c[q>>2]|0)+32>>2];while(1){if(!(c[r>>2]|0))break;if((c[r>>2]|0)!=(c[o>>2]|0))b[l>>1]=e[l>>1]|0|(e[(c[r>>2]|0)+10>>1]|0);c[r>>2]=c[(c[r>>2]|0)+4>>2]}if(!((e[n>>1]|0)&(e[l>>1]|0)))c[s>>2]=CN(c[p>>2]|0,2,(c[h>>2]|0)+120|0,c[j>>2]|0)|0;else c[s>>2]=0;if(c[s>>2]|0){v=c[s>>2]|0;i=u;return v|0}v=(c[o>>2]|0)+12|0;b[v>>1]=(e[v>>1]|0)&~(e[n>>1]|0);v=(c[o>>2]|0)+10|0;b[v>>1]=(e[v>>1]|0)&~(e[n>>1]|0);v=c[s>>2]|0;i=u;return v|0}if(!(c[k>>2]&4)){c[r>>2]=c[(c[q>>2]|0)+32>>2];while(1){if(!(c[r>>2]|0))break;if((e[(c[r>>2]|0)+12>>1]|0)&(e[n>>1]|0)){t=28;break}if((e[(c[r>>2]|0)+10>>1]|0)&(e[n>>1]|0)){t=28;break}c[r>>2]=c[(c[r>>2]|0)+4>>2]}if((t|0)==28)c[s>>2]=5;if(c[s>>2]|0){v=c[s>>2]|0;i=u;return v|0}c[s>>2]=CN(c[p>>2]|0,1,(c[h>>2]|0)+120|0,c[j>>2]|0)|0;if(c[s>>2]|0){v=c[s>>2]|0;i=u;return v|0}v=(c[o>>2]|0)+12|0;b[v>>1]=e[v>>1]|0|(e[n>>1]|0);v=c[s>>2]|0;i=u;return v|0}b[m>>1]=0;c[r>>2]=c[(c[q>>2]|0)+32>>2];while(1){if(!(c[r>>2]|0))break;if((e[(c[r>>2]|0)+12>>1]|0)&(e[n>>1]|0)){t=16;break}b[m>>1]=e[m>>1]|0|(e[(c[r>>2]|0)+10>>1]|0);c[r>>2]=c[(c[r>>2]|0)+4>>2]}if((t|0)==16)c[s>>2]=5;do if(!(c[s>>2]|0))if(!((e[m>>1]|0)&(e[n>>1]|0))){c[s>>2]=CN(c[p>>2]|0,0,(c[h>>2]|0)+120|0,c[j>>2]|0)|0;break}else{c[s>>2]=0;break}while(0);if(c[s>>2]|0){v=c[s>>2]|0;i=u;return v|0}v=(c[o>>2]|0)+10|0;b[v>>1]=e[v>>1]|0|(e[n>>1]|0);v=c[s>>2]|0;i=u;return v|0}function oN(a){a=a|0;var b=0;b=i;i=i+16|0;c[b>>2]=a;sN();uN();i=b;return}function pN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;d=k+24|0;l=k+20|0;e=k+16|0;f=k+12|0;h=k+8|0;j=k+4|0;g=k;c[l>>2]=a;c[e>>2]=b;c[g>>2]=c[l>>2];c[f>>2]=c[(c[g>>2]|0)+36>>2];if(!(c[f>>2]|0)){c[d>>2]=0;l=c[d>>2]|0;i=k;return l|0}c[h>>2]=c[c[f>>2]>>2];c[j>>2]=(c[h>>2]|0)+32;while(1){if((c[c[j>>2]>>2]|0)==(c[f>>2]|0))break;c[j>>2]=(c[c[j>>2]>>2]|0)+4}c[c[j>>2]>>2]=c[(c[f>>2]|0)+4>>2];Kd(c[f>>2]|0);c[(c[g>>2]|0)+36>>2]=0;sN();l=(c[h>>2]|0)+28|0;c[l>>2]=(c[l>>2]|0)+-1;if(!(c[(c[h>>2]|0)+28>>2]|0)){if((c[e>>2]|0)!=0?(c[(c[h>>2]|0)+12>>2]|0)>=0:0)Tb[c[7464>>2]&255](c[(c[h>>2]|0)+8>>2]|0)|0;tN(c[g>>2]|0)}uN();c[d>>2]=0;l=c[d>>2]|0;i=k;return l|0}function qN(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;g=i;i=i+32|0;h=g+8|0;c[g+16>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;c[g+12>>2]=e;c[h>>2]=f;c[c[h>>2]>>2]=0;i=g;return 0}function rN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=i;i=i+16|0;c[f+12>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[f+8>>2]=e;i=f;return 0}function sN(){return}function tN(a){a=a|0;var b=0,d=0,f=0,g=0,h=0;h=i;i=i+16|0;b=h+12|0;g=h+8|0;f=h+4|0;d=h;c[b>>2]=a;c[g>>2]=c[(c[(c[b>>2]|0)+8>>2]|0)+20>>2];if(!(c[g>>2]|0)){i=h;return}if(c[(c[g>>2]|0)+28>>2]|0){i=h;return}c[f>>2]=vN()|0;c[d>>2]=0;while(1){a=c[g>>2]|0;if((c[d>>2]|0)>=(e[(c[g>>2]|0)+20>>1]|0|0))break;if((c[a+12>>2]|0)>=0)Yb[c[7548>>2]&255](c[(c[(c[g>>2]|0)+24>>2]|0)+(c[d>>2]<<2)>>2]|0,c[(c[g>>2]|0)+16>>2]|0)|0;else Kd(c[(c[(c[g>>2]|0)+24>>2]|0)+(c[d>>2]<<2)>>2]|0);c[d>>2]=(c[d>>2]|0)+(c[f>>2]|0)}Kd(c[a+24>>2]|0);if((c[(c[g>>2]|0)+12>>2]|0)>=0){wN(c[b>>2]|0,c[(c[g>>2]|0)+12>>2]|0,31469);c[(c[g>>2]|0)+12>>2]=-1}c[(c[c[g>>2]>>2]|0)+20>>2]=0;Kd(c[g>>2]|0);i=h;return}function uN(){return}function vN(){var a=0,b=0,d=0,e=0;e=i;i=i+16|0;a=e+8|0;d=e+4|0;b=e;c[d>>2]=32768;c[b>>2]=Pb[c[7572>>2]&255]()|0;if((c[b>>2]|0)<(c[d>>2]|0)){c[a>>2]=1;d=c[a>>2]|0;i=e;return d|0}else{c[a>>2]=(c[b>>2]|0)/(c[d>>2]|0)|0;d=c[a>>2]|0;i=e;return d|0}return 0}function wN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+8|0;h=g+4|0;f=g;c[e>>2]=a;c[h>>2]=b;c[f>>2]=d;if(!(Tb[c[7284>>2]&255](c[h>>2]|0)|0)){i=g;return}if(c[e>>2]|0)e=c[(c[e>>2]|0)+32>>2]|0;else e=0;xN(4106,45534,e,c[f>>2]|0)|0;i=g;return}function xN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;l=n;f=n+40|0;g=n+36|0;h=n+32|0;j=n+28|0;m=n+24|0;k=n+20|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=c[(SP()|0)>>2];c[m>>2]=TP(c[k>>2]|0)|0;if(!(c[h>>2]|0))c[h>>2]=19266;d=c[f>>2]|0;a=c[k>>2]|0;k=c[g>>2]|0;e=c[h>>2]|0;b=c[m>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=a;c[l+8>>2]=k;c[l+12>>2]=e;c[l+16>>2]=b;Rd(d,45540,l);i=n;return c[f>>2]|0}function yN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+16|0;f=e;j=e+12|0;h=e+8|0;g=e+4|0;c[j>>2]=a;c[h>>2]=b;c[g>>2]=d;d=c[j>>2]|0;a=c[h>>2]|0;c[f>>2]=c[g>>2];a=VP(d,a,f)|0;i=e;return a|0}function zN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+544|0;l=k;e=k+20|0;m=k+16|0;f=k+12|0;h=k+8|0;g=k+4|0;j=k+24|0;c[m>>2]=b;c[f>>2]=d;c[g>>2]=-1;c[l>>2]=c[m>>2];Qd(512,j,19255,l)|0;c[h>>2]=BQ(j)|0;while(1){if((c[h>>2]|0)<=0)break;if((a[j+(c[h>>2]|0)>>0]|0)==47)break;c[h>>2]=(c[h>>2]|0)+-1}if((c[h>>2]|0)>0)a[j+(c[h>>2]|0)>>0]=0;else{if((a[j>>0]|0)!=47)a[j>>0]=46;a[j+1>>0]=0}c[g>>2]=BN(j,0,0)|0;c[c[f>>2]>>2]=c[g>>2];if((c[g>>2]|0)>=0){c[e>>2]=0;m=c[e>>2]|0;i=k;return m|0}else{c[e>>2]=xN(et(30807)|0,45675,j,30807)|0;m=c[e>>2]|0;i=k;return m|0}return 0}function AN(){return ib(30)|0}function BN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+112|0;l=m;e=m+100|0;f=m+96|0;g=m+92|0;h=m+88|0;j=m+84|0;k=m+8|0;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[j>>2]=(c[g>>2]|0)!=0?c[g>>2]|0:420;while(1){c[h>>2]=Ob[c[7272>>2]&255](c[e>>2]|0,c[f>>2]|524288,c[j>>2]|0)|0;if((c[h>>2]|0)<0)if((c[(SP()|0)>>2]|0)==4)continue;else break;if((c[h>>2]|0)>=3)break;Tb[c[7284>>2]&255](c[h>>2]|0)|0;a=c[h>>2]|0;c[l>>2]=c[e>>2];c[l+4>>2]=a;Rd(28,45762,l);c[h>>2]=-1;if((Ob[c[7272>>2]&255](45805,c[f>>2]|0,c[g>>2]|0)|0)<0)break}if(!((c[h>>2]|0)>=0&(c[g>>2]|0)!=0)){a=c[h>>2]|0;i=m;return a|0}if(Yb[c[7332>>2]&255](c[h>>2]|0,k)|0){a=c[h>>2]|0;i=m;return a|0}if(c[k+36>>2]|0){a=c[h>>2]|0;i=m;return a|0}if((c[k+12>>2]&511|0)==(c[g>>2]|0)){a=c[h>>2]|0;i=m;return a|0}Yb[c[7440>>2]&255](c[h>>2]|0,c[g>>2]|0)|0;a=c[h>>2]|0;i=m;return a|0}function CN(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;n=o;p=o+40|0;g=o+36|0;h=o+32|0;j=o+28|0;l=o+24|0;k=o+8|0;m=o+4|0;c[p>>2]=a;c[g>>2]=d;c[h>>2]=e;c[j>>2]=f;c[m>>2]=0;c[l>>2]=c[(c[(c[p>>2]|0)+8>>2]|0)+20>>2];if((c[(c[l>>2]|0)+12>>2]|0)<0){p=c[m>>2]|0;i=o;return p|0}c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;b[k>>1]=c[g>>2];b[k+2>>1]=0;c[k+4>>2]=c[h>>2];c[k+8>>2]=c[j>>2];a=c[1839]|0;p=c[(c[l>>2]|0)+12>>2]|0;c[n>>2]=k;c[m>>2]=Ob[a&255](p,13,n)|0;c[m>>2]=(c[m>>2]|0)!=-1?0:5;p=c[m>>2]|0;i=o;return p|0}function DN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;e=n+112|0;f=n+108|0;g=n+16|0;l=n+8|0;h=n+32|0;k=n+28|0;m=n+24|0;j=n;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;a:do if((c[(c[f>>2]|0)+40>>2]|0)>0){if(Yb[c[7332>>2]&255](c[(c[f>>2]|0)+12>>2]|0,h)|0){c[e>>2]=1802;a=c[e>>2]|0;i=n;return a|0}b=c[(c[f>>2]|0)+40>>2]|0;b=gR(c[g>>2]|0,c[g+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;b=fR(b|0,C|0,1,0)|0;g=c[(c[f>>2]|0)+40>>2]|0;g=pR(b|0,C|0,g|0,((g|0)<0)<<31>>31|0)|0;b=c[(c[f>>2]|0)+40>>2]|0;b=rR(g|0,C|0,b|0,((b|0)<0)<<31>>31|0)|0;g=l;c[g>>2]=b;c[g+4>>2]=C;g=l;b=c[g+4>>2]|0;a=c[h+36>>2]|0;d=((a|0)<0)<<31>>31;if((b|0)>(d|0)|((b|0)==(d|0)?(c[g>>2]|0)>>>0>a>>>0:0)){c[k>>2]=c[h+40>>2];c[m>>2]=0;h=_((c[h+36>>2]|0)/(c[k>>2]|0)|0,c[k>>2]|0)|0;h=h+(c[k>>2]|0)-1|0;a=j;c[a>>2]=h;c[a+4>>2]=((h|0)<0)<<31>>31;while(1){d=j;h=c[d>>2]|0;d=c[d+4>>2]|0;g=l;a=c[k>>2]|0;a=gR(c[g>>2]|0,c[g+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;a=fR(a|0,C|0,1,0)|0;g=C;if(!((d|0)<(g|0)|(d|0)==(g|0)&h>>>0>>0))break a;h=j;d=c[h+4>>2]|0;a=l;g=c[a+4>>2]|0;if((d|0)>(g|0)|((d|0)==(g|0)?(c[h>>2]|0)>>>0>=(c[a>>2]|0)>>>0:0)){h=l;h=fR(c[h>>2]|0,c[h+4>>2]|0,1,0)|0;a=j;c[a>>2]=h;c[a+4>>2]=C}a=j;c[m>>2]=IN(c[f>>2]|0,c[a>>2]|0,c[a+4>>2]|0,19266,1)|0;if((c[m>>2]|0)!=1)break;h=c[k>>2]|0;a=j;h=gR(c[a>>2]|0,c[a+4>>2]|0,h|0,((h|0)<0)<<31>>31|0)|0;a=j;c[a>>2]=h;c[a+4>>2]=C}c[e>>2]=778;a=c[e>>2]|0;i=n;return a|0}}while(0);c[e>>2]=0;a=c[e>>2]|0;i=n;return a|0}function EN(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;m=i;i=i+16|0;k=m+4|0;j=m+8|0;l=m;c[k>>2]=f;a[j>>0]=g;c[l>>2]=h;if((c[c[l>>2]>>2]|0)<0){c[c[l>>2]>>2]=((e[(c[k>>2]|0)+18>>1]|0)&(d[j>>0]|0)|0)!=0&1;i=m;return}j=d[j>>0]|0;if(!(c[c[l>>2]>>2]|0)){l=(c[k>>2]|0)+18|0;b[l>>1]=(e[l>>1]|0)&~j;i=m;return}else{l=(c[k>>2]|0)+18|0;b[l>>1]=e[l>>1]|0|j;i=m;return}}function FN(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=i;i=i+64|0;j=m+8|0;l=m+48|0;e=m+44|0;f=m+40|0;k=m+36|0;g=m+32|0;h=m;c[e>>2]=b;c[f>>2]=d;c[g>>2]=0;c[k>>2]=HN()|0;while(1){Sd(8,h);a[(c[f>>2]|0)+((c[e>>2]|0)-2)>>0]=0;b=c[e>>2]|0;d=c[f>>2]|0;o=h;p=c[o>>2]|0;o=c[o+4>>2]|0;c[j>>2]=c[k>>2];n=j+8|0;c[n>>2]=p;c[n+4>>2]=o;c[j+16>>2]=0;Qd(b,d,45815,j)|0;if(a[(c[f>>2]|0)+((c[e>>2]|0)-2)>>0]|0){e=4;break}p=c[g>>2]|0;c[g>>2]=p+1;if((p|0)>10){e=4;break}if(Yb[c[7296>>2]&255](c[f>>2]|0,0)|0){e=6;break}}if((e|0)==4){c[l>>2]=1;p=c[l>>2]|0;i=m;return p|0}else if((e|0)==6){c[l>>2]=0;p=c[l>>2]|0;i=m;return p|0}return 0}function GN(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+80|0;b=e+76|0;d=e;c[b>>2]=a;if(!(c[(c[b>>2]|0)+8>>2]|0)){a=0;a=a&1;i=e;return a|0}if(Yb[c[7320>>2]&255](c[(c[b>>2]|0)+32>>2]|0,d)|0){a=1;a=a&1;i=e;return a|0}a=(c[d+72>>2]|0)!=(c[(c[(c[b>>2]|0)+8>>2]|0)+4>>2]|0);a=a&1;i=e;return a|0}function HN(){var a=0,b=0,d=0,e=0,f=0;e=i;i=i+96|0;b=e+80|0;a=e+4|0;d=e;c[d>>2]=c[241];if(!(c[1901]|0))c[1901]=rb(45832)|0;if(!(c[1902]|0))c[1902]=rb(45846)|0;c[b>>2]=0;while(1){if((c[b>>2]|0)>>>0>=6){a=12;break}if((((c[d>>2]|0)!=0?(Yb[c[7320>>2]&255](c[d>>2]|0,a)|0)==0:0)?(c[a+12>>2]&61440|0)==16384:0)?(Yb[c[7296>>2]&255](c[d>>2]|0,7)|0)==0:0){a=12;break}f=c[b>>2]|0;c[b>>2]=f+1;c[d>>2]=c[7604+(f<<2)>>2]}if((a|0)==12){i=e;return c[d>>2]|0}return 0}function IN(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,j=0,k=0,l=0;g=i;i=i+32|0;h=g+16|0;l=g;k=g+12|0;j=g+8|0;c[h>>2]=a;a=l;c[a>>2]=b;c[a+4>>2]=d;c[k>>2]=e;c[j>>2]=f;e=l;e=JN(c[(c[h>>2]|0)+12>>2]|0,c[e>>2]|0,c[e+4>>2]|0,c[k>>2]|0,c[j>>2]|0,(c[h>>2]|0)+20|0)|0;i=g;return e|0}function JN(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;h=q+32|0;j=q+8|0;k=q+28|0;l=q+24|0;m=q+20|0;o=q+16|0;n=q;c[h>>2]=a;a=j;c[a>>2]=b;c[a+4>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[o>>2]=0;c[l>>2]=c[l>>2]&131071;do{e=MQ(c[h>>2]|0,c[j>>2]|0,0)|0;g=n;c[g>>2]=e;c[g+4>>2]=((e|0)<0)<<31>>31;if((c[n+4>>2]|0)<0){p=3;break}c[o>>2]=Ob[c[7404>>2]&255](c[h>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;if((c[o>>2]|0)>=0)break}while((c[(SP()|0)>>2]|0)==4);if((p|0)==3)c[o>>2]=-1;if((c[o>>2]|0)>=0){p=c[o>>2]|0;i=q;return p|0}p=c[(SP()|0)>>2]|0;c[c[m>>2]>>2]=p;p=c[o>>2]|0;i=q;return p|0}function KN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;c[(c[e>>2]|0)+20>>2]=c[f>>2];i=d;return}function LN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[g>>2]=a;c[e>>2]=b;switch(c[g>>2]|0){ +case 37:case 4:case 16:case 110:case 11:case 13:{c[d>>2]=5;break}case 1:{c[d>>2]=3;break}default:c[d>>2]=c[e>>2]}i=f;return c[d>>2]|0}function MN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+16|0;g=f+12|0;e=f;c[g>>2]=a;c[f+8>>2]=b;c[f+4>>2]=d;c[e>>2]=HQ(c[g>>2]|0)|0;i=f;return c[e>>2]|0}function NN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;f=h;g=h+8|0;c[e>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;while(1){c[g>>2]=Yb[c[7344>>2]&255](c[e>>2]|0,c[f>>2]|0)|0;if((c[g>>2]|0)>=0){b=4;break}if((c[(SP()|0)>>2]|0)!=4){b=4;break}}if((b|0)==4){i=h;return c[g>>2]|0}return 0}function ON(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+36|0;h=q+32|0;j=q+8|0;k=q+28|0;l=q+24|0;m=q+20|0;o=q+16|0;n=q;c[h>>2]=a;a=j;c[a>>2]=b;c[a+4>>2]=d;c[k>>2]=e;c[l>>2]=f;c[o>>2]=0;do{a=MQ(c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0,0)|0;e=n;c[e>>2]=a;c[e+4>>2]=((a|0)<0)<<31>>31;if((c[n+4>>2]|0)<0){p=3;break}c[m>>2]=Ob[c[7368>>2]&255](c[(c[h>>2]|0)+12>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;if((c[m>>2]|0)==(c[l>>2]|0))break;if((c[m>>2]|0)>=0){if((c[m>>2]|0)>0){c[l>>2]=(c[l>>2]|0)-(c[m>>2]|0);a=c[m>>2]|0;e=j;a=gR(c[e>>2]|0,c[e+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;e=j;c[e>>2]=a;c[e+4>>2]=C;c[o>>2]=(c[o>>2]|0)+(c[m>>2]|0);c[k>>2]=(c[k>>2]|0)+(c[m>>2]|0)}}else{if((c[(SP()|0)>>2]|0)!=4){p=8;break}c[m>>2]=1}}while((c[m>>2]|0)>0);if((p|0)==3){p=c[h>>2]|0;KN(p,c[(SP()|0)>>2]|0);c[g>>2]=-1;p=c[g>>2]|0;i=q;return p|0}else if((p|0)==8){c[o>>2]=0;p=c[h>>2]|0;KN(p,c[(SP()|0)>>2]|0)}c[g>>2]=(c[m>>2]|0)+(c[o>>2]|0);p=c[g>>2]|0;i=q;return p|0}function PN(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];if((c[(c[b>>2]|0)+12>>2]|0)>=0){wN(c[b>>2]|0,c[(c[b>>2]|0)+12>>2]|0,29216);c[(c[b>>2]|0)+12>>2]=-1}Kd(c[(c[b>>2]|0)+28>>2]|0);a=c[b>>2]|0;b=a+44|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));i=d;return 0}function QN(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 7628}function RN(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=PN(c[d>>2]|0)|0;i=b;return a|0}function SN(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 0}function TN(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 0}function UN(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[d+4>>2]=a;c[e>>2]=b;c[c[e>>2]>>2]=0;i=d;return 0}function VN(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;m=n;f=n+24|0;g=n+20|0;h=n+16|0;j=n+12|0;l=n+8|0;k=n+4|0;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[l>>2]=If(c[g>>2]|0)|0;c[k>>2]=0;do if((a[c[g>>2]>>0]|0)!=47){if(Yb[c[7308>>2]&255](c[h>>2]|0,(c[j>>2]|0)-2|0)|0){c[k>>2]=If(c[h>>2]|0)|0;b=c[k>>2]|0;c[k>>2]=b+1;a[(c[h>>2]|0)+b>>0]=47;break}b=et(33245)|0;c[f>>2]=xN(b,45576,c[g>>2]|0,33245)|0;b=c[f>>2]|0;i=n;return b|0}while(0);if(((c[k>>2]|0)+(c[l>>2]|0)+1|0)>(c[j>>2]|0)){a[(c[h>>2]|0)+(c[k>>2]|0)>>0]=0;c[f>>2]=et(33254)|0;b=c[f>>2]|0;i=n;return b|0}else{d=(c[j>>2]|0)-(c[k>>2]|0)|0;b=(c[h>>2]|0)+(c[k>>2]|0)|0;c[m>>2]=c[g>>2];Qd(d,b,19255,m)|0;c[f>>2]=0;b=c[f>>2]|0;i=n;return b|0}return 0}function WN(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+96|0;k=j+92|0;d=j+88|0;f=j+84|0;h=j+8|0;e=j+4|0;g=j;c[k>>2]=a;c[d>>2]=b;c[f>>2]=0;if(Yb[c[7320>>2]&255](c[k>>2]|0,h)|0){k=c[f>>2]|0;i=j;return k|0}sN();c[e>>2]=c[1946];while(1){if(c[e>>2]|0)if((c[c[e>>2]>>2]|0)!=(c[h>>2]|0))a=1;else a=(c[(c[e>>2]|0)+4>>2]|0)!=(c[h+72>>2]|0);else a=0;b=c[e>>2]|0;if(!a)break;c[e>>2]=c[b+32>>2]}if(b){c[g>>2]=(c[e>>2]|0)+28;while(1){if(!(c[c[g>>2]>>2]|0))break;if((c[(c[c[g>>2]>>2]|0)+4>>2]|0)==(c[d>>2]|0))break;c[g>>2]=(c[c[g>>2]>>2]|0)+8}c[f>>2]=c[c[g>>2]>>2];if(c[f>>2]|0)c[c[g>>2]>>2]=c[(c[f>>2]|0)+8>>2]}uN();k=c[f>>2]|0;i=j;return k|0}function XN(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+624|0;h=r+100|0;j=r+96|0;k=r+92|0;l=r+88|0;m=r+84|0;o=r+80|0;q=r+104|0;n=r+76|0;p=r;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[o>>2]=0;c[c[k>>2]>>2]=0;c[c[l>>2]>>2]=0;c[c[m>>2]>>2]=0;if(!(c[j>>2]&526336)){if(!(c[j>>2]&8)){b=c[o>>2]|0;i=r;return b|0}c[c[k>>2]>>2]=384;b=c[o>>2]|0;i=r;return b|0}c[n>>2]=(If(c[h>>2]|0)|0)-1;while(1){if((a[(c[h>>2]|0)+(c[n>>2]|0)>>0]|0)==45)break;c[n>>2]=(c[n>>2]|0)+-1}iR(q|0,c[h>>2]|0,c[n>>2]|0)|0;a[q+(c[n>>2]|0)>>0]=0;if(!(Yb[c[7320>>2]&255](q,p)|0)){c[c[k>>2]>>2]=c[p+12>>2]&511;c[c[l>>2]>>2]=c[p+20>>2];c[c[m>>2]>>2]=c[p+24>>2];b=c[o>>2]|0;i=r;return b|0}else{c[o>>2]=1802;b=c[o>>2]|0;i=r;return b|0}return 0}function YN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(Pb[c[7524>>2]&255]()|0){b=0;i=h;return b|0}b=Ob[c[7512>>2]&255](c[e>>2]|0,c[f>>2]|0,c[g>>2]|0)|0;i=h;return b|0}function ZN(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+48|0;r=t;j=t+40|0;k=t+36|0;u=t+32|0;l=t+28|0;m=t+24|0;o=t+20|0;p=t+16|0;q=t+12|0;s=t+8|0;n=t+4|0;c[j>>2]=a;c[k>>2]=d;c[u>>2]=f;c[l>>2]=g;c[m>>2]=h;c[p>>2]=c[u>>2];c[q>>2]=0;c[(c[p>>2]|0)+12>>2]=c[k>>2];c[(c[p>>2]|0)+4>>2]=c[j>>2];c[(c[p>>2]|0)+32>>2]=c[l>>2];b[(c[p>>2]|0)+18>>1]=c[m>>2]&255;if(Hf((c[m>>2]&64|0)!=0?c[l>>2]|0:0,45908,1)|0){u=(c[p>>2]|0)+18|0;b[u>>1]=e[u>>1]|0|16}if(!(yQ(c[(c[j>>2]|0)+16>>2]|0,45524)|0)){u=(c[p>>2]|0)+18|0;b[u>>1]=e[u>>1]|0|1}if(c[m>>2]&128)c[o>>2]=7628;else c[o>>2]=Yb[c[c[(c[j>>2]|0)+20>>2]>>2]&255](c[l>>2]|0,c[p>>2]|0)|0;if((c[o>>2]|0)!=7708){if((c[o>>2]|0)==7192){c[n>>2]=(BQ(c[l>>2]|0)|0)+6;u=c[n>>2]|0;c[s>>2]=Jd(u,((u|0)<0)<<31>>31)|0;if(!(c[s>>2]|0))c[q>>2]=7;else{g=c[n>>2]|0;u=c[s>>2]|0;c[r>>2]=c[l>>2];Qd(g,u,45913,r)|0}c[(c[p>>2]|0)+24>>2]=c[s>>2]}}else{sN();c[q>>2]=_N(c[p>>2]|0,(c[p>>2]|0)+8|0)|0;if(c[q>>2]|0){wN(c[p>>2]|0,c[k>>2]|0,32585);c[k>>2]=-1}uN()}KN(c[p>>2]|0,0);if(!(c[q>>2]|0)){c[c[p>>2]>>2]=c[o>>2];$N(c[p>>2]|0);u=c[q>>2]|0;i=t;return u|0}if((c[k>>2]|0)<0){u=c[q>>2]|0;i=t;return u|0}wN(c[p>>2]|0,c[k>>2]|0,32670);u=c[q>>2]|0;i=t;return u|0}function _N(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+112|0;f=k+104|0;d=k+100|0;g=k+96|0;l=k+92|0;m=k+88|0;h=k+80|0;e=k+4|0;j=k;c[d>>2]=a;c[g>>2]=b;c[j>>2]=0;c[m>>2]=c[(c[d>>2]|0)+12>>2];c[l>>2]=Yb[c[7332>>2]&255](c[m>>2]|0,e)|0;if(c[l>>2]|0){m=c[d>>2]|0;KN(m,c[(SP()|0)>>2]|0);if((c[(c[d>>2]|0)+20>>2]|0)==75){c[f>>2]=22;m=c[f>>2]|0;i=k;return m|0}else{c[f>>2]=10;m=c[f>>2]|0;i=k;return m|0}}c[h>>2]=0;c[h+4>>2]=0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+72>>2];c[j>>2]=c[1946];while(1){if(c[j>>2]|0)a=(vQ(h,c[j>>2]|0,8)|0)!=0;else a=0;d=c[j>>2]|0;if(!a)break;c[j>>2]=c[d+32>>2]}if(!d){c[j>>2]=Jd(40,0)|0;if(!(c[j>>2]|0)){c[f>>2]=7;m=c[f>>2]|0;i=k;return m|0}d=c[j>>2]|0;a=d+40|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(a|0));m=c[j>>2]|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[(c[j>>2]|0)+16>>2]=1;c[(c[j>>2]|0)+32>>2]=c[1946];c[(c[j>>2]|0)+36>>2]=0;if(c[1946]|0)c[(c[1946]|0)+36>>2]=c[j>>2];c[1946]=c[j>>2]}else{m=(c[j>>2]|0)+16|0;c[m>>2]=(c[m>>2]|0)+1}c[c[g>>2]>>2]=c[j>>2];c[f>>2]=0;m=c[f>>2]|0;i=k;return m|0}function $N(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+112|0;j=k+24|0;h=k+16|0;d=k+8|0;b=k;f=k+108|0;g=k+32|0;l=k+28|0;c[f>>2]=a;c[l>>2]=Yb[c[7332>>2]&255](c[(c[f>>2]|0)+12>>2]|0,g)|0;if(c[l>>2]|0){c[b>>2]=c[(c[f>>2]|0)+32>>2];Rd(28,45921,b);i=k;return}if((c[g+16>>2]|0)==0?((e[(c[f>>2]|0)+18>>1]|0)&32|0)==0:0){c[d>>2]=c[(c[f>>2]|0)+32>>2];Rd(28,45945,d);i=k;return}a=c[f>>2]|0;if((c[g+16>>2]|0)>>>0>1){c[h>>2]=c[a+32>>2];Rd(28,45974,h);i=k;return}if(!(GN(a)|0)){i=k;return}c[j>>2]=c[(c[f>>2]|0)+32>>2];Rd(28,46001,j);i=k;return}function aO(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;e=f+4|0;d=f;c[b>>2]=a;c[e>>2]=0;c[d>>2]=c[b>>2];$N(c[d>>2]|0);cO(c[b>>2]|0,0)|0;sN();if((c[(c[d>>2]|0)+8>>2]|0)!=0?(c[(c[(c[d>>2]|0)+8>>2]|0)+24>>2]|0)!=0:0)jO(c[d>>2]|0);kO(c[d>>2]|0);c[e>>2]=PN(c[b>>2]|0)|0;uN();i=f;return c[e>>2]|0}function bO(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+48|0;k=p+44|0;q=p+40|0;l=p+36|0;o=p+32|0;m=p+28|0;n=p+24|0;h=p+8|0;j=p;c[q>>2]=e;c[l>>2]=f;c[o>>2]=0;c[m>>2]=c[q>>2];c[j>>2]=0;if((d[(c[m>>2]|0)+16>>0]|0|0)>=(c[l>>2]|0)){c[k>>2]=0;q=c[k>>2]|0;i=p;return q|0}sN();c[n>>2]=c[(c[m>>2]|0)+8>>2];if((d[(c[m>>2]|0)+16>>0]|0|0)!=(d[(c[n>>2]|0)+12>>0]|0|0)?(c[l>>2]|0)>1?1:(d[(c[n>>2]|0)+12>>0]|0|0)>=3:0)c[o>>2]=5;else g=6;a:do if((g|0)==6){do if((c[l>>2]|0)==1){if((d[(c[n>>2]|0)+12>>0]|0|0)!=1?(d[(c[n>>2]|0)+12>>0]|0|0)!=2:0)break;a[(c[m>>2]|0)+16>>0]=1;q=(c[n>>2]|0)+8|0;c[q>>2]=(c[q>>2]|0)+1;q=(c[n>>2]|0)+24|0;c[q>>2]=(c[q>>2]|0)+1;break a}while(0);c[h+8>>2]=1;b[h+2>>1]=0;if((c[l>>2]|0)!=1){if((c[l>>2]|0)==4?(d[(c[m>>2]|0)+16>>0]|0|0)<3:0)g=13}else g=13;if((g|0)==13?(b[h>>1]=(c[l>>2]|0)==1?0:1,c[h+4>>2]=c[381],(hO(c[m>>2]|0,h)|0)!=0):0){c[j>>2]=c[(SP()|0)>>2];c[o>>2]=LN(c[j>>2]|0,3850)|0;if((c[o>>2]|0)==5)break;KN(c[m>>2]|0,c[j>>2]|0);break}do if((c[l>>2]|0)!=1){if((c[l>>2]|0)==4?(c[(c[n>>2]|0)+8>>2]|0)>1:0){c[o>>2]=5;break}b[h>>1]=1;f=c[381]|0;if((c[l>>2]|0)==2){c[h+4>>2]=f+1;c[h+8>>2]=1}else{c[h+4>>2]=f+2;c[h+8>>2]=510}if((hO(c[m>>2]|0,h)|0)!=0?(c[j>>2]=c[(SP()|0)>>2],c[o>>2]=LN(c[j>>2]|0,3850)|0,(c[o>>2]|0)!=5):0)KN(c[m>>2]|0,c[j>>2]|0)}else{c[h+4>>2]=(c[381]|0)+2;c[h+8>>2]=510;if(hO(c[m>>2]|0,h)|0){c[j>>2]=c[(SP()|0)>>2];c[o>>2]=LN(c[j>>2]|0,3850)|0}c[h+4>>2]=c[381];c[h+8>>2]=1;b[h>>1]=2;q=(hO(c[m>>2]|0,h)|0)!=0;if(q&(c[o>>2]|0)==0){c[j>>2]=c[(SP()|0)>>2];c[o>>2]=2058}if(!(c[o>>2]|0)){a[(c[m>>2]|0)+16>>0]=1;q=(c[n>>2]|0)+24|0;c[q>>2]=(c[q>>2]|0)+1;c[(c[n>>2]|0)+8>>2]=1;break}if((c[o>>2]|0)==5)break a;KN(c[m>>2]|0,c[j>>2]|0);break a}while(0);f=c[l>>2]|0;if(!(c[o>>2]|0)){a[(c[m>>2]|0)+16>>0]=f;a[(c[n>>2]|0)+12>>0]=c[l>>2];break}if((f|0)==4){a[(c[m>>2]|0)+16>>0]=3;a[(c[n>>2]|0)+12>>0]=3}}while(0);uN();c[k>>2]=c[o>>2];q=c[k>>2]|0;i=p;return q|0}function cO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=gO(c[f>>2]|0,c[e>>2]|0,0)|0;i=d;return a|0}function dO(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+48|0;m=n;o=n+40|0;g=n+36|0;k=n+32|0;l=n+28|0;j=n+24|0;h=n+8|0;c[o>>2]=e;c[g>>2]=f;c[k>>2]=0;c[l>>2]=0;c[j>>2]=c[o>>2];sN();if((d[(c[(c[j>>2]|0)+8>>2]|0)+12>>0]|0)>1)c[l>>2]=1;do if((c[l>>2]|0)==0?(a[(c[(c[j>>2]|0)+8>>2]|0)+13>>0]|0)==0:0){b[h+2>>1]=0;c[h+4>>2]=(c[381]|0)+1;c[h+8>>2]=1;b[h>>1]=1;f=c[1839]|0;o=c[(c[j>>2]|0)+12>>2]|0;c[m>>2]=h;if(Ob[f&255](o,12,m)|0){c[k>>2]=3594;o=c[j>>2]|0;KN(o,c[(SP()|0)>>2]|0);break}if((b[h>>1]|0)!=2)c[l>>2]=1}while(0);uN();c[c[g>>2]>>2]=c[l>>2];i=n;return c[k>>2]|0}function eO(a,f,g,h,j){a=a|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;E=i;i=i+160|0;z=E+152|0;F=E+148|0;A=E+144|0;k=E+140|0;l=E+136|0;B=E+132|0;u=E+128|0;t=E+124|0;C=E+120|0;D=E+116|0;s=E+112|0;r=E+108|0;m=E+104|0;p=E+100|0;w=E+24|0;o=E+20|0;x=E+16|0;y=E+12|0;q=E+8|0;n=E+4|0;v=E;c[F>>2]=a;c[A>>2]=f;c[k>>2]=g;c[l>>2]=h;c[B>>2]=j;c[u>>2]=c[F>>2];c[D>>2]=0;c[s>>2]=vN()|0;if((c[(c[u>>2]|0)+36>>2]|0)==0?(c[D>>2]=fO(c[u>>2]|0)|0,(c[D>>2]|0)!=0):0){c[z>>2]=c[D>>2];F=c[z>>2]|0;i=E;return F|0}c[t>>2]=c[(c[u>>2]|0)+36>>2];c[C>>2]=c[c[t>>2]>>2];c[r>>2]=_(((c[A>>2]|0)+(c[s>>2]|0)|0)/(c[s>>2]|0)|0,c[s>>2]|0)|0;a:do if((e[(c[C>>2]|0)+20>>1]|0|0)<(c[r>>2]|0)){c[p>>2]=_(c[r>>2]|0,c[k>>2]|0)|0;c[(c[C>>2]|0)+16>>2]=c[k>>2];b:do if((c[(c[C>>2]|0)+12>>2]|0)>=0){if(Yb[c[7332>>2]&255](c[(c[C>>2]|0)+12>>2]|0,w)|0){c[D>>2]=4874;break a}if((c[w+36>>2]|0)<(c[p>>2]|0)){if(!(c[l>>2]|0))break a;c[o>>2]=(c[w+36>>2]|0)/4096|0;while(1){if((c[o>>2]|0)>=((c[p>>2]|0)/4096|0|0))break b;c[x>>2]=0;F=(c[o>>2]<<12)+4096-1|0;if((JN(c[(c[C>>2]|0)+12>>2]|0,F,((F|0)<0)<<31>>31,19266,1,x)|0)!=1)break;c[o>>2]=(c[o>>2]|0)+1}c[y>>2]=c[(c[C>>2]|0)+8>>2];c[D>>2]=xN(4874,45629,c[y>>2]|0,31732)|0;break a}}while(0);c[m>>2]=Ld(c[(c[C>>2]|0)+24>>2]|0,c[r>>2]<<2)|0;if(!(c[m>>2]|0)){c[D>>2]=3082;break}c[(c[C>>2]|0)+24>>2]=c[m>>2];while(1){if((e[(c[C>>2]|0)+20>>1]|0|0)>=(c[r>>2]|0))break a;c[q>>2]=_(c[k>>2]|0,c[s>>2]|0)|0;if((c[(c[C>>2]|0)+12>>2]|0)>=0){w=c[1884]|0;g=c[q>>2]|0;x=(d[(c[C>>2]|0)+22>>0]|0|0)!=0?1:3;y=c[(c[C>>2]|0)+12>>2]|0;F=c[k>>2]|0;F=rR(F|0,((F|0)<0)<<31>>31|0,e[(c[C>>2]|0)+20>>1]|0|0,0)|0;c[v>>2]=Sb[w&255](0,g,x,1,y,F)|0;if((c[v>>2]|0)==(-1|0)){k=21;break}}else{F=c[k>>2]|0;c[v>>2]=Jd(F,((F|0)<0)<<31>>31)|0;if(!(c[v>>2]|0)){k=23;break}kR(c[v>>2]|0,0,c[k>>2]|0)|0}c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[s>>2]|0))break;F=_(c[k>>2]|0,c[n>>2]|0)|0;c[(c[(c[C>>2]|0)+24>>2]|0)+((e[(c[C>>2]|0)+20>>1]|0)+(c[n>>2]|0)<<2)>>2]=(c[v>>2]|0)+F;c[n>>2]=(c[n>>2]|0)+1}F=(c[C>>2]|0)+20|0;b[F>>1]=(e[F>>1]|0)+(c[s>>2]|0)}if((k|0)==21){c[D>>2]=xN(5386,45716,c[(c[C>>2]|0)+8>>2]|0,31759)|0;break}else if((k|0)==23){c[D>>2]=7;break}}while(0);if((e[(c[C>>2]|0)+20>>1]|0|0)>(c[A>>2]|0))c[c[B>>2]>>2]=c[(c[(c[C>>2]|0)+24>>2]|0)+(c[A>>2]<<2)>>2];else c[c[B>>2]>>2]=0;if((c[D>>2]|0)==0?(d[(c[C>>2]|0)+22>>0]|0|0)!=0:0)c[D>>2]=8;c[z>>2]=c[D>>2];F=c[z>>2]|0;i=E;return F|0}function fO(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+128|0;o=r;e=r+116|0;f=r+112|0;j=r+108|0;l=r+104|0;m=r+100|0;k=r+96|0;q=r+92|0;g=r+88|0;n=r+12|0;p=r+8|0;h=r+4|0;c[f>>2]=b;c[j>>2]=0;c[j>>2]=Jd(16,0)|0;if(!(c[j>>2]|0)){c[e>>2]=7;q=c[e>>2]|0;i=r;return q|0}b=c[j>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;sN();c[k>>2]=c[(c[f>>2]|0)+8>>2];c[l>>2]=c[(c[k>>2]|0)+20>>2];a:do if(!(c[l>>2]|0)){c[p>>2]=c[(c[f>>2]|0)+32>>2];do if(!(Yb[c[7332>>2]&255](c[(c[f>>2]|0)+12>>2]|0,n)|0)){c[g>>2]=6+(BQ(c[p>>2]|0)|0);c[l>>2]=Jd(36+(c[g>>2]|0)|0,0)|0;if(!(c[l>>2]|0)){c[m>>2]=7;break}kR(c[l>>2]|0,0,36+(c[g>>2]|0)|0)|0;b=(c[l>>2]|0)+36|0;c[(c[l>>2]|0)+8>>2]=b;c[q>>2]=b;g=c[g>>2]|0;b=c[q>>2]|0;c[o>>2]=c[p>>2];Qd(g,b,46029,o)|0;c[(c[l>>2]|0)+12>>2]=-1;c[(c[(c[f>>2]|0)+8>>2]|0)+20>>2]=c[l>>2];c[c[l>>2]>>2]=c[(c[f>>2]|0)+8>>2];c[(c[l>>2]|0)+4>>2]=8;if(!(c[(c[l>>2]|0)+4>>2]|0)){c[m>>2]=7;break}if(d[(c[k>>2]|0)+13>>0]|0)break a;c[h>>2]=66;if(Hf(c[(c[f>>2]|0)+32>>2]|0,46036,0)|0){c[h>>2]=0;a[(c[l>>2]|0)+22>>0]=1}p=BN(c[q>>2]|0,c[h>>2]|0,c[n+12>>2]&511)|0;c[(c[l>>2]|0)+12>>2]=p;if((c[(c[l>>2]|0)+12>>2]|0)<0){p=et(31584)|0;c[m>>2]=xN(p,45571,c[q>>2]|0,31584)|0;break}YN(c[(c[l>>2]|0)+12>>2]|0,c[n+20>>2]|0,c[n+24>>2]|0)|0;c[m>>2]=0;if((CN(c[f>>2]|0,1,128,1)|0)==0?(NN(c[(c[l>>2]|0)+12>>2]|0,0,0)|0)!=0:0)c[m>>2]=xN(4618,45594,c[q>>2]|0,31600)|0;if(!(c[m>>2]|0))c[m>>2]=CN(c[f>>2]|0,0,128,1)|0;if(!(c[m>>2]|0))break a}else c[m>>2]=1802;while(0);tN(c[f>>2]|0);Kd(c[j>>2]|0);uN();c[e>>2]=c[m>>2];q=c[e>>2]|0;i=r;return q|0}while(0);c[c[j>>2]>>2]=c[l>>2];q=(c[l>>2]|0)+28|0;c[q>>2]=(c[q>>2]|0)+1;c[(c[f>>2]|0)+36>>2]=c[j>>2];uN();c[(c[j>>2]|0)+4>>2]=c[(c[l>>2]|0)+32>>2];c[(c[l>>2]|0)+32>>2]=c[j>>2];c[e>>2]=0;q=c[e>>2]|0;i=r;return q|0}function gO(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+48|0;h=p+44|0;q=p+40|0;j=p+36|0;l=p+28|0;m=p+24|0;k=p+8|0;n=p;c[q>>2]=e;c[j>>2]=f;c[p+32>>2]=g;c[l>>2]=c[q>>2];c[n>>2]=0;if((d[(c[l>>2]|0)+16>>0]|0|0)<=(c[j>>2]|0)){c[h>>2]=0;q=c[h>>2]|0;i=p;return q|0}sN();c[m>>2]=c[(c[l>>2]|0)+8>>2];do if((d[(c[l>>2]|0)+16>>0]|0|0)>1){if((c[j>>2]|0)==1?(b[k>>1]=0,b[k+2>>1]=0,c[k+4>>2]=(c[381]|0)+2,c[k+8>>2]=510,(hO(c[l>>2]|0,k)|0)!=0):0){c[n>>2]=2314;q=c[l>>2]|0;KN(q,c[(SP()|0)>>2]|0);break}b[k>>1]=2;b[k+2>>1]=0;c[k+4>>2]=c[381];c[k+8>>2]=2;if(!(hO(c[l>>2]|0,k)|0)){a[(c[m>>2]|0)+12>>0]=1;o=10;break}else{c[n>>2]=2058;q=c[l>>2]|0;KN(q,c[(SP()|0)>>2]|0);break}}else o=10;while(0);if((o|0)==10?(c[j>>2]|0)==0:0){q=(c[m>>2]|0)+8|0;c[q>>2]=(c[q>>2]|0)+-1;do if(!(c[(c[m>>2]|0)+8>>2]|0)){b[k>>1]=2;b[k+2>>1]=0;c[k+8>>2]=0;c[k+4>>2]=0;if(!(hO(c[l>>2]|0,k)|0)){a[(c[m>>2]|0)+12>>0]=0;break}else{c[n>>2]=2058;q=c[l>>2]|0;KN(q,c[(SP()|0)>>2]|0);a[(c[m>>2]|0)+12>>0]=0;a[(c[l>>2]|0)+16>>0]=0;break}}while(0);q=(c[m>>2]|0)+24|0;c[q>>2]=(c[q>>2]|0)+-1;if(!(c[(c[m>>2]|0)+24>>2]|0))iO(c[l>>2]|0)}uN();if(!(c[n>>2]|0))a[(c[l>>2]|0)+16>>0]=c[j>>2];c[h>>2]=c[n>>2];q=c[h>>2]|0;i=p;return q|0}function hO(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+64|0;p=q+8|0;o=q;h=q+48|0;j=q+44|0;k=q+40|0;n=q+36|0;m=q+32|0;l=q+16|0;c[j>>2]=f;c[k>>2]=g;c[m>>2]=c[(c[j>>2]|0)+8>>2];do if(((e[(c[j>>2]|0)+18>>1]|0)&3|0)==1){if(d[(c[m>>2]|0)+13>>0]|0){c[n>>2]=0;break}b[l+2>>1]=0;c[l+4>>2]=(c[381]|0)+2;c[l+8>>2]=510;b[l>>1]=1;g=c[1839]|0;p=c[(c[j>>2]|0)+12>>2]|0;c[o>>2]=l;c[n>>2]=Ob[g&255](p,13,o)|0;if((c[n>>2]|0)>=0){a[(c[m>>2]|0)+13>>0]=1;p=(c[m>>2]|0)+24|0;c[p>>2]=(c[p>>2]|0)+1;break}c[h>>2]=c[n>>2];p=c[h>>2]|0;i=q;return p|0}else{g=c[1839]|0;o=c[(c[j>>2]|0)+12>>2]|0;c[p>>2]=c[k>>2];c[n>>2]=Ob[g&255](o,13,p)|0}while(0);c[h>>2]=c[n>>2];p=c[h>>2]|0;i=q;return p|0}function iO(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;e=g+8|0;d=g+4|0;f=g;c[b>>2]=a;c[e>>2]=c[(c[b>>2]|0)+8>>2];c[d>>2]=c[(c[e>>2]|0)+28>>2];while(1){if(!(c[d>>2]|0))break;c[f>>2]=c[(c[d>>2]|0)+8>>2];wN(c[b>>2]|0,c[c[d>>2]>>2]|0,28492);Kd(c[d>>2]|0);c[d>>2]=c[f>>2]}c[(c[e>>2]|0)+28>>2]=0;i=g;return}function jO(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+16|0;d=b+8|0;e=b+4|0;f=b;c[d>>2]=a;c[e>>2]=c[(c[d>>2]|0)+8>>2];c[f>>2]=c[(c[d>>2]|0)+28>>2];c[(c[f>>2]|0)+8>>2]=c[(c[e>>2]|0)+28>>2];c[(c[e>>2]|0)+28>>2]=c[f>>2];c[(c[d>>2]|0)+12>>2]=-1;c[(c[d>>2]|0)+28>>2]=0;i=b;return}function kO(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=c[(c[b>>2]|0)+8>>2];if(!(c[d>>2]|0)){i=e;return}a=(c[d>>2]|0)+16|0;c[a>>2]=(c[a>>2]|0)+-1;if(c[(c[d>>2]|0)+16>>2]|0){i=e;return}iO(c[b>>2]|0);b=c[(c[d>>2]|0)+32>>2]|0;if(c[(c[d>>2]|0)+36>>2]|0)c[(c[(c[d>>2]|0)+36>>2]|0)+32>>2]=b;else c[1946]=b;if(c[(c[d>>2]|0)+32>>2]|0)c[(c[(c[d>>2]|0)+32>>2]|0)+36>>2]=c[(c[d>>2]|0)+36>>2];Kd(c[d>>2]|0);i=e;return}function lO(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 7708}function mO(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e;d=e+8|0;c[d>>2]=a;if((c[c[d>>2]>>2]|0)<=(c[(c[d>>2]|0)+4>>2]|0)){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b;a=d;a=c[a>>2]|0;d=d+4|0;d=c[d>>2]|0;C=d;i=e;return a|0}else{f=(c[d>>2]|0)+4|0;a=c[f>>2]|0;c[f>>2]=a+1;a=ee(c[(c[(c[d>>2]|0)+8>>2]|0)+(a<<2)>>2]|0)|0;d=b;c[d>>2]=a;c[d+4>>2]=C;d=b;a=d;a=c[a>>2]|0;d=d+4|0;d=c[d>>2]|0;C=d;i=e;return a|0}return 0}function nO(a){a=a|0;var b=0,d=0,e=0,f=0.0,g=0;e=i;i=i+16|0;b=e;d=e+8|0;c[d>>2]=a;if((c[c[d>>2]>>2]|0)<=(c[(c[d>>2]|0)+4>>2]|0)){h[b>>3]=0.0;f=+h[b>>3];i=e;return+f}else{g=(c[d>>2]|0)+4|0;a=c[g>>2]|0;c[g>>2]=a+1;h[b>>3]=+ce(c[(c[(c[d>>2]|0)+8>>2]|0)+(a<<2)>>2]|0);f=+h[b>>3];i=e;return+f}return 0.0}function oO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+20|0;f=l+16|0;g=l+12|0;k=l+8|0;j=l;c[f>>2]=b;c[g>>2]=d;if((c[c[g>>2]>>2]|0)<=0){a[e>>0]=48;b=a[e>>0]|0;i=l;return b|0}else{b=c[g>>2]|0;c[b>>2]=(c[b>>2]|0)+-1;c[k>>2]=~~+h[c[f>>2]>>3];h[j>>3]=+(c[k>>2]|0);c[k>>2]=(c[k>>2]|0)+48;h[c[f>>2]>>3]=(+h[c[f>>2]>>3]-+h[j>>3])*10.0;a[e>>0]=c[k>>2];b=a[e>>0]|0;i=l;return b|0}return 0}function pO(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;if((c[c[d>>2]>>2]|0)<=(c[(c[d>>2]|0)+4>>2]|0)){c[b>>2]=0;a=c[b>>2]|0;i=e;return a|0}else{f=(c[d>>2]|0)+4|0;a=c[f>>2]|0;c[f>>2]=a+1;c[b>>2]=ae(c[(c[(c[d>>2]|0)+8>>2]|0)+(a<<2)>>2]|0)|0;a=c[b>>2]|0;i=e;return a|0}return 0}function qO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+4|0;g=j;h=j+8|0;c[f>>2]=b;c[g>>2]=d;a[h>>0]=e;b=c[g>>2]|0;b=gR(c[(c[f>>2]|0)+12>>2]|0,0,b|0,((b|0)<0)<<31>>31|0)|0;e=C;if((e|0)>0|((e|0)==0?b>>>0>=(c[(c[f>>2]|0)+16>>2]|0)>>>0:0)?(b=dA(c[f>>2]|0,c[g>>2]|0)|0,c[g>>2]=b,(b|0)<=0):0){i=j;return}while(1){b=c[g>>2]|0;c[g>>2]=b+-1;if((b|0)<=0)break;e=a[h>>0]|0;d=(c[f>>2]|0)+12|0;b=c[d>>2]|0;c[d>>2]=b+1;a[(c[(c[f>>2]|0)+8>>2]|0)+b>>0]=e}i=j;return}function rO(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;b=d;c[b>>2]=a;a=288;e=c[a+4>>2]|0;if((e|0)<0|(e|0)==0&(c[a>>2]|0)>>>0<=0){i=d;return}Fd(c[b>>2]|0)|0;i=d;return}function sO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;j=h+20|0;d=h+16|0;e=h+12|0;g=h+8|0;f=h;c[j>>2]=a;c[d>>2]=b;c[e>>2]=Tb[c[60>>2]&255](c[j>>2]|0)|0;Mi(5,c[j>>2]|0);b=288;a=c[b+4>>2]|0;do if((a|0)>0|(a|0)==0&(c[b>>2]|0)>>>0>0){b=Zf(0)|0;a=f;c[a>>2]=b;c[a+4>>2]=C;a=f;b=c[a>>2]|0;a=c[a+4>>2]|0;f=288;j=c[e>>2]|0;j=fR(c[f>>2]|0,c[f+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0;f=C;if((a|0)>(f|0)|(a|0)==(f|0)&b>>>0>=j>>>0){c[77]=1;rO(c[e>>2]|0);break}else{c[77]=0;break}}while(0);c[g>>2]=Tb[c[44>>2]&255](c[e>>2]|0)|0;if(!(c[g>>2]|0)){b=c[g>>2]|0;j=c[d>>2]|0;c[j>>2]=b;j=c[e>>2]|0;i=h;return j|0}c[e>>2]=$f(c[g>>2]|0)|0;Ni(0,c[e>>2]|0);Ni(9,1);b=c[g>>2]|0;j=c[d>>2]|0;c[j>>2]=b;j=c[e>>2]|0;i=h;return j|0}function tO(){var a=0,b=0,d=0,e=0;e=i;i=i+16|0;b=e+8|0;d=e+4|0;a=e;c[d>>2]=1080;c[a>>2]=9708;c[b>>2]=0;while(1){if((c[b>>2]|0)>=8)break;Yt(c[d>>2]|0,(c[a>>2]|0)+(c[b>>2]<<5)|0);c[b>>2]=(c[b>>2]|0)+1}i=e;return}function uO(){var a=0,b=0,d=0,e=0;e=i;i=i+16|0;b=e+8|0;d=e+4|0;a=e;c[d>>2]=1080;c[a>>2]=9612;c[b>>2]=0;while(1){if((c[b>>2]|0)>=3)break;Yt(c[d>>2]|0,(c[a>>2]|0)+(c[b>>2]<<5)|0);c[b>>2]=(c[b>>2]|0)+1}i=e;return}function vO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+64|0;l=r;f=r+60|0;s=r+52|0;o=r+48|0;p=r+44|0;k=r+40|0;j=r+32|0;m=r+28|0;h=r+24|0;n=r+20|0;g=r+16|0;c[f>>2]=b;c[r+56>>2]=d;c[s>>2]=e;c[o>>2]=ae(c[c[s>>2]>>2]|0)|0;c[p>>2]=ae(c[(c[s>>2]|0)+4>>2]|0)|0;c[m>>2]=c[o>>2];c[h>>2]=0;c[g>>2]=we(c[f>>2]|0)|0;if(!(c[o>>2]|0)){i=r;return}do{if(!(a[c[m>>2]>>0]|0)){q=7;break}c[j>>2]=c[m>>2];c[j+4>>2]=c[h>>2];do{c[m>>2]=(c[m>>2]|0)+(c[h>>2]|0);c[h>>2]=Qu(c[m>>2]|0,k)|0}while((c[k>>2]|0)==159)}while((c[k>>2]|0)!=22?(c[k>>2]|0)!=125:0);if((q|0)==7){i=r;return}s=c[g>>2]|0;m=c[o>>2]|0;p=c[p>>2]|0;q=(c[j>>2]|0)+(c[j+4>>2]|0)|0;c[l>>2]=(c[j>>2]|0)-(c[o>>2]|0);c[l+4>>2]=m;c[l+8>>2]=p;c[l+12>>2]=q;c[n>>2]=Bh(s,46327,l)|0;ne(c[f>>2]|0,c[n>>2]|0,-1,170);i=r;return}function wO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+80|0;m=s;f=s+68|0;t=s+60|0;p=s+56|0;q=s+52|0;l=s+48|0;k=s+40|0;h=s+32|0;n=s+28|0;j=s+24|0;o=s+20|0;g=s+16|0;c[f>>2]=b;c[s+64>>2]=d;c[t>>2]=e;c[p>>2]=ae(c[c[t>>2]>>2]|0)|0;c[q>>2]=ae(c[(c[t>>2]|0)+4>>2]|0)|0;c[h>>2]=3;c[n>>2]=c[p>>2];c[j>>2]=0;c[g>>2]=we(c[f>>2]|0)|0;if(!(c[p>>2]|0)){i=s;return}while(1){if(!(a[c[n>>2]>>0]|0)){r=8;break}c[k>>2]=c[n>>2];c[k+4>>2]=c[j>>2];do{c[n>>2]=(c[n>>2]|0)+(c[j>>2]|0);c[j>>2]=Qu(c[n>>2]|0,l)|0}while((c[l>>2]|0)==159);t=(c[h>>2]|0)+1|0;c[h>>2]=t;c[h>>2]=(c[l>>2]|0)==122|(c[l>>2]|0)==107?0:t;if((c[h>>2]|0)!=2)continue;if(!((c[l>>2]|0)!=137&(c[l>>2]|0)!=46&(c[l>>2]|0)!=5))break}if((r|0)==8){i=s;return}t=c[g>>2]|0;n=c[p>>2]|0;q=c[q>>2]|0;r=(c[k>>2]|0)+(c[k+4>>2]|0)|0;c[m>>2]=(c[k>>2]|0)-(c[p>>2]|0);c[m+4>>2]=n;c[m+8>>2]=q;c[m+12>>2]=r;c[o>>2]=Bh(t,46327,m)|0;ne(c[f>>2]|0,c[o>>2]|0,-1,170);i=s;return}function xO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+80|0;l=u+16|0;k=u;f=u+76|0;v=u+68|0;g=u+64|0;r=u+60|0;t=u+56|0;n=u+52|0;p=u+48|0;o=u+44|0;m=u+40|0;h=u+36|0;j=u+32|0;s=u+28|0;q=u+24|0;c[f>>2]=b;c[u+72>>2]=d;c[v>>2]=e;c[g>>2]=we(c[f>>2]|0)|0;c[r>>2]=0;c[n>>2]=ae(c[c[v>>2]>>2]|0)|0;c[p>>2]=ae(c[(c[v>>2]|0)+4>>2]|0)|0;c[o>>2]=ae(c[(c[v>>2]|0)+8>>2]|0)|0;if((c[n>>2]|0)==0|(c[p>>2]|0)==0){i=u;return}c[m>>2]=c[n>>2];while(1){if(!(a[c[m>>2]>>0]|0))break;c[h>>2]=Qu(c[m>>2]|0,j)|0;if((c[j>>2]|0)==105){do{c[m>>2]=(c[m>>2]|0)+(c[h>>2]|0);c[h>>2]=Qu(c[m>>2]|0,j)|0}while((c[j>>2]|0)==159);if((c[j>>2]|0)==160)break;v=c[h>>2]|0;c[s>>2]=Iw(c[g>>2]|0,c[m>>2]|0,v,((v|0)<0)<<31>>31)|0;if(!(c[s>>2]|0))break;Jw(c[s>>2]|0)|0;if(!(Td(c[p>>2]|0,c[s>>2]|0)|0)){v=c[g>>2]|0;d=(c[m>>2]|0)-(c[n>>2]|0)|0;e=c[n>>2]|0;b=c[o>>2]|0;c[k>>2]=(c[r>>2]|0)!=0?c[r>>2]|0:19266;c[k+4>>2]=d;c[k+8>>2]=e;c[k+12>>2]=b;c[q>>2]=Bh(v,46316,k)|0;Sf(c[g>>2]|0,c[r>>2]|0);c[r>>2]=c[q>>2];c[n>>2]=(c[m>>2]|0)+(c[h>>2]|0)}Sf(c[g>>2]|0,c[s>>2]|0)}c[m>>2]=(c[m>>2]|0)+(c[h>>2]|0)}v=c[g>>2]|0;s=c[n>>2]|0;c[l>>2]=(c[r>>2]|0)!=0?c[r>>2]|0:19266;c[l+4>>2]=s;c[t>>2]=Bh(v,25552,l)|0;ne(c[f>>2]|0,c[t>>2]|0,-1,170);Sf(c[g>>2]|0,c[r>>2]|0);i=u;return}function yO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+64|0;e=g+56|0;j=g+52|0;h=g+48|0;f=g;c[e>>2]=a;c[j>>2]=b;c[h>>2]=d;if(GO(c[e>>2]|0,c[j>>2]|0,c[h>>2]|0,f)|0){i=g;return}HO(f);j=f;ie(c[e>>2]|0,(+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0))/864.0e5);i=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+176|0;f=j+48|0;e=j+68|0;l=j+64|0;k=j+60|0;g=j;h=j+72|0;c[e>>2]=a;c[l>>2]=b;c[k>>2]=d;if(GO(c[e>>2]|0,c[l>>2]|0,c[k>>2]|0,g)|0){i=j;return}JO(g);k=c[g+12>>2]|0;l=c[g+16>>2]|0;c[f>>2]=c[g+8>>2];c[f+4>>2]=k;c[f+8>>2]=l;Qd(100,h,46623,f)|0;ne(c[e>>2]|0,h,-1,-1);i=j;return}function AO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0;k=i;i=i+176|0;f=k+48|0;e=k+68|0;m=k+64|0;l=k+60|0;g=k;j=k+72|0;c[e>>2]=a;c[m>>2]=b;c[l>>2]=d;if(GO(c[e>>2]|0,c[m>>2]|0,c[l>>2]|0,g)|0){i=k;return}KO(g);l=c[g+24>>2]|0;m=~~+h[g+32>>3];c[f>>2]=c[g+20>>2];c[f+4>>2]=l;c[f+8>>2]=m;Qd(100,j,46608,f)|0;ne(c[e>>2]|0,j,-1,-1);i=k;return}function BO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0;k=i;i=i+192|0;f=k+48|0;e=k+80|0;m=k+76|0;l=k+72|0;g=k;j=k+84|0;c[e>>2]=a;c[m>>2]=b;c[l>>2]=d;if(GO(c[e>>2]|0,c[m>>2]|0,c[l>>2]|0,g)|0){i=k;return}IO(g);b=c[g+12>>2]|0;d=c[g+16>>2]|0;a=c[g+20>>2]|0;l=c[g+24>>2]|0;m=~~+h[g+32>>3];c[f>>2]=c[g+8>>2];c[f+4>>2]=b;c[f+8>>2]=d;c[f+12>>2]=a;c[f+16>>2]=l;c[f+20>>2]=m;Qd(100,j,46578,f)|0;ne(c[e>>2]|0,j,-1,-1);i=k;return}function CO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+336|0;z=J+192|0;y=J+184|0;x=J+176|0;w=J+168|0;v=J+160|0;u=J+152|0;t=J+144|0;B=J+136|0;A=J+128|0;s=J+120|0;r=J+112|0;m=J+232|0;f=J+228|0;g=J+224|0;E=J+64|0;k=J+56|0;n=J+220|0;o=J+216|0;G=J+212|0;j=J+208|0;I=J+204|0;H=J+236|0;q=J+48|0;p=J+200|0;F=J;D=J+196|0;c[m>>2]=b;c[f>>2]=d;c[g>>2]=e;if(!(c[f>>2]|0)){i=J;return}c[I>>2]=ae(c[c[g>>2]>>2]|0)|0;if(!(c[I>>2]|0)){i=J;return}if(GO(c[m>>2]|0,(c[f>>2]|0)-1|0,(c[g>>2]|0)+4|0,E)|0){i=J;return}c[j>>2]=we(c[m>>2]|0)|0;c[n>>2]=0;b=k;c[b>>2]=1;c[b+4>>2]=0;a:while(1){if(!(a[(c[I>>2]|0)+(c[n>>2]|0)>>0]|0))break;if((a[(c[I>>2]|0)+(c[n>>2]|0)>>0]|0)==37){switch(a[(c[I>>2]|0)+((c[n>>2]|0)+1)>>0]|0){case 87:case 83:case 77:case 109:case 72:case 100:{e=k;b=k;c[b>>2]=gR(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;c[b+4>>2]=C;break}case 37:case 119:break;case 102:{e=k;b=k;c[b>>2]=gR(c[e>>2]|0,c[e+4>>2]|0,8,0)|0;c[b+4>>2]=C;break}case 106:{e=k;b=k;c[b>>2]=gR(c[e>>2]|0,c[e+4>>2]|0,3,0)|0;c[b+4>>2]=C;break}case 89:{e=k;b=k;c[b>>2]=gR(c[e>>2]|0,c[e+4>>2]|0,8,0)|0;c[b+4>>2]=C;break}case 74:case 115:{e=k;b=k;c[b>>2]=gR(c[e>>2]|0,c[e+4>>2]|0,50,0)|0;c[b+4>>2]=C;break}default:{l=44;break a}}c[n>>2]=(c[n>>2]|0)+1}c[n>>2]=(c[n>>2]|0)+1;e=k;e=gR(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;b=k;c[b>>2]=e;c[b+4>>2]=C}if((l|0)==44){i=J;return}l=k;b=c[l+4>>2]|0;if(!(b>>>0<0|(b|0)==0&(c[l>>2]|0)>>>0<100)){b=k;d=c[b+4>>2]|0;l=c[(c[j>>2]|0)+88>>2]|0;e=((l|0)<0)<<31>>31;if(d>>>0>e>>>0|((d|0)==(e|0)?(c[b>>2]|0)>>>0>l>>>0:0)){se(c[m>>2]|0);i=J;return}l=c[k>>2]|0;c[G>>2]=Fw(c[j>>2]|0,l,((l|0)<0)<<31>>31)|0;if(!(c[G>>2]|0)){te(c[m>>2]|0);i=J;return}}else c[G>>2]=H;HO(E);IO(E);c[o>>2]=0;c[n>>2]=0;while(1){if(!(a[(c[I>>2]|0)+(c[n>>2]|0)>>0]|0))break;f=c[n>>2]|0;b:do if((a[(c[I>>2]|0)+(c[n>>2]|0)>>0]|0)!=37){k=a[(c[I>>2]|0)+f>>0]|0;l=c[o>>2]|0;c[o>>2]=l+1;a[(c[G>>2]|0)+l>>0]=k}else{c[n>>2]=f+1;do switch(a[(c[I>>2]|0)+(c[n>>2]|0)>>0]|0){case 100:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[r>>2]=c[E+16>>2];Qd(3,l,46420,r)|0;c[o>>2]=(c[o>>2]|0)+2;break b}case 102:{h[q>>3]=+h[E+32>>3];if(+h[q>>3]>59.999)h[q>>3]=59.999;l=(c[G>>2]|0)+(c[o>>2]|0)|0;h[s>>3]=+h[q>>3];Qd(7,l,46425,s)|0;c[o>>2]=(If((c[G>>2]|0)+(c[o>>2]|0)|0)|0)+(c[o>>2]|0);break b}case 72:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[A>>2]=c[E+20>>2];Qd(3,l,46420,A)|0;c[o>>2]=(c[o>>2]|0)+2;break b}case 106:case 87:{f=F;g=E;d=f+48|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(d|0));a[F+42>>0]=0;c[F+12>>2]=1;c[F+16>>2]=1;HO(F);k=E;l=F;c[p>>2]=pR(gR(fR(c[k>>2]|0,c[k+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0,C|0,432e5,0)|0,C|0,864e5,0)|0;if((a[(c[I>>2]|0)+(c[n>>2]|0)>>0]|0)==87){l=E;l=gR(c[l>>2]|0,c[l+4>>2]|0,432e5,0)|0;l=pR(l|0,C|0,864e5,0)|0;l=qR(l|0,C|0,7,0)|0;c[D>>2]=l;l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[B>>2]=((c[p>>2]|0)+7-(c[D>>2]|0)|0)/7|0;Qd(3,l,46420,B)|0;c[o>>2]=(c[o>>2]|0)+2;break b}else{l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[t>>2]=(c[p>>2]|0)+1;Qd(4,l,46432,t)|0;c[o>>2]=(c[o>>2]|0)+3;break b}}case 74:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;k=E;h[u>>3]=(+((c[k>>2]|0)>>>0)+4294967296.0*+(c[k+4>>2]|0))/864.0e5;Qd(20,l,43396,u)|0;c[o>>2]=(If((c[G>>2]|0)+(c[o>>2]|0)|0)|0)+(c[o>>2]|0);break b}case 109:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[v>>2]=c[E+12>>2];Qd(3,l,46420,v)|0;c[o>>2]=(c[o>>2]|0)+2;break b}case 77:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[w>>2]=c[E+24>>2];Qd(3,l,46420,w)|0;c[o>>2]=(c[o>>2]|0)+2;break b}case 115:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;j=E;k=x;c[k>>2]=fR(pR(c[j>>2]|0,c[j+4>>2]|0,1e3,0)|0,C|0,413362496,49)|0;c[k+4>>2]=C;Qd(30,l,29137,x)|0;c[o>>2]=(If((c[G>>2]|0)+(c[o>>2]|0)|0)|0)+(c[o>>2]|0);break b}case 83:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[y>>2]=~~+h[E+32>>3];Qd(3,l,46420,y)|0;c[o>>2]=(c[o>>2]|0)+2;break b}case 119:{k=E;k=qR(pR(gR(c[k>>2]|0,c[k+4>>2]|0,1296e5,0)|0,C|0,864e5,0)|0,C|0,7,0)|0;l=c[o>>2]|0;c[o>>2]=l+1;a[(c[G>>2]|0)+l>>0]=((k&255)<<24>>24)+48;break b}case 89:{l=(c[G>>2]|0)+(c[o>>2]|0)|0;c[z>>2]=c[E+8>>2];Qd(5,l,46437,z)|0;c[o>>2]=(If((c[G>>2]|0)+(c[o>>2]|0)|0)|0)+(c[o>>2]|0);break b}default:{l=c[o>>2]|0;c[o>>2]=l+1;a[(c[G>>2]|0)+l>>0]=37;break b}}while(0)}while(0);c[n>>2]=(c[n>>2]|0)+1}a[(c[G>>2]|0)+(c[o>>2]|0)>>0]=0;ne(c[m>>2]|0,c[G>>2]|0,-1,(c[G>>2]|0)==(H|0)?-1:170);i=J;return}function DO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e+8|0;c[f>>2]=a;c[e+4>>2]=b;c[e>>2]=d;AO(c[f>>2]|0,0,0);i=e;return}function EO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e+8|0;c[f>>2]=a;c[e+4>>2]=b;c[e>>2]=d;BO(c[f>>2]|0,0,0);i=e;return}function FO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e+8|0;c[f>>2]=a;c[e+4>>2]=b;c[e>>2]=d;zO(c[f>>2]|0,0,0);i=e;return}function GO(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;p=i;i=i+32|0;o=p+28|0;g=p+24|0;h=p+20|0;j=p+16|0;k=p+12|0;m=p+8|0;n=p+4|0;l=p;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;d=c[k>>2]|0;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));if(!(c[h>>2]|0)){c[o>>2]=LO(c[g>>2]|0,c[k>>2]|0)|0;o=c[o>>2]|0;i=p;return o|0}f=fe(c[c[j>>2]>>2]|0)|0;c[l>>2]=f;d=c[c[j>>2]>>2]|0;do if((f|0)==2|(c[l>>2]|0)==1){q=+ce(d)*864.0e5+.5;f=+N(q)>=1.0?q>0.0?~~+$(+M(q/4294967296.0),4294967295.0)>>>0:~~+Z((q-+(~~q>>>0))/4294967296.0)>>>0:0;l=c[k>>2]|0;c[l>>2]=~~q>>>0;c[l+4>>2]=f;a[(c[k>>2]|0)+42>>0]=1}else{c[n>>2]=ae(d)|0;if((c[n>>2]|0)!=0?(MO(c[g>>2]|0,c[n>>2]|0,c[k>>2]|0)|0)==0:0)break;c[o>>2]=1;o=c[o>>2]|0;i=p;return o|0}while(0);c[m>>2]=1;while(1){if((c[m>>2]|0)>=(c[h>>2]|0)){d=14;break}c[n>>2]=ae(c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]|0)|0;if(!(c[n>>2]|0)){d=12;break}if(NO(c[g>>2]|0,c[n>>2]|0,c[k>>2]|0)|0){d=12;break}c[m>>2]=(c[m>>2]|0)+1}if((d|0)==12){c[o>>2]=1;o=c[o>>2]|0;i=p;return o|0}else if((d|0)==14){c[o>>2]=0;o=c[o>>2]|0;i=p;return o|0}return 0}function HO(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0;n=i;i=i+32|0;d=n+28|0;m=n+24|0;j=n+20|0;g=n+16|0;e=n+12|0;f=n+8|0;k=n+4|0;l=n;c[d>>2]=b;if(a[(c[d>>2]|0)+42>>0]|0){i=n;return}if(a[(c[d>>2]|0)+40>>0]|0){c[m>>2]=c[(c[d>>2]|0)+8>>2];c[j>>2]=c[(c[d>>2]|0)+12>>2];c[g>>2]=c[(c[d>>2]|0)+16>>2]}else{c[m>>2]=2e3;c[j>>2]=1;c[g>>2]=1}if((c[j>>2]|0)<=2){c[m>>2]=(c[m>>2]|0)+-1;c[j>>2]=(c[j>>2]|0)+12}c[e>>2]=(c[m>>2]|0)/100|0;c[f>>2]=2-(c[e>>2]|0)+((c[e>>2]|0)/4|0);c[k>>2]=(((c[m>>2]|0)+4716|0)*36525|0)/100|0;c[l>>2]=(((c[j>>2]|0)+1|0)*306001|0)/1e4|0;o=(+((c[k>>2]|0)+(c[l>>2]|0)+(c[g>>2]|0)+(c[f>>2]|0)|0)-1524.5)*864.0e5;m=+N(o)>=1.0?o>0.0?~~+$(+M(o/4294967296.0),4294967295.0)>>>0:~~+Z((o-+(~~o>>>0))/4294967296.0)>>>0:0;b=c[d>>2]|0;c[b>>2]=~~o>>>0;c[b+4>>2]=m;a[(c[d>>2]|0)+42>>0]=1;if(!(a[(c[d>>2]|0)+41>>0]|0)){i=n;return}m=_(c[(c[d>>2]|0)+20>>2]|0,36e5)|0;m=m+((c[(c[d>>2]|0)+24>>2]|0)*6e4|0)|0;o=+h[(c[d>>2]|0)+32>>3]*1.0e3;m=gR(m|0,((m|0)<0)<<31>>31|0,~~o>>>0|0,(+N(o)>=1.0?o>0.0?~~+$(+M(o/4294967296.0),4294967295.0)>>>0:~~+Z((o-+(~~o>>>0))/4294967296.0)>>>0:0)|0)|0;b=c[d>>2]|0;l=b;m=gR(c[l>>2]|0,c[l+4>>2]|0,m|0,C|0)|0;c[b>>2]=m;c[b+4>>2]=C;if(!(a[(c[d>>2]|0)+43>>0]|0)){i=n;return}m=(c[(c[d>>2]|0)+28>>2]|0)*6e4|0;b=c[d>>2]|0;l=b;m=fR(c[l>>2]|0,c[l+4>>2]|0,m|0,((m|0)<0)<<31>>31|0)|0; +c[b>>2]=m;c[b+4>>2]=C;a[(c[d>>2]|0)+40>>0]=0;a[(c[d>>2]|0)+41>>0]=0;a[(c[d>>2]|0)+43>>0]=0;i=n;return}function IO(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;JO(c[d>>2]|0);KO(c[d>>2]|0);i=b;return}function JO(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;d=m+28|0;l=m+24|0;e=m+20|0;f=m+16|0;g=m+12|0;h=m+8|0;j=m+4|0;k=m;c[d>>2]=b;if(a[(c[d>>2]|0)+40>>0]|0){i=m;return}b=c[d>>2]|0;if(a[(c[d>>2]|0)+42>>0]|0){b=gR(c[b>>2]|0,c[b+4>>2]|0,432e5,0)|0;b=pR(b|0,C|0,864e5,0)|0;c[l>>2]=b;c[e>>2]=~~((+(c[l>>2]|0)-1867216.25)/36524.25);c[e>>2]=(c[l>>2]|0)+1+(c[e>>2]|0)-((c[e>>2]|0)/4|0);c[f>>2]=(c[e>>2]|0)+1524;c[g>>2]=~~((+(c[f>>2]|0)-122.1)/365.25);c[h>>2]=((c[g>>2]&32767)*36525|0)/100|0;c[j>>2]=~~(+((c[f>>2]|0)-(c[h>>2]|0)|0)/30.6001);c[k>>2]=~~(+(c[j>>2]|0)*30.6001);c[(c[d>>2]|0)+16>>2]=(c[f>>2]|0)-(c[h>>2]|0)-(c[k>>2]|0);l=c[j>>2]|0;c[(c[d>>2]|0)+12>>2]=(c[j>>2]|0)<14?l-1|0:l-13|0;l=c[g>>2]|0;c[(c[d>>2]|0)+8>>2]=(c[(c[d>>2]|0)+12>>2]|0)>2?l-4716|0:l-4715|0}else{c[b+8>>2]=2e3;c[(c[d>>2]|0)+12>>2]=1;c[(c[d>>2]|0)+16>>2]=1}a[(c[d>>2]|0)+40>>0]=1;i=m;return}function KO(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;if(a[(c[d>>2]|0)+41>>0]|0){i=f;return}HO(c[d>>2]|0);b=c[d>>2]|0;b=gR(c[b>>2]|0,c[b+4>>2]|0,432e5,0)|0;b=qR(b|0,C|0,864e5,0)|0;c[e>>2]=b;h[(c[d>>2]|0)+32>>3]=+(c[e>>2]|0)/1.0e3;c[e>>2]=~~+h[(c[d>>2]|0)+32>>3];b=(c[d>>2]|0)+32|0;h[b>>3]=+h[b>>3]-+(c[e>>2]|0);c[(c[d>>2]|0)+20>>2]=(c[e>>2]|0)/3600|0;c[e>>2]=(c[e>>2]|0)-((c[(c[d>>2]|0)+20>>2]|0)*3600|0);c[(c[d>>2]|0)+24>>2]=(c[e>>2]|0)/60|0;b=(c[d>>2]|0)+32|0;h[b>>3]=+h[b>>3]+ +((c[e>>2]|0)-((c[(c[d>>2]|0)+24>>2]|0)*60|0)|0);a[(c[d>>2]|0)+41>>0]=1;i=f;return}function LO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+8|0;h=g+4|0;f=g;c[h>>2]=b;c[f>>2]=d;b=VO(c[h>>2]|0)|0;d=c[f>>2]|0;c[d>>2]=b;c[d+4>>2]=C;d=c[f>>2]|0;b=c[d+4>>2]|0;if((b|0)>0|(b|0)==0&(c[d>>2]|0)>>>0>0){a[(c[f>>2]|0)+42>>0]=1;c[e>>2]=0;h=c[e>>2]|0;i=g;return h|0}else{c[e>>2]=1;h=c[e>>2]|0;i=g;return h|0}return 0}function MO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0.0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;j=m+12|0;k=m+8|0;l=m;c[g>>2]=b;c[j>>2]=d;c[k>>2]=e;if(!(UO(c[j>>2]|0,c[k>>2]|0)|0)){c[f>>2]=0;d=c[f>>2]|0;i=m;return d|0}if(!(QO(c[j>>2]|0,c[k>>2]|0)|0)){c[f>>2]=0;d=c[f>>2]|0;i=m;return d|0}if(!(Td(c[j>>2]|0,46562)|0)){c[f>>2]=LO(c[g>>2]|0,c[k>>2]|0)|0;d=c[f>>2]|0;i=m;return d|0}d=c[j>>2]|0;if(Ky(d,l,If(c[j>>2]|0)|0,1)|0){n=+h[l>>3]*864.0e5+.5;l=+N(n)>=1.0?n>0.0?~~+$(+M(n/4294967296.0),4294967295.0)>>>0:~~+Z((n-+(~~n>>>0))/4294967296.0)>>>0:0;d=c[k>>2]|0;c[d>>2]=~~n>>>0;c[d+4>>2]=l;a[(c[k>>2]|0)+42>>0]=1;c[f>>2]=0;d=c[f>>2]|0;i=m;return d|0}else{c[f>>2]=1;d=c[f>>2]|0;i=m;return d|0}return 0}function NO(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;z=i;i=i+160|0;g=z+124|0;j=z+120|0;w=z+116|0;x=z+112|0;m=z+108|0;n=z+80|0;y=z+104|0;l=z+72|0;k=z+64|0;o=z+56|0;v=z+100|0;u=z+8|0;t=z;p=z+96|0;q=z+92|0;r=z+88|0;c[g>>2]=b;c[j>>2]=e;c[w>>2]=f;c[x>>2]=1;c[y>>2]=z+128;c[m>>2]=0;while(1){if((c[m>>2]|0)<29)b=(a[(c[j>>2]|0)+(c[m>>2]|0)>>0]|0)!=0;else b=0;f=c[m>>2]|0;if(!b)break;a[(c[y>>2]|0)+(c[m>>2]|0)>>0]=a[18477+(d[(c[j>>2]|0)+f>>0]|0)>>0]|0;c[m>>2]=(c[m>>2]|0)+1}a[(c[y>>2]|0)+f>>0]=0;switch(a[c[y>>2]>>0]|0){case 108:{if(yQ(c[y>>2]|0,46442)|0){y=c[x>>2]|0;i=z;return y|0}HO(c[w>>2]|0);v=OO(c[w>>2]|0,c[g>>2]|0,x)|0;y=c[w>>2]|0;u=y;c[y>>2]=gR(c[u>>2]|0,c[u+4>>2]|0,v|0,C|0)|0;c[y+4>>2]=C;PO(c[w>>2]|0);y=c[x>>2]|0;i=z;return y|0}case 117:{if((yQ(c[y>>2]|0,46452)|0)==0?(a[(c[w>>2]|0)+42>>0]|0)!=0:0){v=c[w>>2]|0;v=gR(c[v>>2]|0,c[v+4>>2]|0,43200,0)|0;v=pR(v|0,C|0,86400,0)|0;v=gR(v|0,C|0,1045635584,49096)|0;y=c[w>>2]|0;c[y>>2]=v;c[y+4>>2]=C;PO(c[w>>2]|0);c[x>>2]=0;y=c[x>>2]|0;i=z;return y|0}if(yQ(c[y>>2]|0,46462)|0){y=c[x>>2]|0;i=z;return y|0}if(a[(c[w>>2]|0)+44>>0]|0){c[x>>2]=0;y=c[x>>2]|0;i=z;return y|0}HO(c[w>>2]|0);y=l;c[y>>2]=OO(c[w>>2]|0,c[g>>2]|0,x)|0;c[y+4>>2]=C;if(!(c[x>>2]|0)){u=l;y=c[w>>2]|0;v=y;u=fR(c[v>>2]|0,c[v+4>>2]|0,c[u>>2]|0,c[u+4>>2]|0)|0;c[y>>2]=u;c[y+4>>2]=C;PO(c[w>>2]|0);y=l;u=c[y>>2]|0;y=c[y+4>>2]|0;v=OO(c[w>>2]|0,c[g>>2]|0,x)|0;v=fR(u|0,y|0,v|0,C|0)|0;y=c[w>>2]|0;u=y;v=gR(c[u>>2]|0,c[u+4>>2]|0,v|0,C|0)|0;c[y>>2]=v;c[y+4>>2]=C}a[(c[w>>2]|0)+44>>0]=1;y=c[x>>2]|0;i=z;return y|0}case 119:{if(CQ(c[y>>2]|0,46466,8)|0){y=c[x>>2]|0;i=z;return y|0}if(!(Ky((c[y>>2]|0)+8|0,n,If((c[y>>2]|0)+8|0)|0,1)|0)){y=c[x>>2]|0;i=z;return y|0}y=~~+h[n>>3];c[m>>2]=y;if(!(((c[m>>2]|0)>=0?+(y|0)==+h[n>>3]:0)&+h[n>>3]<7.0)){y=c[x>>2]|0;i=z;return y|0}IO(c[w>>2]|0);a[(c[w>>2]|0)+43>>0]=0;a[(c[w>>2]|0)+42>>0]=0;HO(c[w>>2]|0);t=c[w>>2]|0;v=k;c[v>>2]=qR(pR(gR(c[t>>2]|0,c[t+4>>2]|0,1296e5,0)|0,C|0,864e5,0)|0,C|0,7,0)|0;c[v+4>>2]=C;v=k;t=c[v+4>>2]|0;y=c[m>>2]|0;u=((y|0)<0)<<31>>31;if((t|0)>(u|0)|((t|0)==(u|0)?(c[v>>2]|0)>>>0>y>>>0:0)){v=k;v=fR(c[v>>2]|0,c[v+4>>2]|0,7,0)|0;y=k;c[y>>2]=v;c[y+4>>2]=C}y=c[m>>2]|0;v=k;v=rR(fR(y|0,((y|0)<0)<<31>>31|0,c[v>>2]|0,c[v+4>>2]|0)|0,C|0,864e5,0)|0;y=c[w>>2]|0;u=y;c[y>>2]=gR(c[u>>2]|0,c[u+4>>2]|0,v|0,C|0)|0;c[y+4>>2]=C;PO(c[w>>2]|0);c[x>>2]=0;y=c[x>>2]|0;i=z;return y|0}case 115:{if(CQ(c[y>>2]|0,46475,9)|0){y=c[x>>2]|0;i=z;return y|0}c[y>>2]=(c[y>>2]|0)+9;JO(c[w>>2]|0);a[(c[w>>2]|0)+41>>0]=1;c[(c[w>>2]|0)+24>>2]=0;c[(c[w>>2]|0)+20>>2]=0;h[(c[w>>2]|0)+32>>3]=0.0;a[(c[w>>2]|0)+43>>0]=0;a[(c[w>>2]|0)+42>>0]=0;if(!(yQ(c[y>>2]|0,46485)|0)){c[(c[w>>2]|0)+16>>2]=1;c[x>>2]=0;y=c[x>>2]|0;i=z;return y|0}if(!(yQ(c[y>>2]|0,46491)|0)){JO(c[w>>2]|0);c[(c[w>>2]|0)+12>>2]=1;c[(c[w>>2]|0)+16>>2]=1;c[x>>2]=0;y=c[x>>2]|0;i=z;return y|0}if(yQ(c[y>>2]|0,46496)|0){y=c[x>>2]|0;i=z;return y|0}c[x>>2]=0;y=c[x>>2]|0;i=z;return y|0}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:case 45:case 43:{c[m>>2]=1;while(1){if(!(a[(c[y>>2]|0)+(c[m>>2]|0)>>0]|0))break;if((a[(c[y>>2]|0)+(c[m>>2]|0)>>0]|0)==58)break;if(!((d[19267+(d[(c[y>>2]|0)+(c[m>>2]|0)>>0]|0)>>0]&1|0)!=0^1))break;c[m>>2]=(c[m>>2]|0)+1}if(!(Ky(c[y>>2]|0,n,c[m>>2]|0,1)|0)){c[x>>2]=1;y=c[x>>2]|0;i=z;return y|0}if((a[(c[y>>2]|0)+(c[m>>2]|0)>>0]|0)==58){c[v>>2]=c[y>>2];if(!(d[19267+(d[c[v>>2]>>0]|0)>>0]&4))c[v>>2]=(c[v>>2]|0)+1;f=u;b=f+48|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(b|0));if(QO(c[v>>2]|0,u)|0){y=c[x>>2]|0;i=z;return y|0}HO(u);v=u;v=fR(c[v>>2]|0,c[v+4>>2]|0,432e5,0)|0;s=u;c[s>>2]=v;c[s+4>>2]=C;s=u;s=pR(c[s>>2]|0,c[s+4>>2]|0,864e5,0)|0;v=t;c[v>>2]=s;c[v+4>>2]=C;t=rR(c[t>>2]|0,c[t+4>>2]|0,864e5,0)|0;v=u;t=fR(c[v>>2]|0,c[v+4>>2]|0,t|0,C|0)|0;v=u;c[v>>2]=t;c[v+4>>2]=C;if((a[c[y>>2]>>0]|0)==45){v=u;v=fR(0,0,c[v>>2]|0,c[v+4>>2]|0)|0;y=u;c[y>>2]=v;c[y+4>>2]=C}HO(c[w>>2]|0);PO(c[w>>2]|0);v=u;y=c[w>>2]|0;w=y;w=gR(c[w>>2]|0,c[w+4>>2]|0,c[v>>2]|0,c[v+4>>2]|0)|0;c[y>>2]=w;c[y+4>>2]=C;c[x>>2]=0;y=c[x>>2]|0;i=z;return y|0}c[y>>2]=(c[y>>2]|0)+(c[m>>2]|0);while(1){f=c[y>>2]|0;if(!(d[19267+(d[c[y>>2]>>0]|0)>>0]&1))break;c[y>>2]=f+1}c[m>>2]=If(f)|0;if((c[m>>2]|0)>10|(c[m>>2]|0)<3){y=c[x>>2]|0;i=z;return y|0}if((a[(c[y>>2]|0)+((c[m>>2]|0)-1)>>0]|0)==115){a[(c[y>>2]|0)+((c[m>>2]|0)-1)>>0]=0;c[m>>2]=(c[m>>2]|0)+-1}HO(c[w>>2]|0);c[x>>2]=0;h[o>>3]=+h[n>>3]<0.0?-.5:.5;if((c[m>>2]|0)==3?(yQ(c[y>>2]|0,46496)|0)==0:0){A=+h[n>>3]*864.0e5+ +h[o>>3];v=+N(A)>=1.0?A>0.0?~~+$(+M(A/4294967296.0),4294967295.0)>>>0:~~+Z((A-+(~~A>>>0))/4294967296.0)>>>0:0;y=c[w>>2]|0;u=y;v=gR(c[u>>2]|0,c[u+4>>2]|0,~~A>>>0|0,v|0)|0;c[y>>2]=v;c[y+4>>2]=C}else s=54;do if((s|0)==54){if((c[m>>2]|0)==4?(yQ(c[y>>2]|0,46500)|0)==0:0){A=+h[n>>3]*36.0e5+ +h[o>>3];v=+N(A)>=1.0?A>0.0?~~+$(+M(A/4294967296.0),4294967295.0)>>>0:~~+Z((A-+(~~A>>>0))/4294967296.0)>>>0:0;y=c[w>>2]|0;u=y;v=gR(c[u>>2]|0,c[u+4>>2]|0,~~A>>>0|0,v|0)|0;c[y>>2]=v;c[y+4>>2]=C;break}if((c[m>>2]|0)==6?(yQ(c[y>>2]|0,46505)|0)==0:0){A=+h[n>>3]*6.0e4+ +h[o>>3];v=+N(A)>=1.0?A>0.0?~~+$(+M(A/4294967296.0),4294967295.0)>>>0:~~+Z((A-+(~~A>>>0))/4294967296.0)>>>0:0;y=c[w>>2]|0;u=y;v=gR(c[u>>2]|0,c[u+4>>2]|0,~~A>>>0|0,v|0)|0;c[y>>2]=v;c[y+4>>2]=C;break}if((c[m>>2]|0)==6?(yQ(c[y>>2]|0,46512)|0)==0:0){A=+h[n>>3]*1.0e3+ +h[o>>3];v=+N(A)>=1.0?A>0.0?~~+$(+M(A/4294967296.0),4294967295.0)>>>0:~~+Z((A-+(~~A>>>0))/4294967296.0)>>>0:0;y=c[w>>2]|0;u=y;v=gR(c[u>>2]|0,c[u+4>>2]|0,~~A>>>0|0,v|0)|0;c[y>>2]=v;c[y+4>>2]=C;break}if((c[m>>2]|0)==5?(yQ(c[y>>2]|0,46485)|0)==0:0){IO(c[w>>2]|0);y=(c[w>>2]|0)+12|0;c[y>>2]=(c[y>>2]|0)+~~+h[n>>3];y=c[(c[w>>2]|0)+12>>2]|0;c[p>>2]=(((c[(c[w>>2]|0)+12>>2]|0)>0?y-1|0:y-12|0)|0)/12|0;y=(c[w>>2]|0)+8|0;c[y>>2]=(c[y>>2]|0)+(c[p>>2]|0);y=(c[w>>2]|0)+12|0;c[y>>2]=(c[y>>2]|0)-((c[p>>2]|0)*12|0);a[(c[w>>2]|0)+42>>0]=0;HO(c[w>>2]|0);c[q>>2]=~~+h[n>>3];if(!(+(c[q>>2]|0)!=+h[n>>3]))break;A=(+h[n>>3]-+(c[q>>2]|0))*30.0*864.0e5+ +h[o>>3];v=+N(A)>=1.0?A>0.0?~~+$(+M(A/4294967296.0),4294967295.0)>>>0:~~+Z((A-+(~~A>>>0))/4294967296.0)>>>0:0;y=c[w>>2]|0;u=y;v=gR(c[u>>2]|0,c[u+4>>2]|0,~~A>>>0|0,v|0)|0;c[y>>2]=v;c[y+4>>2]=C;break}if((c[m>>2]|0)==4?(yQ(c[y>>2]|0,46491)|0)==0:0){c[r>>2]=~~+h[n>>3];IO(c[w>>2]|0);y=(c[w>>2]|0)+8|0;c[y>>2]=(c[y>>2]|0)+(c[r>>2]|0);a[(c[w>>2]|0)+42>>0]=0;HO(c[w>>2]|0);if(!(+(c[r>>2]|0)!=+h[n>>3]))break;A=(+h[n>>3]-+(c[r>>2]|0))*365.0*864.0e5+ +h[o>>3];v=+N(A)>=1.0?A>0.0?~~+$(+M(A/4294967296.0),4294967295.0)>>>0:~~+Z((A-+(~~A>>>0))/4294967296.0)>>>0:0;y=c[w>>2]|0;u=y;v=gR(c[u>>2]|0,c[u+4>>2]|0,~~A>>>0|0,v|0)|0;c[y>>2]=v;c[y+4>>2]=C;break}c[x>>2]=1}while(0);PO(c[w>>2]|0);y=c[x>>2]|0;i=z;return y|0}default:{y=c[x>>2]|0;i=z;return y|0}}return 0}function OO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+176|0;g=q+96|0;f=q+164|0;j=q+160|0;k=q+156|0;o=q+48|0;p=q;n=q+152|0;m=q+108|0;l=q+104|0;c[f>>2]=b;c[j>>2]=d;c[k>>2]=e;d=m;e=d+44|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));d=o;b=c[f>>2]|0;e=d+48|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(e|0));IO(o);if((c[o+8>>2]|0)>=1971?(c[o+8>>2]|0)<2038:0){c[l>>2]=~~(+h[o+32>>3]+.5);h[o+32>>3]=+(c[l>>2]|0)}else{c[o+8>>2]=2e3;c[o+12>>2]=1;c[o+16>>2]=1;c[o+20>>2]=0;c[o+24>>2]=0;h[o+32>>3]=0.0}c[o+28>>2]=0;a[o+42>>0]=0;HO(o);l=o;l=pR(c[l>>2]|0,c[l+4>>2]|0,1e3,0)|0;l=fR(l|0,C|0,413362496,49)|0;c[n>>2]=l;if(TO(n,m)|0){je(c[j>>2]|0,46539,-1);c[c[k>>2]>>2]=1;o=g;c[o>>2]=0;c[o+4>>2]=0;o=g;p=o;p=c[p>>2]|0;o=o+4|0;o=c[o>>2]|0;C=o;i=q;return p|0}else{c[p+8>>2]=(c[m+20>>2]|0)+1900;c[p+12>>2]=(c[m+16>>2]|0)+1;c[p+16>>2]=c[m+12>>2];c[p+20>>2]=c[m+8>>2];c[p+24>>2]=c[m+4>>2];h[p+32>>3]=+(c[m>>2]|0);a[p+40>>0]=1;a[p+41>>0]=1;a[p+42>>0]=0;a[p+43>>0]=0;HO(p);c[c[k>>2]>>2]=0;n=p;p=o;p=fR(c[n>>2]|0,c[n+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0)|0;o=g;c[o>>2]=p;c[o+4>>2]=C;o=g;p=o;p=c[p>>2]|0;o=o+4|0;o=c[o>>2]|0;C=o;i=q;return p|0}return 0}function PO(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;a[(c[e>>2]|0)+40>>0]=0;a[(c[e>>2]|0)+41>>0]=0;a[(c[e>>2]|0)+43>>0]=0;i=d;return}function QO(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+64|0;p=q+24|0;r=q+16|0;f=q+48|0;g=q+44|0;j=q+40|0;k=q+36|0;l=q+32|0;o=q+28|0;m=q+8|0;n=q;c[g>>2]=b;c[j>>2]=e;h[m>>3]=0.0;b=c[g>>2]|0;c[r>>2]=k;c[r+4>>2]=l;if((RO(b,46519,r)|0)!=2){c[f>>2]=1;r=c[f>>2]|0;i=q;return r|0}c[g>>2]=(c[g>>2]|0)+5;if((a[c[g>>2]>>0]|0)==58){c[g>>2]=(c[g>>2]|0)+1;r=c[g>>2]|0;c[p>>2]=o;if((RO(r,46527,p)|0)!=1){c[f>>2]=1;r=c[f>>2]|0;i=q;return r|0}c[g>>2]=(c[g>>2]|0)+2;if((a[c[g>>2]>>0]|0)==46?(d[19267+(d[(c[g>>2]|0)+1>>0]|0)>>0]&4|0)!=0:0){h[n>>3]=1.0;c[g>>2]=(c[g>>2]|0)+1;while(1){if(!(d[19267+(d[c[g>>2]>>0]|0)>>0]&4))break;h[m>>3]=+h[m>>3]*10.0+ +(a[c[g>>2]>>0]|0)-48.0;h[n>>3]=+h[n>>3]*10.0;c[g>>2]=(c[g>>2]|0)+1}h[m>>3]=+h[m>>3]/+h[n>>3]}}else c[o>>2]=0;a[(c[j>>2]|0)+42>>0]=0;a[(c[j>>2]|0)+41>>0]=1;c[(c[j>>2]|0)+20>>2]=c[k>>2];c[(c[j>>2]|0)+24>>2]=c[l>>2];h[(c[j>>2]|0)+32>>3]=+(c[o>>2]|0)+ +h[m>>3];if(SO(c[g>>2]|0,c[j>>2]|0)|0){c[f>>2]=1;r=c[f>>2]|0;i=q;return r|0}else{a[(c[j>>2]|0)+43>>0]=(c[(c[j>>2]|0)+28>>2]|0)!=0?1:0;c[f>>2]=0;r=c[f>>2]|0;i=q;return r|0}return 0}function RO(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;j=s+28|0;k=s+24|0;m=s+8|0;r=s+4|0;p=s+36|0;l=s+35|0;o=s+34|0;q=s;n=s+32|0;c[j>>2]=f;c[k>>2]=g;c[r>>2]=0;c[m>>2]=h;a:while(1){a[l>>0]=(a[c[k>>2]>>0]|0)-48;a[o>>0]=(a[(c[k>>2]|0)+1>>0]|0)-48;c[q>>2]=0;b[n>>1]=b[17286+((a[(c[k>>2]|0)+2>>0]|0)-97<<1)>>1]|0;a[p>>0]=a[(c[k>>2]|0)+3>>0]|0;c[q>>2]=0;while(1){g=a[l>>0]|0;a[l>>0]=g+-1<<24>>24;if(!(g<<24>>24))break;if(!(d[19267+(d[c[j>>2]>>0]|0)>>0]&4)){j=11;break a}c[q>>2]=((c[q>>2]|0)*10|0)+(a[c[j>>2]>>0]|0)-48;c[j>>2]=(c[j>>2]|0)+1}if((c[q>>2]|0)<(a[o>>0]|0)){j=11;break}if((c[q>>2]|0)>(e[n>>1]|0)){j=11;break}if((a[p>>0]|0)!=0?(a[p>>0]|0)!=(a[c[j>>2]>>0]|0):0){j=11;break}f=c[q>>2]|0;h=(c[m>>2]|0)+(4-1)&~(4-1);g=c[h>>2]|0;c[m>>2]=h+4;c[g>>2]=f;c[j>>2]=(c[j>>2]|0)+1;c[r>>2]=(c[r>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+4;if(!(a[p>>0]|0)){j=11;break}}if((j|0)==11){i=s;return c[r>>2]|0}return 0}function SO(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;n=p;f=p+32|0;g=p+28|0;h=p+24|0;m=p+20|0;k=p+16|0;l=p+12|0;j=p+8|0;c[g>>2]=b;c[h>>2]=e;c[m>>2]=0;while(1){if(!(d[19267+(d[c[g>>2]>>0]|0)>>0]&1))break;c[g>>2]=(c[g>>2]|0)+1}c[(c[h>>2]|0)+28>>2]=0;c[j>>2]=a[c[g>>2]>>0];do if((c[j>>2]|0)==45){c[m>>2]=-1;o=11}else{if((c[j>>2]|0)==43){c[m>>2]=1;o=11;break}if((c[j>>2]|0)==90|(c[j>>2]|0)==122){c[g>>2]=(c[g>>2]|0)+1;break}c[f>>2]=(c[j>>2]|0)!=0&1;o=c[f>>2]|0;i=p;return o|0}while(0);do if((o|0)==11){c[g>>2]=(c[g>>2]|0)+1;o=c[g>>2]|0;c[n>>2]=k;c[n+4>>2]=l;if((RO(o,46531,n)|0)==2){c[g>>2]=(c[g>>2]|0)+5;o=_(c[m>>2]|0,(c[l>>2]|0)+((c[k>>2]|0)*60|0)|0)|0;c[(c[h>>2]|0)+28>>2]=o;break}c[f>>2]=1;o=c[f>>2]|0;i=p;return o|0}while(0);while(1){if(!(d[19267+(d[c[g>>2]>>0]|0)>>0]&1))break;c[g>>2]=(c[g>>2]|0)+1}a[(c[h>>2]|0)+44>>0]=1;c[f>>2]=(a[c[g>>2]>>0]|0)!=0&1;o=c[f>>2]|0;i=p;return o|0}function TO(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;h=g+12|0;d=g+8|0;f=g+4|0;e=g;c[h>>2]=a;c[d>>2]=b;a=Kb(c[h>>2]|0)|0;c[e>>2]=a;c[e>>2]=(c[69]|0)!=0?0:a;if(c[e>>2]|0){d=c[d>>2]|0;b=c[e>>2]|0;a=d+44|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(a|0))}c[f>>2]=(c[e>>2]|0)==0&1;i=g;return c[f>>2]|0}function UO(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;f=o;g=o+36|0;h=o+32|0;j=o+28|0;m=o+24|0;l=o+20|0;k=o+16|0;n=o+12|0;c[h>>2]=b;c[j>>2]=e;if((a[c[h>>2]>>0]|0)==45){c[h>>2]=(c[h>>2]|0)+1;c[n>>2]=1}else c[n>>2]=0;b=c[h>>2]|0;c[f>>2]=m;c[f+4>>2]=l;c[f+8>>2]=k;if((RO(b,46566,f)|0)!=3){c[g>>2]=1;n=c[g>>2]|0;i=o;return n|0}c[h>>2]=(c[h>>2]|0)+10;while(1){if(d[19267+(d[c[h>>2]>>0]|0)>>0]&1)f=1;else f=84==(d[c[h>>2]>>0]|0);e=c[h>>2]|0;if(!f)break;c[h>>2]=e+1}do if(QO(e,c[j>>2]|0)|0){if(!(a[c[h>>2]>>0]|0)){a[(c[j>>2]|0)+41>>0]=0;break}c[g>>2]=1;n=c[g>>2]|0;i=o;return n|0}while(0);a[(c[j>>2]|0)+42>>0]=0;a[(c[j>>2]|0)+40>>0]=1;m=c[m>>2]|0;c[(c[j>>2]|0)+8>>2]=(c[n>>2]|0)!=0?0-m|0:m;c[(c[j>>2]|0)+12>>2]=c[l>>2];c[(c[j>>2]|0)+16>>2]=c[k>>2];if(a[(c[j>>2]|0)+43>>0]|0)HO(c[j>>2]|0);c[g>>2]=0;n=c[g>>2]|0;i=o;return n|0}function VO(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;e=f+4|0;d=f;c[b>>2]=a;c[d>>2]=(c[(c[b>>2]|0)+12>>2]|0)+136;a=c[d>>2]|0;if((c[a>>2]|0)==0&(c[a+4>>2]|0)==0?(c[e>>2]=IH(c[c[(c[c[b>>2]>>2]|0)+32>>2]>>2]|0,c[d>>2]|0)|0,(c[e>>2]|0)!=0):0){e=c[d>>2]|0;c[e>>2]=0;c[e+4>>2]=0}e=c[d>>2]|0;C=c[e+4>>2]|0;i=f;return c[e>>2]|0}function WO(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+64|0;g=v+52|0;h=v+48|0;j=v+44|0;u=v+40|0;t=v+36|0;r=v+32|0;m=v+28|0;n=v+24|0;k=v+20|0;l=v+16|0;q=v+12|0;s=v+8|0;o=v+4|0;p=v;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;c[k>>2]=0;c[l>>2]=0;if((fe(c[c[j>>2]>>2]|0)|0)==5){i=v;return}c[u>>2]=ae(c[c[j>>2]>>2]|0)|0;if(!(c[u>>2]|0)){i=v;return}c[r>>2]=be(c[c[j>>2]>>2]|0)|0;a:do if((c[h>>2]|0)!=1){b=ae(c[(c[j>>2]|0)+4>>2]|0)|0;c[t>>2]=b;if(!b){i=v;return}c[s>>2]=c[t>>2];c[q>>2]=0;while(1){if(!(a[c[s>>2]>>0]|0))break;b=c[s>>2]|0;c[s>>2]=b+1;b:do if((d[b>>0]|0)>=192)while(1){if((d[c[s>>2]>>0]&192|0)!=128)break b;c[s>>2]=(c[s>>2]|0)+1}while(0);c[q>>2]=(c[q>>2]|0)+1}if((c[q>>2]|0)>0){f=c[g>>2]|0;b=c[q>>2]|0;b=rR(b|0,((b|0)<0)<<31>>31|0,5,0)|0;c[l>>2]=GP(f,b,C)|0;if(!(c[l>>2]|0)){i=v;return}c[k>>2]=(c[l>>2]|0)+(c[q>>2]<<2);c[s>>2]=c[t>>2];c[q>>2]=0;while(1){if(!(a[c[s>>2]>>0]|0))break a;c[(c[l>>2]|0)+(c[q>>2]<<2)>>2]=c[s>>2];b=c[s>>2]|0;c[s>>2]=b+1;c:do if((d[b>>0]|0)>=192)while(1){if((d[c[s>>2]>>0]&192|0)!=128)break c;c[s>>2]=(c[s>>2]|0)+1}while(0);a[(c[k>>2]|0)+(c[q>>2]|0)>>0]=(c[s>>2]|0)-(c[(c[l>>2]|0)+(c[q>>2]<<2)>>2]|0);c[q>>2]=(c[q>>2]|0)+1}}}else{c[q>>2]=1;c[k>>2]=47041;c[l>>2]=9964;c[t>>2]=0}while(0);if((c[q>>2]|0)>0){c[m>>2]=ve(c[g>>2]|0)|0;d:do if((c[m>>2]&1|0)!=0&(c[r>>2]|0)>0)do{c[o>>2]=0;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[q>>2]|0))break;c[o>>2]=d[(c[k>>2]|0)+(c[n>>2]|0)>>0];if((c[o>>2]|0)<=(c[r>>2]|0)?(vQ(c[u>>2]|0,c[(c[l>>2]|0)+(c[n>>2]<<2)>>2]|0,c[o>>2]|0)|0)==0:0)break;c[n>>2]=(c[n>>2]|0)+1}if((c[n>>2]|0)>=(c[q>>2]|0))break d;c[u>>2]=(c[u>>2]|0)+(c[o>>2]|0);c[r>>2]=(c[r>>2]|0)-(c[o>>2]|0)}while((c[r>>2]|0)>0);while(0);e:do if((c[m>>2]&2|0)!=0&(c[r>>2]|0)>0)do{c[p>>2]=0;c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[q>>2]|0))break;c[p>>2]=d[(c[k>>2]|0)+(c[n>>2]|0)>>0];if((c[p>>2]|0)<=(c[r>>2]|0)?(vQ((c[u>>2]|0)+((c[r>>2]|0)-(c[p>>2]|0))|0,c[(c[l>>2]|0)+(c[n>>2]<<2)>>2]|0,c[p>>2]|0)|0)==0:0)break;c[n>>2]=(c[n>>2]|0)+1}if((c[n>>2]|0)>=(c[q>>2]|0))break e;c[r>>2]=(c[r>>2]|0)-(c[p>>2]|0)}while((c[r>>2]|0)>0);while(0);if(c[t>>2]|0)Kd(c[l>>2]|0)}ne(c[g>>2]|0,c[u>>2]|0,c[r>>2]|0,-1);i=v;return}function XO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;e=n+24|0;f=n+20|0;g=n+16|0;h=n+12|0;k=n+8|0;j=n+4|0;l=n;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;a=(ve(c[e>>2]|0)|0)==0;c[k>>2]=a?0:-1;c[l>>2]=HP(c[e>>2]|0)|0;c[j>>2]=0;if((fe(c[c[g>>2]>>2]|0)|0)==5){i=n;return}c[h>>2]=1;while(1){if((c[h>>2]|0)>=(c[f>>2]|0))break;if((fe(c[(c[g>>2]|0)+(c[h>>2]<<2)>>2]|0)|0)==5){m=9;break}a=cI(c[(c[g>>2]|0)+(c[j>>2]<<2)>>2]|0,c[(c[g>>2]|0)+(c[h>>2]<<2)>>2]|0,c[l>>2]|0)|0;if((a^c[k>>2]|0)>=0)c[j>>2]=c[h>>2];c[h>>2]=(c[h>>2]|0)+1}if((m|0)==9){i=n;return}pe(c[e>>2]|0,c[(c[g>>2]|0)+(c[j>>2]<<2)>>2]|0);i=n;return}function YO(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+28|0;f=n+20|0;k=n+16|0;l=n+12|0;j=n+8|0;h=n+4|0;m=n;c[g>>2]=a;c[n+24>>2]=d;c[f>>2]=e;c[k>>2]=c[c[f>>2]>>2];c[l>>2]=xe(c[g>>2]|0,40)|0;if(!(c[l>>2]|0)){i=n;return}a=(fe(c[c[f>>2]>>2]|0)|0)==5;f=(b[(c[l>>2]|0)+8>>1]|0)!=0;if(a){if(!f){i=n;return}IP(c[g>>2]|0);i=n;return}d=c[g>>2]|0;if(!f){m=we(d)|0;c[(c[l>>2]|0)+32>>2]=m;gh(c[l>>2]|0,c[k>>2]|0)|0;i=n;return}c[m>>2]=HP(d)|0;c[j>>2]=(ve(c[g>>2]|0)|0)!=0&1;c[h>>2]=cI(c[l>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;if(!((c[j>>2]|0)!=0&(c[h>>2]|0)<0)?!((c[j>>2]|0)==0&(c[h>>2]|0)>0):0){IP(c[g>>2]|0);i=n;return}gh(c[l>>2]|0,c[k>>2]|0)|0;i=n;return}function ZO(a){a=a|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=xe(c[d>>2]|0,0)|0;if(!(c[e>>2]|0)){i=f;return}if(b[(c[e>>2]|0)+8>>1]|0)pe(c[d>>2]|0,c[e>>2]|0);Ug(c[e>>2]|0);i=f;return}function _O(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+12|0;h=g+4|0;f=g;c[e>>2]=a;c[g+8>>2]=b;c[h>>2]=d;c[f>>2]=0;switch(fe(c[c[h>>2]>>2]|0)|0){case 1:{c[f>>2]=40517;break}case 3:{c[f>>2]=47031;break}case 2:{c[f>>2]=40512;break}case 4:{c[f>>2]=47036;break}default:c[f>>2]=40525}ne(c[e>>2]|0,c[f>>2]|0,-1,0);i=g;return}function $O(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+8|0;j=l+4|0;k=l;c[g>>2]=b;c[l+12>>2]=e;c[h>>2]=f;switch(fe(c[c[h>>2]>>2]|0)|0){case 2:case 1:case 4:{ke(c[g>>2]|0,be(c[c[h>>2]>>2]|0)|0);i=l;return}case 3:{c[k>>2]=ae(c[c[h>>2]>>2]|0)|0;if(!(c[k>>2]|0)){i=l;return}c[j>>2]=0;a:while(1){if(!(a[c[k>>2]>>0]|0))break;c[j>>2]=(c[j>>2]|0)+1;b=c[k>>2]|0;c[k>>2]=b+1;if((d[b>>0]|0)<192)continue;while(1){if((d[c[k>>2]>>0]&192|0)!=128)continue a;c[k>>2]=(c[k>>2]|0)+1}}ke(c[g>>2]|0,c[j>>2]|0);i=l;return}default:{me(c[g>>2]|0);i=l;return}}}function aP(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;f=q+40|0;g=q+32|0;o=q+28|0;p=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;n=q+8|0;h=q+4|0;j=q;c[f>>2]=a;c[q+36>>2]=b;c[g>>2]=e;c[h>>2]=1;c[m>>2]=fe(c[c[g>>2]>>2]|0)|0;c[n>>2]=fe(c[(c[g>>2]|0)+4>>2]|0)|0;if((c[m>>2]|0)==5|(c[n>>2]|0)==5){i=q;return}c[k>>2]=be(c[c[g>>2]>>2]|0)|0;c[l>>2]=be(c[(c[g>>2]|0)+4>>2]|0)|0;b=c[c[g>>2]>>2]|0;if((c[m>>2]|0)==4&(c[n>>2]|0)==4){c[o>>2]=$d(b)|0;c[p>>2]=$d(c[(c[g>>2]|0)+4>>2]|0)|0;c[j>>2]=0}else{c[o>>2]=ae(b)|0;c[p>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;c[j>>2]=1}a:while(1){if((c[l>>2]|0)>(c[k>>2]|0))break;if(!(vQ(c[o>>2]|0,c[p>>2]|0,c[l>>2]|0)|0))break;c[h>>2]=(c[h>>2]|0)+1;while(1){c[k>>2]=(c[k>>2]|0)+-1;c[o>>2]=(c[o>>2]|0)+1;if(!(c[j>>2]|0))continue a;if(((d[c[o>>2]>>0]|0)&192|0)!=128)continue a}}if((c[l>>2]|0)>(c[k>>2]|0))c[h>>2]=0;ke(c[f>>2]|0,c[h>>2]|0);i=q;return}function bP(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;m=r+44|0;g=r+40|0;h=r+36|0;p=r+32|0;q=r+28|0;j=r+24|0;l=r+20|0;n=r+8|0;o=r;k=r+16|0;c[m>>2]=b;c[g>>2]=e;c[h>>2]=f;c[k>>2]=0;if((fe(c[(c[h>>2]|0)+4>>2]|0)|0)==5){i=r;return}if((c[g>>2]|0)==3?(fe(c[(c[h>>2]|0)+8>>2]|0)|0)==5:0){i=r;return}c[l>>2]=fe(c[c[h>>2]>>2]|0)|0;b=de(c[(c[h>>2]|0)+4>>2]|0)|0;e=n;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;e=c[c[h>>2]>>2]|0;a:do if((c[l>>2]|0)==4){c[j>>2]=be(e)|0;c[p>>2]=$d(c[c[h>>2]>>2]|0)|0;if(!(c[p>>2]|0)){i=r;return}}else{c[p>>2]=ae(e)|0;if(!(c[p>>2]|0)){i=r;return}c[j>>2]=0;if((c[n+4>>2]|0)<0){c[q>>2]=c[p>>2];while(1){if(!(a[c[q>>2]>>0]|0))break a;b=c[q>>2]|0;c[q>>2]=b+1;b:do if((d[b>>0]|0)>=192)while(1){if((d[c[q>>2]>>0]&192|0)!=128)break b;c[q>>2]=(c[q>>2]|0)+1}while(0);c[j>>2]=(c[j>>2]|0)+1}}}while(0);if((c[g>>2]|0)==3){g=de(c[(c[h>>2]|0)+8>>2]|0)|0;h=o;c[h>>2]=g;c[h+4>>2]=((g|0)<0)<<31>>31;if((c[o+4>>2]|0)<0){g=o;g=fR(0,0,c[g>>2]|0,c[g+4>>2]|0)|0;h=o;c[h>>2]=g;c[h+4>>2]=C;c[k>>2]=1}}else{g=c[(we(c[m>>2]|0)|0)+88>>2]|0;h=o;c[h>>2]=g;c[h+4>>2]=((g|0)<0)<<31>>31}do if((c[n+4>>2]|0)<0){g=c[j>>2]|0;h=n;g=gR(c[h>>2]|0,c[h+4>>2]|0,g|0,((g|0)<0)<<31>>31|0)|0;h=n;c[h>>2]=g;c[h+4>>2]=C;if((c[n+4>>2]|0)<0){f=n;g=o;f=gR(c[g>>2]|0,c[g+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;g=C;b=o;c[b>>2]=f;c[b+4>>2]=g;b=(c[o+4>>2]|0)<0;h=o;c[h>>2]=b?0:f;c[h+4>>2]=b?0:g;h=n;c[h>>2]=0;c[h+4>>2]=0}}else{h=n;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0){g=n;g=gR(c[g>>2]|0,c[g+4>>2]|0,-1,-1)|0;h=n;c[h>>2]=g;c[h+4>>2]=C;break}h=o;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0){g=o;g=gR(c[g>>2]|0,c[g+4>>2]|0,-1,-1)|0;h=o;c[h>>2]=g;c[h+4>>2]=C}}while(0);if((c[k>>2]|0)!=0?(h=o,k=n,h=fR(c[k>>2]|0,c[k+4>>2]|0,c[h>>2]|0,c[h+4>>2]|0)|0,k=n,c[k>>2]=h,c[k+4>>2]=C,(c[n+4>>2]|0)<0):0){h=n;k=o;h=gR(c[k>>2]|0,c[k+4>>2]|0,c[h>>2]|0,c[h+4>>2]|0)|0;k=o;c[k>>2]=h;c[k+4>>2]=C;k=n;c[k>>2]=0;c[k+4>>2]=0}if((c[l>>2]|0)==4){h=n;l=o;l=gR(c[h>>2]|0,c[h+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0;h=C;q=c[j>>2]|0;k=((q|0)<0)<<31>>31;if((h|0)>(k|0)|(h|0)==(k|0)&l>>>0>q>>>0){l=c[j>>2]|0;j=n;j=fR(l|0,((l|0)<0)<<31>>31|0,c[j>>2]|0,c[j+4>>2]|0)|0;l=C;k=o;c[k>>2]=j;c[k+4>>2]=l;k=(c[o+4>>2]|0)<0;q=o;c[q>>2]=k?0:j;c[q+4>>2]=k?0:l}q=o;he(c[m>>2]|0,(c[p>>2]|0)+(c[n>>2]|0)|0,c[q>>2]|0,c[q+4>>2]|0,-1);i=r;return}while(1){l=n;e=c[p>>2]|0;if(!((d[c[p>>2]>>0]|0)!=0?(c[l>>2]|0)!=0|(c[l+4>>2]|0)!=0:0))break;c[p>>2]=e+1;c:do if((d[e>>0]|0)>=192)while(1){if((d[c[p>>2]>>0]&192|0)!=128)break c;c[p>>2]=(c[p>>2]|0)+1}while(0);k=n;k=gR(c[k>>2]|0,c[k+4>>2]|0,-1,-1)|0;l=n;c[l>>2]=k;c[l+4>>2]=C}c[q>>2]=e;while(1){n=o;if(!((d[c[q>>2]>>0]|0)!=0?(c[n>>2]|0)!=0|(c[n+4>>2]|0)!=0:0))break;n=c[q>>2]|0;c[q>>2]=n+1;d:do if((d[n>>0]|0)>=192)while(1){if((d[c[q>>2]>>0]&192|0)!=128)break d;c[q>>2]=(c[q>>2]|0)+1}while(0);l=o;l=gR(c[l>>2]|0,c[l+4>>2]|0,-1,-1)|0;n=o;c[n>>2]=l;c[n+4>>2]=C}q=(c[q>>2]|0)-(c[p>>2]|0)|0;oe(c[m>>2]|0,c[p>>2]|0,q,((q|0)<0)<<31>>31,-1,1);i=r;return}function cP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+80|0;m=p;f=p+64|0;g=p+60|0;h=p+56|0;n=p+44|0;l=p+16|0;o=p+12|0;k=p+8|0;j=p+4|0;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[j>>2]=we(c[f>>2]|0)|0;if((c[g>>2]|0)<1){i=p;return}b=ae(c[c[h>>2]>>2]|0)|0;c[o>>2]=b;if(!b){i=p;return}c[n>>2]=(c[g>>2]|0)-1;c[n+4>>2]=0;c[n+8>>2]=(c[h>>2]|0)+4;cg(l,c[j>>2]|0,0,0,c[(c[j>>2]|0)+88>>2]|0);a[l+25>>0]=2;o=c[o>>2]|0;c[m>>2]=n;$z(l,o,m);c[k>>2]=c[l+12>>2];n=c[f>>2]|0;o=eg(l)|0;ne(n,o,c[k>>2]|0,170);i=p;return}function dP(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0;h=i;i=i+16|0;f=h+12|0;j=h+4|0;g=h;c[f>>2]=a;c[h+8>>2]=b;c[j>>2]=e;c[g>>2]=ae(c[c[j>>2]>>2]|0)|0;if(!(c[g>>2]|0)){i=h;return}if(!(d[c[g>>2]>>0]|0)){i=h;return}j=c[f>>2]|0;ke(j,jC(g)|0);i=h;return}function eP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;f=o+32|0;g=o+28|0;h=o+24|0;m=o+20|0;n=o+16|0;k=o+12|0;l=o;j=o+8|0;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;b=(c[g>>2]<<2)+1|0;b=Jd(b,((b|0)<0)<<31>>31)|0;c[m>>2]=b;c[n>>2]=b;if(!(c[m>>2]|0)){te(c[f>>2]|0);i=o;return}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[g>>2]|0))break;p=ee(c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)|0;b=C;e=l;c[e>>2]=p;c[e+4>>2]=b;e=l;d=c[e+4>>2]|0;e=(c[l+4>>2]|0)<0|((d|0)>0|(d|0)==0&(c[e>>2]|0)>>>0>1114111);d=l;c[d>>2]=e?65533:p;c[d+4>>2]=e?0:b;c[j>>2]=c[l>>2]&2097151;d=c[j>>2]|0;do if((c[j>>2]|0)>>>0>=128){e=c[j>>2]|0;if(d>>>0<2048){b=c[n>>2]|0;c[n>>2]=b+1;a[b>>0]=192+(e>>>6&31);b=128+(c[j>>2]&63)&255;p=c[n>>2]|0;c[n>>2]=p+1;a[p>>0]=b;break}d=c[j>>2]|0;if(e>>>0<65536){p=c[n>>2]|0;c[n>>2]=p+1;a[p>>0]=224+(d>>>12&15);p=128+((c[j>>2]|0)>>>6&63)&255;b=c[n>>2]|0;c[n>>2]=b+1;a[b>>0]=p;b=128+(c[j>>2]&63)&255;p=c[n>>2]|0;c[n>>2]=p+1;a[p>>0]=b;break}else{b=c[n>>2]|0;c[n>>2]=b+1;a[b>>0]=240+(d>>>18&7);b=128+((c[j>>2]|0)>>>12&63)&255;p=c[n>>2]|0;c[n>>2]=p+1;a[p>>0]=b;p=128+((c[j>>2]|0)>>>6&63)&255;b=c[n>>2]|0;c[n>>2]=b+1;a[b>>0]=p;b=128+(c[j>>2]&63)&255;p=c[n>>2]|0;c[n>>2]=p+1;a[p>>0]=b;break}}else{p=c[n>>2]|0;c[n>>2]=p+1;a[p>>0]=d}while(0);c[k>>2]=(c[k>>2]|0)+1}p=(c[n>>2]|0)-(c[m>>2]|0)|0;oe(c[f>>2]|0,c[m>>2]|0,p,((p|0)<0)<<31>>31,148,1);i=o;return}function fP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0;k=i;i=i+32|0;e=k+24|0;f=k+16|0;g=k+8|0;j=k;c[e>>2]=a;c[k+20>>2]=b;c[f>>2]=d;switch(fe(c[c[f>>2]>>2]|0)|0){case 1:{j=g;c[j>>2]=ee(c[c[f>>2]>>2]|0)|0;c[j+4>>2]=C;do if((c[g+4>>2]|0)<0){j=g;if(!((c[j>>2]|0)==0?(c[j+4>>2]|0)==-2147483648:0)){a=g;a=fR(0,0,c[a>>2]|0,c[a+4>>2]|0)|0;j=g;c[j>>2]=a;c[j+4>>2]=C;break}je(c[e>>2]|0,46986,-1);i=k;return}while(0);j=g;le(c[e>>2]|0,c[j>>2]|0,c[j+4>>2]|0);i=k;return}case 5:{me(c[e>>2]|0);i=k;return}default:{h[j>>3]=+ce(c[c[f>>2]>>2]|0);if(+h[j>>3]<0.0)h[j>>3]=-+h[j>>3];ie(c[e>>2]|0,+h[j>>3]);i=k;return}}}function gP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0;m=i;i=i+48|0;k=m+8|0;e=m+40|0;n=m+36|0;f=m+32|0;g=m+28|0;j=m;l=m+24|0;c[e>>2]=a;c[n>>2]=b;c[f>>2]=d;c[g>>2]=0;do if((c[n>>2]|0)==2)if(5==(fe(c[(c[f>>2]|0)+4>>2]|0)|0)){i=m;return}else{n=de(c[(c[f>>2]|0)+4>>2]|0)|0;c[g>>2]=n;n=(c[g>>2]|0)>30?30:n;c[g>>2]=n;c[g>>2]=(c[g>>2]|0)<0?0:n;break}while(0);if((fe(c[c[f>>2]>>2]|0)|0)==5){i=m;return}h[j>>3]=+ce(c[c[f>>2]>>2]|0);do if((c[g>>2]|0)==0&+h[j>>3]>=0.0&+h[j>>3]<9223372036854775808.0){o=+h[j>>3]+.5;h[j>>3]=+(~~o>>>0>>>0)+4294967296.0*+((+N(o)>=1.0?o>0.0?~~+$(+M(o/4294967296.0),4294967295.0)>>>0:~~+Z((o-+(~~o>>>0))/4294967296.0)>>>0:0)|0)}else{if((c[g>>2]|0)==0&+h[j>>3]<0.0?-+h[j>>3]<9223372036854775808.0:0){o=-+h[j>>3]+.5;h[j>>3]=-(+(~~o>>>0>>>0)+4294967296.0*+((+N(o)>=1.0?o>0.0?~~+$(+M(o/4294967296.0),4294967295.0)>>>0:~~+Z((o-+(~~o>>>0))/4294967296.0)>>>0:0)|0));break}o=+h[j>>3];c[k>>2]=c[g>>2];h[k+8>>3]=o;c[l>>2]=Od(47026,k)|0;if(c[l>>2]|0){n=c[l>>2]|0;Ky(n,j,If(c[l>>2]|0)|0,1)|0;Kd(c[l>>2]|0);break}te(c[e>>2]|0);i=m;return}while(0);ie(c[e>>2]|0,+h[j>>3]);i=m;return}function hP(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;g=m+24|0;n=m+16|0;k=m+12|0;l=m+8|0;h=m+4|0;j=m;c[g>>2]=b;c[m+20>>2]=e;c[n>>2]=f;c[l>>2]=ae(c[c[n>>2]>>2]|0)|0;c[j>>2]=be(c[c[n>>2]>>2]|0)|0;if(!(c[l>>2]|0)){i=m;return}b=c[g>>2]|0;n=c[j>>2]|0;n=gR(n|0,((n|0)<0)<<31>>31|0,1,0)|0;c[k>>2]=GP(b,n,C)|0;if(!(c[k>>2]|0)){i=m;return}c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[j>>2]|0))break;a[(c[k>>2]|0)+(c[h>>2]|0)>>0]=a[(c[l>>2]|0)+(c[h>>2]|0)>>0]&~(d[19267+(d[(c[l>>2]|0)+(c[h>>2]|0)>>0]|0)>>0]&32);c[h>>2]=(c[h>>2]|0)+1}ne(c[g>>2]|0,c[k>>2]|0,c[j>>2]|0,148);i=m;return}function iP(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;g=m+24|0;n=m+16|0;k=m+12|0;l=m+8|0;h=m+4|0;j=m;c[g>>2]=b;c[m+20>>2]=e;c[n>>2]=f;c[l>>2]=ae(c[c[n>>2]>>2]|0)|0;c[j>>2]=be(c[c[n>>2]>>2]|0)|0;if(!(c[l>>2]|0)){i=m;return}b=c[g>>2]|0;n=c[j>>2]|0;n=gR(n|0,((n|0)<0)<<31>>31|0,1,0)|0;c[k>>2]=GP(b,n,C)|0;if(!(c[k>>2]|0)){i=m;return}c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[j>>2]|0))break;a[(c[k>>2]|0)+(c[h>>2]|0)>>0]=a[18477+(d[(c[l>>2]|0)+(c[h>>2]|0)>>0]|0)>>0]|0;c[h>>2]=(c[h>>2]|0)+1}ne(c[g>>2]|0,c[k>>2]|0,c[j>>2]|0,148);i=m;return}function jP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e+8|0;c[f>>2]=a;c[e+4>>2]=b;c[e>>2]=d;a=c[f>>2]|0;ne(a,jf()|0,-1,0);i=e;return}function kP(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;g=o+28|0;p=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;n=o+4|0;m=o;h=o+32|0;c[g>>2]=b;c[o+24>>2]=e;c[p>>2]=f;c[l>>2]=$d(c[c[p>>2]>>2]|0)|0;c[k>>2]=be(c[c[p>>2]>>2]|0)|0;f=c[g>>2]|0;b=c[k>>2]|0;b=rR(b|0,((b|0)<0)<<31>>31|0,2,0)|0;b=gR(b|0,C|0,1,0)|0;b=GP(f,b,C)|0;c[n>>2]=b;c[m>>2]=b;if(!(c[n>>2]|0)){i=o;return}c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[k>>2]|0))break;a[h>>0]=a[c[l>>2]>>0]|0;p=a[47010+((d[h>>0]|0)>>4&15)>>0]|0;b=c[m>>2]|0;c[m>>2]=b+1;a[b>>0]=p;b=a[47010+((d[h>>0]|0)&15)>>0]|0;p=c[m>>2]|0;c[m>>2]=p+1;a[p>>0]=b;c[j>>2]=(c[j>>2]|0)+1;c[l>>2]=(c[l>>2]|0)+1}a[c[m>>2]>>0]=0;ne(c[g>>2]|0,c[n>>2]|0,c[k>>2]<<1,148);i=o;return}function lP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+32|0;e=g+16|0;f=g;c[e>>2]=a;c[g+12>>2]=b;c[g+8>>2]=d;Sd(8,f);if((c[f+4>>2]|0)<0){d=f;d=fR(0,0,c[d>>2]|0,c[d+4>>2]&2147483647|0)|0;a=f;c[a>>2]=d;c[a+4>>2]=C}le(c[e>>2]|0,c[f>>2]|0,c[f+4>>2]|0);i=g;return}function mP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;e=h+16|0;j=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[h+12>>2]=b;c[j>>2]=d;a=de(c[c[j>>2]>>2]|0)|0;c[f>>2]=a;c[f>>2]=(c[f>>2]|0)<1?1:a;a=c[f>>2]|0;c[g>>2]=GP(c[e>>2]|0,a,((a|0)<0)<<31>>31)|0;if(!(c[g>>2]|0)){i=h;return}Sd(c[f>>2]|0,c[g>>2]|0);ge(c[e>>2]|0,c[g>>2]|0,c[f>>2]|0,148);i=h;return}function nP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+12|0;f=g+4|0;h=g;c[e>>2]=a;c[g+8>>2]=b;c[f>>2]=d;c[h>>2]=HP(c[e>>2]|0)|0;if(!(cI(c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+4>>2]|0,c[h>>2]|0)|0)){i=g;return}pe(c[e>>2]|0,c[c[f>>2]>>2]|0);i=g;return}function oP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e+8|0;c[f>>2]=a;c[e+4>>2]=b;c[e>>2]=d;a=c[f>>2]|0;ne(a,kf()|0,-1,0);i=e;return}function pP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e;g=e+4|0;c[e+12>>2]=a;c[e+8>>2]=b;c[g>>2]=d;a=de(c[c[g>>2]>>2]|0)|0;c[f>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;Rd(a,19255,f);i=e;return}function qP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+12|0;h=g+4|0;f=g;c[e>>2]=a;c[g+8>>2]=b;c[h>>2]=d;a=ae(c[c[h>>2]>>2]|0)|0;c[f>>2]=a;if(!a){i=g;return}h=c[e>>2]|0;ke(h,yd(c[f>>2]|0)|0);i=g;return}function rP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;g=e+12|0;h=e+4|0;f=e;c[g>>2]=a;c[e+8>>2]=b;c[h>>2]=d;c[f>>2]=de(c[c[h>>2]>>2]|0)|0;a=c[g>>2]|0;ne(a,Ad(c[f>>2]|0)|0,-1,0);i=e;return}function sP(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,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=i;i=i+144|0;s=y+32|0;r=y+24|0;g=y+80|0;j=y+72|0;p=y+16|0;q=y+8|0;w=y+84|0;x=y+68|0;v=y+64|0;o=y+60|0;k=y+56|0;l=y+52|0;m=y+48|0;n=y;u=y+44|0;t=y+40|0;c[g>>2]=b;c[y+76>>2]=e;c[j>>2]=f;switch(fe(c[c[j>>2]>>2]|0)|0){case 2:{h[p>>3]=+ce(c[c[j>>2]>>2]|0);h[r>>3]=+h[p>>3];Qd(50,w,29142,r)|0;Ky(w,q,20,1)|0;if(+h[p>>3]!=+h[q>>3]){h[s>>3]=+h[p>>3];Qd(50,w,47003,s)|0}ne(c[g>>2]|0,w,-1,-1);i=y;return}case 1:{pe(c[g>>2]|0,c[c[j>>2]>>2]|0);i=y;return}case 4:{c[x>>2]=0;c[v>>2]=$d(c[c[j>>2]>>2]|0)|0;c[o>>2]=be(c[c[j>>2]>>2]|0)|0;u=c[g>>2]|0;w=c[o>>2]|0;c[x>>2]=GP(u,gR(rR(2,0,w|0,((w|0)<0)<<31>>31|0)|0,C|0,4,0)|0,C)|0;if(!(c[x>>2]|0)){i=y;return}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[o>>2]|0))break;a[(c[x>>2]|0)+((c[k>>2]<<1)+2)>>0]=a[47010+(a[(c[v>>2]|0)+(c[k>>2]|0)>>0]>>4&15)>>0]|0;a[(c[x>>2]|0)+((c[k>>2]<<1)+3)>>0]=a[47010+(a[(c[v>>2]|0)+(c[k>>2]|0)>>0]&15)>>0]|0;c[k>>2]=(c[k>>2]|0)+1}a[(c[x>>2]|0)+((c[o>>2]<<1)+2)>>0]=39;a[(c[x>>2]|0)+((c[o>>2]<<1)+3)>>0]=0; +a[c[x>>2]>>0]=88;a[(c[x>>2]|0)+1>>0]=39;ne(c[g>>2]|0,c[x>>2]|0,-1,-1);Kd(c[x>>2]|0);i=y;return}case 3:{c[u>>2]=ae(c[c[j>>2]>>2]|0)|0;if(!(c[u>>2]|0)){i=y;return}c[l>>2]=0;x=n;c[x>>2]=0;c[x+4>>2]=0;while(1){if(!(a[(c[u>>2]|0)+(c[l>>2]|0)>>0]|0))break;if((d[(c[u>>2]|0)+(c[l>>2]|0)>>0]|0)==39){w=n;w=gR(c[w>>2]|0,c[w+4>>2]|0,1,0)|0;x=n;c[x>>2]=w;c[x+4>>2]=C}c[l>>2]=(c[l>>2]|0)+1}w=c[g>>2]|0;v=c[l>>2]|0;x=n;x=gR(v|0,((v|0)<0)<<31>>31|0,c[x>>2]|0,c[x+4>>2]|0)|0;x=gR(x|0,C|0,3,0)|0;c[t>>2]=GP(w,x,C)|0;if(!(c[t>>2]|0)){i=y;return}a[c[t>>2]>>0]=39;c[l>>2]=0;c[m>>2]=1;while(1){if(!(a[(c[u>>2]|0)+(c[l>>2]|0)>>0]|0))break;w=a[(c[u>>2]|0)+(c[l>>2]|0)>>0]|0;x=c[m>>2]|0;c[m>>2]=x+1;a[(c[t>>2]|0)+x>>0]=w;if((d[(c[u>>2]|0)+(c[l>>2]|0)>>0]|0)==39){x=c[m>>2]|0;c[m>>2]=x+1;a[(c[t>>2]|0)+x>>0]=39}c[l>>2]=(c[l>>2]|0)+1}x=c[m>>2]|0;c[m>>2]=x+1;a[(c[t>>2]|0)+x>>0]=39;a[(c[t>>2]|0)+(c[m>>2]|0)>>0]=0;ne(c[g>>2]|0,c[t>>2]|0,c[m>>2]|0,148);i=y;return}default:{ne(c[g>>2]|0,40498,4,0);i=y;return}}}function tP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;g=e+12|0;f=e;c[g>>2]=a;c[e+8>>2]=b;c[e+4>>2]=d;c[f>>2]=we(c[g>>2]|0)|0;d=c[g>>2]|0;a=of(c[f>>2]|0)|0;le(d,a,C);i=e;return}function uP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;g=e+12|0;f=e;c[g>>2]=a;c[e+8>>2]=b;c[e+4>>2]=d;c[f>>2]=we(c[g>>2]|0)|0;a=c[g>>2]|0;ke(a,pf(c[f>>2]|0)|0);i=e;return}function vP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;g=e+12|0;f=e;c[g>>2]=a;c[e+8>>2]=b;c[e+4>>2]=d;c[f>>2]=we(c[g>>2]|0)|0;a=c[g>>2]|0;ke(a,qf(c[f>>2]|0)|0);i=e;return}function wP(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+80|0;p=w+64|0;g=w+56|0;v=w+52|0;n=w+48|0;o=w+44|0;u=w+40|0;s=w+36|0;l=w+32|0;m=w+28|0;k=w;j=w+24|0;q=w+20|0;r=w+16|0;t=w+12|0;h=w+8|0;c[p>>2]=b;c[w+60>>2]=e;c[g>>2]=f;c[v>>2]=ae(c[c[g>>2]>>2]|0)|0;if(!(c[v>>2]|0)){i=w;return}c[s>>2]=be(c[c[g>>2]>>2]|0)|0;c[n>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;if(!(c[n>>2]|0)){i=w;return}if(!(d[c[n>>2]>>0]|0)){pe(c[p>>2]|0,c[c[g>>2]>>2]|0);i=w;return}c[l>>2]=be(c[(c[g>>2]|0)+4>>2]|0)|0;c[o>>2]=ae(c[(c[g>>2]|0)+8>>2]|0)|0;if(!(c[o>>2]|0)){i=w;return}c[m>>2]=be(c[(c[g>>2]|0)+8>>2]|0)|0;f=(c[s>>2]|0)+1|0;b=k;c[b>>2]=f;c[b+4>>2]=((f|0)<0)<<31>>31;b=k;c[u>>2]=GP(c[p>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;if(!(c[u>>2]|0)){i=w;return}c[j>>2]=(c[s>>2]|0)-(c[l>>2]|0);c[r>>2]=0;c[q>>2]=0;while(1){if((c[q>>2]|0)>(c[j>>2]|0)){g=18;break}if((d[(c[v>>2]|0)+(c[q>>2]|0)>>0]|0|0)==(d[c[n>>2]>>0]|0|0)?(vQ((c[v>>2]|0)+(c[q>>2]|0)|0,c[n>>2]|0,c[l>>2]|0)|0)==0:0){c[h>>2]=we(c[p>>2]|0)|0;g=(c[m>>2]|0)-(c[l>>2]|0)|0;f=k;g=gR(c[f>>2]|0,c[f+4>>2]|0,g|0,((g|0)<0)<<31>>31|0)|0;f=k;c[f>>2]=g;c[f+4>>2]=C;f=k;f=fR(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;g=C;b=c[(c[h>>2]|0)+88>>2]|0;e=((b|0)<0)<<31>>31;if((g|0)>(e|0)|(g|0)==(e|0)&f>>>0>b>>>0){g=13;break}c[t>>2]=c[u>>2];b=c[k>>2]|0;c[u>>2]=Md(c[u>>2]|0,b,((b|0)<0)<<31>>31)|0;if(!(c[u>>2]|0)){g=15;break}iR((c[u>>2]|0)+(c[r>>2]|0)|0,c[o>>2]|0,c[m>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[q>>2]=(c[q>>2]|0)+((c[l>>2]|0)-1)}else{f=a[(c[v>>2]|0)+(c[q>>2]|0)>>0]|0;b=c[r>>2]|0;c[r>>2]=b+1;a[(c[u>>2]|0)+b>>0]=f}c[q>>2]=(c[q>>2]|0)+1}if((g|0)==13){se(c[p>>2]|0);Kd(c[u>>2]|0);i=w;return}else if((g|0)==15){te(c[p>>2]|0);Kd(c[t>>2]|0);i=w;return}else if((g|0)==18){iR((c[u>>2]|0)+(c[r>>2]|0)|0,(c[v>>2]|0)+(c[q>>2]|0)|0,(c[s>>2]|0)-(c[q>>2]|0)|0)|0;c[r>>2]=(c[r>>2]|0)+((c[s>>2]|0)-(c[q>>2]|0));a[(c[u>>2]|0)+(c[r>>2]|0)>>0]=0;ne(c[p>>2]|0,c[u>>2]|0,c[r>>2]|0,148);i=w;return}}function xP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+32|0;e=g+20|0;j=g+12|0;h=g;f=g+8|0;c[e>>2]=a;c[g+16>>2]=b;c[j>>2]=d;j=ee(c[c[j>>2]>>2]|0)|0;d=C;b=h;c[b>>2]=j;c[b+4>>2]=d;b=(c[h+4>>2]|0)<0;a=h;c[a>>2]=b?0:j;c[a+4>>2]=b?0:d;a=h;c[f>>2]=qe(c[e>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;if(!(c[f>>2]|0)){i=g;return}re(c[e>>2]|0,c[f>>2]|0);i=g;return}function yP(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0;m=i;i=i+32|0;n=m+24|0;g=m+16|0;j=m+12|0;k=m+8|0;l=m;c[n>>2]=b;c[m+20>>2]=e;c[g>>2]=f;c[j>>2]=xe(c[n>>2]|0,32)|0;c[k>>2]=Te(c[c[g>>2]>>2]|0)|0;if(!((c[j>>2]|0)!=0&(c[k>>2]|0)!=5)){i=m;return}n=(c[j>>2]|0)+16|0;b=n;b=gR(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;c[n>>2]=b;c[n+4>>2]=C;g=c[c[g>>2]>>2]|0;if((c[k>>2]|0)!=1){o=+ce(g);n=c[j>>2]|0;h[n>>3]=+h[n>>3]+o;a[(c[j>>2]|0)+25>>0]=1;i=m;return}n=ee(g)|0;k=l;c[k>>2]=n;c[k+4>>2]=C;k=l;n=c[j>>2]|0;h[n>>3]=+h[n>>3]+(+((c[k>>2]|0)>>>0)+4294967296.0*+(c[k+4>>2]|0));if(d[(c[j>>2]|0)+25>>0]|0|(d[(c[j>>2]|0)+24>>0]|0)){i=m;return}n=l;if(!(_H((c[j>>2]|0)+8|0,c[n>>2]|0,c[n+4>>2]|0)|0)){i=m;return}a[(c[j>>2]|0)+24>>0]=1;i=m;return}function zP(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;c[e>>2]=xe(c[d>>2]|0,0)|0;if(!(c[e>>2]|0)){i=f;return}b=(c[e>>2]|0)+16|0;g=c[b+4>>2]|0;if(!((g|0)>0|(g|0)==0&(c[b>>2]|0)>>>0>0)){i=f;return}if(a[(c[e>>2]|0)+24>>0]|0){je(c[d>>2]|0,46986,-1);i=f;return}d=c[d>>2]|0;b=c[e>>2]|0;if(a[(c[e>>2]|0)+25>>0]|0){ie(d,+h[b>>3]);i=f;return}else{g=b+8|0;le(d,c[g>>2]|0,c[g+4>>2]|0);i=f;return}}function AP(a){a=a|0;var b=0,d=0,e=0,f=0.0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=xe(c[e>>2]|0,0)|0;a=c[e>>2]|0;if(!(c[b>>2]|0)){f=0.0;ie(a,f);i=d;return}f=+h[c[b>>2]>>3];ie(a,f);i=d;return}function BP(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=xe(c[b>>2]|0,0)|0;if(!(c[d>>2]|0)){i=e;return}a=(c[d>>2]|0)+16|0;f=c[a+4>>2]|0;if(!((f|0)>0|(f|0)==0&(c[a>>2]|0)>>>0>0)){i=e;return}f=(c[d>>2]|0)+16|0;ie(c[b>>2]|0,+h[c[d>>2]>>3]/(+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0)));i=e;return}function CP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;j=g+12|0;h=g+8|0;e=g+4|0;f=g;c[j>>2]=a;c[h>>2]=b;c[e>>2]=d;c[f>>2]=xe(c[j>>2]|0,8)|0;if(!(c[h>>2]|0)){if(!(c[f>>2]|0)){i=g;return}}else{j=5!=(fe(c[c[e>>2]>>2]|0)|0);if(!(j&(c[f>>2]|0)!=0)){i=g;return}}j=c[f>>2]|0;h=j;h=gR(c[h>>2]|0,c[h+4>>2]|0,1,0)|0;c[j>>2]=h;c[j+4>>2]=C;i=g;return}function DP(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=xe(c[e>>2]|0,0)|0;a=c[e>>2]|0;if(!(c[b>>2]|0)){b=0;e=0;le(a,b,e);i=d;return}e=c[b>>2]|0;b=c[e>>2]|0;e=c[e+4>>2]|0;le(a,b,e);i=d;return}function EP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;e=p+36|0;f=p+32|0;g=p+28|0;o=p+24|0;m=p+20|0;n=p+16|0;l=p+12|0;k=p+8|0;h=p+4|0;j=p;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if((fe(c[c[g>>2]>>2]|0)|0)==5){i=p;return}c[m>>2]=xe(c[e>>2]|0,28)|0;if(!(c[m>>2]|0)){i=p;return}c[h>>2]=we(c[e>>2]|0)|0;c[j>>2]=(c[(c[m>>2]|0)+20>>2]|0)==0&1;c[(c[m>>2]|0)+20>>2]=c[(c[h>>2]|0)+88>>2];if(!(c[j>>2]|0)){if((c[f>>2]|0)==2){c[n>>2]=ae(c[(c[g>>2]|0)+4>>2]|0)|0;c[k>>2]=be(c[(c[g>>2]|0)+4>>2]|0)|0}else{c[n>>2]=38266;c[k>>2]=1}if(c[k>>2]|0)aA(c[m>>2]|0,c[n>>2]|0,c[k>>2]|0)}c[o>>2]=ae(c[c[g>>2]>>2]|0)|0;c[l>>2]=be(c[c[g>>2]>>2]|0)|0;if(!(c[o>>2]|0)){i=p;return}aA(c[m>>2]|0,c[o>>2]|0,c[l>>2]|0);i=p;return}function FP(a){a=a|0;var b=0,e=0,f=0;f=i;i=i+16|0;b=f+4|0;e=f;c[b>>2]=a;c[e>>2]=xe(c[b>>2]|0,0)|0;if(!(c[e>>2]|0)){i=f;return}if((d[(c[e>>2]|0)+24>>0]|0|0)==2){se(c[b>>2]|0);i=f;return}b=c[b>>2]|0;if((d[(c[e>>2]|0)+24>>0]|0|0)==1){te(b);i=f;return}else{ne(b,eg(c[e>>2]|0)|0,-1,148);i=f;return}}function GP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;e=h+16|0;f=h;g=h+12|0;k=h+8|0;c[e>>2]=a;j=f;c[j>>2]=b;c[j+4>>2]=d;c[k>>2]=we(c[e>>2]|0)|0;d=f;j=c[d+4>>2]|0;a=c[(c[k>>2]|0)+88>>2]|0;b=((a|0)<0)<<31>>31;if((j|0)>(b|0)|((j|0)==(b|0)?(c[d>>2]|0)>>>0>a>>>0:0)){se(c[e>>2]|0);c[g>>2]=0;k=c[g>>2]|0;i=h;return k|0}k=f;c[g>>2]=_f(c[k>>2]|0,c[k+4>>2]|0)|0;if(c[g>>2]|0){k=c[g>>2]|0;i=h;return k|0}te(c[e>>2]|0);k=c[g>>2]|0;i=h;return k|0}function HP(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=(c[(c[(c[e>>2]|0)+12>>2]|0)+4>>2]|0)+(((c[(c[e>>2]|0)+16>>2]|0)-1|0)*20|0);i=d;return c[(c[b>>2]|0)+16>>2]|0}function IP(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;a[(c[e>>2]|0)+24>>0]=1;i=d;return}function JP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;a=$t(c[e>>2]|0,c[f>>2]|0)|0;b=c[(c[e>>2]|0)+528>>2]|0;c[b>>2]=(c[b>>2]|0)+a;i=d;return}function KP(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;if(!(c[g>>2]|0)){e=c[f>>2]|0;j=c[g>>2]|0;Sf(e,j);i=k;return}c[j>>2]=c[g>>2];while(1){if((c[j>>2]|0)>>>0>=((c[g>>2]|0)+((c[h>>2]|0)*20|0)|0)>>>0)break;if(a[(c[j>>2]|0)+1>>0]|0)qA(c[f>>2]|0,a[(c[j>>2]|0)+1>>0]|0,c[(c[j>>2]|0)+16>>2]|0);c[j>>2]=(c[j>>2]|0)+20}e=c[f>>2]|0;j=c[g>>2]|0;Sf(e,j);i=k;return}function LP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;d=k+20|0;e=k+16|0;g=k+12|0;h=k+8|0;f=k+4|0;j=k;c[d>>2]=a;c[e>>2]=b;c[g>>2]=c[(c[e>>2]|0)+16>>2];while(1){if(!(c[g>>2]|0))break;if(!((c[d>>2]|0)!=0?(c[(c[d>>2]|0)+528>>2]|0)!=0:0)){a=c[(c[g>>2]|0)+12>>2]|0;if(c[(c[g>>2]|0)+16>>2]|0)c[(c[(c[g>>2]|0)+16>>2]|0)+12>>2]=a;else{c[f>>2]=a;a=c[g>>2]|0;if(c[f>>2]|0)a=c[(c[a+12>>2]|0)+8>>2]|0;else a=c[a+8>>2]|0;c[j>>2]=a;Oj((c[(c[e>>2]|0)+64>>2]|0)+56|0,c[j>>2]|0,c[f>>2]|0)|0}if(c[(c[g>>2]|0)+12>>2]|0)c[(c[(c[g>>2]|0)+12>>2]|0)+16>>2]=c[(c[g>>2]|0)+16>>2]}LF(c[d>>2]|0,c[(c[g>>2]|0)+28>>2]|0);LF(c[d>>2]|0,c[(c[g>>2]|0)+28+4>>2]|0);c[h>>2]=c[(c[g>>2]|0)+4>>2];Sf(c[d>>2]|0,c[g>>2]|0);c[g>>2]=c[h>>2]}i=k;return}function MP(a){a=a|0;return((a|32)+-97|0)>>>0<26|0}function NP(a){a=a|0;return((a|0)==32|(a|0)==9)&1|0}function OP(a){a=a|0;return(a+-97|0)>>>0<26|0}function PP(a){a=a|0;return(a+-65|0)>>>0<26|0}function QP(a){a=a|0;var b=0;b=(PP(a)|0)==0;return(b?a:a|32)|0}function RP(a){a=a|0;var b=0;b=(OP(a)|0)==0;return(b?a:a&95)|0}function SP(){var a=0;if(!(c[2492]|0))a=10016;else a=c[(qb()|0)+60>>2]|0;return a|0}function TP(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[47177+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=47265;e=5;break}}if((e|0)==2)if(!c)b=47265;else{b=47265;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0}function UP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+192|0;j=s+152|0;h=s+136|0;r=s+120|0;q=s+104|0;p=s+96|0;m=s+80|0;l=s+64|0;f=s+48|0;n=s+32|0;g=s+16|0;e=s;t=s+176|0;k=s+168|0;c[t>>2]=d;d=(c[t>>2]|0)+(4-1)&~(4-1);o=c[d>>2]|0;c[t>>2]=d+4;o=(b|0)==4?o|32768:o;a:do switch(b|0){case 14:{c[e>>2]=a;c[e+4>>2]=14;c[e+8>>2]=o;d=XP(mb(221,e|0)|0)|0;break}case 9:{c[g>>2]=a;c[g+4>>2]=16;c[g+8>>2]=k;d=mb(221,g|0)|0;switch(d|0){case-22:{c[n>>2]=a;c[n+4>>2]=9;c[n+8>>2]=o;d=mb(221,n|0)|0;break a}case 0:{d=c[k+4>>2]|0;d=(c[k>>2]|0)==2?0-d|0:d;break a}default:{d=XP(d)|0;break a}}}case 1030:{c[f>>2]=a;c[f+4>>2]=1030;c[f+8>>2]=o;d=mb(221,f|0)|0;if((d|0)!=-22){if((d|0)>-1){c[l>>2]=d;c[l+4>>2]=2;c[l+8>>2]=1;mb(221,l|0)|0}d=XP(d)|0;break a}c[m>>2]=a;c[m+4>>2]=1030;c[m+8>>2]=0;d=mb(221,m|0)|0;if((d|0)==-22){c[q>>2]=a;c[q+4>>2]=0;c[q+8>>2]=o;d=mb(221,q|0)|0;if((d|0)>-1){c[r>>2]=d;c[r+4>>2]=2;c[r+8>>2]=1;mb(221,r|0)|0}d=XP(d)|0;break a}else{if((d|0)>-1){c[p>>2]=d;Cb(6,p|0)|0}d=XP(-22)|0;break a}}default:if((b+-12|0)>>>0<5){c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=o;d=XP(mb(221,h|0)|0)|0;break a}else{c[j>>2]=a;c[j+4>>2]=b;c[j+8>>2]=o;d=XP(mb(221,j|0)|0)|0;break a}}while(0);i=s;return d|0}function VP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+32|0;f=e;g=e+16|0;c[g>>2]=d;h=(c[g>>2]|0)+(4-1)&~(4-1);d=c[h>>2]|0;c[g>>2]=h+4;c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=d;d=XP(Db(5,f|0)|0)|0;i=e;return d|0}function WP(b,c){b=b|0;c=c|0;var d=0,e=0;d=0;while(1){a[b+d>>0]=a[49069+d>>0]|0;if((d|0)==14)break;else d=d+1|0}if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{d=14;e=c;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;while(1){d=d+-1|0;a[b+d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}}return}function XP(a){a=a|0;if(a>>>0>4294963200){c[(SP()|0)>>2]=0-a;a=-1}return a|0}function YP(a){a=+a;return+(+X(+(a+-1416.0996898839683))*2247116418577894884661631.0e283*2247116418577894884661631.0e283)}function ZP(a){a=+a;var b=0;h[k>>3]=a;b=hR(c[k>>2]|0,c[k+4>>2]|0,52)|0;b=b&2047;do if(b>>>0>=1024)if(b>>>0<1049){a=+Y(+(a*2.0-1.0/(+O(+(a*a+-1.0))+a)));break}else{a=+Y(+a)+.6931471805599453;break}else{a=a+-1.0;a=+dQ(a+ +O(+(a*a+a*2.0)))}while(0);return+a}function _P(a){a=+a;var b=0,d=0,e=0,f=0.0;h[k>>3]=a;e=c[k>>2]|0;d=c[k+4>>2]|0;b=hR(e|0,d|0,52)|0;b=b&2047;c[k>>2]=e;c[k+4>>2]=d&2147483647;a=+h[k>>3];do if(b>>>0<=1048){if(b>>>0>1023){a=+Y(+(a*2.0+1.0/(a+ +O(+(a*a+1.0)))));break}if(b>>>0>996){f=a*a;a=+dQ(a+f/(+O(+(f+1.0))+1.0))}}else a=+Y(+a)+.6931471805599453;while(0);return+((d|0)<0?-a:a)}function $P(a){a=+a;var b=0,d=0,e=0,f=0.0;h[k>>3]=a;e=c[k>>2]|0;d=c[k+4>>2]|0;b=hR(e|0,d|0,52)|0;b=b&2047;c[k>>2]=e;c[k+4>>2]=d&2147483647;a=+h[k>>3];if(b>>>0<1022){if(b>>>0>=991){f=a*2.0;a=+dQ(f+a*f/(1.0-a))*.5}}else a=+dQ(a/(1.0-a)*2.0)*.5;return+((d|0)<0?-a:a)}function aQ(a){a=+a;var b=0;h[k>>3]=a;b=c[k+4>>2]&2147483647;c[k>>2]=c[k>>2];c[k+4>>2]=b;a=+h[k>>3];do if(b>>>0<1072049730)if(b>>>0<1045430272)a=1.0;else{a=+bQ(a);a=a*a/((a+1.0)*2.0)+1.0}else if(b>>>0<1082535490){a=+X(+a);a=(a+1.0/a)*.5;break}else{a=+YP(a);break}while(0);return+a}function bQ(a){a=+a;var b=0.0,d=0.0,e=0,f=0,g=0,i=0,j=0.0,l=0,m=0.0;h[k>>3]=a;e=c[k>>2]|0;f=c[k+4>>2]|0;g=f&2147483647;i=hR(e|0,f|0,63)|0;do if(g>>>0>1078159481){g=f&2147483647;if(!(g>>>0>2146435072|(g|0)==2146435072&e>>>0>0))if(!i)if(a>709.782712893384)a=a*8988465674311579538646525.0e283;else l=11;else a=-1.0}else{if(g>>>0<=1071001154)if(g>>>0<1016070144)break;else{j=0.0;g=0;l=14;break}if(g>>>0<1072734898)if(!i){b=a+-.6931471803691238;e=1;d=1.9082149292705877e-10;l=12;break}else{b=a+.6931471803691238;e=-1;d=-1.9082149292705877e-10;l=12;break}else l=11}while(0);if((l|0)==11){e=~~(a*1.4426950408889634+((i|0)!=0?-.5:.5));d=+(e|0);b=a-d*.6931471803691238;d=d*1.9082149292705877e-10;l=12}if((l|0)==12){j=b-d;a=j;j=b-j-d;g=e;l=14}a:do if((l|0)==14){d=a*.5;b=a*d;m=b*(b*(b*(b*(4.008217827329362e-06-b*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;d=3.0-d*m;d=b*((m-d)/(6.0-a*d));if(!g){a=a-(a*d-b);break}b=a*(d-j)-j-b;switch(g|0){case-1:{a=(a-b)*.5+-.5;break a}case 1:if(a<-.25){a=(b-(a+.5))*-2.0;break a}else{a=(a-b)*2.0+1.0;break a}default:{i=lR(g+1023|0,0,52)|0;l=C;c[k>>2]=i;c[k+4>>2]=l;d=+h[k>>3];if(g>>>0>56){a=a-b+1.0;a=((g|0)==1024?a*2.0*8988465674311579538646525.0e283:d*a)+-1.0;break a}e=lR(1023-g|0,0,52)|0;f=C;if((g|0)<20){c[k>>2]=e;c[k+4>>2]=f;a=1.0-+h[k>>3]+(a-b)}else{c[k>>2]=e;c[k+4>>2]=f;a=a-(+h[k>>3]+b)+1.0}a=d*a;break a}}}while(0);return+a}function cQ(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,l=0.0,m=0.0;h[k>>3]=a;d=c[k>>2]|0;b=c[k+4>>2]|0;e=(b|0)<0;do if(e|b>>>0<1048576){if((d|0)==0&(b&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[k>>3]=a*18014398509481984.0;b=c[k+4>>2]|0;e=c[k>>2]|0;d=-1077;f=9;break}}else if(b>>>0<=2146435071)if((d|0)==0&0==0&(b|0)==1072693248)a=0.0;else{e=d;d=-1023;f=9}while(0);if((f|0)==9){f=b+614242|0;c[k>>2]=e;c[k+4>>2]=(f&1048575)+1072079006;m=+h[k>>3]+-1.0;a=m*(m*.5);j=m/(m+2.0);l=j*j;i=l*l;h[k>>3]=m-a;e=c[k+4>>2]|0;c[k>>2]=0;c[k+4>>2]=e;g=+h[k>>3];a=j*(a+(i*(i*(i*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(i*(i*(i*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))+(m-g-a);m=g*.4342944818781689;i=+(d+(f>>>20)|0);l=i*.30102999566361177;j=l+m;a=j+(m+(l-j)+(a*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return+a}function dQ(a){a=+a;var b=0,d=0.0,e=0.0,f=0,g=0,i=0.0,j=0.0,l=0.0,m=0.0;h[k>>3]=a;b=c[k+4>>2]|0;do if((b|0)<0|b>>>0<1071284858)if(b>>>0<=3220176895){g=lR(b|0,0,1)|0;if(g>>>0<2034237440)break;if(b>>>0<3218259653){e=0.0;d=0.0;f=11;break}else{f=8;break}}else{if(a==-1.0){a=-s;break}a=(a-a)/0.0;break}else if(b>>>0<=2146435071)f=8;while(0);if((f|0)==8){d=a+1.0;h[k>>3]=d;b=(c[k+4>>2]|0)+614242|0;f=(b>>>20)+-1023|0;if((f|0)<54)a=((f|0)>1?1.0-(d-a):a-(d+-1.0))/d;else a=0.0;c[k>>2]=c[k>>2];c[k+4>>2]=(b&1048575)+1072079006;e=a;a=+h[k>>3]+-1.0;d=+(f|0);f=11}if((f|0)==11){i=a*(a*.5);m=a/(a+2.0);l=m*m;j=l*l;a=d*.6931471803691238+(a+(e+d*1.9082149292705877e-10+m*(i+(j*(j*(j*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(j*(j*(j*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-i))}return+a}function eQ(a){a=+a;var b=0.0,d=0.0,e=0;h[k>>3]=a;e=c[k+4>>2]|0;d=(e|0)<0?-.5:.5;e=e&2147483647;c[k>>2]=c[k>>2];c[k+4>>2]=e;b=+h[k>>3];do if(e>>>0<1082535490){b=+bQ(b);if(e>>>0>=1072693248){a=d*(b+b/(b+1.0));break}if(e>>>0>=1045430272)a=d*(b*2.0-b*b/(b+1.0))}else a=d*2.0*+YP(b);while(0);return+a}function fQ(a){a=+a;var b=0,d=0;h[k>>3]=a;d=c[k+4>>2]|0;b=d&2147483647;c[k>>2]=c[k>>2];c[k+4>>2]=b;a=+h[k>>3];do if(b>>>0>1071748074)if(b>>>0>1077149696){a=1.0-0.0/a;break}else{a=1.0-2.0/(+bQ(a*2.0)+2.0);break}else{if(b>>>0>1070618798){a=+bQ(a*2.0);a=a/(a+2.0);break}if(b>>>0>1048575){a=+bQ(a*-2.0);a=-a/(a+2.0)}}while(0);return+((d|0)<0?-a:a)}function gQ(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,j=0,k=0;k=i;i=i+32|0;h=k;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){c[(SP()|0)>>2]=12;f=-1;break}j=(e&16|0)!=0;if(j)XQ(-1);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;f=XP(cb(192,h|0)|0)|0;if(j)YQ()}else{c[(SP()|0)>>2]=22;f=-1}while(0);i=k;return f|0}function hQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;XQ(-1);c[e>>2]=a;c[e+4>>2]=b;a=XP(Xa(91,e|0)|0)|0;YQ();i=d;return a|0}function iQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+64|0;g=h+16|0;f=h+8|0;d=h;e=h+24|0;c[d>>2]=a;c[d+4>>2]=b;d=jb(94,d|0)|0;if((d|0)==-9?(c[f>>2]=a,c[f+4>>2]=1,(mb(221,f|0)|0)>=0):0){WP(e,a);c[g>>2]=e;c[g+4>>2]=b;d=XP(wb(15,g|0)|0)|0}else d=XP(d)|0;i=h;return d|0}function jQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+64|0;g=h+16|0;f=h+8|0;d=h;e=h+24|0;c[d>>2]=a;c[d+4>>2]=b;d=db(197,d|0)|0;if((d|0)==-9?(c[f>>2]=a,c[f+4>>2]=1,(mb(221,f|0)|0)>=0):0){WP(e,a);c[g>>2]=e;c[g+4>>2]=b;d=XP(fb(195,g|0)|0)|0}else d=XP(d)|0;i=h;return d|0}function kQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;a=XP(eb(196,e|0)|0)|0;i=d;return a|0}function lQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;a=XP(Za(39,e|0)|0)|0;i=d;return a|0}function mQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;a=XP(fb(195,e|0)|0)|0;i=d;return a|0}function nQ(a){a=a|0;return 0}function oQ(a){a=a|0;return}function pQ(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=XP(Cb(6,d|0)|0)|0;i=b;return a|0}function qQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((XP(vb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function rQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;n=q+16|0;m=q;e=q+32|0;o=a+28|0;f=c[o>>2]|0;c[e>>2]=f;p=a+20|0;f=(c[p>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;k=a+60|0;l=a+44|0;b=2;f=f+d|0;while(1){if(!(c[2492]|0)){c[n>>2]=c[k>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=XP(Mb(146,n|0)|0)|0}else{La(154,a|0);c[m>>2]=c[k>>2];c[m+4>>2]=e;c[m+8>>2]=b;h=XP(Mb(146,m|0)|0)|0;Da(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[o>>2]=(c[o>>2]|0)+h;j=g;b=2}else j=g;else{j=c[l>>2]|0;c[o>>2]=j;c[p>>2]=j;j=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=j-h}if((f|0)==6){n=c[l>>2]|0;c[a+16>>2]=n+(c[a+48>>2]|0);a=n;c[o>>2]=a;c[p>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[o>>2]=0;c[p>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=q;return d|0}function sQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;f=g;c[b+36>>2]=163;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,(Ka(54,f|0)|0)!=0):0)a[b+75>>0]=-1;f=rQ(b,d,e)|0;i=g;return f|0}function tQ(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=UQ(a)|0;break}d=(nQ(a)|0)==0;b=UQ(a)|0;if(!d)oQ(a)}else{if(!(c[2503]|0))b=0;else b=tQ(c[2503]|0)|0;Bb(9996);a=c[2498]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=nQ(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=UQ(a)|0|b;if(d)oQ(a);a=c[a+56>>2]|0}while((a|0)!=0);ub(9996)}while(0);return b|0}function uQ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+208|0;o=r+8|0;p=r;f=_(d,b)|0;n=p;c[n>>2]=1;c[n+4>>2]=0;if(f){j=f-d|0;c[o+4>>2]=d;c[o>>2]=d;g=d;b=d;h=2;while(1){b=b+d+g|0;c[o+(h<<2)>>2]=b;if(b>>>0>>0){n=g;g=b;h=h+1|0;b=n}else break}n=0-d|0;k=a+j|0;m=p+4|0;if((j|0)>0){j=k;f=1;h=1;while(1){do if((f&3|0)==3){VQ(a,d,e,h,o);l=c[m>>2]|0;b=l<<30|(c[p>>2]|0)>>>2;c[p>>2]=b;c[m>>2]=l>>>2;h=h+2|0}else{b=h+-1|0;if((c[o+(b<<2)>>2]|0)>>>0<(j-a|0)>>>0)VQ(a,d,e,h,o);else WQ(a,d,e,p,h,0,o);if((h|0)==1){b=c[p>>2]|0;c[m>>2]=b>>>31|c[m>>2]<<1;b=b<<1;c[p>>2]=b;h=0;break}if(b>>>0>31){f=c[p>>2]|0;c[m>>2]=f;c[p>>2]=0;b=h+-33|0;g=0}else{f=c[m>>2]|0;g=c[p>>2]|0}c[m>>2]=g>>>(32-b|0)|f<>2]=b;h=1}while(0);f=b|1;c[p>>2]=f;b=a+d|0;if(b>>>0>=k>>>0){f=b;break}else a=b}}else{f=a;h=1}WQ(f,d,e,p,h,0,o);l=p+4|0;b=c[p>>2]|0;if(!((h|0)==1&(b|0)==1&(c[l>>2]|0)==0)){g=f;while(1){if((h|0)<2){f=b+-1|0;do if(f){if(!(f&1)){j=f;f=0;do{f=f+1|0;j=j>>>1}while((j&1|0)==0);if(!f)q=24}else q=24;if((q|0)==24){q=0;k=c[m>>2]|0;if(!k){f=64;q=30;break}if(!(k&1)){j=k;f=0}else{a=0;j=k;f=0;break}while(1){a=f+1|0;j=j>>>1;if(j&1){j=a;break}else f=a}if(!j){a=0;j=k;f=0;break}else f=f+33|0}if(f>>>0>31)q=30;else{a=f;j=c[m>>2]|0}}else{f=32;q=30}while(0);if((q|0)==30){q=0;b=c[m>>2]|0;c[p>>2]=b;c[m>>2]=0;a=f+-32|0;j=0}c[p>>2]=j<<32-a|b>>>a;c[m>>2]=j>>>a;g=g+n|0;f=f+h|0}else{a=b>>>30;k=a|c[m>>2]<<2;f=h+-2|0;c[p>>2]=(b<<1&2147483646|a<<31)^3;c[m>>2]=k>>>1;WQ(g+(0-((c[o+(f<<2)>>2]|0)+d))|0,d,e,p,h+-1|0,1,o);k=c[p>>2]|0;c[m>>2]=k>>>31|c[m>>2]<<1;c[p>>2]=k<<1|1;g=g+n|0;WQ(g,d,e,p,f,1,o)}b=c[p>>2]|0;if((f|0)==1&(b|0)==1&(c[l>>2]|0)==0)break;else h=f}}}i=r;return}function vQ(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)d=0;else{f=d;e=b;while(1){b=a[e>>0]|0;d=a[c>>0]|0;if(b<<24>>24!=d<<24>>24)break;f=f+-1|0;if(!f){d=0;break a}else{e=e+1|0;c=c+1|0}}d=(b&255)-(d&255)|0}while(0);return d|0}function wQ(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)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){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 xQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;do if(!((g^b)&3)){f=(e|0)!=0;a:do if(f&(g&3|0)!=0)while(1){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;if(!(f&(d&3|0)!=0)){h=5;break}}else h=5;while(0);if((h|0)==5)if(!f){e=0;break}if(a[d>>0]|0){b:do if(e>>>0>3)do{f=c[d>>2]|0;if((f&-2139062144^-2139062144)&f+-16843009)break b;c[b>>2]=f;e=e+-4|0;d=d+4|0;b=b+4|0}while(e>>>0>3);while(0);h=11}}else h=11;while(0);c:do if((h|0)==11)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);kR(b|0,0,e|0)|0;return b|0}function yQ(b,c){b=b|0;c=c|0;var d=0,e=0;e=a[b>>0]|0;d=a[c>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=d<<24>>24)c=e;else{do{b=b+1|0;c=c+1|0;e=a[b>>0]|0;d=a[c>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=d<<24>>24));c=e}return(c&255)-(d&255)|0}function zQ(a,b){a=a|0;b=b|0;wQ(a,b)|0;return a|0}function AQ(a){a=a|0;var b=0,c=0;c=(BQ(a)|0)+1|0;b=_Q(c)|0;if(!b)b=0;else iR(b|0,a|0,c|0)|0;return b|0}function BQ(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){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 CQ(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)c=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);c=(f&255)-(d[c>>0]|0)|0}return c|0}function DQ(a,b,c){a=a|0;b=b|0;c=c|0;xQ(a,b,c)|0;return a|0}function EQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;a=XP(sb(33,e|0)|0)|0;i=d;return a|0}function FQ(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=Cb(6,d|0)|0;a=XP((a|0)==-4?-115:a)|0;i=b;return a|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+64|0;h=j+24|0;g=j+16|0;e=j;f=j+36|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;e=Lb(207,e|0)|0;if((e|0)==-9?(c[g>>2]=a,c[g+4>>2]=1,(mb(221,g|0)|0)>=0):0){WP(f,a);c[h>>2]=f;c[h+4>>2]=b;c[h+8>>2]=d;e=XP(hb(212,h|0)|0)|0}else e=XP(e)|0;i=j;return e|0}function HQ(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=XP(Oa(118,d|0)|0)|0;i=b;return a|0}function IQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;c[e+4>>2]=0;c[e+8>>2]=b;c[e+12>>2]=((b|0)<0)<<31>>31;b=XP(gb(194,e|0)|0)|0;i=d;return b|0}function JQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+4112|0;e=g;d=g+8|0;if(a)if(!b){c[(SP()|0)>>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((XP(Ra(183,e|0)|0)|0)>=0){if((a|0)==(d|0))a=AQ(d)|0}else a=0}i=g;return a|0}function KQ(){var a=0,b=0;b=i;i=i+16|0;a=pb(201,b|0)|0;i=b;return a|0}function LQ(){var a=0,b=0;b=i;i=i+16|0;a=Qa(20,b|0)|0;i=b;return a|0}function MQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+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=(XP(vb(140,g|0)|0)|0)!=0;i=f;return(d?-1:c[e>>2]|0)|0}function NQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;a=XP(Ab(3,f|0)|0)|0;i=e;return a|0}function OQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;a=XP(Ea(85,f|0)|0)|0;i=e;return a|0}function PQ(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=XP(Na(40,d|0)|0)|0;i=b;return a|0}function QQ(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;c[b+4>>2]=0;a=(kb(b|0,b|0)|0)==0;i=d;return(a?0:c[b>>2]|0)|0}function RQ(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=XP(yb(10,d|0)|0)|0;i=b;return a|0}function SQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;a=XP(Eb(4,f|0)|0)|0;i=e;return a|0}function TQ(a){a=a|0;if(!(c[a+68>>2]|0))oQ(a);return}function UQ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(Ob[c[a+36>>2]&255](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)Ob[c[a+40>>2]&255](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0}function VQ(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+240|0;o=p;c[o>>2]=a;a:do if((e|0)>1){n=0-b|0;g=e;h=a;k=a;l=1;while(1){a=h+n|0;m=g+-2|0;j=h+(0-((c[f+(m<<2)>>2]|0)+b))|0;if((Yb[d&255](k,j)|0)>-1?(Yb[d&255](k,a)|0)>-1:0){e=l;break a}e=l+1|0;h=o+(l<<2)|0;if((Yb[d&255](j,a)|0)>-1){c[h>>2]=j;a=j;g=g+-1|0}else{c[h>>2]=a;g=m}if((g|0)<=1)break a;h=a;k=c[o>>2]|0;l=e}}else e=1;while(0);ZQ(b,o,e);i=p;return}function WQ(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+240|0;p=r;k=c[e>>2]|0;e=c[e+4>>2]|0;c[p>>2]=a;o=0-b|0;a:do if((e|0)!=0|(k|0)!=1?(j=a+(0-(c[h+(f<<2)>>2]|0))|0,(Yb[d&255](j,a)|0)>=1):0){g=(g|0)==0;n=j;l=k;m=e;j=1;while(1){if(g&(f|0)>1){e=c[h+(f+-2<<2)>>2]|0;if((Yb[d&255](a+o|0,n)|0)>-1){g=f;e=j;q=20;break a}if((Yb[d&255](a+(0-(e+b))|0,n)|0)>-1){g=f;e=j;q=20;break a}}e=j+1|0;c[p+(j<<2)>>2]=n;g=l+-1|0;do if(g){if(!(g&1)){a=g;g=0;do{g=g+1|0;a=a>>>1}while((a&1|0)==0);if(!g)q=11}else q=11;if((q|0)==11){q=0;if(!m){g=64;q=16;break}if(!(m&1)){a=m;g=0}else{k=0;a=l;j=m;g=0;break}while(1){j=g+1|0;a=a>>>1;if(a&1){a=j;break}else g=j}if(!a){k=0;a=l;j=m;g=0;break}else g=g+33|0}if(g>>>0>31)q=16;else{k=g;a=l;j=m}}else{g=32;q=16}while(0);if((q|0)==16){q=0;k=g+-32|0;a=m;j=0}l=j<<32-k|a>>>k;m=j>>>k;g=g+f|0;if(!((m|0)!=0|(l|0)!=1)){a=n;q=20;break a}a=n+(0-(c[h+(g<<2)>>2]|0))|0;if((Yb[d&255](a,c[p>>2]|0)|0)<1){a=n;f=g;g=0;q=19;break}else{k=n;f=g;g=1;n=a;j=e;a=k}}}else{e=1;q=19}while(0);if((q|0)==19?(g|0)==0:0){g=f;q=20}if((q|0)==20){ZQ(b,p,e);VQ(a,b,d,g,h)}i=r;return}function XQ(a){a=a|0;return}function YQ(){return}function ZQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,(a|0)!=0):0)while(1){f=a>>>0>256?256:a;iR(e|0,c[b>>2]|0,f|0)|0;e=0;do{j=b+(e<<2)|0;e=e+1|0;iR(c[j>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[j>>2]=(c[j>>2]|0)+f}while((e|0)!=(d|0));if((a|0)==(f|0))break a;a=a-f|0;e=c[g>>2]|0}while(0);i=h;return}function _Q(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[2533]|0;d=i>>>a;if(d&3){a=(d&1^1)+a|0;e=a<<1;d=10172+(e<<2)|0;e=10172+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[2537]|0)>>>0)Ma();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else Ma()}else c[2533]=i&~(1<>2]=M|3;M=f+(M|4)|0;c[M>>2]=c[M>>2]|1;M=g;return M|0}h=c[2535]|0;if(o>>>0>h>>>0){if(d){e=2<>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;a=e>>>1&1;a=(f|j|g|d|a)+(e>>>a)|0;e=a<<1;d=10172+(e<<2)|0;e=10172+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[2537]|0)>>>0)Ma();b=f+12|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;c[e>>2]=f;k=c[2535]|0;break}else Ma()}else{c[2533]=i&~(1<>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+M>>2]=h;if(k){f=c[2538]|0;d=k>>>3;b=d<<1;e=10172+(b<<2)|0;a=c[2533]|0;d=1<>2]|0;if(b>>>0<(c[2537]|0)>>>0)Ma();else{l=a;m=b}}else{c[2533]=a|d;l=10172+(b+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[2535]=h;c[2538]=i;M=j;return M|0}a=c[2534]|0;if(a){d=(a&0-a)+-1|0;L=d>>>12&16;d=d>>>L;K=d>>>5&8;d=d>>>K;M=d>>>2&4;d=d>>>M;a=d>>>1&2;d=d>>>a;e=d>>>1&1;e=c[10436+((K|L|M|a|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;a=e;while(1){b=c[a+16>>2]|0;if(!b){b=c[a+20>>2]|0;if(!b){j=d;break}}a=(c[b+4>>2]&-8)-o|0;M=a>>>0>>0;d=M?a:d;a=b;e=M?b:e}g=c[2537]|0;if(e>>>0>>0)Ma();i=e+o|0;if(e>>>0>=i>>>0)Ma();h=c[e+24>>2]|0;d=c[e+12>>2]|0;do if((d|0)==(e|0)){a=e+20|0;b=c[a>>2]|0;if(!b){a=e+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;f=c[d>>2]|0;if(f){b=f;a=d;continue}d=b+16|0;f=c[d>>2]|0;if(!f)break;else{b=f;a=d}}if(a>>>0>>0)Ma();else{c[a>>2]=0;n=b;break}}else{f=c[e+8>>2]|0;if(f>>>0>>0)Ma();b=f+12|0;if((c[b>>2]|0)!=(e|0))Ma();a=d+8|0;if((c[a>>2]|0)==(e|0)){c[b>>2]=d;c[a>>2]=f;n=d;break}else Ma()}while(0);do if(h){b=c[e+28>>2]|0;a=10436+(b<<2)|0;if((e|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[2534]=c[2534]&~(1<>>0<(c[2537]|0)>>>0)Ma();b=h+16|0;if((c[b>>2]|0)==(e|0))c[b>>2]=n;else c[h+20>>2]=n;if(!n)break}a=c[2537]|0;if(n>>>0>>0)Ma();c[n+24>>2]=h;b=c[e+16>>2]|0;do if(b)if(b>>>0>>0)Ma();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[e+20>>2]|0;if(b)if(b>>>0<(c[2537]|0)>>>0)Ma();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(j>>>0<16){M=j+o|0;c[e+4>>2]=M|3;M=e+(M+4)|0;c[M>>2]=c[M>>2]|1}else{c[e+4>>2]=o|3;c[e+(o|4)>>2]=j|1;c[e+(j+o)>>2]=j;b=c[2535]|0;if(b){g=c[2538]|0;d=b>>>3;b=d<<1;f=10172+(b<<2)|0;a=c[2533]|0;d=1<>2]|0;if(a>>>0<(c[2537]|0)>>>0)Ma();else{p=b;q=a}}else{c[2533]=a|d;p=10172+(b+2<<2)|0;q=f}c[p>>2]=g;c[q+12>>2]=g;c[g+8>>2]=q;c[g+12>>2]=f}c[2535]=j;c[2538]=i}M=e+8|0;return M|0}else q=o}else q=o}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;l=c[2534]|0;if(l){d=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)k=31;else{q=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;k=14-(p|q|k)+(v<>>15)|0;k=m>>>(k+7|0)&1|k<<1}else k=0;a=c[10436+(k<<2)>>2]|0;a:do if(!a){f=0;a=0;v=86}else{h=d;f=0;i=m<<((k|0)==31?0:25-(k>>>1)|0);j=a;a=0;while(1){g=c[j+4>>2]&-8;d=g-m|0;if(d>>>0>>0)if((g|0)==(m|0)){g=j;a=j;v=90;break a}else a=j;else d=h;v=c[j+20>>2]|0;j=c[j+16+(i>>>31<<2)>>2]|0;f=(v|0)==0|(v|0)==(j|0)?f:v; +if(!j){v=86;break}else{h=d;i=i<<1}}}while(0);if((v|0)==86){if((f|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;l=a>>>5&8;a=a>>>l;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;f=a>>>1&1;f=c[10436+((l|n|p|q|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;j=a}else{g=f;v=90}}if((v|0)==90)while(1){v=0;q=(c[g+4>>2]&-8)-m|0;f=q>>>0>>0;d=f?q:d;a=f?g:a;f=c[g+16>>2]|0;if(f){g=f;v=90;continue}g=c[g+20>>2]|0;if(!g){i=d;j=a;break}else v=90}if((j|0)!=0?i>>>0<((c[2535]|0)-m|0)>>>0:0){f=c[2537]|0;if(j>>>0>>0)Ma();h=j+m|0;if(j>>>0>=h>>>0)Ma();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){o=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)Ma();else{c[a>>2]=0;o=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)Ma();b=e+12|0;if((c[b>>2]|0)!=(j|0))Ma();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;o=d;break}else Ma()}while(0);do if(g){b=c[j+28>>2]|0;a=10436+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=o;if(!o){c[2534]=c[2534]&~(1<>>0<(c[2537]|0)>>>0)Ma();b=g+16|0;if((c[b>>2]|0)==(j|0))c[b>>2]=o;else c[g+20>>2]=o;if(!o)break}a=c[2537]|0;if(o>>>0>>0)Ma();c[o+24>>2]=g;b=c[j+16>>2]|0;do if(b)if(b>>>0>>0)Ma();else{c[o+16>>2]=b;c[b+24>>2]=o;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[2537]|0)>>>0)Ma();else{c[o+20>>2]=b;c[b+24>>2]=o;break}}while(0);b:do if(i>>>0>=16){c[j+4>>2]=m|3;c[j+(m|4)>>2]=i|1;c[j+(i+m)>>2]=i;b=i>>>3;if(i>>>0<256){a=b<<1;e=10172+(a<<2)|0;d=c[2533]|0;b=1<>2]|0;if(a>>>0<(c[2537]|0)>>>0)Ma();else{s=b;t=a}}else{c[2533]=d|b;s=10172+(a+2<<2)|0;t=e}c[s>>2]=h;c[t+12>>2]=h;c[j+(m+8)>>2]=t;c[j+(m+12)>>2]=e;break}b=i>>>8;if(b)if(i>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;b=10436+(e<<2)|0;c[j+(m+28)>>2]=e;c[j+(m+20)>>2]=0;c[j+(m+16)>>2]=0;a=c[2534]|0;d=1<>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(i|0)){y=d;break c}else{e=e<<1;b=d}}if(a>>>0<(c[2537]|0)>>>0)Ma();else{c[a>>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break b}}else y=b;while(0);b=y+8|0;a=c[b>>2]|0;M=c[2537]|0;if(a>>>0>=M>>>0&y>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[j+(m+8)>>2]=a;c[j+(m+12)>>2]=y;c[j+(m+24)>>2]=0;break}else Ma()}else{M=i+m|0;c[j+4>>2]=M|3;M=j+(M+4)|0;c[M>>2]=c[M>>2]|1}while(0);M=j+8|0;return M|0}else q=m}else q=m}else q=-1;while(0);d=c[2535]|0;if(d>>>0>=q>>>0){b=d-q|0;a=c[2538]|0;if(b>>>0>15){c[2538]=a+q;c[2535]=b;c[a+(q+4)>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=q|3}else{c[2535]=0;c[2538]=0;c[a+4>>2]=d|3;M=a+(d+4)|0;c[M>>2]=c[M>>2]|1}M=a+8|0;return M|0}a=c[2536]|0;if(a>>>0>q>>>0){L=a-q|0;c[2536]=L;M=c[2539]|0;c[2539]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}do if(!(c[2651]|0)){a=ib(30)|0;if(!(a+-1&a)){c[2653]=a;c[2652]=a;c[2654]=-1;c[2655]=-1;c[2656]=0;c[2644]=0;c[2651]=(Fb(0)|0)&-16^1431655768;break}else Ma()}while(0);j=q+48|0;i=c[2653]|0;k=q+47|0;h=i+k|0;i=0-i|0;l=h&i;if(l>>>0<=q>>>0){M=0;return M|0}a=c[2643]|0;if((a|0)!=0?(t=c[2641]|0,y=t+l|0,y>>>0<=t>>>0|y>>>0>a>>>0):0){M=0;return M|0}d:do if(!(c[2644]&4)){a=c[2539]|0;e:do if(a){f=10580;while(1){d=c[f>>2]|0;if(d>>>0<=a>>>0?(r=f+4|0,(d+(c[r>>2]|0)|0)>>>0>a>>>0):0){g=f;a=r;break}f=c[f+8>>2]|0;if(!f){v=174;break e}}d=h-(c[2536]|0)&i;if(d>>>0<2147483647){f=bb(d|0)|0;y=(f|0)==((c[g>>2]|0)+(c[a>>2]|0)|0);a=y?d:0;if(y){if((f|0)!=(-1|0)){w=f;p=a;v=194;break d}}else v=184}else a=0}else v=174;while(0);do if((v|0)==174){g=bb(0)|0;if((g|0)!=(-1|0)){a=g;d=c[2652]|0;f=d+-1|0;if(!(f&a))d=l;else d=l-a+(f+a&0-d)|0;a=c[2641]|0;f=a+d|0;if(d>>>0>q>>>0&d>>>0<2147483647){y=c[2643]|0;if((y|0)!=0?f>>>0<=a>>>0|f>>>0>y>>>0:0){a=0;break}f=bb(d|0)|0;y=(f|0)==(g|0);a=y?d:0;if(y){w=g;p=a;v=194;break d}else v=184}else a=0}else a=0}while(0);f:do if((v|0)==184){g=0-d|0;do if(j>>>0>d>>>0&(d>>>0<2147483647&(f|0)!=(-1|0))?(u=c[2653]|0,u=k-d+u&0-u,u>>>0<2147483647):0)if((bb(u|0)|0)==(-1|0)){bb(g|0)|0;break f}else{d=u+d|0;break}while(0);if((f|0)!=(-1|0)){w=f;p=d;v=194;break d}}while(0);c[2644]=c[2644]|4;v=191}else{a=0;v=191}while(0);if((((v|0)==191?l>>>0<2147483647:0)?(w=bb(l|0)|0,x=bb(0)|0,w>>>0>>0&((w|0)!=(-1|0)&(x|0)!=(-1|0))):0)?(z=x-w|0,A=z>>>0>(q+40|0)>>>0,A):0){p=A?z:a;v=194}if((v|0)==194){a=(c[2641]|0)+p|0;c[2641]=a;if(a>>>0>(c[2642]|0)>>>0)c[2642]=a;h=c[2539]|0;g:do if(h){g=10580;do{a=c[g>>2]|0;d=g+4|0;f=c[d>>2]|0;if((w|0)==(a+f|0)){B=a;C=d;D=f;E=g;v=204;break}g=c[g+8>>2]|0}while((g|0)!=0);if(((v|0)==204?(c[E+12>>2]&8|0)==0:0)?h>>>0>>0&h>>>0>=B>>>0:0){c[C>>2]=D+p;M=(c[2536]|0)+p|0;L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=M-L|0;c[2539]=h+L;c[2536]=K;c[h+(L+4)>>2]=K|1;c[h+(M+4)>>2]=40;c[2540]=c[2655];break}a=c[2537]|0;if(w>>>0>>0){c[2537]=w;a=w}d=w+p|0;g=10580;while(1){if((c[g>>2]|0)==(d|0)){f=g;d=g;v=212;break}g=c[g+8>>2]|0;if(!g){d=10580;break}}if((v|0)==212)if(!(c[d+12>>2]&8)){c[f>>2]=w;n=d+4|0;c[n>>2]=(c[n>>2]|0)+p;n=w+8|0;n=(n&7|0)==0?0:0-n&7;k=w+(p+8)|0;k=(k&7|0)==0?0:0-k&7;b=w+(k+p)|0;m=n+q|0;o=w+m|0;l=b-(w+n)-q|0;c[w+(n+4)>>2]=q|3;h:do if((b|0)!=(h|0)){if((b|0)==(c[2538]|0)){M=(c[2535]|0)+l|0;c[2535]=M;c[2538]=o;c[w+(m+4)>>2]=M|1;c[w+(M+m)>>2]=M;break}i=p+4|0;d=c[w+(i+k)>>2]|0;if((d&3|0)==1){j=d&-8;g=d>>>3;i:do if(d>>>0>=256){h=c[w+((k|24)+p)>>2]|0;e=c[w+(p+12+k)>>2]|0;do if((e|0)==(b|0)){f=k|16;e=w+(i+f)|0;d=c[e>>2]|0;if(!d){e=w+(f+p)|0;d=c[e>>2]|0;if(!d){J=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ma();else{c[e>>2]=0;J=d;break}}else{f=c[w+((k|8)+p)>>2]|0;if(f>>>0>>0)Ma();a=f+12|0;if((c[a>>2]|0)!=(b|0))Ma();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;J=e;break}else Ma()}while(0);if(!h)break;a=c[w+(p+28+k)>>2]|0;d=10436+(a<<2)|0;do if((b|0)!=(c[d>>2]|0)){if(h>>>0<(c[2537]|0)>>>0)Ma();a=h+16|0;if((c[a>>2]|0)==(b|0))c[a>>2]=J;else c[h+20>>2]=J;if(!J)break i}else{c[d>>2]=J;if(J)break;c[2534]=c[2534]&~(1<>>0>>0)Ma();c[J+24>>2]=h;b=k|16;a=c[w+(b+p)>>2]|0;do if(a)if(a>>>0>>0)Ma();else{c[J+16>>2]=a;c[a+24>>2]=J;break}while(0);b=c[w+(i+b)>>2]|0;if(!b)break;if(b>>>0<(c[2537]|0)>>>0)Ma();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{e=c[w+((k|8)+p)>>2]|0;f=c[w+(p+12+k)>>2]|0;d=10172+(g<<1<<2)|0;do if((e|0)!=(d|0)){if(e>>>0>>0)Ma();if((c[e+12>>2]|0)==(b|0))break;Ma()}while(0);if((f|0)==(e|0)){c[2533]=c[2533]&~(1<>>0>>0)Ma();a=f+8|0;if((c[a>>2]|0)==(b|0)){F=a;break}Ma()}while(0);c[e+12>>2]=f;c[F>>2]=e}while(0);b=w+((j|k)+p)|0;f=j+l|0}else f=l;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[w+(m+4)>>2]=f|1;c[w+(f+m)>>2]=f;b=f>>>3;if(f>>>0<256){a=b<<1;e=10172+(a<<2)|0;d=c[2533]|0;b=1<>2]|0;if(a>>>0>=(c[2537]|0)>>>0){K=b;L=a;break}Ma()}while(0);c[K>>2]=o;c[L+12>>2]=o;c[w+(m+8)>>2]=L;c[w+(m+12)>>2]=e;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}K=(b+1048320|0)>>>16&8;L=b<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=10436+(e<<2)|0;c[w+(m+28)>>2]=e;c[w+(m+20)>>2]=0;c[w+(m+16)>>2]=0;a=c[2534]|0;d=1<>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break}b=c[b>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(f|0)){M=d;break j}else{e=e<<1;b=d}}if(a>>>0<(c[2537]|0)>>>0)Ma();else{c[a>>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break h}}else M=b;while(0);b=M+8|0;a=c[b>>2]|0;L=c[2537]|0;if(a>>>0>=L>>>0&M>>>0>=L>>>0){c[a+12>>2]=o;c[b>>2]=o;c[w+(m+8)>>2]=a;c[w+(m+12)>>2]=M;c[w+(m+24)>>2]=0;break}else Ma()}else{M=(c[2536]|0)+l|0;c[2536]=M;c[2539]=o;c[w+(m+4)>>2]=M|1}while(0);M=w+(n|8)|0;return M|0}else d=10580;while(1){a=c[d>>2]|0;if(a>>>0<=h>>>0?(b=c[d+4>>2]|0,e=a+b|0,e>>>0>h>>>0):0)break;d=c[d+8>>2]|0}f=a+(b+-39)|0;a=a+(b+-47+((f&7|0)==0?0:0-f&7))|0;f=h+16|0;a=a>>>0>>0?h:a;b=a+8|0;d=w+8|0;d=(d&7|0)==0?0:0-d&7;M=p+-40-d|0;c[2539]=w+d;c[2536]=M;c[w+(d+4)>>2]=M|1;c[w+(p+-36)>>2]=40;c[2540]=c[2655];d=a+4|0;c[d>>2]=27;c[b>>2]=c[2645];c[b+4>>2]=c[2646];c[b+8>>2]=c[2647];c[b+12>>2]=c[2648];c[2645]=w;c[2646]=p;c[2648]=0;c[2647]=b;b=a+28|0;c[b>>2]=7;if((a+32|0)>>>0>>0)do{M=b;b=b+4|0;c[b>>2]=7}while((M+8|0)>>>0>>0);if((a|0)!=(h|0)){g=a-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){a=b<<1;e=10172+(a<<2)|0;d=c[2533]|0;b=1<>2]|0;if(a>>>0<(c[2537]|0)>>>0)Ma();else{G=b;H=a}}else{c[2533]=d|b;G=10172+(a+2<<2)|0;H=e}c[G>>2]=h;c[H+12>>2]=h;c[h+8>>2]=H;c[h+12>>2]=e;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=10436+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;b=c[2534]|0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}b=c[d>>2]|0;k:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){I=d;break k}else{e=e<<1;b=d}}if(a>>>0<(c[2537]|0)>>>0)Ma();else{c[a>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else I=b;while(0);b=I+8|0;a=c[b>>2]|0;M=c[2537]|0;if(a>>>0>=M>>>0&I>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=I;c[h+24>>2]=0;break}else Ma()}}else{M=c[2537]|0;if((M|0)==0|w>>>0>>0)c[2537]=w;c[2645]=w;c[2646]=p;c[2648]=0;c[2542]=c[2651];c[2541]=-1;b=0;do{M=b<<1;L=10172+(M<<2)|0;c[10172+(M+3<<2)>>2]=L;c[10172+(M+2<<2)>>2]=L;b=b+1|0}while((b|0)!=32);M=w+8|0;M=(M&7|0)==0?0:0-M&7;L=p+-40-M|0;c[2539]=w+M;c[2536]=L;c[w+(M+4)>>2]=L|1;c[w+(p+-36)>>2]=40;c[2540]=c[2655]}while(0);b=c[2536]|0;if(b>>>0>q>>>0){L=b-q|0;c[2536]=L;M=c[2539]|0;c[2539]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}}c[(SP()|0)>>2]=12;M=0;return M|0}function $Q(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;if(!a)return;b=a+-8|0;i=c[2537]|0;if(b>>>0>>0)Ma();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)Ma();o=d&-8;q=a+(o+-8)|0;do if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0>>0)Ma();if((l|0)==(c[2538]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[2535]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=10172+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0>>0)Ma();if((c[e+12>>2]|0)!=(l|0))Ma()}if((d|0)==(e|0)){c[2533]=c[2533]&~(1<>>0>>0)Ma();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else Ma()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)Ma();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ma();b=f+12|0;if((c[b>>2]|0)!=(l|0))Ma();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else Ma()}while(0);if(h){b=c[a+(j+28)>>2]|0;d=10436+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[2534]=c[2534]&~(1<>>0<(c[2537]|0)>>>0)Ma();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[2537]|0;if(k>>>0>>0)Ma();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do if(b)if(b>>>0>>0)Ma();else{c[k+16>>2]=b;c[b+24>>2]=k;break}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[2537]|0)>>>0)Ma();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}while(0);if(u>>>0>=q>>>0)Ma();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))Ma();if(!(d&2)){if((q|0)==(c[2539]|0)){t=(c[2536]|0)+g|0;c[2536]=t;c[2539]=u;c[u+4>>2]=t|1;if((u|0)!=(c[2538]|0))return;c[2538]=0;c[2535]=0;return}if((q|0)==(c[2538]|0)){t=(c[2535]|0)+g|0;c[2535]=t;c[2538]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[2537]|0)>>>0)Ma();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[2537]|0)>>>0)Ma();e=d+12|0;if((c[e>>2]|0)!=(q|0))Ma();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else Ma()}while(0);if(h){b=c[a+(o+20)>>2]|0;d=10436+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[2534]=c[2534]&~(1<>>0<(c[2537]|0)>>>0)Ma();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[2537]|0;if(p>>>0>>0)Ma();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do if(b)if(b>>>0>>0)Ma();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[2537]|0)>>>0)Ma();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=10172+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[2537]|0)>>>0)Ma();if((c[e+12>>2]|0)!=(q|0))Ma()}if((d|0)==(e|0)){c[2533]=c[2533]&~(1<>>0<(c[2537]|0)>>>0)Ma();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else Ma()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[2538]|0)){c[2535]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=10172+(d<<2)|0;e=c[2533]|0;b=1<>2]|0;if(d>>>0<(c[2537]|0)>>>0)Ma();else{r=b;s=d}}else{c[2533]=e|b;r=10172+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<>>16&4;s=s<>>16&2;f=14-(q|r|f)+(s<>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=10436+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[2534]|0;e=1<>2]|0;b:do if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){d=b+16+(f>>>31<<2)|0;e=c[d>>2]|0;if(!e)break;if((c[e+4>>2]&-8|0)==(g|0)){t=e;break b}else{f=f<<1;b=e}}if(d>>>0<(c[2537]|0)>>>0)Ma();else{c[d>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b;while(0);b=t+8|0;d=c[b>>2]|0;s=c[2537]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else Ma()}else{c[2534]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}while(0);u=(c[2541]|0)+-1|0;c[2541]=u;if(!u)b=10588;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[2541]=-1;return}function aR(a,b){a=a|0;b=b|0;var d=0;if(a){d=_(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=_Q(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;kR(b|0,0,d|0)|0;return b|0}function bR(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=_Q(b)|0;return a|0}if(b>>>0>4294967231){c[(SP()|0)>>2]=12;a=0;return a|0}d=cR(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){a=d+8|0;return a|0}d=_Q(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;iR(d|0,a|0,(e>>>0>>0?e:b)|0)|0;$Q(a);a=d;return a|0}function 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;o=a+4|0;p=c[o>>2]|0;j=p&-8;l=a+j|0;i=c[2537]|0;d=p&3;if(!((d|0)!=1&a>>>0>=i>>>0&a>>>0>>0))Ma();e=a+(j|4)|0;f=c[e>>2]|0;if(!(f&1))Ma();if(!d){if(b>>>0<256){a=0;return a|0}if(j>>>0>=(b+4|0)>>>0?(j-b|0)>>>0<=c[2653]<<1>>>0:0)return a|0;a=0;return a|0}if(j>>>0>=b>>>0){d=j-b|0;if(d>>>0<=15)return a|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|3;c[e>>2]=c[e>>2]|1;dR(a+b|0,d);return a|0}if((l|0)==(c[2539]|0)){d=(c[2536]|0)+j|0;if(d>>>0<=b>>>0){a=0;return a|0}n=d-b|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|1;c[2539]=a+b;c[2536]=n;return a|0}if((l|0)==(c[2538]|0)){e=(c[2535]|0)+j|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|1;c[a+e>>2]=d;e=a+(e+4)|0;c[e>>2]=c[e>>2]&-2;e=a+b|0}else{c[o>>2]=p&1|e|2;e=a+(e+4)|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[2535]=d;c[2538]=e;return a|0}if(f&2){a=0;return a|0}m=(f&-8)+j|0;if(m>>>0>>0){a=0;return a|0}n=m-b|0;g=f>>>3;do if(f>>>0>=256){h=c[a+(j+24)>>2]|0;g=c[a+(j+12)>>2]|0;do if((g|0)==(l|0)){e=a+(j+20)|0;d=c[e>>2]|0;if(!d){e=a+(j+16)|0;d=c[e>>2]|0;if(!d){k=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ma();else{c[e>>2]=0;k=d;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ma();d=f+12|0;if((c[d>>2]|0)!=(l|0))Ma();e=g+8|0;if((c[e>>2]|0)==(l|0)){c[d>>2]=g;c[e>>2]=f;k=g;break}else Ma()}while(0);if(h){d=c[a+(j+28)>>2]|0;e=10436+(d<<2)|0;if((l|0)==(c[e>>2]|0)){c[e>>2]=k;if(!k){c[2534]=c[2534]&~(1<>>0<(c[2537]|0)>>>0)Ma();d=h+16|0;if((c[d>>2]|0)==(l|0))c[d>>2]=k;else c[h+20>>2]=k;if(!k)break}e=c[2537]|0;if(k>>>0>>0)Ma();c[k+24>>2]=h;d=c[a+(j+16)>>2]|0;do if(d)if(d>>>0>>0)Ma();else{c[k+16>>2]=d;c[d+24>>2]=k;break}while(0);d=c[a+(j+20)>>2]|0;if(d)if(d>>>0<(c[2537]|0)>>>0)Ma();else{c[k+20>>2]=d;c[d+24>>2]=k;break}}}else{f=c[a+(j+8)>>2]|0;e=c[a+(j+12)>>2]|0;d=10172+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ma();if((c[f+12>>2]|0)!=(l|0))Ma()}if((e|0)==(f|0)){c[2533]=c[2533]&~(1<>>0>>0)Ma();d=e+8|0;if((c[d>>2]|0)==(l|0))h=d;else Ma()}else h=e+8|0;c[f+12>>2]=e;c[h>>2]=f}while(0);if(n>>>0<16){c[o>>2]=m|p&1|2;b=a+(m|4)|0;c[b>>2]=c[b>>2]|1;return a|0}else{c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|3;p=a+(m|4)|0;c[p>>2]=c[p>>2]|1;dR(a+b|0,n);return a|0}return 0}function dR(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;q=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){k=c[a>>2]|0;if(!(d&3))return;n=a+(0-k)|0;m=k+b|0;j=c[2537]|0;if(n>>>0>>0)Ma();if((n|0)==(c[2538]|0)){e=a+(b+4)|0;d=c[e>>2]|0;if((d&3|0)!=3){t=n;h=m;break}c[2535]=m;c[e>>2]=d&-2;c[a+(4-k)>>2]=m|1;c[q>>2]=m;return}g=k>>>3;if(k>>>0<256){f=c[a+(8-k)>>2]|0;e=c[a+(12-k)>>2]|0;d=10172+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ma();if((c[f+12>>2]|0)!=(n|0))Ma()}if((e|0)==(f|0)){c[2533]=c[2533]&~(1<>>0>>0)Ma();d=e+8|0;if((c[d>>2]|0)==(n|0))i=d;else Ma()}else i=e+8|0;c[f+12>>2]=e;c[i>>2]=f;t=n;h=m;break}i=c[a+(24-k)>>2]|0;f=c[a+(12-k)>>2]|0;do if((f|0)==(n|0)){f=16-k|0;e=a+(f+4)|0;d=c[e>>2]|0;if(!d){e=a+f|0;d=c[e>>2]|0;if(!d){l=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ma();else{c[e>>2]=0;l=d;break}}else{g=c[a+(8-k)>>2]|0;if(g>>>0>>0)Ma();d=g+12|0;if((c[d>>2]|0)!=(n|0))Ma();e=f+8|0;if((c[e>>2]|0)==(n|0)){c[d>>2]=f;c[e>>2]=g;l=f;break}else Ma()}while(0);if(i){d=c[a+(28-k)>>2]|0;e=10436+(d<<2)|0;if((n|0)==(c[e>>2]|0)){c[e>>2]=l;if(!l){c[2534]=c[2534]&~(1<>>0<(c[2537]|0)>>>0)Ma();d=i+16|0;if((c[d>>2]|0)==(n|0))c[d>>2]=l;else c[i+20>>2]=l;if(!l){t=n;h=m;break}}f=c[2537]|0;if(l>>>0>>0)Ma();c[l+24>>2]=i;d=16-k|0;e=c[a+d>>2]|0;do if(e)if(e>>>0>>0)Ma();else{c[l+16>>2]=e;c[e+24>>2]=l;break}while(0);d=c[a+(d+4)>>2]|0;if(d)if(d>>>0<(c[2537]|0)>>>0)Ma();else{c[l+20>>2]=d;c[d+24>>2]=l;t=n;h=m;break}else{t=n;h=m}}else{t=n;h=m}}else{t=a;h=b}while(0);j=c[2537]|0;if(q>>>0>>0)Ma();d=a+(b+4)|0;e=c[d>>2]|0;if(!(e&2)){if((q|0)==(c[2539]|0)){s=(c[2536]|0)+h|0;c[2536]=s;c[2539]=t;c[t+4>>2]=s|1;if((t|0)!=(c[2538]|0))return;c[2538]=0;c[2535]=0;return}if((q|0)==(c[2538]|0)){s=(c[2535]|0)+h|0;c[2535]=s;c[2538]=t;c[t+4>>2]=s|1;c[t+s>>2]=s;return}h=(e&-8)+h|0;g=e>>>3;do if(e>>>0>=256){i=c[a+(b+24)>>2]|0;f=c[a+(b+12)>>2]|0;do if((f|0)==(q|0)){e=a+(b+20)|0;d=c[e>>2]|0;if(!d){e=a+(b+16)|0;d=c[e>>2]|0;if(!d){p=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ma();else{c[e>>2]=0;p=d;break}}else{g=c[a+(b+8)>>2]|0;if(g>>>0>>0)Ma();d=g+12|0;if((c[d>>2]|0)!=(q|0))Ma();e=f+8|0;if((c[e>>2]|0)==(q|0)){c[d>>2]=f;c[e>>2]=g;p=f;break}else Ma()}while(0);if(i){d=c[a+(b+28)>>2]|0;e=10436+(d<<2)|0;if((q|0)==(c[e>>2]|0)){c[e>>2]=p;if(!p){c[2534]=c[2534]&~(1<>>0<(c[2537]|0)>>>0)Ma();d=i+16|0;if((c[d>>2]|0)==(q|0))c[d>>2]=p;else c[i+20>>2]=p;if(!p)break}e=c[2537]|0;if(p>>>0>>0)Ma();c[p+24>>2]=i;d=c[a+(b+16)>>2]|0;do if(d)if(d>>>0>>0)Ma();else{c[p+16>>2]=d;c[d+24>>2]=p;break}while(0);d=c[a+(b+20)>>2]|0;if(d)if(d>>>0<(c[2537]|0)>>>0)Ma();else{c[p+20>>2]=d;c[d+24>>2]=p;break}}}else{f=c[a+(b+8)>>2]|0;e=c[a+(b+12)>>2]|0;d=10172+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ma();if((c[f+12>>2]|0)!=(q|0))Ma()}if((e|0)==(f|0)){c[2533]=c[2533]&~(1<>>0>>0)Ma();d=e+8|0;if((c[d>>2]|0)==(q|0))o=d;else Ma()}else o=e+8|0;c[f+12>>2]=e;c[o>>2]=f}while(0);c[t+4>>2]=h|1;c[t+h>>2]=h;if((t|0)==(c[2538]|0)){c[2535]=h;return}}else{c[d>>2]=e&-2;c[t+4>>2]=h|1;c[t+h>>2]=h}d=h>>>3;if(h>>>0<256){e=d<<1;g=10172+(e<<2)|0;f=c[2533]|0;d=1<>2]|0;if(e>>>0<(c[2537]|0)>>>0)Ma();else{r=d;s=e}}else{c[2533]=f|d;r=10172+(e+2<<2)|0;s=g}c[r>>2]=t;c[s+12>>2]=t;c[t+8>>2]=s;c[t+12>>2]=g;return}d=h>>>8;if(d)if(h>>>0>16777215)g=31;else{r=(d+1048320|0)>>>16&8;s=d<>>16&4;s=s<>>16&2;g=14-(q|r|g)+(s<>>15)|0;g=h>>>(g+7|0)&1|g<<1}else g=0;d=10436+(g<<2)|0;c[t+28>>2]=g;c[t+20>>2]=0;c[t+16>>2]=0;e=c[2534]|0;f=1<>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}d=c[d>>2]|0;a:do if((c[d+4>>2]&-8|0)!=(h|0)){g=h<<((g|0)==31?0:25-(g>>>1)|0);while(1){e=d+16+(g>>>31<<2)|0;f=c[e>>2]|0;if(!f)break;if((c[f+4>>2]&-8|0)==(h|0)){d=f;break a}else{g=g<<1;d=f}}if(e>>>0<(c[2537]|0)>>>0)Ma();c[e>>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}while(0);e=d+8|0;f=c[e>>2]|0;s=c[2537]|0;if(!(f>>>0>=s>>>0&d>>>0>=s>>>0))Ma();c[f+12>>2]=t;c[e>>2]=t;c[t+8>>2]=f;c[t+12>>2]=d;c[t+24>>2]=0;return}function eR(){}function fR(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(C=d,a-c>>>0|0)|0}function gR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return(C=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function hR(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<>>c-32|0}function iR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return lb(b|0,d|0,e|0)|0;f=b|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}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function jR(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 iR(b,c,d)|0;return b|0}function kR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|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 b-e|0}function lR(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<>>32-c;return a<>c;return a>>>c|(b&(1<>c-32|0}function nR(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)>>0]|0)+24|0}function oR(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return(C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function pR(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=fR(j^a,i^b,j,i)|0;g=C;a=f^j;b=e^i;return fR((uR(h,g,fR(f^c,e^d,f,e)|0,C,0)|0)^a,C^b,a,b)|0}function qR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=fR(h^a,g^b,h,g)|0;b=C;uR(a,b,fR(l^d,k^e,l,k)|0,C,j)|0;e=fR(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=C;i=f;return(C=d,e)|0}function rR(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=oR(e,f)|0;a=C;return(C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function sR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uR(a,b,c,d,0)|0}function tR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;uR(a,b,d,e,f)|0;i=g;return(C=c[f+4>>2]|0,c[f>>2]|0)|0}function Km(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0;G=i;i=i+96|0;z=G+80|0;p=G+76|0;h=G+72|0;A=G+68|0;B=G+64|0;x=G+60|0;n=G+56|0;E=G+52|0;D=G+48|0;u=G;o=G+44|0;q=G+40|0;k=G+36|0;l=G+85|0;v=G+32|0;m=G+28|0;s=G+24|0;j=G+20|0;r=G+84|0;y=G+16|0;w=G+12|0;t=G+8|0;c[p>>2]=b;c[h>>2]=e;c[A>>2]=f;c[B>>2]=g;c[x>>2]=c[(c[h>>2]|0)+20>>2];c[n>>2]=c[c[p>>2]>>2];c[c[B>>2]>>2]=0;if((c[(c[x>>2]|0)+68>>2]|0)<(c[(c[n>>2]|0)+24>>2]|0)?(c[(c[x>>2]|0)+68>>2]|0)!=(c[A>>2]|0):0){c[z>>2]=0;F=c[z>>2]|0;i=G;return F|0}b=(c[h>>2]|0)+24|0;g=c[b+4>>2]|0;e=u;c[e>>2]=c[b>>2];c[e+4>>2]=g;c[E>>2]=c[(c[x>>2]|0)+28>>2];e=u;g=(c[p>>2]|0)+32|0;if(!(!((c[e>>2]|0)!=(c[g>>2]|0)?1:(c[e+4>>2]|0)!=(c[g+4>>2]|0))?(d[(c[h>>2]|0)+32>>0]|0)==0:0))F=6;do if((F|0)==6){c[o>>2]=0;c[q>>2]=d[(c[n>>2]|0)+231>>0];c[k>>2]=0;a[l>>0]=0;c[m>>2]=c[h>>2];c[v>>2]=c[(c[h>>2]|0)+8>>2];while(1){if(!(c[v>>2]|0))break;if((c[c[v>>2]>>2]|0)==4)c[k>>2]=1;if((c[c[v>>2]>>2]|0)==1)c[m>>2]=c[v>>2];if(a[(c[v>>2]|0)+32>>0]|0)a[l>>0]=1;c[v>>2]=c[(c[v>>2]|0)+8>>2]}if(!(c[k>>2]|0)){c[z>>2]=0;F=c[z>>2]|0;i=G;return F|0}a:do if(c[(c[x>>2]|0)+40>>2]|0){c[j>>2]=d[(c[m>>2]|0)+32>>0];Mm(c[p>>2]|0,c[m>>2]|0,o);b:while(1){if(c[o>>2]|0)break a;while(1){if(!((a[(c[m>>2]|0)+32>>0]|0)!=0^1))break a;Nm(c[p>>2]|0,c[m>>2]|0,o);if(c[j>>2]|0)continue b;n=(c[m>>2]|0)+24|0;g=u;if(!(((c[n>>2]|0)!=(c[g>>2]|0)?1:(c[n+4>>2]|0)!=(c[g+4>>2]|0))&(c[o>>2]|0)==0))break a}}}while(0);c:do if((a[l>>0]|0)!=0&(c[o>>2]|0)==0)do{if(!((a[(c[m>>2]|0)+32>>0]|0)!=0^1))break c;Nm(c[p>>2]|0,c[m>>2]|0,o)}while((c[o>>2]|0)==0);while(0);if(c[o>>2]|0){c[z>>2]=c[o>>2];F=c[z>>2]|0;i=G;return F|0}c[s>>2]=1;c[v>>2]=c[m>>2];while(1){if(!(c[v>>2]|0))break;a[r>>0]=0;c[y>>2]=c[v>>2];if((c[c[y>>2]>>2]|0)==1)c[y>>2]=c[(c[y>>2]|0)+16>>2];c[w>>2]=c[(c[y>>2]|0)+20>>2];c[E>>2]=c[(c[w>>2]|0)+48>>2];g=(c[w>>2]|0)+56|0;o=c[g+4>>2]|0;h=u;c[h>>2]=c[g>>2];c[h+4>>2]=o;h=(c[(c[w>>2]|0)+4>>2]|0)!=0;d:do if((d[(c[p>>2]|0)+52>>0]|0)==(c[q>>2]|0)){if(h)h=(c[E>>2]|0)>>>0>=((c[c[w>>2]>>2]|0)+(c[(c[w>>2]|0)+4>>2]|0)|0)>>>0;else h=1;a[r>>0]=h&1;while(1){if((c[E>>2]|0)!=0?(g=(c[q>>2]|0)!=0?-1:1,n=u,o=(c[p>>2]|0)+32|0,o=fR(c[n>>2]|0,c[n+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0,rR(g|0,((g|0)<0)<<31>>31|0,o|0,C|0)|0,(C|0)>=0):0)break d;if(d[r>>0]|0)break d;Om(c[q>>2]|0,c[c[w>>2]>>2]|0,c[(c[w>>2]|0)+4>>2]|0,E,u,r)}}else{if(h)if(c[E>>2]|0)h=(c[E>>2]|0)>>>0<=(c[c[w>>2]>>2]|0)>>>0;else h=0;else h=1;a[r>>0]=h&1;while(1){if((c[E>>2]|0)!=0?(g=(c[q>>2]|0)!=0?-1:1,n=u,o=(c[p>>2]|0)+32|0,o=fR(c[n>>2]|0,c[n+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0,o=rR(g|0,((g|0)<0)<<31>>31|0,o|0,C|0)|0,g=C,!((g|0)>0|(g|0)==0&o>>>0>0)):0)break d;if(d[r>>0]|0)break d;Wl(c[q>>2]|0,c[c[w>>2]>>2]|0,c[(c[w>>2]|0)+4>>2]|0,E,u,t,r)}}while(0);c[(c[w>>2]|0)+48>>2]=c[E>>2];n=u;g=c[n+4>>2]|0;o=(c[w>>2]|0)+56|0;c[o>>2]=c[n>>2];c[o+4>>2]=g;if(!((d[r>>0]|0)==0?(g=u,o=(c[p>>2]|0)+32|0,!((c[g>>2]|0)!=(c[o>>2]|0)?1:(c[g+4>>2]|0)!=(c[o+4>>2]|0))):0))c[s>>2]=0;c[v>>2]=c[(c[v>>2]|0)+12>>2]}if(c[s>>2]|0){c[E>>2]=c[(c[x>>2]|0)+48>>2];break}else{c[E>>2]=0;break}}while(0);if(!(c[E>>2]|0)){c[z>>2]=0;F=c[z>>2]|0;i=G;return F|0}if((a[c[E>>2]>>0]|0)==1){c[E>>2]=(c[E>>2]|0)+1;h=c[E>>2]|0;if(d[c[E>>2]>>0]&128)h=Vl(h,D)|0;else{c[D>>2]=d[h>>0];h=1}c[E>>2]=(c[E>>2]|0)+h}else c[D>>2]=0;while(1){if((c[D>>2]|0)>=(c[A>>2]|0))break;Tl(0,E);if(!(a[c[E>>2]>>0]|0)){F=65;break}c[E>>2]=(c[E>>2]|0)+1;h=c[E>>2]|0;if(d[c[E>>2]>>0]&128)h=Vl(h,D)|0;else{c[D>>2]=d[h>>0];h=1}c[E>>2]=(c[E>>2]|0)+h}if((F|0)==65){c[z>>2]=0;F=c[z>>2]|0;i=G;return F|0}if(!(a[c[E>>2]>>0]|0))c[E>>2]=0;c[c[B>>2]>>2]=(c[A>>2]|0)==(c[D>>2]|0)?c[E>>2]|0:0;c[z>>2]=0;F=c[z>>2]|0;i=G;return F|0}function Lm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+8|0;g=h+4|0;e=h+12|0;f=h;c[d>>2]=b;c[g>>2]=c[c[d>>2]>>2];a[e>>0]=0;c[f>>2]=0;while(1){b=c[g>>2]|0;if(!(254&(a[c[g>>2]>>0]|a[e>>0])))break;c[g>>2]=b+1;a[e>>0]=a[b>>0]&128;if(a[e>>0]|0)continue;c[f>>2]=(c[f>>2]|0)+1}c[c[d>>2]>>2]=b;i=h;return c[f>>2]|0}function Mm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;k=m+8|0;j=m+4|0;l=m;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;if(!(c[g>>2]|0)){i=m;return}if(c[c[h>>2]>>2]|0){i=m;return}c[k>>2]=c[(c[g>>2]|0)+20>>2];if(c[k>>2]|0){Pm(c[k>>2]|0);if(c[(c[k>>2]|0)+40>>2]|0){c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[(c[k>>2]|0)+64>>2]|0))break;c[l>>2]=(c[k>>2]|0)+72+((c[j>>2]|0)*24|0);if(c[(c[l>>2]|0)+20>>2]|0)Ym(c[(c[l>>2]|0)+20>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+1}l=Zm(c[f>>2]|0,0,c[k>>2]|0)|0;c[c[h>>2]>>2]=l}c[(c[k>>2]|0)+8>>2]=0;l=(c[k>>2]|0)+16|0;c[l>>2]=0;c[l+4>>2]=0;c[(c[k>>2]|0)+48>>2]=0}l=(c[g>>2]|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;a[(c[g>>2]|0)+32>>0]=0;a[(c[g>>2]|0)+33>>0]=0;Mm(c[f>>2]|0,c[(c[g>>2]|0)+12>>2]|0,c[h>>2]|0);Mm(c[f>>2]|0,c[(c[g>>2]|0)+16>>2]|0,c[h>>2]|0);i=m;return}function Nm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+80|0;p=x+64|0;w=x+60|0;q=x+56|0;r=x+52|0;u=x+48|0;v=x+44|0;m=x+8|0;s=x+40|0;t=x+36|0;n=x+32|0;o=x+28|0;l=x;g=x+24|0;j=x+20|0;h=x+16|0;c[p>>2]=b;c[w>>2]=e;c[q>>2]=f;if(c[c[q>>2]>>2]|0){i=x;return}c[r>>2]=d[(c[p>>2]|0)+52>>0];a[(c[w>>2]|0)+33>>0]=1;switch(c[c[w>>2]>>2]|0){case 3:case 1:{c[u>>2]=c[(c[w>>2]|0)+12>>2];c[v>>2]=c[(c[w>>2]|0)+16>>2];if(a[(c[u>>2]|0)+34>>0]|0){Nm(c[p>>2]|0,c[v>>2]|0,c[q>>2]|0);s=(c[v>>2]|0)+24|0;t=c[s+4>>2]|0;u=(c[w>>2]|0)+24|0;c[u>>2]=c[s>>2];c[u+4>>2]=t;a[(c[w>>2]|0)+32>>0]=a[(c[v>>2]|0)+32>>0]|0;i=x;return}o=(a[(c[v>>2]|0)+34>>0]|0)!=0;Nm(c[p>>2]|0,c[u>>2]|0,c[q>>2]|0);if(o){s=(c[u>>2]|0)+24|0;t=c[s+4>>2]|0;v=(c[w>>2]|0)+24|0;c[v>>2]=c[s>>2];c[v+4>>2]=t;a[(c[w>>2]|0)+32>>0]=a[(c[u>>2]|0)+32>>0]|0;i=x;return}Nm(c[p>>2]|0,c[v>>2]|0,c[q>>2]|0);while(1){if(a[(c[u>>2]|0)+32>>0]|0)break;if(a[(c[v>>2]|0)+32>>0]|0)break;if(c[c[q>>2]>>2]|0)break;o=(c[r>>2]|0)!=0?-1:1;l=(c[u>>2]|0)+24|0;n=(c[v>>2]|0)+24|0;n=fR(c[l>>2]|0,c[l+4>>2]|0,c[n>>2]|0,c[n+4>>2]|0)|0;n=rR(o|0,((o|0)<0)<<31>>31|0,n|0,C|0)|0;o=m;c[o>>2]=n;c[o+4>>2]=C;o=m;if((c[o>>2]|0)==0&(c[o+4>>2]|0)==0)break;b=c[p>>2]|0;if((c[m+4>>2]|0)<0){Nm(b,c[u>>2]|0,c[q>>2]|0);continue}else{Nm(b,c[v>>2]|0,c[q>>2]|0);continue}}n=(c[u>>2]|0)+24|0;o=c[n+4>>2]|0;r=(c[w>>2]|0)+24|0;c[r>>2]=c[n>>2];c[r+4>>2]=o;if(d[(c[u>>2]|0)+32>>0]|0)b=1;else b=(d[(c[v>>2]|0)+32>>0]|0)!=0;a[(c[w>>2]|0)+32>>0]=b&1;if((c[c[w>>2]>>2]|0)!=1){i=x;return}if(!(d[(c[w>>2]|0)+32>>0]|0)){i=x;return}a:do if((c[(c[v>>2]|0)+20>>2]|0)!=0?(c[c[(c[v>>2]|0)+20>>2]>>2]|0)!=0:0){c[s>>2]=c[(c[v>>2]|0)+20>>2];while(1){if(c[c[q>>2]>>2]|0)break a;if(d[(c[v>>2]|0)+32>>0]|0)break a;kR(c[(c[s>>2]|0)+28>>2]|0,0,c[(c[s>>2]|0)+32>>2]|0)|0;Nm(c[p>>2]|0,c[v>>2]|0,c[q>>2]|0)}}while(0);if(!(c[(c[u>>2]|0)+20>>2]|0)){i=x;return}if(!(c[c[(c[u>>2]|0)+20>>2]>>2]|0)){i=x;return}c[t>>2]=c[(c[u>>2]|0)+20>>2];while(1){if(c[c[q>>2]>>2]|0){k=53;break}if(d[(c[u>>2]|0)+32>>0]|0){k=53;break}kR(c[(c[t>>2]|0)+28>>2]|0,0,c[(c[t>>2]|0)+32>>2]|0)|0;Nm(c[p>>2]|0,c[u>>2]|0,c[q>>2]|0)}if((k|0)==53){i=x;return}break}case 4:{c[n>>2]=c[(c[w>>2]|0)+12>>2];c[o>>2]=c[(c[w>>2]|0)+16>>2];v=(c[r>>2]|0)!=0?-1:1;t=(c[n>>2]|0)+24|0;u=(c[o>>2]|0)+24|0;u=fR(c[t>>2]|0,c[t+4>>2]|0,c[u>>2]|0,c[u+4>>2]|0)|0;u=rR(v|0,((v|0)<0)<<31>>31|0,u|0,C|0)|0;v=l;c[v>>2]=u;c[v+4>>2]=C;do if((d[(c[o>>2]|0)+32>>0]|0)==0?!((c[l+4>>2]|0)<0?(d[(c[n>>2]|0)+32>>0]|0)==0:0):0){if((d[(c[n>>2]|0)+32>>0]|0)==0?(v=l,u=c[v+4>>2]|0,!((d[(c[o>>2]|0)+32>>0]|0)==0&((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0))):0){Nm(c[p>>2]|0,c[n>>2]|0,c[q>>2]|0);Nm(c[p>>2]|0,c[o>>2]|0,c[q>>2]|0);break}Nm(c[p>>2]|0,c[o>>2]|0,c[q>>2]|0)}else k=33;while(0);if((k|0)==33)Nm(c[p>>2]|0,c[n>>2]|0,c[q>>2]|0); +if(d[(c[n>>2]|0)+32>>0]|0)b=(d[(c[o>>2]|0)+32>>0]|0)!=0;else b=0;a[(c[w>>2]|0)+32>>0]=b&1;v=(c[r>>2]|0)!=0?-1:1;t=(c[n>>2]|0)+24|0;u=(c[o>>2]|0)+24|0;u=fR(c[t>>2]|0,c[t+4>>2]|0,c[u>>2]|0,c[u+4>>2]|0)|0;u=rR(v|0,((v|0)<0)<<31>>31|0,u|0,C|0)|0;v=l;c[v>>2]=u;c[v+4>>2]=C;if((d[(c[o>>2]|0)+32>>0]|0)==0?!((c[l+4>>2]|0)<0?(d[(c[n>>2]|0)+32>>0]|0)==0:0):0){u=(c[o>>2]|0)+24|0;v=c[u+4>>2]|0;w=(c[w>>2]|0)+24|0;c[w>>2]=c[u>>2];c[w+4>>2]=v;i=x;return}u=(c[n>>2]|0)+24|0;v=c[u+4>>2]|0;w=(c[w>>2]|0)+24|0;c[w>>2]=c[u>>2];c[w+4>>2]=v;i=x;return}case 2:{c[g>>2]=c[(c[w>>2]|0)+12>>2];c[j>>2]=c[(c[w>>2]|0)+16>>2];if(!(d[(c[j>>2]|0)+33>>0]|0))Nm(c[p>>2]|0,c[j>>2]|0,c[q>>2]|0);Nm(c[p>>2]|0,c[g>>2]|0,c[q>>2]|0);b:do if(!(d[(c[g>>2]|0)+32>>0]|0))while(1){if(c[c[q>>2]>>2]|0)break b;if(a[(c[j>>2]|0)+32>>0]|0)break b;u=(c[r>>2]|0)!=0?-1:1;t=(c[g>>2]|0)+24|0;v=(c[j>>2]|0)+24|0;v=fR(c[t>>2]|0,c[t+4>>2]|0,c[v>>2]|0,c[v+4>>2]|0)|0;v=rR(u|0,((u|0)<0)<<31>>31|0,v|0,C|0)|0;u=C;if(!((u|0)>0|(u|0)==0&v>>>0>0))break b;Nm(c[p>>2]|0,c[j>>2]|0,c[q>>2]|0)}while(0);t=(c[g>>2]|0)+24|0;u=c[t+4>>2]|0;v=(c[w>>2]|0)+24|0;c[v>>2]=c[t>>2];c[v+4>>2]=u;a[(c[w>>2]|0)+32>>0]=a[(c[g>>2]|0)+32>>0]|0;i=x;return}default:{c[h>>2]=c[(c[w>>2]|0)+20>>2];Pm(c[h>>2]|0);u=Qm(c[p>>2]|0,c[h>>2]|0,(c[w>>2]|0)+32|0)|0;c[c[q>>2]>>2]=u;u=(c[h>>2]|0)+16|0;v=c[u+4>>2]|0;w=(c[w>>2]|0)+24|0;c[w>>2]=c[u>>2];c[w+4>>2]=v;i=x;return}}}function Om(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;j=r+32|0;k=r+28|0;l=r+24|0;m=r+20|0;n=r+16|0;o=r+12|0;q=r+8|0;p=r;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[q>>2]=c[c[m>>2]>>2];if(!(c[q>>2]|0)){c[q>>2]=c[k>>2];p=Ul(c[q>>2]|0,c[n>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+p;p=c[q>>2]|0;q=c[m>>2]|0;c[q>>2]=p;i=r;return}Zl(0,q);while(1){if((c[q>>2]|0)>>>0<((c[k>>2]|0)+(c[l>>2]|0)|0)>>>0)b=(a[c[q>>2]>>0]|0)==0;else b=0;d=c[q>>2]|0;if(!b)break;c[q>>2]=d+1}if(d>>>0>=((c[k>>2]|0)+(c[l>>2]|0)|0)>>>0){a[c[o>>2]>>0]=1;p=c[q>>2]|0;q=c[m>>2]|0;c[q>>2]=p;i=r;return}else{l=Ul(c[q>>2]|0,p)|0;c[q>>2]=(c[q>>2]|0)+l;l=(c[j>>2]|0)!=0?-1:1;o=p;o=rR(l|0,((l|0)<0)<<31>>31|0,c[o>>2]|0,c[o+4>>2]|0)|0;p=c[n>>2]|0;n=p;o=gR(c[n>>2]|0,c[n+4>>2]|0,o|0,C|0)|0;c[p>>2]=o;c[p+4>>2]=C;p=c[q>>2]|0;q=c[m>>2]|0;c[q>>2]=p;i=r;return}}function Pm(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if(c[(c[b>>2]|0)+24>>2]|0)Kd(c[(c[b>>2]|0)+28>>2]|0);c[(c[b>>2]|0)+28>>2]=0;c[(c[b>>2]|0)+32>>2]=0;c[(c[b>>2]|0)+24>>2]=0;i=d;return}function Qm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;m=l+20|0;f=l+16|0;g=l+12|0;k=l+8|0;h=l+4|0;j=l;c[m>>2]=a;c[f>>2]=b;c[g>>2]=e;c[k>>2]=0;c[h>>2]=c[f>>2];c[j>>2]=c[c[m>>2]>>2];b=c[m>>2]|0;if(c[(c[f>>2]|0)+40>>2]|0){c[k>>2]=Rm(b,c[f>>2]|0,c[g>>2]|0)|0;m=c[k>>2]|0;i=l;return m|0}if((d[b+52>>0]|0|0)!=(d[(c[j>>2]|0)+231>>0]|0|0)?(c[(c[h>>2]|0)+4>>2]|0)!=0:0){Wl(d[(c[j>>2]|0)+231>>0]|0,c[c[h>>2]>>2]|0,c[(c[h>>2]|0)+4>>2]|0,(c[h>>2]|0)+8|0,(c[h>>2]|0)+16|0,(c[h>>2]|0)+32|0,c[g>>2]|0);c[(c[h>>2]|0)+28>>2]=c[(c[h>>2]|0)+8>>2];m=c[k>>2]|0;i=l;return m|0}Sm(c[j>>2]|0,c[h>>2]|0,c[g>>2]|0);m=c[k>>2]|0;i=l;return m|0}function Rm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0;E=i;i=i+192|0;h=E+172|0;g=E+168|0;j=E+164|0;k=E+160|0;A=E+156|0;v=E+152|0;z=E+148|0;o=E+176|0;n=E+144|0;l=E+8|0;p=E+140|0;r=E;q=E+136|0;u=E+132|0;s=E+128|0;m=E+124|0;w=E+120|0;y=E+116|0;x=E+112|0;t=E+108|0;B=E+104|0;c[g>>2]=b;c[j>>2]=e;c[k>>2]=f;c[A>>2]=0;c[v>>2]=c[j>>2];c[z>>2]=c[c[g>>2]>>2];a[o>>0]=0;if((c[(c[j>>2]|0)+64>>2]|0)==1?(c[(c[j>>2]|0)+40>>2]|0)!=0:0){c[A>>2]=Tm(c[z>>2]|0,c[(c[j>>2]|0)+72+20>>2]|0,(c[v>>2]|0)+16|0,(c[v>>2]|0)+28|0,(c[v>>2]|0)+32|0)|0;if(!(c[(c[v>>2]|0)+28>>2]|0))a[o>>0]=1}else D=5;a:do if((D|0)==5){c[n>>2]=d[(c[g>>2]|0)+52>>0];g=l;e=g+96|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(e|0));while(1){if(d[o>>0]|0)break a;c[p>>2]=0;f=r;c[f>>2]=0;c[f+4>>2]=0;c[q>>2]=0;while(1){if(c[A>>2]|0)break;if((c[q>>2]|0)>=(c[(c[j>>2]|0)+64>>2]|0))break;if(d[o>>0]|0)break;c[A>>2]=Um(c[z>>2]|0,c[j>>2]|0,c[q>>2]|0,l+((c[q>>2]|0)*24|0)|0,o)|0;do if(!(c[l+((c[q>>2]|0)*24|0)>>2]|0)){if((c[p>>2]|0)!=0?(b=(c[n>>2]|0)!=0?-1:1,e=r,f=l+((c[q>>2]|0)*24|0)+8|0,f=fR(c[e>>2]|0,c[e+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0,rR(b|0,((b|0)<0)<<31>>31|0,f|0,C|0)|0,(C|0)>=0):0)break;e=l+((c[q>>2]|0)*24|0)+8|0;b=c[e+4>>2]|0;f=r;c[f>>2]=c[e>>2];c[f+4>>2]=b;c[p>>2]=1}while(0);c[q>>2]=(c[q>>2]|0)+1}c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[(c[j>>2]|0)+64>>2]|0))break;while(1){if(c[A>>2]|0)break;if(d[o>>0]|0)break;if(c[l+((c[q>>2]|0)*24|0)>>2]|0)break;b=(c[n>>2]|0)!=0?-1:1;e=l+((c[q>>2]|0)*24|0)+8|0;f=r;f=fR(c[e>>2]|0,c[e+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;rR(b|0,((b|0)<0)<<31>>31|0,f|0,C|0)|0;if((C|0)>=0)break;c[A>>2]=Um(c[z>>2]|0,c[j>>2]|0,c[q>>2]|0,l+((c[q>>2]|0)*24|0)|0,o)|0;b=(c[n>>2]|0)!=0?-1:1;e=l+((c[q>>2]|0)*24|0)+8|0;f=r;f=fR(c[e>>2]|0,c[e+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;f=rR(b|0,((b|0)<0)<<31>>31|0,f|0,C|0)|0;b=C;if(!((b|0)>0|(b|0)==0&f>>>0>0))continue;e=l+((c[q>>2]|0)*24|0)+8|0;b=c[e+4>>2]|0;f=r;c[f>>2]=c[e>>2];c[f+4>>2]=b;c[q>>2]=0}c[q>>2]=(c[q>>2]|0)+1}if(d[o>>0]|0)continue;c[u>>2]=0;c[s>>2]=c[l+(((c[(c[j>>2]|0)+64>>2]|0)-1|0)*24|0)+20>>2];c[m>>2]=Id((c[s>>2]|0)+1|0)|0;if(!(c[m>>2]|0))break;iR(c[m>>2]|0,c[l+(((c[(c[j>>2]|0)+64>>2]|0)-1|0)*24|0)+16>>2]|0,(c[s>>2]|0)+1|0)|0;c[q>>2]=0;while(1){if((c[q>>2]|0)>=((c[(c[j>>2]|0)+64>>2]|0)-1|0))break;if(!(c[l+((c[q>>2]|0)*24|0)>>2]|0)){c[w>>2]=c[l+((c[q>>2]|0)*24|0)+16>>2];c[y>>2]=c[m>>2];c[x>>2]=c[m>>2];c[t>>2]=(c[(c[j>>2]|0)+64>>2]|0)-1-(c[q>>2]|0);c[B>>2]=Vm(x,c[t>>2]|0,0,1,w,y)|0;if(!(c[B>>2]|0))break;c[u>>2]=(c[x>>2]|0)-(c[m>>2]|0)}c[q>>2]=(c[q>>2]|0)+1}if((c[q>>2]|0)==((c[(c[j>>2]|0)+64>>2]|0)-1|0)){D=35;break}Kd(c[m>>2]|0)}if((D|0)==35){z=r;B=c[z+4>>2]|0;D=(c[v>>2]|0)+16|0;c[D>>2]=c[z>>2];c[D+4>>2]=B;c[(c[v>>2]|0)+28>>2]=c[m>>2];c[(c[v>>2]|0)+32>>2]=c[u>>2];c[(c[v>>2]|0)+24>>2]=1;break}c[h>>2]=7;D=c[h>>2]|0;i=E;return D|0}while(0);a[c[k>>2]>>0]=a[o>>0]|0;c[h>>2]=c[A>>2];D=c[h>>2]|0;i=E;return D|0}function Sm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+24|0;j=n+20|0;k=n+16|0;m=n+12|0;l=n+8|0;h=n;c[g>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0);e=c[j>>2]|0;if(c[(c[j>>2]|0)+8>>2]|0)c[m>>2]=c[e+8>>2];else c[m>>2]=c[e>>2];if((c[m>>2]|0)>>>0>=(c[l>>2]|0)>>>0){a[c[k>>2]>>0]=1;i=n;return}f=Ul(c[m>>2]|0,h)|0;c[m>>2]=(c[m>>2]|0)+f;if((d[(c[g>>2]|0)+231>>0]|0)!=0?(c[(c[j>>2]|0)+8>>2]|0)!=0:0){g=h;h=(c[j>>2]|0)+16|0;f=h;g=fR(c[f>>2]|0,c[f+4>>2]|0,c[g>>2]|0,c[g+4>>2]|0)|0;c[h>>2]=g;c[h+4>>2]=C}else{g=h;h=(c[j>>2]|0)+16|0;f=h;g=gR(c[f>>2]|0,c[f+4>>2]|0,c[g>>2]|0,c[g+4>>2]|0)|0;c[h>>2]=g;c[h+4>>2]=C}c[(c[j>>2]|0)+28>>2]=c[m>>2];Zl(0,m);c[(c[j>>2]|0)+32>>2]=(c[m>>2]|0)-(c[(c[j>>2]|0)+28>>2]|0);while(1){if((c[m>>2]|0)>>>0<(c[l>>2]|0)>>>0)b=(a[c[m>>2]>>0]|0)==0;else b=0;e=c[m>>2]|0;if(!b)break;c[m>>2]=e+1}c[(c[j>>2]|0)+8>>2]=e;a[c[k>>2]>>0]=0;i=n;return}function Tm(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+64|0;p=x+60|0;h=x+56|0;j=x+52|0;q=x+48|0;r=x+44|0;s=x+40|0;m=x+36|0;k=x+32|0;o=x+28|0;n=x+24|0;w=x+20|0;v=x+16|0;u=x+12|0;l=x+8|0;t=x;c[h>>2]=a;c[j>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[m>>2]=c[(c[j>>2]|0)+8>>2];c[k>>2]=c[c[j>>2]>>2];c[o>>2]=(d[(c[h>>2]|0)+231>>0]|0|0)!=0?182:183;if(!(c[m>>2]|0)){c[c[r>>2]>>2]=0;c[p>>2]=0;w=c[p>>2]|0;i=x;return w|0}while(1){c[n>>2]=c[c[c[j>>2]>>2]>>2];if(!(c[(c[n>>2]|0)+80>>2]|0)){h=4;break}f=(c[c[k>>2]>>2]|0)+88|0;e=c[f+4>>2]|0;g=t;c[g>>2]=c[f>>2];c[g+4>>2]=e;c[w>>2]=Ql(c[h>>2]|0,c[c[k>>2]>>2]|0,v,u)|0;c[l>>2]=1;while(1){if(c[w>>2]|0)break;if((c[l>>2]|0)>=(c[m>>2]|0))break;if(!(c[(c[(c[k>>2]|0)+(c[l>>2]<<2)>>2]|0)+80>>2]|0))break;e=(c[(c[k>>2]|0)+(c[l>>2]<<2)>>2]|0)+88|0;g=t;if(!((c[e>>2]|0)==(c[g>>2]|0)?(c[e+4>>2]|0)==(c[g+4>>2]|0):0))break;c[w>>2]=Ql(c[h>>2]|0,c[(c[k>>2]|0)+(c[l>>2]<<2)>>2]|0,0,0)|0;c[l>>2]=(c[l>>2]|0)+1}if(c[w>>2]|0){h=12;break}Nl(c[c[j>>2]>>2]|0,c[m>>2]|0,c[l>>2]|0,c[o>>2]|0);if((c[u>>2]|0)>0?(c[(c[c[k>>2]>>2]|0)+56>>2]|0)!=0:0){c[w>>2]=Ol(c[j>>2]|0,c[v>>2]|0,(c[u>>2]|0)+1|0)|0;if(c[w>>2]|0){h=16;break}c[v>>2]=c[(c[j>>2]|0)+16>>2]}if((c[(c[j>>2]|0)+24>>2]|0)>=0)Rl(c[(c[j>>2]|0)+24>>2]|0,1,v,u);if((c[u>>2]|0)>0){h=21;break}}if((h|0)==4)c[c[r>>2]>>2]=0;else if((h|0)==12){c[p>>2]=c[w>>2];w=c[p>>2]|0;i=x;return w|0}else if((h|0)==16){c[p>>2]=c[w>>2];w=c[p>>2]|0;i=x;return w|0}else if((h|0)==21){c[c[r>>2]>>2]=c[v>>2];v=c[t+4>>2]|0;w=c[q>>2]|0;c[w>>2]=c[t>>2];c[w+4>>2]=v;c[c[s>>2]>>2]=c[u>>2]}c[p>>2]=0;w=c[p>>2]|0;i=x;return w|0}function Um(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;h=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;o=p+4|0;n=p;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[o>>2]=0;if((c[(c[j>>2]|0)+44>>2]|0)==(c[k>>2]|0)){Sm(c[h>>2]|0,c[j>>2]|0,c[m>>2]|0);c[(c[l>>2]|0)+16>>2]=c[(c[j>>2]|0)+28>>2];c[(c[l>>2]|0)+20>>2]=c[(c[j>>2]|0)+32>>2];b=(c[j>>2]|0)+16|0;n=c[b+4>>2]|0;g=(c[l>>2]|0)+8|0;c[g>>2]=c[b>>2];c[g+4>>2]=n;o=c[o>>2]|0;i=p;return o|0}c[n>>2]=(c[j>>2]|0)+72+((c[k>>2]|0)*24|0);if(!(c[(c[n>>2]|0)+20>>2]|0)){c[c[l>>2]>>2]=1;o=c[o>>2]|0;i=p;return o|0}c[o>>2]=Tm(c[h>>2]|0,c[(c[n>>2]|0)+20>>2]|0,(c[l>>2]|0)+8|0,(c[l>>2]|0)+16|0,(c[l>>2]|0)+20|0)|0;if(c[(c[l>>2]|0)+16>>2]|0){o=c[o>>2]|0;i=p;return o|0}a[c[m>>2]>>0]=1;o=c[o>>2]|0;i=p;return o|0}function Vm(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;D=i;i=i+96|0;k=D+80|0;l=D+76|0;m=D+72|0;n=D+68|0;o=D+64|0;p=D+60|0;q=D+56|0;x=D+52|0;y=D+48|0;z=D+44|0;r=D+40|0;s=D+36|0;A=D+32|0;v=D+24|0;t=D+16|0;u=D+8|0;w=D;c[l>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=j;c[x>>2]=c[c[l>>2]>>2];c[y>>2]=c[c[p>>2]>>2];c[z>>2]=c[c[q>>2]>>2];c[r>>2]=0;c[s>>2]=0;if((a[c[y>>2]>>0]|0)==1){c[y>>2]=(c[y>>2]|0)+1;g=c[y>>2]|0;if(d[c[y>>2]>>0]&128)g=Vl(g,r)|0;else{c[r>>2]=d[g>>0];g=1}c[y>>2]=(c[y>>2]|0)+g}if((a[c[z>>2]>>0]|0)==1){c[z>>2]=(c[z>>2]|0)+1;g=c[z>>2]|0;if(d[c[z>>2]>>0]&128)g=Vl(g,s)|0;else{c[s>>2]=d[g>>0];g=1}c[z>>2]=(c[z>>2]|0)+g}while(1){if((c[r>>2]|0)!=(c[s>>2]|0))if((c[r>>2]|0)<(c[s>>2]|0)){Tl(0,y);if(!(a[c[y>>2]>>0]|0))break;c[y>>2]=(c[y>>2]|0)+1;g=c[y>>2]|0;if(d[c[y>>2]>>0]&128)g=Vl(g,r)|0;else{c[r>>2]=d[g>>0];g=1}c[y>>2]=(c[y>>2]|0)+g;continue}else{Tl(0,z);if(!(a[c[z>>2]>>0]|0))break;c[z>>2]=(c[z>>2]|0)+1;g=c[z>>2]|0;if(d[c[z>>2]>>0]&128)g=Vl(g,s)|0;else{c[s>>2]=d[g>>0];g=1}c[z>>2]=(c[z>>2]|0)+g;continue}c[A>>2]=c[x>>2];j=v;c[j>>2]=0;c[j+4>>2]=0;j=t;c[j>>2]=0;c[j+4>>2]=0;j=u;c[j>>2]=0;c[j+4>>2]=0;if(c[r>>2]|0){j=c[x>>2]|0;c[x>>2]=j+1;a[j>>0]=1;j=c[r>>2]|0;j=El(c[x>>2]|0,j,((j|0)<0)<<31>>31)|0;c[x>>2]=(c[x>>2]|0)+j}Wm(y,t);j=t;j=fR(c[j>>2]|0,c[j+4>>2]|0,2,0)|0;h=t;c[h>>2]=j;c[h+4>>2]=C;Wm(z,u);h=u;h=fR(c[h>>2]|0,c[h+4>>2]|0,2,0)|0;j=u;c[j>>2]=h;c[j+4>>2]=C;while(1){j=u;b=c[j>>2]|0;j=c[j+4>>2]|0;e=t;h=c[m>>2]|0;h=gR(c[e>>2]|0,c[e+4>>2]|0,h|0,((h|0)<0)<<31>>31|0)|0;if(!((b|0)==(h|0)&(j|0)==(C|0))){if(((c[o>>2]|0)==0?(h=u,e=c[h+4>>2]|0,j=t,b=c[j+4>>2]|0,(e|0)>(b|0)|((e|0)==(b|0)?(c[h>>2]|0)>>>0>(c[j>>2]|0)>>>0:0)):0)?(e=u,h=c[e>>2]|0,e=c[e+4>>2]|0,b=t,j=c[m>>2]|0,j=gR(c[b>>2]|0,c[b+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0,b=C,(e|0)<(b|0)|(e|0)==(b|0)&h>>>0<=j>>>0):0)B=19}else B=19;if((B|0)==19){B=0;f=(c[n>>2]|0)!=0;e=t;b=u;j=f?c[e+4>>2]|0:c[b+4>>2]|0;h=w;c[h>>2]=f?c[e>>2]|0:c[b>>2]|0;c[h+4>>2]=j;h=w;h=gR(c[h>>2]|0,c[h+4>>2]|0,2,0)|0;Xm(x,v,h,C);h=v;h=fR(c[h>>2]|0,c[h+4>>2]|0,2,0)|0;j=v;c[j>>2]=h;c[j+4>>2]=C;c[A>>2]=0}if(!((c[n>>2]|0)==0?(e=u,h=c[e>>2]|0,e=c[e+4>>2]|0,b=t,j=c[m>>2]|0,j=gR(c[b>>2]|0,c[b+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0,b=C,(e|0)<(b|0)|(e|0)==(b|0)&h>>>0<=j>>>0):0))B=22;if((B|0)==22?(B=0,h=u,e=c[h+4>>2]|0,j=t,b=c[j+4>>2]|0,!((e|0)<(b|0)|((e|0)==(b|0)?(c[h>>2]|0)>>>0<=(c[j>>2]|0)>>>0:0))):0){if(!(a[c[y>>2]>>0]&254))break;Wm(y,t);h=t;h=fR(c[h>>2]|0,c[h+4>>2]|0,2,0)|0;j=t;c[j>>2]=h;c[j+4>>2]=C;continue}if(!(a[c[z>>2]>>0]&254))break;Wm(z,u);h=u;h=fR(c[h>>2]|0,c[h+4>>2]|0,2,0)|0;j=u;c[j>>2]=h;c[j+4>>2]=C}if(c[A>>2]|0)c[x>>2]=c[A>>2];Tl(0,y);Tl(0,z);if(!(a[c[y>>2]>>0]|0))break;if(!(a[c[z>>2]>>0]|0))break;c[y>>2]=(c[y>>2]|0)+1;g=c[y>>2]|0;if(d[c[y>>2]>>0]&128)g=Vl(g,r)|0;else{c[r>>2]=d[g>>0];g=1}c[y>>2]=(c[y>>2]|0)+g;c[z>>2]=(c[z>>2]|0)+1;g=c[z>>2]|0;if(d[c[z>>2]>>0]&128)g=Vl(g,s)|0;else{c[s>>2]=d[g>>0];g=1}c[z>>2]=(c[z>>2]|0)+g}Zl(0,z);Zl(0,y);c[c[p>>2]>>2]=c[y>>2];c[c[q>>2]>>2]=c[z>>2];if((c[c[l>>2]>>2]|0)==(c[x>>2]|0)){c[k>>2]=0;B=c[k>>2]|0;i=D;return B|0}else{B=c[x>>2]|0;c[x>>2]=B+1;a[B>>0]=0;c[c[l>>2]>>2]=c[x>>2];c[k>>2]=1;B=c[k>>2]|0;i=D;return B|0}return 0}function Wm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;g=d+12|0;e=d+8|0;f=d;c[g>>2]=a;c[e>>2]=b;a=Ul(c[c[g>>2]>>2]|0,f)|0;b=c[g>>2]|0;c[b>>2]=(c[b>>2]|0)+a;b=f;a=c[e>>2]|0;e=a;b=gR(c[e>>2]|0,c[e+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;c[a>>2]=b;c[a+4>>2]=C;i=d;return}function Xm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;j=f+12|0;g=f+8|0;h=f;c[j>>2]=a;c[g>>2]=b;a=h;c[a>>2]=d;c[a+4>>2]=e;e=c[c[j>>2]>>2]|0;a=h;b=c[g>>2]|0;b=fR(c[a>>2]|0,c[a+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;b=El(e,b,C)|0;e=c[j>>2]|0;c[e>>2]=(c[e>>2]|0)+b;e=h;b=c[e+4>>2]|0;a=c[g>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=b;i=f;return}function Ym(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[(c[b>>2]|0)+8>>2]=0;c[(c[b>>2]|0)+28>>2]=1;c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+4>>2]|0))break;c[(c[(c[c[b>>2]>>2]|0)+(c[d>>2]<<2)>>2]|0)+80>>2]=0;c[(c[(c[c[b>>2]>>2]|0)+(c[d>>2]<<2)>>2]|0)+84>>2]=0;a=(c[(c[c[b>>2]>>2]|0)+(c[d>>2]<<2)>>2]|0)+88|0;c[a>>2]=0;c[a+4>>2]=0;c[d>>2]=(c[d>>2]|0)+1}i=e;return 0}function Zm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;f=s+44|0;t=s+40|0;l=s+36|0;p=s+32|0;r=s+28|0;m=s+24|0;g=s+20|0;h=s+16|0;j=s+12|0;n=s+8|0;q=s+4|0;o=s;c[f>>2]=a;c[t>>2]=b;c[l>>2]=e;c[p>>2]=c[c[f>>2]>>2];c[r>>2]=0;c[g>>2]=0;if(((c[t>>2]|0)!=0?(d[(c[f>>2]|0)+52>>0]|0|0)==(d[(c[p>>2]|0)+231>>0]|0|0):0)?(c[(c[l>>2]|0)+64>>2]|0)<=4:0)b=(c[(c[l>>2]|0)+64>>2]|0)>0;else b=0;c[h>>2]=b&1;c[m>>2]=0;while(1){if((c[h>>2]|0)!=1)break;if((c[m>>2]|0)>=(c[(c[l>>2]|0)+64>>2]|0))break;c[j>>2]=(c[l>>2]|0)+72+((c[m>>2]|0)*24|0);if(!(c[(c[j>>2]|0)+12>>2]|0)){if((c[(c[j>>2]|0)+20>>2]|0)!=0?(c[(c[(c[j>>2]|0)+20>>2]|0)+36>>2]|0)==0:0)k=11}else k=11;if((k|0)==11){k=0;c[h>>2]=0}if(c[(c[j>>2]|0)+20>>2]|0)c[g>>2]=1;c[m>>2]=(c[m>>2]|0)+1}if(!((c[h>>2]|0)!=0&(c[g>>2]|0)!=0)){c[r>>2]=$m(c[f>>2]|0,c[l>>2]|0)|0;c[(c[l>>2]|0)+40>>2]=0;t=c[r>>2]|0;i=s;return t|0}if((c[(c[l>>2]|0)+68>>2]|0)>=(c[(c[p>>2]|0)+24>>2]|0))b=-1;else b=c[(c[l>>2]|0)+68>>2]|0;c[n>>2]=b;c[m>>2]=0;while(1){if(c[r>>2]|0)break;if((c[m>>2]|0)>=(c[(c[l>>2]|0)+64>>2]|0))break;c[q>>2]=(c[l>>2]|0)+72+((c[m>>2]|0)*24|0);c[o>>2]=c[(c[q>>2]|0)+20>>2];if(c[o>>2]|0)c[r>>2]=_m(c[p>>2]|0,c[o>>2]|0,c[n>>2]|0,c[c[q>>2]>>2]|0,c[(c[q>>2]|0)+4>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+1}c[(c[l>>2]|0)+40>>2]=1;t=c[r>>2]|0;i=s;return t|0}function _m(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;n=t+40|0;h=t+36|0;o=t+32|0;p=t+28|0;j=t+24|0;k=t+20|0;q=t+16|0;r=t+12|0;l=t+8|0;s=t+4|0;m=t;c[h>>2]=a;c[o>>2]=b;c[p>>2]=e;c[j>>2]=f;c[k>>2]=g;c[l>>2]=c[(c[o>>2]|0)+4>>2];c[s>>2]=(d[(c[h>>2]|0)+231>>0]|0|0)!=0?182:183;c[r>>2]=bm(c[h>>2]|0,c[o>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;if(c[r>>2]|0){c[n>>2]=c[r>>2];s=c[n>>2]|0;i=t;return s|0}c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[l>>2]|0))break;c[m>>2]=c[(c[c[o>>2]>>2]|0)+(c[q>>2]<<2)>>2];if(!(c[(c[m>>2]|0)+40>>2]|0))break;if(cm(c[m>>2]|0,c[j>>2]|0,c[k>>2]|0)|0)break;c[q>>2]=(c[q>>2]|0)+1}c[(c[o>>2]|0)+8>>2]=c[q>>2];c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[(c[o>>2]|0)+8>>2]|0)){h=13;break}c[r>>2]=Pl(c[h>>2]|0,c[(c[c[o>>2]>>2]|0)+(c[q>>2]<<2)>>2]|0)|0;if(c[r>>2]|0){h=11;break}c[q>>2]=(c[q>>2]|0)+1}if((h|0)==11){c[n>>2]=c[r>>2];s=c[n>>2]|0;i=t;return s|0}else if((h|0)==13){Nl(c[c[o>>2]>>2]|0,c[q>>2]|0,c[q>>2]|0,c[s>>2]|0);c[(c[o>>2]|0)+24>>2]=c[p>>2];c[n>>2]=0;s=c[n>>2]|0;i=t;return s|0}return 0}function $m(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;m=l+28|0;d=l+24|0;g=l+20|0;e=l+16|0;k=l+12|0;j=l+8|0;f=l+4|0;h=l;c[m>>2]=a;c[d>>2]=b;c[g>>2]=c[c[m>>2]>>2];c[k>>2]=0;c[e>>2]=0;while(1){if(c[k>>2]|0){d=8;break}if((c[e>>2]|0)>=(c[(c[d>>2]|0)+64>>2]|0)){d=8;break}c[j>>2]=(c[d>>2]|0)+72+((c[e>>2]|0)*24|0);if((c[(c[j>>2]|0)+20>>2]|0)!=0?(c[f>>2]=0,c[h>>2]=0,c[k>>2]=an(c[g>>2]|0,c[j>>2]|0,c[(c[d>>2]|0)+68>>2]|0,f,h)|0,(c[k>>2]|0)==0):0)c[k>>2]=bn(c[g>>2]|0,c[d>>2]|0,c[e>>2]|0,c[h>>2]|0,c[f>>2]|0)|0;c[e>>2]=(c[e>>2]|0)+1}if((d|0)==8){i=l;return c[k>>2]|0}return 0}function an(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+192|0;g=r+176|0;h=r+172|0;j=r+168|0;k=r+164|0;l=r+160|0;p=r+156|0;o=r+152|0;q=r+24|0;m=r+8|0;n=r;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[o>>2]=c[(c[h>>2]|0)+20>>2];d=q;a=d+128|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(a|0));c[m+12>>2]=3|((c[(c[h>>2]|0)+8>>2]|0)!=0?8:0)|((c[(c[h>>2]|0)+12>>2]|0)!=0?32:0)|((c[j>>2]|0)<(c[(c[g>>2]|0)+24>>2]|0)?4:0);c[m+8>>2]=c[j>>2];c[m>>2]=c[c[h>>2]>>2];c[m+4>>2]=c[(c[h>>2]|0)+4>>2];c[p>>2]=ol(c[g>>2]|0,c[o>>2]|0,m)|0;while(1){if(c[p>>2]|0)break;m=pl(c[g>>2]|0,c[o>>2]|0)|0;c[p>>2]=m;if(100!=(m|0))break;c[p>>2]=fn(c[g>>2]|0,q,c[(c[o>>2]|0)+48>>2]|0,c[(c[o>>2]|0)+52>>2]|0)|0}if(!(c[p>>2]|0))c[p>>2]=gn(c[g>>2]|0,q)|0;if(!(c[p>>2]|0)){c[c[l>>2]>>2]=c[q>>2];c[c[k>>2]>>2]=c[q+64>>2];q=c[o>>2]|0;hn(q);q=c[h>>2]|0;q=q+20|0;c[q>>2]=0;q=c[p>>2]|0;i=r;return q|0}c[n>>2]=0;while(1){if((c[n>>2]|0)>=16)break;Kd(c[q+(c[n>>2]<<2)>>2]|0);c[n>>2]=(c[n>>2]|0)+1}q=c[o>>2]|0;hn(q);q=c[h>>2]|0;q=q+20|0;c[q>>2]=0;q=c[p>>2]|0;i=r;return q|0}function bn(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;h=t+40|0;j=t+36|0;k=t+32|0;l=t+28|0;m=t+24|0;s=t+20|0;q=t+16|0;r=t+12|0;o=t+8|0;p=t+4|0;n=t;c[h>>2]=a;c[j>>2]=b;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[s>>2]=0;e=c[j>>2]|0;do if(!(c[l>>2]|0)){Kd(c[e>>2]|0);c[c[j>>2]>>2]=0;c[(c[j>>2]|0)+4>>2]=0}else{if((c[e+44>>2]|0)<0){c[c[j>>2]>>2]=c[l>>2];c[(c[j>>2]|0)+4>>2]=c[m>>2];break}if(!(c[c[j>>2]>>2]|0)){Kd(c[l>>2]|0);break}e=c[c[j>>2]>>2]|0;if((c[(c[j>>2]|0)+44>>2]|0)<(c[k>>2]|0)){c[q>>2]=e;c[o>>2]=c[(c[j>>2]|0)+4>>2];c[r>>2]=c[l>>2];c[p>>2]=c[m>>2];c[n>>2]=(c[k>>2]|0)-(c[(c[j>>2]|0)+44>>2]|0)}else{c[r>>2]=e;c[p>>2]=c[(c[j>>2]|0)+4>>2];c[q>>2]=c[l>>2];c[o>>2]=c[m>>2];c[n>>2]=(c[(c[j>>2]|0)+44>>2]|0)-(c[k>>2]|0)}c[s>>2]=cn(d[(c[h>>2]|0)+231>>0]|0,c[n>>2]|0,c[q>>2]|0,c[o>>2]|0,r,p)|0;Kd(c[q>>2]|0);c[c[j>>2]>>2]=c[r>>2];c[(c[j>>2]|0)+4>>2]=c[p>>2]}while(0);if((c[k>>2]|0)<=(c[(c[j>>2]|0)+44>>2]|0)){s=c[s>>2]|0;i=t;return s|0}c[(c[j>>2]|0)+44>>2]=c[k>>2];s=c[s>>2]|0;i=t;return s|0}function cn(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0;D=i;i=i+112|0;h=D+104|0;j=D+100|0;k=D+96|0;E=D+92|0;F=D+88|0;l=D+84|0;m=D+80|0;r=D+32|0;s=D+24|0;u=D+16|0;o=D+76|0;z=D+72|0;A=D+68|0;x=D+64|0;y=D+60|0;w=D+56|0;p=D+52|0;n=D+48|0;t=D+8|0;B=D+44|0;v=D;q=D+40|0;c[j>>2]=a;c[k>>2]=b;c[E>>2]=d;c[F>>2]=e;c[l>>2]=f;c[m>>2]=g;g=r;c[g>>2]=0;c[g+4>>2]=0;g=s;c[g>>2]=0;c[g+4>>2]=0;g=u;c[g>>2]=0;c[g+4>>2]=0;c[o>>2]=c[c[l>>2]>>2];c[z>>2]=(c[E>>2]|0)+(c[F>>2]|0);c[A>>2]=(c[o>>2]|0)+(c[c[m>>2]>>2]|0);c[x>>2]=c[E>>2];c[y>>2]=c[o>>2];c[p>>2]=0;if(c[j>>2]|0){c[n>>2]=Id((c[c[m>>2]>>2]|0)+10|0)|0;if(!(c[n>>2]|0)){c[h>>2]=7;F=c[h>>2]|0;i=D;return F|0}}else c[n>>2]=c[o>>2];c[w>>2]=c[n>>2];dn(x,c[z>>2]|0,0,r);dn(y,c[A>>2]|0,0,s);while(1){if(!((c[x>>2]|0)!=0?(c[y>>2]|0)!=0:0))break;F=(c[j>>2]|0)!=0?-1:1;g=r;E=s;E=fR(c[g>>2]|0,c[g+4>>2]|0,c[E>>2]|0,c[E+4>>2]|0)|0;E=rR(F|0,((F|0)<0)<<31>>31|0,E|0,C|0)|0;F=t;c[F>>2]=E;c[F+4>>2]=C;F=t;if(!((c[F>>2]|0)==0&(c[F+4>>2]|0)==0))if((c[t+4>>2]|0)<0){Zl(0,x);dn(x,c[z>>2]|0,c[j>>2]|0,r);continue}else{Zl(0,y);dn(y,c[A>>2]|0,c[j>>2]|0,s);continue}else{c[B>>2]=c[w>>2];g=u;E=c[g+4>>2]|0;F=v;c[F>>2]=c[g>>2];c[F+4>>2]=E;c[q>>2]=c[p>>2];F=r;en(w,c[j>>2]|0,u,p,c[F>>2]|0,c[F+4>>2]|0);if(!(Vm(w,c[k>>2]|0,0,1,x,y)|0)){c[w>>2]=c[B>>2];g=v;E=c[g+4>>2]|0;F=u;c[F>>2]=c[g>>2];c[F+4>>2]=E;c[p>>2]=c[q>>2]}dn(x,c[z>>2]|0,c[j>>2]|0,r);dn(y,c[A>>2]|0,c[j>>2]|0,s);continue}}c[c[m>>2]>>2]=(c[w>>2]|0)-(c[n>>2]|0);if(c[j>>2]|0){Kd(c[o>>2]|0);c[c[l>>2]>>2]=c[n>>2]}c[h>>2]=0;F=c[h>>2]|0;i=D;return F|0}function dn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;f=k+20|0;l=k+16|0;j=k+12|0;h=k+8|0;g=k;c[f>>2]=a;c[l>>2]=b;c[j>>2]=d;c[h>>2]=e;d=c[f>>2]|0;if((c[c[f>>2]>>2]|0)>>>0>=(c[l>>2]|0)>>>0){c[d>>2]=0;i=k;return}a=Ul(c[d>>2]|0,g)|0;f=c[f>>2]|0;c[f>>2]=(c[f>>2]|0)+a;f=g;a=c[f>>2]|0;f=c[f+4>>2]|0;d=c[h>>2]|0;e=d;b=c[e>>2]|0;e=c[e+4>>2]|0;if(c[j>>2]|0){j=fR(b|0,e|0,a|0,f|0)|0;l=d;c[l>>2]=j;c[l+4>>2]=C;i=k;return}else{j=gR(b|0,e|0,a|0,f|0)|0;l=d;c[l>>2]=j;c[l+4>>2]=C;i=k;return}}function en(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,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;h=n+28|0;o=n+24|0;j=n+20|0;k=n+16|0;l=n+8|0;m=n;c[h>>2]=a;c[o>>2]=b;c[j>>2]=d;c[k>>2]=e;a=l;c[a>>2]=f;c[a+4>>2]=g;if((c[o>>2]|0)!=0?(c[c[k>>2]>>2]|0)!=0:0){o=c[j>>2]|0;a=l;a=fR(c[o>>2]|0,c[o+4>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;o=m;c[o>>2]=a;c[o+4>>2]=C}else{o=l;a=c[j>>2]|0;a=fR(c[o>>2]|0,c[o+4>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;o=m;c[o>>2]=a;c[o+4>>2]=C}a=m;a=El(c[c[h>>2]>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;d=c[h>>2]|0;c[d>>2]=(c[d>>2]|0)+a;d=l;a=c[d+4>>2]|0;o=c[j>>2]|0;c[o>>2]=c[d>>2];c[o+4>>2]=a;c[c[k>>2]>>2]=1;i=n;return}function fn(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;h=t+40|0;j=t+36|0;k=t+32|0;l=t+28|0;g=t+24|0;m=t+20|0;p=t+16|0;o=t+12|0;n=t+8|0;q=t+4|0;r=t;c[j>>2]=a;c[k>>2]=b;c[l>>2]=e;c[g>>2]=f;a:do if(!(c[c[k>>2]>>2]|0)){s=Id((c[g>>2]|0)+10+1|0)|0;c[c[k>>2]>>2]=s;c[(c[k>>2]|0)+64>>2]=c[g>>2];if(c[c[k>>2]>>2]|0){iR(c[c[k>>2]>>2]|0,c[l>>2]|0,c[g>>2]|0)|0;break}c[h>>2]=7;s=c[h>>2]|0;i=t;return s|0}else{c[m>>2]=c[l>>2];c[p>>2]=c[g>>2];c[o>>2]=0;while(1){if((c[o>>2]|0)>=16)break a;if(!(c[(c[k>>2]|0)+(c[o>>2]<<2)>>2]|0)){s=8;break}c[r>>2]=jn(d[(c[j>>2]|0)+231>>0]|0,c[m>>2]|0,c[p>>2]|0,c[(c[k>>2]|0)+(c[o>>2]<<2)>>2]|0,c[(c[k>>2]|0)+64+(c[o>>2]<<2)>>2]|0,n,q)|0;g=(c[m>>2]|0)!=(c[l>>2]|0);if(c[r>>2]|0)break;if(g)Kd(c[m>>2]|0);Kd(c[(c[k>>2]|0)+(c[o>>2]<<2)>>2]|0);c[(c[k>>2]|0)+(c[o>>2]<<2)>>2]=0;c[m>>2]=c[n>>2];c[p>>2]=c[q>>2];if(((c[o>>2]|0)+1|0)==16){c[(c[k>>2]|0)+(c[o>>2]<<2)>>2]=c[m>>2];c[(c[k>>2]|0)+64+(c[o>>2]<<2)>>2]=c[p>>2]}c[o>>2]=(c[o>>2]|0)+1}if((s|0)==8){c[(c[k>>2]|0)+(c[o>>2]<<2)>>2]=c[m>>2];c[(c[k>>2]|0)+64+(c[o>>2]<<2)>>2]=c[p>>2];break}if(g)Kd(c[m>>2]|0);c[h>>2]=c[r>>2];s=c[h>>2]|0;i=t;return s|0}while(0);c[h>>2]=0;s=c[h>>2]|0;i=t;return s|0}function gn(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;j=o+32|0;e=o+28|0;k=o+24|0;l=o+20|0;m=o+16|0;g=o+12|0;h=o+8|0;f=o+4|0;n=o;c[e>>2]=a;c[k>>2]=b;c[l>>2]=0;c[m>>2]=0;c[g>>2]=0;a:while(1){if((c[g>>2]|0)>=16){e=10;break}do if(c[(c[k>>2]|0)+(c[g>>2]<<2)>>2]|0){if(!(c[l>>2]|0)){c[l>>2]=c[(c[k>>2]|0)+(c[g>>2]<<2)>>2];c[m>>2]=c[(c[k>>2]|0)+64+(c[g>>2]<<2)>>2];c[(c[k>>2]|0)+(c[g>>2]<<2)>>2]=0;break}c[n>>2]=jn(d[(c[e>>2]|0)+231>>0]|0,c[(c[k>>2]|0)+(c[g>>2]<<2)>>2]|0,c[(c[k>>2]|0)+64+(c[g>>2]<<2)>>2]|0,c[l>>2]|0,c[m>>2]|0,f,h)|0;if(c[n>>2]|0){e=7;break a}Kd(c[(c[k>>2]|0)+(c[g>>2]<<2)>>2]|0);Kd(c[l>>2]|0);c[(c[k>>2]|0)+(c[g>>2]<<2)>>2]=0;c[l>>2]=c[f>>2];c[m>>2]=c[h>>2]}while(0);c[g>>2]=(c[g>>2]|0)+1}if((e|0)==7){Kd(c[l>>2]|0);c[j>>2]=c[n>>2];n=c[j>>2]|0;i=o;return n|0}else if((e|0)==10){c[c[k>>2]>>2]=c[l>>2];c[(c[k>>2]|0)+64>>2]=c[m>>2];c[j>>2]=0;n=c[j>>2]|0;i=o;return n|0}return 0}function hn(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;vl(c[d>>2]|0);Kd(c[d>>2]|0);i=b;return}function jn(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;y=i;i=i+96|0;j=y+88|0;k=y+84|0;D=y+80|0;A=y+76|0;B=y+72|0;z=y+68|0;l=y+64|0;m=y+60|0;p=y+24|0;q=y+16|0;s=y+8|0;w=y+56|0;x=y+52|0;u=y+48|0;v=y+44|0;t=y+40|0;n=y+36|0;o=y+32|0;r=y;c[k>>2]=a;c[D>>2]=b;c[A>>2]=d;c[B>>2]=e;c[z>>2]=f;c[l>>2]=g;c[m>>2]=h;h=p;c[h>>2]=0;c[h+4>>2]=0;h=q;c[h>>2]=0;c[h+4>>2]=0;h=s;c[h>>2]=0;c[h+4>>2]=0;c[w>>2]=(c[D>>2]|0)+(c[A>>2]|0);c[x>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[u>>2]=c[D>>2];c[v>>2]=c[B>>2];c[o>>2]=0;c[c[l>>2]>>2]=0;c[c[m>>2]>>2]=0;c[n>>2]=Id((c[A>>2]|0)+(c[z>>2]|0)+10-1|0)|0;if(!(c[n>>2]|0)){c[j>>2]=7;D=c[j>>2]|0;i=y;return D|0}c[t>>2]=c[n>>2];dn(u,c[w>>2]|0,0,p);dn(v,c[x>>2]|0,0,q);while(1){if(!((c[u>>2]|0)!=0?1:(c[v>>2]|0)!=0))break;D=(c[k>>2]|0)!=0?-1:1;A=p;B=q;B=fR(c[A>>2]|0,c[A+4>>2]|0,c[B>>2]|0,c[B+4>>2]|0)|0;B=rR(D|0,((D|0)<0)<<31>>31|0,B|0,C|0)|0;D=r;c[D>>2]=B;c[D+4>>2]=C;D=r;if((c[v>>2]|0)!=0&(c[u>>2]|0)!=0&((c[D>>2]|0)==0&(c[D+4>>2]|0)==0)){D=p;en(t,c[k>>2]|0,s,o,c[D>>2]|0,c[D+4>>2]|0);kn(t,u,v);dn(u,c[w>>2]|0,c[k>>2]|0,p);dn(v,c[x>>2]|0,c[k>>2]|0,q);continue}if((c[v>>2]|0)!=0?!((c[u>>2]|0)!=0&(c[r+4>>2]|0)<0):0){D=q;en(t,c[k>>2]|0,s,o,c[D>>2]|0,c[D+4>>2]|0);Zl(t,v);dn(v,c[x>>2]|0,c[k>>2]|0,q);continue}D=p;en(t,c[k>>2]|0,s,o,c[D>>2]|0,c[D+4>>2]|0);Zl(t,u);dn(u,c[w>>2]|0,c[k>>2]|0,p)}c[c[l>>2]>>2]=c[n>>2];c[c[m>>2]>>2]=(c[t>>2]|0)-(c[n>>2]|0);c[j>>2]=0;D=c[j>>2]|0;i=y;return D|0}function kn(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+64|0;g=t+56|0;h=t+52|0;j=t+48|0;q=t+44|0;r=t+40|0;s=t+36|0;m=t+32|0;n=t+28|0;k=t+16|0;l=t+8|0;o=t;p=t+24|0;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;c[q>>2]=c[c[g>>2]>>2];c[r>>2]=c[c[h>>2]>>2];c[s>>2]=c[c[j>>2]>>2];a:while(1){if((a[c[r>>2]>>0]|0)==0?(a[c[s>>2]>>0]|0)==0:0)break;b=c[r>>2]|0;do if((a[c[r>>2]>>0]|0)==1){e=(c[r>>2]|0)+1|0;if(d[b+1>>0]&128){Vl(e,m)|0;break}else{c[m>>2]=d[e>>0];break}}else if(!(a[b>>0]|0)){c[m>>2]=2147483647;break}else{c[m>>2]=0;break}while(0);b=c[s>>2]|0;do if((a[c[s>>2]>>0]|0)==1){e=(c[s>>2]|0)+1|0;if(d[b+1>>0]&128){Vl(e,n)|0;break}else{c[n>>2]=d[e>>0];break}}else if(!(a[b>>0]|0)){c[n>>2]=2147483647;break}else{c[n>>2]=0;break}while(0);if((c[m>>2]|0)!=(c[n>>2]|0))if((c[m>>2]|0)<(c[n>>2]|0)){f=ln(q,c[m>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+f;Tl(q,r);continue}else{f=ln(q,c[n>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+f;Tl(q,s);continue}f=k;c[f>>2]=0;c[f+4>>2]=0;f=l;c[f>>2]=0;c[f+4>>2]=0;f=o;c[f>>2]=0;c[f+4>>2]=0;c[p>>2]=ln(q,c[m>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[p>>2]|0);c[s>>2]=(c[s>>2]|0)+(c[p>>2]|0);Wm(r,k);Wm(s,l);while(1){e=k;u=c[e+4>>2]|0;b=l;f=c[b+4>>2]|0;b=(u|0)<(f|0)|((u|0)==(f|0)?(c[e>>2]|0)>>>0<(c[b>>2]|0)>>>0:0);e=k;f=l;Xm(q,o,b?c[e>>2]|0:c[f>>2]|0,b?c[e+4>>2]|0:c[f+4>>2]|0);f=o;f=fR(c[f>>2]|0,c[f+4>>2]|0,2,0)|0;e=o;c[e>>2]=f;c[e+4>>2]=C;e=k;f=l;do if(!((c[e>>2]|0)==(c[f>>2]|0)?(c[e+4>>2]|0)==(c[f+4>>2]|0):0)){f=k;b=c[f+4>>2]|0;u=l;e=c[u+4>>2]|0;if((b|0)<(e|0)|((b|0)==(e|0)?(c[f>>2]|0)>>>0<(c[u>>2]|0)>>>0:0)){mn(r,k);break}else{mn(s,l);break}}else{mn(r,k);mn(s,l)}while(0);f=k;u=l;if(!((c[f>>2]|0)!=2147483647|(c[f+4>>2]|0)!=0?1:(c[u>>2]|0)!=2147483647|(c[u+4>>2]|0)!=0))continue a}}u=c[q>>2]|0;c[q>>2]=u+1;a[u>>0]=0;c[c[g>>2]>>2]=c[q>>2];c[c[h>>2]>>2]=(c[r>>2]|0)+1;c[c[j>>2]>>2]=(c[s>>2]|0)+1;i=t;return}function ln(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=b;c[f>>2]=d;c[g>>2]=0;if(!(c[f>>2]|0)){b=c[g>>2]|0;i=j;return b|0}c[h>>2]=c[c[e>>2]>>2];b=c[f>>2]|0;c[g>>2]=1+(El((c[h>>2]|0)+1|0,b,((b|0)<0)<<31>>31)|0);a[c[h>>2]>>0]=1;c[c[e>>2]>>2]=(c[h>>2]|0)+(c[g>>2]|0);b=c[g>>2]|0;i=j;return b|0}function mn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;c[f>>2]=d;if(a[c[c[e>>2]>>2]>>0]&254){Wm(c[e>>2]|0,c[f>>2]|0);b=c[f>>2]|0;d=b;d=fR(c[d>>2]|0,c[d+4>>2]|0,2,0)|0;c[b>>2]=d;c[b+4>>2]=C;i=g;return}else{b=c[f>>2]|0;c[b>>2]=2147483647;c[b+4>>2]=0;i=g;return}}function nn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[f>>2]=b;c[g>>2]=d;c[j>>2]=0;if((a[(c[g>>2]|0)+7>>0]|0)!=0?(c[h>>2]=0,c[j>>2]=zn(c[g>>2]|0,h)|0,(c[j>>2]|0)==0):0){h=(c[g>>2]|0)+32|0;Me(c[(c[g>>2]|0)+8>>2]|0,1,c[h>>2]|0,c[h+4>>2]|0)|0;a[(c[g>>2]|0)+7>>0]=0;if(100==(ue(c[(c[g>>2]|0)+8>>2]|0)|0)){c[e>>2]=0;j=c[e>>2]|0;i=k;return j|0}c[j>>2]=Zd(c[(c[g>>2]|0)+8>>2]|0)|0;if((c[j>>2]|0)==0?(c[(c[c[g>>2]>>2]|0)+40>>2]|0)==0:0){c[j>>2]=267;a[(c[g>>2]|0)+6>>0]=1}}if((c[j>>2]|0)!=0&(c[f>>2]|0)!=0)re(c[f>>2]|0,c[j>>2]|0);c[e>>2]=c[j>>2];j=c[e>>2]|0;i=k;return j|0}function on(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+80|0;b=v+64|0;r=v+60|0;e=v+56|0;f=v;m=v+52|0;l=v+48|0;p=v+44|0;n=v+40|0;s=v+36|0;q=v+32|0;t=v+28|0;k=v+24|0;g=v+20|0;h=v+16|0;j=v+12|0;o=v+8|0;c[b>>2]=a;c[r>>2]=0;if(!(c[(c[b>>2]|0)+24>>2]|0)){u=c[r>>2]|0;i=v;return u|0}c[l>>2]=c[c[b>>2]>>2];c[p>>2]=c[(c[l>>2]|0)+36>>2];c[n>>2]=c[c[p>>2]>>2];w=Ee(c[(c[b>>2]|0)+8>>2]|0,0)|0;a=f;c[a>>2]=w;c[a+4>>2]=C;c[e>>2]=0;while(1){if(!((c[e>>2]|0)<(c[(c[l>>2]|0)+24>>2]|0)?(c[r>>2]|0)==0:0))break;if(!(d[(c[(c[l>>2]|0)+32>>2]|0)+(c[e>>2]|0)>>0]|0)){c[s>>2]=Fe(c[(c[b>>2]|0)+8>>2]|0,(c[e>>2]|0)+1|0)|0;c[q>>2]=0;c[r>>2]=wn(c[p>>2]|0,c[(c[b>>2]|0)+16>>2]|0,c[s>>2]|0,-1,q)|0;a:while(1){if(c[r>>2]|0)break;c[k>>2]=0;c[g>>2]=0;c[h>>2]=0;c[j>>2]=0;c[r>>2]=Sb[c[(c[n>>2]|0)+20>>2]&255](c[q>>2]|0,t,k,g,h,j)|0;c[m>>2]=c[(c[b>>2]|0)+24>>2];while(1){if(!((c[m>>2]|0)!=0?(c[r>>2]|0)==0:0))continue a;c[o>>2]=c[c[m>>2]>>2];if(!((c[(c[m>>2]|0)+4>>2]|0)<(c[(c[l>>2]|0)+24>>2]|0)?(c[(c[m>>2]|0)+4>>2]|0)!=(c[e>>2]|0):0))u=11;do if((u|0)==11?(u=0,(c[j>>2]|0)==0?1:(c[(c[o>>2]|0)+12>>2]|0)==0):0){if((c[(c[o>>2]|0)+4>>2]|0)!=(c[k>>2]|0)){if(!(c[(c[o>>2]|0)+8>>2]|0))break;if((c[(c[o>>2]|0)+4>>2]|0)>=(c[k>>2]|0))break}if(!(vQ(c[t>>2]|0,c[c[o>>2]>>2]|0,c[(c[o>>2]|0)+4>>2]|0)|0)){x=f;a=c[e>>2]|0;w=c[j>>2]|0;xn((c[m>>2]|0)+12|0,c[x>>2]|0,c[x+4>>2]|0,a,((a|0)<0)<<31>>31,w,((w|0)<0)<<31>>31,r)|0}}while(0);c[m>>2]=c[(c[m>>2]|0)+8>>2]}}if(c[q>>2]|0)Tb[c[(c[n>>2]|0)+16>>2]&255](c[q>>2]|0)|0;if((c[r>>2]|0)==101)c[r>>2]=0}c[e>>2]=(c[e>>2]|0)+1}c[m>>2]=c[(c[b>>2]|0)+24>>2];while(1){if(!((c[m>>2]|0)!=0?(c[r>>2]|0)==0:0))break;if(c[(c[m>>2]|0)+12>>2]|0)c[r>>2]=yn((c[m>>2]|0)+12|0,0,0)|0;c[m>>2]=c[(c[m>>2]|0)+8>>2]}x=c[r>>2]|0;i=v;return x|0}function pn(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;m=p+28|0;l=p+24|0;g=p+20|0;o=p+16|0;n=p+12|0;h=p+8|0;j=p+4|0;k=p;c[m>>2]=b;c[l>>2]=e;c[g>>2]=f;c[o>>2]=1;if(c[c[g>>2]>>2]|0){o=c[o>>2]|0;i=p;return o|0}switch(c[c[l>>2]>>2]|0){case 3:case 1:{if((pn(c[m>>2]|0,c[(c[l>>2]|0)+12>>2]|0,c[g>>2]|0)|0)!=0?(pn(c[m>>2]|0,c[(c[l>>2]|0)+16>>2]|0,c[g>>2]|0)|0)!=0:0)g=(rn(c[l>>2]|0,c[g>>2]|0)|0)!=0;else g=0;c[o>>2]=g&1;if(c[o>>2]|0){o=c[o>>2]|0;i=p;return o|0}if((c[c[l>>2]>>2]|0)!=1){o=c[o>>2]|0;i=p;return o|0}if((c[(c[l>>2]|0)+8>>2]|0)!=0?(c[c[(c[l>>2]|0)+8>>2]>>2]|0)==1:0){o=c[o>>2]|0;i=p;return o|0}c[n>>2]=c[l>>2];while(1){g=c[n>>2]|0;if(c[(c[n>>2]|0)+20>>2]|0)break;f=(c[g+16>>2]|0)+24|0;l=(c[m>>2]|0)+32|0;if((c[f>>2]|0)==(c[l>>2]|0)?(c[f+4>>2]|0)==(c[l+4>>2]|0):0)Pm(c[(c[(c[n>>2]|0)+16>>2]|0)+20>>2]|0);c[n>>2]=c[(c[n>>2]|0)+12>>2]}l=g+24|0;m=(c[m>>2]|0)+32|0;if(!((c[l>>2]|0)==(c[m>>2]|0)?(c[l+4>>2]|0)==(c[m+4>>2]|0):0)){o=c[o>>2]|0;i=p;return o|0}Pm(c[(c[n>>2]|0)+20>>2]|0);o=c[o>>2]|0;i=p;return o|0}case 4:{c[h>>2]=pn(c[m>>2]|0,c[(c[l>>2]|0)+12>>2]|0,c[g>>2]|0)|0;c[j>>2]=pn(c[m>>2]|0,c[(c[l>>2]|0)+16>>2]|0,c[g>>2]|0)|0;c[o>>2]=((c[h>>2]|0)!=0?1:(c[j>>2]|0)!=0)&1;o=c[o>>2]|0;i=p;return o|0}case 2:{if(pn(c[m>>2]|0,c[(c[l>>2]|0)+12>>2]|0,c[g>>2]|0)|0)g=(pn(c[m>>2]|0,c[(c[l>>2]|0)+16>>2]|0,c[g>>2]|0)|0)!=0^1;else g=0;c[o>>2]=g&1;o=c[o>>2]|0;i=p;return o|0}default:{do if(c[(c[m>>2]|0)+24>>2]|0){f=(c[l>>2]|0)+24|0;n=(c[m>>2]|0)+32|0;if(!((c[f>>2]|0)==(c[n>>2]|0)?(c[f+4>>2]|0)==(c[n+4>>2]|0):0)?(d[(c[l>>2]|0)+34>>0]|0)==0:0)break;c[k>>2]=c[(c[l>>2]|0)+20>>2];if(a[(c[l>>2]|0)+34>>0]|0)Pm(c[k>>2]|0);f=sn(c[m>>2]|0,c[k>>2]|0)|0;c[c[g>>2]>>2]=f;c[o>>2]=(c[(c[k>>2]|0)+28>>2]|0)!=0&1;f=(c[m>>2]|0)+32|0;m=c[f+4>>2]|0;n=(c[l>>2]|0)+24|0;c[n>>2]=c[f>>2];c[n+4>>2]=m;o=c[o>>2]|0;i=p;return o|0}while(0);if(!(d[(c[l>>2]|0)+32>>0]|0)){n=(c[l>>2]|0)+24|0;g=(c[m>>2]|0)+32|0;g=(c[n>>2]|0)==(c[g>>2]|0)?(c[n+4>>2]|0)==(c[g+4>>2]|0):0}else g=0;c[o>>2]=g&1;o=c[o>>2]|0;i=p;return o|0; +}}return 0}function qn(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[(c[e>>2]|0)+24>>2];while(1){if(!(c[b>>2]|0))break;el(c[(c[b>>2]|0)+12>>2]|0);c[(c[b>>2]|0)+12>>2]=0;c[b>>2]=c[(c[b>>2]|0)+8>>2]}i=d;return}function rn(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;e=r+44|0;f=r+40|0;q=r+36|0;o=r+32|0;h=r+28|0;l=r+24|0;k=r+20|0;n=r+16|0;j=r+12|0;g=r+8|0;m=r+4|0;p=r;c[e>>2]=a;c[f>>2]=b;c[q>>2]=1;if(c[c[f>>2]>>2]|0){q=c[q>>2]|0;i=r;return q|0}if((c[c[e>>2]>>2]|0)!=1){q=c[q>>2]|0;i=r;return q|0}if(d[(c[e>>2]|0)+32>>0]|0){q=c[q>>2]|0;i=r;return q|0}if((c[(c[e>>2]|0)+8>>2]|0)!=0?(c[c[(c[e>>2]|0)+8>>2]>>2]|0)==1:0){q=c[q>>2]|0;i=r;return q|0}c[h>>2]=0;c[o>>2]=c[e>>2];while(1){a=c[o>>2]|0;if(!(c[(c[o>>2]|0)+12>>2]|0))break;c[h>>2]=(c[h>>2]|0)+(c[(c[(c[a+16>>2]|0)+20>>2]|0)+32>>2]|0);c[o>>2]=c[(c[o>>2]|0)+12>>2]}c[h>>2]=(c[h>>2]|0)+(c[(c[a+20>>2]|0)+32>>2]|0);if(!(c[h>>2]|0)){c[q>>2]=0;q=c[q>>2]|0;i=r;return q|0}c[l>>2]=Id(c[h>>2]<<1)|0;a:do if(c[l>>2]|0){c[k>>2]=c[(c[(c[o>>2]|0)+20>>2]|0)+28>>2];c[n>>2]=c[(c[(c[o>>2]|0)+20>>2]|0)+64>>2];c[o>>2]=c[(c[o>>2]|0)+8>>2];while(1){if(!((c[q>>2]|0)!=0&(c[o>>2]|0)!=0))break;if((c[c[o>>2]>>2]|0)!=1)break;c[j>>2]=c[(c[(c[o>>2]|0)+16>>2]|0)+20>>2];c[g>>2]=c[(c[o>>2]|0)+4>>2];c[q>>2]=un(c[g>>2]|0,c[l>>2]|0,k,n,c[j>>2]|0)|0;c[o>>2]=c[(c[o>>2]|0)+8>>2]}c[k>>2]=c[(c[(c[(c[e>>2]|0)+16>>2]|0)+20>>2]|0)+28>>2];c[n>>2]=c[(c[(c[(c[e>>2]|0)+16>>2]|0)+20>>2]|0)+64>>2];c[o>>2]=c[(c[e>>2]|0)+12>>2];while(1){if(!((c[o>>2]|0)!=0?(c[q>>2]|0)!=0:0))break a;c[m>>2]=c[(c[(c[o>>2]|0)+8>>2]|0)+4>>2];a=c[o>>2]|0;if((c[c[o>>2]>>2]|0)==1)a=c[(c[a+16>>2]|0)+20>>2]|0;else a=c[a+20>>2]|0;c[p>>2]=a;c[q>>2]=un(c[m>>2]|0,c[l>>2]|0,k,n,c[p>>2]|0)|0;c[o>>2]=c[(c[o>>2]|0)+12>>2]}}else{c[c[f>>2]>>2]=7;c[q>>2]=0}while(0);Kd(c[l>>2]|0);q=c[q>>2]|0;i=r;return q|0}function sn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+80|0;m=y+76|0;n=y+72|0;o=y+68|0;e=y+64|0;q=y+60|0;u=y+56|0;r=y+52|0;l=y+48|0;j=y+44|0;k=y+40|0;f=y+36|0;x=y+32|0;d=y+28|0;g=y+24|0;h=y+20|0;t=y+16|0;s=y+12|0;v=y+8|0;w=y+4|0;p=y;c[n>>2]=a;c[o>>2]=b;c[q>>2]=0;c[u>>2]=0;c[r>>2]=-1;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[o>>2]|0)+64>>2]|0)){a=14;break}c[l>>2]=(c[o>>2]|0)+72+((c[e>>2]|0)*24|0);c[j>>2]=c[(c[l>>2]|0)+16>>2];if(c[j>>2]|0){c[x>>2]=tn(c[j>>2]|0,k,f)|0;if(c[x>>2]|0){a=5;break}b=c[q>>2]|0;if(!(c[k>>2]|0)){a=7;break}a=c[k>>2]|0;if(b){c[d>>2]=a;c[g>>2]=c[q>>2];c[h>>2]=c[d>>2];Vm(d,(c[e>>2]|0)-(c[r>>2]|0)|0,0,1,g,h)|0;Kd(c[q>>2]|0);c[q>>2]=c[k>>2];c[u>>2]=(c[d>>2]|0)-(c[q>>2]|0);if(!(c[u>>2]|0)){a=11;break}}else{c[q>>2]=a;c[u>>2]=c[f>>2]}c[r>>2]=c[e>>2]}c[e>>2]=(c[e>>2]|0)+1}if((a|0)==5){c[m>>2]=c[x>>2];x=c[m>>2]|0;i=y;return x|0}else if((a|0)==7){Kd(b);c[(c[o>>2]|0)+28>>2]=0;c[(c[o>>2]|0)+32>>2]=0;c[m>>2]=0;x=c[m>>2]|0;i=y;return x|0}else if((a|0)==11){Kd(c[q>>2]|0);c[(c[o>>2]|0)+28>>2]=0;c[(c[o>>2]|0)+32>>2]=0;c[m>>2]=0;x=c[m>>2]|0;i=y;return x|0}else if((a|0)==14){do if((c[r>>2]|0)>=0){c[t>>2]=c[(c[o>>2]|0)+44>>2];if((c[t>>2]|0)<0){c[(c[o>>2]|0)+28>>2]=c[q>>2];c[(c[o>>2]|0)+32>>2]=c[u>>2];v=(c[n>>2]|0)+32|0;w=c[v+4>>2]|0;x=(c[o>>2]|0)+16|0;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[(c[o>>2]|0)+24>>2]=1;break}if((c[t>>2]|0)>(c[r>>2]|0)){c[v>>2]=c[q>>2];c[w>>2]=c[(c[o>>2]|0)+28>>2];c[s>>2]=(c[t>>2]|0)-(c[r>>2]|0)}else{c[v>>2]=c[(c[o>>2]|0)+28>>2];c[w>>2]=c[q>>2];c[s>>2]=(c[r>>2]|0)-(c[t>>2]|0)}c[p>>2]=Id((c[u>>2]|0)+8|0)|0;if(!(c[p>>2]|0)){Kd(c[q>>2]|0);c[m>>2]=7;x=c[m>>2]|0;i=y;return x|0}c[(c[o>>2]|0)+28>>2]=c[p>>2];if(Vm(p,c[s>>2]|0,0,1,v,w)|0){c[(c[o>>2]|0)+24>>2]=1;c[(c[o>>2]|0)+32>>2]=(c[p>>2]|0)-(c[(c[o>>2]|0)+28>>2]|0)}else{Kd(c[p>>2]|0);c[(c[o>>2]|0)+28>>2]=0;c[(c[o>>2]|0)+32>>2]=0}Kd(c[q>>2]|0)}while(0);c[m>>2]=0;x=c[m>>2]|0;i=y;return x|0}return 0}function tn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+28|0;f=l+24|0;g=l+20|0;h=l+16|0;k=l+12|0;j=l+8|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[c[g>>2]>>2]=0;c[c[h>>2]>>2]=0;if(!(c[(c[f>>2]|0)+12>>2]|0)){c[e>>2]=0;b=c[e>>2]|0;i=l;return b|0}c[k>>2]=Id(c[c[(c[f>>2]|0)+12>>2]>>2]|0)|0;if(c[k>>2]|0){c[j>>2]=Ul(c[(c[(c[f>>2]|0)+12>>2]|0)+4>>2]|0,l)|0;c[c[h>>2]>>2]=(c[c[(c[f>>2]|0)+12>>2]>>2]|0)-(c[j>>2]|0);c[c[g>>2]>>2]=c[k>>2];iR(c[k>>2]|0,(c[(c[(c[f>>2]|0)+12>>2]|0)+4>>2]|0)+(c[j>>2]|0)|0,c[c[h>>2]>>2]|0)|0;c[e>>2]=0;b=c[e>>2]|0;i=l;return b|0}else{c[e>>2]=7;b=c[e>>2]|0;i=l;return b|0}return 0}function un(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=i;i=i+48|0;s=n+40|0;r=n+36|0;g=n+32|0;h=n+28|0;j=n+24|0;q=n+20|0;p=n+16|0;k=n+12|0;o=n+8|0;l=n+4|0;m=n;c[s>>2]=a;c[r>>2]=b;c[g>>2]=d;c[h>>2]=e;c[j>>2]=f;c[q>>2]=(c[s>>2]|0)+(c[(c[j>>2]|0)+64>>2]|0);c[p>>2]=(c[s>>2]|0)+(c[c[h>>2]>>2]|0);e=c[(c[j>>2]|0)+28>>2]|0;c[l>>2]=e;c[o>>2]=e;c[m>>2]=vn(l,c[r>>2]|0,c[q>>2]|0,c[p>>2]|0,c[g>>2]|0,o)|0;if(!(c[m>>2]|0)){s=c[m>>2]|0;i=n;return s|0}c[k>>2]=(c[l>>2]|0)-(c[(c[j>>2]|0)+28>>2]|0)-1;kR((c[(c[j>>2]|0)+28>>2]|0)+(c[k>>2]|0)|0,0,(c[(c[j>>2]|0)+32>>2]|0)-(c[k>>2]|0)|0)|0;c[(c[j>>2]|0)+32>>2]=c[k>>2];c[c[g>>2]>>2]=c[(c[j>>2]|0)+28>>2];c[c[h>>2]>>2]=c[(c[j>>2]|0)+64>>2];s=c[m>>2]|0;i=n;return s|0}function vn(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;o=i;i=i+48|0;h=o+44|0;j=o+40|0;u=o+36|0;r=o+32|0;p=o+28|0;q=o+24|0;t=o+20|0;s=o+16|0;l=o+12|0;m=o+8|0;k=o+4|0;n=o;c[h>>2]=a;c[j>>2]=b;c[u>>2]=d;c[r>>2]=e;c[p>>2]=f;c[q>>2]=g;c[t>>2]=c[c[p>>2]>>2];c[s>>2]=c[c[q>>2]>>2];c[l>>2]=c[j>>2];c[n>>2]=1;Vm(l,c[u>>2]|0,0,0,c[p>>2]|0,c[q>>2]|0)|0;g=c[l>>2]|0;c[m>>2]=g;c[k>>2]=g;c[c[p>>2]>>2]=c[t>>2];c[c[q>>2]>>2]=c[s>>2];Vm(m,c[r>>2]|0,1,0,c[q>>2]|0,c[p>>2]|0)|0;if((c[l>>2]|0)!=(c[j>>2]|0)?(c[m>>2]|0)!=(c[k>>2]|0):0){kn(c[h>>2]|0,j,k);u=c[n>>2]|0;i=o;return u|0}if((c[l>>2]|0)!=(c[j>>2]|0)){Zl(c[h>>2]|0,j);u=c[n>>2]|0;i=o;return u|0}if((c[m>>2]|0)!=(c[k>>2]|0)){Zl(c[h>>2]|0,k);u=c[n>>2]|0;i=o;return u|0}else{c[n>>2]=0;u=c[n>>2]|0;i=o;return u|0}return 0}function wn(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=i;i=i+32|0;g=n+28|0;h=n+24|0;p=n+20|0;o=n+16|0;j=n+12|0;l=n+8|0;k=n+4|0;m=n;c[g>>2]=a;c[h>>2]=b;c[p>>2]=d;c[o>>2]=e;c[j>>2]=f;c[l>>2]=c[c[g>>2]>>2];c[k>>2]=0;c[m>>2]=Wb[c[(c[l>>2]|0)+12>>2]&255](c[g>>2]|0,c[p>>2]|0,c[o>>2]|0,k)|0;if(((c[m>>2]|0)==0?(c[c[k>>2]>>2]=c[g>>2],(c[c[l>>2]>>2]|0)>=1):0)?(c[m>>2]=Yb[c[(c[l>>2]|0)+24>>2]&255](c[k>>2]|0,c[h>>2]|0)|0,(c[m>>2]|0)!=0):0){Tb[c[(c[l>>2]|0)+16>>2]&255](c[k>>2]|0)|0;c[k>>2]=0}c[c[j>>2]>>2]=c[k>>2];i=n;return c[m>>2]|0}function xn(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+64|0;m=u+48|0;n=u+44|0;o=u+24|0;p=u+16|0;k=u+8|0;l=u+40|0;r=u+36|0;s=u+32|0;q=u;c[n>>2]=a;a=o;c[a>>2]=b;c[a+4>>2]=d;a=p;c[a>>2]=e;c[a+4>>2]=f;a=k;c[a>>2]=g;c[a+4>>2]=h;c[l>>2]=j;c[r>>2]=c[c[n>>2]>>2];c[s>>2]=0;if((c[r>>2]|0)!=0?(j=(c[r>>2]|0)+16|0,a=o,!((c[j>>2]|0)!=(c[a>>2]|0)?1:(c[j+4>>2]|0)!=(c[a+4>>2]|0))):0)t=9;else{b=o;if(c[r>>2]|0){e=(c[r>>2]|0)+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0}else{d=0;e=0}j=fR(c[b>>2]|0,c[b+4>>2]|0,d|0,e|0)|0;a=q;c[a>>2]=j;c[a+4>>2]=C;if(c[r>>2]|0){a=c[r>>2]|0;c[a>>2]=(c[a>>2]|0)+1}q=yn(r,c[q>>2]|0,c[q+4>>2]|0)|0;c[s>>2]=q;if(!q){q=(c[r>>2]|0)+24|0;c[q>>2]=-1;c[q+4>>2]=-1;q=(c[r>>2]|0)+32|0;c[q>>2]=0;c[q+4>>2]=0;q=c[o+4>>2]|0;t=(c[r>>2]|0)+16|0;c[t>>2]=c[o>>2];c[t+4>>2]=q;t=9}}do if((t|0)==9){t=p;q=c[t+4>>2]|0;if((q|0)>0|(q|0)==0&(c[t>>2]|0)>>>0>0?(q=(c[r>>2]|0)+24|0,t=p,(c[q>>2]|0)!=(c[t>>2]|0)?1:(c[q+4>>2]|0)!=(c[t+4>>2]|0)):0){t=yn(r,1,0)|0;c[s>>2]=t;if(t)break;t=p;t=yn(r,c[t>>2]|0,c[t+4>>2]|0)|0;c[s>>2]=t;if(t)break;o=p;q=c[o+4>>2]|0;t=(c[r>>2]|0)+24|0;c[t>>2]=c[o>>2];c[t+4>>2]=q;t=(c[r>>2]|0)+32|0;c[t>>2]=0;c[t+4>>2]=0}t=p;q=c[t+4>>2]|0;if((q|0)>0|(q|0)==0&(c[t>>2]|0)>>>0>=0?(q=k,q=gR(2,0,c[q>>2]|0,c[q+4>>2]|0)|0,t=(c[r>>2]|0)+32|0,t=fR(q|0,C|0,c[t>>2]|0,c[t+4>>2]|0)|0,c[s>>2]=yn(r,t,C)|0,(c[s>>2]|0)==0):0){p=k;q=c[p+4>>2]|0;t=(c[r>>2]|0)+32|0;c[t>>2]=c[p>>2];c[t+4>>2]=q}}while(0);c[c[l>>2]>>2]=c[s>>2];if((c[r>>2]|0)!=(c[c[n>>2]>>2]|0)){c[c[n>>2]>>2]=c[r>>2];c[m>>2]=1;t=c[m>>2]|0;i=u;return t|0}else{c[m>>2]=0;t=c[m>>2]|0;i=u;return t|0}return 0}function yn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+20|0;g=l+16|0;h=l;k=l+12|0;j=l+8|0;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;c[k>>2]=c[c[g>>2]>>2];do if(c[k>>2]|0){if(((c[c[k>>2]>>2]|0)+10+1|0)>(c[(c[k>>2]|0)+8>>2]|0)){c[j>>2]=c[(c[k>>2]|0)+8>>2]<<1;c[k>>2]=Ld(c[k>>2]|0,40+(c[j>>2]|0)|0)|0;if(c[k>>2]|0){c[(c[k>>2]|0)+8>>2]=c[j>>2];c[(c[k>>2]|0)+4>>2]=(c[k>>2]|0)+40;break}Kd(c[c[g>>2]>>2]|0);c[c[g>>2]>>2]=0;c[f>>2]=7;b=c[f>>2]|0;i=l;return b|0}}else{c[k>>2]=Id(140)|0;if(c[k>>2]|0){c[(c[k>>2]|0)+8>>2]=100;c[(c[k>>2]|0)+4>>2]=(c[k>>2]|0)+40;c[c[k>>2]>>2]=0;break}c[f>>2]=7;b=c[f>>2]|0;i=l;return b|0}while(0);j=h;j=El((c[(c[k>>2]|0)+4>>2]|0)+(c[c[k>>2]>>2]|0)|0,c[j>>2]|0,c[j+4>>2]|0)|0;b=c[k>>2]|0;c[b>>2]=(c[b>>2]|0)+j;a[(c[(c[k>>2]|0)+4>>2]|0)+(c[c[k>>2]>>2]|0)>>0]=0;c[c[g>>2]>>2]=c[k>>2];c[f>>2]=0;b=c[f>>2]|0;i=l;return b|0}function zn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;j=l;d=l+24|0;e=l+20|0;f=l+16|0;h=l+12|0;g=l+8|0;k=l+4|0;c[e>>2]=a;c[f>>2]=b;c[h>>2]=0;do if(!(c[(c[e>>2]|0)+8>>2]|0)){c[g>>2]=c[c[e>>2]>>2];c[j>>2]=c[(c[g>>2]|0)+216>>2];c[k>>2]=Od(24088,j)|0;if(c[k>>2]|0){c[h>>2]=af(c[(c[g>>2]|0)+12>>2]|0,c[k>>2]|0,-1,(c[e>>2]|0)+8|0,0)|0;Kd(c[k>>2]|0);break}c[d>>2]=7;k=c[d>>2]|0;i=l;return k|0}while(0);c[c[f>>2]>>2]=c[(c[e>>2]|0)+8>>2];c[d>>2]=c[h>>2];k=c[d>>2]|0;i=l;return k|0}function An(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;l=m+4|0;k=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=c[c[f>>2]>>2];if((c[k>>2]|0)==5){c[l>>2]=Ob[c[h>>2]&255](c[f>>2]|0,c[c[g>>2]>>2]|0,c[j>>2]|0)|0;d=c[g>>2]|0;c[d>>2]=(c[d>>2]|0)+1;d=c[l>>2]|0;i=m;return d|0}c[l>>2]=An(c[(c[f>>2]|0)+12>>2]|0,c[g>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;if(!((c[l>>2]|0)==0&(c[k>>2]|0)!=2)){d=c[l>>2]|0;i=m;return d|0}c[l>>2]=An(c[(c[f>>2]|0)+16>>2]|0,c[g>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;d=c[l>>2]|0;i=m;return d|0}function Bn(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;k=m+8|0;l=m+4|0;j=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;c[k>>2]=c[c[f>>2]>>2];c[l>>2]=0;if((d[(c[g>>2]|0)+34>>0]|0|0)!=0?(c[c[(c[g>>2]|0)+8>>2]>>2]|0)!=1:0){c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[(c[k>>2]|0)+24>>2]|0))break;c[(c[h>>2]|0)+(((c[j>>2]|0)*3|0)+1<<2)>>2]=c[(c[f>>2]|0)+64>>2];c[(c[h>>2]|0)+(((c[j>>2]|0)*3|0)+2<<2)>>2]=c[(c[f>>2]|0)+64>>2];c[j>>2]=(c[j>>2]|0)+1}l=c[l>>2]|0;i=m;return l|0}c[l>>2]=Cn(c[f>>2]|0,c[g>>2]|0)|0;if(c[l>>2]|0){l=c[l>>2]|0;i=m;return l|0}c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[(c[k>>2]|0)+24>>2]|0))break;c[(c[h>>2]|0)+(((c[j>>2]|0)*3|0)+1<<2)>>2]=c[(c[(c[g>>2]|0)+40>>2]|0)+(((c[j>>2]|0)*3|0)+1<<2)>>2];c[(c[h>>2]|0)+(((c[j>>2]|0)*3|0)+2<<2)>>2]=c[(c[(c[g>>2]|0)+40>>2]|0)+(((c[j>>2]|0)*3|0)+2<<2)>>2];c[j>>2]=(c[j>>2]|0)+1}l=c[l>>2]|0;i=m;return l|0}function Cn(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;g=s+44|0;h=s+40|0;f=s+36|0;q=s+32|0;p=s+28|0;o=s+24|0;m=s+20|0;l=s+8|0;k=s;j=s+48|0;n=s+16|0;c[h>>2]=b;c[f>>2]=e;c[q>>2]=0;do if(!(c[(c[f>>2]|0)+40>>2]|0)){c[p>>2]=c[c[h>>2]>>2];t=(c[h>>2]|0)+32|0;b=c[t+4>>2]|0;e=l;c[e>>2]=c[t>>2];c[e+4>>2]=b;c[o>>2]=c[f>>2];while(1){if(c[(c[o>>2]|0)+8>>2]|0)f=(c[c[(c[o>>2]|0)+8>>2]>>2]|0)==1;else f=0;b=c[o>>2]|0;if(!f)break;c[o>>2]=c[b+8>>2]}b=b+24|0;e=c[b+4>>2]|0;t=k;c[t>>2]=c[b>>2];c[t+4>>2]=e;a[j>>0]=a[(c[o>>2]|0)+32>>0]|0;c[m>>2]=c[o>>2];while(1){if(!(c[m>>2]|0))break;f=c[m>>2]|0;if((c[c[m>>2]>>2]|0)!=5)f=c[f+16>>2]|0;c[n>>2]=f;t=Id((c[(c[p>>2]|0)+24>>2]|0)*3<<2)|0;c[(c[n>>2]|0)+40>>2]=t;if(!(c[(c[n>>2]|0)+40>>2]|0)){r=12;break}kR(c[(c[n>>2]|0)+40>>2]|0,0,(c[(c[p>>2]|0)+24>>2]|0)*3<<2|0)|0;c[m>>2]=c[(c[m>>2]|0)+12>>2]}if((r|0)==12){c[g>>2]=7;t=c[g>>2]|0;i=s;return t|0}Mm(c[h>>2]|0,c[o>>2]|0,q);while(1){if(!((d[(c[h>>2]|0)+6>>0]|0)==0?(c[q>>2]|0)==0:0))break;do{if(!(d[(c[h>>2]|0)+7>>0]|0))Zd(c[(c[h>>2]|0)+8>>2]|0)|0;Nm(c[h>>2]|0,c[o>>2]|0,q);a[(c[h>>2]|0)+6>>0]=a[(c[o>>2]|0)+32>>0]|0;a[(c[h>>2]|0)+7>>0]=1;c[(c[h>>2]|0)+88>>2]=1;p=(c[o>>2]|0)+24|0;r=c[p+4>>2]|0;t=(c[h>>2]|0)+32|0;c[t>>2]=c[p>>2];c[t+4>>2]=r;if(d[(c[h>>2]|0)+6>>0]|0)break;if((c[c[o>>2]>>2]|0)!=1)break}while((Im(c[h>>2]|0,q)|0)!=0);if(c[q>>2]|0)continue;if(d[(c[h>>2]|0)+6>>0]|0)continue;Dn(c[o>>2]|0)}a[(c[h>>2]|0)+6>>0]=0;p=l;r=c[p+4>>2]|0;t=(c[h>>2]|0)+32|0;c[t>>2]=c[p>>2];c[t+4>>2]=r;if(a[j>>0]|0){a[(c[o>>2]|0)+32>>0]=a[j>>0]|0;break}Mm(c[h>>2]|0,c[o>>2]|0,q);do{Nm(c[h>>2]|0,c[o>>2]|0,q);r=(c[o>>2]|0)+24|0;t=k}while(((c[r>>2]|0)!=(c[t>>2]|0)?1:(c[r+4>>2]|0)!=(c[t+4>>2]|0))?(c[q>>2]|0)==0:0)}while(0);c[g>>2]=c[q>>2];t=c[g>>2]|0;i=s;return t|0}function Dn(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;e=l+12|0;j=l+8|0;k=l+4|0;g=l+20|0;h=l;c[f>>2]=b;if(!(c[f>>2]|0)){i=l;return}c[e>>2]=c[(c[f>>2]|0)+20>>2];a:do if((c[e>>2]|0)!=0?(c[(c[e>>2]|0)+28>>2]|0)!=0:0){c[j>>2]=0;c[k>>2]=c[(c[e>>2]|0)+28>>2];while(1){a[g>>0]=0;c[h>>2]=0;while(1){if(!(254&(a[c[k>>2]>>0]|d[g>>0])))break;if(!(d[g>>0]&128))c[h>>2]=(c[h>>2]|0)+1;e=c[k>>2]|0;c[k>>2]=e+1;a[g>>0]=a[e>>0]&128}e=(c[(c[f>>2]|0)+40>>2]|0)+(((c[j>>2]|0)*3|0)+1<<2)|0;c[e>>2]=(c[e>>2]|0)+(c[h>>2]|0);e=(c[(c[f>>2]|0)+40>>2]|0)+(((c[j>>2]|0)*3|0)+2<<2)|0;c[e>>2]=(c[e>>2]|0)+((c[h>>2]|0)>0&1);if(!(a[c[k>>2]>>0]|0))break a;c[k>>2]=(c[k>>2]|0)+1;b=c[k>>2]|0;if(d[c[k>>2]>>0]&128)b=Vl(b,j)|0;else{c[j>>2]=d[b>>0];b=1}c[k>>2]=(c[k>>2]|0)+b}}while(0);Dn(c[(c[f>>2]|0)+12>>2]|0);Dn(c[(c[f>>2]|0)+16>>2]|0);i=l;return}function En(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+32|0;p=o+28|0;f=o+24|0;m=o+20|0;h=o+16|0;l=o+12|0;k=o+8|0;g=o+4|0;j=o;c[p>>2]=b;c[f>>2]=e;c[m>>2]=c[c[c[f>>2]>>2]>>2];c[l>>2]=c[(c[p>>2]|0)+20>>2];c[k>>2]=c[(c[l>>2]|0)+28>>2];c[g>>2]=0;e=c[(c[p>>2]|0)+36>>2]|0;b=c[(c[f>>2]|0)+4>>2]|0;if((a[(c[f>>2]|0)+24>>0]|0)==121)c[h>>2]=_(e,b)|0;else c[h>>2]=_(e,(b+31|0)/32|0)|0;while(1){c[j>>2]=Lm(k)|0;if(!((c[(c[l>>2]|0)+68>>2]|0)<(c[(c[m>>2]|0)+24>>2]|0)?(c[(c[l>>2]|0)+68>>2]|0)!=(c[g>>2]|0):0))n=6;do if((n|0)==6){n=0;e=c[j>>2]|0;if((a[(c[f>>2]|0)+24>>0]|0)==121){c[(c[(c[f>>2]|0)+28>>2]|0)+((c[h>>2]|0)+(c[g>>2]|0)<<2)>>2]=e;break}if(e){p=(c[(c[f>>2]|0)+28>>2]|0)+((c[h>>2]|0)+(((c[g>>2]|0)+1|0)/32|0)<<2)|0;c[p>>2]=c[p>>2]|1<<(c[g>>2]&31)}}while(0);if((a[c[k>>2]>>0]|0)!=1)break;c[k>>2]=(c[k>>2]|0)+1;e=c[k>>2]|0;if(d[c[k>>2]>>0]&128)e=Vl(e,g)|0;else{c[g>>2]=d[e>>0];e=1}c[k>>2]=(c[k>>2]|0)+e}i=o;return}function Fn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+16|0;h=e+12|0;f=e+8|0;j=e+4|0;g=e;c[h>>2]=a;c[f>>2]=b;c[j>>2]=d;c[g>>2]=c[j>>2];c[(c[g>>2]|0)+(c[f>>2]<<4)>>2]=c[h>>2];i=e;return 0}function Gn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=i;i=i+32|0;b=g+16|0;e=g+12|0;d=g;f=g+8|0;c[b>>2]=a;c[e>>2]=c[(c[b>>2]|0)+8>>2];c[f>>2]=0;h=Ul(c[e>>2]|0,d)|0;c[e>>2]=(c[e>>2]|0)+h;h=d;a=d;if((c[h>>2]|0)==0&(c[h+4>>2]|0)==0|(c[a>>2]|0)==1&(c[a+4>>2]|0)==0){c[e>>2]=0;c[f>>2]=1;e=c[e>>2]|0;h=c[b>>2]|0;h=h+8|0;c[h>>2]=e;h=c[f>>2]|0;i=g;return h|0}else{a=d;a=fR(c[a>>2]|0,c[a+4>>2]|0,2,0)|0;h=(c[b>>2]|0)+12|0;c[h>>2]=(c[h>>2]|0)+a;e=c[e>>2]|0;h=c[b>>2]|0;h=h+8|0;c[h>>2]=e;h=c[f>>2]|0;i=g;return h|0}return 0}function Hn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;f=i;i=i+32|0;k=f+20|0;j=f+12|0;e=f+8|0;g=f+4|0;h=f;c[k>>2]=a;c[f+16>>2]=b;c[j>>2]=d;c[e>>2]=0;c[g>>2]=c[(c[k>>2]|0)+20>>2];c[h>>2]=c[j>>2];a=(c[h>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)+1;a=(c[h>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(c[(c[g>>2]|0)+64>>2]|0);i=f;return c[e>>2]|0}function In(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+20|0;f=k;g=k+16|0;h=k+12|0;j=k+8|0;c[l>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[g>>2]=e;c[h>>2]=0;c[j>>2]=jl(c[l>>2]|0,21,h,0)|0;do if(!(c[j>>2]|0)){l=f;Me(c[h>>2]|0,1,c[l>>2]|0,c[l+4>>2]|0)|0;c[j>>2]=ue(c[h>>2]|0)|0;if((c[j>>2]|0)==100?(He(c[h>>2]|0,0)|0)==4:0){c[j>>2]=0;break}l=Zd(c[h>>2]|0)|0;c[j>>2]=l;c[j>>2]=(c[j>>2]|0)==0?267:l;c[h>>2]=0}while(0);c[c[g>>2]>>2]=c[h>>2];i=k;return c[j>>2]|0}function Jn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;h=g+12|0;d=g+8|0;e=g+4|0;f=g;c[h>>2]=a;c[d>>2]=b;c[e>>2]=0;c[f>>2]=jl(c[h>>2]|0,22,e,0)|0;do if(!(c[f>>2]|0)){Le(c[e>>2]|0,1,0)|0;if((ue(c[e>>2]|0)|0)==100?(He(c[e>>2]|0,0)|0)==4:0)break;h=Zd(c[e>>2]|0)|0;c[f>>2]=h;c[f>>2]=(c[f>>2]|0)==0?267:h;c[e>>2]=0}while(0);c[c[d>>2]>>2]=c[e>>2];i=g;return c[f>>2]|0}function Kn(b){b=b|0;var e=0,f=0,g=0;f=i;i=i+16|0;g=f+4|0;e=f;c[g>>2]=b;c[e>>2]=(c[g>>2]|0)+(0-(c[(c[g>>2]|0)+-4>>2]|0));b=c[e>>2]|0;if((c[g>>2]|0)==((c[e>>2]|0)+16+4|0))a[b+1>>0]=0;else a[b+2>>0]=0;if(d[c[e>>2]>>0]|0){i=f;return}if(d[(c[e>>2]|0)+1>>0]|0){i=f;return}if(d[(c[e>>2]|0)+2>>0]|0){i=f;return}Kd(c[e>>2]|0);i=f;return}function Ln(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;a=c[h>>2]|0;c[a>>2]=(c[a>>2]|0)+1;c[(c[f>>2]|0)+36>>2]=c[g>>2];i=e;return 0}function Mn(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=$e(c[(c[b>>2]|0)+12>>2]|0,24216,0,0,0)|0;do if(!(c[d>>2]|0)){c[d>>2]=Nn(c[b>>2]|0,1)|0;a=c[(c[b>>2]|0)+12>>2]|0;if(!((c[d>>2]|0)==0|(c[d>>2]|0)==101)){$e(a,24244,0,0,0)|0;$e(c[(c[b>>2]|0)+12>>2]|0,24231,0,0,0)|0;break}c[e>>2]=$e(a,24231,0,0,0)|0;if(c[e>>2]|0)c[d>>2]=c[e>>2]}while(0);sm(c[b>>2]|0);i=f;return c[d>>2]|0}function Nn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;d=m+28|0;e=m+24|0;f=m+20|0;k=m+16|0;j=m+12|0;l=m+8|0;g=m+4|0;h=m;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;c[j>>2]=0;c[k>>2]=jl(c[d>>2]|0,27,j,0)|0;if(!(c[k>>2]|0)){Le(c[j>>2]|0,1,c[(c[d>>2]|0)+272>>2]|0)|0;Le(c[j>>2]|0,2,c[(c[d>>2]|0)+248>>2]|0)|0;a:while(1){a=(ue(c[j>>2]|0)|0)==100;b=c[j>>2]|0;if(!a)break;c[h>>2]=De(b,0)|0;c[g>>2]=0;while(1){if(c[k>>2]|0)continue a;if((c[g>>2]|0)>=(c[(c[d>>2]|0)+248>>2]|0))continue a;c[k>>2]=il(c[d>>2]|0,c[h>>2]|0,c[g>>2]|0,-2)|0;if((c[k>>2]|0)==101){c[f>>2]=1;c[k>>2]=0}c[g>>2]=(c[g>>2]|0)+1}}c[l>>2]=Zd(b)|0;if(!(c[k>>2]|0))c[k>>2]=c[l>>2]}sm(c[d>>2]|0);dl(c[d>>2]|0);i=m;return((c[k>>2]|0)==0&(c[e>>2]|0)!=0&(c[f>>2]|0)!=0?101:c[k>>2]|0)|0}function On(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,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=i;i=i+208|0;y=C+32|0;e=C+132|0;f=C+128|0;v=C+124|0;t=C+120|0;A=C+116|0;r=C+112|0;l=C+108|0;B=C+96|0;x=C;s=C+92|0;h=C+88|0;g=C+84|0;p=C+80|0;n=C+76|0;m=C+72|0;z=C+68|0;q=C+64|0;k=C+60|0;o=C+56|0;w=C+52|0;u=C+48|0;j=C+136|0;c[e>>2]=b;c[f>>2]=d;c[v>>2]=c[c[f>>2]>>2];c[t>>2]=c[c[(c[v>>2]|0)+36>>2]>>2];c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(c[(c[f>>2]|0)+12>>2]|0)){ne(c[e>>2]|0,19266,0,0);i=C;return}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[x+28>>2]=0;c[A>>2]=Dm(c[f>>2]|0,0,r)|0;a:do if(!(c[A>>2]|0)){c[x+24>>2]=Id((c[r>>2]|0)*12|0)|0;if(!(c[x+24>>2]|0)){c[A>>2]=7;break}D=(c[f>>2]|0)+32|0;d=c[D+4>>2]|0;b=x+16|0;c[b>>2]=c[D>>2];c[b+4>>2]=d;c[x>>2]=c[f>>2];c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[(c[v>>2]|0)+24>>2]|0))break a;c[g>>2]=0;c[p>>2]=0;c[n>>2]=0;c[m>>2]=0;c[x+4>>2]=c[l>>2];c[x+8>>2]=0;Hm(c[(c[f>>2]|0)+12>>2]|0,158,x)|0;c[z>>2]=Fe(c[(c[f>>2]|0)+8>>2]|0,(c[l>>2]|0)+1|0)|0;c[q>>2]=Be(c[(c[f>>2]|0)+8>>2]|0,(c[l>>2]|0)+1|0)|0;if(!(c[z>>2]|0)){if((He(c[(c[f>>2]|0)+8>>2]|0,(c[l>>2]|0)+1|0)|0)!=5)break}else{c[A>>2]=wn(c[(c[v>>2]|0)+36>>2]|0,c[(c[f>>2]|0)+16>>2]|0,c[z>>2]|0,c[q>>2]|0,s)|0;if(c[A>>2]|0)break a;c[A>>2]=Sb[c[(c[t>>2]|0)+20>>2]&255](c[s>>2]|0,h,g,p,n,m)|0;while(1){if(c[A>>2]|0)break;c[o>>2]=2147483647;c[w>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[r>>2]|0))break;c[u>>2]=(c[x+24>>2]|0)+((c[k>>2]|0)*12|0);if((c[c[u>>2]>>2]|0)!=0?((c[(c[u>>2]|0)+4>>2]|0)-(c[(c[u>>2]|0)+8>>2]|0)|0)<(c[o>>2]|0):0){c[o>>2]=(c[(c[u>>2]|0)+4>>2]|0)-(c[(c[u>>2]|0)+8>>2]|0);c[w>>2]=c[u>>2]}c[k>>2]=(c[k>>2]|0)+1}if(!(c[w>>2]|0)){c[A>>2]=101;continue}d=c[w>>2]|0;if(!(254&a[c[c[w>>2]>>2]>>0]))c[d>>2]=0;else Qn(d,(c[w>>2]|0)+4|0);while(1){if(c[A>>2]|0)break;if((c[m>>2]|0)>=(c[o>>2]|0))break;c[A>>2]=Sb[c[(c[t>>2]|0)+20>>2]&255](c[s>>2]|0,h,g,p,n,m)|0}if(!(c[A>>2]|0)){d=((c[w>>2]|0)-(c[x+24>>2]|0)|0)/12|0;b=c[p>>2]|0;D=(c[n>>2]|0)-(c[p>>2]|0)|0;c[y>>2]=c[l>>2];c[y+4>>2]=d;c[y+8>>2]=b;c[y+12>>2]=D;Qd(64,j,24261,y)|0;c[A>>2]=Rn(B,j,-1)|0;continue}if((c[A>>2]|0)!=101)continue;if(c[(c[v>>2]|0)+40>>2]|0)continue;c[A>>2]=267}if((c[A>>2]|0)==101)c[A>>2]=0;Tb[c[(c[t>>2]|0)+16>>2]&255](c[s>>2]|0)|0;if(c[A>>2]|0)break a}c[l>>2]=(c[l>>2]|0)+1}c[A>>2]=7}while(0);Kd(c[x+24>>2]|0);sm(c[v>>2]|0);d=c[e>>2]|0;if(c[A>>2]|0){re(d,c[A>>2]|0);Kd(c[B>>2]|0);i=C;return}else{ne(d,c[B>>2]|0,(c[B+4>>2]|0)-1|0,148);i=C;return}}function Pn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+48|0;n=m+36|0;o=m+28|0;h=m+24|0;g=m+20|0;f=m+16|0;j=m+12|0;e=m+8|0;l=m+4|0;k=m;c[n>>2]=a;c[m+32>>2]=b;c[o>>2]=d;c[h>>2]=c[o>>2];c[e>>2]=0;c[l>>2]=Km(c[c[h>>2]>>2]|0,c[n>>2]|0,c[(c[h>>2]|0)+4>>2]|0,j)|0;c[g>>2]=c[(c[(c[n>>2]|0)+20>>2]|0)+64>>2];if(c[j>>2]|0)Qn(j,e);c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[g>>2]|0))break;n=(c[h>>2]|0)+8|0;o=c[n>>2]|0;c[n>>2]=o+1;c[k>>2]=(c[(c[h>>2]|0)+24>>2]|0)+(o*12|0);c[(c[k>>2]|0)+8>>2]=(c[g>>2]|0)-(c[f>>2]|0)-1;c[c[k>>2]>>2]=c[j>>2];c[(c[k>>2]|0)+4>>2]=c[e>>2];c[f>>2]=(c[f>>2]|0)+1}i=m;return c[l>>2]|0}function Qn(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;b=c[c[e>>2]>>2]|0;if((d[c[c[e>>2]>>2]>>0]|0)&128)b=Vl(b,g)|0;else{c[g>>2]=d[b>>0];b=1}e=c[e>>2]|0;c[e>>2]=(c[e>>2]|0)+b;f=c[f>>2]|0;c[f>>2]=(c[f>>2]|0)+((c[g>>2]|0)-2);i=h;return}function Rn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if((c[j>>2]|0)<0)c[j>>2]=BQ(c[h>>2]|0)|0;do if(((c[(c[g>>2]|0)+4>>2]|0)+(c[j>>2]|0)+1|0)>=(c[(c[g>>2]|0)+8>>2]|0)){c[k>>2]=(c[(c[g>>2]|0)+8>>2]|0)+(c[j>>2]|0)+100;c[l>>2]=Ld(c[c[g>>2]>>2]|0,c[k>>2]|0)|0;if(c[l>>2]|0){c[c[g>>2]>>2]=c[l>>2];c[(c[g>>2]|0)+8>>2]=c[k>>2];break}c[f>>2]=7;l=c[f>>2]|0;i=m;return l|0}while(0);iR((c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+4>>2]|0)|0,c[h>>2]|0,c[j>>2]|0)|0;l=(c[g>>2]|0)+4|0;c[l>>2]=(c[l>>2]|0)+(c[j>>2]|0);a[(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+4>>2]|0)>>0]=0;c[f>>2]=0;l=c[f>>2]|0;i=m;return l|0}function Sn(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,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=i;i=i+224|0;j=G+212|0;k=G+208|0;l=G+204|0;m=G+200|0;n=G+196|0;o=G+192|0;p=G+188|0;B=G+184|0;E=G+180|0;r=G+176|0;F=G+164|0;z=G+160|0;q=G+40|0;y=G+156|0;v=G+152|0;w=G+32|0;x=G+24|0;s=G+148|0;t=G+144|0;A=G+140|0;C=G;u=G+136|0;c[j>>2]=a;c[k>>2]=b;c[l>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[B>>2]=c[c[k>>2]>>2];c[E>>2]=0;c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[z>>2]=0;c[y>>2]=-1;if(!(c[(c[k>>2]|0)+12>>2]|0)){ne(c[j>>2]|0,19266,0,0);i=G;return}c[z>>2]=1;a:while(1){g=w;c[g>>2]=0;c[g+4>>2]=0;g=x;c[g>>2]=0;c[g+4>>2]=0;g=c[p>>2]|0;if((c[p>>2]|0)>=0)c[y>>2]=(g+(c[z>>2]|0)-1|0)/(c[z>>2]|0)|0;else c[y>>2]=_(-1,g)|0;c[v>>2]=0;while(1){if((c[v>>2]|0)>=(c[z>>2]|0))break;c[s>>2]=-1;c[A>>2]=q+((c[v>>2]|0)*24|0);d=c[A>>2]|0;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[t>>2]=0;while(1){if((c[t>>2]|0)>=(c[(c[B>>2]|0)+24>>2]|0))break;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[u>>2]=0;if(!((c[o>>2]|0)>=0?(c[t>>2]|0)!=(c[o>>2]|0):0)){d=w;c[E>>2]=Tn(c[y>>2]|0,c[k>>2]|0,c[t>>2]|0,c[d>>2]|0,c[d+4>>2]|0,x,C,u)|0;if(c[E>>2]|0)break a;if((c[u>>2]|0)>(c[s>>2]|0)){d=c[A>>2]|0;c[d>>2]=c[C>>2];c[d+4>>2]=c[C+4>>2];c[d+8>>2]=c[C+8>>2];c[d+12>>2]=c[C+12>>2];c[d+16>>2]=c[C+16>>2];c[d+20>>2]=c[C+20>>2];c[s>>2]=c[u>>2]}}c[t>>2]=(c[t>>2]|0)+1}f=(c[A>>2]|0)+8|0;a=w;e=c[a+4>>2]|c[f+4>>2];d=w;c[d>>2]=c[a>>2]|c[f>>2];c[d+4>>2]=e;c[v>>2]=(c[v>>2]|0)+1}e=x;d=w;if(((c[e>>2]|0)==(c[d>>2]|0)?(c[e+4>>2]|0)==(c[d+4>>2]|0):0)|(c[z>>2]|0)==4){D=20;break}c[z>>2]=(c[z>>2]|0)+1}b:do if((D|0)==20){c[r>>2]=0;while(1){if(!((c[r>>2]|0)<(c[z>>2]|0)?(c[E>>2]|0)==0:0))break b;c[E>>2]=Un(c[k>>2]|0,q+((c[r>>2]|0)*24|0)|0,c[r>>2]|0,(c[r>>2]|0)==((c[z>>2]|0)-1|0)&1,c[y>>2]|0,c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,F)|0;c[r>>2]=(c[r>>2]|0)+1}}while(0);sm(c[B>>2]|0);g=c[j>>2]|0;if(c[E>>2]|0){re(g,c[E>>2]|0);Kd(c[F>>2]|0);i=G;return}else{ne(g,c[F>>2]|0,-1,148);i=G;return}}function Tn(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;D=i;i=i+112|0;k=D+104|0;l=D+100|0;m=D+96|0;n=D+92|0;o=D+16|0;p=D+88|0;q=D+84|0;r=D+80|0;A=D+76|0;z=D+72|0;B=D+48|0;y=D+40|0;t=D+36|0;s=D+32|0;u=D+28|0;v=D+24|0;w=D+8|0;x=D;c[l>>2]=a;c[m>>2]=b;c[n>>2]=d;b=o;c[b>>2]=e;c[b+4>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=j;c[t>>2]=-1;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[A>>2]=Dm(c[m>>2]|0,z,0)|0;if(c[A>>2]|0){c[k>>2]=c[A>>2];B=c[k>>2]|0;i=D;return B|0}c[y>>2]=(c[z>>2]|0)*24;c[B+16>>2]=Id(c[y>>2]|0)|0;if(!(c[B+16>>2]|0)){c[k>>2]=7;B=c[k>>2]|0;i=D;return B|0}kR(c[B+16>>2]|0,0,c[y>>2]|0)|0;c[B>>2]=c[m>>2];c[B+4>>2]=c[n>>2];c[B+8>>2]=c[l>>2];c[B+12>>2]=c[z>>2];c[B+20>>2]=-1;c[A>>2]=Hm(c[(c[m>>2]|0)+12>>2]|0,159,B)|0;if(!(c[A>>2]|0)){c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[z>>2]|0))break;if(c[(c[B+16>>2]|0)+((c[s>>2]|0)*24|0)+12>>2]|0){h=lR(1,0,c[s>>2]|0)|0;g=c[p>>2]|0;b=g;j=c[b+4>>2]|C;c[g>>2]=c[b>>2]|h;c[g+4>>2]=j}c[s>>2]=(c[s>>2]|0)+1}c[c[q>>2]>>2]=c[n>>2];while(1){if(!((Xn(B)|0)!=0^1))break;g=o;Yn(B,c[g>>2]|0,c[g+4>>2]|0,u,v,w,x);if((c[v>>2]|0)<=(c[t>>2]|0))continue;c[(c[q>>2]|0)+4>>2]=c[u>>2];g=x;j=c[g+4>>2]|0;h=(c[q>>2]|0)+16|0;c[h>>2]=c[g>>2];c[h+4>>2]=j;h=w;j=c[h+4>>2]|0;g=(c[q>>2]|0)+8|0;c[g>>2]=c[h>>2];c[g+4>>2]=j;c[t>>2]=c[v>>2]}c[c[r>>2]>>2]=c[t>>2]}Kd(c[B+16>>2]|0);c[k>>2]=c[A>>2];B=c[k>>2]|0;i=D;return B|0}function Un(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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,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=i;i=i+128|0;l=N+112|0;m=N+108|0;P=N+104|0;n=N+100|0;o=N+96|0;p=N+92|0;q=N+88|0;r=N+84|0;s=N+80|0;t=N+76|0;J=N+72|0;K=N+68|0;L=N+64|0;G=N+60|0;y=N+56|0;z=N+52|0;E=N+48|0;B=N+44|0;w=N;O=N+40|0;I=N+36|0;H=N+32|0;v=N+28|0;u=N+24|0;x=N+20|0;A=N+16|0;D=N+12|0;F=N+8|0;c[m>>2]=a;c[P>>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]=j;c[t>>2]=k;c[J>>2]=c[c[m>>2]>>2];c[y>>2]=0;c[z>>2]=0;c[E>>2]=0;c[B>>2]=c[(c[P>>2]|0)+4>>2];g=(c[P>>2]|0)+16|0;e=c[g+4>>2]|0;d=w;c[d>>2]=c[g>>2];c[d+4>>2]=e;c[O>>2]=(c[c[P>>2]>>2]|0)+1;c[L>>2]=Fe(c[(c[m>>2]|0)+8>>2]|0,c[O>>2]|0)|0;d=c[(c[m>>2]|0)+8>>2]|0;e=c[O>>2]|0;if(!(c[L>>2]|0))if((He(d,e)|0)!=5){c[l>>2]=7;P=c[l>>2]|0;i=N;return P|0}else{c[l>>2]=0;P=c[l>>2]|0;i=N;return P|0}c[G>>2]=Be(d,e)|0;c[I>>2]=c[c[(c[J>>2]|0)+36>>2]>>2];c[K>>2]=wn(c[(c[J>>2]|0)+36>>2]|0,c[(c[m>>2]|0)+16>>2]|0,c[L>>2]|0,c[G>>2]|0,H)|0;if(c[K>>2]|0){c[l>>2]=c[K>>2];P=c[l>>2]|0;i=N;return P|0}while(1){if(c[K>>2]|0)break;c[u>>2]=-1;c[x>>2]=0;c[A>>2]=0;c[D>>2]=0;c[K>>2]=Sb[c[(c[I>>2]|0)+20>>2]&255](c[H>>2]|0,v,u,x,A,y)|0;if(c[K>>2]|0){M=9;break}if((c[y>>2]|0)<(c[B>>2]|0))continue;if(!(c[E>>2]|0)){c[F>>2]=(c[G>>2]|0)-(c[x>>2]|0);c[K>>2]=Vn(c[J>>2]|0,c[(c[m>>2]|0)+16>>2]|0,c[p>>2]|0,(c[L>>2]|0)+(c[x>>2]|0)|0,c[F>>2]|0,B,w)|0;c[E>>2]=1;do if(!(c[K>>2]|0)){if((c[B>>2]|0)>0|(c[n>>2]|0)>0){c[K>>2]=Rn(c[t>>2]|0,c[s>>2]|0,-1)|0;break}if(c[x>>2]|0)c[K>>2]=Rn(c[t>>2]|0,c[L>>2]|0,c[x>>2]|0)|0}while(0);if(c[K>>2]|0)continue;if((c[y>>2]|0)<(c[B>>2]|0))continue}if((c[y>>2]|0)>=((c[B>>2]|0)+(c[p>>2]|0)|0)){M=21;break}P=w;g=c[P>>2]|0;P=c[P+4>>2]|0;O=lR(1,0,(c[y>>2]|0)-(c[B>>2]|0)|0)|0;c[D>>2]=((g&O|0)!=0|(P&C|0)!=0)&1;if((c[y>>2]|0)>(c[B>>2]|0))c[K>>2]=Rn(c[t>>2]|0,(c[L>>2]|0)+(c[z>>2]|0)|0,(c[x>>2]|0)-(c[z>>2]|0)|0)|0;if((c[K>>2]|0)==0&(c[D>>2]|0)!=0)c[K>>2]=Rn(c[t>>2]|0,c[q>>2]|0,-1)|0;if(!(c[K>>2]|0))c[K>>2]=Rn(c[t>>2]|0,(c[L>>2]|0)+(c[x>>2]|0)|0,(c[A>>2]|0)-(c[x>>2]|0)|0)|0;if((c[K>>2]|0)==0&(c[D>>2]|0)!=0)c[K>>2]=Rn(c[t>>2]|0,c[r>>2]|0,-1)|0;c[z>>2]=c[A>>2]}if((M|0)==9){if((c[K>>2]|0)==101)c[K>>2]=Rn(c[t>>2]|0,(c[L>>2]|0)+(c[z>>2]|0)|0,-1)|0}else if((M|0)==21?(c[o>>2]|0)!=0:0)c[K>>2]=Rn(c[t>>2]|0,c[s>>2]|0,-1)|0;Tb[c[(c[I>>2]|0)+16>>2]&255](c[H>>2]|0)|0;c[l>>2]=c[K>>2];P=c[l>>2]|0;i=N;return P|0}function Vn(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0;F=i;i=i+96|0;w=F+84|0;j=F+80|0;k=F+76|0;x=F+72|0;l=F+68|0;m=F+64|0;y=F+60|0;z=F+56|0;A=F;s=F+52|0;t=F+48|0;r=F+44|0;D=F+40|0;B=F+36|0;E=F+32|0;v=F+28|0;u=F+24|0;q=F+20|0;n=F+16|0;o=F+12|0;p=F+8|0;c[j>>2]=a;c[k>>2]=b;c[x>>2]=d;c[l>>2]=e;c[m>>2]=f;c[y>>2]=g;c[z>>2]=h;a=c[z>>2]|0;g=c[a+4>>2]|0;e=A;c[e>>2]=c[a>>2];c[e+4>>2]=g;e=A;do if((c[e>>2]|0)!=0|(c[e+4>>2]|0)!=0){c[s>>2]=0;while(1){e=A;a=c[e>>2]|0;e=c[e+4>>2]|0;g=lR(1,0,c[s>>2]|0)|0;if(!(((a&g|0)!=0|(e&C|0)!=0)^1))break;c[s>>2]=(c[s>>2]|0)+1}c[t>>2]=0;while(1){e=A;a=c[e>>2]|0;e=c[e+4>>2]|0;g=lR(1,0,(c[x>>2]|0)-1-(c[t>>2]|0)|0)|0;if(!(((a&g|0)!=0|(e&C|0)!=0)^1))break;c[t>>2]=(c[t>>2]|0)+1}c[r>>2]=((c[s>>2]|0)-(c[t>>2]|0)|0)/2|0;if((c[r>>2]|0)>0){c[B>>2]=0;c[v>>2]=c[c[(c[j>>2]|0)+36>>2]>>2];c[E>>2]=wn(c[(c[j>>2]|0)+36>>2]|0,c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,u)|0;if(c[E>>2]|0){c[w>>2]=c[E>>2];E=c[w>>2]|0;i=F;return E|0}while(1){if(c[E>>2]|0)break;if((c[B>>2]|0)>=((c[x>>2]|0)+(c[r>>2]|0)|0))break;c[n>>2]=0;c[o>>2]=0;c[p>>2]=0;c[E>>2]=Sb[c[(c[v>>2]|0)+20>>2]&255](c[u>>2]|0,q,n,o,p,B)|0}Tb[c[(c[v>>2]|0)+16>>2]&255](c[u>>2]|0)|0;j=c[E>>2]|0;if((c[E>>2]|0)!=0&(c[E>>2]|0)!=101){c[w>>2]=j;E=c[w>>2]|0;i=F;return E|0}else{c[D>>2]=((j|0)==101&1)+(c[B>>2]|0)-(c[x>>2]|0);if((c[D>>2]|0)<=0)break;E=c[y>>2]|0;c[E>>2]=(c[E>>2]|0)+(c[D>>2]|0);E=A;D=hR(c[E>>2]|0,c[E+4>>2]|0,c[D>>2]|0)|0;E=c[z>>2]|0;c[E>>2]=D;c[E+4>>2]=C;break}}}while(0);c[w>>2]=0;E=c[w>>2]|0;i=F;return E|0}function Wn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;j=i;i=i+32|0;l=j+28|0;m=j+24|0;n=j+20|0;k=j+16|0;g=j+12|0;f=j+8|0;h=j+4|0;e=j;c[l>>2]=a;c[m>>2]=b;c[n>>2]=d;c[k>>2]=c[n>>2];c[g>>2]=(c[(c[k>>2]|0)+16>>2]|0)+((c[m>>2]|0)*24|0);c[c[g>>2]>>2]=c[(c[(c[l>>2]|0)+20>>2]|0)+64>>2];c[h>>2]=Km(c[c[k>>2]>>2]|0,c[l>>2]|0,c[(c[k>>2]|0)+4>>2]|0,f)|0;if(!(c[f>>2]|0)){n=c[h>>2]|0;i=j;return n|0}c[e>>2]=0;c[(c[g>>2]|0)+4>>2]=c[f>>2];Qn(f,e);c[(c[g>>2]|0)+12>>2]=c[f>>2];c[(c[g>>2]|0)+20>>2]=c[f>>2];c[(c[g>>2]|0)+8>>2]=c[e>>2];c[(c[g>>2]|0)+16>>2]=c[e>>2];n=c[h>>2]|0;i=j;return n|0}function Xn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;b=l+28|0;d=l+24|0;e=l+20|0;h=l+16|0;g=l+12|0;f=l+8|0;j=l+4|0;k=l;c[d>>2]=a;a:do if((c[(c[d>>2]|0)+20>>2]|0)<0){c[(c[d>>2]|0)+20>>2]=0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[d>>2]|0)+12>>2]|0))break a;c[h>>2]=(c[(c[d>>2]|0)+16>>2]|0)+((c[e>>2]|0)*24|0);Zn((c[h>>2]|0)+12|0,(c[h>>2]|0)+8|0,c[(c[d>>2]|0)+8>>2]|0);c[e>>2]=(c[e>>2]|0)+1}}else{c[f>>2]=2147483647;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[d>>2]|0)+12>>2]|0))break;c[j>>2]=(c[(c[d>>2]|0)+16>>2]|0)+((c[e>>2]|0)*24|0);if((c[(c[j>>2]|0)+12>>2]|0)!=0?(c[(c[j>>2]|0)+8>>2]|0)<(c[f>>2]|0):0)c[f>>2]=c[(c[j>>2]|0)+8>>2];c[e>>2]=(c[e>>2]|0)+1}if((c[f>>2]|0)==2147483647){c[b>>2]=1;k=c[b>>2]|0;i=l;return k|0}j=(c[f>>2]|0)-(c[(c[d>>2]|0)+8>>2]|0)+1|0;c[g>>2]=j;c[(c[d>>2]|0)+20>>2]=j;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[d>>2]|0)+12>>2]|0))break a;c[k>>2]=(c[(c[d>>2]|0)+16>>2]|0)+((c[e>>2]|0)*24|0);Zn((c[k>>2]|0)+12|0,(c[k>>2]|0)+8|0,(c[f>>2]|0)+1|0);Zn((c[k>>2]|0)+20|0,(c[k>>2]|0)+16|0,c[g>>2]|0);c[e>>2]=(c[e>>2]|0)+1}}while(0);c[b>>2]=0;k=c[b>>2]|0;i=l;return k|0}function Yn(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+96|0;k=B+84|0;l=B+32|0;m=B+80|0;n=B+76|0;o=B+72|0;p=B+68|0;t=B+64|0;s=B+60|0;q=B+56|0;v=B+24|0;w=B+16|0;A=B+52|0;z=B+48|0;r=B+44|0;u=B+40|0;x=B+8|0;y=B;c[k>>2]=b;b=l;c[b>>2]=d;c[b+4>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=j;c[t>>2]=c[(c[k>>2]|0)+20>>2];c[s>>2]=0;j=v;c[j>>2]=0;c[j+4>>2]=0;j=w;c[j>>2]=0;c[j+4>>2]=0;c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[(c[k>>2]|0)+12>>2]|0))break;c[A>>2]=(c[(c[k>>2]|0)+16>>2]|0)+((c[q>>2]|0)*24|0); +a:do if(c[(c[A>>2]|0)+20>>2]|0){c[z>>2]=c[(c[A>>2]|0)+20>>2];c[r>>2]=c[(c[A>>2]|0)+16>>2];while(1){if((c[r>>2]|0)>=((c[t>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0)|0))break a;f=lR(1,0,c[q>>2]|0)|0;h=x;c[h>>2]=f;c[h+4>>2]=C;h=lR(1,0,(c[r>>2]|0)-(c[t>>2]|0)|0)|0;f=y;c[f>>2]=h;c[f+4>>2]=C;f=v;h=l;j=x;d=c[s>>2]|0;if(((c[f>>2]|c[h>>2])&c[j>>2]|0)!=0?1:((c[f+4>>2]|c[h+4>>2])&c[j+4>>2]|0)!=0)c[s>>2]=d+1;else c[s>>2]=d+1e3;f=x;g=v;h=c[g+4>>2]|c[f+4>>2];j=v;c[j>>2]=c[g>>2]|c[f>>2];c[j+4>>2]=h;c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[c[A>>2]>>2]|0))break;f=y;f=hR(c[f>>2]|0,c[f+4>>2]|0,c[u>>2]|0)|0;g=w;h=c[g+4>>2]|C;j=w;c[j>>2]=c[g>>2]|f;c[j+4>>2]=h;c[u>>2]=(c[u>>2]|0)+1}if(!(a[c[z>>2]>>0]&254))break a;Qn(z,r)}}while(0);c[q>>2]=(c[q>>2]|0)+1}c[c[m>>2]>>2]=c[t>>2];c[c[n>>2]>>2]=c[s>>2];A=v;z=c[A+4>>2]|0;y=c[o>>2]|0;c[y>>2]=c[A>>2];c[y+4>>2]=z;y=w;z=c[y+4>>2]|0;A=c[p>>2]|0;c[A>>2]=c[y>>2];c[A+4>>2]=z;i=B;return}function Zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+16|0;g=m+12|0;h=m+8|0;k=m+4|0;j=m;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[k>>2]=c[c[f>>2]>>2];if(!(c[k>>2]|0)){i=m;return}c[j>>2]=c[c[g>>2]>>2];while(1){if((c[j>>2]|0)>=(c[h>>2]|0))break;if(!(a[c[k>>2]>>0]&254)){l=5;break}Qn(k,j)}if((l|0)==5){c[j>>2]=-1;c[k>>2]=0}c[c[g>>2]>>2]=c[j>>2];c[c[f>>2]>>2]=c[k>>2];i=m;return}function _n(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;j=h+16|0;d=h+12|0;g=h+8|0;e=h+4|0;f=h;c[j>>2]=a;c[d>>2]=b;c[e>>2]=0;c[f>>2]=0;c[g>>2]=jl(c[j>>2]|0,36,f,0)|0;if(c[g>>2]|0){b=c[e>>2]|0;j=c[d>>2]|0;c[j>>2]=b;j=c[g>>2]|0;i=h;return j|0}if(100==(ue(c[f>>2]|0)|0))c[e>>2]=De(c[f>>2]|0,0)|0;c[g>>2]=Zd(c[f>>2]|0)|0;b=c[e>>2]|0;j=c[d>>2]|0;c[j>>2]=b;j=c[g>>2]|0;i=h;return j|0}function $n(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0;D=i;i=i+128|0;f=D+112|0;g=D+108|0;E=D+104|0;h=D+100|0;A=D+96|0;u=D+92|0;w=D+88|0;x=D+84|0;z=D+80|0;v=D+76|0;n=D+16|0;m=D+64|0;j=D+60|0;t=D+8|0;y=D+52|0;l=D+48|0;p=D+44|0;q=D+40|0;o=D;r=D+36|0;k=D+32|0;B=D+28|0;s=D+24|0;c[g>>2]=a;c[E>>2]=b;c[h>>2]=e;c[u>>2]=c[E>>2];c[v>>2]=0;a=n;c[a>>2]=0;c[a+4>>2]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[j>>2]=0;c[D+56>>2]=640;c[z>>2]=Id(640)|0;if(!(c[z>>2]|0)){c[f>>2]=7;E=c[f>>2]|0;i=D;return E|0}c[x>>2]=(c[z>>2]|0)+568;c[w>>2]=(c[x>>2]|0)+16;c[A>>2]=ao(c[g>>2]|0,m)|0;while(1){if(!((c[A>>2]|0)==0?(c[u>>2]|0)>0:0))break;a=c[(c[g>>2]|0)+248>>2]<<10;E=t;c[E>>2]=a;c[E+4>>2]=((a|0)<0)<<31>>31;c[y>>2]=0;c[l>>2]=0;c[p>>2]=0;c[A>>2]=jl(c[g>>2]|0,28,y,0)|0;Le(c[y>>2]|0,1,c[h>>2]|0)|0;if((ue(c[y>>2]|0)|0)==100){a=Ee(c[y>>2]|0,0)|0;E=n;c[E>>2]=a;c[E+4>>2]=C;c[v>>2]=c[h>>2]}else c[v>>2]=-1;c[A>>2]=Zd(c[y>>2]|0)|0;do if((c[A>>2]|0)==0?(c[m+4>>2]|0)!=0:0){c[q>>2]=c[m+4>>2];E=o;c[E>>2]=0;c[E+4>>2]=0;c[r>>2]=0;c[A>>2]=bo(m,o,r)|0;if((c[v>>2]|0)>=0?(b=n,a=t,a=qR(c[b>>2]|0,c[b+4>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0,b=C,e=o,E=t,E=qR(c[e>>2]|0,c[e+4>>2]|0,c[E>>2]|0,c[E+4>>2]|0)|0,e=C,!((b|0)>(e|0)|(b|0)==(e|0)&a>>>0>=E>>>0)):0){c[m+4>>2]=c[q>>2];break}e=o;a=c[e+4>>2]|0;E=n;c[E>>2]=c[e>>2];c[E+4>>2]=a;c[v>>2]=c[r>>2];c[l>>2]=1;c[j>>2]=1}while(0);if((c[v>>2]|0)<0)break;kR(c[z>>2]|0,0,640)|0;c[(c[x>>2]|0)+12>>2]=1;do if(!(c[A>>2]|0)){E=n;c[A>>2]=co(c[g>>2]|0,c[E>>2]|0,c[E+4>>2]|0,p)|0;if((c[p>>2]|0)!=0?!((c[l>>2]|0)!=0&(c[p>>2]|0)==1):0)break;c[k>>2]=0;a=c[g>>2]|0;E=n;E=gR(c[E>>2]|0,c[E+4>>2]|0,1,0)|0;c[A>>2]=eo(a,E,C,k)|0;if(c[k>>2]|0){E=(c[x>>2]|0)+12|0;c[E>>2]=c[E>>2]|2}}while(0);if(!(c[A>>2]|0)){E=n;c[A>>2]=fo(c[g>>2]|0,c[E>>2]|0,c[E+4>>2]|0,c[v>>2]|0,c[w>>2]|0)|0}if(((0==(c[A>>2]|0)?(c[(c[w>>2]|0)+4>>2]|0)==(c[v>>2]|0):0)?(E=ol(c[g>>2]|0,c[w>>2]|0,c[x>>2]|0)|0,c[A>>2]=E,0==(E|0)):0)?(E=pl(c[g>>2]|0,c[w>>2]|0)|0,c[A>>2]=E,100==(E|0)):0){if((c[l>>2]|0)!=0&(c[p>>2]|0)>0){c[B>>2]=c[(c[w>>2]|0)+40>>2];c[s>>2]=c[(c[w>>2]|0)+44>>2];E=n;c[A>>2]=go(c[g>>2]|0,c[E>>2]|0,c[E+4>>2]|0,(c[p>>2]|0)-1|0,c[B>>2]|0,c[s>>2]|0,c[z>>2]|0)|0}else{E=n;c[A>>2]=ho(c[g>>2]|0,c[E>>2]|0,c[E+4>>2]|0,c[p>>2]|0,c[w>>2]|0,c[z>>2]|0)|0}if((c[A>>2]|0)==0?(c[c[z>>2]>>2]|0)!=0:0){do{c[A>>2]=io(c[g>>2]|0,c[z>>2]|0,c[w>>2]|0)|0;if(!(c[A>>2]|0))c[A>>2]=pl(c[g>>2]|0,c[w>>2]|0)|0;if((c[A>>2]|0)==100?(c[(c[z>>2]|0)+4>>2]|0)>=(c[u>>2]|0):0)c[A>>2]=0}while((c[A>>2]|0)==100);if((c[A>>2]|0)==0?(c[u>>2]=(c[u>>2]|0)-(1+(c[(c[z>>2]|0)+4>>2]|0)),E=n,c[A>>2]=jo(c[g>>2]|0,c[E>>2]|0,c[E+4>>2]|0,c[w>>2]|0,v)|0,(c[v>>2]|0)!=0):0){c[j>>2]=1;E=n;ko(m,c[E>>2]|0,c[E+4>>2]|0,c[v>>2]|0,A)}}if(c[v>>2]|0){a=(c[z>>2]|0)+40|0;a=rR(c[a>>2]|0,c[a+4>>2]|0,-1,-1)|0;E=(c[z>>2]|0)+40|0;c[E>>2]=a;c[E+4>>2]=C}lo(c[g>>2]|0,c[z>>2]|0,A);if((c[v>>2]|0)==0?(d[(c[z>>2]|0)+48>>0]|0|0)==0:0){e=c[g>>2]|0;a=n;a=gR(c[a>>2]|0,c[a+4>>2]|0,1,0)|0;E=(c[z>>2]|0)+40|0;tl(e,a,C,c[E>>2]|0,c[E+4>>2]|0)|0}}vl(c[w>>2]|0)}if((c[j>>2]|0)!=0&(c[A>>2]|0)==0)c[A>>2]=mo(c[g>>2]|0,m)|0;Kd(c[z>>2]|0);Kd(c[m>>2]|0);c[f>>2]=c[A>>2];E=c[f>>2]|0;i=D;return E|0}function ao(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+24|0;d=k+20|0;g=k+16|0;h=k+12|0;j=k+8|0;e=k+4|0;f=k;c[l>>2]=a;c[d>>2]=b;c[g>>2]=0;c[(c[d>>2]|0)+4>>2]=0;c[h>>2]=jl(c[l>>2]|0,22,g,0)|0;if(c[h>>2]|0){l=c[h>>2]|0;i=k;return l|0}Le(c[g>>2]|0,1,1)|0;if((100==(ue(c[g>>2]|0)|0)?(c[e>>2]=Ae(c[g>>2]|0,0)|0,c[f>>2]=Be(c[g>>2]|0,0)|0,(c[e>>2]|0)!=0):0)?(no(c[d>>2]|0,c[f>>2]|0,h),(c[h>>2]|0)==0):0){iR(c[c[d>>2]>>2]|0,c[e>>2]|0,c[f>>2]|0)|0;c[(c[d>>2]|0)+4>>2]=c[f>>2]}c[j>>2]=Zd(c[g>>2]|0)|0;if(c[h>>2]|0){l=c[h>>2]|0;i=k;return l|0}c[h>>2]=c[j>>2];l=c[h>>2]|0;i=k;return l|0}function bo(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;k=n+20|0;h=n+16|0;g=n+12|0;j=n+8|0;m=n+4|0;l=n;c[h>>2]=b;c[g>>2]=e;c[j>>2]=f;c[m>>2]=c[(c[h>>2]|0)+4>>2];c[l>>2]=(c[(c[h>>2]|0)+4>>2]|0)-2;while(1){if((c[l>>2]|0)<=0)break;if(!(a[(c[c[h>>2]>>2]|0)+((c[l>>2]|0)-1)>>0]&128))break;c[l>>2]=(c[l>>2]|0)+-1}while(1){if((c[l>>2]|0)>0)e=(a[(c[c[h>>2]>>2]|0)+((c[l>>2]|0)-1)>>0]&128|0)!=0;else e=0;b=c[l>>2]|0;if(!e)break;c[l>>2]=b+-1}c[(c[h>>2]|0)+4>>2]=b;b=Ul((c[c[h>>2]>>2]|0)+(c[l>>2]|0)|0,c[g>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+b;b=(c[c[h>>2]>>2]|0)+(c[l>>2]|0)|0;if(d[(c[c[h>>2]>>2]|0)+(c[l>>2]|0)>>0]&128)b=Vl(b,c[j>>2]|0)|0;else{c[c[j>>2]>>2]=d[b>>0];b=1}c[l>>2]=(c[l>>2]|0)+b;if((c[l>>2]|0)!=(c[m>>2]|0)){c[k>>2]=267;m=c[k>>2]|0;i=n;return m|0}else{c[k>>2]=0;m=c[k>>2]|0;i=n;return m|0}return 0}function co(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+20|0;f=k;g=k+16|0;j=k+12|0;h=k+8|0;c[l>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[g>>2]=e;c[h>>2]=0;c[j>>2]=jl(c[l>>2]|0,8,h,0)|0;if(c[j>>2]|0){l=c[j>>2]|0;i=k;return l|0}e=c[h>>2]|0;l=f;l=gR(c[l>>2]|0,c[l+4>>2]|0,1,0)|0;Me(e,1,l,C)|0;ue(c[h>>2]|0)|0;l=De(c[h>>2]|0,0)|0;c[c[g>>2]>>2]=l;c[j>>2]=Zd(c[h>>2]|0)|0;l=c[j>>2]|0;i=k;return l|0}function eo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;f=l+24|0;m=l+20|0;g=l;h=l+16|0;j=l+12|0;k=l+8|0;c[m>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;c[h>>2]=e;c[k>>2]=jl(c[m>>2]|0,15,j,0)|0;if(c[k>>2]|0){c[f>>2]=c[k>>2];m=c[f>>2]|0;i=l;return m|0}m=c[j>>2]|0;k=g;k=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;Me(m,1,k,C)|0;k=c[j>>2]|0;m=g;m=pR(c[m>>2]|0,c[m+4>>2]|0,1024,0)|0;m=gR(m|0,C|0,1,0)|0;m=rR(m|0,C|0,1024,0)|0;Me(k,2,m,C)|0;c[c[h>>2]>>2]=0;if(100==(ue(c[j>>2]|0)|0)){m=(He(c[j>>2]|0,0)|0)==5&1;c[c[h>>2]>>2]=m}c[f>>2]=Zd(c[j>>2]|0)|0;m=c[f>>2]|0;i=l;return m|0}function fo(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+48|0;g=q+36|0;h=q;j=q+32|0;k=q+28|0;o=q+24|0;n=q+20|0;m=q+16|0;l=q+12|0;p=q+8|0;c[g>>2]=a;a=h;c[a>>2]=b;c[a+4>>2]=d;c[j>>2]=e;c[k>>2]=f;c[n>>2]=0;b=c[k>>2]|0;d=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));c[m>>2]=c[j>>2]<<2;f=Id(c[m>>2]|0)|0;c[c[k>>2]>>2]=f;if(!(c[c[k>>2]>>2]|0))c[o>>2]=7;else{kR(c[c[k>>2]>>2]|0,0,c[m>>2]|0)|0;c[o>>2]=jl(c[g>>2]|0,12,n,0)|0}if(c[o>>2]|0){p=c[o>>2]|0;i=q;return p|0}m=h;Me(c[n>>2]|0,1,c[m>>2]|0,c[m+4>>2]|0)|0;c[l>>2]=0;while(1){if(c[o>>2]|0)break;if((ue(c[n>>2]|0)|0)!=100)break;if((c[l>>2]|0)>=(c[j>>2]|0))break;r=c[l>>2]|0;b=Ee(c[n>>2]|0,1)|0;d=C;e=Ee(c[n>>2]|0,2)|0;a=C;f=Ee(c[n>>2]|0,3)|0;g=C;h=Ae(c[n>>2]|0,4)|0;m=Be(c[n>>2]|0,4)|0;c[o>>2]=im(r,0,b,d,e,a,f,g,h,m,(c[c[k>>2]>>2]|0)+(c[l>>2]<<2)|0)|0;m=(c[k>>2]|0)+4|0;c[m>>2]=(c[m>>2]|0)+1;c[l>>2]=(c[l>>2]|0)+1}c[p>>2]=Zd(c[n>>2]|0)|0;if(c[o>>2]|0){r=c[o>>2]|0;i=q;return r|0}c[o>>2]=c[p>>2];r=c[o>>2]|0;i=q;return r|0}function go(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=i;i=i+208|0;y=K+200|0;z=K+196|0;k=K+120|0;l=K+192|0;m=K+188|0;n=K+184|0;A=K+180|0;H=K+176|0;G=K+172|0;s=K+112|0;r=K+104|0;q=K+96|0;v=K+168|0;x=K+164|0;I=K+160|0;p=K+156|0;o=K+152|0;t=K+148|0;u=K+48|0;D=K+144|0;w=K+140|0;F=K+136|0;J=K;B=K+132|0;E=K+128|0;c[z>>2]=b;b=k;c[b>>2]=d;c[b+4>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[A>>2]=j;c[G>>2]=0;c[H>>2]=jl(c[z>>2]|0,32,G,0)|0;if(!(c[H>>2]|0)){d=s;c[d>>2]=0;c[d+4>>2]=0;d=r;c[d>>2]=0;c[d+4>>2]=0;d=q;c[d>>2]=0;c[d+4>>2]=0;c[v>>2]=0;c[x>>2]=0;c[p>>2]=0;d=c[G>>2]|0;g=k;g=gR(c[g>>2]|0,c[g+4>>2]|0,1,0)|0;Me(d,1,g,C)|0;Le(c[G>>2]|0,2,c[l>>2]|0)|0;g=(ue(c[G>>2]|0)|0)==100;d=c[G>>2]|0;if(!g){c[y>>2]=Zd(d)|0;J=c[y>>2]|0;i=K;return J|0}g=Ee(d,1)|0;j=s;c[j>>2]=g;c[j+4>>2]=C;j=Ee(c[G>>2]|0,2)|0;g=r;c[g>>2]=j;c[g+4>>2]=C;yl(c[G>>2]|0,3,q,(c[A>>2]|0)+40|0);if((c[(c[A>>2]|0)+40+4>>2]|0)<0){j=(c[A>>2]|0)+40|0;j=rR(c[j>>2]|0,c[j+4>>2]|0,-1,-1)|0;g=(c[A>>2]|0)+40|0;c[g>>2]=j;c[g+4>>2]=C}g=(c[A>>2]|0)+40|0;a[(c[A>>2]|0)+48>>0]=(c[g>>2]|0)==0&(c[g+4>>2]|0)==0&1;c[x>>2]=Be(c[G>>2]|0,4)|0;c[v>>2]=Ae(c[G>>2]|0,4)|0;g=q;c[H>>2]=zo(c[z>>2]|0,c[g>>2]|0,c[g+4>>2]|0,p)|0;if((c[H>>2]|0)==0&(c[p>>2]|0)!=0){c[o>>2]=0;c[t>>2]=0;c[H>>2]=am(c[z>>2]|0,c[r>>2]|0,c[r+4>>2]|0,o,t,0)|0;if(!(c[H>>2]|0)){c[H>>2]=so(u,c[o>>2]|0,c[t>>2]|0)|0;while(1){if(!((c[H>>2]|0)==0?(c[u>>2]|0)!=0:0))break;c[H>>2]=wo(u)|0}if((to(c[m>>2]|0,c[n>>2]|0,c[u+24>>2]|0,c[u+24+4>>2]|0)|0)<=0)c[p>>2]=0;xo(u)}Kd(c[o>>2]|0)}a:do if((c[H>>2]|0)==0&(c[p>>2]|0)!=0){c[w>>2]=a[c[v>>2]>>0];u=q;t=s;t=fR(c[u>>2]|0,c[u+4>>2]|0,c[t>>2]|0,c[t+4>>2]|0)|0;t=gR(t|0,C|0,1,0)|0;c[c[A>>2]>>2]=(t|0)/16|0;t=c[s+4>>2]|0;u=(c[A>>2]|0)+24|0;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=q;t=c[u+4>>2]|0;s=(c[A>>2]|0)+32|0;c[s>>2]=c[u>>2];c[s+4>>2]=t;s=k;t=c[s+4>>2]|0;u=(c[A>>2]|0)+8|0;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[(c[A>>2]|0)+16>>2]=c[l>>2];c[D>>2]=(c[w>>2]|0)+1;while(1){if((c[D>>2]|0)>=16)break;u=(c[A>>2]|0)+24|0;t=_(c[D>>2]|0,c[c[A>>2]>>2]|0)|0;t=gR(c[u>>2]|0,c[u+4>>2]|0,t|0,((t|0)<0)<<31>>31|0)|0;u=(c[A>>2]|0)+56+(c[D>>2]<<5)|0;c[u>>2]=t;c[u+4>>2]=C;c[D>>2]=(c[D>>2]|0)+1}c[F>>2]=(c[A>>2]|0)+56+(c[w>>2]<<5);u=(c[A>>2]|0)+24|0;t=_(c[c[A>>2]>>2]|0,c[w>>2]|0)|0;t=gR(c[u>>2]|0,c[u+4>>2]|0,t|0,((t|0)<0)<<31>>31|0)|0;u=c[F>>2]|0;c[u>>2]=t;c[u+4>>2]=C;if((c[x>>2]|0)>(c[(c[z>>2]|0)+224>>2]|0))d=c[x>>2]|0;else d=c[(c[z>>2]|0)+224>>2]|0;no((c[F>>2]|0)+20|0,d,H);if(!(c[H>>2]|0)){iR(c[(c[F>>2]|0)+20>>2]|0,c[v>>2]|0,c[x>>2]|0)|0;c[(c[F>>2]|0)+20+4>>2]=c[x>>2]}c[D>>2]=c[w>>2];while(1){if(!((c[D>>2]|0)>=0?(c[H>>2]|0)==0:0))break a;c[F>>2]=(c[A>>2]|0)+56+(c[D>>2]<<5);c[H>>2]=so(J,c[(c[F>>2]|0)+20>>2]|0,c[(c[F>>2]|0)+20+4>>2]|0)|0;while(1){if(!((c[J>>2]|0)!=0?(c[H>>2]|0)==0:0))break;c[H>>2]=wo(J)|0}no((c[F>>2]|0)+8|0,c[J+24+4>>2]|0,H);if((c[H>>2]|0)==0?(iR(c[(c[F>>2]|0)+8>>2]|0,c[J+24>>2]|0,c[J+24+4>>2]|0)|0,c[(c[F>>2]|0)+8+4>>2]=c[J+24+4>>2],(c[D>>2]|0)>0):0){c[B>>2]=0;c[E>>2]=0;c[F>>2]=(c[A>>2]|0)+56+((c[D>>2]|0)-1<<5);v=J+16|0;w=c[v+4>>2]|0;x=c[F>>2]|0;c[x>>2]=c[v>>2];c[x+4>>2]=w;x=J+16|0;c[H>>2]=am(c[z>>2]|0,c[x>>2]|0,c[x+4>>2]|0,B,E,0)|0;if((c[E>>2]|0)>(c[(c[z>>2]|0)+224>>2]|0))d=c[E>>2]|0;else d=c[(c[z>>2]|0)+224>>2]|0;no((c[F>>2]|0)+20|0,d,H);if(!(c[H>>2]|0)){iR(c[(c[F>>2]|0)+20>>2]|0,c[B>>2]|0,c[E>>2]|0)|0;c[(c[F>>2]|0)+20+4>>2]=c[E>>2]}Kd(c[B>>2]|0)}xo(J);c[D>>2]=(c[D>>2]|0)+-1}}while(0);c[I>>2]=Zd(c[G>>2]|0)|0;if(!(c[H>>2]|0))c[H>>2]=c[I>>2]}c[y>>2]=c[H>>2];J=c[y>>2]|0;i=K;return J|0}function ho(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;h=t+44|0;j=t+40|0;k=t;l=t+36|0;m=t+32|0;n=t+28|0;s=t+24|0;o=t+20|0;p=t+16|0;r=t+12|0;q=t+8|0;c[j>>2]=a;a=k;c[a>>2]=b;c[a+4>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[p>>2]=0;c[r>>2]=0;c[q>>2]=0;c[s>>2]=jl(c[j>>2]|0,29,r,0)|0;if(!(c[s>>2]|0)){g=k;Me(c[r>>2]|0,1,c[g>>2]|0,c[g+4>>2]|0)|0;g=c[(c[m>>2]|0)+4>>2]|0;Me(c[r>>2]|0,2,g,((g|0)<0)<<31>>31)|0;if(100==(ue(c[r>>2]|0)|0))c[p>>2]=De(c[r>>2]|0,0)|0;c[s>>2]=Zd(c[r>>2]|0)|0}if(c[s>>2]|0){c[h>>2]=c[s>>2];s=c[h>>2]|0;i=t;return s|0}c[s>>2]=jl(c[j>>2]|0,10,q,0)|0;if(!(c[s>>2]|0)){if(100==(ue(c[q>>2]|0)|0)){r=Ee(c[q>>2]|0,0)|0;g=(c[n>>2]|0)+24|0;c[g>>2]=r;c[g+4>>2]=C;g=(c[n>>2]|0)+24|0;g=fR(c[g>>2]|0,c[g+4>>2]|0,1,0)|0;r=(c[n>>2]|0)+32|0;c[r>>2]=g;c[r+4>>2]=C;r=c[p>>2]<<4;g=(c[n>>2]|0)+32|0;f=g;r=gR(c[f>>2]|0,c[f+4>>2]|0,r|0,((r|0)<0)<<31>>31|0)|0;c[g>>2]=r;c[g+4>>2]=C}c[s>>2]=Zd(c[q>>2]|0)|0}if(c[s>>2]|0){c[h>>2]=c[s>>2];s=c[h>>2]|0;i=t;return s|0}g=(c[n>>2]|0)+32|0;c[s>>2]=zl(c[j>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,0)|0;if(c[s>>2]|0){c[h>>2]=c[s>>2];s=c[h>>2]|0;i=t;return s|0}r=k;g=c[r+4>>2]|0;s=(c[n>>2]|0)+8|0;c[s>>2]=c[r>>2];c[s+4>>2]=g;c[c[n>>2]>>2]=c[p>>2];c[(c[n>>2]|0)+16>>2]=c[l>>2];c[o>>2]=0;while(1){if((c[o>>2]|0)>=16)break;s=(c[n>>2]|0)+24|0;g=_(c[o>>2]|0,c[c[n>>2]>>2]|0)|0;g=gR(c[s>>2]|0,c[s+4>>2]|0,g|0,((g|0)<0)<<31>>31|0)|0;s=(c[n>>2]|0)+56+(c[o>>2]<<5)|0;c[s>>2]=g;c[s+4>>2]=C;c[o>>2]=(c[o>>2]|0)+1}c[h>>2]=0;s=c[h>>2]|0;i=t;return s|0}function io(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+48|0;f=r+44|0;g=r+40|0;s=r+36|0;q=r+32|0;n=r+28|0;h=r+24|0;j=r+20|0;p=r+16|0;l=r+12|0;k=r+8|0;m=r+4|0;o=r;c[f>>2]=b;c[g>>2]=d;c[s>>2]=e;c[q>>2]=c[(c[s>>2]|0)+40>>2];c[n>>2]=c[(c[s>>2]|0)+44>>2];c[h>>2]=c[(c[s>>2]|0)+48>>2];c[j>>2]=c[(c[s>>2]|0)+52>>2];c[p>>2]=0;c[o>>2]=(c[g>>2]|0)+56;c[k>>2]=Gl(c[(c[o>>2]|0)+8>>2]|0,c[(c[o>>2]|0)+8+4>>2]|0,c[q>>2]|0,c[n>>2]|0)|0;c[m>>2]=(c[n>>2]|0)-(c[k>>2]|0);d=c[k>>2]|0;c[l>>2]=Dl(d,((d|0)<0)<<31>>31)|0;d=c[m>>2]|0;d=Dl(d,((d|0)<0)<<31>>31)|0;c[l>>2]=(c[l>>2]|0)+(d+(c[m>>2]|0));d=c[j>>2]|0;d=Dl(d,((d|0)<0)<<31>>31)|0;c[l>>2]=(c[l>>2]|0)+(d+(c[j>>2]|0));if((c[(c[o>>2]|0)+20+4>>2]|0)>0?((c[(c[o>>2]|0)+20+4>>2]|0)+(c[l>>2]|0)|0)>(c[(c[f>>2]|0)+224>>2]|0):0){s=c[o>>2]|0;c[p>>2]=zl(c[f>>2]|0,c[s>>2]|0,c[s+4>>2]|0,c[(c[o>>2]|0)+20>>2]|0,c[(c[o>>2]|0)+20+4>>2]|0)|0;s=(c[g>>2]|0)+4|0;c[s>>2]=(c[s>>2]|0)+1;if(!(c[p>>2]|0))c[p>>2]=yo(c[f>>2]|0,c[g>>2]|0,c[q>>2]|0,(c[k>>2]|0)+1|0)|0;s=c[o>>2]|0;d=s;d=gR(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;c[s>>2]=d;c[s+4>>2]=C;c[(c[o>>2]|0)+8+4>>2]=0;c[(c[o>>2]|0)+20+4>>2]=0;c[m>>2]=c[n>>2];c[l>>2]=1;s=c[m>>2]|0;s=Dl(s,((s|0)<0)<<31>>31)|0;c[l>>2]=(c[l>>2]|0)+(s+(c[m>>2]|0));s=c[j>>2]|0;s=Dl(s,((s|0)<0)<<31>>31)|0;c[l>>2]=(c[l>>2]|0)+(s+(c[j>>2]|0))}d=c[l>>2]|0;s=(c[g>>2]|0)+40|0;e=s;d=gR(c[e>>2]|0,c[e+4>>2]|0,d|0,((d|0)<0)<<31>>31|0)|0;c[s>>2]=d;c[s+4>>2]=C;no((c[o>>2]|0)+20|0,(c[(c[o>>2]|0)+20+4>>2]|0)+(c[l>>2]|0)|0,p);if(c[p>>2]|0){s=c[p>>2]|0;i=r;return s|0}if(!(c[(c[o>>2]|0)+20+4>>2]|0)){c[(c[o>>2]|0)+20+4>>2]=1;a[c[(c[o>>2]|0)+20>>2]>>0]=0}c[p>>2]=vo((c[o>>2]|0)+20|0,(c[o>>2]|0)+8|0,c[q>>2]|0,c[n>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;s=c[p>>2]|0;i=r;return s|0}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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;g=s+44|0;h=s;j=s+40|0;k=s+36|0;l=s+32|0;n=s+28|0;q=s+24|0;p=s+20|0;m=s+16|0;r=s+12|0;o=s+8|0;c[g>>2]=a;a=h;c[a>>2]=b;c[a+4>>2]=d;c[j>>2]=e;c[k>>2]=f;c[n>>2]=0;c[q>>2]=0;c[l>>2]=(c[(c[j>>2]|0)+4>>2]|0)-1;while(1){if(!((c[l>>2]|0)>=0?(c[q>>2]|0)==0:0))break;c[p>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[(c[j>>2]|0)+4>>2]|0))break;c[p>>2]=c[(c[c[j>>2]>>2]|0)+(c[m>>2]<<2)>>2];if((c[c[p>>2]>>2]|0)==(c[l>>2]|0))break;c[m>>2]=(c[m>>2]|0)+1}if(!(c[(c[p>>2]|0)+40>>2]|0)){c[q>>2]=Fl(c[g>>2]|0,c[p>>2]|0)|0;if(!(c[q>>2]|0)){f=h;c[q>>2]=oo(c[g>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[c[p>>2]>>2]|0)|0}c[c[k>>2]>>2]=0}else{c[r>>2]=c[(c[p>>2]|0)+64>>2];c[o>>2]=c[(c[p>>2]|0)+60>>2];f=h;c[q>>2]=po(c[g>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[c[p>>2]>>2]|0,c[r>>2]|0,c[o>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+1}c[l>>2]=(c[l>>2]|0)+-1}if(c[q>>2]|0){f=c[n>>2]|0;r=c[k>>2]|0;c[r>>2]=f;r=c[q>>2]|0;i=s;return r|0}if((c[n>>2]|0)==(c[(c[j>>2]|0)+4>>2]|0)){f=c[n>>2]|0;r=c[k>>2]|0;c[r>>2]=f;r=c[q>>2]|0;i=s;return r|0}f=h;c[q>>2]=qo(c[g>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;f=c[n>>2]|0;r=c[k>>2]|0;c[r>>2]=f;r=c[q>>2]|0;i=s;return r|0}function ko(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,j=0,k=0,l=0;k=i;i=i+32|0;g=k+16|0;h=k;j=k+12|0;l=k+8|0;c[g>>2]=a;a=h;c[a>>2]=b;c[a+4>>2]=d;c[j>>2]=e;c[l>>2]=f;no(c[g>>2]|0,(c[(c[g>>2]|0)+4>>2]|0)+20|0,c[l>>2]|0);if(c[c[l>>2]>>2]|0){i=k;return}l=h;l=El((c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+4>>2]|0)|0,c[l>>2]|0,c[l+4>>2]|0)|0;f=(c[g>>2]|0)+4|0;c[f>>2]=(c[f>>2]|0)+l;f=c[j>>2]|0;f=El((c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+4>>2]|0)|0,f,((f|0)<0)<<31>>31)|0;l=(c[g>>2]|0)+4|0;c[l>>2]=(c[l>>2]|0)+f;i=k;return}function lo(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r+36|0;n=r+32|0;o=r+28|0;h=r+24|0;j=r+20|0;p=r+16|0;q=r+12|0;l=r+8|0;k=r+4|0;m=r;c[g>>2]=b;c[n>>2]=e;c[o>>2]=f;c[q>>2]=c[c[o>>2]>>2];c[j>>2]=15;while(1){if((c[j>>2]|0)<0)break;c[l>>2]=(c[n>>2]|0)+56+(c[j>>2]<<5);if((c[(c[l>>2]|0)+20+4>>2]|0)>0)break;Kd(c[(c[l>>2]|0)+20>>2]|0);Kd(c[(c[l>>2]|0)+8>>2]|0);c[j>>2]=(c[j>>2]|0)+-1}if((c[j>>2]|0)<0){i=r;return}if(!(c[j>>2]|0)){c[k>>2]=(c[n>>2]|0)+56+32+20;no(c[k>>2]|0,11,q);if(!(c[q>>2]|0)){a[c[c[k>>2]>>2]>>0]=1;e=(c[n>>2]|0)+56|0;e=1+(El((c[c[k>>2]>>2]|0)+1|0,c[e>>2]|0,c[e+4>>2]|0)|0)|0;c[(c[k>>2]|0)+4>>2]=e}c[j>>2]=1}c[p>>2]=(c[n>>2]|0)+56+(c[j>>2]<<5);c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[j>>2]|0))break;c[m>>2]=(c[n>>2]|0)+56+(c[h>>2]<<5);if((c[q>>2]|0)==0?(c[(c[m>>2]|0)+20+4>>2]|0)>0:0){e=c[m>>2]|0;c[q>>2]=zl(c[g>>2]|0,c[e>>2]|0,c[e+4>>2]|0,c[(c[m>>2]|0)+20>>2]|0,c[(c[m>>2]|0)+20+4>>2]|0)|0}Kd(c[(c[m>>2]|0)+20>>2]|0);Kd(c[(c[m>>2]|0)+8>>2]|0);c[h>>2]=(c[h>>2]|0)+1}if(!(c[q>>2]|0)){m=c[g>>2]|0;g=(c[n>>2]|0)+8|0;g=gR(c[g>>2]|0,c[g+4>>2]|0,1,0)|0;h=(c[n>>2]|0)+24|0;j=(c[n>>2]|0)+56|0;b=(c[n>>2]|0)+32|0;if(!(d[(c[n>>2]|0)+48>>0]|0)){l=(c[n>>2]|0)+40|0;k=c[l>>2]|0;l=c[l+4>>2]|0}else{k=0;l=0}c[q>>2]=Bl(m,g,C,c[(c[n>>2]|0)+16>>2]|0,c[h>>2]|0,c[h+4>>2]|0,c[j>>2]|0,c[j+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0,k,l,c[(c[p>>2]|0)+20>>2]|0,c[(c[p>>2]|0)+20+4>>2]|0)|0}Kd(c[(c[p>>2]|0)+20>>2]|0);Kd(c[(c[p>>2]|0)+8>>2]|0);c[c[o>>2]>>2]=c[q>>2];i=r;return}function mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;h=g+12|0;d=g+8|0;e=g+4|0;f=g;c[h>>2]=a;c[d>>2]=b;c[e>>2]=0;c[f>>2]=jl(c[h>>2]|0,23,e,0)|0;if(c[f>>2]|0){h=c[f>>2]|0;i=g;return h|0}Le(c[e>>2]|0,1,1)|0;Je(c[e>>2]|0,2,c[c[d>>2]>>2]|0,c[(c[d>>2]|0)+4>>2]|0,0)|0;ue(c[e>>2]|0)|0;c[f>>2]=Zd(c[e>>2]|0)|0;h=c[f>>2]|0;i=g;return h|0}function no(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(c[c[g>>2]>>2]|0){i=k;return}if((c[f>>2]|0)<=(c[(c[e>>2]|0)+8>>2]|0)){i=k;return}c[j>>2]=c[f>>2];c[h>>2]=Ld(c[c[e>>2]>>2]|0,c[j>>2]|0)|0;if(c[h>>2]|0){c[(c[e>>2]|0)+8>>2]=c[j>>2];c[c[e>>2]>>2]=c[h>>2];i=k;return}else{c[c[g>>2]>>2]=7;i=k;return}}function oo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+20|0;f=k;g=k+16|0;j=k+12|0;h=k+8|0;c[l>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[g>>2]=e;c[h>>2]=0;c[j>>2]=jl(c[l>>2]|0,30,h,0)|0;if(c[j>>2]|0){l=c[j>>2]|0;i=k;return l|0}l=f;Me(c[h>>2]|0,1,c[l>>2]|0,c[l+4>>2]|0)|0;Le(c[h>>2]|0,2,c[g>>2]|0)|0;ue(c[h>>2]|0)|0;c[j>>2]=Zd(c[h>>2]|0)|0;l=c[j>>2]|0;i=k;return l|0}function po(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,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=i;i=i+112|0;h=B+104|0;j=B+24|0;k=B+100|0;l=B+96|0;m=B+92|0;y=B+88|0;A=B+76|0;p=B+64|0;q=B+16|0;r=B+8|0;s=B;x=B+60|0;z=B+56|0;o=B+52|0;u=B+48|0;n=B+44|0;t=B+40|0;w=B+36|0;v=B+32|0;c[h>>2]=a;a=j;c[a>>2]=b;c[a+4>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[y>>2]=0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;f=q;c[f>>2]=0;c[f+4>>2]=0;f=r;c[f>>2]=0;c[f+4>>2]=0;f=s;c[f>>2]=0;c[f+4>>2]=0;c[x>>2]=0;c[y>>2]=jl(c[h>>2]|0,32,x,0)|0;if(!(c[y>>2]|0)){f=j;Me(c[x>>2]|0,1,c[f>>2]|0,c[f+4>>2]|0)|0;Le(c[x>>2]|0,2,c[k>>2]|0)|0;if(100==(ue(c[x>>2]|0)|0)){c[o>>2]=Ae(c[x>>2]|0,4)|0;c[u>>2]=Be(c[x>>2]|0,4)|0;a=Ee(c[x>>2]|0,1)|0;f=s;c[f>>2]=a;c[f+4>>2]=C;c[y>>2]=ro(c[o>>2]|0,c[u>>2]|0,A,c[l>>2]|0,c[m>>2]|0,q)|0}c[z>>2]=Zd(c[x>>2]|0)|0;if(!(c[y>>2]|0))c[y>>2]=c[z>>2]}while(1){f=q;if(!((c[y>>2]|0)==0?(c[f>>2]|0)!=0|(c[f+4>>2]|0)!=0:0))break;c[n>>2]=0;c[t>>2]=0;x=q;z=c[x+4>>2]|0;f=r;c[f>>2]=c[x>>2];c[f+4>>2]=z;f=q;c[y>>2]=am(c[h>>2]|0,c[f>>2]|0,c[f+4>>2]|0,n,t,0)|0;if(!(c[y>>2]|0))c[y>>2]=ro(c[n>>2]|0,c[t>>2]|0,p,c[l>>2]|0,c[m>>2]|0,q)|0;if(!(c[y>>2]|0)){f=r;c[y>>2]=zl(c[h>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0)|0}Kd(c[n>>2]|0)}f=r;if((c[y>>2]|0)==0&((c[f>>2]|0)!=0|(c[f+4>>2]|0)!=0)?(c[w>>2]=0,c[y>>2]=jl(c[h>>2]|0,17,w,0)|0,(c[y>>2]|0)==0):0){z=s;Me(c[w>>2]|0,1,c[z>>2]|0,c[z+4>>2]|0)|0;z=c[w>>2]|0;f=r;f=fR(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;Me(z,2,f,C)|0;ue(c[w>>2]|0)|0;c[y>>2]=Zd(c[w>>2]|0)|0}if(c[y>>2]|0){f=c[A>>2]|0;Kd(f);f=c[p>>2]|0;Kd(f);f=c[y>>2]|0;i=B;return f|0}c[v>>2]=0;c[y>>2]=jl(c[h>>2]|0,33,v,0)|0;if(c[y>>2]|0){f=c[A>>2]|0;Kd(f);f=c[p>>2]|0;Kd(f);f=c[y>>2]|0;i=B;return f|0}f=r;Me(c[v>>2]|0,1,c[f>>2]|0,c[f+4>>2]|0)|0;Je(c[v>>2]|0,2,c[A>>2]|0,c[A+4>>2]|0,0)|0;f=j;Me(c[v>>2]|0,3,c[f>>2]|0,c[f+4>>2]|0)|0;Le(c[v>>2]|0,4,c[k>>2]|0)|0;ue(c[v>>2]|0)|0;c[y>>2]=Zd(c[v>>2]|0)|0;f=c[A>>2]|0;Kd(f);f=c[p>>2]|0;Kd(f);f=c[y>>2]|0;i=B;return f|0}function qo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;f=s+44|0;g=s;p=s+40|0;h=s+36|0;m=s+32|0;l=s+28|0;k=s+24|0;n=s+20|0;o=s+16|0;q=s+12|0;j=s+8|0;c[f>>2]=b;b=g;c[b>>2]=d;c[b+4>>2]=e;c[h>>2]=0;c[m>>2]=0;c[l>>2]=0;c[n>>2]=0;c[o>>2]=0;c[p>>2]=jl(c[f>>2]|0,35,n,0)|0;if(!(c[p>>2]|0)){b=g;Me(c[n>>2]|0,1,c[b>>2]|0,c[b+4>>2]|0)|0;while(1){if(100!=(ue(c[n>>2]|0)|0))break;if((c[m>>2]|0)>=(c[l>>2]|0)){c[l>>2]=(c[l>>2]|0)+16;c[j>>2]=Ld(c[h>>2]|0,c[l>>2]<<2)|0;if(!(c[j>>2]|0)){r=6;break}c[h>>2]=c[j>>2]}e=De(c[n>>2]|0,0)|0;b=c[m>>2]|0;c[m>>2]=b+1;c[(c[h>>2]|0)+(b<<2)>>2]=e}if((r|0)==6)c[p>>2]=7;c[q>>2]=Zd(c[n>>2]|0)|0;if(!(c[p>>2]|0))c[p>>2]=c[q>>2]}if(!(c[p>>2]|0))c[p>>2]=jl(c[f>>2]|0,31,o,0)|0;if(!(c[p>>2]|0)){r=g;Me(c[o>>2]|0,2,c[r>>2]|0,c[r+4>>2]|0)|0}a[(c[f>>2]|0)+232>>0]=1;c[k>>2]=0;while(1){if(c[p>>2]|0){r=21;break}if((c[k>>2]|0)>=(c[m>>2]|0)){r=21;break}if((c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)!=(c[k>>2]|0)){Le(c[o>>2]|0,3,c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)|0;Le(c[o>>2]|0,1,c[k>>2]|0)|0;ue(c[o>>2]|0)|0;c[p>>2]=Zd(c[o>>2]|0)|0}c[k>>2]=(c[k>>2]|0)+1}if((r|0)==21){a[(c[f>>2]|0)+232>>0]=0;Kd(c[h>>2]|0);i=s;return c[p>>2]|0}return 0}function ro(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 j=0,k=0,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=i;i=i+112|0;j=w+96|0;k=w+92|0;l=w+88|0;m=w+84|0;n=w+80|0;o=w+76|0;p=w+72|0;t=w;r=w+60|0;s=w+56|0;q=w+52|0;u=w+48|0;c[k>>2]=b;c[l>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[s>>2]=0;c[q>>2]=(a[c[k>>2]>>0]|0)==0&1;no(c[m>>2]|0,c[l>>2]|0,s);if(c[s>>2]|0){c[j>>2]=c[s>>2];v=c[j>>2]|0;i=w;return v|0}c[(c[m>>2]|0)+4>>2]=0;c[s>>2]=so(t,c[k>>2]|0,c[l>>2]|0)|0;while(1){if(!((c[s>>2]|0)==0?(c[t>>2]|0)!=0:0))break;if(!(c[(c[m>>2]|0)+4>>2]|0)){c[u>>2]=to(c[t+24>>2]|0,c[t+24+4>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;if((c[u>>2]|0)>=0?!((c[q>>2]|0)==0&(c[u>>2]|0)==0):0){h=t+16|0;uo(c[m>>2]|0,a[c[k>>2]>>0]|0,c[h>>2]|0,c[h+4>>2]|0);h=t+16|0;f=c[h+4>>2]|0;v=c[p>>2]|0;c[v>>2]=c[h>>2];c[v+4>>2]=f;v=9}}else v=9;if((v|0)==9?(v=0,c[s>>2]=vo(c[m>>2]|0,r,c[t+24>>2]|0,c[t+24+4>>2]|0,c[t+36>>2]|0,c[t+40>>2]|0)|0,(c[s>>2]|0)!=0):0)break;c[s>>2]=wo(t)|0}if(!(c[(c[m>>2]|0)+4>>2]|0)){u=t+16|0;uo(c[m>>2]|0,a[c[k>>2]>>0]|0,c[u>>2]|0,c[u+4>>2]|0);u=t+16|0;f=c[u+4>>2]|0;v=c[p>>2]|0;c[v>>2]=c[u>>2];c[v+4>>2]=f}xo(t);Kd(c[r>>2]|0);c[j>>2]=c[s>>2];v=c[j>>2]|0;i=w;return v|0}function so(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j+8|0;f=j+4|0;g=j;c[h>>2]=b;c[f>>2]=d;c[g>>2]=e;d=c[h>>2]|0;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[c[h>>2]>>2]=c[f>>2];c[(c[h>>2]|0)+4>>2]=c[g>>2];d=c[h>>2]|0;if(a[c[c[h>>2]>>2]>>0]|0){g=1+(Ul((c[d>>2]|0)+1|0,(c[h>>2]|0)+16|0)|0)|0;c[(c[h>>2]|0)+8>>2]=g;h=c[h>>2]|0;h=wo(h)|0;i=j;return h|0}else{c[d+8>>2]=1;h=c[h>>2]|0;h=wo(h)|0;i=j;return h|0}return 0}function to(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;j=i;i=i+32|0;m=j+20|0;f=j+16|0;l=j+12|0;g=j+8|0;k=j+4|0;h=j;c[m>>2]=a;c[f>>2]=b;c[l>>2]=d;c[g>>2]=e;c[k>>2]=(c[f>>2]|0)<(c[g>>2]|0)?c[f>>2]|0:c[g>>2]|0;c[h>>2]=vQ(c[m>>2]|0,c[l>>2]|0,c[k>>2]|0)|0;if(c[h>>2]|0){m=c[h>>2]|0;i=j;return m|0}c[h>>2]=(c[f>>2]|0)-(c[g>>2]|0);m=c[h>>2]|0;i=j;return m|0}function uo(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;j=i;i=i+16|0;g=j+12|0;k=j+8|0;h=j;c[g>>2]=b;c[k>>2]=d;b=h;c[b>>2]=e;c[b+4>>2]=f;a[c[c[g>>2]>>2]>>0]=c[k>>2];b=h;e=c[g>>2]|0;if((c[b>>2]|0)!=0|(c[b+4>>2]|0)!=0){k=h;k=1+(El((c[e>>2]|0)+1|0,c[k>>2]|0,c[k+4>>2]|0)|0)|0;c[(c[g>>2]|0)+4>>2]=k;i=j;return}else{c[e+4>>2]=1;i=j;return}}function vo(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;h=t+40|0;j=t+36|0;k=t+32|0;l=t+28|0;m=t+24|0;n=t+20|0;o=t+16|0;s=t+12|0;p=t+8|0;q=t+4|0;r=t;c[j>>2]=a;c[k>>2]=b;c[l>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[s>>2]=0;c[p>>2]=(c[(c[k>>2]|0)+4>>2]|0)==0&1;no(c[k>>2]|0,c[m>>2]|0,s);if(c[s>>2]|0){c[h>>2]=c[s>>2];d=c[h>>2]|0;i=t;return d|0}c[q>>2]=Gl(c[c[k>>2]>>2]|0,c[(c[k>>2]|0)+4>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;c[r>>2]=(c[m>>2]|0)-(c[q>>2]|0);iR(c[c[k>>2]>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;c[(c[k>>2]|0)+4>>2]=c[m>>2];if(!(c[p>>2]|0)){s=c[q>>2]|0;s=El((c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0)|0,s,((s|0)<0)<<31>>31)|0;d=(c[j>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)+s}s=c[r>>2]|0;s=El((c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0)|0,s,((s|0)<0)<<31>>31)|0;d=(c[j>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)+s;iR((c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0)|0,(c[l>>2]|0)+(c[q>>2]|0)|0,c[r>>2]|0)|0;d=(c[j>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)+(c[r>>2]|0);if(c[n>>2]|0){s=c[o>>2]|0;s=El((c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0)|0,s,((s|0)<0)<<31>>31)|0;d=(c[j>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)+s;iR((c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0)|0,c[n>>2]|0,c[o>>2]|0)|0;d=(c[j>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)+(c[o>>2]|0)}c[h>>2]=0;d=c[h>>2]|0;i=t;return d|0}function wo(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;g=j+16|0;b=j+12|0;e=j+8|0;f=j+4|0;h=j;c[g>>2]=a;c[b>>2]=(c[(c[g>>2]|0)+24+4>>2]|0)==0&1;c[e>>2]=0;c[f>>2]=0;c[h>>2]=0;a=(c[g>>2]|0)+16|0;if(((c[a>>2]|0)!=0|(c[a+4>>2]|0)!=0)&(c[b>>2]|0)==0){a=(c[g>>2]|0)+16|0;k=a;k=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;c[a>>2]=k;c[a+4>>2]=C}if((c[(c[g>>2]|0)+8>>2]|0)>=(c[(c[g>>2]|0)+4>>2]|0)){c[c[g>>2]>>2]=0;k=c[h>>2]|0;i=j;return k|0}if(!(c[b>>2]|0)){b=(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0)|0;if((d[(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0)>>0]|0)&128)b=Vl(b,e)|0;else{c[e>>2]=d[b>>0];b=1}k=(c[g>>2]|0)+8|0;c[k>>2]=(c[k>>2]|0)+b}b=(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0)|0;if((d[(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0)>>0]|0)&128)b=Vl(b,f)|0;else{c[f>>2]=d[b>>0];b=1}k=(c[g>>2]|0)+8|0;c[k>>2]=(c[k>>2]|0)+b;no((c[g>>2]|0)+24|0,(c[e>>2]|0)+(c[f>>2]|0)|0,h);if(c[h>>2]|0){k=c[h>>2]|0;i=j;return k|0}iR((c[(c[g>>2]|0)+24>>2]|0)+(c[e>>2]|0)|0,(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0)|0,c[f>>2]|0)|0;c[(c[g>>2]|0)+24+4>>2]=(c[e>>2]|0)+(c[f>>2]|0);k=(c[g>>2]|0)+8|0;c[k>>2]=(c[k>>2]|0)+(c[f>>2]|0);k=(c[g>>2]|0)+16|0;if(!((c[k>>2]|0)==0&(c[k+4>>2]|0)==0)){k=c[h>>2]|0;i=j;return k|0}b=(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0)|0;if((d[(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0)>>0]|0)&128)b=Vl(b,(c[g>>2]|0)+40|0)|0;else{c[(c[g>>2]|0)+40>>2]=d[b>>0];b=1}k=(c[g>>2]|0)+8|0;c[k>>2]=(c[k>>2]|0)+b;c[(c[g>>2]|0)+36>>2]=(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0);k=(c[g>>2]|0)+8|0;c[k>>2]=(c[k>>2]|0)+(c[(c[g>>2]|0)+40>>2]|0);k=c[h>>2]|0;i=j;return k|0}function xo(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Kd(c[(c[d>>2]|0)+24>>2]|0);i=b;return}function yo(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+64|0;t=v+60|0;g=v+56|0;h=v+52|0;j=v+48|0;k=v+44|0;n=v+8|0;l=v+40|0;m=v;s=v+36|0;u=v+32|0;o=v+28|0;q=v+24|0;p=v+20|0;r=v+16|0;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;b=(c[h>>2]|0)+56|0;d=c[b+4>>2]|0;e=n;c[e>>2]=c[b>>2];c[e+4>>2]=d;c[l>>2]=1;while(1){if((c[l>>2]|0)>=16){g=16;break}e=m;c[e>>2]=0;c[e+4>>2]=0;c[s>>2]=(c[h>>2]|0)+56+(c[l>>2]<<5);c[u>>2]=0;c[o>>2]=Gl(c[(c[s>>2]|0)+8>>2]|0,c[(c[s>>2]|0)+8+4>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[q>>2]=(c[k>>2]|0)-(c[o>>2]|0);e=c[o>>2]|0;c[p>>2]=Dl(e,((e|0)<0)<<31>>31)|0;e=c[q>>2]|0;e=Dl(e,((e|0)<0)<<31>>31)|0;c[p>>2]=(c[p>>2]|0)+(e+(c[q>>2]|0));if((c[(c[s>>2]|0)+8+4>>2]|0)!=0?((c[(c[s>>2]|0)+20+4>>2]|0)+(c[p>>2]|0)|0)>(c[(c[g>>2]|0)+224>>2]|0):0){d=c[s>>2]|0;c[u>>2]=zl(c[g>>2]|0,c[d>>2]|0,c[d+4>>2]|0,c[(c[s>>2]|0)+20>>2]|0,c[(c[s>>2]|0)+20+4>>2]|0)|0;a[c[(c[s>>2]|0)+20>>2]>>0]=c[l>>2];d=(c[(c[s>>2]|0)+20>>2]|0)+1|0;b=n;b=gR(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;b=1+(El(d,b,C)|0)|0;c[(c[s>>2]|0)+20+4>>2]=b;b=c[s>>2]|0;d=c[b+4>>2]|0;e=m;c[e>>2]=c[b>>2];c[e+4>>2]=d;e=c[s>>2]|0;d=e;d=gR(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;c[e>>2]=d;c[e+4>>2]=C;c[(c[s>>2]|0)+8+4>>2]=0}else{c[r>>2]=(c[s>>2]|0)+20;if((c[(c[r>>2]|0)+4>>2]|0)==0?(no(c[r>>2]|0,c[(c[g>>2]|0)+224>>2]|0,u),(c[u>>2]|0)==0):0){a[c[c[r>>2]>>2]>>0]=c[l>>2];e=n;e=1+(El((c[c[r>>2]>>2]|0)+1|0,c[e>>2]|0,c[e+4>>2]|0)|0)|0;c[(c[r>>2]|0)+4>>2]=e}no(c[r>>2]|0,(c[(c[r>>2]|0)+4>>2]|0)+(c[p>>2]|0)|0,u);no((c[s>>2]|0)+8|0,c[k>>2]|0,u);if(!(c[u>>2]|0)){if(c[(c[s>>2]|0)+8+4>>2]|0){d=c[o>>2]|0;d=El((c[c[r>>2]>>2]|0)+(c[(c[r>>2]|0)+4>>2]|0)|0,d,((d|0)<0)<<31>>31)|0;e=(c[r>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+d}d=c[q>>2]|0;d=El((c[c[r>>2]>>2]|0)+(c[(c[r>>2]|0)+4>>2]|0)|0,d,((d|0)<0)<<31>>31)|0;e=(c[r>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+d;iR((c[c[r>>2]>>2]|0)+(c[(c[r>>2]|0)+4>>2]|0)|0,(c[j>>2]|0)+(c[o>>2]|0)|0,c[q>>2]|0)|0;e=(c[r>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+(c[q>>2]|0);iR(c[(c[s>>2]|0)+8>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[(c[s>>2]|0)+8+4>>2]=c[k>>2]}}e=m;if((c[u>>2]|0)!=0|(c[e>>2]|0)==0&(c[e+4>>2]|0)==0){g=14;break}b=m;d=c[b+4>>2]|0;e=n;c[e>>2]=c[b>>2];c[e+4>>2]=d;c[l>>2]=(c[l>>2]|0)+1}if((g|0)==14){c[t>>2]=c[u>>2];u=c[t>>2]|0;i=v;return u|0}else if((g|0)==16){c[t>>2]=0;u=c[t>>2]|0;i=v;return u|0}return 0}function zo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;m=l+24|0;f=l;g=l+20|0;h=l+16|0;j=l+12|0;k=l+8|0;c[m>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;c[g>>2]=e;c[h>>2]=0;c[j>>2]=0;c[k>>2]=jl(c[m>>2]|0,34,j,0)|0;if(c[k>>2]|0){e=c[h>>2]|0;m=c[g>>2]|0;c[m>>2]=e;m=c[k>>2]|0;i=l;return m|0}m=f;Me(c[j>>2]|0,1,c[m>>2]|0,c[m+4>>2]|0)|0;if(100==(ue(c[j>>2]|0)|0))c[h>>2]=1;c[k>>2]=Zd(c[j>>2]|0)|0;e=c[h>>2]|0;m=c[g>>2]|0;c[m>>2]=e;m=c[k>>2]|0;i=l;return m|0}function Ao(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+64|0;u=t+48|0;g=t+44|0;h=t+40|0;j=t+36|0;q=t+32|0;s=t+28|0;o=t+24|0;l=t+20|0;k=t+16|0;p=t+12|0;m=t+8|0;r=t+4|0;n=t;c[u>>2]=b;c[g>>2]=d;c[h>>2]=e;c[j>>2]=f;c[q>>2]=c[u>>2];c[s>>2]=0;c[o>>2]=0;c[l>>2]=0;c[k>>2]=0;c[p>>2]=0;c[m>>2]=0;if(((c[g>>2]|0)>1?(fe(c[c[h>>2]>>2]|0)|0)==5:0)?(fe(c[(c[h>>2]|0)+((c[(c[q>>2]|0)+24>>2]|0)+2<<2)>>2]|0)|0)!=5:0){c[s>>2]=Bo(c[q>>2]|0,c[(c[h>>2]|0)+((c[(c[q>>2]|0)+24>>2]|0)+2<<2)>>2]|0)|0;u=c[k>>2]|0;Kd(u);u=c[q>>2]|0;sm(u);u=c[s>>2]|0;i=t;return u|0}if((c[g>>2]|0)>1?(de(c[(c[h>>2]|0)+(2+(c[(c[q>>2]|0)+24>>2]|0)+2<<2)>>2]|0)|0)<0:0){c[s>>2]=19;u=c[k>>2]|0;Kd(u);u=c[q>>2]|0;sm(u);u=c[s>>2]|0;i=t;return u|0}c[k>>2]=Id((c[(c[q>>2]|0)+24>>2]|0)+1<<2<<1)|0;if(!(c[k>>2]|0)){c[s>>2]=7;u=c[k>>2]|0;Kd(u);u=c[q>>2]|0;sm(u);u=c[s>>2]|0;i=t;return u|0}c[l>>2]=(c[k>>2]|0)+((c[(c[q>>2]|0)+24>>2]|0)+1<<2);kR(c[k>>2]|0,0,(c[(c[q>>2]|0)+24>>2]|0)+1<<2<<1|0)|0;c[s>>2]=Co(c[q>>2]|0)|0;if(c[s>>2]|0){u=c[k>>2]|0;Kd(u);u=c[q>>2]|0;sm(u);u=c[s>>2]|0;i=t;return u|0}do if((c[g>>2]|0)>1?(c[(c[q>>2]|0)+40>>2]|0)==0:0){c[r>>2]=c[(c[h>>2]|0)+(3+(c[(c[q>>2]|0)+24>>2]|0)<<2)>>2];if((fe(c[r>>2]|0)|0)==5)c[r>>2]=c[(c[h>>2]|0)+4>>2];if((fe(c[r>>2]|0)|0)!=5){if((fe(c[c[h>>2]>>2]|0)|0)!=5?(f=ee(c[c[h>>2]>>2]|0)|0, +u=C,b=ee(c[r>>2]|0)|0,!((f|0)!=(b|0)|(u|0)!=(C|0))):0)break;u=(gf(c[(c[q>>2]|0)+12>>2]|0)|0)==5;e=c[q>>2]|0;if(u){c[s>>2]=Do(e,c[r>>2]|0,p,c[k>>2]|0)|0;break}else{c[s>>2]=Eo(e,c[h>>2]|0,c[j>>2]|0)|0;c[m>>2]=1;break}}}while(0);if(c[s>>2]|0){u=c[k>>2]|0;Kd(u);u=c[q>>2]|0;sm(u);u=c[s>>2]|0;i=t;return u|0}if((fe(c[c[h>>2]>>2]|0)|0)!=5){c[s>>2]=Do(c[q>>2]|0,c[c[h>>2]>>2]|0,p,c[k>>2]|0)|0;c[o>>2]=1}if((c[g>>2]|0)>1&(c[s>>2]|0)==0){c[n>>2]=de(c[(c[h>>2]|0)+(2+(c[(c[q>>2]|0)+24>>2]|0)+2<<2)>>2]|0)|0;if(((c[m>>2]|0)==0?(c[s>>2]=Eo(c[q>>2]|0,c[h>>2]|0,c[j>>2]|0)|0,(c[s>>2]|0)==19):0)?(c[(c[q>>2]|0)+40>>2]|0)==0:0)c[s>>2]=267;do if(!(c[s>>2]|0)){if((c[o>>2]|0)!=0?(r=c[j>>2]|0,u=(c[q>>2]|0)+264|0,!((c[r>>2]|0)!=(c[u>>2]|0)?1:(c[r+4>>2]|0)!=(c[u+4>>2]|0))):0)break;u=c[j>>2]|0;c[s>>2]=Fo(c[q>>2]|0,0,c[n>>2]|0,c[u>>2]|0,c[u+4>>2]|0)|0}while(0);if(!(c[s>>2]|0))c[s>>2]=Go(c[q>>2]|0,c[n>>2]|0,c[h>>2]|0,c[l>>2]|0)|0;if(a[(c[q>>2]|0)+230>>0]|0)Ho(s,c[q>>2]|0,c[l>>2]|0);c[p>>2]=(c[p>>2]|0)+1}if(!(a[(c[q>>2]|0)+228>>0]|0)){u=c[k>>2]|0;Kd(u);u=c[q>>2]|0;sm(u);u=c[s>>2]|0;i=t;return u|0}Io(s,c[q>>2]|0,c[l>>2]|0,c[k>>2]|0,c[p>>2]|0);u=c[k>>2]|0;Kd(u);u=c[q>>2]|0;sm(u);u=c[s>>2]|0;i=t;return u|0}function Bo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;d=k+20|0;e=k+16|0;l=k+12|0;g=k+8|0;h=k+4|0;f=k;c[e>>2]=a;c[l>>2]=b;c[h>>2]=ae(c[l>>2]|0)|0;c[f>>2]=be(c[l>>2]|0)|0;if(!(c[h>>2]|0)){c[d>>2]=7;l=c[d>>2]|0;i=k;return l|0}if((c[f>>2]|0)==8?0==(zd(c[h>>2]|0,21373,8)|0):0)c[g>>2]=Nn(c[e>>2]|0,0)|0;else j=6;do if((j|0)==6){if((c[f>>2]|0)==7?0==(zd(c[h>>2]|0,24342,7)|0):0){c[g>>2]=So(c[e>>2]|0)|0;break}if((c[f>>2]|0)==15?0==(zd(c[h>>2]|0,24350,15)|0):0){c[g>>2]=To(c[e>>2]|0)|0;break}if((c[f>>2]|0)>6?0==(zd(c[h>>2]|0,24366,6)|0):0){c[g>>2]=Uo(c[e>>2]|0,(c[h>>2]|0)+6|0)|0;break}if((c[f>>2]|0)>10?0==(zd(c[h>>2]|0,24373,10)|0):0){c[g>>2]=Vo(c[e>>2]|0,(c[h>>2]|0)+10|0)|0;break}c[g>>2]=1}while(0);c[d>>2]=c[g>>2];l=c[d>>2]|0;i=k;return l|0}function Co(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;e=f+4|0;d=f;c[b>>2]=a;c[e>>2]=0;if((c[(c[b>>2]|0)+260>>2]|0)==0?(c[e>>2]=jl(c[b>>2]|0,16,d,0)|0,(c[e>>2]|0)==0):0){Ne(c[d>>2]|0,1)|0;ue(c[d>>2]|0)|0;c[e>>2]=Zd(c[d>>2]|0)|0}i=f;return c[e>>2]|0}function Do(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;g=n+24|0;h=n+20|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;l=n;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[m>>2]=0;c[o>>2]=0;No(m,c[g>>2]|0,c[h>>2]|0,c[k>>2]|0,o);if(!((c[o>>2]|0)!=0&(c[m>>2]|0)==0)){o=c[m>>2]|0;i=n;return o|0}c[l>>2]=0;c[m>>2]=Oo(c[g>>2]|0,c[h>>2]|0,l)|0;if(c[m>>2]|0){o=c[m>>2]|0;i=n;return o|0}if(c[l>>2]|0){c[m>>2]=Po(c[g>>2]|0,1)|0;c[c[j>>2]>>2]=0;kR(c[k>>2]|0,0,(c[(c[g>>2]|0)+24>>2]|0)+1<<2<<1|0)|0;o=c[m>>2]|0;i=n;return o|0}c[c[j>>2]>>2]=(c[c[j>>2]>>2]|0)-1;if(!(c[(c[g>>2]|0)+40>>2]|0))Qo(m,c[g>>2]|0,0,h);if(!(a[(c[g>>2]|0)+230>>0]|0)){o=c[m>>2]|0;i=n;return o|0}Qo(m,c[g>>2]|0,19,h);o=c[m>>2]|0;i=n;return o|0}function Eo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+24|0;f=m+20|0;g=m+16|0;h=m+12|0;l=m+8|0;j=m+4|0;k=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;b=c[f>>2]|0;if(c[(c[f>>2]|0)+40>>2]|0){c[k>>2]=c[(c[g>>2]|0)+((c[b+24>>2]|0)+3<<2)>>2];if((fe(c[k>>2]|0)|0)==5)c[k>>2]=c[(c[g>>2]|0)+4>>2];if((fe(c[k>>2]|0)|0)!=1){c[e>>2]=19;l=c[e>>2]|0;i=m;return l|0}else{k=ee(c[k>>2]|0)|0;l=c[h>>2]|0;c[l>>2]=k;c[l+4>>2]=C;c[e>>2]=0;l=c[e>>2]|0;i=m;return l|0}}c[l>>2]=jl(b,18,j,(c[g>>2]|0)+4|0)|0;if((c[l>>2]|0)==0?(c[(c[f>>2]|0)+44>>2]|0)!=0:0){d=c[j>>2]|0;k=(c[(c[f>>2]|0)+24>>2]|0)+2|0;c[l>>2]=Le(d,k,de(c[(c[g>>2]|0)+((c[(c[f>>2]|0)+24>>2]|0)+4<<2)>>2]|0)|0)|0}if(c[l>>2]|0){c[e>>2]=c[l>>2];l=c[e>>2]|0;i=m;return l|0}if(5!=(fe(c[(c[g>>2]|0)+(3+(c[(c[f>>2]|0)+24>>2]|0)<<2)>>2]|0)|0)){if(5==(fe(c[c[g>>2]>>2]|0)|0)?5!=(fe(c[(c[g>>2]|0)+4>>2]|0)|0):0){c[e>>2]=1;l=c[e>>2]|0;i=m;return l|0}c[l>>2]=Pe(c[j>>2]|0,1,c[(c[g>>2]|0)+(3+(c[(c[f>>2]|0)+24>>2]|0)<<2)>>2]|0)|0;if(c[l>>2]|0){c[e>>2]=c[l>>2];l=c[e>>2]|0;i=m;return l|0}}ue(c[j>>2]|0)|0;c[l>>2]=Zd(c[j>>2]|0)|0;j=of(c[(c[f>>2]|0)+12>>2]|0)|0;k=c[h>>2]|0;c[k>>2]=j;c[k+4>>2]=C;c[e>>2]=c[l>>2];l=c[e>>2]|0;i=m;return l|0}function Fo(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,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o;m=o+8|0;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;d=l;c[d>>2]=e;c[d+4>>2]=f;d=l;f=c[d+4>>2]|0;a=(c[h>>2]|0)+264|0;b=c[a+4>>2]|0;do if(!((f|0)<(b|0)|((f|0)==(b|0)?(c[d>>2]|0)>>>0<(c[a>>2]|0)>>>0:0))){d=l;a=(c[h>>2]|0)+264|0;if(((c[d>>2]|0)==(c[a>>2]|0)?(c[d+4>>2]|0)==(c[a+4>>2]|0):0)?(c[(c[h>>2]|0)+276>>2]|0)==0:0){n=6;break}if(!((c[(c[h>>2]|0)+272>>2]|0)==(c[k>>2]|0)?(c[(c[h>>2]|0)+260>>2]|0)<=(c[(c[h>>2]|0)+256>>2]|0):0))n=6}else n=6;while(0);if((n|0)==6?(c[m>>2]=gl(c[h>>2]|0)|0,(c[m>>2]|0)!=0):0){c[g>>2]=c[m>>2];n=c[g>>2]|0;i=o;return n|0}a=l;m=c[a+4>>2]|0;n=(c[h>>2]|0)+264|0;c[n>>2]=c[a>>2];c[n+4>>2]=m;c[(c[h>>2]|0)+272>>2]=c[k>>2];c[(c[h>>2]|0)+276>>2]=c[j>>2];c[g>>2]=0;n=c[g>>2]|0;i=o;return n|0}function Go(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;o=q+32|0;g=q+28|0;h=q+24|0;j=q+20|0;k=q+16|0;l=q+12|0;m=q+8|0;n=q+4|0;p=q;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=2;while(1){if((c[l>>2]|0)>=((c[(c[g>>2]|0)+24>>2]|0)+2|0)){g=8;break}c[m>>2]=(c[l>>2]|0)-2;if(!(d[(c[(c[g>>2]|0)+32>>2]|0)+(c[m>>2]|0)>>0]|0)){c[n>>2]=ae(c[(c[j>>2]|0)+(c[l>>2]<<2)>>2]|0)|0;c[p>>2]=Lo(c[g>>2]|0,c[h>>2]|0,c[n>>2]|0,c[m>>2]|0,(c[k>>2]|0)+(c[m>>2]<<2)|0)|0;if(c[p>>2]|0){g=5;break}b=be(c[(c[j>>2]|0)+(c[l>>2]<<2)>>2]|0)|0;a=(c[k>>2]|0)+(c[(c[g>>2]|0)+24>>2]<<2)|0;c[a>>2]=(c[a>>2]|0)+b}c[l>>2]=(c[l>>2]|0)+1}if((g|0)==5){c[o>>2]=c[p>>2];p=c[o>>2]|0;i=q;return p|0}else if((g|0)==8){c[o>>2]=0;p=c[o>>2]|0;i=q;return p|0}return 0}function Ho(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+24|0;f=m+20|0;g=m+16|0;j=m+12|0;h=m+8|0;k=m+4|0;l=m;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(c[c[e>>2]>>2]|0){i=m;return}c[j>>2]=Id((c[(c[f>>2]|0)+24>>2]|0)*10|0)|0;if(!(c[j>>2]|0)){c[c[e>>2]>>2]=7;i=m;return}Ko(c[(c[f>>2]|0)+24>>2]|0,c[g>>2]|0,c[j>>2]|0,h);c[l>>2]=jl(c[f>>2]|0,20,k,0)|0;if(c[l>>2]|0){Kd(c[j>>2]|0);c[c[e>>2]>>2]=c[l>>2];i=m;return}else{l=(c[f>>2]|0)+264|0;Me(c[k>>2]|0,1,c[l>>2]|0,c[l+4>>2]|0)|0;Je(c[k>>2]|0,2,c[j>>2]|0,c[h>>2]|0,148)|0;ue(c[k>>2]|0)|0;l=Zd(c[k>>2]|0)|0;c[c[e>>2]>>2]=l;i=m;return}}function Io(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,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=i;i=i+64|0;g=u+48|0;h=u+44|0;j=u+40|0;k=u+36|0;l=u+32|0;q=u+28|0;o=u+24|0;m=u+20|0;r=u+16|0;n=u+12|0;s=u+8|0;p=u+4|0;t=u;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[p>>2]=(c[(c[h>>2]|0)+24>>2]|0)+2;if(c[c[g>>2]>>2]|0){i=u;return}c[m>>2]=Id((c[p>>2]|0)*14|0)|0;if(!(c[m>>2]|0)){c[c[g>>2]>>2]=7;i=u;return}c[q>>2]=(c[m>>2]|0)+(c[p>>2]<<2);c[s>>2]=jl(c[h>>2]|0,22,r,0)|0;if(c[s>>2]|0){Kd(c[m>>2]|0);c[c[g>>2]>>2]=c[s>>2];i=u;return}Le(c[r>>2]|0,1,0)|0;if((ue(c[r>>2]|0)|0)==100){f=c[p>>2]|0;b=c[m>>2]|0;a=Ae(c[r>>2]|0,0)|0;Jo(f,b,a,Be(c[r>>2]|0,0)|0)}else kR(c[m>>2]|0,0,c[p>>2]<<2|0)|0;c[s>>2]=Zd(c[r>>2]|0)|0;if(c[s>>2]|0){Kd(c[m>>2]|0);c[c[g>>2]>>2]=c[s>>2];i=u;return}if((c[l>>2]|0)<0?(c[c[m>>2]>>2]|0)>>>0<(0-(c[l>>2]|0)|0)>>>0:0)c[c[m>>2]>>2]=0;else{a=c[m>>2]|0;c[a>>2]=(c[a>>2]|0)+(c[l>>2]|0)}c[n>>2]=0;while(1){if((c[n>>2]|0)>=((c[(c[h>>2]|0)+24>>2]|0)+1|0))break;c[t>>2]=c[(c[m>>2]|0)+((c[n>>2]|0)+1<<2)>>2];if(((c[t>>2]|0)+(c[(c[j>>2]|0)+(c[n>>2]<<2)>>2]|0)|0)>>>0<(c[(c[k>>2]|0)+(c[n>>2]<<2)>>2]|0)>>>0)c[t>>2]=0;else c[t>>2]=(c[t>>2]|0)+(c[(c[j>>2]|0)+(c[n>>2]<<2)>>2]|0)-(c[(c[k>>2]|0)+(c[n>>2]<<2)>>2]|0);c[(c[m>>2]|0)+((c[n>>2]|0)+1<<2)>>2]=c[t>>2];c[n>>2]=(c[n>>2]|0)+1}Ko(c[p>>2]|0,c[m>>2]|0,c[q>>2]|0,o);c[s>>2]=jl(c[h>>2]|0,23,r,0)|0;if(c[s>>2]|0){Kd(c[m>>2]|0);c[c[g>>2]>>2]=c[s>>2];i=u;return}else{Le(c[r>>2]|0,1,0)|0;Je(c[r>>2]|0,2,c[q>>2]|0,c[o>>2]|0,0)|0;ue(c[r>>2]|0)|0;t=Zd(c[r>>2]|0)|0;c[c[g>>2]>>2]=t;Kd(c[m>>2]|0);i=u;return}}function Jo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+28|0;g=m+24|0;h=m+20|0;j=m+12|0;k=m+8|0;l=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[m+16>>2]=e;c[k>>2]=0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[f>>2]|0))break;d=Ul((c[h>>2]|0)+(c[k>>2]|0)|0,l)|0;c[k>>2]=(c[k>>2]|0)+d;c[(c[g>>2]|0)+(c[j>>2]<<2)>>2]=c[l>>2];c[j>>2]=(c[j>>2]|0)+1}i=m;return}function Ko(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[l>>2]=0;c[k>>2]=0;while(1){a=c[l>>2]|0;if((c[k>>2]|0)>=(c[f>>2]|0))break;d=El((c[h>>2]|0)+a|0,c[(c[g>>2]|0)+(c[k>>2]<<2)>>2]|0,0)|0;c[l>>2]=(c[l>>2]|0)+d;c[k>>2]=(c[k>>2]|0)+1}c[c[j>>2]>>2]=a;i=m;return}function Lo(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,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=i;i=i+80|0;g=B+72|0;h=B+68|0;j=B+64|0;k=B+60|0;l=B+56|0;m=B+52|0;x=B+48|0;q=B+44|0;o=B+40|0;p=B+36|0;s=B+32|0;z=B+28|0;r=B+24|0;w=B+20|0;v=B+16|0;t=B+12|0;y=B+8|0;n=B+4|0;u=B;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[q>>2]=0;c[o>>2]=0;c[p>>2]=0;c[s>>2]=0;c[r>>2]=0;c[w>>2]=c[(c[h>>2]|0)+36>>2];c[v>>2]=c[c[w>>2]>>2];if(!(c[k>>2]|0)){c[c[m>>2]>>2]=0;c[g>>2]=0;A=c[g>>2]|0;i=B;return A|0}c[x>>2]=wn(c[w>>2]|0,c[j>>2]|0,c[k>>2]|0,-1,t)|0;if(c[x>>2]|0){c[g>>2]=c[x>>2];A=c[g>>2]|0;i=B;return A|0}c[y>>2]=c[(c[v>>2]|0)+20>>2];a:while(1){if(c[x>>2]|0)break;d=Sb[c[y>>2]&255](c[t>>2]|0,z,r,q,o,p)|0;c[x>>2]=d;if(d)break;if((c[p>>2]|0)>=(c[s>>2]|0))c[s>>2]=(c[p>>2]|0)+1;if((c[p>>2]|0)>=0&(c[z>>2]|0)!=0^1|(c[r>>2]|0)<=0){A=11;break}c[x>>2]=Mo(c[h>>2]|0,c[l>>2]|0,c[p>>2]|0,(c[(c[h>>2]|0)+252>>2]|0)+4|0,c[z>>2]|0,c[r>>2]|0)|0;c[n>>2]=1;while(1){if(c[x>>2]|0)continue a;if((c[n>>2]|0)>=(c[(c[h>>2]|0)+248>>2]|0))continue a;c[u>>2]=(c[(c[h>>2]|0)+252>>2]|0)+((c[n>>2]|0)*24|0);if((c[r>>2]|0)>=(c[c[u>>2]>>2]|0))c[x>>2]=Mo(c[h>>2]|0,c[l>>2]|0,c[p>>2]|0,(c[u>>2]|0)+4|0,c[z>>2]|0,c[c[u>>2]>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+1}}if((A|0)==11)c[x>>2]=1;Tb[c[(c[v>>2]|0)+16>>2]&255](c[t>>2]|0)|0;A=c[m>>2]|0;c[A>>2]=(c[A>>2]|0)+(c[s>>2]|0);c[g>>2]=(c[x>>2]|0)==101?0:c[x>>2]|0;A=c[g>>2]|0;i=B;return A|0}function Mo(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;n=q+8|0;o=q+4|0;p=q;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[p>>2]=0;c[o>>2]=yk(c[l>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;if(c[o>>2]|0){f=(c[h>>2]|0)+260|0;c[f>>2]=(c[f>>2]|0)-((c[c[o>>2]>>2]|0)+(c[n>>2]|0)+20)}a=(c[h>>2]|0)+264|0;e=c[j>>2]|0;f=c[k>>2]|0;if((xn(o,c[a>>2]|0,c[a+4>>2]|0,e,((e|0)<0)<<31>>31,f,((f|0)<0)<<31>>31,p)|0)!=0?(f=c[o>>2]|0,(f|0)==(fk(c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0)):0){Kd(c[o>>2]|0);c[p>>2]=7}if(c[p>>2]|0){f=c[p>>2]|0;i=q;return f|0}f=(c[h>>2]|0)+260|0;c[f>>2]=(c[f>>2]|0)+((c[c[o>>2]>>2]|0)+(c[n>>2]|0)+20);f=c[p>>2]|0;i=q;return f|0}function No(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+64|0;j=u+48|0;k=u+44|0;h=u+40|0;l=u+36|0;m=u+32|0;s=u+28|0;r=u+24|0;n=u+20|0;q=u+16|0;p=u;o=u+12|0;t=u+8|0;c[j>>2]=a;c[k>>2]=b;c[h>>2]=e;c[l>>2]=f;c[m>>2]=g;if(c[c[j>>2]>>2]|0){i=u;return}c[s>>2]=jl(c[k>>2]|0,7,r,h)|0;h=c[r>>2]|0;if(!(c[s>>2]|0)){do if(100==(ue(h)|0)){c[q>>2]=Ro(c[k>>2]|0,c[r>>2]|0)|0;e=Ee(c[r>>2]|0,0)|0;g=p;c[g>>2]=e;c[g+4>>2]=C;c[s>>2]=Fo(c[k>>2]|0,1,c[q>>2]|0,c[p>>2]|0,c[p+4>>2]|0)|0;c[n>>2]=1;while(1){if(c[s>>2]|0)break;if((c[n>>2]|0)>(c[(c[k>>2]|0)+24>>2]|0))break;c[o>>2]=(c[n>>2]|0)-1;if(!(d[(c[(c[k>>2]|0)+32>>2]|0)+(c[o>>2]|0)>>0]|0)){c[t>>2]=Fe(c[r>>2]|0,c[n>>2]|0)|0;c[s>>2]=Lo(c[k>>2]|0,c[q>>2]|0,c[t>>2]|0,-1,(c[l>>2]|0)+(c[o>>2]<<2)|0)|0;g=Be(c[r>>2]|0,c[n>>2]|0)|0;p=(c[l>>2]|0)+(c[(c[k>>2]|0)+24>>2]<<2)|0;c[p>>2]=(c[p>>2]|0)+g}c[n>>2]=(c[n>>2]|0)+1}if(!(c[s>>2]|0)){c[c[m>>2]>>2]=1;break}Zd(c[r>>2]|0)|0;c[c[j>>2]>>2]=c[s>>2];i=u;return}while(0);c[s>>2]=Zd(c[r>>2]|0)|0}else Zd(h)|0;c[c[j>>2]>>2]=c[s>>2];i=u;return}function Oo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(c[(c[e>>2]|0)+40>>2]|0){c[c[g>>2]>>2]=0;c[j>>2]=0;j=c[j>>2]|0;i=k;return j|0}c[j>>2]=jl(c[e>>2]|0,1,h,f)|0;if(c[j>>2]|0){j=c[j>>2]|0;i=k;return j|0}if(100==(ue(c[h>>2]|0)|0)){d=De(c[h>>2]|0,0)|0;c[c[g>>2]>>2]=d}c[j>>2]=Zd(c[h>>2]|0)|0;j=c[j>>2]|0;i=k;return j|0}function Po(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+8|0;h=g+4|0;f=g;c[e>>2]=b;c[h>>2]=d;c[f>>2]=0;dl(c[e>>2]|0);if(c[h>>2]|0)Qo(f,c[e>>2]|0,2,0);Qo(f,c[e>>2]|0,3,0);Qo(f,c[e>>2]|0,4,0);if(a[(c[e>>2]|0)+230>>0]|0)Qo(f,c[e>>2]|0,5,0);if(!(a[(c[e>>2]|0)+229>>0]|0)){h=c[f>>2]|0;i=g;return h|0}Qo(f,c[e>>2]|0,6,0);h=c[f>>2]|0;i=g;return h|0}function Qo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if(c[c[f>>2]>>2]|0){i=m;return}c[l>>2]=jl(c[g>>2]|0,c[h>>2]|0,k,c[j>>2]|0)|0;if(!(c[l>>2]|0)){ue(c[k>>2]|0)|0;c[l>>2]=Zd(c[k>>2]|0)|0}c[c[f>>2]>>2]=c[l>>2];i=m;return}function Ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;if(!(c[(c[d>>2]|0)+44>>2]|0)){b=c[f>>2]|0;i=g;return b|0}c[f>>2]=De(c[e>>2]|0,(c[(c[d>>2]|0)+24>>2]|0)+1|0)|0;b=c[f>>2]|0;i=g;return b|0}function So(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+64|0;f=t;h=t+52|0;q=t+48|0;j=t+44|0;l=t+40|0;k=t+36|0;p=t+32|0;o=t+28|0;g=t+24|0;e=t+20|0;m=t+16|0;n=t+12|0;s=t+8|0;r=t+4|0;c[h>>2]=b;c[q>>2]=Po(c[h>>2]|0,0)|0;if(c[q>>2]|0){s=c[q>>2]|0;i=t;return s|0}c[j>>2]=0;c[l>>2]=0;c[k>>2]=0;c[p>>2]=0;c[o>>2]=0;c[f>>2]=c[(c[h>>2]|0)+216>>2];c[g>>2]=Od(24461,f)|0;if(c[g>>2]|0){c[q>>2]=af(c[(c[h>>2]|0)+12>>2]|0,c[g>>2]|0,-1,p,0)|0;Kd(c[g>>2]|0)}else c[q>>2]=7;do if(!(c[q>>2]|0)){c[e>>2]=((c[(c[h>>2]|0)+24>>2]|0)+1<<2)*3;c[j>>2]=Id(c[e>>2]|0)|0;if(!(c[j>>2]|0)){c[q>>2]=7;break}else{kR(c[j>>2]|0,0,c[e>>2]|0)|0;c[l>>2]=(c[j>>2]|0)+((c[(c[h>>2]|0)+24>>2]|0)+1<<2);c[k>>2]=(c[l>>2]|0)+((c[(c[h>>2]|0)+24>>2]|0)+1<<2);break}}while(0);a:while(1){if(!(c[q>>2]|0))e=100==(ue(c[p>>2]|0)|0);else e=0;b=c[h>>2]|0;if(!e)break;c[n>>2]=Ro(b,c[p>>2]|0)|0;b=c[h>>2]|0;f=c[n>>2]|0;g=Ee(c[p>>2]|0,0)|0;c[q>>2]=Fo(b,0,f,g,C)|0;kR(c[j>>2]|0,0,(c[(c[h>>2]|0)+24>>2]|0)+1<<2|0)|0;c[m>>2]=0;while(1){if(c[q>>2]|0)break;if((c[m>>2]|0)>=(c[(c[h>>2]|0)+24>>2]|0))break;if(!(d[(c[(c[h>>2]|0)+32>>2]|0)+(c[m>>2]|0)>>0]|0)){c[s>>2]=Fe(c[p>>2]|0,(c[m>>2]|0)+1|0)|0;c[q>>2]=Lo(c[h>>2]|0,c[n>>2]|0,c[s>>2]|0,c[m>>2]|0,(c[j>>2]|0)+(c[m>>2]<<2)|0)|0;f=Be(c[p>>2]|0,(c[m>>2]|0)+1|0)|0;g=(c[j>>2]|0)+(c[(c[h>>2]|0)+24>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)+f}c[m>>2]=(c[m>>2]|0)+1}if(a[(c[h>>2]|0)+230>>0]|0)Ho(q,c[h>>2]|0,c[j>>2]|0);if(c[q>>2]|0){Yd(c[p>>2]|0)|0;c[p>>2]=0;continue}c[o>>2]=(c[o>>2]|0)+1;c[m>>2]=0;while(1){if((c[m>>2]|0)>(c[(c[h>>2]|0)+24>>2]|0))continue a;g=(c[l>>2]|0)+(c[m>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)+(c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]|0);c[m>>2]=(c[m>>2]|0)+1}}if(a[b+228>>0]|0)Io(q,c[h>>2]|0,c[l>>2]|0,c[k>>2]|0,c[o>>2]|0);Kd(c[j>>2]|0);if(!(c[p>>2]|0)){s=c[q>>2]|0;i=t;return s|0}c[r>>2]=Yd(c[p>>2]|0)|0;if(c[q>>2]|0){s=c[q>>2]|0;i=t;return s|0}c[q>>2]=c[r>>2];s=c[q>>2]|0;i=t;return s|0}function To(a){a=a|0;var b=0,d=0,e=0,f=0;d=i;i=i+16|0;f=d+8|0;b=d+4|0;e=d;c[f>>2]=a;c[e>>2]=0;a=Yo(c[f>>2]|0,e)|0;c[b>>2]=a;c[b>>2]=(c[b>>2]|0)==0&(c[e>>2]|0)==0?267:a;i=d;return c[b>>2]|0}function Uo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+20|0;l=k+16|0;h=k+12|0;g=k+8|0;f=k+4|0;j=k;c[e>>2]=b;c[l>>2]=d;c[g>>2]=8;c[f>>2]=0;c[j>>2]=c[l>>2];c[f>>2]=Wo(j)|0;if((a[c[j>>2]>>0]|0)==44?(a[(c[j>>2]|0)+1>>0]|0)!=0:0){c[j>>2]=(c[j>>2]|0)+1;c[g>>2]=Wo(j)|0}if((c[g>>2]|0)<2?1:(a[c[j>>2]>>0]|0)!=0){c[h>>2]=1;l=c[h>>2]|0;i=k;return l|0}c[h>>2]=0;if(!(a[(c[e>>2]|0)+229>>0]|0))Xo(h,c[e>>2]|0);if(!(c[h>>2]|0))c[h>>2]=$n(c[e>>2]|0,c[f>>2]|0,c[g>>2]|0)|0;sm(c[e>>2]|0);l=c[h>>2]|0;i=k;return l|0}function Vo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+16|0;f=j+12|0;k=j+8|0;h=j+4|0;g=j;c[f>>2]=b;c[k>>2]=d;c[h>>2]=0;c[g>>2]=0;d=Wo(k)|0;c[(c[f>>2]|0)+48>>2]=d;if(!((c[(c[f>>2]|0)+48>>2]|0)!=1?(c[(c[f>>2]|0)+48>>2]|0)<=16:0))c[(c[f>>2]|0)+48>>2]=8;if((a[(c[f>>2]|0)+229>>0]|0)==0?(Xo(h,c[f>>2]|0),(c[h>>2]|0)!=0):0){c[e>>2]=c[h>>2];k=c[e>>2]|0;i=j;return k|0}c[h>>2]=jl(c[f>>2]|0,23,g,0)|0;if(c[h>>2]|0){c[e>>2]=c[h>>2];k=c[e>>2]|0;i=j;return k|0}else{Le(c[g>>2]|0,1,2)|0;Le(c[g>>2]|0,2,c[(c[f>>2]|0)+48>>2]|0)|0;ue(c[g>>2]|0)|0;c[h>>2]=Zd(c[g>>2]|0)|0;c[e>>2]=c[h>>2];k=c[e>>2]|0;i=j;return k|0}return 0}function Wo(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+8|0;f=g+4|0;e=g;c[d>>2]=b;c[f>>2]=c[c[d>>2]>>2];c[e>>2]=0;while(1){if((a[c[f>>2]>>0]|0)<48){b=5;break}if((a[c[f>>2]>>0]|0)>57){b=5;break}h=(c[e>>2]|0)*10|0;b=c[f>>2]|0;c[f>>2]=b+1;c[e>>2]=h+(a[b>>0]|0)-48}if((b|0)==5){c[c[d>>2]>>2]=c[f>>2];i=g;return c[e>>2]|0}return 0}function Xo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;h=f;g=f+12|0;e=f+8|0;c[g>>2]=b;c[e>>2]=d;d=c[g>>2]|0;b=c[(c[e>>2]|0)+12>>2]|0;j=c[(c[e>>2]|0)+20>>2]|0;c[h>>2]=c[(c[e>>2]|0)+16>>2];c[h+4>>2]=j;hl(d,b,24384,h);if(c[c[g>>2]>>2]|0){i=f;return}a[(c[e>>2]|0)+229>>0]=1;i=f;return}function Yo(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0;F=i;i=i+112|0;j=F+24|0;l=F+108|0;m=F+104|0;B=F+100|0;n=F+16|0;o=F+8|0;g=F+96|0;h=F+92|0;f=F+88|0;e=F+84|0;y=F+80|0;z=F+76|0;k=F+72|0;r=F;u=F+68|0;q=F+64|0;D=F+60|0;w=F+56|0;A=F+52|0;E=F+48|0;x=F+44|0;s=F+40|0;t=F+36|0;v=F+32|0;p=F+28|0;c[l>>2]=a;c[m>>2]=b;c[B>>2]=0;b=n;c[b>>2]=0;c[b+4>>2]=0;b=o;c[b>>2]=0;c[b+4>>2]=0;c[g>>2]=0;c[B>>2]=jl(c[l>>2]|0,27,g,0)|0;if(!(c[B>>2]|0)){Le(c[g>>2]|0,1,c[(c[l>>2]|0)+272>>2]|0)|0;Le(c[g>>2]|0,2,c[(c[l>>2]|0)+248>>2]|0)|0;a:while(1){if(!(c[B>>2]|0))a=(ue(c[g>>2]|0)|0)==100;else a=0;b=c[g>>2]|0;if(!a)break;c[f>>2]=De(b,0)|0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[l>>2]|0)+248>>2]|0))continue a;a=n;H=c[a>>2]|0;a=c[a+4>>2]|0;G=Zo(c[l>>2]|0,c[f>>2]|0,c[e>>2]|0,B)|0;b=n;c[b>>2]=H^G;c[b+4>>2]=a^C;c[e>>2]=(c[e>>2]|0)+1}}c[h>>2]=Zd(b)|0;if(!(c[B>>2]|0))c[B>>2]=c[h>>2]}if(c[B>>2]|0){E=n;D=E;D=c[D>>2]|0;E=E+4|0;E=c[E>>2]|0;G=o;H=G;H=c[H>>2]|0;G=G+4|0;G=c[G>>2]|0;H=(D|0)==(H|0);G=(E|0)==(G|0);G=H&G;G=G&1;H=c[m>>2]|0;c[H>>2]=G;H=c[B>>2]|0;i=F;return H|0}c[y>>2]=c[c[(c[l>>2]|0)+36>>2]>>2];c[z>>2]=0;c[j>>2]=c[(c[l>>2]|0)+216>>2];c[k>>2]=Od(24461,j)|0;if(c[k>>2]|0){c[B>>2]=af(c[(c[l>>2]|0)+12>>2]|0,c[k>>2]|0,-1,z,0)|0;Kd(c[k>>2]|0)}else c[B>>2]=7;b:while(1){if(!(c[B>>2]|0))a=100==(ue(c[z>>2]|0)|0);else a=0;b=c[z>>2]|0;if(!a)break;G=Ee(b,0)|0;H=r;c[H>>2]=G;c[H+4>>2]=C;c[u>>2]=Ro(c[l>>2]|0,c[z>>2]|0)|0;c[q>>2]=0;while(1){if(c[B>>2]|0)continue b;if((c[q>>2]|0)>=(c[(c[l>>2]|0)+24>>2]|0))continue b;if(!(d[(c[(c[l>>2]|0)+32>>2]|0)+(c[q>>2]|0)>>0]|0)){c[D>>2]=Fe(c[z>>2]|0,(c[q>>2]|0)+1|0)|0;c[w>>2]=Be(c[z>>2]|0,(c[q>>2]|0)+1|0)|0;c[A>>2]=0;c[B>>2]=wn(c[(c[l>>2]|0)+36>>2]|0,c[u>>2]|0,c[D>>2]|0,c[w>>2]|0,A)|0;c:while(1){if(c[B>>2]|0)break;c[x>>2]=0;c[s>>2]=0;c[t>>2]=0;c[v>>2]=0;c[B>>2]=Sb[c[(c[y>>2]|0)+20>>2]&255](c[A>>2]|0,E,x,s,t,v)|0;if(c[B>>2]|0)continue;G=o;j=c[G>>2]|0;G=c[G+4>>2]|0;k=r;k=_o(c[E>>2]|0,c[x>>2]|0,c[u>>2]|0,0,c[k>>2]|0,c[k+4>>2]|0,c[q>>2]|0,c[v>>2]|0)|0;H=o;c[H>>2]=j^k;c[H+4>>2]=G^C;c[p>>2]=1;while(1){if((c[p>>2]|0)>=(c[(c[l>>2]|0)+248>>2]|0))continue c;if((c[(c[(c[l>>2]|0)+252>>2]|0)+((c[p>>2]|0)*24|0)>>2]|0)<=(c[x>>2]|0)){G=o;j=c[G>>2]|0;G=c[G+4>>2]|0;k=r;k=_o(c[E>>2]|0,c[(c[(c[l>>2]|0)+252>>2]|0)+((c[p>>2]|0)*24|0)>>2]|0,c[u>>2]|0,c[p>>2]|0,c[k>>2]|0,c[k+4>>2]|0,c[q>>2]|0,c[v>>2]|0)|0;H=o;c[H>>2]=j^k;c[H+4>>2]=G^C}c[p>>2]=(c[p>>2]|0)+1}}if(c[A>>2]|0)Tb[c[(c[y>>2]|0)+16>>2]&255](c[A>>2]|0)|0;if((c[B>>2]|0)==101)c[B>>2]=0}c[q>>2]=(c[q>>2]|0)+1}}Yd(b)|0;E=n;D=E;D=c[D>>2]|0;E=E+4|0;E=c[E>>2]|0;G=o;H=G;H=c[H>>2]|0;G=G+4|0;G=c[G>>2]|0;H=(D|0)==(H|0);G=(E|0)==(G|0);G=H&G;G=G&1;H=c[m>>2]|0;c[H>>2]=G;H=c[B>>2]|0;i=F;return H|0}function Zo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+144|0;g=u+140|0;h=u+136|0;j=u+132|0;k=u+128|0;f=u+112|0;m=u+56|0;t=u+48|0;l=u+32|0;r=u+44|0;s=u+40|0;o=u+24|0;n=u+16|0;p=u+8|0;q=u;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;d=l;c[d>>2]=0;c[d+4>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;d=m;b=d+56|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(b|0));c[f+12>>2]=3;e=f+12|0;c[e>>2]=c[e>>2]|16;c[t>>2]=kl(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,-2,0,0,0,1,m)|0;if(!(c[t>>2]|0))c[t>>2]=ol(c[g>>2]|0,m,f)|0;if(c[t>>2]|0){vl(m);t=c[t>>2]|0;s=c[k>>2]|0;c[s>>2]=t;s=l;t=s;t=c[t>>2]|0;s=s+4|0;s=c[s>>2]|0;C=s;i=u;return t|0}a:while(1){f=pl(c[g>>2]|0,m)|0;c[t>>2]=f;if(100!=(f|0))break;c[r>>2]=c[m+48>>2];c[s>>2]=(c[r>>2]|0)+(c[m+52>>2]|0);f=o;c[f>>2]=0;c[f+4>>2]=0;f=n;c[f>>2]=0;c[f+4>>2]=0;f=p;c[f>>2]=0;c[f+4>>2]=0;f=Ul(c[r>>2]|0,o)|0;c[r>>2]=(c[r>>2]|0)+f;while(1){if((c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0)continue a;f=q;c[f>>2]=0;c[f+4>>2]=0;f=Ul(c[r>>2]|0,q)|0;c[r>>2]=(c[r>>2]|0)+f;if((c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0)continue;e=q;f=q;if(!((c[e>>2]|0)==0&(c[e+4>>2]|0)==0|(c[f>>2]|0)==1&(c[f+4>>2]|0)==0)){b=q;b=fR(c[b>>2]|0,c[b+4>>2]|0,2,0)|0;e=p;b=gR(c[e>>2]|0,c[e+4>>2]|0,b|0,C|0)|0;e=p;c[e>>2]=b;c[e+4>>2]=C;e=l;b=c[e>>2]|0;e=c[e+4>>2]|0;a=o;a=_o(c[m+40>>2]|0,c[m+44>>2]|0,c[h>>2]|0,c[j>>2]|0,c[a>>2]|0,c[a+4>>2]|0,c[n>>2]|0,c[p>>2]|0)|0;f=l;c[f>>2]=b^a;c[f+4>>2]=e^C;continue}f=n;c[f>>2]=0;c[f+4>>2]=0;f=p;c[f>>2]=0;c[f+4>>2]=0;f=q;d=c[r>>2]|0;if((c[f>>2]|0)!=0|(c[f+4>>2]|0)!=0){f=Ul(d,n)|0;c[r>>2]=(c[r>>2]|0)+f;continue}else{e=Ul(d,q)|0;c[r>>2]=(c[r>>2]|0)+e;e=q;f=o;e=gR(c[f>>2]|0,c[f+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;f=o;c[f>>2]=e;c[f+4>>2]=C;continue}}}vl(m);t=c[t>>2]|0;s=c[k>>2]|0;c[s>>2]=t;s=l;t=s;t=c[t>>2]|0;s=s+4|0;s=c[s>>2]|0;C=s;i=u;return t|0}function _o(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;p=i;i=i+48|0;l=p+40|0;m=p+36|0;t=p+32|0;s=p+28|0;u=p+8|0;r=p+24|0;q=p+20|0;n=p+16|0;o=p;c[l>>2]=b;c[m>>2]=d;c[t>>2]=e;c[s>>2]=f;d=u;c[d>>2]=g;c[d+4>>2]=h;c[r>>2]=j;c[q>>2]=k;k=u;d=c[k+4>>2]|0;b=o;c[b>>2]=c[k>>2];c[b+4>>2]=d;b=o;b=lR(c[b>>2]|0,c[b+4>>2]|0,3)|0;d=c[t>>2]|0;d=gR(b|0,C|0,d|0,((d|0)<0)<<31>>31|0)|0;b=o;d=gR(c[b>>2]|0,c[b+4>>2]|0,d|0,C|0)|0;b=o;c[b>>2]=d;c[b+4>>2]=C;b=o;b=lR(c[b>>2]|0,c[b+4>>2]|0,3)|0;d=c[s>>2]|0;d=gR(b|0,C|0,d|0,((d|0)<0)<<31>>31|0)|0;b=o;d=gR(c[b>>2]|0,c[b+4>>2]|0,d|0,C|0)|0;b=o;c[b>>2]=d;c[b+4>>2]=C;b=o;b=lR(c[b>>2]|0,c[b+4>>2]|0,3)|0;d=c[r>>2]|0;d=gR(b|0,C|0,d|0,((d|0)<0)<<31>>31|0)|0;b=o;d=gR(c[b>>2]|0,c[b+4>>2]|0,d|0,C|0)|0;b=o;c[b>>2]=d;c[b+4>>2]=C;b=o;b=lR(c[b>>2]|0,c[b+4>>2]|0,3)|0;d=c[q>>2]|0;d=gR(b|0,C|0,d|0,((d|0)<0)<<31>>31|0)|0;b=o;d=gR(c[b>>2]|0,c[b+4>>2]|0,d|0,C|0)|0;b=o;c[b>>2]=d;c[b+4>>2]=C;c[n>>2]=0;while(1){h=o;g=c[h>>2]|0;h=c[h+4>>2]|0;if((c[n>>2]|0)>=(c[m>>2]|0))break;u=lR(g|0,h|0,3)|0;t=a[(c[l>>2]|0)+(c[n>>2]|0)>>0]|0;t=gR(u|0,C|0,t|0,((t|0)<0)<<31>>31|0)|0;u=o;t=gR(c[u>>2]|0,c[u+4>>2]|0,t|0,C|0)|0;u=o;c[u>>2]=t;c[u+4>>2]=C;c[n>>2]=(c[n>>2]|0)+1}C=h;i=p;return g|0}function $o(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;e=h+8|0;g=h+4|0;f=h;c[e>>2]=b;c[g>>2]=0;c[f>>2]=c[(c[e>>2]|0)+12>>2];a:do if(!(c[f>>2]|0))a[(c[e>>2]|0)+6>>0]=1;else do{if(!(d[(c[e>>2]|0)+7>>0]|0))Zd(c[(c[e>>2]|0)+8>>2]|0)|0;Nm(c[e>>2]|0,c[f>>2]|0,g);a[(c[e>>2]|0)+6>>0]=a[(c[f>>2]|0)+32>>0]|0;a[(c[e>>2]|0)+7>>0]=1;c[(c[e>>2]|0)+88>>2]=1;k=(c[f>>2]|0)+24|0;j=c[k+4>>2]|0;b=(c[e>>2]|0)+32|0;c[b>>2]=c[k>>2];c[b+4>>2]=j;if(d[(c[e>>2]|0)+6>>0]|0)break a}while((Im(c[e>>2]|0,g)|0)!=0);while(0);if(c[g>>2]|0){k=c[g>>2]|0;i=h;return k|0}if(!((d[(c[e>>2]|0)+52>>0]|0|0)==0?(j=(c[e>>2]|0)+32|0,b=c[j+4>>2]|0,k=(c[e>>2]|0)+80|0,f=c[k+4>>2]|0,(b|0)>(f|0)|((b|0)==(f|0)?(c[j>>2]|0)>>>0>(c[k>>2]|0)>>>0:0)):0)){if(!(d[(c[e>>2]|0)+52>>0]|0)){k=c[g>>2]|0;i=h;return k|0}j=(c[e>>2]|0)+32|0;b=c[j+4>>2]|0;k=(c[e>>2]|0)+72|0;f=c[k+4>>2]|0;if(!((b|0)<(f|0)|((b|0)==(f|0)?(c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0:0))){k=c[g>>2]|0;i=h;return k|0}}a[(c[e>>2]|0)+6>>0]=1;k=c[g>>2]|0;i=h;return k|0}function ap(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;f=e+8|0;b=e+4|0;d=e;c[f>>2]=a;c[b>>2]=c[f>>2];while(1){if(!(c[b>>2]|0))break;if((c[(c[b>>2]|0)+12>>2]|0)==0?(c[(c[b>>2]|0)+16>>2]|0)==0:0)break;a=c[b>>2]|0;if(c[(c[b>>2]|0)+12>>2]|0)a=c[a+12>>2]|0;else a=c[a+16>>2]|0;c[b>>2]=a}a:while(1){if(!(c[b>>2]|0))break;c[d>>2]=c[(c[b>>2]|0)+8>>2];Ap(c[b>>2]|0);if(((c[d>>2]|0)!=0?(c[b>>2]|0)==(c[(c[d>>2]|0)+12>>2]|0):0)?(c[(c[d>>2]|0)+16>>2]|0)!=0:0){c[b>>2]=c[(c[d>>2]|0)+16>>2];while(1){if(!(c[b>>2]|0))continue a;if((c[(c[b>>2]|0)+12>>2]|0)==0?(c[(c[b>>2]|0)+16>>2]|0)==0:0)continue a;a=c[b>>2]|0;if(c[(c[b>>2]|0)+12>>2]|0)a=c[a+12>>2]|0;else a=c[a+16>>2]|0;c[b>>2]=a}}c[b>>2]=c[d>>2]}i=e;return}function bp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;e=j+8|0;f=j+20|0;g=j;h=j+16|0;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;if((c[f>>2]|0)!=0?(c[h>>2]=Te(c[f>>2]|0)|0,(c[h>>2]|0)==1):0){a=ee(c[f>>2]|0)|0;h=e;c[h>>2]=a;c[h+4>>2]=C;h=e;a=h;a=c[a>>2]|0;h=h+4|0;h=c[h>>2]|0;C=h;i=j;return a|0}a=c[g+4>>2]|0;h=e;c[h>>2]=c[g>>2];c[h+4>>2]=a;h=e;a=h;a=c[a>>2]|0;h=h+4|0;h=c[h>>2]|0;C=h;i=j;return a|0}function cp(a,b,d,e,f,g,h,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;s=i;i=i+64|0;r=s+8|0;q=s;z=s+52|0;y=s+48|0;x=s+44|0;w=s+40|0;v=s+36|0;u=s+32|0;m=s+28|0;t=s+24|0;n=s+20|0;o=s+16|0;p=s+12|0;c[z>>2]=a;c[y>>2]=b;c[x>>2]=d;c[w>>2]=e;c[v>>2]=f;c[u>>2]=g;c[m>>2]=h;c[t>>2]=j;c[n>>2]=k;c[o>>2]=l;c[p>>2]=op(c[z>>2]|0,c[y>>2]|0,c[x>>2]|0,c[w>>2]|0,c[v>>2]|0,c[u>>2]|0,c[m>>2]|0,c[t>>2]|0,c[n>>2]|0)|0;if(((c[p>>2]|0)==0?(c[c[n>>2]>>2]|0)!=0:0)?(c[p>>2]=pp(c[n>>2]|0,12)|0,(c[p>>2]|0)==0):0)c[p>>2]=qp(c[c[n>>2]>>2]|0,12)|0;if(!(c[p>>2]|0)){z=c[p>>2]|0;i=s;return z|0}ap(c[c[n>>2]>>2]|0);c[c[n>>2]>>2]=0;if((c[p>>2]|0)==18){z=c[o>>2]|0;c[q>>2]=12;zk(z,24570,q);c[p>>2]=1;z=c[p>>2]|0;i=s;return z|0}if((c[p>>2]|0)!=1){z=c[p>>2]|0;i=s;return z|0}z=c[o>>2]|0;c[r>>2]=c[m>>2];zk(z,24622,r);z=c[p>>2]|0;i=s;return z|0}function dp(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+48|0;b=n+36|0;o=n+32|0;m=n+28|0;j=n+24|0;h=n+20|0;e=n+16|0;f=n+12|0;g=n+8|0;k=n+4|0;l=n;c[b>>2]=a;c[o>>2]=c[c[b>>2]>>2];c[m>>2]=0;c[j>>2]=0;c[h>>2]=0;ep(c[b>>2]|0,c[(c[b>>2]|0)+12>>2]|0,j,h,m);do if((c[m>>2]|0)==0&(c[j>>2]|0)>1?(d[(c[o>>2]|0)+228>>0]|0|0)!=0:0){c[e>>2]=Id(((c[j>>2]|0)*24|0)+(c[h>>2]<<2<<1)|0)|0;c[f>>2]=(c[e>>2]|0)+((c[j>>2]|0)*24|0);if(!(c[e>>2]|0)){c[m>>2]=7;break}c[k>>2]=c[e>>2];c[l>>2]=c[f>>2];fp(c[b>>2]|0,0,c[(c[b>>2]|0)+12>>2]|0,k,l,m);c[j>>2]=((c[k>>2]|0)-(c[e>>2]|0)|0)/24|0;c[h>>2]=((c[l>>2]|0)-(c[f>>2]|0)|0)/4|0;a:do if(!(c[m>>2]|0)){c[m>>2]=gp(c[b>>2]|0,0,c[e>>2]|0,c[j>>2]|0)|0;c[g>>2]=0;while(1){if(c[m>>2]|0)break a;if((c[g>>2]|0)>=(c[h>>2]|0))break a;c[m>>2]=gp(c[b>>2]|0,c[(c[f>>2]|0)+(c[g>>2]<<2)>>2]|0,c[e>>2]|0,c[j>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+1}}while(0);Kd(c[e>>2]|0)}while(0);hp(c[b>>2]|0,c[(c[b>>2]|0)+12>>2]|0,m);i=n;return c[m>>2]|0}function ep(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+32|0;n=q+28|0;h=q+24|0;j=q+20|0;o=q+16|0;k=q+12|0;l=q+8|0;m=q+4|0;p=q;c[g>>2]=a;c[n>>2]=b;c[h>>2]=d;c[j>>2]=e;c[o>>2]=f;if(!(c[n>>2]|0)){i=q;return}if(c[c[o>>2]>>2]|0){i=q;return}a=c[n>>2]|0;if((c[c[n>>2]>>2]|0)!=5){p=c[j>>2]|0;c[p>>2]=(c[p>>2]|0)+((c[a>>2]|0)==4&1);ep(c[g>>2]|0,c[(c[n>>2]|0)+12>>2]|0,c[h>>2]|0,c[j>>2]|0,c[o>>2]|0);ep(c[g>>2]|0,c[(c[n>>2]|0)+16>>2]|0,c[h>>2]|0,c[j>>2]|0,c[o>>2]|0);i=q;return}c[l>>2]=c[(c[a+20>>2]|0)+64>>2];j=c[h>>2]|0;c[j>>2]=(c[j>>2]|0)+(c[l>>2]|0);c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[l>>2]|0)){a=9;break}c[m>>2]=(c[(c[n>>2]|0)+20>>2]|0)+72+((c[k>>2]|0)*24|0);c[p>>2]=mp(c[g>>2]|0,c[c[m>>2]>>2]|0,c[(c[m>>2]|0)+4>>2]|0,c[(c[m>>2]|0)+8>>2]|0,(c[m>>2]|0)+20|0)|0;if(c[p>>2]|0){a=7;break}c[k>>2]=(c[k>>2]|0)+1}if((a|0)==7){c[c[o>>2]>>2]=c[p>>2];i=q;return}else if((a|0)==9){c[(c[(c[n>>2]|0)+20>>2]|0)+44>>2]=-1;i=q;return}}function fp(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;l=r+32|0;m=r+28|0;n=r+24|0;o=r+20|0;p=r+16|0;q=r+12|0;j=r+8|0;h=r+4|0;k=r;c[l>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;if(c[c[q>>2]>>2]|0){i=r;return}d=c[n>>2]|0;if((c[c[n>>2]>>2]|0)==5){c[j>>2]=c[d+20>>2];c[h>>2]=0;while(1){if(c[c[q>>2]>>2]|0){a=13;break}if((c[h>>2]|0)>=(c[(c[j>>2]|0)+64>>2]|0)){a=13;break}n=c[o>>2]|0;p=c[n>>2]|0;c[n>>2]=p+24;c[k>>2]=p;c[c[k>>2]>>2]=c[j>>2];c[(c[k>>2]|0)+4>>2]=c[h>>2];c[(c[k>>2]|0)+12>>2]=c[m>>2];c[(c[k>>2]|0)+8>>2]=(c[j>>2]|0)+72+((c[h>>2]|0)*24|0);c[(c[k>>2]|0)+20>>2]=c[(c[j>>2]|0)+68>>2];p=lp(c[l>>2]|0,c[(c[(c[k>>2]|0)+8>>2]|0)+20>>2]|0,(c[k>>2]|0)+16|0)|0;c[c[q>>2]>>2]=p;c[h>>2]=(c[h>>2]|0)+1}if((a|0)==13){i=r;return}}if((c[d>>2]|0)==2){i=r;return}if((c[c[n>>2]>>2]|0)==4){c[m>>2]=c[(c[n>>2]|0)+12>>2];c[c[c[p>>2]>>2]>>2]=c[m>>2];k=c[p>>2]|0;c[k>>2]=(c[k>>2]|0)+4}fp(c[l>>2]|0,c[m>>2]|0,c[(c[n>>2]|0)+12>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0);if((c[c[n>>2]>>2]|0)==4){c[m>>2]=c[(c[n>>2]|0)+16>>2];c[c[c[p>>2]>>2]>>2]=c[m>>2];k=c[p>>2]|0;c[k>>2]=(c[k>>2]|0)+4}fp(c[l>>2]|0,c[m>>2]|0,c[(c[n>>2]|0)+16>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0);i=r;return}function gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,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=i;i=i+80|0;f=B+76|0;g=B+72|0;h=B+68|0;j=B+64|0;k=B+60|0;w=B+56|0;o=B+52|0;z=B+48|0;m=B+44|0;s=B+40|0;t=B+36|0;r=B+32|0;q=B+28|0;l=B+24|0;v=B+20|0;x=B+16|0;y=B+12|0;p=B+8|0;u=B+4|0;n=B;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[w>>2]=c[c[g>>2]>>2];c[o>>2]=0;c[z>>2]=0;c[s>>2]=0;c[t>>2]=0;c[r>>2]=0;c[q>>2]=1;if(c[(c[w>>2]|0)+40>>2]|0){c[f>>2]=0;A=c[f>>2]|0;i=B;return A|0}c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[k>>2]|0))break;if((c[(c[j>>2]|0)+((c[m>>2]|0)*24|0)+12>>2]|0)==(c[h>>2]|0)){c[s>>2]=(c[s>>2]|0)+(c[(c[j>>2]|0)+((c[m>>2]|0)*24|0)+16>>2]|0);c[t>>2]=(c[t>>2]|0)+1}c[m>>2]=(c[m>>2]|0)+1}if((c[s>>2]|0)==0|(c[t>>2]|0)<2){c[f>>2]=0;A=c[f>>2]|0;i=B;return A|0}c[z>>2]=ip(c[g>>2]|0,o)|0;c[m>>2]=0;while(1){if(!((c[m>>2]|0)<(c[t>>2]|0)?(c[z>>2]|0)==0:0))break;c[v>>2]=0;c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[k>>2]|0))break;do if((c[(c[j>>2]|0)+((c[l>>2]|0)*24|0)+8>>2]|0)!=0?(c[(c[j>>2]|0)+((c[l>>2]|0)*24|0)+12>>2]|0)==(c[h>>2]|0):0){if((c[v>>2]|0)!=0?(c[(c[j>>2]|0)+((c[l>>2]|0)*24|0)+16>>2]|0)>=(c[(c[v>>2]|0)+16>>2]|0):0)break;c[v>>2]=(c[j>>2]|0)+((c[l>>2]|0)*24|0)}while(0);c[l>>2]=(c[l>>2]|0)+1}if((c[m>>2]|0)!=0?(c[(c[v>>2]|0)+16>>2]|0)>=(_(((c[r>>2]|0)+((c[q>>2]|0)/4|0)-1|0)/((c[q>>2]|0)/4|0|0)|0,c[o>>2]|0)|0):0){c[x>>2]=c[(c[v>>2]|0)+8>>2];c[z>>2]=jp(c[g>>2]|0,c[x>>2]|0,c[(c[v>>2]|0)+20>>2]|0)|0;hn(c[(c[x>>2]|0)+20>>2]|0);c[(c[x>>2]|0)+20>>2]=0}else A=23;do if((A|0)==23){A=0;if((c[m>>2]|0)<12)c[q>>2]=c[q>>2]<<2;if(c[m>>2]|0){if((c[(c[c[v>>2]>>2]|0)+64>>2]|0)<=1)break;if((c[m>>2]|0)==((c[t>>2]|0)-1|0))break}c[y>>2]=c[(c[v>>2]|0)+8>>2];c[p>>2]=0;c[u>>2]=0;c[z>>2]=an(c[w>>2]|0,c[y>>2]|0,c[(c[v>>2]|0)+20>>2]|0,p,u)|0;if(!(c[z>>2]|0))c[z>>2]=bn(c[w>>2]|0,c[c[v>>2]>>2]|0,c[(c[v>>2]|0)+4>>2]|0,c[u>>2]|0,c[p>>2]|0)|0;if(!(c[z>>2]|0)){c[n>>2]=kp(c[c[c[v>>2]>>2]>>2]|0,c[(c[c[v>>2]>>2]|0)+4>>2]|0)|0;if((c[m>>2]|0)!=0?(c[n>>2]|0)>=(c[r>>2]|0):0)break;c[r>>2]=c[n>>2]}}while(0);c[(c[v>>2]|0)+8>>2]=0;c[m>>2]=(c[m>>2]|0)+1}c[f>>2]=c[z>>2];A=c[f>>2]|0;i=B;return A|0}function hp(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+16|0;l=m+12|0;h=m+8|0;k=m+4|0;j=m;c[g>>2]=b;c[l>>2]=e;c[h>>2]=f;if(!(c[l>>2]|0)){i=m;return}if(c[c[h>>2]>>2]|0){i=m;return}if((c[c[l>>2]>>2]|0)!=5){hp(c[g>>2]|0,c[(c[l>>2]|0)+12>>2]|0,c[h>>2]|0);hp(c[g>>2]|0,c[(c[l>>2]|0)+16>>2]|0,c[h>>2]|0);if(d[(c[(c[l>>2]|0)+12>>2]|0)+34>>0]|0)g=(d[(c[(c[l>>2]|0)+16>>2]|0)+34>>0]|0|0)!=0;else g=0;a[(c[l>>2]|0)+34>>0]=g&1;i=m;return}c[k>>2]=c[(c[(c[l>>2]|0)+20>>2]|0)+64>>2];if(c[k>>2]|0){c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[k>>2]|0))break;if(!(c[(c[(c[l>>2]|0)+20>>2]|0)+72+((c[j>>2]|0)*24|0)+16>>2]|0))break;c[j>>2]=(c[j>>2]|0)+1}a[(c[l>>2]|0)+34>>0]=(c[j>>2]|0)==(c[k>>2]|0)}l=Zm(c[g>>2]|0,1,c[(c[l>>2]|0)+20>>2]|0)|0;c[c[h>>2]>>2]=l;i=m;return}function ip(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0; +o=i;i=i+48|0;d=o+44|0;e=o+40|0;f=o+36|0;n=o+32|0;k=o+28|0;m=o+24|0;j=o+8|0;h=o;l=o+20|0;g=o+16|0;c[e>>2]=a;c[f>>2]=b;if(!(c[(c[e>>2]|0)+60>>2]|0)){c[k>>2]=c[c[e>>2]>>2];b=j;c[b>>2]=0;c[b+4>>2]=0;b=h;c[b>>2]=0;c[b+4>>2]=0;c[n>>2]=Jn(c[k>>2]|0,m)|0;if(c[n>>2]|0){c[d>>2]=c[n>>2];n=c[d>>2]|0;i=o;return n|0}c[g>>2]=Ae(c[m>>2]|0,0)|0;b=Be(c[m>>2]|0,0)|0;c[l>>2]=(c[g>>2]|0)+b;b=Ul(c[g>>2]|0,j)|0;c[g>>2]=(c[g>>2]|0)+b;while(1){if((c[g>>2]|0)>>>0>=(c[l>>2]|0)>>>0)break;b=Ul(c[g>>2]|0,h)|0;c[g>>2]=(c[g>>2]|0)+b}l=j;b=h;if((c[l>>2]|0)==0&(c[l+4>>2]|0)==0|(c[b>>2]|0)==0&(c[b+4>>2]|0)==0){Zd(c[m>>2]|0)|0;c[d>>2]=267;n=c[d>>2]|0;i=o;return n|0}a=j;b=c[a+4>>2]|0;l=(c[e>>2]|0)+64|0;c[l>>2]=c[a>>2];c[l+4>>2]=b;l=h;b=j;b=pR(c[l>>2]|0,c[l+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;l=c[(c[k>>2]|0)+236>>2]|0;l=gR(b|0,C|0,l|0,((l|0)<0)<<31>>31|0)|0;b=c[(c[k>>2]|0)+236>>2]|0;b=pR(l|0,C|0,b|0,((b|0)<0)<<31>>31|0)|0;c[(c[e>>2]|0)+60>>2]=b;c[n>>2]=Zd(c[m>>2]|0)|0;if(c[n>>2]|0){c[d>>2]=c[n>>2];n=c[d>>2]|0;i=o;return n|0}}c[c[f>>2]>>2]=c[(c[e>>2]|0)+60>>2];c[d>>2]=0;n=c[d>>2]|0;i=o;return n|0}function jp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=Id(16)|0;if(c[j>>2]|0){b=c[j>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[c[j>>2]>>2]=c[g>>2];c[(c[j>>2]|0)+8>>2]=c[(c[f>>2]|0)+24>>2];c[(c[j>>2]|0)+4>>2]=c[h>>2];c[(c[f>>2]|0)+24>>2]=c[j>>2];c[(c[g>>2]|0)+16>>2]=c[j>>2];c[e>>2]=0;b=c[e>>2]|0;i=k;return b|0}else{c[e>>2]=7;b=c[e>>2]|0;i=k;return b|0}return 0}function kp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;h=k+8|0;g=k+4|0;j=k;c[e>>2]=b;c[f>>2]=d;c[h>>2]=0;if(!(c[e>>2]|0)){j=c[h>>2]|0;i=k;return j|0}c[g>>2]=(c[e>>2]|0)+(c[f>>2]|0);c[j>>2]=c[e>>2];while(1){if((c[j>>2]|0)>>>0>=(c[g>>2]|0)>>>0)break;c[h>>2]=(c[h>>2]|0)+1;do{d=c[j>>2]|0;c[j>>2]=d+1}while((a[d>>0]&128|0)!=0);Zl(0,j)}j=c[h>>2]|0;i=k;return j|0}function lp(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+48|0;r=q+44|0;f=q+40|0;n=q+36|0;k=q+32|0;o=q+28|0;g=q+24|0;p=q+20|0;m=q+16|0;l=q+12|0;h=q;j=q+8|0;c[r>>2]=a;c[f>>2]=b;c[n>>2]=e;c[k>>2]=c[c[r>>2]>>2];c[o>>2]=0;c[p>>2]=0;c[m>>2]=c[(c[k>>2]|0)+236>>2];c[g>>2]=0;while(1){if(c[p>>2]|0){f=13;break}if((c[g>>2]|0)>=(c[(c[f>>2]|0)+4>>2]|0)){f=13;break}c[l>>2]=c[(c[c[f>>2]>>2]|0)+(c[g>>2]<<2)>>2];a:do if((c[(c[l>>2]|0)+56>>2]|0)==0?(d[(c[l>>2]|0)+5>>0]|0|0)==0:0){b=(c[l>>2]|0)+8|0;e=c[b+4>>2]|0;r=h;c[r>>2]=c[b>>2];c[r+4>>2]=e;while(1){e=h;a=c[e+4>>2]|0;r=(c[l>>2]|0)+16|0;b=c[r+4>>2]|0;if(!((a|0)<(b|0)|((a|0)==(b|0)?(c[e>>2]|0)>>>0<=(c[r>>2]|0)>>>0:0)))break a;r=h;c[p>>2]=am(c[k>>2]|0,c[r>>2]|0,c[r+4>>2]|0,0,j,0)|0;if(c[p>>2]|0)break a;if(((c[j>>2]|0)+35|0)>(c[m>>2]|0))c[o>>2]=(c[o>>2]|0)+(((c[j>>2]|0)+34|0)/(c[m>>2]|0)|0);e=h;e=gR(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;r=h;c[r>>2]=e;c[r+4>>2]=C}}while(0);c[g>>2]=(c[g>>2]|0)+1}if((f|0)==13){c[c[n>>2]>>2]=c[o>>2];i=q;return c[p>>2]|0}return 0}function mp(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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r+36|0;h=r+32|0;j=r+28|0;k=r+24|0;l=r+20|0;p=r+16|0;q=r+12|0;n=r+8|0;m=r+4|0;o=r;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[q>>2]=7;c[p>>2]=Id(56)|0;if(!(c[p>>2]|0)){f=c[p>>2]|0;b=c[l>>2]|0;c[b>>2]=f;b=c[q>>2]|0;i=r;return b|0}c[m>>2]=0;c[o>>2]=c[c[g>>2]>>2];a:do if(c[k>>2]|0){c[n>>2]=1;while(1){if(c[m>>2]|0)break;if((c[n>>2]|0)>=(c[(c[o>>2]|0)+248>>2]|0))break;if((c[(c[(c[o>>2]|0)+252>>2]|0)+((c[n>>2]|0)*24|0)>>2]|0)==(c[j>>2]|0)){c[m>>2]=1;c[q>>2]=kl(c[o>>2]|0,c[(c[g>>2]|0)+16>>2]|0,c[n>>2]|0,-2,c[h>>2]|0,c[j>>2]|0,0,0,c[p>>2]|0)|0;c[(c[p>>2]|0)+36>>2]=1}c[n>>2]=(c[n>>2]|0)+1}c[n>>2]=1;while(1){if(c[m>>2]|0)break a;if((c[n>>2]|0)>=(c[(c[o>>2]|0)+248>>2]|0))break a;if((c[(c[(c[o>>2]|0)+252>>2]|0)+((c[n>>2]|0)*24|0)>>2]|0)==((c[j>>2]|0)+1|0)?(c[m>>2]=1,c[q>>2]=kl(c[o>>2]|0,c[(c[g>>2]|0)+16>>2]|0,c[n>>2]|0,-2,c[h>>2]|0,c[j>>2]|0,1,0,c[p>>2]|0)|0,(c[q>>2]|0)==0):0)c[q>>2]=np(c[o>>2]|0,c[(c[g>>2]|0)+16>>2]|0,c[h>>2]|0,c[j>>2]|0,c[p>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+1}}while(0);if(c[m>>2]|0){f=c[p>>2]|0;b=c[l>>2]|0;c[b>>2]=f;b=c[q>>2]|0;i=r;return b|0}c[q>>2]=kl(c[o>>2]|0,c[(c[g>>2]|0)+16>>2]|0,0,-2,c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,0,c[p>>2]|0)|0;c[(c[p>>2]|0)+36>>2]=((c[k>>2]|0)!=0^1)&1;f=c[p>>2]|0;b=c[l>>2]|0;c[b>>2]=f;b=c[q>>2]|0;i=r;return b|0}function np(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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;m=g+16|0;l=g+12|0;k=g+8|0;j=g+4|0;h=g;c[m>>2]=a;c[l>>2]=b;c[k>>2]=d;c[j>>2]=e;c[h>>2]=f;d=dm(c[m>>2]|0,c[l>>2]|0,0,-2,c[k>>2]|0,c[j>>2]|0,0,0,c[h>>2]|0)|0;i=g;return d|0}function op(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;y=i;i=i+96|0;l=y+80|0;m=y+76|0;n=y+72|0;o=y+68|0;p=y+64|0;q=y+60|0;r=y+56|0;s=y+52|0;t=y+48|0;u=y+44|0;v=y+40|0;w=y+36|0;x=y;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]=j;c[u>>2]=k;d=x;e=d+36|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[x>>2]=c[m>>2];c[x+4>>2]=c[n>>2];c[x+8>>2]=c[o>>2];c[x+16>>2]=c[q>>2];c[x+20>>2]=c[r>>2];c[x+12>>2]=c[p>>2];if(!(c[s>>2]|0)){c[c[u>>2]>>2]=0;c[l>>2]=0;x=c[l>>2]|0;i=y;return x|0}if((c[t>>2]|0)<0)c[t>>2]=BQ(c[s>>2]|0)|0;c[w>>2]=rp(x,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,v)|0;if((c[w>>2]|0)==0?(c[x+32>>2]|0)!=0:0)c[w>>2]=1;c[l>>2]=c[w>>2];x=c[l>>2]|0;i=y;return x|0}function pp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+64|0;f=t+52|0;g=t+48|0;r=t+44|0;q=t+40|0;o=t+36|0;j=t+32|0;h=t+28|0;k=t+24|0;m=t+20|0;l=t+16|0;p=t+12|0;n=t+8|0;d=t+4|0;e=t;c[f>>2]=a;c[g>>2]=b;c[r>>2]=0;c[q>>2]=c[c[f>>2]>>2];c[o>>2]=0;c[j>>2]=c[c[q>>2]>>2];if(!(c[g>>2]|0))c[r>>2]=1;do if(!(c[r>>2]|0)){if(!((c[j>>2]|0)==3|(c[j>>2]|0)==4)){if((c[j>>2]|0)!=2)break;c[d>>2]=c[(c[q>>2]|0)+12>>2];c[e>>2]=c[(c[q>>2]|0)+16>>2];c[(c[q>>2]|0)+12>>2]=0;c[(c[q>>2]|0)+16>>2]=0;c[(c[d>>2]|0)+8>>2]=0;c[(c[e>>2]|0)+8>>2]=0;c[r>>2]=pp(d,(c[g>>2]|0)-1|0)|0;if(!(c[r>>2]|0))c[r>>2]=pp(e,(c[g>>2]|0)-1|0)|0;if(c[r>>2]|0){ap(c[e>>2]|0);ap(c[d>>2]|0);break}else{c[(c[q>>2]|0)+12>>2]=c[d>>2];c[(c[d>>2]|0)+8>>2]=c[q>>2];c[(c[q>>2]|0)+16>>2]=c[e>>2];c[(c[e>>2]|0)+8>>2]=c[q>>2];break}}c[h>>2]=Id(c[g>>2]<<2)|0;if(!(c[h>>2]|0))c[r>>2]=7;else kR(c[h>>2]|0,0,c[g>>2]<<2|0)|0;if(!(c[r>>2]|0)){c[m>>2]=c[q>>2];while(1){if((c[c[m>>2]>>2]|0)!=(c[j>>2]|0))break;c[m>>2]=c[(c[m>>2]|0)+12>>2]}while(1){c[p>>2]=c[(c[m>>2]|0)+8>>2];c[(c[m>>2]|0)+8>>2]=0;if(c[p>>2]|0)c[(c[p>>2]|0)+12>>2]=0;else c[q>>2]=0;c[r>>2]=pp(m,(c[g>>2]|0)-1|0)|0;if(c[r>>2]|0)break;c[l>>2]=0;while(1){if(!(c[m>>2]|0))break;if((c[l>>2]|0)>=(c[g>>2]|0))break;if(!(c[(c[h>>2]|0)+(c[l>>2]<<2)>>2]|0)){c[(c[h>>2]|0)+(c[l>>2]<<2)>>2]=c[m>>2];c[m>>2]=0}else{c[(c[o>>2]|0)+12>>2]=c[(c[h>>2]|0)+(c[l>>2]<<2)>>2];c[(c[o>>2]|0)+16>>2]=c[m>>2];c[(c[(c[o>>2]|0)+12>>2]|0)+8>>2]=c[o>>2];c[(c[(c[o>>2]|0)+16>>2]|0)+8>>2]=c[o>>2];c[m>>2]=c[o>>2];c[o>>2]=c[(c[o>>2]|0)+8>>2];c[(c[m>>2]|0)+8>>2]=0;c[(c[h>>2]|0)+(c[l>>2]<<2)>>2]=0}c[l>>2]=(c[l>>2]|0)+1}if(c[m>>2]|0){s=24;break}if(!(c[p>>2]|0))break;c[m>>2]=c[(c[p>>2]|0)+16>>2];while(1){if((c[c[m>>2]>>2]|0)!=(c[j>>2]|0))break;c[m>>2]=c[(c[m>>2]|0)+12>>2]}c[(c[(c[p>>2]|0)+16>>2]|0)+8>>2]=c[(c[p>>2]|0)+8>>2];b=c[(c[p>>2]|0)+16>>2]|0;if(c[(c[p>>2]|0)+8>>2]|0)c[(c[(c[p>>2]|0)+8>>2]|0)+12>>2]=b;else c[q>>2]=b;c[(c[p>>2]|0)+8>>2]=c[o>>2];c[o>>2]=c[p>>2]}if((s|0)==24){ap(c[m>>2]|0);c[r>>2]=18}a:do if(!(c[r>>2]|0)){c[m>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[g>>2]|0))break;do if(c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)if(!(c[m>>2]|0)){c[m>>2]=c[(c[h>>2]|0)+(c[k>>2]<<2)>>2];c[(c[m>>2]|0)+8>>2]=0;break}else{c[(c[o>>2]|0)+16>>2]=c[m>>2];c[(c[o>>2]|0)+12>>2]=c[(c[h>>2]|0)+(c[k>>2]<<2)>>2];c[(c[(c[o>>2]|0)+12>>2]|0)+8>>2]=c[o>>2];c[(c[(c[o>>2]|0)+16>>2]|0)+8>>2]=c[o>>2];c[m>>2]=c[o>>2];c[o>>2]=c[(c[o>>2]|0)+8>>2];c[(c[m>>2]|0)+8>>2]=0;break}while(0);c[k>>2]=(c[k>>2]|0)+1}c[q>>2]=c[m>>2]}else{c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[g>>2]|0))break;ap(c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1}while(1){s=c[o>>2]|0;c[n>>2]=s;if(!s)break a;c[o>>2]=c[(c[n>>2]|0)+8>>2];Kd(c[n>>2]|0)}}while(0);Kd(c[h>>2]|0)}}while(0);if(!(c[r>>2]|0)){q=c[q>>2]|0;s=c[f>>2]|0;c[s>>2]=q;s=c[r>>2]|0;i=t;return s|0}ap(c[q>>2]|0);c[q>>2]=0;q=c[q>>2]|0;s=c[f>>2]|0;c[s>>2]=q;s=c[r>>2]|0;i=t;return s|0}function qp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;do if(c[d>>2]|0){if((c[e>>2]|0)<0){c[f>>2]=18;break}c[f>>2]=qp(c[(c[d>>2]|0)+12>>2]|0,(c[e>>2]|0)-1|0)|0;if(!(c[f>>2]|0))c[f>>2]=qp(c[(c[d>>2]|0)+16>>2]|0,(c[e>>2]|0)-1|0)|0}while(0);i=g;return c[f>>2]|0}function rp(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,j=0,k=0,l=0,m=0,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=i;i=i+80|0;g=x+64|0;y=x+60|0;o=x+56|0;p=x+52|0;q=x+48|0;v=x+44|0;m=x+40|0;u=x+36|0;s=x+32|0;n=x+28|0;w=x+24|0;r=x+20|0;t=x+16|0;k=x+12|0;j=x+8|0;h=x+4|0;l=x;c[g>>2]=a;c[y>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[v>>2]=0;c[m>>2]=0;c[u>>2]=0;c[s>>2]=c[o>>2];c[n>>2]=c[y>>2];c[w>>2]=0;c[r>>2]=1;while(1){if(c[w>>2]|0){d=25;break}c[t>>2]=0;c[k>>2]=0;c[w>>2]=sp(c[g>>2]|0,c[n>>2]|0,c[s>>2]|0,t,k)|0;if((c[w>>2]|0)==0&(c[t>>2]|0)!=0){c[h>>2]=c[c[t>>2]>>2];if((c[h>>2]|0)==5)d=1;else d=(c[(c[t>>2]|0)+12>>2]|0)!=0;c[j>>2]=d&1;if((c[j>>2]|0)==0&(c[r>>2]|0)!=0){d=7;break}if(!((c[j>>2]|0)==0|(c[r>>2]|0)!=0)){c[l>>2]=tp(48)|0;if(!(c[l>>2]|0)){d=10;break}c[c[l>>2]>>2]=3;up(v,c[m>>2]|0,c[l>>2]|0);c[m>>2]=c[l>>2]}if(c[m>>2]|0){if(!((c[h>>2]|0)!=1|(c[j>>2]|0)!=0)?(c[c[m>>2]>>2]|0)!=5:0){d=17;break}if((c[h>>2]|0)!=5&(c[j>>2]|0)!=0?(c[c[m>>2]>>2]|0)==1:0){d=17;break}}do if(c[j>>2]|0){d=c[t>>2]|0;if(c[v>>2]|0){c[(c[m>>2]|0)+16>>2]=d;c[(c[t>>2]|0)+8>>2]=c[m>>2];break}else{c[v>>2]=d;break}}else up(v,c[m>>2]|0,c[t>>2]|0);while(0);c[r>>2]=((c[j>>2]|0)!=0^1)&1;c[m>>2]=c[t>>2]}c[s>>2]=(c[s>>2]|0)-(c[k>>2]|0);c[n>>2]=(c[n>>2]|0)+(c[k>>2]|0)}if((d|0)==7){ap(c[t>>2]|0);c[w>>2]=1}else if((d|0)==10){ap(c[t>>2]|0);c[w>>2]=7}else if((d|0)==17){ap(c[t>>2]|0);c[w>>2]=1}else if((d|0)==25){if((c[w>>2]|0)==101&(c[v>>2]|0)!=0&(c[r>>2]|0)!=0)c[w>>2]=1;if((c[w>>2]|0)==101)c[w>>2]=0;c[c[q>>2]>>2]=(c[o>>2]|0)-(c[s>>2]|0)}if(!(c[w>>2]|0)){v=c[v>>2]|0;y=c[p>>2]|0;c[y>>2]=v;y=c[w>>2]|0;i=x;return y|0}ap(c[v>>2]|0);ap(c[u>>2]|0);c[v>>2]=0;v=c[v>>2]|0;y=c[p>>2]|0;c[y>>2]=v;y=c[w>>2]|0;i=x;return y|0}function sp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+80|0;p=E+72|0;q=E+68|0;r=E+64|0;s=E+60|0;t=E+56|0;u=E+52|0;x=E+48|0;v=E+44|0;w=E+40|0;A=E+36|0;o=E+32|0;B=E+28|0;y=E+24|0;n=E+20|0;m=E+16|0;l=E+12|0;j=E+76|0;k=E+8|0;C=E+4|0;z=E;c[q>>2]=b;c[r>>2]=e;c[s>>2]=f;c[t>>2]=g;c[u>>2]=h;c[o>>2]=0;c[B>>2]=c[r>>2];c[y>>2]=c[s>>2];c[(c[q>>2]|0)+24>>2]=0;while(1){if((c[y>>2]|0)>0)b=(wp(a[c[B>>2]>>0]|0)|0)!=0;else b=0;f=c[y>>2]|0;if(!b)break;c[y>>2]=f+-1;c[B>>2]=(c[B>>2]|0)+1}if(!f){c[p>>2]=101;D=c[p>>2]|0;i=E;return D|0}c[x>>2]=0;while(1){if((c[x>>2]|0)>=4)break;c[n>>2]=2068+(c[x>>2]<<3);if(((d[(c[n>>2]|0)+5>>0]&-2|0)==0?(c[y>>2]|0)>=(d[(c[n>>2]|0)+4>>0]|0):0)?0==(vQ(c[B>>2]|0,c[c[n>>2]>>2]|0,d[(c[n>>2]|0)+4>>0]|0)|0):0){c[m>>2]=10;c[l>>2]=d[(c[n>>2]|0)+4>>0];a:do if((((d[(c[n>>2]|0)+6>>0]|0)==1?(a[(c[B>>2]|0)+4>>0]|0)==47:0)?(a[(c[B>>2]|0)+5>>0]|0)>=48:0)?(a[(c[B>>2]|0)+5>>0]|0)<=57:0){c[m>>2]=0;c[l>>2]=5;while(1){if((a[(c[B>>2]|0)+(c[l>>2]|0)>>0]|0)<48)break a;if((a[(c[B>>2]|0)+(c[l>>2]|0)>>0]|0)>57)break a;c[m>>2]=((c[m>>2]|0)*10|0)+((a[(c[B>>2]|0)+(c[l>>2]|0)>>0]|0)-48);c[l>>2]=(c[l>>2]|0)+1}}while(0);a[j>>0]=a[(c[B>>2]|0)+(c[l>>2]|0)>>0]|0;if(wp(a[j>>0]|0)|0){D=26;break}if((a[j>>0]|0)==34){D=26;break}if((a[j>>0]|0)==40){D=26;break}if((a[j>>0]|0)==41){D=26;break}if(!(a[j>>0]|0)){D=26;break}}c[x>>2]=(c[x>>2]|0)+1}if((D|0)==26){c[o>>2]=tp(48)|0;if(c[o>>2]|0){c[c[o>>2]>>2]=d[(c[n>>2]|0)+6>>0];c[(c[o>>2]|0)+4>>2]=c[m>>2];c[c[t>>2]>>2]=c[o>>2];c[c[u>>2]>>2]=(c[B>>2]|0)-(c[r>>2]|0)+(c[l>>2]|0);c[p>>2]=0;D=c[p>>2]|0;i=E;return D|0}else{c[p>>2]=7;D=c[p>>2]|0;i=E;return D|0}}if((a[c[B>>2]>>0]|0)==34){c[x>>2]=1;while(1){if((c[x>>2]|0)>=(c[y>>2]|0))break;if((a[(c[B>>2]|0)+(c[x>>2]|0)>>0]|0)==34)break;c[x>>2]=(c[x>>2]|0)+1}c[c[u>>2]>>2]=(c[B>>2]|0)-(c[r>>2]|0)+(c[x>>2]|0)+1;if((c[x>>2]|0)==(c[y>>2]|0)){c[p>>2]=1;D=c[p>>2]|0;i=E;return D|0}else{c[p>>2]=xp(c[q>>2]|0,(c[B>>2]|0)+1|0,(c[x>>2]|0)-1|0,c[t>>2]|0)|0;D=c[p>>2]|0;i=E;return D|0}}if((a[c[B>>2]>>0]|0)==40){c[k>>2]=0;D=(c[q>>2]|0)+32|0;c[D>>2]=(c[D>>2]|0)+1;c[A>>2]=rp(c[q>>2]|0,(c[B>>2]|0)+1|0,(c[y>>2]|0)-1|0,c[t>>2]|0,k)|0;if((c[A>>2]|0)==0?(c[c[t>>2]>>2]|0)==0:0)c[A>>2]=101;c[c[u>>2]>>2]=(c[B>>2]|0)-(c[r>>2]|0)+1+(c[k>>2]|0);c[p>>2]=c[A>>2];D=c[p>>2]|0;i=E;return D|0}f=c[q>>2]|0;if((a[c[B>>2]>>0]|0)==41){D=f+32|0;c[D>>2]=(c[D>>2]|0)+-1;c[c[u>>2]>>2]=(c[B>>2]|0)-(c[r>>2]|0)+1;c[c[t>>2]>>2]=0;c[p>>2]=101;D=c[p>>2]|0;i=E;return D|0}c[v>>2]=c[f+20>>2];c[w>>2]=0;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[(c[q>>2]|0)+16>>2]|0))break;c[C>>2]=c[(c[(c[q>>2]|0)+8>>2]|0)+(c[x>>2]<<2)>>2];c[z>>2]=BQ(c[C>>2]|0)|0;if(((c[y>>2]|0)>(c[z>>2]|0)?(a[(c[B>>2]|0)+(c[z>>2]|0)>>0]|0)==58:0)?(zd(c[C>>2]|0,c[B>>2]|0,c[z>>2]|0)|0)==0:0){D=50;break}c[x>>2]=(c[x>>2]|0)+1}if((D|0)==50){c[v>>2]=c[x>>2];c[w>>2]=(c[B>>2]|0)-(c[r>>2]|0)+(c[z>>2]|0)+1}c[A>>2]=yp(c[q>>2]|0,c[v>>2]|0,(c[r>>2]|0)+(c[w>>2]|0)|0,(c[s>>2]|0)-(c[w>>2]|0)|0,c[t>>2]|0,c[u>>2]|0)|0;D=c[u>>2]|0;c[D>>2]=(c[D>>2]|0)+(c[w>>2]|0);c[p>>2]=c[A>>2];D=c[p>>2]|0;i=E;return D|0}function tp(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=Id(c[b>>2]|0)|0;if(!(c[d>>2]|0)){d=c[d>>2]|0;i=e;return d|0}kR(c[d>>2]|0,0,c[b>>2]|0)|0;d=c[d>>2]|0;i=e;return d|0}function up(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;e=h+12|0;j=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[j>>2]=b;c[f>>2]=d;c[g>>2]=c[j>>2];while(1){if(c[(c[g>>2]|0)+8>>2]|0){d=vp(c[(c[g>>2]|0)+8>>2]|0)|0;d=(d|0)<=(vp(c[f>>2]|0)|0)}else d=0;b=c[(c[g>>2]|0)+8>>2]|0;if(!d)break;c[g>>2]=b}d=c[f>>2]|0;if(b){c[(c[(c[g>>2]|0)+8>>2]|0)+16>>2]=d;c[(c[f>>2]|0)+8>>2]=c[(c[g>>2]|0)+8>>2];e=c[g>>2]|0;j=c[f>>2]|0;j=j+12|0;c[j>>2]=e;f=c[f>>2]|0;j=c[g>>2]|0;j=j+8|0;c[j>>2]=f;i=h;return}else{c[c[e>>2]>>2]=d;e=c[g>>2]|0;j=c[f>>2]|0;j=j+12|0;c[j>>2]=e;f=c[f>>2]|0;j=c[g>>2]|0;j=j+8|0;c[j>>2]=f;i=h;return}}function vp(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return c[c[b>>2]>>2]|0}function wp(b){b=b|0;var c=0,d=0;d=i;i=i+16|0;c=d;a[c>>0]=b;if(((((a[c>>0]|0)!=32?(a[c>>0]|0)!=9:0)?(a[c>>0]|0)!=10:0)?(a[c>>0]|0)!=13:0)?(a[c>>0]|0)!=11:0)c=(a[c>>0]|0)==12;else c=1;i=d;return c&1|0}function xp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+96|0;g=D+88|0;h=D+84|0;j=D+80|0;k=D+76|0;l=D+72|0;E=D+68|0;w=D+64|0;y=D+60|0;u=D+56|0;v=D+52|0;B=D+48|0;s=D+44|0;t=D+36|0;p=D+32|0;A=D+28|0;r=D+24|0;m=D+20|0;n=D+16|0;o=D+12|0;x=D+8|0;q=D+4|0;z=D;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[E>>2]=c[c[h>>2]>>2];c[w>>2]=c[c[E>>2]>>2];c[u>>2]=0;c[v>>2]=0;c[B>>2]=0;c[s>>2]=0;c[D+40>>2]=144;c[t>>2]=0;c[y>>2]=wn(c[E>>2]|0,c[(c[h>>2]|0)+4>>2]|0,c[j>>2]|0,c[k>>2]|0,v)|0;a:do if(!(c[y>>2]|0)){c[p>>2]=0;while(1){if(c[y>>2]|0)break;c[r>>2]=0;c[m>>2]=0;c[n>>2]=0;c[o>>2]=0;c[y>>2]=Sb[c[(c[w>>2]|0)+20>>2]&255](c[v>>2]|0,A,r,m,n,o)|0;if(!(c[y>>2]|0)){c[u>>2]=zp(c[u>>2]|0,144+((c[p>>2]|0)*24|0)|0)|0;if(!(c[u>>2]|0))break a;c[B>>2]=zp(c[B>>2]|0,(c[s>>2]|0)+(c[r>>2]|0)|0)|0;if(!(c[B>>2]|0))break a;c[x>>2]=(c[u>>2]|0)+48+72+((c[p>>2]|0)*24|0);E=c[x>>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;iR((c[B>>2]|0)+(c[s>>2]|0)|0,c[A>>2]|0,c[r>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[r>>2]|0);c[(c[x>>2]|0)+4>>2]=c[r>>2];if((c[n>>2]|0)<(c[k>>2]|0))e=(a[(c[j>>2]|0)+(c[n>>2]|0)>>0]|0)==42;else e=0;c[(c[x>>2]|0)+8>>2]=e&1;if((c[m>>2]|0)>0)e=(a[(c[j>>2]|0)+((c[m>>2]|0)-1)>>0]|0)==94;else e=0;c[(c[x>>2]|0)+12>>2]=e&1;c[t>>2]=(c[p>>2]|0)+1}c[p>>2]=(c[p>>2]|0)+1}Tb[c[(c[w>>2]|0)+16>>2]&255](c[v>>2]|0)|0;c[v>>2]=0;C=14}else C=14;while(0);do if((C|0)==14){if((c[y>>2]|0)==101){c[z>>2]=0;c[u>>2]=zp(c[u>>2]|0,144+((c[t>>2]|0)*24|0)+(c[s>>2]|0)|0)|0;if(!(c[u>>2]|0))break;kR(c[u>>2]|0,0,(c[u>>2]|0)+48+72-(c[u>>2]|0)|0)|0;c[c[u>>2]>>2]=5;c[(c[u>>2]|0)+20>>2]=(c[u>>2]|0)+48;c[(c[(c[u>>2]|0)+20>>2]|0)+68>>2]=c[(c[h>>2]|0)+20>>2];c[(c[(c[u>>2]|0)+20>>2]|0)+64>>2]=c[t>>2];c[z>>2]=(c[(c[u>>2]|0)+20>>2]|0)+72+((c[t>>2]|0)*24|0);if(c[B>>2]|0){iR(c[z>>2]|0,c[B>>2]|0,c[s>>2]|0)|0;Kd(c[B>>2]|0)}c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[(c[(c[u>>2]|0)+20>>2]|0)+64>>2]|0))break;c[(c[(c[u>>2]|0)+20>>2]|0)+72+((c[q>>2]|0)*24|0)>>2]=c[z>>2];c[z>>2]=(c[z>>2]|0)+(c[(c[(c[u>>2]|0)+20>>2]|0)+72+((c[q>>2]|0)*24|0)+4>>2]|0);c[q>>2]=(c[q>>2]|0)+1}c[y>>2]=0}c[c[l>>2]>>2]=c[u>>2];c[g>>2]=c[y>>2];E=c[g>>2]|0;i=D;return E|0}while(0);if(c[v>>2]|0)Tb[c[(c[w>>2]|0)+16>>2]&255](c[v>>2]|0)|0;Kd(c[B>>2]|0);Kd(c[u>>2]|0);c[c[l>>2]>>2]=0;c[g>>2]=7;E=c[g>>2]|0;i=D;return E|0}function yp(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,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=i;i=i+80|0;j=B+68|0;k=B+64|0;l=B+60|0;m=B+56|0;n=B+52|0;o=B+48|0;y=B+44|0;w=B+40|0;z=B+36|0;v=B+32|0;x=B+28|0;p=B+24|0;A=B+20|0;u=B+16|0;s=B+12|0;q=B+8|0;r=B+4|0;t=B;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[y>>2]=c[c[j>>2]>>2];c[w>>2]=c[c[y>>2]>>2];c[x>>2]=0;c[p>>2]=0;c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[m>>2]|0))break;if((a[(c[l>>2]|0)+(c[p>>2]|0)>>0]|0)==40)break;if((a[(c[l>>2]|0)+(c[p>>2]|0)>>0]|0)==41)break;if((a[(c[l>>2]|0)+(c[p>>2]|0)>>0]|0)==34)break;c[p>>2]=(c[p>>2]|0)+1}c[c[o>>2]>>2]=c[p>>2];c[z>>2]=wn(c[y>>2]|0,c[(c[j>>2]|0)+4>>2]|0,c[l>>2]|0,c[p>>2]|0,v)|0;if(c[z>>2]|0){e=c[x>>2]|0;A=c[n>>2]|0;c[A>>2]=e;A=c[z>>2]|0;i=B;return A|0}c[u>>2]=0;c[s>>2]=0;c[q>>2]=0;c[r>>2]=0;c[z>>2]=Sb[c[(c[w>>2]|0)+20>>2]&255](c[v>>2]|0,A,u,s,q,r)|0;if(c[z>>2]|0){if((c[p>>2]|0)!=0&(c[z>>2]|0)==101)c[z>>2]=0}else{c[t>>2]=144+(c[u>>2]|0);c[x>>2]=tp(c[t>>2]|0)|0;a:do if(c[x>>2]|0){c[c[x>>2]>>2]=5;c[(c[x>>2]|0)+20>>2]=(c[x>>2]|0)+48;c[(c[(c[x>>2]|0)+20>>2]|0)+64>>2]=1;c[(c[(c[x>>2]|0)+20>>2]|0)+68>>2]=c[k>>2];c[(c[(c[x>>2]|0)+20>>2]|0)+72+4>>2]=c[u>>2];c[(c[(c[x>>2]|0)+20>>2]|0)+72>>2]=(c[(c[x>>2]|0)+20>>2]|0)+96;iR(c[(c[(c[x>>2]|0)+20>>2]|0)+72>>2]|0,c[A>>2]|0,c[u>>2]|0)|0;if((c[q>>2]|0)<(c[m>>2]|0)?(a[(c[l>>2]|0)+(c[q>>2]|0)>>0]|0)==42:0){c[(c[(c[x>>2]|0)+20>>2]|0)+72+8>>2]=1;c[q>>2]=(c[q>>2]|0)+1}while(1){if(!((c[s>>2]|0)>0?(c[(c[j>>2]|0)+12>>2]|0)!=0:0))break a;if((a[(c[l>>2]|0)+((c[s>>2]|0)-1)>>0]|0)!=94)break a;c[(c[(c[x>>2]|0)+20>>2]|0)+72+12>>2]=1;c[s>>2]=(c[s>>2]|0)+-1}}else c[z>>2]=7;while(0);c[c[o>>2]>>2]=c[q>>2]}Tb[c[(c[w>>2]|0)+16>>2]&255](c[v>>2]|0)|0;e=c[x>>2]|0;A=c[n>>2]|0;c[A>>2]=e;A=c[z>>2]|0;i=B;return A|0}function zp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=a;c[g>>2]=b;c[e>>2]=Ld(c[d>>2]|0,c[g>>2]|0)|0;if(c[e>>2]|0){g=c[e>>2]|0;i=f;return g|0}Kd(c[d>>2]|0);g=c[e>>2]|0;i=f;return g|0}function Ap(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Bp(c[(c[d>>2]|0)+20>>2]|0);Kd(c[(c[d>>2]|0)+40>>2]|0);Kd(c[d>>2]|0);i=b;return}function Bp(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;if(!(c[d>>2]|0)){i=f;return}Kd(c[c[d>>2]>>2]|0);Pm(c[d>>2]|0);a=c[d>>2]|0;b=a+40|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[d>>2]|0)+64>>2]|0))break;hn(c[(c[d>>2]|0)+72+((c[e>>2]|0)*24|0)+20>>2]|0);c[(c[d>>2]|0)+72+((c[e>>2]|0)*24|0)+20>>2]=0;c[e>>2]=(c[e>>2]|0)+1}i=f;return}function Cp(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=c[(c[b>>2]|0)+24>>2];while(1){if(!(c[d>>2]|0))break;c[e>>2]=c[(c[d>>2]|0)+8>>2];el(c[(c[d>>2]|0)+12>>2]|0);Kd(c[d>>2]|0);c[d>>2]=c[e>>2]}c[(c[b>>2]|0)+24>>2]=0;i=f;return}function Dp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+8|0;f=g;c[e>>2]=a;a=f;c[a>>2]=b;c[a+4>>2]=d;if((lf()|0)<3008002){i=g;return}d=f;f=c[d+4>>2]|0;a=(c[e>>2]|0)+48|0;c[a>>2]=c[d>>2];c[a+4>>2]=f;i=g;return}function Ep(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if((lf()|0)<3008012){i=d;return}a=(c[b>>2]|0)+56|0;c[a>>2]=c[a>>2]|1;i=d;return}function Uv(f,g,h,j,k){f=f|0;g=g|0;h=h|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,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=i;i=i+304|0;F=ra+32|0;E=ra+16|0;D=ra;I=ra+288|0;J=ra+284|0;K=ra+280|0;L=ra+276|0;M=ra+272|0;S=ra+268|0;fa=ra+264|0;n=ra+260|0;m=ra+256|0;U=ra+252|0;aa=ra+248|0;Y=ra+244|0;qa=ra+240|0;da=ra+236|0;ba=ra+232|0;ca=ra+228|0;V=ra+224|0;W=ra+220|0;Z=ra+216|0;T=ra+212|0;oa=ra+208|0;Q=ra+204|0;P=ra+200|0;s=ra+180|0;t=ra+176|0;l=ra+172|0;pa=ra+295|0;R=ra+294|0;G=ra+293|0;r=ra+292|0;ea=ra+168|0;ka=ra+164|0;ia=ra+160|0;ma=ra+156|0;la=ra+152|0;na=ra+148|0;ja=ra+144|0;N=ra+140|0;$=ra+136|0;ga=ra+132|0;C=ra+128|0;A=ra+124|0;q=ra+120|0;w=ra+116|0;y=ra+112|0;z=ra+108|0;p=ra+104|0;B=ra+72|0;u=ra+68|0;x=ra+64|0;o=ra+60|0;v=ra+56|0;O=ra+52|0;X=ra+48|0;ha=ra+44|0;_=ra+40|0;c[I>>2]=f;c[J>>2]=g;c[K>>2]=h;c[L>>2]=j;c[M>>2]=k;c[ca>>2]=0;c[V>>2]=0;c[W>>2]=0;c[Z>>2]=-1;c[oa>>2]=0;c[Q>>2]=0;c[P>>2]=0;a[pa>>0]=0;a[R>>0]=0;c[ea>>2]=0;c[ka>>2]=0;c[ia>>2]=0;c[ma>>2]=0;c[N>>2]=0;c[S>>2]=c[c[I>>2]>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0;c[s+16>>2]=0;a:do if((c[(c[I>>2]|0)+68>>2]|0)==0?(d[(c[S>>2]|0)+65>>0]|0)==0:0){if(((c[K>>2]|0)!=0?(e[(c[K>>2]|0)+6>>1]&256|0)!=0:0)?(c[(c[K>>2]|0)+52>>2]|0)==0:0){c[ea>>2]=c[c[K>>2]>>2];c[c[K>>2]>>2]=0;Wu(c[S>>2]|0,c[K>>2]|0);c[K>>2]=0}c[n>>2]=c[(c[J>>2]|0)+8+8>>2];if((((((c[n>>2]|0)!=0?(c[fa>>2]=DB(c[I>>2]|0,c[J>>2]|0)|0,(c[fa>>2]|0)!=0):0)?(c[t>>2]=Dh(c[S>>2]|0,c[(c[fa>>2]|0)+64>>2]|0)|0,c[l>>2]=(c[(c[S>>2]|0)+16>>2]|0)+(c[t>>2]<<4),c[m>>2]=c[c[l>>2]>>2],(Mw(c[I>>2]|0,18,c[c[fa>>2]>>2]|0,0,c[m>>2]|0)|0)==0):0)?(a[G>>0]=((d[(c[fa>>2]|0)+42>>0]&32|0)==0^1)&1,c[ga>>2]=sC(c[I>>2]|0,c[fa>>2]|0,108,0,C)|0,c[$>>2]=(c[(c[fa>>2]|0)+12>>2]|0)!=0&1,(zx(c[I>>2]|0,c[fa>>2]|0)|0)==0):0)?(tC(c[I>>2]|0,c[fa>>2]|0,c[C>>2]|0)|0)==0:0)?(c[qa>>2]=Pw(c[I>>2]|0)|0,(c[qa>>2]|0)!=0):0){if(!(d[(c[I>>2]|0)+18>>0]|0))uC(c[qa>>2]|0);ax(c[I>>2]|0,((c[K>>2]|0)!=0?1:(c[ga>>2]|0)!=0)&1,c[t>>2]|0);if(!((c[L>>2]|0)==0?(vC(c[I>>2]|0,c[fa>>2]|0,c[K>>2]|0,c[M>>2]|0,c[t>>2]|0)|0)!=0:0))H=17;b:do if((H|0)==17){c[ia>>2]=wC(c[I>>2]|0,c[t>>2]|0,c[fa>>2]|0)|0;n=(c[(c[I>>2]|0)+76>>2]|0)+1|0;c[la>>2]=n;c[na>>2]=n;n=(c[I>>2]|0)+76|0;c[n>>2]=(c[n>>2]|0)+((b[(c[fa>>2]|0)+34>>1]|0)+1);if(d[(c[fa>>2]|0)+42>>0]&16){c[na>>2]=(c[na>>2]|0)+1;n=(c[I>>2]|0)+76|0;c[n>>2]=(c[n>>2]|0)+1}c[ja>>2]=(c[na>>2]|0)+1;a[r>>0]=(d[(c[fa>>2]|0)+42>>0]&128|0)==0;c:do if(c[L>>2]|0){c[U>>2]=0;while(1){if((c[U>>2]|0)>=(c[(c[L>>2]|0)+4>>2]|0))break;c[(c[c[L>>2]>>2]|0)+(c[U>>2]<<3)+4>>2]=-1;c[U>>2]=(c[U>>2]|0)+1}c[U>>2]=0;while(1){if((c[U>>2]|0)>=(c[(c[L>>2]|0)+4>>2]|0))break c;c[aa>>2]=0;while(1){if((c[aa>>2]|0)>=(b[(c[fa>>2]|0)+34>>1]|0))break;n=(Td(c[(c[c[L>>2]>>2]|0)+(c[U>>2]<<3)>>2]|0,c[(c[(c[fa>>2]|0)+4>>2]|0)+((c[aa>>2]|0)*24|0)>>2]|0)|0)==0;k=c[aa>>2]|0;if(n){H=28;break}c[aa>>2]=k+1}do if((H|0)==28){H=0;c[(c[c[L>>2]>>2]|0)+(c[U>>2]<<3)+4>>2]=k;if((c[U>>2]|0)!=(c[aa>>2]|0))a[r>>0]=0;if((c[aa>>2]|0)!=(b[(c[fa>>2]|0)+32>>1]|0))break;c[Z>>2]=c[U>>2]}while(0);if((c[aa>>2]|0)>=(b[(c[fa>>2]|0)+34>>1]|0)){n=(qi(c[(c[c[L>>2]>>2]|0)+(c[U>>2]<<3)>>2]|0)|0)==0;if(n|(a[G>>0]|0)!=0)break;c[Z>>2]=c[U>>2];a[r>>0]=0}c[U>>2]=(c[U>>2]|0)+1}qa=c[I>>2]|0;pa=c[(c[c[L>>2]>>2]|0)+(c[U>>2]<<3)>>2]|0;c[D>>2]=c[J>>2];c[D+4>>2]=0;c[D+8>>2]=pa;Ah(qa,35073,D);a[(c[I>>2]|0)+17>>0]=1;break a}while(0);do if(!(c[K>>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[B+28>>2]=0;c[B>>2]=c[I>>2];c[oa>>2]=-1;if(c[ea>>2]|0){c[ba>>2]=c[c[ea>>2]>>2];if(gy(B,c[ea>>2]|0)|0)break a;else break}else{c[ba>>2]=0;break}}else{B=(c[I>>2]|0)+76|0;D=(c[B>>2]|0)+1|0;c[B>>2]=D;c[A>>2]=D;c[q>>2]=(Bz(c[qa>>2]|0)|0)+1;Vw(c[qa>>2]|0,16,c[A>>2]|0,0,c[q>>2]|0)|0;ZA(s,13,c[A>>2]|0);c[s+8>>2]=(d[r>>0]|0)!=0?c[ja>>2]|0:0;c[s+12>>2]=b[(c[fa>>2]|0)+34>>1];c[w>>2]=Cv(c[I>>2]|0,c[K>>2]|0,s)|0;c[ka>>2]=c[s+8>>2];if(c[w>>2]|0)break a;if(d[(c[S>>2]|0)+65>>0]|0)break a;if(c[(c[I>>2]|0)+68>>2]|0)break a;xC(c[qa>>2]|0,c[A>>2]|0);Fz(c[qa>>2]|0,(c[q>>2]|0)-1|0);c[ba>>2]=c[c[c[K>>2]>>2]>>2];if(!((c[ga>>2]|0)==0?(yC(c[I>>2]|0,c[t>>2]|0,c[fa>>2]|0)|0)==0:0))a[pa>>0]=1;if(!(a[pa>>0]|0))break;B=(c[I>>2]|0)+72|0;D=c[B>>2]|0;c[B>>2]=D+1;c[oa>>2]=D;c[y>>2]=Wz(c[I>>2]|0)|0;c[z>>2]=Wz(c[I>>2]|0)|0;Rw(c[qa>>2]|0,57,c[oa>>2]|0,c[ba>>2]|0)|0;c[p>>2]=xz(c[qa>>2]|0,18,c[s+4>>2]|0)|0;Vw(c[qa>>2]|0,49,c[ka>>2]|0,c[ba>>2]|0,c[y>>2]|0)|0;Rw(c[qa>>2]|0,74,c[oa>>2]|0,c[z>>2]|0)|0;Vw(c[qa>>2]|0,75,c[oa>>2]|0,c[y>>2]|0,c[z>>2]|0)|0;Ez(c[qa>>2]|0,c[p>>2]|0)|0;Fz(c[qa>>2]|0,c[p>>2]|0);_z(c[I>>2]|0,c[y>>2]|0);_z(c[I>>2]|0,c[z>>2]|0)}while(0);if((c[L>>2]|0)==0&(c[ba>>2]|0)>0)c[Z>>2]=b[(c[fa>>2]|0)+32>>1];c[U>>2]=0;while(1){if((c[U>>2]|0)>=(b[(c[fa>>2]|0)+34>>1]|0))break;c[ca>>2]=(c[ca>>2]|0)+((d[(c[(c[fa>>2]|0)+4>>2]|0)+((c[U>>2]|0)*24|0)+23>>0]&2|0)!=0?1:0);c[U>>2]=(c[U>>2]|0)+1}if((c[L>>2]|0)==0&(c[ba>>2]|0)!=0?(c[ba>>2]|0)!=((b[(c[fa>>2]|0)+34>>1]|0)-(c[ca>>2]|0)|0):0){qa=c[I>>2]|0;oa=(b[(c[fa>>2]|0)+34>>1]|0)-(c[ca>>2]|0)|0;pa=c[ba>>2]|0;c[E>>2]=c[J>>2];c[E+4>>2]=0;c[E+8>>2]=oa;c[E+12>>2]=pa;Ah(qa,35105,E);break a}do if(c[L>>2]|0){if((c[ba>>2]|0)==(c[(c[L>>2]|0)+4>>2]|0))break;qa=c[I>>2]|0;pa=c[(c[L>>2]|0)+4>>2]|0;c[F>>2]=c[ba>>2];c[F+4>>2]=pa;Ah(qa,35157,F);break a}while(0);if(c[(c[S>>2]|0)+24>>2]&128){E=(c[I>>2]|0)+76|0;F=(c[E>>2]|0)+1|0;c[E>>2]=F;c[ma>>2]=F;Rw(c[qa>>2]|0,22,0,c[ma>>2]|0)|0}d:do if(!(c[$>>2]|0)){c[u>>2]=gC(c[I>>2]|0,c[fa>>2]|0,55,0,-1,0,V,W)|0;c[N>>2]=Fw(c[S>>2]|0,(c[u>>2]|0)+1<<2,0)|0;if(!(c[N>>2]|0))break a;c[U>>2]=0;while(1){if((c[U>>2]|0)>=(c[u>>2]|0))break d;E=(c[I>>2]|0)+76|0;F=(c[E>>2]|0)+1|0;c[E>>2]=F;c[(c[N>>2]|0)+(c[U>>2]<<2)>>2]=F;c[U>>2]=(c[U>>2]|0)+1}}while(0);do if(a[pa>>0]|0){c[Q>>2]=xz(c[qa>>2]|0,108,c[oa>>2]|0)|0;c[P>>2]=Bz(c[qa>>2]|0)|0}else{if(!(c[K>>2]|0))break;F=xz(c[qa>>2]|0,18,c[s+4>>2]|0)|0;c[P>>2]=F;c[Q>>2]=F}while(0);c[T>>2]=Cz(c[qa>>2]|0)|0;if(c[C>>2]&1){c[x>>2]=kA(c[I>>2]|0,(b[(c[fa>>2]|0)+34>>1]|0)+1|0)|0;if((c[Z>>2]|0)<0)Rw(c[qa>>2]|0,22,-1,c[x>>2]|0)|0;else{if(a[pa>>0]|0)Vw(c[qa>>2]|0,47,c[oa>>2]|0,c[Z>>2]|0,c[x>>2]|0)|0;else xA(c[I>>2]|0,c[(c[(c[ea>>2]|0)+4>>2]|0)+((c[Z>>2]|0)*20|0)>>2]|0,c[x>>2]|0);c[o>>2]=xz(c[qa>>2]|0,77,c[x>>2]|0)|0;Rw(c[qa>>2]|0,22,-1,c[x>>2]|0)|0;Fz(c[qa>>2]|0,c[o>>2]|0);xz(c[qa>>2]|0,38,c[x>>2]|0)|0}c[aa>>2]=0;c[U>>2]=0;while(1){if((c[U>>2]|0)>=(b[(c[fa>>2]|0)+34>>1]|0))break;e:do if(c[L>>2]|0){c[aa>>2]=0;while(1){if((c[aa>>2]|0)>=(c[(c[L>>2]|0)+4>>2]|0))break e;if((c[(c[c[L>>2]>>2]|0)+(c[aa>>2]<<3)+4>>2]|0)==(c[U>>2]|0))break e;c[aa>>2]=(c[aa>>2]|0)+1}}while(0);do if((a[pa>>0]|0)!=0|(c[ea>>2]|0)!=0){if((c[L>>2]|0)!=0?(c[aa>>2]|0)>=(c[(c[L>>2]|0)+4>>2]|0):0){H=90;break}if(a[pa>>0]|0){Vw(c[qa>>2]|0,47,c[oa>>2]|0,c[aa>>2]|0,(c[x>>2]|0)+(c[U>>2]|0)+1|0)|0;break}else{zC(c[I>>2]|0,c[(c[(c[ea>>2]|0)+4>>2]|0)+((c[aa>>2]|0)*20|0)>>2]|0,(c[x>>2]|0)+(c[U>>2]|0)+1|0);break}}else H=90;while(0);if((H|0)==90){H=0;xA(c[I>>2]|0,c[(c[(c[fa>>2]|0)+4>>2]|0)+((c[U>>2]|0)*24|0)+4>>2]|0,(c[x>>2]|0)+(c[U>>2]|0)+1|0)}if(!(c[L>>2]|0))c[aa>>2]=(c[aa>>2]|0)+1;c[U>>2]=(c[U>>2]|0)+1}if(!(c[$>>2]|0))AC(c[qa>>2]|0,c[fa>>2]|0,(c[x>>2]|0)+1|0);BC(c[I>>2]|0,c[ga>>2]|0,108,0,1,c[fa>>2]|0,(c[x>>2]|0)-(b[(c[fa>>2]|0)+34>>1]|0)-1|0,c[M>>2]|0,c[T>>2]|0);nA(c[I>>2]|0,c[x>>2]|0,(b[(c[fa>>2]|0)+34>>1]|0)+1|0)}do if(!(c[$>>2]|0)){if(d[(c[fa>>2]|0)+42>>0]&16)Rw(c[qa>>2]|0,25,0,c[la>>2]|0)|0;f:do if((c[Z>>2]|0)>=0){do if(a[pa>>0]|0)Vw(c[qa>>2]|0,47,c[oa>>2]|0,c[Z>>2]|0,c[na>>2]|0)|0;else{if(c[K>>2]|0){Rw(c[qa>>2]|0,30,(c[ka>>2]|0)+(c[Z>>2]|0)|0,c[na>>2]|0)|0;break}xA(c[I>>2]|0,c[(c[(c[ea>>2]|0)+4>>2]|0)+((c[Z>>2]|0)*20|0)>>2]|0,c[na>>2]|0);c[v>>2]=Mz(c[qa>>2]|0,-1)|0;if(!(c[v>>2]|0))break;if((d[c[v>>2]>>0]|0)!=25)break;if(d[(c[fa>>2]|0)+42>>0]&16)break;a[R>>0]=1;a[c[v>>2]>>0]=74;c[(c[v>>2]|0)+4>>2]=c[V>>2];c[(c[v>>2]|0)+8>>2]=c[na>>2];c[(c[v>>2]|0)+12>>2]=c[ia>>2]}while(0);if(a[R>>0]|0)break;k=c[qa>>2]|0;if(d[(c[fa>>2]|0)+42>>0]&16){c[O>>2]=Bz(k)|0;Rw(c[qa>>2]|0,76,c[na>>2]|0,(c[O>>2]|0)+2|0)|0}else{c[O>>2]=xz(k,77,c[na>>2]|0)|0;Vw(c[qa>>2]|0,74,c[V>>2]|0,c[na>>2]|0,c[ia>>2]|0)|0;Fz(c[qa>>2]|0,c[O>>2]|0)}xz(c[qa>>2]|0,38,c[na>>2]|0)|0}else{do if(!(d[(c[fa>>2]|0)+42>>0]&16)){if(d[G>>0]|0)break;Vw(c[qa>>2]|0,74,c[V>>2]|0,c[na>>2]|0,c[ia>>2]|0)|0;a[R>>0]=1;break f}while(0);Rw(c[qa>>2]|0,25,0,c[na>>2]|0)|0}while(0);CC(c[I>>2]|0,c[ia>>2]|0,c[na>>2]|0);c[ca>>2]=0;c[U>>2]=0;while(1){if((c[U>>2]|0)>=(b[(c[fa>>2]|0)+34>>1]|0))break;c[X>>2]=(c[na>>2]|0)+1+(c[U>>2]|0);g:do if((c[U>>2]|0)==(b[(c[fa>>2]|0)+32>>1]|0))xz(c[qa>>2]|0,26,c[X>>2]|0)|0;else{h:do if(!(c[L>>2]|0))if(d[(c[(c[fa>>2]|0)+4>>2]|0)+((c[U>>2]|0)*24|0)+23>>0]&2){c[aa>>2]=-1;c[ca>>2]=(c[ca>>2]|0)+1;break}else{c[aa>>2]=(c[U>>2]|0)-(c[ca>>2]|0);break}else{c[aa>>2]=0;while(1){if((c[aa>>2]|0)>=(c[(c[L>>2]|0)+4>>2]|0))break h;if((c[(c[c[L>>2]>>2]|0)+(c[aa>>2]<<3)+4>>2]|0)==(c[U>>2]|0))break h;c[aa>>2]=(c[aa>>2]|0)+1}}while(0);do if(!((c[aa>>2]|0)<0|(c[ba>>2]|0)==0)){if((c[L>>2]|0)!=0?(c[aa>>2]|0)>=(c[(c[L>>2]|0)+4>>2]|0):0)break;if(a[pa>>0]|0){Vw(c[qa>>2]|0,47,c[oa>>2]|0,c[aa>>2]|0,c[X>>2]|0)|0;break g}if(!(c[K>>2]|0)){xA(c[I>>2]|0,c[(c[(c[ea>>2]|0)+4>>2]|0)+((c[aa>>2]|0)*20|0)>>2]|0,c[X>>2]|0);break g}if((c[ka>>2]|0)==(c[ja>>2]|0))break g;Rw(c[qa>>2]|0,31,(c[ka>>2]|0)+(c[aa>>2]|0)|0,c[X>>2]|0)|0;break g}while(0);DC(c[I>>2]|0,c[(c[(c[fa>>2]|0)+4>>2]|0)+((c[U>>2]|0)*24|0)+4>>2]|0,c[X>>2]|0)}while(0);c[U>>2]=(c[U>>2]|0)+1}if(d[(c[fa>>2]|0)+42>>0]&16){c[ha>>2]=Ax(c[S>>2]|0,c[fa>>2]|0)|0;EC(c[I>>2]|0,c[fa>>2]|0);Uw(c[qa>>2]|0,12,1,(b[(c[fa>>2]|0)+34>>1]|0)+2|0,c[la>>2]|0,c[ha>>2]|0,-10)|0;Fh(c[qa>>2]|0,((c[M>>2]|0)==10?2:c[M>>2]|0)&255);Bx(c[I>>2]|0);break}else{FC(c[I>>2]|0,c[fa>>2]|0,c[N>>2]|0,c[V>>2]|0,c[W>>2]|0,c[la>>2]|0,0,(c[Z>>2]|0)>=0&255,c[M>>2]&255,c[T>>2]|0,_,0);GC(c[I>>2]|0,c[fa>>2]|0,0,c[la>>2]|0,0,0);HC(c[I>>2]|0,c[fa>>2]|0,c[V>>2]|0,c[W>>2]|0,c[la>>2]|0,c[N>>2]|0,0,d[R>>0]|0,(c[_>>2]|0)==0&1);break}}while(0);if(c[(c[S>>2]|0)+24>>2]&128)Rw(c[qa>>2]|0,37,c[ma>>2]|0,1)|0;if(c[ga>>2]|0)BC(c[I>>2]|0,c[ga>>2]|0,108,0,2,c[fa>>2]|0,(c[ja>>2]|0)-2-(b[(c[fa>>2]|0)+34>>1]|0)|0,c[M>>2]|0,c[T>>2]|0);Gz(c[qa>>2]|0,c[T>>2]|0);do if(a[pa>>0]|0){Rw(c[qa>>2]|0,7,c[oa>>2]|0,c[P>>2]|0)|0;Fz(c[qa>>2]|0,c[Q>>2]|0);xz(c[qa>>2]|0,61,c[oa>>2]|0)|0}else{if(!(c[K>>2]|0))break;Ez(c[qa>>2]|0,c[P>>2]|0)|0;Fz(c[qa>>2]|0,c[Q>>2]|0)}while(0);if((c[$>>2]|0)!=0?1:(d[(c[fa>>2]|0)+42>>0]&16|0)!=0)break;if((c[V>>2]|0)<(c[W>>2]|0))xz(c[qa>>2]|0,61,c[V>>2]|0)|0;c[Y>>2]=0;c[da>>2]=c[(c[fa>>2]|0)+8>>2];while(1){if(!(c[da>>2]|0))break b;xz(c[qa>>2]|0,61,(c[Y>>2]|0)+(c[W>>2]|0)|0)|0;c[da>>2]=c[(c[da>>2]|0)+20>>2];c[Y>>2]=(c[Y>>2]|0)+1}}while(0);if((d[(c[I>>2]|0)+18>>0]|0)==0?(c[(c[I>>2]|0)+420>>2]|0)==0:0)IC(c[I>>2]|0);if(((c[(c[S>>2]|0)+24>>2]&128|0)!=0?(a[(c[I>>2]|0)+18>>0]|0)==0:0)?(c[(c[I>>2]|0)+420>>2]|0)==0:0){Rw(c[qa>>2]|0,33,c[ma>>2]|0,1)|0;OB(c[qa>>2]|0,1);PB(c[qa>>2]|0,0,0,35182,0)|0}}}while(0);Yu(c[S>>2]|0,c[J>>2]|0);Vu(c[S>>2]|0,c[ea>>2]|0);Wu(c[S>>2]|0,c[K>>2]|0);_u(c[S>>2]|0,c[L>>2]|0);Sf(c[S>>2]|0,c[N>>2]|0);i=ra;return}function Vv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;f=k+16|0;e=k+12|0;g=k+8|0;h=k+4|0;j=k;c[e>>2]=a;c[g>>2]=b;c[h>>2]=d;if((c[g>>2]|0)==0?(c[g>>2]=ph(c[e>>2]|0,8,0)|0,(c[g>>2]|0)==0):0){c[f>>2]=0;j=c[f>>2]|0;i=k;return j|0}d=rC(c[e>>2]|0,c[c[g>>2]>>2]|0,8,(c[g>>2]|0)+4|0,j)|0;c[c[g>>2]>>2]=d;e=c[e>>2]|0;if((c[j>>2]|0)<0){_u(e,c[g>>2]|0);c[f>>2]=0;j=c[f>>2]|0;i=k;return j|0}else{h=Dw(e,c[h>>2]|0)|0;c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<3)>>2]=h;c[f>>2]=c[g>>2];j=c[f>>2]|0;i=k;return j|0}return 0}function Wv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e+8|0;h=e+4|0;g=e;c[f>>2]=a;c[h>>2]=b;c[g>>2]=d;c[(c[f>>2]|0)+4>>2]=c[c[h>>2]>>2];c[(c[f>>2]|0)+8>>2]=(c[c[g>>2]>>2]|0)+(c[(c[g>>2]|0)+4>>2]|0);i=e;return}function Xv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+64|0;p=t+16|0;o=t+8|0; +f=t+44|0;g=t+40|0;k=t+36|0;r=t+32|0;q=t+50|0;n=t+28|0;l=t;j=t+24|0;m=t+48|0;h=t+20|0;c[f>>2]=d;c[g>>2]=e;c[k>>2]=c[c[f>>2]>>2];if(!(c[g>>2]|0)){i=t;return}c[r>>2]=c[(c[g>>2]|0)+8>>2];do if(a[(c[r>>2]|0)+1>>0]|0){b[q>>1]=0;c[n>>2]=If(c[r>>2]|0)|0;if((a[c[r>>2]>>0]|0)==63){c[j>>2]=0==(Hi((c[r>>2]|0)+1|0,l,(c[n>>2]|0)-1|0,1)|0)&1;s=c[l>>2]&65535;b[q>>1]=s;b[(c[g>>2]|0)+32>>1]=s;s=l;d=c[s+4>>2]|0;if(!(!((c[j>>2]|0)==0|((d|0)<0|(d|0)==0&(c[s>>2]|0)>>>0<1))?(d=l,m=c[d+4>>2]|0,s=c[(c[k>>2]|0)+88+36>>2]|0,e=((s|0)<0)<<31>>31,!((m|0)>(e|0)|((m|0)==(e|0)?(c[d>>2]|0)>>>0>s>>>0:0))):0)){s=c[f>>2]|0;c[o>>2]=c[(c[k>>2]|0)+88+36>>2];Ah(s,35007,o);b[q>>1]=0}o=l;e=c[o+4>>2]|0;s=b[(c[f>>2]|0)+444>>1]|0;d=((s|0)<0)<<31>>31;if((e|0)>(d|0)|((e|0)==(d|0)?(c[o>>2]|0)>>>0>s>>>0:0))b[(c[f>>2]|0)+444>>1]=c[l>>2]}else{b[m>>1]=0;while(1){if((b[m>>1]|0)>=(c[(c[f>>2]|0)+448>>2]|0))break;if((c[(c[(c[f>>2]|0)+476>>2]|0)+(b[m>>1]<<2)>>2]|0)!=0?(yQ(c[(c[(c[f>>2]|0)+476>>2]|0)+(b[m>>1]<<2)>>2]|0,c[r>>2]|0)|0)==0:0){s=14;break}b[m>>1]=(b[m>>1]|0)+1<<16>>16}if((s|0)==14){s=(b[m>>1]|0)+1&65535;b[q>>1]=s;b[(c[g>>2]|0)+32>>1]=s}if(!(b[q>>1]|0)){o=(c[f>>2]|0)+444|0;s=(b[o>>1]|0)+1<<16>>16;b[o>>1]=s;b[(c[g>>2]|0)+32>>1]=s;b[q>>1]=s}}if((b[q>>1]|0)>0){do if((b[q>>1]|0)>(c[(c[f>>2]|0)+448>>2]|0)){c[h>>2]=Ew(c[k>>2]|0,c[(c[f>>2]|0)+476>>2]|0,b[q>>1]<<2,0)|0;if(!(c[h>>2]|0)){i=t;return}else{c[(c[f>>2]|0)+476>>2]=c[h>>2];kR((c[h>>2]|0)+(c[(c[f>>2]|0)+448>>2]<<2)|0,0,(b[q>>1]|0)-(c[(c[f>>2]|0)+448>>2]|0)<<2|0)|0;c[(c[f>>2]|0)+448>>2]=b[q>>1];break}}while(0);if((a[c[r>>2]>>0]|0)==63?(c[(c[(c[f>>2]|0)+476>>2]|0)+((b[q>>1]|0)-1<<2)>>2]|0)!=0:0)break;Sf(c[k>>2]|0,c[(c[(c[f>>2]|0)+476>>2]|0)+((b[q>>1]|0)-1<<2)>>2]|0);s=Iw(c[k>>2]|0,c[r>>2]|0,c[n>>2]|0,0)|0;c[(c[(c[f>>2]|0)+476>>2]|0)+((b[q>>1]|0)-1<<2)>>2]=s}}else{r=(c[f>>2]|0)+444|0;s=(b[r>>1]|0)+1<<16>>16;b[r>>1]=s;b[(c[g>>2]|0)+32>>1]=s}while(0);if(c[(c[f>>2]|0)+68>>2]|0){i=t;return}if((b[(c[f>>2]|0)+444>>1]|0)<=(c[(c[k>>2]|0)+88+36>>2]|0)){i=t;return}Ah(c[f>>2]|0,35050,p);i=t;return}function Yv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if((c[(c[h>>2]|0)+4>>2]|0)>>>0<=0){a=c[g>>2]|0;i=l;return a|0}c[k>>2]=cz(c[c[f>>2]>>2]|0,95,c[h>>2]|0,c[j>>2]|0)|0;if(!(c[k>>2]|0)){a=c[g>>2]|0;i=l;return a|0}c[(c[k>>2]|0)+12>>2]=c[g>>2];a=(c[k>>2]|0)+4|0;c[a>>2]=c[a>>2]|4352;c[g>>2]=c[k>>2];a=c[g>>2]|0;i=l;return a|0}function Zv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+20|0;f=k+16|0;g=k+12|0;l=k+8|0;j=k+4|0;h=k;c[f>>2]=a;c[g>>2]=b;c[l>>2]=d;c[h>>2]=c[c[f>>2]>>2];c[j>>2]=cz(c[h>>2]|0,151,c[l>>2]|0,1)|0;if(!(c[j>>2]|0)){Vu(c[h>>2]|0,c[g>>2]|0);c[e>>2]=0;l=c[e>>2]|0;i=k;return l|0}else{c[(c[j>>2]|0)+20>>2]=c[g>>2];dw(c[f>>2]|0,c[j>>2]|0);c[e>>2]=c[j>>2];l=c[e>>2]|0;i=k;return l|0}return 0}function _v(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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;h=g+16|0;m=g+12|0;l=g+8|0;k=g+4|0;j=g;c[h>>2]=a;c[m>>2]=b;c[l>>2]=d;c[k>>2]=e;c[j>>2]=f;f=rv(c[m>>2]|0,c[l>>2]|0,c[c[k>>2]>>2]|0,c[c[j>>2]>>2]|0,0)|0;c[c[h>>2]>>2]=f;c[(c[h>>2]|0)+4>>2]=c[(c[k>>2]|0)+4>>2];c[(c[h>>2]|0)+8>>2]=c[(c[j>>2]|0)+8>>2];i=g;return}function $v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+8|0;h=g+4|0;f=g;c[e>>2]=a;c[h>>2]=b;c[f>>2]=d;if(!(c[h>>2]|0)){i=g;return}h=rv(c[e>>2]|0,19,c[c[f>>2]>>2]|0,0,0)|0;c[c[f>>2]>>2]=h;i=g;return}function aw(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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;h=g+16|0;m=g+12|0;l=g+8|0;k=g+4|0;j=g;c[h>>2]=a;c[m>>2]=b;c[l>>2]=d;c[k>>2]=e;c[j>>2]=f;f=rv(c[m>>2]|0,c[l>>2]|0,c[c[k>>2]>>2]|0,0,0)|0;c[c[h>>2]>>2]=f;c[(c[h>>2]|0)+4>>2]=c[(c[k>>2]|0)+4>>2];c[(c[h>>2]|0)+8>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0);i=g;return}function bw(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;n=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[n>>2]=b;c[h>>2]=e;c[j>>2]=f;c[k>>2]=g;c[l>>2]=c[c[n>>2]>>2];if(!((c[j>>2]|0)!=0&(c[h>>2]|0)!=0)){i=m;return}if((d[c[h>>2]>>0]|0|0)!=101){i=m;return}a[c[j>>2]>>0]=c[k>>2];Zu(c[l>>2]|0,c[(c[j>>2]|0)+16>>2]|0);c[(c[j>>2]|0)+16>>2]=0;i=m;return}function cw(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,j=0,k=0,l=0,m=0;g=i;i=i+32|0;h=g+16|0;m=g+12|0;l=g+8|0;j=g+4|0;k=g;c[h>>2]=a;c[m>>2]=b;c[l>>2]=d;c[j>>2]=e;c[k>>2]=f;f=rv(c[m>>2]|0,c[l>>2]|0,c[c[j>>2]>>2]|0,0,0)|0;c[c[h>>2]>>2]=f;c[(c[h>>2]|0)+4>>2]=c[c[k>>2]>>2];c[(c[h>>2]|0)+8>>2]=c[(c[j>>2]|0)+8>>2];i=g;return}function dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(c[(c[d>>2]|0)+68>>2]|0){i=f;return}ez(c[e>>2]|0);Ey(c[d>>2]|0,c[(c[e>>2]|0)+24>>2]|0)|0;i=f;return}function ew(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=i;i=i+32|0;l=m;h=m+28|0;p=m+24|0;j=m+20|0;o=m+16|0;n=m+12|0;k=m+8|0;c[h>>2]=a;c[p>>2]=b;c[j>>2]=e;c[o>>2]=f;c[n>>2]=g;c[k>>2]=Gv(c[h>>2]|0,c[p>>2]|0,0)|0;if((c[o>>2]|0)!=0|(c[n>>2]|0)!=-1?(d[(c[c[h>>2]>>2]|0)+140+5>>0]|0|0)==0:0){p=c[h>>2]|0;o=c[c[j>>2]>>2]|0;c[l>>2]=c[(c[j>>2]|0)+4>>2];c[l+4>>2]=o;Ah(p,34967,l)}Hv(c[h>>2]|0,c[k>>2]|0,c[j>>2]|0,1);i=m;return c[k>>2]|0}function fw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+80|0;m=u+16|0;l=u+8|0;t=u;p=u+68|0;q=u+64|0;r=u+60|0;h=u+56|0;k=u+52|0;s=u+48|0;g=u+44|0;f=u+40|0;j=u+36|0;n=u+32|0;o=u+28|0;c[p>>2]=b;c[q>>2]=d;c[r>>2]=e;c[s>>2]=c[c[p>>2]>>2];if(a[(c[s>>2]|0)+65>>0]|0){s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}if(pz(c[p>>2]|0)|0){s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}c[h>>2]=Fj(c[s>>2]|0,c[(c[q>>2]|0)+8+8>>2]|0,c[(c[q>>2]|0)+8+4>>2]|0)|0;if(!(c[h>>2]|0)){f=c[p>>2]|0;g=c[q>>2]|0;if(c[r>>2]|0)zB(f,c[g+8+4>>2]|0);else{c[t>>2]=g;c[t+4>>2]=0;Ah(f,34757,t)}a[(c[p>>2]|0)+17>>0]=1;s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}if(a[(c[h>>2]|0)+55>>0]&3){t=c[p>>2]|0;c[l>>2]=0;Ah(t,34775,l);s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}c[g>>2]=Dh(c[s>>2]|0,c[(c[h>>2]|0)+24>>2]|0)|0;c[f>>2]=10;c[j>>2]=c[(c[h>>2]|0)+12>>2];c[n>>2]=c[(c[(c[s>>2]|0)+16>>2]|0)+(c[g>>2]<<4)>>2];c[o>>2]=(c[g>>2]|0)==1?20769:20788;if(Mw(c[p>>2]|0,9,c[o>>2]|0,0,c[n>>2]|0)|0){s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}if(c[g>>2]|0)c[f>>2]=12;if(Mw(c[p>>2]|0,c[f>>2]|0,c[c[h>>2]>>2]|0,c[c[j>>2]>>2]|0,c[n>>2]|0)|0){s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}c[k>>2]=Pw(c[p>>2]|0)|0;if(!(c[k>>2]|0)){s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}ax(c[p>>2]|0,1,c[g>>2]|0);t=c[p>>2]|0;o=(c[g>>2]|0)==1?20769:20788;r=c[c[h>>2]>>2]|0;c[m>>2]=c[(c[(c[s>>2]|0)+16>>2]|0)+(c[g>>2]<<4)>>2];c[m+4>>2]=o;c[m+8>>2]=r;Ow(t,34848,m);pC(c[p>>2]|0,c[g>>2]|0,31725,c[c[h>>2]>>2]|0);Qw(c[p>>2]|0,c[g>>2]|0);qC(c[p>>2]|0,c[(c[h>>2]|0)+44>>2]|0,c[g>>2]|0);Uw(c[k>>2]|0,126,c[g>>2]|0,0,0,c[c[h>>2]>>2]|0,0)|0;s=c[s>>2]|0;t=c[q>>2]|0;Yu(s,t);i=u;return}function gw(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=Pw(c[e>>2]|0)|0;if(!(c[b>>2]|0)){i=d;return}Rw(c[b>>2]|0,10,0,0)|0;Hh(c[b>>2]|0,0);i=d;return}function hw(f,g,h,j,k){f=f|0;g=g|0;h=h|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,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;ac=i;i=i+800|0;Ia=ac+264|0;Sb=ac+256|0;Rb=ac+248|0;db=ac+240|0;Aa=ac+208|0;za=ac+200|0;ya=ac+184|0;xa=ac+160|0;Qb=ac+144|0;Pb=ac+128|0;wa=ac+112|0;va=ac+96|0;cb=ac+72|0;ua=ac+64|0;ta=ac+56|0;sa=ac+48|0;r=ac+40|0;p=ac+32|0;Xb=ac+792|0;l=ac+788|0;s=ac+784|0;n=ac+780|0;o=ac+776|0;_b=ac+772|0;$b=ac+768|0;fb=ac+764|0;m=ac+760|0;q=ac+744|0;Wb=ac+736|0;X=ac+732|0;ra=ac+728|0;Y=ac+724|0;la=ac+720|0;Zb=ac+716|0;Fa=ac+712|0;Yb=ac+708|0;Hb=ac+704|0;v=ac+700|0;na=ac+696|0;$=ac+692|0;Ga=ac+688|0;aa=ac+684|0;B=ac+680|0;T=ac+676|0;Pa=ac+672|0;Da=ac+668|0;E=ac+664|0;ga=ac+660|0;U=ac+656|0;F=ac+652|0;V=ac+648|0;Ba=ac+644|0;Z=ac+640|0;ha=ac+636|0;R=ac+24|0;ba=ac+632|0;D=ac+628|0;y=ac+624|0;N=ac+620|0;S=ac+616|0;z=ac+612|0;oa=ac+608|0;pa=ac+604|0;qa=ac+16|0;ma=ac+600|0;Q=ac+596|0;Ea=ac+592|0;Za=ac+588|0;Ma=ac+584|0;Ra=ac+580|0;Ta=ac+576|0;Ua=ac+572|0;Ya=ac+568|0;ea=ac+564|0;H=ac+560|0;ia=ac+556|0;Db=ac+552|0;Jb=ac+548|0;lb=ac+544|0;Bb=ac+540|0;kb=ac+796|0;fa=ac+536|0;ja=ac+532|0;I=ac+528|0;A=ac+516|0;J=ac+512|0;K=ac+508|0;_=ac+504|0;ca=ac+500|0;da=ac+496|0;ka=ac+492|0;L=ac+488|0;W=ac+484|0;Va=ac+480|0;_a=ac+476|0;Xa=ac+472|0;Wa=ac+468|0;Na=ac+464|0;Qa=ac+460|0;Sa=ac+456|0;eb=ac+452|0;ab=ac+448|0;$a=ac+444|0;bb=ac+440|0;Ka=ac+436|0;Ja=ac+432|0;La=ac+428|0;Oa=ac+424|0;mb=ac+420|0;rb=ac+416|0;hb=ac+412|0;Cb=ac+408|0;qb=ac+404|0;Tb=ac+400|0;Mb=ac+396|0;jb=ac+392|0;Kb=ac+388|0;Eb=ac+384|0;Lb=ac+380|0;Fb=ac+376|0;Gb=ac+372|0;Ib=ac+368|0;Ab=ac+364|0;ob=ac+360|0;pb=ac+356|0;Nb=ac+352|0;Ub=ac+348|0;sb=ac+344|0;ub=ac+340|0;tb=ac+336|0;vb=ac+332|0;wb=ac+328|0;xb=ac+324|0;ib=ac+320|0;Ob=ac+316|0;yb=ac+312|0;zb=ac+308|0;nb=ac+304|0;gb=ac+300|0;Ha=ac+296|0;P=ac+292|0;w=ac+288|0;x=ac+284|0;M=ac+280|0;Ca=ac+276|0;O=ac+272|0;G=ac+268|0;t=ac+8|0;u=ac;c[Xb>>2]=f;c[l>>2]=g;c[s>>2]=h;c[n>>2]=j;c[o>>2]=k;c[_b>>2]=0;c[$b>>2]=0;c[fb>>2]=0;c[Y>>2]=0;c[Zb>>2]=c[c[Xb>>2]>>2];c[Yb>>2]=Pw(c[Xb>>2]|0)|0;if(!(c[Yb>>2]|0)){i=ac;return}KB(c[Yb>>2]|0);c[(c[Xb>>2]|0)+76>>2]=2;c[Wb>>2]=tz(c[Xb>>2]|0,c[l>>2]|0,c[s>>2]|0,m)|0;if((c[Wb>>2]|0)<0){i=ac;return}c[Fa>>2]=(c[(c[Zb>>2]|0)+16>>2]|0)+(c[Wb>>2]<<4);if((c[Wb>>2]|0)==1?(cx(c[Xb>>2]|0)|0)!=0:0){i=ac;return}c[_b>>2]=Dw(c[Zb>>2]|0,c[m>>2]|0)|0;if(!(c[_b>>2]|0)){i=ac;return}k=c[Zb>>2]|0;l=c[n>>2]|0;if(c[o>>2]|0){c[p>>2]=l;c[$b>>2]=Bh(k,32915,p)|0}else c[$b>>2]=Dw(k,l)|0;if((c[(c[s>>2]|0)+4>>2]|0)>>>0>0)l=c[c[Fa>>2]>>2]|0;else l=0;c[fb>>2]=l;a:do if(!(Mw(c[Xb>>2]|0,19,c[_b>>2]|0,c[$b>>2]|0,c[fb>>2]|0)|0)){c[q>>2]=0;c[q+4>>2]=c[_b>>2];c[q+8>>2]=c[$b>>2];c[q+12>>2]=0;c[(c[Zb>>2]|0)+448+8>>2]=0;c[la>>2]=Ff(c[Zb>>2]|0,c[fb>>2]|0,14,q)|0;if(!(c[la>>2]|0)){LB(c[Yb>>2]|0,32919,c[q>>2]|0);Kd(c[q>>2]|0);break}if((c[la>>2]|0)!=12){if(c[q>>2]|0){Yb=c[Xb>>2]|0;c[r>>2]=c[q>>2];Ah(Yb,19255,r);Kd(c[q>>2]|0)}Yb=(c[Xb>>2]|0)+68|0;c[Yb>>2]=(c[Yb>>2]|0)+1;c[(c[Xb>>2]|0)+12>>2]=c[la>>2];break}c[X>>2]=0;c[ra>>2]=57;while(1){if((c[X>>2]|0)>(c[ra>>2]|0))break;c[Y>>2]=((c[X>>2]|0)+(c[ra>>2]|0)|0)/2|0;c[la>>2]=Td(c[_b>>2]|0,c[5312+((c[Y>>2]|0)*12|0)>>2]|0)|0;if(!(c[la>>2]|0))break;l=c[Y>>2]|0;if((c[la>>2]|0)<0){c[ra>>2]=l-1;continue}else{c[X>>2]=l+1;continue}}if((c[X>>2]|0)<=(c[ra>>2]|0)){c[Hb>>2]=5312+((c[Y>>2]|0)*12|0);if((d[(c[Hb>>2]|0)+5>>0]&1|0)!=0?(pz(c[Xb>>2]|0)|0)!=0:0)break;do switch(d[(c[Hb>>2]|0)+4>>0]|0){case 11:{Hh(c[Yb>>2]|0,c[Wb>>2]|0);if(c[$b>>2]|0){c[na>>2]=yj(Ki(c[$b>>2]|0)|0)|0;ax(c[Xb>>2]|0,0,c[Wb>>2]|0);Vw(c[Yb>>2]|0,52,c[Wb>>2]|0,3,c[na>>2]|0)|0;c[(c[(c[Fa>>2]|0)+12>>2]|0)+80>>2]=c[na>>2];zj(c[(c[Fa>>2]|0)+4>>2]|0,c[(c[(c[Fa>>2]|0)+12>>2]|0)+80>>2]|0)|0;break a}else{MB(c[Yb>>2]|0,32926);Xb=(c[Xb>>2]|0)+76|0;c[Xb>>2]=(c[Xb>>2]|0)+2;c[v>>2]=Gh(c[Yb>>2]|0,9,32937,0)|0;c[(c[v>>2]|0)+4>>2]=c[Wb>>2];c[(c[v>>2]|0)+20+4>>2]=c[Wb>>2];c[(c[v>>2]|0)+120+4>>2]=2e3;break a}}case 25:{c[$>>2]=c[(c[Fa>>2]|0)+4>>2];if(c[$b>>2]|0){Yb=Ki(c[$b>>2]|0)|0;c[(c[Zb>>2]|0)+72>>2]=Yb;if(7!=(xi(c[$>>2]|0,c[(c[Zb>>2]|0)+72>>2]|0,-1,0)|0))break a;jh(c[Zb>>2]|0);break a}if(c[$>>2]|0)l=pg(c[$>>2]|0)|0;else l=0;c[Ga>>2]=l;Xb=c[Ga>>2]|0;NB(c[Yb>>2]|0,32973,Xb,((Xb|0)<0)<<31>>31);break a}case 26:{c[aa>>2]=c[(c[Fa>>2]|0)+4>>2];c[B>>2]=-1;if(c[$b>>2]|0)c[B>>2]=(Bi(c[$b>>2]|0,0)|0)&255;b:do if((c[B>>2]|0)>=0?(c[(c[s>>2]|0)+4>>2]|0)==0:0){c[T>>2]=0;while(1){if((c[T>>2]|0)>=(c[(c[Zb>>2]|0)+20>>2]|0))break b;vB(c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[T>>2]<<4)+4>>2]|0,c[B>>2]|0)|0;c[T>>2]=(c[T>>2]|0)+1}}while(0);c[B>>2]=vB(c[aa>>2]|0,c[B>>2]|0)|0;Xb=c[B>>2]|0;NB(c[Yb>>2]|0,32983,Xb,((Xb|0)<0)<<31>>31);break a}case 23:{bx(c[Xb>>2]|0,c[Wb>>2]|0);l=(c[Xb>>2]|0)+76|0;m=(c[l>>2]|0)+1|0;c[l>>2]=m;c[Pa>>2]=m;m=c[Yb>>2]|0;l=c[Wb>>2]|0;k=c[Pa>>2]|0;if((d[18477+(d[c[_b>>2]>>0]|0)>>0]|0)==112)Rw(m,156,l,k)|0;else Vw(m,157,l,k,yj(Ki(c[$b>>2]|0)|0)|0)|0;Rw(c[Yb>>2]|0,33,c[Pa>>2]|0,1)|0;OB(c[Yb>>2]|0,1);PB(c[Yb>>2]|0,0,0,c[_b>>2]|0,-1)|0;break a}case 22:{c[Da>>2]=32997;c[E>>2]=QB(c[$b>>2]|0)|0;if((c[E>>2]|0)==-1?(c[(c[s>>2]|0)+4>>2]|0)==0:0)c[E>>2]=d[(c[Zb>>2]|0)+67>>0];else{if(!(c[(c[s>>2]|0)+4>>2]|0)){c[U>>2]=2;while(1){if((c[U>>2]|0)>=(c[(c[Zb>>2]|0)+20>>2]|0))break;c[ga>>2]=Of(c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[U>>2]<<4)+4>>2]|0)|0;uB(c[ga>>2]|0,c[E>>2]|0)|0;c[U>>2]=(c[U>>2]|0)+1}a[(c[Zb>>2]|0)+67>>0]=c[E>>2]}c[ga>>2]=Of(c[(c[Fa>>2]|0)+4>>2]|0)|0;c[E>>2]=uB(c[ga>>2]|0,c[E>>2]|0)|0}if((c[E>>2]|0)==1)c[Da>>2]=33004;LB(c[Yb>>2]|0,33014,c[Da>>2]|0);break a}case 19:{MB(c[Yb>>2]|0,33027);if(c[$b>>2]|0){c[Z>>2]=If(c[$b>>2]|0)|0;c[F>>2]=0;while(1){Xb=RB(c[F>>2]|0)|0;c[Ba>>2]=Xb;if(!Xb)break;if(!(zd(c[$b>>2]|0,c[Ba>>2]|0,c[Z>>2]|0)|0))break;c[F>>2]=(c[F>>2]|0)+1}if(!(c[Ba>>2]|0))c[F>>2]=-1}else c[F>>2]=-1;if((c[F>>2]|0)==-1?(c[(c[s>>2]|0)+4>>2]|0)==0:0){c[Wb>>2]=0;c[(c[s>>2]|0)+4>>2]=1}c[V>>2]=(c[(c[Zb>>2]|0)+20>>2]|0)-1;while(1){if((c[V>>2]|0)<0)break;do if(c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[V>>2]<<4)+4>>2]|0){if((c[V>>2]|0)!=(c[Wb>>2]|0)?(c[(c[s>>2]|0)+4>>2]|0)!=0:0)break;Hh(c[Yb>>2]|0,c[V>>2]|0);Vw(c[Yb>>2]|0,9,c[V>>2]|0,1,c[F>>2]|0)|0}while(0);c[V>>2]=(c[V>>2]|0)+-1}Rw(c[Yb>>2]|0,33,1,1)|0;break a}case 20:{c[ha>>2]=Of(c[(c[Fa>>2]|0)+4>>2]|0)|0;Xb=R;c[Xb>>2]=-2;c[Xb+4>>2]=-1;if((c[$b>>2]|0)!=0?(Ci(c[$b>>2]|0,R)|0,Xb=R,Wb=c[Xb+4>>2]|0,(Wb|0)<-1|(Wb|0)==-1&(c[Xb>>2]|0)>>>0<4294967295):0){Xb=R;c[Xb>>2]=-1;c[Xb+4>>2]=-1}Wb=R;Wb=SB(c[ha>>2]|0,c[Wb>>2]|0,c[Wb+4>>2]|0)|0;Xb=R;c[Xb>>2]=Wb;c[Xb+4>>2]=C;Xb=R;NB(c[Yb>>2]|0,33040,c[Xb>>2]|0,c[Xb+4>>2]|0);break a}case 1:{c[ba>>2]=c[(c[Fa>>2]|0)+4>>2];if(!(c[$b>>2]|0)){Xb=c[Yb>>2]|0;Yb=TB(c[ba>>2]|0)|0;NB(Xb,33059,Yb,((Yb|0)<0)<<31>>31);break a}c[D>>2]=UB(c[$b>>2]|0)|0;a[(c[Zb>>2]|0)+68>>0]=c[D>>2];c[la>>2]=VB(c[ba>>2]|0,c[D>>2]|0)|0;if(c[la>>2]|0)break a;if(!((c[D>>2]|0)==1|(c[D>>2]|0)==2))break a;c[N>>2]=Bz(c[Yb>>2]|0)|0;c[y>>2]=Gh(c[Yb>>2]|0,5,33071,0)|0;c[(c[y>>2]|0)+4>>2]=c[Wb>>2];c[(c[y>>2]|0)+20+4>>2]=c[Wb>>2];c[(c[y>>2]|0)+40+8>>2]=(c[N>>2]|0)+4;c[(c[y>>2]|0)+80+4>>2]=c[Wb>>2];c[(c[y>>2]|0)+80+12>>2]=(c[D>>2]|0)-1;Hh(c[Yb>>2]|0,c[Wb>>2]|0);break a}case 15:{if(!((c[$b>>2]|0)!=0?(Vb=(Li(c[$b>>2]|0,S)|0)==0,!(Vb|(c[S>>2]|0)<=0)):0))c[S>>2]=2147483647;ax(c[Xb>>2]|0,0,c[Wb>>2]|0);Rw(c[Yb>>2]|0,22,c[S>>2]|0,1)|0;c[z>>2]=xz(c[Yb>>2]|0,146,c[Wb>>2]|0)|0;xz(c[Yb>>2]|0,33,1)|0;Rw(c[Yb>>2]|0,37,1,-1)|0;Rw(c[Yb>>2]|0,138,1,c[z>>2]|0)|0;Fz(c[Yb>>2]|0,c[z>>2]|0);break a}case 4:if(c[$b>>2]|0){c[oa>>2]=Ki(c[$b>>2]|0)|0;c[(c[(c[Fa>>2]|0)+12>>2]|0)+80>>2]=c[oa>>2];zj(c[(c[Fa>>2]|0)+4>>2]|0,c[(c[(c[Fa>>2]|0)+12>>2]|0)+80>>2]|0)|0;break a}else{Xb=c[(c[(c[Fa>>2]|0)+12>>2]|0)+80>>2]|0;NB(c[Yb>>2]|0,32926,Xb,((Xb|0)<0)<<31>>31);break a}case 5:{if(!(c[$b>>2]|0)){k=c[Yb>>2]|0;if(!(c[(c[Zb>>2]|0)+24>>2]&32))l=0;else l=WB(c[(c[Fa>>2]|0)+4>>2]|0,0)|0;NB(k,33091,l,((l|0)<0)<<31>>31);break a}c[pa>>2]=1;if(Li(c[$b>>2]|0,pa)|0)WB(c[(c[Fa>>2]|0)+4>>2]|0,c[pa>>2]|0)|0;Yb=(Bi(c[$b>>2]|0,(c[pa>>2]|0)!=0&255)|0)<<24>>24!=0;l=(c[Zb>>2]|0)+24|0;k=c[l>>2]|0;if(Yb)c[l>>2]=k|32;else c[l>>2]=k&-33;XB(c[Zb>>2]|0);break a}case 24:{Wb=qa;c[Wb>>2]=0;c[Wb+4>>2]=0;c[la>>2]=0;if(!(c[la>>2]|0)){Xb=qa;NB(c[Yb>>2]|0,33103,c[Xb>>2]|0,c[Xb+4>>2]|0);break a}if((c[la>>2]|0)==12)break a;Yb=(c[Xb>>2]|0)+68|0;c[Yb>>2]=(c[Yb>>2]|0)+1;c[(c[Xb>>2]|0)+12>>2]=c[la>>2];break a}case 32:if(c[$b>>2]|0){YB(c[Xb>>2]|0,c[$b>>2]|0)|0;break a}else{NB(c[Yb>>2]|0,33113,d[(c[Zb>>2]|0)+64>>0]|0,0);break a}case 33:{if(!(c[$b>>2]|0)){LB(c[Yb>>2]|0,33124,c[241]|0);break a}if((a[c[$b>>2]>>0]|0)!=0?(c[la>>2]=Nr(c[c[Zb>>2]>>2]|0,c[$b>>2]|0,1,ma)|0,(c[la>>2]|0)!=0|(c[ma>>2]|0)==0):0){Ah(c[Xb>>2]|0,33145,sa);break a}if((d[(c[Zb>>2]|0)+64>>0]|0)<=1)ZB(c[Xb>>2]|0)|0;Kd(c[241]|0);if(a[c[$b>>2]>>0]|0){c[ta>>2]=c[$b>>2];c[241]=Od(19255,ta)|0;break a}else{c[241]=0;break a}}case 30:{if(!(c[$b>>2]|0)){Xb=(d[(c[Fa>>2]|0)+8>>0]|0)-1|0;NB(c[Yb>>2]|0,33170,Xb,((Xb|0)<0)<<31>>31);break a}if(a[(c[Zb>>2]|0)+63>>0]|0){Yb=((Ji(c[$b>>2]|0,0,1)|0)&255)+1&7;c[Q>>2]=Yb;c[Q>>2]=(c[Q>>2]|0)==0?1:Yb;a[(c[Fa>>2]|0)+8>>0]=c[Q>>2];XB(c[Zb>>2]|0);break a}else{Ah(c[Xb>>2]|0,33182,ua);break a}}case 2:{if(!(c[$b>>2]|0)){Xb=(c[(c[Zb>>2]|0)+24>>2]&c[(c[Hb>>2]|0)+8>>2]|0)!=0&1;NB(c[Yb>>2]|0,c[c[Hb>>2]>>2]|0,Xb,((Xb|0)<0)<<31>>31);break a}c[Ea>>2]=c[(c[Hb>>2]|0)+8>>2];if(!(d[(c[Zb>>2]|0)+63>>0]|0))c[Ea>>2]=c[Ea>>2]&-524289;Xb=(Bi(c[$b>>2]|0,0)|0)<<24>>24!=0;l=c[Ea>>2]|0;if(!Xb){Xb=(c[Zb>>2]|0)+24|0;c[Xb>>2]=c[Xb>>2]&~l;if((c[Ea>>2]|0)==16777216){Xb=(c[Zb>>2]|0)+520|0;c[Xb>>2]=0;c[Xb+4>>2]=0}}else{Xb=(c[Zb>>2]|0)+24|0;c[Xb>>2]=c[Xb>>2]|l}Rw(c[Yb>>2]|0,147,0,0)|0;XB(c[Zb>>2]|0);break a}case 31:{if(!(c[$b>>2]|0))break a;c[Za>>2]=pi(c[Zb>>2]|0,c[$b>>2]|0,c[fb>>2]|0)|0;if(!(c[Za>>2]|0))break a;c[Ta>>2]=0;c[Ya>>2]=Ej(c[Za>>2]|0)|0;c[(c[Xb>>2]|0)+76>>2]=6;bx(c[Xb>>2]|0,c[Wb>>2]|0);_B(c[Yb>>2]|0,6,6008);zx(c[Xb>>2]|0,c[Za>>2]|0)|0;c[Ma>>2]=0;c[Ua>>2]=c[(c[Za>>2]|0)+4>>2];while(1){if((c[Ma>>2]|0)>=(b[(c[Za>>2]|0)+34>>1]|0))break a;if(d[(c[Ua>>2]|0)+23>>0]&2)c[Ta>>2]=(c[Ta>>2]|0)+1;else{c:do if(!(d[(c[Ua>>2]|0)+23>>0]&1))c[Ra>>2]=0;else{Xb=(c[Ya>>2]|0)==0;c[Ra>>2]=1;if(Xb)break;while(1){if((c[Ra>>2]|0)>(b[(c[Za>>2]|0)+34>>1]|0))break c;if((b[(c[(c[Ya>>2]|0)+4>>2]|0)+((c[Ra>>2]|0)-1<<1)>>1]|0)==(c[Ma>>2]|0))break c;c[Ra>>2]=(c[Ra>>2]|0)+1}}while(0);l=c[Yb>>2]|0;k=c[c[Ua>>2]>>2]|0;if(c[(c[Ua>>2]|0)+12>>2]|0)m=c[(c[Ua>>2]|0)+12>>2]|0;else m=19266;Vb=(d[(c[Ua>>2]|0)+20>>0]|0)!=0?1:0;Wb=c[(c[Ua>>2]|0)+8>>2]|0;Xb=c[Ra>>2]|0;c[cb>>2]=(c[Ma>>2]|0)-(c[Ta>>2]|0);c[cb+4>>2]=k;c[cb+8>>2]=m;c[cb+12>>2]=Vb;c[cb+16>>2]=Wb;c[cb+20>>2]=Xb;$B(l,1,33235,cb);Rw(c[Yb>>2]|0,33,1,6)|0}c[Ma>>2]=(c[Ma>>2]|0)+1;c[Ua>>2]=(c[Ua>>2]|0)+24}}case 29:{c[Yb>>2]=Pw(c[Xb>>2]|0)|0;c[(c[Xb>>2]|0)+76>>2]=4;bx(c[Xb>>2]|0,c[Wb>>2]|0);_B(c[Yb>>2]|0,4,6032);c[H>>2]=c[(c[(c[Fa>>2]|0)+12>>2]|0)+8+8>>2];while(1){if(!(c[H>>2]|0))break a;c[ia>>2]=c[(c[H>>2]|0)+8>>2];Xb=c[Yb>>2]|0;Ub=c[c[ia>>2]>>2]|0;Vb=aC(b[(c[ia>>2]|0)+40>>1]|0)|0;Wb=aC(b[(c[ia>>2]|0)+38>>1]|0)|0;c[va>>2]=Ub;c[va+4>>2]=0;c[va+8>>2]=Vb;c[va+12>>2]=Wb;$B(Xb,1,33242,va);Rw(c[Yb>>2]|0,33,1,4)|0;c[ea>>2]=c[(c[ia>>2]|0)+8>>2];while(1){if(!(c[ea>>2]|0))break;Xb=c[Yb>>2]|0;Ub=c[c[ea>>2]>>2]|0;Vb=aC(b[(c[ea>>2]|0)+48>>1]|0)|0;Wb=aC(b[c[(c[ea>>2]|0)+8>>2]>>1]|0)|0;c[wa>>2]=Ub;c[wa+4>>2]=Vb;c[wa+8>>2]=Wb;$B(Xb,2,33247,wa);Rw(c[Yb>>2]|0,33,1,4)|0;c[ea>>2]=c[(c[ea>>2]|0)+20>>2]}c[H>>2]=c[c[H>>2]>>2]}}case 16:{if(!(c[$b>>2]|0))break a;c[Db>>2]=Fj(c[Zb>>2]|0,c[$b>>2]|0,c[fb>>2]|0)|0;if(!(c[Db>>2]|0))break a;l=c[Db>>2]|0;if(c[(c[Hb>>2]|0)+8>>2]|0){c[Bb>>2]=e[l+52>>1];c[(c[Xb>>2]|0)+76>>2]=6}else{c[Bb>>2]=e[l+50>>1];c[(c[Xb>>2]|0)+76>>2]=3}c[Jb>>2]=c[(c[Db>>2]|0)+12>>2];bx(c[Xb>>2]|0,c[Wb>>2]|0);_B(c[Yb>>2]|0,c[(c[Xb>>2]|0)+76>>2]|0,6048);c[lb>>2]=0;while(1){if((c[lb>>2]|0)>=(c[Bb>>2]|0))break a;b[kb>>1]=b[(c[(c[Db>>2]|0)+4>>2]|0)+(c[lb>>2]<<1)>>1]|0;l=c[Yb>>2]|0;k=b[kb>>1]|0;if((b[kb>>1]|0)<0)m=0;else m=c[(c[(c[Jb>>2]|0)+4>>2]|0)+((b[kb>>1]|0)*24|0)>>2]|0;c[Pb>>2]=c[lb>>2];c[Pb+4>>2]=k;c[Pb+8>>2]=m;$B(l,1,33251,Pb);if(c[(c[Hb>>2]|0)+8>>2]|0){Wb=c[Yb>>2]|0;Ub=c[(c[(c[Db>>2]|0)+32>>2]|0)+(c[lb>>2]<<2)>>2]|0;Vb=(c[lb>>2]|0)<(e[(c[Db>>2]|0)+50>>1]|0)&1;c[Qb>>2]=d[(c[(c[Db>>2]|0)+28>>2]|0)+(c[lb>>2]|0)>>0];c[Qb+4>>2]=Ub;c[Qb+8>>2]=Vb;$B(Wb,4,33255,Qb)}Rw(c[Yb>>2]|0,33,1,c[(c[Xb>>2]|0)+76>>2]|0)|0;c[lb>>2]=(c[lb>>2]|0)+1}}case 17:{if(!(c[$b>>2]|0))break a;c[ja>>2]=pi(c[Zb>>2]|0,c[$b>>2]|0,c[fb>>2]|0)|0;if(!(c[ja>>2]|0))break a;c[Yb>>2]=Pw(c[Xb>>2]|0)|0;c[(c[Xb>>2]|0)+76>>2]=5;bx(c[Xb>>2]|0,c[Wb>>2]|0);_B(c[Yb>>2]|0,5,6072);c[fa>>2]=c[(c[ja>>2]|0)+8>>2];c[I>>2]=0;while(1){if(!(c[fa>>2]|0))break a;c[A>>2]=c[1523];c[A+4>>2]=c[1524];c[A+8>>2]=c[1525];Xb=c[Yb>>2]|0;Tb=c[c[fa>>2]>>2]|0;Ub=(d[(c[fa>>2]|0)+54>>0]|0)!=0&1;Vb=c[A+((a[(c[fa>>2]|0)+55>>0]&3)<<2)>>2]|0;Wb=(c[(c[fa>>2]|0)+36>>2]|0)!=0&1;c[xa>>2]=c[I>>2];c[xa+4>>2]=Tb;c[xa+8>>2]=Ub;c[xa+12>>2]=Vb;c[xa+16>>2]=Wb;$B(Xb,1,33259,xa);Rw(c[Yb>>2]|0,33,1,5)|0;c[fa>>2]=c[(c[fa>>2]|0)+20>>2];c[I>>2]=(c[I>>2]|0)+1}}case 10:{c[(c[Xb>>2]|0)+76>>2]=3;_B(c[Yb>>2]|0,3,6104);c[J>>2]=0;while(1){if((c[J>>2]|0)>=(c[(c[Zb>>2]|0)+20>>2]|0))break a;if(c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[J>>2]<<4)+4>>2]|0){Xb=c[Yb>>2]|0;Ub=c[J>>2]|0;Vb=c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[J>>2]<<4)>>2]|0;Wb=Di(c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[J>>2]<<4)+4>>2]|0)|0;c[ya>>2]=Ub;c[ya+4>>2]=Vb;c[ya+8>>2]=Wb;$B(Xb,1,33265,ya);Rw(c[Yb>>2]|0,33,1,3)|0}c[J>>2]=(c[J>>2]|0)+1}}case 7:{c[K>>2]=0;c[(c[Xb>>2]|0)+76>>2]=2;_B(c[Yb>>2]|0,2,6116);c[_>>2]=c[(c[Zb>>2]|0)+432+8>>2];while(1){if(!(c[_>>2]|0))break a;c[ca>>2]=c[(c[_>>2]|0)+8>>2];Xb=c[Yb>>2]|0;Vb=c[K>>2]|0;c[K>>2]=Vb+1;Wb=c[c[ca>>2]>>2]|0;c[za>>2]=Vb;c[za+4>>2]=Wb;$B(Xb,1,33269,za);Rw(c[Yb>>2]|0,33,1,2)|0;c[_>>2]=c[c[_>>2]>>2]}}case 14:{if(!(c[$b>>2]|0))break a;c[ka>>2]=pi(c[Zb>>2]|0,c[$b>>2]|0,c[fb>>2]|0)|0;if(!(c[ka>>2]|0))break a;c[Yb>>2]=Pw(c[Xb>>2]|0)|0;c[da>>2]=c[(c[ka>>2]|0)+16>>2];if(!(c[da>>2]|0))break a;c[L>>2]=0;c[(c[Xb>>2]|0)+76>>2]=8;bx(c[Xb>>2]|0,c[Wb>>2]|0);_B(c[Yb>>2]|0,8,6124);while(1){if(!(c[da>>2]|0))break a;c[W>>2]=0;while(1){if((c[W>>2]|0)>=(c[(c[da>>2]|0)+20>>2]|0))break;Xb=c[Yb>>2]|0;Qb=c[L>>2]|0;Rb=c[W>>2]|0;Sb=c[(c[da>>2]|0)+8>>2]|0;Tb=c[(c[(c[ka>>2]|0)+4>>2]|0)+((c[(c[da>>2]|0)+36+(c[W>>2]<<3)>>2]|0)*24|0)>>2]|0;Ub=c[(c[da>>2]|0)+36+(c[W>>2]<<3)+4>>2]|0;Vb=bC(a[(c[da>>2]|0)+25+1>>0]|0)|0;Wb=bC(a[(c[da>>2]|0)+25>>0]|0)|0;c[Aa>>2]=Qb;c[Aa+4>>2]=Rb;c[Aa+8>>2]=Sb;c[Aa+12>>2]=Tb;c[Aa+16>>2]=Ub;c[Aa+20>>2]=Vb;c[Aa+24>>2]=Wb;c[Aa+28>>2]=33281;$B(Xb,1,33272,Aa);Rw(c[Yb>>2]|0,33,1,8)|0;c[W>>2]=(c[W>>2]|0)+1}c[L>>2]=(c[L>>2]|0)+1;c[da>>2]=c[(c[da>>2]|0)+4>>2]}}case 13:{c[ab>>2]=(c[(c[Xb>>2]|0)+76>>2]|0)+1;Ub=(c[Xb>>2]|0)+76|0;c[Ub>>2]=(c[Ub>>2]|0)+4;Ub=(c[Xb>>2]|0)+76|0;Tb=(c[Ub>>2]|0)+1|0;c[Ub>>2]=Tb;c[$a>>2]=Tb;Tb=(c[Xb>>2]|0)+76|0;Ub=(c[Tb>>2]|0)+1|0;c[Tb>>2]=Ub;c[bb>>2]=Ub;c[Yb>>2]=Pw(c[Xb>>2]|0)|0;_B(c[Yb>>2]|0,4,6156);bx(c[Xb>>2]|0,c[Wb>>2]|0);c[Sa>>2]=c[(c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[Wb>>2]<<4)+12>>2]|0)+8+8>>2];while(1){if(!(c[Sa>>2]|0))break a;if(c[$b>>2]|0){c[_a>>2]=zh(c[Xb>>2]|0,0,c[$b>>2]|0,c[fb>>2]|0)|0;c[Sa>>2]=0}else{c[_a>>2]=c[(c[Sa>>2]|0)+8>>2];c[Sa>>2]=c[c[Sa>>2]>>2]}if(!(c[_a>>2]|0))continue;if(!(c[(c[_a>>2]|0)+16>>2]|0))continue;yz(c[Xb>>2]|0,c[Wb>>2]|0,c[(c[_a>>2]|0)+28>>2]|0,0,c[c[_a>>2]>>2]|0);if(((b[(c[_a>>2]|0)+34>>1]|0)+(c[bb>>2]|0)|0)>(c[(c[Xb>>2]|0)+76>>2]|0))c[(c[Xb>>2]|0)+76>>2]=(b[(c[_a>>2]|0)+34>>1]|0)+(c[bb>>2]|0);zz(c[Xb>>2]|0,0,c[Wb>>2]|0,c[_a>>2]|0,54);Tw(c[Yb>>2]|0,c[ab>>2]|0,c[c[_a>>2]>>2]|0)|0;c[Na>>2]=1;c[Va>>2]=c[(c[_a>>2]|0)+16>>2];d:while(1){if(!(c[Va>>2]|0))break;c[Xa>>2]=pi(c[Zb>>2]|0,c[(c[Va>>2]|0)+8>>2]|0,c[fb>>2]|0)|0;do if(c[Xa>>2]|0){c[Wa>>2]=0;yz(c[Xb>>2]|0,c[Wb>>2]|0,c[(c[Xa>>2]|0)+28>>2]|0,0,c[c[Xa>>2]>>2]|0);c[eb>>2]=cC(c[Xb>>2]|0,c[Xa>>2]|0,c[Va>>2]|0,Wa,0)|0;if(c[eb>>2]|0){Vb=207;break d}if(!(c[Wa>>2]|0)){zz(c[Xb>>2]|0,c[Na>>2]|0,c[Wb>>2]|0,c[Xa>>2]|0,54);break}else{Vw(c[Yb>>2]|0,54,c[Na>>2]|0,c[(c[Wa>>2]|0)+44>>2]|0,c[Wb>>2]|0)|0;Az(c[Xb>>2]|0,c[Wa>>2]|0);break}}while(0);c[Na>>2]=(c[Na>>2]|0)+1;c[Va>>2]=c[(c[Va>>2]|0)+4>>2]}if((Vb|0)==207){Vb=0;c[Sa>>2]=0}if(c[Va>>2]|0)break a;if((c[(c[Xb>>2]|0)+72>>2]|0)<(c[Na>>2]|0))c[(c[Xb>>2]|0)+72>>2]=c[Na>>2];c[Ka>>2]=xz(c[Yb>>2]|0,108,0)|0;c[Na>>2]=1;c[Va>>2]=c[(c[_a>>2]|0)+16>>2];while(1){if(!(c[Va>>2]|0))break;c[Xa>>2]=pi(c[Zb>>2]|0,c[(c[Va>>2]|0)+8>>2]|0,c[fb>>2]|0)|0;c[Wa>>2]=0;c[La>>2]=0;if(c[Xa>>2]|0)c[eb>>2]=cC(c[Xb>>2]|0,c[Xa>>2]|0,c[Va>>2]|0,Wa,La)|0;c[Ja>>2]=Cz(c[Yb>>2]|0)|0;do if((c[Xa>>2]|0)!=0&(c[Wa>>2]|0)==0){c[Oa>>2]=c[(c[Va>>2]|0)+36>>2];l=c[Yb>>2]|0;if((c[Oa>>2]|0)!=(b[(c[_a>>2]|0)+32>>1]|0)){Vw(l,47,0,c[Oa>>2]|0,c[bb>>2]|0)|0;vA(c[Yb>>2]|0,c[_a>>2]|0,c[Oa>>2]|0,c[bb>>2]|0);Rw(c[Yb>>2]|0,76,c[bb>>2]|0,c[Ja>>2]|0)|0;Tb=c[Yb>>2]|0;Ub=c[bb>>2]|0;Rw(Tb,38,Ub,(Bz(c[Yb>>2]|0)|0)+3|0)|0}else Rw(l,103,0,c[bb>>2]|0)|0;Vw(c[Yb>>2]|0,70,c[Na>>2]|0,0,c[bb>>2]|0)|0;Ez(c[Yb>>2]|0,c[Ja>>2]|0)|0;Ub=c[Yb>>2]|0;Fz(Ub,(Bz(c[Yb>>2]|0)|0)-2|0)}else{c[Qa>>2]=0;while(1){if((c[Qa>>2]|0)>=(c[(c[Va>>2]|0)+20>>2]|0))break;l=c[Qa>>2]|0;if(c[La>>2]|0)l=c[(c[La>>2]|0)+(l<<2)>>2]|0;else l=c[(c[Va>>2]|0)+36+(l<<3)>>2]|0;tA(c[Yb>>2]|0,c[_a>>2]|0,0,l,(c[bb>>2]|0)+(c[Qa>>2]|0)|0);Rw(c[Yb>>2]|0,76,(c[bb>>2]|0)+(c[Qa>>2]|0)|0,c[Ja>>2]|0)|0;c[Qa>>2]=(c[Qa>>2]|0)+1}if(!(c[Xa>>2]|0))break;Qb=c[Yb>>2]|0;Rb=c[bb>>2]|0;Sb=c[(c[Va>>2]|0)+20>>2]|0;Tb=c[$a>>2]|0;Ub=dC(c[Zb>>2]|0,c[Wa>>2]|0)|0;Uw(Qb,49,Rb,Sb,Tb,Ub,c[(c[Va>>2]|0)+20>>2]|0)|0;Eh(c[Yb>>2]|0,69,c[Na>>2]|0,c[Ja>>2]|0,c[$a>>2]|0,0)|0}while(0);Rw(c[Yb>>2]|0,103,0,(c[ab>>2]|0)+1|0)|0;Tb=c[Yb>>2]|0;Ub=(c[ab>>2]|0)+2|0;Sb=(c[Na>>2]|0)-1|0;c[db>>2]=c[(c[Va>>2]|0)+8>>2];c[db+4>>2]=Sb;$B(Tb,Ub,33286,db);Rw(c[Yb>>2]|0,33,c[ab>>2]|0,4)|0;Gz(c[Yb>>2]|0,c[Ja>>2]|0);Sf(c[Zb>>2]|0,c[La>>2]|0);c[Na>>2]=(c[Na>>2]|0)+1;c[Va>>2]=c[(c[Va>>2]|0)+4>>2]}Rw(c[Yb>>2]|0,7,0,(c[Ka>>2]|0)+1|0)|0;Fz(c[Yb>>2]|0,c[Ka>>2]|0)}}case 6:{if(!(c[$b>>2]|0))break a;Yb=c[Zb>>2]|0;eC(Yb,(Bi(c[$b>>2]|0,0)|0)&255);break a}case 18:{c[qb>>2]=(d[18477+(d[c[_b>>2]>>0]|0)>>0]|0)==113&1;if(!(c[c[s>>2]>>2]|0))c[Wb>>2]=-1;c[(c[Xb>>2]|0)+76>>2]=6;MB(c[Yb>>2]|0,33289);c[Cb>>2]=100;if((c[$b>>2]|0)!=0?(Li(c[$b>>2]|0,Cb)|0,(c[Cb>>2]|0)<=0):0)c[Cb>>2]=100;Rw(c[Yb>>2]|0,22,c[Cb>>2]|0,1)|0;c[mb>>2]=0;while(1){if((c[mb>>2]|0)>=(c[(c[Zb>>2]|0)+20>>2]|0))break;c[jb>>2]=0;if(!((c[Wb>>2]|0)>=0?(c[mb>>2]|0)!=(c[Wb>>2]|0):0))Vb=242;e:do if((Vb|0)==242){Vb=0;bx(c[Xb>>2]|0,c[mb>>2]|0);c[hb>>2]=xz(c[Yb>>2]|0,138,1)|0;Rw(c[Yb>>2]|0,21,0,0)|0;Fz(c[Yb>>2]|0,c[hb>>2]|0);c[Mb>>2]=(c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[mb>>2]<<4)+12>>2]|0)+8;c[Tb>>2]=c[(c[Mb>>2]|0)+8>>2];while(1){if(!(c[Tb>>2]|0))break;c[Kb>>2]=c[(c[Tb>>2]|0)+8>>2];if(!(d[(c[Kb>>2]|0)+42>>0]&32)){Rw(c[Yb>>2]|0,22,c[(c[Kb>>2]|0)+28>>2]|0,2+(c[jb>>2]|0)|0)|0;c[jb>>2]=(c[jb>>2]|0)+1}c[Eb>>2]=c[(c[Kb>>2]|0)+8>>2];while(1){if(!(c[Eb>>2]|0))break;Rw(c[Yb>>2]|0,22,c[(c[Eb>>2]|0)+44>>2]|0,2+(c[jb>>2]|0)|0)|0;c[jb>>2]=(c[jb>>2]|0)+1;c[Eb>>2]=c[(c[Eb>>2]|0)+20>>2]}c[Tb>>2]=c[c[Tb>>2]>>2]}if((c[(c[Xb>>2]|0)+76>>2]|0)>((c[jb>>2]|0)+8|0))l=c[(c[Xb>>2]|0)+76>>2]|0;else l=(c[jb>>2]|0)+8|0;c[(c[Xb>>2]|0)+76>>2]=l;Vw(c[Yb>>2]|0,128,2,c[jb>>2]|0,1)|0;Fh(c[Yb>>2]|0,c[mb>>2]&255);c[hb>>2]=xz(c[Yb>>2]|0,76,2)|0;Pb=c[Yb>>2]|0;Qb=c[Zb>>2]|0;c[Rb>>2]=c[(c[(c[Zb>>2]|0)+16>>2]|0)+(c[mb>>2]<<4)>>2];Uw(Pb,97,0,3,0,Bh(Qb,33305,Rb)|0,-1)|0;Vw(c[Yb>>2]|0,29,2,4,1)|0;Vw(c[Yb>>2]|0,94,4,3,2)|0;Rw(c[Yb>>2]|0,33,2,1)|0;Fz(c[Yb>>2]|0,c[hb>>2]|0);c[Tb>>2]=c[(c[Mb>>2]|0)+8>>2];while(1){if(!(c[Tb>>2]|0))break e;if(!((c[qb>>2]|0)!=0^1))break e;c[Lb>>2]=c[(c[Tb>>2]|0)+8>>2];c[Ib>>2]=0;c[Nb>>2]=-1;f:do if(c[(c[Lb>>2]|0)+8>>2]|0){if(!(d[(c[Lb>>2]|0)+42>>0]&32))l=0;else l=Ej(c[Lb>>2]|0)|0;c[Gb>>2]=l;c[hb>>2]=xz(c[Yb>>2]|0,138,1)|0;Rw(c[Yb>>2]|0,21,0,0)|0;Fz(c[Yb>>2]|0,c[hb>>2]|0);fC(c[Xb>>2]|0);gC(c[Xb>>2]|0,c[Lb>>2]|0,54,0,1,0,ob,pb)|0;Rw(c[Yb>>2]|0,22,0,7)|0;c[rb>>2]=0;c[Fb>>2]=c[(c[Lb>>2]|0)+8>>2];while(1){if(!(c[Fb>>2]|0))break;Rw(c[Yb>>2]|0,22,0,8+(c[rb>>2]|0)|0)|0;c[Fb>>2]=c[(c[Fb>>2]|0)+20>>2];c[rb>>2]=(c[rb>>2]|0)+1}if((c[(c[Xb>>2]|0)+76>>2]|0)>(8+(c[rb>>2]|0)|0))l=c[(c[Xb>>2]|0)+76>>2]|0;else l=8+(c[rb>>2]|0)|0;c[(c[Xb>>2]|0)+76>>2]=l;Rw(c[Yb>>2]|0,108,c[ob>>2]|0,0)|0;c[Ab>>2]=Rw(c[Yb>>2]|0,37,7,1)|0;c[rb>>2]=0;while(1){if((c[rb>>2]|0)>=(b[(c[Lb>>2]|0)+34>>1]|0))break;do if((c[rb>>2]|0)!=(b[(c[Lb>>2]|0)+32>>1]|0)){if(!(d[(c[(c[Lb>>2]|0)+4>>2]|0)+((c[rb>>2]|0)*24|0)+20>>0]|0))break;tA(c[Yb>>2]|0,c[Lb>>2]|0,c[ob>>2]|0,c[rb>>2]|0,3);Fh(c[Yb>>2]|0,-128);c[sb>>2]=xz(c[Yb>>2]|0,77,3)|0;Rw(c[Yb>>2]|0,37,1,-1)|0;Qb=c[Zb>>2]|0;Pb=c[(c[(c[Lb>>2]|0)+4>>2]|0)+((c[rb>>2]|0)*24|0)>>2]|0;c[Sb>>2]=c[c[Lb>>2]>>2];c[Sb+4>>2]=Pb;c[Ub>>2]=Bh(Qb,33329,Sb)|0;Uw(c[Yb>>2]|0,97,0,3,0,c[Ub>>2]|0,-1)|0;Rw(c[Yb>>2]|0,33,3,1)|0;c[ub>>2]=xz(c[Yb>>2]|0,138,1)|0;Yw(c[Yb>>2]|0,21)|0;Fz(c[Yb>>2]|0,c[sb>>2]|0);Fz(c[Yb>>2]|0,c[ub>>2]|0)}while(0);c[rb>>2]=(c[rb>>2]|0)+1}c[rb>>2]=0;c[Fb>>2]=c[(c[Lb>>2]|0)+8>>2];while(1){l=c[Yb>>2]|0;if(!(c[Fb>>2]|0))break;c[ib>>2]=Cz(l)|0;if((c[Gb>>2]|0)!=(c[Fb>>2]|0)){c[Nb>>2]=Xz(c[Xb>>2]|0,c[Fb>>2]|0,c[ob>>2]|0,0,0,vb,c[Ib>>2]|0,c[Nb>>2]|0)|0;c[Ib>>2]=c[Fb>>2];Rw(c[Yb>>2]|0,37,8+(c[rb>>2]|0)|0,1)|0;c[tb>>2]=Eh(c[Yb>>2]|0,69,(c[pb>>2]|0)+(c[rb>>2]|0)|0,c[ib>>2]|0,c[Nb>>2]|0,e[(c[Fb>>2]|0)+52>>1]|0)|0;Rw(c[Yb>>2]|0,37,1,-1)|0;Tw(c[Yb>>2]|0,3,33349)|0;Vw(c[Yb>>2]|0,94,7,3,3)|0;Tw(c[Yb>>2]|0,4,33354)|0;Vw(c[Yb>>2]|0,94,4,3,3)|0;c[xb>>2]=Tw(c[Yb>>2]|0,4,c[c[Fb>>2]>>2]|0)|0;Vw(c[Yb>>2]|0,94,4,3,3)|0;Rw(c[Yb>>2]|0,33,3,1)|0;c[wb>>2]=xz(c[Yb>>2]|0,138,1)|0;Yw(c[Yb>>2]|0,21)|0;Fz(c[Yb>>2]|0,c[tb>>2]|0);if(d[(c[Fb>>2]|0)+54>>0]|0){c[Ob>>2]=Cz(c[Yb>>2]|0)|0;c[zb>>2]=0;while(1){if((c[zb>>2]|0)>=(e[(c[Fb>>2]|0)+50>>1]|0))break;c[nb>>2]=b[(c[(c[Fb>>2]|0)+4>>2]|0)+(c[zb>>2]<<1)>>1];if(!((c[nb>>2]|0)>=0?(d[(c[(c[Lb>>2]|0)+4>>2]|0)+((c[nb>>2]|0)*24|0)+20>>0]|0)!=0:0))Rw(c[Yb>>2]|0,76,(c[Nb>>2]|0)+(c[zb>>2]|0)|0,c[Ob>>2]|0)|0;c[zb>>2]=(c[zb>>2]|0)+1}c[yb>>2]=xz(c[Yb>>2]|0,7,(c[pb>>2]|0)+(c[rb>>2]|0)|0)|0;Ez(c[Yb>>2]|0,c[Ob>>2]|0)|0;Fz(c[Yb>>2]|0,c[yb>>2]|0);Eh(c[Yb>>2]|0,115,(c[pb>>2]|0)+(c[rb>>2]|0)|0,c[Ob>>2]|0,c[Nb>>2]|0,e[(c[Fb>>2]|0)+50>>1]|0)|0;Rw(c[Yb>>2]|0,37,1,-1)|0;Tw(c[Yb>>2]|0,3,33375)|0;Ez(c[Yb>>2]|0,c[xb>>2]|0)|0;Gz(c[Yb>>2]|0,c[Ob>>2]|0)}Fz(c[Yb>>2]|0,c[wb>>2]|0);Yz(c[Xb>>2]|0,c[vb>>2]|0)}c[Fb>>2]=c[(c[Fb>>2]|0)+20>>2];c[rb>>2]=(c[rb>>2]|0)+1}Rw(l,7,c[ob>>2]|0,c[Ab>>2]|0)|0;Fz(c[Yb>>2]|0,(c[Ab>>2]|0)-1|0);Tw(c[Yb>>2]|0,2,33402)|0;c[rb>>2]=0;c[Fb>>2]=c[(c[Lb>>2]|0)+8>>2];while(1){if(!(c[Fb>>2]|0))break f;if((c[Gb>>2]|0)!=(c[Fb>>2]|0)){c[hb>>2]=Bz(c[Yb>>2]|0)|0;Rw(c[Yb>>2]|0,138,1,(c[hb>>2]|0)+2|0)|0;Rw(c[Yb>>2]|0,21,0,0)|0;Rw(c[Yb>>2]|0,50,(c[pb>>2]|0)+(c[rb>>2]|0)|0,3)|0;Vw(c[Yb>>2]|0,79,8+(c[rb>>2]|0)|0,(c[hb>>2]|0)+8|0,3)|0;Fh(c[Yb>>2]|0,-112);Rw(c[Yb>>2]|0,37,1,-1)|0;Tw(c[Yb>>2]|0,3,c[c[Fb>>2]>>2]|0)|0;Vw(c[Yb>>2]|0,94,3,2,7)|0;Rw(c[Yb>>2]|0,33,7,1)|0}c[Fb>>2]=c[(c[Fb>>2]|0)+20>>2];c[rb>>2]=(c[rb>>2]|0)+1}}while(0);c[Tb>>2]=c[c[Tb>>2]>>2]}}while(0);c[mb>>2]=(c[mb>>2]|0)+1}c[gb>>2]=Gh(c[Yb>>2]|0,4,33431,0)|0;if(!(c[gb>>2]|0))break a;c[(c[gb>>2]|0)+8>>2]=0-(c[Cb>>2]|0);a[(c[gb>>2]|0)+40+1>>0]=-2;c[(c[gb>>2]|0)+40+16>>2]=33447;break a}case 12:{if(!(c[$b>>2]|0)){if(pz(c[Xb>>2]|0)|0)break a;LB(c[Yb>>2]|0,33450,c[6172+(d[(c[c[Xb>>2]>>2]|0)+62>>0]<<3)>>2]|0);break a}if((e[(c[(c[(c[Zb>>2]|0)+16>>2]|0)+12>>2]|0)+78>>1]&1|0)==1?(e[(c[(c[(c[Zb>>2]|0)+16>>2]|0)+12>>2]|0)+78>>1]&4|0)!=4:0)break a;c[Ha>>2]=6172;while(1){if(!(c[c[Ha>>2]>>2]|0))break;Yb=0==(Td(c[$b>>2]|0,c[c[Ha>>2]>>2]|0)|0);l=c[Ha>>2]|0;if(Yb){Vb=301;break}c[Ha>>2]=l+8}if((Vb|0)==301){if(d[l+4>>0]|0)l=d[(c[Ha>>2]|0)+4>>0]|0;else l=(a[960]|0)==0?3:2;Yb=l&255;a[(c[Zb>>2]|0)+62>>0]=Yb;a[(c[(c[(c[Zb>>2]|0)+16>>2]|0)+12>>2]|0)+77>>0]=Yb}if(c[c[Ha>>2]>>2]|0)break a;Yb=c[Xb>>2]|0;c[Ia>>2]=c[$b>>2];Ah(Yb,33459,Ia);break a}case 0:{c[P>>2]=c[(c[Hb>>2]|0)+8>>2];Hh(c[Yb>>2]|0,c[Wb>>2]|0);if((c[$b>>2]|0)!=0?(d[(c[Hb>>2]|0)+5>>0]&2|0)==0:0){c[w>>2]=Gh(c[Yb>>2]|0,2,33484,0)|0;c[(c[w>>2]|0)+4>>2]=c[Wb>>2];c[(c[w>>2]|0)+20+4>>2]=c[Wb>>2];c[(c[w>>2]|0)+20+8>>2]=c[P>>2];Yb=Ki(c[$b>>2]|0)|0;c[(c[w>>2]|0)+20+12>>2]=Yb;break a}c[x>>2]=Gh(c[Yb>>2]|0,3,33492,0)|0;c[(c[x>>2]|0)+4>>2]=c[Wb>>2];c[(c[x>>2]|0)+20+4>>2]=c[Wb>>2];c[(c[x>>2]|0)+20+12>>2]=c[P>>2];OB(c[Yb>>2]|0,1);PB(c[Yb>>2]|0,0,0,c[_b>>2]|0,-1)|0;break a}case 8:{c[M>>2]=0;c[(c[Xb>>2]|0)+76>>2]=1;MB(c[Yb>>2]|0,33504);while(1){Xb=c[M>>2]|0;c[M>>2]=Xb+1;Xb=Ad(Xb)|0;c[Ca>>2]=Xb;if(!Xb)break a;Tw(c[Yb>>2]|0,1,c[Ca>>2]|0)|0;Rw(c[Yb>>2]|0,33,1,1)|0}}case 36:{c[O>>2]=(c[c[s>>2]>>2]|0)!=0?c[Wb>>2]|0:10;c[G>>2]=0;do if(c[$b>>2]|0){if(!(Td(c[$b>>2]|0,33519)|0)){c[G>>2]=1;break}if(!(Td(c[$b>>2]|0,33524)|0)){c[G>>2]=2;break}if(!(Td(c[$b>>2]|0,33532)|0))c[G>>2]=3}while(0);_B(c[Yb>>2]|0,3,6244);c[(c[Xb>>2]|0)+76>>2]=3;Vw(c[Yb>>2]|0,8,c[O>>2]|0,c[G>>2]|0,1)|0; +Rw(c[Yb>>2]|0,33,1,3)|0;break a}case 35:{if(c[$b>>2]|0){Xb=c[Zb>>2]|0;yf(Xb,Ki(c[$b>>2]|0)|0)|0}if((c[(c[Zb>>2]|0)+216>>2]|0)==139)l=c[(c[Zb>>2]|0)+220>>2]|0;else l=0;NB(c[Yb>>2]|0,33541,l,((l|0)<0)<<31>>31);break a}case 27:{nf(c[Zb>>2]|0)|0;break a}case 28:{if((c[$b>>2]|0)!=0?(Ci(c[$b>>2]|0,t)|0)==0:0){Xb=t;Gd(c[Xb>>2]|0,c[Xb+4>>2]|0)|0}Xb=c[Yb>>2]|0;Yb=Gd(-1,-1)|0;NB(Xb,33568,Yb,C);break a}case 34:{if((c[$b>>2]|0)!=0?(Vb=(Ci(c[$b>>2]|0,u)|0)==0,Xb=u,Wb=c[Xb+4>>2]|0,Vb&((Wb|0)>0|(Wb|0)==0&(c[Xb>>2]|0)>>>0>=0)):0)Df(c[Zb>>2]|0,11,c[u>>2]&2147483647)|0;Xb=c[Yb>>2]|0;Yb=Df(c[Zb>>2]|0,11,-1)|0;NB(Xb,33584,Yb,((Yb|0)<0)<<31>>31);break a}default:{if(c[$b>>2]|0){Xb=c[Zb>>2]|0;uf(Xb,Ki(c[$b>>2]|0)|0)|0}Xb=c[(c[Zb>>2]|0)+496>>2]|0;NB(c[Yb>>2]|0,33560,Xb,((Xb|0)<0)<<31>>31);break a}}while(0)}}while(0);Sf(c[Zb>>2]|0,c[_b>>2]|0);Sf(c[Zb>>2]|0,c[$b>>2]|0);i=ac;return}function iw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+112|0;t=w+24|0;s=w;f=w+108|0;g=w+104|0;h=w+100|0;p=w+96|0;v=w+92|0;j=w+88|0;q=w+64|0;k=w+56|0;l=w+48|0;r=w+44|0;u=w+40|0;n=w+36|0;m=w+32|0;o=w+28|0;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[p>>2]=c[(c[f>>2]|0)+492>>2];c[j>>2]=c[c[f>>2]>>2];c[(c[f>>2]|0)+492>>2]=0;do if((c[p>>2]|0)!=0?(c[(c[f>>2]|0)+68>>2]|0)==0:0){c[v>>2]=c[c[p>>2]>>2];c[k>>2]=Dh(c[c[f>>2]>>2]|0,c[(c[p>>2]|0)+20>>2]|0)|0;c[(c[p>>2]|0)+28>>2]=c[g>>2];while(1){e=c[p>>2]|0;if(!(c[g>>2]|0))break;c[(c[g>>2]|0)+4>>2]=e;c[g>>2]=c[(c[g>>2]|0)+28>>2]}Cy(l,c[e>>2]|0);EB(q,c[f>>2]|0,c[k>>2]|0,19528,l);if((JB(q,c[(c[p>>2]|0)+28>>2]|0)|0)==0?(HB(q,c[(c[p>>2]|0)+12>>2]|0)|0)==0:0){if(!(a[(c[j>>2]|0)+140+5>>0]|0)){c[r>>2]=Pw(c[f>>2]|0)|0;if(!(c[r>>2]|0))break;ax(c[f>>2]|0,0,c[k>>2]|0);c[u>>2]=Iw(c[j>>2]|0,c[c[h>>2]>>2]|0,c[(c[h>>2]|0)+4>>2]|0,0)|0;q=c[f>>2]|0;b=(c[k>>2]|0)==1?20769:20788;d=c[v>>2]|0;h=c[(c[p>>2]|0)+4>>2]|0;l=c[u>>2]|0;c[s>>2]=c[(c[(c[j>>2]|0)+16>>2]|0)+(c[k>>2]<<4)>>2];c[s+4>>2]=b;c[s+8>>2]=d;c[s+12>>2]=h;c[s+16>>2]=l;Ow(q,32822,s);Sf(c[j>>2]|0,c[u>>2]|0);Qw(c[f>>2]|0,c[k>>2]|0);r=c[r>>2]|0;s=c[k>>2]|0;u=c[j>>2]|0;c[t>>2]=c[v>>2];Sw(r,s,Bh(u,32886,t)|0)}if(a[(c[j>>2]|0)+140+5>>0]|0){c[n>>2]=c[p>>2];c[m>>2]=(c[(c[(c[j>>2]|0)+16>>2]|0)+(c[k>>2]<<4)+12>>2]|0)+40;c[p>>2]=Oj(c[m>>2]|0,c[v>>2]|0,c[p>>2]|0)|0;if(c[p>>2]|0){jh(c[j>>2]|0);break}if((c[(c[n>>2]|0)+20>>2]|0)==(c[(c[n>>2]|0)+24>>2]|0)){c[o>>2]=nj((c[(c[n>>2]|0)+24>>2]|0)+8|0,c[(c[n>>2]|0)+4>>2]|0)|0;c[(c[n>>2]|0)+32>>2]=c[(c[o>>2]|0)+60>>2];c[(c[o>>2]|0)+60>>2]=c[n>>2]}}}}while(0);Pf(c[j>>2]|0,c[p>>2]|0);bv(c[j>>2]|0,c[g>>2]|0);i=w;return}function jw(b,e,f,g,h,j,k,l,m,n){b=b|0;e=e|0;f=f|0;g=g|0;h=h|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,M=0,N=0,O=0,P=0,Q=0;Q=i;i=i+160|0;v=Q+48|0;u=Q+32|0;t=Q+24|0;F=Q+16|0;s=Q+8|0;r=Q;I=Q+156|0;o=Q+152|0;p=Q+148|0;x=Q+144|0;y=Q+140|0;J=Q+136|0;K=Q+132|0;L=Q+128|0;z=Q+124|0;A=Q+120|0;O=Q+116|0;E=Q+112|0;P=Q+108|0;M=Q+104|0;N=Q+100|0;D=Q+96|0;q=Q+72|0;C=Q+68|0;B=Q+64|0;G=Q+60|0;H=Q+56|0;c[I>>2]=b;c[o>>2]=e;c[p>>2]=f;c[x>>2]=g;c[y>>2]=h;c[J>>2]=j;c[K>>2]=k;c[L>>2]=l;c[z>>2]=m;c[A>>2]=n;c[O>>2]=0;c[P>>2]=0;c[M>>2]=c[c[I>>2]>>2];do if(c[z>>2]|0)if((c[(c[p>>2]|0)+4>>2]|0)>>>0<=0){c[N>>2]=1;c[D>>2]=c[o>>2];if(c[K>>2]|0){w=6;break}else break}else{Ah(c[I>>2]|0,32505,r);break}else{c[N>>2]=tz(c[I>>2]|0,c[o>>2]|0,c[p>>2]|0,D)|0;if((c[N>>2]|0)>=0&(c[K>>2]|0)!=0)w=6}while(0);do if((w|0)==6?(d[(c[M>>2]|0)+65>>0]|0)==0:0){if((c[N>>2]|0)!=1?(d[(c[M>>2]|0)+140+5>>0]|0)!=0:0){Sf(c[M>>2]|0,c[(c[K>>2]|0)+8+4>>2]|0);c[(c[K>>2]|0)+8+4>>2]=0}c[E>>2]=DB(c[I>>2]|0,c[K>>2]|0)|0;if(((d[(c[M>>2]|0)+140+5>>0]|0)==0?(c[E>>2]|0)!=0?(c[(c[p>>2]|0)+4>>2]|0)==0:0:0)?(c[(c[E>>2]|0)+64>>2]|0)==(c[(c[(c[M>>2]|0)+16>>2]|0)+16+12>>2]|0):0)c[N>>2]=1;if((a[(c[M>>2]|0)+65>>0]|0)==0?(EB(q,c[I>>2]|0,c[N>>2]|0,19528,c[D>>2]|0),(FB(q,c[K>>2]|0)|0)==0):0){c[E>>2]=DB(c[I>>2]|0,c[K>>2]|0)|0;if(!(c[E>>2]|0)){if((d[(c[M>>2]|0)+140+4>>0]|0)!=1)break;a[(c[M>>2]|0)+140+6>>0]=1;break}if(d[(c[E>>2]|0)+42>>0]&16){Ah(c[I>>2]|0,32551,s);break}c[P>>2]=Dw(c[M>>2]|0,c[D>>2]|0)|0;if((c[P>>2]|0)!=0?0==(yx(c[I>>2]|0,c[P>>2]|0)|0):0){if(nj((c[(c[(c[M>>2]|0)+16>>2]|0)+(c[N>>2]<<4)+12>>2]|0)+40|0,c[P>>2]|0)|0){o=c[I>>2]|0;if(c[A>>2]|0){bx(o,c[N>>2]|0);break}else{c[F>>2]=c[D>>2];Ah(o,32592,F);break}}if(!(zd(c[c[E>>2]>>2]|0,28715,7)|0)){Ah(c[I>>2]|0,32618,t);break}if((c[x>>2]|0)!=49?(c[(c[E>>2]|0)+12>>2]|0)!=0:0){N=c[I>>2]|0;H=c[K>>2]|0;c[u>>2]=(c[x>>2]|0)==35?32656:32663;c[u+4>>2]=H;c[u+8>>2]=0;Ah(N,32669,u);break}if((c[x>>2]|0)==49?(c[(c[E>>2]|0)+12>>2]|0)==0:0){N=c[I>>2]|0;c[v>>2]=c[K>>2];c[v+4>>2]=0;Ah(N,32706,v);break}c[C>>2]=Dh(c[M>>2]|0,c[(c[E>>2]|0)+64>>2]|0)|0;c[B>>2]=7;c[G>>2]=c[(c[(c[M>>2]|0)+16>>2]|0)+(c[C>>2]<<4)>>2];if(c[z>>2]|0)o=c[(c[(c[M>>2]|0)+16>>2]|0)+16>>2]|0;else o=c[G>>2]|0;c[H>>2]=o;if((c[C>>2]|0)==1|(c[z>>2]|0)!=0)c[B>>2]=5;if((Mw(c[I>>2]|0,c[B>>2]|0,c[P>>2]|0,c[c[E>>2]>>2]|0,c[H>>2]|0)|0)==0?(Mw(c[I>>2]|0,18,(c[C>>2]|0)==1?20769:20788,0,c[G>>2]|0)|0)==0:0){if((c[x>>2]|0)==49)c[x>>2]=35;c[O>>2]=ph(c[M>>2]|0,36,0)|0;if(!(c[O>>2]|0))break;c[c[O>>2]>>2]=c[P>>2];c[P>>2]=0;H=nh(c[M>>2]|0,c[(c[K>>2]|0)+8+8>>2]|0)|0;c[(c[O>>2]|0)+4>>2]=H;c[(c[O>>2]|0)+20>>2]=c[(c[(c[M>>2]|0)+16>>2]|0)+(c[N>>2]<<4)+12>>2];c[(c[O>>2]|0)+24>>2]=c[(c[E>>2]|0)+64>>2];a[(c[O>>2]|0)+8>>0]=c[y>>2];a[(c[O>>2]|0)+9>>0]=(c[x>>2]|0)==35?1:2;N=ny(c[M>>2]|0,c[L>>2]|0,1)|0;c[(c[O>>2]|0)+12>>2]=N;N=nz(c[M>>2]|0,c[J>>2]|0)|0;c[(c[O>>2]|0)+16>>2]=N;c[(c[I>>2]|0)+492>>2]=c[O>>2]}}}}while(0);Sf(c[M>>2]|0,c[P>>2]|0);Yu(c[M>>2]|0,c[K>>2]|0);_u(c[M>>2]|0,c[J>>2]|0);Zu(c[M>>2]|0,c[L>>2]|0);if(c[(c[I>>2]|0)+492>>2]|0){i=Q;return}Pf(c[M>>2]|0,c[O>>2]|0);i=Q;return}function kw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;h=n+16|0;o=n+12|0;j=n+8|0;k=n+4|0;l=n+20|0;m=n;c[h>>2]=b;c[o>>2]=d;c[j>>2]=e;c[k>>2]=f;a[l>>0]=g;c[m>>2]=CB(c[h>>2]|0,110,c[o>>2]|0)|0;if(c[m>>2]|0){o=vy(c[h>>2]|0,c[j>>2]|0,1)|0;c[(c[m>>2]|0)+20>>2]=o;o=ny(c[h>>2]|0,c[k>>2]|0,1)|0;c[(c[m>>2]|0)+16>>2]=o;a[(c[m>>2]|0)+1>>0]=a[l>>0]|0}Vu(c[h>>2]|0,c[j>>2]|0);Zu(c[h>>2]|0,c[k>>2]|0);i=n;return c[m>>2]|0}function lw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+32|0;h=n+16|0;o=n+12|0;j=n+8|0;k=n+4|0;l=n+20|0;m=n;c[h>>2]=b;c[o>>2]=d;c[j>>2]=e;c[k>>2]=f;a[l>>0]=g;c[m>>2]=CB(c[h>>2]|0,108,c[o>>2]|0)|0;b=c[h>>2]|0;if(c[m>>2]|0){o=Hx(b,c[k>>2]|0,1)|0;c[(c[m>>2]|0)+8>>2]=o;c[(c[m>>2]|0)+24>>2]=c[j>>2];a[(c[m>>2]|0)+1>>0]=a[l>>0]|0;l=c[h>>2]|0;o=c[k>>2]|0;Wu(l,o);o=c[m>>2]|0;i=n;return o|0}else{_u(b,c[j>>2]|0);l=c[h>>2]|0;o=c[k>>2]|0;Wu(l,o);o=c[m>>2]|0;i=n;return o|0}return 0}function mw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;j=i;i=i+16|0;f=j+12|0;k=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[k>>2]=d;c[g>>2]=e;c[h>>2]=CB(c[f>>2]|0,109,c[k>>2]|0)|0;if(c[h>>2]|0){k=ny(c[f>>2]|0,c[g>>2]|0,1)|0;c[(c[h>>2]|0)+16>>2]=k;a[(c[h>>2]|0)+1>>0]=10}Zu(c[f>>2]|0,c[g>>2]|0);i=j;return c[h>>2]|0}function nw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[f>>2]=b;c[g>>2]=d;c[h>>2]=ph(c[f>>2]|0,36,0)|0;if(!(c[h>>2]|0)){Wu(c[f>>2]|0,c[g>>2]|0);c[e>>2]=0;h=c[e>>2]|0;i=j;return h|0}else{a[c[h>>2]>>0]=119;c[(c[h>>2]|0)+8>>2]=c[g>>2];a[(c[h>>2]|0)+1>>0]=10;c[e>>2]=c[h>>2];h=c[e>>2]|0;i=j;return h|0}return 0}function ow(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;p=r;l=r+40|0;m=r+36|0;n=r+32|0;h=r+28|0;f=r+24|0;q=r+20|0;j=r+16|0;o=r+12|0;g=r+8|0;c[l>>2]=b;c[m>>2]=d;c[n>>2]=e;c[h>>2]=0;c[o>>2]=c[c[l>>2]>>2];if(a[(c[o>>2]|0)+65>>0]|0){p=c[o>>2]|0;q=c[m>>2]|0;Yu(p,q);i=r;return}if(pz(c[l>>2]|0)|0){p=c[o>>2]|0;q=c[m>>2]|0;Yu(p,q);i=r;return}c[q>>2]=c[(c[m>>2]|0)+8+4>>2];c[j>>2]=c[(c[m>>2]|0)+8+8>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[o>>2]|0)+20>>2]|0))break;b=c[f>>2]|0;c[g>>2]=(c[f>>2]|0)<2?b^1:b;if(!((c[q>>2]|0)!=0?(Td(c[(c[(c[o>>2]|0)+16>>2]|0)+(c[g>>2]<<4)>>2]|0,c[q>>2]|0)|0)!=0:0))k=7;if((k|0)==7?(k=0,c[h>>2]=nj((c[(c[(c[o>>2]|0)+16>>2]|0)+(c[g>>2]<<4)+12>>2]|0)+40|0,c[j>>2]|0)|0,(c[h>>2]|0)!=0):0)break;c[f>>2]=(c[f>>2]|0)+1}if(c[h>>2]|0){AB(c[l>>2]|0,c[h>>2]|0);p=c[o>>2]|0;q=c[m>>2]|0;Yu(p,q);i=r;return}f=c[l>>2]|0;if(c[n>>2]|0)zB(f,c[q>>2]|0);else{c[p>>2]=c[m>>2];c[p+4>>2]=0;Ah(f,32434,p)}a[(c[l>>2]|0)+17>>0]=1;p=c[o>>2]|0;q=c[m>>2]|0;Yu(p,q);i=r;return}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,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;iB(c[k>>2]|0,24,5280,c[j>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0);i=f;return}function qw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;iB(c[f>>2]|0,25,5248,c[e>>2]|0,0,0,c[e>>2]|0);i=d;return}function rw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+64|0;t=u;q=u+48|0;f=u+44|0;g=u+40|0;j=u+36|0;m=u+32|0;o=u+28|0;l=u+24|0;s=u+20|0;r=u+16|0;h=u+12|0;k=u+8|0;n=u+4|0;c[q>>2]=b;c[f>>2]=d;c[g>>2]=e;c[h>>2]=c[c[q>>2]>>2];if(pz(c[q>>2]|0)|0){i=u;return}if(!(c[f>>2]|0)){Sz(c[q>>2]|0,0);i=u;return}if(!((c[g>>2]|0)!=0?(c[c[g>>2]>>2]|0)!=0:0))p=6;do if((p|0)==6){c[n>>2]=Dw(c[c[q>>2]>>2]|0,c[f>>2]|0)|0;if(!(c[n>>2]|0)){i=u;return}c[j>>2]=Mj(c[h>>2]|0,a[(c[h>>2]|0)+62>>0]|0,c[n>>2]|0,0)|0;if(!(c[j>>2]|0)){Sf(c[h>>2]|0,c[n>>2]|0);break}Sz(c[q>>2]|0,c[n>>2]|0);Sf(c[h>>2]|0,c[n>>2]|0);i=u;return}while(0);c[r>>2]=tz(c[q>>2]|0,c[f>>2]|0,c[g>>2]|0,k)|0;if((c[r>>2]|0)<0){i=u;return}c[m>>2]=Dw(c[h>>2]|0,c[k>>2]|0)|0;if(!(c[m>>2]|0)){i=u;return}c[o>>2]=c[(c[(c[h>>2]|0)+16>>2]|0)+(c[r>>2]<<4)>>2];c[l>>2]=pi(c[h>>2]|0,c[m>>2]|0,c[o>>2]|0)|0;if(c[l>>2]|0){Tz(c[q>>2]|0,c[l>>2]|0,0);Sf(c[h>>2]|0,c[m>>2]|0);i=u;return}c[s>>2]=Fj(c[h>>2]|0,c[m>>2]|0,c[o>>2]|0)|0;Sf(c[h>>2]|0,c[m>>2]|0);f=c[q>>2]|0;if(c[s>>2]|0){ax(f,0,c[r>>2]|0);Uz(c[q>>2]|0,c[s>>2]|0,-1);i=u;return}else{Ah(f,31878,t);i=u;return}}function sw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;l=r+44|0;e=r+40|0;f=r+36|0;m=r+32|0;h=r+28|0;g=r+24|0;q=r+20|0;k=r+16|0;o=r+12|0;n=r+8|0;j=r+4|0;p=r;c[l>>2]=a;c[e>>2]=b;c[f>>2]=d;c[m>>2]=c[c[l>>2]>>2];if(pz(c[l>>2]|0)|0){i=r;return}a:do if(c[e>>2]|0){if(c[(c[f>>2]|0)+4>>2]|0){c[h>>2]=tz(c[l>>2]|0,c[e>>2]|0,c[f>>2]|0,j)|0;if((c[h>>2]|0)<0)break;c[k>>2]=c[(c[(c[m>>2]|0)+16>>2]|0)+(c[h>>2]<<4)>>2];c[q>>2]=Dw(c[m>>2]|0,c[j>>2]|0)|0;if(!(c[q>>2]|0))break;j=Fj(c[m>>2]|0,c[q>>2]|0,c[k>>2]|0)|0;c[n>>2]=j;e=c[l>>2]|0;if(!j){n=zh(e,0,c[q>>2]|0,c[k>>2]|0)|0;c[o>>2]=n;if(n)sz(c[l>>2]|0,c[o>>2]|0,0)}else sz(e,c[(c[n>>2]|0)+12>>2]|0,c[n>>2]|0);Sf(c[m>>2]|0,c[q>>2]|0);break}c[h>>2]=rz(c[m>>2]|0,c[e>>2]|0)|0;if((c[h>>2]|0)>=0){qz(c[l>>2]|0,c[h>>2]|0);break}c[q>>2]=Dw(c[m>>2]|0,c[e>>2]|0)|0;if(c[q>>2]|0){k=Fj(c[m>>2]|0,c[q>>2]|0,0)|0;c[n>>2]=k;e=c[l>>2]|0;if(!k){n=zh(e,0,c[q>>2]|0,0)|0;c[o>>2]=n;if(n)sz(c[l>>2]|0,c[o>>2]|0,0)}else sz(e,c[(c[n>>2]|0)+12>>2]|0,c[n>>2]|0);Sf(c[m>>2]|0,c[q>>2]|0)}}else{c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[m>>2]|0)+20>>2]|0))break a;if((c[g>>2]|0)!=1)qz(c[l>>2]|0,c[g>>2]|0);c[g>>2]=(c[g>>2]|0)+1}}while(0);c[p>>2]=Pw(c[l>>2]|0)|0;if(!(c[p>>2]|0)){i=r;return}Yw(c[p>>2]|0,147)|0;i=r;return}function tw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+176|0;y=E+96|0;x=E+80|0;w=E+40|0;z=E+16|0;v=E+8|0;h=E;j=E+172|0;k=E+168|0;g=E+164|0;n=E+160|0;A=E+156|0;r=E+152|0;B=E+148|0;l=E+144|0;o=E+140|0;C=E+136|0;u=E+132|0;D=E+128|0;s=E+124|0;t=E+120|0;m=E+116|0;p=E+112|0;q=E+108|0;c[j>>2]=b;c[k>>2]=e;c[g>>2]=f;c[B>>2]=0;c[l>>2]=c[c[j>>2]>>2];c[D>>2]=0;c[s>>2]=0;c[t>>2]=c[(c[l>>2]|0)+24>>2];do if(((a[(c[l>>2]|0)+65>>0]|0)==0?(c[r>>2]=_w(c[j>>2]|0,0,(c[k>>2]|0)+8|0)|0,(c[r>>2]|0)!=0):0)?(c[n>>2]=Dh(c[c[j>>2]>>2]|0,c[(c[r>>2]|0)+64>>2]|0)|0,c[A>>2]=c[(c[(c[l>>2]|0)+16>>2]|0)+(c[n>>2]<<4)>>2],e=(c[l>>2]|0)+24|0,c[e>>2]=c[e>>2]|2097152,c[B>>2]=Dw(c[l>>2]|0,c[g>>2]|0)|0,(c[B>>2]|0)!=0):0){if((pi(c[l>>2]|0,c[B>>2]|0,c[A>>2]|0)|0)==0?(Fj(c[l>>2]|0,c[B>>2]|0,c[A>>2]|0)|0)==0:0){if($w(c[j>>2]|0,c[c[r>>2]>>2]|0)|0)break;if(yx(c[j>>2]|0,c[B>>2]|0)|0)break;g=c[j>>2]|0;if(c[(c[r>>2]|0)+12>>2]|0){c[v>>2]=c[c[r>>2]>>2];Ah(g,29208,v);break}if(Mw(g,26,c[A>>2]|0,c[c[r>>2]>>2]|0,0)|0)break;if(zx(c[j>>2]|0,c[r>>2]|0)|0)break;if((d[(c[r>>2]|0)+42>>0]&16|0)!=0?(c[s>>2]=Ax(c[l>>2]|0,c[r>>2]|0)|0,(c[(c[c[(c[s>>2]|0)+8>>2]>>2]|0)+76>>2]|0)==0):0)c[s>>2]=0;c[u>>2]=Pw(c[j>>2]|0)|0;if(!(c[u>>2]|0))break;ax(c[j>>2]|0,(c[s>>2]|0)!=0&1,c[n>>2]|0);Qw(c[j>>2]|0,c[n>>2]|0);if(c[s>>2]|0){h=(c[j>>2]|0)+76|0;v=(c[h>>2]|0)+1|0;c[h>>2]=v;c[m>>2]=v;Tw(c[u>>2]|0,c[m>>2]|0,c[B>>2]|0)|0;Uw(c[u>>2]|0,155,c[m>>2]|0,0,0,c[s>>2]|0,-10)|0;Bx(c[j>>2]|0)}c[C>>2]=c[c[r>>2]>>2];c[o>>2]=Cx(c[C>>2]|0,-1)|0;if((c[(c[l>>2]|0)+24>>2]&524288|0)!=0?(v=Dx(c[j>>2]|0,c[r>>2]|0)|0,c[D>>2]=v,(v|0)!=0):0){v=c[j>>2]|0;h=(c[n>>2]|0)==1?20769:20788;m=c[C>>2]|0;s=c[B>>2]|0;u=c[D>>2]|0;c[z>>2]=c[A>>2];c[z+4>>2]=h;c[z+8>>2]=m;c[z+12>>2]=s;c[z+16>>2]=u;Ow(v,29235,z);Sf(c[l>>2]|0,c[D>>2]|0)}z=c[j>>2]|0;e=(c[n>>2]|0)==1?20769:20788;h=c[B>>2]|0;m=c[B>>2]|0;n=c[B>>2]|0;s=c[B>>2]|0;u=c[B>>2]|0;v=c[o>>2]|0;C=c[C>>2]|0;c[w>>2]=c[A>>2];c[w+4>>2]=e;c[w+8>>2]=h;c[w+12>>2]=m;c[w+16>>2]=n;c[w+20>>2]=s;c[w+24>>2]=u;c[w+28>>2]=v;c[w+32>>2]=C;Ow(z,29304,w);if(pi(c[l>>2]|0,29688,c[A>>2]|0)|0){C=c[j>>2]|0;w=c[B>>2]|0;z=c[c[r>>2]>>2]|0;c[x>>2]=c[A>>2];c[x+4>>2]=w;c[x+8>>2]=z;Ow(C,29704,x)}C=gx(c[j>>2]|0,c[r>>2]|0)|0;c[D>>2]=C;if(C){C=c[j>>2]|0;z=c[B>>2]|0;A=c[D>>2]|0;c[y>>2]=c[B>>2];c[y+4>>2]=z;c[y+8>>2]=A;Ow(C,29762,y);Sf(c[l>>2]|0,c[D>>2]|0)}a:do if(c[(c[l>>2]|0)+24>>2]&524288){c[p>>2]=Ex(c[r>>2]|0)|0;while(1){if(!(c[p>>2]|0))break a;c[q>>2]=c[c[p>>2]>>2];if((c[q>>2]|0)!=(c[r>>2]|0))ex(c[j>>2]|0,c[c[p>>2]>>2]|0,c[c[q>>2]>>2]|0);c[p>>2]=c[(c[p>>2]|0)+12>>2]}}while(0);ex(c[j>>2]|0,c[r>>2]|0,c[B>>2]|0);break}D=c[j>>2]|0;c[h>>2]=c[B>>2];Ah(D,29149,h)}while(0);Yu(c[l>>2]|0,c[k>>2]|0);Sf(c[l>>2]|0,c[B>>2]|0);c[(c[l>>2]|0)+24>>2]=c[t>>2];i=E;return}function uw(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+128|0;v=D+40|0;u=D+32|0;y=D+24|0;x=D+16|0;w=D+8|0;t=D;g=D+124|0;h=D+120|0;n=D+116|0;o=D+112|0;k=D+108|0;A=D+104|0;C=D+100|0;z=D+96|0;l=D+92|0;m=D+88|0;j=D+84|0;s=D+80|0;p=D+76|0;q=D+72|0;B=D+68|0;r=D+64|0;c[g>>2]=e;c[h>>2]=f;c[s>>2]=c[(c[g>>2]|0)+8>>2];c[j>>2]=c[c[g>>2]>>2];if(c[(c[g>>2]|0)+68>>2]|0){i=D;return}if(d[(c[j>>2]|0)+65>>0]|0){i=D;return}c[n>>2]=c[(c[g>>2]|0)+488>>2];c[k>>2]=Dh(c[j>>2]|0,c[(c[n>>2]|0)+64>>2]|0)|0;c[A>>2]=c[(c[(c[j>>2]|0)+16>>2]|0)+(c[k>>2]<<4)>>2];c[C>>2]=(c[c[n>>2]>>2]|0)+16;c[l>>2]=(c[(c[n>>2]|0)+4>>2]|0)+(((b[(c[n>>2]|0)+34>>1]|0)-1|0)*24|0);c[m>>2]=c[(c[l>>2]|0)+4>>2];c[o>>2]=pi(c[j>>2]|0,c[C>>2]|0,c[A>>2]|0)|0;if(Mw(c[g>>2]|0,26,c[A>>2]|0,c[c[o>>2]>>2]|0,0)|0){i=D;return}if((c[m>>2]|0)!=0?(d[c[m>>2]>>0]|0)==101:0)c[m>>2]=0;if(d[(c[l>>2]|0)+23>>0]&1){Ah(c[g>>2]|0,28751,t);i=D;return}if(c[(c[n>>2]|0)+8>>2]|0){Ah(c[g>>2]|0,28783,w);i=D;return}if((c[(c[j>>2]|0)+24>>2]&524288|0)!=0?(c[m>>2]|0)!=0?(c[(c[n>>2]|0)+16>>2]|0)!=0:0:0){Ah(c[g>>2]|0,28810,x);i=D;return}if(!((c[m>>2]|0)!=0?1:(d[(c[l>>2]|0)+20>>0]|0)==0)){Ah(c[g>>2]|0,28869,y);i=D;return}do if(c[m>>2]|0){c[p>>2]=0;c[q>>2]=dx(c[j>>2]|0,c[m>>2]|0,1,65,p)|0;if(c[q>>2]|0){i=D;return}if(c[p>>2]|0){$g(c[p>>2]|0);break}Ah(c[g>>2]|0,28922,u);i=D;return}while(0);c[z>>2]=Iw(c[j>>2]|0,c[c[h>>2]>>2]|0,c[(c[h>>2]|0)+4>>2]|0,0)|0;if(c[z>>2]|0){c[B>>2]=(c[z>>2]|0)+((c[(c[h>>2]|0)+4>>2]|0)-1);c[r>>2]=c[(c[j>>2]|0)+24>>2];while(1){if((c[B>>2]|0)>>>0<=(c[z>>2]|0)>>>0)break;if((a[c[B>>2]>>0]|0)!=59?(d[19267+(d[c[B>>2]>>0]|0)>>0]&1|0)==0:0)break;y=c[B>>2]|0;c[B>>2]=y+-1;a[y>>0]=0}B=(c[j>>2]|0)+24|0;c[B>>2]=c[B>>2]|2097152;B=c[g>>2]|0;u=(c[k>>2]|0)==1?20769:20788;w=c[(c[n>>2]|0)+44>>2]|0;x=c[z>>2]|0;y=(c[(c[n>>2]|0)+44>>2]|0)+1|0;C=c[C>>2]|0;c[v>>2]=c[A>>2];c[v+4>>2]=u;c[v+8>>2]=w;c[v+12>>2]=x;c[v+16>>2]=y;c[v+20>>2]=C;Ow(B,28968,v);Sf(c[j>>2]|0,c[z>>2]|0);c[(c[j>>2]|0)+24>>2]=c[r>>2]}Vw(c[s>>2]|0,52,c[k>>2]|0,2,4)|0;ex(c[g>>2]|0,c[o>>2]|0,c[c[o>>2]>>2]|0);i=D;return}function vw(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+64|0;t=u+16|0;s=u+8|0;g=u;h=u+56|0;j=u+52|0;p=u+48|0;q=u+44|0;r=u+40|0;m=u+36|0;l=u+32|0;n=u+28|0;k=u+24|0;o=u+20|0;c[h>>2]=e;c[j>>2]=f;c[k>>2]=c[c[h>>2]>>2];do if((a[(c[k>>2]|0)+65>>0]|0)==0?(c[q>>2]=_w(c[h>>2]|0,0,(c[j>>2]|0)+8|0)|0,(c[q>>2]|0)!=0):0){if(d[(c[q>>2]|0)+42>>0]&16){Ah(c[h>>2]|0,28562,g);break}e=c[h>>2]|0;if(c[(c[q>>2]|0)+12>>2]|0){Ah(e,28596,s);break}if(((0==($w(e,c[c[q>>2]>>2]|0)|0)?(c[m>>2]=Dh(c[k>>2]|0,c[(c[q>>2]|0)+64>>2]|0)|0,c[p>>2]=ph(c[k>>2]|0,72,0)|0,(c[p>>2]|0)!=0):0)?(c[(c[h>>2]|0)+488>>2]=c[p>>2],b[(c[p>>2]|0)+36>>1]=1,b[(c[p>>2]|0)+34>>1]=b[(c[q>>2]|0)+34>>1]|0,c[n>>2]=((((b[(c[p>>2]|0)+34>>1]|0)-1|0)/8|0)<<3)+8,s=ph(c[k>>2]|0,(c[n>>2]|0)*24|0,0)|0,c[(c[p>>2]|0)+4>>2]=s,s=c[k>>2]|0,c[t>>2]=c[c[q>>2]>>2],t=Bh(s,28626,t)|0,c[c[p>>2]>>2]=t,(c[(c[p>>2]|0)+4>>2]|0)!=0):0)?(c[c[p>>2]>>2]|0)!=0:0){iR(c[(c[p>>2]|0)+4>>2]|0,c[(c[q>>2]|0)+4>>2]|0,(b[(c[p>>2]|0)+34>>1]|0)*24|0)|0;c[l>>2]=0;while(1){if((c[l>>2]|0)>=(b[(c[p>>2]|0)+34>>1]|0))break;c[o>>2]=(c[(c[p>>2]|0)+4>>2]|0)+((c[l>>2]|0)*24|0);t=nh(c[k>>2]|0,c[c[o>>2]>>2]|0)|0;c[c[o>>2]>>2]=t;c[(c[o>>2]|0)+16>>2]=0;c[(c[o>>2]|0)+12>>2]=0;c[(c[o>>2]|0)+4>>2]=0;c[(c[o>>2]|0)+8>>2]=0;c[l>>2]=(c[l>>2]|0)+1}c[(c[p>>2]|0)+64>>2]=c[(c[(c[k>>2]|0)+16>>2]|0)+(c[m>>2]<<4)+12>>2];c[(c[p>>2]|0)+44>>2]=c[(c[q>>2]|0)+44>>2];b[(c[p>>2]|0)+36>>1]=1;ax(c[h>>2]|0,0,c[m>>2]|0);c[r>>2]=Pw(c[h>>2]|0)|0;if(c[r>>2]|0)Qw(c[h>>2]|0,c[m>>2]|0)}}while(0);Yu(c[k>>2]|0,c[j>>2]|0);i=u;return}function ww(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+96|0;q=u+32|0;p=u+8|0;o=u;e=u+80|0;f=u+76|0;m=u+72|0;g=u+68|0;s=u+64|0;t=u+60|0;h=u+56|0;j=u+52|0;n=u+48|0;k=u+44|0;l=u+40|0;r=u+36|0;c[e>>2]=b;c[f>>2]=d;c[m>>2]=c[(c[e>>2]|0)+488>>2];c[g>>2]=c[c[e>>2]>>2];if(!(c[m>>2]|0)){i=u;return}Kw(c[e>>2]|0);c[(c[e>>2]|0)+516>>2]=0;if((c[(c[m>>2]|0)+48>>2]|0)<1){i=u;return}if(!(a[(c[g>>2]|0)+140+5>>0]|0)){if(c[f>>2]|0)c[(c[e>>2]|0)+500+4>>2]=(c[c[f>>2]>>2]|0)-(c[(c[e>>2]|0)+500>>2]|0)+(c[(c[f>>2]|0)+4>>2]|0);r=c[g>>2]|0;c[o>>2]=(c[e>>2]|0)+500;c[s>>2]=Bh(r,28423,o)|0;c[h>>2]=Dh(c[g>>2]|0,c[(c[m>>2]|0)+64>>2]|0)|0;r=c[e>>2]|0;d=(c[h>>2]|0)==1?20769:20788;k=c[c[m>>2]>>2]|0;b=c[c[m>>2]>>2]|0;l=c[s>>2]|0;o=c[(c[e>>2]|0)+392>>2]|0;c[p>>2]=c[(c[(c[g>>2]|0)+16>>2]|0)+(c[h>>2]<<4)>>2];c[p+4>>2]=d;c[p+8>>2]=k;c[p+12>>2]=b;c[p+16>>2]=l;c[p+20>>2]=o;Ow(r,28447,p);Sf(c[g>>2]|0,c[s>>2]|0);c[n>>2]=Pw(c[e>>2]|0)|0;Qw(c[e>>2]|0,c[h>>2]|0);Rw(c[n>>2]|0,147,0,0)|0;s=c[g>>2]|0;c[q>>2]=c[c[m>>2]>>2];c[t>>2]=Bh(s,28535,q)|0;Sw(c[n>>2]|0,c[h>>2]|0,c[t>>2]|0);s=(c[e>>2]|0)+76|0;t=(c[s>>2]|0)+1|0;c[s>>2]=t;c[j>>2]=t;Tw(c[n>>2]|0,c[j>>2]|0,c[c[m>>2]>>2]|0)|0;Rw(c[n>>2]|0,150,c[h>>2]|0,c[j>>2]|0)|0;i=u;return}c[l>>2]=c[(c[m>>2]|0)+64>>2];c[r>>2]=c[c[m>>2]>>2];c[k>>2]=Oj((c[l>>2]|0)+8|0,c[r>>2]|0,c[m>>2]|0)|0;if(c[k>>2]|0){jh(c[g>>2]|0);i=u;return}else{c[(c[e>>2]|0)+488>>2]=0;i=u;return}}function xw(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=i;i=i+32|0;j=o+28|0;r=o+24|0;q=o+20|0;k=o+16|0;p=o+12|0;m=o+8|0;n=o+4|0;l=o;c[j>>2]=b;c[r>>2]=e;c[q>>2]=f;c[k>>2]=g;c[p>>2]=h;lv(c[j>>2]|0,c[r>>2]|0,c[q>>2]|0,0,0,1,c[p>>2]|0);c[n>>2]=c[(c[j>>2]|0)+488>>2];if(!(c[n>>2]|0)){i=o;return}c[l>>2]=c[c[j>>2]>>2];c[m>>2]=Dh(c[l>>2]|0,c[(c[n>>2]|0)+64>>2]|0)|0;r=(c[n>>2]|0)+42|0;a[r>>0]=d[r>>0]|0|16;c[(c[n>>2]|0)+48>>2]=0;r=c[l>>2]|0;q=c[n>>2]|0;Lw(r,q,Dw(c[l>>2]|0,c[k>>2]|0)|0);Lw(c[l>>2]|0,c[n>>2]|0,0);q=c[l>>2]|0;r=c[n>>2]|0;Lw(q,r,nh(c[l>>2]|0,c[c[n>>2]>>2]|0)|0);c[(c[j>>2]|0)+500+4>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+500>>2]|0);if(!(c[(c[n>>2]|0)+52>>2]|0)){i=o;return}Mw(c[j>>2]|0,29,c[c[n>>2]>>2]|0,c[c[(c[n>>2]|0)+52>>2]>>2]|0,c[(c[(c[c[j>>2]>>2]|0)+16>>2]|0)+(c[m>>2]<<4)>>2]|0)|0;i=o;return}function yw(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Kw(c[d>>2]|0);c[(c[d>>2]|0)+516>>2]=0;c[(c[d>>2]|0)+516+4>>2]=0;i=b;return}function zw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+8|0;d=f+4|0;e=f;c[g>>2]=a;c[d>>2]=b;c[e>>2]=(c[g>>2]|0)+516;b=c[d>>2]|0;if(!(c[c[e>>2]>>2]|0)){c[c[e>>2]>>2]=c[b>>2];c[(c[e>>2]|0)+4>>2]=c[(c[d>>2]|0)+4>>2];i=f;return}else{c[(c[e>>2]|0)+4>>2]=(c[c[d>>2]>>2]|0)+(c[b+4>>2]|0)-(c[c[e>>2]>>2]|0);i=f;return}}function Aw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;q=s;h=s+40|0;j=s+36|0;t=s+32|0;k=s+28|0;l=s+24|0;m=s+20|0;p=s+16|0;r=s+12|0;n=s+8|0;o=s+4|0;c[h>>2]=b;c[j>>2]=d;c[t>>2]=e;c[k>>2]=f;c[l>>2]=g;c[m>>2]=c[c[h>>2]>>2];c[r>>2]=Dw(c[c[h>>2]>>2]|0,c[t>>2]|0)|0;a:do if((c[r>>2]|0)!=0&(c[j>>2]|0)!=0){c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[c[j>>2]>>2]|0))break a;if(!(Td(c[r>>2]|0,c[(c[j>>2]|0)+8+(c[n>>2]<<4)>>2]|0)|0)){t=c[h>>2]|0;c[q>>2]=c[r>>2];Ah(t,28355,q)}c[n>>2]=(c[n>>2]|0)+1}}while(0);if(c[j>>2]|0){c[o>>2]=24+(c[c[j>>2]>>2]<<4);t=c[o>>2]|0;c[p>>2]=Ew(c[m>>2]|0,c[j>>2]|0,t,((t|0)<0)<<31>>31)|0}else c[p>>2]=ph(c[m>>2]|0,24,0)|0;if(a[(c[m>>2]|0)+65>>0]|0){Vu(c[m>>2]|0,c[k>>2]|0);Wu(c[m>>2]|0,c[l>>2]|0);Sf(c[m>>2]|0,c[r>>2]|0);c[p>>2]=c[j>>2];t=c[p>>2]|0;i=s;return t|0}else{c[(c[p>>2]|0)+8+(c[c[p>>2]>>2]<<4)+8>>2]=c[l>>2];c[(c[p>>2]|0)+8+(c[c[p>>2]>>2]<<4)+4>>2]=c[k>>2];c[(c[p>>2]|0)+8+(c[c[p>>2]>>2]<<4)>>2]=c[r>>2];c[(c[p>>2]|0)+8+(c[c[p>>2]>>2]<<4)+12>>2]=0;t=c[p>>2]|0;c[t>>2]=(c[t>>2]|0)+1;t=c[p>>2]|0;i=s;return t|0}return 0}function Bw(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0;j=i;i=i+16|0;l=j+4|0;k=j+8|0;h=j;c[l>>2]=f;a[k>>0]=g;c[h>>2]=b[11910+(c[l>>2]<<1)>>1];c[h>>2]=(c[h>>2]|0)+(d[k>>0]|0);i=j;return e[12532+(c[h>>2]<<1)>>1]|0}function Cw(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=c[(c[b>>2]|0)+8>>2];while(1){if((c[c[b>>2]>>2]|0)<0)break;$u(c[b>>2]|0)}c[(c[b>>2]|0)+8>>2]=c[d>>2];i=e;return}function Dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(c[e>>2]|0){c[f>>2]=Iw(c[d>>2]|0,c[c[e>>2]>>2]|0,c[(c[e>>2]|0)+4>>2]|0,0)|0;Jw(c[f>>2]|0)|0;f=c[f>>2]|0;i=g;return f|0}else{c[f>>2]=0;f=c[f>>2]|0;i=g;return f|0}return 0}function Ew(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+12|0;j=l+8|0;k=l;c[h>>2]=a;c[j>>2]=b;b=k;c[b>>2]=d;c[b+4>>2]=f;d=c[h>>2]|0;if(!(c[j>>2]|0)){c[g>>2]=Fw(d,c[k>>2]|0,c[k+4>>2]|0)|0;k=c[g>>2]|0;i=l;return k|0}if((au(d,c[j>>2]|0)|0)!=0?(b=k,a=c[b+4>>2]|0,a>>>0<0|((a|0)==0?(c[b>>2]|0)>>>0<=(e[(c[h>>2]|0)+248+4>>1]|0)>>>0:0)):0){c[g>>2]=c[j>>2];k=c[g>>2]|0;i=l;return k|0}c[g>>2]=Gw(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,c[k+4>>2]|0)|0;k=c[g>>2]|0;i=l;return k|0}function Fw(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l+12|0;j=l;k=l+8|0;c[h>>2]=b;b=j;c[b>>2]=d;c[b+4>>2]=f;do if(c[(c[h>>2]|0)+248>>2]|0){if(a[(c[h>>2]|0)+65>>0]|0){c[g>>2]=0;k=c[g>>2]|0;i=l;return k|0}}else{b=j;f=c[b+4>>2]|0;d=(c[h>>2]|0)+248|0;if(f>>>0>0|((f|0)==0?(c[b>>2]|0)>>>0>(e[(c[h>>2]|0)+248+4>>1]|0)>>>0:0)){k=d+16+4|0;c[k>>2]=(c[k>>2]|0)+1;break}b=c[d+28>>2]|0;c[k>>2]=b;if(!b){k=(c[h>>2]|0)+248+16+8|0;c[k>>2]=(c[k>>2]|0)+1;break}c[(c[h>>2]|0)+248+28>>2]=c[c[k>>2]>>2];j=(c[h>>2]|0)+248+8|0;c[j>>2]=(c[j>>2]|0)+1;j=(c[h>>2]|0)+248+16|0;c[j>>2]=(c[j>>2]|0)+1;if((c[(c[h>>2]|0)+248+8>>2]|0)>(c[(c[h>>2]|0)+248+12>>2]|0))c[(c[h>>2]|0)+248+12>>2]=c[(c[h>>2]|0)+248+8>>2];c[g>>2]=c[k>>2];k=c[g>>2]|0;i=l;return k|0}while(0);k=j;c[g>>2]=Hw(c[h>>2]|0,c[k>>2]|0,c[k+4>>2]|0)|0;k=c[g>>2]|0;i=l;return k|0}function Gw(a,b,f,g){a=a|0;b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;h=m+16|0;j=m+12|0;k=m;l=m+8|0;c[h>>2]=a;c[j>>2]=b;b=k;c[b>>2]=f;c[b+4>>2]=g;c[l>>2]=0;if(d[(c[h>>2]|0)+65>>0]|0){l=c[l>>2]|0;i=m;return l|0}if(au(c[h>>2]|0,c[j>>2]|0)|0){b=k;c[l>>2]=Fw(c[h>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;if(!(c[l>>2]|0)){l=c[l>>2]|0;i=m;return l|0}iR(c[l>>2]|0,c[j>>2]|0,e[(c[h>>2]|0)+248+4>>1]|0|0)|0;Sf(c[h>>2]|0,c[j>>2]|0);l=c[l>>2]|0;i=m;return l|0}else{b=k;c[l>>2]=Md(c[j>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;if(c[l>>2]|0){l=c[l>>2]|0;i=m;return l|0}jh(c[h>>2]|0);l=c[l>>2]|0;i=m;return l|0}return 0}function Hw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+16|0;e=g+12|0;h=g;f=g+8|0;c[e>>2]=a;a=h;c[a>>2]=b;c[a+4>>2]=d;a=h;c[f>>2]=_f(c[a>>2]|0,c[a+4>>2]|0)|0;if(c[f>>2]|0){h=c[f>>2]|0;i=g;return h|0}jh(c[e>>2]|0);h=c[f>>2]|0;i=g;return h|0}function Iw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+20|0;h=m+16|0;j=m+12|0;k=m;l=m+8|0;c[h>>2]=b;c[j>>2]=d;d=k;c[d>>2]=e;c[d+4>>2]=f;if(!(c[j>>2]|0)){c[g>>2]=0;l=c[g>>2]|0;i=m;return l|0}b=c[h>>2]|0;d=k;d=gR(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;c[l>>2]=Fw(b,d,C)|0;if(c[l>>2]|0){iR(c[l>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;a[(c[l>>2]|0)+(c[k>>2]|0)>>0]=0}c[g>>2]=c[l>>2];l=c[g>>2]|0;i=m;return l|0}function Jw(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;d=j+12|0;e=j+8|0;h=j+16|0;f=j+4|0;g=j;c[e>>2]=b;if(!(c[e>>2]|0)){c[d>>2]=-1;h=c[d>>2]|0;i=j;return h|0}a[h>>0]=a[c[e>>2]>>0]|0;switch(a[h>>0]|0){case 96:case 34:case 39:break;case 91:{a[h>>0]=93;break}default:{c[d>>2]=-1;h=c[d>>2]|0;i=j;return h|0}}c[f>>2]=1;c[g>>2]=0;while(1){b=c[f>>2]|0;if((a[(c[e>>2]|0)+(c[f>>2]|0)>>0]|0)==(a[h>>0]|0)){if((a[(c[e>>2]|0)+(b+1)>>0]|0)!=(a[h>>0]|0))break;k=a[h>>0]|0;b=c[g>>2]|0;c[g>>2]=b+1;a[(c[e>>2]|0)+b>>0]=k;c[f>>2]=(c[f>>2]|0)+1}else{b=a[(c[e>>2]|0)+b>>0]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[(c[e>>2]|0)+k>>0]=b}c[f>>2]=(c[f>>2]|0)+1}a[(c[e>>2]|0)+(c[g>>2]|0)>>0]=0;c[d>>2]=c[g>>2];k=c[d>>2]|0;i=j;return k|0}function Kw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;b=g+12|0;f=g+8|0;e=g+4|0;d=g;c[b>>2]=a;if(!(c[(c[b>>2]|0)+516>>2]|0)){i=g;return}if(!(c[(c[b>>2]|0)+488>>2]|0)){i=g;return}c[f>>2]=c[(c[b>>2]|0)+516>>2];c[e>>2]=c[(c[b>>2]|0)+516+4>>2];c[d>>2]=c[c[b>>2]>>2];h=c[d>>2]|0;b=c[(c[b>>2]|0)+488>>2]|0;a=c[e>>2]|0;Lw(h,b,Iw(c[d>>2]|0,c[f>>2]|0,a,((a|0)<0)<<31>>31)|0);i=g;return}function Lw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;e=k+20|0;f=k+16|0;g=k+12|0;l=k+8|0;h=k+4|0;j=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[l>>2]=2+(c[(c[f>>2]|0)+48>>2]|0)<<2;d=c[l>>2]|0;c[h>>2]=Ew(c[e>>2]|0,c[(c[f>>2]|0)+52>>2]|0,d,((d|0)<0)<<31>>31)|0;if(!(c[h>>2]|0)){Sf(c[e>>2]|0,c[g>>2]|0);i=k;return}else{d=(c[f>>2]|0)+48|0;l=c[d>>2]|0;c[d>>2]=l+1;c[j>>2]=l;c[(c[h>>2]|0)+(c[j>>2]<<2)>>2]=c[g>>2];c[(c[h>>2]|0)+((c[j>>2]|0)+1<<2)>>2]=0;c[(c[f>>2]|0)+52>>2]=c[h>>2];i=k;return}}function Mw(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r;h=r+32|0;j=r+28|0;k=r+24|0;l=r+20|0;m=r+16|0;n=r+12|0;o=r+8|0;p=r+4|0;c[j>>2]=a;c[k>>2]=b;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[c[j>>2]>>2];if((d[(c[o>>2]|0)+140+5>>0]|0|0)==0?(d[(c[j>>2]|0)+454>>0]|0|0)==0:0){if(!(c[(c[o>>2]|0)+288>>2]|0)){c[h>>2]=0;g=c[h>>2]|0;i=r;return g|0}c[p>>2]=Sb[c[(c[o>>2]|0)+288>>2]&255](c[(c[o>>2]|0)+292>>2]|0,c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,c[n>>2]|0,c[(c[j>>2]|0)+496>>2]|0)|0;if((c[p>>2]|0)!=1){if((c[p>>2]|0)!=0&(c[p>>2]|0)!=2){c[p>>2]=1;Nw(c[j>>2]|0)}}else{Ah(c[j>>2]|0,28385,q);c[(c[j>>2]|0)+12>>2]=23}c[h>>2]=c[p>>2];g=c[h>>2]|0;i=r;return g|0}c[h>>2]=0;g=c[h>>2]|0;i=r;return g|0}function Nw(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b+4|0;c[d>>2]=a;Ah(c[d>>2]|0,28400,b);c[(c[d>>2]|0)+12>>2]=1;i=b;return}function Ow(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+144|0;j=o+36|0;g=o+32|0;h=o+16|0;n=o+8|0;m=o+4|0;k=o;l=o+40|0;c[j>>2]=d;c[g>>2]=e;c[m>>2]=0;c[k>>2]=c[c[j>>2]>>2];if(c[(c[j>>2]|0)+68>>2]|0){i=o;return}c[h>>2]=f;c[n>>2]=Zw(c[k>>2]|0,c[g>>2]|0,h)|0;if(!(c[n>>2]|0)){i=o;return}g=(c[j>>2]|0)+18|0;a[g>>0]=(a[g>>0]|0)+1<<24>>24;g=l;h=(c[j>>2]|0)+444|0;d=g+100|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(d|0));g=(c[j>>2]|0)+444|0;d=g+100|0;do{b[g>>1]=0;g=g+2|0}while((g|0)<(d|0));Uh(c[j>>2]|0,c[n>>2]|0,m)|0;Sf(c[k>>2]|0,c[m>>2]|0);Sf(c[k>>2]|0,c[n>>2]|0);g=(c[j>>2]|0)+444|0;h=l;d=g+100|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(d|0));n=(c[j>>2]|0)+18|0;a[n>>0]=(a[n>>0]|0)+-1<<24>>24;i=o;return}function Pw(b){b=b|0;var d=0,f=0,g=0;g=i;i=i+16|0;d=g+4|0;f=g;c[d>>2]=b;c[f>>2]=c[(c[d>>2]|0)+8>>2];if(!(c[f>>2]|0)){b=Ch(c[d>>2]|0)|0;c[(c[d>>2]|0)+8>>2]=b;c[f>>2]=b;if(c[f>>2]|0)Yw(c[f>>2]|0,158)|0;if((c[(c[d>>2]|0)+416>>2]|0)==0?((e[(c[c[d>>2]>>2]|0)+60>>1]|0)&8|0)==0:0)a[(c[d>>2]|0)+23>>0]=1}i=g;return c[f>>2]|0}function Qw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+16|0;h=d+12|0;e=d+8|0;f=d+4|0;g=d;c[h>>2]=a;c[e>>2]=b;c[f>>2]=c[c[h>>2]>>2];c[g>>2]=c[(c[h>>2]|0)+8>>2];Vw(c[g>>2]|0,52,c[e>>2]|0,1,(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(c[e>>2]<<4)+12>>2]>>2]|0)+1|0)|0;i=d;return}function Rw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;k=f+12|0;j=f+8|0;h=f+4|0;g=f;c[k>>2]=a;c[j>>2]=b;c[h>>2]=d;c[g>>2]=e;e=Vw(c[k>>2]|0,c[j>>2]|0,c[h>>2]|0,c[g>>2]|0,0)|0;i=f;return e|0}function Sw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;g=i;i=i+16|0;e=g+12|0;j=g+8|0;h=g+4|0;f=g;c[e>>2]=a;c[j>>2]=b;c[h>>2]=d;Uw(c[e>>2]|0,123,c[j>>2]|0,0,0,c[h>>2]|0,-1)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[(c[c[e>>2]>>2]|0)+20>>2]|0))break;Hh(c[e>>2]|0,c[f>>2]|0);c[f>>2]=(c[f>>2]|0)+1}i=g;return}function Tw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;d=Uw(c[h>>2]|0,97,0,c[g>>2]|0,0,c[f>>2]|0,0)|0;i=e;return d|0}function Uw(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 j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=i;i=i+32|0;n=k+28|0;r=k+24|0;q=k+20|0;p=k+16|0;o=k+12|0;m=k+8|0;l=k+4|0;j=k;c[n>>2]=a;c[r>>2]=b;c[q>>2]=d;c[p>>2]=e;c[o>>2]=f;c[m>>2]=g;c[l>>2]=h;c[j>>2]=Vw(c[n>>2]|0,c[r>>2]|0,c[q>>2]|0,c[p>>2]|0,c[o>>2]|0)|0;Ih(c[n>>2]|0,c[j>>2]|0,c[m>>2]|0,c[l>>2]|0);i=k;return c[j>>2]|0}function Vw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;n=q+8|0;o=q+4|0;p=q;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[(c[j>>2]|0)+32>>2];d=c[j>>2]|0;if((c[(c[(c[j>>2]|0)+24>>2]|0)+88>>2]|0)<=(c[o>>2]|0)){c[h>>2]=Ww(d,c[k>>2]|0,c[l>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;p=c[h>>2]|0;i=q;return p|0}else{g=d+32|0;c[g>>2]=(c[g>>2]|0)+1;c[p>>2]=(c[(c[j>>2]|0)+4>>2]|0)+((c[o>>2]|0)*20|0);a[c[p>>2]>>0]=c[k>>2];a[(c[p>>2]|0)+3>>0]=0;c[(c[p>>2]|0)+4>>2]=c[l>>2];c[(c[p>>2]|0)+8>>2]=c[m>>2];c[(c[p>>2]|0)+12>>2]=c[n>>2];c[(c[p>>2]|0)+16>>2]=0;a[(c[p>>2]|0)+1>>0]=0;c[h>>2]=c[o>>2];p=c[h>>2]|0;i=q;return p|0}return 0}function Ww(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,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[h>>2]=a;c[j>>2]=b;c[k>>2]=d;c[l>>2]=e;c[m>>2]=f;if(Xw(c[h>>2]|0,1)|0){c[g>>2]=1;f=c[g>>2]|0;i=n;return f|0}else{c[g>>2]=Vw(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;f=c[g>>2]|0;i=n;return f|0}return 0}function Xw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;d=h+16|0;g=h+8|0;f=h+4|0;e=h;c[d>>2]=a;c[h+12>>2]=b;c[f>>2]=c[(c[d>>2]|0)+24>>2];if(c[(c[f>>2]|0)+88>>2]|0)b=c[(c[f>>2]|0)+88>>2]<<1;else b=51;c[e>>2]=b;c[g>>2]=Ew(c[c[f>>2]>>2]|0,c[(c[d>>2]|0)+4>>2]|0,(c[e>>2]|0)*20|0,0)|0;if(!(c[g>>2]|0)){g=c[g>>2]|0;g=(g|0)!=0;g=g?0:7;i=h;return g|0}e=$t(c[c[f>>2]>>2]|0,c[g>>2]|0)|0;c[(c[f>>2]|0)+92>>2]=e;c[(c[f>>2]|0)+88>>2]=((c[(c[f>>2]|0)+92>>2]|0)>>>0)/20|0;c[(c[d>>2]|0)+4>>2]=c[g>>2];g=c[g>>2]|0;g=(g|0)!=0;g=g?0:7;i=h;return g|0}function Yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=Vw(c[f>>2]|0,c[e>>2]|0,0,0,0)|0;i=d;return a|0}function Zw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;j=i;i=i+128|0;g=j+40|0;m=j+36|0;l=j+32|0;h=j+28|0;k=j;c[g>>2]=b;c[m>>2]=e;c[l>>2]=f;cg(k,c[g>>2]|0,j+44|0,70,c[(c[g>>2]|0)+88>>2]|0);a[k+25>>0]=1;dg(k,c[m>>2]|0,c[l>>2]|0);c[h>>2]=eg(k)|0;if((d[k+24>>0]|0|0)!=1){m=c[h>>2]|0;i=j;return m|0}jh(c[g>>2]|0);m=c[h>>2]|0;i=j;return m|0}function _w(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;if(c[c[g>>2]>>2]|0){c[h>>2]=Dh(c[c[e>>2]>>2]|0,c[c[g>>2]>>2]|0)|0;c[j>>2]=c[(c[(c[c[e>>2]>>2]|0)+16>>2]|0)+(c[h>>2]<<4)>>2]}else c[j>>2]=c[(c[g>>2]|0)+4>>2];j=zh(c[e>>2]|0,c[f>>2]|0,c[(c[g>>2]|0)+8>>2]|0,c[j>>2]|0)|0; +i=k;return j|0}function $w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;g=h;d=h+12|0;e=h+8|0;f=h+4|0;c[e>>2]=a;c[f>>2]=b;if((If(c[f>>2]|0)|0)>6?0==(zd(c[f>>2]|0,28715,7)|0):0){b=c[e>>2]|0;c[g>>2]=c[f>>2];Ah(b,28723,g);c[d>>2]=1;b=c[d>>2]|0;i=h;return b|0}c[d>>2]=0;b=c[d>>2]|0;i=h;return b|0}function ax(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;f=c[g>>2]|0;if(c[(c[g>>2]|0)+416>>2]|0)f=c[f+416>>2]|0;c[k>>2]=f;bx(c[g>>2]|0,c[j>>2]|0);g=(c[k>>2]|0)+336|0;c[g>>2]=c[g>>2]|1<>2];k=(c[k>>2]|0)+20|0;a[k>>0]=d[k>>0]|0|c[h>>2];i=l;return}function bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;h=g+12|0;d=g+8|0;f=g+4|0;e=g;c[h>>2]=a;c[d>>2]=b;b=c[h>>2]|0;if(c[(c[h>>2]|0)+416>>2]|0)b=c[b+416>>2]|0;c[f>>2]=b;c[e>>2]=c[c[f>>2]>>2];if((c[(c[f>>2]|0)+340>>2]&1<>2]|0)!=0|0){i=g;return}h=(c[f>>2]|0)+340|0;c[h>>2]=c[h>>2]|1<>2];c[(c[f>>2]|0)+344+(c[d>>2]<<2)>>2]=c[c[(c[(c[e>>2]|0)+16>>2]|0)+(c[d>>2]<<4)+12>>2]>>2];if((c[d>>2]|0)!=1){i=g;return}cx(c[f>>2]|0)|0;i=g;return}function cx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k;d=k+20|0;e=k+16|0;f=k+12|0;h=k+8|0;g=k+4|0;c[e>>2]=b;c[f>>2]=c[c[e>>2]>>2];if((c[(c[(c[f>>2]|0)+16>>2]|0)+16+4>>2]|0)==0?(a[(c[e>>2]|0)+453>>0]|0)==0:0){c[h>>2]=Xj(c[c[f>>2]>>2]|0,0,c[f>>2]|0,g,0,542)|0;if(c[h>>2]|0){Ah(c[e>>2]|0,28645,j);c[(c[e>>2]|0)+12>>2]=c[h>>2];c[d>>2]=1;j=c[d>>2]|0;i=k;return j|0}c[(c[(c[f>>2]|0)+16>>2]|0)+16+4>>2]=c[g>>2];if(7==(xi(c[g>>2]|0,c[(c[f>>2]|0)+72>>2]|0,-1,0)|0)){jh(c[f>>2]|0);c[d>>2]=1;j=c[d>>2]|0;i=k;return j|0}}c[d>>2]=0;j=c[d>>2]|0;i=k;return j|0}function dx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;h=i;i=i+16|0;n=h+8|0;m=h+4|0;l=h+13|0;k=h+12|0;j=h;c[n>>2]=b;c[m>>2]=d;a[l>>0]=e;a[k>>0]=f;c[j>>2]=g;g=ix(c[n>>2]|0,c[m>>2]|0,a[l>>0]|0,a[k>>0]|0,c[j>>2]|0,0)|0;i=h;return g|0}function ex(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;m=o;e=o+32|0;f=o+28|0;g=o+24|0;l=o+20|0;n=o+16|0;h=o+12|0;k=o+8|0;j=o+4|0;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[l>>2]=Pw(c[e>>2]|0)|0;if(!(c[l>>2]|0)){i=o;return}c[h>>2]=Dh(c[c[e>>2]>>2]|0,c[(c[f>>2]|0)+64>>2]|0)|0;c[k>>2]=fx(c[e>>2]|0,c[f>>2]|0)|0;while(1){if(!(c[k>>2]|0))break;c[j>>2]=Dh(c[c[e>>2]>>2]|0,c[(c[k>>2]|0)+20>>2]|0)|0;Uw(c[l>>2]|0,127,c[j>>2]|0,0,0,c[c[k>>2]>>2]|0,0)|0;c[k>>2]=c[(c[k>>2]|0)+32>>2]}Uw(c[l>>2]|0,125,c[h>>2]|0,0,0,c[c[f>>2]>>2]|0,0)|0;d=c[c[e>>2]>>2]|0;c[m>>2]=c[g>>2];c[n>>2]=Bh(d,29077,m)|0;if(!(c[n>>2]|0)){i=o;return}Sw(c[l>>2]|0,c[h>>2]|0,c[n>>2]|0);d=gx(c[e>>2]|0,c[f>>2]|0)|0;c[n>>2]=d;if(!d){i=o;return}Sw(c[l>>2]|0,1,c[n>>2]|0);i=o;return}function fx(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;k=l+24|0;m=l+20|0;f=l+16|0;e=l+12|0;h=l+8|0;g=l+4|0;j=l;c[m>>2]=b;c[f>>2]=d;c[e>>2]=c[(c[(c[c[m>>2]>>2]|0)+16>>2]|0)+16+12>>2];c[h>>2]=0;if(a[(c[m>>2]|0)+442>>0]|0){c[k>>2]=0;m=c[k>>2]|0;i=l;return m|0}a:do if((c[e>>2]|0)!=(c[(c[f>>2]|0)+64>>2]|0)){c[g>>2]=c[(c[e>>2]|0)+40+8>>2];while(1){if(!(c[g>>2]|0))break a;c[j>>2]=c[(c[g>>2]|0)+8>>2];if((c[(c[j>>2]|0)+24>>2]|0)==(c[(c[f>>2]|0)+64>>2]|0)?0==(Td(c[(c[j>>2]|0)+4>>2]|0,c[c[f>>2]>>2]|0)|0):0){if(c[h>>2]|0)b=c[h>>2]|0;else b=c[(c[f>>2]|0)+60>>2]|0;c[(c[j>>2]|0)+32>>2]=b;c[h>>2]=c[j>>2]}c[g>>2]=c[c[g>>2]>>2]}}while(0);if(c[h>>2]|0)b=c[h>>2]|0;else b=c[(c[f>>2]|0)+60>>2]|0;c[k>>2]=b;m=c[k>>2]|0;i=l;return m|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;j=m;d=m+28|0;e=m+24|0;h=m+20|0;l=m+16|0;g=m+12|0;f=m+8|0;k=m+4|0;c[d>>2]=a;c[e>>2]=b;c[l>>2]=0;c[g>>2]=c[(c[(c[c[d>>2]>>2]|0)+16>>2]|0)+16+12>>2];a:do if((c[(c[e>>2]|0)+64>>2]|0)!=(c[g>>2]|0)){c[f>>2]=c[c[d>>2]>>2];c[h>>2]=fx(c[d>>2]|0,c[e>>2]|0)|0;while(1){if(!(c[h>>2]|0))break a;if((c[(c[h>>2]|0)+20>>2]|0)==(c[g>>2]|0))c[l>>2]=hx(c[f>>2]|0,c[l>>2]|0,c[c[h>>2]>>2]|0)|0;c[h>>2]=c[(c[h>>2]|0)+32>>2]}}while(0);if(!(c[l>>2]|0)){l=c[l>>2]|0;i=m;return l|0}h=c[c[d>>2]>>2]|0;c[j>>2]=c[l>>2];c[k>>2]=Bh(h,29089,j)|0;Sf(c[c[d>>2]>>2]|0,c[l>>2]|0);c[l>>2]=c[k>>2];l=c[l>>2]|0;i=m;return l|0}function hx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;j=l+8|0;h=l;e=l+28|0;f=l+24|0;g=l+20|0;k=l+16|0;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;a=c[e>>2]|0;if(c[f>>2]|0){h=c[g>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=h;c[k>>2]=Bh(a,29121,j)|0;Sf(c[e>>2]|0,c[f>>2]|0);k=c[k>>2]|0;i=l;return k|0}else{c[h>>2]=c[g>>2];c[k>>2]=Bh(a,29113,h)|0;k=c[k>>2]|0;i=l;return k|0}return 0}function ix(f,g,j,k,l,m){f=f|0;g=g|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,D=0,E=0;E=i;i=i+64|0;t=E;z=E+52|0;v=E+48|0;n=E+44|0;x=E+58|0;y=E+57|0;A=E+40|0;o=E+36|0;s=E+32|0;w=E+28|0;B=E+24|0;r=E+20|0;u=E+16|0;D=E+12|0;p=E+56|0;q=E+8|0;c[v>>2]=f;c[n>>2]=g;a[x>>0]=j;a[y>>0]=k;c[A>>2]=l;c[o>>2]=m;c[w>>2]=0;c[B>>2]=0;c[r>>2]=1;c[u>>2]=19266;c[D>>2]=0;if(!(c[n>>2]|0)){c[c[A>>2]>>2]=0;c[z>>2]=0;D=c[z>>2]|0;i=E;return D|0}while(1){l=d[c[n>>2]>>0]|0;c[s>>2]=l;if((l|0)!=156)break;c[n>>2]=c[(c[n>>2]|0)+12>>2]}if((c[s>>2]|0)==157)c[s>>2]=d[(c[n>>2]|0)+38>>0];if((c[s>>2]|0)==38){a[p>>0]=jx(c[(c[n>>2]|0)+8>>2]|0,0)|0;c[D>>2]=ix(c[v>>2]|0,c[(c[n>>2]|0)+12>>2]|0,a[x>>0]|0,a[p>>0]|0,c[A>>2]|0,c[o>>2]|0)|0;if(c[c[A>>2]>>2]|0){kx(c[c[A>>2]>>2]|0,a[p>>0]|0,1);lx(c[c[A>>2]>>2]|0,a[y>>0]|0,1)}c[z>>2]=c[D>>2];D=c[z>>2]|0;i=E;return D|0}do if((c[s>>2]|0)==155){if((d[c[(c[n>>2]|0)+12>>2]>>0]|0|0)!=132?(d[c[(c[n>>2]|0)+12>>2]>>0]|0|0)!=133:0)break;c[n>>2]=c[(c[n>>2]|0)+12>>2];c[s>>2]=d[c[n>>2]>>0];c[r>>2]=-1;c[u>>2]=29135}while(0);do if((c[s>>2]|0)==97|(c[s>>2]|0)==133|(c[s>>2]|0)==132){c[B>>2]=mx(c[v>>2]|0,c[o>>2]|0)|0;if(c[B>>2]|0){if(c[(c[n>>2]|0)+4>>2]&1024){v=c[B>>2]|0;u=c[(c[n>>2]|0)+8>>2]|0;w=c[r>>2]|0;w=rR(u|0,((u|0)<0)<<31>>31|0,w|0,((w|0)<0)<<31>>31|0)|0;eh(v,w,C)}else{l=c[v>>2]|0;g=c[(c[n>>2]|0)+8>>2]|0;c[t>>2]=c[u>>2];c[t+4>>2]=g;c[w>>2]=Bh(l,25552,t)|0;if(!(c[w>>2]|0)){n=43;break}Wh(c[B>>2]|0,-1,c[w>>2]|0,1,170)}if((c[s>>2]|0)==132|(c[s>>2]|0)==133?(d[y>>0]|0|0)==65:0)lx(c[B>>2]|0,67,1);else lx(c[B>>2]|0,a[y>>0]|0,1);if((e[(c[B>>2]|0)+8>>1]|0)&12){y=(c[B>>2]|0)+8|0;b[y>>1]=(e[y>>1]|0)&-3}if((d[x>>0]|0|0)!=1){c[D>>2]=Zt(c[B>>2]|0,d[x>>0]|0)|0;n=42}else n=42}else n=43}else{if((c[s>>2]|0)!=155){if((c[s>>2]|0)==101){c[B>>2]=mx(c[v>>2]|0,c[o>>2]|0)|0;if(!(c[B>>2]|0)){n=43;break}else{n=42;break}}if((c[s>>2]|0)!=134){n=42;break}c[B>>2]=mx(c[v>>2]|0,c[o>>2]|0)|0;if(!(c[B>>2]|0)){n=43;break}c[w>>2]=(c[(c[n>>2]|0)+8>>2]|0)+2;c[q>>2]=(If(c[w>>2]|0)|0)-1;y=c[B>>2]|0;n=ox(c[v>>2]|0,c[w>>2]|0,c[q>>2]|0)|0;dh(y,n,(c[q>>2]|0)/2|0,0,170)|0;n=42;break}w=0==(dx(c[v>>2]|0,c[(c[n>>2]|0)+12>>2]|0,a[x>>0]|0,a[y>>0]|0,B)|0);if(w&(c[B>>2]|0)!=0){nx(c[B>>2]|0)|0;n=c[B>>2]|0;do if(!((e[(c[B>>2]|0)+8>>1]|0)&8)){w=n;n=c[B>>2]|0;if((c[w>>2]|0)==0?(c[w+4>>2]|0)==-2147483648:0){h[n>>3]=9223372036854775808.0;b[(c[B>>2]|0)+8>>1]=(e[(c[B>>2]|0)+8>>1]|0)&-49664|8;break}else{v=n;v=fR(0,0,c[v>>2]|0,c[v+4>>2]|0)|0;w=c[B>>2]|0;c[w>>2]=v;c[w+4>>2]=C;break}}else h[c[B>>2]>>3]=-+h[n>>3];while(0);lx(c[B>>2]|0,a[y>>0]|0,a[x>>0]|0);n=42}else n=42}while(0);if((n|0)==42){c[c[A>>2]>>2]=c[B>>2];c[z>>2]=c[D>>2];D=c[z>>2]|0;i=E;return D|0}else if((n|0)==43){jh(c[v>>2]|0);Sf(c[v>>2]|0,c[w>>2]|0);$g(c[B>>2]|0);c[z>>2]=7;D=c[z>>2]|0;i=E;return D|0}return 0}function jx(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;f=o+21|0;g=o+16|0;h=o+12|0;k=o+8|0;j=o+20|0;m=o+4|0;l=o;c[g>>2]=b;c[h>>2]=e;c[k>>2]=0;a[j>>0]=67;c[m>>2]=0;if(!(c[g>>2]|0)){a[f>>0]=a[j>>0]|0;n=a[f>>0]|0;i=o;return n|0}a:while(1){if(!(a[c[g>>2]>>0]|0))break;c[k>>2]=(c[k>>2]<<8)+(d[18477+(a[c[g>>2]>>0]&255)>>0]|0);c[g>>2]=(c[g>>2]|0)+1;if((c[k>>2]|0)==1667785074){a[j>>0]=66;c[m>>2]=c[g>>2];continue}if((c[k>>2]|0)==1668050786){a[j>>0]=66;continue}if((c[k>>2]|0)==1952807028){a[j>>0]=66;continue}do if((c[k>>2]|0)==1651273570){if((a[j>>0]|0)!=67?(a[j>>0]|0)!=69:0)break;a[j>>0]=65;if((a[c[g>>2]>>0]|0)!=40)continue a;c[m>>2]=c[g>>2];continue a}while(0);if((c[k>>2]|0)==1919246700?(a[j>>0]|0)==67:0){a[j>>0]=69;continue}if((c[k>>2]|0)==1718382433?(a[j>>0]|0)==67:0){a[j>>0]=69;continue}if((c[k>>2]|0)==1685026146?(a[j>>0]|0)==67:0){a[j>>0]=69;continue}if((c[k>>2]&16777215|0)==6909556){n=25;break}}if((n|0)==25)a[j>>0]=68;b:do if((c[h>>2]|0)!=0?(a[c[h>>2]>>0]=1,(a[j>>0]|0)<67):0){if(!(c[m>>2]|0)){a[c[h>>2]>>0]=5;break}while(1){if(!(a[c[m>>2]>>0]|0))break b;if(d[19267+(d[c[m>>2]>>0]|0)>>0]&4)break;c[m>>2]=(c[m>>2]|0)+1}c[l>>2]=0;Li(c[m>>2]|0,l)|0;n=((c[l>>2]|0)/4|0)+1|0;c[l>>2]=n;c[l>>2]=(c[l>>2]|0)>255?255:n;a[c[h>>2]>>0]=c[l>>2]}while(0);a[f>>0]=a[j>>0]|0;n=a[f>>0]|0;i=o;return n|0}function kx(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;m=i;i=i+16|0;k=m;j=m+5|0;l=m+4|0;c[k>>2]=f;a[j>>0]=g;a[l>>0]=h;if((e[(c[k>>2]|0)+8>>1]|0)&1){i=m;return}switch(d[j>>0]|0|0){case 65:{j=c[k>>2]|0;if(!((e[(c[k>>2]|0)+8>>1]|0)&16)){lx(j,66,a[l>>0]|0);b[(c[k>>2]|0)+8>>1]=(e[(c[k>>2]|0)+8>>1]|0)&-49664|16;i=m;return}else{l=j+8|0;b[l>>1]=(e[l>>1]|0)&-33264;i=m;return}}case 67:{nx(c[k>>2]|0)|0;i=m;return}case 68:{wx(c[k>>2]|0)|0;i=m;return}case 69:{xx(c[k>>2]|0)|0;i=m;return}default:{f=(c[k>>2]|0)+8|0;b[f>>1]=e[f>>1]|0|((e[(c[k>>2]|0)+8>>1]|0)&16)>>3;lx(c[k>>2]|0,66,a[l>>0]|0);l=(c[k>>2]|0)+8|0;b[l>>1]=(e[l>>1]|0)&-16413;i=m;return}}}function lx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+16|0;j=f;h=f+5|0;g=f+4|0;c[j>>2]=b;a[h>>0]=d;a[g>>0]=e;rx(c[j>>2]|0,a[h>>0]|0,a[g>>0]|0);i=f;return}function mx(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d+4|0;c[e>>2]=a;c[d>>2]=b;b=Vh(c[e>>2]|0)|0;i=d;return b|0}function nx(d){d=d|0;var f=0,g=0,j=0,k=0.0;g=i;i=i+16|0;f=g;c[f>>2]=d;do if(!((e[(c[f>>2]|0)+8>>1]|0)&13)){j=0==(Hi(c[(c[f>>2]|0)+16>>2]|0,c[f>>2]|0,c[(c[f>>2]|0)+12>>2]|0,a[(c[f>>2]|0)+10>>0]|0)|0);d=c[f>>2]|0;if(j){b[(c[f>>2]|0)+8>>1]=(e[d+8>>1]|0)&-49664|4;break}else{k=+Yg(d);h[c[f>>2]>>3]=k;b[(c[f>>2]|0)+8>>1]=(e[(c[f>>2]|0)+8>>1]|0)&-49664|8;px(c[f>>2]|0);break}}while(0);j=(c[f>>2]|0)+8|0;b[j>>1]=(e[j>>1]|0)&-19;i=g;return 0}function ox(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;l=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[l>>2]=b;c[f>>2]=d;c[g>>2]=e;d=((c[g>>2]|0)/2|0)+1|0;c[j>>2]=Fw(c[l>>2]|0,d,((d|0)<0)<<31>>31)|0;c[g>>2]=(c[g>>2]|0)+-1;if(!(c[j>>2]|0)){l=c[j>>2]|0;i=k;return l|0}c[h>>2]=0;while(1){b=c[h>>2]|0;if((c[h>>2]|0)>=(c[g>>2]|0))break;l=((Gi(a[(c[f>>2]|0)+b>>0]|0)|0)&255)<<4;l=(l|(Gi(a[(c[f>>2]|0)+((c[h>>2]|0)+1)>>0]|0)|0)&255)&255;a[(c[j>>2]|0)+((c[h>>2]|0)/2|0)>>0]=l;c[h>>2]=(c[h>>2]|0)+2}a[(c[j>>2]|0)+((b|0)/2|0)>>0]=0;l=c[j>>2]|0;i=k;return l|0}function px(a){a=a|0;var d=0,f=0,g=0,j=0,k=0,l=0,m=0;g=i;i=i+16|0;d=g+8|0;f=g;c[d>>2]=a;k=qx(+h[c[d>>2]>>3])|0;m=f;c[m>>2]=k;c[m+4>>2]=C;m=f;k=f;l=c[k+4>>2]|0;a=f;j=c[a+4>>2]|0;if(!(+h[c[d>>2]>>3]==+((c[m>>2]|0)>>>0)+4294967296.0*+(c[m+4>>2]|0)&((l|0)>-2147483648|(l|0)==-2147483648&(c[k>>2]|0)>>>0>0)&((j|0)<2147483647|(j|0)==2147483647&(c[a>>2]|0)>>>0<4294967295))){i=g;return}k=f;l=c[k+4>>2]|0;m=c[d>>2]|0;c[m>>2]=c[k>>2];c[m+4>>2]=l;b[(c[d>>2]|0)+8>>1]=(e[(c[d>>2]|0)+8>>1]|0)&-49664|4;i=g;return}function qx(a){a=+a;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;b=e+8|0;d=e;h[d>>3]=a;do if(!(+h[d>>3]<=-9223372036854775808.0))if(+h[d>>3]>=9223372036854775808.0){d=b;c[d>>2]=-1;c[d+4>>2]=2147483647;break}else{a=+h[d>>3];f=+N(a)>=1.0?a>0.0?~~+$(+M(a/4294967296.0),4294967295.0)>>>0:~~+Z((a-+(~~a>>>0))/4294967296.0)>>>0:0;d=b;c[d>>2]=~~a>>>0;c[d+4>>2]=f;break}else{f=b;c[f>>2]=0;c[f+4>>2]=-2147483648}while(0);f=b;C=c[f+4>>2]|0;i=e;return c[f>>2]|0}function rx(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;h=l+5|0;j=l+4|0;c[k>>2]=d;a[h>>0]=f;a[j>>0]=g;if((a[h>>0]|0)<67){if((a[h>>0]|0)!=66){i=l;return}if(0==(e[(c[k>>2]|0)+8>>1]&2|0)?(e[(c[k>>2]|0)+8>>1]&12|0)!=0:0)sx(c[k>>2]|0,a[j>>0]|0,1)|0;k=(c[k>>2]|0)+8|0;b[k>>1]=e[k>>1]&-13;i=l;return}if(e[(c[k>>2]|0)+8>>1]&4){i=l;return}h=c[k>>2]|0;if(e[(c[k>>2]|0)+8>>1]&8){px(h);i=l;return}if(!(e[h+8>>1]&2)){i=l;return}xh(c[k>>2]|0,1);i=l;return}function sx(f,g,j){f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r+8|0;p=r;k=r+28|0;l=r+24|0;m=r+33|0;n=r+32|0;o=r+20|0;c[l>>2]=f;a[m>>0]=g;a[n>>0]=j;c[o>>2]=e[(c[l>>2]|0)+8>>1];c[r+16>>2]=32;if(tx(c[l>>2]|0,32)|0){c[k>>2]=7;q=c[k>>2]|0;i=r;return q|0}j=c[(c[l>>2]|0)+16>>2]|0;g=c[l>>2]|0;if(c[o>>2]&4){f=g;o=c[f+4>>2]|0;q=p;c[q>>2]=c[f>>2];c[q+4>>2]=o;Qd(32,j,29137,p)|0}else{h[q>>3]=+h[g>>3];Qd(32,j,29142,q)|0}q=If(c[(c[l>>2]|0)+16>>2]|0)|0;c[(c[l>>2]|0)+12>>2]=q;a[(c[l>>2]|0)+10>>0]=1;q=(c[l>>2]|0)+8|0;b[q>>1]=e[q>>1]|514;if(a[n>>0]|0){q=(c[l>>2]|0)+8|0;b[q>>1]=e[q>>1]&-13}Zt(c[l>>2]|0,d[m>>0]|0)|0;c[k>>2]=0;q=c[k>>2]|0;i=r;return q|0}function tx(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+8|0;g=j+4|0;h=j;c[g>>2]=a;c[h>>2]=d;a=c[g>>2]|0;if((c[(c[g>>2]|0)+24>>2]|0)<(c[h>>2]|0)){c[f>>2]=ux(a,c[h>>2]|0,0)|0;h=c[f>>2]|0;i=j;return h|0}else{c[(c[g>>2]|0)+16>>2]=c[a+20>>2];h=(c[g>>2]|0)+8|0;b[h>>1]=(e[h>>1]|0)&13;c[f>>2]=0;h=c[f>>2]|0;i=j;return h|0}return 0}function ux(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l+12|0;j=l+8|0;g=l+4|0;k=l;c[j>>2]=a;c[g>>2]=d;c[k>>2]=f;do if((c[(c[j>>2]|0)+24>>2]|0)<(c[g>>2]|0)){if((c[g>>2]|0)<32)c[g>>2]=32;if(((c[k>>2]|0)!=0?(c[(c[j>>2]|0)+24>>2]|0)>0:0)?(c[(c[j>>2]|0)+16>>2]|0)==(c[(c[j>>2]|0)+20>>2]|0):0){a=c[g>>2]|0;a=vx(c[(c[j>>2]|0)+32>>2]|0,c[(c[j>>2]|0)+16>>2]|0,a,((a|0)<0)<<31>>31)|0;c[(c[j>>2]|0)+20>>2]=a;c[(c[j>>2]|0)+16>>2]=a;c[k>>2]=0}else{if((c[(c[j>>2]|0)+24>>2]|0)>0)Sf(c[(c[j>>2]|0)+32>>2]|0,c[(c[j>>2]|0)+20>>2]|0);a=c[g>>2]|0;a=yh(c[(c[j>>2]|0)+32>>2]|0,a,((a|0)<0)<<31>>31)|0;c[(c[j>>2]|0)+20>>2]=a}g=c[j>>2]|0;if(c[(c[j>>2]|0)+20>>2]|0){a=$t(c[g+32>>2]|0,c[(c[j>>2]|0)+20>>2]|0)|0;c[(c[j>>2]|0)+24>>2]=a;break}fh(g);c[(c[j>>2]|0)+16>>2]=0;c[(c[j>>2]|0)+24>>2]=0;c[h>>2]=7;k=c[h>>2]|0;i=l;return k|0}while(0);if(((c[k>>2]|0)!=0?(c[(c[j>>2]|0)+16>>2]|0)!=0:0)?(c[(c[j>>2]|0)+16>>2]|0)!=(c[(c[j>>2]|0)+20>>2]|0):0)iR(c[(c[j>>2]|0)+20>>2]|0,c[(c[j>>2]|0)+16>>2]|0,c[(c[j>>2]|0)+12>>2]|0)|0;if((e[(c[j>>2]|0)+8>>1]|0)&1024)Qb[c[(c[j>>2]|0)+36>>2]&255](c[(c[j>>2]|0)+16>>2]|0);c[(c[j>>2]|0)+16>>2]=c[(c[j>>2]|0)+20>>2];k=(c[j>>2]|0)+8|0;b[k>>1]=(e[k>>1]|0)&-7169;c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}function vx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;f=j+16|0;g=j+12|0;k=j;h=j+8|0;c[f>>2]=a;c[g>>2]=b;b=k;c[b>>2]=d;c[b+4>>2]=e;b=k;c[h>>2]=Ew(c[f>>2]|0,c[g>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0;if(c[h>>2]|0){k=c[h>>2]|0;i=j;return k|0}Sf(c[f>>2]|0,c[g>>2]|0);k=c[h>>2]|0;i=j;return k|0}function wx(a){a=a|0;var d=0,f=0,g=0;d=i;i=i+16|0;f=d;c[f>>2]=a;g=Zg(c[f>>2]|0)|0;a=c[f>>2]|0;c[a>>2]=g;c[a+4>>2]=C;b[(c[f>>2]|0)+8>>1]=(e[(c[f>>2]|0)+8>>1]|0)&-49664|4;i=d;return 0}function xx(a){a=a|0;var d=0,f=0,g=0.0;d=i;i=i+16|0;f=d;c[f>>2]=a;g=+Yg(c[f>>2]|0);h[c[f>>2]>>3]=g;b[(c[f>>2]|0)+8>>1]=(e[(c[f>>2]|0)+8>>1]|0)&-49664|8;i=d;return 0}function yx(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;f=k+12|0;g=k+8|0;h=k+4|0;c[g>>2]=b;c[h>>2]=e;if((((a[(c[c[g>>2]>>2]|0)+140+5>>0]|0)==0?(d[(c[g>>2]|0)+18>>0]|0)==0:0)?(c[(c[c[g>>2]>>2]|0)+24>>2]&2048|0)==0:0)?0==(zd(c[h>>2]|0,28715,7)|0):0){e=c[g>>2]|0;c[j>>2]=c[h>>2];Ah(e,31646,j);c[f>>2]=1;e=c[f>>2]|0;i=k;return e|0}c[f>>2]=0;e=c[f>>2]|0;i=k;return e|0}function zx(a,f){a=a|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;g=r;h=r+36|0;j=r+32|0;k=r+28|0;p=r+24|0;o=r+20|0;n=r+16|0;m=r+12|0;l=r+8|0;q=r+4|0;c[j>>2]=a;c[k>>2]=f;c[n>>2]=0;c[l>>2]=c[c[j>>2]>>2];if(Fx(c[j>>2]|0,c[k>>2]|0)|0){c[h>>2]=1;q=c[h>>2]|0;i=r;return q|0}if(d[(c[k>>2]|0)+42>>0]&16){c[h>>2]=0;q=c[h>>2]|0;i=r;return q|0}if((b[(c[k>>2]|0)+34>>1]|0)>0){c[h>>2]=0;q=c[h>>2]|0;i=r;return q|0}if((b[(c[k>>2]|0)+34>>1]|0)<0){q=c[j>>2]|0;c[g>>2]=c[c[k>>2]>>2];Ah(q,29854,g);c[h>>2]=1;q=c[h>>2]|0;i=r;return q|0}a=c[l>>2]|0;do if(c[(c[k>>2]|0)+24>>2]|0){q=a+248|0;c[q>>2]=(c[q>>2]|0)+1;Gx(c[j>>2]|0,c[(c[k>>2]|0)+24>>2]|0,(c[k>>2]|0)+34|0,(c[k>>2]|0)+4|0)|0;q=(c[l>>2]|0)+248|0;c[q>>2]=(c[q>>2]|0)+-1}else{c[o>>2]=Hx(a,c[(c[k>>2]|0)+12>>2]|0,0)|0;if(!(c[o>>2]|0)){c[n>>2]=(c[n>>2]|0)+1;break}c[m>>2]=c[(c[j>>2]|0)+72>>2];Ix(c[j>>2]|0,c[(c[o>>2]|0)+32>>2]|0);b[(c[k>>2]|0)+34>>1]=-1;g=(c[l>>2]|0)+248|0;c[g>>2]=(c[g>>2]|0)+1;c[q>>2]=c[(c[l>>2]|0)+288>>2];c[(c[l>>2]|0)+288>>2]=0;c[p>>2]=Jx(c[j>>2]|0,c[o>>2]|0)|0;c[(c[l>>2]|0)+288>>2]=c[q>>2];q=(c[l>>2]|0)+248|0;c[q>>2]=(c[q>>2]|0)+-1;c[(c[j>>2]|0)+72>>2]=c[m>>2];if(c[p>>2]|0){b[(c[k>>2]|0)+34>>1]=b[(c[p>>2]|0)+34>>1]|0;c[(c[k>>2]|0)+4>>2]=c[(c[p>>2]|0)+4>>2];b[(c[p>>2]|0)+34>>1]=0;c[(c[p>>2]|0)+4>>2]=0;Qf(c[l>>2]|0,c[p>>2]|0)}else{b[(c[k>>2]|0)+34>>1]=0;c[n>>2]=(c[n>>2]|0)+1}Wu(c[l>>2]|0,c[o>>2]|0)}while(0);q=(c[(c[k>>2]|0)+64>>2]|0)+78|0;b[q>>1]=e[q>>1]|2;c[h>>2]=c[n>>2];q=c[h>>2]|0;i=r;return q|0}function Ax(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=a;c[g>>2]=b;c[e>>2]=c[(c[g>>2]|0)+56>>2];while(1){if(!(c[e>>2]|0)){d=5;break}if((c[c[e>>2]>>2]|0)==(c[d>>2]|0)){d=5;break}c[e>>2]=c[(c[e>>2]|0)+24>>2]}if((d|0)==5){i=f;return c[e>>2]|0}return 0}function Bx(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;d=e;c[f>>2]=b;b=c[f>>2]|0;if(c[(c[f>>2]|0)+416>>2]|0)b=c[b+416>>2]|0;c[d>>2]=b;a[(c[d>>2]|0)+21>>0]=1;i=e;return}function Cx(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;k=j+16|0;e=j+12|0;h=j+8|0;f=j+4|0;g=j;c[k>>2]=a;c[e>>2]=b;c[h>>2]=0;c[f>>2]=c[k>>2];if((c[e>>2]|0)>=0)c[g>>2]=(c[f>>2]|0)+(c[e>>2]|0);else c[g>>2]=-1;while(1){if(!(d[c[f>>2]>>0]|0)){e=10;break}if((c[f>>2]|0)>>>0>=(c[g>>2]|0)>>>0){e=10;break}k=c[f>>2]|0;c[f>>2]=k+1;a:do if((d[k>>0]|0|0)>=192)while(1){if(((d[c[f>>2]>>0]|0)&192|0)!=128)break a;c[f>>2]=(c[f>>2]|0)+1}while(0);c[h>>2]=(c[h>>2]|0)+1}if((e|0)==10){i=j;return c[h>>2]|0}return 0}function Dx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;d=g+12|0;h=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[h>>2]=b;c[f>>2]=0;c[e>>2]=Ex(c[h>>2]|0)|0;while(1){if(!(c[e>>2]|0))break;c[f>>2]=hx(c[c[d>>2]>>2]|0,c[f>>2]|0,c[c[c[e>>2]>>2]>>2]|0)|0;c[e>>2]=c[(c[e>>2]|0)+12>>2]}i=g;return c[f>>2]|0}function Ex(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=nj((c[(c[d>>2]|0)+64>>2]|0)+56|0,c[c[d>>2]>>2]|0)|0;i=b;return a|0}function Fx(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;m=q+8|0;l=q;e=q+44|0;f=q+40|0;g=q+36|0;h=q+32|0;o=q+28|0;j=q+24|0;k=q+20|0;p=q+16|0;n=q+12|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[c[f>>2]>>2];if(((d[(c[g>>2]|0)+42>>0]|0)&16|0)!=0?(Ax(c[h>>2]|0,c[g>>2]|0)|0)==0:0){c[o>>2]=c[c[(c[g>>2]|0)+52>>2]>>2];c[j>>2]=nj((c[h>>2]|0)+312|0,c[o>>2]|0)|0;if(c[j>>2]|0){c[n>>2]=0;c[k>>2]=oz(c[h>>2]|0,c[g>>2]|0,c[j>>2]|0,c[(c[c[j>>2]>>2]|0)+8>>2]|0,n)|0;if(c[k>>2]|0){p=c[f>>2]|0;c[m>>2]=c[n>>2];Ah(p,19255,m)}Sf(c[h>>2]|0,c[n>>2]|0)}else{c[p>>2]=c[c[(c[g>>2]|0)+52>>2]>>2];o=c[f>>2]|0;c[l>>2]=c[p>>2];Ah(o,31494,l);c[k>>2]=1}c[e>>2]=c[k>>2];p=c[e>>2]|0;i=q;return p|0}c[e>>2]=0;p=c[e>>2]|0;i=q;return p|0}function Gx(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;D=i;i=i+112|0;u=D+8|0;t=D;w=D+104|0;E=D+100|0;j=D+96|0;x=D+92|0;y=D+88|0;A=D+84|0;B=D+80|0;C=D+76|0;k=D+72|0;z=D+68|0;q=D+64|0;n=D+60|0;p=D+56|0;v=D+52|0;o=D+48|0;l=D+32|0;r=D+28|0;s=D+24|0;m=D+20|0;c[E>>2]=e;c[j>>2]=f;c[x>>2]=g;c[y>>2]=h;c[A>>2]=c[c[E>>2]>>2];uj(l);if(c[j>>2]|0){c[n>>2]=c[c[j>>2]>>2];c[z>>2]=ph(c[A>>2]|0,(c[n>>2]|0)*24|0,0)|0}else{c[n>>2]=0;c[z>>2]=0}b[c[x>>2]>>1]=c[n>>2];c[c[y>>2]>>2]=c[z>>2];c[B>>2]=0;c[q>>2]=c[z>>2];while(1){if((c[B>>2]|0)>=(c[n>>2]|0))break;if(!((a[(c[A>>2]|0)+65>>0]|0)!=0^1))break;c[p>>2]=Tx(c[(c[(c[j>>2]|0)+4>>2]|0)+((c[B>>2]|0)*20|0)>>2]|0)|0;E=c[(c[(c[j>>2]|0)+4>>2]|0)+((c[B>>2]|0)*20|0)+4>>2]|0;c[v>>2]=E;do if(!E){c[r>>2]=c[p>>2];while(1){f=c[r>>2]|0;if((d[c[r>>2]>>0]|0)!=122)break;c[r>>2]=c[f+16>>2]}if((d[f>>0]|0)==152?(c[(c[r>>2]|0)+44>>2]|0)!=0:0){c[m>>2]=b[(c[r>>2]|0)+32>>1];c[s>>2]=c[(c[r>>2]|0)+44>>2];if((c[m>>2]|0)<0)c[m>>2]=b[(c[s>>2]|0)+32>>1];if((c[m>>2]|0)>=0)f=c[(c[(c[s>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)>>2]|0;else f=25592;c[v>>2]=f;break}if((d[c[r>>2]>>0]|0)==27){c[v>>2]=c[(c[r>>2]|0)+8>>2];break}else{c[v>>2]=c[(c[(c[j>>2]|0)+4>>2]|0)+((c[B>>2]|0)*20|0)+8>>2];break}}while(0);E=c[A>>2]|0;c[t>>2]=c[v>>2];c[v>>2]=Bh(E,19255,t)|0;c[k>>2]=0;while(1){if(c[v>>2]|0)e=(nj(l,c[v>>2]|0)|0)!=0;else e=0;f=c[v>>2]|0;if(!e)break;c[o>>2]=If(f)|0;if((c[o>>2]|0)>0){c[C>>2]=(c[o>>2]|0)-1;while(1){if((c[C>>2]|0)<=0)break;if(!(d[19267+(d[(c[v>>2]|0)+(c[C>>2]|0)>>0]|0)>>0]&4))break;c[C>>2]=(c[C>>2]|0)+-1}if((a[(c[v>>2]|0)+(c[C>>2]|0)>>0]|0)==58)c[o>>2]=c[C>>2]}E=c[A>>2]|0;e=c[o>>2]|0;h=c[v>>2]|0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;c[u>>2]=e;c[u+4>>2]=h;c[u+8>>2]=g;c[v>>2]=Bh(E,31486,u)|0;if((c[k>>2]|0)>>>0<=3)continue;Sd(4,k)}c[c[q>>2]>>2]=f;if((c[v>>2]|0)!=0?(E=Oj(l,c[v>>2]|0,c[q>>2]|0)|0,(E|0)==(c[q>>2]|0)):0)jh(c[A>>2]|0);c[B>>2]=(c[B>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+24}vj(l);if(!(a[(c[A>>2]|0)+65>>0]|0)){c[w>>2]=0;E=c[w>>2]|0;i=D;return E|0}c[C>>2]=0;while(1){f=c[A>>2]|0;if((c[C>>2]|0)>=(c[B>>2]|0))break;Sf(f,c[(c[z>>2]|0)+((c[C>>2]|0)*24|0)>>2]|0);c[C>>2]=(c[C>>2]|0)+1}Sf(f,c[z>>2]|0);c[c[y>>2]>>2]=0;b[c[x>>2]>>1]=0;c[w>>2]=7;E=c[w>>2]|0;i=D;return E|0}function Hx(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;m=o+4|0;n=o;c[j>>2]=d;c[k>>2]=f;c[l>>2]=g;if(!(c[k>>2]|0)){c[h>>2]=0;n=c[h>>2]|0;i=o;return n|0}c[m>>2]=Fw(c[j>>2]|0,72,0)|0;if(!(c[m>>2]|0)){c[h>>2]=0;n=c[h>>2]|0;i=o;return n|0}f=vy(c[j>>2]|0,c[c[k>>2]>>2]|0,c[l>>2]|0)|0;c[c[m>>2]>>2]=f;f=lz(c[j>>2]|0,c[(c[k>>2]|0)+32>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+32>>2]=f;f=ny(c[j>>2]|0,c[(c[k>>2]|0)+36>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+36>>2]=f;f=vy(c[j>>2]|0,c[(c[k>>2]|0)+40>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+40>>2]=f;f=ny(c[j>>2]|0,c[(c[k>>2]|0)+44>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+44>>2]=f;f=vy(c[j>>2]|0,c[(c[k>>2]|0)+48>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+48>>2]=f;a[(c[m>>2]|0)+4>>0]=a[(c[k>>2]|0)+4>>0]|0;f=Hx(c[j>>2]|0,c[(c[k>>2]|0)+52>>2]|0,c[l>>2]|0)|0;c[n>>2]=f;c[(c[m>>2]|0)+52>>2]=f;if(c[n>>2]|0)c[(c[n>>2]|0)+56>>2]=c[m>>2];c[(c[m>>2]|0)+56>>2]=0;g=ny(c[j>>2]|0,c[(c[k>>2]|0)+60>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+60>>2]=g;g=ny(c[j>>2]|0,c[(c[k>>2]|0)+64>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+64>>2]=g;c[(c[m>>2]|0)+8>>2]=0;c[(c[m>>2]|0)+12>>2]=0;b[(c[m>>2]|0)+6>>1]=(e[(c[k>>2]|0)+6>>1]|0)&-17;c[(c[m>>2]|0)+16>>2]=-1;c[(c[m>>2]|0)+16+4>>2]=-1;g=(c[k>>2]|0)+24|0;f=c[g+4>>2]|0;n=(c[m>>2]|0)+24|0;c[n>>2]=c[g>>2];c[n+4>>2]=f;n=mz(c[j>>2]|0,c[(c[k>>2]|0)+68>>2]|0)|0;c[(c[m>>2]|0)+68>>2]=n;c[h>>2]=c[m>>2];n=c[h>>2]|0;i=o;return n|0}function Ix(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=h;return}c[f>>2]=0;c[g>>2]=(c[e>>2]|0)+8;while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0)){d=8;break}if((c[(c[g>>2]|0)+44>>2]|0)>=0){d=8;break}b=(c[d>>2]|0)+72|0;a=c[b>>2]|0;c[b>>2]=a+1;c[(c[g>>2]|0)+44>>2]=a;if(c[(c[g>>2]|0)+20>>2]|0)Ix(c[d>>2]|0,c[(c[(c[g>>2]|0)+20>>2]|0)+32>>2]|0);c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+72}if((d|0)==8){i=h;return}}function Jx(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;k=m+8|0;j=m+4|0;l=m;c[g>>2]=d;c[h>>2]=e;c[j>>2]=c[c[g>>2]>>2];c[l>>2]=c[(c[j>>2]|0)+24>>2];e=(c[j>>2]|0)+24|0;c[e>>2]=c[e>>2]&-5;e=(c[j>>2]|0)+24|0;c[e>>2]=c[e>>2]|64;Kx(c[g>>2]|0,c[h>>2]|0,0);if(c[(c[g>>2]|0)+68>>2]|0){c[f>>2]=0;l=c[f>>2]|0;i=m;return l|0}while(1){if(!(c[(c[h>>2]|0)+52>>2]|0))break;c[h>>2]=c[(c[h>>2]|0)+52>>2]}c[(c[j>>2]|0)+24>>2]=c[l>>2];c[k>>2]=ph(c[j>>2]|0,72,0)|0;if(!(c[k>>2]|0)){c[f>>2]=0;l=c[f>>2]|0;i=m;return l|0}b[(c[k>>2]|0)+36>>1]=1;c[c[k>>2]>>2]=0;b[(c[k>>2]|0)+38>>1]=200;Gx(c[g>>2]|0,c[c[h>>2]>>2]|0,(c[k>>2]|0)+34|0,(c[k>>2]|0)+4|0)|0;Lx(c[g>>2]|0,c[k>>2]|0,c[h>>2]|0);b[(c[k>>2]|0)+32>>1]=-1;if(a[(c[j>>2]|0)+65>>0]|0){Qf(c[j>>2]|0,c[k>>2]|0);c[f>>2]=0;l=c[f>>2]|0;i=m;return l|0}else{c[f>>2]=c[k>>2];l=c[f>>2]|0;i=m;return l|0}return 0}function Kx(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[h>>2]=b;c[j>>2]=f;c[k>>2]=g;if(!(c[j>>2]|0)){i=m;return}c[l>>2]=c[c[h>>2]>>2];if(a[(c[l>>2]|0)+65>>0]|0){i=m;return}if(e[(c[j>>2]|0)+6>>1]&64){i=m;return}Ux(c[h>>2]|0,c[j>>2]|0);if(c[(c[h>>2]|0)+68>>2]|0){i=m;return}if(d[(c[l>>2]|0)+65>>0]|0){i=m;return}Vx(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0);if(c[(c[h>>2]|0)+68>>2]|0){i=m;return}if(d[(c[l>>2]|0)+65>>0]|0){i=m;return}Wx(c[h>>2]|0,c[j>>2]|0);i=m;return}function Lx(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+80|0;h=t+76|0;j=t+72|0;k=t+68|0;m=t+64|0;r=t+32|0;p=t+24|0;q=t+20|0;n=t+16|0;o=t+12|0;l=t+8|0;s=t;c[h>>2]=e;c[j>>2]=f;c[k>>2]=g;c[m>>2]=c[c[h>>2]>>2];f=s;c[f>>2]=0;c[f+4>>2]=0;if(a[(c[m>>2]|0)+65>>0]|0){i=t;return}c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[r+24>>2]=0;c[r+28>>2]=0;c[r+4>>2]=c[(c[k>>2]|0)+32>>2];c[l>>2]=c[(c[c[k>>2]>>2]|0)+4>>2];c[n>>2]=0;c[p>>2]=c[(c[j>>2]|0)+4>>2];while(1){if((c[n>>2]|0)>=(b[(c[j>>2]|0)+34>>1]|0))break;c[o>>2]=c[(c[l>>2]|0)+((c[n>>2]|0)*20|0)>>2];if(!(c[(c[p>>2]|0)+12>>2]|0)){f=c[m>>2]|0;f=nh(f,Mx(r,c[o>>2]|0,(c[p>>2]|0)+22|0)|0)|0;c[(c[p>>2]|0)+12>>2]=f}g=s;g=gR(c[g>>2]|0,c[g+4>>2]|0,d[(c[p>>2]|0)+22>>0]|0,0)|0;f=s;c[f>>2]=g;c[f+4>>2]=C;f=Nx(c[o>>2]|0)|0;a[(c[p>>2]|0)+21>>0]=f;if(!(a[(c[p>>2]|0)+21>>0]|0))a[(c[p>>2]|0)+21>>0]=65;c[q>>2]=Ox(c[h>>2]|0,c[o>>2]|0)|0;if((c[q>>2]|0)!=0?(c[(c[p>>2]|0)+16>>2]|0)==0:0){f=nh(c[m>>2]|0,c[c[q>>2]>>2]|0)|0;c[(c[p>>2]|0)+16>>2]=f}c[n>>2]=(c[n>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+24}s=rR(c[s>>2]|0,c[s+4>>2]|0,4,0)|0;s=Hj(s,C)|0;b[(c[j>>2]|0)+40>>1]=s;i=t;return}function Mx(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+128|0;h=x+112|0;j=x+108|0;k=x+104|0;w=x+100|0;n=x+96|0;l=x+116|0;s=x+92|0;q=x+88|0;m=x+84|0;t=x+80|0;u=x+48|0;o=x+40|0;v=x+8|0;r=x+4|0;p=x;c[h>>2]=e;c[j>>2]=f;c[k>>2]=g;c[w>>2]=0;a[l>>0]=1;a:do switch(d[c[j>>2]>>0]|0){case 152:case 154:{c[s>>2]=0;c[q>>2]=0;c[m>>2]=b[(c[j>>2]|0)+32>>1];while(1){if(!(c[h>>2]|0))break;if(!((c[s>>2]|0)!=0^1))break;c[t>>2]=c[(c[h>>2]|0)+4>>2];c[n>>2]=0;while(1){if((c[n>>2]|0)>=(c[c[t>>2]>>2]|0))break;if((c[(c[t>>2]|0)+8+((c[n>>2]|0)*72|0)+44>>2]|0)==(c[(c[j>>2]|0)+28>>2]|0))break;c[n>>2]=(c[n>>2]|0)+1}if((c[n>>2]|0)<(c[c[t>>2]>>2]|0)){c[s>>2]=c[(c[t>>2]|0)+8+((c[n>>2]|0)*72|0)+16>>2];c[q>>2]=c[(c[t>>2]|0)+8+((c[n>>2]|0)*72|0)+20>>2];continue}else{c[h>>2]=c[(c[h>>2]|0)+16>>2];continue}}if(c[s>>2]|0){if(c[q>>2]|0){if((c[m>>2]|0)<0)break a;if((c[m>>2]|0)>=(c[c[c[q>>2]>>2]>>2]|0))break a;c[o>>2]=c[(c[(c[c[q>>2]>>2]|0)+4>>2]|0)+((c[m>>2]|0)*20|0)>>2];c[u+4>>2]=c[(c[q>>2]|0)+32>>2];c[u+16>>2]=c[h>>2];c[u>>2]=c[c[h>>2]>>2];c[w>>2]=Mx(u,c[o>>2]|0,l)|0;break a}if(c[(c[s>>2]|0)+64>>2]|0){if((c[m>>2]|0)<0)c[m>>2]=b[(c[s>>2]|0)+32>>1];if((c[m>>2]|0)<0){c[w>>2]=19623;break a}else{c[w>>2]=c[(c[(c[s>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)+12>>2];a[l>>0]=a[(c[(c[s>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)+22>>0]|0;break a}}}break}case 119:{c[r>>2]=c[(c[j>>2]|0)+20>>2];c[p>>2]=c[c[(c[c[r>>2]>>2]|0)+4>>2]>>2];c[v+4>>2]=c[(c[r>>2]|0)+32>>2];c[v+16>>2]=c[h>>2];c[v>>2]=c[c[h>>2]>>2];c[w>>2]=Mx(v,c[p>>2]|0,l)|0;break}default:{}}while(0);if(!(c[k>>2]|0)){w=c[w>>2]|0;i=x;return w|0}a[c[k>>2]>>0]=a[l>>0]|0;w=c[w>>2]|0;i=x;return w|0}function Nx(e){e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[g>>2]=e;c[g>>2]=Tx(c[g>>2]|0)|0;if(c[(c[g>>2]|0)+4>>2]&512){a[f>>0]=0;e=a[f>>0]|0;i=k;return e|0}c[j>>2]=d[c[g>>2]>>0];if((c[j>>2]|0)==119){a[f>>0]=Nx(c[c[(c[c[(c[g>>2]|0)+20>>2]>>2]|0)+4>>2]>>2]|0)|0;e=a[f>>0]|0;i=k;return e|0}if((c[j>>2]|0)==38){a[f>>0]=jx(c[(c[g>>2]|0)+8>>2]|0,0)|0;e=a[f>>0]|0;i=k;return e|0}if((c[j>>2]|0)==154|(c[j>>2]|0)==152|(c[j>>2]|0)==157?(c[(c[g>>2]|0)+44>>2]|0)!=0:0){c[h>>2]=b[(c[g>>2]|0)+32>>1];if((c[h>>2]|0)<0){a[f>>0]=68;e=a[f>>0]|0;i=k;return e|0}else{a[f>>0]=a[(c[(c[(c[g>>2]|0)+44>>2]|0)+4>>2]|0)+((c[h>>2]|0)*24|0)+21>>0]|0;e=a[f>>0]|0;i=k;return e|0}}a[f>>0]=a[(c[g>>2]|0)+1>>0]|0;e=a[f>>0]|0;i=k;return e|0}function Ox(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+48|0;g=r+36|0;s=r+32|0;h=r+28|0;n=r+24|0;m=r+20|0;l=r+16|0;k=r+12|0;p=r+8|0;o=r+4|0;j=r;c[g>>2]=e;c[s>>2]=f;c[h>>2]=c[c[g>>2]>>2];c[n>>2]=0;c[m>>2]=c[s>>2];while(1){if(!(c[m>>2]|0))break;c[l>>2]=d[c[m>>2]>>0];if(c[(c[m>>2]|0)+4>>2]&512)break;if((c[l>>2]|0)==38|(c[l>>2]|0)==156){c[m>>2]=c[(c[m>>2]|0)+12>>2];continue}if((c[l>>2]|0)==95){q=9;break}if((c[l>>2]|0)==157?(d[(c[m>>2]|0)+38>>0]|0)==95:0){q=9;break}if((c[l>>2]|0)==154|(c[l>>2]|0)==152|(c[l>>2]|0)==157|(c[l>>2]|0)==62?(c[(c[m>>2]|0)+44>>2]|0)!=0:0){q=12;break}if(!(c[(c[m>>2]|0)+4>>2]&256))break;if((c[(c[m>>2]|0)+12>>2]|0)!=0?(c[(c[(c[m>>2]|0)+12>>2]|0)+4>>2]&256|0)!=0:0){c[m>>2]=c[(c[m>>2]|0)+12>>2];continue}c[o>>2]=c[(c[m>>2]|0)+16>>2];a:do if((c[(c[m>>2]|0)+20>>2]|0)!=0?(c[(c[m>>2]|0)+4>>2]&2048|0)==0:0){c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[c[(c[m>>2]|0)+20>>2]>>2]|0))break a;f=c[j>>2]|0;if(c[(c[(c[(c[(c[m>>2]|0)+20>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0)>>2]|0)+4>>2]&256)break;c[j>>2]=f+1}c[o>>2]=c[(c[(c[(c[m>>2]|0)+20>>2]|0)+4>>2]|0)+(f*20|0)>>2]}while(0);c[m>>2]=c[o>>2]}if((q|0)==9)c[n>>2]=Px(c[g>>2]|0,a[(c[h>>2]|0)+62>>0]|0,0,c[(c[m>>2]|0)+8>>2]|0)|0;else if((q|0)==12?(c[k>>2]=b[(c[m>>2]|0)+32>>1],(c[k>>2]|0)>=0):0){c[p>>2]=c[(c[(c[(c[m>>2]|0)+44>>2]|0)+4>>2]|0)+((c[k>>2]|0)*24|0)+16>>2];c[n>>2]=Mj(c[h>>2]|0,a[(c[h>>2]|0)+62>>0]|0,c[p>>2]|0,0)|0}if(!(Qx(c[g>>2]|0,c[n>>2]|0)|0)){s=c[n>>2]|0;i=r;return s|0}c[n>>2]=0;s=c[n>>2]|0;i=r;return s|0}function Px(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+32|0;n=o;h=o+20|0;j=o+24|0;p=o+16|0;k=o+12|0;m=o+8|0;l=o+4|0;c[h>>2]=b;a[j>>0]=e;c[p>>2]=f;c[k>>2]=g;c[l>>2]=c[c[h>>2]>>2];c[m>>2]=c[p>>2];if(!(c[m>>2]|0))c[m>>2]=Mj(c[l>>2]|0,a[j>>0]|0,c[k>>2]|0,0)|0;if(!((c[m>>2]|0)!=0?(c[(c[m>>2]|0)+12>>2]|0)!=0:0)){Rx(c[l>>2]|0,d[j>>0]|0,c[k>>2]|0);c[m>>2]=Mj(c[l>>2]|0,a[j>>0]|0,c[k>>2]|0,0)|0}if(((c[m>>2]|0)!=0?(c[(c[m>>2]|0)+12>>2]|0)==0:0)?(Sx(c[l>>2]|0,c[m>>2]|0)|0)!=0:0)c[m>>2]=0;if(c[m>>2]|0){p=c[m>>2]|0;i=o;return p|0}p=c[h>>2]|0;c[n>>2]=c[k>>2];Ah(p,29884,n);p=c[m>>2]|0;i=o;return p|0}function Qx(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+20|0;f=l+16|0;g=l+12|0;k=l+8|0;h=l+4|0;j=l;c[f>>2]=b;c[g>>2]=d;if((c[g>>2]|0)!=0?(c[k>>2]=c[c[g>>2]>>2],c[h>>2]=c[c[f>>2]>>2],c[j>>2]=Px(c[f>>2]|0,a[(c[h>>2]|0)+62>>0]|0,c[g>>2]|0,c[k>>2]|0)|0,(c[j>>2]|0)==0):0){c[e>>2]=1;k=c[e>>2]|0;i=l;return k|0}c[e>>2]=0;k=c[e>>2]|0;i=l;return k|0}function Rx(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;l=n+8|0;m=n+4|0;k=n;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;do if(c[(c[g>>2]|0)+224>>2]|0){c[l>>2]=nh(c[g>>2]|0,c[j>>2]|0)|0;if(c[l>>2]|0){_b[c[(c[g>>2]|0)+224>>2]&255](c[(c[g>>2]|0)+232>>2]|0,c[g>>2]|0,c[h>>2]|0,c[l>>2]|0);Sf(c[g>>2]|0,c[l>>2]|0);break}else{i=n;return}}while(0);if(!(c[(c[g>>2]|0)+228>>2]|0)){i=n;return}c[k>>2]=Vh(c[g>>2]|0)|0;Wh(c[k>>2]|0,-1,c[j>>2]|0,1,0);c[m>>2]=Wg(c[k>>2]|0,((a[960]|0)==0?3:2)&255)|0;if(c[m>>2]|0)_b[c[(c[g>>2]|0)+228>>2]&255](c[(c[g>>2]|0)+232>>2]|0,c[g>>2]|0,d[(c[g>>2]|0)+62>>0]|0,c[m>>2]|0);$g(c[k>>2]|0);i=n;return}function Sx(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;h=l+20|0;e=l+16|0;j=l+12|0;k=l+8|0;g=l+4|0;f=l;c[e>>2]=b;c[j>>2]=d;c[g>>2]=c[c[j>>2]>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=3){e=6;break}c[k>>2]=Mj(c[e>>2]|0,a[29915+(c[f>>2]|0)>>0]|0,c[g>>2]|0,0)|0;if(c[(c[k>>2]|0)+12>>2]|0){e=4;break}c[f>>2]=(c[f>>2]|0)+1}if((e|0)==4){g=c[j>>2]|0;k=c[k>>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[(c[j>>2]|0)+16>>2]=0;c[h>>2]=0;k=c[h>>2]|0;i=l;return k|0}else if((e|0)==6){c[h>>2]=1;k=c[h>>2]|0;i=l;return k|0}return 0}function Tx(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;d=e;c[d>>2]=a;while(1){if(c[d>>2]|0)a=(c[(c[d>>2]|0)+4>>2]&4096|0)!=0;else a=0;b=c[d>>2]|0;if(!a)break;a=c[d>>2]|0;if(c[b+4>>2]&262144){c[d>>2]=c[c[(c[a+20>>2]|0)+4>>2]>>2];continue}else{c[d>>2]=c[a+12>>2];continue}}i=e;return b|0}function Ux(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,j=0;h=i;i=i+48|0;j=h+32|0;f=h+28|0;g=h;c[j>>2]=b;c[f>>2]=d;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0; +c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[g+4>>2]=190;c[g>>2]=c[j>>2];if(a[(c[j>>2]|0)+22>>0]|0){c[g+8>>2]=191;Zx(g,c[f>>2]|0)|0}c[g+8>>2]=192;if(e[(c[f>>2]|0)+6>>1]&512){j=c[f>>2]|0;Zx(g,j)|0;i=h;return}c[g+12>>2]=132;j=c[f>>2]|0;Zx(g,j)|0;i=h;return}function Vx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+48|0;j=e+36|0;f=e+32|0;h=e+28|0;g=e;c[j>>2]=a;c[f>>2]=b;c[h>>2]=d;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[g+4>>2]=193;c[g+8>>2]=194;c[g>>2]=c[j>>2];c[g+24>>2]=c[h>>2];Zx(g,c[f>>2]|0)|0;i=e;return}function Wx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+48|0;g=d+32|0;e=d+28|0;f=d;c[g>>2]=a;c[e>>2]=b;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+12>>2]=133;c[f+4>>2]=190;c[f>>2]=c[g>>2];Zx(f,c[e>>2]|0)|0;i=d;return}function Xx(a,f){a=a|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=i;i=i+32|0;p=n+28|0;o=n+24|0;j=n+20|0;g=n+16|0;m=n+12|0;h=n+8|0;l=n+4|0;k=n;c[p>>2]=a;c[o>>2]=f;a=(c[o>>2]|0)+6|0;b[a>>1]=e[a>>1]|0|64;c[j>>2]=c[c[p>>2]>>2];c[m>>2]=c[(c[o>>2]|0)+32>>2];c[g>>2]=0;c[h>>2]=(c[m>>2]|0)+8;while(1){if((c[g>>2]|0)>=(c[c[m>>2]>>2]|0))break;c[l>>2]=c[(c[h>>2]|0)+16>>2];if(((d[(c[l>>2]|0)+42>>0]|0)&2|0)!=0?(c[k>>2]=c[(c[h>>2]|0)+20>>2],(c[k>>2]|0)!=0):0){while(1){if(!(c[(c[k>>2]|0)+52>>2]|0))break;c[k>>2]=c[(c[k>>2]|0)+52>>2]}Lx(c[j>>2]|0,c[l>>2]|0,c[k>>2]|0)}c[g>>2]=(c[g>>2]|0)+1;c[h>>2]=(c[h>>2]|0)+72}i=n;return}function Yx(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d+4>>2]=a;c[d>>2]=b;i=d;return 0}function Zx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;f=h+8|0;d=h+4|0;g=h;c[f>>2]=a;c[d>>2]=b;do if(c[d>>2]|0){if((c[(c[f>>2]|0)+8>>2]|0)==0?(c[(c[f>>2]|0)+12>>2]|0)==0:0)break;c[g>>2]=0;a=(c[f>>2]|0)+16|0;c[a>>2]=(c[a>>2]|0)+1;while(1){if(!(c[d>>2]|0)){d=15;break}if((c[(c[f>>2]|0)+8>>2]|0)!=0?(c[g>>2]=Yb[c[(c[f>>2]|0)+8>>2]&255](c[f>>2]|0,c[d>>2]|0)|0,(c[g>>2]|0)!=0):0){d=15;break}if(_x(c[f>>2]|0,c[d>>2]|0)|0){d=11;break}if($x(c[f>>2]|0,c[d>>2]|0)|0){d=11;break}if(c[(c[f>>2]|0)+12>>2]|0)Rb[c[(c[f>>2]|0)+12>>2]&255](c[f>>2]|0,c[d>>2]|0);c[d>>2]=c[(c[d>>2]|0)+52>>2]}if((d|0)==11){g=(c[f>>2]|0)+16|0;c[g>>2]=(c[g>>2]|0)+-1;c[e>>2]=2;g=c[e>>2]|0;i=h;return g|0}else if((d|0)==15){f=(c[f>>2]|0)+16|0;c[f>>2]=(c[f>>2]|0)+-1;c[e>>2]=c[g>>2]&2;g=c[e>>2]|0;i=h;return g|0}}while(0);c[e>>2]=0;g=c[e>>2]|0;i=h;return g|0}function _x(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[e>>2]=a;c[f>>2]=b;do if(!(ay(c[e>>2]|0,c[c[f>>2]>>2]|0)|0)){if(by(c[e>>2]|0,c[(c[f>>2]|0)+36>>2]|0)|0){c[d>>2]=2;break}if(ay(c[e>>2]|0,c[(c[f>>2]|0)+40>>2]|0)|0){c[d>>2]=2;break}if(by(c[e>>2]|0,c[(c[f>>2]|0)+44>>2]|0)|0){c[d>>2]=2;break}if(ay(c[e>>2]|0,c[(c[f>>2]|0)+48>>2]|0)|0){c[d>>2]=2;break}if(by(c[e>>2]|0,c[(c[f>>2]|0)+60>>2]|0)|0){c[d>>2]=2;break}if(by(c[e>>2]|0,c[(c[f>>2]|0)+64>>2]|0)|0){c[d>>2]=2;break}else{c[d>>2]=0;break}}else c[d>>2]=2;while(0);i=g;return c[d>>2]|0}function $x(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+32|0;j=k+20|0;e=k+16|0;l=k+12|0;h=k+8|0;f=k+4|0;g=k;c[e>>2]=a;c[l>>2]=b;c[h>>2]=c[(c[l>>2]|0)+32>>2];a:do if(c[h>>2]|0){c[f>>2]=c[c[h>>2]>>2];c[g>>2]=(c[h>>2]|0)+8;while(1){if((c[f>>2]|0)<=0)break a;if(Zx(c[e>>2]|0,c[(c[g>>2]|0)+20>>2]|0)|0){e=5;break}if(((d[(c[g>>2]|0)+36+1>>0]|0)>>>2&1|0)!=0?(ay(c[e>>2]|0,c[(c[g>>2]|0)+64>>2]|0)|0)!=0:0){e=8;break}c[f>>2]=(c[f>>2]|0)+-1;c[g>>2]=(c[g>>2]|0)+72}if((e|0)==5){c[j>>2]=2;l=c[j>>2]|0;i=k;return l|0}else if((e|0)==8){c[j>>2]=2;l=c[j>>2]|0;i=k;return l|0}}while(0);c[j>>2]=0;l=c[j>>2]|0;i=k;return l|0}function ay(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;a:do if(c[f>>2]|0){c[g>>2]=c[c[f>>2]>>2];c[h>>2]=c[(c[f>>2]|0)+4>>2];while(1){if((c[g>>2]|0)<=0)break a;if(by(c[e>>2]|0,c[c[h>>2]>>2]|0)|0)break;c[g>>2]=(c[g>>2]|0)+-1;c[h>>2]=(c[h>>2]|0)+20}c[d>>2]=2;a=c[d>>2]|0;i=j;return a|0}while(0);c[d>>2]=0;a=c[d>>2]|0;i=j;return a|0}function by(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){a=0;i=f;return a|0}a=cy(c[d>>2]|0,c[e>>2]|0)|0;i=f;return a|0}function cy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;d=h+8|0;f=h+4|0;g=h;c[d>>2]=a;c[f>>2]=b;c[g>>2]=Yb[c[(c[d>>2]|0)+4>>2]&255](c[d>>2]|0,c[f>>2]|0)|0;do if((c[g>>2]|0)==0?(c[(c[f>>2]|0)+4>>2]&16384|0)==0:0){if(by(c[d>>2]|0,c[(c[f>>2]|0)+12>>2]|0)|0){c[e>>2]=2;g=c[e>>2]|0;i=h;return g|0}if(by(c[d>>2]|0,c[(c[f>>2]|0)+16>>2]|0)|0){c[e>>2]=2;g=c[e>>2]|0;i=h;return g|0}d=c[d>>2]|0;b=(c[f>>2]|0)+20|0;if(c[(c[f>>2]|0)+4>>2]&2048){if(!(Zx(d,c[b>>2]|0)|0))break;c[e>>2]=2;g=c[e>>2]|0;i=h;return g|0}else{if(!(ay(d,c[b>>2]|0)|0))break;c[e>>2]=2;g=c[e>>2]|0;i=h;return g|0}}while(0);c[e>>2]=c[g>>2]&2;g=c[e>>2]|0;i=h;return g|0}function dy(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+128|0;C=J+32|0;E=J+24|0;D=J+16|0;B=J+8|0;A=J;I=J+116|0;n=J+112|0;o=J+108|0;x=J+104|0;z=J+100|0;k=J+96|0;m=J+92|0;l=J+88|0;j=J+84|0;w=J+80|0;s=J+76|0;u=J+72|0;F=J+68|0;r=J+64|0;p=J+60|0;t=J+56|0;G=J+52|0;v=J+48|0;q=J+120|0;y=J+44|0;h=J+40|0;c[n>>2]=f;c[o>>2]=g;c[x>>2]=c[(c[n>>2]|0)+24>>2];c[z>>2]=c[c[x>>2]>>2];if(c[(c[o>>2]|0)+4>>2]&4){c[I>>2]=1;I=c[I>>2]|0;i=J;return I|0}f=(c[o>>2]|0)+4|0;c[f>>2]=c[f>>2]|4;switch(d[c[o>>2]>>0]|0){case 27:{c[I>>2]=Fy(c[z>>2]|0,0,0,c[(c[o>>2]|0)+8>>2]|0,c[x>>2]|0,c[o>>2]|0)|0;I=c[I>>2]|0;i=J;return I|0}case 122:{Gy(c[z>>2]|0,c[x>>2]|0,30424,32);c[j>>2]=c[(c[o>>2]|0)+16>>2];if((d[c[j>>2]>>0]|0)==27){c[l>>2]=0;c[m>>2]=c[(c[(c[o>>2]|0)+12>>2]|0)+8>>2];c[k>>2]=c[(c[j>>2]|0)+8>>2]}else{c[l>>2]=c[(c[(c[o>>2]|0)+12>>2]|0)+8>>2];c[m>>2]=c[(c[(c[j>>2]|0)+12>>2]|0)+8>>2];c[k>>2]=c[(c[(c[j>>2]|0)+16>>2]|0)+8>>2]}c[I>>2]=Fy(c[z>>2]|0,c[l>>2]|0,c[m>>2]|0,c[k>>2]|0,c[x>>2]|0,c[o>>2]|0)|0;I=c[I>>2]|0;i=J;return I|0}case 151:{c[w>>2]=c[(c[o>>2]|0)+20>>2];if(c[w>>2]|0)h=c[c[w>>2]>>2]|0;else h=0;c[s>>2]=h;c[u>>2]=0;c[F>>2]=0;c[r>>2]=0;a[q>>0]=a[(c[c[z>>2]>>2]|0)+62>>0]|0;Gy(c[z>>2]|0,c[x>>2]|0,30441,16);c[G>>2]=c[(c[o>>2]|0)+8>>2];c[t>>2]=If(c[G>>2]|0)|0;c[v>>2]=gi(c[c[z>>2]>>2]|0,c[G>>2]|0,c[t>>2]|0,c[s>>2]|0,a[q>>0]|0,0)|0;do if(!(c[v>>2]|0)){c[v>>2]=gi(c[c[z>>2]>>2]|0,c[G>>2]|0,c[t>>2]|0,-2,a[q>>0]|0,0)|0;if(!(c[v>>2]|0)){c[u>>2]=1;break}else{c[F>>2]=1;break}}else{c[r>>2]=(c[(c[v>>2]|0)+16>>2]|0)!=0&1;do if(e[(c[v>>2]|0)+2>>1]&1024){q=(c[o>>2]|0)+4|0;c[q>>2]=c[q>>2]|266240;if((c[s>>2]|0)!=2){c[(c[o>>2]|0)+28>>2]=(a[c[(c[v>>2]|0)+20>>2]>>0]|0)==117?8388608:125829120;break}s=Hy(c[(c[(c[w>>2]|0)+4>>2]|0)+20>>2]|0)|0;c[(c[o>>2]|0)+28>>2]=s;if((c[(c[o>>2]|0)+28>>2]|0)<0){Ah(c[z>>2]|0,30451,A);A=(c[x>>2]|0)+24|0;c[A>>2]=(c[A>>2]|0)+1}}while(0);c[p>>2]=Mw(c[z>>2]|0,31,0,c[(c[v>>2]|0)+20>>2]|0,0)|0;if(c[p>>2]|0){if((c[p>>2]|0)==1){H=c[z>>2]|0;c[B>>2]=c[(c[v>>2]|0)+20>>2];Ah(H,30522,B);H=(c[x>>2]|0)+24|0;c[H>>2]=(c[H>>2]|0)+1}a[c[o>>2]>>0]=101;c[I>>2]=1;I=c[I>>2]|0;i=J;return I|0}else{if(e[(c[v>>2]|0)+2>>1]&10240){B=(c[o>>2]|0)+4|0;c[B>>2]=c[B>>2]|524288}if(e[(c[v>>2]|0)+2>>1]&2048)break;Gy(c[z>>2]|0,c[x>>2]|0,30557,32);break}}while(0);if((c[r>>2]|0)!=0?(e[(c[x>>2]|0)+28>>1]&1|0)==0:0){F=c[z>>2]|0;G=c[G>>2]|0;c[D>>2]=c[t>>2];c[D+4>>2]=G;Ah(F,30585,D);G=(c[x>>2]|0)+24|0;c[G>>2]=(c[G>>2]|0)+1;c[r>>2]=0}else H=31;do if((H|0)==31){if((c[u>>2]|0)!=0?(d[(c[c[z>>2]>>2]|0)+140+5>>0]|0)==0:0){H=c[z>>2]|0;G=c[G>>2]|0;c[E>>2]=c[t>>2];c[E+4>>2]=G;Ah(H,30621,E);H=(c[x>>2]|0)+24|0;c[H>>2]=(c[H>>2]|0)+1;break}if(c[F>>2]|0){H=c[z>>2]|0;G=c[G>>2]|0;c[C>>2]=c[t>>2];c[C+4>>2]=G;Ah(H,30644,C);H=(c[x>>2]|0)+24|0;c[H>>2]=(c[H>>2]|0)+1}}while(0);if(c[r>>2]|0){H=(c[x>>2]|0)+28|0;b[H>>1]=e[H>>1]&-2}ay(c[n>>2]|0,c[w>>2]|0)|0;if(c[r>>2]|0){c[y>>2]=c[x>>2];a[c[o>>2]>>0]=-103;a[(c[o>>2]|0)+38>>0]=0;while(1){if(!(c[y>>2]|0))break;if(!((Iy(c[o>>2]|0,c[(c[y>>2]|0)+4>>2]|0)|0)!=0^1))break;H=(c[o>>2]|0)+38|0;a[H>>0]=(a[H>>0]|0)+1<<24>>24;c[y>>2]=c[(c[y>>2]|0)+16>>2]}if(c[y>>2]|0){H=(c[y>>2]|0)+28|0;b[H>>1]=e[H>>1]|(2|e[(c[v>>2]|0)+2>>1]&4096)}H=(c[x>>2]|0)+28|0;b[H>>1]=e[H>>1]|1}c[I>>2]=1;I=c[I>>2]|0;i=J;return I|0}case 75:case 20:case 119:{if((c[(c[o>>2]|0)+4>>2]&2048|0)!=0?(c[h>>2]=c[(c[x>>2]|0)+20>>2],Gy(c[z>>2]|0,c[x>>2]|0,30689,52),Zx(c[n>>2]|0,c[(c[o>>2]|0)+20>>2]|0)|0,(c[h>>2]|0)!=(c[(c[x>>2]|0)+20>>2]|0)):0){H=(c[o>>2]|0)+4|0;c[H>>2]=c[H>>2]|32}break}case 135:{Gy(c[z>>2]|0,c[x>>2]|0,30700,52);break}default:{}}if(c[(c[z>>2]|0)+68>>2]|0)h=1;else h=(d[(c[c[z>>2]>>2]|0)+65>>0]|0)!=0;c[I>>2]=h?2:0;I=c[I>>2]|0;i=J;return I|0}function ey(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+128|0;C=E+8|0;B=E;D=E+116|0;h=E+112|0;x=E+108|0;s=E+104|0;v=E+72|0;y=E+68|0;l=E+64|0;A=E+60|0;k=E+56|0;n=E+52|0;z=E+48|0;j=E+44|0;t=E+40|0;o=E+36|0;r=E+32|0;m=E+28|0;w=E+24|0;p=E+20|0;u=E+16|0;q=E+12|0;c[h>>2]=f;c[x>>2]=g;if(e[(c[x>>2]|0)+6>>1]&4){c[D>>2]=1;D=c[D>>2]|0;i=E;return D|0}c[s>>2]=c[(c[h>>2]|0)+24>>2];c[A>>2]=c[c[h>>2]>>2];c[j>>2]=c[c[A>>2]>>2];if(!(e[(c[x>>2]|0)+6>>1]&32)){Kx(c[A>>2]|0,c[x>>2]|0,c[s>>2]|0);if(c[(c[A>>2]|0)+68>>2]|0)h=1;else h=(d[(c[j>>2]|0)+65>>0]|0)!=0;c[D>>2]=h?2:1;D=c[D>>2]|0;i=E;return D|0}c[y>>2]=(c[(c[x>>2]|0)+52>>2]|0)!=0&1;c[l>>2]=0;c[z>>2]=c[x>>2];a:while(1){if(!(c[x>>2]|0)){h=68;break}f=(c[x>>2]|0)+6|0;b[f>>1]=e[f>>1]|4;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;c[v+16>>2]=0;c[v+20>>2]=0;c[v+24>>2]=0;c[v+28>>2]=0;c[v>>2]=c[A>>2];if(fy(v,c[(c[x>>2]|0)+60>>2]|0)|0){h=11;break}if(fy(v,c[(c[x>>2]|0)+64>>2]|0)|0){h=11;break}if(e[(c[x>>2]|0)+6>>1]&16384){c[t>>2]=c[(c[(c[x>>2]|0)+32>>2]|0)+8+20>>2];c[(c[t>>2]|0)+48>>2]=c[(c[x>>2]|0)+48>>2];c[(c[x>>2]|0)+48>>2]=0}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[c[(c[x>>2]|0)+32>>2]>>2]|0))break;c[o>>2]=(c[(c[x>>2]|0)+32>>2]|0)+8+((c[k>>2]|0)*72|0);if(c[(c[o>>2]|0)+20>>2]|0){c[m>>2]=0;c[w>>2]=c[(c[A>>2]|0)+496>>2];c[r>>2]=c[s>>2];while(1){if(!(c[r>>2]|0))break;c[m>>2]=(c[m>>2]|0)+(c[(c[r>>2]|0)+20>>2]|0);c[r>>2]=c[(c[r>>2]|0)+16>>2]}if(c[(c[o>>2]|0)+8>>2]|0)c[(c[A>>2]|0)+496>>2]=c[(c[o>>2]|0)+8>>2];Vx(c[A>>2]|0,c[(c[o>>2]|0)+20>>2]|0,c[s>>2]|0);c[(c[A>>2]|0)+496>>2]=c[w>>2];if(c[(c[A>>2]|0)+68>>2]|0){h=24;break a}if(d[(c[j>>2]|0)+65>>0]|0){h=24;break a}c[r>>2]=c[s>>2];while(1){if(!(c[r>>2]|0))break;c[m>>2]=(c[m>>2]|0)-(c[(c[r>>2]|0)+20>>2]|0);c[r>>2]=c[(c[r>>2]|0)+16>>2]}f=(c[o>>2]|0)+36+1|0;a[f>>0]=a[f>>0]&-9|((c[m>>2]|0)!=0&1)<<3&255}c[k>>2]=(c[k>>2]|0)+1}b[v+28>>1]=1;c[v+4>>2]=c[(c[x>>2]|0)+32>>2];c[v+16>>2]=c[s>>2];if(gy(v,c[c[x>>2]>>2]|0)|0){h=31;break}c[n>>2]=c[(c[x>>2]|0)+40>>2];if((c[n>>2]|0)==0?(e[v+28>>1]&2|0)==0:0){f=v+28|0;b[f>>1]=e[f>>1]&-2}else{f=(c[x>>2]|0)+6|0;b[f>>1]=e[f>>1]|(8|e[v+28>>1]&4096)}if(!((c[n>>2]|0)!=0?1:(c[(c[x>>2]|0)+44>>2]|0)==0)){h=37;break}c[v+8>>2]=c[c[x>>2]>>2];if(fy(v,c[(c[x>>2]|0)+44>>2]|0)|0){h=39;break}if(fy(v,c[(c[x>>2]|0)+36>>2]|0)|0){h=41;break}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(c[c[(c[x>>2]|0)+32>>2]>>2]|0))break;c[p>>2]=(c[(c[x>>2]|0)+32>>2]|0)+8+((c[k>>2]|0)*72|0);if(((d[(c[p>>2]|0)+36+1>>0]|0)>>>2&1|0)!=0?(gy(v,c[(c[p>>2]|0)+64>>2]|0)|0)!=0:0){h=46;break a}c[k>>2]=(c[k>>2]|0)+1}c[v+16>>2]=0;f=v+28|0;b[f>>1]=e[f>>1]|1;if(e[(c[x>>2]|0)+6>>1]&16384){c[u>>2]=c[(c[(c[x>>2]|0)+32>>2]|0)+8+20>>2];c[(c[x>>2]|0)+48>>2]=c[(c[u>>2]|0)+48>>2];c[(c[u>>2]|0)+48>>2]=0}if((c[y>>2]|0)<=(c[l>>2]|0)?(hy(v,c[x>>2]|0,c[(c[x>>2]|0)+48>>2]|0,29962)|0)!=0:0){h=52;break}if(a[(c[j>>2]|0)+65>>0]|0){h=54;break}b:do if(c[n>>2]|0){if(hy(v,c[x>>2]|0,c[n>>2]|0,29968)|0){h=58;break a}if(d[(c[j>>2]|0)+65>>0]|0){h=58;break a}c[k>>2]=0;c[q>>2]=c[(c[n>>2]|0)+4>>2];while(1){if((c[k>>2]|0)>=(c[c[n>>2]>>2]|0))break b;if(c[(c[c[q>>2]>>2]|0)+4>>2]&2){h=62;break a}c[k>>2]=(c[k>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+20}}while(0);if((c[(c[x>>2]|0)+56>>2]|0)!=0?(c[c[c[x>>2]>>2]>>2]|0)!=(c[c[c[(c[x>>2]|0)+56>>2]>>2]>>2]|0):0){h=66;break}c[x>>2]=c[(c[x>>2]|0)+52>>2];c[l>>2]=(c[l>>2]|0)+1}switch(h|0){case 11:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 24:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 31:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 37:{Ah(c[A>>2]|0,29918,B);c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 39:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 41:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 46:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 52:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 54:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 58:{c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 62:{Ah(c[A>>2]|0,29974,C);c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 66:{iy(c[A>>2]|0,c[(c[x>>2]|0)+56>>2]|0);c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}case 68:{if((c[y>>2]|0)!=0?(jy(c[A>>2]|0,c[z>>2]|0)|0)!=0:0){c[D>>2]=2;D=c[D>>2]|0;i=E;return D|0}c[D>>2]=1;D=c[D>>2]|0;i=E;return D|0}}return 0}function fy(d,f){d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;g=n+40|0;h=n+36|0;j=n+32|0;l=n+44|0;m=n+4|0;k=n;c[h>>2]=d;c[j>>2]=f;if(!(c[j>>2]|0)){c[g>>2]=0;m=c[g>>2]|0;i=n;return m|0}c[k>>2]=c[c[h>>2]>>2];if(Ey(c[k>>2]|0,(c[(c[j>>2]|0)+24>>2]|0)+(c[(c[c[h>>2]>>2]|0)+464>>2]|0)|0)|0){c[g>>2]=1;m=c[g>>2]|0;i=n;return m|0}k=(c[k>>2]|0)+464|0;c[k>>2]=(c[k>>2]|0)+(c[(c[j>>2]|0)+24>>2]|0);b[l>>1]=(e[(c[h>>2]|0)+28>>1]|0)&4098;k=(c[h>>2]|0)+28|0;b[k>>1]=(e[k>>1]|0)&-4099;c[m>>2]=c[c[h>>2]>>2];c[m+4>>2]=193;c[m+8>>2]=194;c[m+12>>2]=0;c[m+16>>2]=0;a[m+20>>0]=0;c[m+24>>2]=c[h>>2];by(m,c[j>>2]|0)|0;k=(c[c[h>>2]>>2]|0)+464|0;c[k>>2]=(c[k>>2]|0)-(c[(c[j>>2]|0)+24>>2]|0);if(!((c[(c[h>>2]|0)+24>>2]|0)<=0?(c[(c[m>>2]|0)+68>>2]|0)<=0:0)){m=(c[j>>2]|0)+4|0;c[m>>2]=c[m>>2]|8}if((e[(c[h>>2]|0)+28>>1]|0)&2){m=(c[j>>2]|0)+4|0;c[m>>2]=c[m>>2]|2}m=(c[h>>2]|0)+28|0;b[m>>1]=e[m>>1]|0|(e[l>>1]|0);c[g>>2]=(c[(c[j>>2]|0)+4>>2]&8|0)!=0&1;m=c[g>>2]|0;i=n;return m|0}function gy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;a:do if(c[f>>2]|0){c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[c[f>>2]>>2]|0))break a;if(fy(c[e>>2]|0,c[(c[(c[f>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)>>2]|0)|0)break;c[g>>2]=(c[g>>2]|0)+1}c[d>>2]=2;a=c[d>>2]|0;i=h;return a|0}while(0);c[d>>2]=0;a=c[d>>2]|0;i=h;return a|0}function hy(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+64|0;h=w+48|0;j=w+44|0;k=w+40|0;l=w+36|0;m=w+32|0;n=w+28|0;p=w+24|0;o=w+20|0;t=w+16|0;u=w+12|0;q=w+8|0;r=w+4|0;s=w;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;if(!(c[l>>2]|0)){c[h>>2]=0;v=c[h>>2]|0;i=w;return v|0}c[q>>2]=c[c[c[k>>2]>>2]>>2];c[u>>2]=c[c[j>>2]>>2];c[n>>2]=0;c[t>>2]=c[(c[l>>2]|0)+4>>2];a:while(1){if((c[n>>2]|0)>=(c[c[l>>2]>>2]|0)){v=20;break}c[r>>2]=c[c[t>>2]>>2];c[s>>2]=Tx(c[r>>2]|0)|0;if((a[c[m>>2]>>0]|0)!=71?(c[o>>2]=my(c[u>>2]|0,c[c[k>>2]>>2]|0,c[s>>2]|0)|0,(c[o>>2]|0)>0):0)b[(c[t>>2]|0)+16>>1]=c[o>>2];else v=8;b:do if((v|0)==8){v=0;if(ky(c[s>>2]|0,o)|0){if((c[o>>2]|0)<1|(c[o>>2]|0)>65535){v=10;break a}b[(c[t>>2]|0)+16>>1]=c[o>>2];break}b[(c[t>>2]|0)+16>>1]=0;if(fy(c[j>>2]|0,c[r>>2]|0)|0){v=13;break a}c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[c[c[k>>2]>>2]>>2]|0))break b;if(!(py(c[r>>2]|0,c[(c[(c[c[k>>2]>>2]|0)+4>>2]|0)+((c[p>>2]|0)*20|0)>>2]|0,-1)|0))b[(c[t>>2]|0)+16>>1]=(c[p>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1}}while(0);c[n>>2]=(c[n>>2]|0)+1;c[t>>2]=(c[t>>2]|0)+20}if((v|0)==10){ly(c[u>>2]|0,c[m>>2]|0,(c[n>>2]|0)+1|0,c[q>>2]|0);c[h>>2]=1;v=c[h>>2]|0;i=w;return v|0}else if((v|0)==13){c[h>>2]=1;v=c[h>>2]|0;i=w;return v|0}else if((v|0)==20){c[h>>2]=yy(c[u>>2]|0,c[k>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;v=c[h>>2]|0;i=w;return v|0}return 0}function iy(a,b){a=a|0;b=b|0;var f=0,g=0,h=0,j=0;h=i;i=i+32|0;g=h+8|0;j=h+16|0;f=h+12|0;c[j>>2]=a;c[f>>2]=b;b=c[j>>2]|0;if((e[(c[f>>2]|0)+6>>1]|0)&256){Ah(b,30184,h);i=h;return}else{c[g>>2]=xy(d[(c[f>>2]|0)+4>>0]|0)|0;Ah(b,30230,g);i=h;return}}function jy(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+80|0;v=w+8|0;q=w+64|0;r=w+60|0;g=w+56|0;s=w+52|0;u=w+48|0;t=w+44|0;h=w+40|0;k=w+36|0;n=w+32|0;j=w+28|0;m=w+24|0;l=w+20|0;o=w+16|0;p=w+12|0;c[r>>2]=e;c[g>>2]=f;c[k>>2]=1;c[u>>2]=c[(c[g>>2]|0)+48>>2];if(!(c[u>>2]|0)){c[q>>2]=0;v=c[q>>2]|0;i=w;return v|0}c[h>>2]=c[c[r>>2]>>2];if((c[c[u>>2]>>2]|0)>(c[(c[h>>2]|0)+88+8>>2]|0)){Ah(c[r>>2]|0,30033,w);c[q>>2]=1;v=c[q>>2]|0;i=w;return v|0}c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[c[u>>2]>>2]|0))break;f=(c[(c[u>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)+13|0;a[f>>0]=a[f>>0]&-2;c[s>>2]=(c[s>>2]|0)+1}c[(c[g>>2]|0)+56>>2]=0;while(1){if(!(c[(c[g>>2]|0)+52>>2]|0))break;c[(c[(c[g>>2]|0)+52>>2]|0)+56>>2]=c[g>>2];c[g>>2]=c[(c[g>>2]|0)+52>>2]}a:while(1){if(!((c[g>>2]|0)!=0?(c[k>>2]|0)!=0:0)){g=36;break}c[k>>2]=0;c[t>>2]=c[c[g>>2]>>2];c[s>>2]=0;c[n>>2]=c[(c[u>>2]|0)+4>>2];while(1){if((c[s>>2]|0)>=(c[c[u>>2]>>2]|0))break;c[j>>2]=-1;do if(!(a[(c[n>>2]|0)+13>>0]&1)){c[m>>2]=Tx(c[c[n>>2]>>2]|0)|0;if(ky(c[m>>2]|0,j)|0){if((c[j>>2]|0)<=0){g=18;break a}if((c[j>>2]|0)>(c[c[t>>2]>>2]|0)){g=18;break a}}else{c[j>>2]=my(c[r>>2]|0,c[t>>2]|0,c[m>>2]|0)|0;if(!(c[j>>2]|0)){c[l>>2]=ny(c[h>>2]|0,c[m>>2]|0,0)|0;if(!(a[(c[h>>2]|0)+65>>0]|0))c[j>>2]=oy(c[r>>2]|0,c[g>>2]|0,c[l>>2]|0)|0;Zu(c[h>>2]|0,c[l>>2]|0)}}if((c[j>>2]|0)<=0){c[k>>2]=1;break}c[o>>2]=Jv(c[h>>2]|0,132,0)|0;if(!(c[o>>2]|0)){g=25;break a}f=(c[o>>2]|0)+4|0;c[f>>2]=c[f>>2]|1024;c[(c[o>>2]|0)+8>>2]=c[j>>2];if((c[c[n>>2]>>2]|0)==(c[m>>2]|0))c[c[n>>2]>>2]=c[o>>2];else{c[p>>2]=c[c[n>>2]>>2];while(1){if((d[c[(c[p>>2]|0)+12>>2]>>0]|0)!=95)break;c[p>>2]=c[(c[p>>2]|0)+12>>2]}c[(c[p>>2]|0)+12>>2]=c[o>>2]}Zu(c[h>>2]|0,c[m>>2]|0);b[(c[n>>2]|0)+16>>1]=c[j>>2];f=(c[n>>2]|0)+13|0;a[f>>0]=a[f>>0]&-2|1}while(0);c[s>>2]=(c[s>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+20}c[g>>2]=c[(c[g>>2]|0)+56>>2]}if((g|0)==18){ly(c[r>>2]|0,29962,(c[s>>2]|0)+1|0,c[c[t>>2]>>2]|0);c[q>>2]=1;v=c[q>>2]|0;i=w;return v|0}else if((g|0)==25){c[q>>2]=1;v=c[q>>2]|0;i=w;return v|0}else if((g|0)==36){c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[c[u>>2]>>2]|0)){g=41;break}if(!(a[(c[(c[u>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)+13>>0]&1)){g=39;break}c[s>>2]=(c[s>>2]|0)+1}if((g|0)==39){u=c[r>>2]|0;c[v>>2]=(c[s>>2]|0)+1;Ah(u,30067,v);c[q>>2]=1;v=c[q>>2]|0;i=w;return v|0}else if((g|0)==41){c[q>>2]=0;v=c[q>>2]|0;i=w;return v|0}}return 0}function ky(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=a;c[g>>2]=b;c[h>>2]=0;a=c[f>>2]|0;if(c[(c[f>>2]|0)+4>>2]&1024){c[c[g>>2]>>2]=c[a+8>>2];c[e>>2]=1;j=c[e>>2]|0;i=k;return j|0}switch(d[a>>0]|0|0){case 156:{c[h>>2]=ky(c[(c[f>>2]|0)+12>>2]|0,c[g>>2]|0)|0;break}case 155:{if(ky(c[(c[f>>2]|0)+12>>2]|0,j)|0){c[c[g>>2]>>2]=0-(c[j>>2]|0);c[h>>2]=1}break}default:{}}c[e>>2]=c[h>>2];j=c[e>>2]|0;i=k;return j|0}function ly(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+32|0;g=f;l=f+24|0;k=f+20|0;h=f+16|0;j=f+12|0;c[l>>2]=a;c[k>>2]=b;c[h>>2]=d;c[j>>2]=e;b=c[l>>2]|0;e=c[k>>2]|0;a=c[j>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=e;c[g+8>>2]=a;Ah(b,30128,g);i=f;return}function my(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+24|0;g=m+16|0;h=m+12|0;j=m+8|0;l=m+4|0;k=m;c[m+20>>2]=a;c[g>>2]=b;c[h>>2]=e;a:do if((d[c[h>>2]>>0]|0|0)==27){c[l>>2]=c[(c[h>>2]|0)+8>>2];c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[c[g>>2]>>2]|0))break a;c[k>>2]=c[(c[(c[g>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0)+4>>2];if((c[k>>2]|0)!=0?(Td(c[k>>2]|0,c[l>>2]|0)|0)==0:0)break;c[j>>2]=(c[j>>2]|0)+1}c[f>>2]=(c[j>>2]|0)+1;l=c[f>>2]|0;i=m;return l|0}while(0);c[f>>2]=0;l=c[f>>2]|0;i=m;return l|0}function ny(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;b=ry(c[h>>2]|0,c[g>>2]|0,c[f>>2]|0,0)|0;i=e;return b|0}function oy(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;l=i;i=i+80|0;k=l+60|0;q=l+56|0;r=l+52|0;g=l+48|0;h=l+44|0;j=l+40|0;p=l+8|0;n=l+4|0;m=l;o=l+64|0;c[q>>2]=d;c[r>>2]=e;c[g>>2]=f;c[j>>2]=c[c[r>>2]>>2];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;c[p+24>>2]=0;c[p+28>>2]=0;c[p>>2]=c[q>>2];c[p+4>>2]=c[(c[r>>2]|0)+32>>2];c[p+8>>2]=c[j>>2];b[p+28>>1]=1;c[p+24>>2]=0;c[n>>2]=c[c[q>>2]>>2];a[o>>0]=a[(c[n>>2]|0)+69>>0]|0;a[(c[n>>2]|0)+69>>0]=1;c[m>>2]=fy(p,c[g>>2]|0)|0;a[(c[n>>2]|0)+69>>0]=a[o>>0]|0;if(c[m>>2]|0){c[k>>2]=0;r=c[k>>2]|0;i=l;return r|0}c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[c[j>>2]>>2]|0)){f=8;break}r=(py(c[(c[(c[j>>2]|0)+4>>2]|0)+((c[h>>2]|0)*20|0)>>2]|0,c[g>>2]|0,-1)|0)<2;d=(c[h>>2]|0)+1|0;if(r){f=6;break}c[h>>2]=d}if((f|0)==6){c[k>>2]=d;r=c[k>>2]|0;i=l;return r|0}else if((f|0)==8){c[k>>2]=0;r=c[k>>2]|0;i=l;return r|0}return 0}function py(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[h>>2]=a;c[j>>2]=e;c[k>>2]=f;if((c[h>>2]|0)==0|(c[j>>2]|0)==0){c[g>>2]=(c[j>>2]|0)==(c[h>>2]|0)?0:2;l=c[g>>2]|0;i=m;return l|0}c[l>>2]=c[(c[h>>2]|0)+4>>2]|c[(c[j>>2]|0)+4>>2];f=c[h>>2]|0;if(c[l>>2]&1024){if((c[f+4>>2]&c[(c[j>>2]|0)+4>>2]&1024|0)!=0?(c[(c[h>>2]|0)+8>>2]|0)==(c[(c[j>>2]|0)+8>>2]|0):0){c[g>>2]=0;l=c[g>>2]|0;i=m;return l|0}c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}a=d[c[h>>2]>>0]|0;if((d[f>>0]|0)!=(d[c[j>>2]>>0]|0)){if((a|0)==95?(py(c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0,c[k>>2]|0)|0)<2:0){c[g>>2]=1;l=c[g>>2]|0;i=m;return l|0}if((d[c[j>>2]>>0]|0)==95?(py(c[h>>2]|0,c[(c[j>>2]|0)+12>>2]|0,c[k>>2]|0)|0)<2:0){c[g>>2]=1;l=c[g>>2]|0;i=m;return l|0}c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}do if(((a|0)!=152?(d[c[h>>2]>>0]|0)!=154:0)?(c[(c[h>>2]|0)+8>>2]|0)!=0:0){f=c[(c[h>>2]|0)+8>>2]|0;a=c[(c[j>>2]|0)+8>>2]|0;if((d[c[h>>2]>>0]|0)==151){if(!(Td(f,a)|0))break;c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}else{if(!(yQ(f,a)|0))break;c[g>>2]=(d[c[h>>2]>>0]|0)==95?1:2;l=c[g>>2]|0;i=m;return l|0}}while(0);if((c[(c[h>>2]|0)+4>>2]&16|0)!=(c[(c[j>>2]|0)+4>>2]&16|0)){c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}do if(!(c[l>>2]&16384)){if(c[l>>2]&2048){c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}if(py(c[(c[h>>2]|0)+12>>2]|0,c[(c[j>>2]|0)+12>>2]|0,c[k>>2]|0)|0){c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}if(py(c[(c[h>>2]|0)+16>>2]|0,c[(c[j>>2]|0)+16>>2]|0,c[k>>2]|0)|0){c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}if(qy(c[(c[h>>2]|0)+20>>2]|0,c[(c[j>>2]|0)+20>>2]|0,c[k>>2]|0)|0){c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}if((c[l>>2]&8192|0)==0?(d[c[h>>2]>>0]|0)!=97:0){if((b[(c[h>>2]|0)+32>>1]|0)!=(b[(c[j>>2]|0)+32>>1]|0)){c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}if((c[(c[h>>2]|0)+28>>2]|0)!=(c[(c[j>>2]|0)+28>>2]|0)){if((c[(c[h>>2]|0)+28>>2]|0)==(c[k>>2]|0)?(c[(c[j>>2]|0)+28>>2]|0)<0:0)break;c[g>>2]=2;l=c[g>>2]|0;i=m;return l|0}}}while(0);c[g>>2]=0;l=c[g>>2]|0;i=m;return l|0}function qy(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;m=n+24|0;f=n+20|0;g=n+16|0;h=n+12|0;j=n+8|0;k=n+4|0;l=n;c[f>>2]=a;c[g>>2]=b;c[h>>2]=e;if((c[f>>2]|0)==0&(c[g>>2]|0)==0){c[m>>2]=0;m=c[m>>2]|0;i=n;return m|0}if((c[f>>2]|0)==0|(c[g>>2]|0)==0){c[m>>2]=1;m=c[m>>2]|0;i=n;return m|0}if((c[c[f>>2]>>2]|0)!=(c[c[g>>2]>>2]|0)){c[m>>2]=1;m=c[m>>2]|0;i=n;return m|0}c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[c[f>>2]>>2]|0)){f=14;break}c[k>>2]=c[(c[(c[f>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0)>>2];c[l>>2]=c[(c[(c[g>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0)>>2];if((d[(c[(c[f>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0)+12>>0]|0|0)!=(d[(c[(c[g>>2]|0)+4>>2]|0)+((c[j>>2]|0)*20|0)+12>>0]|0|0)){f=10;break}if(py(c[k>>2]|0,c[l>>2]|0,c[h>>2]|0)|0){f=12;break}c[j>>2]=(c[j>>2]|0)+1}if((f|0)==10){c[m>>2]=1;m=c[m>>2]|0;i=n;return m|0}else if((f|0)==12){c[m>>2]=1;m=c[m>>2]|0;i=n;return m|0}else if((f|0)==14){c[m>>2]=0;m=c[m>>2]|0;i=n;return m|0}return 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,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+64|0;n=t+48|0;o=t+44|0;p=t+40|0;q=t+36|0;r=t+32|0;m=t+28|0;s=t+24|0;k=t+20|0;h=t+16|0;f=t+12|0;j=t+8|0;g=t+4|0;l=t;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=0;if(!(c[o>>2]|0)){s=c[r>>2]|0;i=t;return s|0}c[m>>2]=c[p>>2]&1;c[k>>2]=0;if(c[q>>2]|0){c[s>>2]=c[c[q>>2]>>2];c[k>>2]=32768}else{b=c[n>>2]|0;e=sy(c[o>>2]|0,c[p>>2]|0)|0;c[s>>2]=Fw(b,e,((e|0)<0)<<31>>31)|0}c[r>>2]=c[s>>2];if(!(c[r>>2]|0)){s=c[r>>2]|0;i=t;return s|0}c[h>>2]=ty(c[o>>2]|0,c[p>>2]|0)|0;c[f>>2]=c[h>>2]&4095;if((c[(c[o>>2]|0)+4>>2]&1024|0)==0?(c[(c[o>>2]|0)+8>>2]|0)!=0:0)c[j>>2]=(If(c[(c[o>>2]|0)+8>>2]|0)|0)+1;else c[j>>2]=0;if(!(c[m>>2]|0)){c[g>>2]=uy(c[o>>2]|0)|0;iR(c[s>>2]|0,c[o>>2]|0,c[g>>2]|0)|0;if((c[g>>2]|0)>>>0<48)kR((c[s>>2]|0)+(c[g>>2]|0)|0,0,48-(c[g>>2]|0)|0)|0}else iR(c[s>>2]|0,c[o>>2]|0,c[f>>2]|0)|0;e=(c[r>>2]|0)+4|0;c[e>>2]=c[e>>2]&-122881;e=(c[r>>2]|0)+4|0;c[e>>2]=c[e>>2]|c[h>>2]&24576;e=(c[r>>2]|0)+4|0;c[e>>2]=c[e>>2]|c[k>>2];if(c[j>>2]|0){k=(c[s>>2]|0)+(c[f>>2]|0)|0;c[(c[r>>2]|0)+8>>2]=k;c[l>>2]=k;iR(c[l>>2]|0,c[(c[o>>2]|0)+8>>2]|0,c[j>>2]|0)|0}do if(!((c[(c[o>>2]|0)+4>>2]|c[(c[r>>2]|0)+4>>2])&16384)){d=c[n>>2]|0;a=(c[o>>2]|0)+20|0;if(c[(c[o>>2]|0)+4>>2]&2048){m=Hx(d,c[a>>2]|0,c[m>>2]|0)|0;c[(c[r>>2]|0)+20>>2]=m;break}else{m=vy(d,c[a>>2]|0,c[m>>2]|0)|0;c[(c[r>>2]|0)+20>>2]=m;break}}while(0);a=c[o>>2]|0;if(!(c[(c[r>>2]|0)+4>>2]&24576)){if(c[a+4>>2]&16384){s=c[r>>2]|0;i=t;return s|0}s=ny(c[n>>2]|0,c[(c[o>>2]|0)+12>>2]|0,0)|0;c[(c[r>>2]|0)+12>>2]=s;s=ny(c[n>>2]|0,c[(c[o>>2]|0)+16>>2]|0,0)|0;c[(c[r>>2]|0)+16>>2]=s;s=c[r>>2]|0;i=t;return s|0}p=wy(a,c[p>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+p;if(c[(c[r>>2]|0)+4>>2]&8192){p=ry(c[n>>2]|0,c[(c[o>>2]|0)+12>>2]|0,1,s)|0;c[(c[r>>2]|0)+12>>2]=p;p=ry(c[n>>2]|0,c[(c[o>>2]|0)+16>>2]|0,1,s)|0;c[(c[r>>2]|0)+16>>2]=p}if(!(c[q>>2]|0)){s=c[r>>2]|0;i=t;return s|0}c[c[q>>2]>>2]=c[s>>2];s=c[r>>2]|0;i=t;return s|0}function sy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;if(!(c[d>>2]|0)){a=c[f>>2]|0;i=g;return a|0}c[f>>2]=wy(c[d>>2]|0,c[e>>2]|0)|0;if(!(c[e>>2]&1)){a=c[f>>2]|0;i=g;return a|0}a=sy(c[(c[d>>2]|0)+12>>2]|0,c[e>>2]|0)|0;a=a+(sy(c[(c[d>>2]|0)+16>>2]|0,c[e>>2]|0)|0)|0;c[f>>2]=(c[f>>2]|0)+a;a=c[f>>2]|0;i=g;return a|0}function ty(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=a;c[g>>2]=b;do if(!(c[g>>2]&1))c[e>>2]=48;else{if((c[(c[d>>2]|0)+12>>2]|0)==0?(c[(c[d>>2]|0)+20>>2]|0)==0:0){c[e>>2]=16396;break}c[e>>2]=8220}while(0);i=f;return c[e>>2]|0}function uy(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;do if(!(c[(c[d>>2]|0)+4>>2]&16384))if(c[(c[d>>2]|0)+4>>2]&8192){c[b>>2]=28;break}else{c[b>>2]=48;break}else c[b>>2]=12;while(0);i=e;return c[b>>2]|0}function vy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;g=q+32|0;h=q+28|0;j=q+24|0;k=q+20|0;n=q+16|0;m=q+12|0;p=q+8|0;l=q+4|0;o=q;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;if(!(c[j>>2]|0)){c[g>>2]=0;p=c[g>>2]|0;i=q;return p|0}c[n>>2]=Fw(c[h>>2]|0,8,0)|0;if(!(c[n>>2]|0)){c[g>>2]=0;p=c[g>>2]|0;i=q;return p|0}e=c[c[j>>2]>>2]|0;c[l>>2]=e;c[c[n>>2]>>2]=e;a:do if(!(c[k>>2]&1)){c[l>>2]=1;while(1){if((c[l>>2]|0)>=(c[c[j>>2]>>2]|0))break a;c[l>>2]=(c[l>>2]|0)+(c[l>>2]|0)}}while(0);e=Fw(c[h>>2]|0,(c[l>>2]|0)*20|0,0)|0;c[m>>2]=e;c[(c[n>>2]|0)+4>>2]=e;if(!(c[m>>2]|0)){Sf(c[h>>2]|0,c[n>>2]|0);c[g>>2]=0;p=c[g>>2]|0;i=q;return p|0}c[p>>2]=c[(c[j>>2]|0)+4>>2];c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[c[j>>2]>>2]|0))break;c[o>>2]=c[c[p>>2]>>2];e=ny(c[h>>2]|0,c[o>>2]|0,c[k>>2]|0)|0;c[c[m>>2]>>2]=e;e=nh(c[h>>2]|0,c[(c[p>>2]|0)+4>>2]|0)|0;c[(c[m>>2]|0)+4>>2]=e;e=nh(c[h>>2]|0,c[(c[p>>2]|0)+8>>2]|0)|0;c[(c[m>>2]|0)+8>>2]=e;a[(c[m>>2]|0)+12>>0]=a[(c[p>>2]|0)+12>>0]|0;e=(c[m>>2]|0)+13|0;a[e>>0]=a[e>>0]&-2;e=(c[m>>2]|0)+13|0;a[e>>0]=a[e>>0]&-3|((d[(c[p>>2]|0)+13>>0]|0)>>>1&1)<<1&255;c[(c[m>>2]|0)+16>>2]=c[(c[p>>2]|0)+16>>2];c[l>>2]=(c[l>>2]|0)+1;c[m>>2]=(c[m>>2]|0)+20;c[p>>2]=(c[p>>2]|0)+20}c[g>>2]=c[n>>2];p=c[g>>2]|0;i=q;return p|0}function wy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=a;c[g>>2]=b;c[e>>2]=(ty(c[d>>2]|0,c[g>>2]|0)|0)&4095;if((c[(c[d>>2]|0)+4>>2]&1024|0)==0?(c[(c[d>>2]|0)+8>>2]|0)!=0:0){g=(If(c[(c[d>>2]|0)+8>>2]|0)|0)+1|0;c[e>>2]=(c[e>>2]|0)+g}i=f;return(c[e>>2]|0)+7&-8|0}function xy(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;switch(c[e>>2]|0){case 116:{c[b>>2]=30312;break}case 118:{c[b>>2]=30322;break}case 117:{c[b>>2]=30332;break}default:c[b>>2]=30339}i=d;return c[b>>2]|0}function yy(a,f,g,h){a=a|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;l=t;p=t+36|0;m=t+32|0;j=t+28|0;n=t+24|0;q=t+20|0;r=t+16|0;k=t+12|0;s=t+8|0;o=t+4|0;c[m>>2]=a;c[j>>2]=f;c[n>>2]=g;c[q>>2]=h;c[k>>2]=c[c[m>>2]>>2];if((c[n>>2]|0)!=0?(d[(c[c[m>>2]>>2]|0)+65>>0]|0)==0:0){if((c[c[n>>2]>>2]|0)>(c[(c[k>>2]|0)+88+8>>2]|0)){s=c[m>>2]|0;c[l>>2]=c[q>>2];Ah(s,30345,l);c[p>>2]=1;s=c[p>>2]|0;i=t;return s|0}c[s>>2]=c[c[j>>2]>>2];c[r>>2]=0;c[o>>2]=c[(c[n>>2]|0)+4>>2];while(1){if((c[r>>2]|0)>=(c[c[n>>2]>>2]|0)){j=13;break}if(b[(c[o>>2]|0)+16>>1]|0){k=c[m>>2]|0;if((e[(c[o>>2]|0)+16>>1]|0)>(c[c[s>>2]>>2]|0)){j=10;break}zy(k,c[s>>2]|0,(e[(c[o>>2]|0)+16>>1]|0)-1|0,c[c[o>>2]>>2]|0,c[q>>2]|0,0)}c[r>>2]=(c[r>>2]|0)+1;c[o>>2]=(c[o>>2]|0)+20}if((j|0)==10){ly(k,c[q>>2]|0,(c[r>>2]|0)+1|0,c[c[s>>2]>>2]|0);c[p>>2]=1;s=c[p>>2]|0;i=t;return s|0}else if((j|0)==13){c[p>>2]=0;s=c[p>>2]|0;i=t;return s|0}}c[p>>2]=0;s=c[p>>2]|0;i=t;return s|0}function zy(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+48|0;k=q+32|0;t=q+28|0;s=q+24|0;n=q+20|0;l=q+16|0;m=q+12|0;r=q+8|0;p=q+4|0;o=q;c[k>>2]=b;c[t>>2]=e;c[s>>2]=f;c[n>>2]=g;c[l>>2]=h;c[m>>2]=j;c[r>>2]=c[(c[(c[t>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)>>2];c[o>>2]=c[c[k>>2]>>2];c[p>>2]=ny(c[o>>2]|0,c[r>>2]|0,0)|0;if(!(c[p>>2]|0)){i=q;return}if((a[c[l>>2]>>0]|0)!=71)Ay(c[p>>2]|0,c[m>>2]|0);if((d[c[n>>2]>>0]|0)==95)c[p>>2]=By(c[k>>2]|0,c[p>>2]|0,c[(c[n>>2]|0)+8>>2]|0)|0;k=(c[p>>2]|0)+4|0;c[k>>2]=c[k>>2]|4194304;k=(c[n>>2]|0)+4|0;c[k>>2]=c[k>>2]|32768;Zu(c[o>>2]|0,c[n>>2]|0);k=c[n>>2]|0;l=c[p>>2]|0;m=k+48|0;do{c[k>>2]=c[l>>2];k=k+4|0;l=l+4|0}while((k|0)<(m|0));if((c[(c[n>>2]|0)+4>>2]&1024|0)==0?(c[(c[n>>2]|0)+8>>2]|0)!=0:0){t=nh(c[o>>2]|0,c[(c[n>>2]|0)+8>>2]|0)|0;c[(c[n>>2]|0)+8>>2]=t;t=(c[n>>2]|0)+4|0;c[t>>2]=c[t>>2]|65536}Sf(c[o>>2]|0,c[p>>2]|0);i=q;return}function Ay(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+48|0;d=g+32|0;e=g+28|0;f=g;c[d>>2]=a;c[e>>2]=b;if((c[e>>2]|0)<=0){i=g;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+4>>2]=195;c[f+24>>2]=c[e>>2];by(f,c[d>>2]|0)|0;i=g;return}function By(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+32|0;h=e+16|0;g=e+12|0;j=e+8|0;f=e;c[h>>2]=a;c[g>>2]=b;c[j>>2]=d;Cy(f,c[j>>2]|0);d=Yv(c[h>>2]|0,c[g>>2]|0,f,0)|0;i=e;return d|0}function Cy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;c[c[e>>2]>>2]=c[f>>2];b=If(c[f>>2]|0)|0;c[(c[e>>2]|0)+4>>2]=b;i=d;return}function Dy(b,e){b=b|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=b;c[g>>2]=e;if((d[c[g>>2]>>0]|0|0)!=153){i=h;return 0}b=(c[g>>2]|0)+38|0;a[b>>0]=(d[b>>0]|0)+(c[(c[f>>2]|0)+24>>2]|0);i=h;return 0}function Ey(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;g=h;d=h+16|0;j=h+12|0;f=h+8|0;e=h+4|0;c[d>>2]=a;c[j>>2]=b;c[f>>2]=0;c[e>>2]=c[(c[c[d>>2]>>2]|0)+88+12>>2];if((c[j>>2]|0)<=(c[e>>2]|0)){j=c[f>>2]|0;i=h;return j|0}j=c[d>>2]|0;c[g>>2]=c[e>>2];Ah(j,30376,g);c[f>>2]=1;j=c[f>>2]|0;i=h;return j|0}function Fy(f,g,h,j,k,l){f=f|0;g=g|0;h=h|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,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=i;i=i+176|0;W=X+40|0;V=X+24|0;D=X+8|0;B=X;I=X+164|0;J=X+160|0;m=X+156|0;K=X+152|0;L=X+148|0;M=X+144|0;N=X+140|0;q=X+136|0;s=X+132|0;O=X+128|0;o=X+124|0;t=X+120|0;P=X+116|0;x=X+112|0;S=X+108|0;U=X+104|0;T=X+100|0;Q=X+96|0;A=X+92|0;v=X+88|0;w=X+84|0;z=X+80|0;p=X+76|0;F=X+72|0;u=X+68|0;r=X+64|0;E=X+60|0;y=X+56|0;H=X+52|0;R=X+48|0;c[J>>2]=f;c[m>>2]=g;c[K>>2]=h;c[L>>2]=j;c[M>>2]=k;c[N>>2]=l;c[O>>2]=0;c[o>>2]=0;c[t>>2]=0;c[P>>2]=c[c[J>>2]>>2];c[S>>2]=0;c[U>>2]=c[M>>2];c[T>>2]=0;c[Q>>2]=0;c[A>>2]=0;c[(c[N>>2]|0)+28>>2]=-1;c[(c[N>>2]|0)+44>>2]=0;a:do if(c[m>>2]|0){if(e[(c[M>>2]|0)+28>>1]&20){c[m>>2]=0;break}c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[(c[P>>2]|0)+20>>2]|0))break a;h=(Td(c[(c[(c[P>>2]|0)+16>>2]|0)+(c[q>>2]<<4)>>2]|0,c[m>>2]|0)|0)==0;l=c[q>>2]|0;if(h)break;c[q>>2]=l+1}c[T>>2]=c[(c[(c[P>>2]|0)+16>>2]|0)+(l<<4)+12>>2]}while(0);b:while(1){if(!((c[M>>2]|0)!=0?(c[O>>2]|0)==0:0)){G=89;break}c[z>>2]=c[(c[M>>2]|0)+4>>2];if(c[z>>2]|0){c[q>>2]=0;c[x>>2]=(c[z>>2]|0)+8;while(1){if((c[q>>2]|0)>=(c[c[z>>2]>>2]|0))break; +c[A>>2]=c[(c[x>>2]|0)+16>>2];if((c[(c[x>>2]|0)+20>>2]|0)!=0?(e[(c[(c[x>>2]|0)+20>>2]|0)+6>>1]&1024|0)!=0:0){c[p>>2]=0;c[w>>2]=c[c[(c[x>>2]|0)+20>>2]>>2];c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[c[w>>2]>>2]|0))break;if(Ly(c[(c[(c[w>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)+8>>2]|0,c[L>>2]|0,c[K>>2]|0,c[m>>2]|0)|0){c[O>>2]=(c[O>>2]|0)+1;c[o>>2]=2;c[S>>2]=c[x>>2];b[(c[N>>2]|0)+32>>1]=c[s>>2];c[p>>2]=1}c[s>>2]=(c[s>>2]|0)+1}if(!((c[p>>2]|0)!=0|(c[K>>2]|0)==0))G=21}else G=21;c:do if((G|0)==21){G=0;if((c[m>>2]|0)!=0?(c[(c[A>>2]|0)+64>>2]|0)!=(c[T>>2]|0):0)break;if(c[K>>2]|0){if(c[(c[x>>2]|0)+12>>2]|0)l=c[(c[x>>2]|0)+12>>2]|0;else l=c[c[A>>2]>>2]|0;c[F>>2]=l;if(Td(c[F>>2]|0,c[K>>2]|0)|0)break}h=c[o>>2]|0;c[o>>2]=h+1;if(!h)c[S>>2]=c[x>>2];c[s>>2]=0;c[v>>2]=c[(c[A>>2]|0)+4>>2];while(1){if((c[s>>2]|0)>=(b[(c[A>>2]|0)+34>>1]|0))break c;if(!(Td(c[c[v>>2]>>2]|0,c[L>>2]|0)|0)){if((c[O>>2]|0)!=1)break;if((d[(c[x>>2]|0)+36>>0]&4|0)==0?(My(c[(c[x>>2]|0)+52>>2]|0,c[L>>2]|0)|0)==0:0)break}c[s>>2]=(c[s>>2]|0)+1;c[v>>2]=(c[v>>2]|0)+24}c[O>>2]=(c[O>>2]|0)+1;c[S>>2]=c[x>>2];if((c[s>>2]|0)==(b[(c[A>>2]|0)+32>>1]|0))l=-1;else l=(c[s>>2]&65535)<<16>>16;b[(c[N>>2]|0)+32>>1]=l}while(0);c[q>>2]=(c[q>>2]|0)+1;c[x>>2]=(c[x>>2]|0)+72}if(c[S>>2]|0){c[(c[N>>2]|0)+28>>2]=c[(c[S>>2]|0)+44>>2];c[(c[N>>2]|0)+44>>2]=c[(c[S>>2]|0)+16>>2];if(d[(c[S>>2]|0)+36>>0]&8){h=(c[N>>2]|0)+4|0;c[h>>2]=c[h>>2]|1048576}c[T>>2]=c[(c[(c[N>>2]|0)+44>>2]|0)+64>>2]}}if((c[m>>2]|0)==0&(c[K>>2]|0)!=0&(c[o>>2]|0)==0?(c[(c[J>>2]|0)+420>>2]|0)!=0:0){c[u>>2]=d[(c[J>>2]|0)+440>>0];if((c[u>>2]|0)!=109?(Td(30795,c[K>>2]|0)|0)==0:0){c[(c[N>>2]|0)+28>>2]=1;c[A>>2]=c[(c[J>>2]|0)+420>>2]}else G=50;do if((G|0)==50){G=0;if((c[u>>2]|0)!=108?(Td(30799,c[K>>2]|0)|0)==0:0){c[(c[N>>2]|0)+28>>2]=0;c[A>>2]=c[(c[J>>2]|0)+420>>2];break}c[A>>2]=0}while(0);if(c[A>>2]|0){c[T>>2]=c[(c[A>>2]|0)+64>>2];c[o>>2]=(c[o>>2]|0)+1;c[r>>2]=0;c[v>>2]=c[(c[A>>2]|0)+4>>2];while(1){if((c[r>>2]|0)>=(b[(c[A>>2]|0)+34>>1]|0))break;h=(Td(c[c[v>>2]>>2]|0,c[L>>2]|0)|0)==0;n=c[r>>2]|0;if(h){G=58;break}c[r>>2]=n+1;c[v>>2]=(c[v>>2]|0)+24}if((G|0)==58?(G=0,(n|0)==(b[(c[A>>2]|0)+32>>1]|0)):0)c[r>>2]=-1;if(((c[r>>2]|0)>=(b[(c[A>>2]|0)+34>>1]|0)?(qi(c[L>>2]|0)|0)!=0:0)?(d[(c[A>>2]|0)+42>>0]&64|0)==0:0)c[r>>2]=-1;if((c[r>>2]|0)<(b[(c[A>>2]|0)+34>>1]|0)){c[O>>2]=(c[O>>2]|0)+1;l=c[N>>2]|0;do if((c[r>>2]|0)>=0){k=(c[r>>2]|0)>=32?-1:1<>2];f=c[J>>2]|0;if(!(c[l+28>>2]|0)){h=f+432|0;c[h>>2]=c[h>>2]|k;break}else{h=f+436|0;c[h>>2]=c[h>>2]|k;break}}else a[l+1>>0]=68;while(0);b[(c[N>>2]|0)+32>>1]=c[r>>2];c[(c[N>>2]|0)+44>>2]=c[A>>2];c[Q>>2]=1}}}if((((c[O>>2]|0)==0&(c[o>>2]|0)==1&(c[S>>2]|0)!=0?(e[(c[M>>2]|0)+28>>1]&32|0)==0:0)?(qi(c[L>>2]|0)|0)!=0:0)?(d[(c[(c[S>>2]|0)+16>>2]|0)+42>>0]&64|0)==0:0){c[O>>2]=1;b[(c[N>>2]|0)+32>>1]=-1;a[(c[N>>2]|0)+1>>0]=68}h=c[(c[M>>2]|0)+8>>2]|0;c[w>>2]=h;d:do if((h|0)!=0&(c[K>>2]|0)==0&(c[O>>2]|0)==0){c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[c[w>>2]>>2]|0))break d;c[E>>2]=c[(c[(c[w>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)+4>>2];if((c[E>>2]|0)!=0?(Td(c[E>>2]|0,c[L>>2]|0)|0)==0:0){G=82;break b}c[s>>2]=(c[s>>2]|0)+1}}while(0);if(c[O>>2]|0)continue;c[M>>2]=c[(c[M>>2]|0)+16>>2];c[t>>2]=(c[t>>2]|0)+1}if((G|0)==82){c[y>>2]=c[(c[(c[w>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)>>2];if((e[(c[M>>2]|0)+28>>1]&1|0)==0?(c[(c[y>>2]|0)+4>>2]&2|0)!=0:0){W=c[J>>2]|0;c[B>>2]=c[E>>2];Ah(W,30803,B);c[I>>2]=2;W=c[I>>2]|0;i=X;return W|0}zy(c[J>>2]|0,c[w>>2]|0,c[s>>2]|0,c[N>>2]|0,19266,c[t>>2]|0);c[O>>2]=1;c[S>>2]=0}else if((G|0)==89){if((c[O>>2]|0)==0&(c[K>>2]|0)==0?(c[(c[N>>2]|0)+4>>2]&64|0)!=0:0){a[c[N>>2]>>0]=97;c[(c[N>>2]|0)+44>>2]=0;c[I>>2]=1;W=c[I>>2]|0;i=X;return W|0}if((c[O>>2]|0)!=1){c[H>>2]=(c[O>>2]|0)==0?30834:30849;do if(!(c[m>>2]|0)){k=c[J>>2]|0;l=c[H>>2]|0;if(c[K>>2]|0){K=c[K>>2]|0;W=c[L>>2]|0;c[V>>2]=l;c[V+4>>2]=K;c[V+8>>2]=W;Ah(k,30884,V);break}else{V=c[L>>2]|0;c[W>>2]=l;c[W+4>>2]=V;Ah(k,30894,W);break}}else{W=c[J>>2]|0;G=c[m>>2]|0;K=c[K>>2]|0;V=c[L>>2]|0;c[D>>2]=c[H>>2];c[D+4>>2]=G;c[D+8>>2]=K;c[D+12>>2]=V;Ah(W,30871,D)}while(0);a[(c[J>>2]|0)+17>>0]=1;W=(c[U>>2]|0)+24|0;c[W>>2]=(c[W>>2]|0)+1}if((c[S>>2]|0)!=0?(b[(c[N>>2]|0)+32>>1]|0)>=0:0){W=b[(c[N>>2]|0)+32>>1]|0;c[R>>2]=W;c[R>>2]=(c[R>>2]|0)>=64?63:W;R=lR(1,0,c[R>>2]|0)|0;W=(c[S>>2]|0)+56|0;S=W;V=c[S+4>>2]|C;c[W>>2]=c[S>>2]|R;c[W+4>>2]=V}Zu(c[P>>2]|0,c[(c[N>>2]|0)+12>>2]|0);c[(c[N>>2]|0)+12>>2]=0;Zu(c[P>>2]|0,c[(c[N>>2]|0)+16>>2]|0);c[(c[N>>2]|0)+16>>2]=0;a[c[N>>2]>>0]=(c[Q>>2]|0)!=0?62:152}if((c[O>>2]|0)!=1){c[I>>2]=2;W=c[I>>2]|0;i=X;return W|0}if(!(c[(c[N>>2]|0)+4>>2]&4194304))Ny(c[J>>2]|0,c[N>>2]|0,c[T>>2]|0,c[(c[M>>2]|0)+4>>2]|0);while(1){W=(c[U>>2]|0)+20|0;c[W>>2]=(c[W>>2]|0)+1;if((c[U>>2]|0)==(c[M>>2]|0))break;c[U>>2]=c[(c[U>>2]|0)+16>>2]}c[I>>2]=1;W=c[I>>2]|0;i=X;return W|0}function Gy(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;k=m;g=m+24|0;h=m+20|0;j=m+16|0;n=m+12|0;l=m+8|0;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[n>>2]=f;if(!((e[(c[h>>2]|0)+28>>1]|0)&c[n>>2])){i=m;return}c[l>>2]=30711;if(!((e[(c[h>>2]|0)+28>>1]|0)&32)){if((e[(c[h>>2]|0)+28>>1]|0)&4)c[l>>2]=30757}else c[l>>2]=30739;n=c[g>>2]|0;d=c[l>>2]|0;c[k>>2]=c[j>>2];c[k+4>>2]=d;Ah(n,30775,k);i=m;return}function Hy(a){a=a|0;var b=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+12|0;e=g+8|0;f=g;c[e>>2]=a;h[f>>3]=-1.0;if((d[c[e>>2]>>0]|0|0)!=133){c[b>>2]=-1;f=c[b>>2]|0;i=g;return f|0}a=c[(c[e>>2]|0)+8>>2]|0;Ky(a,f,If(c[(c[e>>2]|0)+8>>2]|0)|0,1)|0;if(+h[f>>3]>1.0){c[b>>2]=-1;f=c[b>>2]|0;i=g;return f|0}else{c[b>>2]=~~(+h[f>>3]*134217728.0);f=c[b>>2]|0;i=g;return f|0}return 0}function Iy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=i;i=i+48|0;f=e+44|0;h=e+40|0;g=e+12|0;d=e;c[f>>2]=a;c[h>>2]=b;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[g+4>>2]=196;c[g+24>>2]=d;c[d>>2]=c[h>>2];c[d+4>>2]=0;c[d+8>>2]=0;ay(g,c[(c[f>>2]|0)+20>>2]|0)|0;i=e;return((c[d+4>>2]|0)>0?1:(c[d+8>>2]|0)==0)&1|0}function Jy(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+20|0;f=l+16|0;j=l+12|0;g=l+8|0;h=l+4|0;k=l;c[e>>2]=a;c[f>>2]=b;if((d[c[f>>2]>>0]|0|0)!=152?(d[c[f>>2]>>0]|0|0)!=154:0){i=l;return 0}c[g>>2]=c[(c[e>>2]|0)+24>>2];c[h>>2]=c[c[g>>2]>>2];if(c[h>>2]|0)e=c[c[h>>2]>>2]|0;else e=0;c[k>>2]=e;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[k>>2]|0))break;if((c[(c[f>>2]|0)+28>>2]|0)==(c[(c[h>>2]|0)+8+((c[j>>2]|0)*72|0)+44>>2]|0))break;c[j>>2]=(c[j>>2]|0)+1}e=c[g>>2]|0;if((c[j>>2]|0)<(c[k>>2]|0)){k=e+4|0;c[k>>2]=(c[k>>2]|0)+1;i=l;return 0}else{k=e+8|0;c[k>>2]=(c[k>>2]|0)+1;i=l;return 0}return 0}function Ky(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0;G=i;i=i+96|0;F=G+76|0;w=G+72|0;x=G+68|0;j=G+64|0;m=G+80|0;r=G+60|0;E=G+56|0;u=G+52|0;t=G+16|0;p=G+48|0;z=G+44|0;q=G+40|0;y=G+36|0;D=G+8|0;A=G+32|0;B=G+28|0;n=G+24|0;v=G;c[w>>2]=b;c[x>>2]=e;c[j>>2]=f;a[m>>0]=g;c[E>>2]=(c[w>>2]|0)+(c[j>>2]|0);c[u>>2]=1;b=t;c[b>>2]=0;c[b+4>>2]=0;c[p>>2]=0;c[z>>2]=1;c[q>>2]=0;c[y>>2]=1;c[A>>2]=0;c[B>>2]=0;h[c[x>>2]>>3]=0.0;if((d[m>>0]|0)==1)c[r>>2]=1;else{c[r>>2]=2;c[n>>2]=3-(d[m>>0]|0);while(1){if((c[n>>2]|0)>=(c[j>>2]|0))break;if(a[(c[w>>2]|0)+(c[n>>2]|0)>>0]|0)break;c[n>>2]=(c[n>>2]|0)+2}c[B>>2]=(c[n>>2]|0)<(c[j>>2]|0)&1;c[E>>2]=(c[w>>2]|0)+(c[n>>2]|0)+(d[m>>0]|0)+-3;c[w>>2]=(c[w>>2]|0)+(d[m>>0]&1)}while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break;if(!(d[19267+(d[c[w>>2]>>0]|0)>>0]&1))break;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0)}if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0){c[F>>2]=0;F=c[F>>2]|0;i=G;return F|0}if((a[c[w>>2]>>0]|0)!=45){if((a[c[w>>2]>>0]|0)==43)c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0)}else{c[u>>2]=-1;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0)}while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break;if((a[c[w>>2]>>0]|0)!=48)break;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[A>>2]=(c[A>>2]|0)+1}while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break;b=t;e=c[b+4>>2]|0;if(!((d[19267+(d[c[w>>2]>>0]|0)>>0]&4|0)!=0&((e|0)<214748364|(e|0)==214748364&(c[b>>2]|0)>>>0<3435973835)))break;b=t;b=rR(c[b>>2]|0,c[b+4>>2]|0,10,0)|0;e=(a[c[w>>2]>>0]|0)-48|0;e=gR(b|0,C|0,e|0,((e|0)<0)<<31>>31|0)|0;b=t;c[b>>2]=e;c[b+4>>2]=C;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[A>>2]=(c[A>>2]|0)+1}while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break;if(!(d[19267+(d[c[w>>2]>>0]|0)>>0]&4))break;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[A>>2]=(c[A>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1}a:do if((c[w>>2]|0)>>>0<(c[E>>2]|0)>>>0){b:do if((a[c[w>>2]>>0]|0)==46){c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break;b=t;e=c[b+4>>2]|0;if(!((d[19267+(d[c[w>>2]>>0]|0)>>0]&4|0)!=0&((e|0)<214748364|(e|0)==214748364&(c[b>>2]|0)>>>0<3435973835)))break;b=t;b=rR(c[b>>2]|0,c[b+4>>2]|0,10,0)|0;e=(a[c[w>>2]>>0]|0)-48|0;e=gR(b|0,C|0,e|0,((e|0)<0)<<31>>31|0)|0;b=t;c[b>>2]=e;c[b+4>>2]=C;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[A>>2]=(c[A>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+-1}while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break b;if(!(d[19267+(d[c[w>>2]>>0]|0)>>0]&4))break b;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[A>>2]=(c[A>>2]|0)+1}}while(0);if((c[w>>2]|0)>>>0<(c[E>>2]|0)>>>0){if(!((a[c[w>>2]>>0]|0)!=101?(a[c[w>>2]>>0]|0)!=69:0))o=38;c:do if((o|0)==38){c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[y>>2]=0;if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break a;if((a[c[w>>2]>>0]|0)!=45){if((a[c[w>>2]>>0]|0)==43)c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0)}else{c[z>>2]=-1;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0)}while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break c;if(!(d[19267+(d[c[w>>2]>>0]|0)>>0]&4))break c;if((c[q>>2]|0)<1e4)j=((c[q>>2]|0)*10|0)+((a[c[w>>2]>>0]|0)-48)|0;else j=1e4;c[q>>2]=j;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[y>>2]=1}}while(0);if((c[A>>2]|0)!=0&(c[y>>2]|0)!=0)while(1){if((c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0)break a;if(!(d[19267+(d[c[w>>2]>>0]|0)>>0]&1))break a;c[w>>2]=(c[w>>2]|0)+(c[r>>2]|0)}}}while(0);r=_(c[q>>2]|0,c[z>>2]|0)|0;c[q>>2]=r+(c[p>>2]|0);if((c[q>>2]|0)<0){c[z>>2]=-1;c[q>>2]=_(c[q>>2]|0,-1)|0}else c[z>>2]=1;r=t;do if((c[r>>2]|0)!=0|(c[r+4>>2]|0)!=0){d:do if((c[z>>2]|0)>0)while(1){r=t;p=c[r+4>>2]|0;if(!((p|0)<214748364|(p|0)==214748364&(c[r>>2]|0)>>>0<3435973836?(c[q>>2]|0)>0:0))break d;c[q>>2]=(c[q>>2]|0)+-1;p=t;p=rR(c[p>>2]|0,c[p+4>>2]|0,10,0)|0;r=t;c[r>>2]=p;c[r+4>>2]=C}else while(1){r=t;r=qR(c[r>>2]|0,c[r+4>>2]|0,10,0)|0;if(!((r|0)!=0|(C|0)!=0?0:(c[q>>2]|0)>0))break d;c[q>>2]=(c[q>>2]|0)+-1;p=t;p=pR(c[p>>2]|0,c[p+4>>2]|0,10,0)|0;r=t;c[r>>2]=p;c[r+4>>2]=C}while(0);p=(c[u>>2]|0)<0;r=t;o=c[r>>2]|0;r=c[r+4>>2]|0;b=fR(0,0,o|0,r|0)|0;u=t;c[u>>2]=p?b:o;c[u+4>>2]=p?C:r;if(!(c[q>>2]|0)){z=t;h[D>>3]=+((c[z>>2]|0)>>>0)+4294967296.0*+(c[z+4>>2]|0);break}h[v>>3]=1.0;if((c[q>>2]|0)>307&(c[q>>2]|0)<342){while(1){if(!((c[q>>2]|0)%308|0))break;h[v>>3]=+h[v>>3]*10.0;c[q>>2]=(c[q>>2]|0)-1}u=t;l=+((c[u>>2]|0)>>>0)+4294967296.0*+(c[u+4>>2]|0);k=+h[v>>3];if((c[z>>2]|0)<0){h[D>>3]=l/k;h[D>>3]=+h[D>>3]/1.e+308;break}else{h[D>>3]=l*k;h[D>>3]=+h[D>>3]*1.e+308;break}}if((c[q>>2]|0)>=342){v=t;k=+((c[v>>2]|0)>>>0)+4294967296.0*+(c[v+4>>2]|0);if((c[z>>2]|0)<0){h[D>>3]=0.0*k;break}else{h[D>>3]=s*k;break}}while(1){if(!((c[q>>2]|0)%22|0))break;h[v>>3]=+h[v>>3]*10.0;c[q>>2]=(c[q>>2]|0)-1}while(1){if((c[q>>2]|0)<=0)break;h[v>>3]=+h[v>>3]*1.0e22;c[q>>2]=(c[q>>2]|0)-22}u=t;l=+((c[u>>2]|0)>>>0)+4294967296.0*+(c[u+4>>2]|0);k=+h[v>>3];if((c[z>>2]|0)<0){h[D>>3]=l/k;break}else{h[D>>3]=l*k;break}}else h[D>>3]=((c[u>>2]|0)<0?(c[A>>2]|0)!=0:0)?-0.0:0.0;while(0);h[c[x>>2]>>3]=+h[D>>3];if(((c[A>>2]|0)>0?(c[w>>2]|0)>>>0>=(c[E>>2]|0)>>>0:0)&(c[y>>2]|0)!=0)j=(c[B>>2]|0)==0;else j=0;c[F>>2]=j&1;F=c[F>>2]|0;i=G;return F|0}function Ly(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=0;while(1){if(!(a[(c[h>>2]|0)+(c[m>>2]|0)>>0]|0))break;if((a[(c[h>>2]|0)+(c[m>>2]|0)>>0]|0)==46)break;c[m>>2]=(c[m>>2]|0)+1}do if(c[l>>2]|0){if((zd(c[h>>2]|0,c[l>>2]|0,c[m>>2]|0)|0)==0?(a[(c[l>>2]|0)+(c[m>>2]|0)>>0]|0)==0:0)break;c[g>>2]=0;e=c[g>>2]|0;i=n;return e|0}while(0);c[h>>2]=(c[h>>2]|0)+((c[m>>2]|0)+1);c[m>>2]=0;while(1){if(!(a[(c[h>>2]|0)+(c[m>>2]|0)>>0]|0))break;if((a[(c[h>>2]|0)+(c[m>>2]|0)>>0]|0)==46)break;c[m>>2]=(c[m>>2]|0)+1}do if(c[k>>2]|0){if((zd(c[h>>2]|0,c[k>>2]|0,c[m>>2]|0)|0)==0?(a[(c[k>>2]|0)+(c[m>>2]|0)>>0]|0)==0:0)break;c[g>>2]=0;e=c[g>>2]|0;i=n;return e|0}while(0);c[h>>2]=(c[h>>2]|0)+((c[m>>2]|0)+1);if((c[j>>2]|0)!=0?(Td(c[h>>2]|0,c[j>>2]|0)|0)!=0:0){c[g>>2]=0;e=c[g>>2]|0;i=n;return e|0}c[g>>2]=1;e=c[g>>2]|0;i=n;return e|0}function My(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[e>>2]=a;c[f>>2]=b;a:do if(c[e>>2]|0){c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[e>>2]|0)+4>>2]|0))break a;if(!(Td(c[(c[c[e>>2]>>2]|0)+(c[g>>2]<<3)>>2]|0,c[f>>2]|0)|0))break;c[g>>2]=(c[g>>2]|0)+1}c[d>>2]=1;b=c[d>>2]|0;i=h;return b|0}while(0);c[d>>2]=0;b=c[d>>2]|0;i=h;return b|0}function Ny(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;k=s+36|0;l=s+32|0;j=s+28|0;m=s+24|0;t=s+20|0;q=s+16|0;r=s+12|0;p=s+8|0;o=s+4|0;n=s;c[k>>2]=e;c[l>>2]=f;c[j>>2]=g;c[m>>2]=h;c[t>>2]=c[c[k>>2]>>2];c[q>>2]=0;if(!(c[(c[t>>2]|0)+288>>2]|0)){i=s;return}c[o>>2]=Dh(c[c[k>>2]>>2]|0,c[j>>2]|0)|0;if((c[o>>2]|0)<0){i=s;return}a:do if((d[c[l>>2]>>0]|0)==62)c[q>>2]=c[(c[k>>2]|0)+420>>2];else{c[p>>2]=0;while(1){if((c[p>>2]|0)>=(c[c[m>>2]>>2]|0))break a;j=c[p>>2]|0;if((c[(c[l>>2]|0)+28>>2]|0)==(c[(c[m>>2]|0)+8+((c[p>>2]|0)*72|0)+44>>2]|0))break;c[p>>2]=j+1}c[q>>2]=c[(c[m>>2]|0)+8+(j*72|0)+16>>2]}while(0);c[n>>2]=b[(c[l>>2]|0)+32>>1];if(!(c[q>>2]|0)){i=s;return}do if((c[n>>2]|0)<0)if((b[(c[q>>2]|0)+32>>1]|0)>=0){c[r>>2]=c[(c[(c[q>>2]|0)+4>>2]|0)+((b[(c[q>>2]|0)+32>>1]|0)*24|0)>>2];break}else{c[r>>2]=20759;break}else c[r>>2]=c[(c[(c[q>>2]|0)+4>>2]|0)+((c[n>>2]|0)*24|0)>>2];while(0);if(2!=(Oy(c[k>>2]|0,c[c[q>>2]>>2]|0,c[r>>2]|0,c[o>>2]|0)|0)){i=s;return}a[c[l>>2]>>0]=101;i=s;return}function Oy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+64|0;n=p+16|0;m=p;f=p+48|0;g=p+44|0;h=p+40|0;j=p+36|0;k=p+32|0;o=p+28|0;l=p+24|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=c[c[f>>2]>>2];c[o>>2]=c[(c[(c[k>>2]|0)+16>>2]|0)+(c[j>>2]<<4)>>2];c[l>>2]=Sb[c[(c[k>>2]|0)+288>>2]&255](c[(c[k>>2]|0)+292>>2]|0,20,c[g>>2]|0,c[h>>2]|0,c[o>>2]|0,c[(c[f>>2]|0)+496>>2]|0)|0;if((c[l>>2]|0)!=1){if(!((c[l>>2]|0)!=2&(c[l>>2]|0)!=0)){o=c[l>>2]|0;i=p;return o|0}Nw(c[f>>2]|0);o=c[l>>2]|0;i=p;return o|0}e=c[f>>2]|0;if((c[j>>2]|0)!=0?1:(c[(c[k>>2]|0)+20>>2]|0)>2){k=c[g>>2]|0;n=c[h>>2]|0;c[m>>2]=c[o>>2];c[m+4>>2]=k;c[m+8>>2]=n;Ah(e,30901,m)}else{o=c[h>>2]|0;c[n>>2]=c[g>>2];c[n+4>>2]=o;Ah(e,30934,n)}c[(c[f>>2]|0)+12>>2]=23;o=c[l>>2]|0;i=p;return o|0}function St(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=b;c[h>>2]=e;c[j>>2]=d[c[g>>2]>>0];if(!(c[j>>2]&128)){l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=0;a[f>>0]=1;l=a[f>>0]|0;i=m;return l|0}c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=d[c[g>>2]>>0];if(!(c[k>>2]&128)){c[j>>2]=c[j>>2]&127;c[j>>2]=c[j>>2]<<7;c[j>>2]=c[j>>2]|c[k>>2];l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=0;a[f>>0]=2;l=a[f>>0]|0;i=m;return l|0}c[g>>2]=(c[g>>2]|0)+1;c[j>>2]=c[j>>2]<<14;c[j>>2]=c[j>>2]|(d[c[g>>2]>>0]|0);e=(c[j>>2]&128|0)!=0;c[j>>2]=c[j>>2]&2080895;if(!e){c[k>>2]=c[k>>2]&127;c[k>>2]=c[k>>2]<<7;c[j>>2]=c[j>>2]|c[k>>2];l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=0;a[f>>0]=3;l=a[f>>0]|0;i=m;return l|0}c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=c[k>>2]<<14;c[k>>2]=c[k>>2]|(d[c[g>>2]>>0]|0);e=(c[k>>2]&128|0)!=0;c[k>>2]=c[k>>2]&2080895;b=c[j>>2]|0;if(!e){c[j>>2]=b<<7;c[j>>2]=c[j>>2]|c[k>>2];l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=0;a[f>>0]=4;l=a[f>>0]|0;i=m;return l|0}c[l>>2]=b;c[g>>2]=(c[g>>2]|0)+1;c[j>>2]=c[j>>2]<<14;c[j>>2]=c[j>>2]|(d[c[g>>2]>>0]|0);if(!(c[j>>2]&128)){c[k>>2]=c[k>>2]<<7;c[j>>2]=c[j>>2]|c[k>>2];c[l>>2]=(c[l>>2]|0)>>>18;k=c[l>>2]|0;l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=k;a[f>>0]=5;l=a[f>>0]|0;i=m;return l|0}c[l>>2]=c[l>>2]<<7;c[l>>2]=c[l>>2]|c[k>>2];c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=c[k>>2]<<14;c[k>>2]=c[k>>2]|(d[c[g>>2]>>0]|0);if(!(c[k>>2]&128)){c[j>>2]=c[j>>2]&2080895;c[j>>2]=c[j>>2]<<7;c[j>>2]=c[j>>2]|c[k>>2];c[l>>2]=(c[l>>2]|0)>>>18;k=c[l>>2]|0;l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=k;a[f>>0]=6;l=a[f>>0]|0;i=m;return l|0}c[g>>2]=(c[g>>2]|0)+1;c[j>>2]=c[j>>2]<<14;c[j>>2]=c[j>>2]|(d[c[g>>2]>>0]|0);b=c[j>>2]|0;if(!(c[j>>2]&128)){c[j>>2]=b&-266354561;c[k>>2]=c[k>>2]&2080895;c[k>>2]=c[k>>2]<<7;c[j>>2]=c[j>>2]|c[k>>2];c[l>>2]=(c[l>>2]|0)>>>11;k=c[l>>2]|0;l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=k;a[f>>0]=7;l=a[f>>0]|0;i=m;return l|0}c[j>>2]=b&2080895;c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=c[k>>2]<<14;c[k>>2]=c[k>>2]|(d[c[g>>2]>>0]|0);if(c[k>>2]&128){c[g>>2]=(c[g>>2]|0)+1;c[j>>2]=c[j>>2]<<15;c[j>>2]=c[j>>2]|(d[c[g>>2]>>0]|0);c[k>>2]=c[k>>2]&2080895;c[k>>2]=c[k>>2]<<8;c[j>>2]=c[j>>2]|c[k>>2];c[l>>2]=c[l>>2]<<4;c[k>>2]=d[(c[g>>2]|0)+-4>>0];c[k>>2]=c[k>>2]&127;c[k>>2]=(c[k>>2]|0)>>>3;c[l>>2]=c[l>>2]|c[k>>2];k=c[l>>2]|0;l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=k;a[f>>0]=9;l=a[f>>0]|0;i=m;return l|0}else{c[k>>2]=c[k>>2]&-266354561;c[j>>2]=c[j>>2]<<7;c[j>>2]=c[j>>2]|c[k>>2];c[l>>2]=(c[l>>2]|0)>>>4;k=c[l>>2]|0;l=c[h>>2]|0;c[l>>2]=c[j>>2];c[l+4>>2]=k;a[f>>0]=8;l=a[f>>0]|0;i=m;return l|0}return 0}function Tt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;c[f>>2]=d;while(1){if((c[f>>2]|0)>0)b=(a[(c[e>>2]|0)+((c[f>>2]|0)-1)>>0]|0)==32;else b=0;d=c[f>>2]|0;if(!b)break;c[f>>2]=d+-1}i=g;return(d|0)==0|0}function Ut(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;m=n+4|0;l=n;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=0;if(!(c[g>>2]|0)){m=c[m>>2]|0;i=n;return m|0}c[l>>2]=c[(c[g>>2]|0)+4>>2];kg(c[g>>2]|0);if(d[(c[l>>2]|0)+20>>0]|0){c[m>>2]=6;m=c[m>>2]|0;i=n;return m|0}else{c[m>>2]=Vt(c[c[l>>2]>>2]|0,c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;m=c[m>>2]|0;i=n;return m|0}return 0}function Vt(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=0;if(!(c[(c[g>>2]|0)+216>>2]|0)){l=c[l>>2]|0;i=m;return l|0}if(!(c[h>>2]|0))b=0;else b=c[(c[g>>2]|0)+184>>2]|0;c[l>>2]=Is(c[(c[g>>2]|0)+216>>2]|0,c[h>>2]|0,b,c[(c[g>>2]|0)+188>>2]|0,d[(c[g>>2]|0)+10>>0]|0,c[(c[g>>2]|0)+160>>2]|0,c[(c[g>>2]|0)+208>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;l=c[l>>2]|0;i=m;return l|0}function Wt(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;l=i;i=i+32|0;j=l+20|0;n=l+16|0;m=l+12|0;g=l+8|0;h=l+4|0;k=l;c[n>>2]=b;c[m>>2]=d;c[g>>2]=e;c[h>>2]=f;c[k>>2]=c[(c[n>>2]|0)+(c[m>>2]<<2)>>2];while(1){if(!(c[k>>2]|0)){g=7;break}if((zd(c[(c[k>>2]|0)+20>>2]|0,c[g>>2]|0,c[h>>2]|0)|0)==0?(a[(c[(c[k>>2]|0)+20>>2]|0)+(c[h>>2]|0)>>0]|0)==0:0){g=5;break}c[k>>2]=c[(c[k>>2]|0)+24>>2]}if((g|0)==5){c[j>>2]=c[k>>2];n=c[j>>2]|0;i=l;return n|0}else if((g|0)==7){c[j>>2]=0;n=c[j>>2]|0;i=l;return n|0}return 0}function Xt(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;j=o+12|0;k=o+8|0;l=o+4|0;m=o+16|0;n=o;c[k>>2]=f;c[l>>2]=g;a[m>>0]=h;h=c[k>>2]|0;if((c[l>>2]|0)==-2){c[j>>2]=(c[h+12>>2]|0)==0?0:6;n=c[j>>2]|0;i=o;return n|0}if((b[h>>1]|0)!=(c[l>>2]|0)?(b[c[k>>2]>>1]|0)>=0:0){c[j>>2]=0;n=c[j>>2]|0;i=o;return n|0}if((b[c[k>>2]>>1]|0)==(c[l>>2]|0))c[n>>2]=4;else c[n>>2]=1;if((d[m>>0]|0)!=(e[(c[k>>2]|0)+2>>1]&3|0)){if(d[m>>0]&e[(c[k>>2]|0)+2>>1]&2)c[n>>2]=(c[n>>2]|0)+1}else c[n>>2]=(c[n>>2]|0)+2;c[j>>2]=c[n>>2];n=c[j>>2]|0;i=o;return n|0}function Yt(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;f=k+16|0;g=k+12|0;j=k+8|0;l=k+4|0;m=k+20|0;h=k;c[f>>2]=b;c[g>>2]=e;c[l>>2]=If(c[(c[g>>2]|0)+20>>2]|0)|0;a[m>>0]=a[c[(c[g>>2]|0)+20>>2]>>0]|0;c[h>>2]=((d[18477+(d[m>>0]|0)>>0]|0)+(c[l>>2]|0)|0)%23|0;c[j>>2]=Wt(c[f>>2]|0,c[h>>2]|0,c[(c[g>>2]|0)+20>>2]|0,c[l>>2]|0)|0;if(c[j>>2]|0){c[(c[g>>2]|0)+8>>2]=c[(c[j>>2]|0)+8>>2];c[(c[j>>2]|0)+8>>2]=c[g>>2];i=k;return}else{c[(c[g>>2]|0)+8>>2]=0;c[(c[g>>2]|0)+24>>2]=c[(c[f>>2]|0)+(c[h>>2]<<2)>>2];c[(c[f>>2]|0)+(c[h>>2]<<2)>>2]=c[g>>2];i=k;return}}function Zt(a,b){a=a|0;b=b|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=a;c[h>>2]=b;if(((e[(c[g>>2]|0)+8>>1]|0)&2|0)!=0?(d[(c[g>>2]|0)+10>>0]|0|0)!=(c[h>>2]|0):0){c[j>>2]=_t(c[g>>2]|0,c[h>>2]&255)|0;c[f>>2]=c[j>>2];j=c[f>>2]|0;i=k;return j|0}c[f>>2]=0;j=c[f>>2]|0;i=k;return j|0}function _t(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+48|0;n=v+40|0;o=v+36|0;p=v+45|0;k=v+32|0;t=v+28|0;s=v+24|0;u=v+20|0;r=v+16|0;q=v+12|0;j=v+44|0;h=v+8|0;l=v+4|0;m=v;c[o>>2]=f;a[p>>0]=g;if((d[(c[o>>2]|0)+10>>0]|0|0)!=1?(d[p>>0]|0|0)!=1:0){c[h>>2]=_g(c[o>>2]|0)|0;if(c[h>>2]|0){c[n>>2]=7;u=c[n>>2]|0;i=v;return u|0}c[s>>2]=c[(c[o>>2]|0)+16>>2];c[u>>2]=(c[s>>2]|0)+(c[(c[o>>2]|0)+12>>2]&-2);while(1){if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;a[j>>0]=a[c[s>>2]>>0]|0;a[c[s>>2]>>0]=a[(c[s>>2]|0)+1>>0]|0;c[s>>2]=(c[s>>2]|0)+1;r=a[j>>0]|0;t=c[s>>2]|0;c[s>>2]=t+1;a[t>>0]=r}a[(c[o>>2]|0)+10>>0]=a[p>>0]|0}else{g=(c[o>>2]|0)+12|0;f=c[g>>2]|0;if((d[p>>0]|0|0)==1){c[g>>2]=f&-2;c[k>>2]=(c[(c[o>>2]|0)+12>>2]<<1)+1}else c[k>>2]=(f<<1)+2;c[s>>2]=c[(c[o>>2]|0)+16>>2];c[u>>2]=(c[s>>2]|0)+(c[(c[o>>2]|0)+12>>2]|0);k=c[k>>2]|0;c[t>>2]=yh(c[(c[o>>2]|0)+32>>2]|0,k,((k|0)<0)<<31>>31)|0;if(!(c[t>>2]|0)){c[n>>2]=7;u=c[n>>2]|0;i=v;return u|0}c[r>>2]=c[t>>2];if((d[(c[o>>2]|0)+10>>0]|0|0)==1){a:do if((d[p>>0]|0|0)==2)while(1){if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break a;m=c[s>>2]|0;c[s>>2]=m+1;c[q>>2]=d[m>>0];do if((c[q>>2]|0)>>>0>=192){c[q>>2]=d[26420+((c[q>>2]|0)-192)>>0];while(1){if((c[s>>2]|0)!=(c[u>>2]|0))f=((d[c[s>>2]>>0]|0)&192|0)==128;else f=0;g=c[q>>2]|0;if(!f)break;m=c[s>>2]|0;c[s>>2]=m+1;c[q>>2]=(g<<6)+(63&(d[m>>0]|0))}if((g>>>0>=128?(c[q>>2]&-2048|0)!=55296:0)?(c[q>>2]&-2|0)!=65534:0)break;c[q>>2]=65533}while(0);g=c[q>>2]|0;if((c[q>>2]|0)>>>0<=65535){l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=g;l=(c[q>>2]|0)>>>8&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=l;continue}else{m=(g>>>10&63)+(((c[q>>2]|0)-65536|0)>>>10&192)&255;l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=m;l=216+(((c[q>>2]|0)-65536|0)>>>18&3)&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=l;m=c[q>>2]&255;l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=m;l=220+((c[q>>2]|0)>>>8&3)&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=l;continue}}else while(1){if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break a;m=c[s>>2]|0;c[s>>2]=m+1;c[q>>2]=d[m>>0];do if((c[q>>2]|0)>>>0>=192){c[q>>2]=d[26420+((c[q>>2]|0)-192)>>0];while(1){if((c[s>>2]|0)!=(c[u>>2]|0))f=((d[c[s>>2]>>0]|0)&192|0)==128;else f=0;g=c[q>>2]|0;if(!f)break;m=c[s>>2]|0;c[s>>2]=m+1;c[q>>2]=(g<<6)+(63&(d[m>>0]|0))}if((g>>>0>=128?(c[q>>2]&-2048|0)!=55296:0)?(c[q>>2]&-2|0)!=65534:0)break;c[q>>2]=65533}while(0);g=c[q>>2]|0;if((c[q>>2]|0)>>>0<=65535){l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=g>>>8;l=c[q>>2]&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=l;continue}else{l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=216+((g-65536|0)>>>18&3);l=((c[q>>2]|0)>>>10&63)+(((c[q>>2]|0)-65536|0)>>>10&192)&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=l;m=220+((c[q>>2]|0)>>>8&3)&255;l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=m;l=c[q>>2]&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=l;continue}}while(0);c[(c[o>>2]|0)+12>>2]=(c[r>>2]|0)-(c[t>>2]|0);u=c[r>>2]|0;c[r>>2]=u+1;a[u>>0]=0}else{b:do if((d[(c[o>>2]|0)+10>>0]|0|0)==2)while(1){if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break b;m=c[s>>2]|0;c[s>>2]=m+1;c[q>>2]=d[m>>0];m=c[s>>2]|0;c[s>>2]=m+1;c[q>>2]=(c[q>>2]|0)+((d[m>>0]|0)<<8);if((c[q>>2]|0)>>>0>=55296&(c[q>>2]|0)>>>0<57344?(c[s>>2]|0)>>>0<(c[u>>2]|0)>>>0:0){m=c[s>>2]|0;c[s>>2]=m+1;c[l>>2]=d[m>>0];m=c[s>>2]|0;c[s>>2]=m+1;c[l>>2]=(c[l>>2]|0)+((d[m>>0]|0)<<8);c[q>>2]=(c[l>>2]&1023)+((c[q>>2]&63)<<10)+((c[q>>2]&960)+64<<10)}g=c[q>>2]|0;if((c[q>>2]|0)>>>0<128){m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=g;continue}f=c[q>>2]|0;if(g>>>0<2048){k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=192+(f>>>6&31);k=128+(c[q>>2]&63)&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=k;continue}g=c[q>>2]|0;if(f>>>0<65536){m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=224+(g>>>12&15);m=128+((c[q>>2]|0)>>>6&63)&255;k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=m;k=128+(c[q>>2]&63)&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=k;continue}else{k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=240+(g>>>18&7);k=128+((c[q>>2]|0)>>>12&63)&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=k;m=128+((c[q>>2]|0)>>>6&63)&255;k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=m;k=128+(c[q>>2]&63)&255;m=c[r>>2]|0;c[r>>2]=m+1;a[m>>0]=k;continue}}else while(1){if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break b;l=c[s>>2]|0;c[s>>2]=l+1;c[q>>2]=(d[l>>0]|0)<<8;l=c[s>>2]|0;c[s>>2]=l+1;c[q>>2]=(c[q>>2]|0)+(d[l>>0]|0);if((c[q>>2]|0)>>>0>=55296&(c[q>>2]|0)>>>0<57344?(c[s>>2]|0)>>>0<(c[u>>2]|0)>>>0:0){l=c[s>>2]|0;c[s>>2]=l+1;c[m>>2]=(d[l>>0]|0)<<8;l=c[s>>2]|0;c[s>>2]=l+1;c[m>>2]=(c[m>>2]|0)+(d[l>>0]|0);c[q>>2]=(c[m>>2]&1023)+((c[q>>2]&63)<<10)+((c[q>>2]&960)+64<<10)}g=c[q>>2]|0;if((c[q>>2]|0)>>>0<128){l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=g;continue}f=c[q>>2]|0;if(g>>>0<2048){k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=192+(f>>>6&31);k=128+(c[q>>2]&63)&255;l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=k;continue}g=c[q>>2]|0;if(f>>>0<65536){l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=224+(g>>>12&15);l=128+((c[q>>2]|0)>>>6&63)&255;k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=l;k=128+(c[q>>2]&63)&255;l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=k;continue}else{k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=240+(g>>>18&7);k=128+((c[q>>2]|0)>>>12&63)&255;l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=k;l=128+((c[q>>2]|0)>>>6&63)&255;k=c[r>>2]|0;c[r>>2]=k+1;a[k>>0]=l;k=128+(c[q>>2]&63)&255;l=c[r>>2]|0;c[r>>2]=l+1;a[l>>0]=k;continue}}while(0);c[(c[o>>2]|0)+12>>2]=(c[r>>2]|0)-(c[t>>2]|0)}a[c[r>>2]>>0]=0;c[q>>2]=e[(c[o>>2]|0)+8>>1];Ug(c[o>>2]|0);b[(c[o>>2]|0)+8>>1]=514|c[q>>2]&32799;a[(c[o>>2]|0)+10>>0]=a[p>>0]|0;c[(c[o>>2]|0)+16>>2]=c[t>>2];c[(c[o>>2]|0)+20>>2]=c[(c[o>>2]|0)+16>>2];u=$t(c[(c[o>>2]|0)+32>>2]|0,c[(c[o>>2]|0)+16>>2]|0)|0;c[(c[o>>2]|0)+24>>2]=u}c[n>>2]=0;u=c[n>>2]|0;i=v;return u|0}function $t(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+8|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=b;if((c[f>>2]|0)!=0?(au(c[f>>2]|0,c[g>>2]|0)|0)!=0:0){c[d>>2]=e[(c[f>>2]|0)+248+4>>1];b=c[d>>2]|0;i=h;return b|0}c[d>>2]=Tb[c[56>>2]&255](c[g>>2]|0)|0;b=c[d>>2]|0;i=h;return b|0}function au(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if((c[e>>2]|0)>>>0<(c[(c[d>>2]|0)+248+32>>2]|0)>>>0){b=0;b=b&1;i=f;return b|0}b=(c[e>>2]|0)>>>0<(c[(c[d>>2]|0)+248+36>>2]|0)>>>0;b=b&1;i=f;return b|0}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;d=f+8|0;g=f+4|0;e=f;c[d>>2]=a;c[g>>2]=b;c[e>>2]=c[(c[g>>2]|0)+28>>2];if(!(c[e>>2]|0)){i=f;return}g=c[e>>2]|0;c[g>>2]=(c[g>>2]|0)+-1;if(c[c[e>>2]>>2]|0){i=f;return}Qb[c[(c[e>>2]|0)+4>>2]&255](c[(c[e>>2]|0)+8>>2]|0);Sf(c[d>>2]|0,c[e>>2]|0);i=f;return}function cu(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;b=k+20|0;e=k+16|0;f=k+12|0;h=k+8|0;j=k+4|0;g=k;c[b>>2]=a;Nf(c[b>>2]|0);c[e>>2]=0;while(1){if((c[e>>2]|0)>=(c[(c[b>>2]|0)+20>>2]|0))break;c[h>>2]=c[(c[(c[b>>2]|0)+16>>2]|0)+(c[e>>2]<<4)+12>>2];a:do if(c[(c[(c[b>>2]|0)+16>>2]|0)+(c[e>>2]<<4)+12>>2]|0){c[f>>2]=c[(c[h>>2]|0)+8+8>>2];while(1){if(!(c[f>>2]|0))break a;c[j>>2]=c[(c[f>>2]|0)+8>>2];if((d[(c[j>>2]|0)+42>>0]|0)&16)iu(c[b>>2]|0,c[j>>2]|0);c[f>>2]=c[c[f>>2]>>2]}}while(0);c[e>>2]=(c[e>>2]|0)+1}c[f>>2]=c[(c[b>>2]|0)+312+8>>2];while(1){if(!(c[f>>2]|0))break;c[g>>2]=c[(c[f>>2]|0)+8>>2];if(c[(c[g>>2]|0)+16>>2]|0)iu(c[b>>2]|0,c[(c[g>>2]|0)+16>>2]|0);c[f>>2]=c[c[f>>2]>>2]}ju(c[b>>2]|0);i=k;return}function du(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;gu(c[d>>2]|0,68);i=b;return 0}function eu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=i;i=i+16|0;f=g+12|0;b=g+8|0;d=g+4|0;e=g;c[b>>2]=a;if(c[(c[b>>2]|0)+4>>2]|0){c[f>>2]=1;f=c[f>>2]|0;i=g;return f|0}c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+20>>2]|0)){b=9;break}c[e>>2]=c[(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4)+4>>2];if((c[e>>2]|0)!=0?(fu(c[e>>2]|0)|0)!=0:0){b=7;break}c[d>>2]=(c[d>>2]|0)+1}if((b|0)==7){c[f>>2]=1;f=c[f>>2]|0;i=g;return f|0}else if((b|0)==9){c[f>>2]=0;f=c[f>>2]|0;i=g;return f|0}return 0}function fu(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[(c[b>>2]|0)+16>>2]|0)!=0|0}function gu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;d=l+24|0;e=l+20|0;g=l+16|0;f=l+12|0;j=l+8|0;h=l+4|0;k=l;c[d>>2]=a;c[e>>2]=b;if(!(c[(c[d>>2]|0)+332>>2]|0)){i=l;return}c[f>>2]=c[(c[d>>2]|0)+332>>2];c[(c[d>>2]|0)+332>>2]=0;c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[d>>2]|0)+308>>2]|0))break;c[j>>2]=c[(c[f>>2]|0)+(c[g>>2]<<2)>>2];c[h>>2]=c[(c[j>>2]|0)+8>>2];if((c[h>>2]|0)!=0?(c[k>>2]=c[(c[c[h>>2]>>2]|0)+(c[e>>2]|0)>>2],(c[k>>2]|0)!=0):0)Tb[c[k>>2]&255](c[h>>2]|0)|0;c[(c[j>>2]|0)+20>>2]=0;hu(c[j>>2]|0);c[g>>2]=(c[g>>2]|0)+1}Sf(c[d>>2]|0,c[f>>2]|0);c[(c[d>>2]|0)+308>>2]=0;i=l;return}function hu(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=c[c[b>>2]>>2];a=(c[b>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+-1;if(c[(c[b>>2]|0)+12>>2]|0){i=f;return}c[e>>2]=c[(c[b>>2]|0)+8>>2];if(c[e>>2]|0)Tb[c[(c[c[e>>2]>>2]|0)+16>>2]&255](c[e>>2]|0)|0;Sf(c[d>>2]|0,c[b>>2]|0);i=f;return}function iu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;d=h+12|0;j=h+8|0;f=h+4|0;e=h;c[d>>2]=a;c[j>>2]=b;c[f>>2]=(c[j>>2]|0)+56;while(1){if(!(c[c[f>>2]>>2]|0)){g=6;break}a=c[c[f>>2]>>2]|0;if((c[c[c[f>>2]>>2]>>2]|0)==(c[d>>2]|0))break;c[f>>2]=a+24}if((g|0)==6){i=h;return}c[e>>2]=a;c[c[f>>2]>>2]=c[(c[e>>2]|0)+24>>2];hu(c[e>>2]|0);i=h;return}function ju(a){a=a|0;var b=0,d=0,e=0,f=0;f=i;i=i+16|0;b=f+8|0;d=f+4|0;e=f;c[b>>2]=a;c[d>>2]=c[(c[b>>2]|0)+336>>2];c[(c[b>>2]|0)+336>>2]=0;if(!(c[d>>2]|0)){i=f;return}Oh(c[b>>2]|0);do{c[e>>2]=c[(c[d>>2]|0)+24>>2];hu(c[d>>2]|0);c[d>>2]=c[e>>2]}while((c[d>>2]|0)!=0);i=f;return}function ku(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;Qb[c[160>>2]&255](c[(c[d>>2]|0)+44>>2]|0);i=b;return}function lu(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;c[d>>2]=a;a=1584;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[410]=(c[53]|0)==0&1;if((c[410]|0)!=0&(c[55]|0)!=0&(c[53]|0)==0){c[411]=c[55];c[399]=10;c[409]=1;i=d;return 0}else{c[411]=0;c[399]=10;c[409]=1;i=d;return 0}return 0}function mu(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;c[d>>2]=a;a=1584;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));i=d;return}function nu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+32|0;g=m+20|0;h=m+16|0;j=m+12|0;k=m+8|0;l=m+4|0;n=m;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;c[n>>2]=60+((c[410]|0)*52|0);b=c[n>>2]|0;c[k>>2]=ig(b,((b|0)<0)<<31>>31)|0;if(!(c[k>>2]|0)){n=c[k>>2]|0;i=m;return n|0}if(c[410]|0){c[l>>2]=(c[k>>2]|0)+60;c[(c[l>>2]|0)+12>>2]=10}else c[l>>2]=1584;if(!(d[(c[l>>2]|0)+20+14>>0]|0)){a[(c[l>>2]|0)+20+14>>0]=1;n=(c[l>>2]|0)+20|0;c[(c[l>>2]|0)+20+24>>2]=n;c[(c[l>>2]|0)+20+28>>2]=n}c[c[k>>2]>>2]=c[l>>2];c[(c[k>>2]|0)+4>>2]=c[g>>2];c[(c[k>>2]|0)+8>>2]=c[h>>2];c[(c[k>>2]|0)+12>>2]=(c[g>>2]|0)+(c[h>>2]|0)+32;c[(c[k>>2]|0)+16>>2]=(c[j>>2]|0)!=0?1:0;Eu(c[k>>2]|0);if(c[j>>2]|0){c[(c[k>>2]|0)+20>>2]=10;n=(c[l>>2]|0)+8|0;c[n>>2]=(c[n>>2]|0)+(c[(c[k>>2]|0)+20>>2]|0);c[(c[l>>2]|0)+12>>2]=(c[(c[l>>2]|0)+4>>2]|0)+10-(c[(c[l>>2]|0)+8>>2]|0)}if(c[(c[k>>2]|0)+44>>2]|0){n=c[k>>2]|0;i=m;return n|0}uu(c[k>>2]|0);c[k>>2]=0;n=c[k>>2]|0;i=m;return n|0}function ou(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=i;i=i+16|0;h=g+12|0;d=g+8|0;e=g+4|0;f=g;c[h>>2]=a;c[d>>2]=b;c[e>>2]=c[h>>2];if(!(c[(c[e>>2]|0)+16>>2]|0)){i=g;return}c[f>>2]=c[c[e>>2]>>2];h=(c[f>>2]|0)+4|0;c[h>>2]=(c[h>>2]|0)+((c[d>>2]|0)-(c[(c[e>>2]|0)+24>>2]|0));c[(c[f>>2]|0)+12>>2]=(c[(c[f>>2]|0)+4>>2]|0)+10-(c[(c[f>>2]|0)+8>>2]|0);c[(c[e>>2]|0)+24>>2]=c[d>>2];c[(c[e>>2]|0)+28>>2]=(((c[(c[e>>2]|0)+24>>2]|0)*9|0)>>>0)/10|0;wu(c[e>>2]|0);i=g;return}function pu(a){a=a|0;var b=0,d=0,e=0,f=0;d=i;i=i+16|0;f=d+8|0;b=d+4|0;e=d;c[f>>2]=a;c[e>>2]=c[f>>2];c[b>>2]=c[(c[e>>2]|0)+40>>2];i=d;return c[b>>2]|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=i;i=i+16|0;h=e+8|0;g=e+4|0;f=e;c[h>>2]=a;c[g>>2]=b;c[f>>2]=d;a=Bu(c[h>>2]|0,c[g>>2]|0,c[f>>2]|0)|0;i=e;return a|0}function ru(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;k=i;i=i+32|0;n=k+24|0;m=k+20|0;l=k+16|0;f=k+12|0;h=k+8|0;g=k+4|0;j=k;c[n>>2]=b;c[m>>2]=d;c[l>>2]=e;c[f>>2]=c[n>>2];c[h>>2]=c[m>>2];c[g>>2]=c[c[f>>2]>>2];if((c[l>>2]|0)==0?(c[(c[g>>2]|0)+16>>2]|0)>>>0<=(c[(c[g>>2]|0)+4>>2]|0)>>>0:0){c[j>>2]=(c[g>>2]|0)+20+24;c[(c[h>>2]|0)+28>>2]=(c[g>>2]|0)+20;m=c[h>>2]|0;n=c[c[j>>2]>>2]|0;c[(c[h>>2]|0)+24>>2]=n;c[n+28>>2]=m;c[c[j>>2]>>2]=c[h>>2];n=(c[f>>2]|0)+36|0;c[n>>2]=(c[n>>2]|0)+1;a[(c[h>>2]|0)+12>>0]=0;i=k;return}yu(c[h>>2]|0,1); +i=k;return}function su(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;l=i;i=i+32|0;o=l+28|0;n=l+24|0;m=l+20|0;f=l+16|0;h=l+12|0;j=l+8|0;k=l+4|0;g=l;c[o>>2]=a;c[n>>2]=b;c[m>>2]=d;c[f>>2]=e;c[h>>2]=c[o>>2];c[j>>2]=c[n>>2];c[g>>2]=((c[m>>2]|0)>>>0)%((c[(c[h>>2]|0)+44>>2]|0)>>>0)|0;c[k>>2]=(c[(c[h>>2]|0)+48>>2]|0)+(c[g>>2]<<2);while(1){if((c[c[k>>2]>>2]|0)==(c[j>>2]|0))break;c[k>>2]=(c[c[k>>2]>>2]|0)+16}c[c[k>>2]>>2]=c[(c[j>>2]|0)+16>>2];c[g>>2]=((c[f>>2]|0)>>>0)%((c[(c[h>>2]|0)+44>>2]|0)>>>0)|0;c[(c[j>>2]|0)+8>>2]=c[f>>2];c[(c[j>>2]|0)+16>>2]=c[(c[(c[h>>2]|0)+48>>2]|0)+(c[g>>2]<<2)>>2];c[(c[(c[h>>2]|0)+48>>2]|0)+(c[g>>2]<<2)>>2]=c[j>>2];if((c[f>>2]|0)>>>0<=(c[(c[h>>2]|0)+32>>2]|0)>>>0){i=l;return}c[(c[h>>2]|0)+32>>2]=c[f>>2];i=l;return}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+8|0;d=f+4|0;e=f;c[g>>2]=a;c[d>>2]=b;c[e>>2]=c[g>>2];if((c[d>>2]|0)>>>0>(c[(c[e>>2]|0)+32>>2]|0)>>>0){i=f;return}Au(c[e>>2]|0,c[d>>2]|0);c[(c[e>>2]|0)+32>>2]=(c[d>>2]|0)-1;i=f;return}function uu(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+16|0;f=b+8|0;d=b+4|0;e=b;c[f>>2]=a;c[d>>2]=c[f>>2];c[e>>2]=c[c[d>>2]>>2];Au(c[d>>2]|0,0);a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[(c[d>>2]|0)+24>>2]|0);a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)-(c[(c[d>>2]|0)+20>>2]|0);c[(c[e>>2]|0)+12>>2]=(c[(c[e>>2]|0)+4>>2]|0)+10-(c[(c[e>>2]|0)+8>>2]|0);wu(c[d>>2]|0);Kd(c[(c[d>>2]|0)+56>>2]|0);Kd(c[(c[d>>2]|0)+48>>2]|0);Kd(c[d>>2]|0);i=b;return}function vu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+12|0;b=f+8|0;d=f+4|0;e=f;c[g>>2]=a;c[b>>2]=c[g>>2];if(!(c[(c[b>>2]|0)+16>>2]|0)){i=f;return}c[d>>2]=c[c[b>>2]>>2];c[e>>2]=c[(c[d>>2]|0)+4>>2];c[(c[d>>2]|0)+4>>2]=0;wu(c[b>>2]|0);c[(c[d>>2]|0)+4>>2]=c[e>>2];i=f;return}function wu(a){a=a|0;var b=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+8|0;f=g+4|0;e=g;c[b>>2]=a;c[f>>2]=c[c[b>>2]>>2];while(1){if((c[(c[f>>2]|0)+16>>2]|0)>>>0<=(c[(c[f>>2]|0)+4>>2]|0)>>>0)break;a=c[(c[f>>2]|0)+20+28>>2]|0;c[e>>2]=a;if(d[a+14>>0]|0)break;xu(c[e>>2]|0)|0;yu(c[e>>2]|0,1)}if(c[(c[b>>2]|0)+40>>2]|0){i=g;return}if(!(c[(c[b>>2]|0)+56>>2]|0)){i=g;return}Kd(c[(c[b>>2]|0)+56>>2]|0);c[(c[b>>2]|0)+52>>2]=0;c[(c[b>>2]|0)+56>>2]=0;i=g;return}function xu(b){b=b|0;var d=0,e=0,f=0;e=i;i=i+16|0;d=e+4|0;f=e;c[d>>2]=b;c[f>>2]=c[(c[d>>2]|0)+20>>2];c[(c[(c[d>>2]|0)+28>>2]|0)+24>>2]=c[(c[d>>2]|0)+24>>2];c[(c[(c[d>>2]|0)+24>>2]|0)+28>>2]=c[(c[d>>2]|0)+28>>2];c[(c[d>>2]|0)+24>>2]=0;c[(c[d>>2]|0)+28>>2]=0;a[(c[d>>2]|0)+12>>0]=1;b=(c[f>>2]|0)+36|0;c[b>>2]=(c[b>>2]|0)+-1;i=e;return c[d>>2]|0}function yu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;d=h+16|0;e=h+12|0;j=h+8|0;f=h+4|0;g=h;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[(c[d>>2]|0)+20>>2];c[j>>2]=((c[(c[d>>2]|0)+8>>2]|0)>>>0)%((c[(c[f>>2]|0)+44>>2]|0)>>>0)|0;c[g>>2]=(c[(c[f>>2]|0)+48>>2]|0)+(c[j>>2]<<2);while(1){b=(c[c[g>>2]>>2]|0)+16|0;if((c[c[g>>2]>>2]|0)==(c[d>>2]|0))break;c[g>>2]=b}c[c[g>>2]>>2]=c[b>>2];j=(c[f>>2]|0)+40|0;c[j>>2]=(c[j>>2]|0)+-1;if(!(c[e>>2]|0)){i=h;return}zu(c[d>>2]|0);i=h;return}function zu(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;c[e>>2]=c[(c[d>>2]|0)+20>>2];if(a[(c[d>>2]|0)+13>>0]|0){c[(c[d>>2]|0)+16>>2]=c[(c[e>>2]|0)+52>>2];c[(c[e>>2]|0)+52>>2]=c[d>>2]}else Yi(c[c[d>>2]>>2]|0);if(!(c[(c[e>>2]|0)+16>>2]|0)){i=f;return}e=(c[c[e>>2]>>2]|0)+16|0;c[e>>2]=(c[e>>2]|0)+-1;i=f;return}function Au(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=b;c[f>>2]=d;c[g>>2]=0;while(1){if((c[g>>2]|0)>>>0>=(c[(c[e>>2]|0)+44>>2]|0)>>>0)break;c[j>>2]=(c[(c[e>>2]|0)+48>>2]|0)+(c[g>>2]<<2);while(1){b=c[c[j>>2]>>2]|0;c[h>>2]=b;if(!b)break;if((c[(c[h>>2]|0)+8>>2]|0)>>>0<(c[f>>2]|0)>>>0){c[j>>2]=(c[h>>2]|0)+16;continue}b=(c[e>>2]|0)+40|0;c[b>>2]=(c[b>>2]|0)+-1;c[c[j>>2]>>2]=c[(c[h>>2]|0)+16>>2];if(!(a[(c[h>>2]|0)+12>>0]|0))xu(c[h>>2]|0)|0;zu(c[h>>2]|0)}c[g>>2]=(c[g>>2]|0)+1}i=k;return}function Bu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;j=l+20|0;m=l+16|0;f=l+12|0;g=l+8|0;h=l+4|0;k=l;c[m>>2]=b;c[f>>2]=d;c[g>>2]=e;c[h>>2]=c[m>>2];c[k>>2]=0;c[k>>2]=c[(c[(c[h>>2]|0)+48>>2]|0)+((((c[f>>2]|0)>>>0)%((c[(c[h>>2]|0)+44>>2]|0)>>>0)|0)<<2)>>2];while(1){if(c[k>>2]|0)d=(c[(c[k>>2]|0)+8>>2]|0)!=(c[f>>2]|0);else d=0;e=c[k>>2]|0;if(!d)break;c[k>>2]=c[e+16>>2]}if(e){e=c[k>>2]|0;if(a[(c[k>>2]|0)+12>>0]|0){c[j>>2]=e;m=c[j>>2]|0;i=l;return m|0}else{c[j>>2]=xu(e)|0;m=c[j>>2]|0;i=l;return m|0}}else if(c[g>>2]|0){c[j>>2]=Cu(c[h>>2]|0,c[f>>2]|0,c[g>>2]|0)|0;m=c[j>>2]|0;i=l;return m|0}else{c[j>>2]=0;m=c[j>>2]|0;i=l;return m|0}return 0}function Cu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;f=p+32|0;g=p+28|0;h=p+24|0;j=p+20|0;l=p+16|0;m=p+12|0;o=p+8|0;n=p+4|0;k=p;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[m>>2]=c[c[g>>2]>>2];c[o>>2]=0;c[l>>2]=(c[(c[g>>2]|0)+40>>2]|0)-(c[(c[g>>2]|0)+36>>2]|0);do if((c[j>>2]|0)==1){if((c[l>>2]|0)>>>0<(c[(c[m>>2]|0)+12>>2]|0)>>>0?(c[l>>2]|0)>>>0<(c[(c[g>>2]|0)+28>>2]|0)>>>0:0){if(!(Du(c[g>>2]|0)|0))break;if((c[(c[g>>2]|0)+36>>2]|0)>>>0>=(c[l>>2]|0)>>>0)break}c[f>>2]=0;o=c[f>>2]|0;i=p;return o|0}while(0);if((c[(c[g>>2]|0)+40>>2]|0)>>>0>=(c[(c[g>>2]|0)+44>>2]|0)>>>0)Eu(c[g>>2]|0);do if((c[(c[g>>2]|0)+16>>2]|0)!=0?(a[(c[(c[m>>2]|0)+20+28>>2]|0)+14>>0]|0)==0:0){if(((c[(c[g>>2]|0)+40>>2]|0)+1|0)>>>0<(c[(c[g>>2]|0)+24>>2]|0)>>>0?(Du(c[g>>2]|0)|0)==0:0)break;c[o>>2]=c[(c[m>>2]|0)+20+28>>2];yu(c[o>>2]|0,0);xu(c[o>>2]|0)|0;c[n>>2]=c[(c[o>>2]|0)+20>>2];if((c[(c[n>>2]|0)+12>>2]|0)!=(c[(c[g>>2]|0)+12>>2]|0)){zu(c[o>>2]|0);c[o>>2]=0;break}else{m=(c[m>>2]|0)+16|0;c[m>>2]=(c[m>>2]|0)-((c[(c[n>>2]|0)+16>>2]|0)-(c[(c[g>>2]|0)+16>>2]|0));break}}while(0);if(!(c[o>>2]|0))c[o>>2]=Fu(c[g>>2]|0,(c[j>>2]|0)==1&1)|0;if((c[o>>2]|0)!=0?(c[k>>2]=((c[h>>2]|0)>>>0)%((c[(c[g>>2]|0)+44>>2]|0)>>>0)|0,n=(c[g>>2]|0)+40|0,c[n>>2]=(c[n>>2]|0)+1,c[(c[o>>2]|0)+8>>2]=c[h>>2],c[(c[o>>2]|0)+16>>2]=c[(c[(c[g>>2]|0)+48>>2]|0)+(c[k>>2]<<2)>>2],c[(c[o>>2]|0)+20>>2]=c[g>>2],c[(c[o>>2]|0)+28>>2]=0,c[(c[o>>2]|0)+24>>2]=0,a[(c[o>>2]|0)+12>>0]=1,c[c[(c[o>>2]|0)+4>>2]>>2]=0,c[(c[(c[g>>2]|0)+48>>2]|0)+(c[k>>2]<<2)>>2]=c[o>>2],(c[h>>2]|0)>>>0>(c[(c[g>>2]|0)+32>>2]|0)>>>0):0)c[(c[g>>2]|0)+32>>2]=c[h>>2];c[f>>2]=c[o>>2];o=c[f>>2]|0;i=p;return o|0}function Du(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;b=d+4|0;e=d;c[e>>2]=a;if((c[413]|0)!=0?((c[(c[e>>2]|0)+4>>2]|0)+(c[(c[e>>2]|0)+8>>2]|0)|0)<=(c[412]|0):0){c[b>>2]=c[420];e=c[b>>2]|0;i=d;return e|0}c[b>>2]=Hu()|0;e=c[b>>2]|0;i=d;return e|0}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;b=k+24|0;d=k+20|0;g=k+16|0;f=k+12|0;j=k+8|0;h=k+4|0;e=k;c[b>>2]=a;a=c[(c[b>>2]|0)+44>>2]<<1;c[g>>2]=a;c[g>>2]=(c[g>>2]|0)>>>0<256?256:a;if(c[(c[b>>2]|0)+44>>2]|0)Sj();c[d>>2]=ig(c[g>>2]<<2,0)|0;if(c[(c[b>>2]|0)+44>>2]|0)Tj();if(!(c[d>>2]|0)){i=k;return}c[f>>2]=0;while(1){if((c[f>>2]|0)>>>0>=(c[(c[b>>2]|0)+44>>2]|0)>>>0)break;c[h>>2]=c[(c[(c[b>>2]|0)+48>>2]|0)+(c[f>>2]<<2)>>2];while(1){a=c[h>>2]|0;c[j>>2]=a;if(!a)break;c[e>>2]=((c[(c[j>>2]|0)+8>>2]|0)>>>0)%((c[g>>2]|0)>>>0)|0;c[h>>2]=c[(c[j>>2]|0)+16>>2];c[(c[j>>2]|0)+16>>2]=c[(c[d>>2]|0)+(c[e>>2]<<2)>>2];c[(c[d>>2]|0)+(c[e>>2]<<2)>>2]=c[j>>2]}c[f>>2]=(c[f>>2]|0)+1}Kd(c[(c[b>>2]|0)+48>>2]|0);c[(c[b>>2]|0)+48>>2]=c[d>>2];c[(c[b>>2]|0)+44>>2]=c[g>>2];i=k;return}function Fu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;e=l+16|0;f=l+12|0;g=l+8|0;h=l+4|0;j=l;c[f>>2]=b;c[g>>2]=d;c[h>>2]=0;do if(c[(c[f>>2]|0)+52>>2]|0)k=4;else{if((c[(c[f>>2]|0)+40>>2]|0)==0?(Gu(c[f>>2]|0)|0)!=0:0){k=4;break}if(c[g>>2]|0)Sj();c[j>>2]=ej(c[(c[f>>2]|0)+12>>2]|0)|0;c[h>>2]=(c[j>>2]|0)+(c[(c[f>>2]|0)+4>>2]|0);if(c[g>>2]|0)Tj();if(c[j>>2]|0){c[c[h>>2]>>2]=c[j>>2];c[(c[h>>2]|0)+4>>2]=(c[h>>2]|0)+32;a[(c[h>>2]|0)+13>>0]=0;a[(c[h>>2]|0)+14>>0]=0;break}c[e>>2]=0;k=c[e>>2]|0;i=l;return k|0}while(0);if((k|0)==4){c[h>>2]=c[(c[f>>2]|0)+52>>2];c[(c[f>>2]|0)+52>>2]=c[(c[h>>2]|0)+16>>2];c[(c[h>>2]|0)+16>>2]=0}if(c[(c[f>>2]|0)+16>>2]|0){k=(c[c[f>>2]>>2]|0)+16|0;c[k>>2]=(c[k>>2]|0)+1}c[e>>2]=c[h>>2];k=c[e>>2]|0;i=l;return k|0}function Gu(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;l=i;i=i+32|0;d=l+28|0;e=l+24|0;j=l;k=l+20|0;g=l+16|0;f=l+12|0;h=l+8|0;c[e>>2]=b;if(!(c[411]|0)){c[d>>2]=0;k=c[d>>2]|0;i=l;return k|0}if((c[(c[e>>2]|0)+24>>2]|0)>>>0<3){c[d>>2]=0;k=c[d>>2]|0;i=l;return k|0}Sj();if((c[411]|0)>0){b=c[(c[e>>2]|0)+12>>2]|0;m=c[411]|0;m=rR(b|0,((b|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;b=j;c[b>>2]=m;c[b+4>>2]=C}else{b=c[411]|0;b=rR(-1024,-1,b|0,((b|0)<0)<<31>>31|0)|0;m=j;c[m>>2]=b;c[m+4>>2]=C}o=j;b=c[o>>2]|0;o=c[o+4>>2]|0;m=c[(c[e>>2]|0)+12>>2]|0;m=rR(m|0,((m|0)<0)<<31>>31|0,c[(c[e>>2]|0)+24>>2]|0,0)|0;n=C;if((o|0)>(n|0)|(o|0)==(n|0)&b>>>0>m>>>0){o=j;c[o>>2]=_(c[(c[e>>2]|0)+12>>2]|0,c[(c[e>>2]|0)+24>>2]|0)|0;c[o+4>>2]=0}o=j;o=_f(c[o>>2]|0,c[o+4>>2]|0)|0;c[(c[e>>2]|0)+56>>2]=o;c[k>>2]=o;Tj();a:do if(c[k>>2]|0){o=$f(c[k>>2]|0)|0;c[g>>2]=(o|0)/(c[(c[e>>2]|0)+12>>2]|0)|0;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[g>>2]|0))break a;c[h>>2]=(c[k>>2]|0)+(c[(c[e>>2]|0)+4>>2]|0);c[c[h>>2]>>2]=c[k>>2];c[(c[h>>2]|0)+4>>2]=(c[h>>2]|0)+32;a[(c[h>>2]|0)+13>>0]=1;a[(c[h>>2]|0)+14>>0]=0;c[(c[h>>2]|0)+16>>2]=c[(c[e>>2]|0)+52>>2];c[(c[e>>2]|0)+52>>2]=c[h>>2];c[k>>2]=(c[k>>2]|0)+(c[(c[e>>2]|0)+12>>2]|0);c[f>>2]=(c[f>>2]|0)+1}}while(0);c[d>>2]=(c[(c[e>>2]|0)+52>>2]|0)!=0&1;o=c[d>>2]|0;i=l;return o|0}function Hu(){return c[77]|0}function Iu(a){a=a|0;var b=0,d=0,e=0,f=0;e=i;i=i+16|0;d=e;f=e+8|0;b=e+4|0;c[f>>2]=a;c[f>>2]=(c[f>>2]|0)+7&-8;c[b>>2]=_Q((c[f>>2]|0)+8|0)|0;a=c[f>>2]|0;if(c[b>>2]|0){f=c[b>>2]|0;c[f>>2]=a;c[f+4>>2]=((a|0)<0)<<31>>31;c[b>>2]=(c[b>>2]|0)+8;f=c[b>>2]|0;i=e;return f|0}else{c[d>>2]=a;Rd(7,27278,d);f=c[b>>2]|0;i=e;return f|0}return 0}function Ju(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b+4|0;d=b;c[e>>2]=a;c[d>>2]=c[e>>2];c[d>>2]=(c[d>>2]|0)+-8;$Q(c[d>>2]|0);i=b;return}function Ku(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;g=h;d=h+16|0;e=h+12|0;f=h+8|0;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[d>>2];c[f>>2]=(c[f>>2]|0)+-8;c[f>>2]=bR(c[f>>2]|0,(c[e>>2]|0)+8|0)|0;if(c[f>>2]|0){a=c[e>>2]|0;g=c[f>>2]|0;c[g>>2]=a;c[g+4>>2]=((a|0)<0)<<31>>31;c[f>>2]=(c[f>>2]|0)+8;g=c[f>>2]|0;i=h;return g|0}else{b=Lu(c[d>>2]|0)|0;a=c[e>>2]|0;c[g>>2]=b;c[g+4>>2]=a;Rd(7,27242,g);g=c[f>>2]|0;i=h;return g|0}return 0}function Lu(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=c[e>>2];c[b>>2]=(c[b>>2]|0)+-8;i=d;return c[c[b>>2]>>2]|0}function Mu(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;i=d;return(c[b>>2]|0)+7&-8|0}function Nu(a){a=a|0;var b=0;b=i;i=i+16|0;c[b>>2]=a;i=b;return 0}function Ou(a){a=a|0;var b=0;b=i;i=i+16|0;c[b>>2]=a;i=b;return}function Pu(a){a=a|0;var b=0,d=0,e=0;d=i;i=i+16|0;e=d+4|0;b=d;c[e>>2]=a;c[b>>2]=Yb[c[e>>2]&255](1612,0)|0;if(!(c[b>>2]|0)){e=c[b>>2]|0;i=d;return e|0}c[c[b>>2]>>2]=-1;e=c[b>>2]|0;i=d;return e|0}function Qu(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;n=o+24|0;m=o+20|0;h=o+16|0;l=o+12|0;j=o+8|0;f=o+4|0;g=o;c[m>>2]=b;c[h>>2]=e;a:do switch(d[40089+(d[c[m>>2]>>0]|0)>>0]|0){case 7:{c[l>>2]=1;while(1){if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&1))break;c[l>>2]=(c[l>>2]|0)+1}c[c[h>>2]>>2]=159;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}case 11:{if((d[(c[m>>2]|0)+1>>0]|0)!=45){c[c[h>>2]>>2]=90;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}c[l>>2]=2;while(1){k=d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0;c[j>>2]=k;if(!((k|0)!=0?(c[j>>2]|0)!=10:0))break;c[l>>2]=(c[l>>2]|0)+1}c[c[h>>2]>>2]=159;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}case 17:{c[c[h>>2]>>2]=22;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 18:{c[c[h>>2]>>2]=23;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 19:{c[c[h>>2]>>2]=1;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 20:{c[c[h>>2]>>2]=89;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 21:{c[c[h>>2]>>2]=91;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 16:{if((d[(c[m>>2]|0)+1>>0]|0)==42?(d[(c[m>>2]|0)+2>>0]|0)!=0:0){c[l>>2]=3;c[j>>2]=d[(c[m>>2]|0)+2>>0];while(1){if((c[j>>2]|0)==42?(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)==47:0)break;k=d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0;c[j>>2]=k;if(!k)break;c[l>>2]=(c[l>>2]|0)+1}if(c[j>>2]|0)c[l>>2]=(c[l>>2]|0)+1;c[c[h>>2]>>2]=159;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}c[c[h>>2]>>2]=92;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 22:{c[c[h>>2]>>2]=93;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 14:{c[c[h>>2]>>2]=79;c[n>>2]=1+((d[(c[m>>2]|0)+1>>0]|0)==61&1);n=c[n>>2]|0;i=o;return n|0}case 12:{m=d[(c[m>>2]|0)+1>>0]|0;c[j>>2]=m;if((m|0)==61){c[c[h>>2]>>2]=81;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}if((c[j>>2]|0)==62){c[c[h>>2]>>2]=78;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}f=c[h>>2]|0;if((c[j>>2]|0)==60){c[f>>2]=87;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}else{c[f>>2]=82;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}}case 13:{m=d[(c[m>>2]|0)+1>>0]|0;c[j>>2]=m;if((m|0)==61){c[c[h>>2]>>2]=83;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}f=c[h>>2]|0;if((c[j>>2]|0)==62){c[f>>2]=88;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}else{c[f>>2]=80;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}}case 15:{f=c[h>>2]|0;if((d[(c[m>>2]|0)+1>>0]|0)!=61){c[f>>2]=160;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}else{c[f>>2]=78;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}}case 10:{f=c[h>>2]|0;if((d[(c[m>>2]|0)+1>>0]|0)!=124){c[f>>2]=86;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}else{c[f>>2]=94;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}}case 23:{c[c[h>>2]>>2]=26;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 24:{c[c[h>>2]>>2]=85;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 25:{c[c[h>>2]>>2]=96;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}case 8:{c[f>>2]=d[c[m>>2]>>0];c[l>>2]=1;while(1){k=d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0;c[j>>2]=k;if(!k)break;if((c[j>>2]|0)==(c[f>>2]|0)){if((d[(c[m>>2]|0)+((c[l>>2]|0)+1)>>0]|0)!=(c[f>>2]|0))break;c[l>>2]=(c[l>>2]|0)+1}c[l>>2]=(c[l>>2]|0)+1}if((c[j>>2]|0)==39){c[c[h>>2]>>2]=97;c[n>>2]=(c[l>>2]|0)+1;n=c[n>>2]|0;i=o;return n|0}f=c[h>>2]|0;if(c[j>>2]|0){c[f>>2]=27;c[n>>2]=(c[l>>2]|0)+1;n=c[n>>2]|0;i=o;return n|0}else{c[f>>2]=160;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}}case 26:{if(d[19267+(d[(c[m>>2]|0)+1>>0]|0)>>0]&4)k=64;else{c[c[h>>2]>>2]=122;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}break}case 3:{k=64;break}case 9:{c[l>>2]=1;c[j>>2]=d[c[m>>2]>>0];while(1){if((c[j>>2]|0)==93)break;k=d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0;c[j>>2]=k;if(!k)break;c[l>>2]=(c[l>>2]|0)+1}c[c[h>>2]>>2]=(c[j>>2]|0)==93?27:160;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}case 6:{c[c[h>>2]>>2]=135;c[l>>2]=1;while(1){f=c[l>>2]|0;if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&4))break;c[l>>2]=f+1}c[n>>2]=f;n=c[n>>2]|0;i=o;return n|0}case 5:case 4:{c[g>>2]=0;c[c[h>>2]>>2]=135;c[l>>2]=1;while(1){b=d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0;c[j>>2]=b;if(!b)break;if(d[19267+(c[j>>2]&255)>>0]&70)c[g>>2]=(c[g>>2]|0)+1;else{if((c[j>>2]|0)==40&(c[g>>2]|0)>0){k=107;break}if((c[j>>2]|0)!=58)break;if((d[(c[m>>2]|0)+((c[l>>2]|0)+1)>>0]|0)!=58)break;c[l>>2]=(c[l>>2]|0)+1}c[l>>2]=(c[l>>2]|0)+1}do if((k|0)==107){while(1){c[l>>2]=(c[l>>2]|0)+1;k=d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0;c[j>>2]=k;if(!k)break;if((c[j>>2]|0)!=41?(d[19267+(c[j>>2]&255)>>0]&1|0)==0:0)k=107;else break}if((c[j>>2]|0)==41){c[l>>2]=(c[l>>2]|0)+1;break}else{c[c[h>>2]>>2]=160;break}}while(0);if(!(c[g>>2]|0))c[c[h>>2]>>2]=160;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}case 1:{c[l>>2]=1;while(1){f=c[l>>2]|0;if((d[40089+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]|0)>1)break;c[l>>2]=f+1}if(d[19267+(d[(c[m>>2]|0)+f>>0]|0)>>0]&70){c[l>>2]=(c[l>>2]|0)+1;break a}c[c[h>>2]>>2]=27;c[n>>2]=Oi(c[m>>2]|0,c[l>>2]|0,c[h>>2]|0)|0;n=c[n>>2]|0;i=o;return n|0}case 0:{if((d[(c[m>>2]|0)+1>>0]|0)==39){c[c[h>>2]>>2]=134;c[l>>2]=2;while(1){f=c[l>>2]|0;if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&8))break;c[l>>2]=f+1}if(!((d[(c[m>>2]|0)+f>>0]|0)==39?((c[l>>2]|0)%2|0|0)==0:0))k=131;b:do if((k|0)==131){c[c[h>>2]>>2]=160;while(1){if(!(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0))break b;if((d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)==39)break b;c[l>>2]=(c[l>>2]|0)+1}}while(0);if(a[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)c[l>>2]=(c[l>>2]|0)+1;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}else k=138;break}case 2:{k=138;break}default:{c[c[h>>2]>>2]=160;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}}while(0);if((k|0)==64){c[c[h>>2]>>2]=132;do if((d[c[m>>2]>>0]|0)==48){if((d[(c[m>>2]|0)+1>>0]|0)!=120?(d[(c[m>>2]|0)+1>>0]|0)!=88:0)break;if(d[19267+(d[(c[m>>2]|0)+2>>0]|0)>>0]&8){c[l>>2]=3;while(1){f=c[l>>2]|0;if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&8))break;c[l>>2]=f+1}c[n>>2]=f;n=c[n>>2]|0;i=o;return n|0}}while(0);c[l>>2]=0;while(1){f=c[l>>2]|0;if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&4))break;c[l>>2]=f+1}if((d[(c[m>>2]|0)+f>>0]|0)==46){c[l>>2]=(c[l>>2]|0)+1;while(1){if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&4))break;c[l>>2]=(c[l>>2]|0)+1}c[c[h>>2]>>2]=133}if(!((d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)!=101?(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)!=69:0))k=82;do if((k|0)==82){if(!(d[19267+(d[(c[m>>2]|0)+((c[l>>2]|0)+1)>>0]|0)>>0]&4)){if((d[(c[m>>2]|0)+((c[l>>2]|0)+1)>>0]|0)!=43?(d[(c[m>>2]|0)+((c[l>>2]|0)+1)>>0]|0)!=45:0)break;if(!(d[19267+(d[(c[m>>2]|0)+((c[l>>2]|0)+2)>>0]|0)>>0]&4))break}c[l>>2]=(c[l>>2]|0)+2;while(1){if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&4))break;c[l>>2]=(c[l>>2]|0)+1}c[c[h>>2]>>2]=133}while(0);while(1){if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&70))break;c[c[h>>2]>>2]=160;c[l>>2]=(c[l>>2]|0)+1}c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}else if((k|0)==138)c[l>>2]=1;while(1){if(!(d[19267+(d[(c[m>>2]|0)+(c[l>>2]|0)>>0]|0)>>0]&70))break;c[l>>2]=(c[l>>2]|0)+1}c[c[h>>2]>>2]=27;c[n>>2]=c[l>>2];n=c[n>>2]|0;i=o;return n|0}function Ru(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+48|0;m=o+32|0;p=o+28|0;j=o+24|0;h=o+20|0;l=o+8|0;k=o+4|0;n=o;c[p>>2]=d;c[j>>2]=e;c[h>>2]=g;c[n>>2]=c[p>>2];if((c[c[n>>2]>>2]|0)<0){c[c[n>>2]>>2]=0;c[(c[n>>2]|0)+4>>2]=-1;b[(c[n>>2]|0)+12>>1]=0;a[(c[n>>2]|0)+12+2>>0]=0}c[l>>2]=c[f>>2];c[l+4>>2]=c[f+4>>2];c[(c[n>>2]|0)+8>>2]=c[h>>2];while(1){c[k>>2]=cv(c[n>>2]|0,c[j>>2]&255)|0;h=c[k>>2]|0;do if((c[k>>2]|0)>976){g=c[n>>2]|0;if((h|0)<=1304){ev(g,(c[k>>2]|0)-977|0);break}else{p=c[j>>2]|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];fv(g,p,m);av(c[n>>2]|0,c[j>>2]&255,l);c[j>>2]=253;break}}else{if((h|0)>435)c[k>>2]=(c[k>>2]|0)+328;dv(c[n>>2]|0,c[k>>2]|0,c[j>>2]|0,l);p=(c[n>>2]|0)+4|0;c[p>>2]=(c[p>>2]|0)+-1;c[j>>2]=253}while(0);if((c[j>>2]|0)==253){h=13;break}if((c[c[n>>2]>>2]|0)<0){h=13;break}}if((h|0)==13){i=o;return}}function Su(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f+8|0;d=f+4|0;e=f;c[g>>2]=a;c[d>>2]=b;c[e>>2]=c[g>>2];while(1){if((c[c[e>>2]>>2]|0)<0)break;$u(c[e>>2]|0)}Qb[c[d>>2]&255](c[e>>2]|0);i=f;return}function Tu(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(!(c[b>>2]|0)){i=e;return}c[d>>2]=c[c[b>>2]>>2];Rf(c[d>>2]|0,c[b>>2]|0);a=c[(c[b>>2]|0)+52>>2]|0;if(c[(c[b>>2]|0)+48>>2]|0)c[(c[(c[b>>2]|0)+48>>2]|0)+52>>2]=a;else c[(c[d>>2]|0)+4>>2]=a;if(c[(c[b>>2]|0)+52>>2]|0)c[(c[(c[b>>2]|0)+52>>2]|0)+48>>2]=c[(c[b>>2]|0)+48>>2];c[(c[b>>2]|0)+40>>2]=-1241070648;c[c[b>>2]>>2]=0;Sf(c[d>>2]|0,c[b>>2]|0);i=e;return}function Uu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=h;return}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0))break;c[g>>2]=(c[e>>2]|0)+8+(c[f>>2]<<4);Vu(c[d>>2]|0,c[(c[g>>2]|0)+4>>2]|0);Wu(c[d>>2]|0,c[(c[g>>2]|0)+8>>2]|0);Sf(c[d>>2]|0,c[c[g>>2]>>2]|0);c[f>>2]=(c[f>>2]|0)+1}Sf(c[d>>2]|0,c[e>>2]|0);i=h;return}function Vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+16|0;d=h+12|0;e=h+8|0;f=h+4|0;g=h;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=h;return}c[g>>2]=c[(c[e>>2]|0)+4>>2];c[f>>2]=0;while(1){a=c[d>>2]|0;if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0))break;Zu(a,c[c[g>>2]>>2]|0);Sf(c[d>>2]|0,c[(c[g>>2]|0)+4>>2]|0);Sf(c[d>>2]|0,c[(c[g>>2]|0)+8>>2]|0);c[f>>2]=(c[f>>2]|0)+1;c[g>>2]=(c[g>>2]|0)+20}Sf(a,c[(c[e>>2]|0)+4>>2]|0);Sf(c[d>>2]|0,c[e>>2]|0);i=h;return}function Wu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;Xu(c[f>>2]|0,c[e>>2]|0,1);i=d;return}function Xu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;while(1){if(!(c[f>>2]|0))break;c[h>>2]=c[(c[f>>2]|0)+52>>2];Vu(c[e>>2]|0,c[c[f>>2]>>2]|0);Yu(c[e>>2]|0,c[(c[f>>2]|0)+32>>2]|0);Zu(c[e>>2]|0,c[(c[f>>2]|0)+36>>2]|0);Vu(c[e>>2]|0,c[(c[f>>2]|0)+40>>2]|0);Zu(c[e>>2]|0,c[(c[f>>2]|0)+44>>2]|0);Vu(c[e>>2]|0,c[(c[f>>2]|0)+48>>2]|0);Zu(c[e>>2]|0,c[(c[f>>2]|0)+60>>2]|0);Zu(c[e>>2]|0,c[(c[f>>2]|0)+64>>2]|0);Uu(c[e>>2]|0,c[(c[f>>2]|0)+68>>2]|0);if(c[g>>2]|0)Sf(c[e>>2]|0,c[f>>2]|0);c[f>>2]=c[h>>2];c[g>>2]=1}i=j;return}function Yu(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[e>>2]=a;c[f>>2]=b;if(!(c[f>>2]|0)){i=j;return}c[h>>2]=(c[f>>2]|0)+8;c[g>>2]=0;while(1){a=c[e>>2]|0;if((c[g>>2]|0)>=(c[c[f>>2]>>2]|0))break;Sf(a,c[(c[h>>2]|0)+4>>2]|0);Sf(c[e>>2]|0,c[(c[h>>2]|0)+8>>2]|0);Sf(c[e>>2]|0,c[(c[h>>2]|0)+12>>2]|0);if((d[(c[h>>2]|0)+36+1>>0]|0)>>>1&1)Sf(c[e>>2]|0,c[(c[h>>2]|0)+64>>2]|0);if((d[(c[h>>2]|0)+36+1>>0]|0)>>>2&1)Vu(c[e>>2]|0,c[(c[h>>2]|0)+64>>2]|0);Qf(c[e>>2]|0,c[(c[h>>2]|0)+16>>2]|0);Wu(c[e>>2]|0,c[(c[h>>2]|0)+20>>2]|0);Zu(c[e>>2]|0,c[(c[h>>2]|0)+48>>2]|0);_u(c[e>>2]|0,c[(c[h>>2]|0)+52>>2]|0);c[g>>2]=(c[g>>2]|0)+1;c[h>>2]=(c[h>>2]|0)+72}Sf(a,c[f>>2]|0);i=j;return}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=f;return}do if(!(c[(c[e>>2]|0)+4>>2]&16384)){Zu(c[d>>2]|0,c[(c[e>>2]|0)+12>>2]|0);Zu(c[d>>2]|0,c[(c[e>>2]|0)+16>>2]|0);if(c[(c[e>>2]|0)+4>>2]&65536)Sf(c[d>>2]|0,c[(c[e>>2]|0)+8>>2]|0);a=c[d>>2]|0;b=(c[e>>2]|0)+20|0;if(c[(c[e>>2]|0)+4>>2]&2048){Wu(a,c[b>>2]|0);break}else{Vu(a,c[b>>2]|0);break}}while(0);if(c[(c[e>>2]|0)+4>>2]&32768){i=f;return}Sf(c[d>>2]|0,c[e>>2]|0);i=f;return}function _u(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(!(c[e>>2]|0)){i=g;return}c[f>>2]=0;while(1){a=c[d>>2]|0;if((c[f>>2]|0)>=(c[(c[e>>2]|0)+4>>2]|0))break;Sf(a,c[(c[c[e>>2]>>2]|0)+(c[f>>2]<<3)>>2]|0);c[f>>2]=(c[f>>2]|0)+1}Sf(a,c[c[e>>2]>>2]|0);Sf(c[d>>2]|0,c[e>>2]|0);i=g;return}function $u(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=b;g=c[f>>2]|0;b=c[g>>2]|0;c[g>>2]=b+-1;c[e>>2]=(c[f>>2]|0)+12+(b<<4);av(c[f>>2]|0,a[(c[e>>2]|0)+2>>0]|0,(c[e>>2]|0)+4|0);i=d;return}function av(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;j=i;i=i+16|0;l=j+8|0;k=j+12|0;g=j+4|0;h=j;c[l>>2]=b;a[k>>0]=e;c[g>>2]=f;c[h>>2]=c[(c[l>>2]|0)+8>>2];do switch(d[k>>0]|0|0){case 208:case 197:case 196:case 163:{Wu(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 175:case 174:{Zu(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 227:case 220:case 211:case 210:case 209:case 206:case 204:case 201:case 189:case 188:case 179:{Vu(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 214:case 213:case 202:case 195:{Yu(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 251:case 198:{Uu(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 242:case 237:case 228:case 226:case 217:case 205:case 203:{Zu(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 222:case 219:case 218:{_u(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 238:case 233:{bv(c[c[h>>2]>>2]|0,c[c[g>>2]>>2]|0);i=j;return}case 235:{_u(c[c[h>>2]>>2]|0,c[(c[g>>2]|0)+4>>2]|0);i=j;return}default:{i=j;return}}while(0)}function bv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;while(1){if(!(c[e>>2]|0))break;c[f>>2]=c[e>>2];c[e>>2]=c[(c[e>>2]|0)+28>>2];Zu(c[d>>2]|0,c[(c[f>>2]|0)+16>>2]|0);Vu(c[d>>2]|0,c[(c[f>>2]|0)+20>>2]|0);Wu(c[d>>2]|0,c[(c[f>>2]|0)+8>>2]|0);_u(c[d>>2]|0,c[(c[f>>2]|0)+24>>2]|0);Sf(c[d>>2]|0,c[f>>2]|0)}i=g;return}function cv(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+32|0;h=p+16|0;q=p+12|0;j=p+21|0;k=p+8|0;n=p+4|0;l=p+20|0;m=p;c[q>>2]=f;a[j>>0]=g;c[n>>2]=e[(c[q>>2]|0)+12+(c[c[q>>2]>>2]<<4)>>1];if((c[n>>2]|0)>=977){c[h>>2]=c[n>>2];q=c[h>>2]|0;i=p;return q|0}while(1){c[k>>2]=b[15538+(c[n>>2]<<1)>>1];if((c[k>>2]|0)==-89){o=4;break}c[k>>2]=(c[k>>2]|0)+(d[j>>0]|0);if(!((c[k>>2]|0)<0|(c[k>>2]|0)>=1501)?(d[38518+(c[k>>2]|0)>>0]|0)==(d[j>>0]|0):0){o=15;break}if((d[j>>0]|0)<=0)break;if((d[j>>0]|0)>>>0>=70){o=11;break}q=a[40019+(d[j>>0]|0)>>0]|0;a[l>>0]=q;if(!(q&255)){o=11;break}a[j>>0]=a[l>>0]|0}if((o|0)==4){c[h>>2]=e[16410+(c[n>>2]<<1)>>1];q=c[h>>2]|0;i=p;return q|0}else if((o|0)==11){c[m>>2]=(c[k>>2]|0)-(d[j>>0]|0)+70;if((c[m>>2]|0)>=0&(c[m>>2]|0)<1501?(d[38518+(c[m>>2]|0)>>0]|0)==70:0){c[h>>2]=e[12532+(c[m>>2]<<1)>>1];q=c[h>>2]|0;i=p;return q|0}}else if((o|0)==15){c[h>>2]=e[12532+(c[k>>2]<<1)>>1];q=c[h>>2]|0;i=p;return q|0}c[h>>2]=e[16410+(c[n>>2]<<1)>>1];q=c[h>>2]|0;i=p;return q|0}function dv(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;f=c[h>>2]|0;c[f>>2]=(c[f>>2]|0)+1;f=c[h>>2]|0;if((c[c[h>>2]>>2]|0)>=100){gH(f,c[l>>2]|0);i=n;return}else{c[m>>2]=(c[h>>2]|0)+12+(c[f>>2]<<4);b[c[m>>2]>>1]=c[j>>2];a[(c[m>>2]|0)+2>>0]=c[k>>2];m=(c[m>>2]|0)+4|0;l=c[l>>2]|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];i=n;return}}function ev(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,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;$=i;i=i+256|0;M=$+40|0;L=$+32|0;O=$+24|0;N=$+16|0;R=$+8|0;K=$;U=$+248|0;V=$+244|0;X=$+240|0;W=$+236|0;Y=$+224|0;Z=$+220|0;_=$+216|0;T=$+212|0;I=$+200|0;J=$+188|0;j=$+168|0;k=$+164|0;y=$+160|0;r=$+156|0;o=$+152|0;P=$+144|0;z=$+136|0;p=$+132|0;l=$+128|0;A=$+124|0;q=$+120|0;n=$+116|0;v=$+112|0;w=$+108|0;B=$+104|0;C=$+100|0;E=$+96|0;D=$+92|0;F=$+88|0;G=$+84|0;H=$+80|0;s=$+76|0;t=$+72|0;u=$+68|0;x=$+64|0;Q=$+60|0;m=$+56|0;h=$+48|0;c[U>>2]=f;c[V>>2]=g;c[T>>2]=c[(c[U>>2]|0)+8>>2];c[Z>>2]=(c[U>>2]|0)+12+(c[c[U>>2]>>2]<<4);c[Y>>2]=c[1265];c[Y+4>>2]=c[1266];c[Y+8>>2]=c[1267];a:do switch(c[V>>2]|0){case 6:{a[(c[T>>2]|0)+453>>0]=1;break}case 7:{a[(c[T>>2]|0)+453>>0]=2;break}case 8:{gv(c[T>>2]|0);break}case 9:{hv(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);break}case 13:{c[Y>>2]=7;break}case 117:case 115:case 16:case 15:case 14:{c[Y>>2]=d[(c[Z>>2]|0)+2>>0];break}case 18:case 17:{iv(c[T>>2]|0);break}case 19:{jv(c[T>>2]|0);break}case 22:{kv(c[T>>2]|0,0,(c[Z>>2]|0)+4|0);break}case 23:{kv(c[T>>2]|0,1,(c[Z>>2]|0)+4|0);break}case 24:{kv(c[T>>2]|0,2,(c[Z>>2]|0)+4|0);break}case 26:{lv(c[T>>2]|0,(c[Z>>2]|0)+-16+4|0,(c[Z>>2]|0)+4|0,c[(c[Z>>2]|0)+-64+4>>2]|0,0,0,c[(c[Z>>2]|0)+-32+4>>2]|0);break}case 27:{mv(c[T>>2]|0);T=(c[Z>>2]|0)+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];break}case 247:case 222:case 219:case 124:case 108:case 97:case 85:case 83:case 81:case 68:case 34:case 31:case 28:{c[Y>>2]=0;break}case 248:case 223:case 220:case 107:case 84:case 69:case 30:case 29:{c[Y>>2]=1;break}case 32:{nv(c[T>>2]|0,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+-16+4|0,c[(c[Z>>2]|0)+4>>2]&255,0);break}case 33:{nv(c[T>>2]|0,0,0,0,c[(c[Z>>2]|0)+4>>2]|0);Wu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 35:{if((c[(c[Z>>2]|0)+4+4>>2]|0)==5?(zd(c[(c[Z>>2]|0)+4>>2]|0,25592,5)|0)==0:0){c[Y>>2]=96;break a}c[Y>>2]=0;T=c[T>>2]|0;S=c[(c[Z>>2]|0)+4>>2]|0;c[K>>2]=c[(c[Z>>2]|0)+4+4>>2];c[K+4>>2]=S;Ah(T,27365,K);break}case 38:{c[Y>>2]=c[(c[Z>>2]|0)+-32+4>>2];c[Y+4>>2]=(c[(c[T>>2]|0)+508>>2]|0)-(c[(c[Z>>2]|0)+-32+4>>2]|0)+(c[(c[T>>2]|0)+508+4>>2]|0);break}case 39:{ov(c[T>>2]|0,(c[Z>>2]|0)+4|0);S=(c[Z>>2]|0)+4|0;c[Y>>2]=c[S>>2];c[Y+4>>2]=c[S+4>>2];c[(c[T>>2]|0)+328+4>>2]=0;break}case 280:case 264:case 263:case 262:case 261:case 260:case 259:case 258:case 257:case 151:case 142:case 131:case 130:case 48:case 45:case 42:case 41:case 40:{T=(c[Z>>2]|0)+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];break}case 44:{pv(c[T>>2]|0,(c[Z>>2]|0)+4|0);break}case 46:{c[Y>>2]=c[(c[Z>>2]|0)+-48+4>>2];c[Y+4>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0)-(c[(c[Z>>2]|0)+-48+4>>2]|0);break}case 47:{c[Y>>2]=c[(c[Z>>2]|0)+-80+4>>2];c[Y+4>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0)-(c[(c[Z>>2]|0)+-80+4>>2]|0);break}case 49:{c[Y>>2]=c[(c[Z>>2]|0)+-16+4>>2];c[Y+4>>2]=(c[(c[Z>>2]|0)+4+4>>2]|0)+((c[(c[Z>>2]|0)+4>>2]|0)-(c[(c[Z>>2]|0)+-16+4>>2]|0));break}case 92:case 54:{T=(c[T>>2]|0)+328|0;S=(c[Z>>2]|0)+4|0;c[T>>2]=c[S>>2];c[T+4>>2]=c[S+4>>2];break}case 57:case 55:{qv(c[T>>2]|0,(c[Z>>2]|0)+4|0);break}case 56:{qv(c[T>>2]|0,(c[Z>>2]|0)+-16+4|0);break}case 58:{c[I>>2]=rv(c[T>>2]|0,155,c[(c[Z>>2]|0)+4>>2]|0,0,0)|0;c[I+4>>2]=c[(c[Z>>2]|0)+-16+4>>2];c[I+8>>2]=c[(c[Z>>2]|0)+4+8>>2];qv(c[T>>2]|0,I);break}case 59:{sv(J,c[T>>2]|0,97,(c[Z>>2]|0)+4|0);qv(c[T>>2]|0,J);break}case 61:{tv(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 62:{uv(c[T>>2]|0,0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0);break}case 63:{vv(c[T>>2]|0,0,0,0,0,c[(c[Z>>2]|0)+4>>2]|0,0,0,0,0)|0;break}case 64:{wv(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);break}case 65:{xv(c[T>>2]|0,0,(c[Z>>2]|0)+-32+4|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 66:{yv(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 67:{zv(c[T>>2]|0,(c[Z>>2]|0)+4|0);break}case 70:{c[Y>>2]=0;break}case 71:{c[Y>>2]=c[(c[Z>>2]|0)+-16+4>>2]&~c[(c[Z>>2]|0)+4+4>>2]|c[(c[Z>>2]|0)+4>>2];break}case 73:case 72:{c[Y>>2]=0;c[Y+4>>2]=0;break}case 74:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];c[Y+4>>2]=255;break}case 75:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2]<<8;c[Y+4>>2]=65280;break}case 76:{c[Y>>2]=7;break}case 77:{c[Y>>2]=8;break}case 78:{c[Y>>2]=9;break}case 79:{c[Y>>2]=6;break}case 80:{c[Y>>2]=0;break}case 178:case 103:case 102:case 100:case 98:case 82:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];break}case 86:{c[Y+4>>2]=0;c[Y>>2]=0;break}case 87:{T=(c[Z>>2]|0)+-16+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];break}case 90:{c[(c[T>>2]|0)+328+4>>2]=0;break}case 93:{uv(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,0);break}case 94:{vv(c[T>>2]|0,0,0,0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,0,0,0,0)|0;break}case 95:{wv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0);break}case 96:{xv(c[T>>2]|0,c[(c[Z>>2]|0)+-96+4>>2]|0,(c[Z>>2]|0)+-48+4|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);yv(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 101:case 99:{c[Y>>2]=10;break}case 104:{c[Y>>2]=4;break}case 179:case 105:{c[Y>>2]=5;break}case 106:{Av(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,0,c[(c[Z>>2]|0)+-16+4>>2]|0);break}case 109:{Bv(c[T>>2]|0,(c[Z>>2]|0)+-128+4|0,(c[Z>>2]|0)+-64+4|0,(c[Z>>2]|0)+-48+4|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-112+4>>2]|0,c[(c[Z>>2]|0)+-80+4>>2]|0);break}case 110:{Av(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,1,c[(c[Z>>2]|0)+-16+4>>2]|0);break}case 111:{c[j>>2]=c[1268];c[j+4>>2]=c[1269];c[j+8>>2]=c[1270];c[j+12>>2]=c[1271];c[j+16>>2]=c[1272];Cv(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,j)|0;Wu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 112:{c[k>>2]=c[(c[Z>>2]|0)+4>>2];if(c[k>>2]|0){c[(c[k>>2]|0)+68>>2]=c[(c[Z>>2]|0)+-16+4>>2];Dv(c[T>>2]|0,c[k>>2]|0)}else Uu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);c[Y>>2]=c[k>>2];break}case 119:case 113:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];break}case 114:{c[y>>2]=c[(c[Z>>2]|0)+4>>2];c[r>>2]=c[(c[Z>>2]|0)+-32+4>>2];if((c[y>>2]|0)!=0?(c[(c[y>>2]|0)+52>>2]|0)!=0:0){c[P+4>>2]=0;Dv(c[T>>2]|0,c[y>>2]|0);c[o>>2]=Ev(c[T>>2]|0,0,0,0,P,c[y>>2]|0,0,0)|0;c[y>>2]=Fv(c[T>>2]|0,0,c[o>>2]|0,0,0,0,0,0,0,0)|0}if(c[y>>2]|0){a[(c[y>>2]|0)+4>>0]=c[(c[Z>>2]|0)+-16+4>>2];c[(c[y>>2]|0)+52>>2]=c[r>>2];if(c[r>>2]|0){S=(c[r>>2]|0)+6|0;b[S>>1]=e[S>>1]&-513}S=(c[y>>2]|0)+6|0;b[S>>1]=e[S>>1]&-513;if((c[(c[Z>>2]|0)+-16+4>>2]|0)!=116)a[(c[T>>2]|0)+22>>0]=1}else Wu(c[c[T>>2]>>2]|0,c[r>>2]|0);c[Y>>2]=c[y>>2];break}case 116:{c[Y>>2]=116;break}case 118:{c[Y>>2]=Fv(c[T>>2]|0,c[(c[Z>>2]|0)+-96+4>>2]|0,c[(c[Z>>2]|0)+-80+4>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+-112+4>>2]&65535,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+4+4>>2]|0)|0;break}case 120:{c[Y>>2]=Fv(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,0,0,0,0,0,256,0,0)|0;break}case 121:{c[p>>2]=c[(c[Z>>2]|0)+-64+4>>2];c[z>>2]=Fv(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,0,0,0,0,0,768,0,0)|0;if(c[p>>2]|0){T=(c[p>>2]|0)+6|0;b[T>>1]=e[T>>1]&-513}if(c[z>>2]|0){a[(c[z>>2]|0)+4>>0]=116;c[p>>2]=c[(c[Z>>2]|0)+-64+4>>2];c[(c[z>>2]|0)+52>>2]=c[p>>2];c[Y>>2]=c[z>>2];break a}else{c[Y>>2]=c[p>>2];break a}}case 122:{c[Y>>2]=1;break}case 123: +{c[Y>>2]=2;break}case 244:case 125:{c[Y>>2]=c[(c[Z>>2]|0)+-16+4>>2];break}case 243:case 237:case 162:case 155:case 126:{c[Y>>2]=0;break}case 127:{c[Y>>2]=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0)|0;if((c[(c[Z>>2]|0)+4+4>>2]|0)>>>0>0)Hv(c[T>>2]|0,c[Y>>2]|0,(c[Z>>2]|0)+4|0,1);Iv(c[T>>2]|0,c[Y>>2]|0,(c[Z>>2]|0)+-16+4|0);break}case 128:{c[l>>2]=Jv(c[c[T>>2]>>2]|0,158,0)|0;c[Y>>2]=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[l>>2]|0)|0;break}case 129:{c[A>>2]=rv(c[T>>2]|0,158,0,0,(c[Z>>2]|0)+4|0)|0;c[q>>2]=rv(c[T>>2]|0,27,0,0,(c[Z>>2]|0)+-32+4|0)|0;c[n>>2]=rv(c[T>>2]|0,122,c[q>>2]|0,c[A>>2]|0,0)|0;c[Y>>2]=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,c[n>>2]|0)|0;break}case 132:{c[Y+4>>2]=0;break}case 133:{c[Y>>2]=ph(c[c[T>>2]>>2]|0,80,0)|0;break}case 134:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];Kv(c[Y>>2]|0);break}case 135:{c[Y>>2]=c[(c[Z>>2]|0)+-16+4>>2];if((c[Y>>2]|0)!=0?(c[c[Y>>2]>>2]|0)>0:0)a[(c[Y>>2]|0)+8+(((c[c[Y>>2]>>2]|0)-1|0)*72|0)+36>>0]=c[(c[Z>>2]|0)+4>>2];break}case 136:{c[Y>>2]=0;break}case 137:{c[Y>>2]=Ev(c[T>>2]|0,c[(c[Z>>2]|0)+-96+4>>2]|0,(c[Z>>2]|0)+-80+4|0,(c[Z>>2]|0)+-64+4|0,(c[Z>>2]|0)+-48+4|0,0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;Lv(c[T>>2]|0,c[Y>>2]|0,(c[Z>>2]|0)+-32+4|0);break}case 138:{c[Y>>2]=Ev(c[T>>2]|0,c[(c[Z>>2]|0)+-128+4>>2]|0,(c[Z>>2]|0)+-112+4|0,(c[Z>>2]|0)+-96+4|0,(c[Z>>2]|0)+-32+4|0,0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;Mv(c[T>>2]|0,c[Y>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0);break}case 139:{c[Y>>2]=Ev(c[T>>2]|0,c[(c[Z>>2]|0)+-96+4>>2]|0,0,0,(c[Z>>2]|0)+-32+4|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 140:{if((((c[(c[Z>>2]|0)+-96+4>>2]|0)==0?(c[(c[Z>>2]|0)+-32+4+4>>2]|0)==0:0)?(c[(c[Z>>2]|0)+-16+4>>2]|0)==0:0)?(c[(c[Z>>2]|0)+4>>2]|0)==0:0){c[Y>>2]=c[(c[Z>>2]|0)+-64+4>>2];break a}if((c[c[(c[Z>>2]|0)+-64+4>>2]>>2]|0)!=1){Kv(c[(c[Z>>2]|0)+-64+4>>2]|0);c[B>>2]=Fv(c[T>>2]|0,0,c[(c[Z>>2]|0)+-64+4>>2]|0,0,0,0,0,1024,0,0)|0;c[Y>>2]=Ev(c[T>>2]|0,c[(c[Z>>2]|0)+-96+4>>2]|0,0,0,(c[Z>>2]|0)+-32+4|0,c[B>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break a}c[Y>>2]=Ev(c[T>>2]|0,c[(c[Z>>2]|0)+-96+4>>2]|0,0,0,(c[Z>>2]|0)+-32+4|0,0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;if(c[Y>>2]|0){c[v>>2]=(c[Y>>2]|0)+8+(((c[c[Y>>2]>>2]|0)-1|0)*72|0);c[w>>2]=(c[(c[Z>>2]|0)+-64+4>>2]|0)+8;c[(c[v>>2]|0)+8>>2]=c[(c[w>>2]|0)+8>>2];c[(c[v>>2]|0)+4>>2]=c[(c[w>>2]|0)+4>>2];c[(c[v>>2]|0)+20>>2]=c[(c[w>>2]|0)+20>>2];c[(c[w>>2]|0)+4>>2]=0;c[(c[w>>2]|0)+8>>2]=0;c[(c[w>>2]|0)+20>>2]=0}Yu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0);break}case 150:case 141:{c[Y>>2]=0;c[Y+4>>2]=0;break}case 143:{c[Y>>2]=Nv(c[c[T>>2]>>2]|0,0,(c[Z>>2]|0)+-16+4|0,(c[Z>>2]|0)+4|0)|0;break}case 144:{c[Y>>2]=1;break}case 145:{c[Y>>2]=Ov(c[T>>2]|0,(c[Z>>2]|0)+-16+4|0,0,0)|0;break}case 146:{c[Y>>2]=Ov(c[T>>2]|0,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+-16+4|0,0)|0;break}case 147:{c[Y>>2]=Ov(c[T>>2]|0,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+-16+4|0)|0;break}case 234:case 232:case 172:case 165:case 148:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];break}case 235:case 233:case 171:case 164:case 149:{c[Y>>2]=0;break}case 152:{c[Y>>2]=0;c[Y+4>>2]=1;break}case 181:case 153:{c[Y>>2]=c[(c[Z>>2]|0)+-16+4>>2];break}case 180:case 154:{c[Y>>2]=0;break}case 236:case 163:case 156:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];break}case 157:{c[Y>>2]=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0)|0;Pv(c[Y>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 158:{c[Y>>2]=Gv(c[T>>2]|0,0,c[(c[Z>>2]|0)+-16+4>>2]|0)|0;Pv(c[Y>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 159:{c[Y>>2]=0;break}case 160:{c[Y>>2]=1;break}case 161:{c[Y>>2]=-1;break}case 166:{c[Y>>2]=0;c[Y+4>>2]=0;break}case 167:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];c[Y+4>>2]=0;break}case 168:{c[Y>>2]=c[(c[Z>>2]|0)+-32+4>>2];c[Y+4>>2]=c[(c[Z>>2]|0)+4>>2];break}case 169:{c[Y+4>>2]=c[(c[Z>>2]|0)+-32+4>>2];c[Y>>2]=c[(c[Z>>2]|0)+4>>2];break}case 170:{Qv(c[T>>2]|0,c[(c[Z>>2]|0)+-80+4>>2]|0,1);Lv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,(c[Z>>2]|0)+-16+4|0);Rv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 173:{Qv(c[T>>2]|0,c[(c[Z>>2]|0)+-112+4>>2]|0,1);Lv(c[T>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0,(c[Z>>2]|0)+-48+4|0);Sv(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,27392);Tv(c[T>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-80+4>>2]|0);break}case 174:{c[Y>>2]=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;Hv(c[T>>2]|0,c[Y>>2]|0,(c[Z>>2]|0)+-32+4|0,1);break}case 175:{c[Y>>2]=Gv(c[T>>2]|0,0,c[(c[Z>>2]|0)+4>>2]|0)|0;Hv(c[T>>2]|0,c[Y>>2]|0,(c[Z>>2]|0)+-32+4|0,1);break}case 176:{Qv(c[T>>2]|0,c[(c[Z>>2]|0)+-80+4>>2]|0,1);Uv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0);break}case 177:{Qv(c[T>>2]|0,c[(c[Z>>2]|0)+-96+4>>2]|0,1);Uv(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+-80+4>>2]|0);break}case 182:{c[Y>>2]=Vv(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,(c[Z>>2]|0)+4|0)|0;break}case 183:{c[Y>>2]=Vv(c[c[T>>2]>>2]|0,0,(c[Z>>2]|0)+4|0)|0;break}case 184:{T=(c[Z>>2]|0)+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];c[Y+8>>2]=c[T+8>>2];break}case 185:{c[Y>>2]=c[(c[Z>>2]|0)+-16+4>>2];Wv(Y,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0);break}case 192:case 191:case 186:{sv(Y,c[T>>2]|0,d[(c[Z>>2]|0)+2>>0]|0,(c[Z>>2]|0)+4|0);break}case 188:case 187:{sv(Y,c[T>>2]|0,27,(c[Z>>2]|0)+4|0);break}case 189:{c[C>>2]=rv(c[T>>2]|0,27,0,0,(c[Z>>2]|0)+-32+4|0)|0;c[E>>2]=rv(c[T>>2]|0,27,0,0,(c[Z>>2]|0)+4|0)|0;c[Y>>2]=rv(c[T>>2]|0,122,c[C>>2]|0,c[E>>2]|0,0)|0;Wv(Y,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0);break}case 190:{c[D>>2]=rv(c[T>>2]|0,27,0,0,(c[Z>>2]|0)+-64+4|0)|0;c[F>>2]=rv(c[T>>2]|0,27,0,0,(c[Z>>2]|0)+-32+4|0)|0;c[G>>2]=rv(c[T>>2]|0,27,0,0,(c[Z>>2]|0)+4|0)|0;c[H>>2]=rv(c[T>>2]|0,122,c[F>>2]|0,c[G>>2]|0,0)|0;c[Y>>2]=rv(c[T>>2]|0,122,c[D>>2]|0,c[H>>2]|0,0)|0;Wv(Y,(c[Z>>2]|0)+-64+4|0,(c[Z>>2]|0)+4|0);break}case 193:{do if(((c[(c[Z>>2]|0)+4+4>>2]|0)>>>0>=2?(a[c[(c[Z>>2]|0)+4>>2]>>0]|0)==35:0)?(d[19267+(d[(c[(c[Z>>2]|0)+4>>2]|0)+1>>0]|0)>>0]&4|0)!=0:0){h=c[T>>2]|0;j=(c[Z>>2]|0)+4|0;if(!(d[(c[T>>2]|0)+18>>0]|0)){c[R>>2]=j;Ah(h,27341,R);c[Y>>2]=0;break}c[Y>>2]=rv(h,157,0,0,j)|0;if(c[Y>>2]|0)Li((c[(c[Z>>2]|0)+4>>2]|0)+1|0,(c[Y>>2]|0)+28|0)|0}else S=161;while(0);if((S|0)==161){sv(Y,c[T>>2]|0,135,(c[Z>>2]|0)+4|0);Xv(c[T>>2]|0,c[Y>>2]|0)}Wv(Y,(c[Z>>2]|0)+4|0,(c[Z>>2]|0)+4|0);break}case 194:{c[Y>>2]=Yv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,(c[Z>>2]|0)+4|0,1)|0;c[Y+4>>2]=c[(c[Z>>2]|0)+-32+4+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 195:{c[Y>>2]=rv(c[T>>2]|0,38,c[(c[Z>>2]|0)+-48+4>>2]|0,0,(c[Z>>2]|0)+-16+4|0)|0;Wv(Y,(c[Z>>2]|0)+-80+4|0,(c[Z>>2]|0)+4|0);break}case 196:{if((c[(c[Z>>2]|0)+-16+4>>2]|0)!=0?(c[c[(c[Z>>2]|0)+-16+4>>2]>>2]|0)>(c[(c[c[T>>2]>>2]|0)+88+24>>2]|0):0){S=c[T>>2]|0;c[N>>2]=(c[Z>>2]|0)+-64+4;Ah(S,27401,N)}c[Y>>2]=Zv(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,(c[Z>>2]|0)+-64+4|0)|0;Wv(Y,(c[Z>>2]|0)+-64+4|0,(c[Z>>2]|0)+4|0);if((c[(c[Z>>2]|0)+-32+4>>2]|0)==1?(c[Y>>2]|0)!=0:0){T=(c[Y>>2]|0)+4|0;c[T>>2]=c[T>>2]|16}break}case 197:{c[Y>>2]=Zv(c[T>>2]|0,0,(c[Z>>2]|0)+-48+4|0)|0;Wv(Y,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+4|0);break}case 198:{c[Y>>2]=Zv(c[T>>2]|0,0,(c[Z>>2]|0)+4|0)|0;Wv(Y,(c[Z>>2]|0)+4|0,(c[Z>>2]|0)+4|0);break}case 206:case 205:case 204:case 203:case 202:case 201:case 200:case 199:{_v(Y,c[T>>2]|0,d[(c[Z>>2]|0)+-16+2>>0]|0,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0);break}case 207:{T=(c[Z>>2]|0)+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];c[Y+8>>2]=0;break}case 208:{T=(c[Z>>2]|0)+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];c[Y+8>>2]=1;break}case 209:{c[s>>2]=Gv(c[T>>2]|0,0,c[(c[Z>>2]|0)+4>>2]|0)|0;c[s>>2]=Gv(c[T>>2]|0,c[s>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0)|0;c[Y>>2]=Zv(c[T>>2]|0,c[s>>2]|0,(c[Z>>2]|0)+-16+4|0)|0;$v(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4+8>>2]|0,Y);c[Y+4>>2]=c[(c[Z>>2]|0)+-32+4+4>>2];c[Y+8>>2]=c[(c[Z>>2]|0)+4+8>>2];if(c[Y>>2]|0){T=(c[Y>>2]|0)+4|0;c[T>>2]=c[T>>2]|128}break}case 210:{c[t>>2]=Gv(c[T>>2]|0,0,c[(c[Z>>2]|0)+-32+4>>2]|0)|0;c[t>>2]=Gv(c[T>>2]|0,c[t>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0)|0;c[t>>2]=Gv(c[T>>2]|0,c[t>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;c[Y>>2]=Zv(c[T>>2]|0,c[t>>2]|0,(c[Z>>2]|0)+-48+4|0)|0;$v(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4+8>>2]|0,Y);c[Y+4>>2]=c[(c[Z>>2]|0)+-64+4+4>>2];c[Y+8>>2]=c[(c[Z>>2]|0)+4+8>>2];if(c[Y>>2]|0){T=(c[Y>>2]|0)+4|0;c[T>>2]=c[T>>2]|128}break}case 211:{aw(Y,c[T>>2]|0,d[(c[Z>>2]|0)+2>>0]|0,(c[Z>>2]|0)+-16+4|0,(c[Z>>2]|0)+4|0);break}case 212:{aw(Y,c[T>>2]|0,77,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0);break}case 213:{_v(Y,c[T>>2]|0,73,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0);bw(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[Y>>2]|0,76);break}case 214:{_v(Y,c[T>>2]|0,148,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+4|0);bw(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[Y>>2]|0,77);break}case 216:case 215:{cw(Y,c[T>>2]|0,d[(c[Z>>2]|0)+-16+2>>0]|0,(c[Z>>2]|0)+4|0,(c[Z>>2]|0)+-16+4|0);break}case 217:{cw(Y,c[T>>2]|0,155,(c[Z>>2]|0)+4|0,(c[Z>>2]|0)+-16+4|0);break}case 218:{cw(Y,c[T>>2]|0,156,(c[Z>>2]|0)+4|0,(c[Z>>2]|0)+-16+4|0);break}case 221:{c[u>>2]=Gv(c[T>>2]|0,0,c[(c[Z>>2]|0)+-32+4>>2]|0)|0;c[u>>2]=Gv(c[T>>2]|0,c[u>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;c[Y>>2]=rv(c[T>>2]|0,74,c[(c[Z>>2]|0)+-64+4>>2]|0,0,0)|0;if(c[Y>>2]|0)c[(c[Y>>2]|0)+20>>2]=c[u>>2];else Vu(c[c[T>>2]>>2]|0,c[u>>2]|0);$v(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,Y);c[Y+4>>2]=c[(c[Z>>2]|0)+-64+4+4>>2];c[Y+8>>2]=c[(c[Z>>2]|0)+4+8>>2];break}case 224:{do if(!(c[(c[Z>>2]|0)+-16+4>>2]|0)){c[Y>>2]=rv(c[T>>2]|0,132,0,0,5092+(c[(c[Z>>2]|0)+-48+4>>2]<<3)|0)|0;Zu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0)}else{if((c[c[(c[Z>>2]|0)+-16+4>>2]>>2]|0)==1){c[x>>2]=c[c[(c[(c[Z>>2]|0)+-16+4>>2]|0)+4>>2]>>2];c[c[(c[(c[Z>>2]|0)+-16+4>>2]|0)+4>>2]>>2]=0;Vu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);if(c[x>>2]|0){S=(c[x>>2]|0)+4|0;c[S>>2]=c[S>>2]&-257;S=(c[x>>2]|0)+4|0;c[S>>2]=c[S>>2]|512}c[Y>>2]=rv(c[T>>2]|0,(c[(c[Z>>2]|0)+-48+4>>2]|0)!=0?78:79,c[(c[Z>>2]|0)+-64+4>>2]|0,c[x>>2]|0,0)|0;break}c[Y>>2]=rv(c[T>>2]|0,75,c[(c[Z>>2]|0)+-64+4>>2]|0,0,0)|0;if(c[Y>>2]|0){c[(c[Y>>2]|0)+20>>2]=c[(c[Z>>2]|0)+-16+4>>2];dw(c[T>>2]|0,c[Y>>2]|0)}else Vu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);$v(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,Y)}while(0);c[Y+4>>2]=c[(c[Z>>2]|0)+-64+4+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 225:{c[Y>>2]=rv(c[T>>2]|0,119,0,0,0)|0;if(c[Y>>2]|0){c[(c[Y>>2]|0)+20>>2]=c[(c[Z>>2]|0)+-16+4>>2];S=(c[Y>>2]|0)+4|0;c[S>>2]=c[S>>2]|2099200;dw(c[T>>2]|0,c[Y>>2]|0)}else Wu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);c[Y+4>>2]=c[(c[Z>>2]|0)+-32+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 226:{c[Y>>2]=rv(c[T>>2]|0,75,c[(c[Z>>2]|0)+-64+4>>2]|0,0,0)|0;if(c[Y>>2]|0){c[(c[Y>>2]|0)+20>>2]=c[(c[Z>>2]|0)+-16+4>>2];S=(c[Y>>2]|0)+4|0;c[S>>2]=c[S>>2]|2099200;dw(c[T>>2]|0,c[Y>>2]|0)}else Wu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);$v(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,Y);c[Y+4>>2]=c[(c[Z>>2]|0)+-64+4+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 227:{c[Q>>2]=Nv(c[c[T>>2]>>2]|0,0,(c[Z>>2]|0)+-16+4|0,(c[Z>>2]|0)+4|0)|0;c[Y>>2]=rv(c[T>>2]|0,75,c[(c[Z>>2]|0)+-48+4>>2]|0,0,0)|0;h=c[T>>2]|0;if(c[Y>>2]|0){S=Fv(h,0,c[Q>>2]|0,0,0,0,0,0,0,0)|0;c[(c[Y>>2]|0)+20>>2]=S;S=(c[Y>>2]|0)+4|0;c[S>>2]=c[S>>2]|2099200;dw(c[T>>2]|0,c[Y>>2]|0)}else Yu(c[h>>2]|0,c[Q>>2]|0);$v(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,Y);c[Y+4>>2]=c[(c[Z>>2]|0)+-48+4+4>>2];h=c[Z>>2]|0;if(c[(c[Z>>2]|0)+4>>2]|0)h=(c[(c[Z>>2]|0)+4>>2]|0)+(c[h+4+4>>2]|0)|0;else h=(c[(c[Z>>2]|0)+-16+4>>2]|0)+(c[h+-16+4+4>>2]|0)|0;c[Y+8>>2]=h;break}case 228:{S=rv(c[T>>2]|0,20,0,0,0)|0;c[Y>>2]=S;c[m>>2]=S;if(c[m>>2]|0){c[(c[m>>2]|0)+20>>2]=c[(c[Z>>2]|0)+-16+4>>2];S=(c[m>>2]|0)+4|0;c[S>>2]=c[S>>2]|2099200;dw(c[T>>2]|0,c[m>>2]|0)}else Wu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);c[Y+4>>2]=c[(c[Z>>2]|0)+-48+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 229:{c[Y>>2]=rv(c[T>>2]|0,136,c[(c[Z>>2]|0)+-48+4>>2]|0,0,0)|0;if(c[Y>>2]|0){if(c[(c[Z>>2]|0)+-16+4>>2]|0)h=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0)|0;else h=c[(c[Z>>2]|0)+-32+4>>2]|0;c[(c[Y>>2]|0)+20>>2]=h;dw(c[T>>2]|0,c[Y>>2]|0)}else{Vu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0);Zu(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0)}c[Y+4>>2]=c[(c[Z>>2]|0)+-64+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 230:{c[Y>>2]=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0)|0;c[Y>>2]=Gv(c[T>>2]|0,c[Y>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 231:{c[Y>>2]=Gv(c[T>>2]|0,0,c[(c[Z>>2]|0)+-32+4>>2]|0)|0;c[Y>>2]=Gv(c[T>>2]|0,c[Y>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 238:{c[Y>>2]=Gv(c[T>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 239:{c[Y>>2]=Gv(c[T>>2]|0,0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 240:{vv(c[T>>2]|0,(c[Z>>2]|0)+-112+4|0,(c[Z>>2]|0)+-96+4|0,Nv(c[c[T>>2]>>2]|0,0,(c[Z>>2]|0)+-64+4|0,0)|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+-160+4>>2]|0,(c[Z>>2]|0)+-176+4|0,c[(c[Z>>2]|0)+4>>2]|0,0,c[(c[Z>>2]|0)+-128+4>>2]|0)|0;break}case 292:case 241:{c[Y>>2]=2;break}case 242:{c[Y>>2]=0;break}case 245:{c[Y>>2]=ew(c[T>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0,(c[Z>>2]|0)+-32+4|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 246:{c[Y>>2]=ew(c[T>>2]|0,0,(c[Z>>2]|0)+-32+4|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 249:{fw(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);break}case 251:case 250:{gw(c[T>>2]|0);break}case 252:{hw(c[T>>2]|0,(c[Z>>2]|0)+-16+4|0,(c[Z>>2]|0)+4|0,0,0);break}case 253:{hw(c[T>>2]|0,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0,0);break}case 254:{hw(c[T>>2]|0,(c[Z>>2]|0)+-64+4|0,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+-16+4|0,0);break}case 255:{hw(c[T>>2]|0,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0,1);break}case 256:{hw(c[T>>2]|0,(c[Z>>2]|0)+-64+4|0,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+-16+4|0,1);break}case 265:{c[h>>2]=c[(c[Z>>2]|0)+-48+4>>2];c[h+4>>2]=(c[(c[Z>>2]|0)+4>>2]|0)-(c[(c[Z>>2]|0)+-48+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);iw(c[T>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,h);break}case 266:{jw(c[T>>2]|0,(c[Z>>2]|0)+-112+4|0,(c[Z>>2]|0)+-96+4|0,c[(c[Z>>2]|0)+-80+4>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+-64+4+4>>2]|0,c[(c[Z>>2]|0)+-32+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-160+4>>2]|0,c[(c[Z>>2]|0)+-128+4>>2]|0);h=c[Z>>2]|0;if(!(c[(c[Z>>2]|0)+-96+4+4>>2]|0)){T=h+-112+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];break a}else{T=h+-96+4|0;c[Y>>2]=c[T>>2];c[Y+4>>2]=c[T+4>>2];break a}}case 270:case 267:{c[Y>>2]=35;break}case 268:{c[Y>>2]=31;break}case 269:{c[Y>>2]=49;break}case 272:case 271:{c[Y>>2]=d[(c[Z>>2]|0)+2>>0];c[Y+4>>2]=0;break}case 273:{c[Y>>2]=110;c[Y+4>>2]=c[(c[Z>>2]|0)+4>>2];break}case 297:case 276:{c[Y>>2]=0;break}case 298:case 277:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];break}case 278:{c[(c[(c[(c[Z>>2]|0)+-32+4>>2]|0)+32>>2]|0)+28>>2]=c[(c[Z>>2]|0)+-16+4>>2];c[(c[(c[Z>>2]|0)+-32+4>>2]|0)+32>>2]=c[(c[Z>>2]|0)+-16+4>>2];c[Y>>2]=c[(c[Z>>2]|0)+-32+4>>2];break}case 279:{c[(c[(c[Z>>2]|0)+-16+4>>2]|0)+32>>2]=c[(c[Z>>2]|0)+-16+4>>2];c[Y>>2]=c[(c[Z>>2]|0)+-16+4>>2];break}case 281:{S=(c[Z>>2]|0)+4|0;c[Y>>2]=c[S>>2];c[Y+4>>2]=c[S+4>>2];Ah(c[T>>2]|0,27435,O);break}case 283:{Ah(c[T>>2]|0,27530,L);break}case 284:{Ah(c[T>>2]|0,27614,M);break}case 285:{c[Y>>2]=kw(c[c[T>>2]>>2]|0,(c[Z>>2]|0)+-64+4|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-80+4>>2]&255)|0;break}case 286:{c[Y>>2]=lw(c[c[T>>2]>>2]|0,(c[Z>>2]|0)+-32+4|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-64+4>>2]&255)|0;break}case 287:{c[Y>>2]=mw(c[c[T>>2]>>2]|0,(c[Z>>2]|0)+-32+4|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 288:{c[Y>>2]=nw(c[c[T>>2]>>2]|0,c[(c[Z>>2]|0)+4>>2]|0)|0;break}case 289:{c[Y>>2]=rv(c[T>>2]|0,57,0,0,0)|0;if(c[Y>>2]|0)a[(c[Y>>2]|0)+1>>0]=4;c[Y+4>>2]=c[(c[Z>>2]|0)+-48+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 290:{c[Y>>2]=rv(c[T>>2]|0,57,0,0,(c[Z>>2]|0)+-16+4|0)|0;if(c[Y>>2]|0)a[(c[Y>>2]|0)+1>>0]=c[(c[Z>>2]|0)+-48+4>>2];c[Y+4>>2]=c[(c[Z>>2]|0)+-80+4>>2];c[Y+8>>2]=(c[(c[Z>>2]|0)+4>>2]|0)+(c[(c[Z>>2]|0)+4+4>>2]|0);break}case 291:{c[Y>>2]=1;break}case 293:{c[Y>>2]=3;break}case 294:{ow(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0);break}case 295:{pw(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 296:{qw(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 301:{rw(c[T>>2]|0,0,0);break}case 302:{rw(c[T>>2]|0,(c[Z>>2]|0)+-16+4|0,(c[Z>>2]|0)+4|0);break}case 303:{sw(c[T>>2]|0,0,0);break}case 304:{sw(c[T>>2]|0,(c[Z>>2]|0)+-16+4|0,(c[Z>>2]|0)+4|0);break}case 305:{tw(c[T>>2]|0,c[(c[Z>>2]|0)+-48+4>>2]|0,(c[Z>>2]|0)+4|0);break}case 306:{uw(c[T>>2]|0,(c[Z>>2]|0)+4|0);break}case 307:{mv(c[T>>2]|0);vw(c[T>>2]|0,c[(c[Z>>2]|0)+4>>2]|0);break}case 310:{ww(c[T>>2]|0,0);break}case 311:{ww(c[T>>2]|0,(c[Z>>2]|0)+4|0);break}case 312:{xw(c[T>>2]|0,(c[Z>>2]|0)+-48+4|0,(c[Z>>2]|0)+-32+4|0,(c[Z>>2]|0)+4|0,c[(c[Z>>2]|0)+-64+4>>2]|0);break}case 315:{yw(c[T>>2]|0);break}case 319:case 318:case 317:{zw(c[T>>2]|0,(c[Z>>2]|0)+4|0);break}case 323:{c[Y>>2]=0;break}case 325:case 324:{c[Y>>2]=c[(c[Z>>2]|0)+4>>2];break}case 326:{c[Y>>2]=Aw(c[T>>2]|0,0,(c[Z>>2]|0)+-80+4|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0)|0;break}case 327:{c[Y>>2]=Aw(c[T>>2]|0,c[(c[Z>>2]|0)+-112+4>>2]|0,(c[Z>>2]|0)+-80+4|0,c[(c[Z>>2]|0)+-64+4>>2]|0,c[(c[Z>>2]|0)+-16+4>>2]|0)|0;break}default:{}}while(0);c[X>>2]=d[27699+(c[V>>2]<<1)>>0];c[_>>2]=d[27699+(c[V>>2]<<1)+1>>0];V=c[U>>2]|0;c[V>>2]=(c[V>>2]|0)-(c[_>>2]|0);c[W>>2]=Bw(e[(c[Z>>2]|0)+(0-(c[_>>2]|0)<<4)>>1]|0,c[X>>2]&255)|0;if((c[W>>2]|0)>976){Cw(c[U>>2]|0);i=$;return}if((c[W>>2]|0)>435)c[W>>2]=(c[W>>2]|0)+328;h=c[U>>2]|0;if(c[_>>2]|0){c[h>>2]=(c[h>>2]|0)+1;c[Z>>2]=(c[Z>>2]|0)+(0-((c[_>>2]|0)-1)<<4);b[c[Z>>2]>>1]=c[W>>2];a[(c[Z>>2]|0)+2>>0]=c[X>>2];_=(c[Z>>2]|0)+4|0;c[_>>2]=c[Y>>2];c[_+4>>2]=c[Y+4>>2];c[_+8>>2]=c[Y+8>>2];i=$;return}else{dv(h,c[W>>2]|0,c[X>>2]|0,Y);i=$;return}}function fv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e;f=e+12|0;g=e+4|0;c[f>>2]=a;c[e+8>>2]=b;c[g>>2]=c[(c[f>>2]|0)+8>>2];a=c[g>>2]|0;c[h>>2]=d;Ah(a,27341,h);c[(c[f>>2]|0)+8>>2]=c[g>>2];i=e;return}function gv(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+24|0;f=m+20|0;k=m+16|0;h=m+12|0;g=m+8|0;l=m+4|0;j=m;c[e>>2]=b;c[f>>2]=c[c[e>>2]>>2];if(a[(c[e>>2]|0)+18>>0]|0){i=m;return}if((d[(c[f>>2]|0)+65>>0]|0)==0?(c[(c[e>>2]|0)+68>>2]|0)==0:0){c[k>>2]=Pw(c[e>>2]|0)|0;do if(c[k>>2]|0){do{}while((mA(c[k>>2]|0,61)|0)!=0);Yw(c[k>>2]|0,21)|0;if(!(d[(c[f>>2]|0)+65>>0]|0)){if((c[(c[e>>2]|0)+340>>2]|0)==0?(c[(c[e>>2]|0)+324>>2]|0)==0:0)break;Fz(c[k>>2]|0,0);c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0))break;if(((c[(c[e>>2]|0)+340>>2]&1<>2]|0)!=0|0)!=0?(Hh(c[k>>2]|0,c[h>>2]|0),Eh(c[k>>2]|0,2,c[h>>2]|0,(c[(c[e>>2]|0)+336>>2]&1<>2]|0)!=0&1,c[(c[e>>2]|0)+344+(c[h>>2]<<2)>>2]|0,c[(c[(c[(c[f>>2]|0)+16>>2]|0)+(c[h>>2]<<4)+12>>2]|0)+4>>2]|0)|0,(d[(c[f>>2]|0)+140+5>>0]|0)==0):0)Fh(c[k>>2]|0,1);c[h>>2]=(c[h>>2]|0)+1}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[e>>2]|0)+456>>2]|0))break;c[l>>2]=Ax(c[f>>2]|0,c[(c[(c[e>>2]|0)+524>>2]|0)+(c[g>>2]<<2)>>2]|0)|0;Uw(c[k>>2]|0,149,0,0,0,c[l>>2]|0,-10)|0;c[g>>2]=(c[g>>2]|0)+1}c[(c[e>>2]|0)+456>>2]=0;eH(c[e>>2]|0);fH(c[e>>2]|0);a:do if(c[(c[e>>2]|0)+324>>2]|0){c[j>>2]=c[(c[e>>2]|0)+324>>2];a[(c[e>>2]|0)+23>>0]=0;c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[c[j>>2]>>2]|0))break a;xA(c[e>>2]|0,c[(c[(c[j>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)>>2]|0,c[(c[(c[j>>2]|0)+4>>2]|0)+((c[g>>2]|0)*20|0)+16>>2]|0);c[g>>2]=(c[g>>2]|0)+1}}while(0);Ez(c[k>>2]|0,1)|0}}while(0);if(((c[k>>2]|0)!=0?(c[(c[e>>2]|0)+68>>2]|0)==0:0)?(a[(c[f>>2]|0)+65>>0]|0)==0:0){if((c[(c[e>>2]|0)+412>>2]|0)!=0?(c[(c[e>>2]|0)+72>>2]|0)==0:0)c[(c[e>>2]|0)+72>>2]=1;Jh(c[k>>2]|0,c[e>>2]|0);c[(c[e>>2]|0)+12>>2]=101;i=m;return}c[(c[e>>2]|0)+12>>2]=1;i=m;return}if(c[(c[e>>2]|0)+12>>2]|0){i=m;return}c[(c[e>>2]|0)+12>>2]=1;i=m;return}function hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;d=j+16|0;e=j+12|0;f=j+8|0;h=j+4|0;g=j;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[c[d>>2]>>2];if(Mw(c[d>>2]|0,22,38426,0,0)|0){i=j;return}c[h>>2]=Pw(c[d>>2]|0)|0;if(!(c[h>>2]|0)){i=j;return}a:do if((c[e>>2]|0)!=7){c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0))break a;Rw(c[h>>2]|0,2,c[g>>2]|0,((c[e>>2]|0)==9&1)+1|0)|0;Hh(c[h>>2]|0,c[g>>2]|0);c[g>>2]=(c[g>>2]|0)+1}}while(0);Yw(c[h>>2]|0,1)|0;i=j;return}function iv(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(Mw(c[b>>2]|0,22,38449,0,0)|0){i=e;return}c[d>>2]=Pw(c[b>>2]|0)|0;if(!(c[d>>2]|0)){i=e;return}xz(c[d>>2]|0,1,1)|0;i=e;return}function jv(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;if(Mw(c[b>>2]|0,22,38440,0,0)|0){i=e;return}c[d>>2]=Pw(c[b>>2]|0)|0;if(!(c[d>>2]|0)){i=e;return}Rw(c[d>>2]|0,1,1,1)|0;i=e;return}function kv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+16|0;f=j+12|0;k=j+8|0;h=j+4|0;g=j;c[e>>2]=a;c[f>>2]=b;c[k>>2]=d;c[h>>2]=Dw(c[c[e>>2]>>2]|0,c[k>>2]|0)|0;if(!(c[h>>2]|0)){i=j;return}c[g>>2]=Pw(c[e>>2]|0)|0;if((c[g>>2]|0)!=0?(Mw(c[e>>2]|0,32,c[6348+(c[f>>2]<<2)>>2]|0,c[h>>2]|0,0)|0)==0:0){Uw(c[g>>2]|0,0,c[f>>2]|0,0,0,c[h>>2]|0,-1)|0;i=j;return}Sf(c[c[e>>2]>>2]|0,c[h>>2]|0);i=j;return}function lv(e,f,g,h,j,k,l){e=e|0;f=f|0;g=g|0;h=h|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=i;i=i+112|0;t=J+16|0;G=J+8|0;s=J;w=J+96|0;m=J+92|0;n=J+88|0;o=J+84|0;x=J+80|0;y=J+76|0;z=J+72|0;r=J+68|0;H=J+64|0;A=J+60|0;F=J+56|0;I=J+52|0;B=J+48|0;u=J+44|0;v=J+40|0;p=J+36|0;q=J+32|0;C=J+28|0;D=J+24|0;E=J+20|0;c[w>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[x>>2]=j;c[y>>2]=k;c[z>>2]=l;c[H>>2]=0;c[A>>2]=c[c[w>>2]>>2];if((d[(c[A>>2]|0)+140+5>>0]|0)!=0?(c[(c[A>>2]|0)+140>>2]|0)==1:0){c[I>>2]=d[(c[A>>2]|0)+140+4>>0];c[H>>2]=nh(c[A>>2]|0,(c[I>>2]|0)==1?20769:20788)|0;c[B>>2]=c[m>>2]}else{c[I>>2]=tz(c[w>>2]|0,c[m>>2]|0,c[n>>2]|0,B)|0;if((c[I>>2]|0)<0){i=J;return}if((c[o>>2]|0)!=0?(c[I>>2]|0)!=1?(c[(c[n>>2]|0)+4>>2]|0)>>>0>0:0:0){Ah(c[w>>2]|0,38316,s);i=J;return}if(c[o>>2]|0)c[I>>2]=1;c[H>>2]=Dw(c[A>>2]|0,c[B>>2]|0)|0}s=(c[w>>2]|0)+500|0;e=c[B>>2]|0;c[s>>2]=c[e>>2];c[s+4>>2]=c[e+4>>2];if(!(c[H>>2]|0)){i=J;return}a:do if(!(yx(c[w>>2]|0,c[H>>2]|0)|0)){if((d[(c[A>>2]|0)+140+4>>0]|0)==1)c[o>>2]=1;c[u>>2]=c[(c[(c[A>>2]|0)+16>>2]|0)+(c[I>>2]<<4)>>2];if(!(Mw(c[w>>2]|0,18,(c[o>>2]|0)==1?20769:20788,0,c[u>>2]|0)|0)){if((c[y>>2]|0)==0?(Mw(c[w>>2]|0,d[38357+((c[o>>2]|0)+(c[x>>2]<<1))>>0]|0,c[H>>2]|0,0,c[u>>2]|0)|0)!=0:0)break;do if(!(a[(c[w>>2]|0)+454>>0]|0)){c[v>>2]=c[(c[(c[A>>2]|0)+16>>2]|0)+(c[I>>2]<<4)>>2];if(pz(c[w>>2]|0)|0)break a;c[r>>2]=pi(c[A>>2]|0,c[H>>2]|0,c[v>>2]|0)|0;if(!(c[r>>2]|0)){if(!(Fj(c[A>>2]|0,c[H>>2]|0,c[v>>2]|0)|0))break;I=c[w>>2]|0;c[t>>2]=c[H>>2];Ah(I,38385,t);break a}m=c[w>>2]|0;if(c[z>>2]|0){bx(m,c[I>>2]|0);break a}else{c[G>>2]=c[B>>2];Ah(m,38361,G);break a}}while(0);c[r>>2]=ph(c[A>>2]|0,72,0)|0;if(!(c[r>>2]|0)){c[(c[w>>2]|0)+12>>2]=7;I=(c[w>>2]|0)+68|0;c[I>>2]=(c[I>>2]|0)+1;break}c[c[r>>2]>>2]=c[H>>2];b[(c[r>>2]|0)+32>>1]=-1;c[(c[r>>2]|0)+64>>2]=c[(c[(c[A>>2]|0)+16>>2]|0)+(c[I>>2]<<4)+12>>2];b[(c[r>>2]|0)+36>>1]=1;b[(c[r>>2]|0)+38>>1]=200;c[(c[w>>2]|0)+488>>2]=c[r>>2];if((a[(c[w>>2]|0)+18>>0]|0)==0?(yQ(c[H>>2]|0,29688)|0)==0:0)c[(c[(c[r>>2]|0)+64>>2]|0)+72>>2]=c[r>>2];if(a[(c[A>>2]|0)+140+5>>0]|0){i=J;return}H=Pw(c[w>>2]|0)|0;c[F>>2]=H;if(!H){i=J;return}ax(c[w>>2]|0,1,c[I>>2]|0);if(c[y>>2]|0)Yw(c[F>>2]|0,149)|0;H=(c[w>>2]|0)+76|0;m=(c[H>>2]|0)+1|0;c[H>>2]=m;c[(c[w>>2]|0)+392>>2]=m;c[C>>2]=m;m=(c[w>>2]|0)+76|0;H=(c[m>>2]|0)+1|0;c[m>>2]=H;c[(c[w>>2]|0)+396>>2]=H;c[D>>2]=H;H=(c[w>>2]|0)+76|0;m=(c[H>>2]|0)+1|0;c[H>>2]=m;c[E>>2]=m;Vw(c[F>>2]|0,51,c[I>>2]|0,c[E>>2]|0,2)|0;Hh(c[F>>2]|0,c[I>>2]|0);c[p>>2]=xz(c[F>>2]|0,45,c[E>>2]|0)|0;c[q>>2]=(c[(c[A>>2]|0)+24>>2]&32768|0)!=0?1:4;Vw(c[F>>2]|0,52,c[I>>2]|0,2,c[q>>2]|0)|0;Vw(c[F>>2]|0,52,c[I>>2]|0,5,d[(c[A>>2]|0)+62>>0]|0)|0;Fz(c[F>>2]|0,c[p>>2]|0);m=c[F>>2]|0;if((c[x>>2]|0)!=0|(c[y>>2]|0)!=0)Rw(m,22,0,c[D>>2]|0)|0;else{H=Rw(m,122,c[I>>2]|0,c[D>>2]|0)|0;c[(c[w>>2]|0)+424>>2]=H}dH(c[w>>2]|0,c[I>>2]|0);Rw(c[F>>2]|0,74,0,c[C>>2]|0)|0;Uw(c[F>>2]|0,27,6,c[E>>2]|0,0,38420,-2)|0;Vw(c[F>>2]|0,75,0,c[E>>2]|0,c[C>>2]|0)|0;Fh(c[F>>2]|0,8);Yw(c[F>>2]|0,61)|0;i=J;return}}while(0);Sf(c[A>>2]|0,c[H>>2]|0);i=J;return}function mv(b){b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;b=(c[e>>2]|0)+24|0;a[b>>0]=(a[b>>0]|0)+1<<24>>24;b=(c[c[e>>2]>>2]|0)+248|0;c[b>>2]=(c[b>>2]|0)+1;i=d;return}function nv(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;R=i;i=i+208|0;K=R+72|0;I=R+64|0;M=R+32|0;L=R+16|0;J=R+8|0;H=R;k=R+192|0;l=R+188|0;m=R+184|0;n=R+196|0;o=R+180|0;w=R+176|0;r=R+172|0;t=R+168|0;z=R+164|0;u=R+160|0;G=R+156|0;P=R+152|0;Q=R+148|0;O=R+144|0;s=R+124|0;F=R+120|0;q=R+116|0;D=R+112|0;E=R+108|0;p=R+104|0;C=R+100|0;y=R+96|0;x=R+92|0;A=R+88|0;B=R+84|0;N=R+80|0;v=R+76|0;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;a[n>>0]=h;c[o>>2]=j;c[r>>2]=c[c[k>>2]>>2];if((c[m>>2]|0)==0&(c[o>>2]|0)==0){i=R;return}c[w>>2]=c[(c[k>>2]|0)+488>>2];if(!(c[w>>2]|0)){i=R;return}if((a[(c[r>>2]|0)+140+5>>0]|0)!=0?(c[(c[w>>2]|0)+28>>2]=c[(c[r>>2]|0)+140>>2],(c[(c[w>>2]|0)+28>>2]|0)==1):0){h=(c[w>>2]|0)+42|0;a[h>>0]=d[h>>0]|1}do if(d[n>>0]&32){if(d[(c[w>>2]|0)+42>>0]&8){Ah(c[k>>2]|0,37995,H);i=R;return}if(!(d[(c[w>>2]|0)+42>>0]&4)){H=c[k>>2]|0;c[J>>2]=c[c[w>>2]>>2];Ah(H,38045,J);break}else{J=(c[w>>2]|0)+42|0;a[J>>0]=d[J>>0]|96;ZG(c[k>>2]|0,c[w>>2]|0);break}}while(0);c[t>>2]=Dh(c[r>>2]|0,c[(c[w>>2]|0)+64>>2]|0)|0;if(c[(c[w>>2]|0)+24>>2]|0)SG(c[k>>2]|0,c[w>>2]|0,4,0,c[(c[w>>2]|0)+24>>2]|0);_G(c[w>>2]|0);c[z>>2]=c[(c[w>>2]|0)+8>>2];while(1){if(!(c[z>>2]|0))break;VG(c[z>>2]|0);c[z>>2]=c[(c[z>>2]|0)+20>>2]}if(!(a[(c[r>>2]|0)+140+5>>0]|0)){c[G>>2]=Pw(c[k>>2]|0)|0;if(!(c[G>>2]|0)){i=R;return}xz(c[G>>2]|0,61,0)|0;if(!(c[(c[w>>2]|0)+12>>2]|0)){c[P>>2]=33805;c[Q>>2]=38077}else{c[P>>2]=36955;c[Q>>2]=38083}do if(c[o>>2]|0){H=(c[k>>2]|0)+76|0;J=(c[H>>2]|0)+1|0;c[H>>2]=J;c[F>>2]=J;J=(c[k>>2]|0)+76|0;H=(c[J>>2]|0)+1|0;c[J>>2]=H;c[D>>2]=H;H=(c[k>>2]|0)+76|0;J=(c[H>>2]|0)+1|0;c[H>>2]=J;c[E>>2]=J;Bx(c[k>>2]|0);Vw(c[G>>2]|0,55,1,c[(c[k>>2]|0)+396>>2]|0,c[t>>2]|0)|0;Fh(c[G>>2]|0,16);c[(c[k>>2]|0)+72>>2]=2;c[q>>2]=(Bz(c[G>>2]|0)|0)+1;Vw(c[G>>2]|0,16,c[F>>2]|0,0,c[q>>2]|0)|0;ZA(s,13,c[F>>2]|0);Cv(c[k>>2]|0,c[o>>2]|0,s)|0;xC(c[G>>2]|0,c[F>>2]|0);Fz(c[G>>2]|0,(c[q>>2]|0)-1|0);if(c[(c[k>>2]|0)+68>>2]|0){i=R;return}c[C>>2]=Jx(c[k>>2]|0,c[o>>2]|0)|0;if(!(c[C>>2]|0)){i=R;return}else{b[(c[w>>2]|0)+34>>1]=b[(c[C>>2]|0)+34>>1]|0;c[(c[w>>2]|0)+4>>2]=c[(c[C>>2]|0)+4>>2];b[(c[C>>2]|0)+34>>1]=0;c[(c[C>>2]|0)+4>>2]=0;Qf(c[r>>2]|0,c[C>>2]|0);c[p>>2]=xz(c[G>>2]|0,18,c[s+4>>2]|0)|0;Vw(c[G>>2]|0,49,c[s+8>>2]|0,c[s+12>>2]|0,c[D>>2]|0)|0;AC(c[G>>2]|0,c[w>>2]|0,0);Rw(c[G>>2]|0,74,1,c[E>>2]|0)|0;Vw(c[G>>2]|0,75,1,c[D>>2]|0,c[E>>2]|0)|0;Ez(c[G>>2]|0,c[p>>2]|0)|0;Fz(c[G>>2]|0,c[p>>2]|0);xz(c[G>>2]|0,61,1)|0;break}}while(0);if(c[o>>2]|0)c[O>>2]=$G(c[r>>2]|0,c[w>>2]|0)|0;else{c[y>>2]=(d[n>>0]|0)!=0?(c[k>>2]|0)+508|0:c[m>>2]|0;c[u>>2]=(c[c[y>>2]>>2]|0)-(c[(c[k>>2]|0)+500>>2]|0);if((a[c[c[y>>2]>>2]>>0]|0)!=59)c[u>>2]=(c[u>>2]|0)+(c[(c[y>>2]|0)+4>>2]|0);J=c[r>>2]|0;h=c[u>>2]|0;H=c[(c[k>>2]|0)+500>>2]|0;c[L>>2]=c[Q>>2];c[L+4>>2]=h;c[L+8>>2]=H;c[O>>2]=Bh(J,38088,L)|0}Q=c[k>>2]|0;E=(c[t>>2]|0)==1?20769:20788;F=c[P>>2]|0;h=c[c[w>>2]>>2]|0;H=c[c[w>>2]>>2]|0;J=c[(c[k>>2]|0)+396>>2]|0;L=c[O>>2]|0;P=c[(c[k>>2]|0)+392>>2]|0;c[M>>2]=c[(c[(c[r>>2]|0)+16>>2]|0)+(c[t>>2]<<4)>>2];c[M+4>>2]=E;c[M+8>>2]=F;c[M+12>>2]=h;c[M+16>>2]=H;c[M+20>>2]=J;c[M+24>>2]=L;c[M+28>>2]=P;Ow(Q,38103,M);Sf(c[r>>2]|0,c[O>>2]|0);Qw(c[k>>2]|0,c[t>>2]|0);if((d[(c[w>>2]|0)+42>>0]&8|0)!=0?(c[x>>2]=(c[(c[r>>2]|0)+16>>2]|0)+(c[t>>2]<<4),(c[(c[(c[x>>2]|0)+12>>2]|0)+72>>2]|0)==0):0){Q=c[k>>2]|0;c[I>>2]=c[c[x>>2]>>2];Ow(Q,38190,I)}O=c[G>>2]|0;P=c[t>>2]|0;Q=c[r>>2]|0;c[K>>2]=c[c[w>>2]>>2];Sw(O,P,Bh(Q,38232,K)|0)}if(!(a[(c[r>>2]|0)+140+5>>0]|0)){i=R;return}c[B>>2]=c[(c[w>>2]|0)+64>>2];c[A>>2]=Oj((c[B>>2]|0)+8|0,c[c[w>>2]>>2]|0,c[w>>2]|0)|0;if(c[A>>2]|0){jh(c[r>>2]|0);i=R;return}c[(c[k>>2]|0)+488>>2]=0;Q=(c[r>>2]|0)+24|0;c[Q>>2]=c[Q>>2]|2;if(c[(c[w>>2]|0)+12>>2]|0){i=R;return}c[N>>2]=c[(c[k>>2]|0)+500>>2];if(!(c[c[l>>2]>>2]|0))c[l>>2]=c[m>>2];c[v>>2]=(c[c[l>>2]>>2]|0)-(c[N>>2]|0);Q=13+(Cx(c[N>>2]|0,c[v>>2]|0)|0)|0;c[(c[w>>2]|0)+44>>2]=Q;i=R;return}function ov(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;o=r+8|0;n=r;f=r+40|0;g=r+36|0;l=r+32|0;k=r+28|0;p=r+24|0;m=r+20|0;j=r+16|0;h=r+12|0;c[f>>2]=d;c[g>>2]=e;c[j>>2]=c[c[f>>2]>>2];d=c[(c[f>>2]|0)+488>>2]|0;c[l>>2]=d;if(!d){i=r;return}if(((b[(c[l>>2]|0)+34>>1]|0)+1|0)>(c[(c[j>>2]|0)+88+8>>2]|0)){q=c[f>>2]|0;c[n>>2]=c[c[l>>2]>>2];Ah(q,37946,n);i=r;return}c[p>>2]=Dw(c[j>>2]|0,c[g>>2]|0)|0;if(!(c[p>>2]|0)){i=r;return}c[k>>2]=0;while(1){if((c[k>>2]|0)>=(b[(c[l>>2]|0)+34>>1]|0))break;if(!(Td(c[p>>2]|0,c[(c[(c[l>>2]|0)+4>>2]|0)+((c[k>>2]|0)*24|0)>>2]|0)|0)){q=8;break}c[k>>2]=(c[k>>2]|0)+1}if((q|0)==8){q=c[f>>2]|0;c[o>>2]=c[p>>2];Ah(q,37969,o);Sf(c[j>>2]|0,c[p>>2]|0);i=r;return}do if(!(b[(c[l>>2]|0)+34>>1]&7)){c[h>>2]=Ew(c[j>>2]|0,c[(c[l>>2]|0)+4>>2]|0,((b[(c[l>>2]|0)+34>>1]|0)+8|0)*24|0,0)|0;if(c[h>>2]|0){c[(c[l>>2]|0)+4>>2]=c[h>>2];break}Sf(c[j>>2]|0,c[p>>2]|0);i=r;return}while(0);c[m>>2]=(c[(c[l>>2]|0)+4>>2]|0)+((b[(c[l>>2]|0)+34>>1]|0)*24|0);q=c[m>>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[c[m>>2]>>2]=c[p>>2];a[(c[m>>2]|0)+21>>0]=65;a[(c[m>>2]|0)+22>>0]=1;q=(c[l>>2]|0)+34|0;b[q>>1]=(b[q>>1]|0)+1<<16>>16;i=r;return}function pv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=d;c[g>>2]=e;c[h>>2]=c[(c[f>>2]|0)+488>>2];if(!(c[h>>2]|0)){i=k;return}if((b[(c[h>>2]|0)+34>>1]|0)<1){i=k;return}c[j>>2]=(c[(c[h>>2]|0)+4>>2]|0)+(((b[(c[h>>2]|0)+34>>1]|0)-1|0)*24|0);Sf(c[c[f>>2]>>2]|0,c[(c[j>>2]|0)+12>>2]|0);e=Dw(c[c[f>>2]>>2]|0,c[g>>2]|0)|0;c[(c[j>>2]|0)+12>>2]=e;e=jx(c[(c[j>>2]|0)+12>>2]|0,(c[j>>2]|0)+22|0)|0;a[(c[j>>2]|0)+21>>0]=e;i=k;return}function qv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m;f=m+20|0;g=m+16|0;j=m+12|0;k=m+8|0;h=m+4|0;c[f>>2]=d;c[g>>2]=e;c[h>>2]=c[c[f>>2]>>2];c[j>>2]=c[(c[f>>2]|0)+488>>2];if(!(c[j>>2]|0)){e=c[h>>2]|0;l=c[g>>2]|0;l=c[l>>2]|0;Zu(e,l);i=m;return}c[k>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(((b[(c[j>>2]|0)+34>>1]|0)-1|0)*24|0);if(YG(c[c[g>>2]>>2]|0,a[(c[h>>2]|0)+140+5>>0]|0)|0){Zu(c[h>>2]|0,c[(c[k>>2]|0)+4>>2]|0);e=ny(c[h>>2]|0,c[c[g>>2]>>2]|0,1)|0;c[(c[k>>2]|0)+4>>2]=e;Sf(c[h>>2]|0,c[(c[k>>2]|0)+8>>2]|0);e=(c[(c[g>>2]|0)+8>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0)|0;e=Iw(c[h>>2]|0,c[(c[g>>2]|0)+4>>2]|0,e,((e|0)<0)<<31>>31)|0;c[(c[k>>2]|0)+8>>2]=e;e=c[h>>2]|0;l=c[g>>2]|0;l=c[l>>2]|0;Zu(e,l);i=m;return}else{e=c[f>>2]|0;c[l>>2]=c[c[k>>2]>>2];Ah(e,37901,l);e=c[h>>2]|0;l=c[g>>2]|0;l=c[l>>2]|0;Zu(e,l);i=m;return}}function rv(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,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;if((c[h>>2]|0)==72?(c[(c[g>>2]|0)+68>>2]|0)==0:0)c[m>>2]=az(c[c[g>>2]>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;else{c[m>>2]=cz(c[c[g>>2]>>2]|0,c[h>>2]&255,c[l>>2]|0,1)|0;dz(c[c[g>>2]>>2]|0,c[m>>2]|0,c[j>>2]|0,c[k>>2]|0)}if(!(c[m>>2]|0)){f=c[m>>2]|0;i=n;return f|0}Ey(c[g>>2]|0,c[(c[m>>2]|0)+24>>2]|0)|0;f=c[m>>2]|0;i=n;return f|0}function sv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;g=f+12|0;k=f+8|0;j=f+4|0;h=f;c[g>>2]=a;c[k>>2]=b;c[j>>2]=d;c[h>>2]=e;e=rv(c[k>>2]|0,c[j>>2]|0,0,0,c[h>>2]|0)|0;c[c[g>>2]>>2]=e;c[(c[g>>2]|0)+4>>2]=c[c[h>>2]>>2];c[(c[g>>2]|0)+8>>2]=(c[c[h>>2]>>2]|0)+(c[(c[h>>2]|0)+4>>2]|0);i=f;return}function tv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+8|0;f=h+4|0;g=h;c[j>>2]=d;c[f>>2]=e;c[g>>2]=c[(c[j>>2]|0)+488>>2];if(!(c[g>>2]|0)){i=h;return}if((b[(c[g>>2]|0)+34>>1]|0)<1){i=h;return}a[(c[(c[g>>2]|0)+4>>2]|0)+(((b[(c[g>>2]|0)+34>>1]|0)-1|0)*24|0)+20>>0]=c[f>>2];i=h;return}function uv(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+64|0;y=z+8|0;k=z;s=z+60|0;t=z+56|0; +u=z+52|0;v=z+48|0;w=z+44|0;p=z+40|0;r=z+36|0;m=z+32|0;l=z+28|0;n=z+24|0;o=z+20|0;q=z+16|0;x=z+12|0;c[s>>2]=e;c[t>>2]=f;c[u>>2]=g;c[v>>2]=h;c[w>>2]=j;c[p>>2]=c[(c[s>>2]|0)+488>>2];c[r>>2]=0;c[m>>2]=-1;if(!(c[p>>2]|0)){x=c[s>>2]|0;x=c[x>>2]|0;y=c[t>>2]|0;Vu(x,y);i=z;return}if(d[(c[s>>2]|0)+454>>0]|0){x=c[s>>2]|0;x=c[x>>2]|0;y=c[t>>2]|0;Vu(x,y);i=z;return}if(d[(c[p>>2]|0)+42>>0]&4){x=c[s>>2]|0;c[k>>2]=c[c[p>>2]>>2];Ah(x,37804,k);x=c[s>>2]|0;x=c[x>>2]|0;y=c[t>>2]|0;Vu(x,y);i=z;return}k=(c[p>>2]|0)+42|0;a[k>>0]=d[k>>0]|4;a:do if(!(c[t>>2]|0)){c[m>>2]=(b[(c[p>>2]|0)+34>>1]|0)-1;q=(c[(c[p>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)+23|0;a[q>>0]=d[q>>0]|1;c[r>>2]=c[(c[(c[p>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)+12>>2];c[n>>2]=1}else{c[n>>2]=c[c[t>>2]>>2];c[l>>2]=0;while(1){if((c[l>>2]|0)>=(c[n>>2]|0))break a;c[o>>2]=Tx(c[(c[(c[t>>2]|0)+4>>2]|0)+((c[l>>2]|0)*20|0)>>2]|0)|0;TG(c[o>>2]|0);b:do if((d[c[o>>2]>>0]|0)==27){c[q>>2]=c[(c[o>>2]|0)+8>>2];c[m>>2]=0;while(1){if((c[m>>2]|0)>=(b[(c[p>>2]|0)+34>>1]|0))break b;k=(Td(c[q>>2]|0,c[(c[(c[p>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)>>2]|0)|0)==0;h=c[m>>2]|0;if(k)break;c[m>>2]=h+1}k=(c[(c[p>>2]|0)+4>>2]|0)+(h*24|0)+23|0;a[k>>0]=d[k>>0]|1;c[r>>2]=c[(c[(c[p>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)+12>>2]}while(0);c[l>>2]=(c[l>>2]|0)+1}}while(0);if((c[n>>2]|0)==1&(c[r>>2]|0)!=0?(r=(Td(c[r>>2]|0,19623)|0)==0,r&(c[w>>2]|0)!=1):0){b[(c[p>>2]|0)+32>>1]=c[m>>2];a[(c[p>>2]|0)+43>>0]=c[u>>2];y=(c[p>>2]|0)+42|0;a[y>>0]=d[y>>0]|c[v>>2]<<3;if(!(c[t>>2]|0)){x=c[s>>2]|0;x=c[x>>2]|0;y=c[t>>2]|0;Vu(x,y);i=z;return}a[(c[s>>2]|0)+452>>0]=a[(c[(c[t>>2]|0)+4>>2]|0)+12>>0]|0;x=c[s>>2]|0;x=c[x>>2]|0;y=c[t>>2]|0;Vu(x,y);i=z;return}h=c[s>>2]|0;if(c[v>>2]|0){Ah(h,37845,y);x=c[s>>2]|0;x=c[x>>2]|0;y=c[t>>2]|0;Vu(x,y);i=z;return}c[x>>2]=vv(h,0,0,0,c[t>>2]|0,c[u>>2]|0,0,0,c[w>>2]|0,0)|0;if(c[x>>2]|0){y=(c[x>>2]|0)+55|0;a[y>>0]=a[y>>0]&-4|2}c[t>>2]=0;x=c[s>>2]|0;x=c[x>>2]|0;y=c[t>>2]|0;Vu(x,y);i=z;return}function vv(f,g,h,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|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,L=0,M=0,N=0,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=i;i=i+352|0;ea=ya+112|0;da=ya+88|0;ca=ya+72|0;ba=ya+64|0;aa=ya+56|0;B=ya+48|0;$=ya+40|0;A=ya+32|0;z=ya+24|0;D=ya+16|0;C=ya+8|0;y=ya;F=ya+336|0;q=ya+332|0;r=ya+328|0;ra=ya+324|0;sa=ya+320|0;la=ya+316|0;G=ya+312|0;ta=ya+308|0;s=ya+304|0;H=ya+300|0;wa=ya+296|0;oa=ya+292|0;va=ya+288|0;xa=ya+284|0;Q=ya+280|0;I=ya+276|0;K=ya+272|0;x=ya+248|0;Z=ya+240|0;ua=ya+236|0;T=ya+232|0;ma=ya+228|0;W=ya+224|0;V=ya+220|0;O=ya+216|0;P=ya+212|0;ja=ya+208|0;X=ya+204|0;t=ya+200|0;v=ya+196|0;E=ya+192|0;w=ya+184|0;u=ya+180|0;R=ya+176|0;Y=ya+172|0;ia=ya+168|0;S=ya+164|0;N=ya+160|0;fa=ya+156|0;U=ya+152|0;L=ya+148|0;ga=ya+144|0;ha=ya+140|0;na=ya+136|0;_=ya+132|0;ka=ya+128|0;J=ya+124|0;M=ya+120|0;pa=ya+116|0;c[F>>2]=f;c[q>>2]=g;c[r>>2]=h;c[ra>>2]=j;c[sa>>2]=k;c[la>>2]=l;c[G>>2]=m;c[ta>>2]=n;c[s>>2]=o;c[H>>2]=p;c[wa>>2]=0;c[oa>>2]=0;c[va>>2]=0;c[xa>>2]=0;c[ua>>2]=c[c[F>>2]>>2];c[W>>2]=0;c[O>>2]=0;c[ja>>2]=0;c[X>>2]=0;a:do if((((d[(c[ua>>2]|0)+65>>0]|0)==0?(d[(c[F>>2]|0)+454>>0]|0)==0:0)?(c[(c[F>>2]|0)+68>>2]|0)<=0:0)?0==(pz(c[F>>2]|0)|0):0){p=c[F>>2]|0;if(c[ra>>2]|0){c[ma>>2]=tz(p,c[q>>2]|0,c[r>>2]|0,W)|0;if((c[ma>>2]|0)<0)break;if(((a[(c[ua>>2]|0)+140+5>>0]|0)==0?(c[oa>>2]=DB(c[F>>2]|0,c[ra>>2]|0)|0,(c[oa>>2]|0)!=0?(c[(c[r>>2]|0)+4>>2]|0)==0:0):0)?(c[(c[oa>>2]|0)+64>>2]|0)==(c[(c[(c[ua>>2]|0)+16>>2]|0)+16+12>>2]|0):0)c[ma>>2]=1;EB(x,c[F>>2]|0,c[ma>>2]|0,33970,c[W>>2]|0);FB(x,c[ra>>2]|0)|0;c[oa>>2]=_w(c[F>>2]|0,0,(c[ra>>2]|0)+8|0)|0;if(!(c[oa>>2]|0))break;if((c[ma>>2]|0)==1?(c[(c[(c[ua>>2]|0)+16>>2]|0)+(c[ma>>2]<<4)+12>>2]|0)!=(c[(c[oa>>2]|0)+64>>2]|0):0){qa=c[F>>2]|0;c[y>>2]=c[c[oa>>2]>>2];Ah(qa,37370,y);break}if(d[(c[oa>>2]|0)+42>>0]&32)c[X>>2]=Ej(c[oa>>2]|0)|0}else{c[oa>>2]=c[p+488>>2];if(!(c[oa>>2]|0))break;c[ma>>2]=Dh(c[ua>>2]|0,c[(c[oa>>2]|0)+64>>2]|0)|0}c[T>>2]=(c[(c[ua>>2]|0)+16>>2]|0)+(c[ma>>2]<<4);if(((zd(c[c[oa>>2]>>2]|0,28715,7)|0)==0?(d[(c[ua>>2]|0)+140+5>>0]|0)==0:0)?(zd((c[c[oa>>2]>>2]|0)+7|0,37420,9)|0)!=0:0){qa=c[F>>2]|0;c[C>>2]=c[c[oa>>2]>>2];Ah(qa,37430,C);break}if(c[(c[oa>>2]|0)+12>>2]|0){Ah(c[F>>2]|0,37458,D);break}if(d[(c[oa>>2]|0)+42>>0]&16){Ah(c[F>>2]|0,37483,z);break}if(c[W>>2]|0){c[xa>>2]=Dw(c[ua>>2]|0,c[W>>2]|0)|0;if(!(c[xa>>2]|0))break;if(yx(c[F>>2]|0,c[xa>>2]|0)|0)break;if((a[(c[ua>>2]|0)+140+5>>0]|0)==0?(pi(c[ua>>2]|0,c[xa>>2]|0,0)|0)!=0:0){qa=c[F>>2]|0;c[A>>2]=c[xa>>2];Ah(qa,37517,A);break}if(Fj(c[ua>>2]|0,c[xa>>2]|0,c[c[T>>2]>>2]|0)|0){p=c[F>>2]|0;if(c[H>>2]|0){bx(p,c[ma>>2]|0);break}else{c[$>>2]=c[xa>>2];Ah(p,37551,$);break}}}else{c[v>>2]=c[(c[oa>>2]|0)+8>>2];c[t>>2]=1;while(1){if(!(c[v>>2]|0))break;c[v>>2]=c[(c[v>>2]|0)+20>>2];c[t>>2]=(c[t>>2]|0)+1}$=c[ua>>2]|0;H=c[t>>2]|0;c[B>>2]=c[c[oa>>2]>>2];c[B+4>>2]=H;c[xa>>2]=Bh($,37575,B)|0;if(!(c[xa>>2]|0))break}c[E>>2]=c[c[T>>2]>>2];if((Mw(c[F>>2]|0,18,(c[ma>>2]|0)==1?20769:20788,0,c[E>>2]|0)|0)==0?(c[I>>2]=1,c[I>>2]=(c[ma>>2]|0)==1?3:1,(Mw(c[F>>2]|0,c[I>>2]|0,c[xa>>2]|0,c[c[oa>>2]>>2]|0,c[E>>2]|0)|0)==0):0){if(!(c[sa>>2]|0)){Cy(w,c[(c[(c[oa>>2]|0)+4>>2]|0)+(((b[(c[oa>>2]|0)+34>>1]|0)-1|0)*24|0)>>2]|0);$=c[F>>2]|0;c[sa>>2]=Gv($,0,cz(c[ua>>2]|0,27,w,0)|0)|0;if(!(c[sa>>2]|0))break;Pv(c[sa>>2]|0,c[s>>2]|0)}else Sv(c[F>>2]|0,c[sa>>2]|0,33970);c[I>>2]=0;while(1){if((c[I>>2]|0)>=(c[c[sa>>2]>>2]|0))break;c[u>>2]=c[(c[(c[sa>>2]|0)+4>>2]|0)+((c[I>>2]|0)*20|0)>>2];if((d[c[u>>2]>>0]|0)==95){$=1+(If(c[(c[u>>2]|0)+8>>2]|0)|0)|0;c[O>>2]=(c[O>>2]|0)+$}c[I>>2]=(c[I>>2]|0)+1}c[Q>>2]=If(c[xa>>2]|0)|0;if(c[X>>2]|0)p=e[(c[X>>2]|0)+50>>1]|0;else p=1;c[P>>2]=p;c[va>>2]=HD(c[ua>>2]|0,(c[c[sa>>2]>>2]|0)+(c[P>>2]|0)&65535,(c[Q>>2]|0)+(c[O>>2]|0)+1|0,ja)|0;if(!(a[(c[ua>>2]|0)+65>>0]|0)){c[c[va>>2]>>2]=c[ja>>2];c[ja>>2]=(c[ja>>2]|0)+((c[Q>>2]|0)+1);iR(c[c[va>>2]>>2]|0,c[xa>>2]|0,(c[Q>>2]|0)+1|0)|0;c[(c[va>>2]|0)+12>>2]=c[oa>>2];a[(c[va>>2]|0)+54>>0]=c[la>>2];$=(c[va>>2]|0)+55|0;a[$>>0]=a[$>>0]&-9|((c[la>>2]|0)!=0&1)<<3&255;$=(c[va>>2]|0)+55|0;a[$>>0]=a[$>>0]&-4|((c[W>>2]|0)!=0?0:1)&3;c[(c[va>>2]|0)+24>>2]=c[(c[(c[ua>>2]|0)+16>>2]|0)+(c[ma>>2]<<4)+12>>2];b[(c[va>>2]|0)+50>>1]=c[c[sa>>2]>>2];if(c[ta>>2]|0){SG(c[F>>2]|0,c[oa>>2]|0,16,c[ta>>2]|0,0);c[(c[va>>2]|0)+36>>2]=c[ta>>2];c[ta>>2]=0}if((d[(c[(c[T>>2]|0)+12>>2]|0)+76>>0]|0)>=4)c[Z>>2]=-1;else c[Z>>2]=0;c[I>>2]=0;c[V>>2]=c[(c[sa>>2]|0)+4>>2];while(1){if((c[I>>2]|0)>=(c[c[sa>>2]>>2]|0))break;TG(c[c[V>>2]>>2]|0);SG(c[F>>2]|0,c[oa>>2]|0,32,c[c[V>>2]>>2]|0,0);if(c[(c[F>>2]|0)+68>>2]|0)break a;c[R>>2]=Tx(c[c[V>>2]>>2]|0)|0;if((d[c[R>>2]>>0]|0)!=152){if((c[oa>>2]|0)==(c[(c[F>>2]|0)+488>>2]|0)){qa=65;break}do if(!(c[(c[va>>2]|0)+40>>2]|0)){c[S>>2]=vy(c[ua>>2]|0,c[sa>>2]|0,0)|0;c[(c[va>>2]|0)+40>>2]=c[S>>2];if(a[(c[ua>>2]|0)+65>>0]|0)break;c[V>>2]=(c[(c[S>>2]|0)+4>>2]|0)+((c[I>>2]|0)*20|0)}while(0);c[K>>2]=-2;b[(c[(c[va>>2]|0)+4>>2]|0)+(c[I>>2]<<1)>>1]=-2;$=(c[va>>2]|0)+55|0;a[$>>0]=a[$>>0]&-9}else{c[K>>2]=b[(c[R>>2]|0)+32>>1];do if((c[K>>2]|0)<0)c[K>>2]=b[(c[oa>>2]|0)+32>>1];else{if(d[(c[(c[oa>>2]|0)+4>>2]|0)+((c[K>>2]|0)*24|0)+20>>0]|0)break;$=(c[va>>2]|0)+55|0;a[$>>0]=a[$>>0]&-9}while(0);b[(c[(c[va>>2]|0)+4>>2]|0)+(c[I>>2]<<1)>>1]=c[K>>2]}c[ia>>2]=0;do if((d[c[c[V>>2]>>2]>>0]|0)==95){c[ia>>2]=c[(c[c[V>>2]>>2]|0)+8>>2];c[N>>2]=(If(c[ia>>2]|0)|0)+1;iR(c[ja>>2]|0,c[ia>>2]|0,c[N>>2]|0)|0;c[ia>>2]=c[ja>>2];c[ja>>2]=(c[ja>>2]|0)+(c[N>>2]|0);c[O>>2]=(c[O>>2]|0)-(c[N>>2]|0)}else{if((c[K>>2]|0)<0)break;c[ia>>2]=c[(c[(c[oa>>2]|0)+4>>2]|0)+((c[K>>2]|0)*24|0)+16>>2]}while(0);if(!(c[ia>>2]|0))c[ia>>2]=35690;if((a[(c[ua>>2]|0)+140+5>>0]|0)==0?(Dz(c[F>>2]|0,c[ia>>2]|0)|0)==0:0)break a;c[(c[(c[va>>2]|0)+32>>2]|0)+(c[I>>2]<<2)>>2]=c[ia>>2];c[Y>>2]=d[(c[V>>2]|0)+12>>0]&c[Z>>2];a[(c[(c[va>>2]|0)+28>>2]|0)+(c[I>>2]|0)>>0]=c[Y>>2];c[I>>2]=(c[I>>2]|0)+1;c[V>>2]=(c[V>>2]|0)+20}if((qa|0)==65){Ah(c[F>>2]|0,37598,aa);break}b:do if(c[X>>2]|0){c[K>>2]=0;while(1){if((c[K>>2]|0)>=(e[(c[X>>2]|0)+50>>1]|0))break b;c[fa>>2]=b[(c[(c[X>>2]|0)+4>>2]|0)+(c[K>>2]<<1)>>1];if(UG(c[(c[va>>2]|0)+4>>2]|0,e[(c[va>>2]|0)+50>>1]|0,c[fa>>2]|0)|0){ja=(c[va>>2]|0)+52|0;b[ja>>1]=(b[ja>>1]|0)+-1<<16>>16}else{b[(c[(c[va>>2]|0)+4>>2]|0)+(c[I>>2]<<1)>>1]=c[fa>>2];c[(c[(c[va>>2]|0)+32>>2]|0)+(c[I>>2]<<2)>>2]=c[(c[(c[X>>2]|0)+32>>2]|0)+(c[K>>2]<<2)>>2];a[(c[(c[va>>2]|0)+28>>2]|0)+(c[I>>2]|0)>>0]=a[(c[(c[X>>2]|0)+28>>2]|0)+(c[K>>2]|0)>>0]|0;c[I>>2]=(c[I>>2]|0)+1}c[K>>2]=(c[K>>2]|0)+1}}else{b[(c[(c[va>>2]|0)+4>>2]|0)+(c[I>>2]<<1)>>1]=-1;c[(c[(c[va>>2]|0)+32>>2]|0)+(c[I>>2]<<2)>>2]=35690}while(0);Cj(c[va>>2]|0);if(!(c[(c[F>>2]|0)+488>>2]|0))VG(c[va>>2]|0);c:do if((c[oa>>2]|0)==(c[(c[F>>2]|0)+488>>2]|0)){c[U>>2]=c[(c[oa>>2]|0)+8>>2];while(1){if(!(c[U>>2]|0))break c;if((e[(c[U>>2]|0)+50>>1]|0)==(e[(c[va>>2]|0)+50>>1]|0)){c[L>>2]=0;while(1){if((c[L>>2]|0)>=(e[(c[U>>2]|0)+50>>1]|0))break;if((b[(c[(c[U>>2]|0)+4>>2]|0)+(c[L>>2]<<1)>>1]|0)!=(b[(c[(c[va>>2]|0)+4>>2]|0)+(c[L>>2]<<1)>>1]|0))break;c[ga>>2]=c[(c[(c[U>>2]|0)+32>>2]|0)+(c[L>>2]<<2)>>2];c[ha>>2]=c[(c[(c[va>>2]|0)+32>>2]|0)+(c[L>>2]<<2)>>2];if((c[ga>>2]|0)!=(c[ha>>2]|0)?(Td(c[ga>>2]|0,c[ha>>2]|0)|0)!=0:0)break;c[L>>2]=(c[L>>2]|0)+1}if((c[L>>2]|0)==(e[(c[U>>2]|0)+50>>1]|0))break}c[U>>2]=c[(c[U>>2]|0)+20>>2]}do if((d[(c[U>>2]|0)+54>>0]|0)!=(d[(c[va>>2]|0)+54>>0]|0)){do if((d[(c[U>>2]|0)+54>>0]|0)!=10){if((d[(c[va>>2]|0)+54>>0]|0)==10)break;qa=c[F>>2]|0;c[ba>>2]=0;Ah(qa,37659,ba)}while(0);if((d[(c[U>>2]|0)+54>>0]|0)!=10)break;a[(c[U>>2]|0)+54>>0]=a[(c[va>>2]|0)+54>>0]|0}while(0);c[wa>>2]=c[U>>2];break a}while(0);do if(a[(c[ua>>2]|0)+140+5>>0]|0){c[na>>2]=Oj((c[(c[va>>2]|0)+24>>2]|0)+24|0,c[c[va>>2]>>2]|0,c[va>>2]|0)|0;p=c[ua>>2]|0;if(c[na>>2]|0){jh(p);break a}na=p+24|0;c[na>>2]=c[na>>2]|2;if(!(c[ra>>2]|0))break;c[(c[va>>2]|0)+44>>2]=c[(c[ua>>2]|0)+140>>2]}else{if(!((c[ra>>2]|0)!=0?1:(d[(c[oa>>2]|0)+42>>0]&32|0)==0))break;ja=(c[F>>2]|0)+76|0;na=(c[ja>>2]|0)+1|0;c[ja>>2]=na;c[J>>2]=na;c[_>>2]=Pw(c[F>>2]|0)|0;if(!(c[_>>2]|0))break a;ax(c[F>>2]|0,1,c[ma>>2]|0);na=Yw(c[_>>2]|0,160)|0;c[(c[va>>2]|0)+44>>2]=na;Rw(c[_>>2]|0,121,c[ma>>2]|0,c[J>>2]|0)|0;if(c[G>>2]|0){c[M>>2]=(c[(c[F>>2]|0)+508>>2]|0)-(c[c[W>>2]>>2]|0)+(c[(c[F>>2]|0)+508+4>>2]|0);if((a[(c[c[W>>2]>>2]|0)+((c[M>>2]|0)-1)>>0]|0)==59)c[M>>2]=(c[M>>2]|0)+-1;na=c[ua>>2]|0;ia=c[M>>2]|0;ja=c[c[W>>2]>>2]|0;c[ca>>2]=(c[la>>2]|0)==0?19266:37701;c[ca+4>>2]=ia;c[ca+8>>2]=ja;c[ka>>2]=Bh(na,37709,ca)|0}else c[ka>>2]=0;na=c[F>>2]|0;fa=(c[ma>>2]|0)==1?20769:20788;ga=c[c[va>>2]>>2]|0;ha=c[c[oa>>2]>>2]|0;ia=c[J>>2]|0;ja=c[ka>>2]|0;c[da>>2]=c[(c[(c[ua>>2]|0)+16>>2]|0)+(c[ma>>2]<<4)>>2];c[da+4>>2]=fa;c[da+8>>2]=ga;c[da+12>>2]=ha;c[da+16>>2]=ia;c[da+20>>2]=ja;Ow(na,37729,da);Sf(c[ua>>2]|0,c[ka>>2]|0);if(c[ra>>2]|0){Uz(c[F>>2]|0,c[va>>2]|0,c[J>>2]|0);Qw(c[F>>2]|0,c[ma>>2]|0);ka=c[_>>2]|0;ma=c[ma>>2]|0;na=c[ua>>2]|0;c[ea>>2]=c[c[va>>2]>>2];Sw(ka,ma,Bh(na,37777,ea)|0);xz(c[_>>2]|0,147,0)|0}Fz(c[_>>2]|0,c[(c[va>>2]|0)+44>>2]|0)}while(0);if(!((c[ra>>2]|0)==0?1:(d[(c[ua>>2]|0)+140+5>>0]|0)!=0))break;do if((c[la>>2]|0)!=5)qa=132;else{if(!(c[(c[oa>>2]|0)+8>>2]|0)){qa=132;break}if((d[(c[(c[oa>>2]|0)+8>>2]|0)+54>>0]|0)==5){qa=132;break}c[pa>>2]=c[(c[oa>>2]|0)+8>>2];while(1){if(c[(c[pa>>2]|0)+20>>2]|0)l=(d[(c[(c[pa>>2]|0)+20>>2]|0)+54>>0]|0)!=5;else l=0;p=c[(c[pa>>2]|0)+20>>2]|0;if(!l)break;c[pa>>2]=p}c[(c[va>>2]|0)+20>>2]=p;c[(c[pa>>2]|0)+20>>2]=c[va>>2]}while(0);if((qa|0)==132){c[(c[va>>2]|0)+20>>2]=c[(c[oa>>2]|0)+8>>2];c[(c[oa>>2]|0)+8>>2]=c[va>>2]}c[wa>>2]=c[va>>2];c[va>>2]=0}}}while(0);if(!(c[va>>2]|0)){qa=c[ua>>2]|0;va=c[ta>>2]|0;Zu(qa,va);va=c[ua>>2]|0;ta=c[sa>>2]|0;Vu(va,ta);ta=c[ua>>2]|0;va=c[ra>>2]|0;Yu(ta,va);va=c[ua>>2]|0;xa=c[xa>>2]|0;Sf(va,xa);xa=c[wa>>2]|0;i=ya;return xa|0}WG(c[ua>>2]|0,c[va>>2]|0);qa=c[ua>>2]|0;va=c[ta>>2]|0;Zu(qa,va);va=c[ua>>2]|0;ta=c[sa>>2]|0;Vu(va,ta);ta=c[ua>>2]|0;va=c[ra>>2]|0;Yu(ta,va);va=c[ua>>2]|0;xa=c[xa>>2]|0;Sf(va,xa);xa=c[wa>>2]|0;i=ya;return xa|0}function wv(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[f>>2]=b;c[g>>2]=e;c[j>>2]=c[(c[f>>2]|0)+488>>2];c[h>>2]=c[c[f>>2]>>2];if(((c[j>>2]|0)!=0?(a[(c[f>>2]|0)+454>>0]|0)==0:0)?(Ei(c[(c[(c[h>>2]|0)+16>>2]|0)+(d[(c[h>>2]|0)+140+4>>0]<<4)+4>>2]|0)|0)==0:0){b=Gv(c[f>>2]|0,c[(c[j>>2]|0)+24>>2]|0,c[g>>2]|0)|0;c[(c[j>>2]|0)+24>>2]=b;if(!(c[(c[f>>2]|0)+328+4>>2]|0)){i=k;return}Hv(c[f>>2]|0,c[(c[j>>2]|0)+24>>2]|0,(c[f>>2]|0)+328|0,1);i=k;return}Zu(c[c[f>>2]>>2]|0,c[g>>2]|0);i=k;return}function xv(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+96|0;B=E+16|0;o=E+8|0;n=E;p=E+80|0;q=E+76|0;k=E+72|0;r=E+68|0;s=E+64|0;t=E+60|0;z=E+56|0;A=E+52|0;y=E+48|0;m=E+44|0;u=E+40|0;x=E+36|0;C=E+32|0;l=E+28|0;v=E+24|0;w=E+20|0;c[p>>2]=e;c[q>>2]=f;c[k>>2]=g;c[r>>2]=h;c[s>>2]=j;c[t>>2]=c[c[p>>2]>>2];c[z>>2]=0;c[y>>2]=c[(c[p>>2]|0)+488>>2];a:do if((c[y>>2]|0)!=0?(d[(c[p>>2]|0)+454>>0]|0)==0:0){if(!(c[q>>2]|0)){c[l>>2]=(b[(c[y>>2]|0)+34>>1]|0)-1;if((c[l>>2]|0)<0)break;if((c[r>>2]|0)!=0?(c[c[r>>2]>>2]|0)!=1:0){D=c[p>>2]|0;C=c[k>>2]|0;c[n>>2]=c[(c[(c[y>>2]|0)+4>>2]|0)+((c[l>>2]|0)*24|0)>>2];c[n+4>>2]=C;Ah(D,37167,n);break}c[x>>2]=1}else{if((c[r>>2]|0)!=0?(c[c[r>>2]>>2]|0)!=(c[c[q>>2]>>2]|0):0){Ah(c[p>>2]|0,37230,o);break}c[x>>2]=c[c[q>>2]>>2]}c[m>>2]=44+((c[x>>2]|0)-1<<3)+(c[(c[k>>2]|0)+4>>2]|0)+1;b:do if(c[r>>2]|0){c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[c[r>>2]>>2]|0))break b;o=(If(c[(c[(c[r>>2]|0)+4>>2]|0)+((c[u>>2]|0)*20|0)+4>>2]|0)|0)+1|0;c[m>>2]=(c[m>>2]|0)+o;c[u>>2]=(c[u>>2]|0)+1}}while(0);o=c[m>>2]|0;c[z>>2]=ph(c[t>>2]|0,o,((o|0)<0)<<31>>31)|0;if(c[z>>2]|0){c[c[z>>2]>>2]=c[y>>2];c[(c[z>>2]|0)+4>>2]=c[(c[y>>2]|0)+16>>2];c[C>>2]=(c[z>>2]|0)+36+(c[x>>2]<<3);c[(c[z>>2]|0)+8>>2]=c[C>>2];iR(c[C>>2]|0,c[c[k>>2]>>2]|0,c[(c[k>>2]|0)+4>>2]|0)|0;a[(c[C>>2]|0)+(c[(c[k>>2]|0)+4>>2]|0)>>0]=0;Jw(c[C>>2]|0)|0;c[C>>2]=(c[C>>2]|0)+((c[(c[k>>2]|0)+4>>2]|0)+1);c[(c[z>>2]|0)+20>>2]=c[x>>2];c:do if(!(c[q>>2]|0))c[(c[z>>2]|0)+36>>2]=(b[(c[y>>2]|0)+34>>1]|0)-1;else{c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[x>>2]|0))break c;c[v>>2]=0;while(1){if((c[v>>2]|0)>=(b[(c[y>>2]|0)+34>>1]|0))break;o=(Td(c[(c[(c[y>>2]|0)+4>>2]|0)+((c[v>>2]|0)*24|0)>>2]|0,c[(c[(c[q>>2]|0)+4>>2]|0)+((c[u>>2]|0)*20|0)+4>>2]|0)|0)==0;k=c[v>>2]|0;if(o){D=25;break}c[v>>2]=k+1}if((D|0)==25){D=0;c[(c[z>>2]|0)+36+(c[u>>2]<<3)>>2]=k}if((c[v>>2]|0)>=(b[(c[y>>2]|0)+34>>1]|0))break;c[u>>2]=(c[u>>2]|0)+1}D=c[p>>2]|0;c[B>>2]=c[(c[(c[q>>2]|0)+4>>2]|0)+((c[u>>2]|0)*20|0)+4>>2];Ah(D,37324,B);break a}while(0);d:do if(c[r>>2]|0){c[u>>2]=0;while(1){if((c[u>>2]|0)>=(c[x>>2]|0))break d;c[w>>2]=If(c[(c[(c[r>>2]|0)+4>>2]|0)+((c[u>>2]|0)*20|0)+4>>2]|0)|0;c[(c[z>>2]|0)+36+(c[u>>2]<<3)+4>>2]=c[C>>2];iR(c[C>>2]|0,c[(c[(c[r>>2]|0)+4>>2]|0)+((c[u>>2]|0)*20|0)+4>>2]|0,c[w>>2]|0)|0;a[(c[C>>2]|0)+(c[w>>2]|0)>>0]=0;c[C>>2]=(c[C>>2]|0)+((c[w>>2]|0)+1);c[u>>2]=(c[u>>2]|0)+1}}while(0);a[(c[z>>2]|0)+24>>0]=0;a[(c[z>>2]|0)+25>>0]=c[s>>2];a[(c[z>>2]|0)+25+1>>0]=c[s>>2]>>8;c[A>>2]=Oj((c[(c[y>>2]|0)+64>>2]|0)+56|0,c[(c[z>>2]|0)+8>>2]|0,c[z>>2]|0)|0;if((c[A>>2]|0)==(c[z>>2]|0)){jh(c[t>>2]|0);break}if(c[A>>2]|0){c[(c[z>>2]|0)+12>>2]=c[A>>2];c[(c[A>>2]|0)+16>>2]=c[z>>2]}c[(c[y>>2]|0)+16>>2]=c[z>>2];c[z>>2]=0}}while(0);Sf(c[t>>2]|0,c[z>>2]|0);Vu(c[t>>2]|0,c[q>>2]|0);Vu(c[t>>2]|0,c[r>>2]|0);i=E;return}function yv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;j=h+12|0;e=h+8|0;g=h+4|0;f=h;c[j>>2]=b;c[e>>2]=d;b=c[(c[j>>2]|0)+488>>2]|0;c[g>>2]=b;if(!b){i=h;return}j=c[(c[g>>2]|0)+16>>2]|0;c[f>>2]=j;if(!j){i=h;return}a[(c[f>>2]|0)+24>>0]=c[e>>2];i=h;return}function zv(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;e=m+24|0;f=m+20|0;j=m+16|0;h=m+12|0;l=m+8|0;g=m+4|0;k=m;c[e>>2]=a;c[f>>2]=d;d=c[(c[e>>2]|0)+488>>2]|0;c[j>>2]=d;if(!d){i=m;return}c[h>>2]=(b[(c[j>>2]|0)+34>>1]|0)-1;c[g>>2]=c[c[e>>2]>>2];c[l>>2]=Dw(c[g>>2]|0,c[f>>2]|0)|0;if(!(c[l>>2]|0)){i=m;return}d=(Dz(c[e>>2]|0,c[l>>2]|0)|0)!=0;e=c[g>>2]|0;if(!d){Sf(e,c[l>>2]|0);i=m;return}Sf(e,c[(c[(c[j>>2]|0)+4>>2]|0)+((c[h>>2]|0)*24|0)+16>>2]|0);c[(c[(c[j>>2]|0)+4>>2]|0)+((c[h>>2]|0)*24|0)+16>>2]=c[l>>2];c[k>>2]=c[(c[j>>2]|0)+8>>2];while(1){if(!(c[k>>2]|0))break;if((b[c[(c[k>>2]|0)+4>>2]>>1]|0)==(c[h>>2]|0))c[c[(c[k>>2]|0)+32>>2]>>2]=c[(c[(c[j>>2]|0)+4>>2]|0)+((c[h>>2]|0)*24|0)+16>>2];c[k>>2]=c[(c[k>>2]|0)+20>>2]}i=m;return}function Av(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+80|0;t=x+16|0;s=x+8|0;r=x;h=x+64|0;j=x+60|0;k=x+56|0;l=x+52|0;p=x+48|0;q=x+44|0;n=x+40|0;o=x+36|0;m=x+32|0;w=x+28|0;v=x+24|0;u=x+20|0;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[n>>2]=c[c[h>>2]>>2];do if((a[(c[n>>2]|0)+65>>0]|0)==0?(pz(c[h>>2]|0)|0)==0:0){if(c[l>>2]|0){b=(c[n>>2]|0)+69|0;a[b>>0]=(a[b>>0]|0)+1<<24>>24}c[p>>2]=_w(c[h>>2]|0,c[k>>2]|0,(c[j>>2]|0)+8|0)|0;if(c[l>>2]|0){b=(c[n>>2]|0)+69|0;a[b>>0]=(a[b>>0]|0)+-1<<24>>24}if(!(c[p>>2]|0)){if(!(c[l>>2]|0))break;zB(c[h>>2]|0,c[(c[j>>2]|0)+8+4>>2]|0);break}c[o>>2]=Dh(c[n>>2]|0,c[(c[p>>2]|0)+64>>2]|0)|0;if((d[(c[p>>2]|0)+42>>0]&16|0)!=0?(zx(c[h>>2]|0,c[p>>2]|0)|0)!=0:0)break;c[w>>2]=(c[o>>2]|0)==1?20769:20788;c[v>>2]=c[(c[(c[n>>2]|0)+16>>2]|0)+(c[o>>2]<<4)>>2];c[u>>2]=0;if(!(Mw(c[h>>2]|0,9,c[w>>2]|0,0,c[v>>2]|0)|0)){do if(c[k>>2]|0)if((c[o>>2]|0)==1){c[m>>2]=15;break}else{c[m>>2]=17;break}else{if(d[(c[p>>2]|0)+42>>0]&16){c[m>>2]=30;c[u>>2]=c[(c[(Ax(c[n>>2]|0,c[p>>2]|0)|0)+4>>2]|0)+4>>2];break}if((c[o>>2]|0)==1){c[m>>2]=13;break}else{c[m>>2]=11;break}}while(0);if((Mw(c[h>>2]|0,c[m>>2]|0,c[c[p>>2]>>2]|0,c[u>>2]|0,c[v>>2]|0)|0)==0?(Mw(c[h>>2]|0,9,c[c[p>>2]>>2]|0,0,c[v>>2]|0)|0)==0:0){if((zd(c[c[p>>2]>>2]|0,28715,7)|0)==0?(zd(c[c[p>>2]>>2]|0,36960,11)|0)!=0:0){w=c[h>>2]|0;c[r>>2]=c[c[p>>2]>>2];Ah(w,36972,r);break}if((c[k>>2]|0)!=0?(c[(c[p>>2]|0)+12>>2]|0)==0:0){w=c[h>>2]|0;c[s>>2]=c[c[p>>2]>>2];Ah(w,37e3,s);break}if((c[k>>2]|0)==0?(c[(c[p>>2]|0)+12>>2]|0)!=0:0){w=c[h>>2]|0;c[t>>2]=c[c[p>>2]>>2];Ah(w,37034,t);break}c[q>>2]=Pw(c[h>>2]|0)|0;if(c[q>>2]|0){ax(c[h>>2]|0,1,c[o>>2]|0);pC(c[h>>2]|0,c[o>>2]|0,31729,c[c[p>>2]>>2]|0);NG(c[h>>2]|0,c[j>>2]|0,c[p>>2]|0);OG(c[h>>2]|0,c[p>>2]|0,c[o>>2]|0,c[k>>2]|0)}}}}while(0);Yu(c[n>>2]|0,c[j>>2]|0);i=x;return}function Bv(e,f,g,h,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|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;D=i;i=i+96|0;w=D+88|0;n=D+84|0;o=D+80|0;p=D+76|0;x=D+72|0;y=D+68|0;q=D+64|0;r=D+60|0;t=D+56|0;A=D+52|0;C=D+48|0;B=D+40|0;v=D+16|0;u=D+12|0;s=D+8|0;z=D+4|0;c[w>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[x>>2]=j;c[y>>2]=k;c[q>>2]=l;c[r>>2]=m;c[u>>2]=0;c[z>>2]=c[c[w>>2]>>2];l=c[w>>2]|0;if((b[(c[w>>2]|0)+444>>1]|0)<=0){lv(l,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,1,0,c[r>>2]|0);c[t>>2]=c[(c[w>>2]|0)+488>>2];if((((c[t>>2]|0)!=0?(c[(c[w>>2]|0)+68>>2]|0)==0:0)?(tz(c[w>>2]|0,c[o>>2]|0,c[p>>2]|0,u)|0,c[s>>2]=Dh(c[z>>2]|0,c[(c[t>>2]|0)+64>>2]|0)|0,EB(v,c[w>>2]|0,c[s>>2]|0,36955,c[u>>2]|0),(GB(v,c[y>>2]|0)|0)==0):0)?(v=Hx(c[z>>2]|0,c[y>>2]|0,1)|0,c[(c[t>>2]|0)+12>>2]=v,v=vy(c[z>>2]|0,c[x>>2]|0,1)|0,c[(c[t>>2]|0)+24>>2]=v,(a[(c[z>>2]|0)+65>>0]|0)==0):0){v=(c[w>>2]|0)+508|0;c[B>>2]=c[v>>2];c[B+4>>2]=c[v+4>>2];if((a[c[B>>2]>>0]|0)!=59)c[B>>2]=(c[B>>2]|0)+(c[B+4>>2]|0);c[B+4>>2]=0;c[A>>2]=(c[B>>2]|0)-(c[c[n>>2]>>2]|0);c[C>>2]=c[c[n>>2]>>2];while(1){l=c[A>>2]|0;if(!(d[19267+(d[(c[C>>2]|0)+((c[A>>2]|0)-1)>>0]|0)>>0]&1))break;c[A>>2]=l+-1}c[B>>2]=(c[C>>2]|0)+(l-1);c[B+4>>2]=1;nv(c[w>>2]|0,0,B,0,0)}}else Ah(l,36919,D);Wu(c[z>>2]|0,c[y>>2]|0);Vu(c[z>>2]|0,c[x>>2]|0);i=D;return}function Cv(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,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;Da=i;i=i+432|0;w=Da;O=Da+412|0;P=Da+408|0;Q=Da+404|0;R=Da+400|0;$=Da+396|0;ga=Da+392|0;qa=Da+388|0;Ca=Da+384|0;l=Da+380|0;la=Da+376|0;pa=Da+372|0;M=Da+368|0;ma=Da+364|0;na=Da+360|0;sa=Da+356|0;ya=Da+344|0;za=Da+312|0;xa=Da+264|0;da=Da+256|0;Z=Da+252|0;ea=Da+248|0;o=Da+244|0;r=Da+240|0;m=Da+236|0;t=Da+232|0;p=Da+228|0;k=Da+208|0;s=Da+204|0;j=Da+200|0;v=Da+196|0;n=Da+192|0;u=Da+188|0;q=Da+184|0;x=Da+416|0;N=Da+152|0;aa=Da+148|0;ca=Da+144|0;fa=Da+140|0;ba=Da+136|0;_=Da+132|0;T=Da+128|0;Ba=Da+124|0;Aa=Da+120|0;ja=Da+116|0;z=Da+112|0;A=Da+108|0;oa=Da+104|0;S=Da+100|0;U=Da+96|0;ua=Da+92|0;W=Da+88|0;Y=Da+84|0;X=Da+80|0;V=Da+76|0;wa=Da+72|0;ta=Da+68|0;va=Da+64|0;ha=Da+60|0;ia=Da+56|0;ka=Da+52|0;ra=Da+48|0;H=Da+44|0;L=Da+40|0;E=Da+36|0;D=Da+32|0;I=Da+28|0;J=Da+24|0;G=Da+20|0;F=Da+16|0;K=Da+12|0;B=Da+418|0;c[P>>2]=f;c[Q>>2]=g;c[R>>2]=h;c[la>>2]=0;c[sa>>2]=1;c[ea>>2]=c[(c[P>>2]|0)+468>>2];h=(c[P>>2]|0)+472|0;f=c[h>>2]|0;c[h>>2]=f+1;c[(c[P>>2]|0)+468>>2]=f;c[Z>>2]=c[c[P>>2]>>2];if(((c[Q>>2]|0)!=0?(d[(c[Z>>2]|0)+65>>0]|0)==0:0)?(c[(c[P>>2]|0)+68>>2]|0)==0:0){if(Mw(c[P>>2]|0,21,0,0,0)|0){c[O>>2]=1;Ca=c[O>>2]|0;i=Da;return Ca|0}g=xa;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((d[c[R>>2]>>0]|0)<=8){Vu(c[Z>>2]|0,c[(c[Q>>2]|0)+48>>2]|0);c[(c[Q>>2]|0)+48>>2]=0;f=(c[Q>>2]|0)+6|0;b[f>>1]=e[f>>1]&-2}Kx(c[P>>2]|0,c[Q>>2]|0,0);c[za>>2]=0;c[za+4>>2]=0;c[za+8>>2]=0;c[za+12>>2]=0;c[za+16>>2]=0;c[za+20>>2]=0;c[za+24>>2]=0;c[za+28>>2]=0;c[za>>2]=c[(c[Q>>2]|0)+48>>2];c[pa>>2]=c[(c[Q>>2]|0)+32>>2];a:do if(((c[(c[P>>2]|0)+68>>2]|0)==0?(d[(c[Z>>2]|0)+65>>0]|0)==0:0)?(c[l>>2]=(e[(c[Q>>2]|0)+6>>1]&8|0)!=0&1,(VF(c[P>>2]|0,c[R>>2]|0,c[c[c[Q>>2]>>2]>>2]|0)|0)==0):0){c[$>>2]=0;while(1){if(c[(c[Q>>2]|0)+52>>2]|0)break;if((c[$>>2]|0)>=(c[c[pa>>2]>>2]|0))break;c[o>>2]=(c[pa>>2]|0)+8+((c[$>>2]|0)*72|0);c[r>>2]=c[(c[o>>2]|0)+20>>2];c[t>>2]=c[(c[o>>2]|0)+16>>2];if(c[r>>2]|0){if((b[(c[t>>2]|0)+34>>1]|0)!=(c[c[c[r>>2]>>2]>>2]|0)){y=17;break}c[m>>2]=(e[(c[r>>2]|0)+6>>1]&8|0)!=0&1;if(WF(c[P>>2]|0,c[Q>>2]|0,c[$>>2]|0,c[l>>2]|0,c[m>>2]|0)|0){if(c[m>>2]|0){c[l>>2]=1;f=(c[Q>>2]|0)+6|0;b[f>>1]=e[f>>1]|8}c[$>>2]=-1}c[pa>>2]=c[(c[Q>>2]|0)+32>>2];if(a[(c[Z>>2]|0)+65>>0]|0)break a;if((d[c[R>>2]>>0]|0)>8)c[za>>2]=c[(c[Q>>2]|0)+48>>2]}c[$>>2]=(c[$>>2]|0)+1}if((y|0)==17){Ca=c[P>>2]|0;Aa=c[c[t>>2]>>2]|0;Ba=c[c[c[r>>2]>>2]>>2]|0;c[w>>2]=b[(c[t>>2]|0)+34>>1];c[w+4>>2]=Aa;c[w+8>>2]=Ba;Ah(Ca,36434,w);break}c[Ca>>2]=Pw(c[P>>2]|0)|0;if(c[Ca>>2]|0){if(c[(c[Q>>2]|0)+52>>2]|0){c[sa>>2]=XF(c[P>>2]|0,c[Q>>2]|0,c[R>>2]|0)|0;c[(c[P>>2]|0)+468>>2]=c[ea>>2];c[O>>2]=c[sa>>2];Ca=c[O>>2]|0;i=Da;return Ca|0}c[$>>2]=0;while(1){if((c[$>>2]|0)>=(c[c[pa>>2]>>2]|0))break;c[p>>2]=(c[pa>>2]|0)+8+((c[$>>2]|0)*72|0);c[s>>2]=c[(c[p>>2]|0)+20>>2];do if(c[s>>2]|0){if(c[(c[p>>2]|0)+24>>2]|0){if((d[(c[p>>2]|0)+36+1>>0]|0)>>>4&1)break;Rw(c[Ca>>2]|0,14,c[(c[p>>2]|0)+28>>2]|0,c[(c[p>>2]|0)+24>>2]|0)|0;break}t=YF(c[Q>>2]|0)|0;w=(c[P>>2]|0)+464|0;c[w>>2]=(c[w>>2]|0)+t;if(!(d[(c[p>>2]|0)+36>>0]&32))ZF(c[Z>>2]|0,c[s>>2]|0,c[(c[Q>>2]|0)+36>>2]|0,c[(c[p>>2]|0)+44>>2]|0)|0;do if((c[c[pa>>2]>>2]|0)==1){if(e[(c[Q>>2]|0)+6>>1]&2){y=41;break}if(e[(c[Z>>2]|0)+60>>1]&256){y=41;break}c[j>>2]=(Bz(c[Ca>>2]|0)|0)+1;t=(c[P>>2]|0)+76|0;w=(c[t>>2]|0)+1|0;c[t>>2]=w;c[(c[p>>2]|0)+28>>2]=w;Vw(c[Ca>>2]|0,16,c[(c[p>>2]|0)+28>>2]|0,0,c[j>>2]|0)|0;c[(c[p>>2]|0)+24>>2]=c[j>>2];ZA(k,13,c[(c[p>>2]|0)+28>>2]|0);a[(c[p>>2]|0)+40>>0]=c[(c[P>>2]|0)+472>>2];Cv(c[P>>2]|0,c[s>>2]|0,k)|0;w=(c[s>>2]|0)+24|0;w=Hj(c[w>>2]|0,c[w+4>>2]|0)|0;b[(c[(c[p>>2]|0)+16>>2]|0)+38>>1]=w;w=(c[p>>2]|0)+36+1|0;a[w>>0]=a[w>>0]&-17|16;c[(c[p>>2]|0)+32>>2]=c[k+8>>2];xC(c[Ca>>2]|0,c[(c[p>>2]|0)+28>>2]|0);Fz(c[Ca>>2]|0,(c[j>>2]|0)-1|0);_F(c[P>>2]|0)}else y=41;while(0);if((y|0)==41){y=0;c[n>>2]=0;t=(c[P>>2]|0)+76|0;w=(c[t>>2]|0)+1|0;c[t>>2]=w;c[(c[p>>2]|0)+28>>2]=w;c[v>>2]=Rw(c[Ca>>2]|0,22,0,c[(c[p>>2]|0)+28>>2]|0)|0;c[(c[p>>2]|0)+24>>2]=(c[v>>2]|0)+1;if(!((d[(c[p>>2]|0)+36+1>>0]|0)>>>3&1))c[n>>2]=UA(c[P>>2]|0)|0;ZA(k,12,c[(c[p>>2]|0)+44>>2]|0);a[(c[p>>2]|0)+40>>0]=c[(c[P>>2]|0)+472>>2];Cv(c[P>>2]|0,c[s>>2]|0,k)|0;w=(c[s>>2]|0)+24|0;w=Hj(c[w>>2]|0,c[w+4>>2]|0)|0;b[(c[(c[p>>2]|0)+16>>2]|0)+38>>1]=w;if(c[n>>2]|0)Fz(c[Ca>>2]|0,c[n>>2]|0);c[u>>2]=xz(c[Ca>>2]|0,15,c[(c[p>>2]|0)+28>>2]|0)|0;wD(c[Ca>>2]|0,c[v>>2]|0,c[u>>2]|0);_F(c[P>>2]|0)}if(a[(c[Z>>2]|0)+65>>0]|0)break a;t=YF(c[Q>>2]|0)|0;w=(c[P>>2]|0)+464|0;c[w>>2]=(c[w>>2]|0)-t}while(0);c[$>>2]=(c[$>>2]|0)+1}c[la>>2]=c[c[Q>>2]>>2];c[M>>2]=c[(c[Q>>2]|0)+36>>2];c[ma>>2]=c[(c[Q>>2]|0)+40>>2];c[na>>2]=c[(c[Q>>2]|0)+44>>2];a[ya>>0]=(e[(c[Q>>2]|0)+6>>1]&1|0)!=0;if((e[(c[Q>>2]|0)+6>>1]&9|0)==1?(qy(c[za>>2]|0,c[la>>2]|0,-1)|0)==0:0){y=(c[Q>>2]|0)+6|0;b[y>>1]=e[y>>1]&-2;y=vy(c[Z>>2]|0,c[la>>2]|0,0)|0;c[(c[Q>>2]|0)+40>>2]=y;c[ma>>2]=y}if(c[za>>2]|0){c[q>>2]=$F(c[P>>2]|0,c[za>>2]|0,0,c[c[la>>2]>>2]|0)|0;w=(c[P>>2]|0)+72|0;y=c[w>>2]|0;c[w>>2]=y+1;c[za+8>>2]=y;c[za+20>>2]=Uw(c[Ca>>2]|0,57,c[za+8>>2]|0,(c[c[za>>2]>>2]|0)+1+(c[c[la>>2]>>2]|0)|0,0,c[q>>2]|0,-6)|0}else c[za+20>>2]=-1;if((d[c[R>>2]>>0]|0)==12)Rw(c[Ca>>2]|0,57,c[(c[R>>2]|0)+4>>2]|0,c[c[la>>2]>>2]|0)|0;c[da>>2]=Cz(c[Ca>>2]|0)|0;y=(c[Q>>2]|0)+24|0;c[y>>2]=-1;c[y+4>>2]=2147483647;aG(c[P>>2]|0,c[Q>>2]|0,c[da>>2]|0);if((c[(c[Q>>2]|0)+8>>2]|0)==0?(c[za+20>>2]|0)>=0:0){bG(c[Ca>>2]|0,c[za+20>>2]|0,58);y=za+28|0;a[y>>0]=d[y>>0]|1}if(e[(c[Q>>2]|0)+6>>1]&1){y=(c[P>>2]|0)+72|0;w=c[y>>2]|0;c[y>>2]=w+1;c[ya+4>>2]=w;w=c[Ca>>2]|0;y=c[ya+4>>2]|0;c[ya+8>>2]=Uw(w,57,y,0,0,$F(c[P>>2]|0,c[c[Q>>2]>>2]|0,0,0)|0,-6)|0;Fh(c[Ca>>2]|0,8);a[ya+1>>0]=3}else a[ya+1>>0]=0;if((c[l>>2]|0)==0&(c[ma>>2]|0)==0){b[x>>1]=(d[ya>>0]|0)!=0?1024:0;c[qa>>2]=RC(c[P>>2]|0,c[pa>>2]|0,c[M>>2]|0,c[za>>2]|0,c[c[Q>>2]>>2]|0,b[x>>1]|0,0)|0;if(!(c[qa>>2]|0))break;Aa=cG(c[qa>>2]|0)|0;va=C;Ba=(c[Q>>2]|0)+24|0;wa=c[Ba+4>>2]|0;if(va>>>0>>0|((va|0)==(wa|0)?Aa>>>0<(c[Ba>>2]|0)>>>0:0)){Aa=cG(c[qa>>2]|0)|0;Ba=(c[Q>>2]|0)+24|0;c[Ba>>2]=Aa;c[Ba+4>>2]=C}do if(d[ya>>0]|0){if(!(dG(c[qa>>2]|0)|0))break;a[ya+1>>0]=dG(c[qa>>2]|0)|0}while(0);do if(c[za>>2]|0){c[za+4>>2]=eG(c[qa>>2]|0)|0;if((c[za+4>>2]|0)!=(c[c[za>>2]>>2]|0))break;c[za>>2]=0}while(0);do if((c[za+20>>2]|0)>=0){if(c[za>>2]|0)break;pA(c[Ca>>2]|0,c[za+20>>2]|0)|0}while(0);ua=c[P>>2]|0;va=c[Q>>2]|0;wa=c[la>>2]|0;Aa=c[R>>2]|0;Ba=fG(c[qa>>2]|0)|0;hG(ua,va,wa,-1,za,ya,Aa,Ba,gG(c[qa>>2]|0)|0);SC(c[qa>>2]|0)}else{c[Ba>>2]=0;c[Aa>>2]=0;c[ja>>2]=0;g=c[Q>>2]|0;do if(c[ma>>2]|0){c[z>>2]=c[c[g>>2]>>2];c[A>>2]=c[(c[c[Q>>2]>>2]|0)+4>>2];while(1){if((c[z>>2]|0)<=0)break;b[(c[A>>2]|0)+16+2>>1]=0;c[z>>2]=(c[z>>2]|0)+-1;c[A>>2]=(c[A>>2]|0)+20}c[z>>2]=c[c[ma>>2]>>2];c[A>>2]=c[(c[ma>>2]|0)+4>>2];while(1){if((c[z>>2]|0)<=0)break;b[(c[A>>2]|0)+16+2>>1]=0;c[z>>2]=(c[z>>2]|0)+-1;c[A>>2]=(c[A>>2]|0)+20}A=(c[Q>>2]|0)+24|0;z=c[A+4>>2]|0;if(!(z>>>0>0|(z|0)==0&(c[A>>2]|0)>>>0>100))break;A=(c[Q>>2]|0)+24|0;c[A>>2]=100;c[A+4>>2]=0}else{A=g+24|0;c[A>>2]=1;c[A+4>>2]=0}while(0);if(!(qy(c[ma>>2]|0,c[za>>2]|0,-1)|0))c[ja>>2]=1;c[T>>2]=Cz(c[Ca>>2]|0)|0;c[N>>2]=0;c[N+4>>2]=0;c[N+8>>2]=0;c[N+12>>2]=0;c[N+16>>2]=0;c[N+20>>2]=0;c[N+24>>2]=0;c[N+28>>2]=0;c[N>>2]=c[P>>2];c[N+4>>2]=c[pa>>2];c[N+12>>2]=xa;c[xa+16>>2]=(c[(c[P>>2]|0)+76>>2]|0)+1;if(c[ma>>2]|0)g=c[c[ma>>2]>>2]|0;else g=0;c[xa+12>>2]=g;c[xa+24>>2]=c[ma>>2];iG(N,c[la>>2]|0);iG(N,c[za>>2]|0);if(c[na>>2]|0)jG(N,c[na>>2]|0);c[xa+36>>2]=c[xa+32>>2];c[$>>2]=0;while(1){if((c[$>>2]|0)>=(c[xa+44>>2]|0))break;A=N+28|0;b[A>>1]=e[A>>1]|8;iG(N,c[(c[(c[xa+40>>2]|0)+(c[$>>2]<<4)>>2]|0)+20>>2]|0);A=N+28|0;b[A>>1]=e[A>>1]&-9;c[$>>2]=(c[$>>2]|0)+1}c[xa+20>>2]=c[(c[P>>2]|0)+76>>2];if(a[(c[Z>>2]|0)+65>>0]|0)break;if(c[ma>>2]|0){L=(c[P>>2]|0)+72|0;N=c[L>>2]|0;c[L>>2]=N+1;c[xa+4>>2]=N;c[oa>>2]=$F(c[P>>2]|0,c[ma>>2]|0,0,c[xa+32>>2]|0)|0;c[X>>2]=Uw(c[Ca>>2]|0,58,c[xa+4>>2]|0,c[xa+12>>2]|0,0,c[oa>>2]|0,-6)|0;N=(c[P>>2]|0)+76|0;L=(c[N>>2]|0)+1|0;c[N>>2]=L;c[fa>>2]=L;L=(c[P>>2]|0)+76|0;N=(c[L>>2]|0)+1|0;c[L>>2]=N;c[ba>>2]=N;N=(c[P>>2]|0)+76|0;L=(c[N>>2]|0)+1|0;c[N>>2]=L;c[ua>>2]=L;c[U>>2]=Cz(c[Ca>>2]|0)|0;L=(c[P>>2]|0)+76|0;N=(c[L>>2]|0)+1|0;c[L>>2]=N;c[wa>>2]=N;c[V>>2]=Cz(c[Ca>>2]|0)|0;c[aa>>2]=(c[(c[P>>2]|0)+76>>2]|0)+1;N=(c[P>>2]|0)+76|0;c[N>>2]=(c[N>>2]|0)+(c[c[ma>>2]>>2]|0);c[ca>>2]=(c[(c[P>>2]|0)+76>>2]|0)+1;N=(c[P>>2]|0)+76|0;c[N>>2]=(c[N>>2]|0)+(c[c[ma>>2]>>2]|0);Rw(c[Ca>>2]|0,22,0,c[ba>>2]|0)|0;Rw(c[Ca>>2]|0,22,0,c[fa>>2]|0)|0;Vw(c[Ca>>2]|0,25,0,c[aa>>2]|0,(c[aa>>2]|0)+(c[c[ma>>2]>>2]|0)-1|0)|0;Rw(c[Ca>>2]|0,14,c[wa>>2]|0,c[V>>2]|0)|0;c[qa>>2]=RC(c[P>>2]|0,c[pa>>2]|0,c[M>>2]|0,c[ma>>2]|0,0,(256|((c[ja>>2]|0)!=0?2048:0))&65535,0)|0;if(!(c[qa>>2]|0))break;N=eG(c[qa>>2]|0)|0;if((N|0)==(c[c[ma>>2]>>2]|0))c[_>>2]=0;else{if(d[ya>>0]|0)g=(e[(c[Q>>2]|0)+6>>1]&1|0)==0;else g=0;kG(c[P>>2]|0,g?36474:36483);c[_>>2]=1;c[ia>>2]=c[c[ma>>2]>>2];c[ha>>2]=c[ia>>2];c[ga>>2]=c[ia>>2];c[$>>2]=0;while(1){if((c[$>>2]|0)>=(c[xa+32>>2]|0))break;if((c[(c[xa+28>>2]|0)+((c[$>>2]|0)*24|0)+12>>2]|0)>=(c[ga>>2]|0)){c[ha>>2]=(c[ha>>2]|0)+1;c[ga>>2]=(c[ga>>2]|0)+1}c[$>>2]=(c[$>>2]|0)+1}c[ta>>2]=kA(c[P>>2]|0,c[ha>>2]|0)|0;fC(c[P>>2]|0);GA(c[P>>2]|0,c[ma>>2]|0,c[ta>>2]|0,0,0)|0;c[ga>>2]=c[ia>>2];c[$>>2]=0;while(1){if((c[$>>2]|0)>=(c[xa+32>>2]|0))break;c[ka>>2]=(c[xa+28>>2]|0)+((c[$>>2]|0)*24|0);if((c[(c[ka>>2]|0)+12>>2]|0)>=(c[ga>>2]|0)){c[ra>>2]=(c[ga>>2]|0)+(c[ta>>2]|0);vD(c[P>>2]|0,c[c[ka>>2]>>2]|0,c[(c[ka>>2]|0)+8>>2]|0,c[(c[ka>>2]|0)+4>>2]|0,c[ra>>2]|0);c[ga>>2]=(c[ga>>2]|0)+1}c[$>>2]=(c[$>>2]|0)+1}c[va>>2]=Wz(c[P>>2]|0)|0;Vw(c[Ca>>2]|0,49,c[ta>>2]|0,c[ha>>2]|0,c[va>>2]|0)|0;Rw(c[Ca>>2]|0,109,c[xa+4>>2]|0,c[va>>2]|0)|0;_z(c[P>>2]|0,c[va>>2]|0);nA(c[P>>2]|0,c[ta>>2]|0,c[ha>>2]|0);SC(c[qa>>2]|0);ta=(c[P>>2]|0)+72|0;va=c[ta>>2]|0;c[ta>>2]=va+1;c[Ba>>2]=va;c[xa+8>>2]=va;c[Aa>>2]=Wz(c[P>>2]|0)|0;Vw(c[Ca>>2]|0,60,c[Ba>>2]|0,c[Aa>>2]|0,c[ha>>2]|0)|0;Rw(c[Ca>>2]|0,106,c[xa+4>>2]|0,c[T>>2]|0)|0;a[xa+1>>0]=1;fC(c[P>>2]|0)}do if(c[ja>>2]|0){if(e[(c[Z>>2]|0)+60>>1]&4)break;if((c[_>>2]|0)==0?(lG(c[qa>>2]|0)|0)==0:0)break;c[za>>2]=0;pA(c[Ca>>2]|0,c[za+20>>2]|0)|0}while(0);c[Y>>2]=Bz(c[Ca>>2]|0)|0;fC(c[P>>2]|0);if(c[_>>2]|0)Vw(c[Ca>>2]|0,100,c[xa+4>>2]|0,c[Aa>>2]|0,c[Ba>>2]|0)|0;c[ga>>2]=0;while(1){if((c[ga>>2]|0)>=(c[c[ma>>2]>>2]|0))break;if(c[_>>2]|0)Vw(c[Ca>>2]|0,47,c[Ba>>2]|0,c[ga>>2]|0,(c[ca>>2]|0)+(c[ga>>2]|0)|0)|0;else{a[xa>>0]=1;xA(c[P>>2]|0,c[(c[(c[ma>>2]|0)+4>>2]|0)+((c[ga>>2]|0)*20|0)>>2]|0,(c[ca>>2]|0)+(c[ga>>2]|0)|0)}c[ga>>2]=(c[ga>>2]|0)+1}ta=c[Ca>>2]|0;va=c[aa>>2]|0;Aa=c[ca>>2]|0;Ba=c[c[ma>>2]>>2]|0;Uw(ta,42,va,Aa,Ba,Vz(c[oa>>2]|0)|0,-6)|0;c[S>>2]=Bz(c[Ca>>2]|0)|0;Vw(c[Ca>>2]|0,43,(c[S>>2]|0)+1|0,0,(c[S>>2]|0)+1|0)|0;mG(c[P>>2]|0,c[ca>>2]|0,c[aa>>2]|0,c[c[ma>>2]>>2]|0);Rw(c[Ca>>2]|0,14,c[ua>>2]|0,c[U>>2]|0)|0;Rw(c[Ca>>2]|0,138,c[ba>>2]|0,c[T>>2]|0)|0;Rw(c[Ca>>2]|0,14,c[wa>>2]|0,c[V>>2]|0)|0;Fz(c[Ca>>2]|0,c[S>>2]|0);nG(c[P>>2]|0,xa);Rw(c[Ca>>2]|0,22,1,c[fa>>2]|0)|0;if(c[_>>2]|0)Rw(c[Ca>>2]|0,3,c[xa+4>>2]|0,c[Y>>2]|0)|0;else{SC(c[qa>>2]|0);pA(c[Ca>>2]|0,c[X>>2]|0)|0}Rw(c[Ca>>2]|0,14,c[ua>>2]|0,c[U>>2]|0)|0;Ez(c[Ca>>2]|0,c[T>>2]|0)|0;c[W>>2]=Bz(c[Ca>>2]|0)|0;Rw(c[Ca>>2]|0,22,1,c[ba>>2]|0)|0;xz(c[Ca>>2]|0,15,c[ua>>2]|0)|0;Gz(c[Ca>>2]|0,c[U>>2]|0);c[U>>2]=Bz(c[Ca>>2]|0)|0;Rw(c[Ca>>2]|0,138,c[fa>>2]|0,(c[U>>2]|0)+2|0)|0;xz(c[Ca>>2]|0,15,c[ua>>2]|0)|0;oG(c[P>>2]|0,xa);LA(c[P>>2]|0,c[na>>2]|0,(c[U>>2]|0)+1|0,16);hG(c[P>>2]|0,c[Q>>2]|0,c[c[Q>>2]>>2]|0,-1,za,ya,c[R>>2]|0,(c[U>>2]|0)+1|0,c[W>>2]|0);xz(c[Ca>>2]|0,15,c[ua>>2]|0)|0;Gz(c[Ca>>2]|0,c[V>>2]|0);pG(c[P>>2]|0,xa);xz(c[Ca>>2]|0,15,c[wa>>2]|0)|0}else{c[H>>2]=0;Ba=qG(c[Q>>2]|0,xa)|0;c[L>>2]=Ba;if(Ba){c[E>>2]=Dh(c[c[P>>2]>>2]|0,c[(c[L>>2]|0)+64>>2]|0)|0;Aa=(c[P>>2]|0)+72|0;Ba=c[Aa>>2]|0;c[Aa>>2]=Ba+1;c[D>>2]=Ba;c[J>>2]=0;c[G>>2]=0;c[F>>2]=c[(c[L>>2]|0)+28>>2];bx(c[P>>2]|0,c[E>>2]|0);yz(c[P>>2]|0,c[E>>2]|0,c[(c[L>>2]|0)+28>>2]|0,0,c[c[L>>2]>>2]|0);if(d[(c[L>>2]|0)+42>>0]&32)c[G>>2]=Ej(c[L>>2]|0)|0;c[I>>2]=c[(c[L>>2]|0)+8>>2];while(1){if(!(c[I>>2]|0))break;do if(!((d[(c[I>>2]|0)+55>>0]|0)>>>2&1)){if((b[(c[I>>2]|0)+48>>1]|0)>=(b[(c[L>>2]|0)+40>>1]|0))break;if(c[(c[I>>2]|0)+36>>2]|0)break;if((c[G>>2]|0)!=0?(b[(c[I>>2]|0)+48>>1]|0)>=(b[(c[G>>2]|0)+48>>1]|0):0)break;c[G>>2]=c[I>>2]}while(0);c[I>>2]=c[(c[I>>2]|0)+20>>2]}if(c[G>>2]|0){c[F>>2]=c[(c[G>>2]|0)+44>>2];c[J>>2]=Pz(c[P>>2]|0,c[G>>2]|0)|0}Eh(c[Ca>>2]|0,54,c[D>>2]|0,c[F>>2]|0,c[E>>2]|0,1)|0;if(c[J>>2]|0)Ih(c[Ca>>2]|0,-1,c[J>>2]|0,-6); +Rw(c[Ca>>2]|0,50,c[D>>2]|0,c[(c[xa+40>>2]|0)+8>>2]|0)|0;xz(c[Ca>>2]|0,61,c[D>>2]|0)|0;rG(c[P>>2]|0,c[L>>2]|0,c[G>>2]|0)}else{c[K>>2]=0;a[B>>0]=0;if(!(c[(c[Q>>2]|0)+44>>2]|0))a[B>>0]=sG(xa,K)|0;do if(a[B>>0]|0){c[K>>2]=vy(c[Z>>2]|0,c[K>>2]|0,0)|0;c[H>>2]=c[K>>2];if(a[(c[Z>>2]|0)+65>>0]|0)break;a[(c[(c[K>>2]|0)+4>>2]|0)+12>>0]=(d[B>>0]|0)!=1?1:0;a[c[c[(c[K>>2]|0)+4>>2]>>2]>>0]=-104}while(0);pG(c[P>>2]|0,xa);c[qa>>2]=RC(c[P>>2]|0,c[pa>>2]|0,c[M>>2]|0,c[K>>2]|0,0,d[B>>0]|0,0)|0;if(!(c[qa>>2]|0)){Vu(c[Z>>2]|0,c[H>>2]|0);break}nG(c[P>>2]|0,xa);if((eG(c[qa>>2]|0)|0)>0){Ba=c[Ca>>2]|0;Ez(Ba,gG(c[qa>>2]|0)|0)|0}SC(c[qa>>2]|0);oG(c[P>>2]|0,xa)}c[za>>2]=0;LA(c[P>>2]|0,c[na>>2]|0,c[T>>2]|0,16);hG(c[P>>2]|0,c[Q>>2]|0,c[c[Q>>2]>>2]|0,-1,0,0,c[R>>2]|0,c[T>>2]|0,c[T>>2]|0);Vu(c[Z>>2]|0,c[H>>2]|0)}Gz(c[Ca>>2]|0,c[T>>2]|0)}if((d[ya+1>>0]|0)==3)kG(c[P>>2]|0,36474);if(c[za>>2]|0){kG(c[P>>2]|0,(c[za+4>>2]|0)>0?36492:36515);tG(c[P>>2]|0,c[Q>>2]|0,za,c[c[la>>2]>>2]|0,c[R>>2]|0)}Gz(c[Ca>>2]|0,c[da>>2]|0);c[sa>>2]=(c[(c[P>>2]|0)+68>>2]|0)>0&1}}while(0);c[(c[P>>2]|0)+468>>2]=c[ea>>2];if((c[sa>>2]|0)==0?(d[c[R>>2]>>0]|0)==9:0)uG(c[P>>2]|0,c[pa>>2]|0,c[la>>2]|0);Sf(c[Z>>2]|0,c[xa+28>>2]|0);Sf(c[Z>>2]|0,c[xa+40>>2]|0);c[O>>2]=c[sa>>2];Ca=c[O>>2]|0;i=Da;return Ca|0}c[O>>2]=1;Ca=c[O>>2]|0;i=Da;return Ca|0}function Dv(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;m=n;f=n+24|0;g=n+20|0;l=n+16|0;k=n+12|0;j=n+8|0;h=n+4|0;c[f>>2]=a;c[g>>2]=d;if(!(c[(c[g>>2]|0)+52>>2]|0)){i=n;return}c[l>>2]=0;c[h>>2]=0;c[k>>2]=c[g>>2];while(1){if(!(c[k>>2]|0))break;c[(c[k>>2]|0)+56>>2]=c[l>>2];a=(c[k>>2]|0)+6|0;b[a>>1]=e[a>>1]|0|128;c[l>>2]=c[k>>2];c[k>>2]=c[(c[k>>2]|0)+52>>2];c[h>>2]=(c[h>>2]|0)+1}if((e[(c[g>>2]|0)+6>>1]|0)&512){i=n;return}a=c[(c[c[f>>2]>>2]|0)+88+16>>2]|0;c[j>>2]=a;if((a|0)<=0){i=n;return}if((c[h>>2]|0)<=(c[j>>2]|0)){i=n;return}Ah(c[f>>2]|0,36400,m);i=n;return}function Ev(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+48|0;v=x;k=x+44|0;l=x+40|0;m=x+36|0;n=x+32|0;o=x+28|0;p=x+24|0;q=x+20|0;r=x+16|0;s=x+12|0;u=x+8|0;t=x+4|0;c[l>>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]=j;c[t>>2]=c[c[l>>2]>>2];if((c[m>>2]|0)==0?(c[r>>2]|0)!=0|(c[s>>2]|0)!=0:0){j=c[l>>2]|0;c[v>>2]=(c[r>>2]|0)!=0?36355:36358;Ah(j,36364,v)}else w=4;if(((w|0)==4?(c[m>>2]=Nv(c[t>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0,(c[m>>2]|0)!=0):0)?(c[c[m>>2]>>2]|0)!=0:0){c[u>>2]=(c[m>>2]|0)+8+(((c[c[m>>2]>>2]|0)-1|0)*72|0);if(c[(c[p>>2]|0)+4>>2]|0){w=Dw(c[t>>2]|0,c[p>>2]|0)|0;c[(c[u>>2]|0)+12>>2]=w}c[(c[u>>2]|0)+20>>2]=c[q>>2];c[(c[u>>2]|0)+48>>2]=c[r>>2];c[(c[u>>2]|0)+52>>2]=c[s>>2];c[k>>2]=c[m>>2];w=c[k>>2]|0;i=x;return w|0}Zu(c[t>>2]|0,c[r>>2]|0);_u(c[t>>2]|0,c[s>>2]|0);Wu(c[t>>2]|0,c[q>>2]|0);c[k>>2]=0;w=c[k>>2]|0;i=x;return w|0}function Fv(d,e,f,g,h,j,k,l,m,n){d=d|0;e=e|0;f=f|0;g=g|0;h=h|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;B=i;i=i+128|0;o=B+112|0;p=B+108|0;q=B+104|0;r=B+100|0;s=B+96|0;t=B+92|0;u=B+88|0;v=B+116|0;w=B+84|0;x=B+80|0;z=B+76|0;A=B;y=B+72|0;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=j;c[u>>2]=k;b[v>>1]=l;c[w>>2]=m;c[x>>2]=n;c[y>>2]=c[c[o>>2]>>2];l=Fw(c[y>>2]|0,72,0)|0;c[z>>2]=l;c[z>>2]=(c[z>>2]|0)==0?A:l;if(!(c[p>>2]|0)){l=c[o>>2]|0;c[p>>2]=Gv(l,0,Jv(c[y>>2]|0,158,0)|0)|0}c[c[z>>2]>>2]=c[p>>2];a[(c[z>>2]|0)+4>>0]=119;b[(c[z>>2]|0)+6>>1]=b[v>>1]|0;c[(c[z>>2]|0)+8>>2]=0;c[(c[z>>2]|0)+12>>2]=0;c[(c[z>>2]|0)+16>>2]=-1;c[(c[z>>2]|0)+16+4>>2]=-1;l=(c[z>>2]|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;if(!(c[q>>2]|0))c[q>>2]=ph(c[y>>2]|0,80,0)|0;c[(c[z>>2]|0)+32>>2]=c[q>>2];c[(c[z>>2]|0)+36>>2]=c[r>>2];c[(c[z>>2]|0)+40>>2]=c[s>>2];c[(c[z>>2]|0)+44>>2]=c[t>>2];c[(c[z>>2]|0)+48>>2]=c[u>>2];c[(c[z>>2]|0)+52>>2]=0;c[(c[z>>2]|0)+56>>2]=0;c[(c[z>>2]|0)+60>>2]=c[w>>2];c[(c[z>>2]|0)+64>>2]=c[x>>2];c[(c[z>>2]|0)+68>>2]=0;if(!(a[(c[y>>2]|0)+65>>0]|0)){A=c[z>>2]|0;i=B;return A|0}Xu(c[y>>2]|0,c[z>>2]|0,(c[z>>2]|0)!=(A|0)&1);c[z>>2]=0;A=c[z>>2]|0;i=B;return A|0}function Gv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;f=l+24|0;m=l+20|0;g=l+16|0;h=l+12|0;j=l+8|0;e=l+4|0;k=l;c[m>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=c[c[m>>2]>>2];if(!(c[g>>2]|0)){c[g>>2]=Fw(c[j>>2]|0,8,0)|0;if((c[g>>2]|0)!=0?(c[c[g>>2]>>2]=0,m=Fw(c[j>>2]|0,20,0)|0,c[(c[g>>2]|0)+4>>2]=m,(c[(c[g>>2]|0)+4>>2]|0)!=0):0)e=7;else e=8}else if(!(c[c[g>>2]>>2]&(c[c[g>>2]>>2]|0)-1)){c[e>>2]=Ew(c[j>>2]|0,c[(c[g>>2]|0)+4>>2]|0,(c[c[g>>2]>>2]<<1)*20|0,0)|0;if(!(c[e>>2]|0))e=8;else{c[(c[g>>2]|0)+4>>2]=c[e>>2];e=7}}else e=7;if((e|0)==7){j=c[g>>2]|0;m=c[j>>2]|0;c[j>>2]=m+1;c[k>>2]=(c[(c[g>>2]|0)+4>>2]|0)+(m*20|0);m=c[k>>2]|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[c[k>>2]>>2]=c[h>>2];c[f>>2]=c[g>>2];m=c[f>>2]|0;i=l;return m|0}else if((e|0)==8){Zu(c[j>>2]|0,c[h>>2]|0);Vu(c[j>>2]|0,c[g>>2]|0);c[f>>2]=0;m=c[f>>2]|0;i=l;return m|0}return 0}function Hv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;j=l+4|0;k=l;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;if(!(c[g>>2]|0)){i=l;return}c[k>>2]=(c[(c[g>>2]|0)+4>>2]|0)+(((c[c[g>>2]>>2]|0)-1|0)*20|0);a=Iw(c[c[f>>2]>>2]|0,c[c[h>>2]>>2]|0,c[(c[h>>2]|0)+4>>2]|0,0)|0;c[(c[k>>2]|0)+4>>2]=a;if(!(c[j>>2]|0)){i=l;return}if(!(c[(c[k>>2]|0)+4>>2]|0)){i=l;return}Jw(c[(c[k>>2]|0)+4>>2]|0)|0;i=l;return}function Iv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;k=j+16|0;e=j+12|0;f=j+8|0;g=j+4|0;h=j;c[k>>2]=a;c[e>>2]=b;c[f>>2]=d;c[g>>2]=c[c[k>>2]>>2];if(!(c[e>>2]|0)){i=j;return}c[h>>2]=(c[(c[e>>2]|0)+4>>2]|0)+(((c[c[e>>2]>>2]|0)-1|0)*20|0);Sf(c[g>>2]|0,c[(c[h>>2]|0)+8>>2]|0);k=(c[(c[f>>2]|0)+8>>2]|0)-(c[(c[f>>2]|0)+4>>2]|0)|0;k=Iw(c[g>>2]|0,c[(c[f>>2]|0)+4>>2]|0,k,((k|0)<0)<<31>>31)|0;c[(c[h>>2]|0)+8>>2]=k;i=j;return}function Jv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+32|0;f=j+16|0;g=j+12|0;e=j+8|0;h=j;c[f>>2]=a;c[g>>2]=b;c[e>>2]=d;c[h>>2]=c[e>>2];if(c[e>>2]|0)e=If(c[e>>2]|0)|0;else e=0;c[h+4>>2]=e;h=cz(c[f>>2]|0,c[g>>2]|0,h,0)|0;i=j;return h|0}function Kv(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;if(!(c[d>>2]|0)){i=f;return}c[e>>2]=(c[c[d>>2]>>2]|0)-1;while(1){if((c[e>>2]|0)<=0)break;a[(c[d>>2]|0)+8+((c[e>>2]|0)*72|0)+36>>0]=a[(c[d>>2]|0)+8+(((c[e>>2]|0)-1|0)*72|0)+36>>0]|0;c[e>>2]=(c[e>>2]|0)+-1}a[(c[d>>2]|0)+8+36>>0]=0;i=f;return}function Lv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;if(!(c[g>>2]|0)){i=k;return}if((c[c[g>>2]>>2]|0)<=0){i=k;return}c[j>>2]=(c[g>>2]|0)+8+(((c[c[g>>2]>>2]|0)-1|0)*72|0);if((c[(c[h>>2]|0)+4>>2]|0)==1?(c[c[h>>2]>>2]|0)==0:0){b=(c[j>>2]|0)+36+1|0;a[b>>0]=a[b>>0]&-2|1;i=k;return}b=Dw(c[c[f>>2]>>2]|0,c[h>>2]|0)|0;c[(c[j>>2]|0)+64>>2]=b;b=(c[j>>2]|0)+36+1|0;a[b>>0]=a[b>>0]&-3|((c[(c[j>>2]|0)+64>>2]|0)!=0&1)<<1&255;i=k;return}function Mv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;if(c[g>>2]|0){c[j>>2]=(c[g>>2]|0)+8+(((c[c[g>>2]>>2]|0)-1|0)*72|0);c[(c[j>>2]|0)+64>>2]=c[h>>2];b=(c[j>>2]|0)+36+1|0;a[b>>0]=a[b>>0]&-5|4;i=k;return}else{Vu(c[c[f>>2]>>2]|0,c[h>>2]|0);i=k;return}}function Nv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+24|0;h=o+20|0;j=o+16|0;k=o+12|0;l=o+8|0;m=o+4|0;n=o;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;do if(!(c[j>>2]|0)){c[j>>2]=Fw(c[h>>2]|0,80,0)|0;if(c[j>>2]|0){c[(c[j>>2]|0)+4>>2]=1;c[c[j>>2]>>2]=0;break}c[g>>2]=0;n=c[g>>2]|0;i=o;return n|0}while(0);c[j>>2]=UF(c[h>>2]|0,c[j>>2]|0,1,c[c[j>>2]>>2]|0)|0;if(a[(c[h>>2]|0)+65>>0]|0){Yu(c[h>>2]|0,c[j>>2]|0);c[g>>2]=0;n=c[g>>2]|0;i=o;return n|0}c[m>>2]=(c[j>>2]|0)+8+(((c[c[j>>2]>>2]|0)-1|0)*72|0);if((c[l>>2]|0)!=0?(c[c[l>>2]>>2]|0)==0:0)c[l>>2]=0;if(c[l>>2]|0){c[n>>2]=c[l>>2];c[l>>2]=c[k>>2];c[k>>2]=c[n>>2]}n=Dw(c[h>>2]|0,c[k>>2]|0)|0;c[(c[m>>2]|0)+8>>2]=n;n=Dw(c[h>>2]|0,c[l>>2]|0)|0;c[(c[m>>2]|0)+4>>2]=n;c[g>>2]=c[j>>2];n=c[g>>2]|0;i=o;return n|0}function Ov(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+80|0;r=u+16|0;q=u;g=u+64|0;h=u+60|0;j=u+56|0;k=u+52|0;o=u+48|0;l=u+36|0;p=u+32|0;m=u+28|0;n=u+24|0;s=u+20|0;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;c[o>>2]=0;c[l>>2]=c[h>>2];c[l+4>>2]=c[j>>2];c[l+8>>2]=c[k>>2];c[m>>2]=0;while(1){if((c[m>>2]|0)>=3)break;if(!(c[l+(c[m>>2]<<2)>>2]|0))break;c[p>>2]=c[l+(c[m>>2]<<2)>>2];c[n>>2]=0;while(1){if((c[n>>2]|0)>=7)break;if((c[(c[p>>2]|0)+4>>2]|0)==(d[36199+((c[n>>2]|0)*3|0)+1>>0]|0|0)?(zd(c[c[p>>2]>>2]|0,36220+(d[36199+((c[n>>2]|0)*3|0)>>0]|0)|0,c[(c[p>>2]|0)+4>>2]|0)|0)==0:0){t=8;break}c[n>>2]=(c[n>>2]|0)+1}if((t|0)==8){t=0;c[o>>2]=c[o>>2]|(d[36199+((c[n>>2]|0)*3|0)+2>>0]|0)}if((c[n>>2]|0)>=7){t=11;break}c[m>>2]=(c[m>>2]|0)+1}if((t|0)==11)c[o>>2]=c[o>>2]|64;if((c[o>>2]&33|0)!=33?(c[o>>2]&64|0)==0:0){if(!(c[o>>2]&32)){t=c[o>>2]|0;i=u;return t|0}if((c[o>>2]&24|0)==8){t=c[o>>2]|0;i=u;return t|0}Ah(c[g>>2]|0,36300,r);c[o>>2]=1;t=c[o>>2]|0;i=u;return t|0}c[s>>2]=36254;if(!(c[k>>2]|0))c[s>>2]=(c[s>>2]|0)+1;t=c[g>>2]|0;a=c[j>>2]|0;r=c[s>>2]|0;s=c[k>>2]|0;c[q>>2]=c[h>>2];c[q+4>>2]=a;c[q+8>>2]=r;c[q+12>>2]=s;Ah(t,36256,q);c[o>>2]=1;t=c[o>>2]|0;i=u;return t|0}function Pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=b;c[f>>2]=d;if((c[e>>2]|0)==0|(c[f>>2]|0)<0){i=g;return}a[(c[(c[e>>2]|0)+4>>2]|0)+(((c[c[e>>2]>>2]|0)-1|0)*20|0)+12>>0]=c[f>>2];i=g;return}function Qv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;f=j+4|0;g=j;h=j+8|0;c[f>>2]=b;c[g>>2]=d;a[h>>0]=e;if(!(c[g>>2]|0)){i=j;return}c[(c[g>>2]|0)+4>>2]=c[(c[f>>2]|0)+536>>2];c[(c[f>>2]|0)+536>>2]=c[g>>2];if(!(a[h>>0]|0)){i=j;return}c[(c[f>>2]|0)+540>>2]=c[g>>2];i=j;return}function Rv(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=i;i=i+192|0;H=Y+180|0;I=Y+176|0;J=Y+172|0;X=Y+168|0;V=Y+164|0;t=Y+160|0;N=Y+156|0;G=Y+152|0;T=Y+148|0;n=Y+144|0;O=Y+140|0;Q=Y+136|0;o=Y+132|0;M=Y+128|0;W=Y+120|0;r=Y+88|0;l=Y+84|0;S=Y+80|0;q=Y+76|0;z=Y+72|0;w=Y+64|0;K=Y+60|0;U=Y+56|0;m=Y+52|0;p=Y+188|0;B=Y+48|0;D=Y+186|0;P=Y+44|0;C=Y+40|0;v=Y+36|0;L=Y+32|0;j=Y+28|0;R=Y+24|0;E=Y+20|0;x=Y+16|0;s=Y+184|0;k=Y+12|0;F=Y+8|0;y=Y+4|0;A=Y;c[H>>2]=f;c[I>>2]=g;c[J>>2]=h;c[O>>2]=0;c[Q>>2]=0;c[S>>2]=-1;c[K>>2]=0;c[m>>2]=0;b[p>>1]=1;c[P>>2]=0;c[C>>2]=0;c[v>>2]=0;c[L>>2]=0;c[j>>2]=0;c[W>>2]=0;c[W+4>>2]=0;c[M>>2]=c[c[H>>2]>>2];a:do if(((c[(c[H>>2]|0)+68>>2]|0)==0?(d[(c[M>>2]|0)+65>>0]|0)==0:0)?(c[V>>2]=DB(c[H>>2]|0,c[I>>2]|0)|0,(c[V>>2]|0)!=0):0){c[E>>2]=sC(c[H>>2]|0,c[V>>2]|0,109,0,0)|0;c[R>>2]=(c[(c[V>>2]|0)+12>>2]|0)!=0&1;if(c[E>>2]|0)f=1;else f=(DE(c[H>>2]|0,c[V>>2]|0,0,0)|0)!=0;c[x>>2]=f&1;if(((zx(c[H>>2]|0,c[V>>2]|0)|0)==0?(tC(c[H>>2]|0,c[V>>2]|0,(c[E>>2]|0)!=0?1:0)|0)==0:0)?(c[l>>2]=Dh(c[M>>2]|0,c[(c[V>>2]|0)+64>>2]|0)|0,c[t>>2]=c[(c[(c[M>>2]|0)+16>>2]|0)+(c[l>>2]<<4)>>2],c[q>>2]=Mw(c[H>>2]|0,9,c[c[V>>2]>>2]|0,0,c[t>>2]|0)|0,(c[q>>2]|0)!=1):0){h=(c[H>>2]|0)+72|0;t=c[h>>2]|0;c[h>>2]=t+1;c[(c[I>>2]|0)+8+44>>2]=t;c[n>>2]=t;c[o>>2]=0;c[T>>2]=c[(c[V>>2]|0)+8>>2];while(1){if(!(c[T>>2]|0))break;t=(c[H>>2]|0)+72|0;c[t>>2]=(c[t>>2]|0)+1;c[T>>2]=c[(c[T>>2]|0)+20>>2];c[o>>2]=(c[o>>2]|0)+1}if(c[R>>2]|0)PF(c[H>>2]|0,W,c[c[V>>2]>>2]|0);c[X>>2]=Pw(c[H>>2]|0)|0;if(c[X>>2]|0){if(!(d[(c[H>>2]|0)+18>>0]|0))uC(c[X>>2]|0);ax(c[H>>2]|0,1,c[l>>2]|0);if(c[R>>2]|0){QF(c[H>>2]|0,c[V>>2]|0,c[J>>2]|0,c[n>>2]|0);t=c[n>>2]|0;c[Q>>2]=t;c[O>>2]=t}c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[r+24>>2]=0;c[r+28>>2]=0;c[r>>2]=c[H>>2];c[r+4>>2]=c[I>>2];if(!(fy(r,c[J>>2]|0)|0)){if(c[(c[M>>2]|0)+24>>2]&128){r=(c[H>>2]|0)+76|0;t=(c[r>>2]|0)+1|0;c[r>>2]=t;c[S>>2]=t;Rw(c[X>>2]|0,22,0,c[S>>2]|0)|0}b:do if(!((c[q>>2]|0)==0&(c[J>>2]|0)==0^1|(c[x>>2]|0)!=0)?(d[(c[V>>2]|0)+42>>0]&16|0)==0:0){yz(c[H>>2]|0,c[l>>2]|0,c[(c[V>>2]|0)+28>>2]|0,1,c[c[V>>2]>>2]|0);if(!(d[(c[V>>2]|0)+42>>0]&32))Uw(c[X>>2]|0,119,c[(c[V>>2]|0)+28>>2]|0,c[l>>2]|0,c[S>>2]|0,c[c[V>>2]>>2]|0,-2)|0;c[T>>2]=c[(c[V>>2]|0)+8>>2];while(1){if(!(c[T>>2]|0))break b;Rw(c[X>>2]|0,119,c[(c[T>>2]|0)+44>>2]|0,c[l>>2]|0)|0;c[T>>2]=c[(c[T>>2]|0)+20>>2]}}else u=29;while(0);c:do if((u|0)==29){b[s>>1]=12;b[s>>1]=e[s>>1]|((c[x>>2]|0)!=0?0:8192);if(!(d[(c[V>>2]|0)+42>>0]&32)){c[U>>2]=0;b[p>>1]=1;t=(c[H>>2]|0)+76|0;u=(c[t>>2]|0)+1|0;c[t>>2]=u;c[C>>2]=u;Rw(c[X>>2]|0,25,0,c[C>>2]|0)|0}else{c[U>>2]=Ej(c[V>>2]|0)|0;b[p>>1]=b[(c[U>>2]|0)+50>>1]|0;c[m>>2]=(c[(c[H>>2]|0)+76>>2]|0)+1;t=(c[H>>2]|0)+76|0;c[t>>2]=(c[t>>2]|0)+(b[p>>1]|0);t=(c[H>>2]|0)+72|0;u=c[t>>2]|0;c[t>>2]=u+1;c[P>>2]=u;c[j>>2]=Rw(c[X>>2]|0,57,c[P>>2]|0,b[p>>1]|0)|0;Az(c[H>>2]|0,c[U>>2]|0)}c[G>>2]=RC(c[H>>2]|0,c[I>>2]|0,c[J>>2]|0,0,0,b[s>>1]|0,(c[n>>2]|0)+1|0)|0;if(!(c[G>>2]|0))break a;c[z>>2]=SF(c[G>>2]|0,w)|0;if(c[(c[M>>2]|0)+24>>2]&128)Rw(c[X>>2]|0,37,c[S>>2]|0,1)|0;do if(c[U>>2]|0){c[N>>2]=0;while(1){if((c[N>>2]|0)>=(b[p>>1]|0))break;tA(c[X>>2]|0,c[V>>2]|0,c[n>>2]|0,b[(c[(c[U>>2]|0)+4>>2]|0)+(c[N>>2]<<1)>>1]|0,(c[m>>2]|0)+(c[N>>2]|0)|0);c[N>>2]=(c[N>>2]|0)+1}c[B>>2]=c[m>>2]}else{c[B>>2]=(c[(c[H>>2]|0)+76>>2]|0)+1;c[B>>2]=zA(c[H>>2]|0,c[V>>2]|0,-1,c[n>>2]|0,c[B>>2]|0,0)|0;if((c[B>>2]|0)<=(c[(c[H>>2]|0)+76>>2]|0))break;c[(c[H>>2]|0)+76>>2]=c[B>>2]}while(0);do if(!(c[z>>2]|0))if(c[U>>2]|0){r=(c[H>>2]|0)+76|0;q=(c[r>>2]|0)+1|0;c[r>>2]=q;c[B>>2]=q;b[D>>1]=0;q=c[X>>2]|0;r=c[m>>2]|0;s=b[p>>1]|0;t=c[B>>2]|0;u=dC(c[c[H>>2]>>2]|0,c[U>>2]|0)|0;Uw(q,49,r,s,t,u,b[p>>1]|0)|0;Rw(c[X>>2]|0,110,c[P>>2]|0,c[B>>2]|0)|0;break}else{b[D>>1]=1;Rw(c[X>>2]|0,129,c[C>>2]|0,c[B>>2]|0)|0;break}else{b[D>>1]=b[p>>1]|0;u=(c[o>>2]|0)+2|0;c[K>>2]=Fw(c[M>>2]|0,u,((u|0)<0)<<31>>31)|0;if(!(c[K>>2]|0)){SC(c[G>>2]|0);break a}kR(c[K>>2]|0,1,(c[o>>2]|0)+1|0)|0;a[(c[K>>2]|0)+((c[o>>2]|0)+1)>>0]=0;if((c[w>>2]|0)>=0)a[(c[K>>2]|0)+((c[w>>2]|0)-(c[n>>2]|0))>>0]=0;if((c[w+4>>2]|0)>=0)a[(c[K>>2]|0)+((c[w+4>>2]|0)-(c[n>>2]|0))>>0]=0;if(!(c[j>>2]|0))break;pA(c[X>>2]|0,c[j>>2]|0)|0}while(0);if(c[z>>2]|0)c[v>>2]=Cz(c[X>>2]|0)|0;else SC(c[G>>2]|0);do if(!(c[R>>2]|0)){c[k>>2]=0;if((c[z>>2]|0)==2)c[k>>2]=UA(c[H>>2]|0)|0;gC(c[H>>2]|0,c[V>>2]|0,55,8,c[n>>2]|0,c[K>>2]|0,O,Q)|0;if((c[z>>2]|0)!=2)break;Fz(c[X>>2]|0,c[k>>2]|0)}while(0);do if(!(c[z>>2]|0)){f=c[X>>2]|0;if(c[U>>2]|0){c[L>>2]=xz(f,108,c[P>>2]|0)|0;Rw(c[X>>2]|0,101,c[P>>2]|0,c[B>>2]|0)|0;break}else{c[L>>2]=Vw(f,130,c[C>>2]|0,0,c[B>>2]|0)|0;break}}else{if(d[(c[V>>2]|0)+42>>0]&16)break;if(!(d[(c[K>>2]|0)+((c[O>>2]|0)-(c[n>>2]|0))>>0]|0))break;Eh(c[X>>2]|0,68,c[O>>2]|0,c[v>>2]|0,c[B>>2]|0,b[D>>1]|0)|0}while(0);do if(d[(c[V>>2]|0)+42>>0]&16){c[F>>2]=Ax(c[M>>2]|0,c[V>>2]|0)|0;EC(c[H>>2]|0,c[V>>2]|0);Uw(c[X>>2]|0,12,0,1,c[B>>2]|0,c[F>>2]|0,-10)|0;Fh(c[X>>2]|0,2);Bx(c[H>>2]|0);if((c[z>>2]|0)!=1)break;if(c[(c[H>>2]|0)+416>>2]|0)break;a[(c[H>>2]|0)+20>>0]=0}else{c[y>>2]=(d[(c[H>>2]|0)+18>>0]|0)==0&1;c[A>>2]=-1;do if(!(c[x>>2]|0)){if((c[w+4>>2]|0)==(c[O>>2]|0))break;c[A>>2]=c[w+4>>2]}while(0);FE(c[H>>2]|0,c[V>>2]|0,c[E>>2]|0,c[O>>2]|0,c[Q>>2]|0,c[B>>2]|0,b[D>>1]|0,c[y>>2]&255,10,c[z>>2]&255,c[A>>2]|0)}while(0);do if(!(c[z>>2]|0)){f=c[X>>2]|0;if(c[U>>2]|0){Rw(f,7,c[P>>2]|0,(c[L>>2]|0)+1|0)|0;Fz(c[X>>2]|0,c[L>>2]|0);break}else{Ez(f,c[L>>2]|0)|0;Fz(c[X>>2]|0,c[L>>2]|0);break}}else{Gz(c[X>>2]|0,c[v>>2]|0);SC(c[G>>2]|0)}while(0);if(c[R>>2]|0)break;if(d[(c[V>>2]|0)+42>>0]&16)break;if(!(c[U>>2]|0))xz(c[X>>2]|0,61,c[O>>2]|0)|0;c[N>>2]=0;c[T>>2]=c[(c[V>>2]|0)+8>>2];while(1){if(!(c[T>>2]|0))break c;xz(c[X>>2]|0,61,(c[Q>>2]|0)+(c[N>>2]|0)|0)|0;c[N>>2]=(c[N>>2]|0)+1;c[T>>2]=c[(c[T>>2]|0)+20>>2]}}while(0);if((d[(c[H>>2]|0)+18>>0]|0)==0?(c[(c[H>>2]|0)+420>>2]|0)==0:0)IC(c[H>>2]|0);if(((c[(c[M>>2]|0)+24>>2]&128|0)!=0?(a[(c[H>>2]|0)+18>>0]|0)==0:0)?(c[(c[H>>2]|0)+420>>2]|0)==0:0){Rw(c[X>>2]|0,33,c[S>>2]|0,1)|0;OB(c[X>>2]|0,1);PB(c[X>>2]|0,0,0,36186,0)|0}}}}}while(0);TF(W);Yu(c[M>>2]|0,c[I>>2]|0);Zu(c[M>>2]|0,c[J>>2]|0);Sf(c[M>>2]|0,c[K>>2]|0);i=Y;return}function Sv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k;e=k+16|0;f=k+12|0;g=k+8|0;h=k+4|0;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=c[(c[c[e>>2]>>2]|0)+88+8>>2];if(!(c[f>>2]|0)){i=k;return}if((c[c[f>>2]>>2]|0)<=(c[h>>2]|0)){i=k;return}d=c[e>>2]|0;c[j>>2]=c[g>>2];Ah(d,36163,j);i=k;return}function Tv(f,g,h,j,k){f=f|0;g=g|0;h=h|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,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;oa=i;i=i+256|0;q=oa;X=oa+244|0;Y=oa+240|0;Z=oa+236|0;_=oa+232|0;K=oa+228|0;da=oa+224|0;C=oa+220|0;ka=oa+216|0;ba=oa+212|0;x=oa+208|0;na=oa+204|0;ia=oa+200|0;ja=oa+196|0;v=oa+192|0;t=oa+188|0;ea=oa+184|0;ga=oa+180|0;ca=oa+176|0;L=oa+172|0;aa=oa+168|0;$=oa+164|0;y=oa+254|0;B=oa+253|0;O=oa+252|0;z=oa+160|0;ma=oa+152|0;p=oa+120|0;l=oa+112|0;R=oa+108|0;P=oa+104|0;ha=oa+100|0;W=oa+96|0;H=oa+92|0;S=oa+88|0;G=oa+84|0;D=oa+80|0;fa=oa+76|0;Q=oa+72|0;s=oa+64|0;la=oa+56|0;V=oa+52|0;U=oa+48|0;I=oa+44|0;F=oa+40|0;A=oa+36|0;T=oa+32|0;n=oa+28|0;o=oa+24|0;m=oa+250|0;u=oa+20|0;w=oa+248|0;r=oa+16|0;E=oa+12|0;M=oa+8|0;N=oa+4|0;c[X>>2]=f;c[Y>>2]=g;c[Z>>2]=h;c[_>>2]=j;c[K>>2]=k;c[ba>>2]=0;c[L>>2]=0;c[aa>>2]=0;c[z>>2]=0;c[fa>>2]=0;c[Q>>2]=0;c[la>>2]=0;c[V>>2]=0;c[U>>2]=0;c[I>>2]=0;c[F>>2]=0;c[A>>2]=0;c[T>>2]=0;c[ma>>2]=0;c[ma+4>>2]=0;c[ca>>2]=c[c[X>>2]>>2];if(c[(c[X>>2]|0)+68>>2]|0){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}if(d[(c[ca>>2]|0)+65>>0]|0){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}c[ka>>2]=DB(c[X>>2]|0,c[Y>>2]|0)|0;if(!(c[ka>>2]|0)){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}c[l>>2]=Dh(c[c[X>>2]>>2]|0,c[(c[ka>>2]|0)+64>>2]|0)|0;c[S>>2]=sC(c[X>>2]|0,c[ka>>2]|0,110,c[Z>>2]|0,G)|0;c[H>>2]=(c[(c[ka>>2]|0)+12>>2]|0)!=0&1;if(zx(c[X>>2]|0,c[ka>>2]|0)|0){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}if(tC(c[X>>2]|0,c[ka>>2]|0,c[G>>2]|0)|0){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}g=(c[X>>2]|0)+72|0;j=c[g>>2]|0;c[g>>2]=j+1;c[ea>>2]=j;c[t>>2]=j;c[(c[Y>>2]|0)+8+44>>2]=j;c[ga>>2]=(c[ea>>2]|0)+1;if(!(d[(c[ka>>2]|0)+42>>0]&32))k=0;else k=Ej(c[ka>>2]|0)|0;c[ja>>2]=k;c[v>>2]=0;c[ia>>2]=c[(c[ka>>2]|0)+8>>2];while(1){if(!(c[ia>>2]|0))break;if((c[ja>>2]|0)!=0?(a[(c[ia>>2]|0)+55>>0]&3|0)==2:0){c[ea>>2]=c[(c[X>>2]|0)+72>>2];c[(c[Y>>2]|0)+8+44>>2]=c[ea>>2]}j=(c[X>>2]|0)+72|0;c[j>>2]=(c[j>>2]|0)+1;c[ia>>2]=c[(c[ia>>2]|0)+20>>2];c[v>>2]=(c[v>>2]|0)+1}c[aa>>2]=Fw(c[ca>>2]|0,((b[(c[ka>>2]|0)+34>>1]|0)+(c[v>>2]|0)<<2)+(c[v>>2]|0)+2|0,0)|0;if(!(c[aa>>2]|0)){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}c[L>>2]=(c[aa>>2]|0)+(b[(c[ka>>2]|0)+34>>1]<<2);c[$>>2]=(c[L>>2]|0)+(c[v>>2]<<2);kR(c[$>>2]|0,1,(c[v>>2]|0)+1|0)|0;a[(c[$>>2]|0)+((c[v>>2]|0)+1)>>0]=0;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(b[(c[ka>>2]|0)+34>>1]|0))break;c[(c[aa>>2]|0)+(c[da>>2]<<2)>>2]=-1;c[da>>2]=(c[da>>2]|0)+1}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;c[p+24>>2]=0;c[p+28>>2]=0;c[p>>2]=c[X>>2];c[p+4>>2]=c[Y>>2];a[y>>0]=0;a[B>>0]=0;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(c[c[Z>>2]>>2]|0)){J=41;break}if(fy(p,c[(c[(c[Z>>2]|0)+4>>2]|0)+((c[da>>2]|0)*20|0)>>2]|0)|0){J=185;break}c[C>>2]=0;while(1){if((c[C>>2]|0)>=(b[(c[ka>>2]|0)+34>>1]|0))break;j=(Td(c[(c[(c[ka>>2]|0)+4>>2]|0)+((c[C>>2]|0)*24|0)>>2]|0,c[(c[(c[Z>>2]|0)+4>>2]|0)+((c[da>>2]|0)*20|0)+4>>2]|0)|0)==0;k=c[C>>2]|0;if(j){J=23;break}c[C>>2]=k+1}if((J|0)==23){J=0;if((k|0)!=(b[(c[ka>>2]|0)+32>>1]|0)){if((c[ja>>2]|0)!=0?(d[(c[(c[ka>>2]|0)+4>>2]|0)+((c[C>>2]|0)*24|0)+23>>0]&1|0)!=0:0)a[y>>0]=1}else{a[B>>0]=1;c[z>>2]=c[(c[(c[Z>>2]|0)+4>>2]|0)+((c[da>>2]|0)*20|0)>>2]}c[(c[aa>>2]|0)+(c[C>>2]<<2)>>2]=c[da>>2]}if((c[C>>2]|0)>=(b[(c[ka>>2]|0)+34>>1]|0)){if(c[ja>>2]|0){J=34;break}if(!(qi(c[(c[(c[Z>>2]|0)+4>>2]|0)+((c[da>>2]|0)*20|0)+4>>2]|0)|0)){J=34;break}c[C>>2]=-1;a[B>>0]=1;c[z>>2]=c[(c[(c[Z>>2]|0)+4>>2]|0)+((c[da>>2]|0)*20|0)>>2]}if((c[C>>2]|0)<0)k=20759;else k=c[(c[(c[ka>>2]|0)+4>>2]|0)+((c[C>>2]|0)*24|0)>>2]|0;c[n>>2]=Mw(c[X>>2]|0,23,c[c[ka>>2]>>2]|0,k,c[(c[(c[ca>>2]|0)+16>>2]|0)+(c[l>>2]<<4)>>2]|0)|0;if((c[n>>2]|0)==1){J=185;break}if((c[n>>2]|0)==2)c[(c[aa>>2]|0)+(c[C>>2]<<2)>>2]=-1;c[da>>2]=(c[da>>2]|0)+1}if((J|0)==34){na=c[X>>2]|0;c[q>>2]=c[(c[(c[Z>>2]|0)+4>>2]|0)+((c[da>>2]|0)*20|0)+4>>2];Ah(na,24991,q);a[(c[X>>2]|0)+17>>0]=1;TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}else if((J|0)==41){a[O>>0]=(d[B>>0]|0)+(d[y>>0]|0);n=(d[(c[ka>>2]|0)+42>>0]&16|0)!=0;q=(c[Y>>2]|0)+8+56|0;c[q>>2]=n?-1:0;c[q+4>>2]=n?-1:0;c[P>>2]=DE(c[X>>2]|0,c[ka>>2]|0,c[aa>>2]|0,d[O>>0]|0)|0;c[C>>2]=0;c[ia>>2]=c[(c[ka>>2]|0)+8>>2];while(1){if(!(c[ia>>2]|0))break;a:do if((!((d[O>>0]|0)!=0|(c[P>>2]|0)!=0)?(c[(c[ia>>2]|0)+36>>2]|0)==0:0)?(c[ia>>2]|0)!=(c[ja>>2]|0):0){c[o>>2]=0;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(e[(c[ia>>2]|0)+50>>1]|0))break a;b[m>>1]=b[(c[(c[ia>>2]|0)+4>>2]|0)+(c[da>>2]<<1)>>1]|0;if((b[m>>1]|0)<0)break;if((c[(c[aa>>2]|0)+(b[m>>1]<<2)>>2]|0)>=0)break;c[da>>2]=(c[da>>2]|0)+1}n=(c[X>>2]|0)+76|0;q=(c[n>>2]|0)+1|0;c[n>>2]=q;c[o>>2]=q}else J=46;while(0);if((J|0)==46){J=0;n=(c[X>>2]|0)+76|0;q=(c[n>>2]|0)+1|0;c[n>>2]=q;c[o>>2]=q}if(!(c[o>>2]|0))a[(c[$>>2]|0)+((c[C>>2]|0)+1)>>0]=0;c[(c[L>>2]|0)+(c[C>>2]<<2)>>2]=c[o>>2];c[ia>>2]=c[(c[ia>>2]|0)+20>>2];c[C>>2]=(c[C>>2]|0)+1}c[na>>2]=Pw(c[X>>2]|0)|0;if(!(c[na>>2]|0)){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}if(!(d[(c[X>>2]|0)+18>>0]|0))uC(c[na>>2]|0);ax(c[X>>2]|0,1,c[l>>2]|0);if(!(d[(c[ka>>2]|0)+42>>0]&16)){q=(c[X>>2]|0)+76|0;o=(c[q>>2]|0)+1|0;c[q>>2]=o;c[A>>2]=o;o=(c[X>>2]|0)+76|0;q=(c[o>>2]|0)+1|0;c[o>>2]=q;c[U>>2]=q;c[V>>2]=q;if((d[y>>0]|0)!=0|(c[S>>2]|0)!=0|(c[P>>2]|0)!=0){c[F>>2]=(c[(c[X>>2]|0)+76>>2]|0)+1;q=(c[X>>2]|0)+76|0;c[q>>2]=(c[q>>2]|0)+(b[(c[ka>>2]|0)+34>>1]|0)}if((d[O>>0]|0)!=0|(c[S>>2]|0)!=0|(c[P>>2]|0)!=0){o=(c[X>>2]|0)+76|0;q=(c[o>>2]|0)+1|0;c[o>>2]=q;c[U>>2]=q}c[I>>2]=(c[(c[X>>2]|0)+76>>2]|0)+1;q=(c[X>>2]|0)+76|0;c[q>>2]=(c[q>>2]|0)+(b[(c[ka>>2]|0)+34>>1]|0)}if(c[H>>2]|0)PF(c[X>>2]|0,ma,c[c[ka>>2]>>2]|0);if(c[H>>2]|0)QF(c[X>>2]|0,c[ka>>2]|0,c[_>>2]|0,c[ea>>2]|0);if(fy(p,c[_>>2]|0)|0){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}if(d[(c[ka>>2]|0)+42>>0]&16){RF(c[X>>2]|0,c[Y>>2]|0,c[ka>>2]|0,c[Z>>2]|0,c[z>>2]|0,c[aa>>2]|0,c[_>>2]|0,c[K>>2]|0);TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}if(!(d[(c[ka>>2]|0)+42>>0]&32)){Vw(c[na>>2]|0,25,0,c[A>>2]|0,c[V>>2]|0)|0;c[x>>2]=RC(c[X>>2]|0,c[Y>>2]|0,c[_>>2]|0,0,0,4,c[ga>>2]|0)|0;if(!(c[x>>2]|0)){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}c[R>>2]=SF(c[x>>2]|0,s)|0;Rw(c[na>>2]|0,103,c[ea>>2]|0,c[V>>2]|0)|0;if(!(c[R>>2]|0))Rw(c[na>>2]|0,129,c[A>>2]|0,c[V>>2]|0)|0;SC(c[x>>2]|0)}else{b[w>>1]=b[(c[ja>>2]|0)+50>>1]|0;c[u>>2]=(c[(c[X>>2]|0)+76>>2]|0)+1;q=(c[X>>2]|0)+76|0;c[q>>2]=(c[q>>2]|0)+(b[w>>1]|0);q=(c[X>>2]|0)+76|0;p=(c[q>>2]|0)+1|0;c[q>>2]=p;c[T>>2]=p;p=(c[X>>2]|0)+72|0;q=c[p>>2]|0;c[p>>2]=q+1;c[fa>>2]=q;Rw(c[na>>2]|0,25,0,c[u>>2]|0)|0;c[r>>2]=Rw(c[na>>2]|0,57,c[fa>>2]|0,b[w>>1]|0)|0;Az(c[X>>2]|0,c[ja>>2]|0);c[x>>2]=RC(c[X>>2]|0,c[Y>>2]|0,c[_>>2]|0,0,0,4,c[ga>>2]|0)|0;if(!(c[x>>2]|0)){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}c[R>>2]=SF(c[x>>2]|0,s)|0;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(b[w>>1]|0))break;tA(c[na>>2]|0,c[ka>>2]|0,c[ea>>2]|0,b[(c[(c[ja>>2]|0)+4>>2]|0)+(c[da>>2]<<1)>>1]|0,(c[u>>2]|0)+(c[da>>2]|0)|0);c[da>>2]=(c[da>>2]|0)+1}k=c[na>>2]|0;if(c[R>>2]|0){pA(k,c[r>>2]|0)|0;c[Q>>2]=b[w>>1];c[T>>2]=c[u>>2]}else{p=c[u>>2]|0;q=b[w>>1]|0;r=c[T>>2]|0;u=dC(c[ca>>2]|0,c[ja>>2]|0)|0;Uw(k,49,p,q,r,u,b[w>>1]|0)|0;Rw(c[na>>2]|0,110,c[fa>>2]|0,c[T>>2]|0)|0}SC(c[x>>2]|0)}if((c[(c[ca>>2]|0)+24>>2]&128|0)!=0?(c[(c[X>>2]|0)+420>>2]|0)==0:0){w=(c[X>>2]|0)+76|0;x=(c[w>>2]|0)+1|0;c[w>>2]=x;c[la>>2]=x;Rw(c[na>>2]|0,22,0,c[la>>2]|0)|0}c[ha>>2]=Cz(c[na>>2]|0)|0;if(!(c[H>>2]|0)){b:do if((c[K>>2]|0)==5)kR(c[$>>2]|0,1,(c[v>>2]|0)+1|0)|0;else{c[ia>>2]=c[(c[ka>>2]|0)+8>>2];while(1){if(!(c[ia>>2]|0))break b;if((d[(c[ia>>2]|0)+54>>0]|0)==5)break;c[ia>>2]=c[(c[ia>>2]|0)+20>>2]}kR(c[$>>2]|0,1,(c[v>>2]|0)+1|0)|0}while(0);do if(c[R>>2]|0){if((c[s>>2]|0)>=0)a[(c[$>>2]|0)+((c[s>>2]|0)-(c[t>>2]|0))>>0]=0;if((c[s+4>>2]|0)<0)break;a[(c[$>>2]|0)+((c[s+4>>2]|0)-(c[t>>2]|0))>>0]=0}while(0);gC(c[X>>2]|0,c[ka>>2]|0,55,0,c[t>>2]|0,c[$>>2]|0,0,0)|0}do if(!(c[R>>2]|0)){k=c[na>>2]|0;if(c[ja>>2]|0){c[W>>2]=Cz(k)|0;Rw(c[na>>2]|0,108,c[fa>>2]|0,c[ha>>2]|0)|0;c[ba>>2]=Rw(c[na>>2]|0,101,c[fa>>2]|0,c[T>>2]|0)|0;Eh(c[na>>2]|0,68,c[ea>>2]|0,c[W>>2]|0,c[T>>2]|0,0)|0;break}else{c[W>>2]=Vw(k,130,c[A>>2]|0,c[ha>>2]|0,c[V>>2]|0)|0;Vw(c[na>>2]|0,70,c[ea>>2]|0,c[W>>2]|0,c[V>>2]|0)|0;break}}else{if(!((c[H>>2]|0)!=0?1:(d[(c[$>>2]|0)+((c[ea>>2]|0)-(c[t>>2]|0))>>0]|0)==0))Eh(c[na>>2]|0,68,c[ea>>2]|0,c[ha>>2]|0,c[T>>2]|0,c[Q>>2]|0)|0;c[W>>2]=c[ha>>2];Rw(c[na>>2]|0,76,(c[ja>>2]|0)!=0?c[T>>2]|0:c[V>>2]|0,c[ha>>2]|0)|0}while(0);if(a[B>>0]|0){xA(c[X>>2]|0,c[z>>2]|0,c[U>>2]|0);xz(c[na>>2]|0,38,c[U>>2]|0)|0}do if((d[y>>0]|0)!=0|(c[P>>2]|0)!=0|(c[S>>2]|0)!=0){if(c[P>>2]|0)k=IE(c[X>>2]|0,c[ka>>2]|0)|0;else k=0;c[E>>2]=k;A=HE(c[X>>2]|0,c[S>>2]|0,c[Z>>2]|0,0,3,c[ka>>2]|0,c[K>>2]|0)|0;c[E>>2]=c[E>>2]|A;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(b[(c[ka>>2]|0)+34>>1]|0))break;do if((c[E>>2]|0)==-1)J=120;else{if((c[da>>2]|0)<32?(c[E>>2]&1<>2]|0)!=0:0){J=120;break}if(d[(c[(c[ka>>2]|0)+4>>2]|0)+((c[da>>2]|0)*24|0)+23>>0]&1){J=120;break}Rw(c[na>>2]|0,25,0,(c[F>>2]|0)+(c[da>>2]|0)|0)|0}while(0);if((J|0)==120){J=0;tA(c[na>>2]|0,c[ka>>2]|0,c[ea>>2]|0,c[da>>2]|0,(c[F>>2]|0)+(c[da>>2]|0)|0)}c[da>>2]=(c[da>>2]|0)+1}if(!((d[B>>0]|0)==0&(c[ja>>2]|0)==0))break;Rw(c[na>>2]|0,30,c[V>>2]|0,c[U>>2]|0)|0}while(0);c[D>>2]=HE(c[X>>2]|0,c[S>>2]|0,c[Z>>2]|0,1,1,c[ka>>2]|0,c[K>>2]|0)|0;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(b[(c[ka>>2]|0)+34>>1]|0))break;c:do if((c[da>>2]|0)==(b[(c[ka>>2]|0)+32>>1]|0))Rw(c[na>>2]|0,25,0,(c[I>>2]|0)+(c[da>>2]|0)|0)|0;else{c[C>>2]=c[(c[aa>>2]|0)+(c[da>>2]<<2)>>2];if((c[C>>2]|0)>=0){xA(c[X>>2]|0,c[(c[(c[Z>>2]|0)+4>>2]|0)+((c[C>>2]|0)*20|0)>>2]|0,(c[I>>2]|0)+(c[da>>2]|0)|0);break}do if(!((c[da>>2]|0)>31?1:0==(c[G>>2]&1|0))){if(c[D>>2]&1<>2])break;Rw(c[na>>2]|0,25,0,(c[I>>2]|0)+(c[da>>2]|0)|0)|0;break c}while(0);vD(c[X>>2]|0,c[ka>>2]|0,c[da>>2]|0,c[ea>>2]|0,(c[I>>2]|0)+(c[da>>2]|0)|0)}while(0);c[da>>2]=(c[da>>2]|0)+1}d:do if(c[G>>2]&1){AC(c[na>>2]|0,c[ka>>2]|0,c[I>>2]|0);BC(c[X>>2]|0,c[S>>2]|0,110,c[Z>>2]|0,1,c[ka>>2]|0,c[V>>2]|0,c[K>>2]|0,c[W>>2]|0);k=c[na>>2]|0;h=c[ea>>2]|0;f=c[W>>2]|0;if(c[ja>>2]|0)Eh(k,68,h,f,c[T>>2]|0,c[Q>>2]|0)|0;else Vw(k,70,h,f,c[V>>2]|0)|0;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(b[(c[ka>>2]|0)+34>>1]|0))break d;do if((c[(c[aa>>2]|0)+(c[da>>2]<<2)>>2]|0)<0){if((c[da>>2]|0)==(b[(c[ka>>2]|0)+32>>1]|0))break;tA(c[na>>2]|0,c[ka>>2]|0,c[ea>>2]|0,c[da>>2]|0,(c[I>>2]|0)+(c[da>>2]|0)|0)}while(0);c[da>>2]=(c[da>>2]|0)+1}}while(0);do if(!(c[H>>2]|0)){c[M>>2]=0;c[N>>2]=0;FC(c[X>>2]|0,c[ka>>2]|0,c[L>>2]|0,c[ea>>2]|0,c[ga>>2]|0,c[U>>2]|0,c[V>>2]|0,a[O>>0]|0,c[K>>2]&255,c[W>>2]|0,N,c[aa>>2]|0);if(c[P>>2]|0)GC(c[X>>2]|0,c[ka>>2]|0,c[V>>2]|0,0,c[aa>>2]|0,d[O>>0]|0);if(!((c[N>>2]|0)==0?(d[O>>0]|0)==0:0))J=151;do if((J|0)==151){k=c[na>>2]|0;h=c[ea>>2]|0;if(c[ja>>2]|0){c[M>>2]=Eh(k,68,h,0,c[T>>2]|0,c[Q>>2]|0)|0;break}else{c[M>>2]=Vw(k,70,h,0,c[V>>2]|0)|0;break}}while(0);GE(c[X>>2]|0,c[ka>>2]|0,c[ea>>2]|0,c[ga>>2]|0,c[L>>2]|0,-1);if(!((c[P>>2]|0)==0?!((d[O>>0]|0)!=0|(c[ja>>2]|0)!=0):0))Rw(c[na>>2]|0,95,c[ea>>2]|0,0)|0;if(!((c[N>>2]|0)==0?(d[O>>0]|0)==0:0))Fz(c[na>>2]|0,c[M>>2]|0);if(c[P>>2]|0)GC(c[X>>2]|0,c[ka>>2]|0,0,c[U>>2]|0,c[aa>>2]|0,d[O>>0]|0);HC(c[X>>2]|0,c[ka>>2]|0,c[ea>>2]|0,c[ga>>2]|0,c[U>>2]|0,c[L>>2]|0,1,0,0);if(!(c[P>>2]|0))break;JE(c[X>>2]|0,c[ka>>2]|0,c[Z>>2]|0,c[V>>2]|0,c[aa>>2]|0,d[O>>0]|0)}while(0);do if(c[(c[ca>>2]|0)+24>>2]&128){if(c[(c[X>>2]|0)+420>>2]|0)break;Rw(c[na>>2]|0,37,c[la>>2]|0,1)|0}while(0);BC(c[X>>2]|0,c[S>>2]|0,110,c[Z>>2]|0,2,c[ka>>2]|0,c[V>>2]|0,c[K>>2]|0,c[W>>2]|0);do if(!(c[R>>2]|0)){h=c[na>>2]|0;k=c[W>>2]|0;if(c[ja>>2]|0){Gz(h,k);Rw(c[na>>2]|0,7,c[fa>>2]|0,c[ba>>2]|0)|0;break}else{Ez(h,k)|0;break}}while(0);Gz(c[na>>2]|0,c[ha>>2]|0);c[da>>2]=0;c[ia>>2]=c[(c[ka>>2]|0)+8>>2];while(1){if(!(c[ia>>2]|0))break;if(a[(c[$>>2]|0)+((c[da>>2]|0)+1)>>0]|0)Rw(c[na>>2]|0,61,(c[ga>>2]|0)+(c[da>>2]|0)|0,0)|0;c[ia>>2]=c[(c[ia>>2]|0)+20>>2];c[da>>2]=(c[da>>2]|0)+1}if((c[ea>>2]|0)<(c[ga>>2]|0))Rw(c[na>>2]|0,61,c[ea>>2]|0,0)|0;do if(!(d[(c[X>>2]|0)+18>>0]|0)){if(c[(c[X>>2]|0)+420>>2]|0)break;IC(c[X>>2]|0)}while(0);if(!(c[(c[ca>>2]|0)+24>>2]&128)){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}if(c[(c[X>>2]|0)+420>>2]|0){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}if(a[(c[X>>2]|0)+18>>0]|0){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}Rw(c[na>>2]|0,33,c[la>>2]|0,1)|0;OB(c[na>>2]|0,1);PB(c[na>>2]|0,0,0,36150,0)|0;TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}else if((J|0)==185){TF(ma);na=c[ca>>2]|0;ma=c[aa>>2]|0;Sf(na,ma);ma=c[ca>>2]|0;na=c[Y>>2]|0;Yu(ma,na);na=c[ca>>2]|0;ma=c[Z>>2]|0;Vu(na,ma);ma=c[ca>>2]|0;na=c[_>>2]|0;Zu(ma,na);i=oa;return}}function LC(e,f,g,h,j,k,l,m,n){e=e|0;f=f|0;g=g|0;h=h|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;K=i;i=i+96|0;o=K+84|0;p=K+80|0;q=K+76|0;r=K+72|0;s=K+68|0;t=K+64|0;u=K+60|0;v=K+56|0;w=K+52|0;x=K+48|0;J=K+44|0;z=K+40|0;C=K+36|0;E=K+32|0;B=K+28|0;H=K+24|0;F=K+20|0;I=K+16|0;G=K+12|0;A=K+8|0;y=K+4|0;D=K;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=j;c[t>>2]=k;c[u>>2]=l;c[v>>2]=m;c[w>>2]=n;c[J>>2]=Pw(c[o>>2]|0)|0;c[z>>2]=(c[(c[o>>2]|0)+72>>2]|0)-1;c[C>>2]=Cz(c[J>>2]|0)|0;if((c[v>>2]|0)<0)Rw(c[J>>2]|0,136,d[(c[s>>2]|0)+24>>0]|0,c[C>>2]|0)|0;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[(c[s>>2]|0)+20>>2]|0))break;c[E>>2]=(c[(c[t>>2]|0)+(c[x>>2]<<2)>>2]|0)+(c[u>>2]|0)+1;Rw(c[J>>2]|0,76,c[E>>2]|0,c[C>>2]|0)|0;c[x>>2]=(c[x>>2]|0)+1}do if(!(c[w>>2]|0)){if(!(c[r>>2]|0)){c[H>>2]=Wz(c[o>>2]|0)|0;Rw(c[J>>2]|0,31,(c[c[t>>2]>>2]|0)+1+(c[u>>2]|0)|0,c[H>>2]|0)|0;c[B>>2]=Rw(c[J>>2]|0,38,c[H>>2]|0,0)|0;if((c[v>>2]|0)==1?(c[q>>2]|0)==(c[c[s>>2]>>2]|0):0){Vw(c[J>>2]|0,79,c[u>>2]|0,c[C>>2]|0,c[H>>2]|0)|0;Fh(c[J>>2]|0,-112)}zz(c[o>>2]|0,c[z>>2]|0,c[p>>2]|0,c[q>>2]|0,54);Vw(c[J>>2]|0,70,c[z>>2]|0,0,c[H>>2]|0)|0;Ez(c[J>>2]|0,c[C>>2]|0)|0;I=c[J>>2]|0;Fz(I,(Bz(c[J>>2]|0)|0)-2|0);Fz(c[J>>2]|0,c[B>>2]|0); +_z(c[o>>2]|0,c[H>>2]|0);break}c[F>>2]=c[(c[s>>2]|0)+20>>2];c[I>>2]=kA(c[o>>2]|0,c[F>>2]|0)|0;c[G>>2]=Wz(c[o>>2]|0)|0;Vw(c[J>>2]|0,54,c[z>>2]|0,c[(c[r>>2]|0)+44>>2]|0,c[p>>2]|0)|0;Az(c[o>>2]|0,c[r>>2]|0);c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[F>>2]|0))break;Rw(c[J>>2]|0,30,(c[(c[t>>2]|0)+(c[x>>2]<<2)>>2]|0)+1+(c[u>>2]|0)|0,(c[I>>2]|0)+(c[x>>2]|0)|0)|0;c[x>>2]=(c[x>>2]|0)+1}if((c[v>>2]|0)==1?(c[q>>2]|0)==(c[c[s>>2]>>2]|0):0){H=Bz(c[J>>2]|0)|0;c[A>>2]=H+(c[F>>2]|0)+1;c[x>>2]=0;while(1){if((c[x>>2]|0)>=(c[F>>2]|0))break;c[y>>2]=(c[(c[t>>2]|0)+(c[x>>2]<<2)>>2]|0)+1+(c[u>>2]|0);c[D>>2]=(b[(c[(c[r>>2]|0)+4>>2]|0)+(c[x>>2]<<1)>>1]|0)+1+(c[u>>2]|0);if((b[(c[(c[r>>2]|0)+4>>2]|0)+(c[x>>2]<<1)>>1]|0)==(b[(c[q>>2]|0)+32>>1]|0))c[D>>2]=c[u>>2];Vw(c[J>>2]|0,78,c[y>>2]|0,c[A>>2]|0,c[D>>2]|0)|0;Fh(c[J>>2]|0,16);c[x>>2]=(c[x>>2]|0)+1}Ez(c[J>>2]|0,c[C>>2]|0)|0}h=c[J>>2]|0;e=c[I>>2]|0;g=c[F>>2]|0;l=c[G>>2]|0;H=dC(c[c[o>>2]>>2]|0,c[r>>2]|0)|0;Uw(h,49,e,g,l,H,c[F>>2]|0)|0;Eh(c[J>>2]|0,69,c[z>>2]|0,c[C>>2]|0,c[G>>2]|0,0)|0;_z(c[o>>2]|0,c[G>>2]|0);nA(c[o>>2]|0,c[I>>2]|0,c[F>>2]|0)}while(0);if((((a[(c[s>>2]|0)+24>>0]|0)==0?(c[(c[c[o>>2]>>2]|0)+24>>2]&16777216|0)==0:0)?(c[(c[o>>2]|0)+416>>2]|0)==0:0)?(a[(c[o>>2]|0)+20>>0]|0)==0:0){bA(c[o>>2]|0,787,2,0,-2,4);H=c[J>>2]|0;I=c[C>>2]|0;Gz(H,I);I=c[J>>2]|0;J=c[z>>2]|0;xz(I,61,J)|0;i=K;return}if((c[v>>2]|0)>0?(d[(c[s>>2]|0)+24>>0]|0)==0:0)Bx(c[o>>2]|0);Rw(c[J>>2]|0,135,d[(c[s>>2]|0)+24>>0]|0,c[v>>2]|0)|0;H=c[J>>2]|0;I=c[C>>2]|0;Gz(H,I);I=c[J>>2]|0;J=c[z>>2]|0;xz(I,61,J)|0;i=K;return}function MC(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+16|0;k=j+12|0;f=j+8|0;h=j+4|0;g=j;c[k>>2]=a;c[f>>2]=b;b=c[k>>2]|0;if(c[(c[k>>2]|0)+416>>2]|0)b=c[b+416>>2]|0;c[h>>2]=b;do if(c[(c[h>>2]|0)+532>>2]|0){c[g>>2]=c[c[(c[h>>2]|0)+532>>2]>>2];if(!((c[g>>2]|0)==(c[(c[f>>2]|0)+28>>2]|0)?(d[(c[f>>2]|0)+25>>0]|0|0)==7:0)){if((c[g>>2]|0)!=(c[(c[f>>2]|0)+28+4>>2]|0))break;if((d[(c[f>>2]|0)+25+1>>0]|0|0)!=7)break}c[e>>2]=1;k=c[e>>2]|0;i=j;return k|0}while(0);c[e>>2]=0;k=c[e>>2]|0;i=j;return k|0}function NC(a,e,f,g){a=a|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;h=s+32|0;j=s+28|0;k=s+24|0;l=s+20|0;m=s+16|0;n=s+12|0;q=s+8|0;o=s+4|0;p=s;c[j>>2]=a;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=0;a:while(1){if((c[n>>2]|0)>=(c[(c[k>>2]|0)+20>>2]|0)){r=14;break}c[q>>2]=c[(c[k>>2]|0)+36+(c[n>>2]<<3)+4>>2];c[o>>2]=0;while(1){if((c[o>>2]|0)>=(b[(c[j>>2]|0)+34>>1]|0))break;if(!((c[(c[l>>2]|0)+(c[o>>2]<<2)>>2]|0)<0?!((c[m>>2]|0)!=0?(c[o>>2]|0)==(b[(c[j>>2]|0)+32>>1]|0):0):0))r=7;do if((r|0)==7){r=0;c[p>>2]=(c[(c[j>>2]|0)+4>>2]|0)+((c[o>>2]|0)*24|0);f=c[p>>2]|0;if(c[q>>2]|0)if(!(Td(c[f>>2]|0,c[q>>2]|0)|0)){r=9;break a}else break;else if(d[f+23>>0]&1){r=11;break a}else break}while(0);c[o>>2]=(c[o>>2]|0)+1}c[n>>2]=(c[n>>2]|0)+1}if((r|0)==9){c[h>>2]=1;r=c[h>>2]|0;i=s;return r|0}else if((r|0)==11){c[h>>2]=1;r=c[h>>2]|0;i=s;return r|0}else if((r|0)==14){c[h>>2]=0;r=c[h>>2]|0;i=s;return r|0}return 0}function OC(a,f,g,h,j,k,l,m){a=a|0;f=f|0;g=g|0;h=h|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;O=i;i=i+144|0;n=O+128|0;o=O+124|0;p=O+120|0;q=O+116|0;r=O+112|0;s=O+108|0;t=O+104|0;u=O+100|0;v=O+96|0;w=O+92|0;K=O+88|0;L=O+56|0;J=O+48|0;z=O+44|0;M=O+40|0;D=O+36|0;H=O+32|0;B=O+28|0;x=O+134|0;N=O+24|0;F=O+20|0;E=O+16|0;I=O+12|0;C=O+8|0;A=O+4|0;G=O;y=O+132|0;c[n>>2]=a;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=j;c[s>>2]=k;c[t>>2]=l;c[u>>2]=m;c[v>>2]=c[c[n>>2]>>2];c[K>>2]=0;c[z>>2]=0;c[M>>2]=Pw(c[n>>2]|0)|0;if((c[u>>2]|0)<0)c[z>>2]=Rw(c[M>>2]|0,136,d[(c[r>>2]|0)+24>>0]|0,0)|0;c[w>>2]=0;while(1){if((c[w>>2]|0)>=(c[(c[r>>2]|0)+20>>2]|0))break;if(c[q>>2]|0)k=b[(c[(c[q>>2]|0)+4>>2]|0)+(c[w>>2]<<1)>>1]|0;else k=-1;b[x>>1]=k;c[D>>2]=PC(c[n>>2]|0,c[p>>2]|0,c[t>>2]|0,b[x>>1]|0)|0;if(c[s>>2]|0)k=c[(c[s>>2]|0)+(c[w>>2]<<2)>>2]|0;else k=c[(c[r>>2]|0)+36>>2]|0;b[x>>1]=k;c[N>>2]=c[(c[(c[c[r>>2]>>2]|0)+4>>2]|0)+((b[x>>1]|0)*24|0)>>2];c[H>>2]=Jv(c[v>>2]|0,27,c[N>>2]|0)|0;c[B>>2]=rv(c[n>>2]|0,79,c[D>>2]|0,c[H>>2]|0,0)|0;c[K>>2]=az(c[v>>2]|0,c[K>>2]|0,c[B>>2]|0)|0;c[w>>2]=(c[w>>2]|0)+1}if((c[u>>2]|0)>0?(c[p>>2]|0)==(c[c[r>>2]>>2]|0):0){if(!(d[(c[p>>2]|0)+42>>0]&32)){c[E>>2]=PC(c[n>>2]|0,c[p>>2]|0,c[t>>2]|0,-1)|0;c[I>>2]=QC(c[v>>2]|0,c[p>>2]|0,c[(c[o>>2]|0)+8+44>>2]|0,-1)|0;c[F>>2]=rv(c[n>>2]|0,78,c[E>>2]|0,c[I>>2]|0,0)|0}else{c[A>>2]=0;c[G>>2]=Ej(c[p>>2]|0)|0;c[w>>2]=0;while(1){if((c[w>>2]|0)>=(e[(c[G>>2]|0)+50>>1]|0))break;b[y>>1]=b[(c[(c[q>>2]|0)+4>>2]|0)+(c[w>>2]<<1)>>1]|0;c[E>>2]=PC(c[n>>2]|0,c[p>>2]|0,c[t>>2]|0,b[y>>1]|0)|0;c[I>>2]=QC(c[v>>2]|0,c[p>>2]|0,c[(c[o>>2]|0)+8+44>>2]|0,b[y>>1]|0)|0;c[C>>2]=rv(c[n>>2]|0,79,c[E>>2]|0,c[I>>2]|0,0)|0;c[A>>2]=az(c[v>>2]|0,c[A>>2]|0,c[C>>2]|0)|0;c[w>>2]=(c[w>>2]|0)+1}c[F>>2]=rv(c[n>>2]|0,19,c[A>>2]|0,0,0)|0}c[K>>2]=az(c[v>>2]|0,c[K>>2]|0,c[F>>2]|0)|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;c[L+24>>2]=0;c[L+28>>2]=0;c[L+4>>2]=c[o>>2];c[L>>2]=c[n>>2];fy(L,c[K>>2]|0)|0;c[J>>2]=RC(c[n>>2]|0,c[o>>2]|0,c[K>>2]|0,0,0,0,0)|0;Rw(c[M>>2]|0,135,d[(c[r>>2]|0)+24>>0]|0,c[u>>2]|0)|0;if(c[J>>2]|0)SC(c[J>>2]|0);Zu(c[v>>2]|0,c[K>>2]|0);if(!(c[z>>2]|0)){i=O;return}Fz(c[M>>2]|0,c[z>>2]|0);i=O;return}function PC(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+24|0;j=q+20|0;k=q+16|0;l=q+28|0;o=q+12|0;n=q+8|0;p=q+4|0;m=q;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;b[l>>1]=g;c[m>>2]=c[c[h>>2]>>2];c[o>>2]=Jv(c[m>>2]|0,157,0)|0;if(!(c[o>>2]|0)){p=c[o>>2]|0;i=q;return p|0}if((b[l>>1]|0)>=0?(b[l>>1]|0)!=(b[(c[j>>2]|0)+32>>1]|0):0){c[n>>2]=(c[(c[j>>2]|0)+4>>2]|0)+((b[l>>1]|0)*24|0);c[(c[o>>2]|0)+28>>2]=(c[k>>2]|0)+(b[l>>1]|0)+1;a[(c[o>>2]|0)+1>>0]=a[(c[n>>2]|0)+21>>0]|0;c[p>>2]=c[(c[n>>2]|0)+16>>2];if(!(c[p>>2]|0))c[p>>2]=c[c[(c[m>>2]|0)+8>>2]>>2];c[o>>2]=By(c[h>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;p=c[o>>2]|0;i=q;return p|0}c[(c[o>>2]|0)+28>>2]=c[k>>2];a[(c[o>>2]|0)+1>>0]=68;p=c[o>>2]|0;i=q;return p|0}function QC(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;m=l+12|0;g=l+8|0;h=l+4|0;j=l+16|0;k=l;c[m>>2]=a;c[g>>2]=d;c[h>>2]=e;b[j>>1]=f;c[k>>2]=Jv(c[m>>2]|0,152,0)|0;if(!(c[k>>2]|0)){m=c[k>>2]|0;i=l;return m|0}c[(c[k>>2]|0)+44>>2]=c[g>>2];c[(c[k>>2]|0)+28>>2]=c[h>>2];b[(c[k>>2]|0)+32>>1]=b[j>>1]|0;m=c[k>>2]|0;i=l;return m|0}function RC(f,g,h,j,k,l,m){f=f|0;g=g|0;h=h|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,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;ca=i;i=i+192|0;n=ca+24|0;q=ca+180|0;r=ca+176|0;s=ca+172|0;o=ca+168|0;t=ca+164|0;u=ca+160|0;v=ca+184|0;w=ca+156|0;p=ca+152|0;I=ca+148|0;W=ca+144|0;_=ca+140|0;J=ca+16|0;Y=ca+120|0;R=ca+116|0;P=ca+112|0;Q=ca+108|0;G=ca+104|0;B=ca+100|0;X=ca+96|0;z=ca+186|0;Z=ca+8|0;U=ca+92|0;M=ca+88|0;$=ca+84|0;A=ca+80|0;S=ca+76|0;E=ca+72|0;T=ca+68|0;V=ca+64|0;D=ca+60|0;K=ca+56|0;y=ca;H=ca+52|0;N=ca+48|0;F=ca+44|0;L=ca+40|0;O=ca+36|0;x=ca+32|0;aa=ca+28|0;c[r>>2]=f;c[s>>2]=g;c[o>>2]=h;c[t>>2]=j;c[u>>2]=k;b[v>>1]=l;c[w>>2]=m;c[_>>2]=c[(c[r>>2]|0)+8>>2];a[z>>0]=0;c[B>>2]=c[c[r>>2]>>2];c[Y>>2]=0;c[Y+4>>2]=0;c[Y+8>>2]=0;c[Y+12>>2]=0;c[Y+16>>2]=0;if((c[t>>2]|0)!=0?(c[c[t>>2]>>2]|0)>=64:0)c[t>>2]=0;c[Y+8>>2]=c[t>>2];if(e[(c[B>>2]|0)+60>>1]&32)b[v>>1]=e[v>>1]&-1025;if((c[c[s>>2]>>2]|0)>64){ba=c[r>>2]|0;c[n>>2]=64;Ah(ba,35216,n);c[q>>2]=0;ba=c[q>>2]|0;i=ca;return ba|0}if(e[v>>1]&64)m=1;else m=c[c[s>>2]>>2]|0;c[I>>2]=m;c[p>>2]=816+(((c[I>>2]|0)-1|0)*80|0)+7&-8;c[W>>2]=ph(c[B>>2]|0,(c[p>>2]|0)+72|0,0)|0;a:do if(!(a[(c[B>>2]|0)+65>>0]|0)){c[(c[W>>2]|0)+60+4>>2]=-1;c[(c[W>>2]|0)+60>>2]=-1;a[(c[W>>2]|0)+41>>0]=c[I>>2];c[c[W>>2]>>2]=c[r>>2];c[(c[W>>2]|0)+4>>2]=c[s>>2];c[(c[W>>2]|0)+8>>2]=c[t>>2];c[(c[W>>2]|0)+12>>2]=c[u>>2];l=Cz(c[_>>2]|0)|0;c[(c[W>>2]|0)+48>>2]=l;c[(c[W>>2]|0)+52>>2]=l;b[(c[W>>2]|0)+34>>1]=b[v>>1]|0;c[(c[W>>2]|0)+56>>2]=c[(c[r>>2]|0)+428>>2];c[R>>2]=(c[W>>2]|0)+68;c[Y>>2]=c[W>>2];c[Y+4>>2]=(c[W>>2]|0)+328;c[Y+12>>2]=(c[W>>2]|0)+(c[p>>2]|0);ZC(c[Y+12>>2]|0);c[c[R>>2]>>2]=0;aD((c[W>>2]|0)+328|0,c[W>>2]|0);bD((c[W>>2]|0)+328|0,c[o>>2]|0,72);c[G>>2]=0;while(1){m=(c[I>>2]|0)==0;if((c[G>>2]|0)>=(c[(c[Y+4>>2]|0)+12>>2]|0))break;if(!(!m?(dB(c[(c[(c[Y+4>>2]|0)+20>>2]|0)+((c[G>>2]|0)*48|0)>>2]|0)|0)==0:0)){LA(c[r>>2]|0,c[(c[(c[Y+4>>2]|0)+20>>2]|0)+((c[G>>2]|0)*48|0)>>2]|0,c[(c[W>>2]|0)+52>>2]|0,16);p=(c[(c[Y+4>>2]|0)+20>>2]|0)+((c[G>>2]|0)*48|0)+20|0;b[p>>1]=e[p>>1]|4}c[G>>2]=(c[G>>2]|0)+1}if(m){if(c[t>>2]|0)a[(c[W>>2]|0)+36>>0]=c[c[t>>2]>>2];if(e[v>>1]&1024)a[(c[W>>2]|0)+40>>0]=1}c[G>>2]=0;while(1){if((c[G>>2]|0)>=(c[c[s>>2]>>2]|0))break;cD(c[R>>2]|0,c[(c[s>>2]|0)+8+((c[G>>2]|0)*72|0)+44>>2]|0);dD(c[r>>2]|0,(c[s>>2]|0)+8+((c[G>>2]|0)*72|0)|0,(c[W>>2]|0)+328|0);c[G>>2]=(c[G>>2]|0)+1}eD(c[s>>2]|0,(c[W>>2]|0)+328|0);if(!(a[(c[B>>2]|0)+65>>0]|0)){do if(e[v>>1]&1024){if(fD(c[r>>2]|0,c[s>>2]|0,(c[W>>2]|0)+328|0,c[u>>2]|0)|0){a[(c[W>>2]|0)+40>>0]=1;break}if(!(c[t>>2]|0)){t=(c[W>>2]|0)+34|0;b[t>>1]=e[t>>1]|512;c[(c[W>>2]|0)+8>>2]=c[u>>2]}}while(0);if(!((c[I>>2]|0)==1?(gD(Y)|0)!=0:0)){c[X>>2]=hD(Y)|0;if(c[X>>2]|0)break;iD(c[W>>2]|0,0)|0;if(a[(c[B>>2]|0)+65>>0]|0)break;if((c[(c[W>>2]|0)+8>>2]|0)!=0?(iD(c[W>>2]|0,(b[(c[W>>2]|0)+32>>1]|0)+1&65535)|0,(a[(c[B>>2]|0)+65>>0]|0)!=0):0)break}if((c[(c[W>>2]|0)+8>>2]|0)==0?(c[(c[B>>2]|0)+24>>2]&131072|0)!=0:0){X=(c[W>>2]|0)+24|0;c[X>>2]=-1;c[X+4>>2]=-1}if((c[(c[r>>2]|0)+68>>2]|0)==0?(d[(c[B>>2]|0)+65>>0]|0)==0:0){b:do if(((c[u>>2]|0)!=0?(d[(c[W>>2]|0)+41>>0]|0)>=2:0)?(e[(c[B>>2]|0)+60>>1]&1024|0)==0:0){u=jD(c[R>>2]|0,c[u>>2]|0)|0;X=Z;c[X>>2]=u;c[X+4>>2]=C;if(c[Y+8>>2]|0){u=jD(c[R>>2]|0,c[Y+8>>2]|0)|0;t=Z;R=c[t+4>>2]|C;X=Z;c[X>>2]=c[t>>2]|u;c[X+4>>2]=R}while(1){if((d[(c[W>>2]|0)+41>>0]|0)<2)break b;c[Q>>2]=c[(c[W>>2]|0)+736+(((d[(c[W>>2]|0)+41>>0]|0)-1|0)*80|0)+64>>2];if(!(d[(c[(c[W>>2]|0)+4>>2]|0)+8+((d[(c[Q>>2]|0)+16>>0]|0)*72|0)+36>>0]&8))break b;if((e[v>>1]&1024|0)==0?(c[(c[Q>>2]|0)+36>>2]&4096|0)==0:0)break b;R=Z;X=(c[Q>>2]|0)+8|0;if((c[R>>2]&c[X>>2]|0)!=0?1:(c[R+4>>2]&c[X+4>>2]|0)!=0)break b;c[M>>2]=(c[(c[Y+4>>2]|0)+20>>2]|0)+((c[(c[Y+4>>2]|0)+12>>2]|0)*48|0);c[U>>2]=c[(c[Y+4>>2]|0)+20>>2];while(1){if((c[U>>2]|0)>>>0>=(c[M>>2]|0)>>>0)break;R=(c[U>>2]|0)+40|0;X=(c[Q>>2]|0)+8|0;if(((c[R>>2]&c[X>>2]|0)!=0?1:(c[R+4>>2]&c[X+4>>2]|0)!=0)?(c[(c[c[U>>2]>>2]|0)+4>>2]&1|0)==0:0)break;c[U>>2]=(c[U>>2]|0)+48}if((c[U>>2]|0)>>>0<(c[M>>2]|0)>>>0)break b;X=(c[W>>2]|0)+41|0;a[X>>0]=(a[X>>0]|0)+-1<<24>>24;c[I>>2]=(c[I>>2]|0)+-1}}while(0);Z=(c[c[W>>2]>>2]|0)+428|0;c[Z>>2]=(c[Z>>2]|0)+(b[(c[W>>2]|0)+32>>1]|0);do if(e[v>>1]&4){c[$>>2]=c[(c[(c[W>>2]|0)+736+64>>2]|0)+36>>2];c[A>>2]=(c[$>>2]&4096|0)!=0&1;if(!(c[A>>2]|0)){if(!(e[v>>1]&8192))break;if(c[$>>2]&1024)break}a[(c[W>>2]|0)+38>>0]=(c[A>>2]|0)!=0?1:2;if((d[(c[(c[s>>2]|0)+8+16>>2]|0)+42>>0]&32|0)==0?(c[$>>2]&64|0)!=0:0){if(e[v>>1]&8192)a[z>>0]=8;c[(c[(c[W>>2]|0)+736+64>>2]|0)+36>>2]=c[$>>2]&-65}}while(0);c[G>>2]=0;c[P>>2]=(c[W>>2]|0)+736;while(1){if((c[G>>2]|0)>=(c[I>>2]|0))break;c[T>>2]=(c[s>>2]|0)+8+((d[(c[P>>2]|0)+44>>0]|0)*72|0);c[S>>2]=c[(c[T>>2]|0)+16>>2];c[E>>2]=Dh(c[B>>2]|0,c[(c[S>>2]|0)+64>>2]|0)|0;c[Q>>2]=c[(c[P>>2]|0)+64>>2];c:do if((d[(c[S>>2]|0)+42>>0]&2|0)==0?(c[(c[S>>2]|0)+12>>2]|0)==0:0){if(c[(c[Q>>2]|0)+36>>2]&1024){c[V>>2]=Ax(c[B>>2]|0,c[S>>2]|0)|0;c[D>>2]=c[(c[T>>2]|0)+44>>2];Uw(c[_>>2]|0,152,c[D>>2]|0,0,0,c[V>>2]|0,-10)|0;break}if(d[(c[S>>2]|0)+42>>0]&16)break;do if(!(c[(c[Q>>2]|0)+36>>2]&64)){if(e[v>>1]&16)break;c[K>>2]=54;if(d[(c[W>>2]|0)+38>>0]|0){c[K>>2]=55;c[(c[W>>2]|0)+60>>2]=c[(c[T>>2]|0)+44>>2]}zz(c[r>>2]|0,c[(c[T>>2]|0)+44>>2]|0,c[E>>2]|0,c[S>>2]|0,c[K>>2]|0);do if(!(d[(c[W>>2]|0)+38>>0]|0)){if((b[(c[S>>2]|0)+34>>1]|0)>=64)break;if(d[(c[S>>2]|0)+42>>0]&32)break;Y=(c[T>>2]|0)+56|0;Z=c[Y+4>>2]|0;$=y;c[$>>2]=c[Y>>2];c[$+4>>2]=Z;c[H>>2]=0;while(1){$=y;if(!((c[$>>2]|0)!=0|(c[$+4>>2]|0)!=0))break;Z=y;Z=hR(c[Z>>2]|0,c[Z+4>>2]|0,1)|0;$=y;c[$>>2]=Z;c[$+4>>2]=C;c[H>>2]=(c[H>>2]|0)+1}Ih(c[_>>2]|0,-1,c[H>>2]|0,-14)}while(0);Fh(c[_>>2]|0,a[z>>0]|0);break c}while(0);yz(c[r>>2]|0,c[E>>2]|0,c[(c[S>>2]|0)+28>>2]|0,0,c[c[S>>2]>>2]|0)}while(0);do if(c[(c[Q>>2]|0)+36>>2]&512){c[N>>2]=c[(c[Q>>2]|0)+24+4>>2];c[L>>2]=54;do if(!(d[(c[S>>2]|0)+42>>0]&32))ba=93;else{if((a[(c[N>>2]|0)+55>>0]&3|0)!=2){ba=93;break}if(!(e[v>>1]&64)){ba=93;break}c[F>>2]=c[(c[P>>2]|0)+4>>2];c[L>>2]=0}while(0);d:do if((ba|0)==93){ba=0;if(d[(c[W>>2]|0)+38>>0]|0){c[O>>2]=c[(c[(c[T>>2]|0)+16>>2]|0)+8>>2];c[F>>2]=c[w>>2];while(1){if(!(c[O>>2]|0))break;if((c[O>>2]|0)==(c[N>>2]|0))break;c[F>>2]=(c[F>>2]|0)+1;c[O>>2]=c[(c[O>>2]|0)+20>>2]}c[L>>2]=55;c[(c[W>>2]|0)+60+4>>2]=c[F>>2];break}else{do if(c[w>>2]|0){if(!(e[v>>1]&64))break;c[F>>2]=c[w>>2];if(!(e[v>>1]&4096))break d;c[L>>2]=53;break d}while(0);Z=(c[r>>2]|0)+72|0;$=c[Z>>2]|0;c[Z>>2]=$+1;c[F>>2]=$;break}}while(0);c[(c[P>>2]|0)+8>>2]=c[F>>2];if(!(c[L>>2]|0))break;Vw(c[_>>2]|0,c[L>>2]|0,c[F>>2]|0,c[(c[N>>2]|0)+44>>2]|0,c[E>>2]|0)|0;Az(c[r>>2]|0,c[N>>2]|0);if(!(c[(c[Q>>2]|0)+36>>2]&15))break;if(c[(c[Q>>2]|0)+36>>2]&32770)break;if(e[(c[W>>2]|0)+34>>1]&1)break;Fh(c[_>>2]|0,2)}while(0);if((c[E>>2]|0)>=0)bx(c[r>>2]|0,c[E>>2]|0);c[G>>2]=(c[G>>2]|0)+1;c[P>>2]=(c[P>>2]|0)+80}ba=Bz(c[_>>2]|0)|0;c[(c[W>>2]|0)+44>>2]=ba;if(!(a[(c[B>>2]|0)+65>>0]|0)){ba=J;c[ba>>2]=-1;c[ba+4>>2]=-1;c[G>>2]=0;while(1){if((c[G>>2]|0)>=(c[I>>2]|0))break;c[P>>2]=(c[W>>2]|0)+736+((c[G>>2]|0)*80|0);c[aa>>2]=c[(c[(c[P>>2]|0)+64>>2]|0)+36>>2];if((c[(c[(c[P>>2]|0)+64>>2]|0)+36>>2]&16384|0)!=0?(ba=J,kD(c[r>>2]|0,(c[W>>2]|0)+328|0,(c[s>>2]|0)+8+((d[(c[P>>2]|0)+44>>0]|0)*72|0)|0,c[ba>>2]|0,c[ba+4>>2]|0,c[P>>2]|0),(a[(c[B>>2]|0)+65>>0]|0)!=0):0)break a;c[x>>2]=lD(c[r>>2]|0,c[s>>2]|0,c[P>>2]|0,c[G>>2]|0,d[(c[P>>2]|0)+44>>0]|0,b[v>>1]|0)|0;$=Bz(c[_>>2]|0)|0;c[(c[P>>2]|0)+32>>2]=$;$=J;$=mD(c[W>>2]|0,c[G>>2]|0,c[$>>2]|0,c[$+4>>2]|0)|0;ba=J;c[ba>>2]=$;c[ba+4>>2]=C;c[(c[W>>2]|0)+48>>2]=c[(c[P>>2]|0)+24>>2];do if((c[aa>>2]&8192|0)==0?(e[v>>1]&64|0)!=0:0)break;while(0);c[G>>2]=(c[G>>2]|0)+1}c[q>>2]=c[W>>2];ba=c[q>>2]|0;i=ca;return ba|0}}}}else{Sf(c[B>>2]|0,c[W>>2]|0);c[W>>2]=0}while(0);if(c[W>>2]|0){c[(c[r>>2]|0)+428>>2]=c[(c[W>>2]|0)+56>>2];UC(c[B>>2]|0,c[W>>2]|0)}c[q>>2]=0;ba=c[q>>2]|0;i=ca;return ba|0}function SC(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=i;i=i+96|0;m=E+80|0;v=E+76|0;A=E+72|0;o=E+68|0;s=E+64|0;t=E+60|0;z=E+56|0;n=E+52|0;h=E+48|0;l=E+44|0;j=E+40|0;k=E+36|0;p=E+32|0;q=E+28|0;u=E+24|0;r=E+20|0;y=E+16|0;x=E+12|0;B=E+8|0;C=E+4|0;w=E;c[m>>2]=f;c[v>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[v>>2]|0)+8>>2];c[z>>2]=c[(c[m>>2]|0)+4>>2];c[n>>2]=c[c[v>>2]>>2];fC(c[v>>2]|0);c[o>>2]=(d[(c[m>>2]|0)+41>>0]|0)-1;while(1){if((c[o>>2]|0)<0)break;c[s>>2]=(c[m>>2]|0)+736+((c[o>>2]|0)*80|0);c[t>>2]=c[(c[s>>2]|0)+64>>2];Gz(c[A>>2]|0,c[(c[s>>2]|0)+24>>2]|0);if((d[(c[s>>2]|0)+45>>0]|0)!=160){Vw(c[A>>2]|0,d[(c[s>>2]|0)+45>>0]|0,c[(c[s>>2]|0)+48>>2]|0,c[(c[s>>2]|0)+52>>2]|0,d[(c[s>>2]|0)+46>>0]|0)|0;Fh(c[A>>2]|0,a[(c[s>>2]|0)+47>>0]|0)}a:do if((c[(c[t>>2]|0)+36>>2]&2048|0)!=0?(c[(c[s>>2]|0)+56>>2]|0)>0:0){Gz(c[A>>2]|0,c[(c[s>>2]|0)+16>>2]|0);c[j>>2]=c[(c[s>>2]|0)+56>>2];c[l>>2]=(c[(c[s>>2]|0)+56+4>>2]|0)+(((c[j>>2]|0)-1|0)*12|0);while(1){if((c[j>>2]|0)<=0)break a;Fz(c[A>>2]|0,(c[(c[l>>2]|0)+4>>2]|0)+1|0);Rw(c[A>>2]|0,d[(c[l>>2]|0)+8>>0]|0,c[c[l>>2]>>2]|0,c[(c[l>>2]|0)+4>>2]|0)|0;Fz(c[A>>2]|0,(c[(c[l>>2]|0)+4>>2]|0)-1|0);c[j>>2]=(c[j>>2]|0)+-1;c[l>>2]=(c[l>>2]|0)+-12}}while(0);Gz(c[A>>2]|0,c[(c[s>>2]|0)+12>>2]|0);if(c[(c[s>>2]|0)+20>>2]|0){Ez(c[A>>2]|0,c[(c[s>>2]|0)+20>>2]|0)|0;Fz(c[A>>2]|0,c[(c[s>>2]|0)+20>>2]|0);Fz(c[A>>2]|0,(c[(c[s>>2]|0)+20>>2]|0)-2|0)}if(c[(c[s>>2]|0)+40>>2]|0){if(c[(Mz(c[A>>2]|0,(c[(c[s>>2]|0)+40>>2]|0)-1|0)|0)+4>>2]|0)c[k>>2]=141;else c[k>>2]=142;Rw(c[A>>2]|0,c[k>>2]|0,c[(c[s>>2]|0)+36>>2]|0,c[(c[s>>2]|0)+40>>2]|0)|0}if(c[c[s>>2]>>2]|0){c[h>>2]=xz(c[A>>2]|0,138,c[c[s>>2]>>2]|0)|0;if(!(c[(c[t>>2]|0)+36>>2]&64))xz(c[A>>2]|0,104,c[(c[z>>2]|0)+8+((c[o>>2]|0)*72|0)+44>>2]|0)|0;if(c[(c[t>>2]|0)+36>>2]&512)xz(c[A>>2]|0,104,c[(c[s>>2]|0)+8>>2]|0)|0;f=c[A>>2]|0;g=c[s>>2]|0;if((d[(c[s>>2]|0)+45>>0]|0)==15)Rw(f,14,c[g+48>>2]|0,c[(c[s>>2]|0)+28>>2]|0)|0;else Ez(f,c[g+28>>2]|0)|0;Fz(c[A>>2]|0,c[h>>2]|0)}c[o>>2]=(c[o>>2]|0)+-1}Gz(c[A>>2]|0,c[(c[m>>2]|0)+52>>2]|0);c[o>>2]=0;c[s>>2]=(c[m>>2]|0)+736;while(1){if((c[o>>2]|0)>=(d[(c[m>>2]|0)+41>>0]|0))break;c[r>>2]=0;c[y>>2]=(c[z>>2]|0)+8+((d[(c[s>>2]|0)+44>>0]|0)*72|0);c[x>>2]=c[(c[y>>2]|0)+16>>2];c[t>>2]=c[(c[s>>2]|0)+64>>2];if(((d[(c[y>>2]|0)+36+1>>0]|0)>>>4&1|0)!=0?(a[(c[n>>2]|0)+65>>0]|0)==0:0)TC(c[A>>2]|0,c[(c[s>>2]|0)+32>>2]|0,c[(c[s>>2]|0)+4>>2]|0,c[(c[y>>2]|0)+32>>2]|0,0);else D=32;b:do if((D|0)==32){D=0;if(((d[(c[x>>2]|0)+42>>0]&2|0)==0?(c[(c[x>>2]|0)+12>>2]|0)==0:0)?(e[(c[m>>2]|0)+34>>1]&16|0)==0:0){c[B>>2]=c[(c[t>>2]|0)+36>>2];if((d[(c[m>>2]|0)+38>>0]|0)==0?(c[B>>2]&64|0)==0:0)xz(c[A>>2]|0,61,c[(c[y>>2]|0)+44>>2]|0)|0;if(((c[B>>2]&512|0)!=0?(c[B>>2]&16640|0)==0:0)?(c[(c[s>>2]|0)+8>>2]|0)!=(c[(c[m>>2]|0)+60+4>>2]|0):0)xz(c[A>>2]|0,61,c[(c[s>>2]|0)+8>>2]|0)|0}f=c[t>>2]|0;if(!(c[(c[t>>2]|0)+36>>2]&576)){if(c[f+36>>2]&8192)c[r>>2]=c[(c[s>>2]|0)+56>>2]}else c[r>>2]=c[f+24+4>>2];if(c[r>>2]|0){if((d[(c[m>>2]|0)+38>>0]|0)!=0?(d[(c[(c[r>>2]|0)+12>>2]|0)+42>>0]&32|0)==0:0)break;if(!(a[(c[n>>2]|0)+65>>0]|0)){c[q>>2]=Bz(c[A>>2]|0)|0;c[p>>2]=c[(c[s>>2]|0)+32>>2];c[u>>2]=Mz(c[A>>2]|0,c[p>>2]|0)|0;while(1){if((c[p>>2]|0)>=(c[q>>2]|0))break b;do if((c[(c[u>>2]|0)+4>>2]|0)==(c[(c[s>>2]|0)+4>>2]|0)){f=c[u>>2]|0;if((d[c[u>>2]>>0]|0)!=47){if((d[f>>0]|0)!=103)break;c[(c[u>>2]|0)+4>>2]=c[(c[s>>2]|0)+8>>2];a[c[u>>2]>>0]=113;break}c[C>>2]=c[f+8>>2];if(d[(c[x>>2]|0)+42>>0]&32){c[w>>2]=Ej(c[x>>2]|0)|0;c[C>>2]=b[(c[(c[w>>2]|0)+4>>2]|0)+(c[C>>2]<<1)>>1]}c[C>>2]=(uA(c[r>>2]|0,c[C>>2]&65535)|0)<<16>>16;if((c[C>>2]|0)>=0){c[(c[u>>2]|0)+8>>2]=c[C>>2];c[(c[u>>2]|0)+4>>2]=c[(c[s>>2]|0)+8>>2]}}while(0);c[p>>2]=(c[p>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+20}}}}while(0);c[o>>2]=(c[o>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+80}c[(c[v>>2]|0)+428>>2]=c[(c[m>>2]|0)+56>>2];UC(c[n>>2]|0,c[m>>2]|0);i=E;return}function TC(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+32|0;q=p+24|0;j=p+20|0;k=p+16|0;l=p+12|0;m=p+8|0;o=p+4|0;n=p;c[q>>2]=b;c[j>>2]=e;c[k>>2]=f;c[l>>2]=g;c[m>>2]=h;c[o>>2]=Mz(c[q>>2]|0,c[j>>2]|0)|0;c[n>>2]=Bz(c[q>>2]|0)|0;while(1){if((c[j>>2]|0)>=(c[n>>2]|0))break;do if((c[(c[o>>2]|0)+4>>2]|0)==(c[k>>2]|0)){h=c[o>>2]|0;if((d[c[o>>2]>>0]|0|0)==47){a[h>>0]=30;c[(c[o>>2]|0)+4>>2]=(c[(c[o>>2]|0)+8>>2]|0)+(c[l>>2]|0);c[(c[o>>2]|0)+8>>2]=c[(c[o>>2]|0)+12>>2];c[(c[o>>2]|0)+12>>2]=0;break}if((d[h>>0]|0|0)==103){h=c[o>>2]|0;if(c[m>>2]|0){a[h>>0]=37;c[(c[o>>2]|0)+4>>2]=c[(c[o>>2]|0)+8>>2];c[(c[o>>2]|0)+8>>2]=1;break}else{a[h>>0]=25;c[(c[o>>2]|0)+4>>2]=0;c[(c[o>>2]|0)+12>>2]=0;break}}}while(0);c[j>>2]=(c[j>>2]|0)+1;c[o>>2]=(c[o>>2]|0)+20}i=p;return}function UC(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=a;c[f>>2]=b;if(!(c[f>>2]|0)){i=k;return}c[g>>2]=0;while(1){if((c[g>>2]|0)>=(d[(c[f>>2]|0)+41>>0]|0|0))break;c[j>>2]=(c[f>>2]|0)+736+((c[g>>2]|0)*80|0);if((c[(c[j>>2]|0)+64>>2]|0)!=0?(c[(c[(c[j>>2]|0)+64>>2]|0)+36>>2]&2048|0)!=0:0)Sf(c[e>>2]|0,c[(c[j>>2]|0)+56+4>>2]|0);c[g>>2]=(c[g>>2]|0)+1}VC((c[f>>2]|0)+328|0);while(1){if(!(c[(c[f>>2]|0)+16>>2]|0))break;c[h>>2]=c[(c[f>>2]|0)+16>>2];c[(c[f>>2]|0)+16>>2]=c[(c[h>>2]|0)+52>>2];WC(c[e>>2]|0,c[h>>2]|0)}Sf(c[e>>2]|0,c[f>>2]|0);i=k;return}function VC(a){a=a|0;var b=0,d=0,f=0,g=0,h=0;h=i;i=i+16|0;b=h+12|0;g=h+8|0;d=h+4|0;f=h;c[b>>2]=a;c[f>>2]=c[c[c[c[b>>2]>>2]>>2]>>2];c[g>>2]=(c[(c[b>>2]|0)+12>>2]|0)-1;c[d>>2]=c[(c[b>>2]|0)+20>>2];while(1){if((c[g>>2]|0)<0)break;if((e[(c[d>>2]|0)+20>>1]|0)&1)Zu(c[f>>2]|0,c[c[d>>2]>>2]|0);if(!((e[(c[d>>2]|0)+20>>1]|0)&16)){if((e[(c[d>>2]|0)+20>>1]|0)&32)$C(c[f>>2]|0,c[(c[d>>2]|0)+12>>2]|0)}else _C(c[f>>2]|0,c[(c[d>>2]|0)+12>>2]|0);c[g>>2]=(c[g>>2]|0)+-1;c[d>>2]=(c[d>>2]|0)+48}if((c[(c[b>>2]|0)+20>>2]|0)==((c[b>>2]|0)+24|0)){i=h;return}Sf(c[f>>2]|0,c[(c[b>>2]|0)+20>>2]|0);i=h;return}function WC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;XC(c[f>>2]|0,c[e>>2]|0);Sf(c[f>>2]|0,c[e>>2]|0);i=d;return}function XC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=a;c[e>>2]=b;if((c[(c[e>>2]|0)+48>>2]|0)!=((c[e>>2]|0)+56|0))Sf(c[d>>2]|0,c[(c[e>>2]|0)+48>>2]|0);YC(c[d>>2]|0,c[e>>2]|0);ZC(c[e>>2]|0);i=f;return}function YC(b,e){b=b|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=b;c[g>>2]=e;if(!(c[(c[g>>2]|0)+36>>2]&17408)){i=h;return}if((c[(c[g>>2]|0)+36>>2]&1024|0)!=0?(d[(c[g>>2]|0)+24+4>>0]|0|0)!=0:0){Kd(c[(c[g>>2]|0)+24+8>>2]|0);a[(c[g>>2]|0)+24+4>>0]=0;c[(c[g>>2]|0)+24+8>>2]=0;i=h;return}if(!(c[(c[g>>2]|0)+36>>2]&16384)){i=h;return}if(!(c[(c[g>>2]|0)+24+4>>2]|0)){i=h;return}Sf(c[f>>2]|0,c[(c[(c[g>>2]|0)+24+4>>2]|0)+16>>2]|0);Sf(c[f>>2]|0,c[(c[g>>2]|0)+24+4>>2]|0);c[(c[g>>2]|0)+24+4>>2]=0;i=h;return}function ZC(a){a=a|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=a;c[(c[e>>2]|0)+48>>2]=(c[e>>2]|0)+56;b[(c[e>>2]|0)+40>>1]=0;b[(c[e>>2]|0)+44>>1]=3;c[(c[e>>2]|0)+36>>2]=0;i=d;return}function _C(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;VC(c[e>>2]|0);Sf(c[f>>2]|0,c[e>>2]|0);i=d;return}function $C(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;VC(c[e>>2]|0);Sf(c[f>>2]|0,c[e>>2]|0);i=d;return}function aD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;c[c[e>>2]>>2]=c[f>>2];c[(c[e>>2]|0)+4>>2]=0;c[(c[e>>2]|0)+12>>2]=0;c[(c[e>>2]|0)+16>>2]=8;c[(c[e>>2]|0)+20>>2]=(c[e>>2]|0)+24;i=d;return}function bD(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l+8|0;h=l+4|0;j=l+12|0;k=l;c[g>>2]=b;c[h>>2]=e;a[j>>0]=f;c[k>>2]=Tx(c[h>>2]|0)|0;a[(c[g>>2]|0)+8>>0]=a[j>>0]|0;if(!(c[k>>2]|0)){i=l;return}f=c[g>>2]|0;if((d[c[k>>2]>>0]|0|0)!=(d[j>>0]|0|0)){nE(f,c[h>>2]|0,0)|0;i=l;return}else{bD(f,c[(c[k>>2]|0)+12>>2]|0,a[j>>0]|0);bD(c[g>>2]|0,c[(c[k>>2]|0)+16>>2]|0,a[j>>0]|0);i=l;return}}function cD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=c[f>>2]|0;f=c[e>>2]|0;a=c[f>>2]|0;c[f>>2]=a+1;c[(c[e>>2]|0)+4+(a<<2)>>2]=b;i=d;return}function dD(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r;g=r+40|0;h=r+36|0;j=r+32|0;p=r+28|0;o=r+24|0;k=r+20|0;l=r+16|0;m=r+12|0;n=r+8|0;c[g>>2]=a;c[h>>2]=e;c[j>>2]=f;if(!((d[(c[h>>2]|0)+36+1>>0]|0)>>>2&1)){i=r;return}c[p>>2]=c[(c[h>>2]|0)+16>>2];c[l>>2]=c[(c[h>>2]|0)+64>>2];if(!(c[l>>2]|0)){i=r;return}c[k>>2]=0;c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[c[l>>2]>>2]|0)){e=13;break}while(1){if((c[k>>2]|0)<(b[(c[p>>2]|0)+34>>1]|0))e=(d[(c[(c[p>>2]|0)+4>>2]|0)+((c[k>>2]|0)*24|0)+23>>0]&2|0)==0;else e=0;a=c[k>>2]|0;if(!e)break;c[k>>2]=a+1}f=c[g>>2]|0;if((a|0)>=(b[(c[p>>2]|0)+34>>1]|0)){e=10;break}c[m>>2]=rv(f,152,0,0,0)|0;if(!(c[m>>2]|0)){e=13;break}c[(c[m>>2]|0)+28>>2]=c[(c[h>>2]|0)+44>>2];a=c[k>>2]|0;c[k>>2]=a+1;b[(c[m>>2]|0)+32>>1]=a;c[(c[m>>2]|0)+44>>2]=c[p>>2];a=c[g>>2]|0;f=c[m>>2]|0;c[n>>2]=rv(a,79,f,ny(c[c[g>>2]>>2]|0,c[(c[(c[l>>2]|0)+4>>2]|0)+((c[o>>2]|0)*20|0)>>2]|0,0)|0,0)|0;nE(c[j>>2]|0,c[n>>2]|0,1)|0;c[o>>2]=(c[o>>2]|0)+1}if((e|0)==10){o=c[o>>2]|0;c[q>>2]=c[c[p>>2]>>2];c[q+4>>2]=o;Ah(f,35704,q);i=r;return}else if((e|0)==13){i=r;return}}function eD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;c[f>>2]=(c[(c[e>>2]|0)+12>>2]|0)-1;while(1){if((c[f>>2]|0)<0)break;jE(c[d>>2]|0,c[e>>2]|0,c[f>>2]|0);c[f>>2]=(c[f>>2]|0)+-1}i=g;return}function fD(a,f,g,h){a=a|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+48|0;j=u+36|0;k=u+32|0;l=u+28|0;m=u+24|0;n=u+20|0;s=u+16|0;r=u+12|0;o=u+8|0;p=u+4|0;q=u;c[k>>2]=a;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;if((c[c[l>>2]>>2]|0)!=1){c[j>>2]=0;t=c[j>>2]|0;i=u;return t|0}c[p>>2]=c[(c[l>>2]|0)+8+44>>2];c[s>>2]=c[(c[l>>2]|0)+8+16>>2];c[o>>2]=0;while(1){if((c[o>>2]|0)>=(c[c[n>>2]>>2]|0))break;c[q>>2]=Tx(c[(c[(c[n>>2]|0)+4>>2]|0)+((c[o>>2]|0)*20|0)>>2]|0)|0;if(((d[c[q>>2]>>0]|0)==152?(c[(c[q>>2]|0)+28>>2]|0)==(c[p>>2]|0):0)?(b[(c[q>>2]|0)+32>>1]|0)<0:0){t=8;break}c[o>>2]=(c[o>>2]|0)+1}if((t|0)==8){c[j>>2]=1;t=c[j>>2]|0;i=u;return t|0}c[r>>2]=c[(c[s>>2]|0)+8>>2];while(1){if(!(c[r>>2]|0)){t=22;break}if(d[(c[r>>2]|0)+54>>0]|0){c[o>>2]=0;while(1){if((c[o>>2]|0)>=(e[(c[r>>2]|0)+50>>1]|0))break;if(!(xD(c[m>>2]|0,c[p>>2]|0,c[o>>2]|0,-1,-1,2,c[r>>2]|0)|0)){if((iE(c[k>>2]|0,c[n>>2]|0,c[p>>2]|0,c[r>>2]|0,c[o>>2]|0)|0)<0)break;if(!(bE(c[r>>2]|0,c[o>>2]|0)|0))break}c[o>>2]=(c[o>>2]|0)+1}if((c[o>>2]|0)==(e[(c[r>>2]|0)+50>>1]|0)){t=20;break}}c[r>>2]=c[(c[r>>2]|0)+20>>2]}if((t|0)==20){c[j>>2]=1;t=c[j>>2]|0;i=u;return t|0}else if((t|0)==22){c[j>>2]=0;t=c[j>>2]|0;i=u;return t|0}return 0}function gD(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;g=t+44|0;h=t+40|0;s=t+36|0;n=t+32|0;r=t+28|0;q=t+24|0;o=t+20|0;j=t+16|0;k=t+12|0;p=t+8|0;m=t+4|0;l=t;c[h>>2]=f;c[s>>2]=c[c[h>>2]>>2];if((e[(c[s>>2]|0)+34>>1]|0)&32){c[g>>2]=0;s=c[g>>2]|0;i=t;return s|0}c[n>>2]=(c[(c[s>>2]|0)+4>>2]|0)+8;c[p>>2]=c[(c[n>>2]|0)+16>>2];if((d[(c[p>>2]|0)+42>>0]|0)&16){c[g>>2]=0;s=c[g>>2]|0;i=t;return s|0}if((d[(c[n>>2]|0)+36+1>>0]|0)>>>1&1){c[g>>2]=0;s=c[g>>2]|0;i=t;return s|0}c[j>>2]=c[(c[n>>2]|0)+44>>2];c[r>>2]=(c[s>>2]|0)+328;c[o>>2]=c[(c[h>>2]|0)+12>>2];c[(c[o>>2]|0)+36>>2]=0;b[(c[o>>2]|0)+42>>1]=0;c[q>>2]=xD(c[r>>2]|0,c[j>>2]|0,-1,0,0,130,0)|0;a:do if(c[q>>2]|0){c[(c[o>>2]|0)+36>>2]=4353;c[c[(c[o>>2]|0)+48>>2]>>2]=c[q>>2];b[(c[o>>2]|0)+40>>1]=1;b[(c[o>>2]|0)+24>>1]=1;b[(c[o>>2]|0)+20>>1]=33}else{c[m>>2]=c[(c[p>>2]|0)+8>>2];while(1){if(!(c[m>>2]|0))break a;if(((d[(c[m>>2]|0)+54>>0]|0|0)!=0?(c[(c[m>>2]|0)+36>>2]|0)==0:0)?(e[(c[m>>2]|0)+50>>1]|0|0)<=3:0){c[l>>2]=((d[(c[m>>2]|0)+55>>0]|0)>>>3&1|0)!=0?130:2;c[k>>2]=0;while(1){if((c[k>>2]|0)>=(e[(c[m>>2]|0)+50>>1]|0|0))break;c[q>>2]=xD(c[r>>2]|0,c[j>>2]|0,c[k>>2]|0,0,0,c[l>>2]|0,c[m>>2]|0)|0;if(!(c[q>>2]|0))break;c[(c[(c[o>>2]|0)+48>>2]|0)+(c[k>>2]<<2)>>2]=c[q>>2];c[k>>2]=(c[k>>2]|0)+1}if((c[k>>2]|0)==(e[(c[m>>2]|0)+50>>1]|0|0))break}c[m>>2]=c[(c[m>>2]|0)+20>>2]}c[(c[o>>2]|0)+36>>2]=4609;if(!(((d[(c[m>>2]|0)+55>>0]|0)>>>5&1|0)==0?(r=(c[n>>2]|0)+56|0,p=c[r>>2]|0,r=c[r+4>>2]|0,q=$D(c[m>>2]|0)|0,!((p&~q|0)==0&(r&~C|0)==0)):0)){r=(c[o>>2]|0)+36|0;c[r>>2]=c[r>>2]|64}b[(c[o>>2]|0)+40>>1]=c[k>>2];b[(c[o>>2]|0)+24>>1]=c[k>>2];c[(c[o>>2]|0)+24+4>>2]=c[m>>2];b[(c[o>>2]|0)+20>>1]=39}while(0);if(!(c[(c[o>>2]|0)+36>>2]|0)){c[g>>2]=0;s=c[g>>2]|0;i=t;return s|0}b[(c[o>>2]|0)+22>>1]=1;c[(c[s>>2]|0)+736+64>>2]=c[o>>2];q=nD((c[s>>2]|0)+68|0,c[j>>2]|0)|0;r=(c[o>>2]|0)+8|0;c[r>>2]=q;c[r+4>>2]=C;c[(c[s>>2]|0)+736+4>>2]=c[j>>2];b[(c[s>>2]|0)+32>>1]=1;if(c[(c[s>>2]|0)+8>>2]|0)a[(c[s>>2]|0)+36>>0]=c[c[(c[s>>2]|0)+8>>2]>>2];if((e[(c[s>>2]|0)+34>>1]|0)&1024)a[(c[s>>2]|0)+40>>0]=1;c[g>>2]=1;s=c[g>>2]|0;i=t;return s|0}function hD(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;s=i;i=i+80|0;e=s+60|0;n=s+56|0;g=s+16|0;h=s+8|0;f=s+52|0;t=s+48|0;m=s+44|0;l=s+40|0;p=s+36|0;r=s+32|0;q=s+28|0;o=s+64|0;j=s;k=s+24|0;c[e>>2]=b;c[n>>2]=c[c[e>>2]>>2];b=g;c[b>>2]=0;c[b+4>>2]=0;b=h;c[b>>2]=0;c[b+4>>2]=0;c[t>>2]=c[(c[n>>2]|0)+4>>2];c[l>>2]=(c[t>>2]|0)+8+((d[(c[n>>2]|0)+41>>0]|0)*72|0);c[p>>2]=c[c[c[n>>2]>>2]>>2];c[r>>2]=0;a[o>>0]=0;c[q>>2]=c[(c[e>>2]|0)+12>>2];ZC(c[q>>2]|0);c[f>>2]=0;c[m>>2]=(c[t>>2]|0)+8;while(1){if((c[m>>2]|0)>>>0>=(c[l>>2]|0)>>>0){e=19;break}b=j;c[b>>2]=0;c[b+4>>2]=0;a[(c[q>>2]|0)+16>>0]=c[f>>2];b=nD((c[n>>2]|0)+68|0,c[(c[m>>2]|0)+44>>2]|0)|0;t=(c[q>>2]|0)+8|0;c[t>>2]=b;c[t+4>>2]=C;if((d[(c[m>>2]|0)+36>>0]|0|(d[o>>0]|0))&10){u=h;b=c[u+4>>2]|0;t=g;c[t>>2]=c[u>>2];c[t+4>>2]=b}a[o>>0]=a[(c[m>>2]|0)+36>>0]|0;if((d[(c[(c[m>>2]|0)+16>>2]|0)+42>>0]|0)&16){c[k>>2]=(c[m>>2]|0)+72;while(1){if((c[k>>2]|0)>>>0>=(c[l>>2]|0)>>>0)break;u=j;if(!(!((c[u>>2]|0)!=0|(c[u+4>>2]|0)!=0)?((d[(c[k>>2]|0)+36>>0]|0)&10|0)==0:0)){b=nD((c[n>>2]|0)+68|0,c[(c[k>>2]|0)+44>>2]|0)|0;v=j;t=c[v+4>>2]|C;u=j;c[u>>2]=c[v>>2]|b;c[u+4>>2]=t}c[k>>2]=(c[k>>2]|0)+72}u=g;v=j;c[r>>2]=OD(c[e>>2]|0,c[u>>2]|0,c[u+4>>2]|0,c[v>>2]|0,c[v+4>>2]|0)|0}else{v=g;c[r>>2]=PD(c[e>>2]|0,c[v>>2]|0,c[v+4>>2]|0)|0}if(!(c[r>>2]|0)){u=g;v=j;c[r>>2]=QD(c[e>>2]|0,c[u>>2]|0,c[u+4>>2]|0,c[v>>2]|0,c[v+4>>2]|0)|0}t=(c[q>>2]|0)+8|0;b=h;u=c[b+4>>2]|c[t+4>>2];v=h;c[v>>2]=c[b>>2]|c[t>>2];c[v+4>>2]=u;if(c[r>>2]|0){e=19;break}if(d[(c[p>>2]|0)+65>>0]|0){e=19;break}c[f>>2]=(c[f>>2]|0)+1;c[m>>2]=(c[m>>2]|0)+72}if((e|0)==19){XC(c[p>>2]|0,c[q>>2]|0);i=s;return c[r>>2]|0}return 0}function iD(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,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=i;i=i+160|0;E=U+32|0;M=U+132|0;N=U+128|0;G=U+146|0;r=U+124|0;P=U+120|0;z=U+116|0;O=U+112|0;H=U+108|0;n=U+104|0;p=U+100|0;t=U+96|0;w=U+92|0;s=U+144|0;u=U+142|0;y=U+88|0;v=U+84|0;k=U+80|0;m=U+76|0;R=U+72|0;A=U+68|0;K=U+64|0;j=U+60|0;l=U+56|0;S=U+52|0;h=U+48|0;x=U+140|0;B=U+138|0;C=U+136|0;o=U+148|0;q=U+24|0;D=U+16|0;J=U+44|0;I=U+8|0;L=U+40|0;T=U;Q=U+36|0;c[N>>2]=f;b[G>>1]=g;c[t>>2]=0;b[s>>1]=0;b[u>>1]=0;c[l>>2]=0;c[z>>2]=c[c[N>>2]>>2];c[O>>2]=c[c[z>>2]>>2];c[P>>2]=d[(c[N>>2]|0)+41>>0];if((c[P>>2]|0)<=1)g=1;else g=(c[P>>2]|0)==2?5:10;c[r>>2]=g;if((c[(c[N>>2]|0)+8>>2]|0)!=0?(b[G>>1]|0)!=0:0)c[w>>2]=c[c[(c[N>>2]|0)+8>>2]>>2];else c[w>>2]=0;c[h>>2]=(_(32+(c[P>>2]<<2)|0,c[r>>2]|0)|0)<<1;c[h>>2]=(c[h>>2]|0)+(c[w>>2]<<1);h=c[h>>2]|0;c[S>>2]=Fw(c[O>>2]|0,h,((h|0)<0)<<31>>31)|0;if(!(c[S>>2]|0)){c[M>>2]=7;T=c[M>>2]|0;i=U;return T|0}c[m>>2]=c[S>>2];c[k>>2]=(c[m>>2]|0)+(c[r>>2]<<5);h=c[k>>2]|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[h+20>>2]=0;c[h+24>>2]=0;c[h+28>>2]=0;c[j>>2]=(c[k>>2]|0)+(c[r>>2]<<5);c[n>>2]=c[r>>2]<<1;c[R>>2]=c[m>>2];while(1){if((c[n>>2]|0)<=0)break;c[(c[R>>2]|0)+24>>2]=c[j>>2];c[n>>2]=(c[n>>2]|0)+-1;c[R>>2]=(c[R>>2]|0)+32;c[j>>2]=(c[j>>2]|0)+(c[P>>2]<<2)}if(c[w>>2]|0){c[l>>2]=c[j>>2];kR(c[l>>2]|0,0,c[w>>2]<<1|0)|0}if((c[(c[z>>2]|0)+428>>2]|0)>>>0<48)g=c[(c[z>>2]|0)+428>>2]|0;else g=48;b[(c[k>>2]|0)+16>>1]=g;c[v>>2]=1;if(c[w>>2]|0)a[(c[k>>2]|0)+22>>0]=(c[P>>2]|0)>0?-1:c[w>>2]|0;c[H>>2]=0;while(1){if((c[H>>2]|0)>=(c[P>>2]|0))break;c[y>>2]=0;c[n>>2]=0;c[R>>2]=c[k>>2];while(1){if((c[n>>2]|0)>=(c[v>>2]|0))break;c[K>>2]=c[(c[N>>2]|0)+16>>2];while(1){if(!(c[K>>2]|0))break;a[o>>0]=a[(c[R>>2]|0)+22>>0]|0;h=D;c[h>>2]=0;c[h+4>>2]=0;h=c[K>>2]|0;j=c[R>>2]|0;a:do if(!((c[h>>2]&~c[j>>2]|0)!=0?1:(c[h+4>>2]&~c[j+4>>2]|0)!=0)?(h=(c[K>>2]|0)+8|0,j=c[R>>2]|0,!((c[h>>2]&c[j>>2]|0)!=0?1:(c[h+4>>2]&c[j+4>>2]|0)!=0)):0){b[C>>1]=KD(b[(c[K>>2]|0)+18>>1]|0,(b[(c[K>>2]|0)+20>>1]|0)+(b[(c[R>>2]|0)+16>>1]|0)&65535)|0;b[C>>1]=KD(b[C>>1]|0,b[(c[R>>2]|0)+20>>1]|0)|0;b[x>>1]=(b[(c[R>>2]|0)+16>>1]|0)+(b[(c[K>>2]|0)+22>>1]|0);g=c[R>>2]|0;f=(c[K>>2]|0)+8|0;h=c[g+4>>2]|c[f+4>>2];j=q;c[j>>2]=c[g>>2]|c[f>>2];c[j+4>>2]=h;if((a[o>>0]|0)<0)a[o>>0]=LD(c[N>>2]|0,c[(c[N>>2]|0)+8>>2]|0,c[R>>2]|0,b[(c[N>>2]|0)+34>>1]|0,c[H>>2]&65535,c[K>>2]|0,D)|0;else{f=(c[R>>2]|0)+8|0;h=c[f+4>>2]|0;j=D;c[j>>2]=c[f>>2];c[j+4>>2]=h}if((a[o>>0]|0)>=0?(a[o>>0]|0)<(c[w>>2]|0):0){if(!(b[(c[l>>2]|0)+(a[o>>0]<<1)>>1]|0)){j=MD(b[G>>1]|0,c[w>>2]|0,a[o>>0]|0)|0;b[(c[l>>2]|0)+(a[o>>0]<<1)>>1]=j}b[B>>1]=KD(b[C>>1]|0,b[(c[l>>2]|0)+(a[o>>0]<<1)>>1]|0)|0}else b[B>>1]=b[C>>1]|0;c[p>>2]=0;c[A>>2]=c[m>>2];while(1){if((c[p>>2]|0)>=(c[y>>2]|0))break;h=c[A>>2]|0;j=q;if(((c[h>>2]|0)==(c[j>>2]|0)?(c[h+4>>2]|0)==(c[j+4>>2]|0):0)?((a[(c[A>>2]|0)+22>>0]^a[o>>0])&128|0)==0:0)break;c[p>>2]=(c[p>>2]|0)+1;c[A>>2]=(c[A>>2]|0)+32}do if((c[p>>2]|0)<(c[y>>2]|0)){if((b[(c[A>>2]|0)+18>>1]|0)<(b[B>>1]|0))break a;if((b[(c[A>>2]|0)+18>>1]|0)!=(b[B>>1]|0))break;if((b[(c[A>>2]|0)+16>>1]|0)<=(b[x>>1]|0))break a}else{do if((c[y>>2]|0)>=(c[r>>2]|0)){if((b[B>>1]|0)>(b[s>>1]|0))break a;if((b[B>>1]|0)!=(b[s>>1]|0))break;if((b[C>>1]|0)>=(b[u>>1]|0))break a}while(0);if((c[y>>2]|0)<(c[r>>2]|0)){j=c[y>>2]|0;c[y>>2]=j+1;c[p>>2]=j}else c[p>>2]=c[t>>2];c[A>>2]=(c[m>>2]|0)+(c[p>>2]<<5)}while(0);g=c[R>>2]|0;j=(c[K>>2]|0)+8|0;h=c[g+4>>2]|c[j+4>>2];f=c[A>>2]|0;c[f>>2]=c[g>>2]|c[j>>2];c[f+4>>2]=h;f=D;h=c[f+4>>2]|0;j=(c[A>>2]|0)+8|0;c[j>>2]=c[f>>2];c[j+4>>2]=h;b[(c[A>>2]|0)+16>>1]=b[x>>1]|0; +b[(c[A>>2]|0)+18>>1]=b[B>>1]|0;b[(c[A>>2]|0)+20>>1]=b[C>>1]|0;a[(c[A>>2]|0)+22>>0]=a[o>>0]|0;iR(c[(c[A>>2]|0)+24>>2]|0,c[(c[R>>2]|0)+24>>2]|0,c[H>>2]<<2|0)|0;c[(c[(c[A>>2]|0)+24>>2]|0)+(c[H>>2]<<2)>>2]=c[K>>2];if((c[y>>2]|0)>=(c[r>>2]|0)){c[t>>2]=0;b[s>>1]=b[(c[m>>2]|0)+18>>1]|0;b[u>>1]=b[(c[m>>2]|0)+16>>1]|0;c[p>>2]=1;c[A>>2]=(c[m>>2]|0)+32;while(1){if((c[p>>2]|0)>=(c[r>>2]|0))break a;do if((b[(c[A>>2]|0)+18>>1]|0)<=(b[s>>1]|0)){if((b[(c[A>>2]|0)+18>>1]|0)!=(b[s>>1]|0))break;if((b[(c[A>>2]|0)+20>>1]|0)>(b[u>>1]|0))F=58}else F=58;while(0);if((F|0)==58){F=0;b[s>>1]=b[(c[A>>2]|0)+18>>1]|0;b[u>>1]=b[(c[A>>2]|0)+20>>1]|0;c[t>>2]=c[p>>2]}c[p>>2]=(c[p>>2]|0)+1;c[A>>2]=(c[A>>2]|0)+32}}}while(0);c[K>>2]=c[(c[K>>2]|0)+52>>2]}c[n>>2]=(c[n>>2]|0)+1;c[R>>2]=(c[R>>2]|0)+32}c[R>>2]=c[m>>2];c[m>>2]=c[k>>2];c[k>>2]=c[R>>2];c[v>>2]=c[y>>2];c[H>>2]=(c[H>>2]|0)+1}if(!(c[v>>2]|0)){Ah(c[z>>2]|0,35564,E);Sf(c[O>>2]|0,c[S>>2]|0);c[M>>2]=1;T=c[M>>2]|0;i=U;return T|0}c[R>>2]=c[k>>2];c[n>>2]=1;while(1){if((c[n>>2]|0)>=(c[v>>2]|0))break;if((b[(c[R>>2]|0)+18>>1]|0)>(b[(c[k>>2]|0)+(c[n>>2]<<5)+18>>1]|0))c[R>>2]=(c[k>>2]|0)+(c[n>>2]<<5);c[n>>2]=(c[n>>2]|0)+1}c[H>>2]=0;while(1){g=c[N>>2]|0;if((c[H>>2]|0)>=(c[P>>2]|0))break;c[J>>2]=g+736+((c[H>>2]|0)*80|0);F=c[(c[(c[R>>2]|0)+24>>2]|0)+(c[H>>2]<<2)>>2]|0;c[K>>2]=F;c[(c[J>>2]|0)+64>>2]=F;a[(c[J>>2]|0)+44>>0]=a[(c[K>>2]|0)+16>>0]|0;c[(c[J>>2]|0)+4>>2]=c[(c[(c[N>>2]|0)+4>>2]|0)+8+((d[(c[J>>2]|0)+44>>0]|0)*72|0)+44>>2];c[H>>2]=(c[H>>2]|0)+1}if(((((e[g+34>>1]&1024|0)!=0?(e[(c[N>>2]|0)+34>>1]&512|0)==0:0)?(d[(c[N>>2]|0)+40>>0]|0)==0:0)?(b[G>>1]|0)!=0:0)?(c[L>>2]=(LD(c[N>>2]|0,c[(c[N>>2]|0)+12>>2]|0,c[R>>2]|0,512,(c[P>>2]|0)-1&65535,c[(c[(c[R>>2]|0)+24>>2]|0)+((c[P>>2]|0)-1<<2)>>2]|0,I)|0)<<24>>24,(c[L>>2]|0)==(c[c[(c[N>>2]|0)+12>>2]>>2]|0)):0)a[(c[N>>2]|0)+40>>0]=2;if(c[(c[N>>2]|0)+8>>2]|0){g=a[(c[R>>2]|0)+22>>0]|0;if(e[(c[N>>2]|0)+34>>1]&512){if((g<<24>>24|0)==(c[c[(c[N>>2]|0)+8>>2]>>2]|0))a[(c[N>>2]|0)+40>>0]=2}else{a[(c[N>>2]|0)+36>>0]=g;if((a[(c[N>>2]|0)+36>>0]|0)<0)a[(c[N>>2]|0)+36>>0]=0;J=(c[R>>2]|0)+8|0;K=c[J+4>>2]|0;L=(c[N>>2]|0)+24|0;c[L>>2]=c[J>>2];c[L+4>>2]=K}if(((e[(c[N>>2]|0)+34>>1]&2048|0)!=0?(c[P>>2]|0)>0?(a[(c[N>>2]|0)+36>>0]|0)==(c[c[(c[N>>2]|0)+8>>2]>>2]|0):0:0)?(L=T,c[L>>2]=0,c[L+4>>2]=0,c[Q>>2]=(LD(c[N>>2]|0,c[(c[N>>2]|0)+8>>2]|0,c[R>>2]|0,0,(c[P>>2]|0)-1&65535,c[(c[(c[R>>2]|0)+24>>2]|0)+((c[P>>2]|0)-1<<2)>>2]|0,T)|0)<<24>>24,(c[Q>>2]|0)==(c[c[(c[N>>2]|0)+8>>2]>>2]|0)):0){a[(c[N>>2]|0)+37>>0]=1;P=T;Q=c[P+4>>2]|0;T=(c[N>>2]|0)+24|0;c[T>>2]=c[P>>2];c[T+4>>2]=Q}}b[(c[N>>2]|0)+32>>1]=b[(c[R>>2]|0)+16>>1]|0;Sf(c[O>>2]|0,c[S>>2]|0);c[M>>2]=0;T=c[M>>2]|0;i=U;return T|0}function jD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+32|0;d=h+16|0;e=h+12|0;f=h+8|0;g=h;c[d>>2]=a;c[e>>2]=b;a=g;c[a>>2]=0;c[a+4>>2]=0;if(!(c[e>>2]|0)){b=g;a=b;a=c[a>>2]|0;b=b+4|0;b=c[b>>2]|0;C=b;i=h;return a|0}c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[e>>2]>>2]|0))break;j=ID(c[d>>2]|0,c[(c[(c[e>>2]|0)+4>>2]|0)+((c[f>>2]|0)*20|0)>>2]|0)|0;k=g;b=c[k+4>>2]|C;a=g;c[a>>2]=c[k>>2]|j;c[a+4>>2]=b;c[f>>2]=(c[f>>2]|0)+1}j=g;k=j;k=c[k>>2]|0;j=j+4|0;j=c[j>>2]|0;C=j;i=h;return k|0}function kD(f,g,h,j,k,l){f=f|0;g=g|0;h=h|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,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;Y=i;i=i+176|0;q=Y+40|0;N=Y+160|0;t=Y+156|0;u=Y+152|0;v=Y+32|0;O=Y+148|0;E=Y+144|0;J=Y+140|0;K=Y+136|0;G=Y+132|0;X=Y+128|0;Q=Y+124|0;I=Y+120|0;R=Y+116|0;W=Y+112|0;S=Y+108|0;y=Y+104|0;D=Y+100|0;F=Y+96|0;H=Y+92|0;s=Y+88|0;B=Y+24|0;x=Y+16|0;p=Y+164|0;T=Y+84|0;A=Y+80|0;U=Y+76|0;P=Y+72|0;V=Y+68|0;o=Y+64|0;n=Y+60|0;m=Y+8|0;z=Y+56|0;w=Y;L=Y+52|0;M=Y+48|0;c[N>>2]=f;c[t>>2]=g;c[u>>2]=h;g=v;c[g>>2]=j;c[g+4>>2]=k;c[O>>2]=l;a[p>>0]=0;c[T>>2]=0;c[A>>2]=0;c[P>>2]=0;c[X>>2]=c[(c[N>>2]|0)+8>>2];c[Q>>2]=UA(c[N>>2]|0)|0;c[E>>2]=0;c[I>>2]=c[(c[u>>2]|0)+16>>2];c[K>>2]=(c[(c[t>>2]|0)+20>>2]|0)+((c[(c[t>>2]|0)+12>>2]|0)*48|0);c[H>>2]=c[(c[O>>2]|0)+64>>2];g=B;c[g>>2]=0;c[g+4>>2]=0;c[J>>2]=c[(c[t>>2]|0)+20>>2];while(1){if((c[J>>2]|0)>>>0>=(c[K>>2]|0)>>>0)break;c[o>>2]=c[c[J>>2]>>2];g=c[H>>2]|0;if((((c[g>>2]|0)==0&(c[g+4>>2]|0)==0?(e[(c[J>>2]|0)+20>>1]&2|0)==0:0)?(c[(c[o>>2]|0)+4>>2]&1|0)==0:0)?(ED(c[o>>2]|0,c[(c[u>>2]|0)+44>>2]|0)|0)!=0:0){h=c[c[N>>2]>>2]|0;g=c[T>>2]|0;c[T>>2]=az(h,g,ny(c[c[N>>2]>>2]|0,c[o>>2]|0,0)|0)|0}g=v;if(FD(c[J>>2]|0,c[u>>2]|0,c[g>>2]|0,c[g+4>>2]|0)|0){c[n>>2]=c[(c[J>>2]|0)+12>>2];if((c[n>>2]|0)>=64){j=0;k=-2147483648}else{j=lR(1,0,c[n>>2]|0)|0;k=C}g=m;c[g>>2]=j;c[g+4>>2]=k;if(!(a[p>>0]|0)){g=c[(c[(c[I>>2]|0)+4>>2]|0)+((c[n>>2]|0)*24|0)>>2]|0;c[q>>2]=c[c[I>>2]>>2];c[q+4>>2]=g;Rd(284,35527,q);a[p>>0]=1}h=B;g=m;if((c[h>>2]&c[g>>2]|0)==0?(c[h+4>>2]&c[g+4>>2]|0)==0:0){if(GD(c[c[N>>2]>>2]|0,c[H>>2]|0,(c[E>>2]|0)+1|0)|0){r=57;break}l=c[J>>2]|0;f=c[E>>2]|0;c[E>>2]=f+1;c[(c[(c[H>>2]|0)+48>>2]|0)+(f<<2)>>2]=l;f=m;l=B;h=c[l+4>>2]|c[f+4>>2];g=B;c[g>>2]=c[l>>2]|c[f>>2];c[g+4>>2]=h}}c[J>>2]=(c[J>>2]|0)+48}if((r|0)==57){W=c[N>>2]|0;W=c[W>>2]|0;X=c[T>>2]|0;Zu(W,X);i=Y;return}o=c[E>>2]&65535;b[(c[H>>2]|0)+40>>1]=o;b[(c[H>>2]|0)+24>>1]=o;c[(c[H>>2]|0)+36>>2]=16961;o=(c[u>>2]|0)+56|0;p=B;q=c[o+4>>2]&(~c[p+4>>2]|-2147483648);r=x;c[r>>2]=c[o>>2]&~c[p>>2];c[r+4>>2]=q;if(63<(b[(c[I>>2]|0)+34>>1]|0))j=63;else j=b[(c[I>>2]|0)+34>>1]|0;c[D>>2]=j;c[y>>2]=0;while(1){if((c[y>>2]|0)>=(c[D>>2]|0))break;r=x;p=c[r>>2]|0;r=c[r+4>>2]|0;q=lR(1,0,c[y>>2]|0)|0;if((p&q|0)!=0|(r&C|0)!=0)c[E>>2]=(c[E>>2]|0)+1;c[y>>2]=(c[y>>2]|0)+1}if(0!=0?1:(c[(c[u>>2]|0)+56+4>>2]&-2147483648|0)!=0)c[E>>2]=(c[E>>2]|0)+((b[(c[I>>2]|0)+34>>1]|0)-64+1);c[G>>2]=HD(c[c[N>>2]>>2]|0,(c[E>>2]|0)+1&65535,0,s)|0;if(!(c[G>>2]|0)){W=c[N>>2]|0;W=c[W>>2]|0;X=c[T>>2]|0;Zu(W,X);i=Y;return}c[(c[H>>2]|0)+24+4>>2]=c[G>>2];c[c[G>>2]>>2]=35553;c[(c[G>>2]|0)+12>>2]=c[I>>2];c[S>>2]=0;s=B;c[s>>2]=0;c[s+4>>2]=0;c[J>>2]=c[(c[t>>2]|0)+20>>2];while(1){if((c[J>>2]|0)>>>0>=(c[K>>2]|0)>>>0)break;s=v;if(FD(c[J>>2]|0,c[u>>2]|0,c[s>>2]|0,c[s+4>>2]|0)|0){c[z>>2]=c[(c[J>>2]|0)+12>>2];if((c[z>>2]|0)>=64){j=0;k=-2147483648}else{j=lR(1,0,c[z>>2]|0)|0;k=C}r=w;c[r>>2]=j;c[r+4>>2]=k;r=B;s=w;if((c[r>>2]&c[s>>2]|0)==0?(c[r+4>>2]&c[s+4>>2]|0)==0:0){c[L>>2]=c[c[J>>2]>>2];q=w;p=B;r=c[p+4>>2]|c[q+4>>2];s=B;c[s>>2]=c[p>>2]|c[q>>2];c[s+4>>2]=r;b[(c[(c[G>>2]|0)+4>>2]|0)+(c[S>>2]<<1)>>1]=c[(c[J>>2]|0)+12>>2];c[F>>2]=VA(c[N>>2]|0,c[(c[L>>2]|0)+12>>2]|0,c[(c[L>>2]|0)+16>>2]|0)|0;if(c[F>>2]|0)j=c[c[F>>2]>>2]|0;else j=35690;c[(c[(c[G>>2]|0)+32>>2]|0)+(c[S>>2]<<2)>>2]=j;c[S>>2]=(c[S>>2]|0)+1}}c[J>>2]=(c[J>>2]|0)+48}c[y>>2]=0;while(1){if((c[y>>2]|0)>=(c[D>>2]|0))break;L=x;J=c[L>>2]|0;L=c[L+4>>2]|0;K=lR(1,0,c[y>>2]|0)|0;if((J&K|0)!=0|(L&C|0)!=0){b[(c[(c[G>>2]|0)+4>>2]|0)+(c[S>>2]<<1)>>1]=c[y>>2];c[(c[(c[G>>2]|0)+32>>2]|0)+(c[S>>2]<<2)>>2]=35690;c[S>>2]=(c[S>>2]|0)+1}c[y>>2]=(c[y>>2]|0)+1}a:do if(0!=0?1:(c[(c[u>>2]|0)+56+4>>2]&-2147483648|0)!=0){c[y>>2]=63;while(1){if((c[y>>2]|0)>=(b[(c[I>>2]|0)+34>>1]|0))break a;b[(c[(c[G>>2]|0)+4>>2]|0)+(c[S>>2]<<1)>>1]=c[y>>2];c[(c[(c[G>>2]|0)+32>>2]|0)+(c[S>>2]<<2)>>2]=35690;c[S>>2]=(c[S>>2]|0)+1;c[y>>2]=(c[y>>2]|0)+1}}while(0);b[(c[(c[G>>2]|0)+4>>2]|0)+(c[S>>2]<<1)>>1]=-1;c[(c[(c[G>>2]|0)+32>>2]|0)+(c[S>>2]<<2)>>2]=35690;K=(c[N>>2]|0)+72|0;L=c[K>>2]|0;c[K>>2]=L+1;c[(c[O>>2]|0)+8>>2]=L;Rw(c[X>>2]|0,56,c[(c[O>>2]|0)+8>>2]|0,(c[E>>2]|0)+1|0)|0;Az(c[N>>2]|0,c[G>>2]|0);iA(c[N>>2]|0);c[U>>2]=(c[(c[c[t>>2]>>2]|0)+4>>2]|0)+8+((d[(c[O>>2]|0)+44>>0]|0)*72|0);if((d[(c[U>>2]|0)+36+1>>0]|0)>>>4&1){c[M>>2]=c[(c[U>>2]|0)+28>>2];c[P>>2]=Rw(c[X>>2]|0,22,0,0)|0;Vw(c[X>>2]|0,16,c[M>>2]|0,0,c[(c[U>>2]|0)+24>>2]|0)|0;c[R>>2]=xz(c[X>>2]|0,18,c[M>>2]|0)|0}else c[R>>2]=xz(c[X>>2]|0,108,c[(c[O>>2]|0)+4>>2]|0)|0;if(c[T>>2]|0){c[A>>2]=Cz(c[X>>2]|0)|0;LA(c[N>>2]|0,c[T>>2]|0,c[A>>2]|0,16);M=(c[H>>2]|0)+36|0;c[M>>2]=c[M>>2]|131072}c[W>>2]=Wz(c[N>>2]|0)|0;c[V>>2]=Xz(c[N>>2]|0,c[G>>2]|0,c[(c[O>>2]|0)+4>>2]|0,c[W>>2]|0,0,0,0,0)|0;Rw(c[X>>2]|0,110,c[(c[O>>2]|0)+8>>2]|0,c[W>>2]|0)|0;Fh(c[X>>2]|0,16);if(c[T>>2]|0)Gz(c[X>>2]|0,c[A>>2]|0);j=c[X>>2]|0;if((d[(c[U>>2]|0)+36+1>>0]|0)>>>4&1){Lz(j,c[P>>2]|0,(c[V>>2]|0)+(c[S>>2]|0)|0);TC(c[X>>2]|0,c[R>>2]|0,c[(c[O>>2]|0)+4>>2]|0,c[(c[U>>2]|0)+32>>2]|0,1);Ez(c[X>>2]|0,c[R>>2]|0)|0;V=(c[U>>2]|0)+36+1|0;a[V>>0]=a[V>>0]&-17}else Rw(j,7,c[(c[O>>2]|0)+4>>2]|0,(c[R>>2]|0)+1|0)|0;Fh(c[X>>2]|0,3);Fz(c[X>>2]|0,c[R>>2]|0);_z(c[N>>2]|0,c[W>>2]|0);gA(c[N>>2]|0);Fz(c[X>>2]|0,c[Q>>2]|0);W=c[N>>2]|0;W=c[W>>2]|0;X=c[T>>2]|0;Zu(W,X);i=Y;return}function lD(f,g,h,j,k,l){f=f|0;g=g|0;h=h|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,L=0,M=0,N=0,O=0;O=i;i=i+256|0;H=O+40|0;G=O+32|0;J=O+24|0;I=O+16|0;F=O+8|0;E=O;s=O+144|0;m=O+140|0;n=O+136|0;o=O+132|0;t=O+128|0;u=O+124|0;p=O+148|0;B=O+120|0;z=O+116|0;D=O+112|0;q=O+108|0;w=O+104|0;x=O+100|0;A=O+96|0;v=O+92|0;L=O+88|0;C=O+60|0;r=O+152|0;K=O+56|0;y=O+52|0;M=O+48|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[t>>2]=j;c[u>>2]=k;b[p>>1]=l;c[B>>2]=0;do if((d[(c[m>>2]|0)+453>>0]|0|0)==2){c[z>>2]=(c[n>>2]|0)+8+((d[(c[o>>2]|0)+44>>0]|0)*72|0);c[D>>2]=c[(c[m>>2]|0)+8>>2];c[q>>2]=c[c[m>>2]>>2];c[w>>2]=c[(c[m>>2]|0)+468>>2];c[A>>2]=c[(c[o>>2]|0)+64>>2];c[v>>2]=c[(c[A>>2]|0)+36>>2];if((c[v>>2]&8192|0)==0?((e[p>>1]|0)&64|0)==0:0){do if(c[v>>2]&48)m=1;else{if((c[v>>2]&1024|0)==0?(e[(c[A>>2]|0)+24>>1]|0|0)>0:0){m=1;break}m=((e[p>>1]|0)&3|0)!=0}while(0);c[x>>2]=m&1;cg(C,c[q>>2]|0,r,100,1e9);AD(C,(c[x>>2]|0)!=0?35264:35271);m=c[z>>2]|0;if(c[(c[z>>2]|0)+20>>2]|0){c[E>>2]=d[m+40>>0];$z(C,35276,E)}else{c[F>>2]=c[m+8>>2];$z(C,35289,F)}if(c[(c[z>>2]|0)+12>>2]|0){c[I>>2]=c[(c[z>>2]|0)+12>>2];$z(C,35299,I)}do if(!(c[v>>2]&1280)){c[K>>2]=0;c[y>>2]=c[(c[A>>2]|0)+24+4>>2];if(((d[(c[(c[z>>2]|0)+16>>2]|0)+42>>0]|0)&32|0)!=0?(a[(c[y>>2]|0)+55>>0]&3|0)==2:0){if(c[x>>2]|0)c[K>>2]=35306}else N=19;do if((N|0)==19){if(c[v>>2]&131072){c[K>>2]=35318;break}if(c[v>>2]&16384){c[K>>2]=35351;break}if(c[v>>2]&64){c[K>>2]=35376;break}else{c[K>>2]=35394;break}}while(0);if(c[K>>2]|0){aA(C,35403,7);N=c[K>>2]|0;c[J>>2]=c[c[y>>2]>>2];$z(C,N,J);BD(C,c[A>>2]|0)}}else{if((c[v>>2]&256|0)!=0?(c[v>>2]&15|0)!=0:0){do if(!(c[v>>2]&5)){if((c[v>>2]&48|0)==48){c[M>>2]=35413;break}if(c[v>>2]&32){c[M>>2]=35427;break}else{c[M>>2]=35429;break}}else c[M>>2]=35411;while(0);c[G>>2]=c[M>>2];$z(C,35431,G);break}if(c[v>>2]&1024){N=c[(c[A>>2]|0)+24+8>>2]|0;c[H>>2]=c[(c[A>>2]|0)+24>>2];c[H+4>>2]=N;$z(C,35469,H)}}while(0);c[L>>2]=eg(C)|0;c[B>>2]=Uw(c[D>>2]|0,161,c[w>>2]|0,c[t>>2]|0,c[u>>2]|0,c[L>>2]|0,-1)|0;break}c[s>>2]=0;N=c[s>>2]|0;i=O;return N|0}while(0);c[s>>2]=c[B>>2];N=c[s>>2]|0;i=O;return N|0}function mD(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,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;Za=i;i=i+368|0;Ia=Za+8|0;Ja=Za+352|0;Z=Za+348|0;Ka=Za;Oa=Za+344|0;Ha=Za+340|0;Na=Za+336|0;F=Za+332|0;N=Za+328|0;Fa=Za+324|0;Ta=Za+320|0;Ga=Za+316|0;Wa=Za+312|0;Va=Za+308|0;Ua=Za+304|0;Ma=Za+300|0;Ya=Za+296|0;E=Za+292|0;v=Za+288|0;La=Za+284|0;K=Za+280|0;l=Za+276|0;k=Za+272|0;A=Za+268|0;z=Za+264|0;D=Za+260|0;B=Za+256|0;u=Za+252|0;t=Za+248|0;m=Za+244|0;o=Za+240|0;n=Za+236|0;p=Za+232|0;r=Za+228|0;s=Za+224|0;q=Za+220|0;M=Za+358|0;V=Za+216|0;S=Za+212|0;R=Za+208|0;W=Za+204|0;J=Za+200|0;X=Za+196|0;L=Za+192|0;P=Za+188|0;ba=Za+184|0;w=Za+180|0;O=Za+176|0;Y=Za+172|0;I=Za+363|0;G=Za+362|0;H=Za+361|0;x=Za+168|0;y=Za+360|0;T=Za+164|0;U=Za+160|0;Q=Za+156|0;sa=Za+152|0;qa=Za+148|0;na=Za+144|0;aa=Za+140|0;za=Za+136|0;Ba=Za+132|0;Aa=Za+128|0;ca=Za+124|0;ea=Za+120|0;Ca=Za+116|0;ha=Za+112|0;Da=Za+356|0;ma=Za+108|0;xa=Za+104|0;ja=Za+100|0;la=Za+96|0;ta=Za+92|0;ga=Za+88|0;oa=Za+84|0;ra=Za+80|0;wa=Za+76|0;pa=Za+72|0;ia=Za+68|0;va=Za+64|0;_=Za+60|0;ya=Za+56|0;fa=Za+52|0;ua=Za+48|0;ka=Za+44|0;da=Za+40|0;$=Za+36|0;Qa=Za+32|0;Xa=Za+28|0;Ra=Za+24|0;Sa=Za+20|0;Pa=Za+16|0;c[Ja>>2]=f;c[Z>>2]=g;g=Ka;c[g>>2]=h;c[g+4>>2]=j;c[K>>2]=0;c[l>>2]=0;c[Ua>>2]=c[c[Ja>>2]>>2];c[Ya>>2]=c[(c[Ua>>2]|0)+8>>2];c[Wa>>2]=(c[Ja>>2]|0)+328;c[Ma>>2]=c[c[Ua>>2]>>2];c[Ta>>2]=(c[Ja>>2]|0)+736+((c[Z>>2]|0)*80|0);c[Ga>>2]=c[(c[Ta>>2]|0)+64>>2];c[E>>2]=(c[(c[Ja>>2]|0)+4>>2]|0)+8+((d[(c[Ta>>2]|0)+44>>0]|0)*72|0);c[Na>>2]=c[(c[E>>2]|0)+44>>2];g=Ka;h=c[g>>2]|0;g=c[g+4>>2]|0;j=nD((c[Ja>>2]|0)+68|0,c[Na>>2]|0)|0;f=(c[Ta>>2]|0)+72|0;c[f>>2]=h&~j;c[f+4>>2]=g&~C;f=(c[Ja>>2]|0)+24|0;f=hR(c[f>>2]|0,c[f+4>>2]|0,c[Z>>2]|0)|0;c[Fa>>2]=f&1;if(c[(c[Ga>>2]|0)+36>>2]&64)h=(e[(c[Ja>>2]|0)+34>>1]&32|0)==0;else h=0;c[N>>2]=h&1;f=Cz(c[Ya>>2]|0)|0;c[(c[Ta>>2]|0)+16>>2]=f;c[(c[Ta>>2]|0)+12>>2]=f;c[v>>2]=f;f=Cz(c[Ya>>2]|0)|0;c[(c[Ta>>2]|0)+24>>2]=f;c[La>>2]=f;if((d[(c[Ta>>2]|0)+44>>0]|0)>0?(d[(c[E>>2]|0)+36>>0]&8|0)!=0:0){g=(c[Ua>>2]|0)+76|0;f=(c[g>>2]|0)+1|0;c[g>>2]=f;c[c[Ta>>2]>>2]=f;Rw(c[Ya>>2]|0,22,0,c[c[Ta>>2]>>2]|0)|0}do if(!((d[(c[E>>2]|0)+36+1>>0]|0)>>>4&1)){h=c[Ga>>2]|0;if(c[(c[Ga>>2]|0)+36>>2]&1024){c[D>>2]=e[h+40>>1];iA(c[Ua>>2]|0);c[A>>2]=kA(c[Ua>>2]|0,(c[D>>2]|0)+2|0)|0;c[z>>2]=c[(c[Ta>>2]|0)+12>>2];c[Oa>>2]=0;while(1){if((c[Oa>>2]|0)>=(c[D>>2]|0))break;c[B>>2]=(c[A>>2]|0)+(c[Oa>>2]|0)+2;c[Va>>2]=c[(c[(c[Ga>>2]|0)+48>>2]|0)+(c[Oa>>2]<<2)>>2];do if(c[Va>>2]|0){h=c[Ua>>2]|0;j=c[Va>>2]|0;if(e[(c[Va>>2]|0)+18>>1]&1){oD(h,j,c[Ta>>2]|0,c[Oa>>2]|0,c[Fa>>2]|0,c[B>>2]|0)|0;c[z>>2]=c[(c[Ta>>2]|0)+16>>2];break}else{xA(h,c[(c[j>>2]|0)+16>>2]|0,c[B>>2]|0);break}}while(0);c[Oa>>2]=(c[Oa>>2]|0)+1}Rw(c[Ya>>2]|0,22,c[(c[Ga>>2]|0)+24>>2]|0,c[A>>2]|0)|0;Rw(c[Ya>>2]|0,22,c[D>>2]|0,(c[A>>2]|0)+1|0)|0;Uw(c[Ya>>2]|0,11,c[Na>>2]|0,c[z>>2]|0,c[A>>2]|0,c[(c[Ga>>2]|0)+24+8>>2]|0,(d[(c[Ga>>2]|0)+24+4>>0]|0)!=0?-11:-2)|0;a[(c[Ga>>2]|0)+24+4>>0]=0;c[Oa>>2]=0;while(1){if(!((c[Oa>>2]|0)<(c[D>>2]|0)?(c[Oa>>2]|0)<16:0))break;if(e[(c[Ga>>2]|0)+24+6>>1]>>c[Oa>>2]&1)pD(c[Ta>>2]|0,c[(c[(c[Ga>>2]|0)+48>>2]|0)+(c[Oa>>2]<<2)>>2]|0);c[Oa>>2]=(c[Oa>>2]|0)+1}c[(c[Ta>>2]|0)+48>>2]=c[Na>>2];a[(c[Ta>>2]|0)+45>>0]=(d[(c[Ja>>2]|0)+38>>0]|0)!=0?160:154;Ha=Bz(c[Ya>>2]|0)|0;c[(c[Ta>>2]|0)+52>>2]=Ha;nA(c[Ua>>2]|0,c[A>>2]|0,(c[D>>2]|0)+2|0);gA(c[Ua>>2]|0);break}if((c[h+36>>2]&256|0)!=0?(c[(c[Ga>>2]|0)+36>>2]&5|0)!=0:0){c[Va>>2]=c[c[(c[Ga>>2]|0)+48>>2]>>2];Ga=(c[Ua>>2]|0)+76|0;Ha=(c[Ga>>2]|0)+1|0;c[Ga>>2]=Ha;c[l>>2]=Ha;c[K>>2]=oD(c[Ua>>2]|0,c[Va>>2]|0,c[Ta>>2]|0,0,c[Fa>>2]|0,c[l>>2]|0)|0;if((c[K>>2]|0)!=(c[l>>2]|0))_z(c[Ua>>2]|0,c[l>>2]|0);c[F>>2]=c[(c[Ta>>2]|0)+16>>2];Rw(c[Ya>>2]|0,38,c[K>>2]|0,c[F>>2]|0)|0;Vw(c[Ya>>2]|0,70,c[Na>>2]|0,c[F>>2]|0,c[K>>2]|0)|0;CA(c[Ua>>2]|0,c[K>>2]|0,1);gB(c[Ua>>2]|0,c[Na>>2]|0,-1,c[K>>2]|0);a[(c[Ta>>2]|0)+45>>0]=-96;break}if((c[(c[Ga>>2]|0)+36>>2]&256|0)!=0?(c[(c[Ga>>2]|0)+36>>2]&2|0)!=0:0){c[u>>2]=160;c[m>>2]=0;c[Oa>>2]=0;c[n>>2]=0;c[o>>2]=0;if(c[(c[Ga>>2]|0)+36>>2]&32){Ha=c[Oa>>2]|0;c[Oa>>2]=Ha+1;c[o>>2]=c[(c[(c[Ga>>2]|0)+48>>2]|0)+(Ha<<2)>>2]}if(c[(c[Ga>>2]|0)+36>>2]&16){Ha=c[Oa>>2]|0;c[Oa>>2]=Ha+1;c[n>>2]=c[(c[(c[Ga>>2]|0)+48>>2]|0)+(Ha<<2)>>2]}if(c[Fa>>2]|0){c[Va>>2]=c[o>>2];c[o>>2]=c[n>>2];c[n>>2]=c[Va>>2]}if(c[o>>2]|0){c[p>>2]=c[c[o>>2]>>2];c[r>>2]=DA(c[Ua>>2]|0,c[(c[p>>2]|0)+16>>2]|0,s)|0;Vw(c[Ya>>2]|0,d[35244+((d[c[p>>2]>>0]|0)-80)>>0]|0,c[Na>>2]|0,c[v>>2]|0,c[r>>2]|0)|0;CA(c[Ua>>2]|0,c[r>>2]|0,1);_z(c[Ua>>2]|0,c[s>>2]|0);pD(c[Ta>>2]|0,c[o>>2]|0)}else Rw(c[Ya>>2]|0,(c[Fa>>2]|0)!=0?105:108,c[Na>>2]|0,c[v>>2]|0)|0;if(c[n>>2]|0){c[q>>2]=c[c[n>>2]>>2];Ga=(c[Ua>>2]|0)+76|0;Ha=(c[Ga>>2]|0)+1|0;c[Ga>>2]=Ha;c[m>>2]=Ha;xA(c[Ua>>2]|0,c[(c[q>>2]|0)+16>>2]|0,c[m>>2]|0);if((d[c[q>>2]>>0]|0)!=82?(d[c[q>>2]>>0]|0)!=80:0)c[u>>2]=(c[Fa>>2]|0)!=0?82:80;else c[u>>2]=(c[Fa>>2]|0)!=0?81:83;pD(c[Ta>>2]|0,c[n>>2]|0)}c[t>>2]=Bz(c[Ya>>2]|0)|0;a[(c[Ta>>2]|0)+45>>0]=(c[Fa>>2]|0)!=0?6:7;c[(c[Ta>>2]|0)+48>>2]=c[Na>>2];c[(c[Ta>>2]|0)+52>>2]=c[t>>2];if((c[u>>2]|0)==160)break;Ga=(c[Ua>>2]|0)+76|0;Ha=(c[Ga>>2]|0)+1|0;c[Ga>>2]=Ha;c[K>>2]=Ha;Rw(c[Ya>>2]|0,103,c[Na>>2]|0,c[K>>2]|0)|0;gB(c[Ua>>2]|0,c[Na>>2]|0,-1,c[K>>2]|0);Vw(c[Ya>>2]|0,c[u>>2]|0,c[m>>2]|0,c[v>>2]|0,c[K>>2]|0)|0;Fh(c[Ya>>2]|0,83);break}h=c[Ga>>2]|0;if(c[(c[Ga>>2]|0)+36>>2]&512){b[M>>1]=b[h+24>>1]|0;c[S>>2]=0;c[R>>2]=0;c[w>>2]=0;a[I>>0]=0;a[G>>0]=0;a[H>>0]=0;c[P>>2]=c[(c[Ga>>2]|0)+24+4>>2];c[ba>>2]=c[(c[Ta>>2]|0)+8>>2];if(((e[(c[Ja>>2]|0)+34>>1]&1|0)!=0?(a[(c[Ja>>2]|0)+36>>0]|0)>0:0)?(e[(c[P>>2]|0)+50>>1]|0)>(e[M>>1]|0):0){a[G>>0]=1;c[w>>2]=1}c[Oa>>2]=e[M>>1];if(c[(c[Ga>>2]|0)+36>>2]&32){Ea=c[Oa>>2]|0;c[Oa>>2]=Ea+1;c[S>>2]=c[(c[(c[Ga>>2]|0)+48>>2]|0)+(Ea<<2)>>2];c[w>>2]=1}if(c[(c[Ga>>2]|0)+36>>2]&16){Ea=c[Oa>>2]|0;c[Oa>>2]=Ea+1;c[R>>2]=c[(c[(c[Ga>>2]|0)+48>>2]|0)+(Ea<<2)>>2];c[w>>2]=1;if(e[(c[R>>2]|0)+20>>1]&256){Da=(c[Ua>>2]|0)+76|0;Ea=(c[Da>>2]|0)+1|0;c[Da>>2]=Ea;c[(c[Ta>>2]|0)+36>>2]=Ea;Rw(c[Ya>>2]|0,22,c[Fa>>2]^(d[(c[(c[P>>2]|0)+28>>2]|0)+(e[M>>1]|0)>>0]|0)==1,c[(c[Ta>>2]|0)+36>>2]|0)|0;Ea=Bz(c[Ya>>2]|0)|0;c[(c[Ta>>2]|0)+40>>2]=Ea}if(((c[S>>2]|0)==0?(Ea=b[(c[(c[P>>2]|0)+4>>2]|0)+(e[M>>1]<<1)>>1]|0,c[Oa>>2]=Ea,(Ea|0)>=0):0)?(d[(c[(c[(c[P>>2]|0)+12>>2]|0)+4>>2]|0)+((c[Oa>>2]|0)*24|0)+20>>0]|0)==0:0)a[G>>0]=1}if((e[M>>1]|0)<(e[(c[P>>2]|0)+50>>1]|0)?(c[Fa>>2]|0)==((d[(c[(c[P>>2]|0)+28>>2]|0)+(e[M>>1]|0)>>0]|0)==0|0):0)Ea=64;else Ea=62;if(((Ea|0)==62?(c[Fa>>2]|0)!=0:0)?(e[(c[P>>2]|0)+50>>1]|0)==(e[M>>1]|0):0)Ea=64;if((Ea|0)==64){c[x>>2]=c[R>>2];c[R>>2]=c[S>>2];c[S>>2]=c[x>>2];a[y>>0]=a[G>>0]|0;a[G>>0]=a[H>>0]|0;a[H>>0]=a[y>>0]|0}c[V>>2]=qD(c[Ua>>2]|0,c[Ta>>2]|0,c[Fa>>2]|0,c[w>>2]|0,Y)|0;if(c[Y>>2]|0)a[I>>0]=a[(c[Y>>2]|0)+(e[M>>1]|0)>>0]|0;c[F>>2]=c[(c[Ta>>2]|0)+16>>2];if(c[S>>2]|0)h=(e[(c[S>>2]|0)+18>>1]&40|0)!=0;else h=1;c[W>>2]=h&1;if(c[R>>2]|0)h=(e[(c[R>>2]|0)+18>>1]&40|0)!=0;else h=1;c[J>>2]=h&1;if(c[S>>2]|0)h=1;else h=(e[M>>1]|0)>0;c[X>>2]=h&1;c[L>>2]=e[M>>1];if(!(c[S>>2]|0)){if(a[G>>0]|0){Rw(c[Ya>>2]|0,25,0,(c[V>>2]|0)+(e[M>>1]|0)|0)|0;c[L>>2]=(c[L>>2]|0)+1;c[W>>2]=0;c[X>>2]=1}}else{c[T>>2]=c[(c[c[S>>2]>>2]|0)+16>>2];xA(c[Ua>>2]|0,c[T>>2]|0,(c[V>>2]|0)+(e[M>>1]|0)|0);rD(c[Ya>>2]|0,c[Ta>>2]|0,c[S>>2]|0);do if(!(e[(c[S>>2]|0)+20>>1]&0)){if(!(RA(c[T>>2]|0)|0))break;Rw(c[Ya>>2]|0,76,(c[V>>2]|0)+(e[M>>1]|0)|0,c[F>>2]|0)|0}while(0);do if(c[Y>>2]|0){if(((SA(c[T>>2]|0,a[(c[Y>>2]|0)+(e[M>>1]|0)>>0]|0)|0)<<24>>24|0)==65)a[(c[Y>>2]|0)+(e[M>>1]|0)>>0]=65;if(!(sD(c[T>>2]|0,a[(c[Y>>2]|0)+(e[M>>1]|0)>>0]|0)|0))break;a[(c[Y>>2]|0)+(e[M>>1]|0)>>0]=65}while(0);c[L>>2]=(c[L>>2]|0)+1}tD(c[Ua>>2]|0,c[V>>2]|0,(c[L>>2]|0)-(d[G>>0]|0)|0,c[Y>>2]|0);c[O>>2]=d[35248+((c[X>>2]<<2)+(c[W>>2]<<1)+(c[Fa>>2]|0))>>0];Eh(c[Ya>>2]|0,c[O>>2]|0,c[ba>>2]|0,c[F>>2]|0,c[V>>2]|0,c[L>>2]|0)|0;c[L>>2]=e[M>>1];do if(c[R>>2]|0){c[U>>2]=c[(c[c[R>>2]>>2]|0)+16>>2];oA(c[Ua>>2]|0,(c[V>>2]|0)+(e[M>>1]|0)|0,1);xA(c[Ua>>2]|0,c[U>>2]|0,(c[V>>2]|0)+(e[M>>1]|0)|0);rD(c[Ya>>2]|0,c[Ta>>2]|0,c[R>>2]|0);do if(!(e[(c[R>>2]|0)+20>>1]&0)){if(!(RA(c[U>>2]|0)|0))break;Rw(c[Ya>>2]|0,76,(c[V>>2]|0)+(e[M>>1]|0)|0,c[F>>2]|0)|0}while(0);do if(((SA(c[U>>2]|0,a[I>>0]|0)|0)<<24>>24|0)!=65){if(sD(c[U>>2]|0,a[I>>0]|0)|0)break;tD(c[Ua>>2]|0,(c[V>>2]|0)+(e[M>>1]|0)|0,1,I)}while(0);c[L>>2]=(c[L>>2]|0)+1}else{if(!(a[H>>0]|0))break;Rw(c[Ya>>2]|0,25,0,(c[V>>2]|0)+(e[M>>1]|0)|0)|0;c[J>>2]=0;c[L>>2]=(c[L>>2]|0)+1}while(0);Sf(c[Ma>>2]|0,c[Y>>2]|0);Ea=Bz(c[Ya>>2]|0)|0;c[(c[Ta>>2]|0)+52>>2]=Ea;if(c[L>>2]|0){c[O>>2]=d[35256+((c[Fa>>2]<<1)+(c[J>>2]|0))>>0];Eh(c[Ya>>2]|0,c[O>>2]|0,c[ba>>2]|0,c[F>>2]|0,c[V>>2]|0,c[L>>2]|0)|0}pD(c[Ta>>2]|0,c[S>>2]|0);pD(c[Ta>>2]|0,c[R>>2]|0);do if(!(c[N>>2]|0)){if(!(d[(c[(c[P>>2]|0)+12>>2]|0)+42>>0]&32))if(d[(c[Ja>>2]|0)+38>>0]|0){Ea=(c[Ua>>2]|0)+76|0;Ha=(c[Ea>>2]|0)+1|0;c[Ea>>2]=Ha;c[K>>2]=Ha;Rw(c[Ya>>2]|0,113,c[ba>>2]|0,c[K>>2]|0)|0;gB(c[Ua>>2]|0,c[Na>>2]|0,-1,c[K>>2]|0);Vw(c[Ya>>2]|0,70,c[Na>>2]|0,0,c[K>>2]|0)|0;break}else{uD(c[Ja>>2]|0,c[P>>2]|0,c[Na>>2]|0,c[ba>>2]|0);break}if((c[Na>>2]|0)==(c[ba>>2]|0))break;c[Q>>2]=Ej(c[(c[P>>2]|0)+12>>2]|0)|0;c[K>>2]=kA(c[Ua>>2]|0,e[(c[Q>>2]|0)+50>>1]|0)|0;c[Oa>>2]=0;while(1){if((c[Oa>>2]|0)>=(e[(c[Q>>2]|0)+50>>1]|0))break;c[Ha>>2]=(uA(c[P>>2]|0,b[(c[(c[Q>>2]|0)+4>>2]|0)+(c[Oa>>2]<<1)>>1]|0)|0)<<16>>16;Vw(c[Ya>>2]|0,47,c[ba>>2]|0,c[Ha>>2]|0,(c[K>>2]|0)+(c[Oa>>2]|0)|0)|0;c[Oa>>2]=(c[Oa>>2]|0)+1}Eh(c[Ya>>2]|0,68,c[Na>>2]|0,c[La>>2]|0,c[K>>2]|0,e[(c[Q>>2]|0)+50>>1]|0)|0}while(0);do if(!(c[(c[Ga>>2]|0)+36>>2]&4096)){h=(c[Ta>>2]|0)+45|0;if(c[Fa>>2]|0){a[h>>0]=6;break}else{a[h>>0]=7;break}}else a[(c[Ta>>2]|0)+45>>0]=-96;while(0);c[(c[Ta>>2]|0)+48>>2]=c[ba>>2];a[(c[Ta>>2]|0)+46>>0]=(c[(c[Ga>>2]|0)+36>>2]&65536|0)!=0?1:0;if(c[(c[Ga>>2]|0)+36>>2]&15)break;a[(c[Ta>>2]|0)+47>>0]=1;break}if(!(c[h+36>>2]&8192))if((d[(c[E>>2]|0)+36+1>>0]|0)>>>5&1){a[(c[Ta>>2]|0)+45>>0]=-96;break}else{a[(c[Ta>>2]|0)+45>>0]=a[35260+(c[Fa>>2]|0)>>0]|0;c[(c[Ta>>2]|0)+48>>2]=c[Na>>2];Ha=1+(Rw(c[Ya>>2]|0,d[35262+(c[Fa>>2]|0)>>0]|0,c[Na>>2]|0,c[v>>2]|0)|0)|0;c[(c[Ta>>2]|0)+52>>2]=Ha;a[(c[Ta>>2]|0)+47>>0]=1;break}c[na>>2]=0;h=(c[Ua>>2]|0)+72|0;Fa=c[h>>2]|0;c[h>>2]=Fa+1;c[aa>>2]=Fa;Fa=(c[Ua>>2]|0)+76|0;h=(c[Fa>>2]|0)+1|0;c[Fa>>2]=h;c[za>>2]=h;c[Ba>>2]=0;c[Aa>>2]=0;c[ca>>2]=Cz(c[Ya>>2]|0)|0;c[Ca>>2]=0;c[ma>>2]=0;c[xa>>2]=c[(c[E>>2]|0)+16>>2];c[Va>>2]=c[c[(c[Ga>>2]|0)+48>>2]>>2];c[sa>>2]=c[(c[Va>>2]|0)+12>>2];a[(c[Ta>>2]|0)+45>>0]=15;c[(c[Ta>>2]|0)+48>>2]=c[za>>2];h=c[Ja>>2]|0;a:do if((d[(c[Ja>>2]|0)+41>>0]|0)>1){c[ja>>2]=(d[h+41>>0]|0)-(c[Z>>2]|0)-1;c[qa>>2]=yh(c[Ma>>2]|0,80+((c[ja>>2]|0)*72|0)|0,0)|0;if(!(c[qa>>2]|0)){Wa=Ka;Ya=c[Wa+4>>2]|0;Xa=Ia;c[Xa>>2]=c[Wa>>2];c[Xa+4>>2]=Ya;Xa=Ia;Ya=Xa;Ya=c[Ya>>2]|0;Xa=Xa+4|0;Xa=c[Xa>>2]|0;C=Xa;i=Za;return Ya|0}c[(c[qa>>2]|0)+4>>2]=(c[ja>>2]|0)+1&255;c[c[qa>>2]>>2]=c[(c[qa>>2]|0)+4>>2];g=(c[qa>>2]|0)+8|0;h=c[E>>2]|0;j=g+72|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));c[la>>2]=(c[(c[Ja>>2]|0)+4>>2]|0)+8;c[Ha>>2]=1;while(1){if((c[Ha>>2]|0)>(c[ja>>2]|0))break a;g=(c[qa>>2]|0)+8+((c[Ha>>2]|0)*72|0)|0;h=(c[la>>2]|0)+((d[(c[Ta>>2]|0)+((c[Ha>>2]|0)*80|0)+44>>0]|0)*72|0)|0;j=g+72|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));c[Ha>>2]=(c[Ha>>2]|0)+1}}else c[qa>>2]=c[h+4>>2];while(0);if(!(e[(c[Ja>>2]|0)+34>>1]&8)){if(!(d[(c[xa>>2]|0)+42>>0]&32)){Ga=(c[Ua>>2]|0)+76|0;Ha=(c[Ga>>2]|0)+1|0;c[Ga>>2]=Ha;c[Ba>>2]=Ha;Rw(c[Ya>>2]|0,25,0,c[Ba>>2]|0)|0}else{c[ta>>2]=Ej(c[xa>>2]|0)|0;Ga=(c[Ua>>2]|0)+72|0;Ha=c[Ga>>2]|0;c[Ga>>2]=Ha+1;c[Ba>>2]=Ha;Rw(c[Ya>>2]|0,57,c[Ba>>2]|0,e[(c[ta>>2]|0)+50>>1]|0)|0;Az(c[Ua>>2]|0,c[ta>>2]|0)}Ga=(c[Ua>>2]|0)+76|0;Ha=(c[Ga>>2]|0)+1|0;c[Ga>>2]=Ha;c[Aa>>2]=Ha}c[ea>>2]=Rw(c[Ya>>2]|0,22,0,c[za>>2]|0)|0;if((c[(c[Wa>>2]|0)+12>>2]|0)>1){c[ga>>2]=0;while(1){if((c[ga>>2]|0)>=(c[(c[Wa>>2]|0)+12>>2]|0))break;c[oa>>2]=c[(c[(c[Wa>>2]|0)+20>>2]|0)+((c[ga>>2]|0)*48|0)>>2];if(((((c[(c[Wa>>2]|0)+20>>2]|0)+((c[ga>>2]|0)*48|0)|0)!=(c[Va>>2]|0)?(c[(c[oa>>2]|0)+4>>2]&1|0)==0:0)?(e[(c[(c[Wa>>2]|0)+20>>2]|0)+((c[ga>>2]|0)*48|0)+20>>1]&6|0)==0:0)?(e[(c[(c[Wa>>2]|0)+20>>2]|0)+((c[ga>>2]|0)*48|0)+18>>1]&8191|0)!=0:0){c[oa>>2]=ny(c[Ma>>2]|0,c[oa>>2]|0,0)|0;c[ma>>2]=az(c[Ma>>2]|0,c[ma>>2]|0,c[oa>>2]|0)|0}c[ga>>2]=(c[ga>>2]|0)+1}if(c[ma>>2]|0)c[ma>>2]=rv(c[Ua>>2]|0,328,0,c[ma>>2]|0,0)|0}b[Da>>1]=240;c[ha>>2]=0;while(1){if((c[ha>>2]|0)>=(c[(c[sa>>2]|0)+12>>2]|0))break;c[ra>>2]=(c[(c[sa>>2]|0)+20>>2]|0)+((c[ha>>2]|0)*48|0);if(!((c[(c[ra>>2]|0)+8>>2]|0)!=(c[Na>>2]|0)?(e[(c[ra>>2]|0)+18>>1]&1024|0)==0:0)){c[pa>>2]=c[c[ra>>2]>>2];c[ia>>2]=0;if((c[ma>>2]|0)!=0?(c[(c[pa>>2]|0)+4>>2]&1|0)==0:0){c[(c[ma>>2]|0)+12>>2]=c[pa>>2];c[pa>>2]=c[ma>>2]}c[wa>>2]=RC(c[Ua>>2]|0,c[qa>>2]|0,c[pa>>2]|0,0,0,b[Da>>1]|0,c[aa>>2]|0)|0;if(c[wa>>2]|0){c[_>>2]=lD(c[Ua>>2]|0,c[qa>>2]|0,(c[wa>>2]|0)+736|0,c[Z>>2]|0,d[(c[Ta>>2]|0)+44>>0]|0,0)|0;do if(!(e[(c[Ja>>2]|0)+34>>1]&8)){c[fa>>2]=(c[ha>>2]|0)==((c[(c[sa>>2]|0)+12>>2]|0)-1|0)?-1:c[ha>>2]|0;if(!(d[(c[xa>>2]|0)+42>>0]&32)){c[ya>>2]=zA(c[Ua>>2]|0,c[xa>>2]|0,-1,c[Na>>2]|0,c[Aa>>2]|0,0)|0;c[ia>>2]=Eh(c[Ya>>2]|0,131,c[Ba>>2]|0,0,c[ya>>2]|0,c[fa>>2]|0)|0;break}c[ua>>2]=Ej(c[xa>>2]|0)|0;c[ka>>2]=e[(c[ua>>2]|0)+50>>1];c[ya>>2]=kA(c[Ua>>2]|0,c[ka>>2]|0)|0;c[da>>2]=0;while(1){if((c[da>>2]|0)>=(c[ka>>2]|0))break;c[$>>2]=b[(c[(c[ua>>2]|0)+4>>2]|0)+(c[da>>2]<<1)>>1];vD(c[Ua>>2]|0,c[xa>>2]|0,c[$>>2]|0,c[Na>>2]|0,(c[ya>>2]|0)+(c[da>>2]|0)|0);c[da>>2]=(c[da>>2]|0)+1}if(c[fa>>2]|0)c[ia>>2]=Eh(c[Ya>>2]|0,69,c[Ba>>2]|0,0,c[ya>>2]|0,c[ka>>2]|0)|0;do if((c[fa>>2]|0)>=0){Vw(c[Ya>>2]|0,49,c[ya>>2]|0,c[ka>>2]|0,c[Aa>>2]|0)|0;Vw(c[Ya>>2]|0,110,c[Ba>>2]|0,c[Aa>>2]|0,0)|0;if(!(c[fa>>2]|0))break;Fh(c[Ya>>2]|0,16)}while(0);nA(c[Ua>>2]|0,c[ya>>2]|0,c[ka>>2]|0)}while(0);Rw(c[Ya>>2]|0,14,c[za>>2]|0,c[ca>>2]|0)|0;if(c[ia>>2]|0)Fz(c[Ya>>2]|0,c[ia>>2]|0);if(a[(c[wa>>2]|0)+39>>0]|0)c[Ca>>2]=1;c[va>>2]=c[(c[wa>>2]|0)+736+64>>2];do if(c[(c[va>>2]|0)+36>>2]&512){if((c[ha>>2]|0)!=0?(c[(c[va>>2]|0)+24+4>>2]|0)!=(c[na>>2]|0):0){Ea=168;break}if((d[(c[xa>>2]|0)+42>>0]&32|0)!=0?(a[(c[(c[va>>2]|0)+24+4>>2]|0)+55>>0]&3|0)==2:0){Ea=168;break}c[na>>2]=c[(c[va>>2]|0)+24+4>>2];b[Da>>1]=e[Da>>1]|4096}else Ea=168;while(0);if((Ea|0)==168){Ea=0;c[na>>2]=0}SC(c[wa>>2]|0)}}c[ha>>2]=(c[ha>>2]|0)+1}c[(c[Ta>>2]|0)+56>>2]=c[na>>2];if(c[na>>2]|0)c[(c[Ta>>2]|0)+8>>2]=c[aa>>2];if(c[ma>>2]|0){c[(c[ma>>2]|0)+12>>2]=0;Zu(c[Ma>>2]|0,c[ma>>2]|0)}Ga=c[Ya>>2]|0;Ha=c[ea>>2]|0;wD(Ga,Ha,Bz(c[Ya>>2]|0)|0);Ez(c[Ya>>2]|0,c[(c[Ta>>2]|0)+12>>2]|0)|0;Gz(c[Ya>>2]|0,c[ca>>2]|0);if((d[(c[Ja>>2]|0)+41>>0]|0)>1)Sf(c[Ma>>2]|0,c[qa>>2]|0);if(!(c[Ca>>2]|0))pD(c[Ta>>2]|0,c[Va>>2]|0)}else{c[k>>2]=c[(c[E>>2]|0)+28>>2];Vw(c[Ya>>2]|0,16,c[k>>2]|0,0,c[(c[E>>2]|0)+24>>2]|0)|0;Ha=Rw(c[Ya>>2]|0,18,c[k>>2]|0,c[v>>2]|0)|0;c[(c[Ta>>2]|0)+52>>2]=Ha;a[(c[Ta>>2]|0)+45>>0]=13}while(0);c[Va>>2]=c[(c[Wa>>2]|0)+20>>2];c[Oa>>2]=c[(c[Wa>>2]|0)+12>>2];while(1){if((c[Oa>>2]|0)<=0)break;c[Xa>>2]=0;do if(!(e[(c[Va>>2]|0)+20>>1]&6)){Ga=(c[Va>>2]|0)+40|0;Ha=(c[Ta>>2]|0)+72|0;if((c[Ga>>2]&c[Ha>>2]|0)!=0?1:(c[Ga+4>>2]&c[Ha+4>>2]|0)!=0){a[(c[Ja>>2]|0)+39>>0]=1;break}c[Qa>>2]=c[c[Va>>2]>>2];if((c[c[Ta>>2]>>2]|0)!=0?(c[(c[Qa>>2]|0)+4>>2]&1|0)==0:0)break;if(e[(c[Va>>2]|0)+20>>1]&512)c[Xa>>2]=xz(c[Ya>>2]|0,46,c[(c[Ta>>2]|0)+36>>2]|0)|0;LA(c[Ua>>2]|0,c[Qa>>2]|0,c[La>>2]|0,16);if(c[Xa>>2]|0)Fz(c[Ya>>2]|0,c[Xa>>2]|0);Ha=(c[Va>>2]|0)+20|0;b[Ha>>1]=e[Ha>>1]|4}while(0);c[Oa>>2]=(c[Oa>>2]|0)+-1;c[Va>>2]=(c[Va>>2]|0)+48}c[Va>>2]=c[(c[Wa>>2]|0)+20>>2];c[Oa>>2]=c[(c[Wa>>2]|0)+12>>2];while(1){if((c[Oa>>2]|0)<=0)break;if((((((((e[(c[Va>>2]|0)+20>>1]&6|0)==0?(e[(c[Va>>2]|0)+18>>1]&130|0)!=0:0)?(e[(c[Va>>2]|0)+18>>1]&2048|0)!=0:0)?(c[(c[Va>>2]|0)+8>>2]|0)==(c[Na>>2]|0):0)?(c[c[Ta>>2]>>2]|0)==0:0)?(c[Ra>>2]=c[c[Va>>2]>>2],Xa=Ka,c[Pa>>2]=xD(c[Wa>>2]|0,c[Na>>2]|0,c[(c[Va>>2]|0)+12>>2]|0,c[Xa>>2]|0,c[Xa+4>>2]|0,131,0)|0,(c[Pa>>2]|0)!=0):0)?(e[(c[Pa>>2]|0)+20>>1]&4|0)==0:0)?(c[Sa>>2]=yh(c[Ma>>2]|0,48,0)|0,(c[Sa>>2]|0)!=0):0){g=c[Sa>>2]|0;h=c[c[Pa>>2]>>2]|0;j=g+48|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));c[(c[Sa>>2]|0)+12>>2]=c[(c[Ra>>2]|0)+12>>2];LA(c[Ua>>2]|0,c[Sa>>2]|0,c[La>>2]|0,16);Sf(c[Ma>>2]|0,c[Sa>>2]|0)}c[Oa>>2]=(c[Oa>>2]|0)+-1;c[Va>>2]=(c[Va>>2]|0)+48}b:do if(c[c[Ta>>2]>>2]|0){Xa=Bz(c[Ya>>2]|0)|0;c[(c[Ta>>2]|0)+28>>2]=Xa;Rw(c[Ya>>2]|0,22,1,c[c[Ta>>2]>>2]|0)|0;fC(c[Ua>>2]|0);c[Va>>2]=c[(c[Wa>>2]|0)+20>>2];c[Oa>>2]=0;while(1){if((c[Oa>>2]|0)>=(c[(c[Wa>>2]|0)+12>>2]|0))break b;if((e[(c[Va>>2]|0)+20>>1]&6|0)==0?(Xa=(c[Va>>2]|0)+40|0,Ya=(c[Ta>>2]|0)+72|0,!((c[Xa>>2]&c[Ya>>2]|0)!=0?1:(c[Xa+4>>2]&c[Ya+4>>2]|0)!=0)):0){LA(c[Ua>>2]|0,c[c[Va>>2]>>2]|0,c[La>>2]|0,16);Ya=(c[Va>>2]|0)+20|0;b[Ya>>1]=e[Ya>>1]|4}c[Oa>>2]=(c[Oa>>2]|0)+1;c[Va>>2]=(c[Va>>2]|0)+48}}while(0);Wa=(c[Ta>>2]|0)+72|0;Ya=c[Wa+4>>2]|0;Xa=Ia;c[Xa>>2]=c[Wa>>2];c[Xa+4>>2]=Ya;Xa=Ia;Ya=Xa;Ya=c[Ya>>2]|0;Xa=Xa+4|0;Xa=c[Xa>>2]|0;C=Xa;i=Za;return Ya|0}function nD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;g=h;d=h+16|0;e=h+12|0;f=h+8|0;c[d>>2]=a;c[e>>2]=b;c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[d>>2]>>2]|0)){b=6;break}a=c[f>>2]|0;if((c[(c[d>>2]|0)+4+(c[f>>2]<<2)>>2]|0)==(c[e>>2]|0)){b=4;break}c[f>>2]=a+1}if((b|0)==4){e=lR(1,0,a|0)|0;f=g;c[f>>2]=e;c[f+4>>2]=C;f=g;g=f;g=c[g>>2]|0;f=f+4|0;f=c[f>>2]|0;C=f;i=h;return g|0}else if((b|0)==6){f=g;c[f>>2]=0;c[f+4>>2]=0;f=g;g=f;g=c[g>>2]|0;f=f+4|0;f=c[f>>2]|0;C=f;i=h;return g|0}return 0}function oD(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+64|0;k=x+48|0;q=x+44|0;r=x+40|0;l=x+36|0;s=x+32|0;m=x+28|0;o=x+24|0;w=x+20|0;u=x+16|0;t=x+12|0;p=x+8|0;v=x+4|0;n=x;c[k>>2]=b;c[q>>2]=e;c[r>>2]=f;c[l>>2]=g;c[s>>2]=h;c[m>>2]=j;c[o>>2]=c[c[q>>2]>>2];c[w>>2]=c[(c[k>>2]|0)+8>>2];if((d[c[o>>2]>>0]|0|0)!=79?(d[c[o>>2]>>0]|0|0)!=73:0){if((d[c[o>>2]>>0]|0|0)==76){c[u>>2]=c[m>>2];Rw(c[w>>2]|0,25,0,c[u>>2]|0)|0;v=c[r>>2]|0;w=c[q>>2]|0;pD(v,w);w=c[u>>2]|0;i=x;return w|0}c[n>>2]=c[(c[r>>2]|0)+64>>2];if(((c[(c[n>>2]|0)+36>>2]&1024|0)==0?(c[(c[n>>2]|0)+24+4>>2]|0)!=0:0)?(d[(c[(c[(c[n>>2]|0)+24+4>>2]|0)+28>>2]|0)+(c[l>>2]|0)>>0]|0|0)!=0:0)c[s>>2]=((c[s>>2]|0)!=0^1)&1;c[u>>2]=c[m>>2];c[t>>2]=PA(c[k>>2]|0,c[o>>2]|0,4,0)|0;if((c[t>>2]|0)==4)c[s>>2]=((c[s>>2]|0)!=0^1)&1;c[p>>2]=c[(c[o>>2]|0)+28>>2];Rw(c[w>>2]|0,(c[s>>2]|0)!=0?105:108,c[p>>2]|0,0)|0;o=(c[n>>2]|0)+36|0;c[o>>2]=c[o>>2]|2048;if(!(c[(c[r>>2]|0)+56>>2]|0)){o=Cz(c[w>>2]|0)|0;c[(c[r>>2]|0)+16>>2]=o}o=(c[r>>2]|0)+56|0;c[o>>2]=(c[o>>2]|0)+1;k=vx(c[c[k>>2]>>2]|0,c[(c[r>>2]|0)+56+4>>2]|0,(c[(c[r>>2]|0)+56>>2]|0)*12|0,0)|0;c[(c[r>>2]|0)+56+4>>2]=k;c[v>>2]=c[(c[r>>2]|0)+56+4>>2];k=(c[r>>2]|0)+56|0;if(!(c[v>>2]|0)){c[k>>2]=0;v=c[r>>2]|0;w=c[q>>2]|0;pD(v,w);w=c[u>>2]|0;i=x;return w|0}c[v>>2]=(c[v>>2]|0)+(((c[k>>2]|0)-1|0)*12|0);c[c[v>>2]>>2]=c[p>>2];m=c[w>>2]|0;k=c[p>>2]|0;l=c[u>>2]|0;if((c[t>>2]|0)==1){t=Rw(m,103,k,l)|0;c[(c[v>>2]|0)+4>>2]=t}else{t=Vw(m,47,k,0,l)|0;c[(c[v>>2]|0)+4>>2]=t}a[(c[v>>2]|0)+8>>0]=(c[s>>2]|0)!=0?4:5;xz(c[w>>2]|0,76,c[u>>2]|0)|0;v=c[r>>2]|0;w=c[q>>2]|0;pD(v,w);w=c[u>>2]|0;i=x;return w|0}c[u>>2]=yA(c[k>>2]|0,c[(c[o>>2]|0)+16>>2]|0,c[m>>2]|0)|0;v=c[r>>2]|0;w=c[q>>2]|0;pD(v,w);w=c[u>>2]|0;i=x;return w|0}function pD(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+16|0;h=l+8|0;j=l+4|0;k=l;c[h>>2]=f;c[j>>2]=g;c[k>>2]=0;while(1){if(!(c[j>>2]|0)){h=14;break}if((e[(c[j>>2]|0)+20>>1]|0)&4){h=14;break}if((c[c[h>>2]>>2]|0)!=0?(c[(c[c[j>>2]>>2]|0)+4>>2]&1|0)==0:0){h=14;break}f=(c[h>>2]|0)+72|0;g=(c[j>>2]|0)+40|0;if(!((c[f>>2]&c[g>>2]|0)==0?(c[f+4>>2]&c[g+4>>2]|0)==0:0)){h=14;break}if((c[k>>2]|0)!=0?((e[(c[j>>2]|0)+20>>1]|0)&1024|0)!=0:0){g=(c[j>>2]|0)+20|0;b[g>>1]=e[g>>1]|0|512}else{g=(c[j>>2]|0)+20|0;b[g>>1]=e[g>>1]|0|4}if((c[(c[j>>2]|0)+4>>2]|0)<0){h=14;break}c[j>>2]=(c[(c[(c[j>>2]|0)+24>>2]|0)+20>>2]|0)+((c[(c[j>>2]|0)+4>>2]|0)*48|0);g=(c[j>>2]|0)+22|0;a[g>>0]=(a[g>>0]|0)+-1<<24>>24;if(d[(c[j>>2]|0)+22>>0]|0){h=14;break}c[k>>2]=(c[k>>2]|0)+1}if((h|0)==14){i=l;return}}function qD(d,f,g,h,j){d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=i;i=i+80|0;k=A+60|0;l=A+56|0;m=A+52|0;C=A+48|0;n=A+44|0;q=A+66|0;s=A+64|0;y=A+40|0;B=A+36|0;v=A+32|0;t=A+28|0;p=A+24|0;x=A+20|0;r=A+16|0;z=A+12|0;o=A+8|0;w=A+4|0;u=A;c[k>>2]=d;c[l>>2]=f;c[m>>2]=g;c[C>>2]=h;c[n>>2]=j;c[y>>2]=c[(c[k>>2]|0)+8>>2];c[t>>2]=c[(c[l>>2]|0)+64>>2];b[q>>1]=b[(c[t>>2]|0)+24>>1]|0;b[s>>1]=b[(c[t>>2]|0)+42>>1]|0;c[B>>2]=c[(c[t>>2]|0)+24+4>>2];c[x>>2]=(c[(c[k>>2]|0)+76>>2]|0)+1;c[r>>2]=(e[(c[t>>2]|0)+24>>1]|0)+(c[C>>2]|0);j=(c[k>>2]|0)+76|0;c[j>>2]=(c[j>>2]|0)+(c[r>>2]|0);j=c[c[k>>2]>>2]|0;c[z>>2]=nh(j,dC(c[c[k>>2]>>2]|0,c[B>>2]|0)|0)|0;a:do if(b[s>>1]|0){c[o>>2]=c[(c[l>>2]|0)+8>>2];xz(c[y>>2]|0,(c[m>>2]|0)!=0?105:108,c[o>>2]|0)|0;c[p>>2]=Yw(c[y>>2]|0,13)|0;C=Eh(c[y>>2]|0,(c[m>>2]|0)!=0?63:66,c[o>>2]|0,0,c[x>>2]|0,e[s>>1]|0)|0;c[(c[l>>2]|0)+20>>2]=C;Fz(c[y>>2]|0,c[p>>2]|0);c[p>>2]=0;while(1){if((c[p>>2]|0)>=(e[s>>1]|0))break a;Vw(c[y>>2]|0,47,c[o>>2]|0,c[p>>2]|0,(c[x>>2]|0)+(c[p>>2]|0)|0)|0;c[p>>2]=(c[p>>2]|0)+1}}while(0);c[p>>2]=e[s>>1];while(1){if((c[p>>2]|0)>=(e[q>>1]|0))break;c[v>>2]=c[(c[(c[t>>2]|0)+48>>2]|0)+(c[p>>2]<<2)>>2];c[w>>2]=oD(c[k>>2]|0,c[v>>2]|0,c[l>>2]|0,c[p>>2]|0,c[m>>2]|0,(c[x>>2]|0)+(c[p>>2]|0)|0)|0;do if((c[w>>2]|0)!=((c[x>>2]|0)+(c[p>>2]|0)|0))if((c[r>>2]|0)==1){_z(c[k>>2]|0,c[x>>2]|0);c[x>>2]=c[w>>2];break}else{Rw(c[y>>2]|0,31,c[w>>2]|0,(c[x>>2]|0)+(c[p>>2]|0)|0)|0;break}while(0);if(!(e[(c[v>>2]|0)+18>>1]&257)){ +c[u>>2]=c[(c[c[v>>2]>>2]|0)+16>>2];if((e[(c[v>>2]|0)+20>>1]&2048|0)==0?(RA(c[u>>2]|0)|0)!=0:0)Rw(c[y>>2]|0,76,(c[x>>2]|0)+(c[p>>2]|0)|0,c[(c[l>>2]|0)+12>>2]|0)|0;if(c[z>>2]|0){if(((SA(c[u>>2]|0,a[(c[z>>2]|0)+(c[p>>2]|0)>>0]|0)|0)<<24>>24|0)==65)a[(c[z>>2]|0)+(c[p>>2]|0)>>0]=65;if(sD(c[u>>2]|0,a[(c[z>>2]|0)+(c[p>>2]|0)>>0]|0)|0)a[(c[z>>2]|0)+(c[p>>2]|0)>>0]=65}}c[p>>2]=(c[p>>2]|0)+1}c[c[n>>2]>>2]=c[z>>2];i=A;return c[x>>2]|0}function rD(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;k=i;i=i+16|0;g=k+12|0;h=k+8|0;l=k+4|0;j=k;c[g>>2]=b;c[h>>2]=d;c[l>>2]=f;if(!((e[(c[l>>2]|0)+20>>1]|0)&256)){i=k;return}c[j>>2]=Mz(c[g>>2]|0,-1)|0;c[(c[j>>2]|0)+12>>2]=c[(c[h>>2]|0)+36>>2];a[(c[j>>2]|0)+3>>0]=1;i=k;return}function sD(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l+4|0;g=l;h=l+9|0;j=l+8|0;c[g>>2]=e;a[h>>0]=f;a:do if((a[h>>0]|0)==65)c[k>>2]=1;else{while(1){if((d[c[g>>2]>>0]|0)==156)e=1;else e=(d[c[g>>2]>>0]|0)==155;f=c[g>>2]|0;if(!e)break;c[g>>2]=c[f+12>>2]}a[j>>0]=a[f>>0]|0;if((d[j>>0]|0)==157)a[j>>0]=a[(c[g>>2]|0)+38>>0]|0;switch(d[j>>0]|0){case 132:{if((a[h>>0]|0)==68)f=1;else f=(a[h>>0]|0)==67;c[k>>2]=f&1;break a}case 133:{if((a[h>>0]|0)==69)f=1;else f=(a[h>>0]|0)==67;c[k>>2]=f&1;break a}case 97:{c[k>>2]=(a[h>>0]|0)==66&1;break a}case 134:{c[k>>2]=1;break a}case 152:{if((b[(c[g>>2]|0)+32>>1]|0)<0)if((a[h>>0]|0)==68)f=1;else f=(a[h>>0]|0)==67;else f=0;c[k>>2]=f&1;break a}default:{c[k>>2]=0;break a}}}while(0);i=l;return c[k>>2]|0}function tD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[g>>2]=b;c[h>>2]=d;c[j>>2]=e;c[k>>2]=f;c[l>>2]=c[(c[g>>2]|0)+8>>2];if(!(c[k>>2]|0)){i=m;return}while(1){if((c[j>>2]|0)<=0)break;if((a[c[k>>2]>>0]|0)!=65)break;c[j>>2]=(c[j>>2]|0)+-1;c[h>>2]=(c[h>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+1}while(1){if((c[j>>2]|0)>1)e=(a[(c[k>>2]|0)+((c[j>>2]|0)-1)>>0]|0)==65;else e=0;d=c[j>>2]|0;if(!e)break;c[j>>2]=d+-1}if((d|0)<=0){i=m;return}Uw(c[l>>2]|0,48,c[h>>2]|0,c[j>>2]|0,0,c[k>>2]|0,c[j>>2]|0)|0;CA(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0);i=m;return}function uD(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=i;i=i+48|0;p=o+32|0;h=o+28|0;q=o+24|0;r=o+20|0;l=o+16|0;n=o+12|0;k=o+8|0;m=o+4|0;j=o;c[p>>2]=a;c[h>>2]=d;c[q>>2]=f;c[r>>2]=g;c[l>>2]=c[c[p>>2]>>2];c[n>>2]=c[(c[l>>2]|0)+8>>2];Vw(c[n>>2]|0,112,c[r>>2]|0,0,c[q>>2]|0)|0;if(!(e[(c[p>>2]|0)+34>>1]&32)){i=o;return}f=c[l>>2]|0;if(c[(c[l>>2]|0)+416>>2]|0)f=c[f+416>>2]|0;if(c[f+336>>2]|0){i=o;return}c[m>>2]=c[(c[h>>2]|0)+12>>2];c[j>>2]=ph(c[c[l>>2]>>2]|0,(b[(c[m>>2]|0)+34>>1]|0)+1<<2,0)|0;if(!(c[j>>2]|0)){i=o;return}c[c[j>>2]>>2]=b[(c[m>>2]|0)+34>>1];c[k>>2]=0;while(1){if((c[k>>2]|0)>=((e[(c[h>>2]|0)+52>>1]|0)-1|0))break;if((b[(c[(c[h>>2]|0)+4>>2]|0)+(c[k>>2]<<1)>>1]|0)>=0)c[(c[j>>2]|0)+((b[(c[(c[h>>2]|0)+4>>2]|0)+(c[k>>2]<<1)>>1]|0)+1<<2)>>2]=(c[k>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+1}Ih(c[n>>2]|0,-1,c[j>>2]|0,-15);i=o;return}function vD(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,j=0,k=0,l=0,m=0,n=0;k=i;i=i+32|0;g=k+20|0;n=k+16|0;m=k+12|0;l=k+8|0;h=k+4|0;j=k;c[g>>2]=a;c[n>>2]=b;c[m>>2]=d;c[l>>2]=e;c[h>>2]=f;c[j>>2]=zA(c[g>>2]|0,c[n>>2]|0,c[m>>2]|0,c[l>>2]|0,c[h>>2]|0,0)|0;if((c[j>>2]|0)==(c[h>>2]|0)){i=k;return}Rw(c[(c[g>>2]|0)+8>>2]|0,31,c[j>>2]|0,c[h>>2]|0)|0;i=k;return}function wD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;g=e+8|0;f=e+4|0;h=e;c[g>>2]=a;c[f>>2]=b;c[h>>2]=d;d=c[h>>2]|0;c[(Mz(c[g>>2]|0,c[f>>2]|0)|0)+4>>2]=d;i=e;return}function xD(a,b,d,f,g,h,j){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=i;i=i+144|0;n=q+132|0;u=q+128|0;t=q+124|0;s=q+120|0;k=q;l=q+116|0;r=q+112|0;p=q+108|0;o=q+104|0;m=q+8|0;c[u>>2]=a;c[t>>2]=b;c[s>>2]=d;a=k;c[a>>2]=f;c[a+4>>2]=g;c[l>>2]=h;c[r>>2]=j;c[p>>2]=0;c[o>>2]=yD(m,c[u>>2]|0,c[t>>2]|0,c[s>>2]|0,c[l>>2]|0,c[r>>2]|0)|0;c[l>>2]=c[l>>2]&130;while(1){if(!(c[o>>2]|0)){f=10;break}t=(c[o>>2]|0)+32|0;u=k;if((c[t>>2]&c[u>>2]|0)==0?(c[t+4>>2]&c[u+4>>2]|0)==0:0){u=(c[o>>2]|0)+32|0;if((c[u>>2]|0)==0&(c[u+4>>2]|0)==0?((e[(c[o>>2]|0)+18>>1]|0)&c[l>>2]|0)!=0:0){f=6;break}if(!(c[p>>2]|0))c[p>>2]=c[o>>2]}c[o>>2]=zD(m)|0}if((f|0)==6){c[n>>2]=c[o>>2];u=c[n>>2]|0;i=q;return u|0}else if((f|0)==10){c[n>>2]=c[p>>2];u=c[n>>2]|0;i=q;return u|0}return 0}function yD(d,e,f,g,h,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+32|0;k=q+24|0;r=q+20|0;l=q+16|0;m=q+12|0;n=q+8|0;o=q+4|0;p=q;c[k>>2]=d;c[r>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[o>>2]=j;c[p>>2]=0;c[c[k>>2]>>2]=c[r>>2];c[(c[k>>2]|0)+4>>2]=c[r>>2];c[(c[k>>2]|0)+12>>2]=0;if((c[o>>2]|0)!=0?(c[p>>2]=c[m>>2],c[m>>2]=b[(c[(c[o>>2]|0)+4>>2]|0)+(c[p>>2]<<1)>>1],(c[m>>2]|0)==-2):0)c[(c[k>>2]|0)+12>>2]=c[(c[(c[(c[o>>2]|0)+40>>2]|0)+4>>2]|0)+((c[p>>2]|0)*20|0)>>2];if((c[o>>2]|0)!=0&(c[m>>2]|0)>=0){a[(c[k>>2]|0)+16>>0]=a[(c[(c[(c[o>>2]|0)+12>>2]|0)+4>>2]|0)+((c[m>>2]|0)*24|0)+21>>0]|0;c[(c[k>>2]|0)+8>>2]=c[(c[(c[o>>2]|0)+32>>2]|0)+(c[p>>2]<<2)>>2]}else{a[(c[k>>2]|0)+16>>0]=0;c[(c[k>>2]|0)+8>>2]=0}c[(c[k>>2]|0)+20>>2]=c[n>>2];c[(c[k>>2]|0)+24>>2]=0;c[(c[k>>2]|0)+28>>2]=c[l>>2];b[(c[k>>2]|0)+72>>1]=c[m>>2];a[(c[k>>2]|0)+17>>0]=1;a[(c[k>>2]|0)+18>>0]=1;r=zD(c[k>>2]|0)|0;i=q;return r|0}function zD(f){f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;o=s+36|0;p=s+32|0;h=s+28|0;g=s+40|0;n=s+24|0;m=s+20|0;r=s+16|0;q=s+12|0;j=s+8|0;k=s+4|0;l=s;c[p>>2]=f;c[q>>2]=c[(c[p>>2]|0)+24>>2];a:while(1){if((d[(c[p>>2]|0)+18>>0]|0)>(d[(c[p>>2]|0)+17>>0]|0)){g=40;break}c[h>>2]=c[(c[p>>2]|0)+28+((d[(c[p>>2]|0)+18>>0]|0)-1<<2)>>2];b[g>>1]=b[(c[p>>2]|0)+72+((d[(c[p>>2]|0)+18>>0]|0)-1<<1)>>1]|0;if((b[g>>1]|0)==-2?(c[(c[p>>2]|0)+12>>2]|0)==0:0){g=5;break}while(1){f=c[(c[p>>2]|0)+4>>2]|0;c[m>>2]=f;if(!f)break;c[r>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[q>>2]|0)*48|0);while(1){if((c[q>>2]|0)>=(c[(c[m>>2]|0)+12>>2]|0))break;do if((c[(c[r>>2]|0)+8>>2]|0)==(c[h>>2]|0)?(c[(c[r>>2]|0)+12>>2]|0)==(b[g>>1]|0):0){if((b[g>>1]|0)==-2?(py(c[(c[c[r>>2]>>2]|0)+12>>2]|0,c[(c[p>>2]|0)+12>>2]|0,c[h>>2]|0)|0)!=0:0)break;if((d[(c[p>>2]|0)+18>>0]|0)>1?(c[(c[c[r>>2]>>2]|0)+4>>2]&1|0)!=0:0)break;if(((e[(c[r>>2]|0)+18>>1]&2048|0)!=0?(d[(c[p>>2]|0)+17>>0]|0)<11:0)?(f=Tx(c[(c[c[r>>2]>>2]|0)+16>>2]|0)|0,c[n>>2]=f,(d[f>>0]|0)==152):0){c[j>>2]=0;while(1){if((c[j>>2]|0)>=(d[(c[p>>2]|0)+17>>0]|0))break;if((c[(c[p>>2]|0)+28+(c[j>>2]<<2)>>2]|0)==(c[(c[n>>2]|0)+28>>2]|0)?(b[(c[p>>2]|0)+72+(c[j>>2]<<1)>>1]|0)==(b[(c[n>>2]|0)+32>>1]|0):0)break;c[j>>2]=(c[j>>2]|0)+1}if((c[j>>2]|0)==(d[(c[p>>2]|0)+17>>0]|0)){c[(c[p>>2]|0)+28+(c[j>>2]<<2)>>2]=c[(c[n>>2]|0)+28>>2];b[(c[p>>2]|0)+72+(c[j>>2]<<1)>>1]=b[(c[n>>2]|0)+32>>1]|0;f=(c[p>>2]|0)+17|0;a[f>>0]=(a[f>>0]|0)+1<<24>>24}}if(e[(c[r>>2]|0)+18>>1]&c[(c[p>>2]|0)+20>>2]){if((c[(c[p>>2]|0)+8>>2]|0)!=0?(e[(c[r>>2]|0)+18>>1]&256|0)==0:0){c[l>>2]=c[c[c[m>>2]>>2]>>2];c[n>>2]=c[c[r>>2]>>2];if(!(WA(c[n>>2]|0,a[(c[p>>2]|0)+16>>0]|0)|0))break;c[k>>2]=VA(c[l>>2]|0,c[(c[n>>2]|0)+12>>2]|0,c[(c[n>>2]|0)+16>>2]|0)|0;if(!(c[k>>2]|0))c[k>>2]=c[(c[c[l>>2]>>2]|0)+8>>2];if(Td(c[c[k>>2]>>2]|0,c[(c[p>>2]|0)+8>>2]|0)|0)break}if(!(e[(c[r>>2]|0)+18>>1]&130)){g=36;break a}f=c[(c[c[r>>2]>>2]|0)+16>>2]|0;c[n>>2]=f;if((d[f>>0]|0)!=152){g=36;break a}if((c[(c[n>>2]|0)+28>>2]|0)!=(c[(c[p>>2]|0)+28>>2]|0)){g=36;break a}if((b[(c[n>>2]|0)+32>>1]|0)!=(b[(c[p>>2]|0)+72>>1]|0)){g=36;break a}}}while(0);c[q>>2]=(c[q>>2]|0)+1;c[r>>2]=(c[r>>2]|0)+48}c[(c[p>>2]|0)+4>>2]=c[(c[(c[p>>2]|0)+4>>2]|0)+4>>2];c[q>>2]=0}c[(c[p>>2]|0)+4>>2]=c[c[p>>2]>>2];c[q>>2]=0;f=(c[p>>2]|0)+18|0;a[f>>0]=(a[f>>0]|0)+1<<24>>24}if((g|0)==5){c[o>>2]=0;r=c[o>>2]|0;i=s;return r|0}else if((g|0)==36){c[(c[p>>2]|0)+24>>2]=(c[q>>2]|0)+1;c[o>>2]=c[r>>2];r=c[o>>2]|0;i=s;return r|0}else if((g|0)==40){c[o>>2]=0;r=c[o>>2]|0;i=s;return r|0}return 0}function AD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=c[f>>2]|0;b=c[e>>2]|0;aA(a,b,If(c[e>>2]|0)|0);i=d;return}function BD(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;n=r;f=r+32|0;g=r+28|0;m=r+24|0;k=r+38|0;l=r+36|0;h=r+20|0;j=r+16|0;o=r+12|0;p=r+8|0;q=r+4|0;c[f>>2]=a;c[g>>2]=d;c[m>>2]=c[(c[g>>2]|0)+24+4>>2];b[k>>1]=b[(c[g>>2]|0)+24>>1]|0;b[l>>1]=b[(c[g>>2]|0)+42>>1]|0;if((e[k>>1]|0|0)==0?(c[(c[g>>2]|0)+36>>2]&48|0)==0:0){i=r;return}aA(c[f>>2]|0,35496,2);c[h>>2]=0;while(1){if((c[h>>2]|0)>=(e[k>>1]|0|0))break;c[o>>2]=CD(c[m>>2]|0,c[h>>2]|0)|0;if(c[h>>2]|0)aA(c[f>>2]|0,35499,5);d=c[f>>2]|0;a=(c[h>>2]|0)>=(e[l>>1]|0|0)?35505:35510;c[n>>2]=c[o>>2];$z(d,a,n);c[h>>2]=(c[h>>2]|0)+1}c[j>>2]=c[h>>2];if(c[(c[g>>2]|0)+36>>2]&32){c[p>>2]=CD(c[m>>2]|0,c[h>>2]|0)|0;n=c[f>>2]|0;o=c[h>>2]|0;c[h>>2]=o+1;DD(n,o,c[p>>2]|0,35427)}if(c[(c[g>>2]|0)+36>>2]&16){c[q>>2]=CD(c[m>>2]|0,c[j>>2]|0)|0;DD(c[f>>2]|0,c[h>>2]|0,c[q>>2]|0,35429)}aA(c[f>>2]|0,35518,1);i=r;return}function CD(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+8|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=d;c[g>>2]=b[(c[(c[f>>2]|0)+4>>2]|0)+(c[g>>2]<<1)>>1];if((c[g>>2]|0)==-2){c[e>>2]=35520;a=c[e>>2]|0;i=h;return a|0}if((c[g>>2]|0)==-1){c[e>>2]=25592;a=c[e>>2]|0;i=h;return a|0}else{c[e>>2]=c[(c[(c[(c[f>>2]|0)+12>>2]|0)+4>>2]|0)+((c[g>>2]|0)*24|0)>>2];a=c[e>>2]|0;i=h;return a|0}return 0}function DD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;j=i;i=i+16|0;f=j+12|0;k=j+8|0;g=j+4|0;h=j;c[f>>2]=a;c[k>>2]=b;c[g>>2]=d;c[h>>2]=e;if(c[k>>2]|0)aA(c[f>>2]|0,35499,5);AD(c[f>>2]|0,c[g>>2]|0);aA(c[f>>2]|0,c[h>>2]|0,1);aA(c[f>>2]|0,21139,1);i=j;return}function ED(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=$A(c[f>>2]|0,3,c[e>>2]|0)|0;i=d;return a|0}function FD(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n;m=n+20|0;c[j>>2]=b;c[k>>2]=d;b=l;c[b>>2]=f;c[b+4>>2]=g;if((c[(c[j>>2]|0)+8>>2]|0)!=(c[(c[k>>2]|0)+44>>2]|0)){c[h>>2]=0;b=c[h>>2]|0;i=n;return b|0}if(!((e[(c[j>>2]|0)+18>>1]|0)&130)){c[h>>2]=0;b=c[h>>2]|0;i=n;return b|0}d=(c[j>>2]|0)+32|0;b=l;if((c[d>>2]&c[b>>2]|0)!=0?1:(c[d+4>>2]&c[b+4>>2]|0)!=0){c[h>>2]=0;b=c[h>>2]|0;i=n;return b|0}if((c[(c[j>>2]|0)+12>>2]|0)<0){c[h>>2]=0;b=c[h>>2]|0;i=n;return b|0}a[m>>0]=a[(c[(c[(c[k>>2]|0)+16>>2]|0)+4>>2]|0)+((c[(c[j>>2]|0)+12>>2]|0)*24|0)+21>>0]|0;if(WA(c[c[j>>2]>>2]|0,a[m>>0]|0)|0){c[h>>2]=1;b=c[h>>2]|0;i=n;return b|0}else{c[h>>2]=0;b=c[h>>2]|0;i=n;return b|0}return 0}function GD(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+16|0;h=m+12|0;j=m+8|0;k=m+4|0;l=m;c[h>>2]=a;c[j>>2]=d;c[k>>2]=f;if((e[(c[j>>2]|0)+44>>1]|0|0)>=(c[k>>2]|0)){c[g>>2]=0;l=c[g>>2]|0;i=m;return l|0}c[k>>2]=(c[k>>2]|0)+7&-8;c[l>>2]=Fw(c[h>>2]|0,c[k>>2]<<2,0)|0;if(!(c[l>>2]|0)){c[g>>2]=7;l=c[g>>2]|0;i=m;return l|0}iR(c[l>>2]|0,c[(c[j>>2]|0)+48>>2]|0,(e[(c[j>>2]|0)+44>>1]|0)<<2|0)|0;if((c[(c[j>>2]|0)+48>>2]|0)!=((c[j>>2]|0)+56|0))Sf(c[h>>2]|0,c[(c[j>>2]|0)+48>>2]|0);c[(c[j>>2]|0)+48>>2]=c[l>>2];b[(c[j>>2]|0)+44>>1]=c[k>>2];c[g>>2]=0;l=c[g>>2]|0;i=m;return l|0}function HD(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+32|0;n=m+20|0;g=m+24|0;o=m+16|0;h=m+12|0;k=m+8|0;j=m+4|0;l=m;c[n>>2]=a;b[g>>1]=d;c[o>>2]=e;c[h>>2]=f;c[j>>2]=56+((b[g>>1]<<2)+7&-8)+(((b[g>>1]|0)+1<<1)+(b[g>>1]<<1)+(b[g>>1]|0)+7&-8);f=(c[j>>2]|0)+(c[o>>2]|0)|0;c[k>>2]=ph(c[n>>2]|0,f,((f|0)<0)<<31>>31)|0;if(!(c[k>>2]|0)){o=c[k>>2]|0;i=m;return o|0}c[l>>2]=(c[k>>2]|0)+56;c[(c[k>>2]|0)+32>>2]=c[l>>2];c[l>>2]=(c[l>>2]|0)+((b[g>>1]<<2)+7&-8);c[(c[k>>2]|0)+8>>2]=c[l>>2];c[l>>2]=(c[l>>2]|0)+((b[g>>1]|0)+1<<1);c[(c[k>>2]|0)+4>>2]=c[l>>2];c[l>>2]=(c[l>>2]|0)+(b[g>>1]<<1);c[(c[k>>2]|0)+28>>2]=c[l>>2];b[(c[k>>2]|0)+52>>1]=b[g>>1]|0;b[(c[k>>2]|0)+50>>1]=(b[g>>1]|0)-1;c[c[h>>2]>>2]=(c[k>>2]|0)+(c[j>>2]|0);o=c[k>>2]|0;i=m;return o|0}function ID(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+32|0;f=j+8|0;e=j+20|0;g=j+16|0;h=j;c[e>>2]=a;c[g>>2]=b;a=h;c[a>>2]=0;c[a+4>>2]=0;if(!(c[g>>2]|0)){g=f;c[g>>2]=0;c[g+4>>2]=0;g=f;h=g;h=c[h>>2]|0;g=g+4|0;g=c[g>>2]|0;C=g;i=j;return h|0}b=c[e>>2]|0;a=c[g>>2]|0;if((d[c[g>>2]>>0]|0|0)==152){g=nD(b,c[a+28>>2]|0)|0;e=h;c[e>>2]=g;c[e+4>>2]=C;e=h;h=c[e+4>>2]|0;g=f;c[g>>2]=c[e>>2];c[g+4>>2]=h;g=f;h=g;h=c[h>>2]|0;g=g+4|0;g=c[g>>2]|0;C=g;i=j;return h|0}l=ID(b,c[a+16>>2]|0)|0;k=h;c[k>>2]=l;c[k+4>>2]=C;k=ID(c[e>>2]|0,c[(c[g>>2]|0)+12>>2]|0)|0;l=h;a=c[l+4>>2]|C;b=h;c[b>>2]=c[l>>2]|k;c[b+4>>2]=a;b=c[e>>2]|0;a=(c[g>>2]|0)+20|0;if(c[(c[g>>2]|0)+4>>2]&2048){g=JD(b,c[a>>2]|0)|0;e=h;k=c[e+4>>2]|C;l=h;c[l>>2]=c[e>>2]|g;c[l+4>>2]=k}else{g=jD(b,c[a>>2]|0)|0;e=h;k=c[e+4>>2]|C;l=h;c[l>>2]=c[e>>2]|g;c[l+4>>2]=k}l=c[h+4>>2]|0;k=f;c[k>>2]=c[h>>2];c[k+4>>2]=l;k=f;l=k;l=c[l>>2]|0;k=k+4|0;k=c[k>>2]|0;C=k;i=j;return l|0}function JD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;j=i;i=i+32|0;d=j+20|0;e=j+16|0;g=j;h=j+12|0;f=j+8|0;c[d>>2]=a;c[e>>2]=b;b=g;c[b>>2]=0;c[b+4>>2]=0;while(1){if(!(c[e>>2]|0))break;c[h>>2]=c[(c[e>>2]|0)+32>>2];k=jD(c[d>>2]|0,c[c[e>>2]>>2]|0)|0;l=g;a=c[l+4>>2]|C;b=g;c[b>>2]=c[l>>2]|k;c[b+4>>2]=a;b=jD(c[d>>2]|0,c[(c[e>>2]|0)+40>>2]|0)|0;a=g;k=c[a+4>>2]|C;l=g;c[l>>2]=c[a>>2]|b;c[l+4>>2]=k;l=jD(c[d>>2]|0,c[(c[e>>2]|0)+48>>2]|0)|0;k=g;b=c[k+4>>2]|C;a=g;c[a>>2]=c[k>>2]|l;c[a+4>>2]=b;a=ID(c[d>>2]|0,c[(c[e>>2]|0)+36>>2]|0)|0;b=g;l=c[b+4>>2]|C;k=g;c[k>>2]=c[b>>2]|a;c[k+4>>2]=l;k=ID(c[d>>2]|0,c[(c[e>>2]|0)+44>>2]|0)|0;l=g;a=c[l+4>>2]|C;b=g;c[b>>2]=c[l>>2]|k;c[b+4>>2]=a;a:do if(c[h>>2]|0){c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[c[h>>2]>>2]|0))break a;k=JD(c[d>>2]|0,c[(c[h>>2]|0)+8+((c[f>>2]|0)*72|0)+20>>2]|0)|0;l=g;a=c[l+4>>2]|C;b=g;c[b>>2]=c[l>>2]|k;c[b+4>>2]=a;b=ID(c[d>>2]|0,c[(c[h>>2]|0)+8+((c[f>>2]|0)*72|0)+48>>2]|0)|0;a=g;k=c[a+4>>2]|C;l=g;c[l>>2]=c[a>>2]|b;c[l+4>>2]=k;c[f>>2]=(c[f>>2]|0)+1}}while(0);c[e>>2]=c[(c[e>>2]|0)+52>>2]}l=g;C=c[l+4>>2]|0;i=j;return c[l>>2]|0}function KD(a,c){a=a|0;c=c|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+4|0;f=h+2|0;g=h;b[f>>1]=a;b[g>>1]=c;if((b[f>>1]|0)>=(b[g>>1]|0)){a=b[f>>1]|0;if((b[f>>1]|0)>((b[g>>1]|0)+49|0)){b[e>>1]=a;g=b[e>>1]|0;i=h;return g|0}c=b[f>>1]|0;if((a<<16>>16|0)>((b[g>>1]|0)+31|0)){b[e>>1]=c+1;g=b[e>>1]|0;i=h;return g|0}else{b[e>>1]=c+(d[35582+((b[f>>1]|0)-(b[g>>1]|0))>>0]|0);g=b[e>>1]|0;i=h;return g|0}}else{a=b[g>>1]|0;if((b[g>>1]|0)>((b[f>>1]|0)+49|0)){b[e>>1]=a;g=b[e>>1]|0;i=h;return g|0}c=b[g>>1]|0;if((a<<16>>16|0)>((b[f>>1]|0)+31|0)){b[e>>1]=c+1;g=b[e>>1]|0;i=h;return g|0}else{b[e>>1]=c+(d[35582+((b[g>>1]|0)-(b[f>>1]|0))>>0]|0);g=b[e>>1]|0;i=h;return g|0}}return 0}function LD(f,g,h,j,k,l,m){f=f|0;g=g|0;h=h|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,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;$=i;i=i+144|0;W=$+141|0;n=$+120|0;o=$+116|0;p=$+112|0;q=$+132|0;r=$+130|0;s=$+108|0;t=$+104|0;T=$+140|0;R=$+139|0;S=$+138|0;B=$+137|0;w=$+136|0;A=$+135|0;G=$+128|0;F=$+126|0;H=$+124|0;z=$+100|0;X=$+96|0;D=$+92|0;y=$+88|0;x=$+84|0;N=$+80|0;P=$+76|0;O=$+72|0;L=$+68|0;M=$+64|0;v=$+60|0;Z=$+40|0;I=$+32|0;J=$+24|0;Q=$+16|0;U=$+56|0;V=$+52|0;u=$+134|0;K=$+48|0;E=$+8|0;Y=$;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;b[q>>1]=j;b[r>>1]=k;c[s>>2]=l;c[t>>2]=m;c[N>>2]=0;c[v>>2]=c[c[c[n>>2]>>2]>>2];j=Z;c[j>>2]=0;c[j+4>>2]=0;if((e[r>>1]|0)!=0?(e[(c[v>>2]|0)+60>>1]&128|0)!=0:0){a[W>>0]=0;_=a[W>>0]|0;i=$;return _|0}b[H>>1]=c[c[o>>2]>>2];if((e[H>>1]|0)>63){a[W>>0]=0;_=a[W>>0]|0;i=$;return _|0}a[B>>0]=1;f=lR(1,0,e[H>>1]|0)|0;f=fR(f|0,C|0,1,0)|0;j=I;c[j>>2]=f;c[j+4>>2]=C;j=J;c[j>>2]=0;c[j+4>>2]=0;j=Q;c[j>>2]=0;c[j+4>>2]=0;c[z>>2]=0;while(1){if(!(d[B>>0]|0))break;f=Z;h=c[f+4>>2]|0;j=I;m=c[j+4>>2]|0;if(!(h>>>0>>0|((h|0)==(m|0)?(c[f>>2]|0)>>>0<(c[j>>2]|0)>>>0:0)))break;if((c[z>>2]|0)>(e[r>>1]|0))break;if((c[z>>2]|0)>0){m=(c[N>>2]|0)+8|0;h=Q;f=c[h+4>>2]|c[m+4>>2];j=Q;c[j>>2]=c[h>>2]|c[m>>2];c[j+4>>2]=f}if((c[z>>2]|0)<(e[r>>1]|0))k=c[(c[(c[p>>2]|0)+24>>2]|0)+(c[z>>2]<<2)>>2]|0;else k=c[s>>2]|0;c[N>>2]=k;k=c[N>>2]|0;if(c[(c[N>>2]|0)+36>>2]&1024){_=16;break}c[y>>2]=c[(c[(c[n>>2]|0)+4>>2]|0)+8+((d[k+16>>0]|0)*72|0)+44>>2];c[X>>2]=0;while(1){if((c[X>>2]|0)>=(e[H>>1]|0))break;f=lR(1,0,c[X>>2]|0)|0;j=Z;do if(((!((f&c[j>>2]|0)!=0?1:(C&c[j+4>>2]|0)!=0)?(c[O>>2]=Tx(c[(c[(c[o>>2]|0)+4>>2]|0)+((c[X>>2]|0)*20|0)>>2]|0)|0,(d[c[O>>2]>>0]|0)==152):0)?(c[(c[O>>2]|0)+28>>2]|0)==(c[y>>2]|0):0)?(j=Q,c[P>>2]=xD((c[n>>2]|0)+328|0,c[y>>2]|0,b[(c[O>>2]|0)+32>>1]|0,~c[j>>2],~c[j+4>>2],386,0)|0,(c[P>>2]|0)!=0):0){if((e[(c[P>>2]|0)+18>>1]&130|0)!=0?(b[(c[O>>2]|0)+32>>1]|0)>=0:0){c[L>>2]=Ox(c[c[n>>2]>>2]|0,c[(c[(c[o>>2]|0)+4>>2]|0)+((c[X>>2]|0)*20|0)>>2]|0)|0;if(!(c[L>>2]|0))c[L>>2]=c[(c[v>>2]|0)+8>>2];c[U>>2]=c[c[L>>2]>>2];c[L>>2]=Ox(c[c[n>>2]>>2]|0,c[c[P>>2]>>2]|0)|0;if(!(c[L>>2]|0))c[L>>2]=c[(c[v>>2]|0)+8>>2];c[V>>2]=c[c[L>>2]>>2];if(Td(c[U>>2]|0,c[V>>2]|0)|0)break}m=lR(1,0,c[X>>2]|0)|0;h=Z;f=c[h+4>>2]|C;j=Z;c[j>>2]=c[h>>2]|m;c[j+4>>2]=f}while(0);c[X>>2]=(c[X>>2]|0)+1}if(!(c[(c[N>>2]|0)+36>>2]&4096)){if(c[(c[N>>2]|0)+36>>2]&256){c[M>>2]=0;b[G>>1]=0;b[F>>1]=1}else{j=c[(c[N>>2]|0)+24+4>>2]|0;c[M>>2]=j;if(!j){_=38;break}if((d[(c[M>>2]|0)+55>>0]|0)>>>2&1){_=38;break}b[G>>1]=b[(c[M>>2]|0)+50>>1]|0;b[F>>1]=b[(c[M>>2]|0)+52>>1]|0;a[B>>0]=(d[(c[M>>2]|0)+54>>0]|0)!=0}a[T>>0]=0;a[R>>0]=0;a[w>>0]=0;c[D>>2]=0;while(1){if((c[D>>2]|0)>=(e[F>>1]|0))break;if(((c[D>>2]|0)<(e[(c[N>>2]|0)+24>>1]|0)?(e[(c[N>>2]|0)+42>>1]|0)==0:0)?(j=e[(c[(c[(c[N>>2]|0)+48>>2]|0)+(c[D>>2]<<2)>>2]|0)+18>>1]|0,c[X>>2]=j,(j&386|0)!=0):0){if(c[X>>2]&256)a[B>>0]=0}else{if(c[M>>2]|0){c[x>>2]=b[(c[(c[M>>2]|0)+4>>2]|0)+(c[D>>2]<<1)>>1];a[S>>0]=a[(c[(c[M>>2]|0)+28>>2]|0)+(c[D>>2]|0)>>0]|0;if((c[x>>2]|0)==(b[(c[(c[M>>2]|0)+12>>2]|0)+32>>1]|0))c[x>>2]=-1}else{c[x>>2]=-1;a[S>>0]=0}do if((d[B>>0]|0)!=0&(c[x>>2]|0)>=0?(c[D>>2]|0)>=(e[(c[N>>2]|0)+24>>1]|0):0){if(d[(c[(c[(c[M>>2]|0)+12>>2]|0)+4>>2]|0)+((c[x>>2]|0)*24|0)+20>>0]|0)break;a[B>>0]=0}while(0);a[u>>0]=1;a[A>>0]=0;c[X>>2]=0;a:while(1){if(!(d[u>>0]|0))break;if((c[X>>2]|0)>=(e[H>>1]|0))break;f=lR(1,0,c[X>>2]|0)|0;j=Z;do if(!((f&c[j>>2]|0)!=0?1:(C&c[j+4>>2]|0)!=0)){c[O>>2]=Tx(c[(c[(c[o>>2]|0)+4>>2]|0)+((c[X>>2]|0)*20|0)>>2]|0)|0;if(!(e[q>>1]&768))a[u>>0]=0;k=c[O>>2]|0;if((c[x>>2]|0)>=-1){if((d[k>>0]|0)!=152)break;if((c[(c[O>>2]|0)+28>>2]|0)!=(c[y>>2]|0))break;if((b[(c[O>>2]|0)+32>>1]|0)!=(c[x>>2]|0))break}else if(py(k,c[(c[(c[(c[M>>2]|0)+40>>2]|0)+4>>2]|0)+((c[D>>2]|0)*20|0)>>2]|0,c[y>>2]|0)|0)break;if((c[x>>2]|0)<0){_=70;break a}c[L>>2]=Ox(c[c[n>>2]>>2]|0,c[(c[(c[o>>2]|0)+4>>2]|0)+((c[X>>2]|0)*20|0)>>2]|0)|0;if(!(c[L>>2]|0))c[L>>2]=c[(c[v>>2]|0)+8>>2];if(!(Td(c[c[L>>2]>>2]|0,c[(c[(c[M>>2]|0)+32>>2]|0)+(c[D>>2]<<2)>>2]|0)|0)){_=70;break a}}while(0);c[X>>2]=(c[X>>2]|0)+1}if((_|0)==70){_=0;a[A>>0]=1}do if(d[A>>0]|0){if(e[q>>1]&256)break;if(a[T>>0]|0){if((d[R>>0]^d[S>>0]|0)==(d[(c[(c[o>>2]|0)+4>>2]|0)+((c[X>>2]|0)*20|0)+12>>0]|0))break;a[A>>0]=0;break}a[R>>0]=d[S>>0]^d[(c[(c[o>>2]|0)+4>>2]|0)+((c[X>>2]|0)*20|0)+12>>0];if(a[R>>0]|0){m=lR(1,0,c[z>>2]|0)|0;j=c[t>>2]|0;h=j;f=c[h+4>>2]|C;c[j>>2]=c[h>>2]|m;c[j+4>>2]=f}a[T>>0]=1}while(0);if(!(a[A>>0]|0)){_=84;break}if((c[x>>2]|0)<0)a[w>>0]=1;m=lR(1,0,c[X>>2]|0)|0;h=Z;f=c[h+4>>2]|C;j=Z;c[j>>2]=c[h>>2]|m;c[j+4>>2]=f}c[D>>2]=(c[D>>2]|0)+1}do if((_|0)==84){_=0;if((c[D>>2]|0)!=0?(c[D>>2]|0)>=(e[G>>1]|0):0)break;a[B>>0]=0}while(0);if(a[w>>0]|0)a[B>>0]=1}b:do if(a[B>>0]|0){m=(c[N>>2]|0)+8|0;h=J;f=c[h+4>>2]|c[m+4>>2];j=J;c[j>>2]=c[h>>2]|c[m>>2];c[j+4>>2]=f;c[X>>2]=0;while(1){if((c[X>>2]|0)>=(e[H>>1]|0))break b;f=lR(1,0,c[X>>2]|0)|0;j=Z;do if(!((f&c[j>>2]|0)!=0?1:(C&c[j+4>>2]|0)!=0)){c[K>>2]=c[(c[(c[o>>2]|0)+4>>2]|0)+((c[X>>2]|0)*20|0)>>2];f=ID((c[n>>2]|0)+68|0,c[K>>2]|0)|0;j=E;c[j>>2]=f;c[j+4>>2]=C;j=E;if((c[j>>2]|0)==0&(c[j+4>>2]|0)==0?(FA(c[K>>2]|0)|0)==0:0)break;f=E;j=J;if((c[f>>2]&~c[j>>2]|0)==0?(c[f+4>>2]&~c[j+4>>2]|0)==0:0){m=lR(1,0,c[X>>2]|0)|0;h=Z;f=c[h+4>>2]|C;j=Z;c[j>>2]=c[h>>2]|m;c[j+4>>2]=f}}while(0);c[X>>2]=(c[X>>2]|0)+1}}while(0);c[z>>2]=(c[z>>2]|0)+1}if((_|0)==16){if(a[k+24+5>>0]|0){U=I;V=c[U+4>>2]|0;_=Z;c[_>>2]=c[U>>2];c[_+4>>2]=V}}else if((_|0)==38){a[W>>0]=0;_=a[W>>0]|0;i=$;return _|0}V=Z;_=I;if((c[V>>2]|0)==(c[_>>2]|0)?(c[V+4>>2]|0)==(c[_+4>>2]|0):0){a[W>>0]=b[H>>1];_=a[W>>0]|0;i=$;return _|0}if(a[B>>0]|0){a[W>>0]=-1;_=a[W>>0]|0;i=$;return _|0}c[X>>2]=(e[H>>1]|0)-1;while(1){if((c[X>>2]|0)<=0){_=108;break}V=lR(1,0,c[X>>2]|0)|0;V=fR(V|0,C|0,1,0)|0;U=Y;c[U>>2]=V;c[U+4>>2]=C;U=Z;V=Y;_=Y;k=c[X>>2]|0;if((c[U>>2]&c[V>>2]|0)==(c[_>>2]|0)?(c[U+4>>2]&c[V+4>>2]|0)==(c[_+4>>2]|0):0){_=106;break}c[X>>2]=k+-1}if((_|0)==106){a[W>>0]=k;_=a[W>>0]|0;i=$;return _|0}else if((_|0)==108){a[W>>0]=0;_=a[W>>0]|0;i=$;return _|0}return 0}function MD(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;g=i;i=i+16|0;j=g+12|0;k=g+4|0;l=g;h=g+10|0;f=g+8|0;b[j>>1]=a;c[k>>2]=d;c[l>>2]=e;e=(((c[k>>2]|0)-(c[l>>2]|0)|0)*100|0)/(c[k>>2]|0)|0;b[h>>1]=((Hj(e,((e|0)<0)<<31>>31)|0)<<16>>16)-66;e=b[j>>1]|0;e=e+((ND(b[j>>1]|0)|0)<<16>>16)|0;b[f>>1]=e+(b[h>>1]|0)+16;i=g;return b[f>>1]|0}function ND(a){a=a|0;var c=0,d=0;d=i;i=i+16|0;c=d;b[c>>1]=a;if((b[c>>1]|0)<=10){a=0;a=a&65535;i=d;return a|0}a=b[c>>1]|0;a=((Hj(a,((a|0)<0)<<31>>31)|0)<<16>>16)-33|0;a=a&65535;i=d;return a|0}function OD(f,g,j,k,l){f=f|0;g=g|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,L=0,M=0;K=i;i=i+112|0;I=K+16|0;m=K+104|0;n=K+100|0;o=K+8|0;L=K;M=K+96|0;z=K+92|0;E=K+88|0;A=K+84|0;B=K+80|0;p=K+76|0;x=K+72|0;w=K+68|0;D=K+64|0;C=K+60|0;q=K+56|0;t=K+52|0;s=K+48|0;u=K+44|0;v=K+40|0;G=K+36|0;H=K+32|0;r=K+28|0;y=K+24|0;F=K+20|0;c[n>>2]=f;f=o;c[f>>2]=g;c[f+4>>2]=j;f=L;c[f>>2]=k;c[f+4>>2]=l;c[G>>2]=0;c[H>>2]=0;c[F>>2]=0;c[M>>2]=c[c[n>>2]>>2];c[z>>2]=c[c[M>>2]>>2];c[p>>2]=c[c[z>>2]>>2];c[E>>2]=c[(c[n>>2]|0)+4>>2];c[y>>2]=c[(c[n>>2]|0)+12>>2];c[A>>2]=(c[(c[M>>2]|0)+4>>2]|0)+8+((d[(c[y>>2]|0)+16>>0]|0)*72|0);c[B>>2]=c[(c[A>>2]|0)+16>>2];f=L;c[x>>2]=fE(c[z>>2]|0,c[E>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[A>>2]|0,c[(c[n>>2]|0)+8>>2]|0)|0;if(!(c[x>>2]|0)){c[m>>2]=7;M=c[m>>2]|0;i=K;return M|0}M=c[y>>2]|0;c[M>>2]=0;c[M+4>>2]=0;b[(c[y>>2]|0)+18>>1]=0;c[(c[y>>2]|0)+36>>2]=1024;b[(c[y>>2]|0)+40>>1]=0;a[(c[y>>2]|0)+24+4>>0]=0;c[D>>2]=c[(c[x>>2]|0)+16>>2];c[v>>2]=c[c[x>>2]>>2];if(GD(c[p>>2]|0,c[y>>2]|0,c[v>>2]|0)|0){Sf(c[p>>2]|0,c[x>>2]|0);c[m>>2]=7;M=c[m>>2]|0;i=K;return M|0}c[r>>2]=0;a:while(1){if((c[r>>2]|0)>3)break;if(((c[G>>2]|0)==0?(c[r>>2]&1|0)!=0:0)?(c[r>>2]=(c[r>>2]|0)+1,(c[r>>2]|0)>3):0)break;if((c[H>>2]|0)==0&(c[r>>2]|0)>1)break;c[w>>2]=c[(c[x>>2]|0)+4>>2];c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[c[x>>2]>>2]|0))break;c[t>>2]=c[(c[w>>2]|0)+8>>2];c[C>>2]=(c[(c[E>>2]|0)+20>>2]|0)+((c[t>>2]|0)*48|0);b:do switch(c[r>>2]|0){case 0:{a[(c[w>>2]|0)+5>>0]=0;if(e[(c[C>>2]|0)+18>>1]&1)c[G>>2]=1;L=(c[C>>2]|0)+32|0;M=o;if((c[L>>2]&~c[M>>2]|0)!=0?1:(c[L+4>>2]&~c[M+4>>2]|0)!=0){c[H>>2]=1;break b}if(!(e[(c[C>>2]|0)+18>>1]&1))a[(c[w>>2]|0)+5>>0]=1;break}case 1:{L=(c[C>>2]|0)+32|0;M=o;a[(c[w>>2]|0)+5>>0]=((c[L>>2]&~c[M>>2]|0)==0?(c[L+4>>2]&~c[M+4>>2]|0)==0:0)&1;break}case 2:{a[(c[w>>2]|0)+5>>0]=(e[(c[C>>2]|0)+18>>1]&1|0)==0;break}default:a[(c[w>>2]|0)+5>>0]=1}while(0);c[q>>2]=(c[q>>2]|0)+1;c[w>>2]=(c[w>>2]|0)+12}kR(c[D>>2]|0,0,c[c[x>>2]>>2]<<3|0)|0;if(c[(c[x>>2]|0)+28>>2]|0)Kd(c[(c[x>>2]|0)+24>>2]|0);c[(c[x>>2]|0)+24>>2]=0;c[(c[x>>2]|0)+20>>2]=0;c[(c[x>>2]|0)+28>>2]=0;c[(c[x>>2]|0)+32>>2]=0;h[(c[x>>2]|0)+40>>3]=5.e+98;f=(c[x>>2]|0)+48|0;c[f>>2]=25;c[f+4>>2]=0;c[(c[x>>2]|0)+56>>2]=0;f=(c[A>>2]|0)+56|0;L=c[f+4>>2]|0;M=(c[x>>2]|0)+64|0;c[M>>2]=c[f>>2];c[M+4>>2]=L;c[F>>2]=gE(c[z>>2]|0,c[B>>2]|0,c[x>>2]|0)|0;if(c[F>>2]|0)break;c[w>>2]=c[(c[x>>2]|0)+4>>2];f=o;L=c[f+4>>2]|0;M=c[y>>2]|0;c[M>>2]=c[f>>2];c[M+4>>2]=L;c[u>>2]=-1;c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[v>>2]|0))break;c[(c[(c[y>>2]|0)+48>>2]|0)+(c[q>>2]<<2)>>2]=0;c[q>>2]=(c[q>>2]|0)+1}b[(c[y>>2]|0)+24+6>>1]=0;c[q>>2]=0;while(1){if((c[q>>2]|0)>=(c[v>>2]|0))break;M=(c[(c[D>>2]|0)+(c[q>>2]<<3)>>2]|0)-1|0;c[s>>2]=M;if((M|0)>=0){c[t>>2]=c[(c[w>>2]|0)+8>>2];if((c[t>>2]|0)<0?1:(c[s>>2]|0)>=(c[v>>2]|0)){J=36;break a}if((c[t>>2]|0)>=(c[(c[E>>2]|0)+12>>2]|0)){J=36;break a}if(c[(c[(c[y>>2]|0)+48>>2]|0)+(c[s>>2]<<2)>>2]|0){J=36;break a}c[C>>2]=(c[(c[E>>2]|0)+20>>2]|0)+((c[t>>2]|0)*48|0);f=(c[C>>2]|0)+32|0;M=c[y>>2]|0;l=M;L=c[l+4>>2]|c[f+4>>2];c[M>>2]=c[l>>2]|c[f>>2];c[M+4>>2]=L;c[(c[(c[y>>2]|0)+48>>2]|0)+(c[s>>2]<<2)>>2]=c[C>>2];if((c[s>>2]|0)>(c[u>>2]|0))c[u>>2]=c[s>>2];if((c[s>>2]|0)<16?(d[(c[D>>2]|0)+(c[q>>2]<<3)+4>>0]|0)!=0:0){M=(c[y>>2]|0)+24+6|0;b[M>>1]=e[M>>1]|1<>2]}if(e[(c[C>>2]|0)+18>>1]&1){if(!(d[(c[D>>2]|0)+(c[q>>2]<<3)+4>>0]|0))break;c[(c[x>>2]|0)+32>>2]=0;M=(c[x>>2]|0)+56|0;c[M>>2]=c[M>>2]&-2}}c[q>>2]=(c[q>>2]|0)+1;c[w>>2]=(c[w>>2]|0)+12}if((c[q>>2]|0)>=(c[v>>2]|0)){b[(c[y>>2]|0)+40>>1]=(c[u>>2]|0)+1;c[(c[y>>2]|0)+24>>2]=c[(c[x>>2]|0)+20>>2];a[(c[y>>2]|0)+24+4>>0]=c[(c[x>>2]|0)+28>>2];c[(c[x>>2]|0)+28>>2]=0;c[(c[y>>2]|0)+24+8>>2]=c[(c[x>>2]|0)+24>>2];if(c[(c[x>>2]|0)+32>>2]|0)g=c[(c[x>>2]|0)+8>>2]|0;else g=0;a[(c[y>>2]|0)+24+5>>0]=g;b[(c[y>>2]|0)+18>>1]=0;g=hE(+h[(c[x>>2]|0)+40>>3])|0;b[(c[y>>2]|0)+20>>1]=g;g=(c[x>>2]|0)+48|0;g=Hj(c[g>>2]|0,c[g+4>>2]|0)|0;b[(c[y>>2]|0)+22>>1]=g;g=(c[y>>2]|0)+36|0;j=c[g>>2]|0;if(c[(c[x>>2]|0)+56>>2]&1)c[g>>2]=j|4096;else c[g>>2]=j&-4097;TD(c[n>>2]|0,c[y>>2]|0)|0;if(a[(c[y>>2]|0)+24+4>>0]|0){Kd(c[(c[y>>2]|0)+24+8>>2]|0);a[(c[y>>2]|0)+24+4>>0]=0}}c[r>>2]=(c[r>>2]|0)+1}if((J|0)==36){c[F>>2]=1;M=c[z>>2]|0;c[I>>2]=c[c[B>>2]>>2];Ah(M,35614,I)}if(c[(c[x>>2]|0)+28>>2]|0)Kd(c[(c[x>>2]|0)+24>>2]|0);Sf(c[p>>2]|0,c[x>>2]|0);c[m>>2]=c[F>>2];M=c[m>>2]|0;i=K;return M|0}function PD(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0;E=i;i=i+144|0;j=E+128|0;k=E+8|0;y=E+124|0;s=E+120|0;B=E+64|0;m=E+140|0;l=E+136|0;F=E+56|0;t=E+52|0;r=E+48|0;D=E+44|0;o=E+40|0;n=E+36|0;A=E+134|0;z=E+132|0;w=E+32|0;u=E+28|0;q=E+24|0;v=E+20|0;x=E+16|0;p=E;c[j>>2]=f;f=k;c[f>>2]=g;c[f+4>>2]=h;b[l>>1]=-1;c[D>>2]=0;c[o>>2]=1;c[r>>2]=c[(c[j>>2]|0)+12>>2];c[y>>2]=c[c[j>>2]>>2];c[F>>2]=c[(c[y>>2]|0)+4>>2];c[t>>2]=(c[F>>2]|0)+8+((d[(c[r>>2]|0)+16>>0]|0)*72|0);c[u>>2]=c[(c[t>>2]|0)+16>>2];c[w>>2]=c[(c[j>>2]|0)+4>>2];do if(c[(c[t>>2]|0)+68>>2]|0)c[s>>2]=c[(c[t>>2]|0)+68>>2];else{if(d[(c[u>>2]|0)+42>>0]&32){c[s>>2]=c[(c[u>>2]|0)+8>>2];break}g=B;h=g+56|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));b[B+50>>1]=1;b[B+52>>1]=1;c[B+4>>2]=l;c[B+8>>2]=m;a[B+54>>0]=5;c[B+12>>2]=c[u>>2];b[B+48>>1]=b[(c[u>>2]|0)+40>>1]|0;b[m>>1]=b[(c[u>>2]|0)+38>>1]|0;b[m+2>>1]=0;c[q>>2]=c[(c[(c[t>>2]|0)+16>>2]|0)+8>>2];if(!(a[(c[t>>2]|0)+36+1>>0]&1))c[B+20>>2]=c[q>>2];c[s>>2]=B}while(0);b[A>>1]=b[(c[u>>2]|0)+38>>1]|0;b[z>>1]=ND(b[A>>1]|0)|0;a:do if((((((((c[(c[j>>2]|0)+16>>2]|0)==0?(e[(c[y>>2]|0)+34>>1]&128|0)==0:0)?(c[(c[c[c[y>>2]>>2]>>2]|0)+24>>2]&1048576|0)!=0:0)?(c[(c[t>>2]|0)+68>>2]|0)==0:0)?(a[(c[t>>2]|0)+36+1>>0]&1|0)==0:0)?(d[(c[u>>2]|0)+42>>0]&32|0)==0:0)?((d[(c[t>>2]|0)+36+1>>0]|0)>>>3&1|0)==0:0)?((d[(c[t>>2]|0)+36+1>>0]|0)>>>5&1|0)==0:0){c[x>>2]=(c[(c[w>>2]|0)+20>>2]|0)+((c[(c[w>>2]|0)+12>>2]|0)*48|0);c[v>>2]=c[(c[w>>2]|0)+20>>2];while(1){if(c[D>>2]|0)break a;if((c[v>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break a;B=(c[v>>2]|0)+32|0;F=(c[r>>2]|0)+8|0;if(!((c[B>>2]&c[F>>2]|0)!=0?1:(c[B+4>>2]&c[F+4>>2]|0)!=0)?(FD(c[v>>2]|0,c[t>>2]|0,0,0)|0)!=0:0){b[(c[r>>2]|0)+24>>1]=1;b[(c[r>>2]|0)+42>>1]=0;c[(c[r>>2]|0)+24+4>>2]=0;b[(c[r>>2]|0)+40>>1]=1;c[c[(c[r>>2]|0)+48>>2]>>2]=c[v>>2];b[(c[r>>2]|0)+18>>1]=(b[z>>1]|0)+(b[A>>1]|0)+4;if((c[(c[u>>2]|0)+12>>2]|0)==0?(d[(c[u>>2]|0)+42>>0]&2|0)==0:0){F=(c[r>>2]|0)+18|0;b[F>>1]=(b[F>>1]|0)+24}b[(c[r>>2]|0)+22>>1]=43;m=KD(b[z>>1]|0,b[(c[r>>2]|0)+22>>1]|0)|0;b[(c[r>>2]|0)+20>>1]=m;c[(c[r>>2]|0)+36>>2]=16384;m=k;q=(c[v>>2]|0)+32|0;B=c[m+4>>2]|c[q+4>>2];F=c[r>>2]|0;c[F>>2]=c[m>>2]|c[q>>2];c[F+4>>2]=B;c[D>>2]=TD(c[j>>2]|0,c[r>>2]|0)|0}c[v>>2]=(c[v>>2]|0)+48}}while(0);b:while(1){if(!((c[D>>2]|0)==0?(c[s>>2]|0)!=0:0)){g=46;break}if(!((c[(c[s>>2]|0)+36>>2]|0)!=0?(YD(c[(c[t>>2]|0)+44>>2]|0,c[w>>2]|0,c[(c[s>>2]|0)+36>>2]|0)|0)==0:0)){b[A>>1]=b[c[(c[s>>2]|0)+8>>2]>>1]|0;b[(c[r>>2]|0)+24>>1]=0;b[(c[r>>2]|0)+42>>1]=0;b[(c[r>>2]|0)+40>>1]=0;a[(c[r>>2]|0)+17>>0]=0;b[(c[r>>2]|0)+18>>1]=0;z=k;B=c[z+4>>2]|0;F=c[r>>2]|0;c[F>>2]=c[z>>2];c[F+4>>2]=B;b[(c[r>>2]|0)+22>>1]=b[A>>1]|0;c[(c[r>>2]|0)+24+4>>2]=c[s>>2];c[n>>2]=ZD(c[j>>2]|0,c[s>>2]|0,c[(c[t>>2]|0)+44>>2]|0)|0;do if((c[(c[s>>2]|0)+44>>2]|0)<=0){c[(c[r>>2]|0)+36>>2]=256;a[(c[r>>2]|0)+17>>0]=(c[n>>2]|0)!=0?c[o>>2]|0:0;b[(c[r>>2]|0)+20>>1]=(b[A>>1]|0)+16;_D(c[w>>2]|0,c[r>>2]|0,b[A>>1]|0);c[D>>2]=TD(c[j>>2]|0,c[r>>2]|0)|0;b[(c[r>>2]|0)+22>>1]=b[A>>1]|0;if(c[D>>2]|0){g=46;break b}}else{if((d[(c[s>>2]|0)+55>>0]|0)>>>5&1){c[(c[r>>2]|0)+36>>2]=576;F=p;c[F>>2]=0;c[F+4>>2]=0}else{B=(c[t>>2]|0)+56|0;x=c[B>>2]|0;B=c[B+4>>2]|0;z=$D(c[s>>2]|0)|0;F=p;c[F>>2]=x&~z;c[F+4>>2]=B&~C;F=p;c[(c[r>>2]|0)+36>>2]=(c[F>>2]|0)==0&(c[F+4>>2]|0)==0?576:512}if((c[n>>2]|0)==0?(d[(c[u>>2]|0)+42>>0]&32|0)==0:0){F=p;if(!((c[F>>2]|0)==0&(c[F+4>>2]|0)==0))break;if((d[(c[s>>2]|0)+55>>0]|0)>>>2&1)break;if((b[(c[s>>2]|0)+48>>1]|0)>=(b[(c[u>>2]|0)+40>>1]|0))break;if(!((c[6]|0)!=0?(e[(c[y>>2]|0)+34>>1]&4|0)==0:0))break;if(e[(c[c[c[y>>2]>>2]>>2]|0)+60>>1]&64)break}a[(c[r>>2]|0)+17>>0]=(c[n>>2]|0)!=0?c[o>>2]|0:0;b[(c[r>>2]|0)+20>>1]=(b[A>>1]|0)+1+(((b[(c[s>>2]|0)+48>>1]|0)*15|0)/(b[(c[u>>2]|0)+40>>1]|0)|0);F=p;if((c[F>>2]|0)!=0|(c[F+4>>2]|0)!=0){F=KD(b[(c[r>>2]|0)+20>>1]|0,(b[A>>1]|0)+16&65535)|0;b[(c[r>>2]|0)+20>>1]=F}_D(c[w>>2]|0,c[r>>2]|0,b[A>>1]|0);c[D>>2]=TD(c[j>>2]|0,c[r>>2]|0)|0;b[(c[r>>2]|0)+22>>1]=b[A>>1]|0;if(c[D>>2]|0){g=46;break b}}while(0);c[D>>2]=aE(c[j>>2]|0,c[t>>2]|0,c[s>>2]|0,0)|0;if(c[(c[t>>2]|0)+68>>2]|0){g=46;break}}c[s>>2]=c[(c[s>>2]|0)+20>>2];c[o>>2]=(c[o>>2]|0)+1}if((g|0)==46){i=E;return c[D>>2]|0}return 0}function QD(f,g,h,j,k){f=f|0;g=g|0;h=h|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;I=i;i=i+672|0;m=I+668|0;n=I+584|0;o=I+576|0;l=I+664|0;z=I+660|0;u=I+656|0;y=I+652|0;A=I+648|0;B=I+644|0;q=I+640|0;G=I+168|0;E=I+620|0;F=I+112|0;C=I+56|0;t=I+616|0;w=I+612|0;x=I+608|0;v=I+604|0;s=I+600|0;p=I+596|0;r=I+592|0;D=I;c[m>>2]=f;f=n;c[f>>2]=g;c[f+4>>2]=h;g=o;c[g>>2]=j;c[g+4>>2]=k;c[l>>2]=c[c[m>>2]>>2];c[B>>2]=0;c[z>>2]=c[(c[m>>2]|0)+4>>2];c[A>>2]=(c[(c[z>>2]|0)+20>>2]|0)+((c[(c[z>>2]|0)+12>>2]|0)*48|0);c[u>>2]=c[(c[m>>2]|0)+12>>2];g=F;h=g+56|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[t>>2]=(c[(c[l>>2]|0)+4>>2]|0)+8+((d[(c[u>>2]|0)+16>>0]|0)*72|0);c[q>>2]=c[(c[t>>2]|0)+44>>2];c[y>>2]=c[(c[z>>2]|0)+20>>2];while(1){if(!((c[y>>2]|0)>>>0<(c[A>>2]|0)>>>0?(c[B>>2]|0)==0:0))break;a:do if((e[(c[y>>2]|0)+18>>1]&512|0)!=0?(f=(c[(c[y>>2]|0)+12>>2]|0)+408|0,l=(c[u>>2]|0)+8|0,(c[f>>2]&c[l>>2]|0)!=0?1:(c[f+4>>2]&c[l+4>>2]|0)!=0):0){c[w>>2]=c[(c[y>>2]|0)+12>>2];c[x>>2]=(c[(c[w>>2]|0)+20>>2]|0)+((c[(c[w>>2]|0)+12>>2]|0)*48|0);c[s>>2]=1;l=c[m>>2]|0;c[E>>2]=c[l>>2];c[E+4>>2]=c[l+4>>2];c[E+8>>2]=c[l+8>>2];c[E+12>>2]=c[l+12>>2];c[E+16>>2]=c[l+16>>2];c[E+8>>2]=0;c[E+16>>2]=C;c[v>>2]=c[(c[w>>2]|0)+20>>2];b:while(1){if((c[v>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;g=c[v>>2]|0;if(!(e[(c[v>>2]|0)+18>>1]&1024)){if((c[g+8>>2]|0)==(c[q>>2]|0)){c[G>>2]=c[c[z>>2]>>2];c[G+4>>2]=c[z>>2];a[G+8>>0]=72;c[G+12>>2]=1;c[G+20>>2]=c[v>>2];c[E+4>>2]=G;H=11}}else{c[E+4>>2]=c[g+12>>2];H=11}c:do if((H|0)==11){H=0;b[C>>1]=0;h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;if(d[(c[(c[t>>2]|0)+16>>2]|0)+42>>0]&16){l=o;c[B>>2]=OD(E,g,h,c[l>>2]|0,c[l+4>>2]|0)|0}else c[B>>2]=PD(E,g,h)|0;if(!(c[B>>2]|0)){f=n;l=o;c[B>>2]=QD(E,c[f>>2]|0,c[f+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0}if(!(e[C>>1]|0)){H=17;break b}if(c[s>>2]|0){RD(F,C);c[s>>2]=0;break}RD(D,F);b[F>>1]=0;c[p>>2]=0;while(1){if((c[p>>2]|0)>=(e[D>>1]|0))break c;c[r>>2]=0;while(1){g=c[p>>2]|0;if((c[r>>2]|0)>=(e[C>>1]|0))break;l=D+8+(g<<4)|0;f=C+8+(c[r>>2]<<4)|0;k=c[l>>2]|c[f>>2];f=c[l+4>>2]|c[f+4>>2];l=KD(b[D+8+(c[p>>2]<<4)+8>>1]|0,b[C+8+(c[r>>2]<<4)+8>>1]|0)|0;SD(F,k,f,l,KD(b[D+8+(c[p>>2]<<4)+10>>1]|0,b[C+8+(c[r>>2]<<4)+10>>1]|0)|0)|0;c[r>>2]=(c[r>>2]|0)+1}c[p>>2]=g+1}}while(0);c[v>>2]=(c[v>>2]|0)+48}if((H|0)==17){H=0;b[F>>1]=0}b[(c[u>>2]|0)+40>>1]=1;c[c[(c[u>>2]|0)+48>>2]>>2]=c[y>>2];c[(c[u>>2]|0)+36>>2]=8192;b[(c[u>>2]|0)+18>>1]=0;a[(c[u>>2]|0)+17>>0]=0;l=(c[u>>2]|0)+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[p>>2]=0;while(1){if(c[B>>2]|0)break a;if((c[p>>2]|0)>=(e[F>>1]|0))break a;b[(c[u>>2]|0)+20>>1]=(b[F+8+(c[p>>2]<<4)+8>>1]|0)+1;b[(c[u>>2]|0)+22>>1]=b[F+8+(c[p>>2]<<4)+10>>1]|0; +k=F+8+(c[p>>2]<<4)|0;f=c[k+4>>2]|0;l=c[u>>2]|0;c[l>>2]=c[k>>2];c[l+4>>2]=f;c[B>>2]=TD(c[m>>2]|0,c[u>>2]|0)|0;c[p>>2]=(c[p>>2]|0)+1}}while(0);c[y>>2]=(c[y>>2]|0)+48}i=I;return c[B>>2]|0}function RD(a,d){a=a|0;d=d|0;var f=0,g=0,h=0;f=i;i=i+16|0;g=f+4|0;h=f;c[g>>2]=a;c[h>>2]=d;b[c[g>>2]>>1]=b[c[h>>2]>>1]|0;iR((c[g>>2]|0)+8|0,(c[h>>2]|0)+8|0,(e[c[g>>2]>>1]|0)<<4|0)|0;i=f;return}function SD(a,d,f,g,h){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+32|0;k=r+16|0;l=r+12|0;m=r;n=r+24|0;o=r+22|0;p=r+20|0;q=r+8|0;c[l>>2]=a;a=m;c[a>>2]=d;c[a+4>>2]=f;b[n>>1]=g;b[o>>1]=h;b[p>>1]=b[c[l>>2]>>1]|0;c[q>>2]=(c[l>>2]|0)+8;while(1){if((e[p>>1]|0)<=0){j=9;break}if((b[n>>1]|0)<=(b[(c[q>>2]|0)+8>>1]|0)?(h=m,a=c[q>>2]|0,g=m,(c[h>>2]&c[a>>2]|0)==(c[g>>2]|0)?(c[h+4>>2]&c[a+4>>2]|0)==(c[g+4>>2]|0):0):0)break;if((b[(c[q>>2]|0)+8>>1]|0)<=(b[n>>1]|0)?(h=c[q>>2]|0,a=m,g=c[q>>2]|0,(c[h>>2]&c[a>>2]|0)==(c[g>>2]|0)?(c[h+4>>2]&c[a+4>>2]|0)==(c[g+4>>2]|0):0):0){j=7;break}b[p>>1]=(b[p>>1]|0)+-1<<16>>16;c[q>>2]=(c[q>>2]|0)+16}if((j|0)==7){c[k>>2]=0;q=c[k>>2]|0;i=r;return q|0}do if((j|0)==9){d=c[l>>2]|0;if((e[c[l>>2]>>1]|0)<3){p=b[d>>1]|0;b[d>>1]=p+1<<16>>16;c[q>>2]=(c[l>>2]|0)+8+((p&65535)<<4);b[(c[q>>2]|0)+10>>1]=b[o>>1]|0;break}c[q>>2]=d+8;b[p>>1]=1;while(1){d=b[(c[q>>2]|0)+8>>1]|0;if((e[p>>1]|0)>=(e[c[l>>2]>>1]|0))break;if((d|0)>(b[(c[l>>2]|0)+8+(e[p>>1]<<4)+8>>1]|0))c[q>>2]=(c[l>>2]|0)+8+(e[p>>1]<<4);b[p>>1]=(b[p>>1]|0)+1<<16>>16}if((d|0)<=(b[n>>1]|0)){c[k>>2]=0;q=c[k>>2]|0;i=r;return q|0}}while(0);l=m;m=c[l+4>>2]|0;p=c[q>>2]|0;c[p>>2]=c[l>>2];c[p+4>>2]=m;b[(c[q>>2]|0)+8>>1]=b[n>>1]|0;if((b[(c[q>>2]|0)+10>>1]|0)>(b[o>>1]|0))b[(c[q>>2]|0)+10>>1]=b[o>>1]|0;c[k>>2]=1;q=c[k>>2]|0;i=r;return q|0}function TD(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;e=p+36|0;f=p+32|0;g=p+28|0;n=p+24|0;j=p+20|0;m=p+16|0;h=p+12|0;o=p+8|0;l=p+4|0;k=p;c[f>>2]=a;c[g>>2]=d;c[m>>2]=c[c[f>>2]>>2];c[h>>2]=c[c[c[m>>2]>>2]>>2];if(c[(c[f>>2]|0)+16>>2]|0){if(b[(c[g>>2]|0)+40>>1]|0){o=c[g>>2]|0;SD(c[(c[f>>2]|0)+16>>2]|0,c[o>>2]|0,c[o+4>>2]|0,b[(c[g>>2]|0)+20>>1]|0,b[(c[g>>2]|0)+22>>1]|0)|0}c[e>>2]=0;o=c[e>>2]|0;i=p;return o|0}UD(c[(c[m>>2]|0)+16>>2]|0,c[g>>2]|0);c[n>>2]=VD((c[m>>2]|0)+16|0,c[g>>2]|0)|0;if(!(c[n>>2]|0)){c[e>>2]=0;o=c[e>>2]|0;i=p;return o|0}c[j>>2]=c[c[n>>2]>>2];a:do if(!(c[j>>2]|0)){o=Fw(c[h>>2]|0,72,0)|0;c[j>>2]=o;c[c[n>>2]>>2]=o;if(c[j>>2]|0){ZC(c[j>>2]|0);c[(c[j>>2]|0)+52>>2]=0;break}c[e>>2]=7;o=c[e>>2]|0;i=p;return o|0}else{c[o>>2]=(c[j>>2]|0)+52;while(1){if(!(c[c[o>>2]>>2]|0))break a;c[o>>2]=VD(c[o>>2]|0,c[g>>2]|0)|0;if(!(c[o>>2]|0))break a;c[l>>2]=c[c[o>>2]>>2];if(!(c[l>>2]|0))break a;c[c[o>>2]>>2]=c[(c[l>>2]|0)+52>>2];WC(c[h>>2]|0,c[l>>2]|0)}}while(0);WD(c[h>>2]|0,c[j>>2]|0,c[g>>2]|0)|0;if(((c[(c[j>>2]|0)+36>>2]&1024|0)==0?(c[k>>2]=c[(c[j>>2]|0)+24+4>>2],(c[k>>2]|0)!=0):0)?(c[(c[k>>2]|0)+44>>2]|0)==0:0)c[(c[j>>2]|0)+24+4>>2]=0;c[e>>2]=0;o=c[e>>2]|0;i=p;return o|0}function UD(a,e){a=a|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=e;if(!((c[f>>2]|0)!=0?(c[(c[g>>2]|0)+36>>2]&512|0)!=0:0)){i=h;return}do{do if((d[(c[f>>2]|0)+16>>0]|0)==(d[(c[g>>2]|0)+16>>0]|0)?(c[(c[f>>2]|0)+36>>2]&512|0)!=0:0){if(XD(c[f>>2]|0,c[g>>2]|0)|0){b[(c[g>>2]|0)+20>>1]=b[(c[f>>2]|0)+20>>1]|0;b[(c[g>>2]|0)+22>>1]=(b[(c[f>>2]|0)+22>>1]|0)-1;break}if(XD(c[g>>2]|0,c[f>>2]|0)|0){b[(c[g>>2]|0)+20>>1]=b[(c[f>>2]|0)+20>>1]|0;b[(c[g>>2]|0)+22>>1]=(b[(c[f>>2]|0)+22>>1]|0)+1}}while(0);c[f>>2]=c[(c[f>>2]|0)+52>>2]}while((c[f>>2]|0)!=0);i=h;return}function VD(a,f){a=a|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+12|0;k=l+8|0;g=l+4|0;h=l;c[k>>2]=a;c[g>>2]=f;c[h>>2]=c[c[k>>2]>>2];while(1){if(!(c[h>>2]|0)){g=19;break}if((d[(c[h>>2]|0)+16>>0]|0)==(d[(c[g>>2]|0)+16>>0]|0)?(d[(c[h>>2]|0)+17>>0]|0)==(d[(c[g>>2]|0)+17>>0]|0):0){if(((((c[(c[h>>2]|0)+36>>2]&16384|0)!=0?(e[(c[g>>2]|0)+42>>1]|0)==0:0)?(c[(c[g>>2]|0)+36>>2]&512|0)!=0:0)?(c[(c[g>>2]|0)+36>>2]&1|0)!=0:0)?(m=c[h>>2]|0,f=c[g>>2]|0,a=c[g>>2]|0,(c[m>>2]&c[f>>2]|0)==(c[a>>2]|0)?(c[m+4>>2]&c[f+4>>2]|0)==(c[a+4>>2]|0):0):0){g=19;break}f=c[h>>2]|0;a=c[g>>2]|0;m=c[h>>2]|0;if(((((c[f>>2]&c[a>>2]|0)==(c[m>>2]|0)?(c[f+4>>2]&c[a+4>>2]|0)==(c[m+4>>2]|0):0)?(b[(c[h>>2]|0)+18>>1]|0)<=(b[(c[g>>2]|0)+18>>1]|0):0)?(b[(c[h>>2]|0)+20>>1]|0)<=(b[(c[g>>2]|0)+20>>1]|0):0)?(b[(c[h>>2]|0)+22>>1]|0)<=(b[(c[g>>2]|0)+22>>1]|0):0){g=14;break}f=c[h>>2]|0;a=c[g>>2]|0;m=c[g>>2]|0;if((((c[f>>2]&c[a>>2]|0)==(c[m>>2]|0)?(c[f+4>>2]&c[a+4>>2]|0)==(c[m+4>>2]|0):0)?(b[(c[h>>2]|0)+20>>1]|0)>=(b[(c[g>>2]|0)+20>>1]|0):0)?(b[(c[h>>2]|0)+22>>1]|0)>=(b[(c[g>>2]|0)+22>>1]|0):0){g=19;break}}c[k>>2]=(c[h>>2]|0)+52;c[h>>2]=c[c[k>>2]>>2]}if((g|0)==14){c[j>>2]=0;m=c[j>>2]|0;i=l;return m|0}else if((g|0)==19){c[j>>2]=c[k>>2];m=c[j>>2]|0;i=l;return m|0}return 0}function WD(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;k=i;i=i+16|0;h=k+12|0;l=k+8|0;g=k+4|0;j=k;c[l>>2]=b;c[g>>2]=d;c[j>>2]=f;YC(c[l>>2]|0,c[g>>2]|0);d=(GD(c[l>>2]|0,c[g>>2]|0,e[(c[j>>2]|0)+40>>1]|0)|0)!=0;b=c[g>>2]|0;if(d){l=b+24|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[h>>2]=7;l=c[h>>2]|0;i=k;return l|0}f=c[j>>2]|0;d=b+44|0;do{c[b>>2]=c[f>>2];b=b+4|0;f=f+4|0}while((b|0)<(d|0));iR(c[(c[g>>2]|0)+48>>2]|0,c[(c[j>>2]|0)+48>>2]|0,(e[(c[g>>2]|0)+40>>1]|0)<<2|0)|0;b=c[j>>2]|0;if(!(c[(c[j>>2]|0)+36>>2]&1024)){if(c[b+36>>2]&16384)c[(c[j>>2]|0)+24+4>>2]=0}else a[b+24+4>>0]=0;c[h>>2]=0;l=c[h>>2]|0;i=k;return l|0}function XD(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+16|0;f=l+12|0;g=l+8|0;h=l+4|0;j=l;c[f>>2]=a;c[g>>2]=d;if(((e[(c[f>>2]|0)+40>>1]|0)-(e[(c[f>>2]|0)+42>>1]|0)|0)>=((e[(c[g>>2]|0)+40>>1]|0)-(e[(c[g>>2]|0)+42>>1]|0)|0)){c[k>>2]=0;k=c[k>>2]|0;i=l;return k|0}if((e[(c[g>>2]|0)+42>>1]|0)>(e[(c[f>>2]|0)+42>>1]|0)){c[k>>2]=0;k=c[k>>2]|0;i=l;return k|0}if((b[(c[f>>2]|0)+20>>1]|0)>=(b[(c[g>>2]|0)+20>>1]|0)){if((b[(c[f>>2]|0)+20>>1]|0)>(b[(c[g>>2]|0)+20>>1]|0)){c[k>>2]=0;k=c[k>>2]|0;i=l;return k|0}if((b[(c[f>>2]|0)+22>>1]|0)>(b[(c[g>>2]|0)+22>>1]|0)){c[k>>2]=0;k=c[k>>2]|0;i=l;return k|0}}c[h>>2]=(e[(c[f>>2]|0)+40>>1]|0)-1;while(1){if((c[h>>2]|0)<0){f=20;break}if(c[(c[(c[f>>2]|0)+48>>2]|0)+(c[h>>2]<<2)>>2]|0){c[j>>2]=(e[(c[g>>2]|0)+40>>1]|0)-1;while(1){if((c[j>>2]|0)<0)break;if((c[(c[(c[g>>2]|0)+48>>2]|0)+(c[j>>2]<<2)>>2]|0)==(c[(c[(c[f>>2]|0)+48>>2]|0)+(c[h>>2]<<2)>>2]|0))break;c[j>>2]=(c[j>>2]|0)+-1}if((c[j>>2]|0)<0){f=18;break}}c[h>>2]=(c[h>>2]|0)+-1}if((f|0)==18){c[k>>2]=0;k=c[k>>2]|0;i=l;return k|0}else if((f|0)==20){c[k>>2]=1;k=c[k>>2]|0;i=l;return k|0}return 0}function YD(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+24|0;h=p+20|0;j=p+16|0;k=p+12|0;l=p+8|0;n=p+4|0;m=p;c[h>>2]=a;c[j>>2]=e;c[k>>2]=f;while(1){if((d[c[k>>2]>>0]|0)!=72)break;if(!(YD(c[h>>2]|0,c[j>>2]|0,c[(c[k>>2]|0)+12>>2]|0)|0)){o=4;break}c[k>>2]=c[(c[k>>2]|0)+16>>2]}if((o|0)==4){c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}c[l>>2]=0;c[n>>2]=c[(c[j>>2]|0)+20>>2];while(1){if((c[l>>2]|0)>=(c[(c[j>>2]|0)+12>>2]|0)){o=13;break}c[m>>2]=c[c[n>>2]>>2];if(eE(c[m>>2]|0,c[k>>2]|0,c[h>>2]|0)|0){if(!(c[(c[m>>2]|0)+4>>2]&1)){o=11;break}if((b[(c[m>>2]|0)+36>>1]|0)==(c[h>>2]|0)){o=11;break}}c[l>>2]=(c[l>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+48}if((o|0)==11){c[g>>2]=1;o=c[g>>2]|0;i=p;return o|0}else if((o|0)==13){c[g>>2]=0;o=c[g>>2]|0;i=p;return o|0}return 0}function ZD(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;h=s+32|0;j=s+28|0;k=s+24|0;l=s+20|0;q=s+16|0;m=s+12|0;n=s+8|0;o=s+4|0;p=s;c[j>>2]=a;c[k>>2]=f;c[l>>2]=g;if((d[(c[k>>2]|0)+55>>0]|0)>>>2&1){c[h>>2]=0;r=c[h>>2]|0;i=s;return r|0}f=c[(c[c[j>>2]>>2]|0)+8>>2]|0;c[q>>2]=f;if(!f){c[h>>2]=0;r=c[h>>2]|0;i=s;return r|0}c[n>>2]=0;a:while(1){if((c[n>>2]|0)>=(c[c[q>>2]>>2]|0)){r=24;break}c[p>>2]=Tx(c[(c[(c[q>>2]|0)+4>>2]|0)+((c[n>>2]|0)*20|0)>>2]|0)|0;b:do if((d[c[p>>2]>>0]|0)==152?(c[(c[p>>2]|0)+28>>2]|0)==(c[l>>2]|0):0){if((b[(c[p>>2]|0)+32>>1]|0)<0){r=10;break a}c[o>>2]=0;while(1){if((c[o>>2]|0)>=(e[(c[k>>2]|0)+50>>1]|0))break b;if((b[(c[p>>2]|0)+32>>1]|0)==(b[(c[(c[k>>2]|0)+4>>2]|0)+(c[o>>2]<<1)>>1]|0)){r=14;break a}c[o>>2]=(c[o>>2]|0)+1}}else r=16;while(0);c:do if((r|0)==16?(r=0,f=c[(c[k>>2]|0)+40>>2]|0,c[m>>2]=f,(f|0)!=0):0){c[o>>2]=0;while(1){if((c[o>>2]|0)>=(e[(c[k>>2]|0)+50>>1]|0))break c;if((b[(c[(c[k>>2]|0)+4>>2]|0)+(c[o>>2]<<1)>>1]|0)==-2?(py(c[p>>2]|0,c[(c[(c[m>>2]|0)+4>>2]|0)+((c[o>>2]|0)*20|0)>>2]|0,c[l>>2]|0)|0)==0:0){r=21;break a}c[o>>2]=(c[o>>2]|0)+1}}while(0);c[n>>2]=(c[n>>2]|0)+1}if((r|0)==10){c[h>>2]=1;r=c[h>>2]|0;i=s;return r|0}else if((r|0)==14){c[h>>2]=1;r=c[h>>2]|0;i=s;return r|0}else if((r|0)==21){c[h>>2]=1;r=c[h>>2]|0;i=s;return r|0}else if((r|0)==24){c[h>>2]=0;r=c[h>>2]|0;i=s;return r|0}return 0}function _D(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;g=s+36|0;h=s+32|0;j=s+42|0;q=s+28|0;r=s+24|0;o=s;k=s+20|0;m=s+16|0;n=s+12|0;l=s+40|0;p=s+8|0;c[g>>2]=a;c[h>>2]=d;b[j>>1]=f;t=c[h>>2]|0;f=(c[h>>2]|0)+8|0;d=~(c[t+4>>2]|c[f+4>>2]);a=o;c[a>>2]=~(c[t>>2]|c[f>>2]);c[a+4>>2]=d;b[l>>1]=0;c[k>>2]=c[(c[g>>2]|0)+12>>2];c[q>>2]=c[(c[g>>2]|0)+20>>2];while(1){if((c[k>>2]|0)<=0)break;if(e[(c[q>>2]|0)+20>>1]&2)break;a=(c[q>>2]|0)+40|0;t=(c[h>>2]|0)+8|0;do if(!((c[a>>2]&c[t>>2]|0)==0?(c[a+4>>2]&c[t+4>>2]|0)==0:0)?(a=(c[q>>2]|0)+40|0,t=o,!((c[a>>2]&c[t>>2]|0)!=0?1:(c[a+4>>2]&c[t+4>>2]|0)!=0)):0){c[m>>2]=(e[(c[h>>2]|0)+40>>1]|0)-1;while(1){if((c[m>>2]|0)<0)break;c[r>>2]=c[(c[(c[h>>2]|0)+48>>2]|0)+(c[m>>2]<<2)>>2];if(c[r>>2]|0){if((c[r>>2]|0)==(c[q>>2]|0))break;if((c[(c[r>>2]|0)+4>>2]|0)>=0?((c[(c[g>>2]|0)+20>>2]|0)+((c[(c[r>>2]|0)+4>>2]|0)*48|0)|0)==(c[q>>2]|0):0)break}c[m>>2]=(c[m>>2]|0)+-1}if((c[m>>2]|0)<0){if((b[(c[q>>2]|0)+16>>1]|0)<=0){t=(c[h>>2]|0)+22|0;b[t>>1]=(b[t>>1]|0)+(b[(c[q>>2]|0)+16>>1]|0);break}t=(c[h>>2]|0)+22|0;b[t>>1]=(b[t>>1]|0)+-1<<16>>16;if(e[(c[q>>2]|0)+18>>1]&130){c[p>>2]=c[(c[c[q>>2]>>2]|0)+16>>2];t=(ky(c[p>>2]|0,n)|0)!=0;if(t&(c[n>>2]|0)>=-1&(c[n>>2]|0)<=1)c[n>>2]=10;else c[n>>2]=20;if((b[l>>1]|0)<(c[n>>2]|0))b[l>>1]=c[n>>2]}}}while(0);c[k>>2]=(c[k>>2]|0)+-1;c[q>>2]=(c[q>>2]|0)+48}if((b[(c[h>>2]|0)+22>>1]|0)<=((b[j>>1]|0)-(b[l>>1]|0)|0)){i=s;return}b[(c[h>>2]|0)+22>>1]=(b[j>>1]|0)-(b[l>>1]|0);i=s;return}function $D(a){a=a|0;var d=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;j=i;i=i+32|0;d=j+16|0;g=j;f=j+12|0;h=j+8|0;c[d>>2]=a;a=g;c[a>>2]=0;c[a+4>>2]=0;c[f>>2]=(e[(c[d>>2]|0)+52>>1]|0)-1;while(1){if((c[f>>2]|0)<0)break;c[h>>2]=b[(c[(c[d>>2]|0)+4>>2]|0)+(c[f>>2]<<1)>>1];if((c[h>>2]|0)>=0&(c[h>>2]|0)<63){l=lR(1,0,c[h>>2]|0)|0;m=g;k=c[m+4>>2]|C;a=g;c[a>>2]=c[m>>2]|l;c[a+4>>2]=k}c[f>>2]=(c[f>>2]|0)+-1}m=g;C=c[m+4>>2]|0;i=j;return c[m>>2]|0}function aE(f,g,h,j){f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;O=i;i=i+208|0;l=O+172|0;m=O+168|0;n=O+164|0;o=O+160|0;p=O+196|0;P=O+156|0;A=O+152|0;q=O+148|0;z=O+144|0;B=O+140|0;k=O+136|0;N=O+40|0;L=O;I=O+194|0;H=O+192|0;K=O+190|0;M=O+36|0;J=O+188|0;G=O+32|0;F=O+186|0;E=O+184|0;C=O+28|0;x=O+24|0;r=O+182|0;D=O+180|0;w=O+178|0;u=O+20|0;y=O+16|0;s=O+12|0;t=O+8|0;v=O+176|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;b[p>>1]=j;c[P>>2]=c[c[m>>2]>>2];c[A>>2]=c[c[P>>2]>>2];c[q>>2]=c[c[A>>2]>>2];c[G>>2]=0;c[C>>2]=0;c[x>>2]=0;c[z>>2]=c[(c[m>>2]|0)+12>>2];if(a[(c[q>>2]|0)+65>>0]|0){c[l>>2]=7;P=c[l>>2]|0;i=O;return P|0}do if(!(c[(c[z>>2]|0)+36>>2]&32))if(d[(c[n>>2]|0)+36>>0]&8){c[k>>2]=63;break}else{c[k>>2]=447;break}else c[k>>2]=24;while(0);if((d[(c[o>>2]|0)+55>>0]|0)>>>2&1)c[k>>2]=c[k>>2]&-61;b[H>>1]=b[(c[z>>2]|0)+24>>1]|0;b[K>>1]=b[(c[z>>2]|0)+42>>1]|0;b[I>>1]=b[(c[z>>2]|0)+40>>1]|0;c[M>>2]=c[(c[z>>2]|0)+36>>2];h=c[z>>2]|0;g=c[h+4>>2]|0;P=L;c[P>>2]=c[h>>2];c[P+4>>2]=g;b[J>>1]=b[(c[z>>2]|0)+22>>1]|0;c[B>>2]=yD(N,c[(c[m>>2]|0)+4>>2]|0,c[(c[n>>2]|0)+44>>2]|0,e[H>>1]|0,c[k>>2]|0,c[o>>2]|0)|0;b[(c[z>>2]|0)+18>>1]=0;b[F>>1]=b[c[(c[o>>2]|0)+8>>2]>>1]|0;b[E>>1]=ND(b[F>>1]|0)|0;a:while(1){if(!((c[G>>2]|0)==0?(c[B>>2]|0)!=0:0))break;b[r>>1]=b[(c[B>>2]|0)+18>>1]|0;c[u>>2]=0;if((e[r>>1]|0)!=256?(e[(c[B>>2]|0)+20>>1]&0|0)==0:0)j=15;else j=14;if((j|0)==14?(j=0,(bE(c[o>>2]|0,e[H>>1]|0)|0)==0):0)j=15;do if((j|0)==15?(0,g=(c[B>>2]|0)+32|0,P=(c[z>>2]|0)+8|0,!((c[g>>2]&c[P>>2]|0)!=0?1:(c[g+4>>2]&c[P+4>>2]|0)!=0)):0){if((e[(c[B>>2]|0)+20>>1]&256|0)!=0?(e[(c[B>>2]|0)+18>>1]|0)==16:0)break;c[(c[z>>2]|0)+36>>2]=c[M>>2];b[(c[z>>2]|0)+24>>1]=b[H>>1]|0;b[(c[z>>2]|0)+40>>1]=b[I>>1]|0;if(GD(c[q>>2]|0,c[z>>2]|0,(e[(c[z>>2]|0)+40>>1]|0)+1|0)|0)break a;f=c[B>>2]|0;h=(c[z>>2]|0)+40|0;k=b[h>>1]|0;b[h>>1]=k+1<<16>>16;c[(c[(c[z>>2]|0)+48>>2]|0)+((k&65535)<<2)>>2]=f;k=L;f=(c[B>>2]|0)+32|0;h=(c[z>>2]|0)+8|0;g=(c[k+4>>2]|c[f+4>>2])&~c[h+4>>2];P=c[z>>2]|0;c[P>>2]=(c[k>>2]|c[f>>2])&~c[h>>2];c[P+4>>2]=g;do if(e[r>>1]&1){c[y>>2]=c[c[B>>2]>>2];P=(c[z>>2]|0)+36|0;c[P>>2]=c[P>>2]|4;if(c[(c[y>>2]|0)+4>>2]&2048){c[u>>2]=46;break}if((c[(c[y>>2]|0)+20>>2]|0)!=0?(c[c[(c[y>>2]|0)+20>>2]>>2]|0)!=0:0){P=c[c[(c[y>>2]|0)+20>>2]>>2]|0;c[u>>2]=(Hj(P,((P|0)<0)<<31>>31)|0)<<16>>16}}else{if(e[r>>1]&130){c[s>>2]=b[(c[(c[o>>2]|0)+4>>2]|0)+(e[H>>1]<<1)>>1];P=(c[z>>2]|0)+36|0;c[P>>2]=c[P>>2]|1;if((c[s>>2]|0)!=-1){if((c[s>>2]|0)<=0)break;if(b[p>>1]|0)break;if((e[H>>1]|0)!=((e[(c[o>>2]|0)+50>>1]|0)-1|0))break}if((c[s>>2]|0)>=0?((d[(c[o>>2]|0)+55>>0]|0)>>>3&1|0)==0:0){P=(c[z>>2]|0)+36|0;c[P>>2]=c[P>>2]|65536;break}P=(c[z>>2]|0)+36|0;c[P>>2]=c[P>>2]|4096;break}if(e[r>>1]&256){P=(c[z>>2]|0)+36|0;c[P>>2]=c[P>>2]|8;break}j=(c[z>>2]|0)+36|0;k=c[j>>2]|0;if(e[r>>1]&36){c[j>>2]=k|34;c[x>>2]=c[B>>2];c[C>>2]=0;if(!(e[(c[B>>2]|0)+20>>1]&256))break;c[C>>2]=(c[B>>2]|0)+48;if(GD(c[q>>2]|0,c[z>>2]|0,(e[(c[z>>2]|0)+40>>1]|0)+1|0)|0)break a;g=c[C>>2]|0;h=(c[z>>2]|0)+40|0;P=b[h>>1]|0;b[h>>1]=P+1<<16>>16;c[(c[(c[z>>2]|0)+48>>2]|0)+((P&65535)<<2)>>2]=g;P=(c[z>>2]|0)+36|0;c[P>>2]=c[P>>2]|16;break}else{c[j>>2]=k|18;c[C>>2]=c[B>>2];if(c[(c[z>>2]|0)+36>>2]&32)j=c[(c[(c[z>>2]|0)+48>>2]|0)+((e[(c[z>>2]|0)+40>>1]|0)-2<<2)>>2]|0;else j=0;c[x>>2]=j;break}}while(0);do if(!(c[(c[z>>2]|0)+36>>2]&2)){g=(c[z>>2]|0)+24|0;P=(b[g>>1]|0)+1<<16>>16;b[g>>1]=P;c[t>>2]=P&65535;if((b[(c[B>>2]|0)+16>>1]|0)<=0?(b[(c[(c[o>>2]|0)+4>>2]|0)+(e[H>>1]<<1)>>1]|0)>=0:0){P=(c[z>>2]|0)+22|0;b[P>>1]=(b[P>>1]|0)+(b[(c[B>>2]|0)+16>>1]|0);P=(c[z>>2]|0)+22|0;b[P>>1]=(b[P>>1]|0)-(c[u>>2]|0);break}P=(c[z>>2]|0)+22|0;b[P>>1]=(b[P>>1]|0)+((b[(c[(c[o>>2]|0)+8>>2]|0)+(c[t>>2]<<1)>>1]|0)-(b[(c[(c[o>>2]|0)+8>>2]|0)+((c[t>>2]|0)-1<<1)>>1]|0));if(e[r>>1]&256){P=(c[z>>2]|0)+22|0;b[P>>1]=(b[P>>1]|0)+10}}else cE(c[A>>2]|0,c[m>>2]|0,c[x>>2]|0,c[C>>2]|0,c[z>>2]|0)|0;while(0);b[D>>1]=(b[(c[z>>2]|0)+22>>1]|0)+1+(((b[(c[o>>2]|0)+48>>1]|0)*15|0)/(b[(c[(c[n>>2]|0)+16>>2]|0)+40>>1]|0)|0);P=KD(b[E>>1]|0,b[D>>1]|0)|0;b[(c[z>>2]|0)+20>>1]=P;if(!(c[(c[z>>2]|0)+36>>2]&320)){P=KD(b[(c[z>>2]|0)+20>>1]|0,(b[(c[z>>2]|0)+22>>1]|0)+16&65535)|0;b[(c[z>>2]|0)+20>>1]=P}b[w>>1]=b[(c[z>>2]|0)+22>>1]|0;P=(c[z>>2]|0)+20|0;b[P>>1]=(b[P>>1]|0)+((b[p>>1]|0)+(c[u>>2]|0));P=(c[z>>2]|0)+22|0;b[P>>1]=(b[P>>1]|0)+((b[p>>1]|0)+(c[u>>2]|0));_D(c[(c[m>>2]|0)+4>>2]|0,c[z>>2]|0,b[F>>1]|0);c[G>>2]=TD(c[m>>2]|0,c[z>>2]|0)|0;if(c[(c[z>>2]|0)+36>>2]&2)b[(c[z>>2]|0)+22>>1]=b[J>>1]|0;else b[(c[z>>2]|0)+22>>1]=b[w>>1]|0;if((c[(c[z>>2]|0)+36>>2]&16|0)==0?(e[(c[z>>2]|0)+24>>1]|0)<(e[(c[o>>2]|0)+52>>1]|0):0)aE(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,(b[p>>1]|0)+(c[u>>2]|0)&65535)|0;b[(c[z>>2]|0)+22>>1]=b[J>>1]|0}while(0);c[B>>2]=zD(N)|0}N=c[L+4>>2]|0;P=c[z>>2]|0;c[P>>2]=c[L>>2];c[P+4>>2]=N;b[(c[z>>2]|0)+24>>1]=b[H>>1]|0;b[(c[z>>2]|0)+42>>1]=b[K>>1]|0;c[(c[z>>2]|0)+36>>2]=c[M>>2];b[(c[z>>2]|0)+22>>1]=b[J>>1]|0;b[(c[z>>2]|0)+40>>1]=b[I>>1]|0;if(((((e[H>>1]|0)==(e[K>>1]|0)?((e[H>>1]|0)+1|0)<(e[(c[o>>2]|0)+50>>1]|0):0)?((d[(c[o>>2]|0)+55>>0]|0)>>>6&1|0)==0:0)?(b[(c[(c[o>>2]|0)+8>>2]|0)+((e[H>>1]|0)+1<<1)>>1]|0)>=42:0)?(P=GD(c[q>>2]|0,c[z>>2]|0,(e[(c[z>>2]|0)+40>>1]|0)+1|0)|0,c[G>>2]=P,(P|0)==0):0){N=(c[z>>2]|0)+24|0;b[N>>1]=(b[N>>1]|0)+1<<16>>16;N=(c[z>>2]|0)+42|0;b[N>>1]=(b[N>>1]|0)+1<<16>>16;N=(c[z>>2]|0)+40|0;P=b[N>>1]|0;b[N>>1]=P+1<<16>>16;c[(c[(c[z>>2]|0)+48>>2]|0)+((P&65535)<<2)>>2]=0;P=(c[z>>2]|0)+36|0;c[P>>2]=c[P>>2]|32768;b[v>>1]=(b[(c[(c[o>>2]|0)+8>>2]|0)+(e[H>>1]<<1)>>1]|0)-(b[(c[(c[o>>2]|0)+8>>2]|0)+((e[H>>1]|0)+1<<1)>>1]|0);P=(c[z>>2]|0)+22|0;b[P>>1]=(b[P>>1]|0)-(b[v>>1]|0);b[v>>1]=(b[v>>1]|0)+5;aE(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,(b[v>>1]|0)+(b[p>>1]|0)&65535)|0;b[(c[z>>2]|0)+22>>1]=b[J>>1]|0;b[(c[z>>2]|0)+24>>1]=b[H>>1]|0;b[(c[z>>2]|0)+42>>1]=b[K>>1]|0;c[(c[z>>2]|0)+36>>2]=c[M>>2]}c[l>>2]=c[G>>2];P=c[l>>2]|0;i=O;return P|0}function bE(a,e){a=a|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;f=h+12|0;g=h+8|0;k=h+4|0;j=h;c[g>>2]=a;c[k>>2]=e;c[j>>2]=b[(c[(c[g>>2]|0)+4>>2]|0)+(c[k>>2]<<1)>>1];e=c[j>>2]|0;if((c[j>>2]|0)>=0){c[f>>2]=d[(c[(c[(c[g>>2]|0)+12>>2]|0)+4>>2]|0)+(e*24|0)+20>>0];k=c[f>>2]|0;i=h;return k|0}if((e|0)==-1){c[f>>2]=1;k=c[f>>2]|0;i=h;return k|0}else{c[f>>2]=0;k=c[f>>2]|0;i=h;return k|0}return 0}function cE(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;h=o+16|0;j=o+12|0;k=o+8|0;n=o+4|0;m=o;l=o+28|0;c[o+24>>2]=a;c[o+20>>2]=d;c[h>>2]=e;c[j>>2]=f;c[k>>2]=g;c[n>>2]=0;c[m>>2]=b[(c[k>>2]|0)+22>>1];b[l>>1]=dE(c[h>>2]|0,c[m>>2]&65535)|0;b[l>>1]=dE(c[j>>2]|0,b[l>>1]|0)|0;if(((c[h>>2]|0)!=0?(c[j>>2]|0)!=0?(b[(c[h>>2]|0)+16>>1]|0)>0:0:0)?(b[(c[j>>2]|0)+16>>1]|0)>0:0)b[l>>1]=(b[l>>1]|0)-20;c[m>>2]=(c[m>>2]|0)-(((c[h>>2]|0)!=0&1)+((c[j>>2]|0)!=0&1));if((b[l>>1]|0)<10)b[l>>1]=10;if((b[l>>1]|0)>=(c[m>>2]|0)){a=c[m>>2]|0;a=a&65535;f=c[k>>2]|0;f=f+22|0;b[f>>1]=a;n=c[n>>2]|0;i=o;return n|0}c[m>>2]=b[l>>1];a=c[m>>2]|0;a=a&65535;f=c[k>>2]|0;f=f+22|0;b[f>>1]=a;n=c[n>>2]|0;i=o;return n|0}function dE(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0;h=i;i=i+16|0;f=h;j=h+6|0;g=h+4|0;c[f>>2]=a;b[j>>1]=d;b[g>>1]=b[j>>1]|0;do if(c[f>>2]|0){d=c[f>>2]|0;if((b[(c[f>>2]|0)+16>>1]|0)<=0){b[g>>1]=(b[g>>1]|0)+(b[d+16>>1]|0);break}if(!(e[d+20>>1]&0))b[g>>1]=(b[g>>1]|0)-20}while(0);i=h;return b[g>>1]|0}function eE(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[g>>2]=a;c[h>>2]=b;c[j>>2]=e;if(!(py(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0)|0)){c[f>>2]=1;b=c[f>>2]|0;i=k;return b|0}do if((d[c[h>>2]>>0]|0|0)==71){if((eE(c[g>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0)|0)==0?(eE(c[g>>2]|0,c[(c[h>>2]|0)+16>>2]|0,c[j>>2]|0)|0)==0:0)break;c[f>>2]=1;b=c[f>>2]|0;i=k;return b|0}while(0);if((((d[c[h>>2]>>0]|0|0)==77?(py(c[(c[g>>2]|0)+12>>2]|0,c[(c[h>>2]|0)+12>>2]|0,c[j>>2]|0)|0)==0:0)?(d[c[g>>2]>>0]|0|0)!=76:0)?(d[c[g>>2]>>0]|0|0)!=73:0){c[f>>2]=1;b=c[f>>2]|0;i=k;return b|0}c[f>>2]=0;b=c[f>>2]|0;i=k;return b|0}function fE(f,g,h,j,k,l){f=f|0;g=g|0;h=h|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;G=i;i=i+96|0;F=G+8|0;m=G+76|0;n=G+72|0;o=G+68|0;p=G;q=G+64|0;r=G+60|0;s=G+56|0;t=G+52|0;w=G+48|0;A=G+44|0;C=G+40|0;E=G+36|0;D=G+32|0;v=G+28|0;B=G+24|0;u=G+20|0;y=G+16|0;x=G+80|0;z=G+12|0;c[n>>2]=f;c[o>>2]=g;g=p;c[g>>2]=h;c[g+4>>2]=j;c[q>>2]=k;c[r>>2]=l;c[w>>2]=0;c[s>>2]=0;c[D>>2]=c[(c[o>>2]|0)+20>>2];while(1){if((c[s>>2]|0)>=(c[(c[o>>2]|0)+12>>2]|0))break;if((((c[(c[D>>2]|0)+8>>2]|0)==(c[(c[q>>2]|0)+44>>2]|0)?(k=(c[D>>2]|0)+32|0,g=p,!((c[k>>2]&c[g>>2]|0)!=0?1:(c[k+4>>2]&c[g+4>>2]|0)!=0)):0)?(e[(c[D>>2]|0)+18>>1]&-2433|0)!=0:0)?(e[(c[D>>2]|0)+20>>1]&0|0)==0:0)c[w>>2]=(c[w>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+1;c[D>>2]=(c[D>>2]|0)+48}c[v>>2]=0;if(c[r>>2]|0){c[u>>2]=c[c[r>>2]>>2];c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[u>>2]|0))break;c[y>>2]=c[(c[(c[r>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)>>2];if((d[c[y>>2]>>0]|0)!=152)break;if((c[(c[y>>2]|0)+28>>2]|0)!=(c[(c[q>>2]|0)+44>>2]|0))break;c[s>>2]=(c[s>>2]|0)+1}if((c[s>>2]|0)==(c[u>>2]|0))c[v>>2]=c[u>>2]}c[B>>2]=ph(c[c[n>>2]>>2]|0,72+((c[w>>2]|0)*20|0)+(c[v>>2]<<3)|0,0)|0;if(!(c[B>>2]|0)){Ah(c[n>>2]|0,32392,F);c[m>>2]=0;F=c[m>>2]|0;i=G;return F|0}c[A>>2]=(c[B>>2]|0)+72;c[C>>2]=(c[A>>2]|0)+((c[w>>2]|0)*12|0);c[E>>2]=(c[C>>2]|0)+(c[v>>2]<<3);c[c[B>>2]>>2]=c[w>>2];c[(c[B>>2]|0)+8>>2]=c[v>>2];c[(c[B>>2]|0)+4>>2]=c[A>>2];c[(c[B>>2]|0)+12>>2]=c[C>>2];c[(c[B>>2]|0)+16>>2]=c[E>>2];c[t>>2]=0;c[s>>2]=0;c[D>>2]=c[(c[o>>2]|0)+20>>2];while(1){if((c[s>>2]|0)>=(c[(c[o>>2]|0)+12>>2]|0))break;if((((c[(c[D>>2]|0)+8>>2]|0)==(c[(c[q>>2]|0)+44>>2]|0)?(g=(c[D>>2]|0)+32|0,F=p,!((c[g>>2]&c[F>>2]|0)!=0?1:(c[g+4>>2]&c[F+4>>2]|0)!=0)):0)?(e[(c[D>>2]|0)+18>>1]&-2433|0)!=0:0)?(e[(c[D>>2]|0)+20>>1]&0|0)==0:0){c[(c[A>>2]|0)+((c[t>>2]|0)*12|0)>>2]=c[(c[D>>2]|0)+12>>2];c[(c[A>>2]|0)+((c[t>>2]|0)*12|0)+8>>2]=c[s>>2];F=b[(c[D>>2]|0)+18>>1]&255;a[x>>0]=F;a[x>>0]=(d[x>>0]|0)==1?2:F;if((d[x>>0]|0)==64)a[x>>0]=a[(c[D>>2]|0)+23>>0]|0;a[(c[A>>2]|0)+((c[t>>2]|0)*12|0)+4>>0]=a[x>>0]|0;c[t>>2]=(c[t>>2]|0)+1}c[s>>2]=(c[s>>2]|0)+1;c[D>>2]=(c[D>>2]|0)+48}c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[v>>2]|0))break;c[z>>2]=c[(c[(c[r>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)>>2];c[(c[C>>2]|0)+(c[s>>2]<<3)>>2]=b[(c[z>>2]|0)+32>>1];a[(c[C>>2]|0)+(c[s>>2]<<3)+4>>0]=a[(c[(c[r>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)+12>>0]|0;c[s>>2]=(c[s>>2]|0)+1}c[m>>2]=c[B>>2];F=c[m>>2]|0;i=G;return F|0}function gE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;o=p+16|0;n=p+8|0;m=p;f=p+40|0;g=p+36|0;h=p+32|0;k=p+28|0;j=p+24|0;l=p+20|0;c[f>>2]=b;c[g>>2]=d;c[h>>2]=e;c[k>>2]=c[(Ax(c[c[f>>2]>>2]|0,c[g>>2]|0)|0)+8>>2];c[l>>2]=Yb[c[(c[c[k>>2]>>2]|0)+12>>2]&255](c[k>>2]|0,c[h>>2]|0)|0;do if(c[l>>2]|0){if((c[l>>2]|0)==7){jh(c[c[f>>2]>>2]|0);break}e=c[f>>2]|0;if(c[(c[k>>2]|0)+8>>2]|0){c[n>>2]=c[(c[k>>2]|0)+8>>2];Ah(e,19255,n);break}else{c[m>>2]=ih(c[l>>2]|0)|0;Ah(e,19255,m);break}}while(0);Kd(c[(c[k>>2]|0)+8>>2]|0);c[(c[k>>2]|0)+8>>2]=0;c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[c[h>>2]>>2]|0))break;if((a[(c[(c[h>>2]|0)+4>>2]|0)+((c[j>>2]|0)*12|0)+5>>0]|0)==0?(c[(c[(c[h>>2]|0)+16>>2]|0)+(c[j>>2]<<3)>>2]|0)>0:0){n=c[f>>2]|0;c[o>>2]=c[c[g>>2]>>2];Ah(n,35642,o)}c[j>>2]=(c[j>>2]|0)+1}i=p;return c[(c[f>>2]|0)+68>>2]|0}function hE(a){a=+a;var d=0,e=0,f=0,g=0,j=0;j=i;i=i+32|0;d=j+18|0;e=j+8|0;f=j;g=j+16|0;h[e>>3]=a;if(+h[e>>3]<=1.0){b[d>>1]=0;g=b[d>>1]|0;i=j;return g|0}if(+h[e>>3]<=2.0e9){a=+h[e>>3];b[d>>1]=Hj(~~a>>>0,+N(a)>=1.0?a>0.0?~~+$(+M(a/4294967296.0),4294967295.0)>>>0:~~+Z((a-+(~~a>>>0))/4294967296.0)>>>0:0)|0;g=b[d>>1]|0;i=j;return g|0}else{c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];f=hR(c[f>>2]|0,c[f+4>>2]|0,52)|0;f=fR(f|0,C|0,1022,0)|0;b[g>>1]=f;b[d>>1]=(b[g>>1]|0)*10;g=b[d>>1]|0;i=j;return g|0}return 0}function iE(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;r=t+36|0;j=t+32|0;k=t+28|0;l=t+24|0;m=t+20|0;n=t+16|0;s=t+12|0;q=t+8|0;o=t+4|0;p=t;c[j>>2]=a;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=c[(c[(c[m>>2]|0)+32>>2]|0)+(c[n>>2]<<2)>>2];c[s>>2]=0;while(1){if((c[s>>2]|0)>=(c[c[k>>2]>>2]|0)){j=10;break}c[o>>2]=Tx(c[(c[(c[k>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)>>2]|0)|0;if(((((d[c[o>>2]>>0]|0)==152?(b[(c[o>>2]|0)+32>>1]|0)==(b[(c[(c[m>>2]|0)+4>>2]|0)+(c[n>>2]<<1)>>1]|0):0)?(c[(c[o>>2]|0)+28>>2]|0)==(c[l>>2]|0):0)?(c[p>>2]=Ox(c[j>>2]|0,c[(c[(c[k>>2]|0)+4>>2]|0)+((c[s>>2]|0)*20|0)>>2]|0)|0,(c[p>>2]|0)!=0):0)?0==(Td(c[c[p>>2]>>2]|0,c[q>>2]|0)|0):0){j=8;break}c[s>>2]=(c[s>>2]|0)+1}if((j|0)==8){c[r>>2]=c[s>>2];s=c[r>>2]|0;i=t;return s|0}else if((j|0)==10){c[r>>2]=-1;s=c[r>>2]|0;i=t;return s|0}return 0}function jE(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,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;ga=i;i=i+224|0;l=ga+196|0;m=ga+192|0;n=ga+188|0;j=ga+184|0;$=ga+180|0;P=ga+176|0;K=ga+172|0;da=ga+40|0;aa=ga+32|0;t=ga+24|0;Z=ga+168|0;E=ga+164|0;F=ga+160|0;G=ga+156|0;W=ga+152|0;q=ga+148|0;s=ga+208|0;k=ga+16|0;x=ga+144|0;w=ga+140|0;L=ga+136|0;X=ga+132|0;H=ga+204|0;Q=ga+128|0;J=ga+124|0;r=ga+202|0;y=ga+120|0;O=ga+116|0;u=ga+112|0;R=ga+108|0;z=ga+104|0;M=ga+100|0;_=ga+96|0;S=ga+92|0;T=ga+88|0;A=ga+84|0;B=ga+80|0;fa=ga+76|0;ea=ga+200|0;v=ga+72|0;o=ga+207|0;p=ga+206|0;I=ga+68|0;D=ga+64|0;Y=ga+60|0;N=ga+56|0;V=ga+52|0;ba=ga+8|0;ca=ga;U=ga+48|0;c[l>>2]=f;c[m>>2]=g;c[n>>2]=h;c[j>>2]=c[c[m>>2]>>2];g=t;c[g>>2]=0;c[g+4>>2]=0;c[Z>>2]=0;c[E>>2]=0;c[F>>2]=0;c[W>>2]=c[c[j>>2]>>2];c[q>>2]=c[c[W>>2]>>2];if(a[(c[q>>2]|0)+65>>0]|0){i=ga;return}c[$>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[n>>2]|0)*48|0);c[P>>2]=(c[j>>2]|0)+68;c[K>>2]=c[c[$>>2]>>2];g=ID(c[P>>2]|0,c[(c[K>>2]|0)+12>>2]|0)|0;j=da;c[j>>2]=g;c[j+4>>2]=C;c[G>>2]=d[c[K>>2]>>0];do if((c[G>>2]|0)==75){h=c[P>>2]|0;f=(c[K>>2]|0)+20|0;if(c[(c[K>>2]|0)+4>>2]&2048){g=JD(h,c[f>>2]|0)|0;j=(c[$>>2]|0)+32|0;c[j>>2]=g;c[j+4>>2]=C;break}else{g=jD(h,c[f>>2]|0)|0;j=(c[$>>2]|0)+32|0;c[j>>2]=g;c[j+4>>2]=C;break}}else if((c[G>>2]|0)==76){j=(c[$>>2]|0)+32|0;c[j>>2]=0;c[j+4>>2]=0;break}else{g=ID(c[P>>2]|0,c[(c[K>>2]|0)+16>>2]|0)|0;j=(c[$>>2]|0)+32|0;c[j>>2]=g;c[j+4>>2]=C;break}while(0);g=ID(c[P>>2]|0,c[K>>2]|0)|0;j=aa;c[j>>2]=g;c[j+4>>2]=C;if(c[(c[K>>2]|0)+4>>2]&1){h=nD(c[P>>2]|0,b[(c[K>>2]|0)+36>>1]|0)|0;f=k;c[f>>2]=h;c[f+4>>2]=C;f=k;h=aa;g=c[h+4>>2]|c[f+4>>2];j=aa;c[j>>2]=c[h>>2]|c[f>>2];c[j+4>>2]=g;j=k;j=fR(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=t;c[k>>2]=j;c[k+4>>2]=C}j=aa;h=c[j+4>>2]|0;k=(c[$>>2]|0)+40|0;c[k>>2]=c[j>>2];c[k+4>>2]=h;c[(c[$>>2]|0)+8>>2]=-1;c[(c[$>>2]|0)+4>>2]=-1;b[(c[$>>2]|0)+18>>1]=0;k=(kE(c[G>>2]|0)|0)!=0;h=c[K>>2]|0;a:do if(k){c[L>>2]=Tx(c[h+12>>2]|0)|0;c[X>>2]=Tx(c[(c[K>>2]|0)+16>>2]|0)|0;O=(c[$>>2]|0)+32|0;R=da;b[H>>1]=((c[O>>2]&c[R>>2]|0)==0?(c[O+4>>2]&c[R+4>>2]|0)==0:0)?8191:2048;R=da;if(lE(c[l>>2]|0,c[R>>2]|0,c[R+4>>2]|0,c[L>>2]|0,x,w)|0){c[(c[$>>2]|0)+8>>2]=c[x>>2];c[(c[$>>2]|0)+12>>2]=c[w>>2];R=(mE(c[G>>2]|0)|0)&65535;b[(c[$>>2]|0)+18>>1]=R&e[H>>1]}if((c[G>>2]|0)==73){R=(c[$>>2]|0)+20|0;b[R>>1]=e[R>>1]|2048}if((c[X>>2]|0)!=0?(R=(c[$>>2]|0)+32|0,(lE(c[l>>2]|0,c[R>>2]|0,c[R+4>>2]|0,c[X>>2]|0,x,w)|0)!=0):0){b[r>>1]=0;if((c[(c[$>>2]|0)+8>>2]|0)>=0){c[J>>2]=ny(c[q>>2]|0,c[K>>2]|0,0)|0;if(a[(c[q>>2]|0)+65>>0]|0){Zu(c[q>>2]|0,c[J>>2]|0);i=ga;return}c[y>>2]=nE(c[m>>2]|0,c[J>>2]|0,3)|0;if(!(c[y>>2]|0)){i=ga;return}c[Q>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[y>>2]|0)*48|0);oE(c[m>>2]|0,c[y>>2]|0,c[n>>2]|0);if((c[G>>2]|0)==73){X=(c[Q>>2]|0)+20|0;b[X>>1]=e[X>>1]|2048}c[$>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[n>>2]|0)*48|0);X=(c[$>>2]|0)+20|0;b[X>>1]=e[X>>1]|8;if(pE(c[W>>2]|0,c[J>>2]|0)|0){X=(c[$>>2]|0)+18|0;b[X>>1]=e[X>>1]|2048;b[r>>1]=2048}}else{c[J>>2]=c[K>>2];c[Q>>2]=c[$>>2]}qE(c[W>>2]|0,c[J>>2]|0);c[(c[Q>>2]|0)+8>>2]=c[x>>2];c[(c[Q>>2]|0)+12>>2]=c[w>>2];O=da;R=t;da=c[O+4>>2]|c[R+4>>2];X=(c[Q>>2]|0)+32|0;c[X>>2]=c[O>>2]|c[R>>2];c[X+4>>2]=da;X=aa;aa=c[X+4>>2]|0;da=(c[Q>>2]|0)+40|0;c[da>>2]=c[X>>2];c[da+4>>2]=aa;da=(mE(d[c[J>>2]>>0]|0)|0)&65535;b[(c[Q>>2]|0)+18>>1]=da+(e[r>>1]|0)&e[H>>1]}}else{if((d[h>>0]|0)==74?(d[(c[m>>2]|0)+8>>0]|0)==72:0){c[O>>2]=c[(c[K>>2]|0)+20>>2];c[u>>2]=0;while(1){if((c[u>>2]|0)>=2)break a;X=c[W>>2]|0;aa=d[35688+(c[u>>2]|0)>>0]|0;da=ny(c[q>>2]|0,c[(c[K>>2]|0)+12>>2]|0,0)|0;c[R>>2]=rv(X,aa,da,ny(c[q>>2]|0,c[(c[(c[O>>2]|0)+4>>2]|0)+((c[u>>2]|0)*20|0)>>2]|0,0)|0,0)|0;rE(c[R>>2]|0,c[K>>2]|0);c[z>>2]=nE(c[m>>2]|0,c[R>>2]|0,3)|0;jE(c[l>>2]|0,c[m>>2]|0,c[z>>2]|0);c[$>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[n>>2]|0)*48|0);oE(c[m>>2]|0,c[z>>2]|0,c[n>>2]|0);c[u>>2]=(c[u>>2]|0)+1}}if((d[c[K>>2]>>0]|0)==71){sE(c[l>>2]|0,c[m>>2]|0,c[n>>2]|0);c[$>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[n>>2]|0)*48|0)}}while(0);if((d[(c[m>>2]|0)+8>>0]|0)==72?(tE(c[W>>2]|0,c[K>>2]|0,Z,E,F)|0)!=0:0){b[ea>>1]=259;c[M>>2]=c[(c[(c[(c[K>>2]|0)+20>>2]|0)+4>>2]|0)+20>>2];c[_>>2]=ny(c[q>>2]|0,c[Z>>2]|0,0)|0;b:do if((c[F>>2]|0)!=0?(a[(c[c[W>>2]>>2]|0)+65>>0]|0)==0:0){ea=(c[$>>2]|0)+20|0;b[ea>>1]=e[ea>>1]|1024;c[v>>2]=0;while(1){ea=a[(c[(c[Z>>2]|0)+8>>2]|0)+(c[v>>2]|0)>>0]|0;a[o>>0]=ea;if(!(ea<<24>>24))break b;a[(c[(c[Z>>2]|0)+8>>2]|0)+(c[v>>2]|0)>>0]=a[o>>0]&~(d[19267+(d[o>>0]|0)>>0]&32);a[(c[(c[_>>2]|0)+8>>2]|0)+(c[v>>2]|0)>>0]=a[18477+(d[o>>0]|0)>>0]|0;c[v>>2]=(c[v>>2]|0)+1}}while(0);if(!(a[(c[q>>2]|0)+65>>0]|0)){ea=(If(c[(c[_>>2]|0)+8>>2]|0)|0)-1|0;c[I>>2]=(c[(c[_>>2]|0)+8>>2]|0)+ea;a[p>>0]=a[c[I>>2]>>0]|0;if(c[F>>2]|0){if((d[p>>0]|0)==64)c[E>>2]=0;a[p>>0]=a[18477+(d[p>>0]|0)>>0]|0}a[c[I>>2]>>0]=(d[p>>0]|0)+1}c[fa>>2]=(c[F>>2]|0)!=0?21290:35690;c[S>>2]=ny(c[q>>2]|0,c[M>>2]|0,0)|0;da=c[W>>2]|0;ea=By(c[W>>2]|0,c[S>>2]|0,c[fa>>2]|0)|0;c[S>>2]=rv(da,83,ea,c[Z>>2]|0,0)|0;rE(c[S>>2]|0,c[K>>2]|0);c[A>>2]=nE(c[m>>2]|0,c[S>>2]|0,259)|0;jE(c[l>>2]|0,c[m>>2]|0,c[A>>2]|0);c[T>>2]=ny(c[q>>2]|0,c[M>>2]|0,0)|0;ea=c[W>>2]|0;fa=By(c[W>>2]|0,c[T>>2]|0,c[fa>>2]|0)|0;c[T>>2]=rv(ea,82,fa,c[_>>2]|0,0)|0;rE(c[T>>2]|0,c[K>>2]|0);c[B>>2]=nE(c[m>>2]|0,c[T>>2]|0,259)|0;jE(c[l>>2]|0,c[m>>2]|0,c[B>>2]|0);c[$>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[n>>2]|0)*48|0);if(c[E>>2]|0){oE(c[m>>2]|0,c[A>>2]|0,c[n>>2]|0);oE(c[m>>2]|0,c[B>>2]|0,c[n>>2]|0)}}if((uE(c[K>>2]|0,s)|0)!=0?(c[Y>>2]=c[c[(c[(c[K>>2]|0)+20>>2]|0)+4>>2]>>2],c[N>>2]=c[(c[(c[(c[K>>2]|0)+20>>2]|0)+4>>2]|0)+20>>2],ea=ID(c[P>>2]|0,c[Y>>2]|0)|0,fa=ca,c[fa>>2]=ea,c[fa+4>>2]=C,fa=ID(c[P>>2]|0,c[N>>2]|0)|0,ea=ba,c[ea>>2]=fa,c[ea+4>>2]=C,ea=ca,fa=ba,(c[ea>>2]&c[fa>>2]|0)==0?(c[ea+4>>2]&c[fa+4>>2]|0)==0:0):0){fa=c[W>>2]|0;c[U>>2]=rv(fa,51,0,ny(c[q>>2]|0,c[Y>>2]|0,0)|0,0)|0;c[D>>2]=nE(c[m>>2]|0,c[U>>2]|0,3)|0;c[V>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[D>>2]|0)*48|0);fa=ca;ea=c[fa+4>>2]|0;da=(c[V>>2]|0)+32|0;c[da>>2]=c[fa>>2];c[da+4>>2]=ea;c[(c[V>>2]|0)+8>>2]=c[(c[N>>2]|0)+28>>2];c[(c[V>>2]|0)+12>>2]=b[(c[N>>2]|0)+32>>1];b[(c[V>>2]|0)+18>>1]=64;a[(c[V>>2]|0)+23>>0]=a[s>>0]|0;oE(c[m>>2]|0,c[D>>2]|0,c[n>>2]|0);c[$>>2]=(c[(c[m>>2]|0)+20>>2]|0)+((c[n>>2]|0)*48|0);da=(c[$>>2]|0)+20|0;b[da>>1]=e[da>>1]|8;da=(c[$>>2]|0)+40|0;ea=c[da+4>>2]|0;fa=(c[V>>2]|0)+40|0;c[fa>>2]=c[da>>2];c[fa+4>>2]=ea}da=t;fa=(c[$>>2]|0)+32|0;ca=fa;ea=c[ca+4>>2]|c[da+4>>2];c[fa>>2]=c[ca>>2]|c[da>>2];c[fa+4>>2]=ea;i=ga;return}function kE(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;c[b>>2]=a;if((c[b>>2]|0)!=75?!((c[b>>2]|0)>=79&(c[b>>2]|0)<=83|(c[b>>2]|0)==76):0)b=(c[b>>2]|0)==73;else b=1;i=d;return b&1|0}function lE(a,f,g,h,j,k){a=a|0;f=f|0;g=g|0;h=h|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;u=i;i=i+48|0;q=u+36|0;l=u+32|0;m=u;n=u+28|0;r=u+24|0;s=u+20|0;p=u+16|0;o=u+12|0;t=u+8|0;c[l>>2]=a;a=m;c[a>>2]=f;c[a+4>>2]=g;c[n>>2]=h;c[r>>2]=j;c[s>>2]=k;if((d[c[n>>2]>>0]|0)==152){c[c[r>>2]>>2]=c[(c[n>>2]|0)+28>>2];c[c[s>>2]>>2]=b[(c[n>>2]|0)+32>>1];c[q>>2]=1;t=c[q>>2]|0;i=u;return t|0}j=m;if((c[j>>2]|0)==0&(c[j+4>>2]|0)==0){c[q>>2]=0;t=c[q>>2]|0;i=u;return t|0}j=m;a=c[j>>2]|0;j=c[j+4>>2]|0;k=m;k=fR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;if((a&k|0)!=0|(j&C|0)!=0){c[q>>2]=0;t=c[q>>2]|0;i=u;return t|0}c[o>>2]=0;while(1){j=m;k=c[j+4>>2]|0;f=c[o>>2]|0;if(!(k>>>0>0|(k|0)==0&(c[j>>2]|0)>>>0>1))break;c[o>>2]=f+1;k=m;k=hR(c[k>>2]|0,c[k+4>>2]|0,1)|0;j=m;c[j>>2]=k;c[j+4>>2]=C}c[t>>2]=c[(c[l>>2]|0)+8+(f*72|0)+44>>2];c[p>>2]=c[(c[(c[l>>2]|0)+8+((c[o>>2]|0)*72|0)+16>>2]|0)+8>>2];a:while(1){if(!(c[p>>2]|0)){f=20;break}b:do if(c[(c[p>>2]|0)+40>>2]|0){c[o>>2]=0;while(1){if((c[o>>2]|0)>=(e[(c[p>>2]|0)+50>>1]|0))break b;if((b[(c[(c[p>>2]|0)+4>>2]|0)+(c[o>>2]<<1)>>1]|0)==-2?(py(c[n>>2]|0,c[(c[(c[(c[p>>2]|0)+40>>2]|0)+4>>2]|0)+((c[o>>2]|0)*20|0)>>2]|0,c[t>>2]|0)|0)==0:0){f=17;break a}c[o>>2]=(c[o>>2]|0)+1}}while(0);c[p>>2]=c[(c[p>>2]|0)+20>>2]}if((f|0)==17){c[c[r>>2]>>2]=c[t>>2];c[c[s>>2]>>2]=-2;c[q>>2]=1;t=c[q>>2]|0;i=u;return t|0}else if((f|0)==20){c[q>>2]=0;t=c[q>>2]|0;i=u;return t|0}return 0}function mE(a){a=a|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f;e=f+4|0;c[d>>2]=a;do if((c[d>>2]|0)!=75){if((c[d>>2]|0)==76){b[e>>1]=256;break}if((c[d>>2]|0)==73){b[e>>1]=128;break}else{b[e>>1]=2<<(c[d>>2]|0)-79;break}}else b[e>>1]=1;while(0);i=f;return b[e>>1]|0}function nE(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;g=p+24|0;h=p+20|0;j=p+16|0;k=p+28|0;o=p+12|0;m=p+8|0;n=p+4|0;l=p;c[h>>2]=a;c[j>>2]=d;b[k>>1]=f;do if((c[(c[h>>2]|0)+12>>2]|0)>=(c[(c[h>>2]|0)+16>>2]|0)){c[n>>2]=c[(c[h>>2]|0)+20>>2];c[l>>2]=c[c[c[c[h>>2]>>2]>>2]>>2];f=Fw(c[l>>2]|0,(c[(c[h>>2]|0)+16>>2]|0)*48<<1,0)|0;c[(c[h>>2]|0)+20>>2]=f;if(c[(c[h>>2]|0)+20>>2]|0){iR(c[(c[h>>2]|0)+20>>2]|0,c[n>>2]|0,(c[(c[h>>2]|0)+12>>2]|0)*48|0)|0;if((c[n>>2]|0)!=((c[h>>2]|0)+24|0))Sf(c[l>>2]|0,c[n>>2]|0);f=(($t(c[l>>2]|0,c[(c[h>>2]|0)+20>>2]|0)|0)>>>0)/48|0;c[(c[h>>2]|0)+16>>2]=f;kR((c[(c[h>>2]|0)+20>>2]|0)+((c[(c[h>>2]|0)+12>>2]|0)*48|0)|0,0,((c[(c[h>>2]|0)+16>>2]|0)-(c[(c[h>>2]|0)+12>>2]|0)|0)*48|0)|0; +break}if((e[k>>1]|0)&1)Zu(c[l>>2]|0,c[j>>2]|0);c[(c[h>>2]|0)+20>>2]=c[n>>2];c[g>>2]=0;f=c[g>>2]|0;i=p;return f|0}while(0);a=(c[h>>2]|0)+12|0;f=c[a>>2]|0;c[a>>2]=f+1;c[m>>2]=f;c[o>>2]=(c[(c[h>>2]|0)+20>>2]|0)+(f*48|0);if((c[j>>2]|0)!=0?(c[(c[j>>2]|0)+4>>2]&262144|0)!=0:0){f=c[(c[j>>2]|0)+28>>2]|0;f=((Hj(f,((f|0)<0)<<31>>31)|0)<<16>>16)-270&65535;b[(c[o>>2]|0)+16>>1]=f}else b[(c[o>>2]|0)+16>>1]=1;f=Tx(c[j>>2]|0)|0;c[c[o>>2]>>2]=f;b[(c[o>>2]|0)+20>>1]=b[k>>1]|0;c[(c[o>>2]|0)+24>>2]=c[h>>2];c[(c[o>>2]|0)+4>>2]=-1;c[g>>2]=c[m>>2];f=c[g>>2]|0;i=p;return f|0}function oE(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;g=i;i=i+16|0;j=g+8|0;k=g+4|0;h=g;c[j>>2]=d;c[k>>2]=e;c[h>>2]=f;c[(c[(c[j>>2]|0)+20>>2]|0)+((c[k>>2]|0)*48|0)+4>>2]=c[h>>2];b[(c[(c[j>>2]|0)+20>>2]|0)+((c[k>>2]|0)*48|0)+16>>1]=b[(c[(c[j>>2]|0)+20>>2]|0)+((c[h>>2]|0)*48|0)+16>>1]|0;d=(c[(c[j>>2]|0)+20>>2]|0)+((c[h>>2]|0)*48|0)+22|0;a[d>>0]=(a[d>>0]|0)+1<<24>>24;i=g;return}function pE(b,f){b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;m=p+20|0;j=p+16|0;k=p+12|0;g=p+25|0;h=p+24|0;l=p+8|0;n=p+4|0;o=p;c[j>>2]=b;c[k>>2]=f;if(e[(c[c[j>>2]>>2]|0)+60>>1]&512){c[m>>2]=0;o=c[m>>2]|0;i=p;return o|0}if((d[c[k>>2]>>0]|0)!=79?(d[c[k>>2]>>0]|0)!=73:0){c[m>>2]=0;o=c[m>>2]|0;i=p;return o|0}if(c[(c[k>>2]|0)+4>>2]&1){c[m>>2]=0;o=c[m>>2]|0;i=p;return o|0}a[g>>0]=Nx(c[(c[k>>2]|0)+12>>2]|0)|0;a[h>>0]=Nx(c[(c[k>>2]|0)+16>>2]|0)|0;do if((a[g>>0]|0)!=(a[h>>0]|0)){if((a[g>>0]|0)>=67?(a[h>>0]|0)>=67:0)break;c[m>>2]=0;o=c[m>>2]|0;i=p;return o|0}while(0);c[l>>2]=VA(c[j>>2]|0,c[(c[k>>2]|0)+12>>2]|0,c[(c[k>>2]|0)+16>>2]|0)|0;if((c[l>>2]|0)!=0?(Td(c[c[l>>2]>>2]|0,35690)|0)!=0:0){c[l>>2]=Ox(c[j>>2]|0,c[(c[k>>2]|0)+12>>2]|0)|0;if(c[l>>2]|0)g=c[c[l>>2]>>2]|0;else g=0;c[n>>2]=g;c[l>>2]=Ox(c[j>>2]|0,c[(c[k>>2]|0)+16>>2]|0)|0;if(c[l>>2]|0)g=c[c[l>>2]>>2]|0;else g=0;c[o>>2]=g;c[m>>2]=(Td(c[n>>2]|0,c[o>>2]|0)|0)==0&1;o=c[m>>2]|0;i=p;return o|0}c[m>>2]=1;o=c[m>>2]|0;i=p;return o|0}function qE(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+16|0;h=m+8|0;j=m+4|0;k=m+14|0;n=m+12|0;l=m;c[h>>2]=f;c[j>>2]=g;b[k>>1]=c[(c[(c[j>>2]|0)+16>>2]|0)+4>>2]&256;b[n>>1]=c[(c[(c[j>>2]|0)+12>>2]|0)+4>>2]&256;do if((e[k>>1]|0)==(e[n>>1]|0)){if(b[k>>1]|0){n=(c[(c[j>>2]|0)+16>>2]|0)+4|0;c[n>>2]=c[n>>2]&-257;break}if(Ox(c[h>>2]|0,c[(c[j>>2]|0)+12>>2]|0)|0){n=(c[(c[j>>2]|0)+12>>2]|0)+4|0;c[n>>2]=c[n>>2]|256}}while(0);c[l>>2]=c[(c[j>>2]|0)+16>>2];c[(c[j>>2]|0)+16>>2]=c[(c[j>>2]|0)+12>>2];c[(c[j>>2]|0)+12>>2]=c[l>>2];if((d[c[j>>2]>>0]|0)<80){i=m;return}a[c[j>>2]>>0]=((d[c[j>>2]>>0]|0)-80^2)+80;i=m;return}function rE(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=a;c[f>>2]=d;if(!(c[e>>2]|0)){i=g;return}a=(c[e>>2]|0)+4|0;c[a>>2]=c[a>>2]|c[(c[f>>2]|0)+4>>2]&1;b[(c[e>>2]|0)+36>>1]=b[(c[f>>2]|0)+36>>1]|0;i=g;return}function sE(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,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;V=i;i=i+160|0;w=V+156|0;x=V+152|0;y=V+148|0;T=V+144|0;R=V+140|0;D=V+136|0;S=V+132|0;L=V+128|0;E=V+124|0;Q=V+120|0;P=V+116|0;t=V+112|0;B=V+24|0;n=V+16|0;p=V+108|0;r=V+104|0;q=V+100|0;o=V+96|0;j=V+8|0;k=V;u=V+92|0;l=V+88|0;s=V+84|0;m=V+80|0;v=V+76|0;J=V+72|0;F=V+68|0;G=V+64|0;I=V+60|0;z=V+56|0;A=V+52|0;K=V+48|0;N=V+44|0;M=V+40|0;O=V+36|0;H=V+32|0;c[w>>2]=f;c[x>>2]=g;c[y>>2]=h;c[T>>2]=c[c[x>>2]>>2];c[R>>2]=c[c[T>>2]>>2];c[D>>2]=c[c[R>>2]>>2];c[S>>2]=(c[(c[x>>2]|0)+20>>2]|0)+((c[y>>2]|0)*48|0);c[L>>2]=c[c[S>>2]>>2];g=ph(c[D>>2]|0,416,0)|0;c[t>>2]=g;c[(c[S>>2]|0)+12>>2]=g;if(!(c[t>>2]|0)){i=V;return}g=(c[S>>2]|0)+20|0;b[g>>1]=e[g>>1]|16;c[Q>>2]=c[t>>2];aD(c[Q>>2]|0,c[T>>2]|0);bD(c[Q>>2]|0,c[L>>2]|0,71);eD(c[w>>2]|0,c[Q>>2]|0);if(a[(c[D>>2]|0)+65>>0]|0){i=V;return}g=n;c[g>>2]=-1;c[g+4>>2]=-1;g=B;c[g>>2]=-1;c[g+4>>2]=-1;c[E>>2]=(c[(c[Q>>2]|0)+12>>2]|0)-1;c[P>>2]=c[(c[Q>>2]|0)+20>>2];while(1){g=n;if(!((c[E>>2]|0)>=0?(c[g>>2]|0)!=0|(c[g+4>>2]|0)!=0:0))break;do if(!(e[(c[P>>2]|0)+18>>1]&511)){g=B;c[g>>2]=0;c[g+4>>2]=0;c[p>>2]=Fw(c[D>>2]|0,408,0)|0;if(c[p>>2]|0){g=j;c[g>>2]=0;c[g+4>>2]=0;c[(c[P>>2]|0)+12>>2]=c[p>>2];g=(c[P>>2]|0)+20|0;b[g>>1]=e[g>>1]|32;b[(c[P>>2]|0)+18>>1]=1024;c[r>>2]=c[p>>2];aD(c[r>>2]|0,c[c[x>>2]>>2]|0);bD(c[r>>2]|0,c[c[P>>2]>>2]|0,72);eD(c[w>>2]|0,c[r>>2]|0);c[(c[r>>2]|0)+4>>2]=c[x>>2];a:do if(!(a[(c[D>>2]|0)+65>>0]|0)){c[o>>2]=0;c[q>>2]=c[(c[r>>2]|0)+20>>2];while(1){if((c[o>>2]|0)>=(c[(c[r>>2]|0)+12>>2]|0))break a;if(kE(d[c[c[q>>2]>>2]>>0]|0)|0){h=nD((c[T>>2]|0)+68|0,c[(c[q>>2]|0)+8>>2]|0)|0;W=j;f=c[W+4>>2]|C;g=j;c[g>>2]=c[W>>2]|h;c[g+4>>2]=f}c[o>>2]=(c[o>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+48}}while(0);f=j;h=n;g=c[h+4>>2]&c[f+4>>2];W=n;c[W>>2]=c[h>>2]&c[f>>2];c[W+4>>2]=g}}else if(!(e[(c[P>>2]|0)+20>>1]&8)){g=nD((c[T>>2]|0)+68|0,c[(c[P>>2]|0)+8>>2]|0)|0;W=k;c[W>>2]=g;c[W+4>>2]=C;if(e[(c[P>>2]|0)+20>>1]&2){c[u>>2]=(c[(c[Q>>2]|0)+20>>2]|0)+((c[(c[P>>2]|0)+4>>2]|0)*48|0);f=nD((c[T>>2]|0)+68|0,c[(c[u>>2]|0)+8>>2]|0)|0;h=k;g=c[h+4>>2]|C;W=k;c[W>>2]=c[h>>2]|f;c[W+4>>2]=g}f=k;h=n;g=c[h+4>>2]&c[f+4>>2];W=n;c[W>>2]=c[h>>2]&c[f>>2];c[W+4>>2]=g;if(!(e[(c[P>>2]|0)+18>>1]&2)){W=B;c[W>>2]=0;c[W+4>>2]=0;break}else{f=k;h=B;g=c[h+4>>2]&c[f+4>>2];W=B;c[W>>2]=c[h>>2]&c[f>>2];c[W+4>>2]=g;break}}while(0);c[E>>2]=(c[E>>2]|0)+-1;c[P>>2]=(c[P>>2]|0)+48}f=n;g=c[f+4>>2]|0;W=(c[t>>2]|0)+408|0;c[W>>2]=c[f>>2];c[W+4>>2]=g;W=n;b[(c[S>>2]|0)+18>>1]=(c[W>>2]|0)==0&(c[W+4>>2]|0)==0?0:512;W=n;b:do if((c[W>>2]|0)!=0|(c[W+4>>2]|0)!=0?(c[(c[Q>>2]|0)+12>>2]|0)==2:0){c[l>>2]=0;c:while(1){g=c[(c[Q>>2]|0)+20>>2]|0;W=c[l>>2]|0;c[l>>2]=W+1;W=zE(g,W)|0;c[s>>2]=W;if(!W)break b;c[m>>2]=0;while(1){g=(c[(c[Q>>2]|0)+20>>2]|0)+48|0;W=c[m>>2]|0;c[m>>2]=W+1;W=zE(g,W)|0;c[v>>2]=W;if(!W)continue c;AE(c[w>>2]|0,c[x>>2]|0,c[s>>2]|0,c[v>>2]|0)}}}while(0);W=B;if(!((c[W>>2]|0)!=0|(c[W+4>>2]|0)!=0)){i=V;return}c[J>>2]=0;c[F>>2]=-1;c[G>>2]=-1;c[I>>2]=0;c[I>>2]=0;while(1){if((c[I>>2]|0)>=2)break;if(!((c[J>>2]|0)!=0^1))break;c[P>>2]=c[(c[Q>>2]|0)+20>>2];c[E>>2]=(c[(c[Q>>2]|0)+12>>2]|0)-1;while(1){if((c[E>>2]|0)<0)break;W=(c[P>>2]|0)+20|0;b[W>>1]=e[W>>1]&-65;if((c[(c[P>>2]|0)+8>>2]|0)!=(c[G>>2]|0)?(W=B,v=c[W>>2]|0,W=c[W+4>>2]|0,g=nD((c[T>>2]|0)+68|0,c[(c[P>>2]|0)+8>>2]|0)|0,!((v&g|0)==0&(W&C|0)==0)):0){U=36;break}c[E>>2]=(c[E>>2]|0)+-1;c[P>>2]=(c[P>>2]|0)+48}if((U|0)==36){U=0;c[F>>2]=c[(c[P>>2]|0)+12>>2];c[G>>2]=c[(c[P>>2]|0)+8>>2]}if((c[E>>2]|0)<0)break;c[J>>2]=1;while(1){if(!((c[E>>2]|0)>=0?(c[J>>2]|0)!=0:0))break;j=c[P>>2]|0;do if((c[(c[P>>2]|0)+8>>2]|0)!=(c[G>>2]|0)){W=j+20|0;b[W>>1]=e[W>>1]&-65}else{if((c[j+12>>2]|0)!=(c[F>>2]|0)){c[J>>2]=0;break}c[A>>2]=(Nx(c[(c[c[P>>2]>>2]|0)+16>>2]|0)|0)<<24>>24;c[z>>2]=(Nx(c[(c[c[P>>2]>>2]|0)+12>>2]|0)|0)<<24>>24;if((c[A>>2]|0)!=0?(c[A>>2]|0)!=(c[z>>2]|0):0){c[J>>2]=0;break}W=(c[P>>2]|0)+20|0;b[W>>1]=e[W>>1]|64}while(0);c[E>>2]=(c[E>>2]|0)+-1;c[P>>2]=(c[P>>2]|0)+48}c[I>>2]=(c[I>>2]|0)+1}if(!(c[J>>2]|0)){i=V;return}c[N>>2]=0;c[M>>2]=0;c[E>>2]=(c[(c[Q>>2]|0)+12>>2]|0)-1;c[P>>2]=c[(c[Q>>2]|0)+20>>2];while(1){if((c[E>>2]|0)<0)break;if(e[(c[P>>2]|0)+20>>1]&64){c[K>>2]=ny(c[D>>2]|0,c[(c[c[P>>2]>>2]|0)+16>>2]|0,0)|0;c[N>>2]=Gv(c[c[T>>2]>>2]|0,c[N>>2]|0,c[K>>2]|0)|0;c[M>>2]=c[(c[c[P>>2]>>2]|0)+12>>2]}c[E>>2]=(c[E>>2]|0)+-1;c[P>>2]=(c[P>>2]|0)+48}c[K>>2]=ny(c[D>>2]|0,c[M>>2]|0,0)|0;c[O>>2]=rv(c[R>>2]|0,75,c[K>>2]|0,0,0)|0;if(c[O>>2]|0){rE(c[O>>2]|0,c[L>>2]|0);c[(c[O>>2]|0)+20>>2]=c[N>>2];c[H>>2]=nE(c[x>>2]|0,c[O>>2]|0,3)|0;jE(c[w>>2]|0,c[x>>2]|0,c[H>>2]|0);c[S>>2]=(c[(c[x>>2]|0)+20>>2]|0)+((c[y>>2]|0)*48|0);oE(c[x>>2]|0,c[H>>2]|0,c[y>>2]|0)}else Vu(c[D>>2]|0,c[N>>2]|0);b[(c[S>>2]|0)+18>>1]=4096;i=V;return}function KH(f){f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=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,Pb=0,Qb=0,Sb=0,Vb=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,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=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,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.0,Af=0;xf=i;i=i+1824|0;Qe=xf+496|0;Pe=xf+488|0;Oe=xf+480|0;Ne=xf+472|0;Me=xf+456|0;Le=xf+448|0;Ke=xf+440|0;Je=xf+432|0;Ie=xf+424|0;He=xf+416|0;Ge=xf+400|0;Fe=xf+392|0;Ee=xf+384|0;De=xf+376|0;Ce=xf+368|0;Be=xf+360|0;Ae=xf+352|0;uf=xf+336|0;tf=xf+328|0;sf=xf+320|0;ze=xf+312|0;lf=xf+1612|0;n=xf+1608|0;pf=xf+1604|0;rf=xf+1600|0;mf=xf+1596|0;fe=xf+1819|0;H=xf+1818|0;fa=xf+1592|0;of=xf+1588|0;db=xf+1584|0;l=xf+1580|0;Oc=xf+1576|0;Pc=xf+1572|0;Qc=xf+1568|0;id=xf+1564|0;o=xf+1560|0;nf=xf+304|0;g=xf+1556|0;dc=xf+1552|0;Gd=xf+1548|0;wf=xf+1544|0;vf=xf+1540|0;Gc=xf+1536|0;qf=xf+1532|0;B=xf+1528|0;jb=xf+1626|0;vd=xf+1524|0;Ha=xf+1520|0;pb=xf+1516|0;tb=xf+1512|0;Ia=xf+1508|0;Wc=xf+1504|0;S=xf+1500|0;Qa=xf+296|0;x=xf+1817|0;L=xf+1624|0;re=xf+1622|0;se=xf+1620|0;ba=xf+288|0;da=xf+280|0;Od=xf+272|0;Pd=xf+264|0;Ja=xf+1496|0;mc=xf+1492|0;X=xf+1488|0;nc=xf+1484|0;ca=xf+256|0;te=xf+248|0;ea=xf+240|0;nb=xf+1816|0;Qd=xf+1480|0;s=xf+1815|0;O=xf+1618|0;P=xf+1616|0;Ma=xf+1476|0;Y=xf+1472|0;sb=xf+1468|0;ub=xf+1464|0;Sc=xf+1460|0;wa=xf+1456|0;ec=xf+1452|0;y=xf+1448|0;ve=xf+1444|0;we=xf+1440|0;z=xf+1436|0;Fd=xf+232|0;vb=xf+1432|0;Cb=xf+1428|0;fc=xf+1424|0;m=xf+1420|0;Fa=xf+1416|0;U=xf+1412|0;Dc=xf+1408|0;je=xf+192|0;Ye=xf+1404|0;bf=xf+1400|0;_e=xf+1396|0;lb=xf+1392|0;mb=xf+184|0;w=xf+1388|0;ne=xf+1384|0;nd=xf+1380|0;We=xf+1376|0;A=xf+1814|0;ff=xf+1372|0;md=xf+1368|0;Ua=xf+176|0;_a=xf+1364|0;Ra=xf+168|0;gb=xf+160|0;fb=xf+1360|0;me=xf+1356|0;zc=xf+1352|0;Vc=xf+1348|0;Xa=xf+1344|0;Xe=xf+1340|0;K=xf+1336|0;W=xf+1332|0;Da=xf+1328|0;Ga=xf+1324|0;Va=xf+152|0;gc=xf+1320|0;rb=xf+1316|0;ef=xf+1312|0;cb=xf+1308|0;hd=xf+1304|0;pd=xf+1300|0;rd=xf+1296|0;ua=xf+1292|0;xa=xf+1288|0;Ba=xf+1284|0;Aa=xf+1280|0;E=xf+1276|0;ta=xf+1272|0;yb=xf+1268|0;pa=xf+1264|0;la=xf+1260|0;qa=xf+1256|0;ha=xf+1252|0;ga=xf+1248|0;Ac=xf+1244|0;Ya=xf+1240|0;Tc=xf+1236|0;wb=xf+1232|0;ia=xf+1228|0;Se=xf+1224|0;Dd=xf+1220|0;qc=xf+1216|0;Bc=xf+1212|0;vc=xf+1208|0;Uc=xf+1204|0;Hd=xf+1200|0;wc=xf+1196|0;Db=xf+1192|0;xc=xf+1188|0;Wd=xf+1184|0;kb=xf+1180|0;Eb=xf+1176|0;Kd=xf+1160|0;Za=xf+1152|0;ma=xf+144|0;I=xf+1148|0;t=xf+1144|0;qe=xf+1140|0;ya=xf+1136|0;Fb=xf+1132|0;Xd=xf+1128|0;Lc=xf+1124|0;Mc=xf+1120|0;Ld=xf+1104|0;r=xf+1631|0;Gb=xf+1100|0;hc=xf+1096|0;Yd=xf+1092|0;na=xf+136|0;ue=xf+128|0;Hb=xf+1088|0;Zd=xf+1084|0;D=xf+1080|0;Xc=xf+1076|0;Hc=xf+1072|0;yc=xf+1068|0;Rc=xf+1064|0;oa=xf+120|0;Ib=xf+1060|0;hb=xf+1056|0;le=xf+1052|0;Ze=xf+1048|0;jf=xf+1044|0;ob=xf+1040|0;Jb=xf+1036|0;R=xf+1630|0;Kb=xf+1032|0;_d=xf+1028|0;ab=xf+1024|0;Lb=xf+1020|0;Mb=xf+1016|0;ic=xf+1012|0;Ka=xf+1008|0;La=xf+112|0;Nb=xf+1004|0;xe=xf+104|0;wd=xf+1e3|0;ad=xf+996|0;Pb=xf+992|0;Qb=xf+988|0;jc=xf+984|0;$d=xf+980|0;Sb=xf+976|0;kc=xf+972|0;be=xf+968|0;Vb=xf+964|0;ce=xf+960|0;_b=xf+956|0;$a=xf+952|0;cf=xf+948|0;$b=xf+944|0;lc=xf+940|0;de=xf+936|0;Md=xf+920|0;ac=xf+916|0;qd=xf+912|0;ge=xf+96|0;bc=xf+908|0;ee=xf+904|0;Nd=xf+888|0;ra=xf+884|0;ja=xf+880|0;Ta=xf+876|0;cc=xf+872|0;Id=xf+868|0;Q=xf+864|0;Cc=xf+860|0;ka=xf+856|0;df=xf+852|0;gf=xf+848|0;za=xf+832|0;eb=xf+828|0;q=xf+824|0;Ea=xf+820|0;Wa=xf+816|0;Te=xf+812|0;Jd=xf+808|0;ye=xf+88|0;va=xf+804|0;J=xf+800|0;bb=xf+796|0;Sa=xf+792|0;od=xf+788|0;Yc=xf+784|0;Fc=xf+780|0;Ic=xf+776|0;kd=xf+772|0;oe=xf+768|0;Jc=xf+764|0;Nc=xf+760|0;Kc=xf+756|0;Na=xf+752|0;oc=xf+748|0;_=xf+744|0;pc=xf+740|0;Zc=xf+736|0;pe=xf+48|0;_c=xf+732|0;aa=xf+728|0;p=xf+716|0;$c=xf+712|0;Ab=xf+708|0;jd=xf+704|0;F=xf+700|0;G=xf+696|0;af=xf+692|0;Bb=xf+688|0;Ca=xf+1629|0;qb=xf+684|0;Ue=xf+680|0;ud=xf+676|0;ke=xf+8|0;hf=xf+672|0;rc=xf+668|0;sd=xf+664|0;xd=xf+660|0;bd=xf+656|0;Oa=xf+652|0;sa=xf+648|0;cd=xf+644|0;ld=xf+640|0;xb=xf+636|0;td=xf+632|0;yd=xf+628|0;sc=xf+624|0;Ud=xf+620|0;T=xf+616|0;u=xf+612|0;zd=xf+608|0;dd=xf+604|0;Ec=xf+600|0;ie=xf+568|0;tc=xf+564|0;Ad=xf+560|0;ed=xf+556|0;Vd=xf+552|0;uc=xf+548|0;Bd=xf+544|0;gd=xf+540|0;Cd=xf+536|0;fd=xf+532|0;Pa=xf+528|0;V=xf+524|0;he=xf;v=xf+520|0;Ed=xf+516|0;Re=xf+1628|0;ib=xf+512|0;zb=xf+508|0;kf=xf+504|0;Ve=xf+500|0;c[lf>>2]=f;c[n>>2]=c[(c[lf>>2]|0)+4>>2];c[pf>>2]=c[n>>2];c[rf>>2]=0;c[mf>>2]=c[c[lf>>2]>>2];a[fe>>0]=0;a[H>>0]=a[(c[mf>>2]|0)+62>>0]|0;c[fa>>2]=0;c[of>>2]=0;c[db>>2]=0;c[l>>2]=c[(c[lf>>2]|0)+8>>2];c[Oc>>2]=0;c[Pc>>2]=0;c[Qc>>2]=0;c[id>>2]=0;c[o>>2]=0;yf=(c[mf>>2]|0)+32|0;f=c[yf+4>>2]|0;j=nf;c[j>>2]=c[yf>>2];c[j+4>>2]=f;PH(c[lf>>2]|0);a:do if((c[(c[lf>>2]|0)+80>>2]|0)==7)k=860;else{c[(c[lf>>2]|0)+80>>2]=0;yf=(c[lf>>2]|0)+136|0;c[yf>>2]=0;c[yf+4>>2]=0;c[(c[lf>>2]|0)+20>>2]=0;c[(c[mf>>2]|0)+448+8>>2]=0;b:do if(!(c[(c[mf>>2]|0)+240>>2]|0)){if(c[(c[mf>>2]|0)+296>>2]|0){c[g>>2]=c[(c[lf>>2]|0)+108+16>>2];c[db>>2]=(c[(c[mf>>2]|0)+304>>2]|0)-(((c[g>>2]|0)>>>0)%((c[(c[mf>>2]|0)+304>>2]|0)>>>0)|0)}c[pf>>2]=(c[n>>2]|0)+((c[(c[lf>>2]|0)+76>>2]|0)*20|0);c:while(1){if(c[rf>>2]|0)break a;c[of>>2]=(c[of>>2]|0)+1;d:do switch(d[c[pf>>2]>>0]|0){case 13:{k=8;break}case 14:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);b[(c[Oc>>2]|0)+8>>1]=4;yf=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;k=c[Oc>>2]|0;c[k>>2]=yf;c[k+4>>2]=((yf|0)<0)<<31>>31;k=15;break}case 15:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[pf>>2]=(c[n>>2]|0)+((c[c[Oc>>2]>>2]|0)*20|0);b[(c[Oc>>2]|0)+8>>1]=128;break}case 16:{c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);j=(c[(c[pf>>2]|0)+12>>2]|0)-1|0;yf=c[id>>2]|0;c[yf>>2]=j;c[yf+4>>2]=((j|0)<0)<<31>>31;b[(c[id>>2]|0)+8>>1]=4;if(c[(c[pf>>2]|0)+8>>2]|0)k=15;break}case 17:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[dc>>2]=(c[n>>2]|0)+((c[c[Oc>>2]>>2]|0)*20|0);c[pf>>2]=(c[n>>2]|0)+(((c[(c[dc>>2]|0)+8>>2]|0)-1|0)*20|0);b[(c[Oc>>2]|0)+8>>1]=128;break}case 18:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);b[(c[Oc>>2]|0)+8>>1]=4;c[Gd>>2]=c[c[Oc>>2]>>2];j=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;yf=c[Oc>>2]|0;c[yf>>2]=j;c[yf+4>>2]=((j|0)<0)<<31>>31;c[pf>>2]=(c[n>>2]|0)+((c[Gd>>2]|0)*20|0);break}case 20:{c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if(e[(c[Qc>>2]|0)+8>>1]&1)k=21;break}case 21:{k=21;break}case 22:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;j=c[(c[pf>>2]|0)+4>>2]|0;yf=c[id>>2]|0;c[yf>>2]=j;c[yf+4>>2]=((j|0)<0)<<31>>31;break}case 23:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;f=c[(c[pf>>2]|0)+16>>2]|0;j=c[f+4>>2]|0;yf=c[id>>2]|0;c[yf>>2]=c[f>>2];c[yf+4>>2]=j;break}case 133:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;b[(c[id>>2]|0)+8>>1]=8;h[c[id>>2]>>3]=+h[c[(c[pf>>2]|0)+16>>2]>>3];break}case 97:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;a[c[pf>>2]>>0]=24;yf=If(c[(c[pf>>2]|0)+16>>2]|0)|0;c[(c[pf>>2]|0)+4>>2]=yf;if((d[H>>0]|0)!=1){c[rf>>2]=dh(c[id>>2]|0,c[(c[pf>>2]|0)+16>>2]|0,-1,1,0)|0;if((c[rf>>2]|0)==18){k=859;break c}if(Zt(c[id>>2]|0,d[H>>0]|0)|0){k=860;break a}c[(c[id>>2]|0)+24>>2]=0;yf=(c[id>>2]|0)+8|0;b[yf>>1]=e[yf>>1]|2048;if((a[(c[pf>>2]|0)+1>>0]|0)==-1)Sf(c[mf>>2]|0,c[(c[pf>>2]|0)+16>>2]|0);a[(c[pf>>2]|0)+1>>0]=-1;c[(c[pf>>2]|0)+16>>2]=c[(c[id>>2]|0)+16>>2];c[(c[pf>>2]|0)+4>>2]=c[(c[id>>2]|0)+12>>2]}if((c[(c[pf>>2]|0)+4>>2]|0)>(c[(c[mf>>2]|0)+88>>2]|0)){k=859;break c}else k=50;break}case 24:{k=50;break}case 25:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;c[B>>2]=(c[(c[pf>>2]|0)+12>>2]|0)-(c[(c[pf>>2]|0)+8>>2]|0);yf=((c[(c[pf>>2]|0)+4>>2]|0)!=0?257:1)&65535;b[jb>>1]=yf;b[(c[id>>2]|0)+8>>1]=yf;while(1){if((c[B>>2]|0)<=0)break d;c[id>>2]=(c[id>>2]|0)+40;fh(c[id>>2]|0);b[(c[id>>2]|0)+8>>1]=b[jb>>1]|0;c[B>>2]=(c[B>>2]|0)+-1}}case 26:{c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);b[(c[id>>2]|0)+8>>1]=(e[(c[id>>2]|0)+8>>1]|1)&-129;break}case 27:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;dh(c[id>>2]|0,c[(c[pf>>2]|0)+16>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,0,0)|0;a[(c[id>>2]|0)+10>>0]=a[H>>0]|0;break}case 28:{c[vd>>2]=(c[(c[lf>>2]|0)+60>>2]|0)+(((c[(c[pf>>2]|0)+4>>2]|0)-1|0)*40|0);if(VH(c[vd>>2]|0)|0){k=859;break c}c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;BF(c[id>>2]|0,c[vd>>2]|0,2048);break}case 29:{c[Ha>>2]=c[(c[pf>>2]|0)+12>>2];c[pb>>2]=c[(c[pf>>2]|0)+4>>2];c[tb>>2]=c[(c[pf>>2]|0)+8>>2];c[Oc>>2]=(c[l>>2]|0)+((c[pb>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[tb>>2]|0)*40|0);do{EH(c[id>>2]|0,c[Oc>>2]|0);if((e[(c[id>>2]|0)+8>>1]&4096|0)!=0?(_g(c[id>>2]|0)|0)!=0:0){k=860;break a}c[Oc>>2]=(c[Oc>>2]|0)+40;c[id>>2]=(c[id>>2]|0)+40;yf=(c[Ha>>2]|0)+-1|0;c[Ha>>2]=yf}while((yf|0)!=0);break}case 30:{c[Ia>>2]=c[(c[pf>>2]|0)+12>>2];c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);while(1){BF(c[id>>2]|0,c[Oc>>2]|0,4096);if((e[(c[id>>2]|0)+8>>1]&4096|0)!=0?(_g(c[id>>2]|0)|0)!=0:0){k=860;break a}yf=c[Ia>>2]|0;c[Ia>>2]=yf+-1;if(!yf)break d;c[id>>2]=(c[id>>2]|0)+40;c[Oc>>2]=(c[Oc>>2]|0)+40}}case 31:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);BF(c[id>>2]|0,c[Oc>>2]|0,4096);break}case 32:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);yf=c[Oc>>2]|0;eh(c[id>>2]|0,c[yf>>2]|0,c[yf+4>>2]|0);break}case 33:{if(((c[(c[mf>>2]|0)+296>>2]|0)!=0?(c[of>>2]|0)>>>0>=(c[db>>2]|0)>>>0:0)?(Tb[c[(c[mf>>2]|0)+296>>2]&255](c[(c[mf>>2]|0)+300>>2]|0)|0)!=0:0){k=74;break c}yf=WH(c[lf>>2]|0,0)|0;c[rf>>2]=yf;if(0==(yf|0)?(c[rf>>2]=XH(c[lf>>2]|0,1)|0,(c[rf>>2]|0)==0):0){k=77;break c}break}case 94:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[Pc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if((e[(c[Oc>>2]|0)+8>>1]|e[(c[Pc>>2]|0)+8>>1])&1){fh(c[id>>2]|0);break d}if((e[(c[Oc>>2]|0)+8>>1]&16384|0)!=0?(Vg(c[Oc>>2]|0)|0)!=0:0){k=860;break a}if((e[(c[Pc>>2]|0)+8>>1]&16384|0)!=0?(Vg(c[Pc>>2]|0)|0)!=0:0){k=860;break a}if((e[(c[Oc>>2]|0)+8>>1]&18|0)==0?(sx(c[Oc>>2]|0,a[H>>0]|0,0)|0)!=0:0){k=860;break a}if((e[(c[Pc>>2]|0)+8>>1]&18|0)==0?(sx(c[Pc>>2]|0,a[H>>0]|0,0)|0)!=0:0){k=860;break a}g=(c[(c[Oc>>2]|0)+12>>2]|0)+(c[(c[Pc>>2]|0)+12>>2]|0)|0;j=Qa;c[j>>2]=g;c[j+4>>2]=((g|0)<0)<<31>>31;j=Qa;g=c[j+4>>2]|0;yf=c[(c[mf>>2]|0)+88>>2]|0;f=((yf|0)<0)<<31>>31;if((g|0)>(f|0)|((g|0)==(f|0)?(c[j>>2]|0)>>>0>yf>>>0:0)){k=859;break c}if(ux(c[id>>2]|0,(c[Qa>>2]|0)+2|0,(c[id>>2]|0)==(c[Pc>>2]|0)&1)|0){k=860;break a}b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|2;if((c[id>>2]|0)!=(c[Pc>>2]|0))iR(c[(c[id>>2]|0)+16>>2]|0,c[(c[Pc>>2]|0)+16>>2]|0,c[(c[Pc>>2]|0)+12>>2]|0)|0;iR((c[(c[id>>2]|0)+16>>2]|0)+(c[(c[Pc>>2]|0)+12>>2]|0)|0,c[(c[Oc>>2]|0)+16>>2]|0,c[(c[Oc>>2]|0)+12>>2]|0)|0;a[(c[(c[id>>2]|0)+16>>2]|0)+(c[Qa>>2]|0)>>0]=0;yf=Qa;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,1,0)|0;a[(c[(c[id>>2]|0)+16>>2]|0)+yf>>0]=0;yf=(c[id>>2]|0)+8|0;b[yf>>1]=e[yf>>1]|512;c[(c[id>>2]|0)+12>>2]=c[Qa>>2];a[(c[id>>2]|0)+10>>0]=a[H>>0]|0;break}case 93:case 92:case 91:case 90:case 89:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);b[re>>1]=ZH(c[Oc>>2]|0)|0;c[Pc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);b[se>>1]=ZH(c[Pc>>2]|0)|0;c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);b[L>>1]=e[(c[Oc>>2]|0)+8>>1]|e[(c[Pc>>2]|0)+8>>1];e:do if(!(e[L>>1]&1)){f:do if(e[re>>1]&e[se>>1]&4){yf=c[Oc>>2]|0;j=c[yf+4>>2]|0;f=ba;c[f>>2]=c[yf>>2];c[f+4>>2]=j;f=c[Pc>>2]|0;j=c[f+4>>2]|0;yf=da;c[yf>>2]=c[f>>2];c[yf+4>>2]=j;a[x>>0]=1;switch(d[c[pf>>2]>>0]|0){case 89:{yf=ba;if(_H(da,c[yf>>2]|0,c[yf+4>>2]|0)|0)break f;break}case 90:{yf=ba;if($H(da,c[yf>>2]|0,c[yf+4>>2]|0)|0)break f;break}case 91:{yf=ba;if(aI(da,c[yf>>2]|0,c[yf+4>>2]|0)|0)break f;break}case 92:{yf=ba;if((c[yf>>2]|0)==0&(c[yf+4>>2]|0)==0)break e;j=ba;yf=da;if(((c[j>>2]|0)==-1?(c[j+4>>2]|0)==-1:0)&((c[yf>>2]|0)==0?(c[yf+4>>2]|0)==-2147483648:0))break f;j=ba;f=da;yf=da;c[yf>>2]=pR(c[f>>2]|0,c[f+4>>2]|0,c[j>>2]|0,c[j+4>>2]|0)|0;c[yf+4>>2]=C;break}default:{yf=ba;if((c[yf>>2]|0)==0&(c[yf+4>>2]|0)==0)break e;yf=ba;if((c[yf>>2]|0)==-1?(c[yf+4>>2]|0)==-1:0){yf=ba;c[yf>>2]=1;c[yf+4>>2]=0}j=ba;f=da;yf=da;c[yf>>2]=qR(c[f>>2]|0,c[f+4>>2]|0,c[j>>2]|0,c[j+4>>2]|0)|0;c[yf+4>>2]=C}}f=da;j=c[f+4>>2]|0;yf=c[id>>2]|0;c[yf>>2]=c[f>>2];c[yf+4>>2]=j;b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|4;break d}else a[x>>0]=0;while(0);h[Od>>3]=+Yg(c[Oc>>2]|0);h[Pd>>3]=+Yg(c[Pc>>2]|0);switch(d[c[pf>>2]>>0]|0){case 89:{h[Pd>>3]=+h[Pd>>3]+ +h[Od>>3];break}case 90:{h[Pd>>3]=+h[Pd>>3]-+h[Od>>3];break}case 91:{h[Pd>>3]=+h[Pd>>3]*+h[Od>>3];break}case 92:{if(+h[Od>>3]==0.0)break e;h[Pd>>3]=+h[Pd>>3]/+h[Od>>3];break}default:{zf=+h[Od>>3];yf=+N(zf)>=1.0?zf>0.0?~~+$(+M(zf/4294967296.0),4294967295.0)>>>0:~~+Z((zf-+(~~zf>>>0))/4294967296.0)>>>0:0;j=ba;c[j>>2]=~~zf>>>0;c[j+4>>2]=yf;zf=+h[Pd>>3];j=+N(zf)>=1.0?zf>0.0?~~+$(+M(zf/4294967296.0),4294967295.0)>>>0:~~+Z((zf-+(~~zf>>>0))/4294967296.0)>>>0:0;yf=da;c[yf>>2]=~~zf>>>0;c[yf+4>>2]=j;yf=ba;if((c[yf>>2]|0)==0&(c[yf+4>>2]|0)==0)break e;yf=ba;if((c[yf>>2]|0)==-1?(c[yf+4>>2]|0)==-1:0){yf=ba;c[yf>>2]=1;c[yf+4>>2]=0}j=da;yf=ba;h[Pd>>3]=+((qR(c[j>>2]|0,c[j+4>>2]|0,c[yf>>2]|0,c[yf+4>>2]|0)|0)>>>0)+4294967296.0*+(C|0)}}if(!(HF(+h[Pd>>3])|0)){h[c[id>>2]>>3]=+h[Pd>>3];b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|8;if((a[x>>0]|0)!=0?1:((e[re>>1]|e[se>>1])&8|0)!=0)break d;px(c[id>>2]|0);break d}}while(0);fh(c[id>>2]|0);break}case 34:{if(c[(c[pf>>2]|0)+4>>2]|0)eh((c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0)|0,0,0);break}case 35:{c[Ja>>2]=d[(c[pf>>2]|0)+3>>0];c[mc>>2]=Fw(c[mf>>2]|0,32+((c[Ja>>2]|0)-1<<2)|0,0)|0;if(!(c[mc>>2]|0)){k=860;break a}c[c[mc>>2]>>2]=0;c[(c[mc>>2]|0)+4>>2]=c[(c[pf>>2]|0)+16>>2];c[(c[mc>>2]|0)+16>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;c[(c[mc>>2]|0)+12>>2]=c[lf>>2];a[(c[mc>>2]|0)+26>>0]=c[Ja>>2];a[(c[pf>>2]|0)+1>>0]=-20;c[(c[pf>>2]|0)+16>>2]=c[mc>>2];a[c[pf>>2]>>0]=36;k=132;break}case 36:{k=132;break}case 88:case 87:case 86:case 85:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[Pc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if((e[(c[Oc>>2]|0)+8>>1]|e[(c[Pc>>2]|0)+8>>1])&1){fh(c[id>>2]|0);break d}yf=Zg(c[Pc>>2]|0)|0;j=ca;c[j>>2]=yf;c[j+4>>2]=C;j=Zg(c[Oc>>2]|0)|0;yf=ea;c[yf>>2]=j;c[yf+4>>2]=C;a[nb>>0]=a[c[pf>>2]>>0]|0;do if((d[nb>>0]|0)!=85){f=ea;g=c[f>>2]|0;f=c[f+4>>2]|0;if((d[nb>>0]|0)==86){Af=ca;j=c[Af+4>>2]|f;yf=ca;c[yf>>2]=c[Af>>2]|g;c[yf+4>>2]=j;break}if((g|0)!=0|(f|0)!=0){if((c[ea+4>>2]|0)<0){a[nb>>0]=175-(d[nb>>0]|0);yf=ea;j=c[yf+4>>2]|0;yf=(j|0)>-1|(j|0)==-1&(c[yf>>2]|0)>>>0>4294967232;j=ea;j=fR(0,0,c[j>>2]|0,c[j+4>>2]|0)|0;Af=ea;c[Af>>2]=yf?j:64;c[Af+4>>2]=yf?C:0}Af=ea;yf=c[Af+4>>2]|0;if((yf|0)>0|(yf|0)==0&(c[Af>>2]|0)>>>0>=64){Af=ca;yf=c[Af+4>>2]|0;if((yf|0)>0|(yf|0)==0&(c[Af>>2]|0)>>>0>=0)g=1;else g=(d[nb>>0]|0)==87;yf=g?0:-1;Af=ca;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31;break}c[te>>2]=c[ca>>2];c[te+4>>2]=c[ca+4>>2];g=c[ea>>2]|0;j=te;f=c[j>>2]|0;j=c[j+4>>2]|0;if((d[nb>>0]|0)!=87){yf=hR(f|0,j|0,g|0)|0;Af=te;c[Af>>2]=yf;c[Af+4>>2]=C;if((c[ca+4>>2]|0)<0){j=ea;j=fR(64,0,c[j>>2]|0,c[j+4>>2]|0)|0;j=lR(-1,-1,j|0)|0;f=te;yf=c[f+4>>2]|C;Af=te;c[Af>>2]=c[f>>2]|j;c[Af+4>>2]=yf}}else{yf=lR(f|0,j|0,g|0)|0;Af=te;c[Af>>2]=yf;c[Af+4>>2]=C}c[ca>>2]=c[te>>2];c[ca+4>>2]=c[te+4>>2]}}else{j=ea;f=ca;yf=c[f+4>>2]&c[j+4>>2];Af=ca;c[Af>>2]=c[f>>2]&c[j>>2];c[Af+4>>2]=yf}while(0);j=ca;yf=c[j+4>>2]|0;Af=c[id>>2]|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|4;break}case 37:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);wx(c[Oc>>2]|0)|0;yf=c[(c[pf>>2]|0)+8>>2]|0;Af=c[Oc>>2]|0;j=Af;yf=gR(c[j>>2]|0,c[j+4>>2]|0,yf|0,((yf|0)<0)<<31>>31|0)|0;c[Af>>2]=yf;c[Af+4>>2]=C;break}case 38:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if((e[(c[Oc>>2]|0)+8>>1]&4|0)==0?(rx(c[Oc>>2]|0,67,a[H>>0]|0),(e[(c[Oc>>2]|0)+8>>1]&4|0)==0):0)if(!(c[(c[pf>>2]|0)+8>>2]|0)){k=165;break c}else{k=15;break d}b[(c[Oc>>2]|0)+8>>1]=e[(c[Oc>>2]|0)+8>>1]&-49664|4;break}case 39:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if(e[(c[Oc>>2]|0)+8>>1]&4)xx(c[Oc>>2]|0)|0;break}case 40:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if(e[(c[Oc>>2]|0)+8>>1]&16384)g=Vg(c[Oc>>2]|0)|0;else g=0;c[rf>>2]=g;kx(c[Oc>>2]|0,c[(c[pf>>2]|0)+8>>2]&255,a[H>>0]|0);break}case 83:case 80:case 81:case 82:case 78:case 79:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);b[O>>1]=b[(c[Oc>>2]|0)+8>>1]|0;b[P>>1]=b[(c[Qc>>2]|0)+8>>1]|0;g=d[(c[pf>>2]|0)+3>>0]|0;do if((e[O>>1]|e[P>>1])&1){if(!(g&128)){g=c[pf>>2]|0;if(!(d[(c[pf>>2]|0)+3>>0]&32))if(d[g+3>>0]&16){k=15;break d}else break d;else{c[id>>2]=(c[l>>2]|0)+((c[g+8>>2]|0)*40|0);b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|1;break d}}if(((e[O>>1]&1|0)!=0?(e[P>>1]&1|0)!=0:0)?(e[P>>1]&256|0)==0:0){c[Qd>>2]=0;break}c[Qd>>2]=1}else{a[s>>0]=g&71;if((a[s>>0]|0)>=67){if((e[O>>1]&14|0)==2)xh(c[Oc>>2]|0,0);if((e[P>>1]&14|0)==2)xh(c[Qc>>2]|0,0)}else if((a[s>>0]|0)==66){if((e[O>>1]&2|0)==0?(e[O>>1]&12|0)!=0:0){sx(c[Oc>>2]|0,a[H>>0]|0,1)|0;b[O>>1]=e[(c[Oc>>2]|0)+8>>1]&-33280|e[O>>1]&33279}if((e[P>>1]&2|0)==0?(e[P>>1]&12|0)!=0:0){sx(c[Qc>>2]|0,a[H>>0]|0,1)|0;b[P>>1]=e[(c[Qc>>2]|0)+8>>1]&-33280|e[P>>1]&33279}}if(e[O>>1]&16384){Vg(c[Oc>>2]|0)|0;b[O>>1]=e[O>>1]&-16385}if(e[P>>1]&16384){Vg(c[Qc>>2]|0)|0;b[P>>1]=e[P>>1]&-16385}c[Qd>>2]=cI(c[Qc>>2]|0,c[Oc>>2]|0,c[(c[pf>>2]|0)+16>>2]|0)|0}while(0);switch(d[c[pf>>2]>>0]|0){case 79:{c[Qd>>2]=(c[Qd>>2]|0)==0&1;break}case 78:{c[Qd>>2]=(c[Qd>>2]|0)!=0&1;break}case 82:{c[Qd>>2]=(c[Qd>>2]|0)<0&1;break}case 81:{c[Qd>>2]=(c[Qd>>2]|0)<=0&1;break}case 80:{c[Qd>>2]=(c[Qd>>2]|0)>0&1;break}default:c[Qd>>2]=(c[Qd>>2]|0)>=0&1}b[(c[Oc>>2]|0)+8>>1]=b[O>>1]|0;b[(c[Qc>>2]|0)+8>>1]=b[P>>1]|0;if(!(d[(c[pf>>2]|0)+3>>0]&32))if(c[Qd>>2]|0){k=15;break d}else break d;else{c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|4;yf=c[Qd>>2]|0;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31;break d}}case 41:{c[o>>2]=(c[(c[pf>>2]|0)+16>>2]|0)+4;break}case 42:{if(!(d[(c[pf>>2]|0)+3>>0]&1))c[o>>2]=0;c[Ma>>2]=c[(c[pf>>2]|0)+12>>2];c[Sc>>2]=c[(c[pf>>2]|0)+16>>2];c[sb>>2]=c[(c[pf>>2]|0)+4>>2];c[ub>>2]=c[(c[pf>>2]|0)+8>>2];c[Y>>2]=0;while(1){if((c[Y>>2]|0)>=(c[Ma>>2]|0))break;g=c[Y>>2]|0;if(c[o>>2]|0)g=c[(c[o>>2]|0)+(g<<2)>>2]|0;c[wa>>2]=g;c[ec>>2]=c[(c[Sc>>2]|0)+20+(c[Y>>2]<<2)>>2];c[y>>2]=d[(c[(c[Sc>>2]|0)+16>>2]|0)+(c[Y>>2]|0)>>0];c[fa>>2]=cI((c[l>>2]|0)+(((c[sb>>2]|0)+(c[wa>>2]|0)|0)*40|0)|0,(c[l>>2]|0)+(((c[ub>>2]|0)+(c[wa>>2]|0)|0)*40|0)|0,c[ec>>2]|0)|0;if(c[fa>>2]|0){k=217;break}c[Y>>2]=(c[Y>>2]|0)+1}if((k|0)==217?(k=0,(c[y>>2]|0)!=0):0)c[fa>>2]=0-(c[fa>>2]|0);c[o>>2]=0;break}case 43:{if((c[fa>>2]|0)<0){c[pf>>2]=(c[n>>2]|0)+(((c[(c[pf>>2]|0)+4>>2]|0)-1|0)*20|0);break d}g=c[pf>>2]|0;if(!(c[fa>>2]|0)){c[pf>>2]=(c[n>>2]|0)+(((c[g+8>>2]|0)-1|0)*20|0);break d}else{c[pf>>2]=(c[n>>2]|0)+(((c[g+12>>2]|0)-1|0)*20|0);break d}}case 71:case 72:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if(e[(c[Oc>>2]|0)+8>>1]&1)c[ve>>2]=2;else{Af=Zg(c[Oc>>2]|0)|0;c[ve>>2]=((Af|0)!=0|(C|0)!=0)&1}c[Pc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);if(e[(c[Pc>>2]|0)+8>>1]&1)c[we>>2]=2;else{Af=Zg(c[Pc>>2]|0)|0;c[we>>2]=((Af|0)!=0|(C|0)!=0)&1}g=((c[ve>>2]|0)*3|0)+(c[we>>2]|0)|0;if((d[c[pf>>2]>>0]|0)==72)c[ve>>2]=d[40716+g>>0];else c[ve>>2]=d[40725+g>>0];c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if((c[ve>>2]|0)==2){b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|1;break d}else{yf=c[ve>>2]|0;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31;b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|4;break d}}case 19:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);fh(c[id>>2]|0);if(!(e[(c[Oc>>2]|0)+8>>1]&1)){b[(c[id>>2]|0)+8>>1]=4;yf=Zg(c[Oc>>2]|0)|0;yf=(((yf|0)!=0|(C|0)!=0)^1)&1;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31}break}case 96:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);fh(c[id>>2]|0);if(!(e[(c[Oc>>2]|0)+8>>1]&1)){b[(c[id>>2]|0)+8>>1]=4;yf=Zg(c[Oc>>2]|0)|0;Af=c[id>>2]|0;c[Af>>2]=~yf;c[Af+4>>2]=~C}break}case 44:{if(a[(c[(c[lf>>2]|0)+200>>2]|0)+(c[(c[pf>>2]|0)+4>>2]|0)>>0]|0)k=15;else a[(c[(c[lf>>2]|0)+200>>2]|0)+(c[(c[pf>>2]|0)+4>>2]|0)>>0]=1;break}case 46:case 45:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if(!(e[(c[Oc>>2]|0)+8>>1]&1)){c[z>>2]=+Yg(c[Oc>>2]|0)!=0.0&1;if((d[c[pf>>2]>>0]|0)==46)c[z>>2]=((c[z>>2]|0)!=0^1)&1}else c[z>>2]=c[(c[pf>>2]|0)+12>>2];if(c[z>>2]|0)k=15;break}case 76:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if(e[(c[Oc>>2]|0)+8>>1]&1)k=15;break}case 77:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if(!(e[(c[Oc>>2]|0)+8>>1]&1))k=15;break}case 47:{c[Cb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[vb>>2]=c[(c[pf>>2]|0)+8>>2];c[rf>>2]=dI(Cb,vb)|0;c[Dc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[m>>2]=c[(c[Cb>>2]|0)+76>>2];c[fc>>2]=c[(c[Cb>>2]|0)+16>>2];if(c[rf>>2]|0){k=861;break c}g=c[Cb>>2]|0;do if((c[(c[Cb>>2]|0)+56>>2]|0)!=(c[(c[lf>>2]|0)+72>>2]|0)){f=c[Cb>>2]|0;do if(a[g+2>>0]|0)if((d[f>>0]|0)==3){c[nd>>2]=(c[l>>2]|0)+((c[(c[Cb>>2]|0)+16>>2]|0)*40|0);Af=c[(c[nd>>2]|0)+12>>2]|0;c[w>>2]=Af;c[(c[Cb>>2]|0)+64>>2]=Af;c[(c[Cb>>2]|0)+60>>2]=Af;c[(c[Cb>>2]|0)+72>>2]=c[(c[nd>>2]|0)+16>>2];break}else{fh(c[Dc>>2]|0);break d}else{g=c[fc>>2]|0;if(!(d[f+4>>0]|0)){sH(g,Fd)|0;Af=eI(c[fc>>2]|0,w)|0;c[(c[Cb>>2]|0)+72>>2]=Af;c[(c[Cb>>2]|0)+60>>2]=c[Fd>>2]}else{fI(g,(c[Cb>>2]|0)+60|0)|0;Af=gI(c[fc>>2]|0,w)|0;c[(c[Cb>>2]|0)+72>>2]=Af}g=c[(c[Cb>>2]|0)+60>>2]|0;if((c[(c[Cb>>2]|0)+60>>2]|0)>>>0<=(c[w>>2]|0)>>>0){c[(c[Cb>>2]|0)+64>>2]=g;break}if(g>>>0>(c[(c[mf>>2]|0)+88>>2]|0)>>>0){k=859;break c}c[(c[Cb>>2]|0)+64>>2]=c[w>>2]}while(0);c[(c[Cb>>2]|0)+56>>2]=c[(c[lf>>2]|0)+72>>2];g=c[(c[Cb>>2]|0)+72>>2]|0;if((d[c[(c[Cb>>2]|0)+72>>2]>>0]|0)<128){c[lb>>2]=d[g>>0];g=1}else g=(tF(g,lb)|0)&255;c[(c[Cb>>2]|0)+68>>2]=g&255;b[(c[Cb>>2]|0)+14>>1]=0;c[c[m>>2]>>2]=c[lb>>2];if((c[w>>2]|0)>>>0<(c[lb>>2]|0)>>>0){c[(c[Cb>>2]|0)+72>>2]=0;c[(c[Cb>>2]|0)+64>>2]=0;if((c[lb>>2]|0)>>>0<=98307?(c[lb>>2]|0)>>>0<=(c[(c[Cb>>2]|0)+60>>2]|0)>>>0:0){k=272;break}c[rf>>2]=Lj(76686)|0;break d}else k=272}else if((e[g+14>>1]|0)<=(c[vb>>2]|0))k=272;else c[ne>>2]=c[(c[Cb>>2]|0)+80+(c[vb>>2]<<2)>>2];while(0);if((k|0)==272){k=0;do if((c[(c[Cb>>2]|0)+68>>2]|0)>>>0<(c[c[m>>2]>>2]|0)>>>0){if(!(c[(c[Cb>>2]|0)+72>>2]|0)){g=je;f=g+40|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(f|0));c[rf>>2]=hI(c[fc>>2]|0,0,c[c[m>>2]>>2]|0,((a[(c[Cb>>2]|0)+4>>0]|0)!=0^1)&1,je)|0;if(c[rf>>2]|0)break d;c[Ye>>2]=c[je+16>>2]}else c[Ye>>2]=c[(c[Cb>>2]|0)+72>>2];c[U>>2]=e[(c[Cb>>2]|0)+14>>1];Af=mb;c[Af>>2]=c[(c[m>>2]|0)+(c[U>>2]<<2)>>2];c[Af+4>>2]=0;c[bf>>2]=(c[Ye>>2]|0)+(c[(c[Cb>>2]|0)+68>>2]|0);c[_e>>2]=(c[Ye>>2]|0)+(c[c[m>>2]>>2]|0);do{Af=d[c[bf>>2]>>0]|0;c[ne>>2]=Af;g=c[bf>>2]|0;if(Af>>>0<128){c[bf>>2]=g+1;yf=(iI(c[ne>>2]&255)|0)&255;Af=mb;yf=gR(c[Af>>2]|0,c[Af+4>>2]|0,yf|0,0)|0;Af=mb;c[Af>>2]=yf;c[Af+4>>2]=C}else{yf=(tF(g,ne)|0)&255;c[bf>>2]=(c[bf>>2]|0)+yf;yf=uF(c[ne>>2]|0)|0;Af=mb;yf=gR(c[Af>>2]|0,c[Af+4>>2]|0,yf|0,0)|0;Af=mb;c[Af>>2]=yf;c[Af+4>>2]=C}yf=c[ne>>2]|0;Af=c[U>>2]|0;c[U>>2]=Af+1;c[(c[Cb>>2]|0)+80+(Af<<2)>>2]=yf;c[(c[m>>2]|0)+(c[U>>2]<<2)>>2]=c[mb>>2];if((c[U>>2]|0)>(c[vb>>2]|0))break}while((c[bf>>2]|0)>>>0<(c[_e>>2]|0)>>>0);b[(c[Cb>>2]|0)+14>>1]=c[U>>2];c[(c[Cb>>2]|0)+68>>2]=(c[bf>>2]|0)-(c[Ye>>2]|0);if(!(c[(c[Cb>>2]|0)+72>>2]|0))Ug(je); +if((c[bf>>2]|0)>>>0>=(c[_e>>2]|0)>>>0){if((c[bf>>2]|0)>>>0<=(c[_e>>2]|0)>>>0?(Af=mb,!((c[Af+4>>2]|0)!=0?1:(c[Af>>2]|0)!=(c[(c[Cb>>2]|0)+60>>2]|0))):0)k=288}else k=288;if((k|0)==288?(k=0,Af=mb,yf=c[Af+4>>2]|0,!(yf>>>0>0|((yf|0)==0?(c[Af>>2]|0)>>>0>(c[(c[Cb>>2]|0)+60>>2]|0)>>>0:0))):0)break;c[rf>>2]=Lj(76747)|0;break d}else c[ne>>2]=0;while(0);if((e[(c[Cb>>2]|0)+14>>1]|0)<=(c[vb>>2]|0)){g=c[Dc>>2]|0;if((a[(c[pf>>2]|0)+1>>0]|0)==-8){BF(g,c[(c[pf>>2]|0)+16>>2]|0,2048);break d}else{fh(g);break d}}}if(e[(c[Dc>>2]|0)+8>>1]&9312)fh(c[Dc>>2]|0);a[(c[Dc>>2]|0)+10>>0]=a[H>>0]|0;if((c[(c[Cb>>2]|0)+64>>2]|0)>>>0>=(c[(c[m>>2]|0)+((c[vb>>2]|0)+1<<2)>>2]|0)>>>0){c[Ye>>2]=(c[(c[Cb>>2]|0)+72>>2]|0)+(c[(c[m>>2]|0)+(c[vb>>2]<<2)>>2]|0);if((c[ne>>2]|0)>>>0<12){vF(c[Ye>>2]|0,c[ne>>2]|0,c[Dc>>2]|0)|0;break d}g=(((c[ne>>2]|0)-12|0)>>>0)/2|0;c[Fa>>2]=g;c[(c[Dc>>2]|0)+12>>2]=g;g=c[Dc>>2]|0;if((c[(c[Dc>>2]|0)+24>>2]|0)<((c[Fa>>2]|0)+2|0)){b[g+8>>1]=1;if(ux(c[Dc>>2]|0,(c[Fa>>2]|0)+2|0,0)|0){k=860;break a}}else c[(c[Dc>>2]|0)+16>>2]=c[g+20>>2];iR(c[(c[Dc>>2]|0)+16>>2]|0,c[Ye>>2]|0,c[Fa>>2]|0)|0;a[(c[(c[Dc>>2]|0)+16>>2]|0)+(c[Fa>>2]|0)>>0]=0;a[(c[(c[Dc>>2]|0)+16>>2]|0)+((c[Fa>>2]|0)+1)>>0]=0;b[(c[Dc>>2]|0)+8>>1]=b[17282+((c[ne>>2]&1)<<1)>>1]|0;break d}do if(d[(c[pf>>2]|0)+3>>0]&192){if((c[ne>>2]|0)>>>0>=12?(c[ne>>2]&1|0)==0:0)break;if(!(d[(c[pf>>2]|0)+3>>0]&128))k=309}else k=309;while(0);if((k|0)==309?(k=0,Af=uF(c[ne>>2]|0)|0,c[Fa>>2]=Af,(Af|0)!=0):0){c[rf>>2]=hI(c[fc>>2]|0,c[(c[m>>2]|0)+(c[vb>>2]<<2)>>2]|0,c[Fa>>2]|0,((a[(c[Cb>>2]|0)+4>>0]|0)!=0^1)&1,c[Dc>>2]|0)|0;if(c[rf>>2]|0)break d;vF(c[(c[Dc>>2]|0)+16>>2]|0,c[ne>>2]|0,c[Dc>>2]|0)|0;Af=(c[Dc>>2]|0)+8|0;b[Af>>1]=e[Af>>1]&-4097;break d}vF(40734,c[ne>>2]|0,c[Dc>>2]|0)|0;break}case 48:{c[We>>2]=c[(c[pf>>2]|0)+16>>2];c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);while(1){Af=c[We>>2]|0;c[We>>2]=Af+1;Af=a[Af>>0]|0;a[A>>0]=Af;if(!(Af<<24>>24))break d;rx(c[Oc>>2]|0,a[A>>0]|0,a[H>>0]|0);c[Oc>>2]=(c[Oc>>2]|0)+40}}case 49:{Af=Ua;c[Af>>2]=0;c[Af+4>>2]=0;c[_a>>2]=0;Af=gb;c[Af>>2]=0;c[Af+4>>2]=0;c[Xa>>2]=c[(c[pf>>2]|0)+4>>2];c[Xe>>2]=c[(c[pf>>2]|0)+16>>2];c[zc>>2]=(c[l>>2]|0)+((c[Xa>>2]|0)*40|0);c[Xa>>2]=c[(c[pf>>2]|0)+8>>2];c[Vc>>2]=(c[zc>>2]|0)+(((c[Xa>>2]|0)-1|0)*40|0);c[K>>2]=d[(c[lf>>2]|0)+87>>0];c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if(c[Xe>>2]|0){c[md>>2]=c[zc>>2];do{yf=c[md>>2]|0;c[md>>2]=yf+40;Af=c[Xe>>2]|0;c[Xe>>2]=Af+1;rx(yf,a[Af>>0]|0,a[H>>0]|0)}while((a[c[Xe>>2]>>0]|0)!=0)}c[md>>2]=c[Vc>>2];do{Af=jI(c[md>>2]|0,c[K>>2]|0,Ga)|0;c[me>>2]=Af;c[(c[md>>2]|0)+28>>2]=Af;do if(e[(c[md>>2]|0)+8>>1]&16384){Af=Ua;g=c[md>>2]|0;if((c[Af>>2]|0)!=0|(c[Af+4>>2]|0)!=0)if(Vg(g)|0){k=860;break a}else break;else{yf=c[g>>2]|0;Af=gb;yf=gR(c[Af>>2]|0,c[Af+4>>2]|0,yf|0,((yf|0)<0)<<31>>31|0)|0;Af=gb;c[Af>>2]=yf;c[Af+4>>2]=C;c[Ga>>2]=(c[Ga>>2]|0)-(c[c[md>>2]>>2]|0);break}}while(0);yf=Ua;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,c[Ga>>2]|0,0)|0;Af=Ua;c[Af>>2]=yf;c[Af+4>>2]=C;if((c[me>>2]|0)>>>0<=127)g=1;else g=zF(c[me>>2]|0,0)|0;c[_a>>2]=(c[_a>>2]|0)+g;Af=(c[md>>2]|0)+-40|0;c[md>>2]=Af}while(Af>>>0>=(c[zc>>2]|0)>>>0);g=c[_a>>2]|0;if((c[_a>>2]|0)>126){c[fb>>2]=zF(g,((g|0)<0)<<31>>31)|0;c[_a>>2]=(c[_a>>2]|0)+(c[fb>>2]|0);yf=c[fb>>2]|0;Af=c[_a>>2]|0;if((yf|0)<(zF(Af,((Af|0)<0)<<31>>31)|0))c[_a>>2]=(c[_a>>2]|0)+1}else c[_a>>2]=g+1;f=c[_a>>2]|0;yf=Ua;yf=gR(f|0,((f|0)<0)<<31>>31|0,c[yf>>2]|0,c[yf+4>>2]|0)|0;f=Ra;c[f>>2]=yf;c[f+4>>2]=C;f=Ra;yf=gb;yf=gR(c[f>>2]|0,c[f+4>>2]|0,c[yf>>2]|0,c[yf+4>>2]|0)|0;f=C;Af=c[(c[mf>>2]|0)+88>>2]|0;j=((Af|0)<0)<<31>>31;if((f|0)>(j|0)|(f|0)==(j|0)&yf>>>0>Af>>>0){k=859;break c}if(tx(c[id>>2]|0,c[Ra>>2]|0)|0){k=860;break a}c[ff>>2]=c[(c[id>>2]|0)+16>>2];if((c[_a>>2]|0)>>>0<128){a[c[ff>>2]>>0]=c[_a>>2];g=1}else{g=c[_a>>2]|0;g=kI(c[ff>>2]|0,g,((g|0)<0)<<31>>31)|0}c[W>>2]=g&255;c[Da>>2]=c[_a>>2];c[md>>2]=c[zc>>2];do{c[me>>2]=c[(c[md>>2]|0)+28>>2];if((c[me>>2]|0)>>>0<128){a[(c[ff>>2]|0)+(c[W>>2]|0)>>0]=c[me>>2];g=1}else g=kI((c[ff>>2]|0)+(c[W>>2]|0)|0,c[me>>2]|0,0)|0;c[W>>2]=(c[W>>2]|0)+(g&255);Af=lI((c[ff>>2]|0)+(c[Da>>2]|0)|0,c[md>>2]|0,c[me>>2]|0)|0;c[Da>>2]=(c[Da>>2]|0)+Af;Af=(c[md>>2]|0)+40|0;c[md>>2]=Af}while(Af>>>0<=(c[Vc>>2]|0)>>>0);c[(c[id>>2]|0)+12>>2]=c[Ra>>2];b[(c[id>>2]|0)+8>>1]=16;Af=gb;if((c[Af>>2]|0)!=0|(c[Af+4>>2]|0)!=0){c[c[id>>2]>>2]=c[gb>>2];Af=(c[id>>2]|0)+8|0;b[Af>>1]=e[Af>>1]|16384}a[(c[id>>2]|0)+10>>0]=1;break}case 50:{c[gc>>2]=c[(c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2]|0)+16>>2];j=Va;c[j>>2]=0;c[j+4>>2]=0;c[rf>>2]=mI(c[gc>>2]|0,Va)|0;c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;j=Va;yf=c[j+4>>2]|0;Af=c[id>>2]|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;break}case 0:{c[rb>>2]=c[(c[pf>>2]|0)+4>>2];c[ef>>2]=c[(c[pf>>2]|0)+16>>2];if(!(c[rb>>2]|0)){if((c[(c[mf>>2]|0)+156>>2]|0)>0){SH(c[lf>>2]|0,40742,Be);c[rf>>2]=5;break d}c[cb>>2]=If(c[ef>>2]|0)|0;c[rf>>2]=nI(c[mf>>2]|0,0,(c[(c[mf>>2]|0)+504>>2]|0)+(c[(c[mf>>2]|0)+500>>2]|0)|0)|0;if(c[rf>>2]|0){k=861;break c}c[hd>>2]=Fw(c[mf>>2]|0,32+(c[cb>>2]|0)+1|0,0)|0;if(!(c[hd>>2]|0))break d;c[c[hd>>2]>>2]=(c[hd>>2]|0)+32;iR(c[c[hd>>2]>>2]|0,c[ef>>2]|0,(c[cb>>2]|0)+1|0)|0;g=c[mf>>2]|0;if(a[(c[mf>>2]|0)+63>>0]|0){a[g+63>>0]=0;a[(c[mf>>2]|0)+71>>0]=1}else{Af=g+500|0;c[Af>>2]=(c[Af>>2]|0)+1}c[(c[hd>>2]|0)+24>>2]=c[(c[mf>>2]|0)+492>>2];c[(c[mf>>2]|0)+492>>2]=c[hd>>2];Af=(c[mf>>2]|0)+512|0;yf=c[Af+4>>2]|0;j=(c[hd>>2]|0)+8|0;c[j>>2]=c[Af>>2];c[j+4>>2]=yf;j=(c[mf>>2]|0)+520|0;yf=c[j+4>>2]|0;Af=(c[hd>>2]|0)+16|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;break d}c[ua>>2]=0;c[pd>>2]=c[(c[mf>>2]|0)+492>>2];while(1){if(!(c[pd>>2]|0))break;if(!(Td(c[c[pd>>2]>>2]|0,c[ef>>2]|0)|0))break;c[ua>>2]=(c[ua>>2]|0)+1;c[pd>>2]=c[(c[pd>>2]|0)+24>>2]}if(!(c[pd>>2]|0)){Af=c[lf>>2]|0;c[Ce>>2]=c[ef>>2];SH(Af,40793,Ce);c[rf>>2]=1;break d}if((c[rb>>2]|0)==1?(c[(c[mf>>2]|0)+156>>2]|0)>0:0){SH(c[lf>>2]|0,40815,De);c[rf>>2]=5;break d}if(!(c[(c[pd>>2]|0)+24>>2]|0))g=(d[(c[mf>>2]|0)+71>>0]|0)!=0;else g=0;c[Ba>>2]=g&1;if(!((c[Ba>>2]|0)!=0&(c[rb>>2]|0)==1)){c[ua>>2]=(c[(c[mf>>2]|0)+500>>2]|0)-(c[ua>>2]|0)-1;g:do if((c[rb>>2]|0)==2){c[Aa>>2]=(c[(c[mf>>2]|0)+24>>2]&2|0)!=0&1;c[xa>>2]=0;while(1){if((c[xa>>2]|0)>=(c[(c[mf>>2]|0)+20>>2]|0))break g;c[rf>>2]=oI(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[xa>>2]<<4)+4>>2]|0,516,(c[Aa>>2]|0)==0&1)|0;if(c[rf>>2]|0){k=861;break c}c[xa>>2]=(c[xa>>2]|0)+1}}else c[Aa>>2]=0;while(0);c[xa>>2]=0;while(1){if((c[xa>>2]|0)>=(c[(c[mf>>2]|0)+20>>2]|0))break;c[rf>>2]=pI(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[xa>>2]<<4)+4>>2]|0,c[rb>>2]|0,c[ua>>2]|0)|0;if(c[rf>>2]|0){k=861;break c}c[xa>>2]=(c[xa>>2]|0)+1}if(c[Aa>>2]|0){Oh(c[mf>>2]|0);zg(c[mf>>2]|0);c[(c[mf>>2]|0)+24>>2]=c[(c[mf>>2]|0)+24>>2]|2}}else{Af=WH(c[lf>>2]|0,1)|0;c[rf>>2]=Af;if(Af){k=858;break c}a[(c[mf>>2]|0)+63>>0]=1;if((TH(c[lf>>2]|0)|0)==5){k=367;break c}a[(c[mf>>2]|0)+71>>0]=0;c[rf>>2]=c[(c[lf>>2]|0)+80>>2]}while(1){if((c[(c[mf>>2]|0)+492>>2]|0)==(c[pd>>2]|0))break;c[rd>>2]=c[(c[mf>>2]|0)+492>>2];c[(c[mf>>2]|0)+492>>2]=c[(c[rd>>2]|0)+24>>2];Sf(c[mf>>2]|0,c[rd>>2]|0);Af=(c[mf>>2]|0)+500|0;c[Af>>2]=(c[Af>>2]|0)+-1}g=c[pd>>2]|0;if((c[rb>>2]|0)==1){c[(c[mf>>2]|0)+492>>2]=c[g+24>>2];Sf(c[mf>>2]|0,c[pd>>2]|0);if(!(c[Ba>>2]|0)){Af=(c[mf>>2]|0)+500|0;c[Af>>2]=(c[Af>>2]|0)+-1}}else{Af=g+8|0;yf=c[Af+4>>2]|0;j=(c[mf>>2]|0)+512|0;c[j>>2]=c[Af>>2];c[j+4>>2]=yf;j=(c[pd>>2]|0)+16|0;yf=c[j+4>>2]|0;Af=(c[mf>>2]|0)+520|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf}if((c[Ba>>2]|0)==0|(c[rb>>2]|0)==2?(c[rf>>2]=nI(c[mf>>2]|0,c[rb>>2]|0,c[ua>>2]|0)|0,(c[rf>>2]|0)!=0):0){k=861;break c}break}case 1:{c[E>>2]=c[(c[pf>>2]|0)+4>>2];c[ta>>2]=c[(c[pf>>2]|0)+8>>2];if((c[E>>2]|0)==(d[(c[mf>>2]|0)+63>>0]|0)){if(c[E>>2]|0)g=(c[ta>>2]|0)!=0?40924:40967;else g=41008;SH(c[lf>>2]|0,g,Fe);c[rf>>2]=1;break d}if(c[ta>>2]|0){k=391;break c}if(!(c[E>>2]|0)){k=395;break c}if((c[(c[mf>>2]|0)+156>>2]|0)<=0){k=395;break c}SH(c[lf>>2]|0,40869,Ee);c[rf>>2]=5;break}case 2:{if((c[(c[pf>>2]|0)+8>>2]|0)!=0?(c[(c[mf>>2]|0)+24>>2]&33554432|0)!=0:0){k=407;break c}c[yb>>2]=c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4)+4>>2];if(c[yb>>2]|0){c[rf>>2]=mg(c[yb>>2]|0,c[(c[pf>>2]|0)+8>>2]|0)|0;if((c[rf>>2]&255|0)==5){k=410;break c}if(c[rf>>2]|0){k=861;break c}do if((c[(c[pf>>2]|0)+8>>2]|0)!=0?((e[(c[lf>>2]|0)+88>>1]|0)>>>5&1|0)!=0:0){if((d[(c[mf>>2]|0)+63>>0]|0)!=0?(c[(c[mf>>2]|0)+152>>2]|0)<=1:0)break;if(!(c[(c[lf>>2]|0)+104>>2]|0)){Af=(c[mf>>2]|0)+504|0;c[Af>>2]=(c[Af>>2]|0)+1;c[(c[lf>>2]|0)+104>>2]=(c[(c[mf>>2]|0)+500>>2]|0)+(c[(c[mf>>2]|0)+504>>2]|0)}c[rf>>2]=nI(c[mf>>2]|0,0,(c[(c[lf>>2]|0)+104>>2]|0)-1|0)|0;if(!(c[rf>>2]|0))c[rf>>2]=sI(c[yb>>2]|0,c[(c[lf>>2]|0)+104>>2]|0)|0;Af=(c[mf>>2]|0)+512|0;yf=c[Af+4>>2]|0;j=(c[lf>>2]|0)+152|0;c[j>>2]=c[Af>>2];c[j+4>>2]=yf;j=(c[mf>>2]|0)+520|0;yf=c[j+4>>2]|0;Af=(c[lf>>2]|0)+160|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf}while(0);ng(c[yb>>2]|0,1,pa);c[la>>2]=c[(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4)+12>>2]|0)+4>>2]}else{c[pa>>2]=0;c[la>>2]=0}if(d[(c[pf>>2]|0)+3>>0]|0){if((c[pa>>2]|0)==(c[(c[pf>>2]|0)+12>>2]|0)?(c[la>>2]|0)==(c[(c[pf>>2]|0)+16>>2]|0):0)break d;Sf(c[mf>>2]|0,c[(c[lf>>2]|0)+44>>2]|0);Af=nh(c[mf>>2]|0,41056)|0;c[(c[lf>>2]|0)+44>>2]=Af;if((c[c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4)+12>>2]>>2]|0)!=(c[pa>>2]|0))rj(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0);Af=(c[lf>>2]|0)+88|0;b[Af>>1]=b[Af>>1]&-9|8;c[rf>>2]=17}break}case 51:{c[ha>>2]=c[(c[pf>>2]|0)+4>>2];c[ga>>2]=c[(c[pf>>2]|0)+12>>2];ng(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[ha>>2]<<4)+4>>2]|0,c[ga>>2]|0,qa);c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;yf=c[qa>>2]|0;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31;break}case 52:{c[Ac>>2]=(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4);c[rf>>2]=yg(c[(c[Ac>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+8>>2]|0,c[(c[pf>>2]|0)+12>>2]|0)|0;g=c[pf>>2]|0;if((c[(c[pf>>2]|0)+8>>2]|0)!=1){if((c[g+8>>2]|0)==2)a[(c[(c[Ac>>2]|0)+12>>2]|0)+76>>0]=c[(c[pf>>2]|0)+12>>2]}else{c[c[(c[Ac>>2]|0)+12>>2]>>2]=c[g+12>>2];Af=(c[mf>>2]|0)+24|0;c[Af>>2]=c[Af>>2]|2}if((c[(c[pf>>2]|0)+4>>2]|0)==1){Oh(c[mf>>2]|0);Af=(c[lf>>2]|0)+88|0;b[Af>>1]=b[Af>>1]&-9}break}case 53:{c[qc>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];if((c[qc>>2]|0)!=0?(c[(c[qc>>2]|0)+8>>2]|0)==(c[(c[pf>>2]|0)+8>>2]|0):0)k=453;else k=438;break}case 55:case 54:{k=438;break}case 57:case 56:{c[vc>>2]=tI(c[lf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+8>>2]|0,-1,0)|0;if(!(c[vc>>2]|0)){k=860;break a}a[(c[vc>>2]|0)+2>>0]=1;Af=(c[vc>>2]|0)+5|0;a[Af>>0]=a[Af>>0]&-2|1;c[rf>>2]=Xj(c[c[mf>>2]>>2]|0,0,c[mf>>2]|0,(c[vc>>2]|0)+20|0,5|d[(c[pf>>2]|0)+3>>0],1054)|0;if(!(c[rf>>2]|0))c[rf>>2]=mg(c[(c[vc>>2]|0)+20>>2]|0,1)|0;do if(!(c[rf>>2]|0)){Af=c[(c[pf>>2]|0)+16>>2]|0;c[Uc>>2]=Af;g=c[(c[vc>>2]|0)+20>>2]|0;if(!Af){c[rf>>2]=uI(g,1,4,0,c[(c[vc>>2]|0)+16>>2]|0)|0;a[(c[vc>>2]|0)+4>>0]=1;break}c[rf>>2]=wI(g,Hd,2|d[(c[pf>>2]|0)+3>>0])|0;if(!(c[rf>>2]|0)){c[(c[vc>>2]|0)+24>>2]=c[Uc>>2];c[rf>>2]=uI(c[(c[vc>>2]|0)+20>>2]|0,c[Hd>>2]|0,4,c[Uc>>2]|0,c[(c[vc>>2]|0)+16>>2]|0)|0}a[(c[vc>>2]|0)+4>>0]=0}while(0);Af=(c[vc>>2]|0)+5|0;a[Af>>0]=a[Af>>0]&-5|((d[(c[pf>>2]|0)+3>>0]|0)!=8&1)<<2&255;break}case 58:{c[wc>>2]=tI(c[lf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+8>>2]|0,-1,1)|0;if(!(c[wc>>2]|0)){k=860;break a}c[(c[wc>>2]|0)+24>>2]=c[(c[pf>>2]|0)+16>>2];c[rf>>2]=xI(c[mf>>2]|0,c[(c[pf>>2]|0)+12>>2]|0,c[wc>>2]|0)|0;break}case 59:{c[Db>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];j=(c[Db>>2]|0)+32|0;Af=j;yf=c[Af>>2]|0;Af=c[Af+4>>2]|0;f=gR(yf|0,Af|0,1,0)|0;c[j>>2]=f;c[j+4>>2]=C;if((yf|0)==0&(Af|0)==0)k=15;break}case 60:{c[xc>>2]=tI(c[lf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+12>>2]|0,-1,3)|0;if(!(c[xc>>2]|0)){k=860;break a}a[(c[xc>>2]|0)+2>>0]=1;c[(c[xc>>2]|0)+16>>2]=c[(c[pf>>2]|0)+8>>2];a[(c[xc>>2]|0)+4>>0]=1;break}case 61:{yI(c[lf>>2]|0,c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2]|0);c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2]=0;break}case 66:case 65:case 64:case 63:{c[Eb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[kb>>2]=d[c[pf>>2]>>0];c[I>>2]=0;a[(c[Eb>>2]|0)+2>>0]=0;if(a[(c[Eb>>2]|0)+4>>0]|0){c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if((e[(c[Qc>>2]|0)+8>>1]&14|0)==2)xh(c[Qc>>2]|0,0);yf=Zg(c[Qc>>2]|0)|0;Af=ma;c[Af>>2]=yf;c[Af+4>>2]=C;do if(!(e[(c[Qc>>2]|0)+8>>1]&4)){if(!(e[(c[Qc>>2]|0)+8>>1]&8)){k=15;break d}Af=ma;if(+h[c[Qc>>2]>>3]<+((c[Af>>2]|0)>>>0)+4294967296.0*+(c[Af+4>>2]|0)){if(c[kb>>2]&1)break;c[kb>>2]=(c[kb>>2]|0)+-1;break}Af=ma;if(+h[c[Qc>>2]>>3]>+((c[Af>>2]|0)>>>0)+4294967296.0*+(c[Af+4>>2]|0)?(c[kb>>2]&1|0)==1:0)c[kb>>2]=(c[kb>>2]|0)+1}while(0);k=ma;c[rf>>2]=eF(c[(c[Eb>>2]|0)+16>>2]|0,0,c[k>>2]|0,c[k+4>>2]|0,0,Wd)|0;k=ma;yf=c[k+4>>2]|0;Af=(c[Eb>>2]|0)+40|0;c[Af>>2]=c[k>>2];c[Af+4>>2]=yf;if(c[rf>>2]|0){k=861;break c}else k=489}else{if(zI(c[(c[Eb>>2]|0)+16>>2]|0,2)|0)c[I>>2]=1;c[Za>>2]=c[(c[pf>>2]|0)+16>>2];c[Kd>>2]=c[(c[Eb>>2]|0)+24>>2];b[Kd+8>>1]=c[Za>>2];a[Kd+10>>0]=(1&(c[kb>>2]|0)-63|0)!=0?-1:1;c[Kd+4>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if(e[(c[Kd+4>>2]|0)+8>>1]&16384)Vg(c[Kd+4>>2]|0)|0;a[Kd+14>>0]=0;c[rf>>2]=eF(c[(c[Eb>>2]|0)+16>>2]|0,Kd,0,0,0,Wd)|0;if(c[rf>>2]|0){k=861;break c}if(!((c[I>>2]|0)!=0?(d[Kd+14>>0]|0)==0:0))k=489}do if((k|0)==489){k=0;a[(c[Eb>>2]|0)+3>>0]=0;c[(c[Eb>>2]|0)+56>>2]=0;g=c[Wd>>2]|0;if((c[kb>>2]|0)>=65){if((g|0)>=0?!((c[Wd>>2]|0)==0&(c[kb>>2]|0)==66):0){c[Wd>>2]=0;break}c[Wd>>2]=0;c[rf>>2]=TE(c[(c[Eb>>2]|0)+16>>2]|0,Wd)|0;if(c[rf>>2]|0){k=861;break c}else break}else{if((g|0)<=0?!((c[Wd>>2]|0)==0&(c[kb>>2]|0)==63):0){c[Wd>>2]=AI(c[(c[Eb>>2]|0)+16>>2]|0)|0;break}c[Wd>>2]=0;c[rf>>2]=UE(c[(c[Eb>>2]|0)+16>>2]|0,Wd)|0;if(c[rf>>2]|0){k=861;break c}else break}}while(0);if(!(c[Wd>>2]|0)){if(c[I>>2]|0)c[pf>>2]=(c[pf>>2]|0)+20}else k=15;break}case 69:case 68:case 67:{c[Fb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[Lc>>2]=0;g=c[(c[Fb>>2]|0)+24>>2]|0;if((c[(c[pf>>2]|0)+16>>2]|0)>0){c[Ld>>2]=g;b[Ld+8>>1]=c[(c[pf>>2]|0)+16>>2];c[Ld+4>>2]=c[Qc>>2];c[ya>>2]=0;while(1){if((c[ya>>2]|0)>=(e[Ld+8>>1]|0))break;if(e[(c[Ld+4>>2]|0)+((c[ya>>2]|0)*40|0)+8>>1]&16384)Vg((c[Ld+4>>2]|0)+((c[ya>>2]|0)*40|0)|0)|0;c[ya>>2]=(c[ya>>2]|0)+1}c[Mc>>2]=Ld}else{c[Mc>>2]=cF(g,r,183,Lc)|0;if(!(c[Mc>>2]|0)){k=860;break a}if(e[(c[Qc>>2]|0)+8>>1]&16384)Vg(c[Qc>>2]|0)|0;dF(c[(c[Fb>>2]|0)+24>>2]|0,c[(c[Qc>>2]|0)+12>>2]|0,c[(c[Qc>>2]|0)+16>>2]|0,c[Mc>>2]|0)}a[(c[Mc>>2]|0)+10>>0]=0;c[qe>>2]=0;h:do if((d[c[pf>>2]>>0]|0)==67){c[ya>>2]=0;while(1){if((c[ya>>2]|0)>=(e[(c[Mc>>2]|0)+8>>1]|0))break h;if(e[(c[(c[Mc>>2]|0)+4>>2]|0)+((c[ya>>2]|0)*40|0)+8>>1]&1)break;c[ya>>2]=(c[ya>>2]|0)+1}c[qe>>2]=1}while(0);c[rf>>2]=eF(c[(c[Fb>>2]|0)+16>>2]|0,c[Mc>>2]|0,0,0,0,Xd)|0;Sf(c[mf>>2]|0,c[Lc>>2]|0);if(!(c[rf>>2]|0)){c[(c[Fb>>2]|0)+28>>2]=c[Xd>>2];c[t>>2]=(c[Xd>>2]|0)==0&1;a[(c[Fb>>2]|0)+2>>0]=1-(c[t>>2]|0);a[(c[Fb>>2]|0)+3>>0]=0;c[(c[Fb>>2]|0)+56>>2]=0;if((d[c[pf>>2]>>0]|0)==69)if(c[t>>2]|0){k=15;break d}else break d;else if((c[qe>>2]|0)==0&(c[t>>2]|0)!=0)break d;else{k=15;break d}}break}case 70:{c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[Gb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[hc>>2]=c[(c[Gb>>2]|0)+16>>2];c[Yd>>2]=0;Af=c[Qc>>2]|0;yf=c[Af+4>>2]|0;j=na;c[j>>2]=c[Af>>2];c[j+4>>2]=yf;j=na;c[rf>>2]=eF(c[hc>>2]|0,0,c[j>>2]|0,c[j+4>>2]|0,0,Yd)|0;j=na;yf=c[j+4>>2]|0;Af=(c[Gb>>2]|0)+40|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;a[(c[Gb>>2]|0)+2>>0]=0;c[(c[Gb>>2]|0)+56>>2]=0;a[(c[Gb>>2]|0)+3>>0]=0;c[(c[Gb>>2]|0)+28>>2]=c[Yd>>2];if(c[Yd>>2]|0)if(!(c[(c[pf>>2]|0)+8>>2]|0))c[rf>>2]=Lj(78267)|0;else k=15;break}case 73:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;Af=(c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2]|0)+32|0;yf=Af;j=c[yf>>2]|0;yf=c[yf+4>>2]|0;f=gR(j|0,yf|0,1,0)|0;c[Af>>2]=f;c[Af+4>>2]=C;Af=c[id>>2]|0;c[Af>>2]=j;c[Af+4>>2]=yf;break}case 74:{Af=ue;c[Af>>2]=0;c[Af+4>>2]=0;c[Zd>>2]=0;c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;c[Hb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];do if(!((d[(c[Hb>>2]|0)+5>>0]|0)>>>1&1)){c[rf>>2]=BI(c[(c[Hb>>2]|0)+16>>2]|0,Zd)|0;if(c[rf>>2]|0){k=861;break c}if(c[Zd>>2]|0){Af=ue;c[Af>>2]=1;c[Af+4>>2]=0;break}c[rf>>2]=sH(c[(c[Hb>>2]|0)+16>>2]|0,ue)|0;Af=ue;yf=c[Af+4>>2]|0;if((yf|0)>2147483647|(yf|0)==2147483647&(c[Af>>2]|0)>>>0>=4294967295){Af=(c[Hb>>2]|0)+5|0;a[Af>>0]=a[Af>>0]&-3|2;break}else{yf=ue;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,1,0)|0;Af=ue;c[Af>>2]=yf;c[Af+4>>2]=C;break}}while(0);if(c[(c[pf>>2]|0)+12>>2]|0){if(c[(c[lf>>2]|0)+176>>2]|0){c[Hc>>2]=c[(c[lf>>2]|0)+176>>2];while(1){if(!(c[(c[Hc>>2]|0)+4>>2]|0))break;c[Hc>>2]=c[(c[Hc>>2]|0)+4>>2]}c[Xc>>2]=(c[(c[Hc>>2]|0)+16>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0)}else c[Xc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);wx(c[Xc>>2]|0)|0;Af=c[Xc>>2]|0;if((c[Af>>2]|0)==-1?(c[Af+4>>2]|0)==2147483647:0){k=542;break c}if((d[(c[Hb>>2]|0)+5>>0]|0)>>>1&1){k=542;break c}f=ue;yf=c[f>>2]|0;f=c[f+4>>2]|0;Af=c[Xc>>2]|0;Af=gR(c[Af>>2]|0,c[Af+4>>2]|0,1,0)|0;j=C;if((f|0)<(j|0)|(f|0)==(j|0)&yf>>>0>>0){yf=c[Xc>>2]|0;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,1,0)|0;Af=ue;c[Af>>2]=yf;c[Af+4>>2]=C}j=ue;yf=c[j+4>>2]|0;Af=c[Xc>>2]|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf}if((d[(c[Hb>>2]|0)+5>>0]|0)>>>1&1){c[D>>2]=0;do{Sd(8,ue);j=ue;Af=c[j+4>>2]&1073741823;yf=ue;c[yf>>2]=c[j>>2];c[yf+4>>2]=Af;yf=ue;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,1,0)|0;Af=ue;c[Af>>2]=yf;c[Af+4>>2]=C;Af=ue;Af=eF(c[(c[Hb>>2]|0)+16>>2]|0,0,c[Af>>2]|0,c[Af+4>>2]|0,0,Zd)|0;c[rf>>2]=Af;if(!((Af|0)==0&(c[Zd>>2]|0)==0))break;Af=(c[D>>2]|0)+1|0;c[D>>2]=Af}while((Af|0)<100);if((c[rf>>2]|0)==0&(c[Zd>>2]|0)==0){k=551;break c}}a[(c[Hb>>2]|0)+3>>0]=0;c[(c[Hb>>2]|0)+56>>2]=0;j=ue;yf=c[j+4>>2]|0;Af=c[id>>2]|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;break}case 84:case 75:{c[yc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);c[Ib>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];g=c[(c[pf>>2]|0)+12>>2]|0;if((d[c[pf>>2]>>0]|0)==75){c[Rc>>2]=(c[l>>2]|0)+(g*40|0);j=c[Rc>>2]|0;yf=c[j+4>>2]|0;Af=oa;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf}else{Af=oa;c[Af>>2]=g;c[Af+4>>2]=((g|0)<0)<<31>>31}if(d[(c[pf>>2]|0)+3>>0]&1){Af=(c[lf>>2]|0)+92|0;c[Af>>2]=(c[Af>>2]|0)+1}if(d[(c[pf>>2]|0)+3>>0]&2){yf=oa;j=c[yf>>2]|0;yf=c[yf+4>>2]|0;Af=nf;c[Af>>2]=j;c[Af+4>>2]=yf;Af=(c[mf>>2]|0)+32|0;c[Af>>2]=j;c[Af+4>>2]=yf}if(e[(c[yc>>2]|0)+8>>1]&1){c[(c[yc>>2]|0)+16>>2]=0;c[(c[yc>>2]|0)+12>>2]=0}if(d[(c[pf>>2]|0)+3>>0]&16)g=c[(c[Ib>>2]|0)+28>>2]|0;else g=0;c[le>>2]=g;if(e[(c[yc>>2]|0)+8>>1]&16384)c[hb>>2]=c[c[yc>>2]>>2];else c[hb>>2]=0;Af=oa;c[rf>>2]=CI(c[(c[Ib>>2]|0)+16>>2]|0,0,c[Af>>2]|0,c[Af+4>>2]|0,c[(c[yc>>2]|0)+16>>2]|0,c[(c[yc>>2]|0)+12>>2]|0,c[hb>>2]|0,(d[(c[pf>>2]|0)+3>>0]&8|0)!=0&1,c[le>>2]|0)|0;a[(c[Ib>>2]|0)+3>>0]=0;c[(c[Ib>>2]|0)+56>>2]=0;if(((c[rf>>2]|0)==0?(c[(c[mf>>2]|0)+212>>2]|0)!=0:0)?(c[(c[pf>>2]|0)+16>>2]|0)!=0:0){c[Ze>>2]=c[(c[(c[mf>>2]|0)+16>>2]|0)+(a[(c[Ib>>2]|0)+1>>0]<<4)>>2];c[jf>>2]=c[(c[pf>>2]|0)+16>>2];c[ob>>2]=(d[(c[pf>>2]|0)+3>>0]&4|0)!=0?23:18;Af=oa;Xb[c[(c[mf>>2]|0)+212>>2]&255](c[(c[mf>>2]|0)+208>>2]|0,c[ob>>2]|0,c[Ze>>2]|0,c[jf>>2]|0,c[Af>>2]|0,c[Af+4>>2]|0)}break}case 95:{c[Jb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];if((c[(c[mf>>2]|0)+212>>2]|0)!=0?(c[(c[pf>>2]|0)+16>>2]|0)!=0:0)g=(d[(c[Jb>>2]|0)+4>>0]|0)!=0;else g=0;a[R>>0]=g&1;if((d[(c[pf>>2]|0)+3>>0]|0)!=0?(d[R>>0]|0)!=0:0)sH(c[(c[Jb>>2]|0)+16>>2]|0,(c[Jb>>2]|0)+40|0)|0;c[rf>>2]=DI(c[(c[Jb>>2]|0)+16>>2]|0,a[(c[pf>>2]|0)+3>>0]|0)|0;c[(c[Jb>>2]|0)+56>>2]=0;if((c[rf>>2]|0)==0?(d[R>>0]|0)!=0:0){Af=(c[Jb>>2]|0)+40|0;Xb[c[(c[mf>>2]|0)+212>>2]&255](c[(c[mf>>2]|0)+208>>2]|0,9,c[(c[(c[mf>>2]|0)+16>>2]|0)+(a[(c[Jb>>2]|0)+1>>0]<<4)>>2]|0,c[(c[pf>>2]|0)+16>>2]|0,c[Af>>2]|0,c[Af+4>>2]|0)}if(c[(c[pf>>2]|0)+8>>2]&1){Af=(c[lf>>2]|0)+92|0;c[Af>>2]=(c[Af>>2]|0)+1}break}case 98:{QH(c[mf>>2]|0,c[(c[lf>>2]|0)+92>>2]|0);c[(c[lf>>2]|0)+92>>2]=0;break}case 99:{c[Kb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[ab>>2]=c[(c[pf>>2]|0)+16>>2];c[_d>>2]=0;c[rf>>2]=EI(c[Kb>>2]|0,c[Qc>>2]|0,c[ab>>2]|0,_d)|0;if(c[_d>>2]|0)k=15;break}case 100:{c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);c[Lb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[rf>>2]=FI(c[Lb>>2]|0,c[id>>2]|0)|0;c[(c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+12>>2]<<2)>>2]|0)+56>>2]=0;break}case 102:case 101:{c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);c[Mb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[ic>>2]=c[(c[Mb>>2]|0)+16>>2];g=c[ic>>2]|0;if(d[(c[Mb>>2]|0)+4>>0]|0){fI(g,Ka)|0;if((c[Ka>>2]|0)>>>0>(c[(c[mf>>2]|0)+88>>2]|0)>>>0){k=859;break c}}else{sH(g,La)|0;yf=La;f=c[yf+4>>2]|0;Af=c[(c[mf>>2]|0)+88>>2]|0;j=((Af|0)<0)<<31>>31;if((f|0)>(j|0)|((f|0)==(j|0)?(c[yf>>2]|0)>>>0>Af>>>0:0)){k=859;break c}c[Ka>>2]=c[La>>2]}if(tx(c[id>>2]|0,(c[Ka>>2]|0)>>>0>32?c[Ka>>2]|0:32)|0){k=860;break a}c[(c[id>>2]|0)+12>>2]=c[Ka>>2];b[(c[id>>2]|0)+8>>1]=e[(c[id>>2]|0)+8>>1]&-49664|16;g=c[ic>>2]|0;f=c[Ka>>2]|0;j=c[(c[id>>2]|0)+16>>2]|0;if(!(d[(c[Mb>>2]|0)+4>>0]|0))c[rf>>2]=tH(g,0,f,j)|0;else c[rf>>2]=Mh(g,0,f,j)|0;a[(c[id>>2]|0)+10>>0]=1;break}case 103:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;c[Nb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];if(a[(c[Nb>>2]|0)+2>>0]|0){b[(c[id>>2]|0)+8>>1]=1;break d}g=c[Nb>>2]|0;do if(!(a[(c[Nb>>2]|0)+3>>0]|0)){f=c[Nb>>2]|0;if((d[g>>0]|0)==2){c[wd>>2]=c[c[f+16>>2]>>2];c[ad>>2]=c[c[wd>>2]>>2];c[rf>>2]=Yb[c[(c[ad>>2]|0)+48>>2]&255](c[(c[Nb>>2]|0)+16>>2]|0,xe)|0;GI(c[lf>>2]|0,c[wd>>2]|0);break}c[rf>>2]=HI(f)|0;if(c[rf>>2]|0){k=861;break c}if(a[(c[Nb>>2]|0)+2>>0]|0){b[(c[id>>2]|0)+8>>1]=1;break d}else{c[rf>>2]=sH(c[(c[Nb>>2]|0)+16>>2]|0,xe)|0;break}}else{j=g+40|0;yf=c[j+4>>2]|0;Af=xe;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf}while(0);j=xe;yf=c[j+4>>2]|0;Af=c[id>>2]|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;break}case 104:{c[Pb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];a[(c[Pb>>2]|0)+2>>0]=1;c[(c[Pb>>2]|0)+56>>2]=0;if(!(d[c[Pb>>2]>>0]|0))pB(c[(c[Pb>>2]|0)+16>>2]|0);break}case 105:{c[Qb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[jc>>2]=c[(c[Qb>>2]|0)+16>>2];c[$d>>2]=0;c[rf>>2]=BI(c[jc>>2]|0,$d)|0;a[(c[Qb>>2]|0)+2>>0]=c[$d>>2];a[(c[Qb>>2]|0)+3>>0]=0;c[(c[Qb>>2]|0)+56>>2]=0;c[(c[Qb>>2]|0)+28>>2]=c[(c[pf>>2]|0)+12>>2];if((c[$d>>2]|0)!=0?(c[(c[pf>>2]|0)+8>>2]|0)>0:0)k=15;break}case 107:case 106:{k=(c[lf>>2]|0)+108+8|0;c[k>>2]=(c[k>>2]|0)+1;k=609;break}case 108:{k=609;break}case 3:{c[Vb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[ce>>2]=0;c[rf>>2]=KI(c[mf>>2]|0,c[Vb>>2]|0,ce)|0;k=616;break}case 5:case 4:{if(c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2]|0)k=615;break}case 7:case 6:{k=615;break}case 110:case 109:{c[_b>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[Pc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);if(d[(c[pf>>2]|0)+3>>0]&1){Af=(c[lf>>2]|0)+92|0;c[Af>>2]=(c[Af>>2]|0)+1}if(e[(c[Pc>>2]|0)+8>>1]&16384)g=Vg(c[Pc>>2]|0)|0;else g=0;c[rf>>2]=g;if(!(c[rf>>2]|0)){if((d[c[pf>>2]>>0]|0)==109){c[rf>>2]=LI(c[_b>>2]|0,c[Pc>>2]|0)|0;break d}c[$a>>2]=c[(c[Pc>>2]|0)+12>>2];c[cf>>2]=c[(c[Pc>>2]|0)+16>>2];g=c[$a>>2]|0;if(d[(c[pf>>2]|0)+3>>0]&16)f=c[(c[_b>>2]|0)+28>>2]|0;else f=0;c[rf>>2]=CI(c[(c[_b>>2]|0)+16>>2]|0,c[cf>>2]|0,g,((g|0)<0)<<31>>31,19266,0,0,c[(c[pf>>2]|0)+12>>2]|0,f)|0;c[(c[_b>>2]|0)+56>>2]=0}break}case 111:{c[$b>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[lc>>2]=c[(c[$b>>2]|0)+16>>2];c[Md>>2]=c[(c[$b>>2]|0)+24>>2];b[Md+8>>1]=c[(c[pf>>2]|0)+12>>2];a[Md+10>>0]=0;c[Md+4>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);c[rf>>2]=eF(c[lc>>2]|0,Md,0,0,0,de)|0;if((c[rf>>2]|0)==0&(c[de>>2]|0)==0)c[rf>>2]=DI(c[lc>>2]|0,4)|0;c[(c[$b>>2]|0)+56>>2]=0;break}case 113:case 112:{c[ac>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[rf>>2]=HI(c[ac>>2]|0)|0;if(c[rf>>2]|0){k=861;break c}if(a[(c[ac>>2]|0)+2>>0]|0){fh((c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0)|0);break d}Af=ge;c[Af>>2]=0;c[Af+4>>2]=0;c[rf>>2]=MI(c[mf>>2]|0,c[(c[ac>>2]|0)+16>>2]|0,ge)|0;if(c[rf>>2]|0){k=861;break c}if((d[c[pf>>2]>>0]|0)==112){c[qd>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+12>>2]<<2)>>2];a[(c[qd>>2]|0)+2>>0]=0;j=ge;yf=c[j+4>>2]|0;Af=(c[qd>>2]|0)+40|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;a[(c[qd>>2]|0)+3>>0]=1;c[(c[qd>>2]|0)+52>>2]=c[(c[pf>>2]|0)+16>>2];c[(c[qd>>2]|0)+48>>2]=c[ac>>2];break d}else{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;j=ge;yf=c[j+4>>2]|0;Af=c[id>>2]|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;b[(c[id>>2]|0)+8>>1]=4;break d}}case 117:case 116:case 115:case 114:{c[bc>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[Nd>>2]=c[(c[bc>>2]|0)+24>>2];b[Nd+8>>1]=c[(c[pf>>2]|0)+16>>2];g=Nd+10|0;if((d[c[pf>>2]>>0]|0)<116)a[g>>0]=-1;else a[g>>0]=0;c[Nd+4>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[ee>>2]=0;c[rf>>2]=NI(c[mf>>2]|0,c[bc>>2]|0,Nd,ee)|0;g=c[ee>>2]|0;if(!(d[c[pf>>2]>>0]&1))c[ee>>2]=0-g;else c[ee>>2]=g+1;if((c[ee>>2]|0)>0)k=15;break}case 118:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;b[(c[id>>2]|0)+8>>1]=1;if((c[(c[mf>>2]|0)+152>>2]|0)>((c[(c[mf>>2]|0)+164>>2]|0)+1|0)){c[rf>>2]=6;a[(c[lf>>2]|0)+86>>0]=2;break d}c[ja>>2]=c[(c[pf>>2]|0)+12>>2];c[ra>>2]=0;c[rf>>2]=OI(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[ja>>2]<<4)+4>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,ra)|0;b[(c[id>>2]|0)+8>>1]=4;yf=c[ra>>2]|0;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31;if((c[rf>>2]|0)==0&(c[ra>>2]|0)!=0){PI(c[mf>>2]|0,c[ja>>2]|0,c[ra>>2]|0,c[(c[pf>>2]|0)+4>>2]|0);a[fe>>0]=(c[ja>>2]|0)+1}break}case 119:{c[Ta>>2]=0;c[rf>>2]=QI(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+8>>2]<<4)+4>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,(c[(c[pf>>2]|0)+12>>2]|0)!=0?Ta:0)|0;if((c[(c[pf>>2]|0)+12>>2]|0)!=0?(Af=(c[lf>>2]|0)+92|0,c[Af>>2]=(c[Af>>2]|0)+(c[Ta>>2]|0),(c[(c[pf>>2]|0)+12>>2]|0)>0):0){yf=c[Ta>>2]|0;Af=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0)|0;j=Af;yf=gR(c[j>>2]|0,c[j+4>>2]|0,yf|0,((yf|0)<0)<<31>>31|0)|0;c[Af>>2]=yf;c[Af+4>>2]=C}break}case 120:{c[cc>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];if((d[c[cc>>2]>>0]|0)==1){RI(c[mf>>2]|0,c[(c[cc>>2]|0)+16>>2]|0);break d}else{c[rf>>2]=SI(c[(c[cc>>2]|0)+16>>2]|0)|0;break d}}case 122:case 121:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;c[Id>>2]=0;c[Cc>>2]=(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4);if((d[c[pf>>2]>>0]|0)==122)c[Q>>2]=1;else c[Q>>2]=2;c[rf>>2]=wI(c[(c[Cc>>2]|0)+4>>2]|0,Id,c[Q>>2]|0)|0;yf=c[Id>>2]|0;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31;break}case 123:{c[ka>>2]=c[(c[pf>>2]|0)+4>>2];c[df>>2]=(c[ka>>2]|0)==1?20769:20788;c[za>>2]=c[mf>>2];c[za+8>>2]=c[(c[pf>>2]|0)+4>>2];c[za+4>>2]=(c[lf>>2]|0)+44;Af=c[mf>>2]|0;j=c[df>>2]|0;yf=c[(c[pf>>2]|0)+16>>2]|0;c[Ge>>2]=c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[ka>>2]<<4)>>2];c[Ge+4>>2]=j;c[Ge+8>>2]=yf;c[gf>>2]=Bh(Af,41084,Ge)|0;if(!(c[gf>>2]|0))c[rf>>2]=7;else{a[(c[mf>>2]|0)+140+5>>0]=1;c[za+12>>2]=0;c[rf>>2]=$e(c[mf>>2]|0,c[gf>>2]|0,140,za,0)|0;if(!(c[rf>>2]|0))c[rf>>2]=c[za+12>>2];Sf(c[mf>>2]|0,c[gf>>2]|0);a[(c[mf>>2]|0)+140+5>>0]=0}if(c[rf>>2]|0)zg(c[mf>>2]|0);if((c[rf>>2]|0)==7){k=860;break a}break}case 124:{c[rf>>2]=Aj(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0)|0;break}case 125:{TI(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+16>>2]|0);break}case 126:{UI(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+16>>2]|0);break}case 127:{VI(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+16>>2]|0);break}case 128:{c[eb>>2]=c[(c[pf>>2]|0)+8>>2];c[q>>2]=Fw(c[mf>>2]|0,(c[eb>>2]|0)+1<<2,0)|0;if(!(c[q>>2]|0)){k=860;break a}c[Jd>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[Ea>>2]=0;while(1){g=c[Ea>>2]|0;if((c[Ea>>2]|0)>=(c[eb>>2]|0))break;Af=Zg((c[Oc>>2]|0)+(g*40|0)|0)|0;c[(c[q>>2]|0)+(c[Ea>>2]<<2)>>2]=Af;c[Ea>>2]=(c[Ea>>2]|0)+1}c[(c[q>>2]|0)+(g<<2)>>2]=0;c[Te>>2]=WI(c[(c[(c[mf>>2]|0)+16>>2]|0)+(d[(c[pf>>2]|0)+3>>0]<<4)+4>>2]|0,c[q>>2]|0,c[eb>>2]|0,c[c[Jd>>2]>>2]|0,Wa)|0;Sf(c[mf>>2]|0,c[q>>2]|0);yf=c[Wa>>2]|0;Af=c[Jd>>2]|0;j=Af;yf=fR(c[j>>2]|0,c[j+4>>2]|0,yf|0,((yf|0)<0)<<31>>31|0)|0;c[Af>>2]=yf;c[Af+4>>2]=C;fh(c[Oc>>2]|0);if(c[Wa>>2]|0){if(!(c[Te>>2]|0)){k=860;break a}dh(c[Oc>>2]|0,c[Te>>2]|0,-1,1,148)|0}Zt(c[Oc>>2]|0,d[H>>0]|0)|0;break}case 129:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[Pc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);if((e[(c[Oc>>2]|0)+8>>1]&32|0)==0?(XI(c[Oc>>2]|0),(e[(c[Oc>>2]|0)+8>>1]&32|0)==0):0){k=860;break a}Af=c[Pc>>2]|0;YI(c[c[Oc>>2]>>2]|0,c[Af>>2]|0,c[Af+4>>2]|0);break}case 130:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);if((e[(c[Oc>>2]|0)+8>>1]&32|0)!=0?(ZI(c[c[Oc>>2]>>2]|0,ye)|0)!=0:0){k=ye;eh((c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0)|0,c[k>>2]|0,c[k+4>>2]|0);k=9;break d}fh(c[Oc>>2]|0);k=8;break}case 131:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[va>>2]=c[(c[pf>>2]|0)+16>>2];if((e[(c[Oc>>2]|0)+8>>1]&32|0)==0?(XI(c[Oc>>2]|0),(e[(c[Oc>>2]|0)+8>>1]&32|0)==0):0){k=860;break a}if((c[va>>2]|0)!=0?(Af=c[Qc>>2]|0,c[J>>2]=_I(c[c[Oc>>2]>>2]|0,c[va>>2]|0,c[Af>>2]|0,c[Af+4>>2]|0)|0,(c[J>>2]|0)!=0):0){k=15;break d}if((c[va>>2]|0)>=0){Af=c[Qc>>2]|0;YI(c[c[Oc>>2]>>2]|0,c[Af>>2]|0,c[Af+4>>2]|0)}break}case 132:{c[kd>>2]=c[(c[pf>>2]|0)+16>>2];c[od>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if(a[(c[pf>>2]|0)+3>>0]|0){c[oe>>2]=c[(c[kd>>2]|0)+20>>2];c[Ic>>2]=c[(c[lf>>2]|0)+176>>2];while(1){if(!(c[Ic>>2]|0))break;if((c[(c[Ic>>2]|0)+28>>2]|0)==(c[oe>>2]|0))break;c[Ic>>2]=c[(c[Ic>>2]|0)+4>>2]}if(c[Ic>>2]|0)break d}if((c[(c[lf>>2]|0)+184>>2]|0)>=(c[(c[mf>>2]|0)+88+40>>2]|0)){c[rf>>2]=1;SH(c[lf>>2]|0,41148,He);break d}i:do if(!(e[(c[od>>2]|0)+8>>1]&64)){c[bb>>2]=(c[(c[kd>>2]|0)+8>>2]|0)+(c[(c[kd>>2]|0)+12>>2]|0);c[Sa>>2]=80+((c[bb>>2]|0)*40|0)+(c[(c[kd>>2]|0)+12>>2]<<2)+(c[(c[kd>>2]|0)+16>>2]|0);Af=c[Sa>>2]|0;c[Ic>>2]=ph(c[mf>>2]|0,Af,((Af|0)<0)<<31>>31)|0;if(!(c[Ic>>2]|0)){k=860;break a}Ug(c[od>>2]|0);b[(c[od>>2]|0)+8>>1]=64;c[c[od>>2]>>2]=c[Ic>>2];c[c[Ic>>2]>>2]=c[lf>>2];c[(c[Ic>>2]|0)+60>>2]=c[bb>>2];c[(c[Ic>>2]|0)+64>>2]=c[(c[kd>>2]|0)+12>>2];c[(c[Ic>>2]|0)+44>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;c[(c[Ic>>2]|0)+16>>2]=c[(c[lf>>2]|0)+8>>2];c[(c[Ic>>2]|0)+52>>2]=c[(c[lf>>2]|0)+28>>2];c[(c[Ic>>2]|0)+24>>2]=c[(c[lf>>2]|0)+56>>2];c[(c[Ic>>2]|0)+40>>2]=c[(c[lf>>2]|0)+36>>2];c[(c[Ic>>2]|0)+8>>2]=c[(c[lf>>2]|0)+4>>2];c[(c[Ic>>2]|0)+48>>2]=c[(c[lf>>2]|0)+32>>2];c[(c[Ic>>2]|0)+28>>2]=c[(c[kd>>2]|0)+20>>2];c[(c[Ic>>2]|0)+20>>2]=c[(c[lf>>2]|0)+200>>2];c[(c[Ic>>2]|0)+56>>2]=c[(c[lf>>2]|0)+196>>2];c[Fc>>2]=(c[Ic>>2]|0)+80+((c[(c[Ic>>2]|0)+60>>2]|0)*40|0);c[Yc>>2]=(c[Ic>>2]|0)+80;while(1){if((c[Yc>>2]|0)==(c[Fc>>2]|0))break i;b[(c[Yc>>2]|0)+8>>1]=128;c[(c[Yc>>2]|0)+32>>2]=c[mf>>2];c[Yc>>2]=(c[Yc>>2]|0)+40}}else c[Ic>>2]=c[c[od>>2]>>2];while(0);j=(c[lf>>2]|0)+184|0;c[j>>2]=(c[j>>2]|0)+1;c[(c[Ic>>2]|0)+4>>2]=c[(c[lf>>2]|0)+176>>2];j=nf;yf=c[j+4>>2]|0;Af=(c[Ic>>2]|0)+32|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;c[(c[Ic>>2]|0)+68>>2]=c[(c[lf>>2]|0)+92>>2];c[(c[Ic>>2]|0)+72>>2]=c[(c[c[lf>>2]>>2]|0)+80>>2];c[(c[lf>>2]|0)+92>>2]=0;c[(c[lf>>2]|0)+176>>2]=c[Ic>>2];Af=(c[Ic>>2]|0)+80+-40|0;c[l>>2]=Af;c[(c[lf>>2]|0)+8>>2]=Af;c[(c[lf>>2]|0)+28>>2]=c[(c[Ic>>2]|0)+60>>2];c[(c[lf>>2]|0)+36>>2]=c[(c[Ic>>2]|0)+64>>2]&65535;c[(c[lf>>2]|0)+56>>2]=(c[l>>2]|0)+(((c[(c[lf>>2]|0)+28>>2]|0)+1|0)*40|0);Af=c[c[kd>>2]>>2]|0;c[n>>2]=Af;c[(c[lf>>2]|0)+4>>2]=Af;c[(c[lf>>2]|0)+32>>2]=c[(c[kd>>2]|0)+4>>2];c[(c[lf>>2]|0)+200>>2]=(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[lf>>2]|0)+36>>2]<<2);c[(c[lf>>2]|0)+196>>2]=c[(c[kd>>2]|0)+16>>2];c[pf>>2]=(c[n>>2]|0)+-20;kR(c[(c[lf>>2]|0)+200>>2]|0,0,c[(c[lf>>2]|0)+196>>2]|0)|0;break}case 134:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;c[Jc>>2]=c[(c[lf>>2]|0)+176>>2];c[Nc>>2]=(c[(c[Jc>>2]|0)+16>>2]|0)+(((c[(c[pf>>2]|0)+4>>2]|0)+(c[(c[(c[Jc>>2]|0)+8>>2]|0)+((c[(c[Jc>>2]|0)+44>>2]|0)*20|0)+4>>2]|0)|0)*40|0);BF(c[id>>2]|0,c[Nc>>2]|0,4096);break}case 135:{g=c[pf>>2]|0;if(c[(c[mf>>2]|0)+24>>2]&16777216){yf=c[g+8>>2]|0;Af=(c[mf>>2]|0)+520|0;j=Af;yf=gR(c[j>>2]|0,c[j+4>>2]|0,yf|0,((yf|0)<0)<<31>>31|0)|0;c[Af>>2]=yf;c[Af+4>>2]=C;break d}f=c[(c[pf>>2]|0)+8>>2]|0;j=((f|0)<0)<<31>>31;if(c[g+4>>2]|0){Af=(c[mf>>2]|0)+512|0;yf=Af;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,f|0,j|0)|0;c[Af>>2]=yf;c[Af+4>>2]=C;break d}else{Af=(c[lf>>2]|0)+144|0;yf=Af;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,f|0,j|0)|0;c[Af>>2]=yf;c[Af+4>>2]=C;break d}}case 136:if(c[(c[pf>>2]|0)+4>>2]|0){Af=(c[mf>>2]|0)+512|0;if(!((c[Af>>2]|0)==0&(c[Af+4>>2]|0)==0))break d;Af=(c[mf>>2]|0)+520|0; +if((c[Af>>2]|0)==0&(c[Af+4>>2]|0)==0){k=15;break d}else break d}else{Af=(c[lf>>2]|0)+144|0;if(!((c[Af>>2]|0)==0&(c[Af+4>>2]|0)==0))break d;Af=(c[mf>>2]|0)+520|0;if((c[Af>>2]|0)==0&(c[Af+4>>2]|0)==0){k=15;break d}else break d}case 137:{if(c[(c[lf>>2]|0)+176>>2]|0){c[Kc>>2]=c[(c[lf>>2]|0)+176>>2];while(1){if(!(c[(c[Kc>>2]|0)+4>>2]|0))break;c[Kc>>2]=c[(c[Kc>>2]|0)+4>>2]}c[Oc>>2]=(c[(c[Kc>>2]|0)+16>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0)}else c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);wx(c[Oc>>2]|0)|0;c[Pc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0);wx(c[Pc>>2]|0)|0;yf=c[Oc>>2]|0;f=c[yf+4>>2]|0;Af=c[Pc>>2]|0;j=c[Af+4>>2]|0;if((f|0)<(j|0)|((f|0)==(j|0)?(c[yf>>2]|0)>>>0<(c[Af>>2]|0)>>>0:0)){j=c[Pc>>2]|0;yf=c[j+4>>2]|0;Af=c[Oc>>2]|0;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf}break}case 138:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);Af=c[Oc>>2]|0;yf=c[Af+4>>2]|0;if((yf|0)>0|(yf|0)==0&(c[Af>>2]|0)>>>0>0){Af=c[(c[pf>>2]|0)+12>>2]|0;k=c[Oc>>2]|0;yf=k;Af=fR(c[yf>>2]|0,c[yf+4>>2]|0,Af|0,((Af|0)<0)<<31>>31|0)|0;c[k>>2]=Af;c[k+4>>2]=C;k=15}break}case 139:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;Af=c[Oc>>2]|0;yf=c[Af+4>>2]|0;if((yf|0)<0|(yf|0)==0&(c[Af>>2]|0)>>>0<=0){g=-1;f=-1}else{g=c[Oc>>2]|0;Af=c[Qc>>2]|0;yf=c[Af+4>>2]|0;if((yf|0)>0|(yf|0)==0&(c[Af>>2]|0)>>>0>0){j=c[Qc>>2]|0;f=c[j>>2]|0;j=c[j+4>>2]|0}else{f=0;j=0}g=gR(c[g>>2]|0,c[g+4>>2]|0,f|0,j|0)|0;f=C}Af=c[id>>2]|0;c[Af>>2]=g;c[Af+4>>2]=f;break}case 140:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);Af=c[Oc>>2]|0;if((c[Af>>2]|0)!=0|(c[Af+4>>2]|0)!=0){Af=c[(c[pf>>2]|0)+12>>2]|0;k=c[Oc>>2]|0;yf=k;Af=fR(c[yf>>2]|0,c[yf+4>>2]|0,Af|0,((Af|0)<0)<<31>>31|0)|0;c[k>>2]=Af;c[k+4>>2]=C;k=15}break}case 141:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);Af=c[Oc>>2]|0;yf=Af;yf=gR(c[yf>>2]|0,c[yf+4>>2]|0,-1,-1)|0;c[Af>>2]=yf;c[Af+4>>2]=C;Af=c[Oc>>2]|0;if((c[Af>>2]|0)==0&(c[Af+4>>2]|0)==0)k=15;break}case 142:{c[Oc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);j=c[Oc>>2]|0;Af=j;yf=c[Af>>2]|0;Af=c[Af+4>>2]|0;f=gR(yf|0,Af|0,1,0)|0;c[j>>2]=f;c[j+4>>2]=C;if((yf|0)==0&(Af|0)==0)k=15;break}case 143:{c[Na>>2]=d[(c[pf>>2]|0)+3>>0];c[oc>>2]=Fw(c[mf>>2]|0,32+((c[Na>>2]|0)-1<<2)|0,0)|0;if(!(c[oc>>2]|0)){k=860;break a}c[(c[oc>>2]|0)+8>>2]=0;c[(c[oc>>2]|0)+4>>2]=c[(c[pf>>2]|0)+16>>2];c[(c[oc>>2]|0)+16>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;c[(c[oc>>2]|0)+12>>2]=c[lf>>2];a[(c[oc>>2]|0)+26>>0]=c[Na>>2];a[(c[pf>>2]|0)+1>>0]=-20;c[(c[pf>>2]|0)+16>>2]=c[oc>>2];a[c[pf>>2]>>0]=-112;k=740;break}case 144:{k=740;break}case 145:{c[_c>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[rf>>2]=EF(c[_c>>2]|0,c[(c[pf>>2]|0)+16>>2]|0)|0;if(c[rf>>2]|0){Af=c[lf>>2]|0;c[Je>>2]=ae(c[_c>>2]|0)|0;SH(Af,19255,Je)}Zt(c[_c>>2]|0,d[H>>0]|0)|0;if(VH(c[_c>>2]|0)|0){k=859;break c}break}case 8:{c[p>>2]=0;c[p+8>>2]=-1;c[p+4>>2]=-1;c[rf>>2]=ki(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+8>>2]|0,p+4|0,p+8|0)|0;if((c[rf>>2]|0)==5){c[rf>>2]=0;c[p>>2]=1}c[aa>>2]=0;c[$c>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);while(1){if((c[aa>>2]|0)>=3)break d;Af=c[p+(c[aa>>2]<<2)>>2]|0;eh(c[$c>>2]|0,Af,((Af|0)<0)<<31>>31);c[aa>>2]=(c[aa>>2]|0)+1;c[$c>>2]=(c[$c>>2]|0)+40}}case 9:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;c[F>>2]=c[(c[pf>>2]|0)+12>>2];c[Ab>>2]=c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4)+4>>2];c[jd>>2]=Of(c[Ab>>2]|0)|0;c[G>>2]=qg(c[jd>>2]|0)|0;if((c[F>>2]|0)==-1)c[F>>2]=c[G>>2];if(!($I(c[jd>>2]|0)|0))c[F>>2]=c[G>>2];c[af>>2]=Fi(c[jd>>2]|0,1)|0;do if((c[F>>2]|0)==5){if((If(c[af>>2]|0)|0)!=0?(aJ(c[jd>>2]|0)|0)!=0:0)break;c[F>>2]=c[G>>2]}while(0);do if((c[F>>2]|0)!=(c[G>>2]|0)?(c[G>>2]|0)==5|(c[F>>2]|0)==5:0){if((a[(c[mf>>2]|0)+63>>0]|0)!=0?(c[(c[mf>>2]|0)+152>>2]|0)<=1:0){if((c[G>>2]|0)==5){c[rf>>2]=bJ(c[jd>>2]|0)|0;if(!(c[rf>>2]|0))cJ(c[jd>>2]|0,c[F>>2]|0)|0}else if((c[G>>2]|0)==4)cJ(c[jd>>2]|0,2)|0;if(c[rf>>2]|0)break;c[rf>>2]=Ag(c[Ab>>2]|0,(c[F>>2]|0)==5?2:1)|0;break}c[rf>>2]=1;Af=c[lf>>2]|0;c[Ke>>2]=(c[F>>2]|0)==5?41185:41190;SH(Af,41197,Ke);break d}while(0);if(c[rf>>2]|0)c[F>>2]=c[G>>2];c[F>>2]=cJ(c[jd>>2]|0,c[F>>2]|0)|0;b[(c[id>>2]|0)+8>>1]=2562;Af=RB(c[F>>2]|0)|0;c[(c[id>>2]|0)+16>>2]=Af;Af=If(c[(c[id>>2]|0)+16>>2]|0)|0;c[(c[id>>2]|0)+12>>2]=Af;a[(c[id>>2]|0)+10>>0]=1;Zt(c[id>>2]|0,d[H>>0]|0)|0;break}case 10:{c[rf>>2]=dJ((c[lf>>2]|0)+44|0,c[mf>>2]|0)|0;break}case 146:{c[Bb>>2]=c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4)+4>>2];c[rf>>2]=eJ(c[Bb>>2]|0)|0;if((c[rf>>2]|0)==101){c[rf>>2]=0;k=15}break}case 147:if(c[(c[pf>>2]|0)+4>>2]|0){Af=(c[lf>>2]|0)+88|0;b[Af>>1]=b[Af>>1]&-9|8;break d}else{Oh(c[mf>>2]|0);break d}case 148:{a[Ca>>0]=c[(c[pf>>2]|0)+12>>2];if((d[Ca>>0]|0)==0?0!=(c[(c[mf>>2]|0)+24>>2]&16384|0):0)break d;c[qb>>2]=c[(c[pf>>2]|0)+4>>2];c[rf>>2]=fJ(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[qb>>2]<<4)+4>>2]|0,c[(c[pf>>2]|0)+8>>2]|0,a[Ca>>0]|0)|0;if((c[rf>>2]&255|0)==6){c[Ue>>2]=c[(c[pf>>2]|0)+16>>2];Af=c[lf>>2]|0;c[Le>>2]=c[Ue>>2];SH(Af,41249,Le)}break}case 149:{c[ud>>2]=c[(c[pf>>2]|0)+16>>2];c[rf>>2]=gJ(c[mf>>2]|0,c[ud>>2]|0)|0;if(c[ud>>2]|0)GI(c[lf>>2]|0,c[(c[ud>>2]|0)+8>>2]|0);break}case 150:{g=ke;f=g+40|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(f|0));c[ke+32>>2]=c[mf>>2];c[rf>>2]=gh(ke,(c[l>>2]|0)+((c[(c[pf>>2]|0)+8>>2]|0)*40|0)|0)|0;c[hf>>2]=ae(ke)|0;if(c[hf>>2]|0)c[rf>>2]=hJ(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[hf>>2]|0,(c[lf>>2]|0)+44|0)|0;Ug(ke);break}case 151:{Af=(c[mf>>2]|0)+164|0;c[Af>>2]=(c[Af>>2]|0)+1;c[rf>>2]=iJ(c[mf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[(c[pf>>2]|0)+16>>2]|0)|0;Af=(c[mf>>2]|0)+164|0;c[Af>>2]=(c[Af>>2]|0)+-1;break}case 152:{c[rc>>2]=0;c[sd>>2]=0;c[xd>>2]=c[(c[(c[pf>>2]|0)+16>>2]|0)+8>>2];if((c[xd>>2]|0)!=0?(c[c[xd>>2]>>2]|0)!=0:0){c[bd>>2]=c[c[xd>>2]>>2];c[rf>>2]=Yb[c[(c[bd>>2]|0)+24>>2]&255](c[xd>>2]|0,sd)|0;GI(c[lf>>2]|0,c[xd>>2]|0);if(c[rf>>2]|0)break d;c[c[sd>>2]>>2]=c[xd>>2];c[rc>>2]=tI(c[lf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,0,-1,2)|0;if(!(c[rc>>2]|0)){k=804;break c}c[(c[rc>>2]|0)+16>>2]=c[sd>>2];Af=(c[xd>>2]|0)+4|0;c[Af>>2]=(c[Af>>2]|0)+1;break d}c[rf>>2]=6;break}case 11:{c[ld>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[xb>>2]=(c[ld>>2]|0)+40;c[sc>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[td>>2]=c[(c[sc>>2]|0)+16>>2];c[yd>>2]=c[c[td>>2]>>2];c[cd>>2]=c[c[yd>>2]>>2];c[Oa>>2]=c[c[xb>>2]>>2];c[sa>>2]=c[c[ld>>2]>>2];c[Ud>>2]=0;c[u>>2]=c[(c[lf>>2]|0)+12>>2];c[T>>2]=0;while(1){if((c[T>>2]|0)>=(c[Oa>>2]|0))break;c[(c[u>>2]|0)+(c[T>>2]<<2)>>2]=(c[xb>>2]|0)+(((c[T>>2]|0)+1|0)*40|0);c[T>>2]=(c[T>>2]|0)+1}c[rf>>2]=Zb[c[(c[cd>>2]|0)+32>>2]&255](c[td>>2]|0,c[sa>>2]|0,c[(c[pf>>2]|0)+16>>2]|0,c[Oa>>2]|0,c[u>>2]|0)|0;GI(c[lf>>2]|0,c[yd>>2]|0);if(!(c[rf>>2]|0))c[Ud>>2]=Tb[c[(c[cd>>2]|0)+40>>2]&255](c[td>>2]|0)|0;a[(c[sc>>2]|0)+2>>0]=0;if(c[Ud>>2]|0)k=15;break}case 153:{c[tc>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[Ec>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);if(a[(c[tc>>2]|0)+2>>0]|0){fh(c[Ec>>2]|0);break d}c[zd>>2]=c[c[(c[tc>>2]|0)+16>>2]>>2];c[dd>>2]=c[c[zd>>2]>>2];c[ie>>2]=0;c[ie+4>>2]=0;c[ie+8>>2]=0;c[ie+12>>2]=0;c[ie+16>>2]=0;c[ie+20>>2]=0;c[ie+24>>2]=0;c[ie+28>>2]=0;c[ie>>2]=c[Ec>>2];b[(c[Ec>>2]|0)+8>>1]=e[(c[Ec>>2]|0)+8>>1]&-49664|1;c[rf>>2]=Ob[c[(c[dd>>2]|0)+44>>2]&255](c[(c[tc>>2]|0)+16>>2]|0,ie,c[(c[pf>>2]|0)+8>>2]|0)|0;GI(c[lf>>2]|0,c[zd>>2]|0);if(c[ie+20>>2]|0)c[rf>>2]=c[ie+20>>2];Zt(c[Ec>>2]|0,d[H>>0]|0)|0;if(VH(c[Ec>>2]|0)|0){k=859;break c}break}case 154:{c[Vd>>2]=0;c[uc>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];if(!(a[(c[uc>>2]|0)+2>>0]|0)){c[Ad>>2]=c[c[(c[uc>>2]|0)+16>>2]>>2];c[ed>>2]=c[c[Ad>>2]>>2];c[rf>>2]=Tb[c[(c[ed>>2]|0)+36>>2]&255](c[(c[uc>>2]|0)+16>>2]|0)|0;GI(c[lf>>2]|0,c[Ad>>2]|0);if(!(c[rf>>2]|0))c[Vd>>2]=Tb[c[(c[ed>>2]|0)+40>>2]&255](c[(c[uc>>2]|0)+16>>2]|0)|0;if(c[Vd>>2]|0)k=9;else k=8}break}case 155:{c[Bd>>2]=c[(c[(c[pf>>2]|0)+16>>2]|0)+8>>2];c[gd>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0);c[rf>>2]=Zt(c[gd>>2]|0,1)|0;if(!(c[rf>>2]|0)){c[rf>>2]=Yb[c[(c[c[Bd>>2]>>2]|0)+76>>2]&255](c[Bd>>2]|0,c[(c[gd>>2]|0)+16>>2]|0)|0;GI(c[lf>>2]|0,c[Bd>>2]|0);Af=(c[lf>>2]|0)+88|0;b[Af>>1]=b[Af>>1]&-9}break}case 12:{c[Cd>>2]=c[(c[(c[pf>>2]|0)+16>>2]|0)+8>>2];if((c[Cd>>2]|0)!=0?(c[c[Cd>>2]>>2]|0)!=0:0){c[fd>>2]=c[c[Cd>>2]>>2];c[Pa>>2]=c[(c[pf>>2]|0)+8>>2];if(!(c[(c[fd>>2]|0)+52>>2]|0))break d;a[Re>>0]=a[(c[mf>>2]|0)+70>>0]|0;c[v>>2]=c[(c[lf>>2]|0)+12>>2];c[Ed>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);c[V>>2]=0;while(1){if((c[V>>2]|0)>=(c[Pa>>2]|0))break;c[(c[v>>2]|0)+(c[V>>2]<<2)>>2]=c[Ed>>2];c[Ed>>2]=(c[Ed>>2]|0)+40;c[V>>2]=(c[V>>2]|0)+1}a[(c[mf>>2]|0)+70>>0]=a[(c[pf>>2]|0)+3>>0]|0;c[rf>>2]=Wb[c[(c[fd>>2]|0)+52>>2]&255](c[Cd>>2]|0,c[Pa>>2]|0,c[v>>2]|0,he)|0;a[(c[mf>>2]|0)+70>>0]=a[Re>>0]|0;GI(c[lf>>2]|0,c[Cd>>2]|0);if((c[rf>>2]|0)==0?(c[(c[pf>>2]|0)+4>>2]|0)!=0:0){yf=he;j=c[yf>>2]|0;yf=c[yf+4>>2]|0;Af=nf;c[Af>>2]=j;c[Af+4>>2]=yf;Af=(c[mf>>2]|0)+32|0;c[Af>>2]=j;c[Af+4>>2]=yf}if((c[rf>>2]&255|0)==19?(d[(c[(c[pf>>2]|0)+16>>2]|0)+16>>0]|0)!=0:0){if((d[(c[pf>>2]|0)+3>>0]|0)==4){c[rf>>2]=0;break d}if((d[(c[pf>>2]|0)+3>>0]|0)==5)g=2;else g=d[(c[pf>>2]|0)+3>>0]|0;a[(c[lf>>2]|0)+86>>0]=g;break d}Af=(c[lf>>2]|0)+92|0;c[Af>>2]=(c[Af>>2]|0)+1;break d}c[rf>>2]=6;break}case 156:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;yf=rg(c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4)+4>>2]|0)|0;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=0;break}case 157:{c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;c[zb>>2]=c[(c[(c[mf>>2]|0)+16>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<4)+4>>2];c[ib>>2]=0;if((c[(c[pf>>2]|0)+12>>2]|0)!=0?(c[ib>>2]=rg(c[zb>>2]|0)|0,(c[ib>>2]|0)>>>0<(c[(c[pf>>2]|0)+12>>2]|0)>>>0):0)c[ib>>2]=c[(c[pf>>2]|0)+12>>2];yf=jJ(c[zb>>2]|0,c[ib>>2]|0)|0;Af=c[id>>2]|0;c[Af>>2]=yf;c[Af+4>>2]=((yf|0)<0)<<31>>31;break}case 158:{if((c[(c[mf>>2]|0)+176>>2]|0)!=0?((e[(c[lf>>2]|0)+88>>1]|0)>>>9&1|0)==0:0){if(c[(c[pf>>2]|0)+16>>2]|0)g=c[(c[pf>>2]|0)+16>>2]|0;else g=c[(c[lf>>2]|0)+168>>2]|0;c[kf>>2]=g;if(g){c[Ve>>2]=kJ(c[lf>>2]|0,c[kf>>2]|0)|0;Rb[c[(c[mf>>2]|0)+176>>2]&255](c[(c[mf>>2]|0)+180>>2]|0,c[Ve>>2]|0);Sf(c[mf>>2]|0,c[Ve>>2]|0)}}if(c[(c[pf>>2]|0)+8>>2]|0)k=15;break}default:{}}while(0);do if((k|0)==21){k=0;c[qf>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;if(c[(c[pf>>2]|0)+4>>2]|0){k=26;break c}if(!(c[(c[lf>>2]|0)+176>>2]|0)){k=26;break c}c[Gc>>2]=c[(c[lf>>2]|0)+176>>2];c[(c[lf>>2]|0)+176>>2]=c[(c[Gc>>2]|0)+4>>2];j=(c[lf>>2]|0)+184|0;c[j>>2]=(c[j>>2]|0)+-1;QH(c[mf>>2]|0,c[(c[lf>>2]|0)+92>>2]|0);c[qf>>2]=RH(c[Gc>>2]|0)|0;j=(c[mf>>2]|0)+32|0;yf=c[j+4>>2]|0;Af=nf;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;if((c[(c[pf>>2]|0)+8>>2]|0)==4)c[qf>>2]=(c[(c[(c[lf>>2]|0)+4>>2]|0)+((c[qf>>2]|0)*20|0)+8>>2]|0)-1;c[n>>2]=c[(c[lf>>2]|0)+4>>2];c[l>>2]=c[(c[lf>>2]|0)+8>>2];c[pf>>2]=(c[n>>2]|0)+((c[qf>>2]|0)*20|0)}else if((k|0)==50){k=0;c[id>>2]=UH(c[lf>>2]|0,c[pf>>2]|0)|0;b[(c[id>>2]|0)+8>>1]=2562;c[(c[id>>2]|0)+16>>2]=c[(c[pf>>2]|0)+16>>2];c[(c[id>>2]|0)+12>>2]=c[(c[pf>>2]|0)+4>>2];a[(c[id>>2]|0)+10>>0]=a[H>>0]|0;if((a[(c[pf>>2]|0)+3>>0]|0)!=0?(c[Qc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0),Af=c[Qc>>2]|0,(c[Af>>2]|0)!=0|(c[Af+4>>2]|0)!=0):0)b[(c[id>>2]|0)+8>>1]=2576}else if((k|0)==132){k=0;c[nc>>2]=c[(c[pf>>2]|0)+16>>2];c[id>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);j:do if((c[c[nc>>2]>>2]|0)!=(c[id>>2]|0)){c[c[nc>>2]>>2]=c[id>>2];c[X>>2]=(d[(c[nc>>2]|0)+26>>0]|0)-1;while(1){if((c[X>>2]|0)<0)break j;c[(c[nc>>2]|0)+28+(c[X>>2]<<2)>>2]=(c[l>>2]|0)+(((c[(c[pf>>2]|0)+8>>2]|0)+(c[X>>2]|0)|0)*40|0);c[X>>2]=(c[X>>2]|0)+-1}}while(0);b[(c[c[nc>>2]>>2]|0)+8>>1]=e[(c[c[nc>>2]>>2]|0)+8>>1]&-49664|1;a[(c[nc>>2]|0)+25>>0]=0;Af=nf;yf=c[Af+4>>2]|0;j=(c[mf>>2]|0)+32|0;c[j>>2]=c[Af>>2];c[j+4>>2]=yf;Ub[c[(c[(c[nc>>2]|0)+4>>2]|0)+12>>2]&255](c[nc>>2]|0,d[(c[nc>>2]|0)+26>>0]|0,(c[nc>>2]|0)+28|0);j=(c[mf>>2]|0)+32|0;yf=c[j+4>>2]|0;Af=nf;c[Af>>2]=c[j>>2];c[Af+4>>2]=yf;if(a[(c[nc>>2]|0)+25>>0]|0){if(c[(c[nc>>2]|0)+20>>2]|0){Af=c[lf>>2]|0;c[Ae>>2]=ae(c[c[nc>>2]>>2]|0)|0;SH(Af,19255,Ae);c[rf>>2]=c[(c[nc>>2]|0)+20>>2]}bI(c[lf>>2]|0,c[(c[nc>>2]|0)+16>>2]|0,c[(c[pf>>2]|0)+4>>2]|0)}if((e[(c[id>>2]|0)+8>>1]&18|0)!=0?(Zt(c[c[nc>>2]>>2]|0,d[H>>0]|0)|0,(VH(c[c[nc>>2]>>2]|0)|0)!=0):0){k=859;break c}}else if((k|0)==438){k=0;if((e[(c[lf>>2]|0)+88>>1]|0)>>>3&1){c[rf>>2]=516;break}c[Ya>>2]=0;c[Tc>>2]=0;c[wb>>2]=c[(c[pf>>2]|0)+8>>2];c[ia>>2]=c[(c[pf>>2]|0)+12>>2];c[Bc>>2]=(c[(c[mf>>2]|0)+16>>2]|0)+(c[ia>>2]<<4);c[Dd>>2]=c[(c[Bc>>2]|0)+4>>2];if((d[c[pf>>2]>>0]|0)==55){c[Se>>2]=4|d[(c[pf>>2]|0)+3>>0]&8;if((d[(c[(c[Bc>>2]|0)+12>>2]|0)+76>>0]|0)<(d[(c[lf>>2]|0)+87>>0]|0))a[(c[lf>>2]|0)+87>>0]=a[(c[(c[Bc>>2]|0)+12>>2]|0)+76>>0]|0}else c[Se>>2]=0;if((d[(c[pf>>2]|0)+3>>0]&16|0)!=0?(c[Pc>>2]=(c[l>>2]|0)+((c[wb>>2]|0)*40|0),wx(c[Pc>>2]|0)|0,c[wb>>2]=c[c[Pc>>2]>>2],(c[wb>>2]|0)<2):0){k=446;break c}g=c[pf>>2]|0;if((a[(c[pf>>2]|0)+1>>0]|0)!=-6){if((a[g+1>>0]|0)==-14)c[Ya>>2]=c[(c[pf>>2]|0)+16>>2]}else{c[Tc>>2]=c[g+16>>2];c[Ya>>2]=(e[(c[Tc>>2]|0)+6>>1]|0)+(e[(c[Tc>>2]|0)+8>>1]|0)}c[qc>>2]=tI(c[lf>>2]|0,c[(c[pf>>2]|0)+4>>2]|0,c[Ya>>2]|0,c[ia>>2]|0,0)|0;if(!(c[qc>>2]|0)){k=860;break a}a[(c[qc>>2]|0)+2>>0]=1;k=(c[qc>>2]|0)+5|0;a[k>>0]=a[k>>0]&-5|4;c[(c[qc>>2]|0)+8>>2]=c[wb>>2];c[rf>>2]=uI(c[Dd>>2]|0,c[wb>>2]|0,c[Se>>2]|0,c[Tc>>2]|0,c[(c[qc>>2]|0)+16>>2]|0)|0;c[(c[qc>>2]|0)+24>>2]=c[Tc>>2];a[(c[qc>>2]|0)+4>>0]=(a[(c[pf>>2]|0)+1>>0]|0)!=-6;k=453}else if((k|0)==609){k=0;c[Sb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[be>>2]=1;g=c[Sb>>2]|0;if((d[c[Sb>>2]>>0]|0)==1)c[rf>>2]=II(g,be)|0;else{c[kc>>2]=c[g+16>>2];c[rf>>2]=JI(c[kc>>2]|0,be)|0;a[(c[Sb>>2]|0)+3>>0]=0;c[(c[Sb>>2]|0)+56>>2]=0}a[(c[Sb>>2]|0)+2>>0]=c[be>>2];if(c[be>>2]|0)k=15}else if((k|0)==615){c[Vb>>2]=c[(c[(c[lf>>2]|0)+56>>2]|0)+(c[(c[pf>>2]|0)+4>>2]<<2)>>2];c[ce>>2]=c[(c[pf>>2]|0)+12>>2];c[rf>>2]=Yb[c[(c[pf>>2]|0)+16>>2]&255](c[(c[Vb>>2]|0)+16>>2]|0,ce)|0;k=616}else if((k|0)==740){k=0;c[pc>>2]=c[(c[pf>>2]|0)+16>>2];c[Zc>>2]=(c[l>>2]|0)+((c[(c[pf>>2]|0)+12>>2]|0)*40|0);k:do if((c[(c[pc>>2]|0)+8>>2]|0)!=(c[Zc>>2]|0)){c[(c[pc>>2]|0)+8>>2]=c[Zc>>2];c[_>>2]=(d[(c[pc>>2]|0)+26>>0]|0)-1;while(1){if((c[_>>2]|0)<0)break k;c[(c[pc>>2]|0)+28+(c[_>>2]<<2)>>2]=(c[l>>2]|0)+(((c[(c[pf>>2]|0)+8>>2]|0)+(c[_>>2]|0)|0)*40|0);c[_>>2]=(c[_>>2]|0)+-1}}while(0);Af=(c[Zc>>2]|0)+12|0;c[Af>>2]=(c[Af>>2]|0)+1;AF(pe,c[mf>>2]|0,1);c[c[pc>>2]>>2]=pe;a[(c[pc>>2]|0)+25>>0]=0;a[(c[pc>>2]|0)+24>>0]=0;Ub[c[(c[(c[pc>>2]|0)+4>>2]|0)+12>>2]&255](c[pc>>2]|0,d[(c[pc>>2]|0)+26>>0]|0,(c[pc>>2]|0)+28|0);if(a[(c[pc>>2]|0)+25>>0]|0){if(c[(c[pc>>2]|0)+20>>2]|0){Af=c[lf>>2]|0;c[Ie>>2]=ae(pe)|0;SH(Af,19255,Ie);c[rf>>2]=c[(c[pc>>2]|0)+20>>2]}Ug(pe)}if((a[(c[pc>>2]|0)+24>>0]|0)!=0?(c[_>>2]=c[(c[pf>>2]|0)+-20+4>>2],(c[_>>2]|0)!=0):0)eh((c[l>>2]|0)+((c[_>>2]|0)*40|0)|0,1,0)}while(0);do if((k|0)==15){k=0;c[pf>>2]=(c[n>>2]|0)+(((c[(c[pf>>2]|0)+8>>2]|0)-1|0)*20|0)}else if((k|0)==453){k=0;vI(c[(c[qc>>2]|0)+16>>2]|0,d[(c[pf>>2]|0)+3>>0]&3)}else if((k|0)==616){c[(c[Vb>>2]|0)+56>>2]=0;g=(c[Vb>>2]|0)+2|0;if(!(c[ce>>2]|0)){a[g>>0]=0;k=(c[lf>>2]|0)+108+(d[(c[pf>>2]|0)+3>>0]<<2)|0;c[k>>2]=(c[k>>2]|0)+1;k=8;break}else{a[g>>0]=1;k=9;break}}while(0);if((k|0)==8){c[pf>>2]=(c[n>>2]|0)+(((c[(c[pf>>2]|0)+8>>2]|0)-1|0)*20|0);k=9}if((k|0)==9){k=0;if(c[(c[mf>>2]|0)+240>>2]|0)break b;if(((c[(c[mf>>2]|0)+296>>2]|0)!=0?(c[of>>2]|0)>>>0>=(c[db>>2]|0)>>>0:0)?(c[db>>2]=(c[of>>2]|0)+(c[(c[mf>>2]|0)+304>>2]|0)-(((c[of>>2]|0)>>>0)%((c[(c[mf>>2]|0)+304>>2]|0)>>>0)|0),(Tb[c[(c[mf>>2]|0)+296>>2]&255](c[(c[mf>>2]|0)+300>>2]|0)|0)!=0):0){k=13;break}}c[pf>>2]=(c[pf>>2]|0)+20}switch(k|0){case 13:{c[rf>>2]=9;break a}case 26:{c[(c[lf>>2]|0)+80>>2]=c[(c[pf>>2]|0)+4>>2];a[(c[lf>>2]|0)+86>>0]=c[(c[pf>>2]|0)+8>>2];c[(c[lf>>2]|0)+76>>2]=c[qf>>2];if(c[(c[lf>>2]|0)+80>>2]|0){if(a[(c[pf>>2]|0)+3>>0]|0)c[wf>>2]=c[6408+((d[(c[pf>>2]|0)+3>>0]|0)-1<<2)>>2];else c[wf>>2]=0;c[vf>>2]=40646;if((c[wf>>2]|0)!=0?(c[(c[pf>>2]|0)+16>>2]|0)!=0:0){Af=c[lf>>2]|0;yf=c[(c[pf>>2]|0)+16>>2]|0;c[ze>>2]=c[wf>>2];c[ze+4>>2]=yf;SH(Af,40670,ze)}else k=33;do if((k|0)==33){g=c[lf>>2]|0;if(c[(c[pf>>2]|0)+16>>2]|0){c[sf>>2]=c[(c[pf>>2]|0)+16>>2];SH(g,19255,sf);break}else{c[tf>>2]=c[wf>>2];SH(g,40695,tf);break}}while(0);yf=c[(c[pf>>2]|0)+4>>2]|0;Af=c[vf>>2]|0;vf=c[(c[lf>>2]|0)+168>>2]|0;wf=c[(c[lf>>2]|0)+44>>2]|0;c[uf>>2]=c[qf>>2];c[uf+4>>2]=vf;c[uf+8>>2]=wf;Rd(yf,Af,uf)}c[rf>>2]=TH(c[lf>>2]|0)|0;if((c[rf>>2]|0)==5){c[rf>>2]=5;c[(c[lf>>2]|0)+80>>2]=5;Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}else{c[rf>>2]=(c[(c[lf>>2]|0)+80>>2]|0)!=0?1:101;Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}}case 74:{c[rf>>2]=9;break a}case 77:{c[(c[lf>>2]|0)+72>>2]=(c[(c[lf>>2]|0)+72>>2]|0)+2|1;Af=(c[l>>2]|0)+((c[(c[pf>>2]|0)+4>>2]|0)*40|0)|0;c[(c[lf>>2]|0)+20>>2]=Af;c[Wc>>2]=Af;c[S>>2]=0;while(1){if((c[S>>2]|0)>=(c[(c[pf>>2]|0)+8>>2]|0))break;if((e[(c[Wc>>2]|0)+((c[S>>2]|0)*40|0)+8>>1]&4096|0)!=0?(_g((c[Wc>>2]|0)+((c[S>>2]|0)*40|0)|0)|0)!=0:0){k=860;break a}YH((c[Wc>>2]|0)+((c[S>>2]|0)*40|0)|0)|0;c[S>>2]=(c[S>>2]|0)+1}if(a[(c[mf>>2]|0)+65>>0]|0){k=860;break a}c[(c[lf>>2]|0)+76>>2]=(((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0)+1;c[rf>>2]=100;Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}case 165:{c[rf>>2]=20;k=861;break}case 367:{c[(c[lf>>2]|0)+76>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;a[(c[mf>>2]|0)+63>>0]=0;c[rf>>2]=5;c[(c[lf>>2]|0)+80>>2]=5;Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}case 391:{qI(c[mf>>2]|0,516);a[(c[mf>>2]|0)+63>>0]=1;break}case 395:{Af=WH(c[lf>>2]|0,1)|0;c[rf>>2]=Af;if(Af){Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}else{a[(c[mf>>2]|0)+63>>0]=c[E>>2];break}}case 407:{c[rf>>2]=8;k=861;break}case 410:{c[(c[lf>>2]|0)+76>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;c[(c[lf>>2]|0)+80>>2]=c[rf>>2];Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}case 446:{c[rf>>2]=Lj(77597)|0;k=861;break}case 542:{c[rf>>2]=13;k=861;break}case 551:{c[rf>>2]=13;k=861;break}case 804:{Tb[c[(c[bd>>2]|0)+28>>2]&255](c[sd>>2]|0)|0;k=860;break a}case 858:{Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}case 859:{SH(c[lf>>2]|0,19034,Ne);c[rf>>2]=18;break a}}if((k|0)==861){if(a[(c[mf>>2]|0)+65>>0]|0)c[rf>>2]=7;if((c[rf>>2]|0)==3082)break a;Af=c[lf>>2]|0;c[Pe>>2]=ih(c[rf>>2]|0)|0;SH(Af,19255,Pe);break a}if((TH(c[lf>>2]|0)|0)==5){c[(c[lf>>2]|0)+76>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;a[(c[mf>>2]|0)+63>>0]=1-(c[E>>2]|0);c[rf>>2]=5;c[(c[lf>>2]|0)+80>>2]=5;Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}rI(c[mf>>2]|0);if(!(c[(c[lf>>2]|0)+80>>2]|0)){c[rf>>2]=101;Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}else{c[rf>>2]=1;Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}}while(0);c[rf>>2]=(d[(c[mf>>2]|0)+65>>0]|0)!=0?7:9;c[(c[lf>>2]|0)+80>>2]=c[rf>>2];Af=c[lf>>2]|0;c[Qe>>2]=ih(c[rf>>2]|0)|0;SH(Af,19255,Qe)}while(0);if((k|0)==860){jh(c[mf>>2]|0);SH(c[lf>>2]|0,32392,Oe);c[rf>>2]=7}c[(c[lf>>2]|0)+80>>2]=c[rf>>2];Af=c[rf>>2]|0;wf=c[(c[lf>>2]|0)+168>>2]|0;yf=c[(c[lf>>2]|0)+44>>2]|0;c[Me>>2]=((c[pf>>2]|0)-(c[n>>2]|0)|0)/20|0;c[Me+4>>2]=wf;c[Me+8>>2]=yf;Rd(Af,41278,Me);TH(c[lf>>2]|0)|0;if((c[rf>>2]|0)==3082)jh(c[mf>>2]|0);c[rf>>2]=1;if((d[fe>>0]|0)<=0){Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}rj(c[mf>>2]|0,(d[fe>>0]|0)-1|0);Af=nf;vf=Af;vf=c[vf>>2]|0;Af=Af+4|0;Af=c[Af>>2]|0;yf=c[mf>>2]|0;yf=yf+32|0;wf=yf;c[wf>>2]=vf;yf=yf+4|0;c[yf>>2]=Af;yf=c[of>>2]|0;Af=c[lf>>2]|0;Af=Af+108|0;Af=Af+16|0;wf=c[Af>>2]|0;yf=wf+yf|0;c[Af>>2]=yf;Af=c[rf>>2]|0;i=xf;return Af|0}function LH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;b=h+16|0;g=h+12|0;d=h+8|0;f=h+4|0;e=h;c[b>>2]=a;c[g>>2]=0;c[d>>2]=0;while(1){if((c[d>>2]|0)>=(c[(c[b>>2]|0)+20>>2]|0))break;c[f>>2]=c[(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4)+4>>2];if((c[f>>2]|0)!=0?(kg(c[f>>2]|0),c[e>>2]=NH(Of(c[f>>2]|0)|0)|0,((c[e>>2]|0)>0?(c[(c[b>>2]|0)+216>>2]|0)!=0:0)&(c[g>>2]|0)==0):0)c[g>>2]=Wb[c[(c[b>>2]|0)+216>>2]&255](c[(c[b>>2]|0)+220>>2]|0,c[b>>2]|0,c[(c[(c[b>>2]|0)+16>>2]|0)+(c[d>>2]<<4)>>2]|0,c[e>>2]|0)|0;c[d>>2]=(c[d>>2]|0)+1}i=h;return c[g>>2]|0}function MH(b){b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=b;c[e>>2]=c[c[d>>2]>>2];c[f>>2]=c[(c[d>>2]|0)+80>>2];b=c[e>>2]|0;if(!(c[(c[d>>2]|0)+44>>2]|0)){jg(b,c[f>>2]|0);f=c[f>>2]|0;i=g;return f|0}b=b+66|0;a[b>>0]=(a[b>>0]|0)+1<<24>>24;Sj();if(!(c[(c[e>>2]|0)+236>>2]|0)){b=Vh(c[e>>2]|0)|0;c[(c[e>>2]|0)+236>>2]=b}Wh(c[(c[e>>2]|0)+236>>2]|0,-1,c[(c[d>>2]|0)+44>>2]|0,1,-1);Tj();d=(c[e>>2]|0)+66|0;a[d>>0]=(a[d>>0]|0)+-1<<24>>24;c[(c[e>>2]|0)+52>>2]=c[f>>2];f=c[f>>2]|0;i=g;return f|0}function NH(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=OH(c[(c[d>>2]|0)+216>>2]|0)|0;i=b;return a|0}function OH(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[b>>2]=a;c[d>>2]=0;if(!(c[b>>2]|0)){d=c[d>>2]|0;i=e;return d|0}c[d>>2]=c[(c[b>>2]|0)+12>>2];c[(c[b>>2]|0)+12>>2]=0;d=c[d>>2]|0;i=e;return d|0}function PH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=i;i=i+32|0;b=h+16|0;f=h+12|0;e=h+8|0;d=h+4|0;g=h;c[b>>2]=a;if(!(c[(c[b>>2]|0)+100>>2]|0)){i=h;return}c[e>>2]=c[c[b>>2]>>2];c[d>>2]=c[(c[e>>2]|0)+16>>2];c[g>>2]=c[(c[e>>2]|0)+20>>2];c[f>>2]=0;while(1){if((c[f>>2]|0)>=(c[g>>2]|0))break;if(((c[f>>2]|0)!=1?(c[(c[b>>2]|0)+100>>2]&1<>2]|0)!=0:0)?(c[(c[d>>2]|0)+(c[f>>2]<<4)+4>>2]|0)!=0:0)kg(c[(c[d>>2]|0)+(c[f>>2]<<4)+4>>2]|0);c[f>>2]=(c[f>>2]|0)+1}i=h;return}function QH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;c[(c[f>>2]|0)+80>>2]=c[e>>2];b=(c[f>>2]|0)+84|0;c[b>>2]=(c[b>>2]|0)+(c[e>>2]|0);i=d;return}function RH(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=i;i=i+16|0;b=d+4|0;e=d;c[b>>2]=a;c[e>>2]=c[c[b>>2]>>2];kM(c[e>>2]|0);c[(c[e>>2]|0)+200>>2]=c[(c[b>>2]|0)+20>>2];c[(c[e>>2]|0)+196>>2]=c[(c[b>>2]|0)+56>>2];c[(c[e>>2]|0)+4>>2]=c[(c[b>>2]|0)+8>>2];c[(c[e>>2]|0)+32>>2]=c[(c[b>>2]|0)+48>>2];c[(c[e>>2]|0)+8>>2]=c[(c[b>>2]|0)+16>>2];c[(c[e>>2]|0)+28>>2]=c[(c[b>>2]|0)+52>>2];c[(c[e>>2]|0)+56>>2]=c[(c[b>>2]|0)+24>>2];c[(c[e>>2]|0)+36>>2]=c[(c[b>>2]|0)+40>>2];g=(c[b>>2]|0)+32|0;f=c[g+4>>2]|0;a=(c[c[e>>2]>>2]|0)+32|0;c[a>>2]=c[g>>2];c[a+4>>2]=f;c[(c[e>>2]|0)+92>>2]=c[(c[b>>2]|0)+68>>2];c[(c[c[e>>2]>>2]|0)+80>>2]=c[(c[b>>2]|0)+72>>2];i=d;return c[(c[b>>2]|0)+44>>2]|0}function SH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+32|0;f=e+20|0;h=e+16|0;g=e;c[f>>2]=a;c[h>>2]=b;Sf(c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+44>>2]|0);c[g>>2]=d;b=Zw(c[c[f>>2]>>2]|0,c[h>>2]|0,g)|0;c[(c[f>>2]|0)+44>>2]=b;i=e;return}function TH(b){b=b|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;k=o+24|0;l=o+20|0;h=o+16|0;m=o+12|0;g=o+8|0;n=o+4|0;f=o;c[l>>2]=b;c[m>>2]=c[c[l>>2]>>2];if(a[(c[m>>2]|0)+65>>0]|0)c[(c[l>>2]|0)+80>>2]=7;if(c[(c[l>>2]|0)+200>>2]|0)kR(c[(c[l>>2]|0)+200>>2]|0,0,c[(c[l>>2]|0)+196>>2]|0)|0;cM(c[l>>2]|0);if((c[(c[l>>2]|0)+40>>2]|0)!=-1108210269){c[k>>2]=0;n=c[k>>2]|0;i=o;return n|0}if((c[(c[l>>2]|0)+76>>2]|0)>=0?((e[(c[l>>2]|0)+88>>1]|0)>>>7&1|0)!=0:0){c[n>>2]=0;PH(c[l>>2]|0);c[g>>2]=c[(c[l>>2]|0)+80>>2]&255;if((c[g>>2]|0)==7|(c[g>>2]|0)==10|(c[g>>2]|0)==9)b=1;else b=(c[g>>2]|0)==13;c[f>>2]=b&1;do if((c[f>>2]|0)!=0?(c[g>>2]|0)!=9?1:((e[(c[l>>2]|0)+88>>1]|0)>>>6&1|0)==0:0){if((c[g>>2]|0)==7|(c[g>>2]|0)==13?((e[(c[l>>2]|0)+88>>1]|0)>>>5&1|0)!=0:0){c[n>>2]=2;break}qI(c[m>>2]|0,516);rI(c[m>>2]|0);a[(c[m>>2]|0)+63>>0]=1;c[(c[l>>2]|0)+92>>2]=0}while(0);if(!(c[(c[l>>2]|0)+80>>2]|0))WH(c[l>>2]|0,0)|0;if((c[(c[m>>2]|0)+308>>2]|0)>0?(c[(c[m>>2]|0)+332>>2]|0)==0:0)j=38;else if((d[(c[m>>2]|0)+63>>0]|0)!=0?(c[(c[m>>2]|0)+156>>2]|0)==(((e[(c[l>>2]|0)+88>>1]|0)>>>6&1|0)==0|0):0){if((c[(c[l>>2]|0)+80>>2]|0)!=0?(c[f>>2]|0)!=0?1:(d[(c[l>>2]|0)+86>>0]|0)!=3:0){qI(c[m>>2]|0,0);c[(c[l>>2]|0)+92>>2]=0}else j=25;do if((j|0)==25){c[h>>2]=WH(c[l>>2]|0,1)|0;do if(c[h>>2]|0){if(!((e[(c[l>>2]|0)+88>>1]|0)>>>6&1)){c[h>>2]=787;break}c[k>>2]=1;n=c[k>>2]|0;i=o;return n|0}else c[h>>2]=dM(c[m>>2]|0,c[l>>2]|0)|0;while(0);if((c[h>>2]|0)==5?((e[(c[l>>2]|0)+88>>1]|0)>>>6&1|0)!=0:0){c[k>>2]=5;n=c[k>>2]|0;i=o;return n|0}if(c[h>>2]|0){c[(c[l>>2]|0)+80>>2]=c[h>>2];qI(c[m>>2]|0,0);c[(c[l>>2]|0)+92>>2]=0;break}else{g=(c[m>>2]|0)+512|0;c[g>>2]=0;c[g+4>>2]=0;g=(c[m>>2]|0)+520|0;c[g>>2]=0;c[g+4>>2]=0;g=(c[m>>2]|0)+24|0;c[g>>2]=c[g>>2]&-16777217;sj(c[m>>2]|0);break}}while(0);c[(c[m>>2]|0)+504>>2]=0}else j=38;do if((j|0)==38?(c[n>>2]|0)==0:0){if((c[(c[l>>2]|0)+80>>2]|0)!=0?(d[(c[l>>2]|0)+86>>0]|0)!=3:0)if((d[(c[l>>2]|0)+86>>0]|0)==2){c[n>>2]=2;break}else{qI(c[m>>2]|0,516);rI(c[m>>2]|0);a[(c[m>>2]|0)+63>>0]=1;c[(c[l>>2]|0)+92>>2]=0;break}c[n>>2]=1}while(0);if((c[n>>2]|0)!=0?(c[h>>2]=XH(c[l>>2]|0,c[n>>2]|0)|0,(c[h>>2]|0)!=0):0){if(!((c[(c[l>>2]|0)+80>>2]|0)!=0?(c[(c[l>>2]|0)+80>>2]&255|0)!=19:0)){c[(c[l>>2]|0)+80>>2]=c[h>>2];Sf(c[m>>2]|0,c[(c[l>>2]|0)+44>>2]|0);c[(c[l>>2]|0)+44>>2]=0}qI(c[m>>2]|0,516);rI(c[m>>2]|0);a[(c[m>>2]|0)+63>>0]=1;c[(c[l>>2]|0)+92>>2]=0}if((e[(c[l>>2]|0)+88>>1]|0)>>>2&1){b=c[m>>2]|0;if((c[n>>2]|0)!=2)QH(b,c[(c[l>>2]|0)+92>>2]|0);else QH(b,0);c[(c[l>>2]|0)+92>>2]=0}}if((c[(c[l>>2]|0)+76>>2]|0)>=0){n=(c[m>>2]|0)+148|0;c[n>>2]=(c[n>>2]|0)+-1;if(!((e[(c[l>>2]|0)+88>>1]|0)>>>6&1)){n=(c[m>>2]|0)+156|0;c[n>>2]=(c[n>>2]|0)+-1}if((e[(c[l>>2]|0)+88>>1]|0)>>>7&1){n=(c[m>>2]|0)+152|0;c[n>>2]=(c[n>>2]|0)+-1}}c[(c[l>>2]|0)+40>>2]=1369188723;if(a[(c[m>>2]|0)+65>>0]|0)c[(c[l>>2]|0)+80>>2]=7;c[k>>2]=(c[(c[l>>2]|0)+80>>2]|0)==5?5:0;n=c[k>>2]|0;i=o;return n|0}function UH(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;f=h+12|0;k=h+8|0;j=h+4|0;g=h;c[k>>2]=a;c[j>>2]=d;c[g>>2]=(c[(c[k>>2]|0)+8>>2]|0)+((c[(c[j>>2]|0)+8>>2]|0)*40|0);a=c[g>>2]|0;if((e[(c[g>>2]|0)+8>>1]|0)&9312){c[f>>2]=bM(a)|0;k=c[f>>2]|0;i=h;return k|0}else{b[a+8>>1]=4;c[f>>2]=c[g>>2];k=c[f>>2]|0;i=h;return k|0}return 0}function VH(a){a=a|0;var b=0,d=0,f=0,g=0;g=i;i=i+16|0;b=g+8|0;d=g+4|0;f=g;c[d>>2]=a;if(!((e[(c[d>>2]|0)+8>>1]|0)&18)){c[b>>2]=0;a=c[b>>2]|0;i=g;return a|0}c[f>>2]=c[(c[d>>2]|0)+12>>2];if((e[(c[d>>2]|0)+8>>1]|0)&16384)c[f>>2]=(c[f>>2]|0)+(c[c[d>>2]>>2]|0);c[b>>2]=(c[f>>2]|0)>(c[(c[(c[d>>2]|0)+32>>2]|0)+88>>2]|0)&1;a=c[b>>2]|0;i=g;return a|0}function WH(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;j=l;e=l+16|0;f=l+12|0;g=l+8|0;h=l+4|0;c[f>>2]=b;c[g>>2]=d;c[h>>2]=c[c[f>>2]>>2];if(!((c[g>>2]|0)!=0?(d=(c[h>>2]|0)+512|0,b=(c[h>>2]|0)+520|0,b=gR(c[d>>2]|0,c[d+4>>2]|0,c[b>>2]|0,c[b+4>>2]|0)|0,d=C,(d|0)>0|(d|0)==0&b>>>0>0):0))k=3;do if((k|0)==3){if((c[g>>2]|0)==0?(k=(c[f>>2]|0)+144|0,b=c[k+4>>2]|0,(b|0)>0|(b|0)==0&(c[k>>2]|0)>>>0>0):0)break;c[e>>2]=0;k=c[e>>2]|0;i=l;return k|0}while(0);c[(c[f>>2]|0)+80>>2]=787;a[(c[f>>2]|0)+86>>0]=2;SH(c[f>>2]|0,36044,j);c[e>>2]=1;k=c[e>>2]|0;i=l;return k|0}function XH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;d=m+28|0;e=m+24|0;f=m+20|0;k=m+16|0;g=m+12|0;h=m+8|0;l=m+4|0;j=m;c[d>>2]=a;c[e>>2]=b;c[f>>2]=c[c[d>>2]>>2];c[k>>2]=0;if(!(c[(c[f>>2]|0)+504>>2]|0)){l=c[k>>2]|0;i=m;return l|0}if(!(c[(c[d>>2]|0)+104>>2]|0)){l=c[k>>2]|0;i=m;return l|0}c[h>>2]=(c[(c[d>>2]|0)+104>>2]|0)-1;c[g>>2]=0;while(1){if((c[g>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0))break;c[l>>2]=0;c[j>>2]=c[(c[(c[f>>2]|0)+16>>2]|0)+(c[g>>2]<<4)+4>>2];if(c[j>>2]|0){if((c[e>>2]|0)==2)c[l>>2]=pI(c[j>>2]|0,2,c[h>>2]|0)|0;if(!(c[l>>2]|0))c[l>>2]=pI(c[j>>2]|0,1,c[h>>2]|0)|0;if(!(c[k>>2]|0))c[k>>2]=c[l>>2]}c[g>>2]=(c[g>>2]|0)+1}l=(c[f>>2]|0)+504|0;c[l>>2]=(c[l>>2]|0)+-1;c[(c[d>>2]|0)+104>>2]=0;if(!(c[k>>2]|0)){if((c[e>>2]|0)==2)c[k>>2]=nI(c[f>>2]|0,2,c[h>>2]|0)|0;if(!(c[k>>2]|0))c[k>>2]=nI(c[f>>2]|0,1,c[h>>2]|0)|0}if((c[e>>2]|0)!=2){l=c[k>>2]|0;i=m;return l|0}l=(c[d>>2]|0)+152|0;j=c[l+4>>2]|0;a=(c[f>>2]|0)+512|0;c[a>>2]=c[l>>2];c[a+4>>2]=j;a=(c[d>>2]|0)+160|0;j=c[a+4>>2]|0;l=(c[f>>2]|0)+520|0;c[l>>2]=c[a>>2];c[l+4>>2]=j;l=c[k>>2]|0;i=m;return l|0}function YH(a){a=a|0;var b=0,d=0,f=0;f=i;i=i+16|0;b=f+4|0;d=f;c[d>>2]=a;if(((e[(c[d>>2]|0)+8>>1]|0)&514|0)!=2){c[b>>2]=0;a=c[b>>2]|0;i=f;return a|0}else{c[b>>2]=aM(c[d>>2]|0)|0;a=c[b>>2]|0;i=f;return a|0}return 0}function ZH(a){a=a|0;var d=0,f=0,g=0;g=i;i=i+16|0;d=g+4|0;f=g;c[f>>2]=a;a=e[(c[f>>2]|0)+8>>1]|0;do if(!((e[(c[f>>2]|0)+8>>1]|0)&12))if(a&18){b[d>>1]=$L(c[f>>2]|0)|0;break}else{b[d>>1]=0;break}else b[d>>1]=a&12;while(0);i=g;return b[d>>1]|0}function _H(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;e=j+20|0;f=j+16|0;g=j+8|0;h=j;c[f>>2]=a;k=g;c[k>>2]=b;c[k+4>>2]=d;b=c[f>>2]|0;k=c[b+4>>2]|0;a=h;c[a>>2]=c[b>>2];c[a+4>>2]=k;a=g;k=c[a+4>>2]|0;b=h;d=c[b+4>>2]|0;if((k|0)>0|(k|0)==0&(c[a>>2]|0)>>>0>=0){if((d|0)>0|(d|0)==0&(c[b>>2]|0)>>>0>0?(h,h=fR(-1,2147483647,c[h>>2]|0,c[h+4>>2]|0)|0,d=C,k=g,a=c[k+4>>2]|0,(d|0)<(a|0)|((d|0)==(a|0)?h>>>0<(c[k>>2]|0)>>>0:0)):0){c[e>>2]=1;k=c[e>>2]|0;i=j;return k|0}}else if((d|0)<0?(h,h=gR(c[h>>2]|0,c[h+4>>2]|0,-1,2147483647)|0,h=fR(0,0,h|0,C|0)|0,d=C,k=g,k=gR(c[k>>2]|0,c[k+4>>2]|0,1,0)|0,a=C,(d|0)>(a|0)|(d|0)==(a|0)&h>>>0>k>>>0):0){c[e>>2]=1;k=c[e>>2]|0;i=j;return k|0}h=g;k=c[f>>2]|0;g=k;h=gR(c[g>>2]|0,c[g+4>>2]|0,c[h>>2]|0,c[h+4>>2]|0)|0;c[k>>2]=h;c[k+4>>2]=C;c[e>>2]=0;k=c[e>>2]|0;i=j;return k|0}function $H(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;e=h+12|0;f=h+8|0;g=h;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;a=g;b=c[f>>2]|0;if(!((c[a>>2]|0)==0?(c[a+4>>2]|0)==-2147483648:0)){g=fR(0,0,c[g>>2]|0,c[g+4>>2]|0)|0;c[e>>2]=_H(b,g,C)|0;g=c[e>>2]|0;i=h;return g|0}a=b;d=c[a+4>>2]|0;if((d|0)>0|(d|0)==0&(c[a>>2]|0)>>>0>=0){c[e>>2]=1;g=c[e>>2]|0;i=h;return g|0}else{a=g;g=c[f>>2]|0;f=g;f=fR(c[f>>2]|0,c[f+4>>2]|0,c[a>>2]|0,c[a+4>>2]|0)|0;c[g>>2]=f;c[g+4>>2]=C;c[e>>2]=0;g=c[e>>2]|0;i=h;return g|0}return 0}function aI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+64|0;e=n+60|0;f=n+56|0;g=n+48|0;o=n+40|0;j=n+32|0;h=n+24|0;l=n+16|0;k=n+8|0;m=n;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=c[f>>2]|0;b=c[d+4>>2]|0;a=o;c[a>>2]=c[d>>2];c[a+4>>2]=b;a=o;a=pR(c[a>>2]|0,c[a+4>>2]|0,0,1)|0;b=j;c[b>>2]=a;c[b+4>>2]=C;b=o;b=qR(c[b>>2]|0,c[b+4>>2]|0,0,1)|0;a=h;c[a>>2]=b;c[a+4>>2]=C;a=g;a=pR(c[a>>2]|0,c[a+4>>2]|0,0,1)|0;b=l;c[b>>2]=a;c[b+4>>2]=C;b=g;b=qR(c[b>>2]|0,c[b+4>>2]|0,0,1)|0;a=k;c[a>>2]=b;c[a+4>>2]=C;a=j;b=l;b=(c[b>>2]|0)==0&(c[b+4>>2]|0)==0;do if((c[a>>2]|0)==0&(c[a+4>>2]|0)==0){if(!b){o=h;l=rR(c[o>>2]|0,c[o+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0;o=m;c[o>>2]=l;c[o+4>>2]=C;break}m=g;o=c[f>>2]|0;l=o;m=rR(c[l>>2]|0,c[l+4>>2]|0,c[m>>2]|0,c[m+4>>2]|0)|0;c[o>>2]=m;c[o+4>>2]=C;c[e>>2]=0;o=c[e>>2]|0;i=n;return o|0}else{if(b){o=j;l=k;l=rR(c[o>>2]|0,c[o+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0;o=m;c[o>>2]=l;c[o+4>>2]=C;break}c[e>>2]=1; +o=c[e>>2]|0;i=n;return o|0}while(0);j=m;g=c[j+4>>2]|0;o=m;l=c[o+4>>2]|0;if((g|0)<-1|(g|0)==-1&(c[j>>2]|0)>>>0<2147483648|((l|0)>0|(l|0)==0&(c[o>>2]|0)>>>0>=2147483648)){c[e>>2]=1;o=c[e>>2]|0;i=n;return o|0}o=m;o=rR(c[o>>2]|0,c[o+4>>2]|0,0,1)|0;l=m;c[l>>2]=o;c[l+4>>2]=C;l=h;o=k;o=rR(c[l>>2]|0,c[l+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0;if(_H(m,o,C)|0){c[e>>2]=1;o=c[e>>2]|0;i=n;return o|0}else{l=m;m=c[l+4>>2]|0;o=c[f>>2]|0;c[o>>2]=c[l>>2];c[o+4>>2]=m;c[e>>2]=0;o=c[e>>2]|0;i=n;return o|0}return 0}function bI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[j>>2]=(c[e>>2]|0)+204;a:while(1){if(!(c[c[j>>2]>>2]|0))break;c[h>>2]=c[c[j>>2]>>2];do if((c[f>>2]|0)>=0){if((c[c[h>>2]>>2]|0)==(c[f>>2]|0)){if((c[(c[h>>2]|0)+4>>2]|0)>31)break;if(!(c[g>>2]&1<>2]|0)+4>>2]))break}c[j>>2]=(c[h>>2]|0)+16;continue a}while(0);if(c[(c[h>>2]|0)+12>>2]|0)Qb[c[(c[h>>2]|0)+12>>2]&255](c[(c[h>>2]|0)+8>>2]|0);c[c[j>>2]>>2]=c[(c[h>>2]|0)+16>>2];Sf(c[c[e>>2]>>2]|0,c[h>>2]|0)}i=k;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;f=o+24|0;g=o+20|0;j=o+16|0;k=o+12|0;m=o+8|0;n=o+4|0;l=o;c[g>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e[(c[g>>2]|0)+8>>1];c[n>>2]=e[(c[j>>2]|0)+8>>1];c[l>>2]=c[m>>2]|c[n>>2];do if(!(c[l>>2]&1)){if(!(c[l>>2]&12)){if(c[l>>2]&2){if(!(c[m>>2]&2)){c[f>>2]=1;break}if(!(c[n>>2]&2)){c[f>>2]=-1;break}if(c[k>>2]|0){c[f>>2]=yF(c[g>>2]|0,c[j>>2]|0,c[k>>2]|0,0)|0;break}}c[f>>2]=_L(c[g>>2]|0,c[j>>2]|0)|0;break}if(c[m>>2]&c[n>>2]&4){a=c[g>>2]|0;n=c[a+4>>2]|0;b=c[j>>2]|0;d=c[b+4>>2]|0;if((n|0)<(d|0)|((n|0)==(d|0)?(c[a>>2]|0)>>>0<(c[b>>2]|0)>>>0:0)){c[f>>2]=-1;break}a=c[g>>2]|0;n=c[a+4>>2]|0;b=c[j>>2]|0;d=c[b+4>>2]|0;if((n|0)>(d|0)|((n|0)==(d|0)?(c[a>>2]|0)>>>0>(c[b>>2]|0)>>>0:0)){c[f>>2]=1;break}else{c[f>>2]=0;break}}if(c[m>>2]&c[n>>2]&8){if(+h[c[g>>2]>>3]<+h[c[j>>2]>>3]){c[f>>2]=-1;break}if(+h[c[g>>2]>>3]>+h[c[j>>2]>>3]){c[f>>2]=1;break}else{c[f>>2]=0;break}}if(c[m>>2]&4)if(c[n>>2]&8){b=c[g>>2]|0;c[f>>2]=wF(c[b>>2]|0,c[b+4>>2]|0,+h[c[j>>2]>>3])|0;break}else{c[f>>2]=-1;break}if(!(c[m>>2]&8)){c[f>>2]=1;break}if(c[n>>2]&4){b=c[j>>2]|0;c[f>>2]=0-(wF(c[b>>2]|0,c[b+4>>2]|0,+h[c[g>>2]>>3])|0);break}else{c[f>>2]=-1;break}}else c[f>>2]=(c[n>>2]&1)-(c[m>>2]&1);while(0);i=o;return c[f>>2]|0}function dI(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+16|0;g=l+12|0;h=l+8|0;k=l+4|0;j=l;c[g>>2]=b;c[h>>2]=e;c[k>>2]=c[c[g>>2]>>2];do if(!(d[c[k>>2]>>0]|0)){e=c[k>>2]|0;if(!(a[(c[k>>2]|0)+3>>0]|0)){if(!(nL(c[e+16>>2]|0)|0))break;c[f>>2]=oL(c[k>>2]|0)|0;k=c[f>>2]|0;i=l;return k|0}if((c[e+52>>2]|0)!=0?(b=c[(c[(c[k>>2]|0)+52>>2]|0)+(1+(c[c[h>>2]>>2]|0)<<2)>>2]|0,c[j>>2]=b,(b|0)>0):0){c[c[g>>2]>>2]=c[(c[k>>2]|0)+48>>2];c[c[h>>2]>>2]=(c[j>>2]|0)-1;c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}c[f>>2]=ZL(c[k>>2]|0)|0;k=c[f>>2]|0;i=l;return k|0}while(0);c[f>>2]=0;k=c[f>>2]|0;i=l;return k|0}function eI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=YL(c[f>>2]|0,c[e>>2]|0)|0;i=d;return a|0}function fI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;iF(c[f>>2]|0);c[c[e>>2]>>2]=c[(c[f>>2]|0)+16+12>>2];i=d;return 0}function gI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;f=d+4|0;e=d;c[f>>2]=a;c[e>>2]=b;a=YL(c[f>>2]|0,c[e>>2]|0)|0;i=d;return a|0}function hI(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+32|0;h=q+28|0;j=q+24|0;k=q+20|0;l=q+16|0;m=q+12|0;p=q+8|0;n=q+4|0;o=q;c[h>>2]=a;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;c[m>>2]=g;c[n>>2]=0;c[o>>2]=0;e=c[h>>2]|0;if(c[l>>2]|0)c[p>>2]=eI(e,n)|0;else c[p>>2]=gI(e,n)|0;if(((c[j>>2]|0)+(c[k>>2]|0)|0)>>>0<=(c[n>>2]|0)>>>0){c[(c[m>>2]|0)+16>>2]=(c[p>>2]|0)+(c[j>>2]|0);b[(c[m>>2]|0)+8>>1]=4112;c[(c[m>>2]|0)+12>>2]=c[k>>2];p=c[o>>2]|0;i=q;return p|0}else{c[o>>2]=XL(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0,c[m>>2]|0)|0;p=c[o>>2]|0;i=q;return p|0}return 0}function iI(b){b=b|0;var c=0,e=0;e=i;i=i+16|0;c=e;a[c>>0]=b;i=e;return a[35916+(d[c>>0]|0)>>0]|0}function jI(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;n=o+36|0;f=o+32|0;k=o+28|0;j=o+24|0;g=o+20|0;h=o+16|0;l=o+8|0;m=o;c[f>>2]=a;c[k>>2]=b;c[j>>2]=d;c[g>>2]=e[(c[f>>2]|0)+8>>1];if(c[g>>2]&1){c[c[j>>2]>>2]=0;c[n>>2]=0;n=c[n>>2]|0;i=o;return n|0}if(!(c[g>>2]&4)){if(c[g>>2]&8){c[c[j>>2]>>2]=8;c[n>>2]=7;n=c[n>>2]|0;i=o;return n|0}c[h>>2]=c[(c[f>>2]|0)+12>>2];if(c[g>>2]&16384)c[h>>2]=(c[h>>2]|0)+(c[c[f>>2]>>2]|0);c[c[j>>2]>>2]=c[h>>2];c[n>>2]=(c[h>>2]<<1)+12+((c[g>>2]&2|0)!=0&1);n=c[n>>2]|0;i=o;return n|0}a=c[f>>2]|0;f=c[a+4>>2]|0;b=l;c[b>>2]=c[a>>2];c[b+4>>2]=f;b=l;f=c[b>>2]|0;b=c[b+4>>2]|0;if((c[l+4>>2]|0)<0){a=m;c[a>>2]=~f;c[a+4>>2]=~b}else{a=m;c[a>>2]=f;c[a+4>>2]=b}a=m;d=c[a+4>>2]|0;if(d>>>0<0|(d|0)==0&(c[a>>2]|0)>>>0<=127){a=l;f=c[j>>2]|0;if((0==(c[a+4>>2]|0)?(c[l>>2]&1|0)==(c[a>>2]|0):0)&(c[k>>2]|0)>=4){c[f>>2]=0;c[n>>2]=8+(c[m>>2]|0);n=c[n>>2]|0;i=o;return n|0}else{c[f>>2]=1;c[n>>2]=1;n=c[n>>2]|0;i=o;return n|0}}l=m;k=c[l+4>>2]|0;if(k>>>0<0|(k|0)==0&(c[l>>2]|0)>>>0<=32767){c[c[j>>2]>>2]=2;c[n>>2]=2;n=c[n>>2]|0;i=o;return n|0}l=m;k=c[l+4>>2]|0;if(k>>>0<0|(k|0)==0&(c[l>>2]|0)>>>0<=8388607){c[c[j>>2]>>2]=3;c[n>>2]=3;n=c[n>>2]|0;i=o;return n|0}l=m;k=c[l+4>>2]|0;if(k>>>0<0|(k|0)==0&(c[l>>2]|0)>>>0<=2147483647){c[c[j>>2]>>2]=4;c[n>>2]=4;n=c[n>>2]|0;i=o;return n|0}l=c[m+4>>2]|0;f=c[j>>2]|0;if(l>>>0<32767|(l|0)==32767&(c[m>>2]|0)>>>0<=4294967295){c[f>>2]=6;c[n>>2]=5;n=c[n>>2]|0;i=o;return n|0}else{c[f>>2]=8;c[n>>2]=6;n=c[n>>2]|0;i=o;return n|0}return 0}function kI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;j=i;i=i+16|0;f=j+12|0;g=j+8|0;h=j;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;b=h;k=c[b+4>>2]|0;e=h;d=c[e>>2]|0;e=c[e+4>>2]|0;if(k>>>0<0|(k|0)==0&(c[b>>2]|0)>>>0<=127){a[c[g>>2]>>0]=d&127;c[f>>2]=1;k=c[f>>2]|0;i=j;return k|0}if(e>>>0<0|(e|0)==0&d>>>0<=16383){k=h;k=hR(c[k>>2]|0,c[k+4>>2]|0,7)|0;a[c[g>>2]>>0]=k&127|128;a[(c[g>>2]|0)+1>>0]=c[h>>2]&127;c[f>>2]=2;k=c[f>>2]|0;i=j;return k|0}else{k=h;c[f>>2]=WL(c[g>>2]|0,c[k>>2]|0,c[k+4>>2]|0)|0;k=c[f>>2]|0;i=j;return k|0}return 0}function lI(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+28|0;h=o+24|0;j=o+20|0;k=o+16|0;m=o+12|0;n=o;l=o+8|0;c[h>>2]=b;c[j>>2]=e;c[k>>2]=f;b=c[k>>2]|0;if((c[k>>2]|0)>>>0<=7&(c[k>>2]|0)>>>0>0){if((b|0)==7){j=c[j>>2]|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2]}else{e=c[j>>2]|0;f=c[e+4>>2]|0;j=n;c[j>>2]=c[e>>2];c[j+4>>2]=f}k=d[35916+(c[k>>2]|0)>>0]|0;c[l>>2]=k;c[m>>2]=k;do{k=c[n>>2]&255;j=(c[l>>2]|0)+-1|0;c[l>>2]=j;a[(c[h>>2]|0)+j>>0]=k;j=n;j=hR(c[j>>2]|0,c[j+4>>2]|0,8)|0;k=n;c[k>>2]=j;c[k+4>>2]=C}while((c[l>>2]|0)!=0);c[g>>2]=c[m>>2];n=c[g>>2]|0;i=o;return n|0}else{if(b>>>0<12){c[g>>2]=0;n=c[g>>2]|0;i=o;return n|0}c[m>>2]=c[(c[j>>2]|0)+12>>2];if((c[m>>2]|0)>>>0>0)iR(c[h>>2]|0,c[(c[j>>2]|0)+16>>2]|0,c[m>>2]|0)|0;c[g>>2]=c[m>>2];n=c[g>>2]|0;i=o;return n|0}return 0}function mI(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;k=p+28|0;l=p+24|0;m=p+20|0;n=p;o=p+16|0;h=p+12|0;j=p+8|0;c[l>>2]=f;c[m>>2]=g;g=n;c[g>>2]=0;c[g+4>>2]=0;if(!(c[(c[l>>2]|0)+52>>2]|0)){o=c[m>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[k>>2]=0;o=c[k>>2]|0;i=p;return o|0}c[o>>2]=gF(c[l>>2]|0)|0;a:while(1){if(c[o>>2]|0){f=16;break}c[j>>2]=c[(c[l>>2]|0)+120+(a[(c[l>>2]|0)+68>>0]<<2)>>2];if(!((d[(c[j>>2]|0)+4>>0]|0)==0?(a[(c[j>>2]|0)+2>>0]|0)!=0:0)){f=n;f=gR(c[f>>2]|0,c[f+4>>2]|0,e[(c[j>>2]|0)+18>>1]|0,0)|0;g=n;c[g>>2]=f;c[g+4>>2]=C}if(a[(c[j>>2]|0)+4>>0]|0){do{if(!(a[(c[l>>2]|0)+68>>0]|0)){f=10;break a}ZE(c[l>>2]|0)}while((e[(c[l>>2]|0)+80+(a[(c[l>>2]|0)+68>>0]<<1)>>1]|0)>=(e[(c[(c[l>>2]|0)+120+(a[(c[l>>2]|0)+68>>0]<<2)>>2]|0)+18>>1]|0));g=(c[l>>2]|0)+80+(a[(c[l>>2]|0)+68>>0]<<1)|0;b[g>>1]=(b[g>>1]|0)+1<<16>>16;c[j>>2]=c[(c[l>>2]|0)+120+(a[(c[l>>2]|0)+68>>0]<<2)>>2]}c[h>>2]=e[(c[l>>2]|0)+80+(a[(c[l>>2]|0)+68>>0]<<1)>>1];f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)==(e[(c[j>>2]|0)+18>>1]|0)){c[o>>2]=XE(f,$q((c[(c[j>>2]|0)+56>>2]|0)+((d[g+5>>0]|0)+8)|0)|0)|0;continue}else{c[o>>2]=XE(f,$q((c[g+56>>2]|0)+(e[(c[j>>2]|0)+20>>1]&(d[(c[(c[j>>2]|0)+64>>2]|0)+(c[h>>2]<<1)>>0]<<8|d[(c[(c[j>>2]|0)+64>>2]|0)+(c[h>>2]<<1)+1>>0]))|0)|0)|0;continue}}if((f|0)==10){j=n;n=c[j+4>>2]|0;o=c[m>>2]|0;c[o>>2]=c[j>>2];c[o+4>>2]=n;c[k>>2]=gF(c[l>>2]|0)|0;o=c[k>>2]|0;i=p;return o|0}else if((f|0)==16){c[k>>2]=c[o>>2];o=c[k>>2]|0;i=p;return o|0}return 0}function nI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;e=n+28|0;f=n+24|0;g=n+20|0;m=n+16|0;h=n+12|0;k=n+8|0;j=n+4|0;l=n;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[m>>2]=0;if(!(c[(c[e>>2]|0)+332>>2]|0)){m=c[m>>2]|0;i=n;return m|0}c[h>>2]=0;while(1){if(c[m>>2]|0){e=15;break}if((c[h>>2]|0)>=(c[(c[e>>2]|0)+308>>2]|0)){e=15;break}c[k>>2]=c[(c[(c[e>>2]|0)+332>>2]|0)+(c[h>>2]<<2)>>2];c[j>>2]=c[c[(c[k>>2]|0)+4>>2]>>2];if((c[(c[k>>2]|0)+8>>2]|0)!=0?(c[c[j>>2]>>2]|0)>=2:0){switch(c[f>>2]|0){case 0:{c[l>>2]=c[(c[j>>2]|0)+80>>2];c[(c[k>>2]|0)+20>>2]=(c[g>>2]|0)+1;break}case 2:{c[l>>2]=c[(c[j>>2]|0)+88>>2];break}default:c[l>>2]=c[(c[j>>2]|0)+84>>2]}if((c[l>>2]|0)!=0?(c[(c[k>>2]|0)+20>>2]|0)>(c[g>>2]|0):0)c[m>>2]=Yb[c[l>>2]&255](c[(c[k>>2]|0)+8>>2]|0,c[g>>2]|0)|0}c[h>>2]=(c[h>>2]|0)+1}if((e|0)==15){m=c[m>>2]|0;i=n;return m|0}return 0}function oI(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+32|0;g=o+20|0;h=o+16|0;j=o+12|0;l=o+8|0;m=o+4|0;k=o;c[g>>2]=b;c[h>>2]=e;c[j>>2]=f;c[m>>2]=0;if(!(c[g>>2]|0)){n=c[m>>2]|0;i=o;return n|0}kg(c[g>>2]|0);c[l>>2]=c[(c[(c[g>>2]|0)+4>>2]|0)+8>>2];a:while(1){if(!(c[l>>2]|0)){n=15;break}do if((c[j>>2]|0)!=0?(d[(c[l>>2]|0)+64>>0]&1|0)==0:0){if((d[(c[l>>2]|0)+66>>0]|0)!=1?(d[(c[l>>2]|0)+66>>0]|0)!=2:0)break;c[m>>2]=pH(c[l>>2]|0)|0;if(c[m>>2]|0)break a}else n=10;while(0);if((n|0)==10){n=0;pB(c[l>>2]|0);a[(c[l>>2]|0)+66>>0]=4;c[(c[l>>2]|0)+60>>2]=c[h>>2]}c[k>>2]=0;while(1){if((c[k>>2]|0)>(a[(c[l>>2]|0)+68>>0]|0))break;qB(c[(c[l>>2]|0)+120+(c[k>>2]<<2)>>2]|0);c[(c[l>>2]|0)+120+(c[k>>2]<<2)>>2]=0;c[k>>2]=(c[k>>2]|0)+1}c[l>>2]=c[(c[l>>2]|0)+8>>2]}if((n|0)==15){n=c[m>>2]|0;i=o;return n|0}oI(c[g>>2]|0,c[m>>2]|0,0)|0;n=c[m>>2]|0;i=o;return n|0}function pI(a,b,f){a=a|0;b=b|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;g=m+16|0;h=m+12|0;j=m+8|0;l=m+4|0;k=m;c[g>>2]=a;c[h>>2]=b;c[j>>2]=f;c[l>>2]=0;if(!(c[g>>2]|0)){l=c[l>>2]|0;i=m;return l|0}if((d[(c[g>>2]|0)+8>>0]|0|0)!=2){l=c[l>>2]|0;i=m;return l|0}c[k>>2]=c[(c[g>>2]|0)+4>>2];kg(c[g>>2]|0);c[l>>2]=Kr(c[c[k>>2]>>2]|0,c[h>>2]|0,c[j>>2]|0)|0;if(c[l>>2]|0){l=c[l>>2]|0;i=m;return l|0}if((c[j>>2]|0)<0?((e[(c[k>>2]|0)+22>>1]|0)&8|0)!=0:0)c[(c[k>>2]|0)+44>>2]=0;c[l>>2]=VL(c[k>>2]|0)|0;a=$q((c[(c[(c[k>>2]|0)+12>>2]|0)+56>>2]|0)+28|0)|0;c[(c[k>>2]|0)+44>>2]=a;l=c[l>>2]|0;i=m;return l|0}function qI(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;f=m+20|0;g=m+16|0;h=m+12|0;j=m+8|0;l=m+4|0;k=m;c[f>>2]=b;c[g>>2]=e;c[j>>2]=0;Sj();Nf(c[f>>2]|0);if(c[(c[f>>2]|0)+24>>2]&2)b=(d[(c[f>>2]|0)+140+5>>0]|0)==0;else b=0;c[l>>2]=b&1;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(c[(c[f>>2]|0)+20>>2]|0))break;c[k>>2]=c[(c[(c[f>>2]|0)+16>>2]|0)+(c[h>>2]<<4)+4>>2];if(c[k>>2]|0){if(bi(c[k>>2]|0)|0)c[j>>2]=1;Mg(c[k>>2]|0,c[g>>2]|0,((c[l>>2]|0)!=0^1)&1)|0}c[h>>2]=(c[h>>2]|0)+1}du(c[f>>2]|0)|0;Tj();if((c[(c[f>>2]|0)+24>>2]&2|0)!=0?(d[(c[f>>2]|0)+140+5>>0]|0)==0:0){Oh(c[f>>2]|0);zg(c[f>>2]|0)}l=(c[f>>2]|0)+512|0;c[l>>2]=0;c[l+4>>2]=0;l=(c[f>>2]|0)+520|0;c[l>>2]=0;c[l+4>>2]=0;l=(c[f>>2]|0)+24|0;c[l>>2]=c[l>>2]&-16777217;if(!(c[(c[f>>2]|0)+204>>2]|0)){i=m;return}if((c[j>>2]|0)==0?(a[(c[f>>2]|0)+63>>0]|0)!=0:0){i=m;return}Qb[c[(c[f>>2]|0)+204>>2]&255](c[(c[f>>2]|0)+200>>2]|0);i=m;return}function rI(b){b=b|0;var d=0,e=0,f=0;f=i;i=i+16|0;d=f+4|0;e=f;c[d>>2]=b;while(1){b=c[d>>2]|0;if(!(c[(c[d>>2]|0)+492>>2]|0))break;c[e>>2]=c[b+492>>2];c[(c[d>>2]|0)+492>>2]=c[(c[e>>2]|0)+24>>2];Sf(c[d>>2]|0,c[e>>2]|0)}c[b+500>>2]=0;c[(c[d>>2]|0)+504>>2]=0;a[(c[d>>2]|0)+71>>0]=0;i=f;return}function sI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=i;i=i+16|0;h=e+12|0;f=e+8|0;d=e+4|0;g=e;c[h>>2]=a;c[f>>2]=b;c[g>>2]=c[(c[h>>2]|0)+4>>2];kg(c[h>>2]|0);c[d>>2]=SL(c[c[g>>2]>>2]|0,c[f>>2]|0)|0;i=e;return c[d>>2]|0}function tI(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;k=s+24|0;l=s+20|0;n=s+16|0;o=s+12|0;p=s+28|0;r=s+8|0;m=s+4|0;q=s;c[k>>2]=e;c[l>>2]=f;c[n>>2]=g;c[o>>2]=h;a[p>>0]=j;c[r>>2]=(c[(c[k>>2]|0)+8>>2]|0)+(((c[(c[k>>2]|0)+28>>2]|0)-(c[l>>2]|0)|0)*40|0);c[q>>2]=0;j=88+(c[n>>2]<<3)|0;if(!(d[p>>0]|0))f=QL()|0;else f=0;c[m>>2]=j+f;if(c[(c[(c[k>>2]|0)+56>>2]|0)+(c[l>>2]<<2)>>2]|0){yI(c[k>>2]|0,c[(c[(c[k>>2]|0)+56>>2]|0)+(c[l>>2]<<2)>>2]|0);c[(c[(c[k>>2]|0)+56>>2]|0)+(c[l>>2]<<2)>>2]=0}if(tx(c[r>>2]|0,c[m>>2]|0)|0){r=c[q>>2]|0;i=s;return r|0}j=c[(c[r>>2]|0)+16>>2]|0;c[q>>2]=j;c[(c[(c[k>>2]|0)+56>>2]|0)+(c[l>>2]<<2)>>2]=j;j=c[q>>2]|0;f=j+88|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(f|0));a[c[q>>2]>>0]=a[p>>0]|0;a[(c[q>>2]|0)+1>>0]=c[o>>2];b[(c[q>>2]|0)+12>>1]=c[n>>2];c[(c[q>>2]|0)+76>>2]=(c[q>>2]|0)+80+(c[n>>2]<<2);if(d[p>>0]|0){r=c[q>>2]|0;i=s;return r|0}c[(c[q>>2]|0)+16>>2]=(c[(c[r>>2]|0)+16>>2]|0)+(88+(c[n>>2]<<3));RL(c[(c[q>>2]|0)+16>>2]|0);r=c[q>>2]|0;i=s;return r|0}function uI(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,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;g=n+20|0;h=n+16|0;j=n+12|0;k=n+8|0;l=n+4|0;m=n;c[g>>2]=a;c[h>>2]=b;c[j>>2]=d;c[k>>2]=e;c[l>>2]=f;if((c[h>>2]|0)<1){c[m>>2]=Lj(59722)|0;d=c[m>>2]|0;i=n;return d|0}else{kg(c[g>>2]|0);c[m>>2]=OL(c[g>>2]|0,c[h>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;d=c[m>>2]|0;i=n;return d|0}return 0}function vI(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;a[(c[f>>2]|0)+67>>0]=c[g>>2];i=e;return}function wI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;j=f+12|0;h=f+8|0;g=f+4|0;e=f;c[j>>2]=a;c[h>>2]=b;c[g>>2]=d;kg(c[j>>2]|0);c[e>>2]=NL(c[j>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;i=f;return c[e>>2]|0}function xI(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+64|0;r=w+48|0;j=w+44|0;k=w+40|0;u=w+36|0;l=w+32|0;m=w+28|0;t=w+24|0;s=w+20|0;p=w+16|0;o=w+12|0;v=w+8|0;n=w+4|0;q=w;c[r>>2]=f;c[j>>2]=g;c[k>>2]=h;c[v>>2]=0;c[p>>2]=24+((e[(c[(c[k>>2]|0)+24>>2]|0)+6>>1]|0)-1<<2);c[o>>2]=136;h=(c[o>>2]|0)+(c[p>>2]|0)|0;c[t>>2]=ph(c[r>>2]|0,h,((h|0)<0)<<31>>31)|0;c[(c[k>>2]|0)+16>>2]=c[t>>2];if(!(c[t>>2]|0)){c[v>>2]=7;v=c[v>>2]|0;i=w;return v|0}o=(c[t>>2]|0)+(c[o>>2]|0)|0;c[s>>2]=o;c[(c[t>>2]|0)+28>>2]=o;iR(c[s>>2]|0,c[(c[k>>2]|0)+24>>2]|0,c[p>>2]|0)|0;c[(c[s>>2]|0)+12>>2]=0;if(c[j>>2]|0){p=(c[s>>2]|0)+8|0;b[p>>1]=(e[p>>1]|0)+((e[(c[s>>2]|0)+6>>1]|0)-(c[j>>2]|0));b[(c[s>>2]|0)+6>>1]=c[j>>2]}p=pg(c[(c[(c[r>>2]|0)+16>>2]|0)+4>>2]|0)|0;c[u>>2]=p;c[(c[t>>2]|0)+12>>2]=p;a[(c[t>>2]|0)+59>>0]=1;a[(c[t>>2]|0)+58>>0]=-1;a[(c[t>>2]|0)+57>>0]=(d[(c[t>>2]|0)+59>>0]|0|0)>1;c[(c[t>>2]|0)+24>>2]=c[r>>2];c[l>>2]=0;while(1){if((c[l>>2]|0)>=(d[(c[t>>2]|0)+59>>0]|0|0))break;c[n>>2]=(c[t>>2]|0)+64+((c[l>>2]|0)*72|0);c[(c[n>>2]|0)+8>>2]=c[t>>2];c[l>>2]=(c[l>>2]|0)+1}if(!(Sq(c[r>>2]|0)|0)){c[q>>2]=c[58];p=_(c[q>>2]|0,c[u>>2]|0)|0;c[c[t>>2]>>2]=p;c[m>>2]=c[(c[(c[(c[r>>2]|0)+16>>2]|0)+12>>2]|0)+80>>2];if((c[m>>2]|0)<(c[q>>2]|0))c[m>>2]=c[q>>2];p=c[m>>2]|0;q=c[u>>2]|0;q=rR(p|0,((p|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;p=C;if((p|0)<0|(p|0)==0&q>>>0<536870912){q=c[m>>2]|0;j=c[u>>2]|0;j=rR(q|0,((q|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0}else j=536870912;c[(c[t>>2]|0)+4>>2]=j;if((c[50]|0)==0?(c[(c[t>>2]|0)+52>>2]=c[u>>2],u=c[u>>2]|0,u=_f(u,((u|0)<0)<<31>>31)|0,c[(c[t>>2]|0)+36+4>>2]=u,(c[(c[t>>2]|0)+36+4>>2]|0)==0):0)c[v>>2]=7}if(((e[(c[s>>2]|0)+6>>1]|0)+(e[(c[s>>2]|0)+8>>1]|0)|0)>=13){v=c[v>>2]|0;i=w;return v|0}if((c[(c[s>>2]|0)+20>>2]|0)!=0?(c[(c[s>>2]|0)+20>>2]|0)!=(c[(c[r>>2]|0)+8>>2]|0):0){v=c[v>>2]|0;i=w;return v|0}a[(c[t>>2]|0)+60>>0]=3;v=c[v>>2]|0;i=w;return v|0}function yI(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j+12|0;h=j+8|0;g=j+4|0;f=j;c[e>>2]=a;c[h>>2]=b;if(!(c[h>>2]|0)){i=j;return}switch(d[c[h>>2]>>0]|0|0){case 1:{ML(c[c[e>>2]>>2]|0,c[h>>2]|0);i=j;return}case 0:{e=c[h>>2]|0;if(c[(c[h>>2]|0)+20>>2]|0){lB(c[e+20>>2]|0)|0;i=j;return}else{nB(c[e+16>>2]|0)|0;i=j;return}}case 2:{c[g>>2]=c[(c[h>>2]|0)+16>>2];c[f>>2]=c[c[c[g>>2]>>2]>>2];h=(c[c[g>>2]>>2]|0)+4|0;c[h>>2]=(c[h>>2]|0)+-1;Tb[c[(c[f>>2]|0)+28>>2]&255](c[g>>2]|0)|0;i=j;return}default:{i=j;return}}}function zI(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g+4|0;e=g;c[f>>2]=a;c[e>>2]=b;i=g;return((d[(c[f>>2]|0)+67>>0]|0)&c[e>>2]|0)!=0|0}function AI(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;c[b>>2]=a;i=e;return 1!=(d[(c[b>>2]|0)+66>>0]|0|0)|0}function BI(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;h=k+12|0;g=k+8|0;f=k+4|0;j=k;c[g>>2]=b;c[f>>2]=e;if(1==(d[(c[g>>2]|0)+66>>0]|0|0)?((d[(c[g>>2]|0)+64>>0]|0)&8|0)!=0:0){c[h>>2]=0;j=c[h>>2]|0;i=k;return j|0}c[j>>2]=gF(c[g>>2]|0)|0;do if(!(c[j>>2]|0)){f=c[f>>2]|0;if(!(d[(c[g>>2]|0)+66>>0]|0)){c[f>>2]=1;break}c[f>>2]=0;c[j>>2]=YE(c[g>>2]|0)|0;f=(c[g>>2]|0)+64|0;b=d[f>>0]|0;if(!(c[j>>2]|0)){a[f>>0]=b|8;break}else{a[f>>0]=b&-9;break}}while(0);c[h>>2]=c[j>>2];j=c[h>>2]|0;i=k;return j|0}function CI(f,g,h,j,k,l,m,n,o){f=f|0;g=g|0;h=h|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,D=0,E=0,F=0,G=0,H=0,I=0,J=0;I=i;i=i+80|0;p=I+72|0;q=I+68|0;r=I+64|0;s=I;t=I+60|0;u=I+56|0;v=I+52|0;w=I+48|0;J=I+44|0;F=I+40|0;y=I+36|0;G=I+32|0;x=I+28|0;E=I+24|0;B=I+20|0;D=I+16|0;A=I+12|0;z=I+8|0;H=I+76|0;c[q>>2]=f;c[r>>2]=g;g=s;c[g>>2]=h;c[g+4>>2]=j;c[t>>2]=k;c[u>>2]=l;c[v>>2]=m;c[w>>2]=n;c[J>>2]=o;c[y>>2]=c[J>>2];c[G>>2]=0;c[B>>2]=c[c[q>>2]>>2];c[D>>2]=c[(c[B>>2]|0)+4>>2];c[z>>2]=0;h=c[q>>2]|0;if((d[(c[q>>2]|0)+66>>0]|0)==4){c[p>>2]=c[h+60>>2];J=c[p>>2]|0;i=I;return J|0}if((d[h+64>>0]&32|0)!=0?(c[F>>2]=nH(c[D>>2]|0,c[(c[q>>2]|0)+52>>2]|0,c[q>>2]|0)|0,(c[F>>2]|0)!=0):0){c[p>>2]=c[F>>2];J=c[p>>2]|0;i=I;return J|0}do if(!(c[(c[q>>2]|0)+72>>2]|0)){J=s;sK(c[B>>2]|0,c[J>>2]|0,c[J+4>>2]|0,0);J=s;B=c[J+4>>2]|0;if((d[(c[q>>2]|0)+64>>0]&2|0)!=0&((B|0)>0|(B|0)==0&(c[J>>2]|0)>>>0>0)?(J=(c[q>>2]|0)+16|0,o=c[J>>2]|0,J=c[J+4>>2]|0,B=s,B=fR(c[B>>2]|0,c[B+4>>2]|0,1,0)|0,(o|0)==(B|0)&(J|0)==(C|0)):0){c[y>>2]=-1;break}if((c[y>>2]|0)==0?(J=s,c[F>>2]=eF(c[q>>2]|0,0,c[J>>2]|0,c[J+4>>2]|0,c[w>>2]|0,y)|0,(c[F>>2]|0)!=0):0){c[p>>2]=c[F>>2];J=c[p>>2]|0;i=I;return J|0}}else if((c[y>>2]|0)==0?(J=s,c[F>>2]=bF(c[q>>2]|0,c[r>>2]|0,c[J>>2]|0,c[J+4>>2]|0,c[w>>2]|0,y)|0,(c[F>>2]|0)!=0):0){c[p>>2]=c[F>>2];J=c[p>>2]|0;i=I;return J|0}while(0);c[E>>2]=c[(c[q>>2]|0)+120+(a[(c[q>>2]|0)+68>>0]<<2)>>2];c[z>>2]=c[(c[D>>2]|0)+80>>2];J=s;c[F>>2]=LL(c[E>>2]|0,c[z>>2]|0,c[r>>2]|0,c[J>>2]|0,c[J+4>>2]|0,c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,G)|0;do if(!(c[F>>2]|0)){c[x>>2]=e[(c[q>>2]|0)+80+(a[(c[q>>2]|0)+68>>0]<<1)>>1];if(!(c[y>>2]|0)){c[F>>2]=Dg(c[(c[E>>2]|0)+72>>2]|0)|0;if(c[F>>2]|0)break;c[A>>2]=(c[(c[E>>2]|0)+56>>2]|0)+(e[(c[E>>2]|0)+20>>1]&(d[(c[(c[E>>2]|0)+64>>2]|0)+(c[x>>2]<<1)>>0]<<8|d[(c[(c[E>>2]|0)+64>>2]|0)+(c[x>>2]<<1)+1>>0]));if(!(a[(c[E>>2]|0)+4>>0]|0)){J=c[z>>2]|0;D=c[A>>2]|0;a[J>>0]=a[D>>0]|0;a[J+1>>0]=a[D+1>>0]|0;a[J+2>>0]=a[D+2>>0]|0;a[J+3>>0]=a[D+3>>0]|0}c[F>>2]=uK(c[E>>2]|0,c[A>>2]|0,H)|0;rL(c[E>>2]|0,c[x>>2]|0,e[H>>1]|0,F);if(c[F>>2]|0)break}else if((c[y>>2]|0)<0?(e[(c[E>>2]|0)+18>>1]|0)>0:0){H=(c[q>>2]|0)+80+(a[(c[q>>2]|0)+68>>0]<<1)|0;J=(b[H>>1]|0)+1<<16>>16;b[H>>1]=J;c[x>>2]=J&65535}sL(c[E>>2]|0,c[x>>2]|0,c[z>>2]|0,c[G>>2]|0,0,0,F);b[(c[q>>2]|0)+16+18>>1]=0;if((c[F>>2]|0)==0?(d[(c[E>>2]|0)+1>>0]|0)!=0:0){J=(c[q>>2]|0)+64|0;a[J>>0]=d[J>>0]&-3;c[F>>2]=tL(c[q>>2]|0)|0;a[(c[(c[q>>2]|0)+120+(a[(c[q>>2]|0)+68>>0]<<2)>>2]|0)+1>>0]=0;a[(c[q>>2]|0)+66>>0]=0}}while(0);c[p>>2]=c[F>>2];J=c[p>>2]|0;i=I;return J|0}function DI(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+64|0;t=z+56|0;u=z+52|0;A=z+63|0;l=z+48|0;m=z+44|0;y=z+40|0;x=z+36|0;n=z+32|0;w=z+28|0;v=z+24|0;q=z+60|0;s=z+20|0;r=z+62|0;k=z+16|0;o=z+12|0;j=z+8|0;h=z+4|0;p=z;c[u>>2]=f;a[A>>0]=g;c[l>>2]=c[c[u>>2]>>2];c[m>>2]=c[(c[l>>2]|0)+4>>2];c[s>>2]=0;a[r>>0]=d[A>>0]&2;c[v>>2]=a[(c[u>>2]|0)+68>>0];c[w>>2]=e[(c[u>>2]|0)+80+(c[v>>2]<<1)>>1];c[x>>2]=c[(c[u>>2]|0)+120+(c[v>>2]<<2)>>2];c[n>>2]=(c[(c[x>>2]|0)+56>>2]|0)+(e[(c[x>>2]|0)+20>>1]&(d[(c[(c[x>>2]|0)+64>>2]|0)+(c[w>>2]<<1)>>0]<<8|d[(c[(c[x>>2]|0)+64>>2]|0)+(c[w>>2]<<1)+1>>0]));if((a[(c[x>>2]|0)+4>>0]|0)==0?(c[k>>2]=0,c[y>>2]=UE(c[u>>2]|0,k)|0,(c[y>>2]|0)!=0):0){c[t>>2]=c[y>>2];A=c[t>>2]|0;i=z;return A|0}if((d[(c[u>>2]|0)+64>>0]&32|0)!=0?(c[y>>2]=nH(c[m>>2]|0,c[(c[u>>2]|0)+52>>2]|0,c[u>>2]|0)|0,(c[y>>2]|0)!=0):0){c[t>>2]=c[y>>2];A=c[t>>2]|0;i=z;return A|0}if(!(c[(c[u>>2]|0)+72>>2]|0)){A=(c[u>>2]|0)+16|0;sK(c[l>>2]|0,c[A>>2]|0,c[A+4>>2]|0,0)}do if(a[r>>0]|0){if((a[(c[x>>2]|0)+4>>0]|0)!=0?(A=e[(c[x>>2]|0)+16>>1]|0,A=A+((Mt(c[x>>2]|0,c[n>>2]|0)|0)&65535)+2|0,(A|0)<=((c[(c[m>>2]|0)+36>>2]<<1>>>0)/3|0|0)):0){c[s>>2]=1;break}c[y>>2]=rH(c[u>>2]|0)|0;if(c[y>>2]|0){c[t>>2]=c[y>>2];A=c[t>>2]|0;i=z;return A|0}}while(0);c[y>>2]=Dg(c[(c[x>>2]|0)+72>>2]|0)|0;if(c[y>>2]|0){c[t>>2]=c[y>>2];A=c[t>>2]|0;i=z;return A|0}c[y>>2]=uK(c[x>>2]|0,c[n>>2]|0,q)|0;rL(c[x>>2]|0,c[w>>2]|0,e[q>>1]|0,y);if(c[y>>2]|0){c[t>>2]=c[y>>2];A=c[t>>2]|0;i=z;return A|0}if(!(a[(c[x>>2]|0)+4>>0]|0)){c[o>>2]=c[(c[u>>2]|0)+120+(a[(c[u>>2]|0)+68>>0]<<2)>>2];c[h>>2]=c[(c[(c[u>>2]|0)+120+((c[v>>2]|0)+1<<2)>>2]|0)+84>>2];c[n>>2]=(c[(c[o>>2]|0)+56>>2]|0)+(e[(c[o>>2]|0)+20>>1]&(d[(c[(c[o>>2]|0)+64>>2]|0)+((e[(c[o>>2]|0)+18>>1]|0)-1<<1)>>0]<<8|d[(c[(c[o>>2]|0)+64>>2]|0)+((e[(c[o>>2]|0)+18>>1]|0)-1<<1)+1>>0]));if((c[n>>2]|0)>>>0<((c[(c[o>>2]|0)+56>>2]|0)+4|0)>>>0){c[t>>2]=Lj(63773)|0;A=c[t>>2]|0;i=z;return A|0}c[j>>2]=(Yb[c[(c[o>>2]|0)+76>>2]&255](c[o>>2]|0,c[n>>2]|0)|0)&65535;c[p>>2]=c[(c[m>>2]|0)+80>>2];c[y>>2]=Dg(c[(c[o>>2]|0)+72>>2]|0)|0;sL(c[x>>2]|0,c[w>>2]|0,(c[n>>2]|0)+-4|0,(c[j>>2]|0)+4|0,c[p>>2]|0,c[h>>2]|0,y);rL(c[o>>2]|0,(e[(c[o>>2]|0)+18>>1]|0)-1|0,c[j>>2]|0,y);if(c[y>>2]|0){c[t>>2]=c[y>>2];A=c[t>>2]|0;i=z;return A|0}}c[y>>2]=tL(c[u>>2]|0)|0;if((c[y>>2]|0)==0?(a[(c[u>>2]|0)+68>>0]|0)>(c[v>>2]|0):0){while(1){g=c[u>>2]|0;if((a[(c[u>>2]|0)+68>>0]|0)<=(c[v>>2]|0))break;q=g+68|0;A=a[q>>0]|0;a[q>>0]=A+-1<<24>>24;qB(c[(c[u>>2]|0)+120+(A<<24>>24<<2)>>2]|0)}c[y>>2]=tL(g)|0}do if(!(c[y>>2]|0)){g=c[u>>2]|0;if(!(c[s>>2]|0)){c[y>>2]=gF(g)|0;if(!(a[r>>0]|0))break;a[(c[u>>2]|0)+66>>0]=3;break}a[g+66>>0]=2;g=(c[u>>2]|0)+60|0;if((c[w>>2]|0)>=(e[(c[x>>2]|0)+18>>1]|0)){c[g>>2]=-1;b[(c[u>>2]|0)+80+(c[v>>2]<<1)>>1]=(e[(c[x>>2]|0)+18>>1]|0)-1;break}else{c[g>>2]=1;break}}while(0);c[t>>2]=c[y>>2];A=c[t>>2]|0;i=z;return A|0}function EI(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+48|0;o=s+44|0;t=s+40|0;p=s+36|0;h=s+32|0;q=s+28|0;n=s+24|0;r=s+20|0;m=s+16|0;j=s+12|0;l=s+8|0;k=s+4|0;c[t>>2]=a;c[p>>2]=d;c[h>>2]=f;c[q>>2]=g;c[n>>2]=c[(c[t>>2]|0)+16>>2];c[r>>2]=c[(c[n>>2]|0)+32>>2];c[m>>2]=c[(c[t>>2]|0)+24>>2];do if(!(c[r>>2]|0)){t=cF(c[m>>2]|0,0,0,s)|0;c[(c[n>>2]|0)+32>>2]=t;c[r>>2]=t;if(c[r>>2]|0){b[(c[r>>2]|0)+8>>1]=c[h>>2];break}c[o>>2]=7;t=c[o>>2]|0;i=s;return t|0}while(0);c[l>>2]=qL(c[n>>2]|0,k)|0;dF(c[m>>2]|0,c[k>>2]|0,c[l>>2]|0,c[r>>2]|0);c[j>>2]=0;while(1){if((c[j>>2]|0)>=(c[h>>2]|0)){h=10;break}if((e[(c[(c[r>>2]|0)+4>>2]|0)+((c[j>>2]|0)*40|0)+8>>1]|0)&1){h=8;break}c[j>>2]=(c[j>>2]|0)+1}if((h|0)==8){c[c[q>>2]>>2]=-1;c[o>>2]=0;t=c[o>>2]|0;i=s;return t|0}else if((h|0)==10){t=rF(c[(c[p>>2]|0)+12>>2]|0,c[(c[p>>2]|0)+16>>2]|0,c[r>>2]|0)|0;c[c[q>>2]>>2]=t;c[o>>2]=0;t=c[o>>2]|0;i=s;return t|0}return 0}function FI(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;f=k+20|0;m=k+16|0;g=k+12|0;l=k+8|0;j=k+4|0;h=k;c[m>>2]=a;c[g>>2]=d;c[l>>2]=c[(c[m>>2]|0)+16>>2];c[j>>2]=qL(c[l>>2]|0,h)|0;if(tx(c[g>>2]|0,c[h>>2]|0)|0){c[f>>2]=7;m=c[f>>2]|0;i=k;return m|0}else{c[(c[g>>2]|0)+12>>2]=c[h>>2];b[(c[g>>2]|0)+8>>1]=(e[(c[g>>2]|0)+8>>1]|0)&-49664|16;iR(c[(c[g>>2]|0)+16>>2]|0,c[j>>2]|0,c[h>>2]|0)|0;c[f>>2]=0;m=c[f>>2]|0;i=k;return m|0}return 0}function GI(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;i=i+16|0;d=g+8|0;e=g+4|0;f=g;c[d>>2]=a;c[e>>2]=b;if(!(c[(c[e>>2]|0)+8>>2]|0)){i=g;return}c[f>>2]=c[c[d>>2]>>2];Sf(c[f>>2]|0,c[(c[d>>2]|0)+44>>2]|0);b=nh(c[f>>2]|0,c[(c[e>>2]|0)+8>>2]|0)|0;c[(c[d>>2]|0)+44>>2]=b;Kd(c[(c[e>>2]|0)+8>>2]|0);c[(c[e>>2]|0)+8>>2]=0;i=g;return}function HI(a){a=a|0;var b=0,d=0,e=0;e=i;i=i+16|0;b=e+4|0;d=e;c[d>>2]=a;if(nL(c[(c[d>>2]|0)+16>>2]|0)|0){c[b>>2]=oL(c[d>>2]|0)|0;a=c[b>>2]|0;i=e;return a|0}else{c[b>>2]=0;a=c[b>>2]|0;i=e;return a|0}return 0}function II(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;j=i;i=i+32|0;f=j+16|0;k=j+12|0;e=j+8|0;g=j+4|0;h=j;c[k>>2]=a;c[e>>2]=b;c[h>>2]=0;c[g>>2]=c[(c[k>>2]|0)+16>>2];b=c[g>>2]|0;if(d[(c[g>>2]|0)+56>>0]|0){c[h>>2]=EK(b)|0;c[h>>2]=c[h>>2];if(!(c[h>>2]|0)){c[h>>2]=bL(c[g>>2]|0)|0;c[c[e>>2]>>2]=0}c[f>>2]=c[h>>2];k=c[f>>2]|0;i=j;return k|0}a=c[e>>2]|0;if(c[b+36>>2]|0){c[a>>2]=0;c[h>>2]=HK((c[g>>2]|0)+64|0,(c[g>>2]|0)+36|0)|0}else c[a>>2]=1;c[f>>2]=c[h>>2];k=c[f>>2]|0;i=j;return k|0}function JI(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0;h=i;i=i+16|0;f=h+8|0;e=h+4|0;g=h;c[f>>2]=a;c[e>>2]=b;c[g>>2]=gF(c[f>>2]|0)|0;do if(!(c[g>>2]|0)){e=c[e>>2]|0;if(!(d[(c[f>>2]|0)+66>>0]|0)){c[e>>2]=1;break}else{c[e>>2]=0;c[g>>2]=JF(c[f>>2]|0)|0;break}}while(0);i=h;return c[g>>2]|0}function KI(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+32|0;f=l+20|0;m=l+16|0;g=l+12|0;j=l+8|0;k=l+4|0;h=l;c[f>>2]=b;c[m>>2]=d;c[g>>2]=e;c[j>>2]=c[(c[m>>2]|0)+16>>2];b=c[j>>2]|0;if(a[(c[j>>2]|0)+56>>0]|0){c[k>>2]=UK(c[b+20>>2]|0,c[g>>2]|0)|0;m=c[k>>2]|0;i=l;return m|0}c[h>>2]=c[b+36>>2];c[(c[j>>2]|0)+36>>2]=c[(c[h>>2]|0)+4>>2];c[(c[h>>2]|0)+4>>2]=0;if(!(c[(c[j>>2]|0)+36+4>>2]|0))oK(c[f>>2]|0,c[h>>2]|0);c[c[g>>2]>>2]=((c[(c[j>>2]|0)+36>>2]|0)!=0^1)&1;c[k>>2]=0;m=c[k>>2]|0;i=l;return m|0}function LI(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+64|0;j=t+52|0;u=t+48|0;k=t+44|0;r=t+40|0;s=t+36|0;q=t+32|0;g=t+28|0;p=t+24|0;h=t+20|0;f=t+16|0;n=t+12|0;l=t+8|0;m=t+4|0;o=t;c[u>>2]=b;c[k>>2]=e;c[s>>2]=0;c[r>>2]=c[(c[u>>2]|0)+16>>2];b=(c[(c[k>>2]|0)+16>>2]|0)+1|0;if((d[(c[(c[k>>2]|0)+16>>2]|0)+1>>0]|0|0)<128)c[f>>2]=d[b>>0];else tF(b,f)|0;do if((c[f>>2]|0)>0&(c[f>>2]|0)<10&(c[f>>2]|0)!=7){u=(c[r>>2]|0)+60|0;a[u>>0]=(d[u>>0]|0)&1}else{if((c[f>>2]|0)>10?(c[f>>2]&1|0)!=0:0){u=(c[r>>2]|0)+60|0;a[u>>0]=(d[u>>0]|0)&2;break}a[(c[r>>2]|0)+60>>0]=0}while(0);c[p>>2]=(c[(c[k>>2]|0)+12>>2]|0)+8;f=c[(c[k>>2]|0)+12>>2]|0;u=c[(c[k>>2]|0)+12>>2]|0;c[h>>2]=f+(zF(u,((u|0)<0)<<31>>31)|0);if(c[(c[r>>2]|0)+4>>2]|0){b=c[r>>2]|0;if(c[(c[r>>2]|0)+36+4>>2]|0){if(c[b+48>>2]|0)b=((c[(c[r>>2]|0)+48>>2]|0)+(c[p>>2]|0)|0)>(c[(c[r>>2]|0)+4>>2]|0);else b=0;c[g>>2]=b&1}else{if((c[b+36+8>>2]|0)<=(c[(c[r>>2]|0)+4>>2]|0))if((c[(c[r>>2]|0)+36+8>>2]|0)>(c[c[r>>2]>>2]|0))b=(Hu()|0)!=0;else b=0;else b=1;c[g>>2]=b&1}if(c[g>>2]|0){c[s>>2]=EK(c[r>>2]|0)|0;c[(c[r>>2]|0)+36+8>>2]=0;c[(c[r>>2]|0)+48>>2]=0}}u=(c[r>>2]|0)+36+8|0;c[u>>2]=(c[u>>2]|0)+(c[h>>2]|0);if((c[h>>2]|0)>(c[(c[r>>2]|0)+8>>2]|0))c[(c[r>>2]|0)+8>>2]=c[h>>2];do if(c[(c[r>>2]|0)+36+4>>2]|0){c[n>>2]=(c[(c[r>>2]|0)+48>>2]|0)+(c[p>>2]|0);do if((c[n>>2]|0)>(c[(c[r>>2]|0)+52>>2]|0)){c[m>>2]=(c[(c[r>>2]|0)+36>>2]|0)-(c[(c[r>>2]|0)+36+4>>2]|0);c[o>>2]=c[(c[r>>2]|0)+52>>2]<<1;while(1){b=c[o>>2]|0;if((c[o>>2]|0)>=(c[n>>2]|0))break;c[o>>2]=b<<1}if((b|0)>(c[(c[r>>2]|0)+4>>2]|0))c[o>>2]=c[(c[r>>2]|0)+4>>2];if((c[o>>2]|0)<(c[n>>2]|0))c[o>>2]=c[n>>2];u=c[o>>2]|0;c[l>>2]=bg(c[(c[r>>2]|0)+36+4>>2]|0,u,((u|0)<0)<<31>>31)|0;if(c[l>>2]|0){c[(c[r>>2]|0)+36>>2]=(c[l>>2]|0)+(c[m>>2]|0);c[(c[r>>2]|0)+36+4>>2]=c[l>>2];c[(c[r>>2]|0)+52>>2]=c[o>>2];break}c[j>>2]=7;u=c[j>>2]|0;i=t;return u|0}while(0);c[q>>2]=(c[(c[r>>2]|0)+36+4>>2]|0)+(c[(c[r>>2]|0)+48>>2]|0);u=(c[r>>2]|0)+48|0;c[u>>2]=(c[u>>2]|0)+((c[p>>2]|0)+7&-8);if(c[(c[r>>2]|0)+36>>2]|0)c[(c[q>>2]|0)+4>>2]=(c[(c[r>>2]|0)+36>>2]|0)-(c[(c[r>>2]|0)+36+4>>2]|0)}else{u=c[p>>2]|0;c[q>>2]=_f(u,((u|0)<0)<<31>>31)|0;if(c[q>>2]|0){c[(c[q>>2]|0)+4>>2]=c[(c[r>>2]|0)+36>>2];break}c[j>>2]=7;u=c[j>>2]|0;i=t;return u|0}while(0);iR((c[q>>2]|0)+8|0,c[(c[k>>2]|0)+16>>2]|0,c[(c[k>>2]|0)+12>>2]|0)|0;c[c[q>>2]>>2]=c[(c[k>>2]|0)+12>>2];c[(c[r>>2]|0)+36>>2]=c[q>>2];c[j>>2]=c[s>>2];u=c[j>>2]|0;i=t;return u|0}function MI(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=i;i=i+128|0;g=o+116|0;r=o+112|0;q=o+108|0;h=o+104|0;p=o+80|0;f=o+100|0;l=o+96|0;m=o+92|0;j=o+88|0;k=o+40|0;n=o;c[r>>2]=a;c[q>>2]=b;c[h>>2]=e;e=p;c[e>>2]=0;c[e+4>>2]=0;sH(c[q>>2]|0,p)|0;AF(k,c[r>>2]|0,0);c[f>>2]=hI(c[q>>2]|0,0,c[p>>2]|0,1,k)|0;if(c[f>>2]|0){c[g>>2]=c[f>>2];r=c[g>>2]|0;i=o;return r|0}a=c[k+16>>2]|0;if((d[c[k+16>>2]>>0]|0|0)<128)c[l>>2]=d[a>>0];else tF(a,l)|0;if((c[l>>2]|0)>>>0>=3?(c[l>>2]|0)<=(c[k+12>>2]|0):0){a=(c[k+16>>2]|0)+((c[l>>2]|0)-1)|0;if((d[(c[k+16>>2]|0)+((c[l>>2]|0)-1)>>0]|0|0)<128)c[m>>2]=d[a>>0];else tF(a,m)|0;if(!((c[m>>2]|0)>>>0<1|(c[m>>2]|0)>>>0>9|(c[m>>2]|0)==7)?(c[j>>2]=d[35916+(c[m>>2]|0)>>0],(c[k+12>>2]|0)>>>0>=((c[l>>2]|0)+(c[j>>2]|0)|0)>>>0):0){vF((c[k+16>>2]|0)+((c[k+12>>2]|0)-(c[j>>2]|0))|0,c[m>>2]|0,n)|0;p=n;q=c[p+4>>2]|0;r=c[h>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;Ug(k);c[g>>2]=0;r=c[g>>2]|0;i=o;return r|0}}Ug(k);c[g>>2]=Lj(72119)|0;r=c[g>>2]|0;i=o;return r|0}function NI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+80|0;f=o+72|0;g=o+68|0;p=o+64|0;h=o+60|0;j=o+56|0;l=o+40|0;n=o+52|0;m=o+48|0;k=o;c[g>>2]=a;c[p>>2]=b;c[h>>2]=d;c[j>>2]=e;b=l;c[b>>2]=0;c[b+4>>2]=0;c[m>>2]=c[(c[p>>2]|0)+16>>2];sH(c[m>>2]|0,l)|0;b=l;a=c[b+4>>2]|0;e=l;d=c[e+4>>2]|0;if((a|0)<0|(a|0)==0&(c[b>>2]|0)>>>0<=0|((d|0)>0|(d|0)==0&(c[e>>2]|0)>>>0>2147483647)){c[c[j>>2]>>2]=0;c[f>>2]=Lj(72153)|0;p=c[f>>2]|0;i=o;return p|0}AF(k,c[g>>2]|0,0);c[n>>2]=hI(c[m>>2]|0,0,c[l>>2]|0,1,k)|0;if(c[n>>2]|0){c[f>>2]=c[n>>2];p=c[f>>2]|0;i=o;return p|0}else{p=rF(c[k+12>>2]|0,c[k+16>>2]|0,c[h>>2]|0)|0;c[c[j>>2]>>2]=p;Ug(k);c[f>>2]=0;p=c[f>>2]|0;i=o;return p|0}return 0}function OI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;i=i+16|0;j=f+12|0;h=f+8|0;g=f+4|0;e=f;c[j>>2]=a;c[h>>2]=b;c[g>>2]=d;kg(c[j>>2]|0);c[e>>2]=DK(c[j>>2]|0,c[h>>2]|0,c[g>>2]|0)|0;i=f;return c[e>>2]|0}function PI(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=i;i=i+48|0;p=n+32|0;o=n+28|0;f=n+24|0;g=n+20|0;j=n+16|0;k=n+12|0;h=n+8|0;m=n+4|0;l=n;c[p>>2]=a;c[o>>2]=b;c[f>>2]=d;c[g>>2]=e;c[h>>2]=(c[(c[p>>2]|0)+16>>2]|0)+(c[o>>2]<<4);c[k>>2]=(c[(c[h>>2]|0)+12>>2]|0)+8;c[j>>2]=c[(c[k>>2]|0)+8>>2];while(1){if(!(c[j>>2]|0))break;c[m>>2]=c[(c[j>>2]|0)+8>>2];if((c[(c[m>>2]|0)+28>>2]|0)==(c[f>>2]|0))c[(c[m>>2]|0)+28>>2]=c[g>>2];c[j>>2]=c[c[j>>2]>>2]}c[k>>2]=(c[(c[h>>2]|0)+12>>2]|0)+24;c[j>>2]=c[(c[k>>2]|0)+8>>2];while(1){if(!(c[j>>2]|0))break;c[l>>2]=c[(c[j>>2]|0)+8>>2];if((c[(c[l>>2]|0)+44>>2]|0)==(c[f>>2]|0))c[(c[l>>2]|0)+44>>2]=c[g>>2];c[j>>2]=c[c[j>>2]>>2]}i=n;return}function QI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;e=k+16|0;f=k+12|0;g=k+8|0;j=k+4|0;h=k;c[e>>2]=a;c[f>>2]=b;c[g>>2]=d;c[h>>2]=c[(c[e>>2]|0)+4>>2];kg(c[e>>2]|0);c[j>>2]=nH(c[h>>2]|0,c[f>>2]|0,0)|0;if(c[j>>2]|0){j=c[j>>2]|0;i=k;return j|0}sK(c[e>>2]|0,0,0,1);c[j>>2]=tK(c[h>>2]|0,c[f>>2]|0,0,c[g>>2]|0)|0;j=c[j>>2]|0;i=k;return j|0}function RI(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;f=k+12|0;g=k+8|0;h=k+4|0;j=k;c[f>>2]=b;c[g>>2]=e;mK(c[(c[g>>2]|0)+20>>2]|0);c[(c[g>>2]|0)+20>>2]=0;c[h>>2]=0;while(1){if((c[h>>2]|0)>=(d[(c[g>>2]|0)+59>>0]|0|0))break;c[j>>2]=(c[g>>2]|0)+64+((c[h>>2]|0)*72|0);nK(c[f>>2]|0,c[j>>2]|0);c[(c[j>>2]|0)+8>>2]=c[g>>2];c[h>>2]=(c[h>>2]|0)+1}if(!(c[(c[g>>2]|0)+36+4>>2]|0))oK(0,c[(c[g>>2]|0)+36>>2]|0);c[(c[g>>2]|0)+36>>2]=0;c[(c[g>>2]|0)+36+8>>2]=0;a[(c[g>>2]|0)+56>>0]=0;c[(c[g>>2]|0)+48>>2]=0;c[(c[g>>2]|0)+8>>2]=0;Sf(c[f>>2]|0,c[(c[g>>2]|0)+32>>2]|0);c[(c[g>>2]|0)+32>>2]=0;i=k;return}function SI(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;a=QI(c[c[d>>2]>>2]|0,c[(c[d>>2]|0)+52>>2]|0,0)|0;i=b;return a|0}function TI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;i=i+32|0;f=e+16|0;k=e+12|0;h=e+8|0;g=e+4|0;j=e;c[f>>2]=a;c[k>>2]=b;c[h>>2]=d;c[j>>2]=(c[(c[f>>2]|0)+16>>2]|0)+(c[k>>2]<<4);c[g>>2]=Oj((c[(c[j>>2]|0)+12>>2]|0)+8|0,c[h>>2]|0,0)|0;Qf(c[f>>2]|0,c[g>>2]|0);d=(c[f>>2]|0)+24|0;c[d>>2]=c[d>>2]|2;i=e; +return}function UI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;e=h+20|0;l=h+16|0;j=h+12|0;g=h+8|0;k=h+4|0;f=h;c[e>>2]=a;c[l>>2]=b;c[j>>2]=d;c[k>>2]=(c[(c[(c[e>>2]|0)+16>>2]|0)+(c[l>>2]<<4)+12>>2]|0)+24;c[g>>2]=Oj(c[k>>2]|0,c[j>>2]|0,0)|0;if(!(c[g>>2]|0)){l=c[e>>2]|0;l=l+24|0;k=c[l>>2]|0;k=k|2;c[l>>2]=k;i=h;return}a=c[g>>2]|0;if((c[(c[(c[g>>2]|0)+12>>2]|0)+8>>2]|0)!=(c[g>>2]|0)){c[f>>2]=c[(c[a+12>>2]|0)+8>>2];while(1){if(c[f>>2]|0)b=(c[(c[f>>2]|0)+20>>2]|0)!=(c[g>>2]|0);else b=0;a=c[f>>2]|0;if(!b)break;c[f>>2]=c[a+20>>2]}if((a|0)!=0?(c[(c[f>>2]|0)+20>>2]|0)==(c[g>>2]|0):0)c[(c[f>>2]|0)+20>>2]=c[(c[g>>2]|0)+20>>2]}else c[(c[(c[g>>2]|0)+12>>2]|0)+8>>2]=c[a+20>>2];WG(c[e>>2]|0,c[g>>2]|0);l=c[e>>2]|0;l=l+24|0;k=c[l>>2]|0;k=k|2;c[l>>2]=k;i=h;return}function VI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;j=i;i=i+32|0;f=j+24|0;m=j+20|0;k=j+16|0;g=j+12|0;l=j+8|0;e=j+4|0;h=j;c[f>>2]=a;c[m>>2]=b;c[k>>2]=d;c[l>>2]=(c[(c[(c[f>>2]|0)+16>>2]|0)+(c[m>>2]<<4)+12>>2]|0)+40;c[g>>2]=Oj(c[l>>2]|0,c[k>>2]|0,0)|0;if(!(c[g>>2]|0)){i=j;return}if((c[(c[g>>2]|0)+20>>2]|0)==(c[(c[g>>2]|0)+24>>2]|0)){c[e>>2]=BB(c[g>>2]|0)|0;c[h>>2]=(c[e>>2]|0)+60;while(1){a=(c[c[h>>2]>>2]|0)+32|0;if((c[c[h>>2]>>2]|0)==(c[g>>2]|0))break;c[h>>2]=a}c[c[h>>2]>>2]=c[a>>2]}Pf(c[f>>2]|0,c[g>>2]|0);m=(c[f>>2]|0)+24|0;c[m>>2]=c[m>>2]|2;i=j;return}function WI(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;t=i;i=i+240|0;s=t+16|0;r=t+8|0;v=t+124|0;j=t+120|0;k=t+116|0;u=t+112|0;l=t+108|0;m=t+104|0;p=t+32|0;o=t+24|0;q=t+20|0;n=t;c[v>>2]=b;c[j>>2]=e;c[k>>2]=f;c[u>>2]=g;c[l>>2]=h;c[o>>2]=c[(c[v>>2]|0)+4>>2];c[q>>2]=c[(c[(c[o>>2]|0)+4>>2]|0)+24>>2];kg(c[v>>2]|0);c[p>>2]=c[o>>2];c[p+4>>2]=c[c[o>>2]>>2];c[p+12>>2]=$E(c[p>>2]|0)|0;c[p+16>>2]=c[u>>2];c[p+20>>2]=0;c[p+24>>2]=0;c[p+28>>2]=0;c[p+32>>2]=0;c[p+36>>2]=0;c[p+8>>2]=0;c[p+68>>2]=0;cg(p+40|0,0,t+128|0,100,1e9);a[p+40+25>>0]=1;a:do if(c[p+12>>2]|0){c[p+8>>2]=ig((((c[p+12>>2]|0)>>>0)/8|0)+1|0,0)|0;if(!(c[p+8>>2]|0)){c[p+24>>2]=1;break}c[p+68>>2]=Ti(c[(c[o>>2]|0)+32>>2]|0)|0;if(!(c[p+68>>2]|0)){c[p+24>>2]=1;break}c[m>>2]=(((c[381]|0)>>>0)/((c[(c[o>>2]|0)+32>>2]|0)>>>0)|0)+1;if((c[m>>2]|0)>>>0<=(c[p+12>>2]|0)>>>0)dK(p,c[m>>2]|0);c[p+28>>2]=42551;v=$q((c[(c[(c[o>>2]|0)+12>>2]|0)+56>>2]|0)+32|0)|0;eK(p,1,v,$q((c[(c[(c[o>>2]|0)+12>>2]|0)+56>>2]|0)+36|0)|0);c[p+28>>2]=0;v=(c[(c[o>>2]|0)+4>>2]|0)+24|0;c[v>>2]=c[v>>2]&-268435457;c[m>>2]=0;while(1){if(!((c[m>>2]|0)<(c[k>>2]|0)?(c[p+16>>2]|0)!=0:0))break;if(c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]|0){if((d[(c[o>>2]|0)+17>>0]|0)!=0?(c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]|0)>1:0)fK(p,c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]|0,1,0);gK(p,c[(c[j>>2]|0)+(c[m>>2]<<2)>>2]|0,n,-1,2147483647)|0}c[m>>2]=(c[m>>2]|0)+1}c[(c[(c[o>>2]|0)+4>>2]|0)+24>>2]=c[q>>2];c[m>>2]=1;while(1){if(!((c[m>>2]|0)>>>0<=(c[p+12>>2]|0)>>>0?(c[p+16>>2]|0)!=0:0))break a;do if(!(hK(p,c[m>>2]|0)|0)){v=lF(c[o>>2]|0,c[m>>2]|0)|0;if((v|0)==(c[m>>2]|0)?(a[(c[o>>2]|0)+17>>0]|0)!=0:0)break;c[r>>2]=c[m>>2];iK(p,42567,r)}while(0);if(((hK(p,c[m>>2]|0)|0)!=0?(v=lF(c[o>>2]|0,c[m>>2]|0)|0,(v|0)==(c[m>>2]|0)):0)?(d[(c[o>>2]|0)+17>>0]|0)!=0:0){c[s>>2]=c[m>>2];iK(p,42589,s)}c[m>>2]=(c[m>>2]|0)+1}}while(0);Wi(c[p+68>>2]|0);Kd(c[p+8>>2]|0);if(c[p+24>>2]|0){fA(p+40|0);v=p+20|0;c[v>>2]=(c[v>>2]|0)+1}c[c[l>>2]>>2]=c[p+20>>2];if(c[p+20>>2]|0){v=p+40|0;v=eg(v)|0;i=t;return v|0}fA(p+40|0);v=p+40|0;v=eg(v)|0;i=t;return v|0}function XI(d){d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;e=g+4|0;f=g;c[e>>2]=d;c[f>>2]=c[(c[e>>2]|0)+32>>2];Ug(c[e>>2]|0);d=Fw(c[f>>2]|0,64,0)|0;c[(c[e>>2]|0)+20>>2]=d;if(a[(c[f>>2]|0)+65>>0]|0){b[(c[e>>2]|0)+8>>1]=1;c[(c[e>>2]|0)+24>>2]=0;i=g;return}else{d=$t(c[f>>2]|0,c[(c[e>>2]|0)+20>>2]|0)|0;c[(c[e>>2]|0)+24>>2]=d;d=cK(c[f>>2]|0,c[(c[e>>2]|0)+20>>2]|0,c[(c[e>>2]|0)+24>>2]|0)|0;c[c[e>>2]>>2]=d;b[(c[e>>2]|0)+8>>1]=32;i=g;return}}function YI(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;g=l+16|0;h=l;j=l+12|0;k=l+8|0;c[g>>2]=a;a=h;c[a>>2]=d;c[a+4>>2]=f;c[j>>2]=$J(c[g>>2]|0)|0;if(!(c[j>>2]|0)){i=l;return}d=h;f=c[d+4>>2]|0;a=c[j>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=f;c[(c[j>>2]|0)+8>>2]=0;c[k>>2]=c[(c[g>>2]|0)+12>>2];if(c[k>>2]|0){if(((e[(c[g>>2]|0)+26>>1]|0)&1|0)!=0?(h,d=c[h+4>>2]|0,a=c[k>>2]|0,f=c[a+4>>2]|0,(d|0)<(f|0)|((d|0)==(f|0)?(c[h>>2]|0)>>>0<=(c[a>>2]|0)>>>0:0)):0){a=(c[g>>2]|0)+26|0;b[a>>1]=(e[a>>1]|0)&-2}c[(c[k>>2]|0)+8>>2]=c[j>>2]}else c[(c[g>>2]|0)+8>>2]=c[j>>2];c[(c[g>>2]|0)+12>>2]=c[j>>2];i=l;return}function ZI(a,b){a=a|0;b=b|0;var d=0,f=0,g=0,h=0,j=0;h=i;i=i+16|0;d=h+8|0;f=h+4|0;g=h;c[f>>2]=a;c[g>>2]=b;if(!((e[(c[f>>2]|0)+26>>1]|0)&2))bK(c[f>>2]|0);if(!(c[(c[f>>2]|0)+8>>2]|0)){c[d>>2]=0;b=c[d>>2]|0;i=h;return b|0}j=c[(c[f>>2]|0)+8>>2]|0;a=c[j+4>>2]|0;b=c[g>>2]|0;c[b>>2]=c[j>>2];c[b+4>>2]=a;c[(c[f>>2]|0)+8>>2]=c[(c[(c[f>>2]|0)+8>>2]|0)+8>>2];if(!(c[(c[f>>2]|0)+8>>2]|0))FF(c[f>>2]|0);c[d>>2]=1;j=c[d>>2]|0;i=h;return j|0}function _I(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;o=s+36|0;h=s+32|0;j=s+28|0;p=s;q=s+24|0;r=s+20|0;m=s+16|0;k=s+12|0;l=s+8|0;c[h>>2]=a;c[j>>2]=d;a=p;c[a>>2]=f;c[a+4>>2]=g;if((c[j>>2]|0)!=(c[(c[h>>2]|0)+28>>2]|0)){c[q>>2]=c[(c[h>>2]|0)+8>>2];if(c[q>>2]|0){c[m>>2]=(c[h>>2]|0)+20;if(!((e[(c[h>>2]|0)+26>>1]|0)&1))c[q>>2]=XJ(c[q>>2]|0)|0;c[r>>2]=c[(c[h>>2]|0)+20>>2];while(1){if(!(c[r>>2]|0))break;c[m>>2]=(c[r>>2]|0)+8;if(!(c[(c[r>>2]|0)+12>>2]|0)){n=8;break}ZJ(c[(c[r>>2]|0)+12>>2]|0,k,l);c[(c[r>>2]|0)+12>>2]=0;c[q>>2]=_J(c[k>>2]|0,c[q>>2]|0)|0;c[r>>2]=c[(c[r>>2]|0)+8>>2]}if((n|0)==8){n=YJ(c[q>>2]|0)|0;c[(c[r>>2]|0)+12>>2]=n}if((c[r>>2]|0)==0?(n=$J(c[h>>2]|0)|0,c[r>>2]=n,c[c[m>>2]>>2]=n,(c[r>>2]|0)!=0):0){n=c[r>>2]|0;c[n>>2]=0;c[n+4>>2]=0;c[(c[r>>2]|0)+8>>2]=0;n=YJ(c[q>>2]|0)|0;c[(c[r>>2]|0)+12>>2]=n}c[(c[h>>2]|0)+8>>2]=0;c[(c[h>>2]|0)+12>>2]=0;n=(c[h>>2]|0)+26|0;b[n>>1]=e[n>>1]|0|1}c[(c[h>>2]|0)+28>>2]=c[j>>2]}c[r>>2]=c[(c[h>>2]|0)+20>>2];a:while(1){if(!(c[r>>2]|0)){n=25;break}c[q>>2]=c[(c[r>>2]|0)+12>>2];while(1){if(!(c[q>>2]|0))break;m=c[q>>2]|0;a=c[m+4>>2]|0;n=p;l=c[n+4>>2]|0;f=c[q>>2]|0;if((a|0)<(l|0)|((a|0)==(l|0)?(c[m>>2]|0)>>>0<(c[n>>2]|0)>>>0:0)){c[q>>2]=c[f+8>>2];continue}m=f;a=c[m+4>>2]|0;n=p;l=c[n+4>>2]|0;if(!((a|0)>(l|0)|((a|0)==(l|0)?(c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0:0))){n=23;break a}c[q>>2]=c[(c[q>>2]|0)+12>>2]}c[r>>2]=c[(c[r>>2]|0)+8>>2]}if((n|0)==23){c[o>>2]=1;r=c[o>>2]|0;i=s;return r|0}else if((n|0)==25){c[o>>2]=0;r=c[o>>2]|0;i=s;return r|0}return 0}function $I(a){a=a|0;var b=0,e=0,f=0;f=i;i=i+16|0;b=f+4|0;e=f;c[e>>2]=a;if((d[(c[e>>2]|0)+17>>0]|0|0)>=3){c[b>>2]=0;a=c[b>>2]|0;i=f;return a|0}if((c[c[(c[e>>2]|0)+68>>2]>>2]|0)!=0?(a=(c[e>>2]|0)+80|0,e=c[a+4>>2]|0,(e|0)>0|(e|0)==0&(c[a>>2]|0)>>>0>0):0){c[b>>2]=0;a=c[b>>2]|0;i=f;return a|0}c[b>>2]=1;a=c[b>>2]|0;i=f;return a|0}function aJ(a){a=a|0;var b=0,e=0,f=0;e=i;i=i+16|0;f=e+4|0;b=e;c[f>>2]=a;c[b>>2]=c[c[(c[f>>2]|0)+64>>2]>>2];if(d[(c[f>>2]|0)+4>>0]|0){f=1;f=f&1;i=e;return f|0}if((c[c[b>>2]>>2]|0)<2){f=0;f=f&1;i=e;return f|0}f=(c[(c[b>>2]|0)+52>>2]|0)!=0;f=f&1;i=e;return f|0}function bJ(a){a=a|0;var b=0,e=0,f=0,g=0;g=i;i=i+16|0;b=g+8|0;f=g+4|0;e=g;c[b>>2]=a;c[f>>2]=0;if(!(c[(c[b>>2]|0)+216>>2]|0)){c[e>>2]=0;c[f>>2]=vt(c[b>>2]|0,1)|0;if(!(c[f>>2]|0))c[f>>2]=Nr(c[c[b>>2]>>2]|0,c[(c[b>>2]|0)+220>>2]|0,0,e)|0;if((c[f>>2]|0)==0&(c[e>>2]|0)!=0)c[f>>2]=SJ(c[b>>2]|0)|0}if(c[f>>2]|0){f=c[f>>2]|0;i=g;return f|0}if(!(c[(c[b>>2]|0)+216>>2]|0)){f=c[f>>2]|0;i=g;return f|0}c[f>>2]=TJ(c[b>>2]|0)|0;if(c[f>>2]|0){f=c[f>>2]|0;i=g;return f|0}c[f>>2]=cr(c[(c[b>>2]|0)+216>>2]|0,d[(c[b>>2]|0)+10>>0]|0,c[(c[b>>2]|0)+160>>2]|0,c[(c[b>>2]|0)+208>>2]|0)|0;c[(c[b>>2]|0)+216>>2]=0;Xi(c[b>>2]|0);f=c[f>>2]|0;i=g;return f|0}function cJ(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+32|0;f=l+12|0;g=l+8|0;h=l+16|0;j=l+4|0;k=l;c[f>>2]=b;c[g>>2]=e;a[h>>0]=a[(c[f>>2]|0)+5>>0]|0;if((a[(c[f>>2]|0)+16>>0]|0)!=0?(c[g>>2]|0)!=4&(c[g>>2]|0)!=2:0)c[g>>2]=d[h>>0];do if((c[g>>2]|0)!=(d[h>>0]|0)){a[(c[f>>2]|0)+5>>0]=c[g>>2];if(((a[(c[f>>2]|0)+4>>0]|0)==0?(d[h>>0]&5|0)==1:0)?(c[g>>2]&1|0)==0:0){hr(c[(c[f>>2]|0)+68>>2]|0)|0;if((d[(c[f>>2]|0)+18>>0]|0)>=2){qr(c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+180>>2]|0,0)|0;break}c[j>>2]=0;c[k>>2]=d[(c[f>>2]|0)+17>>0];if(!(c[k>>2]|0))c[j>>2]=LJ(c[f>>2]|0)|0;if((d[(c[f>>2]|0)+17>>0]|0)==1)c[j>>2]=vt(c[f>>2]|0,2)|0;if(!(c[j>>2]|0))qr(c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+180>>2]|0,0)|0;if((c[j>>2]|0)==0&(c[k>>2]|0)==1){wr(c[f>>2]|0,1)|0;break}if(c[k>>2]|0)break;dr(c[f>>2]|0);break}if((c[g>>2]|0)==2)hr(c[(c[f>>2]|0)+68>>2]|0)|0}while(0);i=l;return d[(c[f>>2]|0)+5>>0]|0}function uR(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(C=n,f)|0}else{if(!g){n=0;f=0;return(C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return(C=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(aa(i|0)|0)-(aa(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<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return(C=n,f)|0}g=h-1|0;if(g&h){i=(aa(h|0)|0)+33-(aa(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<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return(C=o,p)|0}else{p=nR(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return(C=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return(C=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return(C=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((nR(i|0)|0)>>>0);return(C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return(C=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=gR(m|0,l|0,-1,-1)|0;d=C;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;fR(k,d,e,n)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=fR(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){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(C=o,p)|0}function vR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ob[a&255](b|0,c|0,d|0)|0}function wR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(0,a|0,b|0,c|0)|0}function xR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(1,a|0,b|0,c|0)|0}function yR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(2,a|0,b|0,c|0)|0}function zR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(3,a|0,b|0,c|0)|0}function AR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(4,a|0,b|0,c|0)|0}function BR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(5,a|0,b|0,c|0)|0}function CR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(6,a|0,b|0,c|0)|0}function DR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(7,a|0,b|0,c|0)|0}function ER(a,b,c){a=a|0;b=b|0;c=c|0;return ea(8,a|0,b|0,c|0)|0}function FR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(9,a|0,b|0,c|0)|0}function GR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(10,a|0,b|0,c|0)|0}function HR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(11,a|0,b|0,c|0)|0}function IR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(12,a|0,b|0,c|0)|0}function JR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(13,a|0,b|0,c|0)|0}function KR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(14,a|0,b|0,c|0)|0}function LR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(15,a|0,b|0,c|0)|0}function MR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(16,a|0,b|0,c|0)|0}function NR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(17,a|0,b|0,c|0)|0}function OR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(18,a|0,b|0,c|0)|0}function PR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(19,a|0,b|0,c|0)|0}function QR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(20,a|0,b|0,c|0)|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(21,a|0,b|0,c|0)|0}function SR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(22,a|0,b|0,c|0)|0}function TR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(23,a|0,b|0,c|0)|0}function UR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(24,a|0,b|0,c|0)|0}function VR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(25,a|0,b|0,c|0)|0}function WR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(26,a|0,b|0,c|0)|0}function XR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(27,a|0,b|0,c|0)|0}function YR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(28,a|0,b|0,c|0)|0}function ZR(a,b,c){a=a|0;b=b|0;c=c|0;return ea(29,a|0,b|0,c|0)|0}function _R(a,b,c){a=a|0;b=b|0;c=c|0;return ea(30,a|0,b|0,c|0)|0}function $R(a,b,c){a=a|0;b=b|0;c=c|0;return ea(31,a|0,b|0,c|0)|0}function aS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(32,a|0,b|0,c|0)|0}function bS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(33,a|0,b|0,c|0)|0}function cS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(34,a|0,b|0,c|0)|0}function dS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(35,a|0,b|0,c|0)|0}function eS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(36,a|0,b|0,c|0)|0}function fS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(37,a|0,b|0,c|0)|0}function gS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(38,a|0,b|0,c|0)|0}function hS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(39,a|0,b|0,c|0)|0}function iS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(40,a|0,b|0,c|0)|0}function jS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(41,a|0,b|0,c|0)|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(42,a|0,b|0,c|0)|0}function lS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(43,a|0,b|0,c|0)|0}function mS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(44,a|0,b|0,c|0)|0}function nS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(45,a|0,b|0,c|0)|0}function oS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(46,a|0,b|0,c|0)|0}function pS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(47,a|0,b|0,c|0)|0}function qS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(48,a|0,b|0,c|0)|0}function rS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(49,a|0,b|0,c|0)|0}function sS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(50,a|0,b|0,c|0)|0}function tS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(51,a|0,b|0,c|0)|0}function uS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(52,a|0,b|0,c|0)|0}function vS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(53,a|0,b|0,c|0)|0}function wS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(54,a|0,b|0,c|0)|0}function xS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(55,a|0,b|0,c|0)|0}function yS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(56,a|0,b|0,c|0)|0}function zS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(57,a|0,b|0,c|0)|0}function AS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(58,a|0,b|0,c|0)|0}function BS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(59,a|0,b|0,c|0)|0}function CS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(60,a|0,b|0,c|0)|0}function DS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(61,a|0,b|0,c|0)|0}function ES(a,b,c){a=a|0;b=b|0;c=c|0;return ea(62,a|0,b|0,c|0)|0}function FS(a,b,c){a=a|0;b=b|0;c=c|0;return ea(63,a|0,b|0,c|0)|0}function GS(a){a=a|0;return Pb[a&255]()|0}function HS(){return ga(0)|0}function IS(){return ga(1)|0}function JS(){return ga(2)|0}function KS(){return ga(3)|0}function LS(){return ga(4)|0}function MS(){return ga(5)|0}function NS(){return ga(6)|0}function OS(){return ga(7)|0}function PS(){return ga(8)|0}function QS(){return ga(9)|0}function RS(){return ga(10)|0}function SS(){return ga(11)|0}function TS(){return ga(12)|0}function US(){return ga(13)|0}function VS(){return ga(14)|0}function WS(){return ga(15)|0}function XS(){return ga(16)|0}function YS(){return ga(17)|0}function ZS(){return ga(18)|0}function _S(){return ga(19)|0}function $S(){return ga(20)|0}function aT(){return ga(21)|0}function bT(){return ga(22)|0}function cT(){return ga(23)|0}function dT(){return ga(24)|0}function eT(){return ga(25)|0}function fT(){return ga(26)|0}function gT(){return ga(27)|0}function hT(){return ga(28)|0}function iT(){return ga(29)|0}function jT(){return ga(30)|0}function kT(){return ga(31)|0}function lT(){return ga(32)|0}function mT(){return ga(33)|0}function nT(){return ga(34)|0}function oT(){return ga(35)|0}function pT(){return ga(36)|0}function qT(){return ga(37)|0}function rT(){return ga(38)|0}function sT(){return ga(39)|0}function tT(){return ga(40)|0}function uT(){return ga(41)|0}function vT(){return ga(42)|0}function wT(){return ga(43)|0}function xT(){return ga(44)|0}function yT(){return ga(45)|0}function zT(){return ga(46)|0}function AT(){return ga(47)|0}function BT(){return ga(48)|0}function CT(){return ga(49)|0}function DT(){return ga(50)|0}function ET(){return ga(51)|0}function FT(){return ga(52)|0}function GT(){return ga(53)|0}function HT(){return ga(54)|0}function IT(){return ga(55)|0}function JT(){return ga(56)|0}function KT(){return ga(57)|0}function LT(){return ga(58)|0}function MT(){return ga(59)|0}function NT(){return ga(60)|0}function OT(){return ga(61)|0}function PT(){return ga(62)|0}function QT(){return ga(63)|0}function RT(a,b){a=a|0;b=b|0;Qb[a&255](b|0)}function ST(a){a=a|0;ia(0,a|0)}function TT(a){a=a|0;ia(1,a|0)}function UT(a){a=a|0;ia(2,a|0)}function VT(a){a=a|0;ia(3,a|0)}function WT(a){a=a|0;ia(4,a|0)}function XT(a){a=a|0;ia(5,a|0)}function YT(a){a=a|0;ia(6,a|0)}function ZT(a){a=a|0;ia(7,a|0)}function _T(a){a=a|0;ia(8,a|0)}function $T(a){a=a|0;ia(9,a|0)}function aU(a){a=a|0;ia(10,a|0)}function bU(a){a=a|0;ia(11,a|0)}function cU(a){a=a|0;ia(12,a|0)}function dU(a){a=a|0;ia(13,a|0)}function eU(a){a=a|0;ia(14,a|0)}function fU(a){a=a|0;ia(15,a|0)}function gU(a){a=a|0;ia(16,a|0)}function hU(a){a=a|0;ia(17,a|0)}function iU(a){a=a|0;ia(18,a|0)}function jU(a){a=a|0;ia(19,a|0)}function kU(a){a=a|0;ia(20,a|0)}function lU(a){a=a|0;ia(21,a|0)}function mU(a){a=a|0;ia(22,a|0)}function nU(a){a=a|0;ia(23,a|0)}function oU(a){a=a|0;ia(24,a|0)}function pU(a){a=a|0;ia(25,a|0)}function qU(a){a=a|0;ia(26,a|0)}function rU(a){a=a|0;ia(27,a|0)}function sU(a){a=a|0;ia(28,a|0)}function tU(a){a=a|0;ia(29,a|0)}function uU(a){a=a|0;ia(30,a|0)}function vU(a){a=a|0;ia(31,a|0)}function wU(a){a=a|0;ia(32,a|0)}function xU(a){a=a|0;ia(33,a|0)}function yU(a){a=a|0;ia(34,a|0)}function zU(a){a=a|0;ia(35,a|0)}function AU(a){a=a|0;ia(36,a|0)}function BU(a){a=a|0;ia(37,a|0)}function CU(a){a=a|0;ia(38,a|0)}function DU(a){a=a|0;ia(39,a|0)}function EU(a){a=a|0;ia(40,a|0)}function FU(a){a=a|0;ia(41,a|0)}function GU(a){a=a|0;ia(42,a|0)}function HU(a){a=a|0;ia(43,a|0)}function IU(a){a=a|0;ia(44,a|0)}function JU(a){a=a|0;ia(45,a|0)}function KU(a){a=a|0;ia(46,a|0)}function LU(a){a=a|0;ia(47,a|0)}function MU(a){a=a|0;ia(48,a|0)}function NU(a){a=a|0;ia(49,a|0)}function OU(a){a=a|0;ia(50,a|0)}function PU(a){a=a|0;ia(51,a|0)}function QU(a){a=a|0;ia(52,a|0)}function RU(a){a=a|0;ia(53,a|0)}function SU(a){a=a|0;ia(54,a|0)}function TU(a){a=a|0;ia(55,a|0)}function UU(a){a=a|0;ia(56,a|0)}function VU(a){a=a|0;ia(57,a|0)}function WU(a){a=a|0;ia(58,a|0)}function XU(a){a=a|0;ia(59,a|0)}function YU(a){a=a|0;ia(60,a|0)}function ZU(a){a=a|0;ia(61,a|0)}function _U(a){a=a|0;ia(62,a|0)}function $U(a){a=a|0;ia(63,a|0)}function aV(a,b,c){a=a|0;b=b|0;c=c|0;Rb[a&255](b|0,c|0)}function bV(a,b){a=a|0;b=b|0;ka(0,a|0,b|0)}function cV(a,b){a=a|0;b=b|0;ka(1,a|0,b|0)}function dV(a,b){a=a|0;b=b|0;ka(2,a|0,b|0)}function eV(a,b){a=a|0;b=b|0;ka(3,a|0,b|0)}function fV(a,b){a=a|0;b=b|0;ka(4,a|0,b|0)}function gV(a,b){a=a|0;b=b|0;ka(5,a|0,b|0)}function hV(a,b){a=a|0;b=b|0;ka(6,a|0,b|0)}function iV(a,b){a=a|0;b=b|0;ka(7,a|0,b|0)}function jV(a,b){a=a|0;b=b|0;ka(8,a|0,b|0)}function kV(a,b){a=a|0;b=b|0;ka(9,a|0,b|0)}function lV(a,b){a=a|0;b=b|0;ka(10,a|0,b|0)}function mV(a,b){a=a|0;b=b|0;ka(11,a|0,b|0)}function nV(a,b){a=a|0;b=b|0;ka(12,a|0,b|0)}function oV(a,b){a=a|0;b=b|0;ka(13,a|0,b|0)}function pV(a,b){a=a|0;b=b|0;ka(14,a|0,b|0)}function qV(a,b){a=a|0;b=b|0;ka(15,a|0,b|0)}function rV(a,b){a=a|0;b=b|0;ka(16,a|0,b|0)}function sV(a,b){a=a|0;b=b|0;ka(17,a|0,b|0)}function tV(a,b){a=a|0;b=b|0;ka(18,a|0,b|0)}function uV(a,b){a=a|0;b=b|0;ka(19,a|0,b|0)}function vV(a,b){a=a|0;b=b|0;ka(20,a|0,b|0)}function wV(a,b){a=a|0;b=b|0;ka(21,a|0,b|0)}function xV(a,b){a=a|0;b=b|0;ka(22,a|0,b|0)}function yV(a,b){a=a|0;b=b|0;ka(23,a|0,b|0)}function zV(a,b){a=a|0;b=b|0;ka(24,a|0,b|0)}function AV(a,b){a=a|0;b=b|0;ka(25,a|0,b|0)}function BV(a,b){a=a|0;b=b|0;ka(26,a|0,b|0)}function CV(a,b){a=a|0;b=b|0;ka(27,a|0,b|0)}function DV(a,b){a=a|0;b=b|0;ka(28,a|0,b|0)}function EV(a,b){a=a|0;b=b|0;ka(29,a|0,b|0)}function FV(a,b){a=a|0;b=b|0;ka(30,a|0,b|0)}function GV(a,b){a=a|0;b=b|0;ka(31,a|0,b|0)}function HV(a,b){a=a|0;b=b|0;ka(32,a|0,b|0)}function IV(a,b){a=a|0;b=b|0;ka(33,a|0,b|0)}function JV(a,b){a=a|0;b=b|0;ka(34,a|0,b|0)}function KV(a,b){a=a|0;b=b|0;ka(35,a|0,b|0)}function LV(a,b){a=a|0;b=b|0;ka(36,a|0,b|0)}function MV(a,b){a=a|0;b=b|0;ka(37,a|0,b|0)}function NV(a,b){a=a|0;b=b|0;ka(38,a|0,b|0)}function OV(a,b){a=a|0;b=b|0;ka(39,a|0,b|0)}function PV(a,b){a=a|0;b=b|0;ka(40,a|0,b|0)}function QV(a,b){a=a|0;b=b|0;ka(41,a|0,b|0)}function RV(a,b){a=a|0;b=b|0;ka(42,a|0,b|0)}function SV(a,b){a=a|0;b=b|0;ka(43,a|0,b|0)}function TV(a,b){a=a|0;b=b|0;ka(44,a|0,b|0)}function UV(a,b){a=a|0;b=b|0;ka(45,a|0,b|0)}function VV(a,b){a=a|0;b=b|0;ka(46,a|0,b|0)}function WV(a,b){a=a|0;b=b|0;ka(47,a|0,b|0)}function XV(a,b){a=a|0;b=b|0;ka(48,a|0,b|0)}function YV(a,b){a=a|0;b=b|0;ka(49,a|0,b|0)}function ZV(a,b){a=a|0;b=b|0;ka(50,a|0,b|0)}function _V(a,b){a=a|0;b=b|0;ka(51,a|0,b|0)}function $V(a,b){a=a|0;b=b|0;ka(52,a|0,b|0)}function aW(a,b){a=a|0;b=b|0;ka(53,a|0,b|0)}function bW(a,b){a=a|0;b=b|0;ka(54,a|0,b|0)}function cW(a,b){a=a|0;b=b|0;ka(55,a|0,b|0)}function dW(a,b){a=a|0;b=b|0;ka(56,a|0,b|0)}function eW(a,b){a=a|0;b=b|0;ka(57,a|0,b|0)}function fW(a,b){a=a|0;b=b|0;ka(58,a|0,b|0)}function gW(a,b){a=a|0;b=b|0;ka(59,a|0,b|0)}function hW(a,b){a=a|0;b=b|0;ka(60,a|0,b|0)}function iW(a,b){a=a|0;b=b|0;ka(61,a|0,b|0)}function jW(a,b){a=a|0;b=b|0;ka(62,a|0,b|0)}function kW(a,b){a=a|0;b=b|0;ka(63,a|0,b|0)}function lW(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 Sb[a&255](b|0,c|0,d|0,e|0,f|0,g|0)|0}function mW(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 ma(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function nW(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 ma(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function oW(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 ma(2,a|0,b|0,c|0,d|0,e|0,f|0)|0}function pW(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 ma(3,a|0,b|0,c|0,d|0,e|0,f|0)|0}function qW(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 ma(4,a|0,b|0,c|0,d|0,e|0,f|0)|0}function rW(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 ma(5,a|0,b|0,c|0,d|0,e|0,f|0)|0}function sW(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 ma(6,a|0,b|0,c|0,d|0,e|0,f|0)|0}function tW(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 ma(7,a|0,b|0,c|0,d|0,e|0,f|0)|0}function uW(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 ma(8,a|0,b|0,c|0,d|0,e|0,f|0)|0}function vW(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 ma(9,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wW(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 ma(10,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xW(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 ma(11,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yW(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 ma(12,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zW(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 ma(13,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AW(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 ma(14,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BW(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 ma(15,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CW(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 ma(16,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DW(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 ma(17,a|0,b|0,c|0,d|0,e|0,f|0)|0}function EW(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 ma(18,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FW(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 ma(19,a|0,b|0,c|0,d|0,e|0,f|0)|0}function GW(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 ma(20,a|0,b|0,c|0,d|0,e|0,f|0)|0}function HW(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 ma(21,a|0,b|0,c|0,d|0,e|0,f|0)|0}function IW(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 ma(22,a|0,b|0,c|0,d|0,e|0,f|0)|0}function JW(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 ma(23,a|0,b|0,c|0,d|0,e|0,f|0)|0}function KW(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 ma(24,a|0,b|0,c|0,d|0,e|0,f|0)|0}function LW(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 ma(25,a|0,b|0,c|0,d|0,e|0,f|0)|0}function MW(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 ma(26,a|0,b|0,c|0,d|0,e|0,f|0)|0}function NW(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 ma(27,a|0,b|0,c|0,d|0,e|0,f|0)|0}function OW(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 ma(28,a|0,b|0,c|0,d|0,e|0,f|0)|0}function PW(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 ma(29,a|0,b|0,c|0,d|0,e|0,f|0)|0}function QW(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 ma(30,a|0,b|0,c|0,d|0,e|0,f|0)|0}function RW(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 ma(31,a|0,b|0,c|0,d|0,e|0,f|0)|0}function SW(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 ma(32,a|0,b|0,c|0,d|0,e|0,f|0)|0}function TW(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 ma(33,a|0,b|0,c|0,d|0,e|0,f|0)|0}function UW(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 ma(34,a|0,b|0,c|0,d|0,e|0,f|0)|0}function VW(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 ma(35,a|0,b|0,c|0,d|0,e|0,f|0)|0}function WW(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 ma(36,a|0,b|0,c|0,d|0,e|0,f|0)|0}function XW(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 ma(37,a|0,b|0,c|0,d|0,e|0,f|0)|0}function YW(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 ma(38,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ZW(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 ma(39,a|0,b|0,c|0,d|0,e|0,f|0)|0}function _W(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 ma(40,a|0,b|0,c|0,d|0,e|0,f|0)|0}function $W(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 ma(41,a|0,b|0,c|0,d|0,e|0,f|0)|0}function aX(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 ma(42,a|0,b|0,c|0,d|0,e|0,f|0)|0}function bX(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 ma(43,a|0,b|0,c|0,d|0,e|0,f|0)|0}function cX(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 ma(44,a|0,b|0,c|0,d|0,e|0,f|0)|0}function dX(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 ma(45,a|0,b|0,c|0,d|0,e|0,f|0)|0}function eX(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 ma(46,a|0,b|0,c|0,d|0,e|0,f|0)|0}function fX(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 ma(47,a|0,b|0,c|0,d|0,e|0,f|0)|0}function gX(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 ma(48,a|0,b|0,c|0,d|0,e|0,f|0)|0}function hX(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 ma(49,a|0,b|0,c|0,d|0,e|0,f|0)|0}function iX(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 ma(50,a|0,b|0,c|0,d|0,e|0,f|0)|0}function jX(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 ma(51,a|0,b|0,c|0,d|0,e|0,f|0)|0}function kX(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 ma(52,a|0,b|0,c|0,d|0,e|0,f|0)|0}function lX(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 ma(53,a|0,b|0,c|0,d|0,e|0,f|0)|0}function mX(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 ma(54,a|0,b|0,c|0,d|0,e|0,f|0)|0}function nX(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 ma(55,a|0,b|0,c|0,d|0,e|0,f|0)|0}function oX(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 ma(56,a|0,b|0,c|0,d|0,e|0,f|0)|0}function pX(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 ma(57,a|0,b|0,c|0,d|0,e|0,f|0)|0}function qX(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 ma(58,a|0,b|0,c|0,d|0,e|0,f|0)|0}function rX(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 ma(59,a|0,b|0,c|0,d|0,e|0,f|0)|0}function sX(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 ma(60,a|0,b|0,c|0,d|0,e|0,f|0)|0}function tX(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 ma(61,a|0,b|0,c|0,d|0,e|0,f|0)|0}function uX(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 ma(62,a|0,b|0,c|0,d|0,e|0,f|0)|0}function vX(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 ma(63,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wX(a,b){a=a|0;b=b|0;return Tb[a&255](b|0)|0}function xX(a){a=a|0;return oa(0,a|0)|0}function yX(a){a=a|0;return oa(1,a|0)|0}function zX(a){a=a|0;return oa(2,a|0)|0}function AX(a){a=a|0;return oa(3,a|0)|0}function BX(a){a=a|0;return oa(4,a|0)|0}function CX(a){a=a|0;return oa(5,a|0)|0}function DX(a){a=a|0;return oa(6,a|0)|0}function EX(a){a=a|0;return oa(7,a|0)|0}function FX(a){a=a|0;return oa(8,a|0)|0}function GX(a){a=a|0;return oa(9,a|0)|0}function HX(a){a=a|0;return oa(10,a|0)|0}function IX(a){a=a|0;return oa(11,a|0)|0}function JX(a){a=a|0;return oa(12,a|0)|0}function KX(a){a=a|0;return oa(13,a|0)|0}function LX(a){a=a|0;return oa(14,a|0)|0}function MX(a){a=a|0;return oa(15,a|0)|0}function NX(a){a=a|0;return oa(16,a|0)|0}function OX(a){a=a|0;return oa(17,a|0)|0}function PX(a){a=a|0;return oa(18,a|0)|0}function QX(a){a=a|0;return oa(19,a|0)|0}function RX(a){a=a|0;return oa(20,a|0)|0}function SX(a){a=a|0;return oa(21,a|0)|0}function TX(a){a=a|0;return oa(22,a|0)|0}function UX(a){a=a|0;return oa(23,a|0)|0}function VX(a){a=a|0;return oa(24,a|0)|0}function WX(a){a=a|0;return oa(25,a|0)|0}function XX(a){a=a|0;return oa(26,a|0)|0}function YX(a){a=a|0;return oa(27,a|0)|0}function ZX(a){a=a|0;return oa(28,a|0)|0}function _X(a){a=a|0;return oa(29,a|0)|0}function $X(a){a=a|0;return oa(30,a|0)|0}function aY(a){a=a|0;return oa(31,a|0)|0}function bY(a){a=a|0;return oa(32,a|0)|0}function cY(a){a=a|0;return oa(33,a|0)|0}function dY(a){a=a|0;return oa(34,a|0)|0}function eY(a){a=a|0;return oa(35,a|0)|0}function fY(a){a=a|0;return oa(36,a|0)|0}function gY(a){a=a|0;return oa(37,a|0)|0}function hY(a){a=a|0;return oa(38,a|0)|0}function iY(a){a=a|0;return oa(39,a|0)|0}function jY(a){a=a|0;return oa(40,a|0)|0}function kY(a){a=a|0;return oa(41,a|0)|0}function lY(a){a=a|0;return oa(42,a|0)|0}function mY(a){a=a|0;return oa(43,a|0)|0}function nY(a){a=a|0;return oa(44,a|0)|0}function oY(a){a=a|0;return oa(45,a|0)|0}function pY(a){a=a|0;return oa(46,a|0)|0}function qY(a){a=a|0;return oa(47,a|0)|0}function rY(a){a=a|0;return oa(48,a|0)|0}function sY(a){a=a|0;return oa(49,a|0)|0}function tY(a){a=a|0;return oa(50,a|0)|0}function uY(a){a=a|0;return oa(51,a|0)|0}function vY(a){a=a|0;return oa(52,a|0)|0}function wY(a){a=a|0;return oa(53,a|0)|0}function xY(a){a=a|0;return oa(54,a|0)|0}function yY(a){a=a|0;return oa(55,a|0)|0}function zY(a){a=a|0;return oa(56,a|0)|0}function AY(a){a=a|0;return oa(57,a|0)|0}function BY(a){a=a|0;return oa(58,a|0)|0}function CY(a){a=a|0;return oa(59,a|0)|0}function DY(a){a=a|0;return oa(60,a|0)|0}function EY(a){a=a|0;return oa(61,a|0)|0}function FY(a){a=a|0;return oa(62,a|0)|0}function GY(a){a=a|0;return oa(63,a|0)|0}function HY(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ub[a&255](b|0,c|0,d|0)}function IY(a,b,c){a=a|0;b=b|0;c=c|0;qa(0,a|0,b|0,c|0)}function JY(a,b,c){a=a|0;b=b|0;c=c|0;qa(1,a|0,b|0,c|0)}function KY(a,b,c){a=a|0;b=b|0;c=c|0;qa(2,a|0,b|0,c|0)}function LY(a,b,c){a=a|0;b=b|0;c=c|0;qa(3,a|0,b|0,c|0)}function MY(a,b,c){a=a|0;b=b|0;c=c|0;qa(4,a|0,b|0,c|0)}function NY(a,b,c){a=a|0;b=b|0;c=c|0;qa(5,a|0,b|0,c|0)}function OY(a,b,c){a=a|0;b=b|0;c=c|0;qa(6,a|0,b|0,c|0)}function PY(a,b,c){a=a|0;b=b|0;c=c|0;qa(7,a|0,b|0,c|0)}function QY(a,b,c){a=a|0;b=b|0;c=c|0;qa(8,a|0,b|0,c|0)}function RY(a,b,c){a=a|0;b=b|0;c=c|0;qa(9,a|0,b|0,c|0)}function SY(a,b,c){a=a|0;b=b|0;c=c|0;qa(10,a|0,b|0,c|0)}function TY(a,b,c){a=a|0;b=b|0;c=c|0;qa(11,a|0,b|0,c|0)}function UY(a,b,c){a=a|0;b=b|0;c=c|0;qa(12,a|0,b|0,c|0)}function VY(a,b,c){a=a|0;b=b|0;c=c|0;qa(13,a|0,b|0,c|0)}function WY(a,b,c){a=a|0;b=b|0;c=c|0;qa(14,a|0,b|0,c|0)}function XY(a,b,c){a=a|0;b=b|0;c=c|0;qa(15,a|0,b|0,c|0)}function YY(a,b,c){a=a|0;b=b|0;c=c|0;qa(16,a|0,b|0,c|0)}function ZY(a,b,c){a=a|0;b=b|0;c=c|0;qa(17,a|0,b|0,c|0)}function _Y(a,b,c){a=a|0;b=b|0;c=c|0;qa(18,a|0,b|0,c|0)}function $Y(a,b,c){a=a|0;b=b|0;c=c|0;qa(19,a|0,b|0,c|0)}function aZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(20,a|0,b|0,c|0)}function bZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(21,a|0,b|0,c|0)}function cZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(22,a|0,b|0,c|0)}function dZ(a,b,c){ +a=a|0;b=b|0;c=c|0;qa(23,a|0,b|0,c|0)}function eZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(24,a|0,b|0,c|0)}function fZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(25,a|0,b|0,c|0)}function gZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(26,a|0,b|0,c|0)}function hZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(27,a|0,b|0,c|0)}function iZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(28,a|0,b|0,c|0)}function jZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(29,a|0,b|0,c|0)}function kZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(30,a|0,b|0,c|0)}function lZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(31,a|0,b|0,c|0)}function mZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(32,a|0,b|0,c|0)}function nZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(33,a|0,b|0,c|0)}function oZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(34,a|0,b|0,c|0)}function pZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(35,a|0,b|0,c|0)}function qZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(36,a|0,b|0,c|0)}function rZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(37,a|0,b|0,c|0)}function sZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(38,a|0,b|0,c|0)}function tZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(39,a|0,b|0,c|0)}function uZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(40,a|0,b|0,c|0)}function vZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(41,a|0,b|0,c|0)}function wZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(42,a|0,b|0,c|0)}function xZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(43,a|0,b|0,c|0)}function yZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(44,a|0,b|0,c|0)}function zZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(45,a|0,b|0,c|0)}function AZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(46,a|0,b|0,c|0)}function BZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(47,a|0,b|0,c|0)}function CZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(48,a|0,b|0,c|0)}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(49,a|0,b|0,c|0)}function EZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(50,a|0,b|0,c|0)}function FZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(51,a|0,b|0,c|0)}function GZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(52,a|0,b|0,c|0)}function HZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(53,a|0,b|0,c|0)}function IZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(54,a|0,b|0,c|0)}function JZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(55,a|0,b|0,c|0)}function KZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(56,a|0,b|0,c|0)}function LZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(57,a|0,b|0,c|0)}function MZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(58,a|0,b|0,c|0)}function NZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(59,a|0,b|0,c|0)}function OZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(60,a|0,b|0,c|0)}function PZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(61,a|0,b|0,c|0)}function QZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(62,a|0,b|0,c|0)}function RZ(a,b,c){a=a|0;b=b|0;c=c|0;qa(63,a|0,b|0,c|0)}function SZ(a){a=a|0;Vb[a&255]()}function TZ(){sa(0)}function UZ(){sa(1)}function VZ(){sa(2)}function WZ(){sa(3)}function XZ(){sa(4)}function YZ(){sa(5)}function ZZ(){sa(6)}function _Z(){sa(7)}function $Z(){sa(8)}function a_(){sa(9)}function b_(){sa(10)}function c_(){sa(11)}function d_(){sa(12)}function e_(){sa(13)}function f_(){sa(14)}function g_(){sa(15)}function h_(){sa(16)}function i_(){sa(17)}function j_(){sa(18)}function k_(){sa(19)}function l_(){sa(20)}function m_(){sa(21)}function n_(){sa(22)}function o_(){sa(23)}function p_(){sa(24)}function q_(){sa(25)}function r_(){sa(26)}function s_(){sa(27)}function t_(){sa(28)}function u_(){sa(29)}function v_(){sa(30)}function w_(){sa(31)}function x_(){sa(32)}function y_(){sa(33)}function z_(){sa(34)}function A_(){sa(35)}function B_(){sa(36)}function C_(){sa(37)}function D_(){sa(38)}function E_(){sa(39)}function F_(){sa(40)}function G_(){sa(41)}function H_(){sa(42)}function I_(){sa(43)}function J_(){sa(44)}function K_(){sa(45)}function L_(){sa(46)}function M_(){sa(47)}function N_(){sa(48)}function O_(){sa(49)}function P_(){sa(50)}function Q_(){sa(51)}function R_(){sa(52)}function S_(){sa(53)}function T_(){sa(54)}function U_(){sa(55)}function V_(){sa(56)}function W_(){sa(57)}function X_(){sa(58)}function Y_(){sa(59)}function Z_(){sa(60)}function __(){sa(61)}function $_(){sa(62)}function a$(){sa(63)}function b$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wb[a&255](b|0,c|0,d|0,e|0)|0}function c$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(0,a|0,b|0,c|0,d|0)|0}function d$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(1,a|0,b|0,c|0,d|0)|0}function e$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(2,a|0,b|0,c|0,d|0)|0}function f$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(3,a|0,b|0,c|0,d|0)|0}function g$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(4,a|0,b|0,c|0,d|0)|0}function h$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(5,a|0,b|0,c|0,d|0)|0}function i$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(6,a|0,b|0,c|0,d|0)|0}function j$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(7,a|0,b|0,c|0,d|0)|0}function k$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(8,a|0,b|0,c|0,d|0)|0}function l$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(9,a|0,b|0,c|0,d|0)|0}function m$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(10,a|0,b|0,c|0,d|0)|0}function n$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(11,a|0,b|0,c|0,d|0)|0}function o$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(12,a|0,b|0,c|0,d|0)|0}function p$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(13,a|0,b|0,c|0,d|0)|0}function q$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(14,a|0,b|0,c|0,d|0)|0}function r$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(15,a|0,b|0,c|0,d|0)|0}function s$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(16,a|0,b|0,c|0,d|0)|0}function t$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(17,a|0,b|0,c|0,d|0)|0}function u$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(18,a|0,b|0,c|0,d|0)|0}function v$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(19,a|0,b|0,c|0,d|0)|0}function w$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(20,a|0,b|0,c|0,d|0)|0}function x$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(21,a|0,b|0,c|0,d|0)|0}function y$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(22,a|0,b|0,c|0,d|0)|0}function z$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(23,a|0,b|0,c|0,d|0)|0}function A$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(24,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 ua(25,a|0,b|0,c|0,d|0)|0}function C$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(26,a|0,b|0,c|0,d|0)|0}function D$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(27,a|0,b|0,c|0,d|0)|0}function E$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(28,a|0,b|0,c|0,d|0)|0}function F$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(29,a|0,b|0,c|0,d|0)|0}function G$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(30,a|0,b|0,c|0,d|0)|0}function H$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(31,a|0,b|0,c|0,d|0)|0}function I$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(32,a|0,b|0,c|0,d|0)|0}function J$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(33,a|0,b|0,c|0,d|0)|0}function K$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(34,a|0,b|0,c|0,d|0)|0}function L$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(35,a|0,b|0,c|0,d|0)|0}function M$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(36,a|0,b|0,c|0,d|0)|0}function N$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(37,a|0,b|0,c|0,d|0)|0}function O$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(38,a|0,b|0,c|0,d|0)|0}function P$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(39,a|0,b|0,c|0,d|0)|0}function Q$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(40,a|0,b|0,c|0,d|0)|0}function R$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(41,a|0,b|0,c|0,d|0)|0}function S$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(42,a|0,b|0,c|0,d|0)|0}function T$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(43,a|0,b|0,c|0,d|0)|0}function U$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(44,a|0,b|0,c|0,d|0)|0}function V$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(45,a|0,b|0,c|0,d|0)|0}function W$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(46,a|0,b|0,c|0,d|0)|0}function X$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(47,a|0,b|0,c|0,d|0)|0}function Y$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(48,a|0,b|0,c|0,d|0)|0}function Z$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(49,a|0,b|0,c|0,d|0)|0}function _$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(50,a|0,b|0,c|0,d|0)|0}function $$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(51,a|0,b|0,c|0,d|0)|0}function a0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(52,a|0,b|0,c|0,d|0)|0}function b0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(53,a|0,b|0,c|0,d|0)|0}function c0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(54,a|0,b|0,c|0,d|0)|0}function d0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(55,a|0,b|0,c|0,d|0)|0}function e0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(56,a|0,b|0,c|0,d|0)|0}function f0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(57,a|0,b|0,c|0,d|0)|0}function g0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(58,a|0,b|0,c|0,d|0)|0}function h0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(59,a|0,b|0,c|0,d|0)|0}function i0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(60,a|0,b|0,c|0,d|0)|0}function j0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(61,a|0,b|0,c|0,d|0)|0}function k0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(62,a|0,b|0,c|0,d|0)|0}function l0(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ua(63,a|0,b|0,c|0,d|0)|0}function m0(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;Xb[a&255](b|0,c|0,d|0,e|0,f|0,g|0)}function n0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(0,a|0,b|0,c|0,d|0,e|0,f|0)}function o0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(1,a|0,b|0,c|0,d|0,e|0,f|0)}function p0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(2,a|0,b|0,c|0,d|0,e|0,f|0)}function q0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(3,a|0,b|0,c|0,d|0,e|0,f|0)}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(4,a|0,b|0,c|0,d|0,e|0,f|0)}function s0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(5,a|0,b|0,c|0,d|0,e|0,f|0)}function t0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(6,a|0,b|0,c|0,d|0,e|0,f|0)}function u0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(7,a|0,b|0,c|0,d|0,e|0,f|0)}function v0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(8,a|0,b|0,c|0,d|0,e|0,f|0)}function w0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(9,a|0,b|0,c|0,d|0,e|0,f|0)}function x0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(10,a|0,b|0,c|0,d|0,e|0,f|0)}function y0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(11,a|0,b|0,c|0,d|0,e|0,f|0)}function z0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(12,a|0,b|0,c|0,d|0,e|0,f|0)}function A0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(13,a|0,b|0,c|0,d|0,e|0,f|0)}function B0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(14,a|0,b|0,c|0,d|0,e|0,f|0)}function C0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(15,a|0,b|0,c|0,d|0,e|0,f|0)}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(16,a|0,b|0,c|0,d|0,e|0,f|0)}function E0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(17,a|0,b|0,c|0,d|0,e|0,f|0)}function F0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(18,a|0,b|0,c|0,d|0,e|0,f|0)}function G0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(19,a|0,b|0,c|0,d|0,e|0,f|0)}function H0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(20,a|0,b|0,c|0,d|0,e|0,f|0)}function I0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(21,a|0,b|0,c|0,d|0,e|0,f|0)}function J0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(22,a|0,b|0,c|0,d|0,e|0,f|0)}function K0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(23,a|0,b|0,c|0,d|0,e|0,f|0)}function L0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(24,a|0,b|0,c|0,d|0,e|0,f|0)}function M0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(25,a|0,b|0,c|0,d|0,e|0,f|0)}function N0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(26,a|0,b|0,c|0,d|0,e|0,f|0)}function O0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(27,a|0,b|0,c|0,d|0,e|0,f|0)}function P0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(28,a|0,b|0,c|0,d|0,e|0,f|0)}function Q0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(29,a|0,b|0,c|0,d|0,e|0,f|0)}function R0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(30,a|0,b|0,c|0,d|0,e|0,f|0)}function S0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(31,a|0,b|0,c|0,d|0,e|0,f|0)}function T0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(32,a|0,b|0,c|0,d|0,e|0,f|0)}function U0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(33,a|0,b|0,c|0,d|0,e|0,f|0)}function V0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(34,a|0,b|0,c|0,d|0,e|0,f|0)}function W0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(35,a|0,b|0,c|0,d|0,e|0,f|0)}function X0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(36,a|0,b|0,c|0,d|0,e|0,f|0)}function Y0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(37,a|0,b|0,c|0,d|0,e|0,f|0)}function Z0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(38,a|0,b|0,c|0,d|0,e|0,f|0)}function _0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(39,a|0,b|0,c|0,d|0,e|0,f|0)}function $0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(40,a|0,b|0,c|0,d|0,e|0,f|0)}function a1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(41,a|0,b|0,c|0,d|0,e|0,f|0)}function b1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(42,a|0,b|0,c|0,d|0,e|0,f|0)}function c1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(43,a|0,b|0,c|0,d|0,e|0,f|0)}function d1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(44,a|0,b|0,c|0,d|0,e|0,f|0)}function e1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(45,a|0,b|0,c|0,d|0,e|0,f|0)}function f1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(46,a|0,b|0,c|0,d|0,e|0,f|0)}function g1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(47,a|0,b|0,c|0,d|0,e|0,f|0)}function h1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(48,a|0,b|0,c|0,d|0,e|0,f|0)}function i1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(49,a|0,b|0,c|0,d|0,e|0,f|0)}function j1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(50,a|0,b|0,c|0,d|0,e|0,f|0)}function k1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(51,a|0,b|0,c|0,d|0,e|0,f|0)}function l1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(52,a|0,b|0,c|0,d|0,e|0,f|0)}function m1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(53,a|0,b|0,c|0,d|0,e|0,f|0)}function n1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(54,a|0,b|0,c|0,d|0,e|0,f|0)}function o1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(55,a|0,b|0,c|0,d|0,e|0,f|0)}function p1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(56,a|0,b|0,c|0,d|0,e|0,f|0)}function q1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(57,a|0,b|0,c|0,d|0,e|0,f|0)}function r1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(58,a|0,b|0,c|0,d|0,e|0,f|0)}function s1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(59,a|0,b|0,c|0,d|0,e|0,f|0)}function t1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(60,a|0,b|0,c|0,d|0,e|0,f|0)}function u1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(61,a|0,b|0,c|0,d|0,e|0,f|0)}function v1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(62,a|0,b|0,c|0,d|0,e|0,f|0)}function w1(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;wa(63,a|0,b|0,c|0,d|0,e|0,f|0)}function x1(a,b,c){a=a|0;b=b|0;c=c|0;return Yb[a&255](b|0,c|0)|0}function y1(a,b){a=a|0;b=b|0;return ya(0,a|0,b|0)|0}function z1(a,b){a=a|0;b=b|0;return ya(1,a|0,b|0)|0}function A1(a,b){a=a|0;b=b|0;return ya(2,a|0,b|0)|0}function B1(a,b){a=a|0;b=b|0;return ya(3,a|0,b|0)|0}function C1(a,b){a=a|0;b=b|0;return ya(4,a|0,b|0)|0}function D1(a,b){a=a|0;b=b|0;return ya(5,a|0,b|0)|0}function E1(a,b){a=a|0;b=b|0;return ya(6,a|0,b|0)|0}function F1(a,b){a=a|0;b=b|0;return ya(7,a|0,b|0)|0}function G1(a,b){a=a|0;b=b|0;return ya(8,a|0,b|0)|0}function H1(a,b){a=a|0;b=b|0;return ya(9,a|0,b|0)|0}function I1(a,b){a=a|0;b=b|0;return ya(10,a|0,b|0)|0}function J1(a,b){a=a|0;b=b|0;return ya(11,a|0,b|0)|0}function K1(a,b){a=a|0;b=b|0;return ya(12,a|0,b|0)|0}function L1(a,b){a=a|0;b=b|0;return ya(13,a|0,b|0)|0}function M1(a,b){a=a|0;b=b|0;return ya(14,a|0,b|0)|0}function N1(a,b){a=a|0;b=b|0;return ya(15,a|0,b|0)|0}function O1(a,b){a=a|0;b=b|0;return ya(16,a|0,b|0)|0}function P1(a,b){a=a|0;b=b|0;return ya(17,a|0,b|0)|0}function Q1(a,b){a=a|0;b=b|0;return ya(18,a|0,b|0)|0}function R1(a,b){a=a|0;b=b|0;return ya(19,a|0,b|0)|0}function S1(a,b){a=a|0;b=b|0;return ya(20,a|0,b|0)|0}function T1(a,b){a=a|0;b=b|0;return ya(21,a|0,b|0)|0}function U1(a,b){a=a|0;b=b|0;return ya(22,a|0,b|0)|0}function V1(a,b){a=a|0;b=b|0;return ya(23,a|0,b|0)|0}function W1(a,b){a=a|0;b=b|0;return ya(24,a|0,b|0)|0}function X1(a,b){a=a|0;b=b|0;return ya(25,a|0,b|0)|0}function Y1(a,b){a=a|0;b=b|0;return ya(26,a|0,b|0)|0}function Z1(a,b){a=a|0;b=b|0;return ya(27,a|0,b|0)|0}function _1(a,b){a=a|0;b=b|0;return ya(28,a|0,b|0)|0}function $1(a,b){a=a|0;b=b|0;return ya(29,a|0,b|0)|0}function a2(a,b){a=a|0;b=b|0;return ya(30,a|0,b|0)|0}function b2(a,b){a=a|0;b=b|0;return ya(31,a|0,b|0)|0}function c2(a,b){a=a|0;b=b|0;return ya(32,a|0,b|0)|0}function d2(a,b){a=a|0;b=b|0;return ya(33,a|0,b|0)|0}function e2(a,b){a=a|0;b=b|0;return ya(34,a|0,b|0)|0}function f2(a,b){a=a|0;b=b|0;return ya(35,a|0,b|0)|0}function g2(a,b){a=a|0;b=b|0;return ya(36,a|0,b|0)|0}function h2(a,b){a=a|0;b=b|0;return ya(37,a|0,b|0)|0}function i2(a,b){a=a|0;b=b|0;return ya(38,a|0,b|0)|0}function j2(a,b){a=a|0;b=b|0;return ya(39,a|0,b|0)|0}function k2(a,b){a=a|0;b=b|0;return ya(40,a|0,b|0)|0}function l2(a,b){a=a|0;b=b|0;return ya(41,a|0,b|0)|0}function m2(a,b){a=a|0;b=b|0;return ya(42,a|0,b|0)|0}function n2(a,b){a=a|0;b=b|0;return ya(43,a|0,b|0)|0}function o2(a,b){a=a|0;b=b|0;return ya(44,a|0,b|0)|0}function p2(a,b){a=a|0;b=b|0;return ya(45,a|0,b|0)|0}function q2(a,b){a=a|0;b=b|0;return ya(46,a|0,b|0)|0}function r2(a,b){a=a|0;b=b|0;return ya(47,a|0,b|0)|0}function s2(a,b){a=a|0;b=b|0;return ya(48,a|0,b|0)|0}function t2(a,b){a=a|0;b=b|0;return ya(49,a|0,b|0)|0}function u2(a,b){a=a|0;b=b|0;return ya(50,a|0,b|0)|0}function v2(a,b){a=a|0;b=b|0;return ya(51,a|0,b|0)|0}function w2(a,b){a=a|0;b=b|0;return ya(52,a|0,b|0)|0}function x2(a,b){a=a|0;b=b|0;return ya(53,a|0,b|0)|0}function y2(a,b){a=a|0;b=b|0;return ya(54,a|0,b|0)|0}function z2(a,b){a=a|0;b=b|0;return ya(55,a|0,b|0)|0}function A2(a,b){a=a|0;b=b|0;return ya(56,a|0,b|0)|0}function B2(a,b){a=a|0;b=b|0;return ya(57,a|0,b|0)|0}function C2(a,b){a=a|0;b=b|0;return ya(58,a|0,b|0)|0}function D2(a,b){a=a|0;b=b|0;return ya(59,a|0,b|0)|0}function E2(a,b){a=a|0;b=b|0;return ya(60,a|0,b|0)|0}function F2(a,b){a=a|0;b=b|0;return ya(61,a|0,b|0)|0}function G2(a,b){a=a|0;b=b|0;return ya(62,a|0,b|0)|0}function H2(a,b){a=a|0;b=b|0;return ya(63,a|0,b|0)|0}function I2(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 Zb[a&255](b|0,c|0,d|0,e|0,f|0)|0}function J2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(0,a|0,b|0,c|0,d|0,e|0)|0}function K2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(1,a|0,b|0,c|0,d|0,e|0)|0}function L2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(2,a|0,b|0,c|0,d|0,e|0)|0}function M2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(3,a|0,b|0,c|0,d|0,e|0)|0}function N2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(4,a|0,b|0,c|0,d|0,e|0)|0}function O2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(5,a|0,b|0,c|0,d|0,e|0)|0}function P2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(6,a|0,b|0,c|0,d|0,e|0)|0}function Q2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(7,a|0,b|0,c|0,d|0,e|0)|0}function R2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(8,a|0,b|0,c|0,d|0,e|0)|0}function S2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(9,a|0,b|0,c|0,d|0,e|0)|0}function T2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(10,a|0,b|0,c|0,d|0,e|0)|0}function U2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(11,a|0,b|0,c|0,d|0,e|0)|0}function V2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(12,a|0,b|0,c|0,d|0,e|0)|0}function W2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(13,a|0,b|0,c|0,d|0,e|0)|0}function X2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(14,a|0,b|0,c|0,d|0,e|0)|0}function Y2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(15,a|0,b|0,c|0,d|0,e|0)|0}function Z2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(16,a|0,b|0,c|0,d|0,e|0)|0}function _2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(17,a|0,b|0,c|0,d|0,e|0)|0}function $2(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(18,a|0,b|0,c|0,d|0,e|0)|0}function a3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(19,a|0,b|0,c|0,d|0,e|0)|0}function b3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(20,a|0,b|0,c|0,d|0,e|0)|0}function c3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(21,a|0,b|0,c|0,d|0,e|0)|0}function d3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(22,a|0,b|0,c|0,d|0,e|0)|0}function e3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(23,a|0,b|0,c|0,d|0,e|0)|0}function f3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(24,a|0,b|0,c|0,d|0,e|0)|0}function g3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(25,a|0,b|0,c|0,d|0,e|0)|0}function h3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(26,a|0,b|0,c|0,d|0,e|0)|0}function i3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(27,a|0,b|0,c|0,d|0,e|0)|0}function j3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(28,a|0,b|0,c|0,d|0,e|0)|0}function k3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(29,a|0,b|0,c|0,d|0,e|0)|0}function l3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(30,a|0,b|0,c|0,d|0,e|0)|0}function m3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(31,a|0,b|0,c|0,d|0,e|0)|0}function n3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(32,a|0,b|0,c|0,d|0,e|0)|0}function o3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(33,a|0,b|0,c|0,d|0,e|0)|0}function p3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(34,a|0,b|0,c|0,d|0,e|0)|0}function q3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(35,a|0,b|0,c|0,d|0,e|0)|0}function r3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(36,a|0,b|0,c|0,d|0,e|0)|0}function s3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(37,a|0,b|0,c|0,d|0,e|0)|0}function t3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(38,a|0,b|0,c|0,d|0,e|0)|0}function u3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(39,a|0,b|0,c|0,d|0,e|0)|0}function v3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(40,a|0,b|0,c|0,d|0,e|0)|0}function w3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(41,a|0,b|0,c|0,d|0,e|0)|0}function x3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(42,a|0,b|0,c|0,d|0,e|0)|0}function y3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(43,a|0,b|0,c|0,d|0,e|0)|0}function z3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(44,a|0,b|0,c|0,d|0,e|0)|0}function A3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(45,a|0,b|0,c|0,d|0,e|0)|0}function B3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(46,a|0,b|0,c|0,d|0,e|0)|0}function C3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(47,a|0,b|0,c|0,d|0,e|0)|0}function D3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(48,a|0,b|0,c|0,d|0,e|0)|0}function E3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(49,a|0,b|0,c|0,d|0,e|0)|0}function F3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(50,a|0,b|0,c|0,d|0,e|0)|0}function G3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(51,a|0,b|0,c|0,d|0,e|0)|0}function H3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(52,a|0,b|0,c|0,d|0,e|0)|0}function I3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(53,a|0,b|0,c|0,d|0,e|0)|0}function J3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(54,a|0,b|0,c|0,d|0,e|0)|0}function K3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(55,a|0,b|0,c|0,d|0,e|0)|0}function L3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(56,a|0,b|0,c|0,d|0,e|0)|0}function M3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(57,a|0,b|0,c|0,d|0,e|0)|0}function N3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(58,a|0,b|0,c|0,d|0,e|0)|0}function O3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(59,a|0,b|0,c|0,d|0,e|0)|0}function P3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(60,a|0,b|0,c|0,d|0,e|0)|0}function Q3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(61,a|0,b|0,c|0,d|0,e|0)|0}function R3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(62,a|0,b|0,c|0,d|0,e|0)|0}function S3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Aa(63,a|0,b|0,c|0,d|0,e|0)|0}function T3(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;_b[a&255](b|0,c|0,d|0,e|0)}function U3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(0,a|0,b|0,c|0,d|0)}function V3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(1,a|0,b|0,c|0,d|0)}function W3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(2,a|0,b|0,c|0,d|0)}function X3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(3,a|0,b|0,c|0,d|0)}function Y3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(4,a|0,b|0,c|0,d|0)}function Z3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(5,a|0,b|0,c|0,d|0)}function _3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(6,a|0,b|0,c|0,d|0)}function $3(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(7,a|0,b|0,c|0,d|0)}function a4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(8,a|0,b|0,c|0,d|0)}function b4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(9,a|0,b|0,c|0,d|0)}function c4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(10,a|0,b|0,c|0,d|0)}function d4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(11,a|0,b|0,c|0,d|0)}function e4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(12,a|0,b|0,c|0,d|0)}function f4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(13,a|0,b|0,c|0,d|0)}function g4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(14,a|0,b|0,c|0,d|0)}function h4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(15,a|0,b|0,c|0,d|0)}function i4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(16,a|0,b|0,c|0,d|0)}function j4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(17,a|0,b|0,c|0,d|0)}function k4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(18,a|0,b|0,c|0,d|0)}function l4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(19,a|0,b|0,c|0,d|0)}function m4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(20,a|0,b|0,c|0,d|0)}function n4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(21,a|0,b|0,c|0,d|0)}function o4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(22,a|0,b|0,c|0,d|0)}function p4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(23,a|0,b|0,c|0,d|0)}function q4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(24,a|0,b|0,c|0,d|0)}function r4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(25,a|0,b|0,c|0,d|0)}function s4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(26,a|0,b|0,c|0,d|0)}function t4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(27,a|0,b|0,c|0,d|0)}function u4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(28,a|0,b|0,c|0,d|0)}function v4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(29,a|0,b|0,c|0,d|0)}function w4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(30,a|0,b|0,c|0,d|0)}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(31,a|0,b|0,c|0,d|0)}function y4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(32,a|0,b|0,c|0,d|0)}function z4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(33,a|0,b|0,c|0,d|0)}function A4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(34,a|0,b|0,c|0,d|0)}function B4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(35,a|0,b|0,c|0,d|0)}function C4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(36,a|0,b|0,c|0,d|0)}function D4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(37,a|0,b|0,c|0,d|0)}function E4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(38,a|0,b|0,c|0,d|0)}function F4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(39,a|0,b|0,c|0,d|0)}function G4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(40,a|0,b|0,c|0,d|0)}function H4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(41,a|0,b|0,c|0,d|0)}function I4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(42,a|0,b|0,c|0,d|0)}function J4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(43,a|0,b|0,c|0,d|0)}function K4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(44,a|0,b|0,c|0,d|0)}function L4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(45,a|0,b|0,c|0,d|0)}function M4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(46,a|0,b|0,c|0,d|0)}function N4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(47,a|0,b|0,c|0,d|0)}function O4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(48,a|0,b|0,c|0,d|0)}function P4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(49,a|0,b|0,c|0,d|0)}function Q4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(50,a|0,b|0,c|0,d|0)}function R4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(51,a|0,b|0,c|0,d|0)}function S4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(52,a|0,b|0,c|0,d|0)}function T4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(53,a|0,b|0,c|0,d|0)}function U4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(54,a|0,b|0,c|0,d|0)}function V4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(55,a|0,b|0,c|0,d|0)}function W4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(56,a|0,b|0,c|0,d|0)}function X4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(57,a|0,b|0,c|0,d|0)}function Y4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(58,a|0,b|0,c|0,d|0)}function Z4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(59,a|0,b|0,c|0,d|0)}function _4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(60,a|0,b|0,c|0,d|0)}function $4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(61,a|0,b|0,c|0,d|0)}function a5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(62,a|0,b|0,c|0,d|0)}function b5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ca(63,a|0,b|0,c|0,d|0)}function c5(a,b,c){a=a|0;b=b|0;c=c|0;ba(0);return 0}function d5(){ba(1);return 0}function e5(a){a=a|0;ba(2)}function f5(a,b){a=a|0;b=b|0;ba(3)}function g5(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ba(4);return 0}function h5(a){a=a|0;ba(5);return 0}function i5(a,b,c){a=a|0;b=b|0;c=c|0;ba(6)}function j5(){ba(7)}function k5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(8);return 0}function l5(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ba(9)}function m5(a,b){a=a|0;b=b|0;ba(10);return 0}function n5(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ba(11);return 0}function o5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(12)}var Ob=[c5,c5,wR,c5,xR,c5,yR,c5,zR,c5,AR,c5,BR,c5,CR,c5,DR,c5,ER,c5,FR,c5,GR,c5,HR,c5,IR,c5,JR,c5,KR,c5,LR,c5,MR,c5,NR,c5,OR,c5,PR,c5,QR,c5,RR,c5,SR,c5,TR,c5,UR,c5,VR,c5,WR,c5,XR,c5,YR,c5,ZR,c5,_R,c5,$R,c5,aS,c5,bS,c5,cS,c5,dS,c5,eS,c5,fS,c5,gS,c5,hS,c5,iS,c5,jS,c5,kS,c5,lS,c5,mS,c5,nS,c5,oS,c5,pS,c5,qS,c5,rS,c5,sS,c5,tS,c5,uS,c5,vS,c5,wS,c5,xS,c5,yS,c5,zS,c5,AS,c5,BS,c5,CS,c5,DS,c5,ES,c5,FS,c5,RM,UM,XM,ZM,Tk,tk,Zp,nq,Cq,Fq,Fr,nu,qu,eN,kN,yN,UP,NQ,SQ,GQ,OQ,sQ,qQ,Ln,Gm,Jm,Hn,Fn,Pn,Wn,pF,qF,rF,rQ,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5,c5];var Pb=[d5,d5,HS,d5,IS,d5,JS,d5,KS,d5,LS,d5,MS,d5,NS,d5,OS,d5,PS,d5,QS,d5,RS,d5,SS,d5,TS,d5,US,d5,VS,d5,WS,d5,XS,d5,YS,d5,ZS,d5,_S,d5,$S,d5,aT,d5,bT,d5,cT,d5,dT,d5,eT,d5,fT,d5,gT,d5,hT,d5,iT,d5,jT,d5,kT,d5,lT,d5,mT,d5,nT,d5,oT,d5,pT,d5,qT,d5,rT,d5,sT,d5,tT,d5,uT,d5,vT,d5,wT,d5,xT,d5,yT,d5,zT,d5,AT,d5,BT,d5,CT,d5,DT,d5,ET,d5,FT,d5,GT,d5,HT,d5,IT,d5,JT,d5,KT,d5,LT,d5,MT,d5,NT,d5,OT,d5,PT,d5,QT,d5,KQ,AN,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5,d5];var Qb=[e5,e5,ST,e5,TT,e5,UT,e5,VT,e5,WT,e5,XT,e5,YT,e5,ZT,e5,_T,e5,$T,e5,aU,e5,bU,e5,cU,e5,dU,e5,eU,e5,fU,e5,gU,e5,hU,e5,iU,e5,jU,e5,kU,e5,lU,e5,mU,e5,nU,e5,oU,e5,pU,e5,qU,e5,rU,e5,sU,e5,tU,e5,uU,e5,vU,e5,wU,e5,xU,e5,yU,e5,zU,e5,AU,e5,BU,e5,CU,e5,DU,e5,EU,e5,FU,e5,GU,e5,HU,e5,IU,e5,JU,e5,KU,e5,LU,e5,MU,e5,NU,e5,OU,e5,PU,e5,QU,e5,RU,e5,SU,e5,TU,e5,UU,e5,VU,e5,WU,e5,XU,e5,YU,e5,ZU,e5,_U,e5,$U,e5,Wc,Xc,Zc,_c,$c,ad,mu,uu,vu,Ju,Ou,oN,ZO,zP,AP,BP,DP,FP,Kd,Uq,tj,hk,Kn,Oz,TQ,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5,e5];var Rb=[f5,f5,bV,f5,cV,f5,dV,f5,eV,f5,fV,f5,gV,f5,hV,f5,iV,f5,jV,f5,kV,f5,lV,f5,mV,f5,nV,f5,oV,f5,pV,f5,qV,f5,rV,f5,sV,f5,tV,f5,uV,f5,vV,f5,wV,f5,xV,f5,yV,f5,zV,f5,AV,f5,BV,f5,CV,f5,DV,f5,EV,f5,FV,f5,GV,f5,HV,f5,IV,f5,JV,f5,KV,f5,LV,f5,MV,f5,NV,f5,OV,f5,PV,f5,QV,f5,RV,f5,SV,f5,TV,f5,UV,f5,VV,f5,WV,f5,XV,f5,YV,f5,ZV,f5,_V,f5,$V,f5,aW,f5,bW,f5,cW,f5,dW,f5,eW,f5,fW,f5,gW,f5,hW,f5,iW,f5,jW,f5,kW,f5,ou,tu,Ry,Xx,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5,f5]; +var Sb=[g5,g5,mW,g5,nW,g5,oW,g5,pW,g5,qW,g5,rW,g5,sW,g5,tW,g5,uW,g5,vW,g5,wW,g5,xW,g5,yW,g5,zW,g5,AW,g5,BW,g5,CW,g5,DW,g5,EW,g5,FW,g5,GW,g5,HW,g5,IW,g5,JW,g5,KW,g5,LW,g5,MW,g5,NW,g5,OW,g5,PW,g5,QW,g5,RW,g5,SW,g5,TW,g5,UW,g5,VW,g5,WW,g5,XW,g5,YW,g5,ZW,g5,_W,g5,$W,g5,aX,g5,bX,g5,cX,g5,dX,g5,eX,g5,fX,g5,gX,g5,hX,g5,iX,g5,jX,g5,kX,g5,lX,g5,mX,g5,nX,g5,oX,g5,pX,g5,qX,g5,rX,g5,sX,g5,tX,g5,uX,g5,vX,g5,Jk,Kk,lk,bq,rq,uq,Jq,gQ,PK,QK,RK,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5,g5];var Tb=[h5,h5,xX,h5,yX,h5,zX,h5,AX,h5,BX,h5,CX,h5,DX,h5,EX,h5,FX,h5,GX,h5,HX,h5,IX,h5,JX,h5,KX,h5,LX,h5,MX,h5,NX,h5,OX,h5,PX,h5,QX,h5,RX,h5,SX,h5,TX,h5,UX,h5,VX,h5,WX,h5,XX,h5,YX,h5,ZX,h5,_X,h5,$X,h5,aY,h5,bY,h5,cY,h5,dY,h5,eY,h5,fY,h5,gY,h5,hY,h5,iY,h5,jY,h5,kY,h5,lY,h5,mY,h5,nY,h5,oY,h5,pY,h5,qY,h5,rY,h5,sY,h5,tY,h5,uY,h5,vY,h5,wY,h5,xY,h5,yY,h5,zY,h5,AY,h5,BY,h5,CY,h5,DY,h5,EY,h5,FY,h5,GY,h5,Mk,Nk,Pk,Rk,Sk,Wk,Xk,Yk,Zk,nk,pk,rk,sk,_p,aq,oq,qq,wq,yq,Aq,Bq,Gq,Iq,Cr,lu,pu,Iu,Lu,Mu,Nu,bN,lN,mN,FQ,RQ,PQ,RN,aO,pQ,ae,$f,Yq,fq,gq,kq,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5,h5];var Ub=[i5,i5,IY,i5,JY,i5,KY,i5,LY,i5,MY,i5,NY,i5,OY,i5,PY,i5,QY,i5,RY,i5,SY,i5,TY,i5,UY,i5,VY,i5,WY,i5,XY,i5,YY,i5,ZY,i5,_Y,i5,$Y,i5,aZ,i5,bZ,i5,cZ,i5,dZ,i5,eZ,i5,fZ,i5,gZ,i5,hZ,i5,iZ,i5,jZ,i5,kZ,i5,lZ,i5,mZ,i5,nZ,i5,oZ,i5,pZ,i5,qZ,i5,rZ,i5,sZ,i5,tZ,i5,uZ,i5,vZ,i5,wZ,i5,xZ,i5,yZ,i5,zZ,i5,AZ,i5,BZ,i5,CZ,i5,DZ,i5,EZ,i5,FZ,i5,GZ,i5,HZ,i5,IZ,i5,JZ,i5,KZ,i5,LZ,i5,MZ,i5,NZ,i5,OZ,i5,PZ,i5,QZ,i5,RZ,i5,jc,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,Yc,lm,mm,nm,om,ru,Nz,Jz,Iz,kB,tB,WO,XO,YO,_O,$O,aP,bP,cP,dP,eP,fP,gP,hP,iP,jP,kP,lP,mP,nP,oP,pP,qP,rP,sP,tP,uP,vP,wP,xP,yP,CP,EP,hC,vO,wO,xO,yO,zO,AO,BO,CO,DO,EO,FO,hi,Up,Nt,Pt,Qt,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5,i5];var Vb=[j5,j5,TZ,j5,UZ,j5,VZ,j5,WZ,j5,XZ,j5,YZ,j5,ZZ,j5,_Z,j5,$Z,j5,a_,j5,b_,j5,c_,j5,d_,j5,e_,j5,f_,j5,g_,j5,h_,j5,i_,j5,j_,j5,k_,j5,l_,j5,m_,j5,n_,j5,o_,j5,p_,j5,q_,j5,r_,j5,s_,j5,t_,j5,u_,j5,v_,j5,w_,j5,x_,j5,y_,j5,z_,j5,A_,j5,B_,j5,C_,j5,D_,j5,E_,j5,F_,j5,G_,j5,H_,j5,I_,j5,J_,j5,K_,j5,L_,j5,M_,j5,N_,j5,O_,j5,P_,j5,Q_,j5,R_,j5,S_,j5,T_,j5,U_,j5,V_,j5,W_,j5,X_,j5,Y_,j5,Z_,j5,__,j5,$_,j5,a$,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5,j5];var Wb=[k5,k5,c$,k5,d$,k5,e$,k5,f$,k5,g$,k5,h$,k5,i$,k5,j$,k5,k$,k5,l$,k5,m$,k5,n$,k5,o$,k5,p$,k5,q$,k5,r$,k5,s$,k5,t$,k5,u$,k5,v$,k5,w$,k5,x$,k5,y$,k5,z$,k5,A$,k5,B$,k5,C$,k5,D$,k5,E$,k5,F$,k5,G$,k5,H$,k5,I$,k5,J$,k5,K$,k5,L$,k5,M$,k5,N$,k5,O$,k5,P$,k5,Q$,k5,R$,k5,S$,k5,T$,k5,U$,k5,V$,k5,W$,k5,X$,k5,Y$,k5,Z$,k5,_$,k5,$$,k5,a0,k5,b0,k5,c0,k5,d0,k5,e0,k5,f0,k5,g0,k5,h0,k5,i0,k5,j0,k5,k0,k5,l0,k5,SM,TM,Vk,$p,pq,Hq,nN,rN,Mh,ii,wj,Dj,Ek,Fk,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5,k5];var Xb=[l5,l5,n0,l5,o0,l5,p0,l5,q0,l5,r0,l5,s0,l5,t0,l5,u0,l5,v0,l5,w0,l5,x0,l5,y0,l5,z0,l5,A0,l5,B0,l5,C0,l5,D0,l5,E0,l5,F0,l5,G0,l5,H0,l5,I0,l5,J0,l5,K0,l5,L0,l5,M0,l5,N0,l5,O0,l5,P0,l5,Q0,l5,R0,l5,S0,l5,T0,l5,U0,l5,V0,l5,W0,l5,X0,l5,Y0,l5,Z0,l5,_0,l5,$0,l5,a1,l5,b1,l5,c1,l5,d1,l5,e1,l5,f1,l5,g1,l5,h1,l5,i1,l5,j1,l5,k1,l5,l1,l5,m1,l5,n1,l5,o1,l5,p1,l5,q1,l5,r1,l5,s1,l5,t1,l5,u1,l5,v1,l5,w1,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5,l5];var Yb=[m5,m5,y1,m5,z1,m5,A1,m5,B1,m5,C1,m5,D1,m5,E1,m5,F1,m5,G1,m5,H1,m5,I1,m5,J1,m5,K1,m5,L1,m5,M1,m5,N1,m5,O1,m5,P1,m5,Q1,m5,R1,m5,S1,m5,T1,m5,U1,m5,V1,m5,W1,m5,X1,m5,Y1,m5,Z1,m5,_1,m5,$1,m5,a2,m5,b2,m5,c2,m5,d2,m5,e2,m5,f2,m5,g2,m5,h2,m5,i2,m5,j2,m5,k2,m5,l2,m5,m2,m5,n2,m5,o2,m5,p2,m5,q2,m5,r2,m5,s2,m5,t2,m5,u2,m5,v2,m5,w2,m5,x2,m5,y2,m5,z2,m5,A2,m5,B2,m5,C2,m5,D2,m5,E2,m5,F2,m5,G2,m5,H2,m5,VM,WM,YM,_M,$M,Lk,Ok,Uk,$k,al,bl,cl,mk,ok,uk,vq,xq,Dq,Gr,Hr,Ku,lO,QN,aN,fN,gN,hN,iN,jN,pN,EQ,JQ,mQ,jQ,IQ,iQ,zN,lQ,hQ,kQ,SN,TN,UN,bO,cO,dO,kd,ld,ei,_f,Gk,Hk,Il,Jl,Ml,km,jt,os,Mt,Ot,Yx,Py,Qy,dy,ey,Dy,Jy,aB,bB,NF,TE,UE,yG,zG,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5,m5];var Zb=[n5,n5,J2,n5,K2,n5,L2,n5,M2,n5,N2,n5,O2,n5,P2,n5,Q2,n5,R2,n5,S2,n5,T2,n5,U2,n5,V2,n5,W2,n5,X2,n5,Y2,n5,Z2,n5,_2,n5,$2,n5,a3,n5,b3,n5,c3,n5,d3,n5,e3,n5,f3,n5,g3,n5,h3,n5,i3,n5,j3,n5,k3,n5,l3,n5,m3,n5,n3,n5,o3,n5,p3,n5,q3,n5,r3,n5,s3,n5,t3,n5,u3,n5,v3,n5,w3,n5,x3,n5,y3,n5,z3,n5,A3,n5,B3,n5,C3,n5,D3,n5,E3,n5,F3,n5,G3,n5,H3,n5,I3,n5,J3,n5,K3,n5,L3,n5,M3,n5,N3,n5,O3,n5,P3,n5,Q3,n5,R3,n5,S3,n5,QM,Qk,_k,qk,zq,Dr,Er,cN,dN,qN,eO,Uj,Vj,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5,n5];var _b=[o5,o5,U3,o5,V3,o5,W3,o5,X3,o5,Y3,o5,Z3,o5,_3,o5,$3,o5,a4,o5,b4,o5,c4,o5,d4,o5,e4,o5,f4,o5,g4,o5,h4,o5,i4,o5,j4,o5,k4,o5,l4,o5,m4,o5,n4,o5,o4,o5,p4,o5,q4,o5,r4,o5,s4,o5,t4,o5,u4,o5,v4,o5,w4,o5,x4,o5,y4,o5,z4,o5,A4,o5,B4,o5,C4,o5,D4,o5,E4,o5,F4,o5,G4,o5,H4,o5,I4,o5,J4,o5,K4,o5,L4,o5,M4,o5,N4,o5,O4,o5,P4,o5,Q4,o5,R4,o5,S4,o5,T4,o5,U4,o5,V4,o5,W4,o5,X4,o5,Y4,o5,Z4,o5,_4,o5,$4,o5,a5,o5,b5,o5,su,vd,xd,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5,o5];return{_sqlite3_value_blob:$d,_sqlite3_column_name:Ie,_sqlite3_reset:Zd,_sqlite3_column_type:He,_sqlite3_exec:$e,_sqlite3_result_null:me,_sqlite3_step:ue,_bitshift64Lshr:hR,_sqlite3_prepare_v2:af,_sqlite3_close_v2:sf,_sqlite3_open:Ef,_bitshift64Shl:lR,_sqlite3_result_text:ne,_fflush:tQ,_sqlite3_column_bytes:Be,_sqlite3_bind_int:Le,_sqlite3_bind_blob:Je,_memset:kR,_sqlite3_value_double:ce,_memcpy:iR,_sqlite3_result_double:ie,_sqlite3_value_text:ae,_sqlite3_changes:pf,_sqlite3_column_blob:Ae,_sqlite3_bind_parameter_index:Se,_sqlite3_value_type:fe,_i64Subtract:fR,_sqlite3_column_text:Fe,_i64Add:gR,_sqlite3_value_bytes:be,_sqlite3_finalize:Yd,_sqlite3_column_double:Ce,_sqlite3_create_function_v2:wf,_sqlite3_free:Kd,_sqlite3_value_int:de,_sqlite3_data_count:ze,_sqlite3_bind_text:Oe,_sqlite3_bind_double:Ke,___errno_location:SP,_RegisterExtensionFunctions:ic,_free:$Q,_memmove:jR,_sqlite3_errmsg:bf,_sqlite3_clear_bindings:_d,_malloc:_Q,runPostSets:eR,stackAlloc:$b,stackSave:ac,stackRestore:bc,establishStackSpace:cc,setThrew:dc,setTempRet0:gc,getTempRet0:hc,dynCall_iiii:vR,dynCall_i:GS,dynCall_vi:RT,dynCall_vii:aV,dynCall_iiiiiii:lW,dynCall_ii:wX,dynCall_viii:HY,dynCall_v:SZ,dynCall_iiiii:b$,dynCall_viiiiii:m0,dynCall_iii:x1,dynCall_iiiiii:I2,dynCall_viiii:T3}}(f.mb,f.nb,buffer);f._sqlite3_value_blob=W._sqlite3_value_blob;f._sqlite3_column_name=W._sqlite3_column_name;f._sqlite3_reset=W._sqlite3_reset;f._sqlite3_column_type=W._sqlite3_column_type;f._sqlite3_exec=W._sqlite3_exec;f._sqlite3_result_null=W._sqlite3_result_null;f._sqlite3_step=W._sqlite3_step;var Tc=f._bitshift64Lshr=W._bitshift64Lshr;f._sqlite3_prepare_v2=W._sqlite3_prepare_v2;f._sqlite3_close_v2=W._sqlite3_close_v2;f._sqlite3_open=W._sqlite3_open;var bd=f._bitshift64Shl=W._bitshift64Shl;f._sqlite3_result_text=W._sqlite3_result_text;f._fflush=W._fflush;f._sqlite3_column_bytes=W._sqlite3_column_bytes;f._sqlite3_bind_int=W._sqlite3_bind_int;f._sqlite3_bind_blob=W._sqlite3_bind_blob;var ad=f._memset=W._memset;f._sqlite3_value_double=W._sqlite3_value_double;var Yc=f._memcpy=W._memcpy;f._sqlite3_result_double=W._sqlite3_result_double;f._sqlite3_value_text=W._sqlite3_value_text;f._sqlite3_changes=W._sqlite3_changes;f._sqlite3_column_blob=W._sqlite3_column_blob;f._sqlite3_bind_parameter_index=W._sqlite3_bind_parameter_index;f._sqlite3_value_type=W._sqlite3_value_type;var zb=f._i64Subtract=W._i64Subtract;f._sqlite3_column_text=W._sqlite3_column_text;var Ab=f._i64Add=W._i64Add;f._sqlite3_value_bytes=W._sqlite3_value_bytes;f._sqlite3_finalize=W._sqlite3_finalize;f._sqlite3_column_double=W._sqlite3_column_double;f._sqlite3_create_function_v2=W._sqlite3_create_function_v2;f._sqlite3_free=W._sqlite3_free;f._sqlite3_value_int=W._sqlite3_value_int;f._sqlite3_data_count=W._sqlite3_data_count;f._sqlite3_bind_text=W._sqlite3_bind_text;f._sqlite3_bind_double=W._sqlite3_bind_double;f.___errno_location=W.___errno_location;f._RegisterExtensionFunctions=W._RegisterExtensionFunctions;var Pa=f._free=W._free;f.runPostSets=W.runPostSets;var Zc=f._memmove=W._memmove;f._sqlite3_errmsg=W._sqlite3_errmsg;f._sqlite3_clear_bindings=W._sqlite3_clear_bindings;var Ga=f._malloc=W._malloc;f.dynCall_iiii=W.dynCall_iiii;f.dynCall_i=W.dynCall_i;f.dynCall_vi=W.dynCall_vi;f.dynCall_vii=W.dynCall_vii;f.dynCall_iiiiiii=W.dynCall_iiiiiii;f.dynCall_ii=W.dynCall_ii;f.dynCall_viii=W.dynCall_viii;f.dynCall_v=W.dynCall_v;f.dynCall_iiiii=W.dynCall_iiiii;f.dynCall_viiiiii=W.dynCall_viiiiii;f.dynCall_iii=W.dynCall_iii;f.dynCall_iiiiii=W.dynCall_iiiiii;f.dynCall_viiii=W.dynCall_viiii;l.R=W.stackAlloc;l.qa=W.stackSave;l.ga=W.stackRestore;l.we=W.establishStackSpace;l.Qb=W.setTempRet0;l.Ab=W.getTempRet0;function ka(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}ka.prototype=Error();ka.prototype.constructor=ka;var Vd=null,vb=function Wd(){f.calledRun||Xd();f.calledRun||(vb=Wd)};f.callMain=f.te=function(a){function b(){for(var a=0;3>a;a++)d.push(0)}assert(0==tb,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(0==bb.length,"cannot call main when preRun functions remain to be called");a=a||[];Ja||(Ja=!0,ab(cb));var c=a.length+1,d=[z(B(f.thisProgram),"i8",0)];b();for(var e=0;eg;a=0<=g?++c:--c)e[a]=u[d+a];return e};a.prototype.get=function(a){var c,d,e;null!=a&&this.bind(a)&&this.step();e=[];a=c=0;for(d=te(this.u);0<=d?cd;a=0<=d?++c:--c)switch(re(this.u,a)){case X.gb:case X.FLOAT:e.push(this.yb(a));break;case X.ib:e.push(this.zb(a));break;case X.cb:e.push(this.getBlob(a));break;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,c,d,e;e=[];a=c=0;for(d=te(this.u);0<=d?cd;a=0<=d?++c:--c)e.push(pe(this.u,a));return e};a.prototype.getAsObject=function(a){var c,d,e,g,h,m;m=this.get(a);g=this.getColumnNames();h={};a=c=0;for(d=g.length;c>>0);null!=a&&Gc("/",this.filename,a,!0,!0);this.handleError(xe(this.filename,Z));this.db=y(Z,"i32");be(this.db);this.ra={}}a.prototype.run=function(a,c){var d;if(!this.db)throw"Database closed";c?(d=this.prepare(a,c),d.step(),d.free()):this.handleError(ve(this.db,a,0,0,Z));return this};a.prototype.exec=function(a){var c,d,e,g,h;if(!this.db)throw"Database closed";g=l.qa();d=l.R(a.length<<3);wa(a,d);a=l.R(4);for(e=[];y(d,"i8")!==ae;)if(ya(Z,0,"i32"),ya(a,0,"i32"),this.handleError(ze(this.db,d,-1,Z,a)),c=y(Z,"i32"),d=y(a,"i32"),c!==ae){h=new ce(c,this);for(c=null;h.step();)null===c&&(c={columns:h.getColumnNames(),values:[]},e.push(c)),c.values.push(h.get());h.free()}l.ga(g);return e};a.prototype.each=function(a,c,d,e){"function"===typeof c&&(e=d,d=c,c=void 0);for(a=this.prepare(a,c);a.step();)d(a.getAsObject());a.free();if("function"===typeof e)return e()};a.prototype.prepare=function(a,c){var d,e;ya(Z,0,"i32");this.handleError(ye(this.db,a,-1,Z,ae));d=y(Z,"i32");if(d===ae)throw"Nothing to prepare";e=new ce(d,this);null!=c&&e.bind(c);return this.ra[d]=e};a.prototype["export"]=function(){var a,c,d,e;d=this.ra;for(a in d)e=d[a],e.free();this.handleError(le(this.db));e=this.filename;a=a={encoding:"binary"};a.flags=a.flags||"r";a.encoding=a.encoding||"binary";if("utf8"!==a.encoding&&"binary"!==a.encoding)throw Error('Invalid encoding type "'+a.encoding+'"');d=wc(e,a.flags);e=rc(e).size;var g=new Uint8Array(e);Ac(d,g,0,e,0);"utf8"===a.encoding?c=La(g,0):"binary"===a.encoding&&(c=g);yc(d);this.handleError(xe(this.filename,Z));this.db=y(Z,"i32");return c};a.prototype.close=function(){var a,c,d;c=this.ra;for(a in c)d=c[a],d.free();this.handleError(le(this.db));qc("/"+this.filename);return this.db=null};a.prototype.handleError=function(a){if(a===X.ka)return null;a=ue(this.db);throw Error(a)};a.prototype.getRowsModified=function(){return je(this.db)};a.prototype.create_function=function(a,c){var d;d=l.La(function(a,b,d){var m,t,r,x,v;t=[];for(m=r=0;0<=b?r<=b:r>=b;m=0<=b?++r:--r)x=y(d+4*m,"i32"),v=Ke(x),m=function(){switch(!1){case 1!==v:return Ie;case 2!==v:return He;case 3!==v:return Je;case 4!==v:return function(a){var b,c,d,e;e=Ge(a);b=Fe(a);a=new Uint8Array(e);for(c=d=0;0<=e?de;c=0<=e?++d:--d)a[c]=u[b+c];return a};default:return function(){return null}}}(),m=m(x),t.push(m);if(b=c.apply(null,t))switch(typeof b){case"number":return Be(a,b);case"string":return De(a,b,-1,-1)}else return Ce(a)});this.handleError(se(this.db,a,c.length,X.jb,0,d,0,0,0));return this};return a}();xe=f.cwrap("sqlite3_open","number",["string","number"]);le=f.cwrap("sqlite3_close_v2","number",["number"]);ve=f.cwrap("sqlite3_exec","number",["number","string","number","number","number"]);f.cwrap("sqlite3_free","",["number"]);je=f.cwrap("sqlite3_changes","number",["number"]);ye=f.cwrap("sqlite3_prepare_v2","number",["number","string","number","number","number"]);ze=f.cwrap("sqlite3_prepare_v2","number",["number","number","number","number","number"]);ie=f.cwrap("sqlite3_bind_text","number",["number","number","number","number","number"]);ee=f.cwrap("sqlite3_bind_blob","number",["number","number","number","number","number"]);fe=f.cwrap("sqlite3_bind_double","number",["number","number","number"]);ge=f.cwrap("sqlite3_bind_int","number",["number","number","number"]);he=f.cwrap("sqlite3_bind_parameter_index","number",["number","string"]);Ee=f.cwrap("sqlite3_step","number",["number"]);ue=f.cwrap("sqlite3_errmsg","string",["number"]);te=f.cwrap("sqlite3_data_count","number",["number"]);oe=f.cwrap("sqlite3_column_double","number",["number","number"]);qe=f.cwrap("sqlite3_column_text","string",["number","number"]);me=f.cwrap("sqlite3_column_blob","number",["number","number"]);ne=f.cwrap("sqlite3_column_bytes","number",["number","number"]);re=f.cwrap("sqlite3_column_type","number",["number","number"]);pe=f.cwrap("sqlite3_column_name","string",["number","number"]);Ae=f.cwrap("sqlite3_reset","number",["number"]);ke=f.cwrap("sqlite3_clear_bindings","number",["number"]);we=f.cwrap("sqlite3_finalize","number",["number"]);se=f.cwrap("sqlite3_create_function_v2","number","number string number number number number number number number".split(" "));Ke=f.cwrap("sqlite3_value_type","number",["number"]);Ge=f.cwrap("sqlite3_value_bytes","number",["number"]);Je=f.cwrap("sqlite3_value_text","string",["number"]);Ie=f.cwrap("sqlite3_value_int","number",["number"]);Fe=f.cwrap("sqlite3_value_blob","number",["number"]);He=f.cwrap("sqlite3_value_double","number",["number"]);Be=f.cwrap("sqlite3_result_double","",["number","number"]);Ce=f.cwrap("sqlite3_result_null","",["number"]);De=f.cwrap("sqlite3_result_text","",["number","string","number","number"]);be=f.cwrap("RegisterExtensionFunctions","number",["number"]);this.SQL={Database:Database};for(de in this.SQL)f[de]=this.SQL[de];ae=0;X.ka=0;X.ERROR=1;X.$d=2;X.je=3;X.Ub=4;X.Wb=5;X.ce=6;X.NOMEM=7;X.me=8;X.ae=9;X.be=10;X.Zb=11;X.NOTFOUND=12;X.Yd=13;X.Xb=14;X.ke=15;X.EMPTY=16;X.ne=17;X.pe=18;X.Yb=19;X.de=20;X.ee=21;X.fe=22;X.Vb=23;X.Xd=24;X.le=25;X.ge=26;X.he=27;X.qe=28;X.hb=100;X.DONE=101;X.gb=1;X.FLOAT=2;X.ib=3;X.cb=4;X.ie=5;X.jb=1;return this["SQL"]}();if(typeof module!=="undefined")module.exports=SQL;if(typeof define==="function")define(SQL)}).call(this,require("_process"),require("buffer").Buffer,"/node_modules/sql.js/js")},{_process:"/data/github/geopackage-node/node_modules/browserify/node_modules/process/browser.js",buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js",crypto:"/data/github/geopackage-node/node_modules/browserify/node_modules/crypto-browserify/index.js",fs:"/data/github/geopackage-node/node_modules/browserify/lib/_empty.js",path:"/data/github/geopackage-node/node_modules/browserify/node_modules/path-browserify/index.js"}],"/data/github/geopackage-node/node_modules/wkx/lib/binaryreader.js":[function(require,module,exports){(function(Buffer){module.exports=BinaryReader;function BinaryReader(buffer,isBigEndian){this.buffer=buffer;this.position=0;this.isBigEndian=isBigEndian||false}function _read(readLE,readBE,size){return function(){var value;if(this.isBigEndian)value=readBE.call(this.buffer,this.position);else value=readLE.call(this.buffer,this.position);this.position+=size;return value}}BinaryReader.prototype.readUInt8=_read(Buffer.prototype.readUInt8,Buffer.prototype.readUInt8,1);BinaryReader.prototype.readUInt16=_read(Buffer.prototype.readUInt16LE,Buffer.prototype.readUInt16BE,2);BinaryReader.prototype.readUInt32=_read(Buffer.prototype.readUInt32LE,Buffer.prototype.readUInt32BE,4);BinaryReader.prototype.readInt8=_read(Buffer.prototype.readInt8,Buffer.prototype.readInt8,1);BinaryReader.prototype.readInt16=_read(Buffer.prototype.readInt16LE,Buffer.prototype.readInt16BE,2);BinaryReader.prototype.readInt32=_read(Buffer.prototype.readInt32LE,Buffer.prototype.readInt32BE,4);BinaryReader.prototype.readFloat=_read(Buffer.prototype.readFloatLE,Buffer.prototype.readFloatBE,4);BinaryReader.prototype.readDouble=_read(Buffer.prototype.readDoubleLE,Buffer.prototype.readDoubleBE,8);BinaryReader.prototype.readVarInt=function(){var nextByte,result=0,bytesRead=0;do{nextByte=this.buffer[this.position+bytesRead];result+=(nextByte&127)<<7*bytesRead;bytesRead++}while(nextByte>=128);this.position+=bytesRead;return result}}).call(this,require("buffer").Buffer)},{buffer:"/data/github/geopackage-node/node_modules/browserify/node_modules/buffer/index.js"}],"/data/github/geopackage-node/node_modules/wkx/lib/binarywriter.js":[function(require,module,exports){(function(Buffer){module.exports=BinaryWriter;function BinaryWriter(size,allowResize){this.buffer=new Buffer(size);this.position=0;this.allowResize=allowResize}function _write(write,size){return function(value,noAssert){this.ensureSize(size);write.call(this.buffer,value,this.position,noAssert);this.position+=size}}BinaryWriter.prototype.writeUInt8=_write(Buffer.prototype.writeUInt8,1);BinaryWriter.prototype.writeUInt16LE=_write(Buffer.prototype.writeUInt16LE,2);BinaryWriter.prototype.writeUInt16BE=_write(Buffer.prototype.writeUInt16BE,2);BinaryWriter.prototype.writeUInt32LE=_write(Buffer.prototype.writeUInt32LE,4);BinaryWriter.prototype.writeUInt32BE=_write(Buffer.prototype.writeUInt32BE,4);BinaryWriter.prototype.writeInt8=_write(Buffer.prototype.writeInt8,1);BinaryWriter.prototype.writeInt16LE=_write(Buffer.prototype.writeInt16LE,2);BinaryWriter.prototype.writeInt16BE=_write(Buffer.prototype.writeInt16BE,2);BinaryWriter.prototype.writeInt32LE=_write(Buffer.prototype.writeInt32LE,4);BinaryWriter.prototype.writeInt32BE=_write(Buffer.prototype.writeInt32BE,4);BinaryWriter.prototype.writeFloatLE=_write(Buffer.prototype.writeFloatLE,4);BinaryWriter.prototype.writeFloatBE=_write(Buffer.prototype.writeFloatBE,4);BinaryWriter.prototype.writeDoubleLE=_write(Buffer.prototype.writeDoubleLE,8);BinaryWriter.prototype.writeDoubleBE=_write(Buffer.prototype.writeDoubleBE,8);BinaryWriter.prototype.writeBuffer=function(buffer){this.ensureSize(buffer.length);buffer.copy(this.buffer,this.position,0,buffer.length);this.position+=buffer.length};BinaryWriter.prototype.writeVarInt=function(value){var length=1;while((value&4294967168)!==0){this.writeUInt8(value&127|128);value>>>=7;length++}this.writeUInt8(value&127);return length};BinaryWriter.prototype.ensureSize=function(size){if(this.buffer.length=1e3&&wkbType<2e3){options.hasZ=true;geometryType=wkbType-1e3}else if(wkbType>=2e3&&wkbType<3e3){options.hasM=true;geometryType=wkbType-2e3}else if(wkbType>=3e3&&wkbType<4e3){options.hasZ=true;options.hasM=true;geometryType=wkbType-3e3}else{geometryType=wkbType}}else{if(wkbType&2147483648)options.hasZ=true;if(wkbType&1073741824)options.hasM=true;geometryType=wkbType&15}switch(geometryType){case Types.wkb.Point:return Point._parseWkb(binaryReader,options);case Types.wkb.LineString:return LineString._parseWkb(binaryReader,options);case Types.wkb.Polygon:return Polygon._parseWkb(binaryReader,options);case Types.wkb.MultiPoint:return MultiPoint._parseWkb(binaryReader,options);case Types.wkb.MultiLineString:return MultiLineString._parseWkb(binaryReader,options);case Types.wkb.MultiPolygon:return MultiPolygon._parseWkb(binaryReader,options);case Types.wkb.GeometryCollection:return GeometryCollection._parseWkb(binaryReader,options);default:throw new Error("GeometryType "+geometryType+" not supported")}};Geometry.parseTwkb=function(value){var binaryReader,options={};if(value instanceof BinaryReader)binaryReader=value;else binaryReader=new BinaryReader(value);var type=binaryReader.readUInt8();var metadataHeader=binaryReader.readUInt8();var geometryType=type&15;options.precision=ZigZag.decode(type>>4);options.precisionFactor=Math.pow(10,options.precision);options.hasBoundingBox=metadataHeader>>0&1;options.hasSizeAttribute=metadataHeader>>1&1;options.hasIdList=metadataHeader>>2&1;options.hasExtendedPrecision=metadataHeader>>3&1;options.isEmpty=metadataHeader>>4&1;if(options.hasExtendedPrecision){var extendedPrecision=binaryReader.readUInt8();options.hasZ=(extendedPrecision&1)===1;options.hasM=(extendedPrecision&2)===2;options.zPrecision=ZigZag.decode((extendedPrecision&28)>>2);options.zPrecisionFactor=Math.pow(10,options.zPrecision);options.mPrecision=ZigZag.decode((extendedPrecision&224)>>5);options.mPrecisionFactor=Math.pow(10,options.mPrecision)}else{options.hasZ=false;options.hasM=false}if(options.hasSizeAttribute)binaryReader.readVarInt();if(options.hasBoundingBox){var dimensions=2;if(options.hasZ)dimensions++;if(options.hasM)dimensions++;for(var i=0;i0)geometryCollection.hasZ=geometryCollection.geometries[0].hasZ;return geometryCollection};GeometryCollection.prototype.toWkt=function(){if(this.geometries.length===0)return this._getWktType(Types.wkt.GeometryCollection,true);var wkt=this._getWktType(Types.wkt.GeometryCollection,false)+"(";for(var i=0;i0){twkb.writeVarInt(this.geometries.length);for(var i=0;i0){this.hasZ=this.points[0].hasZ;this.hasM=this.points[0].hasM}}util.inherits(LineString,Geometry);LineString.Z=function(points){var lineString=new LineString(points);lineString.hasZ=true;return lineString};LineString.M=function(points){var lineString=new LineString(points);lineString.hasM=true;return lineString};LineString.ZM=function(points){var lineString=new LineString(points);lineString.hasZ=true;lineString.hasM=true;return lineString};LineString._parseWkt=function(value,options){var lineString=new LineString;lineString.srid=options.srid;lineString.hasZ=options.hasZ;lineString.hasM=options.hasM;if(value.isMatch(["EMPTY"]))return lineString;value.expectGroupStart();lineString.points.push.apply(lineString.points,value.matchCoordinates(options));value.expectGroupEnd();return lineString};LineString._parseWkb=function(value,options){var lineString=new LineString;lineString.srid=options.srid;lineString.hasZ=options.hasZ;lineString.hasM=options.hasM;var pointCount=value.readUInt32();for(var i=0;i0)lineString.hasZ=value.coordinates[0].length>2;for(var i=0;i0){twkb.writeVarInt(this.points.length);var previousPoint=new Point(0,0,0,0);for(var i=0;i0&&value.coordinates[0].length>0)multiLineString.hasZ=value.coordinates[0][0].length>2;for(var i=0;i0){twkb.writeVarInt(this.lineStrings.length);var previousPoint=new Point(0,0,0,0);for(var i=0;i0)multiPoint.hasZ=value.coordinates[0].length>2;for(var i=0;i0){twkb.writeVarInt(this.points.length);var previousPoint=new Point(0,0,0,0);for(var i=0;i0&&value.coordinates[0].length>0&&value.coordinates[0][0].length>0)multiPolygon.hasZ=value.coordinates[0][0][0].length>2;for(var i=0;i0){twkb.writeVarInt(this.polygons.length);var previousPoint=new Point(0,0,0,0);for(var i=0;i2)return new Point(coordinates[0],coordinates[1],coordinates[2]);return new Point(coordinates[0],coordinates[1])};Point.prototype.toWkt=function(){if(typeof this.x==="undefined"&&typeof this.y==="undefined"&&typeof this.z==="undefined"&&typeof this.m==="undefined")return this._getWktType(Types.wkt.Point,true);return this._getWktType(Types.wkt.Point,false)+"("+this._getWktCoordinate(this)+")"};Point.prototype.toWkb=function(parentOptions){var wkb=new BinaryWriter(this._getWkbSize());wkb.writeInt8(1);if(typeof this.x==="undefined"&&typeof this.y==="undefined"){this._writeWkbType(wkb,Types.wkb.MultiPoint,parentOptions);wkb.writeUInt32LE(0)}else{this._writeWkbType(wkb,Types.wkb.Point,parentOptions);this._writeWkbPoint(wkb)}return wkb.buffer};Point.prototype._writeWkbPoint=function(wkb){wkb.writeDoubleLE(this.x);wkb.writeDoubleLE(this.y);if(this.hasZ)wkb.writeDoubleLE(this.z);if(this.hasM)wkb.writeDoubleLE(this.m)};Point.prototype.toTwkb=function(){var twkb=new BinaryWriter(0,true);var precision=Geometry.getTwkbPrecision(5,0,0);var isEmpty=typeof this.x==="undefined"&&typeof this.y==="undefined";this._writeTwkbHeader(twkb,Types.wkb.Point,precision,isEmpty);if(!isEmpty)this._writeTwkbPoint(twkb,precision,new Point(0,0,0,0));return twkb.buffer};Point.prototype._writeTwkbPoint=function(twkb,precision,previousPoint){var x=this.x*precision.xyFactor;var y=this.y*precision.xyFactor;var z=this.z*precision.zFactor;var m=this.m*precision.mFactor;twkb.writeVarInt(ZigZag.encode(x-previousPoint.x));twkb.writeVarInt(ZigZag.encode(y-previousPoint.y));if(this.hasZ)twkb.writeVarInt(ZigZag.encode(z-previousPoint.z));if(this.hasM)twkb.writeVarInt(ZigZag.encode(m-previousPoint.m));previousPoint.x=x;previousPoint.y=y;previousPoint.z=z;previousPoint.m=m};Point.prototype._getWkbSize=function(){if(typeof this.x==="undefined"&&typeof this.y==="undefined")return 1+4+4;var size=1+4+8+8;if(this.hasZ)size+=8;if(this.hasM)size+=8;return size};Point.prototype.toGeoJSON=function(options){var geoJSON=Geometry.prototype.toGeoJSON.call(this,options);geoJSON.type=Types.geoJSON.Point;if(typeof this.x==="undefined"&&typeof this.y==="undefined")geoJSON.coordinates=[];else if(typeof this.z!=="undefined")geoJSON.coordinates=[this.x,this.y,this.z];else geoJSON.coordinates=[this.x,this.y];return geoJSON}},{"./binarywriter":"/data/github/geopackage-node/node_modules/wkx/lib/binarywriter.js","./geometry":"/data/github/geopackage-node/node_modules/wkx/lib/geometry.js","./types":"/data/github/geopackage-node/node_modules/wkx/lib/types.js","./zigzag.js":"/data/github/geopackage-node/node_modules/wkx/lib/zigzag.js",util:"/data/github/geopackage-node/node_modules/browserify/node_modules/util/util.js"}],"/data/github/geopackage-node/node_modules/wkx/lib/polygon.js":[function(require,module,exports){module.exports=Polygon;var util=require("util"); +var Geometry=require("./geometry");var Types=require("./types");var Point=require("./point");var BinaryWriter=require("./binarywriter");var ZigZag=require("./zigzag");function Polygon(exteriorRing,interiorRings){Geometry.call(this);this.exteriorRing=exteriorRing||[];this.interiorRings=interiorRings||[];if(this.exteriorRing.length>0){this.hasZ=this.exteriorRing[0].hasZ;this.hasM=this.exteriorRing[0].hasM}}util.inherits(Polygon,Geometry);Polygon.Z=function(exteriorRing,interiorRings){var polygon=new Polygon(exteriorRing,interiorRings);polygon.hasZ=true;return polygon};Polygon.M=function(exteriorRing,interiorRings){var polygon=new Polygon(exteriorRing,interiorRings);polygon.hasM=true;return polygon};Polygon.ZM=function(exteriorRing,interiorRings){var polygon=new Polygon(exteriorRing,interiorRings);polygon.hasZ=true;polygon.hasM=true;return polygon};Polygon._parseWkt=function(value,options){var polygon=new Polygon;polygon.srid=options.srid;polygon.hasZ=options.hasZ;polygon.hasM=options.hasM;if(value.isMatch(["EMPTY"]))return polygon;value.expectGroupStart();value.expectGroupStart();polygon.exteriorRing.push.apply(polygon.exteriorRing,value.matchCoordinates(options));value.expectGroupEnd();while(value.isMatch([","])){value.expectGroupStart();polygon.interiorRings.push(value.matchCoordinates(options));value.expectGroupEnd()}value.expectGroupEnd();return polygon};Polygon._parseWkb=function(value,options){var polygon=new Polygon;polygon.srid=options.srid;polygon.hasZ=options.hasZ;polygon.hasM=options.hasM;var ringCount=value.readUInt32();if(ringCount>0){var exteriorRingCount=value.readUInt32();for(var i=0;i0&&value.coordinates[0].length>0)polygon.hasZ=value.coordinates[0][0].length>2;for(var i=0;i0)polygon.interiorRings.push([]);for(var j=0;j0){wkb.writeUInt32LE(1+this.interiorRings.length);wkb.writeUInt32LE(this.exteriorRing.length)}else{wkb.writeUInt32LE(0)}for(var i=0;i0){twkb.writeVarInt(1+this.interiorRings.length);twkb.writeVarInt(this.exteriorRing.length);var previousPoint=new Point(0,0,0,0);for(var i=0;i0)size+=4+this.exteriorRing.length*coordinateSize;for(var i=0;i0){var exteriorRing=[];for(var i=0;i>31},decode:function(value){return value>>1^-(value&1)}}},{}]},{},["/data/github/geopackage-node/index.js"])("/data/github/geopackage-node/index.js")}); \ No newline at end of file diff --git a/libs/potree/lazylibs/sql.js/AUTHORS b/libs/potree/lazylibs/sql.js/AUTHORS new file mode 100644 index 0000000..ae6cbb6 --- /dev/null +++ b/libs/potree/lazylibs/sql.js/AUTHORS @@ -0,0 +1,6 @@ +Ophir LOJKINE (https://github.com/lovasoa) +@kripken +@hankinsoft +@firien +@dinedal +@taytay diff --git a/libs/potree/lazylibs/sql.js/LICENSE b/libs/potree/lazylibs/sql.js/LICENSE new file mode 100644 index 0000000..d5c3c98 --- /dev/null +++ b/libs/potree/lazylibs/sql.js/LICENSE @@ -0,0 +1,44 @@ +MIT license +=========== + +Copyright (c) 2017 sql.js authors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +# Some portions of the Makefile taken from: +Copyright 2017 Ryusei Yamaguchi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/libs/potree/lazylibs/sql.js/README.md b/libs/potree/lazylibs/sql.js/README.md new file mode 100644 index 0000000..0824c93 --- /dev/null +++ b/libs/potree/lazylibs/sql.js/README.md @@ -0,0 +1,283 @@ +# SQLite compiled to javascript +[![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) + +For the impatients, try the demo here: http://kripken.github.io/sql.js/examples/GUI + +*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). + +There 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). + +SQLite is public domain, sql.js is MIT licensed. + +Sql.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. + +## Version of binaries +Sql.js was last built with: +Emscripten version 1.38.30 (2019-04-16) [Release History](https://emscripten.org/docs/introducing_emscripten/release_notes.html) +SqlLite version: 3.28.0 (2019-04-16) [Release History](https://www.sqlite.org/changes.html) + +## Documentation +A [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. + +## Usage + +```javascript +var initSqlJs = require('sql-wasm.js'); +// or if you are in a browser: +//var initSqlJs = window.initSqlJs; + +initSqlJs().then(function(SQL){ + + // Create a database + var db = new SQL.Database(); + // NOTE: You can also use new SQL.Database(data) where + // data is an Uint8Array representing an SQLite database file + + // Execute some sql + sqlstr = "CREATE TABLE hello (a int, b char);"; + sqlstr += "INSERT INTO hello VALUES (0, 'hello');" + sqlstr += "INSERT INTO hello VALUES (1, 'world');" + db.run(sqlstr); // Run the query without returning anything + + var res = db.exec("SELECT * FROM hello"); + /* + [ + {columns:['a','b'], values:[[0,'hello'],[1,'world']]} + ] + */ + + // Prepare an sql statement + var stmt = db.prepare("SELECT * FROM hello WHERE a=:aval AND b=:bval"); + + // Bind values to the parameters and fetch the results of the query + var result = stmt.getAsObject({':aval' : 1, ':bval' : 'world'}); + console.log(result); // Will print {a:1, b:'world'} + + // Bind other values + stmt.bind([0, 'hello']); + while (stmt.step()) console.log(stmt.get()); // Will print [0, 'hello'] + + // You can also use javascript functions inside your SQL code + // Create the js function you need + function add(a, b) {return a+b;} + // Specifies the SQL function's name, the number of it's arguments, and the js function to use + db.create_function("add_js", add); + // Run a query in which the function is used + db.run("INSERT INTO hello VALUES (add_js(7, 3), add_js('Hello ', 'world'));"); // Inserts 10 and 'Hello world' + + // free the memory used by the statement + stmt.free(); + // You can not use your statement anymore once it has been freed. + // But not freeing your statements causes memory leaks. You don't want that. + + // Export the database to an Uint8Array containing the SQLite database file + var binaryArray = db.export(); +}); + +``` + +## Demo +There 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). + +## Examples +The test files provide up to date example of the use of the api. +### Inside the browser +#### Example **HTML** file: +```html + + + + + + Output is in Javscript console + + +``` + +#### Creating a database from a file choosen by the user +`SQL.Database` constructor takes an array of integer representing a database file as an optional parameter. +The following code uses an HTML input as the source for loading a database: +```javascript +dbFileElm.onchange = () => { + var f = dbFileElm.files[0]; + var r = new FileReader(); + r.onload = function() { + var Uints = new Uint8Array(r.result); + db = new SQL.Database(Uints); + } + r.readAsArrayBuffer(f); +} +``` +See : http://kripken.github.io/sql.js/examples/GUI/gui.js + +#### Loading a database from a server + +```javascript +var xhr = new XMLHttpRequest(); +// For example: https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite +xhr.open('GET', '/path/to/database.sqlite', true); +xhr.responseType = 'arraybuffer'; + +xhr.onload = e => { + var uInt8Array = new Uint8Array(this.response); + var db = new SQL.Database(uInt8Array); + var contents = db.exec("SELECT * FROM my_table"); + // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}] +}; +xhr.send(); +``` +See: https://github.com/kripken/sql.js/wiki/Load-a-database-from-the-server + + +### Use from node.js + +`sql.js` is [hosted on npm](https://www.npmjs.org/package/sql.js). To install it, you can simply run `npm install sql.js`. +Alternatively, you can simply download `sql-wasm.js` and `sql-wasm.wasm`, from the download link below. + +#### read a database from the disk: +```javascript +var fs = require('fs'); +var initSqlJs = require('sql-wasm.js'); +var filebuffer = fs.readFileSync('test.sqlite'); + +initSqlJs().then(function(SQL){ + // Load the db + var db = new SQL.Database(filebuffer); +}); + +``` + +#### write a database to the disk +You need to convert the result of `db.export` to a buffer +```javascript +var fs = require("fs"); +// [...] (create the database) +var data = db.export(); +var buffer = new Buffer(data); +fs.writeFileSync("filename.sqlite", buffer); +``` + +See : https://github.com/kripken/sql.js/blob/master/test/test_node_file.js + +### Use as web worker +If you don't want to run CPU-intensive SQL queries in your main application thread, +you can use the *more limited* WebWorker API. + +You will need to download [dist/worker.sql-wasm.js](dist/worker.sql-wasm.js) [dist/worker.sql-wasm.wasm](dist/worker.sql-wasm.wasm). + +Example: +```html + +``` + +See [examples/GUI/gui.js](examples/GUI/gui.js) for a full working example. + +## Flavors/versions Targets/Downloads + +This 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. + +## Upgrading from 0.x to 1.x + +Version 1.0 of sql.js must be loaded asynchronously, whereas asm.js was able to be loaded synchronously. + +So in the past, you would: +```html + + +``` +or: +```javascript +var SQL = require('sql.js'); +var db = new QL.Database(); +//... +``` + +Version 1.x: +```html + + +``` +or: +```javascript +var initSqlJs = require('sql-wasm.js'); +initSqlJs().then(function(SQL){ + var db = new SQL.Database(); + //... +}); +``` + +`NOTHING` is now a reserved word in SQLite, whereas previously it was not. This could cause errors like `Error: near "nothing": syntax error` + +### Downloading/Using: ### +Although 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. + + + + +## Versions of sql.js included in `dist/` + - `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. + - `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. + - `sql-asm.js` : The older asm.js version of Sql.js. Slower and larger. Provided for compatiblity reasons. + - `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. + - `sql-asm-debug.js` : The _Debug_ asm.js version of Sql.js. Use this for local development. + - `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. + +## Compiling + +- Install the EMSDK, [as described here](https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html) +- Run `npm run rebuild` + diff --git a/libs/potree/lazylibs/sql.js/sql-wasm.js b/libs/potree/lazylibs/sql.js/sql-wasm.js new file mode 100644 index 0000000..f75abd4 --- /dev/null +++ b/libs/potree/lazylibs/sql.js/sql-wasm.js @@ -0,0 +1,209 @@ + +// We are modularizing this manually because the current modularize setting in Emscripten has some issues: +// https://github.com/kripken/emscripten/issues/5820 +// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`, +// which is able to be used/called before the WASM is loaded. +// The modularization below exports a promise that loads and resolves to the actual sql.js module. +// That way, this module can't be used before the WASM is finished loading. + +// We are going to define a function that a user will call to start loading initializing our Sql.js library +// 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 +// Instead, we want to return the previously loaded module + +// TODO: Make this not declare a global if used in the browser +var initSqlJsPromise = undefined; + +var initSqlJs = function (moduleConfig) { + + if (initSqlJsPromise){ + return initSqlJsPromise; + } + // If we're here, we've never called this function before + initSqlJsPromise = new Promise((resolveModule, reject) => { + + // We are modularizing this manually because the current modularize setting in Emscripten has some issues: + // https://github.com/kripken/emscripten/issues/5820 + + // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add + // properties to it, like `preRun`, `postRun`, etc + // We are using that to get notified when the WASM has finished loading. + // Only then will we return our promise + + // If they passed in a moduleConfig object, use that + // Otherwise, initialize Module to the empty object + var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {}; + + // EMCC only allows for a single onAbort function (not an array of functions) + // So if the user defined their own onAbort function, we remember it and call it + var originalOnAbortFunction = Module['onAbort']; + Module['onAbort'] = function (errorThatCausedAbort) { + reject(new Error(errorThatCausedAbort)); + if (originalOnAbortFunction){ + originalOnAbortFunction(errorThatCausedAbort); + } + }; + + Module['postRun'] = Module['postRun'] || []; + Module['postRun'].push(function () { + // When Emscripted calls postRun, this promise resolves with the built Module + resolveModule(Module); + }); + + // There is a section of code in the emcc-generated code below that looks like this: + // (Note that this is lowercase `module`) + // if (typeof module !== 'undefined') { + // module['exports'] = Module; + // } + // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js! + // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags, + // but that carries with it additional unnecessary baggage/bugs we don't want either. + // So, we have three options: + // 1) We undefine `module` + // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later + // 3) We write a script to remove those lines of code as part of the Make process. + // + // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward + // 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. + // That's a nice side effect since we're handling the modularization efforts ourselves + module = undefined; + + // The emcc-generated code and shell-post.js code goes below, + // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort +var aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {}); +var 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= +function(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?bc;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?bd;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)); +break;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?ab;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>>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;kc;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; +case 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?cd;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"]); +var 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"]); +var 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", +"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", +"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= +f.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= +22;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=""; +if(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>2];a=b+a+15&-16;if(a<=Da())D[Ca>>2]=a;else if(!Ea(a))return 0;return b} +var 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"); +function 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} +function 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>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; +function 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>2]=0;for(a=b+d;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; +function t(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16e?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):""} +function r(a,b,c,d){if(!(0=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} +function oa(a){for(var b=0,c=0;c=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){0Ya&&C("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Ya+"! (TOTAL_STACK=5242880)"); +f.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>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>0]=d.charCodeAt(m);l[k>>0]=0;D[b+ +4*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} +function 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)} +function 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)} +var 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=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),0b)a.bb.length=b;else for(;a.bb.length=a.node.gb)return 0;a=Math.min(a.node.gb-e,d);if(8b)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!== +(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>2)}catch(c){if(!c.code)throw c; +throw 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, +uid: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; +throw 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, +b,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; +throw 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, +Eb={};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>>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}} +function 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)} +function 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} +function 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")} +function 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);} +function 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}} +function 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)} +function 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)} +function 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)}} +function 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()})} +function 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()})} +function 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)&& +("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} +function 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=[]} +function 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} +function 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} +function 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=""}))}var Hc;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c} +function 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>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; +function 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=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} +function 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); +function 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()>2]=d,D[Rc()+4>>2]=e):(D[Rc()>>2]=e,D[Rc()+4>>2]=d)}}var Oc; +function Sc(a){a/=1E3;if((v||w)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b>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(dd?-L.ib:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0; +case 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"); +d&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, +e=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= +b;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; +if(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}, +I: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, +c))|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; +case 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; +case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}pb(22);return-1}, +E: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")}, +a: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)}; +var 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)}; +f._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)}; +f._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)}; +f._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)}; +f._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)}; +f._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)}; +var 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; +function 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)}; +function 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"== +typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();cb.unshift(a)}Za(cb)}}if(!(0 *{ + margin: 4px 20px; +} + +.ui-slider { + margin-top: 5px; + margin-bottom: 10px; + background-color: var(--color-1) !important; + background: none; + border: 1px solid black; +} + +.ui-selectmenu-button.ui-button{ + width: 100% !important; +} + +.pv-menu-list > li > .ui-slider{ + background-color: var(--color-1) !important; + background: none; + border: 1px solid black; +} + +.pv-menu-list .ui-slider{ + background-color: var(--color-1) !important; + background: none; + border: 1px solid black !important; +} + +.ui-slider-handle{ + border: 1px solid black !important; +} + +.ui-widget{ + box-sizing:border-box +} + +.panel-body > li > .ui-slider{ + background-color: var(--color-1) !important; + background: none; + border: 1px solid black; +} + +.panel-body > div > li > .ui-slider{ + background-color: var(--color-1) !important; + background: none; + border: 1px solid black; +} + +.pv-select-label{ + margin: 1px; + font-size: 90%; + font-weight: 100; +} + +.button-icon:hover{ + /*background-color: #09181C;*/ + filter: drop-shadow(0px 0px 4px white); +} + +.ui-widget-content{ + /*color: var(--font-color) !important;*/ +} + +.accordion > h3{ + background-color: var(--bg-color-2) !important; + background: #f6f6f6 50% 50% repeat-x; + border: 1px solid black; + color: var(--font-color-2); + cursor: pointer; + margin: 2px 0 0 0; + padding: 4px 10px 4px 30px; + box-shadow: 0px 3px 3px #111; + text-shadow: 1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; + font-size: 1em; +} + +.accordion > h3:hover{ + filter: brightness(125%); +} + +.accordion-content{ + padding: 0px 0px !important; + border: none !important; +} + +.icon-bar{ + height: 4px !important; + border: 1px solid black; + background-color: white; + border-radius: 2px; +} + +.canvas{ + -webkit-transition: top .35s, left .35s, bottom .35s, right .35s, width .35s; + transition: top .35s, left .35s, bottom .35s, right .35s, width .35s; +} + +#profile_window{ + background-color: var(--bg-color); +} + +#profile_titlebar{ + background-color: var(--bg-color-2); + color: var(--font-color-2); + text-shadow: 1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; + font-size: 1em; + font-weight: bold; +} + +#profile_window_title{ + position: absolute; + margin: 5px; +} + +.profile-container-button{ + cursor: pointer; +} + +.profile-button:hover{ + background-color: #0000CC; +} + +.unselectable{ + user-select: none; +} + +.selectable{ + user-select: text; +} + + + +.divider { + display: block; + text-align: center; + overflow: hidden; + white-space: nowrap; + font-weight: bold; + font-size: 90%; + letter-spacing: 1px; + margin-left: 0px; + margin-right: 0px; + margin-top: 1px; + margin-bottom: 1px; + padding: 1px !important; +} + +.divider > span { + position: relative; + display: inline-block; +} + +.divider > span:before, +.divider > span:after { + content: ""; + position: absolute; + top: 50%; + width: 9999px; + height: 1px; + background: #b2b2b2; +} + +.divider > span:before { + right: 100%; + margin-right: 5px; +} + +.divider > span:after { + left: 100%; + margin-left: 5px; +} + + + + + + + + + + + +.ol-dragbox { + background-color: rgba(255,255,255,0.4); + border-color: rgba(100,150,0,1); + border: 1px solid red; +} + +.text-icon{ + opacity: 0.5; + height: 24px; +} + +.text-icon:hover{ + opacity: 1.0; +} + +.input-grid-cell{ + flex-grow: 1; margin: 0px 3px 0px 3px; +} + +.input-grid-label{ + flex-grow: 1; + margin: 0px 3px 0px 3px; + text-align:center; + font-weight: bold; +} + +.input-grid-cell > input{ + width: 100% +} + +.invalid_value{ + color: #e05e5e; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/** + * OVERRIDES + */ + + +.ui-spinner-input{ + color: black; +} + +.jstree-themeicon-custom{ + background-size: 16px !important; +} + +.jstree-default .jstree-clicked{ + /*background-color: #ffffff !important;*/ + background-color: #34494f !important; +} + +.jstree-default .jstree-hovered{ + background-color: #34494f !important; +} + +.jstree-anchor{ + width: 100% !important; +} + +.ui-state-default{ + background: #a6a9aa !important; + border: 1px solid black; + color: black; +} + +.ui-state-active{ + background: #c6c9ca !important; + color: black !important; +} + +.cesium-viewer .cesium-viewer-cesiumWidgetContainer{ + position: absolute; + height: 100%; + width: 100%; +} + + + + +.zs_widget{ + padding: 2px; + height: 4em; + user-select: none; +} +.zs_core{ + overflow: hidden; + position: relative; + height: 100%; +} +.zs_handle{ + position: absolute; + top: 0px; + bottom: 0px; + border: 1px solid black; + border-radius: 3px; + background-color: rgb(166, 169, 170); + width: 8px; + user-select: none; + width: 1.2em; + height: 1.2em; + top: calc(50% - 0.6em); +} +.zs_stretch{ + position: absolute; + top: 0px; + bottom: 0px; + border: 1px solid black; + border-radius: 3px; + background-color: rgb(166, 169, 170); + width: 8px; + user-select: none; + width: 1.2em; + height: 1.2em; + top: calc(50% - 0.6em); + color: black; + font-weight: bold; + font-size: 1.2em; + font-family: arial; +} +.zs_handle:hover{ + background-color: lightgreen; +} +.zs_inside{ + position: absolute !important; + width: 100%; + border: 1px solid black; + background-color: white; + top: calc(50% - 0.326em); + height: 0.652em; + cursor: zoom-in; +} +.zs_outside{ + position: absolute !important; + width: 100%; + background-color: var(--color-1) !important; + top: calc(50% - 0.326em); + height: 0.652em; + cursor: zoom-in; +} +.zs_visible_range_label{ + position: absolute; + bottom: 0px; + pointer-events:none; +} +.zs_visible_range_label_left{ + left: 0px; +} +.zs_visible_range_label_right{ + right: 0px; +} +.zs_chosen_range_label{ + position: absolute; + pointer-events:none; +} + +#potree_sidebar_container{ + scrollbar-color: var(--color-1) var(--bg-color); + scrollbar-width: thin; +} + + + +::-webkit-scrollbar { + width: 6px; + background-color: var(--bg-color); +} + +::-webkit-scrollbar-track { + +} + +::-webkit-scrollbar-thumb { + background-color: var(--color-1); +} + +.propertypanel_content .heading{ + font-weight: bold; + padding-top: 0.6em; + padding-bottom: 0.1em; +} \ No newline at end of file diff --git a/libs/potree/potree.js b/libs/potree/potree.js new file mode 100644 index 0000000..3f90704 --- /dev/null +++ b/libs/potree/potree.js @@ -0,0 +1,90671 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.Potree = {})); +}(this, (function (exports) { 'use strict'; + + /** + * @author mrdoob / http://mrdoob.com/ https://github.com/mrdoob/eventdispatcher.js + * + * with slight modifications by mschuetz, http://potree.org + * + */ + + // The MIT License + // + // Copyright (c) 2011 Mr.doob + // + // Permission is hereby granted, free of charge, to any person obtaining a copy + // of this software and associated documentation files (the "Software"), to deal + // in the Software without restriction, including without limitation the rights + // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + // copies of the Software, and to permit persons to whom the Software is + // furnished to do so, subject to the following conditions: + // + // The above copyright notice and this permission notice shall be included in + // all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + // THE SOFTWARE. + + + + + + class EventDispatcher{ + + constructor(){ + this._listeners = {}; + } + + addEventListener(type, listener){ + + const listeners = this._listeners; + + if(listeners[type] === undefined){ + listeners[type] = []; + } + + if(listeners[type].indexOf(listener) === - 1){ + listeners[type].push( listener ); + } + + } + + hasEventListener(type, listener){ + + const listeners = this._listeners; + + return listeners[type] !== undefined && listeners[type].indexOf(listener) !== - 1; + } + + removeEventListener(type, listener){ + + let listeners = this._listeners; + let listenerArray = listeners[type]; + + if (listenerArray !== undefined){ + + let index = listenerArray.indexOf(listener); + + if(index !== - 1){ + listenerArray.splice(index, 1); + } + } + + } + + removeEventListeners(type){ + if(this._listeners[type] !== undefined){ + delete this._listeners[type]; + } + }; + + dispatchEvent(event){ + + let listeners = this._listeners; + let listenerArray = listeners[event.type]; + + if ( listenerArray !== undefined ) { + event.target = this; + + for(let listener of listenerArray.slice(0)){ + listener.call(this, event); + } + } + + } + + } + + class Action extends EventDispatcher { + constructor (args = {}) { + super(); + + this.icon = args.icon || ''; + this.tooltip = args.tooltip; + + if (args.onclick !== undefined) { + this.onclick = args.onclick; + } + } + + onclick (event) { + + } + + pairWith (object) { + + } + + setIcon (newIcon) { + let oldIcon = this.icon; + + if (newIcon === oldIcon) { + return; + } + + this.icon = newIcon; + + this.dispatchEvent({ + type: 'icon_changed', + action: this, + icon: newIcon, + oldIcon: oldIcon + }); + } + }; + + //Potree.Actions = {}; + // + //Potree.Actions.ToggleAnnotationVisibility = class ToggleAnnotationVisibility extends Potree.Action { + // constructor (args = {}) { + // super(args); + // + // this.icon = Potree.resourcePath + '/icons/eye.svg'; + // this.showIn = 'sidebar'; + // this.tooltip = 'toggle visibility'; + // } + // + // pairWith (annotation) { + // if (annotation.visible) { + // this.setIcon(Potree.resourcePath + '/icons/eye.svg'); + // } else { + // this.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg'); + // } + // + // annotation.addEventListener('visibility_changed', e => { + // let annotation = e.annotation; + // + // if (annotation.visible) { + // this.setIcon(Potree.resourcePath + '/icons/eye.svg'); + // } else { + // this.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg'); + // } + // }); + // } + // + // onclick (event) { + // let annotation = event.annotation; + // + // annotation.visible = !annotation.visible; + // + // if (annotation.visible) { + // this.setIcon(Potree.resourcePath + '/icons/eye.svg'); + // } else { + // this.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg'); + // } + // } + //}; + + // threejs.org/license + const REVISION = '124'; + const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; + const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; + const CullFaceNone = 0; + const CullFaceBack = 1; + const CullFaceFront = 2; + const CullFaceFrontBack = 3; + const BasicShadowMap = 0; + const PCFShadowMap = 1; + const PCFSoftShadowMap = 2; + const VSMShadowMap = 3; + const FrontSide = 0; + const BackSide = 1; + const DoubleSide = 2; + const FlatShading = 1; + const SmoothShading = 2; + const NoBlending = 0; + const NormalBlending = 1; + const AdditiveBlending = 2; + const SubtractiveBlending = 3; + const MultiplyBlending = 4; + const CustomBlending = 5; + const AddEquation = 100; + const SubtractEquation = 101; + const ReverseSubtractEquation = 102; + const MinEquation = 103; + const MaxEquation = 104; + const ZeroFactor = 200; + const OneFactor = 201; + const SrcColorFactor = 202; + const OneMinusSrcColorFactor = 203; + const SrcAlphaFactor = 204; + const OneMinusSrcAlphaFactor = 205; + const DstAlphaFactor = 206; + const OneMinusDstAlphaFactor = 207; + const DstColorFactor = 208; + const OneMinusDstColorFactor = 209; + const SrcAlphaSaturateFactor = 210; + const NeverDepth = 0; + const AlwaysDepth = 1; + const LessDepth = 2; + const LessEqualDepth = 3; + const EqualDepth = 4; + const GreaterEqualDepth = 5; + const GreaterDepth = 6; + const NotEqualDepth = 7; + const MultiplyOperation = 0; + const MixOperation = 1; + const AddOperation = 2; + const NoToneMapping = 0; + const LinearToneMapping = 1; + const ReinhardToneMapping = 2; + const CineonToneMapping = 3; + const ACESFilmicToneMapping = 4; + const CustomToneMapping = 5; + + const UVMapping = 300; + const CubeReflectionMapping = 301; + const CubeRefractionMapping = 302; + const EquirectangularReflectionMapping = 303; + const EquirectangularRefractionMapping = 304; + const CubeUVReflectionMapping = 306; + const CubeUVRefractionMapping = 307; + const RepeatWrapping = 1000; + const ClampToEdgeWrapping = 1001; + const MirroredRepeatWrapping = 1002; + const NearestFilter = 1003; + const NearestMipmapNearestFilter = 1004; + const NearestMipMapNearestFilter = 1004; + const NearestMipmapLinearFilter = 1005; + const NearestMipMapLinearFilter = 1005; + const LinearFilter = 1006; + const LinearMipmapNearestFilter = 1007; + const LinearMipMapNearestFilter = 1007; + const LinearMipmapLinearFilter = 1008; + const LinearMipMapLinearFilter = 1008; + const UnsignedByteType = 1009; + const ByteType = 1010; + const ShortType = 1011; + const UnsignedShortType = 1012; + const IntType = 1013; + const UnsignedIntType = 1014; + const FloatType = 1015; + const HalfFloatType = 1016; + const UnsignedShort4444Type = 1017; + const UnsignedShort5551Type = 1018; + const UnsignedShort565Type = 1019; + const UnsignedInt248Type$1 = 1020; + const AlphaFormat = 1021; + const RGBFormat = 1022; + const RGBAFormat = 1023; + const LuminanceFormat = 1024; + const LuminanceAlphaFormat = 1025; + const RGBEFormat = RGBAFormat; + const DepthFormat = 1026; + const DepthStencilFormat = 1027; + const RedFormat = 1028; + const RedIntegerFormat = 1029; + const RGFormat = 1030; + const RGIntegerFormat = 1031; + const RGBIntegerFormat = 1032; + const RGBAIntegerFormat = 1033; + + const RGB_S3TC_DXT1_Format = 33776; + const RGBA_S3TC_DXT1_Format$1 = 33777; + const RGBA_S3TC_DXT3_Format = 33778; + const RGBA_S3TC_DXT5_Format$1 = 33779; + const RGB_PVRTC_4BPPV1_Format = 35840; + const RGB_PVRTC_2BPPV1_Format = 35841; + const RGBA_PVRTC_4BPPV1_Format = 35842; + const RGBA_PVRTC_2BPPV1_Format = 35843; + const RGB_ETC1_Format = 36196; + const RGB_ETC2_Format = 37492; + const RGBA_ETC2_EAC_Format = 37496; + const RGBA_ASTC_4x4_Format = 37808; + const RGBA_ASTC_5x4_Format = 37809; + const RGBA_ASTC_5x5_Format = 37810; + const RGBA_ASTC_6x5_Format = 37811; + const RGBA_ASTC_6x6_Format = 37812; + const RGBA_ASTC_8x5_Format = 37813; + const RGBA_ASTC_8x6_Format = 37814; + const RGBA_ASTC_8x8_Format = 37815; + const RGBA_ASTC_10x5_Format = 37816; + const RGBA_ASTC_10x6_Format = 37817; + const RGBA_ASTC_10x8_Format = 37818; + const RGBA_ASTC_10x10_Format = 37819; + const RGBA_ASTC_12x10_Format = 37820; + const RGBA_ASTC_12x12_Format = 37821; + const RGBA_BPTC_Format = 36492; + const SRGB8_ALPHA8_ASTC_4x4_Format = 37840; + const SRGB8_ALPHA8_ASTC_5x4_Format = 37841; + const SRGB8_ALPHA8_ASTC_5x5_Format = 37842; + const SRGB8_ALPHA8_ASTC_6x5_Format = 37843; + const SRGB8_ALPHA8_ASTC_6x6_Format = 37844; + const SRGB8_ALPHA8_ASTC_8x5_Format = 37845; + const SRGB8_ALPHA8_ASTC_8x6_Format = 37846; + const SRGB8_ALPHA8_ASTC_8x8_Format = 37847; + const SRGB8_ALPHA8_ASTC_10x5_Format = 37848; + const SRGB8_ALPHA8_ASTC_10x6_Format = 37849; + const SRGB8_ALPHA8_ASTC_10x8_Format = 37850; + const SRGB8_ALPHA8_ASTC_10x10_Format = 37851; + const SRGB8_ALPHA8_ASTC_12x10_Format = 37852; + const SRGB8_ALPHA8_ASTC_12x12_Format = 37853; + const LoopOnce = 2200; + const LoopRepeat = 2201; + const LoopPingPong = 2202; + const InterpolateDiscrete = 2300; + const InterpolateLinear = 2301; + const InterpolateSmooth = 2302; + const ZeroCurvatureEnding = 2400; + const ZeroSlopeEnding = 2401; + const WrapAroundEnding = 2402; + const NormalAnimationBlendMode = 2500; + const AdditiveAnimationBlendMode = 2501; + const TrianglesDrawMode = 0; + const TriangleStripDrawMode = 1; + const TriangleFanDrawMode = 2; + const LinearEncoding = 3000; + const sRGBEncoding = 3001; + const GammaEncoding = 3007; + const RGBEEncoding = 3002; + const LogLuvEncoding = 3003; + const RGBM7Encoding = 3004; + const RGBM16Encoding = 3005; + const RGBDEncoding = 3006; + const BasicDepthPacking = 3200; + const RGBADepthPacking = 3201; + const TangentSpaceNormalMap = 0; + const ObjectSpaceNormalMap = 1; + + const ZeroStencilOp = 0; + const KeepStencilOp = 7680; + const ReplaceStencilOp = 7681; + const IncrementStencilOp = 7682; + const DecrementStencilOp = 7683; + const IncrementWrapStencilOp = 34055; + const DecrementWrapStencilOp = 34056; + const InvertStencilOp = 5386; + + const NeverStencilFunc = 512; + const LessStencilFunc = 513; + const EqualStencilFunc = 514; + const LessEqualStencilFunc = 515; + const GreaterStencilFunc = 516; + const NotEqualStencilFunc = 517; + const GreaterEqualStencilFunc = 518; + const AlwaysStencilFunc = 519; + + const StaticDrawUsage = 35044; + const DynamicDrawUsage = 35048; + const StreamDrawUsage = 35040; + const StaticReadUsage = 35045; + const DynamicReadUsage = 35049; + const StreamReadUsage = 35041; + const StaticCopyUsage = 35046; + const DynamicCopyUsage = 35050; + const StreamCopyUsage = 35042; + + const GLSL1 = '100'; + const GLSL3 = '300 es'; + + /** + * https://github.com/mrdoob/eventdispatcher.js/ + */ + + function EventDispatcher$1() {} + + Object.assign( EventDispatcher$1.prototype, { + + addEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) this._listeners = {}; + + const listeners = this._listeners; + + if ( listeners[ type ] === undefined ) { + + listeners[ type ] = []; + + } + + if ( listeners[ type ].indexOf( listener ) === - 1 ) { + + listeners[ type ].push( listener ); + + } + + }, + + hasEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return false; + + const listeners = this._listeners; + + return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; + + }, + + removeEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return; + + const listeners = this._listeners; + const listenerArray = listeners[ type ]; + + if ( listenerArray !== undefined ) { + + const index = listenerArray.indexOf( listener ); + + if ( index !== - 1 ) { + + listenerArray.splice( index, 1 ); + + } + + } + + }, + + dispatchEvent: function ( event ) { + + if ( this._listeners === undefined ) return; + + const listeners = this._listeners; + const listenerArray = listeners[ event.type ]; + + if ( listenerArray !== undefined ) { + + event.target = this; + + // Make a copy, in case listeners are removed while iterating. + const array = listenerArray.slice( 0 ); + + for ( let i = 0, l = array.length; i < l; i ++ ) { + + array[ i ].call( this, event ); + + } + + } + + } + + } ); + + const _lut = []; + + for ( let i = 0; i < 256; i ++ ) { + + _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ); + + } + + let _seed = 1234567; + + const MathUtils = { + + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + + generateUUID: function () { + + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 + + const d0 = Math.random() * 0xffffffff | 0; + const d1 = Math.random() * 0xffffffff | 0; + const d2 = Math.random() * 0xffffffff | 0; + const d3 = Math.random() * 0xffffffff | 0; + const 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. + return uuid.toUpperCase(); + + }, + + clamp: function ( value, min, max ) { + + return Math.max( min, Math.min( max, value ) ); + + }, + + // compute euclidian modulo of m % n + // https://en.wikipedia.org/wiki/Modulo_operation + + euclideanModulo: function ( n, m ) { + + return ( ( n % m ) + m ) % m; + + }, + + // Linear mapping from range to range + + mapLinear: function ( x, a1, a2, b1, b2 ) { + + return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); + + }, + + // https://en.wikipedia.org/wiki/Linear_interpolation + + lerp: function ( x, y, t ) { + + return ( 1 - t ) * x + t * y; + + }, + + // http://en.wikipedia.org/wiki/Smoothstep + + smoothstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * ( 3 - 2 * x ); + + }, + + smootherstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); + + }, + + // Random integer from interval + + randInt: function ( low, high ) { + + return low + Math.floor( Math.random() * ( high - low + 1 ) ); + + }, + + // Random float from interval + + randFloat: function ( low, high ) { + + return low + Math.random() * ( high - low ); + + }, + + // Random float from <-range/2, range/2> interval + + randFloatSpread: function ( range ) { + + return range * ( 0.5 - Math.random() ); + + }, + + // Deterministic pseudo-random float in the interval [ 0, 1 ] + + seededRandom: function ( s ) { + + if ( s !== undefined ) _seed = s % 2147483647; + + // Park-Miller algorithm + + _seed = _seed * 16807 % 2147483647; + + return ( _seed - 1 ) / 2147483646; + + }, + + degToRad: function ( degrees ) { + + return degrees * MathUtils.DEG2RAD; + + }, + + radToDeg: function ( radians ) { + + return radians * MathUtils.RAD2DEG; + + }, + + isPowerOfTwo: function ( value ) { + + return ( value & ( value - 1 ) ) === 0 && value !== 0; + + }, + + ceilPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); + + }, + + floorPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); + + }, + + setQuaternionFromProperEuler: function ( q, a, b, c, order ) { + + // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles + + // rotations are applied to the axes in the order specified by 'order' + // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c' + // angles are in radians + + const cos = Math.cos; + const sin = Math.sin; + + const c2 = cos( b / 2 ); + const s2 = sin( b / 2 ); + + const c13 = cos( ( a + c ) / 2 ); + const s13 = sin( ( a + c ) / 2 ); + + const c1_3 = cos( ( a - c ) / 2 ); + const s1_3 = sin( ( a - c ) / 2 ); + + const c3_1 = cos( ( c - a ) / 2 ); + const s3_1 = sin( ( c - a ) / 2 ); + + switch ( order ) { + + case 'XYX': + q.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 ); + break; + + case 'YZY': + q.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 ); + break; + + case 'ZXZ': + q.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 ); + break; + + case 'XZX': + q.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 ); + break; + + case 'YXY': + q.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 ); + break; + + case 'ZYZ': + q.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 ); + break; + + default: + console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order ); + + } + + } + + }; + + class Vector2 { + + constructor( x = 0, y = 0 ) { + + Object.defineProperty( this, 'isVector2', { value: true } ); + + this.x = x; + this.y = y; + + } + + get width() { + + return this.x; + + } + + set width( value ) { + + this.x = value; + + } + + get height() { + + return this.y; + + } + + set height( value ) { + + this.y = value; + + } + + set( x, y ) { + + this.x = x; + this.y = y; + + return this; + + } + + setScalar( scalar ) { + + this.x = scalar; + this.y = scalar; + + return this; + + } + + setX( x ) { + + this.x = x; + + return this; + + } + + setY( y ) { + + this.y = y; + + return this; + + } + + setComponent( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + } + + getComponent( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + default: throw new Error( 'index is out of range: ' + index ); + + } + + } + + clone() { + + return new this.constructor( this.x, this.y ); + + } + + copy( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + } + + add( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + + return this; + + } + + addScalar( s ) { + + this.x += s; + this.y += s; + + return this; + + } + + addVectors( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + + return this; + + } + + addScaledVector( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + + return this; + + } + + sub( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + + return this; + + } + + subScalar( s ) { + + this.x -= s; + this.y -= s; + + return this; + + } + + subVectors( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + + return this; + + } + + multiply( v ) { + + this.x *= v.x; + this.y *= v.y; + + return this; + + } + + multiplyScalar( scalar ) { + + this.x *= scalar; + this.y *= scalar; + + return this; + + } + + divide( v ) { + + this.x /= v.x; + this.y /= v.y; + + return this; + + } + + divideScalar( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + applyMatrix3( m ) { + + const x = this.x, y = this.y; + const e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ]; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ]; + + return this; + + } + + min( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + + return this; + + } + + max( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + + return this; + + } + + clamp( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + + return this; + + } + + clampScalar( minVal, maxVal ) { + + this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); + this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); + + return this; + + } + + clampLength( min, max ) { + + const length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + } + + floor() { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + + return this; + + } + + ceil() { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + + return this; + + } + + round() { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + + return this; + + } + + roundToZero() { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + + return this; + + } + + negate() { + + this.x = - this.x; + this.y = - this.y; + + return this; + + } + + dot( v ) { + + return this.x * v.x + this.y * v.y; + + } + + cross( v ) { + + return this.x * v.y - this.y * v.x; + + } + + lengthSq() { + + return this.x * this.x + this.y * this.y; + + } + + length() { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + } + + manhattanLength() { + + return Math.abs( this.x ) + Math.abs( this.y ); + + } + + normalize() { + + return this.divideScalar( this.length() || 1 ); + + } + + angle() { + + // computes the angle in radians with respect to the positive x-axis + + const angle = Math.atan2( - this.y, - this.x ) + Math.PI; + + return angle; + + } + + distanceTo( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + } + + distanceToSquared( v ) { + + const dx = this.x - v.x, dy = this.y - v.y; + return dx * dx + dy * dy; + + } + + manhattanDistanceTo( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ); + + } + + setLength( length ) { + + return this.normalize().multiplyScalar( length ); + + } + + lerp( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + + return this; + + } + + lerpVectors( v1, v2, alpha ) { + + this.x = v1.x + ( v2.x - v1.x ) * alpha; + this.y = v1.y + ( v2.y - v1.y ) * alpha; + + return this; + + } + + equals( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + } + + fromArray( array, offset = 0 ) { + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + + return this; + + } + + toArray( array = [], offset = 0 ) { + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + + return array; + + } + + fromBufferAttribute( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + + return this; + + } + + rotateAround( center, angle ) { + + const c = Math.cos( angle ), s = Math.sin( angle ); + + const x = this.x - center.x; + const y = this.y - center.y; + + this.x = x * c - y * s + center.x; + this.y = x * s + y * c + center.y; + + return this; + + } + + random() { + + this.x = Math.random(); + this.y = Math.random(); + + return this; + + } + + } + + class Matrix3 { + + constructor() { + + Object.defineProperty( this, 'isMatrix3', { value: true } ); + + this.elements = [ + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); + + } + + } + + set( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { + + const te = this.elements; + + te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; + te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; + te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; + + return this; + + } + + identity() { + + this.set( + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ); + + return this; + + } + + clone() { + + return new this.constructor().fromArray( this.elements ); + + } + + copy( m ) { + + const te = this.elements; + const me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; + te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; + te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; + + return this; + + } + + extractBasis( xAxis, yAxis, zAxis ) { + + xAxis.setFromMatrix3Column( this, 0 ); + yAxis.setFromMatrix3Column( this, 1 ); + zAxis.setFromMatrix3Column( this, 2 ); + + return this; + + } + + setFromMatrix4( m ) { + + const me = m.elements; + + this.set( + + me[ 0 ], me[ 4 ], me[ 8 ], + me[ 1 ], me[ 5 ], me[ 9 ], + me[ 2 ], me[ 6 ], me[ 10 ] + + ); + + return this; + + } + + multiply( m ) { + + return this.multiplyMatrices( this, m ); + + } + + premultiply( m ) { + + return this.multiplyMatrices( m, this ); + + } + + multiplyMatrices( a, b ) { + + const ae = a.elements; + const be = b.elements; + const te = this.elements; + + const a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ]; + const a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ]; + const a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ]; + + const b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ]; + const b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ]; + const b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31; + te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32; + te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31; + te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32; + te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31; + te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32; + te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33; + + return this; + + } + + multiplyScalar( s ) { + + const te = this.elements; + + te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; + te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; + te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; + + return this; + + } + + determinant() { + + const te = this.elements; + + const a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], + d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], + g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; + + return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; + + } + + invert() { + + const te = this.elements, + + n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], + n12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ], + n13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ], + + t11 = n33 * n22 - n32 * n23, + t12 = n32 * n13 - n33 * n12, + t13 = n23 * n12 - n22 * n13, + + det = n11 * t11 + n21 * t12 + n31 * t13; + + if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 ); + + const detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; + te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; + + te[ 3 ] = t12 * detInv; + te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; + te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; + + te[ 6 ] = t13 * detInv; + te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; + te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; + + return this; + + } + + transpose() { + + let tmp; + const m = this.elements; + + tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; + tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; + tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; + + return this; + + } + + getNormalMatrix( matrix4 ) { + + return this.setFromMatrix4( matrix4 ).copy( this ).invert().transpose(); + + } + + transposeIntoArray( r ) { + + const m = this.elements; + + r[ 0 ] = m[ 0 ]; + r[ 1 ] = m[ 3 ]; + r[ 2 ] = m[ 6 ]; + r[ 3 ] = m[ 1 ]; + r[ 4 ] = m[ 4 ]; + r[ 5 ] = m[ 7 ]; + r[ 6 ] = m[ 2 ]; + r[ 7 ] = m[ 5 ]; + r[ 8 ] = m[ 8 ]; + + return this; + + } + + setUvTransform( tx, ty, sx, sy, rotation, cx, cy ) { + + const c = Math.cos( rotation ); + const s = Math.sin( rotation ); + + this.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 + ); + + return this; + + } + + scale( sx, sy ) { + + const te = this.elements; + + te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx; + te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy; + + return this; + + } + + rotate( theta ) { + + const c = Math.cos( theta ); + const s = Math.sin( theta ); + + const te = this.elements; + + const a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ]; + const a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ]; + + te[ 0 ] = c * a11 + s * a21; + te[ 3 ] = c * a12 + s * a22; + te[ 6 ] = c * a13 + s * a23; + + te[ 1 ] = - s * a11 + c * a21; + te[ 4 ] = - s * a12 + c * a22; + te[ 7 ] = - s * a13 + c * a23; + + return this; + + } + + translate( tx, ty ) { + + const te = this.elements; + + te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ]; + te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ]; + + return this; + + } + + equals( matrix ) { + + const te = this.elements; + const me = matrix.elements; + + for ( let i = 0; i < 9; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + } + + fromArray( array, offset = 0 ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + } + + toArray( array = [], offset = 0 ) { + + const te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + + array[ offset + 3 ] = te[ 3 ]; + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + array[ offset + 8 ] = te[ 8 ]; + + return array; + + } + + } + + let _canvas; + + const ImageUtils = { + + getDataURL: function ( image ) { + + if ( /^data:/i.test( image.src ) ) { + + return image.src; + + } + + if ( typeof HTMLCanvasElement == 'undefined' ) { + + return image.src; + + } + + let canvas; + + if ( image instanceof HTMLCanvasElement ) { + + canvas = image; + + } else { + + if ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + + _canvas.width = image.width; + _canvas.height = image.height; + + const context = _canvas.getContext( '2d' ); + + if ( image instanceof ImageData ) { + + context.putImageData( image, 0, 0 ); + + } else { + + context.drawImage( image, 0, 0, image.width, image.height ); + + } + + canvas = _canvas; + + } + + if ( canvas.width > 2048 || canvas.height > 2048 ) { + + return canvas.toDataURL( 'image/jpeg', 0.6 ); + + } else { + + return canvas.toDataURL( 'image/png' ); + + } + + } + + }; + + let textureId = 0; + + function 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 ) { + + Object.defineProperty( this, 'id', { value: textureId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + + this.image = image; + this.mipmaps = []; + + this.mapping = mapping; + + this.wrapS = wrapS; + this.wrapT = wrapT; + + this.magFilter = magFilter; + this.minFilter = minFilter; + + this.anisotropy = anisotropy; + + this.format = format; + this.internalFormat = null; + this.type = type; + + this.offset = new Vector2( 0, 0 ); + this.repeat = new Vector2( 1, 1 ); + this.center = new Vector2( 0, 0 ); + this.rotation = 0; + + this.matrixAutoUpdate = true; + this.matrix = new Matrix3(); + + this.generateMipmaps = true; + this.premultiplyAlpha = false; + this.flipY = true; + this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) + + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. + // + // Also changing the encoding after already used by a Material will not automatically make the Material + // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. + this.encoding = encoding; + + this.version = 0; + this.onUpdate = null; + + } + + Texture.DEFAULT_IMAGE = undefined; + Texture.DEFAULT_MAPPING = UVMapping; + + Texture.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { + + constructor: Texture, + + isTexture: true, + + updateMatrix: function () { + + this.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.image = source.image; + this.mipmaps = source.mipmaps.slice( 0 ); + + this.mapping = source.mapping; + + this.wrapS = source.wrapS; + this.wrapT = source.wrapT; + + this.magFilter = source.magFilter; + this.minFilter = source.minFilter; + + this.anisotropy = source.anisotropy; + + this.format = source.format; + this.internalFormat = source.internalFormat; + this.type = source.type; + + this.offset.copy( source.offset ); + this.repeat.copy( source.repeat ); + this.center.copy( source.center ); + this.rotation = source.rotation; + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrix.copy( source.matrix ); + + this.generateMipmaps = source.generateMipmaps; + this.premultiplyAlpha = source.premultiplyAlpha; + this.flipY = source.flipY; + this.unpackAlignment = source.unpackAlignment; + this.encoding = source.encoding; + + return this; + + }, + + toJSON: function ( meta ) { + + const isRootObject = ( meta === undefined || typeof meta === 'string' ); + + if ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) { + + return meta.textures[ this.uuid ]; + + } + + const output = { + + metadata: { + version: 4.5, + type: 'Texture', + generator: 'Texture.toJSON' + }, + + uuid: this.uuid, + name: this.name, + + mapping: this.mapping, + + repeat: [ this.repeat.x, this.repeat.y ], + offset: [ this.offset.x, this.offset.y ], + center: [ this.center.x, this.center.y ], + rotation: this.rotation, + + wrap: [ this.wrapS, this.wrapT ], + + format: this.format, + type: this.type, + encoding: this.encoding, + + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + + flipY: this.flipY, + + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + + }; + + if ( this.image !== undefined ) { + + // TODO: Move to THREE.Image + + const image = this.image; + + if ( image.uuid === undefined ) { + + image.uuid = MathUtils.generateUUID(); // UGH + + } + + if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { + + let url; + + if ( Array.isArray( image ) ) { + + // process array of images e.g. CubeTexture + + url = []; + + for ( let i = 0, l = image.length; i < l; i ++ ) { + + // check cube texture with data textures + + if ( image[ i ].isDataTexture ) { + + url.push( serializeImage( image[ i ].image ) ); + + } else { + + url.push( serializeImage( image[ i ] ) ); + + } + + } + + } else { + + // process single image + + url = serializeImage( image ); + + } + + meta.images[ image.uuid ] = { + uuid: image.uuid, + url: url + }; + + } + + output.image = image.uuid; + + } + + if ( ! isRootObject ) { + + meta.textures[ this.uuid ] = output; + + } + + return output; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + }, + + transformUv: function ( uv ) { + + if ( this.mapping !== UVMapping ) return uv; + + uv.applyMatrix3( this.matrix ); + + if ( uv.x < 0 || uv.x > 1 ) { + + switch ( this.wrapS ) { + + case RepeatWrapping: + + uv.x = uv.x - Math.floor( uv.x ); + break; + + case ClampToEdgeWrapping: + + uv.x = uv.x < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { + + uv.x = Math.ceil( uv.x ) - uv.x; + + } else { + + uv.x = uv.x - Math.floor( uv.x ); + + } + + break; + + } + + } + + if ( uv.y < 0 || uv.y > 1 ) { + + switch ( this.wrapT ) { + + case RepeatWrapping: + + uv.y = uv.y - Math.floor( uv.y ); + break; + + case ClampToEdgeWrapping: + + uv.y = uv.y < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { + + uv.y = Math.ceil( uv.y ) - uv.y; + + } else { + + uv.y = uv.y - Math.floor( uv.y ); + + } + + break; + + } + + } + + if ( this.flipY ) { + + uv.y = 1 - uv.y; + + } + + return uv; + + } + + } ); + + Object.defineProperty( Texture.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + function serializeImage( image ) { + + if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || + ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || + ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { + + // default images + + return ImageUtils.getDataURL( image ); + + } else { + + if ( image.data ) { + + // images of DataTexture + + return { + data: Array.prototype.slice.call( image.data ), + width: image.width, + height: image.height, + type: image.data.constructor.name + }; + + } else { + + console.warn( 'THREE.Texture: Unable to serialize Texture.' ); + return {}; + + } + + } + + } + + class Vector4 { + + constructor( x = 0, y = 0, z = 0, w = 1 ) { + + Object.defineProperty( this, 'isVector4', { value: true } ); + + this.x = x; + this.y = y; + this.z = z; + this.w = w; + + } + + get width() { + + return this.z; + + } + + set width( value ) { + + this.z = value; + + } + + get height() { + + return this.w; + + } + + set height( value ) { + + this.w = value; + + } + + set( x, y, z, w ) { + + this.x = x; + this.y = y; + this.z = z; + this.w = w; + + return this; + + } + + setScalar( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + this.w = scalar; + + return this; + + } + + setX( x ) { + + this.x = x; + + return this; + + } + + setY( y ) { + + this.y = y; + + return this; + + } + + setZ( z ) { + + this.z = z; + + return this; + + } + + setW( w ) { + + this.w = w; + + return this; + + } + + setComponent( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + case 3: this.w = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + } + + getComponent( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + case 3: return this.w; + default: throw new Error( 'index is out of range: ' + index ); + + } + + } + + clone() { + + return new this.constructor( this.x, this.y, this.z, this.w ); + + } + + copy( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + this.w = ( v.w !== undefined ) ? v.w : 1; + + return this; + + } + + add( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + this.w += v.w; + + return this; + + } + + addScalar( s ) { + + this.x += s; + this.y += s; + this.z += s; + this.w += s; + + return this; + + } + + addVectors( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + this.w = a.w + b.w; + + return this; + + } + + addScaledVector( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + this.w += v.w * s; + + return this; + + } + + sub( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + this.w -= v.w; + + return this; + + } + + subScalar( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + this.w -= s; + + return this; + + } + + subVectors( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + this.w = a.w - b.w; + + return this; + + } + + multiplyScalar( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + this.w *= scalar; + + return this; + + } + + applyMatrix4( m ) { + + const x = this.x, y = this.y, z = this.z, w = this.w; + const e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; + this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; + + return this; + + } + + divideScalar( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + setAxisAngleFromQuaternion( q ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm + + // q is assumed to be normalized + + this.w = 2 * Math.acos( q.w ); + + const s = Math.sqrt( 1 - q.w * q.w ); + + if ( s < 0.0001 ) { + + this.x = 1; + this.y = 0; + this.z = 0; + + } else { + + this.x = q.x / s; + this.y = q.y / s; + this.z = q.z / s; + + } + + return this; + + } + + setAxisAngleFromRotationMatrix( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + let angle, x, y, z; // variables for result + const epsilon = 0.01, // margin to allow for rounding errors + epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees + + te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + if ( ( Math.abs( m12 - m21 ) < epsilon ) && + ( Math.abs( m13 - m31 ) < epsilon ) && + ( Math.abs( m23 - m32 ) < epsilon ) ) { + + // singularity found + // first check for identity matrix which must have +1 for all terms + // in leading diagonal and zero in other terms + + if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && + ( Math.abs( m13 + m31 ) < epsilon2 ) && + ( Math.abs( m23 + m32 ) < epsilon2 ) && + ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { + + // this singularity is identity matrix so angle = 0 + + this.set( 1, 0, 0, 0 ); + + return this; // zero angle, arbitrary axis + + } + + // otherwise this singularity is angle = 180 + + angle = Math.PI; + + const xx = ( m11 + 1 ) / 2; + const yy = ( m22 + 1 ) / 2; + const zz = ( m33 + 1 ) / 2; + const xy = ( m12 + m21 ) / 4; + const xz = ( m13 + m31 ) / 4; + const yz = ( m23 + m32 ) / 4; + + if ( ( xx > yy ) && ( xx > zz ) ) { + + // m11 is the largest diagonal term + + if ( xx < epsilon ) { + + x = 0; + y = 0.707106781; + z = 0.707106781; + + } else { + + x = Math.sqrt( xx ); + y = xy / x; + z = xz / x; + + } + + } else if ( yy > zz ) { + + // m22 is the largest diagonal term + + if ( yy < epsilon ) { + + x = 0.707106781; + y = 0; + z = 0.707106781; + + } else { + + y = Math.sqrt( yy ); + x = xy / y; + z = yz / y; + + } + + } else { + + // m33 is the largest diagonal term so base result on this + + if ( zz < epsilon ) { + + x = 0.707106781; + y = 0.707106781; + z = 0; + + } else { + + z = Math.sqrt( zz ); + x = xz / z; + y = yz / z; + + } + + } + + this.set( x, y, z, angle ); + + return this; // return 180 deg rotation + + } + + // as we have reached here there are no singularities so we can handle normally + + let s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + + ( m13 - m31 ) * ( m13 - m31 ) + + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize + + if ( Math.abs( s ) < 0.001 ) s = 1; + + // prevent divide by zero, should not happen if matrix is orthogonal and should be + // caught by singularity test above, but I've left it in just in case + + this.x = ( m32 - m23 ) / s; + this.y = ( m13 - m31 ) / s; + this.z = ( m21 - m12 ) / s; + this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); + + return this; + + } + + min( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + this.w = Math.min( this.w, v.w ); + + return this; + + } + + max( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + this.w = Math.max( this.w, v.w ); + + return this; + + } + + clamp( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + this.w = Math.max( min.w, Math.min( max.w, this.w ) ); + + return this; + + } + + clampScalar( minVal, maxVal ) { + + this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); + this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); + this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); + this.w = Math.max( minVal, Math.min( maxVal, this.w ) ); + + return this; + + } + + clampLength( min, max ) { + + const length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + } + + floor() { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + this.w = Math.floor( this.w ); + + return this; + + } + + ceil() { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + this.w = Math.ceil( this.w ); + + return this; + + } + + round() { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + this.w = Math.round( this.w ); + + return this; + + } + + roundToZero() { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); + + return this; + + } + + negate() { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + this.w = - this.w; + + return this; + + } + + dot( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; + + } + + lengthSq() { + + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; + + } + + length() { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); + + } + + manhattanLength() { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); + + } + + normalize() { + + return this.divideScalar( this.length() || 1 ); + + } + + setLength( length ) { + + return this.normalize().multiplyScalar( length ); + + } + + lerp( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + this.w += ( v.w - this.w ) * alpha; + + return this; + + } + + lerpVectors( v1, v2, alpha ) { + + this.x = v1.x + ( v2.x - v1.x ) * alpha; + this.y = v1.y + ( v2.y - v1.y ) * alpha; + this.z = v1.z + ( v2.z - v1.z ) * alpha; + this.w = v1.w + ( v2.w - v1.w ) * alpha; + + return this; + + } + + equals( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); + + } + + fromArray( array, offset = 0 ) { + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + this.w = array[ offset + 3 ]; + + return this; + + } + + toArray( array = [], offset = 0 ) { + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + array[ offset + 3 ] = this.w; + + return array; + + } + + fromBufferAttribute( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + this.w = attribute.getW( index ); + + return this; + + } + + random() { + + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + this.w = Math.random(); + + return this; + + } + + } + + /* + In options, we can specify: + * Texture parameters for an auto-generated target texture + * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers + */ + function WebGLRenderTarget( width, height, options ) { + + this.width = width; + this.height = height; + + this.scissor = new Vector4( 0, 0, width, height ); + this.scissorTest = false; + + this.viewport = new Vector4( 0, 0, width, height ); + + options = options || {}; + + this.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.texture.image = {}; + this.texture.image.width = width; + this.texture.image.height = height; + + this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; + this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; + + this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; + this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; + this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; + + } + + WebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { + + constructor: WebGLRenderTarget, + + isWebGLRenderTarget: true, + + setSize: function ( width, height ) { + + if ( this.width !== width || this.height !== height ) { + + this.width = width; + this.height = height; + + this.texture.image.width = width; + this.texture.image.height = height; + + this.dispose(); + + } + + this.viewport.set( 0, 0, width, height ); + this.scissor.set( 0, 0, width, height ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.width = source.width; + this.height = source.height; + + this.viewport.copy( source.viewport ); + + this.texture = source.texture.clone(); + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + function WebGLMultisampleRenderTarget( width, height, options ) { + + WebGLRenderTarget.call( this, width, height, options ); + + this.samples = 4; + + } + + WebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), { + + constructor: WebGLMultisampleRenderTarget, + + isWebGLMultisampleRenderTarget: true, + + copy: function ( source ) { + + WebGLRenderTarget.prototype.copy.call( this, source ); + + this.samples = source.samples; + + return this; + + } + + } ); + + class Quaternion { + + constructor( x = 0, y = 0, z = 0, w = 1 ) { + + Object.defineProperty( this, 'isQuaternion', { value: true } ); + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + } + + static slerp( qa, qb, qm, t ) { + + return qm.copy( qa ).slerp( qb, t ); + + } + + static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { + + // fuzz-free, array-based Quaternion SLERP operation + + let x0 = src0[ srcOffset0 + 0 ], + y0 = src0[ srcOffset0 + 1 ], + z0 = src0[ srcOffset0 + 2 ], + w0 = src0[ srcOffset0 + 3 ]; + + const x1 = src1[ srcOffset1 + 0 ], + y1 = src1[ srcOffset1 + 1 ], + z1 = src1[ srcOffset1 + 2 ], + w1 = src1[ srcOffset1 + 3 ]; + + if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { + + let s = 1 - t; + const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, + dir = ( cos >= 0 ? 1 : - 1 ), + sqrSin = 1 - cos * cos; + + // Skip the Slerp for tiny steps to avoid numeric problems: + if ( sqrSin > Number.EPSILON ) { + + const sin = Math.sqrt( sqrSin ), + len = Math.atan2( sin, cos * dir ); + + s = Math.sin( s * len ) / sin; + t = Math.sin( t * len ) / sin; + + } + + const tDir = t * dir; + + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + + // Normalize in case we just did a lerp: + if ( s === 1 - t ) { + + const f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); + + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + + } + + } + + dst[ dstOffset ] = x0; + dst[ dstOffset + 1 ] = y0; + dst[ dstOffset + 2 ] = z0; + dst[ dstOffset + 3 ] = w0; + + } + + static multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) { + + const x0 = src0[ srcOffset0 ]; + const y0 = src0[ srcOffset0 + 1 ]; + const z0 = src0[ srcOffset0 + 2 ]; + const w0 = src0[ srcOffset0 + 3 ]; + + const x1 = src1[ srcOffset1 ]; + const y1 = src1[ srcOffset1 + 1 ]; + const z1 = src1[ srcOffset1 + 2 ]; + const w1 = src1[ srcOffset1 + 3 ]; + + dst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; + dst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; + dst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; + dst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; + + return dst; + + } + + get x() { + + return this._x; + + } + + set x( value ) { + + this._x = value; + this._onChangeCallback(); + + } + + get y() { + + return this._y; + + } + + set y( value ) { + + this._y = value; + this._onChangeCallback(); + + } + + get z() { + + return this._z; + + } + + set z( value ) { + + this._z = value; + this._onChangeCallback(); + + } + + get w() { + + return this._w; + + } + + set w( value ) { + + this._w = value; + this._onChangeCallback(); + + } + + set( x, y, z, w ) { + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + this._onChangeCallback(); + + return this; + + } + + clone() { + + return new this.constructor( this._x, this._y, this._z, this._w ); + + } + + copy( quaternion ) { + + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + + this._onChangeCallback(); + + return this; + + } + + setFromEuler( euler, update ) { + + if ( ! ( euler && euler.isEuler ) ) { + + throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + const x = euler._x, y = euler._y, z = euler._z, order = euler._order; + + // http://www.mathworks.com/matlabcentral/fileexchange/ + // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ + // content/SpinCalc.m + + const cos = Math.cos; + const sin = Math.sin; + + const c1 = cos( x / 2 ); + const c2 = cos( y / 2 ); + const c3 = cos( z / 2 ); + + const s1 = sin( x / 2 ); + const s2 = sin( y / 2 ); + const s3 = sin( z / 2 ); + + switch ( order ) { + + case 'XYZ': + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + + case 'YXZ': + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + + case 'ZXY': + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + + case 'ZYX': + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + + case 'YZX': + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + + case 'XZY': + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + + default: + console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order ); + + } + + if ( update !== false ) this._onChangeCallback(); + + return this; + + } + + setFromAxisAngle( axis, angle ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm + + // assumes axis is normalized + + const halfAngle = angle / 2, s = Math.sin( halfAngle ); + + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos( halfAngle ); + + this._onChangeCallback(); + + return this; + + } + + setFromRotationMatrix( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + const te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], + + trace = m11 + m22 + m33; + + if ( trace > 0 ) { + + const s = 0.5 / Math.sqrt( trace + 1.0 ); + + this._w = 0.25 / s; + this._x = ( m32 - m23 ) * s; + this._y = ( m13 - m31 ) * s; + this._z = ( m21 - m12 ) * s; + + } else if ( m11 > m22 && m11 > m33 ) { + + const s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); + + this._w = ( m32 - m23 ) / s; + this._x = 0.25 * s; + this._y = ( m12 + m21 ) / s; + this._z = ( m13 + m31 ) / s; + + } else if ( m22 > m33 ) { + + const s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); + + this._w = ( m13 - m31 ) / s; + this._x = ( m12 + m21 ) / s; + this._y = 0.25 * s; + this._z = ( m23 + m32 ) / s; + + } else { + + const s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); + + this._w = ( m21 - m12 ) / s; + this._x = ( m13 + m31 ) / s; + this._y = ( m23 + m32 ) / s; + this._z = 0.25 * s; + + } + + this._onChangeCallback(); + + return this; + + } + + setFromUnitVectors( vFrom, vTo ) { + + // assumes direction vectors vFrom and vTo are normalized + + const EPS = 0.000001; + + let r = vFrom.dot( vTo ) + 1; + + if ( r < EPS ) { + + r = 0; + + if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { + + this._x = - vFrom.y; + this._y = vFrom.x; + this._z = 0; + this._w = r; + + } else { + + this._x = 0; + this._y = - vFrom.z; + this._z = vFrom.y; + this._w = r; + + } + + } else { + + // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3 + + this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; + this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; + this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; + this._w = r; + + } + + return this.normalize(); + + } + + angleTo( q ) { + + return 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) ); + + } + + rotateTowards( q, step ) { + + const angle = this.angleTo( q ); + + if ( angle === 0 ) return this; + + const t = Math.min( 1, step / angle ); + + this.slerp( q, t ); + + return this; + + } + + identity() { + + return this.set( 0, 0, 0, 1 ); + + } + + invert() { + + // quaternion is assumed to have unit length + + return this.conjugate(); + + } + + conjugate() { + + this._x *= - 1; + this._y *= - 1; + this._z *= - 1; + + this._onChangeCallback(); + + return this; + + } + + dot( v ) { + + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + + } + + lengthSq() { + + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + + } + + length() { + + return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); + + } + + normalize() { + + let l = this.length(); + + if ( l === 0 ) { + + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + + } else { + + l = 1 / l; + + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + + } + + this._onChangeCallback(); + + return this; + + } + + multiply( q, p ) { + + if ( p !== undefined ) { + + console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); + return this.multiplyQuaternions( q, p ); + + } + + return this.multiplyQuaternions( this, q ); + + } + + premultiply( q ) { + + return this.multiplyQuaternions( q, this ); + + } + + multiplyQuaternions( a, b ) { + + // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm + + const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + + this._onChangeCallback(); + + return this; + + } + + slerp( qb, t ) { + + if ( t === 0 ) return this; + if ( t === 1 ) return this.copy( qb ); + + const x = this._x, y = this._y, z = this._z, w = this._w; + + // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ + + let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; + + if ( cosHalfTheta < 0 ) { + + this._w = - qb._w; + this._x = - qb._x; + this._y = - qb._y; + this._z = - qb._z; + + cosHalfTheta = - cosHalfTheta; + + } else { + + this.copy( qb ); + + } + + if ( cosHalfTheta >= 1.0 ) { + + this._w = w; + this._x = x; + this._y = y; + this._z = z; + + return this; + + } + + const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta; + + if ( sqrSinHalfTheta <= Number.EPSILON ) { + + const s = 1 - t; + this._w = s * w + t * this._w; + this._x = s * x + t * this._x; + this._y = s * y + t * this._y; + this._z = s * z + t * this._z; + + this.normalize(); + this._onChangeCallback(); + + return this; + + } + + const sinHalfTheta = Math.sqrt( sqrSinHalfTheta ); + const halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); + const ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, + ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; + + this._w = ( w * ratioA + this._w * ratioB ); + this._x = ( x * ratioA + this._x * ratioB ); + this._y = ( y * ratioA + this._y * ratioB ); + this._z = ( z * ratioA + this._z * ratioB ); + + this._onChangeCallback(); + + return this; + + } + + equals( quaternion ) { + + return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); + + } + + fromArray( array, offset = 0 ) { + + this._x = array[ offset ]; + this._y = array[ offset + 1 ]; + this._z = array[ offset + 2 ]; + this._w = array[ offset + 3 ]; + + this._onChangeCallback(); + + return this; + + } + + toArray( array = [], offset = 0 ) { + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._w; + + return array; + + } + + fromBufferAttribute( attribute, index ) { + + this._x = attribute.getX( index ); + this._y = attribute.getY( index ); + this._z = attribute.getZ( index ); + this._w = attribute.getW( index ); + + return this; + + } + + _onChange( callback ) { + + this._onChangeCallback = callback; + + return this; + + } + + _onChangeCallback() {} + + } + + class Vector3 { + + constructor( x = 0, y = 0, z = 0 ) { + + Object.defineProperty( this, 'isVector3', { value: true } ); + + this.x = x; + this.y = y; + this.z = z; + + } + + set( x, y, z ) { + + if ( z === undefined ) z = this.z; // sprite.scale.set(x,y) + + this.x = x; + this.y = y; + this.z = z; + + return this; + + } + + setScalar( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + + return this; + + } + + setX( x ) { + + this.x = x; + + return this; + + } + + setY( y ) { + + this.y = y; + + return this; + + } + + setZ( z ) { + + this.z = z; + + return this; + + } + + setComponent( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + } + + getComponent( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + default: throw new Error( 'index is out of range: ' + index ); + + } + + } + + clone() { + + return new this.constructor( this.x, this.y, this.z ); + + } + + copy( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + + return this; + + } + + add( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + + return this; + + } + + addScalar( s ) { + + this.x += s; + this.y += s; + this.z += s; + + return this; + + } + + addVectors( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + + return this; + + } + + addScaledVector( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + + return this; + + } + + sub( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + + return this; + + } + + subScalar( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + + return this; + + } + + subVectors( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + + return this; + + } + + multiply( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); + return this.multiplyVectors( v, w ); + + } + + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + + return this; + + } + + multiplyScalar( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + + return this; + + } + + multiplyVectors( a, b ) { + + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + + return this; + + } + + applyEuler( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + return this.applyQuaternion( _quaternion.setFromEuler( euler ) ); + + } + + applyAxisAngle( axis, angle ) { + + return this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) ); + + } + + applyMatrix3( m ) { + + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; + this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; + + return this; + + } + + applyNormalMatrix( m ) { + + return this.applyMatrix3( m ).normalize(); + + } + + applyMatrix4( m ) { + + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + + const w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); + + this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w; + this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w; + this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w; + + return this; + + } + + applyQuaternion( q ) { + + const x = this.x, y = this.y, z = this.z; + const qx = q.x, qy = q.y, qz = q.z, qw = q.w; + + // calculate quat * vector + + const ix = qw * x + qy * z - qz * y; + const iy = qw * y + qz * x - qx * z; + const iz = qw * z + qx * y - qy * x; + const iw = - qx * x - qy * y - qz * z; + + // calculate result * inverse quat + + this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; + this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; + this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; + + return this; + + } + + project( camera ) { + + return this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix ); + + } + + unproject( camera ) { + + return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld ); + + } + + transformDirection( m ) { + + // input: THREE.Matrix4 affine matrix + // vector interpreted as a direction + + const x = this.x, y = this.y, z = this.z; + const e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; + + return this.normalize(); + + } + + divide( v ) { + + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + + return this; + + } + + divideScalar( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + } + + min( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + + return this; + + } + + max( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + + return this; + + } + + clamp( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + + return this; + + } + + clampScalar( minVal, maxVal ) { + + this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); + this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); + this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); + + return this; + + } + + clampLength( min, max ) { + + const length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + } + + floor() { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + + return this; + + } + + ceil() { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + + return this; + + } + + round() { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + + return this; + + } + + roundToZero() { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + + return this; + + } + + negate() { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + + return this; + + } + + dot( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z; + + } + + // TODO lengthSquared? + + lengthSq() { + + return this.x * this.x + this.y * this.y + this.z * this.z; + + } + + length() { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); + + } + + manhattanLength() { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); + + } + + normalize() { + + return this.divideScalar( this.length() || 1 ); + + } + + setLength( length ) { + + return this.normalize().multiplyScalar( length ); + + } + + lerp( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + + return this; + + } + + lerpVectors( v1, v2, alpha ) { + + this.x = v1.x + ( v2.x - v1.x ) * alpha; + this.y = v1.y + ( v2.y - v1.y ) * alpha; + this.z = v1.z + ( v2.z - v1.z ) * alpha; + + return this; + + } + + cross( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); + return this.crossVectors( v, w ); + + } + + return this.crossVectors( this, v ); + + } + + crossVectors( a, b ) { + + const ax = a.x, ay = a.y, az = a.z; + const bx = b.x, by = b.y, bz = b.z; + + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + + return this; + + } + + projectOnVector( v ) { + + const denominator = v.lengthSq(); + + if ( denominator === 0 ) return this.set( 0, 0, 0 ); + + const scalar = v.dot( this ) / denominator; + + return this.copy( v ).multiplyScalar( scalar ); + + } + + projectOnPlane( planeNormal ) { + + _vector.copy( this ).projectOnVector( planeNormal ); + + return this.sub( _vector ); + + } + + reflect( normal ) { + + // reflect incident vector off plane orthogonal to normal + // normal is assumed to have unit length + + return this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); + + } + + angleTo( v ) { + + const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() ); + + if ( denominator === 0 ) return Math.PI / 2; + + const theta = this.dot( v ) / denominator; + + // clamp, to handle numerical problems + + return Math.acos( MathUtils.clamp( theta, - 1, 1 ) ); + + } + + distanceTo( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + } + + distanceToSquared( v ) { + + const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + + return dx * dx + dy * dy + dz * dz; + + } + + manhattanDistanceTo( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); + + } + + setFromSpherical( s ) { + + return this.setFromSphericalCoords( s.radius, s.phi, s.theta ); + + } + + setFromSphericalCoords( radius, phi, theta ) { + + const sinPhiRadius = Math.sin( phi ) * radius; + + this.x = sinPhiRadius * Math.sin( theta ); + this.y = Math.cos( phi ) * radius; + this.z = sinPhiRadius * Math.cos( theta ); + + return this; + + } + + setFromCylindrical( c ) { + + return this.setFromCylindricalCoords( c.radius, c.theta, c.y ); + + } + + setFromCylindricalCoords( radius, theta, y ) { + + this.x = radius * Math.sin( theta ); + this.y = y; + this.z = radius * Math.cos( theta ); + + return this; + + } + + setFromMatrixPosition( m ) { + + const e = m.elements; + + this.x = e[ 12 ]; + this.y = e[ 13 ]; + this.z = e[ 14 ]; + + return this; + + } + + setFromMatrixScale( m ) { + + const sx = this.setFromMatrixColumn( m, 0 ).length(); + const sy = this.setFromMatrixColumn( m, 1 ).length(); + const sz = this.setFromMatrixColumn( m, 2 ).length(); + + this.x = sx; + this.y = sy; + this.z = sz; + + return this; + + } + + setFromMatrixColumn( m, index ) { + + return this.fromArray( m.elements, index * 4 ); + + } + + setFromMatrix3Column( m, index ) { + + return this.fromArray( m.elements, index * 3 ); + + } + + equals( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); + + } + + fromArray( array, offset = 0 ) { + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + + return this; + + } + + toArray( array = [], offset = 0 ) { + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + + return array; + + } + + fromBufferAttribute( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + + return this; + + } + + random() { + + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + + return this; + + } + + } + + const _vector = /*@__PURE__*/ new Vector3(); + const _quaternion = /*@__PURE__*/ new Quaternion(); + + class Box3 { + + constructor( min, max ) { + + Object.defineProperty( this, 'isBox3', { value: true } ); + + this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); + + } + + set( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + } + + setFromArray( array ) { + + let minX = + Infinity; + let minY = + Infinity; + let minZ = + Infinity; + + let maxX = - Infinity; + let maxY = - Infinity; + let maxZ = - Infinity; + + for ( let i = 0, l = array.length; i < l; i += 3 ) { + + const x = array[ i ]; + const y = array[ i + 1 ]; + const z = array[ i + 2 ]; + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + } + + setFromBufferAttribute( attribute ) { + + let minX = + Infinity; + let minY = + Infinity; + let minZ = + Infinity; + + let maxX = - Infinity; + let maxY = - Infinity; + let maxZ = - Infinity; + + for ( let i = 0, l = attribute.count; i < l; i ++ ) { + + const x = attribute.getX( i ); + const y = attribute.getY( i ); + const z = attribute.getZ( i ); + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + } + + setFromPoints( points ) { + + this.makeEmpty(); + + for ( let i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + } + + setFromCenterAndSize( center, size ) { + + const halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 ); + + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + } + + setFromObject( object ) { + + this.makeEmpty(); + + return this.expandByObject( object ); + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + } + + makeEmpty() { + + this.min.x = this.min.y = this.min.z = + Infinity; + this.max.x = this.max.y = this.max.z = - Infinity; + + return this; + + } + + isEmpty() { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); + + } + + getCenter( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getCenter() target is now required' ); + target = new Vector3(); + + } + + return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + } + + getSize( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getSize() target is now required' ); + target = new Vector3(); + + } + + return this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min ); + + } + + expandByPoint( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + } + + expandByVector( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + } + + expandByScalar( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + } + + expandByObject( object ) { + + // Computes the world-axis-aligned bounding box of an object (including its children), + // accounting for both the object's, and children's, world transforms + + object.updateWorldMatrix( false, false ); + + const geometry = object.geometry; + + if ( geometry !== undefined ) { + + if ( geometry.boundingBox === null ) { + + geometry.computeBoundingBox(); + + } + + _box.copy( geometry.boundingBox ); + _box.applyMatrix4( object.matrixWorld ); + + this.union( _box ); + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + this.expandByObject( children[ i ] ); + + } + + return this; + + } + + containsPoint( point ) { + + return 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; + + } + + containsBox( box ) { + + return 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; + + } + + getParameter( point, target ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getParameter() target is now required' ); + target = new Vector3(); + + } + + return 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 ) + ); + + } + + intersectsBox( box ) { + + // using 6 splitting planes to rule out intersections. + return 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; + + } + + intersectsSphere( sphere ) { + + // Find the point on the AABB closest to the sphere center. + this.clampPoint( sphere.center, _vector$1 ); + + // If that point is inside the sphere, the AABB and sphere intersect. + return _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); + + } + + intersectsPlane( plane ) { + + // We compute the minimum and maximum dot product values. If those values + // are on the same side (back or front) of the plane, then there is no intersection. + + let min, max; + + if ( plane.normal.x > 0 ) { + + min = plane.normal.x * this.min.x; + max = plane.normal.x * this.max.x; + + } else { + + min = plane.normal.x * this.max.x; + max = plane.normal.x * this.min.x; + + } + + if ( plane.normal.y > 0 ) { + + min += plane.normal.y * this.min.y; + max += plane.normal.y * this.max.y; + + } else { + + min += plane.normal.y * this.max.y; + max += plane.normal.y * this.min.y; + + } + + if ( plane.normal.z > 0 ) { + + min += plane.normal.z * this.min.z; + max += plane.normal.z * this.max.z; + + } else { + + min += plane.normal.z * this.max.z; + max += plane.normal.z * this.min.z; + + } + + return ( min <= - plane.constant && max >= - plane.constant ); + + } + + intersectsTriangle( triangle ) { + + if ( this.isEmpty() ) { + + return false; + + } + + // compute box center and extents + this.getCenter( _center ); + _extents.subVectors( this.max, _center ); + + // translate triangle to aabb origin + _v0.subVectors( triangle.a, _center ); + _v1.subVectors( triangle.b, _center ); + _v2.subVectors( triangle.c, _center ); + + // compute edge vectors for triangle + _f0.subVectors( _v1, _v0 ); + _f1.subVectors( _v2, _v1 ); + _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 + // 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 + // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned) + let 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 + ]; + if ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) { + + return false; + + } + + // test 3 face normals from the aabb + axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]; + if ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) { + + return false; + + } + + // finally testing the face normal of the triangle + // use already existing triangle edge vectors here + _triangleNormal.crossVectors( _f0, _f1 ); + axes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ]; + + return satForAxes( axes, _v0, _v1, _v2, _extents ); + + } + + clampPoint( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .clampPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( point ).clamp( this.min, this.max ); + + } + + distanceToPoint( point ) { + + const clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max ); + + return clampedPoint.sub( point ).length(); + + } + + getBoundingSphere( target ) { + + if ( target === undefined ) { + + console.error( 'THREE.Box3: .getBoundingSphere() target is now required' ); + //target = new Sphere(); // removed to avoid cyclic dependency + + } + + this.getCenter( target.center ); + + target.radius = this.getSize( _vector$1 ).length() * 0.5; + + return target; + + } + + intersect( box ) { + + this.min.max( box.min ); + this.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. + if ( this.isEmpty() ) this.makeEmpty(); + + return this; + + } + + union( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + } + + applyMatrix4( matrix ) { + + // transform of empty box is an empty box. + if ( this.isEmpty() ) return this; + + // NOTE: I am using a binary pattern to specify all 2^3 combinations below + _points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 + _points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 + _points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 + _points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 + _points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 + _points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 + _points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 + _points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 + + this.setFromPoints( _points ); + + return this; + + } + + translate( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + } + + equals( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + + } + + function satForAxes( axes, v0, v1, v2, extents ) { + + for ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) { + + _testAxis.fromArray( axes, i ); + // project the aabb onto the seperating axis + const 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 + const p0 = v0.dot( _testAxis ); + const p1 = v1.dot( _testAxis ); + const p2 = v2.dot( _testAxis ); + // actual test, basically see if either of the most extreme of the triangle points intersects r + if ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) { + + // points of the projected triangle are outside the projected half-length of the aabb + // the axis is seperating and we can exit + return false; + + } + + } + + return true; + + } + + const _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() + ]; + + const _vector$1 = /*@__PURE__*/ new Vector3(); + + const _box = /*@__PURE__*/ new Box3(); + + // triangle centered vertices + + const _v0 = /*@__PURE__*/ new Vector3(); + const _v1 = /*@__PURE__*/ new Vector3(); + const _v2 = /*@__PURE__*/ new Vector3(); + + // triangle edge vectors + + const _f0 = /*@__PURE__*/ new Vector3(); + const _f1 = /*@__PURE__*/ new Vector3(); + const _f2 = /*@__PURE__*/ new Vector3(); + + const _center = /*@__PURE__*/ new Vector3(); + const _extents = /*@__PURE__*/ new Vector3(); + const _triangleNormal = /*@__PURE__*/ new Vector3(); + const _testAxis = /*@__PURE__*/ new Vector3(); + + const _box$1 = /*@__PURE__*/ new Box3(); + + class Sphere { + + constructor( center, radius ) { + + this.center = ( center !== undefined ) ? center : new Vector3(); + this.radius = ( radius !== undefined ) ? radius : - 1; + + } + + set( center, radius ) { + + this.center.copy( center ); + this.radius = radius; + + return this; + + } + + setFromPoints( points, optionalCenter ) { + + const center = this.center; + + if ( optionalCenter !== undefined ) { + + center.copy( optionalCenter ); + + } else { + + _box$1.setFromPoints( points ).getCenter( center ); + + } + + let maxRadiusSq = 0; + + for ( let i = 0, il = points.length; i < il; i ++ ) { + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); + + } + + this.radius = Math.sqrt( maxRadiusSq ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( sphere ) { + + this.center.copy( sphere.center ); + this.radius = sphere.radius; + + return this; + + } + + isEmpty() { + + return ( this.radius < 0 ); + + } + + makeEmpty() { + + this.center.set( 0, 0, 0 ); + this.radius = - 1; + + return this; + + } + + containsPoint( point ) { + + return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); + + } + + distanceToPoint( point ) { + + return ( point.distanceTo( this.center ) - this.radius ); + + } + + intersectsSphere( sphere ) { + + const radiusSum = this.radius + sphere.radius; + + return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); + + } + + intersectsBox( box ) { + + return box.intersectsSphere( this ); + + } + + intersectsPlane( plane ) { + + return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; + + } + + clampPoint( point, target ) { + + const deltaLengthSq = this.center.distanceToSquared( point ); + + if ( target === undefined ) { + + console.warn( 'THREE.Sphere: .clampPoint() target is now required' ); + target = new Vector3(); + + } + + target.copy( point ); + + if ( deltaLengthSq > ( this.radius * this.radius ) ) { + + target.sub( this.center ).normalize(); + target.multiplyScalar( this.radius ).add( this.center ); + + } + + return target; + + } + + getBoundingBox( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Sphere: .getBoundingBox() target is now required' ); + target = new Box3(); + + } + + if ( this.isEmpty() ) { + + // Empty sphere produces empty bounding box + target.makeEmpty(); + return target; + + } + + target.set( this.center, this.center ); + target.expandByScalar( this.radius ); + + return target; + + } + + applyMatrix4( matrix ) { + + this.center.applyMatrix4( matrix ); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + + return this; + + } + + translate( offset ) { + + this.center.add( offset ); + + return this; + + } + + equals( sphere ) { + + return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); + + } + + } + + const _vector$2 = /*@__PURE__*/ new Vector3(); + const _segCenter = /*@__PURE__*/ new Vector3(); + const _segDir = /*@__PURE__*/ new Vector3(); + const _diff = /*@__PURE__*/ new Vector3(); + + const _edge1 = /*@__PURE__*/ new Vector3(); + const _edge2 = /*@__PURE__*/ new Vector3(); + const _normal = /*@__PURE__*/ new Vector3(); + + class Ray { + + constructor( origin, direction ) { + + this.origin = ( origin !== undefined ) ? origin : new Vector3(); + this.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 ); + + } + + set( origin, direction ) { + + this.origin.copy( origin ); + this.direction.copy( direction ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( ray ) { + + this.origin.copy( ray.origin ); + this.direction.copy( ray.direction ); + + return this; + + } + + at( t, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Ray: .at() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.direction ).multiplyScalar( t ).add( this.origin ); + + } + + lookAt( v ) { + + this.direction.copy( v ).sub( this.origin ).normalize(); + + return this; + + } + + recast( t ) { + + this.origin.copy( this.at( t, _vector$2 ) ); + + return this; + + } + + closestPointToPoint( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Ray: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + target.subVectors( point, this.origin ); + + const directionDistance = target.dot( this.direction ); + + if ( directionDistance < 0 ) { + + return target.copy( this.origin ); + + } + + return target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + } + + distanceToPoint( point ) { + + return Math.sqrt( this.distanceSqToPoint( point ) ); + + } + + distanceSqToPoint( point ) { + + const directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction ); + + // point behind the ray + + if ( directionDistance < 0 ) { + + return this.origin.distanceToSquared( point ); + + } + + _vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + return _vector$2.distanceToSquared( point ); + + } + + distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h + // It returns the min distance between the ray and the segment + // defined by v0 and v1 + // It can also set two optional targets : + // - The closest point on the ray + // - The closest point on the segment + + _segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); + _segDir.copy( v1 ).sub( v0 ).normalize(); + _diff.copy( this.origin ).sub( _segCenter ); + + const segExtent = v0.distanceTo( v1 ) * 0.5; + const a01 = - this.direction.dot( _segDir ); + const b0 = _diff.dot( this.direction ); + const b1 = - _diff.dot( _segDir ); + const c = _diff.lengthSq(); + const det = Math.abs( 1 - a01 * a01 ); + let s0, s1, sqrDist, extDet; + + if ( det > 0 ) { + + // The ray and segment are not parallel. + + s0 = a01 * b1 - b0; + s1 = a01 * b0 - b1; + extDet = segExtent * det; + + if ( s0 >= 0 ) { + + if ( s1 >= - extDet ) { + + if ( s1 <= extDet ) { + + // region 0 + // Minimum at interior points of ray and segment. + + const invDet = 1 / det; + s0 *= invDet; + s1 *= invDet; + sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; + + } else { + + // region 1 + + s1 = segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + // region 5 + + s1 = - segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + if ( s1 <= - extDet ) { + + // region 4 + + s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } else if ( s1 <= extDet ) { + + // region 3 + + s0 = 0; + s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = s1 * ( s1 + 2 * b1 ) + c; + + } else { + + // region 2 + + s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } + + } else { + + // Ray and segment are parallel. + + s1 = ( a01 > 0 ) ? - segExtent : segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + if ( optionalPointOnRay ) { + + optionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin ); + + } + + if ( optionalPointOnSegment ) { + + optionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter ); + + } + + return sqrDist; + + } + + intersectSphere( sphere, target ) { + + _vector$2.subVectors( sphere.center, this.origin ); + const tca = _vector$2.dot( this.direction ); + const d2 = _vector$2.dot( _vector$2 ) - tca * tca; + const radius2 = sphere.radius * sphere.radius; + + if ( d2 > radius2 ) return null; + + const thc = Math.sqrt( radius2 - d2 ); + + // t0 = first intersect point - entrance on front of sphere + const t0 = tca - thc; + + // t1 = second intersect point - exit point on back of sphere + const t1 = tca + thc; + + // test to see if both t0 and t1 are behind the ray - if so, return null + if ( t0 < 0 && t1 < 0 ) return null; + + // test to see if t0 is behind the ray: + // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, + // in order to always return an intersect point that is in front of the ray. + if ( t0 < 0 ) return this.at( t1, target ); + + // else t0 is in front of the ray, so return the first collision point scaled by t0 + return this.at( t0, target ); + + } + + intersectsSphere( sphere ) { + + return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius ); + + } + + distanceToPlane( plane ) { + + const denominator = plane.normal.dot( this.direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( plane.distanceToPoint( this.origin ) === 0 ) { + + return 0; + + } + + // Null is preferable to undefined since undefined means.... it is undefined + + return null; + + } + + const t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; + + // Return if the ray never intersects the plane + + return t >= 0 ? t : null; + + } + + intersectPlane( plane, target ) { + + const t = this.distanceToPlane( plane ); + + if ( t === null ) { + + return null; + + } + + return this.at( t, target ); + + } + + intersectsPlane( plane ) { + + // check if the ray lies on the plane first + + const distToPoint = plane.distanceToPoint( this.origin ); + + if ( distToPoint === 0 ) { + + return true; + + } + + const denominator = plane.normal.dot( this.direction ); + + if ( denominator * distToPoint < 0 ) { + + return true; + + } + + // ray origin is behind the plane (and is pointing behind it) + + return false; + + } + + intersectBox( box, target ) { + + let tmin, tmax, tymin, tymax, tzmin, tzmax; + + const invdirx = 1 / this.direction.x, + invdiry = 1 / this.direction.y, + invdirz = 1 / this.direction.z; + + const origin = this.origin; + + if ( invdirx >= 0 ) { + + tmin = ( box.min.x - origin.x ) * invdirx; + tmax = ( box.max.x - origin.x ) * invdirx; + + } else { + + tmin = ( box.max.x - origin.x ) * invdirx; + tmax = ( box.min.x - origin.x ) * invdirx; + + } + + if ( invdiry >= 0 ) { + + tymin = ( box.min.y - origin.y ) * invdiry; + tymax = ( box.max.y - origin.y ) * invdiry; + + } else { + + tymin = ( box.max.y - origin.y ) * invdiry; + tymax = ( box.min.y - origin.y ) * invdiry; + + } + + if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null; + + // These lines also handle the case where tmin or tmax is NaN + // (result of 0 * Infinity). x !== x returns true if x is NaN + + if ( tymin > tmin || tmin !== tmin ) tmin = tymin; + + if ( tymax < tmax || tmax !== tmax ) tmax = tymax; + + if ( invdirz >= 0 ) { + + tzmin = ( box.min.z - origin.z ) * invdirz; + tzmax = ( box.max.z - origin.z ) * invdirz; + + } else { + + tzmin = ( box.max.z - origin.z ) * invdirz; + tzmax = ( box.min.z - origin.z ) * invdirz; + + } + + if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null; + + if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; + + if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax; + + //return point closest to the ray (positive side) + + if ( tmax < 0 ) return null; + + return this.at( tmin >= 0 ? tmin : tmax, target ); + + } + + intersectsBox( box ) { + + return this.intersectBox( box, _vector$2 ) !== null; + + } + + intersectTriangle( a, b, c, backfaceCulling, target ) { + + // Compute the offset origin, edges, and normal. + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h + + _edge1.subVectors( b, a ); + _edge2.subVectors( c, a ); + _normal.crossVectors( _edge1, _edge2 ); + + // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, + // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by + // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) + // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) + // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) + let DdN = this.direction.dot( _normal ); + let sign; + + if ( DdN > 0 ) { + + if ( backfaceCulling ) return null; + sign = 1; + + } else if ( DdN < 0 ) { + + sign = - 1; + DdN = - DdN; + + } else { + + return null; + + } + + _diff.subVectors( this.origin, a ); + const DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) ); + + // b1 < 0, no intersection + if ( DdQxE2 < 0 ) { + + return null; + + } + + const DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) ); + + // b2 < 0, no intersection + if ( DdE1xQ < 0 ) { + + return null; + + } + + // b1+b2 > 1, no intersection + if ( DdQxE2 + DdE1xQ > DdN ) { + + return null; + + } + + // Line intersects triangle, check if ray does. + const QdN = - sign * _diff.dot( _normal ); + + // t < 0, no intersection + if ( QdN < 0 ) { + + return null; + + } + + // Ray intersects triangle. + return this.at( QdN / DdN, target ); + + } + + applyMatrix4( matrix4 ) { + + this.origin.applyMatrix4( matrix4 ); + this.direction.transformDirection( matrix4 ); + + return this; + + } + + equals( ray ) { + + return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); + + } + + } + + class Matrix4 { + + constructor() { + + Object.defineProperty( this, 'isMatrix4', { value: true } ); + + this.elements = [ + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); + + } + + } + + set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { + + const te = this.elements; + + te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; + te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; + te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; + te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; + + return this; + + } + + identity() { + + this.set( + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + } + + clone() { + + return new Matrix4().fromArray( this.elements ); + + } + + copy( m ) { + + const te = this.elements; + const me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; + te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; + te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ]; + te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ]; + + return this; + + } + + copyPosition( m ) { + + const te = this.elements, me = m.elements; + + te[ 12 ] = me[ 12 ]; + te[ 13 ] = me[ 13 ]; + te[ 14 ] = me[ 14 ]; + + return this; + + } + + extractBasis( xAxis, yAxis, zAxis ) { + + xAxis.setFromMatrixColumn( this, 0 ); + yAxis.setFromMatrixColumn( this, 1 ); + zAxis.setFromMatrixColumn( this, 2 ); + + return this; + + } + + makeBasis( xAxis, yAxis, zAxis ) { + + this.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 + ); + + return this; + + } + + extractRotation( m ) { + + // this method does not support reflection matrices + + const te = this.elements; + const me = m.elements; + + const scaleX = 1 / _v1$1.setFromMatrixColumn( m, 0 ).length(); + const scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length(); + const scaleZ = 1 / _v1$1.setFromMatrixColumn( m, 2 ).length(); + + te[ 0 ] = me[ 0 ] * scaleX; + te[ 1 ] = me[ 1 ] * scaleX; + te[ 2 ] = me[ 2 ] * scaleX; + te[ 3 ] = 0; + + te[ 4 ] = me[ 4 ] * scaleY; + te[ 5 ] = me[ 5 ] * scaleY; + te[ 6 ] = me[ 6 ] * scaleY; + te[ 7 ] = 0; + + te[ 8 ] = me[ 8 ] * scaleZ; + te[ 9 ] = me[ 9 ] * scaleZ; + te[ 10 ] = me[ 10 ] * scaleZ; + te[ 11 ] = 0; + + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + } + + makeRotationFromEuler( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); + + } + + const te = this.elements; + + const x = euler.x, y = euler.y, z = euler.z; + const a = Math.cos( x ), b = Math.sin( x ); + const c = Math.cos( y ), d = Math.sin( y ); + const e = Math.cos( z ), f = Math.sin( z ); + + if ( euler.order === 'XYZ' ) { + + const ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = - c * f; + te[ 8 ] = d; + + te[ 1 ] = af + be * d; + te[ 5 ] = ae - bf * d; + te[ 9 ] = - b * c; + + te[ 2 ] = bf - ae * d; + te[ 6 ] = be + af * d; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YXZ' ) { + + const ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce + df * b; + te[ 4 ] = de * b - cf; + te[ 8 ] = a * d; + + te[ 1 ] = a * f; + te[ 5 ] = a * e; + te[ 9 ] = - b; + + te[ 2 ] = cf * b - de; + te[ 6 ] = df + ce * b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZXY' ) { + + const ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce - df * b; + te[ 4 ] = - a * f; + te[ 8 ] = de + cf * b; + + te[ 1 ] = cf + de * b; + te[ 5 ] = a * e; + te[ 9 ] = df - ce * b; + + te[ 2 ] = - a * d; + te[ 6 ] = b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZYX' ) { + + const ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = be * d - af; + te[ 8 ] = ae * d + bf; + + te[ 1 ] = c * f; + te[ 5 ] = bf * d + ae; + te[ 9 ] = af * d - be; + + te[ 2 ] = - d; + te[ 6 ] = b * c; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YZX' ) { + + const ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = bd - ac * f; + te[ 8 ] = bc * f + ad; + + te[ 1 ] = f; + te[ 5 ] = a * e; + te[ 9 ] = - b * e; + + te[ 2 ] = - d * e; + te[ 6 ] = ad * f + bc; + te[ 10 ] = ac - bd * f; + + } else if ( euler.order === 'XZY' ) { + + const ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = - f; + te[ 8 ] = d * e; + + te[ 1 ] = ac * f + bd; + te[ 5 ] = a * e; + te[ 9 ] = ad * f - bc; + + te[ 2 ] = bc * f - ad; + te[ 6 ] = b * e; + te[ 10 ] = bd * f + ac; + + } + + // bottom row + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // last column + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + } + + makeRotationFromQuaternion( q ) { + + return this.compose( _zero, q, _one ); + + } + + lookAt( eye, target, up ) { + + const te = this.elements; + + _z.subVectors( eye, target ); + + if ( _z.lengthSq() === 0 ) { + + // eye and target are in the same position + + _z.z = 1; + + } + + _z.normalize(); + _x.crossVectors( up, _z ); + + if ( _x.lengthSq() === 0 ) { + + // up and z are parallel + + if ( Math.abs( up.z ) === 1 ) { + + _z.x += 0.0001; + + } else { + + _z.z += 0.0001; + + } + + _z.normalize(); + _x.crossVectors( up, _z ); + + } + + _x.normalize(); + _y.crossVectors( _z, _x ); + + te[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x; + te[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y; + te[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z; + + return this; + + } + + multiply( m, n ) { + + if ( n !== undefined ) { + + console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); + return this.multiplyMatrices( m, n ); + + } + + return this.multiplyMatrices( this, m ); + + } + + premultiply( m ) { + + return this.multiplyMatrices( m, this ); + + } + + multiplyMatrices( a, b ) { + + const ae = a.elements; + const be = b.elements; + const te = this.elements; + + const a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; + const a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; + const a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; + const a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; + + const b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; + const b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; + const b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; + const b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + + te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + + return this; + + } + + multiplyScalar( s ) { + + const te = this.elements; + + te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; + te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; + te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; + te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; + + return this; + + } + + determinant() { + + const te = this.elements; + + const n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; + const n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; + const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; + const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; + + //TODO: make this more efficient + //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) + + return ( + 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 + ) + + ); + + } + + transpose() { + + const te = this.elements; + let tmp; + + tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; + tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; + tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; + + tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; + tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; + tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; + + return this; + + } + + setPosition( x, y, z ) { + + const te = this.elements; + + if ( x.isVector3 ) { + + te[ 12 ] = x.x; + te[ 13 ] = x.y; + te[ 14 ] = x.z; + + } else { + + te[ 12 ] = x; + te[ 13 ] = y; + te[ 14 ] = z; + + } + + return this; + + } + + invert() { + + // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + const te = this.elements, + + n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ], + n12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ], + n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ], + n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ], + + t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, + t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, + t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, + t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + + const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + + if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); + + const detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; + te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; + te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; + + te[ 4 ] = t12 * detInv; + te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; + te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; + te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; + + te[ 8 ] = t13 * detInv; + te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; + te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; + te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; + + te[ 12 ] = t14 * detInv; + te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; + te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; + te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; + + return this; + + } + + scale( v ) { + + const te = this.elements; + const x = v.x, y = v.y, z = v.z; + + te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; + te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; + te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; + te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; + + return this; + + } + + getMaxScaleOnAxis() { + + const te = this.elements; + + const scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; + const scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; + const scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; + + return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); + + } + + makeTranslation( x, y, z ) { + + this.set( + + 1, 0, 0, x, + 0, 1, 0, y, + 0, 0, 1, z, + 0, 0, 0, 1 + + ); + + return this; + + } + + makeRotationX( theta ) { + + const c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + 1, 0, 0, 0, + 0, c, - s, 0, + 0, s, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + } + + makeRotationY( theta ) { + + const c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + } + + makeRotationZ( theta ) { + + const c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, - s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + } + + makeRotationAxis( axis, angle ) { + + // Based on http://www.gamedev.net/reference/articles/article1199.asp + + const c = Math.cos( angle ); + const s = Math.sin( angle ); + const t = 1 - c; + const x = axis.x, y = axis.y, z = axis.z; + const tx = t * x, ty = t * y; + + this.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 + + ); + + return this; + + } + + makeScale( x, y, z ) { + + this.set( + + x, 0, 0, 0, + 0, y, 0, 0, + 0, 0, z, 0, + 0, 0, 0, 1 + + ); + + return this; + + } + + makeShear( x, y, z ) { + + this.set( + + 1, y, z, 0, + x, 1, z, 0, + x, y, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + } + + compose( position, quaternion, scale ) { + + const te = this.elements; + + const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w; + const x2 = x + x, y2 = y + y, z2 = z + z; + const xx = x * x2, xy = x * y2, xz = x * z2; + const yy = y * y2, yz = y * z2, zz = z * z2; + const wx = w * x2, wy = w * y2, wz = w * z2; + + const sx = scale.x, sy = scale.y, sz = scale.z; + + te[ 0 ] = ( 1 - ( yy + zz ) ) * sx; + te[ 1 ] = ( xy + wz ) * sx; + te[ 2 ] = ( xz - wy ) * sx; + te[ 3 ] = 0; + + te[ 4 ] = ( xy - wz ) * sy; + te[ 5 ] = ( 1 - ( xx + zz ) ) * sy; + te[ 6 ] = ( yz + wx ) * sy; + te[ 7 ] = 0; + + te[ 8 ] = ( xz + wy ) * sz; + te[ 9 ] = ( yz - wx ) * sz; + te[ 10 ] = ( 1 - ( xx + yy ) ) * sz; + te[ 11 ] = 0; + + te[ 12 ] = position.x; + te[ 13 ] = position.y; + te[ 14 ] = position.z; + te[ 15 ] = 1; + + return this; + + } + + decompose( position, quaternion, scale ) { + + const te = this.elements; + + let sx = _v1$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); + const sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); + const sz = _v1$1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); + + // if determine is negative, we need to invert one scale + const det = this.determinant(); + if ( det < 0 ) sx = - sx; + + position.x = te[ 12 ]; + position.y = te[ 13 ]; + position.z = te[ 14 ]; + + // scale the rotation part + _m1.copy( this ); + + const invSX = 1 / sx; + const invSY = 1 / sy; + const invSZ = 1 / sz; + + _m1.elements[ 0 ] *= invSX; + _m1.elements[ 1 ] *= invSX; + _m1.elements[ 2 ] *= invSX; + + _m1.elements[ 4 ] *= invSY; + _m1.elements[ 5 ] *= invSY; + _m1.elements[ 6 ] *= invSY; + + _m1.elements[ 8 ] *= invSZ; + _m1.elements[ 9 ] *= invSZ; + _m1.elements[ 10 ] *= invSZ; + + quaternion.setFromRotationMatrix( _m1 ); + + scale.x = sx; + scale.y = sy; + scale.z = sz; + + return this; + + } + + makePerspective( left, right, top, bottom, near, far ) { + + if ( far === undefined ) { + + console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); + + } + + const te = this.elements; + const x = 2 * near / ( right - left ); + const y = 2 * near / ( top - bottom ); + + const a = ( right + left ) / ( right - left ); + const b = ( top + bottom ) / ( top - bottom ); + const c = - ( far + near ) / ( far - near ); + const d = - 2 * far * near / ( far - near ); + + te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0; + te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0; + + return this; + + } + + makeOrthographic( left, right, top, bottom, near, far ) { + + const te = this.elements; + const w = 1.0 / ( right - left ); + const h = 1.0 / ( top - bottom ); + const p = 1.0 / ( far - near ); + + const x = ( right + left ) * w; + const y = ( top + bottom ) * h; + const z = ( far + near ) * p; + + te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x; + te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = - 2 * p; te[ 14 ] = - z; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1; + + return this; + + } + + equals( matrix ) { + + const te = this.elements; + const me = matrix.elements; + + for ( let i = 0; i < 16; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + } + + fromArray( array, offset = 0 ) { + + for ( let i = 0; i < 16; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + } + + toArray( array = [], offset = 0 ) { + + const te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + array[ offset + 3 ] = te[ 3 ]; + + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + + array[ offset + 8 ] = te[ 8 ]; + array[ offset + 9 ] = te[ 9 ]; + array[ offset + 10 ] = te[ 10 ]; + array[ offset + 11 ] = te[ 11 ]; + + array[ offset + 12 ] = te[ 12 ]; + array[ offset + 13 ] = te[ 13 ]; + array[ offset + 14 ] = te[ 14 ]; + array[ offset + 15 ] = te[ 15 ]; + + return array; + + } + + } + + const _v1$1 = /*@__PURE__*/ new Vector3(); + const _m1 = /*@__PURE__*/ new Matrix4(); + const _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 ); + const _one = /*@__PURE__*/ new Vector3( 1, 1, 1 ); + const _x = /*@__PURE__*/ new Vector3(); + const _y = /*@__PURE__*/ new Vector3(); + const _z = /*@__PURE__*/ new Vector3(); + + class Euler { + + constructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) { + + Object.defineProperty( this, 'isEuler', { value: true } ); + + this._x = x; + this._y = y; + this._z = z; + this._order = order; + + } + + get x() { + + return this._x; + + } + + set x( value ) { + + this._x = value; + this._onChangeCallback(); + + } + + get y() { + + return this._y; + + } + + set y( value ) { + + this._y = value; + this._onChangeCallback(); + + } + + get z() { + + return this._z; + + } + + set z( value ) { + + this._z = value; + this._onChangeCallback(); + + } + + get order() { + + return this._order; + + } + + set order( value ) { + + this._order = value; + this._onChangeCallback(); + + } + + set( x, y, z, order ) { + + this._x = x; + this._y = y; + this._z = z; + this._order = order || this._order; + + this._onChangeCallback(); + + return this; + + } + + clone() { + + return new this.constructor( this._x, this._y, this._z, this._order ); + + } + + copy( euler ) { + + this._x = euler._x; + this._y = euler._y; + this._z = euler._z; + this._order = euler._order; + + this._onChangeCallback(); + + return this; + + } + + setFromRotationMatrix( m, order, update ) { + + const clamp = MathUtils.clamp; + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + const te = m.elements; + const m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; + const m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; + const m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + order = order || this._order; + + switch ( order ) { + + case 'XYZ': + + this._y = Math.asin( clamp( m13, - 1, 1 ) ); + + if ( Math.abs( m13 ) < 0.9999999 ) { + + this._x = Math.atan2( - m23, m33 ); + this._z = Math.atan2( - m12, m11 ); + + } else { + + this._x = Math.atan2( m32, m22 ); + this._z = 0; + + } + + break; + + case 'YXZ': + + this._x = Math.asin( - clamp( m23, - 1, 1 ) ); + + if ( Math.abs( m23 ) < 0.9999999 ) { + + this._y = Math.atan2( m13, m33 ); + this._z = Math.atan2( m21, m22 ); + + } else { + + this._y = Math.atan2( - m31, m11 ); + this._z = 0; + + } + + break; + + case 'ZXY': + + this._x = Math.asin( clamp( m32, - 1, 1 ) ); + + if ( Math.abs( m32 ) < 0.9999999 ) { + + this._y = Math.atan2( - m31, m33 ); + this._z = Math.atan2( - m12, m22 ); + + } else { + + this._y = 0; + this._z = Math.atan2( m21, m11 ); + + } + + break; + + case 'ZYX': + + this._y = Math.asin( - clamp( m31, - 1, 1 ) ); + + if ( Math.abs( m31 ) < 0.9999999 ) { + + this._x = Math.atan2( m32, m33 ); + this._z = Math.atan2( m21, m11 ); + + } else { + + this._x = 0; + this._z = Math.atan2( - m12, m22 ); + + } + + break; + + case 'YZX': + + this._z = Math.asin( clamp( m21, - 1, 1 ) ); + + if ( Math.abs( m21 ) < 0.9999999 ) { + + this._x = Math.atan2( - m23, m22 ); + this._y = Math.atan2( - m31, m11 ); + + } else { + + this._x = 0; + this._y = Math.atan2( m13, m33 ); + + } + + break; + + case 'XZY': + + this._z = Math.asin( - clamp( m12, - 1, 1 ) ); + + if ( Math.abs( m12 ) < 0.9999999 ) { + + this._x = Math.atan2( m32, m22 ); + this._y = Math.atan2( m13, m11 ); + + } else { + + this._x = Math.atan2( - m23, m33 ); + this._y = 0; + + } + + break; + + default: + + console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order ); + + } + + this._order = order; + + if ( update !== false ) this._onChangeCallback(); + + return this; + + } + + setFromQuaternion( q, order, update ) { + + _matrix.makeRotationFromQuaternion( q ); + + return this.setFromRotationMatrix( _matrix, order, update ); + + } + + setFromVector3( v, order ) { + + return this.set( v.x, v.y, v.z, order || this._order ); + + } + + reorder( newOrder ) { + + // WARNING: this discards revolution information -bhouston + + _quaternion$1.setFromEuler( this ); + + return this.setFromQuaternion( _quaternion$1, newOrder ); + + } + + equals( euler ) { + + return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); + + } + + fromArray( array ) { + + this._x = array[ 0 ]; + this._y = array[ 1 ]; + this._z = array[ 2 ]; + if ( array[ 3 ] !== undefined ) this._order = array[ 3 ]; + + this._onChangeCallback(); + + return this; + + } + + toArray( array = [], offset = 0 ) { + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._order; + + return array; + + } + + toVector3( optionalResult ) { + + if ( optionalResult ) { + + return optionalResult.set( this._x, this._y, this._z ); + + } else { + + return new Vector3( this._x, this._y, this._z ); + + } + + } + + _onChange( callback ) { + + this._onChangeCallback = callback; + + return this; + + } + + _onChangeCallback() {} + + } + + Euler.DefaultOrder = 'XYZ'; + Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; + + const _matrix = /*@__PURE__*/ new Matrix4(); + const _quaternion$1 = /*@__PURE__*/ new Quaternion(); + + class Layers { + + constructor() { + + this.mask = 1 | 0; + + } + + set( channel ) { + + this.mask = 1 << channel | 0; + + } + + enable( channel ) { + + this.mask |= 1 << channel | 0; + + } + + enableAll() { + + this.mask = 0xffffffff | 0; + + } + + toggle( channel ) { + + this.mask ^= 1 << channel | 0; + + } + + disable( channel ) { + + this.mask &= ~ ( 1 << channel | 0 ); + + } + + disableAll() { + + this.mask = 0; + + } + + test( layers ) { + + return ( this.mask & layers.mask ) !== 0; + + } + + } + + let _object3DId = 0; + + const _v1$2 = new Vector3(); + const _q1 = new Quaternion(); + const _m1$1 = new Matrix4(); + const _target = new Vector3(); + + const _position = new Vector3(); + const _scale = new Vector3(); + const _quaternion$2 = new Quaternion(); + + const _xAxis = new Vector3( 1, 0, 0 ); + const _yAxis = new Vector3( 0, 1, 0 ); + const _zAxis = new Vector3( 0, 0, 1 ); + + const _addedEvent = { type: 'added' }; + const _removedEvent = { type: 'removed' }; + + function Object3D() { + + Object.defineProperty( this, 'id', { value: _object3DId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Object3D'; + + this.parent = null; + this.children = []; + + this.up = Object3D.DefaultUp.clone(); + + const position = new Vector3(); + const rotation = new Euler(); + const quaternion = new Quaternion(); + const scale = new Vector3( 1, 1, 1 ); + + function onRotationChange() { + + quaternion.setFromEuler( rotation, false ); + + } + + function onQuaternionChange() { + + rotation.setFromQuaternion( quaternion, undefined, false ); + + } + + rotation._onChange( onRotationChange ); + quaternion._onChange( onQuaternionChange ); + + Object.defineProperties( this, { + position: { + configurable: true, + enumerable: true, + value: position + }, + rotation: { + configurable: true, + enumerable: true, + value: rotation + }, + quaternion: { + configurable: true, + enumerable: true, + value: quaternion + }, + scale: { + configurable: true, + enumerable: true, + value: scale + }, + modelViewMatrix: { + value: new Matrix4() + }, + normalMatrix: { + value: new Matrix3() + } + } ); + + this.matrix = new Matrix4(); + this.matrixWorld = new Matrix4(); + + this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate; + this.matrixWorldNeedsUpdate = false; + + this.layers = new Layers(); + this.visible = true; + + this.castShadow = false; + this.receiveShadow = false; + + this.frustumCulled = true; + this.renderOrder = 0; + + this.animations = []; + + this.userData = {}; + + } + + Object3D.DefaultUp = new Vector3( 0, 1, 0 ); + Object3D.DefaultMatrixAutoUpdate = true; + + Object3D.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { + + constructor: Object3D, + + isObject3D: true, + + onBeforeRender: function () {}, + onAfterRender: function () {}, + + applyMatrix4: function ( matrix ) { + + if ( this.matrixAutoUpdate ) this.updateMatrix(); + + this.matrix.premultiply( matrix ); + + this.matrix.decompose( this.position, this.quaternion, this.scale ); + + }, + + applyQuaternion: function ( q ) { + + this.quaternion.premultiply( q ); + + return this; + + }, + + setRotationFromAxisAngle: function ( axis, angle ) { + + // assumes axis is normalized + + this.quaternion.setFromAxisAngle( axis, angle ); + + }, + + setRotationFromEuler: function ( euler ) { + + this.quaternion.setFromEuler( euler, true ); + + }, + + setRotationFromMatrix: function ( m ) { + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + this.quaternion.setFromRotationMatrix( m ); + + }, + + setRotationFromQuaternion: function ( q ) { + + // assumes q is normalized + + this.quaternion.copy( q ); + + }, + + rotateOnAxis: function ( axis, angle ) { + + // rotate object on axis in object space + // axis is assumed to be normalized + + _q1.setFromAxisAngle( axis, angle ); + + this.quaternion.multiply( _q1 ); + + return this; + + }, + + rotateOnWorldAxis: function ( axis, angle ) { + + // rotate object on axis in world space + // axis is assumed to be normalized + // method assumes no rotated parent + + _q1.setFromAxisAngle( axis, angle ); + + this.quaternion.premultiply( _q1 ); + + return this; + + }, + + rotateX: function ( angle ) { + + return this.rotateOnAxis( _xAxis, angle ); + + }, + + rotateY: function ( angle ) { + + return this.rotateOnAxis( _yAxis, angle ); + + }, + + rotateZ: function ( angle ) { + + return this.rotateOnAxis( _zAxis, angle ); + + }, + + translateOnAxis: function ( axis, distance ) { + + // translate object by distance along axis in object space + // axis is assumed to be normalized + + _v1$2.copy( axis ).applyQuaternion( this.quaternion ); + + this.position.add( _v1$2.multiplyScalar( distance ) ); + + return this; + + }, + + translateX: function ( distance ) { + + return this.translateOnAxis( _xAxis, distance ); + + }, + + translateY: function ( distance ) { + + return this.translateOnAxis( _yAxis, distance ); + + }, + + translateZ: function ( distance ) { + + return this.translateOnAxis( _zAxis, distance ); + + }, + + localToWorld: function ( vector ) { + + return vector.applyMatrix4( this.matrixWorld ); + + }, + + worldToLocal: function ( vector ) { + + return vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() ); + + }, + + lookAt: function ( x, y, z ) { + + // This method does not support objects having non-uniformly-scaled parent(s) + + if ( x.isVector3 ) { + + _target.copy( x ); + + } else { + + _target.set( x, y, z ); + + } + + const parent = this.parent; + + this.updateWorldMatrix( true, false ); + + _position.setFromMatrixPosition( this.matrixWorld ); + + if ( this.isCamera || this.isLight ) { + + _m1$1.lookAt( _position, _target, this.up ); + + } else { + + _m1$1.lookAt( _target, _position, this.up ); + + } + + this.quaternion.setFromRotationMatrix( _m1$1 ); + + if ( parent ) { + + _m1$1.extractRotation( parent.matrixWorld ); + _q1.setFromRotationMatrix( _m1$1 ); + this.quaternion.premultiply( _q1.invert() ); + + } + + }, + + add: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( let i = 0; i < arguments.length; i ++ ) { + + this.add( arguments[ i ] ); + + } + + return this; + + } + + if ( object === this ) { + + console.error( 'THREE.Object3D.add: object can\'t be added as a child of itself.', object ); + return this; + + } + + if ( object && object.isObject3D ) { + + if ( object.parent !== null ) { + + object.parent.remove( object ); + + } + + object.parent = this; + this.children.push( object ); + + object.dispatchEvent( _addedEvent ); + + } else { + + console.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object ); + + } + + return this; + + }, + + remove: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( let i = 0; i < arguments.length; i ++ ) { + + this.remove( arguments[ i ] ); + + } + + return this; + + } + + const index = this.children.indexOf( object ); + + if ( index !== - 1 ) { + + object.parent = null; + this.children.splice( index, 1 ); + + object.dispatchEvent( _removedEvent ); + + } + + return this; + + }, + + clear: function () { + + for ( let i = 0; i < this.children.length; i ++ ) { + + const object = this.children[ i ]; + + object.parent = null; + + object.dispatchEvent( _removedEvent ); + + } + + this.children.length = 0; + + return this; + + + }, + + attach: function ( object ) { + + // adds object as a child of this, while maintaining the object's world transform + + this.updateWorldMatrix( true, false ); + + _m1$1.copy( this.matrixWorld ).invert(); + + if ( object.parent !== null ) { + + object.parent.updateWorldMatrix( true, false ); + + _m1$1.multiply( object.parent.matrixWorld ); + + } + + object.applyMatrix4( _m1$1 ); + + object.updateWorldMatrix( false, false ); + + this.add( object ); + + return this; + + }, + + getObjectById: function ( id ) { + + return this.getObjectByProperty( 'id', id ); + + }, + + getObjectByName: function ( name ) { + + return this.getObjectByProperty( 'name', name ); + + }, + + getObjectByProperty: function ( name, value ) { + + if ( this[ name ] === value ) return this; + + for ( let i = 0, l = this.children.length; i < l; i ++ ) { + + const child = this.children[ i ]; + const object = child.getObjectByProperty( name, value ); + + if ( object !== undefined ) { + + return object; + + } + + } + + return undefined; + + }, + + getWorldPosition: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldPosition() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + return target.setFromMatrixPosition( this.matrixWorld ); + + }, + + getWorldQuaternion: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' ); + target = new Quaternion(); + + } + + this.updateWorldMatrix( true, false ); + + this.matrixWorld.decompose( _position, target, _scale ); + + return target; + + }, + + getWorldScale: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldScale() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + this.matrixWorld.decompose( _position, _quaternion$2, target ); + + return target; + + }, + + getWorldDirection: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldDirection() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + const e = this.matrixWorld.elements; + + return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize(); + + }, + + raycast: function () {}, + + traverse: function ( callback ) { + + callback( this ); + + const children = this.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverse( callback ); + + } + + }, + + traverseVisible: function ( callback ) { + + if ( this.visible === false ) return; + + callback( this ); + + const children = this.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverseVisible( callback ); + + } + + }, + + traverseAncestors: function ( callback ) { + + const parent = this.parent; + + if ( parent !== null ) { + + callback( parent ); + + parent.traverseAncestors( callback ); + + } + + }, + + updateMatrix: function () { + + this.matrix.compose( this.position, this.quaternion, this.scale ); + + this.matrixWorldNeedsUpdate = true; + + }, + + updateMatrixWorld: function ( force ) { + + if ( this.matrixAutoUpdate ) this.updateMatrix(); + + if ( this.matrixWorldNeedsUpdate || force ) { + + if ( this.parent === null ) { + + this.matrixWorld.copy( this.matrix ); + + } else { + + this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); + + } + + this.matrixWorldNeedsUpdate = false; + + force = true; + + } + + // update children + + const children = this.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( force ); + + } + + }, + + updateWorldMatrix: function ( updateParents, updateChildren ) { + + const parent = this.parent; + + if ( updateParents === true && parent !== null ) { + + parent.updateWorldMatrix( true, false ); + + } + + if ( this.matrixAutoUpdate ) this.updateMatrix(); + + if ( this.parent === null ) { + + this.matrixWorld.copy( this.matrix ); + + } else { + + this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); + + } + + // update children + + if ( updateChildren === true ) { + + const children = this.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateWorldMatrix( false, true ); + + } + + } + + }, + + toJSON: function ( meta ) { + + // meta is a string when called from JSON.stringify + const isRootObject = ( meta === undefined || typeof meta === 'string' ); + + const output = {}; + + // meta is a hash used to collect geometries, materials. + // not providing it implies that this is the root object + // being serialized. + if ( isRootObject ) { + + // initialize meta obj + meta = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {} + }; + + output.metadata = { + version: 4.5, + type: 'Object', + generator: 'Object3D.toJSON' + }; + + } + + // standard Object3D serialization + + const object = {}; + + object.uuid = this.uuid; + object.type = this.type; + + if ( this.name !== '' ) object.name = this.name; + if ( this.castShadow === true ) object.castShadow = true; + if ( this.receiveShadow === true ) object.receiveShadow = true; + if ( this.visible === false ) object.visible = false; + if ( this.frustumCulled === false ) object.frustumCulled = false; + if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder; + if ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; + + object.layers = this.layers.mask; + object.matrix = this.matrix.toArray(); + + if ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false; + + // object specific properties + + if ( this.isInstancedMesh ) { + + object.type = 'InstancedMesh'; + object.count = this.count; + object.instanceMatrix = this.instanceMatrix.toJSON(); + + } + + // + + function serialize( library, element ) { + + if ( library[ element.uuid ] === undefined ) { + + library[ element.uuid ] = element.toJSON( meta ); + + } + + return element.uuid; + + } + + if ( this.isMesh || this.isLine || this.isPoints ) { + + object.geometry = serialize( meta.geometries, this.geometry ); + + const parameters = this.geometry.parameters; + + if ( parameters !== undefined && parameters.shapes !== undefined ) { + + const shapes = parameters.shapes; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + serialize( meta.shapes, shape ); + + } + + } else { + + serialize( meta.shapes, shapes ); + + } + + } + + } + + if ( this.isSkinnedMesh ) { + + object.bindMode = this.bindMode; + object.bindMatrix = this.bindMatrix.toArray(); + + if ( this.skeleton !== undefined ) { + + serialize( meta.skeletons, this.skeleton ); + + object.skeleton = this.skeleton.uuid; + + } + + } + + if ( this.material !== undefined ) { + + if ( Array.isArray( this.material ) ) { + + const uuids = []; + + for ( let i = 0, l = this.material.length; i < l; i ++ ) { + + uuids.push( serialize( meta.materials, this.material[ i ] ) ); + + } + + object.material = uuids; + + } else { + + object.material = serialize( meta.materials, this.material ); + + } + + } + + // + + if ( this.children.length > 0 ) { + + object.children = []; + + for ( let i = 0; i < this.children.length; i ++ ) { + + object.children.push( this.children[ i ].toJSON( meta ).object ); + + } + + } + + // + + if ( this.animations.length > 0 ) { + + object.animations = []; + + for ( let i = 0; i < this.animations.length; i ++ ) { + + const animation = this.animations[ i ]; + + object.animations.push( serialize( meta.animations, animation ) ); + + } + + } + + if ( isRootObject ) { + + const geometries = extractFromCache( meta.geometries ); + const materials = extractFromCache( meta.materials ); + const textures = extractFromCache( meta.textures ); + const images = extractFromCache( meta.images ); + const shapes = extractFromCache( meta.shapes ); + const skeletons = extractFromCache( meta.skeletons ); + const animations = extractFromCache( meta.animations ); + + if ( geometries.length > 0 ) output.geometries = geometries; + if ( materials.length > 0 ) output.materials = materials; + if ( textures.length > 0 ) output.textures = textures; + if ( images.length > 0 ) output.images = images; + if ( shapes.length > 0 ) output.shapes = shapes; + if ( skeletons.length > 0 ) output.skeletons = skeletons; + if ( animations.length > 0 ) output.animations = animations; + + } + + output.object = object; + + return output; + + // extract data from the cache hash + // remove metadata on each item + // and return as array + function extractFromCache( cache ) { + + const values = []; + for ( const key in cache ) { + + const data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + + return values; + + } + + }, + + clone: function ( recursive ) { + + return new this.constructor().copy( this, recursive ); + + }, + + copy: function ( source, recursive = true ) { + + this.name = source.name; + + this.up.copy( source.up ); + + this.position.copy( source.position ); + this.rotation.order = source.rotation.order; + this.quaternion.copy( source.quaternion ); + this.scale.copy( source.scale ); + + this.matrix.copy( source.matrix ); + this.matrixWorld.copy( source.matrixWorld ); + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; + + this.layers.mask = source.layers.mask; + this.visible = source.visible; + + this.castShadow = source.castShadow; + this.receiveShadow = source.receiveShadow; + + this.frustumCulled = source.frustumCulled; + this.renderOrder = source.renderOrder; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + if ( recursive === true ) { + + for ( let i = 0; i < source.children.length; i ++ ) { + + const child = source.children[ i ]; + this.add( child.clone() ); + + } + + } + + return this; + + } + + } ); + + const _vector1 = /*@__PURE__*/ new Vector3(); + const _vector2 = /*@__PURE__*/ new Vector3(); + const _normalMatrix = /*@__PURE__*/ new Matrix3(); + + class Plane { + + constructor( normal, constant ) { + + Object.defineProperty( this, 'isPlane', { value: true } ); + + // normal is assumed to be normalized + + this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); + this.constant = ( constant !== undefined ) ? constant : 0; + + } + + set( normal, constant ) { + + this.normal.copy( normal ); + this.constant = constant; + + return this; + + } + + setComponents( x, y, z, w ) { + + this.normal.set( x, y, z ); + this.constant = w; + + return this; + + } + + setFromNormalAndCoplanarPoint( normal, point ) { + + this.normal.copy( normal ); + this.constant = - point.dot( this.normal ); + + return this; + + } + + setFromCoplanarPoints( a, b, c ) { + + const 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)? + + this.setFromNormalAndCoplanarPoint( normal, a ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( plane ) { + + this.normal.copy( plane.normal ); + this.constant = plane.constant; + + return this; + + } + + normalize() { + + // Note: will lead to a divide by zero if the plane is invalid. + + const inverseNormalLength = 1.0 / this.normal.length(); + this.normal.multiplyScalar( inverseNormalLength ); + this.constant *= inverseNormalLength; + + return this; + + } + + negate() { + + this.constant *= - 1; + this.normal.negate(); + + return this; + + } + + distanceToPoint( point ) { + + return this.normal.dot( point ) + this.constant; + + } + + distanceToSphere( sphere ) { + + return this.distanceToPoint( sphere.center ) - sphere.radius; + + } + + projectPoint( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .projectPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); + + } + + intersectLine( line, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .intersectLine() target is now required' ); + target = new Vector3(); + + } + + const direction = line.delta( _vector1 ); + + const denominator = this.normal.dot( direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( this.distanceToPoint( line.start ) === 0 ) { + + return target.copy( line.start ); + + } + + // Unsure if this is the correct method to handle this case. + return undefined; + + } + + const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; + + if ( t < 0 || t > 1 ) { + + return undefined; + + } + + return target.copy( direction ).multiplyScalar( t ).add( line.start ); + + } + + intersectsLine( line ) { + + // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. + + const startSign = this.distanceToPoint( line.start ); + const endSign = this.distanceToPoint( line.end ); + + return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); + + } + + intersectsBox( box ) { + + return box.intersectsPlane( this ); + + } + + intersectsSphere( sphere ) { + + return sphere.intersectsPlane( this ); + + } + + coplanarPoint( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .coplanarPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.normal ).multiplyScalar( - this.constant ); + + } + + applyMatrix4( matrix, optionalNormalMatrix ) { + + const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix ); + + const referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix ); + + const normal = this.normal.applyMatrix3( normalMatrix ).normalize(); + + this.constant = - referencePoint.dot( normal ); + + return this; + + } + + translate( offset ) { + + this.constant -= offset.dot( this.normal ); + + return this; + + } + + equals( plane ) { + + return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); + + } + + } + + const _v0$1 = /*@__PURE__*/ new Vector3(); + const _v1$3 = /*@__PURE__*/ new Vector3(); + const _v2$1 = /*@__PURE__*/ new Vector3(); + const _v3 = /*@__PURE__*/ new Vector3(); + + const _vab = /*@__PURE__*/ new Vector3(); + const _vac = /*@__PURE__*/ new Vector3(); + const _vbc = /*@__PURE__*/ new Vector3(); + const _vap = /*@__PURE__*/ new Vector3(); + const _vbp = /*@__PURE__*/ new Vector3(); + const _vcp = /*@__PURE__*/ new Vector3(); + + class Triangle { + + constructor( a, b, c ) { + + this.a = ( a !== undefined ) ? a : new Vector3(); + this.b = ( b !== undefined ) ? b : new Vector3(); + this.c = ( c !== undefined ) ? c : new Vector3(); + + } + + static getNormal( a, b, c, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getNormal() target is now required' ); + target = new Vector3(); + + } + + target.subVectors( c, b ); + _v0$1.subVectors( a, b ); + target.cross( _v0$1 ); + + const targetLengthSq = target.lengthSq(); + if ( targetLengthSq > 0 ) { + + return target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) ); + + } + + return target.set( 0, 0, 0 ); + + } + + // static/instance method to calculate barycentric coordinates + // based on: http://www.blackpawn.com/texts/pointinpoly/default.html + static getBarycoord( point, a, b, c, target ) { + + _v0$1.subVectors( c, a ); + _v1$3.subVectors( b, a ); + _v2$1.subVectors( point, a ); + + const dot00 = _v0$1.dot( _v0$1 ); + const dot01 = _v0$1.dot( _v1$3 ); + const dot02 = _v0$1.dot( _v2$1 ); + const dot11 = _v1$3.dot( _v1$3 ); + const dot12 = _v1$3.dot( _v2$1 ); + + const denom = ( dot00 * dot11 - dot01 * dot01 ); + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getBarycoord() target is now required' ); + target = new Vector3(); + + } + + // collinear or singular triangle + if ( denom === 0 ) { + + // arbitrary location outside of triangle? + // not sure if this is the best idea, maybe should be returning undefined + return target.set( - 2, - 1, - 1 ); + + } + + const invDenom = 1 / denom; + const u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; + const v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; + + // barycentric coordinates must always sum to 1 + return target.set( 1 - u - v, v, u ); + + } + + static containsPoint( point, a, b, c ) { + + this.getBarycoord( point, a, b, c, _v3 ); + + return ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 ); + + } + + static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { + + this.getBarycoord( point, p1, p2, p3, _v3 ); + + target.set( 0, 0 ); + target.addScaledVector( uv1, _v3.x ); + target.addScaledVector( uv2, _v3.y ); + target.addScaledVector( uv3, _v3.z ); + + return target; + + } + + static isFrontFacing( a, b, c, direction ) { + + _v0$1.subVectors( c, b ); + _v1$3.subVectors( a, b ); + + // strictly front facing + return ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false; + + } + + set( a, b, c ) { + + this.a.copy( a ); + this.b.copy( b ); + this.c.copy( c ); + + return this; + + } + + setFromPointsAndIndices( points, i0, i1, i2 ) { + + this.a.copy( points[ i0 ] ); + this.b.copy( points[ i1 ] ); + this.c.copy( points[ i2 ] ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( triangle ) { + + this.a.copy( triangle.a ); + this.b.copy( triangle.b ); + this.c.copy( triangle.c ); + + return this; + + } + + getArea() { + + _v0$1.subVectors( this.c, this.b ); + _v1$3.subVectors( this.a, this.b ); + + return _v0$1.cross( _v1$3 ).length() * 0.5; + + } + + getMidpoint( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getMidpoint() target is now required' ); + target = new Vector3(); + + } + + return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); + + } + + getNormal( target ) { + + return Triangle.getNormal( this.a, this.b, this.c, target ); + + } + + getPlane( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getPlane() target is now required' ); + target = new Plane(); + + } + + return target.setFromCoplanarPoints( this.a, this.b, this.c ); + + } + + getBarycoord( point, target ) { + + return Triangle.getBarycoord( point, this.a, this.b, this.c, target ); + + } + + getUV( point, uv1, uv2, uv3, target ) { + + return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target ); + + } + + containsPoint( point ) { + + return Triangle.containsPoint( point, this.a, this.b, this.c ); + + } + + isFrontFacing( direction ) { + + return Triangle.isFrontFacing( this.a, this.b, this.c, direction ); + + } + + intersectsBox( box ) { + + return box.intersectsTriangle( this ); + + } + + closestPointToPoint( p, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + const a = this.a, b = this.b, c = this.c; + let v, w; + + // algorithm thanks to Real-Time Collision Detection by Christer Ericson, + // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc., + // under the accompanying license; see chapter 5.1.5 for detailed explanation. + // basically, we're distinguishing which of the voronoi regions of the triangle + // the point lies in with the minimum amount of redundant computation. + + _vab.subVectors( b, a ); + _vac.subVectors( c, a ); + _vap.subVectors( p, a ); + const d1 = _vab.dot( _vap ); + const d2 = _vac.dot( _vap ); + if ( d1 <= 0 && d2 <= 0 ) { + + // vertex region of A; barycentric coords (1, 0, 0) + return target.copy( a ); + + } + + _vbp.subVectors( p, b ); + const d3 = _vab.dot( _vbp ); + const d4 = _vac.dot( _vbp ); + if ( d3 >= 0 && d4 <= d3 ) { + + // vertex region of B; barycentric coords (0, 1, 0) + return target.copy( b ); + + } + + const vc = d1 * d4 - d3 * d2; + if ( vc <= 0 && d1 >= 0 && d3 <= 0 ) { + + v = d1 / ( d1 - d3 ); + // edge region of AB; barycentric coords (1-v, v, 0) + return target.copy( a ).addScaledVector( _vab, v ); + + } + + _vcp.subVectors( p, c ); + const d5 = _vab.dot( _vcp ); + const d6 = _vac.dot( _vcp ); + if ( d6 >= 0 && d5 <= d6 ) { + + // vertex region of C; barycentric coords (0, 0, 1) + return target.copy( c ); + + } + + const vb = d5 * d2 - d1 * d6; + if ( vb <= 0 && d2 >= 0 && d6 <= 0 ) { + + w = d2 / ( d2 - d6 ); + // edge region of AC; barycentric coords (1-w, 0, w) + return target.copy( a ).addScaledVector( _vac, w ); + + } + + const va = d3 * d6 - d5 * d4; + if ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) { + + _vbc.subVectors( c, b ); + w = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) ); + // edge region of BC; barycentric coords (0, 1-w, w) + return target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC + + } + + // face region + const denom = 1 / ( va + vb + vc ); + // u = va * denom + v = vb * denom; + w = vc * denom; + + return target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w ); + + } + + equals( triangle ) { + + return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); + + } + + } + + const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, + 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, + 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, + 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, + 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, + 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, + 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, + 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, + 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, + 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, + 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, + 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, + 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, + 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, + 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, + 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, + 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, + 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, + 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, + 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, + 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, + 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, + 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, + 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; + + const _hslA = { h: 0, s: 0, l: 0 }; + const _hslB = { h: 0, s: 0, l: 0 }; + + function hue2rgb( p, q, t ) { + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + } + + function SRGBToLinear( c ) { + + return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 ); + + } + + function LinearToSRGB( c ) { + + return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055; + + } + + class Color { + + constructor( r, g, b ) { + + Object.defineProperty( this, 'isColor', { value: true } ); + + if ( g === undefined && b === undefined ) { + + // r is THREE.Color, hex or string + return this.set( r ); + + } + + return this.setRGB( r, g, b ); + + } + + set( value ) { + + if ( value && value.isColor ) { + + this.copy( value ); + + } else if ( typeof value === 'number' ) { + + this.setHex( value ); + + } else if ( typeof value === 'string' ) { + + this.setStyle( value ); + + } + + return this; + + } + + setScalar( scalar ) { + + this.r = scalar; + this.g = scalar; + this.b = scalar; + + return this; + + } + + setHex( hex ) { + + hex = Math.floor( hex ); + + this.r = ( hex >> 16 & 255 ) / 255; + this.g = ( hex >> 8 & 255 ) / 255; + this.b = ( hex & 255 ) / 255; + + return this; + + } + + setRGB( r, g, b ) { + + this.r = r; + this.g = g; + this.b = b; + + return this; + + } + + setHSL( h, s, l ) { + + // h,s,l ranges are in 0.0 - 1.0 + h = MathUtils.euclideanModulo( h, 1 ); + s = MathUtils.clamp( s, 0, 1 ); + l = MathUtils.clamp( l, 0, 1 ); + + if ( s === 0 ) { + + this.r = this.g = this.b = l; + + } else { + + const p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); + const q = ( 2 * l ) - p; + + this.r = hue2rgb( q, p, h + 1 / 3 ); + this.g = hue2rgb( q, p, h ); + this.b = hue2rgb( q, p, h - 1 / 3 ); + + } + + return this; + + } + + setStyle( style ) { + + function handleAlpha( string ) { + + if ( string === undefined ) return; + + if ( parseFloat( string ) < 1 ) { + + console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); + + } + + } + + + let m; + + if ( m = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { + + // rgb / hsl + + let color; + const name = m[ 1 ]; + const components = m[ 2 ]; + + switch ( name ) { + + case 'rgb': + case 'rgba': + + if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { + + // rgb(255,0,0) rgba(255,0,0,0.5) + this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; + this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; + this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; + + handleAlpha( color[ 4 ] ); + + return this; + + } + + if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { + + // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) + this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; + this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; + this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; + + handleAlpha( color[ 4 ] ); + + return this; + + } + + break; + + case 'hsl': + case 'hsla': + + if ( color = /^(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { + + // hsl(120,50%,50%) hsla(120,50%,50%,0.5) + const h = parseFloat( color[ 1 ] ) / 360; + const s = parseInt( color[ 2 ], 10 ) / 100; + const l = parseInt( color[ 3 ], 10 ) / 100; + + handleAlpha( color[ 4 ] ); + + return this.setHSL( h, s, l ); + + } + + break; + + } + + } else if ( m = /^\#([A-Fa-f\d]+)$/.exec( style ) ) { + + // hex color + + const hex = m[ 1 ]; + const size = hex.length; + + if ( size === 3 ) { + + // #ff0 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; + + return this; + + } else if ( size === 6 ) { + + // #ff0000 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; + + return this; + + } + + } + + if ( style && style.length > 0 ) { + + return this.setColorName( style ); + + } + + return this; + + } + + setColorName( style ) { + + // color keywords + const hex = _colorKeywords[ style ]; + + if ( hex !== undefined ) { + + // red + this.setHex( hex ); + + } else { + + // unknown color + console.warn( 'THREE.Color: Unknown color ' + style ); + + } + + return this; + + } + + clone() { + + return new this.constructor( this.r, this.g, this.b ); + + } + + copy( color ) { + + this.r = color.r; + this.g = color.g; + this.b = color.b; + + return this; + + } + + copyGammaToLinear( color, gammaFactor = 2.0 ) { + + this.r = Math.pow( color.r, gammaFactor ); + this.g = Math.pow( color.g, gammaFactor ); + this.b = Math.pow( color.b, gammaFactor ); + + return this; + + } + + copyLinearToGamma( color, gammaFactor = 2.0 ) { + + const safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; + + this.r = Math.pow( color.r, safeInverse ); + this.g = Math.pow( color.g, safeInverse ); + this.b = Math.pow( color.b, safeInverse ); + + return this; + + } + + convertGammaToLinear( gammaFactor ) { + + this.copyGammaToLinear( this, gammaFactor ); + + return this; + + } + + convertLinearToGamma( gammaFactor ) { + + this.copyLinearToGamma( this, gammaFactor ); + + return this; + + } + + copySRGBToLinear( color ) { + + this.r = SRGBToLinear( color.r ); + this.g = SRGBToLinear( color.g ); + this.b = SRGBToLinear( color.b ); + + return this; + + } + + copyLinearToSRGB( color ) { + + this.r = LinearToSRGB( color.r ); + this.g = LinearToSRGB( color.g ); + this.b = LinearToSRGB( color.b ); + + return this; + + } + + convertSRGBToLinear() { + + this.copySRGBToLinear( this ); + + return this; + + } + + convertLinearToSRGB() { + + this.copyLinearToSRGB( this ); + + return this; + + } + + getHex() { + + return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; + + } + + getHexString() { + + return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); + + } + + getHSL( target ) { + + // h,s,l ranges are in 0.0 - 1.0 + + if ( target === undefined ) { + + console.warn( 'THREE.Color: .getHSL() target is now required' ); + target = { h: 0, s: 0, l: 0 }; + + } + + const r = this.r, g = this.g, b = this.b; + + const max = Math.max( r, g, b ); + const min = Math.min( r, g, b ); + + let hue, saturation; + const lightness = ( min + max ) / 2.0; + + if ( min === max ) { + + hue = 0; + saturation = 0; + + } else { + + const delta = max - min; + + saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); + + switch ( max ) { + + case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; + case g: hue = ( b - r ) / delta + 2; break; + case b: hue = ( r - g ) / delta + 4; break; + + } + + hue /= 6; + + } + + target.h = hue; + target.s = saturation; + target.l = lightness; + + return target; + + } + + getStyle() { + + return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + + } + + offsetHSL( h, s, l ) { + + this.getHSL( _hslA ); + + _hslA.h += h; _hslA.s += s; _hslA.l += l; + + this.setHSL( _hslA.h, _hslA.s, _hslA.l ); + + return this; + + } + + add( color ) { + + this.r += color.r; + this.g += color.g; + this.b += color.b; + + return this; + + } + + addColors( color1, color2 ) { + + this.r = color1.r + color2.r; + this.g = color1.g + color2.g; + this.b = color1.b + color2.b; + + return this; + + } + + addScalar( s ) { + + this.r += s; + this.g += s; + this.b += s; + + return this; + + } + + sub( color ) { + + this.r = Math.max( 0, this.r - color.r ); + this.g = Math.max( 0, this.g - color.g ); + this.b = Math.max( 0, this.b - color.b ); + + return this; + + } + + multiply( color ) { + + this.r *= color.r; + this.g *= color.g; + this.b *= color.b; + + return this; + + } + + multiplyScalar( s ) { + + this.r *= s; + this.g *= s; + this.b *= s; + + return this; + + } + + lerp( color, alpha ) { + + this.r += ( color.r - this.r ) * alpha; + this.g += ( color.g - this.g ) * alpha; + this.b += ( color.b - this.b ) * alpha; + + return this; + + } + + lerpHSL( color, alpha ) { + + this.getHSL( _hslA ); + color.getHSL( _hslB ); + + const h = MathUtils.lerp( _hslA.h, _hslB.h, alpha ); + const s = MathUtils.lerp( _hslA.s, _hslB.s, alpha ); + const l = MathUtils.lerp( _hslA.l, _hslB.l, alpha ); + + this.setHSL( h, s, l ); + + return this; + + } + + equals( c ) { + + return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); + + } + + fromArray( array, offset = 0 ) { + + this.r = array[ offset ]; + this.g = array[ offset + 1 ]; + this.b = array[ offset + 2 ]; + + return this; + + } + + toArray( array = [], offset = 0 ) { + + array[ offset ] = this.r; + array[ offset + 1 ] = this.g; + array[ offset + 2 ] = this.b; + + return array; + + } + + fromBufferAttribute( attribute, index ) { + + this.r = attribute.getX( index ); + this.g = attribute.getY( index ); + this.b = attribute.getZ( index ); + + if ( attribute.normalized === true ) { + + // assuming Uint8Array + + this.r /= 255; + this.g /= 255; + this.b /= 255; + + } + + return this; + + } + + toJSON() { + + return this.getHex(); + + } + + } + + Color.NAMES = _colorKeywords; + Color.prototype.r = 1; + Color.prototype.g = 1; + Color.prototype.b = 1; + + class Face3 { + + constructor( a, b, c, normal, color, materialIndex = 0 ) { + + this.a = a; + this.b = b; + this.c = c; + + this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); + this.vertexNormals = Array.isArray( normal ) ? normal : []; + + this.color = ( color && color.isColor ) ? color : new Color(); + this.vertexColors = Array.isArray( color ) ? color : []; + + this.materialIndex = materialIndex; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( source ) { + + this.a = source.a; + this.b = source.b; + this.c = source.c; + + this.normal.copy( source.normal ); + this.color.copy( source.color ); + + this.materialIndex = source.materialIndex; + + for ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) { + + this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); + + } + + for ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) { + + this.vertexColors[ i ] = source.vertexColors[ i ].clone(); + + } + + return this; + + } + + } + + let materialId = 0; + + function Material() { + + Object.defineProperty( this, 'id', { value: materialId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Material'; + + this.fog = true; + + this.blending = NormalBlending; + this.side = FrontSide; + this.flatShading = false; + this.vertexColors = false; + + this.opacity = 1; + this.transparent = false; + + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + + this.depthFunc = LessEqualDepth; + this.depthTest = true; + this.depthWrite = true; + + this.stencilWriteMask = 0xff; + this.stencilFunc = AlwaysStencilFunc; + this.stencilRef = 0; + this.stencilFuncMask = 0xff; + this.stencilFail = KeepStencilOp; + this.stencilZFail = KeepStencilOp; + this.stencilZPass = KeepStencilOp; + this.stencilWrite = false; + + this.clippingPlanes = null; + this.clipIntersection = false; + this.clipShadows = false; + + this.shadowSide = null; + + this.colorWrite = true; + + this.precision = null; // override the renderer's default precision for this material + + this.polygonOffset = false; + this.polygonOffsetFactor = 0; + this.polygonOffsetUnits = 0; + + this.dithering = false; + + this.alphaTest = 0; + this.premultipliedAlpha = false; + + this.visible = true; + + this.toneMapped = true; + + this.userData = {}; + + this.version = 0; + + } + + Material.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { + + constructor: Material, + + isMaterial: true, + + onBeforeCompile: function ( /* shaderobject, renderer */ ) {}, + + customProgramCacheKey: function () { + + return this.onBeforeCompile.toString(); + + }, + + setValues: function ( values ) { + + if ( values === undefined ) return; + + for ( const key in values ) { + + const newValue = values[ key ]; + + if ( newValue === undefined ) { + + console.warn( 'THREE.Material: \'' + key + '\' parameter is undefined.' ); + continue; + + } + + // for backward compatability if shading is set in the constructor + if ( key === 'shading' ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( newValue === FlatShading ) ? true : false; + continue; + + } + + const currentValue = this[ key ]; + + if ( currentValue === undefined ) { + + console.warn( 'THREE.' + this.type + ': \'' + key + '\' is not a property of this material.' ); + continue; + + } + + if ( currentValue && currentValue.isColor ) { + + currentValue.set( newValue ); + + } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { + + currentValue.copy( newValue ); + + } else { + + this[ key ] = newValue; + + } + + } + + }, + + toJSON: function ( meta ) { + + const isRoot = ( meta === undefined || typeof meta === 'string' ); + + if ( isRoot ) { + + meta = { + textures: {}, + images: {} + }; + + } + + const data = { + metadata: { + version: 4.5, + type: 'Material', + generator: 'Material.toJSON' + } + }; + + // standard Material serialization + data.uuid = this.uuid; + data.type = this.type; + + if ( this.name !== '' ) data.name = this.name; + + if ( this.color && this.color.isColor ) data.color = this.color.getHex(); + + if ( this.roughness !== undefined ) data.roughness = this.roughness; + if ( this.metalness !== undefined ) data.metalness = this.metalness; + + if ( this.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex(); + if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); + if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity; + + if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex(); + if ( this.shininess !== undefined ) data.shininess = this.shininess; + if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat; + if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness; + + if ( this.clearcoatMap && this.clearcoatMap.isTexture ) { + + data.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid; + + } + + if ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) { + + data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid; + + } + + if ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) { + + data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid; + data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); + + } + + if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid; + if ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid; + if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid; + if ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid; + + if ( this.aoMap && this.aoMap.isTexture ) { + + data.aoMap = this.aoMap.toJSON( meta ).uuid; + data.aoMapIntensity = this.aoMapIntensity; + + } + + if ( this.bumpMap && this.bumpMap.isTexture ) { + + data.bumpMap = this.bumpMap.toJSON( meta ).uuid; + data.bumpScale = this.bumpScale; + + } + + if ( this.normalMap && this.normalMap.isTexture ) { + + data.normalMap = this.normalMap.toJSON( meta ).uuid; + data.normalMapType = this.normalMapType; + data.normalScale = this.normalScale.toArray(); + + } + + if ( this.displacementMap && this.displacementMap.isTexture ) { + + data.displacementMap = this.displacementMap.toJSON( meta ).uuid; + data.displacementScale = this.displacementScale; + data.displacementBias = this.displacementBias; + + } + + if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; + if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; + + if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; + if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid; + + if ( this.envMap && this.envMap.isTexture ) { + + data.envMap = this.envMap.toJSON( meta ).uuid; + data.reflectivity = this.reflectivity; // Scale behind envMap + data.refractionRatio = this.refractionRatio; + + if ( this.combine !== undefined ) data.combine = this.combine; + if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity; + + } + + if ( this.gradientMap && this.gradientMap.isTexture ) { + + data.gradientMap = this.gradientMap.toJSON( meta ).uuid; + + } + + if ( this.size !== undefined ) data.size = this.size; + if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; + + if ( this.blending !== NormalBlending ) data.blending = this.blending; + if ( this.flatShading === true ) data.flatShading = this.flatShading; + if ( this.side !== FrontSide ) data.side = this.side; + if ( this.vertexColors ) data.vertexColors = true; + + if ( this.opacity < 1 ) data.opacity = this.opacity; + if ( this.transparent === true ) data.transparent = this.transparent; + + data.depthFunc = this.depthFunc; + data.depthTest = this.depthTest; + data.depthWrite = this.depthWrite; + + data.stencilWrite = this.stencilWrite; + data.stencilWriteMask = this.stencilWriteMask; + data.stencilFunc = this.stencilFunc; + data.stencilRef = this.stencilRef; + data.stencilFuncMask = this.stencilFuncMask; + data.stencilFail = this.stencilFail; + data.stencilZFail = this.stencilZFail; + data.stencilZPass = this.stencilZPass; + + // rotation (SpriteMaterial) + if ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation; + + if ( this.polygonOffset === true ) data.polygonOffset = true; + if ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor; + if ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits; + + if ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth; + if ( this.dashSize !== undefined ) data.dashSize = this.dashSize; + if ( this.gapSize !== undefined ) data.gapSize = this.gapSize; + if ( this.scale !== undefined ) data.scale = this.scale; + + if ( this.dithering === true ) data.dithering = true; + + if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest; + if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; + + if ( this.wireframe === true ) data.wireframe = this.wireframe; + if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth; + if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap; + if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin; + + if ( this.morphTargets === true ) data.morphTargets = true; + if ( this.morphNormals === true ) data.morphNormals = true; + if ( this.skinning === true ) data.skinning = true; + + if ( this.visible === false ) data.visible = false; + + if ( this.toneMapped === false ) data.toneMapped = false; + + if ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData; + + // TODO: Copied from Object3D.toJSON + + function extractFromCache( cache ) { + + const values = []; + + for ( const key in cache ) { + + const data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + + return values; + + } + + if ( isRoot ) { + + const textures = extractFromCache( meta.textures ); + const images = extractFromCache( meta.images ); + + if ( textures.length > 0 ) data.textures = textures; + if ( images.length > 0 ) data.images = images; + + } + + return data; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.fog = source.fog; + + this.blending = source.blending; + this.side = source.side; + this.flatShading = source.flatShading; + this.vertexColors = source.vertexColors; + + this.opacity = source.opacity; + this.transparent = source.transparent; + + this.blendSrc = source.blendSrc; + this.blendDst = source.blendDst; + this.blendEquation = source.blendEquation; + this.blendSrcAlpha = source.blendSrcAlpha; + this.blendDstAlpha = source.blendDstAlpha; + this.blendEquationAlpha = source.blendEquationAlpha; + + this.depthFunc = source.depthFunc; + this.depthTest = source.depthTest; + this.depthWrite = source.depthWrite; + + this.stencilWriteMask = source.stencilWriteMask; + this.stencilFunc = source.stencilFunc; + this.stencilRef = source.stencilRef; + this.stencilFuncMask = source.stencilFuncMask; + this.stencilFail = source.stencilFail; + this.stencilZFail = source.stencilZFail; + this.stencilZPass = source.stencilZPass; + this.stencilWrite = source.stencilWrite; + + const srcPlanes = source.clippingPlanes; + let dstPlanes = null; + + if ( srcPlanes !== null ) { + + const n = srcPlanes.length; + dstPlanes = new Array( n ); + + for ( let i = 0; i !== n; ++ i ) { + + dstPlanes[ i ] = srcPlanes[ i ].clone(); + + } + + } + + this.clippingPlanes = dstPlanes; + this.clipIntersection = source.clipIntersection; + this.clipShadows = source.clipShadows; + + this.shadowSide = source.shadowSide; + + this.colorWrite = source.colorWrite; + + this.precision = source.precision; + + this.polygonOffset = source.polygonOffset; + this.polygonOffsetFactor = source.polygonOffsetFactor; + this.polygonOffsetUnits = source.polygonOffsetUnits; + + this.dithering = source.dithering; + + this.alphaTest = source.alphaTest; + this.premultipliedAlpha = source.premultipliedAlpha; + + this.visible = source.visible; + + this.toneMapped = source.toneMapped; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + Object.defineProperty( Material.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * depthTest: , + * depthWrite: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: + * } + */ + + function MeshBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshBasicMaterial'; + + this.color = new Color( 0xffffff ); // emissive + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + + this.setValues( parameters ); + + } + + MeshBasicMaterial.prototype = Object.create( Material.prototype ); + MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; + + MeshBasicMaterial.prototype.isMeshBasicMaterial = true; + + MeshBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + return this; + + }; + + const _vector$3 = new Vector3(); + const _vector2$1 = new Vector2(); + + function BufferAttribute( array, itemSize, normalized ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.name = ''; + + this.array = array; + this.itemSize = itemSize; + this.count = array !== undefined ? array.length / itemSize : 0; + this.normalized = normalized === true; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + } + + Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + Object.assign( BufferAttribute.prototype, { + + isBufferAttribute: true, + + onUploadCallback: function () {}, + + setUsage: function ( value ) { + + this.usage = value; + + return this; + + }, + + copy: function ( source ) { + + this.name = source.name; + this.array = new source.array.constructor( source.array ); + this.itemSize = source.itemSize; + this.count = source.count; + this.normalized = source.normalized; + + this.usage = source.usage; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.itemSize; + index2 *= attribute.itemSize; + + for ( let i = 0, l = this.itemSize; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + copyArray: function ( array ) { + + this.array.set( array ); + + return this; + + }, + + copyColorsArray: function ( colors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = colors.length; i < l; i ++ ) { + + let color = colors[ i ]; + + if ( color === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); + color = new Color(); + + } + + array[ offset ++ ] = color.r; + array[ offset ++ ] = color.g; + array[ offset ++ ] = color.b; + + } + + return this; + + }, + + copyVector2sArray: function ( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); + vector = new Vector2(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + + } + + return this; + + }, + + copyVector3sArray: function ( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); + vector = new Vector3(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + + } + + return this; + + }, + + copyVector4sArray: function ( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); + vector = new Vector4(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + array[ offset ++ ] = vector.w; + + } + + return this; + + }, + + applyMatrix3: function ( m ) { + + if ( this.itemSize === 2 ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector2$1.fromBufferAttribute( this, i ); + _vector2$1.applyMatrix3( m ); + + this.setXY( i, _vector2$1.x, _vector2$1.y ); + + } + + } else if ( this.itemSize === 3 ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.fromBufferAttribute( this, i ); + _vector$3.applyMatrix3( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + } + + return this; + + }, + + applyMatrix4: function ( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.applyMatrix4( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + applyNormalMatrix: function ( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.applyNormalMatrix( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + transformDirection: function ( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.transformDirection( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + set: function ( value, offset = 0 ) { + + this.array.set( value, offset ); + + return this; + + }, + + getX: function ( index ) { + + return this.array[ index * this.itemSize ]; + + }, + + setX: function ( index, x ) { + + this.array[ index * this.itemSize ] = x; + + return this; + + }, + + getY: function ( index ) { + + return this.array[ index * this.itemSize + 1 ]; + + }, + + setY: function ( index, y ) { + + this.array[ index * this.itemSize + 1 ] = y; + + return this; + + }, + + getZ: function ( index ) { + + return this.array[ index * this.itemSize + 2 ]; + + }, + + setZ: function ( index, z ) { + + this.array[ index * this.itemSize + 2 ] = z; + + return this; + + }, + + getW: function ( index ) { + + return this.array[ index * this.itemSize + 3 ]; + + }, + + setW: function ( index, w ) { + + this.array[ index * this.itemSize + 3 ] = w; + + return this; + + }, + + setXY: function ( index, x, y ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + this.array[ index + 3 ] = w; + + return this; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + clone: function () { + + return new this.constructor( this.array, this.itemSize ).copy( this ); + + }, + + toJSON: function () { + + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call( this.array ), + normalized: this.normalized + }; + + } + + } ); + + // + + function Int8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int8Array( array ), itemSize, normalized ); + + } + + Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; + + + function Uint8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized ); + + } + + Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; + + + function Uint8ClampedBufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized ); + + } + + Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; + + + function Int16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int16Array( array ), itemSize, normalized ); + + } + + Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; + + + function Uint16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); + + } + + Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; + + + function Int32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int32Array( array ), itemSize, normalized ); + + } + + Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; + + + function Uint32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized ); + + } + + Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; + + function Float16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); + + } + + Float16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float16BufferAttribute.prototype.constructor = Float16BufferAttribute; + Float16BufferAttribute.prototype.isFloat16BufferAttribute = true; + + function Float32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float32Array( array ), itemSize, normalized ); + + } + + Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; + + + function Float64BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float64Array( array ), itemSize, normalized ); + + } + + Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; + + class DirectGeometry { + + constructor() { + + this.vertices = []; + this.normals = []; + this.colors = []; + this.uvs = []; + this.uvs2 = []; + + this.groups = []; + + this.morphTargets = {}; + + this.skinWeights = []; + this.skinIndices = []; + + // this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.verticesNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.uvsNeedUpdate = false; + this.groupsNeedUpdate = false; + + } + + computeGroups( geometry ) { + + const groups = []; + + let group, i; + let materialIndex = undefined; + + const faces = geometry.faces; + + for ( i = 0; i < faces.length; i ++ ) { + + const face = faces[ i ]; + + // materials + + if ( face.materialIndex !== materialIndex ) { + + materialIndex = face.materialIndex; + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + group = { + start: i * 3, + materialIndex: materialIndex + }; + + } + + } + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + this.groups = groups; + + } + + fromGeometry( geometry ) { + + const faces = geometry.faces; + const vertices = geometry.vertices; + const faceVertexUvs = geometry.faceVertexUvs; + + const hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; + const hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; + + // morphs + + const morphTargets = geometry.morphTargets; + const morphTargetsLength = morphTargets.length; + + let morphTargetsPosition; + + if ( morphTargetsLength > 0 ) { + + morphTargetsPosition = []; + + for ( let i = 0; i < morphTargetsLength; i ++ ) { + + morphTargetsPosition[ i ] = { + name: morphTargets[ i ].name, + data: [] + }; + + } + + this.morphTargets.position = morphTargetsPosition; + + } + + const morphNormals = geometry.morphNormals; + const morphNormalsLength = morphNormals.length; + + let morphTargetsNormal; + + if ( morphNormalsLength > 0 ) { + + morphTargetsNormal = []; + + for ( let i = 0; i < morphNormalsLength; i ++ ) { + + morphTargetsNormal[ i ] = { + name: morphNormals[ i ].name, + data: [] + }; + + } + + this.morphTargets.normal = morphTargetsNormal; + + } + + // skins + + const skinIndices = geometry.skinIndices; + const skinWeights = geometry.skinWeights; + + const hasSkinIndices = skinIndices.length === vertices.length; + const hasSkinWeights = skinWeights.length === vertices.length; + + // + + if ( vertices.length > 0 && faces.length === 0 ) { + + console.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' ); + + } + + for ( let i = 0; i < faces.length; i ++ ) { + + const face = faces[ i ]; + + this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); + + const vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); + + } else { + + const normal = face.normal; + + this.normals.push( normal, normal, normal ); + + } + + const vertexColors = face.vertexColors; + + if ( vertexColors.length === 3 ) { + + this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); + + } else { + + const color = face.color; + + this.colors.push( color, color, color ); + + } + + if ( hasFaceVertexUv === true ) { + + const vertexUvs = faceVertexUvs[ 0 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); + + this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + if ( hasFaceVertexUv2 === true ) { + + const vertexUvs = faceVertexUvs[ 1 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); + + this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + // morphs + + for ( let j = 0; j < morphTargetsLength; j ++ ) { + + const morphTarget = morphTargets[ j ].vertices; + + morphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); + + } + + for ( let j = 0; j < morphNormalsLength; j ++ ) { + + const morphNormal = morphNormals[ j ].vertexNormals[ i ]; + + morphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c ); + + } + + // skins + + if ( hasSkinIndices ) { + + this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); + + } + + if ( hasSkinWeights ) { + + this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); + + } + + } + + this.computeGroups( geometry ); + + this.verticesNeedUpdate = geometry.verticesNeedUpdate; + this.normalsNeedUpdate = geometry.normalsNeedUpdate; + this.colorsNeedUpdate = geometry.colorsNeedUpdate; + this.uvsNeedUpdate = geometry.uvsNeedUpdate; + this.groupsNeedUpdate = geometry.groupsNeedUpdate; + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + } + + } + + function arrayMax( array ) { + + if ( array.length === 0 ) return - Infinity; + + let max = array[ 0 ]; + + for ( let i = 1, l = array.length; i < l; ++ i ) { + + if ( array[ i ] > max ) max = array[ i ]; + + } + + return max; + + } + + const TYPED_ARRAYS = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + // Workaround for IE11 pre KB2929437. See #11440 + Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }; + + function getTypedArray( type, buffer ) { + + return new TYPED_ARRAYS[ type ]( buffer ); + + } + + let _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id + + const _m1$2 = new Matrix4(); + const _obj = new Object3D(); + const _offset = new Vector3(); + const _box$2 = new Box3(); + const _boxMorphTargets = new Box3(); + const _vector$4 = new Vector3(); + + function BufferGeometry() { + + Object.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'BufferGeometry'; + + this.index = null; + this.attributes = {}; + + this.morphAttributes = {}; + this.morphTargetsRelative = false; + + this.groups = []; + + this.boundingBox = null; + this.boundingSphere = null; + + this.drawRange = { start: 0, count: Infinity }; + + this.userData = {}; + + } + + BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { + + constructor: BufferGeometry, + + isBufferGeometry: true, + + getIndex: function () { + + return this.index; + + }, + + setIndex: function ( index ) { + + if ( Array.isArray( index ) ) { + + this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); + + } else { + + this.index = index; + + } + + return this; + + }, + + getAttribute: function ( name ) { + + return this.attributes[ name ]; + + }, + + setAttribute: function ( name, attribute ) { + + this.attributes[ name ] = attribute; + + return this; + + }, + + deleteAttribute: function ( name ) { + + delete this.attributes[ name ]; + + return this; + + }, + + hasAttribute: function ( name ) { + + return this.attributes[ name ] !== undefined; + + }, + + addGroup: function ( start, count, materialIndex = 0 ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex + + } ); + + }, + + clearGroups: function () { + + this.groups = []; + + }, + + setDrawRange: function ( start, count ) { + + this.drawRange.start = start; + this.drawRange.count = count; + + }, + + applyMatrix4: function ( matrix ) { + + const position = this.attributes.position; + + if ( position !== undefined ) { + + position.applyMatrix4( matrix ); + + position.needsUpdate = true; + + } + + const normal = this.attributes.normal; + + if ( normal !== undefined ) { + + const normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + normal.applyNormalMatrix( normalMatrix ); + + normal.needsUpdate = true; + + } + + const tangent = this.attributes.tangent; + + if ( tangent !== undefined ) { + + tangent.transformDirection( matrix ); + + tangent.needsUpdate = true; + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + return this; + + }, + + rotateX: function ( angle ) { + + // rotate geometry around world x-axis + + _m1$2.makeRotationX( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + rotateY: function ( angle ) { + + // rotate geometry around world y-axis + + _m1$2.makeRotationY( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + rotateZ: function ( angle ) { + + // rotate geometry around world z-axis + + _m1$2.makeRotationZ( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + translate: function ( x, y, z ) { + + // translate geometry + + _m1$2.makeTranslation( x, y, z ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + scale: function ( x, y, z ) { + + // scale geometry + + _m1$2.makeScale( x, y, z ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + lookAt: function ( vector ) { + + _obj.lookAt( vector ); + + _obj.updateMatrix(); + + this.applyMatrix4( _obj.matrix ); + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + this.boundingBox.getCenter( _offset ).negate(); + + this.translate( _offset.x, _offset.y, _offset.z ); + + return this; + + }, + + setFromObject: function ( object ) { + + // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); + + const geometry = object.geometry; + + if ( object.isPoints || object.isLine ) { + + const positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); + const colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); + + this.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); + this.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); + + if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { + + const lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); + + this.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + } else if ( object.isMesh ) { + + if ( geometry && geometry.isGeometry ) { + + this.fromGeometry( geometry ); + + } + + } + + return this; + + }, + + setFromPoints: function ( points ) { + + const position = []; + + for ( let i = 0, l = points.length; i < l; i ++ ) { + + const point = points[ i ]; + position.push( point.x, point.y, point.z || 0 ); + + } + + this.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) ); + + return this; + + }, + + updateFromObject: function ( object ) { + + let geometry = object.geometry; + + if ( object.isMesh ) { + + let direct = geometry.__directGeometry; + + if ( geometry.elementsNeedUpdate === true ) { + + direct = undefined; + geometry.elementsNeedUpdate = false; + + } + + if ( direct === undefined ) { + + return this.fromGeometry( geometry ); + + } + + direct.verticesNeedUpdate = geometry.verticesNeedUpdate; + direct.normalsNeedUpdate = geometry.normalsNeedUpdate; + direct.colorsNeedUpdate = geometry.colorsNeedUpdate; + direct.uvsNeedUpdate = geometry.uvsNeedUpdate; + direct.groupsNeedUpdate = geometry.groupsNeedUpdate; + + geometry.verticesNeedUpdate = false; + geometry.normalsNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.uvsNeedUpdate = false; + geometry.groupsNeedUpdate = false; + + geometry = direct; + + } + + if ( geometry.verticesNeedUpdate === true ) { + + const attribute = this.attributes.position; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.vertices ); + attribute.needsUpdate = true; + + } + + geometry.verticesNeedUpdate = false; + + } + + if ( geometry.normalsNeedUpdate === true ) { + + const attribute = this.attributes.normal; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.normals ); + attribute.needsUpdate = true; + + } + + geometry.normalsNeedUpdate = false; + + } + + if ( geometry.colorsNeedUpdate === true ) { + + const attribute = this.attributes.color; + + if ( attribute !== undefined ) { + + attribute.copyColorsArray( geometry.colors ); + attribute.needsUpdate = true; + + } + + geometry.colorsNeedUpdate = false; + + } + + if ( geometry.uvsNeedUpdate ) { + + const attribute = this.attributes.uv; + + if ( attribute !== undefined ) { + + attribute.copyVector2sArray( geometry.uvs ); + attribute.needsUpdate = true; + + } + + geometry.uvsNeedUpdate = false; + + } + + if ( geometry.lineDistancesNeedUpdate ) { + + const attribute = this.attributes.lineDistance; + + if ( attribute !== undefined ) { + + attribute.copyArray( geometry.lineDistances ); + attribute.needsUpdate = true; + + } + + geometry.lineDistancesNeedUpdate = false; + + } + + if ( geometry.groupsNeedUpdate ) { + + geometry.computeGroups( object.geometry ); + this.groups = geometry.groups; + + geometry.groupsNeedUpdate = false; + + } + + return this; + + }, + + fromGeometry: function ( geometry ) { + + geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); + + return this.fromDirectGeometry( geometry.__directGeometry ); + + }, + + fromDirectGeometry: function ( geometry ) { + + const positions = new Float32Array( geometry.vertices.length * 3 ); + this.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); + + if ( geometry.normals.length > 0 ) { + + const normals = new Float32Array( geometry.normals.length * 3 ); + this.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); + + } + + if ( geometry.colors.length > 0 ) { + + const colors = new Float32Array( geometry.colors.length * 3 ); + this.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); + + } + + if ( geometry.uvs.length > 0 ) { + + const uvs = new Float32Array( geometry.uvs.length * 2 ); + this.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); + + } + + if ( geometry.uvs2.length > 0 ) { + + const uvs2 = new Float32Array( geometry.uvs2.length * 2 ); + this.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); + + } + + // groups + + this.groups = geometry.groups; + + // morphs + + for ( const name in geometry.morphTargets ) { + + const array = []; + const morphTargets = geometry.morphTargets[ name ]; + + for ( let i = 0, l = morphTargets.length; i < l; i ++ ) { + + const morphTarget = morphTargets[ i ]; + + const attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 ); + attribute.name = morphTarget.name; + + array.push( attribute.copyVector3sArray( morphTarget.data ) ); + + } + + this.morphAttributes[ name ] = array; + + } + + // skinning + + if ( geometry.skinIndices.length > 0 ) { + + const skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); + this.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); + + } + + if ( geometry.skinWeights.length > 0 ) { + + const skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); + this.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); + + } + + // + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + const position = this.attributes.position; + const morphAttributesPosition = this.morphAttributes.position; + + if ( position && position.isGLBufferAttribute ) { + + console.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this ); + + this.boundingBox.set( + new Vector3( - Infinity, - Infinity, - Infinity ), + new Vector3( + Infinity, + Infinity, + Infinity ) + ); + + return; + + } + + if ( position !== undefined ) { + + this.boundingBox.setFromBufferAttribute( position ); + + // process morph attributes if present + + if ( morphAttributesPosition ) { + + for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { + + const morphAttribute = morphAttributesPosition[ i ]; + _box$2.setFromBufferAttribute( morphAttribute ); + + if ( this.morphTargetsRelative ) { + + _vector$4.addVectors( this.boundingBox.min, _box$2.min ); + this.boundingBox.expandByPoint( _vector$4 ); + + _vector$4.addVectors( this.boundingBox.max, _box$2.max ); + this.boundingBox.expandByPoint( _vector$4 ); + + } else { + + this.boundingBox.expandByPoint( _box$2.min ); + this.boundingBox.expandByPoint( _box$2.max ); + + } + + } + + } + + } else { + + this.boundingBox.makeEmpty(); + + } + + if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); + + } + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + const position = this.attributes.position; + const morphAttributesPosition = this.morphAttributes.position; + + if ( position && position.isGLBufferAttribute ) { + + console.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this ); + + this.boundingSphere.set( new Vector3(), Infinity ); + + return; + + } + + if ( position ) { + + // first, find the center of the bounding sphere + + const center = this.boundingSphere.center; + + _box$2.setFromBufferAttribute( position ); + + // process morph attributes if present + + if ( morphAttributesPosition ) { + + for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { + + const morphAttribute = morphAttributesPosition[ i ]; + _boxMorphTargets.setFromBufferAttribute( morphAttribute ); + + if ( this.morphTargetsRelative ) { + + _vector$4.addVectors( _box$2.min, _boxMorphTargets.min ); + _box$2.expandByPoint( _vector$4 ); + + _vector$4.addVectors( _box$2.max, _boxMorphTargets.max ); + _box$2.expandByPoint( _vector$4 ); + + } else { + + _box$2.expandByPoint( _boxMorphTargets.min ); + _box$2.expandByPoint( _boxMorphTargets.max ); + + } + + } + + } + + _box$2.getCenter( center ); + + // second, try to find a boundingSphere with a radius smaller than the + // boundingSphere of the boundingBox: sqrt(3) smaller in the best case + + let maxRadiusSq = 0; + + for ( let i = 0, il = position.count; i < il; i ++ ) { + + _vector$4.fromBufferAttribute( position, i ); + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); + + } + + // process morph attributes if present + + if ( morphAttributesPosition ) { + + for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { + + const morphAttribute = morphAttributesPosition[ i ]; + const morphTargetsRelative = this.morphTargetsRelative; + + for ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) { + + _vector$4.fromBufferAttribute( morphAttribute, j ); + + if ( morphTargetsRelative ) { + + _offset.fromBufferAttribute( position, j ); + _vector$4.add( _offset ); + + } + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); + + } + + } + + } + + this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); + + if ( isNaN( this.boundingSphere.radius ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); + + } + + } + + }, + + computeFaceNormals: function () { + + // backwards compatibility + + }, + + computeVertexNormals: function () { + + const index = this.index; + const positionAttribute = this.getAttribute( 'position' ); + + if ( positionAttribute !== undefined ) { + + let normalAttribute = this.getAttribute( 'normal' ); + + if ( normalAttribute === undefined ) { + + normalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 ); + this.setAttribute( 'normal', normalAttribute ); + + } else { + + // reset existing normals to zero + + for ( let i = 0, il = normalAttribute.count; i < il; i ++ ) { + + normalAttribute.setXYZ( i, 0, 0, 0 ); + + } + + } + + const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); + const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); + const cb = new Vector3(), ab = new Vector3(); + + // indexed elements + + if ( index ) { + + for ( let i = 0, il = index.count; i < il; i += 3 ) { + + const vA = index.getX( i + 0 ); + const vB = index.getX( i + 1 ); + const vC = index.getX( i + 2 ); + + pA.fromBufferAttribute( positionAttribute, vA ); + pB.fromBufferAttribute( positionAttribute, vB ); + pC.fromBufferAttribute( positionAttribute, vC ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + nA.fromBufferAttribute( normalAttribute, vA ); + nB.fromBufferAttribute( normalAttribute, vB ); + nC.fromBufferAttribute( normalAttribute, vC ); + + nA.add( cb ); + nB.add( cb ); + nC.add( cb ); + + normalAttribute.setXYZ( vA, nA.x, nA.y, nA.z ); + normalAttribute.setXYZ( vB, nB.x, nB.y, nB.z ); + normalAttribute.setXYZ( vC, nC.x, nC.y, nC.z ); + + } + + } else { + + // non-indexed elements (unconnected triangle soup) + + for ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) { + + pA.fromBufferAttribute( positionAttribute, i + 0 ); + pB.fromBufferAttribute( positionAttribute, i + 1 ); + pC.fromBufferAttribute( positionAttribute, i + 2 ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z ); + normalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z ); + normalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z ); + + } + + } + + this.normalizeNormals(); + + normalAttribute.needsUpdate = true; + + } + + }, + + merge: function ( geometry, offset ) { + + if ( ! ( geometry && geometry.isBufferGeometry ) ) { + + console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); + return; + + } + + if ( offset === undefined ) { + + offset = 0; + + console.warn( + 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.' + ); + + } + + const attributes = this.attributes; + + for ( const key in attributes ) { + + if ( geometry.attributes[ key ] === undefined ) continue; + + const attribute1 = attributes[ key ]; + const attributeArray1 = attribute1.array; + + const attribute2 = geometry.attributes[ key ]; + const attributeArray2 = attribute2.array; + + const attributeOffset = attribute2.itemSize * offset; + const length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset ); + + for ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) { + + attributeArray1[ j ] = attributeArray2[ i ]; + + } + + } + + return this; + + }, + + normalizeNormals: function () { + + const normals = this.attributes.normal; + + for ( let i = 0, il = normals.count; i < il; i ++ ) { + + _vector$4.fromBufferAttribute( normals, i ); + + _vector$4.normalize(); + + normals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z ); + + } + + }, + + toNonIndexed: function () { + + function convertBufferAttribute( attribute, indices ) { + + const array = attribute.array; + const itemSize = attribute.itemSize; + const normalized = attribute.normalized; + + const array2 = new array.constructor( indices.length * itemSize ); + + let index = 0, index2 = 0; + + for ( let i = 0, l = indices.length; i < l; i ++ ) { + + index = indices[ i ] * itemSize; + + for ( let j = 0; j < itemSize; j ++ ) { + + array2[ index2 ++ ] = array[ index ++ ]; + + } + + } + + return new BufferAttribute( array2, itemSize, normalized ); + + } + + // + + if ( this.index === null ) { + + console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' ); + return this; + + } + + const geometry2 = new BufferGeometry(); + + const indices = this.index.array; + const attributes = this.attributes; + + // attributes + + for ( const name in attributes ) { + + const attribute = attributes[ name ]; + + const newAttribute = convertBufferAttribute( attribute, indices ); + + geometry2.setAttribute( name, newAttribute ); + + } + + // morph attributes + + const morphAttributes = this.morphAttributes; + + for ( const name in morphAttributes ) { + + const morphArray = []; + const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes + + for ( let i = 0, il = morphAttribute.length; i < il; i ++ ) { + + const attribute = morphAttribute[ i ]; + + const newAttribute = convertBufferAttribute( attribute, indices ); + + morphArray.push( newAttribute ); + + } + + geometry2.morphAttributes[ name ] = morphArray; + + } + + geometry2.morphTargetsRelative = this.morphTargetsRelative; + + // groups + + const groups = this.groups; + + for ( let i = 0, l = groups.length; i < l; i ++ ) { + + const group = groups[ i ]; + geometry2.addGroup( group.start, group.count, group.materialIndex ); + + } + + return geometry2; + + }, + + toJSON: function () { + + const data = { + metadata: { + version: 4.5, + type: 'BufferGeometry', + generator: 'BufferGeometry.toJSON' + } + }; + + // standard BufferGeometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData; + + if ( this.parameters !== undefined ) { + + const parameters = this.parameters; + + for ( const key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + data.data = { attributes: {} }; + + const index = this.index; + + if ( index !== null ) { + + data.data.index = { + type: index.array.constructor.name, + array: Array.prototype.slice.call( index.array ) + }; + + } + + const attributes = this.attributes; + + for ( const key in attributes ) { + + const attribute = attributes[ key ]; + + const attributeData = attribute.toJSON( data.data ); + + if ( attribute.name !== '' ) attributeData.name = attribute.name; + + data.data.attributes[ key ] = attributeData; + + } + + const morphAttributes = {}; + let hasMorphAttributes = false; + + for ( const key in this.morphAttributes ) { + + const attributeArray = this.morphAttributes[ key ]; + + const array = []; + + for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { + + const attribute = attributeArray[ i ]; + + const attributeData = attribute.toJSON( data.data ); + + if ( attribute.name !== '' ) attributeData.name = attribute.name; + + array.push( attributeData ); + + } + + if ( array.length > 0 ) { + + morphAttributes[ key ] = array; + + hasMorphAttributes = true; + + } + + } + + if ( hasMorphAttributes ) { + + data.data.morphAttributes = morphAttributes; + data.data.morphTargetsRelative = this.morphTargetsRelative; + + } + + const groups = this.groups; + + if ( groups.length > 0 ) { + + data.data.groups = JSON.parse( JSON.stringify( groups ) ); + + } + + const boundingSphere = this.boundingSphere; + + if ( boundingSphere !== null ) { + + data.data.boundingSphere = { + center: boundingSphere.center.toArray(), + radius: boundingSphere.radius + }; + + } + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + const parameters = this.parameters; + + if ( parameters !== undefined ) { + + const values = []; + + for ( const key in parameters ) { + + values.push( parameters[ key ] ); + + } + + const geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new BufferGeometry().copy( this ); + + }, + + copy: function ( source ) { + + // reset + + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + + // used for storing cloned, shared data + + const data = {}; + + // name + + this.name = source.name; + + // index + + const index = source.index; + + if ( index !== null ) { + + this.setIndex( index.clone( data ) ); + + } + + // attributes + + const attributes = source.attributes; + + for ( const name in attributes ) { + + const attribute = attributes[ name ]; + this.setAttribute( name, attribute.clone( data ) ); + + } + + // morph attributes + + const morphAttributes = source.morphAttributes; + + for ( const name in morphAttributes ) { + + const array = []; + const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes + + for ( let i = 0, l = morphAttribute.length; i < l; i ++ ) { + + array.push( morphAttribute[ i ].clone( data ) ); + + } + + this.morphAttributes[ name ] = array; + + } + + this.morphTargetsRelative = source.morphTargetsRelative; + + // groups + + const groups = source.groups; + + for ( let i = 0, l = groups.length; i < l; i ++ ) { + + const group = groups[ i ]; + this.addGroup( group.start, group.count, group.materialIndex ); + + } + + // bounding box + + const boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + const boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // draw range + + this.drawRange.start = source.drawRange.start; + this.drawRange.count = source.drawRange.count; + + // user data + + this.userData = source.userData; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + const _inverseMatrix = new Matrix4(); + const _ray = new Ray(); + const _sphere = new Sphere(); + + const _vA = new Vector3(); + const _vB = new Vector3(); + const _vC = new Vector3(); + + const _tempA = new Vector3(); + const _tempB = new Vector3(); + const _tempC = new Vector3(); + + const _morphA = new Vector3(); + const _morphB = new Vector3(); + const _morphC = new Vector3(); + + const _uvA = new Vector2(); + const _uvB = new Vector2(); + const _uvC = new Vector2(); + + const _intersectionPoint = new Vector3(); + const _intersectionPointWorld = new Vector3(); + + function Mesh( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) { + + Object3D.call( this ); + + this.type = 'Mesh'; + + this.geometry = geometry; + this.material = material; + + this.updateMorphTargets(); + + } + + Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Mesh, + + isMesh: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + if ( source.morphTargetInfluences !== undefined ) { + + this.morphTargetInfluences = source.morphTargetInfluences.slice(); + + } + + if ( source.morphTargetDictionary !== undefined ) { + + this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); + + } + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + updateMorphTargets: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + const morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + const name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + }, + + raycast: function ( raycaster, intersects ) { + + const geometry = this.geometry; + const material = this.material; + const matrixWorld = this.matrixWorld; + + if ( material === undefined ) return; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere.copy( geometry.boundingSphere ); + _sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return; + + // + + _inverseMatrix.copy( matrixWorld ).invert(); + _ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix ); + + // Check boundingBox before continuing + + if ( geometry.boundingBox !== null ) { + + if ( _ray.intersectsBox( geometry.boundingBox ) === false ) return; + + } + + let intersection; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const position = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + const uv = geometry.attributes.uv; + const uv2 = geometry.attributes.uv2; + const groups = geometry.groups; + const drawRange = geometry.drawRange; + + if ( index !== null ) { + + // indexed buffer geometry + + if ( Array.isArray( material ) ) { + + for ( let i = 0, il = groups.length; i < il; i ++ ) { + + const group = groups[ i ]; + const groupMaterial = material[ group.materialIndex ]; + + const start = Math.max( group.start, drawRange.start ); + const end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ); + + for ( let j = start, jl = end; j < jl; j += 3 ) { + + const a = index.getX( j ); + const b = index.getX( j + 1 ); + const c = index.getX( j + 2 ); + + intersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics + intersection.face.materialIndex = group.materialIndex; + intersects.push( intersection ); + + } + + } + + } + + } else { + + const start = Math.max( 0, drawRange.start ); + const end = Math.min( index.count, ( drawRange.start + drawRange.count ) ); + + for ( let i = start, il = end; i < il; i += 3 ) { + + const a = index.getX( i ); + const b = index.getX( i + 1 ); + const c = index.getX( i + 2 ); + + intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } else if ( position !== undefined ) { + + // non-indexed buffer geometry + + if ( Array.isArray( material ) ) { + + for ( let i = 0, il = groups.length; i < il; i ++ ) { + + const group = groups[ i ]; + const groupMaterial = material[ group.materialIndex ]; + + const start = Math.max( group.start, drawRange.start ); + const end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ); + + for ( let j = start, jl = end; j < jl; j += 3 ) { + + const a = j; + const b = j + 1; + const c = j + 2; + + intersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics + intersection.face.materialIndex = group.materialIndex; + intersects.push( intersection ); + + } + + } + + } + + } else { + + const start = Math.max( 0, drawRange.start ); + const end = Math.min( position.count, ( drawRange.start + drawRange.count ) ); + + for ( let i = start, il = end; i < il; i += 3 ) { + + const a = i; + const b = i + 1; + const c = i + 2; + + intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } + + } else if ( geometry.isGeometry ) { + + const isMultiMaterial = Array.isArray( material ); + + const vertices = geometry.vertices; + const faces = geometry.faces; + let uvs; + + const faceVertexUvs = geometry.faceVertexUvs[ 0 ]; + if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; + + for ( let f = 0, fl = faces.length; f < fl; f ++ ) { + + const face = faces[ f ]; + const faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; + + if ( faceMaterial === undefined ) continue; + + const fvA = vertices[ face.a ]; + const fvB = vertices[ face.b ]; + const fvC = vertices[ face.c ]; + + intersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint ); + + if ( intersection ) { + + if ( uvs && uvs[ f ] ) { + + const uvs_f = uvs[ f ]; + _uvA.copy( uvs_f[ 0 ] ); + _uvB.copy( uvs_f[ 1 ] ); + _uvC.copy( uvs_f[ 2 ] ); + + intersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + intersection.face = face; + intersection.faceIndex = f; + intersects.push( intersection ); + + } + + } + + } + + } + + } ); + + function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { + + let intersect; + + if ( material.side === BackSide ) { + + intersect = ray.intersectTriangle( pC, pB, pA, true, point ); + + } else { + + intersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point ); + + } + + if ( intersect === null ) return null; + + _intersectionPointWorld.copy( point ); + _intersectionPointWorld.applyMatrix4( object.matrixWorld ); + + const distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld ); + + if ( distance < raycaster.near || distance > raycaster.far ) return null; + + return { + distance: distance, + point: _intersectionPointWorld.clone(), + object: object + }; + + } + + function checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) { + + _vA.fromBufferAttribute( position, a ); + _vB.fromBufferAttribute( position, b ); + _vC.fromBufferAttribute( position, c ); + + const morphInfluences = object.morphTargetInfluences; + + if ( material.morphTargets && morphPosition && morphInfluences ) { + + _morphA.set( 0, 0, 0 ); + _morphB.set( 0, 0, 0 ); + _morphC.set( 0, 0, 0 ); + + for ( let i = 0, il = morphPosition.length; i < il; i ++ ) { + + const influence = morphInfluences[ i ]; + const morphAttribute = morphPosition[ i ]; + + if ( influence === 0 ) continue; + + _tempA.fromBufferAttribute( morphAttribute, a ); + _tempB.fromBufferAttribute( morphAttribute, b ); + _tempC.fromBufferAttribute( morphAttribute, c ); + + if ( morphTargetsRelative ) { + + _morphA.addScaledVector( _tempA, influence ); + _morphB.addScaledVector( _tempB, influence ); + _morphC.addScaledVector( _tempC, influence ); + + } else { + + _morphA.addScaledVector( _tempA.sub( _vA ), influence ); + _morphB.addScaledVector( _tempB.sub( _vB ), influence ); + _morphC.addScaledVector( _tempC.sub( _vC ), influence ); + + } + + } + + _vA.add( _morphA ); + _vB.add( _morphB ); + _vC.add( _morphC ); + + } + + if ( object.isSkinnedMesh ) { + + object.boneTransform( a, _vA ); + object.boneTransform( b, _vB ); + object.boneTransform( c, _vC ); + + } + + const intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint ); + + if ( intersection ) { + + if ( uv ) { + + _uvA.fromBufferAttribute( uv, a ); + _uvB.fromBufferAttribute( uv, b ); + _uvC.fromBufferAttribute( uv, c ); + + intersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + if ( uv2 ) { + + _uvA.fromBufferAttribute( uv2, a ); + _uvB.fromBufferAttribute( uv2, b ); + _uvC.fromBufferAttribute( uv2, c ); + + intersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + const face = new Face3( a, b, c ); + Triangle.getNormal( _vA, _vB, _vC, face.normal ); + + intersection.face = face; + + } + + return intersection; + + } + + class BoxBufferGeometry extends BufferGeometry { + + constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) { + + super(); + + this.type = 'BoxBufferGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + const scope = this; + + // segments + + widthSegments = Math.floor( widthSegments ); + heightSegments = Math.floor( heightSegments ); + depthSegments = Math.floor( depthSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + let numberOfVertices = 0; + let groupStart = 0; + + // build each side of the box geometry + + buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px + buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx + buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py + buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny + buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz + buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { + + const segmentWidth = width / gridX; + const segmentHeight = height / gridY; + + const widthHalf = width / 2; + const heightHalf = height / 2; + const depthHalf = depth / 2; + + const gridX1 = gridX + 1; + const gridY1 = gridY + 1; + + let vertexCounter = 0; + let groupCount = 0; + + const vector = new Vector3(); + + // generate vertices, normals and uvs + + for ( let iy = 0; iy < gridY1; iy ++ ) { + + const y = iy * segmentHeight - heightHalf; + + for ( let ix = 0; ix < gridX1; ix ++ ) { + + const x = ix * segmentWidth - widthHalf; + + // set values to correct vector component + + vector[ u ] = x * udir; + vector[ v ] = y * vdir; + vector[ w ] = depthHalf; + + // now apply vector to vertex buffer + + vertices.push( vector.x, vector.y, vector.z ); + + // set values to correct vector component + + vector[ u ] = 0; + vector[ v ] = 0; + vector[ w ] = depth > 0 ? 1 : - 1; + + // now apply vector to normal buffer + + normals.push( vector.x, vector.y, vector.z ); + + // uvs + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + // counters + + vertexCounter += 1; + + } + + } + + // indices + + // 1. you need three indices to draw a single face + // 2. a single segment consists of two faces + // 3. so we need to generate six (2*3) indices per segment + + for ( let iy = 0; iy < gridY; iy ++ ) { + + for ( let ix = 0; ix < gridX; ix ++ ) { + + const a = numberOfVertices + ix + gridX1 * iy; + const b = numberOfVertices + ix + gridX1 * ( iy + 1 ); + const c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 ); + const d = numberOfVertices + ( ix + 1 ) + gridX1 * iy; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // increase counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, materialIndex ); + + // calculate new start value for groups + + groupStart += groupCount; + + // update total number of vertices + + numberOfVertices += vertexCounter; + + } + + } + + } + + /** + * Uniform Utilities + */ + + function cloneUniforms( src ) { + + const dst = {}; + + for ( const u in src ) { + + dst[ u ] = {}; + + for ( const p in src[ u ] ) { + + const property = src[ u ][ p ]; + + if ( property && ( property.isColor || + property.isMatrix3 || property.isMatrix4 || + property.isVector2 || property.isVector3 || property.isVector4 || + property.isTexture ) ) { + + dst[ u ][ p ] = property.clone(); + + } else if ( Array.isArray( property ) ) { + + dst[ u ][ p ] = property.slice(); + + } else { + + dst[ u ][ p ] = property; + + } + + } + + } + + return dst; + + } + + function mergeUniforms( uniforms ) { + + const merged = {}; + + for ( let u = 0; u < uniforms.length; u ++ ) { + + const tmp = cloneUniforms( uniforms[ u ] ); + + for ( const p in tmp ) { + + merged[ p ] = tmp[ p ]; + + } + + } + + return merged; + + } + + // Legacy + + const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; + + var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; + + var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; + + /** + * parameters = { + * defines: { "label" : "value" }, + * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, + * + * fragmentShader: , + * vertexShader: , + * + * wireframe: , + * wireframeLinewidth: , + * + * lights: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function ShaderMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShaderMaterial'; + + this.defines = {}; + this.uniforms = {}; + + this.vertexShader = default_vertex; + this.fragmentShader = default_fragment; + + this.linewidth = 1; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; // set to use scene fog + this.lights = false; // set to use scene lights + this.clipping = false; // set to use user-defined clipping planes + + this.skinning = false; // set to use skinning attribute streams + this.morphTargets = false; // set to use morph targets + this.morphNormals = false; // set to use morph normals + + this.extensions = { + derivatives: false, // set to use derivatives + fragDepth: false, // set to use fragment depth values + drawBuffers: false, // set to use draw buffers + shaderTextureLOD: false // set to use shader texture LOD + }; + + // When rendered geometry doesn't include these attributes but the material does, + // use these default values in WebGL. This avoids errors when buffer data is missing. + this.defaultAttributeValues = { + 'color': [ 1, 1, 1 ], + 'uv': [ 0, 0 ], + 'uv2': [ 0, 0 ] + }; + + this.index0AttributeName = undefined; + this.uniformsNeedUpdate = false; + + this.glslVersion = null; + + if ( parameters !== undefined ) { + + if ( parameters.attributes !== undefined ) { + + console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); + + } + + this.setValues( parameters ); + + } + + } + + ShaderMaterial.prototype = Object.create( Material.prototype ); + ShaderMaterial.prototype.constructor = ShaderMaterial; + + ShaderMaterial.prototype.isShaderMaterial = true; + + ShaderMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + + this.uniforms = cloneUniforms( source.uniforms ); + + this.defines = Object.assign( {}, source.defines ); + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.lights = source.lights; + this.clipping = source.clipping; + + this.skinning = source.skinning; + + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.extensions = Object.assign( {}, source.extensions ); + + this.glslVersion = source.glslVersion; + + return this; + + }; + + ShaderMaterial.prototype.toJSON = function ( meta ) { + + const data = Material.prototype.toJSON.call( this, meta ); + + data.glslVersion = this.glslVersion; + data.uniforms = {}; + + for ( const name in this.uniforms ) { + + const uniform = this.uniforms[ name ]; + const value = uniform.value; + + if ( value && value.isTexture ) { + + data.uniforms[ name ] = { + type: 't', + value: value.toJSON( meta ).uuid + }; + + } else if ( value && value.isColor ) { + + data.uniforms[ name ] = { + type: 'c', + value: value.getHex() + }; + + } else if ( value && value.isVector2 ) { + + data.uniforms[ name ] = { + type: 'v2', + value: value.toArray() + }; + + } else if ( value && value.isVector3 ) { + + data.uniforms[ name ] = { + type: 'v3', + value: value.toArray() + }; + + } else if ( value && value.isVector4 ) { + + data.uniforms[ name ] = { + type: 'v4', + value: value.toArray() + }; + + } else if ( value && value.isMatrix3 ) { + + data.uniforms[ name ] = { + type: 'm3', + value: value.toArray() + }; + + } else if ( value && value.isMatrix4 ) { + + data.uniforms[ name ] = { + type: 'm4', + value: value.toArray() + }; + + } else { + + data.uniforms[ name ] = { + value: value + }; + + // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far + + } + + } + + if ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines; + + data.vertexShader = this.vertexShader; + data.fragmentShader = this.fragmentShader; + + const extensions = {}; + + for ( const key in this.extensions ) { + + if ( this.extensions[ key ] === true ) extensions[ key ] = true; + + } + + if ( Object.keys( extensions ).length > 0 ) data.extensions = extensions; + + return data; + + }; + + function Camera() { + + Object3D.call( this ); + + this.type = 'Camera'; + + this.matrixWorldInverse = new Matrix4(); + + this.projectionMatrix = new Matrix4(); + this.projectionMatrixInverse = new Matrix4(); + + } + + Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Camera, + + isCamera: true, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + this.matrixWorldInverse.copy( source.matrixWorldInverse ); + + this.projectionMatrix.copy( source.projectionMatrix ); + this.projectionMatrixInverse.copy( source.projectionMatrixInverse ); + + return this; + + }, + + getWorldDirection: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Camera: .getWorldDirection() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + const e = this.matrixWorld.elements; + + return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize(); + + }, + + updateMatrixWorld: function ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + this.matrixWorldInverse.copy( this.matrixWorld ).invert(); + + }, + + updateWorldMatrix: function ( updateParents, updateChildren ) { + + Object3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren ); + + this.matrixWorldInverse.copy( this.matrixWorld ).invert(); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + } + + } ); + + function PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) { + + Camera.call( this ); + + this.type = 'PerspectiveCamera'; + + this.fov = fov; + this.zoom = 1; + + this.near = near; + this.far = far; + this.focus = 10; + + this.aspect = aspect; + this.view = null; + + this.filmGauge = 35; // width of the film (default in millimeters) + this.filmOffset = 0; // horizontal film offset (same unit as gauge) + + this.updateProjectionMatrix(); + + } + + PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: PerspectiveCamera, + + isPerspectiveCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.fov = source.fov; + this.zoom = source.zoom; + + this.near = source.near; + this.far = source.far; + this.focus = source.focus; + + this.aspect = source.aspect; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + this.filmGauge = source.filmGauge; + this.filmOffset = source.filmOffset; + + return this; + + }, + + /** + * Sets the FOV by focal length in respect to the current .filmGauge. + * + * The default film gauge is 35, so that the focal length can be specified for + * a 35mm (full frame) camera. + * + * Values for focal length and film gauge must have the same unit. + */ + setFocalLength: function ( focalLength ) { + + // see http://www.bobatkins.com/photography/technical/field_of_view.html + const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + + this.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope ); + this.updateProjectionMatrix(); + + }, + + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength: function () { + + const vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ); + + return 0.5 * this.getFilmHeight() / vExtentSlope; + + }, + + getEffectiveFOV: function () { + + return MathUtils.RAD2DEG * 2 * Math.atan( + Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom ); + + }, + + getFilmWidth: function () { + + // film not completely covered in portrait format (aspect < 1) + return this.filmGauge * Math.min( this.aspect, 1 ); + + }, + + getFilmHeight: function () { + + // film not completely covered in landscape format (aspect > 1) + return this.filmGauge / Math.max( this.aspect, 1 ); + + }, + + /** + * Sets an offset in a larger frustum. This is useful for multi-window or + * multi-monitor/multi-machine setups. + * + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and + * the monitors are in grid like this + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this + * + * const w = 1920; + * const h = 1080; + * const fullWidth = w * 3; + * const fullHeight = h * 2; + * + * --A-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * --B-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * --C-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * --D-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * --E-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * --F-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); + * + * Note there is no reason monitors have to be the same size or in a grid. + */ + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + this.aspect = fullWidth / fullHeight; + + if ( this.view === null ) { + + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + + } + + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + const near = this.near; + let top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom; + let height = 2 * top; + let width = this.aspect * height; + let left = - 0.5 * width; + const view = this.view; + + if ( this.view !== null && this.view.enabled ) { + + const fullWidth = view.fullWidth, + fullHeight = view.fullHeight; + + left += view.offsetX * width / fullWidth; + top -= view.offsetY * height / fullHeight; + width *= view.width / fullWidth; + height *= view.height / fullHeight; + + } + + const skew = this.filmOffset; + if ( skew !== 0 ) left += near * skew / this.getFilmWidth(); + + this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far ); + + this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.fov = this.fov; + data.object.zoom = this.zoom; + + data.object.near = this.near; + data.object.far = this.far; + data.object.focus = this.focus; + + data.object.aspect = this.aspect; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + data.object.filmGauge = this.filmGauge; + data.object.filmOffset = this.filmOffset; + + return data; + + } + + } ); + + const fov = 90, aspect = 1; + + function CubeCamera( near, far, renderTarget ) { + + Object3D.call( this ); + + this.type = 'CubeCamera'; + + if ( renderTarget.isWebGLCubeRenderTarget !== true ) { + + console.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' ); + return; + + } + + this.renderTarget = renderTarget; + + const cameraPX = new PerspectiveCamera( fov, aspect, near, far ); + cameraPX.layers = this.layers; + cameraPX.up.set( 0, - 1, 0 ); + cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); + this.add( cameraPX ); + + const cameraNX = new PerspectiveCamera( fov, aspect, near, far ); + cameraNX.layers = this.layers; + cameraNX.up.set( 0, - 1, 0 ); + cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); + this.add( cameraNX ); + + const cameraPY = new PerspectiveCamera( fov, aspect, near, far ); + cameraPY.layers = this.layers; + cameraPY.up.set( 0, 0, 1 ); + cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); + this.add( cameraPY ); + + const cameraNY = new PerspectiveCamera( fov, aspect, near, far ); + cameraNY.layers = this.layers; + cameraNY.up.set( 0, 0, - 1 ); + cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); + this.add( cameraNY ); + + const cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraPZ.layers = this.layers; + cameraPZ.up.set( 0, - 1, 0 ); + cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); + this.add( cameraPZ ); + + const cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraNZ.layers = this.layers; + cameraNZ.up.set( 0, - 1, 0 ); + cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); + this.add( cameraNZ ); + + this.update = function ( renderer, scene ) { + + if ( this.parent === null ) this.updateMatrixWorld(); + + const currentXrEnabled = renderer.xr.enabled; + const currentRenderTarget = renderer.getRenderTarget(); + + renderer.xr.enabled = false; + + const generateMipmaps = renderTarget.texture.generateMipmaps; + + renderTarget.texture.generateMipmaps = false; + + renderer.setRenderTarget( renderTarget, 0 ); + renderer.render( scene, cameraPX ); + + renderer.setRenderTarget( renderTarget, 1 ); + renderer.render( scene, cameraNX ); + + renderer.setRenderTarget( renderTarget, 2 ); + renderer.render( scene, cameraPY ); + + renderer.setRenderTarget( renderTarget, 3 ); + renderer.render( scene, cameraNY ); + + renderer.setRenderTarget( renderTarget, 4 ); + renderer.render( scene, cameraPZ ); + + renderTarget.texture.generateMipmaps = generateMipmaps; + + renderer.setRenderTarget( renderTarget, 5 ); + renderer.render( scene, cameraNZ ); + + renderer.setRenderTarget( currentRenderTarget ); + + renderer.xr.enabled = currentXrEnabled; + + }; + + } + + CubeCamera.prototype = Object.create( Object3D.prototype ); + CubeCamera.prototype.constructor = CubeCamera; + + function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + images = images !== undefined ? images : []; + mapping = mapping !== undefined ? mapping : CubeReflectionMapping; + format = format !== undefined ? format : RGBFormat; + + Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.flipY = false; + + // Why CubeTexture._needsFlipEnvMap is necessary: + // + // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js) + // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words, + // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly. + + // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped + // and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false) + // when using WebGLCubeRenderTarget.texture as a cube texture. + + this._needsFlipEnvMap = true; + + } + + CubeTexture.prototype = Object.create( Texture.prototype ); + CubeTexture.prototype.constructor = CubeTexture; + + CubeTexture.prototype.isCubeTexture = true; + + Object.defineProperty( CubeTexture.prototype, 'images', { + + get: function () { + + return this.image; + + }, + + set: function ( value ) { + + this.image = value; + + } + + } ); + + function WebGLCubeRenderTarget( size, options, dummy ) { + + if ( Number.isInteger( options ) ) { + + console.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' ); + + options = dummy; + + } + + WebGLRenderTarget.call( this, size, size, options ); + + options = options || {}; + + this.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.texture._needsFlipEnvMap = false; + + } + + WebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype ); + WebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget; + + WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true; + + WebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) { + + this.texture.type = texture.type; + this.texture.format = RGBAFormat; // see #18859 + this.texture.encoding = texture.encoding; + + this.texture.generateMipmaps = texture.generateMipmaps; + this.texture.minFilter = texture.minFilter; + this.texture.magFilter = texture.magFilter; + + const shader = { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: /* glsl */` + + varying vec3 vWorldDirection; + + vec3 transformDirection( in vec3 dir, in mat4 matrix ) { + + return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); + + } + + void main() { + + vWorldDirection = transformDirection( position, modelMatrix ); + + #include + #include + + } + `, + + fragmentShader: /* glsl */` + + uniform sampler2D tEquirect; + + varying vec3 vWorldDirection; + + #include + + void main() { + + vec3 direction = normalize( vWorldDirection ); + + vec2 sampleUV = equirectUv( direction ); + + gl_FragColor = texture2D( tEquirect, sampleUV ); + + } + ` + }; + + const geometry = new BoxBufferGeometry( 5, 5, 5 ); + + const material = new ShaderMaterial( { + + name: 'CubemapFromEquirect', + + uniforms: cloneUniforms( shader.uniforms ), + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader, + side: BackSide, + blending: NoBlending + + } ); + + material.uniforms.tEquirect.value = texture; + + const mesh = new Mesh( geometry, material ); + + const currentMinFilter = texture.minFilter; + + // Avoid blurred poles + if ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter; + + const camera = new CubeCamera( 1, 10, this ); + camera.update( renderer, mesh ); + + texture.minFilter = currentMinFilter; + + mesh.geometry.dispose(); + mesh.material.dispose(); + + return this; + + }; + + WebGLCubeRenderTarget.prototype.clear = function ( renderer, color, depth, stencil ) { + + const currentRenderTarget = renderer.getRenderTarget(); + + for ( let i = 0; i < 6; i ++ ) { + + renderer.setRenderTarget( this, i ); + + renderer.clear( color, depth, stencil ); + + } + + renderer.setRenderTarget( currentRenderTarget ); + + }; + + function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { data: data || null, width: width || 1, height: height || 1 }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + + this.needsUpdate = true; + + } + + DataTexture.prototype = Object.create( Texture.prototype ); + DataTexture.prototype.constructor = DataTexture; + + DataTexture.prototype.isDataTexture = true; + + const _sphere$1 = /*@__PURE__*/ new Sphere(); + const _vector$5 = /*@__PURE__*/ new Vector3(); + + class Frustum { + + constructor( p0, p1, p2, p3, p4, p5 ) { + + this.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() + + ]; + + } + + set( p0, p1, p2, p3, p4, p5 ) { + + const planes = this.planes; + + planes[ 0 ].copy( p0 ); + planes[ 1 ].copy( p1 ); + planes[ 2 ].copy( p2 ); + planes[ 3 ].copy( p3 ); + planes[ 4 ].copy( p4 ); + planes[ 5 ].copy( p5 ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( frustum ) { + + const planes = this.planes; + + for ( let i = 0; i < 6; i ++ ) { + + planes[ i ].copy( frustum.planes[ i ] ); + + } + + return this; + + } + + setFromProjectionMatrix( m ) { + + const planes = this.planes; + const me = m.elements; + const me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; + const me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; + const me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; + const me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; + + planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); + planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); + planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); + planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); + planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); + planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); + + return this; + + } + + intersectsObject( object ) { + + const geometry = object.geometry; + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld ); + + return this.intersectsSphere( _sphere$1 ); + + } + + intersectsSprite( sprite ) { + + _sphere$1.center.set( 0, 0, 0 ); + _sphere$1.radius = 0.7071067811865476; + _sphere$1.applyMatrix4( sprite.matrixWorld ); + + return this.intersectsSphere( _sphere$1 ); + + } + + intersectsSphere( sphere ) { + + const planes = this.planes; + const center = sphere.center; + const negRadius = - sphere.radius; + + for ( let i = 0; i < 6; i ++ ) { + + const distance = planes[ i ].distanceToPoint( center ); + + if ( distance < negRadius ) { + + return false; + + } + + } + + return true; + + } + + intersectsBox( box ) { + + const planes = this.planes; + + for ( let i = 0; i < 6; i ++ ) { + + const plane = planes[ i ]; + + // corner at max distance + + _vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x; + _vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y; + _vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z; + + if ( plane.distanceToPoint( _vector$5 ) < 0 ) { + + return false; + + } + + } + + return true; + + } + + containsPoint( point ) { + + const planes = this.planes; + + for ( let i = 0; i < 6; i ++ ) { + + if ( planes[ i ].distanceToPoint( point ) < 0 ) { + + return false; + + } + + } + + return true; + + } + + } + + function WebGLAnimation() { + + let context = null; + let isAnimating = false; + let animationLoop = null; + let requestId = null; + + function onAnimationFrame( time, frame ) { + + animationLoop( time, frame ); + + requestId = context.requestAnimationFrame( onAnimationFrame ); + + } + + return { + + start: function () { + + if ( isAnimating === true ) return; + if ( animationLoop === null ) return; + + requestId = context.requestAnimationFrame( onAnimationFrame ); + + isAnimating = true; + + }, + + stop: function () { + + context.cancelAnimationFrame( requestId ); + + isAnimating = false; + + }, + + setAnimationLoop: function ( callback ) { + + animationLoop = callback; + + }, + + setContext: function ( value ) { + + context = value; + + } + + }; + + } + + function WebGLAttributes( gl, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + const buffers = new WeakMap(); + + function createBuffer( attribute, bufferType ) { + + const array = attribute.array; + const usage = attribute.usage; + + const buffer = gl.createBuffer(); + + gl.bindBuffer( bufferType, buffer ); + gl.bufferData( bufferType, array, usage ); + + attribute.onUploadCallback(); + + let type = 5126; + + if ( array instanceof Float32Array ) { + + type = 5126; + + } else if ( array instanceof Float64Array ) { + + console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); + + } else if ( array instanceof Uint16Array ) { + + if ( attribute.isFloat16BufferAttribute ) { + + if ( isWebGL2 ) { + + type = 5131; + + } else { + + console.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' ); + + } + + } else { + + type = 5123; + + } + + } else if ( array instanceof Int16Array ) { + + type = 5122; + + } else if ( array instanceof Uint32Array ) { + + type = 5125; + + } else if ( array instanceof Int32Array ) { + + type = 5124; + + } else if ( array instanceof Int8Array ) { + + type = 5120; + + } else if ( array instanceof Uint8Array ) { + + type = 5121; + + } + + return { + buffer: buffer, + type: type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version + }; + + } + + function updateBuffer( buffer, attribute, bufferType ) { + + const array = attribute.array; + const updateRange = attribute.updateRange; + + gl.bindBuffer( bufferType, buffer ); + + if ( updateRange.count === - 1 ) { + + // Not using update ranges + + gl.bufferSubData( bufferType, 0, array ); + + } else { + + if ( isWebGL2 ) { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array, updateRange.offset, updateRange.count ); + + } else { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); + + } + + updateRange.count = - 1; // reset range + + } + + } + + // + + function get( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + return buffers.get( attribute ); + + } + + function remove( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + const data = buffers.get( attribute ); + + if ( data ) { + + gl.deleteBuffer( data.buffer ); + + buffers.delete( attribute ); + + } + + } + + function update( attribute, bufferType ) { + + if ( attribute.isGLBufferAttribute ) { + + const cached = buffers.get( attribute ); + + if ( ! cached || cached.version < attribute.version ) { + + buffers.set( attribute, { + buffer: attribute.buffer, + type: attribute.type, + bytesPerElement: attribute.elementSize, + version: attribute.version + } ); + + } + + return; + + } + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + const data = buffers.get( attribute ); + + if ( data === undefined ) { + + buffers.set( attribute, createBuffer( attribute, bufferType ) ); + + } else if ( data.version < attribute.version ) { + + updateBuffer( data.buffer, attribute, bufferType ); + + data.version = attribute.version; + + } + + } + + return { + + get: get, + remove: remove, + update: update + + }; + + } + + class PlaneBufferGeometry extends BufferGeometry { + + constructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) { + + super(); + this.type = 'PlaneBufferGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + const width_half = width / 2; + const height_half = height / 2; + + const gridX = Math.floor( widthSegments ); + const gridY = Math.floor( heightSegments ); + + const gridX1 = gridX + 1; + const gridY1 = gridY + 1; + + const segment_width = width / gridX; + const segment_height = height / gridY; + + // + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + for ( let iy = 0; iy < gridY1; iy ++ ) { + + const y = iy * segment_height - height_half; + + for ( let ix = 0; ix < gridX1; ix ++ ) { + + const x = ix * segment_width - width_half; + + vertices.push( x, - y, 0 ); + + normals.push( 0, 0, 1 ); + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + } + + } + + for ( let iy = 0; iy < gridY; iy ++ ) { + + for ( let ix = 0; ix < gridX; ix ++ ) { + + const a = ix + gridX1 * iy; + const b = ix + gridX1 * ( iy + 1 ); + const c = ( ix + 1 ) + gridX1 * ( iy + 1 ); + const d = ( ix + 1 ) + gridX1 * iy; + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + } + + var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; + + var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; + + var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif"; + + var 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"; + + var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; + + var begin_vertex = "vec3 transformed = vec3( position );"; + + var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; + + var 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"; + + var 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"; + + var 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"; + + var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; + + var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif"; + + var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif"; + + var color_fragment = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; + + var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; + + var color_pars_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif"; + + var 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"; + + var 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}"; + + var 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"; + + var 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"; + + var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif"; + + var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif"; + + var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; + + var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; + + var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; + + var 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}"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var fog_vertex = "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif"; + + var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif"; + + var 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"; + + var 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"; + + var 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}"; + + var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif"; + + var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; + + var 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"; + + var 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"; + + var 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"; + + var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; + + var 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)"; + + var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; + + var 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)"; + + var 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"; + + var 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}"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif"; + + var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif"; + + var 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"; + + var 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"; + + var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; + + var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; + + var 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"; + + var 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"; + + var 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"; + + var 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;"; + + var 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"; + + var 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"; + + var clearcoat_normal_fragment_begin = "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; + + var 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"; + + var 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"; + + var 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}"; + + var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif"; + + var 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;"; + + var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; + + var 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"; + + var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; + + var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; + + var 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"; + + var 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"; + + var 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"; + + var 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}"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var 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"; + + var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; + + var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; + + var 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; }"; + + var transmissionmap_fragment = "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif"; + + var transmissionmap_pars_fragment = "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif"; + + var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; + + var 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"; + + var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; + + var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; + + var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; + + var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; + + var 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"; + + var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; + + var 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}"; + + var cube_frag = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; + + var cube_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}"; + + var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \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}"; + + var depth_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}"; + + var distanceRGBA_frag = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}"; + + var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}"; + + var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \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 \n\t#include \n}"; + + var equirect_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; + + var linedashed_frag = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshbasic_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var 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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \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 \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var 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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var 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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshmatcap_vert = "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}"; + + var meshtoon_frag = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshtoon_vert = "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; + + var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var 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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var 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 \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; + + var 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 \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}"; + + var 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 \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; + + var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var points_vert = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \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 \n\t#include \n\t#include \n\t#include \n}"; + + var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; + + var shadow_vert = "#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var sprite_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}"; + + var sprite_vert = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \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 \n\t#include \n\t#include \n}"; + + const ShaderChunk = { + alphamap_fragment: alphamap_fragment, + alphamap_pars_fragment: alphamap_pars_fragment, + alphatest_fragment: alphatest_fragment, + aomap_fragment: aomap_fragment, + aomap_pars_fragment: aomap_pars_fragment, + begin_vertex: begin_vertex, + beginnormal_vertex: beginnormal_vertex, + bsdfs: bsdfs, + bumpmap_pars_fragment: bumpmap_pars_fragment, + clipping_planes_fragment: clipping_planes_fragment, + clipping_planes_pars_fragment: clipping_planes_pars_fragment, + clipping_planes_pars_vertex: clipping_planes_pars_vertex, + clipping_planes_vertex: clipping_planes_vertex, + color_fragment: color_fragment, + color_pars_fragment: color_pars_fragment, + color_pars_vertex: color_pars_vertex, + color_vertex: color_vertex, + common: common, + cube_uv_reflection_fragment: cube_uv_reflection_fragment, + defaultnormal_vertex: defaultnormal_vertex, + displacementmap_pars_vertex: displacementmap_pars_vertex, + displacementmap_vertex: displacementmap_vertex, + emissivemap_fragment: emissivemap_fragment, + emissivemap_pars_fragment: emissivemap_pars_fragment, + encodings_fragment: encodings_fragment, + encodings_pars_fragment: encodings_pars_fragment, + envmap_fragment: envmap_fragment, + envmap_common_pars_fragment: envmap_common_pars_fragment, + envmap_pars_fragment: envmap_pars_fragment, + envmap_pars_vertex: envmap_pars_vertex, + envmap_physical_pars_fragment: envmap_physical_pars_fragment, + envmap_vertex: envmap_vertex, + fog_vertex: fog_vertex, + fog_pars_vertex: fog_pars_vertex, + fog_fragment: fog_fragment, + fog_pars_fragment: fog_pars_fragment, + gradientmap_pars_fragment: gradientmap_pars_fragment, + lightmap_fragment: lightmap_fragment, + lightmap_pars_fragment: lightmap_pars_fragment, + lights_lambert_vertex: lights_lambert_vertex, + lights_pars_begin: lights_pars_begin, + lights_toon_fragment: lights_toon_fragment, + lights_toon_pars_fragment: lights_toon_pars_fragment, + lights_phong_fragment: lights_phong_fragment, + lights_phong_pars_fragment: lights_phong_pars_fragment, + lights_physical_fragment: lights_physical_fragment, + lights_physical_pars_fragment: lights_physical_pars_fragment, + lights_fragment_begin: lights_fragment_begin, + lights_fragment_maps: lights_fragment_maps, + lights_fragment_end: lights_fragment_end, + logdepthbuf_fragment: logdepthbuf_fragment, + logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, + logdepthbuf_vertex: logdepthbuf_vertex, + map_fragment: map_fragment, + map_pars_fragment: map_pars_fragment, + map_particle_fragment: map_particle_fragment, + map_particle_pars_fragment: map_particle_pars_fragment, + metalnessmap_fragment: metalnessmap_fragment, + metalnessmap_pars_fragment: metalnessmap_pars_fragment, + morphnormal_vertex: morphnormal_vertex, + morphtarget_pars_vertex: morphtarget_pars_vertex, + morphtarget_vertex: morphtarget_vertex, + normal_fragment_begin: normal_fragment_begin, + normal_fragment_maps: normal_fragment_maps, + normalmap_pars_fragment: normalmap_pars_fragment, + clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, + clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, + clearcoat_pars_fragment: clearcoat_pars_fragment, + packing: packing, + premultiplied_alpha_fragment: premultiplied_alpha_fragment, + project_vertex: project_vertex, + dithering_fragment: dithering_fragment, + dithering_pars_fragment: dithering_pars_fragment, + roughnessmap_fragment: roughnessmap_fragment, + roughnessmap_pars_fragment: roughnessmap_pars_fragment, + shadowmap_pars_fragment: shadowmap_pars_fragment, + shadowmap_pars_vertex: shadowmap_pars_vertex, + shadowmap_vertex: shadowmap_vertex, + shadowmask_pars_fragment: shadowmask_pars_fragment, + skinbase_vertex: skinbase_vertex, + skinning_pars_vertex: skinning_pars_vertex, + skinning_vertex: skinning_vertex, + skinnormal_vertex: skinnormal_vertex, + specularmap_fragment: specularmap_fragment, + specularmap_pars_fragment: specularmap_pars_fragment, + tonemapping_fragment: tonemapping_fragment, + tonemapping_pars_fragment: tonemapping_pars_fragment, + transmissionmap_fragment: transmissionmap_fragment, + transmissionmap_pars_fragment: transmissionmap_pars_fragment, + uv_pars_fragment: uv_pars_fragment, + uv_pars_vertex: uv_pars_vertex, + uv_vertex: uv_vertex, + uv2_pars_fragment: uv2_pars_fragment, + uv2_pars_vertex: uv2_pars_vertex, + uv2_vertex: uv2_vertex, + worldpos_vertex: worldpos_vertex, + + background_frag: background_frag, + background_vert: background_vert, + cube_frag: cube_frag, + cube_vert: cube_vert, + depth_frag: depth_frag, + depth_vert: depth_vert, + distanceRGBA_frag: distanceRGBA_frag, + distanceRGBA_vert: distanceRGBA_vert, + equirect_frag: equirect_frag, + equirect_vert: equirect_vert, + linedashed_frag: linedashed_frag, + linedashed_vert: linedashed_vert, + meshbasic_frag: meshbasic_frag, + meshbasic_vert: meshbasic_vert, + meshlambert_frag: meshlambert_frag, + meshlambert_vert: meshlambert_vert, + meshmatcap_frag: meshmatcap_frag, + meshmatcap_vert: meshmatcap_vert, + meshtoon_frag: meshtoon_frag, + meshtoon_vert: meshtoon_vert, + meshphong_frag: meshphong_frag, + meshphong_vert: meshphong_vert, + meshphysical_frag: meshphysical_frag, + meshphysical_vert: meshphysical_vert, + normal_frag: normal_frag, + normal_vert: normal_vert, + points_frag: points_frag, + points_vert: points_vert, + shadow_frag: shadow_frag, + shadow_vert: shadow_vert, + sprite_frag: sprite_frag, + sprite_vert: sprite_vert + }; + + /** + * Uniforms library for shared webgl shaders + */ + + const UniformsLib = { + + common: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + + map: { value: null }, + uvTransform: { value: new Matrix3() }, + uv2Transform: { value: new Matrix3() }, + + alphaMap: { value: null }, + + }, + + specularmap: { + + specularMap: { value: null }, + + }, + + envmap: { + + envMap: { value: null }, + flipEnvMap: { value: - 1 }, + reflectivity: { value: 1.0 }, + refractionRatio: { value: 0.98 }, + maxMipLevel: { value: 0 } + + }, + + aomap: { + + aoMap: { value: null }, + aoMapIntensity: { value: 1 } + + }, + + lightmap: { + + lightMap: { value: null }, + lightMapIntensity: { value: 1 } + + }, + + emissivemap: { + + emissiveMap: { value: null } + + }, + + bumpmap: { + + bumpMap: { value: null }, + bumpScale: { value: 1 } + + }, + + normalmap: { + + normalMap: { value: null }, + normalScale: { value: new Vector2( 1, 1 ) } + + }, + + displacementmap: { + + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + + }, + + roughnessmap: { + + roughnessMap: { value: null } + + }, + + metalnessmap: { + + metalnessMap: { value: null } + + }, + + gradientmap: { + + gradientMap: { value: null } + + }, + + fog: { + + fogDensity: { value: 0.00025 }, + fogNear: { value: 1 }, + fogFar: { value: 2000 }, + fogColor: { value: new Color( 0xffffff ) } + + }, + + lights: { + + ambientLightColor: { value: [] }, + + lightProbe: { value: [] }, + + directionalLights: { value: [], properties: { + direction: {}, + color: {} + } }, + + directionalLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } }, + + spotLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } }, + + pointLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } }, + + ltc_1: { value: null }, + ltc_2: { value: null } + + }, + + points: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + size: { value: 1.0 }, + scale: { value: 1.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + }, + + sprite: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + center: { value: new Vector2( 0.5, 0.5 ) }, + rotation: { value: 0.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + } + + }; + + const ShaderLib = { + + basic: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + + }, + + lambert: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + + }, + + phong: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + specular: { value: new Color( 0x111111 ) }, + shininess: { value: 30 } + } + ] ), + + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + + }, + + standard: { + + uniforms: 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, + { + emissive: { value: new Color( 0x000000 ) }, + roughness: { value: 1.0 }, + metalness: { value: 0.0 }, + envMapIntensity: { value: 1 } // temporary + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }, + + toon: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshtoon_vert, + fragmentShader: ShaderChunk.meshtoon_frag + + }, + + matcap: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + { + matcap: { value: null } + } + ] ), + + vertexShader: ShaderChunk.meshmatcap_vert, + fragmentShader: ShaderChunk.meshmatcap_frag + + }, + + points: { + + uniforms: mergeUniforms( [ + UniformsLib.points, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + + }, + + dashed: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ] ), + + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + + }, + + depth: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap + ] ), + + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + + }, + + normal: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.normal_vert, + fragmentShader: ShaderChunk.normal_frag + + }, + + sprite: { + + uniforms: mergeUniforms( [ + UniformsLib.sprite, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.sprite_vert, + fragmentShader: ShaderChunk.sprite_frag + + }, + + background: { + + uniforms: { + uvTransform: { value: new Matrix3() }, + t2D: { value: null }, + }, + + vertexShader: ShaderChunk.background_vert, + fragmentShader: ShaderChunk.background_frag + + }, + /* ------------------------------------------------------------------------- + // Cube map shader + ------------------------------------------------------------------------- */ + + cube: { + + uniforms: mergeUniforms( [ + UniformsLib.envmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + + }, + + equirect: { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + + }, + + distanceRGBA: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1000 } + } + ] ), + + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + + }, + + shadow: { + + uniforms: mergeUniforms( [ + UniformsLib.lights, + UniformsLib.fog, + { + color: { value: new Color( 0x00000 ) }, + opacity: { value: 1.0 } + }, + ] ), + + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + + } + + }; + + ShaderLib.physical = { + + uniforms: mergeUniforms( [ + ShaderLib.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatNormalScale: { value: new Vector2( 1, 1 ) }, + clearcoatNormalMap: { value: null }, + sheen: { value: new Color( 0x000000 ) }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }; + + function WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) { + + const clearColor = new Color( 0x000000 ); + let clearAlpha = 0; + + let planeMesh; + let boxMesh; + + let currentBackground = null; + let currentBackgroundVersion = 0; + let currentTonemapping = null; + + function render( renderList, scene, camera, forceClear ) { + + let background = scene.isScene === true ? scene.background : null; + + if ( background && background.isTexture ) { + + background = cubemaps.get( background ); + + } + + // Ignore background in AR + // TODO: Reconsider this. + + const xr = renderer.xr; + const session = xr.getSession && xr.getSession(); + + if ( session && session.environmentBlendMode === 'additive' ) { + + background = null; + + } + + if ( background === null ) { + + setClear( clearColor, clearAlpha ); + + } else if ( background && background.isColor ) { + + setClear( background, 1 ); + forceClear = true; + + } + + if ( renderer.autoClear || forceClear ) { + + renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + + } + + if ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) { + + if ( boxMesh === undefined ) { + + boxMesh = new Mesh( + new BoxBufferGeometry( 1, 1, 1 ), + new ShaderMaterial( { + name: 'BackgroundCubeMaterial', + uniforms: cloneUniforms( ShaderLib.cube.uniforms ), + vertexShader: ShaderLib.cube.vertexShader, + fragmentShader: ShaderLib.cube.fragmentShader, + side: BackSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + boxMesh.geometry.deleteAttribute( 'normal' ); + boxMesh.geometry.deleteAttribute( 'uv' ); + + boxMesh.onBeforeRender = function ( renderer, scene, camera ) { + + this.matrixWorld.copyPosition( camera.matrixWorld ); + + }; + + // enable code injection for non-built-in material + Object.defineProperty( boxMesh.material, 'envMap', { + + get: function () { + + return this.uniforms.envMap.value; + + } + + } ); + + objects.update( boxMesh ); + + } + + if ( background.isWebGLCubeRenderTarget ) { + + // TODO Deprecate + + background = background.texture; + + } + + boxMesh.material.uniforms.envMap.value = background; + boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1; + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + boxMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + // push to the pre-sorted opaque render list + renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null ); + + } else if ( background && background.isTexture ) { + + if ( planeMesh === undefined ) { + + planeMesh = new Mesh( + new PlaneBufferGeometry( 2, 2 ), + new ShaderMaterial( { + name: 'BackgroundMaterial', + uniforms: cloneUniforms( ShaderLib.background.uniforms ), + vertexShader: ShaderLib.background.vertexShader, + fragmentShader: ShaderLib.background.fragmentShader, + side: FrontSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + planeMesh.geometry.deleteAttribute( 'normal' ); + + // enable code injection for non-built-in material + Object.defineProperty( planeMesh.material, 'map', { + + get: function () { + + return this.uniforms.t2D.value; + + } + + } ); + + objects.update( planeMesh ); + + } + + planeMesh.material.uniforms.t2D.value = background; + + if ( background.matrixAutoUpdate === true ) { + + background.updateMatrix(); + + } + + planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + planeMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + + // push to the pre-sorted opaque render list + renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null ); + + } + + } + + function setClear( color, alpha ) { + + state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + + } + + return { + + getClearColor: function () { + + return clearColor; + + }, + setClearColor: function ( color, alpha = 1 ) { + + clearColor.set( color ); + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + getClearAlpha: function () { + + return clearAlpha; + + }, + setClearAlpha: function ( alpha ) { + + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + render: render + + }; + + } + + function WebGLBindingStates( gl, extensions, attributes, capabilities ) { + + const maxVertexAttributes = gl.getParameter( 34921 ); + + const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' ); + const vaoAvailable = capabilities.isWebGL2 || extension !== null; + + const bindingStates = {}; + + const defaultState = createBindingState( null ); + let currentState = defaultState; + + function setup( object, material, program, geometry, index ) { + + let updateBuffers = false; + + if ( vaoAvailable ) { + + const state = getBindingState( geometry, program, material ); + + if ( currentState !== state ) { + + currentState = state; + bindVertexArrayObject( currentState.object ); + + } + + updateBuffers = needsUpdate( geometry, index ); + + if ( updateBuffers ) saveCache( geometry, index ); + + } else { + + const wireframe = ( material.wireframe === true ); + + if ( currentState.geometry !== geometry.id || + currentState.program !== program.id || + currentState.wireframe !== wireframe ) { + + currentState.geometry = geometry.id; + currentState.program = program.id; + currentState.wireframe = wireframe; + + updateBuffers = true; + + } + + } + + if ( object.isInstancedMesh === true ) { + + updateBuffers = true; + + } + + if ( index !== null ) { + + attributes.update( index, 34963 ); + + } + + if ( updateBuffers ) { + + setupVertexAttributes( object, material, program, geometry ); + + if ( index !== null ) { + + gl.bindBuffer( 34963, attributes.get( index ).buffer ); + + } + + } + + } + + function createVertexArrayObject() { + + if ( capabilities.isWebGL2 ) return gl.createVertexArray(); + + return extension.createVertexArrayOES(); + + } + + function bindVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao ); + + return extension.bindVertexArrayOES( vao ); + + } + + function deleteVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao ); + + return extension.deleteVertexArrayOES( vao ); + + } + + function getBindingState( geometry, program, material ) { + + const wireframe = ( material.wireframe === true ); + + let programMap = bindingStates[ geometry.id ]; + + if ( programMap === undefined ) { + + programMap = {}; + bindingStates[ geometry.id ] = programMap; + + } + + let stateMap = programMap[ program.id ]; + + if ( stateMap === undefined ) { + + stateMap = {}; + programMap[ program.id ] = stateMap; + + } + + let state = stateMap[ wireframe ]; + + if ( state === undefined ) { + + state = createBindingState( createVertexArrayObject() ); + stateMap[ wireframe ] = state; + + } + + return state; + + } + + function createBindingState( vao ) { + + const newAttributes = []; + const enabledAttributes = []; + const attributeDivisors = []; + + for ( let i = 0; i < maxVertexAttributes; i ++ ) { + + newAttributes[ i ] = 0; + enabledAttributes[ i ] = 0; + attributeDivisors[ i ] = 0; + + } + + return { + + // for backward compatibility on non-VAO support browser + geometry: null, + program: null, + wireframe: false, + + newAttributes: newAttributes, + enabledAttributes: enabledAttributes, + attributeDivisors: attributeDivisors, + object: vao, + attributes: {}, + index: null + + }; + + } + + function needsUpdate( geometry, index ) { + + const cachedAttributes = currentState.attributes; + const geometryAttributes = geometry.attributes; + + let attributesNum = 0; + + for ( const key in geometryAttributes ) { + + const cachedAttribute = cachedAttributes[ key ]; + const geometryAttribute = geometryAttributes[ key ]; + + if ( cachedAttribute === undefined ) return true; + + if ( cachedAttribute.attribute !== geometryAttribute ) return true; + + if ( cachedAttribute.data !== geometryAttribute.data ) return true; + + attributesNum ++; + + } + + if ( currentState.attributesNum !== attributesNum ) return true; + + if ( currentState.index !== index ) return true; + + return false; + + } + + function saveCache( geometry, index ) { + + const cache = {}; + const attributes = geometry.attributes; + let attributesNum = 0; + + for ( const key in attributes ) { + + const attribute = attributes[ key ]; + + const data = {}; + data.attribute = attribute; + + if ( attribute.data ) { + + data.data = attribute.data; + + } + + cache[ key ] = data; + + attributesNum ++; + + } + + currentState.attributes = cache; + currentState.attributesNum = attributesNum; + + currentState.index = index; + + } + + function initAttributes() { + + const newAttributes = currentState.newAttributes; + + for ( let i = 0, il = newAttributes.length; i < il; i ++ ) { + + newAttributes[ i ] = 0; + + } + + } + + function enableAttribute( attribute ) { + + enableAttributeAndDivisor( attribute, 0 ); + + } + + function enableAttributeAndDivisor( attribute, meshPerAttribute ) { + + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + const attributeDivisors = currentState.attributeDivisors; + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { + + const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' ); + + extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute ); + attributeDivisors[ attribute ] = meshPerAttribute; + + } + + } + + function disableUnusedAttributes() { + + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + + for ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) { + + if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + } + + function vertexAttribPointer( index, size, type, normalized, stride, offset ) { + + if ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) { + + gl.vertexAttribIPointer( index, size, type, stride, offset ); + + } else { + + gl.vertexAttribPointer( index, size, type, normalized, stride, offset ); + + } + + } + + function setupVertexAttributes( object, material, program, geometry ) { + + if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) { + + if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return; + + } + + initAttributes(); + + const geometryAttributes = geometry.attributes; + + const programAttributes = program.getAttributes(); + + const materialDefaultAttributeValues = material.defaultAttributeValues; + + for ( const name in programAttributes ) { + + const programAttribute = programAttributes[ name ]; + + if ( programAttribute >= 0 ) { + + const geometryAttribute = geometryAttributes[ name ]; + + if ( geometryAttribute !== undefined ) { + + const normalized = geometryAttribute.normalized; + const size = geometryAttribute.itemSize; + + const attribute = attributes.get( geometryAttribute ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + const bytesPerElement = attribute.bytesPerElement; + + if ( geometryAttribute.isInterleavedBufferAttribute ) { + + const data = geometryAttribute.data; + const stride = data.stride; + const offset = geometryAttribute.offset; + + if ( data && data.isInstancedInterleavedBuffer ) { + + enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = data.meshPerAttribute * data.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement ); + + } else { + + if ( geometryAttribute.isInstancedBufferAttribute ) { + + enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 ); + + } + + } else if ( name === 'instanceMatrix' ) { + + const attribute = attributes.get( object.instanceMatrix ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + + enableAttributeAndDivisor( programAttribute + 0, 1 ); + enableAttributeAndDivisor( programAttribute + 1, 1 ); + enableAttributeAndDivisor( programAttribute + 2, 1 ); + enableAttributeAndDivisor( programAttribute + 3, 1 ); + + gl.bindBuffer( 34962, buffer ); + + gl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 ); + gl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 ); + gl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 ); + gl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 ); + + } else if ( name === 'instanceColor' ) { + + const attribute = attributes.get( object.instanceColor ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + + enableAttributeAndDivisor( programAttribute, 1 ); + + gl.bindBuffer( 34962, buffer ); + + gl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 ); + + } else if ( materialDefaultAttributeValues !== undefined ) { + + const value = materialDefaultAttributeValues[ name ]; + + if ( value !== undefined ) { + + switch ( value.length ) { + + case 2: + gl.vertexAttrib2fv( programAttribute, value ); + break; + + case 3: + gl.vertexAttrib3fv( programAttribute, value ); + break; + + case 4: + gl.vertexAttrib4fv( programAttribute, value ); + break; + + default: + gl.vertexAttrib1fv( programAttribute, value ); + + } + + } + + } + + } + + } + + disableUnusedAttributes(); + + } + + function dispose() { + + reset(); + + for ( const geometryId in bindingStates ) { + + const programMap = bindingStates[ geometryId ]; + + for ( const programId in programMap ) { + + const stateMap = programMap[ programId ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometryId ]; + + } + + } + + function releaseStatesOfGeometry( geometry ) { + + if ( bindingStates[ geometry.id ] === undefined ) return; + + const programMap = bindingStates[ geometry.id ]; + + for ( const programId in programMap ) { + + const stateMap = programMap[ programId ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometry.id ]; + + } + + function releaseStatesOfProgram( program ) { + + for ( const geometryId in bindingStates ) { + + const programMap = bindingStates[ geometryId ]; + + if ( programMap[ program.id ] === undefined ) continue; + + const stateMap = programMap[ program.id ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ program.id ]; + + } + + } + + function reset() { + + resetDefaultState(); + + if ( currentState === defaultState ) return; + + currentState = defaultState; + bindVertexArrayObject( currentState.object ); + + } + + // for backward-compatilibity + + function resetDefaultState() { + + defaultState.geometry = null; + defaultState.program = null; + defaultState.wireframe = false; + + } + + return { + + setup: setup, + reset: reset, + resetDefaultState: resetDefaultState, + dispose: dispose, + releaseStatesOfGeometry: releaseStatesOfGeometry, + releaseStatesOfProgram: releaseStatesOfProgram, + + initAttributes: initAttributes, + enableAttribute: enableAttribute, + disableUnusedAttributes: disableUnusedAttributes + + }; + + } + + function WebGLBufferRenderer( gl, extensions, info, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + let mode; + + function setMode( value ) { + + mode = value; + + } + + function render( start, count ) { + + gl.drawArrays( mode, start, count ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) return; + + let extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawArraysInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawArraysInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, start, count, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + + } + + function WebGLCapabilities( gl, extensions, parameters ) { + + let maxAnisotropy; + + function getMaxAnisotropy() { + + if ( maxAnisotropy !== undefined ) return maxAnisotropy; + + const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension !== null ) { + + maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); + + } else { + + maxAnisotropy = 0; + + } + + return maxAnisotropy; + + } + + function getMaxPrecision( precision ) { + + if ( precision === 'highp' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) { + + return 'highp'; + + } + + precision = 'mediump'; + + } + + if ( precision === 'mediump' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) { + + return 'mediump'; + + } + + } + + return 'lowp'; + + } + + /* eslint-disable no-undef */ + const isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) || + ( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext ); + /* eslint-enable no-undef */ + + let precision = parameters.precision !== undefined ? parameters.precision : 'highp'; + const maxPrecision = getMaxPrecision( precision ); + + if ( maxPrecision !== precision ) { + + console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); + precision = maxPrecision; + + } + + const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; + + const maxTextures = gl.getParameter( 34930 ); + const maxVertexTextures = gl.getParameter( 35660 ); + const maxTextureSize = gl.getParameter( 3379 ); + const maxCubemapSize = gl.getParameter( 34076 ); + + const maxAttributes = gl.getParameter( 34921 ); + const maxVertexUniforms = gl.getParameter( 36347 ); + const maxVaryings = gl.getParameter( 36348 ); + const maxFragmentUniforms = gl.getParameter( 36349 ); + + const vertexTextures = maxVertexTextures > 0; + const floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' ); + const floatVertexTextures = vertexTextures && floatFragmentTextures; + + const maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0; + + return { + + isWebGL2: isWebGL2, + + getMaxAnisotropy: getMaxAnisotropy, + getMaxPrecision: getMaxPrecision, + + precision: precision, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + maxTextures: maxTextures, + maxVertexTextures: maxVertexTextures, + maxTextureSize: maxTextureSize, + maxCubemapSize: maxCubemapSize, + + maxAttributes: maxAttributes, + maxVertexUniforms: maxVertexUniforms, + maxVaryings: maxVaryings, + maxFragmentUniforms: maxFragmentUniforms, + + vertexTextures: vertexTextures, + floatFragmentTextures: floatFragmentTextures, + floatVertexTextures: floatVertexTextures, + + maxSamples: maxSamples + + }; + + } + + function WebGLClipping( properties ) { + + const scope = this; + + let globalState = null, + numGlobalPlanes = 0, + localClippingEnabled = false, + renderingShadows = false; + + const plane = new Plane(), + viewNormalMatrix = new Matrix3(), + + uniform = { value: null, needsUpdate: false }; + + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + + this.init = function ( planes, enableLocalClipping, camera ) { + + const enabled = + planes.length !== 0 || + enableLocalClipping || + // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || + localClippingEnabled; + + localClippingEnabled = enableLocalClipping; + + globalState = projectPlanes( planes, camera, 0 ); + numGlobalPlanes = planes.length; + + return enabled; + + }; + + this.beginShadows = function () { + + renderingShadows = true; + projectPlanes( null ); + + }; + + this.endShadows = function () { + + renderingShadows = false; + resetGlobalState(); + + }; + + this.setState = function ( material, camera, useCache ) { + + const planes = material.clippingPlanes, + clipIntersection = material.clipIntersection, + clipShadows = material.clipShadows; + + const materialProperties = properties.get( material ); + + if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { + + // there's no local clipping + + if ( renderingShadows ) { + + // there's no global clipping + + projectPlanes( null ); + + } else { + + resetGlobalState(); + + } + + } else { + + const nGlobal = renderingShadows ? 0 : numGlobalPlanes, + lGlobal = nGlobal * 4; + + let dstArray = materialProperties.clippingState || null; + + uniform.value = dstArray; // ensure unique state + + dstArray = projectPlanes( planes, camera, lGlobal, useCache ); + + for ( let i = 0; i !== lGlobal; ++ i ) { + + dstArray[ i ] = globalState[ i ]; + + } + + materialProperties.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + + } + + + }; + + function resetGlobalState() { + + if ( uniform.value !== globalState ) { + + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + + } + + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + + } + + function projectPlanes( planes, camera, dstOffset, skipTransform ) { + + const nPlanes = planes !== null ? planes.length : 0; + let dstArray = null; + + if ( nPlanes !== 0 ) { + + dstArray = uniform.value; + + if ( skipTransform !== true || dstArray === null ) { + + const flatSize = dstOffset + nPlanes * 4, + viewMatrix = camera.matrixWorldInverse; + + viewNormalMatrix.getNormalMatrix( viewMatrix ); + + if ( dstArray === null || dstArray.length < flatSize ) { + + dstArray = new Float32Array( flatSize ); + + } + + for ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { + + plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); + + plane.normal.toArray( dstArray, i4 ); + dstArray[ i4 + 3 ] = plane.constant; + + } + + } + + uniform.value = dstArray; + uniform.needsUpdate = true; + + } + + scope.numPlanes = nPlanes; + scope.numIntersection = 0; + + return dstArray; + + } + + } + + function WebGLCubeMaps( renderer ) { + + let cubemaps = new WeakMap(); + + function mapTextureMapping( texture, mapping ) { + + if ( mapping === EquirectangularReflectionMapping ) { + + texture.mapping = CubeReflectionMapping; + + } else if ( mapping === EquirectangularRefractionMapping ) { + + texture.mapping = CubeRefractionMapping; + + } + + return texture; + + } + + function get( texture ) { + + if ( texture && texture.isTexture ) { + + const mapping = texture.mapping; + + if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) { + + if ( cubemaps.has( texture ) ) { + + const cubemap = cubemaps.get( texture ).texture; + return mapTextureMapping( cubemap, texture.mapping ); + + } else { + + const image = texture.image; + + if ( image && image.height > 0 ) { + + const currentRenderList = renderer.getRenderList(); + const currentRenderTarget = renderer.getRenderTarget(); + + const renderTarget = new WebGLCubeRenderTarget( image.height / 2 ); + renderTarget.fromEquirectangularTexture( renderer, texture ); + cubemaps.set( texture, renderTarget ); + + renderer.setRenderTarget( currentRenderTarget ); + renderer.setRenderList( currentRenderList ); + + texture.addEventListener( 'dispose', onTextureDispose ); + + return mapTextureMapping( renderTarget.texture, texture.mapping ); + + } else { + + // image not yet ready. try the conversion next frame + + return null; + + } + + } + + } + + } + + return texture; + + } + + function onTextureDispose( event ) { + + const texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + const cubemap = cubemaps.get( texture ); + + if ( cubemap !== undefined ) { + + cubemaps.delete( texture ); + cubemap.dispose(); + + } + + } + + function dispose() { + + cubemaps = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + function WebGLExtensions( gl ) { + + const extensions = {}; + + return { + + has: function ( name ) { + + if ( extensions[ name ] !== undefined ) { + + return extensions[ name ] !== null; + + } + + let extension; + + switch ( name ) { + + case 'WEBGL_depth_texture': + extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); + break; + + case 'EXT_texture_filter_anisotropic': + extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); + break; + + case 'WEBGL_compressed_texture_s3tc': + extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); + break; + + case 'WEBGL_compressed_texture_pvrtc': + extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + break; + + default: + extension = gl.getExtension( name ); + + } + + extensions[ name ] = extension; + + return extension !== null; + + }, + + get: function ( name ) { + + if ( ! this.has( name ) ) { + + console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); + + } + + return extensions[ name ]; + + } + + }; + + } + + function WebGLGeometries( gl, attributes, info, bindingStates ) { + + const geometries = new WeakMap(); + const wireframeAttributes = new WeakMap(); + + function onGeometryDispose( event ) { + + const geometry = event.target; + const buffergeometry = geometries.get( geometry ); + + if ( buffergeometry.index !== null ) { + + attributes.remove( buffergeometry.index ); + + } + + for ( const name in buffergeometry.attributes ) { + + attributes.remove( buffergeometry.attributes[ name ] ); + + } + + geometry.removeEventListener( 'dispose', onGeometryDispose ); + + geometries.delete( geometry ); + + const attribute = wireframeAttributes.get( buffergeometry ); + + if ( attribute ) { + + attributes.remove( attribute ); + wireframeAttributes.delete( buffergeometry ); + + } + + bindingStates.releaseStatesOfGeometry( buffergeometry ); + + if ( geometry.isInstancedBufferGeometry === true ) { + + delete geometry._maxInstanceCount; + + } + + // + + info.memory.geometries --; + + } + + function get( object, geometry ) { + + let buffergeometry = geometries.get( geometry ); + + if ( buffergeometry ) return buffergeometry; + + geometry.addEventListener( 'dispose', onGeometryDispose ); + + if ( geometry.isBufferGeometry ) { + + buffergeometry = geometry; + + } else if ( geometry.isGeometry ) { + + if ( geometry._bufferGeometry === undefined ) { + + geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); + + } + + buffergeometry = geometry._bufferGeometry; + + } + + geometries.set( geometry, buffergeometry ); + + info.memory.geometries ++; + + return buffergeometry; + + } + + function update( geometry ) { + + const geometryAttributes = geometry.attributes; + + // Updating index buffer in VAO now. See WebGLBindingStates. + + for ( const name in geometryAttributes ) { + + attributes.update( geometryAttributes[ name ], 34962 ); + + } + + // morph targets + + const morphAttributes = geometry.morphAttributes; + + for ( const name in morphAttributes ) { + + const array = morphAttributes[ name ]; + + for ( let i = 0, l = array.length; i < l; i ++ ) { + + attributes.update( array[ i ], 34962 ); + + } + + } + + } + + function updateWireframeAttribute( geometry ) { + + const indices = []; + + const geometryIndex = geometry.index; + const geometryPosition = geometry.attributes.position; + let version = 0; + + if ( geometryIndex !== null ) { + + const array = geometryIndex.array; + version = geometryIndex.version; + + for ( let i = 0, l = array.length; i < l; i += 3 ) { + + const a = array[ i + 0 ]; + const b = array[ i + 1 ]; + const c = array[ i + 2 ]; + + indices.push( a, b, b, c, c, a ); + + } + + } else { + + const array = geometryPosition.array; + version = geometryPosition.version; + + for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { + + const a = i + 0; + const b = i + 1; + const c = i + 2; + + indices.push( a, b, b, c, c, a ); + + } + + } + + const attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); + attribute.version = version; + + // Updating index buffer in VAO now. See WebGLBindingStates + + // + + const previousAttribute = wireframeAttributes.get( geometry ); + + if ( previousAttribute ) attributes.remove( previousAttribute ); + + // + + wireframeAttributes.set( geometry, attribute ); + + } + + function getWireframeAttribute( geometry ) { + + const currentAttribute = wireframeAttributes.get( geometry ); + + if ( currentAttribute ) { + + const geometryIndex = geometry.index; + + if ( geometryIndex !== null ) { + + // if the attribute is obsolete, create a new one + + if ( currentAttribute.version < geometryIndex.version ) { + + updateWireframeAttribute( geometry ); + + } + + } + + } else { + + updateWireframeAttribute( geometry ); + + } + + return wireframeAttributes.get( geometry ); + + } + + return { + + get: get, + update: update, + + getWireframeAttribute: getWireframeAttribute + + }; + + } + + function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + let mode; + + function setMode( value ) { + + mode = value; + + } + + let type, bytesPerElement; + + function setIndex( value ) { + + type = value.type; + bytesPerElement = value.bytesPerElement; + + } + + function render( start, count ) { + + gl.drawElements( mode, count, type, start * bytesPerElement ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) return; + + let extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawElementsInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawElementsInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + + } + + function WebGLInfo( gl ) { + + const memory = { + geometries: 0, + textures: 0 + }; + + const render = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + + function update( count, mode, instanceCount ) { + + render.calls ++; + + switch ( mode ) { + + case 4: + render.triangles += instanceCount * ( count / 3 ); + break; + + case 1: + render.lines += instanceCount * ( count / 2 ); + break; + + case 3: + render.lines += instanceCount * ( count - 1 ); + break; + + case 2: + render.lines += instanceCount * count; + break; + + case 0: + render.points += instanceCount * count; + break; + + default: + console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode ); + break; + + } + + } + + function reset() { + + render.frame ++; + render.calls = 0; + render.triangles = 0; + render.points = 0; + render.lines = 0; + + } + + return { + memory: memory, + render: render, + programs: null, + autoReset: true, + reset: reset, + update: update + }; + + } + + function numericalSort( a, b ) { + + return a[ 0 ] - b[ 0 ]; + + } + + function absNumericalSort( a, b ) { + + return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); + + } + + function WebGLMorphtargets( gl ) { + + const influencesList = {}; + const morphInfluences = new Float32Array( 8 ); + + const workInfluences = []; + + for ( let i = 0; i < 8; i ++ ) { + + workInfluences[ i ] = [ i, 0 ]; + + } + + function update( object, geometry, material, program ) { + + const objectInfluences = object.morphTargetInfluences; + + // When object doesn't have morph target influences defined, we treat it as a 0-length array + // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences + + const length = objectInfluences === undefined ? 0 : objectInfluences.length; + + let influences = influencesList[ geometry.id ]; + + if ( influences === undefined ) { + + // initialise list + + influences = []; + + for ( let i = 0; i < length; i ++ ) { + + influences[ i ] = [ i, 0 ]; + + } + + influencesList[ geometry.id ] = influences; + + } + + // Collect influences + + for ( let i = 0; i < length; i ++ ) { + + const influence = influences[ i ]; + + influence[ 0 ] = i; + influence[ 1 ] = objectInfluences[ i ]; + + } + + influences.sort( absNumericalSort ); + + for ( let i = 0; i < 8; i ++ ) { + + if ( i < length && influences[ i ][ 1 ] ) { + + workInfluences[ i ][ 0 ] = influences[ i ][ 0 ]; + workInfluences[ i ][ 1 ] = influences[ i ][ 1 ]; + + } else { + + workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER; + workInfluences[ i ][ 1 ] = 0; + + } + + } + + workInfluences.sort( numericalSort ); + + const morphTargets = material.morphTargets && geometry.morphAttributes.position; + const morphNormals = material.morphNormals && geometry.morphAttributes.normal; + + let morphInfluencesSum = 0; + + for ( let i = 0; i < 8; i ++ ) { + + const influence = workInfluences[ i ]; + const index = influence[ 0 ]; + const value = influence[ 1 ]; + + if ( index !== Number.MAX_SAFE_INTEGER && value ) { + + if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) { + + geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] ); + + } + + if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) { + + geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] ); + + } + + morphInfluences[ i ] = value; + morphInfluencesSum += value; + + } else { + + if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) { + + geometry.deleteAttribute( 'morphTarget' + i ); + + } + + if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) { + + geometry.deleteAttribute( 'morphNormal' + i ); + + } + + morphInfluences[ i ] = 0; + + } + + } + + // GLSL shader uses formula baseinfluence * base + sum(target * influence) + // This allows us to switch between absolute morphs and relative morphs without changing shader code + // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) + const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + + program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); + program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); + + } + + return { + + update: update + + }; + + } + + function WebGLObjects( gl, geometries, attributes, info ) { + + let updateMap = new WeakMap(); + + function update( object ) { + + const frame = info.render.frame; + + const geometry = object.geometry; + const buffergeometry = geometries.get( object, geometry ); + + // Update once per frame + + if ( updateMap.get( buffergeometry ) !== frame ) { + + if ( geometry.isGeometry ) { + + buffergeometry.updateFromObject( object ); + + } + + geometries.update( buffergeometry ); + + updateMap.set( buffergeometry, frame ); + + } + + if ( object.isInstancedMesh ) { + + if ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) { + + object.addEventListener( 'dispose', onInstancedMeshDispose ); + + } + + attributes.update( object.instanceMatrix, 34962 ); + + if ( object.instanceColor !== null ) { + + attributes.update( object.instanceColor, 34962 ); + + } + + } + + return buffergeometry; + + } + + function dispose() { + + updateMap = new WeakMap(); + + } + + function onInstancedMeshDispose( event ) { + + const instancedMesh = event.target; + + instancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose ); + + attributes.remove( instancedMesh.instanceMatrix ); + + if ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor ); + + } + + return { + + update: update, + dispose: dispose + + }; + + } + + function DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) { + + Texture.call( this, null ); + + this.image = { data, width, height, depth }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + + this.needsUpdate = true; + + } + + DataTexture2DArray.prototype = Object.create( Texture.prototype ); + DataTexture2DArray.prototype.constructor = DataTexture2DArray; + DataTexture2DArray.prototype.isDataTexture2DArray = true; + + function DataTexture3D( data = null, width = 1, height = 1, depth = 1 ) { + + // We're going to add .setXXX() methods for setting properties later. + // Users can still set in DataTexture3D directly. + // + // const texture = new THREE.DataTexture3D( data, width, height, depth ); + // texture.anisotropy = 16; + // + // See #14839 + + Texture.call( this, null ); + + this.image = { data, width, height, depth }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + + this.needsUpdate = true; + + + } + + DataTexture3D.prototype = Object.create( Texture.prototype ); + DataTexture3D.prototype.constructor = DataTexture3D; + DataTexture3D.prototype.isDataTexture3D = true; + + /** + * Uniforms of a program. + * Those form a tree structure with a special top-level container for the root, + * which you get by calling 'new WebGLUniforms( gl, program )'. + * + * + * Properties of inner nodes including the top-level container: + * + * .seq - array of nested uniforms + * .map - nested uniforms by name + * + * + * Methods of all nodes except the top-level container: + * + * .setValue( gl, value, [textures] ) + * + * uploads a uniform value(s) + * the 'textures' parameter is needed for sampler uniforms + * + * + * Static methods of the top-level container (textures factorizations): + * + * .upload( gl, seq, values, textures ) + * + * sets uniforms in 'seq' to 'values[id].value' + * + * .seqWithValue( seq, values ) : filteredSeq + * + * filters 'seq' entries with corresponding entry in values + * + * + * Methods of the top-level container (textures factorizations): + * + * .setValue( gl, name, value, textures ) + * + * sets uniform with name 'name' to 'value' + * + * .setOptional( gl, obj, prop ) + * + * like .set for an optional property of the object + * + */ + + const emptyTexture = new Texture(); + const emptyTexture2dArray = new DataTexture2DArray(); + const emptyTexture3d = new DataTexture3D(); + const emptyCubeTexture = new CubeTexture(); + + // --- Utilities --- + + // Array Caches (provide typed arrays for temporary by size) + + const arrayCacheF32 = []; + const arrayCacheI32 = []; + + // Float32Array caches used for uploading Matrix uniforms + + const mat4array = new Float32Array( 16 ); + const mat3array = new Float32Array( 9 ); + const mat2array = new Float32Array( 4 ); + + // Flattening for arrays of vectors and matrices + + function flatten( array, nBlocks, blockSize ) { + + const firstElem = array[ 0 ]; + + if ( firstElem <= 0 || firstElem > 0 ) return array; + // unoptimized: ! isNaN( firstElem ) + // see http://jacksondunstan.com/articles/983 + + const n = nBlocks * blockSize; + let r = arrayCacheF32[ n ]; + + if ( r === undefined ) { + + r = new Float32Array( n ); + arrayCacheF32[ n ] = r; + + } + + if ( nBlocks !== 0 ) { + + firstElem.toArray( r, 0 ); + + for ( let i = 1, offset = 0; i !== nBlocks; ++ i ) { + + offset += blockSize; + array[ i ].toArray( r, offset ); + + } + + } + + return r; + + } + + function arraysEqual( a, b ) { + + if ( a.length !== b.length ) return false; + + for ( let i = 0, l = a.length; i < l; i ++ ) { + + if ( a[ i ] !== b[ i ] ) return false; + + } + + return true; + + } + + function copyArray( a, b ) { + + for ( let i = 0, l = b.length; i < l; i ++ ) { + + a[ i ] = b[ i ]; + + } + + } + + // Texture unit allocation + + function allocTexUnits( textures, n ) { + + let r = arrayCacheI32[ n ]; + + if ( r === undefined ) { + + r = new Int32Array( n ); + arrayCacheI32[ n ] = r; + + } + + for ( let i = 0; i !== n; ++ i ) { + + r[ i ] = textures.allocateTextureUnit(); + + } + + return r; + + } + + // --- Setters --- + + // Note: Defining these methods externally, because they come in a bunch + // and this way their names minify. + + // Single scalar + + function setValueV1f( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1f( this.addr, v ); + + cache[ 0 ] = v; + + } + + // Single float vector (from flat array or THREE.VectorN) + + function setValueV2f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { + + gl.uniform2f( this.addr, v.x, v.y ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform2fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + function setValueV3f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { + + gl.uniform3f( this.addr, v.x, v.y, v.z ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + + } + + } else if ( v.r !== undefined ) { + + if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) { + + gl.uniform3f( this.addr, v.r, v.g, v.b ); + + cache[ 0 ] = v.r; + cache[ 1 ] = v.g; + cache[ 2 ] = v.b; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform3fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + function setValueV4f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { + + gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + cache[ 3 ] = v.w; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform4fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + // Single matrix (from flat array or MatrixN) + + function setValueM2( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix2fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat2array.set( elements ); + + gl.uniformMatrix2fv( this.addr, false, mat2array ); + + copyArray( cache, elements ); + + } + + } + + function setValueM3( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix3fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat3array.set( elements ); + + gl.uniformMatrix3fv( this.addr, false, mat3array ); + + copyArray( cache, elements ); + + } + + } + + function setValueM4( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix4fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat4array.set( elements ); + + gl.uniformMatrix4fv( this.addr, false, mat4array ); + + copyArray( cache, elements ); + + } + + } + + // Single texture (2D / Cube) + + function setValueT1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTexture2D( v || emptyTexture, unit ); + + } + + function setValueT2DArray1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture2DArray( v || emptyTexture2dArray, unit ); + + } + + function setValueT3D1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture3D( v || emptyTexture3d, unit ); + + } + + function setValueT6( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTextureCube( v || emptyCubeTexture, unit ); + + } + + // Integer / Boolean vectors or arrays thereof (always flat arrays) + + function setValueV1i( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1i( this.addr, v ); + + cache[ 0 ] = v; + + } + + function setValueV2i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform2iv( this.addr, v ); + + copyArray( cache, v ); + + } + + function setValueV3i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform3iv( this.addr, v ); + + copyArray( cache, v ); + + } + + function setValueV4i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform4iv( this.addr, v ); + + copyArray( cache, v ); + + } + + // uint + + function setValueV1ui( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1ui( this.addr, v ); + + cache[ 0 ] = v; + + } + + // Helper to pick the right setter for the singular case + + function getSingularSetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1f; // FLOAT + case 0x8b50: return setValueV2f; // _VEC2 + case 0x8b51: return setValueV3f; // _VEC3 + case 0x8b52: return setValueV4f; // _VEC4 + + case 0x8b5a: return setValueM2; // _MAT2 + case 0x8b5b: return setValueM3; // _MAT3 + case 0x8b5c: return setValueM4; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4 + + case 0x1405: return setValueV1ui; // UINT + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1; + + case 0x8b5f: // SAMPLER_3D + case 0x8dcb: // INT_SAMPLER_3D + case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D + return setValueT3D1; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6; + + case 0x8dc1: // SAMPLER_2D_ARRAY + case 0x8dcf: // INT_SAMPLER_2D_ARRAY + case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY + case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW + return setValueT2DArray1; + + } + + } + + // Array of scalars + function setValueV1fArray( gl, v ) { + + gl.uniform1fv( this.addr, v ); + + } + + // Integer / Boolean vectors or arrays thereof (always flat arrays) + function setValueV1iArray( gl, v ) { + + gl.uniform1iv( this.addr, v ); + + } + + function setValueV2iArray( gl, v ) { + + gl.uniform2iv( this.addr, v ); + + } + + function setValueV3iArray( gl, v ) { + + gl.uniform3iv( this.addr, v ); + + } + + function setValueV4iArray( gl, v ) { + + gl.uniform4iv( this.addr, v ); + + } + + + // Array of vectors (flat or from THREE classes) + + function setValueV2fArray( gl, v ) { + + const data = flatten( v, this.size, 2 ); + + gl.uniform2fv( this.addr, data ); + + } + + function setValueV3fArray( gl, v ) { + + const data = flatten( v, this.size, 3 ); + + gl.uniform3fv( this.addr, data ); + + } + + function setValueV4fArray( gl, v ) { + + const data = flatten( v, this.size, 4 ); + + gl.uniform4fv( this.addr, data ); + + } + + // Array of matrices (flat or from THREE clases) + + function setValueM2Array( gl, v ) { + + const data = flatten( v, this.size, 4 ); + + gl.uniformMatrix2fv( this.addr, false, data ); + + } + + function setValueM3Array( gl, v ) { + + const data = flatten( v, this.size, 9 ); + + gl.uniformMatrix3fv( this.addr, false, data ); + + } + + function setValueM4Array( gl, v ) { + + const data = flatten( v, this.size, 16 ); + + gl.uniformMatrix4fv( this.addr, false, data ); + + } + + // Array of textures (2D / Cube) + + function setValueT1Array( gl, v, textures ) { + + const n = v.length; + + const units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( let i = 0; i !== n; ++ i ) { + + textures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] ); + + } + + } + + function setValueT6Array( gl, v, textures ) { + + const n = v.length; + + const units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( let i = 0; i !== n; ++ i ) { + + textures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); + + } + + } + + // Helper to pick the right setter for a pure (bottom-level) array + + function getPureArraySetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1fArray; // FLOAT + case 0x8b50: return setValueV2fArray; // _VEC2 + case 0x8b51: return setValueV3fArray; // _VEC3 + case 0x8b52: return setValueV4fArray; // _VEC4 + + case 0x8b5a: return setValueM2Array; // _MAT2 + case 0x8b5b: return setValueM3Array; // _MAT3 + case 0x8b5c: return setValueM4Array; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4 + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1Array; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6Array; + + } + + } + + // --- Uniform Classes --- + + function SingleUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.setValue = getSingularSetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + + } + + function PureArrayUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.size = activeInfo.size; + this.setValue = getPureArraySetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + + } + + PureArrayUniform.prototype.updateCache = function ( data ) { + + const cache = this.cache; + + if ( data instanceof Float32Array && cache.length !== data.length ) { + + this.cache = new Float32Array( data.length ); + + } + + copyArray( cache, data ); + + }; + + function StructuredUniform( id ) { + + this.id = id; + + this.seq = []; + this.map = {}; + + } + + StructuredUniform.prototype.setValue = function ( gl, value, textures ) { + + const seq = this.seq; + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ]; + u.setValue( gl, value[ u.id ], textures ); + + } + + }; + + // --- Top-level --- + + // Parser - builds up the property tree from the path strings + + const RePathPart = /(\w+)(\])?(\[|\.)?/g; + + // extracts + // - the identifier (member name or array index) + // - followed by an optional right bracket (found when array index) + // - followed by an optional left bracket or dot (type of subscript) + // + // Note: These portions can be read in a non-overlapping fashion and + // allow straightforward parsing of the hierarchy that WebGL encodes + // in the uniform names. + + function addUniform( container, uniformObject ) { + + container.seq.push( uniformObject ); + container.map[ uniformObject.id ] = uniformObject; + + } + + function parseUniform( activeInfo, addr, container ) { + + const path = activeInfo.name, + pathLength = path.length; + + // reset RegExp object, because of the early exit of a previous run + RePathPart.lastIndex = 0; + + while ( true ) { + + const match = RePathPart.exec( path ), + matchEnd = RePathPart.lastIndex; + + let id = match[ 1 ]; + const idIsIndex = match[ 2 ] === ']', + subscript = match[ 3 ]; + + if ( idIsIndex ) id = id | 0; // convert to integer + + if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { + + // bare name or "pure" bottom-level array "[0]" suffix + + addUniform( container, subscript === undefined ? + new SingleUniform( id, activeInfo, addr ) : + new PureArrayUniform( id, activeInfo, addr ) ); + + break; + + } else { + + // step into inner node / create it in case it doesn't exist + + const map = container.map; + let next = map[ id ]; + + if ( next === undefined ) { + + next = new StructuredUniform( id ); + addUniform( container, next ); + + } + + container = next; + + } + + } + + } + + // Root Container + + function WebGLUniforms( gl, program ) { + + this.seq = []; + this.map = {}; + + const n = gl.getProgramParameter( program, 35718 ); + + for ( let i = 0; i < n; ++ i ) { + + const info = gl.getActiveUniform( program, i ), + addr = gl.getUniformLocation( program, info.name ); + + parseUniform( info, addr, this ); + + } + + } + + WebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) { + + const u = this.map[ name ]; + + if ( u !== undefined ) u.setValue( gl, value, textures ); + + }; + + WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { + + const v = object[ name ]; + + if ( v !== undefined ) this.setValue( gl, name, v ); + + }; + + + // Static interface + + WebGLUniforms.upload = function ( gl, seq, values, textures ) { + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ], + v = values[ u.id ]; + + if ( v.needsUpdate !== false ) { + + // note: always updating when .needsUpdate is undefined + u.setValue( gl, v.value, textures ); + + } + + } + + }; + + WebGLUniforms.seqWithValue = function ( seq, values ) { + + const r = []; + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ]; + if ( u.id in values ) r.push( u ); + + } + + return r; + + }; + + function WebGLShader( gl, type, string ) { + + const shader = gl.createShader( type ); + + gl.shaderSource( shader, string ); + gl.compileShader( shader ); + + return shader; + + } + + let programIdCount = 0; + + function addLineNumbers( string ) { + + const lines = string.split( '\n' ); + + for ( let i = 0; i < lines.length; i ++ ) { + + lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; + + } + + return lines.join( '\n' ); + + } + + function getEncodingComponents( encoding ) { + + switch ( encoding ) { + + case LinearEncoding: + return [ 'Linear', '( value )' ]; + case sRGBEncoding: + return [ 'sRGB', '( value )' ]; + case RGBEEncoding: + return [ 'RGBE', '( value )' ]; + case RGBM7Encoding: + return [ 'RGBM', '( value, 7.0 )' ]; + case RGBM16Encoding: + return [ 'RGBM', '( value, 16.0 )' ]; + case RGBDEncoding: + return [ 'RGBD', '( value, 256.0 )' ]; + case GammaEncoding: + return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ]; + case LogLuvEncoding: + return [ 'LogLuv', '( value )' ]; + default: + console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding ); + return [ 'Linear', '( value )' ]; + + } + + } + + function getShaderErrors( gl, shader, type ) { + + const status = gl.getShaderParameter( shader, 35713 ); + const log = gl.getShaderInfoLog( shader ).trim(); + + if ( status && log === '' ) return ''; + + // --enable-privileged-webgl-extension + // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); + + const source = gl.getShaderSource( shader ); + + return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\n' + log + addLineNumbers( source ); + + } + + function getTexelDecodingFunction( functionName, encoding ) { + + const components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }'; + + } + + function getTexelEncodingFunction( functionName, encoding ) { + + const components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; + + } + + function getToneMappingFunction( functionName, toneMapping ) { + + let toneMappingName; + + switch ( toneMapping ) { + + case LinearToneMapping: + toneMappingName = 'Linear'; + break; + + case ReinhardToneMapping: + toneMappingName = 'Reinhard'; + break; + + case CineonToneMapping: + toneMappingName = 'OptimizedCineon'; + break; + + case ACESFilmicToneMapping: + toneMappingName = 'ACESFilmic'; + break; + + case CustomToneMapping: + toneMappingName = 'Custom'; + break; + + default: + console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping ); + toneMappingName = 'Linear'; + + } + + return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; + + } + + function generateExtensions( parameters ) { + + const 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' : '' + ]; + + return chunks.filter( filterEmptyLine ).join( '\n' ); + + } + + function generateDefines( defines ) { + + const chunks = []; + + for ( const name in defines ) { + + const value = defines[ name ]; + + if ( value === false ) continue; + + chunks.push( '#define ' + name + ' ' + value ); + + } + + return chunks.join( '\n' ); + + } + + function fetchAttributeLocations( gl, program ) { + + const attributes = {}; + + const n = gl.getProgramParameter( program, 35721 ); + + for ( let i = 0; i < n; i ++ ) { + + const info = gl.getActiveAttrib( program, i ); + const name = info.name; + + // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); + + attributes[ name ] = gl.getAttribLocation( program, name ); + + } + + return attributes; + + } + + function filterEmptyLine( string ) { + + return string !== ''; + + } + + function replaceLightNums( string, parameters ) { + + return 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 ); + + } + + function replaceClippingPlaneNums( string, parameters ) { + + return string + .replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes ) + .replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) ); + + } + + // Resolve Includes + + const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function resolveIncludes( string ) { + + return string.replace( includePattern, includeReplacer ); + + } + + function includeReplacer( match, include ) { + + const string = ShaderChunk[ include ]; + + if ( string === undefined ) { + + throw new Error( 'Can not resolve #include <' + include + '>' ); + + } + + return resolveIncludes( string ); + + } + + // Unroll Loops + + const deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; + const 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; + + function unrollLoops( string ) { + + return string + .replace( unrollLoopPattern, loopReplacer ) + .replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer ); + + } + + function deprecatedLoopReplacer( match, start, end, snippet ) { + + console.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' ); + return loopReplacer( match, start, end, snippet ); + + } + + function loopReplacer( match, start, end, snippet ) { + + let string = ''; + + for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) { + + string += snippet + .replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' ) + .replace( /UNROLLED_LOOP_INDEX/g, i ); + + } + + return string; + + } + + // + + function generatePrecision( parameters ) { + + let precisionstring = 'precision ' + parameters.precision + ' float;\nprecision ' + parameters.precision + ' int;'; + + if ( parameters.precision === 'highp' ) { + + precisionstring += '\n#define HIGH_PRECISION'; + + } else if ( parameters.precision === 'mediump' ) { + + precisionstring += '\n#define MEDIUM_PRECISION'; + + } else if ( parameters.precision === 'lowp' ) { + + precisionstring += '\n#define LOW_PRECISION'; + + } + + return precisionstring; + + } + + function generateShadowMapTypeDefine( parameters ) { + + let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; + + if ( parameters.shadowMapType === PCFShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; + + } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; + + } else if ( parameters.shadowMapType === VSMShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; + + } + + return shadowMapTypeDefine; + + } + + function generateEnvMapTypeDefine( parameters ) { + + let envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + break; + + case CubeUVReflectionMapping: + case CubeUVRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; + break; + + } + + } + + return envMapTypeDefine; + + } + + function generateEnvMapModeDefine( parameters ) { + + let envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeRefractionMapping: + case CubeUVRefractionMapping: + + envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; + break; + + } + + } + + return envMapModeDefine; + + } + + function generateEnvMapBlendingDefine( parameters ) { + + let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; + + if ( parameters.envMap ) { + + switch ( parameters.combine ) { + + case MultiplyOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + break; + + case MixOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; + break; + + case AddOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; + break; + + } + + } + + return envMapBlendingDefine; + + } + + function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { + + const gl = renderer.getContext(); + + const defines = parameters.defines; + + let vertexShader = parameters.vertexShader; + let fragmentShader = parameters.fragmentShader; + + const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters ); + const envMapTypeDefine = generateEnvMapTypeDefine( parameters ); + const envMapModeDefine = generateEnvMapModeDefine( parameters ); + const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters ); + + + const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; + + const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters ); + + const customDefines = generateDefines( defines ); + + const program = gl.createProgram(); + + let prefixVertex, prefixFragment; + let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : ''; + + if ( parameters.isRawShaderMaterial ) { + + prefixVertex = [ + + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixVertex.length > 0 ) { + + prefixVertex += '\n'; + + } + + prefixFragment = [ + + customExtensions, + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixFragment.length > 0 ) { + + prefixFragment += '\n'; + + } + + } else { + + prefixVertex = [ + + 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', + + ' attribute mat4 instanceMatrix;', + + '#endif', + + '#ifdef USE_INSTANCING_COLOR', + + ' attribute vec3 instanceColor;', + + '#endif', + + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + + '#ifdef USE_TANGENT', + + ' attribute vec4 tangent;', + + '#endif', + + '#ifdef USE_COLOR', + + ' attribute vec3 color;', + + '#endif', + + '#ifdef USE_MORPHTARGETS', + + ' attribute vec3 morphTarget0;', + ' attribute vec3 morphTarget1;', + ' attribute vec3 morphTarget2;', + ' attribute vec3 morphTarget3;', + + ' #ifdef USE_MORPHNORMALS', + + ' attribute vec3 morphNormal0;', + ' attribute vec3 morphNormal1;', + ' attribute vec3 morphNormal2;', + ' attribute vec3 morphNormal3;', + + ' #else', + + ' attribute vec3 morphTarget4;', + ' attribute vec3 morphTarget5;', + ' attribute vec3 morphTarget6;', + ' attribute vec3 morphTarget7;', + + ' #endif', + + '#endif', + + '#ifdef USE_SKINNING', + + ' attribute vec4 skinIndex;', + ' attribute vec4 skinWeight;', + + '#endif', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + + generatePrecision( parameters ), + + '#define SHADER_NAME ' + parameters.shaderName, + + customDefines, + + parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer + + '#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 + ( parameters.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 + parameters.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' ); + + } + + vertexShader = resolveIncludes( vertexShader ); + vertexShader = replaceLightNums( vertexShader, parameters ); + vertexShader = replaceClippingPlaneNums( vertexShader, parameters ); + + fragmentShader = resolveIncludes( fragmentShader ); + fragmentShader = replaceLightNums( fragmentShader, parameters ); + fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters ); + + vertexShader = unrollLoops( vertexShader ); + fragmentShader = unrollLoops( fragmentShader ); + + if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) { + + // GLSL 3.0 conversion for built-in materials and ShaderMaterial + + versionString = '#version 300 es\n'; + + prefixVertex = [ + '#define attribute in', + '#define varying out', + '#define texture2D texture' + ].join( '\n' ) + '\n' + prefixVertex; + + prefixFragment = [ + '#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; + + } + + const vertexGlsl = versionString + prefixVertex + vertexShader; + const fragmentGlsl = versionString + prefixFragment + fragmentShader; + + // console.log( '*VERTEX*', vertexGlsl ); + // console.log( '*FRAGMENT*', fragmentGlsl ); + + const glVertexShader = WebGLShader( gl, 35633, vertexGlsl ); + const glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl ); + + gl.attachShader( program, glVertexShader ); + gl.attachShader( program, glFragmentShader ); + + // Force a particular attribute to index 0. + + if ( parameters.index0AttributeName !== undefined ) { + + gl.bindAttribLocation( program, 0, parameters.index0AttributeName ); + + } else if ( parameters.morphTargets === true ) { + + // programs with morphTargets displace position out of attribute 0 + gl.bindAttribLocation( program, 0, 'position' ); + + } + + gl.linkProgram( program ); + + // check for link errors + if ( renderer.debug.checkShaderErrors ) { + + const programLog = gl.getProgramInfoLog( program ).trim(); + const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim(); + const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim(); + + let runnable = true; + let haveDiagnostics = true; + + if ( gl.getProgramParameter( program, 35714 ) === false ) { + + runnable = false; + + const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' ); + const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' ); + + console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors ); + + } else if ( programLog !== '' ) { + + console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); + + } else if ( vertexLog === '' || fragmentLog === '' ) { + + haveDiagnostics = false; + + } + + if ( haveDiagnostics ) { + + this.diagnostics = { + + runnable: runnable, + + programLog: programLog, + + vertexShader: { + + log: vertexLog, + prefix: prefixVertex + + }, + + fragmentShader: { + + log: fragmentLog, + prefix: prefixFragment + + } + + }; + + } + + } + + // Clean up + + // Crashes in iOS9 and iOS10. #18402 + // gl.detachShader( program, glVertexShader ); + // gl.detachShader( program, glFragmentShader ); + + gl.deleteShader( glVertexShader ); + gl.deleteShader( glFragmentShader ); + + // set up caching for uniform locations + + let cachedUniforms; + + this.getUniforms = function () { + + if ( cachedUniforms === undefined ) { + + cachedUniforms = new WebGLUniforms( gl, program ); + + } + + return cachedUniforms; + + }; + + // set up caching for attribute locations + + let cachedAttributes; + + this.getAttributes = function () { + + if ( cachedAttributes === undefined ) { + + cachedAttributes = fetchAttributeLocations( gl, program ); + + } + + return cachedAttributes; + + }; + + // free resource + + this.destroy = function () { + + bindingStates.releaseStatesOfProgram( this ); + + gl.deleteProgram( program ); + this.program = undefined; + + }; + + // + + this.name = parameters.shaderName; + this.id = programIdCount ++; + this.cacheKey = cacheKey; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + + return this; + + } + + function WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) { + + const programs = []; + + const isWebGL2 = capabilities.isWebGL2; + const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; + const floatVertexTextures = capabilities.floatVertexTextures; + const maxVertexUniforms = capabilities.maxVertexUniforms; + const vertexTextures = capabilities.vertexTextures; + + let precision = capabilities.precision; + + const shaderIDs = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'toon', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + MeshMatcapMaterial: 'matcap', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow', + SpriteMaterial: 'sprite' + }; + + const 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' + ]; + + function getMaxBones( object ) { + + const skeleton = object.skeleton; + const bones = skeleton.bones; + + if ( floatVertexTextures ) { + + return 1024; + + } else { + + // default for when object is not specified + // ( for example when prebuilding shader to be used with multiple objects ) + // + // - leave some extra space for other uniforms + // - limit here is ANGLE's 254 max uniform vectors + // (up to 54 should be safe) + + const nVertexUniforms = maxVertexUniforms; + const nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); + + const maxBones = Math.min( nVertexMatrices, bones.length ); + + if ( maxBones < bones.length ) { + + console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); + return 0; + + } + + return maxBones; + + } + + } + + function getTextureEncodingFromMap( map ) { + + let encoding; + + if ( map && map.isTexture ) { + + encoding = map.encoding; + + } else if ( map && map.isWebGLRenderTarget ) { + + console.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\'t use render targets as textures. Use their .texture property instead.' ); + encoding = map.texture.encoding; + + } else { + + encoding = LinearEncoding; + + } + + return encoding; + + } + + function getParameters( material, lights, shadows, scene, object ) { + + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + + const envMap = cubemaps.get( material.envMap || environment ); + + const shaderID = shaderIDs[ material.type ]; + + // heuristics to create shader parameters according to lights in the scene + // (not to blow over maxLights budget) + + const maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0; + + if ( material.precision !== null ) { + + precision = capabilities.getMaxPrecision( material.precision ); + + if ( precision !== material.precision ) { + + console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); + + } + + } + + let vertexShader, fragmentShader; + + if ( shaderID ) { + + const shader = ShaderLib[ shaderID ]; + + vertexShader = shader.vertexShader; + fragmentShader = shader.fragmentShader; + + } else { + + vertexShader = material.vertexShader; + fragmentShader = material.fragmentShader; + + } + + const currentRenderTarget = renderer.getRenderTarget(); + + const parameters = { + + isWebGL2: isWebGL2, + + shaderID: shaderID, + shaderName: material.type, + + vertexShader: vertexShader, + fragmentShader: fragmentShader, + defines: material.defines, + + isRawShaderMaterial: material.isRawShaderMaterial === true, + glslVersion: material.glslVersion, + + precision: precision, + + instancing: object.isInstancedMesh === true, + instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, + + supportsVertexTextures: vertexTextures, + outputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding, + map: !! material.map, + mapEncoding: getTextureEncodingFromMap( material.map ), + matcap: !! material.matcap, + matcapEncoding: getTextureEncodingFromMap( material.matcap ), + envMap: !! envMap, + envMapMode: envMap && envMap.mapping, + envMapEncoding: getTextureEncodingFromMap( envMap ), + envMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ), + lightMap: !! material.lightMap, + lightMapEncoding: getTextureEncodingFromMap( material.lightMap ), + aoMap: !! material.aoMap, + emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ), + bumpMap: !! material.bumpMap, + normalMap: !! material.normalMap, + objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, + tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, + clearcoatMap: !! material.clearcoatMap, + clearcoatRoughnessMap: !! material.clearcoatRoughnessMap, + clearcoatNormalMap: !! material.clearcoatNormalMap, + displacementMap: !! material.displacementMap, + roughnessMap: !! material.roughnessMap, + metalnessMap: !! material.metalnessMap, + specularMap: !! material.specularMap, + alphaMap: !! material.alphaMap, + + gradientMap: !! material.gradientMap, + + sheen: !! material.sheen, + + transmissionMap: !! material.transmissionMap, + + combine: material.combine, + + vertexTangents: ( material.normalMap && material.vertexTangents ), + vertexColors: material.vertexColors, + vertexUvs: !! 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, + uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap, + + fog: !! fog, + useFog: material.fog, + fogExp2: ( fog && fog.isFogExp2 ), + + flatShading: material.flatShading, + + sizeAttenuation: material.sizeAttenuation, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + skinning: material.skinning && maxBones > 0, + maxBones: maxBones, + useVertexTexture: floatVertexTextures, + + morphTargets: material.morphTargets, + morphNormals: material.morphNormals, + maxMorphTargets: renderer.maxMorphTargets, + maxMorphNormals: renderer.maxMorphNormals, + + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + + numDirLightShadows: lights.directionalShadowMap.length, + numPointLightShadows: lights.pointShadowMap.length, + numSpotLightShadows: lights.spotShadowMap.length, + + numClippingPlanes: clipping.numPlanes, + numClipIntersection: clipping.numIntersection, + + dithering: material.dithering, + + shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + + toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, + physicallyCorrectLights: renderer.physicallyCorrectLights, + + premultipliedAlpha: material.premultipliedAlpha, + + alphaTest: material.alphaTest, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + + depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false, + + index0AttributeName: material.index0AttributeName, + + extensionDerivatives: material.extensions && material.extensions.derivatives, + extensionFragDepth: material.extensions && material.extensions.fragDepth, + extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, + extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, + + rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), + rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), + rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), + + customProgramCacheKey: material.customProgramCacheKey() + + }; + + return parameters; + + } + + function getProgramCacheKey( parameters ) { + + const array = []; + + if ( parameters.shaderID ) { + + array.push( parameters.shaderID ); + + } else { + + array.push( parameters.fragmentShader ); + array.push( parameters.vertexShader ); + + } + + if ( parameters.defines !== undefined ) { + + for ( const name in parameters.defines ) { + + array.push( name ); + array.push( parameters.defines[ name ] ); + + } + + } + + if ( parameters.isRawShaderMaterial === false ) { + + for ( let i = 0; i < parameterNames.length; i ++ ) { + + array.push( parameters[ parameterNames[ i ] ] ); + + } + + array.push( renderer.outputEncoding ); + array.push( renderer.gammaFactor ); + + } + + array.push( parameters.customProgramCacheKey ); + + return array.join(); + + } + + function getUniforms( material ) { + + const shaderID = shaderIDs[ material.type ]; + let uniforms; + + if ( shaderID ) { + + const shader = ShaderLib[ shaderID ]; + uniforms = UniformsUtils.clone( shader.uniforms ); + + } else { + + uniforms = material.uniforms; + + } + + return uniforms; + + } + + function acquireProgram( parameters, cacheKey ) { + + let program; + + // Check if code has been already compiled + for ( let p = 0, pl = programs.length; p < pl; p ++ ) { + + const preexistingProgram = programs[ p ]; + + if ( preexistingProgram.cacheKey === cacheKey ) { + + program = preexistingProgram; + ++ program.usedTimes; + + break; + + } + + } + + if ( program === undefined ) { + + program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates ); + programs.push( program ); + + } + + return program; + + } + + function releaseProgram( program ) { + + if ( -- program.usedTimes === 0 ) { + + // Remove from unordered set + const i = programs.indexOf( program ); + programs[ i ] = programs[ programs.length - 1 ]; + programs.pop(); + + // Free WebGL resources + program.destroy(); + + } + + } + + return { + getParameters: getParameters, + getProgramCacheKey: getProgramCacheKey, + getUniforms: getUniforms, + acquireProgram: acquireProgram, + releaseProgram: releaseProgram, + // Exposed for resource monitoring & error feedback via renderer.info: + programs: programs + }; + + } + + function WebGLProperties() { + + let properties = new WeakMap(); + + function get( object ) { + + let map = properties.get( object ); + + if ( map === undefined ) { + + map = {}; + properties.set( object, map ); + + } + + return map; + + } + + function remove( object ) { + + properties.delete( object ); + + } + + function update( object, key, value ) { + + properties.get( object )[ key ] = value; + + } + + function dispose() { + + properties = new WeakMap(); + + } + + return { + get: get, + remove: remove, + update: update, + dispose: dispose + }; + + } + + function painterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.program !== b.program ) { + + return a.program.id - b.program.id; + + } else if ( a.material.id !== b.material.id ) { + + return a.material.id - b.material.id; + + } else if ( a.z !== b.z ) { + + return a.z - b.z; + + } else { + + return a.id - b.id; + + } + + } + + function reversePainterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return a.id - b.id; + + } + + } + + + function WebGLRenderList( properties ) { + + const renderItems = []; + let renderItemsIndex = 0; + + const opaque = []; + const transparent = []; + + const defaultProgram = { id: - 1 }; + + function init() { + + renderItemsIndex = 0; + + opaque.length = 0; + transparent.length = 0; + + } + + function getNextRenderItem( object, geometry, material, groupOrder, z, group ) { + + let renderItem = renderItems[ renderItemsIndex ]; + const materialProperties = properties.get( material ); + + if ( renderItem === undefined ) { + + renderItem = { + id: object.id, + object: object, + geometry: geometry, + material: material, + program: materialProperties.program || defaultProgram, + groupOrder: groupOrder, + renderOrder: object.renderOrder, + z: z, + group: group + }; + + renderItems[ renderItemsIndex ] = renderItem; + + } else { + + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.program = materialProperties.program || defaultProgram; + renderItem.groupOrder = groupOrder; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + + } + + renderItemsIndex ++; + + return renderItem; + + } + + function push( object, geometry, material, groupOrder, z, group ) { + + const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + ( material.transparent === true ? transparent : opaque ).push( renderItem ); + + } + + function unshift( object, geometry, material, groupOrder, z, group ) { + + const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + ( material.transparent === true ? transparent : opaque ).unshift( renderItem ); + + } + + function sort( customOpaqueSort, customTransparentSort ) { + + if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable ); + if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable ); + + } + + function finish() { + + // Clear references from inactive renderItems in the list + + for ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) { + + const renderItem = renderItems[ i ]; + + if ( renderItem.id === null ) break; + + renderItem.id = null; + renderItem.object = null; + renderItem.geometry = null; + renderItem.material = null; + renderItem.program = null; + renderItem.group = null; + + } + + } + + return { + + opaque: opaque, + transparent: transparent, + + init: init, + push: push, + unshift: unshift, + finish: finish, + + sort: sort + }; + + } + + function WebGLRenderLists( properties ) { + + let lists = new WeakMap(); + + function get( scene, camera ) { + + const cameras = lists.get( scene ); + let list; + + if ( cameras === undefined ) { + + list = new WebGLRenderList( properties ); + lists.set( scene, new WeakMap() ); + lists.get( scene ).set( camera, list ); + + } else { + + list = cameras.get( camera ); + if ( list === undefined ) { + + list = new WebGLRenderList( properties ); + cameras.set( camera, list ); + + } + + } + + return list; + + } + + function dispose() { + + lists = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + function UniformsCache() { + + const lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + let uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + direction: new Vector3(), + color: new Color() + }; + break; + + case 'SpotLight': + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + + case 'PointLight': + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0 + }; + break; + + case 'HemisphereLight': + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + + case 'RectAreaLight': + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + }; + break; + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + + } + + function ShadowUniformsCache() { + + const lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + let uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'SpotLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'PointLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1000 + }; + break; + + // TODO (abelnation): set RectAreaLight shadow uniforms + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + + } + + + + let nextVersion = 0; + + function shadowCastingLightsFirst( lightA, lightB ) { + + return ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 ); + + } + + function WebGLLights( extensions, capabilities ) { + + const cache = new UniformsCache(); + + const shadowCache = ShadowUniformsCache(); + + const state = { + + version: 0, + + hash: { + directionalLength: - 1, + pointLength: - 1, + spotLength: - 1, + rectAreaLength: - 1, + hemiLength: - 1, + + numDirectionalShadows: - 1, + numPointShadows: - 1, + numSpotShadows: - 1 + }, + + ambient: [ 0, 0, 0 ], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + + }; + + for ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() ); + + const vector3 = new Vector3(); + const matrix4 = new Matrix4(); + const matrix42 = new Matrix4(); + + function setup( lights ) { + + let r = 0, g = 0, b = 0; + + for ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 ); + + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + + let numDirectionalShadows = 0; + let numPointShadows = 0; + let numSpotShadows = 0; + + lights.sort( shadowCastingLightsFirst ); + + for ( let i = 0, l = lights.length; i < l; i ++ ) { + + const light = lights[ i ]; + + const color = light.color; + const intensity = light.intensity; + const distance = light.distance; + + const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; + + if ( light.isAmbientLight ) { + + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + + } else if ( light.isLightProbe ) { + + for ( let j = 0; j < 9; j ++ ) { + + state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity ); + + } + + } else if ( light.isDirectionalLight ) { + + const uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + + state.directionalShadow[ directionalLength ] = shadowUniforms; + state.directionalShadowMap[ directionalLength ] = shadowMap; + state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; + + numDirectionalShadows ++; + + } + + state.directional[ directionalLength ] = uniforms; + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + const uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + + uniforms.color.copy( color ).multiplyScalar( intensity ); + uniforms.distance = distance; + + uniforms.coneCos = Math.cos( light.angle ); + uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); + uniforms.decay = light.decay; + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + + state.spotShadow[ spotLength ] = shadowUniforms; + state.spotShadowMap[ spotLength ] = shadowMap; + state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; + + numSpotShadows ++; + + } + + state.spot[ spotLength ] = uniforms; + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + const uniforms = cache.get( light ); + + // (a) intensity is the total visible light emitted + //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) ); + + // (b) intensity is the brightness of the light + uniforms.color.copy( color ).multiplyScalar( intensity ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + state.rectArea[ rectAreaLength ] = uniforms; + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + const uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.distance = light.distance; + uniforms.decay = light.decay; + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + shadowUniforms.shadowCameraNear = shadow.camera.near; + shadowUniforms.shadowCameraFar = shadow.camera.far; + + state.pointShadow[ pointLength ] = shadowUniforms; + state.pointShadowMap[ pointLength ] = shadowMap; + state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; + + numPointShadows ++; + + } + + state.point[ pointLength ] = uniforms; + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + const uniforms = cache.get( light ); + + uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); + uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); + + state.hemi[ hemiLength ] = uniforms; + + hemiLength ++; + + } + + } + + if ( rectAreaLength > 0 ) { + + if ( capabilities.isWebGL2 ) { + + // WebGL 2 + + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + + } else { + + // WebGL 1 + + if ( extensions.has( 'OES_texture_float_linear' ) === true ) { + + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + + } else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) { + + state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; + state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; + + } else { + + console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' ); + + } + + } + + } + + state.ambient[ 0 ] = r; + state.ambient[ 1 ] = g; + state.ambient[ 2 ] = b; + + const hash = state.hash; + + if ( hash.directionalLength !== directionalLength || + hash.pointLength !== pointLength || + hash.spotLength !== spotLength || + hash.rectAreaLength !== rectAreaLength || + hash.hemiLength !== hemiLength || + hash.numDirectionalShadows !== numDirectionalShadows || + hash.numPointShadows !== numPointShadows || + hash.numSpotShadows !== numSpotShadows ) { + + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + + state.directionalShadow.length = numDirectionalShadows; + state.directionalShadowMap.length = numDirectionalShadows; + state.pointShadow.length = numPointShadows; + state.pointShadowMap.length = numPointShadows; + state.spotShadow.length = numSpotShadows; + state.spotShadowMap.length = numSpotShadows; + state.directionalShadowMatrix.length = numDirectionalShadows; + state.pointShadowMatrix.length = numPointShadows; + state.spotShadowMatrix.length = numSpotShadows; + + hash.directionalLength = directionalLength; + hash.pointLength = pointLength; + hash.spotLength = spotLength; + hash.rectAreaLength = rectAreaLength; + hash.hemiLength = hemiLength; + + hash.numDirectionalShadows = numDirectionalShadows; + hash.numPointShadows = numPointShadows; + hash.numSpotShadows = numSpotShadows; + + state.version = nextVersion ++; + + } + + } + + function setupView( lights, camera ) { + + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + + const viewMatrix = camera.matrixWorldInverse; + + for ( let i = 0, l = lights.length; i < l; i ++ ) { + + const light = lights[ i ]; + + if ( light.isDirectionalLight ) { + + const uniforms = state.directional[ directionalLength ]; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + const uniforms = state.spot[ spotLength ]; + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + const uniforms = state.rectArea[ rectAreaLength ]; + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + // extract local rotation of light to derive width/height half vectors + matrix42.identity(); + matrix4.copy( light.matrixWorld ); + matrix4.premultiply( viewMatrix ); + matrix42.extractRotation( matrix4 ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + uniforms.halfWidth.applyMatrix4( matrix42 ); + uniforms.halfHeight.applyMatrix4( matrix42 ); + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + const uniforms = state.point[ pointLength ]; + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + const uniforms = state.hemi[ hemiLength ]; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + uniforms.direction.transformDirection( viewMatrix ); + uniforms.direction.normalize(); + + hemiLength ++; + + } + + } + + } + + return { + setup: setup, + setupView: setupView, + state: state + }; + + } + + function WebGLRenderState( extensions, capabilities ) { + + const lights = new WebGLLights( extensions, capabilities ); + + const lightsArray = []; + const shadowsArray = []; + + function init() { + + lightsArray.length = 0; + shadowsArray.length = 0; + + } + + function pushLight( light ) { + + lightsArray.push( light ); + + } + + function pushShadow( shadowLight ) { + + shadowsArray.push( shadowLight ); + + } + + function setupLights() { + + lights.setup( lightsArray ); + + } + + function setupLightsView( camera ) { + + lights.setupView( lightsArray, camera ); + + } + + const state = { + lightsArray: lightsArray, + shadowsArray: shadowsArray, + + lights: lights + }; + + return { + init: init, + state: state, + setupLights: setupLights, + setupLightsView: setupLightsView, + + pushLight: pushLight, + pushShadow: pushShadow + }; + + } + + function WebGLRenderStates( extensions, capabilities ) { + + let renderStates = new WeakMap(); + + function get( scene, renderCallDepth = 0 ) { + + let renderState; + + if ( renderStates.has( scene ) === false ) { + + renderState = new WebGLRenderState( extensions, capabilities ); + renderStates.set( scene, [] ); + renderStates.get( scene ).push( renderState ); + + } else { + + if ( renderCallDepth >= renderStates.get( scene ).length ) { + + renderState = new WebGLRenderState( extensions, capabilities ); + renderStates.get( scene ).push( renderState ); + + } else { + + renderState = renderStates.get( scene )[ renderCallDepth ]; + + } + + } + + return renderState; + + } + + function dispose() { + + renderStates = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + /** + * parameters = { + * + * opacity: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * } + */ + + function MeshDepthMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDepthMaterial'; + + this.depthPacking = BasicDepthPacking; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.setValues( parameters ); + + } + + MeshDepthMaterial.prototype = Object.create( Material.prototype ); + MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; + + MeshDepthMaterial.prototype.isMeshDepthMaterial = true; + + MeshDepthMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.depthPacking = source.depthPacking; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + return this; + + }; + + /** + * parameters = { + * + * referencePosition: , + * nearDistance: , + * farDistance: , + * + * skinning: , + * morphTargets: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: + * + * } + */ + + function MeshDistanceMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDistanceMaterial'; + + this.referencePosition = new Vector3(); + this.nearDistance = 1; + this.farDistance = 1000; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.fog = false; + + this.setValues( parameters ); + + } + + MeshDistanceMaterial.prototype = Object.create( Material.prototype ); + MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; + + MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; + + MeshDistanceMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.referencePosition.copy( source.referencePosition ); + this.nearDistance = source.nearDistance; + this.farDistance = source.farDistance; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + return this; + + }; + + var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \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}"; + + var vsm_vert = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; + + function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { + + let _frustum = new Frustum(); + + const _shadowMapSize = new Vector2(), + _viewportSize = new Vector2(), + + _viewport = new Vector4(), + + _depthMaterials = [], + _distanceMaterials = [], + + _materialCache = {}; + + const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide }; + + const shadowMaterialVertical = new ShaderMaterial( { + + defines: { + SAMPLE_RATE: 2.0 / 8.0, + HALF_SAMPLE_RATE: 1.0 / 8.0 + }, + + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new Vector2() }, + radius: { value: 4.0 } + }, + + vertexShader: vsm_vert, + + fragmentShader: vsm_frag + + } ); + + const shadowMaterialHorizontal = shadowMaterialVertical.clone(); + shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; + + const fullScreenTri = new BufferGeometry(); + fullScreenTri.setAttribute( + 'position', + new BufferAttribute( + new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ), + 3 + ) + ); + + const fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical ); + + const scope = this; + + this.enabled = false; + + this.autoUpdate = true; + this.needsUpdate = false; + + this.type = PCFShadowMap; + + this.render = function ( lights, scene, camera ) { + + if ( scope.enabled === false ) return; + if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; + + if ( lights.length === 0 ) return; + + const currentRenderTarget = _renderer.getRenderTarget(); + const activeCubeFace = _renderer.getActiveCubeFace(); + const activeMipmapLevel = _renderer.getActiveMipmapLevel(); + + const _state = _renderer.state; + + // Set GL state for depth map. + _state.setBlending( NoBlending ); + _state.buffers.color.setClear( 1, 1, 1, 1 ); + _state.buffers.depth.setTest( true ); + _state.setScissorTest( false ); + + // render depth map + + for ( let i = 0, il = lights.length; i < il; i ++ ) { + + const light = lights[ i ]; + const shadow = light.shadow; + + if ( shadow === undefined ) { + + console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); + continue; + + } + + if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue; + + _shadowMapSize.copy( shadow.mapSize ); + + const shadowFrameExtents = shadow.getFrameExtents(); + + _shadowMapSize.multiply( shadowFrameExtents ); + + _viewportSize.copy( shadow.mapSize ); + + if ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) { + + if ( _shadowMapSize.x > maxTextureSize ) { + + _viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x ); + _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; + shadow.mapSize.x = _viewportSize.x; + + } + + if ( _shadowMapSize.y > maxTextureSize ) { + + _viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y ); + _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; + shadow.mapSize.y = _viewportSize.y; + + } + + } + + if ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + const pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + '.shadowMap'; + + shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + + shadow.camera.updateProjectionMatrix(); + + } + + if ( shadow.map === null ) { + + const pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + '.shadowMap'; + + shadow.camera.updateProjectionMatrix(); + + } + + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + + const viewportCount = shadow.getViewportCount(); + + for ( let vp = 0; vp < viewportCount; vp ++ ) { + + const viewport = shadow.getViewport( vp ); + + _viewport.set( + _viewportSize.x * viewport.x, + _viewportSize.y * viewport.y, + _viewportSize.x * viewport.z, + _viewportSize.y * viewport.w + ); + + _state.viewport( _viewport ); + + shadow.updateMatrices( light, vp ); + + _frustum = shadow.getFrustum(); + + renderObject( scene, camera, shadow.camera, light, this.type ); + + } + + // do blur pass for VSM + + if ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + VSMPass( shadow, camera ); + + } + + shadow.needsUpdate = false; + + } + + scope.needsUpdate = false; + + _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel ); + + }; + + function VSMPass( shadow, camera ) { + + const geometry = _objects.update( fullScreenMesh ); + + // vertical pass + + shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; + shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; + shadowMaterialVertical.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.mapPass ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null ); + + // horizontal pass + + shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; + shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; + shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null ); + + } + + function getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) { + + const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; + + let material = _depthMaterials[ index ]; + + if ( material === undefined ) { + + material = new MeshDepthMaterial( { + + depthPacking: RGBADepthPacking, + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _depthMaterials[ index ] = material; + + } + + return material; + + } + + function getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) { + + const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; + + let material = _distanceMaterials[ index ]; + + if ( material === undefined ) { + + material = new MeshDistanceMaterial( { + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _distanceMaterials[ index ] = material; + + } + + return material; + + } + + function getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) { + + let result = null; + + let getMaterialVariant = getDepthMaterialVariant; + let customMaterial = object.customDepthMaterial; + + if ( light.isPointLight === true ) { + + getMaterialVariant = getDistanceMaterialVariant; + customMaterial = object.customDistanceMaterial; + + } + + if ( customMaterial === undefined ) { + + let useMorphing = false; + + if ( material.morphTargets === true ) { + + useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; + + } + + let useSkinning = false; + + if ( object.isSkinnedMesh === true ) { + + if ( material.skinning === true ) { + + useSkinning = true; + + } else { + + console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); + + } + + } + + const useInstancing = object.isInstancedMesh === true; + + result = getMaterialVariant( useMorphing, useSkinning, useInstancing ); + + } else { + + result = customMaterial; + + } + + if ( _renderer.localClippingEnabled && + material.clipShadows === true && + material.clippingPlanes.length !== 0 ) { + + // in this case we need a unique material instance reflecting the + // appropriate state + + const keyA = result.uuid, keyB = material.uuid; + + let materialsForVariant = _materialCache[ keyA ]; + + if ( materialsForVariant === undefined ) { + + materialsForVariant = {}; + _materialCache[ keyA ] = materialsForVariant; + + } + + let cachedMaterial = materialsForVariant[ keyB ]; + + if ( cachedMaterial === undefined ) { + + cachedMaterial = result.clone(); + materialsForVariant[ keyB ] = cachedMaterial; + + } + + result = cachedMaterial; + + } + + result.visible = material.visible; + result.wireframe = material.wireframe; + + if ( type === VSMShadowMap ) { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side; + + } else { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ]; + + } + + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + + if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) { + + result.referencePosition.setFromMatrixPosition( light.matrixWorld ); + result.nearDistance = shadowCameraNear; + result.farDistance = shadowCameraFar; + + } + + return result; + + } + + function renderObject( object, camera, shadowCamera, light, type ) { + + if ( object.visible === false ) return; + + const visible = object.layers.test( camera.layers ); + + if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { + + if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { + + object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); + + const geometry = _objects.update( object ); + const material = object.material; + + if ( Array.isArray( material ) ) { + + const groups = geometry.groups; + + for ( let k = 0, kl = groups.length; k < kl; k ++ ) { + + const group = groups[ k ]; + const groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + const depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); + + } + + } + + } else if ( material.visible ) { + + const depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); + + } + + } + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + renderObject( children[ i ], camera, shadowCamera, light, type ); + + } + + } + + } + + function WebGLState( gl, extensions, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + function ColorBuffer() { + + let locked = false; + + const color = new Vector4(); + let currentColorMask = null; + const currentColorClear = new Vector4( 0, 0, 0, 0 ); + + return { + + setMask: function ( colorMask ) { + + if ( currentColorMask !== colorMask && ! locked ) { + + gl.colorMask( colorMask, colorMask, colorMask, colorMask ); + currentColorMask = colorMask; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( r, g, b, a, premultipliedAlpha ) { + + if ( premultipliedAlpha === true ) { + + r *= a; g *= a; b *= a; + + } + + color.set( r, g, b, a ); + + if ( currentColorClear.equals( color ) === false ) { + + gl.clearColor( r, g, b, a ); + currentColorClear.copy( color ); + + } + + }, + + reset: function () { + + locked = false; + + currentColorMask = null; + currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state + + } + + }; + + } + + function DepthBuffer() { + + let locked = false; + + let currentDepthMask = null; + let currentDepthFunc = null; + let currentDepthClear = null; + + return { + + setTest: function ( depthTest ) { + + if ( depthTest ) { + + enable( 2929 ); + + } else { + + disable( 2929 ); + + } + + }, + + setMask: function ( depthMask ) { + + if ( currentDepthMask !== depthMask && ! locked ) { + + gl.depthMask( depthMask ); + currentDepthMask = depthMask; + + } + + }, + + setFunc: function ( depthFunc ) { + + if ( currentDepthFunc !== depthFunc ) { + + if ( depthFunc ) { + + switch ( depthFunc ) { + + case NeverDepth: + + gl.depthFunc( 512 ); + break; + + case AlwaysDepth: + + gl.depthFunc( 519 ); + break; + + case LessDepth: + + gl.depthFunc( 513 ); + break; + + case LessEqualDepth: + + gl.depthFunc( 515 ); + break; + + case EqualDepth: + + gl.depthFunc( 514 ); + break; + + case GreaterEqualDepth: + + gl.depthFunc( 518 ); + break; + + case GreaterDepth: + + gl.depthFunc( 516 ); + break; + + case NotEqualDepth: + + gl.depthFunc( 517 ); + break; + + default: + + gl.depthFunc( 515 ); + + } + + } else { + + gl.depthFunc( 515 ); + + } + + currentDepthFunc = depthFunc; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( depth ) { + + if ( currentDepthClear !== depth ) { + + gl.clearDepth( depth ); + currentDepthClear = depth; + + } + + }, + + reset: function () { + + locked = false; + + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + + } + + }; + + } + + function StencilBuffer() { + + let locked = false; + + let currentStencilMask = null; + let currentStencilFunc = null; + let currentStencilRef = null; + let currentStencilFuncMask = null; + let currentStencilFail = null; + let currentStencilZFail = null; + let currentStencilZPass = null; + let currentStencilClear = null; + + return { + + setTest: function ( stencilTest ) { + + if ( ! locked ) { + + if ( stencilTest ) { + + enable( 2960 ); + + } else { + + disable( 2960 ); + + } + + } + + }, + + setMask: function ( stencilMask ) { + + if ( currentStencilMask !== stencilMask && ! locked ) { + + gl.stencilMask( stencilMask ); + currentStencilMask = stencilMask; + + } + + }, + + setFunc: function ( stencilFunc, stencilRef, stencilMask ) { + + if ( currentStencilFunc !== stencilFunc || + currentStencilRef !== stencilRef || + currentStencilFuncMask !== stencilMask ) { + + gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); + + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + + } + + }, + + setOp: function ( stencilFail, stencilZFail, stencilZPass ) { + + if ( currentStencilFail !== stencilFail || + currentStencilZFail !== stencilZFail || + currentStencilZPass !== stencilZPass ) { + + gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); + + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( stencil ) { + + if ( currentStencilClear !== stencil ) { + + gl.clearStencil( stencil ); + currentStencilClear = stencil; + + } + + }, + + reset: function () { + + locked = false; + + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + + } + + }; + + } + + // + + const colorBuffer = new ColorBuffer(); + const depthBuffer = new DepthBuffer(); + const stencilBuffer = new StencilBuffer(); + + let enabledCapabilities = {}; + + let currentProgram = null; + + let currentBlendingEnabled = null; + let currentBlending = null; + let currentBlendEquation = null; + let currentBlendSrc = null; + let currentBlendDst = null; + let currentBlendEquationAlpha = null; + let currentBlendSrcAlpha = null; + let currentBlendDstAlpha = null; + let currentPremultipledAlpha = false; + + let currentFlipSided = null; + let currentCullFace = null; + + let currentLineWidth = null; + + let currentPolygonOffsetFactor = null; + let currentPolygonOffsetUnits = null; + + const maxTextures = gl.getParameter( 35661 ); + + let lineWidthAvailable = false; + let version = 0; + const glVersion = gl.getParameter( 7938 ); + + if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) { + + version = parseFloat( /^WebGL (\d)/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 1.0 ); + + } else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) { + + version = parseFloat( /^OpenGL ES (\d)/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 2.0 ); + + } + + let currentTextureSlot = null; + let currentBoundTextures = {}; + + const currentScissor = new Vector4(); + const currentViewport = new Vector4(); + + function createTexture( type, target, count ) { + + const data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. + const texture = gl.createTexture(); + + gl.bindTexture( type, texture ); + gl.texParameteri( type, 10241, 9728 ); + gl.texParameteri( type, 10240, 9728 ); + + for ( let i = 0; i < count; i ++ ) { + + gl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data ); + + } + + return texture; + + } + + const emptyTextures = {}; + emptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 ); + emptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 ); + + // init + + colorBuffer.setClear( 0, 0, 0, 1 ); + depthBuffer.setClear( 1 ); + stencilBuffer.setClear( 0 ); + + enable( 2929 ); + depthBuffer.setFunc( LessEqualDepth ); + + setFlipSided( false ); + setCullFace( CullFaceBack ); + enable( 2884 ); + + setBlending( NoBlending ); + + // + + function enable( id ) { + + if ( enabledCapabilities[ id ] !== true ) { + + gl.enable( id ); + enabledCapabilities[ id ] = true; + + } + + } + + function disable( id ) { + + if ( enabledCapabilities[ id ] !== false ) { + + gl.disable( id ); + enabledCapabilities[ id ] = false; + + } + + } + + function useProgram( program ) { + + if ( currentProgram !== program ) { + + gl.useProgram( program ); + + currentProgram = program; + + return true; + + } + + return false; + + } + + const equationToGL = { + [ AddEquation ]: 32774, + [ SubtractEquation ]: 32778, + [ ReverseSubtractEquation ]: 32779 + }; + + if ( isWebGL2 ) { + + equationToGL[ MinEquation ] = 32775; + equationToGL[ MaxEquation ] = 32776; + + } else { + + const extension = extensions.get( 'EXT_blend_minmax' ); + + if ( extension !== null ) { + + equationToGL[ MinEquation ] = extension.MIN_EXT; + equationToGL[ MaxEquation ] = extension.MAX_EXT; + + } + + } + + const factorToGL = { + [ ZeroFactor ]: 0, + [ OneFactor ]: 1, + [ SrcColorFactor ]: 768, + [ SrcAlphaFactor ]: 770, + [ SrcAlphaSaturateFactor ]: 776, + [ DstColorFactor ]: 774, + [ DstAlphaFactor ]: 772, + [ OneMinusSrcColorFactor ]: 769, + [ OneMinusSrcAlphaFactor ]: 771, + [ OneMinusDstColorFactor ]: 775, + [ OneMinusDstAlphaFactor ]: 773 + }; + + function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { + + if ( blending === NoBlending ) { + + if ( currentBlendingEnabled ) { + + disable( 3042 ); + currentBlendingEnabled = false; + + } + + return; + + } + + if ( ! currentBlendingEnabled ) { + + enable( 3042 ); + currentBlendingEnabled = true; + + } + + if ( blending !== CustomBlending ) { + + if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { + + if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) { + + gl.blendEquation( 32774 ); + + currentBlendEquation = AddEquation; + currentBlendEquationAlpha = AddEquation; + + } + + if ( premultipliedAlpha ) { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 1, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 1, 1 ); + break; + + case SubtractiveBlending: + gl.blendFuncSeparate( 0, 0, 769, 771 ); + break; + + case MultiplyBlending: + gl.blendFuncSeparate( 0, 768, 0, 770 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } else { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 770, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 770, 1 ); + break; + + case SubtractiveBlending: + gl.blendFunc( 0, 769 ); + break; + + case MultiplyBlending: + gl.blendFunc( 0, 768 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } + + currentBlendSrc = null; + currentBlendDst = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + + } + + return; + + } + + // custom blending + + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + + if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { + + gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] ); + + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + + } + + if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { + + gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] ); + + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + + } + + currentBlending = blending; + currentPremultipledAlpha = null; + + } + + function setMaterial( material, frontFaceCW ) { + + material.side === DoubleSide + ? disable( 2884 ) + : enable( 2884 ); + + let flipSided = ( material.side === BackSide ); + if ( frontFaceCW ) flipSided = ! flipSided; + + setFlipSided( flipSided ); + + ( material.blending === NormalBlending && material.transparent === false ) + ? setBlending( NoBlending ) + : setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); + + depthBuffer.setFunc( material.depthFunc ); + depthBuffer.setTest( material.depthTest ); + depthBuffer.setMask( material.depthWrite ); + colorBuffer.setMask( material.colorWrite ); + + const stencilWrite = material.stencilWrite; + stencilBuffer.setTest( stencilWrite ); + if ( stencilWrite ) { + + stencilBuffer.setMask( material.stencilWriteMask ); + stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask ); + stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass ); + + } + + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + + } + + // + + function setFlipSided( flipSided ) { + + if ( currentFlipSided !== flipSided ) { + + if ( flipSided ) { + + gl.frontFace( 2304 ); + + } else { + + gl.frontFace( 2305 ); + + } + + currentFlipSided = flipSided; + + } + + } + + function setCullFace( cullFace ) { + + if ( cullFace !== CullFaceNone ) { + + enable( 2884 ); + + if ( cullFace !== currentCullFace ) { + + if ( cullFace === CullFaceBack ) { + + gl.cullFace( 1029 ); + + } else if ( cullFace === CullFaceFront ) { + + gl.cullFace( 1028 ); + + } else { + + gl.cullFace( 1032 ); + + } + + } + + } else { + + disable( 2884 ); + + } + + currentCullFace = cullFace; + + } + + function setLineWidth( width ) { + + if ( width !== currentLineWidth ) { + + if ( lineWidthAvailable ) gl.lineWidth( width ); + + currentLineWidth = width; + + } + + } + + function setPolygonOffset( polygonOffset, factor, units ) { + + if ( polygonOffset ) { + + enable( 32823 ); + + if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { + + gl.polygonOffset( factor, units ); + + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + + } + + } else { + + disable( 32823 ); + + } + + } + + function setScissorTest( scissorTest ) { + + if ( scissorTest ) { + + enable( 3089 ); + + } else { + + disable( 3089 ); + + } + + } + + // texture + + function activeTexture( webglSlot ) { + + if ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1; + + if ( currentTextureSlot !== webglSlot ) { + + gl.activeTexture( webglSlot ); + currentTextureSlot = webglSlot; + + } + + } + + function bindTexture( webglType, webglTexture ) { + + if ( currentTextureSlot === null ) { + + activeTexture(); + + } + + let boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture === undefined ) { + + boundTexture = { type: undefined, texture: undefined }; + currentBoundTextures[ currentTextureSlot ] = boundTexture; + + } + + if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { + + gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); + + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + + } + + } + + function unbindTexture() { + + const boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture !== undefined && boundTexture.type !== undefined ) { + + gl.bindTexture( boundTexture.type, null ); + + boundTexture.type = undefined; + boundTexture.texture = undefined; + + } + + } + + function compressedTexImage2D() { + + try { + + gl.compressedTexImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage2D() { + + try { + + gl.texImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage3D() { + + try { + + gl.texImage3D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + // + + function scissor( scissor ) { + + if ( currentScissor.equals( scissor ) === false ) { + + gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); + currentScissor.copy( scissor ); + + } + + } + + function viewport( viewport ) { + + if ( currentViewport.equals( viewport ) === false ) { + + gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); + currentViewport.copy( viewport ); + + } + + } + + // + + function reset() { + + enabledCapabilities = {}; + + currentTextureSlot = null; + currentBoundTextures = {}; + + currentProgram = null; + + currentBlendingEnabled = null; + currentBlending = null; + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + currentPremultipledAlpha = false; + + currentFlipSided = null; + currentCullFace = null; + + currentLineWidth = null; + + currentPolygonOffsetFactor = null; + currentPolygonOffsetUnits = null; + + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + + } + + return { + + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + + enable: enable, + disable: disable, + + useProgram: useProgram, + + setBlending: setBlending, + setMaterial: setMaterial, + + setFlipSided: setFlipSided, + setCullFace: setCullFace, + + setLineWidth: setLineWidth, + setPolygonOffset: setPolygonOffset, + + setScissorTest: setScissorTest, + + activeTexture: activeTexture, + bindTexture: bindTexture, + unbindTexture: unbindTexture, + compressedTexImage2D: compressedTexImage2D, + texImage2D: texImage2D, + texImage3D: texImage3D, + + scissor: scissor, + viewport: viewport, + + reset: reset + + }; + + } + + function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) { + + const isWebGL2 = capabilities.isWebGL2; + const maxTextures = capabilities.maxTextures; + const maxCubemapSize = capabilities.maxCubemapSize; + const maxTextureSize = capabilities.maxTextureSize; + const maxSamples = capabilities.maxSamples; + + const _videoTextures = new WeakMap(); + let _canvas; + + // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, + // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! + // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). + + let useOffscreenCanvas = false; + + try { + + useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' + && ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null; + + } catch ( err ) { + + // Ignore any errors + + } + + function createCanvas( width, height ) { + + // Use OffscreenCanvas when available. Specially needed in web workers + + return useOffscreenCanvas ? + new OffscreenCanvas( width, height ) : + document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + + } + + function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) { + + let scale = 1; + + // handle case if texture exceeds max size + + if ( image.width > maxSize || image.height > maxSize ) { + + scale = maxSize / Math.max( image.width, image.height ); + + } + + // only perform resize if necessary + + if ( scale < 1 || needsPowerOfTwo === true ) { + + // only perform resize for certain image types + + if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || + ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || + ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { + + const floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor; + + const width = floor( scale * image.width ); + const height = floor( scale * image.height ); + + if ( _canvas === undefined ) _canvas = createCanvas( width, height ); + + // cube textures can't reuse the same canvas + + const canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas; + + canvas.width = width; + canvas.height = height; + + const context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, width, height ); + + console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' ); + + return canvas; + + } else { + + if ( 'data' in image ) { + + console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' ); + + } + + return image; + + } + + } + + return image; + + } + + function isPowerOfTwo( image ) { + + return MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height ); + + } + + function textureNeedsPowerOfTwo( texture ) { + + if ( isWebGL2 ) return false; + + return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || + ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); + + } + + function textureNeedsGenerateMipmaps( texture, supportsMips ) { + + return texture.generateMipmaps && supportsMips && + texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + + } + + function generateMipmap( target, texture, width, height ) { + + _gl.generateMipmap( target ); + + const textureProperties = properties.get( texture ); + + // Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11 + textureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E; + + } + + function getInternalFormat( internalFormatName, glFormat, glType ) { + + if ( isWebGL2 === false ) return glFormat; + + if ( internalFormatName !== null ) { + + if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ]; + + console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' ); + + } + + let internalFormat = glFormat; + + if ( glFormat === 6403 ) { + + if ( glType === 5126 ) internalFormat = 33326; + if ( glType === 5131 ) internalFormat = 33325; + if ( glType === 5121 ) internalFormat = 33321; + + } + + if ( glFormat === 6407 ) { + + if ( glType === 5126 ) internalFormat = 34837; + if ( glType === 5131 ) internalFormat = 34843; + if ( glType === 5121 ) internalFormat = 32849; + + } + + if ( glFormat === 6408 ) { + + if ( glType === 5126 ) internalFormat = 34836; + if ( glType === 5131 ) internalFormat = 34842; + if ( glType === 5121 ) internalFormat = 32856; + + } + + if ( internalFormat === 33325 || internalFormat === 33326 || + internalFormat === 34842 || internalFormat === 34836 ) { + + extensions.get( 'EXT_color_buffer_float' ); + + } + + return internalFormat; + + } + + // Fallback filters for non-power-of-2 textures + + function filterFallback( f ) { + + if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) { + + return 9728; + + } + + return 9729; + + } + + // + + function onTextureDispose( event ) { + + const texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + deallocateTexture( texture ); + + if ( texture.isVideoTexture ) { + + _videoTextures.delete( texture ); + + } + + info.memory.textures --; + + } + + function onRenderTargetDispose( event ) { + + const renderTarget = event.target; + + renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); + + deallocateRenderTarget( renderTarget ); + + info.memory.textures --; + + } + + // + + function deallocateTexture( texture ) { + + const textureProperties = properties.get( texture ); + + if ( textureProperties.__webglInit === undefined ) return; + + _gl.deleteTexture( textureProperties.__webglTexture ); + + properties.remove( texture ); + + } + + function deallocateRenderTarget( renderTarget ) { + + const renderTargetProperties = properties.get( renderTarget ); + const textureProperties = properties.get( renderTarget.texture ); + + if ( ! renderTarget ) return; + + if ( textureProperties.__webglTexture !== undefined ) { + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + if ( renderTarget.depthTexture ) { + + renderTarget.depthTexture.dispose(); + + } + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + for ( let i = 0; i < 6; i ++ ) { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); + + } + + } else { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); + if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer ); + if ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer ); + if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer ); + + } + + properties.remove( renderTarget.texture ); + properties.remove( renderTarget ); + + } + + // + + let textureUnits = 0; + + function resetTextureUnits() { + + textureUnits = 0; + + } + + function allocateTextureUnit() { + + const textureUnit = textureUnits; + + if ( textureUnit >= maxTextures ) { + + console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures ); + + } + + textureUnits += 1; + + return textureUnit; + + } + + // + + function setTexture2D( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.isVideoTexture ) updateVideoTexture( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + const image = texture.image; + + if ( image === undefined ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' ); + + } else if ( image.complete === false ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' ); + + } else { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 3553, textureProperties.__webglTexture ); + + } + + function setTexture2DArray( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 35866, textureProperties.__webglTexture ); + + } + + function setTexture3D( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 32879, textureProperties.__webglTexture ); + + } + + function setTextureCube( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadCubeTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + } + + const wrappingToGL = { + [ RepeatWrapping ]: 10497, + [ ClampToEdgeWrapping ]: 33071, + [ MirroredRepeatWrapping ]: 33648 + }; + + const filterToGL = { + [ NearestFilter ]: 9728, + [ NearestMipmapNearestFilter ]: 9984, + [ NearestMipmapLinearFilter ]: 9986, + + [ LinearFilter ]: 9729, + [ LinearMipmapNearestFilter ]: 9985, + [ LinearMipmapLinearFilter ]: 9987 + }; + + function setTextureParameters( textureType, texture, supportsMips ) { + + if ( supportsMips ) { + + _gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] ); + _gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] ); + + } + + _gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] ); + _gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] ); + + } else { + + _gl.texParameteri( textureType, 10242, 33071 ); + _gl.texParameteri( textureType, 10243, 33071 ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, 33071 ); + + } + + if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' ); + + } + + _gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) ); + _gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) ); + + if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' ); + + } + + } + + const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension ) { + + if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; + if ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return; + + if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { + + _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); + properties.get( texture ).__currentAnisotropy = texture.anisotropy; + + } + + } + + } + + function initTexture( textureProperties, texture ) { + + if ( textureProperties.__webglInit === undefined ) { + + textureProperties.__webglInit = true; + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + } + + } + + function uploadTexture( textureProperties, texture, slot ) { + + let textureType = 3553; + + if ( texture.isDataTexture2DArray ) textureType = 35866; + if ( texture.isDataTexture3D ) textureType = 32879; + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( textureType, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + _gl.pixelStorei( 37441, texture.premultiplyAlpha ); + _gl.pixelStorei( 3317, texture.unpackAlignment ); + + const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false; + const image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize ); + + const supportsMips = isPowerOfTwo( image ) || isWebGL2, + glFormat = utils.convert( texture.format ); + + let glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( textureType, texture, supportsMips ); + + let mipmap; + const mipmaps = texture.mipmaps; + + if ( texture.isDepthTexture ) { + + // populate depth texture with dummy data + + glInternalFormat = 6402; + + if ( isWebGL2 ) { + + if ( texture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( texture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } else if ( texture.type === UnsignedInt248Type$1 ) { + + glInternalFormat = 35056; + + } else { + + glInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D + + } + + } else { + + if ( texture.type === FloatType ) { + + console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' ); + + } + + } + + // validation checks for WebGL 1 + + if ( texture.format === DepthFormat && glInternalFormat === 6402 ) { + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); + + texture.type = UnsignedShortType; + glType = utils.convert( texture.type ); + + } + + } + + if ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) { + + // Depth stencil textures need the DEPTH_STENCIL internal format + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + glInternalFormat = 34041; + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedInt248Type$1 ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); + + texture.type = UnsignedInt248Type$1; + glType = utils.convert( texture.type ); + + } + + } + + // + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null ); + + } else if ( texture.isDataTexture ) { + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } + + } else if ( texture.isCompressedTexture ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); + + } + + } else { + + state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else if ( texture.isDataTexture2DArray ) { + + state.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else if ( texture.isDataTexture3D ) { + + state.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else { + + // regular Texture (image, video, canvas) + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image ); + textureProperties.__maxMipLevel = 0; + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + generateMipmap( textureType, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + function uploadCubeTexture( textureProperties, texture, slot ) { + + if ( texture.image.length !== 6 ) return; + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + + const isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) ); + const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); + + const cubeImage = []; + + for ( let i = 0; i < 6; i ++ ) { + + if ( ! isCompressed && ! isDataTexture ) { + + cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize ); + + } else { + + cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; + + } + + } + + const image = cubeImage[ 0 ], + supportsMips = isPowerOfTwo( image ) || isWebGL2, + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( 34067, texture, supportsMips ); + + let mipmaps; + + if ( isCompressed ) { + + for ( let i = 0; i < 6; i ++ ) { + + mipmaps = cubeImage[ i ].mipmaps; + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); + + } + + } else { + + state.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + mipmaps = texture.mipmaps; + + for ( let i = 0; i < 6; i ++ ) { + + if ( isDataTexture ) { + + state.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + const mipmapImage = mipmap.image[ i ].image; + + state.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data ); + + } + + } else { + + state.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] ); + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + + state.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length; + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + // We assume images for cube map have the same size. + generateMipmap( 34067, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + // Render targets + + // Setup storage for target texture and bind it to correct framebuffer + function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { + + const glFormat = utils.convert( renderTarget.texture.format ); + const glType = utils.convert( renderTarget.texture.type ); + const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); + _gl.bindFramebuffer( 36160, framebuffer ); + _gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); + _gl.bindFramebuffer( 36160, null ); + + } + + // Setup storage for internal depth/stencil buffers and bind to correct framebuffer + function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { + + _gl.bindRenderbuffer( 36161, renderbuffer ); + + if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { + + let glInternalFormat = 33189; + + if ( isMultisample ) { + + const depthTexture = renderTarget.depthTexture; + + if ( depthTexture && depthTexture.isDepthTexture ) { + + if ( depthTexture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( depthTexture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } + + } + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); + + } + + _gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer ); + + } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { + + if ( isMultisample ) { + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height ); + + } + + + _gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer ); + + } else { + + const glFormat = utils.convert( renderTarget.texture.format ); + const glType = utils.convert( renderTarget.texture.type ); + const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + + if ( isMultisample ) { + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); + + } + + } + + _gl.bindRenderbuffer( 36161, null ); + + } + + // Setup resources for a Depth Texture for a FBO (needs an extension) + function setupDepthTexture( framebuffer, renderTarget ) { + + const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget ); + if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); + + _gl.bindFramebuffer( 36160, framebuffer ); + + if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { + + throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); + + } + + // upload an empty depth texture with framebuffer size + if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || + renderTarget.depthTexture.image.width !== renderTarget.width || + renderTarget.depthTexture.image.height !== renderTarget.height ) { + + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + + } + + setTexture2D( renderTarget.depthTexture, 0 ); + + const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; + + if ( renderTarget.depthTexture.format === DepthFormat ) { + + _gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 ); + + } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { + + _gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 ); + + } else { + + throw new Error( 'Unknown depthTexture format' ); + + } + + } + + // Setup GL resources for a non-texture depth buffer + function setupDepthRenderbuffer( renderTarget ) { + + const renderTargetProperties = properties.get( renderTarget ); + + const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + + if ( renderTarget.depthTexture ) { + + if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); + + setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); + + } else { + + if ( isCube ) { + + renderTargetProperties.__webglDepthbuffer = []; + + for ( let i = 0; i < 6; i ++ ) { + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] ); + renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); + + } + + } else { + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer ); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); + + } + + } + + _gl.bindFramebuffer( 36160, null ); + + } + + // Set up GL resources for the render target + function setupRenderTarget( renderTarget ) { + + const renderTargetProperties = properties.get( renderTarget ); + const textureProperties = properties.get( renderTarget.texture ); + + renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true ); + const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; + + // Handles WebGL2 RGBFormat fallback - #18858 + + if ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) { + + renderTarget.texture.format = RGBAFormat; + + console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' ); + + } + + // Setup framebuffer + + if ( isCube ) { + + renderTargetProperties.__webglFramebuffer = []; + + for ( let i = 0; i < 6; i ++ ) { + + renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + + } + + } else { + + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + + if ( isMultisample ) { + + if ( isWebGL2 ) { + + renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); + renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer(); + + _gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer ); + + const glFormat = utils.convert( renderTarget.texture.format ); + const glType = utils.convert( renderTarget.texture.type ); + const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + const samples = getRenderTargetSamples( renderTarget ); + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); + _gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer ); + _gl.bindRenderbuffer( 36161, null ); + + if ( renderTarget.depthBuffer ) { + + renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); + + } + + _gl.bindFramebuffer( 36160, null ); + + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + // Setup color buffer + + if ( isCube ) { + + state.bindTexture( 34067, textureProperties.__webglTexture ); + setTextureParameters( 34067, renderTarget.texture, supportsMips ); + + for ( let i = 0; i < 6; i ++ ) { + + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i ); + + } + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { + + generateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height ); + + } + + state.bindTexture( 34067, null ); + + } else { + + state.bindTexture( 3553, textureProperties.__webglTexture ); + setTextureParameters( 3553, renderTarget.texture, supportsMips ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 ); + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { + + generateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height ); + + } + + state.bindTexture( 3553, null ); + + } + + // Setup depth and stencil buffers + + if ( renderTarget.depthBuffer ) { + + setupDepthRenderbuffer( renderTarget ); + + } + + } + + function updateRenderTargetMipmap( renderTarget ) { + + const texture = renderTarget.texture; + const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + const target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553; + const webglTexture = properties.get( texture ).__webglTexture; + + state.bindTexture( target, webglTexture ); + generateMipmap( target, texture, renderTarget.width, renderTarget.height ); + state.bindTexture( target, null ); + + } + + } + + function updateMultisampleRenderTarget( renderTarget ) { + + if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + if ( isWebGL2 ) { + + const renderTargetProperties = properties.get( renderTarget ); + + _gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer ); + _gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer ); + + const width = renderTarget.width; + const height = renderTarget.height; + let mask = 16384; + + if ( renderTarget.depthBuffer ) mask |= 256; + if ( renderTarget.stencilBuffer ) mask |= 1024; + + _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 ); + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905 + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + function getRenderTargetSamples( renderTarget ) { + + return ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ? + Math.min( maxSamples, renderTarget.samples ) : 0; + + } + + function updateVideoTexture( texture ) { + + const frame = info.render.frame; + + // Check the last frame we updated the VideoTexture + + if ( _videoTextures.get( texture ) !== frame ) { + + _videoTextures.set( texture, frame ); + texture.update(); + + } + + } + + // backwards compatibility + + let warnedTexture2D = false; + let warnedTextureCube = false; + + function safeSetTexture2D( texture, slot ) { + + if ( texture && texture.isWebGLRenderTarget ) { + + if ( warnedTexture2D === false ) { + + console.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\'t use render targets as textures. Use their .texture property instead.' ); + warnedTexture2D = true; + + } + + texture = texture.texture; + + } + + setTexture2D( texture, slot ); + + } + + function safeSetTextureCube( texture, slot ) { + + if ( texture && texture.isWebGLCubeRenderTarget ) { + + if ( warnedTextureCube === false ) { + + console.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\'t use cube render targets as textures. Use their .texture property instead.' ); + warnedTextureCube = true; + + } + + texture = texture.texture; + + } + + + setTextureCube( texture, slot ); + + } + + // + + this.allocateTextureUnit = allocateTextureUnit; + this.resetTextureUnits = resetTextureUnits; + + this.setTexture2D = setTexture2D; + this.setTexture2DArray = setTexture2DArray; + this.setTexture3D = setTexture3D; + this.setTextureCube = setTextureCube; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; + + this.safeSetTexture2D = safeSetTexture2D; + this.safeSetTextureCube = safeSetTextureCube; + + } + + function WebGLUtils( gl, extensions, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + function convert( p ) { + + let extension; + + if ( p === UnsignedByteType ) return 5121; + if ( p === UnsignedShort4444Type ) return 32819; + if ( p === UnsignedShort5551Type ) return 32820; + if ( p === UnsignedShort565Type ) return 33635; + + if ( p === ByteType ) return 5120; + if ( p === ShortType ) return 5122; + if ( p === UnsignedShortType ) return 5123; + if ( p === IntType ) return 5124; + if ( p === UnsignedIntType ) return 5125; + if ( p === FloatType ) return 5126; + + if ( p === HalfFloatType ) { + + if ( isWebGL2 ) return 5131; + + extension = extensions.get( 'OES_texture_half_float' ); + + if ( extension !== null ) { + + return extension.HALF_FLOAT_OES; + + } else { + + return null; + + } + + } + + if ( p === AlphaFormat ) return 6406; + if ( p === RGBFormat ) return 6407; + if ( p === RGBAFormat ) return 6408; + if ( p === LuminanceFormat ) return 6409; + if ( p === LuminanceAlphaFormat ) return 6410; + if ( p === DepthFormat ) return 6402; + if ( p === DepthStencilFormat ) return 34041; + if ( p === RedFormat ) return 6403; + + // WebGL2 formats. + + if ( p === RedIntegerFormat ) return 36244; + if ( p === RGFormat ) return 33319; + if ( p === RGIntegerFormat ) return 33320; + if ( p === RGBIntegerFormat ) return 36248; + if ( p === RGBAIntegerFormat ) return 36249; + + if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format$1 || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format$1 ) { + + extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + if ( extension !== null ) { + + if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT1_Format$1 ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if ( p === RGBA_S3TC_DXT5_Format$1 ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + + } else { + + return null; + + } + + } + + if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + if ( extension !== null ) { + + if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); + + if ( extension !== null ) { + + return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc' ); + + if ( extension !== null ) { + + if ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2; + if ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC; + + } + + } + + if ( 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 ) { + + extension = extensions.get( 'WEBGL_compressed_texture_astc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === RGBA_BPTC_Format ) { + + extension = extensions.get( 'EXT_texture_compression_bptc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === UnsignedInt248Type$1 ) { + + if ( isWebGL2 ) return 34042; + + extension = extensions.get( 'WEBGL_depth_texture' ); + + if ( extension !== null ) { + + return extension.UNSIGNED_INT_24_8_WEBGL; + + } else { + + return null; + + } + + } + + } + + return { convert: convert }; + + } + + function ArrayCamera( array = [] ) { + + PerspectiveCamera.call( this ); + + this.cameras = array; + + } + + ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { + + constructor: ArrayCamera, + + isArrayCamera: true + + } ); + + function Group() { + + Object3D.call( this ); + + this.type = 'Group'; + + } + + Group.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Group, + + isGroup: true + + } ); + + function WebXRController() { + + this._targetRay = null; + this._grip = null; + this._hand = null; + + } + + Object.assign( WebXRController.prototype, { + + constructor: WebXRController, + + getHandSpace: function () { + + if ( this._hand === null ) { + + this._hand = new Group(); + this._hand.matrixAutoUpdate = false; + this._hand.visible = false; + + this._hand.joints = []; + this._hand.inputState = { pinching: false }; + + if ( window.XRHand ) { + + for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { + + // The transform of this joint will be updated with the joint pose on each frame + const joint = new Group(); + joint.matrixAutoUpdate = false; + joint.visible = false; + this._hand.joints.push( joint ); + // ?? + this._hand.add( joint ); + + } + + } + + } + + return this._hand; + + }, + + getTargetRaySpace: function () { + + if ( this._targetRay === null ) { + + this._targetRay = new Group(); + this._targetRay.matrixAutoUpdate = false; + this._targetRay.visible = false; + + } + + return this._targetRay; + + }, + + getGripSpace: function () { + + if ( this._grip === null ) { + + this._grip = new Group(); + this._grip.matrixAutoUpdate = false; + this._grip.visible = false; + + } + + return this._grip; + + }, + + dispatchEvent: function ( event ) { + + if ( this._targetRay !== null ) { + + this._targetRay.dispatchEvent( event ); + + } + + if ( this._grip !== null ) { + + this._grip.dispatchEvent( event ); + + } + + if ( this._hand !== null ) { + + this._hand.dispatchEvent( event ); + + } + + return this; + + }, + + disconnect: function ( inputSource ) { + + this.dispatchEvent( { type: 'disconnected', data: inputSource } ); + + if ( this._targetRay !== null ) { + + this._targetRay.visible = false; + + } + + if ( this._grip !== null ) { + + this._grip.visible = false; + + } + + if ( this._hand !== null ) { + + this._hand.visible = false; + + } + + return this; + + }, + + update: function ( inputSource, frame, referenceSpace ) { + + let inputPose = null; + let gripPose = null; + let handPose = null; + + const targetRay = this._targetRay; + const grip = this._grip; + const hand = this._hand; + + if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) { + + if ( hand && inputSource.hand ) { + + handPose = true; + + for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { + + if ( inputSource.hand[ i ] ) { + + // Update the joints groups with the XRJoint poses + const jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace ); + const joint = hand.joints[ i ]; + + if ( jointPose !== null ) { + + joint.matrix.fromArray( jointPose.transform.matrix ); + joint.matrix.decompose( joint.position, joint.rotation, joint.scale ); + joint.jointRadius = jointPose.radius; + + } + + joint.visible = jointPose !== null; + + // Custom events + + // Check pinch + const indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ]; + const thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ]; + const distance = indexTip.position.distanceTo( thumbTip.position ); + + const distanceToPinch = 0.02; + const threshold = 0.005; + + if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) { + + hand.inputState.pinching = false; + this.dispatchEvent( { + type: 'pinchend', + handedness: inputSource.handedness, + target: this + } ); + + } else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) { + + hand.inputState.pinching = true; + this.dispatchEvent( { + type: 'pinchstart', + handedness: inputSource.handedness, + target: this + } ); + + } + + } + + } + + } else { + + if ( targetRay !== null ) { + + inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace ); + + if ( inputPose !== null ) { + + targetRay.matrix.fromArray( inputPose.transform.matrix ); + targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale ); + + } + + } + + if ( grip !== null && inputSource.gripSpace ) { + + gripPose = frame.getPose( inputSource.gripSpace, referenceSpace ); + + if ( gripPose !== null ) { + + grip.matrix.fromArray( gripPose.transform.matrix ); + grip.matrix.decompose( grip.position, grip.rotation, grip.scale ); + + } + + } + + } + + } + + if ( targetRay !== null ) { + + targetRay.visible = ( inputPose !== null ); + + } + + if ( grip !== null ) { + + grip.visible = ( gripPose !== null ); + + } + + if ( hand !== null ) { + + hand.visible = ( handPose !== null ); + + } + + return this; + + } + + } ); + + function WebXRManager( renderer, gl ) { + + const scope = this; + + let session = null; + + let framebufferScaleFactor = 1.0; + + let referenceSpace = null; + let referenceSpaceType = 'local-floor'; + + let pose = null; + + const controllers = []; + const inputSourcesMap = new Map(); + + // + + const cameraL = new PerspectiveCamera(); + cameraL.layers.enable( 1 ); + cameraL.viewport = new Vector4(); + + const cameraR = new PerspectiveCamera(); + cameraR.layers.enable( 2 ); + cameraR.viewport = new Vector4(); + + const cameras = [ cameraL, cameraR ]; + + const cameraVR = new ArrayCamera(); + cameraVR.layers.enable( 1 ); + cameraVR.layers.enable( 2 ); + + let _currentDepthNear = null; + let _currentDepthFar = null; + + // + + this.enabled = false; + + this.isPresenting = false; + + this.getController = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getTargetRaySpace(); + + }; + + this.getControllerGrip = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getGripSpace(); + + }; + + this.getHand = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getHandSpace(); + + }; + + // + + function onSessionEvent( event ) { + + const controller = inputSourcesMap.get( event.inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: event.type, data: event.inputSource } ); + + } + + } + + function onSessionEnd() { + + inputSourcesMap.forEach( function ( controller, inputSource ) { + + controller.disconnect( inputSource ); + + } ); + + inputSourcesMap.clear(); + + // + + renderer.setFramebuffer( null ); + renderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830 + animation.stop(); + + scope.isPresenting = false; + + scope.dispatchEvent( { type: 'sessionend' } ); + + } + + function onRequestReferenceSpace( value ) { + + referenceSpace = value; + + animation.setContext( session ); + animation.start(); + + scope.isPresenting = true; + + scope.dispatchEvent( { type: 'sessionstart' } ); + + } + + this.setFramebufferScaleFactor = function ( value ) { + + framebufferScaleFactor = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' ); + + } + + }; + + this.setReferenceSpaceType = function ( value ) { + + referenceSpaceType = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' ); + + } + + }; + + this.getReferenceSpace = function () { + + return referenceSpace; + + }; + + this.getSession = function () { + + return session; + + }; + + this.setSession = function ( value ) { + + session = value; + + if ( session !== null ) { + + session.addEventListener( 'select', onSessionEvent ); + session.addEventListener( 'selectstart', onSessionEvent ); + session.addEventListener( 'selectend', onSessionEvent ); + session.addEventListener( 'squeeze', onSessionEvent ); + session.addEventListener( 'squeezestart', onSessionEvent ); + session.addEventListener( 'squeezeend', onSessionEvent ); + session.addEventListener( 'end', onSessionEnd ); + + const attributes = gl.getContextAttributes(); + + if ( attributes.xrCompatible !== true ) { + + gl.makeXRCompatible(); + + } + + const layerInit = { + antialias: attributes.antialias, + alpha: attributes.alpha, + depth: attributes.depth, + stencil: attributes.stencil, + framebufferScaleFactor: framebufferScaleFactor + }; + + // eslint-disable-next-line no-undef + const baseLayer = new XRWebGLLayer( session, gl, layerInit ); + + session.updateRenderState( { baseLayer: baseLayer } ); + + session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace ); + + // + + session.addEventListener( 'inputsourceschange', updateInputSources ); + + } + + }; + + function updateInputSources( event ) { + + const inputSources = session.inputSources; + + // Assign inputSources to available controllers + + for ( let i = 0; i < controllers.length; i ++ ) { + + inputSourcesMap.set( inputSources[ i ], controllers[ i ] ); + + } + + // Notify disconnected + + for ( let i = 0; i < event.removed.length; i ++ ) { + + const inputSource = event.removed[ i ]; + const controller = inputSourcesMap.get( inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: 'disconnected', data: inputSource } ); + inputSourcesMap.delete( inputSource ); + + } + + } + + // Notify connected + + for ( let i = 0; i < event.added.length; i ++ ) { + + const inputSource = event.added[ i ]; + const controller = inputSourcesMap.get( inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: 'connected', data: inputSource } ); + + } + + } + + } + + // + + const cameraLPos = new Vector3(); + const cameraRPos = new Vector3(); + + /** + * Assumes 2 cameras that are parallel and share an X-axis, and that + * the cameras' projection and world matrices have already been set. + * And that near and far planes are identical for both cameras. + * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 + */ + function setProjectionFromUnion( camera, cameraL, cameraR ) { + + cameraLPos.setFromMatrixPosition( cameraL.matrixWorld ); + cameraRPos.setFromMatrixPosition( cameraR.matrixWorld ); + + const ipd = cameraLPos.distanceTo( cameraRPos ); + + const projL = cameraL.projectionMatrix.elements; + const projR = cameraR.projectionMatrix.elements; + + // VR systems will have identical far and near planes, and + // most likely identical top and bottom frustum extents. + // Use the left camera for these values. + const near = projL[ 14 ] / ( projL[ 10 ] - 1 ); + const far = projL[ 14 ] / ( projL[ 10 ] + 1 ); + const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ]; + const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ]; + + const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ]; + const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ]; + const left = near * leftFov; + const right = near * rightFov; + + // Calculate the new camera's position offset from the + // left camera. xOffset should be roughly half `ipd`. + const zOffset = ipd / ( - leftFov + rightFov ); + const xOffset = zOffset * - leftFov; + + // TODO: Better way to apply this offset? + cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale ); + camera.translateX( xOffset ); + camera.translateZ( zOffset ); + camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale ); + camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); + + // Find the union of the frustum values of the cameras and scale + // the values so that the near plane's position does not change in world space, + // although must now be relative to the new union camera. + const near2 = near + zOffset; + const far2 = far + zOffset; + const left2 = left - xOffset; + const right2 = right + ( ipd - xOffset ); + const top2 = topFov * far / far2 * near2; + const bottom2 = bottomFov * far / far2 * near2; + + camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 ); + + } + + function updateCamera( camera, parent ) { + + if ( parent === null ) { + + camera.matrixWorld.copy( camera.matrix ); + + } else { + + camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix ); + + } + + camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); + + } + + this.getCamera = function ( camera ) { + + cameraVR.near = cameraR.near = cameraL.near = camera.near; + cameraVR.far = cameraR.far = cameraL.far = camera.far; + + if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) { + + // Note that the new renderState won't apply until the next frame. See #18320 + + session.updateRenderState( { + depthNear: cameraVR.near, + depthFar: cameraVR.far + } ); + + _currentDepthNear = cameraVR.near; + _currentDepthFar = cameraVR.far; + + } + + const parent = camera.parent; + const cameras = cameraVR.cameras; + + updateCamera( cameraVR, parent ); + + for ( let i = 0; i < cameras.length; i ++ ) { + + updateCamera( cameras[ i ], parent ); + + } + + // update camera and its children + + camera.matrixWorld.copy( cameraVR.matrixWorld ); + + const children = camera.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( true ); + + } + + // update projection matrix for proper view frustum culling + + if ( cameras.length === 2 ) { + + setProjectionFromUnion( cameraVR, cameraL, cameraR ); + + } else { + + // assume single camera setup (AR) + + cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); + + } + + return cameraVR; + + }; + + // Animation Loop + + let onAnimationFrameCallback = null; + + function onAnimationFrame( time, frame ) { + + pose = frame.getViewerPose( referenceSpace ); + + if ( pose !== null ) { + + const views = pose.views; + const baseLayer = session.renderState.baseLayer; + + renderer.setFramebuffer( baseLayer.framebuffer ); + + let cameraVRNeedsUpdate = false; + + // check if it's necessary to rebuild cameraVR's camera list + + if ( views.length !== cameraVR.cameras.length ) { + + cameraVR.cameras.length = 0; + cameraVRNeedsUpdate = true; + + } + + for ( let i = 0; i < views.length; i ++ ) { + + const view = views[ i ]; + const viewport = baseLayer.getViewport( view ); + + const camera = cameras[ i ]; + camera.matrix.fromArray( view.transform.matrix ); + camera.projectionMatrix.fromArray( view.projectionMatrix ); + camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height ); + + if ( i === 0 ) { + + cameraVR.matrix.copy( camera.matrix ); + + } + + if ( cameraVRNeedsUpdate === true ) { + + cameraVR.cameras.push( camera ); + + } + + } + + } + + // + + const inputSources = session.inputSources; + + for ( let i = 0; i < controllers.length; i ++ ) { + + const controller = controllers[ i ]; + const inputSource = inputSources[ i ]; + + controller.update( inputSource, frame, referenceSpace ); + + } + + if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame ); + + } + + const animation = new WebGLAnimation(); + animation.setAnimationLoop( onAnimationFrame ); + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + + }; + + this.dispose = function () {}; + + } + + Object.assign( WebXRManager.prototype, EventDispatcher$1.prototype ); + + function WebGLMaterials( properties ) { + + function refreshFogUniforms( uniforms, fog ) { + + uniforms.fogColor.value.copy( fog.color ); + + if ( fog.isFog ) { + + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + + } else if ( fog.isFogExp2 ) { + + uniforms.fogDensity.value = fog.density; + + } + + } + + function refreshMaterialUniforms( uniforms, material, pixelRatio, height ) { + + if ( material.isMeshBasicMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + } else if ( material.isMeshLambertMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsLambert( uniforms, material ); + + } else if ( material.isMeshToonMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsToon( uniforms, material ); + + } else if ( material.isMeshPhongMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsPhong( uniforms, material ); + + } else if ( material.isMeshStandardMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + if ( material.isMeshPhysicalMaterial ) { + + refreshUniformsPhysical( uniforms, material ); + + } else { + + refreshUniformsStandard( uniforms, material ); + + } + + } else if ( material.isMeshMatcapMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsMatcap( uniforms, material ); + + } else if ( material.isMeshDepthMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDepth( uniforms, material ); + + } else if ( material.isMeshDistanceMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDistance( uniforms, material ); + + } else if ( material.isMeshNormalMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsNormal( uniforms, material ); + + } else if ( material.isLineBasicMaterial ) { + + refreshUniformsLine( uniforms, material ); + + if ( material.isLineDashedMaterial ) { + + refreshUniformsDash( uniforms, material ); + + } + + } else if ( material.isPointsMaterial ) { + + refreshUniformsPoints( uniforms, material, pixelRatio, height ); + + } else if ( material.isSpriteMaterial ) { + + refreshUniformsSprites( uniforms, material ); + + } else if ( material.isShadowMaterial ) { + + uniforms.color.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } else if ( material.isShaderMaterial ) { + + material.uniformsNeedUpdate = false; // #15581 + + } + + } + + function refreshUniformsCommon( uniforms, material ) { + + uniforms.opacity.value = material.opacity; + + if ( material.color ) { + + uniforms.diffuse.value.copy( material.color ); + + } + + if ( material.emissive ) { + + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + } + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + if ( material.specularMap ) { + + uniforms.specularMap.value = material.specularMap; + + } + + const envMap = properties.get( material ).envMap; + + if ( envMap ) { + + uniforms.envMap.value = envMap; + + uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1; + + uniforms.reflectivity.value = material.reflectivity; + uniforms.refractionRatio.value = material.refractionRatio; + + const maxMipLevel = properties.get( envMap ).__maxMipLevel; + + if ( maxMipLevel !== undefined ) { + + uniforms.maxMipLevel.value = maxMipLevel; + + } + + } + + if ( material.lightMap ) { + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + } + + if ( material.aoMap ) { + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. displacementMap map + // 4. normal map + // 5. bump map + // 6. roughnessMap map + // 7. metalnessMap map + // 8. alphaMap map + // 9. emissiveMap map + // 10. clearcoat map + // 11. clearcoat normal map + // 12. clearcoat roughnessMap map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.roughnessMap ) { + + uvScaleMap = material.roughnessMap; + + } else if ( material.metalnessMap ) { + + uvScaleMap = material.metalnessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } else if ( material.clearcoatMap ) { + + uvScaleMap = material.clearcoatMap; + + } else if ( material.clearcoatNormalMap ) { + + uvScaleMap = material.clearcoatNormalMap; + + } else if ( material.clearcoatRoughnessMap ) { + + uvScaleMap = material.clearcoatRoughnessMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + // uv repeat and offset setting priorities for uv2 + // 1. ao map + // 2. light map + + let uv2ScaleMap; + + if ( material.aoMap ) { + + uv2ScaleMap = material.aoMap; + + } else if ( material.lightMap ) { + + uv2ScaleMap = material.lightMap; + + } + + if ( uv2ScaleMap !== undefined ) { + + // backwards compatibility + if ( uv2ScaleMap.isWebGLRenderTarget ) { + + uv2ScaleMap = uv2ScaleMap.texture; + + } + + if ( uv2ScaleMap.matrixAutoUpdate === true ) { + + uv2ScaleMap.updateMatrix(); + + } + + uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); + + } + + } + + function refreshUniformsLine( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } + + function refreshUniformsDash( uniforms, material ) { + + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + + } + + function refreshUniformsPoints( uniforms, material, pixelRatio, height ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * pixelRatio; + uniforms.scale.value = height * 0.5; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsSprites( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.rotation.value = material.rotation; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsLambert( uniforms, material ) { + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + } + + function refreshUniformsPhong( uniforms, material ) { + + uniforms.specular.value.copy( material.specular ); + uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsToon( uniforms, material ) { + + if ( material.gradientMap ) { + + uniforms.gradientMap.value = material.gradientMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsStandard( uniforms, material ) { + + uniforms.roughness.value = material.roughness; + uniforms.metalness.value = material.metalness; + + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + } + + if ( material.metalnessMap ) { + + uniforms.metalnessMap.value = material.metalnessMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + const envMap = properties.get( material ).envMap; + + if ( envMap ) { + + //uniforms.envMap.value = material.envMap; // part of uniforms common + uniforms.envMapIntensity.value = material.envMapIntensity; + + } + + } + + function refreshUniformsPhysical( uniforms, material ) { + + refreshUniformsStandard( uniforms, material ); + + uniforms.reflectivity.value = material.reflectivity; // also part of uniforms common + + uniforms.clearcoat.value = material.clearcoat; + uniforms.clearcoatRoughness.value = material.clearcoatRoughness; + if ( material.sheen ) uniforms.sheen.value.copy( material.sheen ); + + if ( material.clearcoatMap ) { + + uniforms.clearcoatMap.value = material.clearcoatMap; + + } + + if ( material.clearcoatRoughnessMap ) { + + uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; + + } + + if ( material.clearcoatNormalMap ) { + + uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); + uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; + + if ( material.side === BackSide ) { + + uniforms.clearcoatNormalScale.value.negate(); + + } + + } + + uniforms.transmission.value = material.transmission; + + if ( material.transmissionMap ) { + + uniforms.transmissionMap.value = material.transmissionMap; + + } + + } + + function refreshUniformsMatcap( uniforms, material ) { + + if ( material.matcap ) { + + uniforms.matcap.value = material.matcap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDepth( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDistance( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + uniforms.referencePosition.value.copy( material.referencePosition ); + uniforms.nearDistance.value = material.nearDistance; + uniforms.farDistance.value = material.farDistance; + + } + + function refreshUniformsNormal( uniforms, material ) { + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + return { + refreshFogUniforms: refreshFogUniforms, + refreshMaterialUniforms: refreshMaterialUniforms + }; + + } + + function createCanvasElement() { + + const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.style.display = 'block'; + return canvas; + + } + + function WebGLRenderer( parameters ) { + + parameters = parameters || {}; + + const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(), + _context = parameters.context !== undefined ? parameters.context : null, + + _alpha = parameters.alpha !== undefined ? parameters.alpha : false, + _depth = parameters.depth !== undefined ? parameters.depth : true, + _stencil = parameters.stencil !== undefined ? parameters.stencil : true, + _antialias = parameters.antialias !== undefined ? parameters.antialias : false, + _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, + _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, + _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', + _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; + + let currentRenderList = null; + let currentRenderState = null; + + // render() can be called from within a callback triggered by another render. + // We track this so that the nested render call gets its state isolated from the parent render call. + + const renderStateStack = []; + + // public properties + + this.domElement = _canvas; + + // Debug configuration container + this.debug = { + + /** + * Enables error checking and reporting when shader programs are being compiled + * @type {boolean} + */ + checkShaderErrors: true + }; + + // clearing + + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + + // scene graph + + this.sortObjects = true; + + // user-defined clipping + + this.clippingPlanes = []; + this.localClippingEnabled = false; + + // physically based shading + + this.gammaFactor = 2.0; // for backwards compatibility + this.outputEncoding = LinearEncoding; + + // physical lights + + this.physicallyCorrectLights = false; + + // tone mapping + + this.toneMapping = NoToneMapping; + this.toneMappingExposure = 1.0; + + // morphs + + this.maxMorphTargets = 8; + this.maxMorphNormals = 4; + + // internal properties + + const _this = this; + + let _isContextLost = false; + + // internal state cache + + let _framebuffer = null; + + let _currentActiveCubeFace = 0; + let _currentActiveMipmapLevel = 0; + let _currentRenderTarget = null; + let _currentFramebuffer = null; + let _currentMaterialId = - 1; + + let _currentCamera = null; + + const _currentViewport = new Vector4(); + const _currentScissor = new Vector4(); + let _currentScissorTest = null; + + // + + let _width = _canvas.width; + let _height = _canvas.height; + + let _pixelRatio = 1; + let _opaqueSort = null; + let _transparentSort = null; + + const _viewport = new Vector4( 0, 0, _width, _height ); + const _scissor = new Vector4( 0, 0, _width, _height ); + let _scissorTest = false; + + // frustum + + const _frustum = new Frustum(); + + // clipping + + let _clippingEnabled = false; + let _localClippingEnabled = false; + + // camera matrices cache + + const _projScreenMatrix = new Matrix4(); + + const _vector3 = new Vector3(); + + const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; + + function getTargetPixelRatio() { + + return _currentRenderTarget === null ? _pixelRatio : 1; + + } + + // initialize + + let _gl = _context; + + function getContext( contextNames, contextAttributes ) { + + for ( let i = 0; i < contextNames.length; i ++ ) { + + const contextName = contextNames[ i ]; + const context = _canvas.getContext( contextName, contextAttributes ); + if ( context !== null ) return context; + + } + + return null; + + } + + try { + + const contextAttributes = { + alpha: _alpha, + depth: _depth, + stencil: _stencil, + antialias: _antialias, + premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: _preserveDrawingBuffer, + powerPreference: _powerPreference, + failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat + }; + + // event listeners must be registered before WebGL context is created, see #12753 + + _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); + + if ( _gl === null ) { + + const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ]; + + if ( _this.isWebGL1Renderer === true ) { + + contextNames.shift(); + + } + + _gl = getContext( contextNames, contextAttributes ); + + if ( _gl === null ) { + + if ( getContext( contextNames ) ) { + + throw new Error( 'Error creating WebGL context with your selected attributes.' ); + + } else { + + throw new Error( 'Error creating WebGL context.' ); + + } + + } + + } + + // Some experimental-webgl implementations do not have getShaderPrecisionFormat + + if ( _gl.getShaderPrecisionFormat === undefined ) { + + _gl.getShaderPrecisionFormat = function () { + + return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; + + }; + + } + + } catch ( error ) { + + console.error( 'THREE.WebGLRenderer: ' + error.message ); + throw error; + + } + + let extensions, capabilities, state, info; + let properties, textures, cubemaps, attributes, geometries, objects; + let programCache, materials, renderLists, renderStates, clipping; + + let background, morphtargets, bufferRenderer, indexedBufferRenderer; + + let utils, bindingStates; + + function initGLContext() { + + extensions = new WebGLExtensions( _gl ); + + capabilities = new WebGLCapabilities( _gl, extensions, parameters ); + + if ( capabilities.isWebGL2 === false ) { + + extensions.get( 'WEBGL_depth_texture' ); + extensions.get( 'OES_texture_float' ); + extensions.get( 'OES_texture_half_float' ); + extensions.get( 'OES_texture_half_float_linear' ); + extensions.get( 'OES_standard_derivatives' ); + extensions.get( 'OES_element_index_uint' ); + extensions.get( 'OES_vertex_array_object' ); + extensions.get( 'ANGLE_instanced_arrays' ); + + } + + extensions.get( 'OES_texture_float_linear' ); + + utils = new WebGLUtils( _gl, extensions, capabilities ); + + state = new WebGLState( _gl, extensions, capabilities ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); + + info = new WebGLInfo( _gl ); + properties = new WebGLProperties(); + textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); + cubemaps = new WebGLCubeMaps( _this ); + attributes = new WebGLAttributes( _gl, capabilities ); + bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities ); + geometries = new WebGLGeometries( _gl, attributes, info, bindingStates ); + objects = new WebGLObjects( _gl, geometries, attributes, info ); + morphtargets = new WebGLMorphtargets( _gl ); + clipping = new WebGLClipping( properties ); + programCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping ); + materials = new WebGLMaterials( properties ); + renderLists = new WebGLRenderLists( properties ); + renderStates = new WebGLRenderStates( extensions, capabilities ); + background = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha ); + + bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities ); + indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities ); + + info.programs = programCache.programs; + + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.state = state; + _this.info = info; + + } + + initGLContext(); + + // xr + + const xr = new WebXRManager( _this, _gl ); + + this.xr = xr; + + // shadow map + + const shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); + + this.shadowMap = shadowMap; + + // API + + this.getContext = function () { + + return _gl; + + }; + + this.getContextAttributes = function () { + + return _gl.getContextAttributes(); + + }; + + this.forceContextLoss = function () { + + const extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.loseContext(); + + }; + + this.forceContextRestore = function () { + + const extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.restoreContext(); + + }; + + this.getPixelRatio = function () { + + return _pixelRatio; + + }; + + this.setPixelRatio = function ( value ) { + + if ( value === undefined ) return; + + _pixelRatio = value; + + this.setSize( _width, _height, false ); + + }; + + this.getSize = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' ); + + target = new Vector2(); + + } + + return target.set( _width, _height ); + + }; + + this.setSize = function ( width, height, updateStyle ) { + + if ( xr.isPresenting ) { + + console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); + return; + + } + + _width = width; + _height = height; + + _canvas.width = Math.floor( width * _pixelRatio ); + _canvas.height = Math.floor( height * _pixelRatio ); + + if ( updateStyle !== false ) { + + _canvas.style.width = width + 'px'; + _canvas.style.height = height + 'px'; + + } + + this.setViewport( 0, 0, width, height ); + + }; + + this.getDrawingBufferSize = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' ); + + target = new Vector2(); + + } + + return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor(); + + }; + + this.setDrawingBufferSize = function ( width, height, pixelRatio ) { + + _width = width; + _height = height; + + _pixelRatio = pixelRatio; + + _canvas.width = Math.floor( width * pixelRatio ); + _canvas.height = Math.floor( height * pixelRatio ); + + this.setViewport( 0, 0, width, height ); + + }; + + this.getCurrentViewport = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' ); + + target = new Vector4(); + + } + + return target.copy( _currentViewport ); + + }; + + this.getViewport = function ( target ) { + + return target.copy( _viewport ); + + }; + + this.setViewport = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _viewport.set( x.x, x.y, x.z, x.w ); + + } else { + + _viewport.set( x, y, width, height ); + + } + + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissor = function ( target ) { + + return target.copy( _scissor ); + + }; + + this.setScissor = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _scissor.set( x.x, x.y, x.z, x.w ); + + } else { + + _scissor.set( x, y, width, height ); + + } + + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissorTest = function () { + + return _scissorTest; + + }; + + this.setScissorTest = function ( boolean ) { + + state.setScissorTest( _scissorTest = boolean ); + + }; + + this.setOpaqueSort = function ( method ) { + + _opaqueSort = method; + + }; + + this.setTransparentSort = function ( method ) { + + _transparentSort = method; + + }; + + // Clearing + + this.getClearColor = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getClearColor() now requires a Color as an argument' ); + + target = new Color(); + + } + + return target.copy( background.getClearColor() ); + + }; + + this.setClearColor = function () { + + background.setClearColor.apply( background, arguments ); + + }; + + this.getClearAlpha = function () { + + return background.getClearAlpha(); + + }; + + this.setClearAlpha = function () { + + background.setClearAlpha.apply( background, arguments ); + + }; + + this.clear = function ( color, depth, stencil ) { + + let bits = 0; + + if ( color === undefined || color ) bits |= 16384; + if ( depth === undefined || depth ) bits |= 256; + if ( stencil === undefined || stencil ) bits |= 1024; + + _gl.clear( bits ); + + }; + + this.clearColor = function () { + + this.clear( true, false, false ); + + }; + + this.clearDepth = function () { + + this.clear( false, true, false ); + + }; + + this.clearStencil = function () { + + this.clear( false, false, true ); + + }; + + // + + this.dispose = function () { + + _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); + + renderLists.dispose(); + renderStates.dispose(); + properties.dispose(); + cubemaps.dispose(); + objects.dispose(); + bindingStates.dispose(); + + xr.dispose(); + + animation.stop(); + + }; + + // Events + + function onContextLost( event ) { + + event.preventDefault(); + + console.log( 'THREE.WebGLRenderer: Context Lost.' ); + + _isContextLost = true; + + } + + function onContextRestore( /* event */ ) { + + console.log( 'THREE.WebGLRenderer: Context Restored.' ); + + _isContextLost = false; + + initGLContext(); + + } + + function onMaterialDispose( event ) { + + const material = event.target; + + material.removeEventListener( 'dispose', onMaterialDispose ); + + deallocateMaterial( material ); + + } + + // Buffer deallocation + + function deallocateMaterial( material ) { + + releaseMaterialProgramReference( material ); + + properties.remove( material ); + + } + + + function releaseMaterialProgramReference( material ) { + + const programInfo = properties.get( material ).program; + + if ( programInfo !== undefined ) { + + programCache.releaseProgram( programInfo ); + + } + + } + + // Buffer rendering + + function renderObjectImmediate( object, program ) { + + object.render( function ( object ) { + + _this.renderBufferImmediate( object, program ); + + } ); + + } + + this.renderBufferImmediate = function ( object, program ) { + + bindingStates.initAttributes(); + + const buffers = properties.get( object ); + + if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); + if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); + if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); + if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); + + const programAttributes = program.getAttributes(); + + if ( object.hasPositions ) { + + _gl.bindBuffer( 34962, buffers.position ); + _gl.bufferData( 34962, object.positionArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.position ); + _gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasNormals ) { + + _gl.bindBuffer( 34962, buffers.normal ); + _gl.bufferData( 34962, object.normalArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.normal ); + _gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasUvs ) { + + _gl.bindBuffer( 34962, buffers.uv ); + _gl.bufferData( 34962, object.uvArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.uv ); + _gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 ); + + } + + if ( object.hasColors ) { + + _gl.bindBuffer( 34962, buffers.color ); + _gl.bufferData( 34962, object.colorArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.color ); + _gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 ); + + } + + bindingStates.disableUnusedAttributes(); + + _gl.drawArrays( 4, 0, object.count ); + + object.count = 0; + + }; + + this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) { + + if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null) + + const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); + + const program = setProgram( camera, scene, material, object ); + + state.setMaterial( material, frontFaceCW ); + + // + + let index = geometry.index; + const position = geometry.attributes.position; + + // + + if ( index === null ) { + + if ( position === undefined || position.count === 0 ) return; + + } else if ( index.count === 0 ) { + + return; + + } + + // + + let rangeFactor = 1; + + if ( material.wireframe === true ) { + + index = geometries.getWireframeAttribute( geometry ); + rangeFactor = 2; + + } + + if ( material.morphTargets || material.morphNormals ) { + + morphtargets.update( object, geometry, material, program ); + + } + + bindingStates.setup( object, material, program, geometry, index ); + + let attribute; + let renderer = bufferRenderer; + + if ( index !== null ) { + + attribute = attributes.get( index ); + + renderer = indexedBufferRenderer; + renderer.setIndex( attribute ); + + } + + // + + const dataCount = ( index !== null ) ? index.count : position.count; + + const rangeStart = geometry.drawRange.start * rangeFactor; + const rangeCount = geometry.drawRange.count * rangeFactor; + + const groupStart = group !== null ? group.start * rangeFactor : 0; + const groupCount = group !== null ? group.count * rangeFactor : Infinity; + + const drawStart = Math.max( rangeStart, groupStart ); + const drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; + + const drawCount = Math.max( 0, drawEnd - drawStart + 1 ); + + if ( drawCount === 0 ) return; + + // + + if ( object.isMesh ) { + + if ( material.wireframe === true ) { + + state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); + renderer.setMode( 1 ); + + } else { + + renderer.setMode( 4 ); + + } + + } else if ( object.isLine ) { + + let lineWidth = material.linewidth; + + if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material + + state.setLineWidth( lineWidth * getTargetPixelRatio() ); + + if ( object.isLineSegments ) { + + renderer.setMode( 1 ); + + } else if ( object.isLineLoop ) { + + renderer.setMode( 2 ); + + } else { + + renderer.setMode( 3 ); + + } + + } else if ( object.isPoints ) { + + renderer.setMode( 0 ); + + } else if ( object.isSprite ) { + + renderer.setMode( 4 ); + + } + + if ( object.isInstancedMesh ) { + + renderer.renderInstances( drawStart, drawCount, object.count ); + + } else if ( geometry.isInstancedBufferGeometry ) { + + const instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount ); + + renderer.renderInstances( drawStart, drawCount, instanceCount ); + + } else { + + renderer.render( drawStart, drawCount ); + + } + + }; + + // Compile + + this.compile = function ( scene, camera ) { + + currentRenderState = renderStates.get( scene ); + currentRenderState.init(); + + scene.traverseVisible( function ( object ) { + + if ( object.isLight && object.layers.test( camera.layers ) ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } + + } ); + + currentRenderState.setupLights(); + + const compiled = new WeakMap(); + + scene.traverse( function ( object ) { + + const material = object.material; + + if ( material ) { + + if ( Array.isArray( material ) ) { + + for ( let i = 0; i < material.length; i ++ ) { + + const material2 = material[ i ]; + + if ( compiled.has( material2 ) === false ) { + + initMaterial( material2, scene, object ); + compiled.set( material2 ); + + } + + } + + } else if ( compiled.has( material ) === false ) { + + initMaterial( material, scene, object ); + compiled.set( material ); + + } + + } + + } ); + + }; + + // Animation Loop + + let onAnimationFrameCallback = null; + + function onAnimationFrame( time ) { + + if ( xr.isPresenting ) return; + if ( onAnimationFrameCallback ) onAnimationFrameCallback( time ); + + } + + const animation = new WebGLAnimation(); + animation.setAnimationLoop( onAnimationFrame ); + + if ( typeof window !== 'undefined' ) animation.setContext( window ); + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + xr.setAnimationLoop( callback ); + + ( callback === null ) ? animation.stop() : animation.start(); + + }; + + // Rendering + + this.render = function ( scene, camera ) { + + let renderTarget, forceClear; + + if ( arguments[ 2 ] !== undefined ) { + + console.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' ); + renderTarget = arguments[ 2 ]; + + } + + if ( arguments[ 3 ] !== undefined ) { + + console.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' ); + forceClear = arguments[ 3 ]; + + } + + if ( camera !== undefined && camera.isCamera !== true ) { + + console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); + return; + + } + + if ( _isContextLost === true ) return; + + // reset caching for this frame + + bindingStates.resetDefaultState(); + _currentMaterialId = - 1; + _currentCamera = null; + + // update scene graph + + if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); + + // update camera matrices and frustum + + if ( camera.parent === null ) camera.updateMatrixWorld(); + + if ( xr.enabled === true && xr.isPresenting === true ) { + + camera = xr.getCamera( camera ); + + } + + // + if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget ); + + currentRenderState = renderStates.get( scene, renderStateStack.length ); + currentRenderState.init(); + + renderStateStack.push( currentRenderState ); + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + _frustum.setFromProjectionMatrix( _projScreenMatrix ); + + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); + + currentRenderList = renderLists.get( scene, camera ); + currentRenderList.init(); + + projectObject( scene, camera, 0, _this.sortObjects ); + + currentRenderList.finish(); + + if ( _this.sortObjects === true ) { + + currentRenderList.sort( _opaqueSort, _transparentSort ); + + } + + // + + if ( _clippingEnabled === true ) clipping.beginShadows(); + + const shadowsArray = currentRenderState.state.shadowsArray; + + shadowMap.render( shadowsArray, scene, camera ); + + currentRenderState.setupLights(); + currentRenderState.setupLightsView( camera ); + + if ( _clippingEnabled === true ) clipping.endShadows(); + + // + + if ( this.info.autoReset === true ) this.info.reset(); + + if ( renderTarget !== undefined ) { + + this.setRenderTarget( renderTarget ); + + } + + // + + background.render( currentRenderList, scene, camera, forceClear ); + + // render scene + + const opaqueObjects = currentRenderList.opaque; + const transparentObjects = currentRenderList.transparent; + + if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera ); + if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera ); + + // + + if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera ); + + // + + if ( _currentRenderTarget !== null ) { + + // Generate mipmap if we're using any kind of mipmap filtering + + textures.updateRenderTargetMipmap( _currentRenderTarget ); + + // resolve multisample renderbuffers to a single-sample texture if necessary + + textures.updateMultisampleRenderTarget( _currentRenderTarget ); + + } + + // Ensure depth buffer writing is enabled so it can be cleared on next render + + state.buffers.depth.setTest( true ); + state.buffers.depth.setMask( true ); + state.buffers.color.setMask( true ); + + state.setPolygonOffset( false ); + + // _gl.finish(); + + renderStateStack.pop(); + if ( renderStateStack.length > 0 ) { + + currentRenderState = renderStateStack[ renderStateStack.length - 1 ]; + + } else { + + currentRenderState = null; + + } + + currentRenderList = null; + + }; + + function projectObject( object, camera, groupOrder, sortObjects ) { + + if ( object.visible === false ) return; + + const visible = object.layers.test( camera.layers ); + + if ( visible ) { + + if ( object.isGroup ) { + + groupOrder = object.renderOrder; + + } else if ( object.isLOD ) { + + if ( object.autoUpdate === true ) object.update( camera ); + + } else if ( object.isLight ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } else if ( object.isSprite ) { + + if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + const geometry = objects.update( object ); + const material = object.material; + + if ( material.visible ) { + + currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); + + } + + } + + } else if ( object.isImmediateRenderObject ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + currentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null ); + + } else if ( object.isMesh || object.isLine || object.isPoints ) { + + if ( object.isSkinnedMesh ) { + + // update skeleton only once in a frame + + if ( object.skeleton.frame !== info.render.frame ) { + + object.skeleton.update(); + object.skeleton.frame = info.render.frame; + + } + + } + + if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + const geometry = objects.update( object ); + const material = object.material; + + if ( Array.isArray( material ) ) { + + const groups = geometry.groups; + + for ( let i = 0, l = groups.length; i < l; i ++ ) { + + const group = groups[ i ]; + const groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group ); + + } + + } + + } else if ( material.visible ) { + + currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); + + } + + } + + } + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + projectObject( children[ i ], camera, groupOrder, sortObjects ); + + } + + } + + function renderObjects( renderList, scene, camera ) { + + const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + + for ( let i = 0, l = renderList.length; i < l; i ++ ) { + + const renderItem = renderList[ i ]; + + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = overrideMaterial === null ? renderItem.material : overrideMaterial; + const group = renderItem.group; + + if ( camera.isArrayCamera ) { + + const cameras = camera.cameras; + + for ( let j = 0, jl = cameras.length; j < jl; j ++ ) { + + const camera2 = cameras[ j ]; + + if ( object.layers.test( camera2.layers ) ) { + + state.viewport( _currentViewport.copy( camera2.viewport ) ); + + currentRenderState.setupLightsView( camera2 ); + + renderObject( object, scene, camera2, geometry, material, group ); + + } + + } + + } else { + + renderObject( object, scene, camera, geometry, material, group ); + + } + + } + + } + + function renderObject( object, scene, camera, geometry, material, group ) { + + object.onBeforeRender( _this, scene, camera, geometry, material, group ); + + object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); + object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); + + if ( object.isImmediateRenderObject ) { + + const program = setProgram( camera, scene, material, object ); + + state.setMaterial( material ); + + bindingStates.reset(); + + renderObjectImmediate( object, program ); + + } else { + + _this.renderBufferDirect( camera, scene, geometry, material, object, group ); + + } + + object.onAfterRender( _this, scene, camera, geometry, material, group ); + + } + + function initMaterial( material, scene, object ) { + + if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... + + const materialProperties = properties.get( material ); + + const lights = currentRenderState.state.lights; + const shadowsArray = currentRenderState.state.shadowsArray; + + const lightsStateVersion = lights.state.version; + + const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object ); + const programCacheKey = programCache.getProgramCacheKey( parameters ); + + let program = materialProperties.program; + let programChange = true; + + if ( program === undefined ) { + + // new material + material.addEventListener( 'dispose', onMaterialDispose ); + + } else if ( program.cacheKey !== programCacheKey ) { + + // changed glsl or parameters + releaseMaterialProgramReference( material ); + + } else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) { + + programChange = false; + + } else if ( parameters.shaderID !== undefined ) { + + // same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect + + const environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.envMap = cubemaps.get( material.envMap || environment ); + + return; + + } else { + + // only rebuild uniform list + programChange = false; + + } + + if ( programChange ) { + + parameters.uniforms = programCache.getUniforms( material ); + + material.onBeforeCompile( parameters, _this ); + + program = programCache.acquireProgram( parameters, programCacheKey ); + + materialProperties.program = program; + materialProperties.uniforms = parameters.uniforms; + materialProperties.outputEncoding = parameters.outputEncoding; + + } + + const uniforms = materialProperties.uniforms; + + if ( ! material.isShaderMaterial && + ! material.isRawShaderMaterial || + material.clipping === true ) { + + materialProperties.numClippingPlanes = clipping.numPlanes; + materialProperties.numIntersection = clipping.numIntersection; + uniforms.clippingPlanes = clipping.uniform; + + } + + materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.fog = scene.fog; + materialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment ); + + // store the light setup it was created for + + materialProperties.needsLights = materialNeedsLights( material ); + materialProperties.lightsStateVersion = lightsStateVersion; + + if ( materialProperties.needsLights ) { + + // wire up the material to this renderer's lighting state + + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.lightProbe.value = lights.state.probe; + uniforms.directionalLights.value = lights.state.directional; + uniforms.directionalLightShadows.value = lights.state.directionalShadow; + uniforms.spotLights.value = lights.state.spot; + uniforms.spotLightShadows.value = lights.state.spotShadow; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.ltc_1.value = lights.state.rectAreaLTC1; + uniforms.ltc_2.value = lights.state.rectAreaLTC2; + uniforms.pointLights.value = lights.state.point; + uniforms.pointLightShadows.value = lights.state.pointShadow; + uniforms.hemisphereLights.value = lights.state.hemi; + + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + // TODO (abelnation): add area lights shadow info to uniforms + + } + + const progUniforms = materialProperties.program.getUniforms(); + const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); + + materialProperties.uniformsList = uniformsList; + + } + + function setProgram( camera, scene, material, object ) { + + if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... + + textures.resetTextureUnits(); + + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding; + const envMap = cubemaps.get( material.envMap || environment ); + + const materialProperties = properties.get( material ); + const lights = currentRenderState.state.lights; + + if ( _clippingEnabled === true ) { + + if ( _localClippingEnabled === true || camera !== _currentCamera ) { + + const useCache = + camera === _currentCamera && + material.id === _currentMaterialId; + + // we might want to call this function with some ClippingGroup + // object instead of the material, once it becomes feasible + // (#8465, #8379) + clipping.setState( material, camera, useCache ); + + } + + } + + if ( material.version === materialProperties.__version ) { + + if ( material.fog && materialProperties.fog !== fog ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.environment !== environment ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.numClippingPlanes !== undefined && + ( materialProperties.numClippingPlanes !== clipping.numPlanes || + materialProperties.numIntersection !== clipping.numIntersection ) ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.outputEncoding !== encoding ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.envMap !== envMap ) { + + initMaterial( material, scene, object ); + + } + + } else { + + initMaterial( material, scene, object ); + materialProperties.__version = material.version; + + } + + let refreshProgram = false; + let refreshMaterial = false; + let refreshLights = false; + + const program = materialProperties.program, + p_uniforms = program.getUniforms(), + m_uniforms = materialProperties.uniforms; + + if ( state.useProgram( program.program ) ) { + + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + + } + + if ( material.id !== _currentMaterialId ) { + + _currentMaterialId = material.id; + + refreshMaterial = true; + + } + + if ( refreshProgram || _currentCamera !== camera ) { + + p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); + + if ( capabilities.logarithmicDepthBuffer ) { + + p_uniforms.setValue( _gl, 'logDepthBufFC', + 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); + + } + + if ( _currentCamera !== camera ) { + + _currentCamera = camera; + + // lighting uniforms depend on the camera so enforce an update + // now, in case this material supports lights - or later, when + // the next material that does gets activated: + + refreshMaterial = true; // set to true on material change + refreshLights = true; // remains set until update done + + } + + // load material specific uniforms + // (shader material also gets them for the sake of genericity) + + if ( material.isShaderMaterial || + material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshStandardMaterial || + material.envMap ) { + + const uCamPos = p_uniforms.map.cameraPosition; + + if ( uCamPos !== undefined ) { + + uCamPos.setValue( _gl, + _vector3.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial ) { + + p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true ); + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial || + material.isShadowMaterial || + material.skinning ) { + + p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); + + } + + } + + // skinning uniforms must be set even if material didn't change + // auto-setting of texture unit for bone texture must go before other textures + // otherwise textures used for skinning can take over texture units reserved for other material textures + + if ( material.skinning ) { + + p_uniforms.setOptional( _gl, object, 'bindMatrix' ); + p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); + + const skeleton = object.skeleton; + + if ( skeleton ) { + + const bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + if ( skeleton.boneTexture === null ) { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) + + + let size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix + size = MathUtils.ceilPowerOfTwo( size ); + size = Math.max( size, 4 ); + + const boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + boneMatrices.set( skeleton.boneMatrices ); // copy current values + + const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); + + skeleton.boneMatrices = boneMatrices; + skeleton.boneTexture = boneTexture; + skeleton.boneTextureSize = size; + + } + + p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures ); + p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); + + } else { + + p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); + + } + + } + + } + + if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) { + + materialProperties.receiveShadow = object.receiveShadow; + p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow ); + + } + + if ( refreshMaterial ) { + + p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); + + if ( materialProperties.needsLights ) { + + // the current material requires lighting info + + // note: all lighting uniforms are always set correctly + // they simply reference the renderer's state for their + // values + // + // use the current material's .needsUpdate flags to set + // the GL state when required + + markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); + + } + + // refresh uniforms common to several materials + + if ( fog && material.fog ) { + + materials.refreshFogUniforms( m_uniforms, fog ); + + } + + materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height ); + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + + } + + if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) { + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + material.uniformsNeedUpdate = false; + + } + + if ( material.isSpriteMaterial ) { + + p_uniforms.setValue( _gl, 'center', object.center ); + + } + + // common matrices + + p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); + p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); + p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); + + return program; + + } + + // If uniforms are marked as clean, they don't need to be loaded to the GPU. + + function markUniformsLightsNeedsUpdate( uniforms, value ) { + + uniforms.ambientLightColor.needsUpdate = value; + uniforms.lightProbe.needsUpdate = value; + + uniforms.directionalLights.needsUpdate = value; + uniforms.directionalLightShadows.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.pointLightShadows.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.spotLightShadows.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + + } + + function materialNeedsLights( material ) { + + return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || + material.isMeshStandardMaterial || material.isShadowMaterial || + ( material.isShaderMaterial && material.lights === true ); + + } + + // + this.setFramebuffer = function ( value ) { + + if ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value ); + + _framebuffer = value; + + }; + + this.getActiveCubeFace = function () { + + return _currentActiveCubeFace; + + }; + + this.getActiveMipmapLevel = function () { + + return _currentActiveMipmapLevel; + + }; + + this.getRenderList = function () { + + return currentRenderList; + + }; + + this.setRenderList = function ( renderList ) { + + currentRenderList = renderList; + + }; + + this.getRenderTarget = function () { + + return _currentRenderTarget; + + }; + + this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) { + + _currentRenderTarget = renderTarget; + _currentActiveCubeFace = activeCubeFace; + _currentActiveMipmapLevel = activeMipmapLevel; + + if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { + + textures.setupRenderTarget( renderTarget ); + + } + + let framebuffer = _framebuffer; + let isCube = false; + + if ( renderTarget ) { + + const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + framebuffer = __webglFramebuffer[ activeCubeFace ]; + isCube = true; + + } else if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer; + + } else { + + framebuffer = __webglFramebuffer; + + } + + _currentViewport.copy( renderTarget.viewport ); + _currentScissor.copy( renderTarget.scissor ); + _currentScissorTest = renderTarget.scissorTest; + + } else { + + _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor(); + _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor(); + _currentScissorTest = _scissorTest; + + } + + if ( _currentFramebuffer !== framebuffer ) { + + _gl.bindFramebuffer( 36160, framebuffer ); + _currentFramebuffer = framebuffer; + + } + + state.viewport( _currentViewport ); + state.scissor( _currentScissor ); + state.setScissorTest( _currentScissorTest ); + + if ( isCube ) { + + const textureProperties = properties.get( renderTarget.texture ); + _gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel ); + + } + + }; + + this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) { + + if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); + return; + + } + + let framebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) { + + framebuffer = framebuffer[ activeCubeFaceIndex ]; + + } + + if ( framebuffer ) { + + let restore = false; + + if ( framebuffer !== _currentFramebuffer ) { + + _gl.bindFramebuffer( 36160, framebuffer ); + + restore = true; + + } + + try { + + const texture = renderTarget.texture; + const textureFormat = texture.format; + const textureType = texture.type; + + if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); + return; + + } + + if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513) + ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox + ! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); + return; + + } + + if ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) { + + // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) + + if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { + + _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); + + } + + } else { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); + + } + + } finally { + + if ( restore ) { + + _gl.bindFramebuffer( 36160, _currentFramebuffer ); + + } + + } + + } + + }; + + this.copyFramebufferToTexture = function ( position, texture, level = 0 ) { + + const levelScale = Math.pow( 2, - level ); + const width = Math.floor( texture.image.width * levelScale ); + const height = Math.floor( texture.image.height * levelScale ); + const glFormat = utils.convert( texture.format ); + + textures.setTexture2D( texture, 0 ); + + _gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 ); + + state.unbindTexture(); + + }; + + this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) { + + const width = srcTexture.image.width; + const height = srcTexture.image.height; + const glFormat = utils.convert( dstTexture.format ); + const glType = utils.convert( dstTexture.type ); + + textures.setTexture2D( dstTexture, 0 ); + + // As another texture upload may have changed pixelStorei + // parameters, make sure they are correct for the dstTexture + _gl.pixelStorei( 37440, dstTexture.flipY ); + _gl.pixelStorei( 37441, dstTexture.premultiplyAlpha ); + _gl.pixelStorei( 3317, dstTexture.unpackAlignment ); + + if ( srcTexture.isDataTexture ) { + + _gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data ); + + } else { + + if ( srcTexture.isCompressedTexture ) { + + _gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data ); + + } else { + + _gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image ); + + } + + } + + // Generate mipmaps only when copying level 0 + if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 ); + + state.unbindTexture(); + + }; + + this.initTexture = function ( texture ) { + + textures.setTexture2D( texture, 0 ); + + state.unbindTexture(); + + }; + + this.resetState = function () { + + state.reset(); + bindingStates.reset(); + + }; + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + + } + + function WebGL1Renderer( parameters ) { + + WebGLRenderer.call( this, parameters ); + + } + + WebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), { + + constructor: WebGL1Renderer, + + isWebGL1Renderer: true + + } ); + + class FogExp2 { + + constructor( color, density ) { + + Object.defineProperty( this, 'isFogExp2', { value: true } ); + + this.name = ''; + + this.color = new Color( color ); + this.density = ( density !== undefined ) ? density : 0.00025; + + } + + clone() { + + return new FogExp2( this.color, this.density ); + + } + + toJSON( /* meta */ ) { + + return { + type: 'FogExp2', + color: this.color.getHex(), + density: this.density + }; + + } + + } + + class Fog { + + constructor( color, near, far ) { + + Object.defineProperty( this, 'isFog', { value: true } ); + + this.name = ''; + + this.color = new Color( color ); + + this.near = ( near !== undefined ) ? near : 1; + this.far = ( far !== undefined ) ? far : 1000; + + } + + clone() { + + return new Fog( this.color, this.near, this.far ); + + } + + toJSON( /* meta */ ) { + + return { + type: 'Fog', + color: this.color.getHex(), + near: this.near, + far: this.far + }; + + } + + } + + class Scene extends Object3D { + + constructor() { + + super(); + + Object.defineProperty( this, 'isScene', { value: true } ); + + this.type = 'Scene'; + + this.background = null; + this.environment = null; + this.fog = null; + + this.overrideMaterial = null; + + this.autoUpdate = true; // checked by the renderer + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + + } + + copy( source, recursive ) { + + super.copy( source, recursive ); + + if ( source.background !== null ) this.background = source.background.clone(); + if ( source.environment !== null ) this.environment = source.environment.clone(); + if ( source.fog !== null ) this.fog = source.fog.clone(); + + if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); + + this.autoUpdate = source.autoUpdate; + this.matrixAutoUpdate = source.matrixAutoUpdate; + + return this; + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + if ( this.background !== null ) data.object.background = this.background.toJSON( meta ); + if ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta ); + if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); + + return data; + + } + + } + + function InterleavedBuffer( array, stride ) { + + this.array = array; + this.stride = stride; + this.count = array !== undefined ? array.length / stride : 0; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + this.uuid = MathUtils.generateUUID(); + + } + + Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + Object.assign( InterleavedBuffer.prototype, { + + isInterleavedBuffer: true, + + onUploadCallback: function () {}, + + setUsage: function ( value ) { + + this.usage = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.count = source.count; + this.stride = source.stride; + this.usage = source.usage; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.stride; + index2 *= attribute.stride; + + for ( let i = 0, l = this.stride; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + set: function ( value, offset = 0 ) { + + this.array.set( value, offset ); + + return this; + + }, + + clone: function ( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = MathUtils.generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer; + + } + + const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] ); + + const ib = new InterleavedBuffer( array, this.stride ); + ib.setUsage( this.usage ); + + return ib; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + toJSON: function ( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + // generate UUID for array buffer if necessary + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = MathUtils.generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) ); + + } + + // + + return { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + }; + + } + + } ); + + const _vector$6 = new Vector3(); + + function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { + + this.name = ''; + + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + + this.normalized = normalized === true; + + } + + Object.defineProperties( InterleavedBufferAttribute.prototype, { + + count: { + + get: function () { + + return this.data.count; + + } + + }, + + array: { + + get: function () { + + return this.data.array; + + } + + }, + + needsUpdate: { + + set: function ( value ) { + + this.data.needsUpdate = value; + + } + + } + + } ); + + Object.assign( InterleavedBufferAttribute.prototype, { + + isInterleavedBufferAttribute: true, + + applyMatrix4: function ( m ) { + + for ( let i = 0, l = this.data.count; i < l; i ++ ) { + + _vector$6.x = this.getX( i ); + _vector$6.y = this.getY( i ); + _vector$6.z = this.getZ( i ); + + _vector$6.applyMatrix4( m ); + + this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); + + } + + return this; + + }, + + setX: function ( index, x ) { + + this.data.array[ index * this.data.stride + this.offset ] = x; + + return this; + + }, + + setY: function ( index, y ) { + + this.data.array[ index * this.data.stride + this.offset + 1 ] = y; + + return this; + + }, + + setZ: function ( index, z ) { + + this.data.array[ index * this.data.stride + this.offset + 2 ] = z; + + return this; + + }, + + setW: function ( index, w ) { + + this.data.array[ index * this.data.stride + this.offset + 3 ] = w; + + return this; + + }, + + getX: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset ]; + + }, + + getY: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 1 ]; + + }, + + getZ: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 2 ]; + + }, + + getW: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 3 ]; + + }, + + setXY: function ( index, x, y ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + this.data.array[ index + 3 ] = w; + + return this; + + }, + + clone: function ( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' ); + + const array = []; + + for ( let i = 0; i < this.count; i ++ ) { + + const index = i * this.data.stride + this.offset; + + for ( let j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized ); + + } else { + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data ); + + } + + return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized ); + + } + + }, + + toJSON: function ( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' ); + + const array = []; + + for ( let i = 0; i < this.count; i ++ ) { + + const index = i * this.data.stride + this.offset; + + for ( let j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + // deinterleave data and save it as an ordinary buffer attribute for now + + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: array, + normalized: this.normalized + }; + + } else { + + // save as true interlaved attribtue + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data ); + + } + + return { + isInterleavedBufferAttribute: true, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + }; + + } + + } + + } ); + + /** + * parameters = { + * color: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * rotation: , + * sizeAttenuation: + * } + */ + + function SpriteMaterial( parameters ) { + + Material.call( this ); + + this.type = 'SpriteMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.rotation = 0; + + this.sizeAttenuation = true; + + this.transparent = true; + + this.setValues( parameters ); + + } + + SpriteMaterial.prototype = Object.create( Material.prototype ); + SpriteMaterial.prototype.constructor = SpriteMaterial; + SpriteMaterial.prototype.isSpriteMaterial = true; + + SpriteMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.rotation = source.rotation; + + this.sizeAttenuation = source.sizeAttenuation; + + return this; + + }; + + let _geometry; + + const _intersectPoint = new Vector3(); + const _worldScale = new Vector3(); + const _mvPosition = new Vector3(); + + const _alignedPosition = new Vector2(); + const _rotatedPosition = new Vector2(); + const _viewWorldMatrix = new Matrix4(); + + const _vA$1 = new Vector3(); + const _vB$1 = new Vector3(); + const _vC$1 = new Vector3(); + + const _uvA$1 = new Vector2(); + const _uvB$1 = new Vector2(); + const _uvC$1 = new Vector2(); + + function Sprite( material ) { + + Object3D.call( this ); + + this.type = 'Sprite'; + + if ( _geometry === undefined ) { + + _geometry = new BufferGeometry(); + + const 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 + ] ); + + const interleavedBuffer = new InterleavedBuffer( float32Array, 5 ); + + _geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] ); + _geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) ); + _geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) ); + + } + + this.geometry = _geometry; + this.material = ( material !== undefined ) ? material : new SpriteMaterial(); + + this.center = new Vector2( 0.5, 0.5 ); + + } + + Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Sprite, + + isSprite: true, + + raycast: function ( raycaster, intersects ) { + + if ( raycaster.camera === null ) { + + console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ); + + } + + _worldScale.setFromMatrixScale( this.matrixWorld ); + + _viewWorldMatrix.copy( raycaster.camera.matrixWorld ); + this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld ); + + _mvPosition.setFromMatrixPosition( this.modelViewMatrix ); + + if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) { + + _worldScale.multiplyScalar( - _mvPosition.z ); + + } + + const rotation = this.material.rotation; + let sin, cos; + + if ( rotation !== 0 ) { + + cos = Math.cos( rotation ); + sin = Math.sin( rotation ); + + } + + const center = this.center; + + transformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + + _uvA$1.set( 0, 0 ); + _uvB$1.set( 1, 0 ); + _uvC$1.set( 1, 1 ); + + // check first triangle + let intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint ); + + if ( intersect === null ) { + + // check second triangle + transformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + _uvB$1.set( 0, 1 ); + + intersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint ); + if ( intersect === null ) { + + return; + + } + + } + + const distance = raycaster.ray.origin.distanceTo( _intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + point: _intersectPoint.clone(), + uv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ), + face: null, + object: this + + } ); + + }, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + if ( source.center !== undefined ) this.center.copy( source.center ); + + this.material = source.material; + + return this; + + } + + } ); + + function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { + + // compute position in camera space + _alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale ); + + // to check if rotation is not zero + if ( sin !== undefined ) { + + _rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y ); + _rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y ); + + } else { + + _rotatedPosition.copy( _alignedPosition ); + + } + + + vertexPosition.copy( mvPosition ); + vertexPosition.x += _rotatedPosition.x; + vertexPosition.y += _rotatedPosition.y; + + // transform to world space + vertexPosition.applyMatrix4( _viewWorldMatrix ); + + } + + const _v1$4 = new Vector3(); + const _v2$2 = new Vector3(); + + function LOD() { + + Object3D.call( this ); + + this._currentLevel = 0; + + this.type = 'LOD'; + + Object.defineProperties( this, { + levels: { + enumerable: true, + value: [] + } + } ); + + this.autoUpdate = true; + + } + + LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LOD, + + isLOD: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source, false ); + + const levels = source.levels; + + for ( let i = 0, l = levels.length; i < l; i ++ ) { + + const level = levels[ i ]; + + this.addLevel( level.object.clone(), level.distance ); + + } + + this.autoUpdate = source.autoUpdate; + + return this; + + }, + + addLevel: function ( object, distance = 0 ) { + + distance = Math.abs( distance ); + + const levels = this.levels; + + let l; + + for ( l = 0; l < levels.length; l ++ ) { + + if ( distance < levels[ l ].distance ) { + + break; + + } + + } + + levels.splice( l, 0, { distance: distance, object: object } ); + + this.add( object ); + + return this; + + }, + + getCurrentLevel: function () { + + return this._currentLevel; + + }, + + getObjectForDistance: function ( distance ) { + + const levels = this.levels; + + if ( levels.length > 0 ) { + + let i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance < levels[ i ].distance ) { + + break; + + } + + } + + return levels[ i - 1 ].object; + + } + + return null; + + }, + + raycast: function ( raycaster, intersects ) { + + const levels = this.levels; + + if ( levels.length > 0 ) { + + _v1$4.setFromMatrixPosition( this.matrixWorld ); + + const distance = raycaster.ray.origin.distanceTo( _v1$4 ); + + this.getObjectForDistance( distance ).raycast( raycaster, intersects ); + + } + + }, + + update: function ( camera ) { + + const levels = this.levels; + + if ( levels.length > 1 ) { + + _v1$4.setFromMatrixPosition( camera.matrixWorld ); + _v2$2.setFromMatrixPosition( this.matrixWorld ); + + const distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom; + + levels[ 0 ].object.visible = true; + + let i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance >= levels[ i ].distance ) { + + levels[ i - 1 ].object.visible = false; + levels[ i ].object.visible = true; + + } else { + + break; + + } + + } + + this._currentLevel = i - 1; + + for ( ; i < l; i ++ ) { + + levels[ i ].object.visible = false; + + } + + } + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, meta ); + + if ( this.autoUpdate === false ) data.object.autoUpdate = false; + + data.object.levels = []; + + const levels = this.levels; + + for ( let i = 0, l = levels.length; i < l; i ++ ) { + + const level = levels[ i ]; + + data.object.levels.push( { + object: level.object.uuid, + distance: level.distance + } ); + + } + + return data; + + } + + } ); + + const _basePosition = new Vector3(); + + const _skinIndex = new Vector4(); + const _skinWeight = new Vector4(); + + const _vector$7 = new Vector3(); + const _matrix$1 = new Matrix4(); + + function SkinnedMesh( geometry, material ) { + + if ( geometry && geometry.isGeometry ) { + + console.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + Mesh.call( this, geometry, material ); + + this.type = 'SkinnedMesh'; + + this.bindMode = 'attached'; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + + } + + SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: SkinnedMesh, + + isSkinnedMesh: true, + + copy: function ( source ) { + + Mesh.prototype.copy.call( this, source ); + + this.bindMode = source.bindMode; + this.bindMatrix.copy( source.bindMatrix ); + this.bindMatrixInverse.copy( source.bindMatrixInverse ); + + this.skeleton = source.skeleton; + + return this; + + }, + + bind: function ( skeleton, bindMatrix ) { + + this.skeleton = skeleton; + + if ( bindMatrix === undefined ) { + + this.updateMatrixWorld( true ); + + this.skeleton.calculateInverses(); + + bindMatrix = this.matrixWorld; + + } + + this.bindMatrix.copy( bindMatrix ); + this.bindMatrixInverse.copy( bindMatrix ).invert(); + + }, + + pose: function () { + + this.skeleton.pose(); + + }, + + normalizeSkinWeights: function () { + + const vector = new Vector4(); + + const skinWeight = this.geometry.attributes.skinWeight; + + for ( let i = 0, l = skinWeight.count; i < l; i ++ ) { + + vector.x = skinWeight.getX( i ); + vector.y = skinWeight.getY( i ); + vector.z = skinWeight.getZ( i ); + vector.w = skinWeight.getW( i ); + + const scale = 1.0 / vector.manhattanLength(); + + if ( scale !== Infinity ) { + + vector.multiplyScalar( scale ); + + } else { + + vector.set( 1, 0, 0, 0 ); // do something reasonable + + } + + skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w ); + + } + + }, + + updateMatrixWorld: function ( force ) { + + Mesh.prototype.updateMatrixWorld.call( this, force ); + + if ( this.bindMode === 'attached' ) { + + this.bindMatrixInverse.copy( this.matrixWorld ).invert(); + + } else if ( this.bindMode === 'detached' ) { + + this.bindMatrixInverse.copy( this.bindMatrix ).invert(); + + } else { + + console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); + + } + + }, + + boneTransform: function ( index, target ) { + + const skeleton = this.skeleton; + const geometry = this.geometry; + + _skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index ); + _skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index ); + + _basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix ); + + target.set( 0, 0, 0 ); + + for ( let i = 0; i < 4; i ++ ) { + + const weight = _skinWeight.getComponent( i ); + + if ( weight !== 0 ) { + + const boneIndex = _skinIndex.getComponent( i ); + + _matrix$1.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] ); + + target.addScaledVector( _vector$7.copy( _basePosition ).applyMatrix4( _matrix$1 ), weight ); + + } + + } + + return target.applyMatrix4( this.bindMatrixInverse ); + + } + + } ); + + function Bone() { + + Object3D.call( this ); + + this.type = 'Bone'; + + } + + Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Bone, + + isBone: true + + } ); + + const _offsetMatrix = new Matrix4(); + const _identityMatrix = new Matrix4(); + + function Skeleton( bones = [], boneInverses = [] ) { + + this.uuid = MathUtils.generateUUID(); + + this.bones = bones.slice( 0 ); + this.boneInverses = boneInverses; + this.boneMatrices = null; + + this.boneTexture = null; + this.boneTextureSize = 0; + + this.frame = - 1; + + this.init(); + + } + + Object.assign( Skeleton.prototype, { + + init: function () { + + const bones = this.bones; + const boneInverses = this.boneInverses; + + this.boneMatrices = new Float32Array( bones.length * 16 ); + + // calculate inverse bone matrices if necessary + + if ( boneInverses.length === 0 ) { + + this.calculateInverses(); + + } else { + + // handle special case + + if ( bones.length !== boneInverses.length ) { + + console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' ); + + this.boneInverses = []; + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + this.boneInverses.push( new Matrix4() ); + + } + + } + + } + + }, + + calculateInverses: function () { + + this.boneInverses.length = 0; + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const inverse = new Matrix4(); + + if ( this.bones[ i ] ) { + + inverse.copy( this.bones[ i ].matrixWorld ).invert(); + + } + + this.boneInverses.push( inverse ); + + } + + }, + + pose: function () { + + // recover the bind-time world matrices + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone ) { + + bone.matrixWorld.copy( this.boneInverses[ i ] ).invert(); + + } + + } + + // compute the local matrices, positions, rotations and scales + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone ) { + + if ( bone.parent && bone.parent.isBone ) { + + bone.matrix.copy( bone.parent.matrixWorld ).invert(); + bone.matrix.multiply( bone.matrixWorld ); + + } else { + + bone.matrix.copy( bone.matrixWorld ); + + } + + bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); + + } + + } + + }, + + update: function () { + + const bones = this.bones; + const boneInverses = this.boneInverses; + const boneMatrices = this.boneMatrices; + const boneTexture = this.boneTexture; + + // flatten bone matrices to array + + for ( let i = 0, il = bones.length; i < il; i ++ ) { + + // compute the offset between the current and the original transform + + const matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix; + + _offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); + _offsetMatrix.toArray( boneMatrices, i * 16 ); + + } + + if ( boneTexture !== null ) { + + boneTexture.needsUpdate = true; + + } + + }, + + clone: function () { + + return new Skeleton( this.bones, this.boneInverses ); + + }, + + getBoneByName: function ( name ) { + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone.name === name ) { + + return bone; + + } + + } + + return undefined; + + }, + + dispose: function ( ) { + + if ( this.boneTexture !== null ) { + + this.boneTexture.dispose(); + + this.boneTexture = null; + + } + + }, + + fromJSON: function ( json, bones ) { + + this.uuid = json.uuid; + + for ( let i = 0, l = json.bones.length; i < l; i ++ ) { + + const uuid = json.bones[ i ]; + let bone = bones[ uuid ]; + + if ( bone === undefined ) { + + console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid ); + bone = new Bone(); + + } + + this.bones.push( bone ); + this.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) ); + + } + + this.init(); + + return this; + + }, + + toJSON: function () { + + const data = { + metadata: { + version: 4.5, + type: 'Skeleton', + generator: 'Skeleton.toJSON' + }, + bones: [], + boneInverses: [] + }; + + data.uuid = this.uuid; + + const bones = this.bones; + const boneInverses = this.boneInverses; + + for ( let i = 0, l = bones.length; i < l; i ++ ) { + + const bone = bones[ i ]; + data.bones.push( bone.uuid ); + + const boneInverse = boneInverses[ i ]; + data.boneInverses.push( boneInverse.toArray() ); + + } + + return data; + + } + + } ); + + const _instanceLocalMatrix = new Matrix4(); + const _instanceWorldMatrix = new Matrix4(); + + const _instanceIntersects = []; + + const _mesh = new Mesh(); + + function InstancedMesh( geometry, material, count ) { + + Mesh.call( this, geometry, material ); + + this.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 ); + this.instanceColor = null; + + this.count = count; + + this.frustumCulled = false; + + } + + InstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: InstancedMesh, + + isInstancedMesh: true, + + copy: function ( source ) { + + Mesh.prototype.copy.call( this, source ); + + this.instanceMatrix.copy( source.instanceMatrix ); + this.count = source.count; + + return this; + + }, + + getColorAt: function ( index, color ) { + + color.fromArray( this.instanceColor.array, index * 3 ); + + }, + + getMatrixAt: function ( index, matrix ) { + + matrix.fromArray( this.instanceMatrix.array, index * 16 ); + + }, + + raycast: function ( raycaster, intersects ) { + + const matrixWorld = this.matrixWorld; + const raycastTimes = this.count; + + _mesh.geometry = this.geometry; + _mesh.material = this.material; + + if ( _mesh.material === undefined ) return; + + for ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) { + + // calculate the world matrix for each instance + + this.getMatrixAt( instanceId, _instanceLocalMatrix ); + + _instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix ); + + // the mesh represents this single instance + + _mesh.matrixWorld = _instanceWorldMatrix; + + _mesh.raycast( raycaster, _instanceIntersects ); + + // process the result of raycast + + for ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) { + + const intersect = _instanceIntersects[ i ]; + intersect.instanceId = instanceId; + intersect.object = this; + intersects.push( intersect ); + + } + + _instanceIntersects.length = 0; + + } + + }, + + setColorAt: function ( index, color ) { + + if ( this.instanceColor === null ) { + + this.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 ); + + } + + color.toArray( this.instanceColor.array, index * 3 ); + + }, + + setMatrixAt: function ( index, matrix ) { + + matrix.toArray( this.instanceMatrix.array, index * 16 ); + + }, + + updateMorphTargets: function () { + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * linecap: "round", + * linejoin: "round" + * } + */ + + function LineBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'LineBasicMaterial'; + + this.color = new Color( 0xffffff ); + + this.linewidth = 1; + this.linecap = 'round'; + this.linejoin = 'round'; + + this.morphTargets = false; + + this.setValues( parameters ); + + } + + LineBasicMaterial.prototype = Object.create( Material.prototype ); + LineBasicMaterial.prototype.constructor = LineBasicMaterial; + + LineBasicMaterial.prototype.isLineBasicMaterial = true; + + LineBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + + this.morphTargets = source.morphTargets; + + return this; + + }; + + const _start = new Vector3(); + const _end = new Vector3(); + const _inverseMatrix$1 = new Matrix4(); + const _ray$1 = new Ray(); + const _sphere$2 = new Sphere(); + + function Line( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) { + + Object3D.call( this ); + + this.type = 'Line'; + + this.geometry = geometry; + this.material = material; + + this.updateMorphTargets(); + + } + + Line.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Line, + + isLine: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + computeLineDistances: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + const positionAttribute = geometry.attributes.position; + const lineDistances = [ 0 ]; + + for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) { + + _start.fromBufferAttribute( positionAttribute, i - 1 ); + _end.fromBufferAttribute( positionAttribute, i ); + + lineDistances[ i ] = lineDistances[ i - 1 ]; + lineDistances[ i ] += _start.distanceTo( _end ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + const vertices = geometry.vertices; + const lineDistances = geometry.lineDistances; + + lineDistances[ 0 ] = 0; + + for ( let i = 1, l = vertices.length; i < l; i ++ ) { + + lineDistances[ i ] = lineDistances[ i - 1 ]; + lineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] ); + + } + + } + + return this; + + }, + + raycast: function ( raycaster, intersects ) { + + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Line.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$2.copy( geometry.boundingSphere ); + _sphere$2.applyMatrix4( matrixWorld ); + _sphere$2.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return; + + // + + _inverseMatrix$1.copy( matrixWorld ).invert(); + _ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 ); + + const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + const localThresholdSq = localThreshold * localThreshold; + + const vStart = new Vector3(); + const vEnd = new Vector3(); + const interSegment = new Vector3(); + const interRay = new Vector3(); + const step = this.isLineSegments ? 2 : 1; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + + if ( index !== null ) { + + const indices = index.array; + + for ( let i = 0, l = indices.length - 1; i < l; i += step ) { + + const a = indices[ i ]; + const b = indices[ i + 1 ]; + + vStart.fromBufferAttribute( positionAttribute, a ); + vEnd.fromBufferAttribute( positionAttribute, b ); + + const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } else { + + for ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) { + + vStart.fromBufferAttribute( positionAttribute, i ); + vEnd.fromBufferAttribute( positionAttribute, i + 1 ); + + const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + } else if ( geometry.isGeometry ) { + + const vertices = geometry.vertices; + const nbVertices = vertices.length; + + for ( let i = 0; i < nbVertices - 1; i += step ) { + + const distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + }, + + updateMorphTargets: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + const morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + const name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + + } ); + + const _start$1 = new Vector3(); + const _end$1 = new Vector3(); + + function LineSegments( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineSegments'; + + } + + LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineSegments, + + isLineSegments: true, + + computeLineDistances: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + const positionAttribute = geometry.attributes.position; + const lineDistances = []; + + for ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) { + + _start$1.fromBufferAttribute( positionAttribute, i ); + _end$1.fromBufferAttribute( positionAttribute, i + 1 ); + + lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; + lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + const vertices = geometry.vertices; + const lineDistances = geometry.lineDistances; + + for ( let i = 0, l = vertices.length; i < l; i += 2 ) { + + _start$1.copy( vertices[ i ] ); + _end$1.copy( vertices[ i + 1 ] ); + + lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; + lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); + + } + + } + + return this; + + } + + } ); + + function LineLoop( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineLoop'; + + } + + LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineLoop, + + isLineLoop: true, + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * + * size: , + * sizeAttenuation: + * + * morphTargets: + * } + */ + + function PointsMaterial( parameters ) { + + Material.call( this ); + + this.type = 'PointsMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.size = 1; + this.sizeAttenuation = true; + + this.morphTargets = false; + + this.setValues( parameters ); + + } + + PointsMaterial.prototype = Object.create( Material.prototype ); + PointsMaterial.prototype.constructor = PointsMaterial; + + PointsMaterial.prototype.isPointsMaterial = true; + + PointsMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + + this.morphTargets = source.morphTargets; + + return this; + + }; + + const _inverseMatrix$2 = new Matrix4(); + const _ray$2 = new Ray(); + const _sphere$3 = new Sphere(); + const _position$1 = new Vector3(); + + function Points( geometry = new BufferGeometry(), material = new PointsMaterial() ) { + + Object3D.call( this ); + + this.type = 'Points'; + + this.geometry = geometry; + this.material = material; + + this.updateMorphTargets(); + + } + + Points.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Points, + + isPoints: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + raycast: function ( raycaster, intersects ) { + + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Points.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$3.copy( geometry.boundingSphere ); + _sphere$3.applyMatrix4( matrixWorld ); + _sphere$3.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return; + + // + + _inverseMatrix$2.copy( matrixWorld ).invert(); + _ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 ); + + const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + const localThresholdSq = localThreshold * localThreshold; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + + if ( index !== null ) { + + const indices = index.array; + + for ( let i = 0, il = indices.length; i < il; i ++ ) { + + const a = indices[ i ]; + + _position$1.fromBufferAttribute( positionAttribute, a ); + + testPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } else { + + for ( let i = 0, l = positionAttribute.count; i < l; i ++ ) { + + _position$1.fromBufferAttribute( positionAttribute, i ); + + testPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } + + } else { + + const vertices = geometry.vertices; + + for ( let i = 0, l = vertices.length; i < l; i ++ ) { + + testPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } + + }, + + updateMorphTargets: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + const morphAttributes = geometry.morphAttributes; + const keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + const morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + const name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + + } ); + + function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) { + + const rayPointDistanceSq = _ray$2.distanceSqToPoint( point ); + + if ( rayPointDistanceSq < localThresholdSq ) { + + const intersectPoint = new Vector3(); + + _ray$2.closestPointToPoint( point, intersectPoint ); + intersectPoint.applyMatrix4( matrixWorld ); + + const distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + distanceToRay: Math.sqrt( rayPointDistanceSq ), + point: intersectPoint, + index: index, + face: null, + object: object + + } ); + + } + + } + + function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.format = format !== undefined ? format : RGBFormat; + + this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + + this.generateMipmaps = false; + + const scope = this; + + function updateVideo() { + + scope.needsUpdate = true; + video.requestVideoFrameCallback( updateVideo ); + + } + + if ( 'requestVideoFrameCallback' in video ) { + + video.requestVideoFrameCallback( updateVideo ); + + } + + } + + VideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), { + + constructor: VideoTexture, + + clone: function () { + + return new this.constructor( this.image ).copy( this ); + + }, + + isVideoTexture: true, + + update: function () { + + const video = this.image; + const hasVideoFrameCallback = 'requestVideoFrameCallback' in video; + + if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) { + + this.needsUpdate = true; + + } + + } + + } ); + + function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { width: width, height: height }; + this.mipmaps = mipmaps; + + // no flipping for cube textures + // (also flipping doesn't work for compressed textures ) + + this.flipY = false; + + // can't generate mipmaps for compressed textures + // mips must be embedded in DDS files + + this.generateMipmaps = false; + + } + + CompressedTexture.prototype = Object.create( Texture.prototype ); + CompressedTexture.prototype.constructor = CompressedTexture; + + CompressedTexture.prototype.isCompressedTexture = true; + + function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.needsUpdate = true; + + } + + CanvasTexture.prototype = Object.create( Texture.prototype ); + CanvasTexture.prototype.constructor = CanvasTexture; + CanvasTexture.prototype.isCanvasTexture = true; + + function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { + + format = format !== undefined ? format : DepthFormat; + + if ( format !== DepthFormat && format !== DepthStencilFormat ) { + + throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); + + } + + if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; + if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type$1; + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.image = { width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.flipY = false; + this.generateMipmaps = false; + + } + + DepthTexture.prototype = Object.create( Texture.prototype ); + DepthTexture.prototype.constructor = DepthTexture; + DepthTexture.prototype.isDepthTexture = true; + + let _geometryId = 0; // Geometry uses even numbers as Id + const _m1$3 = new Matrix4(); + const _obj$1 = new Object3D(); + const _offset$1 = new Vector3(); + + function Geometry() { + + Object.defineProperty( this, 'id', { value: _geometryId += 2 } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Geometry'; + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + + this.morphTargets = []; + this.morphNormals = []; + + this.skinWeights = []; + this.skinIndices = []; + + this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.elementsNeedUpdate = false; + this.verticesNeedUpdate = false; + this.uvsNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.lineDistancesNeedUpdate = false; + this.groupsNeedUpdate = false; + + } + + Geometry.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { + + constructor: Geometry, + + isGeometry: true, + + applyMatrix4: function ( matrix ) { + + const normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { + + const vertex = this.vertices[ i ]; + vertex.applyMatrix4( matrix ); + + } + + for ( let i = 0, il = this.faces.length; i < il; i ++ ) { + + const face = this.faces[ i ]; + face.normal.applyMatrix3( normalMatrix ).normalize(); + + for ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); + + } + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + this.verticesNeedUpdate = true; + this.normalsNeedUpdate = true; + + return this; + + }, + + rotateX: function ( angle ) { + + // rotate geometry around world x-axis + + _m1$3.makeRotationX( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + rotateY: function ( angle ) { + + // rotate geometry around world y-axis + + _m1$3.makeRotationY( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + rotateZ: function ( angle ) { + + // rotate geometry around world z-axis + + _m1$3.makeRotationZ( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + translate: function ( x, y, z ) { + + // translate geometry + + _m1$3.makeTranslation( x, y, z ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + scale: function ( x, y, z ) { + + // scale geometry + + _m1$3.makeScale( x, y, z ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + lookAt: function ( vector ) { + + _obj$1.lookAt( vector ); + + _obj$1.updateMatrix(); + + this.applyMatrix4( _obj$1.matrix ); + + return this; + + }, + + fromBufferGeometry: function ( geometry ) { + + const scope = this; + + const index = geometry.index !== null ? geometry.index : undefined; + const attributes = geometry.attributes; + + if ( attributes.position === undefined ) { + + console.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' ); + return this; + + } + + const position = attributes.position; + const normal = attributes.normal; + const color = attributes.color; + const uv = attributes.uv; + const uv2 = attributes.uv2; + + if ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = []; + + for ( let i = 0; i < position.count; i ++ ) { + + scope.vertices.push( new Vector3().fromBufferAttribute( position, i ) ); + + if ( color !== undefined ) { + + scope.colors.push( new Color().fromBufferAttribute( color, i ) ); + + } + + } + + function addFace( a, b, c, materialIndex ) { + + const vertexColors = ( color === undefined ) ? [] : [ + scope.colors[ a ].clone(), + scope.colors[ b ].clone(), + scope.colors[ c ].clone() + ]; + + const vertexNormals = ( normal === undefined ) ? [] : [ + new Vector3().fromBufferAttribute( normal, a ), + new Vector3().fromBufferAttribute( normal, b ), + new Vector3().fromBufferAttribute( normal, c ) + ]; + + const face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); + + scope.faces.push( face ); + + if ( uv !== undefined ) { + + scope.faceVertexUvs[ 0 ].push( [ + new Vector2().fromBufferAttribute( uv, a ), + new Vector2().fromBufferAttribute( uv, b ), + new Vector2().fromBufferAttribute( uv, c ) + ] ); + + } + + if ( uv2 !== undefined ) { + + scope.faceVertexUvs[ 1 ].push( [ + new Vector2().fromBufferAttribute( uv2, a ), + new Vector2().fromBufferAttribute( uv2, b ), + new Vector2().fromBufferAttribute( uv2, c ) + ] ); + + } + + } + + const groups = geometry.groups; + + if ( groups.length > 0 ) { + + for ( let i = 0; i < groups.length; i ++ ) { + + const group = groups[ i ]; + + const start = group.start; + const count = group.count; + + for ( let j = start, jl = start + count; j < jl; j += 3 ) { + + if ( index !== undefined ) { + + addFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex ); + + } else { + + addFace( j, j + 1, j + 2, group.materialIndex ); + + } + + } + + } + + } else { + + if ( index !== undefined ) { + + for ( let i = 0; i < index.count; i += 3 ) { + + addFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) ); + + } + + } else { + + for ( let i = 0; i < position.count; i += 3 ) { + + addFace( i, i + 1, i + 2 ); + + } + + } + + } + + this.computeFaceNormals(); + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + this.boundingBox.getCenter( _offset$1 ).negate(); + + this.translate( _offset$1.x, _offset$1.y, _offset$1.z ); + + return this; + + }, + + normalize: function () { + + this.computeBoundingSphere(); + + const center = this.boundingSphere.center; + const radius = this.boundingSphere.radius; + + const s = radius === 0 ? 1 : 1.0 / radius; + + const matrix = new Matrix4(); + matrix.set( + s, 0, 0, - s * center.x, + 0, s, 0, - s * center.y, + 0, 0, s, - s * center.z, + 0, 0, 0, 1 + ); + + this.applyMatrix4( matrix ); + + return this; + + }, + + computeFaceNormals: function () { + + const cb = new Vector3(), ab = new Vector3(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vA = this.vertices[ face.a ]; + const vB = this.vertices[ face.b ]; + const vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + cb.normalize(); + + face.normal.copy( cb ); + + } + + }, + + computeVertexNormals: function ( areaWeighted = true ) { + + const vertices = new Array( this.vertices.length ); + + for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ] = new Vector3(); + + } + + if ( areaWeighted ) { + + // vertex normals weighted by triangle areas + // http://www.iquilezles.org/www/articles/normals/normals.htm + + const cb = new Vector3(), ab = new Vector3(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vA = this.vertices[ face.a ]; + const vB = this.vertices[ face.b ]; + const vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + vertices[ face.a ].add( cb ); + vertices[ face.b ].add( cb ); + vertices[ face.c ].add( cb ); + + } + + } else { + + this.computeFaceNormals(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + vertices[ face.a ].add( face.normal ); + vertices[ face.b ].add( face.normal ); + vertices[ face.c ].add( face.normal ); + + } + + } + + for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ].normalize(); + + } + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( vertices[ face.a ] ); + vertexNormals[ 1 ].copy( vertices[ face.b ] ); + vertexNormals[ 2 ].copy( vertices[ face.c ] ); + + } else { + + vertexNormals[ 0 ] = vertices[ face.a ].clone(); + vertexNormals[ 1 ] = vertices[ face.b ].clone(); + vertexNormals[ 2 ] = vertices[ face.c ].clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeFlatVertexNormals: function () { + + this.computeFaceNormals(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( face.normal ); + vertexNormals[ 1 ].copy( face.normal ); + vertexNormals[ 2 ].copy( face.normal ); + + } else { + + vertexNormals[ 0 ] = face.normal.clone(); + vertexNormals[ 1 ] = face.normal.clone(); + vertexNormals[ 2 ] = face.normal.clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeMorphNormals: function () { + + // save original normals + // - create temp variables on first access + // otherwise just copy (for faster repeated calls) + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + if ( ! face.__originalFaceNormal ) { + + face.__originalFaceNormal = face.normal.clone(); + + } else { + + face.__originalFaceNormal.copy( face.normal ); + + } + + if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; + + for ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) { + + if ( ! face.__originalVertexNormals[ i ] ) { + + face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); + + } else { + + face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); + + } + + } + + } + + // use temp geometry to compute face and vertex normals for each morph + + const tmpGeo = new Geometry(); + tmpGeo.faces = this.faces; + + for ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) { + + // create on first access + + if ( ! this.morphNormals[ i ] ) { + + this.morphNormals[ i ] = {}; + this.morphNormals[ i ].faceNormals = []; + this.morphNormals[ i ].vertexNormals = []; + + const dstNormalsFace = this.morphNormals[ i ].faceNormals; + const dstNormalsVertex = this.morphNormals[ i ].vertexNormals; + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const faceNormal = new Vector3(); + const vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; + + dstNormalsFace.push( faceNormal ); + dstNormalsVertex.push( vertexNormals ); + + } + + } + + const morphNormals = this.morphNormals[ i ]; + + // set vertices to morph target + + tmpGeo.vertices = this.morphTargets[ i ].vertices; + + // compute morph normals + + tmpGeo.computeFaceNormals(); + tmpGeo.computeVertexNormals(); + + // store morph normals + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const faceNormal = morphNormals.faceNormals[ f ]; + const vertexNormals = morphNormals.vertexNormals[ f ]; + + faceNormal.copy( face.normal ); + + vertexNormals.a.copy( face.vertexNormals[ 0 ] ); + vertexNormals.b.copy( face.vertexNormals[ 1 ] ); + vertexNormals.c.copy( face.vertexNormals[ 2 ] ); + + } + + } + + // restore original normals + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + face.normal = face.__originalFaceNormal; + face.vertexNormals = face.__originalVertexNormals; + + } + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + this.boundingBox.setFromPoints( this.vertices ); + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + this.boundingSphere.setFromPoints( this.vertices ); + + }, + + merge: function ( geometry, matrix, materialIndexOffset = 0 ) { + + if ( ! ( geometry && geometry.isGeometry ) ) { + + console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); + return; + + } + + let normalMatrix; + const vertexOffset = this.vertices.length, + vertices1 = this.vertices, + vertices2 = geometry.vertices, + faces1 = this.faces, + faces2 = geometry.faces, + colors1 = this.colors, + colors2 = geometry.colors; + + if ( matrix !== undefined ) { + + normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + } + + // vertices + + for ( let i = 0, il = vertices2.length; i < il; i ++ ) { + + const vertex = vertices2[ i ]; + + const vertexCopy = vertex.clone(); + + if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); + + vertices1.push( vertexCopy ); + + } + + // colors + + for ( let i = 0, il = colors2.length; i < il; i ++ ) { + + colors1.push( colors2[ i ].clone() ); + + } + + // faces + + for ( let i = 0, il = faces2.length; i < il; i ++ ) { + + const face = faces2[ i ]; + let normal, color; + const faceVertexNormals = face.vertexNormals, + faceVertexColors = face.vertexColors; + + const faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); + faceCopy.normal.copy( face.normal ); + + if ( normalMatrix !== undefined ) { + + faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); + + } + + for ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { + + normal = faceVertexNormals[ j ].clone(); + + if ( normalMatrix !== undefined ) { + + normal.applyMatrix3( normalMatrix ).normalize(); + + } + + faceCopy.vertexNormals.push( normal ); + + } + + faceCopy.color.copy( face.color ); + + for ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { + + color = faceVertexColors[ j ]; + faceCopy.vertexColors.push( color.clone() ); + + } + + faceCopy.materialIndex = face.materialIndex + materialIndexOffset; + + faces1.push( faceCopy ); + + } + + // uvs + + for ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) { + + const faceVertexUvs2 = geometry.faceVertexUvs[ i ]; + + if ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = []; + + for ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) { + + const uvs2 = faceVertexUvs2[ j ], uvsCopy = []; + + for ( let k = 0, kl = uvs2.length; k < kl; k ++ ) { + + uvsCopy.push( uvs2[ k ].clone() ); + + } + + this.faceVertexUvs[ i ].push( uvsCopy ); + + } + + } + + }, + + mergeMesh: function ( mesh ) { + + if ( ! ( mesh && mesh.isMesh ) ) { + + console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); + return; + + } + + if ( mesh.matrixAutoUpdate ) mesh.updateMatrix(); + + this.merge( mesh.geometry, mesh.matrix ); + + }, + + /* + * Checks for duplicate vertices with hashmap. + * Duplicated vertices are removed + * and faces' vertices are updated. + */ + + mergeVertices: function ( precisionPoints = 4 ) { + + const verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) + const unique = [], changes = []; + + const precision = Math.pow( 10, precisionPoints ); + + for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { + + const v = this.vertices[ i ]; + const key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); + + if ( verticesMap[ key ] === undefined ) { + + verticesMap[ key ] = i; + unique.push( this.vertices[ i ] ); + changes[ i ] = unique.length - 1; + + } else { + + //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); + changes[ i ] = changes[ verticesMap[ key ] ]; + + } + + } + + + // if faces are completely degenerate after merging vertices, we + // have to remove them from the geometry. + const faceIndicesToRemove = []; + + for ( let i = 0, il = this.faces.length; i < il; i ++ ) { + + const face = this.faces[ i ]; + + face.a = changes[ face.a ]; + face.b = changes[ face.b ]; + face.c = changes[ face.c ]; + + const indices = [ face.a, face.b, face.c ]; + + // if any duplicate vertices are found in a Face3 + // we have to remove the face as nothing can be saved + for ( let n = 0; n < 3; n ++ ) { + + if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { + + faceIndicesToRemove.push( i ); + break; + + } + + } + + } + + for ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { + + const idx = faceIndicesToRemove[ i ]; + + this.faces.splice( idx, 1 ); + + for ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { + + this.faceVertexUvs[ j ].splice( idx, 1 ); + + } + + } + + // Use unique set of vertices + + const diff = this.vertices.length - unique.length; + this.vertices = unique; + return diff; + + }, + + setFromPoints: function ( points ) { + + this.vertices = []; + + for ( let i = 0, l = points.length; i < l; i ++ ) { + + const point = points[ i ]; + this.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return this; + + }, + + sortFacesByMaterialIndex: function () { + + const faces = this.faces; + const length = faces.length; + + // tag faces + + for ( let i = 0; i < length; i ++ ) { + + faces[ i ]._id = i; + + } + + // sort faces + + function materialIndexSort( a, b ) { + + return a.materialIndex - b.materialIndex; + + } + + faces.sort( materialIndexSort ); + + // sort uvs + + const uvs1 = this.faceVertexUvs[ 0 ]; + const uvs2 = this.faceVertexUvs[ 1 ]; + + let newUvs1, newUvs2; + + if ( uvs1 && uvs1.length === length ) newUvs1 = []; + if ( uvs2 && uvs2.length === length ) newUvs2 = []; + + for ( let i = 0; i < length; i ++ ) { + + const id = faces[ i ]._id; + + if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); + if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); + + } + + if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; + if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; + + }, + + toJSON: function () { + + const data = { + metadata: { + version: 4.5, + type: 'Geometry', + generator: 'Geometry.toJSON' + } + }; + + // standard Geometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + const parameters = this.parameters; + + for ( const key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + const vertices = []; + + for ( let i = 0; i < this.vertices.length; i ++ ) { + + const vertex = this.vertices[ i ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + const faces = []; + const normals = []; + const normalsHash = {}; + const colors = []; + const colorsHash = {}; + const uvs = []; + const uvsHash = {}; + + for ( let i = 0; i < this.faces.length; i ++ ) { + + const face = this.faces[ i ]; + + const hasMaterial = true; + const hasFaceUv = false; // deprecated + const hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; + const hasFaceNormal = face.normal.length() > 0; + const hasFaceVertexNormal = face.vertexNormals.length > 0; + const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; + const hasFaceVertexColor = face.vertexColors.length > 0; + + let faceType = 0; + + faceType = setBit( faceType, 0, 0 ); // isQuad + faceType = setBit( faceType, 1, hasMaterial ); + faceType = setBit( faceType, 2, hasFaceUv ); + faceType = setBit( faceType, 3, hasFaceVertexUv ); + faceType = setBit( faceType, 4, hasFaceNormal ); + faceType = setBit( faceType, 5, hasFaceVertexNormal ); + faceType = setBit( faceType, 6, hasFaceColor ); + faceType = setBit( faceType, 7, hasFaceVertexColor ); + + faces.push( faceType ); + faces.push( face.a, face.b, face.c ); + faces.push( face.materialIndex ); + + if ( hasFaceVertexUv ) { + + const faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; + + faces.push( + getUvIndex( faceVertexUvs[ 0 ] ), + getUvIndex( faceVertexUvs[ 1 ] ), + getUvIndex( faceVertexUvs[ 2 ] ) + ); + + } + + if ( hasFaceNormal ) { + + faces.push( getNormalIndex( face.normal ) ); + + } + + if ( hasFaceVertexNormal ) { + + const vertexNormals = face.vertexNormals; + + faces.push( + getNormalIndex( vertexNormals[ 0 ] ), + getNormalIndex( vertexNormals[ 1 ] ), + getNormalIndex( vertexNormals[ 2 ] ) + ); + + } + + if ( hasFaceColor ) { + + faces.push( getColorIndex( face.color ) ); + + } + + if ( hasFaceVertexColor ) { + + const vertexColors = face.vertexColors; + + faces.push( + getColorIndex( vertexColors[ 0 ] ), + getColorIndex( vertexColors[ 1 ] ), + getColorIndex( vertexColors[ 2 ] ) + ); + + } + + } + + function setBit( value, position, enabled ) { + + return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); + + } + + function getNormalIndex( normal ) { + + const hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); + + if ( normalsHash[ hash ] !== undefined ) { + + return normalsHash[ hash ]; + + } + + normalsHash[ hash ] = normals.length / 3; + normals.push( normal.x, normal.y, normal.z ); + + return normalsHash[ hash ]; + + } + + function getColorIndex( color ) { + + const hash = color.r.toString() + color.g.toString() + color.b.toString(); + + if ( colorsHash[ hash ] !== undefined ) { + + return colorsHash[ hash ]; + + } + + colorsHash[ hash ] = colors.length; + colors.push( color.getHex() ); + + return colorsHash[ hash ]; + + } + + function getUvIndex( uv ) { + + const hash = uv.x.toString() + uv.y.toString(); + + if ( uvsHash[ hash ] !== undefined ) { + + return uvsHash[ hash ]; + + } + + uvsHash[ hash ] = uvs.length / 2; + uvs.push( uv.x, uv.y ); + + return uvsHash[ hash ]; + + } + + data.data = {}; + + data.data.vertices = vertices; + data.data.normals = normals; + if ( colors.length > 0 ) data.data.colors = colors; + if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility + data.data.faces = faces; + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + const parameters = this.parameters; + + if ( parameters !== undefined ) { + + const values = []; + + for ( const key in parameters ) { + + values.push( parameters[ key ] ); + + } + + const geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new Geometry().copy( this ); + + }, + + copy: function ( source ) { + + // reset + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + this.morphTargets = []; + this.morphNormals = []; + this.skinWeights = []; + this.skinIndices = []; + this.lineDistances = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // vertices + + const vertices = source.vertices; + + for ( let i = 0, il = vertices.length; i < il; i ++ ) { + + this.vertices.push( vertices[ i ].clone() ); + + } + + // colors + + const colors = source.colors; + + for ( let i = 0, il = colors.length; i < il; i ++ ) { + + this.colors.push( colors[ i ].clone() ); + + } + + // faces + + const faces = source.faces; + + for ( let i = 0, il = faces.length; i < il; i ++ ) { + + this.faces.push( faces[ i ].clone() ); + + } + + // face vertex uvs + + for ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { + + const faceVertexUvs = source.faceVertexUvs[ i ]; + + if ( this.faceVertexUvs[ i ] === undefined ) { + + this.faceVertexUvs[ i ] = []; + + } + + for ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { + + const uvs = faceVertexUvs[ j ], uvsCopy = []; + + for ( let k = 0, kl = uvs.length; k < kl; k ++ ) { + + const uv = uvs[ k ]; + + uvsCopy.push( uv.clone() ); + + } + + this.faceVertexUvs[ i ].push( uvsCopy ); + + } + + } + + // morph targets + + const morphTargets = source.morphTargets; + + for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { + + const morphTarget = {}; + morphTarget.name = morphTargets[ i ].name; + + // vertices + + if ( morphTargets[ i ].vertices !== undefined ) { + + morphTarget.vertices = []; + + for ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) { + + morphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() ); + + } + + } + + // normals + + if ( morphTargets[ i ].normals !== undefined ) { + + morphTarget.normals = []; + + for ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) { + + morphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() ); + + } + + } + + this.morphTargets.push( morphTarget ); + + } + + // morph normals + + const morphNormals = source.morphNormals; + + for ( let i = 0, il = morphNormals.length; i < il; i ++ ) { + + const morphNormal = {}; + + // vertex normals + + if ( morphNormals[ i ].vertexNormals !== undefined ) { + + morphNormal.vertexNormals = []; + + for ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) { + + const srcVertexNormal = morphNormals[ i ].vertexNormals[ j ]; + const destVertexNormal = {}; + + destVertexNormal.a = srcVertexNormal.a.clone(); + destVertexNormal.b = srcVertexNormal.b.clone(); + destVertexNormal.c = srcVertexNormal.c.clone(); + + morphNormal.vertexNormals.push( destVertexNormal ); + + } + + } + + // face normals + + if ( morphNormals[ i ].faceNormals !== undefined ) { + + morphNormal.faceNormals = []; + + for ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) { + + morphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() ); + + } + + } + + this.morphNormals.push( morphNormal ); + + } + + // skin weights + + const skinWeights = source.skinWeights; + + for ( let i = 0, il = skinWeights.length; i < il; i ++ ) { + + this.skinWeights.push( skinWeights[ i ].clone() ); + + } + + // skin indices + + const skinIndices = source.skinIndices; + + for ( let i = 0, il = skinIndices.length; i < il; i ++ ) { + + this.skinIndices.push( skinIndices[ i ].clone() ); + + } + + // line distances + + const lineDistances = source.lineDistances; + + for ( let i = 0, il = lineDistances.length; i < il; i ++ ) { + + this.lineDistances.push( lineDistances[ i ] ); + + } + + // bounding box + + const boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + const boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // update flags + + this.elementsNeedUpdate = source.elementsNeedUpdate; + this.verticesNeedUpdate = source.verticesNeedUpdate; + this.uvsNeedUpdate = source.uvsNeedUpdate; + this.normalsNeedUpdate = source.normalsNeedUpdate; + this.colorsNeedUpdate = source.colorsNeedUpdate; + this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; + this.groupsNeedUpdate = source.groupsNeedUpdate; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + class BoxGeometry extends Geometry { + + constructor( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + super(); + + this.type = 'BoxGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + this.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) ); + this.mergeVertices(); + + } + + } + + class CircleBufferGeometry extends BufferGeometry { + + constructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super(); + + this.type = 'CircleBufferGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + segments = Math.max( 3, segments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + const vertex = new Vector3(); + const uv = new Vector2(); + + // center point + + vertices.push( 0, 0, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( 0.5, 0.5 ); + + for ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) { + + const segment = thetaStart + s / segments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uvs + + uv.x = ( vertices[ i ] / radius + 1 ) / 2; + uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // indices + + for ( let i = 1; i <= segments; i ++ ) { + + indices.push( i, i + 1, 0 ); + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + } + + class CircleGeometry extends Geometry { + + constructor( radius, segments, thetaStart, thetaLength ) { + + super(); + this.type = 'CircleGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + } + + class CylinderBufferGeometry extends BufferGeometry { + + constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super(); + this.type = 'CylinderBufferGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + const scope = this; + + radialSegments = Math.floor( radialSegments ); + heightSegments = Math.floor( heightSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + let index = 0; + const indexArray = []; + const halfHeight = height / 2; + let groupStart = 0; + + // generate geometry + + generateTorso(); + + if ( openEnded === false ) { + + if ( radiusTop > 0 ) generateCap( true ); + if ( radiusBottom > 0 ) generateCap( false ); + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function generateTorso() { + + const normal = new Vector3(); + const vertex = new Vector3(); + + let groupCount = 0; + + // this will be used to calculate the normal + const slope = ( radiusBottom - radiusTop ) / height; + + // generate vertices, normals and uvs + + for ( let y = 0; y <= heightSegments; y ++ ) { + + const indexRow = []; + + const v = y / heightSegments; + + // calculate the radius of the current row + + const radius = v * ( radiusBottom - radiusTop ) + radiusTop; + + for ( let x = 0; x <= radialSegments; x ++ ) { + + const u = x / radialSegments; + + const theta = u * thetaLength + thetaStart; + + const sinTheta = Math.sin( theta ); + const cosTheta = Math.cos( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = - v * height + halfHeight; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( sinTheta, slope, cosTheta ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + // save index of vertex in respective row + + indexRow.push( index ++ ); + + } + + // now save vertices of the row in our index array + + indexArray.push( indexRow ); + + } + + // generate indices + + for ( let x = 0; x < radialSegments; x ++ ) { + + for ( let y = 0; y < heightSegments; y ++ ) { + + // we use the index array to access the correct indices + + const a = indexArray[ y ][ x ]; + const b = indexArray[ y + 1 ][ x ]; + const c = indexArray[ y + 1 ][ x + 1 ]; + const d = indexArray[ y ][ x + 1 ]; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // update group counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, 0 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + function generateCap( top ) { + + // save the index of the first center vertex + const centerIndexStart = index; + + const uv = new Vector2(); + const vertex = new Vector3(); + + let groupCount = 0; + + const radius = ( top === true ) ? radiusTop : radiusBottom; + const sign = ( top === true ) ? 1 : - 1; + + // first we generate the center vertex data of the cap. + // because the geometry needs one set of uvs per face, + // we must generate a center vertex per face/segment + + for ( let x = 1; x <= radialSegments; x ++ ) { + + // vertex + + vertices.push( 0, halfHeight * sign, 0 ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uvs.push( 0.5, 0.5 ); + + // increase index + + index ++; + + } + + // save the index of the last center vertex + const centerIndexEnd = index; + + // now we generate the surrounding vertices, normals and uvs + + for ( let x = 0; x <= radialSegments; x ++ ) { + + const u = x / radialSegments; + const theta = u * thetaLength + thetaStart; + + const cosTheta = Math.cos( theta ); + const sinTheta = Math.sin( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = halfHeight * sign; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uv.x = ( cosTheta * 0.5 ) + 0.5; + uv.y = ( sinTheta * 0.5 * sign ) + 0.5; + uvs.push( uv.x, uv.y ); + + // increase index + + index ++; + + } + + // generate indices + + for ( let x = 0; x < radialSegments; x ++ ) { + + const c = centerIndexStart + x; + const i = centerIndexEnd + x; + + if ( top === true ) { + + // face top + + indices.push( i, i + 1, c ); + + } else { + + // face bottom + + indices.push( i + 1, i, c ); + + } + + groupCount += 3; + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + } + + } + + class CylinderGeometry extends Geometry { + + constructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + super(); + this.type = 'CylinderGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + } + + class ConeGeometry extends CylinderGeometry { + + constructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + this.type = 'ConeGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + } + + } + + class ConeBufferGeometry extends CylinderBufferGeometry { + + constructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeBufferGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + } + + } + + class PolyhedronBufferGeometry extends BufferGeometry { + + constructor( vertices, indices, radius = 1, detail = 0 ) { + + super(); + + this.type = 'PolyhedronBufferGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + // default buffer data + + const vertexBuffer = []; + const uvBuffer = []; + + // the subdivision creates the vertex buffer data + + subdivide( detail ); + + // all vertices should lie on a conceptual sphere with a given radius + + applyRadius( radius ); + + // finally, create the uv data + + generateUVs(); + + // build non-indexed geometry + + this.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); + + if ( detail === 0 ) { + + this.computeVertexNormals(); // flat normals + + } else { + + this.normalizeNormals(); // smooth normals + + } + + // helper functions + + function subdivide( detail ) { + + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + + // iterate over all faces and apply a subdivison with the given detail value + + for ( let i = 0; i < indices.length; i += 3 ) { + + // get the vertices of the face + + getVertexByIndex( indices[ i + 0 ], a ); + getVertexByIndex( indices[ i + 1 ], b ); + getVertexByIndex( indices[ i + 2 ], c ); + + // perform subdivision + + subdivideFace( a, b, c, detail ); + + } + + } + + function subdivideFace( a, b, c, detail ) { + + const cols = detail + 1; + + // we use this multidimensional array as a data structure for creating the subdivision + + const v = []; + + // construct all of the vertices for this subdivision + + for ( let i = 0; i <= cols; i ++ ) { + + v[ i ] = []; + + const aj = a.clone().lerp( c, i / cols ); + const bj = b.clone().lerp( c, i / cols ); + + const rows = cols - i; + + for ( let j = 0; j <= rows; j ++ ) { + + if ( j === 0 && i === cols ) { + + v[ i ][ j ] = aj; + + } else { + + v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); + + } + + } + + } + + // construct all of the faces + + for ( let i = 0; i < cols; i ++ ) { + + for ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { + + const k = Math.floor( j / 2 ); + + if ( j % 2 === 0 ) { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + pushVertex( v[ i ][ k ] ); + + } else { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + + } + + } + + } + + } + + function applyRadius( radius ) { + + const vertex = new Vector3(); + + // iterate over the entire buffer and apply the radius to each vertex + + for ( let i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + vertex.normalize().multiplyScalar( radius ); + + vertexBuffer[ i + 0 ] = vertex.x; + vertexBuffer[ i + 1 ] = vertex.y; + vertexBuffer[ i + 2 ] = vertex.z; + + } + + } + + function generateUVs() { + + const vertex = new Vector3(); + + for ( let i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + const u = azimuth( vertex ) / 2 / Math.PI + 0.5; + const v = inclination( vertex ) / Math.PI + 0.5; + uvBuffer.push( u, 1 - v ); + + } + + correctUVs(); + + correctSeam(); + + } + + function correctSeam() { + + // handle case when face straddles the seam, see #3269 + + for ( let i = 0; i < uvBuffer.length; i += 6 ) { + + // uv data of a single face + + const x0 = uvBuffer[ i + 0 ]; + const x1 = uvBuffer[ i + 2 ]; + const x2 = uvBuffer[ i + 4 ]; + + const max = Math.max( x0, x1, x2 ); + const min = Math.min( x0, x1, x2 ); + + // 0.9 is somewhat arbitrary + + if ( max > 0.9 && min < 0.1 ) { + + if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1; + if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1; + if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1; + + } + + } + + } + + function pushVertex( vertex ) { + + vertexBuffer.push( vertex.x, vertex.y, vertex.z ); + + } + + function getVertexByIndex( index, vertex ) { + + const stride = index * 3; + + vertex.x = vertices[ stride + 0 ]; + vertex.y = vertices[ stride + 1 ]; + vertex.z = vertices[ stride + 2 ]; + + } + + function correctUVs() { + + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + + const centroid = new Vector3(); + + const uvA = new Vector2(); + const uvB = new Vector2(); + const uvC = new Vector2(); + + for ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { + + a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); + b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); + c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); + + uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); + uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); + uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); + + centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); + + const azi = azimuth( centroid ); + + correctUV( uvA, j + 0, a, azi ); + correctUV( uvB, j + 2, b, azi ); + correctUV( uvC, j + 4, c, azi ); + + } + + } + + function correctUV( uv, stride, vector, azimuth ) { + + if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { + + uvBuffer[ stride ] = uv.x - 1; + + } + + if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { + + uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; + + } + + } + + // Angle around the Y axis, counter-clockwise when looking from above. + + function azimuth( vector ) { + + return Math.atan2( vector.z, - vector.x ); + + } + + + // Angle above the XZ plane. + + function inclination( vector ) { + + return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); + + } + + } + + } + + class DodecahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius = 1, detail = 0 ) { + + const t = ( 1 + Math.sqrt( 5 ) ) / 2; + const r = 1 / t; + + const vertices = [ + + // (±1, ±1, ±1) + - 1, - 1, - 1, - 1, - 1, 1, + - 1, 1, - 1, - 1, 1, 1, + 1, - 1, - 1, 1, - 1, 1, + 1, 1, - 1, 1, 1, 1, + + // (0, ±1/φ, ±φ) + 0, - r, - t, 0, - r, t, + 0, r, - t, 0, r, t, + + // (±1/φ, ±φ, 0) + - r, - t, 0, - r, t, 0, + r, - t, 0, r, t, 0, + + // (±φ, 0, ±1/φ) + - t, 0, - r, t, 0, - r, + - t, 0, r, t, 0, r + ]; + + const 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 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'DodecahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + } + + class DodecahedronGeometry extends Geometry { + + constructor( radius, detail ) { + + super(); + this.type = 'DodecahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + } + + const _v0$2 = new Vector3(); + const _v1$5 = new Vector3(); + const _normal$1 = new Vector3(); + const _triangle = new Triangle(); + + class EdgesGeometry extends BufferGeometry { + + constructor( geometry, thresholdAngle ) { + + super(); + + this.type = 'EdgesGeometry'; + + this.parameters = { + thresholdAngle: thresholdAngle + }; + + thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; + + if ( geometry.isGeometry ) { + + geometry = new BufferGeometry().fromGeometry( geometry ); + + } + + const precisionPoints = 4; + const precision = Math.pow( 10, precisionPoints ); + const thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle ); + + const indexAttr = geometry.getIndex(); + const positionAttr = geometry.getAttribute( 'position' ); + const indexCount = indexAttr ? indexAttr.count : positionAttr.count; + + const indexArr = [ 0, 0, 0 ]; + const vertKeys = [ 'a', 'b', 'c' ]; + const hashes = new Array( 3 ); + + const edgeData = {}; + const vertices = []; + for ( let i = 0; i < indexCount; i += 3 ) { + + if ( indexAttr ) { + + indexArr[ 0 ] = indexAttr.getX( i ); + indexArr[ 1 ] = indexAttr.getX( i + 1 ); + indexArr[ 2 ] = indexAttr.getX( i + 2 ); + + } else { + + indexArr[ 0 ] = i; + indexArr[ 1 ] = i + 1; + indexArr[ 2 ] = i + 2; + + } + + const { a, b, c } = _triangle; + a.fromBufferAttribute( positionAttr, indexArr[ 0 ] ); + b.fromBufferAttribute( positionAttr, indexArr[ 1 ] ); + c.fromBufferAttribute( positionAttr, indexArr[ 2 ] ); + _triangle.getNormal( _normal$1 ); + + // create hashes for the edge from the vertices + hashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`; + hashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`; + hashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`; + + // skip degenerate triangles + if ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) { + + continue; + + } + + // iterate over every edge + for ( let j = 0; j < 3; j ++ ) { + + // get the first and next vertex making up the edge + const jNext = ( j + 1 ) % 3; + const vecHash0 = hashes[ j ]; + const vecHash1 = hashes[ jNext ]; + const v0 = _triangle[ vertKeys[ j ] ]; + const v1 = _triangle[ vertKeys[ jNext ] ]; + + const hash = `${ vecHash0 }_${ vecHash1 }`; + const reverseHash = `${ vecHash1 }_${ vecHash0 }`; + + if ( reverseHash in edgeData && edgeData[ reverseHash ] ) { + + // if we found a sibling edge add it into the vertex array if + // it meets the angle threshold and delete the edge from the map. + if ( _normal$1.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) { + + vertices.push( v0.x, v0.y, v0.z ); + vertices.push( v1.x, v1.y, v1.z ); + + } + + edgeData[ reverseHash ] = null; + + } else if ( ! ( hash in edgeData ) ) { + + // if we've already got an edge here then skip adding a new one + edgeData[ hash ] = { + + index0: indexArr[ j ], + index1: indexArr[ jNext ], + normal: _normal$1.clone(), + + }; + + } + + } + + } + + // iterate over all remaining, unmatched edges and add them to the vertex array + for ( const key in edgeData ) { + + if ( edgeData[ key ] ) { + + const { index0, index1 } = edgeData[ key ]; + _v0$2.fromBufferAttribute( positionAttr, index0 ); + _v1$5.fromBufferAttribute( positionAttr, index1 ); + + vertices.push( _v0$2.x, _v0$2.y, _v0$2.z ); + vertices.push( _v1$5.x, _v1$5.y, _v1$5.z ); + + } + + } + + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + + } + + } + + /** + * Port from https://github.com/mapbox/earcut (v2.2.2) + */ + + const Earcut = { + + triangulate: function ( data, holeIndices, dim ) { + + dim = dim || 2; + + const hasHoles = holeIndices && holeIndices.length; + const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length; + let outerNode = linkedList( data, 0, outerLen, dim, true ); + const triangles = []; + + if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles; + + let minX, minY, maxX, maxY, x, y, invSize; + + if ( 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 + if ( data.length > 80 * dim ) { + + minX = maxX = data[ 0 ]; + minY = maxY = data[ 1 ]; + + for ( let i = dim; i < outerLen; i += dim ) { + + x = data[ i ]; + y = data[ i + 1 ]; + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + + } + + // minX, minY and invSize are later used to transform coords into integers for z-order calculation + invSize = Math.max( maxX - minX, maxY - minY ); + invSize = invSize !== 0 ? 1 / invSize : 0; + + } + + earcutLinked( outerNode, triangles, dim, minX, minY, invSize ); + + return triangles; + + } + + }; + + // create a circular doubly linked list from polygon points in the specified winding order + function linkedList( data, start, end, dim, clockwise ) { + + let i, last; + + if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { + + for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } else { + + for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } + + if ( last && equals( last, last.next ) ) { + + removeNode( last ); + last = last.next; + + } + + return last; + + } + + // eliminate colinear or duplicate points + function filterPoints( start, end ) { + + if ( ! start ) return start; + if ( ! end ) end = start; + + let p = start, + again; + do { + + again = false; + + if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { + + removeNode( p ); + p = end = p.prev; + if ( p === p.next ) break; + again = true; + + } else { + + p = p.next; + + } + + } while ( again || p !== end ); + + return end; + + } + + // main ear slicing loop which triangulates a polygon (given as a linked list) + function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { + + if ( ! ear ) return; + + // interlink polygon nodes in z-order + if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize ); + + let stop = ear, + prev, next; + + // iterate through ears, slicing them one by one + while ( ear.prev !== ear.next ) { + + prev = ear.prev; + next = ear.next; + + if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { + + // cut off the triangle + triangles.push( prev.i / dim ); + triangles.push( ear.i / dim ); + triangles.push( next.i / dim ); + + removeNode( ear ); + + // skipping the next vertex leads to less sliver triangles + ear = next.next; + stop = next.next; + + continue; + + } + + ear = next; + + // if we looped through the whole remaining polygon and can't find any more ears + if ( ear === stop ) { + + // try filtering points and slicing again + if ( ! pass ) { + + earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); + + // if this didn't work, try curing all small self-intersections locally + + } else if ( pass === 1 ) { + + ear = cureLocalIntersections( filterPoints( ear ), triangles, dim ); + earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); + + // as a last resort, try splitting the remaining polygon into two + + } else if ( pass === 2 ) { + + splitEarcut( ear, triangles, dim, minX, minY, invSize ); + + } + + break; + + } + + } + + } + + // check whether a polygon node forms a valid ear with adjacent nodes + function isEar( ear ) { + + const a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // now make sure we don't have other points inside the potential ear + let p = ear.next.next; + + while ( p !== ear.prev ) { + + if ( 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; + p = p.next; + + } + + return true; + + } + + function isEarHashed( ear, minX, minY, invSize ) { + + const a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // triangle bbox; min & max are calculated like this for speed + const minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ), + minTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ), + maxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ), + maxTY = 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; + const minZ = zOrder( minTX, minTY, minX, minY, invSize ), + maxZ = zOrder( maxTX, maxTY, minX, minY, invSize ); + + let p = ear.prevZ, + n = ear.nextZ; + + // look for points inside the triangle in both directions + while ( p && p.z >= minZ && n && n.z <= maxZ ) { + + if ( 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; + p = p.prevZ; + + if ( 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 = n.nextZ; + + } + + // look for remaining points in decreasing z-order + while ( p && p.z >= minZ ) { + + if ( 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; + p = p.prevZ; + + } + + // look for remaining points in increasing z-order + while ( n && n.z <= maxZ ) { + + if ( 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 = n.nextZ; + + } + + return true; + + } + + // go through all polygon nodes and cure small local self-intersections + function cureLocalIntersections( start, triangles, dim ) { + + let p = start; + do { + + const a = p.prev, + b = p.next.next; + + if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { + + triangles.push( a.i / dim ); + triangles.push( p.i / dim ); + triangles.push( b.i / dim ); + + // remove two nodes involved + removeNode( p ); + removeNode( p.next ); + + p = start = b; + + } + + p = p.next; + + } while ( p !== start ); + + return filterPoints( p ); + + } + + // try splitting polygon into two and triangulate them independently + function splitEarcut( start, triangles, dim, minX, minY, invSize ) { + + // look for a valid diagonal that divides the polygon into two + let a = start; + do { + + let b = a.next.next; + while ( b !== a.prev ) { + + if ( a.i !== b.i && isValidDiagonal( a, b ) ) { + + // split the polygon in two by the diagonal + let c = splitPolygon( a, b ); + + // filter colinear points around the cuts + a = filterPoints( a, a.next ); + c = filterPoints( c, c.next ); + + // run earcut on each half + earcutLinked( a, triangles, dim, minX, minY, invSize ); + earcutLinked( c, triangles, dim, minX, minY, invSize ); + return; + + } + + b = b.next; + + } + + a = a.next; + + } while ( a !== start ); + + } + + // link every hole into the outer loop, producing a single-ring polygon without holes + function eliminateHoles( data, holeIndices, outerNode, dim ) { + + const queue = []; + let i, len, start, end, list; + + for ( i = 0, len = holeIndices.length; i < len; i ++ ) { + + start = holeIndices[ i ] * dim; + end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; + list = linkedList( data, start, end, dim, false ); + if ( list === list.next ) list.steiner = true; + queue.push( getLeftmost( list ) ); + + } + + queue.sort( compareX ); + + // process holes from left to right + for ( i = 0; i < queue.length; i ++ ) { + + eliminateHole( queue[ i ], outerNode ); + outerNode = filterPoints( outerNode, outerNode.next ); + + } + + return outerNode; + + } + + function compareX( a, b ) { + + return a.x - b.x; + + } + + // find a bridge between vertices that connects hole with an outer ring and and link it + function eliminateHole( hole, outerNode ) { + + outerNode = findHoleBridge( hole, outerNode ); + if ( outerNode ) { + + const b = splitPolygon( outerNode, hole ); + + // filter collinear points around the cuts + filterPoints( outerNode, outerNode.next ); + filterPoints( b, b.next ); + + } + + } + + // David Eberly's algorithm for finding a bridge between hole and outer polygon + function findHoleBridge( hole, outerNode ) { + + let p = outerNode; + const hx = hole.x; + const hy = hole.y; + let qx = - Infinity, m; + + // find a segment intersected by a ray from the hole's leftmost point to the left; + // segment's endpoint with lesser x will be potential connection point + do { + + if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { + + const x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); + if ( x <= hx && x > qx ) { + + qx = x; + if ( x === hx ) { + + if ( hy === p.y ) return p; + if ( hy === p.next.y ) return p.next; + + } + + m = p.x < p.next.x ? p : p.next; + + } + + } + + p = p.next; + + } while ( p !== outerNode ); + + if ( ! m ) return null; + + if ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint + + // look for points inside the triangle of hole point, segment intersection and endpoint; + // if there are no points found, we have a valid connection; + // otherwise choose the point of the minimum angle with the ray as connection point + + const stop = m, + mx = m.x, + my = m.y; + let tanMin = Infinity, tan; + + p = m; + + do { + + if ( 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 ) ) { + + tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential + + if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) { + + m = p; + tanMin = tan; + + } + + } + + p = p.next; + + } while ( p !== stop ); + + return m; + + } + + // whether sector in vertex m contains sector in vertex p in the same coordinates + function sectorContainsSector( m, p ) { + + return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0; + + } + + // interlink polygon nodes in z-order + function indexCurve( start, minX, minY, invSize ) { + + let p = start; + do { + + if ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize ); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + + } while ( p !== start ); + + p.prevZ.nextZ = null; + p.prevZ = null; + + sortLinked( p ); + + } + + // Simon Tatham's linked list merge sort algorithm + // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html + function sortLinked( list ) { + + let i, p, q, e, tail, numMerges, pSize, qSize, + inSize = 1; + + do { + + p = list; + list = null; + tail = null; + numMerges = 0; + + while ( p ) { + + numMerges ++; + q = p; + pSize = 0; + for ( i = 0; i < inSize; i ++ ) { + + pSize ++; + q = q.nextZ; + if ( ! q ) break; + + } + + qSize = inSize; + + while ( pSize > 0 || ( qSize > 0 && q ) ) { + + if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { + + e = p; + p = p.nextZ; + pSize --; + + } else { + + e = q; + q = q.nextZ; + qSize --; + + } + + if ( tail ) tail.nextZ = e; + else list = e; + + e.prevZ = tail; + tail = e; + + } + + p = q; + + } + + tail.nextZ = null; + inSize *= 2; + + } while ( numMerges > 1 ); + + return list; + + } + + // z-order of a point given coords and inverse of the longer side of data bbox + function zOrder( x, y, minX, minY, invSize ) { + + // coords are transformed into non-negative 15-bit integer range + x = 32767 * ( x - minX ) * invSize; + y = 32767 * ( y - minY ) * invSize; + + x = ( x | ( x << 8 ) ) & 0x00FF00FF; + x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; + x = ( x | ( x << 2 ) ) & 0x33333333; + x = ( x | ( x << 1 ) ) & 0x55555555; + + y = ( y | ( y << 8 ) ) & 0x00FF00FF; + y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; + y = ( y | ( y << 2 ) ) & 0x33333333; + y = ( y | ( y << 1 ) ) & 0x55555555; + + return x | ( y << 1 ); + + } + + // find the leftmost node of a polygon ring + function getLeftmost( start ) { + + let p = start, + leftmost = start; + do { + + if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p; + p = p.next; + + } while ( p !== start ); + + return leftmost; + + } + + // check if a point lies within a convex triangle + function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { + + return ( 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; + + } + + // check if a diagonal between two polygon nodes is valid (lies in polygon interior) + function isValidDiagonal( a, b ) { + + return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges + ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible + ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors + equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case + + } + + // signed area of a triangle + function area( p, q, r ) { + + return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); + + } + + // check if two points are equal + function equals( p1, p2 ) { + + return p1.x === p2.x && p1.y === p2.y; + + } + + // check if two segments intersect + function intersects( p1, q1, p2, q2 ) { + + const o1 = sign( area( p1, q1, p2 ) ); + const o2 = sign( area( p1, q1, q2 ) ); + const o3 = sign( area( p2, q2, p1 ) ); + const o4 = sign( area( p2, q2, q1 ) ); + + if ( o1 !== o2 && o3 !== o4 ) return true; // general case + + if ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 + if ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 + if ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 + if ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 + + return false; + + } + + // for collinear points p, q, r, check if point q lies on segment pr + function onSegment( p, q, r ) { + + return 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 ); + + } + + function sign( num ) { + + return num > 0 ? 1 : num < 0 ? - 1 : 0; + + } + + // check if a polygon diagonal intersects any polygon segments + function intersectsPolygon( a, b ) { + + let p = a; + do { + + if ( 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; + p = p.next; + + } while ( p !== a ); + + return false; + + } + + // check if a polygon diagonal is locally inside the polygon + function locallyInside( a, b ) { + + return 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; + + } + + // check if the middle point of a polygon diagonal is inside the polygon + function middleInside( a, b ) { + + let p = a, + inside = false; + const px = ( a.x + b.x ) / 2, + py = ( a.y + b.y ) / 2; + do { + + if ( ( ( 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; + p = p.next; + + } while ( p !== a ); + + return inside; + + } + + // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; + // if one belongs to the outer ring and another to a hole, it merges it into a single ring + function splitPolygon( a, b ) { + + const a2 = new Node( a.i, a.x, a.y ), + b2 = new Node( b.i, b.x, b.y ), + an = a.next, + bp = b.prev; + + a.next = b; + b.prev = a; + + a2.next = an; + an.prev = a2; + + b2.next = a2; + a2.prev = b2; + + bp.next = b2; + b2.prev = bp; + + return b2; + + } + + // create a node and optionally link it with previous one (in a circular doubly linked list) + function insertNode( i, x, y, last ) { + + const p = new Node( i, x, y ); + + if ( ! last ) { + + p.prev = p; + p.next = p; + + } else { + + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + + } + + return p; + + } + + function removeNode( p ) { + + p.next.prev = p.prev; + p.prev.next = p.next; + + if ( p.prevZ ) p.prevZ.nextZ = p.nextZ; + if ( p.nextZ ) p.nextZ.prevZ = p.prevZ; + + } + + function Node( i, x, y ) { + + // vertex index in coordinates array + this.i = i; + + // vertex coordinates + this.x = x; + this.y = y; + + // previous and next vertex nodes in a polygon ring + this.prev = null; + this.next = null; + + // z-order curve value + this.z = null; + + // previous and next nodes in z-order + this.prevZ = null; + this.nextZ = null; + + // indicates whether this is a steiner point + this.steiner = false; + + } + + function signedArea( data, start, end, dim ) { + + let sum = 0; + for ( let i = start, j = end - dim; i < end; i += dim ) { + + sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); + j = i; + + } + + return sum; + + } + + const ShapeUtils = { + + // calculate area of the contour polygon + + area: function ( contour ) { + + const n = contour.length; + let a = 0.0; + + for ( let p = n - 1, q = 0; q < n; p = q ++ ) { + + a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; + + } + + return a * 0.5; + + }, + + isClockWise: function ( pts ) { + + return ShapeUtils.area( pts ) < 0; + + }, + + triangulateShape: function ( contour, holes ) { + + const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] + const holeIndices = []; // array of hole indices + const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] + + removeDupEndPts( contour ); + addContour( vertices, contour ); + + // + + let holeIndex = contour.length; + + holes.forEach( removeDupEndPts ); + + for ( let i = 0; i < holes.length; i ++ ) { + + holeIndices.push( holeIndex ); + holeIndex += holes[ i ].length; + addContour( vertices, holes[ i ] ); + + } + + // + + const triangles = Earcut.triangulate( vertices, holeIndices ); + + // + + for ( let i = 0; i < triangles.length; i += 3 ) { + + faces.push( triangles.slice( i, i + 3 ) ); + + } + + return faces; + + } + + }; + + function removeDupEndPts( points ) { + + const l = points.length; + + if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { + + points.pop(); + + } + + } + + function addContour( vertices, contour ) { + + for ( let i = 0; i < contour.length; i ++ ) { + + vertices.push( contour[ i ].x ); + vertices.push( contour[ i ].y ); + + } + + } + + /** + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * depth: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline (including bevelOffset) is bevel + * bevelOffset: , // how far from shape outline does bevel start + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + + class ExtrudeBufferGeometry extends BufferGeometry { + + constructor( shapes, options ) { + + super(); + + this.type = 'ExtrudeBufferGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; + + const scope = this; + + const verticesArray = []; + const uvArray = []; + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + addShape( shape ); + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); + + this.computeVertexNormals(); + + // functions + + function addShape( shape ) { + + const placeholder = []; + + // options + + const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; + const steps = options.steps !== undefined ? options.steps : 1; + let depth = options.depth !== undefined ? options.depth : 100; + + let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; + let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; + let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; + let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; + let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + + const extrudePath = options.extrudePath; + + const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; + + // deprecated options + + if ( options.amount !== undefined ) { + + console.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' ); + depth = options.amount; + + } + + // + + let extrudePts, extrudeByPath = false; + let splineTube, binormal, normal, position2; + + if ( extrudePath ) { + + extrudePts = extrudePath.getSpacedPoints( steps ); + + extrudeByPath = true; + bevelEnabled = false; // bevels not supported for path extrusion + + // SETUP TNB variables + + // TODO1 - have a .isClosed in spline? + + splineTube = extrudePath.computeFrenetFrames( steps, false ); + + // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); + + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + + } + + // Safeguards if bevels are not enabled + + if ( ! bevelEnabled ) { + + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + bevelOffset = 0; + + } + + // Variables initialization + + const shapePoints = shape.extractPoints( curveSegments ); + + let vertices = shapePoints.shape; + const holes = shapePoints.holes; + + const reverse = ! ShapeUtils.isClockWise( vertices ); + + if ( reverse ) { + + vertices = vertices.reverse(); + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + if ( ShapeUtils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + + } + + } + + } + + + const faces = ShapeUtils.triangulateShape( vertices, holes ); + + /* Vertices */ + + const contour = vertices; // vertices has all points but contour has only points of circumference + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + vertices = vertices.concat( ahole ); + + } + + + function scalePt2( pt, vec, size ) { + + if ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' ); + + return vec.clone().multiplyScalar( size ).add( pt ); + + } + + const vlen = vertices.length, flen = faces.length; + + + // Find directions for point movement + + + function getBevelVec( inPt, inPrev, inNext ) { + + // computes for inPt the corresponding point inPt' on a new contour + // shifted by 1 unit (length of normalized vector) to the left + // if we walk along contour clockwise, this new contour is outside the old one + // + // inPt' is the intersection of the two lines parallel to the two + // adjacent edges of inPt at a distance of 1 unit on the left side. + + let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt + + // good reading for geometry algorithms (here: line-line intersection) + // http://geomalgorithms.com/a05-_intersect-1.html + + const v_prev_x = inPt.x - inPrev.x, + v_prev_y = inPt.y - inPrev.y; + const v_next_x = inNext.x - inPt.x, + v_next_y = inNext.y - inPt.y; + + const v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); + + // check for collinear edges + const collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + if ( Math.abs( collinear0 ) > Number.EPSILON ) { + + // not collinear + + // length of vectors for normalizing + + const v_prev_len = Math.sqrt( v_prev_lensq ); + const 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 + + const ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); + const ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); + + const ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); + const ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); + + // scaling factor for v_prev to intersection point + + const 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 + + v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); + v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); + + // Don't normalize!, otherwise sharp corners become ugly + // but prevent crazy spikes + const v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); + if ( v_trans_lensq <= 2 ) { + + return new Vector2( v_trans_x, v_trans_y ); + + } else { + + shrink_by = Math.sqrt( v_trans_lensq / 2 ); + + } + + } else { + + // handle special case of collinear edges + + let direction_eq = false; // assumes: opposite + + if ( v_prev_x > Number.EPSILON ) { + + if ( v_next_x > Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( v_prev_x < - Number.EPSILON ) { + + if ( v_next_x < - Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { + + direction_eq = true; + + } + + } + + } + + if ( direction_eq ) { + + // console.log("Warning: lines are a straight sequence"); + v_trans_x = - v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt( v_prev_lensq ); + + } else { + + // console.log("Warning: lines are a straight spike"); + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt( v_prev_lensq / 2 ); + + } + + } + + return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); + + } + + + const contourMovements = []; + + for ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + // console.log('i,j,k', i, j , k) + + contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); + + } + + const holesMovements = []; + let oneHoleMovements, verticesMovements = contourMovements.concat(); + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + oneHoleMovements = []; + + for ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); + + } + + holesMovements.push( oneHoleMovements ); + verticesMovements = verticesMovements.concat( oneHoleMovements ); + + } + + + // Loop bevelSegments, 1 for the front, 1 for the back + + for ( let b = 0; b < bevelSegments; b ++ ) { + + //for ( b = bevelSegments; b > 0; b -- ) { + + const t = b / bevelSegments; + const z = bevelThickness * Math.cos( t * Math.PI / 2 ); + const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( let i = 0, il = contour.length; i < il; i ++ ) { + + const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + // expand holes + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( let i = 0, il = ahole.length; i < il; i ++ ) { + + const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + } + + } + + const bs = bevelSize + bevelOffset; + + // Back facing vertices + + for ( let i = 0; i < vlen; i ++ ) { + + const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, 0 ); + + } else { + + // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); + + normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + // Add stepped vertices... + // Including front facing vertices + + for ( let s = 1; s <= steps; s ++ ) { + + for ( let i = 0; i < vlen; i ++ ) { + + const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, depth / steps * s ); + + } else { + + // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); + + normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + } + + + // Add bevel segments planes + + //for ( b = 1; b <= bevelSegments; b ++ ) { + for ( let b = bevelSegments - 1; b >= 0; b -- ) { + + const t = b / bevelSegments; + const z = bevelThickness * Math.cos( t * Math.PI / 2 ); + const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( let i = 0, il = contour.length; i < il; i ++ ) { + + const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + v( vert.x, vert.y, depth + z ); + + } + + // expand holes + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( let i = 0, il = ahole.length; i < il; i ++ ) { + + const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, depth + z ); + + } else { + + v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); + + } + + } + + } + + } + + /* Faces */ + + // Top and bottom faces + + buildLidFaces(); + + // Sides faces + + buildSideFaces(); + + + ///// Internal functions + + function buildLidFaces() { + + const start = verticesArray.length / 3; + + if ( bevelEnabled ) { + + let layer = 0; // steps + 1 + let offset = vlen * layer; + + // Bottom faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); + + } + + layer = steps + bevelSegments * 2; + offset = vlen * layer; + + // Top faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); + + } + + } else { + + // Bottom faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 2 ], face[ 1 ], face[ 0 ] ); + + } + + // Top faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); + + } + + } + + scope.addGroup( start, verticesArray.length / 3 - start, 0 ); + + } + + // Create faces for the z-sides of the shape + + function buildSideFaces() { + + const start = verticesArray.length / 3; + let layeroffset = 0; + sidewalls( contour, layeroffset ); + layeroffset += contour.length; + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + sidewalls( ahole, layeroffset ); + + //, true + layeroffset += ahole.length; + + } + + + scope.addGroup( start, verticesArray.length / 3 - start, 1 ); + + + } + + function sidewalls( contour, layeroffset ) { + + let i = contour.length; + + while ( -- i >= 0 ) { + + const j = i; + let k = i - 1; + if ( k < 0 ) k = contour.length - 1; + + //console.log('b', i,j, i-1, k,vertices.length); + + for ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) { + + const slen1 = vlen * s; + const slen2 = vlen * ( s + 1 ); + + const a = layeroffset + j + slen1, + b = layeroffset + k + slen1, + c = layeroffset + k + slen2, + d = layeroffset + j + slen2; + + f4( a, b, c, d ); + + } + + } + + } + + function v( x, y, z ) { + + placeholder.push( x ); + placeholder.push( y ); + placeholder.push( z ); + + } + + + function f3( a, b, c ) { + + addVertex( a ); + addVertex( b ); + addVertex( c ); + + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + + } + + function f4( a, b, c, d ) { + + addVertex( a ); + addVertex( b ); + addVertex( d ); + + addVertex( b ); + addVertex( c ); + addVertex( d ); + + + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 3 ] ); + + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + addUV( uvs[ 3 ] ); + + } + + function addVertex( index ) { + + verticesArray.push( placeholder[ index * 3 + 0 ] ); + verticesArray.push( placeholder[ index * 3 + 1 ] ); + verticesArray.push( placeholder[ index * 3 + 2 ] ); + + } + + + function addUV( vector2 ) { + + uvArray.push( vector2.x ); + uvArray.push( vector2.y ); + + } + + } + + } + + toJSON() { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + const shapes = this.parameters.shapes; + const options = this.parameters.options; + + return toJSON( shapes, options, data ); + + } + + } + + const WorldUVGenerator = { + + generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { + + const a_x = vertices[ indexA * 3 ]; + const a_y = vertices[ indexA * 3 + 1 ]; + const b_x = vertices[ indexB * 3 ]; + const b_y = vertices[ indexB * 3 + 1 ]; + const c_x = vertices[ indexC * 3 ]; + const c_y = vertices[ indexC * 3 + 1 ]; + + return [ + new Vector2( a_x, a_y ), + new Vector2( b_x, b_y ), + new Vector2( c_x, c_y ) + ]; + + }, + + generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { + + const a_x = vertices[ indexA * 3 ]; + const a_y = vertices[ indexA * 3 + 1 ]; + const a_z = vertices[ indexA * 3 + 2 ]; + const b_x = vertices[ indexB * 3 ]; + const b_y = vertices[ indexB * 3 + 1 ]; + const b_z = vertices[ indexB * 3 + 2 ]; + const c_x = vertices[ indexC * 3 ]; + const c_y = vertices[ indexC * 3 + 1 ]; + const c_z = vertices[ indexC * 3 + 2 ]; + const d_x = vertices[ indexD * 3 ]; + const d_y = vertices[ indexD * 3 + 1 ]; + const d_z = vertices[ indexD * 3 + 2 ]; + + if ( Math.abs( a_y - b_y ) < 0.01 ) { + + return [ + 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 ) + ]; + + } else { + + return [ + 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 ) + ]; + + } + + } + + }; + + function toJSON( shapes, options, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); + + return data; + + } + + /** + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * depth: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline (including bevelOffset) is bevel + * bevelOffset: , // how far from shape outline does bevel start + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + + class ExtrudeGeometry extends Geometry { + + constructor( shapes, options ) { + + super(); + + this.type = 'ExtrudeGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); + this.mergeVertices(); + + } + + toJSON() { + + const data = super.toJSON(); + + const shapes = this.parameters.shapes; + const options = this.parameters.options; + + return toJSON$1( shapes, options, data ); + + } + + } + + function toJSON$1( shapes, options, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); + + return data; + + } + + class IcosahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius = 1, detail = 0 ) { + + const t = ( 1 + Math.sqrt( 5 ) ) / 2; + + const 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 + ]; + + const 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 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'IcosahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + } + + class IcosahedronGeometry extends Geometry { + + constructor( radius, detail ) { + + super(); + + this.type = 'IcosahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + } + + class LatheBufferGeometry extends BufferGeometry { + + constructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) { + + super(); + + this.type = 'LatheBufferGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + segments = Math.floor( segments ); + + // clamp phiLength so it's in range of [ 0, 2PI ] + + phiLength = MathUtils.clamp( phiLength, 0, Math.PI * 2 ); + + // buffers + + const indices = []; + const vertices = []; + const uvs = []; + + // helper variables + + const inverseSegments = 1.0 / segments; + const vertex = new Vector3(); + const uv = new Vector2(); + + // generate vertices and uvs + + for ( let i = 0; i <= segments; i ++ ) { + + const phi = phiStart + i * inverseSegments * phiLength; + + const sin = Math.sin( phi ); + const cos = Math.cos( phi ); + + for ( let j = 0; j <= ( points.length - 1 ); j ++ ) { + + // vertex + + vertex.x = points[ j ].x * sin; + vertex.y = points[ j ].y; + vertex.z = points[ j ].x * cos; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // uv + + uv.x = i / segments; + uv.y = j / ( points.length - 1 ); + + uvs.push( uv.x, uv.y ); + + + } + + } + + // indices + + for ( let i = 0; i < segments; i ++ ) { + + for ( let j = 0; j < ( points.length - 1 ); j ++ ) { + + const base = j + i * points.length; + + const a = base; + const b = base + points.length; + const c = base + points.length + 1; + const d = base + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // generate normals + + this.computeVertexNormals(); + + // if the geometry is closed, we need to average the normals along the seam. + // because the corresponding vertices are identical (but still have different UVs). + + if ( phiLength === Math.PI * 2 ) { + + const normals = this.attributes.normal.array; + const n1 = new Vector3(); + const n2 = new Vector3(); + const n = new Vector3(); + + // this is the buffer offset for the last line of vertices + + const base = segments * points.length * 3; + + for ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) { + + // select the normal of the vertex in the first line + + n1.x = normals[ j + 0 ]; + n1.y = normals[ j + 1 ]; + n1.z = normals[ j + 2 ]; + + // select the normal of the vertex in the last line + + n2.x = normals[ base + j + 0 ]; + n2.y = normals[ base + j + 1 ]; + n2.z = normals[ base + j + 2 ]; + + // average normals + + n.addVectors( n1, n2 ).normalize(); + + // assign the new values to both normals + + normals[ j + 0 ] = normals[ base + j + 0 ] = n.x; + normals[ j + 1 ] = normals[ base + j + 1 ] = n.y; + normals[ j + 2 ] = normals[ base + j + 2 ] = n.z; + + } + + } + + } + + } + + class LatheGeometry extends Geometry { + + constructor( points, segments, phiStart, phiLength ) { + + super(); + + this.type = 'LatheGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + this.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) ); + this.mergeVertices(); + + } + + } + + class OctahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius = 1, detail = 0 ) { + + const vertices = [ + 1, 0, 0, - 1, 0, 0, 0, 1, 0, + 0, - 1, 0, 0, 0, 1, 0, 0, - 1 + ]; + + const 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 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'OctahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + } + + class OctahedronGeometry extends Geometry { + + constructor( radius, detail ) { + + super(); + + this.type = 'OctahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + } + + /** + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html + */ + + function ParametricBufferGeometry( func, slices, stacks ) { + + BufferGeometry.call( this ); + + this.type = 'ParametricBufferGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + const EPS = 0.00001; + + const normal = new Vector3(); + + const p0 = new Vector3(), p1 = new Vector3(); + const pu = new Vector3(), pv = new Vector3(); + + if ( func.length < 3 ) { + + console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' ); + + } + + // generate vertices, normals and uvs + + const sliceCount = slices + 1; + + for ( let i = 0; i <= stacks; i ++ ) { + + const v = i / stacks; + + for ( let j = 0; j <= slices; j ++ ) { + + const u = j / slices; + + // vertex + + func( u, v, p0 ); + vertices.push( p0.x, p0.y, p0.z ); + + // normal + + // approximate tangent vectors via finite differences + + if ( u - EPS >= 0 ) { + + func( u - EPS, v, p1 ); + pu.subVectors( p0, p1 ); + + } else { + + func( u + EPS, v, p1 ); + pu.subVectors( p1, p0 ); + + } + + if ( v - EPS >= 0 ) { + + func( u, v - EPS, p1 ); + pv.subVectors( p0, p1 ); + + } else { + + func( u, v + EPS, p1 ); + pv.subVectors( p1, p0 ); + + } + + // cross product of tangent vectors returns surface normal + + normal.crossVectors( pu, pv ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, v ); + + } + + } + + // generate indices + + for ( let i = 0; i < stacks; i ++ ) { + + for ( let j = 0; j < slices; j ++ ) { + + const a = i * sliceCount + j; + const b = i * sliceCount + j + 1; + const c = ( i + 1 ) * sliceCount + j + 1; + const d = ( i + 1 ) * sliceCount + j; + + // faces one and two + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; + + /** + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html + */ + + function ParametricGeometry( func, slices, stacks ) { + + Geometry.call( this ); + + this.type = 'ParametricGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); + this.mergeVertices(); + + } + + ParametricGeometry.prototype = Object.create( Geometry.prototype ); + ParametricGeometry.prototype.constructor = ParametricGeometry; + + class PlaneGeometry extends Geometry { + + constructor( width, height, widthSegments, heightSegments ) { + + super(); + + this.type = 'PlaneGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + this.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); + this.mergeVertices(); + + } + + } + + class PolyhedronGeometry extends Geometry { + + constructor( vertices, indices, radius, detail ) { + + super(); + + this.type = 'PolyhedronGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) ); + this.mergeVertices(); + + } + + } + + class RingBufferGeometry extends BufferGeometry { + + constructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super(); + + this.type = 'RingBufferGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + thetaSegments = Math.max( 3, thetaSegments ); + phiSegments = Math.max( 1, phiSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // some helper variables + + let radius = innerRadius; + const radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); + const vertex = new Vector3(); + const uv = new Vector2(); + + // generate vertices, normals and uvs + + for ( let j = 0; j <= phiSegments; j ++ ) { + + for ( let i = 0; i <= thetaSegments; i ++ ) { + + // values are generate from the inside of the ring to the outside + + const segment = thetaStart + i / thetaSegments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uv + + uv.x = ( vertex.x / outerRadius + 1 ) / 2; + uv.y = ( vertex.y / outerRadius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // increase the radius for next row of vertices + + radius += radiusStep; + + } + + // indices + + for ( let j = 0; j < phiSegments; j ++ ) { + + const thetaSegmentLevel = j * ( thetaSegments + 1 ); + + for ( let i = 0; i < thetaSegments; i ++ ) { + + const segment = i + thetaSegmentLevel; + + const a = segment; + const b = segment + thetaSegments + 1; + const c = segment + thetaSegments + 2; + const d = segment + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + } + + class RingGeometry extends Geometry { + + constructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + super(); + + this.type = 'RingGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + } + + class ShapeBufferGeometry extends BufferGeometry { + + constructor( shapes, curveSegments = 12 ) { + + super(); + this.type = 'ShapeBufferGeometry'; + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + let groupStart = 0; + let groupCount = 0; + + // allow single and array values for "shapes" parameter + + if ( Array.isArray( shapes ) === false ) { + + addShape( shapes ); + + } else { + + for ( let i = 0; i < shapes.length; i ++ ) { + + addShape( shapes[ i ] ); + + this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support + + groupStart += groupCount; + groupCount = 0; + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + + // helper functions + + function addShape( shape ) { + + const indexOffset = vertices.length / 3; + const points = shape.extractPoints( curveSegments ); + + let shapeVertices = points.shape; + const shapeHoles = points.holes; + + // check direction of vertices + + if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { + + shapeVertices = shapeVertices.reverse(); + + } + + for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { + + const shapeHole = shapeHoles[ i ]; + + if ( ShapeUtils.isClockWise( shapeHole ) === true ) { + + shapeHoles[ i ] = shapeHole.reverse(); + + } + + } + + const faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); + + // join vertices of inner and outer paths to a single array + + for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { + + const shapeHole = shapeHoles[ i ]; + shapeVertices = shapeVertices.concat( shapeHole ); + + } + + // vertices, normals, uvs + + for ( let i = 0, l = shapeVertices.length; i < l; i ++ ) { + + const vertex = shapeVertices[ i ]; + + vertices.push( vertex.x, vertex.y, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( vertex.x, vertex.y ); // world uvs + + } + + // incides + + for ( let i = 0, l = faces.length; i < l; i ++ ) { + + const face = faces[ i ]; + + const a = face[ 0 ] + indexOffset; + const b = face[ 1 ] + indexOffset; + const c = face[ 2 ] + indexOffset; + + indices.push( a, b, c ); + groupCount += 3; + + } + + } + + } + + toJSON() { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + const shapes = this.parameters.shapes; + + return toJSON$2( shapes, data ); + + } + + } + + function toJSON$2( shapes, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + return data; + + } + + class ShapeGeometry extends Geometry { + + constructor( shapes, curveSegments ) { + + super(); + this.type = 'ShapeGeometry'; + + if ( typeof curveSegments === 'object' ) { + + console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); + + curveSegments = curveSegments.curveSegments; + + } + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); + this.mergeVertices(); + + } + + toJSON() { + + const data = Geometry.prototype.toJSON.call( this ); + + const shapes = this.parameters.shapes; + + return toJSON$3( shapes, data ); + + } + + } + + function toJSON$3( shapes, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + return data; + + } + + class SphereBufferGeometry extends BufferGeometry { + + constructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) { + + super(); + this.type = 'SphereBufferGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + widthSegments = Math.max( 3, Math.floor( widthSegments ) ); + heightSegments = Math.max( 2, Math.floor( heightSegments ) ); + + const thetaEnd = Math.min( thetaStart + thetaLength, Math.PI ); + + let index = 0; + const grid = []; + + const vertex = new Vector3(); + const normal = new Vector3(); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // generate vertices, normals and uvs + + for ( let iy = 0; iy <= heightSegments; iy ++ ) { + + const verticesRow = []; + + const v = iy / heightSegments; + + // special case for the poles + + let uOffset = 0; + + if ( iy == 0 && thetaStart == 0 ) { + + uOffset = 0.5 / widthSegments; + + } else if ( iy == heightSegments && thetaEnd == Math.PI ) { + + uOffset = - 0.5 / widthSegments; + + } + + for ( let ix = 0; ix <= widthSegments; ix ++ ) { + + const u = ix / widthSegments; + + // vertex + + vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); + vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.copy( vertex ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u + uOffset, 1 - v ); + + verticesRow.push( index ++ ); + + } + + grid.push( verticesRow ); + + } + + // indices + + for ( let iy = 0; iy < heightSegments; iy ++ ) { + + for ( let ix = 0; ix < widthSegments; ix ++ ) { + + const a = grid[ iy ][ ix + 1 ]; + const b = grid[ iy ][ ix ]; + const c = grid[ iy + 1 ][ ix ]; + const d = grid[ iy + 1 ][ ix + 1 ]; + + if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); + if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + } + + class SphereGeometry extends Geometry { + + constructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + super(); + this.type = 'SphereGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + } + + class TetrahedronBufferGeometry extends PolyhedronBufferGeometry { + + constructor( radius = 1, detail = 0 ) { + + const vertices = [ + 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 + ]; + + const indices = [ + 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'TetrahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + } + + class TetrahedronGeometry extends Geometry { + + constructor( radius, detail ) { + + super(); + this.type = 'TetrahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + } + + /** + * Text = 3D Text + * + * parameters = { + * font: , // font + * + * size: , // size of the text + * height: , // thickness to extrude text + * curveSegments: , // number of points on the curves + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into text bevel goes + * bevelSize: , // how far from text outline (including bevelOffset) is bevel + * bevelOffset: // how far from text outline does bevel start + * } + */ + + class TextBufferGeometry extends ExtrudeBufferGeometry { + + constructor( text, parameters = {} ) { + + const font = parameters.font; + + if ( ! ( font && font.isFont ) ) { + + console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); + return new BufferGeometry(); + + } + + const shapes = font.generateShapes( text, parameters.size ); + + // translate parameters to ExtrudeGeometry API + + parameters.depth = parameters.height !== undefined ? parameters.height : 50; + + // defaults + + if ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10; + if ( parameters.bevelSize === undefined ) parameters.bevelSize = 8; + if ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false; + + super( shapes, parameters ); + + this.type = 'TextBufferGeometry'; + + } + + } + + /** + * Text = 3D Text + * + * parameters = { + * font: , // font + * + * size: , // size of the text + * height: , // thickness to extrude text + * curveSegments: , // number of points on the curves + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into text bevel goes + * bevelSize: , // how far from text outline (including bevelOffset) is bevel + * bevelOffset: // how far from text outline does bevel start + * } + */ + + class TextGeometry extends Geometry { + + constructor( text, parameters ) { + + super(); + this.type = 'TextGeometry'; + + this.parameters = { + text: text, + parameters: parameters + }; + + this.fromBufferGeometry( new TextBufferGeometry( text, parameters ) ); + this.mergeVertices(); + + } + + } + + class TorusBufferGeometry extends BufferGeometry { + + constructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) { + + super(); + this.type = 'TorusBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + radialSegments = Math.floor( radialSegments ); + tubularSegments = Math.floor( tubularSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + const center = new Vector3(); + const vertex = new Vector3(); + const normal = new Vector3(); + + // generate vertices, normals and uvs + + for ( let j = 0; j <= radialSegments; j ++ ) { + + for ( let i = 0; i <= tubularSegments; i ++ ) { + + const u = i / tubularSegments * arc; + const v = j / radialSegments * Math.PI * 2; + + // vertex + + vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); + vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); + vertex.z = tube * Math.sin( v ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + center.x = radius * Math.cos( u ); + center.y = radius * Math.sin( u ); + normal.subVectors( vertex, center ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( let j = 1; j <= radialSegments; j ++ ) { + + for ( let i = 1; i <= tubularSegments; i ++ ) { + + // indices + + const a = ( tubularSegments + 1 ) * j + i - 1; + const b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; + const c = ( tubularSegments + 1 ) * ( j - 1 ) + i; + const d = ( tubularSegments + 1 ) * j + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + } + + class TorusGeometry extends Geometry { + + constructor( radius, tube, radialSegments, tubularSegments, arc ) { + + super(); + this.type = 'TorusGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + this.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) ); + this.mergeVertices(); + + } + + } + + class TorusKnotBufferGeometry extends BufferGeometry { + + constructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) { + + super(); + this.type = 'TorusKnotBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + tubularSegments = Math.floor( tubularSegments ); + radialSegments = Math.floor( radialSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + const vertex = new Vector3(); + const normal = new Vector3(); + + const P1 = new Vector3(); + const P2 = new Vector3(); + + const B = new Vector3(); + const T = new Vector3(); + const N = new Vector3(); + + // generate vertices, normals and uvs + + for ( let i = 0; i <= tubularSegments; ++ i ) { + + // the radian "u" is used to calculate the position on the torus curve of the current tubular segement + + const 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. + // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions + + calculatePositionOnCurve( u, p, q, radius, P1 ); + calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); + + // calculate orthonormal basis + + T.subVectors( P2, P1 ); + N.addVectors( P2, P1 ); + B.crossVectors( T, N ); + N.crossVectors( B, T ); + + // normalize B, N. T can be ignored, we don't use it + + B.normalize(); + N.normalize(); + + for ( let j = 0; j <= radialSegments; ++ j ) { + + // now calculate the vertices. they are nothing more than an extrusion of the torus curve. + // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. + + const v = j / radialSegments * Math.PI * 2; + const cx = - tube * Math.cos( v ); + const cy = tube * Math.sin( v ); + + // now calculate the final vertex position. + // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve + + vertex.x = P1.x + ( cx * N.x + cy * B.x ); + vertex.y = P1.y + ( cx * N.y + cy * B.y ); + vertex.z = P1.z + ( cx * N.z + cy * B.z ); + + vertices.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) + + normal.subVectors( vertex, P1 ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( let j = 1; j <= tubularSegments; j ++ ) { + + for ( let i = 1; i <= radialSegments; i ++ ) { + + // indices + + const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + const b = ( radialSegments + 1 ) * j + ( i - 1 ); + const c = ( radialSegments + 1 ) * j + i; + const d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // this function calculates the current position on the torus curve + + function calculatePositionOnCurve( u, p, q, radius, position ) { + + const cu = Math.cos( u ); + const su = Math.sin( u ); + const quOverP = q / p * u; + const cs = Math.cos( quOverP ); + + position.x = radius * ( 2 + cs ) * 0.5 * cu; + position.y = radius * ( 2 + cs ) * su * 0.5; + position.z = radius * Math.sin( quOverP ) * 0.5; + + } + + } + + } + + class TorusKnotGeometry extends Geometry { + + constructor( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { + + super(); + this.type = 'TorusKnotGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + if ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); + + this.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); + this.mergeVertices(); + + } + + } + + class TubeBufferGeometry extends BufferGeometry { + + constructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) { + + super(); + this.type = 'TubeBufferGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + const frames = path.computeFrenetFrames( tubularSegments, closed ); + + // expose internals + + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + + // helper variables + + const vertex = new Vector3(); + const normal = new Vector3(); + const uv = new Vector2(); + let P = new Vector3(); + + // buffer + + const vertices = []; + const normals = []; + const uvs = []; + const indices = []; + + // create buffer data + + generateBufferData(); + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // functions + + function generateBufferData() { + + for ( let i = 0; i < tubularSegments; i ++ ) { + + generateSegment( i ); + + } + + // if the geometry is not closed, generate the last row of vertices and normals + // at the regular position on the given path + // + // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) + + generateSegment( ( closed === false ) ? tubularSegments : 0 ); + + // uvs are generated in a separate function. + // this makes it easy compute correct values for closed geometries + + generateUVs(); + + // finally create faces + + generateIndices(); + + } + + function generateSegment( i ) { + + // we use getPointAt to sample evenly distributed points from the given path + + P = path.getPointAt( i / tubularSegments, P ); + + // retrieve corresponding normal and binormal + + const N = frames.normals[ i ]; + const B = frames.binormals[ i ]; + + // generate normals and vertices for the current segment + + for ( let j = 0; j <= radialSegments; j ++ ) { + + const v = j / radialSegments * Math.PI * 2; + + const sin = Math.sin( v ); + const cos = - Math.cos( v ); + + // normal + + normal.x = ( cos * N.x + sin * B.x ); + normal.y = ( cos * N.y + sin * B.y ); + normal.z = ( cos * N.z + sin * B.z ); + normal.normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // vertex + + vertex.x = P.x + radius * normal.x; + vertex.y = P.y + radius * normal.y; + vertex.z = P.z + radius * normal.z; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + function generateIndices() { + + for ( let j = 1; j <= tubularSegments; j ++ ) { + + for ( let i = 1; i <= radialSegments; i ++ ) { + + const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + const b = ( radialSegments + 1 ) * j + ( i - 1 ); + const c = ( radialSegments + 1 ) * j + i; + const d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + } + + function generateUVs() { + + for ( let i = 0; i <= tubularSegments; i ++ ) { + + for ( let j = 0; j <= radialSegments; j ++ ) { + + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + + uvs.push( uv.x, uv.y ); + + } + + } + + } + + } + toJSON() { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + data.path = this.parameters.path.toJSON(); + + return data; + + } + + } + + class TubeGeometry extends Geometry { + + constructor( path, tubularSegments, radius, radialSegments, closed, taper ) { + + super(); + this.type = 'TubeGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + if ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' ); + + const bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ); + + // expose internals + + this.tangents = bufferGeometry.tangents; + this.normals = bufferGeometry.normals; + this.binormals = bufferGeometry.binormals; + + // create geometry + + this.fromBufferGeometry( bufferGeometry ); + this.mergeVertices(); + + } + + } + + class WireframeGeometry extends BufferGeometry { + + constructor( geometry ) { + + super(); + this.type = 'WireframeGeometry'; + + // buffer + + const vertices = []; + + // helper variables + + const edge = [ 0, 0 ], edges = {}; + const keys = [ 'a', 'b', 'c' ]; + + // different logic for Geometry and BufferGeometry + + if ( geometry && geometry.isGeometry ) { + + // create a data structure that contains all edges without duplicates + + const faces = geometry.faces; + + for ( let i = 0, l = faces.length; i < l; i ++ ) { + + const face = faces[ i ]; + + for ( let j = 0; j < 3; j ++ ) { + + const edge1 = face[ keys[ j ] ]; + const edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + const key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + // generate vertices + + for ( const key in edges ) { + + const e = edges[ key ]; + + let vertex = geometry.vertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = geometry.vertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else if ( geometry && geometry.isBufferGeometry ) { + + const vertex = new Vector3(); + + if ( geometry.index !== null ) { + + // indexed BufferGeometry + + const position = geometry.attributes.position; + const indices = geometry.index; + let groups = geometry.groups; + + if ( groups.length === 0 ) { + + groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; + + } + + // create a data structure that contains all eges without duplicates + + for ( let o = 0, ol = groups.length; o < ol; ++ o ) { + + const group = groups[ o ]; + + const start = group.start; + const count = group.count; + + for ( let i = start, l = ( start + count ); i < l; i += 3 ) { + + for ( let j = 0; j < 3; j ++ ) { + + const edge1 = indices.getX( i + j ); + const edge2 = indices.getX( i + ( j + 1 ) % 3 ); + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + const key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + } + + // generate vertices + + for ( const key in edges ) { + + const e = edges[ key ]; + + vertex.fromBufferAttribute( position, e.index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex.fromBufferAttribute( position, e.index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else { + + // non-indexed BufferGeometry + + const position = geometry.attributes.position; + + for ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) { + + for ( let j = 0; j < 3; j ++ ) { + + // three edges per triangle, an edge is represented as (index1, index2) + // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) + + const index1 = 3 * i + j; + vertex.fromBufferAttribute( position, index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + const index2 = 3 * i + ( ( j + 1 ) % 3 ); + vertex.fromBufferAttribute( position, index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + } + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + + } + + } + + var Geometries = /*#__PURE__*/Object.freeze({ + __proto__: null, + BoxGeometry: BoxGeometry, + BoxBufferGeometry: BoxBufferGeometry, + CircleGeometry: CircleGeometry, + CircleBufferGeometry: CircleBufferGeometry, + ConeGeometry: ConeGeometry, + ConeBufferGeometry: ConeBufferGeometry, + CylinderGeometry: CylinderGeometry, + CylinderBufferGeometry: CylinderBufferGeometry, + DodecahedronGeometry: DodecahedronGeometry, + DodecahedronBufferGeometry: DodecahedronBufferGeometry, + EdgesGeometry: EdgesGeometry, + ExtrudeGeometry: ExtrudeGeometry, + ExtrudeBufferGeometry: ExtrudeBufferGeometry, + IcosahedronGeometry: IcosahedronGeometry, + IcosahedronBufferGeometry: IcosahedronBufferGeometry, + LatheGeometry: LatheGeometry, + LatheBufferGeometry: LatheBufferGeometry, + OctahedronGeometry: OctahedronGeometry, + OctahedronBufferGeometry: OctahedronBufferGeometry, + ParametricGeometry: ParametricGeometry, + ParametricBufferGeometry: ParametricBufferGeometry, + PlaneGeometry: PlaneGeometry, + PlaneBufferGeometry: PlaneBufferGeometry, + PolyhedronGeometry: PolyhedronGeometry, + PolyhedronBufferGeometry: PolyhedronBufferGeometry, + RingGeometry: RingGeometry, + RingBufferGeometry: RingBufferGeometry, + ShapeGeometry: ShapeGeometry, + ShapeBufferGeometry: ShapeBufferGeometry, + SphereGeometry: SphereGeometry, + SphereBufferGeometry: SphereBufferGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TetrahedronBufferGeometry: TetrahedronBufferGeometry, + TextGeometry: TextGeometry, + TextBufferGeometry: TextBufferGeometry, + TorusGeometry: TorusGeometry, + TorusBufferGeometry: TorusBufferGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TorusKnotBufferGeometry: TorusKnotBufferGeometry, + TubeGeometry: TubeGeometry, + TubeBufferGeometry: TubeBufferGeometry, + WireframeGeometry: WireframeGeometry + }); + + /** + * parameters = { + * color: + * } + */ + + function ShadowMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShadowMaterial'; + + this.color = new Color( 0x000000 ); + this.transparent = true; + + this.setValues( parameters ); + + } + + ShadowMaterial.prototype = Object.create( Material.prototype ); + ShadowMaterial.prototype.constructor = ShadowMaterial; + + ShadowMaterial.prototype.isShadowMaterial = true; + + ShadowMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + return this; + + }; + + function RawShaderMaterial( parameters ) { + + ShaderMaterial.call( this, parameters ); + + this.type = 'RawShaderMaterial'; + + } + + RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); + RawShaderMaterial.prototype.constructor = RawShaderMaterial; + + RawShaderMaterial.prototype.isRawShaderMaterial = true; + + /** + * parameters = { + * color: , + * roughness: , + * metalness: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * roughnessMap: new THREE.Texture( ), + * + * metalnessMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * envMapIntensity: + * + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshStandardMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'STANDARD': '' }; + + this.type = 'MeshStandardMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.roughness = 1.0; + this.metalness = 0.0; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.roughnessMap = null; + + this.metalnessMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.envMapIntensity = 1.0; + + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.vertexTangents = false; + + this.setValues( parameters ); + + } + + MeshStandardMaterial.prototype = Object.create( Material.prototype ); + MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; + + MeshStandardMaterial.prototype.isMeshStandardMaterial = true; + + MeshStandardMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'STANDARD': '' }; + + this.color.copy( source.color ); + this.roughness = source.roughness; + this.metalness = source.metalness; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.roughnessMap = source.roughnessMap; + + this.metalnessMap = source.metalnessMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.envMapIntensity = source.envMapIntensity; + + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.vertexTangents = source.vertexTangents; + + return this; + + }; + + /** + * parameters = { + * clearcoat: , + * clearcoatMap: new THREE.Texture( ), + * clearcoatRoughness: , + * clearcoatRoughnessMap: new THREE.Texture( ), + * clearcoatNormalScale: , + * clearcoatNormalMap: new THREE.Texture( ), + * + * reflectivity: , + * ior: , + * + * sheen: , + * + * transmission: , + * transmissionMap: new THREE.Texture( ) + * } + */ + + function MeshPhysicalMaterial( parameters ) { + + MeshStandardMaterial.call( this ); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.type = 'MeshPhysicalMaterial'; + + this.clearcoat = 0.0; + this.clearcoatMap = null; + this.clearcoatRoughness = 0.0; + this.clearcoatRoughnessMap = null; + this.clearcoatNormalScale = new Vector2( 1, 1 ); + this.clearcoatNormalMap = null; + + this.reflectivity = 0.5; // maps to F0 = 0.04 + + Object.defineProperty( this, 'ior', { + get: function () { + + return ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity ); + + }, + set: function ( ior ) { + + this.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 ); + + } + } ); + + this.sheen = null; // null will disable sheen bsdf + + this.transmission = 0.0; + this.transmissionMap = null; + + this.setValues( parameters ); + + } + + MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); + MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; + + MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; + + MeshPhysicalMaterial.prototype.copy = function ( source ) { + + MeshStandardMaterial.prototype.copy.call( this, source ); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.clearcoat = source.clearcoat; + this.clearcoatMap = source.clearcoatMap; + this.clearcoatRoughness = source.clearcoatRoughness; + this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; + this.clearcoatNormalMap = source.clearcoatNormalMap; + this.clearcoatNormalScale.copy( source.clearcoatNormalScale ); + + this.reflectivity = source.reflectivity; + + if ( source.sheen ) { + + this.sheen = ( this.sheen || new Color() ).copy( source.sheen ); + + } else { + + this.sheen = null; + + } + + this.transmission = source.transmission; + this.transmissionMap = source.transmissionMap; + + return this; + + }; + + /** + * parameters = { + * color: , + * specular: , + * shininess: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.MultiplyOperation, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshPhongMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshPhongMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.specular = new Color( 0x111111 ); + this.shininess = 30; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshPhongMaterial.prototype = Object.create( Material.prototype ); + MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; + + MeshPhongMaterial.prototype.isMeshPhongMaterial = true; + + MeshPhongMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.specular.copy( source.specular ); + this.shininess = source.shininess; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * + * map: new THREE.Texture( ), + * gradientMap: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshToonMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'TOON': '' }; + + this.type = 'MeshToonMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + this.gradientMap = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshToonMaterial.prototype = Object.create( Material.prototype ); + MeshToonMaterial.prototype.constructor = MeshToonMaterial; + + MeshToonMaterial.prototype.isMeshToonMaterial = true; + + MeshToonMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + this.gradientMap = source.gradientMap; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * opacity: , + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshNormalMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshNormalMaterial'; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshNormalMaterial.prototype = Object.create( Material.prototype ); + MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; + + MeshNormalMaterial.prototype.isMeshNormalMaterial = true; + + MeshNormalMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshLambertMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshLambertMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshLambertMaterial.prototype = Object.create( Material.prototype ); + MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; + + MeshLambertMaterial.prototype.isMeshLambertMaterial = true; + + MeshLambertMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * matcap: new THREE.Texture( ), + * + * map: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshMatcapMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'MATCAP': '' }; + + this.type = 'MeshMatcapMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.matcap = null; + + this.map = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshMatcapMaterial.prototype = Object.create( Material.prototype ); + MeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial; + + MeshMatcapMaterial.prototype.isMeshMatcapMaterial = true; + + MeshMatcapMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'MATCAP': '' }; + + this.color.copy( source.color ); + + this.matcap = source.matcap; + + this.map = source.map; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * + * scale: , + * dashSize: , + * gapSize: + * } + */ + + function LineDashedMaterial( parameters ) { + + LineBasicMaterial.call( this ); + + this.type = 'LineDashedMaterial'; + + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + + this.setValues( parameters ); + + } + + LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); + LineDashedMaterial.prototype.constructor = LineDashedMaterial; + + LineDashedMaterial.prototype.isLineDashedMaterial = true; + + LineDashedMaterial.prototype.copy = function ( source ) { + + LineBasicMaterial.prototype.copy.call( this, source ); + + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + + return this; + + }; + + var Materials = /*#__PURE__*/Object.freeze({ + __proto__: null, + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + MeshMatcapMaterial: MeshMatcapMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material + }); + + const AnimationUtils = { + + // same as Array.prototype.slice, but also works on typed arrays + arraySlice: function ( array, from, to ) { + + if ( AnimationUtils.isTypedArray( array ) ) { + + // in ios9 array.subarray(from, undefined) will return empty array + // but array.subarray(from) or array.subarray(from, len) is correct + return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); + + } + + return array.slice( from, to ); + + }, + + // converts an array to a specific type + convertArray: function ( array, type, forceClone ) { + + if ( ! array || // let 'undefined' and 'null' pass + ! forceClone && array.constructor === type ) return array; + + if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { + + return new type( array ); // create typed array + + } + + return Array.prototype.slice.call( array ); // create Array + + }, + + isTypedArray: function ( object ) { + + return ArrayBuffer.isView( object ) && + ! ( object instanceof DataView ); + + }, + + // returns an array by which times and values can be sorted + getKeyframeOrder: function ( times ) { + + function compareTime( i, j ) { + + return times[ i ] - times[ j ]; + + } + + const n = times.length; + const result = new Array( n ); + for ( let i = 0; i !== n; ++ i ) result[ i ] = i; + + result.sort( compareTime ); + + return result; + + }, + + // uses the array previously returned by 'getKeyframeOrder' to sort data + sortedArray: function ( values, stride, order ) { + + const nValues = values.length; + const result = new values.constructor( nValues ); + + for ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { + + const srcOffset = order[ i ] * stride; + + for ( let j = 0; j !== stride; ++ j ) { + + result[ dstOffset ++ ] = values[ srcOffset + j ]; + + } + + } + + return result; + + }, + + // function for parsing AOS keyframe formats + flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { + + let i = 1, key = jsonKeys[ 0 ]; + + while ( key !== undefined && key[ valuePropertyName ] === undefined ) { + + key = jsonKeys[ i ++ ]; + + } + + if ( key === undefined ) return; // no data + + let value = key[ valuePropertyName ]; + if ( value === undefined ) return; // no data + + if ( Array.isArray( value ) ) { + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push.apply( values, value ); // push all elements + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else if ( value.toArray !== undefined ) { + + // ...assume THREE.Math-ish + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + value.toArray( values, values.length ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else { + + // otherwise push as-is + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push( value ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } + + }, + + subclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) { + + const clip = sourceClip.clone(); + + clip.name = name; + + const tracks = []; + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + const track = clip.tracks[ i ]; + const valueSize = track.getValueSize(); + + const times = []; + const values = []; + + for ( let j = 0; j < track.times.length; ++ j ) { + + const frame = track.times[ j ] * fps; + + if ( frame < startFrame || frame >= endFrame ) continue; + + times.push( track.times[ j ] ); + + for ( let k = 0; k < valueSize; ++ k ) { + + values.push( track.values[ j * valueSize + k ] ); + + } + + } + + if ( times.length === 0 ) continue; + + track.times = AnimationUtils.convertArray( times, track.times.constructor ); + track.values = AnimationUtils.convertArray( values, track.values.constructor ); + + tracks.push( track ); + + } + + clip.tracks = tracks; + + // find minimum .times value across all tracks in the trimmed clip + + let minStartTime = Infinity; + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + if ( minStartTime > clip.tracks[ i ].times[ 0 ] ) { + + minStartTime = clip.tracks[ i ].times[ 0 ]; + + } + + } + + // shift all tracks such that clip begins at t=0 + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + clip.tracks[ i ].shift( - 1 * minStartTime ); + + } + + clip.resetDuration(); + + return clip; + + }, + + makeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) { + + if ( fps <= 0 ) fps = 30; + + const numTracks = referenceClip.tracks.length; + const referenceTime = referenceFrame / fps; + + // Make each track's values relative to the values at the reference frame + for ( let i = 0; i < numTracks; ++ i ) { + + const referenceTrack = referenceClip.tracks[ i ]; + const referenceTrackType = referenceTrack.ValueTypeName; + + // Skip this track if it's non-numeric + if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue; + + // Find the track in the target clip whose name and type matches the reference track + const targetTrack = targetClip.tracks.find( function ( track ) { + + return track.name === referenceTrack.name + && track.ValueTypeName === referenceTrackType; + + } ); + + if ( targetTrack === undefined ) continue; + + let referenceOffset = 0; + const referenceValueSize = referenceTrack.getValueSize(); + + if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + referenceOffset = referenceValueSize / 3; + + } + + let targetOffset = 0; + const targetValueSize = targetTrack.getValueSize(); + + if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + targetOffset = targetValueSize / 3; + + } + + const lastIndex = referenceTrack.times.length - 1; + let referenceValue; + + // Find the value to subtract out of the track + if ( referenceTime <= referenceTrack.times[ 0 ] ) { + + // Reference frame is earlier than the first keyframe, so just use the first keyframe + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); + + } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) { + + // Reference frame is after the last keyframe, so just use the last keyframe + const startIndex = lastIndex * referenceValueSize + referenceOffset; + const endIndex = startIndex + referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); + + } else { + + // Interpolate to the reference value + const interpolant = referenceTrack.createInterpolant(); + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + interpolant.evaluate( referenceTime ); + referenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex ); + + } + + // Conjugate the quaternion + if ( referenceTrackType === 'quaternion' ) { + + const referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate(); + referenceQuat.toArray( referenceValue ); + + } + + // Subtract the reference value from all of the track values + + const numTimes = targetTrack.times.length; + for ( let j = 0; j < numTimes; ++ j ) { + + const valueStart = j * targetValueSize + targetOffset; + + if ( referenceTrackType === 'quaternion' ) { + + // Multiply the conjugate for quaternion track types + Quaternion.multiplyQuaternionsFlat( + targetTrack.values, + valueStart, + referenceValue, + 0, + targetTrack.values, + valueStart + ); + + } else { + + const valueEnd = targetValueSize - targetOffset * 2; + + // Subtract each value for all other numeric track types + for ( let k = 0; k < valueEnd; ++ k ) { + + targetTrack.values[ valueStart + k ] -= referenceValue[ k ]; + + } + + } + + } + + } + + targetClip.blendMode = AdditiveAnimationBlendMode; + + return targetClip; + + } + + }; + + /** + * Abstract base class of interpolants over parametric samples. + * + * The parameter domain is one dimensional, typically the time or a path + * along a curve defined by the data. + * + * The sample values can have any dimensionality and derived classes may + * apply special interpretations to the data. + * + * This class provides the interval seek in a Template Method, deferring + * the actual interpolation to derived classes. + * + * Time complexity is O(1) for linear access crossing at most two points + * and O(log N) for random access, where N is the number of positions. + * + * References: + * + * http://www.oodesign.com/template-method-pattern.html + * + */ + + function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + + this.resultBuffer = resultBuffer !== undefined ? + resultBuffer : new sampleValues.constructor( sampleSize ); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + + } + + Object.assign( Interpolant.prototype, { + + evaluate: function ( t ) { + + const pp = this.parameterPositions; + let i1 = this._cachedIndex, + t1 = pp[ i1 ], + t0 = pp[ i1 - 1 ]; + + validate_interval: { + + seek: { + + let right; + + linear_scan: { + + //- See http://jsperf.com/comparison-to-undefined/3 + //- slower code: + //- + //- if ( t >= t1 || t1 === undefined ) { + forward_scan: if ( ! ( t < t1 ) ) { + + for ( let giveUpAt = i1 + 2; ; ) { + + if ( t1 === undefined ) { + + if ( t < t0 ) break forward_scan; + + // after end + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t, t0 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t0 = t1; + t1 = pp[ ++ i1 ]; + + if ( t < t1 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the right side of the index + right = pp.length; + break linear_scan; + + } + + //- slower code: + //- if ( t < t0 || t0 === undefined ) { + if ( ! ( t >= t0 ) ) { + + // looping? + + const t1global = pp[ 1 ]; + + if ( t < t1global ) { + + i1 = 2; // + 1, using the scan for the details + t0 = t1global; + + } + + // linear reverse scan + + for ( let giveUpAt = i1 - 2; ; ) { + + if ( t0 === undefined ) { + + // before start + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t1 = t0; + t0 = pp[ -- i1 - 1 ]; + + if ( t >= t0 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the left side of the index + right = i1; + i1 = 0; + break linear_scan; + + } + + // the interval is valid + + break validate_interval; + + } // linear scan + + // binary search + + while ( i1 < right ) { + + const mid = ( i1 + right ) >>> 1; + + if ( t < pp[ mid ] ) { + + right = mid; + + } else { + + i1 = mid + 1; + + } + + } + + t1 = pp[ i1 ]; + t0 = pp[ i1 - 1 ]; + + // check boundary cases, again + + if ( t0 === undefined ) { + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( t1 === undefined ) { + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t0, t ); + + } + + } // seek + + this._cachedIndex = i1; + + this.intervalChanged_( i1, t0, t1 ); + + } // validate_interval + + return this.interpolate_( i1, t0, t, t1 ); + + }, + + settings: null, // optional, subclass-specific settings structure + // Note: The indirection allows central control of many interpolants. + + // --- Protected interface + + DefaultSettings_: {}, + + getSettings_: function () { + + return this.settings || this.DefaultSettings_; + + }, + + copySampleValue_: function ( index ) { + + // copies a sample value to the result buffer + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + offset = index * stride; + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + }, + + // Template methods for derived classes: + + interpolate_: function ( /* i1, t0, t, t1 */ ) { + + throw new Error( 'call to abstract method' ); + // implementations shall return this.resultBuffer + + }, + + intervalChanged_: function ( /* i1, t0, t1 */ ) { + + // empty + + } + + } ); + + // DECLARE ALIAS AFTER assign prototype + Object.assign( Interpolant.prototype, { + + //( 0, t, t0 ), returns this.resultBuffer + beforeStart_: Interpolant.prototype.copySampleValue_, + + //( N-1, tN-1, t ), returns this.resultBuffer + afterEnd_: Interpolant.prototype.copySampleValue_, + + } ); + + /** + * Fast and simple cubic spline interpolant. + * + * It was derived from a Hermitian construction setting the first derivative + * at each sample position to the linear slope between neighboring positions + * over their parameter interval. + */ + + function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + this._weightPrev = - 0; + this._offsetPrev = - 0; + this._weightNext = - 0; + this._offsetNext = - 0; + + } + + CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: CubicInterpolant, + + DefaultSettings_: { + + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + + }, + + intervalChanged_: function ( i1, t0, t1 ) { + + const pp = this.parameterPositions; + let iPrev = i1 - 2, + iNext = i1 + 1, + + tPrev = pp[ iPrev ], + tNext = pp[ iNext ]; + + if ( tPrev === undefined ) { + + switch ( this.getSettings_().endingStart ) { + + case ZeroSlopeEnding: + + // f'(t0) = 0 + iPrev = i1; + tPrev = 2 * t0 - t1; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iPrev = pp.length - 2; + tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(t0) = 0 a.k.a. Natural Spline + iPrev = i1; + tPrev = t1; + + } + + } + + if ( tNext === undefined ) { + + switch ( this.getSettings_().endingEnd ) { + + case ZeroSlopeEnding: + + // f'(tN) = 0 + iNext = i1; + tNext = 2 * t1 - t0; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iNext = 1; + tNext = t1 + pp[ 1 ] - pp[ 0 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(tN) = 0, a.k.a. Natural Spline + iNext = i1 - 1; + tNext = t0; + + } + + } + + const halfDt = ( t1 - t0 ) * 0.5, + stride = this.valueSize; + + this._weightPrev = halfDt / ( t0 - tPrev ); + this._weightNext = halfDt / ( tNext - t1 ); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + + }, + + interpolate_: function ( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + o1 = i1 * stride, o0 = o1 - stride, + oP = this._offsetPrev, oN = this._offsetNext, + wP = this._weightPrev, wN = this._weightNext, + + p = ( t - t0 ) / ( t1 - t0 ), + pp = p * p, + ppp = pp * p; + + // evaluate polynomials + + const sP = - wP * ppp + 2 * wP * pp - wP * p; + const s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; + const s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; + const sN = wN * ppp - wN * pp; + + // combine data linearly + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = + sP * values[ oP + i ] + + s0 * values[ o0 + i ] + + s1 * values[ o1 + i ] + + sN * values[ oN + i ]; + + } + + return result; + + } + + } ); + + function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: LinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset1 = i1 * stride, + offset0 = offset1 - stride, + + weight1 = ( t - t0 ) / ( t1 - t0 ), + weight0 = 1 - weight1; + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = + values[ offset0 + i ] * weight0 + + values[ offset1 + i ] * weight1; + + } + + return result; + + } + + } ); + + /** + * + * Interpolant that evaluates to the sample value at the position preceeding + * the parameter. + */ + + function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: DiscreteInterpolant, + + interpolate_: function ( i1 /*, t0, t, t1 */ ) { + + return this.copySampleValue_( i1 - 1 ); + + } + + } ); + + function KeyframeTrack( name, times, values, interpolation ) { + + if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); + if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); + + this.name = name; + + this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); + this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); + + this.setInterpolation( interpolation || this.DefaultInterpolation ); + + } + + // Static methods + + Object.assign( KeyframeTrack, { + + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + + toJSON: function ( track ) { + + const trackType = track.constructor; + + let json; + + // derived classes can define a static toJSON method + if ( trackType.toJSON !== undefined ) { + + json = trackType.toJSON( track ); + + } else { + + // by default, we assume the data can be serialized as-is + json = { + + 'name': track.name, + 'times': AnimationUtils.convertArray( track.times, Array ), + 'values': AnimationUtils.convertArray( track.values, Array ) + + }; + + const interpolation = track.getInterpolation(); + + if ( interpolation !== track.DefaultInterpolation ) { + + json.interpolation = interpolation; + + } + + } + + json.type = track.ValueTypeName; // mandatory + + return json; + + } + + } ); + + Object.assign( KeyframeTrack.prototype, { + + constructor: KeyframeTrack, + + TimeBufferType: Float32Array, + + ValueBufferType: Float32Array, + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodDiscrete: function ( result ) { + + return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: function ( result ) { + + return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + setInterpolation: function ( interpolation ) { + + let factoryMethod; + + switch ( interpolation ) { + + case InterpolateDiscrete: + + factoryMethod = this.InterpolantFactoryMethodDiscrete; + + break; + + case InterpolateLinear: + + factoryMethod = this.InterpolantFactoryMethodLinear; + + break; + + case InterpolateSmooth: + + factoryMethod = this.InterpolantFactoryMethodSmooth; + + break; + + } + + if ( factoryMethod === undefined ) { + + const message = 'unsupported interpolation for ' + + this.ValueTypeName + ' keyframe track named ' + this.name; + + if ( this.createInterpolant === undefined ) { + + // fall back to default, unless the default itself is messed up + if ( interpolation !== this.DefaultInterpolation ) { + + this.setInterpolation( this.DefaultInterpolation ); + + } else { + + throw new Error( message ); // fatal, in this case + + } + + } + + console.warn( 'THREE.KeyframeTrack:', message ); + return this; + + } + + this.createInterpolant = factoryMethod; + + return this; + + }, + + getInterpolation: function () { + + switch ( this.createInterpolant ) { + + case this.InterpolantFactoryMethodDiscrete: + + return InterpolateDiscrete; + + case this.InterpolantFactoryMethodLinear: + + return InterpolateLinear; + + case this.InterpolantFactoryMethodSmooth: + + return InterpolateSmooth; + + } + + }, + + getValueSize: function () { + + return this.values.length / this.times.length; + + }, + + // move all keyframes either forwards or backwards in time + shift: function ( timeOffset ) { + + if ( timeOffset !== 0.0 ) { + + const times = this.times; + + for ( let i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] += timeOffset; + + } + + } + + return this; + + }, + + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale: function ( timeScale ) { + + if ( timeScale !== 1.0 ) { + + const times = this.times; + + for ( let i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] *= timeScale; + + } + + } + + return this; + + }, + + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim: function ( startTime, endTime ) { + + const times = this.times, + nKeys = times.length; + + let from = 0, + to = nKeys - 1; + + while ( from !== nKeys && times[ from ] < startTime ) { + + ++ from; + + } + + while ( to !== - 1 && times[ to ] > endTime ) { + + -- to; + + } + + ++ to; // inclusive -> exclusive bound + + if ( from !== 0 || to !== nKeys ) { + + // empty tracks are forbidden, so keep at least one keyframe + if ( from >= to ) { + + to = Math.max( to, 1 ); + from = to - 1; + + } + + const stride = this.getValueSize(); + this.times = AnimationUtils.arraySlice( times, from, to ); + this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride ); + + } + + return this; + + }, + + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate: function () { + + let valid = true; + + const valueSize = this.getValueSize(); + if ( valueSize - Math.floor( valueSize ) !== 0 ) { + + console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); + valid = false; + + } + + const times = this.times, + values = this.values, + + nKeys = times.length; + + if ( nKeys === 0 ) { + + console.error( 'THREE.KeyframeTrack: Track is empty.', this ); + valid = false; + + } + + let prevTime = null; + + for ( let i = 0; i !== nKeys; i ++ ) { + + const currTime = times[ i ]; + + if ( typeof currTime === 'number' && isNaN( currTime ) ) { + + console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); + valid = false; + break; + + } + + if ( prevTime !== null && prevTime > currTime ) { + + console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); + valid = false; + break; + + } + + prevTime = currTime; + + } + + if ( values !== undefined ) { + + if ( AnimationUtils.isTypedArray( values ) ) { + + for ( let i = 0, n = values.length; i !== n; ++ i ) { + + const value = values[ i ]; + + if ( isNaN( value ) ) { + + console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value ); + valid = false; + break; + + } + + } + + } + + } + + return valid; + + }, + + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize: function () { + + // times or values may be shared with other tracks, so overwriting is unsafe + const times = AnimationUtils.arraySlice( this.times ), + values = AnimationUtils.arraySlice( this.values ), + stride = this.getValueSize(), + + smoothInterpolation = this.getInterpolation() === InterpolateSmooth, + + lastIndex = times.length - 1; + + let writeIndex = 1; + + for ( let i = 1; i < lastIndex; ++ i ) { + + let keep = false; + + const time = times[ i ]; + const timeNext = times[ i + 1 ]; + + // remove adjacent keyframes scheduled at the same time + + if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { + + if ( ! smoothInterpolation ) { + + // remove unnecessary keyframes same as their neighbors + + const offset = i * stride, + offsetP = offset - stride, + offsetN = offset + stride; + + for ( let j = 0; j !== stride; ++ j ) { + + const value = values[ offset + j ]; + + if ( value !== values[ offsetP + j ] || + value !== values[ offsetN + j ] ) { + + keep = true; + break; + + } + + } + + } else { + + keep = true; + + } + + } + + // in-place compaction + + if ( keep ) { + + if ( i !== writeIndex ) { + + times[ writeIndex ] = times[ i ]; + + const readOffset = i * stride, + writeOffset = writeIndex * stride; + + for ( let j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + } + + ++ writeIndex; + + } + + } + + // flush last keyframe (compaction looks ahead) + + if ( lastIndex > 0 ) { + + times[ writeIndex ] = times[ lastIndex ]; + + for ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + ++ writeIndex; + + } + + if ( writeIndex !== times.length ) { + + this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); + this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); + + } else { + + this.times = times; + this.values = values; + + } + + return this; + + }, + + clone: function () { + + const times = AnimationUtils.arraySlice( this.times, 0 ); + const values = AnimationUtils.arraySlice( this.values, 0 ); + + const TypedKeyframeTrack = this.constructor; + const track = new TypedKeyframeTrack( this.name, times, values ); + + // Interpolant argument to constructor is not saved, so copy the factory method directly. + track.createInterpolant = this.createInterpolant; + + return track; + + } + + } ); + + /** + * A Track of Boolean keyframe values. + */ + + function BooleanKeyframeTrack( name, times, values ) { + + KeyframeTrack.call( this, name, times, values ); + + } + + BooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: BooleanKeyframeTrack, + + ValueTypeName: 'bool', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + InterpolantFactoryMethodSmooth: undefined + + // Note: Actually this track could have a optimized / compressed + // representation of a single value and a custom interpolant that + // computes "firstValue ^ isOdd( index )". + + } ); + + /** + * A Track of keyframe values that represent color. + */ + + function ColorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + ColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: ColorKeyframeTrack, + + ValueTypeName: 'color' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + // Note: Very basic implementation and nothing special yet. + // However, this is the place for color space parameterization. + + } ); + + /** + * A Track of numeric keyframe values. + */ + + function NumberKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + NumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: NumberKeyframeTrack, + + ValueTypeName: 'number' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + } ); + + /** + * Spherical linear unit quaternion interpolant. + */ + + function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: QuaternionLinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + alpha = ( t - t0 ) / ( t1 - t0 ); + + let offset = i1 * stride; + + for ( let end = offset + stride; offset !== end; offset += 4 ) { + + Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); + + } + + return result; + + } + + } ); + + /** + * A Track of quaternion keyframe values. + */ + + function QuaternionKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + QuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: QuaternionKeyframeTrack, + + ValueTypeName: 'quaternion', + + // ValueBufferType is inherited + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: undefined // not yet implemented + + } ); + + /** + * A Track that interpolates Strings + */ + + function StringKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + StringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: StringKeyframeTrack, + + ValueTypeName: 'string', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + + InterpolantFactoryMethodSmooth: undefined + + } ); + + /** + * A Track of vectored keyframe values. + */ + + function VectorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + VectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: VectorKeyframeTrack, + + ValueTypeName: 'vector' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + } ); + + function AnimationClip( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) { + + this.name = name; + this.tracks = tracks; + this.duration = duration; + this.blendMode = blendMode; + + this.uuid = MathUtils.generateUUID(); + + // this means it should figure out its duration by scanning the tracks + if ( this.duration < 0 ) { + + this.resetDuration(); + + } + + } + + function getTrackTypeForValueTypeName( typeName ) { + + switch ( typeName.toLowerCase() ) { + + case 'scalar': + case 'double': + case 'float': + case 'number': + case 'integer': + + return NumberKeyframeTrack; + + case 'vector': + case 'vector2': + case 'vector3': + case 'vector4': + + return VectorKeyframeTrack; + + case 'color': + + return ColorKeyframeTrack; + + case 'quaternion': + + return QuaternionKeyframeTrack; + + case 'bool': + case 'boolean': + + return BooleanKeyframeTrack; + + case 'string': + + return StringKeyframeTrack; + + } + + throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); + + } + + function parseKeyframeTrack( json ) { + + if ( json.type === undefined ) { + + throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); + + } + + const trackType = getTrackTypeForValueTypeName( json.type ); + + if ( json.times === undefined ) { + + const times = [], values = []; + + AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); + + json.times = times; + json.values = values; + + } + + // derived classes can define a static parse method + if ( trackType.parse !== undefined ) { + + return trackType.parse( json ); + + } else { + + // by default, we assume a constructor compatible with the base + return new trackType( json.name, json.times, json.values, json.interpolation ); + + } + + } + + Object.assign( AnimationClip, { + + parse: function ( json ) { + + const tracks = [], + jsonTracks = json.tracks, + frameTime = 1.0 / ( json.fps || 1.0 ); + + for ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) { + + tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) ); + + } + + const clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode ); + clip.uuid = json.uuid; + + return clip; + + }, + + toJSON: function ( clip ) { + + const tracks = [], + clipTracks = clip.tracks; + + const json = { + + 'name': clip.name, + 'duration': clip.duration, + 'tracks': tracks, + 'uuid': clip.uuid, + 'blendMode': clip.blendMode + + }; + + for ( let i = 0, n = clipTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); + + } + + return json; + + }, + + CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { + + const numMorphTargets = morphTargetSequence.length; + const tracks = []; + + for ( let i = 0; i < numMorphTargets; i ++ ) { + + let times = []; + let values = []; + + times.push( + ( i + numMorphTargets - 1 ) % numMorphTargets, + i, + ( i + 1 ) % numMorphTargets ); + + values.push( 0, 1, 0 ); + + const order = AnimationUtils.getKeyframeOrder( times ); + times = AnimationUtils.sortedArray( times, 1, order ); + values = AnimationUtils.sortedArray( values, 1, order ); + + // if there is a key at the first frame, duplicate it as the + // last frame as well for perfect loop. + if ( ! noLoop && times[ 0 ] === 0 ) { + + times.push( numMorphTargets ); + values.push( values[ 0 ] ); + + } + + tracks.push( + new NumberKeyframeTrack( + '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', + times, values + ).scale( 1.0 / fps ) ); + + } + + return new AnimationClip( name, - 1, tracks ); + + }, + + findByName: function ( objectOrClipArray, name ) { + + let clipArray = objectOrClipArray; + + if ( ! Array.isArray( objectOrClipArray ) ) { + + const o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + + } + + for ( let i = 0; i < clipArray.length; i ++ ) { + + if ( clipArray[ i ].name === name ) { + + return clipArray[ i ]; + + } + + } + + return null; + + }, + + CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { + + const animationToMorphTargets = {}; + + // tested with https://regex101.com/ on trick sequences + // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 + const pattern = /^([\w-]*?)([\d]+)$/; + + // sort morph target names into animation groups based + // patterns like Walk_001, Walk_002, Run_001, Run_002 + for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { + + const morphTarget = morphTargets[ i ]; + const parts = morphTarget.name.match( pattern ); + + if ( parts && parts.length > 1 ) { + + const name = parts[ 1 ]; + + let animationMorphTargets = animationToMorphTargets[ name ]; + + if ( ! animationMorphTargets ) { + + animationToMorphTargets[ name ] = animationMorphTargets = []; + + } + + animationMorphTargets.push( morphTarget ); + + } + + } + + const clips = []; + + for ( const name in animationToMorphTargets ) { + + clips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); + + } + + return clips; + + }, + + // parse the animation.hierarchy format + parseAnimation: function ( animation, bones ) { + + if ( ! animation ) { + + console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); + return null; + + } + + const addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { + + // only return track if there are actually keys. + if ( animationKeys.length !== 0 ) { + + const times = []; + const values = []; + + AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); + + // empty keys are filtered out, so check again + if ( times.length !== 0 ) { + + destTracks.push( new trackType( trackName, times, values ) ); + + } + + } + + }; + + const tracks = []; + + const clipName = animation.name || 'default'; + const fps = animation.fps || 30; + const blendMode = animation.blendMode; + + // automatic length determination in AnimationClip. + let duration = animation.length || - 1; + + const hierarchyTracks = animation.hierarchy || []; + + for ( let h = 0; h < hierarchyTracks.length; h ++ ) { + + const animationKeys = hierarchyTracks[ h ].keys; + + // skip empty tracks + if ( ! animationKeys || animationKeys.length === 0 ) continue; + + // process morph targets + if ( animationKeys[ 0 ].morphTargets ) { + + // figure out all morph targets used in this track + const morphTargetNames = {}; + + let k; + + for ( k = 0; k < animationKeys.length; k ++ ) { + + if ( animationKeys[ k ].morphTargets ) { + + for ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { + + morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; + + } + + } + + } + + // create a track for each morph target with all zero + // morphTargetInfluences except for the keys in which + // the morphTarget is named. + for ( const morphTargetName in morphTargetNames ) { + + const times = []; + const values = []; + + for ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { + + const animationKey = animationKeys[ k ]; + + times.push( animationKey.time ); + values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); + + } + + tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); + + } + + duration = morphTargetNames.length * ( fps || 1.0 ); + + } else { + + // ...assume skeletal animation + + const boneName = '.bones[' + bones[ h ].name + ']'; + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.position', + animationKeys, 'pos', tracks ); + + addNonemptyTrack( + QuaternionKeyframeTrack, boneName + '.quaternion', + animationKeys, 'rot', tracks ); + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.scale', + animationKeys, 'scl', tracks ); + + } + + } + + if ( tracks.length === 0 ) { + + return null; + + } + + const clip = new AnimationClip( clipName, duration, tracks, blendMode ); + + return clip; + + } + + } ); + + Object.assign( AnimationClip.prototype, { + + resetDuration: function () { + + const tracks = this.tracks; + let duration = 0; + + for ( let i = 0, n = tracks.length; i !== n; ++ i ) { + + const track = this.tracks[ i ]; + + duration = Math.max( duration, track.times[ track.times.length - 1 ] ); + + } + + this.duration = duration; + + return this; + + }, + + trim: function () { + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].trim( 0, this.duration ); + + } + + return this; + + }, + + validate: function () { + + let valid = true; + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + valid = valid && this.tracks[ i ].validate(); + + } + + return valid; + + }, + + optimize: function () { + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].optimize(); + + } + + return this; + + }, + + clone: function () { + + const tracks = []; + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + tracks.push( this.tracks[ i ].clone() ); + + } + + return new AnimationClip( this.name, this.duration, tracks, this.blendMode ); + + }, + + toJSON: function () { + + return AnimationClip.toJSON( this ); + + } + + } ); + + const Cache = { + + enabled: false, + + files: {}, + + add: function ( key, file ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Adding key:', key ); + + this.files[ key ] = file; + + }, + + get: function ( key ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Checking key:', key ); + + return this.files[ key ]; + + }, + + remove: function ( key ) { + + delete this.files[ key ]; + + }, + + clear: function () { + + this.files = {}; + + } + + }; + + function LoadingManager( onLoad, onProgress, onError ) { + + const scope = this; + + let isLoading = false; + let itemsLoaded = 0; + let itemsTotal = 0; + let urlModifier = undefined; + const handlers = []; + + // Refer to #5689 for the reason why we don't set .onStart + // in the constructor + + this.onStart = undefined; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + + this.itemStart = function ( url ) { + + itemsTotal ++; + + if ( isLoading === false ) { + + if ( scope.onStart !== undefined ) { + + scope.onStart( url, itemsLoaded, itemsTotal ); + + } + + } + + isLoading = true; + + }; + + this.itemEnd = function ( url ) { + + itemsLoaded ++; + + if ( scope.onProgress !== undefined ) { + + scope.onProgress( url, itemsLoaded, itemsTotal ); + + } + + if ( itemsLoaded === itemsTotal ) { + + isLoading = false; + + if ( scope.onLoad !== undefined ) { + + scope.onLoad(); + + } + + } + + }; + + this.itemError = function ( url ) { + + if ( scope.onError !== undefined ) { + + scope.onError( url ); + + } + + }; + + this.resolveURL = function ( url ) { + + if ( urlModifier ) { + + return urlModifier( url ); + + } + + return url; + + }; + + this.setURLModifier = function ( transform ) { + + urlModifier = transform; + + return this; + + }; + + this.addHandler = function ( regex, loader ) { + + handlers.push( regex, loader ); + + return this; + + }; + + this.removeHandler = function ( regex ) { + + const index = handlers.indexOf( regex ); + + if ( index !== - 1 ) { + + handlers.splice( index, 2 ); + + } + + return this; + + }; + + this.getHandler = function ( file ) { + + for ( let i = 0, l = handlers.length; i < l; i += 2 ) { + + const regex = handlers[ i ]; + const loader = handlers[ i + 1 ]; + + if ( regex.global ) regex.lastIndex = 0; // see #17920 + + if ( regex.test( file ) ) { + + return loader; + + } + + } + + return null; + + }; + + } + + const DefaultLoadingManager = new LoadingManager(); + + function Loader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + this.crossOrigin = 'anonymous'; + this.withCredentials = false; + this.path = ''; + this.resourcePath = ''; + this.requestHeader = {}; + + } + + Object.assign( Loader.prototype, { + + load: function ( /* url, onLoad, onProgress, onError */ ) {}, + + loadAsync: function ( url, onProgress ) { + + const scope = this; + + return new Promise( function ( resolve, reject ) { + + scope.load( url, resolve, onProgress, reject ); + + } ); + + }, + + parse: function ( /* data */ ) {}, + + setCrossOrigin: function ( crossOrigin ) { + + this.crossOrigin = crossOrigin; + return this; + + }, + + setWithCredentials: function ( value ) { + + this.withCredentials = value; + return this; + + }, + + setPath: function ( path ) { + + this.path = path; + return this; + + }, + + setResourcePath: function ( resourcePath ) { + + this.resourcePath = resourcePath; + return this; + + }, + + setRequestHeader: function ( requestHeader ) { + + this.requestHeader = requestHeader; + return this; + + } + + } ); + + const loading = {}; + + function FileLoader( manager ) { + + Loader.call( this, manager ); + + } + + FileLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: FileLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + // Check if request is duplicate + + if ( loading[ url ] !== undefined ) { + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + return; + + } + + // Check for data: URI + const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; + const dataUriRegexResult = url.match( dataUriRegex ); + let request; + + // Safari can not handle Data URIs through XMLHttpRequest so process manually + if ( dataUriRegexResult ) { + + const mimeType = dataUriRegexResult[ 1 ]; + const isBase64 = !! dataUriRegexResult[ 2 ]; + + let data = dataUriRegexResult[ 3 ]; + data = decodeURIComponent( data ); + + if ( isBase64 ) data = atob( data ); + + try { + + let response; + const responseType = ( this.responseType || '' ).toLowerCase(); + + switch ( responseType ) { + + case 'arraybuffer': + case 'blob': + + const view = new Uint8Array( data.length ); + + for ( let i = 0; i < data.length; i ++ ) { + + view[ i ] = data.charCodeAt( i ); + + } + + if ( responseType === 'blob' ) { + + response = new Blob( [ view.buffer ], { type: mimeType } ); + + } else { + + response = view.buffer; + + } + + break; + + case 'document': + + const parser = new DOMParser(); + response = parser.parseFromString( data, mimeType ); + + break; + + case 'json': + + response = JSON.parse( data ); + + break; + + default: // 'text' or other + + response = data; + + break; + + } + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + } catch ( error ) { + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onError ) onError( error ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, 0 ); + + } + + } else { + + // Initialise array for duplicate requests + + loading[ url ] = []; + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + request = new XMLHttpRequest(); + + request.open( 'GET', url, true ); + + request.addEventListener( 'load', function ( event ) { + + const response = this.response; + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + if ( this.status === 200 || this.status === 0 ) { + + // Some browsers return HTTP Status 0 when using non-http protocol + // e.g. 'file://' or 'data://'. Handle as success. + + if ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); + + // Add to cache only on HTTP success, so that we do not cache + // error response bodies as proper responses to requests. + Cache.add( url, response ); + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onLoad ) callback.onLoad( response ); + + } + + scope.manager.itemEnd( url ); + + } else { + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + }, false ); + + request.addEventListener( 'progress', function ( event ) { + + const callbacks = loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onProgress ) callback.onProgress( event ); + + } + + }, false ); + + request.addEventListener( 'error', function ( event ) { + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + request.addEventListener( 'abort', function ( event ) { + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + if ( this.responseType !== undefined ) request.responseType = this.responseType; + if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; + + if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); + + for ( const header in this.requestHeader ) { + + request.setRequestHeader( header, this.requestHeader[ header ] ); + + } + + request.send( null ); + + } + + scope.manager.itemStart( url ); + + return request; + + }, + + setResponseType: function ( value ) { + + this.responseType = value; + return this; + + }, + + setMimeType: function ( value ) { + + this.mimeType = value; + return this; + + } + + } ); + + function AnimationLoader( manager ) { + + Loader.call( this, manager ); + + } + + AnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: AnimationLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + const animations = []; + + for ( let i = 0; i < json.length; i ++ ) { + + const clip = AnimationClip.parse( json[ i ] ); + + animations.push( clip ); + + } + + return animations; + + } + + } ); + + /** + * Abstract Base class to block based textures loader (dds, pvr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + + function CompressedTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + CompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: CompressedTextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const images = []; + + const texture = new CompressedTexture(); + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + + let loaded = 0; + + function loadTexture( i ) { + + loader.load( url[ i ], function ( buffer ) { + + const texDatas = scope.parse( buffer, true ); + + images[ i ] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + + loaded += 1; + + if ( loaded === 6 ) { + + if ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter; + + texture.image = images; + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, onProgress, onError ); + + } + + if ( Array.isArray( url ) ) { + + for ( let i = 0, il = url.length; i < il; ++ i ) { + + loadTexture( i ); + + } + + } else { + + // compressed cubemap texture stored in a single DDS file + + loader.load( url, function ( buffer ) { + + const texDatas = scope.parse( buffer, true ); + + if ( texDatas.isCubemap ) { + + const faces = texDatas.mipmaps.length / texDatas.mipmapCount; + + for ( let f = 0; f < faces; f ++ ) { + + images[ f ] = { mipmaps: [] }; + + for ( let i = 0; i < texDatas.mipmapCount; i ++ ) { + + images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); + images[ f ].format = texDatas.format; + images[ f ].width = texDatas.width; + images[ f ].height = texDatas.height; + + } + + } + + texture.image = images; + + } else { + + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + + } + + if ( texDatas.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + }, onProgress, onError ); + + } + + return texture; + + } + + } ); + + function ImageLoader( manager ) { + + Loader.call( this, manager ); + + } + + ImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: ImageLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + const image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); + + function onImageLoad() { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + Cache.add( url, this ); + + if ( onLoad ) onLoad( this ); + + scope.manager.itemEnd( url ); + + } + + function onImageError( event ) { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + if ( onError ) onError( event ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + image.addEventListener( 'load', onImageLoad, false ); + image.addEventListener( 'error', onImageError, false ); + + if ( url.substr( 0, 5 ) !== 'data:' ) { + + if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; + + } + + scope.manager.itemStart( url ); + + image.src = url; + + return image; + + } + + } ); + + function CubeTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + CubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: CubeTextureLoader, + + load: function ( urls, onLoad, onProgress, onError ) { + + const texture = new CubeTexture(); + + const loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + let loaded = 0; + + function loadTexture( i ) { + + loader.load( urls[ i ], function ( image ) { + + texture.images[ i ] = image; + + loaded ++; + + if ( loaded === 6 ) { + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, undefined, onError ); + + } + + for ( let i = 0; i < urls.length; ++ i ) { + + loadTexture( i ); + + } + + return texture; + + } + + } ); + + /** + * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + + function DataTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + DataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: DataTextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const texture = new DataTexture(); + + const loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setPath( this.path ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( buffer ) { + + const texData = scope.parse( buffer ); + + if ( ! texData ) return; + + if ( texData.image !== undefined ) { + + texture.image = texData.image; + + } else if ( texData.data !== undefined ) { + + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + + } + + texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; + + texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; + texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; + + texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; + + if ( texData.format !== undefined ) { + + texture.format = texData.format; + + } + + if ( texData.type !== undefined ) { + + texture.type = texData.type; + + } + + if ( texData.mipmaps !== undefined ) { + + texture.mipmaps = texData.mipmaps; + texture.minFilter = LinearMipmapLinearFilter; // presumably... + + } + + if ( texData.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture, texData ); + + }, onProgress, onError ); + + + return texture; + + } + + } ); + + function TextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + TextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: TextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const texture = new Texture(); + + const loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + loader.load( url, function ( image ) { + + texture.image = image; + + // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. + const isJPEG = url.search( /\.jpe?g($|\?)/i ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; + + texture.format = isJPEG ? RGBFormat : RGBAFormat; + texture.needsUpdate = true; + + if ( onLoad !== undefined ) { + + onLoad( texture ); + + } + + }, onProgress, onError ); + + return texture; + + } + + } ); + + /** + * Extensible curve object. + * + * Some common of curve methods: + * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) + * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) + * .getPoints(), .getSpacedPoints() + * .getLength() + * .updateArcLengths() + * + * This following curves inherit from THREE.Curve: + * + * -- 2D curves -- + * THREE.ArcCurve + * THREE.CubicBezierCurve + * THREE.EllipseCurve + * THREE.LineCurve + * THREE.QuadraticBezierCurve + * THREE.SplineCurve + * + * -- 3D curves -- + * THREE.CatmullRomCurve3 + * THREE.CubicBezierCurve3 + * THREE.LineCurve3 + * THREE.QuadraticBezierCurve3 + * + * A series of curves can be represented as a THREE.CurvePath. + * + **/ + + function Curve() { + + this.type = 'Curve'; + + this.arcLengthDivisions = 200; + + } + + Object.assign( Curve.prototype, { + + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + + getPoint: function ( /* t, optionalTarget */ ) { + + console.warn( 'THREE.Curve: .getPoint() not implemented.' ); + return null; + + }, + + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + + getPointAt: function ( u, optionalTarget ) { + + const t = this.getUtoTmapping( u ); + return this.getPoint( t, optionalTarget ); + + }, + + // Get sequence of points using getPoint( t ) + + getPoints: function ( divisions = 5 ) { + + const points = []; + + for ( let d = 0; d <= divisions; d ++ ) { + + points.push( this.getPoint( d / divisions ) ); + + } + + return points; + + }, + + // Get sequence of points using getPointAt( u ) + + getSpacedPoints: function ( divisions = 5 ) { + + const points = []; + + for ( let d = 0; d <= divisions; d ++ ) { + + points.push( this.getPointAt( d / divisions ) ); + + } + + return points; + + }, + + // Get total curve arc length + + getLength: function () { + + const lengths = this.getLengths(); + return lengths[ lengths.length - 1 ]; + + }, + + // Get list of cumulative segment lengths + + getLengths: function ( divisions ) { + + if ( divisions === undefined ) divisions = this.arcLengthDivisions; + + if ( this.cacheArcLengths && + ( this.cacheArcLengths.length === divisions + 1 ) && + ! this.needsUpdate ) { + + return this.cacheArcLengths; + + } + + this.needsUpdate = false; + + const cache = []; + let current, last = this.getPoint( 0 ); + let sum = 0; + + cache.push( 0 ); + + for ( let p = 1; p <= divisions; p ++ ) { + + current = this.getPoint( p / divisions ); + sum += current.distanceTo( last ); + cache.push( sum ); + last = current; + + } + + this.cacheArcLengths = cache; + + return cache; // { sums: cache, sum: sum }; Sum is in the last element. + + }, + + updateArcLengths: function () { + + this.needsUpdate = true; + this.getLengths(); + + }, + + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + + getUtoTmapping: function ( u, distance ) { + + const arcLengths = this.getLengths(); + + let i = 0; + const il = arcLengths.length; + + let targetArcLength; // The targeted u distance value to get + + if ( distance ) { + + targetArcLength = distance; + + } else { + + targetArcLength = u * arcLengths[ il - 1 ]; + + } + + // binary search for the index with largest value smaller than target u distance + + let low = 0, high = il - 1, comparison; + + while ( low <= high ) { + + i = 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 + + comparison = arcLengths[ i ] - targetArcLength; + + if ( comparison < 0 ) { + + low = i + 1; + + } else if ( comparison > 0 ) { + + high = i - 1; + + } else { + + high = i; + break; + + // DONE + + } + + } + + i = high; + + if ( arcLengths[ i ] === targetArcLength ) { + + return i / ( il - 1 ); + + } + + // we could get finer grain at lengths, or use simple interpolation between two points + + const lengthBefore = arcLengths[ i ]; + const lengthAfter = arcLengths[ i + 1 ]; + + const segmentLength = lengthAfter - lengthBefore; + + // determine where we are between the 'before' and 'after' points + + const segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; + + // add that fractional amount to t + + const t = ( i + segmentFraction ) / ( il - 1 ); + + return t; + + }, + + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + + getTangent: function ( t, optionalTarget ) { + + const delta = 0.0001; + let t1 = t - delta; + let t2 = t + delta; + + // Capping in case of danger + + if ( t1 < 0 ) t1 = 0; + if ( t2 > 1 ) t2 = 1; + + const pt1 = this.getPoint( t1 ); + const pt2 = this.getPoint( t2 ); + + const tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() ); + + tangent.copy( pt2 ).sub( pt1 ).normalize(); + + return tangent; + + }, + + getTangentAt: function ( u, optionalTarget ) { + + const t = this.getUtoTmapping( u ); + return this.getTangent( t, optionalTarget ); + + }, + + computeFrenetFrames: function ( segments, closed ) { + + // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf + + const normal = new Vector3(); + + const tangents = []; + const normals = []; + const binormals = []; + + const vec = new Vector3(); + const mat = new Matrix4(); + + // compute the tangent vectors for each segment on the curve + + for ( let i = 0; i <= segments; i ++ ) { + + const u = i / segments; + + tangents[ i ] = this.getTangentAt( u, new Vector3() ); + tangents[ i ].normalize(); + + } + + // select an initial normal vector perpendicular to the first tangent vector, + // and in the direction of the minimum tangent xyz component + + normals[ 0 ] = new Vector3(); + binormals[ 0 ] = new Vector3(); + let min = Number.MAX_VALUE; + const tx = Math.abs( tangents[ 0 ].x ); + const ty = Math.abs( tangents[ 0 ].y ); + const tz = Math.abs( tangents[ 0 ].z ); + + if ( tx <= min ) { + + min = tx; + normal.set( 1, 0, 0 ); + + } + + if ( ty <= min ) { + + min = ty; + normal.set( 0, 1, 0 ); + + } + + if ( tz <= min ) { + + normal.set( 0, 0, 1 ); + + } + + vec.crossVectors( tangents[ 0 ], normal ).normalize(); + + normals[ 0 ].crossVectors( tangents[ 0 ], vec ); + binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); + + + // compute the slowly-varying normal and binormal vectors for each segment on the curve + + for ( let i = 1; i <= segments; i ++ ) { + + normals[ i ] = normals[ i - 1 ].clone(); + + binormals[ i ] = binormals[ i - 1 ].clone(); + + vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); + + if ( vec.length() > Number.EPSILON ) { + + vec.normalize(); + + const theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors + + normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); + + } + + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same + + if ( closed === true ) { + + let theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); + theta /= segments; + + if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { + + theta = - theta; + + } + + for ( let i = 1; i <= segments; i ++ ) { + + // twist a little... + normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + } + + return { + tangents: tangents, + normals: normals, + binormals: binormals + }; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.arcLengthDivisions = source.arcLengthDivisions; + + return this; + + }, + + toJSON: function () { + + const data = { + metadata: { + version: 4.5, + type: 'Curve', + generator: 'Curve.toJSON' + } + }; + + data.arcLengthDivisions = this.arcLengthDivisions; + data.type = this.type; + + return data; + + }, + + fromJSON: function ( json ) { + + this.arcLengthDivisions = json.arcLengthDivisions; + + return this; + + } + + } ); + + function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + Curve.call( this ); + + this.type = 'EllipseCurve'; + + this.aX = aX || 0; + this.aY = aY || 0; + + this.xRadius = xRadius || 1; + this.yRadius = yRadius || 1; + + this.aStartAngle = aStartAngle || 0; + this.aEndAngle = aEndAngle || 2 * Math.PI; + + this.aClockwise = aClockwise || false; + + this.aRotation = aRotation || 0; + + } + + EllipseCurve.prototype = Object.create( Curve.prototype ); + EllipseCurve.prototype.constructor = EllipseCurve; + + EllipseCurve.prototype.isEllipseCurve = true; + + EllipseCurve.prototype.getPoint = function ( t, optionalTarget ) { + + const point = optionalTarget || new Vector2(); + + const twoPi = Math.PI * 2; + let deltaAngle = this.aEndAngle - this.aStartAngle; + const samePoints = Math.abs( deltaAngle ) < Number.EPSILON; + + // ensures that deltaAngle is 0 .. 2 PI + while ( deltaAngle < 0 ) deltaAngle += twoPi; + while ( deltaAngle > twoPi ) deltaAngle -= twoPi; + + if ( deltaAngle < Number.EPSILON ) { + + if ( samePoints ) { + + deltaAngle = 0; + + } else { + + deltaAngle = twoPi; + + } + + } + + if ( this.aClockwise === true && ! samePoints ) { + + if ( deltaAngle === twoPi ) { + + deltaAngle = - twoPi; + + } else { + + deltaAngle = deltaAngle - twoPi; + + } + + } + + const angle = this.aStartAngle + t * deltaAngle; + let x = this.aX + this.xRadius * Math.cos( angle ); + let y = this.aY + this.yRadius * Math.sin( angle ); + + if ( this.aRotation !== 0 ) { + + const cos = Math.cos( this.aRotation ); + const sin = Math.sin( this.aRotation ); + + const tx = x - this.aX; + const ty = y - this.aY; + + // Rotate the point about the center of the ellipse. + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + + } + + return point.set( x, y ); + + }; + + EllipseCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.aX = source.aX; + this.aY = source.aY; + + this.xRadius = source.xRadius; + this.yRadius = source.yRadius; + + this.aStartAngle = source.aStartAngle; + this.aEndAngle = source.aEndAngle; + + this.aClockwise = source.aClockwise; + + this.aRotation = source.aRotation; + + return this; + + }; + + + EllipseCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.aX = this.aX; + data.aY = this.aY; + + data.xRadius = this.xRadius; + data.yRadius = this.yRadius; + + data.aStartAngle = this.aStartAngle; + data.aEndAngle = this.aEndAngle; + + data.aClockwise = this.aClockwise; + + data.aRotation = this.aRotation; + + return data; + + }; + + EllipseCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.aX = json.aX; + this.aY = json.aY; + + this.xRadius = json.xRadius; + this.yRadius = json.yRadius; + + this.aStartAngle = json.aStartAngle; + this.aEndAngle = json.aEndAngle; + + this.aClockwise = json.aClockwise; + + this.aRotation = json.aRotation; + + return this; + + }; + + function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + this.type = 'ArcCurve'; + + } + + ArcCurve.prototype = Object.create( EllipseCurve.prototype ); + ArcCurve.prototype.constructor = ArcCurve; + + ArcCurve.prototype.isArcCurve = true; + + /** + * Centripetal CatmullRom Curve - which is useful for avoiding + * cusps and self-intersections in non-uniform catmull rom curves. + * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf + * + * curve.type accepts centripetal(default), chordal and catmullrom + * curve.tension is used for catmullrom which defaults to 0.5 + */ + + + /* + Based on an optimized c++ solution in + - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ + - http://ideone.com/NoEbVM + + This CubicPoly class could be used for reusing some variables and calculations, + but for three.js curve use, it could be possible inlined and flatten into a single function call + which can be placed in CurveUtils. + */ + + function CubicPoly() { + + let c0 = 0, c1 = 0, c2 = 0, c3 = 0; + + /* + * Compute coefficients for a cubic polynomial + * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 + * such that + * p(0) = x0, p(1) = x1 + * and + * p'(0) = t0, p'(1) = t1. + */ + function init( x0, x1, t0, t1 ) { + + c0 = x0; + c1 = t0; + c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + + } + + return { + + initCatmullRom: function ( x0, x1, x2, x3, tension ) { + + init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); + + }, + + initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { + + // compute tangents when parameterized in [t1,t2] + let t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; + let t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; + + // rescale tangents for parametrization in [0,1] + t1 *= dt1; + t2 *= dt1; + + init( x1, x2, t1, t2 ); + + }, + + calc: function ( t ) { + + const t2 = t * t; + const t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + + } + + }; + + } + + // + + const tmp = new Vector3(); + const px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly(); + + function CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) { + + Curve.call( this ); + + this.type = 'CatmullRomCurve3'; + + this.points = points; + this.closed = closed; + this.curveType = curveType; + this.tension = tension; + + } + + CatmullRomCurve3.prototype = Object.create( Curve.prototype ); + CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; + + CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; + + CatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const points = this.points; + const l = points.length; + + const p = ( l - ( this.closed ? 0 : 1 ) ) * t; + let intPoint = Math.floor( p ); + let weight = p - intPoint; + + if ( this.closed ) { + + intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l; + + } else if ( weight === 0 && intPoint === l - 1 ) { + + intPoint = l - 2; + weight = 1; + + } + + let p0, p3; // 4 points (p1 & p2 defined below) + + if ( this.closed || intPoint > 0 ) { + + p0 = points[ ( intPoint - 1 ) % l ]; + + } else { + + // extrapolate first point + tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); + p0 = tmp; + + } + + const p1 = points[ intPoint % l ]; + const p2 = points[ ( intPoint + 1 ) % l ]; + + if ( this.closed || intPoint + 2 < l ) { + + p3 = points[ ( intPoint + 2 ) % l ]; + + } else { + + // extrapolate last point + tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); + p3 = tmp; + + } + + if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { + + // init Centripetal / Chordal Catmull-Rom + const pow = this.curveType === 'chordal' ? 0.5 : 0.25; + let dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); + let dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); + let dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); + + // safety check for repeated points + if ( dt1 < 1e-4 ) dt1 = 1.0; + if ( dt0 < 1e-4 ) dt0 = dt1; + if ( dt2 < 1e-4 ) dt2 = dt1; + + px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); + py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); + pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); + + } else if ( this.curveType === 'catmullrom' ) { + + px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); + py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); + pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); + + } + + point.set( + px.calc( weight ), + py.calc( weight ), + pz.calc( weight ) + ); + + return point; + + }; + + CatmullRomCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( let i = 0, l = source.points.length; i < l; i ++ ) { + + const point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + this.closed = source.closed; + this.curveType = source.curveType; + this.tension = source.tension; + + return this; + + }; + + CatmullRomCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( let i = 0, l = this.points.length; i < l; i ++ ) { + + const point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + data.closed = this.closed; + data.curveType = this.curveType; + data.tension = this.tension; + + return data; + + }; + + CatmullRomCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( let i = 0, l = json.points.length; i < l; i ++ ) { + + const point = json.points[ i ]; + this.points.push( new Vector3().fromArray( point ) ); + + } + + this.closed = json.closed; + this.curveType = json.curveType; + this.tension = json.tension; + + return this; + + }; + + /** + * Bezier Curves formulas obtained from + * http://en.wikipedia.org/wiki/Bézier_curve + */ + + function CatmullRom( t, p0, p1, p2, p3 ) { + + const v0 = ( p2 - p0 ) * 0.5; + const v1 = ( p3 - p1 ) * 0.5; + const t2 = t * t; + const t3 = t * t2; + return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; + + } + + // + + function QuadraticBezierP0( t, p ) { + + const k = 1 - t; + return k * k * p; + + } + + function QuadraticBezierP1( t, p ) { + + return 2 * ( 1 - t ) * t * p; + + } + + function QuadraticBezierP2( t, p ) { + + return t * t * p; + + } + + function QuadraticBezier( t, p0, p1, p2 ) { + + return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + + QuadraticBezierP2( t, p2 ); + + } + + // + + function CubicBezierP0( t, p ) { + + const k = 1 - t; + return k * k * k * p; + + } + + function CubicBezierP1( t, p ) { + + const k = 1 - t; + return 3 * k * k * t * p; + + } + + function CubicBezierP2( t, p ) { + + return 3 * ( 1 - t ) * t * t * p; + + } + + function CubicBezierP3( t, p ) { + + return t * t * t * p; + + } + + function CubicBezier( t, p0, p1, p2, p3 ) { + + return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + + CubicBezierP3( t, p3 ); + + } + + function CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + + } + + CubicBezierCurve.prototype = Object.create( Curve.prototype ); + CubicBezierCurve.prototype.constructor = CubicBezierCurve; + + CubicBezierCurve.prototype.isCubicBezierCurve = true; + + CubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) + ); + + return point; + + }; + + CubicBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + }; + + CubicBezierCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + }; + + CubicBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + }; + + function CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve3'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + + } + + CubicBezierCurve3.prototype = Object.create( Curve.prototype ); + CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; + + CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; + + CubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.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 ) + ); + + return point; + + }; + + CubicBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + }; + + CubicBezierCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + }; + + CubicBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + }; + + function LineCurve( v1 = new Vector2(), v2 = new Vector2() ) { + + Curve.call( this ); + + this.type = 'LineCurve'; + + this.v1 = v1; + this.v2 = v2; + + } + + LineCurve.prototype = Object.create( Curve.prototype ); + LineCurve.prototype.constructor = LineCurve; + + LineCurve.prototype.isLineCurve = true; + + LineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + }; + + // Line curve is linear, so we can overwrite default getPointAt + + LineCurve.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + }; + + LineCurve.prototype.getTangent = function ( t, optionalTarget ) { + + const tangent = optionalTarget || new Vector2(); + + tangent.copy( this.v2 ).sub( this.v1 ).normalize(); + + return tangent; + + }; + + LineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + LineCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + LineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) { + + Curve.call( this ); + + this.type = 'LineCurve3'; + + this.v1 = v1; + this.v2 = v2; + + } + + LineCurve3.prototype = Object.create( Curve.prototype ); + LineCurve3.prototype.constructor = LineCurve3; + + LineCurve3.prototype.isLineCurve3 = true; + + LineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + }; + + // Line curve is linear, so we can overwrite default getPointAt + + LineCurve3.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + }; + + LineCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + LineCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + LineCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + + } + + QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); + QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; + + QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; + + QuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ) + ); + + return point; + + }; + + QuadraticBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + QuadraticBezierCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + QuadraticBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve3'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + + } + + QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); + QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; + + QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; + + QuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.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 ) + ); + + return point; + + }; + + QuadraticBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + QuadraticBezierCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + QuadraticBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function SplineCurve( points = [] ) { + + Curve.call( this ); + + this.type = 'SplineCurve'; + + this.points = points; + + } + + SplineCurve.prototype = Object.create( Curve.prototype ); + SplineCurve.prototype.constructor = SplineCurve; + + SplineCurve.prototype.isSplineCurve = true; + + SplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const points = this.points; + const p = ( points.length - 1 ) * t; + + const intPoint = Math.floor( p ); + const weight = p - intPoint; + + const p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; + const p1 = points[ intPoint ]; + const p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; + const p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; + + point.set( + CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), + CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) + ); + + return point; + + }; + + SplineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( let i = 0, l = source.points.length; i < l; i ++ ) { + + const point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + return this; + + }; + + SplineCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( let i = 0, l = this.points.length; i < l; i ++ ) { + + const point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + return data; + + }; + + SplineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( let i = 0, l = json.points.length; i < l; i ++ ) { + + const point = json.points[ i ]; + this.points.push( new Vector2().fromArray( point ) ); + + } + + return this; + + }; + + var Curves = /*#__PURE__*/Object.freeze({ + __proto__: null, + ArcCurve: ArcCurve, + CatmullRomCurve3: CatmullRomCurve3, + CubicBezierCurve: CubicBezierCurve, + CubicBezierCurve3: CubicBezierCurve3, + EllipseCurve: EllipseCurve, + LineCurve: LineCurve, + LineCurve3: LineCurve3, + QuadraticBezierCurve: QuadraticBezierCurve, + QuadraticBezierCurve3: QuadraticBezierCurve3, + SplineCurve: SplineCurve + }); + + /************************************************************** + * Curved Path - a curve path is simply a array of connected + * curves, but retains the api of a curve + **************************************************************/ + + function CurvePath() { + + Curve.call( this ); + + this.type = 'CurvePath'; + + this.curves = []; + this.autoClose = false; // Automatically closes the path + + } + + CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { + + constructor: CurvePath, + + add: function ( curve ) { + + this.curves.push( curve ); + + }, + + closePath: function () { + + // Add a line curve if start and end of lines are not connected + const startPoint = this.curves[ 0 ].getPoint( 0 ); + const endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); + + if ( ! startPoint.equals( endPoint ) ) { + + this.curves.push( new LineCurve( endPoint, startPoint ) ); + + } + + }, + + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + + getPoint: function ( t ) { + + const d = t * this.getLength(); + const curveLengths = this.getCurveLengths(); + let i = 0; + + // To think about boundaries points. + + while ( i < curveLengths.length ) { + + if ( curveLengths[ i ] >= d ) { + + const diff = curveLengths[ i ] - d; + const curve = this.curves[ i ]; + + const segmentLength = curve.getLength(); + const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + + return curve.getPointAt( u ); + + } + + i ++; + + } + + return null; + + // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { + + points.push( points[ 0 ] ); + + } + + return points; + + }, + + copy: function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.curves = []; + + for ( let i = 0, l = source.curves.length; i < l; i ++ ) { + + const curve = source.curves[ i ]; + + this.curves.push( curve.clone() ); + + } + + this.autoClose = source.autoClose; + + return this; + + }, + + toJSON: function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.autoClose = this.autoClose; + data.curves = []; + + for ( let i = 0, l = this.curves.length; i < l; i ++ ) { + + const curve = this.curves[ i ]; + data.curves.push( curve.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.autoClose = json.autoClose; + this.curves = []; + + for ( let i = 0, l = json.curves.length; i < l; i ++ ) { + + const curve = json.curves[ i ]; + this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); + + } + + return this; + + } + + } ); + + function Path( points ) { + + CurvePath.call( this ); + + this.type = 'Path'; + + this.currentPoint = new Vector2(); + + if ( points ) { + + this.setFromPoints( points ); + + } + + } + + Path.prototype = Object.assign( Object.create( CurvePath.prototype ), { + + constructor: Path, + + setFromPoints: function ( points ) { + + this.moveTo( points[ 0 ].x, points[ 0 ].y ); + + for ( let i = 1, l = points.length; i < l; i ++ ) { + + this.lineTo( points[ i ].x, points[ i ].y ); + + } + + return this; + + }, + + moveTo: function ( x, y ) { + + this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? + + return this; + + }, + + lineTo: function ( x, y ) { + + const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); + this.curves.push( curve ); + + this.currentPoint.set( x, y ); + + return this; + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + const curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2( aCPx, aCPy ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + const curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2( aCP1x, aCP1y ), + new Vector2( aCP2x, aCP2y ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + }, + + splineThru: function ( pts /*Array of Vector*/ ) { + + const npts = [ this.currentPoint.clone() ].concat( pts ); + + const curve = new SplineCurve( npts ); + this.curves.push( curve ); + + this.currentPoint.copy( pts[ pts.length - 1 ] ); + + return this; + + }, + + arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + + this.absarc( aX + x0, aY + y0, aRadius, + aStartAngle, aEndAngle, aClockwise ); + + return this; + + }, + + absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + return this; + + }, + + ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + + this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + return this; + + }, + + absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + if ( this.curves.length > 0 ) { + + // if a previous curve is present, attempt to join + const firstPoint = curve.getPoint( 0 ); + + if ( ! firstPoint.equals( this.currentPoint ) ) { + + this.lineTo( firstPoint.x, firstPoint.y ); + + } + + } + + this.curves.push( curve ); + + const lastPoint = curve.getPoint( 1 ); + this.currentPoint.copy( lastPoint ); + + return this; + + }, + + copy: function ( source ) { + + CurvePath.prototype.copy.call( this, source ); + + this.currentPoint.copy( source.currentPoint ); + + return this; + + }, + + toJSON: function () { + + const data = CurvePath.prototype.toJSON.call( this ); + + data.currentPoint = this.currentPoint.toArray(); + + return data; + + }, + + fromJSON: function ( json ) { + + CurvePath.prototype.fromJSON.call( this, json ); + + this.currentPoint.fromArray( json.currentPoint ); + + return this; + + } + + } ); + + function Shape( points ) { + + Path.call( this, points ); + + this.uuid = MathUtils.generateUUID(); + + this.type = 'Shape'; + + this.holes = []; + + } + + Shape.prototype = Object.assign( Object.create( Path.prototype ), { + + constructor: Shape, + + getPointsHoles: function ( divisions ) { + + const holesPts = []; + + for ( let i = 0, l = this.holes.length; i < l; i ++ ) { + + holesPts[ i ] = this.holes[ i ].getPoints( divisions ); + + } + + return holesPts; + + }, + + // get points of shape and holes (keypoints based on segments parameter) + + extractPoints: function ( divisions ) { + + return { + + shape: this.getPoints( divisions ), + holes: this.getPointsHoles( divisions ) + + }; + + }, + + copy: function ( source ) { + + Path.prototype.copy.call( this, source ); + + this.holes = []; + + for ( let i = 0, l = source.holes.length; i < l; i ++ ) { + + const hole = source.holes[ i ]; + + this.holes.push( hole.clone() ); + + } + + return this; + + }, + + toJSON: function () { + + const data = Path.prototype.toJSON.call( this ); + + data.uuid = this.uuid; + data.holes = []; + + for ( let i = 0, l = this.holes.length; i < l; i ++ ) { + + const hole = this.holes[ i ]; + data.holes.push( hole.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Path.prototype.fromJSON.call( this, json ); + + this.uuid = json.uuid; + this.holes = []; + + for ( let i = 0, l = json.holes.length; i < l; i ++ ) { + + const hole = json.holes[ i ]; + this.holes.push( new Path().fromJSON( hole ) ); + + } + + return this; + + } + + } ); + + function Light( color, intensity = 1 ) { + + Object3D.call( this ); + + this.type = 'Light'; + + this.color = new Color( color ); + this.intensity = intensity; + + } + + Light.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Light, + + isLight: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.intensity = source.intensity; + + return this; + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + + if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); + + if ( this.distance !== undefined ) data.object.distance = this.distance; + if ( this.angle !== undefined ) data.object.angle = this.angle; + if ( this.decay !== undefined ) data.object.decay = this.decay; + if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; + + if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); + + return data; + + } + + } ); + + function HemisphereLight( skyColor, groundColor, intensity ) { + + Light.call( this, skyColor, intensity ); + + this.type = 'HemisphereLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.groundColor = new Color( groundColor ); + + } + + HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: HemisphereLight, + + isHemisphereLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.groundColor.copy( source.groundColor ); + + return this; + + } + + } ); + + function LightShadow( camera ) { + + this.camera = camera; + + this.bias = 0; + this.normalBias = 0; + this.radius = 1; + + this.mapSize = new Vector2( 512, 512 ); + + this.map = null; + this.mapPass = null; + this.matrix = new Matrix4(); + + this.autoUpdate = true; + this.needsUpdate = false; + + this._frustum = new Frustum(); + this._frameExtents = new Vector2( 1, 1 ); + + this._viewportCount = 1; + + this._viewports = [ + + new Vector4( 0, 0, 1, 1 ) + + ]; + + } + + Object.assign( LightShadow.prototype, { + + _projScreenMatrix: new Matrix4(), + + _lightPositionWorld: new Vector3(), + + _lookTarget: new Vector3(), + + getViewportCount: function () { + + return this._viewportCount; + + }, + + getFrustum: function () { + + return this._frustum; + + }, + + updateMatrices: function ( light ) { + + const shadowCamera = this.camera, + shadowMatrix = this.matrix, + projScreenMatrix = this._projScreenMatrix, + lookTarget = this._lookTarget, + lightPositionWorld = this._lightPositionWorld; + + lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + shadowCamera.position.copy( lightPositionWorld ); + + lookTarget.setFromMatrixPosition( light.target.matrixWorld ); + shadowCamera.lookAt( lookTarget ); + shadowCamera.updateMatrixWorld(); + + projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( projScreenMatrix ); + + shadowMatrix.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 + ); + + shadowMatrix.multiply( shadowCamera.projectionMatrix ); + shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); + + }, + + getViewport: function ( viewportIndex ) { + + return this._viewports[ viewportIndex ]; + + }, + + getFrameExtents: function () { + + return this._frameExtents; + + }, + + copy: function ( source ) { + + this.camera = source.camera.clone(); + + this.bias = source.bias; + this.radius = source.radius; + + this.mapSize.copy( source.mapSize ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + const object = {}; + + if ( this.bias !== 0 ) object.bias = this.bias; + if ( this.normalBias !== 0 ) object.normalBias = this.normalBias; + if ( this.radius !== 1 ) object.radius = this.radius; + if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); + + object.camera = this.camera.toJSON( false ).object; + delete object.camera.matrix; + + return object; + + } + + } ); + + function SpotLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); + + this.focus = 1; + + } + + SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: SpotLightShadow, + + isSpotLightShadow: true, + + updateMatrices: function ( light ) { + + const camera = this.camera; + + const fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus; + const aspect = this.mapSize.width / this.mapSize.height; + const far = light.distance || camera.far; + + if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { + + camera.fov = fov; + camera.aspect = aspect; + camera.far = far; + camera.updateProjectionMatrix(); + + } + + LightShadow.prototype.updateMatrices.call( this, light ); + + } + + } ); + + function SpotLight( color, intensity, distance, angle, penumbra, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'SpotLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / Math.PI; + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; + this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new SpotLightShadow(); + + } + + SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: SpotLight, + + isSpotLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function PointLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) ); + + this._frameExtents = new Vector2( 4, 2 ); + + this._viewportCount = 6; + + this._viewports = [ + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + + // positive X + new Vector4( 2, 1, 1, 1 ), + // negative X + new Vector4( 0, 1, 1, 1 ), + // positive Z + new Vector4( 3, 1, 1, 1 ), + // negative Z + new Vector4( 1, 1, 1, 1 ), + // positive Y + new Vector4( 3, 0, 1, 1 ), + // negative Y + new Vector4( 1, 0, 1, 1 ) + ]; + + this._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 ) + ]; + + this._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 ) + ]; + + } + + PointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: PointLightShadow, + + isPointLightShadow: true, + + updateMatrices: function ( light, viewportIndex = 0 ) { + + const camera = this.camera, + shadowMatrix = this.matrix, + lightPositionWorld = this._lightPositionWorld, + lookTarget = this._lookTarget, + projScreenMatrix = this._projScreenMatrix; + + lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + camera.position.copy( lightPositionWorld ); + + lookTarget.copy( camera.position ); + lookTarget.add( this._cubeDirections[ viewportIndex ] ); + camera.up.copy( this._cubeUps[ viewportIndex ] ); + camera.lookAt( lookTarget ); + camera.updateMatrixWorld(); + + shadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z ); + + projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( projScreenMatrix ); + + } + + } ); + + function PointLight( color, intensity, distance, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'PointLight'; + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * 4 * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / ( 4 * Math.PI ); + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new PointLightShadow(); + + } + + PointLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: PointLight, + + isPointLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.decay = source.decay; + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function OrthographicCamera( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) { + + Camera.call( this ); + + this.type = 'OrthographicCamera'; + + this.zoom = 1; + this.view = null; + + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + + this.near = near; + this.far = far; + + this.updateProjectionMatrix(); + + } + + OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: OrthographicCamera, + + isOrthographicCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + return this; + + }, + + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + if ( this.view === null ) { + + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + + } + + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + const dx = ( this.right - this.left ) / ( 2 * this.zoom ); + const dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); + const cx = ( this.right + this.left ) / 2; + const cy = ( this.top + this.bottom ) / 2; + + let left = cx - dx; + let right = cx + dx; + let top = cy + dy; + let bottom = cy - dy; + + if ( this.view !== null && this.view.enabled ) { + + const scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom; + const scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom; + + left += scaleW * this.view.offsetX; + right = left + scaleW * this.view.width; + top -= scaleH * this.view.offsetY; + bottom = top - scaleH * this.view.height; + + } + + this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); + + this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + return data; + + } + + } ); + + function DirectionalLightShadow() { + + LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); + + } + + DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: DirectionalLightShadow, + + isDirectionalLightShadow: true, + + updateMatrices: function ( light ) { + + LightShadow.prototype.updateMatrices.call( this, light ); + + } + + } ); + + function DirectionalLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'DirectionalLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.shadow = new DirectionalLightShadow(); + + } + + DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: DirectionalLight, + + isDirectionalLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function AmbientLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'AmbientLight'; + + } + + AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: AmbientLight, + + isAmbientLight: true + + } ); + + function RectAreaLight( color, intensity, width, height ) { + + Light.call( this, color, intensity ); + + this.type = 'RectAreaLight'; + + this.width = ( width !== undefined ) ? width : 10; + this.height = ( height !== undefined ) ? height : 10; + + } + + RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: RectAreaLight, + + isRectAreaLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.width = source.width; + this.height = source.height; + + return this; + + }, + + toJSON: function ( meta ) { + + const data = Light.prototype.toJSON.call( this, meta ); + + data.object.width = this.width; + data.object.height = this.height; + + return data; + + } + + } ); + + /** + * Primary reference: + * https://graphics.stanford.edu/papers/envmap/envmap.pdf + * + * Secondary reference: + * https://www.ppsloan.org/publications/StupidSH36.pdf + */ + + // 3-band SH defined by 9 coefficients + + class SphericalHarmonics3 { + + constructor() { + + Object.defineProperty( this, 'isSphericalHarmonics3', { value: true } ); + + this.coefficients = []; + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients.push( new Vector3() ); + + } + + } + + set( coefficients ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].copy( coefficients[ i ] ); + + } + + return this; + + } + + zero() { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].set( 0, 0, 0 ); + + } + + return this; + + } + + // get the radiance in the direction of the normal + // target is a Vector3 + getAt( normal, target ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + const coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 ); + + // band 1 + target.addScaledVector( coeff[ 1 ], 0.488603 * y ); + target.addScaledVector( coeff[ 2 ], 0.488603 * z ); + target.addScaledVector( coeff[ 3 ], 0.488603 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) ); + target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) ); + target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) ); + target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) ); + target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) ); + + return target; + + } + + // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal + // target is a Vector3 + // https://graphics.stanford.edu/papers/envmap/envmap.pdf + getIrradianceAt( normal, target ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + const coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095 + + // band 1 + target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603 + target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z ); + target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548 + target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z ); + target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3 + target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z ); + target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274 + + return target; + + } + + add( sh ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].add( sh.coefficients[ i ] ); + + } + + return this; + + } + + addScaledSH( sh, s ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s ); + + } + + return this; + + } + + scale( s ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].multiplyScalar( s ); + + } + + return this; + + } + + lerp( sh, alpha ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha ); + + } + + return this; + + } + + equals( sh ) { + + for ( let i = 0; i < 9; i ++ ) { + + if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) { + + return false; + + } + + } + + return true; + + } + + copy( sh ) { + + return this.set( sh.coefficients ); + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + fromArray( array, offset = 0 ) { + + const coefficients = this.coefficients; + + for ( let i = 0; i < 9; i ++ ) { + + coefficients[ i ].fromArray( array, offset + ( i * 3 ) ); + + } + + return this; + + } + + toArray( array = [], offset = 0 ) { + + const coefficients = this.coefficients; + + for ( let i = 0; i < 9; i ++ ) { + + coefficients[ i ].toArray( array, offset + ( i * 3 ) ); + + } + + return array; + + } + + // evaluate the basis functions + // shBasis is an Array[ 9 ] + static getBasisAt( normal, shBasis ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + // band 0 + shBasis[ 0 ] = 0.282095; + + // band 1 + shBasis[ 1 ] = 0.488603 * y; + shBasis[ 2 ] = 0.488603 * z; + shBasis[ 3 ] = 0.488603 * x; + + // band 2 + shBasis[ 4 ] = 1.092548 * x * y; + shBasis[ 5 ] = 1.092548 * y * z; + shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 ); + shBasis[ 7 ] = 1.092548 * x * z; + shBasis[ 8 ] = 0.546274 * ( x * x - y * y ); + + } + + } + + function LightProbe( sh, intensity ) { + + Light.call( this, undefined, intensity ); + + this.type = 'LightProbe'; + + this.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3(); + + } + + LightProbe.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: LightProbe, + + isLightProbe: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.sh.copy( source.sh ); + + return this; + + }, + + fromJSON: function ( json ) { + + this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); + this.sh.fromArray( json.sh ); + + return this; + + }, + + toJSON: function ( meta ) { + + const data = Light.prototype.toJSON.call( this, meta ); + + data.object.sh = this.sh.toArray(); + + return data; + + } + + } ); + + function MaterialLoader( manager ) { + + Loader.call( this, manager ); + + this.textures = {}; + + } + + MaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: MaterialLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + const textures = this.textures; + + function getTexture( name ) { + + if ( textures[ name ] === undefined ) { + + console.warn( 'THREE.MaterialLoader: Undefined texture', name ); + + } + + return textures[ name ]; + + } + + const material = new Materials[ json.type ](); + + if ( json.uuid !== undefined ) material.uuid = json.uuid; + if ( json.name !== undefined ) material.name = json.name; + if ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color ); + if ( json.roughness !== undefined ) material.roughness = json.roughness; + if ( json.metalness !== undefined ) material.metalness = json.metalness; + if ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen ); + if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive ); + if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular ); + if ( json.shininess !== undefined ) material.shininess = json.shininess; + if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat; + if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness; + if ( json.fog !== undefined ) material.fog = json.fog; + if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; + if ( json.blending !== undefined ) material.blending = json.blending; + if ( json.combine !== undefined ) material.combine = json.combine; + if ( json.side !== undefined ) material.side = json.side; + if ( json.opacity !== undefined ) material.opacity = json.opacity; + if ( json.transparent !== undefined ) material.transparent = json.transparent; + if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; + if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; + if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; + if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; + + if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite; + if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask; + if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc; + if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef; + if ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask; + if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail; + if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail; + if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass; + + if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; + if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; + if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; + if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; + + if ( json.rotation !== undefined ) material.rotation = json.rotation; + + if ( json.linewidth !== 1 ) material.linewidth = json.linewidth; + if ( json.dashSize !== undefined ) material.dashSize = json.dashSize; + if ( json.gapSize !== undefined ) material.gapSize = json.gapSize; + if ( json.scale !== undefined ) material.scale = json.scale; + + if ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset; + if ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor; + if ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits; + + if ( json.skinning !== undefined ) material.skinning = json.skinning; + if ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets; + if ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals; + if ( json.dithering !== undefined ) material.dithering = json.dithering; + + if ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents; + + if ( json.visible !== undefined ) material.visible = json.visible; + + if ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped; + + if ( json.userData !== undefined ) material.userData = json.userData; + + if ( json.vertexColors !== undefined ) { + + if ( typeof json.vertexColors === 'number' ) { + + material.vertexColors = ( json.vertexColors > 0 ) ? true : false; + + } else { + + material.vertexColors = json.vertexColors; + + } + + } + + // Shader Material + + if ( json.uniforms !== undefined ) { + + for ( const name in json.uniforms ) { + + const uniform = json.uniforms[ name ]; + + material.uniforms[ name ] = {}; + + switch ( uniform.type ) { + + case 't': + material.uniforms[ name ].value = getTexture( uniform.value ); + break; + + case 'c': + material.uniforms[ name ].value = new Color().setHex( uniform.value ); + break; + + case 'v2': + material.uniforms[ name ].value = new Vector2().fromArray( uniform.value ); + break; + + case 'v3': + material.uniforms[ name ].value = new Vector3().fromArray( uniform.value ); + break; + + case 'v4': + material.uniforms[ name ].value = new Vector4().fromArray( uniform.value ); + break; + + case 'm3': + material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value ); + break; + + case 'm4': + material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value ); + break; + + default: + material.uniforms[ name ].value = uniform.value; + + } + + } + + } + + if ( json.defines !== undefined ) material.defines = json.defines; + if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; + if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; + + if ( json.extensions !== undefined ) { + + for ( const key in json.extensions ) { + + material.extensions[ key ] = json.extensions[ key ]; + + } + + } + + // Deprecated + + if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading + + // for PointsMaterial + + if ( json.size !== undefined ) material.size = json.size; + if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; + + // maps + + if ( json.map !== undefined ) material.map = getTexture( json.map ); + if ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap ); + + if ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap ); + + if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); + if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; + + if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); + if ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType; + if ( json.normalScale !== undefined ) { + + let normalScale = json.normalScale; + + if ( Array.isArray( normalScale ) === false ) { + + // Blender exporter used to export a scalar. See #7459 + + normalScale = [ normalScale, normalScale ]; + + } + + material.normalScale = new Vector2().fromArray( normalScale ); + + } + + if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); + if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; + if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; + + if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); + if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); + + if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); + if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; + + if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); + + if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); + if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity; + + if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; + if ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio; + + if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); + if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; + + if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); + if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; + + if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); + + if ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap ); + if ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap ); + if ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap ); + if ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale ); + + if ( json.transmission !== undefined ) material.transmission = json.transmission; + if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap ); + + return material; + + }, + + setTextures: function ( value ) { + + this.textures = value; + return this; + + } + + } ); + + const LoaderUtils = { + + decodeText: function ( array ) { + + if ( typeof TextDecoder !== 'undefined' ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + let s = ''; + + for ( let i = 0, il = array.length; i < il; i ++ ) { + + // Implicitly assumes little-endian. + s += String.fromCharCode( array[ i ] ); + + } + + try { + + // merges multi-byte utf-8 characters. + + return decodeURIComponent( escape( s ) ); + + } catch ( e ) { // see #16358 + + return s; + + } + + }, + + extractUrlBase: function ( url ) { + + const index = url.lastIndexOf( '/' ); + + if ( index === - 1 ) return './'; + + return url.substr( 0, index + 1 ); + + } + + }; + + function InstancedBufferGeometry() { + + BufferGeometry.call( this ); + + this.type = 'InstancedBufferGeometry'; + this.instanceCount = Infinity; + + } + + InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { + + constructor: InstancedBufferGeometry, + + isInstancedBufferGeometry: true, + + copy: function ( source ) { + + BufferGeometry.prototype.copy.call( this, source ); + + this.instanceCount = source.instanceCount; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + data.instanceCount = this.instanceCount; + + data.isInstancedBufferGeometry = true; + + return data; + + } + + } ); + + function InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) { + + if ( typeof ( normalized ) === 'number' ) { + + meshPerAttribute = normalized; + + normalized = false; + + console.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' ); + + } + + BufferAttribute.call( this, array, itemSize, normalized ); + + this.meshPerAttribute = meshPerAttribute || 1; + + } + + InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { + + constructor: InstancedBufferAttribute, + + isInstancedBufferAttribute: true, + + copy: function ( source ) { + + BufferAttribute.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + }, + + toJSON: function () { + + const data = BufferAttribute.prototype.toJSON.call( this ); + + data.meshPerAttribute = this.meshPerAttribute; + + data.isInstancedBufferAttribute = true; + + return data; + + } + + } ); + + function BufferGeometryLoader( manager ) { + + Loader.call( this, manager ); + + } + + BufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: BufferGeometryLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + const interleavedBufferMap = {}; + const arrayBufferMap = {}; + + function getInterleavedBuffer( json, uuid ) { + + if ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ]; + + const interleavedBuffers = json.interleavedBuffers; + const interleavedBuffer = interleavedBuffers[ uuid ]; + + const buffer = getArrayBuffer( json, interleavedBuffer.buffer ); + + const array = getTypedArray( interleavedBuffer.type, buffer ); + const ib = new InterleavedBuffer( array, interleavedBuffer.stride ); + ib.uuid = interleavedBuffer.uuid; + + interleavedBufferMap[ uuid ] = ib; + + return ib; + + } + + function getArrayBuffer( json, uuid ) { + + if ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ]; + + const arrayBuffers = json.arrayBuffers; + const arrayBuffer = arrayBuffers[ uuid ]; + + const ab = new Uint32Array( arrayBuffer ).buffer; + + arrayBufferMap[ uuid ] = ab; + + return ab; + + } + + const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); + + const index = json.data.index; + + if ( index !== undefined ) { + + const typedArray = getTypedArray( index.type, index.array ); + geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); + + } + + const attributes = json.data.attributes; + + for ( const key in attributes ) { + + const attribute = attributes[ key ]; + let bufferAttribute; + + if ( attribute.isInterleavedBufferAttribute ) { + + const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); + bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); + + } else { + + const typedArray = getTypedArray( attribute.type, attribute.array ); + const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; + bufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized ); + + } + + if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; + geometry.setAttribute( key, bufferAttribute ); + + } + + const morphAttributes = json.data.morphAttributes; + + if ( morphAttributes ) { + + for ( const key in morphAttributes ) { + + const attributeArray = morphAttributes[ key ]; + + const array = []; + + for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { + + const attribute = attributeArray[ i ]; + let bufferAttribute; + + if ( attribute.isInterleavedBufferAttribute ) { + + const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); + bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); + + } else { + + const typedArray = getTypedArray( attribute.type, attribute.array ); + bufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ); + + } + + if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; + array.push( bufferAttribute ); + + } + + geometry.morphAttributes[ key ] = array; + + } + + } + + const morphTargetsRelative = json.data.morphTargetsRelative; + + if ( morphTargetsRelative ) { + + geometry.morphTargetsRelative = true; + + } + + const groups = json.data.groups || json.data.drawcalls || json.data.offsets; + + if ( groups !== undefined ) { + + for ( let i = 0, n = groups.length; i !== n; ++ i ) { + + const group = groups[ i ]; + + geometry.addGroup( group.start, group.count, group.materialIndex ); + + } + + } + + const boundingSphere = json.data.boundingSphere; + + if ( boundingSphere !== undefined ) { + + const center = new Vector3(); + + if ( boundingSphere.center !== undefined ) { + + center.fromArray( boundingSphere.center ); + + } + + geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); + + } + + if ( json.name ) geometry.name = json.name; + if ( json.userData ) geometry.userData = json.userData; + + return geometry; + + } + + } ); + + class ObjectLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path; + this.resourcePath = this.resourcePath || path; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( this.withCredentials ); + loader.load( url, function ( text ) { + + let json = null; + + try { + + json = JSON.parse( text ); + + } catch ( error ) { + + if ( onError !== undefined ) onError( error ); + + console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); + + return; + + } + + const metadata = json.metadata; + + if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { + + console.error( 'THREE.ObjectLoader: Can\'t load ' + url ); + return; + + } + + scope.parse( json, onLoad ); + + }, onProgress, onError ); + + } + + parse( json, onLoad ) { + + const animations = this.parseAnimations( json.animations ); + const shapes = this.parseShapes( json.shapes ); + const geometries = this.parseGeometries( json.geometries, shapes ); + + const images = this.parseImages( json.images, function () { + + if ( onLoad !== undefined ) onLoad( object ); + + } ); + + const textures = this.parseTextures( json.textures, images ); + const materials = this.parseMaterials( json.materials, textures ); + + const object = this.parseObject( json.object, geometries, materials, animations ); + const skeletons = this.parseSkeletons( json.skeletons, object ); + + this.bindSkeletons( object, skeletons ); + + // + + if ( onLoad !== undefined ) { + + let hasImages = false; + + for ( const uuid in images ) { + + if ( images[ uuid ] instanceof HTMLImageElement ) { + + hasImages = true; + break; + + } + + } + + if ( hasImages === false ) onLoad( object ); + + } + + return object; + + } + + parseShapes( json ) { + + const shapes = {}; + + if ( json !== undefined ) { + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const shape = new Shape().fromJSON( json[ i ] ); + + shapes[ shape.uuid ] = shape; + + } + + } + + return shapes; + + } + + parseSkeletons( json, object ) { + + const skeletons = {}; + const bones = {}; + + // generate bone lookup table + + object.traverse( function ( child ) { + + if ( child.isBone ) bones[ child.uuid ] = child; + + } ); + + // create skeletons + + if ( json !== undefined ) { + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const skeleton = new Skeleton().fromJSON( json[ i ], bones ); + + skeletons[ skeleton.uuid ] = skeleton; + + } + + } + + return skeletons; + + } + + parseGeometries( json, shapes ) { + + const geometries = {}; + let geometryShapes; + + if ( json !== undefined ) { + + const bufferGeometryLoader = new BufferGeometryLoader(); + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + let geometry; + const data = json[ i ]; + + switch ( data.type ) { + + case 'PlaneGeometry': + case 'PlaneBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.widthSegments, + data.heightSegments + ); + + break; + + case 'BoxGeometry': + case 'BoxBufferGeometry': + case 'CubeGeometry': // backwards compatible + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.depth, + data.widthSegments, + data.heightSegments, + data.depthSegments + ); + + break; + + case 'CircleGeometry': + case 'CircleBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.segments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'CylinderGeometry': + case 'CylinderBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radiusTop, + data.radiusBottom, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'ConeGeometry': + case 'ConeBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'SphereGeometry': + case 'SphereBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.widthSegments, + data.heightSegments, + data.phiStart, + data.phiLength, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'DodecahedronGeometry': + case 'DodecahedronBufferGeometry': + case 'IcosahedronGeometry': + case 'IcosahedronBufferGeometry': + case 'OctahedronGeometry': + case 'OctahedronBufferGeometry': + case 'TetrahedronGeometry': + case 'TetrahedronBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.detail + ); + + break; + + case 'RingGeometry': + case 'RingBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.innerRadius, + data.outerRadius, + data.thetaSegments, + data.phiSegments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'TorusGeometry': + case 'TorusBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.radialSegments, + data.tubularSegments, + data.arc + ); + + break; + + case 'TorusKnotGeometry': + case 'TorusKnotBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.tubularSegments, + data.radialSegments, + data.p, + data.q + ); + + break; + + case 'TubeGeometry': + case 'TubeBufferGeometry': + + // This only works for built-in curves (e.g. CatmullRomCurve3). + // User defined curves or instances of CurvePath will not be deserialized. + geometry = new Geometries[ data.type ]( + new Curves[ data.path.type ]().fromJSON( data.path ), + data.tubularSegments, + data.radius, + data.radialSegments, + data.closed + ); + + break; + + case 'LatheGeometry': + case 'LatheBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.points, + data.segments, + data.phiStart, + data.phiLength + ); + + break; + + case 'PolyhedronGeometry': + case 'PolyhedronBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.vertices, + data.indices, + data.radius, + data.details + ); + + break; + + case 'ShapeGeometry': + case 'ShapeBufferGeometry': + + geometryShapes = []; + + for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { + + const shape = shapes[ data.shapes[ j ] ]; + + geometryShapes.push( shape ); + + } + + geometry = new Geometries[ data.type ]( + geometryShapes, + data.curveSegments + ); + + break; + + + case 'ExtrudeGeometry': + case 'ExtrudeBufferGeometry': + + geometryShapes = []; + + for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { + + const shape = shapes[ data.shapes[ j ] ]; + + geometryShapes.push( shape ); + + } + + const extrudePath = data.options.extrudePath; + + if ( extrudePath !== undefined ) { + + data.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath ); + + } + + geometry = new Geometries[ data.type ]( + geometryShapes, + data.options + ); + + break; + + case 'BufferGeometry': + case 'InstancedBufferGeometry': + + geometry = bufferGeometryLoader.parse( data ); + + break; + + case 'Geometry': + + console.error( 'THREE.ObjectLoader: Loading "Geometry" is not supported anymore.' ); + + break; + + default: + + console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); + + continue; + + } + + geometry.uuid = data.uuid; + + if ( data.name !== undefined ) geometry.name = data.name; + if ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData; + + geometries[ data.uuid ] = geometry; + + } + + } + + return geometries; + + } + + parseMaterials( json, textures ) { + + const cache = {}; // MultiMaterial + const materials = {}; + + if ( json !== undefined ) { + + const loader = new MaterialLoader(); + loader.setTextures( textures ); + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const data = json[ i ]; + + if ( data.type === 'MultiMaterial' ) { + + // Deprecated + + const array = []; + + for ( let j = 0; j < data.materials.length; j ++ ) { + + const material = data.materials[ j ]; + + if ( cache[ material.uuid ] === undefined ) { + + cache[ material.uuid ] = loader.parse( material ); + + } + + array.push( cache[ material.uuid ] ); + + } + + materials[ data.uuid ] = array; + + } else { + + if ( cache[ data.uuid ] === undefined ) { + + cache[ data.uuid ] = loader.parse( data ); + + } + + materials[ data.uuid ] = cache[ data.uuid ]; + + } + + } + + } + + return materials; + + } + + parseAnimations( json ) { + + const animations = {}; + + if ( json !== undefined ) { + + for ( let i = 0; i < json.length; i ++ ) { + + const data = json[ i ]; + + const clip = AnimationClip.parse( data ); + + animations[ clip.uuid ] = clip; + + } + + } + + return animations; + + } + + parseImages( json, onLoad ) { + + const scope = this; + const images = {}; + + let loader; + + function loadImage( url ) { + + scope.manager.itemStart( url ); + + return loader.load( url, function () { + + scope.manager.itemEnd( url ); + + }, undefined, function () { + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } ); + + } + + function deserializeImage( image ) { + + if ( typeof image === 'string' ) { + + const url = image; + + const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url; + + return loadImage( path ); + + } else { + + if ( image.data ) { + + return { + data: getTypedArray( image.type, image.data ), + width: image.width, + height: image.height + }; + + } else { + + return null; + + } + + } + + } + + if ( json !== undefined && json.length > 0 ) { + + const manager = new LoadingManager( onLoad ); + + loader = new ImageLoader( manager ); + loader.setCrossOrigin( this.crossOrigin ); + + for ( let i = 0, il = json.length; i < il; i ++ ) { + + const image = json[ i ]; + const url = image.url; + + if ( Array.isArray( url ) ) { + + // load array of images e.g CubeTexture + + images[ image.uuid ] = []; + + for ( let j = 0, jl = url.length; j < jl; j ++ ) { + + const currentUrl = url[ j ]; + + const deserializedImage = deserializeImage( currentUrl ); + + if ( deserializedImage !== null ) { + + if ( deserializedImage instanceof HTMLImageElement ) { + + images[ image.uuid ].push( deserializedImage ); + + } else { + + // special case: handle array of data textures for cube textures + + images[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) ); + + } + + } + + } + + } else { + + // load single image + + const deserializedImage = deserializeImage( image.url ); + + if ( deserializedImage !== null ) { + + images[ image.uuid ] = deserializedImage; + + } + + } + + } + + } + + return images; + + } + + parseTextures( json, images ) { + + function parseConstant( value, type ) { + + if ( typeof value === 'number' ) return value; + + console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); + + return type[ value ]; + + } + + const textures = {}; + + if ( json !== undefined ) { + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const data = json[ i ]; + + if ( data.image === undefined ) { + + console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); + + } + + if ( images[ data.image ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); + + } + + let texture; + const image = images[ data.image ]; + + if ( Array.isArray( image ) ) { + + texture = new CubeTexture( image ); + + if ( image.length === 6 ) texture.needsUpdate = true; + + } else { + + if ( image && image.data ) { + + texture = new DataTexture( image.data, image.width, image.height ); + + } else { + + texture = new Texture( image ); + + } + + if ( image ) texture.needsUpdate = true; // textures can have undefined image data + + } + + texture.uuid = data.uuid; + + if ( data.name !== undefined ) texture.name = data.name; + + if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); + + if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); + if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); + if ( data.center !== undefined ) texture.center.fromArray( data.center ); + if ( data.rotation !== undefined ) texture.rotation = data.rotation; + + if ( data.wrap !== undefined ) { + + texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); + texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); + + } + + if ( data.format !== undefined ) texture.format = data.format; + if ( data.type !== undefined ) texture.type = data.type; + if ( data.encoding !== undefined ) texture.encoding = data.encoding; + + if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); + if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); + if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; + + if ( data.flipY !== undefined ) texture.flipY = data.flipY; + + if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha; + if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment; + + textures[ data.uuid ] = texture; + + } + + } + + return textures; + + } + + parseObject( data, geometries, materials, animations ) { + + let object; + + function getGeometry( name ) { + + if ( geometries[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); + + } + + return geometries[ name ]; + + } + + function getMaterial( name ) { + + if ( name === undefined ) return undefined; + + if ( Array.isArray( name ) ) { + + const array = []; + + for ( let i = 0, l = name.length; i < l; i ++ ) { + + const uuid = name[ i ]; + + if ( materials[ uuid ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); + + } + + array.push( materials[ uuid ] ); + + } + + return array; + + } + + if ( materials[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', name ); + + } + + return materials[ name ]; + + } + + let geometry, material; + + switch ( data.type ) { + + case 'Scene': + + object = new Scene(); + + if ( data.background !== undefined ) { + + if ( Number.isInteger( data.background ) ) { + + object.background = new Color( data.background ); + + } + + } + + if ( data.fog !== undefined ) { + + if ( data.fog.type === 'Fog' ) { + + object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); + + } else if ( data.fog.type === 'FogExp2' ) { + + object.fog = new FogExp2( data.fog.color, data.fog.density ); + + } + + } + + break; + + case 'PerspectiveCamera': + + object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); + + if ( data.focus !== undefined ) object.focus = data.focus; + if ( data.zoom !== undefined ) object.zoom = data.zoom; + if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; + if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; + if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); + + break; + + case 'OrthographicCamera': + + object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); + + if ( data.zoom !== undefined ) object.zoom = data.zoom; + if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); + + break; + + case 'AmbientLight': + + object = new AmbientLight( data.color, data.intensity ); + + break; + + case 'DirectionalLight': + + object = new DirectionalLight( data.color, data.intensity ); + + break; + + case 'PointLight': + + object = new PointLight( data.color, data.intensity, data.distance, data.decay ); + + break; + + case 'RectAreaLight': + + object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); + + break; + + case 'SpotLight': + + object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); + + break; + + case 'HemisphereLight': + + object = new HemisphereLight( data.color, data.groundColor, data.intensity ); + + break; + + case 'LightProbe': + + object = new LightProbe().fromJSON( data ); + + break; + + case 'SkinnedMesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + + object = new SkinnedMesh( geometry, material ); + + if ( data.bindMode !== undefined ) object.bindMode = data.bindMode; + if ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix ); + if ( data.skeleton !== undefined ) object.skeleton = data.skeleton; + + break; + + case 'Mesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + + object = new Mesh( geometry, material ); + + break; + + case 'InstancedMesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + const count = data.count; + const instanceMatrix = data.instanceMatrix; + + object = new InstancedMesh( geometry, material, count ); + object.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 ); + + break; + + case 'LOD': + + object = new LOD(); + + break; + + case 'Line': + + object = new Line( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineLoop': + + object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineSegments': + + object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'PointCloud': + case 'Points': + + object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'Sprite': + + object = new Sprite( getMaterial( data.material ) ); + + break; + + case 'Group': + + object = new Group(); + + break; + + case 'Bone': + + object = new Bone(); + + break; + + default: + + object = new Object3D(); + + } + + object.uuid = data.uuid; + + if ( data.name !== undefined ) object.name = data.name; + + if ( data.matrix !== undefined ) { + + object.matrix.fromArray( data.matrix ); + + if ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate; + if ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale ); + + } else { + + if ( data.position !== undefined ) object.position.fromArray( data.position ); + if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); + if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); + if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); + + } + + if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; + if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; + + if ( data.shadow ) { + + if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; + if ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias; + if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; + if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); + if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); + + } + + if ( data.visible !== undefined ) object.visible = data.visible; + if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled; + if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder; + if ( data.userData !== undefined ) object.userData = data.userData; + if ( data.layers !== undefined ) object.layers.mask = data.layers; + + if ( data.children !== undefined ) { + + const children = data.children; + + for ( let i = 0; i < children.length; i ++ ) { + + object.add( this.parseObject( children[ i ], geometries, materials, animations ) ); + + } + + } + + if ( data.animations !== undefined ) { + + const objectAnimations = data.animations; + + for ( let i = 0; i < objectAnimations.length; i ++ ) { + + const uuid = objectAnimations[ i ]; + + object.animations.push( animations[ uuid ] ); + + } + + } + + if ( data.type === 'LOD' ) { + + if ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate; + + const levels = data.levels; + + for ( let l = 0; l < levels.length; l ++ ) { + + const level = levels[ l ]; + const child = object.getObjectByProperty( 'uuid', level.object ); + + if ( child !== undefined ) { + + object.addLevel( child, level.distance ); + + } + + } + + } + + return object; + + } + + bindSkeletons( object, skeletons ) { + + if ( Object.keys( skeletons ).length === 0 ) return; + + object.traverse( function ( child ) { + + if ( child.isSkinnedMesh === true && child.skeleton !== undefined ) { + + const skeleton = skeletons[ child.skeleton ]; + + if ( skeleton === undefined ) { + + console.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton ); + + } else { + + child.bind( skeleton, child.bindMatrix ); + + } + + } + + } ); + + } + + /* DEPRECATED */ + + setTexturePath( value ) { + + console.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' ); + return this.setResourcePath( value ); + + } + + } + + const TEXTURE_MAPPING = { + UVMapping: UVMapping, + CubeReflectionMapping: CubeReflectionMapping, + CubeRefractionMapping: CubeRefractionMapping, + EquirectangularReflectionMapping: EquirectangularReflectionMapping, + EquirectangularRefractionMapping: EquirectangularRefractionMapping, + CubeUVReflectionMapping: CubeUVReflectionMapping, + CubeUVRefractionMapping: CubeUVRefractionMapping + }; + + const TEXTURE_WRAPPING = { + RepeatWrapping: RepeatWrapping, + ClampToEdgeWrapping: ClampToEdgeWrapping, + MirroredRepeatWrapping: MirroredRepeatWrapping + }; + + const TEXTURE_FILTER = { + NearestFilter: NearestFilter, + NearestMipmapNearestFilter: NearestMipmapNearestFilter, + NearestMipmapLinearFilter: NearestMipmapLinearFilter, + LinearFilter: LinearFilter, + LinearMipmapNearestFilter: LinearMipmapNearestFilter, + LinearMipmapLinearFilter: LinearMipmapLinearFilter + }; + + function ImageBitmapLoader( manager ) { + + if ( typeof createImageBitmap === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); + + } + + if ( typeof fetch === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); + + } + + Loader.call( this, manager ); + + this.options = { premultiplyAlpha: 'none' }; + + } + + ImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: ImageBitmapLoader, + + isImageBitmapLoader: true, + + setOptions: function setOptions( options ) { + + this.options = options; + + return this; + + }, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + const fetchOptions = {}; + fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include'; + + fetch( url, fetchOptions ).then( function ( res ) { + + return res.blob(); + + } ).then( function ( blob ) { + + return createImageBitmap( blob, scope.options ); + + } ).then( function ( imageBitmap ) { + + Cache.add( url, imageBitmap ); + + if ( onLoad ) onLoad( imageBitmap ); + + scope.manager.itemEnd( url ); + + } ).catch( function ( e ) { + + if ( onError ) onError( e ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } ); + + scope.manager.itemStart( url ); + + } + + } ); + + function ShapePath() { + + this.type = 'ShapePath'; + + this.color = new Color(); + + this.subPaths = []; + this.currentPath = null; + + } + + Object.assign( ShapePath.prototype, { + + moveTo: function ( x, y ) { + + this.currentPath = new Path(); + this.subPaths.push( this.currentPath ); + this.currentPath.moveTo( x, y ); + + return this; + + }, + + lineTo: function ( x, y ) { + + this.currentPath.lineTo( x, y ); + + return this; + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); + + return this; + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); + + return this; + + }, + + splineThru: function ( pts ) { + + this.currentPath.splineThru( pts ); + + return this; + + }, + + toShapes: function ( isCCW, noHoles ) { + + function toShapesNoHoles( inSubpaths ) { + + const shapes = []; + + for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) { + + const tmpPath = inSubpaths[ i ]; + + const tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + + shapes.push( tmpShape ); + + } + + return shapes; + + } + + function isPointInsidePolygon( inPt, inPolygon ) { + + const polyLen = inPolygon.length; + + // inPt on polygon contour => immediate success or + // toggling of inside/outside at every single! intersection point of an edge + // with the horizontal line through inPt, left of inPt + // not counting lowerY endpoints of edges and whole edges on that line + let inside = false; + for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { + + let edgeLowPt = inPolygon[ p ]; + let edgeHighPt = inPolygon[ q ]; + + let edgeDx = edgeHighPt.x - edgeLowPt.x; + let edgeDy = edgeHighPt.y - edgeLowPt.y; + + if ( Math.abs( edgeDy ) > Number.EPSILON ) { + + // not parallel + if ( edgeDy < 0 ) { + + edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; + edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; + + } + + if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; + + if ( inPt.y === edgeLowPt.y ) { + + if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? + // continue; // no intersection or edgeLowPt => doesn't count !!! + + } else { + + const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); + if ( perpEdge === 0 ) return true; // inPt is on contour ? + if ( perpEdge < 0 ) continue; + inside = ! inside; // true intersection left of inPt + + } + + } else { + + // parallel or collinear + if ( inPt.y !== edgeLowPt.y ) continue; // parallel + // edge lies on the same horizontal line as inPt + if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || + ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! + // continue; + + } + + } + + return inside; + + } + + const isClockWise = ShapeUtils.isClockWise; + + const subPaths = this.subPaths; + if ( subPaths.length === 0 ) return []; + + if ( noHoles === true ) return toShapesNoHoles( subPaths ); + + + let solid, tmpPath, tmpShape; + const shapes = []; + + if ( subPaths.length === 1 ) { + + tmpPath = subPaths[ 0 ]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push( tmpShape ); + return shapes; + + } + + let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); + holesFirst = isCCW ? ! holesFirst : holesFirst; + + // console.log("Holes first", holesFirst); + + const betterShapeHoles = []; + const newShapes = []; + let newShapeHoles = []; + let mainIdx = 0; + let tmpPoints; + + newShapes[ mainIdx ] = undefined; + newShapeHoles[ mainIdx ] = []; + + for ( let i = 0, l = subPaths.length; i < l; i ++ ) { + + tmpPath = subPaths[ i ]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise( tmpPoints ); + solid = isCCW ? ! solid : solid; + + if ( solid ) { + + if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; + + newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; + newShapes[ mainIdx ].s.curves = tmpPath.curves; + + if ( holesFirst ) mainIdx ++; + newShapeHoles[ mainIdx ] = []; + + //console.log('cw', i); + + } else { + + newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); + + //console.log('ccw', i); + + } + + } + + // only Holes? -> probably all Shapes with wrong orientation + if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); + + + if ( newShapes.length > 1 ) { + + let ambiguous = false; + const toChange = []; + + for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + betterShapeHoles[ sIdx ] = []; + + } + + for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + const sho = newShapeHoles[ sIdx ]; + + for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) { + + const ho = sho[ hIdx ]; + let hole_unassigned = true; + + for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { + + if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { + + if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); + if ( hole_unassigned ) { + + hole_unassigned = false; + betterShapeHoles[ s2Idx ].push( ho ); + + } else { + + ambiguous = true; + + } + + } + + } + + if ( hole_unassigned ) { + + betterShapeHoles[ sIdx ].push( ho ); + + } + + } + + } + // console.log("ambiguous: ", ambiguous); + + if ( toChange.length > 0 ) { + + // console.log("to change: ", toChange); + if ( ! ambiguous ) newShapeHoles = betterShapeHoles; + + } + + } + + let tmpHoles; + + for ( let i = 0, il = newShapes.length; i < il; i ++ ) { + + tmpShape = newShapes[ i ].s; + shapes.push( tmpShape ); + tmpHoles = newShapeHoles[ i ]; + + for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) { + + tmpShape.holes.push( tmpHoles[ j ].h ); + + } + + } + + //console.log("shape", shapes); + + return shapes; + + } + + } ); + + function Font( data ) { + + this.type = 'Font'; + + this.data = data; + + } + + Object.assign( Font.prototype, { + + isFont: true, + + generateShapes: function ( text, size = 100 ) { + + const shapes = []; + const paths = createPaths( text, size, this.data ); + + for ( let p = 0, pl = paths.length; p < pl; p ++ ) { + + Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); + + } + + return shapes; + + } + + } ); + + function createPaths( text, size, data ) { + + const chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988 + const scale = size / data.resolution; + const line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; + + const paths = []; + + let offsetX = 0, offsetY = 0; + + for ( let i = 0; i < chars.length; i ++ ) { + + const char = chars[ i ]; + + if ( char === '\n' ) { + + offsetX = 0; + offsetY -= line_height; + + } else { + + const ret = createPath( char, scale, offsetX, offsetY, data ); + offsetX += ret.offsetX; + paths.push( ret.path ); + + } + + } + + return paths; + + } + + function createPath( char, scale, offsetX, offsetY, data ) { + + const glyph = data.glyphs[ char ] || data.glyphs[ '?' ]; + + if ( ! glyph ) { + + console.error( 'THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + '.' ); + + return; + + } + + const path = new ShapePath(); + + let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; + + if ( glyph.o ) { + + const outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); + + for ( let i = 0, l = outline.length; i < l; ) { + + const action = outline[ i ++ ]; + + switch ( action ) { + + case 'm': // moveTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.moveTo( x, y ); + + break; + + case 'l': // lineTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.lineTo( x, y ); + + break; + + case 'q': // quadraticCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + + path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); + + break; + + case 'b': // bezierCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + cpx2 = outline[ i ++ ] * scale + offsetX; + cpy2 = outline[ i ++ ] * scale + offsetY; + + path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); + + break; + + } + + } + + } + + return { offsetX: glyph.ha * scale, path: path }; + + } + + function FontLoader( manager ) { + + Loader.call( this, manager ); + + } + + FontLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: FontLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + let json; + + try { + + json = JSON.parse( text ); + + } catch ( e ) { + + console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); + json = JSON.parse( text.substring( 65, text.length - 2 ) ); + + } + + const font = scope.parse( json ); + + if ( onLoad ) onLoad( font ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + return new Font( json ); + + } + + } ); + + let _context; + + const AudioContext = { + + getContext: function () { + + if ( _context === undefined ) { + + _context = new ( window.AudioContext || window.webkitAudioContext )(); + + } + + return _context; + + }, + + setContext: function ( value ) { + + _context = value; + + } + + }; + + function AudioLoader( manager ) { + + Loader.call( this, manager ); + + } + + AudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: AudioLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( buffer ) { + + try { + + // Create a copy of the buffer. The `decodeAudioData` method + // detaches the buffer when complete, preventing reuse. + const bufferCopy = buffer.slice( 0 ); + + const context = AudioContext.getContext(); + context.decodeAudioData( bufferCopy, function ( audioBuffer ) { + + onLoad( audioBuffer ); + + } ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + } + + } ); + + function HemisphereLightProbe( skyColor, groundColor, intensity ) { + + LightProbe.call( this, undefined, intensity ); + + const color1 = new Color().set( skyColor ); + const color2 = new Color().set( groundColor ); + + const sky = new Vector3( color1.r, color1.g, color1.b ); + const ground = new Vector3( color2.r, color2.g, color2.b ); + + // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); + const c0 = Math.sqrt( Math.PI ); + const c1 = c0 * Math.sqrt( 0.75 ); + + this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 ); + this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 ); + + } + + HemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { + + constructor: HemisphereLightProbe, + + isHemisphereLightProbe: true, + + copy: function ( source ) { // modifying colors not currently supported + + LightProbe.prototype.copy.call( this, source ); + + return this; + + }, + + toJSON: function ( meta ) { + + const data = LightProbe.prototype.toJSON.call( this, meta ); + + // data.sh = this.sh.toArray(); // todo + + return data; + + } + + } ); + + function AmbientLightProbe( color, intensity ) { + + LightProbe.call( this, undefined, intensity ); + + const color1 = new Color().set( color ); + + // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); + this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) ); + + } + + AmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { + + constructor: AmbientLightProbe, + + isAmbientLightProbe: true, + + copy: function ( source ) { // modifying color not currently supported + + LightProbe.prototype.copy.call( this, source ); + + return this; + + }, + + toJSON: function ( meta ) { + + const data = LightProbe.prototype.toJSON.call( this, meta ); + + // data.sh = this.sh.toArray(); // todo + + return data; + + } + + } ); + + const _eyeRight = new Matrix4(); + const _eyeLeft = new Matrix4(); + + function StereoCamera() { + + this.type = 'StereoCamera'; + + this.aspect = 1; + + this.eyeSep = 0.064; + + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable( 1 ); + this.cameraL.matrixAutoUpdate = false; + + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable( 2 ); + this.cameraR.matrixAutoUpdate = false; + + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + }; + + } + + Object.assign( StereoCamera.prototype, { + + update: function ( camera ) { + + const cache = this._cache; + + const 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; + + if ( 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; + + // Off-axis stereoscopic effect based on + // http://paulbourke.net/stereographics/stereorender/ + + const projectionMatrix = camera.projectionMatrix.clone(); + const eyeSepHalf = cache.eyeSep / 2; + const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; + const ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom; + let xmin, xmax; + + // translate xOffset + + _eyeLeft.elements[ 12 ] = - eyeSepHalf; + _eyeRight.elements[ 12 ] = eyeSepHalf; + + // for left eye + + xmin = - ymax * cache.aspect + eyeSepOnProjection; + xmax = ymax * cache.aspect + eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraL.projectionMatrix.copy( projectionMatrix ); + + // for right eye + + xmin = - ymax * cache.aspect - eyeSepOnProjection; + xmax = ymax * cache.aspect - eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraR.projectionMatrix.copy( projectionMatrix ); + + } + + this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft ); + this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight ); + + } + + } ); + + class Clock { + + constructor( autoStart ) { + + this.autoStart = ( autoStart !== undefined ) ? autoStart : true; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + + } + + start() { + + this.startTime = now(); + + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + + } + + stop() { + + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + + } + + getElapsedTime() { + + this.getDelta(); + return this.elapsedTime; + + } + + getDelta() { + + let diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + return 0; + + } + + if ( this.running ) { + + const newTime = now(); + + diff = ( newTime - this.oldTime ) / 1000; + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + + } + + } + + function now() { + + return ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 + + } + + const _position$2 = /*@__PURE__*/ new Vector3(); + const _quaternion$3 = /*@__PURE__*/ new Quaternion(); + const _scale$1 = /*@__PURE__*/ new Vector3(); + const _orientation = /*@__PURE__*/ new Vector3(); + + class AudioListener extends Object3D { + + constructor() { + + super(); + + this.type = 'AudioListener'; + + this.context = AudioContext.getContext(); + + this.gain = this.context.createGain(); + this.gain.connect( this.context.destination ); + + this.filter = null; + + this.timeDelta = 0; + + // private + + this._clock = new Clock(); + + } + + getInput() { + + return this.gain; + + } + + removeFilter() { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + this.gain.connect( this.context.destination ); + this.filter = null; + + } + + return this; + + } + + getFilter() { + + return this.filter; + + } + + setFilter( value ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + + } else { + + this.gain.disconnect( this.context.destination ); + + } + + this.filter = value; + this.gain.connect( this.filter ); + this.filter.connect( this.context.destination ); + + return this; + + } + + getMasterVolume() { + + return this.gain.gain.value; + + } + + setMasterVolume( value ) { + + this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); + + return this; + + } + + updateMatrixWorld( force ) { + + super.updateMatrixWorld( force ); + + const listener = this.context.listener; + const up = this.up; + + this.timeDelta = this._clock.getDelta(); + + this.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 ); + + _orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 ); + + if ( listener.positionX ) { + + // code path for Chrome (see #14393) + + const endTime = this.context.currentTime + this.timeDelta; + + listener.positionX.linearRampToValueAtTime( _position$2.x, endTime ); + listener.positionY.linearRampToValueAtTime( _position$2.y, endTime ); + listener.positionZ.linearRampToValueAtTime( _position$2.z, endTime ); + listener.forwardX.linearRampToValueAtTime( _orientation.x, endTime ); + listener.forwardY.linearRampToValueAtTime( _orientation.y, endTime ); + listener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime ); + listener.upX.linearRampToValueAtTime( up.x, endTime ); + listener.upY.linearRampToValueAtTime( up.y, endTime ); + listener.upZ.linearRampToValueAtTime( up.z, endTime ); + + } else { + + listener.setPosition( _position$2.x, _position$2.y, _position$2.z ); + listener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z ); + + } + + } + + } + + class Audio extends Object3D { + + constructor( listener ) { + + super(); + + this.type = 'Audio'; + + this.listener = listener; + this.context = listener.context; + + this.gain = this.context.createGain(); + this.gain.connect( listener.getInput() ); + + this.autoplay = false; + + this.buffer = null; + this.detune = 0; + this.loop = false; + this.loopStart = 0; + this.loopEnd = 0; + this.offset = 0; + this.duration = undefined; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.source = null; + this.sourceType = 'empty'; + + this._startedAt = 0; + this._progress = 0; + this._connected = false; + + this.filters = []; + + } + + getOutput() { + + return this.gain; + + } + + setNodeSource( audioNode ) { + + this.hasPlaybackControl = false; + this.sourceType = 'audioNode'; + this.source = audioNode; + this.connect(); + + return this; + + } + + setMediaElementSource( mediaElement ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaNode'; + this.source = this.context.createMediaElementSource( mediaElement ); + this.connect(); + + return this; + + } + + setMediaStreamSource( mediaStream ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaStreamNode'; + this.source = this.context.createMediaStreamSource( mediaStream ); + this.connect(); + + return this; + + } + + setBuffer( audioBuffer ) { + + this.buffer = audioBuffer; + this.sourceType = 'buffer'; + + if ( this.autoplay ) this.play(); + + return this; + + } + + play( delay = 0 ) { + + if ( this.isPlaying === true ) { + + console.warn( 'THREE.Audio: Audio is already playing.' ); + return; + + } + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._startedAt = this.context.currentTime + delay; + + const source = this.context.createBufferSource(); + source.buffer = this.buffer; + source.loop = this.loop; + source.loopStart = this.loopStart; + source.loopEnd = this.loopEnd; + source.onended = this.onEnded.bind( this ); + source.start( this._startedAt, this._progress + this.offset, this.duration ); + + this.isPlaying = true; + + this.source = source; + + this.setDetune( this.detune ); + this.setPlaybackRate( this.playbackRate ); + + return this.connect(); + + } + + pause() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + if ( this.isPlaying === true ) { + + // update current progress + + this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate; + + if ( this.loop === true ) { + + // ensure _progress does not exceed duration with looped audios + + this._progress = this._progress % ( this.duration || this.buffer.duration ); + + } + + this.source.stop(); + this.source.onended = null; + + this.isPlaying = false; + + } + + return this; + + } + + stop() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._progress = 0; + + this.source.stop(); + this.source.onended = null; + this.isPlaying = false; + + return this; + + } + + connect() { + + if ( this.filters.length > 0 ) { + + this.source.connect( this.filters[ 0 ] ); + + for ( let i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].connect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); + + } else { + + this.source.connect( this.getOutput() ); + + } + + this._connected = true; + + return this; + + } + + disconnect() { + + if ( this.filters.length > 0 ) { + + this.source.disconnect( this.filters[ 0 ] ); + + for ( let i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].disconnect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); + + } else { + + this.source.disconnect( this.getOutput() ); + + } + + this._connected = false; + + return this; + + } + + getFilters() { + + return this.filters; + + } + + setFilters( value ) { + + if ( ! value ) value = []; + + if ( this._connected === true ) { + + this.disconnect(); + this.filters = value.slice(); + this.connect(); + + } else { + + this.filters = value.slice(); + + } + + return this; + + } + + setDetune( value ) { + + this.detune = value; + + if ( this.source.detune === undefined ) return; // only set detune when available + + if ( this.isPlaying === true ) { + + this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 ); + + } + + return this; + + } + + getDetune() { + + return this.detune; + + } + + getFilter() { + + return this.getFilters()[ 0 ]; + + } + + setFilter( filter ) { + + return this.setFilters( filter ? [ filter ] : [] ); + + } + + setPlaybackRate( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.playbackRate = value; + + if ( this.isPlaying === true ) { + + this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 ); + + } + + return this; + + } + + getPlaybackRate() { + + return this.playbackRate; + + } + + onEnded() { + + this.isPlaying = false; + + } + + getLoop() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return false; + + } + + return this.loop; + + } + + setLoop( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.loop = value; + + if ( this.isPlaying === true ) { + + this.source.loop = this.loop; + + } + + return this; + + } + + setLoopStart( value ) { + + this.loopStart = value; + + return this; + + } + + setLoopEnd( value ) { + + this.loopEnd = value; + + return this; + + } + + getVolume() { + + return this.gain.gain.value; + + } + + setVolume( value ) { + + this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); + + return this; + + } + + } + + const _position$3 = /*@__PURE__*/ new Vector3(); + const _quaternion$4 = /*@__PURE__*/ new Quaternion(); + const _scale$2 = /*@__PURE__*/ new Vector3(); + const _orientation$1 = /*@__PURE__*/ new Vector3(); + + class PositionalAudio extends Audio { + + constructor( listener ) { + + super( listener ); + + this.panner = this.context.createPanner(); + this.panner.panningModel = 'HRTF'; + this.panner.connect( this.gain ); + + } + + getOutput() { + + return this.panner; + + } + + getRefDistance() { + + return this.panner.refDistance; + + } + + setRefDistance( value ) { + + this.panner.refDistance = value; + + return this; + + } + + getRolloffFactor() { + + return this.panner.rolloffFactor; + + } + + setRolloffFactor( value ) { + + this.panner.rolloffFactor = value; + + return this; + + } + + getDistanceModel() { + + return this.panner.distanceModel; + + } + + setDistanceModel( value ) { + + this.panner.distanceModel = value; + + return this; + + } + + getMaxDistance() { + + return this.panner.maxDistance; + + } + + setMaxDistance( value ) { + + this.panner.maxDistance = value; + + return this; + + } + + setDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) { + + this.panner.coneInnerAngle = coneInnerAngle; + this.panner.coneOuterAngle = coneOuterAngle; + this.panner.coneOuterGain = coneOuterGain; + + return this; + + } + + updateMatrixWorld( force ) { + + super.updateMatrixWorld( force ); + + if ( this.hasPlaybackControl === true && this.isPlaying === false ) return; + + this.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 ); + + _orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 ); + + const panner = this.panner; + + if ( panner.positionX ) { + + // code path for Chrome and Firefox (see #14393) + + const endTime = this.context.currentTime + this.listener.timeDelta; + + panner.positionX.linearRampToValueAtTime( _position$3.x, endTime ); + panner.positionY.linearRampToValueAtTime( _position$3.y, endTime ); + panner.positionZ.linearRampToValueAtTime( _position$3.z, endTime ); + panner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime ); + panner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime ); + panner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime ); + + } else { + + panner.setPosition( _position$3.x, _position$3.y, _position$3.z ); + panner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z ); + + } + + } + + } + + class AudioAnalyser { + + constructor( audio, fftSize = 2048 ) { + + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize; + + this.data = new Uint8Array( this.analyser.frequencyBinCount ); + + audio.getOutput().connect( this.analyser ); + + } + + + getFrequencyData() { + + this.analyser.getByteFrequencyData( this.data ); + + return this.data; + + } + + getAverageFrequency() { + + let value = 0; + const data = this.getFrequencyData(); + + for ( let i = 0; i < data.length; i ++ ) { + + value += data[ i ]; + + } + + return value / data.length; + + } + + } + + function PropertyMixer( binding, typeName, valueSize ) { + + this.binding = binding; + this.valueSize = valueSize; + + let mixFunction, + mixFunctionAdditive, + setIdentity; + + // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] + // + // interpolators can use .buffer as their .result + // the data then goes to 'incoming' + // + // 'accu0' and 'accu1' are used frame-interleaved for + // the cumulative result and are compared to detect + // changes + // + // 'orig' stores the original state of the property + // + // 'add' is used for additive cumulative results + // + // 'work' is optional and is only present for quaternion types. It is used + // to store intermediate quaternion multiplication results + + switch ( typeName ) { + + case 'quaternion': + mixFunction = this._slerp; + mixFunctionAdditive = this._slerpAdditive; + setIdentity = this._setAdditiveIdentityQuaternion; + + this.buffer = new Float64Array( valueSize * 6 ); + this._workIndex = 5; + break; + + case 'string': + case 'bool': + mixFunction = this._select; + + // Use the regular mix function and for additive on these types, + // additive is not relevant for non-numeric types + mixFunctionAdditive = this._select; + + setIdentity = this._setAdditiveIdentityOther; + + this.buffer = new Array( valueSize * 5 ); + break; + + default: + mixFunction = this._lerp; + mixFunctionAdditive = this._lerpAdditive; + setIdentity = this._setAdditiveIdentityNumeric; + + this.buffer = new Float64Array( valueSize * 5 ); + + } + + this._mixBufferRegion = mixFunction; + this._mixBufferRegionAdditive = mixFunctionAdditive; + this._setIdentity = setIdentity; + this._origIndex = 3; + this._addIndex = 4; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + this.useCount = 0; + this.referenceCount = 0; + + } + + Object.assign( PropertyMixer.prototype, { + + // accumulate data in the 'incoming' region into 'accu' + accumulate: function ( accuIndex, weight ) { + + // note: happily accumulating nothing when weight = 0, the caller knows + // the weight and shouldn't have made the call in the first place + + const buffer = this.buffer, + stride = this.valueSize, + offset = accuIndex * stride + stride; + + let currentWeight = this.cumulativeWeight; + + if ( currentWeight === 0 ) { + + // accuN := incoming * weight + + for ( let i = 0; i !== stride; ++ i ) { + + buffer[ offset + i ] = buffer[ i ]; + + } + + currentWeight = weight; + + } else { + + // accuN := accuN + incoming * weight + + currentWeight += weight; + const mix = weight / currentWeight; + this._mixBufferRegion( buffer, offset, 0, mix, stride ); + + } + + this.cumulativeWeight = currentWeight; + + }, + + // accumulate data in the 'incoming' region into 'add' + accumulateAdditive: function ( weight ) { + + const buffer = this.buffer, + stride = this.valueSize, + offset = stride * this._addIndex; + + if ( this.cumulativeWeightAdditive === 0 ) { + + // add = identity + + this._setIdentity(); + + } + + // add := add + incoming * weight + + this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride ); + this.cumulativeWeightAdditive += weight; + + }, + + // apply the state of 'accu' to the binding when accus differ + apply: function ( accuIndex ) { + + const stride = this.valueSize, + buffer = this.buffer, + offset = accuIndex * stride + stride, + + weight = this.cumulativeWeight, + weightAdditive = this.cumulativeWeightAdditive, + + binding = this.binding; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + if ( weight < 1 ) { + + // accuN := accuN + original * ( 1 - cumulativeWeight ) + + const originalValueOffset = stride * this._origIndex; + + this._mixBufferRegion( + buffer, offset, originalValueOffset, 1 - weight, stride ); + + } + + if ( weightAdditive > 0 ) { + + // accuN := accuN + additive accuN + + this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride ); + + } + + for ( let i = stride, e = stride + stride; i !== e; ++ i ) { + + if ( buffer[ i ] !== buffer[ i + stride ] ) { + + // value has changed -> update scene graph + + binding.setValue( buffer, offset ); + break; + + } + + } + + }, + + // remember the state of the bound property and copy it to both accus + saveOriginalState: function () { + + const binding = this.binding; + + const buffer = this.buffer, + stride = this.valueSize, + + originalValueOffset = stride * this._origIndex; + + binding.getValue( buffer, originalValueOffset ); + + // accu[0..1] := orig -- initially detect changes against the original + for ( let i = stride, e = originalValueOffset; i !== e; ++ i ) { + + buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; + + } + + // Add to identity for additive + this._setIdentity(); + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + }, + + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState: function () { + + const originalValueOffset = this.valueSize * 3; + this.binding.setValue( this.buffer, originalValueOffset ); + + }, + + _setAdditiveIdentityNumeric: function () { + + const startIndex = this._addIndex * this.valueSize; + const endIndex = startIndex + this.valueSize; + + for ( let i = startIndex; i < endIndex; i ++ ) { + + this.buffer[ i ] = 0; + + } + + }, + + _setAdditiveIdentityQuaternion: function () { + + this._setAdditiveIdentityNumeric(); + this.buffer[ this._addIndex * this.valueSize + 3 ] = 1; + + }, + + _setAdditiveIdentityOther: function () { + + const startIndex = this._origIndex * this.valueSize; + const targetIndex = this._addIndex * this.valueSize; + + for ( let i = 0; i < this.valueSize; i ++ ) { + + this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ]; + + } + + }, + + + // mix functions + + _select: function ( buffer, dstOffset, srcOffset, t, stride ) { + + if ( t >= 0.5 ) { + + for ( let i = 0; i !== stride; ++ i ) { + + buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; + + } + + } + + }, + + _slerp: function ( buffer, dstOffset, srcOffset, t ) { + + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); + + }, + + _slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { + + const workOffset = this._workIndex * stride; + + // Store result in intermediate buffer offset + Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset ); + + // Slerp to the intermediate result + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t ); + + }, + + _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { + + const s = 1 - t; + + for ( let i = 0; i !== stride; ++ i ) { + + const j = dstOffset + i; + + buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; + + } + + }, + + _lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { + + for ( let i = 0; i !== stride; ++ i ) { + + const j = dstOffset + i; + + buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t; + + } + + } + + } ); + + // Characters [].:/ are reserved for track binding syntax. + const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; + const _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' ); + + // Attempts to allow node names from any language. ES5's `\w` regexp matches + // only latin characters, and the unicode \p{L} is not yet supported. So + // instead, we exclude reserved characters and match everything else. + const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; + const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']'; + + // Parent directories, delimited by '/' or ':'. Currently unused, but must + // be matched to parse the rest of the track name. + const _directoryRe = /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar ); + + // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. + const _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot ); + + // Object on target node, and accessor. May not contain reserved + // characters. Accessor may contain any character except closing bracket. + const _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar ); + + // Property and accessor. May not contain reserved characters. Accessor may + // contain any non-bracket characters. + const _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar ); + + const _trackRe = new RegExp( '' + + '^' + + _directoryRe + + _nodeRe + + _objectRe + + _propertyRe + + '$' + ); + + const _supportedObjectNames = [ 'material', 'materials', 'bones' ]; + + function Composite( targetGroup, path, optionalParsedPath ) { + + const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); + + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_( path, parsedPath ); + + } + + Object.assign( Composite.prototype, { + + getValue: function ( array, offset ) { + + this.bind(); // bind all binding + + const firstValidIndex = this._targetGroup.nCachedObjects_, + binding = this._bindings[ firstValidIndex ]; + + // and only call .getValue on the first + if ( binding !== undefined ) binding.getValue( array, offset ); + + }, + + setValue: function ( array, offset ) { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].setValue( array, offset ); + + } + + }, + + bind: function () { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].bind(); + + } + + }, + + unbind: function () { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].unbind(); + + } + + } + + } ); + + + function PropertyBinding( rootNode, path, parsedPath ) { + + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); + + this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; + + this.rootNode = rootNode; + + } + + Object.assign( PropertyBinding, { + + Composite: Composite, + + create: function ( root, path, parsedPath ) { + + if ( ! ( root && root.isAnimationObjectGroup ) ) { + + return new PropertyBinding( root, path, parsedPath ); + + } else { + + return new PropertyBinding.Composite( root, path, parsedPath ); + + } + + }, + + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + sanitizeNodeName: function ( name ) { + + return name.replace( /\s/g, '_' ).replace( _reservedRe, '' ); + + }, + + parseTrackName: function ( trackName ) { + + const matches = _trackRe.exec( trackName ); + + if ( ! matches ) { + + throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); + + } + + const results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[ 2 ], + objectName: matches[ 3 ], + objectIndex: matches[ 4 ], + propertyName: matches[ 5 ], // required + propertyIndex: matches[ 6 ] + }; + + const lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); + + if ( lastDot !== undefined && lastDot !== - 1 ) { + + const objectName = results.nodeName.substring( lastDot + 1 ); + + // Object names must be checked against an allowlist. Otherwise, there + // is no way to parse 'foo.bar.baz': 'baz' must be a property, but + // 'bar' could be the objectName, or part of a nodeName (which can + // include '.' characters). + if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) { + + results.nodeName = results.nodeName.substring( 0, lastDot ); + results.objectName = objectName; + + } + + } + + if ( results.propertyName === null || results.propertyName.length === 0 ) { + + throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); + + } + + return results; + + }, + + findNode: function ( root, nodeName ) { + + if ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { + + return root; + + } + + // search into skeleton bones. + if ( root.skeleton ) { + + const bone = root.skeleton.getBoneByName( nodeName ); + + if ( bone !== undefined ) { + + return bone; + + } + + } + + // search into node subtree. + if ( root.children ) { + + const searchNodeSubtree = function ( children ) { + + for ( let i = 0; i < children.length; i ++ ) { + + const childNode = children[ i ]; + + if ( childNode.name === nodeName || childNode.uuid === nodeName ) { + + return childNode; + + } + + const result = searchNodeSubtree( childNode.children ); + + if ( result ) return result; + + } + + return null; + + }; + + const subTreeNode = searchNodeSubtree( root.children ); + + if ( subTreeNode ) { + + return subTreeNode; + + } + + } + + return null; + + } + + } ); + + Object.assign( PropertyBinding.prototype, { // prototype, continued + + // these are used to "bind" a nonexistent property + _getValue_unavailable: function () {}, + _setValue_unavailable: function () {}, + + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + + GetterByBindingType: [ + + function getValue_direct( buffer, offset ) { + + buffer[ offset ] = this.node[ this.propertyName ]; + + }, + + function getValue_array( buffer, offset ) { + + const source = this.resolvedProperty; + + for ( let i = 0, n = source.length; i !== n; ++ i ) { + + buffer[ offset ++ ] = source[ i ]; + + } + + }, + + function getValue_arrayElement( buffer, offset ) { + + buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; + + }, + + function getValue_toArray( buffer, offset ) { + + this.resolvedProperty.toArray( buffer, offset ); + + } + + ], + + SetterByBindingTypeAndVersioning: [ + + [ + // Direct + + function setValue_direct( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + + }, + + function setValue_direct_setNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // EntireArray + + function setValue_array( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + }, + + function setValue_array_setNeedsUpdate( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.needsUpdate = true; + + }, + + function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // ArrayElement + + function setValue_arrayElement( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + + }, + + function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // HasToFromArray + + function setValue_fromArray( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + + }, + + function setValue_fromArray_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.needsUpdate = true; + + }, + + function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ] + + ], + + getValue: function getValue_unbound( targetArray, offset ) { + + this.bind(); + this.getValue( targetArray, offset ); + + // Note: This class uses a State pattern on a per-method basis: + // 'bind' sets 'this.getValue' / 'setValue' and shadows the + // prototype version of these methods with one that represents + // the bound state. When the property is not found, the methods + // become no-ops. + + }, + + setValue: function getValue_unbound( sourceArray, offset ) { + + this.bind(); + this.setValue( sourceArray, offset ); + + }, + + // create getter / setter pair for a property in the scene graph + bind: function () { + + let targetObject = this.node; + const parsedPath = this.parsedPath; + + const objectName = parsedPath.objectName; + const propertyName = parsedPath.propertyName; + let propertyIndex = parsedPath.propertyIndex; + + if ( ! targetObject ) { + + targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; + + this.node = targetObject; + + } + + // set fail state so we can just 'return' on error + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + + // ensure there is a value node + if ( ! targetObject ) { + + console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); + return; + + } + + if ( objectName ) { + + let objectIndex = parsedPath.objectIndex; + + // special cases were we need to reach deeper into the hierarchy to get the face materials.... + switch ( objectName ) { + + case 'materials': + + if ( ! targetObject.material ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); + return; + + } + + if ( ! targetObject.material.materials ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); + return; + + } + + targetObject = targetObject.material.materials; + + break; + + case 'bones': + + if ( ! targetObject.skeleton ) { + + console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); + return; + + } + + // potential future optimization: skip this if propertyIndex is already an integer + // and convert the integer string to a true integer. + + targetObject = targetObject.skeleton.bones; + + // support resolving morphTarget names into indices. + for ( let i = 0; i < targetObject.length; i ++ ) { + + if ( targetObject[ i ].name === objectIndex ) { + + objectIndex = i; + break; + + } + + } + + break; + + default: + + if ( targetObject[ objectName ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); + return; + + } + + targetObject = targetObject[ objectName ]; + + } + + + if ( objectIndex !== undefined ) { + + if ( targetObject[ objectIndex ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); + return; + + } + + targetObject = targetObject[ objectIndex ]; + + } + + } + + // resolve property + const nodeProperty = targetObject[ propertyName ]; + + if ( nodeProperty === undefined ) { + + const nodeName = parsedPath.nodeName; + + console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + + '.' + propertyName + ' but it wasn\'t found.', targetObject ); + return; + + } + + // determine versioning scheme + let versioning = this.Versioning.None; + + this.targetObject = targetObject; + + if ( targetObject.needsUpdate !== undefined ) { // material + + versioning = this.Versioning.NeedsUpdate; + + } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform + + versioning = this.Versioning.MatrixWorldNeedsUpdate; + + } + + // determine how the property gets bound + let bindingType = this.BindingType.Direct; + + if ( propertyIndex !== undefined ) { + + // access a sub element of the property array (only primitives are supported right now) + + if ( propertyName === 'morphTargetInfluences' ) { + + // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. + + // support resolving morphTarget names into indices. + if ( ! targetObject.geometry ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); + return; + + } + + if ( targetObject.geometry.isBufferGeometry ) { + + if ( ! targetObject.geometry.morphAttributes ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); + return; + + } + + if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) { + + propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ]; + + } + + + } else { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this ); + return; + + } + + } + + bindingType = this.BindingType.ArrayElement; + + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + + } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { + + // must use copy for Object3D.Euler/Quaternion + + bindingType = this.BindingType.HasFromToArray; + + this.resolvedProperty = nodeProperty; + + } else if ( Array.isArray( nodeProperty ) ) { + + bindingType = this.BindingType.EntireArray; + + this.resolvedProperty = nodeProperty; + + } else { + + this.propertyName = propertyName; + + } + + // select getter / setter + this.getValue = this.GetterByBindingType[ bindingType ]; + this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; + + }, + + unbind: function () { + + this.node = null; + + // back to the prototype version of getValue / setValue + // note: avoiding to mutate the shape of 'this' via 'delete' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + + } ); + + // DECLARE ALIAS AFTER assign prototype + Object.assign( PropertyBinding.prototype, { + + // initial state of these methods that calls 'bind' + _getValue_unbound: PropertyBinding.prototype.getValue, + _setValue_unbound: PropertyBinding.prototype.setValue, + + } ); + + /** + * + * A group of objects that receives a shared animation state. + * + * Usage: + * + * - Add objects you would otherwise pass as 'root' to the + * constructor or the .clipAction method of AnimationMixer. + * + * - Instead pass this object as 'root'. + * + * - You can also add and remove objects later when the mixer + * is running. + * + * Note: + * + * Objects of this class appear as one object to the mixer, + * so cache control of the individual objects must be done + * on the group. + * + * Limitation: + * + * - The animated properties must be compatible among the + * all objects in the group. + * + * - A single property can either be controlled through a + * target group or directly, but not both. + */ + + function AnimationObjectGroup() { + + this.uuid = MathUtils.generateUUID(); + + // cached objects followed by the active ones + this._objects = Array.prototype.slice.call( arguments ); + + this.nCachedObjects_ = 0; // threshold + // note: read by PropertyBinding.Composite + + const indices = {}; + this._indicesByUUID = indices; // for bookkeeping + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + indices[ arguments[ i ].uuid ] = i; + + } + + this._paths = []; // inside: string + this._parsedPaths = []; // inside: { we don't care, here } + this._bindings = []; // inside: Array< PropertyBinding > + this._bindingsIndicesByPath = {}; // inside: indices in these arrays + + const scope = this; + + this.stats = { + + objects: { + get total() { + + return scope._objects.length; + + }, + get inUse() { + + return this.total - scope.nCachedObjects_; + + } + }, + get bindingsPerObject() { + + return scope._bindings.length; + + } + + }; + + } + + Object.assign( AnimationObjectGroup.prototype, { + + isAnimationObjectGroup: true, + + add: function () { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + nBindings = bindings.length; + + let knownObject = undefined, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid; + let index = indicesByUUID[ uuid ]; + + if ( index === undefined ) { + + // unknown object -> add it to the ACTIVE region + + index = nObjects ++; + indicesByUUID[ uuid ] = index; + objects.push( object ); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); + + } + + } else if ( index < nCachedObjects ) { + + knownObject = objects[ index ]; + + // move existing object to the ACTIVE region + + const firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ]; + + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + indicesByUUID[ uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ]; + + let binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = lastCached; + + if ( binding === undefined ) { + + // since we do not bother to create new bindings + // for objects that are cached, the binding may + // or may not exist + + binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); + + } + + bindingsForPath[ firstActiveIndex ] = binding; + + } + + } else if ( objects[ index ] !== knownObject ) { + + console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); + + } // else the object is already where we want it to be + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + remove: function () { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + let nCachedObjects = this.nCachedObjects_; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined && index >= nCachedObjects ) { + + // move existing object into the CACHED region + + const lastCachedIndex = nCachedObjects ++, + firstActiveObject = objects[ lastCachedIndex ]; + + indicesByUUID[ firstActiveObject.uuid ] = index; + objects[ index ] = firstActiveObject; + + indicesByUUID[ uuid ] = lastCachedIndex; + objects[ lastCachedIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + firstActive = bindingsForPath[ lastCachedIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = firstActive; + bindingsForPath[ lastCachedIndex ] = binding; + + } + + } + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // remove & forget + uncache: function () { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + let nCachedObjects = this.nCachedObjects_, + nObjects = objects.length; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined ) { + + delete indicesByUUID[ uuid ]; + + if ( index < nCachedObjects ) { + + // object is cached, shrink the CACHED region + + const firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ], + lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + // last cached object takes this object's place + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + // last object goes to the activated slot and pop + indicesByUUID[ lastObject.uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + last = bindingsForPath[ lastIndex ]; + + bindingsForPath[ index ] = lastCached; + bindingsForPath[ firstActiveIndex ] = last; + bindingsForPath.pop(); + + } + + } else { + + // object is active, just swap with the last and pop + + const lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + if ( lastIndex > 0 ) { + + indicesByUUID[ lastObject.uuid ] = index; + + } + + objects[ index ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ]; + + bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; + bindingsForPath.pop(); + + } + + } // cached or active + + } // if object is known + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // Internal interface used by befriended PropertyBinding.Composite: + + subscribe_: function ( path, parsedPath ) { + + // returns an array of bindings for the given path that is changed + // according to the contained objects in the group + + const indicesByPath = this._bindingsIndicesByPath; + let index = indicesByPath[ path ]; + const bindings = this._bindings; + + if ( index !== undefined ) return bindings[ index ]; + + const paths = this._paths, + parsedPaths = this._parsedPaths, + objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + bindingsForPath = new Array( nObjects ); + + index = bindings.length; + + indicesByPath[ path ] = index; + + paths.push( path ); + parsedPaths.push( parsedPath ); + bindings.push( bindingsForPath ); + + for ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) { + + const object = objects[ i ]; + bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); + + } + + return bindingsForPath; + + }, + + unsubscribe_: function ( path ) { + + // tells the group to forget about a property path and no longer + // update the array previously obtained with 'subscribe_' + + const indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ]; + + if ( index !== undefined ) { + + const paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + lastBindingsIndex = bindings.length - 1, + lastBindings = bindings[ lastBindingsIndex ], + lastBindingsPath = path[ lastBindingsIndex ]; + + indicesByPath[ lastBindingsPath ] = index; + + bindings[ index ] = lastBindings; + bindings.pop(); + + parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; + parsedPaths.pop(); + + paths[ index ] = paths[ lastBindingsIndex ]; + paths.pop(); + + } + + } + + } ); + + class AnimationAction { + + constructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) { + + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot; + this.blendMode = blendMode; + + const tracks = clip.tracks, + nTracks = tracks.length, + interpolants = new Array( nTracks ); + + const interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + + for ( let i = 0; i !== nTracks; ++ i ) { + + const interpolant = tracks[ i ].createInterpolant( null ); + interpolants[ i ] = interpolant; + interpolant.settings = interpolantSettings; + + } + + this._interpolantSettings = interpolantSettings; + + this._interpolants = interpolants; // bound by the mixer + + // inside: PropertyMixer (managed by the mixer) + this._propertyBindings = new Array( nTracks ); + + this._cacheIndex = null; // for the memory manager + this._byClipCacheIndex = null; // for the memory manager + + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + + this.loop = LoopRepeat; + this._loopCount = - 1; + + // global mixer time when the action is to be started + // it's set back to 'null' upon start of the action + this._startTime = null; + + // scaled local time of the action + // gets clamped or wrapped to 0..clip.duration according to loop + this.time = 0; + + this.timeScale = 1; + this._effectiveTimeScale = 1; + + this.weight = 1; + this._effectiveWeight = 1; + + this.repetitions = Infinity; // no. of repetitions when looping + + this.paused = false; // true -> zero effective time scale + this.enabled = true; // false -> zero effective weight + + this.clampWhenFinished = false;// keep feeding the last frame? + + this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate + this.zeroSlopeAtEnd = true;// clips for start, loop and end + + } + + // State & Scheduling + + play() { + + this._mixer._activateAction( this ); + + return this; + + } + + stop() { + + this._mixer._deactivateAction( this ); + + return this.reset(); + + } + + reset() { + + this.paused = false; + this.enabled = true; + + this.time = 0; // restart clip + this._loopCount = - 1;// forget previous loops + this._startTime = null;// forget scheduling + + return this.stopFading().stopWarping(); + + } + + isRunning() { + + return this.enabled && ! this.paused && this.timeScale !== 0 && + this._startTime === null && this._mixer._isActiveAction( this ); + + } + + // return true when play has been called + isScheduled() { + + return this._mixer._isActiveAction( this ); + + } + + startAt( time ) { + + this._startTime = time; + + return this; + + } + + setLoop( mode, repetitions ) { + + this.loop = mode; + this.repetitions = repetitions; + + return this; + + } + + // Weight + + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight( weight ) { + + this.weight = weight; + + // note: same logic as when updated at runtime + this._effectiveWeight = this.enabled ? weight : 0; + + return this.stopFading(); + + } + + // return the weight considering fading and .enabled + getEffectiveWeight() { + + return this._effectiveWeight; + + } + + fadeIn( duration ) { + + return this._scheduleFading( duration, 0, 1 ); + + } + + fadeOut( duration ) { + + return this._scheduleFading( duration, 1, 0 ); + + } + + crossFadeFrom( fadeOutAction, duration, warp ) { + + fadeOutAction.fadeOut( duration ); + this.fadeIn( duration ); + + if ( warp ) { + + const fadeInDuration = this._clip.duration, + fadeOutDuration = fadeOutAction._clip.duration, + + startEndRatio = fadeOutDuration / fadeInDuration, + endStartRatio = fadeInDuration / fadeOutDuration; + + fadeOutAction.warp( 1.0, startEndRatio, duration ); + this.warp( endStartRatio, 1.0, duration ); + + } + + return this; + + } + + crossFadeTo( fadeInAction, duration, warp ) { + + return fadeInAction.crossFadeFrom( this, duration, warp ); + + } + + stopFading() { + + const weightInterpolant = this._weightInterpolant; + + if ( weightInterpolant !== null ) { + + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant( weightInterpolant ); + + } + + return this; + + } + + // Time Scale Control + + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale( timeScale ) { + + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 : timeScale; + + return this.stopWarping(); + + } + + // return the time scale considering warping and .paused + getEffectiveTimeScale() { + + return this._effectiveTimeScale; + + } + + setDuration( duration ) { + + this.timeScale = this._clip.duration / duration; + + return this.stopWarping(); + + } + + syncWith( action ) { + + this.time = action.time; + this.timeScale = action.timeScale; + + return this.stopWarping(); + + } + + halt( duration ) { + + return this.warp( this._effectiveTimeScale, 0, duration ); + + } + + warp( startTimeScale, endTimeScale, duration ) { + + const mixer = this._mixer, + now = mixer.time, + timeScale = this.timeScale; + + let interpolant = this._timeScaleInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + + } + + const times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + times[ 1 ] = now + duration; + + values[ 0 ] = startTimeScale / timeScale; + values[ 1 ] = endTimeScale / timeScale; + + return this; + + } + + stopWarping() { + + const timeScaleInterpolant = this._timeScaleInterpolant; + + if ( timeScaleInterpolant !== null ) { + + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); + + } + + return this; + + } + + // Object Accessors + + getMixer() { + + return this._mixer; + + } + + getClip() { + + return this._clip; + + } + + getRoot() { + + return this._localRoot || this._mixer._root; + + } + + // Interna + + _update( time, deltaTime, timeDirection, accuIndex ) { + + // called by the mixer + + if ( ! this.enabled ) { + + // call ._updateWeight() to update ._effectiveWeight + + this._updateWeight( time ); + return; + + } + + const startTime = this._startTime; + + if ( startTime !== null ) { + + // check for scheduled start of action + + const timeRunning = ( time - startTime ) * timeDirection; + if ( timeRunning < 0 || timeDirection === 0 ) { + + return; // yet to come / don't decide when delta = 0 + + } + + // start + + this._startTime = null; // unschedule + deltaTime = timeDirection * timeRunning; + + } + + // apply time scale and advance time + + deltaTime *= this._updateTimeScale( time ); + const clipTime = this._updateTime( deltaTime ); + + // note: _updateTime may disable the action resulting in + // an effective weight of 0 + + const weight = this._updateWeight( time ); + + if ( weight > 0 ) { + + const interpolants = this._interpolants; + const propertyMixers = this._propertyBindings; + + switch ( this.blendMode ) { + + case AdditiveAnimationBlendMode: + + for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulateAdditive( weight ); + + } + + break; + + case NormalAnimationBlendMode: + default: + + for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulate( accuIndex, weight ); + + } + + } + + } + + } + + _updateWeight( time ) { + + let weight = 0; + + if ( this.enabled ) { + + weight = this.weight; + const interpolant = this._weightInterpolant; + + if ( interpolant !== null ) { + + const interpolantValue = interpolant.evaluate( time )[ 0 ]; + + weight *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopFading(); + + if ( interpolantValue === 0 ) { + + // faded out, disable + this.enabled = false; + + } + + } + + } + + } + + this._effectiveWeight = weight; + return weight; + + } + + _updateTimeScale( time ) { + + let timeScale = 0; + + if ( ! this.paused ) { + + timeScale = this.timeScale; + + const interpolant = this._timeScaleInterpolant; + + if ( interpolant !== null ) { + + const interpolantValue = interpolant.evaluate( time )[ 0 ]; + + timeScale *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopWarping(); + + if ( timeScale === 0 ) { + + // motion has halted, pause + this.paused = true; + + } else { + + // warp done - apply final time scale + this.timeScale = timeScale; + + } + + } + + } + + } + + this._effectiveTimeScale = timeScale; + return timeScale; + + } + + _updateTime( deltaTime ) { + + const duration = this._clip.duration; + const loop = this.loop; + + let time = this.time + deltaTime; + let loopCount = this._loopCount; + + const pingPong = ( loop === LoopPingPong ); + + if ( deltaTime === 0 ) { + + if ( loopCount === - 1 ) return time; + + return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time; + + } + + if ( loop === LoopOnce ) { + + if ( loopCount === - 1 ) { + + // just started + + this._loopCount = 0; + this._setEndings( true, true, false ); + + } + + handle_stop: { + + if ( time >= duration ) { + + time = duration; + + } else if ( time < 0 ) { + + time = 0; + + } else { + + this.time = time; + + break handle_stop; + + } + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime < 0 ? - 1 : 1 + } ); + + } + + } else { // repetitive Repeat or PingPong + + if ( loopCount === - 1 ) { + + // just started + + if ( deltaTime >= 0 ) { + + loopCount = 0; + + this._setEndings( true, this.repetitions === 0, pingPong ); + + } else { + + // when looping in reverse direction, the initial + // transition through zero counts as a repetition, + // so leave loopCount at -1 + + this._setEndings( this.repetitions === 0, true, pingPong ); + + } + + } + + if ( time >= duration || time < 0 ) { + + // wrap around + + const loopDelta = Math.floor( time / duration ); // signed + time -= duration * loopDelta; + + loopCount += Math.abs( loopDelta ); + + const pending = this.repetitions - loopCount; + + if ( pending <= 0 ) { + + // have to stop (switch state, clamp time, fire event) + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + time = deltaTime > 0 ? duration : 0; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime > 0 ? 1 : - 1 + } ); + + } else { + + // keep running + + if ( pending === 1 ) { + + // entering the last round + + const atStart = deltaTime < 0; + this._setEndings( atStart, ! atStart, pingPong ); + + } else { + + this._setEndings( false, false, pingPong ); + + } + + this._loopCount = loopCount; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'loop', action: this, loopDelta: loopDelta + } ); + + } + + } else { + + this.time = time; + + } + + if ( pingPong && ( loopCount & 1 ) === 1 ) { + + // invert time for the "pong round" + + return duration - time; + + } + + } + + return time; + + } + + _setEndings( atStart, atEnd, pingPong ) { + + const settings = this._interpolantSettings; + + if ( pingPong ) { + + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + + } else { + + // assuming for LoopOnce atStart == atEnd == true + + if ( atStart ) { + + settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingStart = WrapAroundEnding; + + } + + if ( atEnd ) { + + settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingEnd = WrapAroundEnding; + + } + + } + + } + + _scheduleFading( duration, weightNow, weightThen ) { + + const mixer = this._mixer, now = mixer.time; + let interpolant = this._weightInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + + } + + const times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + values[ 0 ] = weightNow; + times[ 1 ] = now + duration; + values[ 1 ] = weightThen; + + return this; + + } + + } + + function AnimationMixer( root ) { + + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + + this.time = 0; + + this.timeScale = 1.0; + + } + + AnimationMixer.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { + + constructor: AnimationMixer, + + _bindAction: function ( action, prototypeAction ) { + + const root = action._localRoot || this._root, + tracks = action._clip.tracks, + nTracks = tracks.length, + bindings = action._propertyBindings, + interpolants = action._interpolants, + rootUuid = root.uuid, + bindingsByRoot = this._bindingsByRootAndName; + + let bindingsByName = bindingsByRoot[ rootUuid ]; + + if ( bindingsByName === undefined ) { + + bindingsByName = {}; + bindingsByRoot[ rootUuid ] = bindingsByName; + + } + + for ( let i = 0; i !== nTracks; ++ i ) { + + const track = tracks[ i ], + trackName = track.name; + + let binding = bindingsByName[ trackName ]; + + if ( binding !== undefined ) { + + bindings[ i ] = binding; + + } else { + + binding = bindings[ i ]; + + if ( binding !== undefined ) { + + // existing binding, make sure the cache knows + + if ( binding._cacheIndex === null ) { + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + } + + continue; + + } + + const path = prototypeAction && prototypeAction. + _propertyBindings[ i ].binding.parsedPath; + + binding = new PropertyMixer( + PropertyBinding.create( root, trackName, path ), + track.ValueTypeName, track.getValueSize() ); + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + bindings[ i ] = binding; + + } + + interpolants[ i ].resultBuffer = binding.buffer; + + } + + }, + + _activateAction: function ( action ) { + + if ( ! this._isActiveAction( action ) ) { + + if ( action._cacheIndex === null ) { + + // this action has been forgotten by the cache, but the user + // appears to be still using it -> rebind + + const rootUuid = ( action._localRoot || this._root ).uuid, + clipUuid = action._clip.uuid, + actionsForClip = this._actionsByClip[ clipUuid ]; + + this._bindAction( action, + actionsForClip && actionsForClip.knownActions[ 0 ] ); + + this._addInactiveAction( action, clipUuid, rootUuid ); + + } + + const bindings = action._propertyBindings; + + // increment reference counts / sort out state + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( binding.useCount ++ === 0 ) { + + this._lendBinding( binding ); + binding.saveOriginalState(); + + } + + } + + this._lendAction( action ); + + } + + }, + + _deactivateAction: function ( action ) { + + if ( this._isActiveAction( action ) ) { + + const bindings = action._propertyBindings; + + // decrement reference counts / sort out state + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( -- binding.useCount === 0 ) { + + binding.restoreOriginalState(); + this._takeBackBinding( binding ); + + } + + } + + this._takeBackAction( action ); + + } + + }, + + // Memory manager + + _initMemoryManager: function () { + + this._actions = []; // 'nActiveActions' followed by inactive ones + this._nActiveActions = 0; + + this._actionsByClip = {}; + // inside: + // { + // knownActions: Array< AnimationAction > - used as prototypes + // actionByRoot: AnimationAction - lookup + // } + + + this._bindings = []; // 'nActiveBindings' followed by inactive ones + this._nActiveBindings = 0; + + this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > + + + this._controlInterpolants = []; // same game as above + this._nActiveControlInterpolants = 0; + + const scope = this; + + this.stats = { + + actions: { + get total() { + + return scope._actions.length; + + }, + get inUse() { + + return scope._nActiveActions; + + } + }, + bindings: { + get total() { + + return scope._bindings.length; + + }, + get inUse() { + + return scope._nActiveBindings; + + } + }, + controlInterpolants: { + get total() { + + return scope._controlInterpolants.length; + + }, + get inUse() { + + return scope._nActiveControlInterpolants; + + } + } + + }; + + }, + + // Memory management for AnimationAction objects + + _isActiveAction: function ( action ) { + + const index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + + }, + + _addInactiveAction: function ( action, clipUuid, rootUuid ) { + + const actions = this._actions, + actionsByClip = this._actionsByClip; + + let actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip === undefined ) { + + actionsForClip = { + + knownActions: [ action ], + actionByRoot: {} + + }; + + action._byClipCacheIndex = 0; + + actionsByClip[ clipUuid ] = actionsForClip; + + } else { + + const knownActions = actionsForClip.knownActions; + + action._byClipCacheIndex = knownActions.length; + knownActions.push( action ); + + } + + action._cacheIndex = actions.length; + actions.push( action ); + + actionsForClip.actionByRoot[ rootUuid ] = action; + + }, + + _removeInactiveAction: function ( action ) { + + const actions = this._actions, + lastInactiveAction = actions[ actions.length - 1 ], + cacheIndex = action._cacheIndex; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + action._cacheIndex = null; + + + const clipUuid = action._clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ], + knownActionsForClip = actionsForClip.knownActions, + + lastKnownAction = + knownActionsForClip[ knownActionsForClip.length - 1 ], + + byClipCacheIndex = action._byClipCacheIndex; + + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; + knownActionsForClip.pop(); + + action._byClipCacheIndex = null; + + + const actionByRoot = actionsForClip.actionByRoot, + rootUuid = ( action._localRoot || this._root ).uuid; + + delete actionByRoot[ rootUuid ]; + + if ( knownActionsForClip.length === 0 ) { + + delete actionsByClip[ clipUuid ]; + + } + + this._removeInactiveBindingsForAction( action ); + + }, + + _removeInactiveBindingsForAction: function ( action ) { + + const bindings = action._propertyBindings; + + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( -- binding.referenceCount === 0 ) { + + this._removeInactiveBinding( binding ); + + } + + } + + }, + + _lendAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions >| inactive actions ] + // s a + // <-swap-> + // a s + + const actions = this._actions, + prevIndex = action._cacheIndex, + + lastActiveIndex = this._nActiveActions ++, + + firstInactiveAction = actions[ lastActiveIndex ]; + + action._cacheIndex = lastActiveIndex; + actions[ lastActiveIndex ] = action; + + firstInactiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = firstInactiveAction; + + }, + + _takeBackAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions |< inactive actions ] + // a s + // <-swap-> + // s a + + const actions = this._actions, + prevIndex = action._cacheIndex, + + firstInactiveIndex = -- this._nActiveActions, + + lastActiveAction = actions[ firstInactiveIndex ]; + + action._cacheIndex = firstInactiveIndex; + actions[ firstInactiveIndex ] = action; + + lastActiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = lastActiveAction; + + }, + + // Memory management for PropertyMixer objects + + _addInactiveBinding: function ( binding, rootUuid, trackName ) { + + const bindingsByRoot = this._bindingsByRootAndName, + bindings = this._bindings; + + let bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName === undefined ) { + + bindingByName = {}; + bindingsByRoot[ rootUuid ] = bindingByName; + + } + + bindingByName[ trackName ] = binding; + + binding._cacheIndex = bindings.length; + bindings.push( binding ); + + }, + + _removeInactiveBinding: function ( binding ) { + + const bindings = this._bindings, + propBinding = binding.binding, + rootUuid = propBinding.rootNode.uuid, + trackName = propBinding.path, + bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + lastInactiveBinding = bindings[ bindings.length - 1 ], + cacheIndex = binding._cacheIndex; + + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[ cacheIndex ] = lastInactiveBinding; + bindings.pop(); + + delete bindingByName[ trackName ]; + + if ( Object.keys( bindingByName ).length === 0 ) { + + delete bindingsByRoot[ rootUuid ]; + + } + + }, + + _lendBinding: function ( binding ) { + + const bindings = this._bindings, + prevIndex = binding._cacheIndex, + + lastActiveIndex = this._nActiveBindings ++, + + firstInactiveBinding = bindings[ lastActiveIndex ]; + + binding._cacheIndex = lastActiveIndex; + bindings[ lastActiveIndex ] = binding; + + firstInactiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = firstInactiveBinding; + + }, + + _takeBackBinding: function ( binding ) { + + const bindings = this._bindings, + prevIndex = binding._cacheIndex, + + firstInactiveIndex = -- this._nActiveBindings, + + lastActiveBinding = bindings[ firstInactiveIndex ]; + + binding._cacheIndex = firstInactiveIndex; + bindings[ firstInactiveIndex ] = binding; + + lastActiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = lastActiveBinding; + + }, + + + // Memory management of Interpolants for weight and time scale + + _lendControlInterpolant: function () { + + const interpolants = this._controlInterpolants, + lastActiveIndex = this._nActiveControlInterpolants ++; + + let interpolant = interpolants[ lastActiveIndex ]; + + if ( interpolant === undefined ) { + + interpolant = new LinearInterpolant( + new Float32Array( 2 ), new Float32Array( 2 ), + 1, this._controlInterpolantsResultBuffer ); + + interpolant.__cacheIndex = lastActiveIndex; + interpolants[ lastActiveIndex ] = interpolant; + + } + + return interpolant; + + }, + + _takeBackControlInterpolant: function ( interpolant ) { + + const interpolants = this._controlInterpolants, + prevIndex = interpolant.__cacheIndex, + + firstInactiveIndex = -- this._nActiveControlInterpolants, + + lastActiveInterpolant = interpolants[ firstInactiveIndex ]; + + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[ firstInactiveIndex ] = interpolant; + + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[ prevIndex ] = lastActiveInterpolant; + + }, + + _controlInterpolantsResultBuffer: new Float32Array( 1 ), + + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction: function ( clip, optionalRoot, blendMode ) { + + const root = optionalRoot || this._root, + rootUuid = root.uuid; + + let clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip; + + const clipUuid = clipObject !== null ? clipObject.uuid : clip; + + const actionsForClip = this._actionsByClip[ clipUuid ]; + let prototypeAction = null; + + if ( blendMode === undefined ) { + + if ( clipObject !== null ) { + + blendMode = clipObject.blendMode; + + } else { + + blendMode = NormalAnimationBlendMode; + + } + + } + + if ( actionsForClip !== undefined ) { + + const existingAction = actionsForClip.actionByRoot[ rootUuid ]; + + if ( existingAction !== undefined && existingAction.blendMode === blendMode ) { + + return existingAction; + + } + + // we know the clip, so we don't have to parse all + // the bindings again but can just copy + prototypeAction = actionsForClip.knownActions[ 0 ]; + + // also, take the clip from the prototype action + if ( clipObject === null ) + clipObject = prototypeAction._clip; + + } + + // clip must be known when specified via string + if ( clipObject === null ) return null; + + // allocate all resources required to run it + const newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode ); + + this._bindAction( newAction, prototypeAction ); + + // and make the action known to the memory manager + this._addInactiveAction( newAction, clipUuid, rootUuid ); + + return newAction; + + }, + + // get an existing action + existingAction: function ( clip, optionalRoot ) { + + const root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + return actionsForClip.actionByRoot[ rootUuid ] || null; + + } + + return null; + + }, + + // deactivates all previously scheduled actions + stopAllAction: function () { + + const actions = this._actions, + nActions = this._nActiveActions; + + for ( let i = nActions - 1; i >= 0; -- i ) { + + actions[ i ].stop(); + + } + + return this; + + }, + + // advance the time and update apply the animation + update: function ( deltaTime ) { + + deltaTime *= this.timeScale; + + const actions = this._actions, + nActions = this._nActiveActions, + + time = this.time += deltaTime, + timeDirection = Math.sign( deltaTime ), + + accuIndex = this._accuIndex ^= 1; + + // run active actions + + for ( let i = 0; i !== nActions; ++ i ) { + + const action = actions[ i ]; + + action._update( time, deltaTime, timeDirection, accuIndex ); + + } + + // update scene graph + + const bindings = this._bindings, + nBindings = this._nActiveBindings; + + for ( let i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].apply( accuIndex ); + + } + + return this; + + }, + + // Allows you to seek to a specific time in an animation. + setTime: function ( timeInSeconds ) { + + this.time = 0; // Zero out time attribute for AnimationMixer object; + for ( let i = 0; i < this._actions.length; i ++ ) { + + this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects. + + } + + return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object. + + }, + + // return this mixer's root target object + getRoot: function () { + + return this._root; + + }, + + // free all resources specific to a particular clip + uncacheClip: function ( clip ) { + + const actions = this._actions, + clipUuid = clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + // note: just calling _removeInactiveAction would mess up the + // iteration state and also require updating the state we can + // just throw away + + const actionsToRemove = actionsForClip.knownActions; + + for ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) { + + const action = actionsToRemove[ i ]; + + this._deactivateAction( action ); + + const cacheIndex = action._cacheIndex, + lastInactiveAction = actions[ actions.length - 1 ]; + + action._cacheIndex = null; + action._byClipCacheIndex = null; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + this._removeInactiveBindingsForAction( action ); + + } + + delete actionsByClip[ clipUuid ]; + + } + + }, + + // free all resources specific to a particular root target object + uncacheRoot: function ( root ) { + + const rootUuid = root.uuid, + actionsByClip = this._actionsByClip; + + for ( const clipUuid in actionsByClip ) { + + const actionByRoot = actionsByClip[ clipUuid ].actionByRoot, + action = actionByRoot[ rootUuid ]; + + if ( action !== undefined ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + const bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName !== undefined ) { + + for ( const trackName in bindingByName ) { + + const binding = bindingByName[ trackName ]; + binding.restoreOriginalState(); + this._removeInactiveBinding( binding ); + + } + + } + + }, + + // remove a targeted clip from the cache + uncacheAction: function ( clip, optionalRoot ) { + + const action = this.existingAction( clip, optionalRoot ); + + if ( action !== null ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + } ); + + class Uniform { + + constructor( value ) { + + if ( typeof value === 'string' ) { + + console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); + value = arguments[ 1 ]; + + } + + this.value = value; + + } + + clone() { + + return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); + + } + + } + + function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { + + InterleavedBuffer.call( this, array, stride ); + + this.meshPerAttribute = meshPerAttribute || 1; + + } + + InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { + + constructor: InstancedInterleavedBuffer, + + isInstancedInterleavedBuffer: true, + + copy: function ( source ) { + + InterleavedBuffer.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + }, + + clone: function ( data ) { + + const ib = InterleavedBuffer.prototype.clone.call( this, data ); + + ib.meshPerAttribute = this.meshPerAttribute; + + return ib; + + }, + + toJSON: function ( data ) { + + const json = InterleavedBuffer.prototype.toJSON.call( this, data ); + + json.isInstancedInterleavedBuffer = true; + json.meshPerAttribute = this.meshPerAttribute; + + return json; + + } + + } ); + + function GLBufferAttribute( buffer, type, itemSize, elementSize, count ) { + + this.buffer = buffer; + this.type = type; + this.itemSize = itemSize; + this.elementSize = elementSize; + this.count = count; + + this.version = 0; + + } + + Object.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + Object.assign( GLBufferAttribute.prototype, { + + isGLBufferAttribute: true, + + setBuffer: function ( buffer ) { + + this.buffer = buffer; + + return this; + + }, + + setType: function ( type, elementSize ) { + + this.type = type; + this.elementSize = elementSize; + + return this; + + }, + + setItemSize: function ( itemSize ) { + + this.itemSize = itemSize; + + return this; + + }, + + setCount: function ( count ) { + + this.count = count; + + return this; + + }, + + } ); + + function Raycaster( origin, direction, near, far ) { + + this.ray = new Ray( origin, direction ); + // direction is assumed to be normalized (for accurate distance calculations) + + this.near = near || 0; + this.far = far || Infinity; + this.camera = null; + this.layers = new Layers(); + + this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + + Object.defineProperties( this.params, { + PointCloud: { + get: function () { + + console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); + return this.Points; + + } + } + } ); + + } + + function ascSort( a, b ) { + + return a.distance - b.distance; + + } + + function intersectObject( object, raycaster, intersects, recursive ) { + + if ( object.layers.test( raycaster.layers ) ) { + + object.raycast( raycaster, intersects ); + + } + + if ( recursive === true ) { + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + intersectObject( children[ i ], raycaster, intersects, true ); + + } + + } + + } + + Object.assign( Raycaster.prototype, { + + set: function ( origin, direction ) { + + // direction is assumed to be normalized (for accurate distance calculations) + + this.ray.set( origin, direction ); + + }, + + setFromCamera: function ( coords, camera ) { + + if ( camera && camera.isPerspectiveCamera ) { + + this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); + this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); + this.camera = camera; + + } else if ( camera && camera.isOrthographicCamera ) { + + this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera + this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); + this.camera = camera; + + } else { + + console.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type ); + + } + + }, + + intersectObject: function ( object, recursive, optionalTarget ) { + + const intersects = optionalTarget || []; + + intersectObject( object, this, intersects, recursive ); + + intersects.sort( ascSort ); + + return intersects; + + }, + + intersectObjects: function ( objects, recursive, optionalTarget ) { + + const intersects = optionalTarget || []; + + if ( Array.isArray( objects ) === false ) { + + console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); + return intersects; + + } + + for ( let i = 0, l = objects.length; i < l; i ++ ) { + + intersectObject( objects[ i ], this, intersects, recursive ); + + } + + intersects.sort( ascSort ); + + return intersects; + + } + + } ); + + /** + * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system + * + * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. + * The azimuthal angle (theta) is measured from the positive z-axis. + */ + + class Spherical { + + constructor( radius = 1, phi = 0, theta = 0 ) { + + this.radius = radius; + this.phi = phi; // polar angle + this.theta = theta; // azimuthal angle + + return this; + + } + + set( radius, phi, theta ) { + + this.radius = radius; + this.phi = phi; + this.theta = theta; + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( other ) { + + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + + return this; + + } + + // restrict phi to be betwee EPS and PI-EPS + makeSafe() { + + const EPS = 0.000001; + this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); + + return this; + + } + + setFromVector3( v ) { + + return this.setFromCartesianCoords( v.x, v.y, v.z ); + + } + + setFromCartesianCoords( x, y, z ) { + + this.radius = Math.sqrt( x * x + y * y + z * z ); + + if ( this.radius === 0 ) { + + this.theta = 0; + this.phi = 0; + + } else { + + this.theta = Math.atan2( x, z ); + this.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) ); + + } + + return this; + + } + + } + + /** + * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system + */ + + class Cylindrical { + + constructor( radius, theta, y ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane + this.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis + this.y = ( y !== undefined ) ? y : 0; // height above the x-z plane + + return this; + + } + + set( radius, theta, y ) { + + this.radius = radius; + this.theta = theta; + this.y = y; + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( other ) { + + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + + return this; + + } + + setFromVector3( v ) { + + return this.setFromCartesianCoords( v.x, v.y, v.z ); + + } + + setFromCartesianCoords( x, y, z ) { + + this.radius = Math.sqrt( x * x + z * z ); + this.theta = Math.atan2( x, z ); + this.y = y; + + return this; + + } + + } + + const _vector$8 = /*@__PURE__*/ new Vector2(); + + class Box2 { + + constructor( min, max ) { + + Object.defineProperty( this, 'isBox2', { value: true } ); + + this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); + + } + + set( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + } + + setFromPoints( points ) { + + this.makeEmpty(); + + for ( let i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + } + + setFromCenterAndSize( center, size ) { + + const halfSize = _vector$8.copy( size ).multiplyScalar( 0.5 ); + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + } + + makeEmpty() { + + this.min.x = this.min.y = + Infinity; + this.max.x = this.max.y = - Infinity; + + return this; + + } + + isEmpty() { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); + + } + + getCenter( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getCenter() target is now required' ); + target = new Vector2(); + + } + + return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + } + + getSize( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getSize() target is now required' ); + target = new Vector2(); + + } + + return this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min ); + + } + + expandByPoint( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + } + + expandByVector( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + } + + expandByScalar( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + } + + containsPoint( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y ? false : true; + + } + + containsBox( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y; + + } + + getParameter( point, target ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getParameter() target is now required' ); + target = new Vector2(); + + } + + return target.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ) + ); + + } + + intersectsBox( box ) { + + // using 4 splitting planes to rule out intersections + + return 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; + + } + + clampPoint( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .clampPoint() target is now required' ); + target = new Vector2(); + + } + + return target.copy( point ).clamp( this.min, this.max ); + + } + + distanceToPoint( point ) { + + const clampedPoint = _vector$8.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + } + + intersect( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + return this; + + } + + union( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + } + + translate( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + } + + equals( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + + } + + const _startP = /*@__PURE__*/ new Vector3(); + const _startEnd = /*@__PURE__*/ new Vector3(); + + class Line3 { + + constructor( start, end ) { + + this.start = ( start !== undefined ) ? start : new Vector3(); + this.end = ( end !== undefined ) ? end : new Vector3(); + + } + + set( start, end ) { + + this.start.copy( start ); + this.end.copy( end ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( line ) { + + this.start.copy( line.start ); + this.end.copy( line.end ); + + return this; + + } + + getCenter( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .getCenter() target is now required' ); + target = new Vector3(); + + } + + return target.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); + + } + + delta( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .delta() target is now required' ); + target = new Vector3(); + + } + + return target.subVectors( this.end, this.start ); + + } + + distanceSq() { + + return this.start.distanceToSquared( this.end ); + + } + + distance() { + + return this.start.distanceTo( this.end ); + + } + + at( t, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .at() target is now required' ); + target = new Vector3(); + + } + + return this.delta( target ).multiplyScalar( t ).add( this.start ); + + } + + closestPointToPointParameter( point, clampToLine ) { + + _startP.subVectors( point, this.start ); + _startEnd.subVectors( this.end, this.start ); + + const startEnd2 = _startEnd.dot( _startEnd ); + const startEnd_startP = _startEnd.dot( _startP ); + + let t = startEnd_startP / startEnd2; + + if ( clampToLine ) { + + t = MathUtils.clamp( t, 0, 1 ); + + } + + return t; + + } + + closestPointToPoint( point, clampToLine, target ) { + + const t = this.closestPointToPointParameter( point, clampToLine ); + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + return this.delta( target ).multiplyScalar( t ).add( this.start ); + + } + + applyMatrix4( matrix ) { + + this.start.applyMatrix4( matrix ); + this.end.applyMatrix4( matrix ); + + return this; + + } + + equals( line ) { + + return line.start.equals( this.start ) && line.end.equals( this.end ); + + } + + } + + function ImmediateRenderObject( material ) { + + Object3D.call( this ); + + this.material = material; + this.render = function ( /* renderCallback */ ) {}; + + this.hasPositions = false; + this.hasNormals = false; + this.hasColors = false; + this.hasUvs = false; + + this.positionArray = null; + this.normalArray = null; + this.colorArray = null; + this.uvArray = null; + + this.count = 0; + + } + + ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); + ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; + + ImmediateRenderObject.prototype.isImmediateRenderObject = true; + + const _vector$9 = /*@__PURE__*/ new Vector3(); + + class SpotLightHelper extends Object3D { + + constructor( light, color ) { + + super(); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + const geometry = new BufferGeometry(); + + const 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 + ]; + + for ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { + + const p1 = ( i / l ) * Math.PI * 2; + const p2 = ( j / l ) * Math.PI * 2; + + positions.push( + Math.cos( p1 ), Math.sin( p1 ), 1, + Math.cos( p2 ), Math.sin( p2 ), 1 + ); + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); + + this.cone = new LineSegments( geometry, material ); + this.add( this.cone ); + + this.update(); + + } + + dispose() { + + this.cone.geometry.dispose(); + this.cone.material.dispose(); + + } + + update() { + + this.light.updateMatrixWorld(); + + const coneLength = this.light.distance ? this.light.distance : 1000; + const coneWidth = coneLength * Math.tan( this.light.angle ); + + this.cone.scale.set( coneWidth, coneWidth, coneLength ); + + _vector$9.setFromMatrixPosition( this.light.target.matrixWorld ); + + this.cone.lookAt( _vector$9 ); + + if ( this.color !== undefined ) { + + this.cone.material.color.set( this.color ); + + } else { + + this.cone.material.color.copy( this.light.color ); + + } + + } + + } + + const _vector$a = /*@__PURE__*/ new Vector3(); + const _boneMatrix = /*@__PURE__*/ new Matrix4(); + const _matrixWorldInv = /*@__PURE__*/ new Matrix4(); + + + class SkeletonHelper extends LineSegments { + + constructor( object ) { + + const bones = getBoneList( object ); + + const geometry = new BufferGeometry(); + + const vertices = []; + const colors = []; + + const color1 = new Color( 0, 0, 1 ); + const color2 = new Color( 0, 1, 0 ); + + for ( let i = 0; i < bones.length; i ++ ) { + + const bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + vertices.push( 0, 0, 0 ); + vertices.push( 0, 0, 0 ); + colors.push( color1.r, color1.g, color1.b ); + colors.push( color2.r, color2.g, color2.b ); + + } + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } ); + + super( geometry, material ); + + this.type = 'SkeletonHelper'; + this.isSkeletonHelper = true; + + this.root = object; + this.bones = bones; + + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + + } + + updateMatrixWorld( force ) { + + const bones = this.bones; + + const geometry = this.geometry; + const position = geometry.getAttribute( 'position' ); + + _matrixWorldInv.copy( this.root.matrixWorld ).invert(); + + for ( let i = 0, j = 0; i < bones.length; i ++ ) { + + const bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld ); + _vector$a.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j, _vector$a.x, _vector$a.y, _vector$a.z ); + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld ); + _vector$a.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j + 1, _vector$a.x, _vector$a.y, _vector$a.z ); + + j += 2; + + } + + } + + geometry.getAttribute( 'position' ).needsUpdate = true; + + super.updateMatrixWorld( force ); + + } + + } + + + function getBoneList( object ) { + + const boneList = []; + + if ( object && object.isBone ) { + + boneList.push( object ); + + } + + for ( let i = 0; i < object.children.length; i ++ ) { + + boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); + + } + + return boneList; + + } + + class PointLightHelper extends Mesh { + + constructor( light, sphereSize, color ) { + + const geometry = new SphereBufferGeometry( sphereSize, 4, 2 ); + const material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); + + super( geometry, material ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.color = color; + + this.type = 'PointLightHelper'; + + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + + this.update(); + + + /* + // TODO: delete this comment? + const distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 ); + const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); + + this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); + this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); + + const d = light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.scale.set( d, d, d ); + + } + + this.add( this.lightDistance ); + */ + + } + + dispose() { + + this.geometry.dispose(); + this.material.dispose(); + + } + + update() { + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + this.material.color.copy( this.light.color ); + + } + + /* + const d = this.light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.visible = true; + this.lightDistance.scale.set( d, d, d ); + + } + */ + + } + + } + + const _vector$b = /*@__PURE__*/ new Vector3(); + const _color1 = /*@__PURE__*/ new Color(); + const _color2 = /*@__PURE__*/ new Color(); + + class HemisphereLightHelper extends Object3D { + + constructor( light, size, color ) { + + super(); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + const geometry = new OctahedronBufferGeometry( size ); + geometry.rotateY( Math.PI * 0.5 ); + + this.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); + if ( this.color === undefined ) this.material.vertexColors = true; + + const position = geometry.getAttribute( 'position' ); + const colors = new Float32Array( position.count * 3 ); + + geometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) ); + + this.add( new Mesh( geometry, this.material ) ); + + this.update(); + + } + + dispose() { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + + } + + update() { + + const mesh = this.children[ 0 ]; + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + const colors = mesh.geometry.getAttribute( 'color' ); + + _color1.copy( this.light.color ); + _color2.copy( this.light.groundColor ); + + for ( let i = 0, l = colors.count; i < l; i ++ ) { + + const color = ( i < ( l / 2 ) ) ? _color1 : _color2; + + colors.setXYZ( i, color.r, color.g, color.b ); + + } + + colors.needsUpdate = true; + + } + + mesh.lookAt( _vector$b.setFromMatrixPosition( this.light.matrixWorld ).negate() ); + + } + + } + + class GridHelper extends LineSegments { + + constructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) { + + color1 = new Color( color1 ); + color2 = new Color( color2 ); + + const center = divisions / 2; + const step = size / divisions; + const halfSize = size / 2; + + const vertices = [], colors = []; + + for ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { + + vertices.push( - halfSize, 0, k, halfSize, 0, k ); + vertices.push( k, 0, - halfSize, k, 0, halfSize ); + + const color = i === center ? color1 : color2; + + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + + } + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + super( geometry, material ); + + this.type = 'GridHelper'; + + } + + } + + class PolarGridHelper extends LineSegments { + + constructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) { + + color1 = new Color( color1 ); + color2 = new Color( color2 ); + + const vertices = []; + const colors = []; + + // create the radials + + for ( let i = 0; i <= radials; i ++ ) { + + const v = ( i / radials ) * ( Math.PI * 2 ); + + const x = Math.sin( v ) * radius; + const z = Math.cos( v ) * radius; + + vertices.push( 0, 0, 0 ); + vertices.push( x, 0, z ); + + const color = ( i & 1 ) ? color1 : color2; + + colors.push( color.r, color.g, color.b ); + colors.push( color.r, color.g, color.b ); + + } + + // create the circles + + for ( let i = 0; i <= circles; i ++ ) { + + const color = ( i & 1 ) ? color1 : color2; + + const r = radius - ( radius / circles * i ); + + for ( let j = 0; j < divisions; j ++ ) { + + // first vertex + + let v = ( j / divisions ) * ( Math.PI * 2 ); + + let x = Math.sin( v ) * r; + let z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + // second vertex + + v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + } + + } + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + super( geometry, material ); + + this.type = 'PolarGridHelper'; + + } + + } + + const _v1$6 = /*@__PURE__*/ new Vector3(); + const _v2$3 = /*@__PURE__*/ new Vector3(); + const _v3$1 = /*@__PURE__*/ new Vector3(); + + class DirectionalLightHelper extends Object3D { + + constructor( light, size, color ) { + + super(); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + if ( size === undefined ) size = 1; + + let geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( [ + - size, size, 0, + size, size, 0, + size, - size, 0, + - size, - size, 0, + - size, size, 0 + ], 3 ) ); + + const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); + + this.lightPlane = new Line( geometry, material ); + this.add( this.lightPlane ); + + geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); + + this.targetLine = new Line( geometry, material ); + this.add( this.targetLine ); + + this.update(); + + } + + dispose() { + + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + + } + + update() { + + _v1$6.setFromMatrixPosition( this.light.matrixWorld ); + _v2$3.setFromMatrixPosition( this.light.target.matrixWorld ); + _v3$1.subVectors( _v2$3, _v1$6 ); + + this.lightPlane.lookAt( _v2$3 ); + + if ( this.color !== undefined ) { + + this.lightPlane.material.color.set( this.color ); + this.targetLine.material.color.set( this.color ); + + } else { + + this.lightPlane.material.color.copy( this.light.color ); + this.targetLine.material.color.copy( this.light.color ); + + } + + this.targetLine.lookAt( _v2$3 ); + this.targetLine.scale.z = _v3$1.length(); + + } + + } + + const _vector$c = /*@__PURE__*/ new Vector3(); + const _camera = /*@__PURE__*/ new Camera(); + + /** + * - shows frustum, line of sight and up of the camera + * - suitable for fast updates + * - based on frustum visualization in lightgl.js shadowmap example + * http://evanw.github.com/lightgl.js/tests/shadowmap.html + */ + + class CameraHelper extends LineSegments { + + constructor( camera ) { + + const geometry = new BufferGeometry(); + const material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } ); + + const vertices = []; + const colors = []; + + const pointMap = {}; + + // colors + + const colorFrustum = new Color( 0xffaa00 ); + const colorCone = new Color( 0xff0000 ); + const colorUp = new Color( 0x00aaff ); + const colorTarget = new Color( 0xffffff ); + const colorCross = new Color( 0x333333 ); + + // near + + addLine( 'n1', 'n2', colorFrustum ); + addLine( 'n2', 'n4', colorFrustum ); + addLine( 'n4', 'n3', colorFrustum ); + addLine( 'n3', 'n1', colorFrustum ); + + // far + + addLine( 'f1', 'f2', colorFrustum ); + addLine( 'f2', 'f4', colorFrustum ); + addLine( 'f4', 'f3', colorFrustum ); + addLine( 'f3', 'f1', colorFrustum ); + + // sides + + addLine( 'n1', 'f1', colorFrustum ); + addLine( 'n2', 'f2', colorFrustum ); + addLine( 'n3', 'f3', colorFrustum ); + addLine( 'n4', 'f4', colorFrustum ); + + // cone + + addLine( 'p', 'n1', colorCone ); + addLine( 'p', 'n2', colorCone ); + addLine( 'p', 'n3', colorCone ); + addLine( 'p', 'n4', colorCone ); + + // up + + addLine( 'u1', 'u2', colorUp ); + addLine( 'u2', 'u3', colorUp ); + addLine( 'u3', 'u1', colorUp ); + + // target + + addLine( 'c', 't', colorTarget ); + addLine( 'p', 'c', colorCross ); + + // cross + + addLine( 'cn1', 'cn2', colorCross ); + addLine( 'cn3', 'cn4', colorCross ); + + addLine( 'cf1', 'cf2', colorCross ); + addLine( 'cf3', 'cf4', colorCross ); + + function addLine( a, b, color ) { + + addPoint( a, color ); + addPoint( b, color ); + + } + + function addPoint( id, color ) { + + vertices.push( 0, 0, 0 ); + colors.push( color.r, color.g, color.b ); + + if ( pointMap[ id ] === undefined ) { + + pointMap[ id ] = []; + + } + + pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + super( geometry, material ); + + this.type = 'CameraHelper'; + + this.camera = camera; + if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); + + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + + this.pointMap = pointMap; + + this.update(); + + } + + update() { + + const geometry = this.geometry; + const pointMap = this.pointMap; + + const w = 1, h = 1; + + // we need just camera projection matrix inverse + // world matrix must be identity + + _camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse ); + + // center / target + + setPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 ); + setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 ); + + // near + + setPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 ); + setPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 ); + setPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 ); + setPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 ); + + // far + + setPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 ); + setPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 ); + setPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 ); + setPoint( 'f4', pointMap, geometry, _camera, w, h, 1 ); + + // up + + setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 ); + setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 ); + setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 ); + + // cross + + setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 ); + setPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 ); + setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 ); + setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 ); + + setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 ); + setPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 ); + setPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 ); + setPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 ); + + geometry.getAttribute( 'position' ).needsUpdate = true; + + } + + } + + + function setPoint( point, pointMap, geometry, camera, x, y, z ) { + + _vector$c.set( x, y, z ).unproject( camera ); + + const points = pointMap[ point ]; + + if ( points !== undefined ) { + + const position = geometry.getAttribute( 'position' ); + + for ( let i = 0, l = points.length; i < l; i ++ ) { + + position.setXYZ( points[ i ], _vector$c.x, _vector$c.y, _vector$c.z ); + + } + + } + + } + + const _box$3 = /*@__PURE__*/ new Box3(); + + class BoxHelper extends LineSegments { + + constructor( object, color = 0xffff00 ) { + + const 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 ] ); + const positions = new Float32Array( 8 * 3 ); + + const geometry = new BufferGeometry(); + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) ); + + super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.object = object; + this.type = 'BoxHelper'; + + this.matrixAutoUpdate = false; + + this.update(); + + } + + update( object ) { + + if ( object !== undefined ) { + + console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); + + } + + if ( this.object !== undefined ) { + + _box$3.setFromObject( this.object ); + + } + + if ( _box$3.isEmpty() ) return; + + const min = _box$3.min; + const max = _box$3.max; + + /* + 5____4 + 1/___0/| + | 6__|_7 + 2/___3/ + + 0: max.x, max.y, max.z + 1: min.x, max.y, max.z + 2: min.x, min.y, max.z + 3: max.x, min.y, max.z + 4: max.x, max.y, min.z + 5: min.x, max.y, min.z + 6: min.x, min.y, min.z + 7: max.x, min.y, min.z + */ + + const position = this.geometry.attributes.position; + const array = position.array; + + array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; + array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; + array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; + array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; + array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; + array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; + array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; + array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; + + position.needsUpdate = true; + + this.geometry.computeBoundingSphere(); + + + } + + setFromObject( object ) { + + this.object = object; + this.update(); + + return this; + + } + + copy( source ) { + + LineSegments.prototype.copy.call( this, source ); + + this.object = source.object; + + return this; + + } + + } + + class Box3Helper extends LineSegments { + + constructor( box, color = 0xffff00 ) { + + const 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 ] ); + + const 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 ]; + + const geometry = new BufferGeometry(); + + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.box = box; + + this.type = 'Box3Helper'; + + this.geometry.computeBoundingSphere(); + + } + + updateMatrixWorld( force ) { + + const box = this.box; + + if ( box.isEmpty() ) return; + + box.getCenter( this.position ); + + box.getSize( this.scale ); + + this.scale.multiplyScalar( 0.5 ); + + super.updateMatrixWorld( force ); + + } + + } + + class PlaneHelper extends Line { + + constructor( plane, size = 1, hex = 0xffff00 ) { + + const color = hex; + + const 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 ]; + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + geometry.computeBoundingSphere(); + + super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.type = 'PlaneHelper'; + + this.plane = plane; + + this.size = size; + + const positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ]; + + const geometry2 = new BufferGeometry(); + geometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); + geometry2.computeBoundingSphere(); + + this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) ); + + } + + updateMatrixWorld( force ) { + + let scale = - this.plane.constant; + + if ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter + + this.scale.set( 0.5 * this.size, 0.5 * this.size, scale ); + + this.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here + + this.lookAt( this.plane.normal ); + + super.updateMatrixWorld( force ); + + } + + } + + const _axis = /*@__PURE__*/ new Vector3(); + let _lineGeometry, _coneGeometry; + + class ArrowHelper extends Object3D { + + constructor( dir, origin, length, color, headLength, headWidth ) { + + super(); + // dir is assumed to be normalized + + this.type = 'ArrowHelper'; + + if ( dir === undefined ) dir = new Vector3( 0, 0, 1 ); + if ( origin === undefined ) origin = new Vector3( 0, 0, 0 ); + if ( length === undefined ) length = 1; + if ( color === undefined ) color = 0xffff00; + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + if ( _lineGeometry === undefined ) { + + _lineGeometry = new BufferGeometry(); + _lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); + + _coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 ); + _coneGeometry.translate( 0, - 0.5, 0 ); + + } + + this.position.copy( origin ); + + this.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + this.line.matrixAutoUpdate = false; + this.add( this.line ); + + this.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) ); + this.cone.matrixAutoUpdate = false; + this.add( this.cone ); + + this.setDirection( dir ); + this.setLength( length, headLength, headWidth ); + + } + + setDirection( dir ) { + + // dir is assumed to be normalized + + if ( dir.y > 0.99999 ) { + + this.quaternion.set( 0, 0, 0, 1 ); + + } else if ( dir.y < - 0.99999 ) { + + this.quaternion.set( 1, 0, 0, 0 ); + + } else { + + _axis.set( dir.z, 0, - dir.x ).normalize(); + + const radians = Math.acos( dir.y ); + + this.quaternion.setFromAxisAngle( _axis, radians ); + + } + + } + + setLength( length, headLength, headWidth ) { + + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + this.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458 + this.line.updateMatrix(); + + this.cone.scale.set( headWidth, headLength, headWidth ); + this.cone.position.y = length; + this.cone.updateMatrix(); + + } + + setColor( color ) { + + this.line.material.color.set( color ); + this.cone.material.color.set( color ); + + } + + copy( source ) { + + super.copy( source, false ); + + this.line.copy( source.line ); + this.cone.copy( source.cone ); + + return this; + + } + + } + + class AxesHelper extends LineSegments { + + constructor( size = 1 ) { + + const vertices = [ + 0, 0, 0, size, 0, 0, + 0, 0, 0, 0, size, 0, + 0, 0, 0, 0, 0, size + ]; + + const colors = [ + 1, 0, 0, 1, 0.6, 0, + 0, 1, 0, 0.6, 1, 0, + 0, 0, 1, 0, 0.6, 1 + ]; + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + super( geometry, material ); + + this.type = 'AxesHelper'; + + } + + } + + const _floatView = new Float32Array( 1 ); + const _int32View = new Int32Array( _floatView.buffer ); + + const DataUtils = { + + // Converts float32 to float16 (stored as uint16 value). + + toHalfFloat: function ( val ) { + + // Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410 + + /* This method is faster than the OpenEXR implementation (very often + * used, eg. in Ogre), with the additional benefit of rounding, inspired + * by James Tursa?s half-precision code. */ + + _floatView[ 0 ] = val; + const x = _int32View[ 0 ]; + + let bits = ( x >> 16 ) & 0x8000; /* Get the sign */ + let m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */ + const e = ( x >> 23 ) & 0xff; /* Using int is faster here */ + + /* If zero, or denormal, or exponent underflows too much for a denormal + * half, return signed zero. */ + if ( e < 103 ) return bits; + + /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */ + if ( e > 142 ) { + + bits |= 0x7c00; + /* If exponent was 0xff and one mantissa bit was set, it means NaN, + * not Inf, so make sure we set one mantissa bit too. */ + bits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff ); + return bits; + + } + + /* If exponent underflows but not too much, return a denormal */ + if ( e < 113 ) { + + m |= 0x0800; + /* Extra rounding may overflow and set mantissa to 0 and exponent + * to 1, which is OK. */ + bits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 ); + return bits; + + } + + bits |= ( ( e - 112 ) << 10 ) | ( m >> 1 ); + /* Extra rounding. An overflow will set mantissa to 0 and increment + * the exponent, which is OK. */ + bits += m & 1; + return bits; + + } + + }; + + const LOD_MIN = 4; + const LOD_MAX = 8; + const SIZE_MAX = Math.pow( 2, LOD_MAX ); + + // The standard deviations (radians) associated with the extra mips. These are + // chosen to approximate a Trowbridge-Reitz distribution function times the + // geometric shadowing function. These sigma values squared must match the + // variance #defines in cube_uv_reflection_fragment.glsl.js. + const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ]; + + const TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; + + // The maximum length of the blur for loop. Smaller sigmas will use fewer + // samples and exit early, but not recompile the shader. + const MAX_SAMPLES = 20; + + const ENCODINGS = { + [ LinearEncoding ]: 0, + [ sRGBEncoding ]: 1, + [ RGBEEncoding ]: 2, + [ RGBM7Encoding ]: 3, + [ RGBM16Encoding ]: 4, + [ RGBDEncoding ]: 5, + [ GammaEncoding ]: 6 + }; + + const _flatCamera = /*@__PURE__*/ new OrthographicCamera(); + const { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes(); + const _clearColor = /*@__PURE__*/ new Color(); + let _oldTarget = null; + + // Golden Ratio + const PHI = ( 1 + Math.sqrt( 5 ) ) / 2; + const INV_PHI = 1 / PHI; + + // Vertices of a dodecahedron (except the opposites, which represent the + // same axis), used as axis directions evenly spread on a sphere. + const _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 ) ]; + + /** + * This class generates a Prefiltered, Mipmapped Radiance Environment Map + * (PMREM) from a cubeMap environment texture. This allows different levels of + * blur to be quickly accessed based on material roughness. It is packed into a + * special CubeUV format that allows us to perform custom interpolation so that + * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap + * chain, it only goes down to the LOD_MIN level (above), and then creates extra + * even more filtered 'mips' at the same LOD_MIN resolution, associated with + * higher roughness levels. In this way we maintain resolution to smoothly + * interpolate diffuse lighting while limiting sampling computation. + */ + + class PMREMGenerator { + + constructor( renderer ) { + + this._renderer = renderer; + this._pingPongRenderTarget = null; + + this._blurMaterial = _getBlurShader( MAX_SAMPLES ); + this._equirectShader = null; + this._cubemapShader = null; + + this._compileMaterial( this._blurMaterial ); + + } + + /** + * Generates a PMREM from a supplied Scene, which can be faster than using an + * image if networking bandwidth is low. Optional sigma specifies a blur radius + * in radians to be applied to the scene before PMREM generation. Optional near + * and far planes ensure the scene is rendered in its entirety (the cubeCamera + * is placed at the origin). + */ + fromScene( scene, sigma = 0, near = 0.1, far = 100 ) { + + _oldTarget = this._renderer.getRenderTarget(); + const cubeUVRenderTarget = this._allocateTargets(); + + this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget ); + if ( sigma > 0 ) { + + this._blur( cubeUVRenderTarget, 0, 0, sigma ); + + } + + this._applyPMREM( cubeUVRenderTarget ); + this._cleanup( cubeUVRenderTarget ); + + return cubeUVRenderTarget; + + } + + /** + * Generates a PMREM from an equirectangular texture, which can be either LDR + * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512), + * as this matches best with the 256 x 256 cubemap output. + */ + fromEquirectangular( equirectangular ) { + + return this._fromTexture( equirectangular ); + + } + + /** + * Generates a PMREM from an cubemap texture, which can be either LDR + * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256, + * as this matches best with the 256 x 256 cubemap output. + */ + fromCubemap( cubemap ) { + + return this._fromTexture( cubemap ); + + } + + /** + * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileCubemapShader() { + + if ( this._cubemapShader === null ) { + + this._cubemapShader = _getCubemapShader(); + this._compileMaterial( this._cubemapShader ); + + } + + } + + /** + * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileEquirectangularShader() { + + if ( this._equirectShader === null ) { + + this._equirectShader = _getEquirectShader(); + this._compileMaterial( this._equirectShader ); + + } + + } + + /** + * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, + * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on + * one of them will cause any others to also become unusable. + */ + dispose() { + + this._blurMaterial.dispose(); + + if ( this._cubemapShader !== null ) this._cubemapShader.dispose(); + if ( this._equirectShader !== null ) this._equirectShader.dispose(); + + for ( let i = 0; i < _lodPlanes.length; i ++ ) { + + _lodPlanes[ i ].dispose(); + + } + + } + + // private interface + + _cleanup( outputTarget ) { + + this._pingPongRenderTarget.dispose(); + this._renderer.setRenderTarget( _oldTarget ); + outputTarget.scissorTest = false; + _setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height ); + + } + + _fromTexture( texture ) { + + _oldTarget = this._renderer.getRenderTarget(); + const cubeUVRenderTarget = this._allocateTargets( texture ); + this._textureToCubeUV( texture, cubeUVRenderTarget ); + this._applyPMREM( cubeUVRenderTarget ); + this._cleanup( cubeUVRenderTarget ); + + return cubeUVRenderTarget; + + } + + _allocateTargets( texture ) { // warning: null texture is valid + + const params = { + magFilter: NearestFilter, + minFilter: NearestFilter, + generateMipmaps: false, + type: UnsignedByteType, + format: RGBEFormat, + encoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding, + depthBuffer: false + }; + + const cubeUVRenderTarget = _createRenderTarget( params ); + cubeUVRenderTarget.depthBuffer = texture ? false : true; + this._pingPongRenderTarget = _createRenderTarget( params ); + return cubeUVRenderTarget; + + } + + _compileMaterial( material ) { + + const tmpMesh = new Mesh( _lodPlanes[ 0 ], material ); + this._renderer.compile( tmpMesh, _flatCamera ); + + } + + _sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) { + + const fov = 90; + const aspect = 1; + const cubeCamera = new PerspectiveCamera( fov, aspect, near, far ); + const upSign = [ 1, - 1, 1, 1, 1, 1 ]; + const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ]; + const renderer = this._renderer; + + const outputEncoding = renderer.outputEncoding; + const toneMapping = renderer.toneMapping; + renderer.getClearColor( _clearColor ); + const clearAlpha = renderer.getClearAlpha(); + + renderer.toneMapping = NoToneMapping; + renderer.outputEncoding = LinearEncoding; + + let background = scene.background; + if ( background && background.isColor ) { + + background.convertSRGBToLinear(); + // Convert linear to RGBE + const maxComponent = Math.max( background.r, background.g, background.b ); + const fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 ); + background = background.multiplyScalar( Math.pow( 2.0, - fExp ) ); + const alpha = ( fExp + 128.0 ) / 255.0; + renderer.setClearColor( background, alpha ); + scene.background = null; + + } + + for ( let i = 0; i < 6; i ++ ) { + + const col = i % 3; + if ( col == 0 ) { + + cubeCamera.up.set( 0, upSign[ i ], 0 ); + cubeCamera.lookAt( forwardSign[ i ], 0, 0 ); + + } else if ( col == 1 ) { + + cubeCamera.up.set( 0, 0, upSign[ i ] ); + cubeCamera.lookAt( 0, forwardSign[ i ], 0 ); + + } else { + + cubeCamera.up.set( 0, upSign[ i ], 0 ); + cubeCamera.lookAt( 0, 0, forwardSign[ i ] ); + + } + + _setViewport( cubeUVRenderTarget, + col * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX ); + renderer.setRenderTarget( cubeUVRenderTarget ); + renderer.render( scene, cubeCamera ); + + } + + renderer.toneMapping = toneMapping; + renderer.outputEncoding = outputEncoding; + renderer.setClearColor( _clearColor, clearAlpha ); + + } + + _textureToCubeUV( texture, cubeUVRenderTarget ) { + + const renderer = this._renderer; + + if ( texture.isCubeTexture ) { + + if ( this._cubemapShader == null ) { + + this._cubemapShader = _getCubemapShader(); + + } + + } else { + + if ( this._equirectShader == null ) { + + this._equirectShader = _getEquirectShader(); + + } + + } + + const material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader; + const mesh = new Mesh( _lodPlanes[ 0 ], material ); + + const uniforms = material.uniforms; + + uniforms[ 'envMap' ].value = texture; + + if ( ! texture.isCubeTexture ) { + + uniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height ); + + } + + uniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ]; + uniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ]; + + _setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX ); + + renderer.setRenderTarget( cubeUVRenderTarget ); + renderer.render( mesh, _flatCamera ); + + } + + _applyPMREM( cubeUVRenderTarget ) { + + const renderer = this._renderer; + const autoClear = renderer.autoClear; + renderer.autoClear = false; + + for ( let i = 1; i < TOTAL_LODS; i ++ ) { + + const sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] ); + + const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ]; + + this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis ); + + } + + renderer.autoClear = autoClear; + + } + + /** + * This is a two-pass Gaussian blur for a cubemap. Normally this is done + * vertically and horizontally, but this breaks down on a cube. Here we apply + * the blur latitudinally (around the poles), and then longitudinally (towards + * the poles) to approximate the orthogonally-separable blur. It is least + * accurate at the poles, but still does a decent job. + */ + _blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) { + + const pingPongRenderTarget = this._pingPongRenderTarget; + + this._halfBlur( + cubeUVRenderTarget, + pingPongRenderTarget, + lodIn, + lodOut, + sigma, + 'latitudinal', + poleAxis ); + + this._halfBlur( + pingPongRenderTarget, + cubeUVRenderTarget, + lodOut, + lodOut, + sigma, + 'longitudinal', + poleAxis ); + + } + + _halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) { + + const renderer = this._renderer; + const blurMaterial = this._blurMaterial; + + if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) { + + console.error( + 'blur direction must be either latitudinal or longitudinal!' ); + + } + + // Number of standard deviations at which to cut off the discrete approximation. + const STANDARD_DEVIATIONS = 3; + + const blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial ); + const blurUniforms = blurMaterial.uniforms; + + const pixels = _sizeLods[ lodIn ] - 1; + const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 ); + const sigmaPixels = sigmaRadians / radiansPerPixel; + const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES; + + if ( samples > MAX_SAMPLES ) { + + console.warn( `sigmaRadians, ${ + sigmaRadians}, is too large and will clip, as it requested ${ + samples} samples when the maximum is set to ${MAX_SAMPLES}` ); + + } + + const weights = []; + let sum = 0; + + for ( let i = 0; i < MAX_SAMPLES; ++ i ) { + + const x = i / sigmaPixels; + const weight = Math.exp( - x * x / 2 ); + weights.push( weight ); + + if ( i == 0 ) { + + sum += weight; + + } else if ( i < samples ) { + + sum += 2 * weight; + + } + + } + + for ( let i = 0; i < weights.length; i ++ ) { + + weights[ i ] = weights[ i ] / sum; + + } + + blurUniforms[ 'envMap' ].value = targetIn.texture; + blurUniforms[ 'samples' ].value = samples; + blurUniforms[ 'weights' ].value = weights; + blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal'; + + if ( poleAxis ) { + + blurUniforms[ 'poleAxis' ].value = poleAxis; + + } + + blurUniforms[ 'dTheta' ].value = radiansPerPixel; + blurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn; + blurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; + blurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; + + const outputSize = _sizeLods[ lodOut ]; + const x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize ); + const y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 ); + + _setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize ); + renderer.setRenderTarget( targetOut ); + renderer.render( blurMesh, _flatCamera ); + + } + + } + + function _isLDR( texture ) { + + if ( texture === undefined || texture.type !== UnsignedByteType ) return false; + + return texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding; + + } + + function _createPlanes() { + + const _lodPlanes = []; + const _sizeLods = []; + const _sigmas = []; + + let lod = LOD_MAX; + + for ( let i = 0; i < TOTAL_LODS; i ++ ) { + + const sizeLod = Math.pow( 2, lod ); + _sizeLods.push( sizeLod ); + let sigma = 1.0 / sizeLod; + + if ( i > LOD_MAX - LOD_MIN ) { + + sigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ]; + + } else if ( i == 0 ) { + + sigma = 0; + + } + + _sigmas.push( sigma ); + + const texelSize = 1.0 / ( sizeLod - 1 ); + const min = - texelSize / 2; + const max = 1 + texelSize / 2; + const uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ]; + + const cubeFaces = 6; + const vertices = 6; + const positionSize = 3; + const uvSize = 2; + const faceIndexSize = 1; + + const position = new Float32Array( positionSize * vertices * cubeFaces ); + const uv = new Float32Array( uvSize * vertices * cubeFaces ); + const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces ); + + for ( let face = 0; face < cubeFaces; face ++ ) { + + const x = ( face % 3 ) * 2 / 3 - 1; + const y = face > 2 ? 0 : - 1; + const 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 + ]; + position.set( coordinates, positionSize * vertices * face ); + uv.set( uv1, uvSize * vertices * face ); + const fill = [ face, face, face, face, face, face ]; + faceIndex.set( fill, faceIndexSize * vertices * face ); + + } + + const planes = new BufferGeometry(); + planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) ); + planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) ); + planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) ); + _lodPlanes.push( planes ); + + if ( lod > LOD_MIN ) { + + lod --; + + } + + } + + return { _lodPlanes, _sizeLods, _sigmas }; + + } + + function _createRenderTarget( params ) { + + const cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params ); + cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; + cubeUVRenderTarget.texture.name = 'PMREM.cubeUv'; + cubeUVRenderTarget.scissorTest = true; + return cubeUVRenderTarget; + + } + + function _setViewport( target, x, y, width, height ) { + + target.viewport.set( x, y, width, height ); + target.scissor.set( x, y, width, height ); + + } + + function _getBlurShader( maxSamples ) { + + const weights = new Float32Array( maxSamples ); + const poleAxis = new Vector3( 0, 1, 0 ); + const shaderMaterial = new RawShaderMaterial( { + + name: 'SphericalGaussianBlur', + + defines: { 'n': maxSamples }, + + uniforms: { + 'envMap': { value: null }, + 'samples': { value: 1 }, + 'weights': { value: weights }, + 'latitudinal': { value: false }, + 'dTheta': { value: 0 }, + 'mipInt': { value: 0 }, + 'poleAxis': { value: poleAxis }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + uniform int samples; + uniform float weights[ n ]; + uniform bool latitudinal; + uniform float dTheta; + uniform float mipInt; + uniform vec3 poleAxis; + + ${ _getEncodings() } + + #define ENVMAP_TYPE_CUBE_UV + #include + + vec3 getSample( float theta, vec3 axis ) { + + float cosTheta = cos( theta ); + // Rodrigues' axis-angle rotation + vec3 sampleDirection = vOutputDirection * cosTheta + + cross( axis, vOutputDirection ) * sin( theta ) + + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); + + return bilinearCubeUV( envMap, sampleDirection, mipInt ); + + } + + void main() { + + vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); + + if ( all( equal( axis, vec3( 0.0 ) ) ) ) { + + axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); + + } + + axis = normalize( axis ); + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); + + for ( int i = 1; i < n; i++ ) { + + if ( i >= samples ) { + + break; + + } + + float theta = dTheta * float( i ); + gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); + gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); + + } + + gl_FragColor = linearToOutputTexel( gl_FragColor ); + + } + `, + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + + } + + function _getEquirectShader() { + + const texelSize = new Vector2( 1, 1 ); + const shaderMaterial = new RawShaderMaterial( { + + name: 'EquirectangularToCubeUV', + + uniforms: { + 'envMap': { value: null }, + 'texelSize': { value: texelSize }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + uniform vec2 texelSize; + + ${ _getEncodings() } + + #include + + void main() { + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + + vec3 outputDirection = normalize( vOutputDirection ); + vec2 uv = equirectUv( outputDirection ); + + vec2 f = fract( uv / texelSize - 0.5 ); + uv -= f * texelSize; + vec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + uv.x += texelSize.x; + vec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + uv.y += texelSize.y; + vec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + uv.x -= texelSize.x; + vec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + + vec3 tm = mix( tl, tr, f.x ); + vec3 bm = mix( bl, br, f.x ); + gl_FragColor.rgb = mix( tm, bm, f.y ); + + gl_FragColor = linearToOutputTexel( gl_FragColor ); + + } + `, + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + + } + + function _getCubemapShader() { + + const shaderMaterial = new RawShaderMaterial( { + + name: 'CubemapToCubeUV', + + uniforms: { + 'envMap': { value: null }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform samplerCube envMap; + + ${ _getEncodings() } + + void main() { + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + gl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb; + gl_FragColor = linearToOutputTexel( gl_FragColor ); + + } + `, + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + + } + + function _getCommonVertexShader() { + + return /* glsl */` + + precision mediump float; + precision mediump int; + + attribute vec3 position; + attribute vec2 uv; + attribute float faceIndex; + + varying vec3 vOutputDirection; + + // RH coordinate system; PMREM face-indexing convention + vec3 getDirection( vec2 uv, float face ) { + + uv = 2.0 * uv - 1.0; + + vec3 direction = vec3( uv, 1.0 ); + + if ( face == 0.0 ) { + + direction = direction.zyx; // ( 1, v, u ) pos x + + } else if ( face == 1.0 ) { + + direction = direction.xzy; + direction.xz *= -1.0; // ( -u, 1, -v ) pos y + + } else if ( face == 2.0 ) { + + direction.x *= -1.0; // ( -u, v, 1 ) pos z + + } else if ( face == 3.0 ) { + + direction = direction.zyx; + direction.xz *= -1.0; // ( -1, v, -u ) neg x + + } else if ( face == 4.0 ) { + + direction = direction.xzy; + direction.xy *= -1.0; // ( -u, -1, v ) neg y + + } else if ( face == 5.0 ) { + + direction.z *= -1.0; // ( u, v, -1 ) neg z + + } + + return direction; + + } + + void main() { + + vOutputDirection = getDirection( uv, faceIndex ); + gl_Position = vec4( position, 1.0 ); + + } + `; + + } + + function _getEncodings() { + + return /* glsl */` + + uniform int inputEncoding; + uniform int outputEncoding; + + #include + + vec4 inputTexelToLinear( vec4 value ) { + + if ( inputEncoding == 0 ) { + + return value; + + } else if ( inputEncoding == 1 ) { + + return sRGBToLinear( value ); + + } else if ( inputEncoding == 2 ) { + + return RGBEToLinear( value ); + + } else if ( inputEncoding == 3 ) { + + return RGBMToLinear( value, 7.0 ); + + } else if ( inputEncoding == 4 ) { + + return RGBMToLinear( value, 16.0 ); + + } else if ( inputEncoding == 5 ) { + + return RGBDToLinear( value, 256.0 ); + + } else { + + return GammaToLinear( value, 2.2 ); + + } + + } + + vec4 linearToOutputTexel( vec4 value ) { + + if ( outputEncoding == 0 ) { + + return value; + + } else if ( outputEncoding == 1 ) { + + return LinearTosRGB( value ); + + } else if ( outputEncoding == 2 ) { + + return LinearToRGBE( value ); + + } else if ( outputEncoding == 3 ) { + + return LinearToRGBM( value, 7.0 ); + + } else if ( outputEncoding == 4 ) { + + return LinearToRGBM( value, 16.0 ); + + } else if ( outputEncoding == 5 ) { + + return LinearToRGBD( value, 256.0 ); + + } else { + + return LinearToGamma( value, 2.2 ); + + } + + } + + vec4 envMapTexelToLinear( vec4 color ) { + + return inputTexelToLinear( color ); + + } + `; + + } + + function Face4( a, b, c, d, normal, color, materialIndex ) { + + console.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' ); + return new Face3( a, b, c, normal, color, materialIndex ); + + } + + const LineStrip = 0; + const LinePieces = 1; + const NoColors = 0; + const FaceColors = 1; + const VertexColors = 2; + + function MeshFaceMaterial( materials ) { + + console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' ); + return materials; + + } + + function MultiMaterial( materials = [] ) { + + console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' ); + materials.isMultiMaterial = true; + materials.materials = materials; + materials.clone = function () { + + return materials.slice(); + + }; + + return materials; + + } + + function PointCloud( geometry, material ) { + + console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + + } + + function Particle( material ) { + + console.warn( 'THREE.Particle has been renamed to THREE.Sprite.' ); + return new Sprite( material ); + + } + + function ParticleSystem( geometry, material ) { + + console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + + } + + function PointCloudMaterial( parameters ) { + + console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + + } + + function ParticleBasicMaterial( parameters ) { + + console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + + } + + function ParticleSystemMaterial( parameters ) { + + console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + + } + + function Vertex( x, y, z ) { + + console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); + return new Vector3( x, y, z ); + + } + + // + + function DynamicBufferAttribute( array, itemSize ) { + + console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' ); + return new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage ); + + } + + function Int8Attribute( array, itemSize ) { + + console.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' ); + return new Int8BufferAttribute( array, itemSize ); + + } + + function Uint8Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' ); + return new Uint8BufferAttribute( array, itemSize ); + + } + + function Uint8ClampedAttribute( array, itemSize ) { + + console.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' ); + return new Uint8ClampedBufferAttribute( array, itemSize ); + + } + + function Int16Attribute( array, itemSize ) { + + console.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' ); + return new Int16BufferAttribute( array, itemSize ); + + } + + function Uint16Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' ); + return new Uint16BufferAttribute( array, itemSize ); + + } + + function Int32Attribute( array, itemSize ) { + + console.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' ); + return new Int32BufferAttribute( array, itemSize ); + + } + + function Uint32Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' ); + return new Uint32BufferAttribute( array, itemSize ); + + } + + function Float32Attribute( array, itemSize ) { + + console.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' ); + return new Float32BufferAttribute( array, itemSize ); + + } + + function Float64Attribute( array, itemSize ) { + + console.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' ); + return new Float64BufferAttribute( array, itemSize ); + + } + + // + + Curve.create = function ( construct, getPoint ) { + + console.log( 'THREE.Curve.create() has been deprecated' ); + + construct.prototype = Object.create( Curve.prototype ); + construct.prototype.constructor = construct; + construct.prototype.getPoint = getPoint; + + return construct; + + }; + + // + + Object.assign( CurvePath.prototype, { + + createPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from path points (for Line or Points objects) + + const pts = this.getPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createSpacedPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from equidistant sampling along the path + + const pts = this.getSpacedPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createGeometry: function ( points ) { + + console.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + const geometry = new Geometry(); + + for ( let i = 0, l = points.length; i < l; i ++ ) { + + const point = points[ i ]; + geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return geometry; + + } + + } ); + + // + + Object.assign( Path.prototype, { + + fromPoints: function ( points ) { + + console.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' ); + return this.setFromPoints( points ); + + } + + } ); + + // + + function ClosedSplineCurve3( points ) { + + console.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + this.closed = true; + + } + + ClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + + // + + function SplineCurve3( points ) { + + console.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + + } + + SplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + + // + + function Spline( points ) { + + console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + + } + + Spline.prototype = Object.create( CatmullRomCurve3.prototype ); + + Object.assign( Spline.prototype, { + + initFromArray: function ( /* a */ ) { + + console.error( 'THREE.Spline: .initFromArray() has been removed.' ); + + }, + getControlPointsArray: function ( /* optionalTarget */ ) { + + console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); + + }, + reparametrizeByArcLength: function ( /* samplingCoef */ ) { + + console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); + + } + + } ); + + // + + function AxisHelper( size ) { + + console.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' ); + return new AxesHelper( size ); + + } + + function BoundingBoxHelper( object, color ) { + + console.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' ); + return new BoxHelper( object, color ); + + } + + function EdgesHelper( object, hex ) { + + console.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' ); + return new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + + } + + GridHelper.prototype.setColors = function () { + + console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); + + }; + + SkeletonHelper.prototype.update = function () { + + console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); + + }; + + function WireframeHelper( object, hex ) { + + console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' ); + return new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + + } + + // + + Object.assign( Loader.prototype, { + + extractUrlBase: function ( url ) { + + console.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' ); + return LoaderUtils.extractUrlBase( url ); + + } + + } ); + + Loader.Handlers = { + + add: function ( /* regex, loader */ ) { + + console.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' ); + + }, + + get: function ( /* file */ ) { + + console.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' ); + + } + + }; + + function XHRLoader( manager ) { + + console.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' ); + return new FileLoader( manager ); + + } + + function BinaryTextureLoader( manager ) { + + console.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' ); + return new DataTextureLoader( manager ); + + } + + // + + Object.assign( Box2.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } + } ); + + Object.assign( Box3.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } + } ); + + Object.assign( Sphere.prototype, { + + empty: function () { + + console.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + + } ); + + Frustum.prototype.setFromMatrix = function ( m ) { + + console.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' ); + return this.setFromProjectionMatrix( m ); + + }; + + Line3.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }; + + Object.assign( MathUtils, { + + random16: function () { + + console.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' ); + return Math.random(); + + }, + + nearestPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' ); + return MathUtils.floorPowerOfTwo( value ); + + }, + + nextPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' ); + return MathUtils.ceilPowerOfTwo( value ); + + } + + } ); + + Object.assign( Matrix3.prototype, { + + flattenToArrayOffset: function ( array, offset ) { + + console.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' ); + return this.toArray( array, offset ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); + return vector.applyMatrix3( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); + + }, + applyToBufferAttribute: function ( attribute ) { + + console.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' ); + return attribute.applyMatrix3( this ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); + + }, + getInverse: function ( matrix ) { + + console.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); + return this.copy( matrix ).invert(); + + } + + } ); + + Object.assign( Matrix4.prototype, { + + extractPosition: function ( m ) { + + console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); + return this.copyPosition( m ); + + }, + flattenToArrayOffset: function ( array, offset ) { + + console.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' ); + return this.toArray( array, offset ); + + }, + getPosition: function () { + + console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); + return new Vector3().setFromMatrixColumn( this, 3 ); + + }, + setRotationFromQuaternion: function ( q ) { + + console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); + return this.makeRotationFromQuaternion( q ); + + }, + multiplyToArray: function () { + + console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector4: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); + + }, + rotateAxis: function ( v ) { + + console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); + v.transformDirection( this ); + + }, + crossVector: function ( vector ) { + + console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + translate: function () { + + console.error( 'THREE.Matrix4: .translate() has been removed.' ); + + }, + rotateX: function () { + + console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); + + }, + rotateY: function () { + + console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); + + }, + rotateZ: function () { + + console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); + + }, + rotateByAxis: function () { + + console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); + + }, + applyToBufferAttribute: function ( attribute ) { + + console.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' ); + return attribute.applyMatrix4( this ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); + + }, + makeFrustum: function ( left, right, bottom, top, near, far ) { + + console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); + return this.makePerspective( left, right, top, bottom, near, far ); + + }, + getInverse: function ( matrix ) { + + console.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); + return this.copy( matrix ).invert(); + + } + + } ); + + Plane.prototype.isIntersectionLine = function ( line ) { + + console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); + return this.intersectsLine( line ); + + }; + + Object.assign( Quaternion.prototype, { + + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); + return vector.applyQuaternion( this ); + + }, + inverse: function ( ) { + + console.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' ); + return this.invert(); + + } + + } ); + + Object.assign( Ray.prototype, { + + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionPlane: function ( plane ) { + + console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); + return this.intersectsPlane( plane ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + } + + } ); + + Object.assign( Triangle.prototype, { + + area: function () { + + console.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' ); + return this.getArea(); + + }, + barycoordFromPoint: function ( point, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return this.getBarycoord( point, target ); + + }, + midpoint: function ( target ) { + + console.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' ); + return this.getMidpoint( target ); + + }, + normal: function ( target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return this.getNormal( target ); + + }, + plane: function ( target ) { + + console.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' ); + return this.getPlane( target ); + + } + + } ); + + Object.assign( Triangle, { + + barycoordFromPoint: function ( point, a, b, c, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return Triangle.getBarycoord( point, a, b, c, target ); + + }, + normal: function ( a, b, c, target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return Triangle.getNormal( a, b, c, target ); + + } + + } ); + + Object.assign( Shape.prototype, { + + extractAllPoints: function ( divisions ) { + + console.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' ); + return this.extractPoints( divisions ); + + }, + extrude: function ( options ) { + + console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); + return new ExtrudeGeometry( this, options ); + + }, + makeGeometry: function ( options ) { + + console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); + return new ShapeGeometry( this, options ); + + } + + } ); + + Object.assign( Vector2.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + Object.assign( Vector3.prototype, { + + setEulerFromRotationMatrix: function () { + + console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); + + }, + setEulerFromQuaternion: function () { + + console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); + + }, + getPositionFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); + return this.setFromMatrixPosition( m ); + + }, + getScaleFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); + return this.setFromMatrixScale( m ); + + }, + getColumnFromMatrix: function ( index, matrix ) { + + console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); + return this.setFromMatrixColumn( matrix, index ); + + }, + applyProjection: function ( m ) { + + console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); + return this.applyMatrix4( m ); + + }, + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + Object.assign( Vector4.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + // + + Object.assign( Geometry.prototype, { + + computeTangents: function () { + + console.error( 'THREE.Geometry: .computeTangents() has been removed.' ); + + }, + computeLineDistances: function () { + + console.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.assign( Object3D.prototype, { + + getChildByName: function ( name ) { + + console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); + return this.getObjectByName( name ); + + }, + renderDepth: function () { + + console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); + + }, + translate: function ( distance, axis ) { + + console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); + return this.translateOnAxis( axis, distance ); + + }, + getWorldRotation: function () { + + console.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.defineProperties( Object3D.prototype, { + + eulerOrder: { + get: function () { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + return this.rotation.order; + + }, + set: function ( value ) { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + this.rotation.order = value; + + } + }, + useQuaternion: { + get: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + }, + set: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + } + } + + } ); + + Object.assign( Mesh.prototype, { + + setDrawMode: function () { + + console.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + + }, + + } ); + + Object.defineProperties( Mesh.prototype, { + + drawMode: { + get: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' ); + return TrianglesDrawMode; + + }, + set: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + + } + } + + } ); + + Object.defineProperties( LOD.prototype, { + + objects: { + get: function () { + + console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); + return this.levels; + + } + } + + } ); + + Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { + + get: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + } + + } ); + + SkinnedMesh.prototype.initBones = function () { + + console.error( 'THREE.SkinnedMesh: initBones() has been removed.' ); + + }; + + Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { + + get: function () { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + return this.arcLengthDivisions; + + }, + set: function ( value ) { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + this.arcLengthDivisions = value; + + } + + } ); + + // + + PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { + + console.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' + + 'Use .setFocalLength and .filmGauge for a photographic setup.' ); + + if ( filmGauge !== undefined ) this.filmGauge = filmGauge; + this.setFocalLength( focalLength ); + + }; + + // + + Object.defineProperties( Light.prototype, { + onlyShadow: { + set: function () { + + console.warn( 'THREE.Light: .onlyShadow has been removed.' ); + + } + }, + shadowCameraFov: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); + this.shadow.camera.fov = value; + + } + }, + shadowCameraLeft: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); + this.shadow.camera.left = value; + + } + }, + shadowCameraRight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); + this.shadow.camera.right = value; + + } + }, + shadowCameraTop: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); + this.shadow.camera.top = value; + + } + }, + shadowCameraBottom: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); + this.shadow.camera.bottom = value; + + } + }, + shadowCameraNear: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); + this.shadow.camera.near = value; + + } + }, + shadowCameraFar: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); + this.shadow.camera.far = value; + + } + }, + shadowCameraVisible: { + set: function () { + + console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); + + } + }, + shadowBias: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); + this.shadow.bias = value; + + } + }, + shadowDarkness: { + set: function () { + + console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); + + } + }, + shadowMapWidth: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); + this.shadow.mapSize.width = value; + + } + }, + shadowMapHeight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); + this.shadow.mapSize.height = value; + + } + } + } ); + + // + + Object.defineProperties( BufferAttribute.prototype, { + + length: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); + return this.array.length; + + } + }, + dynamic: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + return this.usage === DynamicDrawUsage; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + this.setUsage( DynamicDrawUsage ); + + } + } + + } ); + + Object.assign( BufferAttribute.prototype, { + setDynamic: function ( value ) { + + console.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + + }, + copyIndicesArray: function ( /* indices */ ) { + + console.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' ); + + }, + setArray: function ( /* array */ ) { + + console.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + + } + } ); + + Object.assign( BufferGeometry.prototype, { + + addIndex: function ( index ) { + + console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); + this.setIndex( index ); + + }, + addAttribute: function ( name, attribute ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' ); + + if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); + + return this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); + + } + + if ( name === 'index' ) { + + console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); + this.setIndex( attribute ); + + return this; + + } + + return this.setAttribute( name, attribute ); + + }, + addDrawCall: function ( start, count, indexOffset ) { + + if ( indexOffset !== undefined ) { + + console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); + + } + + console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); + this.addGroup( start, count ); + + }, + clearDrawCalls: function () { + + console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); + this.clearGroups(); + + }, + computeTangents: function () { + + console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); + + }, + computeOffsets: function () { + + console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); + + }, + removeAttribute: function ( name ) { + + console.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' ); + + return this.deleteAttribute( name ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.defineProperties( BufferGeometry.prototype, { + + drawcalls: { + get: function () { + + console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); + return this.groups; + + } + }, + offsets: { + get: function () { + + console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); + return this.groups; + + } + } + + } ); + + Object.defineProperties( InstancedBufferGeometry.prototype, { + + maxInstancedCount: { + get: function () { + + console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); + return this.instanceCount; + + }, + set: function ( value ) { + + console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); + this.instanceCount = value; + + } + } + + } ); + + Object.defineProperties( Raycaster.prototype, { + + linePrecision: { + get: function () { + + console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); + return this.params.Line.threshold; + + }, + set: function ( value ) { + + console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); + this.params.Line.threshold = value; + + } + } + + } ); + + Object.defineProperties( InterleavedBuffer.prototype, { + + dynamic: { + get: function () { + + console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); + return this.usage === DynamicDrawUsage; + + }, + set: function ( value ) { + + console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); + this.setUsage( value ); + + } + } + + } ); + + Object.assign( InterleavedBuffer.prototype, { + setDynamic: function ( value ) { + + console.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + + }, + setArray: function ( /* array */ ) { + + console.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + + } + } ); + + // + + Object.assign( ExtrudeBufferGeometry.prototype, { + + getArrays: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' ); + + }, + + addShapeList: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' ); + + }, + + addShape: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' ); + + } + + } ); + + // + + Object.assign( Scene.prototype, { + + dispose: function () { + + console.error( 'THREE.Scene: .dispose() has been removed.' ); + + } + + } ); + + // + + Object.defineProperties( Uniform.prototype, { + + dynamic: { + set: function () { + + console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); + + } + }, + onUpdate: { + value: function () { + + console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); + return this; + + } + } + + } ); + + // + + Object.defineProperties( Material.prototype, { + + wrapAround: { + get: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + } + }, + + overdraw: { + get: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + } + }, + + wrapRGB: { + get: function () { + + console.warn( 'THREE.Material: .wrapRGB has been removed.' ); + return new Color(); + + } + }, + + shading: { + get: function () { + + console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( value === FlatShading ); + + } + }, + + stencilMask: { + get: function () { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + return this.stencilFuncMask; + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + this.stencilFuncMask = value; + + } + } + + } ); + + Object.defineProperties( MeshPhongMaterial.prototype, { + + metal: { + get: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); + + } + } + + } ); + + Object.defineProperties( MeshPhysicalMaterial.prototype, { + + transparency: { + get: function () { + + console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); + return this.transmission; + + }, + set: function ( value ) { + + console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); + this.transmission = value; + + } + } + + } ); + + Object.defineProperties( ShaderMaterial.prototype, { + + derivatives: { + get: function () { + + console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + return this.extensions.derivatives; + + }, + set: function ( value ) { + + console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + this.extensions.derivatives = value; + + } + } + + } ); + + // + + Object.assign( WebGLRenderer.prototype, { + + clearTarget: function ( renderTarget, color, depth, stencil ) { + + console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' ); + this.setRenderTarget( renderTarget ); + this.clear( color, depth, stencil ); + + }, + animate: function ( callback ) { + + console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' ); + this.setAnimationLoop( callback ); + + }, + getCurrentRenderTarget: function () { + + console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); + return this.getRenderTarget(); + + }, + getMaxAnisotropy: function () { + + console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); + return this.capabilities.getMaxAnisotropy(); + + }, + getPrecision: function () { + + console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); + return this.capabilities.precision; + + }, + resetGLState: function () { + + console.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' ); + return this.state.reset(); + + }, + supportsFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); + return this.extensions.get( 'OES_texture_float' ); + + }, + supportsHalfFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); + return this.extensions.get( 'OES_texture_half_float' ); + + }, + supportsStandardDerivatives: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); + return this.extensions.get( 'OES_standard_derivatives' ); + + }, + supportsCompressedTextureS3TC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + }, + supportsCompressedTexturePVRTC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + }, + supportsBlendMinMax: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); + return this.extensions.get( 'EXT_blend_minmax' ); + + }, + supportsVertexTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); + return this.capabilities.vertexTextures; + + }, + supportsInstancedArrays: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); + return this.extensions.get( 'ANGLE_instanced_arrays' ); + + }, + enableScissorTest: function ( boolean ) { + + console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); + this.setScissorTest( boolean ); + + }, + initMaterial: function () { + + console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); + + }, + addPrePlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); + + }, + addPostPlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); + + }, + updateShadowMap: function () { + + console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); + + }, + setFaceCulling: function () { + + console.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' ); + + }, + allocTextureUnit: function () { + + console.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' ); + + }, + setTexture: function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' ); + + }, + setTexture2D: function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' ); + + }, + setTextureCube: function () { + + console.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' ); + + }, + getActiveMipMapLevel: function () { + + console.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' ); + return this.getActiveMipmapLevel(); + + } + + } ); + + Object.defineProperties( WebGLRenderer.prototype, { + + shadowMapEnabled: { + get: function () { + + return this.shadowMap.enabled; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); + this.shadowMap.enabled = value; + + } + }, + shadowMapType: { + get: function () { + + return this.shadowMap.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); + this.shadowMap.type = value; + + } + }, + shadowMapCullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + context: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' ); + return this.getContext(); + + } + }, + vr: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' ); + return this.xr; + + } + }, + gammaInput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + + } + }, + gammaOutput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + return false; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + this.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding; + + } + }, + toneMappingWhitePoint: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + return 1.0; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + + } + }, + + } ); + + Object.defineProperties( WebGLShadowMap.prototype, { + + cullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* cullFace */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderReverseSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderSingleSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + + } + } + + } ); + + function WebGLRenderTargetCube( width, height, options ) { + + console.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' ); + return new WebGLCubeRenderTarget( width, options ); + + } + + // + + Object.defineProperties( WebGLRenderTarget.prototype, { + + wrapS: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + return this.texture.wrapS; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + this.texture.wrapS = value; + + } + }, + wrapT: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + return this.texture.wrapT; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + this.texture.wrapT = value; + + } + }, + magFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + return this.texture.magFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + this.texture.magFilter = value; + + } + }, + minFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + return this.texture.minFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + this.texture.minFilter = value; + + } + }, + anisotropy: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + return this.texture.anisotropy; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + this.texture.anisotropy = value; + + } + }, + offset: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + return this.texture.offset; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + this.texture.offset = value; + + } + }, + repeat: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + return this.texture.repeat; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + this.texture.repeat = value; + + } + }, + format: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + return this.texture.format; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + this.texture.format = value; + + } + }, + type: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + return this.texture.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + this.texture.type = value; + + } + }, + generateMipmaps: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + return this.texture.generateMipmaps; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + this.texture.generateMipmaps = value; + + } + } + + } ); + + // + + Object.defineProperties( Audio.prototype, { + + load: { + value: function ( file ) { + + console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); + const scope = this; + const audioLoader = new AudioLoader(); + audioLoader.load( file, function ( buffer ) { + + scope.setBuffer( buffer ); + + } ); + return this; + + } + }, + startTime: { + set: function () { + + console.warn( 'THREE.Audio: .startTime is now .play( delay ).' ); + + } + } + + } ); + + AudioAnalyser.prototype.getData = function () { + + console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); + return this.getFrequencyData(); + + }; + + // + + CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { + + console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); + return this.update( renderer, scene ); + + }; + + CubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) { + + console.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' ); + return this.renderTarget.clear( renderer, color, depth, stencil ); + + }; + + // + + const GeometryUtils = { + + merge: function ( geometry1, geometry2, materialIndexOffset ) { + + console.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' ); + let matrix; + + if ( geometry2.isMesh ) { + + geometry2.matrixAutoUpdate && geometry2.updateMatrix(); + + matrix = geometry2.matrix; + geometry2 = geometry2.geometry; + + } + + geometry1.merge( geometry2, matrix, materialIndexOffset ); + + }, + + center: function ( geometry ) { + + console.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' ); + return geometry.center(); + + } + + }; + + ImageUtils.crossOrigin = undefined; + + ImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); + + const loader = new TextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + const texture = loader.load( url, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }; + + ImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); + + const loader = new CubeTextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + const texture = loader.load( urls, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }; + + ImageUtils.loadCompressedTexture = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); + + }; + + ImageUtils.loadCompressedTextureCube = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); + + }; + + // + + function CanvasRenderer() { + + console.error( 'THREE.CanvasRenderer has been removed' ); + + } + + // + + function JSONLoader() { + + console.error( 'THREE.JSONLoader has been removed.' ); + + } + + // + + const SceneUtils = { + + createMultiMaterialObject: function ( /* geometry, materials */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + }, + + detach: function ( /* child, parent, scene */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + }, + + attach: function ( /* child, scene, parent */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + } + + }; + + // + + function LensFlare() { + + console.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' ); + + } + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + /* eslint-disable no-undef */ + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: { + revision: REVISION, + } } ) ); + /* eslint-enable no-undef */ + + } + + class PathAnimation{ + + constructor(path, start, end, speed, callback){ + this.path = path; + this.length = this.path.spline.getLength(); + this.speed = speed; + this.callback = callback; + this.tween = null; + this.startPoint = Math.max(start, 0); + this.endPoint = Math.min(end, this.length); + this.t = 0.0; + } + + start(resume = false){ + if(this.tween){ + this.tween.stop(); + this.tween = null; + } + + let tStart; + if(resume){ + tStart = this.t; + }else { + tStart = this.startPoint / this.length; + } + let tEnd = this.endPoint / this.length; + let animationDuration = (tEnd - tStart) * this.length * 1000 / this.speed; + + let progress = {t: tStart}; + this.tween = new TWEEN.Tween(progress).to({t: tEnd}, animationDuration); + this.tween.easing(TWEEN.Easing.Linear.None); + this.tween.onUpdate((e) => { + this.t = progress.t; + this.callback(progress.t); + }); + this.tween.onComplete(() => { + if(this.repeat){ + this.start(); + } + }); + + setTimeout(() => { + this.tween.start(); + }, 0); + } + + stop(){ + if(!this.tween){ + return; + } + this.tween.stop(); + this.tween = null; + this.t = 0; + } + + pause(){ + if(!this.tween){ + return; + } + + this.tween.stop(); + TWEEN.remove(this.tween); + this.tween = null; + } + + resume(){ + this.start(true); + } + + getPoint(t){ + return this.path.spline.getPoint(t); + } + + } + + class AnimationPath{ + constructor (points = []) { + this.points = points; + this.spline = new CatmullRomCurve3(points); + //this.spline.reparametrizeByArcLength(1 / this.spline.getLength().total); + } + + get (t) { + return this.spline.getPoint(t); + } + + getLength () { + return this.spline.getLength(); + } + + animate (start, end, speed, callback) { + let animation = new PathAnimation(this, start, end, speed, callback); + animation.start(); + + return animation; + } + + pause () { + if (this.tween) { + this.tween.stop(); + } + } + + resume () { + if (this.tween) { + this.tween.start(); + } + } + + getGeometry () { + let geometry = new Geometry(); + + let samples = 500; + let i = 0; + for (let u = 0; u <= 1; u += 1 / samples) { + let position = this.spline.getPoint(u); + geometry.vertices[i] = new Vector3(position.x, position.y, position.z); + + i++; + } + + if(this.closed){ + let position = this.spline.getPoint(0); + geometry.vertices[i] = new Vector3(position.x, position.y, position.z); + } + + return geometry; + } + + get closed(){ + return this.spline.closed; + } + + set closed(value){ + this.spline.closed = value; + } + + } + + const XHRFactory = { + config: { + withCredentials: false, + customHeaders: [ + { header: null, value: null } + ] + }, + + createXMLHttpRequest: function () { + let xhr = new XMLHttpRequest(); + + if (this.config.customHeaders && + Array.isArray(this.config.customHeaders) && + this.config.customHeaders.length > 0) { + let baseOpen = xhr.open; + let customHeaders = this.config.customHeaders; + xhr.open = function () { + baseOpen.apply(this, [].slice.call(arguments)); + customHeaders.forEach(function (customHeader) { + if (!!customHeader.header && !!customHeader.value) { + xhr.setRequestHeader(customHeader.header, customHeader.value); + } + }); + }; + } + + return xhr; + } + }; + + class TextSprite extends Object3D{ + + constructor(text){ + super(); + + let texture = new Texture(); + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + let spriteMaterial = new SpriteMaterial({ + map: texture, + depthTest: false, + depthWrite: false}); + + this.texture = texture; + + this.material = spriteMaterial; + //this.material = getRawMaterial(texture); + this.sprite = new Sprite(this.material); + this.add(this.sprite); + + this.borderThickness = 4; + this.fontface = 'Arial'; + this.fontsize = 28; + this.borderColor = { r: 0, g: 0, b: 0, a: 1.0 }; + this.backgroundColor = { r: 255, g: 255, b: 255, a: 1.0 }; + this.textColor = {r: 255, g: 255, b: 255, a: 1.0}; + this.text = ''; + + this.setText(text); + } + + setText(text){ + if (this.text !== text){ + this.text = text; + + this.update(); + } + } + + setTextColor(color){ + this.textColor = color; + + this.update(); + } + + setBorderColor(color){ + this.borderColor = color; + + this.update(); + } + + setBackgroundColor(color){ + this.backgroundColor = color; + + this.update(); + } + + update(){ + let canvas = document.createElement('canvas'); + let context = canvas.getContext('2d'); + context.font = 'Bold ' + this.fontsize + 'px ' + this.fontface; + + // get size data (height depends only on font size) + let metrics = context.measureText(this.text); + let textWidth = metrics.width; + let margin = 5; + let spriteWidth = 2 * margin + textWidth + 2 * this.borderThickness; + let spriteHeight = this.fontsize * 1.4 + 2 * this.borderThickness; + + context.canvas.width = spriteWidth; + context.canvas.height = spriteHeight; + context.font = 'Bold ' + this.fontsize + 'px ' + this.fontface; + + // background color + context.fillStyle = 'rgba(' + this.backgroundColor.r + ',' + this.backgroundColor.g + ',' + + this.backgroundColor.b + ',' + this.backgroundColor.a + ')'; + // border color + context.strokeStyle = 'rgba(' + this.borderColor.r + ',' + this.borderColor.g + ',' + + this.borderColor.b + ',' + this.borderColor.a + ')'; + + context.lineWidth = this.borderThickness; + this.roundRect(context, this.borderThickness / 2, this.borderThickness / 2, + textWidth + this.borderThickness + 2 * margin, this.fontsize * 1.4 + this.borderThickness, 6); + + // text color + context.strokeStyle = 'rgba(0, 0, 0, 1.0)'; + context.strokeText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness); + + context.fillStyle = 'rgba(' + this.textColor.r + ',' + this.textColor.g + ',' + + this.textColor.b + ',' + this.textColor.a + ')'; + context.fillText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness); + + let texture = new Texture(canvas); + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.needsUpdate = true; + //this.material.needsUpdate = true; + + // { // screen-space sprite + // let [screenWidth, screenHeight] = [1620, 937]; + + // let uniforms = this.sprite.material.uniforms; + // let aspect = spriteHeight / spriteWidth; + // let factor = 0.5; + + // let w = spriteWidth / screenWidth; + // let h = spriteHeight / screenHeight; + + // uniforms.uScale.value = [2 * w, 2 * h]; + // //uniforms.uScale.value = [factor * 1, factor * aspect]; + // this.sprite.material.uniforms.map.value = texture; + // } + + this.sprite.material.map = texture; + this.texture = texture; + + this.sprite.scale.set(spriteWidth * 0.01, spriteHeight * 0.01, 1.0); + } + + roundRect(ctx, x, y, w, h, r){ + ctx.beginPath(); + ctx.moveTo(x + r, y); + ctx.lineTo(x + w - r, y); + ctx.quadraticCurveTo(x + w, y, x + w, y + r); + ctx.lineTo(x + w, y + h - r); + ctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h); + ctx.lineTo(x + r, y + h); + ctx.quadraticCurveTo(x, y + h, x, y + h - r); + ctx.lineTo(x, y + r); + ctx.quadraticCurveTo(x, y, x + r, y); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); + } + + } + + class Volume extends Object3D { + constructor (args = {}) { + super(); + + if(this.constructor.name === "Volume"){ + console.warn("Can't create object of class Volume directly. Use classes BoxVolume or SphereVolume instead."); + } + + //console.log(this); + //console.log(this.constructor); + //console.log(this.constructor.name); + + this._clip = args.clip || false; + this._visible = true; + this.showVolumeLabel = true; + this._modifiable = args.modifiable || true; + + this.label = new TextSprite('0'); + this.label.setBorderColor({r: 0, g: 255, b: 0, a: 0.0}); + this.label.setBackgroundColor({r: 0, g: 255, b: 0, a: 0.0}); + this.label.material.depthTest = false; + this.label.material.depthWrite = false; + this.label.material.transparent = true; + this.label.position.y -= 0.5; + this.add(this.label); + + this.label.updateMatrixWorld = () => { + let volumeWorldPos = new Vector3(); + volumeWorldPos.setFromMatrixPosition(this.matrixWorld); + this.label.position.copy(volumeWorldPos); + this.label.updateMatrix(); + this.label.matrixWorld.copy(this.label.matrix); + this.label.matrixWorldNeedsUpdate = false; + + for (let i = 0, l = this.label.children.length; i < l; i++) { + this.label.children[ i ].updateMatrixWorld(true); + } + }; + + { // event listeners + this.addEventListener('select', e => {}); + this.addEventListener('deselect', e => {}); + } + + } + + get visible(){ + return this._visible; + } + + set visible(value){ + if(this._visible !== value){ + this._visible = value; + + this.dispatchEvent({type: "visibility_changed", object: this}); + } + } + + getVolume () { + console.warn("override this in subclass"); + } + + update () { + + }; + + raycast (raycaster, intersects) { + + } + + get clip () { + return this._clip; + } + + set clip (value) { + + if(this._clip !== value){ + this._clip = value; + + this.update(); + + this.dispatchEvent({ + type: "clip_changed", + object: this + }); + } + + } + + get modifieable () { + return this._modifiable; + } + + set modifieable (value) { + this._modifiable = value; + + this.update(); + } + }; + + + class BoxVolume extends Volume{ + + constructor(args = {}){ + super(args); + + this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; + this.name = 'box_' + this.constructor.counter; + + let boxGeometry = new BoxGeometry(1, 1, 1); + boxGeometry.computeBoundingBox(); + + let boxFrameGeometry = new Geometry(); + { + let Vector3$1 = Vector3; + + boxFrameGeometry.vertices.push( + + // bottom + new Vector3$1(-0.5, -0.5, 0.5), + new Vector3$1(0.5, -0.5, 0.5), + new Vector3$1(0.5, -0.5, 0.5), + new Vector3$1(0.5, -0.5, -0.5), + new Vector3$1(0.5, -0.5, -0.5), + new Vector3$1(-0.5, -0.5, -0.5), + new Vector3$1(-0.5, -0.5, -0.5), + new Vector3$1(-0.5, -0.5, 0.5), + // top + new Vector3$1(-0.5, 0.5, 0.5), + new Vector3$1(0.5, 0.5, 0.5), + new Vector3$1(0.5, 0.5, 0.5), + new Vector3$1(0.5, 0.5, -0.5), + new Vector3$1(0.5, 0.5, -0.5), + new Vector3$1(-0.5, 0.5, -0.5), + new Vector3$1(-0.5, 0.5, -0.5), + new Vector3$1(-0.5, 0.5, 0.5), + // sides + new Vector3$1(-0.5, -0.5, 0.5), + new Vector3$1(-0.5, 0.5, 0.5), + new Vector3$1(0.5, -0.5, 0.5), + new Vector3$1(0.5, 0.5, 0.5), + new Vector3$1(0.5, -0.5, -0.5), + new Vector3$1(0.5, 0.5, -0.5), + new Vector3$1(-0.5, -0.5, -0.5), + new Vector3$1(-0.5, 0.5, -0.5), + + ); + + } + + this.material = new MeshBasicMaterial({ + color: 0x00ff00, + transparent: true, + opacity: 0.3, + depthTest: true, + depthWrite: false}); + this.box = new Mesh(boxGeometry, this.material); + this.box.geometry.computeBoundingBox(); + this.boundingBox = this.box.geometry.boundingBox; + this.add(this.box); + + this.frame = new LineSegments(boxFrameGeometry, new LineBasicMaterial({color: 0x000000})); + // this.frame.mode = THREE.Lines; + this.add(this.frame); + + this.update(); + } + + update(){ + this.boundingBox = this.box.geometry.boundingBox; + this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); + + if (this._clip) { + this.box.visible = false; + this.label.visible = false; + } else { + this.box.visible = true; + this.label.visible = this.showVolumeLabel; + } + } + + raycast (raycaster, intersects) { + let is = []; + this.box.raycast(raycaster, is); + + if (is.length > 0) { + let I = is[0]; + intersects.push({ + distance: I.distance, + object: this, + point: I.point.clone() + }); + } + } + + getVolume(){ + return Math.abs(this.scale.x * this.scale.y * this.scale.z); + } + + }; + + class SphereVolume extends Volume{ + + constructor(args = {}){ + super(args); + + this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; + this.name = 'sphere_' + this.constructor.counter; + + let sphereGeometry = new SphereGeometry(1, 32, 32); + sphereGeometry.computeBoundingBox(); + + this.material = new MeshBasicMaterial({ + color: 0x00ff00, + transparent: true, + opacity: 0.3, + depthTest: true, + depthWrite: false}); + this.sphere = new Mesh(sphereGeometry, this.material); + this.sphere.visible = false; + this.sphere.geometry.computeBoundingBox(); + this.boundingBox = this.sphere.geometry.boundingBox; + this.add(this.sphere); + + this.label.visible = false; + + + let frameGeometry = new Geometry(); + { + let steps = 64; + let uSegments = 8; + let vSegments = 5; + let r = 1; + + for(let uSegment = 0; uSegment < uSegments; uSegment++){ + + let alpha = (uSegment / uSegments) * Math.PI * 2; + let dirx = Math.cos(alpha); + let diry = Math.sin(alpha); + + for(let i = 0; i <= steps; i++){ + let v = (i / steps) * Math.PI * 2; + let vNext = v + 2 * Math.PI / steps; + + let height = Math.sin(v); + let xyAmount = Math.cos(v); + + let heightNext = Math.sin(vNext); + let xyAmountNext = Math.cos(vNext); + + let vertex = new Vector3(dirx * xyAmount, diry * xyAmount, height); + frameGeometry.vertices.push(vertex); + + let vertexNext = new Vector3(dirx * xyAmountNext, diry * xyAmountNext, heightNext); + frameGeometry.vertices.push(vertexNext); + } + } + + // creates rings at poles, just because it's easier to implement + for(let vSegment = 0; vSegment <= vSegments + 1; vSegment++){ + + //let height = (vSegment / (vSegments + 1)) * 2 - 1; // -1 to 1 + let uh = (vSegment / (vSegments + 1)); // -1 to 1 + uh = (1 - uh) * (-Math.PI / 2) + uh *(Math.PI / 2); + let height = Math.sin(uh); + + console.log(uh, height); + + for(let i = 0; i <= steps; i++){ + let u = (i / steps) * Math.PI * 2; + let uNext = u + 2 * Math.PI / steps; + + let dirx = Math.cos(u); + let diry = Math.sin(u); + + let dirxNext = Math.cos(uNext); + let diryNext = Math.sin(uNext); + + let xyAmount = Math.sqrt(1 - height * height); + + let vertex = new Vector3(dirx * xyAmount, diry * xyAmount, height); + frameGeometry.vertices.push(vertex); + + let vertexNext = new Vector3(dirxNext * xyAmount, diryNext * xyAmount, height); + frameGeometry.vertices.push(vertexNext); + } + } + } + + this.frame = new LineSegments(frameGeometry, new LineBasicMaterial({color: 0x000000})); + this.add(this.frame); + + let frameMaterial = new MeshBasicMaterial({wireframe: true, color: 0x000000}); + this.frame = new Mesh(sphereGeometry, frameMaterial); + //this.add(this.frame); + + //this.frame = new THREE.LineSegments(boxFrameGeometry, new THREE.LineBasicMaterial({color: 0x000000})); + // this.frame.mode = THREE.Lines; + //this.add(this.frame); + + this.update(); + } + + update(){ + this.boundingBox = this.sphere.geometry.boundingBox; + this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); + + //if (this._clip) { + // this.sphere.visible = false; + // this.label.visible = false; + //} else { + // this.sphere.visible = true; + // this.label.visible = this.showVolumeLabel; + //} + } + + raycast (raycaster, intersects) { + let is = []; + this.sphere.raycast(raycaster, is); + + if (is.length > 0) { + let I = is[0]; + intersects.push({ + distance: I.distance, + object: this, + point: I.point.clone() + }); + } + } + + // see https://en.wikipedia.org/wiki/Ellipsoid#Volume + getVolume(){ + return (4 / 3) * Math.PI * this.scale.x * this.scale.y * this.scale.z; + } + + }; + + class Profile extends Object3D{ + + constructor () { + super(); + + this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; + + this.name = 'Profile_' + this.constructor.counter; + this.points = []; + this.spheres = []; + this.edges = []; + this.boxes = []; + this.width = 1; + this.height = 20; + this._modifiable = true; + + this.sphereGeometry = new SphereGeometry(0.4, 10, 10); + this.color = new Color(0xff0000); + this.lineColor = new Color(0xff0000); + } + + createSphereMaterial () { + let sphereMaterial = new MeshLambertMaterial({ + //shading: THREE.SmoothShading, + color: 0xff0000, + depthTest: false, + depthWrite: false} + ); + + return sphereMaterial; + }; + + getSegments () { + let segments = []; + + for (let i = 0; i < this.points.length - 1; i++) { + let start = this.points[i].clone(); + let end = this.points[i + 1].clone(); + segments.push({start: start, end: end}); + } + + return segments; + } + + getSegmentMatrices () { + let segments = this.getSegments(); + let matrices = []; + + for (let segment of segments) { + let {start, end} = segment; + + let box = new Object3D(); + + let length = start.clone().setZ(0).distanceTo(end.clone().setZ(0)); + box.scale.set(length, 10000, this.width); + box.up.set(0, 0, 1); + + let center = new Vector3().addVectors(start, end).multiplyScalar(0.5); + let diff = new Vector3().subVectors(end, start); + let target = new Vector3(diff.y, -diff.x, 0); + + box.position.set(0, 0, 0); + box.lookAt(target); + box.position.copy(center); + + box.updateMatrixWorld(); + matrices.push(box.matrixWorld); + } + + return matrices; + } + + addMarker (point) { + this.points.push(point); + + let sphere = new Mesh(this.sphereGeometry, this.createSphereMaterial()); + + this.add(sphere); + this.spheres.push(sphere); + + // edges & boxes + if (this.points.length > 1) { + let lineGeometry = new Geometry(); + lineGeometry.vertices.push(new Vector3(), new Vector3()); + lineGeometry.colors.push(this.lineColor, this.lineColor, this.lineColor); + let lineMaterial = new LineBasicMaterial({ + vertexColors: VertexColors, + linewidth: 2, + transparent: true, + opacity: 0.4 + }); + lineMaterial.depthTest = false; + let edge = new Line(lineGeometry, lineMaterial); + edge.visible = false; + + this.add(edge); + this.edges.push(edge); + + let boxGeometry = new BoxGeometry(1, 1, 1); + let boxMaterial = new MeshBasicMaterial({color: 0xff0000, transparent: true, opacity: 0.2}); + let box = new Mesh(boxGeometry, boxMaterial); + box.visible = false; + + this.add(box); + this.boxes.push(box); + } + + { // event listeners + let drag = (e) => { + let I = Utils.getMousePointCloudIntersection( + e.drag.end, + e.viewer.scene.getActiveCamera(), + e.viewer, + e.viewer.scene.pointclouds); + + if (I) { + let i = this.spheres.indexOf(e.drag.object); + if (i !== -1) { + this.setPosition(i, I.location); + //this.dispatchEvent({ + // 'type': 'marker_moved', + // 'profile': this, + // 'index': i + //}); + } + } + }; + + let drop = e => { + let i = this.spheres.indexOf(e.drag.object); + if (i !== -1) { + this.dispatchEvent({ + 'type': 'marker_dropped', + 'profile': this, + 'index': i + }); + } + }; + + let mouseover = (e) => e.object.material.emissive.setHex(0x888888); + let mouseleave = (e) => e.object.material.emissive.setHex(0x000000); + + sphere.addEventListener('drag', drag); + sphere.addEventListener('drop', drop); + sphere.addEventListener('mouseover', mouseover); + sphere.addEventListener('mouseleave', mouseleave); + } + + let event = { + type: 'marker_added', + profile: this, + sphere: sphere + }; + this.dispatchEvent(event); + + this.setPosition(this.points.length - 1, point); + } + + removeMarker (index) { + this.points.splice(index, 1); + + this.remove(this.spheres[index]); + + let edgeIndex = (index === 0) ? 0 : (index - 1); + this.remove(this.edges[edgeIndex]); + this.edges.splice(edgeIndex, 1); + this.remove(this.boxes[edgeIndex]); + this.boxes.splice(edgeIndex, 1); + + this.spheres.splice(index, 1); + + this.update(); + + this.dispatchEvent({ + 'type': 'marker_removed', + 'profile': this + }); + } + + setPosition (index, position) { + let point = this.points[index]; + point.copy(position); + + let event = { + type: 'marker_moved', + profile: this, + index: index, + position: point.clone() + }; + this.dispatchEvent(event); + + this.update(); + } + + setWidth (width) { + this.width = width; + + let event = { + type: 'width_changed', + profile: this, + width: width + }; + this.dispatchEvent(event); + + this.update(); + } + + getWidth () { + return this.width; + } + + update () { + if (this.points.length === 0) { + return; + } else if (this.points.length === 1) { + let point = this.points[0]; + this.spheres[0].position.copy(point); + + return; + } + + let min = this.points[0].clone(); + let max = this.points[0].clone(); + let centroid = new Vector3(); + let lastIndex = this.points.length - 1; + for (let i = 0; i <= lastIndex; i++) { + let point = this.points[i]; + let sphere = this.spheres[i]; + let leftIndex = (i === 0) ? lastIndex : i - 1; + // let rightIndex = (i === lastIndex) ? 0 : i + 1; + let leftVertex = this.points[leftIndex]; + // let rightVertex = this.points[rightIndex]; + let leftEdge = this.edges[leftIndex]; + let rightEdge = this.edges[i]; + let leftBox = this.boxes[leftIndex]; + // rightBox = this.boxes[i]; + + // let leftEdgeLength = point.distanceTo(leftVertex); + // let rightEdgeLength = point.distanceTo(rightVertex); + // let leftEdgeCenter = new THREE.Vector3().addVectors(leftVertex, point).multiplyScalar(0.5); + // let rightEdgeCenter = new THREE.Vector3().addVectors(point, rightVertex).multiplyScalar(0.5); + + sphere.position.copy(point); + + if (this._modifiable) { + sphere.visible = true; + } else { + sphere.visible = false; + } + + if (leftEdge) { + leftEdge.geometry.vertices[1].copy(point); + leftEdge.geometry.verticesNeedUpdate = true; + leftEdge.geometry.computeBoundingSphere(); + } + + if (rightEdge) { + rightEdge.geometry.vertices[0].copy(point); + rightEdge.geometry.verticesNeedUpdate = true; + rightEdge.geometry.computeBoundingSphere(); + } + + if (leftBox) { + let start = leftVertex; + let end = point; + let length = start.clone().setZ(0).distanceTo(end.clone().setZ(0)); + leftBox.scale.set(length, 1000000, this.width); + leftBox.up.set(0, 0, 1); + + let center = new Vector3().addVectors(start, end).multiplyScalar(0.5); + let diff = new Vector3().subVectors(end, start); + let target = new Vector3(diff.y, -diff.x, 0); + + leftBox.position.set(0, 0, 0); + leftBox.lookAt(target); + leftBox.position.copy(center); + } + + centroid.add(point); + min.min(point); + max.max(point); + } + centroid.multiplyScalar(1 / this.points.length); + + for (let i = 0; i < this.boxes.length; i++) { + let box = this.boxes[i]; + + box.position.z = min.z + (max.z - min.z) / 2; + } + } + + raycast (raycaster, intersects) { + for (let i = 0; i < this.points.length; i++) { + let sphere = this.spheres[i]; + + sphere.raycast(raycaster, intersects); + } + + // recalculate distances because they are not necessarely correct + // for scaled objects. + // see https://github.com/mrdoob/three.js/issues/5827 + // TODO: remove this once the bug has been fixed + for (let i = 0; i < intersects.length; i++) { + let I = intersects[i]; + I.distance = raycaster.ray.origin.distanceTo(I.point); + } + intersects.sort(function (a, b) { return a.distance - b.distance; }); + }; + + get modifiable () { + return this._modifiable; + } + + set modifiable (value) { + this._modifiable = value; + this.update(); + } + + } + + var LineSegmentsGeometry = function () { + + InstancedBufferGeometry.call( this ); + + this.type = 'LineSegmentsGeometry'; + + var 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 ]; + var uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ]; + var index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ]; + + this.setIndex( index ); + this.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + }; + + LineSegmentsGeometry.prototype = Object.assign( Object.create( InstancedBufferGeometry.prototype ), { + + constructor: LineSegmentsGeometry, + + isLineSegmentsGeometry: true, + + applyMatrix4: function ( matrix ) { + + var start = this.attributes.instanceStart; + var end = this.attributes.instanceEnd; + + if ( start !== undefined ) { + + start.applyMatrix4( matrix ); + + end.applyMatrix4( matrix ); + + start.needsUpdate = true; + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + return this; + + }, + + setPositions: function ( array ) { + + var lineSegments; + + if ( array instanceof Float32Array ) { + + lineSegments = array; + + } else if ( Array.isArray( array ) ) { + + lineSegments = new Float32Array( array ); + + } + + var instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz + + this.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz + this.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz + + // + + this.computeBoundingBox(); + this.computeBoundingSphere(); + + return this; + + }, + + setColors: function ( array ) { + + var colors; + + if ( array instanceof Float32Array ) { + + colors = array; + + } else if ( Array.isArray( array ) ) { + + colors = new Float32Array( array ); + + } + + var instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb + + this.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb + this.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb + + return this; + + }, + + fromWireframeGeometry: function ( geometry ) { + + this.setPositions( geometry.attributes.position.array ); + + return this; + + }, + + fromEdgesGeometry: function ( geometry ) { + + this.setPositions( geometry.attributes.position.array ); + + return this; + + }, + + fromMesh: function ( mesh ) { + + this.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) ); + + // set colors, maybe + + return this; + + }, + + fromLineSegments: function ( lineSegments ) { + + var geometry = lineSegments.geometry; + + if ( geometry.isGeometry ) { + + this.setPositions( geometry.vertices ); + + } else if ( geometry.isBufferGeometry ) { + + this.setPositions( geometry.attributes.position.array ); // assumes non-indexed + + } + + // set colors, maybe + + return this; + + }, + + computeBoundingBox: function () { + + var box = new Box3(); + + return function computeBoundingBox() { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + var start = this.attributes.instanceStart; + var end = this.attributes.instanceEnd; + + if ( start !== undefined && end !== undefined ) { + + this.boundingBox.setFromBufferAttribute( start ); + + box.setFromBufferAttribute( end ); + + this.boundingBox.union( box ); + + } + + }; + + }(), + + computeBoundingSphere: function () { + + var vector = new Vector3(); + + return function computeBoundingSphere() { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + if ( this.boundingBox === null ) { + + this.computeBoundingBox(); + + } + + var start = this.attributes.instanceStart; + var end = this.attributes.instanceEnd; + + if ( start !== undefined && end !== undefined ) { + + var center = this.boundingSphere.center; + + this.boundingBox.getCenter( center ); + + var maxRadiusSq = 0; + + for ( var i = 0, il = start.count; i < il; i ++ ) { + + vector.fromBufferAttribute( start, i ); + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); + + vector.fromBufferAttribute( end, i ); + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); + + } + + this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); + + if ( isNaN( this.boundingSphere.radius ) ) { + + console.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this ); + + } + + } + + }; + + }(), + + toJSON: function () { + + // todo + + }, + + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' ); + + return this.applyMatrix4( matrix ); + + } + + } ); + + /** + * parameters = { + * color: , + * linewidth: , + * dashed: , + * dashScale: , + * dashSize: , + * dashOffset: , + * gapSize: , + * resolution: , // to be set by renderer + * } + */ + + UniformsLib.line = { + + linewidth: { value: 1 }, + resolution: { value: new Vector2( 1, 1 ) }, + dashScale: { value: 1 }, + dashSize: { value: 1 }, + dashOffset: { value: 0 }, + gapSize: { value: 1 }, // todo FIX - maybe change to totalSize + opacity: { value: 1 } + + }; + + ShaderLib[ 'line' ] = { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.fog, + UniformsLib.line + ] ), + + vertexShader: + ` + #include + #include + #include + #include + #include + + uniform float linewidth; + uniform vec2 resolution; + + attribute vec3 instanceStart; + attribute vec3 instanceEnd; + + attribute vec3 instanceColorStart; + attribute vec3 instanceColorEnd; + + varying vec2 vUv; + + #ifdef USE_DASH + + uniform float dashScale; + attribute float instanceDistanceStart; + attribute float instanceDistanceEnd; + varying float vLineDistance; + + #endif + + void trimSegment( const in vec4 start, inout vec4 end ) { + + // trim end segment so it terminates between the camera plane and the near plane + + // conservative estimate of the near plane + float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column + float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column + float nearEstimate = - 0.5 * b / a; + + float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); + + end.xyz = mix( start.xyz, end.xyz, alpha ); + + } + + void main() { + + #ifdef USE_COLOR + + vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; + + #endif + + #ifdef USE_DASH + + vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; + + #endif + + float aspect = resolution.x / resolution.y; + + vUv = uv; + + // camera space + vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); + vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); + + // special case for perspective projection, and segments that terminate either in, or behind, the camera plane + // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space + // but we need to perform ndc-space calculations in the shader, so we must address this issue directly + // perhaps there is a more elegant solution -- WestLangley + + bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column + + if ( perspective ) { + + if ( start.z < 0.0 && end.z >= 0.0 ) { + + trimSegment( start, end ); + + } else if ( end.z < 0.0 && start.z >= 0.0 ) { + + trimSegment( end, start ); + + } + + } + + // clip space + vec4 clipStart = projectionMatrix * start; + vec4 clipEnd = projectionMatrix * end; + + // ndc space + vec2 ndcStart = clipStart.xy / clipStart.w; + vec2 ndcEnd = clipEnd.xy / clipEnd.w; + + // direction + vec2 dir = ndcEnd - ndcStart; + + // account for clip-space aspect ratio + dir.x *= aspect; + dir = normalize( dir ); + + // perpendicular to dir + vec2 offset = vec2( dir.y, - dir.x ); + + // undo aspect ratio adjustment + dir.x /= aspect; + offset.x /= aspect; + + // sign flip + if ( position.x < 0.0 ) offset *= - 1.0; + + // endcaps + if ( position.y < 0.0 ) { + + offset += - dir; + + } else if ( position.y > 1.0 ) { + + offset += dir; + + } + + // adjust for linewidth + offset *= linewidth; + + // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... + offset /= resolution.y; + + // select end + vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; + + // back to clip space + offset *= clip.w; + + clip.xy += offset; + + gl_Position = clip; + + vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation + + #include + #include + #include + + } + `, + + fragmentShader: + ` + uniform vec3 diffuse; + uniform float opacity; + + #ifdef USE_DASH + + uniform float dashSize; + uniform float dashOffset; + uniform float gapSize; + + #endif + + varying float vLineDistance; + + #include + #include + #include + #include + #include + + varying vec2 vUv; + + void main() { + + #include + + #ifdef USE_DASH + + if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps + + if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX + + #endif + + if ( abs( vUv.y ) > 1.0 ) { + + float a = vUv.x; + float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; + float len2 = a * a + b * b; + + if ( len2 > 1.0 ) discard; + + } + + vec4 diffuseColor = vec4( diffuse, opacity ); + + #include + #include + + gl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a ); + + #include + #include + #include + #include + + } + ` + }; + + var LineMaterial = function ( parameters ) { + + ShaderMaterial.call( this, { + + type: 'LineMaterial', + + uniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ), + + vertexShader: ShaderLib[ 'line' ].vertexShader, + fragmentShader: ShaderLib[ 'line' ].fragmentShader, + + clipping: true // required for clipping support + + } ); + + this.dashed = false; + + Object.defineProperties( this, { + + color: { + + enumerable: true, + + get: function () { + + return this.uniforms.diffuse.value; + + }, + + set: function ( value ) { + + this.uniforms.diffuse.value = value; + + } + + }, + + linewidth: { + + enumerable: true, + + get: function () { + + return this.uniforms.linewidth.value; + + }, + + set: function ( value ) { + + this.uniforms.linewidth.value = value; + + } + + }, + + dashScale: { + + enumerable: true, + + get: function () { + + return this.uniforms.dashScale.value; + + }, + + set: function ( value ) { + + this.uniforms.dashScale.value = value; + + } + + }, + + dashSize: { + + enumerable: true, + + get: function () { + + return this.uniforms.dashSize.value; + + }, + + set: function ( value ) { + + this.uniforms.dashSize.value = value; + + } + + }, + + dashOffset: { + + enumerable: true, + + get: function () { + + return this.uniforms.dashOffset.value; + + }, + + set: function ( value ) { + + this.uniforms.dashOffset.value = value; + + } + + }, + + gapSize: { + + enumerable: true, + + get: function () { + + return this.uniforms.gapSize.value; + + }, + + set: function ( value ) { + + this.uniforms.gapSize.value = value; + + } + + }, + + opacity: { + + enumerable: true, + + get: function () { + + return this.uniforms.opacity.value; + + }, + + set: function ( value ) { + + this.uniforms.opacity.value = value; + + } + + }, + + resolution: { + + enumerable: true, + + get: function () { + + return this.uniforms.resolution.value; + + }, + + set: function ( value ) { + + this.uniforms.resolution.value.copy( value ); + + } + + } + + } ); + + this.setValues( parameters ); + + }; + + LineMaterial.prototype = Object.create( ShaderMaterial.prototype ); + LineMaterial.prototype.constructor = LineMaterial; + + LineMaterial.prototype.isLineMaterial = true; + + var LineSegments2 = function ( geometry, material ) { + + if ( geometry === undefined ) geometry = new LineSegmentsGeometry(); + if ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } ); + + Mesh.call( this, geometry, material ); + + this.type = 'LineSegments2'; + + }; + + LineSegments2.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: LineSegments2, + + isLineSegments2: true, + + computeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry... + + var start = new Vector3(); + var end = new Vector3(); + + return function computeLineDistances() { + + var geometry = this.geometry; + + var instanceStart = geometry.attributes.instanceStart; + var instanceEnd = geometry.attributes.instanceEnd; + var lineDistances = new Float32Array( 2 * instanceStart.data.count ); + + for ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) { + + start.fromBufferAttribute( instanceStart, i ); + end.fromBufferAttribute( instanceEnd, i ); + + lineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ]; + lineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end ); + + } + + var instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1 + + geometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0 + geometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1 + + return this; + + }; + + }() ), + + raycast: ( function () { + + var start = new Vector4(); + var end = new Vector4(); + + var ssOrigin = new Vector4(); + var ssOrigin3 = new Vector3(); + var mvMatrix = new Matrix4(); + var line = new Line3(); + var closestPoint = new Vector3(); + + return function raycast( raycaster, intersects ) { + + if ( raycaster.camera === null ) { + + console.error( 'LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.' ); + + } + + var threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0; + + var ray = raycaster.ray; + var camera = raycaster.camera; + var projectionMatrix = camera.projectionMatrix; + + var geometry = this.geometry; + var material = this.material; + var resolution = material.resolution; + var lineWidth = material.linewidth + threshold; + + var instanceStart = geometry.attributes.instanceStart; + var instanceEnd = geometry.attributes.instanceEnd; + + // pick a point 1 unit out along the ray to avoid the ray origin + // sitting at the camera origin which will cause "w" to be 0 when + // applying the projection matrix. + ray.at( 1, ssOrigin ); + + // ndc space [ - 1.0, 1.0 ] + ssOrigin.w = 1; + ssOrigin.applyMatrix4( camera.matrixWorldInverse ); + ssOrigin.applyMatrix4( projectionMatrix ); + ssOrigin.multiplyScalar( 1 / ssOrigin.w ); + + // screen space + ssOrigin.x *= resolution.x / 2; + ssOrigin.y *= resolution.y / 2; + ssOrigin.z = 0; + + ssOrigin3.copy( ssOrigin ); + + var matrixWorld = this.matrixWorld; + mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld ); + + for ( var i = 0, l = instanceStart.count; i < l; i ++ ) { + + start.fromBufferAttribute( instanceStart, i ); + end.fromBufferAttribute( instanceEnd, i ); + + start.w = 1; + end.w = 1; + + // camera space + start.applyMatrix4( mvMatrix ); + end.applyMatrix4( mvMatrix ); + + // clip space + start.applyMatrix4( projectionMatrix ); + end.applyMatrix4( projectionMatrix ); + + // ndc space [ - 1.0, 1.0 ] + start.multiplyScalar( 1 / start.w ); + end.multiplyScalar( 1 / end.w ); + + // skip the segment if it's outside the camera near and far planes + var isBehindCameraNear = start.z < - 1 && end.z < - 1; + var isPastCameraFar = start.z > 1 && end.z > 1; + if ( isBehindCameraNear || isPastCameraFar ) { + + continue; + + } + + // screen space + start.x *= resolution.x / 2; + start.y *= resolution.y / 2; + + end.x *= resolution.x / 2; + end.y *= resolution.y / 2; + + // create 2d segment + line.start.copy( start ); + line.start.z = 0; + + line.end.copy( end ); + line.end.z = 0; + + // get closest point on ray to segment + var param = line.closestPointToPointParameter( ssOrigin3, true ); + line.at( param, closestPoint ); + + // check if the intersection point is within clip space + var zPos = MathUtils.lerp( start.z, end.z, param ); + var isInClipSpace = zPos >= - 1 && zPos <= 1; + + var isInside = ssOrigin3.distanceTo( closestPoint ) < lineWidth * 0.5; + + if ( isInClipSpace && isInside ) { + + line.start.fromBufferAttribute( instanceStart, i ); + line.end.fromBufferAttribute( instanceEnd, i ); + + line.start.applyMatrix4( matrixWorld ); + line.end.applyMatrix4( matrixWorld ); + + var pointOnLine = new Vector3(); + var point = new Vector3(); + + ray.distanceSqToSegment( line.start, line.end, point, pointOnLine ); + + intersects.push( { + + point: point, + pointOnLine: pointOnLine, + distance: ray.origin.distanceTo( point ), + + object: this, + face: null, + faceIndex: i, + uv: null, + uv2: null, + + } ); + + } + + } + + }; + + }() ) + + } ); + + var LineGeometry = function () { + + LineSegmentsGeometry.call( this ); + + this.type = 'LineGeometry'; + + }; + + LineGeometry.prototype = Object.assign( Object.create( LineSegmentsGeometry.prototype ), { + + constructor: LineGeometry, + + isLineGeometry: true, + + setPositions: function ( array ) { + + // converts [ x1, y1, z1, x2, y2, z2, ... ] to pairs format + + var length = array.length - 3; + var points = new Float32Array( 2 * length ); + + for ( var i = 0; i < length; i += 3 ) { + + points[ 2 * i ] = array[ i ]; + points[ 2 * i + 1 ] = array[ i + 1 ]; + points[ 2 * i + 2 ] = array[ i + 2 ]; + + points[ 2 * i + 3 ] = array[ i + 3 ]; + points[ 2 * i + 4 ] = array[ i + 4 ]; + points[ 2 * i + 5 ] = array[ i + 5 ]; + + } + + LineSegmentsGeometry.prototype.setPositions.call( this, points ); + + return this; + + }, + + setColors: function ( array ) { + + // converts [ r1, g1, b1, r2, g2, b2, ... ] to pairs format + + var length = array.length - 3; + var colors = new Float32Array( 2 * length ); + + for ( var i = 0; i < length; i += 3 ) { + + colors[ 2 * i ] = array[ i ]; + colors[ 2 * i + 1 ] = array[ i + 1 ]; + colors[ 2 * i + 2 ] = array[ i + 2 ]; + + colors[ 2 * i + 3 ] = array[ i + 3 ]; + colors[ 2 * i + 4 ] = array[ i + 4 ]; + colors[ 2 * i + 5 ] = array[ i + 5 ]; + + } + + LineSegmentsGeometry.prototype.setColors.call( this, colors ); + + return this; + + }, + + fromLine: function ( line ) { + + var geometry = line.geometry; + + if ( geometry.isGeometry ) { + + this.setPositions( geometry.vertices ); + + } else if ( geometry.isBufferGeometry ) { + + this.setPositions( geometry.attributes.position.array ); // assumes non-indexed + + } + + // set colors, maybe + + return this; + + }, + + copy: function ( /* source */ ) { + + // todo + + return this; + + } + + } ); + + var Line2 = function ( geometry, material ) { + + if ( geometry === undefined ) geometry = new LineGeometry(); + if ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } ); + + LineSegments2.call( this, geometry, material ); + + this.type = 'Line2'; + + }; + + Line2.prototype = Object.assign( Object.create( LineSegments2.prototype ), { + + constructor: Line2, + + isLine2: true + + } ); + + function createHeightLine(){ + let lineGeometry = new LineGeometry(); + + lineGeometry.setPositions([ + 0, 0, 0, + 0, 0, 0, + ]); + + let lineMaterial = new LineMaterial({ + color: 0x00ff00, + dashSize: 5, + gapSize: 2, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + lineMaterial.depthTest = false; + const heightEdge = new Line2(lineGeometry, lineMaterial); + heightEdge.visible = false; + + //this.add(this.heightEdge); + + return heightEdge; + } + + function createHeightLabel(){ + const heightLabel = new TextSprite(''); + + heightLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); + heightLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); + heightLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); + heightLabel.fontsize = 16; + heightLabel.material.depthTest = false; + heightLabel.material.opacity = 1; + heightLabel.visible = false; + + return heightLabel; + } + + function createAreaLabel(){ + const areaLabel = new TextSprite(''); + + areaLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); + areaLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); + areaLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); + areaLabel.fontsize = 16; + areaLabel.material.depthTest = false; + areaLabel.material.opacity = 1; + areaLabel.visible = false; + + return areaLabel; + } + + function createCircleRadiusLabel(){ + const circleRadiusLabel = new TextSprite(""); + + circleRadiusLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); + circleRadiusLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); + circleRadiusLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); + circleRadiusLabel.fontsize = 16; + circleRadiusLabel.material.depthTest = false; + circleRadiusLabel.material.opacity = 1; + circleRadiusLabel.visible = false; + + return circleRadiusLabel; + } + + function createCircleRadiusLine(){ + const lineGeometry = new LineGeometry(); + + lineGeometry.setPositions([ + 0, 0, 0, + 0, 0, 0, + ]); + + const lineMaterial = new LineMaterial({ + color: 0xff0000, + linewidth: 2, + resolution: new Vector2(1000, 1000), + gapSize: 1, + dashed: true, + }); + + lineMaterial.depthTest = false; + + const circleRadiusLine = new Line2(lineGeometry, lineMaterial); + circleRadiusLine.visible = false; + + return circleRadiusLine; + } + + function createCircleLine(){ + const coordinates = []; + + let n = 128; + for(let i = 0; i <= n; i++){ + let u0 = 2 * Math.PI * (i / n); + let u1 = 2 * Math.PI * (i + 1) / n; + + let p0 = new Vector3( + Math.cos(u0), + Math.sin(u0), + 0 + ); + + let p1 = new Vector3( + Math.cos(u1), + Math.sin(u1), + 0 + ); + + coordinates.push( + ...p0.toArray(), + ...p1.toArray(), + ); + } + + const geometry = new LineGeometry(); + geometry.setPositions(coordinates); + + const material = new LineMaterial({ + color: 0xff0000, + dashSize: 5, + gapSize: 2, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + material.depthTest = false; + + const circleLine = new Line2(geometry, material); + circleLine.visible = false; + circleLine.computeLineDistances(); + + return circleLine; + } + + function createCircleCenter(){ + const sg = new SphereGeometry(1, 32, 32); + const sm = new MeshNormalMaterial(); + + const circleCenter = new Mesh(sg, sm); + circleCenter.visible = false; + + return circleCenter; + } + + function createLine(){ + const geometry = new LineGeometry(); + + geometry.setPositions([ + 0, 0, 0, + 0, 0, 0, + ]); + + const material = new LineMaterial({ + color: 0xff0000, + linewidth: 2, + resolution: new Vector2(1000, 1000), + gapSize: 1, + dashed: true, + }); + + material.depthTest = false; + + const line = new Line2(geometry, material); + + return line; + } + + function createCircle(){ + + const coordinates = []; + + let n = 128; + for(let i = 0; i <= n; i++){ + let u0 = 2 * Math.PI * (i / n); + let u1 = 2 * Math.PI * (i + 1) / n; + + let p0 = new Vector3( + Math.cos(u0), + Math.sin(u0), + 0 + ); + + let p1 = new Vector3( + Math.cos(u1), + Math.sin(u1), + 0 + ); + + coordinates.push( + ...p0.toArray(), + ...p1.toArray(), + ); + } + + const geometry = new LineGeometry(); + geometry.setPositions(coordinates); + + const material = new LineMaterial({ + color: 0xff0000, + dashSize: 5, + gapSize: 2, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + material.depthTest = false; + + const line = new Line2(geometry, material); + line.computeLineDistances(); + + return line; + + } + + function createAzimuth(){ + + const azimuth = { + label: null, + center: null, + target: null, + north: null, + centerToNorth: null, + centerToTarget: null, + centerToTargetground: null, + targetgroundToTarget: null, + circle: null, + + node: null, + }; + + const sg = new SphereGeometry(1, 32, 32); + const sm = new MeshNormalMaterial(); + + { + const label = new TextSprite(""); + + label.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); + label.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); + label.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); + label.fontsize = 16; + label.material.depthTest = false; + label.material.opacity = 1; + + azimuth.label = label; + } + + azimuth.center = new Mesh(sg, sm); + azimuth.target = new Mesh(sg, sm); + azimuth.north = new Mesh(sg, sm); + azimuth.centerToNorth = createLine(); + azimuth.centerToTarget = createLine(); + azimuth.centerToTargetground = createLine(); + azimuth.targetgroundToTarget = createLine(); + azimuth.circle = createCircle(); + + azimuth.node = new Object3D(); + azimuth.node.add( + azimuth.centerToNorth, + azimuth.centerToTarget, + azimuth.centerToTargetground, + azimuth.targetgroundToTarget, + azimuth.circle, + azimuth.label, + azimuth.center, + azimuth.target, + azimuth.north, + ); + + return azimuth; + } + + class Measure extends Object3D { + constructor () { + super(); + + this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; + + this.name = 'Measure_' + this.constructor.counter; + this.points = []; + this._showDistances = true; + this._showCoordinates = false; + this._showArea = false; + this._closed = true; + this._showAngles = false; + this._showCircle = false; + this._showHeight = false; + this._showEdges = true; + this._showAzimuth = false; + this.maxMarkers = Number.MAX_SAFE_INTEGER; + + this.sphereGeometry = new SphereGeometry(0.4, 10, 10); + this.color = new Color(0xff0000); + + this.spheres = []; + this.edges = []; + this.sphereLabels = []; + this.edgeLabels = []; + this.angleLabels = []; + this.coordinateLabels = []; + + this.heightEdge = createHeightLine(); + this.heightLabel = createHeightLabel(); + this.areaLabel = createAreaLabel(); + this.circleRadiusLabel = createCircleRadiusLabel(); + this.circleRadiusLine = createCircleRadiusLine(); + this.circleLine = createCircleLine(); + this.circleCenter = createCircleCenter(); + + this.azimuth = createAzimuth(); + + this.add(this.heightEdge); + this.add(this.heightLabel); + this.add(this.areaLabel); + this.add(this.circleRadiusLabel); + this.add(this.circleRadiusLine); + this.add(this.circleLine); + this.add(this.circleCenter); + + this.add(this.azimuth.node); + + } + + createSphereMaterial () { + let sphereMaterial = new MeshLambertMaterial({ + //shading: THREE.SmoothShading, + color: this.color, + depthTest: false, + depthWrite: false} + ); + + return sphereMaterial; + }; + + addMarker (point) { + if (point.x != null) { + point = {position: point}; + }else if(point instanceof Array){ + point = {position: new Vector3(...point)}; + } + this.points.push(point); + + // sphere + let sphere = new Mesh(this.sphereGeometry, this.createSphereMaterial()); + + this.add(sphere); + this.spheres.push(sphere); + + { // edges + let lineGeometry = new LineGeometry(); + lineGeometry.setPositions( [ + 0, 0, 0, + 0, 0, 0, + ]); + + let lineMaterial = new LineMaterial({ + color: 0xff0000, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + lineMaterial.depthTest = false; + + let edge = new Line2(lineGeometry, lineMaterial); + edge.visible = true; + + this.add(edge); + this.edges.push(edge); + } + + { // edge labels + let edgeLabel = new TextSprite(); + edgeLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); + edgeLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); + edgeLabel.material.depthTest = false; + edgeLabel.visible = false; + edgeLabel.fontsize = 16; + this.edgeLabels.push(edgeLabel); + this.add(edgeLabel); + } + + { // angle labels + let angleLabel = new TextSprite(); + angleLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); + angleLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); + angleLabel.fontsize = 16; + angleLabel.material.depthTest = false; + angleLabel.material.opacity = 1; + angleLabel.visible = false; + this.angleLabels.push(angleLabel); + this.add(angleLabel); + } + + { // coordinate labels + let coordinateLabel = new TextSprite(); + coordinateLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); + coordinateLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); + coordinateLabel.fontsize = 16; + coordinateLabel.material.depthTest = false; + coordinateLabel.material.opacity = 1; + coordinateLabel.visible = false; + this.coordinateLabels.push(coordinateLabel); + this.add(coordinateLabel); + } + + { // Event Listeners + let drag = (e) => { + let I = Utils.getMousePointCloudIntersection( + e.drag.end, + e.viewer.scene.getActiveCamera(), + e.viewer, + e.viewer.scene.pointclouds, + {pickClipped: true}); + + if (I) { + let i = this.spheres.indexOf(e.drag.object); + if (i !== -1) { + let point = this.points[i]; + + // loop through current keys and cleanup ones that will be orphaned + for (let key of Object.keys(point)) { + if (!I.point[key]) { + delete point[key]; + } + } + + for (let key of Object.keys(I.point).filter(e => e !== 'position')) { + point[key] = I.point[key]; + } + + this.setPosition(i, I.location); + } + } + }; + + let drop = e => { + let i = this.spheres.indexOf(e.drag.object); + if (i !== -1) { + this.dispatchEvent({ + 'type': 'marker_dropped', + 'measurement': this, + 'index': i + }); + } + }; + + let mouseover = (e) => e.object.material.emissive.setHex(0x888888); + let mouseleave = (e) => e.object.material.emissive.setHex(0x000000); + + sphere.addEventListener('drag', drag); + sphere.addEventListener('drop', drop); + sphere.addEventListener('mouseover', mouseover); + sphere.addEventListener('mouseleave', mouseleave); + } + + let event = { + type: 'marker_added', + measurement: this, + sphere: sphere + }; + this.dispatchEvent(event); + + this.setMarker(this.points.length - 1, point); + }; + + removeMarker (index) { + this.points.splice(index, 1); + + this.remove(this.spheres[index]); + + let edgeIndex = (index === 0) ? 0 : (index - 1); + this.remove(this.edges[edgeIndex]); + this.edges.splice(edgeIndex, 1); + + this.remove(this.edgeLabels[edgeIndex]); + this.edgeLabels.splice(edgeIndex, 1); + this.coordinateLabels.splice(index, 1); + + this.remove(this.angleLabels[index]); + this.angleLabels.splice(index, 1); + + this.spheres.splice(index, 1); + + this.update(); + + this.dispatchEvent({type: 'marker_removed', measurement: this}); + }; + + setMarker (index, point) { + this.points[index] = point; + + let event = { + type: 'marker_moved', + measure: this, + index: index, + position: point.position.clone() + }; + this.dispatchEvent(event); + + this.update(); + } + + setPosition (index, position) { + let point = this.points[index]; + point.position.copy(position); + + let event = { + type: 'marker_moved', + measure: this, + index: index, + position: position.clone() + }; + this.dispatchEvent(event); + + this.update(); + }; + + getArea () { + let area = 0; + let j = this.points.length - 1; + + for (let i = 0; i < this.points.length; i++) { + let p1 = this.points[i].position; + let p2 = this.points[j].position; + area += (p2.x + p1.x) * (p1.y - p2.y); + j = i; + } + + return Math.abs(area / 2); + }; + + getTotalDistance () { + if (this.points.length === 0) { + return 0; + } + + let distance = 0; + + for (let i = 1; i < this.points.length; i++) { + let prev = this.points[i - 1].position; + let curr = this.points[i].position; + let d = prev.distanceTo(curr); + + distance += d; + } + + if (this.closed && this.points.length > 1) { + let first = this.points[0].position; + let last = this.points[this.points.length - 1].position; + let d = last.distanceTo(first); + + distance += d; + } + + return distance; + } + + getAngleBetweenLines (cornerPoint, point1, point2) { + let v1 = new Vector3().subVectors(point1.position, cornerPoint.position); + let v2 = new Vector3().subVectors(point2.position, cornerPoint.position); + + // avoid the error printed by threejs if denominator is 0 + const denominator = Math.sqrt( v1.lengthSq() * v2.lengthSq() ); + if(denominator === 0){ + return 0; + }else { + return v1.angleTo(v2); + } + }; + + getAngle (index) { + if (this.points.length < 3 || index >= this.points.length) { + return 0; + } + + let previous = (index === 0) ? this.points[this.points.length - 1] : this.points[index - 1]; + let point = this.points[index]; + let next = this.points[(index + 1) % (this.points.length)]; + + return this.getAngleBetweenLines(point, previous, next); + } + + // updateAzimuth(){ + // // if(this.points.length !== 2){ + // // return; + // // } + + // // const azimuth = this.azimuth; + + // // const [p0, p1] = this.points; + + // // const r = p0.position.distanceTo(p1.position); + + // } + + update () { + if (this.points.length === 0) { + return; + } else if (this.points.length === 1) { + let point = this.points[0]; + let position = point.position; + this.spheres[0].position.copy(position); + + { // coordinate labels + let coordinateLabel = this.coordinateLabels[0]; + + let msg = position.toArray().map(p => Utils.addCommas(p.toFixed(2))).join(" / "); + coordinateLabel.setText(msg); + + coordinateLabel.visible = this.showCoordinates; + } + + return; + } + + let lastIndex = this.points.length - 1; + + let centroid = new Vector3(); + for (let i = 0; i <= lastIndex; i++) { + let point = this.points[i]; + centroid.add(point.position); + } + centroid.divideScalar(this.points.length); + + for (let i = 0; i <= lastIndex; i++) { + let index = i; + let nextIndex = (i + 1 > lastIndex) ? 0 : i + 1; + let previousIndex = (i === 0) ? lastIndex : i - 1; + + let point = this.points[index]; + let nextPoint = this.points[nextIndex]; + let previousPoint = this.points[previousIndex]; + + let sphere = this.spheres[index]; + + // spheres + sphere.position.copy(point.position); + sphere.material.color = this.color; + + { // edges + let edge = this.edges[index]; + + edge.material.color = this.color; + + edge.position.copy(point.position); + + edge.geometry.setPositions([ + 0, 0, 0, + ...nextPoint.position.clone().sub(point.position).toArray(), + ]); + + edge.geometry.verticesNeedUpdate = true; + edge.geometry.computeBoundingSphere(); + edge.computeLineDistances(); + edge.visible = index < lastIndex || this.closed; + + if(!this.showEdges){ + edge.visible = false; + } + } + + { // edge labels + let edgeLabel = this.edgeLabels[i]; + + let center = new Vector3().add(point.position); + center.add(nextPoint.position); + center = center.multiplyScalar(0.5); + let distance = point.position.distanceTo(nextPoint.position); + + edgeLabel.position.copy(center); + + let suffix = ""; + if(this.lengthUnit != null && this.lengthUnitDisplay != null){ + distance = distance / this.lengthUnit.unitspermeter * this.lengthUnitDisplay.unitspermeter; //convert to meters then to the display unit + suffix = this.lengthUnitDisplay.code; + } + + let txtLength = Utils.addCommas(distance.toFixed(2)); + edgeLabel.setText(`${txtLength} ${suffix}`); + edgeLabel.visible = this.showDistances && (index < lastIndex || this.closed) && this.points.length >= 2 && distance > 0; + } + + { // angle labels + let angleLabel = this.angleLabels[i]; + let angle = this.getAngleBetweenLines(point, previousPoint, nextPoint); + + let dir = nextPoint.position.clone().sub(previousPoint.position); + dir.multiplyScalar(0.5); + dir = previousPoint.position.clone().add(dir).sub(point.position).normalize(); + + let dist = Math.min(point.position.distanceTo(previousPoint.position), point.position.distanceTo(nextPoint.position)); + dist = dist / 9; + + let labelPos = point.position.clone().add(dir.multiplyScalar(dist)); + angleLabel.position.copy(labelPos); + + let msg = Utils.addCommas((angle * (180.0 / Math.PI)).toFixed(1)) + '\u00B0'; + angleLabel.setText(msg); + + angleLabel.visible = this.showAngles && (index < lastIndex || this.closed) && this.points.length >= 3 && angle > 0; + } + } + + { // update height stuff + let heightEdge = this.heightEdge; + heightEdge.visible = this.showHeight; + this.heightLabel.visible = this.showHeight; + + if (this.showHeight) { + let sorted = this.points.slice().sort((a, b) => a.position.z - b.position.z); + let lowPoint = sorted[0].position.clone(); + let highPoint = sorted[sorted.length - 1].position.clone(); + let min = lowPoint.z; + let max = highPoint.z; + let height = max - min; + + let start = new Vector3(highPoint.x, highPoint.y, min); + let end = new Vector3(highPoint.x, highPoint.y, max); + + heightEdge.position.copy(lowPoint); + + heightEdge.geometry.setPositions([ + 0, 0, 0, + ...start.clone().sub(lowPoint).toArray(), + ...start.clone().sub(lowPoint).toArray(), + ...end.clone().sub(lowPoint).toArray(), + ]); + + heightEdge.geometry.verticesNeedUpdate = true; + // heightEdge.geometry.computeLineDistances(); + // heightEdge.geometry.lineDistancesNeedUpdate = true; + heightEdge.geometry.computeBoundingSphere(); + heightEdge.computeLineDistances(); + + // heightEdge.material.dashSize = height / 40; + // heightEdge.material.gapSize = height / 40; + + let heightLabelPosition = start.clone().add(end).multiplyScalar(0.5); + this.heightLabel.position.copy(heightLabelPosition); + + let suffix = ""; + if(this.lengthUnit != null && this.lengthUnitDisplay != null){ + height = height / this.lengthUnit.unitspermeter * this.lengthUnitDisplay.unitspermeter; //convert to meters then to the display unit + suffix = this.lengthUnitDisplay.code; + } + + let txtHeight = Utils.addCommas(height.toFixed(2)); + let msg = `${txtHeight} ${suffix}`; + this.heightLabel.setText(msg); + } + } + + { // update circle stuff + const circleRadiusLabel = this.circleRadiusLabel; + const circleRadiusLine = this.circleRadiusLine; + const circleLine = this.circleLine; + const circleCenter = this.circleCenter; + + const circleOkay = this.points.length === 3; + + circleRadiusLabel.visible = this.showCircle && circleOkay; + circleRadiusLine.visible = this.showCircle && circleOkay; + circleLine.visible = this.showCircle && circleOkay; + circleCenter.visible = this.showCircle && circleOkay; + + if(this.showCircle && circleOkay){ + + const A = this.points[0].position; + const B = this.points[1].position; + const C = this.points[2].position; + const AB = B.clone().sub(A); + const AC = C.clone().sub(A); + const N = AC.clone().cross(AB).normalize(); + + const center = Potree.Utils.computeCircleCenter(A, B, C); + const radius = center.distanceTo(A); + + + const scale = radius / 20; + circleCenter.position.copy(center); + circleCenter.scale.set(scale, scale, scale); + + //circleRadiusLine.geometry.vertices[0].set(0, 0, 0); + //circleRadiusLine.geometry.vertices[1].copy(B.clone().sub(center)); + + circleRadiusLine.geometry.setPositions( [ + 0, 0, 0, + ...B.clone().sub(center).toArray() + ] ); + + circleRadiusLine.geometry.verticesNeedUpdate = true; + circleRadiusLine.geometry.computeBoundingSphere(); + circleRadiusLine.position.copy(center); + circleRadiusLine.computeLineDistances(); + + const target = center.clone().add(N); + circleLine.position.copy(center); + circleLine.scale.set(radius, radius, radius); + circleLine.lookAt(target); + + circleRadiusLabel.visible = true; + circleRadiusLabel.position.copy(center.clone().add(B).multiplyScalar(0.5)); + circleRadiusLabel.setText(`${radius.toFixed(3)}`); + + } + } + + { // update area label + this.areaLabel.position.copy(centroid); + this.areaLabel.visible = this.showArea && this.points.length >= 3; + let area = this.getArea(); + + let suffix = ""; + if(this.lengthUnit != null && this.lengthUnitDisplay != null){ + area = area / Math.pow(this.lengthUnit.unitspermeter, 2) * Math.pow(this.lengthUnitDisplay.unitspermeter, 2); //convert to square meters then to the square display unit + suffix = this.lengthUnitDisplay.code; + } + + let txtArea = Utils.addCommas(area.toFixed(1)); + let msg = `${txtArea} ${suffix}\u00B2`; + this.areaLabel.setText(msg); + } + + // this.updateAzimuth(); + }; + + raycast (raycaster, intersects) { + for (let i = 0; i < this.points.length; i++) { + let sphere = this.spheres[i]; + + sphere.raycast(raycaster, intersects); + } + + // recalculate distances because they are not necessarely correct + // for scaled objects. + // see https://github.com/mrdoob/three.js/issues/5827 + // TODO: remove this once the bug has been fixed + for (let i = 0; i < intersects.length; i++) { + let I = intersects[i]; + I.distance = raycaster.ray.origin.distanceTo(I.point); + } + intersects.sort(function (a, b) { return a.distance - b.distance; }); + }; + + get showCoordinates () { + return this._showCoordinates; + } + + set showCoordinates (value) { + this._showCoordinates = value; + this.update(); + } + + get showAngles () { + return this._showAngles; + } + + set showAngles (value) { + this._showAngles = value; + this.update(); + } + + get showCircle () { + return this._showCircle; + } + + set showCircle (value) { + this._showCircle = value; + this.update(); + } + + get showAzimuth(){ + return this._showAzimuth; + } + + set showAzimuth(value){ + this._showAzimuth = value; + this.update(); + } + + get showEdges () { + return this._showEdges; + } + + set showEdges (value) { + this._showEdges = value; + this.update(); + } + + get showHeight () { + return this._showHeight; + } + + set showHeight (value) { + this._showHeight = value; + this.update(); + } + + get showArea () { + return this._showArea; + } + + set showArea (value) { + this._showArea = value; + this.update(); + } + + get closed () { + return this._closed; + } + + set closed (value) { + this._closed = value; + this.update(); + } + + get showDistances () { + return this._showDistances; + } + + set showDistances (value) { + this._showDistances = value; + this.update(); + } + + } + + class PolygonClipVolume extends Object3D{ + + constructor(camera){ + super(); + + this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; + this.name = "polygon_clip_volume_" + this.constructor.counter; + + this.camera = camera.clone(); + this.camera.rotation.set(...camera.rotation.toArray()); // [r85] workaround because camera.clone() doesn't work on rotation + this.camera.rotation.order = camera.rotation.order; + this.camera.updateMatrixWorld(); + this.camera.updateProjectionMatrix(); + this.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert(); + + this.viewMatrix = this.camera.matrixWorldInverse.clone(); + this.projMatrix = this.camera.projectionMatrix.clone(); + + // projected markers + this.markers = []; + this.initialized = false; + } + + addMarker() { + + let marker = new Mesh(); + + let cancel; + + let drag = e => { + let size = e.viewer.renderer.getSize(new Vector2()); + let projectedPos = new Vector3( + 2.0 * (e.drag.end.x / size.width) - 1.0, + -2.0 * (e.drag.end.y / size.height) + 1.0, + 0 + ); + + marker.position.copy(projectedPos); + }; + + let drop = e => { + cancel(); + }; + + cancel = e => { + marker.removeEventListener("drag", drag); + marker.removeEventListener("drop", drop); + }; + + marker.addEventListener("drag", drag); + marker.addEventListener("drop", drop); + + + this.markers.push(marker); + } + + removeLastMarker() { + if(this.markers.length > 0) { + this.markers.splice(this.markers.length - 1, 1); + } + } + + }; + + class Utils { + static async loadShapefileFeatures (file, callback) { + let features = []; + + let handleFinish = () => { + callback(features); + }; + + let source = await shapefile.open(file); + + while(true){ + let result = await source.read(); + + if (result.done) { + handleFinish(); + break; + } + + if (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) { + features.push(result.value); + } + } + + } + + static toString (value) { + if (value.x != null) { + return value.x.toFixed(2) + ', ' + value.y.toFixed(2) + ', ' + value.z.toFixed(2); + } else { + return '' + value + ''; + } + } + + static normalizeURL (url) { + let u = new URL(url); + + return u.protocol + '//' + u.hostname + u.pathname.replace(/\/+/g, '/'); + }; + + static pathExists (url) { + let req = XHRFactory.createXMLHttpRequest(); + req.open('GET', url, false); + req.send(null); + if (req.status !== 200) { + return false; + } + return true; + }; + + static debugSphere(parent, position, scale, color){ + let geometry = new SphereGeometry(1, 8, 8); + let material; + + if(color !== undefined){ + material = new MeshBasicMaterial({color: color}); + }else { + material = new MeshNormalMaterial(); + } + let sphere = new Mesh(geometry, material); + sphere.position.copy(position); + sphere.scale.set(scale, scale, scale); + parent.add(sphere); + + return sphere; + } + + static debugLine(parent, start, end, color){ + + let material = new LineBasicMaterial({ color: color }); + let geometry = new Geometry(); + + const p1 = new Vector3(0, 0, 0); + const p2 = end.clone().sub(start); + + geometry.vertices.push(p1, p2); + + let tl = new Line( geometry, material ); + tl.position.copy(start); + + parent.add(tl); + + let line = { + node: tl, + set: (start, end) => { + geometry.vertices[0].copy(start); + geometry.vertices[1].copy(end); + geometry.verticesNeedUpdate = true; + }, + }; + + return line; + } + + static debugCircle(parent, center, radius, normal, color){ + let material = new LineBasicMaterial({ color: color }); + + let geometry = new Geometry(); + + let n = 32; + for(let i = 0; i <= n; i++){ + let u0 = 2 * Math.PI * (i / n); + let u1 = 2 * Math.PI * (i + 1) / n; + + let p0 = new Vector3( + Math.cos(u0), + Math.sin(u0), + 0 + ); + + let p1 = new Vector3( + Math.cos(u1), + Math.sin(u1), + 0 + ); + + geometry.vertices.push(p0, p1); + } + + let tl = new Line( geometry, material ); + tl.position.copy(center); + tl.scale.set(radius, radius, radius); + + parent.add(tl); + } + + static debugBox(parent, box, transform = new Matrix4(), color = 0xFFFF00){ + + let vertices = [ + [box.min.x, box.min.y, box.min.z], + [box.min.x, box.min.y, box.max.z], + [box.min.x, box.max.y, box.min.z], + [box.min.x, box.max.y, box.max.z], + + [box.max.x, box.min.y, box.min.z], + [box.max.x, box.min.y, box.max.z], + [box.max.x, box.max.y, box.min.z], + [box.max.x, box.max.y, box.max.z], + ].map(v => new Vector3(...v)); + + let edges = [ + [0, 4], [4, 5], [5, 1], [1, 0], + [2, 6], [6, 7], [7, 3], [3, 2], + [0, 2], [4, 6], [5, 7], [1, 3] + ]; + + let center = box.getCenter(new Vector3()); + + let centroids = [ + {position: [box.min.x, center.y, center.z], color: 0xFF0000}, + {position: [box.max.x, center.y, center.z], color: 0x880000}, + + {position: [center.x, box.min.y, center.z], color: 0x00FF00}, + {position: [center.x, box.max.y, center.z], color: 0x008800}, + + {position: [center.x, center.y, box.min.z], color: 0x0000FF}, + {position: [center.x, center.y, box.max.z], color: 0x000088}, + ]; + + for(let vertex of vertices){ + let pos = vertex.clone().applyMatrix4(transform); + + Utils.debugSphere(parent, pos, 0.1, 0xFF0000); + } + + for(let edge of edges){ + let start = vertices[edge[0]].clone().applyMatrix4(transform); + let end = vertices[edge[1]].clone().applyMatrix4(transform); + + Utils.debugLine(parent, start, end, color); + } + + for(let centroid of centroids){ + let pos = new Vector3(...centroid.position).applyMatrix4(transform); + + Utils.debugSphere(parent, pos, 0.1, centroid.color); + } + } + + static debugPlane(parent, plane, size = 1, color = 0x0000FF){ + + let planehelper = new PlaneHelper(plane, size, color); + + parent.add(planehelper); + + } + + /** + * adapted from mhluska at https://github.com/mrdoob/three.js/issues/1561 + */ + static computeTransformedBoundingBox (box, transform) { + let vertices = [ + new Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform), + new Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform), + new Vector3(box.max.x, box.min.y, box.min.z).applyMatrix4(transform), + new Vector3(box.min.x, box.max.y, box.min.z).applyMatrix4(transform), + new Vector3(box.min.x, box.min.y, box.max.z).applyMatrix4(transform), + new Vector3(box.min.x, box.max.y, box.max.z).applyMatrix4(transform), + new Vector3(box.max.x, box.max.y, box.min.z).applyMatrix4(transform), + new Vector3(box.max.x, box.min.y, box.max.z).applyMatrix4(transform), + new Vector3(box.max.x, box.max.y, box.max.z).applyMatrix4(transform) + ]; + + let boundingBox = new Box3(); + boundingBox.setFromPoints(vertices); + + return boundingBox; + }; + + /** + * add separators to large numbers + * + * @param nStr + * @returns + */ + static addCommas (nStr) { + nStr += ''; + let x = nStr.split('.'); + let x1 = x[0]; + let x2 = x.length > 1 ? '.' + x[1] : ''; + let rgx = /(\d+)(\d{3})/; + while (rgx.test(x1)) { + x1 = x1.replace(rgx, '$1' + ',' + '$2'); + } + return x1 + x2; + }; + + static removeCommas (str) { + return str.replace(/,/g, ''); + } + + /** + * create worker from a string + * + * code from http://stackoverflow.com/questions/10343913/how-to-create-a-web-worker-from-a-string + */ + static createWorker (code) { + let blob = new Blob([code], {type: 'application/javascript'}); + let worker = new Worker(URL.createObjectURL(blob)); + + return worker; + }; + + static moveTo(scene, endPosition, endTarget){ + + let view = scene.view; + let camera = scene.getActiveCamera(); + let animationDuration = 500; + let easing = TWEEN.Easing.Quartic.Out; + + { // animate camera position + let tween = new TWEEN.Tween(view.position).to(endPosition, animationDuration); + tween.easing(easing); + tween.start(); + } + + { // animate camera target + let camTargetDistance = camera.position.distanceTo(endTarget); + let target = new Vector3().addVectors( + camera.position, + camera.getWorldDirection(new Vector3()).clone().multiplyScalar(camTargetDistance) + ); + let tween = new TWEEN.Tween(target).to(endTarget, animationDuration); + tween.easing(easing); + tween.onUpdate(() => { + view.lookAt(target); + }); + tween.onComplete(() => { + view.lookAt(target); + }); + tween.start(); + } + + } + + static loadSkybox (path) { + let parent = new Object3D("skybox_root"); + + let camera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 100000); + camera.up.set(0, 0, 1); + let scene = new Scene(); + + let format = '.jpg'; + let urls = [ + path + 'px' + format, path + 'nx' + format, + path + 'py' + format, path + 'ny' + format, + path + 'pz' + format, path + 'nz' + format + ]; + + let materialArray = []; + { + for (let i = 0; i < 6; i++) { + let material = new MeshBasicMaterial({ + map: null, + side: BackSide, + depthTest: false, + depthWrite: false, + color: 0x424556 + }); + + materialArray.push(material); + + let loader = new TextureLoader(); + loader.load(urls[i], + function loaded (texture) { + material.map = texture; + material.needsUpdate = true; + material.color.setHex(0xffffff); + }, function progress (xhr) { + // console.log( (xhr.loaded / xhr.total * 100) + '% loaded' ); + }, function error (xhr) { + console.log('An error happened', xhr); + } + ); + } + } + + let skyGeometry = new BoxGeometry(700, 700, 700); + let skybox = new Mesh(skyGeometry, materialArray); + + scene.add(skybox); + + scene.traverse(n => n.frustumCulled = false); + + // z up + scene.rotation.x = Math.PI / 2; + + parent.children.push(camera); + camera.parent = parent; + + return {camera, scene, parent}; + }; + + static createGrid (width, length, spacing, color) { + let material = new LineBasicMaterial({ + color: color || 0x888888 + }); + + let geometry = new Geometry(); + for (let i = 0; i <= length; i++) { + geometry.vertices.push(new Vector3(-(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0)); + geometry.vertices.push(new Vector3(+(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0)); + } + + for (let i = 0; i <= width; i++) { + geometry.vertices.push(new Vector3(i * spacing - (spacing * width) / 2, -(spacing * length) / 2, 0)); + geometry.vertices.push(new Vector3(i * spacing - (spacing * width) / 2, +(spacing * length) / 2, 0)); + } + + let line = new LineSegments(geometry, material, LinePieces); + line.receiveShadow = true; + return line; + } + + static createBackgroundTexture (width, height) { + function gauss (x, y) { + return (1 / (2 * Math.PI)) * Math.exp(-(x * x + y * y) / 2); + }; + + // map.magFilter = THREE.NearestFilter; + let size = width * height; + let data = new Uint8Array(3 * size); + + let chroma = [1, 1.5, 1.7]; + let max = gauss(0, 0); + + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + let u = 2 * (x / width) - 1; + let v = 2 * (y / height) - 1; + + let i = x + width * y; + let d = gauss(2 * u, 2 * v) / max; + let r = (Math.random() + Math.random() + Math.random()) / 3; + r = (d * 0.5 + 0.5) * r * 0.03; + r = r * 0.4; + + // d = Math.pow(d, 0.6); + + data[3 * i + 0] = 255 * (d / 15 + 0.05 + r) * chroma[0]; + data[3 * i + 1] = 255 * (d / 15 + 0.05 + r) * chroma[1]; + data[3 * i + 2] = 255 * (d / 15 + 0.05 + r) * chroma[2]; + } + } + + let texture = new DataTexture(data, width, height, RGBFormat); + texture.needsUpdate = true; + + return texture; + } + + static getMousePointCloudIntersection (mouse, camera, viewer, pointclouds, params = {}) { + + let renderer = viewer.renderer; + + let nmouse = { + x: (mouse.x / renderer.domElement.clientWidth) * 2 - 1, + y: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1 + }; + + let pickParams = {}; + + if(params.pickClipped){ + pickParams.pickClipped = params.pickClipped; + } + + pickParams.x = mouse.x; + pickParams.y = renderer.domElement.clientHeight - mouse.y; + + let raycaster = new Raycaster(); + raycaster.setFromCamera(nmouse, camera); + let ray = raycaster.ray; + + let selectedPointcloud = null; + let closestDistance = Infinity; + let closestIntersection = null; + let closestPoint = null; + + for(let pointcloud of pointclouds){ + let point = pointcloud.pick(viewer, camera, ray, pickParams); + + if(!point){ + continue; + } + + let distance = camera.position.distanceTo(point.position); + + if (distance < closestDistance) { + closestDistance = distance; + selectedPointcloud = pointcloud; + closestIntersection = point.position; + closestPoint = point; + } + } + + if (selectedPointcloud) { + return { + location: closestIntersection, + distance: closestDistance, + pointcloud: selectedPointcloud, + point: closestPoint + }; + } else { + return null; + } + } + + static pixelsArrayToImage (pixels, width, height) { + let canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + + let context = canvas.getContext('2d'); + + pixels = new pixels.constructor(pixels); + + for (let i = 0; i < pixels.length; i++) { + pixels[i * 4 + 3] = 255; + } + + let imageData = context.createImageData(width, height); + imageData.data.set(pixels); + context.putImageData(imageData, 0, 0); + + let img = new Image(); + img.src = canvas.toDataURL(); + // img.style.transform = "scaleY(-1)"; + + return img; + } + + static pixelsArrayToDataUrl(pixels, width, height) { + let canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + + let context = canvas.getContext('2d'); + + pixels = new pixels.constructor(pixels); + + for (let i = 0; i < pixels.length; i++) { + pixels[i * 4 + 3] = 255; + } + + let imageData = context.createImageData(width, height); + imageData.data.set(pixels); + context.putImageData(imageData, 0, 0); + + let dataURL = canvas.toDataURL(); + + return dataURL; + } + + static pixelsArrayToCanvas(pixels, width, height){ + let canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + + let context = canvas.getContext('2d'); + + pixels = new pixels.constructor(pixels); + + //for (let i = 0; i < pixels.length; i++) { + // pixels[i * 4 + 3] = 255; + //} + + // flip vertically + let bytesPerLine = width * 4; + for(let i = 0; i < parseInt(height / 2); i++){ + let j = height - i - 1; + + let lineI = pixels.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine); + let lineJ = pixels.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine); + pixels.set(lineJ, i * bytesPerLine); + pixels.set(lineI, j * bytesPerLine); + } + + let imageData = context.createImageData(width, height); + imageData.data.set(pixels); + context.putImageData(imageData, 0, 0); + + return canvas; + } + + static removeListeners(dispatcher, type){ + if (dispatcher._listeners === undefined) { + return; + } + + if (dispatcher._listeners[ type ]) { + delete dispatcher._listeners[ type ]; + } + } + + static mouseToRay(mouse, camera, width, height){ + + let normalizedMouse = { + x: (mouse.x / width) * 2 - 1, + y: -(mouse.y / height) * 2 + 1 + }; + + let vector = new Vector3(normalizedMouse.x, normalizedMouse.y, 0.5); + let origin = camera.position.clone(); + vector.unproject(camera); + let direction = new Vector3().subVectors(vector, origin).normalize(); + + let ray = new Ray(origin, direction); + + return ray; + } + + static projectedRadius(radius, camera, distance, screenWidth, screenHeight){ + if(camera instanceof OrthographicCamera){ + return Utils.projectedRadiusOrtho(radius, camera.projectionMatrix, screenWidth, screenHeight); + }else if(camera instanceof PerspectiveCamera){ + return Utils.projectedRadiusPerspective(radius, camera.fov * Math.PI / 180, distance, screenHeight); + }else { + throw new Error("invalid parameters"); + } + } + + static projectedRadiusPerspective(radius, fov, distance, screenHeight) { + let projFactor = (1 / Math.tan(fov / 2)) / distance; + projFactor = projFactor * screenHeight / 2; + + return radius * projFactor; + } + + static projectedRadiusOrtho(radius, proj, screenWidth, screenHeight) { + let p1 = new Vector4(0); + let p2 = new Vector4(radius); + + p1.applyMatrix4(proj); + p2.applyMatrix4(proj); + p1 = new Vector3(p1.x, p1.y, p1.z); + p2 = new Vector3(p2.x, p2.y, p2.z); + p1.x = (p1.x + 1.0) * 0.5 * screenWidth; + p1.y = (p1.y + 1.0) * 0.5 * screenHeight; + p2.x = (p2.x + 1.0) * 0.5 * screenWidth; + p2.y = (p2.y + 1.0) * 0.5 * screenHeight; + return p1.distanceTo(p2); + } + + + static topView(camera, node){ + camera.position.set(0, 1, 0); + camera.rotation.set(-Math.PI / 2, 0, 0); + camera.zoomTo(node, 1); + } + + static frontView (camera, node) { + camera.position.set(0, 0, 1); + camera.rotation.set(0, 0, 0); + camera.zoomTo(node, 1); + } + + static leftView (camera, node) { + camera.position.set(-1, 0, 0); + camera.rotation.set(0, -Math.PI / 2, 0); + camera.zoomTo(node, 1); + } + + static rightView (camera, node) { + camera.position.set(1, 0, 0); + camera.rotation.set(0, Math.PI / 2, 0); + camera.zoomTo(node, 1); + } + + + static findClosestGpsTime(target, viewer){ + const start = performance.now(); + + const nodes = []; + for(const pc of viewer.scene.pointclouds){ + nodes.push(pc.root); + + for(const child of pc.root.children){ + if(child){ + nodes.push(child); + } + } + } + + let closestNode = null; + let closestIndex = Infinity; + let closestDistance = Infinity; + let closestValue = 0; + + for(const node of nodes){ + + const isOkay = node.geometryNode != null + && node.geometryNode.geometry != null + && node.sceneNode != null; + + if(!isOkay){ + continue; + } + + let geometry = node.geometryNode.geometry; + let gpsTime = geometry.attributes["gps-time"]; + let range = gpsTime.potree.range; + + for(let i = 0; i < gpsTime.array.length; i++){ + let value = gpsTime.array[i]; + value = value * (range[1] - range[0]) + range[0]; + const distance = Math.abs(target - value); + + if(distance < closestDistance){ + closestIndex = i; + closestDistance = distance; + closestValue = value; + closestNode = node; + //console.log("found a closer one: " + value); + } + } + } + + const geometry = closestNode.geometryNode.geometry; + const position = new Vector3( + geometry.attributes.position.array[3 * closestIndex + 0], + geometry.attributes.position.array[3 * closestIndex + 1], + geometry.attributes.position.array[3 * closestIndex + 2], + ); + + position.applyMatrix4(closestNode.sceneNode.matrixWorld); + + const end = performance.now(); + const duration = (end - start); + console.log(`duration: ${duration.toFixed(3)}ms`); + + return { + node: closestNode, + index: closestIndex, + position: position, + }; + } + + /** + * + * 0: no intersection + * 1: intersection + * 2: fully inside + */ + static frustumSphereIntersection (frustum, sphere) { + let planes = frustum.planes; + let center = sphere.center; + let negRadius = -sphere.radius; + + let minDistance = Number.MAX_VALUE; + + for (let i = 0; i < 6; i++) { + let distance = planes[ i ].distanceToPoint(center); + + if (distance < negRadius) { + return 0; + } + + minDistance = Math.min(minDistance, distance); + } + + return (minDistance >= sphere.radius) ? 2 : 1; + } + + // code taken from three.js + // ImageUtils - generateDataTexture() + static generateDataTexture (width, height, color) { + let size = width * height; + let data = new Uint8Array(4 * width * height); + + let r = Math.floor(color.r * 255); + let g = Math.floor(color.g * 255); + let b = Math.floor(color.b * 255); + + for (let i = 0; i < size; i++) { + data[ i * 3 ] = r; + data[ i * 3 + 1 ] = g; + data[ i * 3 + 2 ] = b; + } + + let texture = new DataTexture(data, width, height, RGBAFormat); + texture.needsUpdate = true; + texture.magFilter = NearestFilter; + + return texture; + } + + // from http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript + static getParameterByName (name) { + name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]'); + let regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); + let results = regex.exec(document.location.search); + return results === null ? null : decodeURIComponent(results[1].replace(/\+/g, ' ')); + } + + static setParameter (name, value) { + // value = encodeURIComponent(value); + + name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]'); + let regex = new RegExp('([\\?&])(' + name + '=([^&#]*))'); + let results = regex.exec(document.location.search); + + let url = window.location.href; + if (results === null) { + if (window.location.search.length === 0) { + url = url + '?'; + } else { + url = url + '&'; + } + + url = url + name + '=' + value; + } else { + let newValue = name + '=' + value; + url = url.replace(results[2], newValue); + } + window.history.replaceState({}, '', url); + } + + static createChildAABB(aabb, index){ + let min = aabb.min.clone(); + let max = aabb.max.clone(); + let size = new Vector3().subVectors(max, min); + + if ((index & 0b0001) > 0) { + min.z += size.z / 2; + } else { + max.z -= size.z / 2; + } + + if ((index & 0b0010) > 0) { + min.y += size.y / 2; + } else { + max.y -= size.y / 2; + } + + if ((index & 0b0100) > 0) { + min.x += size.x / 2; + } else { + max.x -= size.x / 2; + } + + return new Box3(min, max); + } + + // see https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript + static clipboardCopy(text){ + let textArea = document.createElement("textarea"); + + textArea.style.position = 'fixed'; + textArea.style.top = 0; + textArea.style.left = 0; + + textArea.style.width = '2em'; + textArea.style.height = '2em'; + + textArea.style.padding = 0; + + textArea.style.border = 'none'; + textArea.style.outline = 'none'; + textArea.style.boxShadow = 'none'; + + textArea.style.background = 'transparent'; + + textArea.value = text; + + document.body.appendChild(textArea); + + textArea.select(); + + try { + let success = document.execCommand('copy'); + if(success){ + console.log("copied text to clipboard"); + }else { + console.log("copy to clipboard failed"); + } + } catch (err) { + console.log("error while trying to copy to clipboard"); + } + + document.body.removeChild(textArea); + + } + + static getMeasurementIcon(measurement){ + if (measurement instanceof Measure) { + if (measurement.showDistances && !measurement.showArea && !measurement.showAngles) { + return `${Potree.resourcePath}/icons/distance.svg`; + } else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) { + return `${Potree.resourcePath}/icons/area.svg`; + } else if (measurement.maxMarkers === 1) { + return `${Potree.resourcePath}/icons/point.svg`; + } else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) { + return `${Potree.resourcePath}/icons/angle.png`; + } else if (measurement.showHeight) { + return `${Potree.resourcePath}/icons/height.svg`; + } else { + return `${Potree.resourcePath}/icons/distance.svg`; + } + } else if (measurement instanceof Profile) { + return `${Potree.resourcePath}/icons/profile.svg`; + } else if (measurement instanceof Volume) { + return `${Potree.resourcePath}/icons/volume.svg`; + } else if (measurement instanceof PolygonClipVolume) { + return `${Potree.resourcePath}/icons/clip-polygon.svg`; + } + } + + static lineToLineIntersection(P0, P1, P2, P3){ + + const P = [P0, P1, P2, P3]; + + const d = (m, n, o, p) => { + let result = + (P[m].x - P[n].x) * (P[o].x - P[p].x) + + (P[m].y - P[n].y) * (P[o].y - P[p].y) + + (P[m].z - P[n].z) * (P[o].z - P[p].z); + + return result; + }; + + + const mua = (d(0, 2, 3, 2) * d(3, 2, 1, 0) - d(0, 2, 1, 0) * d(3, 2, 3, 2)) + /**-----------------------------------------------------------------**/ / + (d(1, 0, 1, 0) * d(3, 2, 3, 2) - d(3, 2, 1, 0) * d(3, 2, 1, 0)); + + + const mub = (d(0, 2, 3, 2) + mua * d(3, 2, 1, 0)) + /**--------------------------------------**/ / + d(3, 2, 3, 2); + + + const P01 = P1.clone().sub(P0); + const P23 = P3.clone().sub(P2); + + const Pa = P0.clone().add(P01.multiplyScalar(mua)); + const Pb = P2.clone().add(P23.multiplyScalar(mub)); + + const center = Pa.clone().add(Pb).multiplyScalar(0.5); + + return center; + } + + static computeCircleCenter(A, B, C){ + const AB = B.clone().sub(A); + const AC = C.clone().sub(A); + + const N = AC.clone().cross(AB).normalize(); + + const ab_dir = AB.clone().cross(N).normalize(); + const ac_dir = AC.clone().cross(N).normalize(); + + const ab_origin = A.clone().add(B).multiplyScalar(0.5); + const ac_origin = A.clone().add(C).multiplyScalar(0.5); + + const P0 = ab_origin; + const P1 = ab_origin.clone().add(ab_dir); + + const P2 = ac_origin; + const P3 = ac_origin.clone().add(ac_dir); + + const center = Utils.lineToLineIntersection(P0, P1, P2, P3); + + return center; + + // Potree.Utils.debugLine(viewer.scene.scene, P0, P1, 0x00ff00); + // Potree.Utils.debugLine(viewer.scene.scene, P2, P3, 0x0000ff); + + // Potree.Utils.debugSphere(viewer.scene.scene, center, 0.03, 0xff00ff); + + // const radius = center.distanceTo(A); + // Potree.Utils.debugCircle(viewer.scene.scene, center, radius, new THREE.Vector3(0, 0, 1), 0xff00ff); + } + + static getNorthVec(p1, distance, projection){ + if(projection){ + // if there is a projection, transform coordinates to WGS84 + // and compute angle to north there + + proj4.defs("pointcloud", projection); + const transform = proj4("pointcloud", "WGS84"); + + const llP1 = transform.forward(p1.toArray()); + let llP2 = transform.forward([p1.x, p1.y + distance]); + const polarRadius = Math.sqrt((llP2[0] - llP1[0]) ** 2 + (llP2[1] - llP1[1]) ** 2); + llP2 = [llP1[0], llP1[1] + polarRadius]; + + const northVec = transform.inverse(llP2); + + return new Vector3(...northVec, p1.z).sub(p1); + }else { + // if there is no projection, assume [0, 1, 0] as north direction + + const vec = new Vector3(0, 1, 0).multiplyScalar(distance); + + return vec; + } + } + + static computeAzimuth(p1, p2, projection){ + + let azimuth = 0; + + if(projection){ + // if there is a projection, transform coordinates to WGS84 + // and compute angle to north there + + let transform; + + if (projection.includes('EPSG')) { + transform = proj4(projection, "WGS84"); + } else { + proj4.defs("pointcloud", projection); + transform = proj4("pointcloud", "WGS84"); + } + + const llP1 = transform.forward(p1.toArray()); + const llP2 = transform.forward(p2.toArray()); + const dir = [ + llP2[0] - llP1[0], + llP2[1] - llP1[1], + ]; + azimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2; + }else { + // if there is no projection, assume [0, 1, 0] as north direction + + const dir = [p2.x - p1.x, p2.y - p1.y]; + azimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2; + } + + // make clockwise + azimuth = -azimuth; + + return azimuth; + } + + static async loadScript(url){ + + return new Promise( resolve => { + + const element = document.getElementById(url); + + if(element){ + resolve(); + }else { + const script = document.createElement("script"); + + script.id = url; + + script.onload = () => { + resolve(); + }; + script.src = url; + + document.body.appendChild(script); + } + }); + } + + static createSvgGradient(scheme){ + + // this is what we are creating: + // + // + // + // + // + // ... + // + // + // + // + // + // + + + const gradientId = `${Math.random()}_${Date.now()}`; + + const svgn = "http://www.w3.org/2000/svg"; + const svg = document.createElementNS(svgn, "svg"); + svg.setAttributeNS(null, "width", "2em"); + svg.setAttributeNS(null, "height", "3em"); + + { // + const defs = document.createElementNS(svgn, "defs"); + + const linearGradient = document.createElementNS(svgn, "linearGradient"); + linearGradient.setAttributeNS(null, "id", gradientId); + linearGradient.setAttributeNS(null, "gradientTransform", "rotate(90)"); + + for(let i = scheme.length - 1; i >= 0; i--){ + const stopVal = scheme[i]; + const percent = parseInt(100 - stopVal[0] * 100); + const [r, g, b] = stopVal[1].toArray().map(v => parseInt(v * 255)); + + const stop = document.createElementNS(svgn, "stop"); + stop.setAttributeNS(null, "offset", `${percent}%`); + stop.setAttributeNS(null, "stop-color", `rgb(${r}, ${g}, ${b})`); + + linearGradient.appendChild(stop); + } + + defs.appendChild(linearGradient); + svg.appendChild(defs); + } + + const rect = document.createElementNS(svgn, "rect"); + rect.setAttributeNS(null, "width", `100%`); + rect.setAttributeNS(null, "height", `100%`); + rect.setAttributeNS(null, "fill", `url("#${gradientId}")`); + rect.setAttributeNS(null, "stroke", `black`); + rect.setAttributeNS(null, "stroke-width", `0.1em`); + + svg.appendChild(rect); + + return svg; + } + + static async waitAny(promises){ + + return new Promise( (resolve) => { + + promises.map( promise => { + promise.then( () => { + resolve(); + }); + }); + + }); + + } + + } + + Utils.screenPass = new function () { + this.screenScene = new Scene(); + this.screenQuad = new Mesh(new PlaneBufferGeometry(2, 2, 1)); + this.screenQuad.material.depthTest = true; + this.screenQuad.material.depthWrite = true; + this.screenQuad.material.transparent = true; + this.screenScene.add(this.screenQuad); + this.camera = new Camera(); + + this.render = function (renderer, material, target) { + this.screenQuad.material = material; + + if (typeof target === 'undefined') { + renderer.render(this.screenScene, this.camera); + } else { + renderer.render(this.screenScene, this.camera, target); + } + }; + }(); + + class Annotation extends EventDispatcher { + constructor (args = {}) { + super(); + + this.scene = null; + this._title = args.title || 'No Title'; + this._description = args.description || ''; + this.offset = new Vector3(); + this.uuid = MathUtils.generateUUID(); + + if (!args.position) { + this.position = null; + } else if (args.position.x != null) { + this.position = args.position; + } else { + this.position = new Vector3(...args.position); + } + + this.cameraPosition = (args.cameraPosition instanceof Array) + ? new Vector3().fromArray(args.cameraPosition) : args.cameraPosition; + this.cameraTarget = (args.cameraTarget instanceof Array) + ? new Vector3().fromArray(args.cameraTarget) : args.cameraTarget; + this.radius = args.radius; + this.view = args.view || null; + this.keepOpen = false; + this.descriptionVisible = false; + this.showDescription = true; + this.actions = args.actions || []; + this.isHighlighted = false; + this._visible = true; + this.__visible = true; + this._display = true; + this._expand = false; + this.collapseThreshold = [args.collapseThreshold, 100].find(e => e !== undefined); + + this.children = []; + this.parent = null; + this.boundingBox = new Box3(); + + let iconClose = exports.resourcePath + '/icons/close.svg'; + + this.domElement = $(` +
        +
        + +
        +
        + + + + ${this._description} +
        +
        + `); + + this.elTitlebar = this.domElement.find('.annotation-titlebar'); + this.elTitle = this.elTitlebar.find('.annotation-label'); + this.elTitle.append(this._title); + this.elDescription = this.domElement.find('.annotation-description'); + this.elDescriptionClose = this.elDescription.find('.annotation-description-close'); + // this.elDescriptionContent = this.elDescription.find(".annotation-description-content"); + + this.clickTitle = () => { + if(this.hasView()){ + this.moveHere(this.scene.getActiveCamera()); + } + this.dispatchEvent({type: 'click', target: this}); + }; + + this.elTitle.click(this.clickTitle); + + this.actions = this.actions.map(a => { + if (a instanceof Action) { + return a; + } else { + return new Action(a); + } + }); + + for (let action of this.actions) { + action.pairWith(this); + } + + let actions = this.actions.filter( + a => a.showIn === undefined || a.showIn.includes('scene')); + + for (let action of actions) { + let elButton = $(``); + this.elTitlebar.append(elButton); + elButton.click(() => action.onclick({annotation: this})); + } + + this.elDescriptionClose.hover( + e => this.elDescriptionClose.css('opacity', '1'), + e => this.elDescriptionClose.css('opacity', '0.5') + ); + this.elDescriptionClose.click(e => this.setHighlighted(false)); + // this.elDescriptionContent.html(this._description); + + this.domElement.mouseenter(e => this.setHighlighted(true)); + this.domElement.mouseleave(e => this.setHighlighted(false)); + + this.domElement.on('touchstart', e => { + this.setHighlighted(!this.isHighlighted); + }); + + this.display = false; + //this.display = true; + + } + + installHandles(viewer){ + if(this.handles !== undefined){ + return; + } + + let domElement = $(` +
        + + + + + +
        + `); + + let svg = domElement.find("svg")[0]; + let elLine = domElement.find("line")[0]; + let elStart = domElement.find("circle")[0]; + let elEnd = domElement.find("circle")[1]; + + let setCoordinates = (start, end) => { + elStart.setAttribute("cx", `${start.x}`); + elStart.setAttribute("cy", `${start.y}`); + + elEnd.setAttribute("cx", `${end.x}`); + elEnd.setAttribute("cy", `${end.y}`); + + elLine.setAttribute("x1", start.x); + elLine.setAttribute("y1", start.y); + elLine.setAttribute("x2", end.x); + elLine.setAttribute("y2", end.y); + + let box = svg.getBBox(); + svg.setAttribute("width", `${box.width}`); + svg.setAttribute("height", `${box.height}`); + svg.setAttribute("viewBox", `${box.x} ${box.y} ${box.width} ${box.height}`); + + let ya = start.y - end.y; + let xa = start.x - end.x; + + if(ya > 0){ + start.y = start.y - ya; + } + if(xa > 0){ + start.x = start.x - xa; + } + + domElement.css("left", `${start.x}px`); + domElement.css("top", `${start.y}px`); + + }; + + $(viewer.renderArea).append(domElement); + + + let annotationStartPos = this.position.clone(); + let annotationStartOffset = this.offset.clone(); + + $(this.domElement).draggable({ + start: (event, ui) => { + annotationStartPos = this.position.clone(); + annotationStartOffset = this.offset.clone(); + $(this.domElement).find(".annotation-titlebar").css("pointer-events", "none"); + + console.log($(this.domElement).find(".annotation-titlebar")); + }, + stop: () => { + $(this.domElement).find(".annotation-titlebar").css("pointer-events", ""); + }, + drag: (event, ui ) => { + let renderAreaWidth = viewer.renderer.getSize(new Vector2()).width; + //let renderAreaHeight = viewer.renderer.getSize().height; + + let diff = { + x: ui.originalPosition.left - ui.position.left, + y: ui.originalPosition.top - ui.position.top + }; + + let nDiff = { + x: -(diff.x / renderAreaWidth) * 2, + y: (diff.y / renderAreaWidth) * 2 + }; + + let camera = viewer.scene.getActiveCamera(); + let oldScreenPos = new Vector3() + .addVectors(annotationStartPos, annotationStartOffset) + .project(camera); + + let newScreenPos = oldScreenPos.clone(); + newScreenPos.x += nDiff.x; + newScreenPos.y += nDiff.y; + + let newPos = newScreenPos.clone(); + newPos.unproject(camera); + + let newOffset = new Vector3().subVectors(newPos, this.position); + this.offset.copy(newOffset); + } + }); + + let updateCallback = () => { + let position = this.position; + let scene = viewer.scene; + + const renderAreaSize = viewer.renderer.getSize(new Vector2()); + let renderAreaWidth = renderAreaSize.width; + let renderAreaHeight = renderAreaSize.height; + + let start = this.position.clone(); + let end = new Vector3().addVectors(this.position, this.offset); + + let toScreen = (position) => { + let camera = scene.getActiveCamera(); + let screenPos = new Vector3(); + + let worldView = new Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); + let ndc = new Vector4(position.x, position.y, position.z, 1.0).applyMatrix4(worldView); + // limit w to small positive value, in case position is behind the camera + ndc.w = Math.max(ndc.w, 0.1); + ndc.divideScalar(ndc.w); + + screenPos.copy(ndc); + screenPos.x = renderAreaWidth * (screenPos.x + 1) / 2; + screenPos.y = renderAreaHeight * (1 - (screenPos.y + 1) / 2); + + return screenPos; + }; + + start = toScreen(start); + end = toScreen(end); + + setCoordinates(start, end); + + }; + + viewer.addEventListener("update", updateCallback); + + this.handles = { + domElement: domElement, + setCoordinates: setCoordinates, + updateCallback: updateCallback + }; + } + + removeHandles(viewer){ + if(this.handles === undefined){ + return; + } + + //$(viewer.renderArea).remove(this.handles.domElement); + this.handles.domElement.remove(); + viewer.removeEventListener("update", this.handles.updateCallback); + + delete this.handles; + } + + get visible () { + return this._visible; + } + + set visible (value) { + if (this._visible === value) { + return; + } + + this._visible = value; + + //this.traverse(node => { + // node.display = value; + //}); + + this.dispatchEvent({ + type: 'visibility_changed', + annotation: this + }); + } + + get display () { + return this._display; + } + + set display (display) { + if (this._display === display) { + return; + } + + this._display = display; + + if (display) { + // this.domElement.fadeIn(200); + this.domElement.show(); + } else { + // this.domElement.fadeOut(200); + this.domElement.hide(); + } + } + + get expand () { + return this._expand; + } + + set expand (expand) { + if (this._expand === expand) { + return; + } + + if (expand) { + this.display = false; + } else { + this.display = true; + this.traverseDescendants(node => { + node.display = false; + }); + } + + this._expand = expand; + } + + get title () { + return this._title; + } + + set title (title) { + if (this._title === title) { + return; + } + + this._title = title; + this.elTitle.empty(); + this.elTitle.append(this._title); + + this.dispatchEvent({ + type: "annotation_changed", + annotation: this, + }); + } + + get description () { + return this._description; + } + + set description (description) { + if (this._description === description) { + return; + } + + this._description = description; + + const elDescriptionContent = this.elDescription.find(".annotation-description-content"); + elDescriptionContent.empty(); + elDescriptionContent.append(this._description); + + this.dispatchEvent({ + type: "annotation_changed", + annotation: this, + }); + } + + add (annotation) { + if (!this.children.includes(annotation)) { + this.children.push(annotation); + annotation.parent = this; + + let descendants = []; + annotation.traverse(a => { descendants.push(a); }); + + for (let descendant of descendants) { + let c = this; + while (c !== null) { + c.dispatchEvent({ + 'type': 'annotation_added', + 'annotation': descendant + }); + c = c.parent; + } + } + } + } + + level () { + if (this.parent === null) { + return 0; + } else { + return this.parent.level() + 1; + } + } + + hasChild(annotation) { + return this.children.includes(annotation); + } + + remove (annotation) { + if (this.hasChild(annotation)) { + annotation.removeAllChildren(); + annotation.dispose(); + this.children = this.children.filter(e => e !== annotation); + annotation.parent = null; + } + } + + removeAllChildren() { + this.children.forEach((child) => { + if (child.children.length > 0) { + child.removeAllChildren(); + } + + this.remove(child); + }); + } + + updateBounds () { + let box = new Box3(); + + if (this.position) { + box.expandByPoint(this.position); + } + + for (let child of this.children) { + child.updateBounds(); + + box.union(child.boundingBox); + } + + this.boundingBox.copy(box); + } + + traverse (handler) { + let expand = handler(this); + + if (expand === undefined || expand === true) { + for (let child of this.children) { + child.traverse(handler); + } + } + } + + traverseDescendants (handler) { + for (let child of this.children) { + child.traverse(handler); + } + } + + flatten () { + let annotations = []; + + this.traverse(annotation => { + annotations.push(annotation); + }); + + return annotations; + } + + descendants () { + let annotations = []; + + this.traverse(annotation => { + if (annotation !== this) { + annotations.push(annotation); + } + }); + + return annotations; + } + + setHighlighted (highlighted) { + if (highlighted) { + this.domElement.css('opacity', '0.8'); + this.elTitlebar.css('box-shadow', '0 0 5px #fff'); + this.domElement.css('z-index', '1000'); + + if (this._description) { + this.descriptionVisible = true; + this.elDescription.fadeIn(200); + this.elDescription.css('position', 'relative'); + } + } else { + this.domElement.css('opacity', '0.5'); + this.elTitlebar.css('box-shadow', ''); + this.domElement.css('z-index', '100'); + this.descriptionVisible = false; + this.elDescription.css('display', 'none'); + } + + this.isHighlighted = highlighted; + } + + hasView () { + let hasPosTargetView = this.cameraTarget.x != null; + hasPosTargetView = hasPosTargetView && this.cameraPosition.x != null; + + let hasRadiusView = this.radius !== undefined; + + let hasView = hasPosTargetView || hasRadiusView; + + return hasView; + }; + + moveHere (camera) { + if (!this.hasView()) { + return; + } + + let view = this.scene.view; + let animationDuration = 500; + let easing = TWEEN.Easing.Quartic.Out; + + let endTarget; + if (this.cameraTarget) { + endTarget = this.cameraTarget; + } else if (this.position) { + endTarget = this.position; + } else { + endTarget = this.boundingBox.getCenter(new Vector3()); + } + + if (this.cameraPosition) { + let endPosition = this.cameraPosition; + + Utils.moveTo(this.scene, endPosition, endTarget); + } else if (this.radius) { + let direction = view.direction; + let endPosition = endTarget.clone().add(direction.multiplyScalar(-this.radius)); + let startRadius = view.radius; + let endRadius = this.radius; + + { // animate camera position + let tween = new TWEEN.Tween(view.position).to(endPosition, animationDuration); + tween.easing(easing); + tween.start(); + } + + { // animate radius + let t = {x: 0}; + + let tween = new TWEEN.Tween(t) + .to({x: 1}, animationDuration) + .onUpdate(function () { + view.radius = this.x * endRadius + (1 - this.x) * startRadius; + }); + tween.easing(easing); + tween.start(); + } + } + }; + + dispose () { + if (this.domElement.parentElement) { + this.domElement.parentElement.removeChild(this.domElement); + } + }; + + toString () { + return 'Annotation: ' + this._title; + } + }; + + class EnumItem{ + constructor(object){ + for(let key of Object.keys(object)){ + this[key] = object[key]; + } + } + + inspect(){ + return `Enum(${this.name}: ${this.value})`; + } + }; + + class Enum{ + + constructor(object){ + this.object = object; + + for(let key of Object.keys(object)){ + let value = object[key]; + + if(typeof value === "object"){ + value.name = key; + }else { + value = {name: key, value: value}; + } + + this[key] = new EnumItem(value); + } + } + + fromValue(value){ + for(let key of Object.keys(this.object)){ + if(this[key].value === value){ + return this[key]; + } + } + + throw new Error(`No enum for value: ${value}`); + } + + }; + + const CameraMode = { + ORTHOGRAPHIC: 0, + PERSPECTIVE: 1, + VR: 2, + }; + + const ClipTask = { + NONE: 0, + HIGHLIGHT: 1, + SHOW_INSIDE: 2, + SHOW_OUTSIDE: 3 + }; + + const ClipMethod = { + INSIDE_ANY: 0, + INSIDE_ALL: 1 + }; + + const ElevationGradientRepeat = { + CLAMP: 0, + REPEAT: 1, + MIRRORED_REPEAT: 2, + }; + + const MOUSE$1 = { + LEFT: 0b0001, + RIGHT: 0b0010, + MIDDLE: 0b0100 + }; + + const PointSizeType = { + FIXED: 0, + ATTENUATED: 1, + ADAPTIVE: 2 + }; + + const PointShape = { + SQUARE: 0, + CIRCLE: 1, + PARABOLOID: 2 + }; + + const TreeType = { + OCTREE: 0, + KDTREE: 1 + }; + + const LengthUnits = { + METER: {code: 'm', unitspermeter: 1.0}, + FEET: {code: 'ft', unitspermeter: 3.28084}, + INCH: {code: '\u2033', unitspermeter: 39.3701} + }; + + let ftCanvas = document.createElement('canvas'); + + const Features = (function () { + + let gl = ftCanvas.getContext('webgl') || ftCanvas.getContext('experimental-webgl'); + if (gl === null){ + return null; + } + + // -- code taken from THREE.WebGLRenderer -- + let _vertexShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT); + let _vertexShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT); + // Unused: let _vertexShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT); + + let _fragmentShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT); + let _fragmentShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT); + // Unused: let _fragmentShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT); + + let highpAvailable = _vertexShaderPrecisionHighpFloat.precision > 0 && _fragmentShaderPrecisionHighpFloat.precision > 0; + let mediumpAvailable = _vertexShaderPrecisionMediumpFloat.precision > 0 && _fragmentShaderPrecisionMediumpFloat.precision > 0; + // ----------------------------------------- + + let precision; + if (highpAvailable) { + precision = 'highp'; + } else if (mediumpAvailable) { + precision = 'mediump'; + } else { + precision = 'lowp'; + } + + return { + SHADER_INTERPOLATION: { + isSupported: function () { + let supported = true; + + supported = supported && gl.getExtension('EXT_frag_depth'); + supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8; + + return supported; + } + }, + SHADER_SPLATS: { + isSupported: function () { + let supported = true; + + supported = supported && gl.getExtension('EXT_frag_depth'); + supported = supported && gl.getExtension('OES_texture_float'); + supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8; + + return supported; + } + + }, + SHADER_EDL: { + isSupported: function () { + let supported = true; + + supported = supported && gl.getExtension('EXT_frag_depth'); + supported = supported && gl.getExtension('OES_texture_float'); + supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8; + + //supported = supported || (gl instanceof WebGL2RenderingContext); + + return supported; + } + + }, + //WEBGL2: { + // isSupported: function(){ + // return gl instanceof WebGL2RenderingContext; + // } + //}, + precision: precision + }; + }()); + + const KeyCodes = { + + LEFT: 37, + UP: 38, + RIGHT: 39, + BOTTOM: 40, + DELETE: 46, + + A: 'A'.charCodeAt(0), + S: 'S'.charCodeAt(0), + D: 'D'.charCodeAt(0), + W: 'W'.charCodeAt(0), + Q: 'Q'.charCodeAt(0), + E: 'E'.charCodeAt(0), + R: 'R'.charCodeAt(0), + F: 'F'.charCodeAt(0) + + }; + + class LRUItem{ + + constructor(node){ + this.previous = null; + this.next = null; + this.node = node; + } + + } + + /** + * + * @class A doubly-linked-list of the least recently used elements. + */ + class LRU{ + + constructor(){ + // the least recently used item + this.first = null; + // the most recently used item + this.last = null; + // a list of all items in the lru list + this.items = {}; + this.elements = 0; + this.numPoints = 0; + } + + size(){ + return this.elements; + } + + contains(node){ + return this.items[node.id] == null; + } + + touch(node){ + if (!node.loaded) { + return; + } + + let item; + if (this.items[node.id] == null) { + // add to list + item = new LRUItem(node); + item.previous = this.last; + this.last = item; + if (item.previous !== null) { + item.previous.next = item; + } + + this.items[node.id] = item; + this.elements++; + + if (this.first === null) { + this.first = item; + } + this.numPoints += node.numPoints; + } else { + // update in list + item = this.items[node.id]; + if (item.previous === null) { + // handle touch on first element + if (item.next !== null) { + this.first = item.next; + this.first.previous = null; + item.previous = this.last; + item.next = null; + this.last = item; + item.previous.next = item; + } + } else if (item.next === null) { + // handle touch on last element + } else { + // handle touch on any other element + item.previous.next = item.next; + item.next.previous = item.previous; + item.previous = this.last; + item.next = null; + this.last = item; + item.previous.next = item; + } + } + } + + remove(node){ + let lruItem = this.items[node.id]; + if (lruItem) { + if (this.elements === 1) { + this.first = null; + this.last = null; + } else { + if (!lruItem.previous) { + this.first = lruItem.next; + this.first.previous = null; + } + if (!lruItem.next) { + this.last = lruItem.previous; + this.last.next = null; + } + if (lruItem.previous && lruItem.next) { + lruItem.previous.next = lruItem.next; + lruItem.next.previous = lruItem.previous; + } + } + + delete this.items[node.id]; + this.elements--; + this.numPoints -= node.numPoints; + } + } + + getLRUItem(){ + if (this.first === null) { + return null; + } + let lru = this.first; + + return lru.node; + } + + toString(){ + let string = '{ '; + let curr = this.first; + while (curr !== null) { + string += curr.node.id; + if (curr.next !== null) { + string += ', '; + } + curr = curr.next; + } + string += '}'; + string += '(' + this.size() + ')'; + return string; + } + + freeMemory(){ + if (this.elements <= 1) { + return; + } + + while (this.numPoints > Potree.pointLoadLimit) { + let element = this.first; + let node = element.node; + this.disposeDescendants(node); + } + } + + disposeDescendants(node){ + let stack = []; + stack.push(node); + while (stack.length > 0) { + let current = stack.pop(); + + // console.log(current); + + current.dispose(); + this.remove(current); + + for (let key in current.children) { + if (current.children.hasOwnProperty(key)) { + let child = current.children[key]; + if (child.loaded) { + stack.push(current.children[key]); + } + } + } + } + } + + } + + class PointCloudTreeNode extends EventDispatcher{ + + constructor(){ + super(); + this.needsTransformUpdate = true; + } + + getChildren () { + throw new Error('override function'); + } + + getBoundingBox () { + throw new Error('override function'); + } + + isLoaded () { + throw new Error('override function'); + } + + isGeometryNode () { + throw new Error('override function'); + } + + isTreeNode () { + throw new Error('override function'); + } + + getLevel () { + throw new Error('override function'); + } + + getBoundingSphere () { + throw new Error('override function'); + } + }; + + class PointCloudTree extends Object3D { + constructor () { + super(); + } + + initialized () { + return this.root !== null; + } + }; + + /** + * Some types of possible point attribute data formats + * + * @class + */ + const PointAttributeTypes = { + DATA_TYPE_DOUBLE: {ordinal: 0, name: "double", size: 8}, + DATA_TYPE_FLOAT: {ordinal: 1, name: "float", size: 4}, + DATA_TYPE_INT8: {ordinal: 2, name: "int8", size: 1}, + DATA_TYPE_UINT8: {ordinal: 3, name: "uint8", size: 1}, + DATA_TYPE_INT16: {ordinal: 4, name: "int16", size: 2}, + DATA_TYPE_UINT16: {ordinal: 5, name: "uint16", size: 2}, + DATA_TYPE_INT32: {ordinal: 6, name: "int32", size: 4}, + DATA_TYPE_UINT32: {ordinal: 7, name: "uint32", size: 4}, + DATA_TYPE_INT64: {ordinal: 8, name: "int64", size: 8}, + DATA_TYPE_UINT64: {ordinal: 9, name: "uint64", size: 8} + }; + + let i = 0; + for (let obj in PointAttributeTypes) { + PointAttributeTypes[i] = PointAttributeTypes[obj]; + i++; + } + + + class PointAttribute{ + + constructor(name, type, numElements){ + this.name = name; + this.type = type; + this.numElements = numElements; + this.byteSize = this.numElements * this.type.size; + this.description = ""; + this.range = [Infinity, -Infinity]; + } + + }; + + PointAttribute.POSITION_CARTESIAN = new PointAttribute( + "POSITION_CARTESIAN", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + + PointAttribute.RGBA_PACKED = new PointAttribute( + "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 4); + + PointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED; + + PointAttribute.RGB_PACKED = new PointAttribute( + "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 3); + + PointAttribute.NORMAL_FLOATS = new PointAttribute( + "NORMAL_FLOATS", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + + PointAttribute.INTENSITY = new PointAttribute( + "INTENSITY", PointAttributeTypes.DATA_TYPE_UINT16, 1); + + PointAttribute.CLASSIFICATION = new PointAttribute( + "CLASSIFICATION", PointAttributeTypes.DATA_TYPE_UINT8, 1); + + PointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute( + "NORMAL_SPHEREMAPPED", PointAttributeTypes.DATA_TYPE_UINT8, 2); + + PointAttribute.NORMAL_OCT16 = new PointAttribute( + "NORMAL_OCT16", PointAttributeTypes.DATA_TYPE_UINT8, 2); + + PointAttribute.NORMAL = new PointAttribute( + "NORMAL", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + + PointAttribute.RETURN_NUMBER = new PointAttribute( + "RETURN_NUMBER", PointAttributeTypes.DATA_TYPE_UINT8, 1); + + PointAttribute.NUMBER_OF_RETURNS = new PointAttribute( + "NUMBER_OF_RETURNS", PointAttributeTypes.DATA_TYPE_UINT8, 1); + + PointAttribute.SOURCE_ID = new PointAttribute( + "SOURCE_ID", PointAttributeTypes.DATA_TYPE_UINT16, 1); + + PointAttribute.INDICES = new PointAttribute( + "INDICES", PointAttributeTypes.DATA_TYPE_UINT32, 1); + + PointAttribute.SPACING = new PointAttribute( + "SPACING", PointAttributeTypes.DATA_TYPE_FLOAT, 1); + + PointAttribute.GPS_TIME = new PointAttribute( + "GPS_TIME", PointAttributeTypes.DATA_TYPE_DOUBLE, 1); + + class PointAttributes{ + + constructor(pointAttributes){ + this.attributes = []; + this.byteSize = 0; + this.size = 0; + this.vectors = []; + + if (pointAttributes != null) { + for (let i = 0; i < pointAttributes.length; i++) { + let pointAttributeName = pointAttributes[i]; + let pointAttribute = PointAttribute[pointAttributeName]; + this.attributes.push(pointAttribute); + this.byteSize += pointAttribute.byteSize; + this.size++; + } + } + } + + + add(pointAttribute){ + this.attributes.push(pointAttribute); + this.byteSize += pointAttribute.byteSize; + this.size++; + }; + + addVector(vector){ + this.vectors.push(vector); + } + + hasNormals(){ + for (let name in this.attributes) { + let pointAttribute = this.attributes[name]; + if ( + pointAttribute === PointAttribute.NORMAL_SPHEREMAPPED || + pointAttribute === PointAttribute.NORMAL_FLOATS || + pointAttribute === PointAttribute.NORMAL || + pointAttribute === PointAttribute.NORMAL_OCT16) { + return true; + } + } + + return false; + }; + + } + + class U { + static toVector3(v, offset) { + return new Vector3().fromArray(v, offset || 0); + } + + static toBox3(b) { + return new Box3(U.toVector3(b), U.toVector3(b, 3)); + }; + + static findDim(schema, name) { + var dim = schema.find((dim) => dim.name == name); + if (!dim) throw new Error('Failed to find ' + name + ' in schema'); + return dim; + } + + static sphereFrom(b) { + return b.getBoundingSphere(new Sphere()); + } + }; + + class PointCloudEptGeometry { + constructor(url, info) { + let version = info.version; + let schema = info.schema; + let bounds = info.bounds; + let boundsConforming = info.boundsConforming; + + let xyz = [ + U.findDim(schema, 'X'), + U.findDim(schema, 'Y'), + U.findDim(schema, 'Z') + ]; + let scale = xyz.map((d) => d.scale || 1); + let offset = xyz.map((d) => d.offset || 0); + this.eptScale = U.toVector3(scale); + this.eptOffset = U.toVector3(offset); + + this.url = url; + this.info = info; + this.type = 'ept'; + + this.schema = schema; + this.span = info.span || info.ticks; + this.boundingBox = U.toBox3(bounds); + this.tightBoundingBox = U.toBox3(boundsConforming); + this.offset = U.toVector3([0, 0, 0]); + this.boundingSphere = U.sphereFrom(this.boundingBox); + this.tightBoundingSphere = U.sphereFrom(this.tightBoundingBox); + this.version = new Potree.Version('1.7'); + + this.projection = null; + this.fallbackProjection = null; + + if (info.srs && info.srs.horizontal) { + this.projection = info.srs.authority + ':' + info.srs.horizontal; + } + + if (info.srs && info.srs.wkt) { + if (!this.projection) this.projection = info.srs.wkt; + else this.fallbackProjection = info.srs.wkt; + } + + { + // TODO [mschuetz]: named projections that proj4 can't handle seem to cause problems. + // remove them for now + + try{ + proj4(this.projection); + }catch(e){ + this.projection = null; + } + + + + } + + + { + const attributes = new PointAttributes(); + + attributes.add(PointAttribute.POSITION_CARTESIAN); + attributes.add(new PointAttribute("rgba", PointAttributeTypes.DATA_TYPE_UINT8, 4)); + attributes.add(new PointAttribute("intensity", PointAttributeTypes.DATA_TYPE_UINT16, 1)); + attributes.add(new PointAttribute("classification", PointAttributeTypes.DATA_TYPE_UINT8, 1)); + attributes.add(new PointAttribute("gps-time", PointAttributeTypes.DATA_TYPE_DOUBLE, 1)); + attributes.add(new PointAttribute("returnNumber", PointAttributeTypes.DATA_TYPE_UINT8, 1)); + attributes.add(new PointAttribute("number of returns", PointAttributeTypes.DATA_TYPE_UINT8, 1)); + attributes.add(new PointAttribute("return number", PointAttributeTypes.DATA_TYPE_UINT8, 1)); + attributes.add(new PointAttribute("source id", PointAttributeTypes.DATA_TYPE_UINT16, 1)); + + this.pointAttributes = attributes; + } + + + + this.spacing = + (this.boundingBox.max.x - this.boundingBox.min.x) / this.span; + + let hierarchyType = info.hierarchyType || 'json'; + + const dataType = info.dataType; + if (dataType == 'laszip') { + this.loader = new Potree.EptLaszipLoader(); + } + else if (dataType == 'binary') { + this.loader = new Potree.EptBinaryLoader(); + } + else if (dataType == 'zstandard') { + this.loader = new Potree.EptZstandardLoader(); + } + else { + throw new Error('Could not read data type: ' + dataType); + } + } + }; + + class EptKey { + constructor(ept, b, d, x, y, z) { + this.ept = ept; + this.b = b; + this.d = d; + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + } + + name() { + return this.d + '-' + this.x + '-' + this.y + '-' + this.z; + } + + step(a, b, c) { + let min = this.b.min.clone(); + let max = this.b.max.clone(); + let dst = new Vector3().subVectors(max, min); + + if (a) min.x += dst.x / 2; + else max.x -= dst.x / 2; + + if (b) min.y += dst.y / 2; + else max.y -= dst.y / 2; + + if (c) min.z += dst.z / 2; + else max.z -= dst.z / 2; + + return new Potree.EptKey( + this.ept, + new Box3(min, max), + this.d + 1, + this.x * 2 + a, + this.y * 2 + b, + this.z * 2 + c); + } + + children() { + var result = []; + for (var a = 0; a < 2; ++a) { + for (var b = 0; b < 2; ++b) { + for (var c = 0; c < 2; ++c) { + var add = this.step(a, b, c).name(); + if (!result.includes(add)) result = result.concat(add); + } + } + } + return result; + } + } + + class PointCloudEptGeometryNode extends PointCloudTreeNode { + constructor(ept, b, d, x, y, z) { + super(); + + this.ept = ept; + this.key = new Potree.EptKey( + this.ept, + b || this.ept.boundingBox, + d || 0, + x, + y, + z); + + this.id = PointCloudEptGeometryNode.IDCount++; + this.geometry = null; + this.boundingBox = this.key.b; + this.tightBoundingBox = this.boundingBox; + this.spacing = this.ept.spacing / Math.pow(2, this.key.d); + this.boundingSphere = U.sphereFrom(this.boundingBox); + + // These are set during hierarchy loading. + this.hasChildren = false; + this.children = { }; + this.numPoints = -1; + + this.level = this.key.d; + this.loaded = false; + this.loading = false; + this.oneTimeDisposeHandlers = []; + + let k = this.key; + this.name = this.toPotreeName(k.d, k.x, k.y, k.z); + this.index = parseInt(this.name.charAt(this.name.length - 1)); + } + + isGeometryNode() { return true; } + getLevel() { return this.level; } + isTreeNode() { return false; } + isLoaded() { return this.loaded; } + getBoundingSphere() { return this.boundingSphere; } + getBoundingBox() { return this.boundingBox; } + url() { return this.ept.url + 'ept-data/' + this.filename(); } + getNumPoints() { return this.numPoints; } + + filename() { return this.key.name(); } + + getChildren() { + let children = []; + + for (let i = 0; i < 8; i++) { + if (this.children[i]) { + children.push(this.children[i]); + } + } + + return children; + } + + addChild(child) { + this.children[child.index] = child; + child.parent = this; + } + + load() { + if (this.loaded || this.loading) return; + if (Potree.numNodesLoading >= Potree.maxNodesLoading) return; + + this.loading = true; + ++Potree.numNodesLoading; + + if (this.numPoints == -1) this.loadHierarchy(); + this.loadPoints(); + } + + loadPoints(){ + this.ept.loader.load(this); + } + + async loadHierarchy() { + let nodes = { }; + nodes[this.filename()] = this; + this.hasChildren = false; + + let eptHierarchyFile = + `${this.ept.url}ept-hierarchy/${this.filename()}.json`; + + let response = await fetch(eptHierarchyFile); + let hier = await response.json(); + + // Since we want to traverse top-down, and 10 comes + // lexicographically before 9 (for example), do a deep sort. + var keys = Object.keys(hier).sort((a, b) => { + let [da, xa, ya, za] = a.split('-').map((n) => parseInt(n, 10)); + let [db, xb, yb, zb] = b.split('-').map((n) => parseInt(n, 10)); + if (da < db) return -1; if (da > db) return 1; + if (xa < xb) return -1; if (xa > xb) return 1; + if (ya < yb) return -1; if (ya > yb) return 1; + if (za < zb) return -1; if (za > zb) return 1; + return 0; + }); + + keys.forEach((v) => { + let [d, x, y, z] = v.split('-').map((n) => parseInt(n, 10)); + let a = x & 1, b = y & 1, c = z & 1; + let parentName = + (d - 1) + '-' + (x >> 1) + '-' + (y >> 1) + '-' + (z >> 1); + + let parentNode = nodes[parentName]; + if (!parentNode) return; + parentNode.hasChildren = true; + + let key = parentNode.key.step(a, b, c); + + let node = new Potree.PointCloudEptGeometryNode( + this.ept, + key.b, + key.d, + key.x, + key.y, + key.z); + + node.level = d; + node.numPoints = hier[v]; + + parentNode.addChild(node); + nodes[key.name()] = node; + }); + } + + doneLoading(bufferGeometry, tightBoundingBox, np, mean) { + bufferGeometry.boundingBox = this.boundingBox; + this.geometry = bufferGeometry; + this.tightBoundingBox = tightBoundingBox; + this.numPoints = np; + this.mean = mean; + this.loaded = true; + this.loading = false; + --Potree.numNodesLoading; + } + + toPotreeName(d, x, y, z) { + var name = 'r'; + + for (var i = 0; i < d; ++i) { + var shift = d - i - 1; + var mask = 1 << shift; + var step = 0; + + if (x & mask) step += 4; + if (y & mask) step += 2; + if (z & mask) step += 1; + + name += step; + } + + return name; + } + + dispose() { + if (this.geometry && this.parent != null) { + this.geometry.dispose(); + this.geometry = null; + this.loaded = false; + + // this.dispatchEvent( { type: 'dispose' } ); + for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) { + let handler = this.oneTimeDisposeHandlers[i]; + handler(); + } + this.oneTimeDisposeHandlers = []; + } + } + } + + PointCloudEptGeometryNode.IDCount = 0; + + class PointCloudOctreeGeometry{ + + constructor(){ + this.url = null; + this.octreeDir = null; + this.spacing = 0; + this.boundingBox = null; + this.root = null; + this.nodes = null; + this.pointAttributes = null; + this.hierarchyStepSize = -1; + this.loader = null; + } + + } + + class PointCloudOctreeGeometryNode extends PointCloudTreeNode{ + + constructor(name, pcoGeometry, boundingBox){ + super(); + + this.id = PointCloudOctreeGeometryNode.IDCount++; + this.name = name; + this.index = parseInt(name.charAt(name.length - 1)); + this.pcoGeometry = pcoGeometry; + this.geometry = null; + this.boundingBox = boundingBox; + this.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); + this.children = {}; + this.numPoints = 0; + this.level = null; + this.loaded = false; + this.oneTimeDisposeHandlers = []; + } + + isGeometryNode(){ + return true; + } + + getLevel(){ + return this.level; + } + + isTreeNode(){ + return false; + } + + isLoaded(){ + return this.loaded; + } + + getBoundingSphere(){ + return this.boundingSphere; + } + + getBoundingBox(){ + return this.boundingBox; + } + + getChildren(){ + let children = []; + + for (let i = 0; i < 8; i++) { + if (this.children[i]) { + children.push(this.children[i]); + } + } + + return children; + } + + getBoundingBox(){ + return this.boundingBox; + } + + getURL(){ + let url = ''; + + let version = this.pcoGeometry.loader.version; + + if (version.equalOrHigher('1.5')) { + url = this.pcoGeometry.octreeDir + '/' + this.getHierarchyPath() + '/' + this.name; + } else if (version.equalOrHigher('1.4')) { + url = this.pcoGeometry.octreeDir + '/' + this.name; + } else if (version.upTo('1.3')) { + url = this.pcoGeometry.octreeDir + '/' + this.name; + } + + return url; + } + + getHierarchyPath(){ + let path = 'r/'; + + let hierarchyStepSize = this.pcoGeometry.hierarchyStepSize; + let indices = this.name.substr(1); + + let numParts = Math.floor(indices.length / hierarchyStepSize); + for (let i = 0; i < numParts; i++) { + path += indices.substr(i * hierarchyStepSize, hierarchyStepSize) + '/'; + } + + path = path.slice(0, -1); + + return path; + } + + addChild(child) { + this.children[child.index] = child; + child.parent = this; + } + + load(){ + if (this.loading === true || this.loaded === true || Potree.numNodesLoading >= Potree.maxNodesLoading) { + return; + } + + this.loading = true; + + Potree.numNodesLoading++; + + if (this.pcoGeometry.loader.version.equalOrHigher('1.5')) { + if ((this.level % this.pcoGeometry.hierarchyStepSize) === 0 && this.hasChildren) { + this.loadHierachyThenPoints(); + } else { + this.loadPoints(); + } + } else { + this.loadPoints(); + } + } + + loadPoints(){ + this.pcoGeometry.loader.load(this); + } + + loadHierachyThenPoints(){ + let node = this; + + // load hierarchy + let callback = function (node, hbuffer) { + + let tStart = performance.now(); + + let view = new DataView(hbuffer); + + let stack = []; + let children = view.getUint8(0); + let numPoints = view.getUint32(1, true); + node.numPoints = numPoints; + stack.push({children: children, numPoints: numPoints, name: node.name}); + + let decoded = []; + + let offset = 5; + while (stack.length > 0) { + let snode = stack.shift(); + let mask = 1; + for (let i = 0; i < 8; i++) { + if ((snode.children & mask) !== 0) { + let childName = snode.name + i; + + let childChildren = view.getUint8(offset); + let childNumPoints = view.getUint32(offset + 1, true); + + stack.push({children: childChildren, numPoints: childNumPoints, name: childName}); + + decoded.push({children: childChildren, numPoints: childNumPoints, name: childName}); + + offset += 5; + } + + mask = mask * 2; + } + + if (offset === hbuffer.byteLength) { + break; + } + } + + // console.log(decoded); + + let nodes = {}; + nodes[node.name] = node; + let pco = node.pcoGeometry; + + for (let i = 0; i < decoded.length; i++) { + let name = decoded[i].name; + let decodedNumPoints = decoded[i].numPoints; + let index = parseInt(name.charAt(name.length - 1)); + let parentName = name.substring(0, name.length - 1); + let parentNode = nodes[parentName]; + let level = name.length - 1; + let boundingBox = Utils.createChildAABB(parentNode.boundingBox, index); + + let currentNode = new PointCloudOctreeGeometryNode(name, pco, boundingBox); + currentNode.level = level; + currentNode.numPoints = decodedNumPoints; + currentNode.hasChildren = decoded[i].children > 0; + currentNode.spacing = pco.spacing / Math.pow(2, level); + parentNode.addChild(currentNode); + nodes[name] = currentNode; + } + + let duration = performance.now() - tStart; + if(duration > 5){ + let msg = `duration: ${duration}ms, numNodes: ${decoded.length}`; + console.log(msg); + } + + node.loadPoints(); + }; + if ((node.level % node.pcoGeometry.hierarchyStepSize) === 0) { + // let hurl = node.pcoGeometry.octreeDir + "/../hierarchy/" + node.name + ".hrc"; + let hurl = node.pcoGeometry.octreeDir + '/' + node.getHierarchyPath() + '/' + node.name + '.hrc'; + + let xhr = XHRFactory.createXMLHttpRequest(); + xhr.open('GET', hurl, true); + xhr.responseType = 'arraybuffer'; + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if (xhr.status === 200 || xhr.status === 0) { + let hbuffer = xhr.response; + callback(node, hbuffer); + } else { + console.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + hurl); + Potree.numNodesLoading--; + } + } + }; + try { + xhr.send(null); + } catch (e) { + console.log('fehler beim laden der punktwolke: ' + e); + } + } + } + + getNumPoints(){ + return this.numPoints; + } + + dispose(){ + if (this.geometry && this.parent != null) { + this.geometry.dispose(); + this.geometry = null; + this.loaded = false; + + this.dispatchEvent( { type: 'dispose' } ); + + for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) { + let handler = this.oneTimeDisposeHandlers[i]; + handler(); + } + this.oneTimeDisposeHandlers = []; + } + } + + } + + PointCloudOctreeGeometryNode.IDCount = 0; + + // ------------------------------------------- + // to get a ready to use gradient array from a chroma.js gradient: + // http://gka.github.io/chroma.js/ + // ------------------------------------------- + // + // let stops = []; + // for(let i = 0; i <= 10; i++){ + // let range = chroma.scale(['yellow', 'navy']).mode('lch').domain([10,0])(i)._rgb + // .slice(0, 3) + // .map(v => (v / 255).toFixed(4)) + // .join(", "); + // + // let line = `[${i / 10}, new THREE.Color(${range})],`; + // + // stops.push(line); + // } + // stops.join("\n"); + // + // + // + // ------------------------------------------- + // to get a ready to use gradient array from matplotlib: + // ------------------------------------------- + // import matplotlib.pyplot as plt + // import matplotlib.colors as colors + // + // norm = colors.Normalize(vmin=0,vmax=1) + // cmap = plt.cm.viridis + // + // for i in range(0,11): + // u = i / 10 + // rgb = cmap(norm(u))[0:3] + // rgb = ["{0:.3f}".format(v) for v in rgb] + // rgb = "[" + str(u) + ", new THREE.Color(" + ", ".join(rgb) + ")]," + // print(rgb) + + let Gradients = { + // From chroma spectral http://gka.github.io/chroma.js/ + SPECTRAL: [ + [0, new Color(0.3686, 0.3098, 0.6353)], + [0.1, new Color(0.1961, 0.5333, 0.7412)], + [0.2, new Color(0.4000, 0.7608, 0.6471)], + [0.3, new Color(0.6706, 0.8667, 0.6431)], + [0.4, new Color(0.9020, 0.9608, 0.5961)], + [0.5, new Color(1.0000, 1.0000, 0.7490)], + [0.6, new Color(0.9961, 0.8784, 0.5451)], + [0.7, new Color(0.9922, 0.6824, 0.3804)], + [0.8, new Color(0.9569, 0.4275, 0.2627)], + [0.9, new Color(0.8353, 0.2431, 0.3098)], + [1, new Color(0.6196, 0.0039, 0.2588)] + ], + PLASMA: [ + [0.0, new Color(0.241, 0.015, 0.610)], + [0.1, new Color(0.387, 0.001, 0.654)], + [0.2, new Color(0.524, 0.025, 0.653)], + [0.3, new Color(0.651, 0.125, 0.596)], + [0.4, new Color(0.752, 0.227, 0.513)], + [0.5, new Color(0.837, 0.329, 0.431)], + [0.6, new Color(0.907, 0.435, 0.353)], + [0.7, new Color(0.963, 0.554, 0.272)], + [0.8, new Color(0.992, 0.681, 0.195)], + [0.9, new Color(0.987, 0.822, 0.144)], + [1.0, new Color(0.940, 0.975, 0.131)] + ], + YELLOW_GREEN: [ + [0, new Color(0.1647, 0.2824, 0.3451)], + [0.1, new Color(0.1338, 0.3555, 0.4227)], + [0.2, new Color(0.0610, 0.4319, 0.4864)], + [0.3, new Color(0.0000, 0.5099, 0.5319)], + [0.4, new Color(0.0000, 0.5881, 0.5569)], + [0.5, new Color(0.1370, 0.6650, 0.5614)], + [0.6, new Color(0.2906, 0.7395, 0.5477)], + [0.7, new Color(0.4453, 0.8099, 0.5201)], + [0.8, new Color(0.6102, 0.8748, 0.4850)], + [0.9, new Color(0.7883, 0.9323, 0.4514)], + [1, new Color(0.9804, 0.9804, 0.4314)] + ], + VIRIDIS: [ + [0.0, new Color(0.267, 0.005, 0.329)], + [0.1, new Color(0.283, 0.141, 0.458)], + [0.2, new Color(0.254, 0.265, 0.530)], + [0.3, new Color(0.207, 0.372, 0.553)], + [0.4, new Color(0.164, 0.471, 0.558)], + [0.5, new Color(0.128, 0.567, 0.551)], + [0.6, new Color(0.135, 0.659, 0.518)], + [0.7, new Color(0.267, 0.749, 0.441)], + [0.8, new Color(0.478, 0.821, 0.318)], + [0.9, new Color(0.741, 0.873, 0.150)], + [1.0, new Color(0.993, 0.906, 0.144)] + ], + INFERNO: [ + [0.0, new Color(0.077, 0.042, 0.206)], + [0.1, new Color(0.225, 0.036, 0.388)], + [0.2, new Color(0.373, 0.074, 0.432)], + [0.3, new Color(0.522, 0.128, 0.420)], + [0.4, new Color(0.665, 0.182, 0.370)], + [0.5, new Color(0.797, 0.255, 0.287)], + [0.6, new Color(0.902, 0.364, 0.184)], + [0.7, new Color(0.969, 0.516, 0.063)], + [0.8, new Color(0.988, 0.683, 0.072)], + [0.9, new Color(0.961, 0.859, 0.298)], + [1.0, new Color(0.988, 0.998, 0.645)] + ], + GRAYSCALE: [ + [0, new Color(0, 0, 0)], + [1, new Color(1, 1, 1)] + ], + // 16 samples of the TURBU color scheme + // values taken from: https://gist.github.com/mikhailov-work/ee72ba4191942acecc03fe6da94fc73f + // original file licensed under Apache-2.0 + TURBO: [ + [0.00, new Color(0.18995, 0.07176, 0.23217)], + [0.07, new Color(0.25107, 0.25237, 0.63374)], + [0.13, new Color(0.27628, 0.42118, 0.89123)], + [0.20, new Color(0.25862, 0.57958, 0.99876)], + [0.27, new Color(0.15844, 0.73551, 0.92305)], + [0.33, new Color(0.09267, 0.86554, 0.7623)], + [0.40, new Color(0.19659, 0.94901, 0.59466)], + [0.47, new Color(0.42778, 0.99419, 0.38575)], + [0.53, new Color(0.64362, 0.98999, 0.23356)], + [0.60, new Color(0.80473, 0.92452, 0.20459)], + [0.67, new Color(0.93301, 0.81236, 0.22667)], + [0.73, new Color(0.99314, 0.67408, 0.20348)], + [0.80, new Color(0.9836, 0.49291, 0.12849)], + [0.87, new Color(0.92105, 0.31489, 0.05475)], + [0.93, new Color(0.81608, 0.18462, 0.01809)], + [1.00, new Color(0.66449, 0.08436, 0.00424)], + ], + RAINBOW: [ + [0, new Color(0.278, 0, 0.714)], + [1 / 6, new Color(0, 0, 1)], + [2 / 6, new Color(0, 1, 1)], + [3 / 6, new Color(0, 1, 0)], + [4 / 6, new Color(1, 1, 0)], + [5 / 6, new Color(1, 0.64, 0)], + [1, new Color(1, 0, 0)] + ], + CONTOUR: [ + [0.00, new Color(0, 0, 0)], + [0.03, new Color(0, 0, 0)], + [0.04, new Color(1, 1, 1)], + [1.00, new Color(1, 1, 1)] + ], + }; + + let Shaders = {}; + + Shaders["pointcloud.vs"] = ` +precision highp float; +precision highp int; + +#define max_clip_polygons 8 +#define PI 3.141592653589793 + +attribute vec3 position; +attribute vec3 color; +attribute float intensity; +attribute float classification; +attribute float returnNumber; +attribute float numberOfReturns; +attribute float pointSourceID; +attribute vec4 indices; +attribute float spacing; +attribute float gpsTime; +attribute vec3 normal; +attribute float aExtra; + +uniform mat4 modelMatrix; +uniform mat4 modelViewMatrix; +uniform mat4 projectionMatrix; +uniform mat4 viewMatrix; +uniform mat4 uViewInv; + +uniform float uScreenWidth; +uniform float uScreenHeight; +uniform float fov; +uniform float near; +uniform float far; + +uniform bool uDebug; + +uniform bool uUseOrthographicCamera; +uniform float uOrthoWidth; +uniform float uOrthoHeight; + +#define CLIPTASK_NONE 0 +#define CLIPTASK_HIGHLIGHT 1 +#define CLIPTASK_SHOW_INSIDE 2 +#define CLIPTASK_SHOW_OUTSIDE 3 + +#define CLIPMETHOD_INSIDE_ANY 0 +#define CLIPMETHOD_INSIDE_ALL 1 + +uniform int clipTask; +uniform int clipMethod; +#if defined(num_clipboxes) && num_clipboxes > 0 + uniform mat4 clipBoxes[num_clipboxes]; +#endif + +#if defined(num_clipspheres) && num_clipspheres > 0 + uniform mat4 uClipSpheres[num_clipspheres]; +#endif + +#if defined(num_clippolygons) && num_clippolygons > 0 + uniform int uClipPolygonVCount[num_clippolygons]; + uniform vec3 uClipPolygonVertices[num_clippolygons * 8]; + uniform mat4 uClipPolygonWVP[num_clippolygons]; +#endif + + +uniform float size; +uniform float minSize; +uniform float maxSize; + +uniform float uPCIndex; +uniform float uOctreeSpacing; +uniform float uNodeSpacing; +uniform float uOctreeSize; +uniform vec3 uBBSize; +uniform float uLevel; +uniform float uVNStart; +uniform bool uIsLeafNode; + +uniform vec3 uColor; +uniform float uOpacity; + +uniform vec2 elevationRange; +uniform vec2 intensityRange; + +uniform vec2 uFilterReturnNumberRange; +uniform vec2 uFilterNumberOfReturnsRange; +uniform vec2 uFilterPointSourceIDClipRange; +uniform vec2 uFilterGPSTimeClipRange; +uniform float uGpsScale; +uniform float uGpsOffset; + +uniform vec2 uNormalizedGpsBufferRange; + +uniform vec3 uIntensity_gbc; +uniform vec3 uRGB_gbc; +uniform vec3 uExtra_gbc; + +uniform float uTransition; +uniform float wRGB; +uniform float wIntensity; +uniform float wElevation; +uniform float wClassification; +uniform float wReturnNumber; +uniform float wSourceID; + +uniform vec2 uExtraNormalizedRange; +uniform vec2 uExtraRange; +uniform float uExtraScale; +uniform float uExtraOffset; + +uniform vec3 uShadowColor; + +uniform sampler2D visibleNodes; +uniform sampler2D gradient; +uniform sampler2D classificationLUT; + +#if defined(color_type_matcap) +uniform sampler2D matcapTextureUniform; +#endif +uniform bool backfaceCulling; + +#if defined(num_shadowmaps) && num_shadowmaps > 0 +uniform sampler2D uShadowMap[num_shadowmaps]; +uniform mat4 uShadowWorldView[num_shadowmaps]; +uniform mat4 uShadowProj[num_shadowmaps]; +#endif + +varying vec3 vColor; +varying float vLogDepth; +varying vec3 vViewPosition; +varying float vRadius; +varying float vPointSize; + + +float round(float number){ + return floor(number + 0.5); +} + +// +// ### ######## ### ######## ######## #### ## ## ######## ###### #### ######## ######## ###### +// ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +// ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +// ## ## ## ## ## ## ######## ## ## ## ## ###### ###### ## ## ###### ###### +// ######### ## ## ######### ## ## ## ## ## ## ## ## ## ## ## +// ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +// ## ## ######## ## ## ## ## #### ### ######## ###### #### ######## ######## ###### +// + + +// --------------------- +// OCTREE +// --------------------- + +#if (defined(adaptive_point_size) || defined(color_type_level_of_detail)) && defined(tree_type_octree) +/** + * number of 1-bits up to inclusive index position + * number is treated as if it were an integer in the range 0-255 + * + */ +int numberOfOnes(int number, int index){ + int numOnes = 0; + int tmp = 128; + for(int i = 7; i >= 0; i--){ + + if(number >= tmp){ + number = number - tmp; + + if(i <= index){ + numOnes++; + } + } + + tmp = tmp / 2; + } + + return numOnes; +} + + +/** + * checks whether the bit at index is 1 + * number is treated as if it were an integer in the range 0-255 + * + */ +bool isBitSet(int number, int index){ + + // weird multi else if due to lack of proper array, int and bitwise support in WebGL 1.0 + int powi = 1; + if(index == 0){ + powi = 1; + }else if(index == 1){ + powi = 2; + }else if(index == 2){ + powi = 4; + }else if(index == 3){ + powi = 8; + }else if(index == 4){ + powi = 16; + }else if(index == 5){ + powi = 32; + }else if(index == 6){ + powi = 64; + }else if(index == 7){ + powi = 128; + }else{ + return false; + } + + int ndp = number / powi; + + return mod(float(ndp), 2.0) != 0.0; +} + + +/** + * find the LOD at the point position + */ +float getLOD(){ + + vec3 offset = vec3(0.0, 0.0, 0.0); + int iOffset = int(uVNStart); + float depth = uLevel; + for(float i = 0.0; i <= 30.0; i++){ + float nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0); + + vec3 index3d = (position-offset) / nodeSizeAtLevel; + index3d = floor(index3d + 0.5); + int index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z)); + + vec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0)); + int mask = int(round(value.r * 255.0)); + + if(isBitSet(mask, index)){ + // there are more visible child nodes at this position + int advanceG = int(round(value.g * 255.0)) * 256; + int advanceB = int(round(value.b * 255.0)); + int advanceChild = numberOfOnes(mask, index - 1); + int advance = advanceG + advanceB + advanceChild; + + iOffset = iOffset + advance; + + depth++; + }else{ + // no more visible child nodes at this position + //return value.a * 255.0; + + float lodOffset = (255.0 * value.a) / 10.0 - 10.0; + + return depth + lodOffset; + } + + offset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d; + } + + return depth; +} + +float getSpacing(){ + vec3 offset = vec3(0.0, 0.0, 0.0); + int iOffset = int(uVNStart); + float depth = uLevel; + float spacing = uNodeSpacing; + for(float i = 0.0; i <= 30.0; i++){ + float nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0); + + vec3 index3d = (position-offset) / nodeSizeAtLevel; + index3d = floor(index3d + 0.5); + int index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z)); + + vec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0)); + int mask = int(round(value.r * 255.0)); + float spacingFactor = value.a; + + if(i > 0.0){ + spacing = spacing / (255.0 * spacingFactor); + } + + + if(isBitSet(mask, index)){ + // there are more visible child nodes at this position + int advanceG = int(round(value.g * 255.0)) * 256; + int advanceB = int(round(value.b * 255.0)); + int advanceChild = numberOfOnes(mask, index - 1); + int advance = advanceG + advanceB + advanceChild; + + iOffset = iOffset + advance; + + //spacing = spacing / (255.0 * spacingFactor); + //spacing = spacing / 3.0; + + depth++; + }else{ + // no more visible child nodes at this position + return spacing; + } + + offset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d; + } + + return spacing; +} + +float getPointSizeAttenuation(){ + return pow(2.0, getLOD()); +} + + +#endif + + +// --------------------- +// KD-TREE +// --------------------- + +#if (defined(adaptive_point_size) || defined(color_type_level_of_detail)) && defined(tree_type_kdtree) + +float getLOD(){ + vec3 offset = vec3(0.0, 0.0, 0.0); + float iOffset = 0.0; + float depth = 0.0; + + + vec3 size = uBBSize; + vec3 pos = position; + + for(float i = 0.0; i <= 1000.0; i++){ + + vec4 value = texture2D(visibleNodes, vec2(iOffset / 2048.0, 0.0)); + + int children = int(value.r * 255.0); + float next = value.g * 255.0; + int split = int(value.b * 255.0); + + if(next == 0.0){ + return depth; + } + + vec3 splitv = vec3(0.0, 0.0, 0.0); + if(split == 1){ + splitv.x = 1.0; + }else if(split == 2){ + splitv.y = 1.0; + }else if(split == 4){ + splitv.z = 1.0; + } + + iOffset = iOffset + next; + + float factor = length(pos * splitv / size); + if(factor < 0.5){ + // left + if(children == 0 || children == 2){ + return depth; + } + }else{ + // right + pos = pos - size * splitv * 0.5; + if(children == 0 || children == 1){ + return depth; + } + if(children == 3){ + iOffset = iOffset + 1.0; + } + } + size = size * ((1.0 - (splitv + 1.0) / 2.0) + 0.5); + + depth++; + } + + + return depth; +} + +float getPointSizeAttenuation(){ + return 0.5 * pow(1.3, getLOD()); +} + +#endif + + + +// +// ### ######## ######## ######## #### ######## ## ## ######## ######## ###### +// ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +// ## ## ## ## ## ## ## ## ## ## ## ## ## ## +// ## ## ## ## ######## ## ######## ## ## ## ###### ###### +// ######### ## ## ## ## ## ## ## ## ## ## ## ## +// ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## +// ## ## ## ## ## ## #### ######## ####### ## ######## ###### +// + + + +// formula adapted from: http://www.dfstudios.co.uk/articles/programming/image-programming-algorithms/image-processing-algorithms-part-5-contrast-adjustment/ +float getContrastFactor(float contrast){ + return (1.0158730158730156 * (contrast + 1.0)) / (1.0158730158730156 - contrast); +} + +vec3 getRGB(){ + vec3 rgb = color; + + rgb = pow(rgb, vec3(uRGB_gbc.x)); + rgb = rgb + uRGB_gbc.y; + rgb = (rgb - 0.5) * getContrastFactor(uRGB_gbc.z) + 0.5; + rgb = clamp(rgb, 0.0, 1.0); + + return rgb; +} + +float getIntensity(){ + float w = (intensity - intensityRange.x) / (intensityRange.y - intensityRange.x); + w = pow(w, uIntensity_gbc.x); + w = w + uIntensity_gbc.y; + w = (w - 0.5) * getContrastFactor(uIntensity_gbc.z) + 0.5; + w = clamp(w, 0.0, 1.0); + + return w; +} + +vec3 getGpsTime(){ + + float w = (gpsTime + uGpsOffset) * uGpsScale; + + + vec3 c = texture2D(gradient, vec2(w, 1.0 - w)).rgb; + + + // vec2 r = uNormalizedGpsBufferRange; + // float w = gpsTime * (r.y - r.x) + r.x; + // w = clamp(w, 0.0, 1.0); + // vec3 c = texture2D(gradient, vec2(w,1.0-w)).rgb; + + return c; +} + +vec3 getElevation(){ + vec4 world = modelMatrix * vec4( position, 1.0 ); + float w = (world.z - elevationRange.x) / (elevationRange.y - elevationRange.x); + vec3 cElevation = texture2D(gradient, vec2(w,1.0-w)).rgb; + + return cElevation; +} + +vec4 getClassification(){ + vec2 uv = vec2(classification / 255.0, 0.5); + vec4 classColor = texture2D(classificationLUT, uv); + + return classColor; +} + +vec3 getReturns(){ + + // 0b 00_000_111 + float rn = mod(returnNumber, 8.0); + // 0b 00_111_000 + float nr = mod(returnNumber / 8.0, 8.0); + + if(nr <= 1.0){ + return vec3(1.0, 0.0, 0.0); + }else{ + return vec3(0.0, 1.0, 0.0); + } + + // return vec3(nr / 4.0, 0.0, 0.0); + + // if(nr == 1.0){ + // return vec3(1.0, 1.0, 0.0); + // }else{ + // if(rn == 1.0){ + // return vec3(1.0, 0.0, 0.0); + // }else if(rn == nr){ + // return vec3(0.0, 0.0, 1.0); + // }else{ + // return vec3(0.0, 1.0, 0.0); + // } + // } + + // if(numberOfReturns == 1.0){ + // return vec3(1.0, 1.0, 0.0); + // }else{ + // if(returnNumber == 1.0){ + // return vec3(1.0, 0.0, 0.0); + // }else if(returnNumber == numberOfReturns){ + // return vec3(0.0, 0.0, 1.0); + // }else{ + // return vec3(0.0, 1.0, 0.0); + // } + // } +} + +vec3 getReturnNumber(){ + if(numberOfReturns == 1.0){ + return vec3(1.0, 1.0, 0.0); + }else{ + if(returnNumber == 1.0){ + return vec3(1.0, 0.0, 0.0); + }else if(returnNumber == numberOfReturns){ + return vec3(0.0, 0.0, 1.0); + }else{ + return vec3(0.0, 1.0, 0.0); + } + } +} + +vec3 getNumberOfReturns(){ + float value = numberOfReturns; + + float w = value / 6.0; + + vec3 color = texture2D(gradient, vec2(w, 1.0 - w)).rgb; + + return color; +} + +vec3 getSourceID(){ + float w = mod(pointSourceID, 10.0) / 10.0; + return texture2D(gradient, vec2(w,1.0 - w)).rgb; +} + +vec3 getCompositeColor(){ + vec3 c; + float w; + + c += wRGB * getRGB(); + w += wRGB; + + c += wIntensity * getIntensity() * vec3(1.0, 1.0, 1.0); + w += wIntensity; + + c += wElevation * getElevation(); + w += wElevation; + + c += wReturnNumber * getReturnNumber(); + w += wReturnNumber; + + c += wSourceID * getSourceID(); + w += wSourceID; + + vec4 cl = wClassification * getClassification(); + c += cl.a * cl.rgb; + w += wClassification * cl.a; + + c = c / w; + + if(w == 0.0){ + //c = color; + gl_Position = vec4(100.0, 100.0, 100.0, 0.0); + } + + return c; +} + + +vec3 getNormal(){ + //vec3 n_hsv = vec3( modelMatrix * vec4( normal, 0.0 )) * 0.5 + 0.5; // (n_world.xyz + vec3(1.,1.,1.)) / 2.; + vec3 n_view = normalize( vec3(modelViewMatrix * vec4( normal, 0.0 )) ); + return n_view; +} +bool applyBackfaceCulling() { + // Black not facing vertices / Backface culling + vec3 e = normalize(vec3(modelViewMatrix * vec4( position, 1. ))); + vec3 n = getNormal(); // normalize( vec3(modelViewMatrix * vec4( normal, 0.0 )) ); + + if((uUseOrthographicCamera && n.z <= 0.) || (!uUseOrthographicCamera && dot( n, e ) >= 0.)) { + return true; + } else { + return false; + } +} + +#if defined(color_type_matcap) +// Matcap Material +vec3 getMatcap(){ + vec3 eye = normalize( vec3( modelViewMatrix * vec4( position, 1. ) ) ); + if(uUseOrthographicCamera) { + eye = vec3(0., 0., -1.); + } + vec3 r_en = reflect( eye, getNormal() ); // or r_en = e - 2. * dot( n, e ) * n; + float m = 2. * sqrt(pow( r_en.x, 2. ) + pow( r_en.y, 2. ) + pow( r_en.z + 1., 2. )); + vec2 vN = r_en.xy / m + .5; + return texture2D(matcapTextureUniform, vN).rgb; +} +#endif + +vec3 getExtra(){ + + float w = (aExtra + uExtraOffset) * uExtraScale; + w = clamp(w, 0.0, 1.0); + + vec3 color = texture2D(gradient, vec2(w,1.0-w)).rgb; + + // vec2 r = uExtraNormalizedRange; + + // float w = aExtra * (r.y - r.x) + r.x; + + // w = (w - uExtraRange.x) / (uExtraRange.y - uExtraRange.x); + + // w = clamp(w, 0.0, 1.0); + + // vec3 color = texture2D(gradient, vec2(w,1.0-w)).rgb; + + return color; +} + +vec3 getColor(){ + vec3 color; + + #ifdef color_type_rgba + color = getRGB(); + #elif defined color_type_height || defined color_type_elevation + color = getElevation(); + #elif defined color_type_rgb_height + vec3 cHeight = getElevation(); + color = (1.0 - uTransition) * getRGB() + uTransition * cHeight; + #elif defined color_type_depth + float linearDepth = gl_Position.w; + float expDepth = (gl_Position.z / gl_Position.w) * 0.5 + 0.5; + color = vec3(linearDepth, expDepth, 0.0); + //color = vec3(1.0, 0.5, 0.3); + #elif defined color_type_intensity + float w = getIntensity(); + color = vec3(w, w, w); + #elif defined color_type_gps_time + color = getGpsTime(); + #elif defined color_type_intensity_gradient + float w = getIntensity(); + color = texture2D(gradient, vec2(w,1.0-w)).rgb; + #elif defined color_type_color + color = uColor; + #elif defined color_type_level_of_detail + float depth = getLOD(); + float w = depth / 10.0; + color = texture2D(gradient, vec2(w,1.0-w)).rgb; + #elif defined color_type_indices + color = indices.rgb; + #elif defined color_type_classification + vec4 cl = getClassification(); + color = cl.rgb; + #elif defined color_type_return_number + color = getReturnNumber(); + #elif defined color_type_returns + color = getReturns(); + #elif defined color_type_number_of_returns + color = getNumberOfReturns(); + #elif defined color_type_source_id + color = getSourceID(); + #elif defined color_type_point_source_id + color = getSourceID(); + #elif defined color_type_normal + color = (modelMatrix * vec4(normal, 0.0)).xyz; + #elif defined color_type_phong + color = color; + #elif defined color_type_composite + color = getCompositeColor(); + #elif defined color_type_matcap + color = getMatcap(); + #else + color = getExtra(); + #endif + + if (backfaceCulling && applyBackfaceCulling()) { + color = vec3(0.); + } + + return color; +} + +float getPointSize(){ + float pointSize = 1.0; + + float slope = tan(fov / 2.0); + float projFactor = -0.5 * uScreenHeight / (slope * vViewPosition.z); + + float scale = length( + modelViewMatrix * vec4(0, 0, 0, 1) - + modelViewMatrix * vec4(uOctreeSpacing, 0, 0, 1) + ) / uOctreeSpacing; + projFactor = projFactor * scale; + + float r = uOctreeSpacing * 1.7; + vRadius = r; + #if defined fixed_point_size + pointSize = size; + #elif defined attenuated_point_size + if(uUseOrthographicCamera){ + pointSize = size; + }else{ + pointSize = size * spacing * projFactor; + //pointSize = pointSize * projFactor; + } + #elif defined adaptive_point_size + if(uUseOrthographicCamera) { + float worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation(); + pointSize = (worldSpaceSize / uOrthoWidth) * uScreenWidth; + } else { + float worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation(); + pointSize = worldSpaceSize * projFactor; + } + #endif + + pointSize = max(minSize, pointSize); + pointSize = min(maxSize, pointSize); + + vRadius = pointSize / projFactor; + + return pointSize; +} + +#if defined(num_clippolygons) && num_clippolygons > 0 +bool pointInClipPolygon(vec3 point, int polyIdx) { + + mat4 wvp = uClipPolygonWVP[polyIdx]; + //vec4 screenClipPos = uClipPolygonVP[polyIdx] * modelMatrix * vec4(point, 1.0); + //screenClipPos.xy = screenClipPos.xy / screenClipPos.w * 0.5 + 0.5; + + vec4 pointNDC = wvp * vec4(point, 1.0); + pointNDC.xy = pointNDC.xy / pointNDC.w; + + int j = uClipPolygonVCount[polyIdx] - 1; + bool c = false; + for(int i = 0; i < 8; i++) { + if(i == uClipPolygonVCount[polyIdx]) { + break; + } + + //vec4 verti = wvp * vec4(uClipPolygonVertices[polyIdx * 8 + i], 1); + //vec4 vertj = wvp * vec4(uClipPolygonVertices[polyIdx * 8 + j], 1); + + //verti.xy = verti.xy / verti.w; + //vertj.xy = vertj.xy / vertj.w; + + //verti.xy = verti.xy / verti.w * 0.5 + 0.5; + //vertj.xy = vertj.xy / vertj.w * 0.5 + 0.5; + + vec3 verti = uClipPolygonVertices[polyIdx * 8 + i]; + vec3 vertj = uClipPolygonVertices[polyIdx * 8 + j]; + + if( ((verti.y > pointNDC.y) != (vertj.y > pointNDC.y)) && + (pointNDC.x < (vertj.x-verti.x) * (pointNDC.y-verti.y) / (vertj.y-verti.y) + verti.x) ) { + c = !c; + } + j = i; + } + + return c; +} +#endif + +void doClipping(){ + + { + vec4 cl = getClassification(); + if(cl.a == 0.0){ + gl_Position = vec4(100.0, 100.0, 100.0, 0.0); + + return; + } + } + + #if defined(clip_return_number_enabled) + { // return number filter + vec2 range = uFilterReturnNumberRange; + if(returnNumber < range.x || returnNumber > range.y){ + gl_Position = vec4(100.0, 100.0, 100.0, 0.0); + + return; + } + } + #endif + + #if defined(clip_number_of_returns_enabled) + { // number of return filter + vec2 range = uFilterNumberOfReturnsRange; + if(numberOfReturns < range.x || numberOfReturns > range.y){ + gl_Position = vec4(100.0, 100.0, 100.0, 0.0); + + return; + } + } + #endif + + #if defined(clip_gps_enabled) + { // GPS time filter + float time = (gpsTime + uGpsOffset) * uGpsScale; + vec2 range = uFilterGPSTimeClipRange; + + if(time < range.x || time > range.y){ + gl_Position = vec4(100.0, 100.0, 100.0, 0.0); + + return; + } + } + #endif + + #if defined(clip_point_source_id_enabled) + { // point source id filter + vec2 range = uFilterPointSourceIDClipRange; + if(pointSourceID < range.x || pointSourceID > range.y){ + gl_Position = vec4(100.0, 100.0, 100.0, 0.0); + + return; + } + } + #endif + + int clipVolumesCount = 0; + int insideCount = 0; + + #if defined(num_clipboxes) && num_clipboxes > 0 + for(int i = 0; i < num_clipboxes; i++){ + vec4 clipPosition = clipBoxes[i] * modelMatrix * vec4( position, 1.0 ); + bool inside = -0.5 <= clipPosition.x && clipPosition.x <= 0.5; + inside = inside && -0.5 <= clipPosition.y && clipPosition.y <= 0.5; + inside = inside && -0.5 <= clipPosition.z && clipPosition.z <= 0.5; + + insideCount = insideCount + (inside ? 1 : 0); + clipVolumesCount++; + } + #endif + + #if defined(num_clippolygons) && num_clippolygons > 0 + for(int i = 0; i < num_clippolygons; i++) { + bool inside = pointInClipPolygon(position, i); + + insideCount = insideCount + (inside ? 1 : 0); + clipVolumesCount++; + } + #endif + + bool insideAny = insideCount > 0; + bool insideAll = (clipVolumesCount > 0) && (clipVolumesCount == insideCount); + + if(clipMethod == CLIPMETHOD_INSIDE_ANY){ + if(insideAny && clipTask == CLIPTASK_HIGHLIGHT){ + vColor.r += 0.5; + }else if(!insideAny && clipTask == CLIPTASK_SHOW_INSIDE){ + gl_Position = vec4(100.0, 100.0, 100.0, 1.0); + }else if(insideAny && clipTask == CLIPTASK_SHOW_OUTSIDE){ + gl_Position = vec4(100.0, 100.0, 100.0, 1.0); + } + }else if(clipMethod == CLIPMETHOD_INSIDE_ALL){ + if(insideAll && clipTask == CLIPTASK_HIGHLIGHT){ + vColor.r += 0.5; + }else if(!insideAll && clipTask == CLIPTASK_SHOW_INSIDE){ + gl_Position = vec4(100.0, 100.0, 100.0, 1.0); + }else if(insideAll && clipTask == CLIPTASK_SHOW_OUTSIDE){ + gl_Position = vec4(100.0, 100.0, 100.0, 1.0); + } + } +} + + + +// +// ## ## ### #### ## ## +// ### ### ## ## ## ### ## +// #### #### ## ## ## #### ## +// ## ### ## ## ## ## ## ## ## +// ## ## ######### ## ## #### +// ## ## ## ## ## ## ### +// ## ## ## ## #### ## ## +// + +void main() { + vec4 mvPosition = modelViewMatrix * vec4(position, 1.0 ); + vViewPosition = mvPosition.xyz; + gl_Position = projectionMatrix * mvPosition; + vLogDepth = log2(-mvPosition.z); + + //gl_Position = vec4(0.0, 0.0, 0.0, 1.0); + //gl_PointSize = 5.0; + + // POINT SIZE + float pointSize = getPointSize(); + //float pointSize = 2.0; + gl_PointSize = pointSize; + vPointSize = pointSize; + + // COLOR + vColor = getColor(); + // vColor = vec3(1.0, 0.0, 0.0); + + //gl_Position = vec4(0.0, 0.0, 0.0, 1.0); + //gl_Position = vec4(position.xzy / 1000.0, 1.0 ); + + //gl_PointSize = 5.0; + //vColor = vec3(1.0, 1.0, 1.0); + + // only for "replacing" approaches + // if(getLOD() != uLevel){ + // gl_Position = vec4(10.0, 10.0, 10.0, 1.0); + // } + + + #if defined hq_depth_pass + float originalDepth = gl_Position.w; + float adjustedDepth = originalDepth + 2.0 * vRadius; + float adjust = adjustedDepth / originalDepth; + + mvPosition.xyz = mvPosition.xyz * adjust; + gl_Position = projectionMatrix * mvPosition; + #endif + + + // CLIPPING + doClipping(); + + #if defined(num_clipspheres) && num_clipspheres > 0 + for(int i = 0; i < num_clipspheres; i++){ + vec4 sphereLocal = uClipSpheres[i] * mvPosition; + + float distance = length(sphereLocal.xyz); + + if(distance < 1.0){ + float w = distance; + vec3 cGradient = texture2D(gradient, vec2(w, 1.0 - w)).rgb; + + vColor = cGradient; + //vColor = cGradient * 0.7 + vColor * 0.3; + } + } + #endif + + #if defined(num_shadowmaps) && num_shadowmaps > 0 + + const float sm_near = 0.1; + const float sm_far = 10000.0; + + for(int i = 0; i < num_shadowmaps; i++){ + vec3 viewPos = (uShadowWorldView[i] * vec4(position, 1.0)).xyz; + float distanceToLight = abs(viewPos.z); + + vec4 projPos = uShadowProj[i] * uShadowWorldView[i] * vec4(position, 1); + vec3 nc = projPos.xyz / projPos.w; + + float u = nc.x * 0.5 + 0.5; + float v = nc.y * 0.5 + 0.5; + + vec2 sampleStep = vec2(1.0 / (2.0*1024.0), 1.0 / (2.0*1024.0)) * 1.5; + vec2 sampleLocations[9]; + sampleLocations[0] = vec2(0.0, 0.0); + sampleLocations[1] = sampleStep; + sampleLocations[2] = -sampleStep; + sampleLocations[3] = vec2(sampleStep.x, -sampleStep.y); + sampleLocations[4] = vec2(-sampleStep.x, sampleStep.y); + + sampleLocations[5] = vec2(0.0, sampleStep.y); + sampleLocations[6] = vec2(0.0, -sampleStep.y); + sampleLocations[7] = vec2(sampleStep.x, 0.0); + sampleLocations[8] = vec2(-sampleStep.x, 0.0); + + float visibleSamples = 0.0; + float numSamples = 0.0; + + float bias = vRadius * 2.0; + + for(int j = 0; j < 9; j++){ + vec4 depthMapValue = texture2D(uShadowMap[i], vec2(u, v) + sampleLocations[j]); + + float linearDepthFromSM = depthMapValue.x + bias; + float linearDepthFromViewer = distanceToLight; + + if(linearDepthFromSM > linearDepthFromViewer){ + visibleSamples += 1.0; + } + + numSamples += 1.0; + } + + float visibility = visibleSamples / numSamples; + + if(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){ + //vColor = vec3(0.0, 0.0, 0.2); + }else{ + //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); + vColor = vColor * visibility + vColor * uShadowColor * (1.0 - visibility); + } + + + } + + #endif +} +`; + + Shaders["pointcloud.fs"] = ` +#if defined paraboloid_point_shape + #extension GL_EXT_frag_depth : enable +#endif + +precision highp float; +precision highp int; + +uniform mat4 viewMatrix; +uniform mat4 uViewInv; +uniform mat4 uProjInv; +uniform vec3 cameraPosition; + + +uniform mat4 projectionMatrix; +uniform float uOpacity; + +uniform float blendHardness; +uniform float blendDepthSupplement; +uniform float fov; +uniform float uSpacing; +uniform float near; +uniform float far; +uniform float uPCIndex; +uniform float uScreenWidth; +uniform float uScreenHeight; + +varying vec3 vColor; +varying float vLogDepth; +varying vec3 vViewPosition; +varying float vRadius; +varying float vPointSize; +varying vec3 vPosition; + + +float specularStrength = 1.0; + +void main() { + + // gl_FragColor = vec4(vColor, 1.0); + + vec3 color = vColor; + float depth = gl_FragCoord.z; + + #if defined(circle_point_shape) || defined(paraboloid_point_shape) + float u = 2.0 * gl_PointCoord.x - 1.0; + float v = 2.0 * gl_PointCoord.y - 1.0; + #endif + + #if defined(circle_point_shape) + float cc = u*u + v*v; + if(cc > 1.0){ + discard; + } + #endif + + #if defined color_type_indices + gl_FragColor = vec4(color, uPCIndex / 255.0); + #else + gl_FragColor = vec4(color, uOpacity); + #endif + + #if defined paraboloid_point_shape + float wi = 0.0 - ( u*u + v*v); + vec4 pos = vec4(vViewPosition, 1.0); + pos.z += wi * vRadius; + float linearDepth = -pos.z; + pos = projectionMatrix * pos; + pos = pos / pos.w; + float expDepth = pos.z; + depth = (pos.z + 1.0) / 2.0; + gl_FragDepthEXT = depth; + + #if defined(color_type_depth) + color.r = linearDepth; + color.g = expDepth; + #endif + + #if defined(use_edl) + gl_FragColor.a = log2(linearDepth); + #endif + + #else + #if defined(use_edl) + gl_FragColor.a = vLogDepth; + #endif + #endif + + #if defined(weighted_splats) + float distance = 2.0 * length(gl_PointCoord.xy - 0.5); + float weight = max(0.0, 1.0 - distance); + weight = pow(weight, 1.5); + + gl_FragColor.a = weight; + gl_FragColor.xyz = gl_FragColor.xyz * weight; + #endif + + //gl_FragColor = vec4(0.0, 0.7, 0.0, 1.0); + +} + + +`; + + Shaders["pointcloud_sm.vs"] = ` +precision mediump float; +precision mediump int; + +attribute vec3 position; +attribute vec3 color; + +uniform mat4 modelMatrix; +uniform mat4 modelViewMatrix; +uniform mat4 projectionMatrix; +uniform mat4 viewMatrix; + +uniform float uScreenWidth; +uniform float uScreenHeight; +uniform float near; +uniform float far; + +uniform float uSpacing; +uniform float uOctreeSize; +uniform float uLevel; +uniform float uVNStart; + +uniform sampler2D visibleNodes; + +varying float vLinearDepth; +varying vec3 vColor; + +#define PI 3.141592653589793 + + + +// --------------------- +// OCTREE +// --------------------- + +#if defined(adaptive_point_size) +/** + * number of 1-bits up to inclusive index position + * number is treated as if it were an integer in the range 0-255 + * + */ +float numberOfOnes(float number, float index){ + float tmp = mod(number, pow(2.0, index + 1.0)); + float numOnes = 0.0; + for(float i = 0.0; i < 8.0; i++){ + if(mod(tmp, 2.0) != 0.0){ + numOnes++; + } + tmp = floor(tmp / 2.0); + } + return numOnes; +} + + +/** + * checks whether the bit at index is 1 + * number is treated as if it were an integer in the range 0-255 + * + */ +bool isBitSet(float number, float index){ + return mod(floor(number / pow(2.0, index)), 2.0) != 0.0; +} + + +/** + * find the LOD at the point position + */ +float getLOD(){ + + vec3 offset = vec3(0.0, 0.0, 0.0); + float iOffset = uVNStart; + float depth = uLevel; + for(float i = 0.0; i <= 30.0; i++){ + float nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0); + + vec3 index3d = (position-offset) / nodeSizeAtLevel; + index3d = floor(index3d + 0.5); + float index = 4.0 * index3d.x + 2.0 * index3d.y + index3d.z; + + vec4 value = texture2D(visibleNodes, vec2(iOffset / 2048.0, 0.0)); + float mask = value.r * 255.0; + if(isBitSet(mask, index)){ + // there are more visible child nodes at this position + iOffset = iOffset + value.g * 255.0 * 256.0 + value.b * 255.0 + numberOfOnes(mask, index - 1.0); + depth++; + }else{ + // no more visible child nodes at this position + return depth; + } + + offset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d; + } + + return depth; +} + +#endif + +float getPointSize(){ + float pointSize = 1.0; + + float slope = tan(fov / 2.0); + float projFactor = -0.5 * uScreenHeight / (slope * vViewPosition.z); + + float r = uOctreeSpacing * 1.5; + vRadius = r; + #if defined fixed_point_size + pointSize = size; + #elif defined attenuated_point_size + if(uUseOrthographicCamera){ + pointSize = size; + }else{ + pointSize = pointSize * projFactor; + } + #elif defined adaptive_point_size + if(uUseOrthographicCamera) { + float worldSpaceSize = 1.5 * size * r / getPointSizeAttenuation(); + pointSize = (worldSpaceSize / uOrthoWidth) * uScreenWidth; + } else { + float worldSpaceSize = 1.5 * size * r / getPointSizeAttenuation(); + pointSize = worldSpaceSize * projFactor; + } + #endif + + pointSize = max(minSize, pointSize); + pointSize = min(maxSize, pointSize); + + vRadius = pointSize / projFactor; + + return pointSize; +} + + +void main() { + + vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); + vLinearDepth = gl_Position.w; + + float pointSize = getPointSize(); + gl_PointSize = pointSize; + +} +`; + + Shaders["pointcloud_sm.fs"] = ` +precision mediump float; +precision mediump int; + +varying vec3 vColor; +varying float vLinearDepth; + +void main() { + + //gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); + //gl_FragColor = vec4(vColor, 1.0); + //gl_FragColor = vec4(vLinearDepth, pow(vLinearDepth, 2.0), 0.0, 1.0); + gl_FragColor = vec4(vLinearDepth, vLinearDepth / 30.0, vLinearDepth / 30.0, 1.0); + +} + + +`; + + Shaders["normalize.vs"] = ` +precision mediump float; +precision mediump int; + +attribute vec3 position; +attribute vec2 uv; + +uniform mat4 projectionMatrix; +uniform mat4 modelViewMatrix; + +varying vec2 vUv; + +void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); +}`; + + Shaders["normalize.fs"] = ` +#extension GL_EXT_frag_depth : enable + +precision mediump float; +precision mediump int; + +uniform sampler2D uWeightMap; +uniform sampler2D uDepthMap; + +varying vec2 vUv; + +void main() { + float depth = texture2D(uDepthMap, vUv).r; + + if(depth >= 1.0){ + discard; + } + + gl_FragColor = vec4(depth, 1.0, 0.0, 1.0); + + vec4 color = texture2D(uWeightMap, vUv); + color = color / color.w; + + gl_FragColor = vec4(color.xyz, 1.0); + + gl_FragDepthEXT = depth; + + +}`; + + Shaders["normalize_and_edl.fs"] = ` +#extension GL_EXT_frag_depth : enable + +// +// adapted from the EDL shader code from Christian Boucheny in cloud compare: +// https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL +// + +precision mediump float; +precision mediump int; + +uniform sampler2D uWeightMap; +uniform sampler2D uEDLMap; +uniform sampler2D uDepthMap; + +uniform float screenWidth; +uniform float screenHeight; +uniform vec2 neighbours[NEIGHBOUR_COUNT]; +uniform float edlStrength; +uniform float radius; + +varying vec2 vUv; + +float response(float depth){ + vec2 uvRadius = radius / vec2(screenWidth, screenHeight); + + float sum = 0.0; + + for(int i = 0; i < NEIGHBOUR_COUNT; i++){ + vec2 uvNeighbor = vUv + uvRadius * neighbours[i]; + + float neighbourDepth = texture2D(uEDLMap, uvNeighbor).a; + + if(neighbourDepth != 0.0){ + if(depth == 0.0){ + sum += 100.0; + }else{ + sum += max(0.0, depth - neighbourDepth); + } + } + } + + return sum / float(NEIGHBOUR_COUNT); +} + +void main() { + + float edlDepth = texture2D(uEDLMap, vUv).a; + float res = response(edlDepth); + float shade = exp(-res * 300.0 * edlStrength); + + float depth = texture2D(uDepthMap, vUv).r; + if(depth >= 1.0 && res == 0.0){ + discard; + } + + vec4 color = texture2D(uWeightMap, vUv); + color = color / color.w; + color = color * shade; + + gl_FragColor = vec4(color.xyz, 1.0); + + gl_FragDepthEXT = depth; +}`; + + Shaders["edl.vs"] = ` +precision mediump float; +precision mediump int; + +attribute vec3 position; +attribute vec2 uv; + +uniform mat4 projectionMatrix; +uniform mat4 modelViewMatrix; + +varying vec2 vUv; + +void main() { + vUv = uv; + + vec4 mvPosition = modelViewMatrix * vec4(position,1.0); + + gl_Position = projectionMatrix * mvPosition; +}`; + + Shaders["edl.fs"] = ` +#extension GL_EXT_frag_depth : enable + +// +// adapted from the EDL shader code from Christian Boucheny in cloud compare: +// https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL +// + +precision mediump float; +precision mediump int; + +uniform float screenWidth; +uniform float screenHeight; +uniform vec2 neighbours[NEIGHBOUR_COUNT]; +uniform float edlStrength; +uniform float radius; +uniform float opacity; + +uniform float uNear; +uniform float uFar; + +uniform mat4 uProj; + +uniform sampler2D uEDLColor; +uniform sampler2D uEDLDepth; + +varying vec2 vUv; + +float response(float depth){ + vec2 uvRadius = radius / vec2(screenWidth, screenHeight); + + float sum = 0.0; + + for(int i = 0; i < NEIGHBOUR_COUNT; i++){ + vec2 uvNeighbor = vUv + uvRadius * neighbours[i]; + + float neighbourDepth = texture2D(uEDLColor, uvNeighbor).a; + neighbourDepth = (neighbourDepth == 1.0) ? 0.0 : neighbourDepth; + + if(neighbourDepth != 0.0){ + if(depth == 0.0){ + sum += 100.0; + }else{ + sum += max(0.0, depth - neighbourDepth); + } + } + } + + return sum / float(NEIGHBOUR_COUNT); +} + +void main(){ + vec4 cEDL = texture2D(uEDLColor, vUv); + + float depth = cEDL.a; + depth = (depth == 1.0) ? 0.0 : depth; + float res = response(depth); + float shade = exp(-res * 300.0 * edlStrength); + + gl_FragColor = vec4(cEDL.rgb * shade, opacity); + + { // write regular hyperbolic depth values to depth buffer + float dl = pow(2.0, depth); + + vec4 dp = uProj * vec4(0.0, 0.0, -dl, 1.0); + float pz = dp.z / dp.w; + float fragDepth = (pz + 1.0) / 2.0; + + gl_FragDepthEXT = fragDepth; + } + + if(depth == 0.0){ + discard; + } + +} +`; + + Shaders["blur.vs"] = ` +varying vec2 vUv; + +void main() { + vUv = uv; + + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); +}`; + + Shaders["blur.fs"] = ` +uniform mat4 projectionMatrix; + +uniform float screenWidth; +uniform float screenHeight; +uniform float near; +uniform float far; + +uniform sampler2D map; + +varying vec2 vUv; + +void main() { + + float dx = 1.0 / screenWidth; + float dy = 1.0 / screenHeight; + + vec3 color = vec3(0.0, 0.0, 0.0); + color += texture2D(map, vUv + vec2(-dx, -dy)).rgb; + color += texture2D(map, vUv + vec2( 0, -dy)).rgb; + color += texture2D(map, vUv + vec2(+dx, -dy)).rgb; + color += texture2D(map, vUv + vec2(-dx, 0)).rgb; + color += texture2D(map, vUv + vec2( 0, 0)).rgb; + color += texture2D(map, vUv + vec2(+dx, 0)).rgb; + color += texture2D(map, vUv + vec2(-dx, dy)).rgb; + color += texture2D(map, vUv + vec2( 0, dy)).rgb; + color += texture2D(map, vUv + vec2(+dx, dy)).rgb; + + color = color / 9.0; + + gl_FragColor = vec4(color, 1.0); +}`; + + const ClassificationScheme = { + + DEFAULT: { + 0: { visible: true, name: 'never classified' , color: [0.5, 0.5, 0.5, 1.0] }, + 1: { visible: true, name: 'unclassified' , color: [0.5, 0.5, 0.5, 1.0] }, + 2: { visible: true, name: 'ground' , color: [0.63, 0.32, 0.18, 1.0] }, + 3: { visible: true, name: 'low vegetation' , color: [0.0, 1.0, 0.0, 1.0] }, + 4: { visible: true, name: 'medium vegetation' , color: [0.0, 0.8, 0.0, 1.0] }, + 5: { visible: true, name: 'high vegetation' , color: [0.0, 0.6, 0.0, 1.0] }, + 6: { visible: true, name: 'building' , color: [1.0, 0.66, 0.0, 1.0] }, + 7: { visible: true, name: 'low point(noise)' , color: [1.0, 0.0, 1.0, 1.0] }, + 8: { visible: true, name: 'key-point' , color: [1.0, 0.0, 0.0, 1.0] }, + 9: { visible: true, name: 'water' , color: [0.0, 0.0, 1.0, 1.0] }, + 12: { visible: true, name: 'overlap' , color: [1.0, 1.0, 0.0, 1.0] }, + DEFAULT: { visible: true, name: 'default' , color: [0.3, 0.6, 0.6, 0.5] }, + } + }; + + Object.defineProperty(ClassificationScheme, 'RANDOM', { + get: function() { + + let scheme = {}; + + for(let i = 0; i <= 255; i++){ + scheme[i] = new Vector4(Math.random(), Math.random(), Math.random()); + } + + scheme["DEFAULT"] = new Vector4(Math.random(), Math.random(), Math.random()); + + return scheme; + } + }); + + // + // how to calculate the radius of a projected sphere in screen space + // http://stackoverflow.com/questions/21648630/radius-of-projected-sphere-in-screen-space + // http://stackoverflow.com/questions/3717226/radius-of-projected-sphere + // + + + class PointCloudMaterial$1 extends RawShaderMaterial { + constructor (parameters = {}) { + super(); + + this.visibleNodesTexture = Utils.generateDataTexture(2048, 1, new Color(0xffffff)); + this.visibleNodesTexture.minFilter = NearestFilter; + this.visibleNodesTexture.magFilter = NearestFilter; + + let getValid = (a, b) => { + if(a !== undefined){ + return a; + }else { + return b; + } + }; + + let pointSize = getValid(parameters.size, 1.0); + let minSize = getValid(parameters.minSize, 2.0); + let maxSize = getValid(parameters.maxSize, 50.0); + let treeType = getValid(parameters.treeType, TreeType.OCTREE); + + this._pointSizeType = PointSizeType.FIXED; + this._shape = PointShape.SQUARE; + this._useClipBox = false; + this.clipBoxes = []; + this.clipPolygons = []; + this._weighted = false; + this._gradient = Gradients.SPECTRAL; + this.gradientTexture = PointCloudMaterial$1.generateGradientTexture(this._gradient); + this._matcap = "matcap.jpg"; + this.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap); + this.lights = false; + this.fog = false; + this._treeType = treeType; + this._useEDL = false; + this.defines = new Map(); + + this.ranges = new Map(); + + this._activeAttributeName = null; + + this._defaultIntensityRangeChanged = false; + this._defaultElevationRangeChanged = false; + + { + const [width, height] = [256, 1]; + let data = new Uint8Array(width * 4); + let texture = new DataTexture(data, width, height, RGBAFormat); + texture.magFilter = NearestFilter; + texture.needsUpdate = true; + + this.classificationTexture = texture; + } + + this.attributes = { + position: { type: 'fv', value: [] }, + color: { type: 'fv', value: [] }, + normal: { type: 'fv', value: [] }, + intensity: { type: 'f', value: [] }, + classification: { type: 'f', value: [] }, + returnNumber: { type: 'f', value: [] }, + numberOfReturns: { type: 'f', value: [] }, + pointSourceID: { type: 'f', value: [] }, + indices: { type: 'fv', value: [] } + }; + + this.uniforms = { + level: { type: "f", value: 0.0 }, + vnStart: { type: "f", value: 0.0 }, + spacing: { type: "f", value: 1.0 }, + blendHardness: { type: "f", value: 2.0 }, + blendDepthSupplement: { type: "f", value: 0.0 }, + fov: { type: "f", value: 1.0 }, + screenWidth: { type: "f", value: 1.0 }, + screenHeight: { type: "f", value: 1.0 }, + near: { type: "f", value: 0.1 }, + far: { type: "f", value: 1.0 }, + uColor: { type: "c", value: new Color( 0xffffff ) }, + uOpacity: { type: "f", value: 1.0 }, + size: { type: "f", value: pointSize }, + minSize: { type: "f", value: minSize }, + maxSize: { type: "f", value: maxSize }, + octreeSize: { type: "f", value: 0 }, + bbSize: { type: "fv", value: [0, 0, 0] }, + elevationRange: { type: "2fv", value: [0, 0] }, + + clipBoxCount: { type: "f", value: 0 }, + //clipSphereCount: { type: "f", value: 0 }, + clipPolygonCount: { type: "i", value: 0 }, + clipBoxes: { type: "Matrix4fv", value: [] }, + //clipSpheres: { type: "Matrix4fv", value: [] }, + clipPolygons: { type: "3fv", value: [] }, + clipPolygonVCount: { type: "iv", value: [] }, + clipPolygonVP: { type: "Matrix4fv", value: [] }, + + visibleNodes: { type: "t", value: this.visibleNodesTexture }, + pcIndex: { type: "f", value: 0 }, + gradient: { type: "t", value: this.gradientTexture }, + classificationLUT: { type: "t", value: this.classificationTexture }, + uHQDepthMap: { type: "t", value: null }, + toModel: { type: "Matrix4f", value: [] }, + diffuse: { type: "fv", value: [1, 1, 1] }, + transition: { type: "f", value: 0.5 }, + + intensityRange: { type: "fv", value: [Infinity, -Infinity] }, + + intensity_gbc: { type: "fv", value: [1, 0, 0]}, + uRGB_gbc: { type: "fv", value: [1, 0, 0]}, + // intensityGamma: { type: "f", value: 1 }, + // intensityContrast: { type: "f", value: 0 }, + // intensityBrightness:{ type: "f", value: 0 }, + // rgbGamma: { type: "f", value: 1 }, + // rgbContrast: { type: "f", value: 0 }, + // rgbBrightness: { type: "f", value: 0 }, + wRGB: { type: "f", value: 1 }, + wIntensity: { type: "f", value: 0 }, + wElevation: { type: "f", value: 0 }, + wClassification: { type: "f", value: 0 }, + wReturnNumber: { type: "f", value: 0 }, + wSourceID: { type: "f", value: 0 }, + useOrthographicCamera: { type: "b", value: false }, + elevationGradientRepat: { type: "i", value: ElevationGradientRepeat.CLAMP }, + clipTask: { type: "i", value: 1 }, + clipMethod: { type: "i", value: 1 }, + uShadowColor: { type: "3fv", value: [0, 0, 0] }, + + uExtraScale: { type: "f", value: 1}, + uExtraOffset: { type: "f", value: 0}, + uExtraRange: { type: "2fv", value: [0, 1] }, + uExtraGammaBrightContr: { type: "3fv", value: [1, 0, 0] }, + + uFilterReturnNumberRange: { type: "fv", value: [0, 7]}, + uFilterNumberOfReturnsRange: { type: "fv", value: [0, 7]}, + uFilterGPSTimeClipRange: { type: "fv", value: [0, 7]}, + uFilterPointSourceIDClipRange: { type: "fv", value: [0, 65535]}, + matcapTextureUniform: { type: "t", value: this.matcapTexture }, + backfaceCulling: { type: "b", value: false }, + }; + + this.classification = ClassificationScheme.DEFAULT; + + this.defaultAttributeValues.normal = [0, 0, 0]; + this.defaultAttributeValues.classification = [0, 0, 0]; + this.defaultAttributeValues.indices = [0, 0, 0, 0]; + + this.vertexShader = Shaders['pointcloud.vs']; + this.fragmentShader = Shaders['pointcloud.fs']; + + this.vertexColors = VertexColors; + + this.updateShaderSource(); + } + + setDefine(key, value){ + if(value !== undefined && value !== null){ + if(this.defines.get(key) !== value){ + this.defines.set(key, value); + this.updateShaderSource(); + } + }else { + this.removeDefine(key); + } + } + + removeDefine(key){ + this.defines.delete(key); + } + + updateShaderSource () { + + let vs = Shaders['pointcloud.vs']; + let fs = Shaders['pointcloud.fs']; + let definesString = this.getDefines(); + + let vsVersionIndex = vs.indexOf("#version "); + let fsVersionIndex = fs.indexOf("#version "); + + if(vsVersionIndex >= 0){ + vs = vs.replace(/(#version .*)/, `$1\n${definesString}`); + }else { + vs = `${definesString}\n${vs}`; + } + + if(fsVersionIndex >= 0){ + fs = fs.replace(/(#version .*)/, `$1\n${definesString}`); + }else { + fs = `${definesString}\n${fs}`; + } + + this.vertexShader = vs; + this.fragmentShader = fs; + + if (this.opacity === 1.0) { + this.blending = NoBlending; + this.transparent = false; + this.depthTest = true; + this.depthWrite = true; + this.depthFunc = LessEqualDepth; + } else if (this.opacity < 1.0 && !this.useEDL) { + this.blending = AdditiveBlending; + this.transparent = true; + this.depthTest = false; + this.depthWrite = true; + this.depthFunc = AlwaysDepth; + } + + if (this.weighted) { + this.blending = AdditiveBlending; + this.transparent = true; + this.depthTest = true; + this.depthWrite = false; + } + + this.needsUpdate = true; + } + + getDefines () { + let defines = []; + + if (this.pointSizeType === PointSizeType.FIXED) { + defines.push('#define fixed_point_size'); + } else if (this.pointSizeType === PointSizeType.ATTENUATED) { + defines.push('#define attenuated_point_size'); + } else if (this.pointSizeType === PointSizeType.ADAPTIVE) { + defines.push('#define adaptive_point_size'); + } + + if (this.shape === PointShape.SQUARE) { + defines.push('#define square_point_shape'); + } else if (this.shape === PointShape.CIRCLE) { + defines.push('#define circle_point_shape'); + } else if (this.shape === PointShape.PARABOLOID) { + defines.push('#define paraboloid_point_shape'); + } + + if (this._useEDL) { + defines.push('#define use_edl'); + } + + if(this.activeAttributeName){ + let attributeName = this.activeAttributeName.replace(/[^a-zA-Z0-9]/g, '_'); + + defines.push(`#define color_type_${attributeName}`); + } + + if(this._treeType === TreeType.OCTREE){ + defines.push('#define tree_type_octree'); + }else if(this._treeType === TreeType.KDTREE){ + defines.push('#define tree_type_kdtree'); + } + + if (this.weighted) { + defines.push('#define weighted_splats'); + } + + for(let [key, value] of this.defines){ + defines.push(value); + } + + return defines.join("\n"); + } + + setClipBoxes (clipBoxes) { + if (!clipBoxes) { + return; + } + + let doUpdate = (this.clipBoxes.length !== clipBoxes.length) && (clipBoxes.length === 0 || this.clipBoxes.length === 0); + + this.uniforms.clipBoxCount.value = this.clipBoxes.length; + this.clipBoxes = clipBoxes; + + if (doUpdate) { + this.updateShaderSource(); + } + + this.uniforms.clipBoxes.value = new Float32Array(this.clipBoxes.length * 16); + + for (let i = 0; i < this.clipBoxes.length; i++) { + let box = clipBoxes[i]; + + this.uniforms.clipBoxes.value.set(box.inverse.elements, 16 * i); + } + + for (let i = 0; i < this.uniforms.clipBoxes.value.length; i++) { + if (Number.isNaN(this.uniforms.clipBoxes.value[i])) { + this.uniforms.clipBoxes.value[i] = Infinity; + } + } + } + + setClipPolygons(clipPolygons, maxPolygonVertices) { + if(!clipPolygons){ + return; + } + + this.clipPolygons = clipPolygons; + + let doUpdate = (this.clipPolygons.length !== clipPolygons.length); + + if(doUpdate){ + this.updateShaderSource(); + } + } + + get gradient(){ + return this._gradient; + } + + set gradient (value) { + if (this._gradient !== value) { + this._gradient = value; + this.gradientTexture = PointCloudMaterial$1.generateGradientTexture(this._gradient); + this.uniforms.gradient.value = this.gradientTexture; + } + } + + get matcap(){ + return this._matcap; + } + + set matcap (value) { + if (this._matcap !== value) { + this._matcap = value; + this.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap); + this.uniforms.matcapTextureUniform.value = this.matcapTexture; + } + } + get useOrthographicCamera() { + return this.uniforms.useOrthographicCamera.value; + } + + set useOrthographicCamera(value) { + if(this.uniforms.useOrthographicCamera.value !== value){ + this.uniforms.useOrthographicCamera.value = value; + } + } + get backfaceCulling() { + return this.uniforms.backfaceCulling.value; + } + + set backfaceCulling(value) { + if(this.uniforms.backfaceCulling.value !== value){ + this.uniforms.backfaceCulling.value = value; + this.dispatchEvent({type: 'backface_changed', target: this}); + } + } + + recomputeClassification () { + const classification = this.classification; + const data = this.classificationTexture.image.data; + + let width = 256; + const black = [1, 1, 1, 1]; + + let valuesChanged = false; + + for (let i = 0; i < width; i++) { + + let color; + let visible = true; + + if (classification[i]) { + color = classification[i].color; + visible = classification[i].visible; + } else if (classification[i % 32]) { + color = classification[i % 32].color; + visible = classification[i % 32].visible; + } else if(classification.DEFAULT) { + color = classification.DEFAULT.color; + visible = classification.DEFAULT.visible; + }else { + color = black; + } + + const r = parseInt(255 * color[0]); + const g = parseInt(255 * color[1]); + const b = parseInt(255 * color[2]); + const a = visible ? parseInt(255 * color[3]) : 0; + + + if(data[4 * i + 0] !== r){ + data[4 * i + 0] = r; + valuesChanged = true; + } + + if(data[4 * i + 1] !== g){ + data[4 * i + 1] = g; + valuesChanged = true; + } + + if(data[4 * i + 2] !== b){ + data[4 * i + 2] = b; + valuesChanged = true; + } + + if(data[4 * i + 3] !== a){ + data[4 * i + 3] = a; + valuesChanged = true; + } + } + + if(valuesChanged){ + this.classificationTexture.needsUpdate = true; + + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get spacing () { + return this.uniforms.spacing.value; + } + + set spacing (value) { + if (this.uniforms.spacing.value !== value) { + this.uniforms.spacing.value = value; + } + } + + get useClipBox () { + return this._useClipBox; + } + + set useClipBox (value) { + if (this._useClipBox !== value) { + this._useClipBox = value; + this.updateShaderSource(); + } + } + + get clipTask(){ + return this.uniforms.clipTask.value; + } + + set clipTask(mode){ + this.uniforms.clipTask.value = mode; + } + + get elevationGradientRepat(){ + return this.uniforms.elevationGradientRepat.value; + } + + set elevationGradientRepat(mode){ + this.uniforms.elevationGradientRepat.value = mode; + } + + get clipMethod(){ + return this.uniforms.clipMethod.value; + } + + set clipMethod(mode){ + this.uniforms.clipMethod.value = mode; + } + + get weighted(){ + return this._weighted; + } + + set weighted (value) { + if (this._weighted !== value) { + this._weighted = value; + this.updateShaderSource(); + } + } + + get fov () { + return this.uniforms.fov.value; + } + + set fov (value) { + if (this.uniforms.fov.value !== value) { + this.uniforms.fov.value = value; + // this.updateShaderSource(); + } + } + + get screenWidth () { + return this.uniforms.screenWidth.value; + } + + set screenWidth (value) { + if (this.uniforms.screenWidth.value !== value) { + this.uniforms.screenWidth.value = value; + // this.updateShaderSource(); + } + } + + get screenHeight () { + return this.uniforms.screenHeight.value; + } + + set screenHeight (value) { + if (this.uniforms.screenHeight.value !== value) { + this.uniforms.screenHeight.value = value; + // this.updateShaderSource(); + } + } + + get near () { + return this.uniforms.near.value; + } + + set near (value) { + if (this.uniforms.near.value !== value) { + this.uniforms.near.value = value; + } + } + + get far () { + return this.uniforms.far.value; + } + + set far (value) { + if (this.uniforms.far.value !== value) { + this.uniforms.far.value = value; + } + } + + get opacity(){ + return this.uniforms.uOpacity.value; + } + + set opacity (value) { + if (this.uniforms && this.uniforms.uOpacity) { + if (this.uniforms.uOpacity.value !== value) { + this.uniforms.uOpacity.value = value; + this.updateShaderSource(); + this.dispatchEvent({ + type: 'opacity_changed', + target: this + }); + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + } + + get activeAttributeName(){ + return this._activeAttributeName; + } + + set activeAttributeName(value){ + if (this._activeAttributeName !== value) { + this._activeAttributeName = value; + + this.updateShaderSource(); + this.dispatchEvent({ + type: 'active_attribute_changed', + target: this + }); + + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get pointSizeType () { + return this._pointSizeType; + } + + set pointSizeType (value) { + if (this._pointSizeType !== value) { + this._pointSizeType = value; + this.updateShaderSource(); + this.dispatchEvent({ + type: 'point_size_type_changed', + target: this + }); + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get useEDL(){ + return this._useEDL; + } + + set useEDL (value) { + if (this._useEDL !== value) { + this._useEDL = value; + this.updateShaderSource(); + } + } + + get color () { + return this.uniforms.uColor.value; + } + + set color (value) { + if (!this.uniforms.uColor.value.equals(value)) { + this.uniforms.uColor.value.copy(value); + + this.dispatchEvent({ + type: 'color_changed', + target: this + }); + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get shape () { + return this._shape; + } + + set shape (value) { + if (this._shape !== value) { + this._shape = value; + this.updateShaderSource(); + this.dispatchEvent({type: 'point_shape_changed', target: this}); + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get treeType () { + return this._treeType; + } + + set treeType (value) { + if (this._treeType !== value) { + this._treeType = value; + this.updateShaderSource(); + } + } + + get bbSize () { + return this.uniforms.bbSize.value; + } + + set bbSize (value) { + this.uniforms.bbSize.value = value; + } + + get size () { + return this.uniforms.size.value; + } + + set size (value) { + if (this.uniforms.size.value !== value) { + this.uniforms.size.value = value; + + this.dispatchEvent({ + type: 'point_size_changed', + target: this + }); + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get minSize(){ + return this.uniforms.minSize.value; + } + + set minSize(value){ + if (this.uniforms.minSize.value !== value) { + this.uniforms.minSize.value = value; + + this.dispatchEvent({ + type: 'point_size_changed', + target: this + }); + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get elevationRange () { + return this.uniforms.elevationRange.value; + } + + set elevationRange (value) { + let changed = this.uniforms.elevationRange.value[0] !== value[0] + || this.uniforms.elevationRange.value[1] !== value[1]; + + if(changed){ + this.uniforms.elevationRange.value = value; + + this._defaultElevationRangeChanged = true; + + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get heightMin () { + return this.uniforms.elevationRange.value[0]; + } + + set heightMin (value) { + this.elevationRange = [value, this.elevationRange[1]]; + } + + get heightMax () { + return this.uniforms.elevationRange.value[1]; + } + + set heightMax (value) { + this.elevationRange = [this.elevationRange[0], value]; + } + + get transition () { + return this.uniforms.transition.value; + } + + set transition (value) { + this.uniforms.transition.value = value; + } + + get intensityRange () { + return this.uniforms.intensityRange.value; + } + + set intensityRange (value) { + if (!(value instanceof Array && value.length === 2)) { + return; + } + + if (value[0] === this.uniforms.intensityRange.value[0] && + value[1] === this.uniforms.intensityRange.value[1]) { + return; + } + + this.uniforms.intensityRange.value = value; + + this._defaultIntensityRangeChanged = true; + + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + + get intensityGamma () { + return this.uniforms.intensity_gbc.value[0]; + } + + set intensityGamma (value) { + if (this.uniforms.intensity_gbc.value[0] !== value) { + this.uniforms.intensity_gbc.value[0] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get intensityContrast () { + return this.uniforms.intensity_gbc.value[2]; + } + + set intensityContrast (value) { + if (this.uniforms.intensity_gbc.value[2] !== value) { + this.uniforms.intensity_gbc.value[2] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get intensityBrightness () { + return this.uniforms.intensity_gbc.value[1]; + } + + set intensityBrightness (value) { + if (this.uniforms.intensity_gbc.value[1] !== value) { + this.uniforms.intensity_gbc.value[1] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get rgbGamma () { + return this.uniforms.uRGB_gbc.value[0]; + } + + set rgbGamma (value) { + if (this.uniforms.uRGB_gbc.value[0] !== value) { + this.uniforms.uRGB_gbc.value[0] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get rgbContrast () { + return this.uniforms.uRGB_gbc.value[2]; + } + + set rgbContrast (value) { + if (this.uniforms.uRGB_gbc.value[2] !== value) { + this.uniforms.uRGB_gbc.value[2] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get rgbBrightness () { + return this.uniforms.uRGB_gbc.value[1]; + } + + set rgbBrightness (value) { + if (this.uniforms.uRGB_gbc.value[1] !== value) { + this.uniforms.uRGB_gbc.value[1] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + + get extraGamma () { + return this.uniforms.uExtraGammaBrightContr.value[0]; + } + + set extraGamma (value) { + if (this.uniforms.uExtraGammaBrightContr.value[0] !== value) { + this.uniforms.uExtraGammaBrightContr.value[0] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get extraBrightness () { + return this.uniforms.uExtraGammaBrightContr.value[1]; + } + + set extraBrightness (value) { + if (this.uniforms.uExtraGammaBrightContr.value[1] !== value) { + this.uniforms.uExtraGammaBrightContr.value[1] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get extraContrast () { + return this.uniforms.uExtraGammaBrightContr.value[2]; + } + + set extraContrast (value) { + if (this.uniforms.uExtraGammaBrightContr.value[2] !== value) { + this.uniforms.uExtraGammaBrightContr.value[2] = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + getRange(attributeName){ + return this.ranges.get(attributeName); + } + + setRange(attributeName, newRange){ + + let rangeChanged = false; + + let oldRange = this.ranges.get(attributeName); + + if(oldRange != null && newRange != null){ + rangeChanged = oldRange[0] !== newRange[0] || oldRange[1] !== newRange[1]; + }else { + rangeChanged = true; + } + + this.ranges.set(attributeName, newRange); + + if(rangeChanged){ + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get extraRange () { + return this.uniforms.uExtraRange.value; + } + + set extraRange (value) { + if (!(value instanceof Array && value.length === 2)) { + return; + } + + if (value[0] === this.uniforms.uExtraRange.value[0] && + value[1] === this.uniforms.uExtraRange.value[1]) { + return; + } + + this.uniforms.uExtraRange.value = value; + + this._defaultExtraRangeChanged = true; + + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + + get weightRGB () { + return this.uniforms.wRGB.value; + } + + set weightRGB (value) { + if(this.uniforms.wRGB.value !== value){ + this.uniforms.wRGB.value = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get weightIntensity () { + return this.uniforms.wIntensity.value; + } + + set weightIntensity (value) { + if(this.uniforms.wIntensity.value !== value){ + this.uniforms.wIntensity.value = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get weightElevation () { + return this.uniforms.wElevation.value; + } + + set weightElevation (value) { + if(this.uniforms.wElevation.value !== value){ + this.uniforms.wElevation.value = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get weightClassification () { + return this.uniforms.wClassification.value; + } + + set weightClassification (value) { + if(this.uniforms.wClassification.value !== value){ + this.uniforms.wClassification.value = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get weightReturnNumber () { + return this.uniforms.wReturnNumber.value; + } + + set weightReturnNumber (value) { + if(this.uniforms.wReturnNumber.value !== value){ + this.uniforms.wReturnNumber.value = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + get weightSourceID () { + return this.uniforms.wSourceID.value; + } + + set weightSourceID (value) { + if(this.uniforms.wSourceID.value !== value){ + this.uniforms.wSourceID.value = value; + this.dispatchEvent({ + type: 'material_property_changed', + target: this + }); + } + } + + static generateGradientTexture (gradient) { + let size = 64; + + // create canvas + let canvas = document.createElement('canvas'); + canvas.width = size; + canvas.height = size; + + // get context + let context = canvas.getContext('2d'); + + // draw gradient + context.rect(0, 0, size, size); + let ctxGradient = context.createLinearGradient(0, 0, size, size); + + for (let i = 0; i < gradient.length; i++) { + let step = gradient[i]; + + ctxGradient.addColorStop(step[0], '#' + step[1].getHexString()); + } + + context.fillStyle = ctxGradient; + context.fill(); + + //let texture = new THREE.Texture(canvas); + let texture = new CanvasTexture(canvas); + texture.needsUpdate = true; + + texture.minFilter = LinearFilter; + texture.wrap = RepeatWrapping; + texture.repeat = 2; + // textureImage = texture.image; + + return texture; + } + + static generateMatcapTexture (matcap) { + var url = new URL(Potree.resourcePath + "/textures/matcap/" + matcap).href; + let texture = new TextureLoader().load( url ); + texture.magFilter = texture.minFilter = LinearFilter; + texture.needsUpdate = true; + // 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 + // Switch matcap texture on the fly : viewer.scene.pointclouds[0].material.matcap = 'matcap1.jpg'; + // 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 + return texture; + } + + disableEvents(){ + if(this._hiddenListeners === undefined){ + this._hiddenListeners = this._listeners; + this._listeners = {}; + } + }; + + enableEvents(){ + this._listeners = this._hiddenListeners; + this._hiddenListeners = undefined; + }; + + // copyFrom(from){ + + // var a = 10; + + // for(let name of Object.keys(this.uniforms)){ + // this.uniforms[name].value = from.uniforms[name].value; + // } + // } + + // copy(from){ + // this.copyFrom(from); + // } + + } + + class PointCloudOctreeNode extends PointCloudTreeNode { + constructor () { + super(); + + //this.children = {}; + this.children = []; + this.sceneNode = null; + this.octree = null; + } + + getNumPoints () { + return this.geometryNode.numPoints; + } + + isLoaded () { + return true; + } + + isTreeNode () { + return true; + } + + isGeometryNode () { + return false; + } + + getLevel () { + return this.geometryNode.level; + } + + getBoundingSphere () { + return this.geometryNode.boundingSphere; + } + + getBoundingBox () { + return this.geometryNode.boundingBox; + } + + getChildren () { + let children = []; + + for (let i = 0; i < 8; i++) { + if (this.children[i]) { + children.push(this.children[i]); + } + } + + return children; + } + + getPointsInBox(boxNode){ + + if(!this.sceneNode){ + return null; + } + + let buffer = this.geometryNode.buffer; + + let posOffset = buffer.offset("position"); + let stride = buffer.stride; + let view = new DataView(buffer.data); + + let worldToBox = boxNode.matrixWorld.clone().invert(); + let objectToBox = new Matrix4().multiplyMatrices(worldToBox, this.sceneNode.matrixWorld); + + let inBox = []; + + let pos = new Vector4(); + for(let i = 0; i < buffer.numElements; i++){ + let x = view.getFloat32(i * stride + posOffset + 0, true); + let y = view.getFloat32(i * stride + posOffset + 4, true); + let z = view.getFloat32(i * stride + posOffset + 8, true); + + pos.set(x, y, z, 1); + pos.applyMatrix4(objectToBox); + + if(-0.5 < pos.x && pos.x < 0.5){ + if(-0.5 < pos.y && pos.y < 0.5){ + if(-0.5 < pos.z && pos.z < 0.5){ + pos.set(x, y, z, 1).applyMatrix4(this.sceneNode.matrixWorld); + inBox.push(new Vector3(pos.x, pos.y, pos.z)); + } + } + } + } + + return inBox; + } + + get name () { + return this.geometryNode.name; + } + }; + + class PointCloudOctree extends PointCloudTree { + constructor (geometry, material) { + super(); + + this.pointBudget = Infinity; + this.pcoGeometry = geometry; + this.boundingBox = this.pcoGeometry.boundingBox; + this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); + this.material = material || new PointCloudMaterial$1(); + this.visiblePointsTarget = 2 * 1000 * 1000; + this.minimumNodePixelSize = 150; + this.level = 0; + this.position.copy(geometry.offset); + this.updateMatrix(); + + { + + let priorityQueue = ["rgba", "rgb", "intensity", "classification"]; + let selected = "rgba"; + + for(let attributeName of priorityQueue){ + let attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === attributeName); + + if(!attribute){ + continue; + } + + let min = attribute.range[0].constructor.name === "Array" ? attribute.range[0] : [attribute.range[0]]; + let max = attribute.range[1].constructor.name === "Array" ? attribute.range[1] : [attribute.range[1]]; + + let range_min = new Vector3(...min); + let range_max = new Vector3(...max); + let range = range_min.distanceTo(range_max); + + if(range === 0){ + continue; + } + + selected = attributeName; + break; + } + + this.material.activeAttributeName = selected; + } + + this.showBoundingBox = false; + this.boundingBoxNodes = []; + this.loadQueue = []; + this.visibleBounds = new Box3(); + this.visibleNodes = []; + this.visibleGeometry = []; + this.generateDEM = false; + this.profileRequests = []; + this.name = ''; + this._visible = true; + + { + let box = [this.pcoGeometry.tightBoundingBox, this.getBoundingBoxWorld()] + .find(v => v !== undefined); + + this.updateMatrixWorld(true); + box = Utils.computeTransformedBoundingBox(box, this.matrixWorld); + + let bMin = box.min.z; + let bMax = box.max.z; + this.material.heightMin = bMin; + this.material.heightMax = bMax; + } + + // TODO read projection from file instead + this.projection = geometry.projection; + this.fallbackProjection = geometry.fallbackProjection; + + this.root = this.pcoGeometry.root; + } + + setName (name) { + if (this.name !== name) { + this.name = name; + this.dispatchEvent({type: 'name_changed', name: name, pointcloud: this}); + } + } + + getName () { + return this.name; + } + + getAttribute(name){ + + const attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === name); + + if(attribute){ + return attribute; + }else { + return null; + } + } + + getAttributes(){ + return this.pcoGeometry.pointAttributes; + } + + toTreeNode (geometryNode, parent) { + let node = new PointCloudOctreeNode(); + + // if(geometryNode.name === "r40206"){ + // console.log("creating node for r40206"); + // } + let sceneNode = new Points(geometryNode.geometry, this.material); + sceneNode.name = geometryNode.name; + sceneNode.position.copy(geometryNode.boundingBox.min); + sceneNode.frustumCulled = false; + sceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => { + if (material.program) { + _this.getContext().useProgram(material.program.program); + + if (material.program.getUniforms().map.level) { + let level = geometryNode.getLevel(); + material.uniforms.level.value = level; + material.program.getUniforms().map.level.setValue(_this.getContext(), level); + } + + if (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) { + let vnStart = this.visibleNodeTextureOffsets.get(node); + material.uniforms.vnStart.value = vnStart; + material.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart); + } + + if (material.program.getUniforms().map.pcIndex) { + let i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node); + material.uniforms.pcIndex.value = i; + material.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i); + } + } + }; + + // { // DEBUG + // let sg = new THREE.SphereGeometry(1, 16, 16); + // let sm = new THREE.MeshNormalMaterial(); + // let s = new THREE.Mesh(sg, sm); + // s.scale.set(5, 5, 5); + // s.position.copy(geometryNode.mean) + // .add(this.position) + // .add(geometryNode.boundingBox.min); + // + // viewer.scene.scene.add(s); + // } + + node.geometryNode = geometryNode; + node.sceneNode = sceneNode; + node.pointcloud = this; + node.children = []; + //for (let key in geometryNode.children) { + // node.children[key] = geometryNode.children[key]; + //} + for(let i = 0; i < 8; i++){ + node.children[i] = geometryNode.children[i]; + } + + if (!parent) { + this.root = node; + this.add(sceneNode); + } else { + let childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]); + parent.sceneNode.add(sceneNode); + parent.children[childIndex] = node; + } + + let disposeListener = function () { + let childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]); + parent.sceneNode.remove(node.sceneNode); + parent.children[childIndex] = geometryNode; + }; + geometryNode.oneTimeDisposeHandlers.push(disposeListener); + + return node; + } + + updateVisibleBounds () { + let leafNodes = []; + for (let i = 0; i < this.visibleNodes.length; i++) { + let node = this.visibleNodes[i]; + let isLeaf = true; + + for (let j = 0; j < node.children.length; j++) { + let child = node.children[j]; + if (child instanceof PointCloudOctreeNode) { + isLeaf = isLeaf && !child.sceneNode.visible; + } else if (child instanceof PointCloudOctreeGeometryNode) { + isLeaf = true; + } + } + + if (isLeaf) { + leafNodes.push(node); + } + } + + this.visibleBounds.min = new Vector3(Infinity, Infinity, Infinity); + this.visibleBounds.max = new Vector3(-Infinity, -Infinity, -Infinity); + for (let i = 0; i < leafNodes.length; i++) { + let node = leafNodes[i]; + + this.visibleBounds.expandByPoint(node.getBoundingBox().min); + this.visibleBounds.expandByPoint(node.getBoundingBox().max); + } + } + + updateMaterial (material, visibleNodes, camera, renderer) { + material.fov = camera.fov * (Math.PI / 180); + material.screenWidth = renderer.domElement.clientWidth; + material.screenHeight = renderer.domElement.clientHeight; + material.spacing = this.pcoGeometry.spacing; // * Math.max(this.scale.x, this.scale.y, this.scale.z); + material.near = camera.near; + material.far = camera.far; + material.uniforms.octreeSize.value = this.pcoGeometry.boundingBox.getSize(new Vector3()).x; + } + + computeVisibilityTextureData(nodes, camera){ + + if(Potree.measureTimings) performance.mark("computeVisibilityTextureData-start"); + + let data = new Uint8Array(nodes.length * 4); + let visibleNodeTextureOffsets = new Map(); + + // copy array + nodes = nodes.slice(); + + // sort by level and index, e.g. r, r0, r3, r4, r01, r07, r30, ... + let sort = function (a, b) { + let na = a.geometryNode.name; + let nb = b.geometryNode.name; + if (na.length !== nb.length) return na.length - nb.length; + if (na < nb) return -1; + if (na > nb) return 1; + return 0; + }; + nodes.sort(sort); + + let worldDir = new Vector3(); + + let nodeMap = new Map(); + let offsetsToChild = new Array(nodes.length).fill(Infinity); + + for(let i = 0; i < nodes.length; i++){ + let node = nodes[i]; + + nodeMap.set(node.name, node); + visibleNodeTextureOffsets.set(node, i); + + if(i > 0){ + let index = parseInt(node.name.slice(-1)); + let parentName = node.name.slice(0, -1); + let parent = nodeMap.get(parentName); + let parentOffset = visibleNodeTextureOffsets.get(parent); + + let parentOffsetToChild = (i - parentOffset); + + offsetsToChild[parentOffset] = Math.min(offsetsToChild[parentOffset], parentOffsetToChild); + + data[parentOffset * 4 + 0] = data[parentOffset * 4 + 0] | (1 << index); + data[parentOffset * 4 + 1] = (offsetsToChild[parentOffset] >> 8); + data[parentOffset * 4 + 2] = (offsetsToChild[parentOffset] % 256); + } + + let density = node.geometryNode.density; + + if(typeof density === "number" && !Number.isNaN(density)){ + let lodOffset = Math.log2(density) / 2 - 1.5; + + let offsetUint8 = (lodOffset + 10) * 10; + + data[i * 4 + 3] = offsetUint8; + }else { + data[i * 4 + 3] = 100; + } + + } + + if(Potree.measureTimings){ + performance.mark("computeVisibilityTextureData-end"); + performance.measure("render.computeVisibilityTextureData", "computeVisibilityTextureData-start", "computeVisibilityTextureData-end"); + } + + return { + data: data, + offsets: visibleNodeTextureOffsets + }; + } + + nodeIntersectsProfile (node, profile) { + let bbWorld = node.boundingBox.clone().applyMatrix4(this.matrixWorld); + let bsWorld = bbWorld.getBoundingSphere(new Sphere()); + + let intersects = false; + + for (let i = 0; i < profile.points.length - 1; i++) { + + let start = new Vector3(profile.points[i + 0].x, profile.points[i + 0].y, bsWorld.center.z); + let end = new Vector3(profile.points[i + 1].x, profile.points[i + 1].y, bsWorld.center.z); + + let closest = new Line3(start, end).closestPointToPoint(bsWorld.center, true, new Vector3()); + let distance = closest.distanceTo(bsWorld.center); + + intersects = intersects || (distance < (bsWorld.radius + profile.width)); + } + + //console.log(`${node.name}: ${intersects}`); + + return intersects; + } + + deepestNodeAt(position){ + + const toObjectSpace = this.matrixWorld.clone().invert(); + + const objPos = position.clone().applyMatrix4(toObjectSpace); + + let current = this.root; + while(true){ + + let containingChild = null; + + for(const child of current.children){ + + if(child !== undefined){ + if(child.getBoundingBox().containsPoint(objPos)){ + containingChild = child; + } + } + } + + if(containingChild !== null && containingChild instanceof PointCloudOctreeNode){ + current = containingChild; + }else { + break; + } + } + + const deepest = current; + + return deepest; + } + + nodesOnRay (nodes, ray) { + let nodesOnRay = []; + + let _ray = ray.clone(); + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i]; + let sphere = node.getBoundingSphere().clone().applyMatrix4(this.matrixWorld); + + if (_ray.intersectsSphere(sphere)) { + nodesOnRay.push(node); + } + } + + return nodesOnRay; + } + + updateMatrixWorld (force) { + if (this.matrixAutoUpdate === true) this.updateMatrix(); + + if (this.matrixWorldNeedsUpdate === true || force === true) { + if (!this.parent) { + this.matrixWorld.copy(this.matrix); + } else { + this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); + } + + this.matrixWorldNeedsUpdate = false; + + force = true; + } + } + + hideDescendants (object) { + let stack = []; + for (let i = 0; i < object.children.length; i++) { + let child = object.children[i]; + if (child.visible) { + stack.push(child); + } + } + + while (stack.length > 0) { + let object = stack.shift(); + + object.visible = false; + + for (let i = 0; i < object.children.length; i++) { + let child = object.children[i]; + if (child.visible) { + stack.push(child); + } + } + } + } + + moveToOrigin () { + this.position.set(0, 0, 0); + this.updateMatrixWorld(true); + let box = this.boundingBox; + let transform = this.matrixWorld; + let tBox = Utils.computeTransformedBoundingBox(box, transform); + this.position.set(0, 0, 0).sub(tBox.getCenter(new Vector3())); + }; + + moveToGroundPlane () { + this.updateMatrixWorld(true); + let box = this.boundingBox; + let transform = this.matrixWorld; + let tBox = Utils.computeTransformedBoundingBox(box, transform); + this.position.y += -tBox.min.y; + }; + + getBoundingBoxWorld () { + this.updateMatrixWorld(true); + let box = this.boundingBox; + let transform = this.matrixWorld; + let tBox = Utils.computeTransformedBoundingBox(box, transform); + + return tBox; + }; + + /** + * returns points inside the profile points + * + * maxDepth: search points up to the given octree depth + * + * + * The return value is an array with all segments of the profile path + * let segment = { + * start: THREE.Vector3, + * end: THREE.Vector3, + * points: {} + * project: function() + * }; + * + * The project() function inside each segment can be used to transform + * that segments point coordinates to line up along the x-axis. + * + * + */ + getPointsInProfile (profile, maxDepth, callback) { + if (callback) { + let request = new Potree.ProfileRequest(this, profile, maxDepth, callback); + this.profileRequests.push(request); + + return request; + } + + let points = { + segments: [], + boundingBox: new Box3(), + projectedBoundingBox: new Box2() + }; + + // evaluate segments + for (let i = 0; i < profile.points.length - 1; i++) { + let start = profile.points[i]; + let end = profile.points[i + 1]; + let ps = this.getProfile(start, end, profile.width, maxDepth); + + let segment = { + start: start, + end: end, + points: ps, + project: null + }; + + points.segments.push(segment); + + points.boundingBox.expandByPoint(ps.boundingBox.min); + points.boundingBox.expandByPoint(ps.boundingBox.max); + } + + // add projection functions to the segments + let mileage = new Vector3(); + for (let i = 0; i < points.segments.length; i++) { + let segment = points.segments[i]; + let start = segment.start; + let end = segment.end; + + let project = (function (_start, _end, _mileage, _boundingBox) { + let start = _start; + let end = _end; + let mileage = _mileage; + let boundingBox = _boundingBox; + + let xAxis = new Vector3(1, 0, 0); + let dir = new Vector3().subVectors(end, start); + dir.y = 0; + dir.normalize(); + let alpha = Math.acos(xAxis.dot(dir)); + if (dir.z > 0) { + alpha = -alpha; + } + + return function (position) { + let toOrigin = new Matrix4().makeTranslation(-start.x, -boundingBox.min.y, -start.z); + let alignWithX = new Matrix4().makeRotationY(-alpha); + let applyMileage = new Matrix4().makeTranslation(mileage.x, 0, 0); + + let pos = position.clone(); + pos.applyMatrix4(toOrigin); + pos.applyMatrix4(alignWithX); + pos.applyMatrix4(applyMileage); + + return pos; + }; + }(start, end, mileage.clone(), points.boundingBox.clone())); + + segment.project = project; + + mileage.x += new Vector3(start.x, 0, start.z).distanceTo(new Vector3(end.x, 0, end.z)); + mileage.y += end.y - start.y; + } + + points.projectedBoundingBox.min.x = 0; + points.projectedBoundingBox.min.y = points.boundingBox.min.y; + points.projectedBoundingBox.max.x = mileage.x; + points.projectedBoundingBox.max.y = points.boundingBox.max.y; + + return points; + } + + /** + * returns points inside the given profile bounds. + * + * start: + * end: + * width: + * depth: search points up to the given octree depth + * callback: if specified, points are loaded before searching + * + * + */ + getProfile (start, end, width, depth, callback) { + let request = new Potree.ProfileRequest(start, end, width, depth, callback); + this.profileRequests.push(request); + }; + + getVisibleExtent () { + return this.visibleBounds.applyMatrix4(this.matrixWorld); + }; + + intersectsPoint(position){ + + let rootAvailable = this.pcoGeometry.root && this.pcoGeometry.root.geometry; + + if(!rootAvailable){ + return false; + } + + if(typeof this.signedDistanceField === "undefined"){ + + const resolution = 32; + const field = new Float32Array(resolution ** 3).fill(Infinity); + + const positions = this.pcoGeometry.root.geometry.attributes.position; + const boundingBox = this.boundingBox; + + const n = positions.count; + + for(let i = 0; i < n; i = i + 3){ + const x = positions.array[3 * i + 0]; + const y = positions.array[3 * i + 1]; + const z = positions.array[3 * i + 2]; + + const ix = parseInt(Math.min(resolution * (x / boundingBox.max.x), resolution - 1)); + const iy = parseInt(Math.min(resolution * (y / boundingBox.max.y), resolution - 1)); + const iz = parseInt(Math.min(resolution * (z / boundingBox.max.z), resolution - 1)); + + const index = ix + iy * resolution + iz * resolution * resolution; + + field[index] = 0; + } + + const sdf = { + resolution: resolution, + field: field, + }; + + this.signedDistanceField = sdf; + } + + + { + const sdf = this.signedDistanceField; + const boundingBox = this.boundingBox; + + const toObjectSpace = this.matrixWorld.clone().invert(); + + const objPos = position.clone().applyMatrix4(toObjectSpace); + + const resolution = sdf.resolution; + const ix = parseInt(resolution * (objPos.x / boundingBox.max.x)); + const iy = parseInt(resolution * (objPos.y / boundingBox.max.y)); + const iz = parseInt(resolution * (objPos.z / boundingBox.max.z)); + + if(ix < 0 || iy < 0 || iz < 0){ + return false; + } + if(ix >= resolution || iy >= resolution || iz >= resolution){ + return false; + } + + const index = ix + iy * resolution + iz * resolution * resolution; + + const value = sdf.field[index]; + + if(value === 0){ + return true; + } + + } + + return false; + + } + + /** + * + * + * + * params.pickWindowSize: Look for points inside a pixel window of this size. + * Use odd values: 1, 3, 5, ... + * + * + * TODO: only draw pixels that are actually read with readPixels(). + * + */ + pick(viewer, camera, ray, params = {}){ + + let renderer = viewer.renderer; + let pRenderer = viewer.pRenderer; + + performance.mark("pick-start"); + + let getVal = (a, b) => a !== undefined ? a : b; + + let pickWindowSize = getVal(params.pickWindowSize, 65); + let pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false); + + let size = renderer.getSize(new Vector2()); + + let width = Math.ceil(getVal(params.width, size.width)); + let height = Math.ceil(getVal(params.height, size.height)); + + let pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType); + let pointSize = getVal(params.pointSize, this.material.size); + + let nodes = this.nodesOnRay(this.visibleNodes, ray); + + if (nodes.length === 0) { + return null; + } + + if (!this.pickState) { + let scene = new Scene(); + + let material = new Potree.PointCloudMaterial(); + material.activeAttributeName = "indices"; + + let renderTarget = new WebGLRenderTarget( + 1, 1, + { minFilter: LinearFilter, + magFilter: NearestFilter, + format: RGBAFormat } + ); + + this.pickState = { + renderTarget: renderTarget, + material: material, + scene: scene + }; + }; + + let pickState = this.pickState; + let pickMaterial = pickState.material; + + { // update pick material + pickMaterial.pointSizeType = pointSizeType; + //pickMaterial.shape = this.material.shape; + pickMaterial.shape = Potree.PointShape.PARABOLOID; + + pickMaterial.uniforms.uFilterReturnNumberRange.value = this.material.uniforms.uFilterReturnNumberRange.value; + pickMaterial.uniforms.uFilterNumberOfReturnsRange.value = this.material.uniforms.uFilterNumberOfReturnsRange.value; + pickMaterial.uniforms.uFilterGPSTimeClipRange.value = this.material.uniforms.uFilterGPSTimeClipRange.value; + pickMaterial.uniforms.uFilterPointSourceIDClipRange.value = this.material.uniforms.uFilterPointSourceIDClipRange.value; + + pickMaterial.activeAttributeName = "indices"; + + pickMaterial.size = pointSize; + pickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value; + pickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value; + pickMaterial.classification = this.material.classification; + pickMaterial.recomputeClassification(); + + if(params.pickClipped){ + pickMaterial.clipBoxes = this.material.clipBoxes; + pickMaterial.uniforms.clipBoxes = this.material.uniforms.clipBoxes; + if(this.material.clipTask === Potree.ClipTask.HIGHLIGHT){ + pickMaterial.clipTask = Potree.ClipTask.NONE; + }else { + pickMaterial.clipTask = this.material.clipTask; + } + pickMaterial.clipMethod = this.material.clipMethod; + }else { + pickMaterial.clipBoxes = []; + } + + this.updateMaterial(pickMaterial, nodes, camera, renderer); + } + + pickState.renderTarget.setSize(width, height); + + let pixelPos = new Vector2(params.x, params.y); + + let gl = renderer.getContext(); + gl.enable(gl.SCISSOR_TEST); + gl.scissor( + parseInt(pixelPos.x - (pickWindowSize - 1) / 2), + parseInt(pixelPos.y - (pickWindowSize - 1) / 2), + parseInt(pickWindowSize), parseInt(pickWindowSize)); + + + renderer.state.buffers.depth.setTest(pickMaterial.depthTest); + renderer.state.buffers.depth.setMask(pickMaterial.depthWrite); + renderer.state.setBlending(NoBlending); + + { // RENDER + renderer.setRenderTarget(pickState.renderTarget); + gl.clearColor(0, 0, 0, 0); + renderer.clear(true, true, true); + + let tmp = this.material; + this.material = pickMaterial; + + pRenderer.renderOctree(this, nodes, camera, pickState.renderTarget); + + this.material = tmp; + } + + let clamp = (number, min, max) => Math.min(Math.max(min, number), max); + + let x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width)); + let y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height)); + let w = parseInt(Math.min(x + pickWindowSize, width) - x); + let h = parseInt(Math.min(y + pickWindowSize, height) - y); + + let pixelCount = w * h; + let buffer = new Uint8Array(4 * pixelCount); + + gl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer); + + renderer.setRenderTarget(null); + renderer.state.reset(); + renderer.setScissorTest(false); + gl.disable(gl.SCISSOR_TEST); + + let pixels = buffer; + let ibuffer = new Uint32Array(buffer.buffer); + + // find closest hit inside pixelWindow boundaries + let min = Number.MAX_VALUE; + let hits = []; + for (let u = 0; u < pickWindowSize; u++) { + for (let v = 0; v < pickWindowSize; v++) { + let offset = (u + v * pickWindowSize); + let distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2); + + let pcIndex = pixels[4 * offset + 3]; + pixels[4 * offset + 3] = 0; + let pIndex = ibuffer[offset]; + + if(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){ + let hit = { + pIndex: pIndex, + pcIndex: pcIndex, + distanceToCenter: distance + }; + + if(params.all){ + hits.push(hit); + }else { + if(hits.length > 0){ + if(distance < hits[0].distanceToCenter){ + hits[0] = hit; + } + }else { + hits.push(hit); + } + } + + + } + } + } + + + // { // DEBUG: show panel with pick image + // let img = Utils.pixelsArrayToImage(buffer, w, h); + // let screenshot = img.src; + + // if(!this.debugDIV){ + // this.debugDIV = $(` + //
        `); + // $(document.body).append(this.debugDIV); + // } + + // this.debugDIV.empty(); + // this.debugDIV.append($(``)); + // //$(this.debugWindow.document).append($(``)); + // //this.debugWindow.document.write(''); + // } + + + for(let hit of hits){ + let point = {}; + + if (!nodes[hit.pcIndex]) { + return null; + } + + let node = nodes[hit.pcIndex]; + let pc = node.sceneNode; + let geometry = node.geometryNode.geometry; + + for(let attributeName in geometry.attributes){ + let attribute = geometry.attributes[attributeName]; + + if (attributeName === 'position') { + let x = attribute.array[3 * hit.pIndex + 0]; + let y = attribute.array[3 * hit.pIndex + 1]; + let z = attribute.array[3 * hit.pIndex + 2]; + + let position = new Vector3(x, y, z); + position.applyMatrix4(pc.matrixWorld); + + point[attributeName] = position; + } else if (attributeName === 'indices') { + + } else { + + let values = attribute.array.slice(attribute.itemSize * hit.pIndex, attribute.itemSize * (hit.pIndex + 1)) ; + + if(attribute.potree){ + const {scale, offset} = attribute.potree; + values = values.map(v => v / scale + offset); + } + + point[attributeName] = values; + + //debugger; + //if (values.itemSize === 1) { + // point[attribute.name] = values.array[hit.pIndex]; + //} else { + // let value = []; + // for (let j = 0; j < values.itemSize; j++) { + // value.push(values.array[values.itemSize * hit.pIndex + j]); + // } + // point[attribute.name] = value; + //} + } + + } + + hit.point = point; + } + + performance.mark("pick-end"); + performance.measure("pick", "pick-start", "pick-end"); + + if(params.all){ + return hits.map(hit => hit.point); + }else { + if(hits.length === 0){ + return null; + }else { + return hits[0].point; + //let sorted = hits.sort( (a, b) => a.distanceToCenter - b.distanceToCenter); + + //return sorted[0].point; + } + } + + }; + + * getFittedBoxGen(boxNode){ + let start = performance.now(); + + let shrinkedLocalBounds = new Box3(); + let worldToBox = boxNode.matrixWorld.clone().invert(); + + for(let node of this.visibleNodes){ + if(!node.sceneNode){ + continue; + } + + let buffer = node.geometryNode.buffer; + + let posOffset = buffer.offset("position"); + let stride = buffer.stride; + let view = new DataView(buffer.data); + + let objectToBox = new Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld); + + let pos = new Vector4(); + for(let i = 0; i < buffer.numElements; i++){ + let x = view.getFloat32(i * stride + posOffset + 0, true); + let y = view.getFloat32(i * stride + posOffset + 4, true); + let z = view.getFloat32(i * stride + posOffset + 8, true); + + pos.set(x, y, z, 1); + pos.applyMatrix4(objectToBox); + + if(-0.5 < pos.x && pos.x < 0.5){ + if(-0.5 < pos.y && pos.y < 0.5){ + if(-0.5 < pos.z && pos.z < 0.5){ + shrinkedLocalBounds.expandByPoint(pos); + } + } + } + } + + yield; + } + + let fittedPosition = shrinkedLocalBounds.getCenter(new Vector3()).applyMatrix4(boxNode.matrixWorld); + + let fitted = new Object3D(); + fitted.position.copy(fittedPosition); + fitted.scale.copy(boxNode.scale); + fitted.rotation.copy(boxNode.rotation); + + let ds = new Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min); + fitted.scale.multiply(ds); + + let duration = performance.now() - start; + console.log("duration: ", duration); + + yield fitted; + } + + getFittedBox(boxNode, maxLevel = Infinity){ + + maxLevel = Infinity; + + let start = performance.now(); + + let shrinkedLocalBounds = new Box3(); + let worldToBox = boxNode.matrixWorld.clone().invert(); + + for(let node of this.visibleNodes){ + if(!node.sceneNode || node.getLevel() > maxLevel){ + continue; + } + + let buffer = node.geometryNode.buffer; + + let posOffset = buffer.offset("position"); + let stride = buffer.stride; + let view = new DataView(buffer.data); + + let objectToBox = new Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld); + + let pos = new Vector4(); + for(let i = 0; i < buffer.numElements; i++){ + let x = view.getFloat32(i * stride + posOffset + 0, true); + let y = view.getFloat32(i * stride + posOffset + 4, true); + let z = view.getFloat32(i * stride + posOffset + 8, true); + + pos.set(x, y, z, 1); + pos.applyMatrix4(objectToBox); + + if(-0.5 < pos.x && pos.x < 0.5){ + if(-0.5 < pos.y && pos.y < 0.5){ + if(-0.5 < pos.z && pos.z < 0.5){ + shrinkedLocalBounds.expandByPoint(pos); + } + } + } + } + } + + let fittedPosition = shrinkedLocalBounds.getCenter(new Vector3()).applyMatrix4(boxNode.matrixWorld); + + let fitted = new Object3D(); + fitted.position.copy(fittedPosition); + fitted.scale.copy(boxNode.scale); + fitted.rotation.copy(boxNode.rotation); + + let ds = new Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min); + fitted.scale.multiply(ds); + + let duration = performance.now() - start; + console.log("duration: ", duration); + + return fitted; + } + + get progress () { + return this.visibleNodes.length / this.visibleGeometry.length; + } + + find(name){ + let node = null; + for(let char of name){ + if(char === "r"){ + node = this.root; + }else { + node = node.children[char]; + } + } + + return node; + } + + get visible(){ + return this._visible; + } + + set visible(value){ + + if(value !== this._visible){ + this._visible = value; + + this.dispatchEvent({type: 'visibility_changed', pointcloud: this}); + } + + } + + } + + class Points$1 { + + constructor () { + this.boundingBox = new Box3(); + this.numPoints = 0; + this.data = {}; + } + + add (points) { + let currentSize = this.numPoints; + let additionalSize = points.numPoints; + let newSize = currentSize + additionalSize; + + let thisAttributes = Object.keys(this.data); + let otherAttributes = Object.keys(points.data); + let attributes = new Set([...thisAttributes, ...otherAttributes]); + + for (let attribute of attributes) { + if (thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) { + // attribute in both, merge + let Type = this.data[attribute].constructor; + let merged = new Type(this.data[attribute].length + points.data[attribute].length); + merged.set(this.data[attribute], 0); + merged.set(points.data[attribute], this.data[attribute].length); + this.data[attribute] = merged; + } else if (thisAttributes.includes(attribute) && !otherAttributes.includes(attribute)) { + // attribute only in this; take over this and expand to new size + let elementsPerPoint = this.data[attribute].length / this.numPoints; + let Type = this.data[attribute].constructor; + let expanded = new Type(elementsPerPoint * newSize); + expanded.set(this.data[attribute], 0); + this.data[attribute] = expanded; + } else if (!thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) { + // attribute only in points to be added; take over new points and expand to new size + let elementsPerPoint = points.data[attribute].length / points.numPoints; + let Type = points.data[attribute].constructor; + let expanded = new Type(elementsPerPoint * newSize); + expanded.set(points.data[attribute], elementsPerPoint * currentSize); + this.data[attribute] = expanded; + } + } + + this.numPoints = newSize; + + this.boundingBox.union(points.boundingBox); + } + } + + /** + * + * code adapted from three.js BoxHelper.js + * https://github.com/mrdoob/three.js/blob/dev/src/helpers/BoxHelper.js + * + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / http://github.com/Mugen87 + * @author mschuetz / http://potree.org + */ + + class Box3Helper$1 extends LineSegments { + constructor (box, color) { + if (color === undefined) color = 0xffff00; + + let 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 ]); + let positions = new Float32Array([ + box.min.x, box.min.y, box.min.z, + box.max.x, box.min.y, box.min.z, + box.max.x, box.min.y, box.max.z, + box.min.x, box.min.y, box.max.z, + box.min.x, box.max.y, box.min.z, + box.max.x, box.max.y, box.min.z, + box.max.x, box.max.y, box.max.z, + box.min.x, box.max.y, box.max.z + ]); + + let geometry = new BufferGeometry(); + geometry.setIndex(new BufferAttribute(indices, 1)); + geometry.setAttribute('position', new BufferAttribute(positions, 3)); + + let material = new LineBasicMaterial({ color: color }); + + super(geometry, material); + } + } + + function updatePointClouds(pointclouds, camera, renderer){ + + for (let pointcloud of pointclouds) { + let start = performance.now(); + + for (let profileRequest of pointcloud.profileRequests) { + profileRequest.update(); + + let duration = performance.now() - start; + if(duration > 5){ + break; + } + } + + let duration = performance.now() - start; + } + + let result = updateVisibility(pointclouds, camera, renderer); + + for (let pointcloud of pointclouds) { + pointcloud.updateMaterial(pointcloud.material, pointcloud.visibleNodes, camera, renderer); + pointcloud.updateVisibleBounds(); + } + + exports.lru.freeMemory(); + + return result; + }; + + + + function updateVisibilityStructures(pointclouds, camera, renderer) { + let frustums = []; + let camObjPositions = []; + let priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; }); + + for (let i = 0; i < pointclouds.length; i++) { + let pointcloud = pointclouds[i]; + + if (!pointcloud.initialized()) { + continue; + } + + pointcloud.numVisibleNodes = 0; + pointcloud.numVisiblePoints = 0; + pointcloud.deepestVisibleLevel = 0; + pointcloud.visibleNodes = []; + pointcloud.visibleGeometry = []; + + // frustum in object space + camera.updateMatrixWorld(); + let frustum = new Frustum(); + let viewI = camera.matrixWorldInverse; + let world = pointcloud.matrixWorld; + + // use close near plane for frustum intersection + let frustumCam = camera.clone(); + frustumCam.near = Math.min(camera.near, 0.1); + frustumCam.updateProjectionMatrix(); + let proj = camera.projectionMatrix; + + let fm = new Matrix4().multiply(proj).multiply(viewI).multiply(world); + frustum.setFromProjectionMatrix(fm); + frustums.push(frustum); + + // camera position in object space + let view = camera.matrixWorld; + let worldI = world.clone().invert(); + let camMatrixObject = new Matrix4().multiply(worldI).multiply(view); + let camObjPos = new Vector3().setFromMatrixPosition(camMatrixObject); + camObjPositions.push(camObjPos); + + if (pointcloud.visible && pointcloud.root !== null) { + priorityQueue.push({pointcloud: i, node: pointcloud.root, weight: Number.MAX_VALUE}); + } + + // hide all previously visible nodes + // if(pointcloud.root instanceof PointCloudOctreeNode){ + // pointcloud.hideDescendants(pointcloud.root.sceneNode); + // } + if (pointcloud.root.isTreeNode()) { + pointcloud.hideDescendants(pointcloud.root.sceneNode); + } + + for (let j = 0; j < pointcloud.boundingBoxNodes.length; j++) { + pointcloud.boundingBoxNodes[j].visible = false; + } + } + + return { + 'frustums': frustums, + 'camObjPositions': camObjPositions, + 'priorityQueue': priorityQueue + }; + }; + + + function updateVisibility(pointclouds, camera, renderer){ + + let numVisibleNodes = 0; + let numVisiblePoints = 0; + + let numVisiblePointsInPointclouds = new Map(pointclouds.map(pc => [pc, 0])); + + let visibleNodes = []; + let visibleGeometry = []; + let unloadedGeometry = []; + + let lowestSpacing = Infinity; + + // calculate object space frustum and cam pos and setup priority queue + let s = updateVisibilityStructures(pointclouds, camera, renderer); + let frustums = s.frustums; + let camObjPositions = s.camObjPositions; + let priorityQueue = s.priorityQueue; + + let loadedToGPUThisFrame = 0; + + let domWidth = renderer.domElement.clientWidth; + let domHeight = renderer.domElement.clientHeight; + + // check if pointcloud has been transformed + // some code will only be executed if changes have been detected + if(!Potree._pointcloudTransformVersion){ + Potree._pointcloudTransformVersion = new Map(); + } + let pointcloudTransformVersion = Potree._pointcloudTransformVersion; + for(let pointcloud of pointclouds){ + + if(!pointcloud.visible){ + continue; + } + + pointcloud.updateMatrixWorld(); + + if(!pointcloudTransformVersion.has(pointcloud)){ + pointcloudTransformVersion.set(pointcloud, {number: 0, transform: pointcloud.matrixWorld.clone()}); + }else { + let version = pointcloudTransformVersion.get(pointcloud); + + if(!version.transform.equals(pointcloud.matrixWorld)){ + version.number++; + version.transform.copy(pointcloud.matrixWorld); + + pointcloud.dispatchEvent({ + type: "transformation_changed", + target: pointcloud + }); + } + } + } + + while (priorityQueue.size() > 0) { + let element = priorityQueue.pop(); + let node = element.node; + let parent = element.parent; + let pointcloud = pointclouds[element.pointcloud]; + + // { // restrict to certain nodes for debugging + // let allowedNodes = ["r", "r0", "r4"]; + // if(!allowedNodes.includes(node.name)){ + // continue; + // } + // } + + let box = node.getBoundingBox(); + let frustum = frustums[element.pointcloud]; + let camObjPos = camObjPositions[element.pointcloud]; + + let insideFrustum = frustum.intersectsBox(box); + let maxLevel = pointcloud.maxLevel || Infinity; + let level = node.getLevel(); + let visible = insideFrustum; + visible = visible && !(numVisiblePoints + node.getNumPoints() > Potree.pointBudget); + visible = visible && !(numVisiblePointsInPointclouds.get(pointcloud) + node.getNumPoints() > pointcloud.pointBudget); + visible = visible && level < maxLevel; + visible = visible || node.getLevel() <= 2; + + let clipBoxes = pointcloud.material.clipBoxes; + if(true && clipBoxes.length > 0){ + + //node.debug = false; + + let numIntersecting = 0; + let numIntersectionVolumes = 0; + + //if(node.name === "r60"){ + // var a = 10; + //} + + for(let clipBox of clipBoxes){ + + let pcWorldInverse = pointcloud.matrixWorld.clone().invert(); + let toPCObject = pcWorldInverse.multiply(clipBox.box.matrixWorld); + + let px = new Vector3(+0.5, 0, 0).applyMatrix4(pcWorldInverse); + let nx = new Vector3(-0.5, 0, 0).applyMatrix4(pcWorldInverse); + let py = new Vector3(0, +0.5, 0).applyMatrix4(pcWorldInverse); + let ny = new Vector3(0, -0.5, 0).applyMatrix4(pcWorldInverse); + let pz = new Vector3(0, 0, +0.5).applyMatrix4(pcWorldInverse); + let nz = new Vector3(0, 0, -0.5).applyMatrix4(pcWorldInverse); + + let pxN = new Vector3().subVectors(nx, px).normalize(); + let nxN = pxN.clone().multiplyScalar(-1); + let pyN = new Vector3().subVectors(ny, py).normalize(); + let nyN = pyN.clone().multiplyScalar(-1); + let pzN = new Vector3().subVectors(nz, pz).normalize(); + let nzN = pzN.clone().multiplyScalar(-1); + + let pxPlane = new Plane().setFromNormalAndCoplanarPoint(pxN, px); + let nxPlane = new Plane().setFromNormalAndCoplanarPoint(nxN, nx); + let pyPlane = new Plane().setFromNormalAndCoplanarPoint(pyN, py); + let nyPlane = new Plane().setFromNormalAndCoplanarPoint(nyN, ny); + let pzPlane = new Plane().setFromNormalAndCoplanarPoint(pzN, pz); + let nzPlane = new Plane().setFromNormalAndCoplanarPoint(nzN, nz); + + //if(window.debugdraw !== undefined && window.debugdraw === true && node.name === "r60"){ + + // Potree.utils.debugPlane(viewer.scene.scene, pxPlane, 1, 0xFF0000); + // Potree.utils.debugPlane(viewer.scene.scene, nxPlane, 1, 0x990000); + // Potree.utils.debugPlane(viewer.scene.scene, pyPlane, 1, 0x00FF00); + // Potree.utils.debugPlane(viewer.scene.scene, nyPlane, 1, 0x009900); + // Potree.utils.debugPlane(viewer.scene.scene, pzPlane, 1, 0x0000FF); + // Potree.utils.debugPlane(viewer.scene.scene, nzPlane, 1, 0x000099); + + // Potree.utils.debugBox(viewer.scene.scene, box, new THREE.Matrix4(), 0x00FF00); + // Potree.utils.debugBox(viewer.scene.scene, box, pointcloud.matrixWorld, 0xFF0000); + // Potree.utils.debugBox(viewer.scene.scene, clipBox.box.boundingBox, clipBox.box.matrixWorld, 0xFF0000); + + // window.debugdraw = false; + //} + + let frustum = new Frustum(pxPlane, nxPlane, pyPlane, nyPlane, pzPlane, nzPlane); + let intersects = frustum.intersectsBox(box); + + if(intersects){ + numIntersecting++; + } + numIntersectionVolumes++; + } + + let insideAny = numIntersecting > 0; + let insideAll = numIntersecting === numIntersectionVolumes; + + if(pointcloud.material.clipTask === ClipTask.SHOW_INSIDE){ + if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && insideAny){ + //node.debug = true + }else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && insideAll){ + //node.debug = true; + }else { + visible = false; + } + } else if(pointcloud.material.clipTask === ClipTask.SHOW_OUTSIDE){ + //if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && !insideAny){ + // //visible = true; + // let a = 10; + //}else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && !insideAll){ + // //visible = true; + // let a = 20; + //}else{ + // visible = false; + //} + } + + + } + + // visible = ["r", "r0", "r06", "r060"].includes(node.name); + // visible = ["r"].includes(node.name); + + if (node.spacing) { + lowestSpacing = Math.min(lowestSpacing, node.spacing); + } else if (node.geometryNode && node.geometryNode.spacing) { + lowestSpacing = Math.min(lowestSpacing, node.geometryNode.spacing); + } + + if (numVisiblePoints + node.getNumPoints() > Potree.pointBudget) { + break; + } + + if (!visible) { + continue; + } + + // TODO: not used, same as the declaration? + // numVisibleNodes++; + numVisiblePoints += node.getNumPoints(); + let numVisiblePointsInPointcloud = numVisiblePointsInPointclouds.get(pointcloud); + numVisiblePointsInPointclouds.set(pointcloud, numVisiblePointsInPointcloud + node.getNumPoints()); + + pointcloud.numVisibleNodes++; + pointcloud.numVisiblePoints += node.getNumPoints(); + + if (node.isGeometryNode() && (!parent || parent.isTreeNode())) { + if (node.isLoaded() && loadedToGPUThisFrame < 2) { + node = pointcloud.toTreeNode(node, parent); + loadedToGPUThisFrame++; + } else { + unloadedGeometry.push(node); + visibleGeometry.push(node); + } + } + + if (node.isTreeNode()) { + exports.lru.touch(node.geometryNode); + node.sceneNode.visible = true; + node.sceneNode.material = pointcloud.material; + + visibleNodes.push(node); + pointcloud.visibleNodes.push(node); + + if(node._transformVersion === undefined){ + node._transformVersion = -1; + } + let transformVersion = pointcloudTransformVersion.get(pointcloud); + if(node._transformVersion !== transformVersion.number){ + node.sceneNode.updateMatrix(); + node.sceneNode.matrixWorld.multiplyMatrices(pointcloud.matrixWorld, node.sceneNode.matrix); + node._transformVersion = transformVersion.number; + } + + if (pointcloud.showBoundingBox && !node.boundingBoxNode && node.getBoundingBox) { + let boxHelper = new Box3Helper$1(node.getBoundingBox()); + boxHelper.matrixAutoUpdate = false; + pointcloud.boundingBoxNodes.push(boxHelper); + node.boundingBoxNode = boxHelper; + node.boundingBoxNode.matrix.copy(pointcloud.matrixWorld); + } else if (pointcloud.showBoundingBox) { + node.boundingBoxNode.visible = true; + node.boundingBoxNode.matrix.copy(pointcloud.matrixWorld); + } else if (!pointcloud.showBoundingBox && node.boundingBoxNode) { + node.boundingBoxNode.visible = false; + } + + // if(node.boundingBoxNode !== undefined && exports.debug.allowedNodes !== undefined){ + // if(!exports.debug.allowedNodes.includes(node.name)){ + // node.boundingBoxNode.visible = false; + // } + // } + } + + // add child nodes to priorityQueue + let children = node.getChildren(); + for (let i = 0; i < children.length; i++) { + let child = children[i]; + + let weight = 0; + if(camera.isPerspectiveCamera){ + let sphere = child.getBoundingSphere(); + let center = sphere.center; + //let distance = sphere.center.distanceTo(camObjPos); + + let dx = camObjPos.x - center.x; + let dy = camObjPos.y - center.y; + let dz = camObjPos.z - center.z; + + let dd = dx * dx + dy * dy + dz * dz; + let distance = Math.sqrt(dd); + + + let radius = sphere.radius; + + let fov = (camera.fov * Math.PI) / 180; + let slope = Math.tan(fov / 2); + let projFactor = (0.5 * domHeight) / (slope * distance); + let screenPixelRadius = radius * projFactor; + + if(screenPixelRadius < pointcloud.minimumNodePixelSize){ + continue; + } + + weight = screenPixelRadius; + + if(distance - radius < 0){ + weight = Number.MAX_VALUE; + } + } else { + // TODO ortho visibility + let bb = child.getBoundingBox(); + let distance = child.getBoundingSphere().center.distanceTo(camObjPos); + let diagonal = bb.max.clone().sub(bb.min).length(); + //weight = diagonal / distance; + + weight = diagonal; + } + + priorityQueue.push({pointcloud: element.pointcloud, node: child, parent: node, weight: weight}); + } + }// end priority queue loop + + { // update DEM + let maxDEMLevel = 4; + let candidates = pointclouds + .filter(p => (p.generateDEM && p.dem instanceof Potree.DEM)); + for (let pointcloud of candidates) { + let updatingNodes = pointcloud.visibleNodes.filter(n => n.getLevel() <= maxDEMLevel); + pointcloud.dem.update(updatingNodes); + } + } + + for (let i = 0; i < Math.min(Potree.maxNodesLoading, unloadedGeometry.length); i++) { + unloadedGeometry[i].load(); + } + + return { + visibleNodes: visibleNodes, + numVisiblePoints: numVisiblePoints, + lowestSpacing: lowestSpacing + }; + }; + + class PointCloudArena4DNode extends PointCloudTreeNode { + constructor () { + super(); + + this.left = null; + this.right = null; + this.sceneNode = null; + this.kdtree = null; + } + + getNumPoints () { + return this.geometryNode.numPoints; + } + + isLoaded () { + return true; + } + + isTreeNode () { + return true; + } + + isGeometryNode () { + return false; + } + + getLevel () { + return this.geometryNode.level; + } + + getBoundingSphere () { + return this.geometryNode.boundingSphere; + } + + getBoundingBox () { + return this.geometryNode.boundingBox; + } + + toTreeNode (child) { + let geometryNode = null; + + if (this.left === child) { + geometryNode = this.left; + } else if (this.right === child) { + geometryNode = this.right; + } + + if (!geometryNode.loaded) { + return; + } + + let node = new PointCloudArena4DNode(); + let sceneNode = PointCloud(geometryNode.geometry, this.kdtree.material); + sceneNode.visible = false; + + node.kdtree = this.kdtree; + node.geometryNode = geometryNode; + node.sceneNode = sceneNode; + node.parent = this; + node.left = this.geometryNode.left; + node.right = this.geometryNode.right; + } + + getChildren () { + let children = []; + + if (this.left) { + children.push(this.left); + } + + if (this.right) { + children.push(this.right); + } + + return children; + } + }; + + class PointCloudArena4D$1 extends PointCloudTree{ + constructor (geometry) { + super(); + + this.root = null; + if (geometry.root) { + this.root = geometry.root; + } else { + geometry.addEventListener('hierarchy_loaded', () => { + this.root = geometry.root; + }); + } + + this.visiblePointsTarget = 2 * 1000 * 1000; + this.minimumNodePixelSize = 150; + + this.position.sub(geometry.offset); + this.updateMatrix(); + + this.numVisibleNodes = 0; + this.numVisiblePoints = 0; + + this.boundingBoxNodes = []; + this.loadQueue = []; + this.visibleNodes = []; + + this.pcoGeometry = geometry; + this.boundingBox = this.pcoGeometry.boundingBox; + this.boundingSphere = this.pcoGeometry.boundingSphere; + this.material = new PointCloudMaterial$1({vertexColors: VertexColors, size: 0.05, treeType: TreeType.KDTREE}); + this.material.sizeType = PointSizeType.ATTENUATED; + this.material.size = 0.05; + this.profileRequests = []; + this.name = ''; + } + + getBoundingBoxWorld () { + this.updateMatrixWorld(true); + let box = this.boundingBox; + let transform = this.matrixWorld; + let tBox = Utils.computeTransformedBoundingBox(box, transform); + + return tBox; + }; + + setName (name) { + if (this.name !== name) { + this.name = name; + this.dispatchEvent({type: 'name_changed', name: name, pointcloud: this}); + } + } + + getName () { + return this.name; + } + + getLevel () { + return this.level; + } + + toTreeNode (geometryNode, parent) { + let node = new PointCloudArena4DNode(); + let sceneNode = new Points(geometryNode.geometry, this.material); + + sceneNode.frustumCulled = false; + sceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => { + if (material.program) { + _this.getContext().useProgram(material.program.program); + + if (material.program.getUniforms().map.level) { + let level = geometryNode.getLevel(); + material.uniforms.level.value = level; + material.program.getUniforms().map.level.setValue(_this.getContext(), level); + } + + if (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) { + let vnStart = this.visibleNodeTextureOffsets.get(node); + material.uniforms.vnStart.value = vnStart; + material.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart); + } + + if (material.program.getUniforms().map.pcIndex) { + let i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node); + material.uniforms.pcIndex.value = i; + material.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i); + } + } + }; + + node.geometryNode = geometryNode; + node.sceneNode = sceneNode; + node.pointcloud = this; + node.left = geometryNode.left; + node.right = geometryNode.right; + + if (!parent) { + this.root = node; + this.add(sceneNode); + } else { + parent.sceneNode.add(sceneNode); + + if (parent.left === geometryNode) { + parent.left = node; + } else if (parent.right === geometryNode) { + parent.right = node; + } + } + + let disposeListener = function () { + parent.sceneNode.remove(node.sceneNode); + + if (parent.left === node) { + parent.left = geometryNode; + } else if (parent.right === node) { + parent.right = geometryNode; + } + }; + geometryNode.oneTimeDisposeHandlers.push(disposeListener); + + return node; + } + + updateMaterial (material, visibleNodes, camera, renderer) { + material.fov = camera.fov * (Math.PI / 180); + material.screenWidth = renderer.domElement.clientWidth; + material.screenHeight = renderer.domElement.clientHeight; + material.spacing = this.pcoGeometry.spacing; + material.near = camera.near; + material.far = camera.far; + + // reduce shader source updates by setting maxLevel slightly higher than actually necessary + if (this.maxLevel > material.levels) { + material.levels = this.maxLevel + 2; + } + + // material.uniforms.octreeSize.value = this.boundingBox.size().x; + let bbSize = this.boundingBox.getSize(new Vector3()); + material.bbSize = [bbSize.x, bbSize.y, bbSize.z]; + } + + updateVisibleBounds () { + + } + + hideDescendants (object) { + let stack = []; + for (let i = 0; i < object.children.length; i++) { + let child = object.children[i]; + if (child.visible) { + stack.push(child); + } + } + + while (stack.length > 0) { + let child = stack.shift(); + + child.visible = false; + if (child.boundingBoxNode) { + child.boundingBoxNode.visible = false; + } + + for (let i = 0; i < child.children.length; i++) { + let childOfChild = child.children[i]; + if (childOfChild.visible) { + stack.push(childOfChild); + } + } + } + } + + updateMatrixWorld (force) { + // node.matrixWorld.multiplyMatrices( node.parent.matrixWorld, node.matrix ); + + if (this.matrixAutoUpdate === true) this.updateMatrix(); + + if (this.matrixWorldNeedsUpdate === true || force === true) { + if (this.parent === undefined) { + this.matrixWorld.copy(this.matrix); + } else { + this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); + } + + this.matrixWorldNeedsUpdate = false; + + force = true; + } + } + + nodesOnRay (nodes, ray) { + let nodesOnRay = []; + + let _ray = ray.clone(); + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i]; + let sphere = node.getBoundingSphere().clone().applyMatrix4(node.sceneNode.matrixWorld); + // TODO Unused: let box = node.getBoundingBox().clone().applyMatrix4(node.sceneNode.matrixWorld); + + if (_ray.intersectsSphere(sphere)) { + nodesOnRay.push(node); + } + // if(_ray.isIntersectionBox(box)){ + // nodesOnRay.push(node); + // } + } + + return nodesOnRay; + } + + pick(viewer, camera, ray, params = {}){ + + let renderer = viewer.renderer; + let pRenderer = viewer.pRenderer; + + performance.mark("pick-start"); + + let getVal = (a, b) => a !== undefined ? a : b; + + let pickWindowSize = getVal(params.pickWindowSize, 17); + let pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false); + + let size = renderer.getSize(new Vector2()); + + let width = Math.ceil(getVal(params.width, size.width)); + let height = Math.ceil(getVal(params.height, size.height)); + + let pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType); + let pointSize = getVal(params.pointSize, this.material.size); + + let nodes = this.nodesOnRay(this.visibleNodes, ray); + + if (nodes.length === 0) { + return null; + } + + if (!this.pickState) { + let scene = new Scene(); + + let material = new PointCloudMaterial$1(); + material.activeAttributeName = "indices"; + + let renderTarget = new WebGLRenderTarget( + 1, 1, + { minFilter: LinearFilter, + magFilter: NearestFilter, + format: RGBAFormat } + ); + + this.pickState = { + renderTarget: renderTarget, + material: material, + scene: scene + }; + }; + + let pickState = this.pickState; + let pickMaterial = pickState.material; + + { // update pick material + pickMaterial.pointSizeType = pointSizeType; + pickMaterial.shape = this.material.shape; + + pickMaterial.size = pointSize; + pickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value; + pickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value; + pickMaterial.classification = this.material.classification; + if(params.pickClipped){ + pickMaterial.clipBoxes = this.material.clipBoxes; + if(this.material.clipTask === ClipTask.HIGHLIGHT){ + pickMaterial.clipTask = ClipTask.NONE; + }else { + pickMaterial.clipTask = this.material.clipTask; + } + }else { + pickMaterial.clipBoxes = []; + } + + this.updateMaterial(pickMaterial, nodes, camera, renderer); + } + + pickState.renderTarget.setSize(width, height); + + let pixelPos = new Vector2(params.x, params.y); + + let gl = renderer.getContext(); + gl.enable(gl.SCISSOR_TEST); + gl.scissor( + parseInt(pixelPos.x - (pickWindowSize - 1) / 2), + parseInt(pixelPos.y - (pickWindowSize - 1) / 2), + parseInt(pickWindowSize), parseInt(pickWindowSize)); + + + renderer.state.buffers.depth.setTest(pickMaterial.depthTest); + renderer.state.buffers.depth.setMask(pickMaterial.depthWrite); + renderer.state.setBlending(NoBlending); + + renderer.clearTarget(pickState.renderTarget, true, true, true); + + { // RENDER + renderer.setRenderTarget(pickState.renderTarget); + gl.clearColor(0, 0, 0, 0); + renderer.clearTarget( pickState.renderTarget, true, true, true ); + + let tmp = this.material; + this.material = pickMaterial; + + pRenderer.renderOctree(this, nodes, camera, pickState.renderTarget); + + this.material = tmp; + } + + let clamp = (number, min, max) => Math.min(Math.max(min, number), max); + + let x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width)); + let y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height)); + let w = parseInt(Math.min(x + pickWindowSize, width) - x); + let h = parseInt(Math.min(y + pickWindowSize, height) - y); + + let pixelCount = w * h; + let buffer = new Uint8Array(4 * pixelCount); + + gl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer); + + renderer.setRenderTarget(null); + renderer.state.reset(); + renderer.setScissorTest(false); + gl.disable(gl.SCISSOR_TEST); + + let pixels = buffer; + let ibuffer = new Uint32Array(buffer.buffer); + + // find closest hit inside pixelWindow boundaries + let min = Number.MAX_VALUE; + let hits = []; + for (let u = 0; u < pickWindowSize; u++) { + for (let v = 0; v < pickWindowSize; v++) { + let offset = (u + v * pickWindowSize); + let distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2); + + let pcIndex = pixels[4 * offset + 3]; + pixels[4 * offset + 3] = 0; + let pIndex = ibuffer[offset]; + + if(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){ + let hit = { + pIndex: pIndex, + pcIndex: pcIndex, + distanceToCenter: distance + }; + + if(params.all){ + hits.push(hit); + }else { + if(hits.length > 0){ + if(distance < hits[0].distanceToCenter){ + hits[0] = hit; + } + }else { + hits.push(hit); + } + } + + + } + } + } + + + + for(let hit of hits){ + let point = {}; + + if (!nodes[hit.pcIndex]) { + return null; + } + + let node = nodes[hit.pcIndex]; + let pc = node.sceneNode; + let geometry = node.geometryNode.geometry; + + for(let attributeName in geometry.attributes){ + let attribute = geometry.attributes[attributeName]; + + if (attributeName === 'position') { + let x = attribute.array[3 * hit.pIndex + 0]; + let y = attribute.array[3 * hit.pIndex + 1]; + let z = attribute.array[3 * hit.pIndex + 2]; + + let position = new Vector3(x, y, z); + position.applyMatrix4(pc.matrixWorld); + + point[attributeName] = position; + } else if (attributeName === 'indices') { + + } else { + //if (values.itemSize === 1) { + // point[attribute.name] = values.array[hit.pIndex]; + //} else { + // let value = []; + // for (let j = 0; j < values.itemSize; j++) { + // value.push(values.array[values.itemSize * hit.pIndex + j]); + // } + // point[attribute.name] = value; + //} + } + + } + + hit.point = point; + } + + performance.mark("pick-end"); + performance.measure("pick", "pick-start", "pick-end"); + + if(params.all){ + return hits.map(hit => hit.point); + }else { + if(hits.length === 0){ + return null; + }else { + return hits[0].point; + } + } + } + + computeVisibilityTextureData(nodes){ + + if(exports.measureTimings) performance.mark("computeVisibilityTextureData-start"); + + let data = new Uint8Array(nodes.length * 3); + let visibleNodeTextureOffsets = new Map(); + + // copy array + nodes = nodes.slice(); + + // sort by level and number + let sort = function (a, b) { + let la = a.geometryNode.level; + let lb = b.geometryNode.level; + let na = a.geometryNode.number; + let nb = b.geometryNode.number; + if (la !== lb) return la - lb; + if (na < nb) return -1; + if (na > nb) return 1; + return 0; + }; + nodes.sort(sort); + + let visibleNodeNames = []; + for (let i = 0; i < nodes.length; i++) { + visibleNodeNames.push(nodes[i].geometryNode.number); + } + + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i]; + + visibleNodeTextureOffsets.set(node, i); + + let b1 = 0; // children + let b2 = 0; // offset to first child + let b3 = 0; // split + + if (node.geometryNode.left && visibleNodeNames.indexOf(node.geometryNode.left.number) > 0) { + b1 += 1; + b2 = visibleNodeNames.indexOf(node.geometryNode.left.number) - i; + } + if (node.geometryNode.right && visibleNodeNames.indexOf(node.geometryNode.right.number) > 0) { + b1 += 2; + b2 = (b2 === 0) ? visibleNodeNames.indexOf(node.geometryNode.right.number) - i : b2; + } + + if (node.geometryNode.split === 'X') { + b3 = 1; + } else if (node.geometryNode.split === 'Y') { + b3 = 2; + } else if (node.geometryNode.split === 'Z') { + b3 = 4; + } + + data[i * 3 + 0] = b1; + data[i * 3 + 1] = b2; + data[i * 3 + 2] = b3; + } + + if(exports.measureTimings){ + performance.mark("computeVisibilityTextureData-end"); + performance.measure("render.computeVisibilityTextureData", "computeVisibilityTextureData-start", "computeVisibilityTextureData-end"); + } + + return { + data: data, + offsets: visibleNodeTextureOffsets + }; + } + + get progress () { + if (this.pcoGeometry.root) { + return exports.numNodesLoading > 0 ? 0 : 1; + } else { + return 0; + } + } + }; + + // Copied from three.js: WebGLRenderer.js + function paramThreeToGL(_gl, p) { + + let extension; + + if (p === RepeatWrapping) return _gl.REPEAT; + if (p === ClampToEdgeWrapping) return _gl.CLAMP_TO_EDGE; + if (p === MirroredRepeatWrapping) return _gl.MIRRORED_REPEAT; + + if (p === NearestFilter) return _gl.NEAREST; + if (p === NearestMipMapNearestFilter) return _gl.NEAREST_MIPMAP_NEAREST; + if (p === NearestMipMapLinearFilter) return _gl.NEAREST_MIPMAP_LINEAR; + + if (p === LinearFilter) return _gl.LINEAR; + if (p === LinearMipMapNearestFilter) return _gl.LINEAR_MIPMAP_NEAREST; + if (p === LinearMipMapLinearFilter) return _gl.LINEAR_MIPMAP_LINEAR; + + if (p === UnsignedByteType) return _gl.UNSIGNED_BYTE; + if (p === UnsignedShort4444Type) return _gl.UNSIGNED_SHORT_4_4_4_4; + if (p === UnsignedShort5551Type) return _gl.UNSIGNED_SHORT_5_5_5_1; + if (p === UnsignedShort565Type) return _gl.UNSIGNED_SHORT_5_6_5; + + if (p === ByteType) return _gl.BYTE; + if (p === ShortType) return _gl.SHORT; + if (p === UnsignedShortType) return _gl.UNSIGNED_SHORT; + if (p === IntType) return _gl.INT; + if (p === UnsignedIntType) return _gl.UNSIGNED_INT; + if (p === FloatType) return _gl.FLOAT; + + if (p === HalfFloatType) { + + extension = extensions.get('OES_texture_half_float'); + + if (extension !== null) return extension.HALF_FLOAT_OES; + + } + + if (p === AlphaFormat) return _gl.ALPHA; + if (p === RGBFormat) return _gl.RGB; + if (p === RGBAFormat) return _gl.RGBA; + if (p === LuminanceFormat) return _gl.LUMINANCE; + if (p === LuminanceAlphaFormat) return _gl.LUMINANCE_ALPHA; + if (p === DepthFormat) return _gl.DEPTH_COMPONENT; + if (p === DepthStencilFormat) return _gl.DEPTH_STENCIL; + + if (p === AddEquation) return _gl.FUNC_ADD; + if (p === SubtractEquation) return _gl.FUNC_SUBTRACT; + if (p === ReverseSubtractEquation) return _gl.FUNC_REVERSE_SUBTRACT; + + if (p === ZeroFactor) return _gl.ZERO; + if (p === OneFactor) return _gl.ONE; + if (p === SrcColorFactor) return _gl.SRC_COLOR; + if (p === OneMinusSrcColorFactor) return _gl.ONE_MINUS_SRC_COLOR; + if (p === SrcAlphaFactor) return _gl.SRC_ALPHA; + if (p === OneMinusSrcAlphaFactor) return _gl.ONE_MINUS_SRC_ALPHA; + if (p === DstAlphaFactor) return _gl.DST_ALPHA; + if (p === OneMinusDstAlphaFactor) return _gl.ONE_MINUS_DST_ALPHA; + + if (p === DstColorFactor) return _gl.DST_COLOR; + if (p === OneMinusDstColorFactor) return _gl.ONE_MINUS_DST_COLOR; + if (p === SrcAlphaSaturateFactor) return _gl.SRC_ALPHA_SATURATE; + + if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { + + extension = extensions.get('WEBGL_compressed_texture_s3tc'); + + if (extension !== null) { + + if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT1_Format$1) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if (p === RGBA_S3TC_DXT5_Format$1) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + + } + + } + + if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { + + extension = extensions.get('WEBGL_compressed_texture_pvrtc'); + + if (extension !== null) { + + if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + + } + + } + + if (p === RGB_ETC1_Format) { + + extension = extensions.get('WEBGL_compressed_texture_etc1'); + + if (extension !== null) return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } + + if (p === MinEquation || p === MaxEquation) { + + extension = extensions.get('EXT_blend_minmax'); + + if (extension !== null) { + + if (p === MinEquation) return extension.MIN_EXT; + if (p === MaxEquation) return extension.MAX_EXT; + + } + + } + + if (p === UnsignedInt248Type) { + + extension = extensions.get('WEBGL_depth_texture'); + + if (extension !== null) return extension.UNSIGNED_INT_24_8_WEBGL; + + } + + return 0; + + }; + + let attributeLocations = { + "position": {name: "position", location: 0}, + "color": {name: "color", location: 1}, + "rgba": {name: "color", location: 1}, + "intensity": {name: "intensity", location: 2}, + "classification": {name: "classification", location: 3}, + "returnNumber": {name: "returnNumber", location: 4}, + "return number": {name: "returnNumber", location: 4}, + "returns": {name: "returnNumber", location: 4}, + "numberOfReturns": {name: "numberOfReturns", location: 5}, + "number of returns": {name: "numberOfReturns", location: 5}, + "pointSourceID": {name: "pointSourceID", location: 6}, + "source id": {name: "pointSourceID", location: 6}, + "point source id": {name: "pointSourceID", location: 6}, + "indices": {name: "indices", location: 7}, + "normal": {name: "normal", location: 8}, + "spacing": {name: "spacing", location: 9}, + "gps-time": {name: "gpsTime", location: 10}, + "aExtra": {name: "aExtra", location: 11}, + }; + + class Shader { + + constructor(gl, name, vsSource, fsSource) { + this.gl = gl; + this.name = name; + this.vsSource = vsSource; + this.fsSource = fsSource; + + this.cache = new Map(); + + this.vs = null; + this.fs = null; + this.program = null; + + this.uniformLocations = {}; + this.attributeLocations = {}; + this.uniformBlockIndices = {}; + this.uniformBlocks = {}; + this.uniforms = {}; + + this.update(vsSource, fsSource); + } + + update(vsSource, fsSource) { + this.vsSource = vsSource; + this.fsSource = fsSource; + + this.linkProgram(); + } + + compileShader(shader, source){ + let gl = this.gl; + + gl.shaderSource(shader, source); + + gl.compileShader(shader); + + let success = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + if (!success) { + let info = gl.getShaderInfoLog(shader); + let numberedSource = source.split("\n").map((a, i) => `${i + 1}`.padEnd(5) + a).join("\n"); + throw `could not compile shader ${this.name}: ${info}, \n${numberedSource}`; + } + } + + linkProgram() { + + const tStart = performance.now(); + + let gl = this.gl; + + this.uniformLocations = {}; + this.attributeLocations = {}; + this.uniforms = {}; + + gl.useProgram(null); + + let cached = this.cache.get(`${this.vsSource}, ${this.fsSource}`); + if (cached) { + this.program = cached.program; + this.vs = cached.vs; + this.fs = cached.fs; + this.attributeLocations = cached.attributeLocations; + this.uniformLocations = cached.uniformLocations; + this.uniformBlocks = cached.uniformBlocks; + this.uniforms = cached.uniforms; + + return; + } else { + + this.vs = gl.createShader(gl.VERTEX_SHADER); + this.fs = gl.createShader(gl.FRAGMENT_SHADER); + this.program = gl.createProgram(); + + for(let name of Object.keys(attributeLocations)){ + let location = attributeLocations[name].location; + let glslName = attributeLocations[name].name; + gl.bindAttribLocation(this.program, location, glslName); + } + + this.compileShader(this.vs, this.vsSource); + this.compileShader(this.fs, this.fsSource); + + let program = this.program; + + gl.attachShader(program, this.vs); + gl.attachShader(program, this.fs); + + gl.linkProgram(program); + + gl.detachShader(program, this.vs); + gl.detachShader(program, this.fs); + + let success = gl.getProgramParameter(program, gl.LINK_STATUS); + if (!success) { + let info = gl.getProgramInfoLog(program); + throw `could not link program ${this.name}: ${info}`; + } + + { // attribute locations + let numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); + + for (let i = 0; i < numAttributes; i++) { + let attribute = gl.getActiveAttrib(program, i); + + let location = gl.getAttribLocation(program, attribute.name); + + this.attributeLocations[attribute.name] = location; + } + } + + { // uniform locations + let numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); + + for (let i = 0; i < numUniforms; i++) { + let uniform = gl.getActiveUniform(program, i); + + let location = gl.getUniformLocation(program, uniform.name); + + this.uniformLocations[uniform.name] = location; + this.uniforms[uniform.name] = { + location: location, + value: null, + }; + } + } + + // uniform blocks + if(gl instanceof WebGL2RenderingContext){ + let numBlocks = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS); + + for (let i = 0; i < numBlocks; i++) { + let blockName = gl.getActiveUniformBlockName(program, i); + + let blockIndex = gl.getUniformBlockIndex(program, blockName); + + this.uniformBlockIndices[blockName] = blockIndex; + + gl.uniformBlockBinding(program, blockIndex, blockIndex); + let dataSize = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE); + + let uBuffer = gl.createBuffer(); + gl.bindBuffer(gl.UNIFORM_BUFFER, uBuffer); + gl.bufferData(gl.UNIFORM_BUFFER, dataSize, gl.DYNAMIC_READ); + + gl.bindBufferBase(gl.UNIFORM_BUFFER, blockIndex, uBuffer); + + gl.bindBuffer(gl.UNIFORM_BUFFER, null); + + this.uniformBlocks[blockName] = { + name: blockName, + index: blockIndex, + dataSize: dataSize, + buffer: uBuffer + }; + + } + } + + let cached = { + program: this.program, + vs: this.vs, + fs: this.fs, + attributeLocations: this.attributeLocations, + uniformLocations: this.uniformLocations, + uniforms: this.uniforms, + uniformBlocks: this.uniformBlocks, + }; + + this.cache.set(`${this.vsSource}, ${this.fsSource}`, cached); + } + + const tEnd = performance.now(); + const duration = tEnd - tStart; + + console.log(`shader compile duration: ${duration.toFixed(3)}`); + + + } + + setUniformMatrix4(name, value) { + const gl = this.gl; + const location = this.uniformLocations[name]; + + if (location == null) { + return; + } + + let tmp = new Float32Array(value.elements); + gl.uniformMatrix4fv(location, false, tmp); + } + + setUniform1f(name, value) { + const gl = this.gl; + const uniform = this.uniforms[name]; + + if (uniform === undefined) { + return; + } + + if(uniform.value === value){ + return; + } + + uniform.value = value; + + gl.uniform1f(uniform.location, value); + } + + setUniformBoolean(name, value) { + const gl = this.gl; + const uniform = this.uniforms[name]; + + if (uniform === undefined) { + return; + } + + if(uniform.value === value){ + return; + } + + uniform.value = value; + + gl.uniform1i(uniform.location, value); + } + + setUniformTexture(name, value) { + const gl = this.gl; + const location = this.uniformLocations[name]; + + if (location == null) { + return; + } + + gl.uniform1i(location, value); + } + + setUniform2f(name, value) { + const gl = this.gl; + const location = this.uniformLocations[name]; + + if (location == null) { + return; + } + + gl.uniform2f(location, value[0], value[1]); + } + + setUniform3f(name, value) { + const gl = this.gl; + const location = this.uniformLocations[name]; + + if (location == null) { + return; + } + + gl.uniform3f(location, value[0], value[1], value[2]); + } + + setUniform(name, value) { + + if (value.constructor === Matrix4) { + this.setUniformMatrix4(name, value); + } else if (typeof value === "number") { + this.setUniform1f(name, value); + } else if (typeof value === "boolean") { + this.setUniformBoolean(name, value); + } else if (value instanceof WebGLTexture) { + this.setUniformTexture(name, value); + } else if (value instanceof Array) { + + if (value.length === 2) { + this.setUniform2f(name, value); + } else if (value.length === 3) { + this.setUniform3f(name, value); + } + + } else { + console.error("unhandled uniform type: ", name, value); + } + + } + + + setUniform1i(name, value) { + let gl = this.gl; + let location = this.uniformLocations[name]; + + if (location == null) { + return; + } + + gl.uniform1i(location, value); + } + + }; + + class WebGLTexture { + + constructor(gl, texture) { + this.gl = gl; + + this.texture = texture; + this.id = gl.createTexture(); + + this.target = gl.TEXTURE_2D; + this.version = -1; + + this.update(texture); + } + + update() { + + if (!this.texture.image) { + this.version = this.texture.version; + + return; + } + + let gl = this.gl; + let texture = this.texture; + + if (this.version === texture.version) { + return; + } + + this.target = gl.TEXTURE_2D; + + gl.bindTexture(this.target, this.id); + + let level = 0; + let internalFormat = paramThreeToGL(gl, texture.format); + let width = texture.image.width; + let height = texture.image.height; + let border = 0; + let srcFormat = internalFormat; + let srcType = paramThreeToGL(gl, texture.type); + let data; + + gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); + gl.pixelStorei(gl.UNPACK_ALIGNMENT, texture.unpackAlignment); + + if (texture instanceof DataTexture) { + data = texture.image.data; + + gl.texParameteri(this.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(this.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + gl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter)); + gl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter)); + + gl.texImage2D(this.target, level, internalFormat, + width, height, border, srcFormat, srcType, + data); + } else if ((texture instanceof CanvasTexture) || (texture instanceof Texture)) { + data = texture.image; + + gl.texParameteri(this.target, gl.TEXTURE_WRAP_S, paramThreeToGL(gl, texture.wrapS)); + gl.texParameteri(this.target, gl.TEXTURE_WRAP_T, paramThreeToGL(gl, texture.wrapT)); + + gl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter)); + gl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter)); + + gl.texImage2D(this.target, level, internalFormat, + internalFormat, srcType, data); + + if (texture instanceof Texture) {gl.generateMipmap(gl.TEXTURE_2D);} + } + + gl.bindTexture(this.target, null); + + this.version = texture.version; + } + + }; + + class WebGLBuffer { + + constructor() { + this.numElements = 0; + this.vao = null; + this.vbos = new Map(); + } + + }; + + class Renderer { + + constructor(threeRenderer) { + this.threeRenderer = threeRenderer; + this.gl = this.threeRenderer.getContext(); + + this.buffers = new Map(); + this.shaders = new Map(); + this.textures = new Map(); + + this.glTypeMapping = new Map(); + this.glTypeMapping.set(Float32Array, this.gl.FLOAT); + this.glTypeMapping.set(Uint8Array, this.gl.UNSIGNED_BYTE); + this.glTypeMapping.set(Uint16Array, this.gl.UNSIGNED_SHORT); + + this.toggle = 0; + } + + deleteBuffer(geometry) { + + let gl = this.gl; + let webglBuffer = this.buffers.get(geometry); + if (webglBuffer != null) { + for (let attributeName in geometry.attributes) { + gl.deleteBuffer(webglBuffer.vbos.get(attributeName).handle); + } + this.buffers.delete(geometry); + } + } + + createBuffer(geometry){ + let gl = this.gl; + let webglBuffer = new WebGLBuffer(); + webglBuffer.vao = gl.createVertexArray(); + webglBuffer.numElements = geometry.attributes.position.count; + + gl.bindVertexArray(webglBuffer.vao); + + for(let attributeName in geometry.attributes){ + let bufferAttribute = geometry.attributes[attributeName]; + + let vbo = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, vbo); + gl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW); + + let normalized = bufferAttribute.normalized; + let type = this.glTypeMapping.get(bufferAttribute.array.constructor); + + if(attributeLocations[attributeName] === undefined){ + //attributeLocation = attributeLocations["aExtra"]; + }else { + let attributeLocation = attributeLocations[attributeName].location; + + gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); + gl.enableVertexAttribArray(attributeLocation); + } + + + webglBuffer.vbos.set(attributeName, { + handle: vbo, + name: attributeName, + count: bufferAttribute.count, + itemSize: bufferAttribute.itemSize, + type: geometry.attributes.position.array.constructor, + version: 0 + }); + } + + gl.bindBuffer(gl.ARRAY_BUFFER, null); + gl.bindVertexArray(null); + + let disposeHandler = (event) => { + this.deleteBuffer(geometry); + geometry.removeEventListener("dispose", disposeHandler); + }; + geometry.addEventListener("dispose", disposeHandler); + + return webglBuffer; + } + + updateBuffer(geometry){ + let gl = this.gl; + + let webglBuffer = this.buffers.get(geometry); + + gl.bindVertexArray(webglBuffer.vao); + + for(let attributeName in geometry.attributes){ + let bufferAttribute = geometry.attributes[attributeName]; + + let normalized = bufferAttribute.normalized; + let type = this.glTypeMapping.get(bufferAttribute.array.constructor); + + let vbo = null; + if(!webglBuffer.vbos.has(attributeName)){ + vbo = gl.createBuffer(); + + webglBuffer.vbos.set(attributeName, { + handle: vbo, + name: attributeName, + count: bufferAttribute.count, + itemSize: bufferAttribute.itemSize, + type: geometry.attributes.position.array.constructor, + version: bufferAttribute.version + }); + }else { + vbo = webglBuffer.vbos.get(attributeName).handle; + webglBuffer.vbos.get(attributeName).version = bufferAttribute.version; + } + + gl.bindBuffer(gl.ARRAY_BUFFER, vbo); + gl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW); + + if(attributeLocations[attributeName] === undefined){ + //attributeLocation = attributeLocations["aExtra"]; + }else { + let attributeLocation = attributeLocations[attributeName].location; + + gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); + gl.enableVertexAttribArray(attributeLocation); + } + } + + gl.bindBuffer(gl.ARRAY_BUFFER, null); + gl.bindVertexArray(null); + } + + traverse(scene) { + + let octrees = []; + + let stack = [scene]; + while (stack.length > 0) { + + let node = stack.pop(); + + if (node instanceof PointCloudTree) { + octrees.push(node); + continue; + } + + let visibleChildren = node.children.filter(c => c.visible); + stack.push(...visibleChildren); + + } + + let result = { + octrees: octrees + }; + + return result; + } + + + + renderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params) { + + if (exports.measureTimings) performance.mark("renderNodes-start"); + + let gl = this.gl; + + let material = params.material ? params.material : octree.material; + let shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps; + let view = camera.matrixWorldInverse; + + if(params.viewOverride){ + view = params.viewOverride; + } + + let worldView = new Matrix4(); + + let mat4holder = new Float32Array(16); + + let i = 0; + for (let node of nodes) { + + if(exports.debug.allowedNodes !== undefined){ + if(!exports.debug.allowedNodes.includes(node.name)){ + continue; + } + } + + let world = node.sceneNode.matrixWorld; + worldView.multiplyMatrices(view, world); + + if (visibilityTextureData) { + let vnStart = visibilityTextureData.offsets.get(node); + shader.setUniform1f("uVNStart", vnStart); + } + + + let level = node.getLevel(); + + if(node.debug){ + shader.setUniform("uDebug", true); + }else { + shader.setUniform("uDebug", false); + } + + // let isLeaf = false; + // if(node instanceof PointCloudOctreeNode){ + // isLeaf = Object.keys(node.children).length === 0; + // }else if(node instanceof PointCloudArena4DNode){ + // isLeaf = node.geometryNode.isLeaf; + // } + // shader.setUniform("uIsLeafNode", isLeaf); + + // let isLeaf = node.children.filter(n => n != null).length === 0; + // if(!isLeaf){ + // continue; + // } + + + // TODO consider passing matrices in an array to avoid uniformMatrix4fv overhead + const lModel = shader.uniformLocations["modelMatrix"]; + if (lModel) { + mat4holder.set(world.elements); + gl.uniformMatrix4fv(lModel, false, mat4holder); + } + + const lModelView = shader.uniformLocations["modelViewMatrix"]; + //mat4holder.set(worldView.elements); + // faster then set in chrome 63 + for(let j = 0; j < 16; j++){ + mat4holder[j] = worldView.elements[j]; + } + gl.uniformMatrix4fv(lModelView, false, mat4holder); + + { // Clip Polygons + if(material.clipPolygons && material.clipPolygons.length > 0){ + + let clipPolygonVCount = []; + let worldViewProjMatrices = []; + + for(let clipPolygon of material.clipPolygons){ + + let view = clipPolygon.viewMatrix; + let proj = clipPolygon.projMatrix; + + let worldViewProj = proj.clone().multiply(view).multiply(world); + + clipPolygonVCount.push(clipPolygon.markers.length); + worldViewProjMatrices.push(worldViewProj); + } + + let flattenedMatrices = [].concat(...worldViewProjMatrices.map(m => m.elements)); + + let flattenedVertices = new Array(8 * 3 * material.clipPolygons.length); + for(let i = 0; i < material.clipPolygons.length; i++){ + let clipPolygon = material.clipPolygons[i]; + for(let j = 0; j < clipPolygon.markers.length; j++){ + flattenedVertices[i * 24 + (j * 3 + 0)] = clipPolygon.markers[j].position.x; + flattenedVertices[i * 24 + (j * 3 + 1)] = clipPolygon.markers[j].position.y; + flattenedVertices[i * 24 + (j * 3 + 2)] = clipPolygon.markers[j].position.z; + } + } + + const lClipPolygonVCount = shader.uniformLocations["uClipPolygonVCount[0]"]; + gl.uniform1iv(lClipPolygonVCount, clipPolygonVCount); + + const lClipPolygonVP = shader.uniformLocations["uClipPolygonWVP[0]"]; + gl.uniformMatrix4fv(lClipPolygonVP, false, flattenedMatrices); + + const lClipPolygons = shader.uniformLocations["uClipPolygonVertices[0]"]; + gl.uniform3fv(lClipPolygons, flattenedVertices); + + } + } + + + //shader.setUniformMatrix4("modelMatrix", world); + //shader.setUniformMatrix4("modelViewMatrix", worldView); + shader.setUniform1f("uLevel", level); + shader.setUniform1f("uNodeSpacing", node.geometryNode.estimatedSpacing); + + shader.setUniform1f("uPCIndex", i); + // uBBSize + + if (shadowMaps.length > 0) { + + const lShadowMap = shader.uniformLocations["uShadowMap[0]"]; + + shader.setUniform3f("uShadowColor", material.uniforms.uShadowColor.value); + + let bindingStart = 5; + let bindingPoints = new Array(shadowMaps.length).fill(bindingStart).map((a, i) => (a + i)); + gl.uniform1iv(lShadowMap, bindingPoints); + + for (let i = 0; i < shadowMaps.length; i++) { + let shadowMap = shadowMaps[i]; + let bindingPoint = bindingPoints[i]; + let glTexture = this.threeRenderer.properties.get(shadowMap.target.texture).__webglTexture; + + gl.activeTexture(gl[`TEXTURE${bindingPoint}`]); + gl.bindTexture(gl.TEXTURE_2D, glTexture); + } + + { + + let worldViewMatrices = shadowMaps + .map(sm => sm.camera.matrixWorldInverse) + .map(view => new Matrix4().multiplyMatrices(view, world)); + + let flattenedMatrices = [].concat(...worldViewMatrices.map(c => c.elements)); + const lWorldView = shader.uniformLocations["uShadowWorldView[0]"]; + gl.uniformMatrix4fv(lWorldView, false, flattenedMatrices); + } + + { + let flattenedMatrices = [].concat(...shadowMaps.map(sm => sm.camera.projectionMatrix.elements)); + const lProj = shader.uniformLocations["uShadowProj[0]"]; + gl.uniformMatrix4fv(lProj, false, flattenedMatrices); + } + } + + const geometry = node.geometryNode.geometry; + + if(geometry.attributes["gps-time"]){ + const bufferAttribute = geometry.attributes["gps-time"]; + const attGPS = octree.getAttribute("gps-time"); + + let initialRange = attGPS.initialRange; + let initialRangeSize = initialRange[1] - initialRange[0]; + + let globalRange = attGPS.range; + let globalRangeSize = globalRange[1] - globalRange[0]; + + let scale = initialRangeSize / globalRangeSize; + let offset = -(globalRange[0] - initialRange[0]) / initialRangeSize; + + scale = Number.isNaN(scale) ? 1 : scale; + offset = Number.isNaN(offset) ? 0 : offset; + + shader.setUniform1f("uGpsScale", scale); + shader.setUniform1f("uGpsOffset", offset); + //shader.setUniform2f("uFilterGPSTimeClipRange", [-Infinity, Infinity]); + + let uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value; + // let gpsCliPRangeMin = uFilterGPSTimeClipRange[0] + // let gpsCliPRangeMax = uFilterGPSTimeClipRange[1] + // shader.setUniform2f("uFilterGPSTimeClipRange", [gpsCliPRangeMin, gpsCliPRangeMax]); + + let normalizedClipRange = [ + (uFilterGPSTimeClipRange[0] - globalRange[0]) / globalRangeSize, + (uFilterGPSTimeClipRange[1] - globalRange[0]) / globalRangeSize, + ]; + + shader.setUniform2f("uFilterGPSTimeClipRange", normalizedClipRange); + + + + // // ranges in full gps coordinate system + // const globalRange = attGPS.range; + // const bufferRange = bufferAttribute.potree.range; + + // // ranges in [0, 1] + // // normalizedGlobalRange = [0, 1] + // // normalizedBufferRange: norm buffer within norm global range e.g. [0.2, 0.8] + // const globalWidth = globalRange[1] - globalRange[0]; + // const normalizedBufferRange = [ + // (bufferRange[0] - globalRange[0]) / globalWidth, + // (bufferRange[1] - globalRange[0]) / globalWidth, + // ]; + + // shader.setUniform2f("uNormalizedGpsBufferRange", normalizedBufferRange); + + // let uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value; + // let gpsCliPRangeMin = uFilterGPSTimeClipRange[0] + // let gpsCliPRangeMax = uFilterGPSTimeClipRange[1] + // shader.setUniform2f("uFilterGPSTimeClipRange", [gpsCliPRangeMin, gpsCliPRangeMax]); + + // shader.setUniform1f("uGpsScale", bufferAttribute.potree.scale); + // shader.setUniform1f("uGpsOffset", bufferAttribute.potree.offset); + } + + { + let uFilterReturnNumberRange = material.uniforms.uFilterReturnNumberRange.value; + let uFilterNumberOfReturnsRange = material.uniforms.uFilterNumberOfReturnsRange.value; + let uFilterPointSourceIDClipRange = material.uniforms.uFilterPointSourceIDClipRange.value; + + + + shader.setUniform2f("uFilterReturnNumberRange", uFilterReturnNumberRange); + shader.setUniform2f("uFilterNumberOfReturnsRange", uFilterNumberOfReturnsRange); + shader.setUniform2f("uFilterPointSourceIDClipRange", uFilterPointSourceIDClipRange); + } + + let webglBuffer = null; + if(!this.buffers.has(geometry)){ + webglBuffer = this.createBuffer(geometry); + this.buffers.set(geometry, webglBuffer); + }else { + webglBuffer = this.buffers.get(geometry); + for(let attributeName in geometry.attributes){ + let attribute = geometry.attributes[attributeName]; + + if(attribute.version > webglBuffer.vbos.get(attributeName).version){ + this.updateBuffer(geometry); + } + } + } + + gl.bindVertexArray(webglBuffer.vao); + + let isExtraAttribute = + attributeLocations[material.activeAttributeName] === undefined + && Object.keys(geometry.attributes).includes(material.activeAttributeName); + + if(isExtraAttribute){ + + const attributeLocation = attributeLocations["aExtra"].location; + + for(const attributeName in geometry.attributes){ + const bufferAttribute = geometry.attributes[attributeName]; + const vbo = webglBuffer.vbos.get(attributeName); + + gl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle); + gl.disableVertexAttribArray(attributeLocation); + } + + const attName = material.activeAttributeName; + const bufferAttribute = geometry.attributes[attName]; + const vbo = webglBuffer.vbos.get(attName); + + if(bufferAttribute !== undefined && vbo !== undefined){ + let type = this.glTypeMapping.get(bufferAttribute.array.constructor); + let normalized = bufferAttribute.normalized; + + gl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle); + gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); + gl.enableVertexAttribArray(attributeLocation); + } + + + + + { + const attExtra = octree.pcoGeometry.pointAttributes.attributes + .find(a => a.name === attName); + + let range = material.getRange(attName); + if(!range){ + range = attExtra.range; + } + + if(!range){ + range = [0, 1]; + } + + let initialRange = attExtra.initialRange; + let initialRangeSize = initialRange[1] - initialRange[0]; + + let globalRange = range; + let globalRangeSize = globalRange[1] - globalRange[0]; + + let scale = initialRangeSize / globalRangeSize; + let offset = -(globalRange[0] - initialRange[0]) / initialRangeSize; + + scale = Number.isNaN(scale) ? 1 : scale; + offset = Number.isNaN(offset) ? 0 : offset; + + shader.setUniform1f("uExtraScale", scale); + shader.setUniform1f("uExtraOffset", offset); + } + + }else { + + for(const attributeName in geometry.attributes){ + const bufferAttribute = geometry.attributes[attributeName]; + const vbo = webglBuffer.vbos.get(attributeName); + + + if(attributeLocations[attributeName] !== undefined){ + const attributeLocation = attributeLocations[attributeName].location; + + let type = this.glTypeMapping.get(bufferAttribute.array.constructor); + let normalized = bufferAttribute.normalized; + + gl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle); + gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); + gl.enableVertexAttribArray(attributeLocation); + + } + } + } + + let numPoints = webglBuffer.numElements; + gl.drawArrays(gl.POINTS, 0, numPoints); + + i++; + } + + gl.bindVertexArray(null); + + if (exports.measureTimings) { + performance.mark("renderNodes-end"); + performance.measure("render.renderNodes", "renderNodes-start", "renderNodes-end"); + } + } + + renderOctree(octree, nodes, camera, target, params = {}){ + + let gl = this.gl; + + let material = params.material ? params.material : octree.material; + let shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps; + let view = camera.matrixWorldInverse; + let viewInv = camera.matrixWorld; + + if(params.viewOverride){ + view = params.viewOverride; + viewInv = view.clone().invert(); + } + + let proj = camera.projectionMatrix; + let projInv = proj.clone().invert(); + //let worldView = new THREE.Matrix4(); + + let shader = null; + let visibilityTextureData = null; + + let currentTextureBindingPoint = 0; + + if (material.pointSizeType >= 0) { + if (material.pointSizeType === PointSizeType.ADAPTIVE || + material.activeAttributeName === "level of detail") { + + let vnNodes = (params.vnTextureNodes != null) ? params.vnTextureNodes : nodes; + visibilityTextureData = octree.computeVisibilityTextureData(vnNodes, camera); + + const vnt = material.visibleNodesTexture; + const data = vnt.image.data; + data.set(visibilityTextureData.data); + vnt.needsUpdate = true; + + } + } + + { // UPDATE SHADER AND TEXTURES + if (!this.shaders.has(material)) { + let [vs, fs] = [material.vertexShader, material.fragmentShader]; + let shader = new Shader(gl, "pointcloud", vs, fs); + + this.shaders.set(material, shader); + } + + shader = this.shaders.get(material); + + //if(material.needsUpdate){ + { + let [vs, fs] = [material.vertexShader, material.fragmentShader]; + + let numSnapshots = material.snapEnabled ? material.numSnapshots : 0; + let numClipBoxes = (material.clipBoxes && material.clipBoxes.length) ? material.clipBoxes.length : 0; + let numClipSpheres = (params.clipSpheres && params.clipSpheres.length) ? params.clipSpheres.length : 0; + let numClipPolygons = (material.clipPolygons && material.clipPolygons.length) ? material.clipPolygons.length : 0; + + let defines = [ + `#define num_shadowmaps ${shadowMaps.length}`, + `#define num_snapshots ${numSnapshots}`, + `#define num_clipboxes ${numClipBoxes}`, + `#define num_clipspheres ${numClipSpheres}`, + `#define num_clippolygons ${numClipPolygons}`, + ]; + + + if(octree.pcoGeometry.root.isLoaded()){ + let attributes = octree.pcoGeometry.root.geometry.attributes; + + if(attributes["gps-time"]){ + defines.push("#define clip_gps_enabled"); + } + + if(attributes["return number"]){ + defines.push("#define clip_return_number_enabled"); + } + + if(attributes["number of returns"]){ + defines.push("#define clip_number_of_returns_enabled"); + } + + if(attributes["source id"] || attributes["point source id"]){ + defines.push("#define clip_point_source_id_enabled"); + } + + } + + let definesString = defines.join("\n"); + + let vsVersionIndex = vs.indexOf("#version "); + let fsVersionIndex = fs.indexOf("#version "); + + if(vsVersionIndex >= 0){ + vs = vs.replace(/(#version .*)/, `$1\n${definesString}`); + }else { + vs = `${definesString}\n${vs}`; + } + + if(fsVersionIndex >= 0){ + fs = fs.replace(/(#version .*)/, `$1\n${definesString}`); + }else { + fs = `${definesString}\n${fs}`; + } + + + shader.update(vs, fs); + + material.needsUpdate = false; + } + + for (let uniformName of Object.keys(material.uniforms)) { + let uniform = material.uniforms[uniformName]; + + if (uniform.type == "t") { + + let texture = uniform.value; + + if (!texture) { + continue; + } + + if (!this.textures.has(texture)) { + let webglTexture = new WebGLTexture(gl, texture); + + this.textures.set(texture, webglTexture); + } + + let webGLTexture = this.textures.get(texture); + webGLTexture.update(); + + + } + } + } + + gl.useProgram(shader.program); + + let transparent = false; + if(params.transparent !== undefined){ + transparent = params.transparent && material.opacity < 1; + }else { + transparent = material.opacity < 1; + } + + if (transparent){ + gl.enable(gl.BLEND); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE); + gl.depthMask(false); + gl.disable(gl.DEPTH_TEST); + } else { + gl.disable(gl.BLEND); + gl.depthMask(true); + gl.enable(gl.DEPTH_TEST); + } + + if(params.blendFunc !== undefined){ + gl.enable(gl.BLEND); + gl.blendFunc(...params.blendFunc); + } + + if(params.depthTest !== undefined){ + if(params.depthTest === true){ + gl.enable(gl.DEPTH_TEST); + }else { + gl.disable(gl.DEPTH_TEST); + } + } + + if(params.depthWrite !== undefined){ + if(params.depthWrite === true){ + gl.depthMask(true); + }else { + gl.depthMask(false); + } + + } + + + { // UPDATE UNIFORMS + shader.setUniformMatrix4("projectionMatrix", proj); + shader.setUniformMatrix4("viewMatrix", view); + shader.setUniformMatrix4("uViewInv", viewInv); + shader.setUniformMatrix4("uProjInv", projInv); + + let screenWidth = target ? target.width : material.screenWidth; + let screenHeight = target ? target.height : material.screenHeight; + + shader.setUniform1f("uScreenWidth", screenWidth); + shader.setUniform1f("uScreenHeight", screenHeight); + shader.setUniform1f("fov", Math.PI * camera.fov / 180); + shader.setUniform1f("near", camera.near); + shader.setUniform1f("far", camera.far); + + if(camera instanceof OrthographicCamera){ + shader.setUniform("uUseOrthographicCamera", true); + shader.setUniform("uOrthoWidth", camera.right - camera.left); + shader.setUniform("uOrthoHeight", camera.top - camera.bottom); + }else { + shader.setUniform("uUseOrthographicCamera", false); + } + + if(material.clipBoxes.length + material.clipPolygons.length === 0){ + shader.setUniform1i("clipTask", ClipTask.NONE); + }else { + shader.setUniform1i("clipTask", material.clipTask); + } + + shader.setUniform1i("clipMethod", material.clipMethod); + + if (material.clipBoxes && material.clipBoxes.length > 0) { + //let flattenedMatrices = [].concat(...material.clipBoxes.map(c => c.inverse.elements)); + + //const lClipBoxes = shader.uniformLocations["clipBoxes[0]"]; + //gl.uniformMatrix4fv(lClipBoxes, false, flattenedMatrices); + + const lClipBoxes = shader.uniformLocations["clipBoxes[0]"]; + gl.uniformMatrix4fv(lClipBoxes, false, material.uniforms.clipBoxes.value); + } + + // TODO CLIPSPHERES + if(params.clipSpheres && params.clipSpheres.length > 0){ + + let clipSpheres = params.clipSpheres; + + let matrices = []; + for(let clipSphere of clipSpheres){ + //let mScale = new THREE.Matrix4().makeScale(...clipSphere.scale.toArray()); + //let mTranslate = new THREE.Matrix4().makeTranslation(...clipSphere.position.toArray()); + + //let clipToWorld = new THREE.Matrix4().multiplyMatrices(mTranslate, mScale); + let clipToWorld = clipSphere.matrixWorld; + let viewToWorld = camera.matrixWorld; + let worldToClip = clipToWorld.clone().invert(); + + let viewToClip = new Matrix4().multiplyMatrices(worldToClip, viewToWorld); + + matrices.push(viewToClip); + } + + let flattenedMatrices = [].concat(...matrices.map(matrix => matrix.elements)); + + const lClipSpheres = shader.uniformLocations["uClipSpheres[0]"]; + gl.uniformMatrix4fv(lClipSpheres, false, flattenedMatrices); + + //const lClipSpheres = shader.uniformLocations["uClipSpheres[0]"]; + //gl.uniformMatrix4fv(lClipSpheres, false, material.uniforms.clipSpheres.value); + } + + + shader.setUniform1f("size", material.size); + shader.setUniform1f("maxSize", material.uniforms.maxSize.value); + shader.setUniform1f("minSize", material.uniforms.minSize.value); + + + // uniform float uPCIndex + shader.setUniform1f("uOctreeSpacing", material.spacing); + shader.setUniform("uOctreeSize", material.uniforms.octreeSize.value); + + + //uniform vec3 uColor; + shader.setUniform3f("uColor", material.color.toArray()); + //uniform float opacity; + shader.setUniform1f("uOpacity", material.opacity); + + shader.setUniform2f("elevationRange", material.elevationRange); + shader.setUniform2f("intensityRange", material.intensityRange); + + + shader.setUniform3f("uIntensity_gbc", [ + material.intensityGamma, + material.intensityBrightness, + material.intensityContrast + ]); + + shader.setUniform3f("uRGB_gbc", [ + material.rgbGamma, + material.rgbBrightness, + material.rgbContrast + ]); + + shader.setUniform1f("uTransition", material.transition); + shader.setUniform1f("wRGB", material.weightRGB); + shader.setUniform1f("wIntensity", material.weightIntensity); + shader.setUniform1f("wElevation", material.weightElevation); + shader.setUniform1f("wClassification", material.weightClassification); + shader.setUniform1f("wReturnNumber", material.weightReturnNumber); + shader.setUniform1f("wSourceID", material.weightSourceID); + + shader.setUniform("backfaceCulling", material.uniforms.backfaceCulling.value); + + let vnWebGLTexture = this.textures.get(material.visibleNodesTexture); + if(vnWebGLTexture){ + shader.setUniform1i("visibleNodesTexture", currentTextureBindingPoint); + gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); + gl.bindTexture(vnWebGLTexture.target, vnWebGLTexture.id); + currentTextureBindingPoint++; + } + + let gradientTexture = this.textures.get(material.gradientTexture); + shader.setUniform1i("gradient", currentTextureBindingPoint); + gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); + gl.bindTexture(gradientTexture.target, gradientTexture.id); + + const repeat = material.elevationGradientRepeat; + if(repeat === ElevationGradientRepeat.REPEAT){ + gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.REPEAT); + }else if(repeat === ElevationGradientRepeat.MIRRORED_REPEAT){ + gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT); + gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT); + }else { + gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + currentTextureBindingPoint++; + + let classificationTexture = this.textures.get(material.classificationTexture); + shader.setUniform1i("classificationLUT", currentTextureBindingPoint); + gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); + gl.bindTexture(classificationTexture.target, classificationTexture.id); + currentTextureBindingPoint++; + + let matcapTexture = this.textures.get(material.matcapTexture); + shader.setUniform1i("matcapTextureUniform", currentTextureBindingPoint); + gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); + gl.bindTexture(matcapTexture.target, matcapTexture.id); + currentTextureBindingPoint++; + + + if (material.snapEnabled === true) { + + { + const lSnapshot = shader.uniformLocations["uSnapshot[0]"]; + const lSnapshotDepth = shader.uniformLocations["uSnapshotDepth[0]"]; + + let bindingStart = currentTextureBindingPoint; + let lSnapshotBindingPoints = new Array(5).fill(bindingStart).map((a, i) => (a + i)); + let lSnapshotDepthBindingPoints = new Array(5) + .fill(1 + Math.max(...lSnapshotBindingPoints)) + .map((a, i) => (a + i)); + currentTextureBindingPoint = 1 + Math.max(...lSnapshotDepthBindingPoints); + + gl.uniform1iv(lSnapshot, lSnapshotBindingPoints); + gl.uniform1iv(lSnapshotDepth, lSnapshotDepthBindingPoints); + + for (let i = 0; i < 5; i++) { + let texture = material.uniforms[`uSnapshot`].value[i]; + let textureDepth = material.uniforms[`uSnapshotDepth`].value[i]; + + if (!texture) { + break; + } + + let snapTexture = this.threeRenderer.properties.get(texture).__webglTexture; + let snapTextureDepth = this.threeRenderer.properties.get(textureDepth).__webglTexture; + + let bindingPoint = lSnapshotBindingPoints[i]; + let depthBindingPoint = lSnapshotDepthBindingPoints[i]; + + gl.activeTexture(gl[`TEXTURE${bindingPoint}`]); + gl.bindTexture(gl.TEXTURE_2D, snapTexture); + + gl.activeTexture(gl[`TEXTURE${depthBindingPoint}`]); + gl.bindTexture(gl.TEXTURE_2D, snapTextureDepth); + } + } + + { + let flattenedMatrices = [].concat(...material.uniforms.uSnapView.value.map(c => c.elements)); + const lSnapView = shader.uniformLocations["uSnapView[0]"]; + gl.uniformMatrix4fv(lSnapView, false, flattenedMatrices); + } + { + let flattenedMatrices = [].concat(...material.uniforms.uSnapProj.value.map(c => c.elements)); + const lSnapProj = shader.uniformLocations["uSnapProj[0]"]; + gl.uniformMatrix4fv(lSnapProj, false, flattenedMatrices); + } + { + let flattenedMatrices = [].concat(...material.uniforms.uSnapProjInv.value.map(c => c.elements)); + const lSnapProjInv = shader.uniformLocations["uSnapProjInv[0]"]; + gl.uniformMatrix4fv(lSnapProjInv, false, flattenedMatrices); + } + { + let flattenedMatrices = [].concat(...material.uniforms.uSnapViewInv.value.map(c => c.elements)); + const lSnapViewInv = shader.uniformLocations["uSnapViewInv[0]"]; + gl.uniformMatrix4fv(lSnapViewInv, false, flattenedMatrices); + } + + } + } + + this.renderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params); + + gl.activeTexture(gl.TEXTURE2); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.activeTexture(gl.TEXTURE0); + } + + render(scene, camera, target = null, params = {}) { + + const gl = this.gl; + + // PREPARE + if (target != null) { + this.threeRenderer.setRenderTarget(target); + } + + //camera.updateProjectionMatrix(); + // camera.matrixWorldInverse.invert(camera.matrixWorld); + + const traversalResult = this.traverse(scene); + + + // RENDER + for (const octree of traversalResult.octrees) { + let nodes = octree.visibleNodes; + this.renderOctree(octree, nodes, camera, target, params); + } + + + // CLEANUP + gl.activeTexture(gl.TEXTURE1); + gl.bindTexture(gl.TEXTURE_2D, null); + gl.bindBuffer(gl.ARRAY_BUFFER, null); + gl.bindVertexArray(null); + + this.threeRenderer.resetState(); + } + + + + }; + + class ProfileData { + constructor (profile) { + this.profile = profile; + + this.segments = []; + this.boundingBox = new Box3(); + + for (let i = 0; i < profile.points.length - 1; i++) { + let start = profile.points[i]; + let end = profile.points[i + 1]; + + let startGround = new Vector3(start.x, start.y, 0); + let endGround = new Vector3(end.x, end.y, 0); + + let center = new Vector3().addVectors(endGround, startGround).multiplyScalar(0.5); + let length = startGround.distanceTo(endGround); + let side = new Vector3().subVectors(endGround, startGround).normalize(); + let up = new Vector3(0, 0, 1); + let forward = new Vector3().crossVectors(side, up).normalize(); + let N = forward; + let cutPlane = new Plane().setFromNormalAndCoplanarPoint(N, startGround); + let halfPlane = new Plane().setFromNormalAndCoplanarPoint(side, center); + + let segment = { + start: start, + end: end, + cutPlane: cutPlane, + halfPlane: halfPlane, + length: length, + points: new Points$1() + }; + + this.segments.push(segment); + } + } + + size () { + let size = 0; + for (let segment of this.segments) { + size += segment.points.numPoints; + } + + return size; + } + }; + + class ProfileRequest { + constructor (pointcloud, profile, maxDepth, callback) { + this.pointcloud = pointcloud; + this.profile = profile; + this.maxDepth = maxDepth || Number.MAX_VALUE; + this.callback = callback; + this.temporaryResult = new ProfileData(this.profile); + this.pointsServed = 0; + this.highestLevelServed = 0; + + this.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; }); + + this.initialize(); + } + + initialize () { + this.priorityQueue.push({node: this.pointcloud.pcoGeometry.root, weight: Infinity}); + }; + + // traverse the node and add intersecting descendants to queue + traverse (node) { + let stack = []; + for (let i = 0; i < 8; i++) { + let child = node.children[i]; + if (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) { + stack.push(child); + } + } + + while (stack.length > 0) { + let node = stack.pop(); + let weight = node.boundingSphere.radius; + + this.priorityQueue.push({node: node, weight: weight}); + + // add children that intersect the cutting plane + if (node.level < this.maxDepth) { + for (let i = 0; i < 8; i++) { + let child = node.children[i]; + if (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) { + stack.push(child); + } + } + } + } + } + + update(){ + if(!this.updateGeneratorInstance){ + this.updateGeneratorInstance = this.updateGenerator(); + } + + let result = this.updateGeneratorInstance.next(); + if(result.done){ + this.updateGeneratorInstance = null; + } + } + + * updateGenerator(){ + // load nodes in queue + // if hierarchy expands, also load nodes from expanded hierarchy + // once loaded, add data to this.points and remove node from queue + // only evaluate 1-50 nodes per frame to maintain responsiveness + + let start = performance.now(); + + let maxNodesPerUpdate = 1; + let intersectedNodes = []; + + for (let i = 0; i < Math.min(maxNodesPerUpdate, this.priorityQueue.size()); i++) { + let element = this.priorityQueue.pop(); + let node = element.node; + + if(node.level > this.maxDepth){ + continue; + } + + if (node.loaded) { + // add points to result + intersectedNodes.push(node); + exports.lru.touch(node); + this.highestLevelServed = Math.max(node.getLevel(), this.highestLevelServed); + + var geom = node.pcoGeometry; + var hierarchyStepSize = geom ? geom.hierarchyStepSize : 1; + + var doTraverse = node.getLevel() === 0 || + (node.level % hierarchyStepSize === 0 && node.hasChildren); + + if (doTraverse) { + this.traverse(node); + } + } else { + node.load(); + this.priorityQueue.push(element); + } + } + + if (intersectedNodes.length > 0) { + + for(let done of this.getPointsInsideProfile(intersectedNodes, this.temporaryResult)){ + if(!done){ + //console.log("updateGenerator yields"); + yield false; + } + } + if (this.temporaryResult.size() > 100) { + this.pointsServed += this.temporaryResult.size(); + this.callback.onProgress({request: this, points: this.temporaryResult}); + this.temporaryResult = new ProfileData(this.profile); + } + } + + if (this.priorityQueue.size() === 0) { + // we're done! inform callback and remove from pending requests + + if (this.temporaryResult.size() > 0) { + this.pointsServed += this.temporaryResult.size(); + this.callback.onProgress({request: this, points: this.temporaryResult}); + this.temporaryResult = new ProfileData(this.profile); + } + + this.callback.onFinish({request: this}); + + let index = this.pointcloud.profileRequests.indexOf(this); + if (index >= 0) { + this.pointcloud.profileRequests.splice(index, 1); + } + } + + yield true; + }; + + * getAccepted(numPoints, node, matrix, segment, segmentDir, points, totalMileage){ + let checkpoint = performance.now(); + + let accepted = new Uint32Array(numPoints); + let mileage = new Float64Array(numPoints); + let acceptedPositions = new Float32Array(numPoints * 3); + let numAccepted = 0; + + let pos = new Vector3(); + let svp = new Vector3(); + + let view = new Float32Array(node.geometry.attributes.position.array); + + for (let i = 0; i < numPoints; i++) { + + pos.set( + view[i * 3 + 0], + view[i * 3 + 1], + view[i * 3 + 2]); + + pos.applyMatrix4(matrix); + let distance = Math.abs(segment.cutPlane.distanceToPoint(pos)); + let centerDistance = Math.abs(segment.halfPlane.distanceToPoint(pos)); + + if (distance < this.profile.width / 2 && centerDistance < segment.length / 2) { + svp.subVectors(pos, segment.start); + let localMileage = segmentDir.dot(svp); + + accepted[numAccepted] = i; + mileage[numAccepted] = localMileage + totalMileage; + points.boundingBox.expandByPoint(pos); + + pos.sub(this.pointcloud.position); + + acceptedPositions[3 * numAccepted + 0] = pos.x; + acceptedPositions[3 * numAccepted + 1] = pos.y; + acceptedPositions[3 * numAccepted + 2] = pos.z; + + numAccepted++; + } + + if((i % 1000) === 0){ + let duration = performance.now() - checkpoint; + if(duration > 4){ + //console.log(`getAccepted yield after ${duration}ms`); + yield false; + checkpoint = performance.now(); + } + } + } + + accepted = accepted.subarray(0, numAccepted); + mileage = mileage.subarray(0, numAccepted); + acceptedPositions = acceptedPositions.subarray(0, numAccepted * 3); + + //let end = performance.now(); + //let duration = end - start; + //console.log("accepted duration ", duration) + + //console.log(`getAccepted finished`); + + yield [accepted, mileage, acceptedPositions]; + } + + * getPointsInsideProfile(nodes, target){ + let checkpoint = performance.now(); + let totalMileage = 0; + + let pointsProcessed = 0; + + for (let segment of target.segments) { + for (let node of nodes) { + let numPoints = node.numPoints; + let geometry = node.geometry; + + if(!numPoints){ + continue; + } + + { // skip if current node doesn't intersect current segment + let bbWorld = node.boundingBox.clone().applyMatrix4(this.pointcloud.matrixWorld); + let bsWorld = bbWorld.getBoundingSphere(new Sphere()); + + let start = new Vector3(segment.start.x, segment.start.y, bsWorld.center.z); + let end = new Vector3(segment.end.x, segment.end.y, bsWorld.center.z); + + let closest = new Line3(start, end).closestPointToPoint(bsWorld.center, true, new Vector3()); + let distance = closest.distanceTo(bsWorld.center); + + let intersects = (distance < (bsWorld.radius + target.profile.width)); + + if(!intersects){ + continue; + } + } + + //{// DEBUG + // console.log(node.name); + // let boxHelper = new Potree.Box3Helper(node.getBoundingBox()); + // boxHelper.matrixAutoUpdate = false; + // boxHelper.matrix.copy(viewer.scene.pointclouds[0].matrixWorld); + // viewer.scene.scene.add(boxHelper); + //} + + let sv = new Vector3().subVectors(segment.end, segment.start).setZ(0); + let segmentDir = sv.clone().normalize(); + + let points = new Points$1(); + + let nodeMatrix = new Matrix4().makeTranslation(...node.boundingBox.min.toArray()); + + let matrix = new Matrix4().multiplyMatrices( + this.pointcloud.matrixWorld, nodeMatrix); + + pointsProcessed = pointsProcessed + numPoints; + + let accepted = null; + let mileage = null; + let acceptedPositions = null; + for(let result of this.getAccepted(numPoints, node, matrix, segment, segmentDir, points,totalMileage)){ + if(!result){ + let duration = performance.now() - checkpoint; + //console.log(`getPointsInsideProfile yield after ${duration}ms`); + yield false; + checkpoint = performance.now(); + }else { + [accepted, mileage, acceptedPositions] = result; + } + } + + let duration = performance.now() - checkpoint; + if(duration > 4){ + //console.log(`getPointsInsideProfile yield after ${duration}ms`); + yield false; + checkpoint = performance.now(); + } + + points.data.position = acceptedPositions; + + let relevantAttributes = Object.keys(geometry.attributes).filter(a => !["position", "indices"].includes(a)); + for(let attributeName of relevantAttributes){ + + let attribute = geometry.attributes[attributeName]; + let numElements = attribute.array.length / numPoints; + + if(numElements !== parseInt(numElements)){ + debugger; + } + + let Type = attribute.array.constructor; + + let filteredBuffer = new Type(numElements * accepted.length); + + let source = attribute.array; + let target = filteredBuffer; + + for(let i = 0; i < accepted.length; i++){ + + let index = accepted[i]; + + let start = index * numElements; + let end = start + numElements; + let sub = source.subarray(start, end); + + target.set(sub, i * numElements); + } + + points.data[attributeName] = filteredBuffer; + } + + points.data['mileage'] = mileage; + points.numPoints = accepted.length; + + segment.points.add(points); + } + + totalMileage += segment.length; + } + + for (let segment of target.segments) { + target.boundingBox.union(segment.points.boundingBox); + } + + //console.log(`getPointsInsideProfile finished`); + yield true; + }; + + finishLevelThenCancel () { + if (this.cancelRequested) { + return; + } + + this.maxDepth = this.highestLevelServed; + this.cancelRequested = true; + + //console.log(`maxDepth: ${this.maxDepth}`); + }; + + cancel () { + this.callback.onCancel(); + + this.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; }); + + let index = this.pointcloud.profileRequests.indexOf(this); + if (index >= 0) { + this.pointcloud.profileRequests.splice(index, 1); + } + }; + } + + class Version{ + + constructor(version){ + this.version = version; + let vmLength = (version.indexOf('.') === -1) ? version.length : version.indexOf('.'); + this.versionMajor = parseInt(version.substr(0, vmLength)); + this.versionMinor = parseInt(version.substr(vmLength + 1)); + if (this.versionMinor.length === 0) { + this.versionMinor = 0; + } + } + + newerThan(version){ + let v = new Version(version); + + if (this.versionMajor > v.versionMajor) { + return true; + } else if (this.versionMajor === v.versionMajor && this.versionMinor > v.versionMinor) { + return true; + } else { + return false; + } + } + + equalOrHigher(version){ + let v = new Version(version); + + if (this.versionMajor > v.versionMajor) { + return true; + } else if (this.versionMajor === v.versionMajor && this.versionMinor >= v.versionMinor) { + return true; + } else { + return false; + } + } + + upTo(version){ + return !this.newerThan(version); + } + + } + + class WorkerPool{ + constructor(){ + this.workers = {}; + } + + getWorker(url){ + if (!this.workers[url]){ + this.workers[url] = []; + } + + if (this.workers[url].length === 0){ + let worker = new Worker(url); + this.workers[url].push(worker); + } + + let worker = this.workers[url].pop(); + + return worker; + } + + returnWorker(url, worker){ + this.workers[url].push(worker); + } + }; + + //Potree.workerPool = new Potree.WorkerPool(); + + function createPointcloudData(pointcloud) { + + let material = pointcloud.material; + + let ranges = []; + + for(let [name, value] of material.ranges){ + ranges.push({ + name: name, + value: value, + }); + } + + if(typeof material.elevationRange[0] === "number"){ + ranges.push({ + name: "elevationRange", + value: material.elevationRange, + }); + } + if(typeof material.intensityRange[0] === "number"){ + ranges.push({ + name: "intensityRange", + value: material.intensityRange, + }); + } + + let pointSizeTypeName = Object.entries(Potree.PointSizeType).find(e => e[1] === material.pointSizeType)[0]; + + let jsonMaterial = { + activeAttributeName: material.activeAttributeName, + ranges: ranges, + size: material.size, + minSize: material.minSize, + pointSizeType: pointSizeTypeName, + matcap: material.matcap, + }; + + const pcdata = { + name: pointcloud.name, + url: pointcloud.pcoGeometry.url, + position: pointcloud.position.toArray(), + rotation: pointcloud.rotation.toArray(), + scale: pointcloud.scale.toArray(), + material: jsonMaterial, + }; + + return pcdata; + } + + function createProfileData(profile){ + const data = { + uuid: profile.uuid, + name: profile.name, + points: profile.points.map(p => p.toArray()), + height: profile.height, + width: profile.width, + }; + + return data; + } + + function createVolumeData(volume){ + const data = { + uuid: volume.uuid, + type: volume.constructor.name, + name: volume.name, + position: volume.position.toArray(), + rotation: volume.rotation.toArray(), + scale: volume.scale.toArray(), + visible: volume.visible, + clip: volume.clip, + }; + + return data; + } + + function createCameraAnimationData(animation){ + + const controlPoints = animation.controlPoints.map( cp => { + const cpdata = { + position: cp.position.toArray(), + target: cp.target.toArray(), + }; + + return cpdata; + }); + + const data = { + uuid: animation.uuid, + name: animation.name, + duration: animation.duration, + t: animation.t, + curveType: animation.curveType, + visible: animation.visible, + controlPoints: controlPoints, + }; + + return data; + } + + function createMeasurementData(measurement){ + + const data = { + uuid: measurement.uuid, + name: measurement.name, + points: measurement.points.map(p => p.position.toArray()), + showDistances: measurement.showDistances, + showCoordinates: measurement.showCoordinates, + showArea: measurement.showArea, + closed: measurement.closed, + showAngles: measurement.showAngles, + showHeight: measurement.showHeight, + showCircle: measurement.showCircle, + showAzimuth: measurement.showAzimuth, + showEdges: measurement.showEdges, + color: measurement.color.toArray(), + }; + + return data; + } + + function createOrientedImagesData(images){ + const data = { + cameraParamsPath: images.cameraParamsPath, + imageParamsPath: images.imageParamsPath, + }; + + return data; + } + + function createGeopackageData(geopackage){ + const data = { + path: geopackage.path, + }; + + return data; + } + + function createAnnotationData(annotation){ + + const data = { + uuid: annotation.uuid, + title: annotation.title.toString(), + description: annotation.description, + position: annotation.position.toArray(), + offset: annotation.offset.toArray(), + children: [], + }; + + if(annotation.cameraPosition){ + data.cameraPosition = annotation.cameraPosition.toArray(); + } + + if(annotation.cameraTarget){ + data.cameraTarget = annotation.cameraTarget.toArray(); + } + + if(typeof annotation.radius !== "undefined"){ + data.radius = annotation.radius; + } + + return data; + } + + function createAnnotationsData(viewer){ + + const map = new Map(); + + viewer.scene.annotations.traverseDescendants(a => { + const aData = createAnnotationData(a); + + map.set(a, aData); + }); + + for(const [annotation, data] of map){ + for(const child of annotation.children){ + const childData = map.get(child); + data.children.push(childData); + } + } + + const annotations = viewer.scene.annotations.children.map(a => map.get(a)); + + return annotations; + } + + function createSettingsData(viewer){ + return { + pointBudget: viewer.getPointBudget(), + fov: viewer.getFOV(), + edlEnabled: viewer.getEDLEnabled(), + edlRadius: viewer.getEDLRadius(), + edlStrength: viewer.getEDLStrength(), + background: viewer.getBackground(), + minNodeSize: viewer.getMinNodeSize(), + showBoundingBoxes: viewer.getShowBoundingBox(), + }; + } + + function createSceneContentData(viewer){ + + const data = []; + + const potreeObjects = []; + + viewer.scene.scene.traverse(node => { + if(node.potree){ + potreeObjects.push(node); + } + }); + + for(const object of potreeObjects){ + + if(object.potree.file){ + const saveObject = { + file: object.potree.file, + }; + + data.push(saveObject); + } + + + } + + + return data; + } + + function createViewData(viewer){ + const view = viewer.scene.view; + + const data = { + position: view.position.toArray(), + target: view.getPivot().toArray(), + }; + + return data; + } + + function createClassificationData(viewer){ + const classifications = viewer.classifications; + + const data = classifications; + + return data; + } + + function saveProject(viewer) { + + const scene = viewer.scene; + + const data = { + type: "Potree", + version: 1.7, + settings: createSettingsData(viewer), + view: createViewData(viewer), + classification: createClassificationData(viewer), + pointclouds: scene.pointclouds.map(createPointcloudData), + measurements: scene.measurements.map(createMeasurementData), + volumes: scene.volumes.map(createVolumeData), + cameraAnimations: scene.cameraAnimations.map(createCameraAnimationData), + profiles: scene.profiles.map(createProfileData), + annotations: createAnnotationsData(viewer), + orientedImages: scene.orientedImages.map(createOrientedImagesData), + geopackages: scene.geopackages.map(createGeopackageData), + // objects: createSceneContentData(viewer), + }; + + return data; + } + + class ControlPoint{ + + constructor(){ + this.position = new Vector3(0, 0, 0); + this.target = new Vector3(0, 0, 0); + this.positionHandle = null; + this.targetHandle = null; + } + + }; + + + + class CameraAnimation extends EventDispatcher{ + + constructor(viewer){ + super(); + + this.viewer = viewer; + + this.selectedElement = null; + + this.controlPoints = []; + + this.uuid = MathUtils.generateUUID(); + + this.node = new Object3D(); + this.node.name = "camera animation"; + this.viewer.scene.scene.add(this.node); + + this.frustum = this.createFrustum(); + this.node.add(this.frustum); + + this.name = "Camera Animation"; + this.duration = 5; + this.t = 0; + // "centripetal", "chordal", "catmullrom" + this.curveType = "centripetal"; + this.visible = true; + + this.createUpdateHook(); + this.createPath(); + } + + static defaultFromView(viewer){ + const animation = new CameraAnimation(viewer); + + const camera = viewer.scene.getActiveCamera(); + const target = viewer.scene.view.getPivot(); + + const cpCenter = new Vector3( + 0.3 * camera.position.x + 0.7 * target.x, + 0.3 * camera.position.y + 0.7 * target.y, + 0.3 * camera.position.z + 0.7 * target.z, + ); + + const targetCenter = new Vector3( + 0.05 * camera.position.x + 0.95 * target.x, + 0.05 * camera.position.y + 0.95 * target.y, + 0.05 * camera.position.z + 0.95 * target.z, + ); + + const r = camera.position.distanceTo(target) * 0.3; + + //const dir = target.clone().sub(camera.position).normalize(); + const angle = Utils.computeAzimuth(camera.position, target); + + const n = 5; + for(let i = 0; i < n; i++){ + let u = 1.5 * Math.PI * (i / n) + angle; + + const dx = r * Math.cos(u); + const dy = r * Math.sin(u); + + const cpPos = [ + cpCenter.x + dx, + cpCenter.y + dy, + cpCenter.z, + ]; + + const targetPos = [ + targetCenter.x + dx * 0.1, + targetCenter.y + dy * 0.1, + targetCenter.z, + ]; + + const cp = animation.createControlPoint(); + cp.position.set(...cpPos); + cp.target.set(...targetPos); + } + + return animation; + } + + createUpdateHook(){ + const viewer = this.viewer; + + viewer.addEventListener("update", () => { + + const camera = viewer.scene.getActiveCamera(); + const {width, height} = viewer.renderer.getSize(new Vector2()); + + this.node.visible = this.visible; + + for(const cp of this.controlPoints){ + + { // position + const projected = cp.position.clone().project(camera); + + const visible = this.visible && (projected.z < 1 && projected.z > -1); + + if(visible){ + const x = width * (projected.x * 0.5 + 0.5); + const y = height - height * (projected.y * 0.5 + 0.5); + + cp.positionHandle.svg.style.left = x - cp.positionHandle.svg.clientWidth / 2; + cp.positionHandle.svg.style.top = y - cp.positionHandle.svg.clientHeight / 2; + cp.positionHandle.svg.style.display = ""; + }else { + cp.positionHandle.svg.style.display = "none"; + } + } + + { // target + const projected = cp.target.clone().project(camera); + + const visible = this.visible && (projected.z < 1 && projected.z > -1); + + if(visible){ + const x = width * (projected.x * 0.5 + 0.5); + const y = height - height * (projected.y * 0.5 + 0.5); + + cp.targetHandle.svg.style.left = x - cp.targetHandle.svg.clientWidth / 2; + cp.targetHandle.svg.style.top = y - cp.targetHandle.svg.clientHeight / 2; + cp.targetHandle.svg.style.display = ""; + }else { + cp.targetHandle.svg.style.display = "none"; + } + } + + } + + this.line.material.resolution.set(width, height); + + this.updatePath(); + + { // frustum + const frame = this.at(this.t); + const frustum = this.frustum; + + frustum.position.copy(frame.position); + frustum.lookAt(...frame.target.toArray()); + frustum.scale.set(20, 20, 20); + + frustum.material.resolution.set(width, height); + } + + }); + } + + createControlPoint(index){ + + if(index === undefined){ + index = this.controlPoints.length; + } + + const cp = new ControlPoint(); + + + if(this.controlPoints.length >= 2 && index === 0){ + const cp1 = this.controlPoints[0]; + const cp2 = this.controlPoints[1]; + + const dir = cp1.position.clone().sub(cp2.position).multiplyScalar(0.5); + cp.position.copy(cp1.position).add(dir); + + const tDir = cp1.target.clone().sub(cp2.target).multiplyScalar(0.5); + cp.target.copy(cp1.target).add(tDir); + }else if(this.controlPoints.length >= 2 && index === this.controlPoints.length){ + const cp1 = this.controlPoints[this.controlPoints.length - 2]; + const cp2 = this.controlPoints[this.controlPoints.length - 1]; + + const dir = cp2.position.clone().sub(cp1.position).multiplyScalar(0.5); + cp.position.copy(cp1.position).add(dir); + + const tDir = cp2.target.clone().sub(cp1.target).multiplyScalar(0.5); + cp.target.copy(cp2.target).add(tDir); + }else if(this.controlPoints.length >= 2){ + const cp1 = this.controlPoints[index - 1]; + const cp2 = this.controlPoints[index]; + + cp.position.copy(cp1.position.clone().add(cp2.position).multiplyScalar(0.5)); + cp.target.copy(cp1.target.clone().add(cp2.target).multiplyScalar(0.5)); + } + + // cp.position.copy(viewer.scene.view.position); + // cp.target.copy(viewer.scene.view.getPivot()); + + cp.positionHandle = this.createHandle(cp.position); + cp.targetHandle = this.createHandle(cp.target); + + this.controlPoints.splice(index, 0, cp); + + this.dispatchEvent({ + type: "controlpoint_added", + controlpoint: cp, + }); + + return cp; + } + + removeControlPoint(cp){ + this.controlPoints = this.controlPoints.filter(_cp => _cp !== cp); + + this.dispatchEvent({ + type: "controlpoint_removed", + controlpoint: cp, + }); + + cp.positionHandle.svg.remove(); + cp.targetHandle.svg.remove(); + + // TODO destroy cp + } + + createPath(){ + + { // position + const geometry = new LineGeometry(); + + let material = new LineMaterial({ + color: 0x00ff00, + dashSize: 5, + gapSize: 2, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + const line = new Line2(geometry, material); + + this.line = line; + this.node.add(line); + } + + { // target + const geometry = new LineGeometry(); + + let material = new LineMaterial({ + color: 0x0000ff, + dashSize: 5, + gapSize: 2, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + const line = new Line2(geometry, material); + + this.targetLine = line; + this.node.add(line); + } + } + + createFrustum(){ + + const f = 0.3; + + const positions = [ + 0, 0, 0, + -f, -f, +1, + + 0, 0, 0, + f, -f, +1, + + 0, 0, 0, + f, f, +1, + + 0, 0, 0, + -f, f, +1, + + -f, -f, +1, + f, -f, +1, + + f, -f, +1, + f, f, +1, + + f, f, +1, + -f, f, +1, + + -f, f, +1, + -f, -f, +1, + ]; + + const geometry = new LineGeometry(); + + geometry.setPositions(positions); + geometry.verticesNeedUpdate = true; + geometry.computeBoundingSphere(); + + let material = new LineMaterial({ + color: 0xff0000, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + const line = new Line2(geometry, material); + line.computeLineDistances(); + + return line; + } + + updatePath(){ + + { // positions + const positions = this.controlPoints.map(cp => cp.position); + const first = positions[0]; + + const curve = new CatmullRomCurve3(positions); + curve.curveType = this.curveType; + + const n = 100; + + const curvePositions = []; + for(let k = 0; k <= n; k++){ + const t = k / n; + + const position = curve.getPoint(t).sub(first); + + curvePositions.push(position.x, position.y, position.z); + } + + this.line.geometry.setPositions(curvePositions); + this.line.geometry.verticesNeedUpdate = true; + this.line.geometry.computeBoundingSphere(); + this.line.position.copy(first); + this.line.computeLineDistances(); + + this.cameraCurve = curve; + } + + { // targets + const positions = this.controlPoints.map(cp => cp.target); + const first = positions[0]; + + const curve = new CatmullRomCurve3(positions); + curve.curveType = this.curveType; + + const n = 100; + + const curvePositions = []; + for(let k = 0; k <= n; k++){ + const t = k / n; + + const position = curve.getPoint(t).sub(first); + + curvePositions.push(position.x, position.y, position.z); + } + + this.targetLine.geometry.setPositions(curvePositions); + this.targetLine.geometry.verticesNeedUpdate = true; + this.targetLine.geometry.computeBoundingSphere(); + this.targetLine.position.copy(first); + this.targetLine.computeLineDistances(); + + this.targetCurve = curve; + } + } + + at(t){ + + if(t > 1){ + t = 1; + }else if(t < 0){ + t = 0; + } + + const camPos = this.cameraCurve.getPointAt(t); + const target = this.targetCurve.getPointAt(t); + + const frame = { + position: camPos, + target: target, + }; + + return frame; + } + + set(t){ + this.t = t; + } + + createHandle(vector){ + + const svgns = "http://www.w3.org/2000/svg"; + const svg = document.createElementNS(svgns, "svg"); + + svg.setAttribute("width", "2em"); + svg.setAttribute("height", "2em"); + svg.setAttribute("position", "absolute"); + + svg.style.left = "50px"; + svg.style.top = "50px"; + svg.style.position = "absolute"; + svg.style.zIndex = "10000"; + + const circle = document.createElementNS(svgns, 'circle'); + circle.setAttributeNS(null, 'cx', "1em"); + circle.setAttributeNS(null, 'cy', "1em"); + circle.setAttributeNS(null, 'r', "0.5em"); + circle.setAttributeNS(null, 'style', 'fill: red; stroke: black; stroke-width: 0.2em;' ); + svg.appendChild(circle); + + + const element = this.viewer.renderer.domElement.parentElement; + element.appendChild(svg); + + + const startDrag = (evt) => { + this.selectedElement = svg; + + document.addEventListener("mousemove", drag); + }; + + const endDrag = (evt) => { + this.selectedElement = null; + + document.removeEventListener("mousemove", drag); + }; + + const drag = (evt) => { + if (this.selectedElement) { + evt.preventDefault(); + + const rect = viewer.renderer.domElement.getBoundingClientRect(); + + const x = evt.clientX - rect.x; + const y = evt.clientY - rect.y; + + const {width, height} = this.viewer.renderer.getSize(new Vector2()); + const camera = this.viewer.scene.getActiveCamera(); + //const cp = this.controlPoints.find(cp => cp.handle.svg === svg); + const projected = vector.clone().project(camera); + + projected.x = ((x / width) - 0.5) / 0.5; + projected.y = (-(y - height) / height - 0.5) / 0.5; + + const unprojected = projected.clone().unproject(camera); + vector.set(unprojected.x, unprojected.y, unprojected.z); + + + } + }; + + svg.addEventListener('mousedown', startDrag); + svg.addEventListener('mouseup', endDrag); + + const handle = { + svg: svg, + }; + + return handle; + } + + setVisible(visible){ + this.node.visible = visible; + + const display = visible ? "" : "none"; + + for(const cp of this.controlPoints){ + cp.positionHandle.svg.style.display = display; + cp.targetHandle.svg.style.display = display; + } + + this.visible = visible; + } + + setDuration(duration){ + this.duration = duration; + } + + getDuration(duration){ + return this.duration; + } + + play(){ + + const tStart = performance.now(); + const duration = this.duration; + + const originalyVisible = this.visible; + this.setVisible(false); + + const onUpdate = (delta) => { + + let tNow = performance.now(); + let elapsed = (tNow - tStart) / 1000; + let t = elapsed / duration; + + this.set(t); + + const frame = this.at(t); + + viewer.scene.view.position.copy(frame.position); + viewer.scene.view.lookAt(frame.target); + + + if(t > 1){ + this.setVisible(originalyVisible); + + this.viewer.removeEventListener("update", onUpdate); + } + + }; + + this.viewer.addEventListener("update", onUpdate); + + } + + } + + function loadPointCloud(viewer, data){ + + let loadMaterial = (target) => { + + if(data.material){ + + if(data.material.activeAttributeName != null){ + target.activeAttributeName = data.material.activeAttributeName; + } + + if(data.material.ranges != null){ + for(let range of data.material.ranges){ + + if(range.name === "elevationRange"){ + target.elevationRange = range.value; + }else if(range.name === "intensityRange"){ + target.intensityRange = range.value; + }else { + target.setRange(range.name, range.value); + } + + } + } + + if(data.material.size != null){ + target.size = data.material.size; + } + + if(data.material.minSize != null){ + target.minSize = data.material.minSize; + } + + if(data.material.pointSizeType != null){ + target.pointSizeType = PointSizeType[data.material.pointSizeType]; + } + + if(data.material.matcap != null){ + target.matcap = data.material.matcap; + } + + }else if(data.activeAttributeName != null){ + target.activeAttributeName = data.activeAttributeName; + }else { + // no material data + } + + }; + + const promise = new Promise((resolve) => { + + const names = viewer.scene.pointclouds.map(p => p.name); + const alreadyExists = names.includes(data.name); + + if(alreadyExists){ + resolve(); + return; + } + + Potree.loadPointCloud(data.url, data.name, (e) => { + const {pointcloud} = e; + + pointcloud.position.set(...data.position); + pointcloud.rotation.set(...data.rotation); + pointcloud.scale.set(...data.scale); + + loadMaterial(pointcloud.material); + + viewer.scene.addPointCloud(pointcloud); + + resolve(pointcloud); + }); + }); + + return promise; + } + + function loadMeasurement(viewer, data){ + + const duplicate = viewer.scene.measurements.find(measure => measure.uuid === data.uuid); + if(duplicate){ + return; + } + + const measure = new Measure(); + + measure.uuid = data.uuid; + measure.name = data.name; + measure.showDistances = data.showDistances; + measure.showCoordinates = data.showCoordinates; + measure.showArea = data.showArea; + measure.closed = data.closed; + measure.showAngles = data.showAngles; + measure.showHeight = data.showHeight; + measure.showCircle = data.showCircle; + measure.showAzimuth = data.showAzimuth; + measure.showEdges = data.showEdges; + // color + + for(const point of data.points){ + const pos = new Vector3(...point); + measure.addMarker(pos); + } + + viewer.scene.addMeasurement(measure); + + } + + function loadVolume(viewer, data){ + + const duplicate = viewer.scene.volumes.find(volume => volume.uuid === data.uuid); + if(duplicate){ + return; + } + + let volume = new Potree[data.type]; + + volume.uuid = data.uuid; + volume.name = data.name; + volume.position.set(...data.position); + volume.rotation.set(...data.rotation); + volume.scale.set(...data.scale); + volume.visible = data.visible; + volume.clip = data.clip; + + viewer.scene.addVolume(volume); + } + + function loadCameraAnimation(viewer, data){ + + const duplicate = viewer.scene.cameraAnimations.find(a => a.uuid === data.uuid); + if(duplicate){ + return; + } + + const animation = new CameraAnimation(viewer); + + animation.uuid = data.uuid; + animation.name = data.name; + animation.duration = data.duration; + animation.t = data.t; + animation.curveType = data.curveType; + animation.visible = data.visible; + animation.controlPoints = []; + + for(const cpdata of data.controlPoints){ + const cp = animation.createControlPoint(); + + cp.position.set(...cpdata.position); + cp.target.set(...cpdata.target); + } + + viewer.scene.addCameraAnimation(animation); + } + + function loadOrientedImages(viewer, images){ + + const {cameraParamsPath, imageParamsPath} = images; + + const duplicate = viewer.scene.orientedImages.find(i => i.imageParamsPath === imageParamsPath); + if(duplicate){ + return; + } + + Potree.OrientedImageLoader.load(cameraParamsPath, imageParamsPath, viewer).then( images => { + viewer.scene.addOrientedImages(images); + }); + + } + + function loadGeopackage(viewer, geopackage){ + + const path = geopackage.path; + + const duplicate = viewer.scene.geopackages.find(i => i.path === path); + if(duplicate){ + return; + } + + const projection = viewer.getProjection(); + + proj4.defs("WGS84", "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"); + proj4.defs("pointcloud", projection); + const transform = proj4("WGS84", "pointcloud"); + const params = { + transform: transform, + }; + + Potree.GeoPackageLoader.loadUrl(path, params).then(data => { + viewer.scene.addGeopackage(data); + }); + + + } + + function loadSettings(viewer, data){ + if(!data){ + return; + } + + viewer.setPointBudget(data.pointBudget); + viewer.setFOV(data.fov); + viewer.setEDLEnabled(data.edlEnabled); + viewer.setEDLRadius(data.edlRadius); + viewer.setEDLStrength(data.edlStrength); + viewer.setBackground(data.background); + viewer.setMinNodeSize(data.minNodeSize); + viewer.setShowBoundingBox(data.showBoundingBoxes); + } + + function loadView(viewer, view){ + viewer.scene.view.position.set(...view.position); + viewer.scene.view.lookAt(...view.target); + } + + function loadAnnotationItem(item){ + + const annotation = new Annotation({ + position: item.position, + title: item.title, + cameraPosition: item.cameraPosition, + cameraTarget: item.cameraTarget, + }); + + + annotation.description = item.description; + annotation.uuid = item.uuid; + + if(item.offset){ + annotation.offset.set(...item.offset); + } + + return annotation; + } + + function loadAnnotations(viewer, data){ + + if(!data){ + return; + } + + const findDuplicate = (item) => { + + let duplicate = null; + + viewer.scene.annotations.traverse( a => { + if(a.uuid === item.uuid){ + duplicate = a; + } + }); + + return duplicate; + }; + + const traverse = (item, parent) => { + + const duplicate = findDuplicate(item); + if(duplicate){ + return; + } + + const annotation = loadAnnotationItem(item); + + for(const childItem of item.children){ + traverse(childItem, annotation); + } + + parent.add(annotation); + + }; + + for(const item of data){ + traverse(item, viewer.scene.annotations); + } + + } + + function loadProfile(viewer, data){ + + const {name, points} = data; + + const duplicate = viewer.scene.profiles.find(profile => profile.uuid === data.uuid); + if(duplicate){ + return; + } + + let profile = new Potree.Profile(); + profile.name = name; + profile.uuid = data.uuid; + + profile.setWidth(data.width); + + for(const point of points){ + profile.addMarker(new Vector3(...point)); + } + + viewer.scene.addProfile(profile); + } + + function loadClassification(viewer, data){ + if(!data){ + return; + } + + const classifications = data; + + viewer.setClassifications(classifications); + } + + async function loadProject(viewer, data){ + + if(data.type !== "Potree"){ + console.error("not a valid Potree project"); + return; + } + + loadSettings(viewer, data.settings); + + loadView(viewer, data.view); + + const pointcloudPromises = []; + for(const pointcloud of data.pointclouds){ + const promise = loadPointCloud(viewer, pointcloud); + pointcloudPromises.push(promise); + } + + for(const measure of data.measurements){ + loadMeasurement(viewer, measure); + } + + for(const volume of data.volumes){ + loadVolume(viewer, volume); + } + + for(const animation of data.cameraAnimations){ + loadCameraAnimation(viewer, animation); + } + + for(const profile of data.profiles){ + loadProfile(viewer, profile); + } + + if(data.orientedImages){ + for(const images of data.orientedImages){ + loadOrientedImages(viewer, images); + } + } + + loadAnnotations(viewer, data.annotations); + + loadClassification(viewer, data.classification); + + // need to load at least one point cloud that defines the scene projection, + // before we can load stuff in other projections such as geopackages + //await Promise.any(pointcloudPromises); // (not yet supported) + Utils.waitAny(pointcloudPromises).then( () => { + if(data.geopackages){ + for(const geopackage of data.geopackages){ + loadGeopackage(viewer, geopackage); + } + } + }); + + await Promise.all(pointcloudPromises); + } + + // + // Algorithm by Christian Boucheny + // shader code taken and adapted from CloudCompare + // + // see + // https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL + // http://www.kitware.com/source/home/post/9 + // https://tel.archives-ouvertes.fr/tel-00438464/document p. 115+ (french) + + class EyeDomeLightingMaterial extends RawShaderMaterial{ + + constructor(parameters = {}){ + super(); + + let uniforms = { + screenWidth: { type: 'f', value: 0 }, + screenHeight: { type: 'f', value: 0 }, + edlStrength: { type: 'f', value: 1.0 }, + uNear: { type: 'f', value: 1.0 }, + uFar: { type: 'f', value: 1.0 }, + radius: { type: 'f', value: 1.0 }, + neighbours: { type: '2fv', value: [] }, + depthMap: { type: 't', value: null }, + uEDLColor: { type: 't', value: null }, + uEDLDepth: { type: 't', value: null }, + opacity: { type: 'f', value: 1.0 }, + uProj: { type: "Matrix4fv", value: [] }, + }; + + this.setValues({ + uniforms: uniforms, + vertexShader: this.getDefines() + Shaders['edl.vs'], + fragmentShader: this.getDefines() + Shaders['edl.fs'], + lights: false + }); + + this.neighbourCount = 8; + } + + getDefines() { + let defines = ''; + + defines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\n'; + + return defines; + } + + updateShaderSource() { + + let vs = this.getDefines() + Shaders['edl.vs']; + let fs = this.getDefines() + Shaders['edl.fs']; + + this.setValues({ + vertexShader: vs, + fragmentShader: fs + }); + + this.uniforms.neighbours.value = this.neighbours; + + this.needsUpdate = true; + } + + get neighbourCount(){ + return this._neighbourCount; + } + + set neighbourCount(value){ + if (this._neighbourCount !== value) { + this._neighbourCount = value; + this.neighbours = new Float32Array(this._neighbourCount * 2); + for (let c = 0; c < this._neighbourCount; c++) { + this.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount); + this.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount); + } + + this.updateShaderSource(); + } + } + + + } + + class NormalizationEDLMaterial extends RawShaderMaterial{ + + constructor(parameters = {}){ + super(); + + let uniforms = { + screenWidth: { type: 'f', value: 0 }, + screenHeight: { type: 'f', value: 0 }, + edlStrength: { type: 'f', value: 1.0 }, + radius: { type: 'f', value: 1.0 }, + neighbours: { type: '2fv', value: [] }, + uEDLMap: { type: 't', value: null }, + uDepthMap: { type: 't', value: null }, + uWeightMap: { type: 't', value: null }, + }; + + this.setValues({ + uniforms: uniforms, + vertexShader: this.getDefines() + Shaders['normalize.vs'], + fragmentShader: this.getDefines() + Shaders['normalize_and_edl.fs'], + }); + + this.neighbourCount = 8; + } + + getDefines() { + let defines = ''; + + defines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\n'; + + return defines; + } + + updateShaderSource() { + + let vs = this.getDefines() + Shaders['normalize.vs']; + let fs = this.getDefines() + Shaders['normalize_and_edl.fs']; + + this.setValues({ + vertexShader: vs, + fragmentShader: fs + }); + + this.uniforms.neighbours.value = this.neighbours; + + this.needsUpdate = true; + } + + get neighbourCount(){ + return this._neighbourCount; + } + + set neighbourCount(value){ + if (this._neighbourCount !== value) { + this._neighbourCount = value; + this.neighbours = new Float32Array(this._neighbourCount * 2); + for (let c = 0; c < this._neighbourCount; c++) { + this.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount); + this.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount); + } + + this.updateShaderSource(); + } + } + + } + + class NormalizationMaterial extends RawShaderMaterial{ + + constructor(parameters = {}){ + super(); + + let uniforms = { + uDepthMap: { type: 't', value: null }, + uWeightMap: { type: 't', value: null }, + }; + + this.setValues({ + uniforms: uniforms, + vertexShader: this.getDefines() + Shaders['normalize.vs'], + fragmentShader: this.getDefines() + Shaders['normalize.fs'], + }); + } + + getDefines() { + let defines = ''; + + return defines; + } + + updateShaderSource() { + + let vs = this.getDefines() + Shaders['normalize.vs']; + let fs = this.getDefines() + Shaders['normalize.fs']; + + this.setValues({ + vertexShader: vs, + fragmentShader: fs + }); + + this.needsUpdate = true; + } + + } + + /** + * laslaz code taken and adapted from plas.io js-laslaz + * http://plas.io/ + * https://github.com/verma/plasio + * + * Thanks to Uday Verma and Howard Butler + * + */ + + class LasLazLoader { + + constructor (version, extension) { + if (typeof (version) === 'string') { + this.version = new Version(version); + } else { + this.version = version; + } + + this.extension = extension; + } + + static progressCB () { + + } + + load (node) { + if (node.loaded) { + return; + } + + let url = node.getURL(); + + if (this.version.equalOrHigher('1.4')) { + url += `.${this.extension}`; + } + + let xhr = XHRFactory.createXMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if (xhr.status === 200 || xhr.status === 0) { + let buffer = xhr.response; + this.parse(node, buffer); + } else { + console.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + url); + } + } + }; + + xhr.send(null); + } + + async parse(node, buffer){ + let lf = new LASFile(buffer); + let handler = new LasLazBatcher(node); + + try{ + await lf.open(); + lf.isOpen = true; + }catch(e){ + console.log("failed to open file. :("); + + return; + } + + let header = await lf.getHeader(); + + let skip = 1; + let totalRead = 0; + let totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip); + + let hasMoreData = true; + + while(hasMoreData){ + let data = await lf.readData(1000 * 1000, 0, skip); + + handler.push(new LASDecoder(data.buffer, + header.pointsFormatId, + header.pointsStructSize, + data.count, + header.scale, + header.offset, + header.mins, header.maxs)); + + totalRead += data.count; + LasLazLoader.progressCB(totalRead / totalToRead); + + hasMoreData = data.hasMoreData; + } + + header.totalRead = totalRead; + header.versionAsString = lf.versionAsString; + header.isCompressed = lf.isCompressed; + + LasLazLoader.progressCB(1); + + try{ + await lf.close(); + + lf.isOpen = false; + }catch(e){ + console.error("failed to close las/laz file!!!"); + + throw e; + } + } + + handle (node, url) { + + } + }; + + class LasLazBatcher{ + + constructor (node) { + this.node = node; + } + + push (lasBuffer) { + const workerPath = Potree.scriptPath + '/workers/LASDecoderWorker.js'; + const worker = Potree.workerPool.getWorker(workerPath); + const node = this.node; + const pointAttributes = node.pcoGeometry.pointAttributes; + + worker.onmessage = (e) => { + let geometry = new BufferGeometry(); + let numPoints = lasBuffer.pointsCount; + + let positions = new Float32Array(e.data.position); + let colors = new Uint8Array(e.data.color); + let intensities = new Float32Array(e.data.intensity); + let classifications = new Uint8Array(e.data.classification); + let returnNumbers = new Uint8Array(e.data.returnNumber); + let numberOfReturns = new Uint8Array(e.data.numberOfReturns); + let pointSourceIDs = new Uint16Array(e.data.pointSourceID); + let indices = new Uint8Array(e.data.indices); + + geometry.setAttribute('position', new BufferAttribute(positions, 3)); + geometry.setAttribute('color', new BufferAttribute(colors, 4, true)); + geometry.setAttribute('intensity', new BufferAttribute(intensities, 1)); + geometry.setAttribute('classification', new BufferAttribute(classifications, 1)); + geometry.setAttribute('return number', new BufferAttribute(returnNumbers, 1)); + geometry.setAttribute('number of returns', new BufferAttribute(numberOfReturns, 1)); + geometry.setAttribute('source id', new BufferAttribute(pointSourceIDs, 1)); + geometry.setAttribute('indices', new BufferAttribute(indices, 4)); + geometry.attributes.indices.normalized = true; + + for(const key in e.data.ranges){ + const range = e.data.ranges[key]; + + const attribute = pointAttributes.attributes.find(a => a.name === key); + attribute.range[0] = Math.min(attribute.range[0], range[0]); + attribute.range[1] = Math.max(attribute.range[1], range[1]); + } + + let tightBoundingBox = new Box3( + new Vector3().fromArray(e.data.tightBoundingBox.min), + new Vector3().fromArray(e.data.tightBoundingBox.max) + ); + + geometry.boundingBox = this.node.boundingBox; + this.node.tightBoundingBox = tightBoundingBox; + + this.node.geometry = geometry; + this.node.numPoints = numPoints; + this.node.loaded = true; + this.node.loading = false; + Potree.numNodesLoading--; + this.node.mean = new Vector3(...e.data.mean); + + Potree.workerPool.returnWorker(workerPath, worker); + }; + + let message = { + buffer: lasBuffer.arrayb, + numPoints: lasBuffer.pointsCount, + pointSize: lasBuffer.pointSize, + pointFormatID: 2, + scale: lasBuffer.scale, + offset: lasBuffer.offset, + mins: lasBuffer.mins, + maxs: lasBuffer.maxs + }; + worker.postMessage(message, [message.buffer]); + }; + } + + class BinaryLoader{ + + constructor(version, boundingBox, scale){ + if (typeof (version) === 'string') { + this.version = new Version(version); + } else { + this.version = version; + } + + this.boundingBox = boundingBox; + this.scale = scale; + } + + load(node){ + if (node.loaded) { + return; + } + + let url = node.getURL(); + + if (this.version.equalOrHigher('1.4')) { + url += '.bin'; + } + + let xhr = XHRFactory.createXMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if((xhr.status === 200 || xhr.status === 0) && xhr.response !== null){ + let buffer = xhr.response; + this.parse(node, buffer); + } else { + //console.error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`); + throw new Error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`); + } + } + }; + + try { + xhr.send(null); + } catch (e) { + console.log('fehler beim laden der punktwolke: ' + e); + } + }; + + parse(node, buffer){ + let pointAttributes = node.pcoGeometry.pointAttributes; + let numPoints = buffer.byteLength / node.pcoGeometry.pointAttributes.byteSize; + + if (this.version.upTo('1.5')) { + node.numPoints = numPoints; + } + + let workerPath = Potree.scriptPath + '/workers/BinaryDecoderWorker.js'; + let worker = Potree.workerPool.getWorker(workerPath); + + worker.onmessage = function (e) { + + let data = e.data; + let buffers = data.attributeBuffers; + let tightBoundingBox = new Box3( + new Vector3().fromArray(data.tightBoundingBox.min), + new Vector3().fromArray(data.tightBoundingBox.max) + ); + + Potree.workerPool.returnWorker(workerPath, worker); + + let geometry = new BufferGeometry(); + + for(let property in buffers){ + let buffer = buffers[property].buffer; + let batchAttribute = buffers[property].attribute; + + if (property === "POSITION_CARTESIAN") { + geometry.setAttribute('position', new BufferAttribute(new Float32Array(buffer), 3)); + } else if (property === "rgba") { + geometry.setAttribute("rgba", new BufferAttribute(new Uint8Array(buffer), 4, true)); + } else if (property === "NORMAL_SPHEREMAPPED") { + geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); + } else if (property === "NORMAL_OCT16") { + geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); + } else if (property === "NORMAL") { + geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); + } else if (property === "INDICES") { + let bufferAttribute = new BufferAttribute(new Uint8Array(buffer), 4); + bufferAttribute.normalized = true; + geometry.setAttribute('indices', bufferAttribute); + } else if (property === "SPACING") { + let bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1); + geometry.setAttribute('spacing', bufferAttribute); + } else { + const bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1); + + bufferAttribute.potree = { + offset: buffers[property].offset, + scale: buffers[property].scale, + preciseBuffer: buffers[property].preciseBuffer, + range: batchAttribute.range, + }; + + geometry.setAttribute(property, bufferAttribute); + + const attribute = pointAttributes.attributes.find(a => a.name === batchAttribute.name); + attribute.range[0] = Math.min(attribute.range[0], batchAttribute.range[0]); + attribute.range[1] = Math.max(attribute.range[1], batchAttribute.range[1]); + + if(node.getLevel() === 0){ + attribute.initialRange = batchAttribute.range; + } + + } + } + + tightBoundingBox.max.sub(tightBoundingBox.min); + tightBoundingBox.min.set(0, 0, 0); + + let numPoints = e.data.buffer.byteLength / pointAttributes.byteSize; + + node.numPoints = numPoints; + node.geometry = geometry; + node.mean = new Vector3(...data.mean); + node.tightBoundingBox = tightBoundingBox; + node.loaded = true; + node.loading = false; + node.estimatedSpacing = data.estimatedSpacing; + Potree.numNodesLoading--; + }; + + let message = { + buffer: buffer, + pointAttributes: pointAttributes, + version: this.version.version, + min: [ node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z ], + offset: [node.pcoGeometry.offset.x, node.pcoGeometry.offset.y, node.pcoGeometry.offset.z], + scale: this.scale, + spacing: node.spacing, + hasChildren: node.hasChildren, + name: node.name + }; + worker.postMessage(message, [message.buffer]); + }; + + + } + + function parseAttributes(cloudjs){ + + let version = new Version(cloudjs.version); + + const replacements = { + "COLOR_PACKED": "rgba", + "RGBA": "rgba", + "INTENSITY": "intensity", + "CLASSIFICATION": "classification", + "GPS_TIME": "gps-time", + }; + + const replaceOldNames = (old) => { + if(replacements[old]){ + return replacements[old]; + }else { + return old; + } + }; + + const pointAttributes = []; + if(version.upTo('1.7')){ + + for(let attributeName of cloudjs.pointAttributes){ + const oldAttribute = PointAttribute[attributeName]; + + const attribute = { + name: oldAttribute.name, + size: oldAttribute.byteSize, + elements: oldAttribute.numElements, + elementSize: oldAttribute.byteSize / oldAttribute.numElements, + type: oldAttribute.type.name, + description: "", + }; + + pointAttributes.push(attribute); + } + + }else { + pointAttributes.push(...cloudjs.pointAttributes); + } + + + { + const attributes = new PointAttributes(); + + const typeConversion = { + int8: PointAttributeTypes.DATA_TYPE_INT8, + int16: PointAttributeTypes.DATA_TYPE_INT16, + int32: PointAttributeTypes.DATA_TYPE_INT32, + int64: PointAttributeTypes.DATA_TYPE_INT64, + uint8: PointAttributeTypes.DATA_TYPE_UINT8, + uint16: PointAttributeTypes.DATA_TYPE_UINT16, + uint32: PointAttributeTypes.DATA_TYPE_UINT32, + uint64: PointAttributeTypes.DATA_TYPE_UINT64, + double: PointAttributeTypes.DATA_TYPE_DOUBLE, + float: PointAttributeTypes.DATA_TYPE_FLOAT, + }; + + for(const jsAttribute of pointAttributes){ + const name = replaceOldNames(jsAttribute.name); + const type = typeConversion[jsAttribute.type]; + const numElements = jsAttribute.elements; + const description = jsAttribute.description; + + const attribute = new PointAttribute(name, type, numElements); + + attributes.add(attribute); + } + + { + // check if it has normals + let hasNormals = + pointAttributes.find(a => a.name === "NormalX") !== undefined && + pointAttributes.find(a => a.name === "NormalY") !== undefined && + pointAttributes.find(a => a.name === "NormalZ") !== undefined; + + if(hasNormals){ + let vector = { + name: "NORMAL", + attributes: ["NormalX", "NormalY", "NormalZ"], + }; + attributes.addVector(vector); + } + } + + return attributes; + } + + } + + function lasLazAttributes(fMno){ + const attributes = new PointAttributes(); + + attributes.add(PointAttribute.POSITION_CARTESIAN); + attributes.add(new PointAttribute("rgba", PointAttributeTypes.DATA_TYPE_UINT8, 4)); + attributes.add(new PointAttribute("intensity", PointAttributeTypes.DATA_TYPE_UINT16, 1)); + attributes.add(new PointAttribute("classification", PointAttributeTypes.DATA_TYPE_UINT8, 1)); + attributes.add(new PointAttribute("gps-time", PointAttributeTypes.DATA_TYPE_DOUBLE, 1)); + attributes.add(new PointAttribute("number of returns", PointAttributeTypes.DATA_TYPE_UINT8, 1)); + attributes.add(new PointAttribute("return number", PointAttributeTypes.DATA_TYPE_UINT8, 1)); + attributes.add(new PointAttribute("source id", PointAttributeTypes.DATA_TYPE_UINT16, 1)); + //attributes.add(new PointAttribute("pointSourceID", PointAttributeTypes.DATA_TYPE_INT8, 4)); + + + return attributes; + } + + class POCLoader { + + static load(url, callback){ + try { + let pco = new PointCloudOctreeGeometry(); + pco.url = url; + let xhr = XHRFactory.createXMLHttpRequest(); + xhr.open('GET', url, true); + + xhr.onreadystatechange = function () { + if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 0)) { + let fMno = JSON.parse(xhr.responseText); + + let version = new Version(fMno.version); + + // assume octreeDir is absolute if it starts with http + if (fMno.octreeDir.indexOf('http') === 0) { + pco.octreeDir = fMno.octreeDir; + } else { + pco.octreeDir = url + '/../' + fMno.octreeDir; + } + + pco.spacing = fMno.spacing; + pco.hierarchyStepSize = fMno.hierarchyStepSize; + + pco.pointAttributes = fMno.pointAttributes; + + let min = new Vector3(fMno.boundingBox.lx, fMno.boundingBox.ly, fMno.boundingBox.lz); + let max = new Vector3(fMno.boundingBox.ux, fMno.boundingBox.uy, fMno.boundingBox.uz); + let boundingBox = new Box3(min, max); + let tightBoundingBox = boundingBox.clone(); + + if (fMno.tightBoundingBox) { + tightBoundingBox.min.copy(new Vector3(fMno.tightBoundingBox.lx, fMno.tightBoundingBox.ly, fMno.tightBoundingBox.lz)); + tightBoundingBox.max.copy(new Vector3(fMno.tightBoundingBox.ux, fMno.tightBoundingBox.uy, fMno.tightBoundingBox.uz)); + } + + let offset = min.clone(); + + boundingBox.min.sub(offset); + boundingBox.max.sub(offset); + + tightBoundingBox.min.sub(offset); + tightBoundingBox.max.sub(offset); + + pco.projection = fMno.projection; + pco.boundingBox = boundingBox; + pco.tightBoundingBox = tightBoundingBox; + pco.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); + pco.tightBoundingSphere = tightBoundingBox.getBoundingSphere(new Sphere()); + pco.offset = offset; + if (fMno.pointAttributes === 'LAS') { + pco.loader = new LasLazLoader(fMno.version, "las"); + pco.pointAttributes = lasLazAttributes(fMno); + } else if (fMno.pointAttributes === 'LAZ') { + pco.loader = new LasLazLoader(fMno.version, "laz"); + pco.pointAttributes = lasLazAttributes(fMno); + } else { + pco.loader = new BinaryLoader(fMno.version, boundingBox, fMno.scale); + pco.pointAttributes = parseAttributes(fMno); + } + + let nodes = {}; + + { // load root + let name = 'r'; + + let root = new PointCloudOctreeGeometryNode(name, pco, boundingBox); + root.level = 0; + root.hasChildren = true; + root.spacing = pco.spacing; + if (version.upTo('1.5')) { + root.numPoints = fMno.hierarchy[0][1]; + } else { + root.numPoints = 0; + } + pco.root = root; + pco.root.load(); + nodes[name] = root; + } + + // load remaining hierarchy + if (version.upTo('1.4')) { + for (let i = 1; i < fMno.hierarchy.length; i++) { + let name = fMno.hierarchy[i][0]; + let numPoints = fMno.hierarchy[i][1]; + let index = parseInt(name.charAt(name.length - 1)); + let parentName = name.substring(0, name.length - 1); + let parentNode = nodes[parentName]; + let level = name.length - 1; + //let boundingBox = POCLoader.createChildAABB(parentNode.boundingBox, index); + let boundingBox = Utils.createChildAABB(parentNode.boundingBox, index); + + let node = new PointCloudOctreeGeometryNode(name, pco, boundingBox); + node.level = level; + node.numPoints = numPoints; + node.spacing = pco.spacing / Math.pow(2, level); + parentNode.addChild(node); + nodes[name] = node; + } + } + + pco.nodes = nodes; + + callback(pco); + } + }; + + xhr.send(null); + } catch (e) { + console.log("loading failed: '" + url + "'"); + console.log(e); + + callback(); + } + } + + loadPointAttributes(mno){ + let fpa = mno.pointAttributes; + let pa = new PointAttributes(); + + for (let i = 0; i < fpa.length; i++) { + let pointAttribute = PointAttribute[fpa[i]]; + pa.add(pointAttribute); + } + + return pa; + } + + createChildAABB(aabb, index){ + let min = aabb.min.clone(); + let max = aabb.max.clone(); + let size = new Vector3().subVectors(max, min); + + if ((index & 0b0001) > 0) { + min.z += size.z / 2; + } else { + max.z -= size.z / 2; + } + + if ((index & 0b0010) > 0) { + min.y += size.y / 2; + } else { + max.y -= size.y / 2; + } + + if ((index & 0b0100) > 0) { + min.x += size.x / 2; + } else { + max.x -= size.x / 2; + } + + return new Box3(min, max); + } + } + + class OctreeGeometry{ + + constructor(){ + this.url = null; + this.spacing = 0; + this.boundingBox = null; + this.root = null; + this.pointAttributes = null; + this.loader = null; + } + + }; + + class OctreeGeometryNode{ + + constructor(name, octreeGeometry, boundingBox){ + this.id = OctreeGeometryNode.IDCount++; + this.name = name; + this.index = parseInt(name.charAt(name.length - 1)); + this.octreeGeometry = octreeGeometry; + this.boundingBox = boundingBox; + this.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); + this.children = {}; + this.numPoints = 0; + this.level = null; + this.oneTimeDisposeHandlers = []; + } + + isGeometryNode(){ + return true; + } + + getLevel(){ + return this.level; + } + + isTreeNode(){ + return false; + } + + isLoaded(){ + return this.loaded; + } + + getBoundingSphere(){ + return this.boundingSphere; + } + + getBoundingBox(){ + return this.boundingBox; + } + + getChildren(){ + let children = []; + + for (let i = 0; i < 8; i++) { + if (this.children[i]) { + children.push(this.children[i]); + } + } + + return children; + } + + getBoundingBox(){ + return this.boundingBox; + } + + load(){ + + if (Potree.numNodesLoading >= Potree.maxNodesLoading) { + return; + } + + this.octreeGeometry.loader.load(this); + } + + getNumPoints(){ + return this.numPoints; + } + + dispose(){ + if (this.geometry && this.parent != null) { + this.geometry.dispose(); + this.geometry = null; + this.loaded = false; + + // this.dispatchEvent( { type: 'dispose' } ); + for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) { + let handler = this.oneTimeDisposeHandlers[i]; + handler(); + } + this.oneTimeDisposeHandlers = []; + } + } + + }; + + OctreeGeometryNode.IDCount = 0; + + // let loadedNodes = new Set(); + + class NodeLoader{ + + constructor(url){ + this.url = url; + } + + async load(node){ + + if(node.loaded || node.loading){ + return; + } + + node.loading = true; + Potree.numNodesLoading++; + + // console.log(node.name, node.numPoints); + + // if(loadedNodes.has(node.name)){ + // // debugger; + // } + // loadedNodes.add(node.name); + + try{ + if(node.nodeType === 2){ + await this.loadHierarchy(node); + } + + let {byteOffset, byteSize} = node; + + + let urlOctree = `${this.url}/../octree.bin`; + + let first = byteOffset; + let last = byteOffset + byteSize - 1n; + + let buffer; + + if(byteSize === 0n){ + buffer = new ArrayBuffer(0); + console.warn(`loaded node with 0 bytes: ${node.name}`); + }else { + let response = await fetch(urlOctree, { + headers: { + 'content-type': 'multipart/byteranges', + 'Range': `bytes=${first}-${last}`, + }, + }); + + buffer = await response.arrayBuffer(); + } + + let workerPath; + if(this.metadata.encoding === "BROTLI"){ + workerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker_brotli.js'; + }else { + workerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker.js'; + } + + let worker = Potree.workerPool.getWorker(workerPath); + + worker.onmessage = function (e) { + + let data = e.data; + let buffers = data.attributeBuffers; + + Potree.workerPool.returnWorker(workerPath, worker); + + let geometry = new BufferGeometry(); + + for(let property in buffers){ + + let buffer = buffers[property].buffer; + + if(property === "position"){ + geometry.setAttribute('position', new BufferAttribute(new Float32Array(buffer), 3)); + }else if(property === "rgba"){ + geometry.setAttribute('rgba', new BufferAttribute(new Uint8Array(buffer), 4, true)); + }else if(property === "NORMAL"){ + //geometry.setAttribute('rgba', new THREE.BufferAttribute(new Uint8Array(buffer), 4, true)); + geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); + }else if (property === "INDICES") { + let bufferAttribute = new BufferAttribute(new Uint8Array(buffer), 4); + bufferAttribute.normalized = true; + geometry.setAttribute('indices', bufferAttribute); + }else { + const bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1); + + let batchAttribute = buffers[property].attribute; + bufferAttribute.potree = { + offset: buffers[property].offset, + scale: buffers[property].scale, + preciseBuffer: buffers[property].preciseBuffer, + range: batchAttribute.range, + }; + + geometry.setAttribute(property, bufferAttribute); + } + + } + // indices ?? + + node.density = data.density; + node.geometry = geometry; + node.loaded = true; + node.loading = false; + Potree.numNodesLoading--; + }; + + let pointAttributes = node.octreeGeometry.pointAttributes; + let scale = node.octreeGeometry.scale; + + let box = node.boundingBox; + let min = node.octreeGeometry.offset.clone().add(box.min); + let size = box.max.clone().sub(box.min); + let max = min.clone().add(size); + let numPoints = node.numPoints; + + let offset = node.octreeGeometry.loader.offset; + + let message = { + name: node.name, + buffer: buffer, + pointAttributes: pointAttributes, + scale: scale, + min: min, + max: max, + size: size, + offset: offset, + numPoints: numPoints + }; + + worker.postMessage(message, [message.buffer]); + }catch(e){ + node.loaded = false; + node.loading = false; + Potree.numNodesLoading--; + + console.log(`failed to load ${node.name}`); + console.log(e); + console.log(`trying again!`); + } + } + + parseHierarchy(node, buffer){ + + let view = new DataView(buffer); + let tStart = performance.now(); + + let bytesPerNode = 22; + let numNodes = buffer.byteLength / bytesPerNode; + + let octree = node.octreeGeometry; + // let nodes = [node]; + let nodes = new Array(numNodes); + nodes[0] = node; + let nodePos = 1; + + for(let i = 0; i < numNodes; i++){ + let current = nodes[i]; + + let type = view.getUint8(i * bytesPerNode + 0); + let childMask = view.getUint8(i * bytesPerNode + 1); + let numPoints = view.getUint32(i * bytesPerNode + 2, true); + let byteOffset = view.getBigInt64(i * bytesPerNode + 6, true); + let byteSize = view.getBigInt64(i * bytesPerNode + 14, true); + + // if(byteSize === 0n){ + // // debugger; + // } + + + if(current.nodeType === 2){ + // replace proxy with real node + current.byteOffset = byteOffset; + current.byteSize = byteSize; + current.numPoints = numPoints; + }else if(type === 2){ + // load proxy + current.hierarchyByteOffset = byteOffset; + current.hierarchyByteSize = byteSize; + current.numPoints = numPoints; + }else { + // load real node + current.byteOffset = byteOffset; + current.byteSize = byteSize; + current.numPoints = numPoints; + } + + if(current.byteSize === 0n){ + // workaround for issue #1125 + // some inner nodes erroneously report >0 points even though have 0 points + // however, they still report a byteSize of 0, so based on that we now set node.numPoints to 0 + current.numPoints = 0; + } + + current.nodeType = type; + + if(current.nodeType === 2){ + continue; + } + + for(let childIndex = 0; childIndex < 8; childIndex++){ + let childExists = ((1 << childIndex) & childMask) !== 0; + + if(!childExists){ + continue; + } + + let childName = current.name + childIndex; + + let childAABB = createChildAABB(current.boundingBox, childIndex); + let child = new OctreeGeometryNode(childName, octree, childAABB); + child.name = childName; + child.spacing = current.spacing / 2; + child.level = current.level + 1; + + current.children[childIndex] = child; + child.parent = current; + + // nodes.push(child); + nodes[nodePos] = child; + nodePos++; + } + + // if((i % 500) === 0){ + // yield; + // } + } + + let duration = (performance.now() - tStart); + + // if(duration > 20){ + // let msg = `duration: ${duration}ms, numNodes: ${numNodes}`; + // console.log(msg); + // } + } + + async loadHierarchy(node){ + + let {hierarchyByteOffset, hierarchyByteSize} = node; + let hierarchyPath = `${this.url}/../hierarchy.bin`; + + let first = hierarchyByteOffset; + let last = first + hierarchyByteSize - 1n; + + let response = await fetch(hierarchyPath, { + headers: { + 'content-type': 'multipart/byteranges', + 'Range': `bytes=${first}-${last}`, + }, + }); + + + + let buffer = await response.arrayBuffer(); + + this.parseHierarchy(node, buffer); + + // let promise = new Promise((resolve) => { + // let generator = this.parseHierarchy(node, buffer); + + // let repeatUntilDone = () => { + // let result = generator.next(); + + // if(result.done){ + // resolve(); + // }else{ + // requestAnimationFrame(repeatUntilDone); + // } + // }; + + // repeatUntilDone(); + // }); + + // await promise; + + + + + + } + + } + + let tmpVec3 = new Vector3(); + function createChildAABB(aabb, index){ + let min = aabb.min.clone(); + let max = aabb.max.clone(); + let size = tmpVec3.subVectors(max, min); + + if ((index & 0b0001) > 0) { + min.z += size.z / 2; + } else { + max.z -= size.z / 2; + } + + if ((index & 0b0010) > 0) { + min.y += size.y / 2; + } else { + max.y -= size.y / 2; + } + + if ((index & 0b0100) > 0) { + min.x += size.x / 2; + } else { + max.x -= size.x / 2; + } + + return new Box3(min, max); + } + + let typenameTypeattributeMap = { + "double": PointAttributeTypes.DATA_TYPE_DOUBLE, + "float": PointAttributeTypes.DATA_TYPE_FLOAT, + "int8": PointAttributeTypes.DATA_TYPE_INT8, + "uint8": PointAttributeTypes.DATA_TYPE_UINT8, + "int16": PointAttributeTypes.DATA_TYPE_INT16, + "uint16": PointAttributeTypes.DATA_TYPE_UINT16, + "int32": PointAttributeTypes.DATA_TYPE_INT32, + "uint32": PointAttributeTypes.DATA_TYPE_UINT32, + "int64": PointAttributeTypes.DATA_TYPE_INT64, + "uint64": PointAttributeTypes.DATA_TYPE_UINT64, + }; + + class OctreeLoader{ + + static parseAttributes(jsonAttributes){ + + let attributes = new PointAttributes(); + + let replacements = { + "rgb": "rgba", + }; + + for (const jsonAttribute of jsonAttributes) { + let {name, description, size, numElements, elementSize, min, max} = jsonAttribute; + + let type = typenameTypeattributeMap[jsonAttribute.type]; + + let potreeAttributeName = replacements[name] ? replacements[name] : name; + + let attribute = new PointAttribute(potreeAttributeName, type, numElements); + + if(numElements === 1){ + attribute.range = [min[0], max[0]]; + }else { + attribute.range = [min, max]; + } + + if (name === "gps-time") { // HACK: Guard against bad gpsTime range in metadata, see potree/potree#909 + if (attribute.range[0] === attribute.range[1]) { + attribute.range[1] += 1; + } + } + + attribute.initialRange = attribute.range; + + attributes.add(attribute); + } + + { + // check if it has normals + let hasNormals = + attributes.attributes.find(a => a.name === "NormalX") !== undefined && + attributes.attributes.find(a => a.name === "NormalY") !== undefined && + attributes.attributes.find(a => a.name === "NormalZ") !== undefined; + + if(hasNormals){ + let vector = { + name: "NORMAL", + attributes: ["NormalX", "NormalY", "NormalZ"], + }; + attributes.addVector(vector); + } + } + + return attributes; + } + + static async load(url){ + + let response = await fetch(url); + let metadata = await response.json(); + + let attributes = OctreeLoader.parseAttributes(metadata.attributes); + + let loader = new NodeLoader(url); + loader.metadata = metadata; + loader.attributes = attributes; + loader.scale = metadata.scale; + loader.offset = metadata.offset; + + let octree = new OctreeGeometry(); + octree.url = url; + octree.spacing = metadata.spacing; + octree.scale = metadata.scale; + + // let aPosition = metadata.attributes.find(a => a.name === "position"); + // octree + + let min = new Vector3(...metadata.boundingBox.min); + let max = new Vector3(...metadata.boundingBox.max); + let boundingBox = new Box3(min, max); + + let offset = min.clone(); + boundingBox.min.sub(offset); + boundingBox.max.sub(offset); + + octree.projection = metadata.projection; + octree.boundingBox = boundingBox; + octree.tightBoundingBox = boundingBox.clone(); + octree.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); + octree.tightBoundingSphere = boundingBox.getBoundingSphere(new Sphere()); + octree.offset = offset; + octree.pointAttributes = OctreeLoader.parseAttributes(metadata.attributes); + octree.loader = loader; + + let root = new OctreeGeometryNode("r", octree, boundingBox); + root.level = 0; + root.nodeType = 2; + root.hierarchyByteOffset = 0n; + root.hierarchyByteSize = BigInt(metadata.hierarchy.firstChunkSize); + root.hasChildren = false; + root.spacing = octree.spacing; + root.byteOffset = 0; + + octree.root = root; + + loader.load(root); + + let result = { + geometry: octree, + }; + + return result; + + } + + }; + + /** + * @author Connor Manning + */ + + class EptLoader { + static async load(file, callback) { + + let response = await fetch(file); + let json = await response.json(); + + let url = file.substr(0, file.lastIndexOf('ept.json')); + let geometry = new Potree.PointCloudEptGeometry(url, json); + let root = new Potree.PointCloudEptGeometryNode(geometry); + + geometry.root = root; + geometry.root.load(); + + callback(geometry); + } + }; + + class EptBinaryLoader { + extension() { + return '.bin'; + } + + workerPath() { + return Potree.scriptPath + '/workers/EptBinaryDecoderWorker.js'; + } + + load(node) { + if (node.loaded) return; + + let url = node.url() + this.extension(); + + let xhr = XHRFactory.createXMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + let buffer = xhr.response; + this.parse(node, buffer); + } else { + console.log('Failed ' + url + ': ' + xhr.status); + } + } + }; + + try { + xhr.send(null); + } + catch (e) { + console.log('Failed request: ' + e); + } + } + + parse(node, buffer) { + let workerPath = this.workerPath(); + let worker = Potree.workerPool.getWorker(workerPath); + + worker.onmessage = function(e) { + let g = new BufferGeometry(); + let numPoints = e.data.numPoints; + + let position = new Float32Array(e.data.position); + g.setAttribute('position', new BufferAttribute(position, 3)); + + let indices = new Uint8Array(e.data.indices); + g.setAttribute('indices', new BufferAttribute(indices, 4)); + + if (e.data.color) { + let color = new Uint8Array(e.data.color); + g.setAttribute('color', new BufferAttribute(color, 4, true)); + } + if (e.data.intensity) { + let intensity = new Float32Array(e.data.intensity); + g.setAttribute('intensity', + new BufferAttribute(intensity, 1)); + } + if (e.data.classification) { + let classification = new Uint8Array(e.data.classification); + g.setAttribute('classification', + new BufferAttribute(classification, 1)); + } + if (e.data.returnNumber) { + let returnNumber = new Uint8Array(e.data.returnNumber); + g.setAttribute('return number', + new BufferAttribute(returnNumber, 1)); + } + if (e.data.numberOfReturns) { + let numberOfReturns = new Uint8Array(e.data.numberOfReturns); + g.setAttribute('number of returns', + new BufferAttribute(numberOfReturns, 1)); + } + if (e.data.pointSourceId) { + let pointSourceId = new Uint16Array(e.data.pointSourceId); + g.setAttribute('source id', + new BufferAttribute(pointSourceId, 1)); + } + + g.attributes.indices.normalized = true; + + let tightBoundingBox = new Box3( + new Vector3().fromArray(e.data.tightBoundingBox.min), + new Vector3().fromArray(e.data.tightBoundingBox.max) + ); + + node.doneLoading( + g, + tightBoundingBox, + numPoints, + new Vector3(...e.data.mean)); + + Potree.workerPool.returnWorker(workerPath, worker); + }; + + let toArray = (v) => [v.x, v.y, v.z]; + let message = { + buffer: buffer, + schema: node.ept.schema, + scale: node.ept.eptScale, + offset: node.ept.eptOffset, + mins: toArray(node.key.b.min) + }; + + worker.postMessage(message, [message.buffer]); + } + }; + + /** + * laslaz code taken and adapted from plas.io js-laslaz + * http://plas.io/ + * https://github.com/verma/plasio + * + * Thanks to Uday Verma and Howard Butler + * + */ + + class EptLaszipLoader { + load(node) { + if (node.loaded) return; + + let url = node.url() + '.laz'; + + let xhr = XHRFactory.createXMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + let buffer = xhr.response; + this.parse(node, buffer); + } else { + console.log('Failed ' + url + ': ' + xhr.status); + } + } + }; + + xhr.send(null); + } + + async parse(node, buffer){ + let lf = new LASFile(buffer); + let handler = new EptLazBatcher(node); + + try{ + await lf.open(); + + lf.isOpen = true; + + const header = await lf.getHeader(); + + { + let i = 0; + + let toArray = (v) => [v.x, v.y, v.z]; + let mins = toArray(node.key.b.min); + let maxs = toArray(node.key.b.max); + + let hasMoreData = true; + + while(hasMoreData){ + const data = await lf.readData(1000000, 0, 1); + + let d = new LASDecoder( + data.buffer, + header.pointsFormatId, + header.pointsStructSize, + data.count, + header.scale, + header.offset, + mins, + maxs); + + d.extraBytes = header.extraBytes; + d.pointsFormatId = header.pointsFormatId; + handler.push(d); + + i += data.count; + + hasMoreData = data.hasMoreData; + } + + header.totalRead = i; + header.versionAsString = lf.versionAsString; + header.isCompressed = lf.isCompressed; + + await lf.close(); + + lf.isOpen = false; + } + + }catch(err){ + console.error('Error reading LAZ:', err); + + if (lf.isOpen) { + await lf.close(); + + lf.isOpen = false; + } + + throw err; + } + } + }; + + class EptLazBatcher { + constructor(node) { this.node = node; } + + push(las) { + let workerPath = Potree.scriptPath + + '/workers/EptLaszipDecoderWorker.js'; + let worker = Potree.workerPool.getWorker(workerPath); + + worker.onmessage = (e) => { + let g = new BufferGeometry(); + let numPoints = las.pointsCount; + + let positions = new Float32Array(e.data.position); + let colors = new Uint8Array(e.data.color); + + let intensities = new Float32Array(e.data.intensity); + let classifications = new Uint8Array(e.data.classification); + let returnNumbers = new Uint8Array(e.data.returnNumber); + let numberOfReturns = new Uint8Array(e.data.numberOfReturns); + let pointSourceIDs = new Uint16Array(e.data.pointSourceID); + let indices = new Uint8Array(e.data.indices); + let gpsTime = new Float32Array(e.data.gpsTime); + + g.setAttribute('position', + new BufferAttribute(positions, 3)); + g.setAttribute('rgba', + new BufferAttribute(colors, 4, true)); + g.setAttribute('intensity', + new BufferAttribute(intensities, 1)); + g.setAttribute('classification', + new BufferAttribute(classifications, 1)); + g.setAttribute('return number', + new BufferAttribute(returnNumbers, 1)); + g.setAttribute('number of returns', + new BufferAttribute(numberOfReturns, 1)); + g.setAttribute('source id', + new BufferAttribute(pointSourceIDs, 1)); + g.setAttribute('indices', + new BufferAttribute(indices, 4)); + g.setAttribute('gpsTime', + new BufferAttribute(gpsTime, 1)); + this.node.gpsTime = e.data.gpsMeta; + + g.attributes.indices.normalized = true; + + let tightBoundingBox = new Box3( + new Vector3().fromArray(e.data.tightBoundingBox.min), + new Vector3().fromArray(e.data.tightBoundingBox.max) + ); + + this.node.doneLoading( + g, + tightBoundingBox, + numPoints, + new Vector3(...e.data.mean)); + + Potree.workerPool.returnWorker(workerPath, worker); + }; + + let message = { + buffer: las.arrayb, + numPoints: las.pointsCount, + pointSize: las.pointSize, + pointFormatID: las.pointsFormatId, + scale: las.scale, + offset: las.offset, + mins: las.mins, + maxs: las.maxs + }; + + worker.postMessage(message, [message.buffer]); + }; + }; + + class EptZstandardLoader extends EptBinaryLoader { + extension() { + return '.zst'; + } + + workerPath() { + return Potree.scriptPath + '/workers/EptZstandardDecoderWorker.js'; + } + }; + + class ShapefileLoader{ + + constructor(){ + this.transform = null; + } + + async load(path){ + + const matLine = new LineMaterial( { + color: 0xff0000, + linewidth: 3, // in pixels + resolution: new Vector2(1000, 1000), + dashed: false + } ); + + const features = await this.loadShapefileFeatures(path); + const node = new Object3D(); + + for(const feature of features){ + const fnode = this.featureToSceneNode(feature, matLine); + node.add(fnode); + } + + let setResolution = (x, y) => { + matLine.resolution.set(x, y); + }; + + const result = { + features: features, + node: node, + setResolution: setResolution, + }; + + return result; + } + + featureToSceneNode(feature, matLine){ + let geometry = feature.geometry; + + let color = new Color(1, 1, 1); + + let transform = this.transform; + if(transform === null){ + transform = {forward: (v) => v}; + } + + if(feature.geometry.type === "Point"){ + let sg = new SphereGeometry(1, 18, 18); + let sm = new MeshNormalMaterial(); + let s = new Mesh(sg, sm); + + let [long, lat] = geometry.coordinates; + let pos = transform.forward([long, lat]); + + s.position.set(...pos, 20); + + s.scale.set(10, 10, 10); + + return s; + }else if(geometry.type === "LineString"){ + let coordinates = []; + + let min = new Vector3(Infinity, Infinity, Infinity); + for(let i = 0; i < geometry.coordinates.length; i++){ + let [long, lat] = geometry.coordinates[i]; + let pos = transform.forward([long, lat]); + + min.x = Math.min(min.x, pos[0]); + min.y = Math.min(min.y, pos[1]); + min.z = Math.min(min.z, 20); + + coordinates.push(...pos, 20); + if(i > 0 && i < geometry.coordinates.length - 1){ + coordinates.push(...pos, 20); + } + } + + for(let i = 0; i < coordinates.length; i += 3){ + coordinates[i+0] -= min.x; + coordinates[i+1] -= min.y; + coordinates[i+2] -= min.z; + } + + const lineGeometry = new LineGeometry(); + lineGeometry.setPositions( coordinates ); + + const line = new Line2( lineGeometry, matLine ); + line.computeLineDistances(); + line.scale.set( 1, 1, 1 ); + line.position.copy(min); + + return line; + }else if(geometry.type === "Polygon"){ + for(let pc of geometry.coordinates){ + let coordinates = []; + + let min = new Vector3(Infinity, Infinity, Infinity); + for(let i = 0; i < pc.length; i++){ + let [long, lat] = pc[i]; + let pos = transform.forward([long, lat]); + + min.x = Math.min(min.x, pos[0]); + min.y = Math.min(min.y, pos[1]); + min.z = Math.min(min.z, 20); + + coordinates.push(...pos, 20); + if(i > 0 && i < pc.length - 1){ + coordinates.push(...pos, 20); + } + } + + for(let i = 0; i < coordinates.length; i += 3){ + coordinates[i+0] -= min.x; + coordinates[i+1] -= min.y; + coordinates[i+2] -= min.z; + } + + const lineGeometry = new LineGeometry(); + lineGeometry.setPositions( coordinates ); + + const line = new Line2( lineGeometry, matLine ); + line.computeLineDistances(); + line.scale.set( 1, 1, 1 ); + line.position.copy(min); + + return line; + } + }else { + console.log("unhandled feature: ", feature); + } + } + + async loadShapefileFeatures(file){ + let features = []; + + let source = await shapefile.open(file); + + while(true){ + let result = await source.read(); + + if (result.done) { + break; + } + + if (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) { + features.push(result.value); + } + } + + return features; + } + + }; + + const defaultColors = { + "landuse": [0.5, 0.5, 0.5], + "natural": [0.0, 1.0, 0.0], + "places": [1.0, 0.0, 1.0], + "points": [0.0, 1.0, 1.0], + "roads": [1.0, 1.0, 0.0], + "waterways": [0.0, 0.0, 1.0], + "default": [0.9, 0.6, 0.1], + }; + + function getColor(feature){ + let color = defaultColors[feature]; + + if(!color){ + color = defaultColors["default"]; + } + + return color; + } + + class Geopackage$1{ + constructor(){ + this.path = null; + this.node = null; + } + }; + + class GeoPackageLoader{ + + constructor(){ + + } + + static async loadUrl(url, params){ + + await Promise.all([ + Utils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`), + Utils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`), + ]); + + const result = await fetch(url); + const buffer = await result.arrayBuffer(); + + params = params || {}; + + params.source = url; + + return GeoPackageLoader.loadBuffer(buffer, params); + } + + static async loadBuffer(buffer, params){ + + await Promise.all([ + Utils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`), + Utils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`), + ]); + + params = params || {}; + + const resolver = async (resolve) => { + + let transform = params.transform; + if(!transform){ + transform = {forward: (arg) => arg}; + } + + const wasmPath = `${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.wasm`; + const SQL = await initSqlJs({ locateFile: filename => wasmPath}); + + const u8 = new Uint8Array(buffer); + + const data = await geopackage.open(u8); + window.data = data; + + const geopackageNode = new Object3D(); + geopackageNode.name = params.source; + geopackageNode.potree = { + source: params.source, + }; + + const geo = new Geopackage$1(); + geo.path = params.source; + geo.node = geopackageNode; + + const tables = data.getTables(); + + for(const table of tables.features){ + const dao = data.getFeatureDao(table); + + let boundingBox = dao.getBoundingBox(); + boundingBox = boundingBox.projectBoundingBox(dao.projection, 'EPSG:4326'); + const geoJson = data.queryForGeoJSONFeaturesInTable(table, boundingBox); + + const matLine = new LineMaterial( { + color: new Color().setRGB(...getColor(table)), + linewidth: 2, + resolution: new Vector2(1000, 1000), + dashed: false + } ); + + const node = new Object3D(); + node.name = table; + geo.node.add(node); + + for(const [index, feature] of Object.entries(geoJson)){ + //const featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, transform); + const featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, dao.projection, transform); + node.add(featureNode); + } + } + + resolve(geo); + }; + + return new Promise(resolver); + } + + static featureToSceneNode(feature, matLine, geopackageProjection, transform){ + let geometry = feature.geometry; + + let color = new Color(1, 1, 1); + + if(feature.geometry.type === "Point"){ + let sg = new SphereGeometry(1, 18, 18); + let sm = new MeshNormalMaterial(); + let s = new Mesh(sg, sm); + + let [long, lat] = geometry.coordinates; + let pos = transform.forward(geopackageProjection.forward([long, lat])); + + s.position.set(...pos, 20); + + s.scale.set(10, 10, 10); + + return s; + }else if(geometry.type === "LineString"){ + let coordinates = []; + + let min = new Vector3(Infinity, Infinity, Infinity); + for(let i = 0; i < geometry.coordinates.length; i++){ + let [long, lat] = geometry.coordinates[i]; + let pos = transform.forward(geopackageProjection.forward([long, lat])); + + min.x = Math.min(min.x, pos[0]); + min.y = Math.min(min.y, pos[1]); + min.z = Math.min(min.z, 20); + + coordinates.push(...pos, 20); + if(i > 0 && i < geometry.coordinates.length - 1){ + coordinates.push(...pos, 20); + } + } + + for(let i = 0; i < coordinates.length; i += 3){ + coordinates[i+0] -= min.x; + coordinates[i+1] -= min.y; + coordinates[i+2] -= min.z; + } + + const lineGeometry = new LineGeometry(); + lineGeometry.setPositions( coordinates ); + + const line = new Line2( lineGeometry, matLine ); + line.computeLineDistances(); + line.scale.set( 1, 1, 1 ); + line.position.copy(min); + + return line; + }else if(geometry.type === "Polygon"){ + for(let pc of geometry.coordinates){ + let coordinates = []; + + let min = new Vector3(Infinity, Infinity, Infinity); + for(let i = 0; i < pc.length; i++){ + let [long, lat] = pc[i]; + + let pos = transform.forward(geopackageProjection.forward([long, lat])); + + min.x = Math.min(min.x, pos[0]); + min.y = Math.min(min.y, pos[1]); + min.z = Math.min(min.z, 20); + + coordinates.push(...pos, 20); + if(i > 0 && i < pc.length - 1){ + coordinates.push(...pos, 20); + } + } + + for(let i = 0; i < coordinates.length; i += 3){ + coordinates[i+0] -= min.x; + coordinates[i+1] -= min.y; + coordinates[i+2] -= min.z; + } + + const lineGeometry = new LineGeometry(); + lineGeometry.setPositions( coordinates ); + + const line = new Line2( lineGeometry, matLine ); + line.computeLineDistances(); + line.scale.set( 1, 1, 1 ); + line.position.copy(min); + + return line; + } + }else { + console.log("unhandled feature: ", feature); + } + } + + }; + + class ClipVolume extends Object3D{ + + constructor(args){ + super(); + + this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; + this.name = "clip_volume_" + this.constructor.counter; + + let alpha = args.alpha || 0; + let beta = args.beta || 0; + let gamma = args.gamma || 0; + + this.rotation.x = alpha; + this.rotation.y = beta; + this.rotation.z = gamma; + + this.clipOffset = 0.001; + this.clipRotOffset = 1; + + let boxGeometry = new BoxGeometry(1, 1, 1); + boxGeometry.computeBoundingBox(); + + let boxFrameGeometry = new Geometry(); + { + // bottom + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); + // top + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); + // sides + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); + + boxFrameGeometry.colors.push(new Vector3(1, 1, 1)); + } + + let planeFrameGeometry = new Geometry(); + { + // middle line + planeFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.0)); + planeFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.0)); + planeFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.0)); + planeFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.0)); + planeFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.0)); + planeFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.0)); + planeFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.0)); + planeFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.0)); + } + + this.dimension = new Vector3(1, 1, 1); + this.material = new MeshBasicMaterial( { + color: 0x00ff00, + transparent: true, + opacity: 0.3, + depthTest: true, + depthWrite: false} ); + this.box = new Mesh(boxGeometry, this.material); + this.box.geometry.computeBoundingBox(); + this.boundingBox = this.box.geometry.boundingBox; + this.add(this.box); + + this.frame = new LineSegments( boxFrameGeometry, new LineBasicMaterial({color: 0x000000})); + this.add(this.frame); + this.planeFrame = new LineSegments( planeFrameGeometry, new LineBasicMaterial({color: 0xff0000})); + this.add(this.planeFrame); + + // set default thickness + this.setScaleZ(0.1); + + // create local coordinate system + let createArrow = (name, direction, color) => { + let material = new MeshBasicMaterial({ + color: color, + depthTest: false, + depthWrite: false}); + + let shaftGeometry = new Geometry(); + shaftGeometry.vertices.push(new Vector3(0, 0, 0)); + shaftGeometry.vertices.push(new Vector3(0, 1, 0)); + + let shaftMaterial = new LineBasicMaterial({ + color: color, + depthTest: false, + depthWrite: false, + transparent: true + }); + let shaft = new Line(shaftGeometry, shaftMaterial); + shaft.name = name + "_shaft"; + + let headGeometry = new CylinderGeometry(0, 0.04, 0.1, 10, 1, false); + let headMaterial = material; + let head = new Mesh(headGeometry, headMaterial); + head.name = name + "_head"; + head.position.y = 1; + + let arrow = new Object3D(); + arrow.name = name; + arrow.add(shaft); + arrow.add(head); + + return arrow; + }; + + this.arrowX = createArrow("arrow_x", new Vector3(1, 0, 0), 0xFF0000); + this.arrowY = createArrow("arrow_y", new Vector3(0, 1, 0), 0x00FF00); + this.arrowZ = createArrow("arrow_z", new Vector3(0, 0, 1), 0x0000FF); + + this.arrowX.rotation.z = -Math.PI / 2; + this.arrowZ.rotation.x = Math.PI / 2; + + this.arrowX.visible = false; + this.arrowY.visible = false; + this.arrowZ.visible = false; + + this.add(this.arrowX); + this.add(this.arrowY); + this.add(this.arrowZ); + + { // event listeners + this.addEventListener("ui_select", e => { + this.arrowX.visible = true; + this.arrowY.visible = true; + this.arrowZ.visible = true; + }); + this.addEventListener("ui_deselect", e => { + this.arrowX.visible = false; + this.arrowY.visible = false; + this.arrowZ.visible = false; + }); + this.addEventListener("select", e => { + let scene_header = $("#" + this.name + " .scene_header"); + if(!scene_header.next().is(":visible")) { + scene_header.click(); + } + }); + this.addEventListener("deselect", e => { + let scene_header = $("#" + this.name + " .scene_header"); + if(scene_header.next().is(":visible")) { + scene_header.click(); + } + }); + } + + this.update(); + }; + + setClipOffset(offset) { + this.clipOffset = offset; + } + + setClipRotOffset(offset) { + this.clipRotOffset = offset; + } + + setScaleX(x) { + this.box.scale.x = x; + this.frame.scale.x = x; + this.planeFrame.scale.x = x; + } + + setScaleY(y) { + this.box.scale.y = y; + this.frame.scale.y = y; + this.planeFrame.scale.y = y; + } + + setScaleZ(z) { + this.box.scale.z = z; + this.frame.scale.z = z; + this.planeFrame.scale.z = z; + } + + offset(args) { + let cs = args.cs || null; + let axis = args.axis || null; + let dir = args.dir || null; + + if(!cs || !axis || !dir) return; + + if(axis === "x") { + if(cs === "local") { + this.position.add(this.localX.clone().multiplyScalar(dir * this.clipOffset)); + } else if(cs === "global") { + this.position.x = this.position.x + dir * this.clipOffset; + } + }else if(axis === "y") { + if(cs === "local") { + this.position.add(this.localY.clone().multiplyScalar(dir * this.clipOffset)); + } else if(cs === "global") { + this.position.y = this.position.y + dir * this.clipOffset; + } + }else if(axis === "z") { + if(cs === "local") { + this.position.add(this.localZ.clone().multiplyScalar(dir * this.clipOffset)); + } else if(cs === "global") { + this.position.z = this.position.z + dir * this.clipOffset; + } + } + + this.dispatchEvent({"type": "clip_volume_changed", "viewer": viewer, "volume": this}); + } + + rotate(args) { + let cs = args.cs || null; + let axis = args.axis || null; + let dir = args.dir || null; + + if(!cs || !axis || !dir) return; + + if(cs === "local") { + if(axis === "x") { + this.rotateOnAxis(new Vector3(1, 0, 0), dir * this.clipRotOffset * Math.PI / 180); + } else if(axis === "y") { + this.rotateOnAxis(new Vector3(0, 1, 0), dir * this.clipRotOffset * Math.PI / 180); + } else if(axis === "z") { + this.rotateOnAxis(new Vector3(0, 0, 1), dir * this.clipRotOffset * Math.PI / 180); + } + } else if(cs === "global") { + let rotaxis = new Vector4(1, 0, 0, 0); + if(axis === "y") { + rotaxis = new Vector4(0, 1, 0, 0); + } else if(axis === "z") { + rotaxis = new Vector4(0, 0, 1, 0); + } + this.updateMatrixWorld(); + let invM = newthis.matrixWorld.clone().invert(); + rotaxis = rotaxis.applyMatrix4(invM).normalize(); + rotaxis = new Vector3(rotaxis.x, rotaxis.y, rotaxis.z); + this.rotateOnAxis(rotaxis, dir * this.clipRotOffset * Math.PI / 180); + } + + this.updateLocalSystem(); + + this.dispatchEvent({"type": "clip_volume_changed", "viewer": viewer, "volume": this}); + } + + update(){ + this.boundingBox = this.box.geometry.boundingBox; + this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); + + this.box.visible = false; + + this.updateLocalSystem(); + }; + + updateLocalSystem() { + // extract local coordinate axes + let rotQuat = this.getWorldQuaternion(); + this.localX = new Vector3(1, 0, 0).applyQuaternion(rotQuat).normalize(); + this.localY = new Vector3(0, 1, 0).applyQuaternion(rotQuat).normalize(); + this.localZ = new Vector3(0, 0, 1).applyQuaternion(rotQuat).normalize(); + } + + raycast(raycaster, intersects){ + + let is = []; + this.box.raycast(raycaster, is); + + if(is.length > 0){ + let I = is[0]; + intersects.push({ + distance: I.distance, + object: this, + point: I.point.clone() + }); + } + }; + }; + + class ClippingTool extends EventDispatcher{ + + constructor(viewer){ + super(); + + this.viewer = viewer; + + this.maxPolygonVertices = 8; + + this.addEventListener("start_inserting_clipping_volume", e => { + this.viewer.dispatchEvent({ + type: "cancel_insertions" + }); + }); + + this.sceneMarker = new Scene(); + this.sceneVolume = new Scene(); + this.sceneVolume.name = "scene_clip_volume"; + this.viewer.inputHandler.registerInteractiveScene(this.sceneVolume); + + this.onRemove = e => { + this.sceneVolume.remove(e.volume); + }; + + this.onAdd = e => { + this.sceneVolume.add(e.volume); + }; + + this.viewer.inputHandler.addEventListener("delete", e => { + let volumes = e.selection.filter(e => (e instanceof ClipVolume)); + volumes.forEach(e => this.viewer.scene.removeClipVolume(e)); + let polyVolumes = e.selection.filter(e => (e instanceof PolygonClipVolume)); + polyVolumes.forEach(e => this.viewer.scene.removePolygonClipVolume(e)); + }); + } + + setScene(scene){ + if(this.scene === scene){ + return; + } + + if(this.scene){ + this.scene.removeEventListeners("clip_volume_added", this.onAdd); + this.scene.removeEventListeners("clip_volume_removed", this.onRemove); + this.scene.removeEventListeners("polygon_clip_volume_added", this.onAdd); + this.scene.removeEventListeners("polygon_clip_volume_removed", this.onRemove); + } + + this.scene = scene; + + this.scene.addEventListener("clip_volume_added", this.onAdd); + this.scene.addEventListener("clip_volume_removed", this.onRemove); + this.scene.addEventListener("polygon_clip_volume_added", this.onAdd); + this.scene.addEventListener("polygon_clip_volume_removed", this.onRemove); + } + + startInsertion(args = {}) { + let type = args.type || null; + + if(!type) return null; + + let domElement = this.viewer.renderer.domElement; + let canvasSize = this.viewer.renderer.getSize(new Vector2()); + + let svg = $(` + + + + + + + + + + + + `); + $(domElement.parentElement).append(svg); + + let polyClipVol = new PolygonClipVolume(this.viewer.scene.getActiveCamera().clone()); + + this.dispatchEvent({"type": "start_inserting_clipping_volume"}); + + this.viewer.scene.addPolygonClipVolume(polyClipVol); + this.sceneMarker.add(polyClipVol); + + let cancel = { + callback: null + }; + + let insertionCallback = (e) => { + if(e.button === MOUSE.LEFT){ + + polyClipVol.addMarker(); + + // SVC Screen Line + svg.find("polyline").each((index, target) => { + let newPoint = svg[0].createSVGPoint(); + newPoint.x = e.offsetX; + newPoint.y = e.offsetY; + let polyline = target.points.appendItem(newPoint); + }); + + + if(polyClipVol.markers.length > this.maxPolygonVertices){ + cancel.callback(); + } + + this.viewer.inputHandler.startDragging( + polyClipVol.markers[polyClipVol.markers.length - 1]); + }else if(e.button === MOUSE.RIGHT){ + cancel.callback(e); + } + }; + + cancel.callback = e => { + + //let first = svg.find("polyline")[0].points[0]; + //svg.find("polyline").each((index, target) => { + // let newPoint = svg[0].createSVGPoint(); + // newPoint.x = first.x; + // newPoint.y = first.y; + // let polyline = target.points.appendItem(newPoint); + //}); + svg.remove(); + + if(polyClipVol.markers.length > 3) { + polyClipVol.removeLastMarker(); + polyClipVol.initialized = true; + } else { + this.viewer.scene.removePolygonClipVolume(polyClipVol); + } + + this.viewer.renderer.domElement.removeEventListener("mouseup", insertionCallback, true); + this.viewer.removeEventListener("cancel_insertions", cancel.callback); + this.viewer.inputHandler.enabled = true; + }; + + this.viewer.addEventListener("cancel_insertions", cancel.callback); + this.viewer.renderer.domElement.addEventListener("mouseup", insertionCallback , true); + this.viewer.inputHandler.enabled = false; + + polyClipVol.addMarker(); + this.viewer.inputHandler.startDragging( + polyClipVol.markers[polyClipVol.markers.length - 1]); + + return polyClipVol; + } + + update() { + + } + }; + + var GeoTIFF = (function (exports) { + 'use strict'; + + const Endianness = new Enum({ + LITTLE: "II", + BIG: "MM", + }); + + const Type = new Enum({ + BYTE: {value: 1, bytes: 1}, + ASCII: {value: 2, bytes: 1}, + SHORT: {value: 3, bytes: 2}, + LONG: {value: 4, bytes: 4}, + RATIONAL: {value: 5, bytes: 8}, + SBYTE: {value: 6, bytes: 1}, + UNDEFINED: {value: 7, bytes: 1}, + SSHORT: {value: 8, bytes: 2}, + SLONG: {value: 9, bytes: 4}, + SRATIONAL: {value: 10, bytes: 8}, + FLOAT: {value: 11, bytes: 4}, + DOUBLE: {value: 12, bytes: 8}, + }); + + const Tag = new Enum({ + IMAGE_WIDTH: 256, + IMAGE_HEIGHT: 257, + BITS_PER_SAMPLE: 258, + COMPRESSION: 259, + PHOTOMETRIC_INTERPRETATION: 262, + STRIP_OFFSETS: 273, + ORIENTATION: 274, + SAMPLES_PER_PIXEL: 277, + ROWS_PER_STRIP: 278, + STRIP_BYTE_COUNTS: 279, + X_RESOLUTION: 282, + Y_RESOLUTION: 283, + PLANAR_CONFIGURATION: 284, + RESOLUTION_UNIT: 296, + SOFTWARE: 305, + COLOR_MAP: 320, + SAMPLE_FORMAT: 339, + MODEL_PIXEL_SCALE: 33550, // [GeoTIFF] TYPE: double N: 3 + MODEL_TIEPOINT: 33922, // [GeoTIFF] TYPE: double N: 6 * NUM_TIEPOINTS + GEO_KEY_DIRECTORY: 34735, // [GeoTIFF] TYPE: short N: >= 4 + GEO_DOUBLE_PARAMS: 34736, // [GeoTIFF] TYPE: short N: variable + GEO_ASCII_PARAMS: 34737, // [GeoTIFF] TYPE: ascii N: variable + }); + + const typeMapping = new Map([ + [Type.BYTE, Uint8Array], + [Type.ASCII, Uint8Array], + [Type.SHORT, Uint16Array], + [Type.LONG, Uint32Array], + [Type.RATIONAL, Uint32Array], + [Type.SBYTE, Int8Array], + [Type.UNDEFINED, Uint8Array], + [Type.SSHORT, Int16Array], + [Type.SLONG, Int32Array], + [Type.SRATIONAL, Int32Array], + [Type.FLOAT, Float32Array], + [Type.DOUBLE, Float64Array], + ]); + + class IFDEntry{ + + constructor(tag, type, count, offset, value){ + this.tag = tag; + this.type = type; + this.count = count; + this.offset = offset; + this.value = value; + } + + } + + class Image{ + + constructor(){ + this.width = 0; + this.height = 0; + this.buffer = null; + this.metadata = []; + } + + } + + class Reader{ + + constructor(){ + + } + + static read(data){ + + let endiannessTag = String.fromCharCode(...Array.from(data.slice(0, 2))); + let endianness = Endianness.fromValue(endiannessTag); + + let tiffCheckTag = data.readUInt8(2); + + if(tiffCheckTag !== 42){ + throw new Error("not a valid tiff file"); + } + + let offsetToFirstIFD = data.readUInt32LE(4); + + console.log("offsetToFirstIFD", offsetToFirstIFD); + + let ifds = []; + let IFDsRead = false; + let currentIFDOffset = offsetToFirstIFD; + let i = 0; + while(IFDsRead || i < 100){ + + console.log("currentIFDOffset", currentIFDOffset); + let numEntries = data.readUInt16LE(currentIFDOffset); + let nextIFDOffset = data.readUInt32LE(currentIFDOffset + 2 + numEntries * 12); + + console.log("next offset: ", currentIFDOffset + 2 + numEntries * 12); + + let entryBuffer = data.slice(currentIFDOffset + 2, currentIFDOffset + 2 + 12 * numEntries); + + for(let i = 0; i < numEntries; i++){ + let tag = Tag.fromValue(entryBuffer.readUInt16LE(i * 12)); + let type = Type.fromValue(entryBuffer.readUInt16LE(i * 12 + 2)); + let count = entryBuffer.readUInt32LE(i * 12 + 4); + let offsetOrValue = entryBuffer.readUInt32LE(i * 12 + 8); + let valueBytes = type.bytes * count; + + let value; + if(valueBytes <= 4){ + value = offsetOrValue; + }else { + let valueBuffer = new Uint8Array(valueBytes); + valueBuffer.set(data.slice(offsetOrValue, offsetOrValue + valueBytes)); + + let ArrayType = typeMapping.get(type); + + value = new ArrayType(valueBuffer.buffer); + + if(type === Type.ASCII){ + value = String.fromCharCode(...value); + } + } + + let ifd = new IFDEntry(tag, type, count, offsetOrValue, value); + + ifds.push(ifd); + } + + console.log("nextIFDOffset", nextIFDOffset); + + if(nextIFDOffset === 0){ + break; + } + + currentIFDOffset = nextIFDOffset; + i++; + } + + let ifdForTag = (tag) => { + for(let entry of ifds){ + if(entry.tag === tag){ + return entry; + } + } + + return null; + }; + + let width = ifdForTag(Tag.IMAGE_WIDTH, ifds).value; + let height = ifdForTag(Tag.IMAGE_HEIGHT, ifds).value; + let compression = ifdForTag(Tag.COMPRESSION, ifds).value; + let rowsPerStrip = ifdForTag(Tag.ROWS_PER_STRIP, ifds).value; + let ifdStripOffsets = ifdForTag(Tag.STRIP_OFFSETS, ifds); + let ifdStripByteCounts = ifdForTag(Tag.STRIP_BYTE_COUNTS, ifds); + + let numStrips = Math.ceil(height / rowsPerStrip); + + let stripByteCounts = []; + for(let i = 0; i < ifdStripByteCounts.count; i++){ + let type = ifdStripByteCounts.type; + let offset = ifdStripByteCounts.offset + i * type.bytes; + + let value; + if(type === Type.SHORT){ + value = data.readUInt16LE(offset); + }else if(type === Type.LONG){ + value = data.readUInt32LE(offset); + } + + stripByteCounts.push(value); + } + + let stripOffsets = []; + for(let i = 0; i < ifdStripOffsets.count; i++){ + let type = ifdStripOffsets.type; + let offset = ifdStripOffsets.offset + i * type.bytes; + + let value; + if(type === Type.SHORT){ + value = data.readUInt16LE(offset); + }else if(type === Type.LONG){ + value = data.readUInt32LE(offset); + } + + stripOffsets.push(value); + } + + let imageBuffer = new Uint8Array(width * height * 3); + + let linesProcessed = 0; + for(let i = 0; i < numStrips; i++){ + let stripOffset = stripOffsets[i]; + let stripBytes = stripByteCounts[i]; + let stripData = data.slice(stripOffset, stripOffset + stripBytes); + let lineBytes = width * 3; + for(let y = 0; y < rowsPerStrip; y++){ + let line = stripData.slice(y * lineBytes, y * lineBytes + lineBytes); + imageBuffer.set(line, linesProcessed * lineBytes); + + if(line.length === lineBytes){ + linesProcessed++; + }else { + break; + } + } + } + + console.log(`width: ${width}`); + console.log(`height: ${height}`); + console.log(`numStrips: ${numStrips}`); + console.log("stripByteCounts", stripByteCounts.join(", ")); + console.log("stripOffsets", stripOffsets.join(", ")); + + let image = new Image(); + image.width = width; + image.height = height; + image.buffer = imageBuffer; + image.metadata = ifds; + + return image; + } + + } + + + class Exporter{ + + constructor(){ + + } + + static toTiffBuffer(image, params = {}){ + + let offsetToFirstIFD = 8; + + let headerBuffer = new Uint8Array([0x49, 0x49, 42, 0, offsetToFirstIFD, 0, 0, 0]); + + let [width, height] = [image.width, image.height]; + + let ifds = [ + new IFDEntry(Tag.IMAGE_WIDTH, Type.SHORT, 1, null, width), + new IFDEntry(Tag.IMAGE_HEIGHT, Type.SHORT, 1, null, height), + new IFDEntry(Tag.BITS_PER_SAMPLE, Type.SHORT, 4, null, new Uint16Array([8, 8, 8, 8])), + new IFDEntry(Tag.COMPRESSION, Type.SHORT, 1, null, 1), + new IFDEntry(Tag.PHOTOMETRIC_INTERPRETATION, Type.SHORT, 1, null, 2), + new IFDEntry(Tag.ORIENTATION, Type.SHORT, 1, null, 1), + new IFDEntry(Tag.SAMPLES_PER_PIXEL, Type.SHORT, 1, null, 4), + new IFDEntry(Tag.ROWS_PER_STRIP, Type.LONG, 1, null, height), + new IFDEntry(Tag.STRIP_BYTE_COUNTS, Type.LONG, 1, null, width * height * 3), + new IFDEntry(Tag.PLANAR_CONFIGURATION, Type.SHORT, 1, null, 1), + new IFDEntry(Tag.RESOLUTION_UNIT, Type.SHORT, 1, null, 1), + new IFDEntry(Tag.SOFTWARE, Type.ASCII, 6, null, "......"), + new IFDEntry(Tag.STRIP_OFFSETS, Type.LONG, 1, null, null), + new IFDEntry(Tag.X_RESOLUTION, Type.RATIONAL, 1, null, new Uint32Array([1, 1])), + new IFDEntry(Tag.Y_RESOLUTION, Type.RATIONAL, 1, null, new Uint32Array([1, 1])), + ]; + + if(params.ifdEntries){ + ifds.push(...params.ifdEntries); + } + + let valueOffset = offsetToFirstIFD + 2 + ifds.length * 12 + 4; + + // create 12 byte buffer for each ifd and variable length buffers for ifd values + let ifdEntryBuffers = new Map(); + let ifdValueBuffers = new Map(); + for(let ifd of ifds){ + let entryBuffer = new ArrayBuffer(12); + let entryView = new DataView(entryBuffer); + + let valueBytes = ifd.type.bytes * ifd.count; + + entryView.setUint16(0, ifd.tag.value, true); + entryView.setUint16(2, ifd.type.value, true); + entryView.setUint32(4, ifd.count, true); + + if(ifd.count === 1 && ifd.type.bytes <= 4){ + entryView.setUint32(8, ifd.value, true); + }else { + entryView.setUint32(8, valueOffset, true); + + let valueBuffer = new Uint8Array(ifd.count * ifd.type.bytes); + if(ifd.type === Type.ASCII){ + valueBuffer.set(new Uint8Array(ifd.value.split("").map(c => c.charCodeAt(0)))); + }else { + valueBuffer.set(new Uint8Array(ifd.value.buffer)); + } + ifdValueBuffers.set(ifd.tag, valueBuffer); + + valueOffset = valueOffset + valueBuffer.byteLength; + } + + ifdEntryBuffers.set(ifd.tag, entryBuffer); + } + + let imageBufferOffset = valueOffset; + + new DataView(ifdEntryBuffers.get(Tag.STRIP_OFFSETS)).setUint32(8, imageBufferOffset, true); + + let concatBuffers = (buffers) => { + + let totalLength = buffers.reduce( (sum, buffer) => (sum + buffer.byteLength), 0); + let merged = new Uint8Array(totalLength); + + let offset = 0; + for(let buffer of buffers){ + merged.set(new Uint8Array(buffer), offset); + offset += buffer.byteLength; + } + + return merged; + }; + + let ifdBuffer = concatBuffers([ + new Uint16Array([ifds.length]), + ...ifdEntryBuffers.values(), + new Uint32Array([0])]); + let ifdValueBuffer = concatBuffers([...ifdValueBuffers.values()]); + + let tiffBuffer = concatBuffers([ + headerBuffer, + ifdBuffer, + ifdValueBuffer, + image.buffer + ]); + + return {width: width, height: height, buffer: tiffBuffer}; + } + + } + + exports.Tag = Tag; + exports.Type = Type; + exports.IFDEntry = IFDEntry; + exports.Image = Image; + exports.Reader = Reader; + exports.Exporter = Exporter; + + return exports; + + }({})); + + function updateAzimuth(viewer, measure){ + + const azimuth = measure.azimuth; + + const isOkay = measure.points.length === 2; + + azimuth.node.visible = isOkay && measure.showAzimuth; + + if(!azimuth.node.visible){ + return; + } + + const camera = viewer.scene.getActiveCamera(); + const renderAreaSize = viewer.renderer.getSize(new Vector2()); + const width = renderAreaSize.width; + const height = renderAreaSize.height; + + const [p0, p1] = measure.points; + const r = p0.position.distanceTo(p1.position); + const northVec = Utils.getNorthVec(p0.position, r, viewer.getProjection()); + const northPos = p0.position.clone().add(northVec); + + azimuth.center.position.copy(p0.position); + azimuth.center.scale.set(2, 2, 2); + + azimuth.center.visible = false; + // azimuth.target.visible = false; + + + { // north + azimuth.north.position.copy(northPos); + azimuth.north.scale.set(2, 2, 2); + + let distance = azimuth.north.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, width, height); + + let scale = (5 / pr); + azimuth.north.scale.set(scale, scale, scale); + } + + { // target + azimuth.target.position.copy(p1.position); + azimuth.target.position.z = azimuth.north.position.z; + + let distance = azimuth.target.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, width, height); + + let scale = (5 / pr); + azimuth.target.scale.set(scale, scale, scale); + } + + + azimuth.circle.position.copy(p0.position); + azimuth.circle.scale.set(r, r, r); + azimuth.circle.material.resolution.set(width, height); + + // to target + azimuth.centerToTarget.geometry.setPositions([ + 0, 0, 0, + ...p1.position.clone().sub(p0.position).toArray(), + ]); + azimuth.centerToTarget.position.copy(p0.position); + azimuth.centerToTarget.geometry.verticesNeedUpdate = true; + azimuth.centerToTarget.geometry.computeBoundingSphere(); + azimuth.centerToTarget.computeLineDistances(); + azimuth.centerToTarget.material.resolution.set(width, height); + + // to target ground + azimuth.centerToTargetground.geometry.setPositions([ + 0, 0, 0, + p1.position.x - p0.position.x, + p1.position.y - p0.position.y, + 0, + ]); + azimuth.centerToTargetground.position.copy(p0.position); + azimuth.centerToTargetground.geometry.verticesNeedUpdate = true; + azimuth.centerToTargetground.geometry.computeBoundingSphere(); + azimuth.centerToTargetground.computeLineDistances(); + azimuth.centerToTargetground.material.resolution.set(width, height); + + // to north + azimuth.centerToNorth.geometry.setPositions([ + 0, 0, 0, + northPos.x - p0.position.x, + northPos.y - p0.position.y, + 0, + ]); + azimuth.centerToNorth.position.copy(p0.position); + azimuth.centerToNorth.geometry.verticesNeedUpdate = true; + azimuth.centerToNorth.geometry.computeBoundingSphere(); + azimuth.centerToNorth.computeLineDistances(); + azimuth.centerToNorth.material.resolution.set(width, height); + + // label + const radians = Utils.computeAzimuth(p0.position, p1.position, viewer.getProjection()); + let degrees = MathUtils.radToDeg(radians); + if(degrees < 0){ + degrees = 360 + degrees; + } + const txtDegrees = `${degrees.toFixed(2)}°`; + const labelDir = northPos.clone().add(p1.position).multiplyScalar(0.5).sub(p0.position); + if(labelDir.length() > 0){ + labelDir.z = 0; + labelDir.normalize(); + const labelVec = labelDir.clone().multiplyScalar(r); + const labelPos = p0.position.clone().add(labelVec); + azimuth.label.position.copy(labelPos); + } + azimuth.label.setText(txtDegrees); + let distance = azimuth.label.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, width, height); + let scale = (70 / pr); + azimuth.label.scale.set(scale, scale, scale); + } + + class MeasuringTool extends EventDispatcher{ + constructor (viewer) { + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.addEventListener('start_inserting_measurement', e => { + this.viewer.dispatchEvent({ + type: 'cancel_insertions' + }); + }); + + this.showLabels = true; + this.scene = new Scene(); + this.scene.name = 'scene_measurement'; + this.light = new PointLight(0xffffff, 1.0); + this.scene.add(this.light); + + this.viewer.inputHandler.registerInteractiveScene(this.scene); + + this.onRemove = (e) => { this.scene.remove(e.measurement);}; + this.onAdd = e => {this.scene.add(e.measurement);}; + + for(let measurement of viewer.scene.measurements){ + this.onAdd({measurement: measurement}); + } + + viewer.addEventListener("update", this.update.bind(this)); + viewer.addEventListener("render.pass.perspective_overlay", this.render.bind(this)); + viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); + + viewer.scene.addEventListener('measurement_added', this.onAdd); + viewer.scene.addEventListener('measurement_removed', this.onRemove); + } + + onSceneChange(e){ + if(e.oldScene){ + e.oldScene.removeEventListener('measurement_added', this.onAdd); + e.oldScene.removeEventListener('measurement_removed', this.onRemove); + } + + e.scene.addEventListener('measurement_added', this.onAdd); + e.scene.addEventListener('measurement_removed', this.onRemove); + } + + startInsertion (args = {}) { + let domElement = this.viewer.renderer.domElement; + + let measure = new Measure(); + + this.dispatchEvent({ + type: 'start_inserting_measurement', + measure: measure + }); + + const pick = (defaul, alternative) => { + if(defaul != null){ + return defaul; + }else { + return alternative; + } + }; + + measure.showDistances = (args.showDistances === null) ? true : args.showDistances; + + measure.showArea = pick(args.showArea, false); + measure.showAngles = pick(args.showAngles, false); + measure.showCoordinates = pick(args.showCoordinates, false); + measure.showHeight = pick(args.showHeight, false); + measure.showCircle = pick(args.showCircle, false); + measure.showAzimuth = pick(args.showAzimuth, false); + measure.showEdges = pick(args.showEdges, true); + measure.closed = pick(args.closed, false); + measure.maxMarkers = pick(args.maxMarkers, Infinity); + + measure.name = args.name || 'Measurement'; + + this.scene.add(measure); + + let cancel = { + removeLastMarker: measure.maxMarkers > 3, + callback: null + }; + + let insertionCallback = (e) => { + if (e.button === MOUSE.LEFT) { + measure.addMarker(measure.points[measure.points.length - 1].position.clone()); + + if (measure.points.length >= measure.maxMarkers) { + cancel.callback(); + } + + this.viewer.inputHandler.startDragging( + measure.spheres[measure.spheres.length - 1]); + } else if (e.button === MOUSE.RIGHT) { + cancel.callback(); + } + }; + + cancel.callback = e => { + if (cancel.removeLastMarker) { + measure.removeMarker(measure.points.length - 1); + } + domElement.removeEventListener('mouseup', insertionCallback, false); + this.viewer.removeEventListener('cancel_insertions', cancel.callback); + }; + + if (measure.maxMarkers > 1) { + this.viewer.addEventListener('cancel_insertions', cancel.callback); + domElement.addEventListener('mouseup', insertionCallback, false); + } + + measure.addMarker(new Vector3(0, 0, 0)); + this.viewer.inputHandler.startDragging( + measure.spheres[measure.spheres.length - 1]); + + this.viewer.scene.addMeasurement(measure); + + return measure; + } + + update(){ + let camera = this.viewer.scene.getActiveCamera(); + let domElement = this.renderer.domElement; + let measurements = this.viewer.scene.measurements; + + const renderAreaSize = this.renderer.getSize(new Vector2()); + let clientWidth = renderAreaSize.width; + let clientHeight = renderAreaSize.height; + + this.light.position.copy(camera.position); + + // make size independant of distance + for (let measure of measurements) { + measure.lengthUnit = this.viewer.lengthUnit; + measure.lengthUnitDisplay = this.viewer.lengthUnitDisplay; + measure.update(); + + updateAzimuth(this.viewer, measure); + + // spheres + for(let sphere of measure.spheres){ + let distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3())); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + let scale = (15 / pr); + sphere.scale.set(scale, scale, scale); + } + + // labels + let labels = measure.edgeLabels.concat(measure.angleLabels); + for(let label of labels){ + let distance = camera.position.distanceTo(label.getWorldPosition(new Vector3())); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + let scale = (70 / pr); + + if(Potree.debug.scale){ + scale = (Potree.debug.scale / pr); + } + + label.scale.set(scale, scale, scale); + } + + // coordinate labels + for (let j = 0; j < measure.coordinateLabels.length; j++) { + let label = measure.coordinateLabels[j]; + let sphere = measure.spheres[j]; + + let distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3())); + + let screenPos = sphere.getWorldPosition(new Vector3()).clone().project(camera); + screenPos.x = Math.round((screenPos.x + 1) * clientWidth / 2); + screenPos.y = Math.round((-screenPos.y + 1) * clientHeight / 2); + screenPos.z = 0; + screenPos.y -= 30; + + let labelPos = new Vector3( + (screenPos.x / clientWidth) * 2 - 1, + -(screenPos.y / clientHeight) * 2 + 1, + 0.5 ); + labelPos.unproject(camera); + if(this.viewer.scene.cameraMode == CameraMode.PERSPECTIVE) { + let direction = labelPos.sub(camera.position).normalize(); + labelPos = new Vector3().addVectors( + camera.position, direction.multiplyScalar(distance)); + + } + label.position.copy(labelPos); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + let scale = (70 / pr); + label.scale.set(scale, scale, scale); + } + + // height label + if (measure.showHeight) { + let label = measure.heightLabel; + + { + let distance = label.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + let scale = (70 / pr); + label.scale.set(scale, scale, scale); + } + + { // height edge + let edge = measure.heightEdge; + + let sorted = measure.points.slice().sort((a, b) => a.position.z - b.position.z); + let lowPoint = sorted[0].position.clone(); + let highPoint = sorted[sorted.length - 1].position.clone(); + let min = lowPoint.z; + let max = highPoint.z; + + let start = new Vector3(highPoint.x, highPoint.y, min); + let end = new Vector3(highPoint.x, highPoint.y, max); + + let lowScreen = lowPoint.clone().project(camera); + let startScreen = start.clone().project(camera); + let endScreen = end.clone().project(camera); + + let toPixelCoordinates = v => { + let r = v.clone().addScalar(1).divideScalar(2); + r.x = r.x * clientWidth; + r.y = r.y * clientHeight; + r.z = 0; + + return r; + }; + + let lowEL = toPixelCoordinates(lowScreen); + let startEL = toPixelCoordinates(startScreen); + let endEL = toPixelCoordinates(endScreen); + + let lToS = lowEL.distanceTo(startEL); + let sToE = startEL.distanceTo(endEL); + + edge.geometry.lineDistances = [0, lToS, lToS, lToS + sToE]; + edge.geometry.lineDistancesNeedUpdate = true; + + edge.material.dashSize = 10; + edge.material.gapSize = 10; + } + } + + { // area label + let label = measure.areaLabel; + let distance = label.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + + let scale = (70 / pr); + label.scale.set(scale, scale, scale); + } + + { // radius label + let label = measure.circleRadiusLabel; + let distance = label.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + + let scale = (70 / pr); + label.scale.set(scale, scale, scale); + } + + { // edges + const materials = [ + measure.circleRadiusLine.material, + ...measure.edges.map( (e) => e.material), + measure.heightEdge.material, + measure.circleLine.material, + ]; + + for(const material of materials){ + material.resolution.set(clientWidth, clientHeight); + } + } + + if(!this.showLabels){ + + const labels = [ + ...measure.sphereLabels, + ...measure.edgeLabels, + ...measure.angleLabels, + ...measure.coordinateLabels, + measure.heightLabel, + measure.areaLabel, + measure.circleRadiusLabel, + ]; + + for(const label of labels){ + label.visible = false; + } + } + } + } + + render(){ + this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); + } + }; + + class Message{ + + constructor(content){ + this.content = content; + + let closeIcon = `${exports.resourcePath}/icons/close.svg`; + + this.element = $(` +
        + + +
        `); + + this.elClose = this.element.find("img[name=close]"); + + this.elContainer = this.element.find("span[name=content_container]"); + + if(typeof content === "string"){ + this.elContainer.append($(`${content}`)); + }else { + this.elContainer.append(content); + } + + } + + setMessage(content){ + this.elContainer.empty(); + if(typeof content === "string"){ + this.elContainer.append($(`${content}`)); + }else { + this.elContainer.append(content); + } + } + + } + + class PointCloudSM{ + + constructor(potreeRenderer){ + + this.potreeRenderer = potreeRenderer; + this.threeRenderer = this.potreeRenderer.threeRenderer; + + this.target = new WebGLRenderTarget(2 * 1024, 2 * 1024, { + minFilter: LinearFilter, + magFilter: LinearFilter, + format: RGBAFormat, + type: FloatType + }); + this.target.depthTexture = new DepthTexture(); + this.target.depthTexture.type = UnsignedIntType; + + //this.threeRenderer.setClearColor(0x000000, 1); + this.threeRenderer.setClearColor(0xff0000, 1); + + //HACK? removed while moving to three.js 109 + //this.threeRenderer.clearTarget(this.target, true, true, true); + { + const oldTarget = this.threeRenderer.getRenderTarget(); + + this.threeRenderer.setRenderTarget(this.target); + this.threeRenderer.clear(true, true, true); + + this.threeRenderer.setRenderTarget(oldTarget); + } + } + + setLight(light){ + this.light = light; + + let fov = (180 * light.angle) / Math.PI; + let aspect = light.shadow.mapSize.width / light.shadow.mapSize.height; + let near = 0.1; + let far = light.distance === 0 ? 10000 : light.distance; + this.camera = new PerspectiveCamera(fov, aspect, near, far); + this.camera.up.set(0, 0, 1); + this.camera.position.copy(light.position); + + let target = new Vector3().subVectors(light.position, light.getWorldDirection(new Vector3())); + this.camera.lookAt(target); + + this.camera.updateProjectionMatrix(); + this.camera.updateMatrix(); + this.camera.updateMatrixWorld(); + this.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert(); + } + + setSize(width, height){ + if(this.target.width !== width || this.target.height !== height){ + this.target.dispose(); + } + this.target.setSize(width, height); + } + + render(scene, camera){ + + this.threeRenderer.setClearColor(0x000000, 1); + + const oldTarget = this.threeRenderer.getRenderTarget(); + + this.threeRenderer.setRenderTarget(this.target); + this.threeRenderer.clear(true, true, true); + + this.potreeRenderer.render(scene, this.camera, this.target, {}); + + this.threeRenderer.setRenderTarget(oldTarget); + } + + + } + + class ProfileTool extends EventDispatcher { + constructor (viewer) { + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.addEventListener('start_inserting_profile', e => { + this.viewer.dispatchEvent({ + type: 'cancel_insertions' + }); + }); + + this.scene = new Scene(); + this.scene.name = 'scene_profile'; + this.light = new PointLight(0xffffff, 1.0); + this.scene.add(this.light); + + this.viewer.inputHandler.registerInteractiveScene(this.scene); + + this.onRemove = e => this.scene.remove(e.profile); + this.onAdd = e => this.scene.add(e.profile); + + for(let profile of viewer.scene.profiles){ + this.onAdd({profile: profile}); + } + + viewer.addEventListener("update", this.update.bind(this)); + viewer.addEventListener("render.pass.perspective_overlay", this.render.bind(this)); + viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); + + viewer.scene.addEventListener('profile_added', this.onAdd); + viewer.scene.addEventListener('profile_removed', this.onRemove); + } + + onSceneChange(e){ + if(e.oldScene){ + e.oldScene.removeEventListeners('profile_added', this.onAdd); + e.oldScene.removeEventListeners('profile_removed', this.onRemove); + } + + e.scene.addEventListener('profile_added', this.onAdd); + e.scene.addEventListener('profile_removed', this.onRemove); + } + + startInsertion (args = {}) { + let domElement = this.viewer.renderer.domElement; + + let profile = new Profile(); + profile.name = args.name || 'Profile'; + + this.dispatchEvent({ + type: 'start_inserting_profile', + profile: profile + }); + + this.scene.add(profile); + + let cancel = { + callback: null + }; + + let insertionCallback = (e) => { + if(e.button === MOUSE.LEFT){ + if(profile.points.length <= 1){ + let camera = this.viewer.scene.getActiveCamera(); + let distance = camera.position.distanceTo(profile.points[0]); + let clientSize = this.viewer.renderer.getSize(new Vector2()); + let pr = Utils.projectedRadius(1, camera, distance, clientSize.width, clientSize.height); + let width = (10 / pr); + + profile.setWidth(width); + } + + profile.addMarker(profile.points[profile.points.length - 1].clone()); + + this.viewer.inputHandler.startDragging( + profile.spheres[profile.spheres.length - 1]); + } else if (e.button === MOUSE.RIGHT) { + cancel.callback(); + } + }; + + cancel.callback = e => { + profile.removeMarker(profile.points.length - 1); + domElement.removeEventListener('mouseup', insertionCallback, false); + this.viewer.removeEventListener('cancel_insertions', cancel.callback); + }; + + this.viewer.addEventListener('cancel_insertions', cancel.callback); + domElement.addEventListener('mouseup', insertionCallback, false); + + profile.addMarker(new Vector3(0, 0, 0)); + this.viewer.inputHandler.startDragging( + profile.spheres[profile.spheres.length - 1]); + + this.viewer.scene.addProfile(profile); + + return profile; + } + + update(){ + let camera = this.viewer.scene.getActiveCamera(); + let profiles = this.viewer.scene.profiles; + let renderAreaSize = this.viewer.renderer.getSize(new Vector2()); + let clientWidth = renderAreaSize.width; + let clientHeight = renderAreaSize.height; + + this.light.position.copy(camera.position); + + // make size independant of distance + for(let profile of profiles){ + for(let sphere of profile.spheres){ + let distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3())); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + let scale = (15 / pr); + sphere.scale.set(scale, scale, scale); + } + } + } + + render(){ + this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); + } + + } + + class ScreenBoxSelectTool extends EventDispatcher{ + + constructor(viewer){ + super(); + + this.viewer = viewer; + this.scene = new Scene(); + + viewer.addEventListener("update", this.update.bind(this)); + viewer.addEventListener("render.pass.perspective_overlay", this.render.bind(this)); + viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); + } + + onSceneChange(scene){ + console.log("scene changed"); + } + + startInsertion(){ + let domElement = this.viewer.renderer.domElement; + + let volume = new BoxVolume(); + volume.position.set(12345, 12345, 12345); + volume.showVolumeLabel = false; + volume.visible = false; + volume.update(); + this.viewer.scene.addVolume(volume); + + this.importance = 10; + + let selectionBox = $(`
        `); + $(domElement.parentElement).append(selectionBox); + selectionBox.css("right", "10px"); + selectionBox.css("bottom", "10px"); + + let drag = e =>{ + + volume.visible = true; + + let mStart = e.drag.start; + let mEnd = e.drag.end; + + let box2D = new Box2(); + box2D.expandByPoint(mStart); + box2D.expandByPoint(mEnd); + + selectionBox.css("left", `${box2D.min.x}px`); + selectionBox.css("top", `${box2D.min.y}px`); + selectionBox.css("width", `${box2D.max.x - box2D.min.x}px`); + selectionBox.css("height", `${box2D.max.y - box2D.min.y}px`); + + let camera = e.viewer.scene.getActiveCamera(); + let size = e.viewer.renderer.getSize(new Vector2()); + let frustumSize = new Vector2( + camera.right - camera.left, + camera.top - camera.bottom); + + let screenCentroid = new Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5); + let ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height); + + let diff = new Vector2().subVectors(e.drag.end, e.drag.start); + diff.divide(size).multiply(frustumSize); + + volume.position.copy(ray.origin); + volume.up.copy(camera.up); + volume.rotation.copy(camera.rotation); + volume.scale.set(diff.x, diff.y, 1000 * 100); + + e.consume(); + }; + + let drop = e => { + this.importance = 0; + + $(selectionBox).remove(); + + this.viewer.inputHandler.deselectAll(); + this.viewer.inputHandler.toggleSelection(volume); + + let camera = e.viewer.scene.getActiveCamera(); + let size = e.viewer.renderer.getSize(new Vector2()); + let screenCentroid = new Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5); + let ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height); + + let line = new Line3(ray.origin, new Vector3().addVectors(ray.origin, ray.direction)); + + this.removeEventListener("drag", drag); + this.removeEventListener("drop", drop); + + let allPointsNear = []; + let allPointsFar = []; + + // TODO support more than one point cloud + for(let pointcloud of this.viewer.scene.pointclouds){ + + if(!pointcloud.visible){ + continue; + } + + let volCam = camera.clone(); + volCam.left = -volume.scale.x / 2; + volCam.right = +volume.scale.x / 2; + volCam.top = +volume.scale.y / 2; + volCam.bottom = -volume.scale.y / 2; + volCam.near = -volume.scale.z / 2; + volCam.far = +volume.scale.z / 2; + volCam.rotation.copy(volume.rotation); + volCam.position.copy(volume.position); + + volCam.updateMatrix(); + volCam.updateMatrixWorld(); + volCam.updateProjectionMatrix(); + volCam.matrixWorldInverse.copy(volCam.matrixWorld).invert(); + + let ray = new Ray(volCam.getWorldPosition(new Vector3()), volCam.getWorldDirection(new Vector3())); + let rayInverse = new Ray( + ray.origin.clone().add(ray.direction.clone().multiplyScalar(volume.scale.z)), + ray.direction.clone().multiplyScalar(-1)); + + let pickerSettings = { + width: 8, + height: 8, + pickWindowSize: 8, + all: true, + pickClipped: true, + pointSizeType: PointSizeType.FIXED, + pointSize: 1}; + let pointsNear = pointcloud.pick(viewer, volCam, ray, pickerSettings); + + volCam.rotateX(Math.PI); + volCam.updateMatrix(); + volCam.updateMatrixWorld(); + volCam.updateProjectionMatrix(); + volCam.matrixWorldInverse.copy(volCam.matrixWorld).invert(); + let pointsFar = pointcloud.pick(viewer, volCam, rayInverse, pickerSettings); + + allPointsNear.push(...pointsNear); + allPointsFar.push(...pointsFar); + } + + if(allPointsNear.length > 0 && allPointsFar.length > 0){ + let viewLine = new Line3(ray.origin, new Vector3().addVectors(ray.origin, ray.direction)); + + let closestOnLine = allPointsNear.map(p => viewLine.closestPointToPoint(p.position, false, new Vector3())); + let closest = closestOnLine.sort( (a, b) => ray.origin.distanceTo(a) - ray.origin.distanceTo(b))[0]; + + let farthestOnLine = allPointsFar.map(p => viewLine.closestPointToPoint(p.position, false, new Vector3())); + let farthest = farthestOnLine.sort( (a, b) => ray.origin.distanceTo(b) - ray.origin.distanceTo(a))[0]; + + let distance = closest.distanceTo(farthest); + let centroid = new Vector3().addVectors(closest, farthest).multiplyScalar(0.5); + volume.scale.z = distance * 1.1; + volume.position.copy(centroid); + } + + volume.clip = true; + }; + + this.addEventListener("drag", drag); + this.addEventListener("drop", drop); + + viewer.inputHandler.addInputListener(this); + + return volume; + } + + update(e){ + //console.log(e.delta) + } + + render(){ + this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); + } + + } + + class SpotLightHelper$1 extends Object3D{ + + constructor(light, color){ + super(); + + this.light = light; + this.color = color; + + //this.up.set(0, 0, 1); + this.updateMatrix(); + this.updateMatrixWorld(); + + { // SPHERE + let sg = new SphereGeometry(1, 32, 32); + let sm = new MeshNormalMaterial(); + this.sphere = new Mesh(sg, sm); + this.sphere.scale.set(0.5, 0.5, 0.5); + this.add(this.sphere); + } + + { // LINES + + + let positions = new Float32Array([ + +0, +0, +0, +0, +0, -1, + + +0, +0, +0, -1, -1, -1, + +0, +0, +0, +1, -1, -1, + +0, +0, +0, +1, +1, -1, + +0, +0, +0, -1, +1, -1, + + -1, -1, -1, +1, -1, -1, + +1, -1, -1, +1, +1, -1, + +1, +1, -1, -1, +1, -1, + -1, +1, -1, -1, -1, -1, + ]); + + let geometry = new BufferGeometry(); + geometry.setAttribute("position", new BufferAttribute(positions, 3)); + + let material = new LineBasicMaterial(); + + this.frustum = new LineSegments(geometry, material); + this.add(this.frustum); + + } + + this.update(); + } + + update(){ + + this.light.updateMatrix(); + this.light.updateMatrixWorld(); + + let position = this.light.position; + let target = new Vector3().addVectors( + this.light.position, this.light.getWorldDirection(new Vector3()).multiplyScalar(-1)); + + let quat = new Quaternion().setFromRotationMatrix( + new Matrix4().lookAt( position, target, new Vector3( 0, 0, 1 ) ) + ); + + this.setRotationFromQuaternion(quat); + this.position.copy(position); + + + let coneLength = (this.light.distance > 0) ? this.light.distance : 1000; + let coneWidth = coneLength * Math.tan( this.light.angle * 0.5 ); + + this.frustum.scale.set(coneWidth, coneWidth, coneLength); + + } + + } + + class TransformationTool { + constructor(viewer) { + this.viewer = viewer; + + this.scene = new Scene(); + + this.selection = []; + this.pivot = new Vector3(); + this.dragging = false; + this.showPickVolumes = false; + + this.viewer.inputHandler.registerInteractiveScene(this.scene); + this.viewer.inputHandler.addEventListener('selection_changed', (e) => { + for(let selected of this.selection){ + this.viewer.inputHandler.blacklist.delete(selected); + } + + this.selection = e.selection; + + for(let selected of this.selection){ + this.viewer.inputHandler.blacklist.add(selected); + } + + }); + + let red = 0xE73100; + let green = 0x44A24A; + let blue = 0x2669E7; + + this.activeHandle = null; + this.scaleHandles = { + "scale.x+": {name: "scale.x+", node: new Object3D(), color: red, alignment: [+1, +0, +0]}, + "scale.x-": {name: "scale.x-", node: new Object3D(), color: red, alignment: [-1, +0, +0]}, + "scale.y+": {name: "scale.y+", node: new Object3D(), color: green, alignment: [+0, +1, +0]}, + "scale.y-": {name: "scale.y-", node: new Object3D(), color: green, alignment: [+0, -1, +0]}, + "scale.z+": {name: "scale.z+", node: new Object3D(), color: blue, alignment: [+0, +0, +1]}, + "scale.z-": {name: "scale.z-", node: new Object3D(), color: blue, alignment: [+0, +0, -1]}, + }; + this.focusHandles = { + "focus.x+": {name: "focus.x+", node: new Object3D(), color: red, alignment: [+1, +0, +0]}, + "focus.x-": {name: "focus.x-", node: new Object3D(), color: red, alignment: [-1, +0, +0]}, + "focus.y+": {name: "focus.y+", node: new Object3D(), color: green, alignment: [+0, +1, +0]}, + "focus.y-": {name: "focus.y-", node: new Object3D(), color: green, alignment: [+0, -1, +0]}, + "focus.z+": {name: "focus.z+", node: new Object3D(), color: blue, alignment: [+0, +0, +1]}, + "focus.z-": {name: "focus.z-", node: new Object3D(), color: blue, alignment: [+0, +0, -1]}, + }; + this.translationHandles = { + "translation.x": {name: "translation.x", node: new Object3D(), color: red, alignment: [1, 0, 0]}, + "translation.y": {name: "translation.y", node: new Object3D(), color: green, alignment: [0, 1, 0]}, + "translation.z": {name: "translation.z", node: new Object3D(), color: blue, alignment: [0, 0, 1]}, + }; + this.rotationHandles = { + "rotation.x": {name: "rotation.x", node: new Object3D(), color: red, alignment: [1, 0, 0]}, + "rotation.y": {name: "rotation.y", node: new Object3D(), color: green, alignment: [0, 1, 0]}, + "rotation.z": {name: "rotation.z", node: new Object3D(), color: blue, alignment: [0, 0, 1]}, + }; + this.handles = Object.assign({}, this.scaleHandles, this.focusHandles, this.translationHandles, this.rotationHandles); + this.pickVolumes = []; + + this.initializeScaleHandles(); + this.initializeFocusHandles(); + this.initializeTranslationHandles(); + this.initializeRotationHandles(); + + + let boxFrameGeometry = new Geometry(); + { + // bottom + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); + // top + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); + // sides + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); + boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); + } + this.frame = new LineSegments(boxFrameGeometry, new LineBasicMaterial({color: 0xffff00})); + this.scene.add(this.frame); + + + } + + initializeScaleHandles(){ + let sgSphere = new SphereGeometry(1, 32, 32); + let sgLowPolySphere = new SphereGeometry(1, 16, 16); + + for(let handleName of Object.keys(this.scaleHandles)){ + let handle = this.scaleHandles[handleName]; + let node = handle.node; + this.scene.add(node); + node.position.set(...handle.alignment).multiplyScalar(0.5); + + let material = new MeshBasicMaterial({ + color: handle.color, + opacity: 0.4, + transparent: true + }); + + let outlineMaterial = new MeshBasicMaterial({ + color: 0x000000, + side: BackSide, + opacity: 0.4, + transparent: true}); + + let pickMaterial = new MeshNormalMaterial({ + opacity: 0.2, + transparent: true, + visible: this.showPickVolumes}); + + let sphere = new Mesh(sgSphere, material); + sphere.scale.set(1.3, 1.3, 1.3); + sphere.name = `${handleName}.handle`; + node.add(sphere); + + let outline = new Mesh(sgSphere, outlineMaterial); + outline.scale.set(1.4, 1.4, 1.4); + outline.name = `${handleName}.outline`; + sphere.add(outline); + + let pickSphere = new Mesh(sgLowPolySphere, pickMaterial); + pickSphere.name = `${handleName}.pick_volume`; + pickSphere.scale.set(3, 3, 3); + sphere.add(pickSphere); + pickSphere.handle = handleName; + this.pickVolumes.push(pickSphere); + + node.setOpacity = (target) => { + let opacity = {x: material.opacity}; + let t = new TWEEN.Tween(opacity).to({x: target}, 100); + t.onUpdate(() => { + sphere.visible = opacity.x > 0; + pickSphere.visible = opacity.x > 0; + material.opacity = opacity.x; + outlineMaterial.opacity = opacity.x; + pickSphere.material.opacity = opacity.x * 0.5; + }); + t.start(); + }; + + pickSphere.addEventListener("drag", (e) => this.dragScaleHandle(e)); + pickSphere.addEventListener("drop", (e) => this.dropScaleHandle(e)); + + pickSphere.addEventListener("mouseover", e => { + //node.setOpacity(1); + }); + + pickSphere.addEventListener("click", e => { + e.consume(); + }); + + pickSphere.addEventListener("mouseleave", e => { + //node.setOpacity(0.4); + }); + } + } + + initializeFocusHandles(){ + //let sgBox = new THREE.BoxGeometry(1, 1, 1); + let sgPlane = new PlaneGeometry(4, 4, 1, 1); + let sgLowPolySphere = new SphereGeometry(1, 16, 16); + + let texture = new TextureLoader().load(`${exports.resourcePath}/icons/eye_2.png`); + + for(let handleName of Object.keys(this.focusHandles)){ + let handle = this.focusHandles[handleName]; + let node = handle.node; + this.scene.add(node); + let align = handle.alignment; + + //node.lookAt(new THREE.Vector3().addVectors(node.position, new THREE.Vector3(...align))); + node.lookAt(new Vector3(...align)); + + let off = 0.8; + if(align[0] === 1){ + node.position.set(1, off, -off).multiplyScalar(0.5); + node.rotation.z = Math.PI / 2; + }else if(align[0] === -1){ + node.position.set(-1, -off, -off).multiplyScalar(0.5); + node.rotation.z = Math.PI / 2; + }else if(align[1] === 1){ + node.position.set(-off, 1, -off).multiplyScalar(0.5); + node.rotation.set(Math.PI / 2, Math.PI, 0.0); + }else if(align[1] === -1){ + node.position.set(off, -1, -off).multiplyScalar(0.5); + node.rotation.set(Math.PI / 2, 0.0, 0.0); + }else if(align[2] === 1){ + node.position.set(off, off, 1).multiplyScalar(0.5); + }else if(align[2] === -1){ + node.position.set(-off, off, -1).multiplyScalar(0.5); + } + + let material = new MeshBasicMaterial({ + color: handle.color, + opacity: 0, + transparent: true, + map: texture + }); + + //let outlineMaterial = new THREE.MeshBasicMaterial({ + // color: 0x000000, + // side: THREE.BackSide, + // opacity: 0, + // transparent: true}); + + let pickMaterial = new MeshNormalMaterial({ + //opacity: 0, + transparent: true, + visible: this.showPickVolumes}); + + let box = new Mesh(sgPlane, material); + box.name = `${handleName}.handle`; + box.scale.set(1.5, 1.5, 1.5); + box.position.set(0, 0, 0); + box.visible = false; + node.add(box); + //handle.focusNode = box; + + //let outline = new THREE.Mesh(sgPlane, outlineMaterial); + //outline.scale.set(1.4, 1.4, 1.4); + //outline.name = `${handleName}.outline`; + //box.add(outline); + + let pickSphere = new Mesh(sgLowPolySphere, pickMaterial); + pickSphere.name = `${handleName}.pick_volume`; + pickSphere.scale.set(3, 3, 3); + box.add(pickSphere); + pickSphere.handle = handleName; + this.pickVolumes.push(pickSphere); + + node.setOpacity = (target) => { + let opacity = {x: material.opacity}; + let t = new TWEEN.Tween(opacity).to({x: target}, 100); + t.onUpdate(() => { + pickSphere.visible = opacity.x > 0; + box.visible = opacity.x > 0; + material.opacity = opacity.x; + //outlineMaterial.opacity = opacity.x; + pickSphere.material.opacity = opacity.x * 0.5; + }); + t.start(); + }; + + pickSphere.addEventListener("drag", e => {}); + + pickSphere.addEventListener("mouseup", e => { + e.consume(); + }); + + pickSphere.addEventListener("mousedown", e => { + e.consume(); + }); + + pickSphere.addEventListener("click", e => { + e.consume(); + + let selected = this.selection[0]; + let maxScale = Math.max(...selected.scale.toArray()); + let minScale = Math.min(...selected.scale.toArray()); + let handleLength = Math.abs(selected.scale.dot(new Vector3(...handle.alignment))); + let alignment = new Vector3(...handle.alignment).multiplyScalar(2 * maxScale / handleLength); + alignment.applyMatrix4(selected.matrixWorld); + let newCamPos = alignment; + let newCamTarget = selected.getWorldPosition(new Vector3()); + + Utils.moveTo(this.viewer.scene, newCamPos, newCamTarget); + }); + + pickSphere.addEventListener("mouseover", e => { + //box.setOpacity(1); + }); + + pickSphere.addEventListener("mouseleave", e => { + //box.setOpacity(0.4); + }); + } + } + + initializeTranslationHandles(){ + let boxGeometry = new BoxGeometry(1, 1, 1); + + for(let handleName of Object.keys(this.translationHandles)){ + let handle = this.handles[handleName]; + let node = handle.node; + this.scene.add(node); + + let material = new MeshBasicMaterial({ + color: handle.color, + opacity: 0.4, + transparent: true}); + + let outlineMaterial = new MeshBasicMaterial({ + color: 0x000000, + side: BackSide, + opacity: 0.4, + transparent: true}); + + let pickMaterial = new MeshNormalMaterial({ + opacity: 0.2, + transparent: true, + visible: this.showPickVolumes + }); + + let box = new Mesh(boxGeometry, material); + box.name = `${handleName}.handle`; + box.scale.set(0.2, 0.2, 40); + box.lookAt(new Vector3(...handle.alignment)); + box.renderOrder = 10; + node.add(box); + handle.translateNode = box; + + let outline = new Mesh(boxGeometry, outlineMaterial); + outline.name = `${handleName}.outline`; + outline.scale.set(3, 3, 1.03); + outline.renderOrder = 0; + box.add(outline); + + let pickVolume = new Mesh(boxGeometry, pickMaterial); + pickVolume.name = `${handleName}.pick_volume`; + pickVolume.scale.set(12, 12, 1.1); + pickVolume.handle = handleName; + box.add(pickVolume); + this.pickVolumes.push(pickVolume); + + node.setOpacity = (target) => { + let opacity = {x: material.opacity}; + let t = new TWEEN.Tween(opacity).to({x: target}, 100); + t.onUpdate(() => { + box.visible = opacity.x > 0; + pickVolume.visible = opacity.x > 0; + material.opacity = opacity.x; + outlineMaterial.opacity = opacity.x; + pickMaterial.opacity = opacity.x * 0.5; + }); + t.start(); + }; + + pickVolume.addEventListener("drag", (e) => {this.dragTranslationHandle(e);}); + pickVolume.addEventListener("drop", (e) => {this.dropTranslationHandle(e);}); + } + } + + initializeRotationHandles(){ + let adjust = 0.5; + let torusGeometry = new TorusGeometry(1, adjust * 0.015, 8, 64, Math.PI / 2); + let outlineGeometry = new TorusGeometry(1, adjust * 0.04, 8, 64, Math.PI / 2); + let pickGeometry = new TorusGeometry(1, adjust * 0.1, 6, 4, Math.PI / 2); + + for(let handleName of Object.keys(this.rotationHandles)){ + let handle = this.handles[handleName]; + let node = handle.node; + this.scene.add(node); + + let material = new MeshBasicMaterial({ + color: handle.color, + opacity: 0.4, + transparent: true}); + + let outlineMaterial = new MeshBasicMaterial({ + color: 0x000000, + side: BackSide, + opacity: 0.4, + transparent: true}); + + let pickMaterial = new MeshNormalMaterial({ + opacity: 0.2, + transparent: true, + visible: this.showPickVolumes + }); + + let box = new Mesh(torusGeometry, material); + box.name = `${handleName}.handle`; + box.scale.set(20, 20, 20); + box.lookAt(new Vector3(...handle.alignment)); + node.add(box); + handle.translateNode = box; + + let outline = new Mesh(outlineGeometry, outlineMaterial); + outline.name = `${handleName}.outline`; + outline.scale.set(1, 1, 1); + outline.renderOrder = 0; + box.add(outline); + + let pickVolume = new Mesh(pickGeometry, pickMaterial); + pickVolume.name = `${handleName}.pick_volume`; + pickVolume.scale.set(1, 1, 1); + pickVolume.handle = handleName; + box.add(pickVolume); + this.pickVolumes.push(pickVolume); + + node.setOpacity = (target) => { + let opacity = {x: material.opacity}; + let t = new TWEEN.Tween(opacity).to({x: target}, 100); + t.onUpdate(() => { + box.visible = opacity.x > 0; + pickVolume.visible = opacity.x > 0; + material.opacity = opacity.x; + outlineMaterial.opacity = opacity.x; + pickMaterial.opacity = opacity.x * 0.5; + }); + t.start(); + }; + + + //pickVolume.addEventListener("mouseover", (e) => { + // //let a = this.viewer.scene.getActiveCamera().getWorldDirection(new THREE.Vector3()).dot(pickVolume.getWorldDirection(new THREE.Vector3())); + // console.log(pickVolume.getWorldDirection(new THREE.Vector3())); + //}); + + pickVolume.addEventListener("drag", (e) => {this.dragRotationHandle(e);}); + pickVolume.addEventListener("drop", (e) => {this.dropRotationHandle(e);}); + } + } + + dragRotationHandle(e){ + let drag = e.drag; + let handle = this.activeHandle; + let camera = this.viewer.scene.getActiveCamera(); + + if(!handle){ + return + }; + + let localNormal = new Vector3(...handle.alignment); + let n = new Vector3(); + n.copy(new Vector4(...localNormal.toArray(), 0).applyMatrix4(handle.node.matrixWorld)); + n.normalize(); + + if (!drag.intersectionStart){ + + //this.viewer.scene.scene.remove(this.debug); + //this.debug = new THREE.Object3D(); + //this.viewer.scene.scene.add(this.debug); + //Utils.debugSphere(this.debug, drag.location, 3, 0xaaaaaa); + //let debugEnd = drag.location.clone().add(n.clone().multiplyScalar(20)); + //Utils.debugLine(this.debug, drag.location, debugEnd, 0xff0000); + + drag.intersectionStart = drag.location; + drag.objectStart = drag.object.getWorldPosition(new Vector3()); + drag.handle = handle; + + let plane = new Plane().setFromNormalAndCoplanarPoint(n, drag.intersectionStart); + + drag.dragPlane = plane; + drag.pivot = drag.intersectionStart; + }else { + handle = drag.handle; + } + + this.dragging = true; + + let mouse = drag.end; + let domElement = this.viewer.renderer.domElement; + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + + let I = ray.intersectPlane(drag.dragPlane, new Vector3()); + + if (I) { + let center = this.scene.getWorldPosition(new Vector3()); + let from = drag.pivot; + let to = I; + + let v1 = from.clone().sub(center).normalize(); + let v2 = to.clone().sub(center).normalize(); + + let angle = Math.acos(v1.dot(v2)); + let sign = Math.sign(v1.cross(v2).dot(n)); + angle = angle * sign; + if (Number.isNaN(angle)) { + return; + } + + let normal = new Vector3(...handle.alignment); + for (let selection of this.selection) { + selection.rotateOnAxis(normal, angle); + selection.dispatchEvent({ + type: "orientation_changed", + object: selection + }); + } + + drag.pivot = I; + } + } + + dropRotationHandle(e){ + this.dragging = false; + this.setActiveHandle(null); + } + + dragTranslationHandle(e){ + let drag = e.drag; + let handle = this.activeHandle; + let camera = this.viewer.scene.getActiveCamera(); + + if(!drag.intersectionStart && handle){ + drag.intersectionStart = drag.location; + drag.objectStart = drag.object.getWorldPosition(new Vector3()); + + let start = drag.intersectionStart; + let dir = new Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld); + let end = new Vector3().addVectors(start, dir); + let line = new Line3(start.clone(), end.clone()); + drag.line = line; + + let camOnLine = line.closestPointToPoint(camera.position, false, new Vector3()); + let normal = new Vector3().subVectors(camera.position, camOnLine); + let plane = new Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart); + drag.dragPlane = plane; + drag.pivot = drag.intersectionStart; + }else { + handle = drag.handle; + } + + this.dragging = true; + + { + let mouse = drag.end; + let domElement = this.viewer.renderer.domElement; + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + let I = ray.intersectPlane(drag.dragPlane, new Vector3()); + + if (I) { + let iOnLine = drag.line.closestPointToPoint(I, false, new Vector3()); + + let diff = new Vector3().subVectors(iOnLine, drag.pivot); + + for (let selection of this.selection) { + selection.position.add(diff); + selection.dispatchEvent({ + type: "position_changed", + object: selection + }); + } + + drag.pivot = drag.pivot.add(diff); + } + } + } + + dropTranslationHandle(e){ + this.dragging = false; + this.setActiveHandle(null); + } + + dropScaleHandle(e){ + this.dragging = false; + this.setActiveHandle(null); + } + + dragScaleHandle(e){ + let drag = e.drag; + let handle = this.activeHandle; + let camera = this.viewer.scene.getActiveCamera(); + + if(!drag.intersectionStart){ + drag.intersectionStart = drag.location; + drag.objectStart = drag.object.getWorldPosition(new Vector3()); + drag.handle = handle; + + let start = drag.intersectionStart; + let dir = new Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld); + let end = new Vector3().addVectors(start, dir); + let line = new Line3(start.clone(), end.clone()); + drag.line = line; + + let camOnLine = line.closestPointToPoint(camera.position, false, new Vector3()); + let normal = new Vector3().subVectors(camera.position, camOnLine); + let plane = new Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart); + drag.dragPlane = plane; + drag.pivot = drag.intersectionStart; + + //Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05); + }else { + handle = drag.handle; + } + + this.dragging = true; + + { + let mouse = drag.end; + let domElement = this.viewer.renderer.domElement; + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + let I = ray.intersectPlane(drag.dragPlane, new Vector3()); + + if (I) { + let iOnLine = drag.line.closestPointToPoint(I, false, new Vector3()); + let direction = handle.alignment.reduce( (a, v) => a + v, 0); + + let toObjectSpace = this.selection[0].matrixWorld.clone().invert(); + let iOnLineOS = iOnLine.clone().applyMatrix4(toObjectSpace); + let pivotOS = drag.pivot.clone().applyMatrix4(toObjectSpace); + let diffOS = new Vector3().subVectors(iOnLineOS, pivotOS); + let dragDirectionOS = diffOS.clone().normalize(); + if(iOnLine.distanceTo(drag.pivot) === 0){ + dragDirectionOS.set(0, 0, 0); + } + let dragDirection = dragDirectionOS.dot(new Vector3(...handle.alignment)); + + let diff = new Vector3().subVectors(iOnLine, drag.pivot); + let diffScale = new Vector3(...handle.alignment).multiplyScalar(diff.length() * direction * dragDirection); + let diffPosition = diff.clone().multiplyScalar(0.5); + + for (let selection of this.selection) { + selection.scale.add(diffScale); + selection.scale.x = Math.max(0.1, selection.scale.x); + selection.scale.y = Math.max(0.1, selection.scale.y); + selection.scale.z = Math.max(0.1, selection.scale.z); + selection.position.add(diffPosition); + selection.dispatchEvent({ + type: "position_changed", + object: selection + }); + selection.dispatchEvent({ + type: "scale_changed", + object: selection + }); + } + + drag.pivot.copy(iOnLine); + //Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05); + } + } + } + + setActiveHandle(handle){ + if(this.dragging){ + return; + } + + if(this.activeHandle === handle){ + return; + } + + this.activeHandle = handle; + + if(handle === null){ + for(let handleName of Object.keys(this.handles)){ + let handle = this.handles[handleName]; + handle.node.setOpacity(0); + } + } + + for(let handleName of Object.keys(this.focusHandles)){ + let handle = this.focusHandles[handleName]; + + if(this.activeHandle === handle){ + handle.node.setOpacity(1.0); + }else { + handle.node.setOpacity(0.4); + } + } + + for(let handleName of Object.keys(this.translationHandles)){ + let handle = this.translationHandles[handleName]; + + if(this.activeHandle === handle){ + handle.node.setOpacity(1.0); + }else { + handle.node.setOpacity(0.4); + } + } + + for(let handleName of Object.keys(this.rotationHandles)){ + let handle = this.rotationHandles[handleName]; + + //if(this.activeHandle === handle){ + // handle.node.setOpacity(1.0); + //}else{ + // handle.node.setOpacity(0.4) + //} + + handle.node.setOpacity(0.4); + } + + for(let handleName of Object.keys(this.scaleHandles)){ + let handle = this.scaleHandles[handleName]; + + if(this.activeHandle === handle){ + handle.node.setOpacity(1.0); + + let relatedFocusHandle = this.focusHandles[handle.name.replace("scale", "focus")]; + let relatedFocusNode = relatedFocusHandle.node; + relatedFocusNode.setOpacity(0.4); + + for(let translationHandleName of Object.keys(this.translationHandles)){ + let translationHandle = this.translationHandles[translationHandleName]; + translationHandle.node.setOpacity(0.4); + } + + //let relatedTranslationHandle = this.translationHandles[ + // handle.name.replace("scale", "translation").replace(/[+-]/g, "")]; + //let relatedTranslationNode = relatedTranslationHandle.node; + //relatedTranslationNode.setOpacity(0.4); + + + }else { + handle.node.setOpacity(0.4); + } + } + + + + + + if(handle){ + handle.node.setOpacity(1.0); + } + + + } + + update () { + + if(this.selection.length === 1){ + + this.scene.visible = true; + + this.scene.updateMatrix(); + this.scene.updateMatrixWorld(); + + let selected = this.selection[0]; + let world = selected.matrixWorld; + let camera = this.viewer.scene.getActiveCamera(); + let domElement = this.viewer.renderer.domElement; + let mouse = this.viewer.inputHandler.mouse; + + let center = selected.boundingBox.getCenter(new Vector3()).clone().applyMatrix4(selected.matrixWorld); + + this.scene.scale.copy(selected.boundingBox.getSize(new Vector3()).multiply(selected.scale)); + this.scene.position.copy(center); + this.scene.rotation.copy(selected.rotation); + + this.scene.updateMatrixWorld(); + + { + // adjust scale of components + for(let handleName of Object.keys(this.handles)){ + let handle = this.handles[handleName]; + let node = handle.node; + + let handlePos = node.getWorldPosition(new Vector3()); + let distance = handlePos.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight); + + let ws = node.parent.getWorldScale(new Vector3()); + + let s = (7 / pr); + let scale = new Vector3(s, s, s).divide(ws); + + let rot = new Matrix4().makeRotationFromEuler(node.rotation); + let rotInv = rot.clone().invert(); + + scale.applyMatrix4(rotInv); + scale.x = Math.abs(scale.x); + scale.y = Math.abs(scale.y); + scale.z = Math.abs(scale.z); + + node.scale.copy(scale); + } + + // adjust rotation handles + if(!this.dragging){ + let tWorld = this.scene.matrixWorld; + let tObject = tWorld.clone().invert(); + let camObjectPos = camera.getWorldPosition(new Vector3()).applyMatrix4(tObject); + + let x = this.rotationHandles["rotation.x"].node.rotation; + let y = this.rotationHandles["rotation.y"].node.rotation; + let z = this.rotationHandles["rotation.z"].node.rotation; + + x.order = "ZYX"; + y.order = "ZYX"; + + let above = camObjectPos.z > 0; + let below = !above; + let PI_HALF = Math.PI / 2; + + if(above){ + if(camObjectPos.x > 0 && camObjectPos.y > 0){ + x.x = 1 * PI_HALF; + y.y = 3 * PI_HALF; + z.z = 0 * PI_HALF; + }else if(camObjectPos.x < 0 && camObjectPos.y > 0){ + x.x = 1 * PI_HALF; + y.y = 2 * PI_HALF; + z.z = 1 * PI_HALF; + }else if(camObjectPos.x < 0 && camObjectPos.y < 0){ + x.x = 2 * PI_HALF; + y.y = 2 * PI_HALF; + z.z = 2 * PI_HALF; + }else if(camObjectPos.x > 0 && camObjectPos.y < 0){ + x.x = 2 * PI_HALF; + y.y = 3 * PI_HALF; + z.z = 3 * PI_HALF; + } + }else if(below){ + if(camObjectPos.x > 0 && camObjectPos.y > 0){ + x.x = 0 * PI_HALF; + y.y = 0 * PI_HALF; + z.z = 0 * PI_HALF; + }else if(camObjectPos.x < 0 && camObjectPos.y > 0){ + x.x = 0 * PI_HALF; + y.y = 1 * PI_HALF; + z.z = 1 * PI_HALF; + }else if(camObjectPos.x < 0 && camObjectPos.y < 0){ + x.x = 3 * PI_HALF; + y.y = 1 * PI_HALF; + z.z = 2 * PI_HALF; + }else if(camObjectPos.x > 0 && camObjectPos.y < 0){ + x.x = 3 * PI_HALF; + y.y = 0 * PI_HALF; + z.z = 3 * PI_HALF; + } + } + } + + { + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + let raycaster = new Raycaster(ray.origin, ray.direction); + let intersects = raycaster.intersectObjects(this.pickVolumes.filter(v => v.visible), true); + + if(intersects.length > 0){ + let I = intersects[0]; + let handleName = I.object.handle; + this.setActiveHandle(this.handles[handleName]); + }else { + this.setActiveHandle(null); + } + } + + // + for(let handleName of Object.keys(this.scaleHandles)){ + let handle = this.handles[handleName]; + let node = handle.node; + let alignment = handle.alignment; + + + + } + } + + }else { + this.scene.visible = false; + } + + } + + }; + + class VolumeTool extends EventDispatcher{ + constructor (viewer) { + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.addEventListener('start_inserting_volume', e => { + this.viewer.dispatchEvent({ + type: 'cancel_insertions' + }); + }); + + this.scene = new Scene(); + this.scene.name = 'scene_volume'; + + this.viewer.inputHandler.registerInteractiveScene(this.scene); + + this.onRemove = e => { + this.scene.remove(e.volume); + }; + + this.onAdd = e => { + this.scene.add(e.volume); + }; + + for(let volume of viewer.scene.volumes){ + this.onAdd({volume: volume}); + } + + this.viewer.inputHandler.addEventListener('delete', e => { + let volumes = e.selection.filter(e => (e instanceof Volume)); + volumes.forEach(e => this.viewer.scene.removeVolume(e)); + }); + + viewer.addEventListener("update", this.update.bind(this)); + viewer.addEventListener("render.pass.scene", e => this.render(e)); + viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); + + viewer.scene.addEventListener('volume_added', this.onAdd); + viewer.scene.addEventListener('volume_removed', this.onRemove); + } + + onSceneChange(e){ + if(e.oldScene){ + e.oldScene.removeEventListeners('volume_added', this.onAdd); + e.oldScene.removeEventListeners('volume_removed', this.onRemove); + } + + e.scene.addEventListener('volume_added', this.onAdd); + e.scene.addEventListener('volume_removed', this.onRemove); + } + + startInsertion (args = {}) { + let volume; + if(args.type){ + volume = new args.type(); + }else { + volume = new BoxVolume(); + } + + volume.clip = args.clip || false; + volume.name = args.name || 'Volume'; + + this.dispatchEvent({ + type: 'start_inserting_volume', + volume: volume + }); + + this.viewer.scene.addVolume(volume); + this.scene.add(volume); + + let cancel = { + callback: null + }; + + let drag = e => { + let camera = this.viewer.scene.getActiveCamera(); + + let I = Utils.getMousePointCloudIntersection( + e.drag.end, + this.viewer.scene.getActiveCamera(), + this.viewer, + this.viewer.scene.pointclouds, + {pickClipped: false}); + + if (I) { + volume.position.copy(I.location); + + let wp = volume.getWorldPosition(new Vector3()).applyMatrix4(camera.matrixWorldInverse); + // let pp = new THREE.Vector4(wp.x, wp.y, wp.z).applyMatrix4(camera.projectionMatrix); + let w = Math.abs((wp.z / 5)); + volume.scale.set(w, w, w); + } + }; + + let drop = e => { + volume.removeEventListener('drag', drag); + volume.removeEventListener('drop', drop); + + cancel.callback(); + }; + + cancel.callback = e => { + volume.removeEventListener('drag', drag); + volume.removeEventListener('drop', drop); + this.viewer.removeEventListener('cancel_insertions', cancel.callback); + }; + + volume.addEventListener('drag', drag); + volume.addEventListener('drop', drop); + this.viewer.addEventListener('cancel_insertions', cancel.callback); + + this.viewer.inputHandler.startDragging(volume); + + return volume; + } + + update(){ + if (!this.viewer.scene) { + return; + } + + let camera = this.viewer.scene.getActiveCamera(); + let renderAreaSize = this.viewer.renderer.getSize(new Vector2()); + let clientWidth = renderAreaSize.width; + let clientHeight = renderAreaSize.height; + + let volumes = this.viewer.scene.volumes; + for (let volume of volumes) { + let label = volume.label; + + { + + let distance = label.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); + + let scale = (70 / pr); + label.scale.set(scale, scale, scale); + } + + let calculatedVolume = volume.getVolume(); + calculatedVolume = 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 + let text = Utils.addCommas(calculatedVolume.toFixed(3)) + ' ' + this.viewer.lengthUnitDisplay.code + '\u00B3'; + label.setText(text); + } + } + + render(params){ + const renderer = this.viewer.renderer; + + const oldTarget = renderer.getRenderTarget(); + + if(params.renderTarget){ + renderer.setRenderTarget(params.renderTarget); + } + renderer.render(this.scene, this.viewer.scene.getActiveCamera()); + renderer.setRenderTarget(oldTarget); + } + + } + + class Compass{ + + constructor(viewer){ + this.viewer = viewer; + + this.visible = false; + this.dom = this.createElement(); + + viewer.addEventListener("update", () => { + const direction = viewer.scene.view.direction.clone(); + direction.z = 0; + direction.normalize(); + + const camera = viewer.scene.getActiveCamera(); + + const p1 = camera.getWorldPosition(new Vector3()); + const p2 = p1.clone().add(direction); + + const projection = viewer.getProjection(); + const azimuth = Utils.computeAzimuth(p1, p2, projection); + + this.dom.css("transform", `rotateZ(${-azimuth}rad)`); + }); + + this.dom.click( () => { + viewer.setTopView(); + }); + + const renderArea = $(viewer.renderArea); + renderArea.append(this.dom); + + this.setVisible(this.visible); + } + + setVisible(visible){ + this.visible = visible; + + const value = visible ? "" : "none"; + this.dom.css("display", value); + } + + isVisible(){ + return this.visible; + } + + createElement(){ + const style = `style="position: absolute; top: 10px; right: 10px; z-index: 10000; width: 64px;"`; + const img = $(``); + + return img; + } + + }; + + class PotreeRenderer { + + constructor (viewer) { + this.viewer = viewer; + this.renderer = viewer.renderer; + + { + let dummyScene = new Scene(); + let geometry = new SphereGeometry(0.001, 2, 2); + let mesh = new Mesh(geometry, new MeshBasicMaterial()); + mesh.position.set(36453, 35163, 764712); + dummyScene.add(mesh); + + this.dummyMesh = mesh; + this.dummyScene = dummyScene; + } + } + + clearTargets(){ + + } + + clear(){ + let {viewer, renderer} = this; + + + // render skybox + if(viewer.background === "skybox"){ + renderer.setClearColor(0xff0000, 1); + }else if(viewer.background === "gradient"){ + renderer.setClearColor(0x00ff00, 1); + }else if(viewer.background === "black"){ + renderer.setClearColor(0x000000, 1); + }else if(viewer.background === "white"){ + renderer.setClearColor(0xFFFFFF, 1); + }else { + renderer.setClearColor(0x000000, 0); + } + + renderer.clear(); + } + + render(params){ + let {viewer, renderer} = this; + + const camera = params.camera ? params.camera : viewer.scene.getActiveCamera(); + + viewer.dispatchEvent({type: "render.pass.begin",viewer: viewer}); + + const renderAreaSize = renderer.getSize(new Vector2()); + const width = params.viewport ? params.viewport[2] : renderAreaSize.x; + const height = params.viewport ? params.viewport[3] : renderAreaSize.y; + + // render skybox + if(viewer.background === "skybox"){ + viewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation); + viewer.skybox.camera.fov = viewer.scene.cameraP.fov; + viewer.skybox.camera.aspect = viewer.scene.cameraP.aspect; + + viewer.skybox.parent.rotation.x = 0; + viewer.skybox.parent.updateMatrixWorld(); + + viewer.skybox.camera.updateProjectionMatrix(); + renderer.render(viewer.skybox.scene, viewer.skybox.camera); + }else if(viewer.background === "gradient"){ + renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG); + } + + for(let pointcloud of this.viewer.scene.pointclouds){ + const {material} = pointcloud; + material.useEDL = false; + } + + viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, null, { + clipSpheres: viewer.scene.volumes.filter(v => (v instanceof Potree.SphereVolume)), + }); + + // render scene + renderer.render(viewer.scene.scene, camera); + + viewer.dispatchEvent({type: "render.pass.scene",viewer: viewer}); + + viewer.clippingTool.update(); + renderer.render(viewer.clippingTool.sceneMarker, viewer.scene.cameraScreenSpace); //viewer.scene.cameraScreenSpace); + renderer.render(viewer.clippingTool.sceneVolume, camera); + + renderer.render(viewer.controls.sceneControls, camera); + + renderer.clearDepth(); + + viewer.transformationTool.update(); + + viewer.dispatchEvent({type: "render.pass.perspective_overlay",viewer: viewer}); + + // renderer.render(viewer.controls.sceneControls, camera); + // renderer.render(viewer.clippingTool.sceneVolume, camera); + // renderer.render(viewer.transformationTool.scene, camera); + + // renderer.setViewport(width - viewer.navigationCube.width, + // height - viewer.navigationCube.width, + // viewer.navigationCube.width, viewer.navigationCube.width); + // renderer.render(viewer.navigationCube, viewer.navigationCube.camera); + // renderer.setViewport(0, 0, width, height); + + viewer.dispatchEvent({type: "render.pass.end",viewer: viewer}); + } + + } + + class EDLRenderer{ + constructor(viewer){ + this.viewer = viewer; + + this.edlMaterial = null; + + this.rtRegular; + this.rtEDL; + + this.gl = viewer.renderer.getContext(); + + this.shadowMap = new PointCloudSM(this.viewer.pRenderer); + } + + initEDL(){ + if (this.edlMaterial != null) { + return; + } + + this.edlMaterial = new EyeDomeLightingMaterial(); + this.edlMaterial.depthTest = true; + this.edlMaterial.depthWrite = true; + this.edlMaterial.transparent = true; + + this.rtEDL = new WebGLRenderTarget(1024, 1024, { + minFilter: NearestFilter, + magFilter: NearestFilter, + format: RGBAFormat, + type: FloatType, + depthTexture: new DepthTexture(undefined, undefined, UnsignedIntType) + }); + + this.rtRegular = new WebGLRenderTarget(1024, 1024, { + minFilter: NearestFilter, + magFilter: NearestFilter, + format: RGBAFormat, + depthTexture: new DepthTexture(undefined, undefined, UnsignedIntType) + }); + }; + + resize(width, height){ + if(this.screenshot){ + width = this.screenshot.target.width; + height = this.screenshot.target.height; + } + + this.rtEDL.setSize(width , height); + this.rtRegular.setSize(width , height); + } + + makeScreenshot(camera, size, callback){ + + if(camera === undefined || camera === null){ + camera = this.viewer.scene.getActiveCamera(); + } + + if(size === undefined || size === null){ + size = this.viewer.renderer.getSize(new Vector2()); + } + + let {width, height} = size; + + //let maxTextureSize = viewer.renderer.capabilities.maxTextureSize; + //if(width * 4 < + width = 2 * width; + height = 2 * height; + + let target = new WebGLRenderTarget(width, height, { + format: RGBAFormat, + }); + + this.screenshot = { + target: target + }; + + // HACK? removed because of error, was this important? + //this.viewer.renderer.clearTarget(target, true, true, true); + + this.render(); + + let pixelCount = width * height; + let buffer = new Uint8Array(4 * pixelCount); + + this.viewer.renderer.readRenderTargetPixels(target, 0, 0, width, height, buffer); + + // flip vertically + let bytesPerLine = width * 4; + for(let i = 0; i < parseInt(height / 2); i++){ + let j = height - i - 1; + + let lineI = buffer.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine); + let lineJ = buffer.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine); + buffer.set(lineJ, i * bytesPerLine); + buffer.set(lineI, j * bytesPerLine); + } + + this.screenshot.target.dispose(); + delete this.screenshot; + + return { + width: width, + height: height, + buffer: buffer + }; + } + + clearTargets(){ + const viewer = this.viewer; + const {renderer} = viewer; + + const oldTarget = renderer.getRenderTarget(); + + renderer.setRenderTarget( this.rtEDL ); + renderer.clear( true, true, true ); + + renderer.setRenderTarget( this.rtRegular ); + renderer.clear( true, true, false ); + + renderer.setRenderTarget(oldTarget); + } + + clear(){ + this.initEDL(); + const viewer = this.viewer; + + const {renderer, background} = viewer; + + if(background === "skybox"){ + renderer.setClearColor(0x000000, 0); + } else if (background === 'gradient') { + renderer.setClearColor(0x000000, 0); + } else if (background === 'black') { + renderer.setClearColor(0x000000, 1); + } else if (background === 'white') { + renderer.setClearColor(0xFFFFFF, 1); + } else { + renderer.setClearColor(0x000000, 0); + } + + renderer.clear(); + + this.clearTargets(); + } + + renderShadowMap(visiblePointClouds, camera, lights){ + + const {viewer} = this; + + const doShadows = lights.length > 0 && !(lights[0].disableShadowUpdates); + if(doShadows){ + let light = lights[0]; + + this.shadowMap.setLight(light); + + let originalAttributes = new Map(); + for(let pointcloud of viewer.scene.pointclouds){ + // TODO IMPORTANT !!! check + originalAttributes.set(pointcloud, pointcloud.material.activeAttributeName); + pointcloud.material.disableEvents(); + pointcloud.material.activeAttributeName = "depth"; + //pointcloud.material.pointColorType = PointColorType.DEPTH; + } + + this.shadowMap.render(viewer.scene.scenePointCloud, camera); + + for(let pointcloud of visiblePointClouds){ + let originalAttribute = originalAttributes.get(pointcloud); + // TODO IMPORTANT !!! check + pointcloud.material.activeAttributeName = originalAttribute; + pointcloud.material.enableEvents(); + } + + viewer.shadowTestCam.updateMatrixWorld(); + viewer.shadowTestCam.matrixWorldInverse.copy(viewer.shadowTestCam.matrixWorld).invert(); + viewer.shadowTestCam.updateProjectionMatrix(); + } + + } + + render(params){ + this.initEDL(); + + const viewer = this.viewer; + let camera = params.camera ? params.camera : viewer.scene.getActiveCamera(); + const {width, height} = this.viewer.renderer.getSize(new Vector2()); + + + viewer.dispatchEvent({type: "render.pass.begin",viewer: viewer}); + + this.resize(width, height); + + const visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible); + + if(this.screenshot){ + let oldBudget = Potree.pointBudget; + Potree.pointBudget = Math.max(10 * 1000 * 1000, 2 * oldBudget); + let result = Potree.updatePointClouds( + viewer.scene.pointclouds, + camera, + viewer.renderer); + Potree.pointBudget = oldBudget; + } + + let lights = []; + viewer.scene.scene.traverse(node => { + if(node.type === "SpotLight"){ + lights.push(node); + } + }); + + if(viewer.background === "skybox"){ + viewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation); + viewer.skybox.camera.fov = viewer.scene.cameraP.fov; + viewer.skybox.camera.aspect = viewer.scene.cameraP.aspect; + + viewer.skybox.parent.rotation.x = 0; + viewer.skybox.parent.updateMatrixWorld(); + + viewer.skybox.camera.updateProjectionMatrix(); + viewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera); + } else if (viewer.background === 'gradient') { + viewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG); + } + + //TODO adapt to multiple lights + this.renderShadowMap(visiblePointClouds, camera, lights); + + { // COLOR & DEPTH PASS + for (let pointcloud of visiblePointClouds) { + let octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x; + + let material = pointcloud.material; + material.weighted = false; + material.useLogarithmicDepthBuffer = false; + material.useEDL = true; + + material.screenWidth = width; + material.screenHeight = height; + material.uniforms.visibleNodes.value = pointcloud.material.visibleNodesTexture; + material.uniforms.octreeSize.value = octreeSize; + material.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(pointcloud.scale.x, pointcloud.scale.y, pointcloud.scale.z); + } + + // TODO adapt to multiple lights + viewer.renderer.setRenderTarget(this.rtEDL); + + if(lights.length > 0){ + viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, { + clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), + shadowMaps: [this.shadowMap], + transparent: false, + }); + }else { + + + // let test = camera.clone(); + // test.matrixAutoUpdate = false; + + // //test.updateMatrixWorld = () => {}; + + // let mat = new THREE.Matrix4().set( + // 1, 0, 0, 0, + // 0, 0, 1, 0, + // 0, -1, 0, 0, + // 0, 0, 0, 1, + // ); + // mat.invert() + + // test.matrix.multiplyMatrices(mat, test.matrix); + // test.updateMatrixWorld(); + + //test.matrixWorld.multiplyMatrices(mat, test.matrixWorld); + //test.matrixWorld.multiply(mat); + //test.matrixWorldInverse.invert(test.matrixWorld); + //test.matrixWorldInverse.multiplyMatrices(test.matrixWorldInverse, mat); + + + viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, { + clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), + transparent: false, + }); + } + + + } + + viewer.dispatchEvent({type: "render.pass.scene", viewer: viewer, renderTarget: this.rtRegular}); + viewer.renderer.setRenderTarget(null); + viewer.renderer.render(viewer.scene.scene, camera); + + { // EDL PASS + + const uniforms = this.edlMaterial.uniforms; + + uniforms.screenWidth.value = width; + uniforms.screenHeight.value = height; + + let proj = camera.projectionMatrix; + let projArray = new Float32Array(16); + projArray.set(proj.elements); + + uniforms.uNear.value = camera.near; + uniforms.uFar.value = camera.far; + uniforms.uEDLColor.value = this.rtEDL.texture; + uniforms.uEDLDepth.value = this.rtEDL.depthTexture; + uniforms.uProj.value = projArray; + + uniforms.edlStrength.value = viewer.edlStrength; + uniforms.radius.value = viewer.edlRadius; + uniforms.opacity.value = viewer.edlOpacity; // HACK + + Utils.screenPass.render(viewer.renderer, this.edlMaterial); + + if(this.screenshot){ + Utils.screenPass.render(viewer.renderer, this.edlMaterial, this.screenshot.target); + } + + } + + viewer.dispatchEvent({type: "render.pass.scene", viewer: viewer}); + + viewer.renderer.clearDepth(); + + viewer.transformationTool.update(); + + viewer.dispatchEvent({type: "render.pass.perspective_overlay",viewer: viewer}); + + viewer.renderer.render(viewer.controls.sceneControls, camera); + viewer.renderer.render(viewer.clippingTool.sceneVolume, camera); + viewer.renderer.render(viewer.transformationTool.scene, camera); + + viewer.dispatchEvent({type: "render.pass.end",viewer: viewer}); + + } + } + + class HQSplatRenderer{ + + constructor(viewer){ + this.viewer = viewer; + + this.depthMaterials = new Map(); + this.attributeMaterials = new Map(); + this.normalizationMaterial = null; + + this.rtDepth = null; + this.rtAttribute = null; + this.gl = viewer.renderer.getContext(); + + this.initialized = false; + } + + init(){ + if (this.initialized) { + return; + } + + this.normalizationMaterial = new NormalizationMaterial(); + this.normalizationMaterial.depthTest = true; + this.normalizationMaterial.depthWrite = true; + this.normalizationMaterial.transparent = true; + + this.normalizationEDLMaterial = new NormalizationEDLMaterial(); + this.normalizationEDLMaterial.depthTest = true; + this.normalizationEDLMaterial.depthWrite = true; + this.normalizationEDLMaterial.transparent = true; + + this.rtDepth = new WebGLRenderTarget(1024, 1024, { + minFilter: NearestFilter, + magFilter: NearestFilter, + format: RGBAFormat, + type: FloatType, + depthTexture: new DepthTexture(undefined, undefined, UnsignedIntType) + }); + + this.rtAttribute = new WebGLRenderTarget(1024, 1024, { + minFilter: NearestFilter, + magFilter: NearestFilter, + format: RGBAFormat, + type: FloatType, + depthTexture: this.rtDepth.depthTexture, + }); + + this.initialized = true; + }; + + resize(width, height){ + this.rtDepth.setSize(width, height); + this.rtAttribute.setSize(width, height); + } + + clearTargets(){ + const viewer = this.viewer; + const {renderer} = viewer; + + const oldTarget = renderer.getRenderTarget(); + + renderer.setClearColor(0x000000, 0); + + renderer.setRenderTarget( this.rtDepth ); + renderer.clear( true, true, true ); + + renderer.setRenderTarget( this.rtAttribute ); + renderer.clear( true, true, true ); + + renderer.setRenderTarget(oldTarget); + } + + + clear(){ + this.init(); + + const {renderer, background} = this.viewer; + + if(background === "skybox"){ + renderer.setClearColor(0x000000, 0); + } else if (background === 'gradient') { + renderer.setClearColor(0x000000, 0); + } else if (background === 'black') { + renderer.setClearColor(0x000000, 1); + } else if (background === 'white') { + renderer.setClearColor(0xFFFFFF, 1); + } else { + renderer.setClearColor(0x000000, 0); + } + + renderer.clear(); + + this.clearTargets(); + } + + render (params) { + this.init(); + + const viewer = this.viewer; + const camera = params.camera ? params.camera : viewer.scene.getActiveCamera(); + const {width, height} = this.viewer.renderer.getSize(new Vector2()); + + viewer.dispatchEvent({type: "render.pass.begin",viewer: viewer}); + + this.resize(width, height); + + const visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible); + const originalMaterials = new Map(); + + for(let pointcloud of visiblePointClouds){ + originalMaterials.set(pointcloud, pointcloud.material); + + if(!this.attributeMaterials.has(pointcloud)){ + let attributeMaterial = new PointCloudMaterial$1(); + this.attributeMaterials.set(pointcloud, attributeMaterial); + } + + if(!this.depthMaterials.has(pointcloud)){ + let depthMaterial = new PointCloudMaterial$1(); + + depthMaterial.setDefine("depth_pass", "#define hq_depth_pass"); + depthMaterial.setDefine("use_edl", "#define use_edl"); + + this.depthMaterials.set(pointcloud, depthMaterial); + } + } + + { // DEPTH PASS + for (let pointcloud of visiblePointClouds) { + let octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x; + + let material = originalMaterials.get(pointcloud); + let depthMaterial = this.depthMaterials.get(pointcloud); + + depthMaterial.size = material.size; + depthMaterial.minSize = material.minSize; + depthMaterial.maxSize = material.maxSize; + + depthMaterial.pointSizeType = material.pointSizeType; + depthMaterial.visibleNodesTexture = material.visibleNodesTexture; + depthMaterial.weighted = false; + depthMaterial.screenWidth = width; + depthMaterial.shape = PointShape.CIRCLE; + depthMaterial.screenHeight = height; + depthMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture; + depthMaterial.uniforms.octreeSize.value = octreeSize; + depthMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray()); + depthMaterial.classification = material.classification; + depthMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data; + depthMaterial.classificationTexture.needsUpdate = true; + + depthMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value; + depthMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value; + depthMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value; + depthMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value; + + depthMaterial.clipTask = material.clipTask; + depthMaterial.clipMethod = material.clipMethod; + depthMaterial.setClipBoxes(material.clipBoxes); + depthMaterial.setClipPolygons(material.clipPolygons); + + pointcloud.material = depthMaterial; + } + + viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtDepth, { + clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), + }); + } + + { // ATTRIBUTE PASS + for (let pointcloud of visiblePointClouds) { + let octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x; + + let material = originalMaterials.get(pointcloud); + let attributeMaterial = this.attributeMaterials.get(pointcloud); + + attributeMaterial.size = material.size; + attributeMaterial.minSize = material.minSize; + attributeMaterial.maxSize = material.maxSize; + + attributeMaterial.pointSizeType = material.pointSizeType; + attributeMaterial.activeAttributeName = material.activeAttributeName; + attributeMaterial.visibleNodesTexture = material.visibleNodesTexture; + attributeMaterial.weighted = true; + attributeMaterial.screenWidth = width; + attributeMaterial.screenHeight = height; + attributeMaterial.shape = PointShape.CIRCLE; + attributeMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture; + attributeMaterial.uniforms.octreeSize.value = octreeSize; + attributeMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray()); + attributeMaterial.classification = material.classification; + attributeMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data; + attributeMaterial.classificationTexture.needsUpdate = true; + + attributeMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value; + attributeMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value; + attributeMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value; + attributeMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value; + + attributeMaterial.elevationGradientRepeat = material.elevationGradientRepeat; + attributeMaterial.elevationRange = material.elevationRange; + attributeMaterial.gradient = material.gradient; + attributeMaterial.matcap = material.matcap; + + attributeMaterial.intensityRange = material.intensityRange; + attributeMaterial.intensityGamma = material.intensityGamma; + attributeMaterial.intensityContrast = material.intensityContrast; + attributeMaterial.intensityBrightness = material.intensityBrightness; + + attributeMaterial.rgbGamma = material.rgbGamma; + attributeMaterial.rgbContrast = material.rgbContrast; + attributeMaterial.rgbBrightness = material.rgbBrightness; + + attributeMaterial.weightRGB = material.weightRGB; + attributeMaterial.weightIntensity = material.weightIntensity; + attributeMaterial.weightElevation = material.weightElevation; + attributeMaterial.weightRGB = material.weightRGB; + attributeMaterial.weightClassification = material.weightClassification; + attributeMaterial.weightReturnNumber = material.weightReturnNumber; + attributeMaterial.weightSourceID = material.weightSourceID; + + attributeMaterial.color = material.color; + + attributeMaterial.clipTask = material.clipTask; + attributeMaterial.clipMethod = material.clipMethod; + attributeMaterial.setClipBoxes(material.clipBoxes); + attributeMaterial.setClipPolygons(material.clipPolygons); + + pointcloud.material = attributeMaterial; + } + + let gl = this.gl; + + viewer.renderer.setRenderTarget(null); + viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtAttribute, { + clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), + //material: this.attributeMaterial, + blendFunc: [gl.SRC_ALPHA, gl.ONE], + //depthTest: false, + depthWrite: false + }); + } + + for(let [pointcloud, material] of originalMaterials){ + pointcloud.material = material; + } + + viewer.renderer.setRenderTarget(null); + if(viewer.background === "skybox"){ + viewer.renderer.setClearColor(0x000000, 0); + viewer.renderer.clear(); + viewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation); + viewer.skybox.camera.fov = viewer.scene.cameraP.fov; + viewer.skybox.camera.aspect = viewer.scene.cameraP.aspect; + + viewer.skybox.parent.rotation.x = 0; + viewer.skybox.parent.updateMatrixWorld(); + + viewer.skybox.camera.updateProjectionMatrix(); + viewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera); + } else if (viewer.background === 'gradient') { + viewer.renderer.setClearColor(0x000000, 0); + viewer.renderer.clear(); + viewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG); + } else if (viewer.background === 'black') { + viewer.renderer.setClearColor(0x000000, 1); + viewer.renderer.clear(); + } else if (viewer.background === 'white') { + viewer.renderer.setClearColor(0xFFFFFF, 1); + viewer.renderer.clear(); + } else { + viewer.renderer.setClearColor(0x000000, 0); + viewer.renderer.clear(); + } + + { // NORMALIZATION PASS + let normalizationMaterial = this.useEDL ? this.normalizationEDLMaterial : this.normalizationMaterial; + + if(this.useEDL){ + normalizationMaterial.uniforms.edlStrength.value = viewer.edlStrength; + normalizationMaterial.uniforms.radius.value = viewer.edlRadius; + normalizationMaterial.uniforms.screenWidth.value = width; + normalizationMaterial.uniforms.screenHeight.value = height; + normalizationMaterial.uniforms.uEDLMap.value = this.rtDepth.texture; + } + + normalizationMaterial.uniforms.uWeightMap.value = this.rtAttribute.texture; + normalizationMaterial.uniforms.uDepthMap.value = this.rtAttribute.depthTexture; + + Utils.screenPass.render(viewer.renderer, normalizationMaterial); + } + + viewer.renderer.render(viewer.scene.scene, camera); + + viewer.dispatchEvent({type: "render.pass.scene", viewer: viewer}); + + viewer.renderer.clearDepth(); + + viewer.transformationTool.update(); + + viewer.dispatchEvent({type: "render.pass.perspective_overlay",viewer: viewer}); + + viewer.renderer.render(viewer.controls.sceneControls, camera); + viewer.renderer.render(viewer.clippingTool.sceneVolume, camera); + viewer.renderer.render(viewer.transformationTool.scene, camera); + + viewer.renderer.setViewport(width - viewer.navigationCube.width, + height - viewer.navigationCube.width, + viewer.navigationCube.width, viewer.navigationCube.width); + viewer.renderer.render(viewer.navigationCube, viewer.navigationCube.camera); + viewer.renderer.setViewport(0, 0, width, height); + + viewer.dispatchEvent({type: "render.pass.end",viewer: viewer}); + + } + + } + + class View{ + constructor () { + this.position = new Vector3(0, 0, 0); + + this.yaw = Math.PI / 4; + this._pitch = -Math.PI / 4; + this.radius = 1; + + this.maxPitch = Math.PI / 2; + this.minPitch = -Math.PI / 2; + } + + clone () { + let c = new View(); + c.yaw = this.yaw; + c._pitch = this.pitch; + c.radius = this.radius; + c.maxPitch = this.maxPitch; + c.minPitch = this.minPitch; + + return c; + } + + get pitch () { + return this._pitch; + } + + set pitch (angle) { + this._pitch = Math.max(Math.min(angle, this.maxPitch), this.minPitch); + } + + get direction () { + let dir = new Vector3(0, 1, 0); + + dir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch); + dir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); + + return dir; + } + + set direction (dir) { + + //if(dir.x === dir.y){ + if(dir.x === 0 && dir.y === 0){ + this.pitch = Math.PI / 2 * Math.sign(dir.z); + }else { + let yaw = Math.atan2(dir.y, dir.x) - Math.PI / 2; + let pitch = Math.atan2(dir.z, Math.sqrt(dir.x * dir.x + dir.y * dir.y)); + + this.yaw = yaw; + this.pitch = pitch; + } + + } + + lookAt(t){ + let V; + if(arguments.length === 1){ + V = new Vector3().subVectors(t, this.position); + }else if(arguments.length === 3){ + V = new Vector3().subVectors(new Vector3(...arguments), this.position); + } + + let radius = V.length(); + let dir = V.normalize(); + + this.radius = radius; + this.direction = dir; + } + + getPivot () { + return new Vector3().addVectors(this.position, this.direction.multiplyScalar(this.radius)); + } + + getSide () { + let side = new Vector3(1, 0, 0); + side.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); + + return side; + } + + pan (x, y) { + let dir = new Vector3(0, 1, 0); + dir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch); + dir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); + + // let side = new THREE.Vector3(1, 0, 0); + // side.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw); + + let side = this.getSide(); + + let up = side.clone().cross(dir); + + let pan = side.multiplyScalar(x).add(up.multiplyScalar(y)); + + this.position = this.position.add(pan); + // this.target = this.target.add(pan); + } + + translate (x, y, z) { + let dir = new Vector3(0, 1, 0); + dir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch); + dir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); + + let side = new Vector3(1, 0, 0); + side.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); + + let up = side.clone().cross(dir); + + let t = side.multiplyScalar(x) + .add(dir.multiplyScalar(y)) + .add(up.multiplyScalar(z)); + + this.position = this.position.add(t); + } + + translateWorld (x, y, z) { + this.position.x += x; + this.position.y += y; + this.position.z += z; + } + + setView(position, target, duration = 0, callback = null){ + + let endPosition = null; + if(position instanceof Array){ + endPosition = new Vector3(...position); + }else if(position.x != null){ + endPosition = position.clone(); + } + + let endTarget = null; + if(target instanceof Array){ + endTarget = new Vector3(...target); + }else if(target.x != null){ + endTarget = target.clone(); + } + + const startPosition = this.position.clone(); + const startTarget = this.getPivot(); + + //const endPosition = position.clone(); + //const endTarget = target.clone(); + + let easing = TWEEN.Easing.Quartic.Out; + + if(duration === 0){ + this.position.copy(endPosition); + this.lookAt(endTarget); + }else { + let value = {x: 0}; + let tween = new TWEEN.Tween(value).to({x: 1}, duration); + tween.easing(easing); + //this.tweens.push(tween); + + tween.onUpdate(() => { + let t = value.x; + + //console.log(t); + + const pos = new Vector3( + (1 - t) * startPosition.x + t * endPosition.x, + (1 - t) * startPosition.y + t * endPosition.y, + (1 - t) * startPosition.z + t * endPosition.z, + ); + + const target = new Vector3( + (1 - t) * startTarget.x + t * endTarget.x, + (1 - t) * startTarget.y + t * endTarget.y, + (1 - t) * startTarget.z + t * endTarget.z, + ); + + this.position.copy(pos); + this.lookAt(target); + + }); + + tween.start(); + + tween.onComplete(() => { + if(callback){ + callback(); + } + }); + } + + } + + }; + + class Scene$1 extends EventDispatcher{ + + constructor(){ + super(); + + this.annotations = new Annotation(); + + this.scene = new Scene(); + this.sceneBG = new Scene(); + this.scenePointCloud = new Scene(); + + this.cameraP = new PerspectiveCamera(this.fov, 1, 0.1, 1000*1000); + this.cameraO = new OrthographicCamera(-1, 1, 1, -1, 0.1, 1000*1000); + this.cameraVR = new PerspectiveCamera(); + this.cameraBG = new Camera(); + this.cameraScreenSpace = new OrthographicCamera(-1, 1, 1, -1, 0.1, 10); + this.cameraMode = CameraMode.PERSPECTIVE; + this.overrideCamera = null; + this.pointclouds = []; + + this.measurements = []; + this.profiles = []; + this.volumes = []; + this.polygonClipVolumes = []; + this.cameraAnimations = []; + this.orientedImages = []; + this.images360 = []; + this.geopackages = []; + + this.fpControls = null; + this.orbitControls = null; + this.earthControls = null; + this.geoControls = null; + this.deviceControls = null; + this.inputHandler = null; + + this.view = new View(); + + this.directionalLight = null; + + this.initialize(); + } + + estimateHeightAt (position) { + let height = null; + let fromSpacing = Infinity; + + for (let pointcloud of this.pointclouds) { + if (pointcloud.root.geometryNode === undefined) { + continue; + } + + let pHeight = null; + let pFromSpacing = Infinity; + + let lpos = position.clone().sub(pointcloud.position); + lpos.z = 0; + let ray = new Ray(lpos, new Vector3(0, 0, 1)); + + let stack = [pointcloud.root]; + while (stack.length > 0) { + let node = stack.pop(); + let box = node.getBoundingBox(); + + let inside = ray.intersectBox(box); + + if (!inside) { + continue; + } + + let h = node.geometryNode.mean.z + + pointcloud.position.z + + node.geometryNode.boundingBox.min.z; + + if (node.geometryNode.spacing <= pFromSpacing) { + pHeight = h; + pFromSpacing = node.geometryNode.spacing; + } + + for (let index of Object.keys(node.children)) { + let child = node.children[index]; + if (child.geometryNode) { + stack.push(node.children[index]); + } + } + } + + if (height === null || pFromSpacing < fromSpacing) { + height = pHeight; + fromSpacing = pFromSpacing; + } + } + + return height; + } + + getBoundingBox(pointclouds = this.pointclouds){ + let box = new Box3(); + + this.scenePointCloud.updateMatrixWorld(true); + this.referenceFrame.updateMatrixWorld(true); + + for (let pointcloud of pointclouds) { + pointcloud.updateMatrixWorld(true); + + let pointcloudBox = pointcloud.pcoGeometry.tightBoundingBox ? pointcloud.pcoGeometry.tightBoundingBox : pointcloud.boundingBox; + let boxWorld = Utils.computeTransformedBoundingBox(pointcloudBox, pointcloud.matrixWorld); + box.union(boxWorld); + } + + return box; + } + + addPointCloud (pointcloud) { + this.pointclouds.push(pointcloud); + this.scenePointCloud.add(pointcloud); + + this.dispatchEvent({ + type: 'pointcloud_added', + pointcloud: pointcloud + }); + } + + addVolume (volume) { + this.volumes.push(volume); + this.dispatchEvent({ + 'type': 'volume_added', + 'scene': this, + 'volume': volume + }); + } + + addOrientedImages(images){ + this.orientedImages.push(images); + this.scene.add(images.node); + + this.dispatchEvent({ + 'type': 'oriented_images_added', + 'scene': this, + 'images': images + }); + }; + + removeOrientedImages(images){ + let index = this.orientedImages.indexOf(images); + if (index > -1) { + this.orientedImages.splice(index, 1); + + this.dispatchEvent({ + 'type': 'oriented_images_removed', + 'scene': this, + 'images': images + }); + } + }; + + add360Images(images){ + this.images360.push(images); + this.scene.add(images.node); + + this.dispatchEvent({ + 'type': '360_images_added', + 'scene': this, + 'images': images + }); + } + + remove360Images(images){ + let index = this.images360.indexOf(images); + if (index > -1) { + this.images360.splice(index, 1); + + this.dispatchEvent({ + 'type': '360_images_removed', + 'scene': this, + 'images': images + }); + } + } + + addGeopackage(geopackage){ + this.geopackages.push(geopackage); + this.scene.add(geopackage.node); + + this.dispatchEvent({ + 'type': 'geopackage_added', + 'scene': this, + 'geopackage': geopackage + }); + }; + + removeGeopackage(geopackage){ + let index = this.geopackages.indexOf(geopackage); + if (index > -1) { + this.geopackages.splice(index, 1); + + this.dispatchEvent({ + 'type': 'geopackage_removed', + 'scene': this, + 'geopackage': geopackage + }); + } + }; + + removeVolume (volume) { + let index = this.volumes.indexOf(volume); + if (index > -1) { + this.volumes.splice(index, 1); + + this.dispatchEvent({ + 'type': 'volume_removed', + 'scene': this, + 'volume': volume + }); + } + }; + + addCameraAnimation(animation) { + this.cameraAnimations.push(animation); + this.dispatchEvent({ + 'type': 'camera_animation_added', + 'scene': this, + 'animation': animation + }); + }; + + removeCameraAnimation(animation){ + let index = this.cameraAnimations.indexOf(volume); + if (index > -1) { + this.cameraAnimations.splice(index, 1); + + this.dispatchEvent({ + 'type': 'camera_animation_removed', + 'scene': this, + 'animation': animation + }); + } + }; + + addPolygonClipVolume(volume){ + this.polygonClipVolumes.push(volume); + this.dispatchEvent({ + "type": "polygon_clip_volume_added", + "scene": this, + "volume": volume + }); + }; + + removePolygonClipVolume(volume){ + let index = this.polygonClipVolumes.indexOf(volume); + if (index > -1) { + this.polygonClipVolumes.splice(index, 1); + this.dispatchEvent({ + "type": "polygon_clip_volume_removed", + "scene": this, + "volume": volume + }); + } + }; + + addMeasurement(measurement){ + measurement.lengthUnit = this.lengthUnit; + measurement.lengthUnitDisplay = this.lengthUnitDisplay; + this.measurements.push(measurement); + this.dispatchEvent({ + 'type': 'measurement_added', + 'scene': this, + 'measurement': measurement + }); + }; + + removeMeasurement (measurement) { + let index = this.measurements.indexOf(measurement); + if (index > -1) { + this.measurements.splice(index, 1); + this.dispatchEvent({ + 'type': 'measurement_removed', + 'scene': this, + 'measurement': measurement + }); + } + } + + addProfile (profile) { + this.profiles.push(profile); + this.dispatchEvent({ + 'type': 'profile_added', + 'scene': this, + 'profile': profile + }); + } + + removeProfile (profile) { + let index = this.profiles.indexOf(profile); + if (index > -1) { + this.profiles.splice(index, 1); + this.dispatchEvent({ + 'type': 'profile_removed', + 'scene': this, + 'profile': profile + }); + } + } + + removeAllMeasurements () { + while (this.measurements.length > 0) { + this.removeMeasurement(this.measurements[0]); + } + + while (this.profiles.length > 0) { + this.removeProfile(this.profiles[0]); + } + + while (this.volumes.length > 0) { + this.removeVolume(this.volumes[0]); + } + } + + removeAllClipVolumes(){ + let clipVolumes = this.volumes.filter(volume => volume.clip === true); + for(let clipVolume of clipVolumes){ + this.removeVolume(clipVolume); + } + + while(this.polygonClipVolumes.length > 0){ + this.removePolygonClipVolume(this.polygonClipVolumes[0]); + } + } + + getActiveCamera() { + + if(this.overrideCamera){ + return this.overrideCamera; + } + + if(this.cameraMode === CameraMode.PERSPECTIVE){ + return this.cameraP; + }else if(this.cameraMode === CameraMode.ORTHOGRAPHIC){ + return this.cameraO; + }else if(this.cameraMode === CameraMode.VR){ + return this.cameraVR; + } + + return null; + } + + initialize(){ + + this.referenceFrame = new Object3D(); + this.referenceFrame.matrixAutoUpdate = false; + this.scenePointCloud.add(this.referenceFrame); + + this.cameraP.up.set(0, 0, 1); + this.cameraP.position.set(1000, 1000, 1000); + this.cameraO.up.set(0, 0, 1); + this.cameraO.position.set(1000, 1000, 1000); + //this.camera.rotation.y = -Math.PI / 4; + //this.camera.rotation.x = -Math.PI / 6; + this.cameraScreenSpace.lookAt(new Vector3(0, 0, 0), new Vector3(0, 0, -1), new Vector3(0, 1, 0)); + + this.directionalLight = new DirectionalLight( 0xffffff, 0.5 ); + this.directionalLight.position.set( 10, 10, 10 ); + this.directionalLight.lookAt( new Vector3(0, 0, 0)); + this.scenePointCloud.add( this.directionalLight ); + + let light = new AmbientLight( 0x555555 ); // soft white light + this.scenePointCloud.add( light ); + + { // background + let texture = Utils.createBackgroundTexture(512, 512); + + texture.minFilter = texture.magFilter = NearestFilter; + texture.minFilter = texture.magFilter = LinearFilter; + let bg = new Mesh( + new PlaneBufferGeometry(2, 2, 1), + new MeshBasicMaterial({ + map: texture + }) + ); + bg.material.depthTest = false; + bg.material.depthWrite = false; + this.sceneBG.add(bg); + } + + // { // lights + // { + // let light = new THREE.DirectionalLight(0xffffff); + // light.position.set(10, 10, 1); + // light.target.position.set(0, 0, 0); + // this.scene.add(light); + // } + + // { + // let light = new THREE.DirectionalLight(0xffffff); + // light.position.set(-10, 10, 1); + // light.target.position.set(0, 0, 0); + // this.scene.add(light); + // } + + // { + // let light = new THREE.DirectionalLight(0xffffff); + // light.position.set(0, -10, 20); + // light.target.position.set(0, 0, 0); + // this.scene.add(light); + // } + // } + } + + addAnnotation(position, args = {}){ + if(position instanceof Array){ + args.position = new Vector3().fromArray(position); + } else if (position.x != null) { + args.position = position; + } + let annotation = new Annotation(args); + this.annotations.add(annotation); + + return annotation; + } + + getAnnotations () { + return this.annotations; + }; + + removeAnnotation(annotationToRemove) { + this.annotations.remove(annotationToRemove); + } + }; + + // http://epsg.io/ + proj4.defs([ + ['UTM10N', '+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs'], + ['EPSG:6339', '+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6340', '+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6341', '+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6342', '+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6343', '+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6344', '+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6345', '+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6346', '+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6347', '+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:6348', '+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs'], + ['EPSG:26910', '+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26911', '+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26912', '+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26913', '+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26914', '+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26915', '+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26916', '+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26917', '+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26918', '+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ['EPSG:26919', '+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], + ]); + + class MapView{ + + constructor (viewer) { + this.viewer = viewer; + + this.webMapService = 'WMTS'; + this.mapProjectionName = 'EPSG:3857'; + this.mapProjection = proj4.defs(this.mapProjectionName); + this.sceneProjection = null; + + this.extentsLayer = null; + this.cameraLayer = null; + this.toolLayer = null; + this.sourcesLayer = null; + this.sourcesLabelLayer = null; + this.images360Layer = null; + this.enabled = false; + + this.createAnnotationStyle = (text) => { + return [ + new ol.style.Style({ + image: new ol.style.Circle({ + radius: 10, + stroke: new ol.style.Stroke({ + color: [255, 255, 255, 0.5], + width: 2 + }), + fill: new ol.style.Fill({ + color: [0, 0, 0, 0.5] + }) + }) + }) + ]; + }; + + this.createLabelStyle = (text) => { + let style = new ol.style.Style({ + image: new ol.style.Circle({ + radius: 6, + stroke: new ol.style.Stroke({ + color: 'white', + width: 2 + }), + fill: new ol.style.Fill({ + color: 'green' + }) + }), + text: new ol.style.Text({ + font: '12px helvetica,sans-serif', + text: text, + fill: new ol.style.Fill({ + color: '#000' + }), + stroke: new ol.style.Stroke({ + color: '#fff', + width: 2 + }) + }) + }); + + return style; + }; + } + + showSources (show) { + this.sourcesLayer.setVisible(show); + this.sourcesLabelLayer.setVisible(show); + } + + init () { + + if(typeof ol === "undefined"){ + return; + } + + this.elMap = $('#potree_map'); + this.elMap.draggable({ handle: $('#potree_map_header') }); + this.elMap.resizable(); + + this.elTooltip = $(`
        `); + this.elMap.append(this.elTooltip); + + let extentsLayer = this.getExtentsLayer(); + let cameraLayer = this.getCameraLayer(); + this.getToolLayer(); + let sourcesLayer = this.getSourcesLayer(); + this.images360Layer = this.getImages360Layer(); + this.getSourcesLabelLayer(); + this.getAnnotationsLayer(); + + let mousePositionControl = new ol.control.MousePosition({ + coordinateFormat: ol.coordinate.createStringXY(5), + projection: 'EPSG:4326', + undefinedHTML: ' ' + }); + + let _this = this; + let DownloadSelectionControl = function (optOptions) { + let options = optOptions || {}; + + // TOGGLE TILES + let btToggleTiles = document.createElement('button'); + btToggleTiles.innerHTML = 'T'; + btToggleTiles.addEventListener('click', () => { + let visible = sourcesLayer.getVisible(); + _this.showSources(!visible); + }, false); + btToggleTiles.style.float = 'left'; + btToggleTiles.title = 'show / hide tiles'; + + // DOWNLOAD SELECTED TILES + let link = document.createElement('a'); + link.href = '#'; + link.download = 'list.txt'; + link.style.float = 'left'; + + let button = document.createElement('button'); + button.innerHTML = 'D'; + link.appendChild(button); + + let handleDownload = (e) => { + let features = selectedFeatures.getArray(); + + let url = [document.location.protocol, '//', document.location.host, document.location.pathname].join(''); + + if (features.length === 0) { + alert('No tiles were selected. Select area with ctrl + left mouse button!'); + e.preventDefault(); + e.stopImmediatePropagation(); + return false; + } else if (features.length === 1) { + let feature = features[0]; + + if (feature.source) { + let cloudjsurl = feature.pointcloud.pcoGeometry.url; + let sourceurl = new URL(url + '/../' + cloudjsurl + '/../source/' + feature.source.name); + link.href = sourceurl.href; + link.download = feature.source.name; + } + } else { + let content = ''; + for (let i = 0; i < features.length; i++) { + let feature = features[i]; + + if (feature.source) { + let cloudjsurl = feature.pointcloud.pcoGeometry.url; + let sourceurl = new URL(url + '/../' + cloudjsurl + '/../source/' + feature.source.name); + content += sourceurl.href + '\n'; + } + } + + let uri = 'data:application/octet-stream;base64,' + btoa(content); + link.href = uri; + link.download = 'list_of_files.txt'; + } + }; + + button.addEventListener('click', handleDownload, false); + + // assemble container + let element = document.createElement('div'); + element.className = 'ol-unselectable ol-control'; + element.appendChild(link); + element.appendChild(btToggleTiles); + element.style.bottom = '0.5em'; + element.style.left = '0.5em'; + element.title = 'Download file or list of selected tiles. Select tile with left mouse button or area using ctrl + left mouse.'; + + ol.control.Control.call(this, { + element: element, + target: options.target + }); + }; + ol.inherits(DownloadSelectionControl, ol.control.Control); + + this.map = new ol.Map({ + controls: ol.control.defaults({ + attributionOptions: ({ + collapsible: false + }) + }).extend([ + // this.controls.zoomToExtent, + new DownloadSelectionControl(), + mousePositionControl + ]), + layers: [ + new ol.layer.Tile({source: new ol.source.OSM()}), + this.toolLayer, + this.annotationsLayer, + this.sourcesLayer, + this.sourcesLabelLayer, + this.images360Layer, + extentsLayer, + cameraLayer + ], + target: 'potree_map_content', + view: new ol.View({ + center: this.olCenter, + zoom: 9 + }) + }); + + // DRAGBOX / SELECTION + this.dragBoxLayer = new ol.layer.Vector({ + source: new ol.source.Vector({}), + style: new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'rgba(0, 0, 255, 1)', + width: 2 + }) + }) + }); + this.map.addLayer(this.dragBoxLayer); + + let select = new ol.interaction.Select(); + this.map.addInteraction(select); + + let selectedFeatures = select.getFeatures(); + + let dragBox = new ol.interaction.DragBox({ + condition: ol.events.condition.platformModifierKeyOnly + }); + + this.map.addInteraction(dragBox); + + // this.map.on('pointermove', evt => { + // let pixel = evt.pixel; + // let feature = this.map.forEachFeatureAtPixel(pixel, function (feature) { + // return feature; + // }); + + // // console.log(feature); + // // this.elTooltip.css("display", feature ? '' : 'none'); + // this.elTooltip.css('display', 'none'); + // if (feature && feature.onHover) { + // feature.onHover(evt); + // // overlay.setPosition(evt.coordinate); + // // tooltip.innerHTML = feature.get('name'); + // } + // }); + + this.map.on('click', evt => { + let pixel = evt.pixel; + let feature = this.map.forEachFeatureAtPixel(pixel, function (feature) { + return feature; + }); + + if (feature && feature.onClick) { + feature.onClick(evt); + } + }); + + dragBox.on('boxend', (e) => { + // features that intersect the box are added to the collection of + // selected features, and their names are displayed in the "info" + // div + let extent = dragBox.getGeometry().getExtent(); + this.getSourcesLayer().getSource().forEachFeatureIntersectingExtent(extent, (feature) => { + selectedFeatures.push(feature); + }); + }); + + // clear selection when drawing a new box and when clicking on the map + dragBox.on('boxstart', (e) => { + selectedFeatures.clear(); + }); + this.map.on('click', () => { + selectedFeatures.clear(); + }); + + this.viewer.addEventListener('scene_changed', e => { + this.setScene(e.scene); + }); + + this.onPointcloudAdded = e => { + this.load(e.pointcloud); + }; + + this.on360ImagesAdded = e => { + this.addImages360(e.images); + }; + + this.onAnnotationAdded = e => { + if (!this.sceneProjection) { + return; + } + + let annotation = e.annotation; + let position = annotation.position; + let mapPos = this.toMap.forward([position.x, position.y]); + let feature = new ol.Feature({ + geometry: new ol.geom.Point(mapPos), + name: annotation.title + }); + feature.setStyle(this.createAnnotationStyle(annotation.title)); + + feature.onHover = evt => { + let coordinates = feature.getGeometry().getCoordinates(); + let p = this.map.getPixelFromCoordinate(coordinates); + + this.elTooltip.html(annotation.title); + this.elTooltip.css('display', ''); + this.elTooltip.css('left', `${p[0]}px`); + this.elTooltip.css('top', `${p[1]}px`); + }; + + feature.onClick = evt => { + annotation.clickTitle(); + }; + + this.getAnnotationsLayer().getSource().addFeature(feature); + }; + + this.setScene(this.viewer.scene); + } + + setScene (scene) { + if (this.scene === scene) { + return; + }; + + if (this.scene) { + this.scene.removeEventListener('pointcloud_added', this.onPointcloudAdded); + this.scene.removeEventListener('360_images_added', this.on360ImagesAdded); + this.scene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded); + } + + this.scene = scene; + + this.scene.addEventListener('pointcloud_added', this.onPointcloudAdded); + this.scene.addEventListener('360_images_added', this.on360ImagesAdded); + this.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded); + + for (let pointcloud of this.viewer.scene.pointclouds) { + this.load(pointcloud); + } + + this.viewer.scene.annotations.traverseDescendants(annotation => { + this.onAnnotationAdded({annotation: annotation}); + }); + + for(let images of this.viewer.scene.images360){ + this.on360ImagesAdded({images: images}); + } + } + + getExtentsLayer () { + if (this.extentsLayer) { + return this.extentsLayer; + } + + this.gExtent = new ol.geom.LineString([[0, 0], [0, 0]]); + + let feature = new ol.Feature(this.gExtent); + let featureVector = new ol.source.Vector({ + features: [feature] + }); + + this.extentsLayer = new ol.layer.Vector({ + source: featureVector, + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 255, 0.2)' + }), + stroke: new ol.style.Stroke({ + color: '#0000ff', + width: 2 + }), + image: new ol.style.Circle({ + radius: 3, + fill: new ol.style.Fill({ + color: '#0000ff' + }) + }) + }) + }); + + return this.extentsLayer; + } + + getAnnotationsLayer () { + if (this.annotationsLayer) { + return this.annotationsLayer; + } + + this.annotationsLayer = new ol.layer.Vector({ + source: new ol.source.Vector({ + }), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 0, 0, 1)' + }), + stroke: new ol.style.Stroke({ + color: 'rgba(255, 0, 0, 1)', + width: 2 + }) + }) + }); + + return this.annotationsLayer; + } + + getCameraLayer () { + if (this.cameraLayer) { + return this.cameraLayer; + } + + // CAMERA LAYER + this.gCamera = new ol.geom.LineString([[0, 0], [0, 0], [0, 0], [0, 0]]); + let feature = new ol.Feature(this.gCamera); + let featureVector = new ol.source.Vector({ + features: [feature] + }); + + this.cameraLayer = new ol.layer.Vector({ + source: featureVector, + style: new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#0000ff', + width: 2 + }) + }) + }); + + return this.cameraLayer; + } + + getToolLayer () { + if (this.toolLayer) { + return this.toolLayer; + } + + this.toolLayer = new ol.layer.Vector({ + source: new ol.source.Vector({ + }), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 0, 0, 1)' + }), + stroke: new ol.style.Stroke({ + color: 'rgba(255, 0, 0, 1)', + width: 2 + }) + }) + }); + + return this.toolLayer; + } + + getImages360Layer(){ + if(this.images360Layer){ + return this.images360Layer; + } + + let style = new ol.style.Style({ + image: new ol.style.Circle({ + radius: 4, + stroke: new ol.style.Stroke({ + color: [255, 0, 0, 1], + width: 2 + }), + fill: new ol.style.Fill({ + color: [255, 100, 100, 1] + }) + }) + }); + + let layer = new ol.layer.Vector({ + source: new ol.source.Vector({}), + style: style, + }); + + this.images360Layer = layer; + + return this.images360Layer; + } + + getSourcesLayer () { + if (this.sourcesLayer) { + return this.sourcesLayer; + } + + this.sourcesLayer = new ol.layer.Vector({ + source: new ol.source.Vector({}), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(0, 0, 150, 0.1)' + }), + stroke: new ol.style.Stroke({ + color: 'rgba(0, 0, 150, 1)', + width: 1 + }) + }) + }); + + return this.sourcesLayer; + } + + getSourcesLabelLayer () { + if (this.sourcesLabelLayer) { + return this.sourcesLabelLayer; + } + + this.sourcesLabelLayer = new ol.layer.Vector({ + source: new ol.source.Vector({ + }), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 0, 0, 0.1)' + }), + stroke: new ol.style.Stroke({ + color: 'rgba(255, 0, 0, 1)', + width: 2 + }) + }), + minResolution: 0.01, + maxResolution: 20 + }); + + return this.sourcesLabelLayer; + } + + setSceneProjection (sceneProjection) { + this.sceneProjection = sceneProjection; + this.toMap = proj4(this.sceneProjection, this.mapProjection); + this.toScene = proj4(this.mapProjection, this.sceneProjection); + }; + + getMapExtent () { + let bb = this.viewer.getBoundingBox(); + + let bottomLeft = this.toMap.forward([bb.min.x, bb.min.y]); + let bottomRight = this.toMap.forward([bb.max.x, bb.min.y]); + let topRight = this.toMap.forward([bb.max.x, bb.max.y]); + let topLeft = this.toMap.forward([bb.min.x, bb.max.y]); + + let extent = { + bottomLeft: bottomLeft, + bottomRight: bottomRight, + topRight: topRight, + topLeft: topLeft + }; + + return extent; + }; + + getMapCenter () { + let mapExtent = this.getMapExtent(); + + let mapCenter = [ + (mapExtent.bottomLeft[0] + mapExtent.topRight[0]) / 2, + (mapExtent.bottomLeft[1] + mapExtent.topRight[1]) / 2 + ]; + + return mapCenter; + }; + + updateToolDrawings () { + this.toolLayer.getSource().clear(); + + let profiles = this.viewer.profileTool.profiles; + for (let i = 0; i < profiles.length; i++) { + let profile = profiles[i]; + let coordinates = []; + + for (let j = 0; j < profile.points.length; j++) { + let point = profile.points[j]; + let pointMap = this.toMap.forward([point.x, point.y]); + coordinates.push(pointMap); + } + + let line = new ol.geom.LineString(coordinates); + let feature = new ol.Feature(line); + this.toolLayer.getSource().addFeature(feature); + } + + let measurements = this.viewer.measuringTool.measurements; + for (let i = 0; i < measurements.length; i++) { + let measurement = measurements[i]; + let coordinates = []; + + for (let j = 0; j < measurement.points.length; j++) { + let point = measurement.points[j].position; + let pointMap = this.toMap.forward([point.x, point.y]); + coordinates.push(pointMap); + } + + if (measurement.closed && measurement.points.length > 0) { + coordinates.push(coordinates[0]); + } + + let line = new ol.geom.LineString(coordinates); + let feature = new ol.Feature(line); + this.toolLayer.getSource().addFeature(feature); + } + } + + addImages360(images){ + let transform = this.toMap.forward; + let layer = this.getImages360Layer(); + + for(let image of images.images){ + + let p = transform([image.position[0], image.position[1]]); + + let feature = new ol.Feature({ + 'geometry': new ol.geom.Point(p), + }); + + feature.onClick = () => { + images.focus(image); + }; + + layer.getSource().addFeature(feature); + } + } + + async load (pointcloud) { + if (!pointcloud) { + return; + } + + if (!pointcloud.projection) { + return; + } + + if (!this.sceneProjection) { + try { + this.setSceneProjection(pointcloud.projection); + }catch (e) { + console.log('Failed projection:', e); + + if (pointcloud.fallbackProjection) { + try { + console.log('Trying fallback projection...'); + this.setSceneProjection(pointcloud.fallbackProjection); + console.log('Set projection from fallback'); + }catch (e) { + console.log('Failed fallback projection:', e); + return; + } + }else { + return; + }; + } + } + + let mapExtent = this.getMapExtent(); + let mapCenter = this.getMapCenter(); + + let view = this.map.getView(); + view.setCenter(mapCenter); + + this.gExtent.setCoordinates([ + mapExtent.bottomLeft, + mapExtent.bottomRight, + mapExtent.topRight, + mapExtent.topLeft, + mapExtent.bottomLeft + ]); + + view.fit(this.gExtent, [300, 300], { + constrainResolution: false + }); + + if (pointcloud.pcoGeometry.type == 'ept'){ + return; + } + + let url = `${pointcloud.pcoGeometry.url}/../sources.json`; + //let response = await fetch(url); + + fetch(url).then(async (response) => { + let data = await response.json(); + + let sources = data.sources; + + for (let i = 0; i < sources.length; i++) { + let source = sources[i]; + let name = source.name; + let bounds = source.bounds; + + let mapBounds = { + min: this.toMap.forward([bounds.min[0], bounds.min[1]]), + max: this.toMap.forward([bounds.max[0], bounds.max[1]]) + }; + let mapCenter = [ + (mapBounds.min[0] + mapBounds.max[0]) / 2, + (mapBounds.min[1] + mapBounds.max[1]) / 2 + ]; + + let p1 = this.toMap.forward([bounds.min[0], bounds.min[1]]); + let p2 = this.toMap.forward([bounds.max[0], bounds.min[1]]); + let p3 = this.toMap.forward([bounds.max[0], bounds.max[1]]); + let p4 = this.toMap.forward([bounds.min[0], bounds.max[1]]); + + // let feature = new ol.Feature({ + // 'geometry': new ol.geom.LineString([p1, p2, p3, p4, p1]) + // }); + let feature = new ol.Feature({ + 'geometry': new ol.geom.Polygon([[p1, p2, p3, p4, p1]]) + }); + feature.source = source; + feature.pointcloud = pointcloud; + this.getSourcesLayer().getSource().addFeature(feature); + + feature = new ol.Feature({ + geometry: new ol.geom.Point(mapCenter), + name: name + }); + feature.setStyle(this.createLabelStyle(name)); + this.sourcesLabelLayer.getSource().addFeature(feature); + } + }).catch(() => { + + }); + + } + + toggle () { + if (this.elMap.is(':visible')) { + this.elMap.css('display', 'none'); + this.enabled = false; + } else { + this.elMap.css('display', 'block'); + this.enabled = true; + } + } + + update (delta) { + if (!this.sceneProjection) { + return; + } + + let pm = $('#potree_map'); + + if (!this.enabled) { + return; + } + + // resize + let mapSize = this.map.getSize(); + let resized = (pm.width() !== mapSize[0] || pm.height() !== mapSize[1]); + if (resized) { + this.map.updateSize(); + } + + // + let camera = this.viewer.scene.getActiveCamera(); + + let scale = this.map.getView().getResolution(); + let campos = camera.position; + let camdir = camera.getWorldDirection(new Vector3()); + let sceneLookAt = camdir.clone().multiplyScalar(30 * scale).add(campos); + let geoPos = camera.position; + let geoLookAt = sceneLookAt; + let mapPos = new Vector2().fromArray(this.toMap.forward([geoPos.x, geoPos.y])); + let mapLookAt = new Vector2().fromArray(this.toMap.forward([geoLookAt.x, geoLookAt.y])); + let mapDir = new Vector2().subVectors(mapLookAt, mapPos).normalize(); + + mapLookAt = mapPos.clone().add(mapDir.clone().multiplyScalar(30 * scale)); + let mapLength = mapPos.distanceTo(mapLookAt); + let mapSide = new Vector2(-mapDir.y, mapDir.x); + + let p1 = mapPos.toArray(); + let p2 = mapLookAt.clone().sub(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray(); + let p3 = mapLookAt.clone().add(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray(); + + this.gCamera.setCoordinates([p1, p2, p3, p1]); + } + + get sourcesVisible () { + return this.getSourcesLayer().getVisible(); + } + + set sourcesVisible (value) { + this.getSourcesLayer().setVisible(value); + } + + } + + /** + * + * @author roy.mdr / http://... + * + */ + + class DXFProfileExporter { + + static toXYZ(points, flatten = false) { + + /* + points: { + ... + data: { + mileage: [0, 1, 2...], -> one per point + position: [0, 0, 0, 1, 1, 1, 2, 2, 2...], -> X, Y, Z + rgba: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2...] -> R, G, B, A + }, + numPoints: Int + } + */ + + const pointsXYZ = { + x: [], + y: [], + z: [], + minX: Number.MAX_VALUE, + minY: Number.MAX_VALUE, + minZ: Number.MAX_VALUE, + maxX: -Number.MAX_VALUE, + maxY: -Number.MAX_VALUE, + maxZ: -Number.MAX_VALUE, + numPoints: 0 + }; + + const pData = points.data; + const pMileage = pData.mileage; + const pCoords = pData.position; + const pColor = pData.rgba; + + for (let pIx = 0; pIx < points.numPoints; pIx++) { + + const poMileage = pMileage[pIx]; + const poCoordX = pCoords[ ((pIx * 3) + 0) ]; + const poCoordY = pCoords[ ((pIx * 3) + 1) ]; + const poCoordZ = pCoords[ ((pIx * 3) + 2) ]; + // const poColorR = pColor[ ((pIx * 4) + 0) ]; + // const poColorG = pColor[ ((pIx * 4) + 1) ]; + // const poColorB = pColor[ ((pIx * 4) + 2) ]; + // const poColorA = pColor[ ((pIx * 4) + 3) ]; + + if (flatten === true) { + + pointsXYZ.x.push(poMileage); + pointsXYZ.y.push(0); + pointsXYZ.z.push(poCoordZ); + + // Get boundaries X + if (pointsXYZ.maxX < poMileage) pointsXYZ.maxX = poMileage; + if (pointsXYZ.minX > poMileage) pointsXYZ.minX = poMileage; + + // Get boundaries Z + if (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ; + if (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ; + + } else { + + pointsXYZ.x.push(poCoordX); + pointsXYZ.y.push(poCoordY); + pointsXYZ.z.push(poCoordZ); + + // Get boundaries X + if (pointsXYZ.maxX < poCoordX) pointsXYZ.maxX = poCoordX; + if (pointsXYZ.minX > poCoordX) pointsXYZ.minX = poCoordX; + + // Get boundaries Y + if (pointsXYZ.maxY < poCoordY) pointsXYZ.maxY = poCoordY; + if (pointsXYZ.minY > poCoordY) pointsXYZ.minY = poCoordY; + + // Get boundaries Z + if (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ; + if (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ; + + } + + } + + if (flatten === true) { + // Set boundaries Y + pointsXYZ.maxY = 0; + pointsXYZ.minY = 0; + } + + pointsXYZ.numPoints = points.numPoints; + + return pointsXYZ; + } + + static plotPCloudPoint(x, y, z) { + + const dxfSection = `0 +POINT +8 +layer_pointCloud +10 +${x} +20 +${y} +30 +${z} +`; + + return dxfSection; + } + + static toString(points, flatten = false) { + + const pCloud = DXFProfileExporter.toXYZ(points, flatten); + + const dxfHeader = `999 +DXF created from potree +0 +SECTION +2 +HEADER +9 +$ACADVER +1 +AC1006 +9 +$INSBASE +10 +0.0 +20 +0.0 +30 +0.0 +9 +$EXTMIN +10 +${pCloud.minX} +20 +${pCloud.minY} +30 +${pCloud.minZ} +9 +$EXTMAX +10 +${pCloud.maxX} +20 +${pCloud.maxY} +30 +${pCloud.maxZ} +0 +ENDSEC +`; + + let dxfBody = `0 +SECTION +2 +ENTITIES +`; + + for (let i = 0; i < pCloud.numPoints; i++) { + dxfBody += DXFProfileExporter.plotPCloudPoint(pCloud.x[i], pCloud.y[i], pCloud.z[i]); + } + + dxfBody += `0 +ENDSEC +`; + + const dxf = dxfHeader + dxfBody + '0\nEOF'; + + return dxf; + } + + } + + class CSVExporter { + static toString (points) { + let string = ''; + + let attributes = Object.keys(points.data) + .filter(a => a !== 'normal') + .sort((a, b) => { + if (a === 'position') return -1; + if (b === 'position') return 1; + if (a === 'rgba') return -1; + if (b === 'rgba') return 1; + }); + + let headerValues = []; + for (let attribute of attributes) { + let itemSize = points.data[attribute].length / points.numPoints; + + if (attribute === 'position') { + headerValues = headerValues.concat(['x', 'y', 'z']); + } else if (attribute === 'rgba') { + headerValues = headerValues.concat(['r', 'g', 'b', 'a']); + } else if (itemSize > 1) { + for (let i = 0; i < itemSize; i++) { + headerValues.push(`${attribute}_${i}`); + } + } else { + headerValues.push(attribute); + } + } + string = headerValues.join(', ') + '\n'; + + for (let i = 0; i < points.numPoints; i++) { + let values = []; + + for (let attribute of attributes) { + let itemSize = points.data[attribute].length / points.numPoints; + let value = points.data[attribute] + .subarray(itemSize * i, itemSize * i + itemSize) + .join(', '); + values.push(value); + } + + string += values.join(', ') + '\n'; + } + + return string; + } + }; + + class LASExporter { + static toLAS (points) { + // TODO Unused: let string = ''; + + let boundingBox = points.boundingBox; + let offset = boundingBox.min.clone(); + let diagonal = boundingBox.min.distanceTo(boundingBox.max); + let scale = new Vector3(0.001, 0.001, 0.001); + if (diagonal > 1000 * 1000) { + scale = new Vector3(0.01, 0.01, 0.01); + } else { + scale = new Vector3(0.001, 0.001, 0.001); + } + + let setString = function (string, offset, buffer) { + let view = new Uint8Array(buffer); + + for (let i = 0; i < string.length; i++) { + let charCode = string.charCodeAt(i); + view[offset + i] = charCode; + } + }; + + let buffer = new ArrayBuffer(227 + 28 * points.numPoints); + let view = new DataView(buffer); + let u8View = new Uint8Array(buffer); + // let u16View = new Uint16Array(buffer); + + setString('LASF', 0, buffer); + u8View[24] = 1; + u8View[25] = 2; + + // system identifier o:26 l:32 + + // generating software o:58 l:32 + setString('Potree 1.7', 58, buffer); + + // file creation day of year o:90 l:2 + // file creation year o:92 l:2 + + // header size o:94 l:2 + view.setUint16(94, 227, true); + + // offset to point data o:96 l:4 + view.setUint32(96, 227, true); + + // number of letiable length records o:100 l:4 + + // point data record format 104 1 + u8View[104] = 2; + + // point data record length 105 2 + view.setUint16(105, 28, true); + + // number of point records 107 4 + view.setUint32(107, points.numPoints, true); + + // number of points by return 111 20 + + // x scale factor 131 8 + view.setFloat64(131, scale.x, true); + + // y scale factor 139 8 + view.setFloat64(139, scale.y, true); + + // z scale factor 147 8 + view.setFloat64(147, scale.z, true); + + // x offset 155 8 + view.setFloat64(155, offset.x, true); + + // y offset 163 8 + view.setFloat64(163, offset.y, true); + + // z offset 171 8 + view.setFloat64(171, offset.z, true); + + // max x 179 8 + view.setFloat64(179, boundingBox.max.x, true); + + // min x 187 8 + view.setFloat64(187, boundingBox.min.x, true); + + // max y 195 8 + view.setFloat64(195, boundingBox.max.y, true); + + // min y 203 8 + view.setFloat64(203, boundingBox.min.y, true); + + // max z 211 8 + view.setFloat64(211, boundingBox.max.z, true); + + // min z 219 8 + view.setFloat64(219, boundingBox.min.z, true); + + let boffset = 227; + for (let i = 0; i < points.numPoints; i++) { + + let px = points.data.position[3 * i + 0]; + let py = points.data.position[3 * i + 1]; + let pz = points.data.position[3 * i + 2]; + + let ux = parseInt((px - offset.x) / scale.x); + let uy = parseInt((py - offset.y) / scale.y); + let uz = parseInt((pz - offset.z) / scale.z); + + view.setUint32(boffset + 0, ux, true); + view.setUint32(boffset + 4, uy, true); + view.setUint32(boffset + 8, uz, true); + + if (points.data.intensity) { + view.setUint16(boffset + 12, (points.data.intensity[i]), true); + } + + let rt = 0; + if (points.data.returnNumber) { + rt += points.data.returnNumber[i]; + } + if (points.data.numberOfReturns) { + rt += (points.data.numberOfReturns[i] << 3); + } + view.setUint8(boffset + 14, rt); + + if (points.data.classification) { + view.setUint8(boffset + 15, points.data.classification[i]); + } + // scan angle rank + // user data + // point source id + if (points.data.pointSourceID) { + view.setUint16(boffset + 18, points.data.pointSourceID[i]); + } + + if (points.data.rgba || points.data.color) { + let rgba = points.data.rgba ?? points.data.color; + view.setUint16(boffset + 20, (rgba[4 * i + 0] * 255), true); + view.setUint16(boffset + 22, (rgba[4 * i + 1] * 255), true); + view.setUint16(boffset + 24, (rgba[4 * i + 2] * 255), true); + } + + boffset += 28; + } + + return buffer; + } + + } + + function copyMaterial(source, target){ + + for(let name of Object.keys(target.uniforms)){ + target.uniforms[name].value = source.uniforms[name].value; + } + + target.gradientTexture = source.gradientTexture; + target.visibleNodesTexture = source.visibleNodesTexture; + target.classificationTexture = source.classificationTexture; + target.matcapTexture = source.matcapTexture; + + target.activeAttributeName = source.activeAttributeName; + target.ranges = source.ranges; + + //target.updateShaderSource(); + } + + + class Batch{ + + constructor(geometry, material){ + this.geometry = geometry; + this.material = material; + + this.sceneNode = new Points(geometry, material); + + this.geometryNode = { + estimatedSpacing: 1.0, + geometry: geometry, + }; + } + + getLevel(){ + return 0; + } + + } + + class ProfileFakeOctree extends PointCloudTree{ + + constructor(octree){ + super(); + + this.trueOctree = octree; + this.pcoGeometry = octree.pcoGeometry; + this.points = []; + this.visibleNodes = []; + + //this.material = this.trueOctree.material; + this.material = new PointCloudMaterial$1(); + //this.material.copy(this.trueOctree.material); + copyMaterial(this.trueOctree.material, this.material); + this.material.pointSizeType = PointSizeType.FIXED; + + this.batchSize = 100 * 1000; + this.currentBatch = null; + } + + getAttribute(name){ + return this.trueOctree.getAttribute(name); + } + + dispose(){ + for(let node of this.visibleNodes){ + node.geometry.dispose(); + } + + this.visibleNodes = []; + this.currentBatch = null; + this.points = []; + } + + addPoints(data){ + // since each call to addPoints can deliver very very few points, + // we're going to batch them into larger buffers for efficiency. + + if(this.currentBatch === null){ + this.currentBatch = this.createNewBatch(data); + } + + this.points.push(data); + + + let updateRange = { + start: this.currentBatch.geometry.drawRange.count, + count: 0 + }; + let projectedBox = new Box3(); + + let truePos = new Vector3(); + + for(let i = 0; i < data.numPoints; i++){ + + if(updateRange.start + updateRange.count >= this.batchSize){ + // current batch full, start new batch + + for(let key of Object.keys(this.currentBatch.geometry.attributes)){ + let attribute = this.currentBatch.geometry.attributes[key]; + attribute.updateRange.offset = updateRange.start; + attribute.updateRange.count = updateRange.count; + attribute.needsUpdate = true; + } + + this.currentBatch.geometry.computeBoundingBox(); + this.currentBatch.geometry.computeBoundingSphere(); + + this.currentBatch = this.createNewBatch(data); + updateRange = { + start: 0, + count: 0 + }; + } + + truePos.set( + data.data.position[3 * i + 0] + this.trueOctree.position.x, + data.data.position[3 * i + 1] + this.trueOctree.position.y, + data.data.position[3 * i + 2] + this.trueOctree.position.z, + ); + + let x = data.data.mileage[i]; + let y = 0; + let z = truePos.z; + + projectedBox.expandByPoint(new Vector3(x, y, z)); + + let index = updateRange.start + updateRange.count; + let geometry = this.currentBatch.geometry; + + for(let attributeName of Object.keys(data.data)){ + let source = data.data[attributeName]; + let target = geometry.attributes[attributeName]; + let numElements = target.itemSize; + + for(let item = 0; item < numElements; item++){ + target.array[numElements * index + item] = source[numElements * i + item]; + } + } + + { + let position = geometry.attributes.position; + + position.array[3 * index + 0] = x; + position.array[3 * index + 1] = y; + position.array[3 * index + 2] = z; + } + + updateRange.count++; + this.currentBatch.geometry.drawRange.count++; + } + + for(let key of Object.keys(this.currentBatch.geometry.attributes)){ + let attribute = this.currentBatch.geometry.attributes[key]; + attribute.updateRange.offset = updateRange.start; + attribute.updateRange.count = updateRange.count; + attribute.needsUpdate = true; + } + + data.projectedBox = projectedBox; + + this.projectedBox = this.points.reduce( (a, i) => a.union(i.projectedBox), new Box3()); + } + + createNewBatch(data){ + let geometry = new BufferGeometry(); + + // create new batches with batch_size elements of the same type as the attribute + for(let attributeName of Object.keys(data.data)){ + let buffer = data.data[attributeName]; + let numElements = buffer.length / data.numPoints; // 3 for pos, 4 for col, 1 for scalars + let constructor = buffer.constructor; + let normalized = false; + + if(this.trueOctree.root.sceneNode){ + if(this.trueOctree.root.sceneNode.geometry.attributes[attributeName]){ + normalized = this.trueOctree.root.sceneNode.geometry.attributes[attributeName].normalized; + } + } + + + let batchBuffer = new constructor(numElements * this.batchSize); + + let bufferAttribute = new BufferAttribute(batchBuffer, numElements, normalized); + bufferAttribute.potree = { + range: [0, 1], + }; + + geometry.setAttribute(attributeName, bufferAttribute); + } + + geometry.drawRange.start = 0; + geometry.drawRange.count = 0; + + let batch = new Batch(geometry, this.material); + + this.visibleNodes.push(batch); + + return batch; + } + + computeVisibilityTextureData(){ + let data = new Uint8Array(this.visibleNodes.length * 4); + let offsets = new Map(); + + for(let i = 0; i < this.visibleNodes.length; i++){ + let node = this.visibleNodes[i]; + + offsets[node] = i; + } + + + return { + data: data, + offsets: offsets, + }; + } + + } + + class ProfileWindow extends EventDispatcher { + constructor (viewer) { + super(); + + this.viewer = viewer; + this.elRoot = $('#profile_window'); + this.renderArea = this.elRoot.find('#profileCanvasContainer'); + this.svg = d3.select('svg#profileSVG'); + this.mouseIsDown = false; + + this.projectedBox = new Box3(); + this.pointclouds = new Map(); + this.numPoints = 0; + this.lastAddPointsTimestamp = undefined; + + this.mouse = new Vector2(0, 0); + this.scale = new Vector3(1, 1, 1); + + this.autoFitEnabled = true; // completely disable/enable + this.autoFit = false; // internal + + let cwIcon = `${exports.resourcePath}/icons/arrow_cw.svg`; + $('#potree_profile_rotate_cw').attr('src', cwIcon); + + let ccwIcon = `${exports.resourcePath}/icons/arrow_ccw.svg`; + $('#potree_profile_rotate_ccw').attr('src', ccwIcon); + + let forwardIcon = `${exports.resourcePath}/icons/arrow_up.svg`; + $('#potree_profile_move_forward').attr('src', forwardIcon); + + let backwardIcon = `${exports.resourcePath}/icons/arrow_down.svg`; + $('#potree_profile_move_backward').attr('src', backwardIcon); + + let dxf2DIcon = `${exports.resourcePath}/icons/file_dxf_2d.svg`; + $('#potree_download_dxf2D_icon').attr('src', dxf2DIcon); + + let dxf3DIcon = `${exports.resourcePath}/icons/file_dxf_3d.svg`; + $('#potree_download_dxf3D_icon').attr('src', dxf3DIcon); + + let csvIcon = `${exports.resourcePath}/icons/file_csv_2d.svg`; + $('#potree_download_csv_icon').attr('src', csvIcon); + + let lasIcon = `${exports.resourcePath}/icons/file_las_3d.svg`; + $('#potree_download_las_icon').attr('src', lasIcon); + + let closeIcon = `${exports.resourcePath}/icons/close.svg`; + $('#closeProfileContainer').attr("src", closeIcon); + + this.initTHREE(); + this.initSVG(); + this.initListeners(); + + this.pRenderer = new Renderer(this.renderer); + + this.elRoot.i18n(); + } + + initListeners () { + $(window).resize(() => { + if (this.enabled) { + this.render(); + } + }); + + this.renderArea.mousedown(e => { + this.mouseIsDown = true; + }); + + this.renderArea.mouseup(e => { + this.mouseIsDown = false; + }); + + let viewerPickSphereSizeHandler = () => { + let camera = this.viewer.scene.getActiveCamera(); + let domElement = this.viewer.renderer.domElement; + let distance = this.viewerPickSphere.position.distanceTo(camera.position); + let pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight); + let scale = (10 / pr); + this.viewerPickSphere.scale.set(scale, scale, scale); + }; + + this.renderArea.mousemove(e => { + if (this.pointclouds.size === 0) { + return; + } + + let rect = this.renderArea[0].getBoundingClientRect(); + let x = e.clientX - rect.left; + let y = e.clientY - rect.top; + + let newMouse = new Vector2(x, y); + + if (this.mouseIsDown) { + // DRAG + this.autoFit = false; + this.lastDrag = new Date().getTime(); + + let cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)]; + let ncPos = [this.scaleX.invert(newMouse.x), this.scaleY.invert(newMouse.y)]; + + this.camera.position.x -= ncPos[0] - cPos[0]; + this.camera.position.z -= ncPos[1] - cPos[1]; + + this.render(); + } else if (this.pointclouds.size > 0) { + // FIND HOVERED POINT + let radius = Math.abs(this.scaleX.invert(0) - this.scaleX.invert(40)); + let mileage = this.scaleX.invert(newMouse.x); + let elevation = this.scaleY.invert(newMouse.y); + + let closest = this.selectPoint(mileage, elevation, radius); + + if (closest) { + let point = closest.point; + + let position = new Float64Array([ + point.position[0] + closest.pointcloud.position.x, + point.position[1] + closest.pointcloud.position.y, + point.position[2] + closest.pointcloud.position.z + ]); + + this.elRoot.find('#profileSelectionProperties').fadeIn(200); + this.pickSphere.visible = true; + this.pickSphere.scale.set(0.5 * radius, 0.5 * radius, 0.5 * radius); + this.pickSphere.position.set(point.mileage, 0, position[2]); + + this.viewerPickSphere.position.set(...position); + + if(!this.viewer.scene.scene.children.includes(this.viewerPickSphere)){ + this.viewer.scene.scene.add(this.viewerPickSphere); + if(!this.viewer.hasEventListener("update", viewerPickSphereSizeHandler)){ + this.viewer.addEventListener("update", viewerPickSphereSizeHandler); + } + } + + + let info = this.elRoot.find('#profileSelectionProperties'); + let html = ''; + + for (let attributeName of Object.keys(point)) { + + let value = point[attributeName]; + let attribute = closest.pointcloud.getAttribute(attributeName); + + let transform = value => value; + if(attribute && attribute.type.size > 4){ + let range = attribute.initialRange; + let scale = 1 / (range[1] - range[0]); + let offset = range[0]; + transform = value => value / scale + offset; + } + + + + + + if (attributeName === 'position') { + let values = [...position].map(v => Utils.addCommas(v.toFixed(3))); + html += ` + + + + + + + + + + + + `; + } else if (attributeName === 'rgba') { + html += ` + + + + `; + } else if (attributeName === 'normal') { + continue; + } else if (attributeName === 'mileage') { + html += ` + + + + `; + } else { + html += ` + + + + `; + } + } + html += '
        x${values[0]}
        y${values[1]}
        z${values[2]}
        ${attributeName}${value.join(', ')}
        ${attributeName}${value.toFixed(3)}
        ${attributeName}${transform(value)}
        '; + info.html(html); + + this.selectedPoint = point; + } else { + // this.pickSphere.visible = false; + // this.selectedPoint = null; + + this.viewer.scene.scene.add(this.viewerPickSphere); + + let index = this.viewer.scene.scene.children.indexOf(this.viewerPickSphere); + if(index >= 0){ + this.viewer.scene.scene.children.splice(index, 1); + } + this.viewer.removeEventListener("update", viewerPickSphereSizeHandler); + + + } + this.render(); + } + + this.mouse.copy(newMouse); + }); + + let onWheel = e => { + this.autoFit = false; + + let delta = 0; + if (e.wheelDelta !== undefined) { // WebKit / Opera / Explorer 9 + delta = e.wheelDelta; + } else if (e.detail !== undefined) { // Firefox + delta = -e.detail; + } + + let ndelta = Math.sign(delta); + + let cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)]; + + if (ndelta > 0) { + // + 10% + this.scale.multiplyScalar(1.1); + } else { + // - 10% + this.scale.multiplyScalar(100 / 110); + } + + this.updateScales(); + let ncPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)]; + + this.camera.position.x -= ncPos[0] - cPos[0]; + this.camera.position.z -= ncPos[1] - cPos[1]; + + this.render(); + this.updateScales(); + }; + $(this.renderArea)[0].addEventListener('mousewheel', onWheel, false); + $(this.renderArea)[0].addEventListener('DOMMouseScroll', onWheel, false); // Firefox + + $('#closeProfileContainer').click(() => { + this.hide(); + }); + + let getProfilePoints = (truePosition) => { + let points = new Points$1(); + + for(let [pointcloud, entry] of this.pointclouds){ + for(let pointSet of entry.points){ + + let originPos = pointSet.data.position; + let truePointPosition = new Float64Array(originPos); + for(let i = 0; i < pointSet.numPoints; i++){ + + if (truePosition === true) { + truePointPosition[3 * i + 0] += pointcloud.position.x; + truePointPosition[3 * i + 1] += pointcloud.position.y; + } + + truePointPosition[3 * i + 2] += pointcloud.position.z; + } + + pointSet.data.position = truePointPosition; + points.add(pointSet); + pointSet.data.position = originPos; + } + } + + return points; + }; + + $('#potree_download_dxf2D_icon').click(() => { + + const points = getProfilePoints(); + + const string = DXFProfileExporter.toString(points, true); + + const blob = new Blob([string], {type: "text/string"}); + $('#potree_download_profile_dxf2D_link').attr('href', URL.createObjectURL(blob)); + }); + + $('#potree_download_dxf3D_icon').click(() => { + + const points = getProfilePoints(true); + + const string = DXFProfileExporter.toString(points); + + const blob = new Blob([string], {type: "text/string"}); + $('#potree_download_profile_dxf3D_link').attr('href', URL.createObjectURL(blob)); + }); + + $('#potree_download_csv_icon').click(() => { + + let points = getProfilePoints(true); + + let string = CSVExporter.toString(points); + + let blob = new Blob([string], {type: "text/string"}); + $('#potree_download_profile_ortho_link').attr('href', URL.createObjectURL(blob)); + }); + + $('#potree_download_las_icon').click(() => { + + let points = getProfilePoints(true); + + let buffer = LASExporter.toLAS(points); + + let blob = new Blob([buffer], {type: "application/octet-binary"}); + $('#potree_download_profile_link').attr('href', URL.createObjectURL(blob)); + }); + } + + selectPoint (mileage, elevation, radius) { + let closest = { + distance: Infinity, + pointcloud: null, + points: null, + index: null + }; + + let pointBox = new Box2( + new Vector2(mileage - radius, elevation - radius), + new Vector2(mileage + radius, elevation + radius)); + + let numTested = 0; + let numSkipped = 0; + let numTestedPoints = 0; + let numSkippedPoints = 0; + + for (let [pointcloud, entry] of this.pointclouds) { + for(let points of entry.points){ + + let collisionBox = new Box2( + new Vector2(points.projectedBox.min.x, points.projectedBox.min.z), + new Vector2(points.projectedBox.max.x, points.projectedBox.max.z) + ); + + let intersects = collisionBox.intersectsBox(pointBox); + + if(!intersects){ + numSkipped++; + numSkippedPoints += points.numPoints; + continue; + } + + numTested++; + numTestedPoints += points.numPoints; + + for (let i = 0; i < points.numPoints; i++) { + + let m = points.data.mileage[i] - mileage; + let e = points.data.position[3 * i + 2] - elevation + pointcloud.position.z; + let r = Math.sqrt(m * m + e * e); + + const withinDistance = r < radius && r < closest.distance; + let unfilteredClass = true; + + if(points.data.classification){ + const classification = pointcloud.material.classification; + + const pointClassID = points.data.classification[i]; + const pointClassValue = classification[pointClassID]; + + if(pointClassValue && (!pointClassValue.visible || pointClassValue.color.w === 0)){ + unfilteredClass = false; + } + } + + if (withinDistance && unfilteredClass) { + closest = { + distance: r, + pointcloud: pointcloud, + points: points, + index: i + }; + } + } + } + } + + + //console.log(`nodes: ${numTested}, ${numSkipped} || points: ${numTestedPoints}, ${numSkippedPoints}`); + + if (closest.distance < Infinity) { + let points = closest.points; + + let point = {}; + + let attributes = Object.keys(points.data); + for (let attribute of attributes) { + let attributeData = points.data[attribute]; + let itemSize = attributeData.length / points.numPoints; + let value = attributeData.subarray(itemSize * closest.index, itemSize * closest.index + itemSize); + + if (value.length === 1) { + point[attribute] = value[0]; + } else { + point[attribute] = value; + } + } + + closest.point = point; + + return closest; + } else { + return null; + } + } + + initTHREE () { + this.renderer = new WebGLRenderer({alpha: true, premultipliedAlpha: false}); + this.renderer.setClearColor(0x000000, 0); + this.renderer.setSize(10, 10); + this.renderer.autoClear = false; + this.renderArea.append($(this.renderer.domElement)); + this.renderer.domElement.tabIndex = '2222'; + $(this.renderer.domElement).css('width', '100%'); + $(this.renderer.domElement).css('height', '100%'); + + + { + let gl = this.renderer.getContext(); + + if(gl.createVertexArray == null){ + let extVAO = gl.getExtension('OES_vertex_array_object'); + + if(!extVAO){ + throw new Error("OES_vertex_array_object extension not supported"); + } + + gl.createVertexArray = extVAO.createVertexArrayOES.bind(extVAO); + gl.bindVertexArray = extVAO.bindVertexArrayOES.bind(extVAO); + } + + } + + this.camera = new OrthographicCamera(-1000, 1000, 1000, -1000, -1000, 1000); + this.camera.up.set(0, 0, 1); + this.camera.rotation.order = "ZXY"; + this.camera.rotation.x = Math.PI / 2.0; + + + this.scene = new Scene(); + this.profileScene = new Scene(); + + let sg = new SphereGeometry(1, 16, 16); + let sm = new MeshNormalMaterial(); + this.pickSphere = new Mesh(sg, sm); + this.scene.add(this.pickSphere); + + this.viewerPickSphere = new Mesh(sg, sm); + } + + initSVG () { + let width = this.renderArea[0].clientWidth; + let height = this.renderArea[0].clientHeight; + let marginLeft = this.renderArea[0].offsetLeft; + + this.svg.selectAll('*').remove(); + + this.scaleX = d3.scale.linear() + .domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x]) + .range([0, width]); + this.scaleY = d3.scale.linear() + .domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z]) + .range([height, 0]); + + this.xAxis = d3.svg.axis() + .scale(this.scaleX) + .orient('bottom') + .innerTickSize(-height) + .outerTickSize(1) + .tickPadding(10) + .ticks(width / 50); + + this.yAxis = d3.svg.axis() + .scale(this.scaleY) + .orient('left') + .innerTickSize(-width) + .outerTickSize(1) + .tickPadding(10) + .ticks(height / 20); + + this.elXAxis = this.svg.append('g') + .attr('class', 'x axis') + .attr('transform', `translate(${marginLeft}, ${height})`) + .call(this.xAxis); + + this.elYAxis = this.svg.append('g') + .attr('class', 'y axis') + .attr('transform', `translate(${marginLeft}, 0)`) + .call(this.yAxis); + } + + addPoints (pointcloud, points) { + + if(points.numPoints === 0){ + return; + } + + let entry = this.pointclouds.get(pointcloud); + if(!entry){ + entry = new ProfileFakeOctree(pointcloud); + this.pointclouds.set(pointcloud, entry); + this.profileScene.add(entry); + + let materialChanged = () => { + this.render(); + }; + + materialChanged(); + + pointcloud.material.addEventListener('material_property_changed', materialChanged); + this.addEventListener("on_reset_once", () => { + pointcloud.material.removeEventListener('material_property_changed', materialChanged); + }); + } + + entry.addPoints(points); + this.projectedBox.union(entry.projectedBox); + + if (this.autoFit && this.autoFitEnabled) { + let width = this.renderArea[0].clientWidth; + let height = this.renderArea[0].clientHeight; + + let size = this.projectedBox.getSize(new Vector3()); + + let sx = width / size.x; + let sy = height / size.z; + let scale = Math.min(sx, sy); + + let center = this.projectedBox.getCenter(new Vector3()); + this.scale.set(scale, scale, 1); + this.camera.position.copy(center); + + //console.log("camera: ", this.camera.position.toArray().join(", ")); + } + + //console.log(entry); + + this.render(); + + let numPoints = 0; + for (let [key, value] of this.pointclouds.entries()) { + numPoints += value.points.reduce( (a, i) => a + i.numPoints, 0); + } + $(`#profile_num_points`).html(Utils.addCommas(numPoints)); + + } + + reset () { + this.lastReset = new Date().getTime(); + + this.dispatchEvent({type: "on_reset_once"}); + this.removeEventListeners("on_reset_once"); + + this.autoFit = true; + this.projectedBox = new Box3(); + + for(let [key, entry] of this.pointclouds){ + entry.dispose(); + } + + this.pointclouds.clear(); + this.mouseIsDown = false; + this.mouse.set(0, 0); + + if(this.autoFitEnabled){ + this.scale.set(1, 1, 1); + } + this.pickSphere.visible = false; + + this.elRoot.find('#profileSelectionProperties').hide(); + + this.render(); + } + + show () { + this.elRoot.fadeIn(); + this.enabled = true; + } + + hide () { + this.elRoot.fadeOut(); + this.enabled = false; + } + + updateScales () { + + let width = this.renderArea[0].clientWidth; + let height = this.renderArea[0].clientHeight; + + let left = (-width / 2) / this.scale.x; + let right = (+width / 2) / this.scale.x; + let top = (+height / 2) / this.scale.y; + let bottom = (-height / 2) / this.scale.y; + + this.camera.left = left; + this.camera.right = right; + this.camera.top = top; + this.camera.bottom = bottom; + this.camera.updateProjectionMatrix(); + + this.scaleX.domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x]) + .range([0, width]); + this.scaleY.domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z]) + .range([height, 0]); + + let marginLeft = this.renderArea[0].offsetLeft; + + this.xAxis.scale(this.scaleX) + .orient('bottom') + .innerTickSize(-height) + .outerTickSize(1) + .tickPadding(10) + .ticks(width / 50); + this.yAxis.scale(this.scaleY) + .orient('left') + .innerTickSize(-width) + .outerTickSize(1) + .tickPadding(10) + .ticks(height / 20); + + + this.elXAxis + .attr('transform', `translate(${marginLeft}, ${height})`) + .call(this.xAxis); + this.elYAxis + .attr('transform', `translate(${marginLeft}, 0)`) + .call(this.yAxis); + } + + requestScaleUpdate(){ + + let threshold = 100; + let allowUpdate = ((this.lastReset === undefined) || (this.lastScaleUpdate === undefined)) + || ((new Date().getTime() - this.lastReset) > threshold && (new Date().getTime() - this.lastScaleUpdate) > threshold); + + if(allowUpdate){ + + this.updateScales(); + + this.lastScaleUpdate = new Date().getTime(); + + + + this.scaleUpdatePending = false; + }else if(!this.scaleUpdatePending) { + setTimeout(this.requestScaleUpdate.bind(this), 100); + this.scaleUpdatePending = true; + } + + } + + render () { + let width = this.renderArea[0].clientWidth; + let height = this.renderArea[0].clientHeight; + + let {renderer, pRenderer, camera, profileScene, scene} = this; + let {scaleX, pickSphere} = this; + + renderer.setSize(width, height); + + renderer.setClearColor(0x000000, 0); + renderer.clear(true, true, false); + + for(let pointcloud of this.pointclouds.keys()){ + let source = pointcloud.material; + let target = this.pointclouds.get(pointcloud).material; + + copyMaterial(source, target); + target.size = 2; + } + + pRenderer.render(profileScene, camera, null); + + let radius = Math.abs(scaleX.invert(0) - scaleX.invert(5)); + + if (radius === 0) { + pickSphere.visible = false; + } else { + pickSphere.scale.set(radius, radius, radius); + pickSphere.visible = true; + } + + renderer.render(scene, camera); + + this.requestScaleUpdate(); + } + }; + + class ProfileWindowController { + constructor (viewer) { + this.viewer = viewer; + this.profileWindow = viewer.profileWindow; + this.profile = null; + this.numPoints = 0; + this.threshold = 60 * 1000; + this.rotateAmount = 10; + + this.scheduledRecomputeTime = null; + + this.enabled = true; + + this.requests = []; + + this._recompute = () => { this.recompute(); }; + + this.viewer.addEventListener("scene_changed", e => { + e.oldScene.removeEventListener("pointcloud_added", this._recompute); + e.scene.addEventListener("pointcloud_added", this._recompute); + }); + this.viewer.scene.addEventListener("pointcloud_added", this._recompute); + + $("#potree_profile_rotate_amount").val(parseInt(this.rotateAmount)); + $("#potree_profile_rotate_amount").on("input", (e) => { + const str = $("#potree_profile_rotate_amount").val(); + + if(!isNaN(str)){ + const value = parseFloat(str); + this.rotateAmount = value; + $("#potree_profile_rotate_amount").css("background-color", ""); + }else { + $("#potree_profile_rotate_amount").css("background-color", "#ff9999"); + } + + }); + + const rotate = (radians) => { + const profile = this.profile; + const points = profile.points; + const start = points[0]; + const end = points[points.length - 1]; + const center = start.clone().add(end).multiplyScalar(0.5); + + const mMoveOrigin = new Matrix4().makeTranslation(-center.x, -center.y, -center.z); + const mRotate = new Matrix4().makeRotationZ(radians); + const mMoveBack = new Matrix4().makeTranslation(center.x, center.y, center.z); + //const transform = mMoveOrigin.multiply(mRotate).multiply(mMoveBack); + const transform = mMoveBack.multiply(mRotate).multiply(mMoveOrigin); + + const rotatedPoints = points.map( point => point.clone().applyMatrix4(transform) ); + + this.profileWindow.autoFitEnabled = false; + + for(let i = 0; i < points.length; i++){ + profile.setPosition(i, rotatedPoints[i]); + } + }; + + $("#potree_profile_rotate_cw").click( () => { + const radians = MathUtils.degToRad(this.rotateAmount); + rotate(-radians); + }); + + $("#potree_profile_rotate_ccw").click( () => { + const radians = MathUtils.degToRad(this.rotateAmount); + rotate(radians); + }); + + $("#potree_profile_move_forward").click( () => { + const profile = this.profile; + const points = profile.points; + const start = points[0]; + const end = points[points.length - 1]; + + const dir = end.clone().sub(start).normalize(); + const up = new Vector3(0, 0, 1); + const forward = up.cross(dir); + const move = forward.clone().multiplyScalar(profile.width / 2); + + this.profileWindow.autoFitEnabled = false; + + for(let i = 0; i < points.length; i++){ + profile.setPosition(i, points[i].clone().add(move)); + } + }); + + $("#potree_profile_move_backward").click( () => { + const profile = this.profile; + const points = profile.points; + const start = points[0]; + const end = points[points.length - 1]; + + const dir = end.clone().sub(start).normalize(); + const up = new Vector3(0, 0, 1); + const forward = up.cross(dir); + const move = forward.clone().multiplyScalar(-profile.width / 2); + + this.profileWindow.autoFitEnabled = false; + + for(let i = 0; i < points.length; i++){ + profile.setPosition(i, points[i].clone().add(move)); + } + }); + } + + setProfile (profile) { + if (this.profile !== null && this.profile !== profile) { + this.profile.removeEventListener('marker_moved', this._recompute); + this.profile.removeEventListener('marker_added', this._recompute); + this.profile.removeEventListener('marker_removed', this._recompute); + this.profile.removeEventListener('width_changed', this._recompute); + } + + this.profile = profile; + + { + this.profile.addEventListener('marker_moved', this._recompute); + this.profile.addEventListener('marker_added', this._recompute); + this.profile.addEventListener('marker_removed', this._recompute); + this.profile.addEventListener('width_changed', this._recompute); + } + + this.recompute(); + } + + reset () { + this.profileWindow.reset(); + + this.numPoints = 0; + + if (this.profile) { + for (let request of this.requests) { + request.cancel(); + } + } + } + + progressHandler (pointcloud, progress) { + for (let segment of progress.segments) { + this.profileWindow.addPoints(pointcloud, segment.points); + this.numPoints += segment.points.numPoints; + } + } + + cancel () { + for (let request of this.requests) { + request.cancel(); + // request.finishLevelThenCancel(); + } + + this.requests = []; + }; + + finishLevelThenCancel(){ + for (let request of this.requests) { + request.finishLevelThenCancel(); + } + + this.requests = []; + } + + recompute () { + if (!this.profile) { + return; + } + + if (this.scheduledRecomputeTime !== null && this.scheduledRecomputeTime > new Date().getTime()) { + return; + } else { + this.scheduledRecomputeTime = new Date().getTime() + 100; + } + this.scheduledRecomputeTime = null; + + this.reset(); + + for (let pointcloud of this.viewer.scene.pointclouds.filter(p => p.visible)) { + let request = pointcloud.getPointsInProfile(this.profile, null, { + 'onProgress': (event) => { + if (!this.enabled) { + return; + } + + this.progressHandler(pointcloud, event.points); + + if (this.numPoints > this.threshold) { + this.finishLevelThenCancel(); + } + }, + 'onFinish': (event) => { + if (!this.enabled) { + + } + }, + 'onCancel': () => { + if (!this.enabled) { + + } + } + }); + + this.requests.push(request); + } + } + }; + + /** + * + * @author sigeom sa / http://sigeom.ch + * @author Ioda-Net Sàrl / https://www.ioda-net.ch/ + * @author Markus Schütz / http://potree.org + * + */ + + class GeoJSONExporter{ + + static measurementToFeatures (measurement) { + let coords = measurement.points.map(e => e.position.toArray()); + + let features = []; + + if (coords.length === 1) { + let feature = { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: coords[0] + }, + properties: { + name: measurement.name + } + }; + features.push(feature); + } else if (coords.length > 1 && !measurement.closed) { + let object = { + 'type': 'Feature', + 'geometry': { + 'type': 'LineString', + 'coordinates': coords + }, + 'properties': { + name: measurement.name + } + }; + + features.push(object); + } else if (coords.length > 1 && measurement.closed) { + let object = { + 'type': 'Feature', + 'geometry': { + 'type': 'Polygon', + 'coordinates': [[...coords, coords[0]]] + }, + 'properties': { + name: measurement.name + } + }; + features.push(object); + } + + if (measurement.showDistances) { + measurement.edgeLabels.forEach((label) => { + let labelPoint = { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: label.position.toArray() + }, + properties: { + distance: label.text + } + }; + features.push(labelPoint); + }); + } + + if (measurement.showArea) { + let point = measurement.areaLabel.position; + let labelArea = { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: point.toArray() + }, + properties: { + area: measurement.areaLabel.text + } + }; + features.push(labelArea); + } + + return features; + } + + static toString (measurements) { + if (!(measurements instanceof Array)) { + measurements = [measurements]; + } + + measurements = measurements.filter(m => m instanceof Measure); + + let features = []; + for (let measure of measurements) { + let f = GeoJSONExporter.measurementToFeatures(measure); + + features = features.concat(f); + } + + let geojson = { + 'type': 'FeatureCollection', + 'features': features + }; + + return JSON.stringify(geojson, null, '\t'); + } + + } + + /** + * + * @author sigeom sa / http://sigeom.ch + * @author Ioda-Net Sàrl / https://www.ioda-net.ch/ + * @author Markus Schuetz / http://potree.org + * + */ + + class DXFExporter { + + static measurementPointSection (measurement) { + let position = measurement.points[0].position; + + if (!position) { + return ''; + } + + let dxfSection = `0 +CIRCLE +8 +layer_point +10 +${position.x} +20 +${position.y} +30 +${position.z} +40 +1.0 +`; + + return dxfSection; + } + + static measurementPolylineSection (measurement) { + // bit code for polygons/polylines: + // https://www.autodesk.com/techpubs/autocad/acad2000/dxf/polyline_dxf_06.htm + let geomCode = 8; + if (measurement.closed) { + geomCode += 1; + } + + let dxfSection = `0 +POLYLINE +8 +layer_polyline +62 +1 +66 +1 +10 +0.0 +20 +0.0 +30 +0.0 +70 +${geomCode} +`; + + let xMax = 0.0; + let yMax = 0.0; + let zMax = 0.0; + for (let point of measurement.points) { + point = point.position; + xMax = Math.max(xMax, point.x); + yMax = Math.max(yMax, point.y); + zMax = Math.max(zMax, point.z); + + dxfSection += `0 +VERTEX +8 +0 +10 +${point.x} +20 +${point.y} +30 +${point.z} +70 +32 +`; + } + dxfSection += `0 +SEQEND +`; + + return dxfSection; + } + + static measurementSection (measurement) { + // if(measurement.points.length <= 1){ + // return ""; + // } + + if (measurement.points.length === 0) { + return ''; + } else if (measurement.points.length === 1) { + return DXFExporter.measurementPointSection(measurement); + } else if (measurement.points.length >= 2) { + return DXFExporter.measurementPolylineSection(measurement); + } + } + + static toString(measurements){ + if (!(measurements instanceof Array)) { + measurements = [measurements]; + } + measurements = measurements.filter(m => m instanceof Measure); + + let points = measurements.filter(m => (m instanceof Measure)) + .map(m => m.points) + .reduce((a, v) => a.concat(v)) + .map(p => p.position); + + let min = new Vector3(Infinity, Infinity, Infinity); + let max = new Vector3(-Infinity, -Infinity, -Infinity); + for (let point of points) { + min.min(point); + max.max(point); + } + + let dxfHeader = `999 +DXF created from potree +0 +SECTION +2 +HEADER +9 +$ACADVER +1 +AC1006 +9 +$INSBASE +10 +0.0 +20 +0.0 +30 +0.0 +9 +$EXTMIN +10 +${min.x} +20 +${min.y} +30 +${min.z} +9 +$EXTMAX +10 +${max.x} +20 +${max.y} +30 +${max.z} +0 +ENDSEC +`; + + let dxfBody = `0 +SECTION +2 +ENTITIES +`; + + for (let measurement of measurements) { + dxfBody += DXFExporter.measurementSection(measurement); + } + + dxfBody += `0 +ENDSEC +`; + + let dxf = dxfHeader + dxfBody + '0\nEOF'; + + return dxf; + } + + } + + class MeasurePanel{ + + constructor(viewer, measurement, propertiesPanel){ + this.viewer = viewer; + this.measurement = measurement; + this.propertiesPanel = propertiesPanel; + + this._update = () => { this.update(); }; + } + + createCoordinatesTable(points){ + let table = $(` + + + + + + + +
        xyz
        + `); + + let copyIconPath = Potree.resourcePath + '/icons/copy.svg'; + + for (let point of points) { + let x = Utils.addCommas(point.x.toFixed(3)); + let y = Utils.addCommas(point.y.toFixed(3)); + let z = Utils.addCommas(point.z.toFixed(3)); + + let row = $(` + + ${x} + ${y} + ${z} + + + + + `); + + this.elCopy = row.find("img[name=copy]"); + this.elCopy.click( () => { + let msg = point.toArray().map(c => c.toFixed(3)).join(", "); + Utils.clipboardCopy(msg); + + this.viewer.postMessage( + `Copied value to clipboard:
        '${msg}'`, + {duration: 3000}); + }); + + table.append(row); + } + + return table; + }; + + createAttributesTable(){ + let elTable = $('
        '); + + let point = this.measurement.points[0]; + + for(let attributeName of Object.keys(point)){ + if(attributeName === "position"){ + + }else if(attributeName === "rgba"){ + let color = point.rgba; + let text = color.join(', '); + + elTable.append($(` + + rgb + ${text} + + `)); + }else { + let value = point[attributeName]; + let text = value.join(', '); + + elTable.append($(` + + ${attributeName} + ${text} + + `)); + } + } + + return elTable; + } + + update(){ + + } + }; + + class DistancePanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + this.elContent = $(` +
        + +
        +
        + + +
        + + + + + +
        +
        + `); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeMeasurement(measurement); + }); + + this.elMakeProfile = this.elContent.find("input[name=make_profile]"); + this.elMakeProfile.click( () => { + //measurement.points; + const profile = new Profile(); + + profile.name = measurement.name; + profile.width = measurement.getTotalDistance() / 50; + + for(const point of measurement.points){ + profile.addMarker(point.position.clone()); + } + + this.viewer.scene.addProfile(profile); + + }); + + this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); + + this.update(); + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); + + let positions = this.measurement.points.map(p => p.position); + let distances = []; + for (let i = 0; i < positions.length - 1; i++) { + let d = positions[i].distanceTo(positions[i + 1]); + distances.push(d.toFixed(3)); + } + + let totalDistance = this.measurement.getTotalDistance().toFixed(3); + let elDistanceTable = this.elContent.find(`#distances_table`); + elDistanceTable.empty(); + + for (let i = 0; i < distances.length; i++) { + let label = (i === 0) ? 'Distances: ' : ''; + let distance = distances[i]; + let elDistance = $(` + + ${label} + ${distance} + `); + elDistanceTable.append(elDistance); + } + + let elTotal = $(` + + Total: ${totalDistance} + `); + elDistanceTable.append(elTotal); + } + }; + + class PointPanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + this.elContent = $(` +
        + +
        + + + +
        + + + +
        +
        + `); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeMeasurement(measurement); + }); + + this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); + + this.update(); + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); + + let elAttributesContainer = this.elContent.find('.attributes_table_container'); + elAttributesContainer.empty(); + elAttributesContainer.append(this.createAttributesTable()); + } + }; + + class AreaPanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + this.elContent = $(` +
        + +
        + Area: + + + +
        + + + +
        +
        + `); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeMeasurement(measurement); + }); + + this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); + + this.update(); + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); + + let elArea = this.elContent.find(`#measurement_area`); + elArea.html(this.measurement.getArea().toFixed(3)); + } + }; + + class AnglePanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + this.elContent = $(` +
        + +
        + + + + + + + + + + + +
        \u03b1\u03b2\u03b3
        + + +
        + + + +
        +
        + `); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeMeasurement(measurement); + }); + + this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); + + this.update(); + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); + + let angles = []; + for(let i = 0; i < this.measurement.points.length; i++){ + angles.push(this.measurement.getAngle(i) * (180.0 / Math.PI)); + } + angles = angles.map(a => a.toFixed(1) + '\u00B0'); + + let elAlpha = this.elContent.find(`#angle_cell_alpha`); + let elBetta = this.elContent.find(`#angle_cell_betta`); + let elGamma = this.elContent.find(`#angle_cell_gamma`); + + elAlpha.html(angles[0]); + elBetta.html(angles[1]); + elGamma.html(angles[2]); + } + }; + + class CirclePanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + this.elContent = $(` +
        + +
        +
        + + +
        + + + +
        +
        + `); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeMeasurement(measurement); + }); + + this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); + + this.update(); + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); + + const elInfos = this.elContent.find(`#infos_table`); + + if(this.measurement.points.length !== 3){ + elInfos.empty(); + + return; + } + + const A = this.measurement.points[0].position; + const B = this.measurement.points[1].position; + const C = this.measurement.points[2].position; + + const center = Potree.Utils.computeCircleCenter(A, B, C); + const radius = center.distanceTo(A); + const circumference = 2 * Math.PI * radius; + + const format = (number) => { + return Potree.Utils.addCommas(number.toFixed(3)); + }; + + + const txtCenter = `${format(center.x)} ${format(center.y)} ${format(center.z)}`; + const txtRadius = format(radius); + const txtCircumference = format(circumference); + + const thStyle = `style="text-align: left"`; + const tdStyle = `style="width: 100%; padding: 5px;"`; + + elInfos.html(` + + Center: + + + + + ${txtCenter} + + + + Radius: + ${txtRadius} + + + Circumference: + ${txtCircumference} + + `); + } + }; + + class HeightPanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + this.elContent = $(` +
        + +
        + Height:
        + + +
        + + + +
        +
        + `); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeMeasurement(measurement); + }); + + this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); + + this.update(); + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); + + { + let points = this.measurement.points; + + let sorted = points.slice().sort((a, b) => a.position.z - b.position.z); + let lowPoint = sorted[0].position.clone(); + let highPoint = sorted[sorted.length - 1].position.clone(); + let min = lowPoint.z; + let max = highPoint.z; + let height = max - min; + height = height.toFixed(3); + + this.elHeightLabel = this.elContent.find(`#height_label`); + this.elHeightLabel.html(`Height: ${height}`); + } + } + }; + + class VolumePanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let copyIconPath = Potree.resourcePath + '/icons/copy.svg'; + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + + let lblLengthText = new Map([ + [BoxVolume, "length"], + [SphereVolume, "rx"], + ]).get(measurement.constructor); + + let lblWidthText = new Map([ + [BoxVolume, "width"], + [SphereVolume, "ry"], + ]).get(measurement.constructor); + + let lblHeightText = new Map([ + [BoxVolume, "height"], + [SphereVolume, "rz"], + ]).get(measurement.constructor); + + this.elContent = $(` +
        + + + + + + + + + + + + + + + +
        \u03b1\u03b2\u03b3
        + +
        + + + + + + + + + + + + + + +
        ${lblLengthText}${lblWidthText}${lblHeightText}
        + +
        + +
        + Volume: + + + + +
      • + +
      • + +
      • + +
        +
      • + + + +
      • + + +
      • +
        + + + +
        +
        + `); + + { // download + this.elDownloadButton = this.elContent.find("input[name=download_volume]"); + + if(this.propertiesPanel.viewer.server){ + this.elDownloadButton.click(() => this.download()); + } else { + this.elDownloadButton.hide(); + } + } + + this.elCopyRotation = this.elContent.find("img[name=copyRotation]"); + this.elCopyRotation.click( () => { + let rotation = this.measurement.rotation.toArray().slice(0, 3); + let msg = rotation.map(c => c.toFixed(3)).join(", "); + Utils.clipboardCopy(msg); + + this.viewer.postMessage( + `Copied value to clipboard:
        '${msg}'`, + {duration: 3000}); + }); + + this.elCopyScale = this.elContent.find("img[name=copyScale]"); + this.elCopyScale.click( () => { + let scale = this.measurement.scale.toArray(); + let msg = scale.map(c => c.toFixed(3)).join(", "); + Utils.clipboardCopy(msg); + + this.viewer.postMessage( + `Copied value to clipboard:
        '${msg}'`, + {duration: 3000}); + }); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeVolume(measurement); + }); + + this.elContent.find("#volume_reset_orientation").click(() => { + measurement.rotation.set(0, 0, 0); + }); + + this.elContent.find("#volume_make_uniform").click(() => { + let mean = (measurement.scale.x + measurement.scale.y + measurement.scale.z) / 3; + measurement.scale.set(mean, mean, mean); + }); + + this.elCheckClip = this.elContent.find('#volume_clip'); + this.elCheckClip.click(event => { + this.measurement.clip = event.target.checked; + }); + + this.elCheckShow = this.elContent.find('#volume_show'); + this.elCheckShow.click(event => { + this.measurement.visible = event.target.checked; + }); + + this.propertiesPanel.addVolatileListener(measurement, "position_changed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "orientation_changed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "scale_changed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "clip_changed", this._update); + + this.update(); + } + + async download(){ + + let clipBox = this.measurement; + + let regions = []; + //for(let clipBox of boxes){ + { + let toClip = clipBox.matrixWorld; + + let px = new Vector3(+0.5, 0, 0).applyMatrix4(toClip); + let nx = new Vector3(-0.5, 0, 0).applyMatrix4(toClip); + let py = new Vector3(0, +0.5, 0).applyMatrix4(toClip); + let ny = new Vector3(0, -0.5, 0).applyMatrix4(toClip); + let pz = new Vector3(0, 0, +0.5).applyMatrix4(toClip); + let nz = new Vector3(0, 0, -0.5).applyMatrix4(toClip); + + let pxN = new Vector3().subVectors(nx, px).normalize(); + let nxN = pxN.clone().multiplyScalar(-1); + let pyN = new Vector3().subVectors(ny, py).normalize(); + let nyN = pyN.clone().multiplyScalar(-1); + let pzN = new Vector3().subVectors(nz, pz).normalize(); + let nzN = pzN.clone().multiplyScalar(-1); + + let planes = [ + new Plane().setFromNormalAndCoplanarPoint(pxN, px), + new Plane().setFromNormalAndCoplanarPoint(nxN, nx), + new Plane().setFromNormalAndCoplanarPoint(pyN, py), + new Plane().setFromNormalAndCoplanarPoint(nyN, ny), + new Plane().setFromNormalAndCoplanarPoint(pzN, pz), + new Plane().setFromNormalAndCoplanarPoint(nzN, nz), + ]; + + let planeQueryParts = []; + for(let plane of planes){ + let part = [plane.normal.toArray(), plane.constant].join(","); + part = `[${part}]`; + planeQueryParts.push(part); + } + let region = "[" + planeQueryParts.join(",") + "]"; + regions.push(region); + } + + let regionsArg = regions.join(","); + + let pointcloudArgs = []; + for(let pointcloud of this.viewer.scene.pointclouds){ + if(!pointcloud.visible){ + continue; + } + + let offset = pointcloud.pcoGeometry.offset.clone(); + let negateOffset = new Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray()); + let matrixWorld = pointcloud.matrixWorld; + + let transform = new Matrix4().multiplyMatrices(matrixWorld, negateOffset); + + let path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`; + + let arg = { + path: path, + transform: transform.elements, + }; + let argString = JSON.stringify(arg); + + pointcloudArgs.push(argString); + } + let pointcloudsArg = pointcloudArgs.join(","); + + let elMessage = this.elContent.find("div[name=download_message]"); + + let error = (message) => { + elMessage.html(`
        ERROR: ${message}
        `); + }; + + let info = (message) => { + elMessage.html(`${message}`); + }; + + let handle = null; + { // START FILTER + let url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]®ions=[${regionsArg}]`; + + //console.log(url); + + info("estimating results ..."); + + let response = await fetch(url); + let jsResponse = await response.json(); + //console.log(jsResponse); + + if(!jsResponse.handle){ + error(jsResponse.message); + return; + }else { + handle = jsResponse.handle; + } + } + + { // WAIT, CHECK PROGRESS, HANDLE FINISH + let url = `${viewer.server}/check_regions_filter?handle=${handle}`; + + let sleep = (function(duration){ + return new Promise( (res, rej) => { + setTimeout(() => { + res(); + }, duration); + }); + }); + + let handleFiltering = (jsResponse) => { + let {progress, estimate} = jsResponse; + + let progressFract = progress["processed points"] / estimate.points; + let progressPercents = parseInt(progressFract * 100); + + info(`progress: ${progressPercents}%`); + }; + + let handleFinish = (jsResponse) => { + let message = "downloads ready:
        "; + message += "
          "; + + for(let i = 0; i < jsResponse.pointclouds.length; i++){ + let url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`; + + message += `
        • result_${i}.las
        • \n`; + } + + let reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`; + message += `
        • report.json
        • \n`; + message += "
        "; + + info(message); + }; + + let handleUnexpected = (jsResponse) => { + let message = `Unexpected Response.
        status: ${jsResponse.status}
        message: ${jsResponse.message}`; + info(message); + }; + + let handleError = (jsResponse) => { + let message = `ERROR: ${jsResponse.message}`; + error(message); + + throw new Error(message); + }; + + let start = Date.now(); + + while(true){ + let response = await fetch(url); + let jsResponse = await response.json(); + + if(jsResponse.status === "ERROR"){ + handleError(jsResponse); + }else if(jsResponse.status === "FILTERING"){ + handleFiltering(jsResponse); + }else if(jsResponse.status === "FINISHED"){ + handleFinish(jsResponse); + + break; + }else { + handleUnexpected(jsResponse); + } + + let durationS = (Date.now() - start) / 1000; + let sleepAmountMS = durationS < 10 ? 100 : 1000; + + await sleep(sleepAmountMS); + } + } + + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable([this.measurement.position])); + + { + let angles = this.measurement.rotation.toVector3(); + angles = angles.toArray(); + //angles = [angles.z, angles.x, angles.y]; + angles = angles.map(v => 180 * v / Math.PI); + angles = angles.map(a => a.toFixed(1) + '\u00B0'); + + let elAlpha = this.elContent.find(`#angle_cell_alpha`); + let elBetta = this.elContent.find(`#angle_cell_betta`); + let elGamma = this.elContent.find(`#angle_cell_gamma`); + + elAlpha.html(angles[0]); + elBetta.html(angles[1]); + elGamma.html(angles[2]); + } + + { + let dimensions = this.measurement.scale.toArray(); + dimensions = dimensions.map(v => Utils.addCommas(v.toFixed(2))); + + let elLength = this.elContent.find(`#cell_length`); + let elWidth = this.elContent.find(`#cell_width`); + let elHeight = this.elContent.find(`#cell_height`); + + elLength.html(dimensions[0]); + elWidth.html(dimensions[1]); + elHeight.html(dimensions[2]); + } + + { + let elVolume = this.elContent.find(`#measurement_volume`); + let volume = this.measurement.getVolume(); + elVolume.html(Utils.addCommas(volume.toFixed(2))); + } + + this.elCheckClip.prop("checked", this.measurement.clip); + this.elCheckShow.prop("checked", this.measurement.visible); + + } + }; + + class ProfilePanel extends MeasurePanel{ + constructor(viewer, measurement, propertiesPanel){ + super(viewer, measurement, propertiesPanel); + + let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; + this.elContent = $(` +
        + +
        + + Width: + + +
        + +
      • + +
        +
      • + +
        + + + + +
        + + + +
        +
        + `); + + this.elRemove = this.elContent.find("img[name=remove]"); + this.elRemove.click( () => { + this.viewer.scene.removeProfile(measurement); + }); + + { // download + this.elDownloadButton = this.elContent.find(`input[name=download_profile]`); + + if(this.propertiesPanel.viewer.server){ + this.elDownloadButton.click(() => this.download()); + } else { + this.elDownloadButton.hide(); + } + } + + { // width spinner + let elWidthSlider = this.elContent.find(`#sldProfileWidth`); + + elWidthSlider.spinner({ + min: 0, max: 10 * 1000 * 1000, step: 0.01, + numberFormat: 'n', + start: () => {}, + spin: (event, ui) => { + let value = elWidthSlider.spinner('value'); + measurement.setWidth(value); + }, + change: (event, ui) => { + let value = elWidthSlider.spinner('value'); + measurement.setWidth(value); + }, + stop: (event, ui) => { + let value = elWidthSlider.spinner('value'); + measurement.setWidth(value); + }, + incremental: (count) => { + let value = elWidthSlider.spinner('value'); + let step = elWidthSlider.spinner('option', 'step'); + + let delta = value * 0.05; + let increments = Math.max(1, parseInt(delta / step)); + + return increments; + } + }); + elWidthSlider.spinner('value', measurement.getWidth()); + elWidthSlider.spinner('widget').css('width', '100%'); + + let widthListener = (event) => { + let value = elWidthSlider.spinner('value'); + if (value !== measurement.getWidth()) { + elWidthSlider.spinner('value', measurement.getWidth()); + } + }; + this.propertiesPanel.addVolatileListener(measurement, "width_changed", widthListener); + } + + let elShow2DProfile = this.elContent.find(`#show_2d_profile`); + elShow2DProfile.click(() => { + this.propertiesPanel.viewer.profileWindow.show(); + this.propertiesPanel.viewer.profileWindowController.setProfile(measurement); + }); + + this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); + this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); + + this.update(); + } + + update(){ + let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); + elCoordiantesContainer.empty(); + elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points)); + } + + async download(){ + + let profile = this.measurement; + + let regions = []; + { + let segments = profile.getSegments(); + let width = profile.width; + + for(let segment of segments){ + let start = segment.start.clone().multiply(new Vector3(1, 1, 0)); + let end = segment.end.clone().multiply(new Vector3(1, 1, 0)); + let center = new Vector3().addVectors(start, end).multiplyScalar(0.5); + + let startEndDir = new Vector3().subVectors(end, start).normalize(); + let endStartDir = new Vector3().subVectors(start, end).normalize(); + let upDir = new Vector3(0, 0, 1); + let rightDir = new Vector3().crossVectors(startEndDir, upDir); + let leftDir = new Vector3().crossVectors(endStartDir, upDir); + + console.log(leftDir); + + let right = rightDir.clone().multiplyScalar(width * 0.5).add(center); + let left = leftDir.clone().multiplyScalar(width * 0.5).add(center); + + let planes = [ + new Plane().setFromNormalAndCoplanarPoint(startEndDir, start), + new Plane().setFromNormalAndCoplanarPoint(endStartDir, end), + new Plane().setFromNormalAndCoplanarPoint(leftDir, right), + new Plane().setFromNormalAndCoplanarPoint(rightDir, left), + ]; + + let planeQueryParts = []; + for(let plane of planes){ + let part = [plane.normal.toArray(), plane.constant].join(","); + part = `[${part}]`; + planeQueryParts.push(part); + } + let region = "[" + planeQueryParts.join(",") + "]"; + regions.push(region); + } + } + + let regionsArg = regions.join(","); + + let pointcloudArgs = []; + for(let pointcloud of this.viewer.scene.pointclouds){ + if(!pointcloud.visible){ + continue; + } + + let offset = pointcloud.pcoGeometry.offset.clone(); + let negateOffset = new Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray()); + let matrixWorld = pointcloud.matrixWorld; + + let transform = new Matrix4().multiplyMatrices(matrixWorld, negateOffset); + + let path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`; + + let arg = { + path: path, + transform: transform.elements, + }; + let argString = JSON.stringify(arg); + + pointcloudArgs.push(argString); + } + let pointcloudsArg = pointcloudArgs.join(","); + + let elMessage = this.elContent.find("div[name=download_message]"); + + let error = (message) => { + elMessage.html(`
        ERROR: ${message}
        `); + }; + + let info = (message) => { + elMessage.html(`${message}`); + }; + + let handle = null; + { // START FILTER + let url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]®ions=[${regionsArg}]`; + + //console.log(url); + + info("estimating results ..."); + + let response = await fetch(url); + let jsResponse = await response.json(); + //console.log(jsResponse); + + if(!jsResponse.handle){ + error(jsResponse.message); + return; + }else { + handle = jsResponse.handle; + } + } + + { // WAIT, CHECK PROGRESS, HANDLE FINISH + let url = `${viewer.server}/check_regions_filter?handle=${handle}`; + + let sleep = (function(duration){ + return new Promise( (res, rej) => { + setTimeout(() => { + res(); + }, duration); + }); + }); + + let handleFiltering = (jsResponse) => { + let {progress, estimate} = jsResponse; + + let progressFract = progress["processed points"] / estimate.points; + let progressPercents = parseInt(progressFract * 100); + + info(`progress: ${progressPercents}%`); + }; + + let handleFinish = (jsResponse) => { + let message = "downloads ready:
        "; + message += "
          "; + + for(let i = 0; i < jsResponse.pointclouds.length; i++){ + let url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`; + + message += `
        • result_${i}.las
        • \n`; + } + + let reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`; + message += `
        • report.json
        • \n`; + message += "
        "; + + info(message); + }; + + let handleUnexpected = (jsResponse) => { + let message = `Unexpected Response.
        status: ${jsResponse.status}
        message: ${jsResponse.message}`; + info(message); + }; + + let handleError = (jsResponse) => { + let message = `ERROR: ${jsResponse.message}`; + error(message); + + throw new Error(message); + }; + + let start = Date.now(); + + while(true){ + let response = await fetch(url); + let jsResponse = await response.json(); + + if(jsResponse.status === "ERROR"){ + handleError(jsResponse); + }else if(jsResponse.status === "FILTERING"){ + handleFiltering(jsResponse); + }else if(jsResponse.status === "FINISHED"){ + handleFinish(jsResponse); + + break; + }else { + handleUnexpected(jsResponse); + } + + let durationS = (Date.now() - start) / 1000; + let sleepAmountMS = durationS < 10 ? 100 : 1000; + + await sleep(sleepAmountMS); + } + } + + } + }; + + class CameraPanel{ + constructor(viewer, propertiesPanel){ + this.viewer = viewer; + this.propertiesPanel = propertiesPanel; + + this._update = () => { this.update(); }; + + let copyIconPath = Potree.resourcePath + '/icons/copy.svg'; + this.elContent = $(` +
        + + + + + + + + + + + + + + + + + + + + + +
        position
        + +
        target
        + +
        +
        + `); + + this.elCopyPosition = this.elContent.find("img[name=copyPosition]"); + this.elCopyPosition.click( () => { + let pos = this.viewer.scene.getActiveCamera().position.toArray(); + let msg = pos.map(c => c.toFixed(3)).join(", "); + Utils.clipboardCopy(msg); + + this.viewer.postMessage( + `Copied value to clipboard:
        '${msg}'`, + {duration: 3000}); + }); + + this.elCopyTarget = this.elContent.find("img[name=copyTarget]"); + this.elCopyTarget.click( () => { + let pos = this.viewer.scene.view.getPivot().toArray(); + let msg = pos.map(c => c.toFixed(3)).join(", "); + Utils.clipboardCopy(msg); + + this.viewer.postMessage( + `Copied value to clipboard:
        '${msg}'`, + {duration: 3000}); + }); + + this.propertiesPanel.addVolatileListener(viewer, "camera_changed", this._update); + + this.update(); + } + + update(){ + //console.log("updating camera panel"); + + let camera = this.viewer.scene.getActiveCamera(); + let view = this.viewer.scene.view; + + let pos = camera.position.toArray().map(c => Utils.addCommas(c.toFixed(3))); + this.elContent.find("#camera_position_x").html(pos[0]); + this.elContent.find("#camera_position_y").html(pos[1]); + this.elContent.find("#camera_position_z").html(pos[2]); + + let target = view.getPivot().toArray().map(c => Utils.addCommas(c.toFixed(3))); + this.elContent.find("#camera_target_x").html(target[0]); + this.elContent.find("#camera_target_y").html(target[1]); + this.elContent.find("#camera_target_z").html(target[2]); + } + }; + + class AnnotationPanel{ + constructor(viewer, propertiesPanel, annotation){ + this.viewer = viewer; + this.propertiesPanel = propertiesPanel; + this.annotation = annotation; + + this._update = () => { this.update(); }; + + let copyIconPath = `${Potree.resourcePath}/icons/copy.svg`; + this.elContent = $(` +
        + + + + + + + + + + + + +
        position
        + +
        + +
        + +
        Title
        +
        + Annotation Title +
        + +
        Description
        +
        + A longer description of this annotation. + Can be multiple lines long. TODO: the user should be able + to modify title and description. +
        + +
        + +
        + `); + + this.elCopyPosition = this.elContent.find("img[name=copyPosition]"); + this.elCopyPosition.click( () => { + let pos = this.annotation.position.toArray(); + let msg = pos.map(c => c.toFixed(3)).join(", "); + Utils.clipboardCopy(msg); + + this.viewer.postMessage( + `Copied value to clipboard:
        '${msg}'`, + {duration: 3000}); + }); + + this.elTitle = this.elContent.find("#annotation_title").html(annotation.title); + this.elDescription = this.elContent.find("#annotation_description").html(annotation.description); + + this.elTitle[0].addEventListener("input", () => { + const title = this.elTitle.html(); + annotation.title = title; + + }, false); + + this.elDescription[0].addEventListener("input", () => { + const description = this.elDescription.html(); + annotation.description = description; + }, false); + + this.update(); + } + + update(){ + const {annotation, elContent, elTitle, elDescription} = this; + + let pos = annotation.position.toArray().map(c => Utils.addCommas(c.toFixed(3))); + elContent.find("#annotation_position_x").html(pos[0]); + elContent.find("#annotation_position_y").html(pos[1]); + elContent.find("#annotation_position_z").html(pos[2]); + + elTitle.html(annotation.title); + elDescription.html(annotation.description); + + + } + }; + + class CameraAnimationPanel{ + constructor(viewer, propertiesPanel, animation){ + this.viewer = viewer; + this.propertiesPanel = propertiesPanel; + this.animation = animation; + + this.elContent = $(` +
        + + + + + + Duration: + + + + Time:
        + + +
        +
        + `); + + const elPlay = this.elContent.find("input[name=play]"); + elPlay.click( () => { + animation.play(); + }); + + const elSlider = this.elContent.find('#sldTime'); + elSlider.slider({ + value: 0, + min: 0, + max: 1, + step: 0.001, + slide: (event, ui) => { + animation.set(ui.value); + } + }); + + let elDuration = this.elContent.find(`input[name=spnDuration]`); + elDuration.spinner({ + min: 0, max: 300, step: 0.01, + numberFormat: 'n', + start: () => {}, + spin: (event, ui) => { + let value = elDuration.spinner('value'); + animation.setDuration(value); + }, + change: (event, ui) => { + let value = elDuration.spinner('value'); + animation.setDuration(value); + }, + stop: (event, ui) => { + let value = elDuration.spinner('value'); + animation.setDuration(value); + }, + incremental: (count) => { + let value = elDuration.spinner('value'); + let step = elDuration.spinner('option', 'step'); + + let delta = value * 0.05; + let increments = Math.max(1, parseInt(delta / step)); + + return increments; + } + }); + elDuration.spinner('value', animation.getDuration()); + elDuration.spinner('widget').css('width', '100%'); + + const elKeyframes = this.elContent.find("#animation_keyframes"); + + const updateKeyframes = () => { + elKeyframes.empty(); + + //let index = 0; + + // + // + // + + const addNewKeyframeItem = (index) => { + let elNewKeyframe = $(` +
        + + + +
        + `); + + const elAdd = elNewKeyframe.find("input[name=add]"); + elAdd.click( () => { + animation.createControlPoint(index); + }); + + elKeyframes.append(elNewKeyframe); + }; + + const addKeyframeItem = (index) => { + let elKeyframe = $(` +
        + + + + + + + + keyframe + + + + +
        + `); + + const elAssign = elKeyframe.find("img[name=assign]"); + const elMove = elKeyframe.find("img[name=move]"); + const elDelete = elKeyframe.find("img[name=delete]"); + + elAssign.click( () => { + const cp = animation.controlPoints[index]; + + cp.position.copy(viewer.scene.view.position); + cp.target.copy(viewer.scene.view.getPivot()); + }); + + elMove.click( () => { + const cp = animation.controlPoints[index]; + + viewer.scene.view.position.copy(cp.position); + viewer.scene.view.lookAt(cp.target); + }); + + elDelete.click( () => { + const cp = animation.controlPoints[index]; + animation.removeControlPoint(cp); + }); + + elKeyframes.append(elKeyframe); + }; + + let index = 0; + + addNewKeyframeItem(index); + + for(const cp of animation.controlPoints){ + + addKeyframeItem(index); + index++; + addNewKeyframeItem(index); + + } + }; + + updateKeyframes(); + + animation.addEventListener("controlpoint_added", updateKeyframes); + animation.addEventListener("controlpoint_removed", updateKeyframes); + + + + + // this._update = () => { this.update(); }; + + // this.update(); + } + + update(){ + + } + }; + + class PropertiesPanel{ + + constructor(container, viewer){ + this.container = container; + this.viewer = viewer; + this.object = null; + this.cleanupTasks = []; + this.scene = null; + } + + setScene(scene){ + this.scene = scene; + } + + set(object){ + if(this.object === object){ + return; + } + + this.object = object; + + for(let task of this.cleanupTasks){ + task(); + } + this.cleanupTasks = []; + this.container.empty(); + + if(object instanceof PointCloudTree){ + this.setPointCloud(object); + }else if(object instanceof Measure || object instanceof Profile || object instanceof Volume){ + this.setMeasurement(object); + }else if(object instanceof Camera){ + this.setCamera(object); + }else if(object instanceof Annotation){ + this.setAnnotation(object); + }else if(object instanceof CameraAnimation){ + this.setCameraAnimation(object); + } + + } + + // + // Used for events that should be removed when the property object changes. + // This is for listening to materials, scene, point clouds, etc. + // not required for DOM listeners, since they are automatically cleared by removing the DOM subtree. + // + addVolatileListener(target, type, callback){ + target.addEventListener(type, callback); + this.cleanupTasks.push(() => { + target.removeEventListener(type, callback); + }); + } + + setPointCloud(pointcloud){ + + let material = pointcloud.material; + + let panel = $(` +
        +
          + +
        • +
          +
        • +
        • +
          +
        • + + +
        • + + +
        • + + +
        • +
          + +
        • + +
        • + +
        • + + +
        • :
        • + +
          + Attribute +
          + +
        • + +
        • + +
          +
          + Attribute Weights +
          + +
        • RGB:
        • +
        • Intensity:
        • +
        • Elevation:
        • +
        • Classification:
        • +
        • Return Number:
        • +
        • Source ID:
        • +
          + +
          +
          + RGB +
          + +
        • Gamma:
        • +
        • Brightness:
        • +
        • Contrast:
        • +
          + +
          +
          + Extra Attribute +
          + +
        • :
        • + +
        • Gamma:
        • +
        • Brightness:
        • +
        • Contrast:
        • +
          + +
          +
          + MATCAP +
          + +
        • +
          +
        • +
          + +
          +
          + Color +
          + + +
          + + +
          +
          + Elevation +
          + +
        • :
        • + +
        • + + + + + +
        • + +
        • + Gradient Scheme: +
          +
          +
        • +
          + +
          +
          + Transition +
          + +
        • transition:
        • +
          + +
          +
          + Intensity +
          + +
        • Range:
        • +
        • Gamma:
        • +
        • Brightness:
        • +
        • Contrast:
        • +
          + +
          +
          + GPS Time +
          + +
          + +
          +
          + Indices +
          +
          + + +
        +
        + `); + + panel.i18n(); + this.container.append(panel); + + { // POINT SIZE + let sldPointSize = panel.find(`#sldPointSize`); + let lblPointSize = panel.find(`#lblPointSize`); + + sldPointSize.slider({ + value: material.size, + min: 0, + max: 3, + step: 0.01, + slide: function (event, ui) { material.size = ui.value; } + }); + + let update = (e) => { + lblPointSize.html(material.size.toFixed(2)); + sldPointSize.slider({value: material.size}); + }; + this.addVolatileListener(material, "point_size_changed", update); + + update(); + } + + { // MINIMUM POINT SIZE + let sldMinPointSize = panel.find(`#sldMinPointSize`); + let lblMinPointSize = panel.find(`#lblMinPointSize`); + + sldMinPointSize.slider({ + value: material.size, + min: 0, + max: 3, + step: 0.01, + slide: function (event, ui) { material.minSize = ui.value; } + }); + + let update = (e) => { + lblMinPointSize.html(material.minSize.toFixed(2)); + sldMinPointSize.slider({value: material.minSize}); + }; + this.addVolatileListener(material, "point_size_changed", update); + + update(); + } + + { // POINT SIZING + let strSizeType = Object.keys(PointSizeType)[material.pointSizeType]; + + let opt = panel.find(`#optPointSizing`); + opt.selectmenu(); + opt.val(strSizeType).selectmenu('refresh'); + + opt.selectmenu({ + change: (event, ui) => { + material.pointSizeType = PointSizeType[ui.item.value]; + } + }); + } + + { // SHAPE + let opt = panel.find(`#optShape`); + + opt.selectmenu({ + change: (event, ui) => { + let value = ui.item.value; + + material.shape = PointShape[value]; + } + }); + + let update = () => { + let typename = Object.keys(PointShape)[material.shape]; + + opt.selectmenu().val(typename).selectmenu('refresh'); + }; + this.addVolatileListener(material, "point_shape_changed", update); + + update(); + } + + { // BACKFACE CULLING + + let opt = panel.find(`#set_backface_culling`); + opt.click(() => { + material.backfaceCulling = opt.prop("checked"); + }); + let update = () => { + let value = material.backfaceCulling; + opt.prop("checked", value); + }; + this.addVolatileListener(material, "backface_changed", update); + update(); + + let blockBackface = $('#materials_backface_container'); + blockBackface.css('display', 'none'); + + const pointAttributes = pointcloud.pcoGeometry.pointAttributes; + const hasNormals = pointAttributes.hasNormals ? pointAttributes.hasNormals() : false; + if(hasNormals) { + blockBackface.css('display', 'block'); + } + /* + opt.checkboxradio({ + clicked: (event, ui) => { + // let value = ui.item.value; + let value = ui.item.checked; + console.log(value); + material.backfaceCulling = value; // $('#set_freeze').prop("checked"); + } + }); + */ + } + + { // OPACITY + let sldOpacity = panel.find(`#sldOpacity`); + let lblOpacity = panel.find(`#lblOpacity`); + + sldOpacity.slider({ + value: material.opacity, + min: 0, + max: 1, + step: 0.001, + slide: function (event, ui) { + material.opacity = ui.value; + } + }); + + let update = (e) => { + lblOpacity.html(material.opacity.toFixed(2)); + sldOpacity.slider({value: material.opacity}); + }; + this.addVolatileListener(material, "opacity_changed", update); + + update(); + } + + { + + const attributes = pointcloud.pcoGeometry.pointAttributes.attributes; + + let options = []; + + options.push(...attributes.map(a => a.name)); + + const intensityIndex = options.indexOf("intensity"); + if(intensityIndex >= 0){ + options.splice(intensityIndex + 1, 0, "intensity gradient"); + } + + options.push( + "elevation", + "color", + 'matcap', + 'indices', + 'level of detail', + 'composite' + ); + + const blacklist = [ + "POSITION_CARTESIAN", + "position", + ]; + + options = options.filter(o => !blacklist.includes(o)); + + let attributeSelection = panel.find('#optMaterial'); + for(let option of options){ + let elOption = $(``); + attributeSelection.append(elOption); + } + + let updateMaterialPanel = (event, ui) => { + let selectedValue = attributeSelection.selectmenu().val(); + material.activeAttributeName = selectedValue; + + let attribute = pointcloud.getAttribute(selectedValue); + + if(selectedValue === "intensity gradient"){ + attribute = pointcloud.getAttribute("intensity"); + } + + const isIntensity = attribute ? ["intensity", "intensity gradient"].includes(attribute.name) : false; + + if(isIntensity){ + if(pointcloud.material.intensityRange[0] === Infinity){ + pointcloud.material.intensityRange = attribute.range; + } + + const [min, max] = attribute.range; + + panel.find('#sldIntensityRange').slider({ + range: true, + min: min, max: max, step: 0.01, + values: [min, max], + slide: (event, ui) => { + let min = ui.values[0]; + let max = ui.values[1]; + material.intensityRange = [min, max]; + } + }); + } else if(attribute){ + const [min, max] = attribute.range; + + let selectedRange = material.getRange(attribute.name); + + if(!selectedRange){ + selectedRange = [...attribute.range]; + } + + let minMaxAreNumbers = typeof min === "number" && typeof max === "number"; + + if(minMaxAreNumbers){ + panel.find('#sldExtraRange').slider({ + range: true, + min: min, + max: max, + step: 0.01, + values: selectedRange, + slide: (event, ui) => { + let [a, b] = ui.values; + + material.setRange(attribute.name, [a, b]); + } + }); + } + + } + + let blockWeights = $('#materials\\.composite_weight_container'); + let blockElevation = $('#materials\\.elevation_container'); + let blockRGB = $('#materials\\.rgb_container'); + let blockExtra = $('#materials\\.extra_container'); + let blockColor = $('#materials\\.color_container'); + let blockIntensity = $('#materials\\.intensity_container'); + let blockIndex = $('#materials\\.index_container'); + let blockTransition = $('#materials\\.transition_container'); + let blockGps = $('#materials\\.gpstime_container'); + let blockMatcap = $('#materials\\.matcap_container'); + + blockIndex.css('display', 'none'); + blockIntensity.css('display', 'none'); + blockElevation.css('display', 'none'); + blockRGB.css('display', 'none'); + blockExtra.css('display', 'none'); + blockColor.css('display', 'none'); + blockWeights.css('display', 'none'); + blockTransition.css('display', 'none'); + blockMatcap.css('display', 'none'); + blockGps.css('display', 'none'); + + if (selectedValue === 'composite') { + blockWeights.css('display', 'block'); + blockElevation.css('display', 'block'); + blockRGB.css('display', 'block'); + blockIntensity.css('display', 'block'); + } else if (selectedValue === 'elevation') { + blockElevation.css('display', 'block'); + } else if (selectedValue === 'RGB and Elevation') { + blockRGB.css('display', 'block'); + blockElevation.css('display', 'block'); + } else if (selectedValue === 'rgba') { + blockRGB.css('display', 'block'); + } else if (selectedValue === 'color') { + blockColor.css('display', 'block'); + } else if (selectedValue === 'intensity') { + blockIntensity.css('display', 'block'); + } else if (selectedValue === 'intensity gradient') { + blockIntensity.css('display', 'block'); + } else if (selectedValue === "indices" ){ + blockIndex.css('display', 'block'); + } else if (selectedValue === "matcap" ){ + blockMatcap.css('display', 'block'); + } else if (selectedValue === "classification" ){ + // add classification color selctor? + } else if (selectedValue === "gps-time" ){ + blockGps.css('display', 'block'); + } else if(selectedValue === "number of returns"){ + + } else if(selectedValue === "return number"){ + + } else if(["source id", "point source id"].includes(selectedValue)){ + + } else { + blockExtra.css('display', 'block'); + } + }; + + attributeSelection.selectmenu({change: updateMaterialPanel}); + + let update = () => { + attributeSelection.val(material.activeAttributeName).selectmenu('refresh'); + }; + this.addVolatileListener(material, "point_color_type_changed", update); + this.addVolatileListener(material, "active_attribute_changed", update); + + update(); + updateMaterialPanel(); + } + + { + const schemes = Object.keys(Potree.Gradients).map(name => ({name: name, values: Gradients[name]})); + + let elSchemeContainer = panel.find("#elevation_gradient_scheme_selection"); + + for(let scheme of schemes){ + let elScheme = $(` + + + `); + + const svg = Potree.Utils.createSvgGradient(scheme.values); + svg.setAttributeNS(null, "class", `button-icon`); + + elScheme.append($(svg)); + + elScheme.click( () => { + material.gradient = Gradients[scheme.name]; + }); + + elSchemeContainer.append(elScheme); + } + } + + { + let matcaps = [ + {name: "Normals", icon: `${Potree.resourcePath}/icons/matcap/check_normal+y.jpg`}, + {name: "Basic 1", icon: `${Potree.resourcePath}/icons/matcap/basic_1.jpg`}, + {name: "Basic 2", icon: `${Potree.resourcePath}/icons/matcap/basic_2.jpg`}, + {name: "Basic Dark", icon: `${Potree.resourcePath}/icons/matcap/basic_dark.jpg`}, + {name: "Basic Side", icon: `${Potree.resourcePath}/icons/matcap/basic_side.jpg`}, + {name: "Ceramic Dark", icon: `${Potree.resourcePath}/icons/matcap/ceramic_dark.jpg`}, + {name: "Ceramic Lightbulb", icon: `${Potree.resourcePath}/icons/matcap/ceramic_lightbulb.jpg`}, + {name: "Clay Brown", icon: `${Potree.resourcePath}/icons/matcap/clay_brown.jpg`}, + {name: "Clay Muddy", icon: `${Potree.resourcePath}/icons/matcap/clay_muddy.jpg`}, + {name: "Clay Studio", icon: `${Potree.resourcePath}/icons/matcap/clay_studio.jpg`}, + {name: "Resin", icon: `${Potree.resourcePath}/icons/matcap/resin.jpg`}, + {name: "Skin", icon: `${Potree.resourcePath}/icons/matcap/skin.jpg`}, + {name: "Jade", icon: `${Potree.resourcePath}/icons/matcap/jade.jpg`}, + {name: "Metal_ Anisotropic", icon: `${Potree.resourcePath}/icons/matcap/metal_anisotropic.jpg`}, + {name: "Metal Carpaint", icon: `${Potree.resourcePath}/icons/matcap/metal_carpaint.jpg`}, + {name: "Metal Lead", icon: `${Potree.resourcePath}/icons/matcap/metal_lead.jpg`}, + {name: "Metal Shiny", icon: `${Potree.resourcePath}/icons/matcap/metal_shiny.jpg`}, + {name: "Pearl", icon: `${Potree.resourcePath}/icons/matcap/pearl.jpg`}, + {name: "Toon", icon: `${Potree.resourcePath}/icons/matcap/toon.jpg`}, + {name: "Check Rim Light", icon: `${Potree.resourcePath}/icons/matcap/check_rim_light.jpg`}, + {name: "Check Rim Dark", icon: `${Potree.resourcePath}/icons/matcap/check_rim_dark.jpg`}, + {name: "Contours 1", icon: `${Potree.resourcePath}/icons/matcap/contours_1.jpg`}, + {name: "Contours 2", icon: `${Potree.resourcePath}/icons/matcap/contours_2.jpg`}, + {name: "Contours 3", icon: `${Potree.resourcePath}/icons/matcap/contours_3.jpg`}, + {name: "Reflection Check Horizontal", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_horizontal.jpg`}, + {name: "Reflection Check Vertical", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_vertical.jpg`}, + ]; + + let elMatcapContainer = panel.find("#matcap_scheme_selection"); + + for(let matcap of matcaps){ + let elMatcap = $(` + + `); + + elMatcap.click( () => { + material.matcap = matcap.icon.substring(matcap.icon.lastIndexOf('/')); + }); + + elMatcapContainer.append(elMatcap); + } + } + + { + panel.find('#sldRGBGamma').slider({ + value: material.rgbGamma, + min: 0, max: 4, step: 0.01, + slide: (event, ui) => {material.rgbGamma = ui.value;} + }); + + panel.find('#sldRGBContrast').slider({ + value: material.rgbContrast, + min: -1, max: 1, step: 0.01, + slide: (event, ui) => {material.rgbContrast = ui.value;} + }); + + panel.find('#sldRGBBrightness').slider({ + value: material.rgbBrightness, + min: -1, max: 1, step: 0.01, + slide: (event, ui) => {material.rgbBrightness = ui.value;} + }); + + panel.find('#sldExtraGamma').slider({ + value: material.extraGamma, + min: 0, max: 4, step: 0.01, + slide: (event, ui) => {material.extraGamma = ui.value;} + }); + + panel.find('#sldExtraBrightness').slider({ + value: material.extraBrightness, + min: -1, max: 1, step: 0.01, + slide: (event, ui) => {material.extraBrightness = ui.value;} + }); + + panel.find('#sldExtraContrast').slider({ + value: material.extraContrast, + min: -1, max: 1, step: 0.01, + slide: (event, ui) => {material.extraContrast = ui.value;} + }); + + panel.find('#sldHeightRange').slider({ + range: true, + min: 0, max: 1000, step: 0.01, + values: [0, 1000], + slide: (event, ui) => { + material.heightMin = ui.values[0]; + material.heightMax = ui.values[1]; + } + }); + + panel.find('#sldIntensityGamma').slider({ + value: material.intensityGamma, + min: 0, max: 4, step: 0.01, + slide: (event, ui) => {material.intensityGamma = ui.value;} + }); + + panel.find('#sldIntensityContrast').slider({ + value: material.intensityContrast, + min: -1, max: 1, step: 0.01, + slide: (event, ui) => {material.intensityContrast = ui.value;} + }); + + panel.find('#sldIntensityBrightness').slider({ + value: material.intensityBrightness, + min: -1, max: 1, step: 0.01, + slide: (event, ui) => {material.intensityBrightness = ui.value;} + }); + + panel.find('#sldWeightRGB').slider({ + value: material.weightRGB, + min: 0, max: 1, step: 0.01, + slide: (event, ui) => {material.weightRGB = ui.value;} + }); + + panel.find('#sldWeightIntensity').slider({ + value: material.weightIntensity, + min: 0, max: 1, step: 0.01, + slide: (event, ui) => {material.weightIntensity = ui.value;} + }); + + panel.find('#sldWeightElevation').slider({ + value: material.weightElevation, + min: 0, max: 1, step: 0.01, + slide: (event, ui) => {material.weightElevation = ui.value;} + }); + + panel.find('#sldWeightClassification').slider({ + value: material.weightClassification, + min: 0, max: 1, step: 0.01, + slide: (event, ui) => {material.weightClassification = ui.value;} + }); + + panel.find('#sldWeightReturnNumber').slider({ + value: material.weightReturnNumber, + min: 0, max: 1, step: 0.01, + slide: (event, ui) => {material.weightReturnNumber = ui.value;} + }); + + panel.find('#sldWeightSourceID').slider({ + value: material.weightSourceID, + min: 0, max: 1, step: 0.01, + slide: (event, ui) => {material.weightSourceID = ui.value;} + }); + + panel.find(`#materials\\.color\\.picker`).spectrum({ + flat: true, + showInput: true, + preferredFormat: 'rgb', + cancelText: '', + chooseText: 'Apply', + color: `#${material.color.getHexString()}`, + move: color => { + let cRGB = color.toRgb(); + let tc = new Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255); + material.color = tc; + }, + change: color => { + let cRGB = color.toRgb(); + let tc = new Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255); + material.color = tc; + } + }); + + this.addVolatileListener(material, "color_changed", () => { + panel.find(`#materials\\.color\\.picker`) + .spectrum('set', `#${material.color.getHexString()}`); + }); + + let updateHeightRange = function () { + + + let aPosition = pointcloud.getAttribute("position"); + + let bMin, bMax; + + if(aPosition){ + // for new format 2.0 and loader that contain precomputed min/max of attributes + let min = aPosition.range[0][2]; + let max = aPosition.range[1][2]; + let width = max - min; + + bMin = min - 0.2 * width; + bMax = max + 0.2 * width; + }else { + // for format up until exlusive 2.0 + let box = [pointcloud.pcoGeometry.tightBoundingBox, pointcloud.getBoundingBoxWorld()] + .find(v => v !== undefined); + + pointcloud.updateMatrixWorld(true); + box = Utils.computeTransformedBoundingBox(box, pointcloud.matrixWorld); + + let bWidth = box.max.z - box.min.z; + bMin = box.min.z - 0.2 * bWidth; + bMax = box.max.z + 0.2 * bWidth; + } + + let range = material.elevationRange; + + panel.find('#lblHeightRange').html(`${range[0].toFixed(2)} to ${range[1].toFixed(2)}`); + panel.find('#sldHeightRange').slider({min: bMin, max: bMax, values: range}); + }; + + let updateExtraRange = function () { + + let attributeName = material.activeAttributeName; + let attribute = pointcloud.getAttribute(attributeName); + + if(attribute == null){ + return; + } + + let range = material.getRange(attributeName); + + if(range == null){ + range = attribute.range; + } + + // currently only supporting scalar ranges. + // rgba, normals, positions, etc have vector ranges, however + let isValidRange = (typeof range[0] === "number") && (typeof range[1] === "number"); + if(!isValidRange){ + return; + } + + if(range){ + let msg = `${range[0].toFixed(2)} to ${range[1].toFixed(2)}`; + panel.find('#lblExtraRange').html(msg); + }else { + panel.find("could not deduce range"); + } + }; + + let updateIntensityRange = function () { + let range = material.intensityRange; + + panel.find('#lblIntensityRange').html(`${parseInt(range[0])} to ${parseInt(range[1])}`); + }; + + { + updateHeightRange(); + panel.find(`#sldHeightRange`).slider('option', 'min'); + panel.find(`#sldHeightRange`).slider('option', 'max'); + } + + { + let elGradientRepeat = panel.find("#gradient_repeat_option"); + elGradientRepeat.selectgroup({title: "Gradient"}); + + elGradientRepeat.find("input").click( (e) => { + this.viewer.setElevationGradientRepeat(ElevationGradientRepeat[e.target.value]); + }); + + let current = Object.keys(ElevationGradientRepeat) + .filter(key => ElevationGradientRepeat[key] === this.viewer.elevationGradientRepeat); + elGradientRepeat.find(`input[value=${current}]`).trigger("click"); + } + + let onIntensityChange = () => { + let gamma = material.intensityGamma; + let contrast = material.intensityContrast; + let brightness = material.intensityBrightness; + + updateIntensityRange(); + + panel.find('#lblIntensityGamma').html(gamma.toFixed(2)); + panel.find('#lblIntensityContrast').html(contrast.toFixed(2)); + panel.find('#lblIntensityBrightness').html(brightness.toFixed(2)); + + panel.find('#sldIntensityGamma').slider({value: gamma}); + panel.find('#sldIntensityContrast').slider({value: contrast}); + panel.find('#sldIntensityBrightness').slider({value: brightness}); + }; + + let onRGBChange = () => { + let gamma = material.rgbGamma; + let contrast = material.rgbContrast; + let brightness = material.rgbBrightness; + + panel.find('#lblRGBGamma').html(gamma.toFixed(2)); + panel.find('#lblRGBContrast').html(contrast.toFixed(2)); + panel.find('#lblRGBBrightness').html(brightness.toFixed(2)); + + panel.find('#sldRGBGamma').slider({value: gamma}); + panel.find('#sldRGBContrast').slider({value: contrast}); + panel.find('#sldRGBBrightness').slider({value: brightness}); + }; + + this.addVolatileListener(material, "material_property_changed", updateExtraRange); + this.addVolatileListener(material, "material_property_changed", updateHeightRange); + this.addVolatileListener(material, "material_property_changed", onIntensityChange); + this.addVolatileListener(material, "material_property_changed", onRGBChange); + + updateExtraRange(); + updateHeightRange(); + onIntensityChange(); + onRGBChange(); + } + + } + + + + setMeasurement(object){ + + let TYPE = { + DISTANCE: {panel: DistancePanel}, + AREA: {panel: AreaPanel}, + POINT: {panel: PointPanel}, + ANGLE: {panel: AnglePanel}, + HEIGHT: {panel: HeightPanel}, + PROFILE: {panel: ProfilePanel}, + VOLUME: {panel: VolumePanel}, + CIRCLE: {panel: CirclePanel}, + OTHER: {panel: PointPanel}, + }; + + let getType = (measurement) => { + if (measurement instanceof Measure) { + if (measurement.showDistances && !measurement.showArea && !measurement.showAngles) { + return TYPE.DISTANCE; + } else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) { + return TYPE.AREA; + } else if (measurement.maxMarkers === 1) { + return TYPE.POINT; + } else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) { + return TYPE.ANGLE; + } else if (measurement.showHeight) { + return TYPE.HEIGHT; + } else if (measurement.showCircle) { + return TYPE.CIRCLE; + } else { + return TYPE.OTHER; + } + } else if (measurement instanceof Profile) { + return TYPE.PROFILE; + } else if (measurement instanceof Volume) { + return TYPE.VOLUME; + } + }; + + //this.container.html("measurement"); + + let type = getType(object); + let Panel = type.panel; + + let panel = new Panel(this.viewer, object, this); + this.container.append(panel.elContent); + } + + setCamera(camera){ + let panel = new CameraPanel(this.viewer, this); + this.container.append(panel.elContent); + } + + setAnnotation(annotation){ + let panel = new AnnotationPanel(this.viewer, this, annotation); + this.container.append(panel.elContent); + } + + setCameraAnimation(animation){ + let panel = new CameraAnimationPanel(this.viewer, this, animation); + this.container.append(panel.elContent); + } + + } + + function addCommas(nStr){ + nStr += ''; + let x = nStr.split('.'); + let x1 = x[0]; + let x2 = x.length > 1 ? '.' + x[1] : ''; + let rgx = /(\d+)(\d{3})/; + while (rgx.test(x1)) { + x1 = x1.replace(rgx, '$1' + ',' + '$2'); + } + return x1 + x2; + }; + + function format(value){ + return addCommas(value.toFixed(3)); + }; + + class HierarchicalSlider{ + + constructor(params = {}){ + + this.element = document.createElement("div"); + + this.labels = []; + this.sliders = []; + this.range = params.range != null ? params.range : [0, 1]; + this.slide = params.slide != null ? params.slide : null; + this.step = params.step != null ? params.step : 0.0001; + + let levels = params.levels != null ? params.levels : 1; + + for(let level = 0; level < levels; level++){ + this.addLevel(); + } + + } + + setRange(range){ + this.range = [...range]; + + { // root slider + let slider = this.sliders[0]; + + $(slider).slider({ + min: range[0], + max: range[1], + }); + } + + for(let i = 1; i < this.sliders.length; i++){ + let parentSlider = this.sliders[i - 1]; + let slider = this.sliders[i]; + + let parentValues = $(parentSlider).slider("option", "values"); + let childRange = [...parentValues]; + + $(slider).slider({ + min: childRange[0], + max: childRange[1], + }); + } + + this.updateLabels(); + } + + setValues(values){ + for(let slider of this.sliders){ + $(slider).slider({ + values: [...values], + }); + } + + this.updateLabels(); + } + + addLevel(){ + const elLevel = document.createElement("li"); + const elRange = document.createTextNode("Range: "); + const label = document.createElement("span"); + const slider = document.createElement("div"); + + let level = this.sliders.length; + let [min, max] = [0, 0]; + + if(this.sliders.length === 0){ + [min, max] = this.range; + }else { + let parentSlider = this.sliders[this.sliders.length - 1]; + [min, max] = $(parentSlider).slider("option", "values"); + } + + $(slider).slider({ + range: true, + min: min, + max: max, + step: this.step, + values: [min, max], + slide: (event, ui) => { + + // set all descendants to same range + let levels = this.sliders.length; + for(let i = level + 1; i < levels; i++){ + let descendant = this.sliders[i]; + + $(descendant).slider({ + range: true, + min: ui.values[0], + max: ui.values[1], + values: [...ui.values], + }); + } + + if(this.slide){ + let values = [...ui.values]; + + this.slide({ + target: this, + range: this.range, + values: values, + }); + } + + this.updateLabels(); + }, + }); + + elLevel.append(elRange, label, slider); + + this.sliders.push(slider); + this.labels.push(label); + this.element.append(elLevel); + + this.updateLabels(); + } + + removeLevel(){ + + } + + updateSliders(){ + + } + + updateLabels(){ + + let levels = this.sliders.length; + + for(let i = 0; i < levels; i++){ + + let slider = this.sliders[i]; + let label = this.labels[i]; + + let [min, max] = $(slider).slider("option", "values"); + let strMin = format(min); + let strMax = format(max); + let strLabel = `${strMin} to ${strMax}`; + + label.innerHTML = strLabel; + } + + } + + + } + + class OrientedImageControls extends EventDispatcher{ + + constructor(viewer){ + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.originalCam = viewer.scene.getActiveCamera(); + this.shearCam = viewer.scene.getActiveCamera().clone(); + this.shearCam.rotation.set(this.originalCam.rotation.toArray()); + this.shearCam.updateProjectionMatrix(); + this.shearCam.updateProjectionMatrix = () => { + return this.shearCam.projectionMatrix; + }; + + this.image = null; + + this.fadeFactor = 20; + this.fovDelta = 0; + + this.fovMin = 0.1; + this.fovMax = 120; + + this.shear = [0, 0]; + + // const style = ``; + this.elUp = $(``); + this.elRight = $(``); + this.elDown = $(``); + this.elLeft = $(``); + this.elExit = $(``); + + this.elExit.click( () => { + this.release(); + }); + + this.elUp.click(() => { + const fovY = viewer.getFOV(); + const top = Math.tan(MathUtils.degToRad(fovY / 2)); + this.shear[1] += 0.1 * top; + }); + + this.elRight.click(() => { + const fovY = viewer.getFOV(); + const top = Math.tan(MathUtils.degToRad(fovY / 2)); + this.shear[0] += 0.1 * top; + }); + + this.elDown.click(() => { + const fovY = viewer.getFOV(); + const top = Math.tan(MathUtils.degToRad(fovY / 2)); + this.shear[1] -= 0.1 * top; + }); + + this.elLeft.click(() => { + const fovY = viewer.getFOV(); + const top = Math.tan(MathUtils.degToRad(fovY / 2)); + this.shear[0] -= 0.1 * top; + }); + + this.scene = null; + this.sceneControls = new Scene(); + + let scroll = (e) => { + this.fovDelta += -e.delta * 1.0; + }; + + this.addEventListener('mousewheel', scroll); + //this.addEventListener("mousemove", onMove); + } + + hasSomethingCaptured(){ + return this.image !== null; + } + + capture(image){ + if(this.hasSomethingCaptured()){ + return; + } + + this.image = image; + + this.originalFOV = this.viewer.getFOV(); + this.originalControls = this.viewer.getControls(); + + this.viewer.setControls(this); + this.viewer.scene.overrideCamera = this.shearCam; + + const elCanvas = this.viewer.renderer.domElement; + const elRoot = $(elCanvas.parentElement); + + this.shear = [0, 0]; + + + elRoot.append(this.elUp); + elRoot.append(this.elRight); + elRoot.append(this.elDown); + elRoot.append(this.elLeft); + elRoot.append(this.elExit); + } + + release(){ + this.image = null; + + this.viewer.scene.overrideCamera = null; + + this.elUp.detach(); + this.elRight.detach(); + this.elDown.detach(); + this.elLeft.detach(); + this.elExit.detach(); + + this.viewer.setFOV(this.originalFOV); + this.viewer.setControls(this.originalControls); + } + + setScene (scene) { + this.scene = scene; + } + + update (delta) { + // const view = this.scene.view; + + // let prevTotal = this.shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0); + + //const progression = Math.min(1, this.fadeFactor * delta); + //const attenuation = Math.max(0, 1 - this.fadeFactor * delta); + const progression = 1; + const attenuation = 0; + + const oldFov = this.viewer.getFOV(); + let fovProgression = progression * this.fovDelta; + let newFov = oldFov * ((1 + fovProgression / 10)); + + newFov = Math.max(this.fovMin, newFov); + newFov = Math.min(this.fovMax, newFov); + + let diff = newFov / oldFov; + + const mouse = this.viewer.inputHandler.mouse; + const canvasSize = this.viewer.renderer.getSize(new Vector2()); + const uv = [ + (mouse.x / canvasSize.x), + ((canvasSize.y - mouse.y) / canvasSize.y) + ]; + + const fovY = newFov; + const aspect = canvasSize.x / canvasSize.y; + const top = Math.tan(MathUtils.degToRad(fovY / 2)); + const height = 2 * top; + const width = aspect * height; + + const shearRangeX = [ + this.shear[0] - 0.5 * width, + this.shear[0] + 0.5 * width, + ]; + + const shearRangeY = [ + this.shear[1] - 0.5 * height, + this.shear[1] + 0.5 * height, + ]; + + const shx = (1 - uv[0]) * shearRangeX[0] + uv[0] * shearRangeX[1]; + const shy = (1 - uv[1]) * shearRangeY[0] + uv[1] * shearRangeY[1]; + + const shu = (1 - diff); + + const newShear = [ + (1 - shu) * this.shear[0] + shu * shx, + (1 - shu) * this.shear[1] + shu * shy, + ]; + + this.shear = newShear; + this.viewer.setFOV(newFov); + + const {originalCam, shearCam} = this; + + originalCam.fov = newFov; + originalCam.updateMatrixWorld(); + originalCam.updateProjectionMatrix(); + shearCam.copy(originalCam); + shearCam.rotation.set(...originalCam.rotation.toArray()); + + shearCam.updateMatrixWorld(); + shearCam.projectionMatrix.copy(originalCam.projectionMatrix); + + const [sx, sy] = this.shear; + const mShear = new Matrix4().set( + 1, 0, sx, 0, + 0, 1, sy, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, + ); + + const proj = shearCam.projectionMatrix; + proj.multiply(mShear); + shearCam.projectionMatrixInverse.copy(proj).invert(); + + let total = shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0); + + this.fovDelta *= attenuation; + } + }; + + // https://support.pix4d.com/hc/en-us/articles/205675256-How-are-yaw-pitch-roll-defined + // https://support.pix4d.com/hc/en-us/articles/202558969-How-are-omega-phi-kappa-defined + + function createMaterial(){ + + let vertexShader = ` + uniform float uNear; + varying vec2 vUV; + varying vec4 vDebug; + + void main(){ + vDebug = vec4(0.0, 1.0, 0.0, 1.0); + vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0); + // make sure that this mesh is at least in front of the near plane + modelViewPosition.xyz += normalize(modelViewPosition.xyz) * uNear; + gl_Position = projectionMatrix * modelViewPosition; + vUV = uv; + } + `; + + let fragmentShader = ` + uniform sampler2D tColor; + uniform float uOpacity; + varying vec2 vUV; + varying vec4 vDebug; + void main(){ + vec4 color = texture2D(tColor, vUV); + gl_FragColor = color; + gl_FragColor.a = uOpacity; + } + `; + const material = new ShaderMaterial( { + uniforms: { + // time: { value: 1.0 }, + // resolution: { value: new THREE.Vector2() } + tColor: {value: new Texture() }, + uNear: {value: 0.0}, + uOpacity: {value: 1.0}, + }, + vertexShader: vertexShader, + fragmentShader: fragmentShader, + side: DoubleSide, + } ); + + material.side = DoubleSide; + + return material; + } + + const planeGeometry = new PlaneGeometry(1, 1); + const lineGeometry = new Geometry(); + + lineGeometry.vertices.push( + new Vector3(-0.5, -0.5, 0), + new Vector3( 0.5, -0.5, 0), + new Vector3( 0.5, 0.5, 0), + new Vector3(-0.5, 0.5, 0), + new Vector3(-0.5, -0.5, 0), + ); + + class OrientedImage{ + + constructor(id){ + + this.id = id; + this.fov = 1.0; + this.position = new Vector3(); + this.rotation = new Vector3(); + this.width = 0; + this.height = 0; + this.fov = 1.0; + + const material = createMaterial(); + const lineMaterial = new LineBasicMaterial( { color: 0x00ff00 } ); + this.mesh = new Mesh(planeGeometry, material); + this.line = new Line(lineGeometry, lineMaterial); + this.texture = null; + + this.mesh.orientedImage = this; + } + + set(position, rotation, dimension, fov){ + + let radians = rotation.map(MathUtils.degToRad); + + this.position.set(...position); + this.mesh.position.set(...position); + + this.rotation.set(...radians); + this.mesh.rotation.set(...radians); + + [this.width, this.height] = dimension; + this.mesh.scale.set(this.width / this.height, 1, 1); + + this.fov = fov; + + this.updateTransform(); + } + + updateTransform(){ + let {mesh, line, fov} = this; + + mesh.updateMatrixWorld(); + const dir = mesh.getWorldDirection(); + const alpha = MathUtils.degToRad(fov / 2); + const d = -0.5 / Math.tan(alpha); + const move = dir.clone().multiplyScalar(d); + mesh.position.add(move); + + line.position.copy(mesh.position); + line.scale.copy(mesh.scale); + line.rotation.copy(mesh.rotation); + } + + }; + + class OrientedImages extends EventDispatcher{ + + constructor(){ + super(); + + this.node = null; + this.cameraParams = null; + this.imageParams = null; + this.images = null; + this._visible = true; + } + + set visible(visible){ + if(this._visible === visible){ + return; + } + + for(const image of this.images){ + image.mesh.visible = visible; + image.line.visible = visible; + } + + this._visible = visible; + this.dispatchEvent({ + type: "visibility_changed", + images: this, + }); + } + + get visible(){ + return this._visible; + } + + + }; + + class OrientedImageLoader{ + + static async loadCameraParams(path){ + const res = await fetch(path); + const text = await res.text(); + + const parser = new DOMParser(); + const doc = parser.parseFromString(text, "application/xml"); + + const width = parseInt(doc.getElementsByTagName("width")[0].textContent); + const height = parseInt(doc.getElementsByTagName("height")[0].textContent); + const f = parseFloat(doc.getElementsByTagName("f")[0].textContent); + + let a = (height / 2) / f; + let fov = 2 * MathUtils.radToDeg(Math.atan(a)); + + const params = { + path: path, + width: width, + height: height, + f: f, + fov: fov, + }; + + return params; + } + + static async loadImageParams(path){ + + const response = await fetch(path); + if(!response.ok){ + console.error(`failed to load ${path}`); + return; + } + + const content = await response.text(); + const lines = content.split(/\r?\n/); + const imageParams = []; + + for(let i = 1; i < lines.length; i++){ + const line = lines[i]; + + if(line.startsWith("#")){ + continue; + } + + const tokens = line.split(/\s+/); + + if(tokens.length < 6){ + continue; + } + + const params = { + id: tokens[0], + x: Number.parseFloat(tokens[1]), + y: Number.parseFloat(tokens[2]), + z: Number.parseFloat(tokens[3]), + omega: Number.parseFloat(tokens[4]), + phi: Number.parseFloat(tokens[5]), + kappa: Number.parseFloat(tokens[6]), + }; + + // const whitelist = ["47518.jpg"]; + // if(whitelist.includes(params.id)){ + // imageParams.push(params); + // } + imageParams.push(params); + } + + // debug + //return [imageParams[50]]; + + return imageParams; + } + + static async load(cameraParamsPath, imageParamsPath, viewer){ + + const tStart = performance.now(); + + const [cameraParams, imageParams] = await Promise.all([ + OrientedImageLoader.loadCameraParams(cameraParamsPath), + OrientedImageLoader.loadImageParams(imageParamsPath), + ]); + + const orientedImageControls = new OrientedImageControls(viewer); + const raycaster = new Raycaster(); + + const tEnd = performance.now(); + console.log(tEnd - tStart); + + // const sp = new THREE.PlaneGeometry(1, 1); + // const lg = new THREE.Geometry(); + + // lg.vertices.push( + // new THREE.Vector3(-0.5, -0.5, 0), + // new THREE.Vector3( 0.5, -0.5, 0), + // new THREE.Vector3( 0.5, 0.5, 0), + // new THREE.Vector3(-0.5, 0.5, 0), + // new THREE.Vector3(-0.5, -0.5, 0), + // ); + + const {width, height} = cameraParams; + const orientedImages = []; + const sceneNode = new Object3D(); + sceneNode.name = "oriented_images"; + + for(const params of imageParams){ + + // const material = createMaterial(); + // const lm = new THREE.LineBasicMaterial( { color: 0x00ff00 } ); + // const mesh = new THREE.Mesh(sp, material); + + const {x, y, z, omega, phi, kappa} = params; + // const [rx, ry, rz] = [omega, phi, kappa] + // .map(THREE.Math.degToRad); + + // mesh.position.set(x, y, z); + // mesh.scale.set(width / height, 1, 1); + // mesh.rotation.set(rx, ry, rz); + // { + // mesh.updateMatrixWorld(); + // const dir = mesh.getWorldDirection(); + // const alpha = THREE.Math.degToRad(cameraParams.fov / 2); + // const d = -0.5 / Math.tan(alpha); + // const move = dir.clone().multiplyScalar(d); + // mesh.position.add(move); + // } + // sceneNode.add(mesh); + + // const line = new THREE.Line(lg, lm); + // line.position.copy(mesh.position); + // line.scale.copy(mesh.scale); + // line.rotation.copy(mesh.rotation); + // sceneNode.add(line); + + let orientedImage = new OrientedImage(params.id); + // orientedImage.setPosition(x, y, z); + // orientedImage.setRotation(omega, phi, kappa); + // orientedImage.setDimension(width, height); + let position = [x, y, z]; + let rotation = [omega, phi, kappa]; + let dimension = [width, height]; + orientedImage.set(position, rotation, dimension, cameraParams.fov); + + sceneNode.add(orientedImage.mesh); + sceneNode.add(orientedImage.line); + + orientedImages.push(orientedImage); + } + + let hoveredElement = null; + let clipVolume = null; + + const onMouseMove = (evt) => { + const tStart = performance.now(); + if(hoveredElement){ + hoveredElement.line.material.color.setRGB(0, 1, 0); + } + evt.preventDefault(); + + //var array = getMousePosition( container, evt.clientX, evt.clientY ); + const rect = viewer.renderer.domElement.getBoundingClientRect(); + const [x, y] = [evt.clientX, evt.clientY]; + const array = [ + ( x - rect.left ) / rect.width, + ( y - rect.top ) / rect.height + ]; + const onClickPosition = new Vector2(...array); + //const intersects = getIntersects(onClickPosition, scene.children); + const camera = viewer.scene.getActiveCamera(); + const mouse = new Vector3( + + ( onClickPosition.x * 2 ) - 1, + - ( onClickPosition.y * 2 ) + 1 ); + const objects = orientedImages.map(i => i.mesh); + raycaster.setFromCamera( mouse, camera ); + const intersects = raycaster.intersectObjects( objects ); + let selectionChanged = false; + + if ( intersects.length > 0){ + //console.log(intersects); + const intersection = intersects[0]; + const orientedImage = intersection.object.orientedImage; + orientedImage.line.material.color.setRGB(1, 0, 0); + selectionChanged = hoveredElement !== orientedImage; + hoveredElement = orientedImage; + }else { + hoveredElement = null; + } + + let shouldRemoveClipVolume = clipVolume !== null && hoveredElement === null; + let shouldAddClipVolume = clipVolume === null && hoveredElement !== null; + + if(clipVolume !== null && (hoveredElement === null || selectionChanged)){ + // remove existing + viewer.scene.removePolygonClipVolume(clipVolume); + clipVolume = null; + } + + if(shouldAddClipVolume || selectionChanged){ + const img = hoveredElement; + const fov = cameraParams.fov; + const aspect = cameraParams.width / cameraParams.height; + const near = 1.0; + const far = 1000 * 1000; + const camera = new PerspectiveCamera(fov, aspect, near, far); + camera.rotation.order = viewer.scene.getActiveCamera().rotation.order; + camera.rotation.copy(img.mesh.rotation); + { + const mesh = img.mesh; + const dir = mesh.getWorldDirection(); + const pos = mesh.position; + const alpha = MathUtils.degToRad(fov / 2); + const d = 0.5 / Math.tan(alpha); + const newCamPos = pos.clone().add(dir.clone().multiplyScalar(d)); + const newCamDir = pos.clone().sub(newCamPos); + const newCamTarget = new Vector3().addVectors( + newCamPos, + newCamDir.clone().multiplyScalar(viewer.getMoveSpeed())); + camera.position.copy(newCamPos); + } + let volume = new Potree.PolygonClipVolume(camera); + let m0 = new Mesh(); + let m1 = new Mesh(); + let m2 = new Mesh(); + let m3 = new Mesh(); + m0.position.set(-1, -1, 0); + m1.position.set( 1, -1, 0); + m2.position.set( 1, 1, 0); + m3.position.set(-1, 1, 0); + volume.markers.push(m0, m1, m2, m3); + volume.initialized = true; + + viewer.scene.addPolygonClipVolume(volume); + clipVolume = volume; + } + const tEnd = performance.now(); + //console.log(tEnd - tStart); + }; + + const moveToImage = (image) => { + console.log("move to image " + image.id); + + const mesh = image.mesh; + const newCamPos = image.position.clone(); + const newCamTarget = mesh.position.clone(); + + viewer.scene.view.setView(newCamPos, newCamTarget, 500, () => { + orientedImageControls.capture(image); + }); + + if(image.texture === null){ + + const target = image; + + const tmpImagePath = `${Potree.resourcePath}/images/loading.jpg`; + new TextureLoader().load(tmpImagePath, + (texture) => { + if(target.texture === null){ + target.texture = texture; + target.mesh.material.uniforms.tColor.value = texture; + mesh.material.needsUpdate = true; + } + } + ); + + const imagePath = `${imageParamsPath}/../${target.id}`; + new TextureLoader().load(imagePath, + (texture) => { + target.texture = texture; + target.mesh.material.uniforms.tColor.value = texture; + mesh.material.needsUpdate = true; + } + ); + + + } + }; + + const onMouseClick = (evt) => { + + if(orientedImageControls.hasSomethingCaptured()){ + return; + } + + if(hoveredElement){ + moveToImage(hoveredElement); + } + }; + viewer.renderer.domElement.addEventListener( 'mousemove', onMouseMove, false ); + viewer.renderer.domElement.addEventListener( 'mousedown', onMouseClick, false ); + + viewer.addEventListener("update", () => { + + for(const image of orientedImages){ + const world = image.mesh.matrixWorld; + const {width, height} = image; + const aspect = width / height; + + const camera = viewer.scene.getActiveCamera(); + + const imgPos = image.mesh.getWorldPosition(new Vector3()); + const camPos = camera.position; + const d = camPos.distanceTo(imgPos); + + const minSize = 1; // in degrees of fov + const a = MathUtils.degToRad(minSize); + let r = d * Math.tan(a); + r = Math.max(r, 1); + + + image.mesh.scale.set(r * aspect, r, 1); + image.line.scale.set(r * aspect, r, 1); + + image.mesh.material.uniforms.uNear.value = camera.near; + + } + + }); + + const images = new OrientedImages(); + images.node = sceneNode; + images.cameraParamsPath = cameraParamsPath; + images.imageParamsPath = imageParamsPath; + images.cameraParams = cameraParams; + images.imageParams = imageParams; + images.images = orientedImages; + + Potree.debug.moveToImage = moveToImage; + + return images; + } + } + + let sg = new SphereGeometry(1, 8, 8); + let sgHigh = new SphereGeometry(1, 128, 128); + + let sm = new MeshBasicMaterial({side: BackSide}); + let smHovered = new MeshBasicMaterial({side: BackSide, color: 0xff0000}); + + let raycaster = new Raycaster(); + let currentlyHovered = null; + + let previousView = { + controls: null, + position: null, + target: null, + }; + + class Image360{ + + constructor(file, time, longitude, latitude, altitude, course, pitch, roll){ + this.file = file; + this.time = time; + this.longitude = longitude; + this.latitude = latitude; + this.altitude = altitude; + this.course = course; + this.pitch = pitch; + this.roll = roll; + this.mesh = null; + } + }; + + class Images360 extends EventDispatcher{ + + constructor(viewer){ + super(); + + this.viewer = viewer; + + this.selectingEnabled = true; + + this.images = []; + this.node = new Object3D(); + + this.sphere = new Mesh(sgHigh, sm); + this.sphere.visible = false; + this.sphere.scale.set(1000, 1000, 1000); + this.node.add(this.sphere); + this._visible = true; + // this.node.add(label); + + this.focusedImage = null; + + let elUnfocus = document.createElement("input"); + elUnfocus.type = "button"; + elUnfocus.value = "unfocus"; + elUnfocus.style.position = "absolute"; + elUnfocus.style.right = "10px"; + elUnfocus.style.bottom = "10px"; + elUnfocus.style.zIndex = "10000"; + elUnfocus.style.fontSize = "2em"; + elUnfocus.addEventListener("click", () => this.unfocus()); + this.elUnfocus = elUnfocus; + + this.domRoot = viewer.renderer.domElement.parentElement; + this.domRoot.appendChild(elUnfocus); + this.elUnfocus.style.display = "none"; + + viewer.addEventListener("update", () => { + this.update(viewer); + }); + viewer.inputHandler.addInputListener(this); + + this.addEventListener("mousedown", () => { + if(currentlyHovered && currentlyHovered.image360){ + this.focus(currentlyHovered.image360); + } + }); + + }; + + set visible(visible){ + if(this._visible === visible){ + return; + } + + + for(const image of this.images){ + image.mesh.visible = visible && (this.focusedImage == null); + } + + this.sphere.visible = visible && (this.focusedImage != null); + this._visible = visible; + this.dispatchEvent({ + type: "visibility_changed", + images: this, + }); + } + + get visible(){ + return this._visible; + } + + focus(image360){ + if(this.focusedImage !== null){ + this.unfocus(); + } + + previousView = { + controls: this.viewer.controls, + position: this.viewer.scene.view.position.clone(), + target: viewer.scene.view.getPivot(), + }; + + this.viewer.setControls(this.viewer.orbitControls); + this.viewer.orbitControls.doubleClockZoomEnabled = false; + + for(let image of this.images){ + image.mesh.visible = false; + } + + this.selectingEnabled = false; + + this.sphere.visible = false; + + this.load(image360).then( () => { + this.sphere.visible = true; + this.sphere.material.map = image360.texture; + this.sphere.material.needsUpdate = true; + }); + + { // orientation + let {course, pitch, roll} = image360; + this.sphere.rotation.set( + MathUtils.degToRad(+roll + 90), + MathUtils.degToRad(-pitch), + MathUtils.degToRad(-course + 90), + "ZYX" + ); + } + + this.sphere.position.set(...image360.position); + + let target = new Vector3(...image360.position); + let dir = target.clone().sub(viewer.scene.view.position).normalize(); + let move = dir.multiplyScalar(0.000001); + let newCamPos = target.clone().sub(move); + + viewer.scene.view.setView( + newCamPos, + target, + 500 + ); + + this.focusedImage = image360; + + this.elUnfocus.style.display = ""; + } + + unfocus(){ + this.selectingEnabled = true; + + for(let image of this.images){ + image.mesh.visible = true; + } + + let image = this.focusedImage; + + if(image === null){ + return; + } + + + this.sphere.material.map = null; + this.sphere.material.needsUpdate = true; + this.sphere.visible = false; + + let pos = viewer.scene.view.position; + let target = viewer.scene.view.getPivot(); + let dir = target.clone().sub(pos).normalize(); + let move = dir.multiplyScalar(10); + let newCamPos = target.clone().sub(move); + + viewer.orbitControls.doubleClockZoomEnabled = true; + viewer.setControls(previousView.controls); + + viewer.scene.view.setView( + previousView.position, + previousView.target, + 500 + ); + + + this.focusedImage = null; + + this.elUnfocus.style.display = "none"; + } + + load(image360){ + + return new Promise(resolve => { + let texture = new TextureLoader().load(image360.file, resolve); + texture.wrapS = RepeatWrapping; + texture.repeat.x = -1; + + image360.texture = texture; + }); + + } + + handleHovering(){ + let mouse = viewer.inputHandler.mouse; + let camera = viewer.scene.getActiveCamera(); + let domElement = viewer.renderer.domElement; + + let ray = Potree.Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + + // let tStart = performance.now(); + raycaster.ray.copy(ray); + let intersections = raycaster.intersectObjects(this.node.children); + + if(intersections.length === 0){ + // label.visible = false; + + return; + } + + let intersection = intersections[0]; + currentlyHovered = intersection.object; + currentlyHovered.material = smHovered; + + //label.visible = true; + //label.setText(currentlyHovered.image360.file); + //currentlyHovered.getWorldPosition(label.position); + } + + update(){ + + let {viewer} = this; + + if(currentlyHovered){ + currentlyHovered.material = sm; + currentlyHovered = null; + } + + if(this.selectingEnabled){ + this.handleHovering(); + } + + } + + }; + + + class Images360Loader{ + + static async load(url, viewer, params = {}){ + + if(!params.transform){ + params.transform = { + forward: a => a, + }; + } + + let response = await fetch(`${url}/coordinates.txt`); + let text = await response.text(); + + let lines = text.split(/\r?\n/); + let coordinateLines = lines.slice(1); + + let images360 = new Images360(viewer); + + for(let line of coordinateLines){ + + if(line.trim().length === 0){ + continue; + } + + let tokens = line.split(/\t/); + + let [filename, time, long, lat, alt, course, pitch, roll] = tokens; + time = parseFloat(time); + long = parseFloat(long); + lat = parseFloat(lat); + alt = parseFloat(alt); + course = parseFloat(course); + pitch = parseFloat(pitch); + roll = parseFloat(roll); + + filename = filename.replace(/"/g, ""); + let file = `${url}/${filename}`; + + let image360 = new Image360(file, time, long, lat, alt, course, pitch, roll); + + let xy = params.transform.forward([long, lat]); + let position = [...xy, alt]; + image360.position = position; + + images360.images.push(image360); + } + + Images360Loader.createSceneNodes(images360, params.transform); + + return images360; + + } + + static createSceneNodes(images360, transform){ + + for(let image360 of images360.images){ + let {longitude, latitude, altitude} = image360; + let xy = transform.forward([longitude, latitude]); + + let mesh = new Mesh(sg, sm); + mesh.position.set(...xy, altitude); + mesh.scale.set(1, 1, 1); + mesh.material.transparent = true; + mesh.material.opacity = 0.75; + mesh.image360 = image360; + + { // orientation + var {course, pitch, roll} = image360; + mesh.rotation.set( + MathUtils.degToRad(+roll + 90), + MathUtils.degToRad(-pitch), + MathUtils.degToRad(-course + 90), + "ZYX" + ); + } + + images360.node.add(mesh); + + image360.mesh = mesh; + } + } + + + + }; + + // This is a generated file. Do not edit. + var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; + var 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]/; + var 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]/; + + var unicode = { + Space_Separator: Space_Separator, + ID_Start: ID_Start, + ID_Continue: ID_Continue + }; + + var util = { + isSpaceSeparator (c) { + return typeof c === 'string' && unicode.Space_Separator.test(c) + }, + + isIdStartChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c === '$') || (c === '_') || + unicode.ID_Start.test(c) + ) + }, + + isIdContinueChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + (c === '$') || (c === '_') || + (c === '\u200C') || (c === '\u200D') || + unicode.ID_Continue.test(c) + ) + }, + + isDigit (c) { + return typeof c === 'string' && /[0-9]/.test(c) + }, + + isHexDigit (c) { + return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) + }, + }; + + let source; + let parseState; + let stack; + let pos; + let line; + let column; + let token; + let key; + let root; + + var parse = function parse (text, reviver) { + source = String(text); + parseState = 'start'; + stack = []; + pos = 0; + line = 1; + column = 0; + token = undefined; + key = undefined; + root = undefined; + + do { + token = lex(); + + // This code is unreachable. + // if (!parseStates[parseState]) { + // throw invalidParseState() + // } + + parseStates[parseState](); + } while (token.type !== 'eof') + + if (typeof reviver === 'function') { + return internalize({'': root}, '', reviver) + } + + return root + }; + + function internalize (holder, name, reviver) { + const value = holder[name]; + if (value != null && typeof value === 'object') { + for (const key in value) { + const replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + value[key] = replacement; + } + } + } + + return reviver.call(holder, name, value) + } + + let lexState; + let buffer; + let doubleQuote; + let sign$1; + let c; + + function lex () { + lexState = 'default'; + buffer = ''; + doubleQuote = false; + sign$1 = 1; + + for (;;) { + c = peek(); + + // This code is unreachable. + // if (!lexStates[lexState]) { + // throw invalidLexState(lexState) + // } + + const token = lexStates[lexState](); + if (token) { + return token + } + } + } + + function peek () { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) + } + } + + function read () { + const c = peek(); + + if (c === '\n') { + line++; + column = 0; + } else if (c) { + column += c.length; + } else { + column++; + } + + if (c) { + pos += c.length; + } + + return c + } + + const lexStates = { + default () { + switch (c) { + case '\t': + case '\v': + case '\f': + case ' ': + case '\u00A0': + case '\uFEFF': + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + return + + case '/': + read(); + lexState = 'comment'; + return + + case undefined: + read(); + return newToken('eof') + } + + if (util.isSpaceSeparator(c)) { + read(); + return + } + + // This code is unreachable. + // if (!lexStates[parseState]) { + // throw invalidLexState(parseState) + // } + + return lexStates[parseState]() + }, + + comment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineComment'; + return + + case '/': + read(); + lexState = 'singleLineComment'; + return + } + + throw invalidChar(read()) + }, + + multiLineComment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineCommentAsterisk'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + }, + + multiLineCommentAsterisk () { + switch (c) { + case '*': + read(); + return + + case '/': + read(); + lexState = 'default'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + lexState = 'multiLineComment'; + }, + + singleLineComment () { + switch (c) { + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + lexState = 'default'; + return + + case undefined: + read(); + return newToken('eof') + } + + read(); + }, + + value () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + case 'n': + read(); + literal('ull'); + return newToken('null', null) + + case 't': + read(); + literal('rue'); + return newToken('boolean', true) + + case 'f': + read(); + literal('alse'); + return newToken('boolean', false) + + case '-': + case '+': + if (read() === '-') { + sign$1 = -1; + } + + lexState = 'sign'; + return + + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + + case '"': + case "'": + doubleQuote = (read() === '"'); + buffer = ''; + lexState = 'string'; + return + } + + throw invalidChar(read()) + }, + + identifierNameStartEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + const u = unicodeEscape(); + switch (u) { + case '$': + case '_': + break + + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + identifierName () { + switch (c) { + case '$': + case '_': + case '\u200C': + case '\u200D': + buffer += read(); + return + + case '\\': + read(); + lexState = 'identifierNameEscape'; + return + } + + if (util.isIdContinueChar(c)) { + buffer += read(); + return + } + + return newToken('identifier', buffer) + }, + + identifierNameEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + const u = unicodeEscape(); + switch (u) { + case '$': + case '_': + case '\u200C': + case '\u200D': + break + + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + sign () { + switch (c) { + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', sign$1 * Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + } + + throw invalidChar(read()) + }, + + zero () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + + case 'x': + case 'X': + buffer += read(); + lexState = 'hexadecimal'; + return + } + + return newToken('numeric', sign$1 * 0) + }, + + decimalInteger () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign$1 * Number(buffer)) + }, + + decimalPointLeading () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + throw invalidChar(read()) + }, + + decimalPoint () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + return newToken('numeric', sign$1 * Number(buffer)) + }, + + decimalFraction () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign$1 * Number(buffer)) + }, + + decimalExponent () { + switch (c) { + case '+': + case '-': + buffer += read(); + lexState = 'decimalExponentSign'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentSign () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentInteger () { + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign$1 * Number(buffer)) + }, + + hexadecimal () { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = 'hexadecimalInteger'; + return + } + + throw invalidChar(read()) + }, + + hexadecimalInteger () { + if (util.isHexDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign$1 * Number(buffer)) + }, + + string () { + switch (c) { + case '\\': + read(); + buffer += escape$1(); + return + + case '"': + if (doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case "'": + if (!doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case '\n': + case '\r': + throw invalidChar(read()) + + case '\u2028': + case '\u2029': + separatorChar(c); + break + + case undefined: + throw invalidChar(read()) + } + + buffer += read(); + }, + + start () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + // This code is unreachable since the default lexState handles eof. + // case undefined: + // return newToken('eof') + } + + lexState = 'value'; + }, + + beforePropertyName () { + switch (c) { + case '$': + case '_': + buffer = read(); + lexState = 'identifierName'; + return + + case '\\': + read(); + lexState = 'identifierNameStartEscape'; + return + + case '}': + return newToken('punctuator', read()) + + case '"': + case "'": + doubleQuote = (read() === '"'); + lexState = 'string'; + return + } + + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = 'identifierName'; + return + } + + throw invalidChar(read()) + }, + + afterPropertyName () { + if (c === ':') { + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforePropertyValue () { + lexState = 'value'; + }, + + afterPropertyValue () { + switch (c) { + case ',': + case '}': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforeArrayValue () { + if (c === ']') { + return newToken('punctuator', read()) + } + + lexState = 'value'; + }, + + afterArrayValue () { + switch (c) { + case ',': + case ']': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + end () { + // This code is unreachable since it's handled by the default lexState. + // if (c === undefined) { + // read() + // return newToken('eof') + // } + + throw invalidChar(read()) + }, + }; + + function newToken (type, value) { + return { + type, + value, + line, + column, + } + } + + function literal (s) { + for (const c of s) { + const p = peek(); + + if (p !== c) { + throw invalidChar(read()) + } + + read(); + } + } + + function escape$1 () { + const c = peek(); + switch (c) { + case 'b': + read(); + return '\b' + + case 'f': + read(); + return '\f' + + case 'n': + read(); + return '\n' + + case 'r': + read(); + return '\r' + + case 't': + read(); + return '\t' + + case 'v': + read(); + return '\v' + + case '0': + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()) + } + + return '\0' + + case 'x': + read(); + return hexEscape() + + case 'u': + read(); + return unicodeEscape() + + case '\n': + case '\u2028': + case '\u2029': + read(); + return '' + + case '\r': + read(); + if (peek() === '\n') { + read(); + } + + return '' + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + throw invalidChar(read()) + + case undefined: + throw invalidChar(read()) + } + + return read() + } + + function hexEscape () { + let buffer = ''; + let c = peek(); + + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + return String.fromCodePoint(parseInt(buffer, 16)) + } + + function unicodeEscape () { + let buffer = ''; + let count = 4; + + while (count-- > 0) { + const c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + } + + return String.fromCodePoint(parseInt(buffer, 16)) + } + + const parseStates = { + start () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforePropertyName () { + switch (token.type) { + case 'identifier': + case 'string': + key = token.value; + parseState = 'afterPropertyName'; + return + + case 'punctuator': + // This code is unreachable since it's handled by the lexState. + // if (token.value !== '}') { + // throw invalidToken() + // } + + pop(); + return + + case 'eof': + throw invalidEOF() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterPropertyName () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator' || token.value !== ':') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + parseState = 'beforePropertyValue'; + }, + + beforePropertyValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforeArrayValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + if (token.type === 'punctuator' && token.value === ']') { + pop(); + return + } + + push(); + }, + + afterPropertyValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforePropertyName'; + return + + case '}': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterArrayValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforeArrayValue'; + return + + case ']': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + end () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'eof') { + // throw invalidToken() + // } + }, + }; + + function push () { + let value; + + switch (token.type) { + case 'punctuator': + switch (token.value) { + case '{': + value = {}; + break + + case '[': + value = []; + break + } + + break + + case 'null': + case 'boolean': + case 'numeric': + case 'string': + value = token.value; + break + + // This code is unreachable. + // default: + // throw invalidToken() + } + + if (root === undefined) { + root = value; + } else { + const parent = stack[stack.length - 1]; + if (Array.isArray(parent)) { + parent.push(value); + } else { + parent[key] = value; + } + } + + if (value !== null && typeof value === 'object') { + stack.push(value); + + if (Array.isArray(value)) { + parseState = 'beforeArrayValue'; + } else { + parseState = 'beforePropertyName'; + } + } else { + const current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } + } + } + + function pop () { + stack.pop(); + + const current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } + } + + // This code is unreachable. + // function invalidParseState () { + // return new Error(`JSON5: invalid parse state '${parseState}'`) + // } + + // This code is unreachable. + // function invalidLexState (state) { + // return new Error(`JSON5: invalid lex state '${state}'`) + // } + + function invalidChar (c) { + if (c === undefined) { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + } + + return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) + } + + function invalidEOF () { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + } + + // This code is unreachable. + // function invalidToken () { + // if (token.type === 'eof') { + // return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + // } + + // const c = String.fromCodePoint(token.value.codePointAt(0)) + // return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) + // } + + function invalidIdentifier () { + column -= 5; + return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`) + } + + function separatorChar (c) { + console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`); + } + + function formatChar (c) { + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + if (replacements[c]) { + return replacements[c] + } + + if (c < ' ') { + const hexString = c.charCodeAt(0).toString(16); + return '\\x' + ('00' + hexString).substring(hexString.length) + } + + return c + } + + function syntaxError (message) { + const err = new SyntaxError(message); + err.lineNumber = line; + err.columnNumber = column; + return err + } + + var stringify = function stringify (value, replacer, space) { + const stack = []; + let indent = ''; + let propertyList; + let replacerFunc; + let gap = ''; + let quote; + + if ( + replacer != null && + typeof replacer === 'object' && + !Array.isArray(replacer) + ) { + space = replacer.space; + quote = replacer.quote; + replacer = replacer.replacer; + } + + if (typeof replacer === 'function') { + replacerFunc = replacer; + } else if (Array.isArray(replacer)) { + propertyList = []; + for (const v of replacer) { + let item; + + if (typeof v === 'string') { + item = v; + } else if ( + typeof v === 'number' || + v instanceof String || + v instanceof Number + ) { + item = String(v); + } + + if (item !== undefined && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } + } + + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); + } + + if (typeof space === 'number') { + if (space > 0) { + space = Math.min(10, Math.floor(space)); + gap = ' '.substr(0, space); + } + } else if (typeof space === 'string') { + gap = space.substr(0, 10); + } + + return serializeProperty('', {'': value}) + + function serializeProperty (key, holder) { + let value = holder[key]; + if (value != null) { + if (typeof value.toJSON5 === 'function') { + value = value.toJSON5(key); + } else if (typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + } + + if (replacerFunc) { + value = replacerFunc.call(holder, key, value); + } + + if (value instanceof Number) { + value = Number(value); + } else if (value instanceof String) { + value = String(value); + } else if (value instanceof Boolean) { + value = value.valueOf(); + } + + switch (value) { + case null: return 'null' + case true: return 'true' + case false: return 'false' + } + + if (typeof value === 'string') { + return quoteString(value, false) + } + + if (typeof value === 'number') { + return String(value) + } + + if (typeof value === 'object') { + return Array.isArray(value) ? serializeArray(value) : serializeObject(value) + } + + return undefined + } + + function quoteString (value) { + const quotes = { + "'": 0.1, + '"': 0.2, + }; + + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + let product = ''; + + for (let i = 0; i < value.length; i++) { + const c = value[i]; + switch (c) { + case "'": + case '"': + quotes[c]++; + product += c; + continue + + case '\0': + if (util.isDigit(value[i + 1])) { + product += '\\x00'; + continue + } + } + + if (replacements[c]) { + product += replacements[c]; + continue + } + + if (c < ' ') { + let hexString = c.charCodeAt(0).toString(16); + product += '\\x' + ('00' + hexString).substring(hexString.length); + continue + } + + product += c; + } + + const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b); + + product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); + + return quoteChar + product + quoteChar + } + + function serializeObject (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + let stepback = indent; + indent = indent + gap; + + let keys = propertyList || Object.keys(value); + let partial = []; + for (const key of keys) { + const propertyString = serializeProperty(key, value); + if (propertyString !== undefined) { + let member = serializeKey(key) + ':'; + if (gap !== '') { + member += ' '; + } + member += propertyString; + partial.push(member); + } + } + + let final; + if (partial.length === 0) { + final = '{}'; + } else { + let properties; + if (gap === '') { + properties = partial.join(','); + final = '{' + properties + '}'; + } else { + let separator = ',\n' + indent; + properties = partial.join(separator); + final = '{\n' + indent + properties + ',\n' + stepback + '}'; + } + } + + stack.pop(); + indent = stepback; + return final + } + + function serializeKey (key) { + if (key.length === 0) { + return quoteString(key, true) + } + + const firstChar = String.fromCodePoint(key.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key, true) + } + + for (let i = firstChar.length; i < key.length; i++) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + return quoteString(key, true) + } + } + + return key + } + + function serializeArray (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + let stepback = indent; + indent = indent + gap; + + let partial = []; + for (let i = 0; i < value.length; i++) { + const propertyString = serializeProperty(String(i), value); + partial.push((propertyString !== undefined) ? propertyString : 'null'); + } + + let final; + if (partial.length === 0) { + final = '[]'; + } else { + if (gap === '') { + let properties = partial.join(','); + final = '[' + properties + ']'; + } else { + let separator = ',\n' + indent; + let properties = partial.join(separator); + final = '[\n' + indent + properties + ',\n' + stepback + ']'; + } + } + + stack.pop(); + indent = stepback; + return final + } + }; + + const JSON5 = { + parse, + stringify, + }; + + var lib = JSON5; + + class Sidebar{ + + constructor(viewer){ + this.viewer = viewer; + + this.measuringTool = viewer.measuringTool; + this.profileTool = viewer.profileTool; + this.volumeTool = viewer.volumeTool; + + this.dom = $("#sidebar_root"); + } + + createToolIcon(icon, title, callback){ + let element = $(` + + `); + + element.click(callback); + + return element; + } + + init(){ + + this.initAccordion(); + this.initAppearance(); + this.initToolbar(); + this.initScene(); + this.initNavigation(); + this.initFilters(); + this.initClippingTool(); + this.initSettings(); + + $('#potree_version_number').html(Potree.version.major + "." + Potree.version.minor + Potree.version.suffix); + } + + + + initToolbar(){ + + // ANGLE + let elToolbar = $('#tools'); + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/angle.png', + '[title]tt.angle_measurement', + () => { + $('#menu_measurements').next().slideDown(); + let measurement = this.measuringTool.startInsertion({ + showDistances: false, + showAngles: true, + showArea: false, + closed: true, + maxMarkers: 3, + name: 'Angle'}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // POINT + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/point.svg', + '[title]tt.point_measurement', + () => { + $('#menu_measurements').next().slideDown(); + let measurement = this.measuringTool.startInsertion({ + showDistances: false, + showAngles: false, + showCoordinates: true, + showArea: false, + closed: true, + maxMarkers: 1, + name: 'Point'}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // DISTANCE + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/distance.svg', + '[title]tt.distance_measurement', + () => { + $('#menu_measurements').next().slideDown(); + let measurement = this.measuringTool.startInsertion({ + showDistances: true, + showArea: false, + closed: false, + name: 'Distance'}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // HEIGHT + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/height.svg', + '[title]tt.height_measurement', + () => { + $('#menu_measurements').next().slideDown(); + let measurement = this.measuringTool.startInsertion({ + showDistances: false, + showHeight: true, + showArea: false, + closed: false, + maxMarkers: 2, + name: 'Height'}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // CIRCLE + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/circle.svg', + '[title]tt.circle_measurement', + () => { + $('#menu_measurements').next().slideDown(); + let measurement = this.measuringTool.startInsertion({ + showDistances: false, + showHeight: false, + showArea: false, + showCircle: true, + showEdges: false, + closed: false, + maxMarkers: 3, + name: 'Circle'}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // AZIMUTH + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/azimuth.svg', + 'Azimuth', + () => { + $('#menu_measurements').next().slideDown(); + let measurement = this.measuringTool.startInsertion({ + showDistances: false, + showHeight: false, + showArea: false, + showCircle: false, + showEdges: false, + showAzimuth: true, + closed: false, + maxMarkers: 2, + name: 'Azimuth'}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // AREA + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/area.svg', + '[title]tt.area_measurement', + () => { + $('#menu_measurements').next().slideDown(); + let measurement = this.measuringTool.startInsertion({ + showDistances: true, + showArea: true, + closed: true, + name: 'Area'}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // VOLUME + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/volume.svg', + '[title]tt.volume_measurement', + () => { + let volume = this.volumeTool.startInsertion(); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === volume.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // SPHERE VOLUME + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/sphere_distances.svg', + '[title]tt.volume_measurement', + () => { + let volume = this.volumeTool.startInsertion({type: SphereVolume}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === volume.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // PROFILE + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/profile.svg', + '[title]tt.height_profile', + () => { + $('#menu_measurements').next().slideDown(); ; + let profile = this.profileTool.startInsertion(); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === profile.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // ANNOTATION + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/annotation.svg', + '[title]tt.annotation', + () => { + $('#menu_measurements').next().slideDown(); ; + let annotation = this.viewer.annotationTool.startInsertion(); + + let annotationsRoot = $("#jstree_scene").jstree().get_json("annotations"); + let jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // REMOVE ALL + elToolbar.append(this.createToolIcon( + Potree.resourcePath + '/icons/reset_tools.svg', + '[title]tt.remove_all_measurement', + () => { + this.viewer.scene.removeAllMeasurements(); + } + )); + + + { // SHOW / HIDE Measurements + let elShow = $("#measurement_options_show"); + elShow.selectgroup({title: "Show/Hide labels"}); + + elShow.find("input").click( (e) => { + const show = e.target.value === "SHOW"; + this.measuringTool.showLabels = show; + }); + + let currentShow = this.measuringTool.showLabels ? "SHOW" : "HIDE"; + elShow.find(`input[value=${currentShow}]`).trigger("click"); + } + } + + initScene(){ + + let elScene = $("#menu_scene"); + let elObjects = elScene.next().find("#scene_objects"); + let elProperties = elScene.next().find("#scene_object_properties"); + + + { + let elExport = elScene.next().find("#scene_export"); + + let geoJSONIcon = `${Potree.resourcePath}/icons/file_geojson.svg`; + let dxfIcon = `${Potree.resourcePath}/icons/file_dxf.svg`; + let potreeIcon = `${Potree.resourcePath}/icons/file_potree.svg`; + + elExport.append(` + Export:
        + + + + `); + + let elDownloadJSON = elExport.find("img[name=geojson_export_button]").parent(); + elDownloadJSON.click( (event) => { + let scene = this.viewer.scene; + let measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes]; + + if(measurements.length > 0){ + let geoJson = GeoJSONExporter.toString(measurements); + + let url = window.URL.createObjectURL(new Blob([geoJson], {type: 'data:application/octet-stream'})); + elDownloadJSON.attr('href', url); + }else { + this.viewer.postError("no measurements to export"); + event.preventDefault(); + } + }); + + let elDownloadDXF = elExport.find("img[name=dxf_export_button]").parent(); + elDownloadDXF.click( (event) => { + let scene = this.viewer.scene; + let measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes]; + + if(measurements.length > 0){ + let dxf = DXFExporter.toString(measurements); + + let url = window.URL.createObjectURL(new Blob([dxf], {type: 'data:application/octet-stream'})); + elDownloadDXF.attr('href', url); + }else { + this.viewer.postError("no measurements to export"); + event.preventDefault(); + } + }); + + let elDownloadPotree = elExport.find("img[name=potree_export_button]").parent(); + elDownloadPotree.click( (event) => { + + let data = Potree.saveProject(this.viewer); + let dataString = lib.stringify(data, null, "\t"); + + let url = window.URL.createObjectURL(new Blob([dataString], {type: 'data:application/octet-stream'})); + elDownloadPotree.attr('href', url); + }); + } + + let propertiesPanel = new PropertiesPanel(elProperties, this.viewer); + propertiesPanel.setScene(this.viewer.scene); + + localStorage.removeItem('jstree'); + + let tree = $(`
        `); + elObjects.append(tree); + + tree.jstree({ + 'plugins': ["checkbox", "state"], + 'core': { + "dblclick_toggle": false, + "state": { + "checked" : true + }, + 'check_callback': true, + "expand_selected_onload": true + }, + "checkbox" : { + "keep_selected_style": true, + "three_state": false, + "whole_node": false, + "tie_selection": false, + }, + }); + + let createNode = (parent, text, icon, object) => { + let nodeID = tree.jstree('create_node', parent, { + "text": text, + "icon": icon, + "data": object + }, + "last", false, false); + + if(object.visible){ + tree.jstree('check_node', nodeID); + }else { + tree.jstree('uncheck_node', nodeID); + } + + return nodeID; + }; + + let pcID = tree.jstree('create_node', "#", { "text": "Point Clouds", "id": "pointclouds"}, "last", false, false); + let measurementID = tree.jstree('create_node', "#", { "text": "Measurements", "id": "measurements" }, "last", false, false); + let annotationsID = tree.jstree('create_node', "#", { "text": "Annotations", "id": "annotations" }, "last", false, false); + let otherID = tree.jstree('create_node', "#", { "text": "Other", "id": "other" }, "last", false, false); + let vectorsID = tree.jstree('create_node', "#", { "text": "Vectors", "id": "vectors" }, "last", false, false); + let imagesID = tree.jstree('create_node', "#", { "text": " Images", "id": "images" }, "last", false, false); + + tree.jstree("check_node", pcID); + tree.jstree("check_node", measurementID); + tree.jstree("check_node", annotationsID); + tree.jstree("check_node", otherID); + tree.jstree("check_node", vectorsID); + tree.jstree("check_node", imagesID); + + tree.on('create_node.jstree', (e, data) => { + tree.jstree("open_all"); + }); + + tree.on("select_node.jstree", (e, data) => { + let object = data.node.data; + propertiesPanel.set(object); + + this.viewer.inputHandler.deselectAll(); + + if(object instanceof Volume){ + this.viewer.inputHandler.toggleSelection(object); + } + + $(this.viewer.renderer.domElement).focus(); + }); + + tree.on("deselect_node.jstree", (e, data) => { + propertiesPanel.set(null); + }); + + tree.on("delete_node.jstree", (e, data) => { + propertiesPanel.set(null); + }); + + tree.on('dblclick','.jstree-anchor', (e) => { + + let instance = $.jstree.reference(e.target); + let node = instance.get_node(e.target); + let object = node.data; + + // ignore double click on checkbox + if(e.target.classList.contains("jstree-checkbox")){ + return; + } + + if(object instanceof PointCloudTree){ + let box = this.viewer.getBoundingBox([object]); + let node = new Object3D(); + node.boundingBox = box; + this.viewer.zoomTo(node, 1, 500); + }else if(object instanceof Measure){ + let points = object.points.map(p => p.position); + let box = new Box3().setFromPoints(points); + if(box.getSize(new Vector3()).length() > 0){ + let node = new Object3D(); + node.boundingBox = box; + this.viewer.zoomTo(node, 2, 500); + } + }else if(object instanceof Profile){ + let points = object.points; + let box = new Box3().setFromPoints(points); + if(box.getSize(new Vector3()).length() > 0){ + let node = new Object3D(); + node.boundingBox = box; + this.viewer.zoomTo(node, 1, 500); + } + }else if(object instanceof Volume){ + + let box = object.boundingBox.clone().applyMatrix4(object.matrixWorld); + + if(box.getSize(new Vector3()).length() > 0){ + let node = new Object3D(); + node.boundingBox = box; + this.viewer.zoomTo(node, 1, 500); + } + }else if(object instanceof Annotation){ + object.moveHere(this.viewer.scene.getActiveCamera()); + }else if(object instanceof PolygonClipVolume){ + let dir = object.camera.getWorldDirection(new Vector3()); + let target; + + if(object.camera instanceof OrthographicCamera){ + dir.multiplyScalar(object.camera.right); + target = new Vector3().addVectors(object.camera.position, dir); + this.viewer.setCameraMode(CameraMode.ORTHOGRAPHIC); + }else if(object.camera instanceof PerspectiveCamera){ + dir.multiplyScalar(this.viewer.scene.view.radius); + target = new Vector3().addVectors(object.camera.position, dir); + this.viewer.setCameraMode(CameraMode.PERSPECTIVE); + } + + this.viewer.scene.view.position.copy(object.camera.position); + this.viewer.scene.view.lookAt(target); + }else if(object.type === "SpotLight"){ + let distance = (object.distance > 0) ? object.distance / 4 : 5 * 1000; + let position = object.position; + let target = new Vector3().addVectors( + position, + object.getWorldDirection(new Vector3()).multiplyScalar(distance)); + + this.viewer.scene.view.position.copy(object.position); + this.viewer.scene.view.lookAt(target); + }else if(object instanceof Object3D){ + let box = new Box3().setFromObject(object); + + if(box.getSize(new Vector3()).length() > 0){ + let node = new Object3D(); + node.boundingBox = box; + this.viewer.zoomTo(node, 1, 500); + } + }else if(object instanceof OrientedImage){ + // TODO zoom to images + + // let box = new THREE.Box3().setFromObject(object); + + // if(box.getSize(new THREE.Vector3()).length() > 0){ + // let node = new THREE.Object3D(); + // node.boundingBox = box; + // this.viewer.zoomTo(node, 1, 500); + // } + }else if(object instanceof Images360){ + // TODO + }else if(object instanceof Geopackage){ + // TODO + } + }); + + tree.on("uncheck_node.jstree", (e, data) => { + let object = data.node.data; + + if(object){ + object.visible = false; + } + }); + + tree.on("check_node.jstree", (e, data) => { + let object = data.node.data; + + if(object){ + object.visible = true; + } + }); + + + let onPointCloudAdded = (e) => { + let pointcloud = e.pointcloud; + let cloudIcon = `${Potree.resourcePath}/icons/cloud.svg`; + let node = createNode(pcID, pointcloud.name, cloudIcon, pointcloud); + + pointcloud.addEventListener("visibility_changed", () => { + if(pointcloud.visible){ + tree.jstree('check_node', node); + }else { + tree.jstree('uncheck_node', node); + } + }); + }; + + let onMeasurementAdded = (e) => { + let measurement = e.measurement; + let icon = Utils.getMeasurementIcon(measurement); + createNode(measurementID, measurement.name, icon, measurement); + }; + + let onVolumeAdded = (e) => { + let volume = e.volume; + let icon = Utils.getMeasurementIcon(volume); + let node = createNode(measurementID, volume.name, icon, volume); + + volume.addEventListener("visibility_changed", () => { + if(volume.visible){ + tree.jstree('check_node', node); + }else { + tree.jstree('uncheck_node', node); + } + }); + }; + + let onProfileAdded = (e) => { + let profile = e.profile; + let icon = Utils.getMeasurementIcon(profile); + createNode(measurementID, profile.name, icon, profile); + }; + + let onAnnotationAdded = (e) => { + let annotation = e.annotation; + + let annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`; + let parentID = this.annotationMapping.get(annotation.parent); + let annotationID = createNode(parentID, annotation.title, annotationIcon, annotation); + this.annotationMapping.set(annotation, annotationID); + + annotation.addEventListener("annotation_changed", (e) => { + let annotationsRoot = $("#jstree_scene").jstree().get_json("annotations"); + let jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid); + + $.jstree.reference(jsonNode.id).rename_node(jsonNode.id, annotation.title); + }); + }; + + let onCameraAnimationAdded = (e) => { + const animation = e.animation; + + const animationIcon = `${Potree.resourcePath}/icons/camera_animation.svg`; + createNode(otherID, "animation", animationIcon, animation); + }; + + let onOrientedImagesAdded = (e) => { + const images = e.images; + + const imagesIcon = `${Potree.resourcePath}/icons/picture.svg`; + const node = createNode(imagesID, "images", imagesIcon, images); + + images.addEventListener("visibility_changed", () => { + if(images.visible){ + tree.jstree('check_node', node); + }else { + tree.jstree('uncheck_node', node); + } + }); + }; + + let onImages360Added = (e) => { + const images = e.images; + + const imagesIcon = `${Potree.resourcePath}/icons/picture.svg`; + const node = createNode(imagesID, "360° images", imagesIcon, images); + + images.addEventListener("visibility_changed", () => { + if(images.visible){ + tree.jstree('check_node', node); + }else { + tree.jstree('uncheck_node', node); + } + }); + }; + + const onGeopackageAdded = (e) => { + const geopackage = e.geopackage; + + const geopackageIcon = `${Potree.resourcePath}/icons/triangle.svg`; + const tree = $(`#jstree_scene`); + const parentNode = "vectors"; + + for(const layer of geopackage.node.children){ + const name = layer.name; + + let shpPointsID = tree.jstree('create_node', parentNode, { + "text": name, + "icon": geopackageIcon, + "object": layer, + "data": layer, + }, + "last", false, false); + tree.jstree(layer.visible ? "check_node" : "uncheck_node", shpPointsID); + } + + }; + + this.viewer.scene.addEventListener("pointcloud_added", onPointCloudAdded); + this.viewer.scene.addEventListener("measurement_added", onMeasurementAdded); + this.viewer.scene.addEventListener("profile_added", onProfileAdded); + this.viewer.scene.addEventListener("volume_added", onVolumeAdded); + this.viewer.scene.addEventListener("camera_animation_added", onCameraAnimationAdded); + this.viewer.scene.addEventListener("oriented_images_added", onOrientedImagesAdded); + this.viewer.scene.addEventListener("360_images_added", onImages360Added); + this.viewer.scene.addEventListener("geopackage_added", onGeopackageAdded); + this.viewer.scene.addEventListener("polygon_clip_volume_added", onVolumeAdded); + this.viewer.scene.annotations.addEventListener("annotation_added", onAnnotationAdded); + + let onMeasurementRemoved = (e) => { + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.measurement.uuid); + + tree.jstree("delete_node", jsonNode.id); + }; + + let onVolumeRemoved = (e) => { + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid); + + tree.jstree("delete_node", jsonNode.id); + }; + + let onPolygonClipVolumeRemoved = (e) => { + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid); + + tree.jstree("delete_node", jsonNode.id); + }; + + let onProfileRemoved = (e) => { + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.profile.uuid); + + tree.jstree("delete_node", jsonNode.id); + }; + + this.viewer.scene.addEventListener("measurement_removed", onMeasurementRemoved); + this.viewer.scene.addEventListener("volume_removed", onVolumeRemoved); + this.viewer.scene.addEventListener("polygon_clip_volume_removed", onPolygonClipVolumeRemoved); + this.viewer.scene.addEventListener("profile_removed", onProfileRemoved); + + { + let annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`; + this.annotationMapping = new Map(); + this.annotationMapping.set(this.viewer.scene.annotations, annotationsID); + this.viewer.scene.annotations.traverseDescendants(annotation => { + let parentID = this.annotationMapping.get(annotation.parent); + let annotationID = createNode(parentID, annotation.title, annotationIcon, annotation); + this.annotationMapping.set(annotation, annotationID); + }); + } + + const scene = this.viewer.scene; + for(let pointcloud of scene.pointclouds){ + onPointCloudAdded({pointcloud: pointcloud}); + } + + for(let measurement of scene.measurements){ + onMeasurementAdded({measurement: measurement}); + } + + for(let volume of [...scene.volumes, ...scene.polygonClipVolumes]){ + onVolumeAdded({volume: volume}); + } + + for(let animation of scene.cameraAnimations){ + onCameraAnimationAdded({animation: animation}); + } + + for(let images of scene.orientedImages){ + onOrientedImagesAdded({images: images}); + } + + for(let images of scene.images360){ + onImages360Added({images: images}); + } + + for(const geopackage of scene.geopackages){ + onGeopackageAdded({geopackage: geopackage}); + } + + for(let profile of scene.profiles){ + onProfileAdded({profile: profile}); + } + + { + createNode(otherID, "Camera", null, new Camera()); + } + + this.viewer.addEventListener("scene_changed", (e) => { + propertiesPanel.setScene(e.scene); + + e.oldScene.removeEventListener("pointcloud_added", onPointCloudAdded); + e.oldScene.removeEventListener("measurement_added", onMeasurementAdded); + e.oldScene.removeEventListener("profile_added", onProfileAdded); + e.oldScene.removeEventListener("volume_added", onVolumeAdded); + e.oldScene.removeEventListener("polygon_clip_volume_added", onVolumeAdded); + e.oldScene.removeEventListener("measurement_removed", onMeasurementRemoved); + + e.scene.addEventListener("pointcloud_added", onPointCloudAdded); + e.scene.addEventListener("measurement_added", onMeasurementAdded); + e.scene.addEventListener("profile_added", onProfileAdded); + e.scene.addEventListener("volume_added", onVolumeAdded); + e.scene.addEventListener("polygon_clip_volume_added", onVolumeAdded); + e.scene.addEventListener("measurement_removed", onMeasurementRemoved); + }); + + } + + initClippingTool(){ + + + this.viewer.addEventListener("cliptask_changed", (event) => { + console.log("TODO"); + }); + + this.viewer.addEventListener("clipmethod_changed", (event) => { + console.log("TODO"); + }); + + { + let elClipTask = $("#cliptask_options"); + elClipTask.selectgroup({title: "Clip Task"}); + + elClipTask.find("input").click( (e) => { + this.viewer.setClipTask(ClipTask[e.target.value]); + }); + + let currentClipTask = Object.keys(ClipTask) + .filter(key => ClipTask[key] === this.viewer.clipTask); + elClipTask.find(`input[value=${currentClipTask}]`).trigger("click"); + } + + { + let elClipMethod = $("#clipmethod_options"); + elClipMethod.selectgroup({title: "Clip Method"}); + + elClipMethod.find("input").click( (e) => { + this.viewer.setClipMethod(ClipMethod[e.target.value]); + }); + + let currentClipMethod = Object.keys(ClipMethod) + .filter(key => ClipMethod[key] === this.viewer.clipMethod); + elClipMethod.find(`input[value=${currentClipMethod}]`).trigger("click"); + } + + let clippingToolBar = $("#clipping_tools"); + + // CLIP VOLUME + clippingToolBar.append(this.createToolIcon( + Potree.resourcePath + '/icons/clip_volume.svg', + '[title]tt.clip_volume', + () => { + let item = this.volumeTool.startInsertion({clip: true}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + // CLIP POLYGON + clippingToolBar.append(this.createToolIcon( + Potree.resourcePath + "/icons/clip-polygon.svg", + "[title]tt.clip_polygon", + () => { + let item = this.viewer.clippingTool.startInsertion({type: "polygon"}); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + + {// SCREEN BOX SELECT + let boxSelectTool = new ScreenBoxSelectTool(this.viewer); + + clippingToolBar.append(this.createToolIcon( + Potree.resourcePath + "/icons/clip-screen.svg", + "[title]tt.screen_clip_box", + () => { + if(!(this.viewer.scene.getActiveCamera() instanceof OrthographicCamera)){ + this.viewer.postMessage(`Switch to Orthographic Camera Mode before using the Screen-Box-Select tool.`, + {duration: 2000}); + return; + } + + let item = boxSelectTool.startInsertion(); + + let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); + let jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid); + $.jstree.reference(jsonNode.id).deselect_all(); + $.jstree.reference(jsonNode.id).select_node(jsonNode.id); + } + )); + } + + { // REMOVE CLIPPING TOOLS + clippingToolBar.append(this.createToolIcon( + Potree.resourcePath + "/icons/remove.svg", + "[title]tt.remove_all_clipping_volumes", + () => { + + this.viewer.scene.removeAllClipVolumes(); + } + )); + } + + } + + initFilters(){ + this.initClassificationList(); + this.initReturnFilters(); + this.initGPSTimeFilters(); + this.initPointSourceIDFilters(); + + } + + initReturnFilters(){ + let elReturnFilterPanel = $('#return_filter_panel'); + + { // RETURN NUMBER + let sldReturnNumber = elReturnFilterPanel.find('#sldReturnNumber'); + let lblReturnNumber = elReturnFilterPanel.find('#lblReturnNumber'); + + sldReturnNumber.slider({ + range: true, + min: 0, max: 7, step: 1, + values: [0, 7], + slide: (event, ui) => { + this.viewer.setFilterReturnNumberRange(ui.values[0], ui.values[1]); + } + }); + + let onReturnNumberChanged = (event) => { + let [from, to] = this.viewer.filterReturnNumberRange; + + lblReturnNumber[0].innerHTML = `${from} to ${to}`; + sldReturnNumber.slider({values: [from, to]}); + }; + + this.viewer.addEventListener('filter_return_number_range_changed', onReturnNumberChanged); + + onReturnNumberChanged(); + } + + { // NUMBER OF RETURNS + let sldNumberOfReturns = elReturnFilterPanel.find('#sldNumberOfReturns'); + let lblNumberOfReturns = elReturnFilterPanel.find('#lblNumberOfReturns'); + + sldNumberOfReturns.slider({ + range: true, + min: 0, max: 7, step: 1, + values: [0, 7], + slide: (event, ui) => { + this.viewer.setFilterNumberOfReturnsRange(ui.values[0], ui.values[1]); + } + }); + + let onNumberOfReturnsChanged = (event) => { + let [from, to] = this.viewer.filterNumberOfReturnsRange; + + lblNumberOfReturns[0].innerHTML = `${from} to ${to}`; + sldNumberOfReturns.slider({values: [from, to]}); + }; + + this.viewer.addEventListener('filter_number_of_returns_range_changed', onNumberOfReturnsChanged); + + onNumberOfReturnsChanged(); + } + } + + initGPSTimeFilters(){ + + let elGPSTimeFilterPanel = $('#gpstime_filter_panel'); + + { + let slider = new HierarchicalSlider({ + levels: 4, + slide: (event) => { + this.viewer.setFilterGPSTimeRange(...event.values); + }, + }); + + let initialized = false; + + let initialize = () => { + + let elRangeContainer = $("#gpstime_multilevel_range_container"); + elRangeContainer[0].prepend(slider.element); + + let extent = this.viewer.getGpsTimeExtent(); + + slider.setRange(extent); + slider.setValues(extent); + + + initialized = true; + }; + + this.viewer.addEventListener("update", (e) => { + let extent = this.viewer.getGpsTimeExtent(); + let gpsTimeAvailable = extent[0] !== Infinity; + + if(!initialized && gpsTimeAvailable){ + initialize(); + } + + slider.setRange(extent); + }); + } + + + { + + const txtGpsTime = elGPSTimeFilterPanel.find("#txtGpsTime"); + const btnFindGpsTime = elGPSTimeFilterPanel.find("#btnFindGpsTime"); + + let targetTime = null; + + txtGpsTime.on("input", (e) => { + const str = txtGpsTime.val(); + + if(!isNaN(str)){ + const value = parseFloat(str); + targetTime = value; + + txtGpsTime.css("background-color", ""); + }else { + targetTime = null; + + txtGpsTime.css("background-color", "#ff9999"); + } + + }); + + btnFindGpsTime.click( () => { + + if(targetTime !== null){ + viewer.moveToGpsTimeVicinity(targetTime); + } + }); + } + + } + + initPointSourceIDFilters() { + let elPointSourceIDFilterPanel = $('#pointsourceid_filter_panel'); + + { + let slider = new HierarchicalSlider({ + levels: 4, + range: [0, 65535], + precision: 1, + slide: (event) => { + let values = event.values; + this.viewer.setFilterPointSourceIDRange(values[0], values[1]); + } + }); + + let initialized = false; + + let initialize = () => { + elPointSourceIDFilterPanel[0].prepend(slider.element); + + initialized = true; + }; + + this.viewer.addEventListener("update", (e) => { + let extent = this.viewer.filterPointSourceIDRange; + + if(!initialized){ + initialize(); + + slider.setValues(extent); + } + + }); + } + + // let lblPointSourceID = elPointSourceIDFilterPanel.find("#lblPointSourceID"); + // let elPointSourceID = elPointSourceIDFilterPanel.find("#spnPointSourceID"); + + // let slider = new ZoomableSlider(); + // elPointSourceID[0].appendChild(slider.element); + // slider.update(); + + // slider.change( () => { + // let range = slider.chosenRange; + // this.viewer.setFilterPointSourceIDRange(range[0], range[1]); + // }); + + // let onPointSourceIDExtentChanged = (event) => { + // let range = this.viewer.filterPointSourceIDExtent; + // slider.setVisibleRange(range); + // }; + + // let onPointSourceIDChanged = (event) => { + // let range = this.viewer.filterPointSourceIDRange; + + // let precision = 1; + // let from = `${Utils.addCommas(range[0].toFixed(precision))}`; + // let to = `${Utils.addCommas(range[1].toFixed(precision))}`; + // lblPointSourceID[0].innerHTML = `${from} to ${to}`; + + // slider.setRange(range); + // }; + + // this.viewer.addEventListener('filter_point_source_id_range_changed', onPointSourceIDChanged); + // this.viewer.addEventListener('filter_point_source_id_extent_changed', onPointSourceIDExtentChanged); + + } + + initClassificationList(){ + let elClassificationList = $('#classificationList'); + + let addClassificationItem = (code, name) => { + const classification = this.viewer.classifications[code]; + const inputID = 'chkClassification_' + code; + const colorPickerID = 'colorPickerClassification_' + code; + + const checked = classification.visible ? "checked" : ""; + + let element = $(` +
      • + +
      • + `); + + const elInput = element.find('input'); + const elColorPicker = element.find(`#${colorPickerID}`); + + elInput.click(event => { + this.viewer.setClassificationVisibility(code, event.target.checked); + }); + + let defaultColor = classification.color.map(c => c * 255).join(", "); + defaultColor = `rgb(${defaultColor})`; + + + elColorPicker.spectrum({ + // flat: true, + color: defaultColor, + showInput: true, + preferredFormat: 'rgb', + cancelText: '', + chooseText: 'Apply', + move: color => { + let rgb = color.toRgb(); + const c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1]; + classification.color = c; + }, + change: color => { + let rgb = color.toRgb(); + const c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1]; + classification.color = c; + } + }); + + elClassificationList.append(element); + }; + + const addToggleAllButton = () => { // toggle all button + const element = $(` +
      • + +
      • + `); + + let elInput = element.find('input'); + + elInput.click(event => { + this.viewer.toggleAllClassificationsVisibility(); + }); + + elClassificationList.append(element); + }; + + const addInvertButton = () => { + const element = $(` +
      • + +
      • + `); + + let elInput = element.find('input'); + + elInput.click( () => { + const classifications = this.viewer.classifications; + + for(let key of Object.keys(classifications)){ + let value = classifications[key]; + this.viewer.setClassificationVisibility(key, !value.visible); + } + }); + + elClassificationList.append(element); + }; + + const populate = () => { + addToggleAllButton(); + for (let classID in this.viewer.classifications) { + addClassificationItem(classID, this.viewer.classifications[classID].name); + } + addInvertButton(); + }; + + populate(); + + this.viewer.addEventListener("classifications_changed", () => { + elClassificationList.empty(); + populate(); + }); + + this.viewer.addEventListener("classification_visibility_changed", () => { + + { // set checked state of classification buttons + for(const classID of Object.keys(this.viewer.classifications)){ + const classValue = this.viewer.classifications[classID]; + + let elItem = elClassificationList.find(`#chkClassification_${classID}`); + elItem.prop("checked", classValue.visible); + } + } + + { // set checked state of toggle button based on state of all other buttons + let numVisible = 0; + let numItems = 0; + for(const key of Object.keys(this.viewer.classifications)){ + if(this.viewer.classifications[key].visible){ + numVisible++; + } + numItems++; + } + const allVisible = numVisible === numItems; + + let elToggle = elClassificationList.find("#toggleClassificationFilters"); + elToggle.prop("checked", allVisible); + } + }); + } + + initAccordion(){ + $('.accordion > h3').each(function(){ + let header = $(this); + let content = $(this).next(); + + //header.addClass('accordion-header ui-widget'); + //content.addClass('accordion-content ui-widget'); + + content.hide(); + + header.click(() => { + content.slideToggle(); + }); + }); + + let languages = [ + ["EN", "en"], + ["FR", "fr"], + ["DE", "de"], + ["JP", "jp"], + ["ES", "es"], + ["SE", "se"], + ["ZH", "zh"], + ["IT", "it"] + ]; + + let elLanguages = $('#potree_languages'); + for(let i = 0; i < languages.length; i++){ + let [key, value] = languages[i]; + let element = $(`${key}`); + element.click(() => this.viewer.setLanguage(value)); + + if(i === 0){ + element.css("margin-left", "30px"); + } + + elLanguages.append(element); + + if(i < languages.length - 1){ + elLanguages.append($(document.createTextNode(' - '))); + } + } + + + // to close all, call + // $(".accordion > div").hide() + + // to open the, for example, tool menu, call: + // $("#menu_tools").next().show() + } + + initAppearance(){ + + const sldPointBudget = this.dom.find('#sldPointBudget'); + + sldPointBudget.slider({ + value: this.viewer.getPointBudget(), + min: 100 * 1000, + max: 10 * 1000 * 1000, + step: 1000, + slide: (event, ui) => { this.viewer.setPointBudget(ui.value); } + }); + + this.dom.find('#sldFOV').slider({ + value: this.viewer.getFOV(), + min: 20, + max: 100, + step: 1, + slide: (event, ui) => { this.viewer.setFOV(ui.value); } + }); + + $('#sldEDLRadius').slider({ + value: this.viewer.getEDLRadius(), + min: 1, + max: 4, + step: 0.01, + slide: (event, ui) => { this.viewer.setEDLRadius(ui.value); } + }); + + $('#sldEDLStrength').slider({ + value: this.viewer.getEDLStrength(), + min: 0, + max: 5, + step: 0.01, + slide: (event, ui) => { this.viewer.setEDLStrength(ui.value); } + }); + + $('#sldEDLOpacity').slider({ + value: this.viewer.getEDLOpacity(), + min: 0, + max: 1, + step: 0.01, + slide: (event, ui) => { this.viewer.setEDLOpacity(ui.value); } + }); + + this.viewer.addEventListener('point_budget_changed', (event) => { + $('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget()); + sldPointBudget.slider({value: this.viewer.getPointBudget()}); + }); + + this.viewer.addEventListener('fov_changed', (event) => { + $('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV()); + $('#sldFOV').slider({value: this.viewer.getFOV()}); + }); + + this.viewer.addEventListener('use_edl_changed', (event) => { + $('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled(); + }); + + this.viewer.addEventListener('edl_radius_changed', (event) => { + $('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1); + $('#sldEDLRadius').slider({value: this.viewer.getEDLRadius()}); + }); + + this.viewer.addEventListener('edl_strength_changed', (event) => { + $('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1); + $('#sldEDLStrength').slider({value: this.viewer.getEDLStrength()}); + }); + + this.viewer.addEventListener('background_changed', (event) => { + $("input[name=background][value='" + this.viewer.getBackground() + "']").prop('checked', true); + }); + + $('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget()); + $('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV()); + $('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1); + $('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1); + $('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled(); + + { + let elBackground = $(`#background_options`); + elBackground.selectgroup(); + + elBackground.find("input").click( (e) => { + this.viewer.setBackground(e.target.value); + }); + + let currentBackground = this.viewer.getBackground(); + $(`input[name=background_options][value=${currentBackground}]`).trigger("click"); + } + + $('#chkEDLEnabled').click( () => { + this.viewer.setEDLEnabled($('#chkEDLEnabled').prop("checked")); + }); + } + + initNavigation(){ + let elNavigation = $('#navigation'); + let sldMoveSpeed = $('#sldMoveSpeed'); + let lblMoveSpeed = $('#lblMoveSpeed'); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + '/icons/earth_controls_1.png', + '[title]tt.earth_control', + () => { this.viewer.setControls(this.viewer.earthControls); } + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + '/icons/fps_controls.svg', + '[title]tt.flight_control', + () => { + this.viewer.setControls(this.viewer.fpControls); + this.viewer.fpControls.lockElevation = false; + } + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + '/icons/helicopter_controls.svg', + '[title]tt.heli_control', + () => { + this.viewer.setControls(this.viewer.fpControls); + this.viewer.fpControls.lockElevation = true; + } + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + '/icons/orbit_controls.svg', + '[title]tt.orbit_control', + () => { this.viewer.setControls(this.viewer.orbitControls); } + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + '/icons/focus.svg', + '[title]tt.focus_control', + () => { this.viewer.fitToScreen(); } + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/navigation_cube.svg", + "[title]tt.navigation_cube_control", + () => {this.viewer.toggleNavigationCube();} + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/images/compas.svg", + "[title]tt.compass", + () => { + const visible = !this.viewer.compass.isVisible(); + this.viewer.compass.setVisible(visible); + } + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/camera_animation.svg", + "[title]tt.camera_animation", + () => { + const animation = CameraAnimation.defaultFromView(this.viewer); + + viewer.scene.addCameraAnimation(animation); + } + )); + + + elNavigation.append("
        "); + + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/left.svg", + "[title]tt.left_view_control", + () => {this.viewer.setLeftView();} + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/right.svg", + "[title]tt.right_view_control", + () => {this.viewer.setRightView();} + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/front.svg", + "[title]tt.front_view_control", + () => {this.viewer.setFrontView();} + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/back.svg", + "[title]tt.back_view_control", + () => {this.viewer.setBackView();} + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/top.svg", + "[title]tt.top_view_control", + () => {this.viewer.setTopView();} + )); + + elNavigation.append(this.createToolIcon( + Potree.resourcePath + "/icons/bottom.svg", + "[title]tt.bottom_view_control", + () => {this.viewer.setBottomView();} + )); + + + + + + let elCameraProjection = $(` + + + + + `); + elNavigation.append(elCameraProjection); + elCameraProjection.selectgroup({title: "Camera Projection"}); + elCameraProjection.find("input").click( (e) => { + this.viewer.setCameraMode(CameraMode[e.target.value]); + }); + let cameraMode = Object.keys(CameraMode) + .filter(key => CameraMode[key] === this.viewer.scene.cameraMode); + elCameraProjection.find(`input[value=${cameraMode}]`).trigger("click"); + + let speedRange = new Vector2(1, 10 * 1000); + + let toLinearSpeed = (value) => { + return Math.pow(value, 4) * speedRange.y + speedRange.x; + }; + + let toExpSpeed = (value) => { + return Math.pow((value - speedRange.x) / speedRange.y, 1 / 4); + }; + + sldMoveSpeed.slider({ + value: toExpSpeed(this.viewer.getMoveSpeed()), + min: 0, + max: 1, + step: 0.01, + slide: (event, ui) => { this.viewer.setMoveSpeed(toLinearSpeed(ui.value)); } + }); + + this.viewer.addEventListener('move_speed_changed', (event) => { + lblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1)); + sldMoveSpeed.slider({value: toExpSpeed(this.viewer.getMoveSpeed())}); + }); + + lblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1)); + } + + + initSettings(){ + + { + $('#sldMinNodeSize').slider({ + value: this.viewer.getMinNodeSize(), + min: 0, + max: 1000, + step: 0.01, + slide: (event, ui) => { this.viewer.setMinNodeSize(ui.value); } + }); + + this.viewer.addEventListener('minnodesize_changed', (event) => { + $('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize())); + $('#sldMinNodeSize').slider({value: this.viewer.getMinNodeSize()}); + }); + $('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize())); + } + + { + let elSplatQuality = $("#splat_quality_options"); + elSplatQuality.selectgroup({title: "Splat Quality"}); + + elSplatQuality.find("input").click( (e) => { + if(e.target.value === "standard"){ + this.viewer.useHQ = false; + }else if(e.target.value === "hq"){ + this.viewer.useHQ = true; + } + }); + + let currentQuality = this.viewer.useHQ ? "hq" : "standard"; + elSplatQuality.find(`input[value=${currentQuality}]`).trigger("click"); + } + + $('#show_bounding_box').click(() => { + this.viewer.setShowBoundingBox($('#show_bounding_box').prop("checked")); + }); + + $('#set_freeze').click(() => { + this.viewer.setFreeze($('#set_freeze').prop("checked")); + }); + } + + } + + class AnnotationTool extends EventDispatcher{ + constructor (viewer) { + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.sg = new SphereGeometry(0.1); + this.sm = new MeshNormalMaterial(); + this.s = new Mesh(this.sg, this.sm); + } + + startInsertion (args = {}) { + let domElement = this.viewer.renderer.domElement; + + let annotation = new Annotation({ + position: [589748.270, 231444.540, 753.675], + title: "Annotation Title", + description: `Annotation Description` + }); + this.dispatchEvent({type: 'start_inserting_annotation', annotation: annotation}); + + const annotations = this.viewer.scene.annotations; + annotations.add(annotation); + + let callbacks = { + cancel: null, + finish: null, + }; + + let insertionCallback = (e) => { + if (e.button === MOUSE.LEFT) { + callbacks.finish(); + } else if (e.button === MOUSE.RIGHT) { + callbacks.cancel(); + } + }; + + callbacks.cancel = e => { + annotations.remove(annotation); + + domElement.removeEventListener('mouseup', insertionCallback, true); + }; + + callbacks.finish = e => { + domElement.removeEventListener('mouseup', insertionCallback, true); + }; + + domElement.addEventListener('mouseup', insertionCallback, true); + + let drag = (e) => { + let I = Utils.getMousePointCloudIntersection( + e.drag.end, + e.viewer.scene.getActiveCamera(), + e.viewer, + e.viewer.scene.pointclouds, + {pickClipped: true}); + + if (I) { + this.s.position.copy(I.location); + + annotation.position.copy(I.location); + } + }; + + let drop = (e) => { + viewer.scene.scene.remove(this.s); + this.s.removeEventListener("drag", drag); + this.s.removeEventListener("drop", drop); + }; + + this.s.addEventListener('drag', drag); + this.s.addEventListener('drop', drop); + + this.viewer.scene.scene.add(this.s); + this.viewer.inputHandler.startDragging(this.s); + + return annotation; + } + + update(){ + // let camera = this.viewer.scene.getActiveCamera(); + // let domElement = this.renderer.domElement; + // let measurements = this.viewer.scene.measurements; + + // const renderAreaSize = this.renderer.getSize(new THREE.Vector2()); + // let clientWidth = renderAreaSize.width; + // let clientHeight = renderAreaSize.height; + + } + + render(){ + //this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); + } + }; + + /** + * @author mschuetz / http://mschuetz.at + * + * + */ + + class InputHandler extends EventDispatcher { + constructor (viewer) { + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + this.domElement = this.renderer.domElement; + this.enabled = true; + + this.scene = null; + this.interactiveScenes = []; + this.interactiveObjects = new Set(); + this.inputListeners = []; + this.blacklist = new Set(); + + this.drag = null; + this.mouse = new Vector2(0, 0); + + this.selection = []; + + this.hoveredElements = []; + this.pressedKeys = {}; + + this.wheelDelta = 0; + + this.speed = 1; + + this.logMessages = false; + + if (this.domElement.tabIndex === -1) { + this.domElement.tabIndex = 2222; + } + + this.domElement.addEventListener('contextmenu', (event) => { event.preventDefault(); }, false); + this.domElement.addEventListener('click', this.onMouseClick.bind(this), false); + this.domElement.addEventListener('mousedown', this.onMouseDown.bind(this), false); + this.domElement.addEventListener('mouseup', this.onMouseUp.bind(this), false); + this.domElement.addEventListener('mousemove', this.onMouseMove.bind(this), false); + this.domElement.addEventListener('mousewheel', this.onMouseWheel.bind(this), false); + this.domElement.addEventListener('DOMMouseScroll', this.onMouseWheel.bind(this), false); // Firefox + this.domElement.addEventListener('dblclick', this.onDoubleClick.bind(this)); + this.domElement.addEventListener('keydown', this.onKeyDown.bind(this)); + this.domElement.addEventListener('keyup', this.onKeyUp.bind(this)); + this.domElement.addEventListener('touchstart', this.onTouchStart.bind(this)); + this.domElement.addEventListener('touchend', this.onTouchEnd.bind(this)); + this.domElement.addEventListener('touchmove', this.onTouchMove.bind(this)); + } + + addInputListener (listener) { + this.inputListeners.push(listener); + } + + removeInputListener (listener) { + this.inputListeners = this.inputListeners.filter(e => e !== listener); + } + + getSortedListeners(){ + return this.inputListeners.sort( (a, b) => { + let ia = (a.importance !== undefined) ? a.importance : 0; + let ib = (b.importance !== undefined) ? b.importance : 0; + + return ib - ia; + }); + } + + onTouchStart (e) { + if (this.logMessages) console.log(this.constructor.name + ': onTouchStart'); + + e.preventDefault(); + + if (e.touches.length === 1) { + let rect = this.domElement.getBoundingClientRect(); + let x = e.touches[0].pageX - rect.left; + let y = e.touches[0].pageY - rect.top; + this.mouse.set(x, y); + + this.startDragging(null); + } + + + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: e.type, + touches: e.touches, + changedTouches: e.changedTouches + }); + } + } + + onTouchEnd (e) { + if (this.logMessages) console.log(this.constructor.name + ': onTouchEnd'); + + e.preventDefault(); + + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'drop', + drag: this.drag, + viewer: this.viewer + }); + } + + this.drag = null; + + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: e.type, + touches: e.touches, + changedTouches: e.changedTouches + }); + } + } + + onTouchMove (e) { + if (this.logMessages) console.log(this.constructor.name + ': onTouchMove'); + + e.preventDefault(); + + if (e.touches.length === 1) { + let rect = this.domElement.getBoundingClientRect(); + let x = e.touches[0].pageX - rect.left; + let y = e.touches[0].pageY - rect.top; + this.mouse.set(x, y); + + if (this.drag) { + this.drag.mouse = 1; + + this.drag.lastDrag.x = x - this.drag.end.x; + this.drag.lastDrag.y = y - this.drag.end.y; + + this.drag.end.set(x, y); + + if (this.logMessages) console.log(this.constructor.name + ': drag: '); + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'drag', + drag: this.drag, + viewer: this.viewer + }); + } + } + } + + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: e.type, + touches: e.touches, + changedTouches: e.changedTouches + }); + } + + // DEBUG CODE + // let debugTouches = [...e.touches, { + // pageX: this.domElement.clientWidth / 2, + // pageY: this.domElement.clientHeight / 2}]; + // for(let inputListener of this.getSortedListeners()){ + // inputListener.dispatchEvent({ + // type: e.type, + // touches: debugTouches, + // changedTouches: e.changedTouches + // }); + // } + } + + onKeyDown (e) { + if (this.logMessages) console.log(this.constructor.name + ': onKeyDown'); + + // DELETE + if (e.keyCode === KeyCodes.DELETE && this.selection.length > 0) { + this.dispatchEvent({ + type: 'delete', + selection: this.selection + }); + + this.deselectAll(); + } + + this.dispatchEvent({ + type: 'keydown', + keyCode: e.keyCode, + event: e + }); + + // for(let l of this.getSortedListeners()){ + // l.dispatchEvent({ + // type: "keydown", + // keyCode: e.keyCode, + // event: e + // }); + // } + + this.pressedKeys[e.keyCode] = true; + + // e.preventDefault(); + } + + onKeyUp (e) { + if (this.logMessages) console.log(this.constructor.name + ': onKeyUp'); + + delete this.pressedKeys[e.keyCode]; + + e.preventDefault(); + } + + onDoubleClick (e) { + if (this.logMessages) console.log(this.constructor.name + ': onDoubleClick'); + + let consumed = false; + for (let hovered of this.hoveredElements) { + if (hovered._listeners && hovered._listeners['dblclick']) { + hovered.object.dispatchEvent({ + type: 'dblclick', + mouse: this.mouse, + object: hovered.object + }); + consumed = true; + break; + } + } + + if (!consumed) { + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'dblclick', + mouse: this.mouse, + object: null + }); + } + } + + e.preventDefault(); + } + + onMouseClick (e) { + if (this.logMessages) console.log(this.constructor.name + ': onMouseClick'); + + e.preventDefault(); + } + + onMouseDown (e) { + if (this.logMessages) console.log(this.constructor.name + ': onMouseDown'); + + e.preventDefault(); + + let consumed = false; + let consume = () => { return consumed = true; }; + if (this.hoveredElements.length === 0) { + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'mousedown', + viewer: this.viewer, + mouse: this.mouse + }); + } + }else { + for(let hovered of this.hoveredElements){ + let object = hovered.object; + object.dispatchEvent({ + type: 'mousedown', + viewer: this.viewer, + consume: consume + }); + + if(consumed){ + break; + } + } + } + + if (!this.drag) { + let target = this.hoveredElements + .find(el => ( + el.object._listeners && + el.object._listeners['drag'] && + el.object._listeners['drag'].length > 0)); + + if (target) { + this.startDragging(target.object, {location: target.point}); + } else { + this.startDragging(null); + } + } + + if (this.scene) { + this.viewStart = this.scene.view.clone(); + } + } + + onMouseUp (e) { + if (this.logMessages) console.log(this.constructor.name + ': onMouseUp'); + + e.preventDefault(); + + let noMovement = this.getNormalizedDrag().length() === 0; + + + let consumed = false; + let consume = () => { return consumed = true; }; + if (this.hoveredElements.length === 0) { + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'mouseup', + viewer: this.viewer, + mouse: this.mouse, + consume: consume + }); + + if(consumed){ + break; + } + } + }else { + let hovered = this.hoveredElements + .map(e => e.object) + .find(e => (e._listeners && e._listeners['mouseup'])); + if(hovered){ + hovered.dispatchEvent({ + type: 'mouseup', + viewer: this.viewer, + consume: consume + }); + } + } + + if (this.drag) { + if (this.drag.object) { + if (this.logMessages) console.log(`${this.constructor.name}: drop ${this.drag.object.name}`); + this.drag.object.dispatchEvent({ + type: 'drop', + drag: this.drag, + viewer: this.viewer + + }); + } else { + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'drop', + drag: this.drag, + viewer: this.viewer + }); + } + } + + // check for a click + let clicked = this.hoveredElements.map(h => h.object).find(v => v === this.drag.object) !== undefined; + if(clicked){ + if (this.logMessages) console.log(`${this.constructor.name}: click ${this.drag.object.name}`); + this.drag.object.dispatchEvent({ + type: 'click', + viewer: this.viewer, + consume: consume, + }); + } + + this.drag = null; + } + + if(!consumed){ + if (e.button === MOUSE.LEFT) { + if (noMovement) { + let selectable = this.hoveredElements + .find(el => el.object._listeners && el.object._listeners['select']); + + if (selectable) { + selectable = selectable.object; + + if (this.isSelected(selectable)) { + this.selection + .filter(e => e !== selectable) + .forEach(e => this.toggleSelection(e)); + } else { + this.deselectAll(); + this.toggleSelection(selectable); + } + } else { + this.deselectAll(); + } + } + } else if ((e.button === MOUSE.RIGHT) && noMovement) { + this.deselectAll(); + } + } + } + + onMouseMove (e) { + e.preventDefault(); + + let rect = this.domElement.getBoundingClientRect(); + let x = e.clientX - rect.left; + let y = e.clientY - rect.top; + this.mouse.set(x, y); + + let hoveredElements = this.getHoveredElements(); + if(hoveredElements.length > 0){ + let names = hoveredElements.map(h => h.object.name).join(", "); + if (this.logMessages) console.log(`${this.constructor.name}: onMouseMove; hovered: '${names}'`); + } + + if (this.drag) { + this.drag.mouse = e.buttons; + + this.drag.lastDrag.x = x - this.drag.end.x; + this.drag.lastDrag.y = y - this.drag.end.y; + + this.drag.end.set(x, y); + + if (this.drag.object) { + if (this.logMessages) console.log(this.constructor.name + ': drag: ' + this.drag.object.name); + this.drag.object.dispatchEvent({ + type: 'drag', + drag: this.drag, + viewer: this.viewer + }); + } else { + if (this.logMessages) console.log(this.constructor.name + ': drag: '); + + let dragConsumed = false; + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'drag', + drag: this.drag, + viewer: this.viewer, + consume: () => {dragConsumed = true;} + }); + + if(dragConsumed){ + break; + } + } + } + }else { + let curr = hoveredElements.map(a => a.object).find(a => true); + let prev = this.hoveredElements.map(a => a.object).find(a => true); + + if(curr !== prev){ + if(curr){ + if (this.logMessages) console.log(`${this.constructor.name}: mouseover: ${curr.name}`); + curr.dispatchEvent({ + type: 'mouseover', + object: curr, + }); + } + if(prev){ + if (this.logMessages) console.log(`${this.constructor.name}: mouseleave: ${prev.name}`); + prev.dispatchEvent({ + type: 'mouseleave', + object: prev, + }); + } + } + + if(hoveredElements.length > 0){ + let object = hoveredElements + .map(e => e.object) + .find(e => (e._listeners && e._listeners['mousemove'])); + + if(object){ + object.dispatchEvent({ + type: 'mousemove', + object: object + }); + } + } + + } + + // for (let inputListener of this.getSortedListeners()) { + // inputListener.dispatchEvent({ + // type: 'mousemove', + // object: null + // }); + // } + + + this.hoveredElements = hoveredElements; + } + + onMouseWheel(e){ + if(!this.enabled) return; + + if(this.logMessages) console.log(this.constructor.name + ": onMouseWheel"); + + e.preventDefault(); + + let delta = 0; + if (e.wheelDelta !== undefined) { // WebKit / Opera / Explorer 9 + delta = e.wheelDelta; + } else if (e.detail !== undefined) { // Firefox + delta = -e.detail; + } + + let ndelta = Math.sign(delta); + + // this.wheelDelta += Math.sign(delta); + + if (this.hoveredElement) { + this.hoveredElement.object.dispatchEvent({ + type: 'mousewheel', + delta: ndelta, + object: this.hoveredElement.object + }); + } else { + for (let inputListener of this.getSortedListeners()) { + inputListener.dispatchEvent({ + type: 'mousewheel', + delta: ndelta, + object: null + }); + } + } + } + + startDragging (object, args = null) { + + let name = object ? object.name : "no name"; + if (this.logMessages) console.log(`${this.constructor.name}: startDragging: '${name}'`); + + this.drag = { + start: this.mouse.clone(), + end: this.mouse.clone(), + lastDrag: new Vector2(0, 0), + startView: this.scene.view.clone(), + object: object + }; + + if (args) { + for (let key of Object.keys(args)) { + this.drag[key] = args[key]; + } + } + } + + getMousePointCloudIntersection (mouse) { + return Utils.getMousePointCloudIntersection( + this.mouse, + this.scene.getActiveCamera(), + this.viewer, + this.scene.pointclouds); + } + + toggleSelection (object) { + let oldSelection = this.selection; + + let index = this.selection.indexOf(object); + + if (index === -1) { + this.selection.push(object); + object.dispatchEvent({ + type: 'select' + }); + } else { + this.selection.splice(index, 1); + object.dispatchEvent({ + type: 'deselect' + }); + } + + this.dispatchEvent({ + type: 'selection_changed', + oldSelection: oldSelection, + selection: this.selection + }); + } + + deselect(object){ + + let oldSelection = this.selection; + + let index = this.selection.indexOf(object); + + if(index >= 0){ + this.selection.splice(index, 1); + object.dispatchEvent({ + type: 'deselect' + }); + + this.dispatchEvent({ + type: 'selection_changed', + oldSelection: oldSelection, + selection: this.selection + }); + } + } + + deselectAll () { + for (let object of this.selection) { + object.dispatchEvent({ + type: 'deselect' + }); + } + + let oldSelection = this.selection; + + if (this.selection.length > 0) { + this.selection = []; + this.dispatchEvent({ + type: 'selection_changed', + oldSelection: oldSelection, + selection: this.selection + }); + } + } + + isSelected (object) { + let index = this.selection.indexOf(object); + + return index !== -1; + } + + registerInteractiveObject(object){ + this.interactiveObjects.add(object); + } + + removeInteractiveObject(object){ + this.interactiveObjects.delete(object); + } + + registerInteractiveScene (scene) { + let index = this.interactiveScenes.indexOf(scene); + if (index === -1) { + this.interactiveScenes.push(scene); + } + } + + unregisterInteractiveScene (scene) { + let index = this.interactiveScenes.indexOf(scene); + if (index > -1) { + this.interactiveScenes.splice(index, 1); + } + } + + getHoveredElement () { + let hoveredElements = this.getHoveredElements(); + if (hoveredElements.length > 0) { + return hoveredElements[0]; + } else { + return null; + } + } + + getHoveredElements () { + let scenes = this.interactiveScenes.concat(this.scene.scene); + + let interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect']; + let interactables = []; + for (let scene of scenes) { + scene.traverseVisible(node => { + if (node._listeners && node.visible && !this.blacklist.has(node)) { + let hasInteractableListener = interactableListeners.filter((e) => { + return node._listeners[e] !== undefined; + }).length > 0; + + if (hasInteractableListener) { + interactables.push(node); + } + } + }); + } + + let camera = this.scene.getActiveCamera(); + let ray = Utils.mouseToRay(this.mouse, camera, this.domElement.clientWidth, this.domElement.clientHeight); + + let raycaster = new Raycaster(); + raycaster.ray.set(ray.origin, ray.direction); + raycaster.params.Line.threshold = 0.2; + + let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), false); + + return intersections; + } + + setScene (scene) { + this.deselectAll(); + + this.scene = scene; + } + + update (delta) { + + } + + getNormalizedDrag () { + if (!this.drag) { + return new Vector2(0, 0); + } + + let diff = new Vector2().subVectors(this.drag.end, this.drag.start); + + diff.x = diff.x / this.domElement.clientWidth; + diff.y = diff.y / this.domElement.clientHeight; + + return diff; + } + + getNormalizedLastDrag () { + if (!this.drag) { + return new Vector2(0, 0); + } + + let lastDrag = this.drag.lastDrag.clone(); + + lastDrag.x = lastDrag.x / this.domElement.clientWidth; + lastDrag.y = lastDrag.y / this.domElement.clientHeight; + + return lastDrag; + } + } + + class NavigationCube extends Object3D { + + constructor(viewer){ + super(); + + this.viewer = viewer; + + let createPlaneMaterial = (img) => { + let material = new MeshBasicMaterial( { + depthTest: true, + depthWrite: true, + side: DoubleSide + }); + new TextureLoader().load( + exports.resourcePath + '/textures/navigation/' + img, + function(texture) { + texture.anisotropy = viewer.renderer.capabilities.getMaxAnisotropy(); + material.map = texture; + material.needsUpdate = true; + }); + return material; + }; + + let planeGeometry = new PlaneGeometry(1, 1); + + this.front = new Mesh(planeGeometry, createPlaneMaterial('F.png')); + this.front.position.y = -0.5; + this.front.rotation.x = Math.PI / 2.0; + this.front.updateMatrixWorld(); + this.front.name = "F"; + this.add(this.front); + + this.back = new Mesh(planeGeometry, createPlaneMaterial('B.png')); + this.back.position.y = 0.5; + this.back.rotation.x = Math.PI / 2.0; + this.back.updateMatrixWorld(); + this.back.name = "B"; + this.add(this.back); + + this.left = new Mesh(planeGeometry, createPlaneMaterial('L.png')); + this.left.position.x = -0.5; + this.left.rotation.y = Math.PI / 2.0; + this.left.updateMatrixWorld(); + this.left.name = "L"; + this.add(this.left); + + this.right = new Mesh(planeGeometry, createPlaneMaterial('R.png')); + this.right.position.x = 0.5; + this.right.rotation.y = Math.PI / 2.0; + this.right.updateMatrixWorld(); + this.right.name = "R"; + this.add(this.right); + + this.bottom = new Mesh(planeGeometry, createPlaneMaterial('D.png')); + this.bottom.position.z = -0.5; + this.bottom.updateMatrixWorld(); + this.bottom.name = "D"; + this.add(this.bottom); + + this.top = new Mesh(planeGeometry, createPlaneMaterial('U.png')); + this.top.position.z = 0.5; + this.top.updateMatrixWorld(); + this.top.name = "U"; + this.add(this.top); + + this.width = 150; // in px + + this.camera = new OrthographicCamera(-1, 1, 1, -1, -1, 1); + this.camera.position.copy(new Vector3(0, 0, 0)); + this.camera.lookAt(new Vector3(0, 1, 0)); + this.camera.updateMatrixWorld(); + this.camera.rotation.order = "ZXY"; + + let onMouseDown = (event) => { + if (!this.visible) { + return; + } + + this.pickedFace = null; + let mouse = new Vector2(); + mouse.x = event.clientX - (window.innerWidth - this.width); + mouse.y = event.clientY; + + if(mouse.x < 0 || mouse.y > this.width) return; + + mouse.x = (mouse.x / this.width) * 2 - 1; + mouse.y = -(mouse.y / this.width) * 2 + 1; + + let raycaster = new Raycaster(); + raycaster.setFromCamera(mouse, this.camera); + raycaster.ray.origin.sub(this.camera.getWorldDirection(new Vector3())); + + let intersects = raycaster.intersectObjects(this.children); + + let minDistance = 1000; + for (let i = 0; i < intersects.length; i++) { + if(intersects[i].distance < minDistance) { + this.pickedFace = intersects[i].object.name; + minDistance = intersects[i].distance; + } + } + + if(this.pickedFace) { + this.viewer.setView(this.pickedFace); + } + }; + + this.viewer.renderer.domElement.addEventListener('mousedown', onMouseDown, false); + } + + update(rotation) { + this.camera.rotation.copy(rotation); + this.camera.updateMatrixWorld(); + } + + } + + /** + * @author mschuetz / http://mschuetz.at + * + * adapted from THREE.OrbitControls by + * + * @author qiao / https://github.com/qiao + * @author mrdoob / http://mrdoob.com + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author erich666 / http://erichaines.com + * + * + * + */ + + + class OrbitControls extends EventDispatcher{ + + constructor(viewer){ + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.scene = null; + this.sceneControls = new Scene(); + + this.rotationSpeed = 5; + + this.fadeFactor = 20; + this.yawDelta = 0; + this.pitchDelta = 0; + this.panDelta = new Vector2(0, 0); + this.radiusDelta = 0; + + this.doubleClockZoomEnabled = true; + + this.tweens = []; + + let drag = (e) => { + if (e.drag.object !== null) { + return; + } + + if (e.drag.startHandled === undefined) { + e.drag.startHandled = true; + + this.dispatchEvent({type: 'start'}); + } + + let ndrag = { + x: e.drag.lastDrag.x / this.renderer.domElement.clientWidth, + y: e.drag.lastDrag.y / this.renderer.domElement.clientHeight + }; + + if (e.drag.mouse === MOUSE$1.LEFT) { + this.yawDelta += ndrag.x * this.rotationSpeed; + this.pitchDelta += ndrag.y * this.rotationSpeed; + + this.stopTweens(); + } else if (e.drag.mouse === MOUSE$1.RIGHT) { + this.panDelta.x += ndrag.x; + this.panDelta.y += ndrag.y; + + this.stopTweens(); + } + }; + + let drop = e => { + this.dispatchEvent({type: 'end'}); + }; + + let scroll = (e) => { + let resolvedRadius = this.scene.view.radius + this.radiusDelta; + + this.radiusDelta += -e.delta * resolvedRadius * 0.1; + + this.stopTweens(); + }; + + let dblclick = (e) => { + if(this.doubleClockZoomEnabled){ + this.zoomToLocation(e.mouse); + } + }; + + let previousTouch = null; + let touchStart = e => { + previousTouch = e; + }; + + let touchEnd = e => { + previousTouch = e; + }; + + let touchMove = e => { + if (e.touches.length === 2 && previousTouch.touches.length === 2){ + let prev = previousTouch; + let curr = e; + + let prevDX = prev.touches[0].pageX - prev.touches[1].pageX; + let prevDY = prev.touches[0].pageY - prev.touches[1].pageY; + let prevDist = Math.sqrt(prevDX * prevDX + prevDY * prevDY); + + let currDX = curr.touches[0].pageX - curr.touches[1].pageX; + let currDY = curr.touches[0].pageY - curr.touches[1].pageY; + let currDist = Math.sqrt(currDX * currDX + currDY * currDY); + + let delta = currDist / prevDist; + let resolvedRadius = this.scene.view.radius + this.radiusDelta; + let newRadius = resolvedRadius / delta; + this.radiusDelta = newRadius - resolvedRadius; + + this.stopTweens(); + }else if(e.touches.length === 3 && previousTouch.touches.length === 3){ + let prev = previousTouch; + let curr = e; + + let prevMeanX = (prev.touches[0].pageX + prev.touches[1].pageX + prev.touches[2].pageX) / 3; + let prevMeanY = (prev.touches[0].pageY + prev.touches[1].pageY + prev.touches[2].pageY) / 3; + + let currMeanX = (curr.touches[0].pageX + curr.touches[1].pageX + curr.touches[2].pageX) / 3; + let currMeanY = (curr.touches[0].pageY + curr.touches[1].pageY + curr.touches[2].pageY) / 3; + + let delta = { + x: (currMeanX - prevMeanX) / this.renderer.domElement.clientWidth, + y: (currMeanY - prevMeanY) / this.renderer.domElement.clientHeight + }; + + this.panDelta.x += delta.x; + this.panDelta.y += delta.y; + + this.stopTweens(); + } + + previousTouch = e; + }; + + this.addEventListener('touchstart', touchStart); + this.addEventListener('touchend', touchEnd); + this.addEventListener('touchmove', touchMove); + this.addEventListener('drag', drag); + this.addEventListener('drop', drop); + this.addEventListener('mousewheel', scroll); + this.addEventListener('dblclick', dblclick); + } + + setScene (scene) { + this.scene = scene; + } + + stop(){ + this.yawDelta = 0; + this.pitchDelta = 0; + this.radiusDelta = 0; + this.panDelta.set(0, 0); + } + + zoomToLocation(mouse){ + let camera = this.scene.getActiveCamera(); + + let I = Utils.getMousePointCloudIntersection( + mouse, + camera, + this.viewer, + this.scene.pointclouds, + {pickClipped: true}); + + if (I === null) { + return; + } + + let targetRadius = 0; + { + let minimumJumpDistance = 0.2; + + let domElement = this.renderer.domElement; + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + + let nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray); + let lastNode = nodes[nodes.length - 1]; + let radius = lastNode.getBoundingSphere(new Sphere()).radius; + targetRadius = Math.min(this.scene.view.radius, radius); + targetRadius = Math.max(minimumJumpDistance, targetRadius); + } + + let d = this.scene.view.direction.multiplyScalar(-1); + let cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius)); + // TODO Unused: let controlsTargetPosition = I.location; + + let animationDuration = 600; + let easing = TWEEN.Easing.Quartic.Out; + + { // animate + let value = {x: 0}; + let tween = new TWEEN.Tween(value).to({x: 1}, animationDuration); + tween.easing(easing); + this.tweens.push(tween); + + let startPos = this.scene.view.position.clone(); + let targetPos = cameraTargetPosition.clone(); + let startRadius = this.scene.view.radius; + let targetRadius = cameraTargetPosition.distanceTo(I.location); + + tween.onUpdate(() => { + let t = value.x; + this.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x; + this.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y; + this.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z; + + this.scene.view.radius = (1 - t) * startRadius + t * targetRadius; + this.viewer.setMoveSpeed(this.scene.view.radius); + }); + + tween.onComplete(() => { + this.tweens = this.tweens.filter(e => e !== tween); + }); + + tween.start(); + } + } + + stopTweens () { + this.tweens.forEach(e => e.stop()); + this.tweens = []; + } + + update (delta) { + let view = this.scene.view; + + { // apply rotation + let progression = Math.min(1, this.fadeFactor * delta); + + let yaw = view.yaw; + let pitch = view.pitch; + let pivot = view.getPivot(); + + yaw -= progression * this.yawDelta; + pitch -= progression * this.pitchDelta; + + view.yaw = yaw; + view.pitch = pitch; + + let V = this.scene.view.direction.multiplyScalar(-view.radius); + let position = new Vector3().addVectors(pivot, V); + + view.position.copy(position); + } + + { // apply pan + let progression = Math.min(1, this.fadeFactor * delta); + let panDistance = progression * view.radius * 3; + + let px = -this.panDelta.x * panDistance; + let py = this.panDelta.y * panDistance; + + view.pan(px, py); + } + + { // apply zoom + let progression = Math.min(1, this.fadeFactor * delta); + + // let radius = view.radius + progression * this.radiusDelta * view.radius * 0.1; + let radius = view.radius + progression * this.radiusDelta; + + let V = view.direction.multiplyScalar(-radius); + let position = new Vector3().addVectors(view.getPivot(), V); + view.radius = radius; + + view.position.copy(position); + } + + { + let speed = view.radius; + this.viewer.setMoveSpeed(speed); + } + + { // decelerate over time + let progression = Math.min(1, this.fadeFactor * delta); + let attenuation = Math.max(0, 1 - this.fadeFactor * delta); + + this.yawDelta *= attenuation; + this.pitchDelta *= attenuation; + this.panDelta.multiplyScalar(attenuation); + // this.radiusDelta *= attenuation; + this.radiusDelta -= progression * this.radiusDelta; + } + } + }; + + /** + * @author mschuetz / http://mschuetz.at + * + * adapted from THREE.OrbitControls by + * + * @author qiao / https://github.com/qiao + * @author mrdoob / http://mrdoob.com + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author erich666 / http://erichaines.com + * + * + * + */ + + + class FirstPersonControls extends EventDispatcher { + constructor (viewer) { + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.scene = null; + this.sceneControls = new Scene(); + + this.rotationSpeed = 200; + this.moveSpeed = 10; + this.lockElevation = false; + + this.keys = { + FORWARD: ['W'.charCodeAt(0), 38], + BACKWARD: ['S'.charCodeAt(0), 40], + LEFT: ['A'.charCodeAt(0), 37], + RIGHT: ['D'.charCodeAt(0), 39], + UP: ['R'.charCodeAt(0), 33], + DOWN: ['F'.charCodeAt(0), 34] + }; + + this.fadeFactor = 50; + this.yawDelta = 0; + this.pitchDelta = 0; + this.translationDelta = new Vector3(0, 0, 0); + this.translationWorldDelta = new Vector3(0, 0, 0); + + this.tweens = []; + + let drag = (e) => { + if (e.drag.object !== null) { + return; + } + + if (e.drag.startHandled === undefined) { + e.drag.startHandled = true; + + this.dispatchEvent({type: 'start'}); + } + + let moveSpeed = this.viewer.getMoveSpeed(); + + let ndrag = { + x: e.drag.lastDrag.x / this.renderer.domElement.clientWidth, + y: e.drag.lastDrag.y / this.renderer.domElement.clientHeight + }; + + if (e.drag.mouse === MOUSE$1.LEFT) { + this.yawDelta += ndrag.x * this.rotationSpeed; + this.pitchDelta += ndrag.y * this.rotationSpeed; + } else if (e.drag.mouse === MOUSE$1.RIGHT) { + this.translationDelta.x -= ndrag.x * moveSpeed * 100; + this.translationDelta.z += ndrag.y * moveSpeed * 100; + } + }; + + let drop = e => { + this.dispatchEvent({type: 'end'}); + }; + + let scroll = (e) => { + let speed = this.viewer.getMoveSpeed(); + + if (e.delta < 0) { + speed = speed * 0.9; + } else if (e.delta > 0) { + speed = speed / 0.9; + } + + speed = Math.max(speed, 0.1); + + this.viewer.setMoveSpeed(speed); + }; + + let dblclick = (e) => { + this.zoomToLocation(e.mouse); + }; + + this.addEventListener('drag', drag); + this.addEventListener('drop', drop); + this.addEventListener('mousewheel', scroll); + this.addEventListener('dblclick', dblclick); + } + + setScene (scene) { + this.scene = scene; + } + + stop(){ + this.yawDelta = 0; + this.pitchDelta = 0; + this.translationDelta.set(0, 0, 0); + } + + zoomToLocation(mouse){ + let camera = this.scene.getActiveCamera(); + + let I = Utils.getMousePointCloudIntersection( + mouse, + camera, + this.viewer, + this.scene.pointclouds); + + if (I === null) { + return; + } + + let targetRadius = 0; + { + let minimumJumpDistance = 0.2; + + let domElement = this.renderer.domElement; + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + + let nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray); + let lastNode = nodes[nodes.length - 1]; + let radius = lastNode.getBoundingSphere(new Sphere()).radius; + targetRadius = Math.min(this.scene.view.radius, radius); + targetRadius = Math.max(minimumJumpDistance, targetRadius); + } + + let d = this.scene.view.direction.multiplyScalar(-1); + let cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius)); + // TODO Unused: let controlsTargetPosition = I.location; + + let animationDuration = 600; + let easing = TWEEN.Easing.Quartic.Out; + + { // animate + let value = {x: 0}; + let tween = new TWEEN.Tween(value).to({x: 1}, animationDuration); + tween.easing(easing); + this.tweens.push(tween); + + let startPos = this.scene.view.position.clone(); + let targetPos = cameraTargetPosition.clone(); + let startRadius = this.scene.view.radius; + let targetRadius = cameraTargetPosition.distanceTo(I.location); + + tween.onUpdate(() => { + let t = value.x; + this.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x; + this.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y; + this.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z; + + this.scene.view.radius = (1 - t) * startRadius + t * targetRadius; + this.viewer.setMoveSpeed(this.scene.view.radius / 2.5); + }); + + tween.onComplete(() => { + this.tweens = this.tweens.filter(e => e !== tween); + }); + + tween.start(); + } + } + + update (delta) { + let view = this.scene.view; + + { // cancel move animations on user input + let changes = [ this.yawDelta, + this.pitchDelta, + this.translationDelta.length(), + this.translationWorldDelta.length() ]; + let changeHappens = changes.some(e => Math.abs(e) > 0.001); + if (changeHappens && this.tweens.length > 0) { + this.tweens.forEach(e => e.stop()); + this.tweens = []; + } + } + + { // accelerate while input is given + let ih = this.viewer.inputHandler; + + let moveForward = this.keys.FORWARD.some(e => ih.pressedKeys[e]); + let moveBackward = this.keys.BACKWARD.some(e => ih.pressedKeys[e]); + let moveLeft = this.keys.LEFT.some(e => ih.pressedKeys[e]); + let moveRight = this.keys.RIGHT.some(e => ih.pressedKeys[e]); + let moveUp = this.keys.UP.some(e => ih.pressedKeys[e]); + let moveDown = this.keys.DOWN.some(e => ih.pressedKeys[e]); + + if(this.lockElevation){ + let dir = view.direction; + dir.z = 0; + dir.normalize(); + + if (moveForward && moveBackward) { + this.translationWorldDelta.set(0, 0, 0); + } else if (moveForward) { + this.translationWorldDelta.copy(dir.multiplyScalar(this.viewer.getMoveSpeed())); + } else if (moveBackward) { + this.translationWorldDelta.copy(dir.multiplyScalar(-this.viewer.getMoveSpeed())); + } + }else { + if (moveForward && moveBackward) { + this.translationDelta.y = 0; + } else if (moveForward) { + this.translationDelta.y = this.viewer.getMoveSpeed(); + } else if (moveBackward) { + this.translationDelta.y = -this.viewer.getMoveSpeed(); + } + } + + if (moveLeft && moveRight) { + this.translationDelta.x = 0; + } else if (moveLeft) { + this.translationDelta.x = -this.viewer.getMoveSpeed(); + } else if (moveRight) { + this.translationDelta.x = this.viewer.getMoveSpeed(); + } + + if (moveUp && moveDown) { + this.translationWorldDelta.z = 0; + } else if (moveUp) { + this.translationWorldDelta.z = this.viewer.getMoveSpeed(); + } else if (moveDown) { + this.translationWorldDelta.z = -this.viewer.getMoveSpeed(); + } + } + + { // apply rotation + let yaw = view.yaw; + let pitch = view.pitch; + + yaw -= this.yawDelta * delta; + pitch -= this.pitchDelta * delta; + + view.yaw = yaw; + view.pitch = pitch; + } + + { // apply translation + view.translate( + this.translationDelta.x * delta, + this.translationDelta.y * delta, + this.translationDelta.z * delta + ); + + view.translateWorld( + this.translationWorldDelta.x * delta, + this.translationWorldDelta.y * delta, + this.translationWorldDelta.z * delta + ); + } + + { // set view target according to speed + view.radius = 3 * this.viewer.getMoveSpeed(); + } + + { // decelerate over time + let attenuation = Math.max(0, 1 - this.fadeFactor * delta); + this.yawDelta *= attenuation; + this.pitchDelta *= attenuation; + this.translationDelta.multiplyScalar(attenuation); + this.translationWorldDelta.multiplyScalar(attenuation); + } + } + }; + + class EarthControls extends EventDispatcher { + constructor (viewer) { + super(viewer); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.scene = null; + this.sceneControls = new Scene(); + + this.rotationSpeed = 10; + + this.fadeFactor = 20; + this.wheelDelta = 0; + this.zoomDelta = new Vector3(); + this.camStart = null; + + this.tweens = []; + + { + let sg = new SphereGeometry(1, 16, 16); + let sm = new MeshNormalMaterial(); + this.pivotIndicator = new Mesh(sg, sm); + this.pivotIndicator.visible = false; + this.sceneControls.add(this.pivotIndicator); + } + + let drag = (e) => { + if (e.drag.object !== null) { + return; + } + + if (!this.pivot) { + return; + } + + if (e.drag.startHandled === undefined) { + e.drag.startHandled = true; + + this.dispatchEvent({type: 'start'}); + } + + let camStart = this.camStart; + let camera = this.scene.getActiveCamera(); + let view = this.viewer.scene.view; + + // let camera = this.viewer.scene.camera; + let mouse = e.drag.end; + let domElement = this.viewer.renderer.domElement; + + if (e.drag.mouse === MOUSE$1.LEFT) { + + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + let plane = new Plane().setFromNormalAndCoplanarPoint( + new Vector3(0, 0, 1), + this.pivot); + + let distanceToPlane = ray.distanceToPlane(plane); + + if (distanceToPlane > 0) { + let I = new Vector3().addVectors( + camStart.position, + ray.direction.clone().multiplyScalar(distanceToPlane)); + + let movedBy = new Vector3().subVectors( + I, this.pivot); + + let newCamPos = camStart.position.clone().sub(movedBy); + + view.position.copy(newCamPos); + + { + let distance = newCamPos.distanceTo(this.pivot); + view.radius = distance; + let speed = view.radius / 2.5; + this.viewer.setMoveSpeed(speed); + } + } + } else if (e.drag.mouse === MOUSE$1.RIGHT) { + let ndrag = { + x: e.drag.lastDrag.x / this.renderer.domElement.clientWidth, + y: e.drag.lastDrag.y / this.renderer.domElement.clientHeight + }; + + let yawDelta = -ndrag.x * this.rotationSpeed * 0.5; + let pitchDelta = -ndrag.y * this.rotationSpeed * 0.2; + + let originalPitch = view.pitch; + let tmpView = view.clone(); + tmpView.pitch = tmpView.pitch + pitchDelta; + pitchDelta = tmpView.pitch - originalPitch; + + let pivotToCam = new Vector3().subVectors(view.position, this.pivot); + let pivotToCamTarget = new Vector3().subVectors(view.getPivot(), this.pivot); + let side = view.getSide(); + + pivotToCam.applyAxisAngle(side, pitchDelta); + pivotToCamTarget.applyAxisAngle(side, pitchDelta); + + pivotToCam.applyAxisAngle(new Vector3(0, 0, 1), yawDelta); + pivotToCamTarget.applyAxisAngle(new Vector3(0, 0, 1), yawDelta); + + let newCam = new Vector3().addVectors(this.pivot, pivotToCam); + // TODO: Unused: let newCamTarget = new THREE.Vector3().addVectors(this.pivot, pivotToCamTarget); + + view.position.copy(newCam); + view.yaw += yawDelta; + view.pitch += pitchDelta; + } + }; + + let onMouseDown = e => { + let I = Utils.getMousePointCloudIntersection( + e.mouse, + this.scene.getActiveCamera(), + this.viewer, + this.scene.pointclouds, + {pickClipped: false}); + + if (I) { + this.pivot = I.location; + this.camStart = this.scene.getActiveCamera().clone(); + this.pivotIndicator.visible = true; + this.pivotIndicator.position.copy(I.location); + } + }; + + let drop = e => { + this.dispatchEvent({type: 'end'}); + }; + + let onMouseUp = e => { + this.camStart = null; + this.pivot = null; + this.pivotIndicator.visible = false; + }; + + let scroll = (e) => { + this.wheelDelta += e.delta; + }; + + let dblclick = (e) => { + this.zoomToLocation(e.mouse); + }; + + this.addEventListener('drag', drag); + this.addEventListener('drop', drop); + this.addEventListener('mousewheel', scroll); + this.addEventListener('mousedown', onMouseDown); + this.addEventListener('mouseup', onMouseUp); + this.addEventListener('dblclick', dblclick); + } + + setScene (scene) { + this.scene = scene; + } + + stop(){ + this.wheelDelta = 0; + this.zoomDelta.set(0, 0, 0); + } + + zoomToLocation(mouse){ + let camera = this.scene.getActiveCamera(); + + let I = Utils.getMousePointCloudIntersection( + mouse, + camera, + this.viewer, + this.scene.pointclouds); + + if (I === null) { + return; + } + + let targetRadius = 0; + { + let minimumJumpDistance = 0.2; + + let domElement = this.renderer.domElement; + let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); + + let nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray); + let lastNode = nodes[nodes.length - 1]; + let radius = lastNode.getBoundingSphere(new Sphere()).radius; + targetRadius = Math.min(this.scene.view.radius, radius); + targetRadius = Math.max(minimumJumpDistance, targetRadius); + } + + let d = this.scene.view.direction.multiplyScalar(-1); + let cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius)); + // TODO Unused: let controlsTargetPosition = I.location; + + let animationDuration = 600; + let easing = TWEEN.Easing.Quartic.Out; + + { // animate + let value = {x: 0}; + let tween = new TWEEN.Tween(value).to({x: 1}, animationDuration); + tween.easing(easing); + this.tweens.push(tween); + + let startPos = this.scene.view.position.clone(); + let targetPos = cameraTargetPosition.clone(); + let startRadius = this.scene.view.radius; + let targetRadius = cameraTargetPosition.distanceTo(I.location); + + tween.onUpdate(() => { + let t = value.x; + this.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x; + this.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y; + this.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z; + + this.scene.view.radius = (1 - t) * startRadius + t * targetRadius; + this.viewer.setMoveSpeed(this.scene.view.radius / 2.5); + }); + + tween.onComplete(() => { + this.tweens = this.tweens.filter(e => e !== tween); + }); + + tween.start(); + } + } + + update (delta) { + let view = this.scene.view; + let fade = Math.pow(0.5, this.fadeFactor * delta); + let progression = 1 - fade; + let camera = this.scene.getActiveCamera(); + + // compute zoom + if (this.wheelDelta !== 0) { + let I = Utils.getMousePointCloudIntersection( + this.viewer.inputHandler.mouse, + this.scene.getActiveCamera(), + this.viewer, + this.scene.pointclouds); + + if (I) { + let resolvedPos = new Vector3().addVectors(view.position, this.zoomDelta); + let distance = I.location.distanceTo(resolvedPos); + let jumpDistance = distance * 0.2 * this.wheelDelta; + let targetDir = new Vector3().subVectors(I.location, view.position); + targetDir.normalize(); + + resolvedPos.add(targetDir.multiplyScalar(jumpDistance)); + this.zoomDelta.subVectors(resolvedPos, view.position); + + { + let distance = resolvedPos.distanceTo(I.location); + view.radius = distance; + let speed = view.radius / 2.5; + this.viewer.setMoveSpeed(speed); + } + } + } + + // apply zoom + if (this.zoomDelta.length() !== 0) { + let p = this.zoomDelta.clone().multiplyScalar(progression); + + let newPos = new Vector3().addVectors(view.position, p); + view.position.copy(newPos); + } + + if (this.pivotIndicator.visible) { + let distance = this.pivotIndicator.position.distanceTo(view.position); + let pixelwidth = this.renderer.domElement.clientwidth; + let pixelHeight = this.renderer.domElement.clientHeight; + let pr = Utils.projectedRadius(1, camera, distance, pixelwidth, pixelHeight); + let scale = (10 / pr); + this.pivotIndicator.scale.set(scale, scale, scale); + } + + // decelerate over time + { + this.zoomDelta.multiplyScalar(fade); + this.wheelDelta = 0; + } + } + }; + + /** + * @author chrisl / Geodan + * + * adapted from Potree.FirstPersonControls by + * + * @author mschuetz / http://mschuetz.at + * + * and THREE.DeviceOrientationControls by + * + * @author richt / http://richt.me + * @author WestLangley / http://github.com/WestLangley + * + * + * + */ + + class DeviceOrientationControls extends EventDispatcher{ + constructor(viewer){ + super(); + + this.viewer = viewer; + this.renderer = viewer.renderer; + + this.scene = null; + this.sceneControls = new Scene(); + + this.screenOrientation = window.orientation || 0; + + let deviceOrientationChange = e => { + this.deviceOrientation = e; + }; + + let screenOrientationChange = e => { + this.screenOrientation = window.orientation || 0; + }; + + if ('ondeviceorientationabsolute' in window) { + window.addEventListener('deviceorientationabsolute', deviceOrientationChange); + } else if ('ondeviceorientation' in window) { + window.addEventListener('deviceorientation', deviceOrientationChange); + } else { + console.warn("No device orientation found."); + } + // window.addEventListener('deviceorientation', deviceOrientationChange); + window.addEventListener('orientationchange', screenOrientationChange); + } + + setScene (scene) { + this.scene = scene; + } + + update (delta) { + let computeQuaternion = function (alpha, beta, gamma, orient) { + let quaternion = new Quaternion(); + + let zee = new Vector3(0, 0, 1); + let euler = new Euler(); + let q0 = new Quaternion(); + + euler.set(beta, gamma, alpha, 'ZXY'); + quaternion.setFromEuler(euler); + quaternion.multiply(q0.setFromAxisAngle(zee, -orient)); + + return quaternion; + }; + + if (typeof this.deviceOrientation !== 'undefined') { + let alpha = this.deviceOrientation.alpha ? MathUtils.degToRad(this.deviceOrientation.alpha) : 0; + let beta = this.deviceOrientation.beta ? MathUtils.degToRad(this.deviceOrientation.beta) : 0; + let gamma = this.deviceOrientation.gamma ? MathUtils.degToRad(this.deviceOrientation.gamma) : 0; + let orient = this.screenOrientation ? MathUtils.degToRad(this.screenOrientation) : 0; + + let quaternion = computeQuaternion(alpha, beta, gamma, orient); + viewer.scene.cameraP.quaternion.set(quaternion.x, quaternion.y, quaternion.z, quaternion.w); + } + } + }; + + var GLTFLoader = ( function () { + + function GLTFLoader( manager ) { + + Loader.call( this, manager ); + + this.dracoLoader = null; + this.ddsLoader = null; + this.ktx2Loader = null; + this.meshoptDecoder = null; + + this.pluginCallbacks = []; + + this.register( function ( parser ) { + + return new GLTFMaterialsClearcoatExtension( parser ); + + } ); + + this.register( function ( parser ) { + + return new GLTFTextureBasisUExtension( parser ); + + } ); + + this.register( function ( parser ) { + + return new GLTFTextureWebPExtension( parser ); + + } ); + + this.register( function ( parser ) { + + return new GLTFMaterialsTransmissionExtension( parser ); + + } ); + + this.register( function ( parser ) { + + return new GLTFLightsExtension( parser ); + + } ); + + this.register( function ( parser ) { + + return new GLTFMeshoptCompression( parser ); + + } ); + + } + + GLTFLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: GLTFLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var resourcePath; + + if ( this.resourcePath !== '' ) { + + resourcePath = this.resourcePath; + + } else if ( this.path !== '' ) { + + resourcePath = this.path; + + } else { + + resourcePath = LoaderUtils.extractUrlBase( url ); + + } + + // Tells the LoadingManager to track an extra item, which resolves after + // the model is fully loaded. This means the count of items loaded will + // be incorrect, but ensures manager.onLoad() does not fire early. + this.manager.itemStart( url ); + + var _onError = function ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }; + + var loader = new FileLoader( this.manager ); + + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( this.withCredentials ); + + loader.load( url, function ( data ) { + + try { + + scope.parse( data, resourcePath, function ( gltf ) { + + onLoad( gltf ); + + scope.manager.itemEnd( url ); + + }, _onError ); + + } catch ( e ) { + + _onError( e ); + + } + + }, onProgress, _onError ); + + }, + + setDRACOLoader: function ( dracoLoader ) { + + this.dracoLoader = dracoLoader; + return this; + + }, + + setDDSLoader: function ( ddsLoader ) { + + this.ddsLoader = ddsLoader; + return this; + + }, + + setKTX2Loader: function ( ktx2Loader ) { + + this.ktx2Loader = ktx2Loader; + return this; + + }, + + setMeshoptDecoder: function ( meshoptDecoder ) { + + this.meshoptDecoder = meshoptDecoder; + return this; + + }, + + register: function ( callback ) { + + if ( this.pluginCallbacks.indexOf( callback ) === - 1 ) { + + this.pluginCallbacks.push( callback ); + + } + + return this; + + }, + + unregister: function ( callback ) { + + if ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) { + + this.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 ); + + } + + return this; + + }, + + parse: function ( data, path, onLoad, onError ) { + + var content; + var extensions = {}; + var plugins = {}; + + if ( typeof data === 'string' ) { + + content = data; + + } else { + + var magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) ); + + if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) { + + try { + + extensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data ); + + } catch ( error ) { + + if ( onError ) onError( error ); + return; + + } + + content = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content; + + } else { + + content = LoaderUtils.decodeText( new Uint8Array( data ) ); + + } + + } + + var json = JSON.parse( content ); + + if ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) { + + if ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) ); + return; + + } + + var parser = new GLTFParser( json, { + + path: path || this.resourcePath || '', + crossOrigin: this.crossOrigin, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + + } ); + + parser.fileLoader.setRequestHeader( this.requestHeader ); + + for ( var i = 0; i < this.pluginCallbacks.length; i ++ ) { + + var plugin = this.pluginCallbacks[ i ]( parser ); + plugins[ plugin.name ] = plugin; + + // Workaround to avoid determining as unknown extension + // in addUnknownExtensionsToUserData(). + // Remove this workaround if we move all the existing + // extension handlers to plugin system + extensions[ plugin.name ] = true; + + } + + if ( json.extensionsUsed ) { + + for ( var i = 0; i < json.extensionsUsed.length; ++ i ) { + + var extensionName = json.extensionsUsed[ i ]; + var extensionsRequired = json.extensionsRequired || []; + + switch ( extensionName ) { + + case EXTENSIONS.KHR_MATERIALS_UNLIT: + extensions[ extensionName ] = new GLTFMaterialsUnlitExtension(); + break; + + case EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: + extensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension(); + break; + + case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: + extensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader ); + break; + + case EXTENSIONS.MSFT_TEXTURE_DDS: + extensions[ extensionName ] = new GLTFTextureDDSExtension( this.ddsLoader ); + break; + + case EXTENSIONS.KHR_TEXTURE_TRANSFORM: + extensions[ extensionName ] = new GLTFTextureTransformExtension(); + break; + + case EXTENSIONS.KHR_MESH_QUANTIZATION: + extensions[ extensionName ] = new GLTFMeshQuantizationExtension(); + break; + + default: + + if ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) { + + console.warn( 'THREE.GLTFLoader: Unknown extension "' + extensionName + '".' ); + + } + + } + + } + + } + + parser.setExtensions( extensions ); + parser.setPlugins( plugins ); + parser.parse( onLoad, onError ); + + } + + } ); + + /* GLTFREGISTRY */ + + function GLTFRegistry() { + + var objects = {}; + + return { + + get: function ( key ) { + + return objects[ key ]; + + }, + + add: function ( key, object ) { + + objects[ key ] = object; + + }, + + remove: function ( key ) { + + delete objects[ key ]; + + }, + + removeAll: function () { + + objects = {}; + + } + + }; + + } + + /*********************************/ + /********** EXTENSIONS ***********/ + /*********************************/ + + var EXTENSIONS = { + KHR_BINARY_GLTF: 'KHR_binary_glTF', + KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression', + KHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual', + KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat', + KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness', + KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission', + KHR_MATERIALS_UNLIT: 'KHR_materials_unlit', + KHR_TEXTURE_BASISU: 'KHR_texture_basisu', + KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform', + KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization', + EXT_TEXTURE_WEBP: 'EXT_texture_webp', + EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression', + MSFT_TEXTURE_DDS: 'MSFT_texture_dds' + }; + + /** + * DDS Texture Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds + * + */ + function GLTFTextureDDSExtension( ddsLoader ) { + + if ( ! ddsLoader ) { + + throw new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader' ); + + } + + this.name = EXTENSIONS.MSFT_TEXTURE_DDS; + this.ddsLoader = ddsLoader; + + } + + /** + * Punctual Lights Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual + */ + function GLTFLightsExtension( parser ) { + + this.parser = parser; + this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; + + // Object3D instance caches + this.cache = { refs: {}, uses: {} }; + + } + + GLTFLightsExtension.prototype._markDefs = function () { + + var parser = this.parser; + var nodeDefs = this.parser.json.nodes || []; + + for ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) { + + var nodeDef = nodeDefs[ nodeIndex ]; + + if ( nodeDef.extensions + && nodeDef.extensions[ this.name ] + && nodeDef.extensions[ this.name ].light !== undefined ) { + + parser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light ); + + } + + } + + }; + + GLTFLightsExtension.prototype._loadLight = function ( lightIndex ) { + + var parser = this.parser; + var cacheKey = 'light:' + lightIndex; + var dependency = parser.cache.get( cacheKey ); + + if ( dependency ) return dependency; + + var json = parser.json; + var extensions = ( json.extensions && json.extensions[ this.name ] ) || {}; + var lightDefs = extensions.lights || []; + var lightDef = lightDefs[ lightIndex ]; + var lightNode; + + var color = new Color( 0xffffff ); + + if ( lightDef.color !== undefined ) color.fromArray( lightDef.color ); + + var range = lightDef.range !== undefined ? lightDef.range : 0; + + switch ( lightDef.type ) { + + case 'directional': + lightNode = new DirectionalLight( color ); + lightNode.target.position.set( 0, 0, - 1 ); + lightNode.add( lightNode.target ); + break; + + case 'point': + lightNode = new PointLight( color ); + lightNode.distance = range; + break; + + case 'spot': + lightNode = new SpotLight( color ); + lightNode.distance = range; + // Handle spotlight properties. + lightDef.spot = lightDef.spot || {}; + lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0; + lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0; + lightNode.angle = lightDef.spot.outerConeAngle; + lightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; + lightNode.target.position.set( 0, 0, - 1 ); + lightNode.add( lightNode.target ); + break; + + default: + throw new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type ); + + } + + // Some lights (e.g. spot) default to a position other than the origin. Reset the position + // here, because node-level parsing will only override position if explicitly specified. + lightNode.position.set( 0, 0, 0 ); + + lightNode.decay = 2; + + if ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity; + + lightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) ); + + dependency = Promise.resolve( lightNode ); + + parser.cache.add( cacheKey, dependency ); + + return dependency; + + }; + + GLTFLightsExtension.prototype.createNodeAttachment = function ( nodeIndex ) { + + var self = this; + var parser = this.parser; + var json = parser.json; + var nodeDef = json.nodes[ nodeIndex ]; + var lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {}; + var lightIndex = lightDef.light; + + if ( lightIndex === undefined ) return null; + + return this._loadLight( lightIndex ).then( function ( light ) { + + return parser._getNodeRef( self.cache, lightIndex, light ); + + } ); + + }; + + /** + * Unlit Materials Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit + */ + function GLTFMaterialsUnlitExtension() { + + this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; + + } + + GLTFMaterialsUnlitExtension.prototype.getMaterialType = function () { + + return MeshBasicMaterial; + + }; + + GLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, materialDef, parser ) { + + var pending = []; + + materialParams.color = new Color( 1.0, 1.0, 1.0 ); + materialParams.opacity = 1.0; + + var metallicRoughness = materialDef.pbrMetallicRoughness; + + if ( metallicRoughness ) { + + if ( Array.isArray( metallicRoughness.baseColorFactor ) ) { + + var array = metallicRoughness.baseColorFactor; + + materialParams.color.fromArray( array ); + materialParams.opacity = array[ 3 ]; + + } + + if ( metallicRoughness.baseColorTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) ); + + } + + } + + return Promise.all( pending ); + + }; + + /** + * Clearcoat Materials Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat + */ + function GLTFMaterialsClearcoatExtension( parser ) { + + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; + + } + + GLTFMaterialsClearcoatExtension.prototype.getMaterialType = function ( materialIndex ) { + + var parser = this.parser; + var materialDef = parser.json.materials[ materialIndex ]; + + if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null; + + return MeshPhysicalMaterial; + + }; + + GLTFMaterialsClearcoatExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) { + + var parser = this.parser; + var materialDef = parser.json.materials[ materialIndex ]; + + if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) { + + return Promise.resolve(); + + } + + var pending = []; + + var extension = materialDef.extensions[ this.name ]; + + if ( extension.clearcoatFactor !== undefined ) { + + materialParams.clearcoat = extension.clearcoatFactor; + + } + + if ( extension.clearcoatTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) ); + + } + + if ( extension.clearcoatRoughnessFactor !== undefined ) { + + materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; + + } + + if ( extension.clearcoatRoughnessTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) ); + + } + + if ( extension.clearcoatNormalTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) ); + + if ( extension.clearcoatNormalTexture.scale !== undefined ) { + + var scale = extension.clearcoatNormalTexture.scale; + + materialParams.clearcoatNormalScale = new Vector2( scale, scale ); + + } + + } + + return Promise.all( pending ); + + }; + + /** + * Transmission Materials Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission + * Draft: https://github.com/KhronosGroup/glTF/pull/1698 + */ + function GLTFMaterialsTransmissionExtension( parser ) { + + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; + + } + + GLTFMaterialsTransmissionExtension.prototype.getMaterialType = function ( materialIndex ) { + + var parser = this.parser; + var materialDef = parser.json.materials[ materialIndex ]; + + if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null; + + return MeshPhysicalMaterial; + + }; + + GLTFMaterialsTransmissionExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) { + + var parser = this.parser; + var materialDef = parser.json.materials[ materialIndex ]; + + if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) { + + return Promise.resolve(); + + } + + var pending = []; + + var extension = materialDef.extensions[ this.name ]; + + if ( extension.transmissionFactor !== undefined ) { + + materialParams.transmission = extension.transmissionFactor; + + } + + if ( extension.transmissionTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) ); + + } + + return Promise.all( pending ); + + }; + + /** + * BasisU Texture Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu + */ + function GLTFTextureBasisUExtension( parser ) { + + this.parser = parser; + this.name = EXTENSIONS.KHR_TEXTURE_BASISU; + + } + + GLTFTextureBasisUExtension.prototype.loadTexture = function ( textureIndex ) { + + var parser = this.parser; + var json = parser.json; + + var textureDef = json.textures[ textureIndex ]; + + if ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) { + + return null; + + } + + var extension = textureDef.extensions[ this.name ]; + var source = json.images[ extension.source ]; + var loader = parser.options.ktx2Loader; + + if ( ! loader ) { + + if ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) { + + throw new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' ); + + } else { + + // Assumes that the extension is optional and that a fallback texture is present + return null; + + } + + } + + return parser.loadTextureImage( textureIndex, source, loader ); + + }; + + /** + * WebP Texture Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp + */ + function GLTFTextureWebPExtension( parser ) { + + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_WEBP; + this.isSupported = null; + + } + + GLTFTextureWebPExtension.prototype.loadTexture = function ( textureIndex ) { + + var name = this.name; + var parser = this.parser; + var json = parser.json; + + var textureDef = json.textures[ textureIndex ]; + + if ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) { + + return null; + + } + + var extension = textureDef.extensions[ name ]; + var source = json.images[ extension.source ]; + var loader = source.uri ? parser.options.manager.getHandler( source.uri ) : parser.textureLoader; + + return this.detectSupport().then( function ( isSupported ) { + + if ( isSupported ) return parser.loadTextureImage( textureIndex, source, loader ); + + if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) { + + throw new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' ); + + } + + // Fall back to PNG or JPEG. + return parser.loadTexture( textureIndex ); + + } ); + + }; + + GLTFTextureWebPExtension.prototype.detectSupport = function () { + + if ( ! this.isSupported ) { + + this.isSupported = new Promise( function ( resolve ) { + + var image = new Image(); + + // Lossy test image. Support for lossy images doesn't guarantee support for all + // WebP images, unfortunately. + image.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA'; + + image.onload = image.onerror = function () { + + resolve( image.height === 1 ); + + }; + + } ); + + } + + return this.isSupported; + + }; + + /** + * meshopt BufferView Compression Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression + */ + function GLTFMeshoptCompression( parser ) { + + this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; + this.parser = parser; + + } + + GLTFMeshoptCompression.prototype.loadBufferView = function ( index ) { + + var json = this.parser.json; + var bufferView = json.bufferViews[ index ]; + + if ( bufferView.extensions && bufferView.extensions[ this.name ] ) { + + var extensionDef = bufferView.extensions[ this.name ]; + + var buffer = this.parser.getDependency( 'buffer', extensionDef.buffer ); + var decoder = this.parser.options.meshoptDecoder; + + if ( ! decoder || ! decoder.supported ) { + + if ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) { + + throw new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' ); + + } else { + + // Assumes that the extension is optional and that fallback buffer data is present + return null; + + } + + } + + return Promise.all( [ buffer, decoder.ready ] ).then( function ( res ) { + + var byteOffset = extensionDef.byteOffset || 0; + var byteLength = extensionDef.byteLength || 0; + + var count = extensionDef.count; + var stride = extensionDef.byteStride; + + var result = new ArrayBuffer( count * stride ); + var source = new Uint8Array( res[ 0 ], byteOffset, byteLength ); + + decoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter ); + return result; + + } ); + + } else { + + return null; + + } + + }; + + /* BINARY EXTENSION */ + var BINARY_EXTENSION_HEADER_MAGIC = 'glTF'; + var BINARY_EXTENSION_HEADER_LENGTH = 12; + var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 }; + + function GLTFBinaryExtension( data ) { + + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + + var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH ); + + this.header = { + magic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ), + version: headerView.getUint32( 4, true ), + length: headerView.getUint32( 8, true ) + }; + + if ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) { + + throw new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' ); + + } else if ( this.header.version < 2.0 ) { + + throw new Error( 'THREE.GLTFLoader: Legacy binary file detected.' ); + + } + + var chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH ); + var chunkIndex = 0; + + while ( chunkIndex < chunkView.byteLength ) { + + var chunkLength = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + var chunkType = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) { + + var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength ); + this.content = LoaderUtils.decodeText( contentArray ); + + } else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) { + + var byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data.slice( byteOffset, byteOffset + chunkLength ); + + } + + // Clients must ignore chunks with unknown types. + + chunkIndex += chunkLength; + + } + + if ( this.content === null ) { + + throw new Error( 'THREE.GLTFLoader: JSON content not found.' ); + + } + + } + + /** + * DRACO Mesh Compression Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression + */ + function GLTFDracoMeshCompressionExtension( json, dracoLoader ) { + + if ( ! dracoLoader ) { + + throw new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' ); + + } + + this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; + this.json = json; + this.dracoLoader = dracoLoader; + this.dracoLoader.preload(); + + } + + GLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) { + + var json = this.json; + var dracoLoader = this.dracoLoader; + var bufferViewIndex = primitive.extensions[ this.name ].bufferView; + var gltfAttributeMap = primitive.extensions[ this.name ].attributes; + var threeAttributeMap = {}; + var attributeNormalizedMap = {}; + var attributeTypeMap = {}; + + for ( var attributeName in gltfAttributeMap ) { + + var threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase(); + + threeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ]; + + } + + for ( attributeName in primitive.attributes ) { + + var threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase(); + + if ( gltfAttributeMap[ attributeName ] !== undefined ) { + + var accessorDef = json.accessors[ primitive.attributes[ attributeName ] ]; + var componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ]; + + attributeTypeMap[ threeAttributeName ] = componentType; + attributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true; + + } + + } + + return parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) { + + return new Promise( function ( resolve ) { + + dracoLoader.decodeDracoFile( bufferView, function ( geometry ) { + + for ( var attributeName in geometry.attributes ) { + + var attribute = geometry.attributes[ attributeName ]; + var normalized = attributeNormalizedMap[ attributeName ]; + + if ( normalized !== undefined ) attribute.normalized = normalized; + + } + + resolve( geometry ); + + }, threeAttributeMap, attributeTypeMap ); + + } ); + + } ); + + }; + + /** + * Texture Transform Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform + */ + function GLTFTextureTransformExtension() { + + this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; + + } + + GLTFTextureTransformExtension.prototype.extendTexture = function ( texture, transform ) { + + texture = texture.clone(); + + if ( transform.offset !== undefined ) { + + texture.offset.fromArray( transform.offset ); + + } + + if ( transform.rotation !== undefined ) { + + texture.rotation = transform.rotation; + + } + + if ( transform.scale !== undefined ) { + + texture.repeat.fromArray( transform.scale ); + + } + + if ( transform.texCoord !== undefined ) { + + console.warn( 'THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.' ); + + } + + texture.needsUpdate = true; + + return texture; + + }; + + /** + * Specular-Glossiness Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness + */ + + /** + * A sub class of StandardMaterial with some of the functionality + * changed via the `onBeforeCompile` callback + * @pailhead + */ + + function GLTFMeshStandardSGMaterial( params ) { + + MeshStandardMaterial.call( this ); + + this.isGLTFSpecularGlossinessMaterial = true; + + //various chunks that need replacing + var specularMapParsFragmentChunk = [ + '#ifdef USE_SPECULARMAP', + ' uniform sampler2D specularMap;', + '#endif' + ].join( '\n' ); + + var glossinessMapParsFragmentChunk = [ + '#ifdef USE_GLOSSINESSMAP', + ' uniform sampler2D glossinessMap;', + '#endif' + ].join( '\n' ); + + var specularMapFragmentChunk = [ + 'vec3 specularFactor = specular;', + '#ifdef USE_SPECULARMAP', + ' vec4 texelSpecular = texture2D( specularMap, vUv );', + ' texelSpecular = sRGBToLinear( texelSpecular );', + ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' specularFactor *= texelSpecular.rgb;', + '#endif' + ].join( '\n' ); + + var glossinessMapFragmentChunk = [ + 'float glossinessFactor = glossiness;', + '#ifdef USE_GLOSSINESSMAP', + ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );', + ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' glossinessFactor *= texelGlossiness.a;', + '#endif' + ].join( '\n' ); + + var lightPhysicalFragmentChunk = [ + 'PhysicalMaterial material;', + 'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );', + 'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );', + 'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );', + 'material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.', + 'material.specularRoughness += geometryRoughness;', + 'material.specularRoughness = min( material.specularRoughness, 1.0 );', + 'material.specularColor = specularFactor;', + ].join( '\n' ); + + var uniforms = { + specular: { value: new Color().setHex( 0xffffff ) }, + glossiness: { value: 1 }, + specularMap: { value: null }, + glossinessMap: { value: null } + }; + + this._extraUniforms = uniforms; + + this.onBeforeCompile = function ( shader ) { + + for ( var uniformName in uniforms ) { + + shader.uniforms[ uniformName ] = uniforms[ uniformName ]; + + } + + shader.fragmentShader = shader.fragmentShader + .replace( 'uniform float roughness;', 'uniform vec3 specular;' ) + .replace( 'uniform float metalness;', 'uniform float glossiness;' ) + .replace( '#include ', specularMapParsFragmentChunk ) + .replace( '#include ', glossinessMapParsFragmentChunk ) + .replace( '#include ', specularMapFragmentChunk ) + .replace( '#include ', glossinessMapFragmentChunk ) + .replace( '#include ', lightPhysicalFragmentChunk ); + + }; + + Object.defineProperties( this, { + + specular: { + get: function () { + + return uniforms.specular.value; + + }, + set: function ( v ) { + + uniforms.specular.value = v; + + } + }, + + specularMap: { + get: function () { + + return uniforms.specularMap.value; + + }, + set: function ( v ) { + + uniforms.specularMap.value = v; + + if ( v ) { + + this.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps + + } else { + + delete this.defines.USE_SPECULARMAP; + + } + + } + }, + + glossiness: { + get: function () { + + return uniforms.glossiness.value; + + }, + set: function ( v ) { + + uniforms.glossiness.value = v; + + } + }, + + glossinessMap: { + get: function () { + + return uniforms.glossinessMap.value; + + }, + set: function ( v ) { + + uniforms.glossinessMap.value = v; + + if ( v ) { + + this.defines.USE_GLOSSINESSMAP = ''; + this.defines.USE_UV = ''; + + } else { + + delete this.defines.USE_GLOSSINESSMAP; + delete this.defines.USE_UV; + + } + + } + } + + } ); + + delete this.metalness; + delete this.roughness; + delete this.metalnessMap; + delete this.roughnessMap; + + this.setValues( params ); + + } + + GLTFMeshStandardSGMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); + GLTFMeshStandardSGMaterial.prototype.constructor = GLTFMeshStandardSGMaterial; + + GLTFMeshStandardSGMaterial.prototype.copy = function ( source ) { + + MeshStandardMaterial.prototype.copy.call( this, source ); + this.specularMap = source.specularMap; + this.specular.copy( source.specular ); + this.glossinessMap = source.glossinessMap; + this.glossiness = source.glossiness; + delete this.metalness; + delete this.roughness; + delete this.metalnessMap; + delete this.roughnessMap; + return this; + + }; + + function GLTFMaterialsPbrSpecularGlossinessExtension() { + + return { + + name: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, + + specularGlossinessParams: [ + 'color', + 'map', + 'lightMap', + 'lightMapIntensity', + 'aoMap', + 'aoMapIntensity', + 'emissive', + 'emissiveIntensity', + 'emissiveMap', + 'bumpMap', + 'bumpScale', + 'normalMap', + 'normalMapType', + 'displacementMap', + 'displacementScale', + 'displacementBias', + 'specularMap', + 'specular', + 'glossinessMap', + 'glossiness', + 'alphaMap', + 'envMap', + 'envMapIntensity', + 'refractionRatio', + ], + + getMaterialType: function () { + + return GLTFMeshStandardSGMaterial; + + }, + + extendParams: function ( materialParams, materialDef, parser ) { + + var pbrSpecularGlossiness = materialDef.extensions[ this.name ]; + + materialParams.color = new Color( 1.0, 1.0, 1.0 ); + materialParams.opacity = 1.0; + + var pending = []; + + if ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) { + + var array = pbrSpecularGlossiness.diffuseFactor; + + materialParams.color.fromArray( array ); + materialParams.opacity = array[ 3 ]; + + } + + if ( pbrSpecularGlossiness.diffuseTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) ); + + } + + materialParams.emissive = new Color( 0.0, 0.0, 0.0 ); + materialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0; + materialParams.specular = new Color( 1.0, 1.0, 1.0 ); + + if ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) { + + materialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor ); + + } + + if ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) { + + var specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture; + pending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) ); + pending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) ); + + } + + return Promise.all( pending ); + + }, + + createMaterial: function ( materialParams ) { + + var material = new GLTFMeshStandardSGMaterial( materialParams ); + material.fog = true; + + material.color = materialParams.color; + + material.map = materialParams.map === undefined ? null : materialParams.map; + + material.lightMap = null; + material.lightMapIntensity = 1.0; + + material.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap; + material.aoMapIntensity = 1.0; + + material.emissive = materialParams.emissive; + material.emissiveIntensity = 1.0; + material.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap; + + material.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap; + material.bumpScale = 1; + + material.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap; + material.normalMapType = TangentSpaceNormalMap; + + if ( materialParams.normalScale ) material.normalScale = materialParams.normalScale; + + material.displacementMap = null; + material.displacementScale = 1; + material.displacementBias = 0; + + material.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap; + material.specular = materialParams.specular; + + material.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap; + material.glossiness = materialParams.glossiness; + + material.alphaMap = null; + + material.envMap = materialParams.envMap === undefined ? null : materialParams.envMap; + material.envMapIntensity = 1.0; + + material.refractionRatio = 0.98; + + return material; + + }, + + }; + + } + + /** + * Mesh Quantization Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization + */ + function GLTFMeshQuantizationExtension() { + + this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; + + } + + /*********************************/ + /********** INTERPOLATION ********/ + /*********************************/ + + // Spline Interpolation + // Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation + function GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + GLTFCubicSplineInterpolant.prototype = Object.create( Interpolant.prototype ); + GLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant; + + GLTFCubicSplineInterpolant.prototype.copySampleValue_ = function ( index ) { + + // Copies a sample value to the result buffer. See description of glTF + // CUBICSPLINE values layout in interpolate_() function below. + + var result = this.resultBuffer, + values = this.sampleValues, + valueSize = this.valueSize, + offset = index * valueSize * 3 + valueSize; + + for ( var i = 0; i !== valueSize; i ++ ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + }; + + GLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_; + + GLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_; + + GLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) { + + var result = this.resultBuffer; + var values = this.sampleValues; + var stride = this.valueSize; + + var stride2 = stride * 2; + var stride3 = stride * 3; + + var td = t1 - t0; + + var p = ( t - t0 ) / td; + var pp = p * p; + var ppp = pp * p; + + var offset1 = i1 * stride3; + var offset0 = offset1 - stride3; + + var s2 = - 2 * ppp + 3 * pp; + var s3 = ppp - pp; + var s0 = 1 - s2; + var s1 = s3 - pp + p; + + // Layout of keyframe output values for CUBICSPLINE animations: + // [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ] + for ( var i = 0; i !== stride; i ++ ) { + + var p0 = values[ offset0 + i + stride ]; // splineVertex_k + var m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k) + var p1 = values[ offset1 + i + stride ]; // splineVertex_k+1 + var m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k) + + result[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; + + } + + return result; + + }; + + /*********************************/ + /********** INTERNALS ************/ + /*********************************/ + + /* CONSTANTS */ + + var WEBGL_CONSTANTS = { + FLOAT: 5126, + //FLOAT_MAT2: 35674, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 + }; + + var WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }; + + var WEBGL_FILTERS = { + 9728: NearestFilter, + 9729: LinearFilter, + 9984: NearestMipmapNearestFilter, + 9985: LinearMipmapNearestFilter, + 9986: NearestMipmapLinearFilter, + 9987: LinearMipmapLinearFilter + }; + + var WEBGL_WRAPPINGS = { + 33071: ClampToEdgeWrapping, + 33648: MirroredRepeatWrapping, + 10497: RepeatWrapping + }; + + var WEBGL_TYPE_SIZES = { + 'SCALAR': 1, + 'VEC2': 2, + 'VEC3': 3, + 'VEC4': 4, + 'MAT2': 4, + 'MAT3': 9, + 'MAT4': 16 + }; + + var ATTRIBUTES = { + POSITION: 'position', + NORMAL: 'normal', + TANGENT: 'tangent', + TEXCOORD_0: 'uv', + TEXCOORD_1: 'uv2', + COLOR_0: 'color', + WEIGHTS_0: 'skinWeight', + JOINTS_0: 'skinIndex', + }; + + var PATH_PROPERTIES = { + scale: 'scale', + translation: 'position', + rotation: 'quaternion', + weights: 'morphTargetInfluences' + }; + + var INTERPOLATION = { + CUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each + // keyframe track will be initialized with a default interpolation type, then modified. + LINEAR: InterpolateLinear, + STEP: InterpolateDiscrete + }; + + var ALPHA_MODES = { + OPAQUE: 'OPAQUE', + MASK: 'MASK', + BLEND: 'BLEND' + }; + + /* UTILITY FUNCTIONS */ + + function resolveURL( url, path ) { + + // Invalid URL + if ( typeof url !== 'string' || url === '' ) return ''; + + // Host Relative URL + if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) { + + path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' ); + + } + + // Absolute URL http://,https://,// + if ( /^(https?:)?\/\//i.test( url ) ) return url; + + // Data URI + if ( /^data:.*,.*$/i.test( url ) ) return url; + + // Blob URL + if ( /^blob:.*$/i.test( url ) ) return url; + + // Relative URL + return path + url; + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material + */ + function createDefaultMaterial( cache ) { + + if ( cache[ 'DefaultMaterial' ] === undefined ) { + + cache[ 'DefaultMaterial' ] = new MeshStandardMaterial( { + color: 0xFFFFFF, + emissive: 0x000000, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: FrontSide + } ); + + } + + return cache[ 'DefaultMaterial' ]; + + } + + function addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) { + + // Add unknown glTF extensions to an object's userData. + + for ( var name in objectDef.extensions ) { + + if ( knownExtensions[ name ] === undefined ) { + + object.userData.gltfExtensions = object.userData.gltfExtensions || {}; + object.userData.gltfExtensions[ name ] = objectDef.extensions[ name ]; + + } + + } + + } + + /** + * @param {Object3D|Material|BufferGeometry} object + * @param {GLTF.definition} gltfDef + */ + function assignExtrasToUserData( object, gltfDef ) { + + if ( gltfDef.extras !== undefined ) { + + if ( typeof gltfDef.extras === 'object' ) { + + Object.assign( object.userData, gltfDef.extras ); + + } else { + + console.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras ); + + } + + } + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets + * + * @param {BufferGeometry} geometry + * @param {Array} targets + * @param {GLTFParser} parser + * @return {Promise} + */ + function addMorphTargets( geometry, targets, parser ) { + + var hasMorphPosition = false; + var hasMorphNormal = false; + + for ( var i = 0, il = targets.length; i < il; i ++ ) { + + var target = targets[ i ]; + + if ( target.POSITION !== undefined ) hasMorphPosition = true; + if ( target.NORMAL !== undefined ) hasMorphNormal = true; + + if ( hasMorphPosition && hasMorphNormal ) break; + + } + + if ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry ); + + var pendingPositionAccessors = []; + var pendingNormalAccessors = []; + + for ( var i = 0, il = targets.length; i < il; i ++ ) { + + var target = targets[ i ]; + + if ( hasMorphPosition ) { + + var pendingAccessor = target.POSITION !== undefined + ? parser.getDependency( 'accessor', target.POSITION ) + : geometry.attributes.position; + + pendingPositionAccessors.push( pendingAccessor ); + + } + + if ( hasMorphNormal ) { + + var pendingAccessor = target.NORMAL !== undefined + ? parser.getDependency( 'accessor', target.NORMAL ) + : geometry.attributes.normal; + + pendingNormalAccessors.push( pendingAccessor ); + + } + + } + + return Promise.all( [ + Promise.all( pendingPositionAccessors ), + Promise.all( pendingNormalAccessors ) + ] ).then( function ( accessors ) { + + var morphPositions = accessors[ 0 ]; + var morphNormals = accessors[ 1 ]; + + if ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions; + if ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals; + geometry.morphTargetsRelative = true; + + return geometry; + + } ); + + } + + /** + * @param {Mesh} mesh + * @param {GLTF.Mesh} meshDef + */ + function updateMorphTargets( mesh, meshDef ) { + + mesh.updateMorphTargets(); + + if ( meshDef.weights !== undefined ) { + + for ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) { + + mesh.morphTargetInfluences[ i ] = meshDef.weights[ i ]; + + } + + } + + // .extras has user-defined data, so check that .extras.targetNames is an array. + if ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) { + + var targetNames = meshDef.extras.targetNames; + + if ( mesh.morphTargetInfluences.length === targetNames.length ) { + + mesh.morphTargetDictionary = {}; + + for ( var i = 0, il = targetNames.length; i < il; i ++ ) { + + mesh.morphTargetDictionary[ targetNames[ i ] ] = i; + + } + + } else { + + console.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' ); + + } + + } + + } + + function createPrimitiveKey( primitiveDef ) { + + var dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]; + var geometryKey; + + if ( dracoExtension ) { + + geometryKey = 'draco:' + dracoExtension.bufferView + + ':' + dracoExtension.indices + + ':' + createAttributesKey( dracoExtension.attributes ); + + } else { + + geometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode; + + } + + return geometryKey; + + } + + function createAttributesKey( attributes ) { + + var attributesKey = ''; + + var keys = Object.keys( attributes ).sort(); + + for ( var i = 0, il = keys.length; i < il; i ++ ) { + + attributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';'; + + } + + return attributesKey; + + } + + /* GLTF PARSER */ + + function GLTFParser( json, options ) { + + this.json = json || {}; + this.extensions = {}; + this.plugins = {}; + this.options = options || {}; + + // loader object cache + this.cache = new GLTFRegistry(); + + // associations between Three.js objects and glTF elements + this.associations = new Map(); + + // BufferGeometry caching + this.primitiveCache = {}; + + // Object3D instance caches + this.meshCache = { refs: {}, uses: {} }; + this.cameraCache = { refs: {}, uses: {} }; + this.lightCache = { refs: {}, uses: {} }; + + // Track node names, to ensure no duplicates + this.nodeNamesUsed = {}; + + // Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the + // expensive work of uploading a texture to the GPU off the main thread. + if ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) { + + this.textureLoader = new ImageBitmapLoader( this.options.manager ); + + } else { + + this.textureLoader = new TextureLoader( this.options.manager ); + + } + + this.textureLoader.setCrossOrigin( this.options.crossOrigin ); + + this.fileLoader = new FileLoader( this.options.manager ); + this.fileLoader.setResponseType( 'arraybuffer' ); + + if ( this.options.crossOrigin === 'use-credentials' ) { + + this.fileLoader.setWithCredentials( true ); + + } + + } + + GLTFParser.prototype.setExtensions = function ( extensions ) { + + this.extensions = extensions; + + }; + + GLTFParser.prototype.setPlugins = function ( plugins ) { + + this.plugins = plugins; + + }; + + GLTFParser.prototype.parse = function ( onLoad, onError ) { + + var parser = this; + var json = this.json; + var extensions = this.extensions; + + // Clear the loader cache + this.cache.removeAll(); + + // Mark the special nodes/meshes in json for efficient parse + this._invokeAll( function ( ext ) { + + return ext._markDefs && ext._markDefs(); + + } ); + + Promise.all( [ + + this.getDependencies( 'scene' ), + this.getDependencies( 'animation' ), + this.getDependencies( 'camera' ), + + ] ).then( function ( dependencies ) { + + var result = { + scene: dependencies[ 0 ][ json.scene || 0 ], + scenes: dependencies[ 0 ], + animations: dependencies[ 1 ], + cameras: dependencies[ 2 ], + asset: json.asset, + parser: parser, + userData: {} + }; + + addUnknownExtensionsToUserData( extensions, result, json ); + + assignExtrasToUserData( result, json ); + + onLoad( result ); + + } ).catch( onError ); + + }; + + /** + * Marks the special nodes/meshes in json for efficient parse. + */ + GLTFParser.prototype._markDefs = function () { + + var nodeDefs = this.json.nodes || []; + var skinDefs = this.json.skins || []; + var meshDefs = this.json.meshes || []; + + // Nothing in the node definition indicates whether it is a Bone or an + // Object3D. Use the skins' joint references to mark bones. + for ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) { + + var joints = skinDefs[ skinIndex ].joints; + + for ( var i = 0, il = joints.length; i < il; i ++ ) { + + nodeDefs[ joints[ i ] ].isBone = true; + + } + + } + + // Iterate over all nodes, marking references to shared resources, + // as well as skeleton joints. + for ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) { + + var nodeDef = nodeDefs[ nodeIndex ]; + + if ( nodeDef.mesh !== undefined ) { + + this._addNodeRef( this.meshCache, nodeDef.mesh ); + + // Nothing in the mesh definition indicates whether it is + // a SkinnedMesh or Mesh. Use the node's mesh reference + // to mark SkinnedMesh if node has skin. + if ( nodeDef.skin !== undefined ) { + + meshDefs[ nodeDef.mesh ].isSkinnedMesh = true; + + } + + } + + if ( nodeDef.camera !== undefined ) { + + this._addNodeRef( this.cameraCache, nodeDef.camera ); + + } + + } + + }; + + /** + * Counts references to shared node / Object3D resources. These resources + * can be reused, or "instantiated", at multiple nodes in the scene + * hierarchy. Mesh, Camera, and Light instances are instantiated and must + * be marked. Non-scenegraph resources (like Materials, Geometries, and + * Textures) can be reused directly and are not marked here. + * + * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. + */ + GLTFParser.prototype._addNodeRef = function ( cache, index ) { + + if ( index === undefined ) return; + + if ( cache.refs[ index ] === undefined ) { + + cache.refs[ index ] = cache.uses[ index ] = 0; + + } + + cache.refs[ index ] ++; + + }; + + /** Returns a reference to a shared resource, cloning it if necessary. */ + GLTFParser.prototype._getNodeRef = function ( cache, index, object ) { + + if ( cache.refs[ index ] <= 1 ) return object; + + var ref = object.clone(); + + ref.name += '_instance_' + ( cache.uses[ index ] ++ ); + + return ref; + + }; + + GLTFParser.prototype._invokeOne = function ( func ) { + + var extensions = Object.values( this.plugins ); + extensions.push( this ); + + for ( var i = 0; i < extensions.length; i ++ ) { + + var result = func( extensions[ i ] ); + + if ( result ) return result; + + } + + }; + + GLTFParser.prototype._invokeAll = function ( func ) { + + var extensions = Object.values( this.plugins ); + extensions.unshift( this ); + + var pending = []; + + for ( var i = 0; i < extensions.length; i ++ ) { + + var result = func( extensions[ i ] ); + + if ( result ) pending.push( result ); + + } + + return pending; + + }; + + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + GLTFParser.prototype.getDependency = function ( type, index ) { + + var cacheKey = type + ':' + index; + var dependency = this.cache.get( cacheKey ); + + if ( ! dependency ) { + + switch ( type ) { + + case 'scene': + dependency = this.loadScene( index ); + break; + + case 'node': + dependency = this.loadNode( index ); + break; + + case 'mesh': + dependency = this._invokeOne( function ( ext ) { + + return ext.loadMesh && ext.loadMesh( index ); + + } ); + break; + + case 'accessor': + dependency = this.loadAccessor( index ); + break; + + case 'bufferView': + dependency = this._invokeOne( function ( ext ) { + + return ext.loadBufferView && ext.loadBufferView( index ); + + } ); + break; + + case 'buffer': + dependency = this.loadBuffer( index ); + break; + + case 'material': + dependency = this._invokeOne( function ( ext ) { + + return ext.loadMaterial && ext.loadMaterial( index ); + + } ); + break; + + case 'texture': + dependency = this._invokeOne( function ( ext ) { + + return ext.loadTexture && ext.loadTexture( index ); + + } ); + break; + + case 'skin': + dependency = this.loadSkin( index ); + break; + + case 'animation': + dependency = this.loadAnimation( index ); + break; + + case 'camera': + dependency = this.loadCamera( index ); + break; + + default: + throw new Error( 'Unknown type: ' + type ); + + } + + this.cache.add( cacheKey, dependency ); + + } + + return dependency; + + }; + + /** + * Requests all dependencies of the specified type asynchronously, with caching. + * @param {string} type + * @return {Promise>} + */ + GLTFParser.prototype.getDependencies = function ( type ) { + + var dependencies = this.cache.get( type ); + + if ( ! dependencies ) { + + var parser = this; + var defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || []; + + dependencies = Promise.all( defs.map( function ( def, index ) { + + return parser.getDependency( type, index ); + + } ) ); + + this.cache.add( type, dependencies ); + + } + + return dependencies; + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBuffer = function ( bufferIndex ) { + + var bufferDef = this.json.buffers[ bufferIndex ]; + var loader = this.fileLoader; + + if ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) { + + throw new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' ); + + } + + // If present, GLB container is required to be the first buffer. + if ( bufferDef.uri === undefined && bufferIndex === 0 ) { + + return Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body ); + + } + + var options = this.options; + + return new Promise( function ( resolve, reject ) { + + loader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () { + + reject( new Error( 'THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".' ) ); + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) { + + var bufferViewDef = this.json.bufferViews[ bufferViewIndex ]; + + return this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) { + + var byteLength = bufferViewDef.byteLength || 0; + var byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice( byteOffset, byteOffset + byteLength ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors + * @param {number} accessorIndex + * @return {Promise} + */ + GLTFParser.prototype.loadAccessor = function ( accessorIndex ) { + + var parser = this; + var json = this.json; + + var accessorDef = this.json.accessors[ accessorIndex ]; + + if ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) { + + // Ignore empty accessors, which may be used to declare runtime + // information about attributes coming from another source (e.g. Draco + // compression extension). + return Promise.resolve( null ); + + } + + var pendingBufferViews = []; + + if ( accessorDef.bufferView !== undefined ) { + + pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) ); + + } else { + + pendingBufferViews.push( null ); + + } + + if ( accessorDef.sparse !== undefined ) { + + pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) ); + pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) ); + + } + + return Promise.all( pendingBufferViews ).then( function ( bufferViews ) { + + var bufferView = bufferViews[ 0 ]; + + var itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ]; + var TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ]; + + // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12. + var elementBytes = TypedArray.BYTES_PER_ELEMENT; + var itemBytes = elementBytes * itemSize; + var byteOffset = accessorDef.byteOffset || 0; + var byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined; + var normalized = accessorDef.normalized === true; + var array, bufferAttribute; + + // The buffer is not interleaved if the stride is the item size in bytes. + if ( byteStride && byteStride !== itemBytes ) { + + // Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer + // This makes sure that IBA.count reflects accessor.count properly + var ibSlice = Math.floor( byteOffset / byteStride ); + var ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count; + var ib = parser.cache.get( ibCacheKey ); + + if ( ! ib ) { + + array = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes ); + + // Integer parameters to IB/IBA are in array elements, not bytes. + ib = new InterleavedBuffer( array, byteStride / elementBytes ); + + parser.cache.add( ibCacheKey, ib ); + + } + + bufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized ); + + } else { + + if ( bufferView === null ) { + + array = new TypedArray( accessorDef.count * itemSize ); + + } else { + + array = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize ); + + } + + bufferAttribute = new BufferAttribute( array, itemSize, normalized ); + + } + + // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors + if ( accessorDef.sparse !== undefined ) { + + var itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; + var TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ]; + + var byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; + var byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; + + var sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices ); + var sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize ); + + if ( bufferView !== null ) { + + // Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes. + bufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized ); + + } + + for ( var i = 0, il = sparseIndices.length; i < il; i ++ ) { + + var index = sparseIndices[ i ]; + + bufferAttribute.setX( index, sparseValues[ i * itemSize ] ); + if ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] ); + if ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] ); + if ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] ); + if ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' ); + + } + + } + + return bufferAttribute; + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + GLTFParser.prototype.loadTexture = function ( textureIndex ) { + + var parser = this; + var json = this.json; + var options = this.options; + + var textureDef = json.textures[ textureIndex ]; + + var textureExtensions = textureDef.extensions || {}; + + var source; + + if ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) { + + source = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ]; + + } else { + + source = json.images[ textureDef.source ]; + + } + + var loader; + + if ( source.uri ) { + + loader = options.manager.getHandler( source.uri ); + + } + + if ( ! loader ) { + + loader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] + ? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader + : this.textureLoader; + + } + + return this.loadTextureImage( textureIndex, source, loader ); + + }; + + GLTFParser.prototype.loadTextureImage = function ( textureIndex, source, loader ) { + + var parser = this; + var json = this.json; + var options = this.options; + + var textureDef = json.textures[ textureIndex ]; + + var URL = self.URL || self.webkitURL; + + var sourceURI = source.uri; + var isObjectURL = false; + var hasAlpha = true; + + if ( source.mimeType === 'image/jpeg' ) hasAlpha = false; + + if ( source.bufferView !== undefined ) { + + // Load binary image data from bufferView, if provided. + + sourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) { + + if ( source.mimeType === 'image/png' ) { + + // Inspect the PNG 'IHDR' chunk to determine whether the image could have an + // alpha channel. This check is conservative — the image could have an alpha + // channel with all values == 1, and the indexed type (colorType == 3) only + // sometimes contains alpha. + // + // https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header + var colorType = new DataView( bufferView, 25, 1 ).getUint8( 0, false ); + hasAlpha = colorType === 6 || colorType === 4 || colorType === 3; + + } + + isObjectURL = true; + var blob = new Blob( [ bufferView ], { type: source.mimeType } ); + sourceURI = URL.createObjectURL( blob ); + return sourceURI; + + } ); + + } + + return Promise.resolve( sourceURI ).then( function ( sourceURI ) { + + return new Promise( function ( resolve, reject ) { + + var onLoad = resolve; + + if ( loader.isImageBitmapLoader === true ) { + + onLoad = function ( imageBitmap ) { + + resolve( new CanvasTexture( imageBitmap ) ); + + }; + + } + + loader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject ); + + } ); + + } ).then( function ( texture ) { + + // Clean up resources and configure Texture. + + if ( isObjectURL === true ) { + + URL.revokeObjectURL( sourceURI ); + + } + + texture.flipY = false; + + if ( textureDef.name ) texture.name = textureDef.name; + + // When there is definitely no alpha channel in the texture, set RGBFormat to save space. + if ( ! hasAlpha ) texture.format = RGBFormat; + + var samplers = json.samplers || {}; + var sampler = samplers[ textureDef.sampler ] || {}; + + texture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter; + texture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter; + texture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping; + texture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping; + + parser.associations.set( texture, { + type: 'textures', + index: textureIndex + } ); + + return texture; + + } ); + + }; + + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} mapName + * @param {Object} mapDef + * @return {Promise} + */ + GLTFParser.prototype.assignTexture = function ( materialParams, mapName, mapDef ) { + + var parser = this; + + return this.getDependency( 'texture', mapDef.index ).then( function ( texture ) { + + // Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured + // However, we will copy UV set 0 to UV set 1 on demand for aoMap + if ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) { + + console.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' ); + + } + + if ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) { + + var transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined; + + if ( transform ) { + + var gltfReference = parser.associations.get( texture ); + texture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform ); + parser.associations.set( texture, gltfReference ); + + } + + } + + materialParams[ mapName ] = texture; + + } ); + + }; + + /** + * Assigns final material to a Mesh, Line, or Points instance. The instance + * already has a material (generated from the glTF material options alone) + * but reuse of the same glTF material may require multiple threejs materials + * to accomodate different primitive types, defines, etc. New materials will + * be created if necessary, and reused from a cache. + * @param {Object3D} mesh Mesh, Line, or Points instance. + */ + GLTFParser.prototype.assignFinalMaterial = function ( mesh ) { + + var geometry = mesh.geometry; + var material = mesh.material; + + var useVertexTangents = geometry.attributes.tangent !== undefined; + var useVertexColors = geometry.attributes.color !== undefined; + var useFlatShading = geometry.attributes.normal === undefined; + var useSkinning = mesh.isSkinnedMesh === true; + var useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0; + var useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined; + + if ( mesh.isPoints ) { + + var cacheKey = 'PointsMaterial:' + material.uuid; + + var pointsMaterial = this.cache.get( cacheKey ); + + if ( ! pointsMaterial ) { + + pointsMaterial = new PointsMaterial(); + Material.prototype.copy.call( pointsMaterial, material ); + pointsMaterial.color.copy( material.color ); + pointsMaterial.map = material.map; + pointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px + + this.cache.add( cacheKey, pointsMaterial ); + + } + + material = pointsMaterial; + + } else if ( mesh.isLine ) { + + var cacheKey = 'LineBasicMaterial:' + material.uuid; + + var lineMaterial = this.cache.get( cacheKey ); + + if ( ! lineMaterial ) { + + lineMaterial = new LineBasicMaterial(); + Material.prototype.copy.call( lineMaterial, material ); + lineMaterial.color.copy( material.color ); + + this.cache.add( cacheKey, lineMaterial ); + + } + + material = lineMaterial; + + } + + // Clone the material if it will be modified + if ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) { + + var cacheKey = 'ClonedMaterial:' + material.uuid + ':'; + + if ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:'; + if ( useSkinning ) cacheKey += 'skinning:'; + if ( useVertexTangents ) cacheKey += 'vertex-tangents:'; + if ( useVertexColors ) cacheKey += 'vertex-colors:'; + if ( useFlatShading ) cacheKey += 'flat-shading:'; + if ( useMorphTargets ) cacheKey += 'morph-targets:'; + if ( useMorphNormals ) cacheKey += 'morph-normals:'; + + var cachedMaterial = this.cache.get( cacheKey ); + + if ( ! cachedMaterial ) { + + cachedMaterial = material.clone(); + + if ( useSkinning ) cachedMaterial.skinning = true; + if ( useVertexTangents ) cachedMaterial.vertexTangents = true; + if ( useVertexColors ) cachedMaterial.vertexColors = true; + if ( useFlatShading ) cachedMaterial.flatShading = true; + if ( useMorphTargets ) cachedMaterial.morphTargets = true; + if ( useMorphNormals ) cachedMaterial.morphNormals = true; + + this.cache.add( cacheKey, cachedMaterial ); + + this.associations.set( cachedMaterial, this.associations.get( material ) ); + + } + + material = cachedMaterial; + + } + + // workarounds for mesh and geometry + + if ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) { + + geometry.setAttribute( 'uv2', geometry.attributes.uv ); + + } + + // https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995 + if ( material.normalScale && ! useVertexTangents ) { + + material.normalScale.y = - material.normalScale.y; + + } + + if ( material.clearcoatNormalScale && ! useVertexTangents ) { + + material.clearcoatNormalScale.y = - material.clearcoatNormalScale.y; + + } + + mesh.material = material; + + }; + + GLTFParser.prototype.getMaterialType = function ( /* materialIndex */ ) { + + return MeshStandardMaterial; + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @param {number} materialIndex + * @return {Promise} + */ + GLTFParser.prototype.loadMaterial = function ( materialIndex ) { + + var parser = this; + var json = this.json; + var extensions = this.extensions; + var materialDef = json.materials[ materialIndex ]; + + var materialType; + var materialParams = {}; + var materialExtensions = materialDef.extensions || {}; + + var pending = []; + + if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) { + + var sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ]; + materialType = sgExtension.getMaterialType(); + pending.push( sgExtension.extendParams( materialParams, materialDef, parser ) ); + + } else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) { + + var kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ]; + materialType = kmuExtension.getMaterialType(); + pending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) ); + + } else { + + // Specification: + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material + + var metallicRoughness = materialDef.pbrMetallicRoughness || {}; + + materialParams.color = new Color( 1.0, 1.0, 1.0 ); + materialParams.opacity = 1.0; + + if ( Array.isArray( metallicRoughness.baseColorFactor ) ) { + + var array = metallicRoughness.baseColorFactor; + + materialParams.color.fromArray( array ); + materialParams.opacity = array[ 3 ]; + + } + + if ( metallicRoughness.baseColorTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) ); + + } + + materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0; + materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0; + + if ( metallicRoughness.metallicRoughnessTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) ); + pending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) ); + + } + + materialType = this._invokeOne( function ( ext ) { + + return ext.getMaterialType && ext.getMaterialType( materialIndex ); + + } ); + + pending.push( Promise.all( this._invokeAll( function ( ext ) { + + return ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams ); + + } ) ) ); + + } + + if ( materialDef.doubleSided === true ) { + + materialParams.side = DoubleSide; + + } + + var alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; + + if ( alphaMode === ALPHA_MODES.BLEND ) { + + materialParams.transparent = true; + + // See: https://github.com/mrdoob/three.js/issues/17706 + materialParams.depthWrite = false; + + } else { + + materialParams.transparent = false; + + if ( alphaMode === ALPHA_MODES.MASK ) { + + materialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5; + + } + + } + + if ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) { + + pending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) ); + + materialParams.normalScale = new Vector2( 1, 1 ); + + if ( materialDef.normalTexture.scale !== undefined ) { + + materialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale ); + + } + + } + + if ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) { + + pending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) ); + + if ( materialDef.occlusionTexture.strength !== undefined ) { + + materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; + + } + + } + + if ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) { + + materialParams.emissive = new Color().fromArray( materialDef.emissiveFactor ); + + } + + if ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) { + + pending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) ); + + } + + return Promise.all( pending ).then( function () { + + var material; + + if ( materialType === GLTFMeshStandardSGMaterial ) { + + material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams ); + + } else { + + material = new materialType( materialParams ); + + } + + if ( materialDef.name ) material.name = materialDef.name; + + // baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding. + if ( material.map ) material.map.encoding = sRGBEncoding; + if ( material.emissiveMap ) material.emissiveMap.encoding = sRGBEncoding; + + assignExtrasToUserData( material, materialDef ); + + parser.associations.set( material, { type: 'materials', index: materialIndex } ); + + if ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef ); + + return material; + + } ); + + }; + + /** When Object3D instances are targeted by animation, they need unique names. */ + GLTFParser.prototype.createUniqueName = function ( originalName ) { + + var sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' ); + + var name = sanitizedName; + + for ( var i = 1; this.nodeNamesUsed[ name ]; ++ i ) { + + name = sanitizedName + '_' + i; + + } + + this.nodeNamesUsed[ name ] = true; + + return name; + + }; + + /** + * @param {BufferGeometry} geometry + * @param {GLTF.Primitive} primitiveDef + * @param {GLTFParser} parser + */ + function computeBounds( geometry, primitiveDef, parser ) { + + var attributes = primitiveDef.attributes; + + var box = new Box3(); + + if ( attributes.POSITION !== undefined ) { + + var accessor = parser.json.accessors[ attributes.POSITION ]; + + var min = accessor.min; + var max = accessor.max; + + // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement. + + if ( min !== undefined && max !== undefined ) { + + box.set( + new Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ), + new Vector3( max[ 0 ], max[ 1 ], max[ 2 ] ) ); + + } else { + + console.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' ); + + return; + + } + + } else { + + return; + + } + + var targets = primitiveDef.targets; + + if ( targets !== undefined ) { + + var maxDisplacement = new Vector3(); + var vector = new Vector3(); + + for ( var i = 0, il = targets.length; i < il; i ++ ) { + + var target = targets[ i ]; + + if ( target.POSITION !== undefined ) { + + var accessor = parser.json.accessors[ target.POSITION ]; + var min = accessor.min; + var max = accessor.max; + + // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement. + + if ( min !== undefined && max !== undefined ) { + + // we need to get max of absolute components because target weight is [-1,1] + vector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) ); + vector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) ); + vector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) ); + + // Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative + // to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets + // are used to implement key-frame animations and as such only two are active at a time - this results in very large + // boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size. + maxDisplacement.max( vector ); + + } else { + + console.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' ); + + } + + } + + } + + // As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets. + box.expandByVector( maxDisplacement ); + + } + + geometry.boundingBox = box; + + var sphere = new Sphere(); + + box.getCenter( sphere.center ); + sphere.radius = box.min.distanceTo( box.max ) / 2; + + geometry.boundingSphere = sphere; + + } + + /** + * @param {BufferGeometry} geometry + * @param {GLTF.Primitive} primitiveDef + * @param {GLTFParser} parser + * @return {Promise} + */ + function addPrimitiveAttributes( geometry, primitiveDef, parser ) { + + var attributes = primitiveDef.attributes; + + var pending = []; + + function assignAttributeAccessor( accessorIndex, attributeName ) { + + return parser.getDependency( 'accessor', accessorIndex ) + .then( function ( accessor ) { + + geometry.setAttribute( attributeName, accessor ); + + } ); + + } + + for ( var gltfAttributeName in attributes ) { + + var threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase(); + + // Skip attributes already provided by e.g. Draco extension. + if ( threeAttributeName in geometry.attributes ) continue; + + pending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) ); + + } + + if ( primitiveDef.indices !== undefined && ! geometry.index ) { + + var accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) { + + geometry.setIndex( accessor ); + + } ); + + pending.push( accessor ); + + } + + assignExtrasToUserData( geometry, primitiveDef ); + + computeBounds( geometry, primitiveDef, parser ); + + return Promise.all( pending ).then( function () { + + return primitiveDef.targets !== undefined + ? addMorphTargets( geometry, primitiveDef.targets, parser ) + : geometry; + + } ); + + } + + /** + * @param {BufferGeometry} geometry + * @param {Number} drawMode + * @return {BufferGeometry} + */ + function toTrianglesDrawMode( geometry, drawMode ) { + + var index = geometry.getIndex(); + + // generate index if not present + + if ( index === null ) { + + var indices = []; + + var position = geometry.getAttribute( 'position' ); + + if ( position !== undefined ) { + + for ( var i = 0; i < position.count; i ++ ) { + + indices.push( i ); + + } + + geometry.setIndex( indices ); + index = geometry.getIndex(); + + } else { + + console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' ); + return geometry; + + } + + } + + // + + var numberOfTriangles = index.count - 2; + var newIndices = []; + + if ( drawMode === TriangleFanDrawMode ) { + + // gl.TRIANGLE_FAN + + for ( var i = 1; i <= numberOfTriangles; i ++ ) { + + newIndices.push( index.getX( 0 ) ); + newIndices.push( index.getX( i ) ); + newIndices.push( index.getX( i + 1 ) ); + + } + + } else { + + // gl.TRIANGLE_STRIP + + for ( var i = 0; i < numberOfTriangles; i ++ ) { + + if ( i % 2 === 0 ) { + + newIndices.push( index.getX( i ) ); + newIndices.push( index.getX( i + 1 ) ); + newIndices.push( index.getX( i + 2 ) ); + + + } else { + + newIndices.push( index.getX( i + 2 ) ); + newIndices.push( index.getX( i + 1 ) ); + newIndices.push( index.getX( i ) ); + + } + + } + + } + + if ( ( newIndices.length / 3 ) !== numberOfTriangles ) { + + console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' ); + + } + + // build final geometry + + var newGeometry = geometry.clone(); + newGeometry.setIndex( newIndices ); + + return newGeometry; + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry + * + * Creates BufferGeometries from primitives. + * + * @param {Array} primitives + * @return {Promise>} + */ + GLTFParser.prototype.loadGeometries = function ( primitives ) { + + var parser = this; + var extensions = this.extensions; + var cache = this.primitiveCache; + + function createDracoPrimitive( primitive ) { + + return extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] + .decodePrimitive( primitive, parser ) + .then( function ( geometry ) { + + return addPrimitiveAttributes( geometry, primitive, parser ); + + } ); + + } + + var pending = []; + + for ( var i = 0, il = primitives.length; i < il; i ++ ) { + + var primitive = primitives[ i ]; + var cacheKey = createPrimitiveKey( primitive ); + + // See if we've already created this geometry + var cached = cache[ cacheKey ]; + + if ( cached ) { + + // Use the cached geometry if it exists + pending.push( cached.promise ); + + } else { + + var geometryPromise; + + if ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) { + + // Use DRACO geometry if available + geometryPromise = createDracoPrimitive( primitive ); + + } else { + + // Otherwise create a new geometry + geometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser ); + + } + + // Cache this geometry + cache[ cacheKey ] = { primitive: primitive, promise: geometryPromise }; + + pending.push( geometryPromise ); + + } + + } + + return Promise.all( pending ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + * @param {number} meshIndex + * @return {Promise} + */ + GLTFParser.prototype.loadMesh = function ( meshIndex ) { + + var parser = this; + var json = this.json; + var extensions = this.extensions; + + var meshDef = json.meshes[ meshIndex ]; + var primitives = meshDef.primitives; + + var pending = []; + + for ( var i = 0, il = primitives.length; i < il; i ++ ) { + + var material = primitives[ i ].material === undefined + ? createDefaultMaterial( this.cache ) + : this.getDependency( 'material', primitives[ i ].material ); + + pending.push( material ); + + } + + pending.push( parser.loadGeometries( primitives ) ); + + return Promise.all( pending ).then( function ( results ) { + + var materials = results.slice( 0, results.length - 1 ); + var geometries = results[ results.length - 1 ]; + + var meshes = []; + + for ( var i = 0, il = geometries.length; i < il; i ++ ) { + + var geometry = geometries[ i ]; + var primitive = primitives[ i ]; + + // 1. create Mesh + + var mesh; + + var material = materials[ i ]; + + if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || + primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || + primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || + primitive.mode === undefined ) { + + // .isSkinnedMesh isn't in glTF spec. See ._markDefs() + mesh = meshDef.isSkinnedMesh === true + ? new SkinnedMesh( geometry, material ) + : new Mesh( geometry, material ); + + if ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) { + + // we normalize floating point skin weight array to fix malformed assets (see #15319) + // it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs + mesh.normalizeSkinWeights(); + + } + + if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) { + + mesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) { + + mesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode ); + + } + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) { + + mesh = new LineSegments( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) { + + mesh = new Line( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) { + + mesh = new LineLoop( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) { + + mesh = new Points( geometry, material ); + + } else { + + throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode ); + + } + + if ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) { + + updateMorphTargets( mesh, meshDef ); + + } + + mesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) ); + + assignExtrasToUserData( mesh, meshDef ); + + if ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive ); + + parser.assignFinalMaterial( mesh ); + + meshes.push( mesh ); + + } + + if ( meshes.length === 1 ) { + + return meshes[ 0 ]; + + } + + var group = new Group(); + + for ( var i = 0, il = meshes.length; i < il; i ++ ) { + + group.add( meshes[ i ] ); + + } + + return group; + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + * @param {number} cameraIndex + * @return {Promise} + */ + GLTFParser.prototype.loadCamera = function ( cameraIndex ) { + + var camera; + var cameraDef = this.json.cameras[ cameraIndex ]; + var params = cameraDef[ cameraDef.type ]; + + if ( ! params ) { + + console.warn( 'THREE.GLTFLoader: Missing camera parameters.' ); + return; + + } + + if ( cameraDef.type === 'perspective' ) { + + camera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 ); + + } else if ( cameraDef.type === 'orthographic' ) { + + camera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar ); + + } + + if ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name ); + + assignExtrasToUserData( camera, cameraDef ); + + return Promise.resolve( camera ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins + * @param {number} skinIndex + * @return {Promise} + */ + GLTFParser.prototype.loadSkin = function ( skinIndex ) { + + var skinDef = this.json.skins[ skinIndex ]; + + var skinEntry = { joints: skinDef.joints }; + + if ( skinDef.inverseBindMatrices === undefined ) { + + return Promise.resolve( skinEntry ); + + } + + return this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) { + + skinEntry.inverseBindMatrices = accessor; + + return skinEntry; + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations + * @param {number} animationIndex + * @return {Promise} + */ + GLTFParser.prototype.loadAnimation = function ( animationIndex ) { + + var json = this.json; + + var animationDef = json.animations[ animationIndex ]; + + var pendingNodes = []; + var pendingInputAccessors = []; + var pendingOutputAccessors = []; + var pendingSamplers = []; + var pendingTargets = []; + + for ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) { + + var channel = animationDef.channels[ i ]; + var sampler = animationDef.samplers[ channel.sampler ]; + var target = channel.target; + var name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated. + var input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input; + var output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output; + + pendingNodes.push( this.getDependency( 'node', name ) ); + pendingInputAccessors.push( this.getDependency( 'accessor', input ) ); + pendingOutputAccessors.push( this.getDependency( 'accessor', output ) ); + pendingSamplers.push( sampler ); + pendingTargets.push( target ); + + } + + return Promise.all( [ + + Promise.all( pendingNodes ), + Promise.all( pendingInputAccessors ), + Promise.all( pendingOutputAccessors ), + Promise.all( pendingSamplers ), + Promise.all( pendingTargets ) + + ] ).then( function ( dependencies ) { + + var nodes = dependencies[ 0 ]; + var inputAccessors = dependencies[ 1 ]; + var outputAccessors = dependencies[ 2 ]; + var samplers = dependencies[ 3 ]; + var targets = dependencies[ 4 ]; + + var tracks = []; + + for ( var i = 0, il = nodes.length; i < il; i ++ ) { + + var node = nodes[ i ]; + var inputAccessor = inputAccessors[ i ]; + var outputAccessor = outputAccessors[ i ]; + var sampler = samplers[ i ]; + var target = targets[ i ]; + + if ( node === undefined ) continue; + + node.updateMatrix(); + node.matrixAutoUpdate = true; + + var TypedKeyframeTrack; + + switch ( PATH_PROPERTIES[ target.path ] ) { + + case PATH_PROPERTIES.weights: + + TypedKeyframeTrack = NumberKeyframeTrack; + break; + + case PATH_PROPERTIES.rotation: + + TypedKeyframeTrack = QuaternionKeyframeTrack; + break; + + case PATH_PROPERTIES.position: + case PATH_PROPERTIES.scale: + default: + + TypedKeyframeTrack = VectorKeyframeTrack; + break; + + } + + var targetName = node.name ? node.name : node.uuid; + + var interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear; + + var targetNames = []; + + if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) { + + // Node may be a Group (glTF mesh with several primitives) or a Mesh. + node.traverse( function ( object ) { + + if ( object.isMesh === true && object.morphTargetInfluences ) { + + targetNames.push( object.name ? object.name : object.uuid ); + + } + + } ); + + } else { + + targetNames.push( targetName ); + + } + + var outputArray = outputAccessor.array; + + if ( outputAccessor.normalized ) { + + var scale; + + if ( outputArray.constructor === Int8Array ) { + + scale = 1 / 127; + + } else if ( outputArray.constructor === Uint8Array ) { + + scale = 1 / 255; + + } else if ( outputArray.constructor == Int16Array ) { + + scale = 1 / 32767; + + } else if ( outputArray.constructor === Uint16Array ) { + + scale = 1 / 65535; + + } else { + + throw new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' ); + + } + + var scaled = new Float32Array( outputArray.length ); + + for ( var j = 0, jl = outputArray.length; j < jl; j ++ ) { + + scaled[ j ] = outputArray[ j ] * scale; + + } + + outputArray = scaled; + + } + + for ( var j = 0, jl = targetNames.length; j < jl; j ++ ) { + + var track = new TypedKeyframeTrack( + targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ], + inputAccessor.array, + outputArray, + interpolation + ); + + // Override interpolation with custom factory method. + if ( sampler.interpolation === 'CUBICSPLINE' ) { + + track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) { + + // A CUBICSPLINE keyframe in glTF has three output values for each input value, + // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize() + // must be divided by three to get the interpolant's sampleSize argument. + + return new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result ); + + }; + + // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants. + track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; + + } + + tracks.push( track ); + + } + + } + + var name = animationDef.name ? animationDef.name : 'animation_' + animationIndex; + + return new AnimationClip( name, undefined, tracks ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy + * @param {number} nodeIndex + * @return {Promise} + */ + GLTFParser.prototype.loadNode = function ( nodeIndex ) { + + var json = this.json; + var extensions = this.extensions; + var parser = this; + + var nodeDef = json.nodes[ nodeIndex ]; + + // reserve node's name before its dependencies, so the root has the intended name. + var nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : ''; + + return ( function () { + + var pending = []; + + if ( nodeDef.mesh !== undefined ) { + + pending.push( parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) { + + var node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh ); + + // if weights are provided on the node, override weights on the mesh. + if ( nodeDef.weights !== undefined ) { + + node.traverse( function ( o ) { + + if ( ! o.isMesh ) return; + + for ( var i = 0, il = nodeDef.weights.length; i < il; i ++ ) { + + o.morphTargetInfluences[ i ] = nodeDef.weights[ i ]; + + } + + } ); + + } + + return node; + + } ) ); + + } + + if ( nodeDef.camera !== undefined ) { + + pending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) { + + return parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera ); + + } ) ); + + } + + parser._invokeAll( function ( ext ) { + + return ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex ); + + } ).forEach( function ( promise ) { + + pending.push( promise ); + + } ); + + return Promise.all( pending ); + + }() ).then( function ( objects ) { + + var node; + + // .isBone isn't in glTF spec. See ._markDefs + if ( nodeDef.isBone === true ) { + + node = new Bone(); + + } else if ( objects.length > 1 ) { + + node = new Group(); + + } else if ( objects.length === 1 ) { + + node = objects[ 0 ]; + + } else { + + node = new Object3D(); + + } + + if ( node !== objects[ 0 ] ) { + + for ( var i = 0, il = objects.length; i < il; i ++ ) { + + node.add( objects[ i ] ); + + } + + } + + if ( nodeDef.name ) { + + node.userData.name = nodeDef.name; + node.name = nodeName; + + } + + assignExtrasToUserData( node, nodeDef ); + + if ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef ); + + if ( nodeDef.matrix !== undefined ) { + + var matrix = new Matrix4(); + matrix.fromArray( nodeDef.matrix ); + node.applyMatrix4( matrix ); + + } else { + + if ( nodeDef.translation !== undefined ) { + + node.position.fromArray( nodeDef.translation ); + + } + + if ( nodeDef.rotation !== undefined ) { + + node.quaternion.fromArray( nodeDef.rotation ); + + } + + if ( nodeDef.scale !== undefined ) { + + node.scale.fromArray( nodeDef.scale ); + + } + + } + + parser.associations.set( node, { type: 'nodes', index: nodeIndex } ); + + return node; + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes + * @param {number} sceneIndex + * @return {Promise} + */ + GLTFParser.prototype.loadScene = function () { + + // scene node hierachy builder + + function buildNodeHierachy( nodeId, parentObject, json, parser ) { + + var nodeDef = json.nodes[ nodeId ]; + + return parser.getDependency( 'node', nodeId ).then( function ( node ) { + + if ( nodeDef.skin === undefined ) return node; + + // build skeleton here as well + + var skinEntry; + + return parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) { + + skinEntry = skin; + + var pendingJoints = []; + + for ( var i = 0, il = skinEntry.joints.length; i < il; i ++ ) { + + pendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) ); + + } + + return Promise.all( pendingJoints ); + + } ).then( function ( jointNodes ) { + + node.traverse( function ( mesh ) { + + if ( ! mesh.isMesh ) return; + + var bones = []; + var boneInverses = []; + + for ( var j = 0, jl = jointNodes.length; j < jl; j ++ ) { + + var jointNode = jointNodes[ j ]; + + if ( jointNode ) { + + bones.push( jointNode ); + + var mat = new Matrix4(); + + if ( skinEntry.inverseBindMatrices !== undefined ) { + + mat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 ); + + } + + boneInverses.push( mat ); + + } else { + + console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', skinEntry.joints[ j ] ); + + } + + } + + mesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld ); + + } ); + + return node; + + } ); + + } ).then( function ( node ) { + + // build node hierachy + + parentObject.add( node ); + + var pending = []; + + if ( nodeDef.children ) { + + var children = nodeDef.children; + + for ( var i = 0, il = children.length; i < il; i ++ ) { + + var child = children[ i ]; + pending.push( buildNodeHierachy( child, node, json, parser ) ); + + } + + } + + return Promise.all( pending ); + + } ); + + } + + return function loadScene( sceneIndex ) { + + var json = this.json; + var extensions = this.extensions; + var sceneDef = this.json.scenes[ sceneIndex ]; + var parser = this; + + // Loader returns Group, not Scene. + // See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172 + var scene = new Group(); + if ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name ); + + assignExtrasToUserData( scene, sceneDef ); + + if ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef ); + + var nodeIds = sceneDef.nodes || []; + + var pending = []; + + for ( var i = 0, il = nodeIds.length; i < il; i ++ ) { + + pending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) ); + + } + + return Promise.all( pending ).then( function () { + + return scene; + + } ); + + }; + + }(); + + return GLTFLoader; + + } )(); + + /** + * @webxr-input-profiles/motion-controllers 1.0.0 https://github.com/immersive-web/webxr-input-profiles + */ + + const Constants = { + Handedness: Object.freeze({ + NONE: 'none', + LEFT: 'left', + RIGHT: 'right' + }), + + ComponentState: Object.freeze({ + DEFAULT: 'default', + TOUCHED: 'touched', + PRESSED: 'pressed' + }), + + ComponentProperty: Object.freeze({ + BUTTON: 'button', + X_AXIS: 'xAxis', + Y_AXIS: 'yAxis', + STATE: 'state' + }), + + ComponentType: Object.freeze({ + TRIGGER: 'trigger', + SQUEEZE: 'squeeze', + TOUCHPAD: 'touchpad', + THUMBSTICK: 'thumbstick', + BUTTON: 'button' + }), + + ButtonTouchThreshold: 0.05, + + AxisTouchThreshold: 0.1, + + VisualResponseProperty: Object.freeze({ + TRANSFORM: 'transform', + VISIBILITY: 'visibility' + }) + }; + + /** + * @description Static helper function to fetch a JSON file and turn it into a JS object + * @param {string} path - Path to JSON file to be fetched + */ + async function fetchJsonFile(path) { + const response = await fetch(path); + if (!response.ok) { + throw new Error(response.statusText); + } else { + return response.json(); + } + } + + async function fetchProfilesList(basePath) { + if (!basePath) { + throw new Error('No basePath supplied'); + } + + const profileListFileName = 'profilesList.json'; + const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`); + return profilesList; + } + + async function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) { + if (!xrInputSource) { + throw new Error('No xrInputSource supplied'); + } + + if (!basePath) { + throw new Error('No basePath supplied'); + } + + // Get the list of profiles + const supportedProfilesList = await fetchProfilesList(basePath); + + // Find the relative path to the first requested profile that is recognized + let match; + xrInputSource.profiles.some((profileId) => { + const supportedProfile = supportedProfilesList[profileId]; + if (supportedProfile) { + match = { + profileId, + profilePath: `${basePath}/${supportedProfile.path}`, + deprecated: !!supportedProfile.deprecated + }; + } + return !!match; + }); + + if (!match) { + if (!defaultProfile) { + throw new Error('No matching profile name found'); + } + + const supportedProfile = supportedProfilesList[defaultProfile]; + if (!supportedProfile) { + throw new Error(`No matching profile name found and default profile "${defaultProfile}" missing.`); + } + + match = { + profileId: defaultProfile, + profilePath: `${basePath}/${supportedProfile.path}`, + deprecated: !!supportedProfile.deprecated + }; + } + + const profile = await fetchJsonFile(match.profilePath); + + let assetPath; + if (getAssetPath) { + let layout; + if (xrInputSource.handedness === 'any') { + layout = profile.layouts[Object.keys(profile.layouts)[0]]; + } else { + layout = profile.layouts[xrInputSource.handedness]; + } + if (!layout) { + throw new Error( + `No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}` + ); + } + + if (layout.assetPath) { + assetPath = match.profilePath.replace('profile.json', layout.assetPath); + } + } + + return { profile, assetPath }; + } + + /** @constant {Object} */ + const defaultComponentValues = { + xAxis: 0, + yAxis: 0, + button: 0, + state: Constants.ComponentState.DEFAULT + }; + + /** + * @description Converts an X, Y coordinate from the range -1 to 1 (as reported by the Gamepad + * API) to the range 0 to 1 (for interpolation). Also caps the X, Y values to be bounded within + * a circle. This ensures that thumbsticks are not animated outside the bounds of their physical + * range of motion and touchpads do not report touch locations off their physical bounds. + * @param {number} x The original x coordinate in the range -1 to 1 + * @param {number} y The original y coordinate in the range -1 to 1 + */ + function normalizeAxes(x = 0, y = 0) { + let xAxis = x; + let yAxis = y; + + // Determine if the point is outside the bounds of the circle + // and, if so, place it on the edge of the circle + const hypotenuse = Math.sqrt((x * x) + (y * y)); + if (hypotenuse > 1) { + const theta = Math.atan2(y, x); + xAxis = Math.cos(theta); + yAxis = Math.sin(theta); + } + + // Scale and move the circle so values are in the interpolation range. The circle's origin moves + // from (0, 0) to (0.5, 0.5). The circle's radius scales from 1 to be 0.5. + const result = { + normalizedXAxis: (xAxis * 0.5) + 0.5, + normalizedYAxis: (yAxis * 0.5) + 0.5 + }; + return result; + } + + /** + * Contains the description of how the 3D model should visually respond to a specific user input. + * This is accomplished by initializing the object with the name of a node in the 3D model and + * property that need to be modified in response to user input, the name of the nodes representing + * the allowable range of motion, and the name of the input which triggers the change. In response + * to the named input changing, this object computes the appropriate weighting to use for + * interpolating between the range of motion nodes. + */ + class VisualResponse { + constructor(visualResponseDescription) { + this.componentProperty = visualResponseDescription.componentProperty; + this.states = visualResponseDescription.states; + this.valueNodeName = visualResponseDescription.valueNodeName; + this.valueNodeProperty = visualResponseDescription.valueNodeProperty; + + if (this.valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM) { + this.minNodeName = visualResponseDescription.minNodeName; + this.maxNodeName = visualResponseDescription.maxNodeName; + } + + // Initializes the response's current value based on default data + this.value = 0; + this.updateFromComponent(defaultComponentValues); + } + + /** + * Computes the visual response's interpolation weight based on component state + * @param {Object} componentValues - The component from which to update + * @param {number} xAxis - The reported X axis value of the component + * @param {number} yAxis - The reported Y axis value of the component + * @param {number} button - The reported value of the component's button + * @param {string} state - The component's active state + */ + updateFromComponent({ + xAxis, yAxis, button, state + }) { + const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis); + switch (this.componentProperty) { + case Constants.ComponentProperty.X_AXIS: + this.value = (this.states.includes(state)) ? normalizedXAxis : 0.5; + break; + case Constants.ComponentProperty.Y_AXIS: + this.value = (this.states.includes(state)) ? normalizedYAxis : 0.5; + break; + case Constants.ComponentProperty.BUTTON: + this.value = (this.states.includes(state)) ? button : 0; + break; + case Constants.ComponentProperty.STATE: + if (this.valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY) { + this.value = (this.states.includes(state)); + } else { + this.value = this.states.includes(state) ? 1.0 : 0.0; + } + break; + default: + throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`); + } + } + } + + class Component { + /** + * @param {Object} componentId - Id of the component + * @param {Object} componentDescription - Description of the component to be created + */ + constructor(componentId, componentDescription) { + if (!componentId + || !componentDescription + || !componentDescription.visualResponses + || !componentDescription.gamepadIndices + || Object.keys(componentDescription.gamepadIndices).length === 0) { + throw new Error('Invalid arguments supplied'); + } + + this.id = componentId; + this.type = componentDescription.type; + this.rootNodeName = componentDescription.rootNodeName; + this.touchPointNodeName = componentDescription.touchPointNodeName; + + // Build all the visual responses for this component + this.visualResponses = {}; + Object.keys(componentDescription.visualResponses).forEach((responseName) => { + const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]); + this.visualResponses[responseName] = visualResponse; + }); + + // Set default values + this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices); + + this.values = { + state: Constants.ComponentState.DEFAULT, + button: (this.gamepadIndices.button !== undefined) ? 0 : undefined, + xAxis: (this.gamepadIndices.xAxis !== undefined) ? 0 : undefined, + yAxis: (this.gamepadIndices.yAxis !== undefined) ? 0 : undefined + }; + } + + get data() { + const data = { id: this.id, ...this.values }; + return data; + } + + /** + * @description Poll for updated data based on current gamepad state + * @param {Object} gamepad - The gamepad object from which the component data should be polled + */ + updateFromGamepad(gamepad) { + // Set the state to default before processing other data sources + this.values.state = Constants.ComponentState.DEFAULT; + + // Get and normalize button + if (this.gamepadIndices.button !== undefined + && gamepad.buttons.length > this.gamepadIndices.button) { + const gamepadButton = gamepad.buttons[this.gamepadIndices.button]; + this.values.button = gamepadButton.value; + this.values.button = (this.values.button < 0) ? 0 : this.values.button; + this.values.button = (this.values.button > 1) ? 1 : this.values.button; + + // Set the state based on the button + if (gamepadButton.pressed || this.values.button === 1) { + this.values.state = Constants.ComponentState.PRESSED; + } else if (gamepadButton.touched || this.values.button > Constants.ButtonTouchThreshold) { + this.values.state = Constants.ComponentState.TOUCHED; + } + } + + // Get and normalize x axis value + if (this.gamepadIndices.xAxis !== undefined + && gamepad.axes.length > this.gamepadIndices.xAxis) { + this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis]; + this.values.xAxis = (this.values.xAxis < -1) ? -1 : this.values.xAxis; + this.values.xAxis = (this.values.xAxis > 1) ? 1 : this.values.xAxis; + + // If the state is still default, check if the xAxis makes it touched + if (this.values.state === Constants.ComponentState.DEFAULT + && Math.abs(this.values.xAxis) > Constants.AxisTouchThreshold) { + this.values.state = Constants.ComponentState.TOUCHED; + } + } + + // Get and normalize Y axis value + if (this.gamepadIndices.yAxis !== undefined + && gamepad.axes.length > this.gamepadIndices.yAxis) { + this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis]; + this.values.yAxis = (this.values.yAxis < -1) ? -1 : this.values.yAxis; + this.values.yAxis = (this.values.yAxis > 1) ? 1 : this.values.yAxis; + + // If the state is still default, check if the yAxis makes it touched + if (this.values.state === Constants.ComponentState.DEFAULT + && Math.abs(this.values.yAxis) > Constants.AxisTouchThreshold) { + this.values.state = Constants.ComponentState.TOUCHED; + } + } + + // Update the visual response weights based on the current component data + Object.values(this.visualResponses).forEach((visualResponse) => { + visualResponse.updateFromComponent(this.values); + }); + } + } + + /** + * @description Builds a motion controller with components and visual responses based on the + * supplied profile description. Data is polled from the xrInputSource's gamepad. + * @author Nell Waliczek / https://github.com/NellWaliczek + */ + class MotionController { + /** + * @param {Object} xrInputSource - The XRInputSource to build the MotionController around + * @param {Object} profile - The best matched profile description for the supplied xrInputSource + * @param {Object} assetUrl + */ + constructor(xrInputSource, profile, assetUrl) { + if (!xrInputSource) { + throw new Error('No xrInputSource supplied'); + } + + if (!profile) { + throw new Error('No profile supplied'); + } + + this.xrInputSource = xrInputSource; + this.assetUrl = assetUrl; + this.id = profile.profileId; + + // Build child components as described in the profile description + this.layoutDescription = profile.layouts[xrInputSource.handedness]; + this.components = {}; + Object.keys(this.layoutDescription.components).forEach((componentId) => { + const componentDescription = this.layoutDescription.components[componentId]; + this.components[componentId] = new Component(componentId, componentDescription); + }); + + // Initialize components based on current gamepad state + this.updateFromGamepad(); + } + + get gripSpace() { + return this.xrInputSource.gripSpace; + } + + get targetRaySpace() { + return this.xrInputSource.targetRaySpace; + } + + /** + * @description Returns a subset of component data for simplified debugging + */ + get data() { + const data = []; + Object.values(this.components).forEach((component) => { + data.push(component.data); + }); + return data; + } + + /** + * @description Poll for updated data based on current gamepad state + */ + updateFromGamepad() { + Object.values(this.components).forEach((component) => { + component.updateFromGamepad(this.xrInputSource.gamepad); + }); + } + } + + const DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles'; + const DEFAULT_PROFILE = 'generic-trigger'; + + function XRControllerModel( ) { + + Object3D.call( this ); + + this.motionController = null; + this.envMap = null; + + } + + XRControllerModel.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: XRControllerModel, + + setEnvironmentMap: function ( envMap ) { + + if ( this.envMap == envMap ) { + + return this; + + } + + this.envMap = envMap; + this.traverse( ( child ) => { + + if ( child.isMesh ) { + + child.material.envMap = this.envMap; + child.material.needsUpdate = true; + + } + + } ); + + return this; + + }, + + /** + * Polls data from the XRInputSource and updates the model's components to match + * the real world data + */ + updateMatrixWorld: function ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + if ( ! this.motionController ) return; + + // Cause the MotionController to poll the Gamepad for data + this.motionController.updateFromGamepad(); + + // Update the 3D model to reflect the button, thumbstick, and touchpad state + Object.values( this.motionController.components ).forEach( ( component ) => { + + // Update node data based on the visual responses' current states + Object.values( component.visualResponses ).forEach( ( visualResponse ) => { + + const { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse; + + // Skip if the visual response node is not found. No error is needed, + // because it will have been reported at load time. + if ( ! valueNode ) return; + + // Calculate the new properties based on the weight supplied + if ( valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY ) { + + valueNode.visible = value; + + } else if ( valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM ) { + + Quaternion.slerp( + minNode.quaternion, + maxNode.quaternion, + valueNode.quaternion, + value + ); + + valueNode.position.lerpVectors( + minNode.position, + maxNode.position, + value + ); + + } + + } ); + + } ); + + } + + } ); + + /** + * Walks the model's tree to find the nodes needed to animate the components and + * saves them to the motionContoller components for use in the frame loop. When + * touchpads are found, attaches a touch dot to them. + */ + function findNodes( motionController, scene ) { + + // Loop through the components and find the nodes needed for each components' visual responses + Object.values( motionController.components ).forEach( ( component ) => { + + const { type, touchPointNodeName, visualResponses } = component; + + if ( type === Constants.ComponentType.TOUCHPAD ) { + + component.touchPointNode = scene.getObjectByName( touchPointNodeName ); + if ( component.touchPointNode ) { + + // Attach a touch dot to the touchpad. + const sphereGeometry = new SphereBufferGeometry( 0.001 ); + const material = new MeshBasicMaterial( { color: 0x0000FF } ); + const sphere = new Mesh( sphereGeometry, material ); + component.touchPointNode.add( sphere ); + + } else { + + console.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` ); + + } + + } + + // Loop through all the visual responses to be applied to this component + Object.values( visualResponses ).forEach( ( visualResponse ) => { + + const { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse; + + // If animating a transform, find the two nodes to be interpolated between. + if ( valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM ) { + + visualResponse.minNode = scene.getObjectByName( minNodeName ); + visualResponse.maxNode = scene.getObjectByName( maxNodeName ); + + // If the extents cannot be found, skip this animation + if ( ! visualResponse.minNode ) { + + console.warn( `Could not find ${minNodeName} in the model` ); + return; + + } + + if ( ! visualResponse.maxNode ) { + + console.warn( `Could not find ${maxNodeName} in the model` ); + return; + + } + + } + + // If the target node cannot be found, skip this animation + visualResponse.valueNode = scene.getObjectByName( valueNodeName ); + if ( ! visualResponse.valueNode ) { + + console.warn( `Could not find ${valueNodeName} in the model` ); + + } + + } ); + + } ); + + } + + function addAssetSceneToControllerModel( controllerModel, scene ) { + + // Find the nodes needed for animation and cache them on the motionController. + findNodes( controllerModel.motionController, scene ); + + // Apply any environment map that the mesh already has set. + if ( controllerModel.envMap ) { + + scene.traverse( ( child ) => { + + if ( child.isMesh ) { + + child.material.envMap = controllerModel.envMap; + child.material.needsUpdate = true; + + } + + } ); + + } + + // Add the glTF scene to the controllerModel. + controllerModel.add( scene ); + + } + + var XRControllerModelFactory = ( function () { + + function XRControllerModelFactory( gltfLoader = null ) { + + this.gltfLoader = gltfLoader; + this.path = DEFAULT_PROFILES_PATH; + this._assetCache = {}; + + // If a GLTFLoader wasn't supplied to the constructor create a new one. + if ( ! this.gltfLoader ) { + + this.gltfLoader = new GLTFLoader(); + + } + + } + + XRControllerModelFactory.prototype = { + + constructor: XRControllerModelFactory, + + createControllerModel: function ( controller ) { + + const controllerModel = new XRControllerModel(); + let scene = null; + + controller.addEventListener( 'connected', ( event ) => { + + const xrInputSource = event.data; + + if ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return; + + fetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => { + + controllerModel.motionController = new MotionController( + xrInputSource, + profile, + assetPath + ); + + const cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ]; + if ( cachedAsset ) { + + scene = cachedAsset.scene.clone(); + + addAssetSceneToControllerModel( controllerModel, scene ); + + } else { + + if ( ! this.gltfLoader ) { + + throw new Error( 'GLTFLoader not set.' ); + + } + + this.gltfLoader.setPath( '' ); + this.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => { + + this._assetCache[ controllerModel.motionController.assetUrl ] = asset; + + scene = asset.scene.clone(); + + addAssetSceneToControllerModel( controllerModel, scene ); + + }, + null, + () => { + + throw new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` ); + + } ); + + } + + } ).catch( ( err ) => { + + console.warn( err ); + + } ); + + } ); + + controller.addEventListener( 'disconnected', () => { + + controllerModel.motionController = null; + controllerModel.remove( scene ); + scene = null; + + } ); + + return controllerModel; + + } + + }; + + return XRControllerModelFactory; + + } )(); + + let fakeCam = new PerspectiveCamera(); + + function toScene(vec, ref){ + let node = ref.clone(); + node.updateMatrix(); + node.updateMatrixWorld(); + + let result = vec.clone().applyMatrix4(node.matrix); + result.z -= 0.8 * node.scale.x; + + return result; + }; + + function computeMove(vrControls, controller){ + + if(!controller || !controller.inputSource || !controller.inputSource.gamepad){ + return null; + } + + let pad = controller.inputSource.gamepad; + + let axes = pad.axes; + // [0,1] are for touchpad, [2,3] for thumbsticks? + let y = 0; + if(axes.length === 2){ + y = axes[1]; + }else if(axes.length === 4){ + y = axes[3]; + } + + y = Math.sign(y) * (2 * y) ** 2; + + let maxSize = 0; + for(let pc of viewer.scene.pointclouds){ + let size = pc.boundingBox.min.distanceTo(pc.boundingBox.max); + maxSize = Math.max(maxSize, size); + } + let multiplicator = Math.pow(maxSize, 0.5) / 2; + + let scale = vrControls.node.scale.x; + let moveSpeed = viewer.getMoveSpeed(); + let amount = multiplicator * y * (moveSpeed ** 0.5) / scale; + + + let rotation = new Quaternion().setFromEuler(controller.rotation); + let dir = new Vector3(0, 0, -1); + dir.applyQuaternion(rotation); + + let move = dir.clone().multiplyScalar(amount); + + let p1 = vrControls.toScene(controller.position); + let p2 = vrControls.toScene(controller.position.clone().add(move)); + + move = p2.clone().sub(p1); + + return move; + }; + + + class FlyMode{ + + constructor(vrControls){ + this.moveFactor = 1; + this.dbgLabel = null; + } + + start(vrControls){ + if(!this.dbgLabel){ + this.dbgLabel = new Potree.TextSprite("abc"); + this.dbgLabel.name = "debug label"; + vrControls.viewer.sceneVR.add(this.dbgLabel); + this.dbgLabel.visible = false; + } + } + + end(){ + + } + + update(vrControls, delta){ + + let primary = vrControls.cPrimary; + let secondary = vrControls.cSecondary; + + let move1 = computeMove(vrControls, primary); + let move2 = computeMove(vrControls, secondary); + + + if(!move1){ + move1 = new Vector3(); + } + + if(!move2){ + move2 = new Vector3(); + } + + let move = move1.clone().add(move2); + + move.multiplyScalar(-delta * this.moveFactor); + vrControls.node.position.add(move); + + + let scale = vrControls.node.scale.x; + + let camVR = vrControls.viewer.renderer.xr.getCamera(fakeCam); + + let vrPos = camVR.getWorldPosition(new Vector3()); + let vrDir = camVR.getWorldDirection(new Vector3()); + let vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale)); + + let scenePos = toScene(vrPos, vrControls.node); + let sceneDir = toScene(vrPos.clone().add(vrDir), vrControls.node).sub(scenePos); + sceneDir.normalize().multiplyScalar(scale); + let sceneTarget = scenePos.clone().add(sceneDir); + + vrControls.viewer.scene.view.setView(scenePos, sceneTarget); + + if(Potree.debug.message){ + this.dbgLabel.visible = true; + this.dbgLabel.setText(Potree.debug.message); + this.dbgLabel.scale.set(0.1, 0.1, 0.1); + this.dbgLabel.position.copy(primary.position); + } + } + }; + + class TranslationMode{ + + constructor(){ + this.controller = null; + this.startPos = null; + this.debugLine = null; + } + + start(vrControls){ + this.controller = vrControls.triggered.values().next().value; + this.startPos = vrControls.node.position.clone(); + } + + end(vrControls){ + + } + + update(vrControls, delta){ + + let start = this.controller.start.position; + let end = this.controller.position; + + start = vrControls.toScene(start); + end = vrControls.toScene(end); + + let diff = end.clone().sub(start); + diff.set(-diff.x, -diff.y, -diff.z); + + let pos = new Vector3().addVectors(this.startPos, diff); + + vrControls.node.position.copy(pos); + } + + }; + + class RotScaleMode{ + + constructor(){ + this.line = null; + this.startState = null; + } + + start(vrControls){ + if(!this.line){ + this.line = Potree.Utils.debugLine( + vrControls.viewer.sceneVR, + new Vector3(0, 0, 0), + new Vector3(0, 0, 0), + 0xffff00, + ); + + this.dbgLabel = new Potree.TextSprite("abc"); + this.dbgLabel.scale.set(0.1, 0.1, 0.1); + vrControls.viewer.sceneVR.add(this.dbgLabel); + } + + this.line.node.visible = true; + + this.startState = vrControls.node.clone(); + } + + end(vrControls){ + this.line.node.visible = false; + this.dbgLabel.visible = false; + } + + update(vrControls, delta){ + + let start_c1 = vrControls.cPrimary.start.position.clone(); + let start_c2 = vrControls.cSecondary.start.position.clone(); + let start_center = start_c1.clone().add(start_c2).multiplyScalar(0.5); + let start_c1_c2 = start_c2.clone().sub(start_c1); + let end_c1 = vrControls.cPrimary.position.clone(); + let end_c2 = vrControls.cSecondary.position.clone(); + let end_center = end_c1.clone().add(end_c2).multiplyScalar(0.5); + let end_c1_c2 = end_c2.clone().sub(end_c1); + + let d1 = start_c1_c2.length(); + let d2 = end_c1_c2.length(); + + let angleStart = new Vector2(start_c1_c2.x, start_c1_c2.z).angle(); + let angleEnd = new Vector2(end_c1_c2.x, end_c1_c2.z).angle(); + let angleDiff = angleEnd - angleStart; + + let scale = d2 / d1; + + let node = this.startState.clone(); + node.updateMatrix(); + node.matrixAutoUpdate = false; + + let mToOrigin = new Matrix4().makeTranslation(...toScene(start_center, this.startState).multiplyScalar(-1).toArray()); + let mToStart = new Matrix4().makeTranslation(...toScene(start_center, this.startState).toArray()); + let mRotate = new Matrix4().makeRotationZ(angleDiff); + let mScale = new Matrix4().makeScale(1 / scale, 1 / scale, 1 / scale); + + node.applyMatrix4(mToOrigin); + node.applyMatrix4(mRotate); + node.applyMatrix4(mScale); + node.applyMatrix4(mToStart); + + let oldScenePos = toScene(start_center, this.startState); + let newScenePos = toScene(end_center, node); + let toNew = oldScenePos.clone().sub(newScenePos); + let mToNew = new Matrix4().makeTranslation(...toNew.toArray()); + node.applyMatrix4(mToNew); + + node.matrix.decompose(node.position, node.quaternion, node.scale ); + + vrControls.node.position.copy(node.position); + vrControls.node.quaternion.copy(node.quaternion); + vrControls.node.scale.copy(node.scale); + vrControls.node.updateMatrix(); + + { + let scale = vrControls.node.scale.x; + let camVR = vrControls.viewer.renderer.xr.getCamera(fakeCam); + + let vrPos = camVR.getWorldPosition(new Vector3()); + let vrDir = camVR.getWorldDirection(new Vector3()); + let vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale)); + + let scenePos = toScene(vrPos, this.startState); + let sceneDir = toScene(vrPos.clone().add(vrDir), this.startState).sub(scenePos); + sceneDir.normalize().multiplyScalar(scale); + let sceneTarget = scenePos.clone().add(sceneDir); + + vrControls.viewer.scene.view.setView(scenePos, sceneTarget); + vrControls.viewer.setMoveSpeed(scale); + } + + { // update "GUI" + this.line.set(end_c1, end_c2); + + let scale = vrControls.node.scale.x; + this.dbgLabel.visible = true; + this.dbgLabel.position.copy(end_center); + this.dbgLabel.setText(`scale: 1 : ${scale.toFixed(2)}`); + this.dbgLabel.scale.set(0.05, 0.05, 0.05); + } + + } + + }; + + + class VRControls extends EventDispatcher{ + + constructor(viewer){ + super(viewer); + + this.viewer = viewer; + + viewer.addEventListener("vr_start", this.onStart.bind(this)); + viewer.addEventListener("vr_end", this.onEnd.bind(this)); + + this.node = new Object3D(); + this.node.up.set(0, 0, 1); + this.triggered = new Set(); + + let xr = viewer.renderer.xr; + + { // lights + + const light = new PointLight( 0xffffff, 5, 0, 1 ); + light.position.set(0, 2, 0); + this.viewer.sceneVR.add(light); + } + + this.menu = null; + + const controllerModelFactory = new XRControllerModelFactory(); + + let sg = new SphereGeometry(1, 32, 32); + let sm = new MeshNormalMaterial(); + + { // setup primary controller + let controller = xr.getController(0); + + let grip = xr.getControllerGrip(0); + grip.name = "grip(0)"; + + // ADD CONTROLLERMODEL + grip.add( controllerModelFactory.createControllerModel( grip ) ); + this.viewer.sceneVR.add(grip); + + // ADD SPHERE + let sphere = new Mesh(sg, sm); + sphere.scale.set(0.005, 0.005, 0.005); + + controller.add(sphere); + controller.visible = true; + this.viewer.sceneVR.add(controller); + + { // ADD LINE + + let lineGeometry = new LineGeometry(); + + lineGeometry.setPositions([ + 0, 0, -0.15, + 0, 0, 0.05, + ]); + + let lineMaterial = new LineMaterial({ + color: 0xff0000, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + const line = new Line2(lineGeometry, lineMaterial); + + controller.add(line); + } + + + controller.addEventListener( 'connected', function ( event ) { + const xrInputSource = event.data; + controller.inputSource = xrInputSource; + // initInfo(controller); + }); + + controller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller);}); + controller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller);}); + + this.cPrimary = controller; + + } + + { // setup secondary controller + let controller = xr.getController(1); + + let grip = xr.getControllerGrip(1); + + // ADD CONTROLLER MODEL + let model = controllerModelFactory.createControllerModel( grip ); + grip.add(model); + this.viewer.sceneVR.add( grip ); + + // ADD SPHERE + let sphere = new Mesh(sg, sm); + sphere.scale.set(0.005, 0.005, 0.005); + controller.add(sphere); + controller.visible = true; + this.viewer.sceneVR.add(controller); + + { // ADD LINE + + let lineGeometry = new LineGeometry(); + + lineGeometry.setPositions([ + 0, 0, -0.15, + 0, 0, 0.05, + ]); + + let lineMaterial = new LineMaterial({ + color: 0xff0000, + linewidth: 2, + resolution: new Vector2(1000, 1000), + }); + + const line = new Line2(lineGeometry, lineMaterial); + + controller.add(line); + } + + controller.addEventListener( 'connected', (event) => { + const xrInputSource = event.data; + controller.inputSource = xrInputSource; + this.initMenu(controller); + }); + + controller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller);}); + controller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller);}); + + this.cSecondary = controller; + } + + this.mode_fly = new FlyMode(); + this.mode_translate = new TranslationMode(); + this.mode_rotScale = new RotScaleMode(); + this.setMode(this.mode_fly); + } + + createSlider(label, min, max){ + + let sg = new SphereGeometry(1, 8, 8); + let cg = new CylinderGeometry(1, 1, 1, 8); + let matHandle = new MeshBasicMaterial({color: 0xff0000}); + let matScale = new MeshBasicMaterial({color: 0xff4444}); + let matValue = new MeshNormalMaterial(); + + let node = new Object3D("slider"); + let nLabel = new Potree.TextSprite(`${label}: 0`); + let nMax = new Mesh(sg, matHandle); + let nMin = new Mesh(sg, matHandle); + let nValue = new Mesh(sg, matValue); + let nScale = new Mesh(cg, matScale); + + nLabel.scale.set(0.2, 0.2, 0.2); + nLabel.position.set(0, 0.35, 0); + + nMax.scale.set(0.02, 0.02, 0.02); + nMax.position.set(0, 0.25, 0); + + nMin.scale.set(0.02, 0.02, 0.02); + nMin.position.set(0, -0.25, 0); + + nValue.scale.set(0.02, 0.02, 0.02); + nValue.position.set(0, 0, 0); + + nScale.scale.set(0.005, 0.5, 0.005); + + node.add(nLabel); + node.add(nMax); + node.add(nMin); + node.add(nValue); + node.add(nScale); + + return node; + } + + createInfo(){ + + let texture = new TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`); + let plane = new PlaneBufferGeometry(1, 1, 1, 1); + let infoMaterial = new MeshBasicMaterial({map: texture}); + let infoNode = new Mesh(plane, infoMaterial); + + return infoNode; + } + + initMenu(controller){ + + if(this.menu){ + return; + } + + let node = new Object3D("vr menu"); + + // let nSlider = this.createSlider("speed", 0, 1); + // let nInfo = this.createInfo(); + + // // node.add(nSlider); + // node.add(nInfo); + + // { + // node.rotation.set(-1.5, 0, 0) + // node.scale.set(0.3, 0.3, 0.3); + // node.position.set(-0.2, -0.002, -0.1) + + // // nInfo.position.set(0.5, 0, 0); + // nInfo.scale.set(0.8, 0.6, 0); + + // // controller.add(node); + // } + + // node.position.set(-0.3, 1.2, 0.2); + // node.scale.set(0.3, 0.2, 0.3); + // node.lookAt(new THREE.Vector3(0, 1.5, 0.1)); + + // this.viewer.sceneVR.add(node); + + this.menu = node; + + // window.vrSlider = nSlider; + window.vrMenu = node; + + } + + + toScene(vec){ + let camVR = this.getCamera(); + + let mat = camVR.matrixWorld; + let result = vec.clone().applyMatrix4(mat); + + return result; + } + + toVR(vec){ + let camVR = this.getCamera(); + + let mat = camVR.matrixWorld.clone(); + mat.invert(); + let result = vec.clone().applyMatrix4(mat); + + return result; + } + + setMode(mode){ + + if(this.mode === mode){ + return; + } + + if(this.mode){ + this.mode.end(this); + } + + for(let controller of [this.cPrimary, this.cSecondary]){ + + let start = { + position: controller.position.clone(), + rotation: controller.rotation.clone(), + }; + + controller.start = start; + } + + this.mode = mode; + this.mode.start(this); + } + + onTriggerStart(controller){ + this.triggered.add(controller); + + if(this.triggered.size === 0){ + this.setMode(this.mode_fly); + }else if(this.triggered.size === 1){ + this.setMode(this.mode_translate); + }else if(this.triggered.size === 2){ + this.setMode(this.mode_rotScale); + } + } + + onTriggerEnd(controller){ + this.triggered.delete(controller); + + if(this.triggered.size === 0){ + this.setMode(this.mode_fly); + }else if(this.triggered.size === 1){ + this.setMode(this.mode_translate); + }else if(this.triggered.size === 2){ + this.setMode(this.mode_rotScale); + } + } + + onStart(){ + + let position = this.viewer.scene.view.position.clone(); + let direction = this.viewer.scene.view.direction; + direction.multiplyScalar(-1); + + let target = position.clone().add(direction); + target.z = position.z; + + let scale = this.viewer.getMoveSpeed(); + + this.node.position.copy(position); + this.node.lookAt(target); + this.node.scale.set(scale, scale, scale); + this.node.updateMatrix(); + this.node.updateMatrixWorld(); + } + + onEnd(){ + + } + + + setScene(scene){ + this.scene = scene; + } + + getCamera(){ + let reference = this.viewer.scene.getActiveCamera(); + let camera = new PerspectiveCamera(); + + // let scale = this.node.scale.x; + let scale = this.viewer.getMoveSpeed(); + //camera.near = 0.01 / scale; + camera.near = 0.1; + camera.far = 1000; + // camera.near = reference.near / scale; + // camera.far = reference.far / scale; + camera.up.set(0, 0, 1); + camera.lookAt(new Vector3(0, -1, 0)); + camera.updateMatrix(); + camera.updateMatrixWorld(); + + camera.position.copy(this.node.position); + camera.rotation.copy(this.node.rotation); + camera.scale.set(scale, scale, scale); + camera.updateMatrix(); + camera.updateMatrixWorld(); + camera.matrixAutoUpdate = false; + camera.parent = camera; + + return camera; + } + + update(delta){ + + + + // if(this.mode === this.mode_fly){ + // let ray = new THREE.Ray(origin, direction); + + // for(let object of this.selectables){ + + // if(object.intersectsRay(ray)){ + // object.onHit(ray); + // } + + // } + + // } + + this.mode.update(this, delta); + + + + } + }; + + // Adapted from three.js VRButton + + + class VRButton { + + constructor(){ + this.onStartListeners = []; + this.onEndListeners = []; + this.element = null; + } + + onStart(callback){ + this.onStartListeners.push(callback); + } + + onEnd(callback){ + this.onEndListeners.push(callback); + } + + static async createButton( renderer, options ) { + + if ( options ) { + + console.error( 'THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' ); + + } + + const button = new VRButton(); + const element = document.createElement( 'button' ); + + button.element = element; + + function setEnter(){ + button.element.innerHTML = ` +
        ENTER
        +
        VR
        + `; + } + + function setExit(){ + button.element.innerHTML = ` +
        EXIT
        +
        VR
        + `; + } + + function showEnterVR( /*device*/ ) { + + let currentSession = null; + + function onSessionStarted( session ) { + + session.addEventListener( 'end', onSessionEnded ); + + for(let listener of button.onStartListeners){ + listener(); + } + + + renderer.xr.setSession( session ); + setExit(); + + currentSession = session; + + } + + function onSessionEnded( /*event*/ ) { + + currentSession.removeEventListener( 'end', onSessionEnded ); + + for(let listener of button.onEndListeners){ + listener(); + } + + setEnter(); + + currentSession = null; + + } + + // + + button.element.style.display = ''; + + button.element.style.cursor = 'pointer'; + + setEnter(); + + button.element.onmouseenter = function () { + + button.element.style.opacity = '1.0'; + + }; + + button.element.onmouseleave = function () { + + button.element.style.opacity = '0.7'; + + }; + + button.element.onclick = function () { + + if ( currentSession === null ) { + + // WebXR's requestReferenceSpace only works if the corresponding feature + // was requested at session creation time. For simplicity, just ask for + // the interesting ones as optional features, but be aware that the + // requestReferenceSpace call will fail if it turns out to be unavailable. + // ('local' is always available for immersive sessions and doesn't need to + // be requested separately.) + + const sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking' ] }; + navigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted ); + + } else { + + currentSession.end(); + + } + + }; + + } + + function stylizeElement( element ) { + + element.style.position = 'absolute'; + element.style.bottom = '20px'; + element.style.padding = '12px 6px'; + element.style.border = '1px solid #fff'; + element.style.borderRadius = '4px'; + element.style.background = 'rgba(0,0,0,0.1)'; + element.style.color = '#fff'; + element.style.font = 'normal 13px sans-serif'; + element.style.textAlign = 'center'; + element.style.opacity = '0.7'; + element.style.outline = 'none'; + element.style.zIndex = '999'; + + } + + if ( 'xr' in navigator ) { + + button.element.id = 'VRButton'; + button.element.style.display = 'none'; + + stylizeElement( button.element ); + + let supported = await navigator.xr.isSessionSupported( 'immersive-vr' ); + + if(supported){ + showEnterVR(); + + return button; + }else { + return null; + } + + } else { + + if ( window.isSecureContext === false ) { + + console.log("WEBXR NEEDS HTTPS"); + + } else { + + console.log("WEBXR not available"); + + } + + return null; + + + + } + + } + + } + + class Viewer extends EventDispatcher{ + + constructor(domElement, args = {}){ + super(); + + this.renderArea = domElement; + this.guiLoaded = false; + this.guiLoadTasks = []; + + this.onVrListeners = []; + + this.messages = []; + this.elMessages = $(` +
        +
        `); + $(domElement).append(this.elMessages); + + try{ + + { // generate missing dom hierarchy + if ($(domElement).find('#potree_map').length === 0) { + let potreeMap = $(` + + `); + $(domElement).append(potreeMap); + } + + if ($(domElement).find('#potree_description').length === 0) { + let potreeDescription = $(`
        `); + $(domElement).append(potreeDescription); + } + + if ($(domElement).find('#potree_annotations').length === 0) { + let potreeAnnotationContainer = $(` +
        `); + $(domElement).append(potreeAnnotationContainer); + } + + if ($(domElement).find('#potree_quick_buttons').length === 0) { + let potreeMap = $(` +
        +
        + `); + + // { + // let imgMenuToggle = document.createElement('img'); + // imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; + // imgMenuToggle.onclick = this.toggleSidebar; + // // imgMenuToggle.classList.add('potree_menu_toggle'); + + // potreeMap.append(imgMenuToggle); + // } + + // { + // let imgMenuToggle = document.createElement('img'); + // imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; + // imgMenuToggle.onclick = this.toggleSidebar; + // // imgMenuToggle.classList.add('potree_menu_toggle'); + + // potreeMap.append(imgMenuToggle); + // } + + // { + // let imgMenuToggle = document.createElement('img'); + // imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; + // imgMenuToggle.onclick = this.toggleSidebar; + // // imgMenuToggle.classList.add('potree_menu_toggle'); + + // potreeMap.append(imgMenuToggle); + // } + + + + $(domElement).append(potreeMap); + } + } + + this.pointCloudLoadedCallback = args.onPointCloudLoaded || function () {}; + + // if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { + // defaultSettings.navigation = "Orbit"; + // } + + this.server = null; + + this.fov = 60; + this.isFlipYZ = false; + this.useDEMCollisions = false; + this.generateDEM = false; + this.minNodeSize = 30; + this.edlStrength = 1.0; + this.edlRadius = 1.4; + this.edlOpacity = 1.0; + this.useEDL = false; + this.description = ""; + + this.classifications = ClassificationScheme.DEFAULT; + + this.moveSpeed = 10; + + this.lengthUnit = LengthUnits.METER; + this.lengthUnitDisplay = LengthUnits.METER; + + this.showBoundingBox = false; + this.showAnnotations = true; + this.freeze = false; + this.clipTask = ClipTask.HIGHLIGHT; + this.clipMethod = ClipMethod.INSIDE_ANY; + + this.elevationGradientRepeat = ElevationGradientRepeat.CLAMP; + + this.filterReturnNumberRange = [0, 7]; + this.filterNumberOfReturnsRange = [0, 7]; + this.filterGPSTimeRange = [-Infinity, Infinity]; + this.filterPointSourceIDRange = [0, 65535]; + + this.potreeRenderer = null; + this.edlRenderer = null; + this.renderer = null; + this.pRenderer = null; + + this.scene = null; + this.sceneVR = null; + this.overlay = null; + this.overlayCamera = null; + + this.inputHandler = null; + this.controls = null; + + this.clippingTool = null; + this.transformationTool = null; + this.navigationCube = null; + this.compass = null; + + this.skybox = null; + this.clock = new Clock(); + this.background = null; + + this.initThree(); + + if(args.noDragAndDrop){ + + }else { + this.initDragAndDrop(); + } + + if(typeof Stats !== "undefined"){ + this.stats = new Stats(); + this.stats.showPanel( 0 ); // 0: fps, 1: ms, 2: mb, 3+: custom + document.body.appendChild( this.stats.dom ); + } + + { + let canvas = this.renderer.domElement; + canvas.addEventListener("webglcontextlost", (e) => { + console.log(e); + this.postMessage("WebGL context lost. \u2639"); + + let gl = this.renderer.getContext(); + let error = gl.getError(); + console.log(error); + }, false); + } + + { + this.overlay = new Scene(); + this.overlayCamera = new OrthographicCamera( + 0, 1, + 1, 0, + -1000, 1000 + ); + } + + this.pRenderer = new Renderer(this.renderer); + + { + let near = 2.5; + let far = 10.0; + let fov = 90; + + this.shadowTestCam = new PerspectiveCamera(90, 1, near, far); + this.shadowTestCam.position.set(3.50, -2.80, 8.561); + this.shadowTestCam.lookAt(new Vector3(0, 0, 4.87)); + } + + + let scene = new Scene$1(this.renderer); + + { // create VR scene + this.sceneVR = new Scene(); + + // let texture = new THREE.TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`); + + // let plane = new THREE.PlaneBufferGeometry(1, 1, 1, 1); + // let infoMaterial = new THREE.MeshBasicMaterial({map: texture}); + // let infoNode = new THREE.Mesh(plane, infoMaterial); + // infoNode.position.set(-0.5, 1, 0); + // infoNode.scale.set(0.4, 0.3, 1); + // infoNode.lookAt(0, 1, 0) + // this.sceneVR.add(infoNode); + + // window.infoNode = infoNode; + } + + this.setScene(scene); + + { + this.inputHandler = new InputHandler(this); + this.inputHandler.setScene(this.scene); + + this.clippingTool = new ClippingTool(this); + this.transformationTool = new TransformationTool(this); + this.navigationCube = new NavigationCube(this); + this.navigationCube.visible = false; + + this.compass = new Compass(this); + + this.createControls(); + + this.clippingTool.setScene(this.scene); + + let onPointcloudAdded = (e) => { + if (this.scene.pointclouds.length === 1) { + let speed = e.pointcloud.boundingBox.getSize(new Vector3()).length(); + speed = speed / 5; + this.setMoveSpeed(speed); + } + }; + + let onVolumeRemoved = (e) => { + this.inputHandler.deselect(e.volume); + }; + + this.addEventListener('scene_changed', (e) => { + this.inputHandler.setScene(e.scene); + this.clippingTool.setScene(this.scene); + + if(!e.scene.hasEventListener("pointcloud_added", onPointcloudAdded)){ + e.scene.addEventListener("pointcloud_added", onPointcloudAdded); + } + + if(!e.scene.hasEventListener("volume_removed", onPointcloudAdded)){ + e.scene.addEventListener("volume_removed", onVolumeRemoved); + } + + }); + + this.scene.addEventListener("volume_removed", onVolumeRemoved); + this.scene.addEventListener('pointcloud_added', onPointcloudAdded); + } + + { // set defaults + this.setFOV(60); + this.setEDLEnabled(false); + this.setEDLRadius(1.4); + this.setEDLStrength(0.4); + this.setEDLOpacity(1.0); + this.setClipTask(ClipTask.HIGHLIGHT); + this.setClipMethod(ClipMethod.INSIDE_ANY); + this.setPointBudget(1*1000*1000); + this.setShowBoundingBox(false); + this.setFreeze(false); + this.setControls(this.orbitControls); + this.setBackground('gradient'); + + this.scaleFactor = 1; + + this.loadSettingsFromURL(); + } + + // start rendering! + //if(args.useDefaultRenderLoop === undefined || args.useDefaultRenderLoop === true){ + //requestAnimationFrame(this.loop.bind(this)); + //} + + this.renderer.setAnimationLoop(this.loop.bind(this)); + + this.loadGUI = this.loadGUI.bind(this); + + this.annotationTool = new AnnotationTool(this); + this.measuringTool = new MeasuringTool(this); + this.profileTool = new ProfileTool(this); + this.volumeTool = new VolumeTool(this); + + }catch(e){ + this.onCrash(e); + } + } + + onCrash(error){ + + $(this.renderArea).empty(); + + if ($(this.renderArea).find('#potree_failpage').length === 0) { + let elFailPage = $(` +
        + +

        Potree Encountered An Error

        + +

        + This may happen if your browser or graphics card is not supported. +
        + We recommend to use + Chrome + or + Firefox. +

        + +

        + Please also visit webglreport.com and + check whether your system supports WebGL. +

        +

        + If you are already using one of the recommended browsers and WebGL is enabled, + consider filing an issue report at github,
        + including your operating system, graphics card, browser and browser version, as well as the + error message below.
        + Please do not report errors on unsupported browsers. +

        + +
        
        +				
        +			
        `); + + let elErrorMessage = elFailPage.find('#potree_error_console'); + elErrorMessage.html(error.stack); + + $(this.renderArea).append(elFailPage); + } + + throw error; + } + + // ------------------------------------------------------------------------------------ + // Viewer API + // ------------------------------------------------------------------------------------ + + setScene (scene) { + if (scene === this.scene) { + return; + } + + let oldScene = this.scene; + this.scene = scene; + + this.dispatchEvent({ + type: 'scene_changed', + oldScene: oldScene, + scene: scene + }); + + { // Annotations + $('.annotation').detach(); + + // for(let annotation of this.scene.annotations){ + // this.renderArea.appendChild(annotation.domElement[0]); + // } + + this.scene.annotations.traverse(annotation => { + this.renderArea.appendChild(annotation.domElement[0]); + }); + + if (!this.onAnnotationAdded) { + this.onAnnotationAdded = e => { + // console.log("annotation added: " + e.annotation.title); + + e.annotation.traverse(node => { + + $("#potree_annotation_container").append(node.domElement); + //this.renderArea.appendChild(node.domElement[0]); + node.scene = this.scene; + }); + }; + } + + if (oldScene) { + oldScene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded); + } + this.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded); + } + }; + + setControls(controls){ + if (controls !== this.controls) { + if (this.controls) { + this.controls.enabled = false; + this.inputHandler.removeInputListener(this.controls); + } + + this.controls = controls; + this.controls.enabled = true; + this.inputHandler.addInputListener(this.controls); + } + } + + getControls () { + + if(this.renderer.xr.isPresenting){ + return this.vrControls; + }else { + return this.controls; + } + + } + + getMinNodeSize () { + return this.minNodeSize; + }; + + setMinNodeSize (value) { + if (this.minNodeSize !== value) { + this.minNodeSize = value; + this.dispatchEvent({'type': 'minnodesize_changed', 'viewer': this}); + } + }; + + getBackground () { + return this.background; + } + + setBackground(bg){ + if (this.background === bg) { + return; + } + + if(bg === "skybox"){ + this.skybox = Utils.loadSkybox(new URL(Potree.resourcePath + '/textures/skybox2/').href); + } + + this.background = bg; + this.dispatchEvent({'type': 'background_changed', 'viewer': this}); + } + + setDescription (value) { + this.description = value; + + $('#potree_description').html(value); + //$('#potree_description').text(value); + } + + getDescription(){ + return this.description; + } + + setShowBoundingBox (value) { + if (this.showBoundingBox !== value) { + this.showBoundingBox = value; + this.dispatchEvent({'type': 'show_boundingbox_changed', 'viewer': this}); + } + }; + + getShowBoundingBox () { + return this.showBoundingBox; + }; + + setMoveSpeed (value) { + if (this.moveSpeed !== value) { + this.moveSpeed = value; + this.dispatchEvent({'type': 'move_speed_changed', 'viewer': this, 'speed': value}); + } + }; + + getMoveSpeed () { + return this.moveSpeed; + }; + + setWeightClassification (w) { + for (let i = 0; i < this.scene.pointclouds.length; i++) { + this.scene.pointclouds[i].material.weightClassification = w; + this.dispatchEvent({'type': 'attribute_weights_changed' + i, 'viewer': this}); + } + }; + + setFreeze (value) { + value = Boolean(value); + if (this.freeze !== value) { + this.freeze = value; + this.dispatchEvent({'type': 'freeze_changed', 'viewer': this}); + } + }; + + getFreeze () { + return this.freeze; + }; + + getClipTask(){ + return this.clipTask; + } + + getClipMethod(){ + return this.clipMethod; + } + + setClipTask(value){ + if(this.clipTask !== value){ + + this.clipTask = value; + + this.dispatchEvent({ + type: "cliptask_changed", + viewer: this}); + } + } + + setClipMethod(value){ + if(this.clipMethod !== value){ + + this.clipMethod = value; + + this.dispatchEvent({ + type: "clipmethod_changed", + viewer: this}); + } + } + + setElevationGradientRepeat(value){ + if(this.elevationGradientRepeat !== value){ + + this.elevationGradientRepeat = value; + + this.dispatchEvent({ + type: "elevation_gradient_repeat_changed", + viewer: this}); + } + } + + setPointBudget (value) { + if (Potree.pointBudget !== value) { + Potree.pointBudget = parseInt(value); + this.dispatchEvent({'type': 'point_budget_changed', 'viewer': this}); + } + }; + + getPointBudget () { + return Potree.pointBudget; + }; + + setShowAnnotations (value) { + if (this.showAnnotations !== value) { + this.showAnnotations = value; + this.dispatchEvent({'type': 'show_annotations_changed', 'viewer': this}); + } + } + + getShowAnnotations () { + return this.showAnnotations; + } + + setDEMCollisionsEnabled(value){ + if(this.useDEMCollisions !== value){ + this.useDEMCollisions = value; + this.dispatchEvent({'type': 'use_demcollisions_changed', 'viewer': this}); + }; + }; + + getDEMCollisionsEnabled () { + return this.useDEMCollisions; + }; + + setEDLEnabled (value) { + value = Boolean(value) && Features.SHADER_EDL.isSupported(); + + if (this.useEDL !== value) { + this.useEDL = value; + this.dispatchEvent({'type': 'use_edl_changed', 'viewer': this}); + } + }; + + getEDLEnabled () { + return this.useEDL; + }; + + setEDLRadius (value) { + if (this.edlRadius !== value) { + this.edlRadius = value; + this.dispatchEvent({'type': 'edl_radius_changed', 'viewer': this}); + } + }; + + getEDLRadius () { + return this.edlRadius; + }; + + setEDLStrength (value) { + if (this.edlStrength !== value) { + this.edlStrength = value; + this.dispatchEvent({'type': 'edl_strength_changed', 'viewer': this}); + } + }; + + getEDLStrength () { + return this.edlStrength; + }; + + setEDLOpacity (value) { + if (this.edlOpacity !== value) { + this.edlOpacity = value; + this.dispatchEvent({'type': 'edl_opacity_changed', 'viewer': this}); + } + }; + + getEDLOpacity () { + return this.edlOpacity; + }; + + setFOV (value) { + if (this.fov !== value) { + this.fov = value; + this.dispatchEvent({'type': 'fov_changed', 'viewer': this}); + } + }; + + getFOV () { + return this.fov; + }; + + disableAnnotations () { + this.scene.annotations.traverse(annotation => { + annotation.domElement.css('pointer-events', 'none'); + + // return annotation.visible; + }); + }; + + enableAnnotations () { + this.scene.annotations.traverse(annotation => { + annotation.domElement.css('pointer-events', 'auto'); + + // return annotation.visible; + }); + } + + setClassifications(classifications){ + this.classifications = classifications; + + this.dispatchEvent({'type': 'classifications_changed', 'viewer': this}); + } + + setClassificationVisibility (key, value) { + if (!this.classifications[key]) { + this.classifications[key] = {visible: value, name: 'no name'}; + this.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this}); + } else if (this.classifications[key].visible !== value) { + this.classifications[key].visible = value; + this.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this}); + } + } + + toggleAllClassificationsVisibility(){ + + let numVisible = 0; + let numItems = 0; + for(const key of Object.keys(this.classifications)){ + if(this.classifications[key].visible){ + numVisible++; + } + numItems++; + } + + let visible = true; + if(numVisible === numItems){ + visible = false; + } + + let somethingChanged = false; + + for(const key of Object.keys(this.classifications)){ + if(this.classifications[key].visible !== visible){ + this.classifications[key].visible = visible; + somethingChanged = true; + } + } + + if(somethingChanged){ + this.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this}); + } + } + + setFilterReturnNumberRange(from, to){ + this.filterReturnNumberRange = [from, to]; + this.dispatchEvent({'type': 'filter_return_number_range_changed', 'viewer': this}); + } + + setFilterNumberOfReturnsRange(from, to){ + this.filterNumberOfReturnsRange = [from, to]; + this.dispatchEvent({'type': 'filter_number_of_returns_range_changed', 'viewer': this}); + } + + setFilterGPSTimeRange(from, to){ + this.filterGPSTimeRange = [from, to]; + this.dispatchEvent({'type': 'filter_gps_time_range_changed', 'viewer': this}); + } + + setFilterPointSourceIDRange(from, to){ + this.filterPointSourceIDRange = [from, to]; + this.dispatchEvent({'type': 'filter_point_source_id_range_changed', 'viewer': this}); + } + + setLengthUnit (value) { + switch (value) { + case 'm': + this.lengthUnit = LengthUnits.METER; + this.lengthUnitDisplay = LengthUnits.METER; + break; + case 'ft': + this.lengthUnit = LengthUnits.FEET; + this.lengthUnitDisplay = LengthUnits.FEET; + break; + case 'in': + this.lengthUnit = LengthUnits.INCH; + this.lengthUnitDisplay = LengthUnits.INCH; + break; + } + + this.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: value}); + }; + + setLengthUnitAndDisplayUnit(lengthUnitValue, lengthUnitDisplayValue) { + switch (lengthUnitValue) { + case 'm': + this.lengthUnit = LengthUnits.METER; + break; + case 'ft': + this.lengthUnit = LengthUnits.FEET; + break; + case 'in': + this.lengthUnit = LengthUnits.INCH; + break; + } + + switch (lengthUnitDisplayValue) { + case 'm': + this.lengthUnitDisplay = LengthUnits.METER; + break; + case 'ft': + this.lengthUnitDisplay = LengthUnits.FEET; + break; + case 'in': + this.lengthUnitDisplay = LengthUnits.INCH; + break; + } + + this.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: lengthUnitValue }); + }; + + zoomTo(node, factor, animationDuration = 0){ + let view = this.scene.view; + + let camera = this.scene.cameraP.clone(); + camera.rotation.copy(this.scene.cameraP.rotation); + camera.rotation.order = "ZXY"; + camera.rotation.x = Math.PI / 2 + view.pitch; + camera.rotation.z = view.yaw; + camera.updateMatrix(); + camera.updateMatrixWorld(); + camera.zoomTo(node, factor); + + let bs; + if (node.boundingSphere) { + bs = node.boundingSphere; + } else if (node.geometry && node.geometry.boundingSphere) { + bs = node.geometry.boundingSphere; + } else { + bs = node.boundingBox.getBoundingSphere(new Sphere()); + } + bs = bs.clone().applyMatrix4(node.matrixWorld); + + let startPosition = view.position.clone(); + let endPosition = camera.position.clone(); + let startTarget = view.getPivot(); + let endTarget = bs.center; + let startRadius = view.radius; + let endRadius = endPosition.distanceTo(endTarget); + + let easing = TWEEN.Easing.Quartic.Out; + + { // animate camera position + let pos = startPosition.clone(); + let tween = new TWEEN.Tween(pos).to(endPosition, animationDuration); + tween.easing(easing); + + tween.onUpdate(() => { + view.position.copy(pos); + }); + + tween.start(); + } + + { // animate camera target + let target = startTarget.clone(); + let tween = new TWEEN.Tween(target).to(endTarget, animationDuration); + tween.easing(easing); + tween.onUpdate(() => { + view.lookAt(target); + }); + tween.onComplete(() => { + view.lookAt(target); + this.dispatchEvent({type: 'focusing_finished', target: this}); + }); + + this.dispatchEvent({type: 'focusing_started', target: this}); + tween.start(); + } + }; + + moveToGpsTimeVicinity(time){ + const result = Potree.Utils.findClosestGpsTime(time, viewer); + + const box = result.node.pointcloud.deepestNodeAt(result.position).getBoundingBox(); + const diameter = box.min.distanceTo(box.max); + + const camera = this.scene.getActiveCamera(); + const offset = camera.getWorldDirection(new Vector3()).multiplyScalar(diameter); + const newCamPos = result.position.clone().sub(offset); + + this.scene.view.position.copy(newCamPos); + this.scene.view.lookAt(result.position); + } + + showAbout () { + $(function () { + $('#about-panel').dialog(); + }); + }; + + getBoundingBox (pointclouds) { + return this.scene.getBoundingBox(pointclouds); + }; + + getGpsTimeExtent(){ + const range = [Infinity, -Infinity]; + + for(const pointcloud of this.scene.pointclouds){ + const attributes = pointcloud.pcoGeometry.pointAttributes.attributes; + const aGpsTime = attributes.find(a => a.name === "gps-time"); + + if(aGpsTime){ + range[0] = Math.min(range[0], aGpsTime.range[0]); + range[1] = Math.max(range[1], aGpsTime.range[1]); + } + } + + return range; + } + + fitToScreen (factor = 1, animationDuration = 0) { + let box = this.getBoundingBox(this.scene.pointclouds); + + let node = new Object3D(); + node.boundingBox = box; + + this.zoomTo(node, factor, animationDuration); + this.controls.stop(); + }; + + toggleNavigationCube() { + this.navigationCube.visible = !this.navigationCube.visible; + } + + setView(view) { + if(!view) return; + + switch(view) { + case "F": + this.setFrontView(); + break; + case "B": + this.setBackView(); + break; + case "L": + this.setLeftView(); + break; + case "R": + this.setRightView(); + break; + case "U": + this.setTopView(); + break; + case "D": + this.setBottomView(); + break; + } + } + + setTopView(){ + this.scene.view.yaw = 0; + this.scene.view.pitch = -Math.PI / 2; + + this.fitToScreen(); + }; + + setBottomView(){ + this.scene.view.yaw = -Math.PI; + this.scene.view.pitch = Math.PI / 2; + + this.fitToScreen(); + }; + + setFrontView(){ + this.scene.view.yaw = 0; + this.scene.view.pitch = 0; + + this.fitToScreen(); + }; + + setBackView(){ + this.scene.view.yaw = Math.PI; + this.scene.view.pitch = 0; + + this.fitToScreen(); + }; + + setLeftView(){ + this.scene.view.yaw = -Math.PI / 2; + this.scene.view.pitch = 0; + + this.fitToScreen(); + }; + + setRightView () { + this.scene.view.yaw = Math.PI / 2; + this.scene.view.pitch = 0; + + this.fitToScreen(); + }; + + flipYZ () { + this.isFlipYZ = !this.isFlipYZ; + + // TODO flipyz + console.log('TODO'); + } + + setCameraMode(mode){ + this.scene.cameraMode = mode; + + for(let pointcloud of this.scene.pointclouds) { + pointcloud.material.useOrthographicCamera = mode == CameraMode.ORTHOGRAPHIC; + } + } + + getProjection(){ + const pointcloud = this.scene.pointclouds[0]; + + if(pointcloud){ + return pointcloud.projection; + }else { + return null; + } + } + + async loadProject(url){ + + const response = await fetch(url); + + const text = await response.text(); + const json = lib.parse(text); + // const json = JSON.parse(text); + + if(json.type === "Potree"){ + Potree.loadProject(viewer, json); + } + + //Potree.loadProject(this, url); + } + + saveProject(){ + return Potree.saveProject(this); + } + + loadSettingsFromURL(){ + if(Utils.getParameterByName("pointSize")){ + this.setPointSize(parseFloat(Utils.getParameterByName("pointSize"))); + } + + if(Utils.getParameterByName("FOV")){ + this.setFOV(parseFloat(Utils.getParameterByName("FOV"))); + } + + if(Utils.getParameterByName("opacity")){ + this.setOpacity(parseFloat(Utils.getParameterByName("opacity"))); + } + + if(Utils.getParameterByName("edlEnabled")){ + let enabled = Utils.getParameterByName("edlEnabled") === "true"; + this.setEDLEnabled(enabled); + } + + if (Utils.getParameterByName('edlRadius')) { + this.setEDLRadius(parseFloat(Utils.getParameterByName('edlRadius'))); + } + + if (Utils.getParameterByName('edlStrength')) { + this.setEDLStrength(parseFloat(Utils.getParameterByName('edlStrength'))); + } + + if (Utils.getParameterByName('pointBudget')) { + this.setPointBudget(parseFloat(Utils.getParameterByName('pointBudget'))); + } + + if (Utils.getParameterByName('showBoundingBox')) { + let enabled = Utils.getParameterByName('showBoundingBox') === 'true'; + if (enabled) { + this.setShowBoundingBox(true); + } else { + this.setShowBoundingBox(false); + } + } + + if (Utils.getParameterByName('material')) { + let material = Utils.getParameterByName('material'); + this.setMaterial(material); + } + + if (Utils.getParameterByName('pointSizing')) { + let sizing = Utils.getParameterByName('pointSizing'); + this.setPointSizing(sizing); + } + + if (Utils.getParameterByName('quality')) { + let quality = Utils.getParameterByName('quality'); + this.setQuality(quality); + } + + if (Utils.getParameterByName('position')) { + let value = Utils.getParameterByName('position'); + value = value.replace('[', '').replace(']', ''); + let tokens = value.split(';'); + let x = parseFloat(tokens[0]); + let y = parseFloat(tokens[1]); + let z = parseFloat(tokens[2]); + + this.scene.view.position.set(x, y, z); + } + + if (Utils.getParameterByName('target')) { + let value = Utils.getParameterByName('target'); + value = value.replace('[', '').replace(']', ''); + let tokens = value.split(';'); + let x = parseFloat(tokens[0]); + let y = parseFloat(tokens[1]); + let z = parseFloat(tokens[2]); + + this.scene.view.lookAt(new Vector3(x, y, z)); + } + + if (Utils.getParameterByName('background')) { + let value = Utils.getParameterByName('background'); + this.setBackground(value); + } + + // if(Utils.getParameterByName("elevationRange")){ + // let value = Utils.getParameterByName("elevationRange"); + // value = value.replace("[", "").replace("]", ""); + // let tokens = value.split(";"); + // let x = parseFloat(tokens[0]); + // let y = parseFloat(tokens[1]); + // + // this.setElevationRange(x, y); + // //this.scene.view.target.set(x, y, z); + // } + }; + + // ------------------------------------------------------------------------------------ + // Viewer Internals + // ------------------------------------------------------------------------------------ + + createControls () { + { // create FIRST PERSON CONTROLS + this.fpControls = new FirstPersonControls(this); + this.fpControls.enabled = false; + this.fpControls.addEventListener('start', this.disableAnnotations.bind(this)); + this.fpControls.addEventListener('end', this.enableAnnotations.bind(this)); + } + + // { // create GEO CONTROLS + // this.geoControls = new GeoControls(this.scene.camera, this.renderer.domElement); + // this.geoControls.enabled = false; + // this.geoControls.addEventListener("start", this.disableAnnotations.bind(this)); + // this.geoControls.addEventListener("end", this.enableAnnotations.bind(this)); + // this.geoControls.addEventListener("move_speed_changed", (event) => { + // this.setMoveSpeed(this.geoControls.moveSpeed); + // }); + // } + + { // create ORBIT CONTROLS + this.orbitControls = new OrbitControls(this); + this.orbitControls.enabled = false; + this.orbitControls.addEventListener('start', this.disableAnnotations.bind(this)); + this.orbitControls.addEventListener('end', this.enableAnnotations.bind(this)); + } + + { // create EARTH CONTROLS + this.earthControls = new EarthControls(this); + this.earthControls.enabled = false; + this.earthControls.addEventListener('start', this.disableAnnotations.bind(this)); + this.earthControls.addEventListener('end', this.enableAnnotations.bind(this)); + } + + { // create DEVICE ORIENTATION CONTROLS + this.deviceControls = new DeviceOrientationControls(this); + this.deviceControls.enabled = false; + this.deviceControls.addEventListener('start', this.disableAnnotations.bind(this)); + this.deviceControls.addEventListener('end', this.enableAnnotations.bind(this)); + } + + { // create VR CONTROLS + this.vrControls = new VRControls(this); + this.vrControls.enabled = false; + this.vrControls.addEventListener('start', this.disableAnnotations.bind(this)); + this.vrControls.addEventListener('end', this.enableAnnotations.bind(this)); + } + + + }; + + toggleSidebar () { + let renderArea = $('#potree_render_area'); + let isVisible = renderArea.css('left') !== '0px'; + + if (isVisible) { + renderArea.css('left', '0px'); + } else { + renderArea.css('left', '300px'); + } + }; + + toggleMap () { + // let map = $('#potree_map'); + // map.toggle(100); + + if (this.mapView) { + this.mapView.toggle(); + } + }; + + onGUILoaded(callback){ + if(this.guiLoaded){ + callback(); + }else { + this.guiLoadTasks.push(callback); + } + } + + promiseGuiLoaded(){ + return new Promise( resolve => { + + if(this.guiLoaded){ + resolve(); + }else { + this.guiLoadTasks.push(resolve); + } + + }); + } + + loadGUI(callback){ + + if(callback){ + this.onGUILoaded(callback); + } + + let viewer = this; + let sidebarContainer = $('#potree_sidebar_container'); + sidebarContainer.load(new URL(Potree.scriptPath + '/sidebar.html').href, () => { + sidebarContainer.css('width', '300px'); + sidebarContainer.css('height', '100%'); + + let imgMenuToggle = document.createElement('img'); + imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; + imgMenuToggle.onclick = this.toggleSidebar; + imgMenuToggle.classList.add('potree_menu_toggle'); + + let imgMapToggle = document.createElement('img'); + imgMapToggle.src = new URL(Potree.resourcePath + '/icons/map_icon.png').href; + imgMapToggle.style.display = 'none'; + imgMapToggle.onclick = e => { this.toggleMap(); }; + imgMapToggle.id = 'potree_map_toggle'; + + + + let elButtons = $("#potree_quick_buttons").get(0); + + elButtons.append(imgMenuToggle); + elButtons.append(imgMapToggle); + + + VRButton.createButton(this.renderer).then(vrButton => { + + if(vrButton == null){ + console.log("VR not supported or active."); + + return; + } + + this.renderer.xr.enabled = true; + + let element = vrButton.element; + + element.style.position = ""; + element.style.bottom = ""; + element.style.left = ""; + element.style.margin = "4px"; + element.style.fontSize = "100%"; + element.style.width = "2.5em"; + element.style.height = "2.5em"; + element.style.padding = "0"; + element.style.textShadow = "black 2px 2px 2px"; + element.style.display = "block"; + + elButtons.append(element); + + vrButton.onStart(() => { + this.dispatchEvent({type: "vr_start"}); + }); + + vrButton.onEnd(() => { + this.dispatchEvent({type: "vr_end"}); + }); + }); + + this.mapView = new MapView(this); + this.mapView.init(); + + i18n.init({ + lng: 'en', + resGetPath: Potree.resourcePath + '/lang/__lng__/__ns__.json', + preload: ['en', 'fr', 'de', 'jp', 'se', 'es', 'zh', 'it'], + getAsync: true, + debug: false + }, function (t) { + // Start translation once everything is loaded + $('body').i18n(); + }); + + $(() => { + //initSidebar(this); + let sidebar = new Sidebar(this); + sidebar.init(); + + this.sidebar = sidebar; + + //if (callback) { + // $(callback); + //} + + let elProfile = $('
        ').load(new URL(Potree.scriptPath + '/profile.html').href, () => { + $(document.body).append(elProfile.children()); + this.profileWindow = new ProfileWindow(this); + this.profileWindowController = new ProfileWindowController(this); + + $('#profile_window').draggable({ + handle: $('#profile_titlebar'), + containment: $(document.body) + }); + $('#profile_window').resizable({ + containment: $(document.body), + handles: 'n, e, s, w' + }); + + $(() => { + this.guiLoaded = true; + for(let task of this.guiLoadTasks){ + task(); + } + + }); + }); + + + + }); + + + }); + + return this.promiseGuiLoaded(); + } + + setLanguage (lang) { + i18n.setLng(lang); + $('body').i18n(); + } + + setServer (server) { + this.server = server; + } + + initDragAndDrop(){ + function allowDrag(e) { + e.dataTransfer.dropEffect = 'copy'; + e.preventDefault(); + } + + let dropHandler = async (event) => { + console.log(event); + event.preventDefault(); + + for(const item of event.dataTransfer.items){ + console.log(item); + + if(item.kind !== "file"){ + continue; + } + + const file = item.getAsFile(); + + const isJson5 = file.name.toLowerCase().endsWith(".json5"); + const isGeoPackage = file.name.toLowerCase().endsWith(".gpkg"); + + if(isJson5){ + try{ + + const text = await file.text(); + const json = lib.parse(text); + + if(json.type === "Potree"){ + Potree.loadProject(viewer, json); + } + }catch(e){ + console.error("failed to parse the dropped file as JSON"); + console.error(e); + } + }else if(isGeoPackage){ + const hasPointcloud = viewer.scene.pointclouds.length > 0; + + if(!hasPointcloud){ + let msg = "At least one point cloud is needed that specifies the "; + msg += "coordinate reference system before loading vector data."; + console.error(msg); + }else { + + proj4.defs("WGS84", "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"); + proj4.defs("pointcloud", this.getProjection()); + let transform = proj4("WGS84", "pointcloud"); + + const buffer = await file.arrayBuffer(); + + const params = { + transform: transform, + source: file.name, + }; + + const geo = await Potree.GeoPackageLoader.loadBuffer(buffer, params); + viewer.scene.addGeopackage(geo); + } + } + + } + }; + + + $("body")[0].addEventListener("dragenter", allowDrag); + $("body")[0].addEventListener("dragover", allowDrag); + $("body")[0].addEventListener("drop", dropHandler); + } + + initThree () { + + console.log(`initializing three.js ${REVISION}`); + + let width = this.renderArea.clientWidth; + let height = this.renderArea.clientHeight; + + let contextAttributes = { + alpha: true, + depth: true, + stencil: false, + antialias: false, + //premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: true, + powerPreference: "high-performance", + }; + + // let contextAttributes = { + // alpha: false, + // preserveDrawingBuffer: true, + // }; + + // let contextAttributes = { + // alpha: false, + // preserveDrawingBuffer: true, + // }; + + let canvas = document.createElement("canvas"); + + let context = canvas.getContext('webgl', contextAttributes ); + + this.renderer = new WebGLRenderer({ + alpha: true, + premultipliedAlpha: false, + canvas: canvas, + context: context}); + this.renderer.sortObjects = false; + this.renderer.setSize(width, height); + this.renderer.autoClear = false; + this.renderArea.appendChild(this.renderer.domElement); + this.renderer.domElement.tabIndex = '2222'; + this.renderer.domElement.style.position = 'absolute'; + this.renderer.domElement.addEventListener('mousedown', () => { + this.renderer.domElement.focus(); + }); + //this.renderer.domElement.focus(); + + // NOTE: If extension errors occur, pass the string into this.renderer.extensions.get(x) before enabling + // enable frag_depth extension for the interpolation shader, if available + let gl = this.renderer.getContext(); + gl.getExtension('EXT_frag_depth'); + gl.getExtension('WEBGL_depth_texture'); + gl.getExtension('WEBGL_color_buffer_float'); // Enable explicitly for more portability, EXT_color_buffer_float is the proper name in WebGL 2 + + if(gl.createVertexArray == null){ + let extVAO = gl.getExtension('OES_vertex_array_object'); + + if(!extVAO){ + throw new Error("OES_vertex_array_object extension not supported"); + } + + gl.createVertexArray = extVAO.createVertexArrayOES.bind(extVAO); + gl.bindVertexArray = extVAO.bindVertexArrayOES.bind(extVAO); + } + + } + + updateAnnotations () { + + if(!this.visibleAnnotations){ + this.visibleAnnotations = new Set(); + } + + this.scene.annotations.updateBounds(); + this.scene.cameraP.updateMatrixWorld(); + this.scene.cameraO.updateMatrixWorld(); + + let distances = []; + + let renderAreaSize = this.renderer.getSize(new Vector2()); + + let viewer = this; + + let visibleNow = []; + this.scene.annotations.traverse(annotation => { + + if (annotation === this.scene.annotations) { + return true; + } + + if (!annotation.visible) { + return false; + } + + annotation.scene = this.scene; + + let element = annotation.domElement; + + let position = annotation.position.clone(); + position.add(annotation.offset); + if (!position) { + position = annotation.boundingBox.getCenter(new Vector3()); + } + + let distance = viewer.scene.cameraP.position.distanceTo(position); + let radius = annotation.boundingBox.getBoundingSphere(new Sphere()).radius; + + let screenPos = new Vector3(); + let screenSize = 0; + + { + // SCREEN POS + screenPos.copy(position).project(this.scene.getActiveCamera()); + screenPos.x = renderAreaSize.x * (screenPos.x + 1) / 2; + screenPos.y = renderAreaSize.y * (1 - (screenPos.y + 1) / 2); + + + // SCREEN SIZE + if(viewer.scene.cameraMode == CameraMode.PERSPECTIVE) { + let fov = Math.PI * viewer.scene.cameraP.fov / 180; + let slope = Math.tan(fov / 2.0); + let projFactor = 0.5 * renderAreaSize.y / (slope * distance); + screenSize = radius * projFactor; + } else { + screenSize = Utils.projectedRadiusOrtho(radius, viewer.scene.cameraO.projectionMatrix, renderAreaSize.x, renderAreaSize.y); + } + } + + element.css("left", screenPos.x + "px"); + element.css("top", screenPos.y + "px"); + //element.css("display", "block"); + + let zIndex = 10000000 - distance * (10000000 / this.scene.cameraP.far); + if(annotation.descriptionVisible){ + zIndex += 10000000; + } + element.css("z-index", parseInt(zIndex)); + + if(annotation.children.length > 0){ + let expand = screenSize > annotation.collapseThreshold || annotation.boundingBox.containsPoint(this.scene.getActiveCamera().position); + annotation.expand = expand; + + if (!expand) { + //annotation.display = (screenPos.z >= -1 && screenPos.z <= 1); + let inFrustum = (screenPos.z >= -1 && screenPos.z <= 1); + if(inFrustum){ + visibleNow.push(annotation); + } + } + + return expand; + } else { + //annotation.display = (screenPos.z >= -1 && screenPos.z <= 1); + let inFrustum = (screenPos.z >= -1 && screenPos.z <= 1); + if(inFrustum){ + visibleNow.push(annotation); + } + } + + }); + + let notVisibleAnymore = new Set(this.visibleAnnotations); + for(let annotation of visibleNow){ + annotation.display = true; + + notVisibleAnymore.delete(annotation); + } + this.visibleAnnotations = visibleNow; + + for(let annotation of notVisibleAnymore){ + annotation.display = false; + } + + } + + updateMaterialDefaults(pointcloud){ + // PROBLEM STATEMENT: + // * [min, max] of intensity, source id, etc. are computed as point clouds are loaded + // * the point cloud material won't know the range it should use until some data is loaded + // * users can modify the range at runtime, but sensible default ranges should be + // applied even if no GUI is present + // * display ranges shouldn't suddenly change even if the actual range changes over time. + // e.g. the root node has intensity range [1, 478]. One of the descendants increases range to + // [0, 2047]. We should not automatically change to the new range because that would result + // in sudden and drastic changes of brightness. We should adjust the min/max of the sidebar slider. + + const material = pointcloud.material; + + const attIntensity = pointcloud.getAttribute("intensity"); + + if(attIntensity != null && material.intensityRange[0] === Infinity){ + material.intensityRange = [...attIntensity.range]; + } + + // const attIntensity = pointcloud.getAttribute("intensity"); + // if(attIntensity && material.intensityRange[0] === Infinity){ + // material.intensityRange = [...attIntensity.range]; + // } + + // let attributes = pointcloud.getAttributes(); + + // for(let attribute of attributes.attributes){ + // if(attribute.range){ + // let range = [...attribute.range]; + // material.computedRange.set(attribute.name, range); + // //material.setRange(attribute.name, range); + // } + // } + + + } + + update(delta, timestamp){ + + if(Potree.measureTimings) performance.mark("update-start"); + + this.dispatchEvent({ + type: 'update_start', + delta: delta, + timestamp: timestamp}); + + + const scene = this.scene; + const camera = scene.getActiveCamera(); + const visiblePointClouds = this.scene.pointclouds.filter(pc => pc.visible); + + Potree.pointLoadLimit = Potree.pointBudget * 2; + + const lTarget = camera.position.clone().add(camera.getWorldDirection(new Vector3()).multiplyScalar(1000)); + this.scene.directionalLight.position.copy(camera.position); + this.scene.directionalLight.lookAt(lTarget); + + + for (let pointcloud of visiblePointClouds) { + + pointcloud.showBoundingBox = this.showBoundingBox; + pointcloud.generateDEM = this.generateDEM; + pointcloud.minimumNodePixelSize = this.minNodeSize; + + let material = pointcloud.material; + + material.uniforms.uFilterReturnNumberRange.value = this.filterReturnNumberRange; + material.uniforms.uFilterNumberOfReturnsRange.value = this.filterNumberOfReturnsRange; + material.uniforms.uFilterGPSTimeClipRange.value = this.filterGPSTimeRange; + material.uniforms.uFilterPointSourceIDClipRange.value = this.filterPointSourceIDRange; + + material.classification = this.classifications; + material.recomputeClassification(); + + this.updateMaterialDefaults(pointcloud); + } + + { + if(this.showBoundingBox){ + let bbRoot = this.scene.scene.getObjectByName("potree_bounding_box_root"); + if(!bbRoot){ + let node = new Object3D(); + node.name = "potree_bounding_box_root"; + this.scene.scene.add(node); + bbRoot = node; + } + + let visibleBoxes = []; + for(let pointcloud of this.scene.pointclouds){ + for(let node of pointcloud.visibleNodes.filter(vn => vn.boundingBoxNode !== undefined)){ + let box = node.boundingBoxNode; + visibleBoxes.push(box); + } + } + + bbRoot.children = visibleBoxes; + } + } + + if (!this.freeze) { + let result = Potree.updatePointClouds(scene.pointclouds, camera, this.renderer); + + + // DEBUG - ONLY DISPLAY NODES THAT INTERSECT MOUSE + //if(false){ + + // let renderer = viewer.renderer; + // let mouse = viewer.inputHandler.mouse; + + // let nmouse = { + // x: (mouse.x / renderer.domElement.clientWidth) * 2 - 1, + // y: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1 + // }; + + // let pickParams = {}; + + // //if(params.pickClipped){ + // // pickParams.pickClipped = params.pickClipped; + // //} + + // pickParams.x = mouse.x; + // pickParams.y = renderer.domElement.clientHeight - mouse.y; + + // let raycaster = new THREE.Raycaster(); + // raycaster.setFromCamera(nmouse, camera); + // let ray = raycaster.ray; + + // for(let pointcloud of scene.pointclouds){ + // let nodes = pointcloud.nodesOnRay(pointcloud.visibleNodes, ray); + // pointcloud.visibleNodes = nodes; + + // } + //} + + // const tStart = performance.now(); + // const worldPos = new THREE.Vector3(); + // const camPos = viewer.scene.getActiveCamera().getWorldPosition(new THREE.Vector3()); + // let lowestDistance = Infinity; + // let numNodes = 0; + + // viewer.scene.scene.traverse(node => { + // node.getWorldPosition(worldPos); + + // const distance = worldPos.distanceTo(camPos); + + // lowestDistance = Math.min(lowestDistance, distance); + + // numNodes++; + + // if(Number.isNaN(distance)){ + // console.error(":("); + // } + // }); + // const duration = (performance.now() - tStart).toFixed(2); + + // Potree.debug.computeNearDuration = duration; + // Potree.debug.numNodes = numNodes; + + //console.log(lowestDistance.toString(2), duration); + + const tStart = performance.now(); + const campos = camera.position; + let closestImage = Infinity; + for(const images of this.scene.orientedImages){ + for(const image of images.images){ + const distance = image.mesh.position.distanceTo(campos); + + closestImage = Math.min(closestImage, distance); + } + } + const tEnd = performance.now(); + + if(result.lowestSpacing !== Infinity){ + let near = result.lowestSpacing * 10.0; + let far = -this.getBoundingBox().applyMatrix4(camera.matrixWorldInverse).min.z; + + far = Math.max(far * 1.5, 10000); + near = Math.min(100.0, Math.max(0.01, near)); + near = Math.min(near, closestImage); + far = Math.max(far, near + 10000); + + if(near === Infinity){ + near = 0.1; + } + + camera.near = near; + camera.far = far; + }else { + // don't change near and far in this case + } + + if(this.scene.cameraMode == CameraMode.ORTHOGRAPHIC) { + camera.near = -camera.far; + } + } + + this.scene.cameraP.fov = this.fov; + + let controls = this.getControls(); + if (controls === this.deviceControls) { + this.controls.setScene(scene); + this.controls.update(delta); + + this.scene.cameraP.position.copy(scene.view.position); + this.scene.cameraO.position.copy(scene.view.position); + } else if (controls !== null) { + controls.setScene(scene); + controls.update(delta); + + if(typeof debugDisabled === "undefined" ){ + this.scene.cameraP.position.copy(scene.view.position); + this.scene.cameraP.rotation.order = "ZXY"; + this.scene.cameraP.rotation.x = Math.PI / 2 + this.scene.view.pitch; + this.scene.cameraP.rotation.z = this.scene.view.yaw; + } + + this.scene.cameraO.position.copy(scene.view.position); + this.scene.cameraO.rotation.order = "ZXY"; + this.scene.cameraO.rotation.x = Math.PI / 2 + this.scene.view.pitch; + this.scene.cameraO.rotation.z = this.scene.view.yaw; + } + + camera.updateMatrix(); + camera.updateMatrixWorld(); + camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); + + { + if(this._previousCamera === undefined){ + this._previousCamera = this.scene.getActiveCamera().clone(); + this._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation); + } + + if(!this._previousCamera.matrixWorld.equals(camera.matrixWorld)){ + this.dispatchEvent({ + type: "camera_changed", + previous: this._previousCamera, + camera: camera + }); + }else if(!this._previousCamera.projectionMatrix.equals(camera.projectionMatrix)){ + this.dispatchEvent({ + type: "camera_changed", + previous: this._previousCamera, + camera: camera + }); + } + + this._previousCamera = this.scene.getActiveCamera().clone(); + this._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation); + + } + + { // update clip boxes + let boxes = []; + + // volumes with clipping enabled + //boxes.push(...this.scene.volumes.filter(v => (v.clip))); + boxes.push(...this.scene.volumes.filter(v => (v.clip && v instanceof BoxVolume))); + + // profile segments + for(let profile of this.scene.profiles){ + boxes.push(...profile.boxes); + } + + // Needed for .getInverse(), pre-empt a determinant of 0, see #815 / #816 + let degenerate = (box) => box.matrixWorld.determinant() !== 0; + + let clipBoxes = boxes.filter(degenerate).map( box => { + box.updateMatrixWorld(); + + let boxInverse = box.matrixWorld.clone().invert(); + let boxPosition = box.getWorldPosition(new Vector3()); + + return {box: box, inverse: boxInverse, position: boxPosition}; + }); + + let clipPolygons = this.scene.polygonClipVolumes.filter(vol => vol.initialized); + + // set clip volumes in material + for(let pointcloud of visiblePointClouds){ + pointcloud.material.setClipBoxes(clipBoxes); + pointcloud.material.setClipPolygons(clipPolygons, this.clippingTool.maxPolygonVertices); + pointcloud.material.clipTask = this.clipTask; + pointcloud.material.clipMethod = this.clipMethod; + } + } + + { + for(let pointcloud of visiblePointClouds){ + pointcloud.material.elevationGradientRepeat = this.elevationGradientRepeat; + } + } + + { // update navigation cube + this.navigationCube.update(camera.rotation); + } + + this.updateAnnotations(); + + if(this.mapView){ + this.mapView.update(delta); + if(this.mapView.sceneProjection){ + $( "#potree_map_toggle" ).css("display", "block"); + + } + } + + TWEEN.update(timestamp); + + this.dispatchEvent({ + type: 'update', + delta: delta, + timestamp: timestamp}); + + if(Potree.measureTimings) { + performance.mark("update-end"); + performance.measure("update", "update-start", "update-end"); + } + } + + getPRenderer(){ + if(this.useHQ){ + if (!this.hqRenderer) { + this.hqRenderer = new HQSplatRenderer(this); + } + this.hqRenderer.useEDL = this.useEDL; + + return this.hqRenderer; + }else { + if (this.useEDL && Features.SHADER_EDL.isSupported()) { + if (!this.edlRenderer) { + this.edlRenderer = new EDLRenderer(this); + } + + return this.edlRenderer; + } else { + if (!this.potreeRenderer) { + this.potreeRenderer = new PotreeRenderer(this); + } + + return this.potreeRenderer; + } + } + } + + renderVR(){ + + let renderer = this.renderer; + + renderer.setClearColor(0x550000, 0); + renderer.clear(); + + let xr = renderer.xr; + let dbg = new PerspectiveCamera(); + let xrCameras = xr.getCamera(dbg); + + if(xrCameras.cameras.length !== 2){ + return; + } + + let makeCam = this.vrControls.getCamera.bind(this.vrControls); + + { // clear framebuffer + if(viewer.background === "skybox"){ + renderer.setClearColor(0xff0000, 1); + }else if(viewer.background === "gradient"){ + renderer.setClearColor(0x112233, 1); + }else if(viewer.background === "black"){ + renderer.setClearColor(0x000000, 1); + }else if(viewer.background === "white"){ + renderer.setClearColor(0xFFFFFF, 1); + }else { + renderer.setClearColor(0x000000, 0); + } + + renderer.clear(); + } + + // render background + if(this.background === "skybox"){ + let {skybox} = this; + + let cam = makeCam(); + skybox.camera.rotation.copy(cam.rotation); + skybox.camera.fov = cam.fov; + skybox.camera.aspect = cam.aspect; + + // let dbg = new THREE.Object3D(); + let dbg = skybox.parent; + // dbg.up.set(0, 0, 1); + dbg.rotation.x = Math.PI / 2; + + // skybox.camera.parent = dbg; + // dbg.children.push(skybox.camera); + + dbg.updateMatrix(); + dbg.updateMatrixWorld(); + + skybox.camera.updateMatrix(); + skybox.camera.updateMatrixWorld(); + skybox.camera.updateProjectionMatrix(); + + renderer.render(skybox.scene, skybox.camera); + // renderer.render(skybox.scene, cam); + }else if(this.background === "gradient"){ + // renderer.render(this.scene.sceneBG, this.scene.cameraBG); + } + + this.renderer.xr.getSession().updateRenderState({ + depthNear: 0.1, + depthFar: 10000 + }); + + let cam = null; + let view = null; + + { // render world scene + cam = makeCam(); + cam.position.z -= 0.8 * cam.scale.x; + cam.parent = null; + // cam.near = 0.05; + cam.near = viewer.scene.getActiveCamera().near; + cam.far = viewer.scene.getActiveCamera().far; + cam.updateMatrix(); + cam.updateMatrixWorld(); + + this.scene.scene.updateMatrix(); + this.scene.scene.updateMatrixWorld(); + this.scene.scene.matrixAutoUpdate = false; + + let camWorld = cam.matrixWorld.clone(); + view = camWorld.clone().invert(); + this.scene.scene.matrix.copy(view); + this.scene.scene.matrixWorld.copy(view); + + cam.matrix.identity(); + cam.matrixWorld.identity(); + cam.matrixWorldInverse.identity(); + + renderer.render(this.scene.scene, cam); + + this.scene.scene.matrixWorld.identity(); + + } + + for(let pointcloud of this.scene.pointclouds){ + + let viewport = xrCameras.cameras[0].viewport; + + pointcloud.material.useEDL = false; + pointcloud.screenHeight = viewport.height; + pointcloud.screenWidth = viewport.width; + + // automatically switch to paraboloids because they cause far less flickering in VR, + // when point sizes are larger than around 2 pixels + // if(Features.SHADER_INTERPOLATION.isSupported()){ + // pointcloud.material.shape = Potree.PointShape.PARABOLOID; + // } + } + + // render point clouds + for(let xrCamera of xrCameras.cameras){ + + let v = xrCamera.viewport; + renderer.setViewport(v.x, v.y, v.width, v.height); + + // xrCamera.fov = 90; + + { // estimate VR fov + let proj = xrCamera.projectionMatrix; + let inv = proj.clone().invert(); + + let p1 = new Vector4(0, 1, -1, 1).applyMatrix4(inv); + let rad = p1.y; + let fov = 180 * (rad / Math.PI); + + xrCamera.fov = fov; + } + + for(let pointcloud of this.scene.pointclouds){ + const {material} = pointcloud; + material.useEDL = false; + } + + let vrWorld = view.clone().invert(); + vrWorld.multiply(xrCamera.matrixWorld); + let vrView = vrWorld.clone().invert(); + + this.pRenderer.render(this.scene.scenePointCloud, xrCamera, null, { + viewOverride: vrView, + }); + + } + + { // render VR scene + let cam = makeCam(); + cam.parent = null; + + renderer.render(this.sceneVR, cam); + } + + renderer.resetState(); + + } + + renderDefault(){ + let pRenderer = this.getPRenderer(); + + { // resize + const width = this.scaleFactor * this.renderArea.clientWidth; + const height = this.scaleFactor * this.renderArea.clientHeight; + + this.renderer.setSize(width, height); + const pixelRatio = this.renderer.getPixelRatio(); + const aspect = width / height; + + const scene = this.scene; + + scene.cameraP.aspect = aspect; + scene.cameraP.updateProjectionMatrix(); + + let frustumScale = this.scene.view.radius; + scene.cameraO.left = -frustumScale; + scene.cameraO.right = frustumScale; + scene.cameraO.top = frustumScale * 1 / aspect; + scene.cameraO.bottom = -frustumScale * 1 / aspect; + scene.cameraO.updateProjectionMatrix(); + + scene.cameraScreenSpace.top = 1/aspect; + scene.cameraScreenSpace.bottom = -1/aspect; + scene.cameraScreenSpace.updateProjectionMatrix(); + } + + pRenderer.clear(); + + pRenderer.render(this.renderer); + this.renderer.render(this.overlay, this.overlayCamera); + } + + render(){ + if(Potree.measureTimings) performance.mark("render-start"); + + try{ + + const vrActive = this.renderer.xr.isPresenting; + + if(vrActive){ + this.renderVR(); + }else { + this.renderDefault(); + } + + }catch(e){ + this.onCrash(e); + } + + if(Potree.measureTimings){ + performance.mark("render-end"); + performance.measure("render", "render-start", "render-end"); + } + } + + resolveTimings(timestamp){ + if(Potree.measureTimings){ + if(!this.toggle){ + this.toggle = timestamp; + } + let duration = timestamp - this.toggle; + if(duration > 1000.0){ + + let measures = performance.getEntriesByType("measure"); + + let names = new Set(); + for(let measure of measures){ + names.add(measure.name); + } + + let groups = new Map(); + for(let name of names){ + groups.set(name, { + measures: [], + sum: 0, + n: 0, + min: Infinity, + max: -Infinity + }); + } + + for(let measure of measures){ + let group = groups.get(measure.name); + group.measures.push(measure); + group.sum += measure.duration; + group.n++; + group.min = Math.min(group.min, measure.duration); + group.max = Math.max(group.max, measure.duration); + } + + let glQueries = Potree.resolveQueries(this.renderer.getContext()); + for(let [key, value] of glQueries){ + + let group = { + measures: value.map(v => {return {duration: v}}), + sum: value.reduce( (a, i) => a + i, 0), + n: value.length, + min: Math.min(...value), + max: Math.max(...value) + }; + + let groupname = `[tq] ${key}`; + groups.set(groupname, group); + names.add(groupname); + } + + for(let [name, group] of groups){ + group.mean = group.sum / group.n; + group.measures.sort( (a, b) => a.duration - b.duration ); + + if(group.n === 1){ + group.median = group.measures[0].duration; + }else if(group.n > 1){ + group.median = group.measures[parseInt(group.n / 2)].duration; + } + + } + + let cn = Array.from(names).reduce( (a, i) => Math.max(a, i.length), 0) + 5; + let cmin = 10; + let cmed = 10; + let cmax = 10; + let csam = 6; + + let message = ` ${"NAME".padEnd(cn)} |` + + ` ${"MIN".padStart(cmin)} |` + + ` ${"MEDIAN".padStart(cmed)} |` + + ` ${"MAX".padStart(cmax)} |` + + ` ${"SAMPLES".padStart(csam)} \n`; + message += ` ${"-".repeat(message.length) }\n`; + + names = Array.from(names).sort(); + for(let name of names){ + let group = groups.get(name); + let min = group.min.toFixed(3); + let median = group.median.toFixed(3); + let max = group.max.toFixed(3); + let n = group.n; + + message += ` ${name.padEnd(cn)} |` + + ` ${min.padStart(cmin)} |` + + ` ${median.padStart(cmed)} |` + + ` ${max.padStart(cmax)} |` + + ` ${n.toString().padStart(csam)}\n`; + } + message += `\n`; + console.log(message); + + performance.clearMarks(); + performance.clearMeasures(); + this.toggle = timestamp; + } + } + } + + loop(timestamp){ + + if(this.stats){ + this.stats.begin(); + } + + if(Potree.measureTimings){ + performance.mark("loop-start"); + } + + this.update(this.clock.getDelta(), timestamp); + this.render(); + + // let vrActive = viewer.renderer.xr.isPresenting; + // if(vrActive){ + // this.update(this.clock.getDelta(), timestamp); + // this.render(); + // }else{ + + // this.update(this.clock.getDelta(), timestamp); + // this.render(); + // } + + + if(Potree.measureTimings){ + performance.mark("loop-end"); + performance.measure("loop", "loop-start", "loop-end"); + } + + this.resolveTimings(timestamp); + + Potree.framenumber++; + + if(this.stats){ + this.stats.end(); + } + } + + postError(content, params = {}){ + let message = this.postMessage(content, params); + + message.element.addClass("potree_message_error"); + + return message; + } + + postMessage(content, params = {}){ + let message = new Message(content); + + let animationDuration = 100; + + message.element.css("display", "none"); + message.elClose.click( () => { + message.element.slideToggle(animationDuration); + + let index = this.messages.indexOf(message); + if(index >= 0){ + this.messages.splice(index, 1); + } + }); + + this.elMessages.prepend(message.element); + + message.element.slideToggle(animationDuration); + + this.messages.push(message); + + if(params.duration !== undefined){ + let fadeDuration = 500; + let slideOutDuration = 200; + setTimeout(() => { + message.element.animate({ + opacity: 0 + }, fadeDuration); + message.element.slideToggle(slideOutDuration); + }, params.duration); + } + + return message; + } + }; + + OrthographicCamera.prototype.zoomTo = function( node, factor = 1){ + + if ( !node.geometry && !node.boundingBox) { + return; + } + + // TODO + + //let minWS = new THREE.Vector4(node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z, 1); + //let minVS = minWS.applyMatrix4(this.matrixWorldInverse); + + //let right = node.boundingBox.max.x; + //let bottom = node.boundingBox.min.y; + //let top = node.boundingBox.max.y; + + this.updateProjectionMatrix(); + }; + + PerspectiveCamera.prototype.zoomTo = function (node, factor) { + if (!node.geometry && !node.boundingSphere && !node.boundingBox) { + return; + } + + if (node.geometry && node.geometry.boundingSphere === null) { + node.geometry.computeBoundingSphere(); + } + + node.updateMatrixWorld(); + + let bs; + + if (node.boundingSphere) { + bs = node.boundingSphere; + } else if (node.geometry && node.geometry.boundingSphere) { + bs = node.geometry.boundingSphere; + } else { + bs = node.boundingBox.getBoundingSphere(new Sphere()); + } + + let _factor = factor || 1; + + bs = bs.clone().applyMatrix4(node.matrixWorld); + let radius = bs.radius; + let fovr = this.fov * Math.PI / 180; + + if (this.aspect < 1) { + fovr = fovr * this.aspect; + } + + let distanceFactor = Math.abs(radius / Math.sin(fovr / 2)) * _factor; + + let offset = this.getWorldDirection(new Vector3()).multiplyScalar(-distanceFactor); + this.position.copy(bs.center.clone().add(offset)); + }; + + Ray.prototype.distanceToPlaneWithNegative = function (plane) { + let denominator = plane.normal.dot(this.direction); + if (denominator === 0) { + // line is coplanar, return origin + if (plane.distanceToPoint(this.origin) === 0) { + return 0; + } + + // Null is preferable to undefined since undefined means.... it is undefined + return null; + } + let t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; + + return t; + }; + + const workerPool = new WorkerPool(); + + const version = { + major: 1, + minor: 8, + suffix: '.0' + }; + + let lru = new LRU(); + + console.log('Potree ' + version.major + '.' + version.minor + version.suffix); + + let pointBudget = 1 * 1000 * 1000; + let framenumber = 0; + let numNodesLoading = 0; + let maxNodesLoading = 4; + + const debug = {}; + + exports.scriptPath = ""; + + if (document.currentScript && document.currentScript.src) { + exports.scriptPath = new URL(document.currentScript.src + '/..').href; + if (exports.scriptPath.slice(-1) === '/') { + exports.scriptPath = exports.scriptPath.slice(0, -1); + } + } 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)) })){ + exports.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; + if (exports.scriptPath.slice(-1) === '/') { + exports.scriptPath = exports.scriptPath.slice(0, -1); + } + }else { + console.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?'); + } + + let resourcePath = exports.scriptPath + '/resources'; + + + function loadPointCloud$1(path, name, callback){ + let loaded = function(e){ + e.pointcloud.name = name; + callback(e); + }; + + let promise = new Promise( resolve => { + + // load pointcloud + if (!path){ + // TODO: callback? comment? Hello? Bueller? Anyone? + } else if (path.indexOf('ept.json') > 0) { + EptLoader.load(path, function(geometry) { + if (!geometry) { + console.error(new Error(`failed to load point cloud from URL: ${path}`)); + } + else { + let pointcloud = new PointCloudOctree(geometry); + //loaded(pointcloud); + resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); + } + }); + } else if (path.indexOf('cloud.js') > 0) { + POCLoader.load(path, function (geometry) { + if (!geometry) { + //callback({type: 'loading_failed'}); + console.error(new Error(`failed to load point cloud from URL: ${path}`)); + } else { + let pointcloud = new PointCloudOctree(geometry); + // loaded(pointcloud); + resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); + } + }); + } else if (path.indexOf('metadata.json') > 0) { + Potree.OctreeLoader.load(path).then(e => { + let geometry = e.geometry; + + if(!geometry){ + console.error(new Error(`failed to load point cloud from URL: ${path}`)); + }else { + let pointcloud = new PointCloudOctree(geometry); + + let aPosition = pointcloud.getAttribute("position"); + + let material = pointcloud.material; + material.elevationRange = [ + aPosition.range[0][2], + aPosition.range[1][2], + ]; + + // loaded(pointcloud); + resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); + } + }); + + OctreeLoader.load(path, function (geometry) { + if (!geometry) { + //callback({type: 'loading_failed'}); + console.error(new Error(`failed to load point cloud from URL: ${path}`)); + } else { + let pointcloud = new PointCloudOctree(geometry); + // loaded(pointcloud); + resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); + } + }); + } else if (path.indexOf('.vpc') > 0) { + PointCloudArena4DGeometry.load(path, function (geometry) { + if (!geometry) { + //callback({type: 'loading_failed'}); + console.error(new Error(`failed to load point cloud from URL: ${path}`)); + } else { + let pointcloud = new PointCloudArena4D(geometry); + // loaded(pointcloud); + resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); + } + }); + } else { + //callback({'type': 'loading_failed'}); + console.error(new Error(`failed to load point cloud from URL: ${path}`)); + } + }); + + if(callback){ + promise.then(pointcloud => { + loaded(pointcloud); + }); + }else { + return promise; + } + }; + + + // add selectgroup + (function($){ + $.fn.extend({ + selectgroup: function(args = {}){ + + let elGroup = $(this); + let rootID = elGroup.prop("id"); + let groupID = `${rootID}`; + let groupTitle = (args.title !== undefined) ? args.title : ""; + + let elButtons = []; + elGroup.find("option").each((index, value) => { + let buttonID = $(value).prop("id"); + let label = $(value).html(); + let optionValue = $(value).prop("value"); + + let elButton = $(` + + + + + `); + let elLabel = elButton.find("label"); + let elInput = elButton.find("input"); + + elInput.change( () => { + elGroup.find("label").removeClass("ui-state-active"); + elGroup.find("label").addClass("ui-state-default"); + if(elInput.is(":checked")){ + elLabel.addClass("ui-state-active"); + }else { + //elLabel.addClass("ui-state-default"); + } + }); + + elButtons.push(elButton); + }); + + let elFieldset = $(` +
        + ${groupTitle} + + + +
        + `); + + let elButtonContainer = elFieldset.find("span"); + for(let elButton of elButtons){ + elButtonContainer.append(elButton); + } + + elButtonContainer.find("label").each( (index, value) => { + $(value).css("margin", "0px"); + $(value).css("border-radius", "0px"); + $(value).css("border", "1px solid black"); + $(value).css("border-left", "none"); + }); + elButtonContainer.find("label:first").each( (index, value) => { + $(value).css("border-radius", "4px 0px 0px 4px"); + + }); + elButtonContainer.find("label:last").each( (index, value) => { + $(value).css("border-radius", "0px 4px 4px 0px"); + $(value).css("border-left", "none"); + }); + + elGroup.empty(); + elGroup.append(elFieldset); + + + + } + }); + })(jQuery); + + exports.Action = Action; + exports.AnimationPath = AnimationPath; + exports.Annotation = Annotation; + exports.Box3Helper = Box3Helper$1; + exports.BoxVolume = BoxVolume; + exports.CameraAnimation = CameraAnimation; + exports.CameraMode = CameraMode; + exports.ClassificationScheme = ClassificationScheme; + exports.ClipMethod = ClipMethod; + exports.ClipTask = ClipTask; + exports.ClipVolume = ClipVolume; + exports.ClippingTool = ClippingTool; + exports.Compass = Compass; + exports.DeviceOrientationControls = DeviceOrientationControls; + exports.EarthControls = EarthControls; + exports.ElevationGradientRepeat = ElevationGradientRepeat; + exports.Enum = Enum; + exports.EnumItem = EnumItem; + exports.EptBinaryLoader = EptBinaryLoader; + exports.EptKey = EptKey; + exports.EptLaszipLoader = EptLaszipLoader; + exports.EptLazBatcher = EptLazBatcher; + exports.EptLoader = EptLoader; + exports.EptZstandardLoader = EptZstandardLoader; + exports.EventDispatcher = EventDispatcher; + exports.EyeDomeLightingMaterial = EyeDomeLightingMaterial; + exports.Features = Features; + exports.FirstPersonControls = FirstPersonControls; + exports.GeoPackageLoader = GeoPackageLoader; + exports.Geopackage = Geopackage$1; + exports.Gradients = Gradients; + exports.HierarchicalSlider = HierarchicalSlider; + exports.Images360 = Images360; + exports.Images360Loader = Images360Loader; + exports.KeyCodes = KeyCodes; + exports.LRU = LRU; + exports.LRUItem = LRUItem; + exports.LengthUnits = LengthUnits; + exports.MOUSE = MOUSE$1; + exports.Measure = Measure; + exports.MeasuringTool = MeasuringTool; + exports.Message = Message; + exports.NodeLoader = NodeLoader; + exports.NormalizationEDLMaterial = NormalizationEDLMaterial; + exports.NormalizationMaterial = NormalizationMaterial; + exports.OctreeLoader = OctreeLoader; + exports.OrbitControls = OrbitControls; + exports.OrientedImage = OrientedImage; + exports.OrientedImageLoader = OrientedImageLoader; + exports.OrientedImages = OrientedImages; + exports.POCLoader = POCLoader; + exports.PathAnimation = PathAnimation; + exports.PointAttribute = PointAttribute; + exports.PointAttributeTypes = PointAttributeTypes; + exports.PointAttributes = PointAttributes; + exports.PointCloudEptGeometry = PointCloudEptGeometry; + exports.PointCloudEptGeometryNode = PointCloudEptGeometryNode; + exports.PointCloudMaterial = PointCloudMaterial$1; + exports.PointCloudOctree = PointCloudOctree; + exports.PointCloudOctreeGeometry = PointCloudOctreeGeometry; + exports.PointCloudOctreeGeometryNode = PointCloudOctreeGeometryNode; + exports.PointCloudOctreeNode = PointCloudOctreeNode; + exports.PointCloudSM = PointCloudSM; + exports.PointCloudTree = PointCloudTree; + exports.PointCloudTreeNode = PointCloudTreeNode; + exports.PointShape = PointShape; + exports.PointSizeType = PointSizeType; + exports.Points = Points$1; + exports.PolygonClipVolume = PolygonClipVolume; + exports.Profile = Profile; + exports.ProfileData = ProfileData; + exports.ProfileRequest = ProfileRequest; + exports.ProfileTool = ProfileTool; + exports.Renderer = Renderer; + exports.Scene = Scene$1; + exports.ScreenBoxSelectTool = ScreenBoxSelectTool; + exports.ShapefileLoader = ShapefileLoader; + exports.SphereVolume = SphereVolume; + exports.SpotLightHelper = SpotLightHelper$1; + exports.TextSprite = TextSprite; + exports.TransformationTool = TransformationTool; + exports.TreeType = TreeType; + exports.Utils = Utils; + exports.VRControls = VRControls; + exports.Version = Version; + exports.Viewer = Viewer; + exports.Volume = Volume; + exports.VolumeTool = VolumeTool; + exports.WorkerPool = WorkerPool; + exports.XHRFactory = XHRFactory; + exports.debug = debug; + exports.framenumber = framenumber; + exports.loadPointCloud = loadPointCloud$1; + exports.loadProject = loadProject; + exports.lru = lru; + exports.maxNodesLoading = maxNodesLoading; + exports.numNodesLoading = numNodesLoading; + exports.pointBudget = pointBudget; + exports.resourcePath = resourcePath; + exports.saveProject = saveProject; + exports.updatePointClouds = updatePointClouds; + exports.updateVisibility = updateVisibility; + exports.updateVisibilityStructures = updateVisibilityStructures; + exports.version = version; + exports.workerPool = workerPool; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=potree.js.map diff --git a/libs/potree/potree.js.map b/libs/potree/potree.js.map new file mode 100644 index 0000000..ee6fff8 --- /dev/null +++ b/libs/potree/potree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"potree.js","sources":["../../src/EventDispatcher.js","../../src/Actions.js","../../libs/three.js/build/three.module.js","../../src/AnimationPath.js","../../src/XHRFactory.js","../../src/TextSprite.js","../../src/utils/Volume.js","../../src/utils/Profile.js","../../libs/three.js/lines/LineSegmentsGeometry.js","../../libs/three.js/lines/LineMaterial.js","../../libs/three.js/lines/LineSegments2.js","../../libs/three.js/lines/LineGeometry.js","../../libs/three.js/lines/Line2.js","../../src/utils/Measure.js","../../src/utils/PolygonClipVolume.js","../../src/utils.js","../../src/Annotation.js","../../src/Enum.js","../../src/defines.js","../../src/Features.js","../../src/KeyCodes.js","../../src/LRU.js","../../src/PointCloudTree.js","../../src/loader/PointAttributes.js","../../src/PointCloudEptGeometry.js","../../src/PointCloudOctreeGeometry.js","../../src/materials/Gradients.js","../shaders/shaders.js","../../src/materials/ClassificationScheme.js","../../src/materials/PointCloudMaterial.js","../../src/PointCloudOctree.js","../../src/Points.js","../../src/utils/Box3Helper.js","../../src/Potree_update_visibility.js","../../src/arena4d/PointCloudArena4D.js","../../src/PotreeRenderer.js","../../src/ProfileRequest.js","../../src/Version.js","../../src/WorkerPool.js","../../src/viewer/SaveProject.js","../../src/modules/CameraAnimation/CameraAnimation.js","../../src/viewer/LoadProject.js","../../src/materials/EyeDomeLightingMaterial.js","../../src/materials/NormalizationEDLMaterial.js","../../src/materials/NormalizationMaterial.js","../../src/loader/LasLazLoader.js","../../src/loader/BinaryLoader.js","../../src/loader/POCLoader.js","../../src/modules/loader/2.0/OctreeGeometry.js","../../src/modules/loader/2.0/OctreeLoader.js","../../src/loader/EptLoader.js","../../src/loader/ept/BinaryLoader.js","../../src/loader/ept/LaszipLoader.js","../../src/loader/ept/ZstandardLoader.js","../../src/loader/ShapefileLoader.js","../../src/loader/GeoPackageLoader.js","../../src/utils/ClipVolume.js","../../src/utils/ClippingTool.js","../../src/utils/GeoTIFF.js","../../src/utils/MeasuringTool.js","../../src/utils/Message.js","../../src/utils/PointCloudSM.js","../../src/utils/ProfileTool.js","../../src/utils/ScreenBoxSelectTool.js","../../src/utils/SpotLightHelper.js","../../src/utils/TransformationTool.js","../../src/utils/VolumeTool.js","../../src/utils/Compass.js","../../src/viewer/PotreeRenderer.js","../../src/viewer/EDLRenderer.js","../../src/viewer/HQSplatRenderer.js","../../src/viewer/View.js","../../src/viewer/Scene.js","../../src/viewer/map.js","../../src/exporter/DXFProfileExporter.js","../../src/exporter/CSVExporter.js","../../src/exporter/LASExporter.js","../../src/viewer/profile.js","../../src/exporter/GeoJSONExporter.js","../../src/exporter/DXFExporter.js","../../src/viewer/PropertyPanels/MeasurePanel.js","../../src/viewer/PropertyPanels/DistancePanel.js","../../src/viewer/PropertyPanels/PointPanel.js","../../src/viewer/PropertyPanels/AreaPanel.js","../../src/viewer/PropertyPanels/AnglePanel.js","../../src/viewer/PropertyPanels/CirclePanel.js","../../src/viewer/PropertyPanels/HeightPanel.js","../../src/viewer/PropertyPanels/VolumePanel.js","../../src/viewer/PropertyPanels/ProfilePanel.js","../../src/viewer/PropertyPanels/CameraPanel.js","../../src/viewer/PropertyPanels/AnnotationPanel.js","../../src/viewer/PropertyPanels/CameraAnimationPanel.js","../../src/viewer/PropertyPanels/PropertiesPanel.js","../../src/viewer/HierarchicalSlider.js","../../src/modules/OrientedImages/OrientedImageControls.js","../../src/modules/OrientedImages/OrientedImages.js","../../src/modules/Images360/Images360.js","../../libs/json5-2.1.3/json5.mjs","../../src/viewer/sidebar.js","../../src/utils/AnnotationTool.js","../../src/navigation/InputHandler.js","../../src/viewer/NavigationCube.js","../../src/navigation/OrbitControls.js","../../src/navigation/FirstPersonControls.js","../../src/navigation/EarthControls.js","../../src/navigation/DeviceOrientationControls.js","../../libs/three.js/loaders/GLTFLoader.js","../../libs/three.js/libs/motion-controllers.module.js","../../libs/three.js/webxr/XRControllerModelFactory.js","../../src/navigation/VRControls.js","../../libs/three.js/extra/VRButton.js","../../src/viewer/viewer.js","../../src/extensions/OrthographicCamera.js","../../src/extensions/PerspectiveCamera.js","../../src/extensions/Ray.js","../../src/Potree.js"],"sourcesContent":["\n/**\n * @author mrdoob / http://mrdoob.com/ https://github.com/mrdoob/eventdispatcher.js\n * \n * with slight modifications by mschuetz, http://potree.org\n * \n */\n\n// The MIT License\n// \n// Copyright (c) 2011 Mr.doob\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\n\n\n\nexport class EventDispatcher{\n\n\tconstructor(){\n\t\tthis._listeners = {};\n\t}\n\n\taddEventListener(type, listener){\n\n\t\tconst listeners = this._listeners;\n\n\t\tif(listeners[type] === undefined){\n\t\t\tlisteners[type] = [];\n\t\t}\n\n\t\tif(listeners[type].indexOf(listener) === - 1){\n\t\t\tlisteners[type].push( listener );\n\t\t}\n\n\t}\n\n\thasEventListener(type, listener){\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[type] !== undefined && listeners[type].indexOf(listener) !== - 1;\n\t}\n\n\tremoveEventListener(type, listener){\n\n\t\tlet listeners = this._listeners;\n\t\tlet listenerArray = listeners[type];\n\n\t\tif (listenerArray !== undefined){\n\n\t\t\tlet index = listenerArray.indexOf(listener);\n\n\t\t\tif(index !== - 1){\n\t\t\t\tlistenerArray.splice(index, 1);\n\t\t\t}\n\t\t}\n\n\t}\n\n\tremoveEventListeners(type){\n\t\tif(this._listeners[type] !== undefined){\n\t\t\tdelete this._listeners[type];\n\t\t}\n\t};\n\n\tdispatchEvent(event){\n\n\t\tlet listeners = this._listeners;\n\t\tlet listenerArray = listeners[event.type];\n\n\t\tif ( listenerArray !== undefined ) {\n\t\t\tevent.target = this;\n\n\t\t\tfor(let listener of listenerArray.slice(0)){\n\t\t\t\tlistener.call(this, event);\n\t\t\t}\n\t\t}\n\n\t}\n\n}","\n\nimport {EventDispatcher} from \"./EventDispatcher.js\";\n\nexport class Action extends EventDispatcher {\n\tconstructor (args = {}) {\n\t\tsuper();\n\n\t\tthis.icon = args.icon || '';\n\t\tthis.tooltip = args.tooltip;\n\n\t\tif (args.onclick !== undefined) {\n\t\t\tthis.onclick = args.onclick;\n\t\t}\n\t}\n\n\tonclick (event) {\n\n\t}\n\n\tpairWith (object) {\n\n\t}\n\n\tsetIcon (newIcon) {\n\t\tlet oldIcon = this.icon;\n\n\t\tif (newIcon === oldIcon) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.icon = newIcon;\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'icon_changed',\n\t\t\taction: this,\n\t\t\ticon: newIcon,\n\t\t\toldIcon: oldIcon\n\t\t});\n\t}\n};\n\n//Potree.Actions = {};\n//\n//Potree.Actions.ToggleAnnotationVisibility = class ToggleAnnotationVisibility extends Potree.Action {\n//\tconstructor (args = {}) {\n//\t\tsuper(args);\n//\n//\t\tthis.icon = Potree.resourcePath + '/icons/eye.svg';\n//\t\tthis.showIn = 'sidebar';\n//\t\tthis.tooltip = 'toggle visibility';\n//\t}\n//\n//\tpairWith (annotation) {\n//\t\tif (annotation.visible) {\n//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye.svg');\n//\t\t} else {\n//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg');\n//\t\t}\n//\n//\t\tannotation.addEventListener('visibility_changed', e => {\n//\t\t\tlet annotation = e.annotation;\n//\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//\tonclick (event) {\n//\t\tlet annotation = event.annotation;\n//\n//\t\tannotation.visible = !annotation.visible;\n//\n//\t\tif (annotation.visible) {\n//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye.svg');\n//\t\t} else {\n//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg');\n//\t\t}\n//\t}\n//};\n","// 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 to range \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 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 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: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: \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: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \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 \n\t\t\t\t#include \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 \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 \\n\\t#include \\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 \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nvar cube_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\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 \\n\\t#include \\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshbasic_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\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 \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_vert = \"#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\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 \\n\\t#include \\n\\t#include \\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: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \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: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * skinning: ,\n * morphTargets: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \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 \\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: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \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: ,\n * opacity: ,\n *\n * linewidth: ,\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: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * morphTargets: \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: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // 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: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // 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: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // 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: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // 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: \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: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \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: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * reflectivity: ,\n * ior: ,\n *\n * sheen: ,\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( )\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: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.MultiplyOperation,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \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: ,\n *\n * map: new THREE.Texture( ),\n * gradientMap: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \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: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \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: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \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: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \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: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \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 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'\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' 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 \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 \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 \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","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\n\nexport class PathAnimation{\n\t\n\tconstructor(path, start, end, speed, callback){\n\t\t\tthis.path = path;\n\t\t\tthis.length = this.path.spline.getLength();\n\t\t\tthis.speed = speed;\n\t\t\tthis.callback = callback;\n\t\t\tthis.tween = null;\n\t\t\tthis.startPoint = Math.max(start, 0);\n\t\t\tthis.endPoint = Math.min(end, this.length);\n\t\t\tthis.t = 0.0;\n\t}\n\n\tstart(resume = false){\n\t\tif(this.tween){\n\t\t\tthis.tween.stop();\n\t\t\tthis.tween = null;\n\t\t}\n\t\n\t\tlet tStart;\n\t\tif(resume){\n\t\t\ttStart = this.t;\n\t\t}else{\n\t\t\ttStart = this.startPoint / this.length;\n\t\t}\n\t\tlet tEnd = this.endPoint / this.length;\n\t\tlet animationDuration = (tEnd - tStart) * this.length * 1000 / this.speed;\n\t\n\t\tlet progress = {t: tStart};\n\t\tthis.tween = new TWEEN.Tween(progress).to({t: tEnd}, animationDuration);\n\t\tthis.tween.easing(TWEEN.Easing.Linear.None);\n\t\tthis.tween.onUpdate((e) => {\n\t\t\tthis.t = progress.t;\n\t\t\tthis.callback(progress.t);\n\t\t});\n\t\tthis.tween.onComplete(() => {\n\t\t\tif(this.repeat){\n\t\t\t\tthis.start();\n\t\t\t}\n\t\t});\n\n\t\tsetTimeout(() => {\n\t\t\tthis.tween.start();\n\t\t}, 0);\n\t}\n\n\tstop(){\n\t\tif(!this.tween){\n\t\t\treturn;\n\t\t}\n\t\tthis.tween.stop();\n\t\tthis.tween = null;\n\t\tthis.t = 0;\n\t}\n\n\tpause(){\n\t\tif(!this.tween){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.tween.stop();\n\t\tTWEEN.remove(this.tween);\n\t\tthis.tween = null;\n\t}\n\n\tresume(){\n\t\tthis.start(true);\n\t}\n\n\tgetPoint(t){\n\t\treturn this.path.spline.getPoint(t);\n\t}\n\n}\n\nexport class AnimationPath{\n\tconstructor (points = []) {\n\t\tthis.points = points;\n\t\tthis.spline = new THREE.CatmullRomCurve3(points);\n\t\t//this.spline.reparametrizeByArcLength(1 / this.spline.getLength().total);\n\t}\n\n\tget (t) {\n\t\treturn this.spline.getPoint(t);\n\t}\n\n\tgetLength () {\n\t\treturn this.spline.getLength();\n\t}\n\n\tanimate (start, end, speed, callback) {\n\t\tlet animation = new PathAnimation(this, start, end, speed, callback);\n\t\tanimation.start();\n\n\t\treturn animation;\n\t}\n\n\tpause () {\n\t\tif (this.tween) {\n\t\t\tthis.tween.stop();\n\t\t}\n\t}\n\n\tresume () {\n\t\tif (this.tween) {\n\t\t\tthis.tween.start();\n\t\t}\n\t}\n\n\tgetGeometry () {\n\t\tlet geometry = new THREE.Geometry();\n\n\t\tlet samples = 500;\n\t\tlet i = 0;\n\t\tfor (let u = 0; u <= 1; u += 1 / samples) {\n\t\t\tlet position = this.spline.getPoint(u);\n\t\t\tgeometry.vertices[i] = new THREE.Vector3(position.x, position.y, position.z);\n\n\t\t\ti++;\n\t\t}\n\n\t\tif(this.closed){\n\t\t\tlet position = this.spline.getPoint(0);\n\t\t\tgeometry.vertices[i] = new THREE.Vector3(position.x, position.y, position.z);\n\t\t}\n\n\t\treturn geometry;\n\t}\n\n\tget closed(){\n\t\treturn this.spline.closed;\n\t}\n\n\tset closed(value){\n\t\tthis.spline.closed = value;\n\t}\n\n}","\nconst XHRFactory = {\n\tconfig: {\n\t\twithCredentials: false,\n\t\tcustomHeaders: [\n\t\t\t{ header: null, value: null }\n\t\t]\n\t},\n\n\tcreateXMLHttpRequest: function () {\n\t\tlet xhr = new XMLHttpRequest();\n\n\t\tif (this.config.customHeaders &&\n\t\t\tArray.isArray(this.config.customHeaders) &&\n\t\t\tthis.config.customHeaders.length > 0) {\n\t\t\tlet baseOpen = xhr.open;\n\t\t\tlet customHeaders = this.config.customHeaders;\n\t\t\txhr.open = function () {\n\t\t\t\tbaseOpen.apply(this, [].slice.call(arguments));\n\t\t\t\tcustomHeaders.forEach(function (customHeader) {\n\t\t\t\t\tif (!!customHeader.header && !!customHeader.value) {\n\t\t\t\t\t\txhr.setRequestHeader(customHeader.header, customHeader.value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\treturn xhr;\n\t}\n};\n\nexport {XHRFactory};","\n\n// /**\n// * adapted from http://stemkoski.github.io/Three.js/Sprite-Text-Labels.html\n// */\n\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\n\nexport class TextSprite extends THREE.Object3D{\n\t\n\tconstructor(text){\n\t\tsuper();\n\n\t\tlet texture = new THREE.Texture();\n\t\ttexture.minFilter = THREE.LinearFilter;\n\t\ttexture.magFilter = THREE.LinearFilter;\n\t\tlet spriteMaterial = new THREE.SpriteMaterial({\n\t\t\tmap: texture,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false});\n\n\t\tthis.texture = texture;\n\n\t\tthis.material = spriteMaterial;\n\t\t//this.material = getRawMaterial(texture);\n\t\tthis.sprite = new THREE.Sprite(this.material);\n\t\tthis.add(this.sprite);\n\n\t\tthis.borderThickness = 4;\n\t\tthis.fontface = 'Arial';\n\t\tthis.fontsize = 28;\n\t\tthis.borderColor = { r: 0, g: 0, b: 0, a: 1.0 };\n\t\tthis.backgroundColor = { r: 255, g: 255, b: 255, a: 1.0 };\n\t\tthis.textColor = {r: 255, g: 255, b: 255, a: 1.0};\n\t\tthis.text = '';\n\n\t\tthis.setText(text);\n\t}\n\n\tsetText(text){\n\t\tif (this.text !== text){\n\t\t\tthis.text = text;\n\n\t\t\tthis.update();\n\t\t}\n\t}\n\n\tsetTextColor(color){\n\t\tthis.textColor = color;\n\n\t\tthis.update();\n\t}\n\n\tsetBorderColor(color){\n\t\tthis.borderColor = color;\n\n\t\tthis.update();\n\t}\n\n\tsetBackgroundColor(color){\n\t\tthis.backgroundColor = color;\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet canvas = document.createElement('canvas');\n\t\tlet context = canvas.getContext('2d');\n\t\tcontext.font = 'Bold ' + this.fontsize + 'px ' + this.fontface;\n\n\t\t// get size data (height depends only on font size)\n\t\tlet metrics = context.measureText(this.text);\n\t\tlet textWidth = metrics.width;\n\t\tlet margin = 5;\n\t\tlet spriteWidth = 2 * margin + textWidth + 2 * this.borderThickness;\n\t\tlet spriteHeight = this.fontsize * 1.4 + 2 * this.borderThickness;\n\n\t\tcontext.canvas.width = spriteWidth;\n\t\tcontext.canvas.height = spriteHeight;\n\t\tcontext.font = 'Bold ' + this.fontsize + 'px ' + this.fontface;\n\n\t\t// background color\n\t\tcontext.fillStyle = 'rgba(' + this.backgroundColor.r + ',' + this.backgroundColor.g + ',' +\n\t\t\tthis.backgroundColor.b + ',' + this.backgroundColor.a + ')';\n\t\t// border color\n\t\tcontext.strokeStyle = 'rgba(' + this.borderColor.r + ',' + this.borderColor.g + ',' +\n\t\t\tthis.borderColor.b + ',' + this.borderColor.a + ')';\n\n\t\tcontext.lineWidth = this.borderThickness;\n\t\tthis.roundRect(context, this.borderThickness / 2, this.borderThickness / 2,\n\t\t\ttextWidth + this.borderThickness + 2 * margin, this.fontsize * 1.4 + this.borderThickness, 6);\n\n\t\t// text color\n\t\tcontext.strokeStyle = 'rgba(0, 0, 0, 1.0)';\n\t\tcontext.strokeText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness);\n\n\t\tcontext.fillStyle = 'rgba(' + this.textColor.r + ',' + this.textColor.g + ',' +\n\t\t\tthis.textColor.b + ',' + this.textColor.a + ')';\n\t\tcontext.fillText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness);\n\n\t\tlet texture = new THREE.Texture(canvas);\n\t\ttexture.minFilter = THREE.LinearFilter;\n\t\ttexture.magFilter = THREE.LinearFilter;\n\t\ttexture.needsUpdate = true;\n\t\t//this.material.needsUpdate = true;\n\n\t\t// { // screen-space sprite\n\t\t// \tlet [screenWidth, screenHeight] = [1620, 937];\n\n\t\t// \tlet uniforms = this.sprite.material.uniforms;\n\t\t// \tlet aspect = spriteHeight / spriteWidth;\n\t\t// \tlet factor = 0.5;\n\n\t\t// \tlet w = spriteWidth / screenWidth;\n\t\t// \tlet h = spriteHeight / screenHeight;\n\n\t\t// \tuniforms.uScale.value = [2 * w, 2 * h];\n\t\t// \t//uniforms.uScale.value = [factor * 1, factor * aspect];\n\t\t//\tthis.sprite.material.uniforms.map.value = texture;\n\t\t// }\n\n\t\tthis.sprite.material.map = texture;\n\t\tthis.texture = texture;\n\n\t\tthis.sprite.scale.set(spriteWidth * 0.01, spriteHeight * 0.01, 1.0);\n\t}\n\n\troundRect(ctx, x, y, w, h, r){\n\t\tctx.beginPath();\n\t\tctx.moveTo(x + r, y);\n\t\tctx.lineTo(x + w - r, y);\n\t\tctx.quadraticCurveTo(x + w, y, x + w, y + r);\n\t\tctx.lineTo(x + w, y + h - r);\n\t\tctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n\t\tctx.lineTo(x + r, y + h);\n\t\tctx.quadraticCurveTo(x, y + h, x, y + h - r);\n\t\tctx.lineTo(x, y + r);\n\t\tctx.quadraticCurveTo(x, y, x + r, y);\n\t\tctx.closePath();\n\t\tctx.fill();\n\t\tctx.stroke();\n\t}\n\n}\n\n\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {TextSprite} from \"../TextSprite.js\";\n\nexport class Volume extends THREE.Object3D {\n\tconstructor (args = {}) {\n\t\tsuper();\n\n\t\tif(this.constructor.name === \"Volume\"){\n\t\t\tconsole.warn(\"Can't create object of class Volume directly. Use classes BoxVolume or SphereVolume instead.\");\n\t\t}\n\n\t\t//console.log(this);\n\t\t//console.log(this.constructor);\n\t\t//console.log(this.constructor.name);\n\n\t\tthis._clip = args.clip || false;\n\t\tthis._visible = true;\n\t\tthis.showVolumeLabel = true;\n\t\tthis._modifiable = args.modifiable || true;\n\n\t\tthis.label = new TextSprite('0');\n\t\tthis.label.setBorderColor({r: 0, g: 255, b: 0, a: 0.0});\n\t\tthis.label.setBackgroundColor({r: 0, g: 255, b: 0, a: 0.0});\n\t\tthis.label.material.depthTest = false;\n\t\tthis.label.material.depthWrite = false;\n\t\tthis.label.material.transparent = true;\n\t\tthis.label.position.y -= 0.5;\n\t\tthis.add(this.label);\n\n\t\tthis.label.updateMatrixWorld = () => {\n\t\t\tlet volumeWorldPos = new THREE.Vector3();\n\t\t\tvolumeWorldPos.setFromMatrixPosition(this.matrixWorld);\n\t\t\tthis.label.position.copy(volumeWorldPos);\n\t\t\tthis.label.updateMatrix();\n\t\t\tthis.label.matrixWorld.copy(this.label.matrix);\n\t\t\tthis.label.matrixWorldNeedsUpdate = false;\n\n\t\t\tfor (let i = 0, l = this.label.children.length; i < l; i++) {\n\t\t\t\tthis.label.children[ i ].updateMatrixWorld(true);\n\t\t\t}\n\t\t};\n\n\t\t{ // event listeners\n\t\t\tthis.addEventListener('select', e => {});\n\t\t\tthis.addEventListener('deselect', e => {});\n\t\t}\n\n\t}\n\n\tget visible(){\n\t\treturn this._visible;\n\t}\n\n\tset visible(value){\n\t\tif(this._visible !== value){\n\t\t\tthis._visible = value;\n\n\t\t\tthis.dispatchEvent({type: \"visibility_changed\", object: this});\n\t\t}\n\t}\n\n\tgetVolume () {\n\t\tconsole.warn(\"override this in subclass\");\n\t}\n\n\tupdate () {\n\t\t\n\t};\n\n\traycast (raycaster, intersects) {\n\n\t}\n\n\tget clip () {\n\t\treturn this._clip;\n\t}\n\n\tset clip (value) {\n\n\t\tif(this._clip !== value){\n\t\t\tthis._clip = value;\n\n\t\t\tthis.update();\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: \"clip_changed\",\n\t\t\t\tobject: this\n\t\t\t});\n\t\t}\n\t\t\n\t}\n\n\tget modifieable () {\n\t\treturn this._modifiable;\n\t}\n\n\tset modifieable (value) {\n\t\tthis._modifiable = value;\n\n\t\tthis.update();\n\t}\n};\n\n\nexport class BoxVolume extends Volume{\n\n\tconstructor(args = {}){\n\t\tsuper(args);\n\n\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\tthis.name = 'box_' + this.constructor.counter;\n\n\t\tlet boxGeometry = new THREE.BoxGeometry(1, 1, 1);\n\t\tboxGeometry.computeBoundingBox();\n\n\t\tlet boxFrameGeometry = new THREE.Geometry();\n\t\t{\n\t\t\tlet Vector3 = THREE.Vector3;\n\n\t\t\tboxFrameGeometry.vertices.push(\n\n\t\t\t\t// bottom\n\t\t\t\tnew Vector3(-0.5, -0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, -0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, -0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, -0.5, -0.5),\n\t\t\t\tnew Vector3(0.5, -0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, -0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, -0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, -0.5, 0.5),\n\t\t\t\t// top\n\t\t\t\tnew Vector3(-0.5, 0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, 0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, 0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, 0.5, -0.5),\n\t\t\t\tnew Vector3(0.5, 0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, 0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, 0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, 0.5, 0.5),\n\t\t\t\t// sides\n\t\t\t\tnew Vector3(-0.5, -0.5, 0.5),\n\t\t\t\tnew Vector3(-0.5, 0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, -0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, 0.5, 0.5),\n\t\t\t\tnew Vector3(0.5, -0.5, -0.5),\n\t\t\t\tnew Vector3(0.5, 0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, -0.5, -0.5),\n\t\t\t\tnew Vector3(-0.5, 0.5, -0.5),\n\n\t\t\t);\n\n\t\t}\n\n\t\tthis.material = new THREE.MeshBasicMaterial({\n\t\t\tcolor: 0x00ff00,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.3,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: false});\n\t\tthis.box = new THREE.Mesh(boxGeometry, this.material);\n\t\tthis.box.geometry.computeBoundingBox();\n\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\tthis.add(this.box);\n\n\t\tthis.frame = new THREE.LineSegments(boxFrameGeometry, new THREE.LineBasicMaterial({color: 0x000000}));\n\t\t// this.frame.mode = THREE.Lines;\n\t\tthis.add(this.frame);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new THREE.Sphere());\n\n\t\tif (this._clip) {\n\t\t\tthis.box.visible = false;\n\t\t\tthis.label.visible = false;\n\t\t} else {\n\t\t\tthis.box.visible = true;\n\t\t\tthis.label.visible = this.showVolumeLabel;\n\t\t}\n\t}\n\n\traycast (raycaster, intersects) {\n\t\tlet is = [];\n\t\tthis.box.raycast(raycaster, is);\n\n\t\tif (is.length > 0) {\n\t\t\tlet I = is[0];\n\t\t\tintersects.push({\n\t\t\t\tdistance: I.distance,\n\t\t\t\tobject: this,\n\t\t\t\tpoint: I.point.clone()\n\t\t\t});\n\t\t}\n\t}\n\n\tgetVolume(){\n\t\treturn Math.abs(this.scale.x * this.scale.y * this.scale.z);\n\t}\n\n};\n\nexport class SphereVolume extends Volume{\n\n\tconstructor(args = {}){\n\t\tsuper(args);\n\n\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\tthis.name = 'sphere_' + this.constructor.counter;\n\n\t\tlet sphereGeometry = new THREE.SphereGeometry(1, 32, 32);\n\t\tsphereGeometry.computeBoundingBox();\n\n\t\tthis.material = new THREE.MeshBasicMaterial({\n\t\t\tcolor: 0x00ff00,\n\t\t\ttransparent: true,\n\t\t\topacity: 0.3,\n\t\t\tdepthTest: true,\n\t\t\tdepthWrite: false});\n\t\tthis.sphere = new THREE.Mesh(sphereGeometry, this.material);\n\t\tthis.sphere.visible = false;\n\t\tthis.sphere.geometry.computeBoundingBox();\n\t\tthis.boundingBox = this.sphere.geometry.boundingBox;\n\t\tthis.add(this.sphere);\n\n\t\tthis.label.visible = false;\n\n\n\t\tlet frameGeometry = new THREE.Geometry();\n\t\t{\n\t\t\tlet steps = 64;\n\t\t\tlet uSegments = 8;\n\t\t\tlet vSegments = 5;\n\t\t\tlet r = 1;\n\n\t\t\tfor(let uSegment = 0; uSegment < uSegments; uSegment++){\n\n\t\t\t\tlet alpha = (uSegment / uSegments) * Math.PI * 2;\n\t\t\t\tlet dirx = Math.cos(alpha);\n\t\t\t\tlet diry = Math.sin(alpha);\n\n\t\t\t\tfor(let i = 0; i <= steps; i++){\n\t\t\t\t\tlet v = (i / steps) * Math.PI * 2;\n\t\t\t\t\tlet vNext = v + 2 * Math.PI / steps;\n\n\t\t\t\t\tlet height = Math.sin(v);\n\t\t\t\t\tlet xyAmount = Math.cos(v);\n\n\t\t\t\t\tlet heightNext = Math.sin(vNext);\n\t\t\t\t\tlet xyAmountNext = Math.cos(vNext);\n\n\t\t\t\t\tlet vertex = new THREE.Vector3(dirx * xyAmount, diry * xyAmount, height);\n\t\t\t\t\tframeGeometry.vertices.push(vertex);\n\n\t\t\t\t\tlet vertexNext = new THREE.Vector3(dirx * xyAmountNext, diry * xyAmountNext, heightNext);\n\t\t\t\t\tframeGeometry.vertices.push(vertexNext);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// creates rings at poles, just because it's easier to implement\n\t\t\tfor(let vSegment = 0; vSegment <= vSegments + 1; vSegment++){\n\n\t\t\t\t//let height = (vSegment / (vSegments + 1)) * 2 - 1; // -1 to 1\n\t\t\t\tlet uh = (vSegment / (vSegments + 1)); // -1 to 1\n\t\t\t\tuh = (1 - uh) * (-Math.PI / 2) + uh *(Math.PI / 2);\n\t\t\t\tlet height = Math.sin(uh);\n\n\t\t\t\tconsole.log(uh, height);\n\n\t\t\t\tfor(let i = 0; i <= steps; i++){\n\t\t\t\t\tlet u = (i / steps) * Math.PI * 2;\n\t\t\t\t\tlet uNext = u + 2 * Math.PI / steps;\n\n\t\t\t\t\tlet dirx = Math.cos(u);\n\t\t\t\t\tlet diry = Math.sin(u);\n\n\t\t\t\t\tlet dirxNext = Math.cos(uNext);\n\t\t\t\t\tlet diryNext = Math.sin(uNext);\n\n\t\t\t\t\tlet xyAmount = Math.sqrt(1 - height * height);\n\n\t\t\t\t\tlet vertex = new THREE.Vector3(dirx * xyAmount, diry * xyAmount, height);\n\t\t\t\t\tframeGeometry.vertices.push(vertex);\n\n\t\t\t\t\tlet vertexNext = new THREE.Vector3(dirxNext * xyAmount, diryNext * xyAmount, height);\n\t\t\t\t\tframeGeometry.vertices.push(vertexNext);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.frame = new THREE.LineSegments(frameGeometry, new THREE.LineBasicMaterial({color: 0x000000}));\n\t\tthis.add(this.frame);\n\n\t\tlet frameMaterial = new THREE.MeshBasicMaterial({wireframe: true, color: 0x000000});\n\t\tthis.frame = new THREE.Mesh(sphereGeometry, frameMaterial);\n\t\t//this.add(this.frame);\n\n\t\t//this.frame = new THREE.LineSegments(boxFrameGeometry, new THREE.LineBasicMaterial({color: 0x000000}));\n\t\t// this.frame.mode = THREE.Lines;\n\t\t//this.add(this.frame);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tthis.boundingBox = this.sphere.geometry.boundingBox;\n\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new THREE.Sphere());\n\n\t\t//if (this._clip) {\n\t\t//\tthis.sphere.visible = false;\n\t\t//\tthis.label.visible = false;\n\t\t//} else {\n\t\t//\tthis.sphere.visible = true;\n\t\t//\tthis.label.visible = this.showVolumeLabel;\n\t\t//}\n\t}\n\n\traycast (raycaster, intersects) {\n\t\tlet is = [];\n\t\tthis.sphere.raycast(raycaster, is);\n\n\t\tif (is.length > 0) {\n\t\t\tlet I = is[0];\n\t\t\tintersects.push({\n\t\t\t\tdistance: I.distance,\n\t\t\t\tobject: this,\n\t\t\t\tpoint: I.point.clone()\n\t\t\t});\n\t\t}\n\t}\n\t\n\t// see https://en.wikipedia.org/wiki/Ellipsoid#Volume\n\tgetVolume(){\n\t\treturn (4 / 3) * Math.PI * this.scale.x * this.scale.y * this.scale.z;\n\t}\n\n};","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Utils} from \"../utils.js\";\n\nexport class Profile extends THREE.Object3D{\n\n\tconstructor () {\n\t\tsuper();\n\n\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\n\t\tthis.name = 'Profile_' + this.constructor.counter;\n\t\tthis.points = [];\n\t\tthis.spheres = [];\n\t\tthis.edges = [];\n\t\tthis.boxes = [];\n\t\tthis.width = 1;\n\t\tthis.height = 20;\n\t\tthis._modifiable = true;\n\n\t\tthis.sphereGeometry = new THREE.SphereGeometry(0.4, 10, 10);\n\t\tthis.color = new THREE.Color(0xff0000);\n\t\tthis.lineColor = new THREE.Color(0xff0000);\n\t}\n\n\tcreateSphereMaterial () {\n\t\tlet sphereMaterial = new THREE.MeshLambertMaterial({\n\t\t\t//shading: THREE.SmoothShading,\n\t\t\tcolor: 0xff0000,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false}\n\t\t);\n\n\t\treturn sphereMaterial;\n\t};\n\n\tgetSegments () {\n\t\tlet segments = [];\n\n\t\tfor (let i = 0; i < this.points.length - 1; i++) {\n\t\t\tlet start = this.points[i].clone();\n\t\t\tlet end = this.points[i + 1].clone();\n\t\t\tsegments.push({start: start, end: end});\n\t\t}\n\n\t\treturn segments;\n\t}\n\n\tgetSegmentMatrices () {\n\t\tlet segments = this.getSegments();\n\t\tlet matrices = [];\n\n\t\tfor (let segment of segments) {\n\t\t\tlet {start, end} = segment;\n\n\t\t\tlet box = new THREE.Object3D();\n\n\t\t\tlet length = start.clone().setZ(0).distanceTo(end.clone().setZ(0));\n\t\t\tbox.scale.set(length, 10000, this.width);\n\t\t\tbox.up.set(0, 0, 1);\n\n\t\t\tlet center = new THREE.Vector3().addVectors(start, end).multiplyScalar(0.5);\n\t\t\tlet diff = new THREE.Vector3().subVectors(end, start);\n\t\t\tlet target = new THREE.Vector3(diff.y, -diff.x, 0);\n\n\t\t\tbox.position.set(0, 0, 0);\n\t\t\tbox.lookAt(target);\n\t\t\tbox.position.copy(center);\n\n\t\t\tbox.updateMatrixWorld();\n\t\t\tmatrices.push(box.matrixWorld);\n\t\t}\n\n\t\treturn matrices;\n\t}\n\n\taddMarker (point) {\n\t\tthis.points.push(point);\n\n\t\tlet sphere = new THREE.Mesh(this.sphereGeometry, this.createSphereMaterial());\n\n\t\tthis.add(sphere);\n\t\tthis.spheres.push(sphere);\n\n\t\t// edges & boxes\n\t\tif (this.points.length > 1) {\n\t\t\tlet lineGeometry = new THREE.Geometry();\n\t\t\tlineGeometry.vertices.push(new THREE.Vector3(), new THREE.Vector3());\n\t\t\tlineGeometry.colors.push(this.lineColor, this.lineColor, this.lineColor);\n\t\t\tlet lineMaterial = new THREE.LineBasicMaterial({\n\t\t\t\tvertexColors: THREE.VertexColors,\n\t\t\t\tlinewidth: 2,\n\t\t\t\ttransparent: true,\n\t\t\t\topacity: 0.4\n\t\t\t});\n\t\t\tlineMaterial.depthTest = false;\n\t\t\tlet edge = new THREE.Line(lineGeometry, lineMaterial);\n\t\t\tedge.visible = false;\n\n\t\t\tthis.add(edge);\n\t\t\tthis.edges.push(edge);\n\n\t\t\tlet boxGeometry = new THREE.BoxGeometry(1, 1, 1);\n\t\t\tlet boxMaterial = new THREE.MeshBasicMaterial({color: 0xff0000, transparent: true, opacity: 0.2});\n\t\t\tlet box = new THREE.Mesh(boxGeometry, boxMaterial);\n\t\t\tbox.visible = false;\n\n\t\t\tthis.add(box);\n\t\t\tthis.boxes.push(box);\n\t\t}\n\n\t\t{ // event listeners\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\n\t\t\t\tif (I) {\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.setPosition(i, I.location);\n\t\t\t\t\t\t//this.dispatchEvent({\n\t\t\t\t\t\t//\t'type': 'marker_moved',\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\t\t\t};\n\n\t\t\tlet drop = e => {\n\t\t\t\tlet i = this.spheres.indexOf(e.drag.object);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\t'type': 'marker_dropped',\n\t\t\t\t\t\t'profile': this,\n\t\t\t\t\t\t'index': i\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet mouseover = (e) => e.object.material.emissive.setHex(0x888888);\n\t\t\tlet mouseleave = (e) => e.object.material.emissive.setHex(0x000000);\n\n\t\t\tsphere.addEventListener('drag', drag);\n\t\t\tsphere.addEventListener('drop', drop);\n\t\t\tsphere.addEventListener('mouseover', mouseover);\n\t\t\tsphere.addEventListener('mouseleave', mouseleave);\n\t\t}\n\n\t\tlet event = {\n\t\t\ttype: 'marker_added',\n\t\t\tprofile: this,\n\t\t\tsphere: sphere\n\t\t};\n\t\tthis.dispatchEvent(event);\n\n\t\tthis.setPosition(this.points.length - 1, point);\n\t}\n\n\tremoveMarker (index) {\n\t\tthis.points.splice(index, 1);\n\n\t\tthis.remove(this.spheres[index]);\n\n\t\tlet edgeIndex = (index === 0) ? 0 : (index - 1);\n\t\tthis.remove(this.edges[edgeIndex]);\n\t\tthis.edges.splice(edgeIndex, 1);\n\t\tthis.remove(this.boxes[edgeIndex]);\n\t\tthis.boxes.splice(edgeIndex, 1);\n\n\t\tthis.spheres.splice(index, 1);\n\n\t\tthis.update();\n\n\t\tthis.dispatchEvent({\n\t\t\t'type': 'marker_removed',\n\t\t\t'profile': this\n\t\t});\n\t}\n\n\tsetPosition (index, position) {\n\t\tlet point = this.points[index];\n\t\tpoint.copy(position);\n\n\t\tlet event = {\n\t\t\ttype: 'marker_moved',\n\t\t\tprofile:\tthis,\n\t\t\tindex:\tindex,\n\t\t\tposition: point.clone()\n\t\t};\n\t\tthis.dispatchEvent(event);\n\n\t\tthis.update();\n\t}\n\n\tsetWidth (width) {\n\t\tthis.width = width;\n\n\t\tlet event = {\n\t\t\ttype: 'width_changed',\n\t\t\tprofile:\tthis,\n\t\t\twidth:\twidth\n\t\t};\n\t\tthis.dispatchEvent(event);\n\n\t\tthis.update();\n\t}\n\n\tgetWidth () {\n\t\treturn this.width;\n\t}\n\n\tupdate () {\n\t\tif (this.points.length === 0) {\n\t\t\treturn;\n\t\t} else if (this.points.length === 1) {\n\t\t\tlet point = this.points[0];\n\t\t\tthis.spheres[0].position.copy(point);\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet min = this.points[0].clone();\n\t\tlet max = this.points[0].clone();\n\t\tlet centroid = new THREE.Vector3();\n\t\tlet lastIndex = this.points.length - 1;\n\t\tfor (let i = 0; i <= lastIndex; i++) {\n\t\t\tlet point = this.points[i];\n\t\t\tlet sphere = this.spheres[i];\n\t\t\tlet leftIndex = (i === 0) ? lastIndex : i - 1;\n\t\t\t// let rightIndex = (i === lastIndex) ? 0 : i + 1;\n\t\t\tlet leftVertex = this.points[leftIndex];\n\t\t\t// let rightVertex = this.points[rightIndex];\n\t\t\tlet leftEdge = this.edges[leftIndex];\n\t\t\tlet rightEdge = this.edges[i];\n\t\t\tlet leftBox = this.boxes[leftIndex];\n\t\t\t// rightBox = this.boxes[i];\n\n\t\t\t// let leftEdgeLength = point.distanceTo(leftVertex);\n\t\t\t// let rightEdgeLength = point.distanceTo(rightVertex);\n\t\t\t// let leftEdgeCenter = new THREE.Vector3().addVectors(leftVertex, point).multiplyScalar(0.5);\n\t\t\t// let rightEdgeCenter = new THREE.Vector3().addVectors(point, rightVertex).multiplyScalar(0.5);\n\n\t\t\tsphere.position.copy(point);\n\n\t\t\tif (this._modifiable) {\n\t\t\t\tsphere.visible = true;\n\t\t\t} else {\n\t\t\t\tsphere.visible = false;\n\t\t\t}\n\n\t\t\tif (leftEdge) {\n\t\t\t\tleftEdge.geometry.vertices[1].copy(point);\n\t\t\t\tleftEdge.geometry.verticesNeedUpdate = true;\n\t\t\t\tleftEdge.geometry.computeBoundingSphere();\n\t\t\t}\n\n\t\t\tif (rightEdge) {\n\t\t\t\trightEdge.geometry.vertices[0].copy(point);\n\t\t\t\trightEdge.geometry.verticesNeedUpdate = true;\n\t\t\t\trightEdge.geometry.computeBoundingSphere();\n\t\t\t}\n\n\t\t\tif (leftBox) {\n\t\t\t\tlet start = leftVertex;\n\t\t\t\tlet end = point;\n\t\t\t\tlet length = start.clone().setZ(0).distanceTo(end.clone().setZ(0));\n\t\t\t\tleftBox.scale.set(length, 1000000, this.width);\n\t\t\t\tleftBox.up.set(0, 0, 1);\n\n\t\t\t\tlet center = new THREE.Vector3().addVectors(start, end).multiplyScalar(0.5);\n\t\t\t\tlet diff = new THREE.Vector3().subVectors(end, start);\n\t\t\t\tlet target = new THREE.Vector3(diff.y, -diff.x, 0);\n\n\t\t\t\tleftBox.position.set(0, 0, 0);\n\t\t\t\tleftBox.lookAt(target);\n\t\t\t\tleftBox.position.copy(center);\n\t\t\t}\n\n\t\t\tcentroid.add(point);\n\t\t\tmin.min(point);\n\t\t\tmax.max(point);\n\t\t}\n\t\tcentroid.multiplyScalar(1 / this.points.length);\n\n\t\tfor (let i = 0; i < this.boxes.length; i++) {\n\t\t\tlet box = this.boxes[i];\n\n\t\t\tbox.position.z = min.z + (max.z - min.z) / 2;\n\t\t}\n\t}\n\n\traycast (raycaster, intersects) {\n\t\tfor (let i = 0; i < this.points.length; i++) {\n\t\t\tlet sphere = this.spheres[i];\n\n\t\t\tsphere.raycast(raycaster, intersects);\n\t\t}\n\n\t\t// recalculate distances because they are not necessarely correct\n\t\t// for scaled objects.\n\t\t// see https://github.com/mrdoob/three.js/issues/5827\n\t\t// TODO: remove this once the bug has been fixed\n\t\tfor (let i = 0; i < intersects.length; i++) {\n\t\t\tlet I = intersects[i];\n\t\t\tI.distance = raycaster.ray.origin.distanceTo(I.point);\n\t\t}\n\t\tintersects.sort(function (a, b) { return a.distance - b.distance; });\n\t};\n\n\tget modifiable () {\n\t\treturn this._modifiable;\n\t}\n\n\tset modifiable (value) {\n\t\tthis._modifiable = value;\n\t\tthis.update();\n\t}\n\n}\n","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","import {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2\n} from '../build/three.module.js';\n\n/**\n * parameters = {\n * color: ,\n * linewidth: ,\n * dashed: ,\n * dashScale: ,\n * dashSize: ,\n * dashOffset: ,\n * gapSize: ,\n * resolution: , // 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 \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \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 \n\t\t\t#include \n\t\t\t#include \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 \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t#include \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 \n\t\t\t#include \n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \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","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","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","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","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {TextSprite} from \"../TextSprite.js\";\nimport {Utils} from \"../utils.js\";\nimport {Line2} from \"../../libs/three.js/lines/Line2.js\";\nimport {LineGeometry} from \"../../libs/three.js/lines/LineGeometry.js\";\nimport {LineMaterial} from \"../../libs/three.js/lines/LineMaterial.js\";\n\nfunction createHeightLine(){\n\tlet lineGeometry = new LineGeometry();\n\n\tlineGeometry.setPositions([\n\t\t0, 0, 0,\n\t\t0, 0, 0,\n\t]);\n\n\tlet lineMaterial = new LineMaterial({ \n\t\tcolor: 0x00ff00, \n\t\tdashSize: 5, \n\t\tgapSize: 2,\n\t\tlinewidth: 2, \n\t\tresolution: new THREE.Vector2(1000, 1000),\n\t});\n\n\tlineMaterial.depthTest = false;\n\tconst heightEdge = new Line2(lineGeometry, lineMaterial);\n\theightEdge.visible = false;\n\n\t//this.add(this.heightEdge);\n\t\n\treturn heightEdge;\n}\n\nfunction createHeightLabel(){\n\tconst heightLabel = new TextSprite('');\n\n\theightLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\theightLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\theightLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\theightLabel.fontsize = 16;\n\theightLabel.material.depthTest = false;\n\theightLabel.material.opacity = 1;\n\theightLabel.visible = false;\n\n\treturn heightLabel;\n}\n\nfunction createAreaLabel(){\n\tconst areaLabel = new TextSprite('');\n\n\tareaLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\tareaLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\tareaLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\tareaLabel.fontsize = 16;\n\tareaLabel.material.depthTest = false;\n\tareaLabel.material.opacity = 1;\n\tareaLabel.visible = false;\n\t\n\treturn areaLabel;\n}\n\nfunction createCircleRadiusLabel(){\n\tconst circleRadiusLabel = new TextSprite(\"\");\n\n\tcircleRadiusLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\tcircleRadiusLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\tcircleRadiusLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\tcircleRadiusLabel.fontsize = 16;\n\tcircleRadiusLabel.material.depthTest = false;\n\tcircleRadiusLabel.material.opacity = 1;\n\tcircleRadiusLabel.visible = false;\n\t\n\treturn circleRadiusLabel;\n}\n\nfunction createCircleRadiusLine(){\n\tconst lineGeometry = new LineGeometry();\n\n\tlineGeometry.setPositions([\n\t\t0, 0, 0,\n\t\t0, 0, 0,\n\t]);\n\n\tconst lineMaterial = new LineMaterial({ \n\t\tcolor: 0xff0000, \n\t\tlinewidth: 2, \n\t\tresolution: new THREE.Vector2(1000, 1000),\n\t\tgapSize: 1,\n\t\tdashed: true,\n\t});\n\n\tlineMaterial.depthTest = false;\n\n\tconst circleRadiusLine = new Line2(lineGeometry, lineMaterial);\n\tcircleRadiusLine.visible = false;\n\n\treturn circleRadiusLine;\n}\n\nfunction createCircleLine(){\n\tconst coordinates = [];\n\n\tlet n = 128;\n\tfor(let i = 0; i <= n; i++){\n\t\tlet u0 = 2 * Math.PI * (i / n);\n\t\tlet u1 = 2 * Math.PI * (i + 1) / n;\n\n\t\tlet p0 = new THREE.Vector3(\n\t\t\tMath.cos(u0), \n\t\t\tMath.sin(u0), \n\t\t\t0\n\t\t);\n\n\t\tlet p1 = new THREE.Vector3(\n\t\t\tMath.cos(u1), \n\t\t\tMath.sin(u1), \n\t\t\t0\n\t\t);\n\n\t\tcoordinates.push(\n\t\t\t...p0.toArray(),\n\t\t\t...p1.toArray(),\n\t\t);\n\t}\n\n\tconst geometry = new LineGeometry();\n\tgeometry.setPositions(coordinates);\n\n\tconst material = new LineMaterial({ \n\t\tcolor: 0xff0000, \n\t\tdashSize: 5, \n\t\tgapSize: 2,\n\t\tlinewidth: 2, \n\t\tresolution: new THREE.Vector2(1000, 1000),\n\t});\n\n\tmaterial.depthTest = false;\n\n\tconst circleLine = new Line2(geometry, material);\n\tcircleLine.visible = false;\n\tcircleLine.computeLineDistances();\n\n\treturn circleLine;\n}\n\nfunction createCircleCenter(){\n\tconst sg = new THREE.SphereGeometry(1, 32, 32);\n\tconst sm = new THREE.MeshNormalMaterial();\n\t\n\tconst circleCenter = new THREE.Mesh(sg, sm);\n\tcircleCenter.visible = false;\n\n\treturn circleCenter;\n}\n\nfunction createLine(){\n\tconst geometry = new LineGeometry();\n\n\tgeometry.setPositions([\n\t\t0, 0, 0,\n\t\t0, 0, 0,\n\t]);\n\n\tconst material = new LineMaterial({ \n\t\tcolor: 0xff0000, \n\t\tlinewidth: 2, \n\t\tresolution: new THREE.Vector2(1000, 1000),\n\t\tgapSize: 1,\n\t\tdashed: true,\n\t});\n\n\tmaterial.depthTest = false;\n\n\tconst line = new Line2(geometry, material);\n\n\treturn line;\n}\n\nfunction createCircle(){\n\n\tconst coordinates = [];\n\n\tlet n = 128;\n\tfor(let i = 0; i <= n; i++){\n\t\tlet u0 = 2 * Math.PI * (i / n);\n\t\tlet u1 = 2 * Math.PI * (i + 1) / n;\n\n\t\tlet p0 = new THREE.Vector3(\n\t\t\tMath.cos(u0), \n\t\t\tMath.sin(u0), \n\t\t\t0\n\t\t);\n\n\t\tlet p1 = new THREE.Vector3(\n\t\t\tMath.cos(u1), \n\t\t\tMath.sin(u1), \n\t\t\t0\n\t\t);\n\n\t\tcoordinates.push(\n\t\t\t...p0.toArray(),\n\t\t\t...p1.toArray(),\n\t\t);\n\t}\n\n\tconst geometry = new LineGeometry();\n\tgeometry.setPositions(coordinates);\n\n\tconst material = new LineMaterial({ \n\t\tcolor: 0xff0000, \n\t\tdashSize: 5, \n\t\tgapSize: 2,\n\t\tlinewidth: 2, \n\t\tresolution: new THREE.Vector2(1000, 1000),\n\t});\n\n\tmaterial.depthTest = false;\n\n\tconst line = new Line2(geometry, material);\n\tline.computeLineDistances();\n\n\treturn line;\n\n}\n\nfunction createAzimuth(){\n\n\tconst azimuth = {\n\t\tlabel: null,\n\t\tcenter: null,\n\t\ttarget: null,\n\t\tnorth: null,\n\t\tcenterToNorth: null,\n\t\tcenterToTarget: null,\n\t\tcenterToTargetground: null,\n\t\ttargetgroundToTarget: null,\n\t\tcircle: null,\n\n\t\tnode: null,\n\t};\n\n\tconst sg = new THREE.SphereGeometry(1, 32, 32);\n\tconst sm = new THREE.MeshNormalMaterial();\n\n\t{\n\t\tconst label = new TextSprite(\"\");\n\n\t\tlabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\t\tlabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\tlabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\tlabel.fontsize = 16;\n\t\tlabel.material.depthTest = false;\n\t\tlabel.material.opacity = 1;\n\n\t\tazimuth.label = label;\n\t}\n\n\tazimuth.center = new THREE.Mesh(sg, sm);\n\tazimuth.target = new THREE.Mesh(sg, sm);\n\tazimuth.north = new THREE.Mesh(sg, sm);\n\tazimuth.centerToNorth = createLine();\n\tazimuth.centerToTarget = createLine();\n\tazimuth.centerToTargetground = createLine();\n\tazimuth.targetgroundToTarget = createLine();\n\tazimuth.circle = createCircle();\n\n\tazimuth.node = new THREE.Object3D();\n\tazimuth.node.add(\n\t\tazimuth.centerToNorth,\n\t\tazimuth.centerToTarget,\n\t\tazimuth.centerToTargetground,\n\t\tazimuth.targetgroundToTarget,\n\t\tazimuth.circle,\n\t\tazimuth.label,\n\t\tazimuth.center,\n\t\tazimuth.target,\n\t\tazimuth.north,\n\t);\n\n\treturn azimuth;\n}\n\nexport class Measure extends THREE.Object3D {\n\tconstructor () {\n\t\tsuper();\n\n\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\n\t\tthis.name = 'Measure_' + this.constructor.counter;\n\t\tthis.points = [];\n\t\tthis._showDistances = true;\n\t\tthis._showCoordinates = false;\n\t\tthis._showArea = false;\n\t\tthis._closed = true;\n\t\tthis._showAngles = false;\n\t\tthis._showCircle = false;\n\t\tthis._showHeight = false;\n\t\tthis._showEdges = true;\n\t\tthis._showAzimuth = false;\n\t\tthis.maxMarkers = Number.MAX_SAFE_INTEGER;\n\n\t\tthis.sphereGeometry = new THREE.SphereGeometry(0.4, 10, 10);\n\t\tthis.color = new THREE.Color(0xff0000);\n\n\t\tthis.spheres = [];\n\t\tthis.edges = [];\n\t\tthis.sphereLabels = [];\n\t\tthis.edgeLabels = [];\n\t\tthis.angleLabels = [];\n\t\tthis.coordinateLabels = [];\n\n\t\tthis.heightEdge = createHeightLine();\n\t\tthis.heightLabel = createHeightLabel();\n\t\tthis.areaLabel = createAreaLabel();\n\t\tthis.circleRadiusLabel = createCircleRadiusLabel();\n\t\tthis.circleRadiusLine = createCircleRadiusLine();\n\t\tthis.circleLine = createCircleLine();\n\t\tthis.circleCenter = createCircleCenter();\n\n\t\tthis.azimuth = createAzimuth();\n\n\t\tthis.add(this.heightEdge);\n\t\tthis.add(this.heightLabel);\n\t\tthis.add(this.areaLabel);\n\t\tthis.add(this.circleRadiusLabel);\n\t\tthis.add(this.circleRadiusLine);\n\t\tthis.add(this.circleLine);\n\t\tthis.add(this.circleCenter);\n\n\t\tthis.add(this.azimuth.node);\n\n\t}\n\n\tcreateSphereMaterial () {\n\t\tlet sphereMaterial = new THREE.MeshLambertMaterial({\n\t\t\t//shading: THREE.SmoothShading,\n\t\t\tcolor: this.color,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false}\n\t\t);\n\n\t\treturn sphereMaterial;\n\t};\n\n\taddMarker (point) {\n\t\tif (point.x != null) {\n\t\t\tpoint = {position: point};\n\t\t}else if(point instanceof Array){\n\t\t\tpoint = {position: new THREE.Vector3(...point)};\n\t\t}\n\t\tthis.points.push(point);\n\n\t\t// sphere\n\t\tlet sphere = new THREE.Mesh(this.sphereGeometry, this.createSphereMaterial());\n\n\t\tthis.add(sphere);\n\t\tthis.spheres.push(sphere);\n\n\t\t{ // edges\n\t\t\tlet lineGeometry = new LineGeometry();\n\t\t\tlineGeometry.setPositions( [\n\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t0, 0, 0,\n\t\t\t]);\n\n\t\t\tlet lineMaterial = new LineMaterial({\n\t\t\t\tcolor: 0xff0000, \n\t\t\t\tlinewidth: 2, \n\t\t\t\tresolution: new THREE.Vector2(1000, 1000),\n\t\t\t});\n\n\t\t\tlineMaterial.depthTest = false;\n\n\t\t\tlet edge = new Line2(lineGeometry, lineMaterial);\n\t\t\tedge.visible = true;\n\n\t\t\tthis.add(edge);\n\t\t\tthis.edges.push(edge);\n\t\t}\n\n\t\t{ // edge labels\n\t\t\tlet edgeLabel = new TextSprite();\n\t\t\tedgeLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tedgeLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tedgeLabel.material.depthTest = false;\n\t\t\tedgeLabel.visible = false;\n\t\t\tedgeLabel.fontsize = 16;\n\t\t\tthis.edgeLabels.push(edgeLabel);\n\t\t\tthis.add(edgeLabel);\n\t\t}\n\n\t\t{ // angle labels\n\t\t\tlet angleLabel = new TextSprite();\n\t\t\tangleLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tangleLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tangleLabel.fontsize = 16;\n\t\t\tangleLabel.material.depthTest = false;\n\t\t\tangleLabel.material.opacity = 1;\n\t\t\tangleLabel.visible = false;\n\t\t\tthis.angleLabels.push(angleLabel);\n\t\t\tthis.add(angleLabel);\n\t\t}\n\n\t\t{ // coordinate labels\n\t\t\tlet coordinateLabel = new TextSprite();\n\t\t\tcoordinateLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tcoordinateLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tcoordinateLabel.fontsize = 16;\n\t\t\tcoordinateLabel.material.depthTest = false;\n\t\t\tcoordinateLabel.material.opacity = 1;\n\t\t\tcoordinateLabel.visible = false;\n\t\t\tthis.coordinateLabels.push(coordinateLabel);\n\t\t\tthis.add(coordinateLabel);\n\t\t}\n\n\t\t{ // Event Listeners\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\tlet i = this.spheres.indexOf(e.drag.object);\n\t\t\t\t\tif (i !== -1) {\n\t\t\t\t\t\tlet point = this.points[i];\n\t\t\t\t\t\t\n\t\t\t\t\t\t// loop through current keys and cleanup ones that will be orphaned\n\t\t\t\t\t\tfor (let key of Object.keys(point)) {\n\t\t\t\t\t\t\tif (!I.point[key]) {\n\t\t\t\t\t\t\t\tdelete point[key];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let key of Object.keys(I.point).filter(e => e !== 'position')) {\n\t\t\t\t\t\t\tpoint[key] = I.point[key];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.setPosition(i, I.location);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet drop = e => {\n\t\t\t\tlet i = this.spheres.indexOf(e.drag.object);\n\t\t\t\tif (i !== -1) {\n\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\t'type': 'marker_dropped',\n\t\t\t\t\t\t'measurement': this,\n\t\t\t\t\t\t'index': i\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet mouseover = (e) => e.object.material.emissive.setHex(0x888888);\n\t\t\tlet mouseleave = (e) => e.object.material.emissive.setHex(0x000000);\n\n\t\t\tsphere.addEventListener('drag', drag);\n\t\t\tsphere.addEventListener('drop', drop);\n\t\t\tsphere.addEventListener('mouseover', mouseover);\n\t\t\tsphere.addEventListener('mouseleave', mouseleave);\n\t\t}\n\n\t\tlet event = {\n\t\t\ttype: 'marker_added',\n\t\t\tmeasurement: this,\n\t\t\tsphere: sphere\n\t\t};\n\t\tthis.dispatchEvent(event);\n\n\t\tthis.setMarker(this.points.length - 1, point);\n\t};\n\n\tremoveMarker (index) {\n\t\tthis.points.splice(index, 1);\n\n\t\tthis.remove(this.spheres[index]);\n\n\t\tlet edgeIndex = (index === 0) ? 0 : (index - 1);\n\t\tthis.remove(this.edges[edgeIndex]);\n\t\tthis.edges.splice(edgeIndex, 1);\n\n\t\tthis.remove(this.edgeLabels[edgeIndex]);\n\t\tthis.edgeLabels.splice(edgeIndex, 1);\n\t\tthis.coordinateLabels.splice(index, 1);\n\n\t\tthis.remove(this.angleLabels[index]);\n\t\tthis.angleLabels.splice(index, 1);\n\n\t\tthis.spheres.splice(index, 1);\n\n\t\tthis.update();\n\n\t\tthis.dispatchEvent({type: 'marker_removed', measurement: this});\n\t};\n\n\tsetMarker (index, point) {\n\t\tthis.points[index] = point;\n\n\t\tlet event = {\n\t\t\ttype: 'marker_moved',\n\t\t\tmeasure:\tthis,\n\t\t\tindex:\tindex,\n\t\t\tposition: point.position.clone()\n\t\t};\n\t\tthis.dispatchEvent(event);\n\n\t\tthis.update();\n\t}\n\n\tsetPosition (index, position) {\n\t\tlet point = this.points[index];\n\t\tpoint.position.copy(position);\n\n\t\tlet event = {\n\t\t\ttype: 'marker_moved',\n\t\t\tmeasure:\tthis,\n\t\t\tindex:\tindex,\n\t\t\tposition: position.clone()\n\t\t};\n\t\tthis.dispatchEvent(event);\n\n\t\tthis.update();\n\t};\n\n\tgetArea () {\n\t\tlet area = 0;\n\t\tlet j = this.points.length - 1;\n\n\t\tfor (let i = 0; i < this.points.length; i++) {\n\t\t\tlet p1 = this.points[i].position;\n\t\t\tlet p2 = this.points[j].position;\n\t\t\tarea += (p2.x + p1.x) * (p1.y - p2.y);\n\t\t\tj = i;\n\t\t}\n\n\t\treturn Math.abs(area / 2);\n\t};\n\n\tgetTotalDistance () {\n\t\tif (this.points.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet distance = 0;\n\n\t\tfor (let i = 1; i < this.points.length; i++) {\n\t\t\tlet prev = this.points[i - 1].position;\n\t\t\tlet curr = this.points[i].position;\n\t\t\tlet d = prev.distanceTo(curr);\n\n\t\t\tdistance += d;\n\t\t}\n\n\t\tif (this.closed && this.points.length > 1) {\n\t\t\tlet first = this.points[0].position;\n\t\t\tlet last = this.points[this.points.length - 1].position;\n\t\t\tlet d = last.distanceTo(first);\n\n\t\t\tdistance += d;\n\t\t}\n\n\t\treturn distance;\n\t}\n\n\tgetAngleBetweenLines (cornerPoint, point1, point2) {\n\t\tlet v1 = new THREE.Vector3().subVectors(point1.position, cornerPoint.position);\n\t\tlet v2 = new THREE.Vector3().subVectors(point2.position, cornerPoint.position);\n\n\t\t// avoid the error printed by threejs if denominator is 0\n\t\tconst denominator = Math.sqrt( v1.lengthSq() * v2.lengthSq() );\n\t\tif(denominator === 0){\n\t\t\treturn 0;\n\t\t}else{\n\t\t\treturn v1.angleTo(v2);\n\t\t}\n\t};\n\n\tgetAngle (index) {\n\t\tif (this.points.length < 3 || index >= this.points.length) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet previous = (index === 0) ? this.points[this.points.length - 1] : this.points[index - 1];\n\t\tlet point = this.points[index];\n\t\tlet next = this.points[(index + 1) % (this.points.length)];\n\n\t\treturn this.getAngleBetweenLines(point, previous, next);\n\t}\n\n\t// updateAzimuth(){\n\t// \t// if(this.points.length !== 2){\n\t// \t// \treturn;\n\t// \t// }\n\n\t// \t// const azimuth = this.azimuth;\n\n\t// \t// const [p0, p1] = this.points;\n\n\t// \t// const r = p0.position.distanceTo(p1.position);\n\t\t\n\t// }\n\n\tupdate () {\n\t\tif (this.points.length === 0) {\n\t\t\treturn;\n\t\t} else if (this.points.length === 1) {\n\t\t\tlet point = this.points[0];\n\t\t\tlet position = point.position;\n\t\t\tthis.spheres[0].position.copy(position);\n\n\t\t\t{ // coordinate labels\n\t\t\t\tlet coordinateLabel = this.coordinateLabels[0];\n\t\t\t\t\n\t\t\t\tlet msg = position.toArray().map(p => Utils.addCommas(p.toFixed(2))).join(\" / \");\n\t\t\t\tcoordinateLabel.setText(msg);\n\n\t\t\t\tcoordinateLabel.visible = this.showCoordinates;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet lastIndex = this.points.length - 1;\n\n\t\tlet centroid = new THREE.Vector3();\n\t\tfor (let i = 0; i <= lastIndex; i++) {\n\t\t\tlet point = this.points[i];\n\t\t\tcentroid.add(point.position);\n\t\t}\n\t\tcentroid.divideScalar(this.points.length);\n\n\t\tfor (let i = 0; i <= lastIndex; i++) {\n\t\t\tlet index = i;\n\t\t\tlet nextIndex = (i + 1 > lastIndex) ? 0 : i + 1;\n\t\t\tlet previousIndex = (i === 0) ? lastIndex : i - 1;\n\n\t\t\tlet point = this.points[index];\n\t\t\tlet nextPoint = this.points[nextIndex];\n\t\t\tlet previousPoint = this.points[previousIndex];\n\n\t\t\tlet sphere = this.spheres[index];\n\n\t\t\t// spheres\n\t\t\tsphere.position.copy(point.position);\n\t\t\tsphere.material.color = this.color;\n\n\t\t\t{ // edges\n\t\t\t\tlet edge = this.edges[index];\n\n\t\t\t\tedge.material.color = this.color;\n\n\t\t\t\tedge.position.copy(point.position);\n\n\t\t\t\tedge.geometry.setPositions([\n\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t...nextPoint.position.clone().sub(point.position).toArray(),\n\t\t\t\t]);\n\n\t\t\t\tedge.geometry.verticesNeedUpdate = true;\n\t\t\t\tedge.geometry.computeBoundingSphere();\n\t\t\t\tedge.computeLineDistances();\n\t\t\t\tedge.visible = index < lastIndex || this.closed;\n\t\t\t\t\n\t\t\t\tif(!this.showEdges){\n\t\t\t\t\tedge.visible = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // edge labels\n\t\t\t\tlet edgeLabel = this.edgeLabels[i];\n\n\t\t\t\tlet center = new THREE.Vector3().add(point.position);\n\t\t\t\tcenter.add(nextPoint.position);\n\t\t\t\tcenter = center.multiplyScalar(0.5);\n\t\t\t\tlet distance = point.position.distanceTo(nextPoint.position);\n\n\t\t\t\tedgeLabel.position.copy(center);\n\n\t\t\t\tlet suffix = \"\";\n\t\t\t\tif(this.lengthUnit != null && this.lengthUnitDisplay != null){\n\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\tsuffix = this.lengthUnitDisplay.code;\n\t\t\t\t}\n\n\t\t\t\tlet txtLength = Utils.addCommas(distance.toFixed(2));\n\t\t\t\tedgeLabel.setText(`${txtLength} ${suffix}`);\n\t\t\t\tedgeLabel.visible = this.showDistances && (index < lastIndex || this.closed) && this.points.length >= 2 && distance > 0;\n\t\t\t}\n\n\t\t\t{ // angle labels\n\t\t\t\tlet angleLabel = this.angleLabels[i];\n\t\t\t\tlet angle = this.getAngleBetweenLines(point, previousPoint, nextPoint);\n\n\t\t\t\tlet dir = nextPoint.position.clone().sub(previousPoint.position);\n\t\t\t\tdir.multiplyScalar(0.5);\n\t\t\t\tdir = previousPoint.position.clone().add(dir).sub(point.position).normalize();\n\n\t\t\t\tlet dist = Math.min(point.position.distanceTo(previousPoint.position), point.position.distanceTo(nextPoint.position));\n\t\t\t\tdist = dist / 9;\n\n\t\t\t\tlet labelPos = point.position.clone().add(dir.multiplyScalar(dist));\n\t\t\t\tangleLabel.position.copy(labelPos);\n\n\t\t\t\tlet msg = Utils.addCommas((angle * (180.0 / Math.PI)).toFixed(1)) + '\\u00B0';\n\t\t\t\tangleLabel.setText(msg);\n\n\t\t\t\tangleLabel.visible = this.showAngles && (index < lastIndex || this.closed) && this.points.length >= 3 && angle > 0;\n\t\t\t}\n\t\t}\n\n\t\t{ // update height stuff\n\t\t\tlet heightEdge = this.heightEdge;\n\t\t\theightEdge.visible = this.showHeight;\n\t\t\tthis.heightLabel.visible = this.showHeight;\n\n\t\t\tif (this.showHeight) {\n\t\t\t\tlet sorted = this.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\n\t\t\t\tlet start = new THREE.Vector3(highPoint.x, highPoint.y, min);\n\t\t\t\tlet end = new THREE.Vector3(highPoint.x, highPoint.y, max);\n\n\t\t\t\theightEdge.position.copy(lowPoint);\n\n\t\t\t\theightEdge.geometry.setPositions([\n\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t...start.clone().sub(lowPoint).toArray(),\n\t\t\t\t\t...start.clone().sub(lowPoint).toArray(),\n\t\t\t\t\t...end.clone().sub(lowPoint).toArray(),\n\t\t\t\t]);\n\n\t\t\t\theightEdge.geometry.verticesNeedUpdate = true;\n\t\t\t\t// heightEdge.geometry.computeLineDistances();\n\t\t\t\t// heightEdge.geometry.lineDistancesNeedUpdate = true;\n\t\t\t\theightEdge.geometry.computeBoundingSphere();\n\t\t\t\theightEdge.computeLineDistances();\n\n\t\t\t\t// heightEdge.material.dashSize = height / 40;\n\t\t\t\t// heightEdge.material.gapSize = height / 40;\n\n\t\t\t\tlet heightLabelPosition = start.clone().add(end).multiplyScalar(0.5);\n\t\t\t\tthis.heightLabel.position.copy(heightLabelPosition);\n\n\t\t\t\tlet suffix = \"\";\n\t\t\t\tif(this.lengthUnit != null && this.lengthUnitDisplay != null){\n\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\tsuffix = this.lengthUnitDisplay.code;\n\t\t\t\t}\n\n\t\t\t\tlet txtHeight = Utils.addCommas(height.toFixed(2));\n\t\t\t\tlet msg = `${txtHeight} ${suffix}`;\n\t\t\t\tthis.heightLabel.setText(msg);\n\t\t\t}\n\t\t}\n\n\t\t{ // update circle stuff\n\t\t\tconst circleRadiusLabel = this.circleRadiusLabel;\n\t\t\tconst circleRadiusLine = this.circleRadiusLine;\n\t\t\tconst circleLine = this.circleLine;\n\t\t\tconst circleCenter = this.circleCenter;\n\n\t\t\tconst circleOkay = this.points.length === 3;\n\n\t\t\tcircleRadiusLabel.visible = this.showCircle && circleOkay;\n\t\t\tcircleRadiusLine.visible = this.showCircle && circleOkay;\n\t\t\tcircleLine.visible = this.showCircle && circleOkay;\n\t\t\tcircleCenter.visible = this.showCircle && circleOkay;\n\n\t\t\tif(this.showCircle && circleOkay){\n\n\t\t\t\tconst A = this.points[0].position;\n\t\t\t\tconst B = this.points[1].position;\n\t\t\t\tconst C = this.points[2].position;\n\t\t\t\tconst AB = B.clone().sub(A);\n\t\t\t\tconst AC = C.clone().sub(A);\n\t\t\t\tconst N = AC.clone().cross(AB).normalize();\n\n\t\t\t\tconst center = Potree.Utils.computeCircleCenter(A, B, C);\n\t\t\t\tconst radius = center.distanceTo(A);\n\n\n\t\t\t\tconst scale = radius / 20;\n\t\t\t\tcircleCenter.position.copy(center);\n\t\t\t\tcircleCenter.scale.set(scale, scale, scale);\n\n\t\t\t\t//circleRadiusLine.geometry.vertices[0].set(0, 0, 0);\n\t\t\t\t//circleRadiusLine.geometry.vertices[1].copy(B.clone().sub(center));\n\n\t\t\t\tcircleRadiusLine.geometry.setPositions( [\n\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t...B.clone().sub(center).toArray()\n\t\t\t\t] );\n\n\t\t\t\tcircleRadiusLine.geometry.verticesNeedUpdate = true;\n\t\t\t\tcircleRadiusLine.geometry.computeBoundingSphere();\n\t\t\t\tcircleRadiusLine.position.copy(center);\n\t\t\t\tcircleRadiusLine.computeLineDistances();\n\n\t\t\t\tconst target = center.clone().add(N);\n\t\t\t\tcircleLine.position.copy(center);\n\t\t\t\tcircleLine.scale.set(radius, radius, radius);\n\t\t\t\tcircleLine.lookAt(target);\n\t\t\t\t\n\t\t\t\tcircleRadiusLabel.visible = true;\n\t\t\t\tcircleRadiusLabel.position.copy(center.clone().add(B).multiplyScalar(0.5));\n\t\t\t\tcircleRadiusLabel.setText(`${radius.toFixed(3)}`);\n\n\t\t\t}\n\t\t}\n\n\t\t{ // update area label\n\t\t\tthis.areaLabel.position.copy(centroid);\n\t\t\tthis.areaLabel.visible = this.showArea && this.points.length >= 3;\n\t\t\tlet area = this.getArea();\n\n\t\t\tlet suffix = \"\";\n\t\t\tif(this.lengthUnit != null && this.lengthUnitDisplay != null){\n\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\tsuffix = this.lengthUnitDisplay.code;\n\t\t\t}\n\n\t\t\tlet txtArea = Utils.addCommas(area.toFixed(1));\n\t\t\tlet msg = `${txtArea} ${suffix}\\u00B2`;\n\t\t\tthis.areaLabel.setText(msg);\n\t\t}\n\n\t\t// this.updateAzimuth();\n\t};\n\n\traycast (raycaster, intersects) {\n\t\tfor (let i = 0; i < this.points.length; i++) {\n\t\t\tlet sphere = this.spheres[i];\n\n\t\t\tsphere.raycast(raycaster, intersects);\n\t\t}\n\n\t\t// recalculate distances because they are not necessarely correct\n\t\t// for scaled objects.\n\t\t// see https://github.com/mrdoob/three.js/issues/5827\n\t\t// TODO: remove this once the bug has been fixed\n\t\tfor (let i = 0; i < intersects.length; i++) {\n\t\t\tlet I = intersects[i];\n\t\t\tI.distance = raycaster.ray.origin.distanceTo(I.point);\n\t\t}\n\t\tintersects.sort(function (a, b) { return a.distance - b.distance; });\n\t};\n\n\tget showCoordinates () {\n\t\treturn this._showCoordinates;\n\t}\n\n\tset showCoordinates (value) {\n\t\tthis._showCoordinates = value;\n\t\tthis.update();\n\t}\n\n\tget showAngles () {\n\t\treturn this._showAngles;\n\t}\n\n\tset showAngles (value) {\n\t\tthis._showAngles = value;\n\t\tthis.update();\n\t}\n\n\tget showCircle () {\n\t\treturn this._showCircle;\n\t}\n\n\tset showCircle (value) {\n\t\tthis._showCircle = value;\n\t\tthis.update();\n\t}\n\n\tget showAzimuth(){\n\t\treturn this._showAzimuth;\n\t}\n\n\tset showAzimuth(value){\n\t\tthis._showAzimuth = value;\n\t\tthis.update();\n\t}\n\n\tget showEdges () {\n\t\treturn this._showEdges;\n\t}\n\n\tset showEdges (value) {\n\t\tthis._showEdges = value;\n\t\tthis.update();\n\t}\n\n\tget showHeight () {\n\t\treturn this._showHeight;\n\t}\n\n\tset showHeight (value) {\n\t\tthis._showHeight = value;\n\t\tthis.update();\n\t}\n\n\tget showArea () {\n\t\treturn this._showArea;\n\t}\n\n\tset showArea (value) {\n\t\tthis._showArea = value;\n\t\tthis.update();\n\t}\n\n\tget closed () {\n\t\treturn this._closed;\n\t}\n\n\tset closed (value) {\n\t\tthis._closed = value;\n\t\tthis.update();\n\t}\n\n\tget showDistances () {\n\t\treturn this._showDistances;\n\t}\n\n\tset showDistances (value) {\n\t\tthis._showDistances = value;\n\t\tthis.update();\n\t}\n\n}\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class PolygonClipVolume extends THREE.Object3D{\n\t\n\tconstructor(camera){\n\t\tsuper();\n\n\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\tthis.name = \"polygon_clip_volume_\" + this.constructor.counter;\n\n\t\tthis.camera = camera.clone();\n\t\tthis.camera.rotation.set(...camera.rotation.toArray()); // [r85] workaround because camera.clone() doesn't work on rotation\n\t\tthis.camera.rotation.order = camera.rotation.order;\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert();\n\n\t\tthis.viewMatrix = this.camera.matrixWorldInverse.clone();\n\t\tthis.projMatrix = this.camera.projectionMatrix.clone();\n\n\t\t// projected markers\n\t\tthis.markers = [];\n\t\tthis.initialized = false;\n\t}\n\n\taddMarker() {\n\n\t\tlet marker = new THREE.Mesh();\n\n\t\tlet cancel;\n\n\t\tlet drag = e => {\n\t\t\tlet size = e.viewer.renderer.getSize(new THREE.Vector2());\n\t\t\tlet projectedPos = new THREE.Vector3(\n\t\t\t\t2.0 * (e.drag.end.x / size.width) - 1.0,\n\t\t\t\t-2.0 * (e.drag.end.y / size.height) + 1.0,\n\t\t\t\t0\n\t\t\t);\n\n\t\t\tmarker.position.copy(projectedPos);\n\t\t};\n\t\t\n\t\tlet drop = e => {\t\n\t\t\tcancel();\n\t\t};\n\t\t\n\t\tcancel = e => {\n\t\t\tmarker.removeEventListener(\"drag\", drag);\n\t\t\tmarker.removeEventListener(\"drop\", drop);\n\t\t};\n\t\t\n\t\tmarker.addEventListener(\"drag\", drag);\n\t\tmarker.addEventListener(\"drop\", drop);\n\n\n\t\tthis.markers.push(marker);\n\t}\n\n\tremoveLastMarker() {\n\t\tif(this.markers.length > 0) {\n\t\t\tthis.markers.splice(this.markers.length - 1, 1);\n\t\t}\n\t}\n\n};","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport {XHRFactory} from \"./XHRFactory.js\";\nimport {Volume} from \"./utils/Volume.js\";\nimport {Profile} from \"./utils/Profile.js\";\nimport {Measure} from \"./utils/Measure.js\";\nimport {PolygonClipVolume} from \"./utils/PolygonClipVolume.js\";\n\nexport class Utils {\n\tstatic async loadShapefileFeatures (file, callback) {\n\t\tlet features = [];\n\n\t\tlet handleFinish = () => {\n\t\t\tcallback(features);\n\t\t};\n\n\t\tlet source = await shapefile.open(file);\n\n\t\twhile(true){\n\t\t\tlet result = await source.read();\n\n\t\t\tif (result.done) {\n\t\t\t\thandleFinish();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) {\n\t\t\t\tfeatures.push(result.value);\n\t\t\t}\n\t\t}\n\n\t}\n\n\tstatic toString (value) {\n\t\tif (value.x != null) {\n\t\t\treturn value.x.toFixed(2) + ', ' + value.y.toFixed(2) + ', ' + value.z.toFixed(2);\n\t\t} else {\n\t\t\treturn '' + value + '';\n\t\t}\n\t}\n\n\tstatic normalizeURL (url) {\n\t\tlet u = new URL(url);\n\n\t\treturn u.protocol + '//' + u.hostname + u.pathname.replace(/\\/+/g, '/');\n\t};\n\n\tstatic pathExists (url) {\n\t\tlet req = XHRFactory.createXMLHttpRequest();\n\t\treq.open('GET', url, false);\n\t\treq.send(null);\n\t\tif (req.status !== 200) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tstatic debugSphere(parent, position, scale, color){\n\t\tlet geometry = new THREE.SphereGeometry(1, 8, 8);\n\t\tlet material;\n\n\t\tif(color !== undefined){\n\t\t\tmaterial = new THREE.MeshBasicMaterial({color: color});\n\t\t}else{\n\t\t\tmaterial = new THREE.MeshNormalMaterial();\n\t\t}\n\t\tlet sphere = new THREE.Mesh(geometry, material);\n\t\tsphere.position.copy(position);\n\t\tsphere.scale.set(scale, scale, scale);\n\t\tparent.add(sphere);\n\n\t\treturn sphere;\n\t}\n\n\tstatic debugLine(parent, start, end, color){\n\n\t\tlet material = new THREE.LineBasicMaterial({ color: color }); \n\t\tlet geometry = new THREE.Geometry();\n\n\t\tconst p1 = new THREE.Vector3(0, 0, 0);\n\t\tconst p2 = end.clone().sub(start);\n\n\t\tgeometry.vertices.push(p1, p2);\n\n\t\tlet tl = new THREE.Line( geometry, material );\n\t\ttl.position.copy(start);\n\n\t\tparent.add(tl);\n\n\t\tlet line = {\n\t\t\tnode: tl,\n\t\t\tset: (start, end) => {\n\t\t\t\tgeometry.vertices[0].copy(start);\n\t\t\t\tgeometry.vertices[1].copy(end);\n\t\t\t\tgeometry.verticesNeedUpdate = true;\n\t\t\t},\n\t\t};\n\n\t\treturn line;\n\t}\n\n\tstatic debugCircle(parent, center, radius, normal, color){\n\t\tlet material = new THREE.LineBasicMaterial({ color: color });\n\n\t\tlet geometry = new THREE.Geometry();\n\n\t\tlet n = 32;\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 THREE.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 THREE.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\tgeometry.vertices.push(p0, p1); \n\t\t}\n\n\t\tlet tl = new THREE.Line( geometry, material ); \n\t\ttl.position.copy(center);\n\t\ttl.scale.set(radius, radius, radius);\n\n\t\tparent.add(tl);\n\t}\n\n\tstatic debugBox(parent, box, transform = new THREE.Matrix4(), color = 0xFFFF00){\n\t\t\n\t\tlet vertices = [\n\t\t\t[box.min.x, box.min.y, box.min.z],\n\t\t\t[box.min.x, box.min.y, box.max.z],\n\t\t\t[box.min.x, box.max.y, box.min.z],\n\t\t\t[box.min.x, box.max.y, box.max.z],\n\n\t\t\t[box.max.x, box.min.y, box.min.z],\n\t\t\t[box.max.x, box.min.y, box.max.z],\n\t\t\t[box.max.x, box.max.y, box.min.z],\n\t\t\t[box.max.x, box.max.y, box.max.z],\n\t\t].map(v => new THREE.Vector3(...v));\n\n\t\tlet edges = [\n\t\t\t[0, 4], [4, 5], [5, 1], [1, 0],\n\t\t\t[2, 6], [6, 7], [7, 3], [3, 2],\n\t\t\t[0, 2], [4, 6], [5, 7], [1, 3]\n\t\t];\n\n\t\tlet center = box.getCenter(new THREE.Vector3());\n\n\t\tlet centroids = [\n\t\t\t{position: [box.min.x, center.y, center.z], color: 0xFF0000},\n\t\t\t{position: [box.max.x, center.y, center.z], color: 0x880000},\n\n\t\t\t{position: [center.x, box.min.y, center.z], color: 0x00FF00},\n\t\t\t{position: [center.x, box.max.y, center.z], color: 0x008800},\n\n\t\t\t{position: [center.x, center.y, box.min.z], color: 0x0000FF},\n\t\t\t{position: [center.x, center.y, box.max.z], color: 0x000088},\n\t\t];\n\n\t\tfor(let vertex of vertices){\n\t\t\tlet pos = vertex.clone().applyMatrix4(transform);\n\n\t\t\tUtils.debugSphere(parent, pos, 0.1, 0xFF0000);\n\t\t}\n\n\t\tfor(let edge of edges){\n\t\t\tlet start = vertices[edge[0]].clone().applyMatrix4(transform);\n\t\t\tlet end = vertices[edge[1]].clone().applyMatrix4(transform);\n\n\t\t\tUtils.debugLine(parent, start, end, color);\n\t\t}\n\n\t\tfor(let centroid of centroids){\n\t\t\tlet pos = new THREE.Vector3(...centroid.position).applyMatrix4(transform);\n\n\t\t\tUtils.debugSphere(parent, pos, 0.1, centroid.color);\n\t\t}\n\t}\n\n\tstatic debugPlane(parent, plane, size = 1, color = 0x0000FF){\n\n\t\tlet planehelper = new THREE.PlaneHelper(plane, size, color);\n\n\t\tparent.add(planehelper);\n\n\t}\n\n\t/**\n\t * adapted from mhluska at https://github.com/mrdoob/three.js/issues/1561\n\t */\n\tstatic computeTransformedBoundingBox (box, transform) {\n\t\tlet vertices = [\n\t\t\tnew THREE.Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.max.x, box.min.y, box.min.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.min.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.min.x, box.min.y, box.max.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.max.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.max.x, box.max.y, box.min.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.max.x, box.min.y, box.max.z).applyMatrix4(transform),\n\t\t\tnew THREE.Vector3(box.max.x, box.max.y, box.max.z).applyMatrix4(transform)\n\t\t];\n\n\t\tlet boundingBox = new THREE.Box3();\n\t\tboundingBox.setFromPoints(vertices);\n\n\t\treturn boundingBox;\n\t};\n\n\t/**\n\t * add separators to large numbers\n\t *\n\t * @param nStr\n\t * @returns\n\t */\n\tstatic addCommas (nStr) {\n\t\tnStr += '';\n\t\tlet x = nStr.split('.');\n\t\tlet x1 = x[0];\n\t\tlet x2 = x.length > 1 ? '.' + x[1] : '';\n\t\tlet rgx = /(\\d+)(\\d{3})/;\n\t\twhile (rgx.test(x1)) {\n\t\t\tx1 = x1.replace(rgx, '$1' + ',' + '$2');\n\t\t}\n\t\treturn x1 + x2;\n\t};\n\n\tstatic removeCommas (str) {\n\t\treturn str.replace(/,/g, '');\n\t}\n\n\t/**\n\t * create worker from a string\n\t *\n\t * code from http://stackoverflow.com/questions/10343913/how-to-create-a-web-worker-from-a-string\n\t */\n\tstatic createWorker (code) {\n\t\tlet blob = new Blob([code], {type: 'application/javascript'});\n\t\tlet worker = new Worker(URL.createObjectURL(blob));\n\n\t\treturn worker;\n\t};\n\n\tstatic moveTo(scene, endPosition, endTarget){\n\n\t\tlet view = scene.view;\n\t\tlet camera = scene.getActiveCamera();\n\t\tlet animationDuration = 500;\n\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t{ // animate camera position\n\t\t\tlet tween = new TWEEN.Tween(view.position).to(endPosition, animationDuration);\n\t\t\ttween.easing(easing);\n\t\t\ttween.start();\n\t\t}\n\n\t\t{ // animate camera target\n\t\t\tlet camTargetDistance = camera.position.distanceTo(endTarget);\n\t\t\tlet target = new THREE.Vector3().addVectors(\n\t\t\t\tcamera.position,\n\t\t\t\tcamera.getWorldDirection(new THREE.Vector3()).clone().multiplyScalar(camTargetDistance)\n\t\t\t);\n\t\t\tlet tween = new TWEEN.Tween(target).to(endTarget, animationDuration);\n\t\t\ttween.easing(easing);\n\t\t\ttween.onUpdate(() => {\n\t\t\t\tview.lookAt(target);\n\t\t\t});\n\t\t\ttween.onComplete(() => {\n\t\t\t\tview.lookAt(target);\n\t\t\t});\n\t\t\ttween.start();\n\t\t}\n\n\t}\n\n\tstatic loadSkybox (path) {\n\t\tlet parent = new THREE.Object3D(\"skybox_root\");\n\n\t\tlet camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 100000);\n\t\tcamera.up.set(0, 0, 1);\n\t\tlet scene = new THREE.Scene();\n\n\t\tlet format = '.jpg';\n\t\tlet urls = [\n\t\t\tpath + 'px' + format, path + 'nx' + format,\n\t\t\tpath + 'py' + format, path + 'ny' + format,\n\t\t\tpath + 'pz' + format, path + 'nz' + format\n\t\t];\n\n\t\tlet materialArray = [];\n\t\t{\n\t\t\tfor (let i = 0; i < 6; i++) {\n\t\t\t\tlet material = new THREE.MeshBasicMaterial({\n\t\t\t\t\tmap: null,\n\t\t\t\t\tside: THREE.BackSide,\n\t\t\t\t\tdepthTest: false,\n\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\tcolor: 0x424556\n\t\t\t\t});\n\n\t\t\t\tmaterialArray.push(material);\n\n\t\t\t\tlet loader = new THREE.TextureLoader();\n\t\t\t\tloader.load(urls[i],\n\t\t\t\t\tfunction loaded (texture) {\n\t\t\t\t\t\tmaterial.map = texture;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t\t\tmaterial.color.setHex(0xffffff);\n\t\t\t\t\t}, function progress (xhr) {\n\t\t\t\t\t\t// console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );\n\t\t\t\t\t}, function error (xhr) {\n\t\t\t\t\t\tconsole.log('An error happened', xhr);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tlet skyGeometry = new THREE.CubeGeometry(700, 700, 700);\n\t\tlet skybox = new THREE.Mesh(skyGeometry, materialArray);\n\n\t\tscene.add(skybox);\n\n\t\tscene.traverse(n => n.frustumCulled = false);\n\n\t\t// z up\n\t\tscene.rotation.x = Math.PI / 2;\n\n\t\tparent.children.push(camera);\n\t\tcamera.parent = parent;\n\n\t\treturn {camera, scene, parent};\n\t};\n\n\tstatic createGrid (width, length, spacing, color) {\n\t\tlet material = new THREE.LineBasicMaterial({\n\t\t\tcolor: color || 0x888888\n\t\t});\n\n\t\tlet geometry = new THREE.Geometry();\n\t\tfor (let i = 0; i <= length; i++) {\n\t\t\tgeometry.vertices.push(new THREE.Vector3(-(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0));\n\t\t\tgeometry.vertices.push(new THREE.Vector3(+(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0));\n\t\t}\n\n\t\tfor (let i = 0; i <= width; i++) {\n\t\t\tgeometry.vertices.push(new THREE.Vector3(i * spacing - (spacing * width) / 2, -(spacing * length) / 2, 0));\n\t\t\tgeometry.vertices.push(new THREE.Vector3(i * spacing - (spacing * width) / 2, +(spacing * length) / 2, 0));\n\t\t}\n\n\t\tlet line = new THREE.LineSegments(geometry, material, THREE.LinePieces);\n\t\tline.receiveShadow = true;\n\t\treturn line;\n\t}\n\n\tstatic createBackgroundTexture (width, height) {\n\t\tfunction gauss (x, y) {\n\t\t\treturn (1 / (2 * Math.PI)) * Math.exp(-(x * x + y * y) / 2);\n\t\t};\n\n\t\t// map.magFilter = THREE.NearestFilter;\n\t\tlet size = width * height;\n\t\tlet data = new Uint8Array(3 * size);\n\n\t\tlet chroma = [1, 1.5, 1.7];\n\t\tlet max = gauss(0, 0);\n\n\t\tfor (let x = 0; x < width; x++) {\n\t\t\tfor (let y = 0; y < height; y++) {\n\t\t\t\tlet u = 2 * (x / width) - 1;\n\t\t\t\tlet v = 2 * (y / height) - 1;\n\n\t\t\t\tlet i = x + width * y;\n\t\t\t\tlet d = gauss(2 * u, 2 * v) / max;\n\t\t\t\tlet r = (Math.random() + Math.random() + Math.random()) / 3;\n\t\t\t\tr = (d * 0.5 + 0.5) * r * 0.03;\n\t\t\t\tr = r * 0.4;\n\n\t\t\t\t// d = Math.pow(d, 0.6);\n\n\t\t\t\tdata[3 * i + 0] = 255 * (d / 15 + 0.05 + r) * chroma[0];\n\t\t\t\tdata[3 * i + 1] = 255 * (d / 15 + 0.05 + r) * chroma[1];\n\t\t\t\tdata[3 * i + 2] = 255 * (d / 15 + 0.05 + r) * chroma[2];\n\t\t\t}\n\t\t}\n\n\t\tlet texture = new THREE.DataTexture(data, width, height, THREE.RGBFormat);\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\t}\n\n\tstatic getMousePointCloudIntersection (mouse, camera, viewer, pointclouds, params = {}) {\n\t\t\n\t\tlet renderer = viewer.renderer;\n\t\t\n\t\tlet nmouse = {\n\t\t\tx: (mouse.x / renderer.domElement.clientWidth) * 2 - 1,\n\t\t\ty: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1\n\t\t};\n\n\t\tlet pickParams = {};\n\n\t\tif(params.pickClipped){\n\t\t\tpickParams.pickClipped = params.pickClipped;\n\t\t}\n\n\t\tpickParams.x = mouse.x;\n\t\tpickParams.y = renderer.domElement.clientHeight - mouse.y;\n\n\t\tlet raycaster = new THREE.Raycaster();\n\t\traycaster.setFromCamera(nmouse, camera);\n\t\tlet ray = raycaster.ray;\n\n\t\tlet selectedPointcloud = null;\n\t\tlet closestDistance = Infinity;\n\t\tlet closestIntersection = null;\n\t\tlet closestPoint = null;\n\t\t\n\t\tfor(let pointcloud of pointclouds){\n\t\t\tlet point = pointcloud.pick(viewer, camera, ray, pickParams);\n\t\t\t\n\t\t\tif(!point){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet distance = camera.position.distanceTo(point.position);\n\n\t\t\tif (distance < closestDistance) {\n\t\t\t\tclosestDistance = distance;\n\t\t\t\tselectedPointcloud = pointcloud;\n\t\t\t\tclosestIntersection = point.position;\n\t\t\t\tclosestPoint = point;\n\t\t\t}\n\t\t}\n\n\t\tif (selectedPointcloud) {\n\t\t\treturn {\n\t\t\t\tlocation: closestIntersection,\n\t\t\t\tdistance: closestDistance,\n\t\t\t\tpointcloud: selectedPointcloud,\n\t\t\t\tpoint: closestPoint\n\t\t\t};\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tstatic pixelsArrayToImage (pixels, width, height) {\n\t\tlet canvas = document.createElement('canvas');\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tlet context = canvas.getContext('2d');\n\n\t\tpixels = new pixels.constructor(pixels);\n\n\t\tfor (let i = 0; i < pixels.length; i++) {\n\t\t\tpixels[i * 4 + 3] = 255;\n\t\t}\n\n\t\tlet imageData = context.createImageData(width, height);\n\t\timageData.data.set(pixels);\n\t\tcontext.putImageData(imageData, 0, 0);\n\n\t\tlet img = new Image();\n\t\timg.src = canvas.toDataURL();\n\t\t// img.style.transform = \"scaleY(-1)\";\n\n\t\treturn img;\n\t}\n\n\tstatic pixelsArrayToDataUrl(pixels, width, height) {\n\t\tlet canvas = document.createElement('canvas');\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tlet context = canvas.getContext('2d');\n\n\t\tpixels = new pixels.constructor(pixels);\n\n\t\tfor (let i = 0; i < pixels.length; i++) {\n\t\t\tpixels[i * 4 + 3] = 255;\n\t\t}\n\n\t\tlet imageData = context.createImageData(width, height);\n\t\timageData.data.set(pixels);\n\t\tcontext.putImageData(imageData, 0, 0);\n\n\t\tlet dataURL = canvas.toDataURL();\n\n\t\treturn dataURL;\n\t}\n\n\tstatic pixelsArrayToCanvas(pixels, width, height){\n\t\tlet canvas = document.createElement('canvas');\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tlet context = canvas.getContext('2d');\n\n\t\tpixels = new pixels.constructor(pixels);\n\n\t\t//for (let i = 0; i < pixels.length; i++) {\n\t\t//\tpixels[i * 4 + 3] = 255;\n\t\t//}\n\n\t\t// flip vertically\n\t\tlet bytesPerLine = width * 4;\n\t\tfor(let i = 0; i < parseInt(height / 2); i++){\n\t\t\tlet j = height - i - 1;\n\n\t\t\tlet lineI = pixels.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine);\n\t\t\tlet lineJ = pixels.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine);\n\t\t\tpixels.set(lineJ, i * bytesPerLine);\n\t\t\tpixels.set(lineI, j * bytesPerLine);\n\t\t}\n\n\t\tlet imageData = context.createImageData(width, height);\n\t\timageData.data.set(pixels);\n\t\tcontext.putImageData(imageData, 0, 0);\n\n\t\treturn canvas;\n\t}\n\n\tstatic removeListeners(dispatcher, type){\n\t\tif (dispatcher._listeners === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (dispatcher._listeners[ type ]) {\n\t\t\tdelete dispatcher._listeners[ type ];\n\t\t}\n\t}\n\n\tstatic mouseToRay(mouse, camera, width, height){\n\n\t\tlet normalizedMouse = {\n\t\t\tx: (mouse.x / width) * 2 - 1,\n\t\t\ty: -(mouse.y / height) * 2 + 1\n\t\t};\n\n\t\tlet vector = new THREE.Vector3(normalizedMouse.x, normalizedMouse.y, 0.5);\n\t\tlet origin = camera.position.clone();\n\t\tvector.unproject(camera);\n\t\tlet direction = new THREE.Vector3().subVectors(vector, origin).normalize();\n\n\t\tlet ray = new THREE.Ray(origin, direction);\n\n\t\treturn ray;\n\t}\n\n\tstatic projectedRadius(radius, camera, distance, screenWidth, screenHeight){\n\t\tif(camera instanceof THREE.OrthographicCamera){\n\t\t\treturn Utils.projectedRadiusOrtho(radius, camera.projectionMatrix, screenWidth, screenHeight);\n\t\t}else if(camera instanceof THREE.PerspectiveCamera){\n\t\t\treturn Utils.projectedRadiusPerspective(radius, camera.fov * Math.PI / 180, distance, screenHeight);\n\t\t}else{\n\t\t\tthrow new Error(\"invalid parameters\");\n\t\t}\n\t}\n\n\tstatic projectedRadiusPerspective(radius, fov, distance, screenHeight) {\n\t\tlet projFactor = (1 / Math.tan(fov / 2)) / distance;\n\t\tprojFactor = projFactor * screenHeight / 2;\n\n\t\treturn radius * projFactor;\n\t}\n\n\tstatic projectedRadiusOrtho(radius, proj, screenWidth, screenHeight) {\n\t\tlet p1 = new THREE.Vector4(0);\n\t\tlet p2 = new THREE.Vector4(radius);\n\n\t\tp1.applyMatrix4(proj);\n\t\tp2.applyMatrix4(proj);\n\t\tp1 = new THREE.Vector3(p1.x, p1.y, p1.z);\n\t\tp2 = new THREE.Vector3(p2.x, p2.y, p2.z);\n\t\tp1.x = (p1.x + 1.0) * 0.5 * screenWidth;\n\t\tp1.y = (p1.y + 1.0) * 0.5 * screenHeight;\n\t\tp2.x = (p2.x + 1.0) * 0.5 * screenWidth;\n\t\tp2.y = (p2.y + 1.0) * 0.5 * screenHeight;\n\t\treturn p1.distanceTo(p2);\n\t}\n\t\t\n\t\t\n\tstatic topView(camera, node){\n\t\tcamera.position.set(0, 1, 0);\n\t\tcamera.rotation.set(-Math.PI / 2, 0, 0);\n\t\tcamera.zoomTo(node, 1);\n\t}\n\n\tstatic frontView (camera, node) {\n\t\tcamera.position.set(0, 0, 1);\n\t\tcamera.rotation.set(0, 0, 0);\n\t\tcamera.zoomTo(node, 1);\n\t}\n\n\tstatic leftView (camera, node) {\n\t\tcamera.position.set(-1, 0, 0);\n\t\tcamera.rotation.set(0, -Math.PI / 2, 0);\n\t\tcamera.zoomTo(node, 1);\n\t}\n\n\tstatic rightView (camera, node) {\n\t\tcamera.position.set(1, 0, 0);\n\t\tcamera.rotation.set(0, Math.PI / 2, 0);\n\t\tcamera.zoomTo(node, 1);\n\t}\n\n\t\n\tstatic findClosestGpsTime(target, viewer){\n\t\tconst start = performance.now();\n\n\t\tconst nodes = [];\n\t\tfor(const pc of viewer.scene.pointclouds){\n\t\t\tnodes.push(pc.root);\n\n\t\t\tfor(const child of pc.root.children){\n\t\t\t\tif(child){\n\t\t\t\t\tnodes.push(child);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet closestNode = null;\n\t\tlet closestIndex = Infinity;\n\t\tlet closestDistance = Infinity;\n\t\tlet closestValue = 0;\n\n\t\tfor(const node of nodes){\n\n\t\t\tconst isOkay = node.geometryNode != null \n\t\t\t\t&& node.geometryNode.geometry != null\n\t\t\t\t&& node.sceneNode != null;\n\n\t\t\tif(!isOkay){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet geometry = node.geometryNode.geometry;\n\t\t\tlet gpsTime = geometry.attributes[\"gps-time\"];\n\t\t\tlet range = gpsTime.potree.range;\n\n\t\t\tfor(let i = 0; i < gpsTime.array.length; i++){\n\t\t\t\tlet value = gpsTime.array[i];\n\t\t\t\tvalue = value * (range[1] - range[0]) + range[0];\n\t\t\t\tconst distance = Math.abs(target - value);\n\n\t\t\t\tif(distance < closestDistance){\n\t\t\t\t\tclosestIndex = i;\n\t\t\t\t\tclosestDistance = distance;\n\t\t\t\t\tclosestValue = value;\n\t\t\t\t\tclosestNode = node;\n\t\t\t\t\t//console.log(\"found a closer one: \" + value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst geometry = closestNode.geometryNode.geometry;\n\t\tconst position = new THREE.Vector3(\n\t\t\tgeometry.attributes.position.array[3 * closestIndex + 0],\n\t\t\tgeometry.attributes.position.array[3 * closestIndex + 1],\n\t\t\tgeometry.attributes.position.array[3 * closestIndex + 2],\n\t\t);\n\n\t\tposition.applyMatrix4(closestNode.sceneNode.matrixWorld);\n\n\t\tconst end = performance.now();\n\t\tconst duration = (end - start);\n\t\tconsole.log(`duration: ${duration.toFixed(3)}ms`);\n\n\t\treturn {\n\t\t\tnode: closestNode,\n\t\t\tindex: closestIndex,\n\t\t\tposition: position,\n\t\t};\n\t}\n\n\t/**\n\t *\n\t * 0: no intersection\n\t * 1: intersection\n\t * 2: fully inside\n\t */\n\tstatic frustumSphereIntersection (frustum, sphere) {\n\t\tlet planes = frustum.planes;\n\t\tlet center = sphere.center;\n\t\tlet negRadius = -sphere.radius;\n\n\t\tlet minDistance = Number.MAX_VALUE;\n\n\t\tfor (let i = 0; i < 6; i++) {\n\t\t\tlet distance = planes[ i ].distanceToPoint(center);\n\n\t\t\tif (distance < negRadius) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tminDistance = Math.min(minDistance, distance);\n\t\t}\n\n\t\treturn (minDistance >= sphere.radius) ? 2 : 1;\n\t}\n\n\t// code taken from three.js\n\t// ImageUtils - generateDataTexture()\n\tstatic generateDataTexture (width, height, color) {\n\t\tlet size = width * height;\n\t\tlet data = new Uint8Array(4 * width * height);\n\n\t\tlet r = Math.floor(color.r * 255);\n\t\tlet g = Math.floor(color.g * 255);\n\t\tlet b = Math.floor(color.b * 255);\n\n\t\tfor (let i = 0; i < size; i++) {\n\t\t\tdata[ i * 3 ] = r;\n\t\t\tdata[ i * 3 + 1 ] = g;\n\t\t\tdata[ i * 3 + 2 ] = b;\n\t\t}\n\n\t\tlet texture = new THREE.DataTexture(data, width, height, THREE.RGBAFormat);\n\t\ttexture.needsUpdate = true;\n\t\ttexture.magFilter = THREE.NearestFilter;\n\n\t\treturn texture;\n\t}\n\n\t// from http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n\tstatic getParameterByName (name) {\n\t\tname = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n\t\tlet regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n\t\tlet results = regex.exec(document.location.search);\n\t\treturn results === null ? null : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n\t}\n\n\tstatic setParameter (name, value) {\n\t\t// value = encodeURIComponent(value);\n\n\t\tname = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n\t\tlet regex = new RegExp('([\\\\?&])(' + name + '=([^&#]*))');\n\t\tlet results = regex.exec(document.location.search);\n\n\t\tlet url = window.location.href;\n\t\tif (results === null) {\n\t\t\tif (window.location.search.length === 0) {\n\t\t\t\turl = url + '?';\n\t\t\t} else {\n\t\t\t\turl = url + '&';\n\t\t\t}\n\n\t\t\turl = url + name + '=' + value;\n\t\t} else {\n\t\t\tlet newValue = name + '=' + value;\n\t\t\turl = url.replace(results[2], newValue);\n\t\t}\n\t\twindow.history.replaceState({}, '', url);\n\t}\n\n\tstatic createChildAABB(aabb, index){\n\t\tlet min = aabb.min.clone();\n\t\tlet max = aabb.max.clone();\n\t\tlet size = new THREE.Vector3().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\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 THREE.Box3(min, max);\n\t}\n\n\t// see https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript\n\tstatic clipboardCopy(text){\n\t\tlet textArea = document.createElement(\"textarea\");\n\n\t\ttextArea.style.position = 'fixed';\n\t\ttextArea.style.top = 0;\n\t\ttextArea.style.left = 0;\n\n\t\ttextArea.style.width = '2em';\n\t\ttextArea.style.height = '2em';\n\n\t\ttextArea.style.padding = 0;\n\n\t\ttextArea.style.border = 'none';\n\t\ttextArea.style.outline = 'none';\n\t\ttextArea.style.boxShadow = 'none';\n\n\t\ttextArea.style.background = 'transparent';\n\n\t\ttextArea.value = text;\n\n\t\tdocument.body.appendChild(textArea);\n\n\t\ttextArea.select();\n\n\t\t try {\n\t\t\tlet success = document.execCommand('copy');\n\t\t\tif(success){\n\t\t\t\tconsole.log(\"copied text to clipboard\");\n\t\t\t}else{\n\t\t\t\tconsole.log(\"copy to clipboard failed\");\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log(\"error while trying to copy to clipboard\");\n\t\t}\n\n\t\tdocument.body.removeChild(textArea);\n\n\t}\n\n\tstatic getMeasurementIcon(measurement){\n\t\tif (measurement instanceof Measure) {\n\t\t\tif (measurement.showDistances && !measurement.showArea && !measurement.showAngles) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/distance.svg`;\n\t\t\t} else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/area.svg`;\n\t\t\t} else if (measurement.maxMarkers === 1) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/point.svg`;\n\t\t\t} else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/angle.png`;\n\t\t\t} else if (measurement.showHeight) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/height.svg`;\n\t\t\t} else {\n\t\t\t\treturn `${Potree.resourcePath}/icons/distance.svg`;\n\t\t\t}\n\t\t} else if (measurement instanceof Profile) {\n\t\t\treturn `${Potree.resourcePath}/icons/profile.svg`;\n\t\t} else if (measurement instanceof Volume) {\n\t\t\treturn `${Potree.resourcePath}/icons/volume.svg`;\n\t\t} else if (measurement instanceof PolygonClipVolume) {\n\t\t\treturn `${Potree.resourcePath}/icons/clip-polygon.svg`;\n\t\t}\n\t}\n\n\tstatic lineToLineIntersection(P0, P1, P2, P3){\n\n\t\tconst P = [P0, P1, P2, P3];\n\n\t\tconst d = (m, n, o, p) => {\n\t\t\tlet result = \n\t\t\t\t (P[m].x - P[n].x) * (P[o].x - P[p].x)\n\t\t\t\t+ (P[m].y - P[n].y) * (P[o].y - P[p].y)\n\t\t\t\t+ (P[m].z - P[n].z) * (P[o].z - P[p].z);\n\n\t\t\treturn result;\n\t\t};\n\n\n\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 /**-----------------------------------------------------------------**/ /\n\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\tconst mub = (d(0, 2, 3, 2) + mua * d(3, 2, 1, 0))\n\t\t /**--------------------------------------**/ /\n\t\t d(3, 2, 3, 2);\n\n\n\t\tconst P01 = P1.clone().sub(P0);\n\t\tconst P23 = P3.clone().sub(P2);\n\t\t\n\t\tconst Pa = P0.clone().add(P01.multiplyScalar(mua));\n\t\tconst Pb = P2.clone().add(P23.multiplyScalar(mub));\n\n\t\tconst center = Pa.clone().add(Pb).multiplyScalar(0.5);\n\n\t\treturn center;\n\t}\n\n\tstatic computeCircleCenter(A, B, C){\n\t\tconst AB = B.clone().sub(A);\n\t\tconst AC = C.clone().sub(A);\n\n\t\tconst N = AC.clone().cross(AB).normalize();\n\n\t\tconst ab_dir = AB.clone().cross(N).normalize();\n\t\tconst ac_dir = AC.clone().cross(N).normalize();\n\n\t\tconst ab_origin = A.clone().add(B).multiplyScalar(0.5);\n\t\tconst ac_origin = A.clone().add(C).multiplyScalar(0.5);\n\n\t\tconst P0 = ab_origin;\n\t\tconst P1 = ab_origin.clone().add(ab_dir);\n\n\t\tconst P2 = ac_origin;\n\t\tconst P3 = ac_origin.clone().add(ac_dir);\n\n\t\tconst center = Utils.lineToLineIntersection(P0, P1, P2, P3);\n\n\t\treturn center;\n\n\t\t// Potree.Utils.debugLine(viewer.scene.scene, P0, P1, 0x00ff00);\n\t\t// Potree.Utils.debugLine(viewer.scene.scene, P2, P3, 0x0000ff);\n\n\t\t// Potree.Utils.debugSphere(viewer.scene.scene, center, 0.03, 0xff00ff);\n\n\t\t// const radius = center.distanceTo(A);\n\t\t// Potree.Utils.debugCircle(viewer.scene.scene, center, radius, new THREE.Vector3(0, 0, 1), 0xff00ff);\n\t}\n\n\tstatic getNorthVec(p1, distance, projection){\n\t\tif(projection){\n\t\t\t// if there is a projection, transform coordinates to WGS84\n\t\t\t// and compute angle to north there\n\n\t\t\tproj4.defs(\"pointcloud\", projection);\n\t\t\tconst transform = proj4(\"pointcloud\", \"WGS84\");\n\n\t\t\tconst llP1 = transform.forward(p1.toArray());\n\t\t\tlet llP2 = transform.forward([p1.x, p1.y + distance]);\n\t\t\tconst polarRadius = Math.sqrt((llP2[0] - llP1[0]) ** 2 + (llP2[1] - llP1[1]) ** 2);\n\t\t\tllP2 = [llP1[0], llP1[1] + polarRadius];\n\n\t\t\tconst northVec = transform.inverse(llP2);\n\t\t\t\n\t\t\treturn new THREE.Vector3(...northVec, p1.z).sub(p1);\n\t\t}else{\n\t\t\t// if there is no projection, assume [0, 1, 0] as north direction\n\n\t\t\tconst vec = new THREE.Vector3(0, 1, 0).multiplyScalar(distance);\n\t\t\t\n\t\t\treturn vec;\n\t\t}\n\t}\n\n\tstatic computeAzimuth(p1, p2, projection){\n\n\t\tlet azimuth = 0;\n\n\t\tif(projection){\n\t\t\t// if there is a projection, transform coordinates to WGS84\n\t\t\t// and compute angle to north there\n\n\t\t\tlet transform;\n\n\t\t\tif (projection.includes('EPSG')) {\n\t\t\t\ttransform = proj4(projection, \"WGS84\");\n\t\t\t} else {\n\t\t\t\tproj4.defs(\"pointcloud\", projection);\n\t\t\t\ttransform = proj4(\"pointcloud\", \"WGS84\");\n\t\t\t}\n\n\t\t\tconst llP1 = transform.forward(p1.toArray());\n\t\t\tconst llP2 = transform.forward(p2.toArray());\n\t\t\tconst dir = [\n\t\t\t\tllP2[0] - llP1[0],\n\t\t\t\tllP2[1] - llP1[1],\n\t\t\t];\n\t\t\tazimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2;\n\t\t}else{\n\t\t\t// if there is no projection, assume [0, 1, 0] as north direction\n\n\t\t\tconst dir = [p2.x - p1.x, p2.y - p1.y];\n\t\t\tazimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2;\n\t\t}\n\n\t\t// make clockwise\n\t\tazimuth = -azimuth;\n\n\t\treturn azimuth;\n\t}\n\n\tstatic async loadScript(url){\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tconst element = document.getElementById(url);\n\n\t\t\tif(element){\n\t\t\t\tresolve();\n\t\t\t}else{\n\t\t\t\tconst script = document.createElement(\"script\");\n\n\t\t\t\tscript.id = url;\n\n\t\t\t\tscript.onload = () => {\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\t\t\t\tscript.src = url;\n\n\t\t\t\tdocument.body.appendChild(script);\n\t\t\t}\n\t\t});\n\t}\n\n\tstatic createSvgGradient(scheme){\n\n\t\t// this is what we are creating:\n\t\t//\n\t\t//\n\t\t//\t\n\t\t//\t\t\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//\t\n\t\t//\t\n\t\t//\n\n\n\t\tconst gradientId = `${Math.random()}_${Date.now()}`;\n\t\t\n\t\tconst svgn = \"http://www.w3.org/2000/svg\";\n\t\tconst svg = document.createElementNS(svgn, \"svg\");\n\t\tsvg.setAttributeNS(null, \"width\", \"2em\");\n\t\tsvg.setAttributeNS(null, \"height\", \"3em\");\n\t\t\n\t\t{ // \n\t\t\tconst defs = document.createElementNS(svgn, \"defs\");\n\t\t\t\n\t\t\tconst linearGradient = document.createElementNS(svgn, \"linearGradient\");\n\t\t\tlinearGradient.setAttributeNS(null, \"id\", gradientId);\n\t\t\tlinearGradient.setAttributeNS(null, \"gradientTransform\", \"rotate(90)\");\n\n\t\t\tfor(let i = scheme.length - 1; i >= 0; i--){\n\t\t\t\tconst stopVal = scheme[i];\n\t\t\t\tconst percent = parseInt(100 - stopVal[0] * 100);\n\t\t\t\tconst [r, g, b] = stopVal[1].toArray().map(v => parseInt(v * 255));\n\n\t\t\t\tconst stop = document.createElementNS(svgn, \"stop\");\n\t\t\t\tstop.setAttributeNS(null, \"offset\", `${percent}%`);\n\t\t\t\tstop.setAttributeNS(null, \"stop-color\", `rgb(${r}, ${g}, ${b})`);\n\n\t\t\t\tlinearGradient.appendChild(stop);\n\t\t\t}\n\n\t\t\tdefs.appendChild(linearGradient);\n\t\t\tsvg.appendChild(defs);\n\t\t}\n\n\t\tconst rect = document.createElementNS(svgn, \"rect\");\n\t\trect.setAttributeNS(null, \"width\", `100%`);\n\t\trect.setAttributeNS(null, \"height\", `100%`);\n\t\trect.setAttributeNS(null, \"fill\", `url(\"#${gradientId}\")`);\n\t\trect.setAttributeNS(null, \"stroke\", `black`);\n\t\trect.setAttributeNS(null, \"stroke-width\", `0.1em`);\n\n\t\tsvg.appendChild(rect);\n\t\t\n\t\treturn svg;\n\t}\n\n\tstatic async waitAny(promises){\n\t\t\n\t\treturn new Promise( (resolve) => {\n\n\t\t\tpromises.map( promise => {\n\t\t\t\tpromise.then( () => {\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t});\n\n\t\t});\n\n\t}\n\n}\n\nUtils.screenPass = new function () {\n\tthis.screenScene = new THREE.Scene();\n\tthis.screenQuad = new THREE.Mesh(new THREE.PlaneBufferGeometry(2, 2, 1));\n\tthis.screenQuad.material.depthTest = true;\n\tthis.screenQuad.material.depthWrite = true;\n\tthis.screenQuad.material.transparent = true;\n\tthis.screenScene.add(this.screenQuad);\n\tthis.camera = new THREE.Camera();\n\n\tthis.render = function (renderer, material, target) {\n\t\tthis.screenQuad.material = material;\n\n\t\tif (typeof target === 'undefined') {\n\t\t\trenderer.render(this.screenScene, this.camera);\n\t\t} else {\n\t\t\trenderer.render(this.screenScene, this.camera, target);\n\t\t}\n\t};\n}();\n","\n\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport {Action} from \"./Actions.js\";\nimport {Utils} from \"./utils.js\";\nimport {EventDispatcher} from \"./EventDispatcher.js\";\n\nexport class Annotation extends EventDispatcher {\n\tconstructor (args = {}) {\n\t\tsuper();\n\n\t\tthis.scene = null;\n\t\tthis._title = args.title || 'No Title';\n\t\tthis._description = args.description || '';\n\t\tthis.offset = new THREE.Vector3();\n\t\tthis.uuid = THREE.Math.generateUUID();\n\n\t\tif (!args.position) {\n\t\t\tthis.position = null;\n\t\t} else if (args.position.x != null) {\n\t\t\tthis.position = args.position;\n\t\t} else {\n\t\t\tthis.position = new THREE.Vector3(...args.position);\n\t\t}\n\n\t\tthis.cameraPosition = (args.cameraPosition instanceof Array)\n\t\t\t? new THREE.Vector3().fromArray(args.cameraPosition) : args.cameraPosition;\n\t\tthis.cameraTarget = (args.cameraTarget instanceof Array)\n\t\t\t? new THREE.Vector3().fromArray(args.cameraTarget) : args.cameraTarget;\n\t\tthis.radius = args.radius;\n\t\tthis.view = args.view || null;\n\t\tthis.keepOpen = false;\n\t\tthis.descriptionVisible = false;\n\t\tthis.showDescription = true;\n\t\tthis.actions = args.actions || [];\n\t\tthis.isHighlighted = false;\n\t\tthis._visible = true;\n\t\tthis.__visible = true;\n\t\tthis._display = true;\n\t\tthis._expand = false;\n\t\tthis.collapseThreshold = [args.collapseThreshold, 100].find(e => e !== undefined);\n\n\t\tthis.children = [];\n\t\tthis.parent = null;\n\t\tthis.boundingBox = new THREE.Box3();\n\n\t\tlet iconClose = exports.resourcePath + '/icons/close.svg';\n\n\t\tthis.domElement = $(`\n\t\t\t
        \n\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${this._description}\n\t\t\t\t
        \n\t\t\t
        \n\t\t`);\n\n\t\tthis.elTitlebar = this.domElement.find('.annotation-titlebar');\n\t\tthis.elTitle = this.elTitlebar.find('.annotation-label');\n\t\tthis.elTitle.append(this._title);\n\t\tthis.elDescription = this.domElement.find('.annotation-description');\n\t\tthis.elDescriptionClose = this.elDescription.find('.annotation-description-close');\n\t\t// this.elDescriptionContent = this.elDescription.find(\".annotation-description-content\");\n\n\t\tthis.clickTitle = () => {\n\t\t\tif(this.hasView()){\n\t\t\t\tthis.moveHere(this.scene.getActiveCamera());\n\t\t\t}\n\t\t\tthis.dispatchEvent({type: 'click', target: this});\n\t\t};\n\n\t\tthis.elTitle.click(this.clickTitle);\n\n\t\tthis.actions = this.actions.map(a => {\n\t\t\tif (a instanceof Action) {\n\t\t\t\treturn a;\n\t\t\t} else {\n\t\t\t\treturn new Action(a);\n\t\t\t}\n\t\t});\n\n\t\tfor (let action of this.actions) {\n\t\t\taction.pairWith(this);\n\t\t}\n\n\t\tlet actions = this.actions.filter(\n\t\t\ta => a.showIn === undefined || a.showIn.includes('scene'));\n\n\t\tfor (let action of actions) {\n\t\t\tlet elButton = $(``);\n\t\t\tthis.elTitlebar.append(elButton);\n\t\t\telButton.click(() => action.onclick({annotation: this}));\n\t\t}\n\n\t\tthis.elDescriptionClose.hover(\n\t\t\te => this.elDescriptionClose.css('opacity', '1'),\n\t\t\te => this.elDescriptionClose.css('opacity', '0.5')\n\t\t);\n\t\tthis.elDescriptionClose.click(e => this.setHighlighted(false));\n\t\t// this.elDescriptionContent.html(this._description);\n\n\t\tthis.domElement.mouseenter(e => this.setHighlighted(true));\n\t\tthis.domElement.mouseleave(e => this.setHighlighted(false));\n\n\t\tthis.domElement.on('touchstart', e => {\n\t\t\tthis.setHighlighted(!this.isHighlighted);\n\t\t});\n\n\t\tthis.display = false;\n\t\t//this.display = true;\n\n\t}\n\n\tinstallHandles(viewer){\n\t\tif(this.handles !== undefined){\n\t\t\treturn;\n\t\t}\n\n\t\tlet domElement = $(`\n\t\t\t
        \n\t\t\t\t\n\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\t\t`);\n\t\t\n\t\tlet svg = domElement.find(\"svg\")[0];\n\t\tlet elLine = domElement.find(\"line\")[0];\n\t\tlet elStart = domElement.find(\"circle\")[0];\n\t\tlet elEnd = domElement.find(\"circle\")[1];\n\n\t\tlet setCoordinates = (start, end) => {\n\t\t\telStart.setAttribute(\"cx\", `${start.x}`);\n\t\t\telStart.setAttribute(\"cy\", `${start.y}`);\n\n\t\t\telEnd.setAttribute(\"cx\", `${end.x}`);\n\t\t\telEnd.setAttribute(\"cy\", `${end.y}`);\n\n\t\t\telLine.setAttribute(\"x1\", start.x);\n\t\t\telLine.setAttribute(\"y1\", start.y);\n\t\t\telLine.setAttribute(\"x2\", end.x);\n\t\t\telLine.setAttribute(\"y2\", end.y);\n\n\t\t\tlet box = svg.getBBox();\n\t\t\tsvg.setAttribute(\"width\", `${box.width}`);\n\t\t\tsvg.setAttribute(\"height\", `${box.height}`);\n\t\t\tsvg.setAttribute(\"viewBox\", `${box.x} ${box.y} ${box.width} ${box.height}`);\n\n\t\t\tlet ya = start.y - end.y;\n\t\t\tlet xa = start.x - end.x;\n\n\t\t\tif(ya > 0){\n\t\t\t\tstart.y = start.y - ya;\n\t\t\t}\n\t\t\tif(xa > 0){\n\t\t\t\tstart.x = start.x - xa;\n\t\t\t}\n\n\t\t\tdomElement.css(\"left\", `${start.x}px`);\n\t\t\tdomElement.css(\"top\", `${start.y}px`);\n\n\t\t};\n\n\t\t$(viewer.renderArea).append(domElement);\n\n\n\t\tlet annotationStartPos = this.position.clone();\n\t\tlet annotationStartOffset = this.offset.clone();\n\n\t\t$(this.domElement).draggable({\n\t\t\tstart: (event, ui) => {\n\t\t\t\tannotationStartPos = this.position.clone();\n\t\t\t\tannotationStartOffset = this.offset.clone();\n\t\t\t\t$(this.domElement).find(\".annotation-titlebar\").css(\"pointer-events\", \"none\");\n\n\t\t\t\tconsole.log($(this.domElement).find(\".annotation-titlebar\"));\n\t\t\t},\n\t\t\tstop: () => {\n\t\t\t\t$(this.domElement).find(\".annotation-titlebar\").css(\"pointer-events\", \"\");\n\t\t\t},\n\t\t\tdrag: (event, ui ) => {\n\t\t\t\tlet renderAreaWidth = viewer.renderer.getSize(new THREE.Vector2()).width;\n\t\t\t\t//let renderAreaHeight = viewer.renderer.getSize().height;\n\n\t\t\t\tlet diff = {\n\t\t\t\t\tx: ui.originalPosition.left - ui.position.left, \n\t\t\t\t\ty: ui.originalPosition.top - ui.position.top\n\t\t\t\t};\n\n\t\t\t\tlet nDiff = {\n\t\t\t\t\tx: -(diff.x / renderAreaWidth) * 2,\n\t\t\t\t\ty: (diff.y / renderAreaWidth) * 2\n\t\t\t\t};\n\n\t\t\t\tlet camera = viewer.scene.getActiveCamera();\n\t\t\t\tlet oldScreenPos = new THREE.Vector3()\n\t\t\t\t\t.addVectors(annotationStartPos, annotationStartOffset)\n\t\t\t\t\t.project(camera);\n\n\t\t\t\tlet newScreenPos = oldScreenPos.clone();\n\t\t\t\tnewScreenPos.x += nDiff.x;\n\t\t\t\tnewScreenPos.y += nDiff.y;\n\n\t\t\t\tlet newPos = newScreenPos.clone();\n\t\t\t\tnewPos.unproject(camera);\n\n\t\t\t\tlet newOffset = new THREE.Vector3().subVectors(newPos, this.position);\n\t\t\t\tthis.offset.copy(newOffset);\n\t\t\t}\n\t\t});\n\n\t\tlet updateCallback = () => {\n\t\t\tlet position = this.position;\n\t\t\tlet scene = viewer.scene;\n\n\t\t\tconst renderAreaSize = viewer.renderer.getSize(new THREE.Vector2());\n\t\t\tlet renderAreaWidth = renderAreaSize.width;\n\t\t\tlet renderAreaHeight = renderAreaSize.height;\n\n\t\t\tlet start = this.position.clone();\n\t\t\tlet end = new THREE.Vector3().addVectors(this.position, this.offset);\n\n\t\t\tlet toScreen = (position) => {\n\t\t\t\tlet camera = scene.getActiveCamera();\n\t\t\t\tlet screenPos = new THREE.Vector3();\n\n\t\t\t\tlet worldView = new THREE.Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\n\t\t\t\tlet ndc = new THREE.Vector4(position.x, position.y, position.z, 1.0).applyMatrix4(worldView);\n\t\t\t\t// limit w to small positive value, in case position is behind the camera\n\t\t\t\tndc.w = Math.max(ndc.w, 0.1);\n\t\t\t\tndc.divideScalar(ndc.w);\n\n\t\t\t\tscreenPos.copy(ndc);\n\t\t\t\tscreenPos.x = renderAreaWidth * (screenPos.x + 1) / 2;\n\t\t\t\tscreenPos.y = renderAreaHeight * (1 - (screenPos.y + 1) / 2);\n\n\t\t\t\treturn screenPos;\n\t\t\t};\n\t\t\t\n\t\t\tstart = toScreen(start);\n\t\t\tend = toScreen(end);\n\n\t\t\tsetCoordinates(start, end);\n\n\t\t};\n\n\t\tviewer.addEventListener(\"update\", updateCallback);\n\n\t\tthis.handles = {\n\t\t\tdomElement: domElement,\n\t\t\tsetCoordinates: setCoordinates,\n\t\t\tupdateCallback: updateCallback\n\t\t};\n\t}\n\n\tremoveHandles(viewer){\n\t\tif(this.handles === undefined){\n\t\t\treturn;\n\t\t}\n\n\t\t//$(viewer.renderArea).remove(this.handles.domElement);\n\t\tthis.handles.domElement.remove();\n\t\tviewer.removeEventListener(\"update\", this.handles.updateCallback);\n\n\t\tdelete this.handles;\n\t}\n\n\tget visible () {\n\t\treturn this._visible;\n\t}\n\n\tset visible (value) {\n\t\tif (this._visible === value) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = value;\n\n\t\t//this.traverse(node => {\n\t\t//\tnode.display = value;\n\t\t//});\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'visibility_changed',\n\t\t\tannotation: this\n\t\t});\n\t}\n\n\tget display () {\n\t\treturn this._display;\n\t}\n\n\tset display (display) {\n\t\tif (this._display === display) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._display = display;\n\n\t\tif (display) {\n\t\t\t// this.domElement.fadeIn(200);\n\t\t\tthis.domElement.show();\n\t\t} else {\n\t\t\t// this.domElement.fadeOut(200);\n\t\t\tthis.domElement.hide();\n\t\t}\n\t}\n\n\tget expand () {\n\t\treturn this._expand;\n\t}\n\n\tset expand (expand) {\n\t\tif (this._expand === expand) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (expand) {\n\t\t\tthis.display = false;\n\t\t} else {\n\t\t\tthis.display = true;\n\t\t\tthis.traverseDescendants(node => {\n\t\t\t\tnode.display = false;\n\t\t\t});\n\t\t}\n\n\t\tthis._expand = expand;\n\t}\n\n\tget title () {\n\t\treturn this._title;\n\t}\n\n\tset title (title) {\n\t\tif (this._title === title) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._title = title;\n\t\tthis.elTitle.empty();\n\t\tthis.elTitle.append(this._title);\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: \"annotation_changed\",\n\t\t\tannotation: this,\n\t\t});\n\t}\n\n\tget description () {\n\t\treturn this._description;\n\t}\n\n\tset description (description) {\n\t\tif (this._description === description) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._description = description;\n\n\t\tconst elDescriptionContent = this.elDescription.find(\".annotation-description-content\");\n\t\telDescriptionContent.empty();\n\t\telDescriptionContent.append(this._description);\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: \"annotation_changed\",\n\t\t\tannotation: this,\n\t\t});\n\t}\n\n\tadd (annotation) {\n\t\tif (!this.children.includes(annotation)) {\n\t\t\tthis.children.push(annotation);\n\t\t\tannotation.parent = this;\n\n\t\t\tlet descendants = [];\n\t\t\tannotation.traverse(a => { descendants.push(a); });\n\n\t\t\tfor (let descendant of descendants) {\n\t\t\t\tlet c = this;\n\t\t\t\twhile (c !== null) {\n\t\t\t\t\tc.dispatchEvent({\n\t\t\t\t\t\t'type': 'annotation_added',\n\t\t\t\t\t\t'annotation': descendant\n\t\t\t\t\t});\n\t\t\t\t\tc = c.parent;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlevel () {\n\t\tif (this.parent === null) {\n\t\t\treturn 0;\n\t\t} else {\n\t\t\treturn this.parent.level() + 1;\n\t\t}\n\t}\n\n\thasChild(annotation) {\n\t\treturn this.children.includes(annotation);\n\t}\n\n\tremove (annotation) {\n\t\tif (this.hasChild(annotation)) {\n\t\t\tannotation.removeAllChildren();\n\t\t\tannotation.dispose();\n\t\t\tthis.children = this.children.filter(e => e !== annotation);\n\t\t\tannotation.parent = null;\n\t\t}\n\t}\n\n\tremoveAllChildren() {\n\t\tthis.children.forEach((child) => {\n\t\t\tif (child.children.length > 0) {\n\t\t\t\tchild.removeAllChildren();\n\t\t\t}\n\n\t\t\tthis.remove(child);\n\t\t});\n\t}\n\n\tupdateBounds () {\n\t\tlet box = new THREE.Box3();\n\n\t\tif (this.position) {\n\t\t\tbox.expandByPoint(this.position);\n\t\t}\n\n\t\tfor (let child of this.children) {\n\t\t\tchild.updateBounds();\n\n\t\t\tbox.union(child.boundingBox);\n\t\t}\n\n\t\tthis.boundingBox.copy(box);\n\t}\n\n\ttraverse (handler) {\n\t\tlet expand = handler(this);\n\n\t\tif (expand === undefined || expand === true) {\n\t\t\tfor (let child of this.children) {\n\t\t\t\tchild.traverse(handler);\n\t\t\t}\n\t\t}\n\t}\n\n\ttraverseDescendants (handler) {\n\t\tfor (let child of this.children) {\n\t\t\tchild.traverse(handler);\n\t\t}\n\t}\n\n\tflatten () {\n\t\tlet annotations = [];\n\n\t\tthis.traverse(annotation => {\n\t\t\tannotations.push(annotation);\n\t\t});\n\n\t\treturn annotations;\n\t}\n\n\tdescendants () {\n\t\tlet annotations = [];\n\n\t\tthis.traverse(annotation => {\n\t\t\tif (annotation !== this) {\n\t\t\t\tannotations.push(annotation);\n\t\t\t}\n\t\t});\n\n\t\treturn annotations;\n\t}\n\n\tsetHighlighted (highlighted) {\n\t\tif (highlighted) {\n\t\t\tthis.domElement.css('opacity', '0.8');\n\t\t\tthis.elTitlebar.css('box-shadow', '0 0 5px #fff');\n\t\t\tthis.domElement.css('z-index', '1000');\n\n\t\t\tif (this._description) {\n\t\t\t\tthis.descriptionVisible = true;\n\t\t\t\tthis.elDescription.fadeIn(200);\n\t\t\t\tthis.elDescription.css('position', 'relative');\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domElement.css('opacity', '0.5');\n\t\t\tthis.elTitlebar.css('box-shadow', '');\n\t\t\tthis.domElement.css('z-index', '100');\n\t\t\tthis.descriptionVisible = false;\n\t\t\tthis.elDescription.css('display', 'none');\n\t\t}\n\n\t\tthis.isHighlighted = highlighted;\n\t}\n\n\thasView () {\n\t\tlet hasPosTargetView = this.cameraTarget.x != null;\n\t\thasPosTargetView = hasPosTargetView && this.cameraPosition.x != null;\n\n\t\tlet hasRadiusView = this.radius !== undefined;\n\n\t\tlet hasView = hasPosTargetView || hasRadiusView;\n\n\t\treturn hasView;\n\t};\n\n\tmoveHere (camera) {\n\t\tif (!this.hasView()) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet view = this.scene.view;\n\t\tlet animationDuration = 500;\n\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\tlet endTarget;\n\t\tif (this.cameraTarget) {\n\t\t\tendTarget = this.cameraTarget;\n\t\t} else if (this.position) {\n\t\t\tendTarget = this.position;\n\t\t} else {\n\t\t\tendTarget = this.boundingBox.getCenter(new THREE.Vector3());\n\t\t}\n\n\t\tif (this.cameraPosition) {\n\t\t\tlet endPosition = this.cameraPosition;\n\n\t\t\tUtils.moveTo(this.scene, endPosition, endTarget);\n\t\t} else if (this.radius) {\n\t\t\tlet direction = view.direction;\n\t\t\tlet endPosition = endTarget.clone().add(direction.multiplyScalar(-this.radius));\n\t\t\tlet startRadius = view.radius;\n\t\t\tlet endRadius = this.radius;\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 radius\n\t\t\t\tlet t = {x: 0};\n\n\t\t\t\tlet tween = new TWEEN.Tween(t)\n\t\t\t\t\t.to({x: 1}, animationDuration)\n\t\t\t\t\t.onUpdate(function () {\n\t\t\t\t\t\tview.radius = this.x * endRadius + (1 - this.x) * startRadius;\n\t\t\t\t\t});\n\t\t\t\ttween.easing(easing);\n\t\t\t\ttween.start();\n\t\t\t}\n\t\t}\n\t};\n\n\tdispose () {\n\t\tif (this.domElement.parentElement) {\n\t\t\tthis.domElement.parentElement.removeChild(this.domElement);\n\t\t}\n\t};\n\n\ttoString () {\n\t\treturn 'Annotation: ' + this._title;\n\t}\n};\n","\nclass EnumItem{\n\tconstructor(object){\n\t\tfor(let key of Object.keys(object)){\n\t\t\tthis[key] = object[key];\n\t\t}\n\t}\n\n\tinspect(){\n\t\treturn `Enum(${this.name}: ${this.value})`;\n\t}\n};\n\nclass Enum{\n\n\tconstructor(object){\n\t\tthis.object = object;\n\n\t\tfor(let key of Object.keys(object)){\n\t\t\tlet value = object[key];\n\n\t\t\tif(typeof value === \"object\"){\n\t\t\t\tvalue.name = key;\n\t\t\t}else{\n\t\t\t\tvalue = {name: key, value: value};\n\t\t\t}\n\t\t\t\n\t\t\tthis[key] = new EnumItem(value);\n\t\t}\n\t}\n\n\tfromValue(value){\n\t\tfor(let key of Object.keys(this.object)){\n\t\t\tif(this[key].value === value){\n\t\t\t\treturn this[key];\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(`No enum for value: ${value}`);\n\t}\n\t\n};\n\nexport {Enum, EnumItem};","\nimport {Enum} from \"./Enum.js\";\n\n\nexport const CameraMode = {\n\tORTHOGRAPHIC: 0,\n\tPERSPECTIVE: 1,\n\tVR: 2,\n};\n\nexport const ClipTask = {\n\tNONE: 0,\n\tHIGHLIGHT: 1,\n\tSHOW_INSIDE: 2,\n\tSHOW_OUTSIDE: 3\n};\n\nexport const ClipMethod = {\n\tINSIDE_ANY: 0,\n\tINSIDE_ALL: 1\n};\n\nexport const ElevationGradientRepeat = {\n\tCLAMP: 0,\n\tREPEAT: 1,\n\tMIRRORED_REPEAT: 2,\n};\n\nexport const MOUSE = {\n\tLEFT: 0b0001,\n\tRIGHT: 0b0010,\n\tMIDDLE: 0b0100\n};\n\nexport const PointSizeType = {\n\tFIXED: 0,\n\tATTENUATED: 1,\n\tADAPTIVE: 2\n};\n\nexport const PointShape = {\n\tSQUARE: 0,\n\tCIRCLE: 1,\n\tPARABOLOID: 2\n};\n\nexport const TreeType = {\n\tOCTREE:\t0,\n\tKDTREE:\t1\n};\n\nexport const LengthUnits = {\n\tMETER: {code: 'm', unitspermeter: 1.0},\n\tFEET: {code: 'ft', unitspermeter: 3.28084},\n\tINCH: {code: '\\u2033', unitspermeter: 39.3701}\n};","\nlet ftCanvas = document.createElement('canvas');\n\nexport const Features = (function () {\n\n\tlet gl = ftCanvas.getContext('webgl') || ftCanvas.getContext('experimental-webgl');\n\tif (gl === null){ \n\t\treturn null; \n\t}\n\n\t// -- code taken from THREE.WebGLRenderer --\n\tlet _vertexShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n\tlet _vertexShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT);\n\t// Unused: let _vertexShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT);\n\n\tlet _fragmentShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n\tlet _fragmentShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT);\n\t// Unused: let _fragmentShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT);\n\n\tlet highpAvailable = _vertexShaderPrecisionHighpFloat.precision > 0 && _fragmentShaderPrecisionHighpFloat.precision > 0;\n\tlet mediumpAvailable = _vertexShaderPrecisionMediumpFloat.precision > 0 && _fragmentShaderPrecisionMediumpFloat.precision > 0;\n\t// -----------------------------------------\n\n\tlet precision;\n\tif (highpAvailable) {\n\t\tprecision = 'highp';\n\t} else if (mediumpAvailable) {\n\t\tprecision = 'mediump';\n\t} else {\n\t\tprecision = 'lowp';\n\t}\n\n\treturn {\n\t\tSHADER_INTERPOLATION: {\n\t\t\tisSupported: function () {\n\t\t\t\tlet supported = true;\n\n\t\t\t\tsupported = supported && gl.getExtension('EXT_frag_depth');\n\t\t\t\tsupported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;\n\n\t\t\t\treturn supported;\n\t\t\t}\n\t\t},\n\t\tSHADER_SPLATS: {\n\t\t\tisSupported: function () {\n\t\t\t\tlet supported = true;\n\n\t\t\t\tsupported = supported && gl.getExtension('EXT_frag_depth');\n\t\t\t\tsupported = supported && gl.getExtension('OES_texture_float');\n\t\t\t\tsupported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;\n\n\t\t\t\treturn supported;\n\t\t\t}\n\n\t\t},\n\t\tSHADER_EDL: {\n\t\t\tisSupported: function () {\n\t\t\t\tlet supported = true;\n\n\t\t\t\tsupported = supported && gl.getExtension('EXT_frag_depth');\n\t\t\t\tsupported = supported && gl.getExtension('OES_texture_float');\n\t\t\t\tsupported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;\n\n\t\t\t\t//supported = supported || (gl instanceof WebGL2RenderingContext);\n\n\t\t\t\treturn supported;\n\t\t\t}\n\n\t\t},\n\t\t//WEBGL2: {\n\t\t//\tisSupported: function(){\n\t\t//\t\treturn gl instanceof WebGL2RenderingContext;\n\t\t//\t}\n\t\t//},\n\t\tprecision: precision\n\t};\n}());\n\n","\n\nexport const KeyCodes = {\n\n\tLEFT: 37,\n\tUP: 38,\n\tRIGHT: 39,\n\tBOTTOM: 40,\n\tDELETE: 46,\n\n\tA: 'A'.charCodeAt(0),\n\tS: 'S'.charCodeAt(0),\n\tD: 'D'.charCodeAt(0),\n\tW: 'W'.charCodeAt(0),\n\tQ: 'Q'.charCodeAt(0),\n\tE: 'E'.charCodeAt(0),\n\tR: 'R'.charCodeAt(0),\n\tF: 'F'.charCodeAt(0)\n\t\n};","\n\nclass LRUItem{\n\n\tconstructor(node){\n\t\tthis.previous = null;\n\t\tthis.next = null;\n\t\tthis.node = node;\n\t}\n\n}\n\n/**\n *\n * @class A doubly-linked-list of the least recently used elements.\n */\nclass LRU{\n\n\tconstructor(){\n\t\t// the least recently used item\n\t\tthis.first = null;\n\t\t// the most recently used item\n\t\tthis.last = null;\n\t\t// a list of all items in the lru list\n\t\tthis.items = {};\n\t\tthis.elements = 0;\n\t\tthis.numPoints = 0;\n\t}\n\n\tsize(){\n\t\treturn this.elements;\n\t}\n\n\tcontains(node){\n\t\treturn this.items[node.id] == null;\n\t}\n\n\ttouch(node){\n\t\tif (!node.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet item;\n\t\tif (this.items[node.id] == null) {\n\t\t\t// add to list\n\t\t\titem = new LRUItem(node);\n\t\t\titem.previous = this.last;\n\t\t\tthis.last = item;\n\t\t\tif (item.previous !== null) {\n\t\t\t\titem.previous.next = item;\n\t\t\t}\n\n\t\t\tthis.items[node.id] = item;\n\t\t\tthis.elements++;\n\n\t\t\tif (this.first === null) {\n\t\t\t\tthis.first = item;\n\t\t\t}\n\t\t\tthis.numPoints += node.numPoints;\n\t\t} else {\n\t\t\t// update in list\n\t\t\titem = this.items[node.id];\n\t\t\tif (item.previous === null) {\n\t\t\t\t// handle touch on first element\n\t\t\t\tif (item.next !== null) {\n\t\t\t\t\tthis.first = item.next;\n\t\t\t\t\tthis.first.previous = null;\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} else if (item.next === null) {\n\t\t\t\t// handle touch on last element\n\t\t\t} else {\n\t\t\t\t// handle touch on any other element\n\t\t\t\titem.previous.next = item.next;\n\t\t\t\titem.next.previous = item.previous;\n\t\t\t\titem.previous = this.last;\n\t\t\t\titem.next = null;\n\t\t\t\tthis.last = item;\n\t\t\t\titem.previous.next = item;\n\t\t\t}\n\t\t}\n\t}\n\n\tremove(node){\n\t\tlet lruItem = this.items[node.id];\n\t\tif (lruItem) {\n\t\t\tif (this.elements === 1) {\n\t\t\t\tthis.first = null;\n\t\t\t\tthis.last = null;\n\t\t\t} else {\n\t\t\t\tif (!lruItem.previous) {\n\t\t\t\t\tthis.first = lruItem.next;\n\t\t\t\t\tthis.first.previous = null;\n\t\t\t\t}\n\t\t\t\tif (!lruItem.next) {\n\t\t\t\t\tthis.last = lruItem.previous;\n\t\t\t\t\tthis.last.next = null;\n\t\t\t\t}\n\t\t\t\tif (lruItem.previous && lruItem.next) {\n\t\t\t\t\tlruItem.previous.next = lruItem.next;\n\t\t\t\t\tlruItem.next.previous = lruItem.previous;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdelete this.items[node.id];\n\t\t\tthis.elements--;\n\t\t\tthis.numPoints -= node.numPoints;\n\t\t}\n\t}\n\n\tgetLRUItem(){\n\t\tif (this.first === null) {\n\t\t\treturn null;\n\t\t}\n\t\tlet lru = this.first;\n\n\t\treturn lru.node;\n\t}\n\n\ttoString(){\n\t\tlet string = '{ ';\n\t\tlet curr = this.first;\n\t\twhile (curr !== null) {\n\t\t\tstring += curr.node.id;\n\t\t\tif (curr.next !== null) {\n\t\t\t\tstring += ', ';\n\t\t\t}\n\t\t\tcurr = curr.next;\n\t\t}\n\t\tstring += '}';\n\t\tstring += '(' + this.size() + ')';\n\t\treturn string;\n\t}\n\n\tfreeMemory(){\n\t\tif (this.elements <= 1) {\n\t\t\treturn;\n\t\t}\n\n\t\twhile (this.numPoints > Potree.pointLoadLimit) {\n\t\t\tlet element = this.first;\n\t\t\tlet node = element.node;\n\t\t\tthis.disposeDescendants(node);\n\t\t}\n\t}\n\n\tdisposeDescendants(node){\n\t\tlet stack = [];\n\t\tstack.push(node);\n\t\twhile (stack.length > 0) {\n\t\t\tlet current = stack.pop();\n\n\t\t\t// console.log(current);\n\n\t\t\tcurrent.dispose();\n\t\t\tthis.remove(current);\n\n\t\t\tfor (let key in current.children) {\n\t\t\t\tif (current.children.hasOwnProperty(key)) {\n\t\t\t\t\tlet child = current.children[key];\n\t\t\t\t\tif (child.loaded) {\n\t\t\t\t\t\tstack.push(current.children[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nexport {LRU, LRUItem};","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\n\n\nexport class PointCloudTreeNode extends EventDispatcher{\n\n\tconstructor(){\n\t\tsuper();\n\t\tthis.needsTransformUpdate = true;\n\t}\n\n\tgetChildren () {\n\t\tthrow new Error('override function');\n\t}\n\n\tgetBoundingBox () {\n\t\tthrow new Error('override function');\n\t}\n\n\tisLoaded () {\n\t\tthrow new Error('override function');\n\t}\n\n\tisGeometryNode () {\n\t\tthrow new Error('override function');\n\t}\n\n\tisTreeNode () {\n\t\tthrow new Error('override function');\n\t}\n\n\tgetLevel () {\n\t\tthrow new Error('override function');\n\t}\n\n\tgetBoundingSphere () {\n\t\tthrow new Error('override function');\n\t}\n};\n\nexport class PointCloudTree extends THREE.Object3D {\n\tconstructor () {\n\t\tsuper();\n\t}\n\n\tinitialized () {\n\t\treturn this.root !== null;\n\t}\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\nexport {PointAttributeTypes};\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};\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\nexport {PointAttribute};\n\nexport class PointAttributes{\n\n\tconstructor(pointAttributes){\n\t\tthis.attributes = [];\n\t\tthis.byteSize = 0;\n\t\tthis.size = 0;\n\t\tthis.vectors = [];\n\n\t\tif (pointAttributes != null) {\n\t\t\tfor (let i = 0; i < pointAttributes.length; i++) {\n\t\t\t\tlet pointAttributeName = pointAttributes[i];\n\t\t\t\tlet pointAttribute = PointAttribute[pointAttributeName];\n\t\t\t\tthis.attributes.push(pointAttribute);\n\t\t\t\tthis.byteSize += pointAttribute.byteSize;\n\t\t\t\tthis.size++;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tadd(pointAttribute){\n\t\tthis.attributes.push(pointAttribute);\n\t\tthis.byteSize += pointAttribute.byteSize;\n\t\tthis.size++;\n\t};\n\n\taddVector(vector){\n\t\tthis.vectors.push(vector);\n\t}\n\n\thasNormals(){\n\t\tfor (let name in this.attributes) {\n\t\t\tlet pointAttribute = this.attributes[name];\n\t\t\tif (\n\t\t\t\tpointAttribute === PointAttribute.NORMAL_SPHEREMAPPED ||\n\t\t\t\tpointAttribute === PointAttribute.NORMAL_FLOATS ||\n\t\t\t\tpointAttribute === PointAttribute.NORMAL ||\n\t\t\t\tpointAttribute === PointAttribute.NORMAL_OCT16) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n}\n","import {PointCloudTreeNode} from \"./PointCloudTree.js\";\nimport {PointAttributes, PointAttribute, PointAttributeTypes} from \"./loader/PointAttributes.js\";\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\n\nclass U {\n\tstatic toVector3(v, offset) {\n\t\treturn new THREE.Vector3().fromArray(v, offset || 0);\n\t}\n\n\tstatic toBox3(b) {\n\t\treturn new THREE.Box3(U.toVector3(b), U.toVector3(b, 3));\n\t};\n\n\tstatic findDim(schema, name) {\n\t\tvar dim = schema.find((dim) => dim.name == name);\n\t\tif (!dim) throw new Error('Failed to find ' + name + ' in schema');\n\t\treturn dim;\n\t}\n\n\tstatic sphereFrom(b) {\n\t\treturn b.getBoundingSphere(new THREE.Sphere());\n\t}\n};\n\nexport class PointCloudEptGeometry {\n\tconstructor(url, info) {\n\t\tlet version = info.version;\n\t\tlet schema = info.schema;\n\t\tlet bounds = info.bounds;\n\t\tlet boundsConforming = info.boundsConforming;\n\n\t\tlet xyz = [\n\t\t\tU.findDim(schema, 'X'),\n\t\t\tU.findDim(schema, 'Y'),\n\t\t\tU.findDim(schema, 'Z')\n\t\t];\n\t\tlet scale = xyz.map((d) => d.scale || 1);\n\t\tlet offset = xyz.map((d) => d.offset || 0);\n\t\tthis.eptScale = U.toVector3(scale);\n\t\tthis.eptOffset = U.toVector3(offset);\n\n\t\tthis.url = url;\n\t\tthis.info = info;\n\t\tthis.type = 'ept';\n\n\t\tthis.schema = schema;\n\t\tthis.span = info.span || info.ticks;\n\t\tthis.boundingBox = U.toBox3(bounds);\n\t\tthis.tightBoundingBox = U.toBox3(boundsConforming);\n\t\tthis.offset = U.toVector3([0, 0, 0]);\n\t\tthis.boundingSphere = U.sphereFrom(this.boundingBox);\n\t\tthis.tightBoundingSphere = U.sphereFrom(this.tightBoundingBox);\n\t\tthis.version = new Potree.Version('1.7');\n\n\t\tthis.projection = null;\n\t\tthis.fallbackProjection = null;\n\n\t\tif (info.srs && info.srs.horizontal) {\n\t\t\tthis.projection = info.srs.authority + ':' + info.srs.horizontal;\n\t\t}\n\n\t\tif (info.srs && info.srs.wkt) {\n\t\t\tif (!this.projection) this.projection = info.srs.wkt;\n\t\t\telse this.fallbackProjection = info.srs.wkt;\n\t\t}\n\n\t\t{ \n\t\t\t// TODO [mschuetz]: named projections that proj4 can't handle seem to cause problems.\n\t\t\t// remove them for now\n\n\t\t\ttry{\n\t\t\t\tproj4(this.projection);\n\t\t\t}catch(e){\n\t\t\t\tthis.projection = null;\n\t\t\t}\n\n\t\t\n\n\t\t}\n\n\t\t\n\t\t{\n\t\t\tconst attributes = new PointAttributes();\n\n\t\t\tattributes.add(PointAttribute.POSITION_CARTESIAN);\n\t\t\tattributes.add(new PointAttribute(\"rgba\", PointAttributeTypes.DATA_TYPE_UINT8, 4));\n\t\t\tattributes.add(new PointAttribute(\"intensity\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\t\t\tattributes.add(new PointAttribute(\"classification\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\tattributes.add(new PointAttribute(\"gps-time\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1));\n\t\t\tattributes.add(new PointAttribute(\"returnNumber\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\tattributes.add(new PointAttribute(\"number of returns\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\tattributes.add(new PointAttribute(\"return number\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\tattributes.add(new PointAttribute(\"source id\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\n\t\t\tthis.pointAttributes = attributes;\n\t\t}\n\n\n\n\t\tthis.spacing =\n\t\t\t(this.boundingBox.max.x - this.boundingBox.min.x) / this.span;\n\n\t\tlet hierarchyType = info.hierarchyType || 'json';\n\n\t\tconst dataType = info.dataType;\n\t\tif (dataType == 'laszip') {\n\t\t\tthis.loader = new Potree.EptLaszipLoader();\n\t\t}\n\t\telse if (dataType == 'binary') {\n\t\t\tthis.loader = new Potree.EptBinaryLoader();\n\t\t}\n\t\telse if (dataType == 'zstandard') {\n\t\t\tthis.loader = new Potree.EptZstandardLoader();\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('Could not read data type: ' + dataType);\n\t\t}\n\t}\n};\n\nexport class EptKey {\n\tconstructor(ept, b, d, x, y, z) {\n\t\tthis.ept = ept;\n\t\tthis.b = b;\n\t\tthis.d = d;\n\t\tthis.x = x || 0;\n\t\tthis.y = y || 0;\n\t\tthis.z = z || 0;\n\t}\n\n\tname() {\n\t\treturn this.d + '-' + this.x + '-' + this.y + '-' + this.z;\n\t}\n\n\tstep(a, b, c) {\n\t\tlet min = this.b.min.clone();\n\t\tlet max = this.b.max.clone();\n\t\tlet dst = new THREE.Vector3().subVectors(max, min);\n\n\t\tif (a)\tmin.x += dst.x / 2;\n\t\telse\tmax.x -= dst.x / 2;\n\n\t\tif (b)\tmin.y += dst.y / 2;\n\t\telse\tmax.y -= dst.y / 2;\n\n\t\tif (c)\tmin.z += dst.z / 2;\n\t\telse\tmax.z -= dst.z / 2;\n\n\t\treturn new Potree.EptKey(\n\t\t\t\tthis.ept,\n\t\t\t\tnew THREE.Box3(min, max),\n\t\t\t\tthis.d + 1,\n\t\t\t\tthis.x * 2 + a,\n\t\t\t\tthis.y * 2 + b,\n\t\t\t\tthis.z * 2 + c);\n\t}\n\n\tchildren() {\n\t\tvar result = [];\n\t\tfor (var a = 0; a < 2; ++a) {\n\t\t\tfor (var b = 0; b < 2; ++b) {\n\t\t\t\tfor (var c = 0; c < 2; ++c) {\n\t\t\t\t\tvar add = this.step(a, b, c).name();\n\t\t\t\t\tif (!result.includes(add)) result = result.concat(add);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\nexport class PointCloudEptGeometryNode extends PointCloudTreeNode {\n\tconstructor(ept, b, d, x, y, z) {\n\t\tsuper();\n\n\t\tthis.ept = ept;\n\t\tthis.key = new Potree.EptKey(\n\t\t\t\tthis.ept,\n\t\t\t\tb || this.ept.boundingBox,\n\t\t\t\td || 0,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tz);\n\n\t\tthis.id = PointCloudEptGeometryNode.IDCount++;\n\t\tthis.geometry = null;\n\t\tthis.boundingBox = this.key.b;\n\t\tthis.tightBoundingBox = this.boundingBox;\n\t\tthis.spacing = this.ept.spacing / Math.pow(2, this.key.d);\n\t\tthis.boundingSphere = U.sphereFrom(this.boundingBox);\n\n\t\t// These are set during hierarchy loading.\n\t\tthis.hasChildren = false;\n\t\tthis.children = { };\n\t\tthis.numPoints = -1;\n\n\t\tthis.level = this.key.d;\n\t\tthis.loaded = false;\n\t\tthis.loading = false;\n\t\tthis.oneTimeDisposeHandlers = [];\n\n\t\tlet k = this.key;\n\t\tthis.name = this.toPotreeName(k.d, k.x, k.y, k.z);\n\t\tthis.index = parseInt(this.name.charAt(this.name.length - 1));\n\t}\n\n\tisGeometryNode() { return true; }\n\tgetLevel() { return this.level; }\n\tisTreeNode() { return false; }\n\tisLoaded() { return this.loaded; }\n\tgetBoundingSphere() { return this.boundingSphere; }\n\tgetBoundingBox() { return this.boundingBox; }\n\turl() { return this.ept.url + 'ept-data/' + this.filename(); }\n\tgetNumPoints() { return this.numPoints; }\n\n\tfilename() { return this.key.name(); }\n\n\tgetChildren() {\n\t\tlet children = [];\n\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tif (this.children[i]) {\n\t\t\t\tchildren.push(this.children[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn children;\n\t}\n\n\taddChild(child) {\n\t\tthis.children[child.index] = child;\n\t\tchild.parent = this;\n\t}\n\n\tload() {\n\t\tif (this.loaded || this.loading) return;\n\t\tif (Potree.numNodesLoading >= Potree.maxNodesLoading) return;\n\n\t\tthis.loading = true;\n\t\t++Potree.numNodesLoading;\n\n\t\tif (this.numPoints == -1) this.loadHierarchy();\n\t\tthis.loadPoints();\n\t}\n\n\tloadPoints(){\n\t\tthis.ept.loader.load(this);\n\t}\n\n\tasync loadHierarchy() {\n\t\tlet nodes = { };\n\t\tnodes[this.filename()] = this;\n\t\tthis.hasChildren = false;\n\n\t\tlet eptHierarchyFile =\n\t\t\t`${this.ept.url}ept-hierarchy/${this.filename()}.json`;\n\n\t\tlet response = await fetch(eptHierarchyFile);\n\t\tlet hier = await response.json();\n\n\t\t// Since we want to traverse top-down, and 10 comes\n\t\t// lexicographically before 9 (for example), do a deep sort.\n\t\tvar keys = Object.keys(hier).sort((a, b) => {\n\t\t\tlet [da, xa, ya, za] = a.split('-').map((n) => parseInt(n, 10));\n\t\t\tlet [db, xb, yb, zb] = b.split('-').map((n) => parseInt(n, 10));\n\t\t\tif (da < db) return -1; if (da > db) return 1;\n\t\t\tif (xa < xb) return -1; if (xa > xb) return 1;\n\t\t\tif (ya < yb) return -1; if (ya > yb) return 1;\n\t\t\tif (za < zb) return -1; if (za > zb) return 1;\n\t\t\treturn 0;\n\t\t});\n\n\t\tkeys.forEach((v) => {\n\t\t\tlet [d, x, y, z] = v.split('-').map((n) => parseInt(n, 10));\n\t\t\tlet a = x & 1, b = y & 1, c = z & 1;\n\t\t\tlet parentName =\n\t\t\t\t(d - 1) + '-' + (x >> 1) + '-' + (y >> 1) + '-' + (z >> 1);\n\n\t\t\tlet parentNode = nodes[parentName];\n\t\t\tif (!parentNode) return;\n\t\t\tparentNode.hasChildren = true;\n\n\t\t\tlet key = parentNode.key.step(a, b, c);\n\n\t\t\tlet node = new Potree.PointCloudEptGeometryNode(\n\t\t\t\t\tthis.ept,\n\t\t\t\t\tkey.b,\n\t\t\t\t\tkey.d,\n\t\t\t\t\tkey.x,\n\t\t\t\t\tkey.y,\n\t\t\t\t\tkey.z);\n\n\t\t\tnode.level = d;\n\t\t\tnode.numPoints = hier[v];\n\n\t\t\tparentNode.addChild(node);\n\t\t\tnodes[key.name()] = node;\n\t\t});\n\t}\n\n\tdoneLoading(bufferGeometry, tightBoundingBox, np, mean) {\n\t\tbufferGeometry.boundingBox = this.boundingBox;\n\t\tthis.geometry = bufferGeometry;\n\t\tthis.tightBoundingBox = tightBoundingBox;\n\t\tthis.numPoints = np;\n\t\tthis.mean = mean;\n\t\tthis.loaded = true;\n\t\tthis.loading = false;\n\t\t--Potree.numNodesLoading;\n\t}\n\n\ttoPotreeName(d, x, y, z) {\n\t\tvar name = 'r';\n\n\t\tfor (var i = 0; i < d; ++i) {\n\t\t\tvar shift = d - i - 1;\n\t\t\tvar mask = 1 << shift;\n\t\t\tvar step = 0;\n\n\t\t\tif (x & mask) step += 4;\n\t\t\tif (y & mask) step += 2;\n\t\t\tif (z & mask) step += 1;\n\n\t\t\tname += step;\n\t\t}\n\n\t\treturn name;\n\t}\n\n\tdispose() {\n\t\tif (this.geometry && this.parent != null) {\n\t\t\tthis.geometry.dispose();\n\t\t\tthis.geometry = null;\n\t\t\tthis.loaded = false;\n\n\t\t\t// this.dispatchEvent( { type: 'dispose' } );\n\t\t\tfor (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {\n\t\t\t\tlet handler = this.oneTimeDisposeHandlers[i];\n\t\t\t\thandler();\n\t\t\t}\n\t\t\tthis.oneTimeDisposeHandlers = [];\n\t\t}\n\t}\n}\n\nPointCloudEptGeometryNode.IDCount = 0;\n\n","\n\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport {PointCloudTreeNode} from \"./PointCloudTree.js\";\nimport {XHRFactory} from \"./XHRFactory.js\";\nimport {Utils} from \"./utils.js\";\n\nexport class PointCloudOctreeGeometry{\n\n\tconstructor(){\n\t\tthis.url = null;\n\t\tthis.octreeDir = null;\n\t\tthis.spacing = 0;\n\t\tthis.boundingBox = null;\n\t\tthis.root = null;\n\t\tthis.nodes = null;\n\t\tthis.pointAttributes = null;\n\t\tthis.hierarchyStepSize = -1;\n\t\tthis.loader = null;\n\t}\n\t\n}\n\nexport class PointCloudOctreeGeometryNode extends PointCloudTreeNode{\n\n\tconstructor(name, pcoGeometry, boundingBox){\n\t\tsuper();\n\n\t\tthis.id = PointCloudOctreeGeometryNode.IDCount++;\n\t\tthis.name = name;\n\t\tthis.index = parseInt(name.charAt(name.length - 1));\n\t\tthis.pcoGeometry = pcoGeometry;\n\t\tthis.geometry = null;\n\t\tthis.boundingBox = boundingBox;\n\t\tthis.boundingSphere = boundingBox.getBoundingSphere(new THREE.Sphere());\n\t\tthis.children = {};\n\t\tthis.numPoints = 0;\n\t\tthis.level = null;\n\t\tthis.loaded = false;\n\t\tthis.oneTimeDisposeHandlers = [];\n\t}\n\n\tisGeometryNode(){\n\t\treturn true;\n\t}\n\n\tgetLevel(){\n\t\treturn this.level;\n\t}\n\n\tisTreeNode(){\n\t\treturn false;\n\t}\n\n\tisLoaded(){\n\t\treturn this.loaded;\n\t}\n\n\tgetBoundingSphere(){\n\t\treturn this.boundingSphere;\n\t}\n\n\tgetBoundingBox(){\n\t\treturn this.boundingBox;\n\t}\n\n\tgetChildren(){\n\t\tlet children = [];\n\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tif (this.children[i]) {\n\t\t\t\tchildren.push(this.children[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn children;\n\t}\n\n\tgetBoundingBox(){\n\t\treturn this.boundingBox;\n\t}\n\n\tgetURL(){\n\t\tlet url = '';\n\n\t\tlet version = this.pcoGeometry.loader.version;\n\n\t\tif (version.equalOrHigher('1.5')) {\n\t\t\turl = this.pcoGeometry.octreeDir + '/' + this.getHierarchyPath() + '/' + this.name;\n\t\t} else if (version.equalOrHigher('1.4')) {\n\t\t\turl = this.pcoGeometry.octreeDir + '/' + this.name;\n\t\t} else if (version.upTo('1.3')) {\n\t\t\turl = this.pcoGeometry.octreeDir + '/' + this.name;\n\t\t}\n\n\t\treturn url;\n\t}\n\n\tgetHierarchyPath(){\n\t\tlet path = 'r/';\n\n\t\tlet hierarchyStepSize = this.pcoGeometry.hierarchyStepSize;\n\t\tlet indices = this.name.substr(1);\n\n\t\tlet numParts = Math.floor(indices.length / hierarchyStepSize);\n\t\tfor (let i = 0; i < numParts; i++) {\n\t\t\tpath += indices.substr(i * hierarchyStepSize, hierarchyStepSize) + '/';\n\t\t}\n\n\t\tpath = path.slice(0, -1);\n\n\t\treturn path;\n\t}\n\n\taddChild(child) {\n\t\tthis.children[child.index] = child;\n\t\tchild.parent = this;\n\t}\n\n\tload(){\n\t\tif (this.loading === true || this.loaded === true || Potree.numNodesLoading >= Potree.maxNodesLoading) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.loading = true;\n\n\t\tPotree.numNodesLoading++;\n\n\t\tif (this.pcoGeometry.loader.version.equalOrHigher('1.5')) {\n\t\t\tif ((this.level % this.pcoGeometry.hierarchyStepSize) === 0 && this.hasChildren) {\n\t\t\t\tthis.loadHierachyThenPoints();\n\t\t\t} else {\n\t\t\t\tthis.loadPoints();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.loadPoints();\n\t\t}\n\t}\n\n\tloadPoints(){\n\t\tthis.pcoGeometry.loader.load(this);\n\t}\n\n\tloadHierachyThenPoints(){\n\t\tlet node = this;\n\n\t\t// load hierarchy\n\t\tlet callback = function (node, hbuffer) {\n\n\t\t\tlet tStart = performance.now();\n\n\t\t\tlet view = new DataView(hbuffer);\n\n\t\t\tlet stack = [];\n\t\t\tlet children = view.getUint8(0);\n\t\t\tlet numPoints = view.getUint32(1, true);\n\t\t\tnode.numPoints = numPoints;\n\t\t\tstack.push({children: children, numPoints: numPoints, name: node.name});\n\n\t\t\tlet decoded = [];\n\n\t\t\tlet offset = 5;\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tlet snode = stack.shift();\n\t\t\t\tlet mask = 1;\n\t\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\t\tif ((snode.children & mask) !== 0) {\n\t\t\t\t\t\tlet childName = snode.name + i;\n\n\t\t\t\t\t\tlet childChildren = view.getUint8(offset);\n\t\t\t\t\t\tlet childNumPoints = view.getUint32(offset + 1, true);\n\n\t\t\t\t\t\tstack.push({children: childChildren, numPoints: childNumPoints, name: childName});\n\n\t\t\t\t\t\tdecoded.push({children: childChildren, numPoints: childNumPoints, name: childName});\n\n\t\t\t\t\t\toffset += 5;\n\t\t\t\t\t}\n\n\t\t\t\t\tmask = mask * 2;\n\t\t\t\t}\n\n\t\t\t\tif (offset === hbuffer.byteLength) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// console.log(decoded);\n\n\t\t\tlet nodes = {};\n\t\t\tnodes[node.name] = node;\n\t\t\tlet pco = node.pcoGeometry;\n\n\t\t\tfor (let i = 0; i < decoded.length; i++) {\n\t\t\t\tlet name = decoded[i].name;\n\t\t\t\tlet decodedNumPoints = decoded[i].numPoints;\n\t\t\t\tlet index = parseInt(name.charAt(name.length - 1));\n\t\t\t\tlet parentName = name.substring(0, name.length - 1);\n\t\t\t\tlet parentNode = nodes[parentName];\n\t\t\t\tlet level = name.length - 1;\n\t\t\t\tlet boundingBox = Utils.createChildAABB(parentNode.boundingBox, index);\n\n\t\t\t\tlet currentNode = new PointCloudOctreeGeometryNode(name, pco, boundingBox);\n\t\t\t\tcurrentNode.level = level;\n\t\t\t\tcurrentNode.numPoints = decodedNumPoints;\n\t\t\t\tcurrentNode.hasChildren = decoded[i].children > 0;\n\t\t\t\tcurrentNode.spacing = pco.spacing / Math.pow(2, level);\n\t\t\t\tparentNode.addChild(currentNode);\n\t\t\t\tnodes[name] = currentNode;\n\t\t\t}\n\n\t\t\tlet duration = performance.now() - tStart;\n\t\t\tif(duration > 5){\n\t\t\t\tlet msg = `duration: ${duration}ms, numNodes: ${decoded.length}`;\n\t\t\t\tconsole.log(msg);\n\t\t\t}\n\n\t\t\tnode.loadPoints();\n\t\t};\n\t\tif ((node.level % node.pcoGeometry.hierarchyStepSize) === 0) {\n\t\t\t// let hurl = node.pcoGeometry.octreeDir + \"/../hierarchy/\" + node.name + \".hrc\";\n\t\t\tlet hurl = node.pcoGeometry.octreeDir + '/' + node.getHierarchyPath() + '/' + node.name + '.hrc';\n\n\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\txhr.open('GET', hurl, 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 hbuffer = xhr.response;\n\t\t\t\t\t\tcallback(node, hbuffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + hurl);\n\t\t\t\t\t\tPotree.numNodesLoading--;\n\t\t\t\t\t}\n\t\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\t}\n\n\tgetNumPoints(){\n\t\treturn this.numPoints;\n\t}\n\n\tdispose(){\n\t\tif (this.geometry && this.parent != null) {\n\t\t\tthis.geometry.dispose();\n\t\t\tthis.geometry = null;\n\t\t\tthis.loaded = false;\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\t\t\t\n\t\t\tfor (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {\n\t\t\t\tlet handler = this.oneTimeDisposeHandlers[i];\n\t\t\t\thandler();\n\t\t\t}\n\t\t\tthis.oneTimeDisposeHandlers = [];\n\t\t}\n\t}\n\t\n}\n\nPointCloudOctreeGeometryNode.IDCount = 0;\n","import * as THREE from \"../../libs/three.js/build/three.module.js\";\n\n// -------------------------------------------\n// to get a ready to use gradient array from a chroma.js gradient:\n// http://gka.github.io/chroma.js/\n// -------------------------------------------\n//\n// let stops = [];\n// for(let i = 0; i <= 10; i++){\n//\tlet range = chroma.scale(['yellow', 'navy']).mode('lch').domain([10,0])(i)._rgb\n//\t\t.slice(0, 3)\n//\t\t.map(v => (v / 255).toFixed(4))\n//\t\t.join(\", \");\n//\n//\tlet line = `[${i / 10}, new THREE.Color(${range})],`;\n//\n//\tstops.push(line);\n// }\n// stops.join(\"\\n\");\n//\n//\n//\n// -------------------------------------------\n// to get a ready to use gradient array from matplotlib:\n// -------------------------------------------\n// import matplotlib.pyplot as plt\n// import matplotlib.colors as colors\n//\n// norm = colors.Normalize(vmin=0,vmax=1)\n// cmap = plt.cm.viridis\n//\n// for i in range(0,11):\n//\tu = i / 10\n//\trgb = cmap(norm(u))[0:3]\n//\trgb = [\"{0:.3f}\".format(v) for v in rgb]\n//\trgb = \"[\" + str(u) + \", new THREE.Color(\" + \", \".join(rgb) + \")],\"\n//\tprint(rgb)\n\nlet Gradients = {\n\t// From chroma spectral http://gka.github.io/chroma.js/\n\tSPECTRAL: [\n\t\t[0, new THREE.Color(0.3686, 0.3098, 0.6353)],\n\t\t[0.1, new THREE.Color(0.1961, 0.5333, 0.7412)],\n\t\t[0.2, new THREE.Color(0.4000, 0.7608, 0.6471)],\n\t\t[0.3, new THREE.Color(0.6706, 0.8667, 0.6431)],\n\t\t[0.4, new THREE.Color(0.9020, 0.9608, 0.5961)],\n\t\t[0.5, new THREE.Color(1.0000, 1.0000, 0.7490)],\n\t\t[0.6, new THREE.Color(0.9961, 0.8784, 0.5451)],\n\t\t[0.7, new THREE.Color(0.9922, 0.6824, 0.3804)],\n\t\t[0.8, new THREE.Color(0.9569, 0.4275, 0.2627)],\n\t\t[0.9, new THREE.Color(0.8353, 0.2431, 0.3098)],\n\t\t[1, new THREE.Color(0.6196, 0.0039, 0.2588)]\n\t],\n\tPLASMA: [\n\t\t[0.0, new THREE.Color(0.241, 0.015, 0.610)],\n\t\t[0.1, new THREE.Color(0.387, 0.001, 0.654)],\n\t\t[0.2, new THREE.Color(0.524, 0.025, 0.653)],\n\t\t[0.3, new THREE.Color(0.651, 0.125, 0.596)],\n\t\t[0.4, new THREE.Color(0.752, 0.227, 0.513)],\n\t\t[0.5, new THREE.Color(0.837, 0.329, 0.431)],\n\t\t[0.6, new THREE.Color(0.907, 0.435, 0.353)],\n\t\t[0.7, new THREE.Color(0.963, 0.554, 0.272)],\n\t\t[0.8, new THREE.Color(0.992, 0.681, 0.195)],\n\t\t[0.9, new THREE.Color(0.987, 0.822, 0.144)],\n\t\t[1.0, new THREE.Color(0.940, 0.975, 0.131)]\n\t],\n\tYELLOW_GREEN: [\n\t\t[0, new THREE.Color(0.1647, 0.2824, 0.3451)],\n\t\t[0.1, new THREE.Color(0.1338, 0.3555, 0.4227)],\n\t\t[0.2, new THREE.Color(0.0610, 0.4319, 0.4864)],\n\t\t[0.3, new THREE.Color(0.0000, 0.5099, 0.5319)],\n\t\t[0.4, new THREE.Color(0.0000, 0.5881, 0.5569)],\n\t\t[0.5, new THREE.Color(0.1370, 0.6650, 0.5614)],\n\t\t[0.6, new THREE.Color(0.2906, 0.7395, 0.5477)],\n\t\t[0.7, new THREE.Color(0.4453, 0.8099, 0.5201)],\n\t\t[0.8, new THREE.Color(0.6102, 0.8748, 0.4850)],\n\t\t[0.9, new THREE.Color(0.7883, 0.9323, 0.4514)],\n\t\t[1, new THREE.Color(0.9804, 0.9804, 0.4314)]\n\t],\n\tVIRIDIS: [\n\t\t[0.0, new THREE.Color(0.267, 0.005, 0.329)],\n\t\t[0.1, new THREE.Color(0.283, 0.141, 0.458)],\n\t\t[0.2, new THREE.Color(0.254, 0.265, 0.530)],\n\t\t[0.3, new THREE.Color(0.207, 0.372, 0.553)],\n\t\t[0.4, new THREE.Color(0.164, 0.471, 0.558)],\n\t\t[0.5, new THREE.Color(0.128, 0.567, 0.551)],\n\t\t[0.6, new THREE.Color(0.135, 0.659, 0.518)],\n\t\t[0.7, new THREE.Color(0.267, 0.749, 0.441)],\n\t\t[0.8, new THREE.Color(0.478, 0.821, 0.318)],\n\t\t[0.9, new THREE.Color(0.741, 0.873, 0.150)],\n\t\t[1.0, new THREE.Color(0.993, 0.906, 0.144)]\n\t],\n\tINFERNO: [\n\t\t[0.0, new THREE.Color(0.077, 0.042, 0.206)],\n\t\t[0.1, new THREE.Color(0.225, 0.036, 0.388)],\n\t\t[0.2, new THREE.Color(0.373, 0.074, 0.432)],\n\t\t[0.3, new THREE.Color(0.522, 0.128, 0.420)],\n\t\t[0.4, new THREE.Color(0.665, 0.182, 0.370)],\n\t\t[0.5, new THREE.Color(0.797, 0.255, 0.287)],\n\t\t[0.6, new THREE.Color(0.902, 0.364, 0.184)],\n\t\t[0.7, new THREE.Color(0.969, 0.516, 0.063)],\n\t\t[0.8, new THREE.Color(0.988, 0.683, 0.072)],\n\t\t[0.9, new THREE.Color(0.961, 0.859, 0.298)],\n\t\t[1.0, new THREE.Color(0.988, 0.998, 0.645)]\n\t],\n\tGRAYSCALE: [\n\t\t[0, new THREE.Color(0, 0, 0)],\n\t\t[1, new THREE.Color(1, 1, 1)]\n\t],\n\t// 16 samples of the TURBU color scheme\n\t// values taken from: https://gist.github.com/mikhailov-work/ee72ba4191942acecc03fe6da94fc73f\n\t// original file licensed under Apache-2.0\n\tTURBO: [\n\t\t[0.00, new THREE.Color(0.18995, 0.07176, 0.23217)],\n\t\t[0.07, new THREE.Color(0.25107, 0.25237, 0.63374)],\n\t\t[0.13, new THREE.Color(0.27628, 0.42118, 0.89123)],\n\t\t[0.20, new THREE.Color(0.25862, 0.57958, 0.99876)],\n\t\t[0.27, new THREE.Color(0.15844, 0.73551, 0.92305)],\n\t\t[0.33, new THREE.Color(0.09267, 0.86554, 0.7623)],\n\t\t[0.40, new THREE.Color(0.19659, 0.94901, 0.59466)],\n\t\t[0.47, new THREE.Color(0.42778, 0.99419, 0.38575)],\n\t\t[0.53, new THREE.Color(0.64362, 0.98999, 0.23356)],\n\t\t[0.60, new THREE.Color(0.80473, 0.92452, 0.20459)],\n\t\t[0.67, new THREE.Color(0.93301, 0.81236, 0.22667)],\n\t\t[0.73, new THREE.Color(0.99314, 0.67408, 0.20348)],\n\t\t[0.80, new THREE.Color(0.9836, 0.49291, 0.12849)],\n\t\t[0.87, new THREE.Color(0.92105, 0.31489, 0.05475)],\n\t\t[0.93, new THREE.Color(0.81608, 0.18462, 0.01809)],\n\t\t[1.00, new THREE.Color(0.66449, 0.08436, 0.00424)],\n\t],\n\tRAINBOW: [\n\t\t[0, new THREE.Color(0.278, 0, 0.714)],\n\t\t[1 / 6, new THREE.Color(0, 0, 1)],\n\t\t[2 / 6, new THREE.Color(0, 1, 1)],\n\t\t[3 / 6, new THREE.Color(0, 1, 0)],\n\t\t[4 / 6, new THREE.Color(1, 1, 0)],\n\t\t[5 / 6, new THREE.Color(1, 0.64, 0)],\n\t\t[1, new THREE.Color(1, 0, 0)]\n\t],\n\tCONTOUR: [\n\t\t[0.00, new THREE.Color(0, 0, 0)],\n\t\t[0.03, new THREE.Color(0, 0, 0)],\n\t\t[0.04, new THREE.Color(1, 1, 1)],\n\t\t[1.00, new THREE.Color(1, 1, 1)]\n\t],\n};\n\n\nexport {Gradients};\n","let Shaders = {};\n\nShaders[\"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\nShaders[\"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\nShaders[\"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\nShaders[\"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\nShaders[\"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\nShaders[\"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\nShaders[\"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\nShaders[\"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\nShaders[\"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\nShaders[\"blur.vs\"] = `\nvarying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`\n\nShaders[\"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\nexport {Shaders};","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport const ClassificationScheme = {\n\n\tDEFAULT: {\n\t\t0: { visible: true, name: 'never classified' , color: [0.5, 0.5, 0.5, 1.0] },\n\t\t1: { visible: true, name: 'unclassified' , color: [0.5, 0.5, 0.5, 1.0] },\n\t\t2: { visible: true, name: 'ground' , color: [0.63, 0.32, 0.18, 1.0] },\n\t\t3: { visible: true, name: 'low vegetation' , color: [0.0, 1.0, 0.0, 1.0] },\n\t\t4: { visible: true, name: 'medium vegetation' , color: [0.0, 0.8, 0.0, 1.0] },\n\t\t5: { visible: true, name: 'high vegetation' , color: [0.0, 0.6, 0.0, 1.0] },\n\t\t6: { visible: true, name: 'building' , color: [1.0, 0.66, 0.0, 1.0] },\n\t\t7: { visible: true, name: 'low point(noise)' , color: [1.0, 0.0, 1.0, 1.0] },\n\t\t8: { visible: true, name: 'key-point' , color: [1.0, 0.0, 0.0, 1.0] },\n\t\t9: { visible: true, name: 'water' , color: [0.0, 0.0, 1.0, 1.0] },\n\t\t12: { visible: true, name: 'overlap' , color: [1.0, 1.0, 0.0, 1.0] },\n\t\tDEFAULT: { visible: true, name: 'default' , color: [0.3, 0.6, 0.6, 0.5] },\n\t}\n};\n\nObject.defineProperty(ClassificationScheme, 'RANDOM', {\n\tget: function() { \n\n\t\tlet scheme = {};\n\n\t\tfor(let i = 0; i <= 255; i++){\n\t\t\tscheme[i] = new THREE.Vector4(Math.random(), Math.random(), Math.random());\n\t\t}\n\n\t\tscheme[\"DEFAULT\"] = new THREE.Vector4(Math.random(), Math.random(), Math.random());\n\n\t\treturn scheme;\n\t}\n});","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Utils} from \"../utils.js\";\nimport {Gradients} from \"./Gradients.js\";\nimport {Shaders} from \"../../build/shaders/shaders.js\";\nimport {ClassificationScheme} from \"./ClassificationScheme.js\";\nimport {PointSizeType, PointShape, TreeType, ElevationGradientRepeat} from \"../defines.js\";\n\n//\n// how to calculate the radius of a projected sphere in screen space\n// http://stackoverflow.com/questions/21648630/radius-of-projected-sphere-in-screen-space\n// http://stackoverflow.com/questions/3717226/radius-of-projected-sphere\n//\n\n\nexport class PointCloudMaterial extends THREE.RawShaderMaterial {\n\tconstructor (parameters = {}) {\n\t\tsuper();\n\n\t\tthis.visibleNodesTexture = Utils.generateDataTexture(2048, 1, new THREE.Color(0xffffff));\n\t\tthis.visibleNodesTexture.minFilter = THREE.NearestFilter;\n\t\tthis.visibleNodesTexture.magFilter = THREE.NearestFilter;\n\n\t\tlet getValid = (a, b) => {\n\t\t\tif(a !== undefined){\n\t\t\t\treturn a;\n\t\t\t}else{\n\t\t\t\treturn b;\n\t\t\t}\n\t\t}\n\n\t\tlet pointSize = getValid(parameters.size, 1.0);\n\t\tlet minSize = getValid(parameters.minSize, 2.0);\n\t\tlet maxSize = getValid(parameters.maxSize, 50.0);\n\t\tlet treeType = getValid(parameters.treeType, TreeType.OCTREE);\n\n\t\tthis._pointSizeType = PointSizeType.FIXED;\n\t\tthis._shape = PointShape.SQUARE;\n\t\tthis._useClipBox = false;\n\t\tthis.clipBoxes = [];\n\t\tthis.clipPolygons = [];\n\t\tthis._weighted = false;\n\t\tthis._gradient = Gradients.SPECTRAL;\n\t\tthis.gradientTexture = PointCloudMaterial.generateGradientTexture(this._gradient);\n\t\tthis._matcap = \"matcap.jpg\";\n\t\tthis.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap);\n\t\tthis.lights = false;\n\t\tthis.fog = false;\n\t\tthis._treeType = treeType;\n\t\tthis._useEDL = false;\n\t\tthis.defines = new Map();\n\n\t\tthis.ranges = new Map();\n\n\t\tthis._activeAttributeName = null;\n\n\t\tthis._defaultIntensityRangeChanged = false;\n\t\tthis._defaultElevationRangeChanged = false;\n\n\t\t{\n\t\t\tconst [width, height] = [256, 1];\n\t\t\tlet data = new Uint8Array(width * 4);\n\t\t\tlet texture = new THREE.DataTexture(data, width, height, THREE.RGBAFormat);\n\t\t\ttexture.magFilter = THREE.NearestFilter;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tthis.classificationTexture = texture;\n\t\t}\n\n\t\tthis.attributes = {\n\t\t\tposition: { type: 'fv', value: [] },\n\t\t\tcolor: { type: 'fv', value: [] },\n\t\t\tnormal: { type: 'fv', value: [] },\n\t\t\tintensity: { type: 'f', value: [] },\n\t\t\tclassification: { type: 'f', value: [] },\n\t\t\treturnNumber: { type: 'f', value: [] },\n\t\t\tnumberOfReturns: { type: 'f', value: [] },\n\t\t\tpointSourceID: { type: 'f', value: [] },\n\t\t\tindices: { type: 'fv', value: [] }\n\t\t};\n\n\t\tthis.uniforms = {\n\t\t\tlevel:\t\t\t\t{ type: \"f\", value: 0.0 },\n\t\t\tvnStart:\t\t\t{ type: \"f\", value: 0.0 },\n\t\t\tspacing:\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\tblendHardness:\t\t{ type: \"f\", value: 2.0 },\n\t\t\tblendDepthSupplement:\t{ type: \"f\", value: 0.0 },\n\t\t\tfov:\t\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\tscreenWidth:\t\t{ type: \"f\", value: 1.0 },\n\t\t\tscreenHeight:\t\t{ type: \"f\", value: 1.0 },\n\t\t\tnear:\t\t\t\t{ type: \"f\", value: 0.1 },\n\t\t\tfar:\t\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\tuColor:\t\t\t\t{ type: \"c\", value: new THREE.Color( 0xffffff ) },\n\t\t\tuOpacity:\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\tsize:\t\t\t\t{ type: \"f\", value: pointSize },\n\t\t\tminSize:\t\t\t{ type: \"f\", value: minSize },\n\t\t\tmaxSize:\t\t\t{ type: \"f\", value: maxSize },\n\t\t\toctreeSize:\t\t\t{ type: \"f\", value: 0 },\n\t\t\tbbSize:\t\t\t\t{ type: \"fv\", value: [0, 0, 0] },\n\t\t\televationRange:\t\t{ type: \"2fv\", value: [0, 0] },\n\n\t\t\tclipBoxCount:\t\t{ type: \"f\", value: 0 },\n\t\t\t//clipSphereCount:\t{ type: \"f\", value: 0 },\n\t\t\tclipPolygonCount:\t{ type: \"i\", value: 0 },\n\t\t\tclipBoxes:\t\t\t{ type: \"Matrix4fv\", value: [] },\n\t\t\t//clipSpheres:\t\t{ type: \"Matrix4fv\", value: [] },\n\t\t\tclipPolygons:\t\t{ type: \"3fv\", value: [] },\n\t\t\tclipPolygonVCount:\t{ type: \"iv\", value: [] },\n\t\t\tclipPolygonVP:\t\t{ type: \"Matrix4fv\", value: [] },\n\n\t\t\tvisibleNodes:\t\t{ type: \"t\", value: this.visibleNodesTexture },\n\t\t\tpcIndex:\t\t\t{ type: \"f\", value: 0 },\n\t\t\tgradient:\t\t\t{ type: \"t\", value: this.gradientTexture },\n\t\t\tclassificationLUT:\t{ type: \"t\", value: this.classificationTexture },\n\t\t\tuHQDepthMap:\t\t{ type: \"t\", value: null },\n\t\t\ttoModel:\t\t\t{ type: \"Matrix4f\", value: [] },\n\t\t\tdiffuse:\t\t\t{ type: \"fv\", value: [1, 1, 1] },\n\t\t\ttransition:\t\t\t{ type: \"f\", value: 0.5 },\n\n\t\t\t intensityRange:\t\t{ type: \"fv\", value: [Infinity, -Infinity] },\n\n\t\t\tintensity_gbc: \t\t{ type: \"fv\", value: [1, 0, 0]},\n\t\t\tuRGB_gbc:\t \t\t{ type: \"fv\", value: [1, 0, 0]},\n\t\t\t// intensityGamma:\t\t{ type: \"f\", value: 1 },\n\t\t\t// intensityContrast:\t{ type: \"f\", value: 0 },\n\t\t\t// intensityBrightness:{ type: \"f\", value: 0 },\n\t\t\t// rgbGamma:\t\t\t{ type: \"f\", value: 1 },\n\t\t\t// rgbContrast:\t\t{ type: \"f\", value: 0 },\n\t\t\t// rgbBrightness:\t\t{ type: \"f\", value: 0 },\n\t\t\twRGB:\t\t\t\t{ type: \"f\", value: 1 },\n\t\t\twIntensity:\t\t\t{ type: \"f\", value: 0 },\n\t\t\twElevation:\t\t\t{ type: \"f\", value: 0 },\n\t\t\twClassification:\t{ type: \"f\", value: 0 },\n\t\t\twReturnNumber:\t\t{ type: \"f\", value: 0 },\n\t\t\twSourceID:\t\t\t{ type: \"f\", value: 0 },\n\t\t\tuseOrthographicCamera: { type: \"b\", value: false },\n\t\t\televationGradientRepat: { type: \"i\", value: ElevationGradientRepeat.CLAMP },\n\t\t\tclipTask:\t\t\t{ type: \"i\", value: 1 },\n\t\t\tclipMethod:\t\t\t{ type: \"i\", value: 1 },\n\t\t\tuShadowColor:\t\t{ type: \"3fv\", value: [0, 0, 0] },\n\n\t\t\tuExtraScale:\t\t{ type: \"f\", value: 1},\n\t\t\tuExtraOffset:\t\t{ type: \"f\", value: 0},\n\t\t\tuExtraRange:\t\t{ type: \"2fv\", value: [0, 1] },\n\t\t\tuExtraGammaBrightContr:\t{ type: \"3fv\", value: [1, 0, 0] },\n\n\t\t\tuFilterReturnNumberRange:\t\t{ type: \"fv\", value: [0, 7]},\n\t\t\tuFilterNumberOfReturnsRange:\t{ type: \"fv\", value: [0, 7]},\n\t\t\tuFilterGPSTimeClipRange:\t\t{ type: \"fv\", value: [0, 7]},\n\t\t\tuFilterPointSourceIDClipRange:\t\t{ type: \"fv\", value: [0, 65535]},\n\t\t\tmatcapTextureUniform: \t{ type: \"t\", value: this.matcapTexture },\n\t\t\tbackfaceCulling: { type: \"b\", value: false },\n\t\t};\n\n\t\tthis.classification = ClassificationScheme.DEFAULT;\n\n\t\tthis.defaultAttributeValues.normal = [0, 0, 0];\n\t\tthis.defaultAttributeValues.classification = [0, 0, 0];\n\t\tthis.defaultAttributeValues.indices = [0, 0, 0, 0];\n\n\t\tthis.vertexShader = Shaders['pointcloud.vs'];\n\t\tthis.fragmentShader = Shaders['pointcloud.fs'];\n\t\t\n\t\tthis.vertexColors = THREE.VertexColors;\n\n\t\tthis.updateShaderSource();\n\t}\n\n\tsetDefine(key, value){\n\t\tif(value !== undefined && value !== null){\n\t\t\tif(this.defines.get(key) !== value){\n\t\t\t\tthis.defines.set(key, value);\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}else{\n\t\t\tthis.removeDefine(key);\n\t\t}\n\t}\n\n\tremoveDefine(key){\n\t\tthis.defines.delete(key);\n\t}\n\n\tupdateShaderSource () {\n\n\t\tlet vs = Shaders['pointcloud.vs'];\n\t\tlet fs = Shaders['pointcloud.fs'];\n\t\tlet definesString = this.getDefines();\n\n\t\tlet vsVersionIndex = vs.indexOf(\"#version \");\n\t\tlet fsVersionIndex = fs.indexOf(\"#version \");\n\n\t\tif(vsVersionIndex >= 0){\n\t\t\tvs = vs.replace(/(#version .*)/, `$1\\n${definesString}`)\n\t\t}else{\n\t\t\tvs = `${definesString}\\n${vs}`;\n\t\t}\n\n\t\tif(fsVersionIndex >= 0){\n\t\t\tfs = fs.replace(/(#version .*)/, `$1\\n${definesString}`)\n\t\t}else{\n\t\t\tfs = `${definesString}\\n${fs}`;\n\t\t}\n\n\t\tthis.vertexShader = vs;\n\t\tthis.fragmentShader = fs;\n\n\t\tif (this.opacity === 1.0) {\n\t\t\tthis.blending = THREE.NoBlending;\n\t\t\tthis.transparent = false;\n\t\t\tthis.depthTest = true;\n\t\t\tthis.depthWrite = true;\n\t\t\tthis.depthFunc = THREE.LessEqualDepth;\n\t\t} else if (this.opacity < 1.0 && !this.useEDL) {\n\t\t\tthis.blending = THREE.AdditiveBlending;\n\t\t\tthis.transparent = true;\n\t\t\tthis.depthTest = false;\n\t\t\tthis.depthWrite = true;\n\t\t\tthis.depthFunc = THREE.AlwaysDepth;\n\t\t}\n\n\t\tif (this.weighted) {\n\t\t\tthis.blending = THREE.AdditiveBlending;\n\t\t\tthis.transparent = true;\n\t\t\tthis.depthTest = true;\n\t\t\tthis.depthWrite = false;\n\t\t}\n\n\t\tthis.needsUpdate = true;\n\t}\n\n\tgetDefines () {\n\t\tlet defines = [];\n\n\t\tif (this.pointSizeType === PointSizeType.FIXED) {\n\t\t\tdefines.push('#define fixed_point_size');\n\t\t} else if (this.pointSizeType === PointSizeType.ATTENUATED) {\n\t\t\tdefines.push('#define attenuated_point_size');\n\t\t} else if (this.pointSizeType === PointSizeType.ADAPTIVE) {\n\t\t\tdefines.push('#define adaptive_point_size');\n\t\t}\n\n\t\tif (this.shape === PointShape.SQUARE) {\n\t\t\tdefines.push('#define square_point_shape');\n\t\t} else if (this.shape === PointShape.CIRCLE) {\n\t\t\tdefines.push('#define circle_point_shape');\n\t\t} else if (this.shape === PointShape.PARABOLOID) {\n\t\t\tdefines.push('#define paraboloid_point_shape');\n\t\t}\n\n\t\tif (this._useEDL) {\n\t\t\tdefines.push('#define use_edl');\n\t\t}\n\n\t\tif(this.activeAttributeName){\n\t\t\tlet attributeName = this.activeAttributeName.replace(/[^a-zA-Z0-9]/g, '_');\n\n\t\t\tdefines.push(`#define color_type_${attributeName}`);\n\t\t}\n\t\t\n\t\tif(this._treeType === TreeType.OCTREE){\n\t\t\tdefines.push('#define tree_type_octree');\n\t\t}else if(this._treeType === TreeType.KDTREE){\n\t\t\tdefines.push('#define tree_type_kdtree');\n\t\t}\n\n\t\tif (this.weighted) {\n\t\t\tdefines.push('#define weighted_splats');\n\t\t}\n\n\t\tfor(let [key, value] of this.defines){\n\t\t\tdefines.push(value);\n\t\t}\n\n\t\treturn defines.join(\"\\n\");\n\t}\n\n\tsetClipBoxes (clipBoxes) {\n\t\tif (!clipBoxes) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet doUpdate = (this.clipBoxes.length !== clipBoxes.length) && (clipBoxes.length === 0 || this.clipBoxes.length === 0);\n\n\t\tthis.uniforms.clipBoxCount.value = this.clipBoxes.length;\n\t\tthis.clipBoxes = clipBoxes;\n\n\t\tif (doUpdate) {\n\t\t\tthis.updateShaderSource();\n\t\t}\n\n\t\tthis.uniforms.clipBoxes.value = new Float32Array(this.clipBoxes.length * 16);\n\n\t\tfor (let i = 0; i < this.clipBoxes.length; i++) {\n\t\t\tlet box = clipBoxes[i];\n\n\t\t\tthis.uniforms.clipBoxes.value.set(box.inverse.elements, 16 * i);\n\t\t}\n\n\t\tfor (let i = 0; i < this.uniforms.clipBoxes.value.length; i++) {\n\t\t\tif (Number.isNaN(this.uniforms.clipBoxes.value[i])) {\n\t\t\t\tthis.uniforms.clipBoxes.value[i] = Infinity;\n\t\t\t}\n\t\t}\n\t}\n\n\tsetClipPolygons(clipPolygons, maxPolygonVertices) {\n\t\tif(!clipPolygons){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clipPolygons = clipPolygons;\n\n\t\tlet doUpdate = (this.clipPolygons.length !== clipPolygons.length);\n\n\t\tif(doUpdate){\n\t\t\tthis.updateShaderSource();\n\t\t}\n\t}\n\t\n\tget gradient(){\n\t\treturn this._gradient;\n\t}\n\n\tset gradient (value) {\n\t\tif (this._gradient !== value) {\n\t\t\tthis._gradient = value;\n\t\t\tthis.gradientTexture = PointCloudMaterial.generateGradientTexture(this._gradient);\n\t\t\tthis.uniforms.gradient.value = this.gradientTexture;\n\t\t}\n\t}\n\n\tget matcap(){\n\t\treturn this._matcap;\n\t}\n\n\tset matcap (value) {\n\t\tif (this._matcap !== value) {\n\t\t\tthis._matcap = value;\n\t\t\tthis.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap);\n\t\t\tthis.uniforms.matcapTextureUniform.value = this.matcapTexture;\n\t\t}\n\t}\n\tget useOrthographicCamera() {\n\t\treturn this.uniforms.useOrthographicCamera.value;\n\t}\n\n\tset useOrthographicCamera(value) {\n\t\tif(this.uniforms.useOrthographicCamera.value !== value){\n\t\t\tthis.uniforms.useOrthographicCamera.value = value;\n\t\t}\n\t}\n\tget backfaceCulling() {\n\t\treturn this.uniforms.backfaceCulling.value;\n\t}\n\n\tset backfaceCulling(value) {\n\t\tif(this.uniforms.backfaceCulling.value !== value){\n\t\t\tthis.uniforms.backfaceCulling.value = value;\n\t\t\tthis.dispatchEvent({type: 'backface_changed', target: this});\n\t\t}\n\t}\n\n\trecomputeClassification () {\n\t\tconst classification = this.classification;\n\t\tconst data = this.classificationTexture.image.data;\n\n\t\tlet width = 256;\n\t\tconst black = [1, 1, 1, 1];\n\n\t\tlet valuesChanged = false;\n\n\t\tfor (let i = 0; i < width; i++) {\n\n\t\t\tlet color;\n\t\t\tlet visible = true;\n\n\t\t\tif (classification[i]) {\n\t\t\t\tcolor = classification[i].color;\n\t\t\t\tvisible = classification[i].visible;\n\t\t\t} else if (classification[i % 32]) {\n\t\t\t\tcolor = classification[i % 32].color;\n\t\t\t\tvisible = classification[i % 32].visible;\n\t\t\t} else if(classification.DEFAULT) {\n\t\t\t\tcolor = classification.DEFAULT.color;\n\t\t\t\tvisible = classification.DEFAULT.visible;\n\t\t\t}else{\n\t\t\t\tcolor = black;\n\t\t\t}\n\n\t\t\tconst r = parseInt(255 * color[0]);\n\t\t\tconst g = parseInt(255 * color[1]);\n\t\t\tconst b = parseInt(255 * color[2]);\n\t\t\tconst a = visible ? parseInt(255 * color[3]) : 0;\n\n\n\t\t\tif(data[4 * i + 0] !== r){\n\t\t\t\tdata[4 * i + 0] = r;\n\t\t\t\tvaluesChanged = true;\n\t\t\t}\n\n\t\t\tif(data[4 * i + 1] !== g){\n\t\t\t\tdata[4 * i + 1] = g;\n\t\t\t\tvaluesChanged = true;\n\t\t\t}\n\n\t\t\tif(data[4 * i + 2] !== b){\n\t\t\t\tdata[4 * i + 2] = b;\n\t\t\t\tvaluesChanged = true;\n\t\t\t}\n\n\t\t\tif(data[4 * i + 3] !== a){\n\t\t\t\tdata[4 * i + 3] = a;\n\t\t\t\tvaluesChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif(valuesChanged){\n\t\t\tthis.classificationTexture.needsUpdate = 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\t}\n\n\tget spacing () {\n\t\treturn this.uniforms.spacing.value;\n\t}\n\n\tset spacing (value) {\n\t\tif (this.uniforms.spacing.value !== value) {\n\t\t\tthis.uniforms.spacing.value = value;\n\t\t}\n\t}\n\n\tget useClipBox () {\n\t\treturn this._useClipBox;\n\t}\n\n\tset useClipBox (value) {\n\t\tif (this._useClipBox !== value) {\n\t\t\tthis._useClipBox = value;\n\t\t\tthis.updateShaderSource();\n\t\t}\n\t}\n\n\tget clipTask(){\n\t\treturn this.uniforms.clipTask.value;\n\t}\n\n\tset clipTask(mode){\n\t\tthis.uniforms.clipTask.value = mode;\n\t}\n\n\tget elevationGradientRepat(){\n\t\treturn this.uniforms.elevationGradientRepat.value;\n\t}\n\n\tset elevationGradientRepat(mode){\n\t\tthis.uniforms.elevationGradientRepat.value = mode;\n\t}\n\n\tget clipMethod(){\n\t\treturn this.uniforms.clipMethod.value;\n\t}\n\n\tset clipMethod(mode){\n\t\tthis.uniforms.clipMethod.value = mode;\n\t}\n\n\tget weighted(){\n\t\treturn this._weighted;\n\t}\n\n\tset weighted (value) {\n\t\tif (this._weighted !== value) {\n\t\t\tthis._weighted = value;\n\t\t\tthis.updateShaderSource();\n\t\t}\n\t}\n\n\tget fov () {\n\t\treturn this.uniforms.fov.value;\n\t}\n\n\tset fov (value) {\n\t\tif (this.uniforms.fov.value !== value) {\n\t\t\tthis.uniforms.fov.value = value;\n\t\t\t// this.updateShaderSource();\n\t\t}\n\t}\n\n\tget screenWidth () {\n\t\treturn this.uniforms.screenWidth.value;\n\t}\n\n\tset screenWidth (value) {\n\t\tif (this.uniforms.screenWidth.value !== value) {\n\t\t\tthis.uniforms.screenWidth.value = value;\n\t\t\t// this.updateShaderSource();\n\t\t}\n\t}\n\n\tget screenHeight () {\n\t\treturn this.uniforms.screenHeight.value;\n\t}\n\n\tset screenHeight (value) {\n\t\tif (this.uniforms.screenHeight.value !== value) {\n\t\t\tthis.uniforms.screenHeight.value = value;\n\t\t\t// this.updateShaderSource();\n\t\t}\n\t}\n\n\tget near () {\n\t\treturn this.uniforms.near.value;\n\t}\n\n\tset near (value) {\n\t\tif (this.uniforms.near.value !== value) {\n\t\t\tthis.uniforms.near.value = value;\n\t\t}\n\t}\n\n\tget far () {\n\t\treturn this.uniforms.far.value;\n\t}\n\n\tset far (value) {\n\t\tif (this.uniforms.far.value !== value) {\n\t\t\tthis.uniforms.far.value = value;\n\t\t}\n\t}\n\t\n\tget opacity(){\n\t\treturn this.uniforms.uOpacity.value;\n\t}\n\n\tset opacity (value) {\n\t\tif (this.uniforms && this.uniforms.uOpacity) {\n\t\t\tif (this.uniforms.uOpacity.value !== value) {\n\t\t\t\tthis.uniforms.uOpacity.value = value;\n\t\t\t\tthis.updateShaderSource();\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'opacity_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\t}\n\n\tget activeAttributeName(){\n\t\treturn this._activeAttributeName;\n\t}\n\n\tset activeAttributeName(value){\n\t\tif (this._activeAttributeName !== value) {\n\t\t\tthis._activeAttributeName = value;\n\n\t\t\tthis.updateShaderSource();\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'active_attribute_changed',\n\t\t\t\ttarget: this\n\t\t\t});\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\t}\n\n\tget pointSizeType () {\n\t\treturn this._pointSizeType;\n\t}\n\n\tset pointSizeType (value) {\n\t\tif (this._pointSizeType !== value) {\n\t\t\tthis._pointSizeType = value;\n\t\t\tthis.updateShaderSource();\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'point_size_type_changed',\n\t\t\t\ttarget: this\n\t\t\t});\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\t}\n\n\tget useEDL(){\n\t\treturn this._useEDL;\n\t}\n\n\tset useEDL (value) {\n\t\tif (this._useEDL !== value) {\n\t\t\tthis._useEDL = value;\n\t\t\tthis.updateShaderSource();\n\t\t}\n\t}\n\n\tget color () {\n\t\treturn this.uniforms.uColor.value;\n\t}\n\n\tset color (value) {\n\t\tif (!this.uniforms.uColor.value.equals(value)) {\n\t\t\tthis.uniforms.uColor.value.copy(value);\n\t\t\t\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'color_changed',\n\t\t\t\ttarget: this\n\t\t\t});\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\t}\n\n\tget shape () {\n\t\treturn this._shape;\n\t}\n\n\tset shape (value) {\n\t\tif (this._shape !== value) {\n\t\t\tthis._shape = value;\n\t\t\tthis.updateShaderSource();\n\t\t\tthis.dispatchEvent({type: 'point_shape_changed', target: this});\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\t}\n\n\tget treeType () {\n\t\treturn this._treeType;\n\t}\n\n\tset treeType (value) {\n\t\tif (this._treeType !== value) {\n\t\t\tthis._treeType = value;\n\t\t\tthis.updateShaderSource();\n\t\t}\n\t}\n\n\tget bbSize () {\n\t\treturn this.uniforms.bbSize.value;\n\t}\n\n\tset bbSize (value) {\n\t\tthis.uniforms.bbSize.value = value;\n\t}\n\n\tget size () {\n\t\treturn this.uniforms.size.value;\n\t}\n\n\tset size (value) {\n\t\tif (this.uniforms.size.value !== value) {\n\t\t\tthis.uniforms.size.value = value;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'point_size_changed',\n\t\t\t\ttarget: this\n\t\t\t});\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\t}\n\n\tget minSize(){\n\t\treturn this.uniforms.minSize.value;\n\t}\n\n\tset minSize(value){\n\t\tif (this.uniforms.minSize.value !== value) {\n\t\t\tthis.uniforms.minSize.value = value;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'point_size_changed',\n\t\t\t\ttarget: this\n\t\t\t});\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\t}\n\n\tget elevationRange () {\n\t\treturn this.uniforms.elevationRange.value;\n\t}\n\n\tset elevationRange (value) {\n\t\tlet changed = this.uniforms.elevationRange.value[0] !== value[0]\n\t\t\t|| this.uniforms.elevationRange.value[1] !== value[1];\n\n\t\tif(changed){\n\t\t\tthis.uniforms.elevationRange.value = value;\n\n\t\t\tthis._defaultElevationRangeChanged = 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\t}\n\n\tget heightMin () {\n\t\treturn this.uniforms.elevationRange.value[0];\n\t}\n\n\tset heightMin (value) {\n\t\tthis.elevationRange = [value, this.elevationRange[1]];\n\t}\n\n\tget heightMax () {\n\t\treturn this.uniforms.elevationRange.value[1];\n\t}\n\n\tset heightMax (value) {\n\t\tthis.elevationRange = [this.elevationRange[0], value];\n\t}\n\n\tget transition () {\n\t\treturn this.uniforms.transition.value;\n\t}\n\n\tset transition (value) {\n\t\tthis.uniforms.transition.value = value;\n\t}\n\n\tget intensityRange () {\n\t\treturn this.uniforms.intensityRange.value;\n\t}\n\n\tset intensityRange (value) {\n\t\tif (!(value instanceof Array && value.length === 2)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (value[0] === this.uniforms.intensityRange.value[0] &&\n\t\t\tvalue[1] === this.uniforms.intensityRange.value[1]) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.uniforms.intensityRange.value = value;\n\n\t\tthis._defaultIntensityRangeChanged = true;\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'material_property_changed',\n\t\t\ttarget: this\n\t\t});\n\t}\n\n\tget intensityGamma () {\n\t\treturn this.uniforms.intensity_gbc.value[0];\n\t}\n\n\tset intensityGamma (value) {\n\t\tif (this.uniforms.intensity_gbc.value[0] !== value) {\n\t\t\tthis.uniforms.intensity_gbc.value[0] = value;\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\t}\n\n\tget intensityContrast () {\n\t\treturn this.uniforms.intensity_gbc.value[2];\n\t}\n\n\tset intensityContrast (value) {\n\t\tif (this.uniforms.intensity_gbc.value[2] !== value) {\n\t\t\tthis.uniforms.intensity_gbc.value[2] = value;\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\t}\n\n\tget intensityBrightness () {\n\t\treturn this.uniforms.intensity_gbc.value[1];\n\t}\n\n\tset intensityBrightness (value) {\n\t\tif (this.uniforms.intensity_gbc.value[1] !== value) {\n\t\t\tthis.uniforms.intensity_gbc.value[1] = value;\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\t}\n\n\tget rgbGamma () {\n\t\treturn this.uniforms.uRGB_gbc.value[0];\n\t}\n\n\tset rgbGamma (value) {\n\t\tif (this.uniforms.uRGB_gbc.value[0] !== value) {\n\t\t\tthis.uniforms.uRGB_gbc.value[0] = value;\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\t}\n\n\tget rgbContrast () {\n\t\treturn this.uniforms.uRGB_gbc.value[2];\n\t}\n\n\tset rgbContrast (value) {\n\t\tif (this.uniforms.uRGB_gbc.value[2] !== value) {\n\t\t\tthis.uniforms.uRGB_gbc.value[2] = value;\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\t}\n\n\tget rgbBrightness () {\n\t\treturn this.uniforms.uRGB_gbc.value[1];\n\t}\n\n\tset rgbBrightness (value) {\n\t\tif (this.uniforms.uRGB_gbc.value[1] !== value) {\n\t\t\tthis.uniforms.uRGB_gbc.value[1] = value;\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\t}\n\n\t\n\tget extraGamma () {\n\t\treturn this.uniforms.uExtraGammaBrightContr.value[0];\n\t}\n\n\tset extraGamma (value) {\n\t\tif (this.uniforms.uExtraGammaBrightContr.value[0] !== value) {\n\t\t\tthis.uniforms.uExtraGammaBrightContr.value[0] = value;\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\t}\n\n\tget extraBrightness () {\n\t\treturn this.uniforms.uExtraGammaBrightContr.value[1];\n\t}\n\n\tset extraBrightness (value) {\n\t\tif (this.uniforms.uExtraGammaBrightContr.value[1] !== value) {\n\t\t\tthis.uniforms.uExtraGammaBrightContr.value[1] = value;\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\t}\n\n\tget extraContrast () {\n\t\treturn this.uniforms.uExtraGammaBrightContr.value[2];\n\t}\n\n\tset extraContrast (value) {\n\t\tif (this.uniforms.uExtraGammaBrightContr.value[2] !== value) {\n\t\t\tthis.uniforms.uExtraGammaBrightContr.value[2] = value;\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\t}\n\n\tgetRange(attributeName){\n\t\treturn this.ranges.get(attributeName);\n\t}\n\n\tsetRange(attributeName, newRange){\n\n\t\tlet rangeChanged = false;\n\n\t\tlet oldRange = this.ranges.get(attributeName);\n\n\t\tif(oldRange != null && newRange != null){\n\t\t\trangeChanged = oldRange[0] !== newRange[0] || oldRange[1] !== newRange[1];\n\t\t}else{\n\t\t\trangeChanged = true;\n\t\t}\n\n\t\tthis.ranges.set(attributeName, newRange);\n\n\t\tif(rangeChanged){\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\t}\n\n\tget extraRange () {\n\t\treturn this.uniforms.uExtraRange.value;\n\t}\n\n\tset extraRange (value) {\n\t\tif (!(value instanceof Array && value.length === 2)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (value[0] === this.uniforms.uExtraRange.value[0] &&\n\t\t\tvalue[1] === this.uniforms.uExtraRange.value[1]) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.uniforms.uExtraRange.value = value;\n\n\t\tthis._defaultExtraRangeChanged = true;\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'material_property_changed',\n\t\t\ttarget: this\n\t\t});\n\t}\n\n\tget weightRGB () {\n\t\treturn this.uniforms.wRGB.value;\n\t}\n\n\tset weightRGB (value) {\n\t\tif(this.uniforms.wRGB.value !== value){\n\t\t\tthis.uniforms.wRGB.value = value;\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\t}\n\n\tget weightIntensity () {\n\t\treturn this.uniforms.wIntensity.value;\n\t}\n\n\tset weightIntensity (value) {\n\t\tif(this.uniforms.wIntensity.value !== value){\n\t\t\tthis.uniforms.wIntensity.value = value;\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\t}\n\n\tget weightElevation () {\n\t\treturn this.uniforms.wElevation.value;\n\t}\n\n\tset weightElevation (value) {\n\t\tif(this.uniforms.wElevation.value !== value){\n\t\t\tthis.uniforms.wElevation.value = value;\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\t}\n\n\tget weightClassification () {\n\t\treturn this.uniforms.wClassification.value;\n\t}\n\n\tset weightClassification (value) {\n\t\tif(this.uniforms.wClassification.value !== value){\n\t\t\tthis.uniforms.wClassification.value = value;\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\t}\n\n\tget weightReturnNumber () {\n\t\treturn this.uniforms.wReturnNumber.value;\n\t}\n\n\tset weightReturnNumber (value) {\n\t\tif(this.uniforms.wReturnNumber.value !== value){\n\t\t\tthis.uniforms.wReturnNumber.value = value;\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\t}\n\n\tget weightSourceID () {\n\t\treturn this.uniforms.wSourceID.value;\n\t}\n\n\tset weightSourceID (value) {\n\t\tif(this.uniforms.wSourceID.value !== value){\n\t\t\tthis.uniforms.wSourceID.value = value;\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\t}\n\n\tstatic generateGradientTexture (gradient) {\n\t\tlet size = 64;\n\n\t\t// create canvas\n\t\tlet canvas = document.createElement('canvas');\n\t\tcanvas.width = size;\n\t\tcanvas.height = size;\n\n\t\t// get context\n\t\tlet context = canvas.getContext('2d');\n\n\t\t// draw gradient\n\t\tcontext.rect(0, 0, size, size);\n\t\tlet ctxGradient = context.createLinearGradient(0, 0, size, size);\n\n\t\tfor (let i = 0; i < gradient.length; i++) {\n\t\t\tlet step = gradient[i];\n\n\t\t\tctxGradient.addColorStop(step[0], '#' + step[1].getHexString());\n\t\t}\n\n\t\tcontext.fillStyle = ctxGradient;\n\t\tcontext.fill();\n\t\t\n\t\t//let texture = new THREE.Texture(canvas);\n\t\tlet texture = new THREE.CanvasTexture(canvas);\n\t\ttexture.needsUpdate = true;\n\t\t\n\t\ttexture.minFilter = THREE.LinearFilter;\n\t\ttexture.wrap = THREE.RepeatWrapping;\n\t\ttexture.repeat = 2;\n\t\t// textureImage = texture.image;\n\n\t\treturn texture;\n\t}\n\t\n\tstatic generateMatcapTexture (matcap) {\n\tvar url = new URL(Potree.resourcePath + \"/textures/matcap/\" + matcap).href;\n\tlet texture = new THREE.TextureLoader().load( url );\n\t\ttexture.magFilter = texture.minFilter = THREE.LinearFilter; \n\t\ttexture.needsUpdate = true;\n\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// Switch matcap texture on the fly : viewer.scene.pointclouds[0].material.matcap = 'matcap1.jpg'; \n\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\treturn texture; \n\t}\n\n\tdisableEvents(){\n\t\tif(this._hiddenListeners === undefined){\n\t\t\tthis._hiddenListeners = this._listeners;\n\t\t\tthis._listeners = {};\n\t\t}\n\t};\n\n\tenableEvents(){\n\t\tthis._listeners = this._hiddenListeners;\n\t\tthis._hiddenListeners = undefined;\n\t};\n\n\t// copyFrom(from){\n\n\t// \tvar a = 10;\n\n\t// \tfor(let name of Object.keys(this.uniforms)){\n\t// \t\tthis.uniforms[name].value = from.uniforms[name].value;\n\t// \t}\n\t// }\n\n\t// copy(from){\n\t// \tthis.copyFrom(from);\n\t// }\n\n}\n","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport {PointCloudTree, PointCloudTreeNode} from \"./PointCloudTree.js\";\nimport {PointCloudOctreeGeometryNode} from \"./PointCloudOctreeGeometry.js\";\nimport {Utils} from \"./utils.js\";\nimport {PointCloudMaterial} from \"./materials/PointCloudMaterial.js\";\n\n\nexport class PointCloudOctreeNode extends PointCloudTreeNode {\n\tconstructor () {\n\t\tsuper();\n\n\t\t//this.children = {};\n\t\tthis.children = [];\n\t\tthis.sceneNode = null;\n\t\tthis.octree = null;\n\t}\n\n\tgetNumPoints () {\n\t\treturn this.geometryNode.numPoints;\n\t}\n\n\tisLoaded () {\n\t\treturn true;\n\t}\n\n\tisTreeNode () {\n\t\treturn true;\n\t}\n\n\tisGeometryNode () {\n\t\treturn false;\n\t}\n\n\tgetLevel () {\n\t\treturn this.geometryNode.level;\n\t}\n\n\tgetBoundingSphere () {\n\t\treturn this.geometryNode.boundingSphere;\n\t}\n\n\tgetBoundingBox () {\n\t\treturn this.geometryNode.boundingBox;\n\t}\n\n\tgetChildren () {\n\t\tlet children = [];\n\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tif (this.children[i]) {\n\t\t\t\tchildren.push(this.children[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn children;\n\t}\n\n\tgetPointsInBox(boxNode){\n\n\t\tif(!this.sceneNode){\n\t\t\treturn null;\n\t\t}\n\n\t\tlet buffer = this.geometryNode.buffer;\n\n\t\tlet posOffset = buffer.offset(\"position\");\n\t\tlet stride = buffer.stride;\n\t\tlet view = new DataView(buffer.data);\n\n\t\tlet worldToBox = boxNode.matrixWorld.clone().invert();\n\t\tlet objectToBox = new THREE.Matrix4().multiplyMatrices(worldToBox, this.sceneNode.matrixWorld);\n\n\t\tlet inBox = [];\n\n\t\tlet pos = new THREE.Vector4();\n\t\tfor(let i = 0; i < buffer.numElements; i++){\n\t\t\tlet x = view.getFloat32(i * stride + posOffset + 0, true);\n\t\t\tlet y = view.getFloat32(i * stride + posOffset + 4, true);\n\t\t\tlet z = view.getFloat32(i * stride + posOffset + 8, true);\n\n\t\t\tpos.set(x, y, z, 1);\n\t\t\tpos.applyMatrix4(objectToBox);\n\n\t\t\tif(-0.5 < pos.x && pos.x < 0.5){\n\t\t\t\tif(-0.5 < pos.y && pos.y < 0.5){\n\t\t\t\t\tif(-0.5 < pos.z && pos.z < 0.5){\n\t\t\t\t\t\tpos.set(x, y, z, 1).applyMatrix4(this.sceneNode.matrixWorld);\n\t\t\t\t\t\tinBox.push(new THREE.Vector3(pos.x, pos.y, pos.z));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn inBox;\n\t}\n\n\tget name () {\n\t\treturn this.geometryNode.name;\n\t}\n};\n\nexport class PointCloudOctree extends PointCloudTree {\n\tconstructor (geometry, material) {\n\t\tsuper();\n\n\t\tthis.pointBudget = Infinity;\n\t\tthis.pcoGeometry = geometry;\n\t\tthis.boundingBox = this.pcoGeometry.boundingBox;\n\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new THREE.Sphere());\n\t\tthis.material = material || new PointCloudMaterial();\n\t\tthis.visiblePointsTarget = 2 * 1000 * 1000;\n\t\tthis.minimumNodePixelSize = 150;\n\t\tthis.level = 0;\n\t\tthis.position.copy(geometry.offset);\n\t\tthis.updateMatrix();\n\n\t\t{\n\n\t\t\tlet priorityQueue = [\"rgba\", \"rgb\", \"intensity\", \"classification\"];\n\t\t\tlet selected = \"rgba\";\n\n\t\t\tfor(let attributeName of priorityQueue){\n\t\t\t\tlet attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === attributeName);\n\n\t\t\t\tif(!attribute){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet min = attribute.range[0].constructor.name === \"Array\" ? attribute.range[0] : [attribute.range[0]];\n\t\t\t\tlet max = attribute.range[1].constructor.name === \"Array\" ? attribute.range[1] : [attribute.range[1]];\n\n\t\t\t\tlet range_min = new THREE.Vector3(...min);\n\t\t\t\tlet range_max = new THREE.Vector3(...max);\n\t\t\t\tlet range = range_min.distanceTo(range_max);\n\n\t\t\t\tif(range === 0){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tselected = attributeName;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.material.activeAttributeName = selected;\n\t\t}\n\n\t\tthis.showBoundingBox = false;\n\t\tthis.boundingBoxNodes = [];\n\t\tthis.loadQueue = [];\n\t\tthis.visibleBounds = new THREE.Box3();\n\t\tthis.visibleNodes = [];\n\t\tthis.visibleGeometry = [];\n\t\tthis.generateDEM = false;\n\t\tthis.profileRequests = [];\n\t\tthis.name = '';\n\t\tthis._visible = true;\n\n\t\t{\n\t\t\tlet box = [this.pcoGeometry.tightBoundingBox, this.getBoundingBoxWorld()]\n\t\t\t\t.find(v => v !== undefined);\n\n\t\t\tthis.updateMatrixWorld(true);\n\t\t\tbox = Utils.computeTransformedBoundingBox(box, this.matrixWorld);\n\n\t\t\tlet bMin = box.min.z;\n\t\t\tlet bMax = box.max.z;\n\t\t\tthis.material.heightMin = bMin;\n\t\t\tthis.material.heightMax = bMax;\n\t\t}\n\n\t\t// TODO read projection from file instead\n\t\tthis.projection = geometry.projection;\n\t\tthis.fallbackProjection = geometry.fallbackProjection;\n\n\t\tthis.root = this.pcoGeometry.root;\n\t}\n\n\tsetName (name) {\n\t\tif (this.name !== name) {\n\t\t\tthis.name = name;\n\t\t\tthis.dispatchEvent({type: 'name_changed', name: name, pointcloud: this});\n\t\t}\n\t}\n\n\tgetName () {\n\t\treturn this.name;\n\t}\n\n\tgetAttribute(name){\n\n\t\tconst attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === name);\n\n\t\tif(attribute){\n\t\t\treturn attribute;\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tgetAttributes(){\n\t\treturn this.pcoGeometry.pointAttributes;\n\t}\n\n\ttoTreeNode (geometryNode, parent) {\n\t\tlet node = new PointCloudOctreeNode();\n\n\t\t// if(geometryNode.name === \"r40206\"){\n\t\t//\tconsole.log(\"creating node for r40206\");\n\t\t// }\n\t\tlet sceneNode = new THREE.Points(geometryNode.geometry, this.material);\n\t\tsceneNode.name = geometryNode.name;\n\t\tsceneNode.position.copy(geometryNode.boundingBox.min);\n\t\tsceneNode.frustumCulled = false;\n\t\tsceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => {\n\t\t\tif (material.program) {\n\t\t\t\t_this.getContext().useProgram(material.program.program);\n\n\t\t\t\tif (material.program.getUniforms().map.level) {\n\t\t\t\t\tlet level = geometryNode.getLevel();\n\t\t\t\t\tmaterial.uniforms.level.value = level;\n\t\t\t\t\tmaterial.program.getUniforms().map.level.setValue(_this.getContext(), level);\n\t\t\t\t}\n\n\t\t\t\tif (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) {\n\t\t\t\t\tlet vnStart = this.visibleNodeTextureOffsets.get(node);\n\t\t\t\t\tmaterial.uniforms.vnStart.value = vnStart;\n\t\t\t\t\tmaterial.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart);\n\t\t\t\t}\n\n\t\t\t\tif (material.program.getUniforms().map.pcIndex) {\n\t\t\t\t\tlet i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node);\n\t\t\t\t\tmaterial.uniforms.pcIndex.value = i;\n\t\t\t\t\tmaterial.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// { // DEBUG\n\t\t//\tlet sg = new THREE.SphereGeometry(1, 16, 16);\n\t\t//\tlet sm = new THREE.MeshNormalMaterial();\n\t\t//\tlet s = new THREE.Mesh(sg, sm);\n\t\t//\ts.scale.set(5, 5, 5);\n\t\t//\ts.position.copy(geometryNode.mean)\n\t\t//\t\t.add(this.position)\n\t\t//\t\t.add(geometryNode.boundingBox.min);\n\t\t//\n\t\t//\tviewer.scene.scene.add(s);\n\t\t// }\n\n\t\tnode.geometryNode = geometryNode;\n\t\tnode.sceneNode = sceneNode;\n\t\tnode.pointcloud = this;\n\t\tnode.children = [];\n\t\t//for (let key in geometryNode.children) {\n\t\t//\tnode.children[key] = geometryNode.children[key];\n\t\t//}\n\t\tfor(let i = 0; i < 8; i++){\n\t\t\tnode.children[i] = geometryNode.children[i];\n\t\t}\n\n\t\tif (!parent) {\n\t\t\tthis.root = node;\n\t\t\tthis.add(sceneNode);\n\t\t} else {\n\t\t\tlet childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]);\n\t\t\tparent.sceneNode.add(sceneNode);\n\t\t\tparent.children[childIndex] = node;\n\t\t}\n\n\t\tlet disposeListener = function () {\n\t\t\tlet childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]);\n\t\t\tparent.sceneNode.remove(node.sceneNode);\n\t\t\tparent.children[childIndex] = geometryNode;\n\t\t};\n\t\tgeometryNode.oneTimeDisposeHandlers.push(disposeListener);\n\n\t\treturn node;\n\t}\n\n\tupdateVisibleBounds () {\n\t\tlet leafNodes = [];\n\t\tfor (let i = 0; i < this.visibleNodes.length; i++) {\n\t\t\tlet node = this.visibleNodes[i];\n\t\t\tlet isLeaf = true;\n\n\t\t\tfor (let j = 0; j < node.children.length; j++) {\n\t\t\t\tlet child = node.children[j];\n\t\t\t\tif (child instanceof PointCloudOctreeNode) {\n\t\t\t\t\tisLeaf = isLeaf && !child.sceneNode.visible;\n\t\t\t\t} else if (child instanceof PointCloudOctreeGeometryNode) {\n\t\t\t\t\tisLeaf = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isLeaf) {\n\t\t\t\tleafNodes.push(node);\n\t\t\t}\n\t\t}\n\n\t\tthis.visibleBounds.min = new THREE.Vector3(Infinity, Infinity, Infinity);\n\t\tthis.visibleBounds.max = new THREE.Vector3(-Infinity, -Infinity, -Infinity);\n\t\tfor (let i = 0; i < leafNodes.length; i++) {\n\t\t\tlet node = leafNodes[i];\n\n\t\t\tthis.visibleBounds.expandByPoint(node.getBoundingBox().min);\n\t\t\tthis.visibleBounds.expandByPoint(node.getBoundingBox().max);\n\t\t}\n\t}\n\n\tupdateMaterial (material, visibleNodes, camera, renderer) {\n\t\tmaterial.fov = camera.fov * (Math.PI / 180);\n\t\tmaterial.screenWidth = renderer.domElement.clientWidth;\n\t\tmaterial.screenHeight = renderer.domElement.clientHeight;\n\t\tmaterial.spacing = this.pcoGeometry.spacing; // * Math.max(this.scale.x, this.scale.y, this.scale.z);\n\t\tmaterial.near = camera.near;\n\t\tmaterial.far = camera.far;\n\t\tmaterial.uniforms.octreeSize.value = this.pcoGeometry.boundingBox.getSize(new THREE.Vector3()).x;\n\t}\n\n\tcomputeVisibilityTextureData(nodes, camera){\n\n\t\tif(Potree.measureTimings) performance.mark(\"computeVisibilityTextureData-start\");\n\n\t\tlet data = new Uint8Array(nodes.length * 4);\n\t\tlet visibleNodeTextureOffsets = new Map();\n\n\t\t// copy array\n\t\tnodes = nodes.slice();\n\n\t\t// sort by level and index, e.g. r, r0, r3, r4, r01, r07, r30, ...\n\t\tlet sort = function (a, b) {\n\t\t\tlet na = a.geometryNode.name;\n\t\t\tlet nb = b.geometryNode.name;\n\t\t\tif (na.length !== nb.length) return na.length - nb.length;\n\t\t\tif (na < nb) return -1;\n\t\t\tif (na > nb) return 1;\n\t\t\treturn 0;\n\t\t};\n\t\tnodes.sort(sort);\n\n\t\tlet worldDir = new THREE.Vector3();\n\n\t\tlet nodeMap = new Map();\n\t\tlet offsetsToChild = new Array(nodes.length).fill(Infinity);\n\n\t\tfor(let i = 0; i < nodes.length; i++){\n\t\t\tlet node = nodes[i];\n\n\t\t\tnodeMap.set(node.name, node);\n\t\t\tvisibleNodeTextureOffsets.set(node, i);\n\n\t\t\tif(i > 0){\n\t\t\t\tlet index = parseInt(node.name.slice(-1));\n\t\t\t\tlet parentName = node.name.slice(0, -1);\n\t\t\t\tlet parent = nodeMap.get(parentName);\n\t\t\t\tlet parentOffset = visibleNodeTextureOffsets.get(parent);\n\n\t\t\t\tlet parentOffsetToChild = (i - parentOffset);\n\n\t\t\t\toffsetsToChild[parentOffset] = Math.min(offsetsToChild[parentOffset], parentOffsetToChild);\n\n\t\t\t\tdata[parentOffset * 4 + 0] = data[parentOffset * 4 + 0] | (1 << index);\n\t\t\t\tdata[parentOffset * 4 + 1] = (offsetsToChild[parentOffset] >> 8);\n\t\t\t\tdata[parentOffset * 4 + 2] = (offsetsToChild[parentOffset] % 256);\n\t\t\t}\n\n\t\t\tlet density = node.geometryNode.density;\n\t\t\t\n\t\t\tif(typeof density === \"number\" && !Number.isNaN(density)){\n\t\t\t\tlet lodOffset = Math.log2(density) / 2 - 1.5;\n\n\t\t\t\tlet offsetUint8 = (lodOffset + 10) * 10;\n\n\t\t\t\tdata[i * 4 + 3] = offsetUint8;\n\t\t\t}else{\n\t\t\t\tdata[i * 4 + 3] = 100;\n\t\t\t}\n\n\t\t}\n\n\t\tif(Potree.measureTimings){\n\t\t\tperformance.mark(\"computeVisibilityTextureData-end\");\n\t\t\tperformance.measure(\"render.computeVisibilityTextureData\", \"computeVisibilityTextureData-start\", \"computeVisibilityTextureData-end\");\n\t\t}\n\n\t\treturn {\n\t\t\tdata: data,\n\t\t\toffsets: visibleNodeTextureOffsets\n\t\t};\n\t}\n\n\tnodeIntersectsProfile (node, profile) {\n\t\tlet bbWorld = node.boundingBox.clone().applyMatrix4(this.matrixWorld);\n\t\tlet bsWorld = bbWorld.getBoundingSphere(new THREE.Sphere());\n\n\t\tlet intersects = false;\n\n\t\tfor (let i = 0; i < profile.points.length - 1; i++) {\n\n\t\t\tlet start = new THREE.Vector3(profile.points[i + 0].x, profile.points[i + 0].y, bsWorld.center.z);\n\t\t\tlet end = new THREE.Vector3(profile.points[i + 1].x, profile.points[i + 1].y, bsWorld.center.z);\n\n\t\t\tlet closest = new THREE.Line3(start, end).closestPointToPoint(bsWorld.center, true, new THREE.Vector3());\n\t\t\tlet distance = closest.distanceTo(bsWorld.center);\n\n\t\t\tintersects = intersects || (distance < (bsWorld.radius + profile.width));\n\t\t}\n\n\t\t//console.log(`${node.name}: ${intersects}`);\n\n\t\treturn intersects;\n\t}\n\n\tdeepestNodeAt(position){\n\t\t\n\t\tconst toObjectSpace = this.matrixWorld.clone().invert();\n\n\t\tconst objPos = position.clone().applyMatrix4(toObjectSpace);\n\n\t\tlet current = this.root;\n\t\twhile(true){\n\n\t\t\tlet containingChild = null;\n\n\t\t\tfor(const child of current.children){\n\n\t\t\t\tif(child !== undefined){\n\t\t\t\t\tif(child.getBoundingBox().containsPoint(objPos)){\n\t\t\t\t\t\tcontainingChild = child;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(containingChild !== null && containingChild instanceof PointCloudOctreeNode){\n\t\t\t\tcurrent = containingChild;\n\t\t\t}else{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tconst deepest = current;\n\n\t\treturn deepest;\n\t}\n\n\tnodesOnRay (nodes, ray) {\n\t\tlet nodesOnRay = [];\n\n\t\tlet _ray = ray.clone();\n\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\tlet node = nodes[i];\n\t\t\tlet sphere = node.getBoundingSphere().clone().applyMatrix4(this.matrixWorld);\n\n\t\t\tif (_ray.intersectsSphere(sphere)) {\n\t\t\t\tnodesOnRay.push(node);\n\t\t\t}\n\t\t}\n\n\t\treturn nodesOnRay;\n\t}\n\n\tupdateMatrixWorld (force) {\n\t\tif (this.matrixAutoUpdate === true) this.updateMatrix();\n\n\t\tif (this.matrixWorldNeedsUpdate === true || force === true) {\n\t\t\tif (!this.parent) {\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}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\t\t}\n\t}\n\n\thideDescendants (object) {\n\t\tlet stack = [];\n\t\tfor (let i = 0; i < object.children.length; i++) {\n\t\t\tlet child = object.children[i];\n\t\t\tif (child.visible) {\n\t\t\t\tstack.push(child);\n\t\t\t}\n\t\t}\n\n\t\twhile (stack.length > 0) {\n\t\t\tlet object = stack.shift();\n\n\t\t\tobject.visible = false;\n\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\t\t}\n\t}\n\n\tmoveToOrigin () {\n\t\tthis.position.set(0, 0, 0);\n\t\tthis.updateMatrixWorld(true);\n\t\tlet box = this.boundingBox;\n\t\tlet transform = this.matrixWorld;\n\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\t\tthis.position.set(0, 0, 0).sub(tBox.getCenter(new THREE.Vector3()));\n\t};\n\n\tmoveToGroundPlane () {\n\t\tthis.updateMatrixWorld(true);\n\t\tlet box = this.boundingBox;\n\t\tlet transform = this.matrixWorld;\n\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\t\tthis.position.y += -tBox.min.y;\n\t};\n\n\tgetBoundingBoxWorld () {\n\t\tthis.updateMatrixWorld(true);\n\t\tlet box = this.boundingBox;\n\t\tlet transform = this.matrixWorld;\n\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\n\t\treturn tBox;\n\t};\n\n\t/**\n\t * returns points inside the profile points\n\t *\n\t * maxDepth:\t\tsearch points up to the given octree depth\n\t *\n\t *\n\t * The return value is an array with all segments of the profile path\n\t *\tlet segment = {\n\t *\t\tstart:\tTHREE.Vector3,\n\t *\t\tend:\tTHREE.Vector3,\n\t *\t\tpoints: {}\n\t *\t\tproject: function()\n\t *\t};\n\t *\n\t * The project() function inside each segment can be used to transform\n\t * that segments point coordinates to line up along the x-axis.\n\t *\n\t *\n\t */\n\tgetPointsInProfile (profile, maxDepth, callback) {\n\t\tif (callback) {\n\t\t\tlet request = new Potree.ProfileRequest(this, profile, maxDepth, callback);\n\t\t\tthis.profileRequests.push(request);\n\n\t\t\treturn request;\n\t\t}\n\n\t\tlet points = {\n\t\t\tsegments: [],\n\t\t\tboundingBox: new THREE.Box3(),\n\t\t\tprojectedBoundingBox: new THREE.Box2()\n\t\t};\n\n\t\t// evaluate segments\n\t\tfor (let i = 0; i < profile.points.length - 1; i++) {\n\t\t\tlet start = profile.points[i];\n\t\t\tlet end = profile.points[i + 1];\n\t\t\tlet ps = this.getProfile(start, end, profile.width, maxDepth);\n\n\t\t\tlet segment = {\n\t\t\t\tstart: start,\n\t\t\t\tend: end,\n\t\t\t\tpoints: ps,\n\t\t\t\tproject: null\n\t\t\t};\n\n\t\t\tpoints.segments.push(segment);\n\n\t\t\tpoints.boundingBox.expandByPoint(ps.boundingBox.min);\n\t\t\tpoints.boundingBox.expandByPoint(ps.boundingBox.max);\n\t\t}\n\n\t\t// add projection functions to the segments\n\t\tlet mileage = new THREE.Vector3();\n\t\tfor (let i = 0; i < points.segments.length; i++) {\n\t\t\tlet segment = points.segments[i];\n\t\t\tlet start = segment.start;\n\t\t\tlet end = segment.end;\n\n\t\t\tlet project = (function (_start, _end, _mileage, _boundingBox) {\n\t\t\t\tlet start = _start;\n\t\t\t\tlet end = _end;\n\t\t\t\tlet mileage = _mileage;\n\t\t\t\tlet boundingBox = _boundingBox;\n\n\t\t\t\tlet xAxis = new THREE.Vector3(1, 0, 0);\n\t\t\t\tlet dir = new THREE.Vector3().subVectors(end, start);\n\t\t\t\tdir.y = 0;\n\t\t\t\tdir.normalize();\n\t\t\t\tlet alpha = Math.acos(xAxis.dot(dir));\n\t\t\t\tif (dir.z > 0) {\n\t\t\t\t\talpha = -alpha;\n\t\t\t\t}\n\n\t\t\t\treturn function (position) {\n\t\t\t\t\tlet toOrigin = new THREE.Matrix4().makeTranslation(-start.x, -boundingBox.min.y, -start.z);\n\t\t\t\t\tlet alignWithX = new THREE.Matrix4().makeRotationY(-alpha);\n\t\t\t\t\tlet applyMileage = new THREE.Matrix4().makeTranslation(mileage.x, 0, 0);\n\n\t\t\t\t\tlet pos = position.clone();\n\t\t\t\t\tpos.applyMatrix4(toOrigin);\n\t\t\t\t\tpos.applyMatrix4(alignWithX);\n\t\t\t\t\tpos.applyMatrix4(applyMileage);\n\n\t\t\t\t\treturn pos;\n\t\t\t\t};\n\t\t\t}(start, end, mileage.clone(), points.boundingBox.clone()));\n\n\t\t\tsegment.project = project;\n\n\t\t\tmileage.x += new THREE.Vector3(start.x, 0, start.z).distanceTo(new THREE.Vector3(end.x, 0, end.z));\n\t\t\tmileage.y += end.y - start.y;\n\t\t}\n\n\t\tpoints.projectedBoundingBox.min.x = 0;\n\t\tpoints.projectedBoundingBox.min.y = points.boundingBox.min.y;\n\t\tpoints.projectedBoundingBox.max.x = mileage.x;\n\t\tpoints.projectedBoundingBox.max.y = points.boundingBox.max.y;\n\n\t\treturn points;\n\t}\n\n\t/**\n\t * returns points inside the given profile bounds.\n\t *\n\t * start:\n\t * end:\n\t * width:\n\t * depth:\t\tsearch points up to the given octree depth\n\t * callback:\tif specified, points are loaded before searching\n\t *\n\t *\n\t */\n\tgetProfile (start, end, width, depth, callback) {\n\t\tlet request = new Potree.ProfileRequest(start, end, width, depth, callback);\n\t\tthis.profileRequests.push(request);\n\t};\n\n\tgetVisibleExtent () {\n\t\treturn this.visibleBounds.applyMatrix4(this.matrixWorld);\n\t};\n\n\tintersectsPoint(position){\n\n\t\tlet rootAvailable = this.pcoGeometry.root && this.pcoGeometry.root.geometry;\n\n\t\tif(!rootAvailable){\n\t\t\treturn false;\n\t\t}\n\n\t\tif(typeof this.signedDistanceField === \"undefined\"){\n\n\t\t\tconst resolution = 32;\n\t\t\tconst field = new Float32Array(resolution ** 3).fill(Infinity);\n\n\t\t\tconst positions = this.pcoGeometry.root.geometry.attributes.position;\n\t\t\tconst boundingBox = this.boundingBox;\n\n\t\t\tconst n = positions.count;\n\n\t\t\tfor(let i = 0; i < n; i = i + 3){\n\t\t\t\tconst x = positions.array[3 * i + 0];\n\t\t\t\tconst y = positions.array[3 * i + 1];\n\t\t\t\tconst z = positions.array[3 * i + 2];\n\n\t\t\t\tconst ix = parseInt(Math.min(resolution * (x / boundingBox.max.x), resolution - 1));\n\t\t\t\tconst iy = parseInt(Math.min(resolution * (y / boundingBox.max.y), resolution - 1));\n\t\t\t\tconst iz = parseInt(Math.min(resolution * (z / boundingBox.max.z), resolution - 1));\n\n\t\t\t\tconst index = ix + iy * resolution + iz * resolution * resolution;\n\n\t\t\t\tfield[index] = 0;\n\t\t\t}\n\n\t\t\tconst sdf = {\n\t\t\t\tresolution: resolution,\n\t\t\t\tfield: field,\n\t\t\t};\n\n\t\t\tthis.signedDistanceField = sdf;\n\t\t}\n\n\n\t\t{\n\t\t\tconst sdf = this.signedDistanceField;\n\t\t\tconst boundingBox = this.boundingBox;\n\n\t\t\tconst toObjectSpace = this.matrixWorld.clone().invert();\n\n\t\t\tconst objPos = position.clone().applyMatrix4(toObjectSpace);\n\n\t\t\tconst resolution = sdf.resolution;\n\t\t\tconst ix = parseInt(resolution * (objPos.x / boundingBox.max.x));\n\t\t\tconst iy = parseInt(resolution * (objPos.y / boundingBox.max.y));\n\t\t\tconst iz = parseInt(resolution * (objPos.z / boundingBox.max.z));\n\n\t\t\tif(ix < 0 || iy < 0 || iz < 0){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(ix >= resolution || iy >= resolution || iz >= resolution){\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst index = ix + iy * resolution + iz * resolution * resolution;\n\n\t\t\tconst value = sdf.field[index];\n\n\t\t\tif(value === 0){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t *\n\t *\n\t *\n\t * params.pickWindowSize:\tLook for points inside a pixel window of this size.\n\t *\t\t\t\t\t\t\tUse odd values: 1, 3, 5, ...\n\t *\n\t *\n\t * TODO: only draw pixels that are actually read with readPixels().\n\t *\n\t */\n\tpick(viewer, camera, ray, params = {}){\n\n\t\tlet renderer = viewer.renderer;\n\t\tlet pRenderer = viewer.pRenderer;\n\n\t\tperformance.mark(\"pick-start\");\n\n\t\tlet getVal = (a, b) => a !== undefined ? a : b;\n\n\t\tlet pickWindowSize = getVal(params.pickWindowSize, 65);\n\t\tlet pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false);\n\n\t\tlet size = renderer.getSize(new THREE.Vector2());\n\n\t\tlet width = Math.ceil(getVal(params.width, size.width));\n\t\tlet height = Math.ceil(getVal(params.height, size.height));\n\n\t\tlet pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType);\n\t\tlet pointSize = getVal(params.pointSize, this.material.size);\n\n\t\tlet nodes = this.nodesOnRay(this.visibleNodes, ray);\n\n\t\tif (nodes.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!this.pickState) {\n\t\t\tlet scene = new THREE.Scene();\n\n\t\t\tlet material = new Potree.PointCloudMaterial();\n\t\t\tmaterial.activeAttributeName = \"indices\";\n\n\t\t\tlet renderTarget = new THREE.WebGLRenderTarget(\n\t\t\t\t1, 1,\n\t\t\t\t{ minFilter: THREE.LinearFilter,\n\t\t\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\t\t\tformat: THREE.RGBAFormat }\n\t\t\t);\n\n\t\t\tthis.pickState = {\n\t\t\t\trenderTarget: renderTarget,\n\t\t\t\tmaterial: material,\n\t\t\t\tscene: scene\n\t\t\t};\n\t\t};\n\n\t\tlet pickState = this.pickState;\n\t\tlet pickMaterial = pickState.material;\n\n\t\t{ // update pick material\n\t\t\tpickMaterial.pointSizeType = pointSizeType;\n\t\t\t//pickMaterial.shape = this.material.shape;\n\t\t\tpickMaterial.shape = Potree.PointShape.PARABOLOID;\n\n\t\t\tpickMaterial.uniforms.uFilterReturnNumberRange.value = this.material.uniforms.uFilterReturnNumberRange.value;\n\t\t\tpickMaterial.uniforms.uFilterNumberOfReturnsRange.value = this.material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\tpickMaterial.uniforms.uFilterGPSTimeClipRange.value = this.material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\tpickMaterial.uniforms.uFilterPointSourceIDClipRange.value = this.material.uniforms.uFilterPointSourceIDClipRange.value;\n\n\t\t\tpickMaterial.activeAttributeName = \"indices\";\n\n\t\t\tpickMaterial.size = pointSize;\n\t\t\tpickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value;\n\t\t\tpickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value;\n\t\t\tpickMaterial.classification = this.material.classification;\n\t\t\tpickMaterial.recomputeClassification();\n\n\t\t\tif(params.pickClipped){\n\t\t\t\tpickMaterial.clipBoxes = this.material.clipBoxes;\n\t\t\t\tpickMaterial.uniforms.clipBoxes = this.material.uniforms.clipBoxes;\n\t\t\t\tif(this.material.clipTask === Potree.ClipTask.HIGHLIGHT){\n\t\t\t\t\tpickMaterial.clipTask = Potree.ClipTask.NONE;\n\t\t\t\t}else{\n\t\t\t\t\tpickMaterial.clipTask = this.material.clipTask;\n\t\t\t\t}\n\t\t\t\tpickMaterial.clipMethod = this.material.clipMethod;\n\t\t\t}else{\n\t\t\t\tpickMaterial.clipBoxes = [];\n\t\t\t}\n\n\t\t\tthis.updateMaterial(pickMaterial, nodes, camera, renderer);\n\t\t}\n\n\t\tpickState.renderTarget.setSize(width, height);\n\n\t\tlet pixelPos = new THREE.Vector2(params.x, params.y);\n\n\t\tlet gl = renderer.getContext();\n\t\tgl.enable(gl.SCISSOR_TEST);\n\t\tgl.scissor(\n\t\t\tparseInt(pixelPos.x - (pickWindowSize - 1) / 2),\n\t\t\tparseInt(pixelPos.y - (pickWindowSize - 1) / 2),\n\t\t\tparseInt(pickWindowSize), parseInt(pickWindowSize));\n\n\n\t\trenderer.state.buffers.depth.setTest(pickMaterial.depthTest);\n\t\trenderer.state.buffers.depth.setMask(pickMaterial.depthWrite);\n\t\trenderer.state.setBlending(THREE.NoBlending);\n\n\t\t{ // RENDER\n\t\t\trenderer.setRenderTarget(pickState.renderTarget);\n\t\t\tgl.clearColor(0, 0, 0, 0);\n\t\t\trenderer.clear(true, true, true);\n\n\t\t\tlet tmp = this.material;\n\t\t\tthis.material = pickMaterial;\n\n\t\t\tpRenderer.renderOctree(this, nodes, camera, pickState.renderTarget);\n\n\t\t\tthis.material = tmp;\n\t\t}\n\n\t\tlet clamp = (number, min, max) => Math.min(Math.max(min, number), max);\n\n\t\tlet x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width));\n\t\tlet y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height));\n\t\tlet w = parseInt(Math.min(x + pickWindowSize, width) - x);\n\t\tlet h = parseInt(Math.min(y + pickWindowSize, height) - y);\n\n\t\tlet pixelCount = w * h;\n\t\tlet buffer = new Uint8Array(4 * pixelCount);\n\n\t\tgl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer);\n\n\t\trenderer.setRenderTarget(null);\n\t\trenderer.state.reset();\n\t\trenderer.setScissorTest(false);\n\t\tgl.disable(gl.SCISSOR_TEST);\n\n\t\tlet pixels = buffer;\n\t\tlet ibuffer = new Uint32Array(buffer.buffer);\n\n\t\t// find closest hit inside pixelWindow boundaries\n\t\tlet min = Number.MAX_VALUE;\n\t\tlet hits = [];\n\t\tfor (let u = 0; u < pickWindowSize; u++) {\n\t\t\tfor (let v = 0; v < pickWindowSize; v++) {\n\t\t\t\tlet offset = (u + v * pickWindowSize);\n\t\t\t\tlet distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2);\n\n\t\t\t\tlet pcIndex = pixels[4 * offset + 3];\n\t\t\t\tpixels[4 * offset + 3] = 0;\n\t\t\t\tlet pIndex = ibuffer[offset];\n\n\t\t\t\tif(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){\n\t\t\t\t\tlet hit = {\n\t\t\t\t\t\tpIndex: pIndex,\n\t\t\t\t\t\tpcIndex: pcIndex,\n\t\t\t\t\t\tdistanceToCenter: distance\n\t\t\t\t\t};\n\n\t\t\t\t\tif(params.all){\n\t\t\t\t\t\thits.push(hit);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(hits.length > 0){\n\t\t\t\t\t\t\tif(distance < hits[0].distanceToCenter){\n\t\t\t\t\t\t\t\thits[0] = hit;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\thits.push(hit);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t// { // DEBUG: show panel with pick image\n\t\t// \tlet img = Utils.pixelsArrayToImage(buffer, w, h);\n\t\t// \tlet screenshot = img.src;\n\t\t\n\t\t// \tif(!this.debugDIV){\n\t\t// \t\tthis.debugDIV = $(`\n\t\t// \t\t\t
        `);\n\t\t// \t\t$(document.body).append(this.debugDIV);\n\t\t// \t}\n\t\t\n\t\t// \tthis.debugDIV.empty();\n\t\t// \tthis.debugDIV.append($(``));\n\t\t// \t//$(this.debugWindow.document).append($(``));\n\t\t// \t//this.debugWindow.document.write('');\n\t\t// }\n\n\n\t\tfor(let hit of hits){\n\t\t\tlet point = {};\n\n\t\t\tif (!nodes[hit.pcIndex]) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet node = nodes[hit.pcIndex];\n\t\t\tlet pc = node.sceneNode;\n\t\t\tlet geometry = node.geometryNode.geometry;\n\n\t\t\tfor(let attributeName in geometry.attributes){\n\t\t\t\tlet attribute = geometry.attributes[attributeName];\n\n\t\t\t\tif (attributeName === 'position') {\n\t\t\t\t\tlet x = attribute.array[3 * hit.pIndex + 0];\n\t\t\t\t\tlet y = attribute.array[3 * hit.pIndex + 1];\n\t\t\t\t\tlet z = attribute.array[3 * hit.pIndex + 2];\n\n\t\t\t\t\tlet position = new THREE.Vector3(x, y, z);\n\t\t\t\t\tposition.applyMatrix4(pc.matrixWorld);\n\n\t\t\t\t\tpoint[attributeName] = position;\n\t\t\t\t} else if (attributeName === 'indices') {\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet values = attribute.array.slice(attribute.itemSize * hit.pIndex, attribute.itemSize * (hit.pIndex + 1)) ;\n\n\t\t\t\t\tif(attribute.potree){\n\t\t\t\t\t\tconst {scale, offset} = attribute.potree;\n\t\t\t\t\t\tvalues = values.map(v => v / scale + offset);\n\t\t\t\t\t}\n\n\t\t\t\t\tpoint[attributeName] = values;\n\n\t\t\t\t\t//debugger;\n\t\t\t\t\t//if (values.itemSize === 1) {\n\t\t\t\t\t//\tpoint[attribute.name] = values.array[hit.pIndex];\n\t\t\t\t\t//} else {\n\t\t\t\t\t//\tlet value = [];\n\t\t\t\t\t//\tfor (let j = 0; j < values.itemSize; j++) {\n\t\t\t\t\t//\t\tvalue.push(values.array[values.itemSize * hit.pIndex + j]);\n\t\t\t\t\t//\t}\n\t\t\t\t\t//\tpoint[attribute.name] = value;\n\t\t\t\t\t//}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thit.point = point;\n\t\t}\n\n\t\tperformance.mark(\"pick-end\");\n\t\tperformance.measure(\"pick\", \"pick-start\", \"pick-end\");\n\n\t\tif(params.all){\n\t\t\treturn hits.map(hit => hit.point);\n\t\t}else{\n\t\t\tif(hits.length === 0){\n\t\t\t\treturn null;\n\t\t\t}else{\n\t\t\t\treturn hits[0].point;\n\t\t\t\t//let sorted = hits.sort( (a, b) => a.distanceToCenter - b.distanceToCenter);\n\n\t\t\t\t//return sorted[0].point;\n\t\t\t}\n\t\t}\n\n\t};\n\n\t* getFittedBoxGen(boxNode){\n\t\tlet start = performance.now();\n\n\t\tlet shrinkedLocalBounds = new THREE.Box3();\n\t\tlet worldToBox = boxNode.matrixWorld.clone().invert();\n\n\t\tfor(let node of this.visibleNodes){\n\t\t\tif(!node.sceneNode){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet buffer = node.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 objectToBox = new THREE.Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld);\n\n\t\t\tlet pos = new THREE.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\tshrinkedLocalBounds.expandByPoint(pos);\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\tyield;\n\t\t}\n\n\t\tlet fittedPosition = shrinkedLocalBounds.getCenter(new THREE.Vector3()).applyMatrix4(boxNode.matrixWorld);\n\n\t\tlet fitted = new THREE.Object3D();\n\t\tfitted.position.copy(fittedPosition);\n\t\tfitted.scale.copy(boxNode.scale);\n\t\tfitted.rotation.copy(boxNode.rotation);\n\n\t\tlet ds = new THREE.Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min);\n\t\tfitted.scale.multiply(ds);\n\n\t\tlet duration = performance.now() - start;\n\t\tconsole.log(\"duration: \", duration);\n\n\t\tyield fitted;\n\t}\n\n\tgetFittedBox(boxNode, maxLevel = Infinity){\n\n\t\tmaxLevel = Infinity;\n\n\t\tlet start = performance.now();\n\n\t\tlet shrinkedLocalBounds = new THREE.Box3();\n\t\tlet worldToBox = boxNode.matrixWorld.clone().invert();\n\n\t\tfor(let node of this.visibleNodes){\n\t\t\tif(!node.sceneNode || node.getLevel() > maxLevel){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet buffer = node.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 objectToBox = new THREE.Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld);\n\n\t\t\tlet pos = new THREE.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\tshrinkedLocalBounds.expandByPoint(pos);\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\tlet fittedPosition = shrinkedLocalBounds.getCenter(new THREE.Vector3()).applyMatrix4(boxNode.matrixWorld);\n\n\t\tlet fitted = new THREE.Object3D();\n\t\tfitted.position.copy(fittedPosition);\n\t\tfitted.scale.copy(boxNode.scale);\n\t\tfitted.rotation.copy(boxNode.rotation);\n\n\t\tlet ds = new THREE.Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min);\n\t\tfitted.scale.multiply(ds);\n\n\t\tlet duration = performance.now() - start;\n\t\tconsole.log(\"duration: \", duration);\n\n\t\treturn fitted;\n\t}\n\n\tget progress () {\n\t\treturn this.visibleNodes.length / this.visibleGeometry.length;\n\t}\n\n\tfind(name){\n\t\tlet node = null;\n\t\tfor(let char of name){\n\t\t\tif(char === \"r\"){\n\t\t\t\tnode = this.root;\n\t\t\t}else{\n\t\t\t\tnode = node.children[char];\n\t\t\t}\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tget visible(){\n\t\treturn this._visible;\n\t}\n\n\tset visible(value){\n\n\t\tif(value !== this._visible){\n\t\t\tthis._visible = value;\n\n\t\t\tthis.dispatchEvent({type: 'visibility_changed', pointcloud: this});\n\t\t}\n\n\t}\n\n}\n\n\n\n\n\n\n\n\n\n\n","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\n\nexport class Points {\n\t\n\tconstructor () {\n\t\tthis.boundingBox = new THREE.Box3();\n\t\tthis.numPoints = 0;\n\t\tthis.data = {};\n\t}\n\n\tadd (points) {\n\t\tlet currentSize = this.numPoints;\n\t\tlet additionalSize = points.numPoints;\n\t\tlet newSize = currentSize + additionalSize;\n\n\t\tlet thisAttributes = Object.keys(this.data);\n\t\tlet otherAttributes = Object.keys(points.data);\n\t\tlet attributes = new Set([...thisAttributes, ...otherAttributes]);\n\n\t\tfor (let attribute of attributes) {\n\t\t\tif (thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) {\n\t\t\t\t// attribute in both, merge\n\t\t\t\tlet Type = this.data[attribute].constructor;\n\t\t\t\tlet merged = new Type(this.data[attribute].length + points.data[attribute].length);\n\t\t\t\tmerged.set(this.data[attribute], 0);\n\t\t\t\tmerged.set(points.data[attribute], this.data[attribute].length);\n\t\t\t\tthis.data[attribute] = merged;\n\t\t\t} else if (thisAttributes.includes(attribute) && !otherAttributes.includes(attribute)) {\n\t\t\t\t// attribute only in this; take over this and expand to new size\n\t\t\t\tlet elementsPerPoint = this.data[attribute].length / this.numPoints;\n\t\t\t\tlet Type = this.data[attribute].constructor;\n\t\t\t\tlet expanded = new Type(elementsPerPoint * newSize);\n\t\t\t\texpanded.set(this.data[attribute], 0);\n\t\t\t\tthis.data[attribute] = expanded;\n\t\t\t} else if (!thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) {\n\t\t\t\t// attribute only in points to be added; take over new points and expand to new size\n\t\t\t\tlet elementsPerPoint = points.data[attribute].length / points.numPoints;\n\t\t\t\tlet Type = points.data[attribute].constructor;\n\t\t\t\tlet expanded = new Type(elementsPerPoint * newSize);\n\t\t\t\texpanded.set(points.data[attribute], elementsPerPoint * currentSize);\n\t\t\t\tthis.data[attribute] = expanded;\n\t\t\t}\n\t\t}\n\n\t\tthis.numPoints = newSize;\n\n\t\tthis.boundingBox.union(points.boundingBox);\n\t}\n}","/**\n *\n * code adapted from three.js BoxHelper.js\n * https://github.com/mrdoob/three.js/blob/dev/src/helpers/BoxHelper.js\n *\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n * @author mschuetz / http://potree.org\n */\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class Box3Helper extends THREE.LineSegments {\n\tconstructor (box, color) {\n\t\tif (color === undefined) color = 0xffff00;\n\n\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\tlet positions = new Float32Array([\n\t\t\tbox.min.x, box.min.y, box.min.z,\n\t\t\tbox.max.x, box.min.y, box.min.z,\n\t\t\tbox.max.x, box.min.y, box.max.z,\n\t\t\tbox.min.x, box.min.y, box.max.z,\n\t\t\tbox.min.x, box.max.y, box.min.z,\n\t\t\tbox.max.x, box.max.y, box.min.z,\n\t\t\tbox.max.x, box.max.y, box.max.z,\n\t\t\tbox.min.x, box.max.y, box.max.z\n\t\t]);\n\n\t\tlet geometry = new THREE.BufferGeometry();\n\t\tgeometry.setIndex(new THREE.BufferAttribute(indices, 1));\n\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n\n\t\tlet material = new THREE.LineBasicMaterial({ color: color });\n\n\t\tsuper(geometry, material);\n\t}\n}\n","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport {ClipTask, ClipMethod} from \"./defines.js\";\nimport {Box3Helper} from \"./utils/Box3Helper.js\";\n\nexport function updatePointClouds(pointclouds, camera, renderer){\n\n\tfor (let pointcloud of pointclouds) {\n\t\tlet start = performance.now();\n\n\t\tfor (let profileRequest of pointcloud.profileRequests) {\n\t\t\tprofileRequest.update();\n\n\t\t\tlet duration = performance.now() - start;\n\t\t\tif(duration > 5){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet duration = performance.now() - start;\n\t}\n\n\tlet result = updateVisibility(pointclouds, camera, renderer);\n\n\tfor (let pointcloud of pointclouds) {\n\t\tpointcloud.updateMaterial(pointcloud.material, pointcloud.visibleNodes, camera, renderer);\n\t\tpointcloud.updateVisibleBounds();\n\t}\n\n\texports.lru.freeMemory();\n\n\treturn result;\n};\n\n\n\nexport function updateVisibilityStructures(pointclouds, camera, renderer) {\n\tlet frustums = [];\n\tlet camObjPositions = [];\n\tlet priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; });\n\n\tfor (let i = 0; i < pointclouds.length; i++) {\n\t\tlet pointcloud = pointclouds[i];\n\n\t\tif (!pointcloud.initialized()) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tpointcloud.numVisibleNodes = 0;\n\t\tpointcloud.numVisiblePoints = 0;\n\t\tpointcloud.deepestVisibleLevel = 0;\n\t\tpointcloud.visibleNodes = [];\n\t\tpointcloud.visibleGeometry = [];\n\n\t\t// frustum in object space\n\t\tcamera.updateMatrixWorld();\n\t\tlet frustum = new THREE.Frustum();\n\t\tlet viewI = camera.matrixWorldInverse;\n\t\tlet world = pointcloud.matrixWorld;\n\t\t\n\t\t// use close near plane for frustum intersection\n\t\tlet frustumCam = camera.clone();\n\t\tfrustumCam.near = Math.min(camera.near, 0.1);\n\t\tfrustumCam.updateProjectionMatrix();\n\t\tlet proj = camera.projectionMatrix;\n\n\t\tlet fm = new THREE.Matrix4().multiply(proj).multiply(viewI).multiply(world);\n\t\tfrustum.setFromProjectionMatrix(fm);\n\t\tfrustums.push(frustum);\n\n\t\t// camera position in object space\n\t\tlet view = camera.matrixWorld;\n\t\tlet worldI = world.clone().invert();\n\t\tlet camMatrixObject = new THREE.Matrix4().multiply(worldI).multiply(view);\n\t\tlet camObjPos = new THREE.Vector3().setFromMatrixPosition(camMatrixObject);\n\t\tcamObjPositions.push(camObjPos);\n\n\t\tif (pointcloud.visible && pointcloud.root !== null) {\n\t\t\tpriorityQueue.push({pointcloud: i, node: pointcloud.root, weight: Number.MAX_VALUE});\n\t\t}\n\n\t\t// hide all previously visible nodes\n\t\t// if(pointcloud.root instanceof PointCloudOctreeNode){\n\t\t//\tpointcloud.hideDescendants(pointcloud.root.sceneNode);\n\t\t// }\n\t\tif (pointcloud.root.isTreeNode()) {\n\t\t\tpointcloud.hideDescendants(pointcloud.root.sceneNode);\n\t\t}\n\n\t\tfor (let j = 0; j < pointcloud.boundingBoxNodes.length; j++) {\n\t\t\tpointcloud.boundingBoxNodes[j].visible = false;\n\t\t}\n\t}\n\n\treturn {\n\t\t'frustums': frustums,\n\t\t'camObjPositions': camObjPositions,\n\t\t'priorityQueue': priorityQueue\n\t};\n};\n\n\nexport function updateVisibility(pointclouds, camera, renderer){\n\n\tlet numVisibleNodes = 0;\n\tlet numVisiblePoints = 0;\n\n\tlet numVisiblePointsInPointclouds = new Map(pointclouds.map(pc => [pc, 0]));\n\n\tlet visibleNodes = [];\n\tlet visibleGeometry = [];\n\tlet unloadedGeometry = [];\n\n\tlet lowestSpacing = Infinity;\n\n\t// calculate object space frustum and cam pos and setup priority queue\n\tlet s = updateVisibilityStructures(pointclouds, camera, renderer);\n\tlet frustums = s.frustums;\n\tlet camObjPositions = s.camObjPositions;\n\tlet priorityQueue = s.priorityQueue;\n\n\tlet loadedToGPUThisFrame = 0;\n\t\n\tlet domWidth = renderer.domElement.clientWidth;\n\tlet domHeight = renderer.domElement.clientHeight;\n\n\t// check if pointcloud has been transformed\n\t// some code will only be executed if changes have been detected\n\tif(!Potree._pointcloudTransformVersion){\n\t\tPotree._pointcloudTransformVersion = new Map();\n\t}\n\tlet pointcloudTransformVersion = Potree._pointcloudTransformVersion;\n\tfor(let pointcloud of pointclouds){\n\n\t\tif(!pointcloud.visible){\n\t\t\tcontinue;\n\t\t}\n\n\t\tpointcloud.updateMatrixWorld();\n\n\t\tif(!pointcloudTransformVersion.has(pointcloud)){\n\t\t\tpointcloudTransformVersion.set(pointcloud, {number: 0, transform: pointcloud.matrixWorld.clone()});\n\t\t}else{\n\t\t\tlet version = pointcloudTransformVersion.get(pointcloud);\n\n\t\t\tif(!version.transform.equals(pointcloud.matrixWorld)){\n\t\t\t\tversion.number++;\n\t\t\t\tversion.transform.copy(pointcloud.matrixWorld);\n\n\t\t\t\tpointcloud.dispatchEvent({\n\t\t\t\t\ttype: \"transformation_changed\",\n\t\t\t\t\ttarget: pointcloud\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\twhile (priorityQueue.size() > 0) {\n\t\tlet element = priorityQueue.pop();\n\t\tlet node = element.node;\n\t\tlet parent = element.parent;\n\t\tlet pointcloud = pointclouds[element.pointcloud];\n\n\t\t// { // restrict to certain nodes for debugging\n\t\t//\tlet allowedNodes = [\"r\", \"r0\", \"r4\"];\n\t\t//\tif(!allowedNodes.includes(node.name)){\n\t\t//\t\tcontinue;\n\t\t//\t}\n\t\t// }\n\n\t\tlet box = node.getBoundingBox();\n\t\tlet frustum = frustums[element.pointcloud];\n\t\tlet camObjPos = camObjPositions[element.pointcloud];\n\n\t\tlet insideFrustum = frustum.intersectsBox(box);\n\t\tlet maxLevel = pointcloud.maxLevel || Infinity;\n\t\tlet level = node.getLevel();\n\t\tlet visible = insideFrustum;\n\t\tvisible = visible && !(numVisiblePoints + node.getNumPoints() > Potree.pointBudget);\n\t\tvisible = visible && !(numVisiblePointsInPointclouds.get(pointcloud) + node.getNumPoints() > pointcloud.pointBudget);\n\t\tvisible = visible && level < maxLevel;\n\t\tvisible = visible || node.getLevel() <= 2;\n\n\t\tlet clipBoxes = pointcloud.material.clipBoxes;\n\t\tif(true && clipBoxes.length > 0){\n\n\t\t\t//node.debug = false;\n\n\t\t\tlet numIntersecting = 0;\n\t\t\tlet numIntersectionVolumes = 0;\n\n\t\t\t//if(node.name === \"r60\"){\n\t\t\t//\tvar a = 10;\n\t\t\t//}\n\n\t\t\tfor(let clipBox of clipBoxes){\n\n\t\t\t\tlet pcWorldInverse = pointcloud.matrixWorld.clone().invert();\n\t\t\t\tlet toPCObject = pcWorldInverse.multiply(clipBox.box.matrixWorld);\n\n\t\t\t\tlet px = new THREE.Vector3(+0.5, 0, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\tlet nx = new THREE.Vector3(-0.5, 0, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\tlet py = new THREE.Vector3(0, +0.5, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\tlet ny = new THREE.Vector3(0, -0.5, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\tlet pz = new THREE.Vector3(0, 0, +0.5).applyMatrix4(pcWorldInverse);\n\t\t\t\tlet nz = new THREE.Vector3(0, 0, -0.5).applyMatrix4(pcWorldInverse);\n\n\t\t\t\tlet pxN = new THREE.Vector3().subVectors(nx, px).normalize();\n\t\t\t\tlet nxN = pxN.clone().multiplyScalar(-1);\n\t\t\t\tlet pyN = new THREE.Vector3().subVectors(ny, py).normalize();\n\t\t\t\tlet nyN = pyN.clone().multiplyScalar(-1);\n\t\t\t\tlet pzN = new THREE.Vector3().subVectors(nz, pz).normalize();\n\t\t\t\tlet nzN = pzN.clone().multiplyScalar(-1);\n\n\t\t\t\tlet pxPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(pxN, px);\n\t\t\t\tlet nxPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(nxN, nx);\n\t\t\t\tlet pyPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(pyN, py);\n\t\t\t\tlet nyPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(nyN, ny);\n\t\t\t\tlet pzPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(pzN, pz);\n\t\t\t\tlet nzPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(nzN, nz);\n\n\t\t\t\t//if(window.debugdraw !== undefined && window.debugdraw === true && node.name === \"r60\"){\n\n\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, pxPlane, 1, 0xFF0000);\n\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, nxPlane, 1, 0x990000);\n\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, pyPlane, 1, 0x00FF00);\n\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, nyPlane, 1, 0x009900);\n\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, pzPlane, 1, 0x0000FF);\n\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, nzPlane, 1, 0x000099);\n\n\t\t\t\t//\tPotree.utils.debugBox(viewer.scene.scene, box, new THREE.Matrix4(), 0x00FF00);\n\t\t\t\t//\tPotree.utils.debugBox(viewer.scene.scene, box, pointcloud.matrixWorld, 0xFF0000);\n\t\t\t\t//\tPotree.utils.debugBox(viewer.scene.scene, clipBox.box.boundingBox, clipBox.box.matrixWorld, 0xFF0000);\n\n\t\t\t\t//\twindow.debugdraw = false;\n\t\t\t\t//}\n\n\t\t\t\tlet frustum = new THREE.Frustum(pxPlane, nxPlane, pyPlane, nyPlane, pzPlane, nzPlane);\n\t\t\t\tlet intersects = frustum.intersectsBox(box);\n\n\t\t\t\tif(intersects){\n\t\t\t\t\tnumIntersecting++;\n\t\t\t\t}\n\t\t\t\tnumIntersectionVolumes++;\n\t\t\t}\n\n\t\t\tlet insideAny = numIntersecting > 0;\n\t\t\tlet insideAll = numIntersecting === numIntersectionVolumes;\n\n\t\t\tif(pointcloud.material.clipTask === ClipTask.SHOW_INSIDE){\n\t\t\t\tif(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && insideAny){\n\t\t\t\t\t//node.debug = true\n\t\t\t\t}else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && insideAll){\n\t\t\t\t\t//node.debug = true;\n\t\t\t\t}else{\n\t\t\t\t\tvisible = false;\n\t\t\t\t}\n\t\t\t} else if(pointcloud.material.clipTask === ClipTask.SHOW_OUTSIDE){\n\t\t\t\t//if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && !insideAny){\n\t\t\t\t//\t//visible = true;\n\t\t\t\t//\tlet a = 10;\n\t\t\t\t//}else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && !insideAll){\n\t\t\t\t//\t//visible = true;\n\t\t\t\t//\tlet a = 20;\n\t\t\t\t//}else{\n\t\t\t\t//\tvisible = false;\n\t\t\t\t//}\n\t\t\t}\n\t\t\t\n\n\t\t}\n\n\t\t// visible = [\"r\", \"r0\", \"r06\", \"r060\"].includes(node.name);\n\t\t// visible = [\"r\"].includes(node.name);\n\n\t\tif (node.spacing) {\n\t\t\tlowestSpacing = Math.min(lowestSpacing, node.spacing);\n\t\t} else if (node.geometryNode && node.geometryNode.spacing) {\n\t\t\tlowestSpacing = Math.min(lowestSpacing, node.geometryNode.spacing);\n\t\t}\n\n\t\tif (numVisiblePoints + node.getNumPoints() > Potree.pointBudget) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (!visible) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: not used, same as the declaration?\n\t\t// numVisibleNodes++;\n\t\tnumVisiblePoints += node.getNumPoints();\n\t\tlet numVisiblePointsInPointcloud = numVisiblePointsInPointclouds.get(pointcloud);\n\t\tnumVisiblePointsInPointclouds.set(pointcloud, numVisiblePointsInPointcloud + node.getNumPoints());\n\n\t\tpointcloud.numVisibleNodes++;\n\t\tpointcloud.numVisiblePoints += node.getNumPoints();\n\n\t\tif (node.isGeometryNode() && (!parent || parent.isTreeNode())) {\n\t\t\tif (node.isLoaded() && loadedToGPUThisFrame < 2) {\n\t\t\t\tnode = pointcloud.toTreeNode(node, parent);\n\t\t\t\tloadedToGPUThisFrame++;\n\t\t\t} else {\n\t\t\t\tunloadedGeometry.push(node);\n\t\t\t\tvisibleGeometry.push(node);\n\t\t\t}\n\t\t}\n\n\t\tif (node.isTreeNode()) {\n\t\t\texports.lru.touch(node.geometryNode);\n\t\t\tnode.sceneNode.visible = true;\n\t\t\tnode.sceneNode.material = pointcloud.material;\n\n\t\t\tvisibleNodes.push(node);\n\t\t\tpointcloud.visibleNodes.push(node);\n\n\t\t\tif(node._transformVersion === undefined){\n\t\t\t\tnode._transformVersion = -1;\n\t\t\t}\n\t\t\tlet transformVersion = pointcloudTransformVersion.get(pointcloud);\n\t\t\tif(node._transformVersion !== transformVersion.number){\n\t\t\t\tnode.sceneNode.updateMatrix();\n\t\t\t\tnode.sceneNode.matrixWorld.multiplyMatrices(pointcloud.matrixWorld, node.sceneNode.matrix);\t\n\t\t\t\tnode._transformVersion = transformVersion.number;\n\t\t\t}\n\n\t\t\tif (pointcloud.showBoundingBox && !node.boundingBoxNode && node.getBoundingBox) {\n\t\t\t\tlet boxHelper = new Box3Helper(node.getBoundingBox());\n\t\t\t\tboxHelper.matrixAutoUpdate = false;\n\t\t\t\tpointcloud.boundingBoxNodes.push(boxHelper);\n\t\t\t\tnode.boundingBoxNode = boxHelper;\n\t\t\t\tnode.boundingBoxNode.matrix.copy(pointcloud.matrixWorld);\n\t\t\t} else if (pointcloud.showBoundingBox) {\n\t\t\t\tnode.boundingBoxNode.visible = true;\n\t\t\t\tnode.boundingBoxNode.matrix.copy(pointcloud.matrixWorld);\n\t\t\t} else if (!pointcloud.showBoundingBox && node.boundingBoxNode) {\n\t\t\t\tnode.boundingBoxNode.visible = false;\n\t\t\t}\n\n\t\t\t// if(node.boundingBoxNode !== undefined && exports.debug.allowedNodes !== undefined){\n\t\t\t// \tif(!exports.debug.allowedNodes.includes(node.name)){\n\t\t\t// \t\tnode.boundingBoxNode.visible = false;\n\t\t\t// \t}\n\t\t\t// }\n\t\t}\n\n\t\t// add child nodes to priorityQueue\n\t\tlet children = node.getChildren();\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tlet child = children[i];\n\n\t\t\tlet weight = 0; \n\t\t\tif(camera.isPerspectiveCamera){\n\t\t\t\tlet sphere = child.getBoundingSphere();\n\t\t\t\tlet center = sphere.center;\n\t\t\t\t//let distance = sphere.center.distanceTo(camObjPos);\n\t\t\t\t\n\t\t\t\tlet dx = camObjPos.x - center.x;\n\t\t\t\tlet dy = camObjPos.y - center.y;\n\t\t\t\tlet dz = camObjPos.z - center.z;\n\t\t\t\t\n\t\t\t\tlet dd = dx * dx + dy * dy + dz * dz;\n\t\t\t\tlet distance = Math.sqrt(dd);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tlet radius = sphere.radius;\n\t\t\t\t\n\t\t\t\tlet fov = (camera.fov * Math.PI) / 180;\n\t\t\t\tlet slope = Math.tan(fov / 2);\n\t\t\t\tlet projFactor = (0.5 * domHeight) / (slope * distance);\n\t\t\t\tlet screenPixelRadius = radius * projFactor;\n\t\t\t\t\n\t\t\t\tif(screenPixelRadius < pointcloud.minimumNodePixelSize){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tweight = screenPixelRadius;\n\n\t\t\t\tif(distance - radius < 0){\n\t\t\t\t\tweight = Number.MAX_VALUE;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// TODO ortho visibility\n\t\t\t\tlet bb = child.getBoundingBox();\t\t\t\t\n\t\t\t\tlet distance = child.getBoundingSphere().center.distanceTo(camObjPos);\n\t\t\t\tlet diagonal = bb.max.clone().sub(bb.min).length();\n\t\t\t\t//weight = diagonal / distance;\n\n\t\t\t\tweight = diagonal;\n\t\t\t}\n\n\t\t\tpriorityQueue.push({pointcloud: element.pointcloud, node: child, parent: node, weight: weight});\n\t\t}\n\t}// end priority queue loop\n\n\t{ // update DEM\n\t\tlet maxDEMLevel = 4;\n\t\tlet candidates = pointclouds\n\t\t\t.filter(p => (p.generateDEM && p.dem instanceof Potree.DEM));\n\t\tfor (let pointcloud of candidates) {\n\t\t\tlet updatingNodes = pointcloud.visibleNodes.filter(n => n.getLevel() <= maxDEMLevel);\n\t\t\tpointcloud.dem.update(updatingNodes);\n\t\t}\n\t}\n\n\tfor (let i = 0; i < Math.min(Potree.maxNodesLoading, unloadedGeometry.length); i++) {\n\t\tunloadedGeometry[i].load();\n\t}\n\n\treturn {\n\t\tvisibleNodes: visibleNodes,\n\t\tnumVisiblePoints: numVisiblePoints,\n\t\tlowestSpacing: lowestSpacing\n\t};\n};\n\n","\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {PointCloudTree, PointCloudTreeNode} from \"../PointCloudTree.js\";\nimport {PointCloudMaterial} from \"../materials/PointCloudMaterial.js\";\nimport {PointSizeType, ClipTask, TreeType} from \"../defines.js\";\nimport {Utils} from \"../utils.js\";\n\n\n\nexport class PointCloudArena4DNode extends PointCloudTreeNode {\n\tconstructor () {\n\t\tsuper();\n\n\t\tthis.left = null;\n\t\tthis.right = null;\n\t\tthis.sceneNode = null;\n\t\tthis.kdtree = null;\n\t}\n\n\tgetNumPoints () {\n\t\treturn this.geometryNode.numPoints;\n\t}\n\n\tisLoaded () {\n\t\treturn true;\n\t}\n\n\tisTreeNode () {\n\t\treturn true;\n\t}\n\n\tisGeometryNode () {\n\t\treturn false;\n\t}\n\n\tgetLevel () {\n\t\treturn this.geometryNode.level;\n\t}\n\n\tgetBoundingSphere () {\n\t\treturn this.geometryNode.boundingSphere;\n\t}\n\n\tgetBoundingBox () {\n\t\treturn this.geometryNode.boundingBox;\n\t}\n\n\ttoTreeNode (child) {\n\t\tlet geometryNode = null;\n\n\t\tif (this.left === child) {\n\t\t\tgeometryNode = this.left;\n\t\t} else if (this.right === child) {\n\t\t\tgeometryNode = this.right;\n\t\t}\n\n\t\tif (!geometryNode.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet node = new PointCloudArena4DNode();\n\t\tlet sceneNode = THREE.PointCloud(geometryNode.geometry, this.kdtree.material);\n\t\tsceneNode.visible = false;\n\n\t\tnode.kdtree = this.kdtree;\n\t\tnode.geometryNode = geometryNode;\n\t\tnode.sceneNode = sceneNode;\n\t\tnode.parent = this;\n\t\tnode.left = this.geometryNode.left;\n\t\tnode.right = this.geometryNode.right;\n\t}\n\n\tgetChildren () {\n\t\tlet children = [];\n\n\t\tif (this.left) {\n\t\t\tchildren.push(this.left);\n\t\t}\n\n\t\tif (this.right) {\n\t\t\tchildren.push(this.right);\n\t\t}\n\n\t\treturn children;\n\t}\n};\n\nexport class PointCloudArena4D extends PointCloudTree{\n\tconstructor (geometry) {\n\t\tsuper();\n\n\t\tthis.root = null;\n\t\tif (geometry.root) {\n\t\t\tthis.root = geometry.root;\n\t\t} else {\n\t\t\tgeometry.addEventListener('hierarchy_loaded', () => {\n\t\t\t\tthis.root = geometry.root;\n\t\t\t});\n\t\t}\n\n\t\tthis.visiblePointsTarget = 2 * 1000 * 1000;\n\t\tthis.minimumNodePixelSize = 150;\n\n\t\tthis.position.sub(geometry.offset);\n\t\tthis.updateMatrix();\n\n\t\tthis.numVisibleNodes = 0;\n\t\tthis.numVisiblePoints = 0;\n\n\t\tthis.boundingBoxNodes = [];\n\t\tthis.loadQueue = [];\n\t\tthis.visibleNodes = [];\n\n\t\tthis.pcoGeometry = geometry;\n\t\tthis.boundingBox = this.pcoGeometry.boundingBox;\n\t\tthis.boundingSphere = this.pcoGeometry.boundingSphere;\n\t\tthis.material = new PointCloudMaterial({vertexColors: THREE.VertexColors, size: 0.05, treeType: TreeType.KDTREE});\n\t\tthis.material.sizeType = PointSizeType.ATTENUATED;\n\t\tthis.material.size = 0.05;\n\t\tthis.profileRequests = [];\n\t\tthis.name = '';\n\t}\n\n\tgetBoundingBoxWorld () {\n\t\tthis.updateMatrixWorld(true);\n\t\tlet box = this.boundingBox;\n\t\tlet transform = this.matrixWorld;\n\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\n\t\treturn tBox;\n\t};\n\n\tsetName (name) {\n\t\tif (this.name !== name) {\n\t\t\tthis.name = name;\n\t\t\tthis.dispatchEvent({type: 'name_changed', name: name, pointcloud: this});\n\t\t}\n\t}\n\n\tgetName () {\n\t\treturn this.name;\n\t}\n\n\tgetLevel () {\n\t\treturn this.level;\n\t}\n\n\ttoTreeNode (geometryNode, parent) {\n\t\tlet node = new PointCloudArena4DNode();\n\t\tlet sceneNode = new THREE.Points(geometryNode.geometry, this.material);\n\n\t\tsceneNode.frustumCulled = false;\n\t\tsceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => {\n\t\t\tif (material.program) {\n\t\t\t\t_this.getContext().useProgram(material.program.program);\n\n\t\t\t\tif (material.program.getUniforms().map.level) {\n\t\t\t\t\tlet level = geometryNode.getLevel();\n\t\t\t\t\tmaterial.uniforms.level.value = level;\n\t\t\t\t\tmaterial.program.getUniforms().map.level.setValue(_this.getContext(), level);\n\t\t\t\t}\n\n\t\t\t\tif (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) {\n\t\t\t\t\tlet vnStart = this.visibleNodeTextureOffsets.get(node);\n\t\t\t\t\tmaterial.uniforms.vnStart.value = vnStart;\n\t\t\t\t\tmaterial.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart);\n\t\t\t\t}\n\n\t\t\t\tif (material.program.getUniforms().map.pcIndex) {\n\t\t\t\t\tlet i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node);\n\t\t\t\t\tmaterial.uniforms.pcIndex.value = i;\n\t\t\t\t\tmaterial.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tnode.geometryNode = geometryNode;\n\t\tnode.sceneNode = sceneNode;\n\t\tnode.pointcloud = this;\n\t\tnode.left = geometryNode.left;\n\t\tnode.right = geometryNode.right;\n\n\t\tif (!parent) {\n\t\t\tthis.root = node;\n\t\t\tthis.add(sceneNode);\n\t\t} else {\n\t\t\tparent.sceneNode.add(sceneNode);\n\n\t\t\tif (parent.left === geometryNode) {\n\t\t\t\tparent.left = node;\n\t\t\t} else if (parent.right === geometryNode) {\n\t\t\t\tparent.right = node;\n\t\t\t}\n\t\t}\n\n\t\tlet disposeListener = function () {\n\t\t\tparent.sceneNode.remove(node.sceneNode);\n\n\t\t\tif (parent.left === node) {\n\t\t\t\tparent.left = geometryNode;\n\t\t\t} else if (parent.right === node) {\n\t\t\t\tparent.right = geometryNode;\n\t\t\t}\n\t\t};\n\t\tgeometryNode.oneTimeDisposeHandlers.push(disposeListener);\n\n\t\treturn node;\n\t}\n\n\tupdateMaterial (material, visibleNodes, camera, renderer) {\n\t\tmaterial.fov = camera.fov * (Math.PI / 180);\n\t\tmaterial.screenWidth = renderer.domElement.clientWidth;\n\t\tmaterial.screenHeight = renderer.domElement.clientHeight;\n\t\tmaterial.spacing = this.pcoGeometry.spacing;\n\t\tmaterial.near = camera.near;\n\t\tmaterial.far = camera.far;\n\n\t\t// reduce shader source updates by setting maxLevel slightly higher than actually necessary\n\t\tif (this.maxLevel > material.levels) {\n\t\t\tmaterial.levels = this.maxLevel + 2;\n\t\t}\n\n\t\t// material.uniforms.octreeSize.value = this.boundingBox.size().x;\n\t\tlet bbSize = this.boundingBox.getSize(new THREE.Vector3());\n\t\tmaterial.bbSize = [bbSize.x, bbSize.y, bbSize.z];\n\t}\n\n\tupdateVisibleBounds () {\n\n\t}\n\n\thideDescendants (object) {\n\t\tlet stack = [];\n\t\tfor (let i = 0; i < object.children.length; i++) {\n\t\t\tlet child = object.children[i];\n\t\t\tif (child.visible) {\n\t\t\t\tstack.push(child);\n\t\t\t}\n\t\t}\n\n\t\twhile (stack.length > 0) {\n\t\t\tlet child = stack.shift();\n\n\t\t\tchild.visible = false;\n\t\t\tif (child.boundingBoxNode) {\n\t\t\t\tchild.boundingBoxNode.visible = false;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < child.children.length; i++) {\n\t\t\t\tlet childOfChild = child.children[i];\n\t\t\t\tif (childOfChild.visible) {\n\t\t\t\t\tstack.push(childOfChild);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateMatrixWorld (force) {\n\t\t// node.matrixWorld.multiplyMatrices( node.parent.matrixWorld, node.matrix );\n\n\t\tif (this.matrixAutoUpdate === true) this.updateMatrix();\n\n\t\tif (this.matrixWorldNeedsUpdate === true || force === true) {\n\t\t\tif (this.parent === undefined) {\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}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\t\t}\n\t}\n\n\tnodesOnRay (nodes, ray) {\n\t\tlet nodesOnRay = [];\n\n\t\tlet _ray = ray.clone();\n\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\tlet node = nodes[i];\n\t\t\tlet sphere = node.getBoundingSphere().clone().applyMatrix4(node.sceneNode.matrixWorld);\n\t\t\t// TODO Unused: let box = node.getBoundingBox().clone().applyMatrix4(node.sceneNode.matrixWorld);\n\n\t\t\tif (_ray.intersectsSphere(sphere)) {\n\t\t\t\tnodesOnRay.push(node);\n\t\t\t}\n\t\t\t// if(_ray.isIntersectionBox(box)){\n\t\t\t//\tnodesOnRay.push(node);\n\t\t\t// }\n\t\t}\n\n\t\treturn nodesOnRay;\n\t}\n\n\tpick(viewer, camera, ray, params = {}){\n\n\t\tlet renderer = viewer.renderer;\n\t\tlet pRenderer = viewer.pRenderer;\n\n\t\tperformance.mark(\"pick-start\");\n\n\t\tlet getVal = (a, b) => a !== undefined ? a : b;\n\n\t\tlet pickWindowSize = getVal(params.pickWindowSize, 17);\n\t\tlet pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false);\n\n\t\tlet size = renderer.getSize(new THREE.Vector2());\n\n\t\tlet width = Math.ceil(getVal(params.width, size.width));\n\t\tlet height = Math.ceil(getVal(params.height, size.height));\n\n\t\tlet pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType);\n\t\tlet pointSize = getVal(params.pointSize, this.material.size);\n\n\t\tlet nodes = this.nodesOnRay(this.visibleNodes, ray);\n\n\t\tif (nodes.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!this.pickState) {\n\t\t\tlet scene = new THREE.Scene();\n\n\t\t\tlet material = new PointCloudMaterial();\n\t\t\tmaterial.activeAttributeName = \"indices\";\n\n\t\t\tlet renderTarget = new THREE.WebGLRenderTarget(\n\t\t\t\t1, 1,\n\t\t\t\t{ minFilter: THREE.LinearFilter,\n\t\t\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\t\t\tformat: THREE.RGBAFormat }\n\t\t\t);\n\n\t\t\tthis.pickState = {\n\t\t\t\trenderTarget: renderTarget,\n\t\t\t\tmaterial: material,\n\t\t\t\tscene: scene\n\t\t\t};\n\t\t};\n\n\t\tlet pickState = this.pickState;\n\t\tlet pickMaterial = pickState.material;\n\n\t\t{ // update pick material\n\t\t\tpickMaterial.pointSizeType = pointSizeType;\n\t\t\tpickMaterial.shape = this.material.shape;\n\n\t\t\tpickMaterial.size = pointSize;\n\t\t\tpickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value;\n\t\t\tpickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value;\n\t\t\tpickMaterial.classification = this.material.classification;\n\t\t\tif(params.pickClipped){\n\t\t\t\tpickMaterial.clipBoxes = this.material.clipBoxes;\n\t\t\t\tif(this.material.clipTask === ClipTask.HIGHLIGHT){\n\t\t\t\t\tpickMaterial.clipTask = ClipTask.NONE;\n\t\t\t\t}else{\n\t\t\t\t\tpickMaterial.clipTask = this.material.clipTask;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tpickMaterial.clipBoxes = [];\n\t\t\t}\n\t\t\t\n\t\t\tthis.updateMaterial(pickMaterial, nodes, camera, renderer);\n\t\t}\n\n\t\tpickState.renderTarget.setSize(width, height);\n\n\t\tlet pixelPos = new THREE.Vector2(params.x, params.y);\n\t\t\n\t\tlet gl = renderer.getContext();\n\t\tgl.enable(gl.SCISSOR_TEST);\n\t\tgl.scissor(\n\t\t\tparseInt(pixelPos.x - (pickWindowSize - 1) / 2),\n\t\t\tparseInt(pixelPos.y - (pickWindowSize - 1) / 2),\n\t\t\tparseInt(pickWindowSize), parseInt(pickWindowSize));\n\n\n\t\trenderer.state.buffers.depth.setTest(pickMaterial.depthTest);\n\t\trenderer.state.buffers.depth.setMask(pickMaterial.depthWrite);\n\t\trenderer.state.setBlending(THREE.NoBlending);\n\n\t\trenderer.clearTarget(pickState.renderTarget, true, true, true);\n\n\t\t{ // RENDER\n\t\t\trenderer.setRenderTarget(pickState.renderTarget);\n\t\t\tgl.clearColor(0, 0, 0, 0);\n\t\t\trenderer.clearTarget( pickState.renderTarget, true, true, true );\n\t\t\t\n\t\t\tlet tmp = this.material;\n\t\t\tthis.material = pickMaterial;\n\t\t\t\n\t\t\tpRenderer.renderOctree(this, nodes, camera, pickState.renderTarget);\n\t\t\t\n\t\t\tthis.material = tmp;\n\t\t}\n\n\t\tlet clamp = (number, min, max) => Math.min(Math.max(min, number), max);\n\n\t\tlet x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width));\n\t\tlet y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height));\n\t\tlet w = parseInt(Math.min(x + pickWindowSize, width) - x);\n\t\tlet h = parseInt(Math.min(y + pickWindowSize, height) - y);\n\n\t\tlet pixelCount = w * h;\n\t\tlet buffer = new Uint8Array(4 * pixelCount);\n\t\t\n\t\tgl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer); \n\t\t\n\t\trenderer.setRenderTarget(null);\n\t\trenderer.state.reset();\n\t\trenderer.setScissorTest(false);\n\t\tgl.disable(gl.SCISSOR_TEST);\n\t\t\n\t\tlet pixels = buffer;\n\t\tlet ibuffer = new Uint32Array(buffer.buffer);\n\n\t\t// find closest hit inside pixelWindow boundaries\n\t\tlet min = Number.MAX_VALUE;\n\t\tlet hits = [];\n\t\tfor (let u = 0; u < pickWindowSize; u++) {\n\t\t\tfor (let v = 0; v < pickWindowSize; v++) {\n\t\t\t\tlet offset = (u + v * pickWindowSize);\n\t\t\t\tlet distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2);\n\n\t\t\t\tlet pcIndex = pixels[4 * offset + 3];\n\t\t\t\tpixels[4 * offset + 3] = 0;\n\t\t\t\tlet pIndex = ibuffer[offset];\n\n\t\t\t\tif(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){\n\t\t\t\t\tlet hit = {\n\t\t\t\t\t\tpIndex: pIndex,\n\t\t\t\t\t\tpcIndex: pcIndex,\n\t\t\t\t\t\tdistanceToCenter: distance\n\t\t\t\t\t};\n\n\t\t\t\t\tif(params.all){\n\t\t\t\t\t\thits.push(hit);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(hits.length > 0){\n\t\t\t\t\t\t\tif(distance < hits[0].distanceToCenter){\n\t\t\t\t\t\t\t\thits[0] = hit;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\thits.push(hit);\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}\n\t\t\t}\n\t\t}\n\n\n\n\t\tfor(let hit of hits){\n\t\t\tlet point = {};\n\t\t\n\t\t\tif (!nodes[hit.pcIndex]) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\n\t\t\tlet node = nodes[hit.pcIndex];\n\t\t\tlet pc = node.sceneNode;\n\t\t\tlet geometry = node.geometryNode.geometry;\n\t\t\t\n\t\t\tfor(let attributeName in geometry.attributes){\n\t\t\t\tlet attribute = geometry.attributes[attributeName];\n\t\t\n\t\t\t\tif (attributeName === 'position') {\n\t\t\t\t\tlet x = attribute.array[3 * hit.pIndex + 0];\n\t\t\t\t\tlet y = attribute.array[3 * hit.pIndex + 1];\n\t\t\t\t\tlet z = attribute.array[3 * hit.pIndex + 2];\n\t\t\t\t\t\n\t\t\t\t\tlet position = new THREE.Vector3(x, y, z);\n\t\t\t\t\tposition.applyMatrix4(pc.matrixWorld);\n\t\t\n\t\t\t\t\tpoint[attributeName] = position;\n\t\t\t\t} else if (attributeName === 'indices') {\n\t\t\n\t\t\t\t} else {\n\t\t\t\t\t//if (values.itemSize === 1) {\n\t\t\t\t\t//\tpoint[attribute.name] = values.array[hit.pIndex];\n\t\t\t\t\t//} else {\n\t\t\t\t\t//\tlet value = [];\n\t\t\t\t\t//\tfor (let j = 0; j < values.itemSize; j++) {\n\t\t\t\t\t//\t\tvalue.push(values.array[values.itemSize * hit.pIndex + j]);\n\t\t\t\t\t//\t}\n\t\t\t\t\t//\tpoint[attribute.name] = value;\n\t\t\t\t\t//}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\n\t\t\thit.point = point;\n\t\t}\n\n\t\tperformance.mark(\"pick-end\");\n\t\tperformance.measure(\"pick\", \"pick-start\", \"pick-end\");\n\n\t\tif(params.all){\n\t\t\treturn hits.map(hit => hit.point);\n\t\t}else{\n\t\t\tif(hits.length === 0){\n\t\t\t\treturn null;\n\t\t\t}else{\n\t\t\t\treturn hits[0].point;\n\t\t\t}\n\t\t}\n\t}\n\n\tcomputeVisibilityTextureData(nodes){\n\n\t\tif(exports.measureTimings) performance.mark(\"computeVisibilityTextureData-start\");\n\n\t\tlet data = new Uint8Array(nodes.length * 3);\n\t\tlet visibleNodeTextureOffsets = new Map();\n\n\t\t// copy array\n\t\tnodes = nodes.slice();\n\n\t\t// sort by level and number\n\t\tlet sort = function (a, b) {\n\t\t\tlet la = a.geometryNode.level;\n\t\t\tlet lb = b.geometryNode.level;\n\t\t\tlet na = a.geometryNode.number;\n\t\t\tlet nb = b.geometryNode.number;\n\t\t\tif (la !== lb) return la - lb;\n\t\t\tif (na < nb) return -1;\n\t\t\tif (na > nb) return 1;\n\t\t\treturn 0;\n\t\t};\n\t\tnodes.sort(sort);\n\n\t\tlet visibleNodeNames = [];\n\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\tvisibleNodeNames.push(nodes[i].geometryNode.number);\n\t\t}\n\n\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\tlet node = nodes[i];\n\n\t\t\tvisibleNodeTextureOffsets.set(node, i);\n\n\t\t\tlet b1 = 0;\t// children\n\t\t\tlet b2 = 0;\t// offset to first child\n\t\t\tlet b3 = 0;\t// split\n\n\t\t\tif (node.geometryNode.left && visibleNodeNames.indexOf(node.geometryNode.left.number) > 0) {\n\t\t\t\tb1 += 1;\n\t\t\t\tb2 = visibleNodeNames.indexOf(node.geometryNode.left.number) - i;\n\t\t\t}\n\t\t\tif (node.geometryNode.right && visibleNodeNames.indexOf(node.geometryNode.right.number) > 0) {\n\t\t\t\tb1 += 2;\n\t\t\t\tb2 = (b2 === 0) ? visibleNodeNames.indexOf(node.geometryNode.right.number) - i : b2;\n\t\t\t}\n\n\t\t\tif (node.geometryNode.split === 'X') {\n\t\t\t\tb3 = 1;\n\t\t\t} else if (node.geometryNode.split === 'Y') {\n\t\t\t\tb3 = 2;\n\t\t\t} else if (node.geometryNode.split === 'Z') {\n\t\t\t\tb3 = 4;\n\t\t\t}\n\n\t\t\tdata[i * 3 + 0] = b1;\n\t\t\tdata[i * 3 + 1] = b2;\n\t\t\tdata[i * 3 + 2] = b3;\n\t\t}\n\n\t\tif(exports.measureTimings){\n\t\t\tperformance.mark(\"computeVisibilityTextureData-end\");\n\t\t\tperformance.measure(\"render.computeVisibilityTextureData\", \"computeVisibilityTextureData-start\", \"computeVisibilityTextureData-end\");\n\t\t}\n\n\t\treturn {\n\t\t\tdata: data,\n\t\t\toffsets: visibleNodeTextureOffsets\n\t\t};\n\t}\n\n\tget progress () {\n\t\tif (this.pcoGeometry.root) {\n\t\t\treturn exports.numNodesLoading > 0 ? 0 : 1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n};\n","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport {PointCloudTree} from \"./PointCloudTree.js\";\nimport {PointCloudOctreeNode} from \"./PointCloudOctree.js\";\nimport {PointCloudArena4DNode} from \"./arena4d/PointCloudArena4D.js\";\nimport {PointSizeType, ClipTask, ElevationGradientRepeat} from \"./defines.js\";\n\n// Copied from three.js: WebGLRenderer.js\nfunction paramThreeToGL(_gl, p) {\n\n\tlet extension;\n\n\tif (p === THREE.RepeatWrapping) return _gl.REPEAT;\n\tif (p === THREE.ClampToEdgeWrapping) return _gl.CLAMP_TO_EDGE;\n\tif (p === THREE.MirroredRepeatWrapping) return _gl.MIRRORED_REPEAT;\n\n\tif (p === THREE.NearestFilter) return _gl.NEAREST;\n\tif (p === THREE.NearestMipMapNearestFilter) return _gl.NEAREST_MIPMAP_NEAREST;\n\tif (p === THREE.NearestMipMapLinearFilter) return _gl.NEAREST_MIPMAP_LINEAR;\n\n\tif (p === THREE.LinearFilter) return _gl.LINEAR;\n\tif (p === THREE.LinearMipMapNearestFilter) return _gl.LINEAR_MIPMAP_NEAREST;\n\tif (p === THREE.LinearMipMapLinearFilter) return _gl.LINEAR_MIPMAP_LINEAR;\n\n\tif (p === THREE.UnsignedByteType) return _gl.UNSIGNED_BYTE;\n\tif (p === THREE.UnsignedShort4444Type) return _gl.UNSIGNED_SHORT_4_4_4_4;\n\tif (p === THREE.UnsignedShort5551Type) return _gl.UNSIGNED_SHORT_5_5_5_1;\n\tif (p === THREE.UnsignedShort565Type) return _gl.UNSIGNED_SHORT_5_6_5;\n\n\tif (p === THREE.ByteType) return _gl.BYTE;\n\tif (p === THREE.ShortType) return _gl.SHORT;\n\tif (p === THREE.UnsignedShortType) return _gl.UNSIGNED_SHORT;\n\tif (p === THREE.IntType) return _gl.INT;\n\tif (p === THREE.UnsignedIntType) return _gl.UNSIGNED_INT;\n\tif (p === THREE.FloatType) return _gl.FLOAT;\n\n\tif (p === THREE.HalfFloatType) {\n\n\t\textension = extensions.get('OES_texture_half_float');\n\n\t\tif (extension !== null) return extension.HALF_FLOAT_OES;\n\n\t}\n\n\tif (p === THREE.AlphaFormat) return _gl.ALPHA;\n\tif (p === THREE.RGBFormat) return _gl.RGB;\n\tif (p === THREE.RGBAFormat) return _gl.RGBA;\n\tif (p === THREE.LuminanceFormat) return _gl.LUMINANCE;\n\tif (p === THREE.LuminanceAlphaFormat) return _gl.LUMINANCE_ALPHA;\n\tif (p === THREE.DepthFormat) return _gl.DEPTH_COMPONENT;\n\tif (p === THREE.DepthStencilFormat) return _gl.DEPTH_STENCIL;\n\n\tif (p === THREE.AddEquation) return _gl.FUNC_ADD;\n\tif (p === THREE.SubtractEquation) return _gl.FUNC_SUBTRACT;\n\tif (p === THREE.ReverseSubtractEquation) return _gl.FUNC_REVERSE_SUBTRACT;\n\n\tif (p === THREE.ZeroFactor) return _gl.ZERO;\n\tif (p === THREE.OneFactor) return _gl.ONE;\n\tif (p === THREE.SrcColorFactor) return _gl.SRC_COLOR;\n\tif (p === THREE.OneMinusSrcColorFactor) return _gl.ONE_MINUS_SRC_COLOR;\n\tif (p === THREE.SrcAlphaFactor) return _gl.SRC_ALPHA;\n\tif (p === THREE.OneMinusSrcAlphaFactor) return _gl.ONE_MINUS_SRC_ALPHA;\n\tif (p === THREE.DstAlphaFactor) return _gl.DST_ALPHA;\n\tif (p === THREE.OneMinusDstAlphaFactor) return _gl.ONE_MINUS_DST_ALPHA;\n\n\tif (p === THREE.DstColorFactor) return _gl.DST_COLOR;\n\tif (p === THREE.OneMinusDstColorFactor) return _gl.ONE_MINUS_DST_COLOR;\n\tif (p === THREE.SrcAlphaSaturateFactor) return _gl.SRC_ALPHA_SATURATE;\n\n\tif (p === THREE.RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\tp === THREE.RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) {\n\n\t\textension = extensions.get('WEBGL_compressed_texture_s3tc');\n\n\t\tif (extension !== null) {\n\n\t\t\tif (p === THREE.RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\tif (p === THREE.RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\tif (p === THREE.RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\tif (p === THREE.RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t}\n\n\t}\n\n\tif (p === THREE.RGB_PVRTC_4BPPV1_Format || p === THREE.RGB_PVRTC_2BPPV1_Format ||\n\t\tp === THREE.RGBA_PVRTC_4BPPV1_Format || p === THREE.RGBA_PVRTC_2BPPV1_Format) {\n\n\t\textension = extensions.get('WEBGL_compressed_texture_pvrtc');\n\n\t\tif (extension !== null) {\n\n\t\t\tif (p === THREE.RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\tif (p === THREE.RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\tif (p === THREE.RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\tif (p === THREE.RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t}\n\n\t}\n\n\tif (p === THREE.RGB_ETC1_Format) {\n\n\t\textension = extensions.get('WEBGL_compressed_texture_etc1');\n\n\t\tif (extension !== null) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t}\n\n\tif (p === THREE.MinEquation || p === THREE.MaxEquation) {\n\n\t\textension = extensions.get('EXT_blend_minmax');\n\n\t\tif (extension !== null) {\n\n\t\t\tif (p === THREE.MinEquation) return extension.MIN_EXT;\n\t\t\tif (p === THREE.MaxEquation) return extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tif (p === UnsignedInt248Type) {\n\n\t\textension = extensions.get('WEBGL_depth_texture');\n\n\t\tif (extension !== null) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t}\n\n\treturn 0;\n\n};\n\nlet attributeLocations = {\n\t\"position\": {name: \"position\", location: 0},\n\t\"color\": {name: \"color\", location: 1},\n\t\"rgba\": {name: \"color\", location: 1},\n\t\"intensity\": {name: \"intensity\", location: 2},\n\t\"classification\": {name: \"classification\", location: 3},\n\t\"returnNumber\": {name: \"returnNumber\", location: 4},\n\t\"return number\": {name: \"returnNumber\", location: 4},\n\t\"returns\": {name: \"returnNumber\", location: 4},\n\t\"numberOfReturns\": {name: \"numberOfReturns\", location: 5},\n\t\"number of returns\": {name: \"numberOfReturns\", location: 5},\n\t\"pointSourceID\": {name: \"pointSourceID\", location: 6},\n\t\"source id\": {name: \"pointSourceID\", location: 6},\n\t\"point source id\": {name: \"pointSourceID\", location: 6},\n\t\"indices\": {name: \"indices\", location: 7},\n\t\"normal\": {name: \"normal\", location: 8},\n\t\"spacing\": {name: \"spacing\", location: 9},\n\t\"gps-time\": {name: \"gpsTime\", location: 10},\n\t\"aExtra\": {name: \"aExtra\", location: 11},\n};\n\nclass Shader {\n\n\tconstructor(gl, name, vsSource, fsSource) {\n\t\tthis.gl = gl;\n\t\tthis.name = name;\n\t\tthis.vsSource = vsSource;\n\t\tthis.fsSource = fsSource;\n\n\t\tthis.cache = new Map();\n\n\t\tthis.vs = null;\n\t\tthis.fs = null;\n\t\tthis.program = null;\n\n\t\tthis.uniformLocations = {};\n\t\tthis.attributeLocations = {};\n\t\tthis.uniformBlockIndices = {};\n\t\tthis.uniformBlocks = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.update(vsSource, fsSource);\n\t}\n\n\tupdate(vsSource, fsSource) {\n\t\tthis.vsSource = vsSource;\n\t\tthis.fsSource = fsSource;\n\n\t\tthis.linkProgram();\n\t}\n\n\tcompileShader(shader, source){\n\t\tlet gl = this.gl;\n\n\t\tgl.shaderSource(shader, source);\n\n\t\tgl.compileShader(shader);\n\n\t\tlet success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n\t\tif (!success) {\n\t\t\tlet info = gl.getShaderInfoLog(shader);\n\t\t\tlet numberedSource = source.split(\"\\n\").map((a, i) => `${i + 1}`.padEnd(5) + a).join(\"\\n\");\n\t\t\tthrow `could not compile shader ${this.name}: ${info}, \\n${numberedSource}`;\n\t\t}\n\t}\n\n\tlinkProgram() {\n\n\t\tconst tStart = performance.now();\n\n\t\tlet gl = this.gl;\n\n\t\tthis.uniformLocations = {};\n\t\tthis.attributeLocations = {};\n\t\tthis.uniforms = {};\n\n\t\tgl.useProgram(null);\n\n\t\tlet cached = this.cache.get(`${this.vsSource}, ${this.fsSource}`);\n\t\tif (cached) {\n\t\t\tthis.program = cached.program;\n\t\t\tthis.vs = cached.vs;\n\t\t\tthis.fs = cached.fs;\n\t\t\tthis.attributeLocations = cached.attributeLocations;\n\t\t\tthis.uniformLocations = cached.uniformLocations;\n\t\t\tthis.uniformBlocks = cached.uniformBlocks;\n\t\t\tthis.uniforms = cached.uniforms;\n\n\t\t\treturn;\n\t\t} else {\n\n\t\t\tthis.vs = gl.createShader(gl.VERTEX_SHADER);\n\t\t\tthis.fs = gl.createShader(gl.FRAGMENT_SHADER);\n\t\t\tthis.program = gl.createProgram();\n\n\t\t\tfor(let name of Object.keys(attributeLocations)){\n\t\t\t\tlet location = attributeLocations[name].location;\n\t\t\t\tlet glslName = attributeLocations[name].name;\n\t\t\t\tgl.bindAttribLocation(this.program, location, glslName);\n\t\t\t}\n\n\t\t\tthis.compileShader(this.vs, this.vsSource);\n\t\t\tthis.compileShader(this.fs, this.fsSource);\n\n\t\t\tlet program = this.program;\n\n\t\t\tgl.attachShader(program, this.vs);\n\t\t\tgl.attachShader(program, this.fs);\n\n\t\t\tgl.linkProgram(program);\n\n\t\t\tgl.detachShader(program, this.vs);\n\t\t\tgl.detachShader(program, this.fs);\n\n\t\t\tlet success = gl.getProgramParameter(program, gl.LINK_STATUS);\n\t\t\tif (!success) {\n\t\t\t\tlet info = gl.getProgramInfoLog(program);\n\t\t\t\tthrow `could not link program ${this.name}: ${info}`;\n\t\t\t}\n\n\t\t\t{ // attribute locations\n\t\t\t\tlet numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n\t\t\t\tfor (let i = 0; i < numAttributes; i++) {\n\t\t\t\t\tlet attribute = gl.getActiveAttrib(program, i);\n\n\t\t\t\t\tlet location = gl.getAttribLocation(program, attribute.name);\n\n\t\t\t\t\tthis.attributeLocations[attribute.name] = location;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // uniform locations\n\t\t\t\tlet numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n\n\t\t\t\tfor (let i = 0; i < numUniforms; i++) {\n\t\t\t\t\tlet uniform = gl.getActiveUniform(program, i);\n\n\t\t\t\t\tlet location = gl.getUniformLocation(program, uniform.name);\n\n\t\t\t\t\tthis.uniformLocations[uniform.name] = location;\n\t\t\t\t\tthis.uniforms[uniform.name] = {\n\t\t\t\t\t\tlocation: location,\n\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// uniform blocks\n\t\t\tif(gl instanceof WebGL2RenderingContext){ \n\t\t\t\tlet numBlocks = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n\n\t\t\t\tfor (let i = 0; i < numBlocks; i++) {\n\t\t\t\t\tlet blockName = gl.getActiveUniformBlockName(program, i);\n\n\t\t\t\t\tlet blockIndex = gl.getUniformBlockIndex(program, blockName);\n\n\t\t\t\t\tthis.uniformBlockIndices[blockName] = blockIndex;\n\n\t\t\t\t\tgl.uniformBlockBinding(program, blockIndex, blockIndex);\n\t\t\t\t\tlet dataSize = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE);\n\n\t\t\t\t\tlet uBuffer = gl.createBuffer();\t\n\t\t\t\t\tgl.bindBuffer(gl.UNIFORM_BUFFER, uBuffer);\n\t\t\t\t\tgl.bufferData(gl.UNIFORM_BUFFER, dataSize, gl.DYNAMIC_READ);\n\n\t\t\t\t\tgl.bindBufferBase(gl.UNIFORM_BUFFER, blockIndex, uBuffer);\n\n\t\t\t\t\tgl.bindBuffer(gl.UNIFORM_BUFFER, null);\n\n\t\t\t\t\tthis.uniformBlocks[blockName] = {\n\t\t\t\t\t\tname: blockName,\n\t\t\t\t\t\tindex: blockIndex,\n\t\t\t\t\t\tdataSize: dataSize,\n\t\t\t\t\t\tbuffer: uBuffer\n\t\t\t\t\t};\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet cached = {\n\t\t\t\tprogram: this.program,\n\t\t\t\tvs: this.vs,\n\t\t\t\tfs: this.fs,\n\t\t\t\tattributeLocations: this.attributeLocations,\n\t\t\t\tuniformLocations: this.uniformLocations,\n\t\t\t\tuniforms: this.uniforms,\n\t\t\t\tuniformBlocks: this.uniformBlocks,\n\t\t\t};\n\n\t\t\tthis.cache.set(`${this.vsSource}, ${this.fsSource}`, cached);\n\t\t}\n\n\t\tconst tEnd = performance.now();\n\t\tconst duration = tEnd - tStart;\n\n\t\tconsole.log(`shader compile duration: ${duration.toFixed(3)}`);\n\n\n\t}\n\n\tsetUniformMatrix4(name, value) {\n\t\tconst gl = this.gl;\n\t\tconst location = this.uniformLocations[name];\n\n\t\tif (location == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet tmp = new Float32Array(value.elements);\n\t\tgl.uniformMatrix4fv(location, false, tmp);\n\t}\n\n\tsetUniform1f(name, value) {\n\t\tconst gl = this.gl;\n\t\tconst uniform = this.uniforms[name];\n\n\t\tif (uniform === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(uniform.value === value){\n\t\t\treturn;\n\t\t}\n\n\t\tuniform.value = value;\n\n\t\tgl.uniform1f(uniform.location, value);\n\t}\n\n\tsetUniformBoolean(name, value) {\n\t\tconst gl = this.gl;\n\t\tconst uniform = this.uniforms[name];\n\n\t\tif (uniform === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(uniform.value === value){\n\t\t\treturn;\n\t\t}\n\n\t\tuniform.value = value;\n\n\t\tgl.uniform1i(uniform.location, value);\n\t}\n\n\tsetUniformTexture(name, value) {\n\t\tconst gl = this.gl;\n\t\tconst location = this.uniformLocations[name];\n\n\t\tif (location == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tgl.uniform1i(location, value);\n\t}\n\n\tsetUniform2f(name, value) {\n\t\tconst gl = this.gl;\n\t\tconst location = this.uniformLocations[name];\n\n\t\tif (location == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tgl.uniform2f(location, value[0], value[1]);\n\t}\n\n\tsetUniform3f(name, value) {\n\t\tconst gl = this.gl;\n\t\tconst location = this.uniformLocations[name];\n\n\t\tif (location == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tgl.uniform3f(location, value[0], value[1], value[2]);\n\t}\n\n\tsetUniform(name, value) {\n\n\t\tif (value.constructor === THREE.Matrix4) {\n\t\t\tthis.setUniformMatrix4(name, value);\n\t\t} else if (typeof value === \"number\") {\n\t\t\tthis.setUniform1f(name, value);\n\t\t} else if (typeof value === \"boolean\") {\n\t\t\tthis.setUniformBoolean(name, value);\n\t\t} else if (value instanceof WebGLTexture) {\n\t\t\tthis.setUniformTexture(name, value);\n\t\t} else if (value instanceof Array) {\n\n\t\t\tif (value.length === 2) {\n\t\t\t\tthis.setUniform2f(name, value);\n\t\t\t} else if (value.length === 3) {\n\t\t\t\tthis.setUniform3f(name, value);\n\t\t\t}\n\n\t\t} else {\n\t\t\tconsole.error(\"unhandled uniform type: \", name, value);\n\t\t}\n\n\t}\n\n\n\tsetUniform1i(name, value) {\n\t\tlet gl = this.gl;\n\t\tlet location = this.uniformLocations[name];\n\n\t\tif (location == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tgl.uniform1i(location, value);\n\t}\n\n};\n\nclass WebGLTexture {\n\n\tconstructor(gl, texture) {\n\t\tthis.gl = gl;\n\n\t\tthis.texture = texture;\n\t\tthis.id = gl.createTexture();\n\n\t\tthis.target = gl.TEXTURE_2D;\n\t\tthis.version = -1;\n\n\t\tthis.update(texture);\n\t}\n\n\tupdate() {\n\n\t\tif (!this.texture.image) {\n\t\t\tthis.version = this.texture.version;\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet gl = this.gl;\n\t\tlet texture = this.texture;\n\n\t\tif (this.version === texture.version) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.target = gl.TEXTURE_2D;\n\n\t\tgl.bindTexture(this.target, this.id);\n\n\t\tlet level = 0;\n\t\tlet internalFormat = paramThreeToGL(gl, texture.format);\n\t\tlet width = texture.image.width;\n\t\tlet height = texture.image.height;\n\t\tlet border = 0;\n\t\tlet srcFormat = internalFormat;\n\t\tlet srcType = paramThreeToGL(gl, texture.type);\n\t\tlet data;\n\n\t\tgl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY);\n\t\tgl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha);\n\t\tgl.pixelStorei(gl.UNPACK_ALIGNMENT, texture.unpackAlignment);\n\n\t\tif (texture instanceof THREE.DataTexture) {\n\t\t\tdata = texture.image.data;\n\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter));\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter));\n\n\t\t\tgl.texImage2D(this.target, level, internalFormat,\n\t\t\t\twidth, height, border, srcFormat, srcType,\n\t\t\t\tdata);\n\t\t} else if ((texture instanceof THREE.CanvasTexture) || (texture instanceof THREE.Texture)) {\n\t\t\tdata = texture.image;\n\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_S, paramThreeToGL(gl, texture.wrapS));\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_T, paramThreeToGL(gl, texture.wrapT));\n\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter));\n\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter));\n\n\t\t\tgl.texImage2D(this.target, level, internalFormat,\n\t\t\t\tinternalFormat, srcType, data);\n\n\t\t\tif (texture instanceof THREE.Texture) {gl.generateMipmap(gl.TEXTURE_2D);}\n\t\t}\n\n\t\tgl.bindTexture(this.target, null);\n\n\t\tthis.version = texture.version;\n\t}\n\n};\n\nclass WebGLBuffer {\n\n\tconstructor() {\n\t\tthis.numElements = 0;\n\t\tthis.vao = null;\n\t\tthis.vbos = new Map();\n\t}\n\n};\n\nexport class Renderer {\n\n\tconstructor(threeRenderer) {\n\t\tthis.threeRenderer = threeRenderer;\n\t\tthis.gl = this.threeRenderer.getContext();\n\n\t\tthis.buffers = new Map();\n\t\tthis.shaders = new Map();\n\t\tthis.textures = new Map();\n\n\t\tthis.glTypeMapping = new Map();\n\t\tthis.glTypeMapping.set(Float32Array, this.gl.FLOAT);\n\t\tthis.glTypeMapping.set(Uint8Array, this.gl.UNSIGNED_BYTE);\n\t\tthis.glTypeMapping.set(Uint16Array, this.gl.UNSIGNED_SHORT);\n\n\t\tthis.toggle = 0;\n\t}\n\n\tdeleteBuffer(geometry) {\n\n\t\tlet gl = this.gl;\n\t\tlet webglBuffer = this.buffers.get(geometry);\n\t\tif (webglBuffer != null) {\n\t\t\tfor (let attributeName in geometry.attributes) {\n\t\t\t\tgl.deleteBuffer(webglBuffer.vbos.get(attributeName).handle);\n\t\t\t}\n\t\t\tthis.buffers.delete(geometry);\n\t\t}\n\t}\n\n\tcreateBuffer(geometry){\n\t\tlet gl = this.gl;\n\t\tlet webglBuffer = new WebGLBuffer();\n\t\twebglBuffer.vao = gl.createVertexArray();\n\t\twebglBuffer.numElements = geometry.attributes.position.count;\n\n\t\tgl.bindVertexArray(webglBuffer.vao);\n\n\t\tfor(let attributeName in geometry.attributes){\n\t\t\tlet bufferAttribute = geometry.attributes[attributeName];\n\n\t\t\tlet vbo = gl.createBuffer();\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo);\n\t\t\tgl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW);\n\n\t\t\tlet normalized = bufferAttribute.normalized;\n\t\t\tlet type = this.glTypeMapping.get(bufferAttribute.array.constructor);\n\n\t\t\tif(attributeLocations[attributeName] === undefined){\n\t\t\t\t//attributeLocation = attributeLocations[\"aExtra\"];\n\t\t\t}else{\n\t\t\t\tlet attributeLocation = attributeLocations[attributeName].location;\n\n\t\t\t\tgl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0);\n\t\t\t\tgl.enableVertexAttribArray(attributeLocation);\n\t\t\t}\n\n\n\t\t\twebglBuffer.vbos.set(attributeName, {\n\t\t\t\thandle: vbo,\n\t\t\t\tname: attributeName,\n\t\t\t\tcount: bufferAttribute.count,\n\t\t\t\titemSize: bufferAttribute.itemSize,\n\t\t\t\ttype: geometry.attributes.position.array.constructor,\n\t\t\t\tversion: 0\n\t\t\t});\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\tgl.bindVertexArray(null);\n\n\t\tlet disposeHandler = (event) => {\n\t\t\tthis.deleteBuffer(geometry);\n\t\t\tgeometry.removeEventListener(\"dispose\", disposeHandler);\n\t\t};\n\t\tgeometry.addEventListener(\"dispose\", disposeHandler);\n\n\t\treturn webglBuffer;\n\t}\n\n\tupdateBuffer(geometry){\n\t\tlet gl = this.gl;\n\n\t\tlet webglBuffer = this.buffers.get(geometry);\n\n\t\tgl.bindVertexArray(webglBuffer.vao);\n\n\t\tfor(let attributeName in geometry.attributes){\n\t\t\tlet bufferAttribute = geometry.attributes[attributeName];\n\n\t\t\tlet normalized = bufferAttribute.normalized;\n\t\t\tlet type = this.glTypeMapping.get(bufferAttribute.array.constructor);\n\n\t\t\tlet vbo = null;\n\t\t\tif(!webglBuffer.vbos.has(attributeName)){\n\t\t\t\tvbo = gl.createBuffer();\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: bufferAttribute.version\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tvbo = webglBuffer.vbos.get(attributeName).handle;\n\t\t\t\twebglBuffer.vbos.get(attributeName).version = bufferAttribute.version;\n\t\t\t}\n\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo);\n\t\t\tgl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW);\n\n\t\t\tif(attributeLocations[attributeName] === undefined){\n\t\t\t\t//attributeLocation = attributeLocations[\"aExtra\"];\n\t\t\t}else{\n\t\t\t\tlet attributeLocation = attributeLocations[attributeName].location;\n\t\t\t\t\n\t\t\t\tgl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0);\n\t\t\t\tgl.enableVertexAttribArray(attributeLocation);\n\t\t\t}\n\t\t}\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\tgl.bindVertexArray(null);\n\t}\n\n\ttraverse(scene) {\n\n\t\tlet octrees = [];\n\n\t\tlet stack = [scene];\n\t\twhile (stack.length > 0) {\n\n\t\t\tlet node = stack.pop();\n\n\t\t\tif (node instanceof PointCloudTree) {\n\t\t\t\toctrees.push(node);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet visibleChildren = node.children.filter(c => c.visible);\n\t\t\tstack.push(...visibleChildren);\n\n\t\t}\n\n\t\tlet result = {\n\t\t\toctrees: octrees\n\t\t};\n\n\t\treturn result;\n\t}\n\n\n\n\trenderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params) {\n\n\t\tif (exports.measureTimings) performance.mark(\"renderNodes-start\");\n\n\t\tlet gl = this.gl;\n\n\t\tlet material = params.material ? params.material : octree.material;\n\t\tlet shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps;\n\t\tlet view = camera.matrixWorldInverse;\n\n\t\tif(params.viewOverride){\n\t\t\tview = params.viewOverride;\n\t\t}\n\n\t\tlet worldView = new THREE.Matrix4();\n\n\t\tlet mat4holder = new Float32Array(16);\n\n\t\tlet i = 0;\n\t\tfor (let node of nodes) {\n\n\t\t\tif(exports.debug.allowedNodes !== undefined){\n\t\t\t\tif(!exports.debug.allowedNodes.includes(node.name)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet world = node.sceneNode.matrixWorld;\n\t\t\tworldView.multiplyMatrices(view, world);\n\n\t\t\tif (visibilityTextureData) {\n\t\t\t\tlet vnStart = visibilityTextureData.offsets.get(node);\n\t\t\t\tshader.setUniform1f(\"uVNStart\", vnStart);\n\t\t\t}\n\n\n\t\t\tlet level = node.getLevel();\n\n\t\t\tif(node.debug){\n\t\t\t\tshader.setUniform(\"uDebug\", true);\n\t\t\t}else{\n\t\t\t\tshader.setUniform(\"uDebug\", false);\n\t\t\t}\n\n\t\t\t// let isLeaf = false;\n\t\t\t// if(node instanceof PointCloudOctreeNode){\n\t\t\t// \tisLeaf = Object.keys(node.children).length === 0;\n\t\t\t// }else if(node instanceof PointCloudArena4DNode){\n\t\t\t// \tisLeaf = node.geometryNode.isLeaf;\n\t\t\t// }\n\t\t\t// shader.setUniform(\"uIsLeafNode\", isLeaf);\n\n\t\t\t// let isLeaf = node.children.filter(n => n != null).length === 0;\n\t\t\t// if(!isLeaf){\n\t\t\t// \tcontinue;\n\t\t\t// }\n\n\n\t\t\t// TODO consider passing matrices in an array to avoid uniformMatrix4fv overhead\n\t\t\tconst lModel = shader.uniformLocations[\"modelMatrix\"];\n\t\t\tif (lModel) {\n\t\t\t\tmat4holder.set(world.elements);\n\t\t\t\tgl.uniformMatrix4fv(lModel, false, mat4holder);\n\t\t\t}\n\n\t\t\tconst lModelView = shader.uniformLocations[\"modelViewMatrix\"];\n\t\t\t//mat4holder.set(worldView.elements);\n\t\t\t// faster then set in chrome 63\n\t\t\tfor(let j = 0; j < 16; j++){\n\t\t\t\tmat4holder[j] = worldView.elements[j];\n\t\t\t}\n\t\t\tgl.uniformMatrix4fv(lModelView, false, mat4holder);\n\n\t\t\t{ // Clip Polygons\n\t\t\t\tif(material.clipPolygons && material.clipPolygons.length > 0){\n\n\t\t\t\t\tlet clipPolygonVCount = [];\n\t\t\t\t\tlet worldViewProjMatrices = [];\n\n\t\t\t\t\tfor(let clipPolygon of material.clipPolygons){\n\n\t\t\t\t\t\tlet view = clipPolygon.viewMatrix;\n\t\t\t\t\t\tlet proj = clipPolygon.projMatrix;\n\n\t\t\t\t\t\tlet worldViewProj = proj.clone().multiply(view).multiply(world);\n\n\t\t\t\t\t\tclipPolygonVCount.push(clipPolygon.markers.length);\n\t\t\t\t\t\tworldViewProjMatrices.push(worldViewProj);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet flattenedMatrices = [].concat(...worldViewProjMatrices.map(m => m.elements));\n\n\t\t\t\t\tlet flattenedVertices = new Array(8 * 3 * material.clipPolygons.length);\n\t\t\t\t\tfor(let i = 0; i < material.clipPolygons.length; i++){\n\t\t\t\t\t\tlet clipPolygon = material.clipPolygons[i];\n\t\t\t\t\t\tfor(let j = 0; j < clipPolygon.markers.length; j++){\n\t\t\t\t\t\t\tflattenedVertices[i * 24 + (j * 3 + 0)] = clipPolygon.markers[j].position.x;\n\t\t\t\t\t\t\tflattenedVertices[i * 24 + (j * 3 + 1)] = clipPolygon.markers[j].position.y;\n\t\t\t\t\t\t\tflattenedVertices[i * 24 + (j * 3 + 2)] = clipPolygon.markers[j].position.z;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst lClipPolygonVCount = shader.uniformLocations[\"uClipPolygonVCount[0]\"];\n\t\t\t\t\tgl.uniform1iv(lClipPolygonVCount, clipPolygonVCount);\n\n\t\t\t\t\tconst lClipPolygonVP = shader.uniformLocations[\"uClipPolygonWVP[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lClipPolygonVP, false, flattenedMatrices);\n\n\t\t\t\t\tconst lClipPolygons = shader.uniformLocations[\"uClipPolygonVertices[0]\"];\n\t\t\t\t\tgl.uniform3fv(lClipPolygons, flattenedVertices);\n\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t//shader.setUniformMatrix4(\"modelMatrix\", world);\n\t\t\t//shader.setUniformMatrix4(\"modelViewMatrix\", worldView);\n\t\t\tshader.setUniform1f(\"uLevel\", level);\n\t\t\tshader.setUniform1f(\"uNodeSpacing\", node.geometryNode.estimatedSpacing);\n\n\t\t\tshader.setUniform1f(\"uPCIndex\", i);\n\t\t\t// uBBSize\n\n\t\t\tif (shadowMaps.length > 0) {\n\n\t\t\t\tconst lShadowMap = shader.uniformLocations[\"uShadowMap[0]\"];\n\n\t\t\t\tshader.setUniform3f(\"uShadowColor\", material.uniforms.uShadowColor.value);\n\n\t\t\t\tlet bindingStart = 5;\n\t\t\t\tlet bindingPoints = new Array(shadowMaps.length).fill(bindingStart).map((a, i) => (a + i));\n\t\t\t\tgl.uniform1iv(lShadowMap, bindingPoints);\n\n\t\t\t\tfor (let i = 0; i < shadowMaps.length; i++) {\n\t\t\t\t\tlet shadowMap = shadowMaps[i];\n\t\t\t\t\tlet bindingPoint = bindingPoints[i];\n\t\t\t\t\tlet glTexture = this.threeRenderer.properties.get(shadowMap.target.texture).__webglTexture;\n\n\t\t\t\t\tgl.activeTexture(gl[`TEXTURE${bindingPoint}`]);\n\t\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, glTexture);\n\t\t\t\t}\n\n\t\t\t\t{\n\n\t\t\t\t\tlet worldViewMatrices = shadowMaps\n\t\t\t\t\t\t.map(sm => sm.camera.matrixWorldInverse)\n\t\t\t\t\t\t.map(view => new THREE.Matrix4().multiplyMatrices(view, world))\n\n\t\t\t\t\tlet flattenedMatrices = [].concat(...worldViewMatrices.map(c => c.elements));\n\t\t\t\t\tconst lWorldView = shader.uniformLocations[\"uShadowWorldView[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lWorldView, false, flattenedMatrices);\n\t\t\t\t}\n\n\t\t\t\t{\n\t\t\t\t\tlet flattenedMatrices = [].concat(...shadowMaps.map(sm => sm.camera.projectionMatrix.elements));\n\t\t\t\t\tconst lProj = shader.uniformLocations[\"uShadowProj[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lProj, false, flattenedMatrices);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst geometry = node.geometryNode.geometry;\n\n\t\t\tif(geometry.attributes[\"gps-time\"]){\n\t\t\t\tconst bufferAttribute = geometry.attributes[\"gps-time\"];\n\t\t\t\tconst attGPS = octree.getAttribute(\"gps-time\");\n\n\t\t\t\tlet initialRange = attGPS.initialRange;\n\t\t\t\tlet initialRangeSize = initialRange[1] - initialRange[0];\n\n\t\t\t\tlet globalRange = attGPS.range;\n\t\t\t\tlet globalRangeSize = globalRange[1] - globalRange[0];\n\n\t\t\t\tlet scale = initialRangeSize / globalRangeSize;\n\t\t\t\tlet offset = -(globalRange[0] - initialRange[0]) / initialRangeSize;\n\n\t\t\t\tscale = Number.isNaN(scale) ? 1 : scale;\n\t\t\t\toffset = Number.isNaN(offset) ? 0 : offset;\n\n\t\t\t\tshader.setUniform1f(\"uGpsScale\", scale);\n\t\t\t\tshader.setUniform1f(\"uGpsOffset\", offset);\n\t\t\t\t//shader.setUniform2f(\"uFilterGPSTimeClipRange\", [-Infinity, Infinity]);\n\n\t\t\t\tlet uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\t// let gpsCliPRangeMin = uFilterGPSTimeClipRange[0]\n\t\t\t\t// let gpsCliPRangeMax = uFilterGPSTimeClipRange[1]\n\t\t\t\t// shader.setUniform2f(\"uFilterGPSTimeClipRange\", [gpsCliPRangeMin, gpsCliPRangeMax]);\n\n\t\t\t\tlet normalizedClipRange = [\n\t\t\t\t\t(uFilterGPSTimeClipRange[0] - globalRange[0]) / globalRangeSize,\n\t\t\t\t\t(uFilterGPSTimeClipRange[1] - globalRange[0]) / globalRangeSize,\n\t\t\t\t];\n\n\t\t\t\tshader.setUniform2f(\"uFilterGPSTimeClipRange\", normalizedClipRange);\n\n\n\n\t\t\t\t// // ranges in full gps coordinate system\n\t\t\t\t// const globalRange = attGPS.range;\n\t\t\t\t// const bufferRange = bufferAttribute.potree.range;\n\n\t\t\t\t// // ranges in [0, 1]\n\t\t\t\t// // normalizedGlobalRange = [0, 1]\n\t\t\t\t// // normalizedBufferRange: norm buffer within norm global range e.g. [0.2, 0.8]\n\t\t\t\t// const globalWidth = globalRange[1] - globalRange[0];\n\t\t\t\t// const normalizedBufferRange = [\n\t\t\t\t// \t(bufferRange[0] - globalRange[0]) / globalWidth,\n\t\t\t\t// \t(bufferRange[1] - globalRange[0]) / globalWidth,\n\t\t\t\t// ];\n\n\t\t\t\t// shader.setUniform2f(\"uNormalizedGpsBufferRange\", normalizedBufferRange);\n\n\t\t\t\t// let uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\t// let gpsCliPRangeMin = uFilterGPSTimeClipRange[0]\n\t\t\t\t// let gpsCliPRangeMax = uFilterGPSTimeClipRange[1]\n\t\t\t\t// shader.setUniform2f(\"uFilterGPSTimeClipRange\", [gpsCliPRangeMin, gpsCliPRangeMax]);\n\n\t\t\t\t// shader.setUniform1f(\"uGpsScale\", bufferAttribute.potree.scale);\n\t\t\t\t// shader.setUniform1f(\"uGpsOffset\", bufferAttribute.potree.offset);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet uFilterReturnNumberRange = material.uniforms.uFilterReturnNumberRange.value;\n\t\t\t\tlet uFilterNumberOfReturnsRange = material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\t\tlet uFilterPointSourceIDClipRange = material.uniforms.uFilterPointSourceIDClipRange.value;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tshader.setUniform2f(\"uFilterReturnNumberRange\", uFilterReturnNumberRange);\n\t\t\t\tshader.setUniform2f(\"uFilterNumberOfReturnsRange\", uFilterNumberOfReturnsRange);\n\t\t\t\tshader.setUniform2f(\"uFilterPointSourceIDClipRange\", uFilterPointSourceIDClipRange);\n\t\t\t}\n\n\t\t\tlet webglBuffer = null;\n\t\t\tif(!this.buffers.has(geometry)){\n\t\t\t\twebglBuffer = this.createBuffer(geometry);\n\t\t\t\tthis.buffers.set(geometry, webglBuffer);\n\t\t\t}else{\n\t\t\t\twebglBuffer = this.buffers.get(geometry);\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(attribute.version > webglBuffer.vbos.get(attributeName).version){\n\t\t\t\t\t\tthis.updateBuffer(geometry);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgl.bindVertexArray(webglBuffer.vao);\n\n\t\t\tlet isExtraAttribute =\n\t\t\t\tattributeLocations[material.activeAttributeName] === undefined\n\t\t\t\t&& Object.keys(geometry.attributes).includes(material.activeAttributeName);\n\n\t\t\tif(isExtraAttribute){\n\n\t\t\t\tconst attributeLocation = attributeLocations[\"aExtra\"].location;\n\n\t\t\t\tfor(const attributeName in geometry.attributes){\n\t\t\t\t\tconst bufferAttribute = geometry.attributes[attributeName];\n\t\t\t\t\tconst vbo = webglBuffer.vbos.get(attributeName);\n\t\t\t\t\t\n\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle);\n\t\t\t\t\tgl.disableVertexAttribArray(attributeLocation);\n\t\t\t\t}\n\n\t\t\t\tconst attName = material.activeAttributeName;\n\t\t\t\tconst bufferAttribute = geometry.attributes[attName];\n\t\t\t\tconst vbo = webglBuffer.vbos.get(attName);\n\n\t\t\t\tif(bufferAttribute !== undefined && vbo !== undefined){\n\t\t\t\t\tlet type = this.glTypeMapping.get(bufferAttribute.array.constructor);\n\t\t\t\t\tlet normalized = bufferAttribute.normalized;\n\n\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle);\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\n\n\t\t\t\t{\n\t\t\t\t\tconst attExtra = octree.pcoGeometry.pointAttributes.attributes\n\t\t\t\t\t\t.find(a => a.name === attName);\n\n\t\t\t\t\tlet range = material.getRange(attName);\n\t\t\t\t\tif(!range){\n\t\t\t\t\t\trange = attExtra.range;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!range){\n\t\t\t\t\t\trange = [0, 1];\n\t\t\t\t\t}\n\n\t\t\t\t\tlet initialRange = attExtra.initialRange;\n\t\t\t\t\tlet initialRangeSize = initialRange[1] - initialRange[0];\n\n\t\t\t\t\tlet globalRange = 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(\"uExtraScale\", scale);\n\t\t\t\t\tshader.setUniform1f(\"uExtraOffset\", offset);\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tfor(const attributeName in geometry.attributes){\n\t\t\t\t\tconst bufferAttribute = geometry.attributes[attributeName];\n\t\t\t\t\tconst vbo = webglBuffer.vbos.get(attributeName);\n\n\n\t\t\t\t\tif(attributeLocations[attributeName] !== undefined){\n\t\t\t\t\t\tconst attributeLocation = attributeLocations[attributeName].location;\n\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\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.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0);\n\t\t\t\t\t\tgl.enableVertexAttribArray(attributeLocation);\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 numPoints = webglBuffer.numElements;\n\t\t\tgl.drawArrays(gl.POINTS, 0, numPoints);\n\n\t\t\ti++;\n\t\t}\n\n\t\tgl.bindVertexArray(null);\n\n\t\tif (exports.measureTimings) {\n\t\t\tperformance.mark(\"renderNodes-end\");\n\t\t\tperformance.measure(\"render.renderNodes\", \"renderNodes-start\", \"renderNodes-end\");\n\t\t}\n\t}\n\n\trenderOctree(octree, nodes, camera, target, params = {}){\n\n\t\tlet gl = this.gl;\n\n\t\tlet material = params.material ? params.material : octree.material;\n\t\tlet shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps;\n\t\tlet view = camera.matrixWorldInverse;\n\t\tlet viewInv = camera.matrixWorld;\n\n\t\tif(params.viewOverride){\n\t\t\tview = params.viewOverride;\n\t\t\tviewInv = view.clone().invert();\n\t\t}\n\n\t\tlet proj = camera.projectionMatrix;\n\t\tlet projInv = proj.clone().invert();\n\t\t//let worldView = new THREE.Matrix4();\n\n\t\tlet shader = null;\n\t\tlet visibilityTextureData = null;\n\n\t\tlet currentTextureBindingPoint = 0;\n\n\t\tif (material.pointSizeType >= 0) {\n\t\t\tif (material.pointSizeType === PointSizeType.ADAPTIVE ||\n\t\t\t\tmaterial.activeAttributeName === \"level of detail\") {\n\n\t\t\t\tlet vnNodes = (params.vnTextureNodes != null) ? params.vnTextureNodes : nodes;\n\t\t\t\tvisibilityTextureData = octree.computeVisibilityTextureData(vnNodes, camera);\n\n\t\t\t\tconst vnt = material.visibleNodesTexture;\n\t\t\t\tconst data = vnt.image.data;\n\t\t\t\tdata.set(visibilityTextureData.data);\n\t\t\t\tvnt.needsUpdate = true;\n\n\t\t\t}\n\t\t}\n\n\t\t{ // UPDATE SHADER AND TEXTURES\n\t\t\tif (!this.shaders.has(material)) {\n\t\t\t\tlet [vs, fs] = [material.vertexShader, material.fragmentShader];\n\t\t\t\tlet shader = new Shader(gl, \"pointcloud\", vs, fs);\n\n\t\t\t\tthis.shaders.set(material, shader);\n\t\t\t}\n\n\t\t\tshader = this.shaders.get(material);\n\n\t\t\t//if(material.needsUpdate){\n\t\t\t{\n\t\t\t\tlet [vs, fs] = [material.vertexShader, material.fragmentShader];\n\n\t\t\t\tlet numSnapshots = material.snapEnabled ? material.numSnapshots : 0;\n\t\t\t\tlet numClipBoxes = (material.clipBoxes && material.clipBoxes.length) ? material.clipBoxes.length : 0;\n\t\t\t\tlet numClipSpheres = (params.clipSpheres && params.clipSpheres.length) ? params.clipSpheres.length : 0;\n\t\t\t\tlet numClipPolygons = (material.clipPolygons && material.clipPolygons.length) ? material.clipPolygons.length : 0;\n\n\t\t\t\tlet defines = [\n\t\t\t\t\t`#define num_shadowmaps ${shadowMaps.length}`,\n\t\t\t\t\t`#define num_snapshots ${numSnapshots}`,\n\t\t\t\t\t`#define num_clipboxes ${numClipBoxes}`,\n\t\t\t\t\t`#define num_clipspheres ${numClipSpheres}`,\n\t\t\t\t\t`#define num_clippolygons ${numClipPolygons}`,\n\t\t\t\t];\n\n\n\t\t\t\tif(octree.pcoGeometry.root.isLoaded()){\n\t\t\t\t\tlet attributes = octree.pcoGeometry.root.geometry.attributes;\n\n\t\t\t\t\tif(attributes[\"gps-time\"]){\n\t\t\t\t\t\tdefines.push(\"#define clip_gps_enabled\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif(attributes[\"return number\"]){\n\t\t\t\t\t\tdefines.push(\"#define clip_return_number_enabled\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif(attributes[\"number of returns\"]){\n\t\t\t\t\t\tdefines.push(\"#define clip_number_of_returns_enabled\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif(attributes[\"source id\"] || attributes[\"point source id\"]){\n\t\t\t\t\t\tdefines.push(\"#define clip_point_source_id_enabled\");\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tlet definesString = defines.join(\"\\n\");\n\n\t\t\t\tlet vsVersionIndex = vs.indexOf(\"#version \");\n\t\t\t\tlet fsVersionIndex = fs.indexOf(\"#version \");\n\n\t\t\t\tif(vsVersionIndex >= 0){\n\t\t\t\t\tvs = vs.replace(/(#version .*)/, `$1\\n${definesString}`)\n\t\t\t\t}else{\n\t\t\t\t\tvs = `${definesString}\\n${vs}`;\n\t\t\t\t}\n\n\t\t\t\tif(fsVersionIndex >= 0){\n\t\t\t\t\tfs = fs.replace(/(#version .*)/, `$1\\n${definesString}`)\n\t\t\t\t}else{\n\t\t\t\t\tfs = `${definesString}\\n${fs}`;\n\t\t\t\t}\n\n\n\t\t\t\tshader.update(vs, fs);\n\n\t\t\t\tmaterial.needsUpdate = false;\n\t\t\t}\n\n\t\t\tfor (let uniformName of Object.keys(material.uniforms)) {\n\t\t\t\tlet uniform = material.uniforms[uniformName];\n\n\t\t\t\tif (uniform.type == \"t\") {\n\n\t\t\t\t\tlet texture = uniform.value;\n\n\t\t\t\t\tif (!texture) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.textures.has(texture)) {\n\t\t\t\t\t\tlet webglTexture = new WebGLTexture(gl, texture);\n\n\t\t\t\t\t\tthis.textures.set(texture, webglTexture);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet webGLTexture = this.textures.get(texture);\n\t\t\t\t\twebGLTexture.update();\n\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tgl.useProgram(shader.program);\n\n\t\tlet transparent = false;\n\t\tif(params.transparent !== undefined){\n\t\t\ttransparent = params.transparent && material.opacity < 1;\n\t\t}else{\n\t\t\ttransparent = material.opacity < 1;\n\t\t}\n\n\t\tif (transparent){\n\t\t\tgl.enable(gl.BLEND);\n\t\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n\t\t\tgl.depthMask(false);\n\t\t\tgl.disable(gl.DEPTH_TEST);\n\t\t} else {\n\t\t\tgl.disable(gl.BLEND);\n\t\t\tgl.depthMask(true);\n\t\t\tgl.enable(gl.DEPTH_TEST);\n\t\t}\n\n\t\tif(params.blendFunc !== undefined){\n\t\t\tgl.enable(gl.BLEND);\n\t\t\tgl.blendFunc(...params.blendFunc);\n\t\t}\n\n\t\tif(params.depthTest !== undefined){\n\t\t\tif(params.depthTest === true){\n\t\t\t\tgl.enable(gl.DEPTH_TEST);\n\t\t\t}else{\n\t\t\t\tgl.disable(gl.DEPTH_TEST);\n\t\t\t}\n\t\t}\n\n\t\tif(params.depthWrite !== undefined){\n\t\t\t if(params.depthWrite === true){\n\t\t\t\t gl.depthMask(true);\n\t\t\t }else{\n\t\t\t\t gl.depthMask(false);\n\t\t\t }\n\t\t\t \n\t\t}\n\n\n\t\t{ // UPDATE UNIFORMS\n\t\t\tshader.setUniformMatrix4(\"projectionMatrix\", proj);\n\t\t\tshader.setUniformMatrix4(\"viewMatrix\", view);\n\t\t\tshader.setUniformMatrix4(\"uViewInv\", viewInv);\n\t\t\tshader.setUniformMatrix4(\"uProjInv\", projInv);\n\n\t\t\tlet screenWidth = target ? target.width : material.screenWidth;\n\t\t\tlet screenHeight = target ? target.height : material.screenHeight;\n\n\t\t\tshader.setUniform1f(\"uScreenWidth\", screenWidth);\n\t\t\tshader.setUniform1f(\"uScreenHeight\", screenHeight);\n\t\t\tshader.setUniform1f(\"fov\", Math.PI * camera.fov / 180);\n\t\t\tshader.setUniform1f(\"near\", camera.near);\n\t\t\tshader.setUniform1f(\"far\", camera.far);\n\t\t\t\n\t\t\tif(camera instanceof THREE.OrthographicCamera){\n\t\t\t\tshader.setUniform(\"uUseOrthographicCamera\", true);\n\t\t\t\tshader.setUniform(\"uOrthoWidth\", camera.right - camera.left); \n\t\t\t\tshader.setUniform(\"uOrthoHeight\", camera.top - camera.bottom);\n\t\t\t}else{\n\t\t\t\tshader.setUniform(\"uUseOrthographicCamera\", false);\n\t\t\t}\n\n\t\t\tif(material.clipBoxes.length + material.clipPolygons.length === 0){\n\t\t\t\tshader.setUniform1i(\"clipTask\", ClipTask.NONE);\n\t\t\t}else{\n\t\t\t\tshader.setUniform1i(\"clipTask\", material.clipTask);\n\t\t\t}\n\n\t\t\tshader.setUniform1i(\"clipMethod\", material.clipMethod);\n\n\t\t\tif (material.clipBoxes && material.clipBoxes.length > 0) {\n\t\t\t\t//let flattenedMatrices = [].concat(...material.clipBoxes.map(c => c.inverse.elements));\n\n\t\t\t\t//const lClipBoxes = shader.uniformLocations[\"clipBoxes[0]\"];\n\t\t\t\t//gl.uniformMatrix4fv(lClipBoxes, false, flattenedMatrices);\n\n\t\t\t\tconst lClipBoxes = shader.uniformLocations[\"clipBoxes[0]\"];\n\t\t\t\tgl.uniformMatrix4fv(lClipBoxes, false, material.uniforms.clipBoxes.value);\n\t\t\t}\n\n\t\t\t// TODO CLIPSPHERES\n\t\t\tif(params.clipSpheres && params.clipSpheres.length > 0){\n\n\t\t\t\tlet clipSpheres = params.clipSpheres;\n\n\t\t\t\tlet matrices = [];\n\t\t\t\tfor(let clipSphere of clipSpheres){\n\t\t\t\t\t//let mScale = new THREE.Matrix4().makeScale(...clipSphere.scale.toArray());\n\t\t\t\t\t//let mTranslate = new THREE.Matrix4().makeTranslation(...clipSphere.position.toArray());\n\n\t\t\t\t\t//let clipToWorld = new THREE.Matrix4().multiplyMatrices(mTranslate, mScale);\n\t\t\t\t\tlet clipToWorld = clipSphere.matrixWorld;\n\t\t\t\t\tlet viewToWorld = camera.matrixWorld\n\t\t\t\t\tlet worldToClip = clipToWorld.clone().invert();\n\n\t\t\t\t\tlet viewToClip = new THREE.Matrix4().multiplyMatrices(worldToClip, viewToWorld);\n\n\t\t\t\t\tmatrices.push(viewToClip);\n\t\t\t\t}\n\n\t\t\t\tlet flattenedMatrices = [].concat(...matrices.map(matrix => matrix.elements));\n\n\t\t\t\tconst lClipSpheres = shader.uniformLocations[\"uClipSpheres[0]\"];\n\t\t\t\tgl.uniformMatrix4fv(lClipSpheres, false, flattenedMatrices);\n\t\t\t\t\n\t\t\t\t//const lClipSpheres = shader.uniformLocations[\"uClipSpheres[0]\"];\n\t\t\t\t//gl.uniformMatrix4fv(lClipSpheres, false, material.uniforms.clipSpheres.value);\n\t\t\t}\n\n\n\t\t\tshader.setUniform1f(\"size\", material.size);\n\t\t\tshader.setUniform1f(\"maxSize\", material.uniforms.maxSize.value);\n\t\t\tshader.setUniform1f(\"minSize\", material.uniforms.minSize.value);\n\n\n\t\t\t// uniform float uPCIndex\n\t\t\tshader.setUniform1f(\"uOctreeSpacing\", material.spacing);\n\t\t\tshader.setUniform(\"uOctreeSize\", material.uniforms.octreeSize.value);\n\n\n\t\t\t//uniform vec3 uColor;\n\t\t\tshader.setUniform3f(\"uColor\", material.color.toArray());\n\t\t\t//uniform float opacity;\n\t\t\tshader.setUniform1f(\"uOpacity\", material.opacity);\n\n\t\t\tshader.setUniform2f(\"elevationRange\", material.elevationRange);\n\t\t\tshader.setUniform2f(\"intensityRange\", material.intensityRange);\n\n\n\t\t\tshader.setUniform3f(\"uIntensity_gbc\", [\n\t\t\t\tmaterial.intensityGamma, \n\t\t\t\tmaterial.intensityBrightness, \n\t\t\t\tmaterial.intensityContrast\n\t\t\t]);\n\n\t\t\tshader.setUniform3f(\"uRGB_gbc\", [\n\t\t\t\tmaterial.rgbGamma, \n\t\t\t\tmaterial.rgbBrightness, \n\t\t\t\tmaterial.rgbContrast\n\t\t\t]);\n\n\t\t\tshader.setUniform1f(\"uTransition\", material.transition);\n\t\t\tshader.setUniform1f(\"wRGB\", material.weightRGB);\n\t\t\tshader.setUniform1f(\"wIntensity\", material.weightIntensity);\n\t\t\tshader.setUniform1f(\"wElevation\", material.weightElevation);\n\t\t\tshader.setUniform1f(\"wClassification\", material.weightClassification);\n\t\t\tshader.setUniform1f(\"wReturnNumber\", material.weightReturnNumber);\n\t\t\tshader.setUniform1f(\"wSourceID\", material.weightSourceID);\n\n\t\t\tshader.setUniform(\"backfaceCulling\", material.uniforms.backfaceCulling.value);\n\n\t\t\tlet vnWebGLTexture = this.textures.get(material.visibleNodesTexture);\n\t\t\tif(vnWebGLTexture){\n\t\t\t\tshader.setUniform1i(\"visibleNodesTexture\", currentTextureBindingPoint);\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\t\tgl.bindTexture(vnWebGLTexture.target, vnWebGLTexture.id);\n\t\t\t\tcurrentTextureBindingPoint++;\n\t\t\t}\n\n\t\t\tlet gradientTexture = this.textures.get(material.gradientTexture);\n\t\t\tshader.setUniform1i(\"gradient\", currentTextureBindingPoint);\n\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\tgl.bindTexture(gradientTexture.target, gradientTexture.id);\n\n\t\t\tconst repeat = material.elevationGradientRepeat;\n\t\t\tif(repeat === ElevationGradientRepeat.REPEAT){\n\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.REPEAT);\n\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.REPEAT);\n\t\t\t}else if(repeat === ElevationGradientRepeat.MIRRORED_REPEAT){\n\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT);\n\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT);\n\t\t\t}else{\n\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\t\t}\n\t\t\tcurrentTextureBindingPoint++;\n\n\t\t\tlet classificationTexture = this.textures.get(material.classificationTexture);\n\t\t\tshader.setUniform1i(\"classificationLUT\", currentTextureBindingPoint);\n\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\tgl.bindTexture(classificationTexture.target, classificationTexture.id);\n\t\t\tcurrentTextureBindingPoint++;\n\n\t\t\tlet matcapTexture = this.textures.get(material.matcapTexture);\n\t\t\tshader.setUniform1i(\"matcapTextureUniform\", currentTextureBindingPoint);\n\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\tgl.bindTexture(matcapTexture.target, matcapTexture.id);\n\t\t\tcurrentTextureBindingPoint++;\n\n\n\t\t\tif (material.snapEnabled === true) {\n\n\t\t\t\t{\n\t\t\t\t\tconst lSnapshot = shader.uniformLocations[\"uSnapshot[0]\"];\n\t\t\t\t\tconst lSnapshotDepth = shader.uniformLocations[\"uSnapshotDepth[0]\"];\n\n\t\t\t\t\tlet bindingStart = currentTextureBindingPoint;\n\t\t\t\t\tlet lSnapshotBindingPoints = new Array(5).fill(bindingStart).map((a, i) => (a + i));\n\t\t\t\t\tlet lSnapshotDepthBindingPoints = new Array(5)\n\t\t\t\t\t\t.fill(1 + Math.max(...lSnapshotBindingPoints))\n\t\t\t\t\t\t.map((a, i) => (a + i));\n\t\t\t\t\tcurrentTextureBindingPoint = 1 + Math.max(...lSnapshotDepthBindingPoints);\n\n\t\t\t\t\tgl.uniform1iv(lSnapshot, lSnapshotBindingPoints);\n\t\t\t\t\tgl.uniform1iv(lSnapshotDepth, lSnapshotDepthBindingPoints);\n\n\t\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\t\tlet texture = material.uniforms[`uSnapshot`].value[i];\n\t\t\t\t\t\tlet textureDepth = material.uniforms[`uSnapshotDepth`].value[i];\n\n\t\t\t\t\t\tif (!texture) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet snapTexture = this.threeRenderer.properties.get(texture).__webglTexture;\n\t\t\t\t\t\tlet snapTextureDepth = this.threeRenderer.properties.get(textureDepth).__webglTexture;\n\n\t\t\t\t\t\tlet bindingPoint = lSnapshotBindingPoints[i];\n\t\t\t\t\t\tlet depthBindingPoint = lSnapshotDepthBindingPoints[i];\n\n\t\t\t\t\t\tgl.activeTexture(gl[`TEXTURE${bindingPoint}`]);\n\t\t\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, snapTexture);\n\n\t\t\t\t\t\tgl.activeTexture(gl[`TEXTURE${depthBindingPoint}`]);\n\t\t\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, snapTextureDepth);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t{\n\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapView.value.map(c => c.elements));\n\t\t\t\t\tconst lSnapView = shader.uniformLocations[\"uSnapView[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lSnapView, false, flattenedMatrices);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapProj.value.map(c => c.elements));\n\t\t\t\t\tconst lSnapProj = shader.uniformLocations[\"uSnapProj[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lSnapProj, false, flattenedMatrices);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapProjInv.value.map(c => c.elements));\n\t\t\t\t\tconst lSnapProjInv = shader.uniformLocations[\"uSnapProjInv[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lSnapProjInv, false, flattenedMatrices);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapViewInv.value.map(c => c.elements));\n\t\t\t\t\tconst lSnapViewInv = shader.uniformLocations[\"uSnapViewInv[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lSnapViewInv, false, flattenedMatrices);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tthis.renderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params);\n\n\t\tgl.activeTexture(gl.TEXTURE2);\n\t\tgl.bindTexture(gl.TEXTURE_2D, null);\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t}\n\n\trender(scene, camera, target = null, params = {}) {\n\n\t\tconst gl = this.gl;\n\n\t\t// PREPARE \n\t\tif (target != null) {\n\t\t\tthis.threeRenderer.setRenderTarget(target);\n\t\t}\n\n\t\t//camera.updateProjectionMatrix();\n\t\t// camera.matrixWorldInverse.invert(camera.matrixWorld);\n\n\t\tconst traversalResult = this.traverse(scene);\n\n\n\t\t// RENDER\n\t\tfor (const octree of traversalResult.octrees) {\n\t\t\tlet nodes = octree.visibleNodes;\n\t\t\tthis.renderOctree(octree, nodes, camera, target, params);\n\t\t}\n\n\n\t\t// CLEANUP\n\t\tgl.activeTexture(gl.TEXTURE1);\n\t\tgl.bindTexture(gl.TEXTURE_2D, null);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\tgl.bindVertexArray(null);\n\n\t\tthis.threeRenderer.resetState();\n\t}\n\n\n\n};\n\n\n\n\n\n\n\n\n","\nimport * as THREE from \"../libs/three.js/build/three.module.js\";\nimport {Points} from \"./Points.js\";\n\nexport class ProfileData {\n\tconstructor (profile) {\n\t\tthis.profile = profile;\n\n\t\tthis.segments = [];\n\t\tthis.boundingBox = new THREE.Box3();\n\n\t\tfor (let i = 0; i < profile.points.length - 1; i++) {\n\t\t\tlet start = profile.points[i];\n\t\t\tlet end = profile.points[i + 1];\n\n\t\t\tlet startGround = new THREE.Vector3(start.x, start.y, 0);\n\t\t\tlet endGround = new THREE.Vector3(end.x, end.y, 0);\n\n\t\t\tlet center = new THREE.Vector3().addVectors(endGround, startGround).multiplyScalar(0.5);\n\t\t\tlet length = startGround.distanceTo(endGround);\n\t\t\tlet side = new THREE.Vector3().subVectors(endGround, startGround).normalize();\n\t\t\tlet up = new THREE.Vector3(0, 0, 1);\n\t\t\tlet forward = new THREE.Vector3().crossVectors(side, up).normalize();\n\t\t\tlet N = forward;\n\t\t\tlet cutPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(N, startGround);\n\t\t\tlet halfPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(side, center);\n\n\t\t\tlet segment = {\n\t\t\t\tstart: start,\n\t\t\t\tend: end,\n\t\t\t\tcutPlane: cutPlane,\n\t\t\t\thalfPlane: halfPlane,\n\t\t\t\tlength: length,\n\t\t\t\tpoints: new Points()\n\t\t\t};\n\n\t\t\tthis.segments.push(segment);\n\t\t}\n\t}\n\n\tsize () {\n\t\tlet size = 0;\n\t\tfor (let segment of this.segments) {\n\t\t\tsize += segment.points.numPoints;\n\t\t}\n\n\t\treturn size;\n\t}\n};\n\nexport class ProfileRequest {\n\tconstructor (pointcloud, profile, maxDepth, callback) {\n\t\tthis.pointcloud = pointcloud;\n\t\tthis.profile = profile;\n\t\tthis.maxDepth = maxDepth || Number.MAX_VALUE;\n\t\tthis.callback = callback;\n\t\tthis.temporaryResult = new ProfileData(this.profile);\n\t\tthis.pointsServed = 0;\n\t\tthis.highestLevelServed = 0;\n\n\t\tthis.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; });\n\n\t\tthis.initialize();\n\t}\n\n\tinitialize () {\n\t\tthis.priorityQueue.push({node: this.pointcloud.pcoGeometry.root, weight: Infinity});\n\t};\n\n\t// traverse the node and add intersecting descendants to queue\n\ttraverse (node) {\n\t\tlet stack = [];\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tlet child = node.children[i];\n\t\t\tif (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) {\n\t\t\t\tstack.push(child);\n\t\t\t}\n\t\t}\n\n\t\twhile (stack.length > 0) {\n\t\t\tlet node = stack.pop();\n\t\t\tlet weight = node.boundingSphere.radius;\n\n\t\t\tthis.priorityQueue.push({node: node, weight: weight});\n\n\t\t\t// add children that intersect the cutting plane\n\t\t\tif (node.level < this.maxDepth) {\n\t\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\t\tlet child = node.children[i];\n\t\t\t\t\tif (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) {\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\t}\n\n\tupdate(){\n\t\tif(!this.updateGeneratorInstance){\n\t\t\tthis.updateGeneratorInstance = this.updateGenerator();\n\t\t}\n\n\t\tlet result = this.updateGeneratorInstance.next();\n\t\tif(result.done){\n\t\t\tthis.updateGeneratorInstance = null;\n\t\t}\n\t}\n\n\t* updateGenerator(){\n\t\t// load nodes in queue\n\t\t// if hierarchy expands, also load nodes from expanded hierarchy\n\t\t// once loaded, add data to this.points and remove node from queue\n\t\t// only evaluate 1-50 nodes per frame to maintain responsiveness\n\n\t\tlet start = performance.now();\n\n\t\tlet maxNodesPerUpdate = 1;\n\t\tlet intersectedNodes = [];\n\n\t\tfor (let i = 0; i < Math.min(maxNodesPerUpdate, this.priorityQueue.size()); i++) {\n\t\t\tlet element = this.priorityQueue.pop();\n\t\t\tlet node = element.node;\n\n\t\t\tif(node.level > this.maxDepth){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (node.loaded) {\n\t\t\t\t// add points to result\n\t\t\t\tintersectedNodes.push(node);\n\t\t\t\texports.lru.touch(node);\n\t\t\t\tthis.highestLevelServed = Math.max(node.getLevel(), this.highestLevelServed);\n\n\t\t\t\tvar geom = node.pcoGeometry;\n\t\t\t\tvar hierarchyStepSize = geom ? geom.hierarchyStepSize : 1;\n\n\t\t\t\tvar doTraverse = node.getLevel() === 0 ||\n\t\t\t\t\t(node.level % hierarchyStepSize === 0 && node.hasChildren);\n\n\t\t\t\tif (doTraverse) {\n\t\t\t\t\tthis.traverse(node);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.load();\n\t\t\t\tthis.priorityQueue.push(element);\n\t\t\t}\n\t\t}\n\n\t\tif (intersectedNodes.length > 0) {\n\n\t\t\tfor(let done of this.getPointsInsideProfile(intersectedNodes, this.temporaryResult)){\n\t\t\t\tif(!done){\n\t\t\t\t\t//console.log(\"updateGenerator yields\");\n\t\t\t\t\tyield false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.temporaryResult.size() > 100) {\n\t\t\t\tthis.pointsServed += this.temporaryResult.size();\n\t\t\t\tthis.callback.onProgress({request: this, points: this.temporaryResult});\n\t\t\t\tthis.temporaryResult = new ProfileData(this.profile);\n\t\t\t}\n\t\t}\n\n\t\tif (this.priorityQueue.size() === 0) {\n\t\t\t// we're done! inform callback and remove from pending requests\n\n\t\t\tif (this.temporaryResult.size() > 0) {\n\t\t\t\tthis.pointsServed += this.temporaryResult.size();\n\t\t\t\tthis.callback.onProgress({request: this, points: this.temporaryResult});\n\t\t\t\tthis.temporaryResult = new ProfileData(this.profile);\n\t\t\t}\n\n\t\t\tthis.callback.onFinish({request: this});\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\n\t\tyield true;\n\t};\n\n\t* getAccepted(numPoints, node, matrix, segment, segmentDir, points, totalMileage){\n\t\tlet checkpoint = performance.now();\n\n\t\tlet accepted = new Uint32Array(numPoints);\n\t\tlet mileage = new Float64Array(numPoints);\n\t\tlet acceptedPositions = new Float32Array(numPoints * 3);\n\t\tlet numAccepted = 0;\n\n\t\tlet pos = new THREE.Vector3();\n\t\tlet svp = new THREE.Vector3();\n\n\t\tlet view = new Float32Array(node.geometry.attributes.position.array);\n\n\t\tfor (let i = 0; i < numPoints; i++) {\n\n\t\t\tpos.set(\n\t\t\t\tview[i * 3 + 0],\n\t\t\t\tview[i * 3 + 1],\n\t\t\t\tview[i * 3 + 2]);\n\n\t\t\tpos.applyMatrix4(matrix);\n\t\t\tlet distance = Math.abs(segment.cutPlane.distanceToPoint(pos));\n\t\t\tlet centerDistance = Math.abs(segment.halfPlane.distanceToPoint(pos));\n\n\t\t\tif (distance < this.profile.width / 2 && centerDistance < segment.length / 2) {\n\t\t\t\tsvp.subVectors(pos, segment.start);\n\t\t\t\tlet localMileage = segmentDir.dot(svp);\n\n\t\t\t\taccepted[numAccepted] = i;\n\t\t\t\tmileage[numAccepted] = localMileage + totalMileage;\n\t\t\t\tpoints.boundingBox.expandByPoint(pos);\n\n\t\t\t\tpos.sub(this.pointcloud.position);\n\n\t\t\t\tacceptedPositions[3 * numAccepted + 0] = pos.x;\n\t\t\t\tacceptedPositions[3 * numAccepted + 1] = pos.y;\n\t\t\t\tacceptedPositions[3 * numAccepted + 2] = pos.z;\n\n\t\t\t\tnumAccepted++;\n\t\t\t}\n\n\t\t\tif((i % 1000) === 0){\n\t\t\t\tlet duration = performance.now() - checkpoint;\n\t\t\t\tif(duration > 4){\n\t\t\t\t\t//console.log(`getAccepted yield after ${duration}ms`);\n\t\t\t\t\tyield false;\n\t\t\t\t\tcheckpoint = performance.now();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\taccepted = accepted.subarray(0, numAccepted);\n\t\tmileage = mileage.subarray(0, numAccepted);\n\t\tacceptedPositions = acceptedPositions.subarray(0, numAccepted * 3);\n\n\t\t//let end = performance.now();\n\t\t//let duration = end - start;\n\t\t//console.log(\"accepted duration \", duration)\n\n\t\t//console.log(`getAccepted finished`);\n\n\t\tyield [accepted, mileage, acceptedPositions];\n\t}\n\n\t* getPointsInsideProfile(nodes, target){\n\t\tlet checkpoint = performance.now();\n\t\tlet totalMileage = 0;\n\n\t\tlet pointsProcessed = 0;\n\n\t\tfor (let segment of target.segments) {\n\t\t\tfor (let node of nodes) {\n\t\t\t\tlet numPoints = node.numPoints;\n\t\t\t\tlet geometry = node.geometry;\n\n\t\t\t\tif(!numPoints){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t{ // skip if current node doesn't intersect current segment\n\t\t\t\t\tlet bbWorld = node.boundingBox.clone().applyMatrix4(this.pointcloud.matrixWorld);\n\t\t\t\t\tlet bsWorld = bbWorld.getBoundingSphere(new THREE.Sphere());\n\n\t\t\t\t\tlet start = new THREE.Vector3(segment.start.x, segment.start.y, bsWorld.center.z);\n\t\t\t\t\tlet end = new THREE.Vector3(segment.end.x, segment.end.y, bsWorld.center.z);\n\n\t\t\t\t\tlet closest = new THREE.Line3(start, end).closestPointToPoint(bsWorld.center, true, new THREE.Vector3());\n\t\t\t\t\tlet distance = closest.distanceTo(bsWorld.center);\n\n\t\t\t\t\tlet intersects = (distance < (bsWorld.radius + target.profile.width));\n\n\t\t\t\t\tif(!intersects){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//{// DEBUG\n\t\t\t\t//\tconsole.log(node.name);\n\t\t\t\t//\tlet boxHelper = new Potree.Box3Helper(node.getBoundingBox());\n\t\t\t\t//\tboxHelper.matrixAutoUpdate = false;\n\t\t\t\t//\tboxHelper.matrix.copy(viewer.scene.pointclouds[0].matrixWorld);\n\t\t\t\t//\tviewer.scene.scene.add(boxHelper);\n\t\t\t\t//}\n\n\t\t\t\tlet sv = new THREE.Vector3().subVectors(segment.end, segment.start).setZ(0);\n\t\t\t\tlet segmentDir = sv.clone().normalize();\n\n\t\t\t\tlet points = new Points();\n\n\t\t\t\tlet nodeMatrix = new THREE.Matrix4().makeTranslation(...node.boundingBox.min.toArray());\n\n\t\t\t\tlet matrix = new THREE.Matrix4().multiplyMatrices(\n\t\t\t\t\tthis.pointcloud.matrixWorld, nodeMatrix);\n\n\t\t\t\tpointsProcessed = pointsProcessed + numPoints;\n\n\t\t\t\tlet accepted = null;\n\t\t\t\tlet mileage = null;\n\t\t\t\tlet acceptedPositions = null;\n\t\t\t\tfor(let result of this.getAccepted(numPoints, node, matrix, segment, segmentDir, points,totalMileage)){\n\t\t\t\t\tif(!result){\n\t\t\t\t\t\tlet duration = performance.now() - checkpoint;\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}else{\n\t\t\t\t\t\t[accepted, mileage, acceptedPositions] = result;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet duration = performance.now() - checkpoint;\n\t\t\t\tif(duration > 4){\n\t\t\t\t\t//console.log(`getPointsInsideProfile yield after ${duration}ms`);\n\t\t\t\t\tyield false;\n\t\t\t\t\tcheckpoint = performance.now();\n\t\t\t\t}\n\n\t\t\t\tpoints.data.position = acceptedPositions;\n\n\t\t\t\tlet relevantAttributes = Object.keys(geometry.attributes).filter(a => ![\"position\", \"indices\"].includes(a));\n\t\t\t\tfor(let attributeName of relevantAttributes){\n\n\t\t\t\t\tlet attribute = geometry.attributes[attributeName];\n\t\t\t\t\tlet numElements = attribute.array.length / numPoints;\n\n\t\t\t\t\tif(numElements !== parseInt(numElements)){\n\t\t\t\t\t\tdebugger;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet Type = attribute.array.constructor;\n\n\t\t\t\t\tlet filteredBuffer = new Type(numElements * accepted.length);\n\n\t\t\t\t\tlet source = attribute.array;\n\t\t\t\t\tlet target = filteredBuffer;\n\n\t\t\t\t\tfor(let i = 0; i < accepted.length; i++){\n\n\t\t\t\t\t\tlet index = accepted[i];\n\n\t\t\t\t\t\tlet start = index * numElements;\n\t\t\t\t\t\tlet end = start + numElements;\n\t\t\t\t\t\tlet sub = source.subarray(start, end);\n\n\t\t\t\t\t\ttarget.set(sub, i * numElements);\n\t\t\t\t\t}\n\n\t\t\t\t\tpoints.data[attributeName] = filteredBuffer;\n\t\t\t\t}\n\n\t\t\t\tpoints.data['mileage'] = mileage;\n\t\t\t\tpoints.numPoints = accepted.length;\n\n\t\t\t\tsegment.points.add(points);\n\t\t\t}\n\n\t\t\ttotalMileage += segment.length;\n\t\t}\n\n\t\tfor (let segment of target.segments) {\n\t\t\ttarget.boundingBox.union(segment.points.boundingBox);\n\t\t}\n\n\t\t//console.log(`getPointsInsideProfile finished`);\n\t\tyield true;\n\t};\n\n\tfinishLevelThenCancel () {\n\t\tif (this.cancelRequested) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.maxDepth = this.highestLevelServed;\n\t\tthis.cancelRequested = true;\n\n\t\t//console.log(`maxDepth: ${this.maxDepth}`);\n\t};\n\n\tcancel () {\n\t\tthis.callback.onCancel();\n\n\t\tthis.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; });\n\n\t\tlet index = this.pointcloud.profileRequests.indexOf(this);\n\t\tif (index >= 0) {\n\t\t\tthis.pointcloud.profileRequests.splice(index, 1);\n\t\t}\n\t};\n}\n","\nexport 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","\nexport class WorkerPool{\n\tconstructor(){\n\t\tthis.workers = {};\n\t}\n\n\tgetWorker(url){\n\t\tif (!this.workers[url]){\n\t\t\tthis.workers[url] = [];\n\t\t}\n\n\t\tif (this.workers[url].length === 0){\n\t\t\tlet worker = new Worker(url);\n\t\t\tthis.workers[url].push(worker);\n\t\t}\n\n\t\tlet worker = this.workers[url].pop();\n\n\t\treturn worker;\n\t}\n\n\treturnWorker(url, worker){\n\t\tthis.workers[url].push(worker);\n\t}\n};\n\n//Potree.workerPool = new Potree.WorkerPool();\n","\r\n\r\nfunction createPointcloudData(pointcloud) {\r\n\r\n\tlet material = pointcloud.material;\r\n\r\n\tlet ranges = [];\r\n\t\r\n\tfor(let [name, value] of material.ranges){\r\n\t\tranges.push({\r\n\t\t\tname: name,\r\n\t\t\tvalue: value,\r\n\t\t});\r\n\t}\r\n\r\n\tif(typeof material.elevationRange[0] === \"number\"){\r\n\t\tranges.push({\r\n\t\t\tname: \"elevationRange\",\r\n\t\t\tvalue: material.elevationRange,\r\n\t\t});\r\n\t}\r\n\tif(typeof material.intensityRange[0] === \"number\"){\r\n\t\tranges.push({\r\n\t\t\tname: \"intensityRange\",\r\n\t\t\tvalue: material.intensityRange,\r\n\t\t});\r\n\t}\r\n\r\n\tlet pointSizeTypeName = Object.entries(Potree.PointSizeType).find(e => e[1] === material.pointSizeType)[0];\r\n\r\n\tlet jsonMaterial = {\r\n\t\tactiveAttributeName: material.activeAttributeName,\r\n\t\tranges: ranges,\r\n\t\tsize: material.size,\r\n\t\tminSize: material.minSize,\r\n\t\tpointSizeType: pointSizeTypeName,\r\n\t\tmatcap: material.matcap,\r\n\t};\r\n\r\n\tconst pcdata = {\r\n\t\tname: pointcloud.name,\r\n\t\turl: pointcloud.pcoGeometry.url,\r\n\t\tposition: pointcloud.position.toArray(),\r\n\t\trotation: pointcloud.rotation.toArray(),\r\n\t\tscale: pointcloud.scale.toArray(),\r\n\t\tmaterial: jsonMaterial,\r\n\t};\r\n\r\n\treturn pcdata;\r\n}\r\n\r\nfunction createProfileData(profile){\r\n\tconst data = {\r\n\t\tuuid: profile.uuid,\r\n\t\tname: profile.name,\r\n\t\tpoints: profile.points.map(p => p.toArray()),\r\n\t\theight: profile.height,\r\n\t\twidth: profile.width,\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createVolumeData(volume){\r\n\tconst data = {\r\n\t\tuuid: volume.uuid,\r\n\t\ttype: volume.constructor.name,\r\n\t\tname: volume.name,\r\n\t\tposition: volume.position.toArray(),\r\n\t\trotation: volume.rotation.toArray(),\r\n\t\tscale: volume.scale.toArray(),\r\n\t\tvisible: volume.visible,\r\n\t\tclip: volume.clip,\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createCameraAnimationData(animation){\r\n\r\n\tconst controlPoints = animation.controlPoints.map( cp => {\r\n\t\tconst cpdata = {\r\n\t\t\tposition: cp.position.toArray(),\r\n\t\t\ttarget: cp.target.toArray(),\r\n\t\t};\r\n\r\n\t\treturn cpdata;\r\n\t});\r\n\r\n\tconst data = {\r\n\t\tuuid: animation.uuid,\r\n\t\tname: animation.name,\r\n\t\tduration: animation.duration,\r\n\t\tt: animation.t,\r\n\t\tcurveType: animation.curveType,\r\n\t\tvisible: animation.visible,\r\n\t\tcontrolPoints: controlPoints,\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createMeasurementData(measurement){\r\n\r\n\tconst data = {\r\n\t\tuuid: measurement.uuid,\r\n\t\tname: measurement.name,\r\n\t\tpoints: measurement.points.map(p => p.position.toArray()),\r\n\t\tshowDistances: measurement.showDistances,\r\n\t\tshowCoordinates: measurement.showCoordinates,\r\n\t\tshowArea: measurement.showArea,\r\n\t\tclosed: measurement.closed,\r\n\t\tshowAngles: measurement.showAngles,\r\n\t\tshowHeight: measurement.showHeight,\r\n\t\tshowCircle: measurement.showCircle,\r\n\t\tshowAzimuth: measurement.showAzimuth,\r\n\t\tshowEdges: measurement.showEdges,\r\n\t\tcolor: measurement.color.toArray(),\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createOrientedImagesData(images){\r\n\tconst data = {\r\n\t\tcameraParamsPath: images.cameraParamsPath,\r\n\t\timageParamsPath: images.imageParamsPath,\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createGeopackageData(geopackage){\r\n\tconst data = {\r\n\t\tpath: geopackage.path,\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createAnnotationData(annotation){\r\n\r\n\tconst data = {\r\n\t\tuuid: annotation.uuid,\r\n\t\ttitle: annotation.title.toString(),\r\n\t\tdescription: annotation.description,\r\n\t\tposition: annotation.position.toArray(),\r\n\t\toffset: annotation.offset.toArray(),\r\n\t\tchildren: [],\r\n\t};\r\n\r\n\tif(annotation.cameraPosition){\r\n\t\tdata.cameraPosition = annotation.cameraPosition.toArray();\r\n\t}\r\n\r\n\tif(annotation.cameraTarget){\r\n\t\tdata.cameraTarget = annotation.cameraTarget.toArray();\r\n\t}\r\n\r\n\tif(typeof annotation.radius !== \"undefined\"){\r\n\t\tdata.radius = annotation.radius;\r\n\t}\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createAnnotationsData(viewer){\r\n\t\r\n\tconst map = new Map();\r\n\r\n\tviewer.scene.annotations.traverseDescendants(a => {\r\n\t\tconst aData = createAnnotationData(a);\r\n\r\n\t\tmap.set(a, aData);\r\n\t});\r\n\r\n\tfor(const [annotation, data] of map){\r\n\t\tfor(const child of annotation.children){\r\n\t\t\tconst childData = map.get(child);\r\n\t\t\tdata.children.push(childData);\r\n\t\t}\r\n\t}\r\n\r\n\tconst annotations = viewer.scene.annotations.children.map(a => map.get(a));\r\n\r\n\treturn annotations;\r\n}\r\n\r\nfunction createSettingsData(viewer){\r\n\treturn {\r\n\t\tpointBudget: viewer.getPointBudget(),\r\n\t\tfov: viewer.getFOV(),\r\n\t\tedlEnabled: viewer.getEDLEnabled(),\r\n\t\tedlRadius: viewer.getEDLRadius(),\r\n\t\tedlStrength: viewer.getEDLStrength(),\r\n\t\tbackground: viewer.getBackground(),\r\n\t\tminNodeSize: viewer.getMinNodeSize(),\r\n\t\tshowBoundingBoxes: viewer.getShowBoundingBox(),\r\n\t};\r\n}\r\n\r\nfunction createSceneContentData(viewer){\r\n\r\n\tconst data = [];\r\n\r\n\tconst potreeObjects = [];\r\n\r\n\tviewer.scene.scene.traverse(node => {\r\n\t\tif(node.potree){\r\n\t\t\tpotreeObjects.push(node);\r\n\t\t}\r\n\t});\r\n\r\n\tfor(const object of potreeObjects){\r\n\t\t\r\n\t\tif(object.potree.file){\r\n\t\t\tconst saveObject = {\r\n\t\t\t\tfile: object.potree.file,\r\n\t\t\t};\r\n\r\n\t\t\tdata.push(saveObject);\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createViewData(viewer){\r\n\tconst view = viewer.scene.view;\r\n\r\n\tconst data = {\r\n\t\tposition: view.position.toArray(),\r\n\t\ttarget: view.getPivot().toArray(),\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n\r\nfunction createClassificationData(viewer){\r\n\tconst classifications = viewer.classifications;\r\n\r\n\tconst data = classifications;\r\n\r\n\treturn data;\r\n}\r\n\r\nexport function saveProject(viewer) {\r\n\r\n\tconst scene = viewer.scene;\r\n\r\n\tconst data = {\r\n\t\ttype: \"Potree\",\r\n\t\tversion: 1.7,\r\n\t\tsettings: createSettingsData(viewer),\r\n\t\tview: createViewData(viewer),\r\n\t\tclassification: createClassificationData(viewer),\r\n\t\tpointclouds: scene.pointclouds.map(createPointcloudData),\r\n\t\tmeasurements: scene.measurements.map(createMeasurementData),\r\n\t\tvolumes: scene.volumes.map(createVolumeData),\r\n\t\tcameraAnimations: scene.cameraAnimations.map(createCameraAnimationData),\r\n\t\tprofiles: scene.profiles.map(createProfileData),\r\n\t\tannotations: createAnnotationsData(viewer),\r\n\t\torientedImages: scene.orientedImages.map(createOrientedImagesData),\r\n\t\tgeopackages: scene.geopackages.map(createGeopackageData),\r\n\t\t// objects: createSceneContentData(viewer),\r\n\t};\r\n\r\n\treturn data;\r\n}\r\n","\r\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\r\nimport { EventDispatcher } from \"../../EventDispatcher.js\";\r\nimport { Utils } from \"../../utils.js\";\r\nimport {Line2} from \"../../../libs/three.js/lines/Line2.js\";\r\nimport {LineGeometry} from \"../../../libs/three.js/lines/LineGeometry.js\";\r\nimport {LineMaterial} from \"../../../libs/three.js/lines/LineMaterial.js\";\r\n\r\n\r\nclass ControlPoint{\r\n\r\n\tconstructor(){\r\n\t\tthis.position = new THREE.Vector3(0, 0, 0);\r\n\t\tthis.target = new THREE.Vector3(0, 0, 0);\r\n\t\tthis.positionHandle = null;\r\n\t\tthis.targetHandle = null;\r\n\t}\r\n\r\n};\r\n\r\n\r\n\r\nexport class CameraAnimation extends EventDispatcher{\r\n\r\n\tconstructor(viewer){\r\n\t\tsuper();\r\n\t\t\r\n\t\tthis.viewer = viewer;\r\n\r\n\t\tthis.selectedElement = null;\r\n\r\n\t\tthis.controlPoints = [];\r\n\r\n\t\tthis.uuid = THREE.Math.generateUUID();\r\n\r\n\t\tthis.node = new THREE.Object3D();\r\n\t\tthis.node.name = \"camera animation\";\r\n\t\tthis.viewer.scene.scene.add(this.node);\r\n\r\n\t\tthis.frustum = this.createFrustum();\r\n\t\tthis.node.add(this.frustum);\r\n\r\n\t\tthis.name = \"Camera Animation\";\r\n\t\tthis.duration = 5;\r\n\t\tthis.t = 0;\r\n\t\t// \"centripetal\", \"chordal\", \"catmullrom\"\r\n\t\tthis.curveType = \"centripetal\" \r\n\t\tthis.visible = true;\r\n\r\n\t\tthis.createUpdateHook();\r\n\t\tthis.createPath();\r\n\t}\r\n\r\n\tstatic defaultFromView(viewer){\r\n\t\tconst animation = new CameraAnimation(viewer);\r\n\r\n\t\tconst camera = viewer.scene.getActiveCamera();\r\n\t\tconst target = viewer.scene.view.getPivot();\r\n\r\n\t\tconst cpCenter = new THREE.Vector3(\r\n\t\t\t0.3 * camera.position.x + 0.7 * target.x,\r\n\t\t\t0.3 * camera.position.y + 0.7 * target.y,\r\n\t\t\t0.3 * camera.position.z + 0.7 * target.z,\r\n\t\t);\r\n\r\n\t\tconst targetCenter = new THREE.Vector3(\r\n\t\t\t0.05 * camera.position.x + 0.95 * target.x,\r\n\t\t\t0.05 * camera.position.y + 0.95 * target.y,\r\n\t\t\t0.05 * camera.position.z + 0.95 * target.z,\r\n\t\t);\r\n\r\n\t\tconst r = camera.position.distanceTo(target) * 0.3;\r\n\r\n\t\t//const dir = target.clone().sub(camera.position).normalize();\r\n\t\tconst angle = Utils.computeAzimuth(camera.position, target);\r\n\r\n\t\tconst n = 5;\r\n\t\tfor(let i = 0; i < n; i++){\r\n\t\t\tlet u = 1.5 * Math.PI * (i / n) + angle;\r\n\r\n\t\t\tconst dx = r * Math.cos(u);\r\n\t\t\tconst dy = r * Math.sin(u);\r\n\r\n\t\t\tconst cpPos = [\r\n\t\t\t\tcpCenter.x + dx,\r\n\t\t\t\tcpCenter.y + dy,\r\n\t\t\t\tcpCenter.z,\r\n\t\t\t];\r\n\r\n\t\t\tconst targetPos = [\r\n\t\t\t\ttargetCenter.x + dx * 0.1,\r\n\t\t\t\ttargetCenter.y + dy * 0.1,\r\n\t\t\t\ttargetCenter.z,\r\n\t\t\t];\r\n\r\n\t\t\tconst cp = animation.createControlPoint();\r\n\t\t\tcp.position.set(...cpPos);\r\n\t\t\tcp.target.set(...targetPos);\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\tcreateUpdateHook(){\r\n\t\tconst viewer = this.viewer;\r\n\r\n\t\tviewer.addEventListener(\"update\", () => {\r\n\r\n\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\t\t\tconst {width, height} = viewer.renderer.getSize(new THREE.Vector2());\r\n\r\n\t\t\tthis.node.visible = this.visible;\r\n\r\n\t\t\tfor(const cp of this.controlPoints){\r\n\t\t\t\t\r\n\t\t\t\t{ // position\r\n\t\t\t\t\tconst projected = cp.position.clone().project(camera);\r\n\r\n\t\t\t\t\tconst visible = this.visible && (projected.z < 1 && projected.z > -1);\r\n\r\n\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\tconst x = width * (projected.x * 0.5 + 0.5);\r\n\t\t\t\t\t\tconst y = height - height * (projected.y * 0.5 + 0.5);\r\n\r\n\t\t\t\t\t\tcp.positionHandle.svg.style.left = x - cp.positionHandle.svg.clientWidth / 2;\r\n\t\t\t\t\t\tcp.positionHandle.svg.style.top = y - cp.positionHandle.svg.clientHeight / 2;\r\n\t\t\t\t\t\tcp.positionHandle.svg.style.display = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcp.positionHandle.svg.style.display = \"none\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t{ // target\r\n\t\t\t\t\tconst projected = cp.target.clone().project(camera);\r\n\r\n\t\t\t\t\tconst visible = this.visible && (projected.z < 1 && projected.z > -1);\r\n\r\n\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\tconst x = width * (projected.x * 0.5 + 0.5);\r\n\t\t\t\t\t\tconst y = height - height * (projected.y * 0.5 + 0.5);\r\n\r\n\t\t\t\t\t\tcp.targetHandle.svg.style.left = x - cp.targetHandle.svg.clientWidth / 2;\r\n\t\t\t\t\t\tcp.targetHandle.svg.style.top = y - cp.targetHandle.svg.clientHeight / 2;\r\n\t\t\t\t\t\tcp.targetHandle.svg.style.display = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcp.targetHandle.svg.style.display = \"none\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tthis.line.material.resolution.set(width, height);\r\n\r\n\t\t\tthis.updatePath();\r\n\r\n\t\t\t{ // frustum\r\n\t\t\t\tconst frame = this.at(this.t);\r\n\t\t\t\tconst frustum = this.frustum;\r\n\r\n\t\t\t\tfrustum.position.copy(frame.position);\r\n\t\t\t\tfrustum.lookAt(...frame.target.toArray());\r\n\t\t\t\tfrustum.scale.set(20, 20, 20);\r\n\r\n\t\t\t\tfrustum.material.resolution.set(width, height);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\tcreateControlPoint(index){\r\n\r\n\t\tif(index === undefined){\r\n\t\t\tindex = this.controlPoints.length;\r\n\t\t}\r\n\r\n\t\tconst cp = new ControlPoint();\r\n\r\n\r\n\t\tif(this.controlPoints.length >= 2 && index === 0){\r\n\t\t\tconst cp1 = this.controlPoints[0];\r\n\t\t\tconst cp2 = this.controlPoints[1];\r\n\r\n\t\t\tconst dir = cp1.position.clone().sub(cp2.position).multiplyScalar(0.5);\r\n\t\t\tcp.position.copy(cp1.position).add(dir);\r\n\r\n\t\t\tconst tDir = cp1.target.clone().sub(cp2.target).multiplyScalar(0.5);\r\n\t\t\tcp.target.copy(cp1.target).add(tDir);\r\n\t\t}else if(this.controlPoints.length >= 2 && index === this.controlPoints.length){\r\n\t\t\tconst cp1 = this.controlPoints[this.controlPoints.length - 2];\r\n\t\t\tconst cp2 = this.controlPoints[this.controlPoints.length - 1];\r\n\r\n\t\t\tconst dir = cp2.position.clone().sub(cp1.position).multiplyScalar(0.5);\r\n\t\t\tcp.position.copy(cp1.position).add(dir);\r\n\r\n\t\t\tconst tDir = cp2.target.clone().sub(cp1.target).multiplyScalar(0.5);\r\n\t\t\tcp.target.copy(cp2.target).add(tDir);\r\n\t\t}else if(this.controlPoints.length >= 2){\r\n\t\t\tconst cp1 = this.controlPoints[index - 1];\r\n\t\t\tconst cp2 = this.controlPoints[index];\r\n\r\n\t\t\tcp.position.copy(cp1.position.clone().add(cp2.position).multiplyScalar(0.5));\r\n\t\t\tcp.target.copy(cp1.target.clone().add(cp2.target).multiplyScalar(0.5));\r\n\t\t}\r\n\r\n\t\t// cp.position.copy(viewer.scene.view.position);\r\n\t\t// cp.target.copy(viewer.scene.view.getPivot());\r\n\r\n\t\tcp.positionHandle = this.createHandle(cp.position);\r\n\t\tcp.targetHandle = this.createHandle(cp.target);\r\n\r\n\t\tthis.controlPoints.splice(index, 0, cp);\r\n\r\n\t\tthis.dispatchEvent({\r\n\t\t\ttype: \"controlpoint_added\",\r\n\t\t\tcontrolpoint: cp,\r\n\t\t});\r\n\r\n\t\treturn cp;\r\n\t}\r\n\r\n\tremoveControlPoint(cp){\r\n\t\tthis.controlPoints = this.controlPoints.filter(_cp => _cp !== cp);\r\n\r\n\t\tthis.dispatchEvent({\r\n\t\t\ttype: \"controlpoint_removed\",\r\n\t\t\tcontrolpoint: cp,\r\n\t\t});\r\n\r\n\t\tcp.positionHandle.svg.remove();\r\n\t\tcp.targetHandle.svg.remove();\r\n\r\n\t\t// TODO destroy cp\r\n\t}\r\n\r\n\tcreatePath(){\r\n\r\n\t\t{ // position\r\n\t\t\tconst geometry = new LineGeometry();\r\n\r\n\t\t\tlet material = new LineMaterial({ \r\n\t\t\t\tcolor: 0x00ff00, \r\n\t\t\t\tdashSize: 5, \r\n\t\t\t\tgapSize: 2,\r\n\t\t\t\tlinewidth: 2, \r\n\t\t\t\tresolution: new THREE.Vector2(1000, 1000),\r\n\t\t\t});\r\n\r\n\t\t\tconst line = new Line2(geometry, material);\r\n\r\n\t\t\tthis.line = line;\r\n\t\t\tthis.node.add(line);\r\n\t\t}\r\n\r\n\t\t{ // target\r\n\t\t\tconst geometry = new LineGeometry();\r\n\r\n\t\t\tlet material = new LineMaterial({ \r\n\t\t\t\tcolor: 0x0000ff, \r\n\t\t\t\tdashSize: 5, \r\n\t\t\t\tgapSize: 2,\r\n\t\t\t\tlinewidth: 2, \r\n\t\t\t\tresolution: new THREE.Vector2(1000, 1000),\r\n\t\t\t});\r\n\r\n\t\t\tconst line = new Line2(geometry, material);\r\n\r\n\t\t\tthis.targetLine = line;\r\n\t\t\tthis.node.add(line);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateFrustum(){\r\n\r\n\t\tconst f = 0.3;\r\n\r\n\t\tconst positions = [\r\n\t\t\t 0, 0, 0,\r\n\t\t\t-f, -f, +1,\r\n\r\n\t\t\t 0, 0, 0,\r\n\t\t\t f, -f, +1,\r\n\r\n\t\t\t 0, 0, 0,\r\n\t\t\t f, f, +1,\r\n\r\n\t\t\t 0, 0, 0,\r\n\t\t\t-f, f, +1,\r\n\r\n\t\t\t-f, -f, +1,\r\n\t\t\t f, -f, +1,\r\n\r\n\t\t\t f, -f, +1,\r\n\t\t\t f, f, +1,\r\n\r\n\t\t\t f, f, +1,\r\n\t\t\t-f, f, +1,\r\n\r\n\t\t\t-f, f, +1,\r\n\t\t\t-f, -f, +1,\r\n\t\t];\r\n\r\n\t\tconst geometry = new LineGeometry();\r\n\r\n\t\tgeometry.setPositions(positions);\r\n\t\tgeometry.verticesNeedUpdate = true;\r\n\t\tgeometry.computeBoundingSphere();\r\n\r\n\t\tlet material = new LineMaterial({ \r\n\t\t\tcolor: 0xff0000, \r\n\t\t\tlinewidth: 2, \r\n\t\t\tresolution: new THREE.Vector2(1000, 1000),\r\n\t\t});\r\n\r\n\t\tconst line = new Line2(geometry, material);\r\n\t\tline.computeLineDistances();\r\n\t\t\r\n\t\treturn line;\r\n\t}\r\n\r\n\tupdatePath(){\r\n\r\n\t\t{ // positions\r\n\t\t\tconst positions = this.controlPoints.map(cp => cp.position);\r\n\t\t\tconst first = positions[0];\r\n\r\n\t\t\tconst curve = new THREE.CatmullRomCurve3(positions);\r\n\t\t\tcurve.curveType = this.curveType;\r\n\r\n\t\t\tconst n = 100;\r\n\r\n\t\t\tconst curvePositions = [];\r\n\t\t\tfor(let k = 0; k <= n; k++){\r\n\t\t\t\tconst t = k / n;\r\n\r\n\t\t\t\tconst position = curve.getPoint(t).sub(first);\r\n\r\n\t\t\t\tcurvePositions.push(position.x, position.y, position.z);\r\n\t\t\t}\r\n\r\n\t\t\tthis.line.geometry.setPositions(curvePositions);\r\n\t\t\tthis.line.geometry.verticesNeedUpdate = true;\r\n\t\t\tthis.line.geometry.computeBoundingSphere();\r\n\t\t\tthis.line.position.copy(first);\r\n\t\t\tthis.line.computeLineDistances();\r\n\r\n\t\t\tthis.cameraCurve = curve;\r\n\t\t}\r\n\r\n\t\t{ // targets\r\n\t\t\tconst positions = this.controlPoints.map(cp => cp.target);\r\n\t\t\tconst first = positions[0];\r\n\r\n\t\t\tconst curve = new THREE.CatmullRomCurve3(positions);\r\n\t\t\tcurve.curveType = this.curveType;\r\n\r\n\t\t\tconst n = 100;\r\n\r\n\t\t\tconst curvePositions = [];\r\n\t\t\tfor(let k = 0; k <= n; k++){\r\n\t\t\t\tconst t = k / n;\r\n\r\n\t\t\t\tconst position = curve.getPoint(t).sub(first);\r\n\r\n\t\t\t\tcurvePositions.push(position.x, position.y, position.z);\r\n\t\t\t}\r\n\r\n\t\t\tthis.targetLine.geometry.setPositions(curvePositions);\r\n\t\t\tthis.targetLine.geometry.verticesNeedUpdate = true;\r\n\t\t\tthis.targetLine.geometry.computeBoundingSphere();\r\n\t\t\tthis.targetLine.position.copy(first);\r\n\t\t\tthis.targetLine.computeLineDistances();\r\n\r\n\t\t\tthis.targetCurve = curve;\r\n\t\t}\r\n\t}\r\n\r\n\tat(t){\r\n\t\t\r\n\t\tif(t > 1){\r\n\t\t\tt = 1;\r\n\t\t}else if(t < 0){\r\n\t\t\tt = 0;\r\n\t\t}\r\n\r\n\t\tconst camPos = this.cameraCurve.getPointAt(t);\r\n\t\tconst target = this.targetCurve.getPointAt(t);\r\n\r\n\t\tconst frame = {\r\n\t\t\tposition: camPos,\r\n\t\t\ttarget: target,\r\n\t\t};\r\n\r\n\t\treturn frame;\r\n\t}\r\n\r\n\tset(t){\r\n\t\tthis.t = t;\r\n\t}\r\n\r\n\tcreateHandle(vector){\r\n\t\t\r\n\t\tconst svgns = \"http://www.w3.org/2000/svg\";\r\n\t\tconst svg = document.createElementNS(svgns, \"svg\");\r\n\r\n\t\tsvg.setAttribute(\"width\", \"2em\");\r\n\t\tsvg.setAttribute(\"height\", \"2em\");\r\n\t\tsvg.setAttribute(\"position\", \"absolute\");\r\n\r\n\t\tsvg.style.left = \"50px\";\r\n\t\tsvg.style.top = \"50px\";\r\n\t\tsvg.style.position = \"absolute\";\r\n\t\tsvg.style.zIndex = \"10000\";\r\n\r\n\t\tconst circle = document.createElementNS(svgns, 'circle');\r\n\t\tcircle.setAttributeNS(null, 'cx', \"1em\");\r\n\t\tcircle.setAttributeNS(null, 'cy', \"1em\");\r\n\t\tcircle.setAttributeNS(null, 'r', \"0.5em\");\r\n\t\tcircle.setAttributeNS(null, 'style', 'fill: red; stroke: black; stroke-width: 0.2em;' );\r\n\t\tsvg.appendChild(circle);\r\n\r\n\r\n\t\tconst element = this.viewer.renderer.domElement.parentElement;\r\n\t\telement.appendChild(svg);\r\n\r\n\r\n\t\tconst startDrag = (evt) => {\r\n\t\t\tthis.selectedElement = svg;\r\n\r\n\t\t\tdocument.addEventListener(\"mousemove\", drag);\r\n\t\t};\r\n\r\n\t\tconst endDrag = (evt) => {\r\n\t\t\tthis.selectedElement = null;\r\n\r\n\t\t\tdocument.removeEventListener(\"mousemove\", drag);\r\n\t\t};\r\n\r\n\t\tconst drag = (evt) => {\r\n\t\t\tif (this.selectedElement) {\r\n\t\t\t\tevt.preventDefault();\r\n\r\n\t\t\t\tconst rect = viewer.renderer.domElement.getBoundingClientRect();\r\n\r\n\t\t\t\tconst x = evt.clientX - rect.x;\r\n\t\t\t\tconst y = evt.clientY - rect.y;\r\n\r\n\t\t\t\tconst {width, height} = this.viewer.renderer.getSize(new THREE.Vector2());\r\n\t\t\t\tconst camera = this.viewer.scene.getActiveCamera();\r\n\t\t\t\t//const cp = this.controlPoints.find(cp => cp.handle.svg === svg);\r\n\t\t\t\tconst projected = vector.clone().project(camera);\r\n\r\n\t\t\t\tprojected.x = ((x / width) - 0.5) / 0.5;\r\n\t\t\t\tprojected.y = (-(y - height) / height - 0.5) / 0.5;\r\n\r\n\t\t\t\tconst unprojected = projected.clone().unproject(camera);\r\n\t\t\t\tvector.set(unprojected.x, unprojected.y, unprojected.z);\r\n\r\n\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tsvg.addEventListener('mousedown', startDrag);\r\n\t\tsvg.addEventListener('mouseup', endDrag);\r\n\r\n\t\tconst handle = {\r\n\t\t\tsvg: svg,\r\n\t\t};\r\n\r\n\t\treturn handle;\r\n\t}\r\n\r\n\tsetVisible(visible){\r\n\t\tthis.node.visible = visible;\r\n\r\n\t\tconst display = visible ? \"\" : \"none\";\r\n\r\n\t\tfor(const cp of this.controlPoints){\r\n\t\t\tcp.positionHandle.svg.style.display = display;\r\n\t\t\tcp.targetHandle.svg.style.display = display;\r\n\t\t}\r\n\r\n\t\tthis.visible = visible;\r\n\t}\r\n\r\n\tsetDuration(duration){\r\n\t\tthis.duration = duration;\r\n\t}\r\n\r\n\tgetDuration(duration){\r\n\t\treturn this.duration;\r\n\t}\r\n\r\n\tplay(){\r\n\r\n\t\tconst tStart = performance.now();\r\n\t\tconst duration = this.duration;\r\n\r\n\t\tconst originalyVisible = this.visible;\r\n\t\tthis.setVisible(false);\r\n\r\n\t\tconst onUpdate = (delta) => {\r\n\r\n\t\t\tlet tNow = performance.now();\r\n\t\t\tlet elapsed = (tNow - tStart) / 1000;\r\n\t\t\tlet t = elapsed / duration;\r\n\r\n\t\t\tthis.set(t);\r\n\r\n\t\t\tconst frame = this.at(t);\r\n\r\n\t\t\tviewer.scene.view.position.copy(frame.position);\r\n\t\t\tviewer.scene.view.lookAt(frame.target);\r\n\r\n\r\n\t\t\tif(t > 1){\r\n\t\t\t\tthis.setVisible(originalyVisible);\r\n\r\n\t\t\t\tthis.viewer.removeEventListener(\"update\", onUpdate);\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\tthis.viewer.addEventListener(\"update\", onUpdate);\r\n\r\n\t}\r\n\r\n}\r\n\r\n\r\n","\r\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\r\nimport {Annotation} from \"../Annotation.js\";\r\nimport {Measure} from \"../utils/Measure.js\";\r\nimport {CameraAnimation} from \"../modules/CameraAnimation/CameraAnimation.js\";\r\nimport {Utils} from \"../utils.js\";\r\nimport {PointSizeType} from \"../defines.js\";\r\n\r\nfunction loadPointCloud(viewer, data){\r\n\r\n\tlet loadMaterial = (target) => {\r\n\r\n\t\tif(data.material){\r\n\r\n\t\t\tif(data.material.activeAttributeName != null){\r\n\t\t\t\ttarget.activeAttributeName = data.material.activeAttributeName;\r\n\t\t\t}\r\n\r\n\t\t\tif(data.material.ranges != null){\r\n\t\t\t\tfor(let range of data.material.ranges){\r\n\r\n\t\t\t\t\tif(range.name === \"elevationRange\"){\r\n\t\t\t\t\t\ttarget.elevationRange = range.value;\r\n\t\t\t\t\t}else if(range.name === \"intensityRange\"){\r\n\t\t\t\t\t\ttarget.intensityRange = range.value;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\ttarget.setRange(range.name, range.value);\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\tif(data.material.size != null){\r\n\t\t\t\ttarget.size = data.material.size;\r\n\t\t\t}\r\n\r\n\t\t\tif(data.material.minSize != null){\r\n\t\t\t\ttarget.minSize = data.material.minSize;\r\n\t\t\t}\r\n\r\n\t\t\tif(data.material.pointSizeType != null){\r\n\t\t\t\ttarget.pointSizeType = PointSizeType[data.material.pointSizeType];\r\n\t\t\t}\r\n\r\n\t\t\tif(data.material.matcap != null){\r\n\t\t\t\ttarget.matcap = data.material.matcap;\r\n\t\t\t}\r\n\r\n\t\t}else if(data.activeAttributeName != null){\r\n\t\t\ttarget.activeAttributeName = data.activeAttributeName;\r\n\t\t}else{\r\n\t\t\t// no material data\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tconst promise = new Promise((resolve) => {\r\n\r\n\t\tconst names = viewer.scene.pointclouds.map(p => p.name);\r\n\t\tconst alreadyExists = names.includes(data.name);\r\n\r\n\t\tif(alreadyExists){\r\n\t\t\tresolve();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tPotree.loadPointCloud(data.url, data.name, (e) => {\r\n\t\t\tconst {pointcloud} = e;\r\n\r\n\t\t\tpointcloud.position.set(...data.position);\r\n\t\t\tpointcloud.rotation.set(...data.rotation);\r\n\t\t\tpointcloud.scale.set(...data.scale);\r\n\r\n\t\t\tloadMaterial(pointcloud.material);\r\n\r\n\t\t\tviewer.scene.addPointCloud(pointcloud);\r\n\r\n\t\t\tresolve(pointcloud);\r\n\t\t});\r\n\t});\r\n\r\n\treturn promise;\r\n}\r\n\r\nfunction loadMeasurement(viewer, data){\r\n\r\n\tconst duplicate = viewer.scene.measurements.find(measure => measure.uuid === data.uuid);\r\n\tif(duplicate){\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst measure = new Measure();\r\n\r\n\tmeasure.uuid = data.uuid;\r\n\tmeasure.name = data.name;\r\n\tmeasure.showDistances = data.showDistances;\r\n\tmeasure.showCoordinates = data.showCoordinates;\r\n\tmeasure.showArea = data.showArea;\r\n\tmeasure.closed = data.closed;\r\n\tmeasure.showAngles = data.showAngles;\r\n\tmeasure.showHeight = data.showHeight;\r\n\tmeasure.showCircle = data.showCircle;\r\n\tmeasure.showAzimuth = data.showAzimuth;\r\n\tmeasure.showEdges = data.showEdges;\r\n\t// color\r\n\r\n\tfor(const point of data.points){\r\n\t\tconst pos = new THREE.Vector3(...point);\r\n\t\tmeasure.addMarker(pos);\r\n\t}\r\n\r\n\tviewer.scene.addMeasurement(measure);\r\n\r\n}\r\n\r\nfunction loadVolume(viewer, data){\r\n\r\n\tconst duplicate = viewer.scene.volumes.find(volume => volume.uuid === data.uuid);\r\n\tif(duplicate){\r\n\t\treturn;\r\n\t}\r\n\r\n\tlet volume = new Potree[data.type];\r\n\r\n\tvolume.uuid = data.uuid;\r\n\tvolume.name = data.name;\r\n\tvolume.position.set(...data.position);\r\n\tvolume.rotation.set(...data.rotation);\r\n\tvolume.scale.set(...data.scale);\r\n\tvolume.visible = data.visible;\r\n\tvolume.clip = data.clip;\r\n\r\n\tviewer.scene.addVolume(volume);\r\n}\r\n\r\nfunction loadCameraAnimation(viewer, data){\r\n\r\n\tconst duplicate = viewer.scene.cameraAnimations.find(a => a.uuid === data.uuid);\r\n\tif(duplicate){\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst animation = new CameraAnimation(viewer);\r\n\r\n\tanimation.uuid = data.uuid;\r\n\tanimation.name = data.name;\r\n\tanimation.duration = data.duration;\r\n\tanimation.t = data.t;\r\n\tanimation.curveType = data.curveType;\r\n\tanimation.visible = data.visible;\r\n\tanimation.controlPoints = [];\r\n\r\n\tfor(const cpdata of data.controlPoints){\r\n\t\tconst cp = animation.createControlPoint();\r\n\r\n\t\tcp.position.set(...cpdata.position);\r\n\t\tcp.target.set(...cpdata.target);\r\n\t}\r\n\r\n\tviewer.scene.addCameraAnimation(animation);\r\n}\r\n\r\nfunction loadOrientedImages(viewer, images){\r\n\r\n\tconst {cameraParamsPath, imageParamsPath} = images;\r\n\r\n\tconst duplicate = viewer.scene.orientedImages.find(i => i.imageParamsPath === imageParamsPath);\r\n\tif(duplicate){\r\n\t\treturn;\r\n\t}\r\n\r\n\tPotree.OrientedImageLoader.load(cameraParamsPath, imageParamsPath, viewer).then( images => {\r\n\t\tviewer.scene.addOrientedImages(images);\r\n\t});\r\n\r\n}\r\n\r\nfunction loadGeopackage(viewer, geopackage){\r\n\r\n\tconst path = geopackage.path;\r\n\r\n\tconst duplicate = viewer.scene.geopackages.find(i => i.path === path);\r\n\tif(duplicate){\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst projection = viewer.getProjection();\r\n\r\n\tproj4.defs(\"WGS84\", \"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs\");\r\n\tproj4.defs(\"pointcloud\", projection);\r\n\tconst transform = proj4(\"WGS84\", \"pointcloud\");\r\n\tconst params = {\r\n\t\ttransform: transform,\r\n\t};\r\n\r\n\tPotree.GeoPackageLoader.loadUrl(path, params).then(data => {\r\n\t\tviewer.scene.addGeopackage(data);\r\n\t});\r\n\t\r\n\r\n}\r\n\r\nfunction loadSettings(viewer, data){\r\n\tif(!data){\r\n\t\treturn;\r\n\t}\r\n\r\n\tviewer.setPointBudget(data.pointBudget);\r\n\tviewer.setFOV(data.fov);\r\n\tviewer.setEDLEnabled(data.edlEnabled);\r\n\tviewer.setEDLRadius(data.edlRadius);\r\n\tviewer.setEDLStrength(data.edlStrength);\r\n\tviewer.setBackground(data.background);\r\n\tviewer.setMinNodeSize(data.minNodeSize);\r\n\tviewer.setShowBoundingBox(data.showBoundingBoxes);\r\n}\r\n\r\nfunction loadView(viewer, view){\r\n\tviewer.scene.view.position.set(...view.position);\r\n\tviewer.scene.view.lookAt(...view.target);\r\n}\r\n\r\nfunction loadAnnotationItem(item){\r\n\r\n\tconst annotation = new Annotation({\r\n\t\tposition: item.position,\r\n\t\ttitle: item.title,\r\n\t\tcameraPosition: item.cameraPosition,\r\n\t\tcameraTarget: item.cameraTarget,\r\n\t});\r\n\r\n\r\n\tannotation.description = item.description;\r\n\tannotation.uuid = item.uuid;\r\n\r\n\tif(item.offset){\r\n\t\tannotation.offset.set(...item.offset);\r\n\t}\r\n\r\n\treturn annotation;\r\n}\r\n\r\nfunction loadAnnotations(viewer, data){\r\n\r\n\tif(!data){\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst findDuplicate = (item) => {\r\n\r\n\t\tlet duplicate = null;\r\n\r\n\t\tviewer.scene.annotations.traverse( a => {\r\n\t\t\tif(a.uuid === item.uuid){\r\n\t\t\t\tduplicate = a;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn duplicate;\r\n\t};\r\n\r\n\tconst traverse = (item, parent) => {\r\n\r\n\t\tconst duplicate = findDuplicate(item);\r\n\t\tif(duplicate){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst annotation = loadAnnotationItem(item);\r\n\r\n\t\tfor(const childItem of item.children){\r\n\t\t\ttraverse(childItem, annotation);\r\n\t\t}\r\n\r\n\t\tparent.add(annotation);\r\n\r\n\t};\r\n\r\n\tfor(const item of data){\r\n\t\ttraverse(item, viewer.scene.annotations);\r\n\t}\r\n\r\n}\r\n\r\nfunction loadProfile(viewer, data){\r\n\t\r\n\tconst {name, points} = data;\r\n\r\n\tconst duplicate = viewer.scene.profiles.find(profile => profile.uuid === data.uuid);\r\n\tif(duplicate){\r\n\t\treturn;\r\n\t}\r\n\r\n\tlet profile = new Potree.Profile();\r\n\tprofile.name = name;\r\n\tprofile.uuid = data.uuid;\r\n\r\n\tprofile.setWidth(data.width);\r\n\r\n\tfor(const point of points){\r\n\t\tprofile.addMarker(new THREE.Vector3(...point));\r\n\t}\r\n\t\r\n\tviewer.scene.addProfile(profile);\r\n}\r\n\r\nfunction loadClassification(viewer, data){\r\n\tif(!data){\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst classifications = data;\r\n\r\n\tviewer.setClassifications(classifications);\r\n}\r\n\r\nexport async function loadProject(viewer, data){\r\n\r\n\tif(data.type !== \"Potree\"){\r\n\t\tconsole.error(\"not a valid Potree project\");\r\n\t\treturn;\r\n\t}\r\n\r\n\tloadSettings(viewer, data.settings);\r\n\r\n\tloadView(viewer, data.view);\r\n\r\n\tconst pointcloudPromises = [];\r\n\tfor(const pointcloud of data.pointclouds){\r\n\t\tconst promise = loadPointCloud(viewer, pointcloud);\r\n\t\tpointcloudPromises.push(promise);\r\n\t}\r\n\r\n\tfor(const measure of data.measurements){\r\n\t\tloadMeasurement(viewer, measure);\r\n\t}\r\n\r\n\tfor(const volume of data.volumes){\r\n\t\tloadVolume(viewer, volume);\r\n\t}\r\n\r\n\tfor(const animation of data.cameraAnimations){\r\n\t\tloadCameraAnimation(viewer, animation);\r\n\t}\r\n\r\n\tfor(const profile of data.profiles){\r\n\t\tloadProfile(viewer, profile);\r\n\t}\r\n\r\n\tif(data.orientedImages){\r\n\t\tfor(const images of data.orientedImages){\r\n\t\t\tloadOrientedImages(viewer, images);\r\n\t\t}\r\n\t}\r\n\r\n\tloadAnnotations(viewer, data.annotations);\r\n\r\n\tloadClassification(viewer, data.classification);\r\n\r\n\t// need to load at least one point cloud that defines the scene projection,\r\n\t// before we can load stuff in other projections such as geopackages\r\n\t//await Promise.any(pointcloudPromises); // (not yet supported)\r\n\tUtils.waitAny(pointcloudPromises).then( () => {\r\n\t\tif(data.geopackages){\r\n\t\t\tfor(const geopackage of data.geopackages){\r\n\t\t\t\tloadGeopackage(viewer, geopackage);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tawait Promise.all(pointcloudPromises);\r\n}","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Shaders} from \"../../build/shaders/shaders.js\";\n\n//\n// Algorithm by Christian Boucheny\n// shader code taken and adapted from CloudCompare\n//\n// see\n// https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL\n// http://www.kitware.com/source/home/post/9\n// https://tel.archives-ouvertes.fr/tel-00438464/document p. 115+ (french)\n\nexport class EyeDomeLightingMaterial extends THREE.RawShaderMaterial{\n\n\tconstructor(parameters = {}){\n\t\tsuper();\n\n\t\tlet uniforms = {\n\t\t\tscreenWidth: { type: 'f', \tvalue: 0 },\n\t\t\tscreenHeight: { type: 'f', \tvalue: 0 },\n\t\t\tedlStrength: { type: 'f', \tvalue: 1.0 },\n\t\t\tuNear: { type: 'f', \tvalue: 1.0 },\n\t\t\tuFar: { type: 'f', \tvalue: 1.0 },\n\t\t\tradius: { type: 'f', \tvalue: 1.0 },\n\t\t\tneighbours: { type: '2fv', \tvalue: [] },\n\t\t\tdepthMap: { type: 't', \tvalue: null },\n\t\t\tuEDLColor: { type: 't', \tvalue: null },\n\t\t\tuEDLDepth: { type: 't', \tvalue: null },\n\t\t\topacity: { type: 'f',\tvalue: 1.0 },\n\t\t\tuProj: { type: \"Matrix4fv\", value: [] },\n\t\t};\n\n\t\tthis.setValues({\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: this.getDefines() + Shaders['edl.vs'],\n\t\t\tfragmentShader: this.getDefines() + Shaders['edl.fs'],\n\t\t\tlights: false\n\t\t});\n\n\t\tthis.neighbourCount = 8;\n\t}\n\n\tgetDefines() {\n\t\tlet defines = '';\n\n\t\tdefines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\\n';\n\n\t\treturn defines;\n\t}\n\n\tupdateShaderSource() {\n\n\t\tlet vs = this.getDefines() + Shaders['edl.vs'];\n\t\tlet fs = this.getDefines() + Shaders['edl.fs'];\n\n\t\tthis.setValues({\n\t\t\tvertexShader: vs,\n\t\t\tfragmentShader: fs\n\t\t});\n\n\t\tthis.uniforms.neighbours.value = this.neighbours;\n\n\t\tthis.needsUpdate = true;\n\t}\n\n\tget neighbourCount(){\n\t\treturn this._neighbourCount;\n\t}\n\n\tset neighbourCount(value){\n\t\tif (this._neighbourCount !== value) {\n\t\t\tthis._neighbourCount = value;\n\t\t\tthis.neighbours = new Float32Array(this._neighbourCount * 2);\n\t\t\tfor (let c = 0; c < this._neighbourCount; c++) {\n\t\t\t\tthis.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount);\n\t\t\t\tthis.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount);\n\t\t\t}\n\n\t\t\tthis.updateShaderSource();\n\t\t}\n\t}\n\n\t\n}\n\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Shaders} from \"../../build/shaders/shaders.js\";\n\n\nexport class NormalizationEDLMaterial extends THREE.RawShaderMaterial{\n\n\tconstructor(parameters = {}){\n\t\tsuper();\n\n\t\tlet uniforms = {\n\t\t\tscreenWidth: { type: 'f', value: 0 },\n\t\t\tscreenHeight: { type: 'f', value: 0 },\n\t\t\tedlStrength: { type: 'f', value: 1.0 },\n\t\t\tradius: { type: 'f', value: 1.0 },\n\t\t\tneighbours: { type: '2fv', value: [] },\n\t\t\tuEDLMap: { type: 't', value: null },\n\t\t\tuDepthMap: { type: 't', value: null },\n\t\t\tuWeightMap: { type: 't', value: null },\n\t\t};\n\n\t\tthis.setValues({\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: this.getDefines() + Shaders['normalize.vs'],\n\t\t\tfragmentShader: this.getDefines() + Shaders['normalize_and_edl.fs'],\n\t\t});\n\n\t\tthis.neighbourCount = 8;\n\t}\n\n\tgetDefines() {\n\t\tlet defines = '';\n\n\t\tdefines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\\n';\n\n\t\treturn defines;\n\t}\n\n\tupdateShaderSource() {\n\n\t\tlet vs = this.getDefines() + Shaders['normalize.vs'];\n\t\tlet fs = this.getDefines() + Shaders['normalize_and_edl.fs'];\n\n\t\tthis.setValues({\n\t\t\tvertexShader: vs,\n\t\t\tfragmentShader: fs\n\t\t});\n\n\t\tthis.uniforms.neighbours.value = this.neighbours;\n\n\t\tthis.needsUpdate = true;\n\t}\n\n\tget neighbourCount(){\n\t\treturn this._neighbourCount;\n\t}\n\n\tset neighbourCount(value){\n\t\tif (this._neighbourCount !== value) {\n\t\t\tthis._neighbourCount = value;\n\t\t\tthis.neighbours = new Float32Array(this._neighbourCount * 2);\n\t\t\tfor (let c = 0; c < this._neighbourCount; c++) {\n\t\t\t\tthis.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount);\n\t\t\t\tthis.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount);\n\t\t\t}\n\n\t\t\tthis.updateShaderSource();\n\t\t}\n\t}\n\t\n}\n\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Shaders} from \"../../build/shaders/shaders.js\";\n\nexport class NormalizationMaterial extends THREE.RawShaderMaterial{\n\n\tconstructor(parameters = {}){\n\t\tsuper();\n\n\t\tlet uniforms = {\n\t\t\tuDepthMap:\t\t{ type: 't', value: null },\n\t\t\tuWeightMap:\t\t{ type: 't', value: null },\n\t\t};\n\n\t\tthis.setValues({\n\t\t\tuniforms: uniforms,\n\t\t\tvertexShader: this.getDefines() + Shaders['normalize.vs'],\n\t\t\tfragmentShader: this.getDefines() + Shaders['normalize.fs'],\n\t\t});\n\t}\n\n\tgetDefines() {\n\t\tlet defines = '';\n\n\t\treturn defines;\n\t}\n\n\tupdateShaderSource() {\n\n\t\tlet vs = this.getDefines() + Shaders['normalize.vs'];\n\t\tlet fs = this.getDefines() + Shaders['normalize.fs'];\n\n\t\tthis.setValues({\n\t\t\tvertexShader: vs,\n\t\t\tfragmentShader: fs\n\t\t});\n\n\t\tthis.needsUpdate = true;\n\t}\n\n}\n\n","\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Version} from \"../Version.js\";\nimport {XHRFactory} from \"../XHRFactory.js\";\n\n/**\n * laslaz code taken and adapted from plas.io js-laslaz\n *\thttp://plas.io/\n * https://github.com/verma/plasio\n *\n * Thanks to Uday Verma and Howard Butler\n *\n */\n\nexport class LasLazLoader {\n\n\tconstructor (version, extension) {\n\t\tif (typeof (version) === 'string') {\n\t\t\tthis.version = new Version(version);\n\t\t} else {\n\t\t\tthis.version = version;\n\t\t}\n\n\t\tthis.extension = extension;\n\t}\n\n\tstatic progressCB () {\n\n\t}\n\n\tload (node) {\n\t\tif (node.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet url = node.getURL();\n\n\t\tif (this.version.equalOrHigher('1.4')) {\n\t\t\turl += `.${this.extension}`;\n\t\t}\n\n\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.responseType = 'arraybuffer';\n\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\txhr.onreadystatechange = () => {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tif (xhr.status === 200 || xhr.status === 0) {\n\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + url);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\txhr.send(null);\n\t}\n\n\tasync parse(node, buffer){\n\t\tlet lf = new LASFile(buffer);\n\t\tlet handler = new LasLazBatcher(node);\n\n\t\ttry{\n\t\t\t await lf.open();\n\t\t\t lf.isOpen = true;\n\t\t}catch(e){\n\t\t\tconsole.log(\"failed to open file. :(\");\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet header = await lf.getHeader();\n\n\t\tlet skip = 1;\n\t\tlet totalRead = 0;\n\t\tlet totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip);\n\n\t\tlet hasMoreData = true;\n\n\t\twhile(hasMoreData){\n\t\t\tlet data = await lf.readData(1000 * 1000, 0, skip);\n\n\t\t\thandler.push(new LASDecoder(data.buffer,\n\t\t\t\theader.pointsFormatId,\n\t\t\t\theader.pointsStructSize,\n\t\t\t\tdata.count,\n\t\t\t\theader.scale,\n\t\t\t\theader.offset,\n\t\t\t\theader.mins, header.maxs));\n\n\t\t\ttotalRead += data.count;\n\t\t\tLasLazLoader.progressCB(totalRead / totalToRead);\n\n\t\t\thasMoreData = data.hasMoreData;\n\t\t}\n\n\t\theader.totalRead = totalRead;\n\t\theader.versionAsString = lf.versionAsString;\n\t\theader.isCompressed = lf.isCompressed;\n\n\t\tLasLazLoader.progressCB(1);\n\n\t\ttry{\n\t\t\tawait lf.close();\n\n\t\t\tlf.isOpen = false;\n\t\t}catch(e){\n\t\t\tconsole.error(\"failed to close las/laz file!!!\");\n\t\t\t\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\thandle (node, url) {\n\n\t}\n};\n\nexport class LasLazBatcher{\n\n\tconstructor (node) {\n\t\tthis.node = node;\n\t}\n\n\tpush (lasBuffer) {\n\t\tconst workerPath = Potree.scriptPath + '/workers/LASDecoderWorker.js';\n\t\tconst worker = Potree.workerPool.getWorker(workerPath);\n\t\tconst node = this.node;\n\t\tconst pointAttributes = node.pcoGeometry.pointAttributes;\n\n\t\tworker.onmessage = (e) => {\n\t\t\tlet geometry = new THREE.BufferGeometry();\n\t\t\tlet numPoints = lasBuffer.pointsCount;\n\n\t\t\tlet positions = new Float32Array(e.data.position);\n\t\t\tlet colors = new Uint8Array(e.data.color);\n\t\t\tlet intensities = new Float32Array(e.data.intensity);\n\t\t\tlet classifications = new Uint8Array(e.data.classification);\n\t\t\tlet returnNumbers = new Uint8Array(e.data.returnNumber);\n\t\t\tlet numberOfReturns = new Uint8Array(e.data.numberOfReturns);\n\t\t\tlet pointSourceIDs = new Uint16Array(e.data.pointSourceID);\n\t\t\tlet indices = new Uint8Array(e.data.indices);\n\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n\t\t\tgeometry.setAttribute('color', new THREE.BufferAttribute(colors, 4, true));\n\t\t\tgeometry.setAttribute('intensity', new THREE.BufferAttribute(intensities, 1));\n\t\t\tgeometry.setAttribute('classification', new THREE.BufferAttribute(classifications, 1));\n\t\t\tgeometry.setAttribute('return number', new THREE.BufferAttribute(returnNumbers, 1));\n\t\t\tgeometry.setAttribute('number of returns', new THREE.BufferAttribute(numberOfReturns, 1));\n\t\t\tgeometry.setAttribute('source id', new THREE.BufferAttribute(pointSourceIDs, 1));\n\t\t\tgeometry.setAttribute('indices', new THREE.BufferAttribute(indices, 4));\n\t\t\tgeometry.attributes.indices.normalized = true;\n\n\t\t\tfor(const key in e.data.ranges){\n\t\t\t\tconst range = e.data.ranges[key];\n\n\t\t\t\tconst attribute = pointAttributes.attributes.find(a => a.name === key);\n\t\t\t\tattribute.range[0] = Math.min(attribute.range[0], range[0]);\n\t\t\t\tattribute.range[1] = Math.max(attribute.range[1], range[1]);\n\t\t\t}\n\n\t\t\tlet tightBoundingBox = new THREE.Box3(\n\t\t\t\tnew THREE.Vector3().fromArray(e.data.tightBoundingBox.min),\n\t\t\t\tnew THREE.Vector3().fromArray(e.data.tightBoundingBox.max)\n\t\t\t);\n\n\t\t\tgeometry.boundingBox = this.node.boundingBox;\n\t\t\tthis.node.tightBoundingBox = tightBoundingBox;\n\n\t\t\tthis.node.geometry = geometry;\n\t\t\tthis.node.numPoints = numPoints;\n\t\t\tthis.node.loaded = true;\n\t\t\tthis.node.loading = false;\n\t\t\tPotree.numNodesLoading--;\n\t\t\tthis.node.mean = new THREE.Vector3(...e.data.mean);\n\n\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\t\t};\n\n\t\tlet message = {\n\t\t\tbuffer: lasBuffer.arrayb,\n\t\t\tnumPoints: lasBuffer.pointsCount,\n\t\t\tpointSize: lasBuffer.pointSize,\n\t\t\tpointFormatID: 2,\n\t\t\tscale: lasBuffer.scale,\n\t\t\toffset: lasBuffer.offset,\n\t\t\tmins: lasBuffer.mins,\n\t\t\tmaxs: lasBuffer.maxs\n\t\t};\n\t\tworker.postMessage(message, [message.buffer]);\n\t};\n}\n","\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Version} from \"../Version.js\";\nimport {XHRFactory} from \"../XHRFactory.js\";\n\n\nexport class BinaryLoader{\n\n\tconstructor(version, boundingBox, scale){\n\t\tif (typeof (version) === 'string') {\n\t\t\tthis.version = new Version(version);\n\t\t} else {\n\t\t\tthis.version = version;\n\t\t}\n\n\t\tthis.boundingBox = boundingBox;\n\t\tthis.scale = scale;\n\t}\n\n\tload(node){\n\t\tif (node.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet url = node.getURL();\n\n\t\tif (this.version.equalOrHigher('1.4')) {\n\t\t\turl += '.bin';\n\t\t}\n\n\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.responseType = 'arraybuffer';\n\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\txhr.onreadystatechange = () => {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tif((xhr.status === 200 || xhr.status === 0) && xhr.response !== null){\n\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t} else {\n\t\t\t\t\t//console.error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`);\n\t\t\t\t\tthrow new Error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n\t\ttry {\n\t\t\txhr.send(null);\n\t\t} catch (e) {\n\t\t\tconsole.log('fehler beim laden der punktwolke: ' + e);\n\t\t}\n\t};\n\n\tparse(node, buffer){\n\t\tlet pointAttributes = node.pcoGeometry.pointAttributes;\n\t\tlet numPoints = buffer.byteLength / node.pcoGeometry.pointAttributes.byteSize;\n\n\t\tif (this.version.upTo('1.5')) {\n\t\t\tnode.numPoints = numPoints;\n\t\t}\n\n\t\tlet workerPath = Potree.scriptPath + '/workers/BinaryDecoderWorker.js';\n\t\tlet worker = Potree.workerPool.getWorker(workerPath);\n\n\t\tworker.onmessage = function (e) {\n\n\t\t\tlet data = e.data;\n\t\t\tlet buffers = data.attributeBuffers;\n\t\t\tlet tightBoundingBox = new THREE.Box3(\n\t\t\t\tnew THREE.Vector3().fromArray(data.tightBoundingBox.min),\n\t\t\t\tnew THREE.Vector3().fromArray(data.tightBoundingBox.max)\n\t\t\t);\n\n\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\n\t\t\tlet geometry = new THREE.BufferGeometry();\n\n\t\t\tfor(let property in buffers){\n\t\t\t\tlet buffer = buffers[property].buffer;\n\t\t\t\tlet batchAttribute = buffers[property].attribute;\n\n\t\t\t\tif (property === \"POSITION_CARTESIAN\") {\n\t\t\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t} else if (property === \"rgba\") {\n\t\t\t\t\tgeometry.setAttribute(\"rgba\", new THREE.BufferAttribute(new Uint8Array(buffer), 4, true));\n\t\t\t\t} else if (property === \"NORMAL_SPHEREMAPPED\") {\n\t\t\t\t\tgeometry.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t} else if (property === \"NORMAL_OCT16\") {\n\t\t\t\t\tgeometry.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t} else if (property === \"NORMAL\") {\n\t\t\t\t\tgeometry.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t} else if (property === \"INDICES\") {\n\t\t\t\t\tlet bufferAttribute = new THREE.BufferAttribute(new Uint8Array(buffer), 4);\n\t\t\t\t\tbufferAttribute.normalized = true;\n\t\t\t\t\tgeometry.setAttribute('indices', bufferAttribute);\n\t\t\t\t} else if (property === \"SPACING\") {\n\t\t\t\t\tlet bufferAttribute = new THREE.BufferAttribute(new Float32Array(buffer), 1);\n\t\t\t\t\tgeometry.setAttribute('spacing', bufferAttribute);\n\t\t\t\t} else {\n\t\t\t\t\tconst bufferAttribute = new THREE.BufferAttribute(new Float32Array(buffer), 1);\n\n\t\t\t\t\tbufferAttribute.potree = {\n\t\t\t\t\t\toffset: buffers[property].offset,\n\t\t\t\t\t\tscale: buffers[property].scale,\n\t\t\t\t\t\tpreciseBuffer: buffers[property].preciseBuffer,\n\t\t\t\t\t\trange: batchAttribute.range,\n\t\t\t\t\t};\n\n\t\t\t\t\tgeometry.setAttribute(property, bufferAttribute);\n\n\t\t\t\t\tconst attribute = pointAttributes.attributes.find(a => a.name === batchAttribute.name);\n\t\t\t\t\tattribute.range[0] = Math.min(attribute.range[0], batchAttribute.range[0]);\n\t\t\t\t\tattribute.range[1] = Math.max(attribute.range[1], batchAttribute.range[1]);\n\n\t\t\t\t\tif(node.getLevel() === 0){\n\t\t\t\t\t\tattribute.initialRange = batchAttribute.range;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttightBoundingBox.max.sub(tightBoundingBox.min);\n\t\t\ttightBoundingBox.min.set(0, 0, 0);\n\n\t\t\tlet numPoints = e.data.buffer.byteLength / pointAttributes.byteSize;\n\t\t\t\n\t\t\tnode.numPoints = numPoints;\n\t\t\tnode.geometry = geometry;\n\t\t\tnode.mean = new THREE.Vector3(...data.mean);\n\t\t\tnode.tightBoundingBox = tightBoundingBox;\n\t\t\tnode.loaded = true;\n\t\t\tnode.loading = false;\n\t\t\tnode.estimatedSpacing = data.estimatedSpacing;\n\t\t\tPotree.numNodesLoading--;\n\t\t};\n\n\t\tlet message = {\n\t\t\tbuffer: buffer,\n\t\t\tpointAttributes: pointAttributes,\n\t\t\tversion: this.version.version,\n\t\t\tmin: [ node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z ],\n\t\t\toffset: [node.pcoGeometry.offset.x, node.pcoGeometry.offset.y, node.pcoGeometry.offset.z],\n\t\t\tscale: this.scale,\n\t\t\tspacing: node.spacing,\n\t\t\thasChildren: node.hasChildren,\n\t\t\tname: node.name\n\t\t};\n\t\tworker.postMessage(message, [message.buffer]);\n\t};\n\n\t\n}\n\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {PointCloudOctreeGeometry, PointCloudOctreeGeometryNode} from \"../PointCloudOctreeGeometry.js\";\nimport {Version} from \"../Version.js\";\nimport {XHRFactory} from \"../XHRFactory.js\";\nimport {LasLazLoader} from \"./LasLazLoader.js\";\nimport {BinaryLoader} from \"./BinaryLoader.js\";\nimport {Utils} from \"../utils.js\";\nimport {PointAttribute, PointAttributes, PointAttributeTypes} from \"./PointAttributes.js\";\n\nfunction parseAttributes(cloudjs){\n\n\tlet version = new Version(cloudjs.version);\n\n\tconst replacements = {\n\t\t\"COLOR_PACKED\": \"rgba\",\n\t\t\"RGBA\": \"rgba\",\n\t\t\"INTENSITY\": \"intensity\",\n\t\t\"CLASSIFICATION\": \"classification\",\n\t\t\"GPS_TIME\": \"gps-time\",\n\t};\n\n\tconst replaceOldNames = (old) => {\n\t\tif(replacements[old]){\n\t\t\treturn replacements[old];\n\t\t}else{\n\t\t\treturn old;\n\t\t}\n\t};\n\n\tconst pointAttributes = [];\n\tif(version.upTo('1.7')){\n\t\t\n\t\tfor(let attributeName of cloudjs.pointAttributes){\n\t\t\tconst oldAttribute = PointAttribute[attributeName];\n\n\t\t\tconst attribute = {\n\t\t\t\tname: oldAttribute.name,\n\t\t\t\tsize: oldAttribute.byteSize,\n\t\t\t\telements: oldAttribute.numElements,\n\t\t\t\telementSize: oldAttribute.byteSize / oldAttribute.numElements,\n\t\t\t\ttype: oldAttribute.type.name,\n\t\t\t\tdescription: \"\",\n\t\t\t};\n\n\t\t\tpointAttributes.push(attribute);\n\t\t}\n\n\t}else{\n\t\tpointAttributes.push(...cloudjs.pointAttributes);\n\t}\n\n\n\t{\n\t\tconst attributes = new PointAttributes();\n\n\t\tconst typeConversion = {\n\t\t\tint8: PointAttributeTypes.DATA_TYPE_INT8,\n\t\t\tint16: PointAttributeTypes.DATA_TYPE_INT16,\n\t\t\tint32: PointAttributeTypes.DATA_TYPE_INT32,\n\t\t\tint64: PointAttributeTypes.DATA_TYPE_INT64,\n\t\t\tuint8: PointAttributeTypes.DATA_TYPE_UINT8,\n\t\t\tuint16: PointAttributeTypes.DATA_TYPE_UINT16,\n\t\t\tuint32: PointAttributeTypes.DATA_TYPE_UINT32,\n\t\t\tuint64: PointAttributeTypes.DATA_TYPE_UINT64,\n\t\t\tdouble: PointAttributeTypes.DATA_TYPE_DOUBLE,\n\t\t\tfloat: PointAttributeTypes.DATA_TYPE_FLOAT,\n\t\t};\n\n\t\tfor(const jsAttribute of pointAttributes){\n\t\t\tconst name = replaceOldNames(jsAttribute.name);\n\t\t\tconst type = typeConversion[jsAttribute.type];\n\t\t\tconst numElements = jsAttribute.elements;\n\t\t\tconst description = jsAttribute.description;\n\n\t\t\tconst attribute = new PointAttribute(name, type, numElements);\n\n\t\t\tattributes.add(attribute);\n\t\t}\n\n\t\t{\n\t\t\t// check if it has normals\n\t\t\tlet hasNormals = \n\t\t\t\tpointAttributes.find(a => a.name === \"NormalX\") !== undefined &&\n\t\t\t\tpointAttributes.find(a => a.name === \"NormalY\") !== undefined &&\n\t\t\t\tpointAttributes.find(a => a.name === \"NormalZ\") !== undefined;\n\n\t\t\tif(hasNormals){\n\t\t\t\tlet vector = {\n\t\t\t\t\tname: \"NORMAL\",\n\t\t\t\t\tattributes: [\"NormalX\", \"NormalY\", \"NormalZ\"],\n\t\t\t\t};\n\t\t\t\tattributes.addVector(vector);\n\t\t\t}\n\t\t}\n\n\t\treturn attributes;\n\t}\n\n}\n\nfunction lasLazAttributes(fMno){\n\tconst attributes = new PointAttributes();\n\n\tattributes.add(PointAttribute.POSITION_CARTESIAN);\n\tattributes.add(new PointAttribute(\"rgba\", PointAttributeTypes.DATA_TYPE_UINT8, 4));\n\tattributes.add(new PointAttribute(\"intensity\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\tattributes.add(new PointAttribute(\"classification\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\tattributes.add(new PointAttribute(\"gps-time\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1));\n\tattributes.add(new PointAttribute(\"number of returns\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\tattributes.add(new PointAttribute(\"return number\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\tattributes.add(new PointAttribute(\"source id\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\t//attributes.add(new PointAttribute(\"pointSourceID\", PointAttributeTypes.DATA_TYPE_INT8, 4));\n\n\n\treturn attributes;\n}\n\nexport class POCLoader {\n\n\tstatic load(url, callback){\n\t\ttry {\n\t\t\tlet pco = new PointCloudOctreeGeometry();\n\t\t\tpco.url = url;\n\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\txhr.open('GET', url, true);\n\n\t\t\txhr.onreadystatechange = function () {\n\t\t\t\tif (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 0)) {\n\t\t\t\t\tlet fMno = JSON.parse(xhr.responseText);\n\n\t\t\t\t\tlet version = new Version(fMno.version);\n\n\t\t\t\t\t// assume octreeDir is absolute if it starts with http\n\t\t\t\t\tif (fMno.octreeDir.indexOf('http') === 0) {\n\t\t\t\t\t\tpco.octreeDir = fMno.octreeDir;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpco.octreeDir = url + '/../' + fMno.octreeDir;\n\t\t\t\t\t}\n\n\t\t\t\t\tpco.spacing = fMno.spacing;\n\t\t\t\t\tpco.hierarchyStepSize = fMno.hierarchyStepSize;\n\n\t\t\t\t\tpco.pointAttributes = fMno.pointAttributes;\n\n\t\t\t\t\tlet min = new THREE.Vector3(fMno.boundingBox.lx, fMno.boundingBox.ly, fMno.boundingBox.lz);\n\t\t\t\t\tlet max = new THREE.Vector3(fMno.boundingBox.ux, fMno.boundingBox.uy, fMno.boundingBox.uz);\n\t\t\t\t\tlet boundingBox = new THREE.Box3(min, max);\n\t\t\t\t\tlet tightBoundingBox = boundingBox.clone();\n\n\t\t\t\t\tif (fMno.tightBoundingBox) {\n\t\t\t\t\t\ttightBoundingBox.min.copy(new THREE.Vector3(fMno.tightBoundingBox.lx, fMno.tightBoundingBox.ly, fMno.tightBoundingBox.lz));\n\t\t\t\t\t\ttightBoundingBox.max.copy(new THREE.Vector3(fMno.tightBoundingBox.ux, fMno.tightBoundingBox.uy, fMno.tightBoundingBox.uz));\n\t\t\t\t\t}\n\n\t\t\t\t\tlet offset = min.clone();\n\n\t\t\t\t\tboundingBox.min.sub(offset);\n\t\t\t\t\tboundingBox.max.sub(offset);\n\n\t\t\t\t\ttightBoundingBox.min.sub(offset);\n\t\t\t\t\ttightBoundingBox.max.sub(offset);\n\n\t\t\t\t\tpco.projection = fMno.projection;\n\t\t\t\t\tpco.boundingBox = boundingBox;\n\t\t\t\t\tpco.tightBoundingBox = tightBoundingBox;\n\t\t\t\t\tpco.boundingSphere = boundingBox.getBoundingSphere(new THREE.Sphere());\n\t\t\t\t\tpco.tightBoundingSphere = tightBoundingBox.getBoundingSphere(new THREE.Sphere());\n\t\t\t\t\tpco.offset = offset;\n\t\t\t\t\tif (fMno.pointAttributes === 'LAS') {\n\t\t\t\t\t\tpco.loader = new LasLazLoader(fMno.version, \"las\");\n\t\t\t\t\t\tpco.pointAttributes = lasLazAttributes(fMno);\n\t\t\t\t\t} else if (fMno.pointAttributes === 'LAZ') {\n\t\t\t\t\t\tpco.loader = new LasLazLoader(fMno.version, \"laz\");\n\t\t\t\t\t\tpco.pointAttributes = lasLazAttributes(fMno);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpco.loader = new BinaryLoader(fMno.version, boundingBox, fMno.scale);\n\t\t\t\t\t\tpco.pointAttributes = parseAttributes(fMno);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet nodes = {};\n\n\t\t\t\t\t{ // load root\n\t\t\t\t\t\tlet name = 'r';\n\n\t\t\t\t\t\tlet root = new PointCloudOctreeGeometryNode(name, pco, boundingBox);\n\t\t\t\t\t\troot.level = 0;\n\t\t\t\t\t\troot.hasChildren = true;\n\t\t\t\t\t\troot.spacing = pco.spacing;\n\t\t\t\t\t\tif (version.upTo('1.5')) {\n\t\t\t\t\t\t\troot.numPoints = fMno.hierarchy[0][1];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\troot.numPoints = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpco.root = root;\n\t\t\t\t\t\tpco.root.load();\n\t\t\t\t\t\tnodes[name] = root;\n\t\t\t\t\t}\n\n\t\t\t\t\t// load remaining hierarchy\n\t\t\t\t\tif (version.upTo('1.4')) {\n\t\t\t\t\t\tfor (let i = 1; i < fMno.hierarchy.length; i++) {\n\t\t\t\t\t\t\tlet name = fMno.hierarchy[i][0];\n\t\t\t\t\t\t\tlet numPoints = fMno.hierarchy[i][1];\n\t\t\t\t\t\t\tlet index = parseInt(name.charAt(name.length - 1));\n\t\t\t\t\t\t\tlet parentName = name.substring(0, name.length - 1);\n\t\t\t\t\t\t\tlet parentNode = nodes[parentName];\n\t\t\t\t\t\t\tlet level = name.length - 1;\n\t\t\t\t\t\t\t//let boundingBox = POCLoader.createChildAABB(parentNode.boundingBox, index);\n\t\t\t\t\t\t\tlet boundingBox = Utils.createChildAABB(parentNode.boundingBox, index);\n\n\t\t\t\t\t\t\tlet node = new PointCloudOctreeGeometryNode(name, pco, boundingBox);\n\t\t\t\t\t\t\tnode.level = level;\n\t\t\t\t\t\t\tnode.numPoints = numPoints;\n\t\t\t\t\t\t\tnode.spacing = pco.spacing / Math.pow(2, level);\n\t\t\t\t\t\t\tparentNode.addChild(node);\n\t\t\t\t\t\t\tnodes[name] = node;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tpco.nodes = nodes;\n\n\t\t\t\t\tcallback(pco);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\txhr.send(null);\n\t\t} catch (e) {\n\t\t\tconsole.log(\"loading failed: '\" + url + \"'\");\n\t\t\tconsole.log(e);\n\n\t\t\tcallback();\n\t\t}\n\t}\n\n\tloadPointAttributes(mno){\n\t\tlet fpa = mno.pointAttributes;\n\t\tlet pa = new PointAttributes();\n\n\t\tfor (let i = 0; i < fpa.length; i++) {\n\t\t\tlet pointAttribute = PointAttribute[fpa[i]];\n\t\t\tpa.add(pointAttribute);\n\t\t}\n\n\t\treturn pa;\n\t}\n\n\tcreateChildAABB(aabb, index){\n\t\tlet min = aabb.min.clone();\n\t\tlet max = aabb.max.clone();\n\t\tlet size = new THREE.Vector3().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\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 THREE.Box3(min, max);\n\t}\n}\n\n","\r\nimport * as THREE from \"../../../../libs/three.js/build/three.module.js\";\r\n\r\nexport class OctreeGeometry{\r\n\r\n\tconstructor(){\r\n\t\tthis.url = null;\r\n\t\tthis.spacing = 0;\r\n\t\tthis.boundingBox = null;\r\n\t\tthis.root = null;\r\n\t\tthis.pointAttributes = null;\r\n\t\tthis.loader = null;\r\n\t}\r\n\r\n};\r\n\r\nexport class OctreeGeometryNode{\r\n\r\n\tconstructor(name, octreeGeometry, boundingBox){\r\n\t\tthis.id = OctreeGeometryNode.IDCount++;\r\n\t\tthis.name = name;\r\n\t\tthis.index = parseInt(name.charAt(name.length - 1));\r\n\t\tthis.octreeGeometry = octreeGeometry;\r\n\t\tthis.boundingBox = boundingBox;\r\n\t\tthis.boundingSphere = boundingBox.getBoundingSphere(new THREE.Sphere());\r\n\t\tthis.children = {};\r\n\t\tthis.numPoints = 0;\r\n\t\tthis.level = null;\r\n\t\tthis.oneTimeDisposeHandlers = [];\r\n\t}\r\n\r\n\tisGeometryNode(){\r\n\t\treturn true;\r\n\t}\r\n\r\n\tgetLevel(){\r\n\t\treturn this.level;\r\n\t}\r\n\r\n\tisTreeNode(){\r\n\t\treturn false;\r\n\t}\r\n\r\n\tisLoaded(){\r\n\t\treturn this.loaded;\r\n\t}\r\n\r\n\tgetBoundingSphere(){\r\n\t\treturn this.boundingSphere;\r\n\t}\r\n\r\n\tgetBoundingBox(){\r\n\t\treturn this.boundingBox;\r\n\t}\r\n\r\n\tgetChildren(){\r\n\t\tlet children = [];\r\n\r\n\t\tfor (let i = 0; i < 8; i++) {\r\n\t\t\tif (this.children[i]) {\r\n\t\t\t\tchildren.push(this.children[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\tgetBoundingBox(){\r\n\t\treturn this.boundingBox;\r\n\t}\r\n\r\n\tload(){\r\n\r\n\t\tif (Potree.numNodesLoading >= Potree.maxNodesLoading) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.octreeGeometry.loader.load(this);\r\n\t}\r\n\r\n\tgetNumPoints(){\r\n\t\treturn this.numPoints;\r\n\t}\r\n\r\n\tdispose(){\r\n\t\tif (this.geometry && this.parent != null) {\r\n\t\t\tthis.geometry.dispose();\r\n\t\t\tthis.geometry = null;\r\n\t\t\tthis.loaded = false;\r\n\r\n\t\t\t// this.dispatchEvent( { type: 'dispose' } );\r\n\t\t\tfor (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {\r\n\t\t\t\tlet handler = this.oneTimeDisposeHandlers[i];\r\n\t\t\t\thandler();\r\n\t\t\t}\r\n\t\t\tthis.oneTimeDisposeHandlers = [];\r\n\t\t}\r\n\t}\r\n\r\n};\r\n\r\nOctreeGeometryNode.IDCount = 0;","\nimport * as THREE from \"../../../../libs/three.js/build/three.module.js\";\nimport {PointAttribute, PointAttributes, PointAttributeTypes} from \"../../../loader/PointAttributes.js\";\nimport {OctreeGeometry, OctreeGeometryNode} from \"./OctreeGeometry.js\";\n\n// let loadedNodes = new Set();\n\nexport class NodeLoader{\n\n\tconstructor(url){\n\t\tthis.url = url;\n\t}\n\n\tasync load(node){\n\n\t\tif(node.loaded || node.loading){\n\t\t\treturn;\n\t\t}\n\n\t\tnode.loading = true;\n\t\tPotree.numNodesLoading++;\n\n\t\t// console.log(node.name, node.numPoints);\n\n\t\t// if(loadedNodes.has(node.name)){\n\t\t// \t// debugger;\n\t\t// }\n\t\t// loadedNodes.add(node.name);\n\n\t\ttry{\n\t\t\tif(node.nodeType === 2){\n\t\t\t\tawait this.loadHierarchy(node);\n\t\t\t}\n\n\t\t\tlet {byteOffset, byteSize} = node;\n\n\n\t\t\tlet urlOctree = `${this.url}/../octree.bin`;\n\n\t\t\tlet first = byteOffset;\n\t\t\tlet last = byteOffset + byteSize - 1n;\n\n\t\t\tlet buffer;\n\n\t\t\tif(byteSize === 0n){\n\t\t\t\tbuffer = new ArrayBuffer(0);\n\t\t\t\tconsole.warn(`loaded node with 0 bytes: ${node.name}`);\n\t\t\t}else{\n\t\t\t\tlet response = await fetch(urlOctree, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'content-type': 'multipart/byteranges',\n\t\t\t\t\t\t'Range': `bytes=${first}-${last}`,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tbuffer = await response.arrayBuffer();\n\t\t\t}\n\n\t\t\tlet workerPath;\n\t\t\tif(this.metadata.encoding === \"BROTLI\"){\n\t\t\t\tworkerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker_brotli.js';\n\t\t\t}else{\n\t\t\t\tworkerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker.js';\n\t\t\t}\n\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\n\t\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\n\t\t\t\tlet geometry = new THREE.BufferGeometry();\n\t\t\t\t\n\t\t\t\tfor(let property in buffers){\n\n\t\t\t\t\tlet buffer = buffers[property].buffer;\n\n\t\t\t\t\tif(property === \"position\"){\n\t\t\t\t\t\tgeometry.setAttribute('position', new THREE.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 THREE.BufferAttribute(new Uint8Array(buffer), 4, true));\n\t\t\t\t\t}else if(property === \"NORMAL\"){\n\t\t\t\t\t\t//geometry.setAttribute('rgba', new THREE.BufferAttribute(new Uint8Array(buffer), 4, true));\n\t\t\t\t\t\tgeometry.setAttribute('normal', new THREE.BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t\t}else if (property === \"INDICES\") {\n\t\t\t\t\t\tlet bufferAttribute = new THREE.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{\n\t\t\t\t\t\tconst bufferAttribute = new THREE.BufferAttribute(new Float32Array(buffer), 1);\n\n\t\t\t\t\t\tlet batchAttribute = buffers[property].attribute;\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\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t// indices ??\n\n\t\t\t\tnode.density = data.density;\n\t\t\t\tnode.geometry = geometry;\n\t\t\t\tnode.loaded = true;\n\t\t\t\tnode.loading = false;\n\t\t\t\tPotree.numNodesLoading--;\n\t\t\t};\n\n\t\t\tlet pointAttributes = node.octreeGeometry.pointAttributes;\n\t\t\tlet scale = node.octreeGeometry.scale;\n\n\t\t\tlet box = node.boundingBox;\n\t\t\tlet min = node.octreeGeometry.offset.clone().add(box.min);\n\t\t\tlet size = box.max.clone().sub(box.min);\n\t\t\tlet max = min.clone().add(size);\n\t\t\tlet numPoints = node.numPoints;\n\n\t\t\tlet offset = node.octreeGeometry.loader.offset;\n\n\t\t\tlet message = {\n\t\t\t\tname: node.name,\n\t\t\t\tbuffer: buffer,\n\t\t\t\tpointAttributes: pointAttributes,\n\t\t\t\tscale: scale,\n\t\t\t\tmin: min,\n\t\t\t\tmax: max,\n\t\t\t\tsize: size,\n\t\t\t\toffset: offset,\n\t\t\t\tnumPoints: numPoints\n\t\t\t};\n\n\t\t\tworker.postMessage(message, [message.buffer]);\n\t\t}catch(e){\n\t\t\tnode.loaded = false;\n\t\t\tnode.loading = false;\n\t\t\tPotree.numNodesLoading--;\n\n\t\t\tconsole.log(`failed to load ${node.name}`);\n\t\t\tconsole.log(e);\n\t\t\tconsole.log(`trying again!`);\n\t\t}\n\t}\n\n\tparseHierarchy(node, buffer){\n\n\t\tlet view = new DataView(buffer);\n\t\tlet tStart = performance.now();\n\n\t\tlet bytesPerNode = 22;\n\t\tlet numNodes = buffer.byteLength / bytesPerNode;\n\n\t\tlet octree = node.octreeGeometry;\n\t\t// let nodes = [node];\n\t\tlet nodes = new Array(numNodes);\n\t\tnodes[0] = node;\n\t\tlet nodePos = 1;\n\n\t\tfor(let i = 0; i < numNodes; i++){\n\t\t\tlet current = nodes[i];\n\n\t\t\tlet type = view.getUint8(i * bytesPerNode + 0);\n\t\t\tlet childMask = view.getUint8(i * bytesPerNode + 1);\n\t\t\tlet numPoints = view.getUint32(i * bytesPerNode + 2, true);\n\t\t\tlet byteOffset = view.getBigInt64(i * bytesPerNode + 6, true);\n\t\t\tlet byteSize = view.getBigInt64(i * bytesPerNode + 14, true);\n\n\t\t\t// if(byteSize === 0n){\n\t\t\t// \t// debugger;\n\t\t\t// }\n\n\n\t\t\tif(current.nodeType === 2){\n\t\t\t\t// replace proxy with real node\n\t\t\t\tcurrent.byteOffset = byteOffset;\n\t\t\t\tcurrent.byteSize = byteSize;\n\t\t\t\tcurrent.numPoints = numPoints;\n\t\t\t}else if(type === 2){\n\t\t\t\t// load proxy\n\t\t\t\tcurrent.hierarchyByteOffset = byteOffset;\n\t\t\t\tcurrent.hierarchyByteSize = byteSize;\n\t\t\t\tcurrent.numPoints = numPoints;\n\t\t\t}else{\n\t\t\t\t// load real node \n\t\t\t\tcurrent.byteOffset = byteOffset;\n\t\t\t\tcurrent.byteSize = byteSize;\n\t\t\t\tcurrent.numPoints = numPoints;\n\t\t\t}\n\n\t\t\tif(current.byteSize === 0n){\n\t\t\t\t// workaround for issue #1125\n\t\t\t\t// some inner nodes erroneously report >0 points even though have 0 points\n\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\tcurrent.numPoints = 0;\n\t\t\t}\n\t\t\t\n\t\t\tcurrent.nodeType = type;\n\n\t\t\tif(current.nodeType === 2){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor(let childIndex = 0; childIndex < 8; childIndex++){\n\t\t\t\tlet childExists = ((1 << childIndex) & childMask) !== 0;\n\n\t\t\t\tif(!childExists){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet childName = current.name + childIndex;\n\n\t\t\t\tlet childAABB = createChildAABB(current.boundingBox, childIndex);\n\t\t\t\tlet child = new OctreeGeometryNode(childName, octree, childAABB);\n\t\t\t\tchild.name = childName;\n\t\t\t\tchild.spacing = current.spacing / 2;\n\t\t\t\tchild.level = current.level + 1;\n\n\t\t\t\tcurrent.children[childIndex] = child;\n\t\t\t\tchild.parent = current;\n\n\t\t\t\t// nodes.push(child);\n\t\t\t\tnodes[nodePos] = child;\n\t\t\t\tnodePos++;\n\t\t\t}\n\n\t\t\t// if((i % 500) === 0){\n\t\t\t// \tyield;\n\t\t\t// }\n\t\t}\n\n\t\tlet duration = (performance.now() - tStart);\n\n\t\t// if(duration > 20){\n\t\t// \tlet msg = `duration: ${duration}ms, numNodes: ${numNodes}`;\n\t\t// \tconsole.log(msg);\n\t\t// }\n\t}\n\n\tasync loadHierarchy(node){\n\n\t\tlet {hierarchyByteOffset, hierarchyByteSize} = node;\n\t\tlet hierarchyPath = `${this.url}/../hierarchy.bin`;\n\t\t\n\t\tlet first = hierarchyByteOffset;\n\t\tlet last = first + hierarchyByteSize - 1n;\n\n\t\tlet response = await fetch(hierarchyPath, {\n\t\t\theaders: {\n\t\t\t\t'content-type': 'multipart/byteranges',\n\t\t\t\t'Range': `bytes=${first}-${last}`,\n\t\t\t},\n\t\t});\n\n\n\n\t\tlet buffer = await response.arrayBuffer();\n\n\t\tthis.parseHierarchy(node, buffer);\n\n\t\t// let promise = new Promise((resolve) => {\n\t\t// \tlet generator = this.parseHierarchy(node, buffer);\n\n\t\t// \tlet repeatUntilDone = () => {\n\t\t// \t\tlet result = generator.next();\n\n\t\t// \t\tif(result.done){\n\t\t// \t\t\tresolve();\n\t\t// \t\t}else{\n\t\t// \t\t\trequestAnimationFrame(repeatUntilDone);\n\t\t// \t\t}\n\t\t// \t};\n\t\t\t\n\t\t// \trepeatUntilDone();\n\t\t// });\n\n\t\t// await promise;\n\n\t\t\n\n\n\n\t}\n\n}\n\nlet tmpVec3 = new THREE.Vector3();\nfunction createChildAABB(aabb, index){\n\tlet min = aabb.min.clone();\n\tlet max = aabb.max.clone();\n\tlet size = tmpVec3.subVectors(max, min);\n\n\tif ((index & 0b0001) > 0) {\n\t\tmin.z += size.z / 2;\n\t} else {\n\t\tmax.z -= size.z / 2;\n\t}\n\n\tif ((index & 0b0010) > 0) {\n\t\tmin.y += size.y / 2;\n\t} else {\n\t\tmax.y -= size.y / 2;\n\t}\n\t\n\tif ((index & 0b0100) > 0) {\n\t\tmin.x += size.x / 2;\n\t} else {\n\t\tmax.x -= size.x / 2;\n\t}\n\n\treturn new THREE.Box3(min, max);\n}\n\nlet typenameTypeattributeMap = {\n\t\"double\": PointAttributeTypes.DATA_TYPE_DOUBLE,\n\t\"float\": PointAttributeTypes.DATA_TYPE_FLOAT,\n\t\"int8\": PointAttributeTypes.DATA_TYPE_INT8,\n\t\"uint8\": PointAttributeTypes.DATA_TYPE_UINT8,\n\t\"int16\": PointAttributeTypes.DATA_TYPE_INT16,\n\t\"uint16\": PointAttributeTypes.DATA_TYPE_UINT16,\n\t\"int32\": PointAttributeTypes.DATA_TYPE_INT32,\n\t\"uint32\": PointAttributeTypes.DATA_TYPE_UINT32,\n\t\"int64\": PointAttributeTypes.DATA_TYPE_INT64,\n\t\"uint64\": PointAttributeTypes.DATA_TYPE_UINT64,\n}\n\nexport class OctreeLoader{\n\n\tstatic parseAttributes(jsonAttributes){\n\n\t\tlet attributes = new PointAttributes();\n\n\t\tlet replacements = {\n\t\t\t\"rgb\": \"rgba\",\n\t\t};\n\n\t\tfor (const jsonAttribute of jsonAttributes) {\n\t\t\tlet {name, description, size, numElements, elementSize, min, max} = jsonAttribute;\n\n\t\t\tlet type = typenameTypeattributeMap[jsonAttribute.type];\n\n\t\t\tlet potreeAttributeName = replacements[name] ? replacements[name] : name;\n\n\t\t\tlet attribute = new PointAttribute(potreeAttributeName, type, numElements);\n\n\t\t\tif(numElements === 1){\n\t\t\t\tattribute.range = [min[0], max[0]];\n\t\t\t}else{\n\t\t\t\tattribute.range = [min, max];\n\t\t\t}\n\n\t\t\tif (name === \"gps-time\") { // HACK: Guard against bad gpsTime range in metadata, see potree/potree#909\n\t\t\t\tif (attribute.range[0] === attribute.range[1]) {\n\t\t\t\t\tattribute.range[1] += 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tattribute.initialRange = attribute.range;\n\n\t\t\tattributes.add(attribute);\n\t\t}\n\n\t\t{\n\t\t\t// check if it has normals\n\t\t\tlet hasNormals = \n\t\t\t\tattributes.attributes.find(a => a.name === \"NormalX\") !== undefined &&\n\t\t\t\tattributes.attributes.find(a => a.name === \"NormalY\") !== undefined &&\n\t\t\t\tattributes.attributes.find(a => a.name === \"NormalZ\") !== undefined;\n\n\t\t\tif(hasNormals){\n\t\t\t\tlet vector = {\n\t\t\t\t\tname: \"NORMAL\",\n\t\t\t\t\tattributes: [\"NormalX\", \"NormalY\", \"NormalZ\"],\n\t\t\t\t};\n\t\t\t\tattributes.addVector(vector);\n\t\t\t}\n\t\t}\n\n\t\treturn attributes;\n\t}\n\n\tstatic async load(url){\n\n\t\tlet response = await fetch(url);\n\t\tlet metadata = await response.json();\n\n\t\tlet attributes = OctreeLoader.parseAttributes(metadata.attributes);\n\n\t\tlet loader = new NodeLoader(url);\n\t\tloader.metadata = metadata;\n\t\tloader.attributes = attributes;\n\t\tloader.scale = metadata.scale;\n\t\tloader.offset = metadata.offset;\n\n\t\tlet octree = new OctreeGeometry();\n\t\toctree.url = url;\n\t\toctree.spacing = metadata.spacing;\n\t\toctree.scale = metadata.scale;\n\n\t\t// let aPosition = metadata.attributes.find(a => a.name === \"position\");\n\t\t// octree\n\n\t\tlet min = new THREE.Vector3(...metadata.boundingBox.min);\n\t\tlet max = new THREE.Vector3(...metadata.boundingBox.max);\n\t\tlet boundingBox = new THREE.Box3(min, max);\n\n\t\tlet offset = min.clone();\n\t\tboundingBox.min.sub(offset);\n\t\tboundingBox.max.sub(offset);\n\n\t\toctree.projection = metadata.projection;\n\t\toctree.boundingBox = boundingBox;\n\t\toctree.tightBoundingBox = boundingBox.clone();\n\t\toctree.boundingSphere = boundingBox.getBoundingSphere(new THREE.Sphere());\n\t\toctree.tightBoundingSphere = boundingBox.getBoundingSphere(new THREE.Sphere());\n\t\toctree.offset = offset;\n\t\toctree.pointAttributes = OctreeLoader.parseAttributes(metadata.attributes);\n\t\toctree.loader = loader;\n\n\t\tlet root = new OctreeGeometryNode(\"r\", octree, boundingBox);\n\t\troot.level = 0;\n\t\troot.nodeType = 2;\n\t\troot.hierarchyByteOffset = 0n;\n\t\troot.hierarchyByteSize = BigInt(metadata.hierarchy.firstChunkSize);\n\t\troot.hasChildren = false;\n\t\troot.spacing = octree.spacing;\n\t\troot.byteOffset = 0;\n\n\t\toctree.root = root;\n\n\t\tloader.load(root);\n\n\t\tlet result = {\n\t\t\tgeometry: octree,\n\t\t};\n\n\t\treturn result;\n\n\t}\n\n};","/**\n * @author Connor Manning\n */\n\nexport class EptLoader {\n\tstatic async load(file, callback) {\n\n\t\tlet response = await fetch(file);\n\t\tlet json = await response.json();\n\n\t\tlet url = file.substr(0, file.lastIndexOf('ept.json'));\n\t\tlet geometry = new Potree.PointCloudEptGeometry(url, json);\n\t\tlet root = new Potree.PointCloudEptGeometryNode(geometry);\n\n\t\tgeometry.root = root;\n\t\tgeometry.root.load();\n\n\t\tcallback(geometry);\n\t}\n};\n\n","\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\nimport {XHRFactory} from \"../../XHRFactory.js\";\n\nexport class EptBinaryLoader {\n\textension() {\n\t\treturn '.bin';\n\t}\n\n\tworkerPath() {\n\t\treturn Potree.scriptPath + '/workers/EptBinaryDecoderWorker.js';\n\t}\n\n\tload(node) {\n\t\tif (node.loaded) return;\n\n\t\tlet url = node.url() + this.extension();\n\n\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.responseType = 'arraybuffer';\n\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\txhr.onreadystatechange = () => {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tif (xhr.status === 200) {\n\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('Failed ' + url + ': ' + xhr.status);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\ttry {\n\t\t\txhr.send(null);\n\t\t}\n\t\tcatch (e) {\n\t\t\tconsole.log('Failed request: ' + e);\n\t\t}\n\t}\n\n\tparse(node, buffer) {\n\t\tlet workerPath = this.workerPath();\n\t\tlet worker = Potree.workerPool.getWorker(workerPath);\n\n\t\tworker.onmessage = function(e) {\n\t\t\tlet g = new THREE.BufferGeometry();\n\t\t\tlet numPoints = e.data.numPoints;\n\n\t\t\tlet position = new Float32Array(e.data.position);\n\t\t\tg.setAttribute('position', new THREE.BufferAttribute(position, 3));\n\n\t\t\tlet indices = new Uint8Array(e.data.indices);\n\t\t\tg.setAttribute('indices', new THREE.BufferAttribute(indices, 4));\n\n\t\t\tif (e.data.color) {\n\t\t\t\tlet color = new Uint8Array(e.data.color);\n\t\t\t\tg.setAttribute('color', new THREE.BufferAttribute(color, 4, true));\n\t\t\t}\n\t\t\tif (e.data.intensity) {\n\t\t\t\tlet intensity = new Float32Array(e.data.intensity);\n\t\t\t\tg.setAttribute('intensity',\n\t\t\t\t\t\tnew THREE.BufferAttribute(intensity, 1));\n\t\t\t}\n\t\t\tif (e.data.classification) {\n\t\t\t\tlet classification = new Uint8Array(e.data.classification);\n\t\t\t\tg.setAttribute('classification',\n\t\t\t\t\t\tnew THREE.BufferAttribute(classification, 1));\n\t\t\t}\n\t\t\tif (e.data.returnNumber) {\n\t\t\t\tlet returnNumber = new Uint8Array(e.data.returnNumber);\n\t\t\t\tg.setAttribute('return number',\n\t\t\t\t\t\tnew THREE.BufferAttribute(returnNumber, 1));\n\t\t\t}\n\t\t\tif (e.data.numberOfReturns) {\n\t\t\t\tlet numberOfReturns = new Uint8Array(e.data.numberOfReturns);\n\t\t\t\tg.setAttribute('number of returns',\n\t\t\t\t\t\tnew THREE.BufferAttribute(numberOfReturns, 1));\n\t\t\t}\n\t\t\tif (e.data.pointSourceId) {\n\t\t\t\tlet pointSourceId = new Uint16Array(e.data.pointSourceId);\n\t\t\t\tg.setAttribute('source id',\n\t\t\t\t\t\tnew THREE.BufferAttribute(pointSourceId, 1));\n\t\t\t}\n\n\t\t\tg.attributes.indices.normalized = true;\n\n\t\t\tlet tightBoundingBox = new THREE.Box3(\n\t\t\t\tnew THREE.Vector3().fromArray(e.data.tightBoundingBox.min),\n\t\t\t\tnew THREE.Vector3().fromArray(e.data.tightBoundingBox.max)\n\t\t\t);\n\n\t\t\tnode.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 THREE.Vector3(...e.data.mean));\n\n\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\t\t};\n\n\t\tlet toArray = (v) => [v.x, v.y, v.z];\n\t\tlet message = {\n\t\t\tbuffer: buffer,\n\t\t\tschema: node.ept.schema,\n\t\t\tscale: node.ept.eptScale,\n\t\t\toffset: node.ept.eptOffset,\n\t\t\tmins: toArray(node.key.b.min)\n\t\t};\n\n\t\tworker.postMessage(message, [message.buffer]);\n\t}\n};\n\n","\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\nimport {XHRFactory} from \"../../XHRFactory.js\";\n\n/**\n * laslaz code taken and adapted from plas.io js-laslaz\n *\t http://plas.io/\n *\thttps://github.com/verma/plasio\n *\n * Thanks to Uday Verma and Howard Butler\n *\n */\n\nexport class EptLaszipLoader {\n\tload(node) {\n\t\tif (node.loaded) return;\n\n\t\tlet url = node.url() + '.laz';\n\n\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.responseType = 'arraybuffer';\n\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\txhr.onreadystatechange = () => {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tif (xhr.status === 200) {\n\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('Failed ' + url + ': ' + xhr.status);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\txhr.send(null);\n\t}\n\n\tasync parse(node, buffer){\n\t\tlet lf = new LASFile(buffer);\n\t\tlet handler = new EptLazBatcher(node);\n\n\t\ttry{\n\t\t\tawait lf.open();\n\n\t\t\tlf.isOpen = true;\n\n\t\t\tconst header = await lf.getHeader();\n\n\t\t\t{\n\t\t\t\tlet i = 0;\n\n\t\t\t\tlet toArray = (v) => [v.x, v.y, v.z];\n\t\t\t\tlet mins = toArray(node.key.b.min);\n\t\t\t\tlet maxs = toArray(node.key.b.max);\n\n\t\t\t\tlet hasMoreData = true;\n\n\t\t\t\twhile(hasMoreData){\n\t\t\t\t\tconst data = await lf.readData(1000000, 0, 1);\n\n\t\t\t\t\tlet d = new LASDecoder(\n\t\t\t\t\t\tdata.buffer,\n\t\t\t\t\t\theader.pointsFormatId,\n\t\t\t\t\t\theader.pointsStructSize,\n\t\t\t\t\t\tdata.count,\n\t\t\t\t\t\theader.scale,\n\t\t\t\t\t\theader.offset,\n\t\t\t\t\t\tmins,\n\t\t\t\t\t\tmaxs);\n\n\t\t\t\t\td.extraBytes = header.extraBytes;\n\t\t\t\t\td.pointsFormatId = header.pointsFormatId;\n\t\t\t\t\thandler.push(d);\n\n\t\t\t\t\ti += data.count;\n\n\t\t\t\t\thasMoreData = data.hasMoreData;\n\t\t\t\t}\n\n\t\t\t\theader.totalRead = i;\n\t\t\t\theader.versionAsString = lf.versionAsString;\n\t\t\t\theader.isCompressed = lf.isCompressed;\n\n\t\t\t\tawait lf.close();\n\n\t\t\t\tlf.isOpen = false;\n\t\t\t}\n\n\t\t}catch(err){\n\t\t\tconsole.error('Error reading LAZ:', err);\n\t\t\t\n\t\t\tif (lf.isOpen) {\n\t\t\t\tawait lf.close();\n\n\t\t\t\tlf.isOpen = false;\n\t\t\t}\n\t\t\t\n\t\t\tthrow err;\n\t\t}\n\t}\n};\n\nexport class EptLazBatcher {\n\tconstructor(node) { this.node = node; }\n\n\tpush(las) {\n\t\tlet workerPath = Potree.scriptPath +\n\t\t\t'/workers/EptLaszipDecoderWorker.js';\n\t\tlet worker = Potree.workerPool.getWorker(workerPath);\n\n\t\tworker.onmessage = (e) => {\n\t\t\tlet g = new THREE.BufferGeometry();\n\t\t\tlet numPoints = las.pointsCount;\n\n\t\t\tlet positions = new Float32Array(e.data.position);\n\t\t\tlet colors = new Uint8Array(e.data.color);\n\n\t\t\tlet intensities = new Float32Array(e.data.intensity);\n\t\t\tlet classifications = new Uint8Array(e.data.classification);\n\t\t\tlet returnNumbers = new Uint8Array(e.data.returnNumber);\n\t\t\tlet numberOfReturns = new Uint8Array(e.data.numberOfReturns);\n\t\t\tlet pointSourceIDs = new Uint16Array(e.data.pointSourceID);\n\t\t\tlet indices = new Uint8Array(e.data.indices);\n\t\t\tlet gpsTime = new Float32Array(e.data.gpsTime);\n\n\t\t\tg.setAttribute('position',\n\t\t\t\t\tnew THREE.BufferAttribute(positions, 3));\n\t\t\tg.setAttribute('rgba',\n\t\t\t\t\tnew THREE.BufferAttribute(colors, 4, true));\n\t\t\tg.setAttribute('intensity',\n\t\t\t\t\tnew THREE.BufferAttribute(intensities, 1));\n\t\t\tg.setAttribute('classification',\n\t\t\t\t\tnew THREE.BufferAttribute(classifications, 1));\n\t\t\tg.setAttribute('return number',\n\t\t\t\t\tnew THREE.BufferAttribute(returnNumbers, 1));\n\t\t\tg.setAttribute('number of returns',\n\t\t\t\t\tnew THREE.BufferAttribute(numberOfReturns, 1));\n\t\t\tg.setAttribute('source id',\n\t\t\t\t\tnew THREE.BufferAttribute(pointSourceIDs, 1));\n\t\t\tg.setAttribute('indices',\n\t\t\t\t\tnew THREE.BufferAttribute(indices, 4));\n\t\t\tg.setAttribute('gpsTime',\n\t\t\t\t\tnew THREE.BufferAttribute(gpsTime, 1));\n\t\t\tthis.node.gpsTime = e.data.gpsMeta;\n\n\t\t\tg.attributes.indices.normalized = true;\n\n\t\t\tlet tightBoundingBox = new THREE.Box3(\n\t\t\t\tnew THREE.Vector3().fromArray(e.data.tightBoundingBox.min),\n\t\t\t\tnew THREE.Vector3().fromArray(e.data.tightBoundingBox.max)\n\t\t\t);\n\n\t\t\tthis.node.doneLoading(\n\t\t\t\tg,\n\t\t\t\ttightBoundingBox,\n\t\t\t\tnumPoints,\n\t\t\t\tnew THREE.Vector3(...e.data.mean));\n\n\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\t\t};\n\n\t\tlet message = {\n\t\t\tbuffer: las.arrayb,\n\t\t\tnumPoints: las.pointsCount,\n\t\t\tpointSize: las.pointSize,\n\t\t\tpointFormatID: las.pointsFormatId,\n\t\t\tscale: las.scale,\n\t\t\toffset: las.offset,\n\t\t\tmins: las.mins,\n\t\t\tmaxs: las.maxs\n\t\t};\n\n\t\tworker.postMessage(message, [message.buffer]);\n\t};\n};\n\n","import {EptBinaryLoader} from \"./BinaryLoader.js\";\n\nexport class EptZstandardLoader extends EptBinaryLoader {\n extension() {\n return '.zst';\n }\n\n workerPath() {\n return Potree.scriptPath + '/workers/EptZstandardDecoderWorker.js';\n }\n};\n\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Line2} from \"../../libs/three.js/lines/Line2.js\";\nimport {LineGeometry} from \"../../libs/three.js/lines/LineGeometry.js\";\nimport {LineMaterial} from \"../../libs/three.js/lines/LineMaterial.js\";\n\nexport class ShapefileLoader{\n\n\tconstructor(){\n\t\tthis.transform = null;\n\t}\n\n\tasync load(path){\n\n\t\tconst matLine = new LineMaterial( {\n\t\t\tcolor: 0xff0000,\n\t\t\tlinewidth: 3, // in pixels\n\t\t\tresolution: new THREE.Vector2(1000, 1000),\n\t\t\tdashed: false\n\t\t} );\n\n\t\tconst features = await this.loadShapefileFeatures(path);\n\t\tconst node = new THREE.Object3D();\n\t\t\n\t\tfor(const feature of features){\n\t\t\tconst fnode = this.featureToSceneNode(feature, matLine);\n\t\t\tnode.add(fnode);\n\t\t}\n\n\t\tlet setResolution = (x, y) => {\n\t\t\tmatLine.resolution.set(x, y);\n\t\t};\n\n\t\tconst result = {\n\t\t\tfeatures: features,\n\t\t\tnode: node,\n\t\t\tsetResolution: setResolution,\n\t\t};\n\n\t\treturn result;\n\t}\n\n\tfeatureToSceneNode(feature, matLine){\n\t\tlet geometry = feature.geometry;\n\t\t\n\t\tlet color = new THREE.Color(1, 1, 1);\n\n\t\tlet transform = this.transform;\n\t\tif(transform === null){\n\t\t\ttransform = {forward: (v) => v};\n\t\t}\n\t\t\n\t\tif(feature.geometry.type === \"Point\"){\n\t\t\tlet sg = new THREE.SphereGeometry(1, 18, 18);\n\t\t\tlet sm = new THREE.MeshNormalMaterial();\n\t\t\tlet s = new THREE.Mesh(sg, sm);\n\t\t\t\n\t\t\tlet [long, lat] = geometry.coordinates;\n\t\t\tlet pos = transform.forward([long, lat]);\n\t\t\t\n\t\t\ts.position.set(...pos, 20);\n\t\t\t\n\t\t\ts.scale.set(10, 10, 10);\n\t\t\t\n\t\t\treturn s;\n\t\t}else if(geometry.type === \"LineString\"){\n\t\t\tlet coordinates = [];\n\t\t\t\n\t\t\tlet min = new THREE.Vector3(Infinity, Infinity, Infinity);\n\t\t\tfor(let i = 0; i < geometry.coordinates.length; i++){\n\t\t\t\tlet [long, lat] = geometry.coordinates[i];\n\t\t\t\tlet pos = transform.forward([long, lat]);\n\t\t\t\t\n\t\t\t\tmin.x = Math.min(min.x, pos[0]);\n\t\t\t\tmin.y = Math.min(min.y, pos[1]);\n\t\t\t\tmin.z = Math.min(min.z, 20);\n\t\t\t\t\n\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\tif(i > 0 && i < geometry.coordinates.length - 1){\n\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfor(let i = 0; i < coordinates.length; i += 3){\n\t\t\t\tcoordinates[i+0] -= min.x;\n\t\t\t\tcoordinates[i+1] -= min.y;\n\t\t\t\tcoordinates[i+2] -= min.z;\n\t\t\t}\n\t\t\t\n\t\t\tconst lineGeometry = new LineGeometry();\n\t\t\tlineGeometry.setPositions( coordinates );\n\n\t\t\tconst line = new Line2( lineGeometry, matLine );\n\t\t\tline.computeLineDistances();\n\t\t\tline.scale.set( 1, 1, 1 );\n\t\t\tline.position.copy(min);\n\t\t\t\n\t\t\treturn line;\n\t\t}else if(geometry.type === \"Polygon\"){\n\t\t\tfor(let pc of geometry.coordinates){\n\t\t\t\tlet coordinates = [];\n\t\t\t\t\n\t\t\t\tlet min = new THREE.Vector3(Infinity, Infinity, Infinity);\n\t\t\t\tfor(let i = 0; i < pc.length; i++){\n\t\t\t\t\tlet [long, lat] = pc[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 < pc.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\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}\n\t\t}else{\n\t\t\tconsole.log(\"unhandled feature: \", feature);\n\t\t}\n\t}\n\n\tasync loadShapefileFeatures(file){\n\t\tlet features = [];\n\n\t\tlet source = await shapefile.open(file);\n\n\t\twhile(true){\n\t\t\tlet result = await source.read();\n\n\t\t\tif (result.done) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) {\n\t\t\t\tfeatures.push(result.value);\n\t\t\t}\n\t\t}\n\n\t\treturn features;\n\t}\n\n};\n\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Line2} from \"../../libs/three.js/lines/Line2.js\";\nimport {LineGeometry} from \"../../libs/three.js/lines/LineGeometry.js\";\nimport {LineMaterial} from \"../../libs/three.js/lines/LineMaterial.js\";\nimport {Utils} from \"../utils.js\";\n\nconst defaultColors = {\n\t\"landuse\": [0.5, 0.5, 0.5],\n\t\"natural\": [0.0, 1.0, 0.0],\n\t\"places\": [1.0, 0.0, 1.0],\n\t\"points\": [0.0, 1.0, 1.0],\n\t\"roads\": [1.0, 1.0, 0.0],\n\t\"waterways\": [0.0, 0.0, 1.0],\n\t\"default\": [0.9, 0.6, 0.1],\n};\n\nfunction getColor(feature){\n\tlet color = defaultColors[feature];\n\n\tif(!color){\n\t\tcolor = defaultColors[\"default\"];\n\t}\n\n\treturn color;\n}\n\nexport class Geopackage{\n\tconstructor(){\n\t\tthis.path = null;\n\t\tthis.node = null;\n\t}\n};\n\nexport class GeoPackageLoader{\n\n\tconstructor(){\n\n\t}\n\n\tstatic async loadUrl(url, params){\n\n\t\tawait Promise.all([\n\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`),\n\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`),\n\t\t]);\n\t\t\n\t\tconst result = await fetch(url);\n\t\tconst buffer = await result.arrayBuffer();\n\n\t\tparams = params || {};\n\n\t\tparams.source = url;\n\n\t\treturn GeoPackageLoader.loadBuffer(buffer, params);\n\t}\n\n\tstatic async loadBuffer(buffer, params){\n\n\t\tawait Promise.all([\n\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`),\n\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`),\n\t\t]);\n\n\t\tparams = params || {};\n\n\t\tconst resolver = async (resolve) => {\n\t\t\t\n\t\t\tlet transform = params.transform;\n\t\t\tif(!transform){\n\t\t\t\ttransform = {forward: (arg) => arg};\n\t\t\t}\n\n\t\t\tconst wasmPath = `${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.wasm`;\n\t\t\tconst SQL = await initSqlJs({ locateFile: filename => wasmPath});\n\n\t\t\tconst u8 = new Uint8Array(buffer);\n\n\t\t\tconst data = await geopackage.open(u8);\n\t\t\twindow.data = data;\n\n\t\t\tconst geopackageNode = new THREE.Object3D();\n\t\t\tgeopackageNode.name = params.source;\n\t\t\tgeopackageNode.potree = {\n\t\t\t\tsource: params.source,\n\t\t\t};\n\n\t\t\tconst geo = new Geopackage();\n\t\t\tgeo.path = params.source;\n\t\t\tgeo.node = geopackageNode;\n\n\t\t\tconst tables = data.getTables();\n\n\t\t\tfor(const table of tables.features){\n\t\t\t\tconst dao = data.getFeatureDao(table);\n\n\t\t\t\tlet boundingBox = dao.getBoundingBox();\n\t\t\t\tboundingBox = boundingBox.projectBoundingBox(dao.projection, 'EPSG:4326');\n\t\t\t\tconst geoJson = data.queryForGeoJSONFeaturesInTable(table, boundingBox);\n\n\t\t\t\tconst matLine = new LineMaterial( {\n\t\t\t\t\tcolor: new THREE.Color().setRGB(...getColor(table)),\n\t\t\t\t\tlinewidth: 2, \n\t\t\t\t\tresolution: new THREE.Vector2(1000, 1000),\n\t\t\t\t\tdashed: false\n\t\t\t\t} );\n\n\t\t\t\tconst node = new THREE.Object3D();\n\t\t\t\tnode.name = table;\n\t\t\t\tgeo.node.add(node);\n\n\t\t\t\tfor(const [index, feature] of Object.entries(geoJson)){\n\t\t\t\t\t//const featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, transform);\n\t\t\t\t\tconst featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, dao.projection, transform);\n\t\t\t\t\tnode.add(featureNode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresolve(geo);\n\t\t}\n\n\t\treturn new Promise(resolver);\n\t}\n\n\tstatic featureToSceneNode(feature, matLine, geopackageProjection, transform){\n\t\tlet geometry = feature.geometry;\n\t\t\n\t\tlet color = new THREE.Color(1, 1, 1);\n\t\t\n\t\tif(feature.geometry.type === \"Point\"){\n\t\t\tlet sg = new THREE.SphereGeometry(1, 18, 18);\n\t\t\tlet sm = new THREE.MeshNormalMaterial();\n\t\t\tlet s = new THREE.Mesh(sg, sm);\n\t\t\t\n\t\t\tlet [long, lat] = geometry.coordinates;\n\t\t\tlet pos = transform.forward(geopackageProjection.forward([long, lat]));\n\t\t\t\n\t\t\ts.position.set(...pos, 20);\n\t\t\t\n\t\t\ts.scale.set(10, 10, 10);\n\t\t\t\n\t\t\treturn s;\n\t\t}else if(geometry.type === \"LineString\"){\n\t\t\tlet coordinates = [];\n\t\t\t\n\t\t\tlet min = new THREE.Vector3(Infinity, Infinity, Infinity);\n\t\t\tfor(let i = 0; i < geometry.coordinates.length; i++){\n\t\t\t\tlet [long, lat] = geometry.coordinates[i];\n\t\t\t\tlet pos = transform.forward(geopackageProjection.forward([long, lat]));\n\t\t\t\t\n\t\t\t\tmin.x = Math.min(min.x, pos[0]);\n\t\t\t\tmin.y = Math.min(min.y, pos[1]);\n\t\t\t\tmin.z = Math.min(min.z, 20);\n\t\t\t\t\n\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\tif(i > 0 && i < geometry.coordinates.length - 1){\n\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfor(let i = 0; i < coordinates.length; i += 3){\n\t\t\t\tcoordinates[i+0] -= min.x;\n\t\t\t\tcoordinates[i+1] -= min.y;\n\t\t\t\tcoordinates[i+2] -= min.z;\n\t\t\t}\n\t\t\t\n\t\t\tconst lineGeometry = new LineGeometry();\n\t\t\tlineGeometry.setPositions( coordinates );\n\n\t\t\tconst line = new Line2( lineGeometry, matLine );\n\t\t\tline.computeLineDistances();\n\t\t\tline.scale.set( 1, 1, 1 );\n\t\t\tline.position.copy(min);\n\t\t\t\n\t\t\treturn line;\n\t\t}else if(geometry.type === \"Polygon\"){\n\t\t\tfor(let pc of geometry.coordinates){\n\t\t\t\tlet coordinates = [];\n\t\t\t\t\n\t\t\t\tlet min = new THREE.Vector3(Infinity, Infinity, Infinity);\n\t\t\t\tfor(let i = 0; i < pc.length; i++){\n\t\t\t\t\tlet [long, lat] = pc[i];\n\t\t\t\t\t\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 < pc.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\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}\n\t\t}else{\n\t\t\tconsole.log(\"unhandled feature: \", feature);\n\t\t}\n\t}\n\n};","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class ClipVolume extends THREE.Object3D{\n\t\n\tconstructor(args){\n\t\tsuper();\n\t\t\n\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\tthis.name = \"clip_volume_\" + this.constructor.counter;\n\n\t\tlet alpha = args.alpha || 0;\n\t\tlet beta = args.beta || 0;\n\t\tlet gamma = args.gamma || 0;\n\n\t\tthis.rotation.x = alpha;\n\t\tthis.rotation.y = beta;\n\t\tthis.rotation.z = gamma;\n\n\t\tthis.clipOffset = 0.001;\n\t\tthis.clipRotOffset = 1;\n\t\t\t\t\n\t\tlet boxGeometry = new THREE.BoxGeometry(1, 1, 1);\n\t\tboxGeometry.computeBoundingBox();\n\t\t\n\t\tlet boxFrameGeometry = new THREE.Geometry();\n\t\t{\t\t\t\n\t\t\t// bottom\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.5));\n\t\t\t// top\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.5));\n\t\t\t// sides\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, -0.5));\n\n\t\t\tboxFrameGeometry.colors.push(new THREE.Vector3(1, 1, 1));\n\t\t}\n\n\t\tlet planeFrameGeometry = new THREE.Geometry();\n\t\t{\t\t\t\t\t\t\n\t\t\t// middle line\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.0));\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.0));\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.0));\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.0));\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.0));\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.0));\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.0));\n\t\t\tplaneFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.0));\n\t\t}\n\n\t\tthis.dimension = new THREE.Vector3(1, 1, 1);\n\t\tthis.material = new THREE.MeshBasicMaterial( {\n\t\t\tcolor: 0x00ff00, \n\t\t\ttransparent: true, \n\t\t\topacity: 0.3,\n\t\t\tdepthTest: true, \n\t\t\tdepthWrite: false} );\n\t\tthis.box = new THREE.Mesh(boxGeometry, this.material);\n\t\tthis.box.geometry.computeBoundingBox();\n\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\tthis.add(this.box);\n\t\t\n\t\tthis.frame = new THREE.LineSegments( boxFrameGeometry, new THREE.LineBasicMaterial({color: 0x000000}));\n\t\tthis.add(this.frame);\n\t\tthis.planeFrame = new THREE.LineSegments( planeFrameGeometry, new THREE.LineBasicMaterial({color: 0xff0000}));\n\t\tthis.add(this.planeFrame);\n\n\t\t// set default thickness\n\t\tthis.setScaleZ(0.1);\n\n\t\t// create local coordinate system\n\t\tlet createArrow = (name, direction, color) => {\n\t\t\tlet material = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: color, \n\t\t\t\tdepthTest: false, \n\t\t\t\tdepthWrite: false});\n\t\t\t\t\n\t\t\tlet shaftGeometry = new THREE.Geometry();\n\t\t\tshaftGeometry.vertices.push(new THREE.Vector3(0, 0, 0));\n\t\t\tshaftGeometry.vertices.push(new THREE.Vector3(0, 1, 0));\n\t\t\t\n\t\t\tlet shaftMaterial = new THREE.LineBasicMaterial({\n\t\t\t\tcolor: color, \n\t\t\t\tdepthTest: false, \n\t\t\t\tdepthWrite: false,\n\t\t\t\ttransparent: true\n\t\t\t\t});\n\t\t\tlet shaft = new THREE.Line(shaftGeometry, shaftMaterial);\n\t\t\tshaft.name = name + \"_shaft\";\n\t\t\t\n\t\t\tlet headGeometry = new THREE.CylinderGeometry(0, 0.04, 0.1, 10, 1, false);\n\t\t\tlet headMaterial = material;\n\t\t\tlet head = new THREE.Mesh(headGeometry, headMaterial);\n\t\t\thead.name = name + \"_head\";\n\t\t\thead.position.y = 1;\n\t\t\t\n\t\t\tlet arrow = new THREE.Object3D();\n\t\t\tarrow.name = name;\n\t\t\tarrow.add(shaft);\n\t\t\tarrow.add(head);\n\n\t\t\treturn arrow;\n\t\t};\n\t\t\n\t\tthis.arrowX = createArrow(\"arrow_x\", new THREE.Vector3(1, 0, 0), 0xFF0000);\n\t\tthis.arrowY = createArrow(\"arrow_y\", new THREE.Vector3(0, 1, 0), 0x00FF00);\n\t\tthis.arrowZ = createArrow(\"arrow_z\", new THREE.Vector3(0, 0, 1), 0x0000FF);\n\t\t\n\t\tthis.arrowX.rotation.z = -Math.PI / 2;\n\t\tthis.arrowZ.rotation.x = Math.PI / 2;\n\n\t\tthis.arrowX.visible = false;\n\t\tthis.arrowY.visible = false;\n\t\tthis.arrowZ.visible = false;\n\n\t\tthis.add(this.arrowX);\n\t\tthis.add(this.arrowY);\n\t\tthis.add(this.arrowZ);\n\t\t\n\t\t{ // event listeners\n\t\t\tthis.addEventListener(\"ui_select\", e => { \n\t\t\t\tthis.arrowX.visible = true;\n\t\t\t\tthis.arrowY.visible = true;\n\t\t\t\tthis.arrowZ.visible = true; \n\t\t\t});\n\t\t\tthis.addEventListener(\"ui_deselect\", e => {\n\t\t\t\tthis.arrowX.visible = false;\n\t\t\t\tthis.arrowY.visible = false;\n\t\t\t\tthis.arrowZ.visible = false; \t\t\t\t\n\t\t\t});\n\t\t\tthis.addEventListener(\"select\", e => { \n\t\t\t\tlet scene_header = $(\"#\" + this.name + \" .scene_header\");\n\t\t\t\tif(!scene_header.next().is(\":visible\")) {\n\t\t\t\t\tscene_header.click();\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.addEventListener(\"deselect\", e => { \n\t\t\t\tlet scene_header = $(\"#\" + this.name + \" .scene_header\");\n\t\t\t\tif(scene_header.next().is(\":visible\")) {\n\t\t\t\t\tscene_header.click();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tthis.update();\n\t};\n\n\tsetClipOffset(offset) {\t\t\n\t\tthis.clipOffset = offset;\t\n\t}\n\n\tsetClipRotOffset(offset) {\t\t\n\t\tthis.clipRotOffset = offset;\t\t\n\t}\n\n\tsetScaleX(x) {\n\t\tthis.box.scale.x = x;\n\t\tthis.frame.scale.x = x;\n\t\tthis.planeFrame.scale.x = x;\t\t\t\n\t}\n\n\tsetScaleY(y) {\n\t\tthis.box.scale.y = y;\n\t\tthis.frame.scale.y = y;\n\t\tthis.planeFrame.scale.y = y;\t\t\n\t}\n\n\tsetScaleZ(z) {\n\t\tthis.box.scale.z = z;\n\t\tthis.frame.scale.z = z;\n\t\tthis.planeFrame.scale.z = z;\t\t\n\t}\n\n\toffset(args) {\n\t\tlet cs = args.cs || null;\n\t\tlet axis = args.axis || null;\n\t\tlet dir = args.dir || null;\n\n\t\tif(!cs || !axis || !dir) return;\n\n\t\tif(axis === \"x\") {\n\t\t\tif(cs === \"local\") {\n\t\t\t\tthis.position.add(this.localX.clone().multiplyScalar(dir * this.clipOffset));\n\t\t\t} else if(cs === \"global\") {\n\t\t\t\tthis.position.x = this.position.x + dir * this.clipOffset;\n\t\t\t}\n\t\t}else if(axis === \"y\") {\n\t\t\tif(cs === \"local\") {\n\t\t\t\tthis.position.add(this.localY.clone().multiplyScalar(dir * this.clipOffset));\n\t\t\t} else if(cs === \"global\") {\n\t\t\t\tthis.position.y = this.position.y + dir * this.clipOffset;\n\t\t\t}\n\t\t}else if(axis === \"z\") {\n\t\t\tif(cs === \"local\") {\n\t\t\t\tthis.position.add(this.localZ.clone().multiplyScalar(dir * this.clipOffset));\n\t\t\t} else if(cs === \"global\") {\n\t\t\t\tthis.position.z = this.position.z + dir * this.clipOffset;\n\t\t\t}\n\t\t}\n\n\t\tthis.dispatchEvent({\"type\": \"clip_volume_changed\", \"viewer\": viewer, \"volume\": this});\n\t}\t\n\n\trotate(args) {\n\t\tlet cs = args.cs || null;\n\t\tlet axis = args.axis || null;\n\t\tlet dir = args.dir || null;\n\n\t\tif(!cs || !axis || !dir) return;\n\n\t\tif(cs === \"local\") {\n\t\t\tif(axis === \"x\") {\n\t\t\t\tthis.rotateOnAxis(new THREE.Vector3(1, 0, 0), dir * this.clipRotOffset * Math.PI / 180);\n\t\t\t} else if(axis === \"y\") {\n\t\t\t\tthis.rotateOnAxis(new THREE.Vector3(0, 1, 0), dir * this.clipRotOffset * Math.PI / 180);\n\t\t\t} else if(axis === \"z\") {\n\t\t\t\tthis.rotateOnAxis(new THREE.Vector3(0, 0, 1), dir * this.clipRotOffset * Math.PI / 180);\n\t\t\t}\n\t\t} else if(cs === \"global\") {\n\t\t\tlet rotaxis = new THREE.Vector4(1, 0, 0, 0);\t\n\t\t\tif(axis === \"y\") {\n\t\t\t\trotaxis = new THREE.Vector4(0, 1, 0, 0);\n\t\t\t} else if(axis === \"z\") {\n\t\t\t\trotaxis = new THREE.Vector4(0, 0, 1, 0);\n\t\t\t}\n\t\t\tthis.updateMatrixWorld();\n\t\t\tlet invM = newthis.matrixWorld.clone().invert();\n\t\t\trotaxis = rotaxis.applyMatrix4(invM).normalize();\n\t\t\trotaxis = new THREE.Vector3(rotaxis.x, rotaxis.y, rotaxis.z);\n\t\t\tthis.rotateOnAxis(rotaxis, dir * this.clipRotOffset * Math.PI / 180);\n\t\t}\n\n\t\tthis.updateLocalSystem();\n\n\t\tthis.dispatchEvent({\"type\": \"clip_volume_changed\", \"viewer\": viewer, \"volume\": this});\n\t}\t\n\n\tupdate(){\n\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new THREE.Sphere());\n\t\t\n\t\tthis.box.visible = false;\n\n\t\tthis.updateLocalSystem();\n\t};\n\n\tupdateLocalSystem() {\t\t\n\t\t// extract local coordinate axes\n\t\tlet rotQuat = this.getWorldQuaternion();\n\t\tthis.localX = new THREE.Vector3(1, 0, 0).applyQuaternion(rotQuat).normalize();\n\t\tthis.localY = new THREE.Vector3(0, 1, 0).applyQuaternion(rotQuat).normalize();\n\t\tthis.localZ = new THREE.Vector3(0, 0, 1).applyQuaternion(rotQuat).normalize();\n\t}\n\t\n\traycast(raycaster, intersects){\n\t\t\n\t\tlet is = [];\n\t\tthis.box.raycast(raycaster, is);\n\t\n\t\tif(is.length > 0){\n\t\t\tlet I = is[0];\n\t\t\tintersects.push({\n\t\t\t\tdistance: I.distance,\n\t\t\t\tobject: this,\n\t\t\t\tpoint: I.point.clone()\n\t\t\t});\n\t\t}\n\t};\n};\n","\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {ClipVolume} from \"./ClipVolume.js\";\nimport {PolygonClipVolume} from \"./PolygonClipVolume.js\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\n\nexport class ClippingTool extends EventDispatcher{\n\n\tconstructor(viewer){\n\t\tsuper(); \n\n\t\tthis.viewer = viewer;\n\n\t\tthis.maxPolygonVertices = 8; \n\t\t\n\t\tthis.addEventListener(\"start_inserting_clipping_volume\", e => {\n\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\ttype: \"cancel_insertions\"\n\t\t\t});\n\t\t});\n\n\t\tthis.sceneMarker = new THREE.Scene();\n\t\tthis.sceneVolume = new THREE.Scene();\n\t\tthis.sceneVolume.name = \"scene_clip_volume\";\n\t\tthis.viewer.inputHandler.registerInteractiveScene(this.sceneVolume);\n\n\t\tthis.onRemove = e => {\n\t\t\tthis.sceneVolume.remove(e.volume);\n\t\t};\n\t\t\n\t\tthis.onAdd = e => {\n\t\t\tthis.sceneVolume.add(e.volume);\n\t\t};\n\t\t\n\t\tthis.viewer.inputHandler.addEventListener(\"delete\", e => {\n\t\t\tlet volumes = e.selection.filter(e => (e instanceof ClipVolume));\n\t\t\tvolumes.forEach(e => this.viewer.scene.removeClipVolume(e));\n\t\t\tlet polyVolumes = e.selection.filter(e => (e instanceof PolygonClipVolume));\n\t\t\tpolyVolumes.forEach(e => this.viewer.scene.removePolygonClipVolume(e));\n\t\t});\n\t}\n\n\tsetScene(scene){\n\t\tif(this.scene === scene){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(this.scene){\n\t\t\tthis.scene.removeEventListeners(\"clip_volume_added\", this.onAdd);\n\t\t\tthis.scene.removeEventListeners(\"clip_volume_removed\", this.onRemove);\n\t\t\tthis.scene.removeEventListeners(\"polygon_clip_volume_added\", this.onAdd);\n\t\t\tthis.scene.removeEventListeners(\"polygon_clip_volume_removed\", this.onRemove);\n\t\t}\n\t\t\n\t\tthis.scene = scene;\n\t\t\n\t\tthis.scene.addEventListener(\"clip_volume_added\", this.onAdd);\n\t\tthis.scene.addEventListener(\"clip_volume_removed\", this.onRemove);\n\t\tthis.scene.addEventListener(\"polygon_clip_volume_added\", this.onAdd);\n\t\tthis.scene.addEventListener(\"polygon_clip_volume_removed\", this.onRemove);\n\t}\n\n\tstartInsertion(args = {}) {\t\n\t\tlet type = args.type || null;\n\n\t\tif(!type) return null;\n\n\t\tlet domElement = this.viewer.renderer.domElement;\n\t\tlet canvasSize = this.viewer.renderer.getSize(new THREE.Vector2());\n\n\t\tlet svg = $(`\n\t\t\n\n\t\t\t\n\t\t\t\t \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\t\t`);\n\t\t$(domElement.parentElement).append(svg);\n\n\t\tlet polyClipVol = new PolygonClipVolume(this.viewer.scene.getActiveCamera().clone());\n\n\t\tthis.dispatchEvent({\"type\": \"start_inserting_clipping_volume\"});\n\n\t\tthis.viewer.scene.addPolygonClipVolume(polyClipVol);\n\t\tthis.sceneMarker.add(polyClipVol);\n\n\t\tlet cancel = {\n\t\t\tcallback: null\n\t\t};\n\n\t\tlet insertionCallback = (e) => {\n\t\t\tif(e.button === THREE.MOUSE.LEFT){\n\t\t\t\t\n\t\t\t\tpolyClipVol.addMarker();\n\n\t\t\t\t// SVC Screen Line\n\t\t\t\tsvg.find(\"polyline\").each((index, target) => {\n\t\t\t\t\tlet newPoint = svg[0].createSVGPoint();\n\t\t\t\t\tnewPoint.x = e.offsetX;\n\t\t\t\t\tnewPoint.y = e.offsetY;\n\t\t\t\t\tlet polyline = target.points.appendItem(newPoint);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(polyClipVol.markers.length > this.maxPolygonVertices){\n\t\t\t\t\tcancel.callback();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\t\tpolyClipVol.markers[polyClipVol.markers.length - 1]);\n\t\t\t}else if(e.button === THREE.MOUSE.RIGHT){\n\t\t\t\tcancel.callback(e);\n\t\t\t}\n\t\t};\n\t\t\n\t\tcancel.callback = e => {\n\n\t\t\t//let first = svg.find(\"polyline\")[0].points[0];\n\t\t\t//svg.find(\"polyline\").each((index, target) => {\n\t\t\t//\tlet newPoint = svg[0].createSVGPoint();\n\t\t\t//\tnewPoint.x = first.x;\n\t\t\t//\tnewPoint.y = first.y;\n\t\t\t//\tlet polyline = target.points.appendItem(newPoint);\n\t\t\t//});\n\t\t\tsvg.remove();\n\n\t\t\tif(polyClipVol.markers.length > 3) {\n\t\t\t\tpolyClipVol.removeLastMarker();\n\t\t\t\tpolyClipVol.initialized = true;\t\n\t\t\t} else {\n\t\t\t\tthis.viewer.scene.removePolygonClipVolume(polyClipVol);\n\t\t\t}\n\n\t\t\tthis.viewer.renderer.domElement.removeEventListener(\"mouseup\", insertionCallback, true);\n\t\t\tthis.viewer.removeEventListener(\"cancel_insertions\", cancel.callback);\n\t\t\tthis.viewer.inputHandler.enabled = true;\n\t\t};\n\t\t\n\t\tthis.viewer.addEventListener(\"cancel_insertions\", cancel.callback);\n\t\tthis.viewer.renderer.domElement.addEventListener(\"mouseup\", insertionCallback , true);\n\t\tthis.viewer.inputHandler.enabled = false;\n\t\t\n\t\tpolyClipVol.addMarker();\n\t\tthis.viewer.inputHandler.startDragging(\n\t\t\tpolyClipVol.markers[polyClipVol.markers.length - 1]);\n\n\t\treturn polyClipVol;\n\t}\n\n\tupdate() {\n\n\t}\n};","\nimport {Enum} from \"../Enum.js\";\n\nvar GeoTIFF = (function (exports) {\n'use strict';\n\nconst Endianness = new Enum({\n\tLITTLE: \"II\",\n\tBIG: \"MM\",\n});\n\nconst Type = new Enum({\n\tBYTE: {value: 1, bytes: 1},\n\tASCII: {value: 2, bytes: 1},\n\tSHORT: {value: 3, bytes: 2},\n\tLONG: {value: 4, bytes: 4},\n\tRATIONAL: {value: 5, bytes: 8},\n\tSBYTE: {value: 6, bytes: 1},\n\tUNDEFINED: {value: 7, bytes: 1},\n\tSSHORT: {value: 8, bytes: 2},\n\tSLONG: {value: 9, bytes: 4},\n\tSRATIONAL: {value: 10, bytes: 8},\n\tFLOAT: {value: 11, bytes: 4},\n\tDOUBLE: {value: 12, bytes: 8},\n});\n\nconst Tag = new Enum({\n\tIMAGE_WIDTH: 256,\n\tIMAGE_HEIGHT: 257,\n\tBITS_PER_SAMPLE: 258,\n\tCOMPRESSION: 259,\n\tPHOTOMETRIC_INTERPRETATION: 262,\n\tSTRIP_OFFSETS: 273,\n\tORIENTATION: 274,\n\tSAMPLES_PER_PIXEL: 277,\n\tROWS_PER_STRIP: 278,\n\tSTRIP_BYTE_COUNTS: 279,\n\tX_RESOLUTION: 282,\n\tY_RESOLUTION: 283,\n\tPLANAR_CONFIGURATION: 284,\n\tRESOLUTION_UNIT: 296,\n\tSOFTWARE: 305,\n\tCOLOR_MAP: 320,\n\tSAMPLE_FORMAT: 339,\n\tMODEL_PIXEL_SCALE: 33550, // [GeoTIFF] TYPE: double N: 3\n\tMODEL_TIEPOINT: 33922, // [GeoTIFF] TYPE: double N: 6 * NUM_TIEPOINTS\n\tGEO_KEY_DIRECTORY: 34735, // [GeoTIFF] TYPE: short N: >= 4\n\tGEO_DOUBLE_PARAMS: 34736, // [GeoTIFF] TYPE: short N: variable\n\tGEO_ASCII_PARAMS: 34737, // [GeoTIFF] TYPE: ascii N: variable\n});\n\nconst typeMapping = new Map([\n\t[Type.BYTE, Uint8Array],\n\t[Type.ASCII, Uint8Array],\n\t[Type.SHORT, Uint16Array],\n\t[Type.LONG, Uint32Array],\n\t[Type.RATIONAL, Uint32Array],\n\t[Type.SBYTE, Int8Array],\n\t[Type.UNDEFINED, Uint8Array],\n\t[Type.SSHORT, Int16Array],\n\t[Type.SLONG, Int32Array],\n\t[Type.SRATIONAL, Int32Array],\n\t[Type.FLOAT, Float32Array],\n\t[Type.DOUBLE, Float64Array],\n]);\n\nclass IFDEntry{\n\n\tconstructor(tag, type, count, offset, value){\n\t\tthis.tag = tag;\n\t\tthis.type = type;\n\t\tthis.count = count;\n\t\tthis.offset = offset;\n\t\tthis.value = value;\n\t}\n\n}\n\nclass Image{\n\n\tconstructor(){\n\t\tthis.width = 0;\n\t\tthis.height = 0;\n\t\tthis.buffer = null;\n\t\tthis.metadata = [];\n\t}\n\n}\n\nclass Reader{\n\n\tconstructor(){\n\n\t}\n\n\tstatic read(data){\n\n\t\tlet endiannessTag = String.fromCharCode(...Array.from(data.slice(0, 2)));\n\t\tlet endianness = Endianness.fromValue(endiannessTag);\n\n\t\tlet tiffCheckTag = data.readUInt8(2);\n\n\t\tif(tiffCheckTag !== 42){\n\t\t\tthrow new Error(\"not a valid tiff file\");\n\t\t}\n\n\t\tlet offsetToFirstIFD = data.readUInt32LE(4);\n\n\t\tconsole.log(\"offsetToFirstIFD\", offsetToFirstIFD);\n\n\t\tlet ifds = [];\n\t\tlet IFDsRead = false;\n\t\tlet currentIFDOffset = offsetToFirstIFD;\n\t\tlet i = 0;\n\t\twhile(IFDsRead || i < 100){\n\n\t\t\tconsole.log(\"currentIFDOffset\", currentIFDOffset);\n\t\t\tlet numEntries = data.readUInt16LE(currentIFDOffset);\n\t\t\tlet nextIFDOffset = data.readUInt32LE(currentIFDOffset + 2 + numEntries * 12);\n\n\t\t\tconsole.log(\"next offset: \", currentIFDOffset + 2 + numEntries * 12);\n\n\t\t\tlet entryBuffer = data.slice(currentIFDOffset + 2, currentIFDOffset + 2 + 12 * numEntries);\n\n\t\t\tfor(let i = 0; i < numEntries; i++){\n\t\t\t\tlet tag = Tag.fromValue(entryBuffer.readUInt16LE(i * 12));\n\t\t\t\tlet type = Type.fromValue(entryBuffer.readUInt16LE(i * 12 + 2));\n\t\t\t\tlet count = entryBuffer.readUInt32LE(i * 12 + 4);\n\t\t\t\tlet offsetOrValue = entryBuffer.readUInt32LE(i * 12 + 8);\n\t\t\t\tlet valueBytes = type.bytes * count;\n\n\t\t\t\tlet value;\n\t\t\t\tif(valueBytes <= 4){\n\t\t\t\t\tvalue = offsetOrValue;\n\t\t\t\t}else{\n\t\t\t\t\tlet valueBuffer = new Uint8Array(valueBytes);\n\t\t\t\t\tvalueBuffer.set(data.slice(offsetOrValue, offsetOrValue + valueBytes));\n\t\t\t\t\t\n\t\t\t\t\tlet ArrayType = typeMapping.get(type);\n\n\t\t\t\t\tvalue = new ArrayType(valueBuffer.buffer);\n\n\t\t\t\t\tif(type === Type.ASCII){\n\t\t\t\t\t\tvalue = String.fromCharCode(...value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet ifd = new IFDEntry(tag, type, count, offsetOrValue, value);\n\n\t\t\t\tifds.push(ifd);\n\t\t\t}\n\n\t\t\tconsole.log(\"nextIFDOffset\", nextIFDOffset);\n\n\t\t\tif(nextIFDOffset === 0){\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentIFDOffset = nextIFDOffset;\n\t\t\ti++;\n\t\t}\n\n\t\tlet ifdForTag = (tag) => {\n\t\t\tfor(let entry of ifds){\n\t\t\t\tif(entry.tag === tag){\n\t\t\t\t\treturn entry;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\n\t\tlet width = ifdForTag(Tag.IMAGE_WIDTH, ifds).value;\n\t\tlet height = ifdForTag(Tag.IMAGE_HEIGHT, ifds).value;\n\t\tlet compression = ifdForTag(Tag.COMPRESSION, ifds).value;\n\t\tlet rowsPerStrip = ifdForTag(Tag.ROWS_PER_STRIP, ifds).value; \n\t\tlet ifdStripOffsets = ifdForTag(Tag.STRIP_OFFSETS, ifds);\n\t\tlet ifdStripByteCounts = ifdForTag(Tag.STRIP_BYTE_COUNTS, ifds);\n\n\t\tlet numStrips = Math.ceil(height / rowsPerStrip);\n\n\t\tlet stripByteCounts = [];\n\t\tfor(let i = 0; i < ifdStripByteCounts.count; i++){\n\t\t\tlet type = ifdStripByteCounts.type;\n\t\t\tlet offset = ifdStripByteCounts.offset + i * type.bytes;\n\n\t\t\tlet value;\n\t\t\tif(type === Type.SHORT){\n\t\t\t\tvalue = data.readUInt16LE(offset);\n\t\t\t}else if(type === Type.LONG){\n\t\t\t\tvalue = data.readUInt32LE(offset);\n\t\t\t}\n\n\t\t\tstripByteCounts.push(value);\n\t\t}\n\n\t\tlet stripOffsets = [];\n\t\tfor(let i = 0; i < ifdStripOffsets.count; i++){\n\t\t\tlet type = ifdStripOffsets.type;\n\t\t\tlet offset = ifdStripOffsets.offset + i * type.bytes;\n\n\t\t\tlet value;\n\t\t\tif(type === Type.SHORT){\n\t\t\t\tvalue = data.readUInt16LE(offset);\n\t\t\t}else if(type === Type.LONG){\n\t\t\t\tvalue = data.readUInt32LE(offset);\n\t\t\t}\n\n\t\t\tstripOffsets.push(value);\n\t\t}\n\n\t\tlet imageBuffer = new Uint8Array(width * height * 3);\n\t\t\n\t\tlet linesProcessed = 0;\n\t\tfor(let i = 0; i < numStrips; i++){\n\t\t\tlet stripOffset = stripOffsets[i];\n\t\t\tlet stripBytes = stripByteCounts[i];\n\t\t\tlet stripData = data.slice(stripOffset, stripOffset + stripBytes);\n\t\t\tlet lineBytes = width * 3;\n\t\t\tfor(let y = 0; y < rowsPerStrip; y++){\n\t\t\t\tlet line = stripData.slice(y * lineBytes, y * lineBytes + lineBytes);\n\t\t\t\timageBuffer.set(line, linesProcessed * lineBytes);\n\t\t\n\t\t\t\tif(line.length === lineBytes){\n\t\t\t\t\tlinesProcessed++;\n\t\t\t\t}else{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.log(`width: ${width}`);\n\t\tconsole.log(`height: ${height}`);\n\t\tconsole.log(`numStrips: ${numStrips}`);\n\t\tconsole.log(\"stripByteCounts\", stripByteCounts.join(\", \"));\n\t\tconsole.log(\"stripOffsets\", stripOffsets.join(\", \"));\n\n\t\tlet image = new Image();\n\t\timage.width = width;\n\t\timage.height = height;\n\t\timage.buffer = imageBuffer;\n\t\timage.metadata = ifds;\n\n\t\treturn image;\n\t}\n\n}\n\n\nclass Exporter{\n\n\tconstructor(){\n\n\t}\n\n\tstatic toTiffBuffer(image, params = {}){\n\n\t\tlet offsetToFirstIFD = 8;\n\t\t\n\t\tlet headerBuffer = new Uint8Array([0x49, 0x49, 42, 0, offsetToFirstIFD, 0, 0, 0]);\n\n\t\tlet [width, height] = [image.width, image.height];\n\n\t\tlet ifds = [\n\t\t\tnew IFDEntry(Tag.IMAGE_WIDTH, Type.SHORT, 1, null, width),\n\t\t\tnew IFDEntry(Tag.IMAGE_HEIGHT, Type.SHORT, 1, null, height),\n\t\t\tnew IFDEntry(Tag.BITS_PER_SAMPLE, Type.SHORT, 4, null, new Uint16Array([8, 8, 8, 8])),\n\t\t\tnew IFDEntry(Tag.COMPRESSION, Type.SHORT, 1, null, 1),\n\t\t\tnew IFDEntry(Tag.PHOTOMETRIC_INTERPRETATION, Type.SHORT, 1, null, 2),\n\t\t\tnew IFDEntry(Tag.ORIENTATION, Type.SHORT, 1, null, 1),\n\t\t\tnew IFDEntry(Tag.SAMPLES_PER_PIXEL, Type.SHORT, 1, null, 4),\n\t\t\tnew IFDEntry(Tag.ROWS_PER_STRIP, Type.LONG, 1, null, height),\n\t\t\tnew IFDEntry(Tag.STRIP_BYTE_COUNTS, Type.LONG, 1, null, width * height * 3),\n\t\t\tnew IFDEntry(Tag.PLANAR_CONFIGURATION, Type.SHORT, 1, null, 1),\n\t\t\tnew IFDEntry(Tag.RESOLUTION_UNIT, Type.SHORT, 1, null, 1),\n\t\t\tnew IFDEntry(Tag.SOFTWARE, Type.ASCII, 6, null, \"......\"),\n\t\t\tnew IFDEntry(Tag.STRIP_OFFSETS, Type.LONG, 1, null, null),\n\t\t\tnew IFDEntry(Tag.X_RESOLUTION, Type.RATIONAL, 1, null, new Uint32Array([1, 1])),\n\t\t\tnew IFDEntry(Tag.Y_RESOLUTION, Type.RATIONAL, 1, null, new Uint32Array([1, 1])),\n\t\t];\n\n\t\tif(params.ifdEntries){\n\t\t\tifds.push(...params.ifdEntries);\n\t\t}\n\n\t\tlet valueOffset = offsetToFirstIFD + 2 + ifds.length * 12 + 4;\n\n\t\t// create 12 byte buffer for each ifd and variable length buffers for ifd values\n\t\tlet ifdEntryBuffers = new Map();\n\t\tlet ifdValueBuffers = new Map();\n\t\tfor(let ifd of ifds){\n\t\t\tlet entryBuffer = new ArrayBuffer(12);\n\t\t\tlet entryView = new DataView(entryBuffer);\n\n\t\t\tlet valueBytes = ifd.type.bytes * ifd.count;\n\n\t\t\tentryView.setUint16(0, ifd.tag.value, true);\n\t\t\tentryView.setUint16(2, ifd.type.value, true);\n\t\t\tentryView.setUint32(4, ifd.count, true);\n\n\t\t\tif(ifd.count === 1 && ifd.type.bytes <= 4){\n\t\t\t\tentryView.setUint32(8, ifd.value, true);\n\t\t\t}else{\n\t\t\t\tentryView.setUint32(8, valueOffset, true);\n\n\t\t\t\tlet valueBuffer = new Uint8Array(ifd.count * ifd.type.bytes);\n\t\t\t\tif(ifd.type === Type.ASCII){\n\t\t\t\t\tvalueBuffer.set(new Uint8Array(ifd.value.split(\"\").map(c => c.charCodeAt(0))));\n\t\t\t\t}else{\n\t\t\t\t\tvalueBuffer.set(new Uint8Array(ifd.value.buffer));\n\t\t\t\t}\n\t\t\t\tifdValueBuffers.set(ifd.tag, valueBuffer);\n\n\t\t\t\tvalueOffset = valueOffset + valueBuffer.byteLength;\n\t\t\t}\n\n\t\t\tifdEntryBuffers.set(ifd.tag, entryBuffer);\n\t\t}\n\n\t\tlet imageBufferOffset = valueOffset;\n\n\t\tnew DataView(ifdEntryBuffers.get(Tag.STRIP_OFFSETS)).setUint32(8, imageBufferOffset, true);\n\n\t\tlet concatBuffers = (buffers) => {\n\n\t\t\tlet totalLength = buffers.reduce( (sum, buffer) => (sum + buffer.byteLength), 0);\n\t\t\tlet merged = new Uint8Array(totalLength);\n\n\t\t\tlet offset = 0;\n\t\t\tfor(let buffer of buffers){\n\t\t\t\tmerged.set(new Uint8Array(buffer), offset);\n\t\t\t\toffset += buffer.byteLength;\n\t\t\t}\n\n\t\t\treturn merged;\n\t\t};\n\t\t\n\t\tlet ifdBuffer = concatBuffers([\n\t\t\tnew Uint16Array([ifds.length]), \n\t\t\t...ifdEntryBuffers.values(), \n\t\t\tnew Uint32Array([0])]);\n\t\tlet ifdValueBuffer = concatBuffers([...ifdValueBuffers.values()]);\n\n\t\tlet tiffBuffer = concatBuffers([\n\t\t\theaderBuffer,\n\t\t\tifdBuffer,\n\t\t\tifdValueBuffer,\n\t\t\timage.buffer\n\t\t]);\n\n\t\treturn {width: width, height: height, buffer: tiffBuffer};\n\t}\n\n}\n\nexports.Tag = Tag;\nexports.Type = Type;\nexports.IFDEntry = IFDEntry;\nexports.Image = Image;\nexports.Reader = Reader;\nexports.Exporter = Exporter;\n\nreturn exports;\n\n}({}));\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Measure} from \"./Measure.js\";\nimport {Utils} from \"../utils.js\";\nimport {CameraMode} from \"../defines.js\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\n\nfunction updateAzimuth(viewer, measure){\n\n\tconst azimuth = measure.azimuth;\n\n\tconst isOkay = measure.points.length === 2;\n\n\tazimuth.node.visible = isOkay && measure.showAzimuth;\n\n\tif(!azimuth.node.visible){\n\t\treturn;\n\t}\n\n\tconst camera = viewer.scene.getActiveCamera();\n\tconst renderAreaSize = viewer.renderer.getSize(new THREE.Vector2());\n\tconst width = renderAreaSize.width;\n\tconst height = renderAreaSize.height;\n\t\n\tconst [p0, p1] = measure.points;\n\tconst r = p0.position.distanceTo(p1.position);\n\tconst northVec = Utils.getNorthVec(p0.position, r, viewer.getProjection());\n\tconst northPos = p0.position.clone().add(northVec);\n\n\tazimuth.center.position.copy(p0.position);\n\tazimuth.center.scale.set(2, 2, 2);\n\t\n\tazimuth.center.visible = false;\n\t// azimuth.target.visible = false;\n\n\n\t{ // north\n\t\tazimuth.north.position.copy(northPos);\n\t\tazimuth.north.scale.set(2, 2, 2);\n\n\t\tlet distance = azimuth.north.position.distanceTo(camera.position);\n\t\tlet pr = Utils.projectedRadius(1, camera, distance, width, height);\n\n\t\tlet scale = (5 / pr);\n\t\tazimuth.north.scale.set(scale, scale, scale);\n\t}\n\n\t{ // target\n\t\tazimuth.target.position.copy(p1.position);\n\t\tazimuth.target.position.z = azimuth.north.position.z;\n\n\t\tlet distance = azimuth.target.position.distanceTo(camera.position);\n\t\tlet pr = Utils.projectedRadius(1, camera, distance, width, height);\n\n\t\tlet scale = (5 / pr);\n\t\tazimuth.target.scale.set(scale, scale, scale);\n\t}\n\n\n\tazimuth.circle.position.copy(p0.position);\n\tazimuth.circle.scale.set(r, r, r);\n\tazimuth.circle.material.resolution.set(width, height);\n\n\t// to target\n\tazimuth.centerToTarget.geometry.setPositions([\n\t\t0, 0, 0,\n\t\t...p1.position.clone().sub(p0.position).toArray(),\n\t]);\n\tazimuth.centerToTarget.position.copy(p0.position);\n\tazimuth.centerToTarget.geometry.verticesNeedUpdate = true;\n\tazimuth.centerToTarget.geometry.computeBoundingSphere();\n\tazimuth.centerToTarget.computeLineDistances();\n\tazimuth.centerToTarget.material.resolution.set(width, height);\n\n\t// to target ground\n\tazimuth.centerToTargetground.geometry.setPositions([\n\t\t0, 0, 0,\n\t\tp1.position.x - p0.position.x,\n\t\tp1.position.y - p0.position.y,\n\t\t0,\n\t]);\n\tazimuth.centerToTargetground.position.copy(p0.position);\n\tazimuth.centerToTargetground.geometry.verticesNeedUpdate = true;\n\tazimuth.centerToTargetground.geometry.computeBoundingSphere();\n\tazimuth.centerToTargetground.computeLineDistances();\n\tazimuth.centerToTargetground.material.resolution.set(width, height);\n\n\t// to north\n\tazimuth.centerToNorth.geometry.setPositions([\n\t\t0, 0, 0,\n\t\tnorthPos.x - p0.position.x,\n\t\tnorthPos.y - p0.position.y,\n\t\t0,\n\t]);\n\tazimuth.centerToNorth.position.copy(p0.position);\n\tazimuth.centerToNorth.geometry.verticesNeedUpdate = true;\n\tazimuth.centerToNorth.geometry.computeBoundingSphere();\n\tazimuth.centerToNorth.computeLineDistances();\n\tazimuth.centerToNorth.material.resolution.set(width, height);\n\n\t// label\n\tconst radians = Utils.computeAzimuth(p0.position, p1.position, viewer.getProjection());\n\tlet degrees = THREE.Math.radToDeg(radians);\n\tif(degrees < 0){\n\t\tdegrees = 360 + degrees;\n\t}\n\tconst txtDegrees = `${degrees.toFixed(2)}°`;\n\tconst labelDir = northPos.clone().add(p1.position).multiplyScalar(0.5).sub(p0.position);\n\tif(labelDir.length() > 0){\n\t\tlabelDir.z = 0;\n\t\tlabelDir.normalize();\n\t\tconst labelVec = labelDir.clone().multiplyScalar(r);\n\t\tconst labelPos = p0.position.clone().add(labelVec);\n\t\tazimuth.label.position.copy(labelPos);\n\t}\n\tazimuth.label.setText(txtDegrees);\n\tlet distance = azimuth.label.position.distanceTo(camera.position);\n\tlet pr = Utils.projectedRadius(1, camera, distance, width, height);\n\tlet scale = (70 / pr);\n\tazimuth.label.scale.set(scale, scale, scale);\n}\n\nexport class MeasuringTool extends EventDispatcher{\n\tconstructor (viewer) {\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.addEventListener('start_inserting_measurement', e => {\n\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\ttype: 'cancel_insertions'\n\t\t\t});\n\t\t});\n\n\t\tthis.showLabels = true;\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.scene.name = 'scene_measurement';\n\t\tthis.light = new THREE.PointLight(0xffffff, 1.0);\n\t\tthis.scene.add(this.light);\n\n\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\n\t\tthis.onRemove = (e) => { this.scene.remove(e.measurement);};\n\t\tthis.onAdd = e => {this.scene.add(e.measurement);};\n\n\t\tfor(let measurement of viewer.scene.measurements){\n\t\t\tthis.onAdd({measurement: measurement});\n\t\t}\n\n\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\tviewer.addEventListener(\"render.pass.perspective_overlay\", this.render.bind(this));\n\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\n\t\tviewer.scene.addEventListener('measurement_added', this.onAdd);\n\t\tviewer.scene.addEventListener('measurement_removed', this.onRemove);\n\t}\n\n\tonSceneChange(e){\n\t\tif(e.oldScene){\n\t\t\te.oldScene.removeEventListener('measurement_added', this.onAdd);\n\t\t\te.oldScene.removeEventListener('measurement_removed', this.onRemove);\n\t\t}\n\n\t\te.scene.addEventListener('measurement_added', this.onAdd);\n\t\te.scene.addEventListener('measurement_removed', this.onRemove);\n\t}\n\n\tstartInsertion (args = {}) {\n\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\tlet measure = new Measure();\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'start_inserting_measurement',\n\t\t\tmeasure: measure\n\t\t});\n\n\t\tconst pick = (defaul, alternative) => {\n\t\t\tif(defaul != null){\n\t\t\t\treturn defaul;\n\t\t\t}else{\n\t\t\t\treturn alternative;\n\t\t\t}\n\t\t};\n\n\t\tmeasure.showDistances = (args.showDistances === null) ? true : args.showDistances;\n\n\t\tmeasure.showArea = pick(args.showArea, false);\n\t\tmeasure.showAngles = pick(args.showAngles, false);\n\t\tmeasure.showCoordinates = pick(args.showCoordinates, false);\n\t\tmeasure.showHeight = pick(args.showHeight, false);\n\t\tmeasure.showCircle = pick(args.showCircle, false);\n\t\tmeasure.showAzimuth = pick(args.showAzimuth, false);\n\t\tmeasure.showEdges = pick(args.showEdges, true);\n\t\tmeasure.closed = pick(args.closed, false);\n\t\tmeasure.maxMarkers = pick(args.maxMarkers, Infinity);\n\n\t\tmeasure.name = args.name || 'Measurement';\n\n\t\tthis.scene.add(measure);\n\n\t\tlet cancel = {\n\t\t\tremoveLastMarker: measure.maxMarkers > 3,\n\t\t\tcallback: null\n\t\t};\n\n\t\tlet insertionCallback = (e) => {\n\t\t\tif (e.button === THREE.MOUSE.LEFT) {\n\t\t\t\tmeasure.addMarker(measure.points[measure.points.length - 1].position.clone());\n\n\t\t\t\tif (measure.points.length >= measure.maxMarkers) {\n\t\t\t\t\tcancel.callback();\n\t\t\t\t}\n\n\t\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\t\tmeasure.spheres[measure.spheres.length - 1]);\n\t\t\t} else if (e.button === THREE.MOUSE.RIGHT) {\n\t\t\t\tcancel.callback();\n\t\t\t}\n\t\t};\n\n\t\tcancel.callback = e => {\n\t\t\tif (cancel.removeLastMarker) {\n\t\t\t\tmeasure.removeMarker(measure.points.length - 1);\n\t\t\t}\n\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, false);\n\t\t\tthis.viewer.removeEventListener('cancel_insertions', cancel.callback);\n\t\t};\n\n\t\tif (measure.maxMarkers > 1) {\n\t\t\tthis.viewer.addEventListener('cancel_insertions', cancel.callback);\n\t\t\tdomElement.addEventListener('mouseup', insertionCallback, false);\n\t\t}\n\n\t\tmeasure.addMarker(new THREE.Vector3(0, 0, 0));\n\t\tthis.viewer.inputHandler.startDragging(\n\t\t\tmeasure.spheres[measure.spheres.length - 1]);\n\n\t\tthis.viewer.scene.addMeasurement(measure);\n\n\t\treturn measure;\n\t}\n\t\n\tupdate(){\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\tlet domElement = this.renderer.domElement;\n\t\tlet measurements = this.viewer.scene.measurements;\n\n\t\tconst renderAreaSize = this.renderer.getSize(new THREE.Vector2());\n\t\tlet clientWidth = renderAreaSize.width;\n\t\tlet clientHeight = renderAreaSize.height;\n\n\t\tthis.light.position.copy(camera.position);\n\n\t\t// make size independant of distance\n\t\tfor (let measure of measurements) {\n\t\t\tmeasure.lengthUnit = this.viewer.lengthUnit;\n\t\t\tmeasure.lengthUnitDisplay = this.viewer.lengthUnitDisplay;\n\t\t\tmeasure.update();\n\n\t\t\tupdateAzimuth(this.viewer, measure);\n\n\t\t\t// spheres\n\t\t\tfor(let sphere of measure.spheres){\n\t\t\t\tlet distance = camera.position.distanceTo(sphere.getWorldPosition(new THREE.Vector3()));\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\tlet scale = (15 / pr);\n\t\t\t\tsphere.scale.set(scale, scale, scale);\n\t\t\t}\n\n\t\t\t// labels\n\t\t\tlet labels = measure.edgeLabels.concat(measure.angleLabels);\n\t\t\tfor(let label of labels){\n\t\t\t\tlet distance = camera.position.distanceTo(label.getWorldPosition(new THREE.Vector3()));\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\tlet scale = (70 / pr);\n\n\t\t\t\tif(Potree.debug.scale){\n\t\t\t\t\tscale = (Potree.debug.scale / pr);\n\t\t\t\t}\n\n\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t}\n\n\t\t\t// coordinate labels\n\t\t\tfor (let j = 0; j < measure.coordinateLabels.length; j++) {\n\t\t\t\tlet label = measure.coordinateLabels[j];\n\t\t\t\tlet sphere = measure.spheres[j];\n\n\t\t\t\tlet distance = camera.position.distanceTo(sphere.getWorldPosition(new THREE.Vector3()));\n\n\t\t\t\tlet screenPos = sphere.getWorldPosition(new THREE.Vector3()).clone().project(camera);\n\t\t\t\tscreenPos.x = Math.round((screenPos.x + 1) * clientWidth / 2);\n\t\t\t\tscreenPos.y = Math.round((-screenPos.y + 1) * clientHeight / 2);\n\t\t\t\tscreenPos.z = 0;\n\t\t\t\tscreenPos.y -= 30;\n\n\t\t\t\tlet labelPos = new THREE.Vector3( \n\t\t\t\t\t(screenPos.x / clientWidth) * 2 - 1, \n\t\t\t\t\t-(screenPos.y / clientHeight) * 2 + 1, \n\t\t\t\t\t0.5 );\n\t\t\t\tlabelPos.unproject(camera);\n\t\t\t\tif(this.viewer.scene.cameraMode == CameraMode.PERSPECTIVE) {\n\t\t\t\t\tlet direction = labelPos.sub(camera.position).normalize();\n\t\t\t\t\tlabelPos = new THREE.Vector3().addVectors(\n\t\t\t\t\t\tcamera.position, direction.multiplyScalar(distance));\n\n\t\t\t\t}\n\t\t\t\tlabel.position.copy(labelPos);\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\tlet scale = (70 / pr);\n\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t}\n\n\t\t\t// height label\n\t\t\tif (measure.showHeight) {\n\t\t\t\tlet label = measure.heightLabel;\n\n\t\t\t\t{\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\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 edge\n\t\t\t\t\tlet edge = measure.heightEdge;\n\n\t\t\t\t\tlet sorted = measure.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\n\t\t\t\t\tlet start = new THREE.Vector3(highPoint.x, highPoint.y, min);\n\t\t\t\t\tlet end = new THREE.Vector3(highPoint.x, highPoint.y, max);\n\n\t\t\t\t\tlet lowScreen = lowPoint.clone().project(camera);\n\t\t\t\t\tlet startScreen = start.clone().project(camera);\n\t\t\t\t\tlet endScreen = end.clone().project(camera);\n\n\t\t\t\t\tlet toPixelCoordinates = v => {\n\t\t\t\t\t\tlet r = v.clone().addScalar(1).divideScalar(2);\n\t\t\t\t\t\tr.x = r.x * clientWidth;\n\t\t\t\t\t\tr.y = r.y * clientHeight;\n\t\t\t\t\t\tr.z = 0;\n\n\t\t\t\t\t\treturn r;\n\t\t\t\t\t};\n\n\t\t\t\t\tlet lowEL = toPixelCoordinates(lowScreen);\n\t\t\t\t\tlet startEL = toPixelCoordinates(startScreen);\n\t\t\t\t\tlet endEL = toPixelCoordinates(endScreen);\n\n\t\t\t\t\tlet lToS = lowEL.distanceTo(startEL);\n\t\t\t\t\tlet sToE = startEL.distanceTo(endEL);\n\n\t\t\t\t\tedge.geometry.lineDistances = [0, lToS, lToS, lToS + sToE];\n\t\t\t\t\tedge.geometry.lineDistancesNeedUpdate = true;\n\n\t\t\t\t\tedge.material.dashSize = 10;\n\t\t\t\t\tedge.material.gapSize = 10;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // area label\n\t\t\t\tlet label = measure.areaLabel;\n\t\t\t\tlet distance = label.position.distanceTo(camera.position);\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\n\t\t\t\tlet scale = (70 / pr);\n\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t}\n\n\t\t\t{ // radius label\n\t\t\t\tlet label = measure.circleRadiusLabel;\n\t\t\t\tlet distance = label.position.distanceTo(camera.position);\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\n\t\t\t\tlet scale = (70 / pr);\n\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t}\n\n\t\t\t{ // edges\n\t\t\t\tconst materials = [\n\t\t\t\t\tmeasure.circleRadiusLine.material,\n\t\t\t\t\t...measure.edges.map( (e) => e.material),\n\t\t\t\t\tmeasure.heightEdge.material,\n\t\t\t\t\tmeasure.circleLine.material,\n\t\t\t\t];\n\n\t\t\t\tfor(const material of materials){\n\t\t\t\t\tmaterial.resolution.set(clientWidth, clientHeight);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!this.showLabels){\n\n\t\t\t\tconst labels = [\n\t\t\t\t\t...measure.sphereLabels, \n\t\t\t\t\t...measure.edgeLabels, \n\t\t\t\t\t...measure.angleLabels, \n\t\t\t\t\t...measure.coordinateLabels,\n\t\t\t\t\tmeasure.heightLabel,\n\t\t\t\t\tmeasure.areaLabel,\n\t\t\t\t\tmeasure.circleRadiusLabel,\n\t\t\t\t];\n\n\t\t\t\tfor(const label of labels){\n\t\t\t\t\tlabel.visible = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\trender(){\n\t\tthis.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t}\n};\n","\nexport class Message{\n\n\tconstructor(content){\n\t\tthis.content = content;\n\n\t\tlet closeIcon = `${exports.resourcePath}/icons/close.svg`;\n\n\t\tthis.element = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t\n\t\t\t
        `);\n\n\t\tthis.elClose = this.element.find(\"img[name=close]\");\n\n\t\tthis.elContainer = this.element.find(\"span[name=content_container]\");\n\n\t\tif(typeof content === \"string\"){\n\t\t\tthis.elContainer.append($(`${content}`));\n\t\t}else{\n\t\t\tthis.elContainer.append(content);\n\t\t}\n\n\t}\n\n\tsetMessage(content){\n\t\tthis.elContainer.empty();\n\t\tif(typeof content === \"string\"){\n\t\t\tthis.elContainer.append($(`${content}`));\n\t\t}else{\n\t\t\tthis.elContainer.append(content);\n\t\t}\n\t}\n\n}","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class PointCloudSM{\n\n\tconstructor(potreeRenderer){\n\n\t\tthis.potreeRenderer = potreeRenderer;\n\t\tthis.threeRenderer = this.potreeRenderer.threeRenderer;\n\n\t\tthis.target = new THREE.WebGLRenderTarget(2 * 1024, 2 * 1024, {\n\t\t\tminFilter: THREE.LinearFilter,\n\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\tformat: THREE.RGBAFormat,\n\t\t\ttype: THREE.FloatType\n\t\t});\n\t\tthis.target.depthTexture = new THREE.DepthTexture();\n\t\tthis.target.depthTexture.type = THREE.UnsignedIntType;\n\n\t\t//this.threeRenderer.setClearColor(0x000000, 1);\n\t\tthis.threeRenderer.setClearColor(0xff0000, 1);\n\n\t\t//HACK? removed while moving to three.js 109\n\t\t//this.threeRenderer.clearTarget(this.target, true, true, true); \n\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.threeRenderer.setRenderTarget(oldTarget);\n\t\t}\n\t}\n\n\tsetLight(light){\n\t\tthis.light = light;\n\n\t\tlet fov = (180 * light.angle) / Math.PI;\n\t\tlet aspect = light.shadow.mapSize.width / light.shadow.mapSize.height;\n\t\tlet near = 0.1;\n\t\tlet far = light.distance === 0 ? 10000 : light.distance;\n\t\tthis.camera = new THREE.PerspectiveCamera(fov, aspect, near, far);\n\t\tthis.camera.up.set(0, 0, 1);\n\t\tthis.camera.position.copy(light.position);\n\n\t\tlet target = new THREE.Vector3().subVectors(light.position, light.getWorldDirection(new THREE.Vector3()));\n\t\tthis.camera.lookAt(target);\n\n\t\tthis.camera.updateProjectionMatrix();\n\t\tthis.camera.updateMatrix();\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert();\n\t}\n\n\tsetSize(width, height){\n\t\tif(this.target.width !== width || this.target.height !== height){\n\t\t\tthis.target.dispose();\n\t\t}\n\t\tthis.target.setSize(width, height);\n\t}\n\n\trender(scene, camera){\n\n\t\tthis.threeRenderer.setClearColor(0x000000, 1);\n\t\t\n\t\tconst oldTarget = this.threeRenderer.getRenderTarget();\n\n\t\tthis.threeRenderer.setRenderTarget(this.target);\n\t\tthis.threeRenderer.clear(true, true, true);\n\n\t\tthis.potreeRenderer.render(scene, this.camera, this.target, {});\n\n\t\tthis.threeRenderer.setRenderTarget(oldTarget);\n\t}\n\n\n}","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Profile} from \"./Profile.js\";\nimport {Utils} from \"../utils.js\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\n\n\nexport class ProfileTool extends EventDispatcher {\n\tconstructor (viewer) {\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.addEventListener('start_inserting_profile', e => {\n\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\ttype: 'cancel_insertions'\n\t\t\t});\n\t\t});\n\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.scene.name = 'scene_profile';\n\t\tthis.light = new THREE.PointLight(0xffffff, 1.0);\n\t\tthis.scene.add(this.light);\n\n\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\n\t\tthis.onRemove = e => this.scene.remove(e.profile);\n\t\tthis.onAdd = e => this.scene.add(e.profile);\n\n\t\tfor(let profile of viewer.scene.profiles){\n\t\t\tthis.onAdd({profile: profile});\n\t\t}\n\n\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\tviewer.addEventListener(\"render.pass.perspective_overlay\", this.render.bind(this));\n\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\n\t\tviewer.scene.addEventListener('profile_added', this.onAdd);\n\t\tviewer.scene.addEventListener('profile_removed', this.onRemove);\n\t}\n\n\tonSceneChange(e){\n\t\tif(e.oldScene){\n\t\t\te.oldScene.removeEventListeners('profile_added', this.onAdd);\n\t\t\te.oldScene.removeEventListeners('profile_removed', this.onRemove);\n\t\t}\n\n\t\te.scene.addEventListener('profile_added', this.onAdd);\n\t\te.scene.addEventListener('profile_removed', this.onRemove);\n\t}\n\n\tstartInsertion (args = {}) {\n\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\tlet profile = new Profile();\n\t\tprofile.name = args.name || 'Profile';\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'start_inserting_profile',\n\t\t\tprofile: profile\n\t\t});\n\n\t\tthis.scene.add(profile);\n\n\t\tlet cancel = {\n\t\t\tcallback: null\n\t\t};\n\n\t\tlet insertionCallback = (e) => {\n\t\t\tif(e.button === THREE.MOUSE.LEFT){\n\t\t\t\tif(profile.points.length <= 1){\n\t\t\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\t\tlet distance = camera.position.distanceTo(profile.points[0]);\n\t\t\t\t\tlet clientSize = this.viewer.renderer.getSize(new THREE.Vector2());\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientSize.width, clientSize.height);\n\t\t\t\t\tlet width = (10 / pr);\n\n\t\t\t\t\tprofile.setWidth(width);\n\t\t\t\t}\n\n\t\t\t\tprofile.addMarker(profile.points[profile.points.length - 1].clone());\n\n\t\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\t\tprofile.spheres[profile.spheres.length - 1]);\n\t\t\t} else if (e.button === THREE.MOUSE.RIGHT) {\n\t\t\t\tcancel.callback();\n\t\t\t}\n\t\t};\n\n\t\tcancel.callback = e => {\n\t\t\tprofile.removeMarker(profile.points.length - 1);\n\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, false);\n\t\t\tthis.viewer.removeEventListener('cancel_insertions', cancel.callback);\n\t\t};\n\n\t\tthis.viewer.addEventListener('cancel_insertions', cancel.callback);\n\t\tdomElement.addEventListener('mouseup', insertionCallback, false);\n\n\t\tprofile.addMarker(new THREE.Vector3(0, 0, 0));\n\t\tthis.viewer.inputHandler.startDragging(\n\t\t\tprofile.spheres[profile.spheres.length - 1]);\n\n\t\tthis.viewer.scene.addProfile(profile);\n\n\t\treturn profile;\n\t}\n\t\n\tupdate(){\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\tlet profiles = this.viewer.scene.profiles;\n\t\tlet renderAreaSize = this.viewer.renderer.getSize(new THREE.Vector2());\n\t\tlet clientWidth = renderAreaSize.width;\n\t\tlet clientHeight = renderAreaSize.height;\n\n\t\tthis.light.position.copy(camera.position);\n\n\t\t// make size independant of distance\n\t\tfor(let profile of profiles){\n\t\t\tfor(let sphere of profile.spheres){\t\t\t\t\n\t\t\t\tlet distance = camera.position.distanceTo(sphere.getWorldPosition(new THREE.Vector3()));\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\tlet scale = (15 / pr);\n\t\t\t\tsphere.scale.set(scale, scale, scale);\n\t\t\t}\n\t\t}\n\t}\n\n\trender(){\n\t\tthis.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t}\n\n}\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {BoxVolume} from \"./Volume.js\";\nimport {Utils} from \"../utils.js\";\nimport {PointSizeType} from \"../defines.js\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\n\n\nexport class ScreenBoxSelectTool extends EventDispatcher{\n\n\tconstructor(viewer){\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.scene = new THREE.Scene();\n\n\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\tviewer.addEventListener(\"render.pass.perspective_overlay\", this.render.bind(this));\n\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\t}\n\n\tonSceneChange(scene){\n\t\tconsole.log(\"scene changed\");\n\t}\n\n\tstartInsertion(){\n\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\tlet volume = new BoxVolume();\n\t\tvolume.position.set(12345, 12345, 12345);\n\t\tvolume.showVolumeLabel = false;\n\t\tvolume.visible = false;\n\t\tvolume.update();\n\t\tthis.viewer.scene.addVolume(volume);\n\n\t\tthis.importance = 10;\n\n\t\tlet selectionBox = $(`
        `);\n\t\t$(domElement.parentElement).append(selectionBox);\n\t\tselectionBox.css(\"right\", \"10px\");\n\t\tselectionBox.css(\"bottom\", \"10px\");\n\n\t\tlet drag = e =>{\n\n\t\t\tvolume.visible = true;\n\n\t\t\tlet mStart = e.drag.start;\n\t\t\tlet mEnd = e.drag.end;\n\n\t\t\tlet box2D = new THREE.Box2();\n\t\t\tbox2D.expandByPoint(mStart);\n\t\t\tbox2D.expandByPoint(mEnd);\n\n\t\t\tselectionBox.css(\"left\", `${box2D.min.x}px`);\n\t\t\tselectionBox.css(\"top\", `${box2D.min.y}px`);\n\t\t\tselectionBox.css(\"width\", `${box2D.max.x - box2D.min.x}px`);\n\t\t\tselectionBox.css(\"height\", `${box2D.max.y - box2D.min.y}px`);\n\n\t\t\tlet camera = e.viewer.scene.getActiveCamera();\n\t\t\tlet size = e.viewer.renderer.getSize(new THREE.Vector2());\n\t\t\tlet frustumSize = new THREE.Vector2(\n\t\t\t\tcamera.right - camera.left, \n\t\t\t\tcamera.top - camera.bottom);\n\n\t\t\tlet screenCentroid = new THREE.Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5);\n\t\t\tlet ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height);\n\n\t\t\tlet diff = new THREE.Vector2().subVectors(e.drag.end, e.drag.start);\n\t\t\tdiff.divide(size).multiply(frustumSize);\n\t\t\t\n\t\t\tvolume.position.copy(ray.origin);\n\t\t\tvolume.up.copy(camera.up);\n\t\t\tvolume.rotation.copy(camera.rotation);\n\t\t\tvolume.scale.set(diff.x, diff.y, 1000 * 100);\n\n\t\t\te.consume();\n\t\t};\n\n\t\tlet drop = e => {\n\t\t\tthis.importance = 0;\n\n\t\t\t$(selectionBox).remove();\n\n\t\t\tthis.viewer.inputHandler.deselectAll();\n\t\t\tthis.viewer.inputHandler.toggleSelection(volume);\n\n\t\t\tlet camera = e.viewer.scene.getActiveCamera();\n\t\t\tlet size = e.viewer.renderer.getSize(new THREE.Vector2());\n\t\t\tlet screenCentroid = new THREE.Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5);\n\t\t\tlet ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height);\n\n\t\t\tlet line = new THREE.Line3(ray.origin, new THREE.Vector3().addVectors(ray.origin, ray.direction));\n\n\t\t\tthis.removeEventListener(\"drag\", drag);\n\t\t\tthis.removeEventListener(\"drop\", drop);\n\n\t\t\tlet allPointsNear = [];\n\t\t\tlet allPointsFar = [];\n\n\t\t\t// TODO support more than one point cloud\n\t\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\n\t\t\t\tif(!pointcloud.visible){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet volCam = camera.clone();\n\t\t\t\tvolCam.left = -volume.scale.x / 2; \n\t\t\t\tvolCam.right = +volume.scale.x / 2;\n\t\t\t\tvolCam.top = +volume.scale.y / 2;\n\t\t\t\tvolCam.bottom = -volume.scale.y / 2;\n\t\t\t\tvolCam.near = -volume.scale.z / 2;\n\t\t\t\tvolCam.far = +volume.scale.z / 2;\n\t\t\t\tvolCam.rotation.copy(volume.rotation);\n\t\t\t\tvolCam.position.copy(volume.position);\n\n\t\t\t\tvolCam.updateMatrix();\n\t\t\t\tvolCam.updateMatrixWorld();\n\t\t\t\tvolCam.updateProjectionMatrix();\n\t\t\t\tvolCam.matrixWorldInverse.copy(volCam.matrixWorld).invert();\n\n\t\t\t\tlet ray = new THREE.Ray(volCam.getWorldPosition(new THREE.Vector3()), volCam.getWorldDirection(new THREE.Vector3()));\n\t\t\t\tlet rayInverse = new THREE.Ray(\n\t\t\t\t\tray.origin.clone().add(ray.direction.clone().multiplyScalar(volume.scale.z)),\n\t\t\t\t\tray.direction.clone().multiplyScalar(-1));\n\n\t\t\t\tlet pickerSettings = {\n\t\t\t\t\twidth: 8, \n\t\t\t\t\theight: 8, \n\t\t\t\t\tpickWindowSize: 8, \n\t\t\t\t\tall: true,\n\t\t\t\t\tpickClipped: true,\n\t\t\t\t\tpointSizeType: PointSizeType.FIXED,\n\t\t\t\t\tpointSize: 1};\n\t\t\t\tlet pointsNear = pointcloud.pick(viewer, volCam, ray, pickerSettings);\n\n\t\t\t\tvolCam.rotateX(Math.PI);\n\t\t\t\tvolCam.updateMatrix();\n\t\t\t\tvolCam.updateMatrixWorld();\n\t\t\t\tvolCam.updateProjectionMatrix();\n\t\t\t\tvolCam.matrixWorldInverse.copy(volCam.matrixWorld).invert();\n\t\t\t\tlet pointsFar = pointcloud.pick(viewer, volCam, rayInverse, pickerSettings);\n\n\t\t\t\tallPointsNear.push(...pointsNear);\n\t\t\t\tallPointsFar.push(...pointsFar);\n\t\t\t}\n\n\t\t\tif(allPointsNear.length > 0 && allPointsFar.length > 0){\n\t\t\t\tlet viewLine = new THREE.Line3(ray.origin, new THREE.Vector3().addVectors(ray.origin, ray.direction));\n\n\t\t\t\tlet closestOnLine = allPointsNear.map(p => viewLine.closestPointToPoint(p.position, false, new THREE.Vector3()));\n\t\t\t\tlet closest = closestOnLine.sort( (a, b) => ray.origin.distanceTo(a) - ray.origin.distanceTo(b))[0];\n\n\t\t\t\tlet farthestOnLine = allPointsFar.map(p => viewLine.closestPointToPoint(p.position, false, new THREE.Vector3()));\n\t\t\t\tlet farthest = farthestOnLine.sort( (a, b) => ray.origin.distanceTo(b) - ray.origin.distanceTo(a))[0];\n\n\t\t\t\tlet distance = closest.distanceTo(farthest);\n\t\t\t\tlet centroid = new THREE.Vector3().addVectors(closest, farthest).multiplyScalar(0.5);\n\t\t\t\tvolume.scale.z = distance * 1.1;\n\t\t\t\tvolume.position.copy(centroid);\n\t\t\t}\n\n\t\t\tvolume.clip = true;\n\t\t};\n\n\t\tthis.addEventListener(\"drag\", drag);\n\t\tthis.addEventListener(\"drop\", drop);\n\n\t\tviewer.inputHandler.addInputListener(this);\n\n\t\treturn volume;\n\t}\n\n\tupdate(e){\n\t\t//console.log(e.delta)\n\t}\n\n\trender(){\n\t\tthis.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t}\n\n}","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class SpotLightHelper extends THREE.Object3D{\n\n\tconstructor(light, color){\n\t\tsuper();\n\n\t\tthis.light = light;\n\t\tthis.color = color;\n\n\t\t//this.up.set(0, 0, 1);\n\t\tthis.updateMatrix();\n\t\tthis.updateMatrixWorld();\n\n\t\t{ // SPHERE\n\t\t\tlet sg = new THREE.SphereGeometry(1, 32, 32);\n\t\t\tlet sm = new THREE.MeshNormalMaterial();\n\t\t\tthis.sphere = new THREE.Mesh(sg, sm);\n\t\t\tthis.sphere.scale.set(0.5, 0.5, 0.5);\n\t\t\tthis.add(this.sphere);\n\t\t}\n\n\t\t{ // LINES\n\t\t\t\n\n\t\t\tlet positions = new Float32Array([\n\t\t\t\t+0, +0, +0, +0, +0, -1,\n\n\t\t\t\t+0, +0, +0, -1, -1, -1,\n\t\t\t\t+0, +0, +0, +1, -1, -1,\n\t\t\t\t+0, +0, +0, +1, +1, -1,\n\t\t\t\t+0, +0, +0, -1, +1, -1,\n\n\t\t\t\t-1, -1, -1, +1, -1, -1,\n\t\t\t\t+1, -1, -1, +1, +1, -1,\n\t\t\t\t+1, +1, -1, -1, +1, -1,\n\t\t\t\t-1, +1, -1, -1, -1, -1,\n\t\t\t]);\n\n\t\t\tlet geometry = new THREE.BufferGeometry();\n\t\t\tgeometry.setAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n\n\t\t\tlet material = new THREE.LineBasicMaterial();\n\n\t\t\tthis.frustum = new THREE.LineSegments(geometry, material);\n\t\t\tthis.add(this.frustum);\n\n\t\t}\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\n\t\tthis.light.updateMatrix();\n\t\tthis.light.updateMatrixWorld();\n\n\t\tlet position = this.light.position;\n\t\tlet target = new THREE.Vector3().addVectors(\n\t\t\tthis.light.position, this.light.getWorldDirection(new THREE.Vector3()).multiplyScalar(-1));\n\t\t\n\t\tlet quat = new THREE.Quaternion().setFromRotationMatrix(\n\t\t\tnew THREE.Matrix4().lookAt( position, target, new THREE.Vector3( 0, 0, 1 ) )\n\t\t);\n\n\t\tthis.setRotationFromQuaternion(quat);\n\t\tthis.position.copy(position);\n\n\n\t\tlet coneLength = (this.light.distance > 0) ? this.light.distance : 1000;\n\t\tlet coneWidth = coneLength * Math.tan( this.light.angle * 0.5 );\n\n\t\tthis.frustum.scale.set(coneWidth, coneWidth, coneLength);\n\n\t}\n\n}","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Utils} from \"../utils.js\";\n\nexport class TransformationTool {\n\tconstructor(viewer) {\n\t\tthis.viewer = viewer;\n\n\t\tthis.scene = new THREE.Scene();\n\n\t\tthis.selection = [];\n\t\tthis.pivot = new THREE.Vector3();\n\t\tthis.dragging = false;\n\t\tthis.showPickVolumes = false;\n\n\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\t\tthis.viewer.inputHandler.addEventListener('selection_changed', (e) => {\n\t\t\tfor(let selected of this.selection){\n\t\t\t\tthis.viewer.inputHandler.blacklist.delete(selected);\n\t\t\t}\n\n\t\t\tthis.selection = e.selection;\n\n\t\t\tfor(let selected of this.selection){\n\t\t\t\tthis.viewer.inputHandler.blacklist.add(selected);\n\t\t\t}\n\n\t\t});\n\n\t\tlet red = 0xE73100;\n\t\tlet green = 0x44A24A;\n\t\tlet blue = 0x2669E7;\n\t\t\n\t\tthis.activeHandle = null;\n\t\tthis.scaleHandles = {\n\t\t\t\"scale.x+\": {name: \"scale.x+\", node: new THREE.Object3D(), color: red, alignment: [+1, +0, +0]},\n\t\t\t\"scale.x-\": {name: \"scale.x-\", node: new THREE.Object3D(), color: red, alignment: [-1, +0, +0]},\n\t\t\t\"scale.y+\": {name: \"scale.y+\", node: new THREE.Object3D(), color: green, alignment: [+0, +1, +0]},\n\t\t\t\"scale.y-\": {name: \"scale.y-\", node: new THREE.Object3D(), color: green, alignment: [+0, -1, +0]},\n\t\t\t\"scale.z+\": {name: \"scale.z+\", node: new THREE.Object3D(), color: blue, alignment: [+0, +0, +1]},\n\t\t\t\"scale.z-\": {name: \"scale.z-\", node: new THREE.Object3D(), color: blue, alignment: [+0, +0, -1]},\n\t\t};\n\t\tthis.focusHandles = {\n\t\t\t\"focus.x+\": {name: \"focus.x+\", node: new THREE.Object3D(), color: red, alignment: [+1, +0, +0]},\n\t\t\t\"focus.x-\": {name: \"focus.x-\", node: new THREE.Object3D(), color: red, alignment: [-1, +0, +0]},\n\t\t\t\"focus.y+\": {name: \"focus.y+\", node: new THREE.Object3D(), color: green, alignment: [+0, +1, +0]},\n\t\t\t\"focus.y-\": {name: \"focus.y-\", node: new THREE.Object3D(), color: green, alignment: [+0, -1, +0]},\n\t\t\t\"focus.z+\": {name: \"focus.z+\", node: new THREE.Object3D(), color: blue, alignment: [+0, +0, +1]},\n\t\t\t\"focus.z-\": {name: \"focus.z-\", node: new THREE.Object3D(), color: blue, alignment: [+0, +0, -1]},\n\t\t};\n\t\tthis.translationHandles = {\n\t\t\t\"translation.x\": {name: \"translation.x\", node: new THREE.Object3D(), color: red, alignment: [1, 0, 0]},\n\t\t\t\"translation.y\": {name: \"translation.y\", node: new THREE.Object3D(), color: green, alignment: [0, 1, 0]},\n\t\t\t\"translation.z\": {name: \"translation.z\", node: new THREE.Object3D(), color: blue, alignment: [0, 0, 1]},\n\t\t};\n\t\tthis.rotationHandles = {\n\t\t\t\"rotation.x\": {name: \"rotation.x\", node: new THREE.Object3D(), color: red, alignment: [1, 0, 0]},\n\t\t\t\"rotation.y\": {name: \"rotation.y\", node: new THREE.Object3D(), color: green, alignment: [0, 1, 0]},\n\t\t\t\"rotation.z\": {name: \"rotation.z\", node: new THREE.Object3D(), color: blue, alignment: [0, 0, 1]},\n\t\t};\n\t\tthis.handles = Object.assign({}, this.scaleHandles, this.focusHandles, this.translationHandles, this.rotationHandles);\n\t\tthis.pickVolumes = [];\n\n\t\tthis.initializeScaleHandles();\n\t\tthis.initializeFocusHandles();\n\t\tthis.initializeTranslationHandles();\n\t\tthis.initializeRotationHandles();\n\n\n\t\tlet boxFrameGeometry = new THREE.Geometry();\n\t\t{\n\t\t\t// bottom\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.5));\n\t\t\t// top\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.5));\n\t\t\t// sides\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, 0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(0.5, 0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, -0.5, -0.5));\n\t\t\tboxFrameGeometry.vertices.push(new THREE.Vector3(-0.5, 0.5, -0.5));\n\t\t}\n\t\tthis.frame = new THREE.LineSegments(boxFrameGeometry, new THREE.LineBasicMaterial({color: 0xffff00}));\n\t\tthis.scene.add(this.frame);\n\n\t\t\n\t}\n\n\tinitializeScaleHandles(){\n\t\tlet sgSphere = new THREE.SphereGeometry(1, 32, 32);\n\t\tlet sgLowPolySphere = new THREE.SphereGeometry(1, 16, 16);\n\n\t\tfor(let handleName of Object.keys(this.scaleHandles)){\n\t\t\tlet handle = this.scaleHandles[handleName];\n\t\t\tlet node = handle.node;\n\t\t\tthis.scene.add(node);\n\t\t\tnode.position.set(...handle.alignment).multiplyScalar(0.5);\n\n\t\t\tlet material = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: handle.color,\n\t\t\t\topacity: 0.4,\n\t\t\t\ttransparent: true\n\t\t\t\t});\n\n\t\t\tlet outlineMaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: 0x000000, \n\t\t\t\tside: THREE.BackSide,\n\t\t\t\topacity: 0.4,\n\t\t\t\ttransparent: true});\n\n\t\t\tlet pickMaterial = new THREE.MeshNormalMaterial({\n\t\t\t\topacity: 0.2,\n\t\t\t\ttransparent: true,\n\t\t\t\tvisible: this.showPickVolumes});\n\n\t\t\tlet sphere = new THREE.Mesh(sgSphere, material);\n\t\t\tsphere.scale.set(1.3, 1.3, 1.3);\n\t\t\tsphere.name = `${handleName}.handle`;\n\t\t\tnode.add(sphere);\n\t\t\t\n\t\t\tlet outline = new THREE.Mesh(sgSphere, outlineMaterial);\n\t\t\toutline.scale.set(1.4, 1.4, 1.4);\n\t\t\toutline.name = `${handleName}.outline`;\n\t\t\tsphere.add(outline);\n\n\t\t\tlet pickSphere = new THREE.Mesh(sgLowPolySphere, pickMaterial);\n\t\t\tpickSphere.name = `${handleName}.pick_volume`;\n\t\t\tpickSphere.scale.set(3, 3, 3);\n\t\t\tsphere.add(pickSphere);\n\t\t\tpickSphere.handle = handleName;\n\t\t\tthis.pickVolumes.push(pickSphere);\n\n\t\t\tnode.setOpacity = (target) => {\n\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\tsphere.visible = opacity.x > 0;\n\t\t\t\t\tpickSphere.visible = opacity.x > 0;\n\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\toutlineMaterial.opacity = opacity.x;\n\t\t\t\t\tpickSphere.material.opacity = opacity.x * 0.5;\n\t\t\t\t});\n\t\t\t\tt.start();\n\t\t\t};\n\n\t\t\tpickSphere.addEventListener(\"drag\", (e) => this.dragScaleHandle(e));\n\t\t\tpickSphere.addEventListener(\"drop\", (e) => this.dropScaleHandle(e));\n\n\t\t\tpickSphere.addEventListener(\"mouseover\", e => {\n\t\t\t\t//node.setOpacity(1);\n\t\t\t});\n\n\t\t\tpickSphere.addEventListener(\"click\", e => {\n\t\t\t\te.consume();\n\t\t\t});\n\n\t\t\tpickSphere.addEventListener(\"mouseleave\", e => {\n\t\t\t\t//node.setOpacity(0.4);\n\t\t\t});\n\t\t}\n\t}\n\n\tinitializeFocusHandles(){\n\t\t//let sgBox = new THREE.BoxGeometry(1, 1, 1);\n\t\tlet sgPlane = new THREE.PlaneGeometry(4, 4, 1, 1);\n\t\tlet sgLowPolySphere = new THREE.SphereGeometry(1, 16, 16);\n\n\t\tlet texture = new THREE.TextureLoader().load(`${exports.resourcePath}/icons/eye_2.png`);\n\n\t\tfor(let handleName of Object.keys(this.focusHandles)){\n\t\t\tlet handle = this.focusHandles[handleName];\n\t\t\tlet node = handle.node;\n\t\t\tthis.scene.add(node);\n\t\t\tlet align = handle.alignment;\n\n\t\t\t//node.lookAt(new THREE.Vector3().addVectors(node.position, new THREE.Vector3(...align)));\n\t\t\tnode.lookAt(new THREE.Vector3(...align));\n\n\t\t\tlet off = 0.8;\n\t\t\tif(align[0] === 1){\n\t\t\t\tnode.position.set(1, off, -off).multiplyScalar(0.5);\n\t\t\t\tnode.rotation.z = Math.PI / 2;\n\t\t\t}else if(align[0] === -1){\n\t\t\t\tnode.position.set(-1, -off, -off).multiplyScalar(0.5);\n\t\t\t\tnode.rotation.z = Math.PI / 2;\n\t\t\t}else if(align[1] === 1){\n\t\t\t\tnode.position.set(-off, 1, -off).multiplyScalar(0.5);\n\t\t\t\tnode.rotation.set(Math.PI / 2, Math.PI, 0.0);\n\t\t\t}else if(align[1] === -1){\n\t\t\t\tnode.position.set(off, -1, -off).multiplyScalar(0.5);\n\t\t\t\tnode.rotation.set(Math.PI / 2, 0.0, 0.0);\n\t\t\t}else if(align[2] === 1){\n\t\t\t\tnode.position.set(off, off, 1).multiplyScalar(0.5);\n\t\t\t}else if(align[2] === -1){\n\t\t\t\tnode.position.set(-off, off, -1).multiplyScalar(0.5);\n\t\t\t}\n\n\t\t\tlet material = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: handle.color,\n\t\t\t\topacity: 0,\n\t\t\t\ttransparent: true,\n\t\t\t\tmap: texture\n\t\t\t});\n\n\t\t\t//let outlineMaterial = new THREE.MeshBasicMaterial({\n\t\t\t//\tcolor: 0x000000, \n\t\t\t//\tside: THREE.BackSide,\n\t\t\t//\topacity: 0,\n\t\t\t//\ttransparent: true});\n\n\t\t\tlet pickMaterial = new THREE.MeshNormalMaterial({\n\t\t\t\t//opacity: 0,\n\t\t\t\ttransparent: true,\n\t\t\t\tvisible: this.showPickVolumes});\n\n\t\t\tlet box = new THREE.Mesh(sgPlane, material);\n\t\t\tbox.name = `${handleName}.handle`;\n\t\t\tbox.scale.set(1.5, 1.5, 1.5);\n\t\t\tbox.position.set(0, 0, 0);\n\t\t\tbox.visible = false;\n\t\t\tnode.add(box);\n\t\t\t//handle.focusNode = box;\n\t\t\t\n\t\t\t//let outline = new THREE.Mesh(sgPlane, outlineMaterial);\n\t\t\t//outline.scale.set(1.4, 1.4, 1.4);\n\t\t\t//outline.name = `${handleName}.outline`;\n\t\t\t//box.add(outline);\n\n\t\t\tlet pickSphere = new THREE.Mesh(sgLowPolySphere, pickMaterial);\n\t\t\tpickSphere.name = `${handleName}.pick_volume`;\n\t\t\tpickSphere.scale.set(3, 3, 3);\n\t\t\tbox.add(pickSphere);\n\t\t\tpickSphere.handle = handleName;\n\t\t\tthis.pickVolumes.push(pickSphere);\n\n\t\t\tnode.setOpacity = (target) => {\n\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\tpickSphere.visible = opacity.x > 0;\n\t\t\t\t\tbox.visible = opacity.x > 0;\n\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\t//outlineMaterial.opacity = opacity.x;\n\t\t\t\t\tpickSphere.material.opacity = opacity.x * 0.5;\n\t\t\t\t});\n\t\t\t\tt.start();\n\t\t\t};\n\n\t\t\tpickSphere.addEventListener(\"drag\", e => {});\n\n\t\t\tpickSphere.addEventListener(\"mouseup\", e => {\n\t\t\t\te.consume();\n\t\t\t});\n\n\t\t\tpickSphere.addEventListener(\"mousedown\", e => {\n\t\t\t\te.consume();\n\t\t\t});\n\n\t\t\tpickSphere.addEventListener(\"click\", e => {\n\t\t\t\te.consume();\n\n\t\t\t\tlet selected = this.selection[0];\n\t\t\t\tlet maxScale = Math.max(...selected.scale.toArray());\n\t\t\t\tlet minScale = Math.min(...selected.scale.toArray());\n\t\t\t\tlet handleLength = Math.abs(selected.scale.dot(new THREE.Vector3(...handle.alignment)));\n\t\t\t\tlet alignment = new THREE.Vector3(...handle.alignment).multiplyScalar(2 * maxScale / handleLength);\n\t\t\t\talignment.applyMatrix4(selected.matrixWorld);\n\t\t\t\tlet newCamPos = alignment;\n\t\t\t\tlet newCamTarget = selected.getWorldPosition(new THREE.Vector3());\n\n\t\t\t\tUtils.moveTo(this.viewer.scene, newCamPos, newCamTarget);\n\t\t\t});\n\n\t\t\tpickSphere.addEventListener(\"mouseover\", e => {\n\t\t\t\t//box.setOpacity(1);\n\t\t\t});\n\n\t\t\tpickSphere.addEventListener(\"mouseleave\", e => {\n\t\t\t\t//box.setOpacity(0.4);\n\t\t\t});\n\t\t}\n\t}\n\n\tinitializeTranslationHandles(){\n\t\tlet boxGeometry = new THREE.BoxGeometry(1, 1, 1);\n\n\t\tfor(let handleName of Object.keys(this.translationHandles)){\n\t\t\tlet handle = this.handles[handleName];\n\t\t\tlet node = handle.node;\n\t\t\tthis.scene.add(node);\n\n\t\t\tlet material = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: handle.color,\n\t\t\t\topacity: 0.4,\n\t\t\t\ttransparent: true});\n\n\t\t\tlet outlineMaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: 0x000000, \n\t\t\t\tside: THREE.BackSide,\n\t\t\t\topacity: 0.4,\n\t\t\t\ttransparent: true});\n\n\t\t\tlet pickMaterial = new THREE.MeshNormalMaterial({\n\t\t\t\topacity: 0.2,\n\t\t\t\ttransparent: true,\n\t\t\t\tvisible: this.showPickVolumes\n\t\t\t});\n\n\t\t\tlet box = new THREE.Mesh(boxGeometry, material);\n\t\t\tbox.name = `${handleName}.handle`;\n\t\t\tbox.scale.set(0.2, 0.2, 40);\n\t\t\tbox.lookAt(new THREE.Vector3(...handle.alignment));\n\t\t\tbox.renderOrder = 10;\n\t\t\tnode.add(box);\n\t\t\thandle.translateNode = box;\n\n\t\t\tlet outline = new THREE.Mesh(boxGeometry, outlineMaterial);\n\t\t\toutline.name = `${handleName}.outline`;\n\t\t\toutline.scale.set(3, 3, 1.03);\n\t\t\toutline.renderOrder = 0;\n\t\t\tbox.add(outline);\n\n\t\t\tlet pickVolume = new THREE.Mesh(boxGeometry, pickMaterial);\n\t\t\tpickVolume.name = `${handleName}.pick_volume`;\n\t\t\tpickVolume.scale.set(12, 12, 1.1);\n\t\t\tpickVolume.handle = handleName;\n\t\t\tbox.add(pickVolume);\n\t\t\tthis.pickVolumes.push(pickVolume);\n\n\t\t\tnode.setOpacity = (target) => {\n\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\tbox.visible = opacity.x > 0;\n\t\t\t\t\tpickVolume.visible = opacity.x > 0;\n\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\toutlineMaterial.opacity = opacity.x;\n\t\t\t\t\tpickMaterial.opacity = opacity.x * 0.5;\n\t\t\t\t});\n\t\t\t\tt.start();\n\t\t\t};\n\n\t\t\tpickVolume.addEventListener(\"drag\", (e) => {this.dragTranslationHandle(e)});\n\t\t\tpickVolume.addEventListener(\"drop\", (e) => {this.dropTranslationHandle(e)});\n\t\t}\n\t}\n\n\tinitializeRotationHandles(){\n\t\tlet adjust = 0.5;\n\t\tlet torusGeometry = new THREE.TorusGeometry(1, adjust * 0.015, 8, 64, Math.PI / 2);\n\t\tlet outlineGeometry = new THREE.TorusGeometry(1, adjust * 0.04, 8, 64, Math.PI / 2);\n\t\tlet pickGeometry = new THREE.TorusGeometry(1, adjust * 0.1, 6, 4, Math.PI / 2);\n\n\t\tfor(let handleName of Object.keys(this.rotationHandles)){\n\t\t\tlet handle = this.handles[handleName];\n\t\t\tlet node = handle.node;\n\t\t\tthis.scene.add(node);\n\n\t\t\tlet material = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: handle.color,\n\t\t\t\topacity: 0.4,\n\t\t\t\ttransparent: true});\n\n\t\t\tlet outlineMaterial = new THREE.MeshBasicMaterial({\n\t\t\t\tcolor: 0x000000, \n\t\t\t\tside: THREE.BackSide,\n\t\t\t\topacity: 0.4,\n\t\t\t\ttransparent: true});\n\n\t\t\tlet pickMaterial = new THREE.MeshNormalMaterial({\n\t\t\t\topacity: 0.2,\n\t\t\t\ttransparent: true,\n\t\t\t\tvisible: this.showPickVolumes\n\t\t\t});\n\n\t\t\tlet box = new THREE.Mesh(torusGeometry, material);\n\t\t\tbox.name = `${handleName}.handle`;\n\t\t\tbox.scale.set(20, 20, 20);\n\t\t\tbox.lookAt(new THREE.Vector3(...handle.alignment));\n\t\t\tnode.add(box);\n\t\t\thandle.translateNode = box;\n\n\t\t\tlet outline = new THREE.Mesh(outlineGeometry, outlineMaterial);\n\t\t\toutline.name = `${handleName}.outline`;\n\t\t\toutline.scale.set(1, 1, 1);\n\t\t\toutline.renderOrder = 0;\n\t\t\tbox.add(outline);\n\n\t\t\tlet pickVolume = new THREE.Mesh(pickGeometry, pickMaterial);\n\t\t\tpickVolume.name = `${handleName}.pick_volume`;\n\t\t\tpickVolume.scale.set(1, 1, 1);\n\t\t\tpickVolume.handle = handleName;\n\t\t\tbox.add(pickVolume);\n\t\t\tthis.pickVolumes.push(pickVolume);\n\n\t\t\tnode.setOpacity = (target) => {\n\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\tbox.visible = opacity.x > 0;\n\t\t\t\t\tpickVolume.visible = opacity.x > 0;\n\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\toutlineMaterial.opacity = opacity.x;\n\t\t\t\t\tpickMaterial.opacity = opacity.x * 0.5;\n\t\t\t\t});\n\t\t\t\tt.start();\n\t\t\t};\n\n\n\t\t\t//pickVolume.addEventListener(\"mouseover\", (e) => {\n\t\t\t//\t//let a = this.viewer.scene.getActiveCamera().getWorldDirection(new THREE.Vector3()).dot(pickVolume.getWorldDirection(new THREE.Vector3()));\n\t\t\t//\tconsole.log(pickVolume.getWorldDirection(new THREE.Vector3()));\n\t\t\t//});\n\t\t\t\n\t\t\tpickVolume.addEventListener(\"drag\", (e) => {this.dragRotationHandle(e)});\n\t\t\tpickVolume.addEventListener(\"drop\", (e) => {this.dropRotationHandle(e)});\n\t\t}\n\t}\n\n\tdragRotationHandle(e){\n\t\tlet drag = e.drag;\n\t\tlet handle = this.activeHandle;\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\n\t\tif(!handle){\n\t\t\treturn\n\t\t};\n\n\t\tlet localNormal = new THREE.Vector3(...handle.alignment);\n\t\tlet n = new THREE.Vector3();\n\t\tn.copy(new THREE.Vector4(...localNormal.toArray(), 0).applyMatrix4(handle.node.matrixWorld));\n\t\tn.normalize();\n\n\t\tif (!drag.intersectionStart){\n\n\t\t\t//this.viewer.scene.scene.remove(this.debug);\n\t\t\t//this.debug = new THREE.Object3D();\n\t\t\t//this.viewer.scene.scene.add(this.debug);\n\t\t\t//Utils.debugSphere(this.debug, drag.location, 3, 0xaaaaaa);\n\t\t\t//let debugEnd = drag.location.clone().add(n.clone().multiplyScalar(20));\n\t\t\t//Utils.debugLine(this.debug, drag.location, debugEnd, 0xff0000);\n\n\t\t\tdrag.intersectionStart = drag.location;\n\t\t\tdrag.objectStart = drag.object.getWorldPosition(new THREE.Vector3());\n\t\t\tdrag.handle = handle;\n\n\t\t\tlet plane = new THREE.Plane().setFromNormalAndCoplanarPoint(n, drag.intersectionStart);\n\n\t\t\tdrag.dragPlane = plane;\n\t\t\tdrag.pivot = drag.intersectionStart;\n\t\t}else{\n\t\t\thandle = drag.handle;\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tlet mouse = drag.end;\n\t\tlet domElement = this.viewer.renderer.domElement;\n\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\n\t\tlet I = ray.intersectPlane(drag.dragPlane, new THREE.Vector3());\n\n\t\tif (I) {\n\t\t\tlet center = this.scene.getWorldPosition(new THREE.Vector3());\n\t\t\tlet from = drag.pivot;\n\t\t\tlet to = I;\n\n\t\t\tlet v1 = from.clone().sub(center).normalize();\n\t\t\tlet v2 = to.clone().sub(center).normalize();\n\n\t\t\tlet angle = Math.acos(v1.dot(v2));\n\t\t\tlet sign = Math.sign(v1.cross(v2).dot(n));\n\t\t\tangle = angle * sign;\n\t\t\tif (Number.isNaN(angle)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet normal = new THREE.Vector3(...handle.alignment);\n\t\t\tfor (let selection of this.selection) {\n\t\t\t\tselection.rotateOnAxis(normal, angle);\n\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\ttype: \"orientation_changed\",\n\t\t\t\t\tobject: selection\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdrag.pivot = I;\n\t\t}\n\t}\n\n\tdropRotationHandle(e){\n\t\tthis.dragging = false;\n\t\tthis.setActiveHandle(null);\n\t}\n\n\tdragTranslationHandle(e){\n\t\tlet drag = e.drag;\n\t\tlet handle = this.activeHandle;\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\n\t\tif(!drag.intersectionStart && handle){\n\t\t\tdrag.intersectionStart = drag.location;\n\t\t\tdrag.objectStart = drag.object.getWorldPosition(new THREE.Vector3());\n\n\t\t\tlet start = drag.intersectionStart;\n\t\t\tlet dir = new THREE.Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld);\n\t\t\tlet end = new THREE.Vector3().addVectors(start, dir);\n\t\t\tlet line = new THREE.Line3(start.clone(), end.clone());\n\t\t\tdrag.line = line;\n\n\t\t\tlet camOnLine = line.closestPointToPoint(camera.position, false, new THREE.Vector3());\n\t\t\tlet normal = new THREE.Vector3().subVectors(camera.position, camOnLine);\n\t\t\tlet plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart);\n\t\t\tdrag.dragPlane = plane;\n\t\t\tdrag.pivot = drag.intersectionStart;\n\t\t}else{\n\t\t\thandle = drag.handle;\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\t{\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\tlet I = ray.intersectPlane(drag.dragPlane, new THREE.Vector3());\n\n\t\t\tif (I) {\n\t\t\t\tlet iOnLine = drag.line.closestPointToPoint(I, false, new THREE.Vector3());\n\n\t\t\t\tlet diff = new THREE.Vector3().subVectors(iOnLine, drag.pivot);\n\n\t\t\t\tfor (let selection of this.selection) {\n\t\t\t\t\tselection.position.add(diff);\n\t\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\t\ttype: \"position_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 = drag.pivot.add(diff);\n\t\t\t}\n\t\t}\n\t}\n\n\tdropTranslationHandle(e){\n\t\tthis.dragging = false;\n\t\tthis.setActiveHandle(null);\n\t}\n\n\tdropScaleHandle(e){\n\t\tthis.dragging = false;\n\t\tthis.setActiveHandle(null);\n\t}\n\n\tdragScaleHandle(e){\n\t\tlet drag = e.drag;\n\t\tlet handle = this.activeHandle;\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\n\t\tif(!drag.intersectionStart){\n\t\t\tdrag.intersectionStart = drag.location;\n\t\t\tdrag.objectStart = drag.object.getWorldPosition(new THREE.Vector3());\n\t\t\tdrag.handle = handle;\n\n\t\t\tlet start = drag.intersectionStart;\n\t\t\tlet dir = new THREE.Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld);\n\t\t\tlet end = new THREE.Vector3().addVectors(start, dir);\n\t\t\tlet line = new THREE.Line3(start.clone(), end.clone());\n\t\t\tdrag.line = line;\n\n\t\t\tlet camOnLine = line.closestPointToPoint(camera.position, false, new THREE.Vector3());\n\t\t\tlet normal = new THREE.Vector3().subVectors(camera.position, camOnLine);\n\t\t\tlet plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart);\n\t\t\tdrag.dragPlane = plane;\n\t\t\tdrag.pivot = drag.intersectionStart;\n\n\t\t\t//Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05);\n\t\t}else{\n\t\t\thandle = drag.handle;\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\t{\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\tlet I = ray.intersectPlane(drag.dragPlane, new THREE.Vector3());\n\n\t\t\tif (I) {\n\t\t\t\tlet iOnLine = drag.line.closestPointToPoint(I, false, new THREE.Vector3());\n\t\t\t\tlet direction = handle.alignment.reduce( (a, v) => a + v, 0);\n\n\t\t\t\tlet toObjectSpace = this.selection[0].matrixWorld.clone().invert();\n\t\t\t\tlet iOnLineOS = iOnLine.clone().applyMatrix4(toObjectSpace);\n\t\t\t\tlet pivotOS = drag.pivot.clone().applyMatrix4(toObjectSpace);\n\t\t\t\tlet diffOS = new THREE.Vector3().subVectors(iOnLineOS, pivotOS);\n\t\t\t\tlet dragDirectionOS = diffOS.clone().normalize();\n\t\t\t\tif(iOnLine.distanceTo(drag.pivot) === 0){\n\t\t\t\t\tdragDirectionOS.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tlet dragDirection = dragDirectionOS.dot(new THREE.Vector3(...handle.alignment));\n\n\t\t\t\tlet diff = new THREE.Vector3().subVectors(iOnLine, drag.pivot);\n\t\t\t\tlet diffScale = new THREE.Vector3(...handle.alignment).multiplyScalar(diff.length() * direction * dragDirection);\n\t\t\t\tlet diffPosition = diff.clone().multiplyScalar(0.5);\n\n\t\t\t\tfor (let selection of this.selection) {\n\t\t\t\t\tselection.scale.add(diffScale);\n\t\t\t\t\tselection.scale.x = Math.max(0.1, selection.scale.x);\n\t\t\t\t\tselection.scale.y = Math.max(0.1, selection.scale.y);\n\t\t\t\t\tselection.scale.z = Math.max(0.1, selection.scale.z);\n\t\t\t\t\tselection.position.add(diffPosition);\n\t\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\t\ttype: \"position_changed\",\n\t\t\t\t\t\tobject: selection\n\t\t\t\t\t});\n\t\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\t\ttype: \"scale_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.copy(iOnLine);\n\t\t\t\t//Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05);\n\t\t\t}\n\t\t}\n\t}\n\n\tsetActiveHandle(handle){\n\t\tif(this.dragging){\n\t\t\treturn;\n\t\t}\n\n\t\tif(this.activeHandle === handle){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activeHandle = handle;\n\n\t\tif(handle === null){\n\t\t\tfor(let handleName of Object.keys(this.handles)){\n\t\t\t\tlet handle = this.handles[handleName];\n\t\t\t\thandle.node.setOpacity(0);\n\t\t\t}\n\t\t}\n\n\t\tfor(let handleName of Object.keys(this.focusHandles)){\n\t\t\tlet handle = this.focusHandles[handleName];\n\n\t\t\tif(this.activeHandle === handle){\n\t\t\t\thandle.node.setOpacity(1.0);\n\t\t\t}else{\n\t\t\t\thandle.node.setOpacity(0.4)\n\t\t\t}\n\t\t}\n\n\t\tfor(let handleName of Object.keys(this.translationHandles)){\n\t\t\tlet handle = this.translationHandles[handleName];\n\n\t\t\tif(this.activeHandle === handle){\n\t\t\t\thandle.node.setOpacity(1.0);\n\t\t\t}else{\n\t\t\t\thandle.node.setOpacity(0.4)\n\t\t\t}\n\t\t}\n\n\t\tfor(let handleName of Object.keys(this.rotationHandles)){\n\t\t\tlet handle = this.rotationHandles[handleName];\n\n\t\t\t//if(this.activeHandle === handle){\n\t\t\t//\thandle.node.setOpacity(1.0);\n\t\t\t//}else{\n\t\t\t//\thandle.node.setOpacity(0.4)\n\t\t\t//}\n\n\t\t\thandle.node.setOpacity(0.4);\n\t\t}\n\n\t\tfor(let handleName of Object.keys(this.scaleHandles)){\n\t\t\tlet handle = this.scaleHandles[handleName];\n\n\t\t\tif(this.activeHandle === handle){\n\t\t\t\thandle.node.setOpacity(1.0);\n\n\t\t\t\tlet relatedFocusHandle = this.focusHandles[handle.name.replace(\"scale\", \"focus\")];\n\t\t\t\tlet relatedFocusNode = relatedFocusHandle.node;\n\t\t\t\trelatedFocusNode.setOpacity(0.4);\n\n\t\t\t\tfor(let translationHandleName of Object.keys(this.translationHandles)){\n\t\t\t\t\tlet translationHandle = this.translationHandles[translationHandleName];\n\t\t\t\t\ttranslationHandle.node.setOpacity(0.4);\n\t\t\t\t}\n\n\t\t\t\t//let relatedTranslationHandle = this.translationHandles[\n\t\t\t\t//\thandle.name.replace(\"scale\", \"translation\").replace(/[+-]/g, \"\")];\n\t\t\t\t//let relatedTranslationNode = relatedTranslationHandle.node;\n\t\t\t\t//relatedTranslationNode.setOpacity(0.4);\n\n\n\t\t\t}else{\n\t\t\t\thandle.node.setOpacity(0.4)\n\t\t\t}\n\t\t}\n\n\t\t\n\n\n\n\t\tif(handle){\n\t\t\thandle.node.setOpacity(1.0);\n\t\t}\n\n\t\t\n\t}\n\n\tupdate () {\n\n\t\tif(this.selection.length === 1){\n\n\t\t\tthis.scene.visible = true;\n\n\t\t\tthis.scene.updateMatrix();\n\t\t\tthis.scene.updateMatrixWorld();\n\n\t\t\tlet selected = this.selection[0];\n\t\t\tlet world = selected.matrixWorld;\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\tlet mouse = this.viewer.inputHandler.mouse;\n\n\t\t\tlet center = selected.boundingBox.getCenter(new THREE.Vector3()).clone().applyMatrix4(selected.matrixWorld);\n\n\t\t\tthis.scene.scale.copy(selected.boundingBox.getSize(new THREE.Vector3()).multiply(selected.scale));\n\t\t\tthis.scene.position.copy(center);\n\t\t\tthis.scene.rotation.copy(selected.rotation);\n\n\t\t\tthis.scene.updateMatrixWorld();\n\n\t\t\t{\n\t\t\t\t// adjust scale of components\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\tlet node = handle.node;\n\n\t\t\t\t\tlet handlePos = node.getWorldPosition(new THREE.Vector3());\n\t\t\t\t\tlet distance = handlePos.distanceTo(camera.position);\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\t\t\tlet ws = node.parent.getWorldScale(new THREE.Vector3());\n\n\t\t\t\t\tlet s = (7 / pr);\n\t\t\t\t\tlet scale = new THREE.Vector3(s, s, s).divide(ws);\n\n\t\t\t\t\tlet rot = new THREE.Matrix4().makeRotationFromEuler(node.rotation);\n\t\t\t\t\tlet rotInv = rot.clone().invert();\n\n\t\t\t\t\tscale.applyMatrix4(rotInv);\n\t\t\t\t\tscale.x = Math.abs(scale.x);\n\t\t\t\t\tscale.y = Math.abs(scale.y);\n\t\t\t\t\tscale.z = Math.abs(scale.z);\n\n\t\t\t\t\tnode.scale.copy(scale);\n\t\t\t\t}\n\n\t\t\t\t// adjust rotation handles\n\t\t\t\tif(!this.dragging){\n\t\t\t\t\tlet tWorld = this.scene.matrixWorld;\n\t\t\t\t\tlet tObject = tWorld.clone().invert();\n\t\t\t\t\tlet camObjectPos = camera.getWorldPosition(new THREE.Vector3()).applyMatrix4(tObject);\n\n\t\t\t\t\tlet x = this.rotationHandles[\"rotation.x\"].node.rotation;\n\t\t\t\t\tlet y = this.rotationHandles[\"rotation.y\"].node.rotation;\n\t\t\t\t\tlet z = this.rotationHandles[\"rotation.z\"].node.rotation;\n\n\t\t\t\t\tx.order = \"ZYX\";\n\t\t\t\t\ty.order = \"ZYX\";\n\n\t\t\t\t\tlet above = camObjectPos.z > 0;\n\t\t\t\t\tlet below = !above;\n\t\t\t\t\tlet PI_HALF = Math.PI / 2;\n\n\t\t\t\t\tif(above){\n\t\t\t\t\t\tif(camObjectPos.x > 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\tx.x = 1 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 3 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 0 * PI_HALF;\n\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\tx.x = 1 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 2 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 1 * PI_HALF;\n\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\tx.x = 2 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 2 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 2 * PI_HALF;\n\t\t\t\t\t\t}else if(camObjectPos.x > 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\tx.x = 2 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 3 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 3 * PI_HALF;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else if(below){\n\t\t\t\t\t\tif(camObjectPos.x > 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\tx.x = 0 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 0 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 0 * PI_HALF;\n\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\tx.x = 0 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 1 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 1 * PI_HALF;\n\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\tx.x = 3 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 1 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 2 * PI_HALF;\n\t\t\t\t\t\t}else if(camObjectPos.x > 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\tx.x = 3 * PI_HALF;\n\t\t\t\t\t\t\ty.y = 0 * PI_HALF;\n\t\t\t\t\t\t\tz.z = 3 * PI_HALF;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t{\n\t\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\t\tlet raycaster = new THREE.Raycaster(ray.origin, ray.direction);\n\t\t\t\t\tlet intersects = raycaster.intersectObjects(this.pickVolumes.filter(v => v.visible), true);\n\n\t\t\t\t\tif(intersects.length > 0){\n\t\t\t\t\t\tlet I = intersects[0];\n\t\t\t\t\t\tlet handleName = I.object.handle;\n\t\t\t\t\t\tthis.setActiveHandle(this.handles[handleName]);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.setActiveHandle(null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// \n\t\t\t\tfor(let handleName of Object.keys(this.scaleHandles)){\n\t\t\t\t\tlet handle = this.handles[handleName];\n\t\t\t\t\tlet node = handle.node;\n\t\t\t\t\tlet alignment = handle.alignment;\n\n\t\t\t\t\t\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t}else{\n\t\t\tthis.scene.visible = false;\n\t\t}\n\t\t\n\t}\n\n};\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Volume, BoxVolume} from \"./Volume.js\";\nimport {Utils} from \"../utils.js\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\n\nexport class VolumeTool extends EventDispatcher{\n\tconstructor (viewer) {\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.addEventListener('start_inserting_volume', e => {\n\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\ttype: 'cancel_insertions'\n\t\t\t});\n\t\t});\n\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.scene.name = 'scene_volume';\n\n\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\n\t\tthis.onRemove = e => {\n\t\t\tthis.scene.remove(e.volume);\n\t\t};\n\n\t\tthis.onAdd = e => {\n\t\t\tthis.scene.add(e.volume);\n\t\t};\n\n\t\tfor(let volume of viewer.scene.volumes){\n\t\t\tthis.onAdd({volume: volume});\n\t\t}\n\n\t\tthis.viewer.inputHandler.addEventListener('delete', e => {\n\t\t\tlet volumes = e.selection.filter(e => (e instanceof Volume));\n\t\t\tvolumes.forEach(e => this.viewer.scene.removeVolume(e));\n\t\t});\n\n\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\tviewer.addEventListener(\"render.pass.scene\", e => this.render(e));\n\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\n\t\tviewer.scene.addEventListener('volume_added', this.onAdd);\n\t\tviewer.scene.addEventListener('volume_removed', this.onRemove);\n\t}\n\n\tonSceneChange(e){\n\t\tif(e.oldScene){\n\t\t\te.oldScene.removeEventListeners('volume_added', this.onAdd);\n\t\t\te.oldScene.removeEventListeners('volume_removed', this.onRemove);\n\t\t}\n\n\t\te.scene.addEventListener('volume_added', this.onAdd);\n\t\te.scene.addEventListener('volume_removed', this.onRemove);\n\t}\n\n\tstartInsertion (args = {}) {\n\t\tlet volume;\n\t\tif(args.type){\n\t\t\tvolume = new args.type();\n\t\t}else{\n\t\t\tvolume = new BoxVolume();\n\t\t}\n\t\t\n\t\tvolume.clip = args.clip || false;\n\t\tvolume.name = args.name || 'Volume';\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'start_inserting_volume',\n\t\t\tvolume: volume\n\t\t});\n\n\t\tthis.viewer.scene.addVolume(volume);\n\t\tthis.scene.add(volume);\n\n\t\tlet cancel = {\n\t\t\tcallback: null\n\t\t};\n\n\t\tlet drag = e => {\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\n\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\te.drag.end, \n\t\t\t\tthis.viewer.scene.getActiveCamera(), \n\t\t\t\tthis.viewer, \n\t\t\t\tthis.viewer.scene.pointclouds, \n\t\t\t\t{pickClipped: false});\n\n\t\t\tif (I) {\n\t\t\t\tvolume.position.copy(I.location);\n\n\t\t\t\tlet wp = volume.getWorldPosition(new THREE.Vector3()).applyMatrix4(camera.matrixWorldInverse);\n\t\t\t\t// let pp = new THREE.Vector4(wp.x, wp.y, wp.z).applyMatrix4(camera.projectionMatrix);\n\t\t\t\tlet w = Math.abs((wp.z / 5));\n\t\t\t\tvolume.scale.set(w, w, w);\n\t\t\t}\n\t\t};\n\n\t\tlet drop = e => {\n\t\t\tvolume.removeEventListener('drag', drag);\n\t\t\tvolume.removeEventListener('drop', drop);\n\n\t\t\tcancel.callback();\n\t\t};\n\n\t\tcancel.callback = e => {\n\t\t\tvolume.removeEventListener('drag', drag);\n\t\t\tvolume.removeEventListener('drop', drop);\n\t\t\tthis.viewer.removeEventListener('cancel_insertions', cancel.callback);\n\t\t};\n\n\t\tvolume.addEventListener('drag', drag);\n\t\tvolume.addEventListener('drop', drop);\n\t\tthis.viewer.addEventListener('cancel_insertions', cancel.callback);\n\n\t\tthis.viewer.inputHandler.startDragging(volume);\n\n\t\treturn volume;\n\t}\n\n\tupdate(){\n\t\tif (!this.viewer.scene) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\tlet renderAreaSize = this.viewer.renderer.getSize(new THREE.Vector2());\n\t\tlet clientWidth = renderAreaSize.width;\n\t\tlet clientHeight = renderAreaSize.height;\n\n\t\tlet volumes = this.viewer.scene.volumes;\n\t\tfor (let volume of volumes) {\n\t\t\tlet label = volume.label;\n\t\t\t\n\t\t\t{\n\n\t\t\t\tlet distance = label.position.distanceTo(camera.position);\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\n\t\t\t\tlet scale = (70 / pr);\n\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t}\n\n\t\t\tlet calculatedVolume = volume.getVolume();\n\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\tlet text = Utils.addCommas(calculatedVolume.toFixed(3)) + ' ' + this.viewer.lengthUnitDisplay.code + '\\u00B3';\n\t\t\tlabel.setText(text);\n\t\t}\n\t}\n\n\trender(params){\n\t\tconst renderer = this.viewer.renderer;\n\n\t\tconst oldTarget = renderer.getRenderTarget();\n\t\t\n\t\tif(params.renderTarget){\n\t\t\trenderer.setRenderTarget(params.renderTarget);\n\t\t}\n\t\trenderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t\trenderer.setRenderTarget(oldTarget);\n\t}\n\n}\n","\r\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\r\n\r\nimport {Utils} from \"../utils.js\";\r\n\r\nexport class Compass{\r\n\r\n\tconstructor(viewer){\r\n\t\tthis.viewer = viewer;\r\n\r\n\t\tthis.visible = false;\r\n\t\tthis.dom = this.createElement();\r\n\r\n\t\tviewer.addEventListener(\"update\", () => {\r\n\t\t\tconst direction = viewer.scene.view.direction.clone();\r\n\t\t\tdirection.z = 0;\r\n\t\t\tdirection.normalize();\r\n\r\n\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\r\n\t\t\tconst p1 = camera.getWorldPosition(new THREE.Vector3());\r\n\t\t\tconst p2 = p1.clone().add(direction);\r\n\r\n\t\t\tconst projection = viewer.getProjection();\r\n\t\t\tconst azimuth = Utils.computeAzimuth(p1, p2, projection);\r\n\t\t\t\r\n\t\t\tthis.dom.css(\"transform\", `rotateZ(${-azimuth}rad)`);\r\n\t\t});\r\n\r\n\t\tthis.dom.click( () => {\r\n\t\t\tviewer.setTopView();\r\n\t\t});\r\n\r\n\t\tconst renderArea = $(viewer.renderArea);\r\n\t\trenderArea.append(this.dom);\r\n\r\n\t\tthis.setVisible(this.visible);\r\n\t}\r\n\r\n\tsetVisible(visible){\r\n\t\tthis.visible = visible;\r\n\r\n\t\tconst value = visible ? \"\" : \"none\";\r\n\t\tthis.dom.css(\"display\", value);\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this.visible;\r\n\t}\r\n\r\n\tcreateElement(){\r\n\t\tconst style = `style=\"position: absolute; top: 10px; right: 10px; z-index: 10000; width: 64px;\"`;\r\n\t\tconst img = $(``);\r\n\r\n\t\treturn img;\r\n\t}\r\n\r\n};","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\n\nexport class PotreeRenderer {\n\n\tconstructor (viewer) {\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\t{\n\t\t\tlet dummyScene = new THREE.Scene();\n\t\t\tlet geometry = new THREE.SphereGeometry(0.001, 2, 2);\n\t\t\tlet mesh = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial());\n\t\t\tmesh.position.set(36453, 35163, 764712);\n\t\t\tdummyScene.add(mesh);\n\n\t\t\tthis.dummyMesh = mesh;\n\t\t\tthis.dummyScene = dummyScene;\n\t\t}\n\t}\n\n\tclearTargets(){\n\n\t}\n\n\tclear(){\n\t\tlet {viewer, renderer} = this;\n\n\n\t\t// render skybox\n\t\tif(viewer.background === \"skybox\"){\n\t\t\trenderer.setClearColor(0xff0000, 1);\n\t\t}else if(viewer.background === \"gradient\"){\n\t\t\trenderer.setClearColor(0x00ff00, 1);\n\t\t}else if(viewer.background === \"black\"){\n\t\t\trenderer.setClearColor(0x000000, 1);\n\t\t}else if(viewer.background === \"white\"){\n\t\t\trenderer.setClearColor(0xFFFFFF, 1);\n\t\t}else{\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t}\n\n\t\trenderer.clear();\n\t}\n \n\trender(params){\n\t\tlet {viewer, renderer} = this;\n\n\t\tconst camera = params.camera ? params.camera : viewer.scene.getActiveCamera();\n\n\t\tviewer.dispatchEvent({type: \"render.pass.begin\",viewer: viewer});\n\n\t\tconst renderAreaSize = renderer.getSize(new THREE.Vector2());\n\t\tconst width = params.viewport ? params.viewport[2] : renderAreaSize.x;\n\t\tconst height = params.viewport ? params.viewport[3] : renderAreaSize.y;\n\n\t\t// render skybox\n\t\tif(viewer.background === \"skybox\"){\n\t\t\tviewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation);\n\t\t\tviewer.skybox.camera.fov = viewer.scene.cameraP.fov;\n\t\t\tviewer.skybox.camera.aspect = viewer.scene.cameraP.aspect;\n\t\t\t\n\t\t\tviewer.skybox.parent.rotation.x = 0;\n\t\t\tviewer.skybox.parent.updateMatrixWorld();\n\n\t\t\tviewer.skybox.camera.updateProjectionMatrix();\n\t\t\trenderer.render(viewer.skybox.scene, viewer.skybox.camera);\n\t\t}else if(viewer.background === \"gradient\"){\n\t\t\trenderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG);\n\t\t}\n\t\t\n\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\t\t\tconst {material} = pointcloud;\n\t\t\tmaterial.useEDL = false;\n\t\t}\n\t\t\n\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, null, {\n\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof Potree.SphereVolume)),\n\t\t});\n\t\t\n\t\t// render scene\n\t\trenderer.render(viewer.scene.scene, camera);\n\n\t\tviewer.dispatchEvent({type: \"render.pass.scene\",viewer: viewer});\n\t\t\n\t\tviewer.clippingTool.update();\n\t\trenderer.render(viewer.clippingTool.sceneMarker, viewer.scene.cameraScreenSpace); //viewer.scene.cameraScreenSpace);\n\t\trenderer.render(viewer.clippingTool.sceneVolume, camera);\n\n\t\trenderer.render(viewer.controls.sceneControls, camera);\n\t\t\n\t\trenderer.clearDepth();\n\t\t\n\t\tviewer.transformationTool.update();\n\t\t\n\t\tviewer.dispatchEvent({type: \"render.pass.perspective_overlay\",viewer: viewer});\n\n\t\t// renderer.render(viewer.controls.sceneControls, camera);\n\t\t// renderer.render(viewer.clippingTool.sceneVolume, camera);\n\t\t// renderer.render(viewer.transformationTool.scene, camera);\n\t\t\n\t\t// renderer.setViewport(width - viewer.navigationCube.width, \n\t\t// \t\t\t\t\t\t\theight - viewer.navigationCube.width, \n\t\t// \t\t\t\t\t\t\tviewer.navigationCube.width, viewer.navigationCube.width);\n\t\t// renderer.render(viewer.navigationCube, viewer.navigationCube.camera);\t\t\n\t\t// renderer.setViewport(0, 0, width, height);\n\t\t\n\t\tviewer.dispatchEvent({type: \"render.pass.end\",viewer: viewer});\n\t}\n\n}\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {PointCloudSM} from \"../utils/PointCloudSM.js\";\nimport {EyeDomeLightingMaterial} from \"../materials/EyeDomeLightingMaterial.js\";\nimport {SphereVolume} from \"../utils/Volume.js\";\nimport {Utils} from \"../utils.js\";\n\nexport class EDLRenderer{\n\tconstructor(viewer){\n\t\tthis.viewer = viewer;\n\n\t\tthis.edlMaterial = null;\n\n\t\tthis.rtRegular;\n\t\tthis.rtEDL;\n\n\t\tthis.gl = viewer.renderer.getContext();\n\n\t\tthis.shadowMap = new PointCloudSM(this.viewer.pRenderer);\n\t}\n\n\tinitEDL(){\n\t\tif (this.edlMaterial != null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.edlMaterial = new EyeDomeLightingMaterial();\n\t\tthis.edlMaterial.depthTest = true;\n\t\tthis.edlMaterial.depthWrite = true;\n\t\tthis.edlMaterial.transparent = true;\n\n\t\tthis.rtEDL = new THREE.WebGLRenderTarget(1024, 1024, {\n\t\t\tminFilter: THREE.NearestFilter,\n\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\tformat: THREE.RGBAFormat,\n\t\t\ttype: THREE.FloatType,\n\t\t\tdepthTexture: new THREE.DepthTexture(undefined, undefined, THREE.UnsignedIntType)\n\t\t});\n\n\t\tthis.rtRegular = new THREE.WebGLRenderTarget(1024, 1024, {\n\t\t\tminFilter: THREE.NearestFilter,\n\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\tformat: THREE.RGBAFormat,\n\t\t\tdepthTexture: new THREE.DepthTexture(undefined, undefined, THREE.UnsignedIntType)\n\t\t});\n\t};\n\n\tresize(width, height){\n\t\tif(this.screenshot){\n\t\t\twidth = this.screenshot.target.width;\n\t\t\theight = this.screenshot.target.height;\n\t\t}\n\n\t\tthis.rtEDL.setSize(width , height);\n\t\tthis.rtRegular.setSize(width , height);\n\t}\n\n\tmakeScreenshot(camera, size, callback){\n\n\t\tif(camera === undefined || camera === null){\n\t\t\tcamera = this.viewer.scene.getActiveCamera();\n\t\t}\n\n\t\tif(size === undefined || size === null){\n\t\t\tsize = this.viewer.renderer.getSize(new THREE.Vector2());\n\t\t}\n\n\t\tlet {width, height} = size;\n\n\t\t//let maxTextureSize = viewer.renderer.capabilities.maxTextureSize;\n\t\t//if(width * 4 < \n\t\twidth = 2 * width;\n\t\theight = 2 * height;\n\n\t\tlet target = new THREE.WebGLRenderTarget(width, height, {\n\t\t\tformat: THREE.RGBAFormat,\n\t\t});\n\n\t\tthis.screenshot = {\n\t\t\ttarget: target\n\t\t};\n\n\t\t// HACK? removed because of error, was this important?\n\t\t//this.viewer.renderer.clearTarget(target, true, true, true);\n\n\t\tthis.render();\n\n\t\tlet pixelCount = width * height;\n\t\tlet buffer = new Uint8Array(4 * pixelCount);\n\n\t\tthis.viewer.renderer.readRenderTargetPixels(target, 0, 0, width, height, buffer);\n\n\t\t// flip vertically\n\t\tlet bytesPerLine = width * 4;\n\t\tfor(let i = 0; i < parseInt(height / 2); i++){\n\t\t\tlet j = height - i - 1;\n\n\t\t\tlet lineI = buffer.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine);\n\t\t\tlet lineJ = buffer.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine);\n\t\t\tbuffer.set(lineJ, i * bytesPerLine);\n\t\t\tbuffer.set(lineI, j * bytesPerLine);\n\t\t}\n\n\t\tthis.screenshot.target.dispose();\n\t\tdelete this.screenshot;\n\n\t\treturn {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tbuffer: buffer\n\t\t};\n\t}\n\n\tclearTargets(){\n\t\tconst viewer = this.viewer;\n\t\tconst {renderer} = viewer;\n\n\t\tconst oldTarget = renderer.getRenderTarget();\n\n\t\trenderer.setRenderTarget( this.rtEDL );\n\t\trenderer.clear( true, true, true );\n\n\t\trenderer.setRenderTarget( this.rtRegular );\n\t\trenderer.clear( true, true, false );\n\n\t\trenderer.setRenderTarget(oldTarget);\n\t}\n\n\tclear(){\n\t\tthis.initEDL();\n\t\tconst viewer = this.viewer;\n\n\t\tconst {renderer, background} = viewer;\n\n\t\tif(background === \"skybox\"){\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t} else if (background === 'gradient') {\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t} else if (background === 'black') {\n\t\t\trenderer.setClearColor(0x000000, 1);\n\t\t} else if (background === 'white') {\n\t\t\trenderer.setClearColor(0xFFFFFF, 1);\n\t\t} else {\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t}\n\t\t\n\t\trenderer.clear();\n\n\t\tthis.clearTargets();\n\t}\n\n\trenderShadowMap(visiblePointClouds, camera, lights){\n\n\t\tconst {viewer} = this;\n\n\t\tconst doShadows = lights.length > 0 && !(lights[0].disableShadowUpdates);\n\t\tif(doShadows){\n\t\t\tlet light = lights[0];\n\n\t\t\tthis.shadowMap.setLight(light);\n\n\t\t\tlet originalAttributes = new Map();\n\t\t\tfor(let pointcloud of viewer.scene.pointclouds){\n\t\t\t\t// TODO IMPORTANT !!! check\n\t\t\t\toriginalAttributes.set(pointcloud, pointcloud.material.activeAttributeName);\n\t\t\t\tpointcloud.material.disableEvents();\n\t\t\t\tpointcloud.material.activeAttributeName = \"depth\";\n\t\t\t\t//pointcloud.material.pointColorType = PointColorType.DEPTH;\n\t\t\t}\n\n\t\t\tthis.shadowMap.render(viewer.scene.scenePointCloud, camera);\n\n\t\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\t\tlet originalAttribute = originalAttributes.get(pointcloud);\n\t\t\t\t// TODO IMPORTANT !!! check\n\t\t\t\tpointcloud.material.activeAttributeName = originalAttribute;\n\t\t\t\tpointcloud.material.enableEvents();\n\t\t\t}\n\n\t\t\tviewer.shadowTestCam.updateMatrixWorld();\n\t\t\tviewer.shadowTestCam.matrixWorldInverse.copy(viewer.shadowTestCam.matrixWorld).invert();\n\t\t\tviewer.shadowTestCam.updateProjectionMatrix();\n\t\t}\n\n\t}\n\n\trender(params){\n\t\tthis.initEDL();\n\n\t\tconst viewer = this.viewer;\n\t\tlet camera = params.camera ? params.camera : viewer.scene.getActiveCamera();\n\t\tconst {width, height} = this.viewer.renderer.getSize(new THREE.Vector2());\n\n\n\t\tviewer.dispatchEvent({type: \"render.pass.begin\",viewer: viewer});\n\t\t\n\t\tthis.resize(width, height);\n\n\t\tconst visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible);\n\n\t\tif(this.screenshot){\n\t\t\tlet oldBudget = Potree.pointBudget;\n\t\t\tPotree.pointBudget = Math.max(10 * 1000 * 1000, 2 * oldBudget);\n\t\t\tlet result = Potree.updatePointClouds(\n\t\t\t\tviewer.scene.pointclouds, \n\t\t\t\tcamera, \n\t\t\t\tviewer.renderer);\n\t\t\tPotree.pointBudget = oldBudget;\n\t\t}\n\n\t\tlet lights = [];\n\t\tviewer.scene.scene.traverse(node => {\n\t\t\tif(node.type === \"SpotLight\"){\n\t\t\t\tlights.push(node);\n\t\t\t}\n\t\t});\n\n\t\tif(viewer.background === \"skybox\"){\n\t\t\tviewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation);\n\t\t\tviewer.skybox.camera.fov = viewer.scene.cameraP.fov;\n\t\t\tviewer.skybox.camera.aspect = viewer.scene.cameraP.aspect;\n\n\t\t\tviewer.skybox.parent.rotation.x = 0;\n\t\t\tviewer.skybox.parent.updateMatrixWorld();\n\n\t\t\tviewer.skybox.camera.updateProjectionMatrix();\n\t\t\tviewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera);\n\t\t} else if (viewer.background === 'gradient') {\n\t\t\tviewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG);\n\t\t} \n\n\t\t//TODO adapt to multiple lights\n\t\tthis.renderShadowMap(visiblePointClouds, camera, lights);\n\n\t\t{ // COLOR & DEPTH PASS\n\t\t\tfor (let pointcloud of visiblePointClouds) {\n\t\t\t\tlet octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new THREE.Vector3()).x;\n\n\t\t\t\tlet material = pointcloud.material;\n\t\t\t\tmaterial.weighted = false;\n\t\t\t\tmaterial.useLogarithmicDepthBuffer = false;\n\t\t\t\tmaterial.useEDL = true;\n\n\t\t\t\tmaterial.screenWidth = width;\n\t\t\t\tmaterial.screenHeight = height;\n\t\t\t\tmaterial.uniforms.visibleNodes.value = pointcloud.material.visibleNodesTexture;\n\t\t\t\tmaterial.uniforms.octreeSize.value = octreeSize;\n\t\t\t\tmaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(pointcloud.scale.x, pointcloud.scale.y, pointcloud.scale.z);\n\t\t\t}\n\t\t\t\n\t\t\t// TODO adapt to multiple lights\n\t\t\tviewer.renderer.setRenderTarget(this.rtEDL);\n\t\t\t\n\t\t\tif(lights.length > 0){\n\t\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, {\n\t\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t\t\tshadowMaps: [this.shadowMap],\n\t\t\t\t\ttransparent: false,\n\t\t\t\t});\n\t\t\t}else{\n\n\t\t\t\t\n\t\t\t\t// let test = camera.clone();\n\t\t\t\t// test.matrixAutoUpdate = false;\n\n\t\t\t\t// //test.updateMatrixWorld = () => {};\n\n\t\t\t\t// let mat = new THREE.Matrix4().set(\n\t\t\t\t// \t1, 0, 0, 0,\n\t\t\t\t// \t0, 0, 1, 0,\n\t\t\t\t// \t0, -1, 0, 0,\n\t\t\t\t// \t0, 0, 0, 1,\n\t\t\t\t// );\n\t\t\t\t// mat.invert()\n\n\t\t\t\t// test.matrix.multiplyMatrices(mat, test.matrix);\n\t\t\t\t// test.updateMatrixWorld();\n\n\t\t\t\t//test.matrixWorld.multiplyMatrices(mat, test.matrixWorld);\n\t\t\t\t//test.matrixWorld.multiply(mat);\n\t\t\t\t//test.matrixWorldInverse.invert(test.matrixWorld);\n\t\t\t\t//test.matrixWorldInverse.multiplyMatrices(test.matrixWorldInverse, mat);\n\t\t\t\t\n\n\t\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, {\n\t\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t\t\ttransparent: false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t\n\t\t}\n\n\t\tviewer.dispatchEvent({type: \"render.pass.scene\", viewer: viewer, renderTarget: this.rtRegular});\n\t\tviewer.renderer.setRenderTarget(null);\n\t\tviewer.renderer.render(viewer.scene.scene, camera);\n\n\t\t{ // EDL PASS\n\n\t\t\tconst uniforms = this.edlMaterial.uniforms;\n\n\t\t\tuniforms.screenWidth.value = width;\n\t\t\tuniforms.screenHeight.value = height;\n\n\t\t\tlet proj = camera.projectionMatrix;\n\t\t\tlet projArray = new Float32Array(16);\n\t\t\tprojArray.set(proj.elements);\n\n\t\t\tuniforms.uNear.value = camera.near;\n\t\t\tuniforms.uFar.value = camera.far;\n\t\t\tuniforms.uEDLColor.value = this.rtEDL.texture;\n\t\t\tuniforms.uEDLDepth.value = this.rtEDL.depthTexture;\n\t\t\tuniforms.uProj.value = projArray;\n\n\t\t\tuniforms.edlStrength.value = viewer.edlStrength;\n\t\t\tuniforms.radius.value = viewer.edlRadius;\n\t\t\tuniforms.opacity.value = viewer.edlOpacity; // HACK\n\t\t\t\n\t\t\tUtils.screenPass.render(viewer.renderer, this.edlMaterial);\n\n\t\t\tif(this.screenshot){\n\t\t\t\tUtils.screenPass.render(viewer.renderer, this.edlMaterial, this.screenshot.target);\n\t\t\t}\n\n\t\t}\n\n\t\tviewer.dispatchEvent({type: \"render.pass.scene\", viewer: viewer});\n\n\t\tviewer.renderer.clearDepth();\n\n\t\tviewer.transformationTool.update();\n\n\t\tviewer.dispatchEvent({type: \"render.pass.perspective_overlay\",viewer: viewer});\n\n\t\tviewer.renderer.render(viewer.controls.sceneControls, camera);\n\t\tviewer.renderer.render(viewer.clippingTool.sceneVolume, camera);\n\t\tviewer.renderer.render(viewer.transformationTool.scene, camera);\n\t\t\n\t\tviewer.dispatchEvent({type: \"render.pass.end\",viewer: viewer});\n\n\t}\n}\n\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {NormalizationMaterial} from \"../materials/NormalizationMaterial.js\";\nimport {NormalizationEDLMaterial} from \"../materials/NormalizationEDLMaterial.js\";\nimport {PointCloudMaterial} from \"../materials/PointCloudMaterial.js\";\nimport {PointShape} from \"../defines.js\";\nimport {SphereVolume} from \"../utils/Volume.js\";\nimport {Utils} from \"../utils.js\";\n\n\nexport class HQSplatRenderer{\n\t\n\tconstructor(viewer){\n\t\tthis.viewer = viewer;\n\n\t\tthis.depthMaterials = new Map();\n\t\tthis.attributeMaterials = new Map();\n\t\tthis.normalizationMaterial = null;\n\n\t\tthis.rtDepth = null;\n\t\tthis.rtAttribute = null;\n\t\tthis.gl = viewer.renderer.getContext();\n\n\t\tthis.initialized = false;\n\t}\n\n\tinit(){\n\t\tif (this.initialized) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.normalizationMaterial = new NormalizationMaterial();\n\t\tthis.normalizationMaterial.depthTest = true;\n\t\tthis.normalizationMaterial.depthWrite = true;\n\t\tthis.normalizationMaterial.transparent = true;\n\n\t\tthis.normalizationEDLMaterial = new NormalizationEDLMaterial();\n\t\tthis.normalizationEDLMaterial.depthTest = true;\n\t\tthis.normalizationEDLMaterial.depthWrite = true;\n\t\tthis.normalizationEDLMaterial.transparent = true;\n\n\t\tthis.rtDepth = new THREE.WebGLRenderTarget(1024, 1024, {\n\t\t\tminFilter: THREE.NearestFilter,\n\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\tformat: THREE.RGBAFormat,\n\t\t\ttype: THREE.FloatType,\n\t\t\tdepthTexture: new THREE.DepthTexture(undefined, undefined, THREE.UnsignedIntType)\n\t\t});\n\n\t\tthis.rtAttribute = new THREE.WebGLRenderTarget(1024, 1024, {\n\t\t\tminFilter: THREE.NearestFilter,\n\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\tformat: THREE.RGBAFormat,\n\t\t\ttype: THREE.FloatType,\n\t\t\tdepthTexture: this.rtDepth.depthTexture,\n\t\t});\n\n\t\tthis.initialized = true;\n\t};\n\n\tresize(width, height){\n\t\tthis.rtDepth.setSize(width, height);\n\t\tthis.rtAttribute.setSize(width, height);\n\t}\n\n\tclearTargets(){\n\t\tconst viewer = this.viewer;\n\t\tconst {renderer} = viewer;\n\n\t\tconst oldTarget = renderer.getRenderTarget();\n\n\t\trenderer.setClearColor(0x000000, 0);\n\n\t\trenderer.setRenderTarget( this.rtDepth );\n\t\trenderer.clear( true, true, true );\n\n\t\trenderer.setRenderTarget( this.rtAttribute );\n\t\trenderer.clear( true, true, true );\n\n\t\trenderer.setRenderTarget(oldTarget);\n\t}\n\n\n\tclear(){\n\t\tthis.init();\n\n\t\tconst {renderer, background} = this.viewer;\n\n\t\tif(background === \"skybox\"){\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t} else if (background === 'gradient') {\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t} else if (background === 'black') {\n\t\t\trenderer.setClearColor(0x000000, 1);\n\t\t} else if (background === 'white') {\n\t\t\trenderer.setClearColor(0xFFFFFF, 1);\n\t\t} else {\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t}\n\n\t\trenderer.clear();\n\n\t\tthis.clearTargets();\n\t}\n\n\trender (params) {\n\t\tthis.init();\n\n\t\tconst viewer = this.viewer;\n\t\tconst camera = params.camera ? params.camera : viewer.scene.getActiveCamera();\n\t\tconst {width, height} = this.viewer.renderer.getSize(new THREE.Vector2());\n\n\t\tviewer.dispatchEvent({type: \"render.pass.begin\",viewer: viewer});\n\n\t\tthis.resize(width, height);\n\n\t\tconst visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible);\n\t\tconst originalMaterials = new Map();\n\n\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\toriginalMaterials.set(pointcloud, pointcloud.material);\n\n\t\t\tif(!this.attributeMaterials.has(pointcloud)){\n\t\t\t\tlet attributeMaterial = new PointCloudMaterial();\n\t\t\t\tthis.attributeMaterials.set(pointcloud, attributeMaterial);\n\t\t\t}\n\n\t\t\tif(!this.depthMaterials.has(pointcloud)){\n\t\t\t\tlet depthMaterial = new PointCloudMaterial();\n\n\t\t\t\tdepthMaterial.setDefine(\"depth_pass\", \"#define hq_depth_pass\");\n\t\t\t\tdepthMaterial.setDefine(\"use_edl\", \"#define use_edl\");\n\n\t\t\t\tthis.depthMaterials.set(pointcloud, depthMaterial);\n\t\t\t}\n\t\t}\n\n\t\t{ // DEPTH PASS\n\t\t\tfor (let pointcloud of visiblePointClouds) {\n\t\t\t\tlet octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new THREE.Vector3()).x;\n\n\t\t\t\tlet material = originalMaterials.get(pointcloud);\n\t\t\t\tlet depthMaterial = this.depthMaterials.get(pointcloud);\n\n\t\t\t\tdepthMaterial.size = material.size;\n\t\t\t\tdepthMaterial.minSize = material.minSize;\n\t\t\t\tdepthMaterial.maxSize = material.maxSize;\n\n\t\t\t\tdepthMaterial.pointSizeType = material.pointSizeType;\n\t\t\t\tdepthMaterial.visibleNodesTexture = material.visibleNodesTexture;\n\t\t\t\tdepthMaterial.weighted = false;\n\t\t\t\tdepthMaterial.screenWidth = width;\n\t\t\t\tdepthMaterial.shape = PointShape.CIRCLE;\n\t\t\t\tdepthMaterial.screenHeight = height;\n\t\t\t\tdepthMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture;\n\t\t\t\tdepthMaterial.uniforms.octreeSize.value = octreeSize;\n\t\t\t\tdepthMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray());\n\t\t\t\tdepthMaterial.classification = material.classification;\n\t\t\t\tdepthMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data;\n\t\t\t\tdepthMaterial.classificationTexture.needsUpdate = true;\n\n\t\t\t\tdepthMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value;\n\t\t\t\tdepthMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\t\tdepthMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\tdepthMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value;\n\n\t\t\t\tdepthMaterial.clipTask = material.clipTask;\n\t\t\t\tdepthMaterial.clipMethod = material.clipMethod;\n\t\t\t\tdepthMaterial.setClipBoxes(material.clipBoxes);\n\t\t\t\tdepthMaterial.setClipPolygons(material.clipPolygons);\n\n\t\t\t\tpointcloud.material = depthMaterial;\n\t\t\t}\n\t\t\t\n\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtDepth, {\n\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t});\n\t\t}\n\n\t\t{ // ATTRIBUTE PASS\n\t\t\tfor (let pointcloud of visiblePointClouds) {\n\t\t\t\tlet octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new THREE.Vector3()).x;\n\n\t\t\t\tlet material = originalMaterials.get(pointcloud);\n\t\t\t\tlet attributeMaterial = this.attributeMaterials.get(pointcloud);\n\n\t\t\t\tattributeMaterial.size = material.size;\n\t\t\t\tattributeMaterial.minSize = material.minSize;\n\t\t\t\tattributeMaterial.maxSize = material.maxSize;\n\n\t\t\t\tattributeMaterial.pointSizeType = material.pointSizeType;\n\t\t\t\tattributeMaterial.activeAttributeName = material.activeAttributeName;\n\t\t\t\tattributeMaterial.visibleNodesTexture = material.visibleNodesTexture;\n\t\t\t\tattributeMaterial.weighted = true;\n\t\t\t\tattributeMaterial.screenWidth = width;\n\t\t\t\tattributeMaterial.screenHeight = height;\n\t\t\t\tattributeMaterial.shape = PointShape.CIRCLE;\n\t\t\t\tattributeMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture;\n\t\t\t\tattributeMaterial.uniforms.octreeSize.value = octreeSize;\n\t\t\t\tattributeMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray());\n\t\t\t\tattributeMaterial.classification = material.classification;\n\t\t\t\tattributeMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data;\n\t\t\t\tattributeMaterial.classificationTexture.needsUpdate = true;\n\n\t\t\t\tattributeMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value;\n\t\t\t\tattributeMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\t\tattributeMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\tattributeMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value;\n\n\t\t\t\tattributeMaterial.elevationGradientRepeat = material.elevationGradientRepeat;\n\t\t\t\tattributeMaterial.elevationRange = material.elevationRange;\n\t\t\t\tattributeMaterial.gradient = material.gradient;\n\t\t\t\tattributeMaterial.matcap = material.matcap;\n\n\t\t\t\tattributeMaterial.intensityRange = material.intensityRange;\n\t\t\t\tattributeMaterial.intensityGamma = material.intensityGamma;\n\t\t\t\tattributeMaterial.intensityContrast = material.intensityContrast;\n\t\t\t\tattributeMaterial.intensityBrightness = material.intensityBrightness;\n\n\t\t\t\tattributeMaterial.rgbGamma = material.rgbGamma;\n\t\t\t\tattributeMaterial.rgbContrast = material.rgbContrast;\n\t\t\t\tattributeMaterial.rgbBrightness = material.rgbBrightness;\n\n\t\t\t\tattributeMaterial.weightRGB = material.weightRGB;\n\t\t\t\tattributeMaterial.weightIntensity = material.weightIntensity;\n\t\t\t\tattributeMaterial.weightElevation = material.weightElevation;\n\t\t\t\tattributeMaterial.weightRGB = material.weightRGB;\n\t\t\t\tattributeMaterial.weightClassification = material.weightClassification;\n\t\t\t\tattributeMaterial.weightReturnNumber = material.weightReturnNumber;\n\t\t\t\tattributeMaterial.weightSourceID = material.weightSourceID;\n\n\t\t\t\tattributeMaterial.color = material.color;\n\n\t\t\t\tattributeMaterial.clipTask = material.clipTask;\n\t\t\t\tattributeMaterial.clipMethod = material.clipMethod;\n\t\t\t\tattributeMaterial.setClipBoxes(material.clipBoxes);\n\t\t\t\tattributeMaterial.setClipPolygons(material.clipPolygons);\n\n\t\t\t\tpointcloud.material = attributeMaterial;\n\t\t\t}\n\t\t\t\n\t\t\tlet gl = this.gl;\n\n\t\t\tviewer.renderer.setRenderTarget(null);\n\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtAttribute, {\n\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t\t//material: this.attributeMaterial,\n\t\t\t\tblendFunc: [gl.SRC_ALPHA, gl.ONE],\n\t\t\t\t//depthTest: false,\n\t\t\t\tdepthWrite: false\n\t\t\t});\n\t\t}\n\n\t\tfor(let [pointcloud, material] of originalMaterials){\n\t\t\tpointcloud.material = material;\n\t\t}\n\n\t\tviewer.renderer.setRenderTarget(null);\n\t\tif(viewer.background === \"skybox\"){\n\t\t\tviewer.renderer.setClearColor(0x000000, 0);\n\t\t\tviewer.renderer.clear();\n\t\t\tviewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation);\n\t\t\tviewer.skybox.camera.fov = viewer.scene.cameraP.fov;\n\t\t\tviewer.skybox.camera.aspect = viewer.scene.cameraP.aspect;\n\t\t\t\n\t\t\tviewer.skybox.parent.rotation.x = 0;\n\t\t\tviewer.skybox.parent.updateMatrixWorld();\n\n\t\t\tviewer.skybox.camera.updateProjectionMatrix();\n\t\t\tviewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera);\n\t\t} else if (viewer.background === 'gradient') {\n\t\t\tviewer.renderer.setClearColor(0x000000, 0);\n\t\t\tviewer.renderer.clear();\n\t\t\tviewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG);\n\t\t} else if (viewer.background === 'black') {\n\t\t\tviewer.renderer.setClearColor(0x000000, 1);\n\t\t\tviewer.renderer.clear();\n\t\t} else if (viewer.background === 'white') {\n\t\t\tviewer.renderer.setClearColor(0xFFFFFF, 1);\n\t\t\tviewer.renderer.clear();\n\t\t} else {\n\t\t\tviewer.renderer.setClearColor(0x000000, 0);\n\t\t\tviewer.renderer.clear();\n\t\t}\n\n\t\t{ // NORMALIZATION PASS\n\t\t\tlet normalizationMaterial = this.useEDL ? this.normalizationEDLMaterial : this.normalizationMaterial;\n\n\t\t\tif(this.useEDL){\n\t\t\t\tnormalizationMaterial.uniforms.edlStrength.value = viewer.edlStrength;\n\t\t\t\tnormalizationMaterial.uniforms.radius.value = viewer.edlRadius;\n\t\t\t\tnormalizationMaterial.uniforms.screenWidth.value = width;\n\t\t\t\tnormalizationMaterial.uniforms.screenHeight.value = height;\n\t\t\t\tnormalizationMaterial.uniforms.uEDLMap.value = this.rtDepth.texture;\n\t\t\t}\n\n\t\t\tnormalizationMaterial.uniforms.uWeightMap.value = this.rtAttribute.texture;\n\t\t\tnormalizationMaterial.uniforms.uDepthMap.value = this.rtAttribute.depthTexture;\n\t\t\t\n\t\t\tUtils.screenPass.render(viewer.renderer, normalizationMaterial);\n\t\t}\n\n\t\tviewer.renderer.render(viewer.scene.scene, camera);\n\n\t\tviewer.dispatchEvent({type: \"render.pass.scene\", viewer: viewer});\n\n\t\tviewer.renderer.clearDepth();\n\n\t\tviewer.transformationTool.update();\n\n\t\tviewer.dispatchEvent({type: \"render.pass.perspective_overlay\",viewer: viewer});\n\n\t\tviewer.renderer.render(viewer.controls.sceneControls, camera);\n\t\tviewer.renderer.render(viewer.clippingTool.sceneVolume, camera);\n\t\tviewer.renderer.render(viewer.transformationTool.scene, camera);\n\n\t\tviewer.renderer.setViewport(width - viewer.navigationCube.width, \n\t\t\t\t\t\t\t\t\theight - viewer.navigationCube.width, \n\t\t\t\t\t\t\t\t\tviewer.navigationCube.width, viewer.navigationCube.width);\n\t\tviewer.renderer.render(viewer.navigationCube, viewer.navigationCube.camera);\t\t\n\t\tviewer.renderer.setViewport(0, 0, width, height);\n\t\t\n\t\tviewer.dispatchEvent({type: \"render.pass.end\",viewer: viewer});\n\n\t}\n\n}\n\n","import * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class View{\n\tconstructor () {\n\t\tthis.position = new THREE.Vector3(0, 0, 0);\n\n\t\tthis.yaw = Math.PI / 4;\n\t\tthis._pitch = -Math.PI / 4;\n\t\tthis.radius = 1;\n\n\t\tthis.maxPitch = Math.PI / 2;\n\t\tthis.minPitch = -Math.PI / 2;\n\t}\n\n\tclone () {\n\t\tlet c = new View();\n\t\tc.yaw = this.yaw;\n\t\tc._pitch = this.pitch;\n\t\tc.radius = this.radius;\n\t\tc.maxPitch = this.maxPitch;\n\t\tc.minPitch = this.minPitch;\n\n\t\treturn c;\n\t}\n\n\tget pitch () {\n\t\treturn this._pitch;\n\t}\n\n\tset pitch (angle) {\n\t\tthis._pitch = Math.max(Math.min(angle, this.maxPitch), this.minPitch);\n\t}\n\n\tget direction () {\n\t\tlet dir = new THREE.Vector3(0, 1, 0);\n\n\t\tdir.applyAxisAngle(new THREE.Vector3(1, 0, 0), this.pitch);\n\t\tdir.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw);\n\n\t\treturn dir;\n\t}\n\n\tset direction (dir) {\n\n\t\t//if(dir.x === dir.y){\n\t\tif(dir.x === 0 && dir.y === 0){\n\t\t\tthis.pitch = Math.PI / 2 * Math.sign(dir.z);\n\t\t}else{\n\t\t\tlet yaw = Math.atan2(dir.y, dir.x) - Math.PI / 2;\n\t\t\tlet pitch = Math.atan2(dir.z, Math.sqrt(dir.x * dir.x + dir.y * dir.y));\n\n\t\t\tthis.yaw = yaw;\n\t\t\tthis.pitch = pitch;\n\t\t}\n\t\t\n\t}\n\n\tlookAt(t){\n\t\tlet V;\n\t\tif(arguments.length === 1){\n\t\t\tV = new THREE.Vector3().subVectors(t, this.position);\n\t\t}else if(arguments.length === 3){\n\t\t\tV = new THREE.Vector3().subVectors(new THREE.Vector3(...arguments), this.position);\n\t\t}\n\n\t\tlet radius = V.length();\n\t\tlet dir = V.normalize();\n\n\t\tthis.radius = radius;\n\t\tthis.direction = dir;\n\t}\n\n\tgetPivot () {\n\t\treturn new THREE.Vector3().addVectors(this.position, this.direction.multiplyScalar(this.radius));\n\t}\n\n\tgetSide () {\n\t\tlet side = new THREE.Vector3(1, 0, 0);\n\t\tside.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw);\n\n\t\treturn side;\n\t}\n\n\tpan (x, y) {\n\t\tlet dir = new THREE.Vector3(0, 1, 0);\n\t\tdir.applyAxisAngle(new THREE.Vector3(1, 0, 0), this.pitch);\n\t\tdir.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw);\n\n\t\t// let side = new THREE.Vector3(1, 0, 0);\n\t\t// side.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw);\n\n\t\tlet side = this.getSide();\n\n\t\tlet up = side.clone().cross(dir);\n\n\t\tlet pan = side.multiplyScalar(x).add(up.multiplyScalar(y));\n\n\t\tthis.position = this.position.add(pan);\n\t\t// this.target = this.target.add(pan);\n\t}\n\n\ttranslate (x, y, z) {\n\t\tlet dir = new THREE.Vector3(0, 1, 0);\n\t\tdir.applyAxisAngle(new THREE.Vector3(1, 0, 0), this.pitch);\n\t\tdir.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw);\n\n\t\tlet side = new THREE.Vector3(1, 0, 0);\n\t\tside.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw);\n\n\t\tlet up = side.clone().cross(dir);\n\n\t\tlet t = side.multiplyScalar(x)\n\t\t\t.add(dir.multiplyScalar(y))\n\t\t\t.add(up.multiplyScalar(z));\n\n\t\tthis.position = this.position.add(t);\n\t}\n\n\ttranslateWorld (x, y, z) {\n\t\tthis.position.x += x;\n\t\tthis.position.y += y;\n\t\tthis.position.z += z;\n\t}\n\n\tsetView(position, target, duration = 0, callback = null){\n\n\t\tlet endPosition = null;\n\t\tif(position instanceof Array){\n\t\t\tendPosition = new THREE.Vector3(...position);\n\t\t}else if(position.x != null){\n\t\t\tendPosition = position.clone();\n\t\t}\n\n\t\tlet endTarget = null;\n\t\tif(target instanceof Array){\n\t\t\tendTarget = new THREE.Vector3(...target);\n\t\t}else if(target.x != null){\n\t\t\tendTarget = target.clone();\n\t\t}\n\t\t\n\t\tconst startPosition = this.position.clone();\n\t\tconst startTarget = this.getPivot();\n\n\t\t//const endPosition = position.clone();\n\t\t//const endTarget = target.clone();\n\n\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\tif(duration === 0){\n\t\t\tthis.position.copy(endPosition);\n\t\t\tthis.lookAt(endTarget);\n\t\t}else{\n\t\t\tlet value = {x: 0};\n\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, duration);\n\t\t\ttween.easing(easing);\n\t\t\t//this.tweens.push(tween);\n\n\t\t\ttween.onUpdate(() => {\n\t\t\t\tlet t = value.x;\n\n\t\t\t\t//console.log(t);\n\n\t\t\t\tconst pos = new THREE.Vector3(\n\t\t\t\t\t(1 - t) * startPosition.x + t * endPosition.x,\n\t\t\t\t\t(1 - t) * startPosition.y + t * endPosition.y,\n\t\t\t\t\t(1 - t) * startPosition.z + t * endPosition.z,\n\t\t\t\t);\n\n\t\t\t\tconst target = new THREE.Vector3(\n\t\t\t\t\t(1 - t) * startTarget.x + t * endTarget.x,\n\t\t\t\t\t(1 - t) * startTarget.y + t * endTarget.y,\n\t\t\t\t\t(1 - t) * startTarget.z + t * endTarget.z,\n\t\t\t\t);\n\n\t\t\t\tthis.position.copy(pos);\n\t\t\t\tthis.lookAt(target);\n\n\t\t\t});\n\n\t\t\ttween.start();\n\n\t\t\ttween.onComplete(() => {\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\n\t}\n\n};\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Annotation} from \"../Annotation.js\";\nimport {CameraMode} from \"../defines.js\";\nimport {View} from \"./View.js\";\nimport {Utils} from \"../utils.js\";\nimport {EventDispatcher} from \"../EventDispatcher.js\";\n\n\nexport class Scene extends EventDispatcher{\n\n\tconstructor(){\n\t\tsuper();\n\n\t\tthis.annotations = new Annotation();\n\t\t\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.sceneBG = new THREE.Scene();\n\t\tthis.scenePointCloud = new THREE.Scene();\n\n\t\tthis.cameraP = new THREE.PerspectiveCamera(this.fov, 1, 0.1, 1000*1000);\n\t\tthis.cameraO = new THREE.OrthographicCamera(-1, 1, 1, -1, 0.1, 1000*1000);\n\t\tthis.cameraVR = new THREE.PerspectiveCamera();\n\t\tthis.cameraBG = new THREE.Camera();\n\t\tthis.cameraScreenSpace = new THREE.OrthographicCamera(-1, 1, 1, -1, 0.1, 10);\n\t\tthis.cameraMode = CameraMode.PERSPECTIVE;\n\t\tthis.overrideCamera = null;\n\t\tthis.pointclouds = [];\n\n\t\tthis.measurements = [];\n\t\tthis.profiles = [];\n\t\tthis.volumes = [];\n\t\tthis.polygonClipVolumes = [];\n\t\tthis.cameraAnimations = [];\n\t\tthis.orientedImages = [];\n\t\tthis.images360 = [];\n\t\tthis.geopackages = [];\n\t\t\n\t\tthis.fpControls = null;\n\t\tthis.orbitControls = null;\n\t\tthis.earthControls = null;\n\t\tthis.geoControls = null;\n\t\tthis.deviceControls = null;\n\t\tthis.inputHandler = null;\n\n\t\tthis.view = new View();\n\n\t\tthis.directionalLight = null;\n\n\t\tthis.initialize();\n\t}\n\n\testimateHeightAt (position) {\n\t\tlet height = null;\n\t\tlet fromSpacing = Infinity;\n\n\t\tfor (let pointcloud of this.pointclouds) {\n\t\t\tif (pointcloud.root.geometryNode === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet pHeight = null;\n\t\t\tlet pFromSpacing = Infinity;\n\n\t\t\tlet lpos = position.clone().sub(pointcloud.position);\n\t\t\tlpos.z = 0;\n\t\t\tlet ray = new THREE.Ray(lpos, new THREE.Vector3(0, 0, 1));\n\n\t\t\tlet stack = [pointcloud.root];\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tlet node = stack.pop();\n\t\t\t\tlet box = node.getBoundingBox();\n\n\t\t\t\tlet inside = ray.intersectBox(box);\n\n\t\t\t\tif (!inside) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet h = node.geometryNode.mean.z +\n\t\t\t\t\tpointcloud.position.z +\n\t\t\t\t\tnode.geometryNode.boundingBox.min.z;\n\n\t\t\t\tif (node.geometryNode.spacing <= pFromSpacing) {\n\t\t\t\t\tpHeight = h;\n\t\t\t\t\tpFromSpacing = node.geometryNode.spacing;\n\t\t\t\t}\n\n\t\t\t\tfor (let index of Object.keys(node.children)) {\n\t\t\t\t\tlet child = node.children[index];\n\t\t\t\t\tif (child.geometryNode) {\n\t\t\t\t\t\tstack.push(node.children[index]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (height === null || pFromSpacing < fromSpacing) {\n\t\t\t\theight = pHeight;\n\t\t\t\tfromSpacing = pFromSpacing;\n\t\t\t}\n\t\t}\n\n\t\treturn height;\n\t}\n\t\n\tgetBoundingBox(pointclouds = this.pointclouds){\n\t\tlet box = new THREE.Box3();\n\n\t\tthis.scenePointCloud.updateMatrixWorld(true);\n\t\tthis.referenceFrame.updateMatrixWorld(true);\n\n\t\tfor (let pointcloud of pointclouds) {\n\t\t\tpointcloud.updateMatrixWorld(true);\n\n\t\t\tlet pointcloudBox = pointcloud.pcoGeometry.tightBoundingBox ? pointcloud.pcoGeometry.tightBoundingBox : pointcloud.boundingBox;\n\t\t\tlet boxWorld = Utils.computeTransformedBoundingBox(pointcloudBox, pointcloud.matrixWorld);\n\t\t\tbox.union(boxWorld);\n\t\t}\n\n\t\treturn box;\n\t}\n\n\taddPointCloud (pointcloud) {\n\t\tthis.pointclouds.push(pointcloud);\n\t\tthis.scenePointCloud.add(pointcloud);\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'pointcloud_added',\n\t\t\tpointcloud: pointcloud\n\t\t});\n\t}\n\n\taddVolume (volume) {\n\t\tthis.volumes.push(volume);\n\t\tthis.dispatchEvent({\n\t\t\t'type': 'volume_added',\n\t\t\t'scene': this,\n\t\t\t'volume': volume\n\t\t});\n\t}\n\n\taddOrientedImages(images){\n\t\tthis.orientedImages.push(images);\n\t\tthis.scene.add(images.node);\n\n\t\tthis.dispatchEvent({\n\t\t\t'type': 'oriented_images_added',\n\t\t\t'scene': this,\n\t\t\t'images': images\n\t\t});\n\t};\n\n\tremoveOrientedImages(images){\n\t\tlet index = this.orientedImages.indexOf(images);\n\t\tif (index > -1) {\n\t\t\tthis.orientedImages.splice(index, 1);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'oriented_images_removed',\n\t\t\t\t'scene': this,\n\t\t\t\t'images': images\n\t\t\t});\n\t\t}\n\t};\n\n\tadd360Images(images){\n\t\tthis.images360.push(images);\n\t\tthis.scene.add(images.node);\n\n\t\tthis.dispatchEvent({\n\t\t\t'type': '360_images_added',\n\t\t\t'scene': this,\n\t\t\t'images': images\n\t\t});\n\t}\n\n\tremove360Images(images){\n\t\tlet index = this.images360.indexOf(images);\n\t\tif (index > -1) {\n\t\t\tthis.images360.splice(index, 1);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': '360_images_removed',\n\t\t\t\t'scene': this,\n\t\t\t\t'images': images\n\t\t\t});\n\t\t}\n\t}\n\n\taddGeopackage(geopackage){\n\t\tthis.geopackages.push(geopackage);\n\t\tthis.scene.add(geopackage.node);\n\n\t\tthis.dispatchEvent({\n\t\t\t'type': 'geopackage_added',\n\t\t\t'scene': this,\n\t\t\t'geopackage': geopackage\n\t\t});\n\t};\n\n\tremoveGeopackage(geopackage){\n\t\tlet index = this.geopackages.indexOf(geopackage);\n\t\tif (index > -1) {\n\t\t\tthis.geopackages.splice(index, 1);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'geopackage_removed',\n\t\t\t\t'scene': this,\n\t\t\t\t'geopackage': geopackage\n\t\t\t});\n\t\t}\n\t};\n\n\tremoveVolume (volume) {\n\t\tlet index = this.volumes.indexOf(volume);\n\t\tif (index > -1) {\n\t\t\tthis.volumes.splice(index, 1);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'volume_removed',\n\t\t\t\t'scene': this,\n\t\t\t\t'volume': volume\n\t\t\t});\n\t\t}\n\t};\n\n\taddCameraAnimation(animation) {\n\t\tthis.cameraAnimations.push(animation);\n\t\tthis.dispatchEvent({\n\t\t\t'type': 'camera_animation_added',\n\t\t\t'scene': this,\n\t\t\t'animation': animation\n\t\t});\n\t};\n\n\tremoveCameraAnimation(animation){\n\t\tlet index = this.cameraAnimations.indexOf(volume);\n\t\tif (index > -1) {\n\t\t\tthis.cameraAnimations.splice(index, 1);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'camera_animation_removed',\n\t\t\t\t'scene': this,\n\t\t\t\t'animation': animation\n\t\t\t});\n\t\t}\n\t};\n\n\taddPolygonClipVolume(volume){\n\t\tthis.polygonClipVolumes.push(volume);\n\t\tthis.dispatchEvent({\n\t\t\t\"type\": \"polygon_clip_volume_added\",\n\t\t\t\"scene\": this,\n\t\t\t\"volume\": volume\n\t\t});\n\t};\n\t\n\tremovePolygonClipVolume(volume){\n\t\tlet index = this.polygonClipVolumes.indexOf(volume);\n\t\tif (index > -1) {\n\t\t\tthis.polygonClipVolumes.splice(index, 1);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t\"type\": \"polygon_clip_volume_removed\",\n\t\t\t\t\"scene\": this,\n\t\t\t\t\"volume\": volume\n\t\t\t});\n\t\t}\n\t};\n\t\n\taddMeasurement(measurement){\n\t\tmeasurement.lengthUnit = this.lengthUnit;\n\t\tmeasurement.lengthUnitDisplay = this.lengthUnitDisplay;\n\t\tthis.measurements.push(measurement);\n\t\tthis.dispatchEvent({\n\t\t\t'type': 'measurement_added',\n\t\t\t'scene': this,\n\t\t\t'measurement': measurement\n\t\t});\n\t};\n\n\tremoveMeasurement (measurement) {\n\t\tlet index = this.measurements.indexOf(measurement);\n\t\tif (index > -1) {\n\t\t\tthis.measurements.splice(index, 1);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'measurement_removed',\n\t\t\t\t'scene': this,\n\t\t\t\t'measurement': measurement\n\t\t\t});\n\t\t}\n\t}\n\n\taddProfile (profile) {\n\t\tthis.profiles.push(profile);\n\t\tthis.dispatchEvent({\n\t\t\t'type': 'profile_added',\n\t\t\t'scene': this,\n\t\t\t'profile': profile\n\t\t});\n\t}\n\n\tremoveProfile (profile) {\n\t\tlet index = this.profiles.indexOf(profile);\n\t\tif (index > -1) {\n\t\t\tthis.profiles.splice(index, 1);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'profile_removed',\n\t\t\t\t'scene': this,\n\t\t\t\t'profile': profile\n\t\t\t});\n\t\t}\n\t}\n\n\tremoveAllMeasurements () {\n\t\twhile (this.measurements.length > 0) {\n\t\t\tthis.removeMeasurement(this.measurements[0]);\n\t\t}\n\n\t\twhile (this.profiles.length > 0) {\n\t\t\tthis.removeProfile(this.profiles[0]);\n\t\t}\n\n\t\twhile (this.volumes.length > 0) {\n\t\t\tthis.removeVolume(this.volumes[0]);\n\t\t}\n\t}\n\n\tremoveAllClipVolumes(){\n\t\tlet clipVolumes = this.volumes.filter(volume => volume.clip === true);\n\t\tfor(let clipVolume of clipVolumes){\n\t\t\tthis.removeVolume(clipVolume);\n\t\t}\n\n\t\twhile(this.polygonClipVolumes.length > 0){\n\t\t\tthis.removePolygonClipVolume(this.polygonClipVolumes[0]);\n\t\t}\n\t}\n\n\tgetActiveCamera() {\n\n\t\tif(this.overrideCamera){\n\t\t\treturn this.overrideCamera;\n\t\t}\n\n\t\tif(this.cameraMode === CameraMode.PERSPECTIVE){\n\t\t\treturn this.cameraP;\n\t\t}else if(this.cameraMode === CameraMode.ORTHOGRAPHIC){\n\t\t\treturn this.cameraO;\n\t\t}else if(this.cameraMode === CameraMode.VR){\n\t\t\treturn this.cameraVR;\n\t\t}\n\n\t\treturn null;\n\t}\n\t\n\tinitialize(){\n\t\t\n\t\tthis.referenceFrame = new THREE.Object3D();\n\t\tthis.referenceFrame.matrixAutoUpdate = false;\n\t\tthis.scenePointCloud.add(this.referenceFrame);\n\n\t\tthis.cameraP.up.set(0, 0, 1);\n\t\tthis.cameraP.position.set(1000, 1000, 1000);\n\t\tthis.cameraO.up.set(0, 0, 1);\n\t\tthis.cameraO.position.set(1000, 1000, 1000);\n\t\t//this.camera.rotation.y = -Math.PI / 4;\n\t\t//this.camera.rotation.x = -Math.PI / 6;\n\t\tthis.cameraScreenSpace.lookAt(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, -1), new THREE.Vector3(0, 1, 0));\n\t\t\n\t\tthis.directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );\n\t\tthis.directionalLight.position.set( 10, 10, 10 );\n\t\tthis.directionalLight.lookAt( new THREE.Vector3(0, 0, 0));\n\t\tthis.scenePointCloud.add( this.directionalLight );\n\t\t\n\t\tlet light = new THREE.AmbientLight( 0x555555 ); // soft white light\n\t\tthis.scenePointCloud.add( light );\n\n\t\t{ // background\n\t\t\tlet texture = Utils.createBackgroundTexture(512, 512);\n\n\t\t\ttexture.minFilter = texture.magFilter = THREE.NearestFilter;\n\t\t\ttexture.minFilter = texture.magFilter = THREE.LinearFilter;\n\t\t\tlet bg = new THREE.Mesh(\n\t\t\t\tnew THREE.PlaneBufferGeometry(2, 2, 1),\n\t\t\t\tnew THREE.MeshBasicMaterial({\n\t\t\t\t\tmap: texture\n\t\t\t\t})\n\t\t\t);\n\t\t\tbg.material.depthTest = false;\n\t\t\tbg.material.depthWrite = false;\n\t\t\tthis.sceneBG.add(bg);\n\t\t}\n\n\t\t// { // lights\n\t\t// \t{\n\t\t// \t\tlet light = new THREE.DirectionalLight(0xffffff);\n\t\t// \t\tlight.position.set(10, 10, 1);\n\t\t// \t\tlight.target.position.set(0, 0, 0);\n\t\t// \t\tthis.scene.add(light);\n\t\t// \t}\n\n\t\t// \t{\n\t\t// \t\tlet light = new THREE.DirectionalLight(0xffffff);\n\t\t// \t\tlight.position.set(-10, 10, 1);\n\t\t// \t\tlight.target.position.set(0, 0, 0);\n\t\t// \t\tthis.scene.add(light);\n\t\t// \t}\n\n\t\t// \t{\n\t\t// \t\tlet light = new THREE.DirectionalLight(0xffffff);\n\t\t// \t\tlight.position.set(0, -10, 20);\n\t\t// \t\tlight.target.position.set(0, 0, 0);\n\t\t// \t\tthis.scene.add(light);\n\t\t// \t}\n\t\t// }\n\t}\n\t\n\taddAnnotation(position, args = {}){\t\t\n\t\tif(position instanceof Array){\n\t\t\targs.position = new THREE.Vector3().fromArray(position);\n\t\t} else if (position.x != null) {\n\t\t\targs.position = position;\n\t\t}\n\t\tlet annotation = new Annotation(args);\n\t\tthis.annotations.add(annotation);\n\n\t\treturn annotation;\n\t}\n\n\tgetAnnotations () {\n\t\treturn this.annotations;\n\t};\n\n\tremoveAnnotation(annotationToRemove) {\n\t\tthis.annotations.remove(annotationToRemove);\n\t}\n};\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\n// http://epsg.io/\nproj4.defs([\n\t['UTM10N', '+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs'],\n\t['EPSG:6339', '+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6340', '+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6341', '+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6342', '+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6343', '+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6344', '+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6345', '+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6346', '+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6347', '+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:6348', '+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs'],\n\t['EPSG:26910', '+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26911', '+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26912', '+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26913', '+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26914', '+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26915', '+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26916', '+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26917', '+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26918', '+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t['EPSG:26919', '+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n]);\n\nexport class MapView{\n\n\tconstructor (viewer) {\n\t\tthis.viewer = viewer;\n\n\t\tthis.webMapService = 'WMTS';\n\t\tthis.mapProjectionName = 'EPSG:3857';\n\t\tthis.mapProjection = proj4.defs(this.mapProjectionName);\n\t\tthis.sceneProjection = null;\n\n\t\tthis.extentsLayer = null;\n\t\tthis.cameraLayer = null;\n\t\tthis.toolLayer = null;\n\t\tthis.sourcesLayer = null;\n\t\tthis.sourcesLabelLayer = null;\n\t\tthis.images360Layer = null;\n\t\tthis.enabled = false;\n\n\t\tthis.createAnnotationStyle = (text) => {\n\t\t\treturn [\n\t\t\t\tnew ol.style.Style({\n\t\t\t\t\timage: new ol.style.Circle({\n\t\t\t\t\t\tradius: 10,\n\t\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\t\tcolor: [255, 255, 255, 0.5],\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: [0, 0, 0, 0.5]\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\tthis.createLabelStyle = (text) => {\n\t\t\tlet style = new ol.style.Style({\n\t\t\t\timage: new ol.style.Circle({\n\t\t\t\t\tradius: 6,\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: 'white',\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: 'green'\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t\ttext: new ol.style.Text({\n\t\t\t\t\tfont: '12px helvetica,sans-serif',\n\t\t\t\t\ttext: text,\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: '#000'\n\t\t\t\t\t}),\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: '#fff',\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 style;\n\t\t};\n\t}\n\n\tshowSources (show) {\n\t\tthis.sourcesLayer.setVisible(show);\n\t\tthis.sourcesLabelLayer.setVisible(show);\n\t}\n\n\tinit () {\n\n\t\tif(typeof ol === \"undefined\"){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.elMap = $('#potree_map');\n\t\tthis.elMap.draggable({ handle: $('#potree_map_header') });\n\t\tthis.elMap.resizable();\n\n\t\tthis.elTooltip = $(`
        `);\n\t\tthis.elMap.append(this.elTooltip);\n\n\t\tlet extentsLayer = this.getExtentsLayer();\n\t\tlet cameraLayer = this.getCameraLayer();\n\t\tthis.getToolLayer();\n\t\tlet sourcesLayer = this.getSourcesLayer();\n\t\tthis.images360Layer = this.getImages360Layer();\n\t\tthis.getSourcesLabelLayer();\n\t\tthis.getAnnotationsLayer();\n\n\t\tlet mousePositionControl = new ol.control.MousePosition({\n\t\t\tcoordinateFormat: ol.coordinate.createStringXY(5),\n\t\t\tprojection: 'EPSG:4326',\n\t\t\tundefinedHTML: ' '\n\t\t});\n\n\t\tlet _this = this;\n\t\tlet DownloadSelectionControl = function (optOptions) {\n\t\t\tlet options = optOptions || {};\n\n\t\t\t// TOGGLE TILES\n\t\t\tlet btToggleTiles = document.createElement('button');\n\t\t\tbtToggleTiles.innerHTML = 'T';\n\t\t\tbtToggleTiles.addEventListener('click', () => {\n\t\t\t\tlet visible = sourcesLayer.getVisible();\n\t\t\t\t_this.showSources(!visible);\n\t\t\t}, false);\n\t\t\tbtToggleTiles.style.float = 'left';\n\t\t\tbtToggleTiles.title = 'show / hide tiles';\n\n\t\t\t// DOWNLOAD SELECTED TILES\n\t\t\tlet link = document.createElement('a');\n\t\t\tlink.href = '#';\n\t\t\tlink.download = 'list.txt';\n\t\t\tlink.style.float = 'left';\n\n\t\t\tlet button = document.createElement('button');\n\t\t\tbutton.innerHTML = 'D';\n\t\t\tlink.appendChild(button);\n\n\t\t\tlet handleDownload = (e) => {\n\t\t\t\tlet features = selectedFeatures.getArray();\n\n\t\t\t\tlet url = [document.location.protocol, '//', document.location.host, document.location.pathname].join('');\n\n\t\t\t\tif (features.length === 0) {\n\t\t\t\t\talert('No tiles were selected. Select area with ctrl + left mouse button!');\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (features.length === 1) {\n\t\t\t\t\tlet feature = features[0];\n\n\t\t\t\t\tif (feature.source) {\n\t\t\t\t\t\tlet cloudjsurl = feature.pointcloud.pcoGeometry.url;\n\t\t\t\t\t\tlet sourceurl = new URL(url + '/../' + cloudjsurl + '/../source/' + feature.source.name);\n\t\t\t\t\t\tlink.href = sourceurl.href;\n\t\t\t\t\t\tlink.download = feature.source.name;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet content = '';\n\t\t\t\t\tfor (let i = 0; i < features.length; i++) {\n\t\t\t\t\t\tlet feature = features[i];\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\tcontent += sourceurl.href + '\\n';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet uri = 'data:application/octet-stream;base64,' + btoa(content);\n\t\t\t\t\tlink.href = uri;\n\t\t\t\t\tlink.download = 'list_of_files.txt';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tbutton.addEventListener('click', handleDownload, false);\n\n\t\t\t// assemble container\n\t\t\tlet element = document.createElement('div');\n\t\t\telement.className = 'ol-unselectable ol-control';\n\t\t\telement.appendChild(link);\n\t\t\telement.appendChild(btToggleTiles);\n\t\t\telement.style.bottom = '0.5em';\n\t\t\telement.style.left = '0.5em';\n\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\tol.control.Control.call(this, {\n\t\t\t\telement: element,\n\t\t\t\ttarget: options.target\n\t\t\t});\n\t\t};\n\t\tol.inherits(DownloadSelectionControl, ol.control.Control);\n\n\t\tthis.map = new ol.Map({\n\t\t\tcontrols: ol.control.defaults({\n\t\t\t\tattributionOptions: ({\n\t\t\t\t\tcollapsible: false\n\t\t\t\t})\n\t\t\t}).extend([\n\t\t\t\t// this.controls.zoomToExtent,\n\t\t\t\tnew DownloadSelectionControl(),\n\t\t\t\tmousePositionControl\n\t\t\t]),\n\t\t\tlayers: [\n\t\t\t\tnew ol.layer.Tile({source: new ol.source.OSM()}),\n\t\t\t\tthis.toolLayer,\n\t\t\t\tthis.annotationsLayer,\n\t\t\t\tthis.sourcesLayer,\n\t\t\t\tthis.sourcesLabelLayer,\n\t\t\t\tthis.images360Layer,\n\t\t\t\textentsLayer,\n\t\t\t\tcameraLayer\n\t\t\t],\n\t\t\ttarget: 'potree_map_content',\n\t\t\tview: new ol.View({\n\t\t\t\tcenter: this.olCenter,\n\t\t\t\tzoom: 9\n\t\t\t})\n\t\t});\n\n\t\t// DRAGBOX / SELECTION\n\t\tthis.dragBoxLayer = new ol.layer.Vector({\n\t\t\tsource: new ol.source.Vector({}),\n\t\t\tstyle: new ol.style.Style({\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: 'rgba(0, 0, 255, 1)',\n\t\t\t\t\twidth: 2\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\t\tthis.map.addLayer(this.dragBoxLayer);\n\n\t\tlet select = new ol.interaction.Select();\n\t\tthis.map.addInteraction(select);\n\n\t\tlet selectedFeatures = select.getFeatures();\n\n\t\tlet dragBox = new ol.interaction.DragBox({\n\t\t\tcondition: ol.events.condition.platformModifierKeyOnly\n\t\t});\n\n\t\tthis.map.addInteraction(dragBox);\n\n\t\t// this.map.on('pointermove', evt => {\n\t\t// \tlet pixel = evt.pixel;\n\t\t// \tlet feature = this.map.forEachFeatureAtPixel(pixel, function (feature) {\n\t\t// \t\treturn feature;\n\t\t// \t});\n\n\t\t// \t// console.log(feature);\n\t\t// \t// this.elTooltip.css(\"display\", feature ? '' : 'none');\n\t\t// \tthis.elTooltip.css('display', 'none');\n\t\t// \tif (feature && feature.onHover) {\n\t\t// \t\tfeature.onHover(evt);\n\t\t// \t\t// overlay.setPosition(evt.coordinate);\n\t\t// \t\t// tooltip.innerHTML = feature.get('name');\n\t\t// \t}\n\t\t// });\n\n\t\tthis.map.on('click', evt => {\n\t\t\tlet pixel = evt.pixel;\n\t\t\tlet feature = this.map.forEachFeatureAtPixel(pixel, function (feature) {\n\t\t\t\treturn feature;\n\t\t\t});\n\n\t\t\tif (feature && feature.onClick) {\n\t\t\t\tfeature.onClick(evt);\n\t\t\t}\n\t\t});\n\n\t\tdragBox.on('boxend', (e) => {\n\t\t\t// features that intersect the box are added to the collection of\n\t\t\t// selected features, and their names are displayed in the \"info\"\n\t\t\t// div\n\t\t\tlet extent = dragBox.getGeometry().getExtent();\n\t\t\tthis.getSourcesLayer().getSource().forEachFeatureIntersectingExtent(extent, (feature) => {\n\t\t\t\tselectedFeatures.push(feature);\n\t\t\t});\n\t\t});\n\n\t\t// clear selection when drawing a new box and when clicking on the map\n\t\tdragBox.on('boxstart', (e) => {\n\t\t\tselectedFeatures.clear();\n\t\t});\n\t\tthis.map.on('click', () => {\n\t\t\tselectedFeatures.clear();\n\t\t});\n\n\t\tthis.viewer.addEventListener('scene_changed', e => {\n\t\t\tthis.setScene(e.scene);\n\t\t});\n\n\t\tthis.onPointcloudAdded = e => {\n\t\t\tthis.load(e.pointcloud);\n\t\t};\n\n\t\tthis.on360ImagesAdded = e => {\n\t\t\tthis.addImages360(e.images);\n\t\t};\n\n\t\tthis.onAnnotationAdded = e => {\n\t\t\tif (!this.sceneProjection) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet annotation = e.annotation;\n\t\t\tlet position = annotation.position;\n\t\t\tlet mapPos = this.toMap.forward([position.x, position.y]);\n\t\t\tlet feature = new ol.Feature({\n\t\t\t\tgeometry: new ol.geom.Point(mapPos),\n\t\t\t\tname: annotation.title\n\t\t\t});\n\t\t\tfeature.setStyle(this.createAnnotationStyle(annotation.title));\n\n\t\t\tfeature.onHover = evt => {\n\t\t\t\tlet coordinates = feature.getGeometry().getCoordinates();\n\t\t\t\tlet p = this.map.getPixelFromCoordinate(coordinates);\n\n\t\t\t\tthis.elTooltip.html(annotation.title);\n\t\t\t\tthis.elTooltip.css('display', '');\n\t\t\t\tthis.elTooltip.css('left', `${p[0]}px`);\n\t\t\t\tthis.elTooltip.css('top', `${p[1]}px`);\n\t\t\t};\n\n\t\t\tfeature.onClick = evt => {\n\t\t\t\tannotation.clickTitle();\n\t\t\t};\n\n\t\t\tthis.getAnnotationsLayer().getSource().addFeature(feature);\n\t\t};\n\n\t\tthis.setScene(this.viewer.scene);\n\t}\n\n\tsetScene (scene) {\n\t\tif (this.scene === scene) {\n\t\t\treturn;\n\t\t};\n\n\t\tif (this.scene) {\n\t\t\tthis.scene.removeEventListener('pointcloud_added', this.onPointcloudAdded);\n\t\t\tthis.scene.removeEventListener('360_images_added', this.on360ImagesAdded);\n\t\t\tthis.scene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded);\n\t\t}\n\n\t\tthis.scene = scene;\n\n\t\tthis.scene.addEventListener('pointcloud_added', this.onPointcloudAdded);\n\t\tthis.scene.addEventListener('360_images_added', this.on360ImagesAdded);\n\t\tthis.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded);\n\n\t\tfor (let pointcloud of this.viewer.scene.pointclouds) {\n\t\t\tthis.load(pointcloud);\n\t\t}\n\n\t\tthis.viewer.scene.annotations.traverseDescendants(annotation => {\n\t\t\tthis.onAnnotationAdded({annotation: annotation});\n\t\t});\n\n\t\tfor(let images of this.viewer.scene.images360){\n\t\t\tthis.on360ImagesAdded({images: images});\n\t\t}\n\t}\n\n\tgetExtentsLayer () {\n\t\tif (this.extentsLayer) {\n\t\t\treturn this.extentsLayer;\n\t\t}\n\n\t\tthis.gExtent = new ol.geom.LineString([[0, 0], [0, 0]]);\n\n\t\tlet feature = new ol.Feature(this.gExtent);\n\t\tlet featureVector = new ol.source.Vector({\n\t\t\tfeatures: [feature]\n\t\t});\n\n\t\tthis.extentsLayer = new ol.layer.Vector({\n\t\t\tsource: featureVector,\n\t\t\tstyle: new ol.style.Style({\n\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\tcolor: 'rgba(255, 255, 255, 0.2)'\n\t\t\t\t}),\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: '#0000ff',\n\t\t\t\t\twidth: 2\n\t\t\t\t}),\n\t\t\t\timage: new ol.style.Circle({\n\t\t\t\t\tradius: 3,\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: '#0000ff'\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\n\t\treturn this.extentsLayer;\n\t}\n\n\tgetAnnotationsLayer () {\n\t\tif (this.annotationsLayer) {\n\t\t\treturn this.annotationsLayer;\n\t\t}\n\n\t\tthis.annotationsLayer = new ol.layer.Vector({\n\t\t\tsource: new ol.source.Vector({\n\t\t\t}),\n\t\t\tstyle: new ol.style.Style({\n\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)'\n\t\t\t\t}),\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)',\n\t\t\t\t\twidth: 2\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\n\t\treturn this.annotationsLayer;\n\t}\n\n\tgetCameraLayer () {\n\t\tif (this.cameraLayer) {\n\t\t\treturn this.cameraLayer;\n\t\t}\n\n\t\t// CAMERA LAYER\n\t\tthis.gCamera = new ol.geom.LineString([[0, 0], [0, 0], [0, 0], [0, 0]]);\n\t\tlet feature = new ol.Feature(this.gCamera);\n\t\tlet featureVector = new ol.source.Vector({\n\t\t\tfeatures: [feature]\n\t\t});\n\n\t\tthis.cameraLayer = new ol.layer.Vector({\n\t\t\tsource: featureVector,\n\t\t\tstyle: new ol.style.Style({\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: '#0000ff',\n\t\t\t\t\twidth: 2\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\n\t\treturn this.cameraLayer;\n\t}\n\n\tgetToolLayer () {\n\t\tif (this.toolLayer) {\n\t\t\treturn this.toolLayer;\n\t\t}\n\n\t\tthis.toolLayer = new ol.layer.Vector({\n\t\t\tsource: new ol.source.Vector({\n\t\t\t}),\n\t\t\tstyle: new ol.style.Style({\n\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)'\n\t\t\t\t}),\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)',\n\t\t\t\t\twidth: 2\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\n\t\treturn this.toolLayer;\n\t}\n\n\tgetImages360Layer(){\n\t\tif(this.images360Layer){\n\t\t\treturn this.images360Layer;\n\t\t}\n\n\t\tlet style = new ol.style.Style({\n\t\t\timage: new ol.style.Circle({\n\t\t\t\tradius: 4,\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: [255, 0, 0, 1],\n\t\t\t\t\twidth: 2\n\t\t\t\t}),\n\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\tcolor: [255, 100, 100, 1]\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\t\t\n\t\tlet layer = new ol.layer.Vector({\n\t\t\tsource: new ol.source.Vector({}),\n\t\t\tstyle: style,\n\t\t});\n\n\t\tthis.images360Layer = layer;\n\n\t\treturn this.images360Layer;\n\t}\n\n\tgetSourcesLayer () {\n\t\tif (this.sourcesLayer) {\n\t\t\treturn this.sourcesLayer;\n\t\t}\n\n\t\tthis.sourcesLayer = new ol.layer.Vector({\n\t\t\tsource: new ol.source.Vector({}),\n\t\t\tstyle: new ol.style.Style({\n\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\tcolor: 'rgba(0, 0, 150, 0.1)'\n\t\t\t\t}),\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: 'rgba(0, 0, 150, 1)',\n\t\t\t\t\twidth: 1\n\t\t\t\t})\n\t\t\t})\n\t\t});\n\n\t\treturn this.sourcesLayer;\n\t}\n\n\tgetSourcesLabelLayer () {\n\t\tif (this.sourcesLabelLayer) {\n\t\t\treturn this.sourcesLabelLayer;\n\t\t}\n\n\t\tthis.sourcesLabelLayer = new ol.layer.Vector({\n\t\t\tsource: new ol.source.Vector({\n\t\t\t}),\n\t\t\tstyle: new ol.style.Style({\n\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\tcolor: 'rgba(255, 0, 0, 0.1)'\n\t\t\t\t}),\n\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)',\n\t\t\t\t\twidth: 2\n\t\t\t\t})\n\t\t\t}),\n\t\t\tminResolution: 0.01,\n\t\t\tmaxResolution: 20\n\t\t});\n\n\t\treturn this.sourcesLabelLayer;\n\t}\n\n\tsetSceneProjection (sceneProjection) {\n\t\tthis.sceneProjection = sceneProjection;\n\t\tthis.toMap = proj4(this.sceneProjection, this.mapProjection);\n\t\tthis.toScene = proj4(this.mapProjection, this.sceneProjection);\n\t};\n\n\tgetMapExtent () {\n\t\tlet bb = this.viewer.getBoundingBox();\n\n\t\tlet bottomLeft = this.toMap.forward([bb.min.x, bb.min.y]);\n\t\tlet bottomRight = this.toMap.forward([bb.max.x, bb.min.y]);\n\t\tlet topRight = this.toMap.forward([bb.max.x, bb.max.y]);\n\t\tlet topLeft = this.toMap.forward([bb.min.x, bb.max.y]);\n\n\t\tlet extent = {\n\t\t\tbottomLeft: bottomLeft,\n\t\t\tbottomRight: bottomRight,\n\t\t\ttopRight: topRight,\n\t\t\ttopLeft: topLeft\n\t\t};\n\n\t\treturn extent;\n\t};\n\n\tgetMapCenter () {\n\t\tlet mapExtent = this.getMapExtent();\n\n\t\tlet mapCenter = [\n\t\t\t(mapExtent.bottomLeft[0] + mapExtent.topRight[0]) / 2,\n\t\t\t(mapExtent.bottomLeft[1] + mapExtent.topRight[1]) / 2\n\t\t];\n\n\t\treturn mapCenter;\n\t};\n\n\tupdateToolDrawings () {\n\t\tthis.toolLayer.getSource().clear();\n\n\t\tlet profiles = this.viewer.profileTool.profiles;\n\t\tfor (let i = 0; i < profiles.length; i++) {\n\t\t\tlet profile = profiles[i];\n\t\t\tlet coordinates = [];\n\n\t\t\tfor (let j = 0; j < profile.points.length; j++) {\n\t\t\t\tlet point = profile.points[j];\n\t\t\t\tlet pointMap = this.toMap.forward([point.x, point.y]);\n\t\t\t\tcoordinates.push(pointMap);\n\t\t\t}\n\n\t\t\tlet line = new ol.geom.LineString(coordinates);\n\t\t\tlet feature = new ol.Feature(line);\n\t\t\tthis.toolLayer.getSource().addFeature(feature);\n\t\t}\n\n\t\tlet measurements = this.viewer.measuringTool.measurements;\n\t\tfor (let i = 0; i < measurements.length; i++) {\n\t\t\tlet measurement = measurements[i];\n\t\t\tlet coordinates = [];\n\n\t\t\tfor (let j = 0; j < measurement.points.length; j++) {\n\t\t\t\tlet point = measurement.points[j].position;\n\t\t\t\tlet pointMap = this.toMap.forward([point.x, point.y]);\n\t\t\t\tcoordinates.push(pointMap);\n\t\t\t}\n\n\t\t\tif (measurement.closed && measurement.points.length > 0) {\n\t\t\t\tcoordinates.push(coordinates[0]);\n\t\t\t}\n\n\t\t\tlet line = new ol.geom.LineString(coordinates);\n\t\t\tlet feature = new ol.Feature(line);\n\t\t\tthis.toolLayer.getSource().addFeature(feature);\n\t\t}\n\t}\n\n\taddImages360(images){\n\t\tlet transform = this.toMap.forward;\n\t\tlet layer = this.getImages360Layer();\n\n\t\tfor(let image of images.images){\n\n\t\t\tlet p = transform([image.position[0], image.position[1]]);\n\n\t\t\tlet feature = new ol.Feature({\n\t\t\t\t'geometry': new ol.geom.Point(p),\n\t\t\t});\n\n\t\t\tfeature.onClick = () => {\n\t\t\t\timages.focus(image);\n\t\t\t};\n\n\t\t\tlayer.getSource().addFeature(feature);\n\t\t}\n\t}\n\n\tasync load (pointcloud) {\n\t\tif (!pointcloud) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pointcloud.projection) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.sceneProjection) {\n\t\t\ttry {\n\t\t\t\tthis.setSceneProjection(pointcloud.projection);\n\t\t\t}catch (e) {\n\t\t\t\tconsole.log('Failed projection:', e);\n\n\t\t\t\tif (pointcloud.fallbackProjection) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconsole.log('Trying fallback projection...');\n\t\t\t\t\t\tthis.setSceneProjection(pointcloud.fallbackProjection);\n\t\t\t\t\t\tconsole.log('Set projection from fallback');\n\t\t\t\t\t}catch (e) {\n\t\t\t\t\t\tconsole.log('Failed fallback projection:', e);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\treturn;\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tlet mapExtent = this.getMapExtent();\n\t\tlet mapCenter = this.getMapCenter();\n\n\t\tlet view = this.map.getView();\n\t\tview.setCenter(mapCenter);\n\n\t\tthis.gExtent.setCoordinates([\n\t\t\tmapExtent.bottomLeft,\n\t\t\tmapExtent.bottomRight,\n\t\t\tmapExtent.topRight,\n\t\t\tmapExtent.topLeft,\n\t\t\tmapExtent.bottomLeft\n\t\t]);\n\n\t\tview.fit(this.gExtent, [300, 300], {\n\t\t\tconstrainResolution: false\n\t\t});\n\n\t\tif (pointcloud.pcoGeometry.type == 'ept'){ \n\t\t\treturn;\n\t\t}\n\n\t\tlet url = `${pointcloud.pcoGeometry.url}/../sources.json`;\n\t\t//let response = await fetch(url);\n\n\t\tfetch(url).then(async (response) => {\n\t\t\tlet data = await response.json();\n\t\t\n\t\t\tlet sources = data.sources;\n\n\t\t\tfor (let i = 0; i < sources.length; i++) {\n\t\t\t\tlet source = sources[i];\n\t\t\t\tlet name = source.name;\n\t\t\t\tlet bounds = source.bounds;\n\n\t\t\t\tlet mapBounds = {\n\t\t\t\t\tmin: this.toMap.forward([bounds.min[0], bounds.min[1]]),\n\t\t\t\t\tmax: this.toMap.forward([bounds.max[0], bounds.max[1]])\n\t\t\t\t};\n\t\t\t\tlet mapCenter = [\n\t\t\t\t\t(mapBounds.min[0] + mapBounds.max[0]) / 2,\n\t\t\t\t\t(mapBounds.min[1] + mapBounds.max[1]) / 2\n\t\t\t\t];\n\n\t\t\t\tlet p1 = this.toMap.forward([bounds.min[0], bounds.min[1]]);\n\t\t\t\tlet p2 = this.toMap.forward([bounds.max[0], bounds.min[1]]);\n\t\t\t\tlet p3 = this.toMap.forward([bounds.max[0], bounds.max[1]]);\n\t\t\t\tlet p4 = this.toMap.forward([bounds.min[0], bounds.max[1]]);\n\n\t\t\t\t// let feature = new ol.Feature({\n\t\t\t\t//\t'geometry': new ol.geom.LineString([p1, p2, p3, p4, p1])\n\t\t\t\t// });\n\t\t\t\tlet feature = new ol.Feature({\n\t\t\t\t\t'geometry': new ol.geom.Polygon([[p1, p2, p3, p4, p1]])\n\t\t\t\t});\n\t\t\t\tfeature.source = source;\n\t\t\t\tfeature.pointcloud = pointcloud;\n\t\t\t\tthis.getSourcesLayer().getSource().addFeature(feature);\n\n\t\t\t\tfeature = new ol.Feature({\n\t\t\t\t\tgeometry: new ol.geom.Point(mapCenter),\n\t\t\t\t\tname: name\n\t\t\t\t});\n\t\t\t\tfeature.setStyle(this.createLabelStyle(name));\n\t\t\t\tthis.sourcesLabelLayer.getSource().addFeature(feature);\n\t\t\t}\n\t\t}).catch(() => {\n\t\t\t\n\t\t});\n\n\t}\n\n\ttoggle () {\n\t\tif (this.elMap.is(':visible')) {\n\t\t\tthis.elMap.css('display', 'none');\n\t\t\tthis.enabled = false;\n\t\t} else {\n\t\t\tthis.elMap.css('display', 'block');\n\t\t\tthis.enabled = true;\n\t\t}\n\t}\n\n\tupdate (delta) {\n\t\tif (!this.sceneProjection) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet pm = $('#potree_map');\n\n\t\tif (!this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// resize\n\t\tlet mapSize = this.map.getSize();\n\t\tlet resized = (pm.width() !== mapSize[0] || pm.height() !== mapSize[1]);\n\t\tif (resized) {\n\t\t\tthis.map.updateSize();\n\t\t}\n\n\t\t//\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\n\t\tlet scale = this.map.getView().getResolution();\n\t\tlet campos = camera.position;\n\t\tlet camdir = camera.getWorldDirection(new THREE.Vector3());\n\t\tlet sceneLookAt = camdir.clone().multiplyScalar(30 * scale).add(campos);\n\t\tlet geoPos = camera.position;\n\t\tlet geoLookAt = sceneLookAt;\n\t\tlet mapPos = new THREE.Vector2().fromArray(this.toMap.forward([geoPos.x, geoPos.y]));\n\t\tlet mapLookAt = new THREE.Vector2().fromArray(this.toMap.forward([geoLookAt.x, geoLookAt.y]));\n\t\tlet mapDir = new THREE.Vector2().subVectors(mapLookAt, mapPos).normalize();\n\n\t\tmapLookAt = mapPos.clone().add(mapDir.clone().multiplyScalar(30 * scale));\n\t\tlet mapLength = mapPos.distanceTo(mapLookAt);\n\t\tlet mapSide = new THREE.Vector2(-mapDir.y, mapDir.x);\n\n\t\tlet p1 = mapPos.toArray();\n\t\tlet p2 = mapLookAt.clone().sub(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray();\n\t\tlet p3 = mapLookAt.clone().add(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray();\n\n\t\tthis.gCamera.setCoordinates([p1, p2, p3, p1]);\n\t}\n\n\tget sourcesVisible () {\n\t\treturn this.getSourcesLayer().getVisible();\n\t}\n\n\tset sourcesVisible (value) {\n\t\tthis.getSourcesLayer().setVisible(value);\n\t}\n\n}\n","/**\n *\n * @author roy.mdr / http://...\n *\n */\n\nexport class DXFProfileExporter {\n\n\tstatic toXYZ(points, flatten = false) {\n\n\t\t/*\n\t\tpoints: {\n\t\t\t...\n\t\t\tdata: {\n\t\t\t\tmileage: [0, 1, 2...], -> one per point\n\t\t\t\tposition: [0, 0, 0, 1, 1, 1, 2, 2, 2...], -> X, Y, Z\n\t\t\t\trgba: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2...] -> R, G, B, A\n\t\t\t},\n\t\t\tnumPoints: Int\n\t\t}\n\t\t*/\n\n\t\tconst pointsXYZ = {\n\t\t\tx: [],\n\t\t\ty: [],\n\t\t\tz: [],\n\t\t\tminX: Number.MAX_VALUE,\n\t\t\tminY: Number.MAX_VALUE,\n\t\t\tminZ: Number.MAX_VALUE,\n\t\t\tmaxX: -Number.MAX_VALUE,\n\t\t\tmaxY: -Number.MAX_VALUE,\n\t\t\tmaxZ: -Number.MAX_VALUE,\n\t\t\tnumPoints: 0\n\t\t};\n\n\t\tconst pData = points.data;\n\t\tconst pMileage = pData.mileage;\n\t\tconst pCoords = pData.position;\n\t\tconst pColor = pData.rgba;\n\n\t\tfor (let pIx = 0; pIx < points.numPoints; pIx++) {\n\n\t\t\tconst poMileage = pMileage[pIx];\n\t\t\tconst poCoordX = pCoords[ ((pIx * 3) + 0) ];\n\t\t\tconst poCoordY = pCoords[ ((pIx * 3) + 1) ];\n\t\t\tconst poCoordZ = pCoords[ ((pIx * 3) + 2) ];\n\t\t\t// const poColorR = pColor[ ((pIx * 4) + 0) ];\n\t\t\t// const poColorG = pColor[ ((pIx * 4) + 1) ];\n\t\t\t// const poColorB = pColor[ ((pIx * 4) + 2) ];\n\t\t\t// const poColorA = pColor[ ((pIx * 4) + 3) ];\n\n\t\t\tif (flatten === true) {\n\n\t\t\t\tpointsXYZ.x.push(poMileage);\n\t\t\t\tpointsXYZ.y.push(0);\n\t\t\t\tpointsXYZ.z.push(poCoordZ);\n\n\t\t\t\t// Get boundaries X\n\t\t\t\tif (pointsXYZ.maxX < poMileage) pointsXYZ.maxX = poMileage;\n\t\t\t\tif (pointsXYZ.minX > poMileage) pointsXYZ.minX = poMileage;\n\n\t\t\t\t// Get boundaries Z\n\t\t\t\tif (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ;\n\t\t\t\tif (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ;\n\n\t\t\t} else {\n\n\t\t\t\tpointsXYZ.x.push(poCoordX);\n\t\t\t\tpointsXYZ.y.push(poCoordY);\n\t\t\t\tpointsXYZ.z.push(poCoordZ);\n\n\t\t\t\t// Get boundaries X\n\t\t\t\tif (pointsXYZ.maxX < poCoordX) pointsXYZ.maxX = poCoordX;\n\t\t\t\tif (pointsXYZ.minX > poCoordX) pointsXYZ.minX = poCoordX;\n\n\t\t\t\t// Get boundaries Y\n\t\t\t\tif (pointsXYZ.maxY < poCoordY) pointsXYZ.maxY = poCoordY;\n\t\t\t\tif (pointsXYZ.minY > poCoordY) pointsXYZ.minY = poCoordY;\n\n\t\t\t\t// Get boundaries Z\n\t\t\t\tif (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ;\n\t\t\t\tif (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (flatten === true) {\n\t\t\t// Set boundaries Y\n\t\t\tpointsXYZ.maxY = 0;\n\t\t\tpointsXYZ.minY = 0;\n\t\t}\n\n\t\tpointsXYZ.numPoints = points.numPoints;\n\n\t\treturn pointsXYZ;\n\t}\n\n\tstatic plotPCloudPoint(x, y, z) {\n\n\t\tconst dxfSection = `0\nPOINT\n8\nlayer_pointCloud\n10\n${x}\n20\n${y}\n30\n${z}\n`;\n\n\t\treturn dxfSection;\n\t}\n\n\tstatic toString(points, flatten = false) {\n\n\t\tconst pCloud = DXFProfileExporter.toXYZ(points, flatten);\n\n\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\tlet dxfBody = `0\nSECTION\n2\nENTITIES\n`;\n\n\t\tfor (let i = 0; i < pCloud.numPoints; i++) {\n\t\t\tdxfBody += DXFProfileExporter.plotPCloudPoint(pCloud.x[i], pCloud.y[i], pCloud.z[i]);\n\t\t}\n\n\t\tdxfBody += `0\nENDSEC\n`;\n\n\t\tconst dxf = dxfHeader + dxfBody + '0\\nEOF';\n\n\t\treturn dxf;\n\t}\n\n}\n","\nexport class CSVExporter {\n\tstatic toString (points) {\n\t\tlet string = '';\n\n\t\tlet attributes = Object.keys(points.data)\n\t\t\t.filter(a => a !== 'normal')\n\t\t\t.sort((a, b) => {\n\t\t\t\tif (a === 'position') return -1;\n\t\t\t\tif (b === 'position') return 1;\n\t\t\t\tif (a === 'rgba') return -1;\n\t\t\t\tif (b === 'rgba') return 1;\n\t\t\t});\n\n\t\tlet headerValues = [];\n\t\tfor (let attribute of attributes) {\n\t\t\tlet itemSize = points.data[attribute].length / points.numPoints;\n\n\t\t\tif (attribute === 'position') {\n\t\t\t\theaderValues = headerValues.concat(['x', 'y', 'z']);\n\t\t\t} else if (attribute === 'rgba') {\n\t\t\t\theaderValues = headerValues.concat(['r', 'g', 'b', 'a']);\n\t\t\t} else if (itemSize > 1) {\n\t\t\t\tfor (let i = 0; i < itemSize; i++) {\n\t\t\t\t\theaderValues.push(`${attribute}_${i}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\theaderValues.push(attribute);\n\t\t\t}\n\t\t}\n\t\tstring = headerValues.join(', ') + '\\n';\n\n\t\tfor (let i = 0; i < points.numPoints; i++) {\n\t\t\tlet values = [];\n\n\t\t\tfor (let attribute of attributes) {\n\t\t\t\tlet itemSize = points.data[attribute].length / points.numPoints;\n\t\t\t\tlet value = points.data[attribute]\n\t\t\t\t\t.subarray(itemSize * i, itemSize * i + itemSize)\n\t\t\t\t\t.join(', ');\n\t\t\t\tvalues.push(value);\n\t\t\t}\n\n\t\t\tstring += values.join(', ') + '\\n';\n\t\t}\n\n\t\treturn string;\n\t}\n};\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class LASExporter {\n\tstatic toLAS (points) {\n\t\t// TODO Unused: let string = '';\n\n\t\tlet boundingBox = points.boundingBox;\n\t\tlet offset = boundingBox.min.clone();\n\t\tlet diagonal = boundingBox.min.distanceTo(boundingBox.max);\n\t\tlet scale = new THREE.Vector3(0.001, 0.001, 0.001);\n\t\tif (diagonal > 1000 * 1000) {\n\t\t\tscale = new THREE.Vector3(0.01, 0.01, 0.01);\n\t\t} else {\n\t\t\tscale = new THREE.Vector3(0.001, 0.001, 0.001);\n\t\t}\n\n\t\tlet setString = function (string, offset, buffer) {\n\t\t\tlet view = new Uint8Array(buffer);\n\n\t\t\tfor (let i = 0; i < string.length; i++) {\n\t\t\t\tlet charCode = string.charCodeAt(i);\n\t\t\t\tview[offset + i] = charCode;\n\t\t\t}\n\t\t};\n\n\t\tlet buffer = new ArrayBuffer(227 + 28 * points.numPoints);\n\t\tlet view = new DataView(buffer);\n\t\tlet u8View = new Uint8Array(buffer);\n\t\t// let u16View = new Uint16Array(buffer);\n\n\t\tsetString('LASF', 0, buffer);\n\t\tu8View[24] = 1;\n\t\tu8View[25] = 2;\n\n\t\t// system identifier o:26 l:32\n\n\t\t// generating software o:58 l:32\n\t\tsetString('Potree 1.7', 58, buffer);\n\n\t\t// file creation day of year o:90 l:2\n\t\t// file creation year o:92 l:2\n\n\t\t// header size o:94 l:2\n\t\tview.setUint16(94, 227, true);\n\n\t\t// offset to point data o:96 l:4\n\t\tview.setUint32(96, 227, true);\n\n\t\t// number of letiable length records o:100 l:4\n\n\t\t// point data record format 104 1\n\t\tu8View[104] = 2;\n\n\t\t// point data record length 105 2\n\t\tview.setUint16(105, 28, true);\n\n\t\t// number of point records 107 4\n\t\tview.setUint32(107, points.numPoints, true);\n\n\t\t// number of points by return 111 20\n\n\t\t// x scale factor 131 8\n\t\tview.setFloat64(131, scale.x, true);\n\n\t\t// y scale factor 139 8\n\t\tview.setFloat64(139, scale.y, true);\n\n\t\t// z scale factor 147 8\n\t\tview.setFloat64(147, scale.z, true);\n\n\t\t// x offset 155 8\n\t\tview.setFloat64(155, offset.x, true);\n\n\t\t// y offset 163 8\n\t\tview.setFloat64(163, offset.y, true);\n\n\t\t// z offset 171 8\n\t\tview.setFloat64(171, offset.z, true);\n\n\t\t// max x 179 8\n\t\tview.setFloat64(179, boundingBox.max.x, true);\n\n\t\t// min x 187 8\n\t\tview.setFloat64(187, boundingBox.min.x, true);\n\n\t\t// max y 195 8\n\t\tview.setFloat64(195, boundingBox.max.y, true);\n\n\t\t// min y 203 8\n\t\tview.setFloat64(203, boundingBox.min.y, true);\n\n\t\t// max z 211 8\n\t\tview.setFloat64(211, boundingBox.max.z, true);\n\n\t\t// min z 219 8\n\t\tview.setFloat64(219, boundingBox.min.z, true);\n\n\t\tlet boffset = 227;\n\t\tfor (let i = 0; i < points.numPoints; i++) {\n\n\t\t\tlet px = points.data.position[3 * i + 0];\n\t\t\tlet py = points.data.position[3 * i + 1];\n\t\t\tlet pz = points.data.position[3 * i + 2];\n\n\t\t\tlet ux = parseInt((px - offset.x) / scale.x);\n\t\t\tlet uy = parseInt((py - offset.y) / scale.y);\n\t\t\tlet uz = parseInt((pz - offset.z) / scale.z);\n\n\t\t\tview.setUint32(boffset + 0, ux, true);\n\t\t\tview.setUint32(boffset + 4, uy, true);\n\t\t\tview.setUint32(boffset + 8, uz, true);\n\n\t\t\tif (points.data.intensity) {\n\t\t\t\tview.setUint16(boffset + 12, (points.data.intensity[i]), true);\n\t\t\t}\n\n\t\t\tlet rt = 0;\n\t\t\tif (points.data.returnNumber) {\n\t\t\t\trt += points.data.returnNumber[i];\n\t\t\t}\n\t\t\tif (points.data.numberOfReturns) {\n\t\t\t\trt += (points.data.numberOfReturns[i] << 3);\n\t\t\t}\n\t\t\tview.setUint8(boffset + 14, rt);\n\n\t\t\tif (points.data.classification) {\n\t\t\t\tview.setUint8(boffset + 15, points.data.classification[i]);\n\t\t\t}\n\t\t\t// scan angle rank\n\t\t\t// user data\n\t\t\t// point source id\n\t\t\tif (points.data.pointSourceID) {\n\t\t\t\tview.setUint16(boffset + 18, points.data.pointSourceID[i]);\n\t\t\t}\n\n\t\t\tif (points.data.rgba || points.data.color) {\n\t\t\t\tlet rgba = points.data.rgba ?? points.data.color;\n\t\t\t\tview.setUint16(boffset + 20, (rgba[4 * i + 0] * 255), true);\n\t\t\t\tview.setUint16(boffset + 22, (rgba[4 * i + 1] * 255), true);\n\t\t\t\tview.setUint16(boffset + 24, (rgba[4 * i + 2] * 255), true);\n\t\t\t}\n\n\t\t\tboffset += 28;\n\t\t}\n\n\t\treturn buffer;\n\t}\n\t\n}\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Utils} from \"../utils.js\";\nimport {Points} from \"../Points.js\";\nimport {DXFProfileExporter} from \"../exporter/DXFProfileExporter.js\";\nimport {CSVExporter} from \"../exporter/CSVExporter.js\";\nimport {LASExporter} from \"../exporter/LASExporter.js\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\nimport {PointCloudTree} from \"../PointCloudTree.js\";\nimport {Renderer} from \"../PotreeRenderer.js\";\nimport {PointCloudMaterial} from \"../materials/PointCloudMaterial.js\";\nimport {PointSizeType} from \"../defines.js\";\n\n\nfunction copyMaterial(source, target){\n\n\tfor(let name of Object.keys(target.uniforms)){\n\t\ttarget.uniforms[name].value = source.uniforms[name].value;\n\t}\n\n\ttarget.gradientTexture = source.gradientTexture;\n\ttarget.visibleNodesTexture = source.visibleNodesTexture;\n\ttarget.classificationTexture = source.classificationTexture;\n\ttarget.matcapTexture = source.matcapTexture;\n\n\ttarget.activeAttributeName = source.activeAttributeName;\n\ttarget.ranges = source.ranges;\n\n\t//target.updateShaderSource();\n}\n\n\nclass Batch{\n\n\tconstructor(geometry, material){\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.sceneNode = new THREE.Points(geometry, material);\n\n\t\tthis.geometryNode = {\n\t\t\testimatedSpacing: 1.0,\n\t\t\tgeometry: geometry,\n\t\t};\n\t}\n\n\tgetLevel(){\n\t\treturn 0;\n\t}\n\n}\n\nclass ProfileFakeOctree extends PointCloudTree{\n\n\tconstructor(octree){\n\t\tsuper();\n\n\t\tthis.trueOctree = octree;\n\t\tthis.pcoGeometry = octree.pcoGeometry;\n\t\tthis.points = [];\n\t\tthis.visibleNodes = [];\n\t\t\n\t\t//this.material = this.trueOctree.material;\n\t\tthis.material = new PointCloudMaterial();\n\t\t//this.material.copy(this.trueOctree.material);\n\t\tcopyMaterial(this.trueOctree.material, this.material);\n\t\tthis.material.pointSizeType = PointSizeType.FIXED;\n\n\t\tthis.batchSize = 100 * 1000;\n\t\tthis.currentBatch = null\n\t}\n\n\tgetAttribute(name){\n\t\treturn this.trueOctree.getAttribute(name);\n\t}\n\n\tdispose(){\n\t\tfor(let node of this.visibleNodes){\n\t\t\tnode.geometry.dispose();\n\t\t}\n\n\t\tthis.visibleNodes = [];\n\t\tthis.currentBatch = null;\n\t\tthis.points = [];\n\t}\n\n\taddPoints(data){\n\t\t// since each call to addPoints can deliver very very few points,\n\t\t// we're going to batch them into larger buffers for efficiency.\n\n\t\tif(this.currentBatch === null){\n\t\t\tthis.currentBatch = this.createNewBatch(data);\n\t\t}\n\n\t\tthis.points.push(data);\n\n\n\t\tlet updateRange = {\n\t\t\tstart: this.currentBatch.geometry.drawRange.count,\n\t\t\tcount: 0\n\t\t};\n\t\tlet projectedBox = new THREE.Box3();\n\n\t\tlet truePos = new THREE.Vector3();\n\n\t\tfor(let i = 0; i < data.numPoints; i++){\n\n\t\t\tif(updateRange.start + updateRange.count >= this.batchSize){\n\t\t\t\t// current batch full, start new batch\n\n\t\t\t\tfor(let key of Object.keys(this.currentBatch.geometry.attributes)){\n\t\t\t\t\tlet attribute = this.currentBatch.geometry.attributes[key];\n\t\t\t\t\tattribute.updateRange.offset = updateRange.start;\n\t\t\t\t\tattribute.updateRange.count = updateRange.count;\n\t\t\t\t\tattribute.needsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tthis.currentBatch.geometry.computeBoundingBox();\n\t\t\t\tthis.currentBatch.geometry.computeBoundingSphere();\n\n\t\t\t\tthis.currentBatch = this.createNewBatch(data);\n\t\t\t\tupdateRange = {\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tcount: 0\n\t\t\t\t};\n\t\t\t}\n\n\t\t\ttruePos.set(\n\t\t\t\tdata.data.position[3 * i + 0] + this.trueOctree.position.x,\n\t\t\t\tdata.data.position[3 * i + 1] + this.trueOctree.position.y,\n\t\t\t\tdata.data.position[3 * i + 2] + this.trueOctree.position.z,\n\t\t\t);\n\n\t\t\tlet x = data.data.mileage[i];\n\t\t\tlet y = 0;\n\t\t\tlet z = truePos.z;\n\n\t\t\tprojectedBox.expandByPoint(new THREE.Vector3(x, y, z));\n\n\t\t\tlet index = updateRange.start + updateRange.count;\n\t\t\tlet geometry = this.currentBatch.geometry;\n\n\t\t\tfor(let attributeName of Object.keys(data.data)){\n\t\t\t\tlet source = data.data[attributeName];\n\t\t\t\tlet target = geometry.attributes[attributeName];\n\t\t\t\tlet numElements = target.itemSize;\n\t\t\t\t\n\t\t\t\tfor(let item = 0; item < numElements; item++){\n\t\t\t\t\ttarget.array[numElements * index + item] = source[numElements * i + item];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet position = geometry.attributes.position;\n\n\t\t\t\tposition.array[3 * index + 0] = x;\n\t\t\t\tposition.array[3 * index + 1] = y;\n\t\t\t\tposition.array[3 * index + 2] = z;\n\t\t\t}\n\n\t\t\tupdateRange.count++;\n\t\t\tthis.currentBatch.geometry.drawRange.count++;\n\t\t}\n\n\t\tfor(let key of Object.keys(this.currentBatch.geometry.attributes)){\n\t\t\tlet attribute = this.currentBatch.geometry.attributes[key];\n\t\t\tattribute.updateRange.offset = updateRange.start;\n\t\t\tattribute.updateRange.count = updateRange.count;\n\t\t\tattribute.needsUpdate = true;\n\t\t}\n\n\t\tdata.projectedBox = projectedBox;\n\n\t\tthis.projectedBox = this.points.reduce( (a, i) => a.union(i.projectedBox), new THREE.Box3());\n\t}\n\n\tcreateNewBatch(data){\n\t\tlet geometry = new THREE.BufferGeometry();\n\n\t\t// create new batches with batch_size elements of the same type as the attribute\n\t\tfor(let attributeName of Object.keys(data.data)){\n\t\t\tlet buffer = data.data[attributeName];\n\t\t\tlet numElements = buffer.length / data.numPoints; // 3 for pos, 4 for col, 1 for scalars\n\t\t\tlet constructor = buffer.constructor;\n\t\t\tlet normalized = false;\n\t\t\t\n\t\t\tif(this.trueOctree.root.sceneNode){\n\t\t\t\tif(this.trueOctree.root.sceneNode.geometry.attributes[attributeName]){\n\t\t\t\t\tnormalized = this.trueOctree.root.sceneNode.geometry.attributes[attributeName].normalized;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\tlet batchBuffer = new constructor(numElements * this.batchSize);\n\n\t\t\tlet bufferAttribute = new THREE.BufferAttribute(batchBuffer, numElements, normalized);\n\t\t\tbufferAttribute.potree = {\n\t\t\t\trange: [0, 1],\n\t\t\t};\n\n\t\t\tgeometry.setAttribute(attributeName, bufferAttribute);\n\t\t}\n\n\t\tgeometry.drawRange.start = 0;\n\t\tgeometry.drawRange.count = 0;\n\n\t\tlet batch = new Batch(geometry, this.material);\n\n\t\tthis.visibleNodes.push(batch);\n\n\t\treturn batch;\n\t}\n\t\n\tcomputeVisibilityTextureData(){\n\t\tlet data = new Uint8Array(this.visibleNodes.length * 4);\n\t\tlet offsets = new Map();\n\n\t\tfor(let i = 0; i < this.visibleNodes.length; i++){\n\t\t\tlet node = this.visibleNodes[i];\n\n\t\t\toffsets[node] = i;\n\t\t}\n\n\n\t\treturn {\n\t\t\tdata: data,\n\t\t\toffsets: offsets,\n\t\t};\n\t}\n\n}\n\nexport class ProfileWindow extends EventDispatcher {\n\tconstructor (viewer) {\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.elRoot = $('#profile_window');\n\t\tthis.renderArea = this.elRoot.find('#profileCanvasContainer');\n\t\tthis.svg = d3.select('svg#profileSVG');\n\t\tthis.mouseIsDown = false;\n\n\t\tthis.projectedBox = new THREE.Box3();\n\t\tthis.pointclouds = new Map();\n\t\tthis.numPoints = 0;\n\t\tthis.lastAddPointsTimestamp = undefined;\n\n\t\tthis.mouse = new THREE.Vector2(0, 0);\n\t\tthis.scale = new THREE.Vector3(1, 1, 1);\n\n\t\tthis.autoFitEnabled = true; // completely disable/enable\n\t\tthis.autoFit = false; // internal\n\n\t\tlet cwIcon = `${exports.resourcePath}/icons/arrow_cw.svg`;\n\t\t$('#potree_profile_rotate_cw').attr('src', cwIcon);\n\n\t\tlet ccwIcon = `${exports.resourcePath}/icons/arrow_ccw.svg`;\n\t\t$('#potree_profile_rotate_ccw').attr('src', ccwIcon);\n\t\t\n\t\tlet forwardIcon = `${exports.resourcePath}/icons/arrow_up.svg`;\n\t\t$('#potree_profile_move_forward').attr('src', forwardIcon);\n\n\t\tlet backwardIcon = `${exports.resourcePath}/icons/arrow_down.svg`;\n\t\t$('#potree_profile_move_backward').attr('src', backwardIcon);\n\n\t\tlet dxf2DIcon = `${exports.resourcePath}/icons/file_dxf_2d.svg`;\n\t\t$('#potree_download_dxf2D_icon').attr('src', dxf2DIcon);\n\n\t\tlet dxf3DIcon = `${exports.resourcePath}/icons/file_dxf_3d.svg`;\n\t\t$('#potree_download_dxf3D_icon').attr('src', dxf3DIcon);\n\n\t\tlet csvIcon = `${exports.resourcePath}/icons/file_csv_2d.svg`;\n\t\t$('#potree_download_csv_icon').attr('src', csvIcon);\n\n\t\tlet lasIcon = `${exports.resourcePath}/icons/file_las_3d.svg`;\n\t\t$('#potree_download_las_icon').attr('src', lasIcon);\n\n\t\tlet closeIcon = `${exports.resourcePath}/icons/close.svg`;\n\t\t$('#closeProfileContainer').attr(\"src\", closeIcon);\n\n\t\tthis.initTHREE();\n\t\tthis.initSVG();\n\t\tthis.initListeners();\n\n\t\tthis.pRenderer = new Renderer(this.renderer);\n\n\t\tthis.elRoot.i18n();\n\t}\n\n\tinitListeners () {\n\t\t$(window).resize(() => {\n\t\t\tif (this.enabled) {\n\t\t\tthis.render();\n\t\t\t}\n\t\t});\n\n\t\tthis.renderArea.mousedown(e => {\n\t\t\tthis.mouseIsDown = true;\n\t\t});\n\n\t\tthis.renderArea.mouseup(e => {\n\t\t\tthis.mouseIsDown = false;\n\t\t});\n\n\t\tlet viewerPickSphereSizeHandler = () => {\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\tlet distance = this.viewerPickSphere.position.distanceTo(camera.position);\n\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight);\n\t\t\tlet scale = (10 / pr);\n\t\t\tthis.viewerPickSphere.scale.set(scale, scale, scale);\n\t\t};\n\n\t\tthis.renderArea.mousemove(e => {\n\t\t\tif (this.pointclouds.size === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet rect = this.renderArea[0].getBoundingClientRect();\n\t\t\tlet x = e.clientX - rect.left;\n\t\t\tlet y = e.clientY - rect.top;\n\n\t\t\tlet newMouse = new THREE.Vector2(x, y);\n\n\t\t\tif (this.mouseIsDown) {\n\t\t\t\t// DRAG\n\t\t\t\tthis.autoFit = false;\n\t\t\t\tthis.lastDrag = new Date().getTime();\n\n\t\t\t\tlet cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)];\n\t\t\t\tlet ncPos = [this.scaleX.invert(newMouse.x), this.scaleY.invert(newMouse.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} else if (this.pointclouds.size > 0) {\n\t\t\t\t// FIND HOVERED POINT\n\t\t\t\tlet radius = Math.abs(this.scaleX.invert(0) - this.scaleX.invert(40));\n\t\t\t\tlet mileage = this.scaleX.invert(newMouse.x);\n\t\t\t\tlet elevation = this.scaleY.invert(newMouse.y);\n\n\t\t\t\tlet closest = this.selectPoint(mileage, elevation, radius);\n\n\t\t\t\tif (closest) {\n\t\t\t\t\tlet point = closest.point;\n\n\t\t\t\t\tlet position = new Float64Array([\n\t\t\t\t\t\tpoint.position[0] + closest.pointcloud.position.x,\n\t\t\t\t\t\tpoint.position[1] + closest.pointcloud.position.y,\n\t\t\t\t\t\tpoint.position[2] + closest.pointcloud.position.z\n\t\t\t\t\t]);\n\n\t\t\t\t\tthis.elRoot.find('#profileSelectionProperties').fadeIn(200);\n\t\t\t\t\tthis.pickSphere.visible = true;\n\t\t\t\t\tthis.pickSphere.scale.set(0.5 * radius, 0.5 * radius, 0.5 * radius);\n\t\t\t\t\tthis.pickSphere.position.set(point.mileage, 0, position[2]);\n\n\t\t\t\t\tthis.viewerPickSphere.position.set(...position);\n\t\t\t\t\t\n\t\t\t\t\tif(!this.viewer.scene.scene.children.includes(this.viewerPickSphere)){\n\t\t\t\t\t\tthis.viewer.scene.scene.add(this.viewerPickSphere);\n\t\t\t\t\t\tif(!this.viewer.hasEventListener(\"update\", viewerPickSphereSizeHandler)){\n\t\t\t\t\t\t\tthis.viewer.addEventListener(\"update\", viewerPickSphereSizeHandler);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t\tlet info = this.elRoot.find('#profileSelectionProperties');\n\t\t\t\t\tlet html = '';\n\n\t\t\t\t\tfor (let attributeName of Object.keys(point)) {\n\n\t\t\t\t\t\tlet value = point[attributeName];\n\t\t\t\t\t\tlet attribute = closest.pointcloud.getAttribute(attributeName);\n\n\t\t\t\t\t\tlet transform = value => value;\n\t\t\t\t\t\tif(attribute && attribute.type.size > 4){\n\t\t\t\t\t\t\tlet range = attribute.initialRange;\n\t\t\t\t\t\t\tlet scale = 1 / (range[1] - range[0]);\n\t\t\t\t\t\t\tlet offset = range[0];\n\t\t\t\t\t\t\ttransform = value => value / scale + offset;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tif (attributeName === 'position') {\n\t\t\t\t\t\t\tlet values = [...position].map(v => Utils.addCommas(v.toFixed(3)));\n\t\t\t\t\t\t\thtml += `\n\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\t\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\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\t\n\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} else if (attributeName === 'rgba') {\n\t\t\t\t\t\t\thtml += `\n\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\t\n\t\t\t\t\t\t\t\t`;\n\t\t\t\t\t\t} else if (attributeName === 'normal') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (attributeName === 'mileage') {\n\t\t\t\t\t\t\thtml += `\n\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\t\n\t\t\t\t\t\t\t\t`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thtml += `\n\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\t\n\t\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\thtml += '
        x${values[0]}
        y${values[1]}
        z${values[2]}
        ${attributeName}${value.join(', ')}
        ${attributeName}${value.toFixed(3)}
        ${attributeName}${transform(value)}
        ';\n\t\t\t\t\tinfo.html(html);\n\n\t\t\t\t\tthis.selectedPoint = point;\n\t\t\t\t} else {\n\t\t\t\t\t// this.pickSphere.visible = false;\n\t\t\t\t\t// this.selectedPoint = null;\n\n\t\t\t\t\tthis.viewer.scene.scene.add(this.viewerPickSphere);\n\n\t\t\t\t\tlet index = this.viewer.scene.scene.children.indexOf(this.viewerPickSphere);\n\t\t\t\t\tif(index >= 0){\n\t\t\t\t\t\tthis.viewer.scene.scene.children.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t\tthis.viewer.removeEventListener(\"update\", viewerPickSphereSizeHandler);\n\t\t\t\t\t\n\n\t\t\t\t}\n\t\t\t\tthis.render();\n\t\t\t}\n\n\t\t\tthis.mouse.copy(newMouse);\n\t\t});\n\n\t\tlet onWheel = e => {\n\t\t\tthis.autoFit = false;\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\tlet cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)];\n\n\t\t\tif (ndelta > 0) {\n\t\t\t\t// + 10%\n\t\t\t\tthis.scale.multiplyScalar(1.1);\n\t\t\t} else {\n\t\t\t\t// - 10%\n\t\t\t\tthis.scale.multiplyScalar(100 / 110);\n\t\t\t}\n\n\t\t\tthis.updateScales();\n\t\t\tlet ncPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)];\n\n\t\t\tthis.camera.position.x -= ncPos[0] - cPos[0];\n\t\t\tthis.camera.position.z -= ncPos[1] - cPos[1];\n\n\t\t\tthis.render();\n\t\t\tthis.updateScales();\n\t\t};\n\t\t$(this.renderArea)[0].addEventListener('mousewheel', onWheel, false);\n\t\t$(this.renderArea)[0].addEventListener('DOMMouseScroll', onWheel, false); // Firefox\n\n\t\t$('#closeProfileContainer').click(() => {\n\t\t\tthis.hide();\n\t\t});\n\n\t\tlet getProfilePoints = (truePosition) => {\n\t\t\tlet points = new Points();\n\t\t\t\n\t\t\tfor(let [pointcloud, entry] of this.pointclouds){\n\t\t\t\tfor(let pointSet of entry.points){\n\n\t\t\t\t\tlet originPos = pointSet.data.position;\n\t\t\t\t\tlet truePointPosition = new Float64Array(originPos);\n\t\t\t\t\tfor(let i = 0; i < pointSet.numPoints; i++){\n\n\t\t\t\t\t\tif (truePosition === true) {\n\t\t\t\t\t\t\ttruePointPosition[3 * i + 0] += pointcloud.position.x;\n\t\t\t\t\t\t\ttruePointPosition[3 * i + 1] += pointcloud.position.y;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttruePointPosition[3 * i + 2] += pointcloud.position.z;\n\t\t\t\t\t}\n\n\t\t\t\t\tpointSet.data.position = truePointPosition;\n\t\t\t\t\tpoints.add(pointSet);\n\t\t\t\t\tpointSet.data.position = originPos;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn points;\n\t\t};\n\n\t\t$('#potree_download_dxf2D_icon').click(() => {\n\t\t\t\n\t\t\tconst points = getProfilePoints();\n\n\t\t\tconst string = DXFProfileExporter.toString(points, true);\n\n\t\t\tconst blob = new Blob([string], {type: \"text/string\"});\n\t\t\t$('#potree_download_profile_dxf2D_link').attr('href', URL.createObjectURL(blob));\n\t\t});\n\n\t\t$('#potree_download_dxf3D_icon').click(() => {\n\t\t\t\n\t\t\tconst points = getProfilePoints(true);\n\n\t\t\tconst string = DXFProfileExporter.toString(points);\n\n\t\t\tconst blob = new Blob([string], {type: \"text/string\"});\n\t\t\t$('#potree_download_profile_dxf3D_link').attr('href', URL.createObjectURL(blob));\n\t\t});\n\n\t\t$('#potree_download_csv_icon').click(() => {\n\t\t\t\n\t\t\tlet points = getProfilePoints(true);\n\n\t\t\tlet string = CSVExporter.toString(points);\n\n\t\t\tlet blob = new Blob([string], {type: \"text/string\"});\n\t\t\t$('#potree_download_profile_ortho_link').attr('href', URL.createObjectURL(blob));\n\t\t});\n\n\t\t$('#potree_download_las_icon').click(() => {\n\n\t\t\tlet points = getProfilePoints(true);\n\n\t\t\tlet buffer = LASExporter.toLAS(points);\n\n\t\t\tlet blob = new Blob([buffer], {type: \"application/octet-binary\"});\n\t\t\t$('#potree_download_profile_link').attr('href', URL.createObjectURL(blob));\n\t\t});\n\t}\n\n\tselectPoint (mileage, elevation, radius) {\n\t\tlet closest = {\n\t\t\tdistance: Infinity,\n\t\t\tpointcloud: null,\n\t\t\tpoints: null,\n\t\t\tindex: null\n\t\t};\n\n\t\tlet pointBox = new THREE.Box2(\n\t\t\tnew THREE.Vector2(mileage - radius, elevation - radius),\n\t\t\tnew THREE.Vector2(mileage + radius, elevation + radius));\n\n\t\tlet numTested = 0;\n\t\tlet numSkipped = 0;\n\t\tlet numTestedPoints = 0;\n\t\tlet numSkippedPoints = 0;\n\n\t\tfor (let [pointcloud, entry] of this.pointclouds) {\n\t\t\tfor(let points of entry.points){\n\n\t\t\t\tlet collisionBox = new THREE.Box2(\n\t\t\t\t\tnew THREE.Vector2(points.projectedBox.min.x, points.projectedBox.min.z),\n\t\t\t\t\tnew THREE.Vector2(points.projectedBox.max.x, points.projectedBox.max.z)\n\t\t\t\t);\n\n\t\t\t\tlet intersects = collisionBox.intersectsBox(pointBox);\n\n\t\t\t\tif(!intersects){\n\t\t\t\t\tnumSkipped++;\n\t\t\t\t\tnumSkippedPoints += points.numPoints;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tnumTested++;\n\t\t\t\tnumTestedPoints += points.numPoints\n\n\t\t\t\tfor (let i = 0; i < points.numPoints; i++) {\n\n\t\t\t\t\tlet m = points.data.mileage[i] - mileage;\n\t\t\t\t\tlet e = points.data.position[3 * i + 2] - elevation + pointcloud.position.z;\n\t\t\t\t\tlet r = Math.sqrt(m * m + e * e);\n\n\t\t\t\t\tconst withinDistance = r < radius && r < closest.distance;\n\t\t\t\t\tlet unfilteredClass = true;\n\n\t\t\t\t\tif(points.data.classification){\n\t\t\t\t\t\tconst classification = pointcloud.material.classification;\n\n\t\t\t\t\t\tconst pointClassID = points.data.classification[i];\n\t\t\t\t\t\tconst pointClassValue = classification[pointClassID];\n\n\t\t\t\t\t\tif(pointClassValue && (!pointClassValue.visible || pointClassValue.color.w === 0)){\n\t\t\t\t\t\t\tunfilteredClass = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (withinDistance && unfilteredClass) {\n\t\t\t\t\t\tclosest = {\n\t\t\t\t\t\t\tdistance: r,\n\t\t\t\t\t\t\tpointcloud: pointcloud,\n\t\t\t\t\t\t\tpoints: points,\n\t\t\t\t\t\t\tindex: 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}\n\n\n\t\t//console.log(`nodes: ${numTested}, ${numSkipped} || points: ${numTestedPoints}, ${numSkippedPoints}`);\n\n\t\tif (closest.distance < Infinity) {\n\t\t\tlet points = closest.points;\n\n\t\t\tlet point = {};\n\n\t\t\tlet attributes = Object.keys(points.data);\n\t\t\tfor (let attribute of attributes) {\n\t\t\t\tlet attributeData = points.data[attribute];\n\t\t\t\tlet itemSize = attributeData.length / points.numPoints;\n\t\t\t\tlet value = attributeData.subarray(itemSize * closest.index, itemSize * closest.index + itemSize);\n\n\t\t\t\tif (value.length === 1) {\n\t\t\t\t\tpoint[attribute] = value[0];\n\t\t\t\t} else {\n\t\t\t\t\tpoint[attribute] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclosest.point = point;\n\n\t\t\treturn closest;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tinitTHREE () {\n\t\tthis.renderer = new THREE.WebGLRenderer({alpha: true, premultipliedAlpha: false});\n\t\tthis.renderer.setClearColor(0x000000, 0);\n\t\tthis.renderer.setSize(10, 10);\n\t\tthis.renderer.autoClear = false;\n\t\tthis.renderArea.append($(this.renderer.domElement));\n\t\tthis.renderer.domElement.tabIndex = '2222';\n\t\t$(this.renderer.domElement).css('width', '100%');\n\t\t$(this.renderer.domElement).css('height', '100%');\n\n\n\t\t{\n\t\t\tlet gl = this.renderer.getContext();\n\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\tthis.camera = new THREE.OrthographicCamera(-1000, 1000, 1000, -1000, -1000, 1000);\n\t\tthis.camera.up.set(0, 0, 1);\n\t\tthis.camera.rotation.order = \"ZXY\";\n\t\tthis.camera.rotation.x = Math.PI / 2.0;\n\t\n\n\t\tthis.scene = new THREE.Scene();\n\t\tthis.profileScene = new THREE.Scene();\n\n\t\tlet sg = new THREE.SphereGeometry(1, 16, 16);\n\t\tlet sm = new THREE.MeshNormalMaterial();\n\t\tthis.pickSphere = new THREE.Mesh(sg, sm);\n\t\tthis.scene.add(this.pickSphere);\n\n\t\tthis.viewerPickSphere = new THREE.Mesh(sg, sm);\n\t}\n\n\tinitSVG () {\n\t\tlet width = this.renderArea[0].clientWidth;\n\t\tlet height = this.renderArea[0].clientHeight;\n\t\tlet marginLeft = this.renderArea[0].offsetLeft;\n\n\t\tthis.svg.selectAll('*').remove();\n\n\t\tthis.scaleX = d3.scale.linear()\n\t\t\t.domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x])\n\t\t\t.range([0, width]);\n\t\tthis.scaleY = d3.scale.linear()\n\t\t\t.domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z])\n\t\t\t.range([height, 0]);\n\n\t\tthis.xAxis = d3.svg.axis()\n\t\t\t.scale(this.scaleX)\n\t\t\t.orient('bottom')\n\t\t\t.innerTickSize(-height)\n\t\t\t.outerTickSize(1)\n\t\t\t.tickPadding(10)\n\t\t\t.ticks(width / 50);\n\n\t\tthis.yAxis = d3.svg.axis()\n\t\t\t.scale(this.scaleY)\n\t\t\t.orient('left')\n\t\t\t.innerTickSize(-width)\n\t\t\t.outerTickSize(1)\n\t\t\t.tickPadding(10)\n\t\t\t.ticks(height / 20);\n\n\t\tthis.elXAxis = this.svg.append('g')\n\t\t\t.attr('class', 'x axis')\n\t\t\t.attr('transform', `translate(${marginLeft}, ${height})`)\n\t\t\t.call(this.xAxis);\n\n\t\tthis.elYAxis = this.svg.append('g')\n\t\t\t.attr('class', 'y axis')\n\t\t\t.attr('transform', `translate(${marginLeft}, 0)`)\n\t\t\t.call(this.yAxis);\n\t}\n\n\taddPoints (pointcloud, points) {\n\n\t\tif(points.numPoints === 0){\n\t\t\treturn;\n\t\t}\n\n\t\tlet entry = this.pointclouds.get(pointcloud);\n\t\tif(!entry){\n\t\t\tentry = new ProfileFakeOctree(pointcloud);\n\t\t\tthis.pointclouds.set(pointcloud, entry);\n\t\t\tthis.profileScene.add(entry);\n\n\t\t\tlet materialChanged = () => {\n\t\t\t\tthis.render();\n\t\t\t};\n\n\t\t\tmaterialChanged();\n\n\t\t\tpointcloud.material.addEventListener('material_property_changed', materialChanged);\n\t\t\tthis.addEventListener(\"on_reset_once\", () => {\n\t\t\t\tpointcloud.material.removeEventListener('material_property_changed', materialChanged);\n\t\t\t});\n\t\t}\n\n\t\tentry.addPoints(points);\n\t\tthis.projectedBox.union(entry.projectedBox);\n\n\t\tif (this.autoFit && this.autoFitEnabled) { \n\t\t\tlet width = this.renderArea[0].clientWidth;\n\t\t\tlet height = this.renderArea[0].clientHeight;\n\n\t\t\tlet size = this.projectedBox.getSize(new THREE.Vector3());\n\n\t\t\tlet sx = width / size.x;\n\t\t\tlet sy = height / size.z;\n\t\t\tlet scale = Math.min(sx, sy);\n\n\t\t\tlet center = this.projectedBox.getCenter(new THREE.Vector3());\n\t\t\tthis.scale.set(scale, scale, 1);\n\t\t\tthis.camera.position.copy(center);\n\n\t\t\t//console.log(\"camera: \", this.camera.position.toArray().join(\", \"));\n\t\t}\n\n\t\t//console.log(entry);\n\n\t\tthis.render();\n\n\t\tlet numPoints = 0;\n\t\tfor (let [key, value] of this.pointclouds.entries()) {\n\t\t\tnumPoints += value.points.reduce( (a, i) => a + i.numPoints, 0);\n\t\t}\n\t\t$(`#profile_num_points`).html(Utils.addCommas(numPoints));\n\n\t}\n\n\treset () {\n\t\tthis.lastReset = new Date().getTime();\n\n\t\tthis.dispatchEvent({type: \"on_reset_once\"});\n\t\tthis.removeEventListeners(\"on_reset_once\");\n\n\t\tthis.autoFit = true;\n\t\tthis.projectedBox = new THREE.Box3();\n\n\t\tfor(let [key, entry] of this.pointclouds){\n\t\t\tentry.dispose();\n\t\t}\n\n\t\tthis.pointclouds.clear();\n\t\tthis.mouseIsDown = false;\n\t\tthis.mouse.set(0, 0);\n\n\t\tif(this.autoFitEnabled){\n\t\t\tthis.scale.set(1, 1, 1);\n\t\t}\n\t\tthis.pickSphere.visible = false;\n\n\t\tthis.elRoot.find('#profileSelectionProperties').hide();\n\n\t\tthis.render();\n\t}\n\n\tshow () {\n\t\tthis.elRoot.fadeIn();\n\t\tthis.enabled = true;\n\t}\n\n\thide () {\n\t\tthis.elRoot.fadeOut();\n\t\tthis.enabled = false;\n\t}\n\n\tupdateScales () {\n\n\t\tlet width = this.renderArea[0].clientWidth;\n\t\tlet height = this.renderArea[0].clientHeight;\n\n\t\tlet left = (-width / 2) / this.scale.x;\n\t\tlet right = (+width / 2) / this.scale.x;\n\t\tlet top = (+height / 2) / this.scale.y;\n\t\tlet bottom = (-height / 2) / this.scale.y;\n\n\t\tthis.camera.left = left;\n\t\tthis.camera.right = right;\n\t\tthis.camera.top = top;\n\t\tthis.camera.bottom = bottom;\n\t\tthis.camera.updateProjectionMatrix();\n\n\t\tthis.scaleX.domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x])\n\t\t\t.range([0, width]);\n\t\tthis.scaleY.domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z])\n\t\t\t.range([height, 0]);\n\n\t\tlet marginLeft = this.renderArea[0].offsetLeft;\n\n\t\tthis.xAxis.scale(this.scaleX)\n\t\t\t.orient('bottom')\n\t\t\t.innerTickSize(-height)\n\t\t\t.outerTickSize(1)\n\t\t\t.tickPadding(10)\n\t\t\t.ticks(width / 50);\n\t\tthis.yAxis.scale(this.scaleY)\n\t\t\t.orient('left')\n\t\t\t.innerTickSize(-width)\n\t\t\t.outerTickSize(1)\n\t\t\t.tickPadding(10)\n\t\t\t.ticks(height / 20);\n\n\n\t\tthis.elXAxis\n\t\t\t.attr('transform', `translate(${marginLeft}, ${height})`)\n\t\t\t.call(this.xAxis);\n\t\tthis.elYAxis\n\t\t\t.attr('transform', `translate(${marginLeft}, 0)`)\n\t\t\t.call(this.yAxis);\n\t}\n\n\trequestScaleUpdate(){\n\n\t\tlet threshold = 100;\n\t\tlet allowUpdate = ((this.lastReset === undefined) || (this.lastScaleUpdate === undefined)) \n\t\t\t|| ((new Date().getTime() - this.lastReset) > threshold && (new Date().getTime() - this.lastScaleUpdate) > threshold);\n\n\t\tif(allowUpdate){\n\n\t\t\tthis.updateScales();\n\n\t\t\tthis.lastScaleUpdate = new Date().getTime();\n\n\t\t\t\n\n\t\t\tthis.scaleUpdatePending = false;\n\t\t}else if(!this.scaleUpdatePending) {\n\t\t\tsetTimeout(this.requestScaleUpdate.bind(this), 100);\n\t\t\tthis.scaleUpdatePending = true;\n\t\t}\n\t\t\n\t}\n\n\trender () {\n\t\tlet width = this.renderArea[0].clientWidth;\n\t\tlet height = this.renderArea[0].clientHeight;\n\n\t\tlet {renderer, pRenderer, camera, profileScene, scene} = this;\n\t\tlet {scaleX, pickSphere} = this;\n\n\t\trenderer.setSize(width, height);\n\n\t\trenderer.setClearColor(0x000000, 0);\n\t\trenderer.clear(true, true, false);\n\n\t\tfor(let pointcloud of this.pointclouds.keys()){\n\t\t\tlet source = pointcloud.material;\n\t\t\tlet target = this.pointclouds.get(pointcloud).material;\n\t\t\t\n\t\t\tcopyMaterial(source, target);\n\t\t\ttarget.size = 2;\n\t\t}\n\t\t\n\t\tpRenderer.render(profileScene, camera, null);\n\n\t\tlet radius = Math.abs(scaleX.invert(0) - scaleX.invert(5));\n\n\t\tif (radius === 0) {\n\t\t\tpickSphere.visible = false;\n\t\t} else {\n\t\t\tpickSphere.scale.set(radius, radius, radius);\n\t\t\tpickSphere.visible = true;\n\t\t}\n\t\t\n\t\trenderer.render(scene, camera);\n\n\t\tthis.requestScaleUpdate();\n\t}\n};\n\nexport class ProfileWindowController {\n\tconstructor (viewer) {\n\t\tthis.viewer = viewer;\n\t\tthis.profileWindow = viewer.profileWindow;\n\t\tthis.profile = null;\n\t\tthis.numPoints = 0;\n\t\tthis.threshold = 60 * 1000;\n\t\tthis.rotateAmount = 10;\n\n\t\tthis.scheduledRecomputeTime = null;\n\n\t\tthis.enabled = true;\n\n\t\tthis.requests = [];\n\n\t\tthis._recompute = () => { this.recompute(); };\n\n\t\tthis.viewer.addEventListener(\"scene_changed\", e => {\n\t\t\te.oldScene.removeEventListener(\"pointcloud_added\", this._recompute);\n\t\t\te.scene.addEventListener(\"pointcloud_added\", this._recompute);\n\t\t});\n\t\tthis.viewer.scene.addEventListener(\"pointcloud_added\", this._recompute);\n\n\t\t$(\"#potree_profile_rotate_amount\").val(parseInt(this.rotateAmount));\n\t\t$(\"#potree_profile_rotate_amount\").on(\"input\", (e) => {\n\t\t\tconst str = $(\"#potree_profile_rotate_amount\").val();\n\n\t\t\tif(!isNaN(str)){\n\t\t\t\tconst value = parseFloat(str);\n\t\t\t\tthis.rotateAmount = value;\n\t\t\t\t$(\"#potree_profile_rotate_amount\").css(\"background-color\", \"\")\n\t\t\t}else{\n\t\t\t\t$(\"#potree_profile_rotate_amount\").css(\"background-color\", \"#ff9999\")\n\t\t\t}\n\n\t\t});\n\n\t\tconst rotate = (radians) => {\n\t\t\tconst profile = this.profile;\n\t\t\tconst points = profile.points;\n\t\t\tconst start = points[0];\n\t\t\tconst end = points[points.length - 1];\n\t\t\tconst center = start.clone().add(end).multiplyScalar(0.5);\n\n\t\t\tconst mMoveOrigin = new THREE.Matrix4().makeTranslation(-center.x, -center.y, -center.z);\n\t\t\tconst mRotate = new THREE.Matrix4().makeRotationZ(radians);\n\t\t\tconst mMoveBack = new THREE.Matrix4().makeTranslation(center.x, center.y, center.z);\n\t\t\t//const transform = mMoveOrigin.multiply(mRotate).multiply(mMoveBack);\n\t\t\tconst transform = mMoveBack.multiply(mRotate).multiply(mMoveOrigin);\n\n\t\t\tconst rotatedPoints = points.map( point => point.clone().applyMatrix4(transform) );\n\n\t\t\tthis.profileWindow.autoFitEnabled = false;\n\n\t\t\tfor(let i = 0; i < points.length; i++){\n\t\t\t\tprofile.setPosition(i, rotatedPoints[i]);\n\t\t\t}\n\t\t}\n\n\t\t$(\"#potree_profile_rotate_cw\").click( () => {\n\t\t\tconst radians = THREE.Math.degToRad(this.rotateAmount);\n\t\t\trotate(-radians);\n\t\t});\n\n\t\t$(\"#potree_profile_rotate_ccw\").click( () => {\n\t\t\tconst radians = THREE.Math.degToRad(this.rotateAmount);\n\t\t\trotate(radians);\n\t\t});\n\n\t\t$(\"#potree_profile_move_forward\").click( () => {\n\t\t\tconst profile = this.profile;\n\t\t\tconst points = profile.points;\n\t\t\tconst start = points[0];\n\t\t\tconst end = points[points.length - 1];\n\n\t\t\tconst dir = end.clone().sub(start).normalize();\n\t\t\tconst up = new THREE.Vector3(0, 0, 1);\n\t\t\tconst forward = up.cross(dir);\n\t\t\tconst move = forward.clone().multiplyScalar(profile.width / 2);\n\n\t\t\tthis.profileWindow.autoFitEnabled = false;\n\n\t\t\tfor(let i = 0; i < points.length; i++){\n\t\t\t\tprofile.setPosition(i, points[i].clone().add(move));\n\t\t\t}\n\t\t});\n\n\t\t$(\"#potree_profile_move_backward\").click( () => {\n\t\t\tconst profile = this.profile;\n\t\t\tconst points = profile.points;\n\t\t\tconst start = points[0];\n\t\t\tconst end = points[points.length - 1];\n\n\t\t\tconst dir = end.clone().sub(start).normalize();\n\t\t\tconst up = new THREE.Vector3(0, 0, 1);\n\t\t\tconst forward = up.cross(dir);\n\t\t\tconst move = forward.clone().multiplyScalar(-profile.width / 2);\n\n\t\t\tthis.profileWindow.autoFitEnabled = false;\n\n\t\t\tfor(let i = 0; i < points.length; i++){\n\t\t\t\tprofile.setPosition(i, points[i].clone().add(move));\n\t\t\t}\n\t\t});\n\t}\n\n\tsetProfile (profile) {\n\t\tif (this.profile !== null && this.profile !== profile) {\n\t\t\tthis.profile.removeEventListener('marker_moved', this._recompute);\n\t\t\tthis.profile.removeEventListener('marker_added', this._recompute);\n\t\t\tthis.profile.removeEventListener('marker_removed', this._recompute);\n\t\t\tthis.profile.removeEventListener('width_changed', this._recompute);\n\t\t}\n\n\t\tthis.profile = profile;\n\n\t\t{\n\t\t\tthis.profile.addEventListener('marker_moved', this._recompute);\n\t\t\tthis.profile.addEventListener('marker_added', this._recompute);\n\t\t\tthis.profile.addEventListener('marker_removed', this._recompute);\n\t\t\tthis.profile.addEventListener('width_changed', this._recompute);\n\t\t}\n\n\t\tthis.recompute();\n\t}\n\n\treset () {\n\t\tthis.profileWindow.reset();\n\n\t\tthis.numPoints = 0;\n\n\t\tif (this.profile) {\n\t\t\tfor (let request of this.requests) {\n\t\t\t\trequest.cancel();\n\t\t\t}\n\t\t}\n\t}\n\n\tprogressHandler (pointcloud, progress) {\n\t\tfor (let segment of progress.segments) {\n\t\t\tthis.profileWindow.addPoints(pointcloud, segment.points);\n\t\t\tthis.numPoints += segment.points.numPoints;\n\t\t}\n\t}\n\n\tcancel () {\n\t\tfor (let request of this.requests) {\n\t\t\trequest.cancel();\n\t\t\t// request.finishLevelThenCancel();\n\t\t}\n\n\t\tthis.requests = [];\n\t};\n\n\tfinishLevelThenCancel(){\n\t\tfor (let request of this.requests) {\n\t\t\trequest.finishLevelThenCancel();\n\t\t}\n\n\t\tthis.requests = [];\n\t}\n\n\trecompute () {\n\t\tif (!this.profile) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.scheduledRecomputeTime !== null && this.scheduledRecomputeTime > new Date().getTime()) {\n\t\t\treturn;\n\t\t} else {\n\t\t\tthis.scheduledRecomputeTime = new Date().getTime() + 100;\n\t\t}\n\t\tthis.scheduledRecomputeTime = null;\n\n\t\tthis.reset();\n\n\t\tfor (let pointcloud of this.viewer.scene.pointclouds.filter(p => p.visible)) {\n\t\t\tlet request = pointcloud.getPointsInProfile(this.profile, null, {\n\t\t\t\t'onProgress': (event) => {\n\t\t\t\t\tif (!this.enabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.progressHandler(pointcloud, event.points);\n\n\t\t\t\t\tif (this.numPoints > this.threshold) {\n\t\t\t\t\t\tthis.finishLevelThenCancel();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'onFinish': (event) => {\n\t\t\t\t\tif (!this.enabled) {\n\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'onCancel': () => {\n\t\t\t\t\tif (!this.enabled) {\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.requests.push(request);\n\t\t}\n\t}\n};\n","/**\n *\n * @author sigeom sa / http://sigeom.ch\n * @author Ioda-Net Sàrl / https://www.ioda-net.ch/\n * @author Markus Schütz / http://potree.org\n *\n */\n\nimport {Measure} from \"../utils/Measure.js\";\n\nexport class GeoJSONExporter{\n\n\tstatic measurementToFeatures (measurement) {\n\t\tlet coords = measurement.points.map(e => e.position.toArray());\n\n\t\tlet features = [];\n\n\t\tif (coords.length === 1) {\n\t\t\tlet feature = {\n\t\t\t\ttype: 'Feature',\n\t\t\t\tgeometry: {\n\t\t\t\t\ttype: 'Point',\n\t\t\t\t\tcoordinates: coords[0]\n\t\t\t\t},\n\t\t\t\tproperties: {\n\t\t\t\t\tname: measurement.name\n\t\t\t\t}\n\t\t\t};\n\t\t\tfeatures.push(feature);\n\t\t} else if (coords.length > 1 && !measurement.closed) {\n\t\t\tlet object = {\n\t\t\t\t'type': 'Feature',\n\t\t\t\t'geometry': {\n\t\t\t\t\t'type': 'LineString',\n\t\t\t\t\t'coordinates': coords\n\t\t\t\t},\n\t\t\t\t'properties': {\n\t\t\t\t\tname: measurement.name\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfeatures.push(object);\n\t\t} else if (coords.length > 1 && measurement.closed) {\n\t\t\tlet object = {\n\t\t\t\t'type': 'Feature',\n\t\t\t\t'geometry': {\n\t\t\t\t\t'type': 'Polygon',\n\t\t\t\t\t'coordinates': [[...coords, coords[0]]]\n\t\t\t\t},\n\t\t\t\t'properties': {\n\t\t\t\t\tname: measurement.name\n\t\t\t\t}\n\t\t\t};\n\t\t\tfeatures.push(object);\n\t\t}\n\n\t\tif (measurement.showDistances) {\n\t\t\tmeasurement.edgeLabels.forEach((label) => {\n\t\t\t\tlet labelPoint = {\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: label.position.toArray()\n\t\t\t\t\t},\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tdistance: label.text\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfeatures.push(labelPoint);\n\t\t\t});\n\t\t}\n\n\t\tif (measurement.showArea) {\n\t\t\tlet point = measurement.areaLabel.position;\n\t\t\tlet labelArea = {\n\t\t\t\ttype: 'Feature',\n\t\t\t\tgeometry: {\n\t\t\t\t\ttype: 'Point',\n\t\t\t\t\tcoordinates: point.toArray()\n\t\t\t\t},\n\t\t\t\tproperties: {\n\t\t\t\t\tarea: measurement.areaLabel.text\n\t\t\t\t}\n\t\t\t};\n\t\t\tfeatures.push(labelArea);\n\t\t}\n\n\t\treturn features;\n\t}\n\n\tstatic toString (measurements) {\n\t\tif (!(measurements instanceof Array)) {\n\t\t\tmeasurements = [measurements];\n\t\t}\n\n\t\tmeasurements = measurements.filter(m => m instanceof Measure);\n\n\t\tlet features = [];\n\t\tfor (let measure of measurements) {\n\t\t\tlet f = GeoJSONExporter.measurementToFeatures(measure);\n\n\t\t\tfeatures = features.concat(f);\n\t\t}\n\n\t\tlet geojson = {\n\t\t\t'type': 'FeatureCollection',\n\t\t\t'features': features\n\t\t};\n\n\t\treturn JSON.stringify(geojson, null, '\\t');\n\t}\n\n}\n","/**\n *\n * @author sigeom sa / http://sigeom.ch\n * @author Ioda-Net Sàrl / https://www.ioda-net.ch/\n * @author Markus Schuetz / http://potree.org\n *\n */\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Measure} from \"../utils/Measure.js\";\n\nexport class DXFExporter {\n\n\tstatic measurementPointSection (measurement) {\n\t\tlet position = measurement.points[0].position;\n\n\t\tif (!position) {\n\t\t\treturn '';\n\t\t}\n\n\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\treturn dxfSection;\n\t}\n\n\tstatic measurementPolylineSection (measurement) {\n\t\t// bit code for polygons/polylines:\n\t\t// https://www.autodesk.com/techpubs/autocad/acad2000/dxf/polyline_dxf_06.htm\n\t\tlet geomCode = 8;\n\t\tif (measurement.closed) {\n\t\t\tgeomCode += 1;\n\t\t}\n\n\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\tlet xMax = 0.0;\n\t\tlet yMax = 0.0;\n\t\tlet zMax = 0.0;\n\t\tfor (let point of measurement.points) {\n\t\t\tpoint = point.position;\n\t\t\txMax = Math.max(xMax, point.x);\n\t\t\tyMax = Math.max(yMax, point.y);\n\t\t\tzMax = Math.max(zMax, point.z);\n\n\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}\n\t\tdxfSection += `0\nSEQEND\n`;\n\n\t\treturn dxfSection;\n\t}\n\n\tstatic measurementSection (measurement) {\n\t\t// if(measurement.points.length <= 1){\n\t\t//\treturn \"\";\n\t\t// }\n\n\t\tif (measurement.points.length === 0) {\n\t\t\treturn '';\n\t\t} else if (measurement.points.length === 1) {\n\t\t\treturn DXFExporter.measurementPointSection(measurement);\n\t\t} else if (measurement.points.length >= 2) {\n\t\t\treturn DXFExporter.measurementPolylineSection(measurement);\n\t\t}\n\t}\n\n\tstatic toString(measurements){\n\t\tif (!(measurements instanceof Array)) {\n\t\t\tmeasurements = [measurements];\n\t\t}\n\t\tmeasurements = measurements.filter(m => m instanceof Measure);\n\n\t\tlet points = measurements.filter(m => (m instanceof Measure))\n\t\t\t.map(m => m.points)\n\t\t\t.reduce((a, v) => a.concat(v))\n\t\t\t.map(p => p.position);\n\n\t\tlet min = new THREE.Vector3(Infinity, Infinity, Infinity);\n\t\tlet max = new THREE.Vector3(-Infinity, -Infinity, -Infinity);\n\t\tfor (let point of points) {\n\t\t\tmin.min(point);\n\t\t\tmax.max(point);\n\t\t}\n\n\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\tlet dxfBody = `0\nSECTION\n2\nENTITIES\n`;\n\n\t\tfor (let measurement of measurements) {\n\t\t\tdxfBody += DXFExporter.measurementSection(measurement);\n\t\t}\n\n\t\tdxfBody += `0\nENDSEC\n`;\n\n\t\tlet dxf = dxfHeader + dxfBody + '0\\nEOF';\n\n\t\treturn dxf;\n\t}\n\n}\n","\n\nimport {Utils} from \"../../utils.js\";\n\nexport class MeasurePanel{\n\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tthis.viewer = viewer;\n\t\tthis.measurement = measurement;\n\t\tthis.propertiesPanel = propertiesPanel;\n\n\t\tthis._update = () => { this.update(); };\n\t}\n\n\tcreateCoordinatesTable(points){\n\t\tlet table = $(`\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\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
        xyz
        \n\t\t`);\n\n\t\tlet copyIconPath = Potree.resourcePath + '/icons/copy.svg';\n\n\t\tfor (let point of points) {\n\t\t\tlet x = Utils.addCommas(point.x.toFixed(3));\n\t\t\tlet y = Utils.addCommas(point.y.toFixed(3));\n\t\t\tlet z = Utils.addCommas(point.z.toFixed(3));\n\n\t\t\tlet row = $(`\n\t\t\t\t\n\t\t\t\t\t${x}\n\t\t\t\t\t${y}\n\t\t\t\t\t${z}\n\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.elCopy = row.find(\"img[name=copy]\");\n\t\t\tthis.elCopy.click( () => {\n\t\t\t\tlet msg = point.toArray().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`Copied value to clipboard:
        '${msg}'`,\n\t\t\t\t\t{duration: 3000});\n\t\t\t});\n\n\t\t\ttable.append(row);\n\t\t}\n\n\t\treturn table;\n\t};\n\n\tcreateAttributesTable(){\n\t\tlet elTable = $('
        ');\n\n\t\tlet point = this.measurement.points[0];\n\t\t\n\t\tfor(let attributeName of Object.keys(point)){\n\t\t\tif(attributeName === \"position\"){\n\t\t\t\n\t\t\t}else if(attributeName === \"rgba\"){\n\t\t\t\tlet color = point.rgba;\n\t\t\t\tlet text = color.join(', ');\n\n\t\t\t\telTable.append($(`\n\t\t\t\t\t\n\t\t\t\t\t\trgb\n\t\t\t\t\t\t${text}\n\t\t\t\t\t\n\t\t\t\t`));\n\t\t\t}else{\n\t\t\t\tlet value = point[attributeName];\n\t\t\t\tlet text = value.join(', ');\n\n\t\t\t\telTable.append($(`\n\t\t\t\t\t\n\t\t\t\t\t\t${attributeName}\n\t\t\t\t\t\t${text}\n\t\t\t\t\t\n\t\t\t\t`));\n\t\t\t}\n\t\t}\n\n\t\treturn elTable;\n\t}\n\n\tupdate(){\n\n\t}\n};","\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\nimport {Profile} from \"./../../utils/Profile.js\";\n\nexport class DistancePanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t
        \n\n\t\t\t\t\n\t\t\t\t
        \n\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\t\n\t\t\t\t
        \n\t\t\t
        \n\t\t`);\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t});\n\t\t\n\t\tthis.elMakeProfile = this.elContent.find(\"input[name=make_profile]\");\n\t\tthis.elMakeProfile.click( () => {\n\t\t\t//measurement.points;\n\t\t\tconst profile = new Profile();\n\n\t\t\tprofile.name = measurement.name;\n\t\t\tprofile.width = measurement.getTotalDistance() / 50;\n\n\t\t\tfor(const point of measurement.points){\n\t\t\t\tprofile.addMarker(point.position.clone());\n\t\t\t}\n\n\t\t\tthis.viewer.scene.addProfile(profile);\n\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\tlet positions = this.measurement.points.map(p => p.position);\n\t\tlet distances = [];\n\t\tfor (let i = 0; i < positions.length - 1; i++) {\n\t\t\tlet d = positions[i].distanceTo(positions[i + 1]);\n\t\t\tdistances.push(d.toFixed(3));\n\t\t}\n\n\t\tlet totalDistance = this.measurement.getTotalDistance().toFixed(3);\n\t\tlet elDistanceTable = this.elContent.find(`#distances_table`);\n\t\telDistanceTable.empty();\n\n\t\tfor (let i = 0; i < distances.length; i++) {\n\t\t\tlet label = (i === 0) ? 'Distances: ' : '';\n\t\t\tlet distance = distances[i];\n\t\t\tlet elDistance = $(`\n\t\t\t\t\n\t\t\t\t\t${label}\n\t\t\t\t\t${distance}\n\t\t\t\t`);\n\t\t\telDistanceTable.append(elDistance);\n\t\t}\n\n\t\tlet elTotal = $(`\n\t\t\t\n\t\t\t\tTotal: ${totalDistance}\n\t\t\t`);\n\t\telDistanceTable.append(elTotal);\n\t}\n};\n","\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\n\nexport class PointPanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t
        \n\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\t\t`);\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\tlet elAttributesContainer = this.elContent.find('.attributes_table_container');\n\t\telAttributesContainer.empty();\n\t\telAttributesContainer.append(this.createAttributesTable());\n\t}\n};","\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\n\nexport class AreaPanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\tArea: \n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t
        \n\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\t\t`);\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\tlet elArea = this.elContent.find(`#measurement_area`);\n\t\telArea.html(this.measurement.getArea().toFixed(3));\n\t}\n};","\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\n\nexport class AnglePanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\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\t\t\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
        \\u03b1\\u03b2\\u03b3
        \n\n\t\t\t\t\n\t\t\t\t
        \n\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\t\t`);\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\tlet angles = [];\n\t\tfor(let i = 0; i < this.measurement.points.length; i++){\n\t\t\tangles.push(this.measurement.getAngle(i) * (180.0 / Math.PI));\n\t\t}\n\t\tangles = angles.map(a => a.toFixed(1) + '\\u00B0');\n\n\t\tlet elAlpha = this.elContent.find(`#angle_cell_alpha`);\n\t\tlet elBetta = this.elContent.find(`#angle_cell_betta`);\n\t\tlet elGamma = this.elContent.find(`#angle_cell_gamma`);\n\n\t\telAlpha.html(angles[0]);\n\t\telBetta.html(angles[1]);\n\t\telGamma.html(angles[2]);\n\t}\n};","\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\n\nexport class CirclePanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t
        \n\n\t\t\t\t\n\t\t\t\t
        \n\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\t\t`);\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\tconst elInfos = this.elContent.find(`#infos_table`);\n\n\t\tif(this.measurement.points.length !== 3){\n\t\t\telInfos.empty();\n\t\t\t\n\t\t\treturn;\n\t\t}\n\n\t\tconst A = this.measurement.points[0].position;\n\t\tconst B = this.measurement.points[1].position;\n\t\tconst C = this.measurement.points[2].position;\n\n\t\tconst center = Potree.Utils.computeCircleCenter(A, B, C);\n\t\tconst radius = center.distanceTo(A);\n\t\tconst circumference = 2 * Math.PI * radius;\n\t\t\n\t\tconst format = (number) => {\n\t\t\treturn Potree.Utils.addCommas(number.toFixed(3));\n\t\t};\n\n\t\t\n\t\tconst txtCenter = `${format(center.x)} ${format(center.y)} ${format(center.z)}`;\n\t\tconst txtRadius = format(radius);\n\t\tconst txtCircumference = format(circumference);\n\n\t\tconst thStyle = `style=\"text-align: left\"`;\n\t\tconst tdStyle = `style=\"width: 100%; padding: 5px;\"`;\n\t\t\n\t\telInfos.html(`\n\t\t\t\n\t\t\t\tCenter: \n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t${txtCenter}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\tRadius: \n\t\t\t\t${txtRadius}\n\t\t\t\n\t\t\t\n\t\t\t\tCircumference: \n\t\t\t\t${txtCircumference}\n\t\t\t\n\t\t`);\n\t}\n};\n","\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\n\nexport class HeightPanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\tHeight:
        \n\n\t\t\t\t\n\t\t\t\t
        \n\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\t\t`);\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\t{\n\t\t\tlet points = this.measurement.points;\n\n\t\t\tlet sorted = points.slice().sort((a, b) => a.position.z - b.position.z);\n\t\t\tlet lowPoint = sorted[0].position.clone();\n\t\t\tlet highPoint = sorted[sorted.length - 1].position.clone();\n\t\t\tlet min = lowPoint.z;\n\t\t\tlet max = highPoint.z;\n\t\t\tlet height = max - min;\n\t\t\theight = height.toFixed(3);\n\n\t\t\tthis.elHeightLabel = this.elContent.find(`#height_label`);\n\t\t\tthis.elHeightLabel.html(`Height: ${height}`);\n\t\t}\n\t}\n};","\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\nimport {Utils} from \"../../utils.js\";\nimport {Volume, BoxVolume, SphereVolume} from \"../../utils/Volume.js\";\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\n\nexport class VolumePanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet copyIconPath = Potree.resourcePath + '/icons/copy.svg';\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\n\t\tlet lblLengthText = new Map([\n\t\t\t[BoxVolume, \"length\"],\n\t\t\t[SphereVolume, \"rx\"],\n\t\t]).get(measurement.constructor);\n\n\t\tlet lblWidthText = new Map([\n\t\t\t[BoxVolume, \"width\"],\n\t\t\t[SphereVolume, \"ry\"],\n\t\t]).get(measurement.constructor);\n\n\t\tlet lblHeightText = new Map([\n\t\t\t[BoxVolume, \"height\"],\n\t\t\t[SphereVolume, \"rz\"],\n\t\t]).get(measurement.constructor);\n\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\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\t\t\n\t\t\t\t\t\t\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
        \\u03b1\\u03b2\\u03b3
        \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
        \n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\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\t\t\n\t\t\t\t\t\t\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
        ${lblLengthText}${lblWidthText}${lblHeightText}
        \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
        \n\n\t\t\t\t
        \n\t\t\t\tVolume: \n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t
      • \n\t\t\t\t\t\n\t\t\t\t
      • \n\n\t\t\t\t
      • \n\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t
      • \n\n\n\t\t\t\t\n\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\t
        \n\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\t\t`);\n\n\t\t{ // download\n\t\t\tthis.elDownloadButton = this.elContent.find(\"input[name=download_volume]\");\n\n\t\t\tif(this.propertiesPanel.viewer.server){\n\t\t\t\tthis.elDownloadButton.click(() => this.download());\n\t\t\t} else {\n\t\t\t\tthis.elDownloadButton.hide();\n\t\t\t}\n\t\t}\n\n\t\tthis.elCopyRotation = this.elContent.find(\"img[name=copyRotation]\");\n\t\tthis.elCopyRotation.click( () => {\n\t\t\tlet rotation = this.measurement.rotation.toArray().slice(0, 3);\n\t\t\tlet msg = rotation.map(c => c.toFixed(3)).join(\", \");\n\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t`Copied value to clipboard:
        '${msg}'`,\n\t\t\t\t\t{duration: 3000});\n\t\t});\n\n\t\tthis.elCopyScale = this.elContent.find(\"img[name=copyScale]\");\n\t\tthis.elCopyScale.click( () => {\n\t\t\tlet scale = this.measurement.scale.toArray();\n\t\t\tlet msg = scale.map(c => c.toFixed(3)).join(\", \");\n\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t`Copied value to clipboard:
        '${msg}'`,\n\t\t\t\t\t{duration: 3000});\n\t\t});\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeVolume(measurement);\n\t\t});\n\n\t\tthis.elContent.find(\"#volume_reset_orientation\").click(() => {\n\t\t\tmeasurement.rotation.set(0, 0, 0);\n\t\t});\n\n\t\tthis.elContent.find(\"#volume_make_uniform\").click(() => {\n\t\t\tlet mean = (measurement.scale.x + measurement.scale.y + measurement.scale.z) / 3;\n\t\t\tmeasurement.scale.set(mean, mean, mean);\n\t\t});\n\n\t\tthis.elCheckClip = this.elContent.find('#volume_clip');\n\t\tthis.elCheckClip.click(event => {\n\t\t\tthis.measurement.clip = event.target.checked;\n\t\t});\n\n\t\tthis.elCheckShow = this.elContent.find('#volume_show');\n\t\tthis.elCheckShow.click(event => {\n\t\t\tthis.measurement.visible = event.target.checked;\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"position_changed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"orientation_changed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"scale_changed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"clip_changed\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tasync download(){\n\n\t\tlet clipBox = this.measurement;\n\n\t\tlet regions = [];\n\t\t//for(let clipBox of boxes){\n\t\t{\n\t\t\tlet toClip = clipBox.matrixWorld;\n\n\t\t\tlet px = new THREE.Vector3(+0.5, 0, 0).applyMatrix4(toClip);\n\t\t\tlet nx = new THREE.Vector3(-0.5, 0, 0).applyMatrix4(toClip);\n\t\t\tlet py = new THREE.Vector3(0, +0.5, 0).applyMatrix4(toClip);\n\t\t\tlet ny = new THREE.Vector3(0, -0.5, 0).applyMatrix4(toClip);\n\t\t\tlet pz = new THREE.Vector3(0, 0, +0.5).applyMatrix4(toClip);\n\t\t\tlet nz = new THREE.Vector3(0, 0, -0.5).applyMatrix4(toClip);\n\n\t\t\tlet pxN = new THREE.Vector3().subVectors(nx, px).normalize();\n\t\t\tlet nxN = pxN.clone().multiplyScalar(-1);\n\t\t\tlet pyN = new THREE.Vector3().subVectors(ny, py).normalize();\n\t\t\tlet nyN = pyN.clone().multiplyScalar(-1);\n\t\t\tlet pzN = new THREE.Vector3().subVectors(nz, pz).normalize();\n\t\t\tlet nzN = pzN.clone().multiplyScalar(-1);\n\n\t\t\tlet planes = [\n\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(pxN, px),\n\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(nxN, nx),\n\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(pyN, py),\n\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(nyN, ny),\n\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(pzN, pz),\n\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(nzN, nz),\n\t\t\t];\n\n\t\t\tlet planeQueryParts = [];\n\t\t\tfor(let plane of planes){\n\t\t\t\tlet part = [plane.normal.toArray(), plane.constant].join(\",\");\n\t\t\t\tpart = `[${part}]`;\n\t\t\t\tplaneQueryParts.push(part);\n\t\t\t}\n\t\t\tlet region = \"[\" + planeQueryParts.join(\",\") + \"]\";\n\t\t\tregions.push(region);\n\t\t}\n\n\t\tlet regionsArg = regions.join(\",\");\n\n\t\tlet pointcloudArgs = [];\n\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\t\t\tif(!pointcloud.visible){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet offset = pointcloud.pcoGeometry.offset.clone();\n\t\t\tlet negateOffset = new THREE.Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray());\n\t\t\tlet matrixWorld = pointcloud.matrixWorld;\n\n\t\t\tlet transform = new THREE.Matrix4().multiplyMatrices(matrixWorld, negateOffset);\n\n\t\t\tlet path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`;\n\n\t\t\tlet arg = {\n\t\t\t\tpath: path,\n\t\t\t\ttransform: transform.elements,\n\t\t\t};\n\t\t\tlet argString = JSON.stringify(arg);\n\n\t\t\tpointcloudArgs.push(argString);\n\t\t}\n\t\tlet pointcloudsArg = pointcloudArgs.join(\",\");\n\n\t\tlet elMessage = this.elContent.find(\"div[name=download_message]\");\n\n\t\tlet error = (message) => {\n\t\t\telMessage.html(`
        ERROR: ${message}
        `);\n\t\t};\n\n\t\tlet info = (message) => {\n\t\t\telMessage.html(`${message}`);\n\t\t};\n\n\t\tlet handle = null;\n\t\t{ // START FILTER\n\t\t\tlet url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]®ions=[${regionsArg}]`;\n\t\t\t\n\t\t\t//console.log(url);\n\n\t\t\tinfo(\"estimating results ...\");\n\n\t\t\tlet response = await fetch(url);\n\t\t\tlet jsResponse = await response.json();\n\t\t\t//console.log(jsResponse);\n\n\t\t\tif(!jsResponse.handle){\n\t\t\t\terror(jsResponse.message);\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\thandle = jsResponse.handle;\n\t\t\t}\n\t\t}\n\n\t\t{ // WAIT, CHECK PROGRESS, HANDLE FINISH\n\t\t\tlet url = `${viewer.server}/check_regions_filter?handle=${handle}`;\n\n\t\t\tlet sleep = (function(duration){\n\t\t\t\treturn new Promise( (res, rej) => {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tres();\n\t\t\t\t\t}, duration);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tlet handleFiltering = (jsResponse) => {\n\t\t\t\tlet {progress, estimate} = jsResponse;\n\n\t\t\t\tlet progressFract = progress[\"processed points\"] / estimate.points;\n\t\t\t\tlet progressPercents = parseInt(progressFract * 100);\n\n\t\t\t\tinfo(`progress: ${progressPercents}%`);\n\t\t\t};\n\n\t\t\tlet handleFinish = (jsResponse) => {\n\t\t\t\tlet message = \"downloads ready:
        \";\n\t\t\t\tmessage += \"
          \";\n\n\t\t\t\tfor(let i = 0; i < jsResponse.pointclouds.length; i++){\n\t\t\t\t\tlet url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`;\n\n\t\t\t\t\tmessage += `
        • result_${i}.las
        • \\n`;\n\t\t\t\t}\n\n\t\t\t\tlet reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`;\n\t\t\t\tmessage += `
        • report.json
        • \\n`;\n\t\t\t\tmessage += \"
        \";\n\n\t\t\t\tinfo(message);\n\t\t\t};\n\n\t\t\tlet handleUnexpected = (jsResponse) => {\n\t\t\t\tlet message = `Unexpected Response.
        status: ${jsResponse.status}
        message: ${jsResponse.message}`;\n\t\t\t\tinfo(message);\n\t\t\t};\n\n\t\t\tlet handleError = (jsResponse) => {\n\t\t\t\tlet message = `ERROR: ${jsResponse.message}`;\n\t\t\t\terror(message);\n\n\t\t\t\tthrow new Error(message);\n\t\t\t};\n\n\t\t\tlet start = Date.now();\n\n\t\t\twhile(true){\n\t\t\t\tlet response = await fetch(url);\n\t\t\t\tlet jsResponse = await response.json();\n\n\t\t\t\tif(jsResponse.status === \"ERROR\"){\n\t\t\t\t\thandleError(jsResponse);\n\t\t\t\t}else if(jsResponse.status === \"FILTERING\"){\n\t\t\t\t\thandleFiltering(jsResponse);\n\t\t\t\t}else if(jsResponse.status === \"FINISHED\"){\n\t\t\t\t\thandleFinish(jsResponse);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}else{\n\t\t\t\t\thandleUnexpected(jsResponse);\n\t\t\t\t}\n\n\t\t\t\tlet durationS = (Date.now() - start) / 1000;\n\t\t\t\tlet sleepAmountMS = durationS < 10 ? 100 : 1000;\n\n\t\t\t\tawait sleep(sleepAmountMS);\n\t\t\t}\n\t\t}\n\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable([this.measurement.position]));\n\n\t\t{\n\t\t\tlet angles = this.measurement.rotation.toVector3();\n\t\t\tangles = angles.toArray();\n\t\t\t//angles = [angles.z, angles.x, angles.y];\n\t\t\tangles = angles.map(v => 180 * v / Math.PI);\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\n\t\t{\n\t\t\tlet dimensions = this.measurement.scale.toArray();\n\t\t\tdimensions = dimensions.map(v => Utils.addCommas(v.toFixed(2)));\n\n\t\t\tlet elLength = this.elContent.find(`#cell_length`);\n\t\t\tlet elWidth = this.elContent.find(`#cell_width`);\n\t\t\tlet elHeight = this.elContent.find(`#cell_height`);\n\n\t\t\telLength.html(dimensions[0]);\n\t\t\telWidth.html(dimensions[1]);\n\t\t\telHeight.html(dimensions[2]);\n\t\t}\n\n\t\t{\n\t\t\tlet elVolume = this.elContent.find(`#measurement_volume`);\n\t\t\tlet volume = this.measurement.getVolume();\n\t\t\telVolume.html(Utils.addCommas(volume.toFixed(2)));\n\t\t}\n\n\t\tthis.elCheckClip.prop(\"checked\", this.measurement.clip);\n\t\tthis.elCheckShow.prop(\"checked\", this.measurement.visible);\n\n\t}\n};","\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\nimport {MeasurePanel} from \"./MeasurePanel.js\";\n\nexport class ProfilePanel extends MeasurePanel{\n\tconstructor(viewer, measurement, propertiesPanel){\n\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t\n\t\t\t\t\tWidth: \n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t
        \n\n\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\t
        \n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t
        \n\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\t\t`);\n\n\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\tthis.elRemove.click( () => {\n\t\t\tthis.viewer.scene.removeProfile(measurement);\n\t\t});\n\n\t\t{ // download\n\t\t\tthis.elDownloadButton = this.elContent.find(`input[name=download_profile]`);\n\n\t\t\tif(this.propertiesPanel.viewer.server){\n\t\t\t\tthis.elDownloadButton.click(() => this.download());\n\t\t\t} else {\n\t\t\t\tthis.elDownloadButton.hide();\n\t\t\t}\n\t\t}\n\n\t\t{ // width spinner\n\t\t\tlet elWidthSlider = this.elContent.find(`#sldProfileWidth`);\n\n\t\t\telWidthSlider.spinner({\n\t\t\t\tmin: 0, max: 10 * 1000 * 1000, 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 = elWidthSlider.spinner('value');\n\t\t\t\t\tmeasurement.setWidth(value);\n\t\t\t\t},\n\t\t\t\tchange: (event, ui) => {\n\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\tmeasurement.setWidth(value);\n\t\t\t\t},\n\t\t\t\tstop: (event, ui) => {\n\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\tmeasurement.setWidth(value);\n\t\t\t\t},\n\t\t\t\tincremental: (count) => {\n\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\tlet step = elWidthSlider.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\telWidthSlider.spinner('value', measurement.getWidth());\n\t\t\telWidthSlider.spinner('widget').css('width', '100%');\n\n\t\t\tlet widthListener = (event) => {\n\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\tif (value !== measurement.getWidth()) {\n\t\t\t\t\telWidthSlider.spinner('value', measurement.getWidth());\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"width_changed\", widthListener);\n\t\t}\n\n\t\tlet elShow2DProfile = this.elContent.find(`#show_2d_profile`);\n\t\telShow2DProfile.click(() => {\n\t\t\tthis.propertiesPanel.viewer.profileWindow.show();\n\t\t\tthis.propertiesPanel.viewer.profileWindowController.setProfile(measurement);\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\telCoordiantesContainer.empty();\n\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points));\n\t}\n\n\tasync download(){\n\n\t\tlet profile = this.measurement;\n\n\t\tlet regions = [];\n\t\t{\n\t\t\tlet segments = profile.getSegments();\n\t\t\tlet width = profile.width;\n\t\t\t\n\t\t\tfor(let segment of segments){\n\t\t\t\tlet start = segment.start.clone().multiply(new THREE.Vector3(1, 1, 0));\n\t\t\t\tlet end = segment.end.clone().multiply(new THREE.Vector3(1, 1, 0));\n\t\t\t\tlet center = new THREE.Vector3().addVectors(start, end).multiplyScalar(0.5);\n\t\t\t\t\n\t\t\t\tlet startEndDir = new THREE.Vector3().subVectors(end, start).normalize();\n\t\t\t\tlet endStartDir = new THREE.Vector3().subVectors(start, end).normalize();\n\t\t\t\tlet upDir = new THREE.Vector3(0, 0, 1);\n\t\t\t\tlet rightDir = new THREE.Vector3().crossVectors(startEndDir, upDir);\n\t\t\t\tlet leftDir = new THREE.Vector3().crossVectors(endStartDir, upDir);\n\t\t\t\t\n\t\t\t\tconsole.log(leftDir);\n\t\t\t\t\n\t\t\t\tlet right = rightDir.clone().multiplyScalar(width * 0.5).add(center);\n\t\t\t\tlet left = leftDir.clone().multiplyScalar(width * 0.5).add(center);\n\t\t\t\t\n\t\t\t\tlet planes = [\n\t\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(startEndDir, start),\n\t\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(endStartDir, end),\n\t\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(leftDir, right),\n\t\t\t\t\tnew THREE.Plane().setFromNormalAndCoplanarPoint(rightDir, left),\n\t\t\t\t];\n\t\t\t\t\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\t\t}\n\n\t\tlet regionsArg = regions.join(\",\");\n\n\t\tlet pointcloudArgs = [];\n\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\t\t\tif(!pointcloud.visible){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet offset = pointcloud.pcoGeometry.offset.clone();\n\t\t\tlet negateOffset = new THREE.Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray());\n\t\t\tlet matrixWorld = pointcloud.matrixWorld;\n\n\t\t\tlet transform = new THREE.Matrix4().multiplyMatrices(matrixWorld, negateOffset);\n\n\t\t\tlet path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`;\n\n\t\t\tlet arg = {\n\t\t\t\tpath: path,\n\t\t\t\ttransform: transform.elements,\n\t\t\t};\n\t\t\tlet argString = JSON.stringify(arg);\n\n\t\t\tpointcloudArgs.push(argString);\n\t\t}\n\t\tlet pointcloudsArg = pointcloudArgs.join(\",\");\n\n\t\tlet elMessage = this.elContent.find(\"div[name=download_message]\");\n\n\t\tlet error = (message) => {\n\t\t\telMessage.html(`
        ERROR: ${message}
        `);\n\t\t};\n\n\t\tlet info = (message) => {\n\t\t\telMessage.html(`${message}`);\n\t\t};\n\n\t\tlet handle = null;\n\t\t{ // START FILTER\n\t\t\tlet url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]®ions=[${regionsArg}]`;\n\t\t\t\n\t\t\t//console.log(url);\n\n\t\t\tinfo(\"estimating results ...\");\n\n\t\t\tlet response = await fetch(url);\n\t\t\tlet jsResponse = await response.json();\n\t\t\t//console.log(jsResponse);\n\n\t\t\tif(!jsResponse.handle){\n\t\t\t\terror(jsResponse.message);\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\thandle = jsResponse.handle;\n\t\t\t}\n\t\t}\n\n\t\t{ // WAIT, CHECK PROGRESS, HANDLE FINISH\n\t\t\tlet url = `${viewer.server}/check_regions_filter?handle=${handle}`;\n\n\t\t\tlet sleep = (function(duration){\n\t\t\t\treturn new Promise( (res, rej) => {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tres();\n\t\t\t\t\t}, duration);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tlet handleFiltering = (jsResponse) => {\n\t\t\t\tlet {progress, estimate} = jsResponse;\n\n\t\t\t\tlet progressFract = progress[\"processed points\"] / estimate.points;\n\t\t\t\tlet progressPercents = parseInt(progressFract * 100);\n\n\t\t\t\tinfo(`progress: ${progressPercents}%`);\n\t\t\t};\n\n\t\t\tlet handleFinish = (jsResponse) => {\n\t\t\t\tlet message = \"downloads ready:
        \";\n\t\t\t\tmessage += \"
          \";\n\n\t\t\t\tfor(let i = 0; i < jsResponse.pointclouds.length; i++){\n\t\t\t\t\tlet url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`;\n\n\t\t\t\t\tmessage += `
        • result_${i}.las
        • \\n`;\n\t\t\t\t}\n\n\t\t\t\tlet reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`;\n\t\t\t\tmessage += `
        • report.json
        • \\n`;\n\t\t\t\tmessage += \"
        \";\n\n\t\t\t\tinfo(message);\n\t\t\t};\n\n\t\t\tlet handleUnexpected = (jsResponse) => {\n\t\t\t\tlet message = `Unexpected Response.
        status: ${jsResponse.status}
        message: ${jsResponse.message}`;\n\t\t\t\tinfo(message);\n\t\t\t};\n\n\t\t\tlet handleError = (jsResponse) => {\n\t\t\t\tlet message = `ERROR: ${jsResponse.message}`;\n\t\t\t\terror(message);\n\n\t\t\t\tthrow new Error(message);\n\t\t\t};\n\n\t\t\tlet start = Date.now();\n\n\t\t\twhile(true){\n\t\t\t\tlet response = await fetch(url);\n\t\t\t\tlet jsResponse = await response.json();\n\n\t\t\t\tif(jsResponse.status === \"ERROR\"){\n\t\t\t\t\thandleError(jsResponse);\n\t\t\t\t}else if(jsResponse.status === \"FILTERING\"){\n\t\t\t\t\thandleFiltering(jsResponse);\n\t\t\t\t}else if(jsResponse.status === \"FINISHED\"){\n\t\t\t\t\thandleFinish(jsResponse);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}else{\n\t\t\t\t\thandleUnexpected(jsResponse);\n\t\t\t\t}\n\n\t\t\t\tlet durationS = (Date.now() - start) / 1000;\n\t\t\t\tlet sleepAmountMS = durationS < 10 ? 100 : 1000;\n\n\t\t\t\tawait sleep(sleepAmountMS);\n\t\t\t}\n\t\t}\n\n\t}\n};","\nimport {Utils} from \"../../utils.js\";\n\nexport class CameraPanel{\n\tconstructor(viewer, propertiesPanel){\n\t\tthis.viewer = viewer;\n\t\tthis.propertiesPanel = propertiesPanel;\n\n\t\tthis._update = () => { this.update(); };\n\n\t\tlet copyIconPath = Potree.resourcePath + '/icons/copy.svg';\n\t\tthis.elContent = $(`\n\t\t
        \n\t\t\t\n\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\t\n\t\t\t\t\t\n\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\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\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
        position
        \n\t\t\t\t\t\t\n\t\t\t\t\t
        target
        \n\t\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t
        \n\t\t`);\n\n\t\tthis.elCopyPosition = this.elContent.find(\"img[name=copyPosition]\");\n\t\tthis.elCopyPosition.click( () => {\n\t\t\tlet pos = this.viewer.scene.getActiveCamera().position.toArray();\n\t\t\tlet msg = pos.map(c => c.toFixed(3)).join(\", \");\n\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t`Copied value to clipboard:
        '${msg}'`,\n\t\t\t\t\t{duration: 3000});\n\t\t});\n\n\t\tthis.elCopyTarget = this.elContent.find(\"img[name=copyTarget]\");\n\t\tthis.elCopyTarget.click( () => {\n\t\t\tlet pos = this.viewer.scene.view.getPivot().toArray();\n\t\t\tlet msg = pos.map(c => c.toFixed(3)).join(\", \");\n\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t`Copied value to clipboard:
        '${msg}'`,\n\t\t\t\t\t{duration: 3000});\n\t\t});\n\n\t\tthis.propertiesPanel.addVolatileListener(viewer, \"camera_changed\", this._update);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\t//console.log(\"updating camera panel\");\n\n\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\tlet view = this.viewer.scene.view;\n\n\t\tlet pos = camera.position.toArray().map(c => Utils.addCommas(c.toFixed(3)));\n\t\tthis.elContent.find(\"#camera_position_x\").html(pos[0]);\n\t\tthis.elContent.find(\"#camera_position_y\").html(pos[1]);\n\t\tthis.elContent.find(\"#camera_position_z\").html(pos[2]);\n\n\t\tlet target = view.getPivot().toArray().map(c => Utils.addCommas(c.toFixed(3)));\n\t\tthis.elContent.find(\"#camera_target_x\").html(target[0]);\n\t\tthis.elContent.find(\"#camera_target_y\").html(target[1]);\n\t\tthis.elContent.find(\"#camera_target_z\").html(target[2]);\n\t}\n};","\nimport {Utils} from \"../../utils.js\";\n\nexport class AnnotationPanel{\n\tconstructor(viewer, propertiesPanel, annotation){\n\t\tthis.viewer = viewer;\n\t\tthis.propertiesPanel = propertiesPanel;\n\t\tthis.annotation = annotation;\n\n\t\tthis._update = () => { this.update(); };\n\n\t\tlet copyIconPath = `${Potree.resourcePath}/icons/copy.svg`;\n\t\tthis.elContent = $(`\n\t\t
        \n\t\t\t\n\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\t\n\t\t\t\t\t\n\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
        position
        \n\t\t\t\t\t\t\n\t\t\t\t\t
        \n\n\t\t\t
        \n\n\t\t\t\t
        Title
        \n\t\t\t\t
        \n\t\t\t\t\tAnnotation Title\n\t\t\t\t
        \n\n\t\t\t\t
        Description
        \n\t\t\t\t
        \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
        \n\n\t\t\t
        \n\n\t\t
        \n\t\t`);\n\n\t\tthis.elCopyPosition = this.elContent.find(\"img[name=copyPosition]\");\n\t\tthis.elCopyPosition.click( () => {\n\t\t\tlet pos = this.annotation.position.toArray();\n\t\t\tlet msg = pos.map(c => c.toFixed(3)).join(\", \");\n\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t`Copied value to clipboard:
        '${msg}'`,\n\t\t\t\t\t{duration: 3000});\n\t\t});\n\n\t\tthis.elTitle = this.elContent.find(\"#annotation_title\").html(annotation.title);\n\t\tthis.elDescription = this.elContent.find(\"#annotation_description\").html(annotation.description);\n\n\t\tthis.elTitle[0].addEventListener(\"input\", () => {\n\t\t\tconst title = this.elTitle.html();\n\t\t\tannotation.title = title;\n\n\t\t}, false);\n\n\t\tthis.elDescription[0].addEventListener(\"input\", () => {\n\t\t\tconst description = this.elDescription.html();\n\t\t\tannotation.description = description;\n\t\t}, false);\n\n\t\tthis.update();\n\t}\n\n\tupdate(){\n\t\tconst {annotation, elContent, elTitle, elDescription} = this;\n\n\t\tlet pos = annotation.position.toArray().map(c => Utils.addCommas(c.toFixed(3)));\n\t\telContent.find(\"#annotation_position_x\").html(pos[0]);\n\t\telContent.find(\"#annotation_position_y\").html(pos[1]);\n\t\telContent.find(\"#annotation_position_z\").html(pos[2]);\n\n\t\telTitle.html(annotation.title);\n\t\telDescription.html(annotation.description);\n\n\n\t}\n};","\nimport {Utils} from \"../../utils.js\";\n\nexport class CameraAnimationPanel{\n\tconstructor(viewer, propertiesPanel, animation){\n\t\tthis.viewer = viewer;\n\t\tthis.propertiesPanel = propertiesPanel;\n\t\tthis.animation = animation;\n\n\t\tthis.elContent = $(`\n\t\t\t
        \n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\tDuration: \n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\tTime:
        \n\n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t
        \n\t\t`);\n\n\t\tconst elPlay = this.elContent.find(\"input[name=play]\");\n\t\telPlay.click( () => {\n\t\t\tanimation.play();\n\t\t});\n\n\t\tconst elSlider = this.elContent.find('#sldTime');\n\t\telSlider.slider({\n\t\t\tvalue: 0,\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t\tstep: 0.001,\n\t\t\tslide: (event, ui) => { \n\t\t\t\tanimation.set(ui.value);\n\t\t\t}\n\t\t});\n\n\t\tlet elDuration = this.elContent.find(`input[name=spnDuration]`);\n\t\telDuration.spinner({\n\t\t\tmin: 0, max: 300, step: 0.01,\n\t\t\tnumberFormat: 'n',\n\t\t\tstart: () => {},\n\t\t\tspin: (event, ui) => {\n\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\tanimation.setDuration(value);\n\t\t\t},\n\t\t\tchange: (event, ui) => {\n\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\tanimation.setDuration(value);\n\t\t\t},\n\t\t\tstop: (event, ui) => {\n\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\tanimation.setDuration(value);\n\t\t\t},\n\t\t\tincremental: (count) => {\n\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\tlet step = elDuration.spinner('option', 'step');\n\n\t\t\t\tlet delta = value * 0.05;\n\t\t\t\tlet increments = Math.max(1, parseInt(delta / step));\n\n\t\t\t\treturn increments;\n\t\t\t}\n\t\t});\n\t\telDuration.spinner('value', animation.getDuration());\n\t\telDuration.spinner('widget').css('width', '100%');\n\n\t\tconst elKeyframes = this.elContent.find(\"#animation_keyframes\");\n\n\t\tconst updateKeyframes = () => {\n\t\t\telKeyframes.empty();\n\n\t\t\t//let index = 0;\n\n\t\t\t// \n\t\t\t// \t\t\t\t\n\t\t\t// \t\t\t\n\n\t\t\tconst addNewKeyframeItem = (index) => {\n\t\t\t\tlet elNewKeyframe = $(`\n\t\t\t\t\t
        \n\t\t\t\t\t\t\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`);\n\n\t\t\t\tconst elAdd = elNewKeyframe.find(\"input[name=add]\");\n\t\t\t\telAdd.click( () => {\n\t\t\t\t\tanimation.createControlPoint(index);\n\t\t\t\t});\n\n\t\t\t\telKeyframes.append(elNewKeyframe);\n\t\t\t};\n\n\t\t\tconst addKeyframeItem = (index) => {\n\t\t\t\tlet elKeyframe = $(`\n\t\t\t\t\t
        \n\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\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tkeyframe\n\t\t\t\t\t\t\n\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\tconst elAssign = elKeyframe.find(\"img[name=assign]\");\n\t\t\t\tconst elMove = elKeyframe.find(\"img[name=move]\");\n\t\t\t\tconst elDelete = elKeyframe.find(\"img[name=delete]\");\n\n\t\t\t\telAssign.click( () => {\n\t\t\t\t\tconst cp = animation.controlPoints[index];\n\n\t\t\t\t\tcp.position.copy(viewer.scene.view.position);\n\t\t\t\t\tcp.target.copy(viewer.scene.view.getPivot());\n\t\t\t\t});\n\n\t\t\t\telMove.click( () => {\n\t\t\t\t\tconst cp = animation.controlPoints[index];\n\n\t\t\t\t\tviewer.scene.view.position.copy(cp.position);\n\t\t\t\t\tviewer.scene.view.lookAt(cp.target);\n\t\t\t\t});\n\n\t\t\t\telDelete.click( () => {\n\t\t\t\t\tconst cp = animation.controlPoints[index];\n\t\t\t\t\tanimation.removeControlPoint(cp);\n\t\t\t\t});\n\n\t\t\t\telKeyframes.append(elKeyframe);\n\t\t\t};\n\n\t\t\tlet index = 0;\n\n\t\t\taddNewKeyframeItem(index);\n\n\t\t\tfor(const cp of animation.controlPoints){\n\t\t\t\t\n\t\t\t\taddKeyframeItem(index);\n\t\t\t\tindex++;\n\t\t\t\taddNewKeyframeItem(index);\n\n\t\t\t}\n\t\t};\n\n\t\tupdateKeyframes();\n\n\t\tanimation.addEventListener(\"controlpoint_added\", updateKeyframes);\n\t\tanimation.addEventListener(\"controlpoint_removed\", updateKeyframes);\n\n\n\n\n\t\t// this._update = () => { this.update(); };\n\n\t\t// this.update();\n\t}\n\n\tupdate(){\n\t\t\n\t}\n};","\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\nimport {Utils} from \"../../utils.js\";\nimport {PointCloudTree} from \"../../PointCloudTree.js\";\nimport {Annotation} from \"../../Annotation.js\";\nimport {Measure} from \"../../utils/Measure.js\";\nimport {Profile} from \"../../utils/Profile.js\";\nimport {Volume, BoxVolume, SphereVolume} from \"../../utils/Volume.js\";\nimport {CameraAnimation} from \"../../modules/CameraAnimation/CameraAnimation.js\";\nimport {PointSizeType, PointShape, ElevationGradientRepeat} from \"../../defines.js\";\nimport {Gradients} from \"../../materials/Gradients.js\";\n\nimport {MeasurePanel} from \"./MeasurePanel.js\";\nimport {DistancePanel} from \"./DistancePanel.js\";\nimport {PointPanel} from \"./PointPanel.js\";\nimport {AreaPanel} from \"./AreaPanel.js\";\nimport {AnglePanel} from \"./AnglePanel.js\";\nimport {CirclePanel} from \"./CirclePanel.js\";\nimport {HeightPanel} from \"./HeightPanel.js\";\nimport {VolumePanel} from \"./VolumePanel.js\";\nimport {ProfilePanel} from \"./ProfilePanel.js\";\nimport {CameraPanel} from \"./CameraPanel.js\";\nimport {AnnotationPanel} from \"./AnnotationPanel.js\";\nimport { CameraAnimationPanel } from \"./CameraAnimationPanel.js\";\n\nexport class PropertiesPanel{\n\n\tconstructor(container, viewer){\n\t\tthis.container = container;\n\t\tthis.viewer = viewer;\n\t\tthis.object = null;\n\t\tthis.cleanupTasks = [];\n\t\tthis.scene = null;\n\t}\n\n\tsetScene(scene){\n\t\tthis.scene = scene;\n\t}\n\n\tset(object){\n\t\tif(this.object === object){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.object = object;\n\t\t\n\t\tfor(let task of this.cleanupTasks){\n\t\t\ttask();\n\t\t}\n\t\tthis.cleanupTasks = [];\n\t\tthis.container.empty();\n\n\t\tif(object instanceof PointCloudTree){\n\t\t\tthis.setPointCloud(object);\n\t\t}else if(object instanceof Measure || object instanceof Profile || object instanceof Volume){\n\t\t\tthis.setMeasurement(object);\n\t\t}else if(object instanceof THREE.Camera){\n\t\t\tthis.setCamera(object);\n\t\t}else if(object instanceof Annotation){\n\t\t\tthis.setAnnotation(object);\n\t\t}else if(object instanceof CameraAnimation){\n\t\t\tthis.setCameraAnimation(object);\n\t\t}\n\t\t\n\t}\n\n\t//\n\t// Used for events that should be removed when the property object changes.\n\t// This is for listening to materials, scene, point clouds, etc.\n\t// not required for DOM listeners, since they are automatically cleared by removing the DOM subtree.\n\t//\n\taddVolatileListener(target, type, callback){\n\t\ttarget.addEventListener(type, callback);\n\t\tthis.cleanupTasks.push(() => {\n\t\t\ttarget.removeEventListener(type, callback);\n\t\t});\n\t}\n\n\tsetPointCloud(pointcloud){\n\n\t\tlet material = pointcloud.material;\n\n\t\tlet panel = $(`\n\t\t\t
        \n\t\t\t\t
          \n\n\t\t\t\t
        • \n\t\t\t\t
          \n\t\t\t\t
        • \n\t\t\t\t
        • \n\t\t\t\t
          \n\t\t\t\t
        • \n\n\t\t\t\t\n\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\t\n\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\t
        • \n\t\t\t\t\n\t\t\t\t
        • \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t
        • :
        • \n\n\t\t\t\t
          \n\t\t\t\t\tAttribute\n\t\t\t\t
          \n\n\t\t\t\t
        • \n\t\t\t\t\t\n\t\t\t\t
        • \n\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tAttribute Weights\n\t\t\t\t\t
          \n\n\t\t\t\t\t
        • RGB:
          \t
        • \n\t\t\t\t\t
        • Intensity:
          \t
        • \n\t\t\t\t\t
        • Elevation:
          \t
        • \n\t\t\t\t\t
        • Classification:
          \t
        • \n\t\t\t\t\t
        • Return Number:
          \t
        • \n\t\t\t\t\t
        • Source ID:
          \t
        • \n\t\t\t\t
          \n\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tRGB\n\t\t\t\t\t
          \n\n\t\t\t\t\t
        • Gamma:
          \t
        • \n\t\t\t\t\t
        • Brightness:
          \t
        • \n\t\t\t\t\t
        • Contrast:
          \t
        • \n\t\t\t\t
          \n\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tExtra Attribute\n\t\t\t\t\t
          \n\n\t\t\t\t\t
        • :
        • \n\n\t\t\t\t\t
        • Gamma:
        • \n\t\t\t\t\t
        • Brightness:
        • \n\t\t\t\t\t
        • Contrast:
        • \n\t\t\t\t
          \n\t\t\t\t\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tMATCAP\n\t\t\t\t\t
          \n\n\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
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tColor\n\t\t\t\t\t
          \n\n\t\t\t\t\t\n\t\t\t\t
          \n\n\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tElevation\n\t\t\t\t\t
          \n\n\t\t\t\t\t
        • :
          \t
        • \n\n\t\t\t\t\t
        • \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\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\n\t\t\t\t\t
        • \n\t\t\t\t\t\tGradient Scheme:\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
          \n\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tTransition\n\t\t\t\t\t
          \n\n\t\t\t\t\t
        • transition:
          \t
        • \n\t\t\t\t
          \n\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tIntensity\n\t\t\t\t\t
          \n\n\t\t\t\t\t
        • Range:
          \t
        • \n\t\t\t\t\t
        • Gamma:
          \t
        • \n\t\t\t\t\t
        • Brightness:
          \t
        • \n\t\t\t\t\t
        • Contrast:
          \t
        • \n\t\t\t\t
          \n\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tGPS Time\n\t\t\t\t\t
          \n\n\t\t\t\t
          \n\t\t\t\t\n\t\t\t\t
          \n\t\t\t\t\t
          \n\t\t\t\t\t\tIndices\n\t\t\t\t\t
          \n\t\t\t\t
          \n\n\n\t\t\t\t
        \n\t\t\t
        \n\t\t`);\n\n\t\tpanel.i18n();\n\t\tthis.container.append(panel);\n\n\t\t{ // POINT SIZE\n\t\t\tlet sldPointSize = panel.find(`#sldPointSize`);\n\t\t\tlet lblPointSize = panel.find(`#lblPointSize`);\n\n\t\t\tsldPointSize.slider({\n\t\t\t\tvalue: material.size,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 3,\n\t\t\t\tstep: 0.01,\n\t\t\t\tslide: function (event, ui) { material.size = ui.value; }\n\t\t\t});\n\n\t\t\tlet update = (e) => {\n\t\t\t\tlblPointSize.html(material.size.toFixed(2));\n\t\t\t\tsldPointSize.slider({value: material.size});\n\t\t\t};\n\t\t\tthis.addVolatileListener(material, \"point_size_changed\", update);\n\t\t\t\n\t\t\tupdate();\n\t\t}\n\n\t\t{ // MINIMUM POINT SIZE\n\t\t\tlet sldMinPointSize = panel.find(`#sldMinPointSize`);\n\t\t\tlet lblMinPointSize = panel.find(`#lblMinPointSize`);\n\n\t\t\tsldMinPointSize.slider({\n\t\t\t\tvalue: material.size,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 3,\n\t\t\t\tstep: 0.01,\n\t\t\t\tslide: function (event, ui) { material.minSize = ui.value; }\n\t\t\t});\n\n\t\t\tlet update = (e) => {\n\t\t\t\tlblMinPointSize.html(material.minSize.toFixed(2));\n\t\t\t\tsldMinPointSize.slider({value: material.minSize});\n\t\t\t};\n\t\t\tthis.addVolatileListener(material, \"point_size_changed\", update);\n\t\t\t\n\t\t\tupdate();\n\t\t}\n\n\t\t{ // POINT SIZING\n\t\t\tlet strSizeType = Object.keys(PointSizeType)[material.pointSizeType];\n\n\t\t\tlet opt = panel.find(`#optPointSizing`);\n\t\t\topt.selectmenu();\n\t\t\topt.val(strSizeType).selectmenu('refresh');\n\n\t\t\topt.selectmenu({\n\t\t\t\tchange: (event, ui) => {\n\t\t\t\t\tmaterial.pointSizeType = PointSizeType[ui.item.value];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t{ // SHAPE\n\t\t\tlet opt = panel.find(`#optShape`);\n\n\t\t\topt.selectmenu({\n\t\t\t\tchange: (event, ui) => {\n\t\t\t\t\tlet value = ui.item.value;\n\n\t\t\t\t\tmaterial.shape = PointShape[value];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet update = () => {\n\t\t\t\tlet typename = Object.keys(PointShape)[material.shape];\n\n\t\t\t\topt.selectmenu().val(typename).selectmenu('refresh');\n\t\t\t};\n\t\t\tthis.addVolatileListener(material, \"point_shape_changed\", update);\n\n\t\t\tupdate();\n\t\t}\n\n\t\t{ // BACKFACE CULLING\n\t\t\t\n\t\t\tlet opt = panel.find(`#set_backface_culling`);\n\t\t\topt.click(() => {\n\t\t\t\tmaterial.backfaceCulling = opt.prop(\"checked\");\n\t\t\t});\n\t\t\tlet update = () => {\n\t\t\t\tlet value = material.backfaceCulling;\n\t\t\t\topt.prop(\"checked\", value);\n\t\t\t};\n\t\t\tthis.addVolatileListener(material, \"backface_changed\", update);\n\t\t\tupdate();\n\n\t\t\tlet blockBackface = $('#materials_backface_container');\n\t\t\tblockBackface.css('display', 'none');\n\n\t\t\tconst pointAttributes = pointcloud.pcoGeometry.pointAttributes;\n\t\t\tconst hasNormals = pointAttributes.hasNormals ? pointAttributes.hasNormals() : false;\n\t\t\tif(hasNormals) {\n\t\t\t\tblockBackface.css('display', 'block');\n\t\t\t}\n\t\t\t/*\n\t\t\topt.checkboxradio({\n\t\t\t\tclicked: (event, ui) => {\n\t\t\t\t\t// let value = ui.item.value;\n\t\t\t\t\tlet value = ui.item.checked;\n\t\t\t\t\tconsole.log(value);\n\t\t\t\t\tmaterial.backfaceCulling = value; // $('#set_freeze').prop(\"checked\");\n\t\t\t\t}\n\t\t\t});\n\t\t\t*/\n\t\t}\n\n\t\t{ // OPACITY\n\t\t\tlet sldOpacity = panel.find(`#sldOpacity`);\n\t\t\tlet lblOpacity = panel.find(`#lblOpacity`);\n\n\t\t\tsldOpacity.slider({\n\t\t\t\tvalue: material.opacity,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tstep: 0.001,\n\t\t\t\tslide: function (event, ui) { \n\t\t\t\t\tmaterial.opacity = ui.value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet update = (e) => {\n\t\t\t\tlblOpacity.html(material.opacity.toFixed(2));\n\t\t\t\tsldOpacity.slider({value: material.opacity});\n\t\t\t};\n\t\t\tthis.addVolatileListener(material, \"opacity_changed\", update);\n\n\t\t\tupdate();\n\t\t}\n\n\t\t{\n\n\t\t\tconst attributes = pointcloud.pcoGeometry.pointAttributes.attributes;\n\n\t\t\tlet options = [];\n\n\t\t\toptions.push(...attributes.map(a => a.name));\n\n\t\t\tconst intensityIndex = options.indexOf(\"intensity\");\n\t\t\tif(intensityIndex >= 0){\n\t\t\t\toptions.splice(intensityIndex + 1, 0, \"intensity gradient\");\n\t\t\t}\n\n\t\t\toptions.push(\n\t\t\t\t\"elevation\",\n\t\t\t\t\"color\",\n\t\t\t\t'matcap',\n\t\t\t\t'indices',\n\t\t\t\t'level of detail',\n\t\t\t\t'composite'\n\t\t\t);\n\n\t\t\tconst blacklist = [\n\t\t\t\t\"POSITION_CARTESIAN\",\n\t\t\t\t\"position\",\n\t\t\t];\n\n\t\t\toptions = options.filter(o => !blacklist.includes(o));\n\n\t\t\tlet attributeSelection = panel.find('#optMaterial');\n\t\t\tfor(let option of options){\n\t\t\t\tlet elOption = $(``);\n\t\t\t\tattributeSelection.append(elOption);\n\t\t\t}\n\n\t\t\tlet updateMaterialPanel = (event, ui) => {\n\t\t\t\tlet selectedValue = attributeSelection.selectmenu().val();\n\t\t\t\tmaterial.activeAttributeName = selectedValue;\n\n\t\t\t\tlet attribute = pointcloud.getAttribute(selectedValue);\n\n\t\t\t\tif(selectedValue === \"intensity gradient\"){\n\t\t\t\t\tattribute = pointcloud.getAttribute(\"intensity\");\n\t\t\t\t}\n\n\t\t\t\tconst isIntensity = attribute ? [\"intensity\", \"intensity gradient\"].includes(attribute.name) : false;\n\n\t\t\t\tif(isIntensity){\n\t\t\t\t\tif(pointcloud.material.intensityRange[0] === Infinity){\n\t\t\t\t\t\tpointcloud.material.intensityRange = attribute.range;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst [min, max] = attribute.range;\n\n\t\t\t\t\tpanel.find('#sldIntensityRange').slider({\n\t\t\t\t\t\trange: true,\n\t\t\t\t\t\tmin: min, max: max, step: 0.01,\n\t\t\t\t\t\tvalues: [min, max],\n\t\t\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\t\t\tlet min = ui.values[0];\n\t\t\t\t\t\t\tlet max = ui.values[1];\n\t\t\t\t\t\t\tmaterial.intensityRange = [min, max];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if(attribute){\n\t\t\t\t\tconst [min, max] = attribute.range;\n\n\t\t\t\t\tlet selectedRange = material.getRange(attribute.name);\n\n\t\t\t\t\tif(!selectedRange){\n\t\t\t\t\t\tselectedRange = [...attribute.range];\n\t\t\t\t\t}\n\n\t\t\t\t\tlet minMaxAreNumbers = typeof min === \"number\" && typeof max === \"number\";\n\n\t\t\t\t\tif(minMaxAreNumbers){\n\t\t\t\t\t\tpanel.find('#sldExtraRange').slider({\n\t\t\t\t\t\t\trange: true,\n\t\t\t\t\t\t\tmin: min, \n\t\t\t\t\t\t\tmax: max, \n\t\t\t\t\t\t\tstep: 0.01,\n\t\t\t\t\t\t\tvalues: selectedRange,\n\t\t\t\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\t\t\t\tlet [a, b] = ui.values;\n\n\t\t\t\t\t\t\t\tmaterial.setRange(attribute.name, [a, b]);\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}\n\n\t\t\t\tlet blockWeights = $('#materials\\\\.composite_weight_container');\n\t\t\t\tlet blockElevation = $('#materials\\\\.elevation_container');\n\t\t\t\tlet blockRGB = $('#materials\\\\.rgb_container');\n\t\t\t\tlet blockExtra = $('#materials\\\\.extra_container');\n\t\t\t\tlet blockColor = $('#materials\\\\.color_container');\n\t\t\t\tlet blockIntensity = $('#materials\\\\.intensity_container');\n\t\t\t\tlet blockIndex = $('#materials\\\\.index_container');\n\t\t\t\tlet blockTransition = $('#materials\\\\.transition_container');\n\t\t\t\tlet blockGps = $('#materials\\\\.gpstime_container');\n\t\t\t\tlet blockMatcap = $('#materials\\\\.matcap_container');\n\n\t\t\t\tblockIndex.css('display', 'none');\n\t\t\t\tblockIntensity.css('display', 'none');\n\t\t\t\tblockElevation.css('display', 'none');\n\t\t\t\tblockRGB.css('display', 'none');\n\t\t\t\tblockExtra.css('display', 'none');\n\t\t\t\tblockColor.css('display', 'none');\n\t\t\t\tblockWeights.css('display', 'none');\n\t\t\t\tblockTransition.css('display', 'none');\n\t\t\t\tblockMatcap.css('display', 'none');\n\t\t\t\tblockGps.css('display', 'none');\n\n\t\t\t\tif (selectedValue === 'composite') {\n\t\t\t\t\tblockWeights.css('display', 'block');\n\t\t\t\t\tblockElevation.css('display', 'block');\n\t\t\t\t\tblockRGB.css('display', 'block');\n\t\t\t\t\tblockIntensity.css('display', 'block');\n\t\t\t\t} else if (selectedValue === 'elevation') {\n\t\t\t\t\tblockElevation.css('display', 'block');\n\t\t\t\t} else if (selectedValue === 'RGB and Elevation') {\n\t\t\t\t\tblockRGB.css('display', 'block');\n\t\t\t\t\tblockElevation.css('display', 'block');\n\t\t\t\t} else if (selectedValue === 'rgba') {\n\t\t\t\t\tblockRGB.css('display', 'block');\n\t\t\t\t} else if (selectedValue === 'color') {\n\t\t\t\t\tblockColor.css('display', 'block');\n\t\t\t\t} else if (selectedValue === 'intensity') {\n\t\t\t\t\tblockIntensity.css('display', 'block');\n\t\t\t\t} else if (selectedValue === 'intensity gradient') {\n\t\t\t\t\tblockIntensity.css('display', 'block');\n\t\t\t\t} else if (selectedValue === \"indices\" ){\n\t\t\t\t\tblockIndex.css('display', 'block');\n\t\t\t\t} else if (selectedValue === \"matcap\" ){\n\t\t\t\t\tblockMatcap.css('display', 'block');\n\t\t\t\t} else if (selectedValue === \"classification\" ){\n\t\t\t\t\t// add classification color selctor?\n\t\t\t\t} else if (selectedValue === \"gps-time\" ){\n\t\t\t\t\tblockGps.css('display', 'block');\n\t\t\t\t} else if(selectedValue === \"number of returns\"){\n\t\t\t\t\t\n\t\t\t\t} else if(selectedValue === \"return number\"){\n\t\t\t\t\t\n\t\t\t\t} else if([\"source id\", \"point source id\"].includes(selectedValue)){\n\t\t\t\t\t\n\t\t\t\t} else{\n\t\t\t\t\tblockExtra.css('display', 'block');\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tattributeSelection.selectmenu({change: updateMaterialPanel});\n\n\t\t\tlet update = () => {\n\t\t\t\tattributeSelection.val(material.activeAttributeName).selectmenu('refresh');\n\t\t\t};\n\t\t\tthis.addVolatileListener(material, \"point_color_type_changed\", update);\n\t\t\tthis.addVolatileListener(material, \"active_attribute_changed\", update);\n\n\t\t\tupdate();\n\t\t\tupdateMaterialPanel();\n\t\t}\n\n\t\t{\n\t\t\tconst schemes = Object.keys(Potree.Gradients).map(name => ({name: name, values: Gradients[name]}));\n\n\t\t\tlet elSchemeContainer = panel.find(\"#elevation_gradient_scheme_selection\");\n\n\t\t\tfor(let scheme of schemes){\n\t\t\t\tlet elScheme = $(`\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t`);\n\n\t\t\t\tconst svg = Potree.Utils.createSvgGradient(scheme.values);\n\t\t\t\tsvg.setAttributeNS(null, \"class\", `button-icon`);\n\n\t\t\t\telScheme.append($(svg));\n\n\t\t\t\telScheme.click( () => {\n\t\t\t\t\tmaterial.gradient = Gradients[scheme.name];\n\t\t\t\t});\n\n\t\t\t\telSchemeContainer.append(elScheme);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tlet matcaps = [\n\t\t\t\t{name: \"Normals\", icon: `${Potree.resourcePath}/icons/matcap/check_normal+y.jpg`}, \n\t\t\t\t{name: \"Basic 1\", icon: `${Potree.resourcePath}/icons/matcap/basic_1.jpg`}, \n\t\t\t\t{name: \"Basic 2\", icon: `${Potree.resourcePath}/icons/matcap/basic_2.jpg`}, \n\t\t\t\t{name: \"Basic Dark\", icon: `${Potree.resourcePath}/icons/matcap/basic_dark.jpg`}, \n\t\t\t\t{name: \"Basic Side\", icon: `${Potree.resourcePath}/icons/matcap/basic_side.jpg`}, \n\t\t\t\t{name: \"Ceramic Dark\", icon: `${Potree.resourcePath}/icons/matcap/ceramic_dark.jpg`}, \n\t\t\t\t{name: \"Ceramic Lightbulb\", icon: `${Potree.resourcePath}/icons/matcap/ceramic_lightbulb.jpg`}, \n\t\t\t\t{name: \"Clay Brown\", icon: `${Potree.resourcePath}/icons/matcap/clay_brown.jpg`}, \n\t\t\t\t{name: \"Clay Muddy\", icon: `${Potree.resourcePath}/icons/matcap/clay_muddy.jpg`}, \n\t\t\t\t{name: \"Clay Studio\", icon: `${Potree.resourcePath}/icons/matcap/clay_studio.jpg`}, \n\t\t\t\t{name: \"Resin\", icon: `${Potree.resourcePath}/icons/matcap/resin.jpg`}, \n\t\t\t\t{name: \"Skin\", icon: `${Potree.resourcePath}/icons/matcap/skin.jpg`}, \n\t\t\t\t{name: \"Jade\", icon: `${Potree.resourcePath}/icons/matcap/jade.jpg`}, \n\t\t\t\t{name: \"Metal_ Anisotropic\", icon: `${Potree.resourcePath}/icons/matcap/metal_anisotropic.jpg`}, \n\t\t\t\t{name: \"Metal Carpaint\", icon: `${Potree.resourcePath}/icons/matcap/metal_carpaint.jpg`}, \n\t\t\t\t{name: \"Metal Lead\", icon: `${Potree.resourcePath}/icons/matcap/metal_lead.jpg`}, \n\t\t\t\t{name: \"Metal Shiny\", icon: `${Potree.resourcePath}/icons/matcap/metal_shiny.jpg`}, \n\t\t\t\t{name: \"Pearl\", icon: `${Potree.resourcePath}/icons/matcap/pearl.jpg`}, \n\t\t\t\t{name: \"Toon\", icon: `${Potree.resourcePath}/icons/matcap/toon.jpg`},\n\t\t\t\t{name: \"Check Rim Light\", icon: `${Potree.resourcePath}/icons/matcap/check_rim_light.jpg`}, \n\t\t\t\t{name: \"Check Rim Dark\", icon: `${Potree.resourcePath}/icons/matcap/check_rim_dark.jpg`}, \n\t\t\t\t{name: \"Contours 1\", icon: `${Potree.resourcePath}/icons/matcap/contours_1.jpg`}, \n\t\t\t\t{name: \"Contours 2\", icon: `${Potree.resourcePath}/icons/matcap/contours_2.jpg`}, \n\t\t\t\t{name: \"Contours 3\", icon: `${Potree.resourcePath}/icons/matcap/contours_3.jpg`}, \n\t\t\t\t{name: \"Reflection Check Horizontal\", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_horizontal.jpg`}, \n\t\t\t\t{name: \"Reflection Check Vertical\", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_vertical.jpg`}, \n\t\t\t];\n\n\t\t\tlet elMatcapContainer = panel.find(\"#matcap_scheme_selection\");\n\n\t\t\tfor(let matcap of matcaps){\n\t\t\t\tlet elMatcap = $(`\n\t\t\t\t\t\t\n\t\t\t\t`);\n\n\t\t\t\telMatcap.click( () => {\n\t\t\t\t\tmaterial.matcap = matcap.icon.substring(matcap.icon.lastIndexOf('/'));\n\t\t\t\t});\n\n\t\t\t\telMatcapContainer.append(elMatcap);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tpanel.find('#sldRGBGamma').slider({\n\t\t\t\tvalue: material.rgbGamma,\n\t\t\t\tmin: 0, max: 4, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.rgbGamma = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldRGBContrast').slider({\n\t\t\t\tvalue: material.rgbContrast,\n\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.rgbContrast = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldRGBBrightness').slider({\n\t\t\t\tvalue: material.rgbBrightness,\n\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.rgbBrightness = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldExtraGamma').slider({\n\t\t\t\tvalue: material.extraGamma,\n\t\t\t\tmin: 0, max: 4, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.extraGamma = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldExtraBrightness').slider({\n\t\t\t\tvalue: material.extraBrightness,\n\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.extraBrightness = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldExtraContrast').slider({\n\t\t\t\tvalue: material.extraContrast,\n\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.extraContrast = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldHeightRange').slider({\n\t\t\t\trange: true,\n\t\t\t\tmin: 0, max: 1000, step: 0.01,\n\t\t\t\tvalues: [0, 1000],\n\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\tmaterial.heightMin = ui.values[0];\n\t\t\t\t\tmaterial.heightMax = ui.values[1];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tpanel.find('#sldIntensityGamma').slider({\n\t\t\t\tvalue: material.intensityGamma,\n\t\t\t\tmin: 0, max: 4, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.intensityGamma = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldIntensityContrast').slider({\n\t\t\t\tvalue: material.intensityContrast,\n\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.intensityContrast = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldIntensityBrightness').slider({\n\t\t\t\tvalue: material.intensityBrightness,\n\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.intensityBrightness = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldWeightRGB').slider({\n\t\t\t\tvalue: material.weightRGB,\n\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.weightRGB = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldWeightIntensity').slider({\n\t\t\t\tvalue: material.weightIntensity,\n\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.weightIntensity = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldWeightElevation').slider({\n\t\t\t\tvalue: material.weightElevation,\n\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.weightElevation = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldWeightClassification').slider({\n\t\t\t\tvalue: material.weightClassification,\n\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.weightClassification = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldWeightReturnNumber').slider({\n\t\t\t\tvalue: material.weightReturnNumber,\n\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.weightReturnNumber = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find('#sldWeightSourceID').slider({\n\t\t\t\tvalue: material.weightSourceID,\n\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\tslide: (event, ui) => {material.weightSourceID = ui.value}\n\t\t\t});\n\n\t\t\tpanel.find(`#materials\\\\.color\\\\.picker`).spectrum({\n\t\t\t\tflat: true,\n\t\t\t\tshowInput: true,\n\t\t\t\tpreferredFormat: 'rgb',\n\t\t\t\tcancelText: '',\n\t\t\t\tchooseText: 'Apply',\n\t\t\t\tcolor: `#${material.color.getHexString()}`,\n\t\t\t\tmove: color => {\n\t\t\t\t\tlet cRGB = color.toRgb();\n\t\t\t\t\tlet tc = new THREE.Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255);\n\t\t\t\t\tmaterial.color = tc;\n\t\t\t\t},\n\t\t\t\tchange: color => {\n\t\t\t\t\tlet cRGB = color.toRgb();\n\t\t\t\t\tlet tc = new THREE.Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255);\n\t\t\t\t\tmaterial.color = tc;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.addVolatileListener(material, \"color_changed\", () => {\n\t\t\t\tpanel.find(`#materials\\\\.color\\\\.picker`)\n\t\t\t\t\t.spectrum('set', `#${material.color.getHexString()}`);\n\t\t\t});\n\n\t\t\tlet updateHeightRange = function () {\n\t\t\t\t\n\n\t\t\t\tlet aPosition = pointcloud.getAttribute(\"position\");\n\n\t\t\t\tlet bMin, bMax;\n\n\t\t\t\tif(aPosition){\n\t\t\t\t\t// for new format 2.0 and loader that contain precomputed min/max of attributes\n\t\t\t\t\tlet min = aPosition.range[0][2];\n\t\t\t\t\tlet max = aPosition.range[1][2];\n\t\t\t\t\tlet width = max - min;\n\n\t\t\t\t\tbMin = min - 0.2 * width;\n\t\t\t\t\tbMax = max + 0.2 * width;\n\t\t\t\t}else{\n\t\t\t\t\t// for format up until exlusive 2.0\n\t\t\t\t\tlet box = [pointcloud.pcoGeometry.tightBoundingBox, pointcloud.getBoundingBoxWorld()]\n\t\t\t\t\t\t.find(v => v !== undefined);\n\n\t\t\t\t\tpointcloud.updateMatrixWorld(true);\n\t\t\t\t\tbox = Utils.computeTransformedBoundingBox(box, pointcloud.matrixWorld);\n\n\t\t\t\t\tlet bWidth = box.max.z - box.min.z;\n\t\t\t\t\tbMin = box.min.z - 0.2 * bWidth;\n\t\t\t\t\tbMax = box.max.z + 0.2 * bWidth;\n\t\t\t\t}\n\n\t\t\t\tlet range = material.elevationRange;\n\n\t\t\t\tpanel.find('#lblHeightRange').html(`${range[0].toFixed(2)} to ${range[1].toFixed(2)}`);\n\t\t\t\tpanel.find('#sldHeightRange').slider({min: bMin, max: bMax, values: range});\n\t\t\t};\n\n\t\t\tlet updateExtraRange = function () {\n\n\t\t\t\tlet attributeName = material.activeAttributeName;\n\t\t\t\tlet attribute = pointcloud.getAttribute(attributeName);\n\n\t\t\t\tif(attribute == null){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet range = material.getRange(attributeName);\n\n\t\t\t\tif(range == null){\n\t\t\t\t\trange = attribute.range;\n\t\t\t\t}\n\n\t\t\t\t// currently only supporting scalar ranges.\n\t\t\t\t// rgba, normals, positions, etc have vector ranges, however\n\t\t\t\tlet isValidRange = (typeof range[0] === \"number\") && (typeof range[1] === \"number\");\n\t\t\t\tif(!isValidRange){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(range){\n\t\t\t\t\tlet msg = `${range[0].toFixed(2)} to ${range[1].toFixed(2)}`;\n\t\t\t\t\tpanel.find('#lblExtraRange').html(msg);\n\t\t\t\t}else{\n\t\t\t\t\tpanel.find(\"could not deduce range\");\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet updateIntensityRange = function () {\n\t\t\t\tlet range = material.intensityRange;\n\n\t\t\t\tpanel.find('#lblIntensityRange').html(`${parseInt(range[0])} to ${parseInt(range[1])}`);\n\t\t\t};\n\n\t\t\t{\n\t\t\t\tupdateHeightRange();\n\t\t\t\tpanel.find(`#sldHeightRange`).slider('option', 'min');\n\t\t\t\tpanel.find(`#sldHeightRange`).slider('option', 'max');\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet elGradientRepeat = panel.find(\"#gradient_repeat_option\");\n\t\t\t\telGradientRepeat.selectgroup({title: \"Gradient\"});\n\n\t\t\t\telGradientRepeat.find(\"input\").click( (e) => {\n\t\t\t\t\tthis.viewer.setElevationGradientRepeat(ElevationGradientRepeat[e.target.value]);\n\t\t\t\t});\n\n\t\t\t\tlet current = Object.keys(ElevationGradientRepeat)\n\t\t\t\t\t.filter(key => ElevationGradientRepeat[key] === this.viewer.elevationGradientRepeat);\n\t\t\t\telGradientRepeat.find(`input[value=${current}]`).trigger(\"click\");\n\t\t\t}\n\n\t\t\tlet onIntensityChange = () => {\n\t\t\t\tlet gamma = material.intensityGamma;\n\t\t\t\tlet contrast = material.intensityContrast;\n\t\t\t\tlet brightness = material.intensityBrightness;\n\n\t\t\t\tupdateIntensityRange();\n\n\t\t\t\tpanel.find('#lblIntensityGamma').html(gamma.toFixed(2));\n\t\t\t\tpanel.find('#lblIntensityContrast').html(contrast.toFixed(2));\n\t\t\t\tpanel.find('#lblIntensityBrightness').html(brightness.toFixed(2));\n\n\t\t\t\tpanel.find('#sldIntensityGamma').slider({value: gamma});\n\t\t\t\tpanel.find('#sldIntensityContrast').slider({value: contrast});\n\t\t\t\tpanel.find('#sldIntensityBrightness').slider({value: brightness});\n\t\t\t};\n\n\t\t\tlet onRGBChange = () => {\n\t\t\t\tlet gamma = material.rgbGamma;\n\t\t\t\tlet contrast = material.rgbContrast;\n\t\t\t\tlet brightness = material.rgbBrightness;\n\n\t\t\t\tpanel.find('#lblRGBGamma').html(gamma.toFixed(2));\n\t\t\t\tpanel.find('#lblRGBContrast').html(contrast.toFixed(2));\n\t\t\t\tpanel.find('#lblRGBBrightness').html(brightness.toFixed(2));\n\n\t\t\t\tpanel.find('#sldRGBGamma').slider({value: gamma});\n\t\t\t\tpanel.find('#sldRGBContrast').slider({value: contrast});\n\t\t\t\tpanel.find('#sldRGBBrightness').slider({value: brightness});\n\t\t\t};\n\n\t\t\tthis.addVolatileListener(material, \"material_property_changed\", updateExtraRange);\n\t\t\tthis.addVolatileListener(material, \"material_property_changed\", updateHeightRange);\n\t\t\tthis.addVolatileListener(material, \"material_property_changed\", onIntensityChange);\n\t\t\tthis.addVolatileListener(material, \"material_property_changed\", onRGBChange);\n\n\t\t\tupdateExtraRange();\n\t\t\tupdateHeightRange();\n\t\t\tonIntensityChange();\n\t\t\tonRGBChange();\n\t\t}\n\n\t}\n\n\t\n\n\tsetMeasurement(object){\n\n\t\tlet TYPE = {\n\t\t\tDISTANCE: {panel: DistancePanel},\n\t\t\tAREA: {panel: AreaPanel},\n\t\t\tPOINT: {panel: PointPanel},\n\t\t\tANGLE: {panel: AnglePanel},\n\t\t\tHEIGHT: {panel: HeightPanel},\n\t\t\tPROFILE: {panel: ProfilePanel},\n\t\t\tVOLUME: {panel: VolumePanel},\n\t\t\tCIRCLE: {panel: CirclePanel},\n\t\t\tOTHER: {panel: PointPanel},\n\t\t};\n\n\t\tlet getType = (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 TYPE.DISTANCE;\n\t\t\t\t} else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) {\n\t\t\t\t\treturn TYPE.AREA;\n\t\t\t\t} else if (measurement.maxMarkers === 1) {\n\t\t\t\t\treturn TYPE.POINT;\n\t\t\t\t} else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) {\n\t\t\t\t\treturn TYPE.ANGLE;\n\t\t\t\t} else if (measurement.showHeight) {\n\t\t\t\t\treturn TYPE.HEIGHT;\n\t\t\t\t} else if (measurement.showCircle) {\n\t\t\t\t\treturn TYPE.CIRCLE;\n\t\t\t\t} else {\n\t\t\t\t\treturn TYPE.OTHER;\n\t\t\t\t}\n\t\t\t} else if (measurement instanceof Profile) {\n\t\t\t\treturn TYPE.PROFILE;\n\t\t\t} else if (measurement instanceof Volume) {\n\t\t\t\treturn TYPE.VOLUME;\n\t\t\t}\n\t\t};\n\n\t\t//this.container.html(\"measurement\");\n\n\t\tlet type = getType(object);\n\t\tlet Panel = type.panel;\n\n\t\tlet panel = new Panel(this.viewer, object, this);\n\t\tthis.container.append(panel.elContent);\n\t}\n\n\tsetCamera(camera){\n\t\tlet panel = new CameraPanel(this.viewer, this);\n\t\tthis.container.append(panel.elContent);\n\t}\n\n\tsetAnnotation(annotation){\n\t\tlet panel = new AnnotationPanel(this.viewer, this, annotation);\n\t\tthis.container.append(panel.elContent);\n\t}\n\n\tsetCameraAnimation(animation){\n\t\tlet panel = new CameraAnimationPanel(this.viewer, this, animation)\n\t\tthis.container.append(panel.elContent);\n\t}\n\n}\n","\r\nfunction addCommas(nStr){\r\n\tnStr += '';\r\n\tlet x = nStr.split('.');\r\n\tlet x1 = x[0];\r\n\tlet x2 = x.length > 1 ? '.' + x[1] : '';\r\n\tlet rgx = /(\\d+)(\\d{3})/;\r\n\twhile (rgx.test(x1)) {\r\n\t\tx1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n\t}\r\n\treturn x1 + x2;\r\n};\r\n\r\nfunction format(value){\r\n\treturn addCommas(value.toFixed(3));\r\n};\r\n\r\nexport class HierarchicalSlider{\r\n\r\n\tconstructor(params = {}){\r\n\t\t\r\n\t\tthis.element = document.createElement(\"div\");\r\n\r\n\t\tthis.labels = [];\r\n\t\tthis.sliders = [];\r\n\t\tthis.range = params.range != null ? params.range : [0, 1];\r\n\t\tthis.slide = params.slide != null ? params.slide : null;\r\n\t\tthis.step = params.step != null ? params.step : 0.0001;\r\n\r\n\t\tlet levels = params.levels != null ? params.levels : 1;\r\n\r\n\t\tfor(let level = 0; level < levels; level++){\r\n\t\t\tthis.addLevel();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tsetRange(range){\r\n\t\tthis.range = [...range];\r\n\r\n\t\t{ // root slider\r\n\t\t\tlet slider = this.sliders[0];\r\n\r\n\t\t\t$(slider).slider({\r\n\t\t\t\tmin: range[0],\r\n\t\t\t\tmax: range[1],\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfor(let i = 1; i < this.sliders.length; i++){\r\n\t\t\tlet parentSlider = this.sliders[i - 1];\r\n\t\t\tlet slider = this.sliders[i];\r\n\r\n\t\t\tlet parentValues = $(parentSlider).slider(\"option\", \"values\");\r\n\t\t\tlet childRange = [...parentValues];\r\n\r\n\t\t\t$(slider).slider({\r\n\t\t\t\tmin: childRange[0],\r\n\t\t\t\tmax: childRange[1],\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tthis.updateLabels();\r\n\t}\r\n\r\n\tsetValues(values){\r\n\t\tfor(let slider of this.sliders){\r\n\t\t\t$(slider).slider({\r\n\t\t\t\tvalues: [...values],\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.updateLabels();\r\n\t}\r\n\r\n\taddLevel(){\r\n\t\tconst elLevel = document.createElement(\"li\");\r\n\t\tconst elRange = document.createTextNode(\"Range: \");\r\n\t\tconst label = document.createElement(\"span\");\r\n\t\tconst slider = document.createElement(\"div\");\r\n\r\n\t\tlet level = this.sliders.length;\r\n\t\tlet [min, max] = [0, 0];\r\n\r\n\t\tif(this.sliders.length === 0){\r\n\t\t\t[min, max] = this.range;\r\n\t\t}else{\r\n\t\t\tlet parentSlider = this.sliders[this.sliders.length - 1];\r\n\t\t\t[min, max] = $(parentSlider).slider(\"option\", \"values\");\r\n\t\t}\r\n\t\t\r\n\t\t$(slider).slider({\r\n\t\t\trange: true, \r\n\t\t\tmin: min, \r\n\t\t\tmax: max,\r\n\t\t\tstep: this.step,\r\n\t\t\tvalues: [min, max],\r\n\t\t\tslide: (event, ui) => {\r\n\t\t\t\t\r\n\t\t\t\t// set all descendants to same range\r\n\t\t\t\tlet levels = this.sliders.length;\r\n\t\t\t\tfor(let i = level + 1; i < levels; i++){\r\n\t\t\t\t\tlet descendant = this.sliders[i];\r\n\r\n\t\t\t\t\t$(descendant).slider({\r\n\t\t\t\t\t\trange: true,\r\n\t\t\t\t\t\tmin: ui.values[0],\r\n\t\t\t\t\t\tmax: ui.values[1],\r\n\t\t\t\t\t\tvalues: [...ui.values],\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.slide){\r\n\t\t\t\t\tlet values = [...ui.values];\r\n\r\n\t\t\t\t\tthis.slide({\r\n\t\t\t\t\t\ttarget: this, \r\n\t\t\t\t\t\trange: this.range,\r\n\t\t\t\t\t\tvalues: values,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.updateLabels();\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\telLevel.append(elRange, label, slider);\r\n\r\n\t\tthis.sliders.push(slider);\r\n\t\tthis.labels.push(label);\r\n\t\tthis.element.append(elLevel);\r\n\r\n\t\tthis.updateLabels();\r\n\t}\r\n\r\n\tremoveLevel(){\r\n\r\n\t}\r\n\r\n\tupdateSliders(){\r\n\r\n\t}\r\n\r\n\tupdateLabels(){\r\n\r\n\t\tlet levels = this.sliders.length;\r\n\r\n\t\tfor(let i = 0; i < levels; i++){\r\n\r\n\t\t\tlet slider = this.sliders[i];\r\n\t\t\tlet label = this.labels[i];\r\n\r\n\t\t\tlet [min, max] = $(slider).slider(\"option\", \"values\");\r\n\t\t\tlet strMin = format(min);\r\n\t\t\tlet strMax = format(max);\r\n\t\t\tlet strLabel = `${strMin} to ${strMax}`;\r\n\r\n\t\t\tlabel.innerHTML = strLabel;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n}\r\n\r\n","\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\nimport {EventDispatcher} from \"../../EventDispatcher.js\";\n\n \nexport class OrientedImageControls extends EventDispatcher{\n\t\n\tconstructor(viewer){\n\t\tsuper();\n\t\t\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.originalCam = viewer.scene.getActiveCamera();\n\t\tthis.shearCam = viewer.scene.getActiveCamera().clone();\n\t\tthis.shearCam.rotation.set(this.originalCam.rotation.toArray());\n\t\tthis.shearCam.updateProjectionMatrix();\n\t\tthis.shearCam.updateProjectionMatrix = () => {\n\t\t\treturn this.shearCam.projectionMatrix;\n\t\t};\n\n\t\tthis.image = null;\n\n\t\tthis.fadeFactor = 20;\n\t\tthis.fovDelta = 0;\n\n\t\tthis.fovMin = 0.1;\n\t\tthis.fovMax = 120;\n\n\t\tthis.shear = [0, 0];\n\n\t\t// const style = ``;\n\t\tthis.elUp = $(``);\n\t\tthis.elRight = $(``);\n\t\tthis.elDown = $(``);\n\t\tthis.elLeft = $(``);\n\t\tthis.elExit = $(``);\n\n\t\tthis.elExit.click( () => {\n\t\t\tthis.release();\n\t\t});\n\n\t\tthis.elUp.click(() => {\n\t\t\tconst fovY = viewer.getFOV();\n\t\t\tconst top = Math.tan(THREE.Math.degToRad(fovY / 2));\n\t\t\tthis.shear[1] += 0.1 * top;\n\t\t});\n\n\t\tthis.elRight.click(() => {\n\t\t\tconst fovY = viewer.getFOV();\n\t\t\tconst top = Math.tan(THREE.Math.degToRad(fovY / 2));\n\t\t\tthis.shear[0] += 0.1 * top;\n\t\t});\n\n\t\tthis.elDown.click(() => {\n\t\t\tconst fovY = viewer.getFOV();\n\t\t\tconst top = Math.tan(THREE.Math.degToRad(fovY / 2));\n\t\t\tthis.shear[1] -= 0.1 * top;\n\t\t});\n\n\t\tthis.elLeft.click(() => {\n\t\t\tconst fovY = viewer.getFOV();\n\t\t\tconst top = Math.tan(THREE.Math.degToRad(fovY / 2));\n\t\t\tthis.shear[0] -= 0.1 * top;\n\t\t});\n\n\t\tthis.scene = null;\n\t\tthis.sceneControls = new THREE.Scene();\n\n\t\tlet scroll = (e) => {\n\t\t\tthis.fovDelta += -e.delta * 1.0;\n\t\t};\n\n\t\tthis.addEventListener('mousewheel', scroll);\n\t\t//this.addEventListener(\"mousemove\", onMove);\n\t}\n\n\thasSomethingCaptured(){\n\t\treturn this.image !== null;\n\t}\n\n\tcapture(image){\n\t\tif(this.hasSomethingCaptured()){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.image = image;\n\n\t\tthis.originalFOV = this.viewer.getFOV();\n\t\tthis.originalControls = this.viewer.getControls();\n\n\t\tthis.viewer.setControls(this);\n\t\tthis.viewer.scene.overrideCamera = this.shearCam;\n\n\t\tconst elCanvas = this.viewer.renderer.domElement;\n\t\tconst elRoot = $(elCanvas.parentElement);\n\n\t\tthis.shear = [0, 0];\n\n\n\t\telRoot.append(this.elUp);\n\t\telRoot.append(this.elRight);\n\t\telRoot.append(this.elDown);\n\t\telRoot.append(this.elLeft);\n\t\telRoot.append(this.elExit);\n\t}\n\n\trelease(){\n\t\tthis.image = null;\n\n\t\tthis.viewer.scene.overrideCamera = null;\n\n\t\tthis.elUp.detach();\n\t\tthis.elRight.detach();\n\t\tthis.elDown.detach();\n\t\tthis.elLeft.detach();\n\t\tthis.elExit.detach();\n\n\t\tthis.viewer.setFOV(this.originalFOV);\n\t\tthis.viewer.setControls(this.originalControls);\n\t}\n\n\tsetScene (scene) {\n\t\tthis.scene = scene;\n\t}\n\n\tupdate (delta) {\n\t\t// const view = this.scene.view;\n\n\t\t// let prevTotal = this.shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0);\n\n\t\t//const progression = Math.min(1, this.fadeFactor * delta);\n\t\t//const attenuation = Math.max(0, 1 - this.fadeFactor * delta);\n\t\tconst progression = 1;\n\t\tconst attenuation = 0;\n\n\t\tconst oldFov = this.viewer.getFOV();\n\t\tlet fovProgression = progression * this.fovDelta;\n\t\tlet newFov = oldFov * ((1 + fovProgression / 10));\n\n\t\tnewFov = Math.max(this.fovMin, newFov);\n\t\tnewFov = Math.min(this.fovMax, newFov);\n\n\t\tlet diff = newFov / oldFov;\n\n\t\tconst mouse = this.viewer.inputHandler.mouse;\n\t\tconst canvasSize = this.viewer.renderer.getSize(new THREE.Vector2());\n\t\tconst uv = [\n\t\t\t(mouse.x / canvasSize.x),\n\t\t\t((canvasSize.y - mouse.y) / canvasSize.y)\n\t\t];\n\n\t\tconst fovY = newFov;\n\t\tconst aspect = canvasSize.x / canvasSize.y;\n\t\tconst top = Math.tan(THREE.Math.degToRad(fovY / 2));\n\t\tconst height = 2 * top;\n\t\tconst width = aspect * height;\n\n\t\tconst shearRangeX = [\n\t\t\tthis.shear[0] - 0.5 * width,\n\t\t\tthis.shear[0] + 0.5 * width,\n\t\t];\n\n\t\tconst shearRangeY = [\n\t\t\tthis.shear[1] - 0.5 * height,\n\t\t\tthis.shear[1] + 0.5 * height,\n\t\t];\n\n\t\tconst shx = (1 - uv[0]) * shearRangeX[0] + uv[0] * shearRangeX[1];\n\t\tconst shy = (1 - uv[1]) * shearRangeY[0] + uv[1] * shearRangeY[1];\n\n\t\tconst shu = (1 - diff);\n\n\t\tconst newShear = [\n\t\t\t(1 - shu) * this.shear[0] + shu * shx,\n\t\t\t(1 - shu) * this.shear[1] + shu * shy,\n\t\t];\n\t\t\n\t\tthis.shear = newShear;\n\t\tthis.viewer.setFOV(newFov);\n\t\t\n\t\tconst {originalCam, shearCam} = this;\n\n\t\toriginalCam.fov = newFov;\n\t\toriginalCam.updateMatrixWorld()\n\t\toriginalCam.updateProjectionMatrix();\n\t\tshearCam.copy(originalCam);\n\t\tshearCam.rotation.set(...originalCam.rotation.toArray());\n\n\t\tshearCam.updateMatrixWorld();\n\t\tshearCam.projectionMatrix.copy(originalCam.projectionMatrix);\n\n\t\tconst [sx, sy] = this.shear;\n\t\tconst mShear = new THREE.Matrix4().set(\n\t\t\t1, 0, sx, 0,\n\t\t\t0, 1, sy, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1,\n\t\t);\n\n\t\tconst proj = shearCam.projectionMatrix;\n\t\tproj.multiply(mShear);\n\t\tshearCam.projectionMatrixInverse.copy(proj).invert();\n\n\t\tlet total = shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0);\n\n\t\tthis.fovDelta *= attenuation;\n\t}\n};\n","\r\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\r\nimport {OrientedImageControls} from \"./OrientedImageControls.js\";\r\nimport { EventDispatcher } from \"../../EventDispatcher.js\";\r\n\r\n// https://support.pix4d.com/hc/en-us/articles/205675256-How-are-yaw-pitch-roll-defined\r\n// https://support.pix4d.com/hc/en-us/articles/202558969-How-are-omega-phi-kappa-defined\r\n\r\nfunction createMaterial(){\r\n\r\n\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\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\tconst material = new THREE.ShaderMaterial( {\r\n\t\tuniforms: {\r\n\t\t\t// time: { value: 1.0 },\r\n\t\t\t// resolution: { value: new THREE.Vector2() }\r\n\t\t\ttColor: {value: new THREE.Texture() },\r\n\t\t\tuNear: {value: 0.0},\r\n\t\t\tuOpacity: {value: 1.0},\r\n\t\t},\r\n\t\tvertexShader: vertexShader,\r\n\t\tfragmentShader: fragmentShader,\r\n\t\tside: THREE.DoubleSide,\r\n\t} );\r\n\r\n\tmaterial.side = THREE.DoubleSide;\r\n\r\n\treturn material;\r\n}\r\n\r\nconst planeGeometry = new THREE.PlaneGeometry(1, 1);\r\nconst lineGeometry = new THREE.Geometry();\r\n\r\nlineGeometry.vertices.push(\r\n\tnew THREE.Vector3(-0.5, -0.5, 0),\r\n\tnew THREE.Vector3( 0.5, -0.5, 0),\r\n\tnew THREE.Vector3( 0.5, 0.5, 0),\r\n\tnew THREE.Vector3(-0.5, 0.5, 0),\r\n\tnew THREE.Vector3(-0.5, -0.5, 0),\r\n);\r\n\r\nexport class OrientedImage{\r\n\r\n\tconstructor(id){\r\n\r\n\t\tthis.id = id;\r\n\t\tthis.fov = 1.0;\r\n\t\tthis.position = new THREE.Vector3();\r\n\t\tthis.rotation = new THREE.Vector3();\r\n\t\tthis.width = 0;\r\n\t\tthis.height = 0;\r\n\t\tthis.fov = 1.0;\r\n\r\n\t\tconst material = createMaterial();\r\n\t\tconst lineMaterial = new THREE.LineBasicMaterial( { color: 0x00ff00 } );\r\n\t\tthis.mesh = new THREE.Mesh(planeGeometry, material);\r\n\t\tthis.line = new THREE.Line(lineGeometry, lineMaterial);\r\n\t\tthis.texture = null;\r\n\r\n\t\tthis.mesh.orientedImage = this;\r\n\t}\r\n\r\n\tset(position, rotation, dimension, fov){\r\n\r\n\t\tlet radians = rotation.map(THREE.Math.degToRad);\r\n\r\n\t\tthis.position.set(...position);\r\n\t\tthis.mesh.position.set(...position);\r\n\r\n\t\tthis.rotation.set(...radians);\r\n\t\tthis.mesh.rotation.set(...radians);\r\n\r\n\t\t[this.width, this.height] = dimension;\r\n\t\tthis.mesh.scale.set(this.width / this.height, 1, 1);\r\n\r\n\t\tthis.fov = fov;\r\n\r\n\t\tthis.updateTransform();\r\n\t}\r\n\r\n\tupdateTransform(){\r\n\t\tlet {mesh, line, fov} = this;\r\n\r\n\t\tmesh.updateMatrixWorld();\r\n\t\tconst dir = mesh.getWorldDirection();\r\n\t\tconst alpha = THREE.Math.degToRad(fov / 2);\r\n\t\tconst d = -0.5 / Math.tan(alpha);\r\n\t\tconst move = dir.clone().multiplyScalar(d);\r\n\t\tmesh.position.add(move);\r\n\r\n\t\tline.position.copy(mesh.position);\r\n\t\tline.scale.copy(mesh.scale);\r\n\t\tline.rotation.copy(mesh.rotation);\r\n\t}\r\n\r\n};\r\n\r\nexport class OrientedImages extends EventDispatcher{\r\n\r\n\tconstructor(){\r\n\t\tsuper();\r\n\r\n\t\tthis.node = null;\r\n\t\tthis.cameraParams = null;\r\n\t\tthis.imageParams = null;\r\n\t\tthis.images = null;\r\n\t\tthis._visible = true;\r\n\t}\r\n\r\n\tset visible(visible){\r\n\t\tif(this._visible === visible){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor(const image of this.images){\r\n\t\t\timage.mesh.visible = visible;\r\n\t\t\timage.line.visible = visible;\r\n\t\t}\r\n\r\n\t\tthis._visible = visible;\r\n\t\tthis.dispatchEvent({\r\n\t\t\ttype: \"visibility_changed\",\r\n\t\t\timages: this,\r\n\t\t});\r\n\t}\r\n\r\n\tget visible(){\r\n\t\treturn this._visible;\r\n\t}\r\n\r\n\r\n};\r\n\r\nexport class OrientedImageLoader{\r\n\r\n\tstatic async loadCameraParams(path){\r\n\t\tconst res = await fetch(path);\r\n\t\tconst text = await res.text();\r\n\r\n\t\tconst parser = new DOMParser();\r\n\t\tconst doc = parser.parseFromString(text, \"application/xml\");\r\n\r\n\t\tconst width = parseInt(doc.getElementsByTagName(\"width\")[0].textContent);\r\n\t\tconst height = parseInt(doc.getElementsByTagName(\"height\")[0].textContent);\r\n\t\tconst f = parseFloat(doc.getElementsByTagName(\"f\")[0].textContent);\r\n\r\n\t\tlet a = (height / 2) / f;\r\n\t\tlet fov = 2 * THREE.Math.radToDeg(Math.atan(a));\r\n\r\n\t\tconst params = {\r\n\t\t\tpath: path,\r\n\t\t\twidth: width,\r\n\t\t\theight: height,\r\n\t\t\tf: f,\r\n\t\t\tfov: fov,\r\n\t\t};\r\n\r\n\t\treturn params;\r\n\t}\r\n\r\n\tstatic async loadImageParams(path){\r\n\r\n\t\tconst response = await fetch(path);\r\n\t\tif(!response.ok){\r\n\t\t\tconsole.error(`failed to load ${path}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst content = await response.text();\r\n\t\tconst lines = content.split(/\\r?\\n/);\r\n\t\tconst imageParams = [];\r\n\r\n\t\tfor(let i = 1; i < lines.length; i++){\r\n\t\t\tconst line = lines[i];\r\n\r\n\t\t\tif(line.startsWith(\"#\")){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst tokens = line.split(/\\s+/);\r\n\r\n\t\t\tif(tokens.length < 6){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst params = {\r\n\t\t\t\tid: tokens[0],\r\n\t\t\t\tx: Number.parseFloat(tokens[1]),\r\n\t\t\t\ty: Number.parseFloat(tokens[2]),\r\n\t\t\t\tz: Number.parseFloat(tokens[3]),\r\n\t\t\t\tomega: Number.parseFloat(tokens[4]),\r\n\t\t\t\tphi: Number.parseFloat(tokens[5]),\r\n\t\t\t\tkappa: Number.parseFloat(tokens[6]),\r\n\t\t\t};\r\n\r\n\t\t\t// const whitelist = [\"47518.jpg\"];\r\n\t\t\t// if(whitelist.includes(params.id)){\r\n\t\t\t// \timageParams.push(params);\r\n\t\t\t// }\r\n\t\t\timageParams.push(params);\r\n\t\t}\r\n\r\n\t\t// debug\r\n\t\t//return [imageParams[50]];\r\n\r\n\t\treturn imageParams;\r\n\t}\r\n\r\n\tstatic async load(cameraParamsPath, imageParamsPath, viewer){\r\n\r\n\t\tconst tStart = performance.now();\r\n\r\n\t\tconst [cameraParams, imageParams] = await Promise.all([\r\n\t\t\tOrientedImageLoader.loadCameraParams(cameraParamsPath),\r\n\t\t\tOrientedImageLoader.loadImageParams(imageParamsPath),\r\n\t\t]);\r\n\r\n\t\tconst orientedImageControls = new OrientedImageControls(viewer);\r\n\t\tconst raycaster = new THREE.Raycaster();\r\n\r\n\t\tconst tEnd = performance.now();\r\n\t\tconsole.log(tEnd - tStart);\r\n\r\n\t\t// const sp = new THREE.PlaneGeometry(1, 1);\r\n\t\t// const lg = new THREE.Geometry();\r\n\r\n\t\t// lg.vertices.push(\r\n\t\t// \tnew THREE.Vector3(-0.5, -0.5, 0),\r\n\t\t// \tnew THREE.Vector3( 0.5, -0.5, 0),\r\n\t\t// \tnew THREE.Vector3( 0.5, 0.5, 0),\r\n\t\t// \tnew THREE.Vector3(-0.5, 0.5, 0),\r\n\t\t// \tnew THREE.Vector3(-0.5, -0.5, 0),\r\n\t\t// );\r\n\r\n\t\tconst {width, height} = cameraParams;\r\n\t\tconst orientedImages = [];\r\n\t\tconst sceneNode = new THREE.Object3D();\r\n\t\tsceneNode.name = \"oriented_images\";\r\n\r\n\t\tfor(const params of imageParams){\r\n\r\n\t\t\t// const material = createMaterial();\r\n\t\t\t// const lm = new THREE.LineBasicMaterial( { color: 0x00ff00 } );\r\n\t\t\t// const mesh = new THREE.Mesh(sp, material);\r\n\r\n\t\t\tconst {x, y, z, omega, phi, kappa} = params;\r\n\t\t\t// const [rx, ry, rz] = [omega, phi, kappa]\r\n\t\t\t// \t.map(THREE.Math.degToRad);\r\n\t\t\t\r\n\t\t\t// mesh.position.set(x, y, z);\r\n\t\t\t// mesh.scale.set(width / height, 1, 1);\r\n\t\t\t// mesh.rotation.set(rx, ry, rz);\r\n\t\t\t// {\r\n\t\t\t// \tmesh.updateMatrixWorld();\r\n\t\t\t// \tconst dir = mesh.getWorldDirection();\r\n\t\t\t// \tconst alpha = THREE.Math.degToRad(cameraParams.fov / 2);\r\n\t\t\t// \tconst d = -0.5 / Math.tan(alpha);\r\n\t\t\t// \tconst move = dir.clone().multiplyScalar(d);\r\n\t\t\t// \tmesh.position.add(move);\r\n\t\t\t// }\r\n\t\t\t// sceneNode.add(mesh);\r\n\r\n\t\t\t// const line = new THREE.Line(lg, lm);\r\n\t\t\t// line.position.copy(mesh.position);\r\n\t\t\t// line.scale.copy(mesh.scale);\r\n\t\t\t// line.rotation.copy(mesh.rotation);\r\n\t\t\t// sceneNode.add(line);\r\n\r\n\t\t\tlet orientedImage = new OrientedImage(params.id);\r\n\t\t\t// orientedImage.setPosition(x, y, z);\r\n\t\t\t// orientedImage.setRotation(omega, phi, kappa);\r\n\t\t\t// orientedImage.setDimension(width, height);\r\n\t\t\tlet position = [x, y, z];\r\n\t\t\tlet rotation = [omega, phi, kappa];\r\n\t\t\tlet dimension = [width, height];\r\n\t\t\torientedImage.set(position, rotation, dimension, cameraParams.fov);\r\n\r\n\t\t\tsceneNode.add(orientedImage.mesh);\r\n\t\t\tsceneNode.add(orientedImage.line);\r\n\t\t\t\r\n\t\t\torientedImages.push(orientedImage);\r\n\t\t}\r\n\r\n\t\tlet hoveredElement = null;\r\n\t\tlet clipVolume = null;\r\n\r\n\t\tconst onMouseMove = (evt) => {\r\n\t\t\tconst tStart = performance.now();\r\n\t\t\tif(hoveredElement){\r\n\t\t\t\thoveredElement.line.material.color.setRGB(0, 1, 0);\r\n\t\t\t}\r\n\t\t\tevt.preventDefault();\r\n\r\n\t\t\t//var array = getMousePosition( container, evt.clientX, evt.clientY );\r\n\t\t\tconst rect = viewer.renderer.domElement.getBoundingClientRect();\r\n\t\t\tconst [x, y] = [evt.clientX, evt.clientY];\r\n\t\t\tconst array = [ \r\n\t\t\t\t( x - rect.left ) / rect.width, \r\n\t\t\t\t( y - rect.top ) / rect.height \r\n\t\t\t];\r\n\t\t\tconst onClickPosition = new THREE.Vector2(...array);\r\n\t\t\t//const intersects = getIntersects(onClickPosition, scene.children);\r\n\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\t\t\tconst mouse = new THREE.Vector3(\r\n\t\t\t\t+ ( onClickPosition.x * 2 ) - 1, \r\n\t\t\t\t- ( onClickPosition.y * 2 ) + 1 );\r\n\t\t\tconst objects = orientedImages.map(i => i.mesh);\r\n\t\t\traycaster.setFromCamera( mouse, camera );\r\n\t\t\tconst intersects = raycaster.intersectObjects( objects );\r\n\t\t\tlet selectionChanged = false;\r\n\r\n\t\t\tif ( intersects.length > 0){\r\n\t\t\t\t//console.log(intersects);\r\n\t\t\t\tconst intersection = intersects[0];\r\n\t\t\t\tconst orientedImage = intersection.object.orientedImage;\r\n\t\t\t\torientedImage.line.material.color.setRGB(1, 0, 0);\r\n\t\t\t\tselectionChanged = hoveredElement !== orientedImage;\r\n\t\t\t\thoveredElement = orientedImage;\r\n\t\t\t}else{\r\n\t\t\t\thoveredElement = null;\r\n\t\t\t}\r\n\r\n\t\t\tlet shouldRemoveClipVolume = clipVolume !== null && hoveredElement === null;\r\n\t\t\tlet shouldAddClipVolume = clipVolume === null && hoveredElement !== null;\r\n\r\n\t\t\tif(clipVolume !== null && (hoveredElement === null || selectionChanged)){\r\n\t\t\t\t// remove existing\r\n\t\t\t\tviewer.scene.removePolygonClipVolume(clipVolume);\r\n\t\t\t\tclipVolume = null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(shouldAddClipVolume || selectionChanged){\r\n\t\t\t\tconst img = hoveredElement;\r\n\t\t\t\tconst fov = cameraParams.fov;\r\n\t\t\t\tconst aspect = cameraParams.width / cameraParams.height;\r\n\t\t\t\tconst near = 1.0;\r\n\t\t\t\tconst far = 1000 * 1000;\r\n\t\t\t\tconst camera = new THREE.PerspectiveCamera(fov, aspect, near, far);\r\n\t\t\t\tcamera.rotation.order = viewer.scene.getActiveCamera().rotation.order;\r\n\t\t\t\tcamera.rotation.copy(img.mesh.rotation);\r\n\t\t\t\t{\r\n\t\t\t\t\tconst mesh = img.mesh;\r\n\t\t\t\t\tconst dir = mesh.getWorldDirection();\r\n\t\t\t\t\tconst pos = mesh.position;\r\n\t\t\t\t\tconst alpha = THREE.Math.degToRad(fov / 2);\r\n\t\t\t\t\tconst d = 0.5 / Math.tan(alpha);\r\n\t\t\t\t\tconst newCamPos = pos.clone().add(dir.clone().multiplyScalar(d));\r\n\t\t\t\t\tconst newCamDir = pos.clone().sub(newCamPos);\r\n\t\t\t\t\tconst newCamTarget = new THREE.Vector3().addVectors(\r\n\t\t\t\t\t\tnewCamPos,\r\n\t\t\t\t\t\tnewCamDir.clone().multiplyScalar(viewer.getMoveSpeed()));\r\n\t\t\t\t\tcamera.position.copy(newCamPos);\r\n\t\t\t\t}\r\n\t\t\t\tlet volume = new Potree.PolygonClipVolume(camera);\r\n\t\t\t\tlet m0 = new THREE.Mesh();\r\n\t\t\t\tlet m1 = new THREE.Mesh();\r\n\t\t\t\tlet m2 = new THREE.Mesh();\r\n\t\t\t\tlet m3 = new THREE.Mesh();\r\n\t\t\t\tm0.position.set(-1, -1, 0);\r\n\t\t\t\tm1.position.set( 1, -1, 0);\r\n\t\t\t\tm2.position.set( 1, 1, 0);\r\n\t\t\t\tm3.position.set(-1, 1, 0);\r\n\t\t\t\tvolume.markers.push(m0, m1, m2, m3);\r\n\t\t\t\tvolume.initialized = true;\r\n\t\t\t\t\r\n\t\t\t\tviewer.scene.addPolygonClipVolume(volume);\r\n\t\t\t\tclipVolume = volume;\r\n\t\t\t}\r\n\t\t\tconst tEnd = performance.now();\r\n\t\t\t//console.log(tEnd - tStart);\r\n\t\t};\r\n\r\n\t\tconst moveToImage = (image) => {\r\n\t\t\tconsole.log(\"move to image \" + image.id);\r\n\r\n\t\t\tconst mesh = image.mesh;\r\n\t\t\tconst newCamPos = image.position.clone();\r\n\t\t\tconst newCamTarget = mesh.position.clone();\r\n\r\n\t\t\tviewer.scene.view.setView(newCamPos, newCamTarget, 500, () => {\r\n\t\t\t\torientedImageControls.capture(image);\r\n\t\t\t});\r\n\r\n\t\t\tif(image.texture === null){\r\n\r\n\t\t\t\tconst target = image;\r\n\r\n\t\t\t\tconst tmpImagePath = `${Potree.resourcePath}/images/loading.jpg`;\r\n\t\t\t\tnew THREE.TextureLoader().load(tmpImagePath,\r\n\t\t\t\t\t(texture) => {\r\n\t\t\t\t\t\tif(target.texture === null){\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);\r\n\r\n\t\t\t\tconst imagePath = `${imageParamsPath}/../${target.id}`;\r\n\t\t\t\tnew THREE.TextureLoader().load(imagePath,\r\n\t\t\t\t\t(texture) => {\r\n\t\t\t\t\t\ttarget.texture = texture;\r\n\t\t\t\t\t\ttarget.mesh.material.uniforms.tColor.value = texture;\r\n\t\t\t\t\t\tmesh.material.needsUpdate = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t\t\r\n\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst onMouseClick = (evt) => {\r\n\r\n\t\t\tif(orientedImageControls.hasSomethingCaptured()){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(hoveredElement){\r\n\t\t\t\tmoveToImage(hoveredElement);\r\n\t\t\t}\r\n\t\t};\r\n\t\tviewer.renderer.domElement.addEventListener( 'mousemove', onMouseMove, false );\r\n\t\tviewer.renderer.domElement.addEventListener( 'mousedown', onMouseClick, false );\r\n\r\n\t\tviewer.addEventListener(\"update\", () => {\r\n\r\n\t\t\tfor(const image of orientedImages){\r\n\t\t\t\tconst world = image.mesh.matrixWorld;\r\n\t\t\t\tconst {width, height} = image;\r\n\t\t\t\tconst aspect = width / height;\r\n\r\n\t\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\r\n\t\t\t\tconst imgPos = image.mesh.getWorldPosition(new THREE.Vector3());\r\n\t\t\t\tconst camPos = camera.position;\r\n\t\t\t\tconst d = camPos.distanceTo(imgPos);\r\n\r\n\t\t\t\tconst minSize = 1; // in degrees of fov\r\n\t\t\t\tconst a = THREE.Math.degToRad(minSize);\r\n\t\t\t\tlet r = d * Math.tan(a);\r\n\t\t\t\tr = Math.max(r, 1);\r\n\r\n\r\n\t\t\t\timage.mesh.scale.set(r * aspect, r, 1);\r\n\t\t\t\timage.line.scale.set(r * aspect, r, 1);\r\n\r\n\t\t\t\timage.mesh.material.uniforms.uNear.value = camera.near;\r\n\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tconst images = new OrientedImages();\r\n\t\timages.node = sceneNode;\r\n\t\timages.cameraParamsPath = cameraParamsPath;\r\n\t\timages.imageParamsPath = imageParamsPath;\r\n\t\timages.cameraParams = cameraParams;\r\n\t\timages.imageParams = imageParams;\r\n\t\timages.images = orientedImages;\r\n\r\n\t\tPotree.debug.moveToImage = moveToImage;\r\n\r\n\t\treturn images;\r\n\t}\r\n}\r\n\r\n","\r\nimport * as THREE from \"../../../libs/three.js/build/three.module.js\";\r\nimport { EventDispatcher } from \"../../EventDispatcher.js\";\r\nimport {TextSprite} from \"../../TextSprite.js\";\r\n\r\nlet sg = new THREE.SphereGeometry(1, 8, 8);\r\nlet sgHigh = new THREE.SphereGeometry(1, 128, 128);\r\n\r\nlet sm = new THREE.MeshBasicMaterial({side: THREE.BackSide});\r\nlet smHovered = new THREE.MeshBasicMaterial({side: THREE.BackSide, color: 0xff0000});\r\n\r\nlet raycaster = new THREE.Raycaster();\r\nlet currentlyHovered = null;\r\n\r\nlet previousView = {\r\n\tcontrols: null,\r\n\tposition: null,\r\n\ttarget: null,\r\n};\r\n\r\nclass Image360{\r\n\r\n\tconstructor(file, time, longitude, latitude, altitude, course, pitch, roll){\r\n\t\tthis.file = file;\r\n\t\tthis.time = time;\r\n\t\tthis.longitude = longitude;\r\n\t\tthis.latitude = latitude;\r\n\t\tthis.altitude = altitude;\r\n\t\tthis.course = course;\r\n\t\tthis.pitch = pitch;\r\n\t\tthis.roll = roll;\r\n\t\tthis.mesh = null;\r\n\t}\r\n};\r\n\r\nexport class Images360 extends EventDispatcher{\r\n\r\n\tconstructor(viewer){\r\n\t\tsuper();\r\n\r\n\t\tthis.viewer = viewer;\r\n\r\n\t\tthis.selectingEnabled = true;\r\n\r\n\t\tthis.images = [];\r\n\t\tthis.node = new THREE.Object3D();\r\n\r\n\t\tthis.sphere = new THREE.Mesh(sgHigh, sm);\r\n\t\tthis.sphere.visible = false;\r\n\t\tthis.sphere.scale.set(1000, 1000, 1000);\r\n\t\tthis.node.add(this.sphere);\r\n\t\tthis._visible = true;\r\n\t\t// this.node.add(label);\r\n\r\n\t\tthis.focusedImage = null;\r\n\r\n\t\tlet elUnfocus = document.createElement(\"input\");\r\n\t\telUnfocus.type = \"button\";\r\n\t\telUnfocus.value = \"unfocus\";\r\n\t\telUnfocus.style.position = \"absolute\";\r\n\t\telUnfocus.style.right = \"10px\";\r\n\t\telUnfocus.style.bottom = \"10px\";\r\n\t\telUnfocus.style.zIndex = \"10000\";\r\n\t\telUnfocus.style.fontSize = \"2em\";\r\n\t\telUnfocus.addEventListener(\"click\", () => this.unfocus());\r\n\t\tthis.elUnfocus = elUnfocus;\r\n\r\n\t\tthis.domRoot = viewer.renderer.domElement.parentElement;\r\n\t\tthis.domRoot.appendChild(elUnfocus);\r\n\t\tthis.elUnfocus.style.display = \"none\";\r\n\r\n\t\tviewer.addEventListener(\"update\", () => {\r\n\t\t\tthis.update(viewer);\r\n\t\t});\r\n\t\tviewer.inputHandler.addInputListener(this);\r\n\r\n\t\tthis.addEventListener(\"mousedown\", () => {\r\n\t\t\tif(currentlyHovered && currentlyHovered.image360){\r\n\t\t\t\tthis.focus(currentlyHovered.image360);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t};\r\n\r\n\tset visible(visible){\r\n\t\tif(this._visible === visible){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\r\n\t\tfor(const image of this.images){\r\n\t\t\timage.mesh.visible = visible && (this.focusedImage == null);\r\n\t\t}\r\n\r\n\t\tthis.sphere.visible = visible && (this.focusedImage != null);\r\n\t\tthis._visible = visible;\r\n\t\tthis.dispatchEvent({\r\n\t\t\ttype: \"visibility_changed\",\r\n\t\t\timages: this,\r\n\t\t});\r\n\t}\r\n\r\n\tget visible(){\r\n\t\treturn this._visible;\r\n\t}\r\n\r\n\tfocus(image360){\r\n\t\tif(this.focusedImage !== null){\r\n\t\t\tthis.unfocus();\r\n\t\t}\r\n\r\n\t\tpreviousView = {\r\n\t\t\tcontrols: this.viewer.controls,\r\n\t\t\tposition: this.viewer.scene.view.position.clone(),\r\n\t\t\ttarget: viewer.scene.view.getPivot(),\r\n\t\t};\r\n\r\n\t\tthis.viewer.setControls(this.viewer.orbitControls);\r\n\t\tthis.viewer.orbitControls.doubleClockZoomEnabled = false;\r\n\r\n\t\tfor(let image of this.images){\r\n\t\t\timage.mesh.visible = false;\r\n\t\t}\r\n\r\n\t\tthis.selectingEnabled = false;\r\n\r\n\t\tthis.sphere.visible = false;\r\n\r\n\t\tthis.load(image360).then( () => {\r\n\t\t\tthis.sphere.visible = true;\r\n\t\t\tthis.sphere.material.map = image360.texture;\r\n\t\t\tthis.sphere.material.needsUpdate = true;\r\n\t\t});\r\n\r\n\t\t{ // orientation\r\n\t\t\tlet {course, pitch, roll} = image360;\r\n\t\t\tthis.sphere.rotation.set(\r\n\t\t\t\tTHREE.Math.degToRad(+roll + 90),\r\n\t\t\t\tTHREE.Math.degToRad(-pitch),\r\n\t\t\t\tTHREE.Math.degToRad(-course + 90),\r\n\t\t\t\t\"ZYX\"\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tthis.sphere.position.set(...image360.position);\r\n\r\n\t\tlet target = new THREE.Vector3(...image360.position);\r\n\t\tlet dir = target.clone().sub(viewer.scene.view.position).normalize();\r\n\t\tlet move = dir.multiplyScalar(0.000001);\r\n\t\tlet newCamPos = target.clone().sub(move);\r\n\r\n\t\tviewer.scene.view.setView(\r\n\t\t\tnewCamPos, \r\n\t\t\ttarget,\r\n\t\t\t500\r\n\t\t);\r\n\r\n\t\tthis.focusedImage = image360;\r\n\r\n\t\tthis.elUnfocus.style.display = \"\";\r\n\t}\r\n\r\n\tunfocus(){\r\n\t\tthis.selectingEnabled = true;\r\n\r\n\t\tfor(let image of this.images){\r\n\t\t\timage.mesh.visible = true;\r\n\t\t}\r\n\r\n\t\tlet image = this.focusedImage;\r\n\r\n\t\tif(image === null){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\r\n\t\tthis.sphere.material.map = null;\r\n\t\tthis.sphere.material.needsUpdate = true;\r\n\t\tthis.sphere.visible = false;\r\n\r\n\t\tlet pos = viewer.scene.view.position;\r\n\t\tlet target = viewer.scene.view.getPivot();\r\n\t\tlet dir = target.clone().sub(pos).normalize();\r\n\t\tlet move = dir.multiplyScalar(10);\r\n\t\tlet newCamPos = target.clone().sub(move);\r\n\r\n\t\tviewer.orbitControls.doubleClockZoomEnabled = true;\r\n\t\tviewer.setControls(previousView.controls);\r\n\r\n\t\tviewer.scene.view.setView(\r\n\t\t\tpreviousView.position, \r\n\t\t\tpreviousView.target,\r\n\t\t\t500\r\n\t\t);\r\n\r\n\r\n\t\tthis.focusedImage = null;\r\n\r\n\t\tthis.elUnfocus.style.display = \"none\";\r\n\t}\r\n\r\n\tload(image360){\r\n\r\n\t\treturn new Promise(resolve => {\r\n\t\t\tlet texture = new THREE.TextureLoader().load(image360.file, resolve);\r\n\t\t\ttexture.wrapS = THREE.RepeatWrapping;\r\n\t\t\ttexture.repeat.x = -1;\r\n\r\n\t\t\timage360.texture = texture;\r\n\t\t});\r\n\r\n\t}\r\n\r\n\thandleHovering(){\r\n\t\tlet mouse = viewer.inputHandler.mouse;\r\n\t\tlet camera = viewer.scene.getActiveCamera();\r\n\t\tlet domElement = viewer.renderer.domElement;\r\n\r\n\t\tlet ray = Potree.Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\r\n\r\n\t\t// let tStart = performance.now();\r\n\t\traycaster.ray.copy(ray);\r\n\t\tlet intersections = raycaster.intersectObjects(this.node.children);\r\n\r\n\t\tif(intersections.length === 0){\r\n\t\t\t// label.visible = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet intersection = intersections[0];\r\n\t\tcurrentlyHovered = intersection.object;\r\n\t\tcurrentlyHovered.material = smHovered;\r\n\r\n\t\t//label.visible = true;\r\n\t\t//label.setText(currentlyHovered.image360.file);\r\n\t\t//currentlyHovered.getWorldPosition(label.position);\r\n\t}\r\n\r\n\tupdate(){\r\n\r\n\t\tlet {viewer} = this;\r\n\r\n\t\tif(currentlyHovered){\r\n\t\t\tcurrentlyHovered.material = sm;\r\n\t\t\tcurrentlyHovered = null;\r\n\t\t}\r\n\r\n\t\tif(this.selectingEnabled){\r\n\t\t\tthis.handleHovering();\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\nexport class Images360Loader{\r\n\r\n\tstatic async load(url, viewer, params = {}){\r\n\r\n\t\tif(!params.transform){\r\n\t\t\tparams.transform = {\r\n\t\t\t\tforward: a => a,\r\n\t\t\t};\r\n\t\t}\r\n\t\t\r\n\t\tlet response = await fetch(`${url}/coordinates.txt`);\r\n\t\tlet text = await response.text();\r\n\r\n\t\tlet lines = text.split(/\\r?\\n/);\r\n\t\tlet coordinateLines = lines.slice(1);\r\n\r\n\t\tlet images360 = new Images360(viewer);\r\n\r\n\t\tfor(let line of coordinateLines){\r\n\r\n\t\t\tif(line.trim().length === 0){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tlet tokens = line.split(/\\t/);\r\n\r\n\t\t\tlet [filename, time, long, lat, alt, course, pitch, roll] = tokens;\r\n\t\t\ttime = parseFloat(time);\r\n\t\t\tlong = parseFloat(long);\r\n\t\t\tlat = parseFloat(lat);\r\n\t\t\talt = parseFloat(alt);\r\n\t\t\tcourse = parseFloat(course);\r\n\t\t\tpitch = parseFloat(pitch);\r\n\t\t\troll = parseFloat(roll);\r\n\r\n\t\t\tfilename = filename.replace(/\"/g, \"\");\r\n\t\t\tlet file = `${url}/${filename}`;\r\n\r\n\t\t\tlet image360 = new Image360(file, time, long, lat, alt, course, pitch, roll);\r\n\r\n\t\t\tlet xy = params.transform.forward([long, lat]);\r\n\t\t\tlet position = [...xy, alt];\r\n\t\t\timage360.position = position;\r\n\r\n\t\t\timages360.images.push(image360);\r\n\t\t}\r\n\r\n\t\tImages360Loader.createSceneNodes(images360, params.transform);\r\n\r\n\t\treturn images360;\r\n\r\n\t}\r\n\r\n\tstatic createSceneNodes(images360, transform){\r\n\r\n\t\tfor(let image360 of images360.images){\r\n\t\t\tlet {longitude, latitude, altitude} = image360;\r\n\t\t\tlet xy = transform.forward([longitude, latitude]);\r\n\r\n\t\t\tlet mesh = new THREE.Mesh(sg, sm);\r\n\t\t\tmesh.position.set(...xy, altitude);\r\n\t\t\tmesh.scale.set(1, 1, 1);\r\n\t\t\tmesh.material.transparent = true;\r\n\t\t\tmesh.material.opacity = 0.75;\r\n\t\t\tmesh.image360 = image360;\r\n\r\n\t\t\t{ // orientation\r\n\t\t\t\tvar {course, pitch, roll} = image360;\r\n\t\t\t\tmesh.rotation.set(\r\n\t\t\t\t\tTHREE.Math.degToRad(+roll + 90),\r\n\t\t\t\t\tTHREE.Math.degToRad(-pitch),\r\n\t\t\t\t\tTHREE.Math.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\timages360.node.add(mesh);\r\n\r\n\t\t\timage360.mesh = mesh;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n\r\n};\r\n\r\n\r\n","// 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","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {GeoJSONExporter} from \"../exporter/GeoJSONExporter.js\"\nimport {DXFExporter} from \"../exporter/DXFExporter.js\"\nimport {Volume, SphereVolume} from \"../utils/Volume.js\"\nimport {PolygonClipVolume} from \"../utils/PolygonClipVolume.js\"\nimport {PropertiesPanel} from \"./PropertyPanels/PropertiesPanel.js\"\nimport {PointCloudTree} from \"../PointCloudTree.js\"\nimport {Profile} from \"../utils/Profile.js\"\nimport {Measure} from \"../utils/Measure.js\"\nimport {Annotation} from \"../Annotation.js\"\nimport {CameraMode, ClipTask, ClipMethod} from \"../defines.js\"\nimport {ScreenBoxSelectTool} from \"../utils/ScreenBoxSelectTool.js\"\nimport {Utils} from \"../utils.js\"\nimport {CameraAnimation} from \"../modules/CameraAnimation/CameraAnimation.js\"\nimport {HierarchicalSlider} from \"./HierarchicalSlider.js\"\nimport {OrientedImage} from \"../modules/OrientedImages/OrientedImages.js\";\nimport {Images360} from \"../modules/Images360/Images360.js\";\n\nimport JSON5 from \"../../libs/json5-2.1.3/json5.mjs\";\n\nexport class Sidebar{\n\n\tconstructor(viewer){\n\t\tthis.viewer = viewer;\n\n\t\tthis.measuringTool = viewer.measuringTool;\n\t\tthis.profileTool = viewer.profileTool;\n\t\tthis.volumeTool = viewer.volumeTool;\n\n\t\tthis.dom = $(\"#sidebar_root\");\n\t}\n\n\tcreateToolIcon(icon, title, callback){\n\t\tlet element = $(`\n\t\t\t\n\t\t`);\n\n\t\telement.click(callback);\n\n\t\treturn element;\n\t}\n\n\tinit(){\n\n\t\tthis.initAccordion();\n\t\tthis.initAppearance();\n\t\tthis.initToolbar();\n\t\tthis.initScene();\n\t\tthis.initNavigation();\n\t\tthis.initFilters();\n\t\tthis.initClippingTool();\n\t\tthis.initSettings();\n\t\t\n\t\t$('#potree_version_number').html(Potree.version.major + \".\" + Potree.version.minor + Potree.version.suffix);\n\t}\n\n\t\t\n\n\tinitToolbar(){\n\n\t\t// ANGLE\n\t\tlet elToolbar = $('#tools');\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/angle.png',\n\t\t\t'[title]tt.angle_measurement',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\tshowDistances: false,\n\t\t\t\t\tshowAngles: true,\n\t\t\t\t\tshowArea: false,\n\t\t\t\t\tclosed: true,\n\t\t\t\t\tmaxMarkers: 3,\n\t\t\t\t\tname: 'Angle'});\n\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 === measurement.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// POINT\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/point.svg',\n\t\t\t'[title]tt.point_measurement',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\tshowDistances: false,\n\t\t\t\t\tshowAngles: false,\n\t\t\t\t\tshowCoordinates: true,\n\t\t\t\t\tshowArea: false,\n\t\t\t\t\tclosed: true,\n\t\t\t\t\tmaxMarkers: 1,\n\t\t\t\t\tname: 'Point'});\n\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 === measurement.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// DISTANCE\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/distance.svg',\n\t\t\t'[title]tt.distance_measurement',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\tshowDistances: true,\n\t\t\t\t\tshowArea: false,\n\t\t\t\t\tclosed: false,\n\t\t\t\t\tname: 'Distance'});\n\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 === measurement.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// HEIGHT\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/height.svg',\n\t\t\t'[title]tt.height_measurement',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\tshowDistances: false,\n\t\t\t\t\tshowHeight: true,\n\t\t\t\t\tshowArea: false,\n\t\t\t\t\tclosed: false,\n\t\t\t\t\tmaxMarkers: 2,\n\t\t\t\t\tname: 'Height'});\n\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 === measurement.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// CIRCLE\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/circle.svg',\n\t\t\t'[title]tt.circle_measurement',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\tshowDistances: false,\n\t\t\t\t\tshowHeight: false,\n\t\t\t\t\tshowArea: false,\n\t\t\t\t\tshowCircle: true,\n\t\t\t\t\tshowEdges: false,\n\t\t\t\t\tclosed: false,\n\t\t\t\t\tmaxMarkers: 3,\n\t\t\t\t\tname: 'Circle'});\n\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 === measurement.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// AZIMUTH\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/azimuth.svg',\n\t\t\t'Azimuth',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\tshowDistances: false,\n\t\t\t\t\tshowHeight: false,\n\t\t\t\t\tshowArea: false,\n\t\t\t\t\tshowCircle: false,\n\t\t\t\t\tshowEdges: false,\n\t\t\t\t\tshowAzimuth: true,\n\t\t\t\t\tclosed: false,\n\t\t\t\t\tmaxMarkers: 2,\n\t\t\t\t\tname: 'Azimuth'});\n\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 === measurement.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// AREA\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/area.svg',\n\t\t\t'[title]tt.area_measurement',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\tshowDistances: true,\n\t\t\t\t\tshowArea: true,\n\t\t\t\t\tclosed: true,\n\t\t\t\t\tname: 'Area'});\n\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 === measurement.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// VOLUME\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/volume.svg',\n\t\t\t'[title]tt.volume_measurement',\n\t\t\t() => {\n\t\t\t\tlet volume = this.volumeTool.startInsertion(); \n\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 === volume.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// SPHERE VOLUME\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/sphere_distances.svg',\n\t\t\t'[title]tt.volume_measurement',\n\t\t\t() => { \n\t\t\t\tlet volume = this.volumeTool.startInsertion({type: SphereVolume}); \n\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 === volume.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// PROFILE\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/profile.svg',\n\t\t\t'[title]tt.height_profile',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown(); ;\n\t\t\t\tlet profile = this.profileTool.startInsertion();\n\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 === profile.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// ANNOTATION\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/annotation.svg',\n\t\t\t'[title]tt.annotation',\n\t\t\t() => {\n\t\t\t\t$('#menu_measurements').next().slideDown(); ;\n\t\t\t\tlet annotation = this.viewer.annotationTool.startInsertion();\n\n\t\t\t\tlet annotationsRoot = $(\"#jstree_scene\").jstree().get_json(\"annotations\");\n\t\t\t\tlet jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// REMOVE ALL\n\t\telToolbar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/reset_tools.svg',\n\t\t\t'[title]tt.remove_all_measurement',\n\t\t\t() => {\n\t\t\t\tthis.viewer.scene.removeAllMeasurements();\n\t\t\t}\n\t\t));\n\n\n\t\t{ // SHOW / HIDE Measurements\n\t\t\tlet elShow = $(\"#measurement_options_show\");\n\t\t\telShow.selectgroup({title: \"Show/Hide labels\"});\n\n\t\t\telShow.find(\"input\").click( (e) => {\n\t\t\t\tconst show = e.target.value === \"SHOW\";\n\t\t\t\tthis.measuringTool.showLabels = show;\n\t\t\t});\n\n\t\t\tlet currentShow = this.measuringTool.showLabels ? \"SHOW\" : \"HIDE\";\n\t\t\telShow.find(`input[value=${currentShow}]`).trigger(\"click\");\n\t\t}\n\t}\n\n\tinitScene(){\n\n\t\tlet elScene = $(\"#menu_scene\");\n\t\tlet elObjects = elScene.next().find(\"#scene_objects\");\n\t\tlet elProperties = elScene.next().find(\"#scene_object_properties\");\n\t\t\n\n\t\t{\n\t\t\tlet elExport = elScene.next().find(\"#scene_export\");\n\n\t\t\tlet geoJSONIcon = `${Potree.resourcePath}/icons/file_geojson.svg`;\n\t\t\tlet dxfIcon = `${Potree.resourcePath}/icons/file_dxf.svg`;\n\t\t\tlet potreeIcon = `${Potree.resourcePath}/icons/file_potree.svg`;\n\n\t\t\telExport.append(`\n\t\t\t\tExport:
        \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t`);\n\n\t\t\tlet elDownloadJSON = elExport.find(\"img[name=geojson_export_button]\").parent();\n\t\t\telDownloadJSON.click( (event) => {\n\t\t\t\tlet scene = this.viewer.scene;\n\t\t\t\tlet measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes];\n\n\t\t\t\tif(measurements.length > 0){\n\t\t\t\t\tlet geoJson = GeoJSONExporter.toString(measurements);\n\n\t\t\t\t\tlet url = window.URL.createObjectURL(new Blob([geoJson], {type: 'data:application/octet-stream'}));\n\t\t\t\t\telDownloadJSON.attr('href', url);\n\t\t\t\t}else{\n\t\t\t\t\tthis.viewer.postError(\"no measurements to export\");\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet elDownloadDXF = elExport.find(\"img[name=dxf_export_button]\").parent();\n\t\t\telDownloadDXF.click( (event) => {\n\t\t\t\tlet scene = this.viewer.scene;\n\t\t\t\tlet measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes];\n\n\t\t\t\tif(measurements.length > 0){\n\t\t\t\t\tlet dxf = DXFExporter.toString(measurements);\n\n\t\t\t\t\tlet url = window.URL.createObjectURL(new Blob([dxf], {type: 'data:application/octet-stream'}));\n\t\t\t\t\telDownloadDXF.attr('href', url);\n\t\t\t\t}else{\n\t\t\t\t\tthis.viewer.postError(\"no measurements to export\");\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet elDownloadPotree = elExport.find(\"img[name=potree_export_button]\").parent();\n\t\t\telDownloadPotree.click( (event) => {\n\n\t\t\t\tlet data = Potree.saveProject(this.viewer);\n\t\t\t\tlet dataString = JSON5.stringify(data, null, \"\\t\")\n\n\t\t\t\tlet url = window.URL.createObjectURL(new Blob([dataString], {type: 'data:application/octet-stream'}));\n\t\t\t\telDownloadPotree.attr('href', url);\n\t\t\t});\n\t\t}\n\n\t\tlet propertiesPanel = new PropertiesPanel(elProperties, this.viewer);\n\t\tpropertiesPanel.setScene(this.viewer.scene);\n\t\t\n\t\tlocalStorage.removeItem('jstree');\n\n\t\tlet tree = $(`
        `);\n\t\telObjects.append(tree);\n\n\t\ttree.jstree({\n\t\t\t'plugins': [\"checkbox\", \"state\"],\n\t\t\t'core': {\n\t\t\t\t\"dblclick_toggle\": false,\n\t\t\t\t\"state\": {\n\t\t\t\t\t\"checked\" : true\n\t\t\t\t},\n\t\t\t\t'check_callback': true,\n\t\t\t\t\"expand_selected_onload\": true\n\t\t\t},\n\t\t\t\"checkbox\" : {\n\t\t\t\t\"keep_selected_style\": true,\n\t\t\t\t\"three_state\": false,\n\t\t\t\t\"whole_node\": false,\n\t\t\t\t\"tie_selection\": false,\n\t\t\t},\n\t\t});\n\n\t\tlet createNode = (parent, text, icon, object) => {\n\t\t\tlet nodeID = tree.jstree('create_node', parent, { \n\t\t\t\t\t\"text\": text, \n\t\t\t\t\t\"icon\": icon,\n\t\t\t\t\t\"data\": object\n\t\t\t\t}, \n\t\t\t\t\"last\", false, false);\n\t\t\t\n\t\t\tif(object.visible){\n\t\t\t\ttree.jstree('check_node', nodeID);\n\t\t\t}else{\n\t\t\t\ttree.jstree('uncheck_node', nodeID);\n\t\t\t}\n\n\t\t\treturn nodeID;\n\t\t}\n\n\t\tlet pcID = tree.jstree('create_node', \"#\", { \"text\": \"Point Clouds\", \"id\": \"pointclouds\"}, \"last\", false, false);\n\t\tlet measurementID = tree.jstree('create_node', \"#\", { \"text\": \"Measurements\", \"id\": \"measurements\" }, \"last\", false, false);\n\t\tlet annotationsID = tree.jstree('create_node', \"#\", { \"text\": \"Annotations\", \"id\": \"annotations\" }, \"last\", false, false);\n\t\tlet otherID = tree.jstree('create_node', \"#\", { \"text\": \"Other\", \"id\": \"other\" }, \"last\", false, false);\n\t\tlet vectorsID = tree.jstree('create_node', \"#\", { \"text\": \"Vectors\", \"id\": \"vectors\" }, \"last\", false, false);\n\t\tlet imagesID = tree.jstree('create_node', \"#\", { \"text\": \" Images\", \"id\": \"images\" }, \"last\", false, false);\n\n\t\ttree.jstree(\"check_node\", pcID);\n\t\ttree.jstree(\"check_node\", measurementID);\n\t\ttree.jstree(\"check_node\", annotationsID);\n\t\ttree.jstree(\"check_node\", otherID);\n\t\ttree.jstree(\"check_node\", vectorsID);\n\t\ttree.jstree(\"check_node\", imagesID);\n\n\t\ttree.on('create_node.jstree', (e, data) => {\n\t\t\ttree.jstree(\"open_all\");\n\t\t});\n\n\t\ttree.on(\"select_node.jstree\", (e, data) => {\n\t\t\tlet object = data.node.data;\n\t\t\tpropertiesPanel.set(object);\n\n\t\t\tthis.viewer.inputHandler.deselectAll();\n\n\t\t\tif(object instanceof Volume){\n\t\t\t\tthis.viewer.inputHandler.toggleSelection(object);\n\t\t\t}\n\n\t\t\t$(this.viewer.renderer.domElement).focus();\n\t\t});\n\n\t\ttree.on(\"deselect_node.jstree\", (e, data) => {\n\t\t\tpropertiesPanel.set(null);\n\t\t});\n\n\t\ttree.on(\"delete_node.jstree\", (e, data) => {\n\t\t\tpropertiesPanel.set(null);\n\t\t});\n\n\t\ttree.on('dblclick','.jstree-anchor', (e) => {\n\n\t\t\tlet instance = $.jstree.reference(e.target);\n\t\t\tlet node = instance.get_node(e.target);\n\t\t\tlet object = node.data;\n\n\t\t\t// ignore double click on checkbox\n\t\t\tif(e.target.classList.contains(\"jstree-checkbox\")){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(object instanceof PointCloudTree){\n\t\t\t\tlet box = this.viewer.getBoundingBox([object]);\n\t\t\t\tlet node = new THREE.Object3D();\n\t\t\t\tnode.boundingBox = box;\n\t\t\t\tthis.viewer.zoomTo(node, 1, 500);\n\t\t\t}else if(object instanceof Measure){\n\t\t\t\tlet points = object.points.map(p => p.position);\n\t\t\t\tlet box = new THREE.Box3().setFromPoints(points);\n\t\t\t\tif(box.getSize(new THREE.Vector3()).length() > 0){\n\t\t\t\t\tlet node = new THREE.Object3D();\n\t\t\t\t\tnode.boundingBox = box;\n\t\t\t\t\tthis.viewer.zoomTo(node, 2, 500);\n\t\t\t\t}\n\t\t\t}else if(object instanceof Profile){\n\t\t\t\tlet points = object.points;\n\t\t\t\tlet box = new THREE.Box3().setFromPoints(points);\n\t\t\t\tif(box.getSize(new THREE.Vector3()).length() > 0){\n\t\t\t\t\tlet node = new THREE.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}\n\t\t\t}else if(object instanceof Volume){\n\t\t\t\t\n\t\t\t\tlet box = object.boundingBox.clone().applyMatrix4(object.matrixWorld);\n\n\t\t\t\tif(box.getSize(new THREE.Vector3()).length() > 0){\n\t\t\t\t\tlet node = new THREE.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}\n\t\t\t}else if(object instanceof Annotation){\n\t\t\t\tobject.moveHere(this.viewer.scene.getActiveCamera());\n\t\t\t}else if(object instanceof PolygonClipVolume){\n\t\t\t\tlet dir = object.camera.getWorldDirection(new THREE.Vector3());\n\t\t\t\tlet target;\n\n\t\t\t\tif(object.camera instanceof THREE.OrthographicCamera){\n\t\t\t\t\tdir.multiplyScalar(object.camera.right)\n\t\t\t\t\ttarget = new THREE.Vector3().addVectors(object.camera.position, dir);\n\t\t\t\t\tthis.viewer.setCameraMode(CameraMode.ORTHOGRAPHIC);\n\t\t\t\t}else if(object.camera instanceof THREE.PerspectiveCamera){\n\t\t\t\t\tdir.multiplyScalar(this.viewer.scene.view.radius);\n\t\t\t\t\ttarget = new THREE.Vector3().addVectors(object.camera.position, dir);\n\t\t\t\t\tthis.viewer.setCameraMode(CameraMode.PERSPECTIVE);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.viewer.scene.view.position.copy(object.camera.position);\n\t\t\t\tthis.viewer.scene.view.lookAt(target);\n\t\t\t}else if(object.type === \"SpotLight\"){\n\t\t\t\tlet distance = (object.distance > 0) ? object.distance / 4 : 5 * 1000;\n\t\t\t\tlet position = object.position;\n\t\t\t\tlet target = new THREE.Vector3().addVectors(\n\t\t\t\t\tposition, \n\t\t\t\t\tobject.getWorldDirection(new THREE.Vector3()).multiplyScalar(distance));\n\n\t\t\t\tthis.viewer.scene.view.position.copy(object.position);\n\t\t\t\tthis.viewer.scene.view.lookAt(target);\n\t\t\t}else if(object instanceof THREE.Object3D){\n\t\t\t\tlet box = new THREE.Box3().setFromObject(object);\n\n\t\t\t\tif(box.getSize(new THREE.Vector3()).length() > 0){\n\t\t\t\t\tlet node = new THREE.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}\n\t\t\t}else if(object instanceof OrientedImage){\n\t\t\t\t// TODO zoom to images\n\n\t\t\t\t// let box = new THREE.Box3().setFromObject(object);\n\n\t\t\t\t// if(box.getSize(new THREE.Vector3()).length() > 0){\n\t\t\t\t// \tlet node = new THREE.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// }\n\t\t\t}else if(object instanceof Images360){\n\t\t\t\t// TODO\n\t\t\t}else if(object instanceof Geopackage){\n\t\t\t\t// TODO\n\t\t\t}\n\t\t});\n\n\t\ttree.on(\"uncheck_node.jstree\", (e, data) => {\n\t\t\tlet object = data.node.data;\n\n\t\t\tif(object){\n\t\t\t\tobject.visible = false;\n\t\t\t}\n\t\t});\n\n\t\ttree.on(\"check_node.jstree\", (e, data) => {\n\t\t\tlet object = data.node.data;\n\n\t\t\tif(object){\n\t\t\t\tobject.visible = true;\n\t\t\t}\n\t\t});\n\n\n\t\tlet onPointCloudAdded = (e) => {\n\t\t\tlet pointcloud = e.pointcloud;\n\t\t\tlet cloudIcon = `${Potree.resourcePath}/icons/cloud.svg`;\n\t\t\tlet node = createNode(pcID, pointcloud.name, cloudIcon, pointcloud);\n\n\t\t\tpointcloud.addEventListener(\"visibility_changed\", () => {\n\t\t\t\tif(pointcloud.visible){\n\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t}else{\n\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tlet onMeasurementAdded = (e) => {\n\t\t\tlet measurement = e.measurement;\n\t\t\tlet icon = Utils.getMeasurementIcon(measurement);\n\t\t\tcreateNode(measurementID, measurement.name, icon, measurement);\n\t\t};\n\n\t\tlet onVolumeAdded = (e) => {\n\t\t\tlet volume = e.volume;\n\t\t\tlet icon = Utils.getMeasurementIcon(volume);\n\t\t\tlet node = createNode(measurementID, volume.name, icon, volume);\n\n\t\t\tvolume.addEventListener(\"visibility_changed\", () => {\n\t\t\t\tif(volume.visible){\n\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t}else{\n\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tlet onProfileAdded = (e) => {\n\t\t\tlet profile = e.profile;\n\t\t\tlet icon = Utils.getMeasurementIcon(profile);\n\t\t\tcreateNode(measurementID, profile.name, icon, profile);\n\t\t};\n\n\t\tlet onAnnotationAdded = (e) => {\n\t\t\tlet annotation = e.annotation;\n\n\t\t\tlet annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`;\n\t\t\tlet parentID = this.annotationMapping.get(annotation.parent);\n\t\t\tlet annotationID = createNode(parentID, annotation.title, annotationIcon, annotation);\n\t\t\tthis.annotationMapping.set(annotation, annotationID);\n\n\t\t\tannotation.addEventListener(\"annotation_changed\", (e) => {\n\t\t\t\tlet annotationsRoot = $(\"#jstree_scene\").jstree().get_json(\"annotations\");\n\t\t\t\tlet jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid);\n\t\t\t\t\n\t\t\t\t$.jstree.reference(jsonNode.id).rename_node(jsonNode.id, annotation.title);\n\t\t\t});\n\t\t};\n\n\t\tlet onCameraAnimationAdded = (e) => {\n\t\t\tconst animation = e.animation;\n\n\t\t\tconst animationIcon = `${Potree.resourcePath}/icons/camera_animation.svg`;\n\t\t\tcreateNode(otherID, \"animation\", animationIcon, animation);\n\t\t};\n\n\t\tlet onOrientedImagesAdded = (e) => {\n\t\t\tconst images = e.images;\n\n\t\t\tconst imagesIcon = `${Potree.resourcePath}/icons/picture.svg`;\n\t\t\tconst node = createNode(imagesID, \"images\", imagesIcon, images);\n\n\t\t\timages.addEventListener(\"visibility_changed\", () => {\n\t\t\t\tif(images.visible){\n\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t}else{\n\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tlet onImages360Added = (e) => {\n\t\t\tconst images = e.images;\n\n\t\t\tconst imagesIcon = `${Potree.resourcePath}/icons/picture.svg`;\n\t\t\tconst node = createNode(imagesID, \"360° images\", imagesIcon, images);\n\n\t\t\timages.addEventListener(\"visibility_changed\", () => {\n\t\t\t\tif(images.visible){\n\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t}else{\n\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst onGeopackageAdded = (e) => {\n\t\t\tconst geopackage = e.geopackage;\n\n\t\t\tconst geopackageIcon = `${Potree.resourcePath}/icons/triangle.svg`;\n\t\t\tconst tree = $(`#jstree_scene`);\n\t\t\tconst parentNode = \"vectors\";\n\n\t\t\tfor(const layer of geopackage.node.children){\n\t\t\t\tconst name = layer.name;\n\n\t\t\t\tlet shpPointsID = tree.jstree('create_node', parentNode, { \n\t\t\t\t\t\t\"text\": name, \n\t\t\t\t\t\t\"icon\": geopackageIcon,\n\t\t\t\t\t\t\"object\": layer,\n\t\t\t\t\t\t\"data\": layer,\n\t\t\t\t\t}, \n\t\t\t\t\t\"last\", false, false);\n\t\t\t\ttree.jstree(layer.visible ? \"check_node\" : \"uncheck_node\", shpPointsID);\n\t\t\t}\n\n\t\t};\n\n\t\tthis.viewer.scene.addEventListener(\"pointcloud_added\", onPointCloudAdded);\n\t\tthis.viewer.scene.addEventListener(\"measurement_added\", onMeasurementAdded);\n\t\tthis.viewer.scene.addEventListener(\"profile_added\", onProfileAdded);\n\t\tthis.viewer.scene.addEventListener(\"volume_added\", onVolumeAdded);\n\t\tthis.viewer.scene.addEventListener(\"camera_animation_added\", onCameraAnimationAdded);\n\t\tthis.viewer.scene.addEventListener(\"oriented_images_added\", onOrientedImagesAdded);\n\t\tthis.viewer.scene.addEventListener(\"360_images_added\", onImages360Added);\n\t\tthis.viewer.scene.addEventListener(\"geopackage_added\", onGeopackageAdded);\n\t\tthis.viewer.scene.addEventListener(\"polygon_clip_volume_added\", onVolumeAdded);\n\t\tthis.viewer.scene.annotations.addEventListener(\"annotation_added\", onAnnotationAdded);\n\n\t\tlet onMeasurementRemoved = (e) => {\n\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.measurement.uuid);\n\t\t\t\n\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t};\n\n\t\tlet onVolumeRemoved = (e) => {\n\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid);\n\t\t\t\n\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t};\n\n\t\tlet onPolygonClipVolumeRemoved = (e) => {\n\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid);\n\t\t\t\n\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t};\n\n\t\tlet onProfileRemoved = (e) => {\n\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.profile.uuid);\n\t\t\t\n\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t};\n\n\t\tthis.viewer.scene.addEventListener(\"measurement_removed\", onMeasurementRemoved);\n\t\tthis.viewer.scene.addEventListener(\"volume_removed\", onVolumeRemoved);\n\t\tthis.viewer.scene.addEventListener(\"polygon_clip_volume_removed\", onPolygonClipVolumeRemoved);\n\t\tthis.viewer.scene.addEventListener(\"profile_removed\", onProfileRemoved);\n\n\t\t{\n\t\t\tlet annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`;\n\t\t\tthis.annotationMapping = new Map(); \n\t\t\tthis.annotationMapping.set(this.viewer.scene.annotations, annotationsID);\n\t\t\tthis.viewer.scene.annotations.traverseDescendants(annotation => {\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\t\t\t});\n\t\t}\n\n\t\tconst scene = this.viewer.scene;\n\t\tfor(let pointcloud of scene.pointclouds){\n\t\t\tonPointCloudAdded({pointcloud: pointcloud});\n\t\t}\n\n\t\tfor(let measurement of scene.measurements){\n\t\t\tonMeasurementAdded({measurement: measurement});\n\t\t}\n\n\t\tfor(let volume of [...scene.volumes, ...scene.polygonClipVolumes]){\n\t\t\tonVolumeAdded({volume: volume});\n\t\t}\n\n\t\tfor(let animation of scene.cameraAnimations){\n\t\t\tonCameraAnimationAdded({animation: animation});\n\t\t}\n\n\t\tfor(let images of scene.orientedImages){\n\t\t\tonOrientedImagesAdded({images: images});\n\t\t}\n\n\t\tfor(let images of scene.images360){\n\t\t\tonImages360Added({images: images});\n\t\t}\n\n\t\tfor(const geopackage of scene.geopackages){\n\t\t\tonGeopackageAdded({geopackage: geopackage});\n\t\t}\n\n\t\tfor(let profile of scene.profiles){\n\t\t\tonProfileAdded({profile: profile});\n\t\t}\n\n\t\t{\n\t\t\tcreateNode(otherID, \"Camera\", null, new THREE.Camera());\n\t\t}\n\n\t\tthis.viewer.addEventListener(\"scene_changed\", (e) => {\n\t\t\tpropertiesPanel.setScene(e.scene);\n\n\t\t\te.oldScene.removeEventListener(\"pointcloud_added\", onPointCloudAdded);\n\t\t\te.oldScene.removeEventListener(\"measurement_added\", onMeasurementAdded);\n\t\t\te.oldScene.removeEventListener(\"profile_added\", onProfileAdded);\n\t\t\te.oldScene.removeEventListener(\"volume_added\", onVolumeAdded);\n\t\t\te.oldScene.removeEventListener(\"polygon_clip_volume_added\", onVolumeAdded);\n\t\t\te.oldScene.removeEventListener(\"measurement_removed\", onMeasurementRemoved);\n\n\t\t\te.scene.addEventListener(\"pointcloud_added\", onPointCloudAdded);\n\t\t\te.scene.addEventListener(\"measurement_added\", onMeasurementAdded);\n\t\t\te.scene.addEventListener(\"profile_added\", onProfileAdded);\n\t\t\te.scene.addEventListener(\"volume_added\", onVolumeAdded);\n\t\t\te.scene.addEventListener(\"polygon_clip_volume_added\", onVolumeAdded);\n\t\t\te.scene.addEventListener(\"measurement_removed\", onMeasurementRemoved);\n\t\t});\n\n\t}\n\n\tinitClippingTool(){\n\n\n\t\tthis.viewer.addEventListener(\"cliptask_changed\", (event) => {\n\t\t\tconsole.log(\"TODO\");\n\t\t});\n\n\t\tthis.viewer.addEventListener(\"clipmethod_changed\", (event) => {\n\t\t\tconsole.log(\"TODO\");\n\t\t});\n\n\t\t{\n\t\t\tlet elClipTask = $(\"#cliptask_options\");\n\t\t\telClipTask.selectgroup({title: \"Clip Task\"});\n\n\t\t\telClipTask.find(\"input\").click( (e) => {\n\t\t\t\tthis.viewer.setClipTask(ClipTask[e.target.value]);\n\t\t\t});\n\n\t\t\tlet currentClipTask = Object.keys(ClipTask)\n\t\t\t\t.filter(key => ClipTask[key] === this.viewer.clipTask);\n\t\t\telClipTask.find(`input[value=${currentClipTask}]`).trigger(\"click\");\n\t\t}\n\n\t\t{\n\t\t\tlet elClipMethod = $(\"#clipmethod_options\");\n\t\t\telClipMethod.selectgroup({title: \"Clip Method\"});\n\n\t\t\telClipMethod.find(\"input\").click( (e) => {\n\t\t\t\tthis.viewer.setClipMethod(ClipMethod[e.target.value]);\n\t\t\t});\n\n\t\t\tlet currentClipMethod = Object.keys(ClipMethod)\n\t\t\t\t.filter(key => ClipMethod[key] === this.viewer.clipMethod);\n\t\t\telClipMethod.find(`input[value=${currentClipMethod}]`).trigger(\"click\");\n\t\t}\n\n\t\tlet clippingToolBar = $(\"#clipping_tools\");\n\n\t\t// CLIP VOLUME\n\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/clip_volume.svg',\n\t\t\t'[title]tt.clip_volume',\n\t\t\t() => {\n\t\t\t\tlet item = this.volumeTool.startInsertion({clip: true}); \n\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 === item.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t// CLIP POLYGON\n\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/clip-polygon.svg\",\n\t\t\t\"[title]tt.clip_polygon\",\n\t\t\t() => {\n\t\t\t\tlet item = this.viewer.clippingTool.startInsertion({type: \"polygon\"});\n\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 === item.uuid);\n\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t}\n\t\t));\n\n\t\t{// SCREEN BOX SELECT\n\t\t\tlet boxSelectTool = new ScreenBoxSelectTool(this.viewer);\n\n\t\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/clip-screen.svg\",\n\t\t\t\t\"[title]tt.screen_clip_box\",\n\t\t\t\t() => {\n\t\t\t\t\tif(!(this.viewer.scene.getActiveCamera() instanceof THREE.OrthographicCamera)){\n\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{duration: 2000});\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 item = boxSelectTool.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 === 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\t\t}\n\n\t\t{ // REMOVE CLIPPING TOOLS\n\t\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/remove.svg\",\n\t\t\t\t\"[title]tt.remove_all_clipping_volumes\",\n\t\t\t\t() => {\n\n\t\t\t\t\tthis.viewer.scene.removeAllClipVolumes();\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\n\t}\n\n\tinitFilters(){\n\t\tthis.initClassificationList();\n\t\tthis.initReturnFilters();\n\t\tthis.initGPSTimeFilters();\n\t\tthis.initPointSourceIDFilters();\n\n\t}\n\n\tinitReturnFilters(){\n\t\tlet elReturnFilterPanel = $('#return_filter_panel');\n\n\t\t{ // RETURN NUMBER\n\t\t\tlet sldReturnNumber = elReturnFilterPanel.find('#sldReturnNumber');\n\t\t\tlet lblReturnNumber = elReturnFilterPanel.find('#lblReturnNumber');\n\n\t\t\tsldReturnNumber.slider({\n\t\t\t\trange: true,\n\t\t\t\tmin: 0, max: 7, step: 1,\n\t\t\t\tvalues: [0, 7],\n\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\tthis.viewer.setFilterReturnNumberRange(ui.values[0], ui.values[1])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet onReturnNumberChanged = (event) => {\n\t\t\t\tlet [from, to] = this.viewer.filterReturnNumberRange;\n\n\t\t\t\tlblReturnNumber[0].innerHTML = `${from} to ${to}`;\n\t\t\t\tsldReturnNumber.slider({values: [from, to]});\n\t\t\t};\n\n\t\t\tthis.viewer.addEventListener('filter_return_number_range_changed', onReturnNumberChanged);\n\n\t\t\tonReturnNumberChanged();\n\t\t}\n\n\t\t{ // NUMBER OF RETURNS\n\t\t\tlet sldNumberOfReturns = elReturnFilterPanel.find('#sldNumberOfReturns');\n\t\t\tlet lblNumberOfReturns = elReturnFilterPanel.find('#lblNumberOfReturns');\n\n\t\t\tsldNumberOfReturns.slider({\n\t\t\t\trange: true,\n\t\t\t\tmin: 0, max: 7, step: 1,\n\t\t\t\tvalues: [0, 7],\n\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\tthis.viewer.setFilterNumberOfReturnsRange(ui.values[0], ui.values[1])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet onNumberOfReturnsChanged = (event) => {\n\t\t\t\tlet [from, to] = this.viewer.filterNumberOfReturnsRange;\n\n\t\t\t\tlblNumberOfReturns[0].innerHTML = `${from} to ${to}`;\n\t\t\t\tsldNumberOfReturns.slider({values: [from, to]});\n\t\t\t};\n\n\t\t\tthis.viewer.addEventListener('filter_number_of_returns_range_changed', onNumberOfReturnsChanged);\n\n\t\t\tonNumberOfReturnsChanged();\n\t\t}\n\t}\n\n\tinitGPSTimeFilters(){\n\n\t\tlet elGPSTimeFilterPanel = $('#gpstime_filter_panel');\n\n\t\t{\n\t\t\tlet slider = new HierarchicalSlider({\n\t\t\t\tlevels: 4,\n\t\t\t\tslide: (event) => {\n\t\t\t\t\tthis.viewer.setFilterGPSTimeRange(...event.values);\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tlet initialized = false;\n\n\t\t\tlet initialize = () => {\n\t\t\t\t\n\t\t\t\tlet elRangeContainer = $(\"#gpstime_multilevel_range_container\");\n\t\t\t\telRangeContainer[0].prepend(slider.element);\n\n\t\t\t\tlet extent = this.viewer.getGpsTimeExtent();\n\n\t\t\t\tslider.setRange(extent);\n\t\t\t\tslider.setValues(extent);\n\n\n\t\t\t\tinitialized = true;\n\t\t\t};\n\n\t\t\tthis.viewer.addEventListener(\"update\", (e) => {\n\t\t\t\tlet extent = this.viewer.getGpsTimeExtent();\n\t\t\t\tlet gpsTimeAvailable = extent[0] !== Infinity;\n\n\t\t\t\tif(!initialized && gpsTimeAvailable){\n\t\t\t\t\tinitialize();\n\t\t\t\t}\n\n\t\t\t\tslider.setRange(extent);\n\t\t\t});\n\t\t}\n\n\n\t\t{\n\t\t\t\n\t\t\tconst txtGpsTime = elGPSTimeFilterPanel.find(\"#txtGpsTime\");\n\t\t\tconst btnFindGpsTime = elGPSTimeFilterPanel.find(\"#btnFindGpsTime\");\n\n\t\t\tlet targetTime = null;\n\n\t\t\ttxtGpsTime.on(\"input\", (e) => {\n\t\t\t\tconst str = txtGpsTime.val();\n\n\t\t\t\tif(!isNaN(str)){\n\t\t\t\t\tconst value = parseFloat(str);\n\t\t\t\t\ttargetTime = value;\n\n\t\t\t\t\ttxtGpsTime.css(\"background-color\", \"\")\n\t\t\t\t}else{\n\t\t\t\t\ttargetTime = null;\n\n\t\t\t\t\ttxtGpsTime.css(\"background-color\", \"#ff9999\")\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\tbtnFindGpsTime.click( () => {\n\t\t\t\t\n\t\t\t\tif(targetTime !== null){\n\t\t\t\t\tviewer.moveToGpsTimeVicinity(targetTime);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t}\n\n\tinitPointSourceIDFilters() {\n\t\tlet elPointSourceIDFilterPanel = $('#pointsourceid_filter_panel');\n\n\t\t{\n\t\t\tlet slider = new HierarchicalSlider({\n\t\t\t\tlevels: 4,\n\t\t\t\trange: [0, 65535],\n\t\t\t\tprecision: 1,\n\t\t\t\tslide: (event) => {\n\t\t\t\t\tlet values = event.values;\n\t\t\t\t\tthis.viewer.setFilterPointSourceIDRange(values[0], values[1]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet initialized = false;\n\n\t\t\tlet initialize = () => {\n\t\t\t\telPointSourceIDFilterPanel[0].prepend(slider.element);\n\n\t\t\t\tinitialized = true;\n\t\t\t};\n\n\t\t\tthis.viewer.addEventListener(\"update\", (e) => {\n\t\t\t\tlet extent = this.viewer.filterPointSourceIDRange;\n\n\t\t\t\tif(!initialized){\n\t\t\t\t\tinitialize();\n\n\t\t\t\t\tslider.setValues(extent);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t}\n\n\t\t// let lblPointSourceID = elPointSourceIDFilterPanel.find(\"#lblPointSourceID\");\n\t\t// let elPointSourceID = elPointSourceIDFilterPanel.find(\"#spnPointSourceID\");\n\n\t\t// let slider = new ZoomableSlider();\n\t\t// elPointSourceID[0].appendChild(slider.element);\n\t\t// slider.update();\n\n\t\t// slider.change( () => {\n\t\t// \tlet range = slider.chosenRange;\n\t\t// \tthis.viewer.setFilterPointSourceIDRange(range[0], range[1]);\n\t\t// });\n\n\t\t// let onPointSourceIDExtentChanged = (event) => {\n\t\t// \tlet range = this.viewer.filterPointSourceIDExtent;\n\t\t// \tslider.setVisibleRange(range);\n\t\t// };\n\n\t\t// let onPointSourceIDChanged = (event) => {\n\t\t// \tlet range = this.viewer.filterPointSourceIDRange;\n\n\t\t// \tlet precision = 1;\n\t\t// \tlet from = `${Utils.addCommas(range[0].toFixed(precision))}`;\n\t\t// \tlet to = `${Utils.addCommas(range[1].toFixed(precision))}`;\n\t\t// \tlblPointSourceID[0].innerHTML = `${from} to ${to}`;\n\n\t\t// \tslider.setRange(range);\n\t\t// };\n\n\t\t// this.viewer.addEventListener('filter_point_source_id_range_changed', onPointSourceIDChanged);\n\t\t// this.viewer.addEventListener('filter_point_source_id_extent_changed', onPointSourceIDExtentChanged);\n\n\t}\n\n\tinitClassificationList(){\n\t\tlet elClassificationList = $('#classificationList');\n\n\t\tlet addClassificationItem = (code, name) => {\n\t\t\tconst classification = this.viewer.classifications[code];\n\t\t\tconst inputID = 'chkClassification_' + code;\n\t\t\tconst colorPickerID = 'colorPickerClassification_' + code;\n\n\t\t\tconst checked = classification.visible ? \"checked\" : \"\";\n\n\t\t\tlet element = $(`\n\t\t\t\t
      • \n\t\t\t\t\t\n\t\t\t\t
      • \n\t\t\t`);\n\n\t\t\tconst elInput = element.find('input');\n\t\t\tconst elColorPicker = element.find(`#${colorPickerID}`);\n\n\t\t\telInput.click(event => {\n\t\t\t\tthis.viewer.setClassificationVisibility(code, event.target.checked);\n\t\t\t});\n\n\t\t\tlet defaultColor = classification.color.map(c => c * 255).join(\", \");\n\t\t\tdefaultColor = `rgb(${defaultColor})`;\n\n\n\t\t\telColorPicker.spectrum({\n\t\t\t\t// flat: true,\n\t\t\t\tcolor: defaultColor,\n\t\t\t\tshowInput: true,\n\t\t\t\tpreferredFormat: 'rgb',\n\t\t\t\tcancelText: '',\n\t\t\t\tchooseText: 'Apply',\n\t\t\t\tmove: color => {\n\t\t\t\t\tlet rgb = color.toRgb();\n\t\t\t\t\tconst c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1];\n\t\t\t\t\tclassification.color = c;\n\t\t\t\t},\n\t\t\t\tchange: color => {\n\t\t\t\t\tlet rgb = color.toRgb();\n\t\t\t\t\tconst c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1];\n\t\t\t\t\tclassification.color = c;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\telClassificationList.append(element);\n\t\t};\n\n\t\tconst addToggleAllButton = () => { // toggle all button\n\t\t\tconst element = $(`\n\t\t\t\t
      • \n\t\t\t\t\t\n\t\t\t\t
      • \n\t\t\t`);\n\n\t\t\tlet elInput = element.find('input');\n\n\t\t\telInput.click(event => {\n\t\t\t\tthis.viewer.toggleAllClassificationsVisibility();\n\t\t\t});\n\n\t\t\telClassificationList.append(element);\n\t\t}\n\n\t\tconst addInvertButton = () => { \n\t\t\tconst element = $(`\n\t\t\t\t
      • \n\t\t\t\t\t\n\t\t\t\t
      • \n\t\t\t`);\n\n\t\t\tlet elInput = element.find('input');\n\n\t\t\telInput.click( () => {\n\t\t\t\tconst classifications = this.viewer.classifications;\n\t\n\t\t\t\tfor(let key of Object.keys(classifications)){\n\t\t\t\t\tlet value = classifications[key];\n\t\t\t\t\tthis.viewer.setClassificationVisibility(key, !value.visible);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\telClassificationList.append(element);\n\t\t};\n\n\t\tconst populate = () => {\n\t\t\taddToggleAllButton();\n\t\t\tfor (let classID in this.viewer.classifications) {\n\t\t\t\taddClassificationItem(classID, this.viewer.classifications[classID].name);\n\t\t\t}\n\t\t\taddInvertButton();\n\t\t};\n\n\t\tpopulate();\n\n\t\tthis.viewer.addEventListener(\"classifications_changed\", () => {\n\t\t\telClassificationList.empty();\n\t\t\tpopulate();\n\t\t});\n\n\t\tthis.viewer.addEventListener(\"classification_visibility_changed\", () => {\n\n\t\t\t{ // set checked state of classification buttons\n\t\t\t\tfor(const classID of Object.keys(this.viewer.classifications)){\n\t\t\t\t\tconst classValue = this.viewer.classifications[classID];\n\n\t\t\t\t\tlet elItem = elClassificationList.find(`#chkClassification_${classID}`);\n\t\t\t\t\telItem.prop(\"checked\", classValue.visible);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // set checked state of toggle button based on state of all other buttons\n\t\t\t\tlet numVisible = 0;\n\t\t\t\tlet numItems = 0;\n\t\t\t\tfor(const key of Object.keys(this.viewer.classifications)){\n\t\t\t\t\tif(this.viewer.classifications[key].visible){\n\t\t\t\t\t\tnumVisible++;\n\t\t\t\t\t}\n\t\t\t\t\tnumItems++;\n\t\t\t\t}\n\t\t\t\tconst allVisible = numVisible === numItems;\n\n\t\t\t\tlet elToggle = elClassificationList.find(\"#toggleClassificationFilters\");\n\t\t\t\telToggle.prop(\"checked\", allVisible);\n\t\t\t}\n\t\t});\n\t}\n\n\tinitAccordion(){\n\t\t$('.accordion > h3').each(function(){\n\t\t\tlet header = $(this);\n\t\t\tlet content = $(this).next();\n\n\t\t\t//header.addClass('accordion-header ui-widget');\n\t\t\t//content.addClass('accordion-content ui-widget');\n\n\t\t\tcontent.hide();\n\n\t\t\theader.click(() => {\n\t\t\t\tcontent.slideToggle();\n\t\t\t});\n\t\t});\n\n\t\tlet languages = [\n\t\t\t[\"EN\", \"en\"],\n\t\t\t[\"FR\", \"fr\"],\n\t\t\t[\"DE\", \"de\"],\n\t\t\t[\"JP\", \"jp\"],\n\t\t\t[\"ES\", \"es\"],\n\t\t\t[\"SE\", \"se\"],\n\t\t\t[\"ZH\", \"zh\"],\n\t\t\t[\"IT\", \"it\"]\n\t\t];\n\n\t\tlet elLanguages = $('#potree_languages');\n\t\tfor(let i = 0; i < languages.length; i++){\n\t\t\tlet [key, value] = languages[i];\n\t\t\tlet element = $(`${key}`);\n\t\t\telement.click(() => this.viewer.setLanguage(value));\n\n\t\t\tif(i === 0){\n\t\t\t\telement.css(\"margin-left\", \"30px\");\n\t\t\t}\n\t\t\t\n\t\t\telLanguages.append(element);\n\n\t\t\tif(i < languages.length - 1){\n\t\t\t\telLanguages.append($(document.createTextNode(' - ')));\t\n\t\t\t}\n\t\t}\n\n\n\t\t// to close all, call\n\t\t// $(\".accordion > div\").hide()\n\n\t\t// to open the, for example, tool menu, call:\n\t\t// $(\"#menu_tools\").next().show()\n\t}\n\n\tinitAppearance(){\n\n\t\tconst sldPointBudget = this.dom.find('#sldPointBudget');\n\n\t\tsldPointBudget.slider({\n\t\t\tvalue: this.viewer.getPointBudget(),\n\t\t\tmin: 100 * 1000,\n\t\t\tmax: 10 * 1000 * 1000,\n\t\t\tstep: 1000,\n\t\t\tslide: (event, ui) => { this.viewer.setPointBudget(ui.value); }\n\t\t});\n\n\t\tthis.dom.find('#sldFOV').slider({\n\t\t\tvalue: this.viewer.getFOV(),\n\t\t\tmin: 20,\n\t\t\tmax: 100,\n\t\t\tstep: 1,\n\t\t\tslide: (event, ui) => { this.viewer.setFOV(ui.value); }\n\t\t});\n\n\t\t$('#sldEDLRadius').slider({\n\t\t\tvalue: this.viewer.getEDLRadius(),\n\t\t\tmin: 1,\n\t\t\tmax: 4,\n\t\t\tstep: 0.01,\n\t\t\tslide: (event, ui) => { this.viewer.setEDLRadius(ui.value); }\n\t\t});\n\n\t\t$('#sldEDLStrength').slider({\n\t\t\tvalue: this.viewer.getEDLStrength(),\n\t\t\tmin: 0,\n\t\t\tmax: 5,\n\t\t\tstep: 0.01,\n\t\t\tslide: (event, ui) => { this.viewer.setEDLStrength(ui.value); }\n\t\t});\n\n\t\t$('#sldEDLOpacity').slider({\n\t\t\tvalue: this.viewer.getEDLOpacity(),\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t\tstep: 0.01,\n\t\t\tslide: (event, ui) => { this.viewer.setEDLOpacity(ui.value); }\n\t\t});\n\n\t\tthis.viewer.addEventListener('point_budget_changed', (event) => {\n\t\t\t$('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget());\n\t\t\tsldPointBudget.slider({value: this.viewer.getPointBudget()});\n\t\t});\n\n\t\tthis.viewer.addEventListener('fov_changed', (event) => {\n\t\t\t$('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV());\n\t\t\t$('#sldFOV').slider({value: this.viewer.getFOV()});\n\t\t});\n\n\t\tthis.viewer.addEventListener('use_edl_changed', (event) => {\n\t\t\t$('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled();\n\t\t});\n\n\t\tthis.viewer.addEventListener('edl_radius_changed', (event) => {\n\t\t\t$('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1);\n\t\t\t$('#sldEDLRadius').slider({value: this.viewer.getEDLRadius()});\n\t\t});\n\n\t\tthis.viewer.addEventListener('edl_strength_changed', (event) => {\n\t\t\t$('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1);\n\t\t\t$('#sldEDLStrength').slider({value: this.viewer.getEDLStrength()});\n\t\t});\n\n\t\tthis.viewer.addEventListener('background_changed', (event) => {\n\t\t\t$(\"input[name=background][value='\" + this.viewer.getBackground() + \"']\").prop('checked', true);\n\t\t});\n\n\t\t$('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget());\n\t\t$('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV());\n\t\t$('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1);\n\t\t$('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1);\n\t\t$('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled();\n\t\t\n\t\t{\n\t\t\tlet elBackground = $(`#background_options`);\n\t\t\telBackground.selectgroup();\n\n\t\t\telBackground.find(\"input\").click( (e) => {\n\t\t\t\tthis.viewer.setBackground(e.target.value);\n\t\t\t});\n\n\t\t\tlet currentBackground = this.viewer.getBackground();\n\t\t\t$(`input[name=background_options][value=${currentBackground}]`).trigger(\"click\");\n\t\t}\n\n\t\t$('#chkEDLEnabled').click( () => {\n\t\t\tthis.viewer.setEDLEnabled($('#chkEDLEnabled').prop(\"checked\"));\n\t\t});\n\t}\n\n\tinitNavigation(){\n\t\tlet elNavigation = $('#navigation');\n\t\tlet sldMoveSpeed = $('#sldMoveSpeed');\n\t\tlet lblMoveSpeed = $('#lblMoveSpeed');\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/earth_controls_1.png',\n\t\t\t'[title]tt.earth_control',\n\t\t\t() => { this.viewer.setControls(this.viewer.earthControls); }\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/fps_controls.svg',\n\t\t\t'[title]tt.flight_control',\n\t\t\t() => {\n\t\t\t\tthis.viewer.setControls(this.viewer.fpControls);\n\t\t\t\tthis.viewer.fpControls.lockElevation = false;\n\t\t\t}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/helicopter_controls.svg',\n\t\t\t'[title]tt.heli_control',\n\t\t\t() => { \n\t\t\t\tthis.viewer.setControls(this.viewer.fpControls);\n\t\t\t\tthis.viewer.fpControls.lockElevation = true;\n\t\t\t}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/orbit_controls.svg',\n\t\t\t'[title]tt.orbit_control',\n\t\t\t() => { this.viewer.setControls(this.viewer.orbitControls); }\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + '/icons/focus.svg',\n\t\t\t'[title]tt.focus_control',\n\t\t\t() => { this.viewer.fitToScreen(); }\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/navigation_cube.svg\",\n\t\t\t\"[title]tt.navigation_cube_control\",\n\t\t\t() => {this.viewer.toggleNavigationCube()}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/images/compas.svg\",\n\t\t\t\"[title]tt.compass\",\n\t\t\t() => {\n\t\t\t\tconst visible = !this.viewer.compass.isVisible();\n\t\t\t\tthis.viewer.compass.setVisible(visible);\n\t\t\t}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/camera_animation.svg\",\n\t\t\t\"[title]tt.camera_animation\",\n\t\t\t() => {\n\t\t\t\tconst animation = CameraAnimation.defaultFromView(this.viewer);\n\n\t\t\t\tviewer.scene.addCameraAnimation(animation);\n\t\t\t}\n\t\t));\n\n\n\t\telNavigation.append(\"
        \");\n\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/left.svg\",\n\t\t\t\"[title]tt.left_view_control\",\n\t\t\t() => {this.viewer.setLeftView()}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/right.svg\",\n\t\t\t\"[title]tt.right_view_control\",\n\t\t\t() => {this.viewer.setRightView()}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/front.svg\",\n\t\t\t\"[title]tt.front_view_control\",\n\t\t\t() => {this.viewer.setFrontView()}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/back.svg\",\n\t\t\t\"[title]tt.back_view_control\",\n\t\t\t() => {this.viewer.setBackView()}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/top.svg\",\n\t\t\t\"[title]tt.top_view_control\",\n\t\t\t() => {this.viewer.setTopView()}\n\t\t));\n\n\t\telNavigation.append(this.createToolIcon(\n\t\t\tPotree.resourcePath + \"/icons/bottom.svg\",\n\t\t\t\"[title]tt.bottom_view_control\",\n\t\t\t() => {this.viewer.setBottomView()}\n\t\t));\n\n\n\n\n\n\t\tlet elCameraProjection = $(`\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t`);\n\t\telNavigation.append(elCameraProjection);\n\t\telCameraProjection.selectgroup({title: \"Camera Projection\"});\n\t\telCameraProjection.find(\"input\").click( (e) => {\n\t\t\tthis.viewer.setCameraMode(CameraMode[e.target.value]);\n\t\t});\n\t\tlet cameraMode = Object.keys(CameraMode)\n\t\t\t.filter(key => CameraMode[key] === this.viewer.scene.cameraMode);\n\t\telCameraProjection.find(`input[value=${cameraMode}]`).trigger(\"click\");\n\n\t\tlet speedRange = new THREE.Vector2(1, 10 * 1000);\n\n\t\tlet toLinearSpeed = (value) => {\n\t\t\treturn Math.pow(value, 4) * speedRange.y + speedRange.x;\n\t\t};\n\n\t\tlet toExpSpeed = (value) => {\n\t\t\treturn Math.pow((value - speedRange.x) / speedRange.y, 1 / 4);\n\t\t};\n\n\t\tsldMoveSpeed.slider({\n\t\t\tvalue: toExpSpeed(this.viewer.getMoveSpeed()),\n\t\t\tmin: 0,\n\t\t\tmax: 1,\n\t\t\tstep: 0.01,\n\t\t\tslide: (event, ui) => { this.viewer.setMoveSpeed(toLinearSpeed(ui.value)); }\n\t\t});\n\n\t\tthis.viewer.addEventListener('move_speed_changed', (event) => {\n\t\t\tlblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1));\n\t\t\tsldMoveSpeed.slider({value: toExpSpeed(this.viewer.getMoveSpeed())});\n\t\t});\n\n\t\tlblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1));\n\t}\n\n\n\tinitSettings(){\n\n\t\t{\n\t\t\t$('#sldMinNodeSize').slider({\n\t\t\t\tvalue: this.viewer.getMinNodeSize(),\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1000,\n\t\t\t\tstep: 0.01,\n\t\t\t\tslide: (event, ui) => { this.viewer.setMinNodeSize(ui.value); }\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('minnodesize_changed', (event) => {\n\t\t\t\t$('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize()));\n\t\t\t\t$('#sldMinNodeSize').slider({value: this.viewer.getMinNodeSize()});\n\t\t\t});\n\t\t\t$('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize()));\n\t\t}\n\n\t\t{\n\t\t\tlet elSplatQuality = $(\"#splat_quality_options\");\n\t\t\telSplatQuality.selectgroup({title: \"Splat Quality\"});\n\n\t\t\telSplatQuality.find(\"input\").click( (e) => {\n\t\t\t\tif(e.target.value === \"standard\"){\n\t\t\t\t\tthis.viewer.useHQ = false;\n\t\t\t\t}else if(e.target.value === \"hq\"){\n\t\t\t\t\tthis.viewer.useHQ = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet currentQuality = this.viewer.useHQ ? \"hq\" : \"standard\";\n\t\t\telSplatQuality.find(`input[value=${currentQuality}]`).trigger(\"click\");\n\t\t}\n\n\t\t$('#show_bounding_box').click(() => {\n\t\t\tthis.viewer.setShowBoundingBox($('#show_bounding_box').prop(\"checked\"));\n\t\t});\n\n\t\t$('#set_freeze').click(() => {\n\t\t\tthis.viewer.setFreeze($('#set_freeze').prop(\"checked\"));\n\t\t});\n\t}\n\n}\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {Annotation} from \"../Annotation.js\";\nimport {Utils} from \"../utils.js\";\nimport {CameraMode} from \"../defines.js\";\nimport {EventDispatcher} from \"../EventDispatcher.js\";\n\nexport class AnnotationTool extends EventDispatcher{\n\tconstructor (viewer) {\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.sg = new THREE.SphereGeometry(0.1);\n\t\tthis.sm = new THREE.MeshNormalMaterial();\n\t\tthis.s = new THREE.Mesh(this.sg, this.sm);\n\t}\n\n\tstartInsertion (args = {}) {\n\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\tlet annotation = new Annotation({\n\t\t\tposition: [589748.270, 231444.540, 753.675],\n\t\t\ttitle: \"Annotation Title\",\n\t\t\tdescription: `Annotation Description`\n\t\t});\n\t\tthis.dispatchEvent({type: 'start_inserting_annotation', annotation: annotation});\n\n\t\tconst annotations = this.viewer.scene.annotations;\n\t\tannotations.add(annotation);\n\n\t\tlet callbacks = {\n\t\t\tcancel: null,\n\t\t\tfinish: null,\n\t\t};\n\n\t\tlet insertionCallback = (e) => {\n\t\t\tif (e.button === THREE.MOUSE.LEFT) {\n\t\t\t\tcallbacks.finish();\n\t\t\t} else if (e.button === THREE.MOUSE.RIGHT) {\n\t\t\t\tcallbacks.cancel();\n\t\t\t}\n\t\t};\n\n\t\tcallbacks.cancel = e => {\n\t\t\tannotations.remove(annotation);\n\n\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, true);\n\t\t};\n\n\t\tcallbacks.finish = e => {\n\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, true);\n\t\t};\n\n\t\tdomElement.addEventListener('mouseup', insertionCallback, true);\n\n\t\tlet drag = (e) => {\n\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\te.drag.end, \n\t\t\t\te.viewer.scene.getActiveCamera(), \n\t\t\t\te.viewer, \n\t\t\t\te.viewer.scene.pointclouds,\n\t\t\t\t{pickClipped: true});\n\n\t\t\tif (I) {\n\t\t\t\tthis.s.position.copy(I.location);\n\n\t\t\t\tannotation.position.copy(I.location);\n\t\t\t}\n\t\t};\n\n\t\tlet drop = (e) => {\n\t\t\tviewer.scene.scene.remove(this.s);\n\t\t\tthis.s.removeEventListener(\"drag\", drag);\n\t\t\tthis.s.removeEventListener(\"drop\", drop);\n\t\t};\n\n\t\tthis.s.addEventListener('drag', drag);\n\t\tthis.s.addEventListener('drop', drop);\n\n\t\tthis.viewer.scene.scene.add(this.s);\n\t\tthis.viewer.inputHandler.startDragging(this.s);\n\n\t\treturn annotation;\n\t}\n\t\n\tupdate(){\n\t\t// let camera = this.viewer.scene.getActiveCamera();\n\t\t// let domElement = this.renderer.domElement;\n\t\t// let measurements = this.viewer.scene.measurements;\n\n\t\t// const renderAreaSize = this.renderer.getSize(new THREE.Vector2());\n\t\t// let clientWidth = renderAreaSize.width;\n\t\t// let clientHeight = renderAreaSize.height;\n\n\t}\n\n\trender(){\n\t\t//this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t}\n};\n","/**\n * @author mschuetz / http://mschuetz.at\n *\n *\n */\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {KeyCodes} from \"../KeyCodes.js\";\nimport {Utils} from \"../utils.js\";\nimport {EventDispatcher} from \"../EventDispatcher.js\";\n\nexport class InputHandler extends EventDispatcher {\n\tconstructor (viewer) {\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\t\tthis.domElement = this.renderer.domElement;\n\t\tthis.enabled = true;\n\t\t\n\t\tthis.scene = null;\n\t\tthis.interactiveScenes = [];\n\t\tthis.interactiveObjects = new Set();\n\t\tthis.inputListeners = [];\n\t\tthis.blacklist = new Set();\n\n\t\tthis.drag = null;\n\t\tthis.mouse = new THREE.Vector2(0, 0);\n\n\t\tthis.selection = [];\n\n\t\tthis.hoveredElements = [];\n\t\tthis.pressedKeys = {};\n\n\t\tthis.wheelDelta = 0;\n\n\t\tthis.speed = 1;\n\n\t\tthis.logMessages = false;\n\n\t\tif (this.domElement.tabIndex === -1) {\n\t\t\tthis.domElement.tabIndex = 2222;\n\t\t}\n\n\t\tthis.domElement.addEventListener('contextmenu', (event) => { event.preventDefault(); }, false);\n\t\tthis.domElement.addEventListener('click', this.onMouseClick.bind(this), false);\n\t\tthis.domElement.addEventListener('mousedown', this.onMouseDown.bind(this), false);\n\t\tthis.domElement.addEventListener('mouseup', this.onMouseUp.bind(this), false);\n\t\tthis.domElement.addEventListener('mousemove', this.onMouseMove.bind(this), false);\n\t\tthis.domElement.addEventListener('mousewheel', this.onMouseWheel.bind(this), false);\n\t\tthis.domElement.addEventListener('DOMMouseScroll', this.onMouseWheel.bind(this), false); // Firefox\n\t\tthis.domElement.addEventListener('dblclick', this.onDoubleClick.bind(this));\n\t\tthis.domElement.addEventListener('keydown', this.onKeyDown.bind(this));\n\t\tthis.domElement.addEventListener('keyup', this.onKeyUp.bind(this));\n\t\tthis.domElement.addEventListener('touchstart', this.onTouchStart.bind(this));\n\t\tthis.domElement.addEventListener('touchend', this.onTouchEnd.bind(this));\n\t\tthis.domElement.addEventListener('touchmove', this.onTouchMove.bind(this));\n\t}\n\n\taddInputListener (listener) {\n\t\tthis.inputListeners.push(listener);\n\t}\n\n\tremoveInputListener (listener) {\n\t\tthis.inputListeners = this.inputListeners.filter(e => e !== listener);\n\t}\n\n\tgetSortedListeners(){\n\t\treturn this.inputListeners.sort( (a, b) => {\n\t\t\tlet ia = (a.importance !== undefined) ? a.importance : 0;\n\t\t\tlet ib = (b.importance !== undefined) ? b.importance : 0;\n\n\t\t\treturn ib - ia;\n\t\t});\n\t}\n\n\tonTouchStart (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onTouchStart');\n\n\t\te.preventDefault();\n\n\t\tif (e.touches.length === 1) {\n\t\t\tlet rect = this.domElement.getBoundingClientRect();\n\t\t\tlet x = e.touches[0].pageX - rect.left;\n\t\t\tlet y = e.touches[0].pageY - rect.top;\n\t\t\tthis.mouse.set(x, y);\n\n\t\t\tthis.startDragging(null);\n\t\t}\n\n\t\t\n\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\tinputListener.dispatchEvent({\n\t\t\t\ttype: e.type,\n\t\t\t\ttouches: e.touches,\n\t\t\t\tchangedTouches: e.changedTouches\n\t\t\t});\n\t\t}\n\t}\n\n\tonTouchEnd (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onTouchEnd');\n\n\t\te.preventDefault();\n\n\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\tinputListener.dispatchEvent({\n\t\t\t\ttype: 'drop',\n\t\t\t\tdrag: this.drag,\n\t\t\t\tviewer: this.viewer\n\t\t\t});\n\t\t}\n\n\t\tthis.drag = null;\n\n\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\tinputListener.dispatchEvent({\n\t\t\t\ttype: e.type,\n\t\t\t\ttouches: e.touches,\n\t\t\t\tchangedTouches: e.changedTouches\n\t\t\t});\n\t\t}\n\t}\n\n\tonTouchMove (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onTouchMove');\n\n\t\te.preventDefault();\n\n\t\tif (e.touches.length === 1) {\n\t\t\tlet rect = this.domElement.getBoundingClientRect();\n\t\t\tlet x = e.touches[0].pageX - rect.left;\n\t\t\tlet y = e.touches[0].pageY - rect.top;\n\t\t\tthis.mouse.set(x, y);\n\n\t\t\tif (this.drag) {\n\t\t\t\tthis.drag.mouse = 1;\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.logMessages) console.log(this.constructor.name + ': drag: ');\n\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\tinputListener.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}\n\t\t\t}\n\t\t}\n\n\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\tinputListener.dispatchEvent({\n\t\t\t\ttype: e.type,\n\t\t\t\ttouches: e.touches,\n\t\t\t\tchangedTouches: e.changedTouches\n\t\t\t});\n\t\t}\n\n\t\t// DEBUG CODE\n\t\t// let debugTouches = [...e.touches, {\n\t\t//\tpageX: this.domElement.clientWidth / 2,\n\t\t//\tpageY: this.domElement.clientHeight / 2}];\n\t\t// for(let inputListener of this.getSortedListeners()){\n\t\t//\tinputListener.dispatchEvent({\n\t\t//\t\ttype: e.type,\n\t\t//\t\ttouches: debugTouches,\n\t\t//\t\tchangedTouches: e.changedTouches\n\t\t//\t});\n\t\t// }\n\t}\n\n\tonKeyDown (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onKeyDown');\n\n\t\t// DELETE\n\t\tif (e.keyCode === KeyCodes.DELETE && this.selection.length > 0) {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'delete',\n\t\t\t\tselection: this.selection\n\t\t\t});\n\n\t\t\tthis.deselectAll();\n\t\t}\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'keydown',\n\t\t\tkeyCode: e.keyCode,\n\t\t\tevent: e\n\t\t});\n\n\t\t// for(let l of this.getSortedListeners()){\n\t\t//\tl.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\t\t// }\n\n\t\tthis.pressedKeys[e.keyCode] = true;\n\n\t\t// e.preventDefault();\n\t}\n\n\tonKeyUp (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onKeyUp');\n\n\t\tdelete this.pressedKeys[e.keyCode];\n\n\t\te.preventDefault();\n\t}\n\n\tonDoubleClick (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onDoubleClick');\n\n\t\tlet consumed = false;\n\t\tfor (let hovered of this.hoveredElements) {\n\t\t\tif (hovered._listeners && hovered._listeners['dblclick']) {\n\t\t\t\thovered.object.dispatchEvent({\n\t\t\t\t\ttype: 'dblclick',\n\t\t\t\t\tmouse: this.mouse,\n\t\t\t\t\tobject: hovered.object\n\t\t\t\t});\n\t\t\t\tconsumed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!consumed) {\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: 'dblclick',\n\t\t\t\t\tmouse: this.mouse,\n\t\t\t\t\tobject: null\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\te.preventDefault();\n\t}\n\n\tonMouseClick (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onMouseClick');\n\n\t\te.preventDefault();\n\t}\n\n\tonMouseDown (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onMouseDown');\n\n\t\te.preventDefault();\n\n\t\tlet consumed = false;\n\t\tlet consume = () => { return consumed = true; };\n\t\tif (this.hoveredElements.length === 0) {\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: 'mousedown',\n\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\tmouse: this.mouse\n\t\t\t\t});\n\t\t\t}\n\t\t}else{\n\t\t\tfor(let hovered of this.hoveredElements){\n\t\t\t\tlet object = hovered.object;\n\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\ttype: 'mousedown',\n\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\tconsume: consume\n\t\t\t\t});\n\n\t\t\t\tif(consumed){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!this.drag) {\n\t\t\tlet target = this.hoveredElements\n\t\t\t\t.find(el => (\n\t\t\t\t\tel.object._listeners &&\n\t\t\t\t\tel.object._listeners['drag'] &&\n\t\t\t\t\tel.object._listeners['drag'].length > 0));\n\n\t\t\tif (target) {\n\t\t\t\tthis.startDragging(target.object, {location: target.point});\n\t\t\t} else {\n\t\t\t\tthis.startDragging(null);\n\t\t\t}\n\t\t}\n\n\t\tif (this.scene) {\n\t\t\tthis.viewStart = this.scene.view.clone();\n\t\t}\n\t}\n\n\tonMouseUp (e) {\n\t\tif (this.logMessages) console.log(this.constructor.name + ': onMouseUp');\n\n\t\te.preventDefault();\n\n\t\tlet noMovement = this.getNormalizedDrag().length() === 0;\n\n\t\t\n\t\tlet consumed = false;\n\t\tlet consume = () => { return consumed = true; };\n\t\tif (this.hoveredElements.length === 0) {\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: 'mouseup',\n\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\tmouse: this.mouse,\n\t\t\t\t\tconsume: consume\n\t\t\t\t});\n\n\t\t\t\tif(consumed){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tlet hovered = this.hoveredElements\n\t\t\t\t.map(e => e.object)\n\t\t\t\t.find(e => (e._listeners && e._listeners['mouseup']));\n\t\t\tif(hovered){\n\t\t\t\thovered.dispatchEvent({\n\t\t\t\t\ttype: 'mouseup',\n\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\tconsume: consume\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (this.drag) {\n\t\t\tif (this.drag.object) {\n\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: drop ${this.drag.object.name}`);\n\t\t\t\tthis.drag.object.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\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: 'drop',\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}\n\t\t\t}\n\n\t\t\t// check for a click\n\t\t\tlet clicked = this.hoveredElements.map(h => h.object).find(v => v === this.drag.object) !== undefined;\n\t\t\tif(clicked){\n\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: click ${this.drag.object.name}`);\n\t\t\t\tthis.drag.object.dispatchEvent({\n\t\t\t\t\ttype: 'click',\n\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\tconsume: consume,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.drag = null;\n\t\t}\n\n\t\tif(!consumed){\n\t\t\tif (e.button === THREE.MOUSE.LEFT) {\n\t\t\t\tif (noMovement) {\n\t\t\t\t\tlet selectable = this.hoveredElements\n\t\t\t\t\t\t.find(el => el.object._listeners && el.object._listeners['select']);\n\n\t\t\t\t\tif (selectable) {\n\t\t\t\t\t\tselectable = selectable.object;\n\n\t\t\t\t\t\tif (this.isSelected(selectable)) {\n\t\t\t\t\t\t\tthis.selection\n\t\t\t\t\t\t\t\t.filter(e => e !== selectable)\n\t\t\t\t\t\t\t\t.forEach(e => this.toggleSelection(e));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.deselectAll();\n\t\t\t\t\t\t\tthis.toggleSelection(selectable);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.deselectAll();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if ((e.button === THREE.MOUSE.RIGHT) && noMovement) {\n\t\t\t\tthis.deselectAll();\n\t\t\t}\n\t\t}\n\t}\n\n\tonMouseMove (e) {\n\t\te.preventDefault();\n\n\t\tlet rect = this.domElement.getBoundingClientRect();\n\t\tlet x = e.clientX - rect.left;\n\t\tlet y = e.clientY - rect.top;\n\t\tthis.mouse.set(x, y);\n\n\t\tlet hoveredElements = this.getHoveredElements();\n\t\tif(hoveredElements.length > 0){\n\t\t\tlet names = hoveredElements.map(h => h.object.name).join(\", \");\n\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: onMouseMove; hovered: '${names}'`);\n\t\t}\n\n\t\tif (this.drag) {\n\t\t\tthis.drag.mouse = e.buttons;\n\n\t\t\tthis.drag.lastDrag.x = x - this.drag.end.x;\n\t\t\tthis.drag.lastDrag.y = y - this.drag.end.y;\n\n\t\t\tthis.drag.end.set(x, y);\n\n\t\t\tif (this.drag.object) {\n\t\t\t\tif (this.logMessages) console.log(this.constructor.name + ': drag: ' + this.drag.object.name);\n\t\t\t\tthis.drag.object.dispatchEvent({\n\t\t\t\t\ttype: 'drag',\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} else {\n\t\t\t\tif (this.logMessages) console.log(this.constructor.name + ': drag: ');\n\n\t\t\t\tlet dragConsumed = false;\n\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\tinputListener.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\tconsume: () => {dragConsumed = true;}\n\t\t\t\t\t});\n\n\t\t\t\t\tif(dragConsumed){\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}else{\n\t\t\tlet curr = hoveredElements.map(a => a.object).find(a => true);\n\t\t\tlet prev = this.hoveredElements.map(a => a.object).find(a => true);\n\n\t\t\tif(curr !== prev){\n\t\t\t\tif(curr){\n\t\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: mouseover: ${curr.name}`);\n\t\t\t\t\tcurr.dispatchEvent({\n\t\t\t\t\t\ttype: 'mouseover',\n\t\t\t\t\t\tobject: curr,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(prev){\n\t\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: mouseleave: ${prev.name}`);\n\t\t\t\t\tprev.dispatchEvent({\n\t\t\t\t\t\ttype: 'mouseleave',\n\t\t\t\t\t\tobject: prev,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(hoveredElements.length > 0){\n\t\t\t\tlet object = hoveredElements\n\t\t\t\t\t.map(e => e.object)\n\t\t\t\t\t.find(e => (e._listeners && e._listeners['mousemove']));\n\t\t\t\t\n\t\t\t\tif(object){\n\t\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\t\ttype: 'mousemove',\n\t\t\t\t\t\tobject: object\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\t\n\t\t// for (let inputListener of this.getSortedListeners()) {\n\t\t// \tinputListener.dispatchEvent({\n\t\t// \t\ttype: 'mousemove',\n\t\t// \t\tobject: null\n\t\t// \t});\n\t\t// }\n\t\t\n\n\t\tthis.hoveredElements = hoveredElements;\n\t}\n\t\n\tonMouseWheel(e){\n\t\tif(!this.enabled) return;\n\n\t\tif(this.logMessages) console.log(this.constructor.name + \": onMouseWheel\");\n\t\t\n\t\te.preventDefault();\n\n\t\tlet delta = 0;\n\t\tif (e.wheelDelta !== undefined) { // WebKit / Opera / Explorer 9\n\t\t\tdelta = e.wheelDelta;\n\t\t} else if (e.detail !== undefined) { // Firefox\n\t\t\tdelta = -e.detail;\n\t\t}\n\n\t\tlet ndelta = Math.sign(delta);\n\n\t\t// this.wheelDelta += Math.sign(delta);\n\n\t\tif (this.hoveredElement) {\n\t\t\tthis.hoveredElement.object.dispatchEvent({\n\t\t\t\ttype: 'mousewheel',\n\t\t\t\tdelta: ndelta,\n\t\t\t\tobject: this.hoveredElement.object\n\t\t\t});\n\t\t} else {\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: 'mousewheel',\n\t\t\t\t\tdelta: ndelta,\n\t\t\t\t\tobject: null\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tstartDragging (object, args = null) {\n\n\t\tlet name = object ? object.name : \"no name\";\n\t\tif (this.logMessages) console.log(`${this.constructor.name}: startDragging: '${name}'`);\n\n\t\tthis.drag = {\n\t\t\tstart: this.mouse.clone(),\n\t\t\tend: this.mouse.clone(),\n\t\t\tlastDrag: new THREE.Vector2(0, 0),\n\t\t\tstartView: this.scene.view.clone(),\n\t\t\tobject: object\n\t\t};\n\n\t\tif (args) {\n\t\t\tfor (let key of Object.keys(args)) {\n\t\t\t\tthis.drag[key] = args[key];\n\t\t\t}\n\t\t}\n\t}\n\n\tgetMousePointCloudIntersection (mouse) {\n\t\treturn Utils.getMousePointCloudIntersection(\n\t\t\tthis.mouse, \n\t\t\tthis.scene.getActiveCamera(), \n\t\t\tthis.viewer, \n\t\t\tthis.scene.pointclouds);\n\t}\n\n\ttoggleSelection (object) {\n\t\tlet oldSelection = this.selection;\n\n\t\tlet index = this.selection.indexOf(object);\n\n\t\tif (index === -1) {\n\t\t\tthis.selection.push(object);\n\t\t\tobject.dispatchEvent({\n\t\t\t\ttype: 'select'\n\t\t\t});\n\t\t} else {\n\t\t\tthis.selection.splice(index, 1);\n\t\t\tobject.dispatchEvent({\n\t\t\t\ttype: 'deselect'\n\t\t\t});\n\t\t}\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'selection_changed',\n\t\t\toldSelection: oldSelection,\n\t\t\tselection: this.selection\n\t\t});\n\t}\n\n\tdeselect(object){\n\n\t\tlet oldSelection = this.selection;\n\n\t\tlet index = this.selection.indexOf(object);\n\n\t\tif(index >= 0){\n\t\t\tthis.selection.splice(index, 1);\n\t\t\tobject.dispatchEvent({\n\t\t\t\ttype: 'deselect'\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\t}\n\n\tdeselectAll () {\n\t\tfor (let object of this.selection) {\n\t\t\tobject.dispatchEvent({\n\t\t\t\ttype: 'deselect'\n\t\t\t});\n\t\t}\n\n\t\tlet oldSelection = this.selection;\n\n\t\tif (this.selection.length > 0) {\n\t\t\tthis.selection = [];\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\t}\n\n\tisSelected (object) {\n\t\tlet index = this.selection.indexOf(object);\n\n\t\treturn index !== -1;\n\t}\n\n\tregisterInteractiveObject(object){\n\t\tthis.interactiveObjects.add(object);\n\t}\n\n\tremoveInteractiveObject(object){\n\t\tthis.interactiveObjects.delete(object);\n\t}\n\n\tregisterInteractiveScene (scene) {\n\t\tlet index = this.interactiveScenes.indexOf(scene);\n\t\tif (index === -1) {\n\t\t\tthis.interactiveScenes.push(scene);\n\t\t}\n\t}\n\n\tunregisterInteractiveScene (scene) {\n\t\tlet index = this.interactiveScenes.indexOf(scene);\n\t\tif (index > -1) {\n\t\t\tthis.interactiveScenes.splice(index, 1);\n\t\t}\n\t}\n\n\tgetHoveredElement () {\n\t\tlet hoveredElements = this.getHoveredElements();\n\t\tif (hoveredElements.length > 0) {\n\t\t\treturn hoveredElements[0];\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tgetHoveredElements () {\n\t\tlet scenes = this.interactiveScenes.concat(this.scene.scene);\n\n\t\tlet interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect'];\n\t\tlet interactables = [];\n\t\tfor (let scene of scenes) {\n\t\t\tscene.traverseVisible(node => {\n\t\t\t\tif (node._listeners && node.visible && !this.blacklist.has(node)) {\n\t\t\t\t\tlet hasInteractableListener = interactableListeners.filter((e) => {\n\t\t\t\t\t\treturn node._listeners[e] !== undefined;\n\t\t\t\t\t}).length > 0;\n\n\t\t\t\t\tif (hasInteractableListener) {\n\t\t\t\t\t\tinteractables.push(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tlet camera = this.scene.getActiveCamera();\n\t\tlet ray = Utils.mouseToRay(this.mouse, camera, this.domElement.clientWidth, this.domElement.clientHeight);\n\t\t\n\t\tlet raycaster = new THREE.Raycaster();\n\t\traycaster.ray.set(ray.origin, ray.direction);\n\t\traycaster.params.Line.threshold = 0.2;\n\n\t\tlet intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), false);\n\n\t\treturn intersections;\n\t}\n\n\tsetScene (scene) {\n\t\tthis.deselectAll();\n\n\t\tthis.scene = scene;\n\t}\n\n\tupdate (delta) {\n\n\t}\n\n\tgetNormalizedDrag () {\n\t\tif (!this.drag) {\n\t\t\treturn new THREE.Vector2(0, 0);\n\t\t}\n\n\t\tlet diff = new THREE.Vector2().subVectors(this.drag.end, this.drag.start);\n\n\t\tdiff.x = diff.x / this.domElement.clientWidth;\n\t\tdiff.y = diff.y / this.domElement.clientHeight;\n\n\t\treturn diff;\n\t}\n\n\tgetNormalizedLastDrag () {\n\t\tif (!this.drag) {\n\t\t\treturn new THREE.Vector2(0, 0);\n\t\t}\n\n\t\tlet lastDrag = this.drag.lastDrag.clone();\n\n\t\tlastDrag.x = lastDrag.x / this.domElement.clientWidth;\n\t\tlastDrag.y = lastDrag.y / this.domElement.clientHeight;\n\n\t\treturn lastDrag;\n\t}\n}\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nexport class NavigationCube extends THREE.Object3D {\n\n\tconstructor(viewer){\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\n\t\tlet createPlaneMaterial = (img) => {\n\t\t\tlet material = new THREE.MeshBasicMaterial( {\n\t\t\t\tdepthTest: true, \n\t\t\t\tdepthWrite: true,\n\t\t\t\tside: THREE.DoubleSide\n\t\t\t});\n\t\t\tnew THREE.TextureLoader().load(\n\t\t\t\texports.resourcePath + '/textures/navigation/' + img,\n\t\t\t\tfunction(texture) {\n\t\t\t\t\ttexture.anisotropy = viewer.renderer.capabilities.getMaxAnisotropy();\n\t\t\t\t\tmaterial.map = texture;\n\t\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t});\n\t\t\treturn material;\n\t\t};\n\n\t\tlet planeGeometry = new THREE.PlaneGeometry(1, 1);\n\n\t\tthis.front = new THREE.Mesh(planeGeometry, createPlaneMaterial('F.png'));\n\t\tthis.front.position.y = -0.5;\n\t\tthis.front.rotation.x = Math.PI / 2.0;\n\t\tthis.front.updateMatrixWorld();\n\t\tthis.front.name = \"F\";\n\t\tthis.add(this.front);\n\n\t\tthis.back = new THREE.Mesh(planeGeometry, createPlaneMaterial('B.png'));\n\t\tthis.back.position.y = 0.5;\n\t\tthis.back.rotation.x = Math.PI / 2.0;\n\t\tthis.back.updateMatrixWorld();\n\t\tthis.back.name = \"B\";\n\t\tthis.add(this.back);\n\n\t\tthis.left = new THREE.Mesh(planeGeometry, createPlaneMaterial('L.png'));\n\t\tthis.left.position.x = -0.5;\n\t\tthis.left.rotation.y = Math.PI / 2.0;\n\t\tthis.left.updateMatrixWorld();\n\t\tthis.left.name = \"L\";\n\t\tthis.add(this.left);\n\n\t\tthis.right = new THREE.Mesh(planeGeometry, createPlaneMaterial('R.png'));\n\t\tthis.right.position.x = 0.5;\n\t\tthis.right.rotation.y = Math.PI / 2.0;\n\t\tthis.right.updateMatrixWorld();\n\t\tthis.right.name = \"R\";\n\t\tthis.add(this.right);\n\n\t\tthis.bottom = new THREE.Mesh(planeGeometry, createPlaneMaterial('D.png'));\n\t\tthis.bottom.position.z = -0.5;\n\t\tthis.bottom.updateMatrixWorld();\n\t\tthis.bottom.name = \"D\";\n\t\tthis.add(this.bottom);\n\n\t\tthis.top = new THREE.Mesh(planeGeometry, createPlaneMaterial('U.png'));\n\t\tthis.top.position.z = 0.5;\n\t\tthis.top.updateMatrixWorld();\n\t\tthis.top.name = \"U\";\n\t\tthis.add(this.top);\n\n\t\tthis.width = 150; // in px\n\n\t\tthis.camera = new THREE.OrthographicCamera(-1, 1, 1, -1, -1, 1);\n\t\tthis.camera.position.copy(new THREE.Vector3(0, 0, 0));\n\t\tthis.camera.lookAt(new THREE.Vector3(0, 1, 0));\n\t\tthis.camera.updateMatrixWorld();\n\t\tthis.camera.rotation.order = \"ZXY\";\n\n\t\tlet onMouseDown = (event) => {\n\t\t\tif (!this.visible) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis.pickedFace = null;\n\t\t\tlet mouse = new THREE.Vector2();\n\t\t\tmouse.x = event.clientX - (window.innerWidth - this.width);\n\t\t\tmouse.y = event.clientY;\n\n\t\t\tif(mouse.x < 0 || mouse.y > this.width) return;\n\n\t\t\tmouse.x = (mouse.x / this.width) * 2 - 1;\n\t\t\tmouse.y = -(mouse.y / this.width) * 2 + 1;\n\n\t\t\tlet raycaster = new THREE.Raycaster();\n\t\t\traycaster.setFromCamera(mouse, this.camera);\n\t\t\traycaster.ray.origin.sub(this.camera.getWorldDirection(new THREE.Vector3()));\n\n\t\t\tlet intersects = raycaster.intersectObjects(this.children);\n\n\t\t\tlet minDistance = 1000;\n\t\t\tfor (let i = 0; i < intersects.length; i++) {\n\t\t\t\tif(intersects[i].distance < minDistance) {\n\t\t\t\t\tthis.pickedFace = intersects[i].object.name;\n\t\t\t\t\tminDistance = intersects[i].distance;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(this.pickedFace) {\n\t\t\t\tthis.viewer.setView(this.pickedFace);\n\t\t\t}\n\t\t};\n\n\t\tthis.viewer.renderer.domElement.addEventListener('mousedown', onMouseDown, false);\n\t}\n\n\tupdate(rotation) {\n\t\tthis.camera.rotation.copy(rotation);\n\t\tthis.camera.updateMatrixWorld();\n\t}\n\n}\n","/**\n * @author mschuetz / http://mschuetz.at\n *\n * adapted from THREE.OrbitControls by\n *\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n *\n *\n *\n */\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {MOUSE} from \"../defines.js\";\nimport {Utils} from \"../utils.js\";\nimport {EventDispatcher} from \"../EventDispatcher.js\";\n\n \nexport class OrbitControls extends EventDispatcher{\n\t\n\tconstructor(viewer){\n\t\tsuper();\n\t\t\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.scene = null;\n\t\tthis.sceneControls = new THREE.Scene();\n\n\t\tthis.rotationSpeed = 5;\n\n\t\tthis.fadeFactor = 20;\n\t\tthis.yawDelta = 0;\n\t\tthis.pitchDelta = 0;\n\t\tthis.panDelta = new THREE.Vector2(0, 0);\n\t\tthis.radiusDelta = 0;\n\n\t\tthis.doubleClockZoomEnabled = true;\n\n\t\tthis.tweens = [];\n\n\t\tlet drag = (e) => {\n\t\t\tif (e.drag.object !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.drag.startHandled === undefined) {\n\t\t\t\te.drag.startHandled = true;\n\n\t\t\t\tthis.dispatchEvent({type: 'start'});\n\t\t\t}\n\n\t\t\tlet ndrag = {\n\t\t\t\tx: e.drag.lastDrag.x / this.renderer.domElement.clientWidth,\n\t\t\t\ty: e.drag.lastDrag.y / this.renderer.domElement.clientHeight\n\t\t\t};\n\n\t\t\tif (e.drag.mouse === MOUSE.LEFT) {\n\t\t\t\tthis.yawDelta += ndrag.x * this.rotationSpeed;\n\t\t\t\tthis.pitchDelta += ndrag.y * this.rotationSpeed;\n\n\t\t\t\tthis.stopTweens();\n\t\t\t} else if (e.drag.mouse === MOUSE.RIGHT) {\n\t\t\t\tthis.panDelta.x += ndrag.x;\n\t\t\t\tthis.panDelta.y += ndrag.y;\n\n\t\t\t\tthis.stopTweens();\n\t\t\t}\n\t\t};\n\n\t\tlet drop = e => {\n\t\t\tthis.dispatchEvent({type: 'end'});\n\t\t};\n\n\t\tlet scroll = (e) => {\n\t\t\tlet resolvedRadius = this.scene.view.radius + this.radiusDelta;\n\n\t\t\tthis.radiusDelta += -e.delta * resolvedRadius * 0.1;\n\n\t\t\tthis.stopTweens();\n\t\t};\n\n\t\tlet dblclick = (e) => {\n\t\t\tif(this.doubleClockZoomEnabled){\n\t\t\t\tthis.zoomToLocation(e.mouse);\n\t\t\t}\n\t\t};\n\n\t\tlet previousTouch = null;\n\t\tlet touchStart = e => {\n\t\t\tpreviousTouch = e;\n\t\t};\n\n\t\tlet touchEnd = e => {\n\t\t\tpreviousTouch = e;\n\t\t};\n\n\t\tlet touchMove = e => {\n\t\t\tif (e.touches.length === 2 && previousTouch.touches.length === 2){\n\t\t\t\tlet prev = previousTouch;\n\t\t\t\tlet curr = e;\n\n\t\t\t\tlet prevDX = prev.touches[0].pageX - prev.touches[1].pageX;\n\t\t\t\tlet prevDY = prev.touches[0].pageY - prev.touches[1].pageY;\n\t\t\t\tlet prevDist = Math.sqrt(prevDX * prevDX + prevDY * prevDY);\n\n\t\t\t\tlet currDX = curr.touches[0].pageX - curr.touches[1].pageX;\n\t\t\t\tlet currDY = curr.touches[0].pageY - curr.touches[1].pageY;\n\t\t\t\tlet currDist = Math.sqrt(currDX * currDX + currDY * currDY);\n\n\t\t\t\tlet delta = currDist / prevDist;\n\t\t\t\tlet resolvedRadius = this.scene.view.radius + this.radiusDelta;\n\t\t\t\tlet newRadius = resolvedRadius / delta;\n\t\t\t\tthis.radiusDelta = newRadius - resolvedRadius;\n\n\t\t\t\tthis.stopTweens();\n\t\t\t}else if(e.touches.length === 3 && previousTouch.touches.length === 3){\n\t\t\t\tlet prev = previousTouch;\n\t\t\t\tlet curr = e;\n\n\t\t\t\tlet prevMeanX = (prev.touches[0].pageX + prev.touches[1].pageX + prev.touches[2].pageX) / 3;\n\t\t\t\tlet prevMeanY = (prev.touches[0].pageY + prev.touches[1].pageY + prev.touches[2].pageY) / 3;\n\n\t\t\t\tlet currMeanX = (curr.touches[0].pageX + curr.touches[1].pageX + curr.touches[2].pageX) / 3;\n\t\t\t\tlet currMeanY = (curr.touches[0].pageY + curr.touches[1].pageY + curr.touches[2].pageY) / 3;\n\n\t\t\t\tlet delta = {\n\t\t\t\t\tx: (currMeanX - prevMeanX) / this.renderer.domElement.clientWidth,\n\t\t\t\t\ty: (currMeanY - prevMeanY) / this.renderer.domElement.clientHeight\n\t\t\t\t};\n\n\t\t\t\tthis.panDelta.x += delta.x;\n\t\t\t\tthis.panDelta.y += delta.y;\n\n\t\t\t\tthis.stopTweens();\n\t\t\t}\n\n\t\t\tpreviousTouch = e;\n\t\t};\n\n\t\tthis.addEventListener('touchstart', touchStart);\n\t\tthis.addEventListener('touchend', touchEnd);\n\t\tthis.addEventListener('touchmove', touchMove);\n\t\tthis.addEventListener('drag', drag);\n\t\tthis.addEventListener('drop', drop);\n\t\tthis.addEventListener('mousewheel', scroll);\n\t\tthis.addEventListener('dblclick', dblclick);\n\t}\n\n\tsetScene (scene) {\n\t\tthis.scene = scene;\n\t}\n\n\tstop(){\n\t\tthis.yawDelta = 0;\n\t\tthis.pitchDelta = 0;\n\t\tthis.radiusDelta = 0;\n\t\tthis.panDelta.set(0, 0);\n\t}\n\t\n\tzoomToLocation(mouse){\n\t\tlet camera = this.scene.getActiveCamera();\n\t\t\n\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\tmouse,\n\t\t\tcamera,\n\t\t\tthis.viewer,\n\t\t\tthis.scene.pointclouds,\n\t\t\t{pickClipped: true});\n\n\t\tif (I === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet targetRadius = 0;\n\t\t{\n\t\t\tlet minimumJumpDistance = 0.2;\n\n\t\t\tlet domElement = this.renderer.domElement;\n\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\tlet nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray);\n\t\t\tlet lastNode = nodes[nodes.length - 1];\n\t\t\tlet radius = lastNode.getBoundingSphere(new THREE.Sphere()).radius;\n\t\t\ttargetRadius = Math.min(this.scene.view.radius, radius);\n\t\t\ttargetRadius = Math.max(minimumJumpDistance, targetRadius);\n\t\t}\n\n\t\tlet d = this.scene.view.direction.multiplyScalar(-1);\n\t\tlet cameraTargetPosition = new THREE.Vector3().addVectors(I.location, d.multiplyScalar(targetRadius));\n\t\t// TODO Unused: let controlsTargetPosition = I.location;\n\n\t\tlet animationDuration = 600;\n\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t{ // animate\n\t\t\tlet value = {x: 0};\n\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, animationDuration);\n\t\t\ttween.easing(easing);\n\t\t\tthis.tweens.push(tween);\n\n\t\t\tlet startPos = this.scene.view.position.clone();\n\t\t\tlet targetPos = cameraTargetPosition.clone();\n\t\t\tlet startRadius = this.scene.view.radius;\n\t\t\tlet targetRadius = cameraTargetPosition.distanceTo(I.location);\n\n\t\t\ttween.onUpdate(() => {\n\t\t\t\tlet t = value.x;\n\t\t\t\tthis.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x;\n\t\t\t\tthis.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y;\n\t\t\t\tthis.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z;\n\n\t\t\t\tthis.scene.view.radius = (1 - t) * startRadius + t * targetRadius;\n\t\t\t\tthis.viewer.setMoveSpeed(this.scene.view.radius);\n\t\t\t});\n\n\t\t\ttween.onComplete(() => {\n\t\t\t\tthis.tweens = this.tweens.filter(e => e !== tween);\n\t\t\t});\n\n\t\t\ttween.start();\n\t\t}\n\t}\n\n\tstopTweens () {\n\t\tthis.tweens.forEach(e => e.stop());\n\t\tthis.tweens = [];\n\t}\n\n\tupdate (delta) {\n\t\tlet view = this.scene.view;\n\n\t\t{ // apply rotation\n\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\n\t\t\tlet yaw = view.yaw;\n\t\t\tlet pitch = view.pitch;\n\t\t\tlet pivot = view.getPivot();\n\n\t\t\tyaw -= progression * this.yawDelta;\n\t\t\tpitch -= progression * this.pitchDelta;\n\n\t\t\tview.yaw = yaw;\n\t\t\tview.pitch = pitch;\n\n\t\t\tlet V = this.scene.view.direction.multiplyScalar(-view.radius);\n\t\t\tlet position = new THREE.Vector3().addVectors(pivot, V);\n\n\t\t\tview.position.copy(position);\n\t\t}\n\n\t\t{ // apply pan\n\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\t\t\tlet panDistance = progression * view.radius * 3;\n\n\t\t\tlet px = -this.panDelta.x * panDistance;\n\t\t\tlet py = this.panDelta.y * panDistance;\n\n\t\t\tview.pan(px, py);\n\t\t}\n\n\t\t{ // apply zoom\n\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\n\t\t\t// let radius = view.radius + progression * this.radiusDelta * view.radius * 0.1;\n\t\t\tlet radius = view.radius + progression * this.radiusDelta;\n\n\t\t\tlet V = view.direction.multiplyScalar(-radius);\n\t\t\tlet position = new THREE.Vector3().addVectors(view.getPivot(), V);\n\t\t\tview.radius = radius;\n\n\t\t\tview.position.copy(position);\n\t\t}\n\n\t\t{\n\t\t\tlet speed = view.radius;\n\t\t\tthis.viewer.setMoveSpeed(speed);\n\t\t}\n\n\t\t{ // decelerate over time\n\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\t\t\tlet attenuation = Math.max(0, 1 - this.fadeFactor * delta);\n\n\t\t\tthis.yawDelta *= attenuation;\n\t\t\tthis.pitchDelta *= attenuation;\n\t\t\tthis.panDelta.multiplyScalar(attenuation);\n\t\t\t// this.radiusDelta *= attenuation;\n\t\t\tthis.radiusDelta -= progression * this.radiusDelta;\n\t\t}\n\t}\n};\n","/**\n * @author mschuetz / http://mschuetz.at\n *\n * adapted from THREE.OrbitControls by\n *\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n *\n *\n *\n */\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {MOUSE} from \"../defines.js\";\nimport {Utils} from \"../utils.js\";\nimport {EventDispatcher} from \"../EventDispatcher.js\";\n\n\nexport class FirstPersonControls extends EventDispatcher {\n\tconstructor (viewer) {\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.scene = null;\n\t\tthis.sceneControls = new THREE.Scene();\n\n\t\tthis.rotationSpeed = 200;\n\t\tthis.moveSpeed = 10;\n\t\tthis.lockElevation = false;\n\n\t\tthis.keys = {\n\t\t\tFORWARD: ['W'.charCodeAt(0), 38],\n\t\t\tBACKWARD: ['S'.charCodeAt(0), 40],\n\t\t\tLEFT: ['A'.charCodeAt(0), 37],\n\t\t\tRIGHT: ['D'.charCodeAt(0), 39],\n\t\t\tUP: ['R'.charCodeAt(0), 33],\n\t\t\tDOWN: ['F'.charCodeAt(0), 34]\n\t\t};\n\n\t\tthis.fadeFactor = 50;\n\t\tthis.yawDelta = 0;\n\t\tthis.pitchDelta = 0;\n\t\tthis.translationDelta = new THREE.Vector3(0, 0, 0);\n\t\tthis.translationWorldDelta = new THREE.Vector3(0, 0, 0);\n\n\t\tthis.tweens = [];\n\n\t\tlet drag = (e) => {\n\t\t\tif (e.drag.object !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.drag.startHandled === undefined) {\n\t\t\t\te.drag.startHandled = true;\n\n\t\t\t\tthis.dispatchEvent({type: 'start'});\n\t\t\t}\n\n\t\t\tlet moveSpeed = this.viewer.getMoveSpeed();\n\n\t\t\tlet ndrag = {\n\t\t\t\tx: e.drag.lastDrag.x / this.renderer.domElement.clientWidth,\n\t\t\t\ty: e.drag.lastDrag.y / this.renderer.domElement.clientHeight\n\t\t\t};\n\n\t\t\tif (e.drag.mouse === MOUSE.LEFT) {\n\t\t\t\tthis.yawDelta += ndrag.x * this.rotationSpeed;\n\t\t\t\tthis.pitchDelta += ndrag.y * this.rotationSpeed;\n\t\t\t} else if (e.drag.mouse === MOUSE.RIGHT) {\n\t\t\t\tthis.translationDelta.x -= ndrag.x * moveSpeed * 100;\n\t\t\t\tthis.translationDelta.z += ndrag.y * moveSpeed * 100;\n\t\t\t}\n\t\t};\n\n\t\tlet drop = e => {\n\t\t\tthis.dispatchEvent({type: 'end'});\n\t\t};\n\n\t\tlet scroll = (e) => {\n\t\t\tlet speed = this.viewer.getMoveSpeed();\n\n\t\t\tif (e.delta < 0) {\n\t\t\t\tspeed = speed * 0.9;\n\t\t\t} else if (e.delta > 0) {\n\t\t\t\tspeed = speed / 0.9;\n\t\t\t}\n\n\t\t\tspeed = Math.max(speed, 0.1);\n\n\t\t\tthis.viewer.setMoveSpeed(speed);\n\t\t};\n\n\t\tlet dblclick = (e) => {\n\t\t\tthis.zoomToLocation(e.mouse);\n\t\t};\n\n\t\tthis.addEventListener('drag', drag);\n\t\tthis.addEventListener('drop', drop);\n\t\tthis.addEventListener('mousewheel', scroll);\n\t\tthis.addEventListener('dblclick', dblclick);\n\t}\n\n\tsetScene (scene) {\n\t\tthis.scene = scene;\n\t}\n\n\tstop(){\n\t\tthis.yawDelta = 0;\n\t\tthis.pitchDelta = 0;\n\t\tthis.translationDelta.set(0, 0, 0);\n\t}\n\t\n\tzoomToLocation(mouse){\n\t\tlet camera = this.scene.getActiveCamera();\n\t\t\n\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\tmouse,\n\t\t\tcamera,\n\t\t\tthis.viewer,\n\t\t\tthis.scene.pointclouds);\n\n\t\tif (I === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet targetRadius = 0;\n\t\t{\n\t\t\tlet minimumJumpDistance = 0.2;\n\n\t\t\tlet domElement = this.renderer.domElement;\n\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\tlet nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray);\n\t\t\tlet lastNode = nodes[nodes.length - 1];\n\t\t\tlet radius = lastNode.getBoundingSphere(new THREE.Sphere()).radius;\n\t\t\ttargetRadius = Math.min(this.scene.view.radius, radius);\n\t\t\ttargetRadius = Math.max(minimumJumpDistance, targetRadius);\n\t\t}\n\n\t\tlet d = this.scene.view.direction.multiplyScalar(-1);\n\t\tlet cameraTargetPosition = new THREE.Vector3().addVectors(I.location, d.multiplyScalar(targetRadius));\n\t\t// TODO Unused: let controlsTargetPosition = I.location;\n\n\t\tlet animationDuration = 600;\n\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t{ // animate\n\t\t\tlet value = {x: 0};\n\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, animationDuration);\n\t\t\ttween.easing(easing);\n\t\t\tthis.tweens.push(tween);\n\n\t\t\tlet startPos = this.scene.view.position.clone();\n\t\t\tlet targetPos = cameraTargetPosition.clone();\n\t\t\tlet startRadius = this.scene.view.radius;\n\t\t\tlet targetRadius = cameraTargetPosition.distanceTo(I.location);\n\n\t\t\ttween.onUpdate(() => {\n\t\t\t\tlet t = value.x;\n\t\t\t\tthis.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x;\n\t\t\t\tthis.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y;\n\t\t\t\tthis.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z;\n\n\t\t\t\tthis.scene.view.radius = (1 - t) * startRadius + t * targetRadius;\n\t\t\t\tthis.viewer.setMoveSpeed(this.scene.view.radius / 2.5);\n\t\t\t});\n\n\t\t\ttween.onComplete(() => {\n\t\t\t\tthis.tweens = this.tweens.filter(e => e !== tween);\n\t\t\t});\n\n\t\t\ttween.start();\n\t\t}\n\t}\n\n\tupdate (delta) {\n\t\tlet view = this.scene.view;\n\n\t\t{ // cancel move animations on user input\n\t\t\tlet changes = [ this.yawDelta,\n\t\t\t\tthis.pitchDelta,\n\t\t\t\tthis.translationDelta.length(),\n\t\t\t\tthis.translationWorldDelta.length() ];\n\t\t\tlet changeHappens = changes.some(e => Math.abs(e) > 0.001);\n\t\t\tif (changeHappens && this.tweens.length > 0) {\n\t\t\t\tthis.tweens.forEach(e => e.stop());\n\t\t\t\tthis.tweens = [];\n\t\t\t}\n\t\t}\n\n\t\t{ // accelerate while input is given\n\t\t\tlet ih = this.viewer.inputHandler;\n\n\t\t\tlet moveForward = this.keys.FORWARD.some(e => ih.pressedKeys[e]);\n\t\t\tlet moveBackward = this.keys.BACKWARD.some(e => ih.pressedKeys[e]);\n\t\t\tlet moveLeft = this.keys.LEFT.some(e => ih.pressedKeys[e]);\n\t\t\tlet moveRight = this.keys.RIGHT.some(e => ih.pressedKeys[e]);\n\t\t\tlet moveUp = this.keys.UP.some(e => ih.pressedKeys[e]);\n\t\t\tlet moveDown = this.keys.DOWN.some(e => ih.pressedKeys[e]);\n\n\t\t\tif(this.lockElevation){\n\t\t\t\tlet dir = view.direction;\n\t\t\t\tdir.z = 0;\n\t\t\t\tdir.normalize();\n\n\t\t\t\tif (moveForward && moveBackward) {\n\t\t\t\t\tthis.translationWorldDelta.set(0, 0, 0);\n\t\t\t\t} else if (moveForward) {\n\t\t\t\t\tthis.translationWorldDelta.copy(dir.multiplyScalar(this.viewer.getMoveSpeed()));\n\t\t\t\t} else if (moveBackward) {\n\t\t\t\t\tthis.translationWorldDelta.copy(dir.multiplyScalar(-this.viewer.getMoveSpeed()));\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif (moveForward && moveBackward) {\n\t\t\t\t\tthis.translationDelta.y = 0;\n\t\t\t\t} else if (moveForward) {\n\t\t\t\t\tthis.translationDelta.y = this.viewer.getMoveSpeed();\n\t\t\t\t} else if (moveBackward) {\n\t\t\t\t\tthis.translationDelta.y = -this.viewer.getMoveSpeed();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (moveLeft && moveRight) {\n\t\t\t\tthis.translationDelta.x = 0;\n\t\t\t} else if (moveLeft) {\n\t\t\t\tthis.translationDelta.x = -this.viewer.getMoveSpeed();\n\t\t\t} else if (moveRight) {\n\t\t\t\tthis.translationDelta.x = this.viewer.getMoveSpeed();\n\t\t\t}\n\n\t\t\tif (moveUp && moveDown) {\n\t\t\t\tthis.translationWorldDelta.z = 0;\n\t\t\t} else if (moveUp) {\n\t\t\t\tthis.translationWorldDelta.z = this.viewer.getMoveSpeed();\n\t\t\t} else if (moveDown) {\n\t\t\t\tthis.translationWorldDelta.z = -this.viewer.getMoveSpeed();\n\t\t\t}\n\t\t}\n\n\t\t{ // apply rotation\n\t\t\tlet yaw = view.yaw;\n\t\t\tlet pitch = view.pitch;\n\n\t\t\tyaw -= this.yawDelta * delta;\n\t\t\tpitch -= this.pitchDelta * delta;\n\n\t\t\tview.yaw = yaw;\n\t\t\tview.pitch = pitch;\n\t\t}\n\n\t\t{ // apply translation\n\t\t\tview.translate(\n\t\t\t\tthis.translationDelta.x * delta,\n\t\t\t\tthis.translationDelta.y * delta,\n\t\t\t\tthis.translationDelta.z * delta\n\t\t\t);\n\n\t\t\tview.translateWorld(\n\t\t\t\tthis.translationWorldDelta.x * delta,\n\t\t\t\tthis.translationWorldDelta.y * delta,\n\t\t\t\tthis.translationWorldDelta.z * delta\n\t\t\t);\n\t\t}\n\n\t\t{ // set view target according to speed\n\t\t\tview.radius = 3 * this.viewer.getMoveSpeed();\n\t\t}\n\n\t\t{ // decelerate over time\n\t\t\tlet attenuation = Math.max(0, 1 - this.fadeFactor * delta);\n\t\t\tthis.yawDelta *= attenuation;\n\t\t\tthis.pitchDelta *= attenuation;\n\t\t\tthis.translationDelta.multiplyScalar(attenuation);\n\t\t\tthis.translationWorldDelta.multiplyScalar(attenuation);\n\t\t}\n\t}\n};\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {MOUSE} from \"../defines.js\";\nimport {Utils} from \"../utils.js\";\nimport {EventDispatcher} from \"../EventDispatcher.js\";\n\nexport class EarthControls extends EventDispatcher {\n\tconstructor (viewer) {\n\t\tsuper(viewer);\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.scene = null;\n\t\tthis.sceneControls = new THREE.Scene();\n\n\t\tthis.rotationSpeed = 10;\n\n\t\tthis.fadeFactor = 20;\n\t\tthis.wheelDelta = 0;\n\t\tthis.zoomDelta = new THREE.Vector3();\n\t\tthis.camStart = null;\n\n\t\tthis.tweens = [];\n\n\t\t{\n\t\t\tlet sg = new THREE.SphereGeometry(1, 16, 16);\n\t\t\tlet sm = new THREE.MeshNormalMaterial();\n\t\t\tthis.pivotIndicator = new THREE.Mesh(sg, sm);\n\t\t\tthis.pivotIndicator.visible = false;\n\t\t\tthis.sceneControls.add(this.pivotIndicator);\n\t\t}\n\n\t\tlet drag = (e) => {\n\t\t\tif (e.drag.object !== null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.pivot) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.drag.startHandled === undefined) {\n\t\t\t\te.drag.startHandled = true;\n\n\t\t\t\tthis.dispatchEvent({type: 'start'});\n\t\t\t}\n\n\t\t\tlet camStart = this.camStart;\n\t\t\tlet camera = this.scene.getActiveCamera();\n\t\t\tlet view = this.viewer.scene.view;\n\n\t\t\t// let camera = this.viewer.scene.camera;\n\t\t\tlet mouse = e.drag.end;\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\t\tif (e.drag.mouse === MOUSE.LEFT) {\n\n\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\tlet plane = new THREE.Plane().setFromNormalAndCoplanarPoint(\n\t\t\t\t\tnew THREE.Vector3(0, 0, 1),\n\t\t\t\t\tthis.pivot);\n\n\t\t\t\tlet distanceToPlane = ray.distanceToPlane(plane);\n\n\t\t\t\tif (distanceToPlane > 0) {\n\t\t\t\t\tlet I = new THREE.Vector3().addVectors(\n\t\t\t\t\t\tcamStart.position,\n\t\t\t\t\t\tray.direction.clone().multiplyScalar(distanceToPlane));\n\n\t\t\t\t\tlet movedBy = new THREE.Vector3().subVectors(\n\t\t\t\t\t\tI, this.pivot);\n\n\t\t\t\t\tlet newCamPos = camStart.position.clone().sub(movedBy);\n\n\t\t\t\t\tview.position.copy(newCamPos);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet distance = newCamPos.distanceTo(this.pivot);\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} else if (e.drag.mouse === MOUSE.RIGHT) {\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\tlet yawDelta = -ndrag.x * this.rotationSpeed * 0.5;\n\t\t\t\tlet pitchDelta = -ndrag.y * this.rotationSpeed * 0.2;\n\n\t\t\t\tlet originalPitch = view.pitch;\n\t\t\t\tlet tmpView = view.clone();\n\t\t\t\ttmpView.pitch = tmpView.pitch + pitchDelta;\n\t\t\t\tpitchDelta = tmpView.pitch - originalPitch;\n\n\t\t\t\tlet pivotToCam = new THREE.Vector3().subVectors(view.position, this.pivot);\n\t\t\t\tlet pivotToCamTarget = new THREE.Vector3().subVectors(view.getPivot(), this.pivot);\n\t\t\t\tlet side = view.getSide();\n\n\t\t\t\tpivotToCam.applyAxisAngle(side, pitchDelta);\n\t\t\t\tpivotToCamTarget.applyAxisAngle(side, pitchDelta);\n\n\t\t\t\tpivotToCam.applyAxisAngle(new THREE.Vector3(0, 0, 1), yawDelta);\n\t\t\t\tpivotToCamTarget.applyAxisAngle(new THREE.Vector3(0, 0, 1), yawDelta);\n\n\t\t\t\tlet newCam = new THREE.Vector3().addVectors(this.pivot, pivotToCam);\n\t\t\t\t// TODO: Unused: let newCamTarget = new THREE.Vector3().addVectors(this.pivot, pivotToCamTarget);\n\n\t\t\t\tview.position.copy(newCam);\n\t\t\t\tview.yaw += yawDelta;\n\t\t\t\tview.pitch += pitchDelta;\n\t\t\t}\n\t\t};\n\n\t\tlet onMouseDown = e => {\n\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\te.mouse, \n\t\t\t\tthis.scene.getActiveCamera(), \n\t\t\t\tthis.viewer, \n\t\t\t\tthis.scene.pointclouds, \n\t\t\t\t{pickClipped: false});\n\n\t\t\tif (I) {\n\t\t\t\tthis.pivot = I.location;\n\t\t\t\tthis.camStart = this.scene.getActiveCamera().clone();\n\t\t\t\tthis.pivotIndicator.visible = true;\n\t\t\t\tthis.pivotIndicator.position.copy(I.location);\n\t\t\t}\n\t\t};\n\n\t\tlet drop = e => {\n\t\t\tthis.dispatchEvent({type: 'end'});\n\t\t};\n\n\t\tlet onMouseUp = e => {\n\t\t\tthis.camStart = null;\n\t\t\tthis.pivot = null;\n\t\t\tthis.pivotIndicator.visible = false;\n\t\t};\n\n\t\tlet scroll = (e) => {\n\t\t\tthis.wheelDelta += e.delta;\n\t\t};\n\n\t\tlet dblclick = (e) => {\n\t\t\tthis.zoomToLocation(e.mouse);\n\t\t};\n\n\t\tthis.addEventListener('drag', drag);\n\t\tthis.addEventListener('drop', drop);\n\t\tthis.addEventListener('mousewheel', scroll);\n\t\tthis.addEventListener('mousedown', onMouseDown);\n\t\tthis.addEventListener('mouseup', onMouseUp);\n\t\tthis.addEventListener('dblclick', dblclick);\n\t}\n\n\tsetScene (scene) {\n\t\tthis.scene = scene;\n\t}\n\n\tstop(){\n\t\tthis.wheelDelta = 0;\n\t\tthis.zoomDelta.set(0, 0, 0);\n\t}\n\t\n\tzoomToLocation(mouse){\n\t\tlet camera = this.scene.getActiveCamera();\n\t\t\n\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\tmouse,\n\t\t\tcamera,\n\t\t\tthis.viewer,\n\t\t\tthis.scene.pointclouds);\n\n\t\tif (I === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet targetRadius = 0;\n\t\t{\n\t\t\tlet minimumJumpDistance = 0.2;\n\n\t\t\tlet domElement = this.renderer.domElement;\n\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\tlet nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray);\n\t\t\tlet lastNode = nodes[nodes.length - 1];\n\t\t\tlet radius = lastNode.getBoundingSphere(new THREE.Sphere()).radius;\n\t\t\ttargetRadius = Math.min(this.scene.view.radius, radius);\n\t\t\ttargetRadius = Math.max(minimumJumpDistance, targetRadius);\n\t\t}\n\n\t\tlet d = this.scene.view.direction.multiplyScalar(-1);\n\t\tlet cameraTargetPosition = new THREE.Vector3().addVectors(I.location, d.multiplyScalar(targetRadius));\n\t\t// TODO Unused: let controlsTargetPosition = I.location;\n\n\t\tlet animationDuration = 600;\n\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t{ // animate\n\t\t\tlet value = {x: 0};\n\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, animationDuration);\n\t\t\ttween.easing(easing);\n\t\t\tthis.tweens.push(tween);\n\n\t\t\tlet startPos = this.scene.view.position.clone();\n\t\t\tlet targetPos = cameraTargetPosition.clone();\n\t\t\tlet startRadius = this.scene.view.radius;\n\t\t\tlet targetRadius = cameraTargetPosition.distanceTo(I.location);\n\n\t\t\ttween.onUpdate(() => {\n\t\t\t\tlet t = value.x;\n\t\t\t\tthis.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x;\n\t\t\t\tthis.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y;\n\t\t\t\tthis.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z;\n\n\t\t\t\tthis.scene.view.radius = (1 - t) * startRadius + t * targetRadius;\n\t\t\t\tthis.viewer.setMoveSpeed(this.scene.view.radius / 2.5);\n\t\t\t});\n\n\t\t\ttween.onComplete(() => {\n\t\t\t\tthis.tweens = this.tweens.filter(e => e !== tween);\n\t\t\t});\n\n\t\t\ttween.start();\n\t\t}\n\t}\n\n\tupdate (delta) {\n\t\tlet view = this.scene.view;\n\t\tlet fade = Math.pow(0.5, this.fadeFactor * delta);\n\t\tlet progression = 1 - fade;\n\t\tlet camera = this.scene.getActiveCamera();\n\t\t\n\t\t// compute zoom\n\t\tif (this.wheelDelta !== 0) {\n\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\tthis.viewer.inputHandler.mouse, \n\t\t\t\tthis.scene.getActiveCamera(), \n\t\t\t\tthis.viewer, \n\t\t\t\tthis.scene.pointclouds);\n\n\t\t\tif (I) {\n\t\t\t\tlet resolvedPos = new THREE.Vector3().addVectors(view.position, this.zoomDelta);\n\t\t\t\tlet distance = I.location.distanceTo(resolvedPos);\n\t\t\t\tlet jumpDistance = distance * 0.2 * this.wheelDelta;\n\t\t\t\tlet targetDir = new THREE.Vector3().subVectors(I.location, view.position);\n\t\t\t\ttargetDir.normalize();\n\n\t\t\t\tresolvedPos.add(targetDir.multiplyScalar(jumpDistance));\n\t\t\t\tthis.zoomDelta.subVectors(resolvedPos, view.position);\n\n\t\t\t\t{\n\t\t\t\t\tlet distance = resolvedPos.distanceTo(I.location);\n\t\t\t\t\tview.radius = distance;\n\t\t\t\t\tlet speed = view.radius / 2.5;\n\t\t\t\t\tthis.viewer.setMoveSpeed(speed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// apply zoom\n\t\tif (this.zoomDelta.length() !== 0) {\n\t\t\tlet p = this.zoomDelta.clone().multiplyScalar(progression);\n\n\t\t\tlet newPos = new THREE.Vector3().addVectors(view.position, p);\n\t\t\tview.position.copy(newPos);\n\t\t}\n\n\t\tif (this.pivotIndicator.visible) {\n\t\t\tlet distance = this.pivotIndicator.position.distanceTo(view.position);\n\t\t\tlet pixelwidth = this.renderer.domElement.clientwidth;\n\t\t\tlet pixelHeight = this.renderer.domElement.clientHeight;\n\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, pixelwidth, pixelHeight);\n\t\t\tlet scale = (10 / pr);\n\t\t\tthis.pivotIndicator.scale.set(scale, scale, scale);\n\t\t}\n\n\t\t// decelerate over time\n\t\t{\n\t\t\tthis.zoomDelta.multiplyScalar(fade);\n\t\t\tthis.wheelDelta = 0;\n\t\t}\n\t}\n};\n","/**\n * @author chrisl / Geodan\n *\n * adapted from Potree.FirstPersonControls by\n *\n * @author mschuetz / http://mschuetz.at\n *\n * and THREE.DeviceOrientationControls by\n *\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n *\n *\n */\n\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {EventDispatcher} from \"../EventDispatcher.js\";\n\nexport class DeviceOrientationControls extends EventDispatcher{\n\tconstructor(viewer){\n\t\tsuper();\n\n\t\tthis.viewer = viewer;\n\t\tthis.renderer = viewer.renderer;\n\n\t\tthis.scene = null;\n\t\tthis.sceneControls = new THREE.Scene();\n\n\t\tthis.screenOrientation = window.orientation || 0;\n\n\t\tlet deviceOrientationChange = e => {\n\t\t\tthis.deviceOrientation = e;\n\t\t};\n\n\t\tlet screenOrientationChange = e => {\n\t\t\tthis.screenOrientation = window.orientation || 0;\n\t\t};\n\n\t\tif ('ondeviceorientationabsolute' in window) {\n\t\t\twindow.addEventListener('deviceorientationabsolute', deviceOrientationChange);\n\t\t} else if ('ondeviceorientation' in window) {\n\t\t\twindow.addEventListener('deviceorientation', deviceOrientationChange);\n\t\t} else {\n\t\t\tconsole.warn(\"No device orientation found.\");\n\t\t}\n\t\t// window.addEventListener('deviceorientation', deviceOrientationChange);\n\t\twindow.addEventListener('orientationchange', screenOrientationChange);\n\t}\n\n\tsetScene (scene) {\n\t\tthis.scene = scene;\n\t}\n\n\tupdate (delta) {\n\t\tlet computeQuaternion = function (alpha, beta, gamma, orient) {\n\t\t\tlet quaternion = new THREE.Quaternion();\n\n\t\t\tlet zee = new THREE.Vector3(0, 0, 1);\n\t\t\tlet euler = new THREE.Euler();\n\t\t\tlet q0 = new THREE.Quaternion();\n\n\t\t\teuler.set(beta, gamma, alpha, 'ZXY');\n\t\t\tquaternion.setFromEuler(euler);\n\t\t\tquaternion.multiply(q0.setFromAxisAngle(zee, -orient));\n\n\t\t\treturn quaternion;\n\t\t};\n\n\t\tif (typeof this.deviceOrientation !== 'undefined') {\n\t\t\tlet alpha = this.deviceOrientation.alpha ? THREE.Math.degToRad(this.deviceOrientation.alpha) : 0;\n\t\t\tlet beta = this.deviceOrientation.beta ? THREE.Math.degToRad(this.deviceOrientation.beta) : 0;\n\t\t\tlet gamma = this.deviceOrientation.gamma ? THREE.Math.degToRad(this.deviceOrientation.gamma) : 0;\n\t\t\tlet orient = this.screenOrientation ? THREE.Math.degToRad(this.screenOrientation) : 0;\n\n\t\t\tlet quaternion = computeQuaternion(alpha, beta, gamma, orient);\n\t\t\tviewer.scene.cameraP.quaternion.set(quaternion.x, quaternion.y, quaternion.z, quaternion.w);\n\t\t}\n\t}\n};\n","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 ', specularMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapParsFragmentChunk )\n\t\t\t\t.replace( '#include ', specularMapFragmentChunk )\n\t\t\t\t.replace( '#include ', glossinessMapFragmentChunk )\n\t\t\t\t.replace( '#include ', 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} targets\n\t * @param {GLTFParser} parser\n\t * @return {Promise}\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}\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>}\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}\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}\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}\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}\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}\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}\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} primitives\n\t * @return {Promise>}\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}\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}\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}\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}\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}\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}\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","/**\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","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","\r\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\r\nimport {EventDispatcher} from \"../EventDispatcher.js\";\r\nimport { XRControllerModelFactory } from '../../libs/three.js/webxr/XRControllerModelFactory.js';\r\nimport {Line2} from \"../../libs/three.js/lines/Line2.js\";\r\nimport {LineGeometry} from \"../../libs/three.js/lines/LineGeometry.js\";\r\nimport {LineMaterial} from \"../../libs/three.js/lines/LineMaterial.js\";\r\n\r\nlet fakeCam = new THREE.PerspectiveCamera();\r\n\r\nfunction toScene(vec, ref){\r\n\tlet node = ref.clone();\r\n\tnode.updateMatrix();\r\n\tnode.updateMatrixWorld();\r\n\r\n\tlet result = vec.clone().applyMatrix4(node.matrix);\r\n\tresult.z -= 0.8 * node.scale.x;\r\n\r\n\treturn result;\r\n};\r\n\r\nfunction computeMove(vrControls, controller){\r\n\r\n\tif(!controller || !controller.inputSource || !controller.inputSource.gamepad){\r\n\t\treturn null;\r\n\t}\r\n\r\n\tlet pad = controller.inputSource.gamepad;\r\n\r\n\tlet axes = pad.axes;\r\n\t// [0,1] are for touchpad, [2,3] for thumbsticks?\r\n\tlet y = 0;\r\n\tif(axes.length === 2){\r\n\t\ty = axes[1];\r\n\t}else if(axes.length === 4){\r\n\t\ty = axes[3];\r\n\t}\r\n\r\n\ty = Math.sign(y) * (2 * y) ** 2;\r\n\r\n\tlet maxSize = 0;\r\n\tfor(let pc of viewer.scene.pointclouds){\r\n\t\tlet size = pc.boundingBox.min.distanceTo(pc.boundingBox.max);\r\n\t\tmaxSize = Math.max(maxSize, size);\r\n\t}\r\n\tlet multiplicator = Math.pow(maxSize, 0.5) / 2;\r\n\r\n\tlet scale = vrControls.node.scale.x;\r\n\tlet moveSpeed = viewer.getMoveSpeed();\r\n\tlet amount = multiplicator * y * (moveSpeed ** 0.5) / scale;\r\n\r\n\r\n\tlet rotation = new THREE.Quaternion().setFromEuler(controller.rotation);\r\n\tlet dir = new THREE.Vector3(0, 0, -1);\r\n\tdir.applyQuaternion(rotation);\r\n\r\n\tlet move = dir.clone().multiplyScalar(amount);\r\n\r\n\tlet p1 = vrControls.toScene(controller.position);\r\n\tlet p2 = vrControls.toScene(controller.position.clone().add(move));\r\n\r\n\tmove = p2.clone().sub(p1);\r\n\t\r\n\treturn move;\r\n};\r\n\r\n\r\nclass FlyMode{\r\n\r\n\tconstructor(vrControls){\r\n\t\tthis.moveFactor = 1;\r\n\t\tthis.dbgLabel = null;\r\n\t}\r\n\r\n\tstart(vrControls){\r\n\t\tif(!this.dbgLabel){\r\n\t\t\tthis.dbgLabel = new Potree.TextSprite(\"abc\");\r\n\t\t\tthis.dbgLabel.name = \"debug label\";\r\n\t\t\tvrControls.viewer.sceneVR.add(this.dbgLabel);\r\n\t\t\tthis.dbgLabel.visible = false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tend(){\r\n\r\n\t}\r\n\r\n\tupdate(vrControls, delta){\r\n\r\n\t\tlet primary = vrControls.cPrimary;\r\n\t\tlet secondary = vrControls.cSecondary;\r\n\r\n\t\tlet move1 = computeMove(vrControls, primary);\r\n\t\tlet move2 = computeMove(vrControls, secondary);\r\n\r\n\r\n\t\tif(!move1){\r\n\t\t\tmove1 = new THREE.Vector3();\r\n\t\t}\r\n\r\n\t\tif(!move2){\r\n\t\t\tmove2 = new THREE.Vector3();\r\n\t\t}\r\n\r\n\t\tlet move = move1.clone().add(move2);\r\n\r\n\t\tmove.multiplyScalar(-delta * this.moveFactor);\r\n\t\tvrControls.node.position.add(move);\r\n\t\t\r\n\r\n\t\tlet scale = vrControls.node.scale.x;\r\n\r\n\t\tlet camVR = vrControls.viewer.renderer.xr.getCamera(fakeCam);\r\n\t\t\r\n\t\tlet vrPos = camVR.getWorldPosition(new THREE.Vector3());\r\n\t\tlet vrDir = camVR.getWorldDirection(new THREE.Vector3());\r\n\t\tlet vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale));\r\n\r\n\t\tlet scenePos = toScene(vrPos, vrControls.node);\r\n\t\tlet sceneDir = toScene(vrPos.clone().add(vrDir), vrControls.node).sub(scenePos);\r\n\t\tsceneDir.normalize().multiplyScalar(scale);\r\n\t\tlet sceneTarget = scenePos.clone().add(sceneDir);\r\n\r\n\t\tvrControls.viewer.scene.view.setView(scenePos, sceneTarget);\r\n\r\n\t\tif(Potree.debug.message){\r\n\t\t\tthis.dbgLabel.visible = true;\r\n\t\t\tthis.dbgLabel.setText(Potree.debug.message);\r\n\t\t\tthis.dbgLabel.scale.set(0.1, 0.1, 0.1);\r\n\t\t\tthis.dbgLabel.position.copy(primary.position);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nclass TranslationMode{\r\n\r\n\tconstructor(){\r\n\t\tthis.controller = null;\r\n\t\tthis.startPos = null;\r\n\t\tthis.debugLine = null;\r\n\t}\r\n\r\n\tstart(vrControls){\r\n\t\tthis.controller = vrControls.triggered.values().next().value;\r\n\t\tthis.startPos = vrControls.node.position.clone();\r\n\t}\r\n\t\r\n\tend(vrControls){\r\n\r\n\t}\r\n\r\n\tupdate(vrControls, delta){\r\n\r\n\t\tlet start = this.controller.start.position;\r\n\t\tlet end = this.controller.position;\r\n\r\n\t\tstart = vrControls.toScene(start);\r\n\t\tend = vrControls.toScene(end);\r\n\r\n\t\tlet diff = end.clone().sub(start);\r\n\t\tdiff.set(-diff.x, -diff.y, -diff.z);\r\n\r\n\t\tlet pos = new THREE.Vector3().addVectors(this.startPos, diff);\r\n\r\n\t\tvrControls.node.position.copy(pos);\r\n\t}\r\n\r\n};\r\n\r\nclass RotScaleMode{\r\n\r\n\tconstructor(){\r\n\t\tthis.line = null;\r\n\t\tthis.startState = null;\r\n\t}\r\n\r\n\tstart(vrControls){\r\n\t\tif(!this.line){\r\n\t\t\tthis.line = Potree.Utils.debugLine(\r\n\t\t\t\tvrControls.viewer.sceneVR, \r\n\t\t\t\tnew THREE.Vector3(0, 0, 0),\r\n\t\t\t\tnew THREE.Vector3(0, 0, 0),\r\n\t\t\t\t0xffff00,\r\n\t\t\t);\r\n\r\n\t\t\tthis.dbgLabel = new Potree.TextSprite(\"abc\");\r\n\t\t\tthis.dbgLabel.scale.set(0.1, 0.1, 0.1);\r\n\t\t\tvrControls.viewer.sceneVR.add(this.dbgLabel);\r\n\t\t}\r\n\r\n\t\tthis.line.node.visible = true;\r\n\r\n\t\tthis.startState = vrControls.node.clone();\r\n\t}\r\n\r\n\tend(vrControls){\r\n\t\tthis.line.node.visible = false;\r\n\t\tthis.dbgLabel.visible = false;\r\n\t}\r\n\r\n\tupdate(vrControls, delta){\r\n\r\n\t\tlet start_c1 = vrControls.cPrimary.start.position.clone();\r\n\t\tlet start_c2 = vrControls.cSecondary.start.position.clone();\r\n\t\tlet start_center = start_c1.clone().add(start_c2).multiplyScalar(0.5);\r\n\t\tlet start_c1_c2 = start_c2.clone().sub(start_c1);\r\n\t\tlet end_c1 = vrControls.cPrimary.position.clone();\r\n\t\tlet end_c2 = vrControls.cSecondary.position.clone();\r\n\t\tlet end_center = end_c1.clone().add(end_c2).multiplyScalar(0.5);\r\n\t\tlet end_c1_c2 = end_c2.clone().sub(end_c1);\r\n\r\n\t\tlet d1 = start_c1_c2.length();\r\n\t\tlet d2 = end_c1_c2.length();\r\n\r\n\t\tlet angleStart = new THREE.Vector2(start_c1_c2.x, start_c1_c2.z).angle();\r\n\t\tlet angleEnd = new THREE.Vector2(end_c1_c2.x, end_c1_c2.z).angle();\r\n\t\tlet angleDiff = angleEnd - angleStart;\r\n\t\t\r\n\t\tlet scale = d2 / d1;\r\n\r\n\t\tlet node = this.startState.clone();\r\n\t\tnode.updateMatrix();\r\n\t\tnode.matrixAutoUpdate = false;\r\n\r\n\t\tlet mToOrigin = new THREE.Matrix4().makeTranslation(...toScene(start_center, this.startState).multiplyScalar(-1).toArray());\r\n\t\tlet mToStart = new THREE.Matrix4().makeTranslation(...toScene(start_center, this.startState).toArray());\r\n\t\tlet mRotate = new THREE.Matrix4().makeRotationZ(angleDiff);\r\n\t\tlet mScale = new THREE.Matrix4().makeScale(1 / scale, 1 / scale, 1 / scale);\r\n\r\n\t\tnode.applyMatrix4(mToOrigin);\r\n\t\tnode.applyMatrix4(mRotate);\r\n\t\tnode.applyMatrix4(mScale);\r\n\t\tnode.applyMatrix4(mToStart);\r\n\r\n\t\tlet oldScenePos = toScene(start_center, this.startState);\r\n\t\tlet newScenePos = toScene(end_center, node);\r\n\t\tlet toNew = oldScenePos.clone().sub(newScenePos);\r\n\t\tlet mToNew = new THREE.Matrix4().makeTranslation(...toNew.toArray());\r\n\t\tnode.applyMatrix4(mToNew);\r\n\r\n\t\tnode.matrix.decompose(node.position, node.quaternion, node.scale );\r\n\r\n\t\tvrControls.node.position.copy(node.position);\r\n\t\tvrControls.node.quaternion.copy(node.quaternion);\r\n\t\tvrControls.node.scale.copy(node.scale);\r\n\t\tvrControls.node.updateMatrix();\r\n\r\n\t\t{\r\n\t\t\tlet scale = vrControls.node.scale.x;\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 THREE.Vector3());\r\n\t\t\tlet vrDir = camVR.getWorldDirection(new THREE.Vector3());\r\n\t\t\tlet vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale));\r\n\r\n\t\t\tlet scenePos = toScene(vrPos, this.startState);\r\n\t\t\tlet sceneDir = toScene(vrPos.clone().add(vrDir), this.startState).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\t\t\tvrControls.viewer.setMoveSpeed(scale);\r\n\t\t}\r\n\r\n\t\t{ // update \"GUI\"\r\n\t\t\tthis.line.set(end_c1, end_c2);\r\n\r\n\t\t\tlet scale = vrControls.node.scale.x;\r\n\t\t\tthis.dbgLabel.visible = true;\r\n\t\t\tthis.dbgLabel.position.copy(end_center);\r\n\t\t\tthis.dbgLabel.setText(`scale: 1 : ${scale.toFixed(2)}`);\r\n\t\t\tthis.dbgLabel.scale.set(0.05, 0.05, 0.05);\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\nexport class VRControls extends EventDispatcher{\r\n\r\n\tconstructor(viewer){\r\n\t\tsuper(viewer);\r\n\r\n\t\tthis.viewer = viewer;\r\n\r\n\t\tviewer.addEventListener(\"vr_start\", this.onStart.bind(this));\r\n\t\tviewer.addEventListener(\"vr_end\", this.onEnd.bind(this));\r\n\r\n\t\tthis.node = new THREE.Object3D();\r\n\t\tthis.node.up.set(0, 0, 1);\r\n\t\tthis.triggered = new Set();\r\n\r\n\t\tlet xr = viewer.renderer.xr;\r\n\r\n\t\t{ // lights\r\n\t\t\t\r\n\t\t\tconst light = new THREE.PointLight( 0xffffff, 5, 0, 1 );\r\n\t\t\tlight.position.set(0, 2, 0);\r\n\t\t\tthis.viewer.sceneVR.add(light)\r\n\t\t}\r\n\r\n\t\tthis.menu = null;\r\n\r\n\t\tconst controllerModelFactory = new XRControllerModelFactory();\r\n\r\n\t\tlet sg = new THREE.SphereGeometry(1, 32, 32);\r\n\t\tlet sm = new THREE.MeshNormalMaterial();\r\n\r\n\t\t{ // setup primary controller\r\n\t\t\tlet controller = xr.getController(0);\r\n\r\n\t\t\tlet grip = xr.getControllerGrip(0);\r\n\t\t\tgrip.name = \"grip(0)\";\r\n\r\n\t\t\t// ADD CONTROLLERMODEL\r\n\t\t\tgrip.add( controllerModelFactory.createControllerModel( grip ) );\r\n\t\t\tthis.viewer.sceneVR.add(grip);\r\n\r\n\t\t\t// ADD SPHERE\r\n\t\t\tlet sphere = new THREE.Mesh(sg, sm);\r\n\t\t\tsphere.scale.set(0.005, 0.005, 0.005);\r\n\r\n\t\t\tcontroller.add(sphere);\r\n\t\t\tcontroller.visible = true;\r\n\t\t\tthis.viewer.sceneVR.add(controller);\r\n\r\n\t\t\t{ // ADD LINE\r\n\t\t\t\t\r\n\t\t\t\tlet lineGeometry = new LineGeometry();\r\n\r\n\t\t\t\tlineGeometry.setPositions([\r\n\t\t\t\t\t0, 0, -0.15,\r\n\t\t\t\t\t0, 0, 0.05,\r\n\t\t\t\t]);\r\n\r\n\t\t\t\tlet lineMaterial = new LineMaterial({ \r\n\t\t\t\t\tcolor: 0xff0000, \r\n\t\t\t\t\tlinewidth: 2, \r\n\t\t\t\t\tresolution: new THREE.Vector2(1000, 1000),\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconst line = new Line2(lineGeometry, lineMaterial);\r\n\t\t\t\t\r\n\t\t\t\tcontroller.add(line);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tcontroller.addEventListener( 'connected', function ( event ) {\r\n\t\t\t\tconst xrInputSource = event.data;\r\n\t\t\t\tcontroller.inputSource = xrInputSource;\r\n\t\t\t\t// initInfo(controller);\r\n\t\t\t});\r\n\r\n\t\t\tcontroller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller)});\r\n\t\t\tcontroller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller)});\r\n\r\n\t\t\tthis.cPrimary = controller;\r\n\r\n\t\t}\r\n\r\n\t\t{ // setup secondary controller\r\n\t\t\tlet controller = xr.getController(1);\r\n\r\n\t\t\tlet grip = xr.getControllerGrip(1);\r\n\r\n\t\t\t// ADD CONTROLLER MODEL\r\n\t\t\tlet model = controllerModelFactory.createControllerModel( grip );\r\n\t\t\tgrip.add(model);\r\n\t\t\tthis.viewer.sceneVR.add( grip );\r\n\r\n\t\t\t// ADD SPHERE\r\n\t\t\tlet sphere = new THREE.Mesh(sg, sm);\r\n\t\t\tsphere.scale.set(0.005, 0.005, 0.005);\r\n\t\t\tcontroller.add(sphere);\r\n\t\t\tcontroller.visible = true;\r\n\t\t\tthis.viewer.sceneVR.add(controller);\r\n\r\n\t\t\t{ // ADD LINE\r\n\t\t\t\t\r\n\t\t\t\tlet lineGeometry = new LineGeometry();\r\n\r\n\t\t\t\tlineGeometry.setPositions([\r\n\t\t\t\t\t0, 0, -0.15,\r\n\t\t\t\t\t0, 0, 0.05,\r\n\t\t\t\t]);\r\n\r\n\t\t\t\tlet lineMaterial = new LineMaterial({ \r\n\t\t\t\t\tcolor: 0xff0000, \r\n\t\t\t\t\tlinewidth: 2, \r\n\t\t\t\t\tresolution: new THREE.Vector2(1000, 1000),\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconst line = new Line2(lineGeometry, lineMaterial);\r\n\t\t\t\t\r\n\t\t\t\tcontroller.add(line);\r\n\t\t\t}\r\n\r\n\t\t\tcontroller.addEventListener( 'connected', (event) => {\r\n\t\t\t\tconst xrInputSource = event.data;\r\n\t\t\t\tcontroller.inputSource = xrInputSource;\r\n\t\t\t\tthis.initMenu(controller);\r\n\t\t\t});\r\n\r\n\t\t\tcontroller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller)});\r\n\t\t\tcontroller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller)});\r\n\r\n\t\t\tthis.cSecondary = controller;\r\n\t\t}\r\n\r\n\t\tthis.mode_fly = new FlyMode();\r\n\t\tthis.mode_translate = new TranslationMode();\r\n\t\tthis.mode_rotScale = new RotScaleMode();\r\n\t\tthis.setMode(this.mode_fly);\r\n\t}\r\n\r\n\tcreateSlider(label, min, max){\r\n\r\n\t\tlet sg = new THREE.SphereGeometry(1, 8, 8);\r\n\t\tlet cg = new THREE.CylinderGeometry(1, 1, 1, 8);\r\n\t\tlet matHandle = new THREE.MeshBasicMaterial({color: 0xff0000});\r\n\t\tlet matScale = new THREE.MeshBasicMaterial({color: 0xff4444});\r\n\t\tlet matValue = new THREE.MeshNormalMaterial();\r\n\r\n\t\tlet node = new THREE.Object3D(\"slider\");\r\n\t\tlet nLabel = new Potree.TextSprite(`${label}: 0`);\r\n\t\tlet nMax = new THREE.Mesh(sg, matHandle);\r\n\t\tlet nMin = new THREE.Mesh(sg, matHandle);\r\n\t\tlet nValue = new THREE.Mesh(sg, matValue);\r\n\t\tlet nScale = new THREE.Mesh(cg, matScale);\r\n\r\n\t\tnLabel.scale.set(0.2, 0.2, 0.2);\r\n\t\tnLabel.position.set(0, 0.35, 0);\r\n\r\n\t\tnMax.scale.set(0.02, 0.02, 0.02);\r\n\t\tnMax.position.set(0, 0.25, 0);\r\n\r\n\t\tnMin.scale.set(0.02, 0.02, 0.02);\r\n\t\tnMin.position.set(0, -0.25, 0);\r\n\r\n\t\tnValue.scale.set(0.02, 0.02, 0.02);\r\n\t\tnValue.position.set(0, 0, 0);\r\n\r\n\t\tnScale.scale.set(0.005, 0.5, 0.005);\r\n\r\n\t\tnode.add(nLabel);\r\n\t\tnode.add(nMax);\r\n\t\tnode.add(nMin);\r\n\t\tnode.add(nValue);\r\n\t\tnode.add(nScale);\r\n\r\n\t\treturn node;\r\n\t}\r\n\r\n\tcreateInfo(){ \r\n\r\n\t\tlet texture = new THREE.TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`);\r\n\t\tlet plane = new THREE.PlaneBufferGeometry(1, 1, 1, 1);\r\n\t\tlet infoMaterial = new THREE.MeshBasicMaterial({map: texture});\r\n\t\tlet infoNode = new THREE.Mesh(plane, infoMaterial);\r\n\r\n\t\treturn infoNode;\r\n\t}\r\n\r\n\tinitMenu(controller){\r\n\r\n\t\tif(this.menu){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet node = new THREE.Object3D(\"vr menu\");\r\n\r\n\t\t// let nSlider = this.createSlider(\"speed\", 0, 1);\r\n\t\t// let nInfo = this.createInfo();\r\n\r\n\t\t// // node.add(nSlider);\r\n\t\t// node.add(nInfo);\r\n\r\n\t\t// {\r\n\t\t// \tnode.rotation.set(-1.5, 0, 0)\r\n\t\t// \tnode.scale.set(0.3, 0.3, 0.3);\r\n\t\t// \tnode.position.set(-0.2, -0.002, -0.1)\r\n\r\n\t\t// \t// nInfo.position.set(0.5, 0, 0);\r\n\t\t// \tnInfo.scale.set(0.8, 0.6, 0);\r\n\r\n\t\t// \t// controller.add(node);\r\n\t\t// }\r\n\r\n\t\t// node.position.set(-0.3, 1.2, 0.2);\r\n\t\t// node.scale.set(0.3, 0.2, 0.3);\r\n\t\t// node.lookAt(new THREE.Vector3(0, 1.5, 0.1));\r\n\r\n\t\t// this.viewer.sceneVR.add(node);\r\n\r\n\t\tthis.menu = node;\r\n\r\n\t\t// window.vrSlider = nSlider;\r\n\t\twindow.vrMenu = node;\r\n\r\n\t}\r\n\r\n\r\n\ttoScene(vec){\r\n\t\tlet camVR = this.getCamera();\r\n\r\n\t\tlet mat = camVR.matrixWorld;\r\n\t\tlet result = vec.clone().applyMatrix4(mat);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\ttoVR(vec){\r\n\t\tlet camVR = this.getCamera();\r\n\r\n\t\tlet mat = camVR.matrixWorld.clone();\r\n\t\tmat.invert();\r\n\t\tlet result = vec.clone().applyMatrix4(mat);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tsetMode(mode){\r\n\r\n\t\tif(this.mode === mode){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(this.mode){\r\n\t\t\tthis.mode.end(this);\r\n\t\t}\r\n\r\n\t\tfor(let controller of [this.cPrimary, this.cSecondary]){\r\n\r\n\t\t\tlet start = {\r\n\t\t\t\tposition: controller.position.clone(),\r\n\t\t\t\trotation: controller.rotation.clone(),\r\n\t\t\t};\r\n\r\n\t\t\tcontroller.start = start;\r\n\t\t}\r\n\t\t\r\n\t\tthis.mode = mode;\r\n\t\tthis.mode.start(this);\r\n\t}\r\n\r\n\tonTriggerStart(controller){\r\n\t\tthis.triggered.add(controller);\r\n\r\n\t\tif(this.triggered.size === 0){\r\n\t\t\tthis.setMode(this.mode_fly);\r\n\t\t}else if(this.triggered.size === 1){\r\n\t\t\tthis.setMode(this.mode_translate);\r\n\t\t}else if(this.triggered.size === 2){\r\n\t\t\tthis.setMode(this.mode_rotScale);\r\n\t\t}\r\n\t}\r\n\r\n\tonTriggerEnd(controller){\r\n\t\tthis.triggered.delete(controller);\r\n\r\n\t\tif(this.triggered.size === 0){\r\n\t\t\tthis.setMode(this.mode_fly);\r\n\t\t}else if(this.triggered.size === 1){\r\n\t\t\tthis.setMode(this.mode_translate);\r\n\t\t}else if(this.triggered.size === 2){\r\n\t\t\tthis.setMode(this.mode_rotScale);\r\n\t\t}\r\n\t}\r\n\r\n\tonStart(){\r\n\r\n\t\tlet position = this.viewer.scene.view.position.clone();\r\n\t\tlet direction = this.viewer.scene.view.direction;\r\n\t\tdirection.multiplyScalar(-1);\r\n\r\n\t\tlet target = position.clone().add(direction);\r\n\t\ttarget.z = position.z;\r\n\r\n\t\tlet scale = this.viewer.getMoveSpeed();\r\n\r\n\t\tthis.node.position.copy(position);\r\n\t\tthis.node.lookAt(target);\r\n\t\tthis.node.scale.set(scale, scale, scale);\r\n\t\tthis.node.updateMatrix();\r\n\t\tthis.node.updateMatrixWorld();\r\n\t}\r\n\r\n\tonEnd(){\r\n\t\t\r\n\t}\r\n\r\n\r\n\tsetScene(scene){\r\n\t\tthis.scene = scene;\r\n\t}\r\n\r\n\tgetCamera(){\r\n\t\tlet reference = this.viewer.scene.getActiveCamera();\r\n\t\tlet camera = new THREE.PerspectiveCamera();\r\n\r\n\t\t// let scale = this.node.scale.x;\r\n\t\tlet scale = this.viewer.getMoveSpeed();\r\n\t\t//camera.near = 0.01 / scale;\r\n\t\tcamera.near = 0.1;\r\n\t\tcamera.far = 1000;\r\n\t\t// camera.near = reference.near / scale;\r\n\t\t// camera.far = reference.far / scale;\r\n\t\tcamera.up.set(0, 0, 1);\r\n\t\tcamera.lookAt(new THREE.Vector3(0, -1, 0));\r\n\t\tcamera.updateMatrix();\r\n\t\tcamera.updateMatrixWorld();\r\n\r\n\t\tcamera.position.copy(this.node.position);\r\n\t\tcamera.rotation.copy(this.node.rotation);\r\n\t\tcamera.scale.set(scale, scale, scale);\r\n\t\tcamera.updateMatrix();\r\n\t\tcamera.updateMatrixWorld();\r\n\t\tcamera.matrixAutoUpdate = false;\r\n\t\tcamera.parent = camera;\r\n\r\n\t\treturn camera;\r\n\t}\r\n\r\n\tupdate(delta){\r\n\r\n\t\t\r\n\r\n\t\t// if(this.mode === this.mode_fly){\r\n\t\t// \tlet ray = new THREE.Ray(origin, direction);\r\n\t\t\t\r\n\t\t// \tfor(let object of this.selectables){\r\n\r\n\t\t// \t\tif(object.intersectsRay(ray)){\r\n\t\t// \t\t\tobject.onHit(ray);\r\n\t\t// \t\t}\r\n\r\n\t\t// \t}\r\n\r\n\t\t// }\r\n\r\n\t\tthis.mode.update(this, delta);\r\n\r\n\t\t\r\n\r\n\t}\r\n};","\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
        ENTER
        \n\t\t\t\t
        VR
        \n\t\t\t`;\n\t\t}\n\n\t\tfunction setExit(){\n\t\t\tbutton.element.innerHTML = `\n\t\t\t\t
        EXIT
        \n\t\t\t\t
        VR
        \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","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\nimport {ClipTask, ClipMethod, CameraMode, LengthUnits, ElevationGradientRepeat} from \"../defines.js\";\nimport {Renderer} from \"../PotreeRenderer.js\";\nimport {PotreeRenderer} from \"./PotreeRenderer.js\";\nimport {EDLRenderer} from \"./EDLRenderer.js\";\nimport {HQSplatRenderer} from \"./HQSplatRenderer.js\";\nimport {Scene} from \"./Scene.js\";\nimport {ClippingTool} from \"../utils/ClippingTool.js\";\nimport {TransformationTool} from \"../utils/TransformationTool.js\";\nimport {Utils} from \"../utils.js\";\nimport {MapView} from \"./map.js\";\nimport {ProfileWindow, ProfileWindowController} from \"./profile.js\";\nimport {BoxVolume} from \"../utils/Volume.js\";\nimport {Features} from \"../Features.js\";\nimport {Message} from \"../utils/Message.js\";\nimport {Sidebar} from \"./sidebar.js\";\n\nimport {AnnotationTool} from \"../utils/AnnotationTool.js\";\nimport {MeasuringTool} from \"../utils/MeasuringTool.js\";\nimport {ProfileTool} from \"../utils/ProfileTool.js\";\nimport {VolumeTool} from \"../utils/VolumeTool.js\";\n\nimport {InputHandler} from \"../navigation/InputHandler.js\";\nimport {NavigationCube} from \"./NavigationCube.js\";\nimport {Compass} from \"../utils/Compass.js\";\nimport {OrbitControls} from \"../navigation/OrbitControls.js\";\nimport {FirstPersonControls} from \"../navigation/FirstPersonControls.js\";\nimport {EarthControls} from \"../navigation/EarthControls.js\";\nimport {DeviceOrientationControls} from \"../navigation/DeviceOrientationControls.js\";\nimport {VRControls} from \"../navigation/VRControls.js\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\nimport { ClassificationScheme } from \"../materials/ClassificationScheme.js\";\nimport { VRButton } from '../../libs/three.js/extra/VRButton.js';\n\nimport JSON5 from \"../../libs/json5-2.1.3/json5.mjs\";\n\n\nexport class Viewer extends EventDispatcher{\n\t\n\tconstructor(domElement, args = {}){\n\t\tsuper();\n\n\t\tthis.renderArea = domElement;\n\t\tthis.guiLoaded = false;\n\t\tthis.guiLoadTasks = [];\n\n\t\tthis.onVrListeners = [];\n\n\t\tthis.messages = [];\n\t\tthis.elMessages = $(`\n\t\t
        \n\t\t
        `);\n\t\t$(domElement).append(this.elMessages);\n\t\t\n\t\ttry{\n\n\t\t{ // generate missing dom hierarchy\n\t\t\tif ($(domElement).find('#potree_map').length === 0) {\n\t\t\t\tlet potreeMap = $(`\n\t\t\t\t\t
        \n\t\t\t\t\t\t
        \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`);\n\t\t\t\t$(domElement).append(potreeMap);\n\t\t\t}\n\n\t\t\tif ($(domElement).find('#potree_description').length === 0) {\n\t\t\t\tlet potreeDescription = $(`
        `);\n\t\t\t\t$(domElement).append(potreeDescription);\n\t\t\t}\n\n\t\t\tif ($(domElement).find('#potree_annotations').length === 0) {\n\t\t\t\tlet potreeAnnotationContainer = $(`\n\t\t\t\t\t
        `);\n\t\t\t\t$(domElement).append(potreeAnnotationContainer);\n\t\t\t}\n\n\t\t\tif ($(domElement).find('#potree_quick_buttons').length === 0) {\n\t\t\t\tlet potreeMap = $(`\n\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t`);\n\n\t\t\t\t// {\n\t\t\t\t// \tlet imgMenuToggle = document.createElement('img');\n\t\t\t\t// \timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\t\t// \timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\t\t// \t// imgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\t\t// \tpotreeMap.append(imgMenuToggle);\n\t\t\t\t// }\n\n\t\t\t\t// {\n\t\t\t\t// \tlet imgMenuToggle = document.createElement('img');\n\t\t\t\t// \timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\t\t// \timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\t\t// \t// imgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\t\t// \tpotreeMap.append(imgMenuToggle);\n\t\t\t\t// }\n\n\t\t\t\t// {\n\t\t\t\t// \tlet imgMenuToggle = document.createElement('img');\n\t\t\t\t// \timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\t\t// \timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\t\t// \t// imgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\t\t// \tpotreeMap.append(imgMenuToggle);\n\t\t\t\t// }\n\n\t\t\t\t\n\n\t\t\t\t$(domElement).append(potreeMap);\n\t\t\t}\n\t\t}\n\n\t\tthis.pointCloudLoadedCallback = args.onPointCloudLoaded || function () {};\n\n\t\t// if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\n\t\t//\tdefaultSettings.navigation = \"Orbit\";\n\t\t// }\n\n\t\tthis.server = null;\n\n\t\tthis.fov = 60;\n\t\tthis.isFlipYZ = false;\n\t\tthis.useDEMCollisions = false;\n\t\tthis.generateDEM = false;\n\t\tthis.minNodeSize = 30;\n\t\tthis.edlStrength = 1.0;\n\t\tthis.edlRadius = 1.4;\n\t\tthis.edlOpacity = 1.0;\n\t\tthis.useEDL = false;\n\t\tthis.description = \"\";\n\n\t\tthis.classifications = ClassificationScheme.DEFAULT;\n\n\t\tthis.moveSpeed = 10;\n\n\t\tthis.lengthUnit = LengthUnits.METER;\n\t\tthis.lengthUnitDisplay = LengthUnits.METER;\n\n\t\tthis.showBoundingBox = false;\n\t\tthis.showAnnotations = true;\n\t\tthis.freeze = false;\n\t\tthis.clipTask = ClipTask.HIGHLIGHT;\n\t\tthis.clipMethod = ClipMethod.INSIDE_ANY;\n\n\t\tthis.elevationGradientRepeat = ElevationGradientRepeat.CLAMP;\n\n\t\tthis.filterReturnNumberRange = [0, 7];\n\t\tthis.filterNumberOfReturnsRange = [0, 7];\n\t\tthis.filterGPSTimeRange = [-Infinity, Infinity];\n\t\tthis.filterPointSourceIDRange = [0, 65535];\n\n\t\tthis.potreeRenderer = null;\n\t\tthis.edlRenderer = null;\n\t\tthis.renderer = null;\n\t\tthis.pRenderer = null;\n\n\t\tthis.scene = null;\n\t\tthis.sceneVR = null;\n\t\tthis.overlay = null;\n\t\tthis.overlayCamera = null;\n\n\t\tthis.inputHandler = null;\n\t\tthis.controls = null;\n\n\t\tthis.clippingTool = null;\n\t\tthis.transformationTool = null;\n\t\tthis.navigationCube = null;\n\t\tthis.compass = null;\n\t\t\n\t\tthis.skybox = null;\n\t\tthis.clock = new THREE.Clock();\n\t\tthis.background = null;\n\n\t\tthis.initThree();\n\n\t\tif(args.noDragAndDrop){\n\t\t\t\n\t\t}else{\n\t\t\tthis.initDragAndDrop();\n\t\t}\n\n\t\tif(typeof Stats !== \"undefined\"){\n\t\t\tthis.stats = new Stats();\n\t\t\tthis.stats.showPanel( 0 ); // 0: fps, 1: ms, 2: mb, 3+: custom\n\t\t\tdocument.body.appendChild( this.stats.dom );\n\t\t}\n\n\t\t{\n\t\t\tlet canvas = this.renderer.domElement;\n\t\t\tcanvas.addEventListener(\"webglcontextlost\", (e) => {\n\t\t\t\tconsole.log(e);\n\t\t\t\tthis.postMessage(\"WebGL context lost. \\u2639\");\n\n\t\t\t\tlet gl = this.renderer.getContext();\n\t\t\t\tlet error = gl.getError();\n\t\t\t\tconsole.log(error);\n\t\t\t}, false);\n\t\t}\n\n\t\t{\n\t\t\tthis.overlay = new THREE.Scene();\n\t\t\tthis.overlayCamera = new THREE.OrthographicCamera(\n\t\t\t\t0, 1,\n\t\t\t\t1, 0,\n\t\t\t\t-1000, 1000\n\t\t\t);\n\t\t}\n\t\t\n\t\tthis.pRenderer = new Renderer(this.renderer);\n\t\t\n\t\t{\n\t\t\tlet near = 2.5;\n\t\t\tlet far = 10.0;\n\t\t\tlet fov = 90;\n\t\t\t\n\t\t\tthis.shadowTestCam = new THREE.PerspectiveCamera(90, 1, near, far);\n\t\t\tthis.shadowTestCam.position.set(3.50, -2.80, 8.561);\n\t\t\tthis.shadowTestCam.lookAt(new THREE.Vector3(0, 0, 4.87));\n\t\t}\n\t\t\n\n\t\tlet scene = new Scene(this.renderer);\n\t\t\n\t\t{ // create VR scene\n\t\t\tthis.sceneVR = new THREE.Scene();\n\n\t\t\t// let texture = new THREE.TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`);\n\n\t\t\t// let plane = new THREE.PlaneBufferGeometry(1, 1, 1, 1);\n\t\t\t// let infoMaterial = new THREE.MeshBasicMaterial({map: texture});\n\t\t\t// let infoNode = new THREE.Mesh(plane, infoMaterial);\n\t\t\t// infoNode.position.set(-0.5, 1, 0);\n\t\t\t// infoNode.scale.set(0.4, 0.3, 1);\n\t\t\t// infoNode.lookAt(0, 1, 0)\n\t\t\t// this.sceneVR.add(infoNode);\n\n\t\t\t// window.infoNode = infoNode;\n\t\t}\n\n\t\tthis.setScene(scene);\n\n\t\t{\n\t\t\tthis.inputHandler = new InputHandler(this);\n\t\t\tthis.inputHandler.setScene(this.scene);\n\n\t\t\tthis.clippingTool = new ClippingTool(this);\n\t\t\tthis.transformationTool = new TransformationTool(this);\n\t\t\tthis.navigationCube = new NavigationCube(this);\n\t\t\tthis.navigationCube.visible = false;\n\n\t\t\tthis.compass = new Compass(this);\n\t\t\t\n\t\t\tthis.createControls();\n\n\t\t\tthis.clippingTool.setScene(this.scene);\n\t\t\t\n\t\t\tlet onPointcloudAdded = (e) => {\n\t\t\t\tif (this.scene.pointclouds.length === 1) {\n\t\t\t\t\tlet speed = e.pointcloud.boundingBox.getSize(new THREE.Vector3()).length();\n\t\t\t\t\tspeed = speed / 5;\n\t\t\t\t\tthis.setMoveSpeed(speed);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet onVolumeRemoved = (e) => {\n\t\t\t\tthis.inputHandler.deselect(e.volume);\n\t\t\t};\n\n\t\t\tthis.addEventListener('scene_changed', (e) => {\n\t\t\t\tthis.inputHandler.setScene(e.scene);\n\t\t\t\tthis.clippingTool.setScene(this.scene);\n\t\t\t\t\n\t\t\t\tif(!e.scene.hasEventListener(\"pointcloud_added\", onPointcloudAdded)){\n\t\t\t\t\te.scene.addEventListener(\"pointcloud_added\", onPointcloudAdded);\n\t\t\t\t}\n\n\t\t\t\tif(!e.scene.hasEventListener(\"volume_removed\", onPointcloudAdded)){\n\t\t\t\t\te.scene.addEventListener(\"volume_removed\", onVolumeRemoved);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\n\t\t\tthis.scene.addEventListener(\"volume_removed\", onVolumeRemoved);\n\t\t\tthis.scene.addEventListener('pointcloud_added', onPointcloudAdded);\n\t\t}\n\n\t\t{ // set defaults\n\t\t\tthis.setFOV(60);\n\t\t\tthis.setEDLEnabled(false);\n\t\t\tthis.setEDLRadius(1.4);\n\t\t\tthis.setEDLStrength(0.4);\n\t\t\tthis.setEDLOpacity(1.0);\n\t\t\tthis.setClipTask(ClipTask.HIGHLIGHT);\n\t\t\tthis.setClipMethod(ClipMethod.INSIDE_ANY);\n\t\t\tthis.setPointBudget(1*1000*1000);\n\t\t\tthis.setShowBoundingBox(false);\n\t\t\tthis.setFreeze(false);\n\t\t\tthis.setControls(this.orbitControls);\n\t\t\tthis.setBackground('gradient');\n\n\t\t\tthis.scaleFactor = 1;\n\n\t\t\tthis.loadSettingsFromURL();\n\t\t}\n\n\t\t// start rendering!\n\t\t//if(args.useDefaultRenderLoop === undefined || args.useDefaultRenderLoop === true){\n\t\t\t//requestAnimationFrame(this.loop.bind(this));\n\t\t//}\n\n\t\tthis.renderer.setAnimationLoop(this.loop.bind(this));\n\n\t\tthis.loadGUI = this.loadGUI.bind(this);\n\n\t\tthis.annotationTool = new AnnotationTool(this);\n\t\tthis.measuringTool = new MeasuringTool(this);\n\t\tthis.profileTool = new ProfileTool(this);\n\t\tthis.volumeTool = new VolumeTool(this);\n\n\t\t}catch(e){\n\t\t\tthis.onCrash(e);\n\t\t}\n\t}\n\n\tonCrash(error){\n\n\t\t$(this.renderArea).empty();\n\n\t\tif ($(this.renderArea).find('#potree_failpage').length === 0) {\n\t\t\tlet elFailPage = $(`\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t

        Potree Encountered An Error

        \n\n\t\t\t\t

        \n\t\t\t\tThis may happen if your browser or graphics card is not supported.\n\t\t\t\t
        \n\t\t\t\tWe recommend to use \n\t\t\t\tChrome\n\t\t\t\tor \n\t\t\t\tFirefox.\n\t\t\t\t

        \n\n\t\t\t\t

        \n\t\t\t\tPlease also visit webglreport.com and \n\t\t\t\tcheck whether your system supports WebGL.\n\t\t\t\t

        \n\t\t\t\t

        \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 github,
        \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.
        \n\t\t\t\tPlease do not report errors on unsupported browsers.\n\t\t\t\t

        \n\n\t\t\t\t
        \n\t\t\t\t\n\t\t\t
        `);\n\n\t\t\tlet elErrorMessage = elFailPage.find('#potree_error_console');\n\t\t\telErrorMessage.html(error.stack);\n\n\t\t\t$(this.renderArea).append(elFailPage);\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\t// ------------------------------------------------------------------------------------\n\t// Viewer API\n\t// ------------------------------------------------------------------------------------\n\n\tsetScene (scene) {\n\t\tif (scene === this.scene) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet oldScene = this.scene;\n\t\tthis.scene = scene;\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'scene_changed',\n\t\t\toldScene: oldScene,\n\t\t\tscene: scene\n\t\t});\n\n\t\t{ // Annotations\n\t\t\t$('.annotation').detach();\n\n\t\t\t// for(let annotation of this.scene.annotations){\n\t\t\t//\tthis.renderArea.appendChild(annotation.domElement[0]);\n\t\t\t// }\n\n\t\t\tthis.scene.annotations.traverse(annotation => {\n\t\t\t\tthis.renderArea.appendChild(annotation.domElement[0]);\n\t\t\t});\n\n\t\t\tif (!this.onAnnotationAdded) {\n\t\t\t\tthis.onAnnotationAdded = e => {\n\t\t\t\t// console.log(\"annotation added: \" + e.annotation.title);\n\n\t\t\t\t\te.annotation.traverse(node => {\n\n\t\t\t\t\t\t$(\"#potree_annotation_container\").append(node.domElement);\n\t\t\t\t\t\t//this.renderArea.appendChild(node.domElement[0]);\n\t\t\t\t\t\tnode.scene = this.scene;\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (oldScene) {\n\t\t\t\toldScene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded);\n\t\t\t}\n\t\t\tthis.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded);\n\t\t}\n\t};\n\n\tsetControls(controls){\n\t\tif (controls !== this.controls) {\n\t\t\tif (this.controls) {\n\t\t\t\tthis.controls.enabled = false;\n\t\t\t\tthis.inputHandler.removeInputListener(this.controls);\n\t\t\t}\n\n\t\t\tthis.controls = controls;\n\t\t\tthis.controls.enabled = true;\n\t\t\tthis.inputHandler.addInputListener(this.controls);\n\t\t}\n\t}\n\n\tgetControls () {\n\n\t\tif(this.renderer.xr.isPresenting){\n\t\t\treturn this.vrControls;\n\t\t}else{\n\t\t\treturn this.controls;\n\t\t}\n\t\t\n\t}\n\n\tgetMinNodeSize () {\n\t\treturn this.minNodeSize;\n\t};\n\n\tsetMinNodeSize (value) {\n\t\tif (this.minNodeSize !== value) {\n\t\t\tthis.minNodeSize = value;\n\t\t\tthis.dispatchEvent({'type': 'minnodesize_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetBackground () {\n\t\treturn this.background;\n\t}\n\n\tsetBackground(bg){\n\t\tif (this.background === bg) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(bg === \"skybox\"){\n\t\t\tthis.skybox = Utils.loadSkybox(new URL(Potree.resourcePath + '/textures/skybox2/').href);\n\t\t}\n\n\t\tthis.background = bg;\n\t\tthis.dispatchEvent({'type': 'background_changed', 'viewer': this});\n\t}\n\n\tsetDescription (value) {\n\t\tthis.description = value;\n\t\t\n\t\t$('#potree_description').html(value);\n\t\t//$('#potree_description').text(value);\n\t}\n\n\tgetDescription(){\n\t\treturn this.description;\n\t}\n\n\tsetShowBoundingBox (value) {\n\t\tif (this.showBoundingBox !== value) {\n\t\t\tthis.showBoundingBox = value;\n\t\t\tthis.dispatchEvent({'type': 'show_boundingbox_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetShowBoundingBox () {\n\t\treturn this.showBoundingBox;\n\t};\n\n\tsetMoveSpeed (value) {\n\t\tif (this.moveSpeed !== value) {\n\t\t\tthis.moveSpeed = value;\n\t\t\tthis.dispatchEvent({'type': 'move_speed_changed', 'viewer': this, 'speed': value});\n\t\t}\n\t};\n\n\tgetMoveSpeed () {\n\t\treturn this.moveSpeed;\n\t};\n\n\tsetWeightClassification (w) {\n\t\tfor (let i = 0; i < this.scene.pointclouds.length; i++) {\n\t\t\tthis.scene.pointclouds[i].material.weightClassification = w;\n\t\t\tthis.dispatchEvent({'type': 'attribute_weights_changed' + i, 'viewer': this});\n\t\t}\n\t};\n\n\tsetFreeze (value) {\n\t\tvalue = Boolean(value);\n\t\tif (this.freeze !== value) {\n\t\t\tthis.freeze = value;\n\t\t\tthis.dispatchEvent({'type': 'freeze_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetFreeze () {\n\t\treturn this.freeze;\n\t};\n\n\tgetClipTask(){\n\t\treturn this.clipTask;\n\t}\n\n\tgetClipMethod(){\n\t\treturn this.clipMethod;\n\t}\n\n\tsetClipTask(value){\n\t\tif(this.clipTask !== value){\n\n\t\t\tthis.clipTask = value;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: \"cliptask_changed\", \n\t\t\t\tviewer: this});\t\t\n\t\t}\n\t}\n\n\tsetClipMethod(value){\n\t\tif(this.clipMethod !== value){\n\n\t\t\tthis.clipMethod = value;\n\t\t\t\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: \"clipmethod_changed\",\n\t\t\t\tviewer: this});\n\t\t}\n\t}\n\n\tsetElevationGradientRepeat(value){\n\t\tif(this.elevationGradientRepeat !== value){\n\n\t\t\tthis.elevationGradientRepeat = value;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: \"elevation_gradient_repeat_changed\", \n\t\t\t\tviewer: this});\n\t\t}\n\t}\n\n\tsetPointBudget (value) {\n\t\tif (Potree.pointBudget !== value) {\n\t\t\tPotree.pointBudget = parseInt(value);\n\t\t\tthis.dispatchEvent({'type': 'point_budget_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetPointBudget () {\n\t\treturn Potree.pointBudget;\n\t};\n\n\tsetShowAnnotations (value) {\n\t\tif (this.showAnnotations !== value) {\n\t\t\tthis.showAnnotations = value;\n\t\t\tthis.dispatchEvent({'type': 'show_annotations_changed', 'viewer': this});\n\t\t}\n\t}\n\n\tgetShowAnnotations () {\n\t\treturn this.showAnnotations;\n\t}\n\t\n\tsetDEMCollisionsEnabled(value){\n\t\tif(this.useDEMCollisions !== value){\n\t\t\tthis.useDEMCollisions = value;\n\t\t\tthis.dispatchEvent({'type': 'use_demcollisions_changed', 'viewer': this});\n\t\t};\n\t};\n\n\tgetDEMCollisionsEnabled () {\n\t\treturn this.useDEMCollisions;\n\t};\n\n\tsetEDLEnabled (value) {\n\t\tvalue = Boolean(value) && Features.SHADER_EDL.isSupported();\n\n\t\tif (this.useEDL !== value) {\n\t\t\tthis.useEDL = value;\n\t\t\tthis.dispatchEvent({'type': 'use_edl_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetEDLEnabled () {\n\t\treturn this.useEDL;\n\t};\n\n\tsetEDLRadius (value) {\n\t\tif (this.edlRadius !== value) {\n\t\t\tthis.edlRadius = value;\n\t\t\tthis.dispatchEvent({'type': 'edl_radius_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetEDLRadius () {\n\t\treturn this.edlRadius;\n\t};\n\n\tsetEDLStrength (value) {\n\t\tif (this.edlStrength !== value) {\n\t\t\tthis.edlStrength = value;\n\t\t\tthis.dispatchEvent({'type': 'edl_strength_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetEDLStrength () {\n\t\treturn this.edlStrength;\n\t};\n\n\tsetEDLOpacity (value) {\n\t\tif (this.edlOpacity !== value) {\n\t\t\tthis.edlOpacity = value;\n\t\t\tthis.dispatchEvent({'type': 'edl_opacity_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetEDLOpacity () {\n\t\treturn this.edlOpacity;\n\t};\n\n\tsetFOV (value) {\n\t\tif (this.fov !== value) {\n\t\t\tthis.fov = value;\n\t\t\tthis.dispatchEvent({'type': 'fov_changed', 'viewer': this});\n\t\t}\n\t};\n\n\tgetFOV () {\n\t\treturn this.fov;\n\t};\n\n\tdisableAnnotations () {\n\t\tthis.scene.annotations.traverse(annotation => {\n\t\t\tannotation.domElement.css('pointer-events', 'none');\n\n\t\t\t// return annotation.visible;\n\t\t});\n\t};\n\n\tenableAnnotations () {\n\t\tthis.scene.annotations.traverse(annotation => {\n\t\t\tannotation.domElement.css('pointer-events', 'auto');\n\n\t\t\t// return annotation.visible;\n\t\t});\n\t}\n\n\tsetClassifications(classifications){\n\t\tthis.classifications = classifications;\n\n\t\tthis.dispatchEvent({'type': 'classifications_changed', 'viewer': this});\n\t}\n\n\tsetClassificationVisibility (key, value) {\n\t\tif (!this.classifications[key]) {\n\t\t\tthis.classifications[key] = {visible: value, name: 'no name'};\n\t\t\tthis.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this});\n\t\t} else if (this.classifications[key].visible !== value) {\n\t\t\tthis.classifications[key].visible = value;\n\t\t\tthis.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this});\n\t\t}\n\t}\n\n\ttoggleAllClassificationsVisibility(){\n\n\t\tlet numVisible = 0;\n\t\tlet numItems = 0;\n\t\tfor(const key of Object.keys(this.classifications)){\n\t\t\tif(this.classifications[key].visible){\n\t\t\t\tnumVisible++;\n\t\t\t}\n\t\t\tnumItems++;\n\t\t}\n\n\t\tlet visible = true;\n\t\tif(numVisible === numItems){\n\t\t\tvisible = false;\n\t\t}\n\n\t\tlet somethingChanged = false;\n\n\t\tfor(const key of Object.keys(this.classifications)){\n\t\t\tif(this.classifications[key].visible !== visible){\n\t\t\t\tthis.classifications[key].visible = visible;\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif(somethingChanged){\n\t\t\tthis.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this});\n\t\t}\n\t}\n\n\tsetFilterReturnNumberRange(from, to){\n\t\tthis.filterReturnNumberRange = [from, to];\n\t\tthis.dispatchEvent({'type': 'filter_return_number_range_changed', 'viewer': this});\n\t}\n\n\tsetFilterNumberOfReturnsRange(from, to){\n\t\tthis.filterNumberOfReturnsRange = [from, to];\n\t\tthis.dispatchEvent({'type': 'filter_number_of_returns_range_changed', 'viewer': this});\n\t}\n\n\tsetFilterGPSTimeRange(from, to){\n\t\tthis.filterGPSTimeRange = [from, to];\n\t\tthis.dispatchEvent({'type': 'filter_gps_time_range_changed', 'viewer': this});\n\t}\n\n\tsetFilterPointSourceIDRange(from, to){\n\t\tthis.filterPointSourceIDRange = [from, to]\n\t\tthis.dispatchEvent({'type': 'filter_point_source_id_range_changed', 'viewer': this});\n\t}\n\n\tsetLengthUnit (value) {\n\t\tswitch (value) {\n\t\t\tcase 'm':\n\t\t\t\tthis.lengthUnit = LengthUnits.METER;\n\t\t\t\tthis.lengthUnitDisplay = LengthUnits.METER;\n\t\t\t\tbreak;\n\t\t\tcase 'ft':\n\t\t\t\tthis.lengthUnit = LengthUnits.FEET;\n\t\t\t\tthis.lengthUnitDisplay = LengthUnits.FEET;\n\t\t\t\tbreak;\n\t\t\tcase 'in':\n\t\t\t\tthis.lengthUnit = LengthUnits.INCH;\n\t\t\t\tthis.lengthUnitDisplay = LengthUnits.INCH;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: value});\n\t};\n\n\tsetLengthUnitAndDisplayUnit(lengthUnitValue, lengthUnitDisplayValue) {\n\t\tswitch (lengthUnitValue) {\n\t\t\tcase 'm':\n\t\t\t\tthis.lengthUnit = LengthUnits.METER;\n\t\t\t\tbreak;\n\t\t\tcase 'ft':\n\t\t\t\tthis.lengthUnit = LengthUnits.FEET;\n\t\t\t\tbreak;\n\t\t\tcase 'in':\n\t\t\t\tthis.lengthUnit = LengthUnits.INCH;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tswitch (lengthUnitDisplayValue) {\n\t\t\tcase 'm':\n\t\t\t\tthis.lengthUnitDisplay = LengthUnits.METER;\n\t\t\t\tbreak;\n\t\t\tcase 'ft':\n\t\t\t\tthis.lengthUnitDisplay = LengthUnits.FEET;\n\t\t\t\tbreak;\n\t\t\tcase 'in':\n\t\t\t\tthis.lengthUnitDisplay = LengthUnits.INCH;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tthis.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: lengthUnitValue });\n\t};\n\n\tzoomTo(node, factor, animationDuration = 0){\n\t\tlet view = this.scene.view;\n\n\t\tlet camera = this.scene.cameraP.clone();\n\t\tcamera.rotation.copy(this.scene.cameraP.rotation);\n\t\tcamera.rotation.order = \"ZXY\";\n\t\tcamera.rotation.x = Math.PI / 2 + view.pitch;\n\t\tcamera.rotation.z = view.yaw;\n\t\tcamera.updateMatrix();\n\t\tcamera.updateMatrixWorld();\n\t\tcamera.zoomTo(node, factor);\n\n\t\tlet bs;\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 THREE.Sphere());\n\t\t}\n\t\tbs = bs.clone().applyMatrix4(node.matrixWorld); \n\n\t\tlet startPosition = view.position.clone();\n\t\tlet endPosition = camera.position.clone();\n\t\tlet startTarget = view.getPivot();\n\t\tlet endTarget = bs.center;\n\t\tlet startRadius = view.radius;\n\t\tlet endRadius = endPosition.distanceTo(endTarget);\n\n\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t{ // animate camera position\n\t\t\tlet pos = startPosition.clone();\n\t\t\tlet tween = new TWEEN.Tween(pos).to(endPosition, animationDuration);\n\t\t\ttween.easing(easing);\n\n\t\t\ttween.onUpdate(() => {\n\t\t\t\tview.position.copy(pos);\n\t\t\t});\n\n\t\t\ttween.start();\n\t\t}\n\n\t\t{ // animate camera target\n\t\t\tlet target = startTarget.clone();\n\t\t\tlet tween = new TWEEN.Tween(target).to(endTarget, animationDuration);\n\t\t\ttween.easing(easing);\n\t\t\ttween.onUpdate(() => {\n\t\t\t\tview.lookAt(target);\n\t\t\t});\n\t\t\ttween.onComplete(() => {\n\t\t\t\tview.lookAt(target);\n\t\t\t\tthis.dispatchEvent({type: 'focusing_finished', target: this});\n\t\t\t});\n\n\t\t\tthis.dispatchEvent({type: 'focusing_started', target: this});\n\t\t\ttween.start();\n\t\t}\n\t};\n\n\tmoveToGpsTimeVicinity(time){\n\t\tconst result = Potree.Utils.findClosestGpsTime(time, viewer);\n\n\t\tconst box = result.node.pointcloud.deepestNodeAt(result.position).getBoundingBox();\n\t\tconst diameter = box.min.distanceTo(box.max);\n\n\t\tconst camera = this.scene.getActiveCamera();\n\t\tconst offset = camera.getWorldDirection(new THREE.Vector3()).multiplyScalar(diameter);\n\t\tconst newCamPos = result.position.clone().sub(offset);\n\n\t\tthis.scene.view.position.copy(newCamPos);\n\t\tthis.scene.view.lookAt(result.position);\n\t}\n\n\tshowAbout () {\n\t\t$(function () {\n\t\t\t$('#about-panel').dialog();\n\t\t});\n\t};\n\n\tgetBoundingBox (pointclouds) {\n\t\treturn this.scene.getBoundingBox(pointclouds);\n\t};\n\n\tgetGpsTimeExtent(){\n\t\tconst range = [Infinity, -Infinity];\n\n\t\tfor(const pointcloud of this.scene.pointclouds){\n\t\t\tconst attributes = pointcloud.pcoGeometry.pointAttributes.attributes;\n\t\t\tconst aGpsTime = attributes.find(a => a.name === \"gps-time\");\n\n\t\t\tif(aGpsTime){\n\t\t\t\trange[0] = Math.min(range[0], aGpsTime.range[0]);\n\t\t\t\trange[1] = Math.max(range[1], aGpsTime.range[1]);\n\t\t\t}\n\t\t}\n\n\t\treturn range;\n\t}\n\n\tfitToScreen (factor = 1, animationDuration = 0) {\n\t\tlet box = this.getBoundingBox(this.scene.pointclouds);\n\n\t\tlet node = new THREE.Object3D();\n\t\tnode.boundingBox = box;\n\n\t\tthis.zoomTo(node, factor, animationDuration);\n\t\tthis.controls.stop();\n\t};\n\n\ttoggleNavigationCube() {\n\t\tthis.navigationCube.visible = !this.navigationCube.visible;\n\t}\n\n\tsetView(view) {\n\t\tif(!view) return;\n\n\t\tswitch(view) {\n\t\t\tcase \"F\":\n\t\t\t\tthis.setFrontView();\n\t\t\t\tbreak;\n\t\t\tcase \"B\":\n\t\t\t\tthis.setBackView();\n\t\t\t\tbreak;\n\t\t\tcase \"L\":\n\t\t\t\tthis.setLeftView();\n\t\t\t\tbreak;\n\t\t\tcase \"R\":\n\t\t\t\tthis.setRightView();\n\t\t\t\tbreak;\n\t\t\tcase \"U\":\n\t\t\t\tthis.setTopView();\n\t\t\t\tbreak;\n\t\t\tcase \"D\":\n\t\t\t\tthis.setBottomView();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\n\tsetTopView(){\n\t\tthis.scene.view.yaw = 0;\n\t\tthis.scene.view.pitch = -Math.PI / 2;\n\n\t\tthis.fitToScreen();\n\t};\n\t\n\tsetBottomView(){\n\t\tthis.scene.view.yaw = -Math.PI;\n\t\tthis.scene.view.pitch = Math.PI / 2;\n\t\t\n\t\tthis.fitToScreen();\n\t};\n\n\tsetFrontView(){\n\t\tthis.scene.view.yaw = 0;\n\t\tthis.scene.view.pitch = 0;\n\n\t\tthis.fitToScreen();\n\t};\n\t\n\tsetBackView(){\n\t\tthis.scene.view.yaw = Math.PI;\n\t\tthis.scene.view.pitch = 0;\n\t\t\n\t\tthis.fitToScreen();\n\t};\n\n\tsetLeftView(){\n\t\tthis.scene.view.yaw = -Math.PI / 2;\n\t\tthis.scene.view.pitch = 0;\n\n\t\tthis.fitToScreen();\n\t};\n\n\tsetRightView () {\n\t\tthis.scene.view.yaw = Math.PI / 2;\n\t\tthis.scene.view.pitch = 0;\n\n\t\tthis.fitToScreen();\n\t};\n\n\tflipYZ () {\n\t\tthis.isFlipYZ = !this.isFlipYZ;\n\n\t\t// TODO flipyz\n\t\tconsole.log('TODO');\n\t}\n\t\n\tsetCameraMode(mode){\n\t\tthis.scene.cameraMode = mode;\n\n\t\tfor(let pointcloud of this.scene.pointclouds) {\n\t\t\tpointcloud.material.useOrthographicCamera = mode == CameraMode.ORTHOGRAPHIC;\n\t\t}\n\t}\n\n\tgetProjection(){\n\t\tconst pointcloud = this.scene.pointclouds[0];\n\n\t\tif(pointcloud){\n\t\t\treturn pointcloud.projection;\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync loadProject(url){\n\n\t\tconst response = await fetch(url);\n\t\n\t\tconst text = await response.text();\n\t\tconst json = JSON5.parse(text);\n\t\t// const json = JSON.parse(text);\n\n\t\tif(json.type === \"Potree\"){\n\t\t\tPotree.loadProject(viewer, json);\n\t\t}\n\n\t\t//Potree.loadProject(this, url);\n\t}\n\n\tsaveProject(){\n\t\treturn Potree.saveProject(this);\n\t}\n\t\n\tloadSettingsFromURL(){\n\t\tif(Utils.getParameterByName(\"pointSize\")){\n\t\t\tthis.setPointSize(parseFloat(Utils.getParameterByName(\"pointSize\")));\n\t\t}\n\t\t\n\t\tif(Utils.getParameterByName(\"FOV\")){\n\t\t\tthis.setFOV(parseFloat(Utils.getParameterByName(\"FOV\")));\n\t\t}\n\t\t\n\t\tif(Utils.getParameterByName(\"opacity\")){\n\t\t\tthis.setOpacity(parseFloat(Utils.getParameterByName(\"opacity\")));\n\t\t}\n\t\t\n\t\tif(Utils.getParameterByName(\"edlEnabled\")){\n\t\t\tlet enabled = Utils.getParameterByName(\"edlEnabled\") === \"true\";\n\t\t\tthis.setEDLEnabled(enabled);\n\t\t}\n\n\t\tif (Utils.getParameterByName('edlRadius')) {\n\t\t\tthis.setEDLRadius(parseFloat(Utils.getParameterByName('edlRadius')));\n\t\t}\n\n\t\tif (Utils.getParameterByName('edlStrength')) {\n\t\t\tthis.setEDLStrength(parseFloat(Utils.getParameterByName('edlStrength')));\n\t\t}\n\n\t\tif (Utils.getParameterByName('pointBudget')) {\n\t\t\tthis.setPointBudget(parseFloat(Utils.getParameterByName('pointBudget')));\n\t\t}\n\n\t\tif (Utils.getParameterByName('showBoundingBox')) {\n\t\t\tlet enabled = Utils.getParameterByName('showBoundingBox') === 'true';\n\t\t\tif (enabled) {\n\t\t\t\tthis.setShowBoundingBox(true);\n\t\t\t} else {\n\t\t\t\tthis.setShowBoundingBox(false);\n\t\t\t}\n\t\t}\n\n\t\tif (Utils.getParameterByName('material')) {\n\t\t\tlet material = Utils.getParameterByName('material');\n\t\t\tthis.setMaterial(material);\n\t\t}\n\n\t\tif (Utils.getParameterByName('pointSizing')) {\n\t\t\tlet sizing = Utils.getParameterByName('pointSizing');\n\t\t\tthis.setPointSizing(sizing);\n\t\t}\n\n\t\tif (Utils.getParameterByName('quality')) {\n\t\t\tlet quality = Utils.getParameterByName('quality');\n\t\t\tthis.setQuality(quality);\n\t\t}\n\n\t\tif (Utils.getParameterByName('position')) {\n\t\t\tlet value = Utils.getParameterByName('position');\n\t\t\tvalue = value.replace('[', '').replace(']', '');\n\t\t\tlet tokens = value.split(';');\n\t\t\tlet x = parseFloat(tokens[0]);\n\t\t\tlet y = parseFloat(tokens[1]);\n\t\t\tlet z = parseFloat(tokens[2]);\n\n\t\t\tthis.scene.view.position.set(x, y, z);\n\t\t}\n\n\t\tif (Utils.getParameterByName('target')) {\n\t\t\tlet value = Utils.getParameterByName('target');\n\t\t\tvalue = value.replace('[', '').replace(']', '');\n\t\t\tlet tokens = value.split(';');\n\t\t\tlet x = parseFloat(tokens[0]);\n\t\t\tlet y = parseFloat(tokens[1]);\n\t\t\tlet z = parseFloat(tokens[2]);\n\n\t\t\tthis.scene.view.lookAt(new THREE.Vector3(x, y, z));\n\t\t}\n\n\t\tif (Utils.getParameterByName('background')) {\n\t\t\tlet value = Utils.getParameterByName('background');\n\t\t\tthis.setBackground(value);\n\t\t}\n\n\t\t// if(Utils.getParameterByName(\"elevationRange\")){\n\t\t//\tlet value = Utils.getParameterByName(\"elevationRange\");\n\t\t//\tvalue = value.replace(\"[\", \"\").replace(\"]\", \"\");\n\t\t//\tlet tokens = value.split(\";\");\n\t\t//\tlet x = parseFloat(tokens[0]);\n\t\t//\tlet y = parseFloat(tokens[1]);\n\t\t//\n\t\t//\tthis.setElevationRange(x, y);\n\t\t//\t//this.scene.view.target.set(x, y, z);\n\t\t// }\n\t};\n\n\t// ------------------------------------------------------------------------------------\n\t// Viewer Internals\n\t// ------------------------------------------------------------------------------------\n\n\tcreateControls () {\n\t\t{ // create FIRST PERSON CONTROLS\n\t\t\tthis.fpControls = new FirstPersonControls(this);\n\t\t\tthis.fpControls.enabled = false;\n\t\t\tthis.fpControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\tthis.fpControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t}\n\n\t\t// { // create GEO CONTROLS\n\t\t//\tthis.geoControls = new GeoControls(this.scene.camera, this.renderer.domElement);\n\t\t//\tthis.geoControls.enabled = false;\n\t\t//\tthis.geoControls.addEventListener(\"start\", this.disableAnnotations.bind(this));\n\t\t//\tthis.geoControls.addEventListener(\"end\", this.enableAnnotations.bind(this));\n\t\t//\tthis.geoControls.addEventListener(\"move_speed_changed\", (event) => {\n\t\t//\t\tthis.setMoveSpeed(this.geoControls.moveSpeed);\n\t\t//\t});\n\t\t// }\n\n\t\t{ // create ORBIT CONTROLS\n\t\t\tthis.orbitControls = new OrbitControls(this);\n\t\t\tthis.orbitControls.enabled = false;\n\t\t\tthis.orbitControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\tthis.orbitControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t}\n\n\t\t{ // create EARTH CONTROLS\n\t\t\tthis.earthControls = new EarthControls(this);\n\t\t\tthis.earthControls.enabled = false;\n\t\t\tthis.earthControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\tthis.earthControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t}\n\n\t\t{ // create DEVICE ORIENTATION CONTROLS\n\t\t\tthis.deviceControls = new DeviceOrientationControls(this);\n\t\t\tthis.deviceControls.enabled = false;\n\t\t\tthis.deviceControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\tthis.deviceControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t}\n\n\t\t{ // create VR CONTROLS\n\t\t\tthis.vrControls = new VRControls(this);\n\t\t\tthis.vrControls.enabled = false;\n\t\t\tthis.vrControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\tthis.vrControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t}\n\n\n\t};\n\n\ttoggleSidebar () {\n\t\tlet renderArea = $('#potree_render_area');\n\t\tlet isVisible = renderArea.css('left') !== '0px';\n\n\t\tif (isVisible) {\n\t\t\trenderArea.css('left', '0px');\n\t\t} else {\n\t\t\trenderArea.css('left', '300px');\n\t\t}\n\t};\n\n\ttoggleMap () {\n\t\t// let map = $('#potree_map');\n\t\t// map.toggle(100);\n\n\t\tif (this.mapView) {\n\t\t\tthis.mapView.toggle();\n\t\t}\n\t};\n\n\tonGUILoaded(callback){\n\t\tif(this.guiLoaded){\n\t\t\tcallback();\n\t\t}else{\n\t\t\tthis.guiLoadTasks.push(callback);\n\t\t}\n\t}\n\n\tpromiseGuiLoaded(){\n\t\treturn new Promise( resolve => {\n\n\t\t\tif(this.guiLoaded){\n\t\t\t\tresolve();\n\t\t\t}else{\n\t\t\t\tthis.guiLoadTasks.push(resolve);\n\t\t\t}\n\t\t\n\t\t});\n\t}\n\n\tloadGUI(callback){\n\n\t\tif(callback){\n\t\t\tthis.onGUILoaded(callback);\n\t\t}\n\n\t\tlet viewer = this;\n\t\tlet sidebarContainer = $('#potree_sidebar_container');\n\t\tsidebarContainer.load(new URL(Potree.scriptPath + '/sidebar.html').href, () => {\n\t\t\tsidebarContainer.css('width', '300px');\n\t\t\tsidebarContainer.css('height', '100%');\n\n\t\t\tlet imgMenuToggle = document.createElement('img');\n\t\t\timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\timgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\tlet imgMapToggle = document.createElement('img');\n\t\t\timgMapToggle.src = new URL(Potree.resourcePath + '/icons/map_icon.png').href;\n\t\t\timgMapToggle.style.display = 'none';\n\t\t\timgMapToggle.onclick = e => { this.toggleMap(); };\n\t\t\timgMapToggle.id = 'potree_map_toggle';\n\n\t\t\t\n\n\t\t\tlet elButtons = $(\"#potree_quick_buttons\").get(0);\n\n\t\t\telButtons.append(imgMenuToggle);\n\t\t\telButtons.append(imgMapToggle);\n\n\n\t\t\tVRButton.createButton(this.renderer).then(vrButton => {\n\n\t\t\t\tif(vrButton == null){\n\t\t\t\t\tconsole.log(\"VR not supported or active.\");\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.renderer.xr.enabled = true;\n\n\t\t\t\tlet element = vrButton.element;\n\n\t\t\t\telement.style.position = \"\";\n\t\t\t\telement.style.bottom = \"\";\n\t\t\t\telement.style.left = \"\";\n\t\t\t\telement.style.margin = \"4px\";\n\t\t\t\telement.style.fontSize = \"100%\";\n\t\t\t\telement.style.width = \"2.5em\";\n\t\t\t\telement.style.height = \"2.5em\";\n\t\t\t\telement.style.padding = \"0\";\n\t\t\t\telement.style.textShadow = \"black 2px 2px 2px\";\n\t\t\t\telement.style.display = \"block\";\n\n\t\t\t\telButtons.append(element);\n\n\t\t\t\tvrButton.onStart(() => {\n\t\t\t\t\tthis.dispatchEvent({type: \"vr_start\"});\n\t\t\t\t});\n\n\t\t\t\tvrButton.onEnd(() => {\n\t\t\t\t\tthis.dispatchEvent({type: \"vr_end\"});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.mapView = new MapView(this);\n\t\t\tthis.mapView.init();\n\n\t\t\ti18n.init({\n\t\t\t\tlng: 'en',\n\t\t\t\tresGetPath: Potree.resourcePath + '/lang/__lng__/__ns__.json',\n\t\t\t\tpreload: ['en', 'fr', 'de', 'jp', 'se', 'es', 'zh', 'it'],\n\t\t\t\tgetAsync: true,\n\t\t\t\tdebug: false\n\t\t\t}, function (t) {\n\t\t\t\t// Start translation once everything is loaded\n\t\t\t\t$('body').i18n();\n\t\t\t});\n\n\t\t\t$(() => {\n\t\t\t\t//initSidebar(this);\n\t\t\t\tlet sidebar = new Sidebar(this);\n\t\t\t\tsidebar.init();\n\n\t\t\t\tthis.sidebar = sidebar;\n\n\t\t\t\t//if (callback) {\n\t\t\t\t//\t$(callback);\n\t\t\t\t//}\n\n\t\t\t\tlet elProfile = $('
        ').load(new URL(Potree.scriptPath + '/profile.html').href, () => {\n\t\t\t\t\t$(document.body).append(elProfile.children());\n\t\t\t\t\tthis.profileWindow = new ProfileWindow(this);\n\t\t\t\t\tthis.profileWindowController = new ProfileWindowController(this);\n\n\t\t\t\t\t$('#profile_window').draggable({\n\t\t\t\t\t\thandle: $('#profile_titlebar'),\n\t\t\t\t\t\tcontainment: $(document.body)\n\t\t\t\t\t});\n\t\t\t\t\t$('#profile_window').resizable({\n\t\t\t\t\t\tcontainment: $(document.body),\n\t\t\t\t\t\thandles: 'n, e, s, w'\n\t\t\t\t\t});\n\n\t\t\t\t\t$(() => {\n\t\t\t\t\t\tthis.guiLoaded = true;\n\t\t\t\t\t\tfor(let task of this.guiLoadTasks){\n\t\t\t\t\t\t\ttask();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t\n\n\t\t\t});\n\n\t\t\t\n\t\t});\n\n\t\treturn this.promiseGuiLoaded();\n\t}\n\n\tsetLanguage (lang) {\n\t\ti18n.setLng(lang);\n\t\t$('body').i18n();\n\t}\n\n\tsetServer (server) {\n\t\tthis.server = server;\n\t}\n\n\tinitDragAndDrop(){\n\t\tfunction allowDrag(e) {\n\t\t\te.dataTransfer.dropEffect = 'copy';\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tlet dropHandler = async (event) => {\n\t\t\tconsole.log(event);\n\t\t\tevent.preventDefault();\n\n\t\t\tfor(const item of event.dataTransfer.items){\n\t\t\t\tconsole.log(item);\n\n\t\t\t\tif(item.kind !== \"file\"){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst file = item.getAsFile();\n\n\t\t\t\tconst isJson5 = file.name.toLowerCase().endsWith(\".json5\");\n\t\t\t\tconst isGeoPackage = file.name.toLowerCase().endsWith(\".gpkg\");\n\n\t\t\t\tif(isJson5){\n\t\t\t\t\ttry{\n\n\t\t\t\t\t\tconst text = await file.text();\n\t\t\t\t\t\tconst json = JSON5.parse(text);\n\n\t\t\t\t\t\tif(json.type === \"Potree\"){\n\t\t\t\t\t\t\tPotree.loadProject(viewer, json);\n\t\t\t\t\t\t}\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\tconsole.error(\"failed to parse the dropped file as JSON\");\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\t\t\t\t}else if(isGeoPackage){\n\t\t\t\t\tconst hasPointcloud = viewer.scene.pointclouds.length > 0;\n\n\t\t\t\t\tif(!hasPointcloud){\n\t\t\t\t\t\tlet msg = \"At least one point cloud is needed that specifies the \";\n\t\t\t\t\t\tmsg += \"coordinate reference system before loading vector data.\";\n\t\t\t\t\t\tconsole.error(msg);\n\t\t\t\t\t}else{\n\n\t\t\t\t\t\tproj4.defs(\"WGS84\", \"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs\");\n\t\t\t\t\t\tproj4.defs(\"pointcloud\", this.getProjection());\n\t\t\t\t\t\tlet transform = proj4(\"WGS84\", \"pointcloud\");\n\n\t\t\t\t\t\tconst buffer = await file.arrayBuffer();\n\n\t\t\t\t\t\tconst params = {\n\t\t\t\t\t\t\ttransform: transform,\n\t\t\t\t\t\t\tsource: file.name,\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst geo = await Potree.GeoPackageLoader.loadBuffer(buffer, params);\n\t\t\t\t\t\tviewer.scene.addGeopackage(geo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t};\n\n\n\t\t$(\"body\")[0].addEventListener(\"dragenter\", allowDrag);\n\t\t$(\"body\")[0].addEventListener(\"dragover\", allowDrag);\n\t\t$(\"body\")[0].addEventListener(\"drop\", dropHandler);\n\t}\n\n\tinitThree () {\n\n\t\tconsole.log(`initializing three.js ${THREE.REVISION}`);\n\n\t\tlet width = this.renderArea.clientWidth;\n\t\tlet height = this.renderArea.clientHeight;\n\n\t\tlet contextAttributes = {\n\t\t\talpha: true,\n\t\t\tdepth: true,\n\t\t\tstencil: false,\n\t\t\tantialias: false,\n\t\t\t//premultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: true,\n\t\t\tpowerPreference: \"high-performance\",\n\t\t};\n\n\t\t// let contextAttributes = {\n\t\t// \talpha: false,\n\t\t// \tpreserveDrawingBuffer: true,\n\t\t// };\n\n\t\t// let contextAttributes = {\n\t\t// \talpha: false,\n\t\t// \tpreserveDrawingBuffer: true,\n\t\t// };\n\n\t\tlet canvas = document.createElement(\"canvas\");\n\n\t\tlet context = canvas.getContext('webgl', contextAttributes );\n\n\t\tthis.renderer = new THREE.WebGLRenderer({\n\t\t\talpha: true, \n\t\t\tpremultipliedAlpha: false,\n\t\t\tcanvas: canvas,\n\t\t\tcontext: context});\n\t\tthis.renderer.sortObjects = false;\n\t\tthis.renderer.setSize(width, height);\n\t\tthis.renderer.autoClear = false;\n\t\tthis.renderArea.appendChild(this.renderer.domElement);\n\t\tthis.renderer.domElement.tabIndex = '2222';\n\t\tthis.renderer.domElement.style.position = 'absolute';\n\t\tthis.renderer.domElement.addEventListener('mousedown', () => {\n\t\t\tthis.renderer.domElement.focus();\n\t\t});\n\t\t//this.renderer.domElement.focus();\n\n\t\t// NOTE: If extension errors occur, pass the string into this.renderer.extensions.get(x) before enabling\n\t\t// enable frag_depth extension for the interpolation shader, if available\n\t\tlet gl = this.renderer.getContext();\n\t\tgl.getExtension('EXT_frag_depth');\n\t\tgl.getExtension('WEBGL_depth_texture');\n\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\n\t\tif(gl.createVertexArray == null){\n\t\t\tlet extVAO = gl.getExtension('OES_vertex_array_object');\n\n\t\t\tif(!extVAO){\n\t\t\t\tthrow new Error(\"OES_vertex_array_object extension not supported\");\n\t\t\t}\n\n\t\t\tgl.createVertexArray = extVAO.createVertexArrayOES.bind(extVAO);\n\t\t\tgl.bindVertexArray = extVAO.bindVertexArrayOES.bind(extVAO);\n\t\t}\n\t\t\n\t}\n\n\tupdateAnnotations () {\n\n\t\tif(!this.visibleAnnotations){\n\t\t\tthis.visibleAnnotations = new Set();\n\t\t}\n\n\t\tthis.scene.annotations.updateBounds();\n\t\tthis.scene.cameraP.updateMatrixWorld();\n\t\tthis.scene.cameraO.updateMatrixWorld();\n\t\t\n\t\tlet distances = [];\n\n\t\tlet renderAreaSize = this.renderer.getSize(new THREE.Vector2());\n\n\t\tlet viewer = this;\n\n\t\tlet visibleNow = [];\n\t\tthis.scene.annotations.traverse(annotation => {\n\n\t\t\tif (annotation === this.scene.annotations) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!annotation.visible) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tannotation.scene = this.scene;\n\n\t\t\tlet element = annotation.domElement;\n\n\t\t\tlet position = annotation.position.clone();\n\t\t\tposition.add(annotation.offset);\n\t\t\tif (!position) {\n\t\t\t\tposition = annotation.boundingBox.getCenter(new THREE.Vector3());\n\t\t\t}\n\n\t\t\tlet distance = viewer.scene.cameraP.position.distanceTo(position);\n\t\t\tlet radius = annotation.boundingBox.getBoundingSphere(new THREE.Sphere()).radius;\n\n\t\t\tlet screenPos = new THREE.Vector3();\n\t\t\tlet screenSize = 0;\n\n\t\t\t{\n\t\t\t\t// SCREEN POS\n\t\t\t\tscreenPos.copy(position).project(this.scene.getActiveCamera());\n\t\t\t\tscreenPos.x = renderAreaSize.x * (screenPos.x + 1) / 2;\n\t\t\t\tscreenPos.y = renderAreaSize.y * (1 - (screenPos.y + 1) / 2);\n\n\n\t\t\t\t// SCREEN SIZE\n\t\t\t\tif(viewer.scene.cameraMode == CameraMode.PERSPECTIVE) {\n\t\t\t\t\tlet fov = Math.PI * viewer.scene.cameraP.fov / 180;\n\t\t\t\t\tlet slope = Math.tan(fov / 2.0);\n\t\t\t\t\tlet projFactor = 0.5 * renderAreaSize.y / (slope * distance);\n\t\t\t\t\tscreenSize = radius * projFactor;\n\t\t\t\t} else {\n\t\t\t\t\tscreenSize = Utils.projectedRadiusOrtho(radius, viewer.scene.cameraO.projectionMatrix, renderAreaSize.x, renderAreaSize.y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telement.css(\"left\", screenPos.x + \"px\");\n\t\t\telement.css(\"top\", screenPos.y + \"px\");\n\t\t\t//element.css(\"display\", \"block\");\n\n\t\t\tlet zIndex = 10000000 - distance * (10000000 / this.scene.cameraP.far);\n\t\t\tif(annotation.descriptionVisible){\n\t\t\t\tzIndex += 10000000;\n\t\t\t}\n\t\t\telement.css(\"z-index\", parseInt(zIndex));\n\n\t\t\tif(annotation.children.length > 0){\n\t\t\t\tlet expand = screenSize > annotation.collapseThreshold || annotation.boundingBox.containsPoint(this.scene.getActiveCamera().position);\n\t\t\t\tannotation.expand = expand;\n\n\t\t\t\tif (!expand) {\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\n\t\t\t\treturn expand;\n\t\t\t} else {\n\t\t\t\t//annotation.display = (screenPos.z >= -1 && screenPos.z <= 1);\n\t\t\t\tlet inFrustum = (screenPos.z >= -1 && screenPos.z <= 1);\n\t\t\t\tif(inFrustum){\n\t\t\t\t\tvisibleNow.push(annotation);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t});\n\n\t\tlet notVisibleAnymore = new Set(this.visibleAnnotations);\n\t\tfor(let annotation of visibleNow){\n\t\t\tannotation.display = true;\n\t\t\t\n\t\t\tnotVisibleAnymore.delete(annotation);\n\t\t}\n\t\tthis.visibleAnnotations = visibleNow;\n\n\t\tfor(let annotation of notVisibleAnymore){\n\t\t\tannotation.display = false;\n\t\t}\n\n\t}\n\n\tupdateMaterialDefaults(pointcloud){\n\t\t// PROBLEM STATEMENT:\n\t\t// * [min, max] of intensity, source id, etc. are computed as point clouds are loaded\n\t\t// * the point cloud material won't know the range it should use until some data is loaded\n\t\t// * users can modify the range at runtime, but sensible default ranges should be \n\t\t// applied even if no GUI is present\n\t\t// * display ranges shouldn't suddenly change even if the actual range changes over time.\n\t\t// e.g. the root node has intensity range [1, 478]. One of the descendants increases range to \n\t\t// [0, 2047]. We should not automatically change to the new range because that would result\n\t\t// in sudden and drastic changes of brightness. We should adjust the min/max of the sidebar slider.\n\n\t\tconst material = pointcloud.material;\n\n\t\tconst attIntensity = pointcloud.getAttribute(\"intensity\");\n\t\t\n\t\tif(attIntensity != null && material.intensityRange[0] === Infinity){\n\t\t\tmaterial.intensityRange = [...attIntensity.range];\n\t\t}\n\n\t\t// const attIntensity = pointcloud.getAttribute(\"intensity\");\n\t\t// if(attIntensity && material.intensityRange[0] === Infinity){\n\t\t// \tmaterial.intensityRange = [...attIntensity.range];\n\t\t// }\n\n\t\t// let attributes = pointcloud.getAttributes();\n\n\t\t// for(let attribute of attributes.attributes){\n\t\t// \tif(attribute.range){\n\t\t// \t\tlet range = [...attribute.range];\n\t\t// \t\tmaterial.computedRange.set(attribute.name, range);\n\t\t// \t\t//material.setRange(attribute.name, range);\n\t\t// \t}\n\t\t// }\n\n\n\t}\n\n\tupdate(delta, timestamp){\n\n\t\tif(Potree.measureTimings) performance.mark(\"update-start\");\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'update_start',\n\t\t\tdelta: delta,\n\t\t\ttimestamp: timestamp});\n\n\t\t\n\t\tconst scene = this.scene;\n\t\tconst camera = scene.getActiveCamera();\n\t\tconst visiblePointClouds = this.scene.pointclouds.filter(pc => pc.visible)\n\t\t\n\t\tPotree.pointLoadLimit = Potree.pointBudget * 2;\n\n\t\tconst lTarget = camera.position.clone().add(camera.getWorldDirection(new THREE.Vector3()).multiplyScalar(1000));\n\t\tthis.scene.directionalLight.position.copy(camera.position);\n\t\tthis.scene.directionalLight.lookAt(lTarget);\n\n\n\t\tfor (let pointcloud of visiblePointClouds) {\n\n\t\t\tpointcloud.showBoundingBox = this.showBoundingBox;\n\t\t\tpointcloud.generateDEM = this.generateDEM;\n\t\t\tpointcloud.minimumNodePixelSize = this.minNodeSize;\n\n\t\t\tlet material = pointcloud.material;\n\n\t\t\tmaterial.uniforms.uFilterReturnNumberRange.value = this.filterReturnNumberRange;\n\t\t\tmaterial.uniforms.uFilterNumberOfReturnsRange.value = this.filterNumberOfReturnsRange;\n\t\t\tmaterial.uniforms.uFilterGPSTimeClipRange.value = this.filterGPSTimeRange;\n\t\t\tmaterial.uniforms.uFilterPointSourceIDClipRange.value = this.filterPointSourceIDRange;\n\n\t\t\tmaterial.classification = this.classifications;\n\t\t\tmaterial.recomputeClassification();\n\n\t\t\tthis.updateMaterialDefaults(pointcloud);\n\t\t}\n\n\t\t{\n\t\t\tif(this.showBoundingBox){\n\t\t\t\tlet bbRoot = this.scene.scene.getObjectByName(\"potree_bounding_box_root\");\n\t\t\t\tif(!bbRoot){\n\t\t\t\t\tlet node = new THREE.Object3D();\n\t\t\t\t\tnode.name = \"potree_bounding_box_root\";\n\t\t\t\t\tthis.scene.scene.add(node);\n\t\t\t\t\tbbRoot = node;\n\t\t\t\t}\n\n\t\t\t\tlet visibleBoxes = [];\n\t\t\t\tfor(let pointcloud of this.scene.pointclouds){\n\t\t\t\t\tfor(let node of pointcloud.visibleNodes.filter(vn => vn.boundingBoxNode !== undefined)){\n\t\t\t\t\t\tlet box = node.boundingBoxNode;\n\t\t\t\t\t\tvisibleBoxes.push(box);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbbRoot.children = visibleBoxes;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.freeze) {\n\t\t\tlet result = Potree.updatePointClouds(scene.pointclouds, camera, this.renderer);\n\n\n\t\t\t// DEBUG - ONLY DISPLAY NODES THAT INTERSECT MOUSE\n\t\t\t//if(false){ \n\n\t\t\t//\tlet renderer = viewer.renderer;\n\t\t\t//\tlet mouse = viewer.inputHandler.mouse;\n\n\t\t\t//\tlet nmouse = {\n\t\t\t//\t\tx: (mouse.x / renderer.domElement.clientWidth) * 2 - 1,\n\t\t\t//\t\ty: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1\n\t\t\t//\t};\n\n\t\t\t//\tlet pickParams = {};\n\n\t\t\t//\t//if(params.pickClipped){\n\t\t\t//\t//\tpickParams.pickClipped = params.pickClipped;\n\t\t\t//\t//}\n\n\t\t\t//\tpickParams.x = mouse.x;\n\t\t\t//\tpickParams.y = renderer.domElement.clientHeight - mouse.y;\n\n\t\t\t//\tlet raycaster = new THREE.Raycaster();\n\t\t\t//\traycaster.setFromCamera(nmouse, camera);\n\t\t\t//\tlet ray = raycaster.ray;\n\n\t\t\t//\tfor(let pointcloud of scene.pointclouds){\n\t\t\t//\t\tlet nodes = pointcloud.nodesOnRay(pointcloud.visibleNodes, ray);\n\t\t\t//\t\tpointcloud.visibleNodes = nodes;\n\n\t\t\t//\t}\n\t\t\t//}\n\n\t\t\t// const tStart = performance.now();\n\t\t\t// const worldPos = new THREE.Vector3();\n\t\t\t// const camPos = viewer.scene.getActiveCamera().getWorldPosition(new THREE.Vector3());\n\t\t\t// let lowestDistance = Infinity;\n\t\t\t// let numNodes = 0;\n\n\t\t\t// viewer.scene.scene.traverse(node => {\n\t\t\t// \tnode.getWorldPosition(worldPos);\n\n\t\t\t// \tconst distance = worldPos.distanceTo(camPos);\n\n\t\t\t// \tlowestDistance = Math.min(lowestDistance, distance);\n\n\t\t\t// \tnumNodes++;\n\n\t\t\t// \tif(Number.isNaN(distance)){\n\t\t\t// \t\tconsole.error(\":(\");\n\t\t\t// \t}\n\t\t\t// });\n\t\t\t// const duration = (performance.now() - tStart).toFixed(2);\n\n\t\t\t// Potree.debug.computeNearDuration = duration;\n\t\t\t// Potree.debug.numNodes = numNodes;\n\n\t\t\t//console.log(lowestDistance.toString(2), duration);\n\n\t\t\tconst tStart = performance.now();\n\t\t\tconst campos = camera.position;\n\t\t\tlet closestImage = Infinity;\n\t\t\tfor(const images of this.scene.orientedImages){\n\t\t\t\tfor(const image of images.images){\n\t\t\t\t\tconst distance = image.mesh.position.distanceTo(campos);\n\n\t\t\t\t\tclosestImage = Math.min(closestImage, distance);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst tEnd = performance.now();\n\n\t\t\tif(result.lowestSpacing !== Infinity){\n\t\t\t\tlet near = result.lowestSpacing * 10.0;\n\t\t\t\tlet far = -this.getBoundingBox().applyMatrix4(camera.matrixWorldInverse).min.z;\n\n\t\t\t\tfar = Math.max(far * 1.5, 10000);\n\t\t\t\tnear = Math.min(100.0, Math.max(0.01, near));\n\t\t\t\tnear = Math.min(near, closestImage);\n\t\t\t\tfar = Math.max(far, near + 10000);\n\n\t\t\t\tif(near === Infinity){\n\t\t\t\t\tnear = 0.1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcamera.near = near;\n\t\t\t\tcamera.far = far;\n\t\t\t}else{\n\t\t\t\t// don't change near and far in this case\n\t\t\t}\n\n\t\t\tif(this.scene.cameraMode == CameraMode.ORTHOGRAPHIC) {\n\t\t\t\tcamera.near = -camera.far;\n\t\t\t}\n\t\t} \n\t\t\n\t\tthis.scene.cameraP.fov = this.fov;\n\t\t\n\t\tlet controls = this.getControls();\n\t\tif (controls === this.deviceControls) {\n\t\t\tthis.controls.setScene(scene);\n\t\t\tthis.controls.update(delta);\n\n\t\t\tthis.scene.cameraP.position.copy(scene.view.position);\n\t\t\tthis.scene.cameraO.position.copy(scene.view.position);\n\t\t} else if (controls !== null) {\n\t\t\tcontrols.setScene(scene);\n\t\t\tcontrols.update(delta);\n\n\t\t\tif(typeof debugDisabled === \"undefined\" ){\n\t\t\t\tthis.scene.cameraP.position.copy(scene.view.position);\n\t\t\t\tthis.scene.cameraP.rotation.order = \"ZXY\";\n\t\t\t\tthis.scene.cameraP.rotation.x = Math.PI / 2 + this.scene.view.pitch;\n\t\t\t\tthis.scene.cameraP.rotation.z = this.scene.view.yaw;\n\t\t\t}\n\n\t\t\tthis.scene.cameraO.position.copy(scene.view.position);\n\t\t\tthis.scene.cameraO.rotation.order = \"ZXY\";\n\t\t\tthis.scene.cameraO.rotation.x = Math.PI / 2 + this.scene.view.pitch;\n\t\t\tthis.scene.cameraO.rotation.z = this.scene.view.yaw;\n\t\t}\n\t\t\n\t\tcamera.updateMatrix();\n\t\tcamera.updateMatrixWorld();\n\t\tcamera.matrixWorldInverse.copy(camera.matrixWorld).invert();\n\n\t\t{\n\t\t\tif(this._previousCamera === undefined){\n\t\t\t\tthis._previousCamera = this.scene.getActiveCamera().clone();\n\t\t\t\tthis._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation);\n\t\t\t}\n\n\t\t\tif(!this._previousCamera.matrixWorld.equals(camera.matrixWorld)){\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: \"camera_changed\",\n\t\t\t\t\tprevious: this._previousCamera,\n\t\t\t\t\tcamera: camera\n\t\t\t\t});\n\t\t\t}else if(!this._previousCamera.projectionMatrix.equals(camera.projectionMatrix)){\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: \"camera_changed\",\n\t\t\t\t\tprevious: this._previousCamera,\n\t\t\t\t\tcamera: camera\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._previousCamera = this.scene.getActiveCamera().clone();\n\t\t\tthis._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation);\n\n\t\t}\n\n\t\t{ // update clip boxes\n\t\t\tlet boxes = [];\n\t\t\t\n\t\t\t// volumes with clipping enabled\n\t\t\t//boxes.push(...this.scene.volumes.filter(v => (v.clip)));\n\t\t\tboxes.push(...this.scene.volumes.filter(v => (v.clip && v instanceof BoxVolume)));\n\n\t\t\t// profile segments\n\t\t\tfor(let profile of this.scene.profiles){\n\t\t\t\tboxes.push(...profile.boxes);\n\t\t\t}\n\t\t\t\n\t\t\t// Needed for .getInverse(), pre-empt a determinant of 0, see #815 / #816\n\t\t\tlet degenerate = (box) => box.matrixWorld.determinant() !== 0;\n\t\t\t\n\t\t\tlet clipBoxes = boxes.filter(degenerate).map( box => {\n\t\t\t\tbox.updateMatrixWorld();\n\t\t\t\t\n\t\t\t\tlet boxInverse = box.matrixWorld.clone().invert();\n\t\t\t\tlet boxPosition = box.getWorldPosition(new THREE.Vector3());\n\n\t\t\t\treturn {box: box, inverse: boxInverse, position: boxPosition};\n\t\t\t});\n\n\t\t\tlet clipPolygons = this.scene.polygonClipVolumes.filter(vol => vol.initialized);\n\t\t\t\n\t\t\t// set clip volumes in material\n\t\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\t\tpointcloud.material.setClipBoxes(clipBoxes);\n\t\t\t\tpointcloud.material.setClipPolygons(clipPolygons, this.clippingTool.maxPolygonVertices);\n\t\t\t\tpointcloud.material.clipTask = this.clipTask;\n\t\t\t\tpointcloud.material.clipMethod = this.clipMethod;\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\t\tpointcloud.material.elevationGradientRepeat = this.elevationGradientRepeat;\n\t\t\t}\n\t\t}\n\t\t\n\t\t{ // update navigation cube\n\t\t\tthis.navigationCube.update(camera.rotation);\n\t\t}\n\n\t\tthis.updateAnnotations();\n\t\t\n\t\tif(this.mapView){\n\t\t\tthis.mapView.update(delta);\n\t\t\tif(this.mapView.sceneProjection){\n\t\t\t\t$( \"#potree_map_toggle\" ).css(\"display\", \"block\");\n\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\tTWEEN.update(timestamp);\n\n\t\tthis.dispatchEvent({\n\t\t\ttype: 'update',\n\t\t\tdelta: delta,\n\t\t\ttimestamp: timestamp});\n\t\t\t\n\t\tif(Potree.measureTimings) {\n\t\t\tperformance.mark(\"update-end\");\n\t\t\tperformance.measure(\"update\", \"update-start\", \"update-end\");\n\t\t}\n\t}\n\n\tgetPRenderer(){\n\t\tif(this.useHQ){\n\t\t\tif (!this.hqRenderer) {\n\t\t\t\tthis.hqRenderer = new HQSplatRenderer(this);\n\t\t\t}\n\t\t\tthis.hqRenderer.useEDL = this.useEDL;\n\n\t\t\treturn this.hqRenderer;\n\t\t}else{\n\t\t\tif (this.useEDL && Features.SHADER_EDL.isSupported()) {\n\t\t\t\tif (!this.edlRenderer) {\n\t\t\t\t\tthis.edlRenderer = new EDLRenderer(this);\n\t\t\t\t}\n\n\t\t\t\treturn this.edlRenderer;\n\t\t\t} else {\n\t\t\t\tif (!this.potreeRenderer) {\n\t\t\t\t\tthis.potreeRenderer = new PotreeRenderer(this);\n\t\t\t\t}\n\n\t\t\t\treturn this.potreeRenderer;\n\t\t\t}\n\t\t}\n\t}\n\n\trenderVR(){\n\n\t\tlet renderer = this.renderer;\n\n\t\trenderer.setClearColor(0x550000, 0);\n\t\trenderer.clear();\n\n\t\tlet xr = renderer.xr;\n\t\tlet dbg = new THREE.PerspectiveCamera();\n\t\tlet xrCameras = xr.getCamera(dbg);\n\n\t\tif(xrCameras.cameras.length !== 2){\n\t\t\treturn;\n\t\t}\n\n\t\tlet makeCam = this.vrControls.getCamera.bind(this.vrControls);\n\n\t\t{ // clear framebuffer\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(0x112233, 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\n\t\t// render background\n\t\tif(this.background === \"skybox\"){\n\t\t\tlet {skybox} = this;\n\n\t\t\tlet cam = makeCam();\n\t\t\tskybox.camera.rotation.copy(cam.rotation);\n\t\t\tskybox.camera.fov = cam.fov;\n\t\t\tskybox.camera.aspect = cam.aspect;\n\t\t\t\n\t\t\t// let dbg = new THREE.Object3D();\n\t\t\tlet dbg = skybox.parent;\n\t\t\t// dbg.up.set(0, 0, 1);\n\t\t\tdbg.rotation.x = Math.PI / 2;\n\n\t\t\t// skybox.camera.parent = dbg;\n\t\t\t// dbg.children.push(skybox.camera);\n\n\t\t\tdbg.updateMatrix();\n\t\t\tdbg.updateMatrixWorld();\n\n\t\t\tskybox.camera.updateMatrix();\n\t\t\tskybox.camera.updateMatrixWorld();\n\t\t\tskybox.camera.updateProjectionMatrix();\n\n\t\t\trenderer.render(skybox.scene, skybox.camera);\n\t\t\t// renderer.render(skybox.scene, cam);\n\t\t}else if(this.background === \"gradient\"){\n\t\t\t// renderer.render(this.scene.sceneBG, this.scene.cameraBG);\n\t\t}\n\n\t\tthis.renderer.xr.getSession().updateRenderState({\n\t\t\tdepthNear: 0.1,\n\t\t\tdepthFar: 10000\n\t\t});\n\t\t\n\t\tlet cam = null;\n\t\tlet view = null;\n\n\t\t{ // render world scene\n\t\t\tcam = makeCam();\n\t\t\tcam.position.z -= 0.8 * cam.scale.x;\n\t\t\tcam.parent = null;\n\t\t\t// cam.near = 0.05;\n\t\t\tcam.near = viewer.scene.getActiveCamera().near;\n\t\t\tcam.far = viewer.scene.getActiveCamera().far;\n\t\t\tcam.updateMatrix();\n\t\t\tcam.updateMatrixWorld();\n\n\t\t\tthis.scene.scene.updateMatrix();\n\t\t\tthis.scene.scene.updateMatrixWorld();\n\t\t\tthis.scene.scene.matrixAutoUpdate = false;\n\n\t\t\tlet camWorld = cam.matrixWorld.clone();\n\t\t\tview = camWorld.clone().invert();\n\t\t\tthis.scene.scene.matrix.copy(view);\n\t\t\tthis.scene.scene.matrixWorld.copy(view);\n\n\t\t\tcam.matrix.identity();\n\t\t\tcam.matrixWorld.identity();\n\t\t\tcam.matrixWorldInverse.identity();\n\n\t\t\trenderer.render(this.scene.scene, cam);\n\n\t\t\tthis.scene.scene.matrixWorld.identity();\n\n\t\t}\n\t\t\n\t\tfor(let pointcloud of this.scene.pointclouds){\n\n\t\t\tlet viewport = xrCameras.cameras[0].viewport;\n\n\t\t\tpointcloud.material.useEDL = false;\n\t\t\tpointcloud.screenHeight = viewport.height;\n\t\t\tpointcloud.screenWidth = viewport.width;\n\n\t\t\t// automatically switch to paraboloids because they cause far less flickering in VR, \n\t\t\t// when point sizes are larger than around 2 pixels\n\t\t\t// if(Features.SHADER_INTERPOLATION.isSupported()){\n\t\t\t// \tpointcloud.material.shape = Potree.PointShape.PARABOLOID;\n\t\t\t// }\n\t\t}\n\t\t\n\t\t// render point clouds\n\t\tfor(let xrCamera of xrCameras.cameras){\n\n\t\t\tlet v = xrCamera.viewport;\n\t\t\trenderer.setViewport(v.x, v.y, v.width, v.height);\n\n\t\t\t// xrCamera.fov = 90;\n\n\t\t\t{ // estimate VR fov\n\t\t\t\tlet proj = xrCamera.projectionMatrix;\n\t\t\t\tlet inv = proj.clone().invert();\n\n\t\t\t\tlet p1 = new THREE.Vector4(0, 1, -1, 1).applyMatrix4(inv);\n\t\t\t\tlet rad = p1.y\n\t\t\t\tlet fov = 180 * (rad / Math.PI);\n\n\t\t\t\txrCamera.fov = fov;\n\t\t\t}\n\n\t\t\tfor(let pointcloud of this.scene.pointclouds){\n\t\t\t\tconst {material} = pointcloud;\n\t\t\t\tmaterial.useEDL = false;\n\t\t\t}\n\n\t\t\tlet vrWorld = view.clone().invert();\n\t\t\tvrWorld.multiply(xrCamera.matrixWorld);\n\t\t\tlet vrView = vrWorld.clone().invert();\n\n\t\t\tthis.pRenderer.render(this.scene.scenePointCloud, xrCamera, null, {\n\t\t\t\tviewOverride: vrView,\n\t\t\t});\n\n\t\t}\n\n\t\t{ // render VR scene\n\t\t\tlet cam = makeCam();\n\t\t\tcam.parent = null;\n\n\t\t\trenderer.render(this.sceneVR, cam);\n\t\t}\n\n\t\trenderer.resetState();\n\n\t}\n\n\trenderDefault(){\n\t\tlet pRenderer = this.getPRenderer();\n\n\t\t{ // resize\n\t\t\tconst width = this.scaleFactor * this.renderArea.clientWidth;\n\t\t\tconst height = this.scaleFactor * this.renderArea.clientHeight;\n\n\t\t\tthis.renderer.setSize(width, height);\n\t\t\tconst pixelRatio = this.renderer.getPixelRatio();\n\t\t\tconst aspect = width / height;\n\n\t\t\tconst scene = this.scene;\n\n\t\t\tscene.cameraP.aspect = aspect;\n\t\t\tscene.cameraP.updateProjectionMatrix();\n\n\t\t\tlet frustumScale = this.scene.view.radius;\n\t\t\tscene.cameraO.left = -frustumScale;\n\t\t\tscene.cameraO.right = frustumScale;\n\t\t\tscene.cameraO.top = frustumScale * 1 / aspect;\n\t\t\tscene.cameraO.bottom = -frustumScale * 1 / aspect;\n\t\t\tscene.cameraO.updateProjectionMatrix();\n\n\t\t\tscene.cameraScreenSpace.top = 1/aspect;\n\t\t\tscene.cameraScreenSpace.bottom = -1/aspect;\n\t\t\tscene.cameraScreenSpace.updateProjectionMatrix();\n\t\t}\n\n\t\tpRenderer.clear();\n\n\t\tpRenderer.render(this.renderer);\n\t\tthis.renderer.render(this.overlay, this.overlayCamera);\n\t}\n\t\n\trender(){\n\t\tif(Potree.measureTimings) performance.mark(\"render-start\");\n\n\t\ttry{\n\n\t\t\tconst vrActive = this.renderer.xr.isPresenting;\n\n\t\t\tif(vrActive){\n\t\t\t\tthis.renderVR();\n\t\t\t}else{\n\t\t\t\tthis.renderDefault();\n\t\t\t}\n\n\t\t}catch(e){\n\t\t\tthis.onCrash(e);\n\t\t}\n\t\t\n\t\tif(Potree.measureTimings){\n\t\t\tperformance.mark(\"render-end\");\n\t\t\tperformance.measure(\"render\", \"render-start\", \"render-end\");\n\t\t}\n\t}\n\n\tresolveTimings(timestamp){\n\t\tif(Potree.measureTimings){\n\t\t\tif(!this.toggle){\n\t\t\t\tthis.toggle = timestamp;\n\t\t\t}\n\t\t\tlet duration = timestamp - this.toggle;\n\t\t\tif(duration > 1000.0){\n\t\t\t\n\t\t\t\tlet measures = performance.getEntriesByType(\"measure\");\n\t\t\t\t\n\t\t\t\tlet names = new Set();\n\t\t\t\tfor(let measure of measures){\n\t\t\t\t\tnames.add(measure.name);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet groups = new Map();\n\t\t\t\tfor(let name of names){\n\t\t\t\t\tgroups.set(name, {\n\t\t\t\t\t\tmeasures: [],\n\t\t\t\t\t\tsum: 0,\n\t\t\t\t\t\tn: 0,\n\t\t\t\t\t\tmin: Infinity,\n\t\t\t\t\t\tmax: -Infinity\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(let measure of measures){\n\t\t\t\t\tlet group = groups.get(measure.name);\n\t\t\t\t\tgroup.measures.push(measure);\n\t\t\t\t\tgroup.sum += measure.duration;\n\t\t\t\t\tgroup.n++;\n\t\t\t\t\tgroup.min = Math.min(group.min, measure.duration);\n\t\t\t\t\tgroup.max = Math.max(group.max, measure.duration);\n\t\t\t\t}\n\n\t\t\t\tlet glQueries = Potree.resolveQueries(this.renderer.getContext());\n\t\t\t\tfor(let [key, value] of glQueries){\n\n\t\t\t\t\tlet group = {\n\t\t\t\t\t\tmeasures: value.map(v => {return {duration: v}}),\n\t\t\t\t\t\tsum: value.reduce( (a, i) => a + i, 0),\n\t\t\t\t\t\tn: value.length,\n\t\t\t\t\t\tmin: Math.min(...value),\n\t\t\t\t\t\tmax: Math.max(...value)\n\t\t\t\t\t};\n\n\t\t\t\t\tlet groupname = `[tq] ${key}`;\n\t\t\t\t\tgroups.set(groupname, group);\n\t\t\t\t\tnames.add(groupname);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(let [name, group] of groups){\n\t\t\t\t\tgroup.mean = group.sum / group.n;\n\t\t\t\t\tgroup.measures.sort( (a, b) => a.duration - b.duration );\n\t\t\t\t\t\n\t\t\t\t\tif(group.n === 1){\n\t\t\t\t\t\tgroup.median = group.measures[0].duration;\n\t\t\t\t\t}else if(group.n > 1){\n\t\t\t\t\t\tgroup.median = group.measures[parseInt(group.n / 2)].duration;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet cn = Array.from(names).reduce( (a, i) => Math.max(a, i.length), 0) + 5;\n\t\t\t\tlet cmin = 10;\n\t\t\t\tlet cmed = 10;\n\t\t\t\tlet cmax = 10;\n\t\t\t\tlet csam = 6;\n\t\t\t\t\n\t\t\t\tlet message = ` ${\"NAME\".padEnd(cn)} |` \n\t\t\t\t\t+ ` ${\"MIN\".padStart(cmin)} |`\n\t\t\t\t\t+ ` ${\"MEDIAN\".padStart(cmed)} |`\n\t\t\t\t\t+ ` ${\"MAX\".padStart(cmax)} |`\n\t\t\t\t\t+ ` ${\"SAMPLES\".padStart(csam)} \\n`;\n\t\t\t\tmessage += ` ${\"-\".repeat(message.length) }\\n`;\n\t\t\t\t\n\t\t\t\tnames = Array.from(names).sort();\n\t\t\t\tfor(let name of names){\n\t\t\t\t\tlet group = groups.get(name);\n\t\t\t\t\tlet min = group.min.toFixed(3);\n\t\t\t\t\tlet median = group.median.toFixed(3);\n\t\t\t\t\tlet max = group.max.toFixed(3);\n\t\t\t\t\tlet n = group.n;\n\t\t\t\t\t\n\t\t\t\t\tmessage += ` ${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+ ` ${n.toString().padStart(csam)}\\n`;\n\t\t\t\t}\n\t\t\t\tmessage += `\\n`;\n\t\t\t\tconsole.log(message);\n\t\t\t\t\n\t\t\t\tperformance.clearMarks();\n\t\t\t\tperformance.clearMeasures();\n\t\t\t\tthis.toggle = timestamp;\n\t\t\t}\n\t\t}\n\t}\n\n\tloop(timestamp){\n\n\t\tif(this.stats){\n\t\t\tthis.stats.begin();\n\t\t}\n\n\t\tif(Potree.measureTimings){\n\t\t\tperformance.mark(\"loop-start\");\n\t\t}\n\n\t\tthis.update(this.clock.getDelta(), timestamp);\n\t\tthis.render();\n\n\t\t// let vrActive = viewer.renderer.xr.isPresenting;\n\t\t// if(vrActive){\n\t\t// \tthis.update(this.clock.getDelta(), timestamp);\n\t\t// \tthis.render();\n\t\t// }else{\n\n\t\t// \tthis.update(this.clock.getDelta(), timestamp);\n\t\t// \tthis.render();\n\t\t// }\n\n\n\t\tif(Potree.measureTimings){\n\t\t\tperformance.mark(\"loop-end\");\n\t\t\tperformance.measure(\"loop\", \"loop-start\", \"loop-end\");\n\t\t}\n\t\t\n\t\tthis.resolveTimings(timestamp);\n\n\t\tPotree.framenumber++;\n\n\t\tif(this.stats){\n\t\t\tthis.stats.end();\n\t\t}\n\t}\n\n\tpostError(content, params = {}){\n\t\tlet message = this.postMessage(content, params);\n\n\t\tmessage.element.addClass(\"potree_message_error\");\n\n\t\treturn message;\n\t}\n\n\tpostMessage(content, params = {}){\n\t\tlet message = new Message(content);\n\n\t\tlet animationDuration = 100;\n\n\t\tmessage.element.css(\"display\", \"none\");\n\t\tmessage.elClose.click( () => {\n\t\t\tmessage.element.slideToggle(animationDuration);\n\n\t\t\tlet index = this.messages.indexOf(message);\n\t\t\tif(index >= 0){\n\t\t\t\tthis.messages.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\tthis.elMessages.prepend(message.element);\n\n\t\tmessage.element.slideToggle(animationDuration);\n\n\t\tthis.messages.push(message);\n\n\t\tif(params.duration !== undefined){\n\t\t\tlet fadeDuration = 500;\n\t\t\tlet slideOutDuration = 200;\n\t\t\tsetTimeout(() => {\n\t\t\t\tmessage.element.animate({\n\t\t\t\t\topacity: 0\t\n\t\t\t\t}, fadeDuration);\n\t\t\t\tmessage.element.slideToggle(slideOutDuration);\n\t\t\t}, params.duration)\n\t\t}\n\n\t\treturn message;\n\t}\n};\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nTHREE.OrthographicCamera.prototype.zoomTo = function( node, factor = 1){\n\n\tif ( !node.geometry && !node.boundingBox) {\n\t\treturn;\n\t}\n\n\t// TODO\n\n\t//let minWS = new THREE.Vector4(node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z, 1);\n\t//let minVS = minWS.applyMatrix4(this.matrixWorldInverse);\n\n\t//let right = node.boundingBox.max.x;\n\t//let bottom\t= node.boundingBox.min.y;\n\t//let top = node.boundingBox.max.y;\n\n\tthis.updateProjectionMatrix();\t\n};","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nTHREE.PerspectiveCamera.prototype.zoomTo = function (node, factor) {\n\tif (!node.geometry && !node.boundingSphere && !node.boundingBox) {\n\t\treturn;\n\t}\n\n\tif (node.geometry && node.geometry.boundingSphere === null) {\n\t\tnode.geometry.computeBoundingSphere();\n\t}\n\n\tnode.updateMatrixWorld();\n\n\tlet bs;\n\n\tif (node.boundingSphere) {\n\t\tbs = node.boundingSphere;\n\t} else if (node.geometry && node.geometry.boundingSphere) {\n\t\tbs = node.geometry.boundingSphere;\n\t} else {\n\t\tbs = node.boundingBox.getBoundingSphere(new THREE.Sphere());\n\t}\n\n\tlet _factor = factor || 1;\n\n\tbs = bs.clone().applyMatrix4(node.matrixWorld);\n\tlet radius = bs.radius;\n\tlet fovr = this.fov * Math.PI / 180;\n\n\tif (this.aspect < 1) {\n\t\tfovr = fovr * this.aspect;\n\t}\n\n\tlet distanceFactor = Math.abs(radius / Math.sin(fovr / 2)) * _factor;\n\n\tlet offset = this.getWorldDirection(new THREE.Vector3()).multiplyScalar(-distanceFactor);\n\tthis.position.copy(bs.center.clone().add(offset));\n};\n","\nimport * as THREE from \"../../libs/three.js/build/three.module.js\";\n\nTHREE.Ray.prototype.distanceToPlaneWithNegative = function (plane) {\n\tlet denominator = plane.normal.dot(this.direction);\n\tif (denominator === 0) {\n\t\t// line is coplanar, return origin\n\t\tif (plane.distanceToPoint(this.origin) === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\t\treturn null;\n\t}\n\tlet t = -(this.origin.dot(plane.normal) + plane.constant) / denominator;\n\n\treturn t;\n};\n","\nexport * from \"./Actions.js\";\nexport * from \"./AnimationPath.js\";\nexport * from \"./Annotation.js\";\nexport * from \"./defines.js\";\nexport * from \"./Enum.js\";\nexport * from \"./EventDispatcher.js\";\nexport * from \"./Features.js\";\nexport * from \"./KeyCodes.js\";\nexport * from \"./LRU.js\";\nexport * from \"./PointCloudEptGeometry.js\";\nexport * from \"./PointCloudOctree.js\";\nexport * from \"./PointCloudOctreeGeometry.js\";\nexport * from \"./PointCloudTree.js\";\nexport * from \"./Points.js\";\nexport * from \"./Potree_update_visibility.js\";\nexport * from \"./PotreeRenderer.js\";\nexport * from \"./ProfileRequest.js\";\nexport * from \"./TextSprite.js\";\nexport * from \"./utils.js\";\nexport * from \"./Version.js\";\nexport * from \"./WorkerPool.js\";\nexport * from \"./XHRFactory.js\";\nexport * from \"./viewer/SaveProject.js\";\nexport * from \"./viewer/LoadProject.js\";\n\nexport * from \"./materials/ClassificationScheme.js\";\nexport * from \"./materials/EyeDomeLightingMaterial.js\";\nexport * from \"./materials/Gradients.js\";\nexport * from \"./materials/NormalizationEDLMaterial.js\";\nexport * from \"./materials/NormalizationMaterial.js\";\nexport * from \"./materials/PointCloudMaterial.js\";\n\nexport * from \"./loader/POCLoader.js\";\nexport * from \"./modules/loader/2.0/OctreeLoader.js\";\nexport * from \"./loader/EptLoader.js\";\nexport * from \"./loader/ept/BinaryLoader.js\";\nexport * from \"./loader/ept/LaszipLoader.js\";\nexport * from \"./loader/ept/ZstandardLoader.js\";\nexport * from \"./loader/PointAttributes.js\";\nexport * from \"./loader/ShapefileLoader.js\";\nexport * from \"./loader/GeoPackageLoader.js\";\n\nexport * from \"./utils/Box3Helper.js\";\nexport * from \"./utils/ClippingTool.js\";\nexport * from \"./utils/ClipVolume.js\";\nexport * from \"./utils/GeoTIFF.js\";\nexport * from \"./utils/Measure.js\";\nexport * from \"./utils/MeasuringTool.js\";\nexport * from \"./utils/Message.js\";\nexport * from \"./utils/PointCloudSM.js\";\nexport * from \"./utils/PolygonClipVolume.js\";\nexport * from \"./utils/Profile.js\";\nexport * from \"./utils/ProfileTool.js\";\nexport * from \"./utils/ScreenBoxSelectTool.js\";\nexport * from \"./utils/SpotLightHelper.js\";\nexport * from \"./utils/TransformationTool.js\";\nexport * from \"./utils/Volume.js\";\nexport * from \"./utils/VolumeTool.js\";\nexport * from \"./utils/Compass.js\";\n\nexport * from \"./viewer/viewer.js\";\nexport * from \"./viewer/Scene.js\";\nexport * from \"./viewer/HierarchicalSlider.js\";\n\nexport * from \"./modules/OrientedImages/OrientedImages.js\";\nexport * from \"./modules/Images360/Images360.js\";\nexport * from \"./modules/CameraAnimation/CameraAnimation.js\";\n\nexport * from \"./modules/loader/2.0/OctreeLoader.js\";\n\nexport {OrbitControls} from \"./navigation/OrbitControls.js\";\nexport {FirstPersonControls} from \"./navigation/FirstPersonControls.js\";\nexport {EarthControls} from \"./navigation/EarthControls.js\";\nexport {DeviceOrientationControls} from \"./navigation/DeviceOrientationControls.js\";\nexport {VRControls} from \"./navigation/VRControls.js\";\n\nimport \"./extensions/OrthographicCamera.js\";\nimport \"./extensions/PerspectiveCamera.js\";\nimport \"./extensions/Ray.js\";\n\nimport {LRU} from \"./LRU.js\";\nimport {OctreeLoader} from \"./modules/loader/2.0/OctreeLoader.js\";\nimport {POCLoader} from \"./loader/POCLoader.js\";\nimport {EptLoader} from \"./loader/EptLoader.js\";\nimport {PointCloudOctree} from \"./PointCloudOctree.js\";\nimport {WorkerPool} from \"./WorkerPool.js\";\n\nexport const workerPool = new WorkerPool();\n\nexport const version = {\n\tmajor: 1,\n\tminor: 8,\n\tsuffix: '.0'\n};\n\nexport let lru = new LRU();\n\nconsole.log('Potree ' + version.major + '.' + version.minor + version.suffix);\n\nexport let pointBudget = 1 * 1000 * 1000;\nexport let framenumber = 0;\nexport let numNodesLoading = 0;\nexport let maxNodesLoading = 4;\n\nexport const debug = {};\n\nlet scriptPath = \"\";\n\nif (document.currentScript && document.currentScript.src) {\n\tscriptPath = new URL(document.currentScript.src + '/..').href;\n\tif (scriptPath.slice(-1) === '/') {\n\t\tscriptPath = scriptPath.slice(0, -1);\n\t}\n} else if(import.meta){\n\tscriptPath = new URL(import.meta.url + \"/..\").href;\n\tif (scriptPath.slice(-1) === '/') {\n\t\tscriptPath = scriptPath.slice(0, -1);\n\t}\n}else {\n\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}\n\nlet resourcePath = scriptPath + '/resources';\n\n// scriptPath: build/potree\n// resourcePath:build/potree/resources\nexport {scriptPath, resourcePath};\n\n\nexport function loadPointCloud(path, name, callback){\n\tlet loaded = function(e){\n\t\te.pointcloud.name = name;\n\t\tcallback(e);\n\t};\n\n\tlet promise = new Promise( resolve => {\n\n\t\t// load pointcloud\n\t\tif (!path){\n\t\t\t// TODO: callback? comment? Hello? Bueller? Anyone?\n\t\t} else if (path.indexOf('ept.json') > 0) {\n\t\t\tEptLoader.load(path, function(geometry) {\n\t\t\t\tif (!geometry) {\n\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\t\t\t\t\t//loaded(pointcloud);\n\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (path.indexOf('cloud.js') > 0) {\n\t\t\tPOCLoader.load(path, function (geometry) {\n\t\t\t\tif (!geometry) {\n\t\t\t\t\t//callback({type: 'loading_failed'});\n\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t} else {\n\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (path.indexOf('metadata.json') > 0) {\n\t\t\tPotree.OctreeLoader.load(path).then(e => {\n\t\t\t\tlet geometry = e.geometry;\n\n\t\t\t\tif(!geometry){\n\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t}else{\n\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\n\t\t\t\t\tlet aPosition = pointcloud.getAttribute(\"position\");\n\n\t\t\t\t\tlet material = pointcloud.material;\n\t\t\t\t\tmaterial.elevationRange = [\n\t\t\t\t\t\taPosition.range[0][2],\n\t\t\t\t\t\taPosition.range[1][2],\n\t\t\t\t\t];\n\n\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tOctreeLoader.load(path, function (geometry) {\n\t\t\t\tif (!geometry) {\n\t\t\t\t\t//callback({type: 'loading_failed'});\n\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t} else {\n\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (path.indexOf('.vpc') > 0) {\n\t\t\tPointCloudArena4DGeometry.load(path, function (geometry) {\n\t\t\t\tif (!geometry) {\n\t\t\t\t\t//callback({type: 'loading_failed'});\n\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t} else {\n\t\t\t\t\tlet pointcloud = new PointCloudArena4D(geometry);\n\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t//callback({'type': 'loading_failed'});\n\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t}\n\t});\n\n\tif(callback){\n\t\tpromise.then(pointcloud => {\n\t\t\tloaded(pointcloud);\n\t\t});\n\t}else{\n\t\treturn promise;\n\t}\n};\n\n\n// add selectgroup\n(function($){\n\t$.fn.extend({\n\t\tselectgroup: function(args = {}){\n\n\t\t\tlet elGroup = $(this);\n\t\t\tlet rootID = elGroup.prop(\"id\");\n\t\t\tlet groupID = `${rootID}`;\n\t\t\tlet groupTitle = (args.title !== undefined) ? args.title : \"\";\n\n\t\t\tlet elButtons = [];\n\t\t\telGroup.find(\"option\").each((index, value) => {\n\t\t\t\tlet buttonID = $(value).prop(\"id\");\n\t\t\t\tlet label = $(value).html();\n\t\t\t\tlet optionValue = $(value).prop(\"value\");\n\n\t\t\t\tlet elButton = $(`\n\t\t\t\t\t\n\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\tlet elLabel = elButton.find(\"label\");\n\t\t\t\tlet elInput = elButton.find(\"input\");\n\n\t\t\t\telInput.change( () => {\n\t\t\t\t\telGroup.find(\"label\").removeClass(\"ui-state-active\");\n\t\t\t\t\telGroup.find(\"label\").addClass(\"ui-state-default\");\n\t\t\t\t\tif(elInput.is(\":checked\")){\n\t\t\t\t\t\telLabel.addClass(\"ui-state-active\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\t//elLabel.addClass(\"ui-state-default\");\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telButtons.push(elButton);\n\t\t\t});\n\n\t\t\tlet elFieldset = $(`\n\t\t\t\t
        \n\t\t\t\t\t${groupTitle}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t`);\n\n\t\t\tlet elButtonContainer = elFieldset.find(\"span\");\n\t\t\tfor(let elButton of elButtons){\n\t\t\t\telButtonContainer.append(elButton);\n\t\t\t}\n\n\t\t\telButtonContainer.find(\"label\").each( (index, value) => {\n\t\t\t\t$(value).css(\"margin\", \"0px\");\n\t\t\t\t$(value).css(\"border-radius\", \"0px\");\n\t\t\t\t$(value).css(\"border\", \"1px solid black\");\n\t\t\t\t$(value).css(\"border-left\", \"none\");\n\t\t\t});\n\t\t\telButtonContainer.find(\"label:first\").each( (index, value) => {\n\t\t\t\t$(value).css(\"border-radius\", \"4px 0px 0px 4px\");\n\n\t\t\t});\n\t\t\telButtonContainer.find(\"label:last\").each( (index, value) => {\n\t\t\t\t$(value).css(\"border-radius\", \"0px 4px 4px 0px\");\n\t\t\t\t$(value).css(\"border-left\", \"none\");\n\t\t\t});\n\n\t\t\telGroup.empty();\n\t\t\telGroup.append(elFieldset);\n\n\n\n\t\t}\n\t});\n})(jQuery);\n"],"names":["UnsignedInt248Type","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT5_Format","EventDispatcher","THREE.CatmullRomCurve3","THREE.Geometry","THREE.Vector3","THREE.Object3D","THREE.Texture","THREE.LinearFilter","THREE.SpriteMaterial","THREE.Sprite","THREE.BoxGeometry","Vector3","THREE.MeshBasicMaterial","THREE.Mesh","THREE.LineSegments","THREE.LineBasicMaterial","THREE.Sphere","THREE.SphereGeometry","THREE.Color","THREE.MeshLambertMaterial","THREE.VertexColors","THREE.Line","THREE.Vector2","THREE.MeshNormalMaterial","THREE.Matrix4","THREE.PlaneHelper","THREE.Box3","THREE.PerspectiveCamera","THREE.Scene","THREE.BackSide","THREE.TextureLoader","THREE.CubeGeometry","THREE.LinePieces","THREE.DataTexture","THREE.RGBFormat","THREE.Raycaster","THREE.Ray","THREE.OrthographicCamera","THREE.Vector4","THREE.RGBAFormat","THREE.NearestFilter","THREE.PlaneBufferGeometry","THREE.Camera","THREE.Math","MOUSE","PointCloudMaterial","THREE.RawShaderMaterial","THREE.NoBlending","THREE.LessEqualDepth","THREE.AdditiveBlending","THREE.AlwaysDepth","THREE.CanvasTexture","THREE.RepeatWrapping","THREE.Points","THREE.Line3","THREE.Box2","THREE.WebGLRenderTarget","Points","Box3Helper","THREE.BufferGeometry","THREE.BufferAttribute","THREE.Frustum","THREE.Plane","THREE.PointCloud","PointCloudArena4D","THREE.ClampToEdgeWrapping","THREE.MirroredRepeatWrapping","THREE.NearestMipMapNearestFilter","THREE.NearestMipMapLinearFilter","THREE.LinearMipMapNearestFilter","THREE.LinearMipMapLinearFilter","THREE.UnsignedByteType","THREE.UnsignedShort4444Type","THREE.UnsignedShort5551Type","THREE.UnsignedShort565Type","THREE.ByteType","THREE.ShortType","THREE.UnsignedShortType","THREE.IntType","THREE.UnsignedIntType","THREE.FloatType","THREE.HalfFloatType","THREE.AlphaFormat","THREE.LuminanceFormat","THREE.LuminanceAlphaFormat","THREE.DepthFormat","THREE.DepthStencilFormat","THREE.AddEquation","THREE.SubtractEquation","THREE.ReverseSubtractEquation","THREE.ZeroFactor","THREE.OneFactor","THREE.SrcColorFactor","THREE.OneMinusSrcColorFactor","THREE.SrcAlphaFactor","THREE.OneMinusSrcAlphaFactor","THREE.DstAlphaFactor","THREE.OneMinusDstAlphaFactor","THREE.DstColorFactor","THREE.OneMinusDstColorFactor","THREE.SrcAlphaSaturateFactor","THREE.RGB_S3TC_DXT1_Format","THREE.RGBA_S3TC_DXT3_Format","THREE.RGBA_S3TC_DXT1_Format","THREE.RGBA_S3TC_DXT5_Format","THREE.RGB_PVRTC_4BPPV1_Format","THREE.RGB_PVRTC_2BPPV1_Format","THREE.RGBA_PVRTC_4BPPV1_Format","THREE.RGBA_PVRTC_2BPPV1_Format","THREE.RGB_ETC1_Format","THREE.MinEquation","THREE.MaxEquation","Geopackage","THREE.CylinderGeometry","THREE.MOUSE","THREE.PointLight","THREE.DepthTexture","SpotLightHelper","THREE.Quaternion","THREE.PlaneGeometry","THREE.TorusGeometry","Scene","THREE.DirectionalLight","THREE.AmbientLight","THREE.WebGLRenderer","THREE.ShaderMaterial","THREE.DoubleSide","sign","escape","JSON5","THREE.Euler","MotionControllerConstants","THREE.Clock","THREE.REVISION","scriptPath","loadPointCloud"],"mappings":"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,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;CACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;CACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;CACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;CACA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AK,MAAM,CAAC;CACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;CACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;AACnI;CACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC;CACzB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;CACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;CACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,G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SAAS,EAAE,KAAK;CAClB,EAAE,UAAU,EAAE,KAAK;AACnB;CACA,EAAE,EAAE,CAAC;AACL;CACA,CAAC,OAAO,cAAc,CAAC;AACvB;CACA,CAAC;AACD;CACA,SAAS,sBAAsB,GAAG;AAClC;CACA,CAAC,iBAAiB,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH;CACA,CAAC;AACD;CACA,SAAS,aAAa,GAAG;AACzB;CACA,CAAC,iBAAiB,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH;CACA,CAAC;AACD;CACA,SAAS,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG;AAC3D;CACA,CAAC,OAAO,CAAC,IAAI,EAAE,sEAAsE,EAAE,CAAC;CACxF,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAA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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH;CACA,CAAC,cAAc;CACf,EAAE,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;CACH,CAAC,CAAC;AACF;CACA,IAAI,YAAY,GAAG,WAAW,UAAU,GAAG;AAC3C;CACA,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;AAC5B;CACA,EAAE,IAAI,EAAE,cAAc;AACtB;CACA,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC/D;CACA,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,YAAY;CAChD,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,cAAc;AACpD;CACA,EAAE,QAAQ,EAAE,IAAI;AAChB;CACA,EAAE,EAAE,CAAC;AACL;CACA,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACrB;CACA,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE;AAChC;CACA,EAAE,KA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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;CACA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;CACA,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;CACA,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;CACA,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF;CACA,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF;CACA,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF;CACA,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;AACF;CACA,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;CACA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;AAC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AE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;CAC1C,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM;CAC/B,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;CAC9C,GAAG,CAAC,CAAC;CACL,EAAE;AACF;CACA,CAAC,aAAa,CAAC,UAAU,CAAC;AAC1B;CACA,EAAE,IAAI,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;AACrC;CACA,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,CAAC,CAAC;AACL;CACA,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;CACf,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CA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"} \ No newline at end of file diff --git a/libs/potree/profile.html b/libs/potree/profile.html new file mode 100644 index 0000000..320c30b --- /dev/null +++ b/libs/potree/profile.html @@ -0,0 +1,121 @@ +
        + +
        + + + + + + + +
        + +
        + + +
        + :   + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        +
        + +
        + +
        + position: asdsadf asdf
        + rgb: 123 423 123 +
        + +
        +
        +
        + +
        \ No newline at end of file diff --git a/libs/potree/resources/LICENSE b/libs/potree/resources/LICENSE new file mode 100644 index 0000000..f008923 --- /dev/null +++ b/libs/potree/resources/LICENSE @@ -0,0 +1,20 @@ + + + +icons/map_icon.png +from sitn PotreeViewer +http://ne.ch/sitn +https://github.com/PotreeViewer/PotreeViewer + +icons/navigation_cube.svg +icons/orthographic_camera.svg +icons/perspective_camera.svg +free for commerical use without attribution +http://www.freepik.com/free-icon/package-cube-box-for-delivery_720159.htm + + +# VR Controller Model +images/vr_controller_help* +Controller model from https://sketchfab.com/3d-models/htc-vive-controller-9f03e4a80c5a4b31a24bb122f17cb229 +license: CC AttributionCreative Commons Attribution + diff --git a/libs/potree/resources/icons/add.svg b/libs/potree/resources/icons/add.svg new file mode 100644 index 0000000..a997b2d --- /dev/null +++ b/libs/potree/resources/icons/add.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/angle.png b/libs/potree/resources/icons/angle.png new file mode 100644 index 0000000..ee21dd6 Binary files /dev/null and b/libs/potree/resources/icons/angle.png differ diff --git a/libs/potree/resources/icons/annotation.svg b/libs/potree/resources/icons/annotation.svg new file mode 100644 index 0000000..c5a5281 --- /dev/null +++ b/libs/potree/resources/icons/annotation.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/area.svg b/libs/potree/resources/icons/area.svg new file mode 100644 index 0000000..98c31cf --- /dev/null +++ b/libs/potree/resources/icons/area.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/area_backup.svg b/libs/potree/resources/icons/area_backup.svg new file mode 100644 index 0000000..7fb9b22 --- /dev/null +++ b/libs/potree/resources/icons/area_backup.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/arrow_ccw.svg b/libs/potree/resources/icons/arrow_ccw.svg new file mode 100644 index 0000000..e0ae6a0 --- /dev/null +++ b/libs/potree/resources/icons/arrow_ccw.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/arrow_cw.svg b/libs/potree/resources/icons/arrow_cw.svg new file mode 100644 index 0000000..d827375 --- /dev/null +++ b/libs/potree/resources/icons/arrow_cw.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/arrow_down.svg b/libs/potree/resources/icons/arrow_down.svg new file mode 100644 index 0000000..f89b4c7 --- /dev/null +++ b/libs/potree/resources/icons/arrow_down.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + 🡅 + + diff --git a/libs/potree/resources/icons/arrow_left.svg b/libs/potree/resources/icons/arrow_left.svg new file mode 100644 index 0000000..45aa5c1 --- /dev/null +++ b/libs/potree/resources/icons/arrow_left.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + 🡅 + + diff --git a/libs/potree/resources/icons/arrow_right.svg b/libs/potree/resources/icons/arrow_right.svg new file mode 100644 index 0000000..3c3edf6 --- /dev/null +++ b/libs/potree/resources/icons/arrow_right.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + 🡅 + + diff --git a/libs/potree/resources/icons/arrow_up.svg b/libs/potree/resources/icons/arrow_up.svg new file mode 100644 index 0000000..3d843c3 --- /dev/null +++ b/libs/potree/resources/icons/arrow_up.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + 🡅 + + diff --git a/libs/potree/resources/icons/assign.svg b/libs/potree/resources/icons/assign.svg new file mode 100644 index 0000000..6149ea7 --- /dev/null +++ b/libs/potree/resources/icons/assign.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + = + + diff --git a/libs/potree/resources/icons/azimuth.svg b/libs/potree/resources/icons/azimuth.svg new file mode 100644 index 0000000..6cb5c69 --- /dev/null +++ b/libs/potree/resources/icons/azimuth.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + N ° + + diff --git a/libs/potree/resources/icons/back.svg b/libs/potree/resources/icons/back.svg new file mode 100644 index 0000000..7a76227 --- /dev/null +++ b/libs/potree/resources/icons/back.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/bottom.svg b/libs/potree/resources/icons/bottom.svg new file mode 100644 index 0000000..a96abc0 --- /dev/null +++ b/libs/potree/resources/icons/bottom.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/camera_animation.svg b/libs/potree/resources/icons/camera_animation.svg new file mode 100644 index 0000000..7e2bbae --- /dev/null +++ b/libs/potree/resources/icons/camera_animation.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/circle.svg b/libs/potree/resources/icons/circle.svg new file mode 100644 index 0000000..a556fde --- /dev/null +++ b/libs/potree/resources/icons/circle.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/circled_dot.svg b/libs/potree/resources/icons/circled_dot.svg new file mode 100644 index 0000000..291be87 --- /dev/null +++ b/libs/potree/resources/icons/circled_dot.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/libs/potree/resources/icons/clip-plane-x.svg b/libs/potree/resources/icons/clip-plane-x.svg new file mode 100644 index 0000000..a5c6f0f --- /dev/null +++ b/libs/potree/resources/icons/clip-plane-x.svg @@ -0,0 +1,62 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/clip-plane-y.svg b/libs/potree/resources/icons/clip-plane-y.svg new file mode 100644 index 0000000..e5d23ae --- /dev/null +++ b/libs/potree/resources/icons/clip-plane-y.svg @@ -0,0 +1,61 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/libs/potree/resources/icons/clip-plane-z.svg b/libs/potree/resources/icons/clip-plane-z.svg new file mode 100644 index 0000000..a16d380 --- /dev/null +++ b/libs/potree/resources/icons/clip-plane-z.svg @@ -0,0 +1,62 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/clip-polygon.svg b/libs/potree/resources/icons/clip-polygon.svg new file mode 100644 index 0000000..774fa71 --- /dev/null +++ b/libs/potree/resources/icons/clip-polygon.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/clip-screen.svg b/libs/potree/resources/icons/clip-screen.svg new file mode 100644 index 0000000..e542def --- /dev/null +++ b/libs/potree/resources/icons/clip-screen.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/clip_volume.svg b/libs/potree/resources/icons/clip_volume.svg new file mode 100644 index 0000000..4a68b54 --- /dev/null +++ b/libs/potree/resources/icons/clip_volume.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/close.svg b/libs/potree/resources/icons/close.svg new file mode 100644 index 0000000..b39908b --- /dev/null +++ b/libs/potree/resources/icons/close.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/cloud.svg b/libs/potree/resources/icons/cloud.svg new file mode 100644 index 0000000..804466c --- /dev/null +++ b/libs/potree/resources/icons/cloud.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/libs/potree/resources/icons/copy.svg b/libs/potree/resources/icons/copy.svg new file mode 100644 index 0000000..11cde80 --- /dev/null +++ b/libs/potree/resources/icons/copy.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/distance.svg b/libs/potree/resources/icons/distance.svg new file mode 100644 index 0000000..fc03804 --- /dev/null +++ b/libs/potree/resources/icons/distance.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/earth_controls.png b/libs/potree/resources/icons/earth_controls.png new file mode 100644 index 0000000..f09345c Binary files /dev/null and b/libs/potree/resources/icons/earth_controls.png differ diff --git a/libs/potree/resources/icons/earth_controls.svg b/libs/potree/resources/icons/earth_controls.svg new file mode 100644 index 0000000..f5458f0 --- /dev/null +++ b/libs/potree/resources/icons/earth_controls.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/earth_controls_1.png b/libs/potree/resources/icons/earth_controls_1.png new file mode 100644 index 0000000..b10c935 Binary files /dev/null and b/libs/potree/resources/icons/earth_controls_1.png differ diff --git a/libs/potree/resources/icons/eye.svg b/libs/potree/resources/icons/eye.svg new file mode 100644 index 0000000..117c23b --- /dev/null +++ b/libs/potree/resources/icons/eye.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/eye_2.png b/libs/potree/resources/icons/eye_2.png new file mode 100644 index 0000000..c23e800 Binary files /dev/null and b/libs/potree/resources/icons/eye_2.png differ diff --git a/libs/potree/resources/icons/eye_2.svg b/libs/potree/resources/icons/eye_2.svg new file mode 100644 index 0000000..7c312b2 --- /dev/null +++ b/libs/potree/resources/icons/eye_2.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/eye_crossed.svg b/libs/potree/resources/icons/eye_crossed.svg new file mode 100644 index 0000000..bc0b8f2 --- /dev/null +++ b/libs/potree/resources/icons/eye_crossed.svg @@ -0,0 +1,93 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/file_csv_2d.svg b/libs/potree/resources/icons/file_csv_2d.svg new file mode 100644 index 0000000..f1a293f --- /dev/null +++ b/libs/potree/resources/icons/file_csv_2d.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/file_dxf.svg b/libs/potree/resources/icons/file_dxf.svg new file mode 100644 index 0000000..dedb04b --- /dev/null +++ b/libs/potree/resources/icons/file_dxf.svg @@ -0,0 +1,161 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + DXF + JSON + + + + + JSON + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/file_dxf_2d.svg b/libs/potree/resources/icons/file_dxf_2d.svg new file mode 100644 index 0000000..81ccc06 --- /dev/null +++ b/libs/potree/resources/icons/file_dxf_2d.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/file_dxf_3d.svg b/libs/potree/resources/icons/file_dxf_3d.svg new file mode 100644 index 0000000..d2785cf --- /dev/null +++ b/libs/potree/resources/icons/file_dxf_3d.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/file_geojson.svg b/libs/potree/resources/icons/file_geojson.svg new file mode 100644 index 0000000..4fa326c --- /dev/null +++ b/libs/potree/resources/icons/file_geojson.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + DXF + JSON + + + + + + + + + + + + + + + DXF + + + + + + + + diff --git a/libs/potree/resources/icons/file_las_3d.svg b/libs/potree/resources/icons/file_las_3d.svg new file mode 100644 index 0000000..a6bf228 --- /dev/null +++ b/libs/potree/resources/icons/file_las_3d.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/file_potree.svg b/libs/potree/resources/icons/file_potree.svg new file mode 100644 index 0000000..8cd2ea3 --- /dev/null +++ b/libs/potree/resources/icons/file_potree.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/flip_y_z.png b/libs/potree/resources/icons/flip_y_z.png new file mode 100644 index 0000000..b57262a Binary files /dev/null and b/libs/potree/resources/icons/flip_y_z.png differ diff --git a/libs/potree/resources/icons/flip_y_z.svg b/libs/potree/resources/icons/flip_y_z.svg new file mode 100644 index 0000000..c28f2d0 --- /dev/null +++ b/libs/potree/resources/icons/flip_y_z.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + y + z + + + diff --git a/libs/potree/resources/icons/focus.svg b/libs/potree/resources/icons/focus.svg new file mode 100644 index 0000000..db9b6d2 --- /dev/null +++ b/libs/potree/resources/icons/focus.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/fps_controls.png b/libs/potree/resources/icons/fps_controls.png new file mode 100644 index 0000000..3617358 Binary files /dev/null and b/libs/potree/resources/icons/fps_controls.png differ diff --git a/libs/potree/resources/icons/fps_controls.svg b/libs/potree/resources/icons/fps_controls.svg new file mode 100644 index 0000000..23bd09e --- /dev/null +++ b/libs/potree/resources/icons/fps_controls.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/front.svg b/libs/potree/resources/icons/front.svg new file mode 100644 index 0000000..f3d8d4f --- /dev/null +++ b/libs/potree/resources/icons/front.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/goto.svg b/libs/potree/resources/icons/goto.svg new file mode 100644 index 0000000..3767791 --- /dev/null +++ b/libs/potree/resources/icons/goto.svg @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/gradients_grayscale.png b/libs/potree/resources/icons/gradients_grayscale.png new file mode 100644 index 0000000..9427218 Binary files /dev/null and b/libs/potree/resources/icons/gradients_grayscale.png differ diff --git a/libs/potree/resources/icons/gradients_plasma.png b/libs/potree/resources/icons/gradients_plasma.png new file mode 100644 index 0000000..71438aa Binary files /dev/null and b/libs/potree/resources/icons/gradients_plasma.png differ diff --git a/libs/potree/resources/icons/gradients_rainbow.png b/libs/potree/resources/icons/gradients_rainbow.png new file mode 100644 index 0000000..c3f9172 Binary files /dev/null and b/libs/potree/resources/icons/gradients_rainbow.png differ diff --git a/libs/potree/resources/icons/gradients_spectral.png b/libs/potree/resources/icons/gradients_spectral.png new file mode 100644 index 0000000..ae4886b Binary files /dev/null and b/libs/potree/resources/icons/gradients_spectral.png differ diff --git a/libs/potree/resources/icons/gradients_yellow_green.png b/libs/potree/resources/icons/gradients_yellow_green.png new file mode 100644 index 0000000..9e90706 Binary files /dev/null and b/libs/potree/resources/icons/gradients_yellow_green.png differ diff --git a/libs/potree/resources/icons/height.svg b/libs/potree/resources/icons/height.svg new file mode 100644 index 0000000..7b3fb34 --- /dev/null +++ b/libs/potree/resources/icons/height.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/helicopter_controls.svg b/libs/potree/resources/icons/helicopter_controls.svg new file mode 100644 index 0000000..84ab2eb --- /dev/null +++ b/libs/potree/resources/icons/helicopter_controls.svg @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/image_preview.php b/libs/potree/resources/icons/image_preview.php new file mode 100644 index 0000000..7288b6a --- /dev/null +++ b/libs/potree/resources/icons/image_preview.php @@ -0,0 +1,24 @@ + $value){ + + if($value === "." || $value === ".." || $value === "image_preview.php"){ + continue; + } + + ?> +
        +
        + +
        + \ No newline at end of file diff --git a/libs/potree/resources/icons/index.html b/libs/potree/resources/icons/index.html new file mode 100644 index 0000000..7ca5112 --- /dev/null +++ b/libs/potree/resources/icons/index.html @@ -0,0 +1,620 @@ + + + + + + +
        + + +
        + +
        add.svg
        +
        +
        + + +
        + +
        annotation.svg
        +
        +
        + + +
        + +
        area.svg
        +
        +
        + + +
        + +
        area_backup.svg
        +
        +
        + + +
        + +
        arrow_ccw.svg
        +
        +
        + + +
        + +
        arrow_cw.svg
        +
        +
        + + +
        + +
        arrow_down.svg
        +
        +
        + + +
        + +
        arrow_left.svg
        +
        +
        + + +
        + +
        arrow_right.svg
        +
        +
        + + +
        + +
        arrow_up.svg
        +
        +
        + + +
        + +
        assign.svg
        +
        +
        + + +
        + +
        azimuth.svg
        +
        +
        + + +
        + +
        back.svg
        +
        +
        + + +
        + +
        bottom.svg
        +
        +
        + + +
        + +
        camera_animation.svg
        +
        +
        + + +
        + +
        circle.svg
        +
        +
        + + +
        + +
        circled_dot.svg
        +
        +
        + + +
        + +
        clip-plane-x.svg
        +
        +
        + + +
        + +
        clip-plane-y.svg
        +
        +
        + + +
        + +
        clip-plane-z.svg
        +
        +
        + + +
        + +
        clip-polygon.svg
        +
        +
        + + +
        + +
        clip-screen.svg
        +
        +
        + + +
        + +
        clip_volume.svg
        +
        +
        + + +
        + +
        close.svg
        +
        +
        + + +
        + +
        cloud.svg
        +
        +
        + + +
        + +
        copy.svg
        +
        +
        + + +
        + +
        distance.svg
        +
        +
        + + +
        + +
        earth_controls.svg
        +
        +
        + + +
        + +
        eye.svg
        +
        +
        + + +
        + +
        eye_2.svg
        +
        +
        + + +
        + +
        eye_crossed.svg
        +
        +
        + + +
        + +
        file_csv_2d.svg
        +
        +
        + + +
        + +
        file_dxf.svg
        +
        +
        + + +
        + +
        file_dxf_2d.svg
        +
        +
        + + +
        + +
        file_dxf_3d.svg
        +
        +
        + + +
        + +
        file_geojson.svg
        +
        +
        + + +
        + +
        file_las_3d.svg
        +
        +
        + + +
        + +
        file_potree.svg
        +
        +
        + + +
        + +
        flip_y_z.svg
        +
        +
        + + +
        + +
        focus.svg
        +
        +
        + + +
        + +
        fps_controls.svg
        +
        +
        + + +
        + +
        front.svg
        +
        +
        + + +
        + +
        goto.svg
        +
        +
        + + +
        + +
        height.svg
        +
        +
        + + +
        + +
        helicopter_controls.svg
        +
        +
        + + +
        + +
        left.svg
        +
        +
        + + +
        + +
        menu_button.svg
        +
        +
        + + +
        + +
        menu_icon.svg
        +
        +
        + + +
        + +
        navigation_cube.svg
        +
        +
        + + +
        + +
        orbit_controls.svg
        +
        +
        + + +
        + +
        orthographic-camera.svg
        +
        +
        + + +
        + +
        perspective-camera.svg
        +
        +
        + + +
        + +
        picture.svg
        +
        +
        + + +
        + +
        point.svg
        +
        +
        + + +
        + +
        profile.svg
        +
        +
        + + +
        + +
        remove.svg
        +
        +
        + + +
        + +
        reset_tools.svg
        +
        +
        + + +
        + +
        return_number.svg
        +
        +
        + + +
        + +
        rgb.svg
        +
        +
        + + +
        + +
        right.svg
        +
        +
        + + +
        + +
        rotate.svg
        +
        +
        + + +
        + +
        scale.svg
        +
        +
        + + +
        + +
        sphere.svg
        +
        +
        + + +
        + +
        sphere_distances.svg
        +
        +
        + + +
        + +
        target.svg
        +
        +
        + + +
        + +
        top.svg
        +
        +
        + + +
        + +
        translate.svg
        +
        +
        + + +
        + +
        triangle.svg
        +
        +
        + + +
        + +
        volume.svg
        +
        +
        + + +
        + +
        vr_button.svg
        +
        +
        + + +
        + +
        angle.png
        +
        +
        + + +
        + +
        earth_controls.png
        +
        +
        + + +
        + +
        earth_controls_1.png
        +
        +
        + + +
        + +
        eye_2.png
        +
        +
        + + +
        + +
        flip_y_z.png
        +
        +
        + + +
        + +
        fps_controls.png
        +
        +
        + + +
        + +
        gradients_grayscale.png
        +
        +
        + + +
        + +
        gradients_plasma.png
        +
        +
        + + +
        + +
        gradients_rainbow.png
        +
        +
        + + +
        + +
        gradients_spectral.png
        +
        +
        + + +
        + +
        gradients_yellow_green.png
        +
        +
        + + +
        + +
        map_icon.png
        +
        +
        + + +
        + +
        profile.png
        +
        +
        + + +
        + +
        rgb.png
        +
        +
        + + +
        + +
        rgb_elevation.png
        +
        +
        + + +
        + +
        sphere.png
        +
        +
        + +
        + + + \ No newline at end of file diff --git a/libs/potree/resources/icons/left.svg b/libs/potree/resources/icons/left.svg new file mode 100644 index 0000000..1c4c1cd --- /dev/null +++ b/libs/potree/resources/icons/left.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/map_icon.png b/libs/potree/resources/icons/map_icon.png new file mode 100644 index 0000000..c790e7f Binary files /dev/null and b/libs/potree/resources/icons/map_icon.png differ diff --git a/libs/potree/resources/icons/matcap/basic_1.jpg b/libs/potree/resources/icons/matcap/basic_1.jpg new file mode 100644 index 0000000..3c81330 Binary files /dev/null and b/libs/potree/resources/icons/matcap/basic_1.jpg differ diff --git a/libs/potree/resources/icons/matcap/basic_2.jpg b/libs/potree/resources/icons/matcap/basic_2.jpg new file mode 100644 index 0000000..6493aa9 Binary files /dev/null and b/libs/potree/resources/icons/matcap/basic_2.jpg differ diff --git a/libs/potree/resources/icons/matcap/basic_dark.jpg b/libs/potree/resources/icons/matcap/basic_dark.jpg new file mode 100644 index 0000000..18d18a5 Binary files /dev/null and b/libs/potree/resources/icons/matcap/basic_dark.jpg differ diff --git a/libs/potree/resources/icons/matcap/basic_side.jpg b/libs/potree/resources/icons/matcap/basic_side.jpg new file mode 100644 index 0000000..a0dbbb4 Binary files /dev/null and b/libs/potree/resources/icons/matcap/basic_side.jpg differ diff --git a/libs/potree/resources/icons/matcap/ceramic_dark.jpg b/libs/potree/resources/icons/matcap/ceramic_dark.jpg new file mode 100644 index 0000000..8efd96c Binary files /dev/null and b/libs/potree/resources/icons/matcap/ceramic_dark.jpg differ diff --git a/libs/potree/resources/icons/matcap/ceramic_lightbulb.jpg b/libs/potree/resources/icons/matcap/ceramic_lightbulb.jpg new file mode 100644 index 0000000..78c9f28 Binary files /dev/null and b/libs/potree/resources/icons/matcap/ceramic_lightbulb.jpg differ diff --git a/libs/potree/resources/icons/matcap/check_normal+y.jpg b/libs/potree/resources/icons/matcap/check_normal+y.jpg new file mode 100644 index 0000000..012226c Binary files /dev/null and b/libs/potree/resources/icons/matcap/check_normal+y.jpg differ diff --git a/libs/potree/resources/icons/matcap/check_rim_dark.jpg b/libs/potree/resources/icons/matcap/check_rim_dark.jpg new file mode 100644 index 0000000..518b002 Binary files /dev/null and b/libs/potree/resources/icons/matcap/check_rim_dark.jpg differ diff --git a/libs/potree/resources/icons/matcap/check_rim_light.jpg b/libs/potree/resources/icons/matcap/check_rim_light.jpg new file mode 100644 index 0000000..231bde4 Binary files /dev/null and b/libs/potree/resources/icons/matcap/check_rim_light.jpg differ diff --git a/libs/potree/resources/icons/matcap/clay_brown.jpg b/libs/potree/resources/icons/matcap/clay_brown.jpg new file mode 100644 index 0000000..51c8ab1 Binary files /dev/null and b/libs/potree/resources/icons/matcap/clay_brown.jpg differ diff --git a/libs/potree/resources/icons/matcap/clay_muddy.jpg b/libs/potree/resources/icons/matcap/clay_muddy.jpg new file mode 100644 index 0000000..bbcfcb3 Binary files /dev/null and b/libs/potree/resources/icons/matcap/clay_muddy.jpg differ diff --git a/libs/potree/resources/icons/matcap/clay_studio.jpg b/libs/potree/resources/icons/matcap/clay_studio.jpg new file mode 100644 index 0000000..0aa2ea3 Binary files /dev/null and b/libs/potree/resources/icons/matcap/clay_studio.jpg differ diff --git a/libs/potree/resources/icons/matcap/contours_1.jpg b/libs/potree/resources/icons/matcap/contours_1.jpg new file mode 100644 index 0000000..5d9a149 Binary files /dev/null and b/libs/potree/resources/icons/matcap/contours_1.jpg differ diff --git a/libs/potree/resources/icons/matcap/contours_2.jpg b/libs/potree/resources/icons/matcap/contours_2.jpg new file mode 100644 index 0000000..cdf2a96 Binary files /dev/null and b/libs/potree/resources/icons/matcap/contours_2.jpg differ diff --git a/libs/potree/resources/icons/matcap/contours_3.jpg b/libs/potree/resources/icons/matcap/contours_3.jpg new file mode 100644 index 0000000..69b2338 Binary files /dev/null and b/libs/potree/resources/icons/matcap/contours_3.jpg differ diff --git a/libs/potree/resources/icons/matcap/jade.jpg b/libs/potree/resources/icons/matcap/jade.jpg new file mode 100644 index 0000000..eb0bfb6 Binary files /dev/null and b/libs/potree/resources/icons/matcap/jade.jpg differ diff --git a/libs/potree/resources/icons/matcap/matcap.jpg b/libs/potree/resources/icons/matcap/matcap.jpg new file mode 100644 index 0000000..71130ff Binary files /dev/null and b/libs/potree/resources/icons/matcap/matcap.jpg differ diff --git a/libs/potree/resources/icons/matcap/metal_anisotropic.jpg b/libs/potree/resources/icons/matcap/metal_anisotropic.jpg new file mode 100644 index 0000000..1d55e08 Binary files /dev/null and b/libs/potree/resources/icons/matcap/metal_anisotropic.jpg differ diff --git a/libs/potree/resources/icons/matcap/metal_carpaint.jpg b/libs/potree/resources/icons/matcap/metal_carpaint.jpg new file mode 100644 index 0000000..da04f50 Binary files /dev/null and b/libs/potree/resources/icons/matcap/metal_carpaint.jpg differ diff --git a/libs/potree/resources/icons/matcap/metal_lead.jpg b/libs/potree/resources/icons/matcap/metal_lead.jpg new file mode 100644 index 0000000..0987296 Binary files /dev/null and b/libs/potree/resources/icons/matcap/metal_lead.jpg differ diff --git a/libs/potree/resources/icons/matcap/metal_shiny.jpg b/libs/potree/resources/icons/matcap/metal_shiny.jpg new file mode 100644 index 0000000..d783aa3 Binary files /dev/null and b/libs/potree/resources/icons/matcap/metal_shiny.jpg differ diff --git a/libs/potree/resources/icons/matcap/pearl.jpg b/libs/potree/resources/icons/matcap/pearl.jpg new file mode 100644 index 0000000..48cb22a Binary files /dev/null and b/libs/potree/resources/icons/matcap/pearl.jpg differ diff --git a/libs/potree/resources/icons/matcap/reflection_check_horizontal.jpg b/libs/potree/resources/icons/matcap/reflection_check_horizontal.jpg new file mode 100644 index 0000000..f8304a4 Binary files /dev/null and b/libs/potree/resources/icons/matcap/reflection_check_horizontal.jpg differ diff --git a/libs/potree/resources/icons/matcap/reflection_check_vertical.jpg b/libs/potree/resources/icons/matcap/reflection_check_vertical.jpg new file mode 100644 index 0000000..c397d51 Binary files /dev/null and b/libs/potree/resources/icons/matcap/reflection_check_vertical.jpg differ diff --git a/libs/potree/resources/icons/matcap/resin.jpg b/libs/potree/resources/icons/matcap/resin.jpg new file mode 100644 index 0000000..66f7cb7 Binary files /dev/null and b/libs/potree/resources/icons/matcap/resin.jpg differ diff --git a/libs/potree/resources/icons/matcap/skin.jpg b/libs/potree/resources/icons/matcap/skin.jpg new file mode 100644 index 0000000..ad08f18 Binary files /dev/null and b/libs/potree/resources/icons/matcap/skin.jpg differ diff --git a/libs/potree/resources/icons/matcap/toon.jpg b/libs/potree/resources/icons/matcap/toon.jpg new file mode 100644 index 0000000..dd1d274 Binary files /dev/null and b/libs/potree/resources/icons/matcap/toon.jpg differ diff --git a/libs/potree/resources/icons/menu_button.svg b/libs/potree/resources/icons/menu_button.svg new file mode 100644 index 0000000..e36496e --- /dev/null +++ b/libs/potree/resources/icons/menu_button.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/menu_icon.svg b/libs/potree/resources/icons/menu_icon.svg new file mode 100644 index 0000000..be38b1d --- /dev/null +++ b/libs/potree/resources/icons/menu_icon.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/navigation_cube.svg b/libs/potree/resources/icons/navigation_cube.svg new file mode 100644 index 0000000..d46db83 --- /dev/null +++ b/libs/potree/resources/icons/navigation_cube.svg @@ -0,0 +1,62 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/orbit_controls.svg b/libs/potree/resources/icons/orbit_controls.svg new file mode 100644 index 0000000..5a46cd2 --- /dev/null +++ b/libs/potree/resources/icons/orbit_controls.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/orthographic-camera.svg b/libs/potree/resources/icons/orthographic-camera.svg new file mode 100644 index 0000000..7089ff4 --- /dev/null +++ b/libs/potree/resources/icons/orthographic-camera.svg @@ -0,0 +1,62 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/perspective-camera.svg b/libs/potree/resources/icons/perspective-camera.svg new file mode 100644 index 0000000..6491bca --- /dev/null +++ b/libs/potree/resources/icons/perspective-camera.svg @@ -0,0 +1,62 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/picture.svg b/libs/potree/resources/icons/picture.svg new file mode 100644 index 0000000..d0d5647 --- /dev/null +++ b/libs/potree/resources/icons/picture.svg @@ -0,0 +1,121 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/point.svg b/libs/potree/resources/icons/point.svg new file mode 100644 index 0000000..af01d61 --- /dev/null +++ b/libs/potree/resources/icons/point.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/libs/potree/resources/icons/profile.png b/libs/potree/resources/icons/profile.png new file mode 100644 index 0000000..1f42ba1 Binary files /dev/null and b/libs/potree/resources/icons/profile.png differ diff --git a/libs/potree/resources/icons/profile.svg b/libs/potree/resources/icons/profile.svg new file mode 100644 index 0000000..fde7178 --- /dev/null +++ b/libs/potree/resources/icons/profile.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/remove.svg b/libs/potree/resources/icons/remove.svg new file mode 100644 index 0000000..326f5d3 --- /dev/null +++ b/libs/potree/resources/icons/remove.svg @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/reset_tools.svg b/libs/potree/resources/icons/reset_tools.svg new file mode 100644 index 0000000..fe0846a --- /dev/null +++ b/libs/potree/resources/icons/reset_tools.svg @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/return_number.svg b/libs/potree/resources/icons/return_number.svg new file mode 100644 index 0000000..f8089d2 --- /dev/null +++ b/libs/potree/resources/icons/return_number.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/rgb.png b/libs/potree/resources/icons/rgb.png new file mode 100644 index 0000000..a62faf5 Binary files /dev/null and b/libs/potree/resources/icons/rgb.png differ diff --git a/libs/potree/resources/icons/rgb.svg b/libs/potree/resources/icons/rgb.svg new file mode 100644 index 0000000..e04d822 --- /dev/null +++ b/libs/potree/resources/icons/rgb.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/rgb_elevation.png b/libs/potree/resources/icons/rgb_elevation.png new file mode 100644 index 0000000..d43659f Binary files /dev/null and b/libs/potree/resources/icons/rgb_elevation.png differ diff --git a/libs/potree/resources/icons/right.svg b/libs/potree/resources/icons/right.svg new file mode 100644 index 0000000..5449b63 --- /dev/null +++ b/libs/potree/resources/icons/right.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/rotate.svg b/libs/potree/resources/icons/rotate.svg new file mode 100644 index 0000000..5638488 --- /dev/null +++ b/libs/potree/resources/icons/rotate.svg @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/libs/potree/resources/icons/scale.svg b/libs/potree/resources/icons/scale.svg new file mode 100644 index 0000000..226c124 --- /dev/null +++ b/libs/potree/resources/icons/scale.svg @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/sphere.png b/libs/potree/resources/icons/sphere.png new file mode 100644 index 0000000..7e12854 Binary files /dev/null and b/libs/potree/resources/icons/sphere.png differ diff --git a/libs/potree/resources/icons/sphere.svg b/libs/potree/resources/icons/sphere.svg new file mode 100644 index 0000000..cddd6c0 --- /dev/null +++ b/libs/potree/resources/icons/sphere.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/libs/potree/resources/icons/sphere_distances.svg b/libs/potree/resources/icons/sphere_distances.svg new file mode 100644 index 0000000..f74d500 --- /dev/null +++ b/libs/potree/resources/icons/sphere_distances.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/libs/potree/resources/icons/target.svg b/libs/potree/resources/icons/target.svg new file mode 100644 index 0000000..6a29f1d --- /dev/null +++ b/libs/potree/resources/icons/target.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/top.svg b/libs/potree/resources/icons/top.svg new file mode 100644 index 0000000..da88225 --- /dev/null +++ b/libs/potree/resources/icons/top.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/translate.svg b/libs/potree/resources/icons/translate.svg new file mode 100644 index 0000000..823e6f8 --- /dev/null +++ b/libs/potree/resources/icons/translate.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/libs/potree/resources/icons/triangle.svg b/libs/potree/resources/icons/triangle.svg new file mode 100644 index 0000000..02ac589 --- /dev/null +++ b/libs/potree/resources/icons/triangle.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/volume.svg b/libs/potree/resources/icons/volume.svg new file mode 100644 index 0000000..628fe72 --- /dev/null +++ b/libs/potree/resources/icons/volume.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/libs/potree/resources/icons/vr_button.svg b/libs/potree/resources/icons/vr_button.svg new file mode 100644 index 0000000..d61dbd7 --- /dev/null +++ b/libs/potree/resources/icons/vr_button.svg @@ -0,0 +1,82 @@ + + + + + + + + + + image/svg+xml + + + + + + + + VR + + diff --git a/libs/potree/resources/images/background.jpg b/libs/potree/resources/images/background.jpg new file mode 100644 index 0000000..04caf4f Binary files /dev/null and b/libs/potree/resources/images/background.jpg differ diff --git a/libs/potree/resources/images/child_indices.svg b/libs/potree/resources/images/child_indices.svg new file mode 100644 index 0000000..fb703d2 --- /dev/null +++ b/libs/potree/resources/images/child_indices.svg @@ -0,0 +1,325 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + 0 + + 4 + + 1 + + 5 + + 2 + + 6 + + 3 + + 7 + + + + diff --git a/libs/potree/resources/images/compas.svg b/libs/potree/resources/images/compas.svg new file mode 100644 index 0000000..fb20a59 --- /dev/null +++ b/libs/potree/resources/images/compas.svg @@ -0,0 +1,135 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + N + S + W + E + + diff --git a/libs/potree/resources/images/loading.jpg b/libs/potree/resources/images/loading.jpg new file mode 100644 index 0000000..8dbd779 Binary files /dev/null and b/libs/potree/resources/images/loading.jpg differ diff --git a/libs/potree/resources/images/vr_controller_help.jpg b/libs/potree/resources/images/vr_controller_help.jpg new file mode 100644 index 0000000..c309650 Binary files /dev/null and b/libs/potree/resources/images/vr_controller_help.jpg differ diff --git a/libs/potree/resources/images/vr_controller_help.svg b/libs/potree/resources/images/vr_controller_help.svg new file mode 100644 index 0000000..6d03c7b --- /dev/null +++ b/libs/potree/resources/images/vr_controller_help.svg @@ -0,0 +1,7620 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Fly (Touchpad or Joystick) + 🡅 + 🡅 + + Translate Scene(1x trigger) + Rotate & Scale(2x triggers) + + + diff --git a/libs/potree/resources/lang/de/translation.json b/libs/potree/resources/lang/de/translation.json new file mode 100644 index 0000000..3b4e33c --- /dev/null +++ b/libs/potree/resources/lang/de/translation.json @@ -0,0 +1,69 @@ +{ + "tb": { + "navigation_opt": "Navigation", + "rendering_opt": "Aussehen", + "tools_opt": "Tools", + "measurments_opt": "Messungen", + "clipping_opt": "Clipping", + "materials_opt": "Materials", + "scene_opt": "Szene", + "classification_filter_opt": "Klassifizierung Filter", + "parameters_opt": "Weitere Einstellungen", + "about_opt": "Über Potree" + }, + "tt": { + "angle_measurement": "Winkelmessung", + "distance_measurement": "Abstandsmessung", + "area_measurement": "Flächenmessung", + "volume_measurement": "Volumenmessung", + "height_profile": "Höhenprofil", + "clip_volume": "Volume clip", + "clip_polygon": "Polygon clip", + "clip_plane_x": "Clipebene auf x-Achse", + "clip_plane_y": "Clipebene auf y-Achse", + "clip_plane_z": "Clipebene auf z-Achse", + "remove_all_measurement": "Alle Messungen entfernen", + "left_view_control": "Linke Seite", + "front_view_control": "Vorderseite", + "top_view_control": "Draufsicht", + "focus_control": "Volle Ausdehnung", + "orbit_control": "Orbit Kontrolle ", + "flight_control": "Fly Kontrolle", + "earth_control": "Earth Kontrolle", + "perspective_camera_control": "Perspektivische Kamera", + "orthographic_camera_control": "Orthografische Kamera", + "navigation_cube_control": "Navigationswürfel", + "remove_all_clipping_volumes": "Alle Clipvolumen entfernen" + }, + "appearance": { + "nb_max_pts": "Max Punkte", + "point_size": "Punktgrösse", + "point_opacity": "Deckkraft", + "field_view": "Sichtfeld", + "point_size_type": "Punktgrösse", + "point_material": "Materials", + "elevation_range": "Elevation Bereich", + "point_quality": "Qualität", + "point_shape": "Form", + "edl_radius": "Radius", + "edl_strength": "Stärke", + "edl_enable": "Ein", + "min_node_size": "Min Knotengrösse", + "clip_mode": "Clip-Modus", + "move_speed": "Speed", + "skybox": "Sky", + "bottom_lock": "Halten über dem Boden", + "box": "Box", + "length_unit": "Lenght unit", + "freeze": "Lock view", + "language": "Sprache" + }, + "profile": { + "nb_points": "Punkt number", + "title": "Höhenprofil", + "save": "Speichern" + }, + "settings": { + "language": "Sprache" + } +} diff --git a/libs/potree/resources/lang/dev/ns.common.json b/libs/potree/resources/lang/dev/ns.common.json new file mode 100644 index 0000000..a54818f --- /dev/null +++ b/libs/potree/resources/lang/dev/ns.common.json @@ -0,0 +1,7 @@ +{ + "simple_dev": "ok_from_common_dev", + "test": { + "simple_dev": "ok_from_common_dev", + "fallback_dev": "ok_from_common_dev-fallback" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/dev/ns.special.json b/libs/potree/resources/lang/dev/ns.special.json new file mode 100644 index 0000000..d3c94c8 --- /dev/null +++ b/libs/potree/resources/lang/dev/ns.special.json @@ -0,0 +1,6 @@ +{ + "simple_dev": "ok_from_special_dev", + "test": { + "simple_dev": "ok_from_special_dev" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/dev/translation.json b/libs/potree/resources/lang/dev/translation.json new file mode 100644 index 0000000..55e7448 --- /dev/null +++ b/libs/potree/resources/lang/dev/translation.json @@ -0,0 +1,6 @@ +{ + "simple_dev": "ok_from_dev", + "test": { + "simple_dev": "ok_from_dev" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/en-US/ns.common.json b/libs/potree/resources/lang/en-US/ns.common.json new file mode 100644 index 0000000..cc324a0 --- /dev/null +++ b/libs/potree/resources/lang/en-US/ns.common.json @@ -0,0 +1,6 @@ +{ + "simple_en-US": "ok_from_common_en-US", + "test": { + "simple_en-US": "ok_from_common_en-US" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/en-US/ns.special.json b/libs/potree/resources/lang/en-US/ns.special.json new file mode 100644 index 0000000..1048726 --- /dev/null +++ b/libs/potree/resources/lang/en-US/ns.special.json @@ -0,0 +1,6 @@ +{ + "simple_en-US": "ok_from_special_en-US", + "test": { + "simple_en-US": "ok_from_special_en-US" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/en-US/translation.json b/libs/potree/resources/lang/en-US/translation.json new file mode 100644 index 0000000..ca84855 --- /dev/null +++ b/libs/potree/resources/lang/en-US/translation.json @@ -0,0 +1,6 @@ +{ + "simple_en-US": "ok_from_en-US", + "test": { + "simple_en-US": "ok_from_en-US" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/en/ns.common.json b/libs/potree/resources/lang/en/ns.common.json new file mode 100644 index 0000000..6012093 --- /dev/null +++ b/libs/potree/resources/lang/en/ns.common.json @@ -0,0 +1,7 @@ +{ + "simple_en": "ok_from_common_en", + "test": { + "simple_en": "ok_from_common_en", + "fallback_en": "ok_from_common_en-fallback" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/en/ns.special.json b/libs/potree/resources/lang/en/ns.special.json new file mode 100644 index 0000000..c30b59c --- /dev/null +++ b/libs/potree/resources/lang/en/ns.special.json @@ -0,0 +1,6 @@ +{ + "simple_en": "ok_from_special_en", + "test": { + "simple_en": "ok_from_special_en" + } +} \ No newline at end of file diff --git a/libs/potree/resources/lang/en/translation.json b/libs/potree/resources/lang/en/translation.json new file mode 100644 index 0000000..938ba88 --- /dev/null +++ b/libs/potree/resources/lang/en/translation.json @@ -0,0 +1,106 @@ +{ + "tb": { + "navigation_opt": "Navigation", + "rendering_opt": "Appearance", + "tools_opt": "Tools", + "measurments_opt": "Measurements", + "clipping_opt": "Clipping", + "annotations_opt": "Annotations", + "materials_opt": "Materials", + "scene_opt": "Scene", + "classification_filter_opt": "Classification filter", + "filters_opt": "Filters", + "parameters_opt": "Other settings", + "about_opt": "About" + }, + "tt": { + "angle_measurement": "Angle measurement", + "point_measurement": "Point measurement", + "distance_measurement": "Distance measurement", + "height_measurement": "Height measurement", + "circle_measurement": "Circle measurement", + "area_measurement": "Area measurement", + "volume_measurement": "Volume measurement", + "height_profile": "Height profile", + "annotation": "Annotation", + "clip_volume": "Volume clip", + "clip_polygon": "Polygon clip", + "screen_clip_box": "Draw a selection box. Requires you to be in orthographic camera mode!", + "clip_plane_x": "Clip plane on x axis", + "clip_plane_y": "Clip plane on y axis", + "clip_plane_z": "Clip plane on z axis", + "remove_all_measurement": "Remove all measurements", + "left_view_control": "Left view", + "right_view_control": "Righ view", + "front_view_control": "Front view", + "back_view_control": "Back view", + "top_view_control": "Top view", + "bottom_view_control": "Bottom view", + "focus_control": "Full extent", + "orbit_control": "Orbit control", + "flight_control": "Fly control", + "heli_control": "Helicopter control", + "earth_control": "Earth control", + "perspective_camera_control": "Perspective camera", + "orthographic_camera_control": "Orthographic camera", + "navigation_cube_control": "Navigation cube", + "remove_all_clipping_volumes": "Remove all clipping volumes", + "compass": "Compass", + "camera_animation": "Camera Animation" + }, + "appearance": { + "nb_max_pts": "Point budget", + "point_size": "Point size", + "min_point_size": "Minimum size", + "point_opacity": "Opacity", + "field_view": "Field of view", + "point_size_type": "Point sizing", + "point_material": "Materials", + "elevation_range": "Elevation range", + "extra_range": "Scalar range", + "point_quality": "Quality", + "point_shape": "Shape", + "edl_radius": "Radius", + "edl_strength": "Strength", + "edl_opacity": "Opacity", + "edl_enable": "Enable", + "min_node_size": "Min node size", + "clip_mode": "Clip mode", + "move_speed": "Speed", + "skybox": "Sky", + "bottom_lock": "Keep above ground", + "box": "Box", + "length_unit": "Length unit", + "freeze": "Lock view", + "language": "Language", + "backface_culling": "Backface Culling" + }, + "measurements": { + "clip": "clip", + "show": "show volume" + }, + "annotations": { + "show3D": "show in 3D", + "showMap": "show on map" + }, + "profile": { + "nb_points": "Number of Points", + "title": "Height profile", + "save_las": "Save LAS(3D)", + "save_ortho": "Save CSV(2D)" + }, + "scene": { + "camera_position": "Camera Position", + "camera_target": "Camera Target" + }, + "filters": { + "return_number": "Return Number", + "number_of_returns": "Number of Returns", + "gps_min": "min", + "gps_max": "max", + "gps_time": "GPS Time" + }, + "settings": { + "language": "Language" + } +} diff --git a/libs/potree/resources/lang/es/translation.json b/libs/potree/resources/lang/es/translation.json new file mode 100644 index 0000000..bb5fbe3 --- /dev/null +++ b/libs/potree/resources/lang/es/translation.json @@ -0,0 +1,90 @@ +{ + "tb": { + "navigation_opt": "Navegación", + "rendering_opt": "Apariencia", + "tools_opt": "Herramientas", + "measurments_opt": "Medidas", + "clipping_opt": "Recorte", + "annotations_opt": "Anotaciones", + "materials_opt": "Materiales", + "scene_opt": "Escena", + "classification_filter_opt": "Filtro de clasificación", + "parameters_opt": "Otros ajustes", + "about_opt": "Acerca de" + }, + "tt": { + "angle_measurement": "Medición de ángulos", + "point_measurement": "Medición de puntos", + "distance_measurement": "Medición de distancia", + "height_measurement": "Medición de altura", + "area_measurement": "Medición de área", + "volume_measurement": "Medición de volumen", + "height_profile": "Perfil de altura", + "clip_volume": "Clip de volumen", + "clip_polygon": "Clip poligonal", + "screen_clip_box": "Dibuje un cuadro de selección. Requiere que usted esté en modo de cámara ortográfica", + "clip_plane_x": "Plano del clip en el eje x", + "clip_plane_y": "Plano del clip en el eje y", + "clip_plane_z": "Plano del clip en el eje z", + "remove_all_measurement": "Eliminar todas las mediciones", + "left_view_control": "Vista izquierda", + "right_view_control": "Vista derecha", + "front_view_control": "Vista de frente", + "back_view_control": "Vista desde atrás", + "top_view_control": "Vista superior", + "bottom_view_control": "Vista inferior", + "focus_control": "Alcance total", + "orbit_control": "Control de órbita", + "flight_control": "Control de vuelo", + "heli_control": "Control de helicóptero", + "earth_control": "Control de la tierra", + "perspective_camera_control": "Perspectiva de la cámara", + "orthographic_camera_control": "Cámara ortográfica", + "navigation_cube_control": "Cubo de navegación", + "remove_all_clipping_volumes": "Eliminar todos los volúmenes de recorte" + }, + "appearance": { + "nb_max_pts": "Presupuesto de puntos", + "point_size": "Tamaño del punto", + "point_opacity": "Opacidad", + "field_view": "Campo de visión", + "point_size_type": "Dimensionamiento de puntos", + "point_material": "Materiales", + "elevation_range": "Rango de elevación", + "point_quality": "Calidad", + "point_shape": "Forma", + "edl_radius": "Radio", + "edl_strength": "Fuerza", + "edl_enable": "Habilitar", + "min_node_size": "Tamaño de nodo mínimo", + "clip_mode": "Modo clip", + "move_speed": "Velocidad", + "skybox": "Cielo", + "bottom_lock": "Mantenerse sobre el suelo", + "box": "Caja", + "length_unit": "Unidad de longitud", + "freeze": "Vista de bloqueo", + "language": "Lenguaje" + }, + "measurements": { + "clip": "clip", + "show": "ver volumen" + }, + "annotations": { + "show3D": "ver en 3D", + "showMap": "ver en mapa" + }, + "profile": { + "nb_points": "Número de puntos", + "title": "Perfil de altura", + "save_las": "Guardar LAS(3D)", + "save_ortho": "Guardar CSV(2D)" + }, + "scene": { + "camera_position": "Posición de la cámara", + "camera_target": "Objetuvo de la cámara" + }, + "settings": { + "language": "Lenguaje" + } +} diff --git a/libs/potree/resources/lang/fr/translation.json b/libs/potree/resources/lang/fr/translation.json new file mode 100644 index 0000000..99fd577 --- /dev/null +++ b/libs/potree/resources/lang/fr/translation.json @@ -0,0 +1,58 @@ +{ + "tb": { + "navigation_opt": "Navigation", + "rendering_opt": "Apparence", + "tools_opt": "Outils", + "measurments_opt": "Mesures", + "materials_opt": "Matériaux", + "scene_opt": "Scène", + "classification_filter_opt": "Filtre de classification", + "parameters_opt": "Autres paramètres", + "about_opt": "À propos" + }, + "tt": { + "angle_measurement": "Mesurer un angle", + "distance_measurement": "Mesurer une distance", + "area_measurement": "Mesurer une surface", + "volume_measurement": "Mesurer un volume", + "height_profile": "Mesurer un profil", + "clip_volume": "Sélectionner des points par un volume", + "remove_all_measurement": "Supprimer toutes les mesures", + "left_view_control": "Vue de la gauche", + "front_view_control": "Vue de face", + "top_view_control": "Vue de dessus", + "focus_control": "Vue complète", + "orbit_control": "Orbite", + "flight_control": "Vol", + "earth_control": "Earth" + }, + "appearance": { + "nb_max_pts": "Nb points max", + "point_size": "Taille des points", + "point_opacity": "Opacité", + "field_view": "Angle de vue", + "point_size_type": "Type de taille", + "point_material": "Matériaux", + "elevation_range": "Plage altimétrique", + "point_quality": "Qualité", + "edl_radius": "Rayon", + "edl_strength": "Intensité", + "edl_enable": "Activer", + "min_node_size": "Taille minimum des noeuds", + "clip_mode": "Mode d'intersection", + "move_speed": "Vitesse", + "skybox": "Ciel", + "bottom_lock": "Rester au-dessus du sol", + "box": "Boite", + "freeze": "Vérouiller la vue", + "language": "Choix de la langue" + }, + "profile": { + "nb_points": "Nombre de points", + "title": "Profil altimétrique", + "save": "Enregistrer" + }, + "settings": { + "language": "Langue" + } +} diff --git a/libs/potree/resources/lang/it/translation.json b/libs/potree/resources/lang/it/translation.json new file mode 100644 index 0000000..b4e8acc --- /dev/null +++ b/libs/potree/resources/lang/it/translation.json @@ -0,0 +1,99 @@ +{ + "tb": { + "navigation_opt": "Navigazione", + "rendering_opt": "Visualizzazione", + "tools_opt": "Strumenti", + "measurments_opt": "Misure", + "clipping_opt": "Opzioni di ritaglio", + "annotations_opt": "Annotazioni", + "materials_opt": "Materiali", + "scene_opt": "Scena", + "classification_filter_opt": "Filtro di classificazione", + "filters_opt": "Filtri", + "parameters_opt": "Altri parametri", + "about_opt": "A proposito" + }, + "tt": { + "angle_measurement": "Misurazione angolo", + "point_measurement": "Misurazione punto", + "distance_measurement": "Misurazione distanza", + "height_measurement": "Misurazione quota", + "circle_measurement": "Misurazione cerchio", + "area_measurement": "Misurazione superficie", + "volume_measurement": "Misurazione volume", + "height_profile": "Misurazione profilo", + "annotation": "Annotazione", + "clip_volume": "Ritaglio con volume", + "clip_polygon": "Ritaglio con poligono", + "remove_all_measurement": "Cancellazione misure", + "left_view_control": "Vista da sinistra", + "front_view_control": "Vista frontale", + "back_view_control": "Vista da dietro", + "top_view_control": "Vista nadirale", + "bottom_view_control": "Vista dal basso", + "focus_control": "Massima estensione", + "orbit_control": "Modalità orbit", + "flight_control": "Modalità volo", + "heli_control": "Modalità elicottero", + "earth_control": "Modalità Earth", + "perspective_camera_control": "Vista prospettica", + "orthographic_camera_control": "Vista ortografica", + "remove_all_clipping_volumes": "Rimuovere tutti i volumi ritagliati", + "compass": "Bussola", + "camera_animation": "Animazione" + }, + "appearance": { + "nb_max_pts": "Numero di punti", + "point_size": "Dimensione dei punti", + "min_point_size": "Minima dimensione dei punti", + "point_opacity": "Opacità", + "field_view": "Angolo di vista", + "point_size_type": "Metodo di dimensionamento dei punti", + "point_material": "Materiale", + "elevation_range": "Intervallo altimetrico", + "extra_range": "Intervallo scalare", + "point_quality": "Qualità", + "point_shape": "Forma", + "edl_radius": "Raggio", + "edl_strength": "Intensità", + "edl_opacity": "Opacità", + "edl_enable": "Attiva", + "min_node_size": "Min dimensione dei nodi", + "clip_mode": "Modalità di ritaglio", + "move_speed": "Velocità", + "skybox": "Cielo", + "bottom_lock": "Rimani sotto al suolo", + "box": "Box", + "length_unit": "Unità di misura", + "freeze": "Blocca vista", + "language": "Lingua" + }, + "measurements": { + "clip": "ritaglia", + "show": "mostra volume" + }, + "annotations": { + "show3D": "mostra in 3D", + "showMap": "mostra sulla mappa" + }, + "profile": { + "nb_points": "Numero di punti", + "title": "Profilo altimetrico", + "save_las": "Salva come LAS(3D)", + "save_ortho": "Salva come CSV(2D)" + }, + "scene": { + "camera_position": "Posizione della camera", + "camera_target": "Obiettivo della camera" + }, + "filters": { + "return_number": "Numero di ritorno", + "number_of_returns": "Numero di ritorno", + "gps_min": "min", + "gps_max": "max", + "gps_time": "tempo GPS" + }, + "settings": { + "language": "Lingua" + } +} diff --git a/libs/potree/resources/lang/jp/translation.json b/libs/potree/resources/lang/jp/translation.json new file mode 100644 index 0000000..f8fae5e --- /dev/null +++ b/libs/potree/resources/lang/jp/translation.json @@ -0,0 +1,66 @@ +{ + "tb": { + "navigation_opt": "ナビゲーション", + "rendering_opt": "外観", + "tools_opt": "ツール", + "measurments_opt": "測定結果", + "annotations_opt": "注釈", + "materials_opt": "材料", + "scene_opt": "シーン", + "classification_filter_opt": "フィルター分類", + "parameters_opt": "その他の設定", + "about_opt": "協力" + }, + "tt": { + "angle_measurement": "角度測定", + "distance_measurement": "距離測定", + "height_measurement": "標高測定", + "area_measurement": "面積測定", + "volume_measurement": "体積測定", + "height_profile": "断面図", + "clip_volume": "クリッピングボリューム", + "remove_all_measurement": "計測結果のクリア", + "left_view_control": "左から見る", + "front_view_control": "前から見る", + "top_view_control": "上から見る", + "focus_control": "全体表示", + "orbit_control": " 軌道制御", + "flight_control": "Vol", + "earth_control": "地球" + }, + "appearance": { + "nb_max_pts": "表示するポイント数を設定", + "point_size": "点サイズを設定", + "point_opacity": "不透明度", + "field_view": "視野", + "point_size_type": "点タイプ設定", + "point_material": "点の材質", + "elevation_range": "Plage altimétrique", + "point_quality": "品質", + "edl_radius": "点群の半径", + "edl_strength": "点群の強度", + "edl_enable": "アクティブにする", + "min_node_size": "最小ノードサイズ", + "clip_mode": "クリップモード", + "move_speed": "動く速度", + "skybox": "空", + "bottom_lock": "地上面を固定します。", + "box": "ボックス", + "freeze": "ビューの固定", + "language": "言語" + }, + "profile": { + "nb_points": "点群番号", + "title": "Profil altimétrique", + "save_las": "LAS(3D)形式で保存", + "save_ortho": "CSV(2D)形式で保存", + "save": "保存" + }, + "scene": { + "camera_position": "Camera Position", + "camera_target": "Camera Target" + }, + "settings": { + "language": "言語" + } +} diff --git a/libs/potree/resources/lang/se/translation.json b/libs/potree/resources/lang/se/translation.json new file mode 100644 index 0000000..688db6c --- /dev/null +++ b/libs/potree/resources/lang/se/translation.json @@ -0,0 +1,98 @@ +{ + "tb": { + "navigation_opt": "Navigering", + "rendering_opt": "Utseende", + "tools_opt": "Verktyg", + "measurments_opt": "Mätning", + "clipping_opt": "Urklipp", + "annotations_opt": "Annoteringar", + "materials_opt": "Material", + "scene_opt": "Scen", + "classification_filter_opt": "Klassificeringsfilter", + "filters_opt": "Filter", + "parameters_opt": "Andra inställningar", + "about_opt": "Om" + }, + "tt": { + "angle_measurement": "Vinkelmätning", + "point_measurement": "Punktmätning", + "distance_measurement": "Distansmätning", + "height_measurement": "Höjdmätning", + "area_measurement": "Areamätning", + "volume_measurement": "Volymmätning", + "height_profile": "Höjdprofil", + "clip_volume": "Volymklippning", + "clip_polygon": "Polygonklippning", + "screen_clip_box": "Rita en yta för selektering. Ortogonalt kameraläge krävs!", + "clip_plane_x": "Klippyta på x axel", + "clip_plane_y": "Klippyta på y axel", + "clip_plane_z": "Klippyta på z axel", + "remove_all_measurement": "Ta bort alla mätningar", + "left_view_control": "Vy vänster", + "right_view_control": "Vy höger", + "front_view_control": "Vy fram", + "back_view_control": "Vy bak", + "top_view_control": "Vy ovan", + "bottom_view_control": "Vy under", + "focus_control": "Full utsträckning", + "orbit_control": "Kretsa kontroll", + "flight_control": "Flyga kontroll", + "heli_control": "Helikopter kontroll", + "earth_control": "Earth control", + "perspective_camera_control": "Kamera perspektiv", + "orthographic_camera_control": "Kamera ortogonal", + "navigation_cube_control": "Navigeringskub", + "remove_all_clipping_volumes": "Ta bort alla klippytor" + }, + "appearance": { + "nb_max_pts": "Punktbudget", + "point_size": "Punktstorlek", + "point_opacity": "Transparens", + "field_view": "Synfält", + "point_size_type": "Punkttyp", + "point_material": "Material", + "elevation_range": "Höjdintervall", + "point_quality": "Kvalitet", + "point_shape": "Form", + "edl_radius": "Radie", + "edl_strength": "Styrka", + "edl_enable": "Aktiverad", + "min_node_size": "Min nodstorlek", + "clip_mode": "Klippläge", + "move_speed": "Hastighet", + "skybox": "Skybox", + "bottom_lock": "Lås över marknivå", + "box": "Box", + "length_unit": "Enhet för längd", + "freeze": "Lås vy", + "language": "Språk" + }, + "measurements": { + "clip": "klipp", + "show": "visa volym" + }, + "annotations": { + "show3D": "visa i 3D", + "showMap": "visa på karta" + }, + "profile": { + "nb_points": "Antal Punkter", + "title": "Höjdprofil", + "save_las": "Spara LAS(3D)", + "save_ortho": "Spara CSV(2D)" + }, + "scene": { + "camera_position": "Kamera Position", + "camera_target": "Kamera Mål" + }, + "filters": { + "return_number": "Returnera Antal", + "number_of_returns": "Antal Returneringar", + "gps_min": "min", + "gps_max": "max", + "gps_time": "GPS Tid" + }, + "settings": { + "language": "Språk" + } +} diff --git a/libs/potree/resources/lang/zh/translation.json b/libs/potree/resources/lang/zh/translation.json new file mode 100644 index 0000000..1268713 --- /dev/null +++ b/libs/potree/resources/lang/zh/translation.json @@ -0,0 +1,106 @@ +{ + "tb": { + "navigation_opt": "导航", + "rendering_opt": "外观", + "tools_opt": "工具", + "measurments_opt": "量测分析", + "clipping_opt": "裁剪", + "annotations_opt": "标注", + "materials_opt": "材质", + "scene_opt": "场景", + "classification_filter_opt": "分类过滤器", + "filters_opt": "过滤器", + "parameters_opt": "其他选项", + "about_opt": "关于" + }, + "tt": { + "angle_measurement": "角度量测", + "point_measurement": "点量测", + "distance_measurement": "距离量测", + "height_measurement": "高度量测", + "circle_measurement": "环形量测", + "area_measurement": "面积量测", + "volume_measurement": "体积量测", + "height_profile": "高度剖面", + "annotation": "标注", + "clip_volume": "立体裁剪", + "clip_polygon": "多边形裁剪", + "screen_clip_box": "绘制矩形进行裁剪. 需要使用 orthographic 相机模式!", + "clip_plane_x": "在x轴平面裁剪", + "clip_plane_y": "在y轴平面裁剪", + "clip_plane_z": "在z轴平面裁剪", + "remove_all_measurement": "清除量测结果", + "left_view_control": "左视图", + "right_view_control": "右视图", + "front_view_control": "前视图", + "back_view_control": "后视图", + "top_view_control": "俯视图", + "bottom_view_control": "仰视图", + "focus_control": "复位", + "orbit_control": "轨道控制", + "flight_control": "飞行控制", + "heli_control": "直升机控制", + "earth_control": "地球控制", + "perspective_camera_control": "透视相机", + "orthographic_camera_control": "正交相机", + "navigation_cube_control": "导航立方体", + "remove_all_clipping_volumes": "移除裁剪对象", + "compass": "指北针", + "camera_animation": "相机动画" + }, + "appearance": { + "nb_max_pts": "显示点数", + "point_size": "点尺寸", + "min_point_size": "最小尺寸", + "point_opacity": "透明度", + "field_view": "视野范围", + "point_size_type": "尺寸", + "point_material": "材质", + "elevation_range": "高程范围", + "extra_range": "标量范围", + "point_quality": "质量", + "point_shape": "形状", + "edl_radius": "半径", + "edl_strength": "强度", + "edl_opacity": "透明度", + "edl_enable": "启用", + "min_node_size": "节点尺寸", + "clip_mode": "裁剪模式", + "move_speed": "速度", + "skybox": "天空", + "bottom_lock": "保持高于地面", + "box": "辅助网格", + "length_unit": "长度单位", + "freeze": "锁定", + "language": "语言", + "backface_culling": "剔除背面" + }, + "measurements": { + "clip": "裁剪", + "show": "显示体积" + }, + "annotations": { + "show3D": "以3D形式展示", + "showMap": "在地图展示" + }, + "profile": { + "nb_points": "点云数量", + "title": "高度剖面", + "save_las": "保存 LAS(3D)", + "save_ortho": "保存 CSV(2D)" + }, + "scene": { + "camera_position": "相机位置", + "camera_target": "相机目标" + }, + "filters": { + "return_number": "第几次回波", + "number_of_returns": "回波次数", + "gps_min": "最小值", + "gps_max": "最大值", + "gps_time": "GPS 时间" + }, + "settings": { + "language": "语言" + } +} \ No newline at end of file diff --git a/libs/potree/resources/logo.png b/libs/potree/resources/logo.png new file mode 100644 index 0000000..236deb5 Binary files /dev/null and b/libs/potree/resources/logo.png differ diff --git a/libs/potree/resources/logo.svg b/libs/potree/resources/logo.svg new file mode 100644 index 0000000..a3a73e3 --- /dev/null +++ b/libs/potree/resources/logo.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + + + + WebGL point cloud visualization + Potree.org + + + diff --git a/libs/potree/resources/logo_small.png b/libs/potree/resources/logo_small.png new file mode 100644 index 0000000..6d1868b Binary files /dev/null and b/libs/potree/resources/logo_small.png differ diff --git a/libs/potree/resources/models/stanford_bunny_reduced.mtl b/libs/potree/resources/models/stanford_bunny_reduced.mtl new file mode 100644 index 0000000..c5af617 --- /dev/null +++ b/libs/potree/resources/models/stanford_bunny_reduced.mtl @@ -0,0 +1,13 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl Material.001 +Ns 96.078431 +Ka 1.000000 1.000000 1.000000 +Kd 0.640000 0.352654 0.488547 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd C:\\dev\\workspaces\\potree\\develop\\resources\\textures\\brick_pavement.jpg diff --git a/libs/potree/resources/models/stanford_bunny_reduced.obj b/libs/potree/resources/models/stanford_bunny_reduced.obj new file mode 100644 index 0000000..2222e04 --- /dev/null +++ b/libs/potree/resources/models/stanford_bunny_reduced.obj @@ -0,0 +1,22384 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib stanford_bunny_reduced.mtl +o stanford_bunny_reduced +v -0.026015 0.080404 0.021808 +v -0.032178 0.141946 -0.017212 +v -0.080718 0.120681 0.015666 +v -0.078180 0.060750 -0.026141 +v -0.023129 0.080012 0.024065 +v 0.016493 0.090119 0.016845 +v -0.024836 0.124400 -0.018354 +v 0.045263 0.054182 0.005458 +v -0.071339 0.123541 -0.007453 +v -0.010076 0.093775 0.015159 +v -0.072013 0.122345 0.015820 +v -0.074228 0.130989 -0.029073 +v -0.075178 0.134347 -0.036959 +v -0.077120 0.132986 -0.038342 +v -0.015844 0.082427 0.024197 +v -0.076832 0.102678 0.036875 +v -0.017349 0.078202 0.026462 +v -0.036220 0.138487 -0.013773 +v -0.037684 0.139022 -0.013772 +v -0.091535 0.113026 0.008638 +v 0.008183 0.099347 -0.000081 +v -0.057447 0.009548 0.031515 +v -0.052683 0.011730 0.030505 +v -0.064144 0.129577 -0.034149 +v -0.030386 0.146611 -0.020306 +v -0.025782 0.083289 0.019083 +v 0.003016 0.010207 0.031317 +v -0.024994 0.148076 -0.023777 +v -0.059546 0.124187 -0.007094 +v -0.062224 0.122949 -0.009014 +v -0.034513 0.094390 0.002787 +v -0.042194 0.011280 0.027613 +v 0.007714 0.009971 0.030783 +v -0.031217 0.093039 -0.012478 +v -0.035327 0.061990 -0.038224 +v -0.057122 0.013203 0.029083 +v -0.039599 0.010934 0.026852 +v 0.000378 0.012080 0.031432 +v 0.004023 0.011975 0.031329 +v 0.007312 0.011940 0.030972 +v -0.040046 0.134464 -0.011134 +v -0.014898 0.093990 0.011910 +v -0.034602 0.094878 -0.010601 +v 0.046793 0.036377 0.010525 +v -0.040882 0.012406 0.027183 +v -0.038322 0.011785 0.026448 +v -0.092009 0.084593 0.017443 +v -0.026958 0.012376 0.036457 +v -0.023633 0.013255 0.038175 +v -0.020423 0.013665 0.037882 +v -0.012974 0.012804 0.035281 +v -0.008831 0.013636 0.033194 +v -0.005391 0.013506 0.032504 +v -0.000347 0.013471 0.032427 +v -0.047362 0.084593 0.017130 +v -0.007039 0.077493 0.028597 +v -0.090110 0.119127 0.003268 +v -0.054905 0.014991 0.026879 +v -0.052070 0.014319 0.027469 +v -0.049074 0.013867 0.027012 +v -0.023893 0.015842 0.035933 +v -0.019197 0.015665 0.035376 +v -0.015144 0.015351 0.033983 +v -0.008304 0.014945 0.033139 +v -0.005708 0.016123 0.035088 +v 0.002444 0.014455 0.034435 +v 0.006239 0.014074 0.034319 +v -0.049627 0.016776 0.023271 +v -0.025482 0.016552 0.034391 +v -0.017873 0.017116 0.032665 +v -0.014947 0.016316 0.033158 +v -0.012387 0.015217 0.033343 +v -0.009590 0.016984 0.035394 +v -0.001358 0.015646 0.035095 +v 0.008826 0.015611 0.034622 +v -0.072733 0.090172 0.039093 +v -0.008626 0.091393 0.019304 +v 0.038479 0.013679 0.016466 +v -0.000258 0.081198 0.027382 +v -0.051771 0.016843 0.023013 +v -0.047589 0.016468 0.024304 +v -0.044138 0.015536 0.025409 +v -0.041036 0.016892 0.025119 +v -0.035882 0.016897 0.024405 +v -0.023690 0.017656 0.032421 +v -0.021546 0.017935 0.031552 +v -0.015981 0.017651 0.033002 +v -0.012593 0.018476 0.035911 +v -0.000968 0.019161 0.039297 +v 0.001126 0.017400 0.037173 +v 0.004630 0.019772 0.038833 +v 0.033102 0.013941 0.015778 +v 0.039679 0.016322 0.017633 +v -0.047040 0.019024 0.023134 +v -0.039629 0.020535 0.024763 +v 0.030947 0.086415 0.005823 +v -0.025818 0.019032 0.027875 +v -0.023336 0.018861 0.028942 +v -0.020714 0.018924 0.030864 +v -0.018801 0.018843 0.032267 +v 0.007987 0.019344 0.037129 +v 0.035101 0.017992 0.016865 +v 0.041841 0.018690 0.018190 +v -0.005506 0.097190 0.010870 +v -0.015881 0.128084 -0.024441 +v -0.041123 0.137672 -0.013007 +v -0.063484 0.126716 -0.031102 +v -0.021843 0.020141 0.029724 +v -0.016423 0.021819 0.035836 +v -0.014229 0.020043 0.035335 +v -0.007408 0.019732 0.037607 +v 0.001576 0.021567 0.039047 +v -0.057993 0.121031 0.016651 +v -0.029770 0.022185 0.021725 +v -0.011009 0.023498 0.037815 +v -0.004453 0.021691 0.039402 +v -0.000824 0.021946 0.040486 +v -0.081302 0.092705 0.037405 +v -0.079377 0.095170 0.038703 +v 0.038609 0.076100 -0.011439 +v -0.064378 0.116329 0.023578 +v -0.028631 0.021472 0.021805 +v -0.003069 0.026557 0.039187 +v 0.007259 0.023757 0.038265 +v 0.003524 0.078491 0.027744 +v 0.044730 0.021740 0.018004 +v -0.043426 0.019982 0.024486 +v -0.036284 0.020563 0.023974 +v -0.032805 0.024396 0.023112 +v -0.077332 0.066048 -0.025371 +v -0.006306 0.024218 0.039313 +v 0.001847 0.025517 0.039657 +v 0.006765 0.026127 0.038919 +v -0.018239 0.091088 0.014621 +v -0.036439 0.083116 0.018087 +v 0.038575 0.024036 0.016681 +v -0.080113 0.122514 0.010129 +v -0.044121 0.026333 0.024910 +v -0.038938 0.026411 0.025850 +v -0.012598 0.028243 0.039554 +v -0.009419 0.028020 0.040946 +v 0.000104 0.026242 0.040068 +v 0.009382 0.026588 0.038262 +v 0.008738 0.090688 0.020263 +v 0.047164 0.024037 0.017403 +v -0.042061 0.026903 0.025732 +v -0.034673 0.027254 0.024800 +v -0.028469 0.026978 0.022111 +v -0.026237 0.025612 0.023968 +v -0.005677 0.028794 0.041281 +v -0.001214 0.028431 0.041391 +v 0.002946 0.028002 0.041241 +v 0.005327 0.028688 0.041184 +v 0.041166 0.024422 0.017197 +v 0.046327 0.026611 0.017286 +v -0.011537 0.097435 0.003912 +v 0.003443 0.031518 0.042224 +v -0.094070 0.086786 0.005882 +v -0.075896 0.109283 0.032761 +v 0.041424 0.029039 0.014859 +v 0.049952 0.028556 0.015935 +v 0.015864 0.081927 0.023081 +v -0.062119 0.116379 -0.017854 +v -0.032605 0.030283 0.024259 +v -0.028615 0.030421 0.022931 +v -0.015490 0.029917 0.038683 +v -0.007841 0.031292 0.041631 +v -0.003890 0.030417 0.041396 +v -0.086077 0.089878 -0.017240 +v -0.009319 0.089331 0.021216 +v 0.000784 0.086219 0.024548 +v 0.045665 0.028693 0.016411 +v -0.029162 0.093425 -0.005410 +v -0.051920 0.030301 0.017158 +v -0.041829 0.030178 0.026529 +v -0.036447 0.030854 0.026747 +v -0.027320 0.030068 0.023317 +v -0.013878 0.032931 0.039144 +v -0.013553 0.030350 0.039774 +v -0.001522 0.030980 0.042189 +v 0.009502 0.034754 0.040111 +v -0.092913 0.086539 -0.003437 +v -0.079644 0.090335 0.036342 +v -0.029531 0.060408 -0.039494 +v 0.024190 0.092277 0.004984 +v 0.003438 0.036804 0.041084 +v 0.005943 0.035637 0.040832 +v -0.020881 0.151348 -0.035620 +v -0.062773 0.035630 0.020312 +v -0.025632 0.093514 -0.009512 +v -0.065246 0.124664 -0.023660 +v -0.039544 0.033939 0.027217 +v -0.036517 0.035093 0.027039 +v -0.015813 0.032908 0.038967 +v -0.010211 0.036109 0.040518 +v -0.005873 0.036366 0.041590 +v 0.047838 0.034236 0.013112 +v 0.049131 0.031489 0.014925 +v -0.013081 0.035727 0.039345 +v -0.001719 0.036860 0.042142 +v 0.038378 0.072776 -0.016165 +v 0.007253 0.086492 0.022914 +v 0.043711 0.033239 0.012460 +v -0.078590 0.143190 -0.062477 +v -0.069048 0.130067 -0.026618 +v -0.041895 0.035691 0.026895 +v -0.034391 0.036818 0.026797 +v -0.028950 0.036053 0.024439 +v -0.027387 0.036864 0.025501 +v -0.017027 0.039211 0.040304 +v -0.015155 0.036177 0.040100 +v 0.001028 0.039731 0.042342 +v -0.036213 0.087986 0.015266 +v -0.021437 0.073004 -0.037219 +v -0.034998 0.136464 -0.029436 +v -0.009531 0.059285 -0.050730 +v -0.044848 0.038916 0.027447 +v -0.030929 0.035164 0.024584 +v -0.028125 0.040378 0.026229 +v 0.045169 0.038817 0.007925 +v -0.015440 0.041483 0.040982 +v -0.013634 0.039205 0.040103 +v -0.011636 0.040088 0.041413 +v -0.002897 0.040769 0.044127 +v 0.008376 0.043114 0.041795 +v -0.062041 0.142885 -0.071148 +v -0.005147 0.086868 0.023756 +v -0.085548 0.076878 -0.007887 +v -0.062535 0.116944 -0.022061 +v -0.032032 0.040991 0.026008 +v -0.026709 0.060074 -0.045354 +v -0.088682 0.070900 0.000429 +v 0.002881 0.060748 -0.047116 +v -0.051080 0.041810 0.027757 +v -0.048204 0.040153 0.026365 +v -0.043048 0.042202 0.028195 +v 0.005240 0.092835 0.018287 +v -0.012850 0.043492 0.042335 +v -0.007009 0.040134 0.043560 +v 0.002571 0.042254 0.041781 +v -0.016576 0.085375 0.021879 +v -0.062760 0.134787 -0.058597 +v -0.022739 0.152500 -0.026962 +v -0.058104 0.043435 0.028018 +v -0.046604 0.042533 0.027463 +v -0.039438 0.041185 0.027481 +v 0.000347 0.044365 0.043697 +v -0.002106 0.084806 0.025425 +v -0.019361 0.084074 0.022276 +v 0.026674 0.088516 0.011286 +v -0.035853 0.143915 -0.019765 +v -0.054403 0.042380 0.027203 +v -0.035933 0.040742 0.027548 +v -0.030914 0.045544 0.026444 +v -0.029977 0.041904 0.025799 +v -0.016210 0.045333 0.041799 +v -0.008727 0.043985 0.042839 +v -0.006232 0.047547 0.043097 +v -0.004349 0.043861 0.044252 +v 0.006161 0.042184 0.042185 +v -0.071298 0.107009 0.033050 +v -0.039823 0.141414 -0.018419 +v -0.062612 0.045204 0.027252 +v -0.041367 0.045579 0.028731 +v -0.021394 0.046855 0.040992 +v 0.002219 0.047593 0.042374 +v -0.032970 0.085251 0.017000 +v -0.024718 0.086877 0.016968 +v -0.014058 0.087329 0.021994 +v 0.006125 0.099100 0.004356 +v -0.051592 0.124827 -0.004366 +v -0.026827 0.148127 -0.022081 +v -0.079019 0.123412 0.004150 +v -0.057394 0.046762 0.029303 +v -0.048964 0.045503 0.029378 +v -0.045222 0.046008 0.027604 +v -0.037561 0.046630 0.028082 +v -0.035739 0.045292 0.027371 +v -0.017466 0.048533 0.043021 +v -0.006584 0.085167 0.024477 +v 0.005932 0.082896 0.025508 +v -0.081211 0.116510 0.022809 +v -0.074595 0.120195 0.020168 +v -0.060661 0.048726 0.028620 +v -0.055796 0.049510 0.030399 +v -0.052110 0.047596 0.029375 +v -0.048528 0.049870 0.029520 +v -0.039763 0.048221 0.028384 +v -0.031305 0.047900 0.026655 +v -0.086409 0.119847 0.010735 +v -0.010563 0.046804 0.043459 +v -0.008846 0.048765 0.043569 +v 0.004138 0.046713 0.041372 +v -0.027393 0.085105 0.017309 +v -0.009020 0.084349 0.024990 +v -0.077226 0.092336 0.037952 +v -0.037833 0.135439 -0.012601 +v -0.066893 0.128382 -0.026896 +v -0.027258 0.093013 0.002517 +v -0.054417 0.048950 0.030500 +v -0.051553 0.050603 0.029999 +v -0.046414 0.049454 0.028962 +v -0.043220 0.049511 0.027488 +v -0.039599 0.050812 0.029039 +v -0.036505 0.049452 0.028951 +v -0.033060 0.049399 0.027109 +v -0.030702 0.051363 0.027789 +v -0.014584 0.048481 0.042341 +v -0.006205 0.051528 0.042306 +v -0.002558 0.049195 0.042954 +v -0.022874 0.085776 0.019211 +v -0.046284 0.132276 -0.009418 +v -0.045718 0.088531 0.012860 +v 0.041047 0.068649 0.008919 +v 0.040153 0.074149 0.000759 +v 0.042368 0.068354 -0.013313 +v -0.036918 0.094703 0.003648 +v -0.006183 0.068969 0.029996 +v -0.046565 0.052312 0.030103 +v -0.017866 0.052716 0.043015 +v -0.016079 0.055138 0.042190 +v -0.008656 0.054628 0.042711 +v -0.003357 0.052403 0.042884 +v 0.001915 0.052917 0.042965 +v -0.018149 0.094118 0.008572 +v -0.003037 0.090313 0.021319 +v -0.039354 0.136762 -0.012132 +v -0.068990 0.127065 -0.021452 +v -0.070915 0.125037 -0.016269 +v -0.069864 0.134031 -0.034188 +v -0.063875 0.049421 0.029212 +v -0.058881 0.052041 0.029192 +v -0.049378 0.053383 0.030969 +v -0.041948 0.052647 0.027962 +v -0.034501 0.053269 0.028193 +v -0.012381 0.052885 0.042782 +v 0.004242 0.054446 0.042479 +v 0.030144 0.085737 0.011309 +v -0.042932 0.086058 0.016317 +v -0.025262 0.149765 -0.023608 +v -0.067077 0.051989 0.028971 +v -0.053727 0.053174 0.030899 +v -0.033992 0.054713 0.028122 +v -0.032162 0.053063 0.027411 +v -0.006345 0.097456 -0.013215 +v 0.004877 0.099545 -0.005586 +v 0.007996 0.054908 0.041475 +v 0.021973 0.054037 0.034659 +v -0.027659 0.061514 -0.040450 +v -0.028953 0.059578 -0.041611 +v 0.043275 0.064315 0.007375 +v -0.072505 0.135666 -0.036816 +v -0.033101 0.144819 -0.019255 +v -0.064942 0.056355 0.030362 +v -0.061295 0.056574 0.030972 +v -0.057629 0.053911 0.029723 +v -0.041282 0.055750 0.028007 +v -0.037809 0.054278 0.029435 +v 0.000710 0.057141 0.041694 +v -0.042988 0.132150 -0.009616 +v 0.018389 0.058693 0.033484 +v 0.040481 0.072186 -0.013728 +v -0.017726 0.087560 0.020011 +v -0.087507 0.084417 -0.012359 +v -0.055814 0.119773 0.014911 +v -0.058843 0.057699 0.030444 +v -0.047219 0.056040 0.030379 +v -0.043824 0.053752 0.028950 +v -0.044886 0.058344 0.028415 +v -0.042671 0.057396 0.027999 +v -0.038054 0.058087 0.028928 +v -0.030532 0.054692 0.029005 +v -0.013810 0.056942 0.042350 +v -0.011578 0.056184 0.041926 +v -0.008098 0.057926 0.042534 +v -0.069408 0.091301 0.038562 +v 0.043075 0.067721 0.000098 +v -0.054994 0.056698 0.030353 +v -0.049662 0.055466 0.031082 +v -0.035690 0.057108 0.028693 +v -0.011165 0.060326 0.041583 +v 0.000857 0.099392 0.001795 +v -0.040053 0.082615 0.019584 +v -0.010678 0.132988 -0.031134 +v -0.012126 0.097681 -0.000640 +v -0.055968 0.059892 0.030789 +v -0.053147 0.058151 0.030152 +v -0.051535 0.060054 0.029431 +v -0.048387 0.059510 0.029524 +v -0.034269 0.058790 0.029962 +v -0.029586 0.057197 0.029411 +v -0.015629 0.061503 0.040264 +v -0.004912 0.060700 0.041600 +v -0.079566 0.103854 0.035818 +v 0.022141 0.092938 0.008539 +v -0.075245 0.122724 -0.012459 +v -0.069723 0.058298 0.027492 +v -0.067639 0.061051 0.027901 +v -0.067076 0.057014 0.029528 +v -0.061937 0.061014 0.030494 +v -0.041196 0.061828 0.027571 +v -0.029031 0.059928 0.029529 +v -0.026999 0.061949 0.030436 +v -0.014403 0.060272 0.041300 +v 0.006156 0.058941 0.040072 +v 0.008266 0.062628 0.037262 +v -0.071052 0.086200 0.038791 +v -0.058010 0.115549 0.018189 +v 0.037205 0.077625 0.007965 +v 0.013341 0.090708 0.018601 +v -0.053425 0.062579 0.029207 +v -0.036848 0.061608 0.029512 +v -0.031998 0.062273 0.029968 +v -0.012777 0.096019 0.009045 +v -0.011420 0.062159 0.040627 +v -0.006813 0.063631 0.039787 +v 0.002583 0.062081 0.040109 +v 0.011675 0.060839 0.037698 +v -0.032736 0.143290 -0.017383 +v -0.061874 0.065566 0.028320 +v -0.057307 0.062312 0.030361 +v -0.025808 0.063587 0.029176 +v -0.009042 0.065816 0.037344 +v 0.005444 0.064418 0.037372 +v 0.017289 0.062737 0.033267 +v 0.020963 0.064483 0.032393 +v 0.036077 0.076570 -0.017753 +v -0.041576 0.096684 -0.003318 +v -0.008646 0.097994 -0.006712 +v -0.059226 0.065783 0.028386 +v -0.054612 0.064433 0.028817 +v -0.049066 0.063054 0.030279 +v -0.045740 0.062730 0.028813 +v -0.039756 0.064073 0.027696 +v -0.032831 0.064039 0.029952 +v -0.029113 0.064002 0.030425 +v 0.044863 0.036413 0.010153 +v -0.049306 0.109265 -0.004123 +v -0.003351 0.066095 0.037317 +v -0.000014 0.064569 0.038952 +v 0.008962 0.065582 0.034410 +v 0.013328 0.065407 0.033726 +v -0.075621 0.088995 0.038640 +v -0.031608 0.087339 0.014541 +v -0.077308 0.116330 0.025430 +v -0.077797 0.097112 0.038897 +v -0.067023 0.068954 0.026549 +v -0.052851 0.068206 0.027645 +v -0.046336 0.067315 0.027861 +v -0.037439 0.068118 0.027285 +v -0.035393 0.065850 0.028543 +v -0.022155 0.066333 0.030133 +v -0.010752 0.133472 -0.035047 +v 0.004987 0.065964 0.035673 +v 0.012658 0.067746 0.033397 +v -0.018227 0.095636 -0.008359 +v -0.072013 0.131096 -0.027653 +v -0.056050 0.032576 0.018945 +v 0.016599 0.096409 0.003368 +v -0.064533 0.065701 0.027702 +v -0.041134 0.065397 0.027357 +v -0.035038 0.070937 0.026142 +v -0.032019 0.066895 0.029429 +v -0.028835 0.067477 0.028663 +v -0.026283 0.067905 0.029544 +v -0.010683 0.068499 0.030364 +v -0.089826 0.084901 -0.010034 +v 0.006039 0.067362 0.032925 +v 0.011550 0.069911 0.032798 +v 0.014924 0.070210 0.032152 +v -0.045320 0.129851 -0.008204 +v -0.075472 0.122875 0.012888 +v -0.049771 0.067238 0.028955 +v -0.048145 0.070481 0.026599 +v -0.008966 0.069570 0.029418 +v -0.020888 0.095338 -0.001915 +v 0.002472 0.069424 0.029849 +v 0.007329 0.069912 0.031589 +v -0.040277 0.086878 0.016028 +v -0.003019 0.099093 -0.003652 +v -0.074450 0.069439 0.022729 +v -0.064900 0.069306 0.027363 +v -0.060926 0.069818 0.027574 +v -0.043574 0.068486 0.027640 +v -0.029221 0.071236 0.027319 +v -0.020268 0.070785 0.028758 +v -0.015698 0.071365 0.028446 +v 0.004874 0.070218 0.030011 +v 0.016848 0.071462 0.030663 +v 0.004956 0.088525 0.021420 +v 0.044097 0.059976 0.008072 +v -0.072895 0.113977 0.028745 +v -0.072039 0.072100 0.023167 +v -0.055781 0.068297 0.028579 +v -0.051503 0.071120 0.026378 +v -0.049986 0.073180 0.025128 +v -0.045100 0.071934 0.027002 +v -0.037322 0.073406 0.024060 +v -0.031536 0.070738 0.027377 +v -0.016978 0.070985 0.028986 +v 0.001132 0.071286 0.029178 +v -0.038611 0.090333 0.013099 +v 0.033722 0.082661 0.009015 +v -0.063348 0.120424 -0.022512 +v -0.077306 0.120013 0.019617 +v -0.042384 0.138522 -0.014876 +v -0.074290 0.073180 0.022267 +v -0.057638 0.072518 0.026797 +v -0.040310 0.070857 0.025783 +v -0.022469 0.070182 0.029358 +v -0.014302 0.074552 0.028514 +v -0.010003 0.071465 0.029007 +v -0.002769 0.074647 0.029412 +v 0.011555 0.098367 0.003374 +v -0.037719 0.142220 -0.024597 +v -0.068664 0.074604 0.023262 +v -0.061071 0.073197 0.025946 +v -0.043308 0.074008 0.026151 +v -0.032262 0.075355 0.024498 +v -0.025032 0.072109 0.028015 +v -0.018779 0.074795 0.027635 +v -0.007432 0.074697 0.029454 +v 0.007649 0.074068 0.027044 +v 0.011344 0.073885 0.028769 +v 0.018486 0.076396 0.025253 +v 0.023507 0.073026 0.025234 +v -0.074352 0.094684 0.038307 +v -0.056454 0.081716 0.021161 +v 0.018205 0.095163 0.005267 +v 0.018720 0.093539 0.009857 +v -0.070944 0.076894 0.022942 +v -0.062134 0.078469 0.022682 +v -0.052694 0.075243 0.025054 +v -0.038573 0.077202 0.022411 +v -0.028150 0.076141 0.024624 +v -0.010180 0.078342 0.027998 +v 0.004494 0.073801 0.027431 +v 0.008798 0.076614 0.025786 +v 0.010437 0.075493 0.026206 +v 0.020468 0.075494 0.025395 +v -0.054129 0.081332 0.020700 +v -0.067917 0.076879 0.023067 +v -0.054728 0.075423 0.025106 +v -0.051732 0.077852 0.023081 +v -0.047844 0.076048 0.024862 +v -0.042079 0.078777 0.022522 +v -0.000022 0.075911 0.028417 +v 0.013217 0.080521 0.024136 +v 0.019134 0.078402 0.024065 +v -0.047974 0.080378 0.021220 +v -0.086500 0.088572 -0.016638 +v -0.030759 0.082733 0.019283 +v -0.019605 0.079632 0.025224 +v -0.004900 0.079782 0.027578 +v -0.020263 0.089064 0.016865 +v 0.014402 0.076447 0.026167 +v -0.078001 0.125738 -0.034254 +v 0.041179 0.063475 -0.019684 +v -0.034415 0.141325 -0.015666 +v -0.031443 0.144059 -0.018177 +v -0.092548 0.084823 0.009485 +v -0.033959 0.139850 -0.015802 +v -0.061038 0.081079 0.021749 +v -0.058664 0.079880 0.021631 +v -0.036175 0.078331 0.021807 +v -0.060710 0.099896 -0.022137 +v -0.005637 0.073582 -0.037281 +v 0.027940 0.084322 0.015839 +v -0.029998 0.093329 -0.008709 +v -0.013203 0.004037 0.036155 +v -0.004920 0.006144 0.033656 +v 0.002920 0.006325 0.031493 +v 0.021359 0.008176 0.026867 +v -0.060906 0.115006 0.022528 +v -0.050080 0.003809 0.031545 +v 0.017171 0.006625 0.029007 +v -0.087528 0.106544 -0.006811 +v -0.049712 0.004906 0.031575 +v -0.022513 0.009098 0.039495 +v -0.000379 0.009263 0.032184 +v 0.013640 0.009960 0.030211 +v 0.042779 0.062709 0.010633 +v -0.053924 0.007339 0.032645 +v -0.044979 0.005821 0.030186 +v -0.041706 0.008027 0.028489 +v -0.017471 0.010277 0.037834 +v -0.012307 0.010687 0.035831 +v -0.006681 0.010512 0.034055 +v 0.016998 0.011484 0.029542 +v 0.018310 0.010454 0.029206 +v 0.023953 0.011537 0.025461 +v -0.050847 0.061563 -0.036288 +v -0.045294 0.011309 0.028783 +v 0.044395 0.065006 -0.007379 +v -0.024044 0.137670 -0.026395 +v -0.028055 0.140956 -0.023585 +v 0.013578 0.013785 0.029368 +v 0.016173 0.013938 0.028883 +v 0.026190 0.013256 0.023287 +v 0.028269 0.013286 0.020978 +v 0.030536 0.012295 0.016357 +v -0.069138 0.052663 -0.032038 +v -0.045052 0.062091 -0.036547 +v 0.021013 0.087852 0.018367 +v -0.066213 0.092248 0.035804 +v -0.048504 0.010925 0.029489 +v 0.022965 0.065808 0.031247 +v -0.030968 0.141188 -0.019107 +v 0.010216 0.014251 0.032200 +v 0.010856 0.012747 0.030123 +v 0.019782 0.012793 0.028059 +v 0.023807 0.015758 0.024778 +v 0.048757 0.015581 0.012010 +v 0.051069 0.015158 0.008824 +v -0.014083 0.140580 -0.033289 +v -0.054657 0.115485 0.012529 +v -0.060398 0.119578 0.020159 +v -0.085693 0.068990 -0.013421 +v -0.055175 0.109036 0.015068 +v -0.022377 0.150804 -0.026014 +v 0.031643 0.072677 0.020710 +v 0.021895 0.016446 0.025994 +v -0.017994 0.136285 -0.028611 +v 0.023912 0.082869 0.019628 +v -0.045664 0.123339 -0.006870 +v -0.032421 0.132039 -0.018904 +v -0.019767 0.128971 -0.019690 +v -0.013186 0.137328 -0.031656 +v 0.012124 0.016933 0.032981 +v 0.015353 0.015304 0.029459 +v 0.018408 0.015875 0.027717 +v -0.038253 0.127516 -0.012907 +v -0.012315 0.147379 -0.038202 +v -0.023228 0.149414 -0.025476 +v -0.044833 0.121174 -0.006407 +v 0.011104 0.020857 0.036890 +v 0.017412 0.016772 0.029101 +v 0.029637 0.017119 0.021727 +v 0.046131 0.017173 0.015791 +v -0.055687 0.096150 0.022903 +v 0.034478 0.062523 0.024193 +v -0.043857 0.124833 -0.008871 +v -0.066720 0.102943 0.029690 +v -0.037065 0.128760 -0.014154 +v 0.011020 0.081669 0.024140 +v 0.019966 0.020311 0.031454 +v 0.023359 0.020273 0.027668 +v 0.024737 0.018793 0.025036 +v 0.032303 0.017628 0.018792 +v 0.053615 0.021585 0.012362 +v 0.056723 0.020471 0.007362 +v 0.038240 0.063240 -0.023806 +v -0.065727 0.076482 0.023396 +v 0.015836 0.059596 0.036475 +v 0.024201 0.071090 0.027221 +v -0.041327 0.124271 -0.008352 +v 0.037614 0.066846 -0.024127 +v -0.013491 0.143690 -0.035246 +v 0.015465 0.020687 0.032970 +v 0.027189 0.018784 0.023717 +v 0.046263 0.019838 0.017165 +v 0.051144 0.020268 0.013550 +v 0.056089 0.022633 0.009788 +v -0.054126 0.016965 0.022384 +v 0.025559 0.085375 0.016445 +v -0.040826 0.118238 -0.010437 +v -0.039454 0.124157 -0.008832 +v -0.048310 0.120963 -0.004162 +v 0.025771 0.023117 0.027568 +v 0.034685 0.019658 0.017758 +v 0.030639 0.080906 0.016647 +v -0.056392 0.086595 0.023920 +v -0.075455 0.035030 0.000686 +v -0.034740 0.134091 -0.017935 +v 0.015713 0.024680 0.034543 +v 0.021354 0.024298 0.032646 +v 0.031968 0.024134 0.024170 +v 0.034639 0.022227 0.019578 +v 0.037816 0.024550 0.016957 +v -0.000867 0.071008 0.029551 +v 0.053520 0.024503 0.013897 +v -0.005812 0.070282 0.029179 +v -0.015075 0.131826 -0.025466 +v -0.046054 0.093135 0.010690 +v -0.044546 0.127487 -0.007980 +v -0.012780 0.131439 -0.027041 +v -0.062670 0.105512 0.021525 +v -0.060424 0.104713 0.020418 +v -0.051268 0.096792 0.018564 +v 0.011149 0.023893 0.038072 +v 0.019461 0.023795 0.033718 +v 0.024468 0.024590 0.029332 +v 0.028539 0.025603 0.026825 +v 0.033216 0.028049 0.024882 +v 0.037491 0.060675 0.021362 +v -0.062443 0.090088 0.030082 +v -0.030326 0.136904 -0.022007 +v -0.060753 0.106745 0.019621 +v 0.036350 0.027815 0.021311 +v 0.059069 0.027349 0.007140 +v -0.035282 0.132329 -0.017259 +v -0.068348 0.107362 0.030867 +v 0.007554 0.030114 0.040648 +v 0.018480 0.028714 0.034296 +v 0.027363 0.028113 0.029036 +v -0.048168 0.088725 0.014481 +v -0.034613 0.127252 -0.011828 +v -0.060985 0.136419 -0.073576 +v -0.052549 0.088778 0.020865 +v 0.011668 0.029213 0.037255 +v 0.013216 0.028224 0.036099 +v 0.018445 0.031299 0.034467 +v 0.020937 0.032477 0.032826 +v 0.021767 0.028320 0.033106 +v 0.030441 0.031199 0.026728 +v 0.035985 0.032895 0.023451 +v 0.039463 0.028858 0.016374 +v -0.061020 0.097053 0.025647 +v 0.056766 0.030495 0.011267 +v 0.009933 0.030907 0.039901 +v 0.024603 0.029548 0.030587 +v 0.039497 0.033456 0.018810 +v -0.064035 0.102349 0.024850 +v 0.052222 0.034532 0.012668 +v 0.053059 0.028763 0.014568 +v -0.068032 0.112837 0.028048 +v -0.070020 0.110895 0.030337 +v -0.014571 0.150944 -0.036773 +v 0.034164 0.032340 0.024960 +v 0.055178 0.033943 0.011650 +v -0.025174 0.132110 -0.021954 +v -0.041096 0.126587 -0.011278 +v -0.060034 0.112517 0.021852 +v 0.011716 0.032185 0.038419 +v 0.040692 0.031231 0.014981 +v -0.017636 0.130309 -0.022205 +v -0.089689 0.059207 -0.002180 +v -0.063602 0.113577 0.023760 +v -0.020410 0.147363 -0.030199 +v -0.016744 0.129038 -0.022324 +v -0.065895 0.086121 0.035922 +v 0.014030 0.033750 0.038260 +v 0.021289 0.035811 0.033686 +v 0.024533 0.036234 0.030163 +v 0.027671 0.031448 0.029185 +v 0.029536 0.068303 0.025620 +v -0.023348 0.130345 -0.020427 +v -0.067694 0.087347 0.037771 +v -0.017700 0.127528 -0.022264 +v 0.043174 0.034828 0.012083 +v -0.032661 0.136572 -0.019664 +v -0.062049 0.094641 0.028002 +v -0.029862 0.144670 -0.019243 +v -0.028076 0.146741 -0.020738 +v -0.048341 0.097618 0.013773 +v 0.011248 0.088544 0.020909 +v -0.061196 0.083231 0.023433 +v 0.011520 0.037857 0.039691 +v 0.015769 0.037339 0.037658 +v 0.035742 0.038223 0.023111 +v 0.038648 0.042051 0.019929 +v 0.040882 0.035228 0.015283 +v 0.043308 0.037655 0.011725 +v 0.025947 0.070137 0.026462 +v -0.053345 0.090629 0.022306 +v -0.026015 0.128714 -0.016304 +v -0.020852 0.152259 -0.027944 +v -0.016122 0.152936 -0.034907 +v -0.030843 0.125910 -0.012882 +v -0.063482 0.082314 0.025660 +v 0.022845 0.038510 0.033578 +v 0.027404 0.037987 0.028376 +v 0.032536 0.036702 0.025762 +v -0.003416 0.069047 0.029422 +v -0.014852 0.130180 -0.024499 +v -0.048138 0.093185 0.015389 +v 0.013748 0.041766 0.039482 +v 0.020005 0.037527 0.035060 +v 0.026239 0.041871 0.030396 +v 0.029704 0.038800 0.026965 +v -0.082241 0.045893 0.009798 +v 0.012694 0.083734 0.022541 +v 0.041059 0.072877 -0.009412 +v -0.027258 0.144785 -0.022318 +v 0.027542 0.072551 0.023651 +v 0.016831 0.040820 0.037124 +v 0.029545 0.041590 0.028673 +v -0.050388 0.099432 0.015972 +v -0.051421 0.084013 0.018788 +v 0.027083 0.065103 0.028274 +v -0.029884 0.130272 -0.018142 +v -0.057785 0.095851 0.024839 +v 0.015103 0.044075 0.039277 +v 0.018452 0.043654 0.037890 +v 0.021744 0.042312 0.035323 +v 0.025289 0.042969 0.032526 +v 0.031868 0.044123 0.028015 +v 0.032815 0.041757 0.025959 +v 0.036379 0.042211 0.023458 +v 0.043492 0.043291 0.012127 +v -0.072920 0.143535 -0.067337 +v -0.042717 0.122880 -0.007631 +v -0.049391 0.116106 -0.003380 +v -0.055718 0.106304 0.016632 +v -0.022850 0.125840 -0.018293 +v 0.023735 0.044781 0.034438 +v 0.026977 0.045358 0.031529 +v 0.040946 0.040487 0.016695 +v -0.012572 0.133399 -0.028427 +v -0.035876 0.136016 -0.014829 +v -0.047530 0.125697 -0.005832 +v -0.045830 0.114496 -0.008533 +v -0.015916 0.073036 -0.037054 +v 0.039433 0.073746 0.007576 +v -0.067828 0.099547 0.032559 +v 0.010984 0.043521 0.040383 +v 0.013753 0.046564 0.039807 +v 0.020723 0.048653 0.036392 +v 0.039451 0.049186 0.019784 +v 0.042536 0.045924 0.013675 +v -0.084424 0.078020 -0.010764 +v -0.028358 0.127439 -0.013965 +v 0.040445 0.074209 -0.004053 +v 0.036592 0.071066 0.015970 +v -0.042697 0.126082 -0.010020 +v -0.065503 0.095213 0.033065 +v -0.063974 0.086307 0.032569 +v 0.024660 0.048131 0.034269 +v 0.028193 0.046943 0.030683 +v 0.036116 0.045700 0.023743 +v 0.044284 0.047913 0.010695 +v -0.049463 0.088664 0.017714 +v -0.087250 0.104534 -0.010641 +v -0.025862 0.140068 -0.025748 +v -0.053300 0.103388 0.016191 +v -0.056346 0.091575 0.025297 +v 0.038439 0.068803 -0.022100 +v -0.055635 0.111929 0.016359 +v -0.059079 0.109297 0.018619 +v 0.008680 0.048657 0.040629 +v 0.033395 0.048212 0.027056 +v -0.029519 0.133846 -0.021490 +v -0.066151 0.082657 0.032692 +v -0.063566 0.080234 0.022965 +v -0.035979 0.130085 -0.015752 +v -0.053843 0.110827 0.012246 +v 0.017297 0.047339 0.038690 +v 0.032407 0.051141 0.027595 +v -0.040327 0.128620 -0.012404 +v 0.033144 0.066524 0.023019 +v -0.068516 0.083815 0.036743 +v -0.041464 0.131936 -0.010195 +v -0.068975 0.081821 0.035193 +v -0.035508 0.124613 -0.011033 +v -0.020356 0.132481 -0.024341 +v 0.024255 0.076332 0.023969 +v -0.020241 0.126047 -0.021563 +v 0.005149 0.051425 0.042342 +v 0.009393 0.052143 0.040966 +v 0.016932 0.053893 0.036140 +v 0.026707 0.049890 0.032006 +v 0.035730 0.051140 0.023716 +v 0.041137 0.049099 0.016914 +v 0.030487 0.061866 0.027759 +v 0.027673 0.076306 0.022722 +v -0.068088 0.077953 0.023652 +v -0.060961 0.090002 0.027706 +v -0.063581 0.110408 0.023757 +v -0.018378 0.148468 -0.032363 +v -0.029871 0.121958 -0.018517 +v 0.030026 0.077762 0.019502 +v 0.012788 0.050789 0.038620 +v 0.038521 0.073169 0.011929 +v 0.024653 0.052597 0.033256 +v 0.029390 0.051820 0.028835 +v 0.043175 0.053133 0.013010 +v -0.062351 0.085953 0.027972 +v 0.027912 0.061203 0.029763 +v -0.050006 0.092118 0.017845 +v -0.062907 0.107820 0.022517 +v -0.016555 0.144200 -0.033074 +v -0.035560 0.125897 -0.010630 +v 0.033070 0.056242 0.027822 +v 0.040882 0.053394 0.017365 +v 0.035337 0.068076 0.019638 +v -0.070012 0.094553 0.037519 +v -0.023272 0.135424 -0.025605 +v -0.030945 0.128903 -0.016308 +v -0.039329 0.132539 -0.011855 +v 0.018981 0.084420 0.021372 +v -0.073052 0.097234 0.037422 +v -0.057238 0.101359 0.021421 +v -0.020159 0.127485 -0.019483 +v -0.065142 0.080088 0.024213 +v 0.026185 0.054290 0.032495 +v 0.035522 0.057497 0.024773 +v 0.038507 0.056267 0.020310 +v -0.023238 0.127508 -0.016799 +v 0.021456 0.072515 0.027787 +v -0.069956 0.103506 0.033569 +v -0.042217 0.120837 -0.008168 +v -0.058067 0.118386 0.019005 +v -0.075288 0.100881 0.037478 +v -0.064547 0.078715 0.022895 +v -0.038272 0.130899 -0.014447 +v -0.065079 0.100197 0.027768 +v -0.061126 0.093021 0.027702 +v 0.042052 0.053266 -0.022685 +v -0.064999 0.105472 0.026330 +v -0.057056 0.105416 0.017942 +v 0.009550 0.057264 0.040087 +v 0.012866 0.055890 0.039233 +v 0.014614 0.055445 0.037531 +v -0.056353 0.083088 0.021613 +v 0.022460 0.059036 0.033531 +v 0.028657 0.057626 0.029377 +v -0.023496 0.144834 -0.027466 +v -0.010817 0.134719 -0.031070 +v -0.059616 0.117188 0.021104 +v -0.065625 0.088636 0.036213 +v -0.062409 0.101433 0.023968 +v 0.045613 0.059891 -0.007367 +v -0.052386 0.092276 0.020955 +v -0.045885 0.116113 -0.006963 +v 0.040667 0.057443 0.016301 +v 0.035006 0.078588 0.012563 +v -0.035285 0.121173 -0.013158 +v -0.066541 0.109462 0.028264 +v -0.020188 0.141754 -0.029993 +v 0.028075 0.081276 0.018719 +v -0.093338 0.089373 0.024838 +v -0.027113 0.125654 -0.015171 +v -0.038500 0.125700 -0.009748 +v -0.059956 0.109926 0.020769 +v -0.063896 0.092800 0.032180 +v -0.048680 0.086676 0.016388 +v -0.047950 0.086723 0.015454 +v 0.012333 0.058979 0.038583 +v -0.010944 0.136885 -0.032733 +v 0.025840 0.062393 0.030984 +v -0.070586 0.098279 0.035796 +v -0.055533 0.115174 0.015175 +v -0.046043 0.089649 0.012108 +v -0.060582 0.086326 0.025914 +v -0.052896 0.084845 0.019410 +v -0.066171 0.113128 0.026295 +v 0.020218 0.068527 0.031194 +v 0.021610 0.079920 0.022403 +v 0.038976 0.062251 0.018175 +v -0.061558 0.128111 -0.048377 +v 0.018170 0.002935 -0.025075 +v 0.017798 0.002775 -0.028054 +v 0.021743 0.005723 0.023806 +v 0.042635 0.007784 -0.007409 +v 0.037876 0.006751 -0.012708 +v 0.021440 0.004700 -0.016940 +v 0.021244 0.005064 -0.018569 +v 0.016742 0.003297 -0.030944 +v 0.042853 0.008920 -0.011694 +v 0.039254 0.009116 -0.015848 +v 0.019636 0.005245 -0.024363 +v 0.018683 0.005031 -0.029322 +v 0.015174 0.004395 -0.034775 +v -0.051269 0.107585 -0.013100 +v -0.010414 0.147671 -0.041742 +v -0.064348 0.087647 -0.023374 +v -0.039344 0.060883 -0.037896 +v 0.049049 0.011467 -0.007140 +v 0.022504 0.007931 -0.021587 +v 0.022528 0.010604 -0.025713 +v 0.020895 0.008736 -0.029246 +v 0.017618 0.006608 -0.033816 +v 0.006723 0.089679 -0.027554 +v 0.024165 0.008783 0.023797 +v 0.024934 0.007975 0.020281 +v -0.062226 0.126210 -0.034147 +v -0.009919 0.146931 -0.044095 +v 0.046990 0.011966 -0.012703 +v 0.023360 0.009397 -0.021864 +v 0.020688 0.010528 -0.034208 +v 0.019441 0.011382 -0.036487 +v -0.091124 0.088493 -0.007749 +v -0.009331 0.135930 -0.034358 +v -0.080806 0.075838 -0.018048 +v -0.061237 0.142695 -0.075625 +v -0.034543 0.120085 -0.014894 +v 0.051587 0.012930 -0.000741 +v 0.048671 0.013898 -0.013905 +v 0.025668 0.011946 -0.023039 +v 0.022363 0.011021 -0.028161 +v -0.009098 0.136845 -0.038598 +v 0.040493 0.054244 -0.025840 +v -0.018355 0.004442 0.038149 +v 0.055334 0.017139 0.005171 +v 0.055903 0.017222 0.002879 +v 0.051501 0.013063 -0.004130 +v 0.053898 0.016634 -0.010336 +v 0.049286 0.012765 -0.011364 +v 0.048699 0.016772 -0.017272 +v 0.025909 0.013165 -0.026574 +v 0.022738 0.012063 -0.029282 +v -0.062485 0.130619 -0.064650 +v -0.089975 0.100500 0.019012 +v -0.013568 0.129891 -0.026740 +v 0.056271 0.017217 -0.001979 +v 0.055426 0.017228 -0.007656 +v 0.029061 0.014847 -0.022313 +v 0.027661 0.014643 -0.026855 +v 0.026163 0.014629 -0.030786 +v 0.022383 0.012853 -0.031597 +v -0.061627 0.128074 -0.043029 +v -0.008756 0.138238 -0.038107 +v 0.056001 0.019505 -0.010587 +v -0.049944 0.112711 -0.003765 +v -0.042418 0.115580 -0.012798 +v -0.061929 0.122710 -0.044806 +v 0.057940 0.020446 0.003689 +v 0.053319 0.017866 -0.013350 +v -0.038193 0.001564 -0.044196 +v 0.027415 0.016014 -0.031327 +v 0.057186 0.019380 -0.006812 +v 0.029709 0.018187 -0.028879 +v 0.026827 0.019212 -0.035166 +v -0.006582 0.067879 -0.038695 +v -0.049048 0.103689 -0.010362 +v -0.060791 0.138894 -0.075525 +v -0.008652 0.139904 -0.041152 +v -0.029920 0.073718 -0.036444 +v -0.062334 0.116840 -0.026563 +v 0.039435 0.067679 0.013622 +v 0.058490 0.020923 -0.002672 +v 0.031871 0.019631 -0.024553 +v 0.028699 0.019467 -0.032819 +v -0.053708 0.114100 0.009373 +v -0.061416 0.125148 -0.040873 +v -0.062334 0.119758 -0.026690 +v 0.059045 0.026511 -0.009269 +v 0.052567 0.021985 -0.017091 +v 0.045502 0.058259 -0.010454 +v -0.062312 0.128596 -0.038466 +v -0.094183 0.088166 0.000596 +v -0.063960 0.121930 -0.052608 +v 0.058729 0.024289 0.006365 +v 0.060771 0.027273 -0.003568 +v 0.054618 0.023535 -0.015199 +v 0.031367 0.022534 -0.028880 +v 0.028583 0.022053 -0.033560 +v -0.018544 0.061442 -0.048945 +v -0.065601 0.034226 0.016716 +v 0.041008 0.059393 -0.023595 +v -0.076184 0.117637 -0.024959 +v -0.081078 0.065281 -0.021684 +v 0.044551 0.062497 0.000962 +v 0.060304 0.026625 0.001841 +v 0.054751 0.027704 -0.016394 +v -0.091303 0.085464 0.013416 +v 0.036146 0.022433 -0.021495 +v 0.035324 0.025268 -0.025538 +v 0.029919 0.025464 -0.031813 +v -0.029086 0.003112 0.037223 +v 0.057981 0.027766 -0.012062 +v -0.090821 0.094177 -0.008600 +v 0.037927 0.024596 -0.020281 +v -0.061559 0.137319 -0.069783 +v -0.062099 0.123075 -0.030604 +v -0.062550 0.129965 -0.060408 +v 0.060082 0.029852 -0.007990 +v 0.039387 0.027932 -0.019902 +v 0.037735 0.028741 -0.024887 +v 0.034433 0.026024 -0.027663 +v 0.029631 0.028587 -0.034044 +v 0.025023 0.026027 -0.038610 +v -0.061594 0.125848 -0.037565 +v -0.065740 0.029647 0.007377 +v -0.052411 0.116354 0.005261 +v 0.058594 0.032801 0.008187 +v 0.061038 0.032084 -0.003056 +v -0.086342 0.075485 -0.003650 +v 0.041101 0.031420 -0.018660 +v 0.035278 0.031128 -0.028282 +v 0.032448 0.028597 -0.031828 +v 0.026745 0.028843 -0.037306 +v -0.048305 0.104481 -0.004741 +v -0.052236 0.112573 0.002870 +v 0.060019 0.033823 0.004933 +v 0.060839 0.032802 0.001478 +v 0.029682 0.030226 -0.034272 +v -0.093250 0.095309 -0.001651 +v -0.081412 0.114069 -0.014749 +v -0.062387 0.135069 -0.062380 +v 0.044459 0.058564 -0.015826 +v -0.040234 0.117398 -0.011717 +v 0.044778 0.055118 -0.015953 +v 0.060009 0.036471 -0.003924 +v -0.086563 0.076818 -0.001774 +v 0.037002 0.033855 -0.027662 +v 0.032216 0.032948 -0.033055 +v -0.073057 0.122432 -0.046750 +v -0.071445 0.148552 -0.070933 +v -0.062792 0.138406 -0.064904 +v -0.061621 0.122623 -0.037695 +v 0.058297 0.034664 -0.010413 +v 0.039637 0.031886 -0.022841 +v 0.038793 0.036356 -0.026574 +v 0.034652 0.034584 -0.030484 +v 0.028791 0.033984 -0.034587 +v 0.026471 0.033018 -0.036797 +v -0.092440 0.099101 -0.001696 +v -0.071978 0.115444 -0.043445 +v -0.022427 0.087795 -0.025727 +v -0.008623 0.142573 -0.041917 +v -0.062716 0.132018 -0.047790 +v 0.059802 0.037633 0.000127 +v 0.057887 0.037472 -0.008639 +v 0.042039 0.034888 -0.017926 +v -0.062319 0.114350 -0.021342 +v -0.044018 0.115103 -0.010018 +v -0.061729 0.122320 -0.033615 +v -0.052670 0.105550 0.012494 +v -0.050582 0.104366 -0.013421 +v -0.053159 0.113247 0.007943 +v -0.084201 0.076858 0.010296 +v 0.041832 0.038185 -0.021334 +v 0.036726 0.036729 -0.028638 +v 0.028381 0.037823 -0.037110 +v -0.062181 0.131013 -0.056828 +v -0.047911 0.103968 -0.000771 +v -0.089039 0.105924 0.013817 +v 0.030522 0.036834 -0.034055 +v -0.031110 0.091337 -0.018100 +v -0.089470 0.087692 -0.011471 +v -0.030603 0.122289 -0.016091 +v -0.049484 0.105778 0.003344 +v -0.009590 0.134527 -0.033880 +v -0.076808 0.115963 -0.022032 +v -0.076158 0.081302 -0.019840 +v -0.089945 0.103516 0.008555 +v -0.086889 0.073818 0.003310 +v 0.034031 0.037777 -0.031364 +v 0.032673 0.039448 -0.032669 +v -0.092535 0.089514 0.014354 +v -0.049693 0.107609 -0.009317 +v 0.043441 0.057071 -0.018845 +v -0.088184 0.089248 -0.014316 +v -0.026029 0.057526 -0.049143 +v 0.043681 0.040506 -0.016124 +v -0.092478 0.091083 -0.006106 +v -0.062519 0.127381 -0.055435 +v 0.045391 0.058930 -0.001794 +v -0.083464 0.079626 0.029846 +v -0.086809 0.081328 -0.010697 +v -0.086556 0.068853 -0.010127 +v -0.062002 0.134547 -0.066668 +v -0.090827 0.106146 0.003450 +v 0.046401 0.043972 -0.006374 +v 0.042310 0.043353 -0.020481 +v 0.033651 0.043393 -0.031272 +v -0.090944 0.080641 0.000105 +v -0.092629 0.091852 0.018571 +v -0.012318 0.131084 -0.030455 +v -0.051361 0.116747 0.000225 +v 0.043714 0.067036 -0.004977 +v -0.037361 0.118285 -0.014198 +v -0.058991 0.003463 0.031335 +v -0.052430 0.109679 0.006546 +v 0.045339 0.043002 -0.012731 +v 0.041772 0.045614 -0.021192 +v 0.038392 0.044074 -0.025721 +v 0.036152 0.042438 -0.027839 +v -0.086695 0.075528 -0.000104 +v 0.043907 0.064129 -0.011921 +v -0.053654 0.118592 0.010544 +v 0.041979 0.058140 -0.022764 +v -0.073736 0.112317 -0.024581 +v -0.048376 0.112935 -0.006725 +v 0.046557 0.043852 -0.001688 +v -0.084164 0.064978 -0.017991 +v -0.086435 0.076554 0.003380 +v -0.084111 0.075540 0.010301 +v -0.062230 0.119292 -0.030804 +v -0.048023 0.112430 -0.009128 +v -0.071960 0.130288 -0.056553 +v 0.046026 0.046855 0.005518 +v 0.036723 0.045023 -0.027779 +v 0.033592 0.047280 -0.032704 +v -0.084106 0.068175 -0.017922 +v -0.084482 0.070203 -0.015139 +v -0.089767 0.105512 0.018524 +v -0.009652 0.140024 -0.036864 +v -0.079452 0.062748 -0.024675 +v -0.050984 0.110769 0.002039 +v -0.072770 0.031928 0.002654 +v -0.049405 0.110681 -0.006867 +v 0.046159 0.048633 -0.009344 +v 0.044756 0.046313 -0.015873 +v 0.039033 0.046324 -0.025482 +v -0.069126 0.108961 -0.023091 +v 0.044722 0.053291 0.008924 +v 0.046307 0.050040 -0.004671 +v 0.045390 0.049720 -0.012598 +v 0.043353 0.049047 -0.018402 +v 0.040042 0.050744 -0.026450 +v 0.037929 0.049956 -0.029529 +v -0.089451 0.062913 0.001839 +v -0.087645 0.093653 -0.015131 +v -0.083408 0.110708 -0.011682 +v -0.049212 0.110842 -0.010388 +v -0.050044 0.109128 -0.010857 +v -0.063382 0.124151 -0.027450 +v 0.046138 0.048289 0.001095 +v 0.045837 0.053741 -0.008344 +v 0.044629 0.051632 -0.013488 +v 0.041245 0.048082 -0.022376 +v -0.086906 0.078418 -0.005851 +v -0.093980 0.094640 0.002264 +v -0.062168 0.131561 -0.053751 +v -0.063868 0.135155 -0.052666 +v -0.062428 0.123764 -0.049954 +v -0.063857 0.147456 -0.073468 +v -0.037341 0.095846 -0.009104 +v -0.064970 0.147911 -0.074569 +v -0.062784 0.146167 -0.073665 +v -0.044708 0.096748 -0.012481 +v -0.064066 0.145088 -0.069428 +v -0.067601 0.148630 -0.069704 +v -0.070039 0.149247 -0.070830 +v -0.066053 0.122586 -0.010880 +v -0.032519 0.093075 0.005183 +v -0.017555 0.095837 0.003464 +v -0.067589 0.145874 -0.065858 +v -0.073480 0.148627 -0.068599 +v -0.070905 0.149006 -0.067866 +v -0.042869 0.097028 -0.006622 +v -0.026500 0.090690 0.008720 +v -0.068173 0.124126 0.009287 +v -0.045205 0.135918 -0.012465 +v -0.036920 0.140936 -0.015417 +v -0.046580 0.098636 0.008540 +v -0.085838 0.121087 -0.000812 +v -0.065851 0.122596 -0.018977 +v -0.048593 0.128609 -0.007038 +v -0.066794 0.141455 -0.060577 +v -0.027392 0.088017 0.013822 +v -0.066679 0.131806 -0.032949 +v -0.074042 0.123739 0.009233 +v -0.047253 0.102362 -0.003186 +v -0.070616 0.123894 0.010182 +v -0.030340 0.093250 0.002593 +v 0.050004 0.038136 0.009502 +v -0.012329 0.151703 -0.041061 +v -0.008530 0.067607 0.034339 +v -0.065047 0.141347 -0.063441 +v -0.064793 0.120676 0.019952 +v -0.057873 0.123339 0.000473 +v 0.013210 0.093168 0.016139 +v -0.065410 0.123579 -0.003925 +v -0.045062 0.099078 -0.003983 +v -0.070847 0.145422 -0.062361 +v -0.074185 0.145626 -0.060940 +v -0.073818 0.147852 -0.064745 +v -0.067586 0.122820 -0.013530 +v -0.055826 0.121151 0.012772 +v -0.052391 0.119393 0.000787 +v -0.058172 0.125307 -0.007720 +v 0.015525 0.095358 0.010414 +v -0.014127 0.153061 -0.039811 +v -0.064580 0.137784 -0.058013 +v -0.061118 0.120890 0.018690 +v -0.084284 0.078541 0.012190 +v -0.087349 0.061819 -0.009207 +v -0.043803 0.097581 -0.002130 +v -0.066781 0.131170 -0.072249 +v -0.038936 0.092883 -0.021974 +v 0.009810 0.097880 0.008149 +v -0.071394 0.143424 -0.058372 +v -0.064970 0.122605 0.015019 +v -0.092954 0.086365 0.019699 +v -0.080851 0.111516 -0.015719 +v -0.069305 0.122090 0.016781 +v -0.075599 0.120275 -0.027875 +v -0.087587 0.064080 -0.011235 +v -0.044188 0.094091 0.005257 +v -0.015280 0.154423 -0.038509 +v -0.084033 0.120472 -0.006447 +v -0.065428 0.137562 -0.054366 +v -0.091047 0.081501 -0.003653 +v -0.070394 0.123730 -0.012472 +v -0.091180 0.116331 0.000042 +v -0.087999 0.065823 -0.009353 +v -0.049014 0.094052 -0.021114 +v -0.016684 0.155189 -0.035776 +v -0.068188 0.139514 -0.052978 +v -0.077521 0.142578 -0.057525 +v -0.012765 0.066042 0.035334 +v -0.075404 0.147039 -0.067304 +v -0.086713 0.120949 0.004663 +v -0.045464 0.093912 0.008929 +v -0.050167 0.104713 0.007296 +v -0.024381 0.090156 0.011842 +v 0.000479 0.091801 0.019275 +v -0.043799 0.095166 0.004295 +v -0.012330 0.065212 0.036741 +v -0.018112 0.154061 -0.032168 +v -0.035636 0.095637 -0.005508 +v -0.072350 0.141434 -0.053046 +v -0.084862 0.059583 -0.018634 +v -0.076638 0.061773 -0.027719 +v -0.089001 0.064113 -0.006400 +v -0.092572 0.094327 0.015000 +v -0.031395 0.089880 0.010426 +v -0.088472 0.119392 -0.001964 +v -0.043384 0.092295 0.007809 +v 0.000967 0.066546 0.036345 +v -0.034955 0.090778 0.011379 +v -0.054429 0.121508 0.004722 +v -0.074851 0.142673 -0.055397 +v 0.058168 0.039143 -0.004387 +v 0.055127 0.040812 -0.004779 +v -0.094758 0.091786 0.004945 +v -0.043933 0.134788 -0.010822 +v -0.001251 0.098276 0.007484 +v 0.032798 0.083899 -0.013427 +v -0.073336 0.113731 -0.029131 +v -0.089783 0.066281 0.001307 +v -0.094338 0.089594 0.009533 +v -0.092055 0.083561 0.022431 +v -0.088949 0.095808 -0.010875 +v -0.042860 0.090309 0.011120 +v -0.081797 0.119107 0.017944 +v -0.067087 0.117953 0.023731 +v -0.058346 0.123770 -0.003744 +v -0.055950 0.123781 -0.003166 +v -0.076987 0.079141 -0.019335 +v -0.028613 0.090059 0.008497 +v -0.068186 0.124397 -0.017972 +v -0.021731 0.153036 -0.032682 +v -0.067079 0.124130 0.001527 +v -0.069868 0.139206 -0.048474 +v -0.065270 0.124039 0.008538 +v -0.071900 0.127809 -0.021547 +v -0.073578 0.125376 -0.018276 +v 0.055184 0.041094 0.001313 +v 0.053034 0.040811 -0.006037 +v 0.047795 0.041352 -0.001680 +v -0.029686 0.086513 0.015383 +v -0.004212 0.095105 0.015274 +v -0.086068 0.063925 -0.014378 +v -0.088457 0.060703 -0.006844 +v -0.089494 0.061152 0.006081 +v -0.080493 0.079274 -0.015660 +v -0.068470 0.118946 0.022877 +v -0.030573 0.093811 -0.001371 +v -0.046428 0.100391 0.004890 +v 0.003835 0.067836 0.032145 +v -0.074641 0.140375 -0.050646 +v -0.032986 0.094742 -0.001324 +v -0.049595 0.102129 0.011288 +v -0.054552 0.122456 -0.000910 +v 0.038563 0.077199 -0.005640 +v 0.035462 0.081019 -0.011008 +v 0.023201 0.091928 -0.012244 +v 0.020025 0.093606 -0.013500 +v -0.075348 0.116406 -0.030101 +v -0.092592 0.085330 0.026115 +v -0.061187 0.123791 0.001706 +v -0.045075 0.097621 0.005506 +v -0.020744 0.153607 -0.028889 +v -0.021549 0.153737 -0.029627 +v -0.023856 0.152143 -0.029089 +v -0.065841 0.136327 -0.046884 +v -0.076665 0.138525 -0.048457 +v -0.020656 0.091794 0.010600 +v -0.074792 0.124041 -0.000218 +v 0.057257 0.039962 0.001657 +v 0.007949 0.096907 0.012050 +v -0.038782 0.095905 -0.001105 +v -0.090644 0.102088 -0.003646 +v -0.090801 0.107076 0.006106 +v -0.092276 0.085145 -0.005529 +v -0.074218 0.124289 -0.015822 +v -0.069513 0.137012 -0.041378 +v -0.073287 0.138944 -0.045551 +v -0.072409 0.124165 0.005438 +v -0.000178 0.069235 0.030020 +v 0.052408 0.041561 0.000301 +v -0.013773 0.092047 0.016555 +v -0.056259 0.122186 0.009588 +v -0.084150 0.074457 -0.013227 +v 0.015046 0.087189 0.020633 +v -0.079465 0.122462 -0.005260 +v -0.045181 0.097716 -0.009125 +v 0.019898 0.089658 0.016931 +v -0.025787 0.150765 -0.027181 +v -0.059419 0.122440 0.013041 +v -0.064977 0.133396 -0.040728 +v 0.017977 0.092481 0.012954 +v -0.069614 0.120482 0.020374 +v 0.013606 0.094739 0.013578 +v 0.058085 0.037467 0.005745 +v 0.048566 0.041309 -0.000686 +v -0.038108 0.093192 0.007841 +v -0.076611 0.122703 -0.008682 +v -0.072140 0.123448 -0.010718 +v -0.061698 0.123845 0.007044 +v -0.082943 0.079701 -0.013579 +v -0.000868 0.096967 0.012039 +v -0.024639 0.151014 -0.025029 +v -0.057536 0.123139 0.004741 +v 0.003072 0.098384 0.008490 +v 0.054779 0.040206 0.005360 +v 0.046496 0.042936 0.001491 +v -0.001334 0.067805 0.034437 +v 0.013462 0.097491 -0.009495 +v -0.086584 0.072335 -0.008248 +v -0.087226 0.078193 0.003357 +v -0.030384 0.147178 -0.027019 +v -0.081735 0.122745 0.001495 +v -0.026093 0.150744 -0.025602 +v -0.072339 0.137631 -0.041359 +v -0.062317 0.123263 0.011375 +v -0.005231 0.098467 0.004531 +v 0.047143 0.041427 0.001669 +v -0.005154 0.092078 0.019070 +v -0.056903 0.124895 -0.005513 +v -0.041812 0.094720 0.003544 +v 0.027316 0.089835 -0.008223 +v 0.019508 0.094783 -0.008781 +v -0.074539 0.145920 -0.068091 +v -0.072532 0.146954 -0.070055 +v -0.080465 0.070399 -0.021152 +v -0.060270 0.123676 -0.004384 +v 0.022150 0.089832 0.015127 +v -0.029861 0.148025 -0.024479 +v -0.075409 0.136660 -0.042092 +v -0.054345 0.120316 0.010439 +v 0.053126 0.039042 0.008106 +v 0.047426 0.039869 0.004050 +v 0.046204 0.041718 0.004173 +v -0.078758 0.120786 -0.012358 +v -0.053305 0.124121 -0.003652 +v -0.010121 0.095742 0.011634 +v -0.076041 0.122515 -0.014480 +v -0.043417 0.096249 0.001213 +v 0.036685 0.079554 0.002745 +v 0.033143 0.084590 -0.005106 +v 0.031002 0.086813 -0.007028 +v 0.023593 0.092964 -0.004159 +v -0.075106 0.117827 -0.039632 +v -0.059992 0.124023 -0.009283 +v -0.008510 0.097309 0.008674 +v -0.027366 0.093616 -0.002633 +v -0.051016 0.119475 -0.002161 +v -0.067326 0.134102 -0.037510 +v 0.054888 0.036652 0.010178 +v 0.051216 0.040692 0.005114 +v -0.024103 0.093230 0.003940 +v 0.016898 0.096503 -0.002943 +v 0.001081 0.099012 -0.009923 +v -0.088444 0.069547 0.005298 +v -0.088601 0.069761 -0.004728 +v -0.036167 0.144125 -0.022866 +v -0.028895 0.148277 -0.022177 +v -0.032354 0.146292 -0.022266 +v 0.046526 0.038155 0.007657 +v 0.045430 0.040905 0.006608 +v -0.073844 0.116664 0.025743 +v 0.001756 0.093753 0.017143 +v 0.034108 0.083020 0.003862 +v 0.028015 0.089606 -0.000343 +v 0.019575 0.095181 0.000975 +v 0.013704 0.097863 -0.004561 +v 0.009915 0.098413 -0.010256 +v -0.071459 0.076329 -0.025363 +v -0.071509 0.002743 -0.005656 +v -0.066851 0.003495 0.000233 +v -0.065600 0.004560 0.012222 +v -0.066410 0.004270 0.014501 +v -0.066707 0.005867 0.020005 +v -0.063741 0.005885 0.027507 +v -0.038782 0.004818 0.028579 +v -0.072231 0.004985 -0.006235 +v -0.067753 0.005403 -0.000844 +v -0.064679 0.005667 0.010164 +v -0.065908 0.006197 0.013848 +v -0.066731 0.005587 0.016435 +v -0.066421 0.004606 0.023193 +v -0.060305 0.005233 0.031039 +v -0.057719 0.006729 0.032281 +v -0.084812 0.045744 0.002062 +v -0.039260 0.007098 0.027598 +v -0.036240 0.006541 0.031588 +v -0.033272 0.006907 0.035873 +v -0.030574 0.008009 0.037333 +v -0.028864 0.006596 0.039138 +v -0.025019 0.004671 0.039673 +v -0.058384 0.064180 -0.035240 +v -0.072310 0.004837 -0.010696 +v -0.063719 0.003716 0.003498 +v -0.061461 0.005042 0.005595 +v -0.059587 0.006261 0.005912 +v -0.064162 0.006932 0.011940 +v -0.065499 0.007702 0.014993 +v -0.065240 0.008106 0.017734 +v -0.064354 0.010268 0.023074 +v -0.062125 0.009341 0.028236 +v -0.036747 0.009440 0.030447 +v -0.030023 0.062319 -0.038845 +v -0.050958 0.064341 -0.036874 +v 0.050730 0.038578 -0.010603 +v -0.071015 0.006959 -0.010365 +v -0.072540 0.005907 -0.008539 +v -0.071485 0.007325 -0.006680 +v -0.059564 0.007551 0.004844 +v -0.041791 0.140092 -0.017569 +v -0.035484 0.008932 0.031893 +v -0.033420 0.008793 0.035598 +v -0.024543 0.010035 0.039482 +v -0.080642 0.064484 0.019374 +v -0.085172 0.099826 0.034313 +v -0.071336 0.006966 -0.011506 +v -0.070417 0.008557 -0.010576 +v -0.065585 0.008959 -0.001398 +v -0.061653 0.007221 0.003134 +v -0.076586 0.065353 0.022505 +v -0.055597 0.016077 0.024293 +v -0.033155 0.011524 0.033740 +v -0.027891 0.009413 0.038775 +v -0.074946 0.064447 0.024511 +v -0.069831 0.010335 -0.007663 +v -0.060519 0.012280 0.028067 +v -0.073086 0.116336 -0.044999 +v -0.038150 0.010595 0.027476 +v -0.035518 0.012852 0.029437 +v -0.041207 0.054857 -0.036049 +v -0.067408 0.012482 -0.009330 +v -0.067448 0.012195 -0.007235 +v -0.065821 0.011013 -0.003894 +v -0.063255 0.009650 -0.000251 +v -0.018690 0.044184 0.040779 +v -0.060298 0.013795 0.026236 +v -0.079261 0.053419 0.021246 +v -0.034018 0.011983 0.031482 +v -0.028110 0.014452 0.035255 +v -0.019368 0.066428 0.030006 +v -0.014325 0.067733 0.030057 +v -0.087982 0.106009 0.026387 +v -0.075486 0.131817 -0.032279 +v -0.059167 0.011556 0.000071 +v -0.058348 0.015068 0.025322 +v -0.082014 0.098832 0.037237 +v -0.035979 0.015060 0.025298 +v -0.031279 0.014832 0.030673 +v -0.028062 0.015904 0.033539 +v -0.084428 0.062628 0.015288 +v -0.063891 0.013550 -0.006145 +v -0.058727 0.014908 -0.005535 +v -0.056152 0.014812 -0.002697 +v -0.016549 0.066287 0.031451 +v -0.033230 0.014787 0.029635 +v -0.076061 0.128514 -0.027189 +v -0.049593 0.132856 -0.011562 +v -0.073646 0.041400 0.019338 +v -0.084810 0.111248 0.025847 +v -0.070863 0.068568 0.025208 +v -0.078113 0.135033 -0.044587 +v -0.027277 0.046051 0.032230 +v -0.051929 0.014278 0.001774 +v -0.092336 0.094075 0.024629 +v -0.087634 0.110711 0.022686 +v -0.076414 0.126186 -0.024736 +v -0.090896 0.115923 0.009748 +v -0.081696 0.047128 0.014918 +v -0.087178 0.058785 0.011159 +v -0.022422 0.060278 0.036944 +v -0.058344 0.016124 -0.007798 +v -0.019137 0.050461 0.042948 +v -0.051384 0.018256 0.019306 +v -0.049596 0.018874 0.021415 +v -0.088461 0.057988 0.008299 +v -0.032143 0.019482 0.022935 +v -0.033266 0.017150 0.025761 +v -0.030330 0.017882 0.027935 +v -0.026528 0.017750 0.031425 +v -0.056448 0.027280 0.008056 +v -0.026721 0.056641 0.033985 +v -0.022828 0.063192 0.031779 +v -0.082703 0.090230 0.034794 +v -0.076727 0.129153 -0.030023 +v -0.056134 0.017127 -0.004881 +v -0.087897 0.096366 0.031451 +v -0.030949 0.019153 0.024330 +v -0.028633 0.018925 0.026921 +v -0.050040 0.130556 -0.008910 +v -0.029459 0.053336 0.029929 +v -0.078237 0.050188 0.021023 +v -0.053612 0.021320 -0.003602 +v -0.051334 0.017216 -0.000277 +v -0.041023 0.135797 -0.025505 +v -0.050891 0.020000 0.018191 +v -0.028552 0.020191 0.022883 +v -0.026035 0.020115 0.025065 +v -0.084123 0.073788 0.011328 +v -0.027573 0.051029 0.034328 +v -0.046999 0.135965 -0.014302 +v -0.050177 0.021315 0.000447 +v -0.076071 0.123433 -0.019183 +v -0.047577 0.021439 0.022325 +v -0.090046 0.086773 0.030956 +v -0.027298 0.022117 0.022515 +v -0.026413 0.060712 0.030865 +v -0.043365 0.059009 -0.037224 +v -0.050828 0.022266 0.004221 +v -0.049212 0.023672 0.020000 +v -0.024059 0.020182 0.027022 +v -0.021935 0.022487 0.030330 +v -0.019057 0.020934 0.033189 +v -0.051173 0.023613 0.000748 +v -0.052026 0.023938 0.004106 +v -0.052121 0.024423 0.006484 +v -0.092411 0.088055 0.028065 +v -0.090653 0.113217 0.012411 +v -0.013661 0.025199 0.036998 +v -0.072517 0.048345 0.024479 +v -0.054594 0.025442 0.005466 +v -0.052769 0.025545 0.007474 +v -0.053000 0.027344 0.011391 +v -0.049890 0.029062 0.019416 +v -0.019285 0.025733 0.034337 +v -0.081823 0.076838 0.013803 +v -0.086236 0.097553 0.034117 +v -0.074528 0.117300 -0.043793 +v -0.083868 0.057050 0.015092 +v -0.077773 0.141007 -0.055151 +v -0.086767 0.069633 0.009697 +v -0.082802 0.051051 0.015883 +v -0.054021 0.027230 0.009504 +v -0.052562 0.028755 0.014507 +v -0.050923 0.026481 0.017189 +v -0.045408 0.028577 0.024314 +v -0.070165 0.063400 0.027553 +v -0.024028 0.026158 0.027310 +v -0.022465 0.030712 0.030048 +v -0.017173 0.028076 0.037111 +v -0.082366 0.095968 0.037502 +v -0.057352 0.029449 0.011892 +v -0.054101 0.028622 0.012297 +v -0.076415 0.146867 -0.065098 +v -0.089198 0.083249 0.029965 +v -0.085037 0.116031 0.019794 +v -0.012831 0.068882 0.029265 +v -0.078113 0.138494 -0.051059 +v -0.080889 0.073414 0.015725 +v -0.051921 0.017136 0.020812 +v -0.090060 0.090263 0.031202 +v -0.077512 0.055775 0.023426 +v -0.048372 0.031730 0.021826 +v -0.078557 0.083600 -0.019444 +v -0.085947 0.092337 0.034033 +v -0.018904 0.062151 0.037905 +v -0.085570 0.066202 0.013285 +v -0.029812 0.046917 0.028034 +v -0.075928 0.082708 -0.020052 +v 0.004609 0.077130 -0.034844 +v -0.022702 0.064360 0.030495 +v -0.019543 0.065486 0.030694 +v -0.081907 0.084312 -0.017406 +v -0.017122 0.064301 0.036310 +v -0.017820 0.066914 0.029581 +v -0.078458 0.085649 0.036318 +v -0.076673 0.072625 0.020267 +v -0.025158 0.055579 0.037172 +v -0.025803 0.040805 0.030451 +v -0.054098 0.128398 -0.008443 +v -0.044133 0.119866 -0.020941 +v -0.067129 0.070384 -0.030229 +v -0.054216 0.057645 -0.036969 +v -0.073235 0.117705 -0.051388 +v -0.085348 0.106855 0.029417 +v -0.021319 0.062456 0.035324 +v -0.026193 0.032788 0.025349 +v -0.019144 0.031106 0.035645 +v -0.081739 0.106121 0.033154 +v -0.077608 0.144682 -0.061127 +v -0.024557 0.050244 0.039826 +v -0.078402 0.113712 0.028270 +v -0.049665 0.058197 -0.036297 +v -0.045285 0.034340 0.025203 +v -0.083202 0.085206 0.034443 +v -0.038418 0.128711 -0.027252 +v -0.086717 0.102275 0.030904 +v -0.023041 0.035135 0.032149 +v -0.074335 0.127147 -0.022559 +v -0.028517 0.004496 0.038966 +v -0.080384 0.083911 0.033658 +v -0.086112 0.088045 0.034234 +v -0.023731 0.040914 0.034502 +v -0.064808 0.102293 -0.022646 +v -0.020122 0.058041 0.040120 +v -0.087829 0.114839 0.016609 +v -0.058283 0.056005 -0.035677 +v -0.022871 0.042833 0.037612 +v -0.071888 0.083428 -0.022260 +v -0.067886 0.060104 -0.031244 +v -0.080808 0.086401 0.034305 +v -0.022693 0.053563 0.040729 +v -0.081172 0.059383 0.018765 +v -0.088490 0.064791 0.008404 +v -0.072730 0.059776 0.026838 +v -0.039859 0.071839 -0.035015 +v -0.039739 0.076115 -0.034286 +v -0.090072 0.097421 0.027293 +v -0.024731 0.046663 0.038424 +v -0.085785 0.117328 0.016945 +v -0.076719 0.131328 -0.034023 +v -0.019846 0.036270 0.037903 +v -0.020978 0.039795 0.037903 +v -0.027944 0.043421 0.029224 +v -0.070739 0.053846 0.027110 +v -0.091694 0.092058 0.028585 +v -0.028984 0.049540 0.030816 +v -0.023566 0.060945 0.034578 +v -0.044638 0.003665 -0.037919 +v -0.045649 0.003111 -0.036507 +v -0.092452 0.098673 0.010931 +v -0.061763 0.006542 0.009138 +v -0.071366 0.136896 -0.063480 +v -0.040366 0.141143 -0.022177 +v -0.077929 0.145223 -0.064586 +v -0.044910 0.006242 -0.036875 +v -0.045642 0.006150 -0.035229 +v -0.047421 0.005545 -0.028961 +v -0.086623 0.095459 -0.016108 +v -0.059202 0.008608 0.006614 +v -0.061418 0.008229 0.008602 +v -0.063955 0.008243 0.011632 +v -0.065234 0.008646 0.014768 +v -0.078042 0.134186 -0.051508 +v -0.067562 0.135824 -0.070424 +v -0.077607 0.143597 -0.064428 +v -0.076638 0.145005 -0.066306 +v -0.042205 0.005830 -0.041335 +v -0.046255 0.005860 -0.032390 +v -0.070102 0.008699 -0.014128 +v -0.063470 0.009848 0.012279 +v -0.078424 0.130040 -0.039777 +v -0.087845 0.097778 -0.012756 +v -0.092644 0.082977 0.000058 +v -0.042966 0.006527 -0.039848 +v -0.043296 0.010802 -0.034521 +v -0.043915 0.010208 -0.032093 +v -0.046729 0.008941 -0.026828 +v -0.065178 0.011795 -0.015813 +v -0.069091 0.010940 -0.012380 +v -0.074552 0.121565 -0.034812 +v -0.075021 0.119145 -0.041245 +v -0.057305 0.009759 0.003904 +v -0.057773 0.009108 0.005318 +v -0.064874 0.010880 0.019332 +v -0.048118 0.135521 -0.016606 +v -0.060322 0.012694 -0.018474 +v -0.067432 0.012295 -0.012112 +v -0.093044 0.099196 0.004858 +v -0.075845 0.118389 -0.022730 +v -0.054061 0.011489 0.003761 +v -0.060846 0.012722 0.013622 +v -0.092256 0.100183 0.002859 +v -0.074632 0.132346 -0.052145 +v -0.041580 0.009154 -0.038070 +v -0.064678 0.062170 -0.033084 +v -0.054601 0.011350 0.005963 +v -0.054046 0.014543 0.009739 +v -0.060415 0.011267 0.011088 +v -0.063114 0.012901 0.017714 +v -0.062504 0.013203 0.022945 +v -0.079137 0.134491 -0.050132 +v -0.077592 0.126349 -0.037129 +v -0.089703 0.082438 -0.008483 +v -0.038101 0.013473 -0.037813 +v -0.041482 0.011902 -0.036832 +v -0.043755 0.012410 -0.028764 +v -0.056592 0.015087 -0.018692 +v -0.059367 0.014216 -0.016547 +v -0.061161 0.014894 -0.012605 +v -0.065247 0.013823 -0.009496 +v -0.061060 0.015103 -0.008457 +v -0.051568 0.013784 0.003555 +v -0.057125 0.015326 0.015656 +v -0.057939 0.015657 0.018376 +v -0.060350 0.014947 0.021904 +v -0.052614 0.130978 -0.015380 +v -0.041207 0.014138 -0.031106 +v -0.042019 0.015112 -0.026941 +v -0.040485 0.065679 -0.036491 +v 0.017274 0.080826 -0.030271 +v -0.057742 0.015878 -0.015776 +v -0.058790 0.016044 -0.011666 +v -0.076589 0.123075 -0.021333 +v -0.050199 0.016233 0.002650 +v -0.050482 0.016387 0.004311 +v -0.052475 0.013454 0.006026 +v -0.055053 0.015511 0.013386 +v -0.055358 0.016692 0.021727 +v -0.073687 0.141200 -0.064191 +v -0.039931 0.013774 -0.035686 +v -0.072062 0.117690 -0.055080 +v -0.092100 0.082149 0.004399 +v -0.091483 0.113724 0.003102 +v -0.053387 0.015664 0.010587 +v -0.053712 0.016925 0.014557 +v -0.053742 0.016915 0.018480 +v -0.052878 0.016910 0.020083 +v -0.073293 0.131117 -0.053174 +v -0.031023 0.015999 -0.038303 +v -0.034445 0.016096 -0.033747 +v -0.057251 0.018151 -0.014718 +v -0.057315 0.020263 -0.011985 +v -0.052045 0.018111 0.008564 +v -0.052446 0.018873 0.012320 +v -0.079908 0.108438 -0.018378 +v -0.050622 0.132991 -0.015016 +v -0.078956 0.132786 -0.045483 +v -0.082440 0.076333 -0.014756 +v -0.025849 0.088873 -0.023146 +v -0.030530 0.017290 -0.035226 +v -0.032033 0.017520 -0.033209 +v -0.031901 0.017482 -0.031882 +v -0.034156 0.017538 -0.028193 +v 0.034172 0.078697 -0.019485 +v -0.055296 0.017733 -0.018704 +v -0.072885 0.110450 -0.022918 +v -0.052211 0.018638 0.016062 +v -0.081716 0.105504 -0.016314 +v -0.031878 0.076618 -0.033393 +v -0.026520 0.017221 -0.040272 +v -0.028620 0.017505 -0.037796 +v -0.029689 0.018559 -0.034631 +v -0.030709 0.018724 -0.031381 +v -0.072710 0.119100 -0.054699 +v -0.051853 0.022976 0.013866 +v -0.030215 0.020417 -0.032049 +v -0.030743 0.020350 -0.029319 +v -0.031774 0.019131 -0.027337 +v -0.055890 0.021404 -0.006844 +v -0.049952 0.021583 0.001843 +v -0.051340 0.021779 0.006868 +v -0.052168 0.023788 0.010993 +v -0.072352 0.123801 -0.049907 +v -0.077836 0.141695 -0.062068 +v -0.068413 0.145582 -0.073105 +v -0.029701 0.021860 -0.035718 +v -0.054647 0.023230 -0.019537 +v -0.056931 0.023336 -0.014012 +v -0.056707 0.023811 -0.008388 +v -0.054316 0.023801 -0.003920 +v -0.091906 0.098429 -0.004781 +v -0.025612 0.022210 -0.042351 +v -0.027703 0.020620 -0.039234 +v -0.030782 0.023538 -0.030250 +v -0.057474 0.025796 -0.012885 +v -0.059144 0.026434 -0.008586 +v -0.056314 0.025121 -0.004033 +v -0.088814 0.105286 -0.003575 +v -0.078768 0.136619 -0.054690 +v -0.074385 0.117661 -0.045749 +v -0.020547 0.148159 -0.037054 +v -0.031883 0.024960 -0.027557 +v -0.056722 0.028761 -0.018315 +v -0.057232 0.027647 -0.016409 +v -0.090381 0.103384 0.000271 +v -0.079376 0.136177 -0.052555 +v -0.091637 0.097051 0.017252 +v -0.071731 0.120364 -0.058801 +v -0.078499 0.140475 -0.060181 +v -0.045866 0.134574 -0.021624 +v -0.023642 0.148572 -0.033853 +v -0.026912 0.024963 -0.042009 +v -0.028886 0.025607 -0.037586 +v -0.030952 0.026081 -0.032382 +v -0.088769 0.104692 0.011891 +v 0.006567 0.072752 -0.035722 +v -0.074052 0.138591 -0.060838 +v -0.078795 0.141360 -0.058295 +v -0.078971 0.140757 -0.059119 +v -0.024048 0.150819 -0.031570 +v -0.025131 0.024059 -0.043774 +v -0.032098 0.027748 -0.029531 +v -0.039186 0.003426 -0.043888 +v -0.004121 0.079485 -0.035300 +v -0.065463 0.030077 -0.016418 +v -0.042787 0.063523 -0.037040 +v -0.060181 0.061360 -0.033814 +v -0.056961 0.061986 -0.036130 +v -0.090101 0.107584 0.000050 +v -0.063061 0.134319 -0.075235 +v -0.077512 0.125457 -0.028655 +v -0.044307 0.138584 -0.019125 +v -0.018798 0.135337 -0.034085 +v -0.068220 0.126778 -0.069442 +v -0.026014 0.028126 -0.045265 +v -0.029636 0.030681 -0.038737 +v -0.033207 0.028778 -0.029173 +v -0.070583 0.058726 -0.030917 +v -0.040396 0.139564 -0.024202 +v -0.043695 0.138529 -0.021076 +v -0.090107 0.100547 0.022849 +v -0.040128 0.141625 -0.020623 +v -0.027246 0.090039 -0.021205 +v -0.033239 0.030483 -0.028938 +v -0.019791 0.002526 -0.042201 +v -0.068886 0.032225 -0.016024 +v -0.061079 0.057172 -0.033766 +v -0.074510 0.119170 -0.044441 +v -0.051264 0.083245 -0.030372 +v -0.038936 0.090571 -0.025164 +v -0.079311 0.138087 -0.055683 +v -0.057213 0.127163 -0.011237 +v -0.028399 0.029946 -0.042819 +v -0.030215 0.028371 -0.035769 +v -0.032263 0.030644 -0.032342 +v 0.033895 0.063322 -0.028467 +v -0.071079 0.033373 -0.014402 +v -0.074133 0.034944 -0.013044 +v -0.035945 0.056086 -0.038758 +v -0.052996 0.129153 -0.016674 +v -0.091230 0.096933 0.023674 +v -0.070516 0.141104 -0.067958 +v -0.089046 0.107410 0.022865 +v -0.084612 0.102005 -0.015064 +v -0.028224 0.034882 -0.044868 +v -0.029914 0.032850 -0.042190 +v -0.032471 0.033220 -0.033388 +v 0.044144 0.036973 -0.013791 +v -0.048411 0.069316 -0.036246 +v -0.060712 0.090485 -0.023344 +v -0.089291 0.100816 -0.010612 +v -0.073915 0.119143 -0.047909 +v -0.078950 0.139261 -0.054766 +v -0.070489 0.133026 -0.062837 +v -0.018127 0.150212 -0.039082 +v -0.030984 0.033850 -0.039302 +v -0.071013 0.037018 -0.019714 +v -0.072536 0.037356 -0.017660 +v -0.075149 0.037731 -0.015204 +v -0.078337 0.116643 -0.016989 +v -0.077452 0.118082 -0.019840 +v -0.078298 0.138503 -0.057840 +v -0.075095 0.137989 -0.059275 +v -0.027335 0.148207 -0.029827 +v -0.045684 0.084691 -0.030113 +v -0.025108 0.032550 -0.047453 +v -0.030367 0.037012 -0.043010 +v -0.031469 0.033922 -0.036392 +v -0.045120 0.092873 -0.023508 +v -0.015026 0.076207 -0.035212 +v -0.073093 0.038858 -0.021297 +v -0.075098 0.039155 -0.019652 +v -0.077120 0.038751 -0.012722 +v -0.080952 0.039822 0.000315 +v 0.010772 0.056371 -0.045775 +v -0.089789 0.102468 -0.007928 +v -0.077558 0.128878 -0.032986 +v -0.077764 0.040161 -0.017213 +v -0.078173 0.040505 -0.014046 +v -0.073708 0.115794 -0.034595 +v -0.046617 0.136347 -0.019326 +v -0.075270 0.127485 -0.042563 +v -0.069204 0.137436 -0.067837 +v -0.086397 0.118917 -0.005689 +v -0.035338 0.039889 -0.032754 +v 0.017043 0.093716 -0.016290 +v -0.078601 0.041332 -0.018414 +v -0.081076 0.044287 -0.016658 +v -0.081754 0.044275 -0.014088 +v -0.081833 0.041449 -0.007279 +v -0.082581 0.043865 -0.002981 +v -0.082048 0.043010 0.001357 +v -0.080954 0.042495 0.004980 +v -0.089309 0.114247 -0.004351 +v -0.084927 0.113277 -0.008343 +v -0.070798 0.122180 -0.061832 +v -0.090795 0.102759 0.005150 +v -0.070938 0.126287 -0.058367 +v -0.073735 0.122651 -0.040519 +v -0.075130 0.130425 -0.048254 +v -0.031971 0.037540 -0.038609 +v -0.083832 0.044311 -0.007261 +v -0.068987 0.100345 -0.023125 +v -0.083705 0.118388 -0.010516 +v -0.090764 0.118187 0.001083 +v 0.026497 0.057776 -0.037116 +v -0.044955 0.057322 -0.036705 +v -0.053796 0.130052 -0.011617 +v -0.022356 0.004899 0.039463 +v -0.076974 0.120545 -0.022222 +v -0.094247 0.094742 0.007774 +v -0.000581 0.078999 -0.034542 +v -0.027534 0.039839 -0.049507 +v -0.029666 0.038593 -0.045745 +v -0.031847 0.042684 -0.043606 +v -0.033628 0.044432 -0.041808 +v -0.033550 0.042358 -0.040044 +v -0.033591 0.040589 -0.036986 +v 0.022828 0.069836 -0.034275 +v -0.084156 0.046119 -0.010743 +v -0.085580 0.046811 -0.001489 +v 0.007925 0.075394 -0.034698 +v -0.072547 0.111855 -0.027743 +v -0.074702 0.134767 -0.055408 +v -0.078199 0.128803 -0.040531 +v -0.032241 0.045256 -0.045663 +v -0.034430 0.044889 -0.038308 +v -0.075676 0.048583 -0.025899 +v -0.080700 0.047920 -0.019742 +v -0.082471 0.048550 -0.016384 +v -0.085907 0.047587 -0.004178 +v -0.086713 0.048904 -0.000675 +v -0.084075 0.048764 0.008162 +v -0.089739 0.102011 0.015327 +v -0.075099 0.110803 -0.020783 +v -0.076460 0.112745 -0.019500 +v -0.080223 0.118681 -0.013668 +v -0.075871 0.119172 -0.034349 +v -0.073815 0.128142 -0.047433 +v -0.073259 0.134957 -0.057563 +v -0.030622 0.044250 -0.047999 +v -0.034749 0.045352 -0.035806 +v -0.062024 0.143268 -0.076267 +v -0.082590 0.050381 -0.018907 +v -0.084183 0.049419 -0.011798 +v -0.086059 0.048277 -0.006555 +v -0.089856 0.117339 -0.002547 +v -0.077556 0.113780 -0.018430 +v -0.077863 0.120533 -0.015177 +v -0.077117 0.121970 -0.025579 +v 0.007185 0.082029 -0.033392 +v -0.034694 0.047663 -0.038069 +v -0.079244 0.051139 -0.024083 +v -0.080661 0.051612 -0.021652 +v -0.082346 0.051784 -0.019924 +v -0.086186 0.051126 -0.008290 +v -0.086598 0.052186 -0.005477 +v -0.086881 0.052149 -0.002145 +v -0.086191 0.047879 0.001948 +v -0.085719 0.051191 0.006577 +v -0.085077 0.053657 0.011640 +v -0.084072 0.049233 0.011822 +v -0.091464 0.108956 0.005870 +v -0.088638 0.112505 0.017206 +v 0.030420 0.084470 -0.017020 +v -0.074911 0.121906 -0.033198 +v -0.049022 0.133702 -0.018521 +v -0.073406 0.125480 -0.044775 +v -0.031469 0.047976 -0.046553 +v -0.032746 0.044857 -0.043049 +v -0.076789 0.051527 -0.026761 +v -0.086263 0.052247 -0.012102 +v -0.086675 0.052184 0.002838 +v -0.086371 0.053246 0.008563 +v -0.055972 0.127833 -0.013200 +v -0.033411 0.074288 -0.034851 +v -0.089239 0.118837 0.007760 +v -0.069526 0.124201 -0.065803 +v -0.074928 0.120726 -0.030934 +v 0.030658 0.055373 -0.034640 +v -0.088511 0.054264 -0.002556 +v -0.089032 0.056286 0.004235 +v -0.091554 0.112298 0.006181 +v -0.091920 0.110513 0.002266 +v -0.089485 0.108091 0.019575 +v -0.075092 0.112414 -0.021421 +v -0.086295 0.116293 -0.007180 +v -0.078764 0.133071 -0.048670 +v -0.028533 0.052381 -0.049868 +v -0.032628 0.050599 -0.043900 +v -0.033737 0.051197 -0.039848 +v 0.026768 0.086872 -0.018219 +v -0.075180 0.052336 -0.028991 +v -0.077748 0.055790 -0.026474 +v -0.084719 0.052057 -0.016883 +v -0.086953 0.054577 -0.012831 +v -0.088054 0.053989 -0.009513 +v -0.088783 0.055694 -0.005710 +v -0.088174 0.054898 0.000370 +v -0.091054 0.108975 0.000689 +v -0.090042 0.112155 -0.000962 +v -0.074778 0.123661 -0.036328 +v -0.091691 0.116298 0.004963 +v -0.085917 0.107183 -0.012009 +v -0.030951 0.052141 -0.045509 +v -0.034022 0.145101 -0.025282 +v -0.082538 0.056112 -0.020692 +v -0.084852 0.056330 -0.017528 +v -0.087425 0.110667 -0.004577 +v -0.077335 0.122832 -0.030045 +v -0.078310 0.130669 -0.044467 +v -0.065000 0.135384 -0.074686 +v -0.071823 0.123955 -0.054004 +v -0.075357 0.119251 -0.026553 +v -0.032593 0.053942 -0.040370 +v -0.087563 0.078259 -0.000919 +v -0.085726 0.057815 -0.014673 +v -0.087644 0.057109 -0.011378 +v -0.088659 0.057016 -0.008238 +v -0.089809 0.107476 0.009521 +v -0.075799 0.117833 -0.033715 +v -0.078845 0.136453 -0.049398 +v -0.083211 0.082227 -0.015779 +v -0.069620 0.128988 -0.064437 +v -0.075599 0.077040 -0.022522 +v -0.029311 0.056067 -0.046454 +v -0.031401 0.055548 -0.041290 +v -0.074605 0.055820 -0.029592 +v -0.080511 0.056268 -0.022627 +v -0.083478 0.058346 -0.020539 +v -0.086047 0.060321 -0.012427 +v -0.087131 0.060437 -0.010578 +v -0.089826 0.058723 0.000305 +v -0.082396 0.115710 -0.012191 +v -0.091043 0.110270 0.012122 +v -0.085581 0.110828 -0.007451 +v -0.089693 0.109288 0.015681 +v -0.083246 0.113185 -0.011881 +v -0.076098 0.116280 -0.025726 +v -0.077773 0.118911 -0.017749 +v -0.077104 0.123891 -0.033626 +v -0.076195 0.118214 -0.029879 +v -0.074231 0.125119 -0.040752 +v -0.085421 0.084842 -0.014931 +v -0.083683 0.106513 -0.014112 +v -0.082337 0.061931 -0.021412 +v -0.031346 0.082467 -0.030927 +v -0.012360 0.066895 -0.039430 +v 0.056585 0.036642 -0.011282 +v 0.000500 0.084565 -0.032022 +v 0.015166 0.090169 -0.023738 +v -0.019076 0.154745 -0.032048 +v 0.037263 0.054745 -0.030432 +v -0.015598 0.070765 -0.037885 +v -0.019300 0.154726 -0.034452 +v 0.007177 0.086427 -0.030080 +v 0.010087 0.080068 -0.033613 +v -0.006782 0.082614 -0.031837 +v 0.048400 0.039500 -0.008680 +v -0.029901 0.145170 -0.029850 +v -0.017478 0.153707 -0.038080 +v -0.043156 0.080832 -0.031030 +v 0.003053 0.066832 -0.038179 +v 0.004836 0.091266 -0.024953 +v 0.056830 0.033722 -0.012856 +v -0.017504 0.003611 -0.041627 +v -0.005180 0.068988 -0.037858 +v 0.016003 0.086445 -0.027315 +v -0.024653 0.063504 -0.039762 +v -0.015860 0.152979 -0.040154 +v 0.052466 0.035919 -0.013520 +v -0.040255 0.084670 -0.029122 +v 0.013836 0.073754 -0.033667 +v 0.018950 0.057551 -0.040689 +v -0.056819 0.126312 -0.013289 +v -0.047399 0.081210 -0.030934 +v -0.061613 0.138879 -0.076540 +v -0.050035 0.077882 -0.033254 +v -0.061950 0.009568 -0.021395 +v -0.013553 0.152136 -0.042065 +v -0.034145 0.081122 -0.031798 +v 0.001634 0.072060 -0.036567 +v -0.008249 0.080279 -0.034779 +v 0.035870 0.074400 -0.020786 +v 0.034752 0.072920 -0.024730 +v -0.061834 0.122399 -0.011428 +v -0.059715 0.123599 -0.011739 +v 0.012242 0.089892 -0.025866 +v -0.048108 0.131761 -0.020683 +v -0.010990 0.149931 -0.042662 +v -0.027122 0.002239 -0.043854 +v -0.023013 0.062652 -0.044316 +v -0.053858 0.094808 -0.019956 +v -0.011305 0.148452 -0.044229 +v -0.015774 0.066433 -0.038998 +v -0.064282 0.121672 -0.012903 +v -0.059714 0.121434 -0.013818 +v 0.013457 0.079478 -0.032683 +v -0.024216 0.076630 -0.035703 +v -0.014057 0.150444 -0.042691 +v -0.017534 0.080920 -0.033520 +v -0.057977 0.118890 -0.015557 +v -0.052416 0.093298 -0.021112 +v 0.020660 0.078841 -0.029764 +v -0.061640 0.120269 -0.014314 +v 0.028086 0.067449 -0.031942 +v 0.017710 0.070319 -0.036204 +v 0.047196 0.039471 -0.009606 +v -0.034604 0.009530 -0.044149 +v -0.029570 0.085497 -0.027706 +v -0.062830 0.119581 -0.015557 +v -0.001501 0.072424 -0.037056 +v 0.047076 0.041565 -0.004724 +v 0.011681 0.065971 -0.037687 +v -0.015325 0.091966 -0.020191 +v 0.007950 0.065862 -0.038425 +v 0.018264 0.074053 -0.031947 +v -0.038315 0.081842 -0.031300 +v 0.011761 0.063411 -0.040812 +v -0.001421 0.067769 -0.038473 +v -0.052425 0.003396 -0.026917 +v -0.063911 0.120240 -0.016704 +v -0.059365 0.114981 -0.016629 +v 0.021602 0.076087 -0.030136 +v -0.007243 0.070450 -0.038083 +v -0.065387 0.083901 -0.024593 +v -0.006281 0.092617 -0.024202 +v -0.015471 0.062226 -0.048302 +v -0.023574 0.082858 -0.030193 +v 0.023783 0.082564 -0.026160 +v -0.012370 0.070347 -0.038694 +v -0.060254 0.002580 -0.024393 +v -0.034537 0.091135 -0.021600 +v 0.034452 0.056261 -0.032270 +v 0.013422 0.062485 -0.040508 +v 0.005859 0.065049 -0.041196 +v -0.004149 0.084695 -0.030351 +v 0.010939 0.086702 -0.029527 +v 0.011702 0.072645 -0.034510 +v 0.011074 0.082671 -0.031264 +v 0.028102 0.063382 -0.034040 +v -0.033632 0.087124 -0.025595 +v 0.015214 0.063306 -0.038578 +v 0.007890 0.067338 -0.036657 +v 0.034346 0.068177 -0.027457 +v -0.035711 0.011107 -0.042851 +v -0.032725 0.013327 -0.041864 +v 0.007047 0.069187 -0.035817 +v -0.039694 0.009222 -0.040995 +v -0.054664 0.085882 -0.028016 +v -0.020458 0.091283 -0.020586 +v -0.014694 0.089931 -0.022563 +v -0.022420 0.064482 -0.039410 +v 0.031888 0.079781 -0.021848 +v -0.055677 0.111740 -0.016120 +v -0.036832 0.084126 -0.029462 +v 0.022632 0.055215 -0.039150 +v 0.005644 0.061131 -0.046502 +v -0.007890 0.062489 -0.048288 +v -0.013340 0.079635 -0.033261 +v -0.016444 0.063827 -0.045731 +v -0.033996 0.004659 -0.045218 +v 0.024407 0.066392 -0.035057 +v -0.008395 0.087278 -0.028727 +v -0.067204 0.147492 -0.074185 +v 0.008931 0.060410 -0.045041 +v -0.002527 0.081152 -0.033352 +v -0.026900 0.079255 -0.032378 +v -0.059994 0.111375 -0.017645 +v -0.003345 0.063779 -0.046646 +v -0.066299 0.009684 -0.018801 +v -0.057452 0.012287 -0.020877 +v 0.046213 0.040519 -0.010585 +v -0.050739 0.086589 -0.028451 +v -0.012146 0.054745 -0.053089 +v 0.003875 0.084283 -0.032725 +v -0.037425 0.007818 -0.043518 +v 0.001325 0.093070 -0.022557 +v -0.016246 0.086065 -0.028692 +v -0.060711 0.109222 -0.019755 +v 0.055036 0.038529 -0.009862 +v 0.000869 0.062969 -0.046333 +v 0.013127 0.059603 -0.043718 +v -0.021183 0.079815 -0.033540 +v 0.028031 0.046705 -0.037068 +v 0.046127 0.033601 -0.015031 +v 0.054263 0.031844 -0.014971 +v -0.002591 0.090131 -0.025463 +v -0.059086 0.088571 -0.023965 +v 0.019837 0.067677 -0.036878 +v -0.039156 0.015975 -0.027426 +v -0.036712 0.013126 -0.040172 +v -0.047779 0.101129 -0.009622 +v 0.048719 0.028832 -0.018790 +v -0.070958 0.083018 0.037050 +v -0.042557 0.088335 -0.027668 +v 0.022855 0.085920 -0.023652 +v 0.006664 0.057282 -0.047650 +v -0.012627 0.061265 -0.049693 +v -0.010406 0.092998 -0.022041 +v -0.001097 0.059267 -0.049227 +v 0.035411 0.059165 -0.030278 +v -0.006727 0.090025 -0.026086 +v -0.006199 0.065048 -0.044686 +v 0.016197 0.057565 -0.042478 +v -0.031950 0.005511 -0.045101 +v -0.027315 0.083083 -0.029761 +v -0.053388 0.105912 -0.015697 +v -0.046574 0.097651 -0.012472 +v -0.038144 0.015407 -0.031348 +v 0.042227 0.027774 -0.018547 +v -0.060228 0.082587 -0.028406 +v -0.013602 0.085252 -0.029884 +v -0.049819 0.003823 -0.026901 +v 0.005412 0.079847 -0.034730 +v -0.023301 0.060553 -0.048303 +v -0.020853 0.066225 -0.038942 +v 0.014900 0.072591 -0.034173 +v -0.043643 0.077698 -0.033039 +v 0.026048 0.081700 -0.024248 +v -0.035907 0.014319 -0.038740 +v -0.010487 0.004035 -0.040075 +v -0.005656 0.077235 -0.037090 +v -0.018311 0.083308 -0.031349 +v -0.011516 0.081893 -0.032039 +v -0.010895 0.089292 -0.025817 +v 0.013726 0.070118 -0.036582 +v -0.010863 0.064506 -0.045891 +v -0.056719 0.106712 -0.019152 +v -0.055565 0.103173 -0.018468 +v 0.022252 0.059444 -0.037999 +v -0.004936 0.059749 -0.049946 +v -0.022750 0.058487 -0.050384 +v -0.017877 0.065468 -0.040004 +v -0.042736 0.003607 -0.041890 +v -0.006289 0.067354 -0.039892 +v -0.026822 0.078237 -0.033581 +v 0.000206 0.065771 -0.042255 +v 0.030287 0.072466 -0.028721 +v -0.049260 0.099567 -0.015084 +v 0.028315 0.051901 -0.036194 +v 0.025205 0.050686 -0.039090 +v 0.045433 0.036649 -0.012316 +v -0.018314 0.069477 -0.038387 +v 0.041602 0.029887 -0.017592 +v 0.009933 0.068447 -0.036779 +v -0.012441 0.096622 -0.011323 +v 0.001062 0.098116 -0.013894 +v 0.043752 0.034165 -0.014645 +v 0.018625 0.090137 -0.021245 +v -0.037207 0.002683 -0.044919 +v 0.025083 0.070807 -0.032411 +v -0.012431 0.058997 -0.051123 +v -0.035588 0.085498 -0.027373 +v -0.014645 0.067661 -0.038225 +v 0.032868 0.076409 -0.023379 +v -0.067854 0.148834 -0.072724 +v -0.034940 0.003167 -0.045791 +v -0.052770 0.101178 -0.018319 +v -0.039384 0.095758 -0.013827 +v 0.006349 0.097978 -0.013954 +v 0.013677 0.096553 -0.013558 +v -0.019286 0.075237 -0.036872 +v 0.013917 0.083406 -0.030333 +v 0.017703 0.084268 -0.028295 +v 0.022872 0.063448 -0.036250 +v -0.057736 0.003752 -0.025009 +v -0.035519 0.088681 -0.024441 +v -0.020475 0.062412 -0.046771 +v -0.010059 0.055339 -0.051824 +v -0.050497 0.096125 -0.018116 +v -0.047939 0.096840 -0.015582 +v 0.029282 0.060420 -0.034228 +v -0.001322 0.088024 -0.027546 +v 0.017300 0.077236 -0.031481 +v 0.031840 0.060080 -0.032942 +v -0.020545 0.094419 -0.011353 +v -0.011843 0.094779 -0.017825 +v -0.000505 0.097134 -0.015882 +v 0.001943 0.075661 -0.034919 +v 0.029830 0.079562 -0.024115 +v -0.019642 0.086126 -0.027146 +v -0.057810 0.087551 -0.025223 +v -0.017314 0.059123 -0.051057 +v -0.049672 0.089904 -0.026097 +v -0.031145 0.002835 -0.045122 +v -0.041759 0.001801 -0.042579 +v 0.011295 0.003897 -0.036913 +v 0.019231 0.085116 -0.026672 +v 0.025859 0.076161 -0.028752 +v -0.032000 0.089495 -0.021955 +v -0.053557 0.099189 -0.019326 +v -0.011162 0.068052 -0.038792 +v -0.002586 0.094724 -0.020810 +v 0.005728 0.094769 -0.020828 +v 0.008960 0.095044 -0.019400 +v 0.014951 0.092664 -0.019696 +v 0.005177 0.063223 -0.044677 +v 0.025112 0.079381 -0.026715 +v -0.063393 0.146044 -0.075291 +v 0.043787 0.031873 -0.016021 +v 0.028596 0.074967 -0.027900 +v 0.000698 0.068695 -0.037429 +v -0.051898 0.096428 -0.018691 +v -0.022347 0.092589 -0.016272 +v 0.023106 0.088406 -0.019808 +v 0.051161 0.032356 -0.016355 +v 0.002514 0.087977 -0.028410 +v 0.040043 0.069521 -0.017978 +v -0.045858 0.094894 -0.020254 +v -0.043119 0.094442 -0.020440 +v -0.036613 0.094320 -0.016831 +v -0.029139 0.092644 -0.012510 +v -0.026540 0.092264 -0.014517 +v -0.016302 0.093610 -0.016836 +v -0.006825 0.094989 -0.020309 +v 0.009169 0.092027 -0.023418 +v 0.007565 0.002043 -0.035313 +v 0.004646 0.002027 -0.035814 +v 0.000025 0.002644 -0.038192 +v -0.003181 0.002657 -0.038481 +v -0.007491 0.002806 -0.039255 +v -0.015579 0.002644 -0.040548 +v -0.044507 0.066321 -0.036117 +v -0.025958 0.002830 -0.043480 +v 0.005415 0.003938 -0.038180 +v 0.000727 0.003908 -0.039001 +v -0.003525 0.004102 -0.039399 +v -0.012543 0.002683 -0.040098 +v -0.015906 0.004752 -0.041386 +v -0.026017 0.004565 -0.043792 +v -0.025188 0.138724 -0.033965 +v -0.055132 0.064690 -0.036111 +v -0.067553 0.001591 -0.020444 +v 0.014452 0.006667 -0.036476 +v -0.000865 0.006305 -0.039711 +v -0.077441 0.090888 -0.021546 +v -0.066541 0.066627 -0.030802 +v -0.074803 0.065360 -0.028051 +v -0.034969 0.128107 -0.027871 +v -0.065022 0.004385 -0.022233 +v -0.066627 0.001676 -0.021561 +v -0.068325 0.003883 -0.020526 +v -0.069787 0.002177 -0.018566 +v 0.023229 0.004649 -0.016492 +v 0.010572 0.005368 -0.037576 +v 0.004208 0.006108 -0.038887 +v -0.006619 0.007713 -0.040497 +v -0.023126 0.004230 -0.043271 +v -0.075282 0.104086 -0.021047 +v -0.066832 0.085632 -0.023437 +v -0.061774 0.004060 -0.023371 +v -0.069532 0.004495 -0.018633 +v -0.070765 0.004173 -0.015606 +v 0.033211 0.006118 -0.014551 +v 0.024238 0.006623 -0.018405 +v 0.007831 0.008891 -0.038129 +v -0.012573 0.007958 -0.041157 +v -0.029947 0.009698 -0.044373 +v -0.075150 0.037313 0.010923 +v -0.060507 0.096404 -0.022243 +v -0.047771 0.004412 -0.027175 +v -0.068799 0.006829 -0.016546 +v 0.011612 0.008315 -0.037805 +v 0.002381 0.009793 -0.038907 +v -0.003904 0.009810 -0.040055 +v -0.009802 0.011115 -0.040624 +v -0.020553 0.009444 -0.043365 +v -0.057435 0.074404 -0.032687 +v 0.014608 0.068291 -0.037224 +v -0.067184 0.007430 -0.020198 +v -0.071324 0.006033 -0.014324 +v 0.032638 0.007994 -0.017258 +v 0.025105 0.007999 -0.019364 +v -0.064758 0.070694 -0.031823 +v 0.014184 0.011172 -0.038788 +v 0.003337 0.011093 -0.039286 +v -0.001248 0.011240 -0.039647 +v -0.004154 0.011234 -0.040451 +v -0.047686 0.008724 -0.026283 +v -0.057112 0.009038 -0.023353 +v -0.067390 0.009163 -0.016487 +v -0.028149 0.143689 -0.032055 +v 0.028014 0.008853 -0.018995 +v -0.032455 0.003877 0.035802 +v 0.017538 0.013059 -0.037851 +v 0.011063 0.011699 -0.039527 +v -0.000556 0.012648 -0.040927 +v -0.007801 0.013746 -0.044097 +v -0.013235 0.014505 -0.044152 +v -0.013890 0.011366 -0.041311 +v -0.017450 0.012004 -0.042200 +v -0.025654 0.012186 -0.043017 +v -0.026218 0.015286 -0.040816 +v -0.070632 0.069441 -0.028703 +v -0.049938 0.011005 -0.025013 +v -0.053387 0.007521 -0.025560 +v -0.025707 0.067798 -0.038532 +v 0.043767 0.011400 -0.014094 +v 0.041397 0.012971 -0.018256 +v 0.035885 0.014007 -0.020647 +v 0.036939 0.009734 -0.017685 +v 0.031029 0.013009 -0.020553 +v 0.027826 0.012745 -0.021139 +v -0.061336 0.065015 -0.032802 +v 0.021035 0.014061 -0.034854 +v 0.008494 0.013850 -0.040165 +v 0.005143 0.013057 -0.040579 +v -0.001678 0.014368 -0.043421 +v -0.005239 0.013444 -0.043587 +v -0.016766 0.013270 -0.042737 +v -0.020829 0.014381 -0.042477 +v -0.021914 0.013686 -0.042423 +v -0.030914 0.012225 -0.043228 +v -0.064637 0.141925 -0.075725 +v -0.054782 0.003935 0.032190 +v -0.012610 0.138850 -0.039956 +v -0.045125 0.012281 -0.025742 +v -0.055060 0.013600 -0.021150 +v -0.075985 0.035397 -0.002547 +v 0.044568 0.014263 -0.018004 +v 0.025119 0.016735 -0.034682 +v 0.020702 0.015295 -0.035755 +v 0.018007 0.015675 -0.037645 +v 0.013867 0.014732 -0.039664 +v 0.010414 0.016728 -0.042389 +v 0.007035 0.016139 -0.042215 +v 0.003474 0.015060 -0.043295 +v -0.001077 0.016427 -0.044909 +v -0.010127 0.013940 -0.043850 +v -0.027961 0.016619 -0.038830 +v -0.049988 0.014169 -0.023643 +v -0.062639 0.068823 -0.032892 +v 0.017298 0.017227 -0.038923 +v 0.014373 0.017271 -0.041386 +v 0.001371 0.017665 -0.045073 +v -0.005849 0.017331 -0.045363 +v -0.042853 0.015952 -0.025784 +v -0.053258 0.016111 -0.021204 +v -0.011770 0.142485 -0.042825 +v 0.042753 0.017093 -0.020618 +v 0.032689 0.016596 -0.021005 +v 0.031324 0.017311 -0.022228 +v 0.022195 0.018623 -0.038080 +v 0.016130 0.019332 -0.041092 +v 0.014119 0.020303 -0.042253 +v 0.005377 0.018158 -0.043571 +v -0.012153 0.018392 -0.046171 +v -0.019870 0.016695 -0.043991 +v -0.023270 0.015923 -0.041978 +v -0.035756 0.076266 -0.034607 +v -0.036448 0.016627 -0.027755 +v -0.037153 0.018069 -0.025618 +v -0.041224 0.018739 -0.025669 +v -0.047062 0.015742 -0.024232 +v -0.021296 0.140251 -0.035811 +v 0.046571 0.016876 -0.018957 +v 0.039166 0.017029 -0.021016 +v -0.071226 0.108156 -0.022089 +v 0.023712 0.019981 -0.037456 +v 0.020398 0.019668 -0.040170 +v -0.003445 0.019845 -0.046057 +v -0.010278 0.020983 -0.048195 +v -0.066697 0.125239 -0.069110 +v -0.032623 0.018493 -0.026101 +v 0.044973 0.020761 -0.020884 +v 0.033943 0.019553 -0.021501 +v 0.026010 0.023402 -0.035715 +v 0.019875 0.022436 -0.042062 +v 0.017882 0.022162 -0.042563 +v 0.008603 0.021635 -0.044894 +v 0.007685 0.023040 -0.045335 +v 0.003696 0.020521 -0.044426 +v 0.000289 0.021309 -0.045058 +v -0.006435 0.020358 -0.047045 +v -0.033829 0.018660 -0.025038 +v -0.038074 0.020329 -0.025228 +v -0.044540 0.022615 -0.025633 +v -0.045670 0.019596 -0.024688 +v -0.071026 0.096111 -0.023729 +v 0.042363 0.021535 -0.021419 +v 0.036877 0.020254 -0.021231 +v -0.068208 0.063898 -0.030912 +v 0.022339 0.022158 -0.040459 +v 0.013256 0.023478 -0.043923 +v 0.004761 0.024479 -0.045397 +v 0.002328 0.023955 -0.046360 +v -0.013253 0.023252 -0.048472 +v -0.015869 0.019021 -0.046406 +v -0.032609 0.020857 -0.025032 +v -0.076650 0.069689 -0.024910 +v 0.049399 0.022931 -0.019555 +v 0.039426 0.023543 -0.020486 +v 0.016920 0.024587 -0.043110 +v -0.011778 0.025054 -0.048809 +v -0.019235 0.022088 -0.046634 +v -0.032705 0.024017 -0.025920 +v -0.042325 0.023970 -0.026105 +v -0.050018 0.019449 -0.022938 +v -0.070685 0.064087 -0.030420 +v -0.024217 0.003651 0.038869 +v 0.015999 0.028100 -0.042824 +v -0.001019 0.024976 -0.046947 +v -0.003987 0.025110 -0.047650 +v -0.006870 0.024932 -0.047900 +v -0.016071 0.026330 -0.049977 +v -0.047147 0.124973 -0.022201 +v -0.038758 0.126336 -0.026136 +v -0.034440 0.022924 -0.024904 +v -0.037104 0.024482 -0.025613 +v -0.053164 0.020563 -0.020826 +v 0.053171 0.027758 -0.017740 +v 0.048195 0.025138 -0.020067 +v 0.043526 0.024477 -0.020408 +v 0.039591 0.026091 -0.019376 +v -0.072539 0.100699 -0.022541 +v -0.080908 0.088992 -0.019464 +v 0.023188 0.026339 -0.040348 +v 0.011135 0.028538 -0.044176 +v 0.005891 0.028056 -0.045343 +v 0.002066 0.028832 -0.047845 +v -0.021543 0.027087 -0.048055 +v -0.035917 0.026760 -0.025922 +v -0.049024 0.023770 -0.024805 +v -0.076039 0.100735 -0.021600 +v -0.010581 0.076552 -0.036443 +v -0.000913 0.031459 -0.049001 +v -0.005442 0.028111 -0.049439 +v -0.009582 0.029373 -0.049787 +v -0.013415 0.028374 -0.050787 +v -0.030472 0.137502 -0.031561 +v -0.032593 0.027384 -0.027314 +v -0.033718 0.025352 -0.025695 +v -0.046260 0.026555 -0.026508 +v -0.035061 0.069112 -0.036741 +v -0.009977 0.031461 -0.050542 +v -0.033731 0.028569 -0.027319 +v -0.042752 0.029668 -0.027580 +v -0.051811 0.073492 -0.033911 +v -0.066047 0.097903 -0.023508 +v -0.077389 0.086534 -0.021264 +v -0.051698 0.069432 -0.035986 +v 0.021847 0.029894 -0.040562 +v 0.014456 0.031519 -0.044452 +v 0.001313 0.032524 -0.049001 +v -0.003756 0.030392 -0.049766 +v -0.014514 0.031252 -0.051704 +v -0.020126 0.032204 -0.050721 +v -0.022567 0.032434 -0.049611 +v -0.038593 0.027253 -0.026065 +v -0.045693 0.029539 -0.027615 +v -0.048470 0.031411 -0.027152 +v -0.048974 0.028400 -0.026351 +v -0.055660 0.029253 -0.020546 +v -0.059410 0.028586 -0.016435 +v -0.078915 0.097366 -0.020306 +v -0.056868 0.069850 -0.033658 +v -0.058760 0.102077 -0.020946 +v -0.081743 0.100643 -0.017961 +v -0.059422 0.067174 -0.033490 +v -0.076751 0.095222 -0.022378 +v 0.010593 0.035697 -0.045353 +v 0.010012 0.031813 -0.046062 +v 0.006019 0.032790 -0.047278 +v -0.013904 0.034020 -0.051883 +v -0.019724 0.034078 -0.051824 +v -0.066329 0.140899 -0.073790 +v -0.034955 0.031274 -0.028368 +v -0.040305 0.031597 -0.028155 +v -0.045649 0.032672 -0.028575 +v -0.053462 0.029240 -0.023515 +v -0.054257 0.032339 -0.023695 +v -0.054969 0.030923 -0.021803 +v -0.056812 0.030568 -0.020737 +v -0.060708 0.030878 -0.019884 +v -0.062960 0.029526 -0.017215 +v -0.070279 0.040338 0.021217 +v 0.024298 0.032664 -0.038310 +v 0.018834 0.032169 -0.042811 +v 0.014704 0.034424 -0.044726 +v -0.001517 0.036456 -0.048858 +v -0.005264 0.034108 -0.049594 +v -0.016567 0.034017 -0.052493 +v -0.050763 0.032643 -0.025921 +v -0.024458 0.132828 -0.031300 +v -0.040687 0.123254 -0.023834 +v -0.015378 0.146370 -0.041448 +v -0.043044 0.127031 -0.024625 +v -0.033777 0.133619 -0.029987 +v -0.062616 0.078846 -0.029387 +v -0.046853 0.075509 -0.033605 +v -0.056398 0.076888 -0.032569 +v -0.031206 0.066274 -0.037535 +v 0.021982 0.034512 -0.041752 +v 0.020033 0.037150 -0.043234 +v 0.016907 0.037428 -0.044325 +v 0.013611 0.037046 -0.045886 +v 0.006080 0.036047 -0.047178 +v 0.002251 0.036462 -0.047909 +v -0.005347 0.036813 -0.050550 +v -0.008836 0.034457 -0.050217 +v -0.027341 0.036930 -0.047999 +v -0.034763 0.033795 -0.029657 +v -0.035824 0.035770 -0.030525 +v -0.037995 0.036224 -0.030164 +v -0.045647 0.034644 -0.029821 +v -0.052932 0.034110 -0.025743 +v -0.055670 0.032876 -0.023379 +v -0.058303 0.034141 -0.024197 +v -0.062249 0.033837 -0.022857 +v -0.065710 0.030898 -0.017803 +v -0.054979 0.109489 -0.016499 +v -0.011417 0.145119 -0.044034 +v -0.061829 0.074746 -0.031349 +v -0.066153 0.081337 -0.025991 +v 0.023886 0.036963 -0.040241 +v 0.005423 0.038802 -0.048611 +v -0.068359 0.106799 -0.022486 +v -0.033450 0.035337 -0.032367 +v -0.041981 0.034621 -0.030037 +v -0.049475 0.037146 -0.028943 +v -0.051404 0.035260 -0.027284 +v 0.000849 0.080895 -0.034544 +v -0.036702 0.132096 -0.028658 +v -0.062940 0.042061 0.025839 +v -0.071118 0.091646 -0.023220 +v -0.074550 0.109251 -0.021225 +v -0.079494 0.038042 0.000899 +v 0.025737 0.036432 -0.038366 +v 0.008226 0.039064 -0.047683 +v -0.008681 0.038171 -0.051124 +v -0.011717 0.038731 -0.052617 +v -0.020453 0.041882 -0.053673 +v -0.056226 0.078983 -0.031912 +v -0.055771 0.036910 -0.028689 +v -0.064562 0.037163 -0.025916 +v -0.065990 0.035460 -0.022212 +v -0.069282 0.035416 -0.019203 +v -0.083464 0.095690 -0.019037 +v -0.079860 0.039351 0.003657 +v -0.020287 0.003742 0.038468 +v -0.045601 0.123307 -0.022359 +v 0.014588 0.039518 -0.045408 +v -0.008841 0.040543 -0.052130 +v -0.021961 0.038689 -0.052763 +v -0.038468 0.039818 -0.031773 +v -0.057935 0.040048 -0.031211 +v -0.060525 0.037374 -0.028868 +v -0.068547 0.038406 -0.024367 +v -0.069476 0.037724 -0.021682 +v -0.065003 0.074609 -0.029219 +v -0.063709 0.030646 0.011078 +v -0.023190 0.145361 -0.035309 +v 0.010445 0.039019 -0.046802 +v 0.007984 0.044038 -0.048625 +v -0.006766 0.043108 -0.051819 +v -0.011586 0.043454 -0.052863 +v -0.023538 0.042862 -0.052963 +v -0.027222 0.042587 -0.050536 +v -0.064686 0.128525 -0.072070 +v -0.042615 0.038900 -0.032333 +v -0.044099 0.038801 -0.031981 +v -0.047121 0.040745 -0.030979 +v -0.049459 0.040238 -0.030194 +v -0.053874 0.038914 -0.030208 +v -0.067756 0.041396 -0.028447 +v -0.073116 0.041534 -0.023803 +v -0.074748 0.087316 -0.022365 +v -0.079429 0.094132 -0.020561 +v -0.022821 0.129499 -0.029142 +v 0.023901 0.042110 -0.040512 +v 0.021017 0.040172 -0.042045 +v 0.011925 0.043554 -0.045456 +v 0.003631 0.043960 -0.049630 +v 0.001780 0.040645 -0.049708 +v -0.003173 0.041154 -0.050439 +v -0.052958 0.041574 -0.031538 +v -0.063178 0.040504 -0.030238 +v -0.075167 0.040745 -0.021903 +v -0.004308 0.070910 -0.037922 +v -0.084933 0.093870 -0.017925 +v -0.027326 0.135026 -0.032074 +v -0.052309 0.112126 -0.014895 +v -0.069732 0.121672 -0.064179 +v -0.026181 0.140666 -0.033737 +v 0.031654 0.044425 -0.034715 +v 0.020435 0.044545 -0.041582 +v 0.015451 0.043166 -0.044147 +v 0.009400 0.043267 -0.047716 +v -0.015491 0.041451 -0.053557 +v -0.035541 0.041959 -0.033694 +v -0.060704 0.042864 -0.032183 +v -0.063584 0.043595 -0.032107 +v -0.070336 0.040686 -0.025735 +v -0.064893 0.094703 -0.023434 +v -0.042003 0.132949 -0.025491 +v -0.033792 0.140856 -0.029075 +v -0.055698 0.117461 -0.016583 +v -0.049188 0.120603 -0.019657 +v 0.027111 0.041296 -0.038510 +v 0.012526 0.047182 -0.045986 +v -0.014137 0.045554 -0.052991 +v -0.028752 0.047491 -0.049984 +v -0.042919 0.044737 -0.033555 +v -0.045701 0.043768 -0.032488 +v -0.050225 0.043361 -0.032567 +v -0.055148 0.044243 -0.033793 +v -0.058127 0.043383 -0.033196 +v -0.066475 0.044206 -0.031324 +v -0.068647 0.043340 -0.029691 +v -0.072322 0.044419 -0.027542 +v -0.073916 0.044150 -0.025205 +v -0.023051 0.071198 -0.038187 +v -0.047584 0.128717 -0.021854 +v -0.071590 0.080746 -0.023363 +v 0.008688 0.047857 -0.047667 +v 0.004696 0.047994 -0.048648 +v -0.008571 0.045295 -0.052359 +v -0.014679 0.048731 -0.053994 +v -0.019478 0.048860 -0.053667 +v -0.021772 0.049277 -0.053529 +v -0.024609 0.045164 -0.052296 +v -0.011129 0.074358 -0.037196 +v -0.068307 0.123900 -0.067211 +v -0.035683 0.046041 -0.034212 +v -0.038642 0.043813 -0.032756 +v -0.049242 0.045907 -0.033516 +v -0.056981 0.046036 -0.034224 +v -0.063511 0.049651 -0.033736 +v -0.078591 0.044022 -0.020747 +v -0.065527 0.144939 -0.075296 +v -0.027467 0.071756 -0.037854 +v -0.030883 0.071812 -0.036954 +v -0.051105 0.123399 -0.019431 +v -0.050661 0.031250 0.019498 +v -0.069074 0.088622 -0.023524 +v 0.008041 0.052195 -0.047172 +v -0.000546 0.046990 -0.050427 +v -0.003905 0.048494 -0.051706 +v -0.005949 0.045867 -0.052450 +v -0.008763 0.050538 -0.052509 +v -0.037298 0.072041 -0.034998 +v -0.047404 0.046861 -0.034032 +v -0.053388 0.046149 -0.034305 +v -0.041120 0.069179 -0.035933 +v 0.032241 0.048051 -0.033973 +v 0.022406 0.047150 -0.040690 +v 0.018435 0.048005 -0.042751 +v 0.013965 0.050480 -0.044738 +v 0.011516 0.051449 -0.045461 +v 0.002711 0.051085 -0.049251 +v -0.000619 0.050144 -0.051166 +v -0.026981 0.049275 -0.051585 +v -0.079127 0.106568 -0.019266 +v -0.015508 0.137276 -0.036814 +v -0.053984 0.067189 -0.036307 +v -0.036026 0.048436 -0.036263 +v -0.044104 0.048802 -0.034688 +v -0.051797 0.050115 -0.036142 +v -0.054953 0.048558 -0.035858 +v -0.059906 0.047637 -0.034006 +v -0.068687 0.048598 -0.031769 +v -0.072307 0.047717 -0.029202 +v -0.061709 0.071472 -0.032857 +v -0.068050 0.029620 0.004821 +v 0.006402 0.050396 -0.048268 +v -0.004198 0.051498 -0.052319 +v -0.066649 0.128161 -0.071589 +v -0.072936 0.050188 -0.030240 +v -0.078377 0.046924 -0.022253 +v -0.073830 0.070011 -0.026957 +v -0.054519 0.124850 -0.016668 +v -0.065272 0.130708 -0.073373 +v -0.054063 0.114945 -0.016216 +v 0.034601 0.051142 -0.032934 +v 0.029936 0.050192 -0.034754 +v 0.022931 0.051774 -0.040325 +v 0.017269 0.053799 -0.043061 +v 0.002338 0.054467 -0.048652 +v -0.008716 0.052954 -0.052606 +v -0.016700 0.053050 -0.053678 +v -0.022145 0.053918 -0.052488 +v -0.035829 0.052120 -0.037154 +v -0.038229 0.051356 -0.036610 +v -0.040555 0.051128 -0.035664 +v -0.061655 0.051098 -0.034004 +v -0.055479 0.122619 -0.016359 +v 0.018798 0.064186 -0.037575 +v -0.057640 0.115183 -0.016388 +v -0.052760 0.119871 -0.017986 +v -0.016828 0.141225 -0.038470 +v 0.013308 0.055706 -0.045269 +v 0.004292 0.055926 -0.048185 +v -0.002237 0.052889 -0.051608 +v -0.080059 0.103223 -0.018690 +v -0.026433 0.054622 -0.050701 +v -0.056469 0.092156 -0.021753 +v -0.035012 0.053459 -0.038952 +v -0.044461 0.052461 -0.036024 +v -0.051239 0.054621 -0.036189 +v -0.055203 0.053819 -0.036034 +v -0.057067 0.051490 -0.036010 +v -0.065064 0.055148 -0.033496 +v -0.061859 0.087638 -0.023826 +v -0.070511 0.030843 0.004786 +v -0.042353 0.074585 -0.034906 +v 0.025280 0.053971 -0.038209 +v -0.018516 0.144469 -0.038516 +v -0.003010 0.056085 -0.050508 +v -0.030613 0.135152 -0.031263 +v -0.017547 0.055527 -0.052938 +v -0.032644 0.055374 -0.039903 +v -0.038201 0.056939 -0.038106 +v -0.037577 0.053960 -0.036809 +v -0.042842 0.055788 -0.036377 +v -0.036320 0.001649 -0.045090 +v -0.030348 0.001302 -0.043625 +v -0.040029 0.001814 -0.044125 +v -0.032917 0.001394 -0.044208 +v -0.027398 0.001308 -0.040998 +v -0.022754 0.001378 -0.040343 +v -0.018731 0.001352 -0.039433 +v -0.014601 0.001508 -0.038851 +v -0.010589 0.001562 -0.038121 +v -0.000795 0.001758 -0.036454 +v 0.012682 0.002524 -0.034190 +v -0.007762 0.001636 -0.037635 +v -0.043616 0.002205 -0.040859 +v -0.035393 0.001404 -0.042421 +v -0.024842 0.001662 -0.035913 +v -0.019484 0.001527 -0.036135 +v -0.014985 0.001699 -0.035383 +v -0.009336 0.001872 -0.034328 +v -0.002561 0.001971 -0.033069 +v 0.003877 0.001980 -0.032118 +v 0.009684 0.001976 -0.030278 +v 0.015684 0.002528 -0.028912 +v -0.040350 0.001346 -0.039957 +v -0.033740 0.001529 -0.035926 +v -0.029022 0.001490 -0.036773 +v -0.019412 0.002293 -0.034221 +v -0.015844 0.002371 -0.033619 +v -0.011445 0.002456 -0.032853 +v 0.008504 0.002308 -0.028595 +v 0.014027 0.002346 -0.032554 +v -0.045044 0.001934 -0.037192 +v -0.044437 0.001340 -0.036205 +v -0.026342 0.002826 -0.034567 +v -0.008344 0.003533 -0.031557 +v 0.000867 0.002623 -0.030703 +v 0.004406 0.002533 -0.030006 +v 0.011959 0.002065 -0.026358 +v -0.037242 0.001558 -0.034698 +v -0.004154 0.002539 -0.031599 +v 0.007102 0.005315 -0.026725 +v 0.014628 0.002238 -0.020932 +v -0.040903 0.001565 -0.029950 +v -0.032115 0.003306 -0.033734 +v -0.026276 0.006104 -0.032453 +v -0.020248 0.005444 -0.032449 +v -0.009995 0.005728 -0.030631 +v -0.002938 0.006702 -0.028508 +v -0.000454 0.005514 -0.029416 +v 0.011264 0.002213 -0.021709 +v -0.046721 0.002546 -0.032475 +v -0.036181 0.002239 -0.032415 +v -0.029527 0.005669 -0.032522 +v -0.022340 0.006465 -0.031210 +v -0.006703 0.006861 -0.028429 +v 0.002239 0.006264 -0.028021 +v 0.010207 0.002765 -0.025483 +v 0.018814 0.002839 -0.021208 +v -0.046318 0.001514 -0.031336 +v -0.045697 0.001368 -0.027518 +v -0.028506 0.006578 -0.030723 +v -0.017935 0.006511 -0.030655 +v -0.013960 0.006593 -0.029893 +v -0.011773 0.006806 -0.027544 +v -0.000980 0.007059 -0.026239 +v 0.006529 0.006407 -0.022874 +v 0.009334 0.002992 -0.022083 +v 0.017424 0.002839 -0.021139 +v 0.020000 0.002957 -0.018566 +v -0.048335 0.001729 -0.028955 +v -0.039732 0.001908 -0.029386 +v -0.038422 0.002889 -0.028625 +v -0.031880 0.006256 -0.030962 +v -0.025552 0.006431 -0.026628 +v -0.004001 0.006915 -0.023849 +v 0.004346 0.006569 -0.026114 +v 0.008832 0.001960 -0.014469 +v 0.020478 0.002709 -0.015478 +v 0.021426 0.002689 -0.015910 +v -0.050545 0.001517 -0.027440 +v -0.034316 0.005988 -0.029492 +v -0.017104 0.006604 -0.024631 +v -0.000868 0.007011 -0.022050 +v 0.002330 0.007141 -0.023477 +v 0.004324 0.006726 -0.020272 +v 0.006119 0.005959 -0.020757 +v 0.006431 0.003249 -0.018260 +v 0.007171 0.002417 -0.017444 +v 0.016321 0.002094 -0.015394 +v 0.018273 0.002156 -0.012368 +v 0.022788 0.002722 -0.013792 +v 0.024891 0.003926 -0.014432 +v 0.028007 0.004560 -0.014384 +v 0.030946 0.005958 -0.015544 +v 0.036135 0.007456 -0.015514 +v -0.055839 0.001920 -0.026262 +v -0.052812 0.001601 -0.026099 +v -0.035995 0.006058 -0.027234 +v -0.032552 0.006439 -0.027337 +v -0.021130 0.006309 -0.019804 +v 0.014412 0.001973 -0.013201 +v 0.022353 0.002359 -0.011144 +v 0.025289 0.002747 -0.011418 +v -0.058816 0.001543 -0.025181 +v -0.057379 0.001404 -0.024972 +v -0.055493 0.001237 -0.022714 +v -0.048975 0.001364 -0.025529 +v -0.043719 0.001536 -0.020029 +v -0.041682 0.001852 -0.023824 +v -0.041719 0.001889 -0.020451 +v -0.039765 0.003083 -0.024897 +v -0.032453 0.006227 -0.018805 +v 0.003251 0.002830 -0.013517 +v 0.006820 0.001902 -0.011401 +v 0.009520 0.002511 -0.011379 +v 0.013526 0.002363 -0.011628 +v 0.015604 0.003765 -0.010943 +v 0.025827 0.002587 -0.009234 +v 0.029847 0.003052 -0.008531 +v 0.031231 0.004048 -0.010996 +v -0.062425 0.001570 -0.023841 +v -0.060709 0.001418 -0.023457 +v -0.051253 0.001259 -0.023910 +v -0.039670 0.004000 -0.021919 +v -0.029129 0.006212 -0.023663 +v -0.009167 0.006658 -0.019716 +v 0.003408 0.005714 -0.016965 +v 0.019200 0.003579 -0.008684 +v 0.021344 0.002266 -0.009273 +v 0.022945 0.002089 -0.006409 +v 0.040073 0.006918 -0.010362 +v -0.063726 0.001590 -0.022569 +v -0.038016 0.006127 -0.022062 +v -0.027065 0.006137 -0.016951 +v -0.022685 0.006390 -0.024132 +v -0.003348 0.006664 -0.014773 +v 0.003180 0.002020 -0.010738 +v 0.004331 0.001879 -0.011433 +v 0.007838 0.002466 -0.009436 +v 0.025053 0.002170 -0.004943 +v 0.032930 0.003361 -0.005595 +v -0.079560 0.079332 0.031056 +v -0.053400 0.001266 -0.017965 +v -0.046619 0.001390 -0.019907 +v -0.040965 0.001663 -0.016328 +v -0.036504 0.006111 -0.020037 +v -0.019542 0.006233 -0.015860 +v -0.015388 0.006473 -0.018706 +v -0.014608 0.006245 -0.014999 +v 0.000071 0.006715 -0.015542 +v 0.000289 0.005677 -0.012636 +v 0.006085 0.002798 -0.008011 +v 0.008937 0.004054 -0.009514 +v 0.022402 0.003572 -0.003949 +v 0.033732 0.003394 -0.002671 +v 0.038393 0.005444 -0.004037 +v -0.048942 0.001423 -0.015379 +v -0.040108 0.001579 -0.014277 +v -0.024538 0.006108 -0.012473 +v -0.005928 0.006490 -0.011379 +v 0.004847 0.001917 -0.005809 +v 0.024912 0.002523 -0.000556 +v 0.027816 0.002443 -0.003930 +v 0.036462 0.004655 -0.001285 +v 0.048343 0.010575 -0.002852 +v -0.065975 0.001396 -0.018475 +v -0.056353 0.001239 -0.016873 +v -0.046435 0.001508 -0.014047 +v -0.038081 0.001458 -0.011482 +v -0.034521 0.006071 -0.016168 +v -0.031534 0.006153 -0.014912 +v -0.009282 0.006322 -0.007641 +v -0.002751 0.006265 -0.008450 +v 0.000747 0.002847 -0.009171 +v 0.000056 0.002544 -0.004646 +v 0.003353 0.002004 -0.004776 +v 0.004746 0.001975 -0.003427 +v -0.068963 0.001494 -0.017441 +v -0.062769 0.001170 -0.018295 +v -0.049724 0.001274 -0.010206 +v -0.035233 0.001551 -0.009666 +v -0.030569 0.006015 -0.011785 +v -0.012388 0.006260 -0.009866 +v 0.005349 0.001773 -0.000562 +v 0.030616 0.003037 0.000006 +v -0.071324 0.002113 -0.014629 +v -0.066760 0.001224 -0.013870 +v -0.044274 0.001313 -0.010300 +v -0.020555 0.006083 -0.009313 +v -0.016154 0.006209 -0.009606 +v 0.022254 0.004325 -0.000547 +v 0.023786 0.002476 0.002636 +v 0.039471 0.006462 0.001530 +v 0.044585 0.008602 -0.000932 +v 0.044182 0.009164 0.004084 +v 0.047791 0.010716 0.003446 +v -0.054924 0.038016 0.024175 +v -0.058143 0.001369 -0.012245 +v -0.047668 0.001347 -0.008647 +v -0.038137 0.001504 -0.005981 +v -0.033841 0.001578 -0.006893 +v -0.028178 0.005909 -0.008384 +v -0.023707 0.005854 -0.003725 +v -0.004693 0.006272 -0.004153 +v -0.002814 0.005607 -0.005331 +v 0.003462 0.001834 -0.001454 +v 0.021348 0.004005 0.002856 +v 0.028070 0.002961 0.002826 +v 0.029077 0.003811 0.005399 +v -0.071319 0.001861 -0.012054 +v -0.069960 0.001676 -0.008585 +v -0.059677 0.001260 -0.013403 +v -0.051590 0.001364 -0.006598 +v -0.043048 0.001698 -0.007756 +v -0.031298 0.001724 -0.003651 +v -0.013893 0.006165 -0.004972 +v -0.008085 0.006211 0.000359 +v -0.000713 0.003247 -0.000052 +v 0.005122 0.001955 0.003594 +v 0.007157 0.002131 0.002188 +v 0.008546 0.002678 0.003600 +v 0.018960 0.003952 0.004607 +v 0.021324 0.002562 0.005385 +v 0.024039 0.003056 0.007826 +v 0.040547 0.007968 0.006356 +v -0.072711 0.003382 -0.013423 +v -0.049184 0.001943 -0.006720 +v -0.046177 0.003536 -0.006639 +v -0.039982 0.003038 -0.005094 +v -0.034533 0.001630 -0.001583 +v 0.000255 0.003365 0.003411 +v 0.001249 0.002399 0.002172 +v 0.003791 0.002512 0.005884 +v 0.007546 0.002204 0.005733 +v 0.013262 0.002347 0.006986 +v 0.017694 0.002480 0.007496 +v 0.034751 0.005472 0.005729 +v -0.089954 0.083482 0.013418 +v -0.050012 0.002913 -0.004835 +v -0.038341 0.003865 -0.003409 +v -0.035403 0.001494 -0.003200 +v -0.033062 0.001523 -0.000904 +v -0.029978 0.001959 0.001487 +v -0.017986 0.006100 -0.004573 +v -0.012428 0.006071 0.000396 +v -0.003824 0.006140 0.000206 +v -0.002747 0.005529 0.000429 +v 0.010525 0.002617 0.005961 +v 0.028650 0.005676 0.010510 +v 0.031673 0.005845 0.009321 +v 0.049892 0.012818 0.006307 +v -0.072477 0.002931 -0.008755 +v -0.067245 0.001812 -0.003501 +v -0.034592 0.001807 0.000510 +v -0.021442 0.005881 0.003338 +v -0.002401 0.006265 0.004765 +v -0.001088 0.005688 0.005016 +v 0.006281 0.002646 0.008746 +v 0.039269 0.008726 0.010163 +v 0.042816 0.010068 0.009030 +v -0.063333 0.001492 -0.006185 +v -0.058324 0.001420 -0.004280 +v -0.052787 0.001482 -0.002868 +v -0.035706 0.003702 0.000151 +v -0.024534 0.005799 0.005177 +v -0.015193 0.006119 0.001485 +v -0.000299 0.006390 0.007366 +v 0.002051 0.003628 0.006515 +v 0.010103 0.002551 0.011116 +v 0.013296 0.002615 0.013827 +v 0.020503 0.003006 0.013384 +v 0.035539 0.009510 0.013282 +v -0.074745 0.035375 0.004974 +v -0.054739 0.001347 0.000685 +v -0.032133 0.001871 0.006568 +v -0.028894 0.003214 0.002843 +v -0.026600 0.005580 0.001174 +v 0.004226 0.004248 0.009303 +v 0.007563 0.003094 0.010679 +v 0.011576 0.003147 0.014579 +v 0.022322 0.003997 0.013407 +v 0.025270 0.006057 0.014585 +v 0.045684 0.011664 0.009591 +v -0.085303 0.048173 0.005532 +v -0.080927 0.077477 0.020572 +v -0.069587 0.002993 -0.002972 +v -0.063672 0.001832 0.000109 +v -0.054930 0.001438 0.004067 +v -0.053835 0.000814 0.003372 +v -0.035807 0.002852 0.004510 +v -0.033670 0.001667 0.005007 +v -0.030712 0.002500 0.007008 +v 0.002775 0.006414 0.010486 +v 0.007225 0.006686 0.014340 +v 0.031121 0.007694 0.012264 +v 0.039177 0.011371 0.014391 +v 0.043331 0.012839 0.013263 +v -0.065842 0.002440 0.000169 +v -0.028674 0.005418 0.006093 +v -0.020686 0.006030 0.008892 +v -0.018194 0.006022 0.005141 +v -0.014990 0.006107 0.007547 +v -0.007022 0.006316 0.007610 +v 0.000370 0.006665 0.010742 +v 0.019506 0.003039 0.018265 +v 0.025911 0.007453 0.016859 +v 0.027623 0.008772 0.016474 +v 0.031924 0.009521 0.013640 +v -0.052377 0.032837 0.020186 +v -0.058621 0.030992 0.015165 +v -0.059872 0.001712 0.003969 +v -0.053272 0.001425 0.006297 +v -0.036188 0.002987 0.007675 +v -0.035602 0.001917 0.009617 +v -0.035264 0.001982 0.012213 +v -0.028333 0.005429 0.008210 +v -0.028530 0.005929 0.014563 +v 0.004494 0.006979 0.013592 +v 0.013803 0.002578 0.018264 +v 0.041878 0.015357 0.017158 +v -0.073751 0.077914 0.028674 +v -0.088429 0.079961 0.020451 +v -0.090230 0.081571 0.019115 +v -0.072874 0.074374 0.022748 +v -0.062714 0.002974 0.005400 +v -0.061792 0.002039 0.004110 +v -0.056594 0.001526 0.006195 +v -0.037366 0.003442 0.009619 +v -0.038260 0.002005 0.012500 +v -0.030155 0.003917 0.009124 +v -0.019398 0.006256 0.013371 +v -0.016258 0.006443 0.015312 +v 0.009143 0.006061 0.016297 +v 0.010110 0.004476 0.018310 +v 0.011270 0.003086 0.018800 +v 0.022251 0.005207 0.019967 +v -0.061082 0.034109 0.019272 +v -0.071893 0.114747 -0.038321 +v -0.084449 0.078183 0.023020 +v -0.087807 0.081695 0.013846 +v -0.062578 0.002489 0.007063 +v -0.041531 0.001704 0.012346 +v -0.032808 0.002386 0.011691 +v -0.031964 0.003600 0.013400 +v -0.030233 0.005539 0.013005 +v -0.010815 0.006311 0.011213 +v 0.000786 0.007002 0.016114 +v 0.007401 0.006973 0.016072 +v 0.008920 0.006129 0.018762 +v 0.008520 0.002676 0.021741 +v 0.010747 0.002403 0.025243 +v 0.017180 0.002764 0.022967 +v 0.019594 0.003860 0.023303 +v -0.079432 0.043460 0.012478 +v -0.063341 0.029243 -0.014910 +v -0.064044 0.003038 0.008125 +v -0.063077 0.002135 0.010603 +v -0.055351 0.002016 0.012234 +v -0.051355 0.001662 0.011451 +v -0.045160 0.001620 0.013292 +v -0.022985 0.006157 0.013781 +v -0.006490 0.006763 0.016394 +v -0.002990 0.006685 0.013862 +v 0.005131 0.007317 0.019132 +v 0.005852 0.002595 0.023028 +v -0.071153 0.115074 -0.041224 +v -0.058901 0.027421 -0.013041 +v -0.064537 0.003179 0.009709 +v -0.011793 0.006791 0.018715 +v 0.002615 0.002662 0.024121 +v 0.017451 0.003900 0.026994 +v 0.019909 0.005407 0.026381 +v -0.075666 0.079059 0.031588 +v -0.048328 0.036128 0.024611 +v -0.080036 0.076803 0.017550 +v -0.071614 0.116355 -0.049906 +v -0.073264 0.076533 0.023634 +v -0.077197 0.044700 0.017603 +v -0.065598 0.028765 -0.010512 +v -0.058595 0.001969 0.011785 +v -0.036446 0.002265 0.018296 +v -0.034423 0.002810 0.017860 +v -0.025986 0.006296 0.017199 +v -0.004218 0.007182 0.022189 +v -0.000306 0.007215 0.020440 +v -0.000911 0.002654 0.025295 +v 0.008076 0.002348 0.024875 +v 0.015230 0.002934 0.026721 +v -0.059051 0.041099 0.026490 +v -0.067959 0.030572 -0.012612 +v -0.064162 0.028207 -0.009578 +v -0.070256 0.115615 -0.046074 +v -0.060365 0.002144 0.017357 +v -0.050758 0.002203 0.014303 +v -0.045150 0.002305 0.015800 +v -0.035213 0.002254 0.020527 +v -0.031645 0.005812 0.017792 +v -0.007765 0.007216 0.022784 +v -0.004748 0.002760 0.026458 +v 0.003497 0.002400 0.027393 +v 0.006167 0.002772 0.029637 +v 0.010287 0.002680 0.028431 +v 0.016299 0.004477 0.028742 +v -0.077644 0.075643 0.019937 +v -0.072921 0.079798 0.033763 +v -0.087712 0.079801 0.026593 +v -0.041791 0.002227 0.015228 +v -0.033152 0.002287 0.023558 +v -0.027974 0.006435 0.018548 +v -0.026541 0.006791 0.022406 +v -0.017628 0.006870 0.021656 +v -0.012520 0.007244 0.024102 +v -0.008677 0.002726 0.027115 +v -0.004048 0.002385 0.029920 +v 0.000985 0.002462 0.029265 +v 0.010023 0.003673 0.030254 +v 0.013213 0.004018 0.029646 +v -0.077317 0.040381 0.012912 +v -0.074907 0.081999 0.036213 +v -0.078905 0.075250 0.017794 +v -0.085838 0.080211 0.015057 +v -0.076138 0.076294 0.023185 +v -0.073128 0.033434 -0.010922 +v -0.064937 0.027842 -0.005909 +v -0.062811 0.026687 -0.002995 +v -0.065553 0.002567 0.014479 +v -0.054769 0.002278 0.021906 +v -0.044539 0.002434 0.021092 +v -0.029429 0.006251 0.020877 +v -0.012563 0.002777 0.028088 +v -0.009550 0.002568 0.028606 +v 0.000602 0.002829 0.030780 +v 0.005454 0.003675 0.031140 +v 0.010446 0.005309 0.030323 +v -0.069819 0.078855 0.028963 +v -0.080862 0.075168 0.015104 +v -0.077475 0.082189 0.034988 +v -0.075597 0.085083 0.037837 +v -0.070719 0.031319 -0.010423 +v -0.069384 0.029438 -0.006856 +v -0.057638 0.025671 0.002336 +v -0.065982 0.002780 0.020038 +v -0.064556 0.002206 0.018555 +v -0.039474 0.002385 0.025436 +v -0.030848 0.002315 0.026274 +v -0.022525 0.006964 0.024034 +v -0.015717 0.007301 0.025221 +v -0.015320 0.002614 0.029377 +v -0.007849 0.002548 0.032371 +v 0.000240 0.003886 0.032218 +v 0.003191 0.004303 0.031720 +v 0.006165 0.005792 0.031042 +v -0.079640 0.081629 0.032138 +v -0.086959 0.079825 0.008470 +v -0.083958 0.078688 0.027177 +v -0.083684 0.078763 0.017593 +v -0.075990 0.035462 -0.008830 +v -0.074304 0.033584 -0.006960 +v -0.070803 0.029989 -0.003974 +v -0.067134 0.028132 0.000134 +v -0.046512 0.002426 0.026629 +v -0.028790 0.002518 0.028426 +v -0.024642 0.002669 0.029112 +v -0.002743 0.003161 0.032375 +v -0.075610 0.075512 0.022310 +v -0.081824 0.044347 0.008035 +v -0.068647 0.028649 -0.002177 +v -0.060740 0.026082 -0.000716 +v -0.067042 0.003568 0.017031 +v -0.065483 0.002964 0.023242 +v -0.051319 0.002407 0.022082 +v -0.043770 0.002724 0.027648 +v -0.041548 0.002563 0.026292 +v -0.038503 0.002956 0.027774 +v -0.018836 0.002596 0.030493 +v -0.014013 0.002514 0.032237 +v -0.010916 0.003272 0.034763 +v -0.008051 0.003859 0.034707 +v -0.004501 0.004151 0.033869 +v -0.051013 0.034558 0.022002 +v -0.068474 0.033411 0.012042 +v -0.063653 0.027472 0.002571 +v -0.040137 0.003778 0.028263 +v -0.035472 0.002594 0.029377 +v -0.028219 0.002747 0.032641 +v -0.023430 0.002657 0.036703 +v -0.016236 0.002708 0.034751 +v -0.067694 0.046686 0.026261 +v -0.087406 0.084629 0.032548 +v -0.068664 0.080386 0.032027 +v -0.077417 0.077623 0.029059 +v -0.081776 0.042249 -0.011563 +v -0.080179 0.039614 -0.008429 +v -0.053758 0.030247 0.015683 +v -0.074490 0.033535 -0.004214 +v -0.072516 0.032335 -0.001469 +v -0.070894 0.030388 -0.000825 +v -0.058362 0.028032 0.008522 +v -0.064158 0.003370 0.027184 +v -0.063537 0.002573 0.025580 +v -0.060826 0.002339 0.026521 +v -0.050829 0.002485 0.029628 +v -0.048080 0.002824 0.029533 +v -0.043390 0.004065 0.029656 +v -0.083843 0.081846 0.032515 +v -0.036908 0.003721 0.030308 +v -0.015851 0.003507 0.036788 +v -0.010310 0.005767 0.035225 +v -0.082287 0.078336 0.014936 +v -0.050771 0.037646 0.023731 +v -0.071581 0.037222 0.015900 +v -0.077580 0.038362 0.007354 +v -0.079660 0.077108 0.023985 +v -0.089993 0.081203 0.025361 +v -0.079742 0.038478 -0.004581 +v -0.077273 0.037089 -0.007372 +v -0.061856 0.028227 0.006850 +v -0.061048 0.002827 0.029162 +v -0.055522 0.002428 0.029861 +v -0.056799 0.035920 0.022774 +v -0.072094 0.034380 0.008469 +v -0.034590 0.003808 0.033243 +v -0.033179 0.002815 0.032816 +v -0.027698 0.002769 0.036396 +v -0.019205 0.002760 0.036450 +v -0.022304 0.126096 -0.024655 +v -0.059503 0.106066 -0.020696 +v -0.017588 0.127330 -0.025001 +v -0.068501 0.120563 -0.062570 +v -0.029155 0.129242 -0.029139 +v -0.049514 0.114809 -0.016863 +v -0.042850 0.118136 -0.019899 +v -0.013511 0.130041 -0.029092 +v -0.013162 0.132073 -0.032555 +v -0.066607 0.114396 -0.039066 +v -0.011579 0.135886 -0.037906 +v -0.062917 0.131242 -0.073937 +v -0.062483 0.119456 -0.040973 +v -0.035894 0.123857 -0.024915 +v -0.009854 0.134879 -0.036924 +v -0.071879 0.113644 -0.035076 +v -0.068586 0.112933 -0.035312 +v -0.009826 0.139848 -0.042138 +v -0.061542 0.134304 -0.074878 +v -0.063885 0.116564 -0.040016 +v -0.067057 0.119679 -0.059949 +v -0.042604 0.116426 -0.017971 +v -0.065347 0.111075 -0.026186 +v -0.061651 0.132722 -0.073130 +v -0.066578 0.120733 -0.061997 +v -0.063739 0.127165 -0.069523 +v -0.063538 0.128218 -0.071369 +v -0.026928 0.123266 -0.018854 +v -0.064239 0.118006 -0.045120 +v -0.018188 0.132429 -0.032146 +v -0.027810 0.123497 -0.022574 +v -0.068068 0.118384 -0.056916 +v -0.071127 0.112045 -0.029618 +v -0.026259 0.126131 -0.026217 +v -0.063890 0.126768 -0.066536 +v -0.064318 0.115042 -0.035837 +v -0.069422 0.113693 -0.038365 +v -0.066804 0.122956 -0.066335 +v -0.009379 0.142749 -0.043453 +v -0.036413 0.120855 -0.021925 +v -0.069129 0.109982 -0.024671 +v -0.069421 0.117128 -0.053741 +v -0.061572 0.113710 -0.019254 +v -0.047990 0.112030 -0.010791 +v -0.009535 0.137682 -0.040130 +v -0.070391 0.110847 -0.026456 +v -0.034591 0.119681 -0.016390 +v -0.072499 0.112418 -0.030472 +v -0.065237 0.124378 -0.066913 +v -0.066294 0.122009 -0.064809 +v -0.063892 0.111272 -0.024279 +v -0.066100 0.113008 -0.033009 +v -0.041067 0.116350 -0.016415 +v -0.067815 0.115418 -0.044114 +v -0.065164 0.121904 -0.056772 +v -0.062599 0.109771 -0.021210 +v -0.026198 0.123651 -0.020945 +v -0.063566 0.126509 -0.060530 +v -0.020735 0.128586 -0.028250 +v -0.014830 0.133913 -0.034342 +v -0.066888 0.109571 -0.023617 +v -0.062942 0.117078 -0.034934 +v -0.065727 0.108134 -0.022320 +v -0.050330 0.111659 -0.013384 +v -0.063310 0.111156 -0.022674 +v -0.063373 0.112572 -0.026219 +v -0.031510 0.121638 -0.020730 +v -0.070355 0.117206 -0.054563 +v -0.017797 0.129008 -0.028534 +v -0.069389 0.112463 -0.033069 +v -0.064167 0.114152 -0.032199 +v -0.062530 0.130237 -0.070390 +v -0.067306 0.116558 -0.048310 +v -0.036572 0.119214 -0.019199 +v -0.047233 0.115704 -0.017699 +v -0.021326 0.125691 -0.022831 +v -0.063220 0.114097 -0.028650 +v -0.065647 0.116073 -0.043338 +v -0.067113 0.118087 -0.052918 +v -0.065207 0.118673 -0.049424 +v -0.030878 0.124840 -0.025717 +v -0.046966 0.113392 -0.014786 +v -0.070821 0.119891 -0.060197 +v -0.062815 0.121231 -0.047386 +v -0.065549 0.112229 -0.029708 +v -0.023099 0.124804 -0.020419 +v -0.071310 0.118507 -0.058151 +v -0.039643 0.120223 -0.021799 +vt -0.100607 0.974489 +vt -0.090082 1.003329 +vt -0.074080 0.989825 +vt 0.997485 0.031388 +vt 0.997893 -0.010341 +vt 0.988386 0.018583 +vt 0.094971 -0.002317 +vt 0.029570 -0.013558 +vt 0.071212 0.039131 +vt 0.069068 -0.033794 +vt 0.034158 0.067142 +vt 0.011407 0.030423 +vt -0.010540 0.070392 +vt -0.368964 -0.015764 +vt -0.356545 0.042010 +vt -0.332974 -0.007374 +vt -0.041326 0.101497 +vt -0.061766 0.142755 +vt -0.032991 0.137846 +vt -0.317890 -0.124907 +vt -0.293453 -0.159289 +vt -0.292074 -0.135252 +vt -0.048650 0.148499 +vt -0.259120 0.235085 +vt -0.235932 0.242019 +vt -0.257608 0.222582 +vt -0.326521 -0.041636 +vt -0.296894 -0.030770 +vt -0.307355 -0.048859 +vt 1.008406 0.003559 +vt -0.155367 1.369103 +vt -0.161947 1.385657 +vt -0.177709 1.360623 +vt -0.360755 -0.243822 +vt -0.359177 -0.208783 +vt -0.340930 -0.207810 +vt -0.033000 0.161646 +vt -0.055974 0.175126 +vt -0.338444 -0.029666 +vt 0.947854 0.079664 +vt 0.976799 0.120820 +vt 0.977007 0.066090 +vt -0.309183 -0.452921 +vt -0.307461 -0.432304 +vt -0.281904 -0.457996 +vt -0.092892 -0.112584 +vt -0.119930 -0.097276 +vt -0.090743 -0.091416 +vt 0.030104 0.102013 +vt 0.066770 0.105241 +vt -0.311463 -0.318130 +vt -0.322933 -0.287385 +vt -0.295442 -0.276533 +vt 0.118278 0.074425 +vt 0.095895 0.102706 +vt 0.116400 0.117695 +vt 1.156975 0.063010 +vt 1.174555 0.078651 +vt 1.178826 0.045348 +vt -0.320512 -0.238947 +vt -0.053417 -0.140937 +vt -0.049844 -0.123594 +vt -0.024122 -0.131263 +vt -0.186079 0.508835 +vt -0.175952 0.494536 +vt -0.191031 0.493091 +vt -0.000858 -0.121231 +vt -0.020430 -0.138269 +vt 0.001495 -0.169539 +vt 0.026411 0.784338 +vt 0.007950 0.802567 +vt -0.002128 0.775119 +vt -0.045070 0.006571 +vt -0.071176 0.034462 +vt -0.054705 0.034138 +vt -0.227928 0.021889 +vt -0.244284 0.017942 +vt -0.241053 0.046725 +vt 1.033877 0.073524 +vt 1.065528 0.083650 +vt 1.039527 0.043895 +vt 0.988761 0.113813 +vt -0.339799 -0.238821 +vt 1.349464 -0.140097 +vt 1.340474 -0.102935 +vt 1.324084 -0.118009 +vt 0.802664 -0.001245 +vt 0.806943 0.038892 +vt 0.829093 0.028855 +vt -0.032812 0.025526 +vt -0.329436 -0.367410 +vt -0.313604 -0.383608 +vt -0.303748 -0.365716 +vt 0.110675 -0.046708 +vt 0.487547 -0.056360 +vt 0.501606 -0.063029 +vt 0.487980 -0.083234 +vt -0.026903 0.103020 +vt 1.050558 0.162566 +vt 1.062655 0.177966 +vt 1.084146 0.141475 +vt -0.012437 0.124329 +vt 0.075236 0.070202 +vt 0.012987 0.115856 +vt -0.086374 0.183614 +vt -0.094796 0.168389 +vt -0.080986 0.165412 +vt 0.756052 -0.006192 +vt 0.766713 0.052759 +vt 0.772545 0.023147 +vt 1.123704 0.032226 +vt 1.149592 0.031918 +vt 1.145004 0.010860 +vt 0.877269 0.028618 +vt 0.887486 -0.003218 +vt 0.862318 -0.012739 +vt 0.797951 0.014977 +vt -0.060316 0.114668 +vt 0.679956 0.160619 +vt 0.671498 0.176034 +vt 0.686437 0.176592 +vt 0.267289 0.066490 +vt 0.232863 0.066528 +vt 0.259964 0.114587 +vt 1.196078 -0.063650 +vt 1.185529 -0.048113 +vt 1.163766 -0.081551 +vt 0.084901 0.122908 +vt 0.059971 0.156504 +vt 0.085210 0.146973 +vt 0.133377 0.018567 +vt 0.159834 0.055747 +vt -0.210441 1.205691 +vt -0.195978 1.217116 +vt -0.191289 1.195143 +vt -0.292629 -0.327605 +vt 0.745904 0.054807 +vt 0.728871 0.082710 +vt 0.730006 0.044364 +vt 0.930714 0.009523 +vt 0.970585 -0.020746 +vt 0.979675 0.015834 +vt 1.299283 0.157158 +vt 1.281228 0.173228 +vt 1.290695 0.145278 +vt 1.300100 0.130681 +vt 1.294402 0.114751 +vt 0.125238 0.147761 +vt 0.118805 0.173672 +vt 0.157255 0.175072 +vt -0.352624 -0.064505 +vt -0.359638 -0.041545 +vt 1.309011 0.037286 +vt 1.288103 0.048866 +vt 1.288665 0.028750 +vt 1.302541 0.075732 +vt -0.333350 -0.354950 +vt -0.356944 -0.334644 +vt -0.339875 -0.318593 +vt 0.233724 -0.213755 +vt 0.257839 -0.219838 +vt 0.234267 -0.235088 +vt 0.902569 0.056049 +vt 0.910757 -0.000188 +vt -0.115465 0.217121 +vt -0.150037 0.187470 +vt -0.131277 0.147444 +vt -0.400984 1.115544 +vt -0.387842 1.132370 +vt -0.408245 1.137813 +vt 0.174958 0.101447 +vt 0.145446 0.094585 +vt 0.148064 0.125679 +vt 1.191807 0.019091 +vt 1.169979 0.018613 +vt 0.584979 0.072922 +vt 0.596746 0.101958 +vt 0.621784 0.090379 +vt 0.480529 0.132998 +vt 0.495315 0.108356 +vt 0.473399 0.115342 +vt -0.330014 -0.419758 +vt -0.347586 -0.424763 +vt -0.349898 -0.398455 +vt 1.200398 -0.002993 +vt 1.229640 -0.007364 +vt 1.204756 -0.038473 +vt -0.425723 1.255970 +vt -0.455637 1.262591 +vt -0.435062 1.276556 +vt 1.413642 -0.352499 +vt 1.412125 -0.327605 +vt 1.395692 -0.316000 +vt -0.389663 1.099366 +vt -0.373162 1.113025 +vt -0.377055 1.145627 +vt -0.389132 1.191644 +vt -0.405843 1.157364 +vt 1.084697 0.108568 +vt 1.099658 0.077254 +vt 1.023580 0.044216 +vt 0.052291 0.124792 +vt 0.029487 0.143297 +vt -0.198181 1.334810 +vt -0.187587 1.373917 +vt -0.308514 0.765304 +vt -0.299772 0.784484 +vt -0.277270 0.759219 +vt -0.199401 0.200586 +vt -0.215478 0.196295 +vt -0.220796 0.226971 +vt -0.370469 1.183621 +vt -0.364078 1.228703 +vt -0.381185 1.258940 +vt -0.403967 1.207117 +vt -0.373717 0.217081 +vt -0.400362 0.199191 +vt -0.381185 0.236468 +vt 0.829334 0.062870 +vt 0.603711 -0.143106 +vt 0.599357 -0.134667 +vt 0.615497 -0.127370 +vt -0.352696 -0.154958 +vt -0.215045 1.267355 +vt -0.183998 1.266426 +vt -0.203073 1.248111 +vt -0.209877 0.018570 +vt -0.234435 0.005868 +vt 0.187281 0.005366 +vt 0.209847 0.042941 +vt 0.195800 0.073233 +vt 0.744951 0.045646 +vt -0.037895 0.581383 +vt -0.054709 0.537408 +vt -0.030025 0.567212 +vt -0.292501 0.016706 +vt 0.792653 0.033331 +vt -0.207507 0.766524 +vt -0.222453 0.784741 +vt -0.188848 0.778721 +vt 1.305696 -0.131106 +vt 1.334470 -0.125353 +vt 1.329494 -0.152100 +vt -0.091022 1.328190 +vt -0.084714 1.357195 +vt -0.056789 1.334900 +vt -0.341120 1.485846 +vt -0.360724 1.486427 +vt -0.347586 1.497270 +vt -0.290142 0.859180 +vt -0.309401 0.893010 +vt -0.287508 0.907109 +vt -0.109780 0.781803 +vt -0.089589 0.797014 +vt -0.088619 0.769152 +vt -0.032078 0.060679 +vt -0.329614 -0.382181 +vt -0.307375 -0.406050 +vt 1.077178 -0.009399 +vt 1.063841 0.020035 +vt 1.094859 0.001818 +vt 0.095108 0.175267 +vt -0.289726 0.992020 +vt -0.297577 1.037946 +vt -0.273429 1.020942 +vt -0.365058 1.170354 +vt -0.359889 1.193228 +vt -0.341167 1.170107 +vt -0.291323 -0.413253 +vt -0.302016 -0.409306 +vt -0.301290 -0.428249 +vt -0.417383 -0.028283 +vt -0.383613 -0.040855 +vt -0.393615 -0.049801 +vt -0.359930 1.171354 +vt -0.343593 1.260744 +vt 0.849363 -0.065396 +vt 0.839960 -0.013461 +vt 0.825563 -0.048573 +vt -0.101041 -0.053417 +vt -0.082133 -0.068378 +vt -0.081804 -0.058170 +vt 0.165976 0.160514 +vt 1.101514 0.238622 +vt 1.083188 0.213040 +vt 1.074187 0.235072 +vt -0.054012 1.421325 +vt -0.076676 1.444221 +vt -0.038156 1.463558 +vt -0.209877 1.329990 +vt 0.161365 -0.024236 +vt 0.091414 -0.091085 +vt 0.048947 -0.084188 +vt 0.073628 -0.144517 +vt -0.362206 1.090216 +vt -0.353539 1.129050 +vt -0.344667 1.146461 +vt -0.116620 -0.105300 +vt -0.091022 -0.126575 +vt -0.094569 -0.106164 +vt -0.054912 -0.066338 +vt 0.659811 0.092235 +vt 0.697025 0.099381 +vt 0.681280 0.120407 +vt 0.870803 -0.027860 +vt 0.873968 0.045578 +vt 0.853293 0.004520 +vt -0.055654 0.091336 +vt -0.069959 0.123301 +vt -0.065353 0.088334 +vt -0.288396 1.180990 +vt -0.273314 1.232038 +vt -0.252179 1.206745 +vt -0.362038 1.063518 +vt -0.331011 1.071139 +vt -0.342487 1.098255 +vt -0.332691 1.213182 +vt 1.421118 -0.478968 +vt 1.447160 -0.472720 +vt 1.421216 -0.472038 +vt 1.210958 0.177115 +vt 1.241084 0.160946 +vt 1.219125 0.150538 +vt 1.287416 -0.166774 +vt 1.251954 -0.152070 +vt 1.272298 -0.194965 +vt -0.337754 0.974889 +vt -0.353120 0.982267 +vt -0.354210 0.956725 +vt -0.319793 1.105958 +vt -0.323913 1.128156 +vt 1.218034 -0.030615 +vt 1.229734 -0.027413 +vt 1.228631 -0.003376 +vt 0.204505 0.153207 +vt 0.189012 0.174091 +vt 0.184666 0.136275 +vt 1.228540 0.012254 +vt 1.238696 0.036930 +vt 1.252977 0.013801 +vt 0.979267 0.048678 +vt 1.002993 0.097865 +vt 0.976518 0.095213 +vt 1.158396 0.076878 +vt 1.170259 0.120552 +vt 1.146412 0.101793 +vt 0.197325 -0.051754 +vt 0.221667 -0.026509 +vt -0.300676 -0.223171 +vt -0.294122 -0.252326 +vt -0.282095 -0.229655 +vt -0.323972 1.239707 +vt -0.166602 -0.057430 +vt -0.136830 -0.079171 +vt -0.126334 -0.068552 +vt 0.939709 -0.047375 +vt 0.965866 -0.050213 +vt 1.364731 -0.397803 +vt 1.362127 -0.436989 +vt 1.391541 -0.411582 +vt -0.099287 0.649853 +vt -0.109448 0.668766 +vt -0.091181 0.665399 +vt 1.197681 0.067050 +vt -0.329723 0.950784 +vt -0.314713 0.991982 +vt -0.343451 0.990413 +vt 0.204015 0.959956 +vt 0.187258 0.962049 +vt 0.195208 0.942553 +vt -0.234965 0.796980 +vt -0.221119 0.814197 +vt -0.210440 0.797748 +vt 0.161674 0.601507 +vt 0.185594 0.617704 +vt 0.164747 0.629956 +vt 0.434985 0.649439 +vt 0.417300 0.646810 +vt 0.439594 0.610312 +vt -0.303512 0.953421 +vt -0.324961 0.915508 +vt -0.289701 1.406869 +vt -0.276468 1.399598 +vt -0.291560 1.374951 +vt -0.330277 1.007619 +vt 0.232829 0.959952 +vt 0.115023 0.592789 +vt 0.147379 0.613529 +vt 0.103423 0.617429 +vt 0.170671 0.581405 +vt 0.196577 0.578808 +vt 0.156571 0.258052 +vt 0.181448 0.257349 +vt 0.170671 0.278552 +vt 0.181448 0.564476 +vt 0.156571 0.565193 +vt 0.174575 0.552409 +vt -0.340893 -0.164505 +vt -0.319665 -0.182231 +vt -0.331525 -0.158678 +vt 0.208571 0.857537 +vt 0.219178 0.873619 +vt 0.196005 0.885069 +vt 0.595074 -0.047629 +vt 0.633774 -0.060250 +vt 0.606267 -0.028768 +vt 1.150238 0.076655 +vt 1.146666 0.118115 +vt -0.430191 1.239254 +vt 0.208249 0.125751 +vt -0.321943 0.880678 +vt -0.307717 0.899471 +vt -0.309613 1.007516 +vt 0.159339 1.071270 +vt 0.194481 1.048584 +vt 0.187818 1.087010 +vt -0.181938 -0.027413 +vt -0.173817 -0.018809 +vt -0.176226 -0.002410 +vt 1.074946 0.047564 +vt 1.119137 0.058952 +vt -0.282139 -0.122234 +vt -0.278599 -0.135472 +vt 0.733777 -0.102128 +vt 0.749615 -0.066564 +vt 0.711271 -0.078866 +vt 1.305420 -0.315608 +vt 1.305240 -0.344027 +vt 1.342628 -0.334906 +vt 0.247533 0.012364 +vt -0.303878 0.871916 +vt -0.294667 1.004806 +vt 0.136526 0.818542 +vt 0.111446 0.807293 +vt 0.124304 0.782136 +vt 0.218846 0.719971 +vt 0.177490 0.697877 +vt 0.205553 0.688293 +vt 0.200163 0.661081 +vt 0.190353 0.678560 +vt 0.166598 0.656919 +vt 0.189756 1.116429 +vt 0.157255 1.109369 +vt 0.203897 0.254916 +vt 0.196577 0.277762 +vt 0.206640 0.550797 +vt 0.203897 0.564242 +vt 0.486215 -0.051421 +vt 0.490417 -0.034072 +vt 0.474743 -0.043214 +vt 0.881941 -0.006790 +vt 0.769050 -0.096310 +vt 0.789254 -0.064854 +vt -0.020979 -0.021433 +vt 0.588927 0.196295 +vt 0.588550 0.180587 +vt 0.582865 0.209320 +vt 0.018892 0.499976 +vt 0.068161 0.537058 +vt 0.045416 0.515177 +vt -0.286517 0.931212 +vt -0.289020 0.955823 +vt 0.196045 0.770689 +vt 0.182231 0.801599 +vt 0.171534 0.771162 +vt 0.268994 0.970540 +vt 0.300444 0.977728 +vt 0.280170 1.004216 +vt 0.177455 0.733959 +vt 0.161007 0.753939 +vt 0.142252 0.734341 +vt 0.169132 0.807611 +vt 0.156357 0.785574 +vt 0.167058 0.843951 +vt 0.158836 0.872779 +vt 0.131073 0.840442 +vt 0.108386 0.554489 +vt 0.117187 0.574927 +vt 0.113895 0.730973 +vt 0.134213 0.761025 +vt 0.133040 0.664014 +vt 0.110944 0.648049 +vt 0.123593 0.630796 +vt 0.194557 0.725995 +vt -0.310397 1.252964 +vt -0.297696 1.254949 +vt -0.303952 1.287883 +vt 1.186314 0.011138 +vt 1.218972 0.015354 +vt 1.182815 0.038236 +vt 0.772457 0.031978 +vt 0.773276 -0.000010 +vt 0.814698 0.011612 +vt 0.992580 -0.034583 +vt -0.392867 0.112640 +vt -0.435843 0.116778 +vt -0.396995 0.150432 +vt -0.303884 0.837614 +vt -0.289307 0.867414 +vt -0.268794 0.899222 +vt 0.154699 0.661868 +vt 0.174095 0.673878 +vt 0.145701 0.676807 +vt 0.139611 1.061625 +vt 0.118854 1.075698 +vt 0.127434 0.690366 +vt 0.203540 0.644901 +vt 0.208506 0.614778 +vt 0.211163 0.777032 +vt 0.213237 0.814873 +vt 0.807919 -0.082113 +vt 0.862690 -0.085142 +vt 0.872881 -0.064533 +vt -0.010137 1.422476 +vt -0.053016 1.417243 +vt -0.047512 1.396374 +vt 0.662658 -0.038841 +vt 0.654085 -0.019771 +vt -0.067989 0.078875 +vt -0.084617 0.121172 +vt -0.093205 0.147702 +vt 0.134780 0.007109 +vt 0.135236 0.046426 +vt 0.127887 0.044906 +vt -0.282023 0.820087 +vt 0.143600 0.694205 +vt 0.198556 -0.112641 +vt 0.183505 -0.094882 +vt 0.183654 -0.134760 +vt 0.325356 0.537341 +vt 0.313441 0.546878 +vt 0.343928 0.569736 +vt 0.148360 0.632539 +vt 0.188027 0.287004 +vt 0.215164 0.278382 +vt 0.195208 0.268246 +vt 0.238170 0.885327 +vt 0.210415 0.910235 +vt 0.233678 0.898028 +vt 0.618622 0.046550 +vt 0.634304 0.048607 +vt 0.635588 0.016736 +vt -0.098026 -0.061741 +vt -0.135324 -0.058047 +vt -0.126719 -0.045286 +vt -0.264412 0.868909 +vt -0.268363 0.930293 +vt 0.439850 0.587564 +vt 0.469780 0.618148 +vt 0.111630 0.834465 +vt 0.229786 0.625107 +vt 0.214235 0.589296 +vt 0.272002 0.910983 +vt 0.255860 0.961994 +vt 0.244966 0.929206 +vt 0.161712 0.969338 +vt 0.153839 1.000907 +vt 0.135085 0.992275 +vt -0.251610 0.132517 +vt -0.238751 0.075859 +vt -0.267164 0.091579 +vt 0.801951 0.081262 +vt 0.799948 0.056797 +vt 0.785371 0.057573 +vt -0.275646 0.769845 +vt -0.273401 0.791300 +vt -0.308096 0.801417 +vt -0.261893 0.959313 +vt -0.262881 0.982382 +vt -0.270139 1.018371 +vt 0.935385 0.044169 +vt 0.178039 1.018518 +vt 0.152225 1.036994 +vt 0.152774 0.955335 +vt 0.148068 0.967440 +vt 0.446505 -0.036328 +vt 0.445013 -0.007078 +vt 0.427525 -0.027233 +vt 0.191151 0.298601 +vt 1.220496 -0.069122 +vt 1.207503 -0.045925 +vt 0.252294 1.004565 +vt 0.262272 1.041974 +vt 0.244209 1.032374 +vt 0.120459 0.897074 +vt 0.153892 0.923489 +vt 0.107483 0.917080 +vt 1.054327 0.005754 +vt -0.262808 -0.014229 +vt -0.244271 -0.009734 +vt -0.247315 -0.036132 +vt 1.206756 0.108491 +vt 1.216858 0.083565 +vt 1.204029 0.085177 +vt -0.014738 0.159322 +vt -0.260082 0.815342 +vt -0.247937 0.837968 +vt 0.184661 0.986505 +vt 0.170864 0.956625 +vt 0.120537 1.027331 +vt 0.805094 -0.020282 +vt 0.766654 -0.043403 +vt 0.256690 1.077888 +vt 0.240640 1.054304 +vt -0.316938 -0.102935 +vt -0.330077 -0.067558 +vt -0.311450 -0.079182 +vt 0.013747 -0.033997 +vt -0.247678 0.876592 +vt -0.237194 0.908082 +vt -0.250294 0.931774 +vt -0.239451 0.977748 +vt -0.246452 1.027997 +vt -0.262662 1.036183 +vt 1.283191 -0.293869 +vt 1.279187 -0.317725 +vt 0.117187 0.265374 +vt 0.151616 0.264845 +vt 0.144720 0.283057 +vt -0.242632 0.779225 +vt -0.237784 0.801933 +vt 0.103257 0.992616 +vt 0.187258 0.248350 +vt 0.170864 0.247250 +vt 0.180163 0.262922 +vt 0.240391 0.945169 +vt 1.273818 -0.255435 +vt 1.286577 -0.259857 +vt 1.267232 -0.263669 +vt 0.133255 1.099212 +vt 0.115023 0.283007 +vt 0.488798 -0.005243 +vt 0.204015 0.259122 +vt 0.206202 0.228103 +vt 0.906408 -0.090865 +vt 0.947673 -0.079220 +vt -0.066861 -0.108490 +vt -0.043249 -0.107883 +vt -0.239388 0.850733 +vt -0.228048 0.891557 +vt -0.226776 0.948934 +vt -0.219586 0.997573 +vt -0.231369 1.040533 +vt 0.171621 0.906505 +vt 0.191151 0.922458 +vt 0.180163 0.945789 +vt 0.223722 0.263292 +vt -0.110574 1.345106 +vt -0.382247 1.053390 +vt -0.374272 1.073422 +vt -0.364302 1.047303 +vt -0.388199 1.125284 +vt -0.415737 1.135919 +vt -0.384688 1.147358 +vt -0.221404 0.869758 +vt -0.095654 -0.087554 +vt 0.910868 -0.037875 +vt 0.161674 0.297244 +vt 0.147379 0.311741 +vt 0.100462 0.696337 +vt 0.436747 0.680960 +vt -0.322006 -0.394592 +vt -0.284021 -0.176293 +vt -0.297215 -0.181820 +vt -0.285049 -0.201129 +vt -0.117844 -0.082231 +vt -0.225521 0.209320 +vt -0.244295 0.216348 +vt -0.024726 1.442928 +vt -0.217370 0.772021 +vt -0.249093 0.763278 +vt -0.226877 0.820692 +vt -0.218796 0.922558 +vt 0.203498 1.073136 +vt 0.230767 1.087140 +vt 0.213632 1.101777 +vt -0.403989 1.169726 +vt -0.423579 1.179023 +vt -0.392499 1.187337 +vt -0.054981 1.405290 +vt -0.032542 1.404430 +vt -0.220928 0.742232 +vt -0.129619 0.222966 +vt -0.119986 0.236421 +vt -0.144788 0.232225 +vt -0.217461 0.816873 +vt -0.212756 0.845705 +vt -0.199138 1.014156 +vt -0.215499 1.037914 +vt 0.255860 0.262967 +vt 0.231422 0.239875 +vt 0.232829 0.267376 +vt 0.215164 0.930403 +vt 0.969895 -0.066846 +vt 0.980977 -0.098385 +vt 0.995791 -0.077687 +vt 0.160589 0.291589 +vt -0.260430 1.228292 +vt -0.255531 1.242982 +vt 0.297082 0.922902 +vt 0.632868 -0.200295 +vt 0.668260 -0.188887 +vt 0.646944 -0.173659 +vt -0.025255 1.343708 +vt -0.001791 1.366696 +vt 0.012451 1.360467 +vt 1.244637 0.102458 +vt 1.239674 0.085692 +vt 0.459313 0.631132 +vt 0.470219 0.664381 +vt -0.214096 0.532835 +vt -0.238147 0.547910 +vt -0.240004 0.528670 +vt -0.205627 0.562808 +vt -0.235932 0.572864 +vt 0.465697 0.678595 +vt -0.210690 0.909904 +vt 0.268994 0.252802 +vt 0.231422 0.987078 +vt 0.452362 0.709629 +vt 0.460222 0.731289 +vt 0.448697 0.720471 +vt 1.195163 0.066323 +vt -0.084615 0.696210 +vt -0.118583 -0.200099 +vt -0.106089 -0.214615 +vt -0.129167 -0.207922 +vt 0.279513 0.883378 +vt -0.043039 0.527762 +vt -0.067552 0.509202 +vt -0.040673 0.513425 +vt -0.296463 -0.108121 +vt -0.308514 -0.150684 +vt -0.286717 -0.133408 +vt -0.414013 1.044021 +vt -0.405110 1.058254 +vt -0.395460 1.023866 +vt -0.201719 0.807625 +vt -0.197913 0.828156 +vt -0.208792 0.879677 +vt -0.206773 0.948315 +vt -0.205706 0.996344 +vt -0.197016 1.056214 +vt -0.230676 1.049895 +vt 0.114316 0.962485 +vt 1.207666 -0.020099 +vt 0.731305 -0.209820 +vt 0.724554 -0.188961 +vt 0.705096 -0.192598 +vt -0.146481 -0.024887 +vt -0.135556 -0.043866 +vt -0.120648 -0.036483 +vt 1.241543 -0.135472 +vt 1.239199 -0.159289 +vt -0.201442 0.231001 +vt -0.203541 0.181291 +vt -0.200418 0.160619 +vt -0.191826 0.176592 +vt -0.045022 1.364948 +vt -0.194686 0.768135 +vt -0.197795 0.892666 +vt -0.197573 0.968205 +vt 0.252294 0.222111 +vt 0.225233 0.222378 +vt -0.290028 -0.389552 +vt -0.301950 -0.370003 +vt -0.286836 -0.352499 +vt 0.245847 1.025256 +vt 0.208083 0.997377 +vt 0.222842 1.029281 +vt -0.185004 0.861349 +vt -0.180939 0.913144 +vt -0.185753 0.941708 +vt -0.187218 0.982262 +vt -0.173483 1.031400 +vt -0.200424 0.185558 +vt -0.168426 -0.077318 +vt -0.138509 -0.092332 +vt 0.214043 1.005707 +vt 0.229208 1.040214 +vt -0.343524 -0.112944 +vt -0.326503 -0.137091 +vt -0.205627 0.251723 +vt -0.180992 0.227880 +vt -0.184768 0.597250 +vt -0.184555 0.611571 +vt -0.199401 0.597708 +vt -0.308921 -0.257626 +vt -0.180239 0.793341 +vt -0.183065 0.847130 +vt 0.115236 0.679288 +vt 0.182946 0.854387 +vt 0.293700 0.998058 +vt 0.301496 1.028275 +vt 0.284599 1.017910 +vt 0.393587 0.605551 +vt 0.475931 0.646815 +vt 0.300245 0.501089 +vt 0.300339 0.514817 +vt 0.312547 0.514470 +vt -0.173324 1.074711 +vt -0.169310 1.060171 +vt -0.158087 1.087049 +vt 0.424838 0.594149 +vt -0.216373 0.703486 +vt -0.207329 0.715574 +vt -0.192522 0.705562 +vt -0.177265 0.823150 +vt -0.176302 0.888956 +vt -0.174650 0.963840 +vt 0.416643 0.576107 +vt 0.480529 0.716435 +vt -0.051851 0.105775 +vt 0.257078 0.783594 +vt 0.279942 0.780718 +vt 0.272057 0.805874 +vt -0.170856 0.209397 +vt -0.184768 0.202348 +vt -0.170856 0.595146 +vt 0.847857 0.046025 +vt 0.843530 0.026050 +vt 1.266978 0.077372 +vt -0.164130 0.773070 +vt -0.175051 0.756820 +vt -0.163867 0.839818 +vt -0.168333 0.865268 +vt -0.172597 1.001843 +vt -0.263738 1.050875 +vt 0.151616 0.574693 +vt -0.175780 1.308434 +vt -0.170451 1.340750 +vt 1.448460 -0.442157 +vt 1.463499 -0.430419 +vt 1.417888 -0.399536 +vt -0.167108 0.612598 +vt -0.170773 0.629081 +vt -0.304127 -0.317725 +vt -0.319883 -0.323341 +vt -0.310648 -0.345014 +vt -0.162838 0.820310 +vt -0.158236 0.910932 +vt -0.162305 0.942233 +vt 0.282301 0.920868 +vt 0.233724 0.933056 +vt 0.253703 0.948892 +vt -0.064106 0.520351 +vt -0.082221 0.547790 +vt -0.050430 0.548934 +vt 0.090259 -0.190827 +vt 0.075862 -0.180760 +vt 0.051701 -0.198026 +vt 0.283552 1.058989 +vt 0.214235 0.279824 +vt 0.307301 0.885719 +vt -0.145902 1.402800 +vt 0.029839 1.386700 +vt -0.012960 1.389426 +vt 0.025669 1.406553 +vt -0.177100 0.557309 +vt -0.155190 0.559928 +vt -0.180992 0.577391 +vt -0.381570 1.067380 +vt -0.154698 0.796785 +vt -0.152404 0.880995 +vt -0.153867 0.973756 +vt 1.496558 -0.247714 +vt 1.476077 -0.257499 +vt 1.486463 -0.258409 +vt 0.074952 1.410296 +vt 0.086912 1.437343 +vt 0.088900 1.422559 +vt -0.298536 -0.398888 +vt 0.144720 0.589534 +vt -0.147300 0.588782 +vt -0.152145 0.748380 +vt -0.141631 0.987919 +vt -0.133245 1.020470 +vt -0.139064 1.070172 +vt 0.280170 0.215873 +vt 0.189132 0.833762 +vt 1.163433 -0.022180 +vt 1.180909 -0.027236 +vt -0.142440 0.619131 +vt 1.172574 -0.010617 +vt 1.186676 -0.029135 +vt 1.161296 -0.028941 +vt -0.155126 0.717145 +vt -0.131986 0.726364 +vt -0.139859 0.770811 +vt -0.141033 0.820697 +vt -0.145154 0.849650 +vt -0.143447 0.950221 +vt -0.119412 1.046667 +vt -0.139064 0.154875 +vt -0.158087 0.131281 +vt -0.169310 0.160425 +vt 0.505536 0.015307 +vt 0.483978 0.024027 +vt 0.236744 0.598318 +vt 0.223722 0.580016 +vt -0.139451 1.384793 +vt -0.133121 0.666377 +vt -0.147184 0.662489 +vt -0.128383 0.793861 +vt -0.126794 0.929138 +vt -0.120944 0.152904 +vt -0.138575 0.119399 +vt 0.676891 -0.011046 +vt 0.659287 0.019143 +vt 0.452362 0.128547 +vt 0.570585 0.055607 +vt 0.583933 0.061589 +vt 0.590640 0.041604 +vt 1.242492 0.017794 +vt 1.265668 0.020426 +vt 1.270042 0.045032 +vt -0.134029 0.559735 +vt -0.126122 0.598041 +vt -0.131538 0.688732 +vt -0.155969 0.677805 +vt -0.132350 0.842109 +vt -0.137283 0.874521 +vt -0.127220 0.904777 +vt -0.121168 0.966410 +vt -0.120944 1.075771 +vt 0.662233 -0.068408 +vt 0.303977 0.851593 +vt -0.114647 1.416278 +vt -0.126719 1.422487 +vt -0.116523 0.622907 +vt -0.117437 0.811896 +vt -0.127802 0.863289 +vt -0.109312 1.009720 +vt 0.225233 0.998053 +vt -0.129046 1.383336 +vt -0.119367 1.400589 +vt 0.600349 0.153134 +vt 0.597736 0.175284 +vt 0.609646 0.167671 +vt 0.189756 0.168328 +vt 0.244158 0.153661 +vt 1.246357 -0.013455 +vt 1.245729 -0.037601 +vt 1.228820 -0.036248 +vt -0.125071 0.567418 +vt -0.111803 0.663022 +vt -0.115938 0.714405 +vt -0.095276 0.722284 +vt -0.115216 0.763867 +vt -0.116319 0.829583 +vt -0.104101 0.853241 +vt -0.117388 0.920099 +vt -0.221297 1.230109 +vt -0.094802 0.693347 +vt -0.102407 0.801036 +vt 0.206202 0.988329 +vt -0.098026 1.444770 +vt -0.103244 1.431704 +vt -0.116314 0.557375 +vt -0.107599 0.563178 +vt -0.093685 0.623102 +vt -0.091295 0.760844 +vt -0.105770 0.879237 +vt -0.097536 0.903271 +vt -0.101569 0.947714 +vt -0.100775 0.983806 +vt -0.104259 1.407245 +vt -0.091604 0.585540 +vt -0.090944 0.598076 +vt -0.089969 0.791898 +vt -0.095194 0.820296 +vt -0.087603 0.932229 +vt -0.092943 1.017426 +vt -0.094748 1.050087 +vt -0.093205 1.083330 +vt -0.109571 1.099354 +vt 0.532755 -0.156139 +vt 0.545508 -0.132022 +vt 0.508923 -0.122807 +vt 0.090373 1.092508 +vt -0.093254 1.428050 +vt 1.379086 -0.455688 +vt 1.410467 -0.432843 +vt -0.082694 0.668771 +vt -0.081520 0.846350 +vt -0.089633 0.872558 +vt -0.079931 0.884040 +vt -0.085182 0.966956 +vt -0.071066 1.064665 +vt 0.161235 -0.051346 +vt -0.069942 0.649266 +vt -0.080769 0.734054 +vt -0.078045 0.856209 +vt -0.080933 1.447423 +vt 1.427742 -0.064367 +vt 1.436874 -0.086928 +vt 1.442046 -0.073993 +vt -0.071680 0.819931 +vt -0.070115 0.919867 +vt -0.064572 0.939360 +vt -0.066233 0.997110 +vt 0.001738 -0.124801 +vt 0.032502 -0.151278 +vt 0.033933 -0.127161 +vt -0.077816 1.437355 +vt 1.085070 0.126147 +vt 1.114166 0.104449 +vt 1.108866 0.116467 +vt -0.061102 -0.098009 +vt -0.065421 0.615721 +vt -0.068574 0.689447 +vt -0.059701 0.809702 +vt -0.061280 0.965598 +vt -0.055974 1.047474 +vt 0.133255 0.189023 +vt 0.829349 0.006110 +vt 0.822110 -0.013089 +vt -0.057132 0.722769 +vt -0.064660 0.762544 +vt -0.057034 0.793624 +vt -0.065548 0.844945 +vt -0.054423 0.856067 +vt -0.064432 0.907810 +vt -0.038162 1.002475 +vt 0.517946 -0.047629 +vt 0.521894 -0.027055 +vt 0.586666 -0.027055 +vt 0.218029 0.664224 +vt -0.065662 1.451660 +vt -0.069469 1.460839 +vt -0.071959 1.471275 +vt -0.060642 1.466087 +vt -0.053427 1.483505 +vt 0.792953 0.081162 +vt 0.752340 0.088603 +vt 0.757893 0.071980 +vt 1.276474 -0.332479 +vt 1.286100 -0.329877 +vt 1.282051 -0.353443 +vt -0.049225 0.634172 +vt -0.040343 0.666888 +vt -0.047964 0.873167 +vt 0.875382 0.031250 +vt 0.916858 -0.006875 +vt 0.489354 0.697684 +vt -0.258407 0.119184 +vt -0.250126 0.088647 +vt -0.265250 0.102213 +vt -0.069469 -0.075162 +vt -0.060642 -0.080582 +vt -0.071959 -0.087935 +vt 0.493306 -0.083234 +vt 0.507692 -0.083253 +vt 0.505204 -0.072137 +vt -0.041338 0.690393 +vt -0.050638 0.768773 +vt -0.055587 0.833342 +vt -0.044179 0.891809 +vt -0.044740 0.919618 +vt -0.045472 0.968996 +vt 0.130670 0.954053 +vt 0.390748 0.616922 +vt 0.379941 0.577901 +vt 0.105940 1.011702 +vt 0.109044 1.064086 +vt 0.098712 0.878143 +vt 0.094900 0.855627 +vt -0.043624 0.728836 +vt -0.037992 0.758361 +vt 0.800089 0.225443 +vt 0.793380 0.234856 +vt 0.823728 0.233183 +vt 0.811282 0.253851 +vt -0.317865 1.226508 +vt -0.294668 1.220861 +vt -0.312635 1.211752 +vt 0.837193 0.247794 +vt -0.047097 0.846806 +vt -0.042843 0.943339 +vt -0.080933 -0.063439 +vt -0.287226 1.451520 +vt -0.266585 1.430731 +vt 0.784010 0.224006 +vt 1.470863 -0.459344 +vt -0.030310 0.905604 +vt -0.023589 1.031578 +vt -0.021998 1.051267 +vt -0.033000 1.063663 +vt -0.214929 0.109975 +vt -0.218720 0.084198 +vt 0.293771 0.501229 +vt 0.506123 0.038440 +vt -0.037661 1.484395 +vt -0.029134 1.493856 +vt -0.043249 1.494882 +vt 1.437964 -0.389552 +vt -0.305447 -0.286266 +vt -0.291119 -0.293869 +vt -0.284507 -0.264491 +vt -0.041451 0.629306 +vt -0.032496 0.687979 +vt -0.032960 0.734374 +vt 1.423721 -0.330339 +vt 1.418487 -0.305034 +vt 1.435637 -0.332963 +vt 1.297247 -0.379693 +vt 1.305959 -0.398888 +vt 1.336673 -0.369685 +vt -0.026310 0.897161 +vt -0.025423 0.946258 +vt 0.144963 -0.144531 +vt 0.157399 -0.175086 +vt 0.125669 -0.163679 +vt -0.336756 -0.218084 +vt -0.331706 -0.237897 +vt -0.319891 -0.218380 +vt 1.308084 -0.185958 +vt -0.019955 0.278253 +vt -0.037565 0.272435 +vt -0.037895 0.284149 +vt -0.027096 0.258006 +vt 0.678366 0.202661 +vt 0.696937 0.216531 +vt 0.724761 0.217571 +vt -0.204206 0.084629 +vt 0.269334 0.023409 +vt -0.295511 -0.086037 +vt -0.282272 -0.070527 +vt -0.022181 0.916785 +vt -0.016878 0.974957 +vt 0.096680 1.078498 +vt 0.075378 1.041740 +vt 0.061143 1.064672 +vt 0.106141 0.756692 +vt -0.210436 0.115767 +vt -0.007329 0.573213 +vt -0.009106 0.590872 +vt -0.013542 0.551238 +vt -0.036394 0.546987 +vt 0.904801 -0.119002 +vt 0.905358 -0.150818 +vt 0.938503 -0.143925 +vt -0.305583 -0.212548 +vt -0.322904 -0.189873 +vt -0.343593 0.239713 +vt -0.350076 0.219222 +vt 0.580044 0.115767 +vt 0.564962 0.084629 +vt -0.289547 -0.234515 +vt -0.000977 0.922062 +vt -0.003895 1.028899 +vt -0.014738 1.075759 +vt -0.048650 1.073273 +vt -0.016621 1.493504 +vt -0.004567 1.502637 +vt -0.018453 1.505034 +vt -0.009106 0.288779 +vt -0.007724 0.264805 +vt -0.005304 0.241058 +vt -0.022247 0.233776 +vt -0.010239 0.227950 +vt -0.023731 0.214591 +vt -0.285456 1.276801 +vt 0.220954 0.099121 +vt -0.403939 0.053701 +vt -0.385396 0.071827 +vt 1.468864 -0.406050 +vt 0.000617 0.961803 +vt -0.002154 1.068245 +vt 0.722077 0.016709 +vt 0.709741 -0.027582 +vt 0.728911 -0.015475 +vt 0.396575 0.547653 +vt 0.297421 1.082417 +vt 0.692132 0.022634 +vt 0.775592 -0.006064 +vt 0.787930 -0.029834 +vt -0.337576 -0.145265 +vt 1.524745 -0.176083 +vt 1.517066 -0.194777 +vt 1.532446 -0.200710 +vt 0.002757 0.935529 +vt -0.021998 0.173761 +vt -0.023589 0.192360 +vt -0.002154 0.174635 +vt 0.233868 0.978612 +vt 0.248435 0.986183 +vt 0.255697 0.978246 +vt 0.014577 0.576016 +vt 0.006912 0.258874 +vt 0.610603 0.246396 +vt 0.610885 0.227950 +vt 0.601869 0.241058 +vt -0.014292 0.916215 +vt -0.034815 0.902634 +vt -0.050952 0.908130 +vt -0.168426 1.272533 +vt -0.147268 1.300941 +vt -0.138509 1.289134 +vt 0.635503 0.118535 +vt -0.105370 0.729999 +vt -0.087233 0.755020 +vt -0.090545 0.726904 +vt 0.020163 1.026309 +vt 0.015671 0.158616 +vt 0.014577 0.302083 +vt 0.022947 0.284976 +vt 0.012591 0.254178 +vt 0.012591 0.611911 +vt 0.004890 0.620216 +vt -0.005304 0.611483 +vt 1.286286 0.065805 +vt 1.279873 0.050893 +vt 0.266568 1.097891 +vt 0.245055 1.101912 +vt 0.021782 0.936179 +vt 0.021830 1.056629 +vt -0.071694 0.037327 +vt -0.081733 0.032690 +vt -0.059650 0.018578 +vt 1.244022 -0.002410 +vt 0.494961 0.677658 +vt -0.288288 0.179688 +vt -0.303952 0.205483 +vt -0.258293 0.181100 +vt 0.245877 -0.021313 +vt -0.241506 0.168934 +vt -0.212853 0.169643 +vt -0.235950 0.150368 +vt -0.218386 0.037286 +vt 0.015636 0.965914 +vt 0.025801 0.993289 +vt 0.032987 0.180089 +vt 0.001244 1.512125 +vt 0.011651 1.522057 +vt -0.001231 1.523705 +vt 0.812515 -0.042495 +vt 0.031987 0.266471 +vt 0.025652 0.263752 +vt 0.031987 0.599574 +vt 0.025652 0.611357 +vt 0.006912 0.605160 +vt 0.601744 0.263752 +vt 0.616017 0.270047 +vt 0.626622 0.250529 +vt 1.403692 -0.276533 +vt -0.000916 0.848356 +vt 0.023355 0.827187 +vt 0.032034 0.842577 +vt 0.056207 0.248668 +vt 0.041023 0.258186 +vt 0.066853 0.284686 +vt 0.032987 1.080425 +vt 0.230092 0.645831 +vt -0.049513 0.802994 +vt -0.340275 0.080617 +vt -0.351422 0.106519 +vt 0.043335 0.792183 +vt 0.034764 0.814024 +vt 0.287146 -0.016442 +vt 0.290682 -0.048652 +vt 0.032351 0.939494 +vt 0.038098 0.967281 +vt 0.035564 1.016543 +vt 0.040841 1.065510 +vt 1.341156 -0.431072 +vt -0.108596 0.754538 +vt 0.050617 0.587519 +vt 0.022947 0.589667 +vt 0.050617 0.275466 +vt 0.044903 0.603224 +vt 0.041885 0.631676 +vt 0.023901 0.625630 +vt 0.247350 -0.049049 +vt 0.044234 0.859107 +vt 0.016632 0.878923 +vt -0.300473 -0.379693 +vt 0.046831 0.969877 +vt 0.045838 1.045385 +vt 0.247096 0.550722 +vt 0.228092 0.569747 +vt 0.034507 0.507384 +vt 0.047647 0.500786 +vt 0.037764 0.750388 +vt 0.048595 0.765903 +vt 0.054437 0.813672 +vt 0.055673 0.894155 +vt 0.047301 0.902558 +vt 0.033164 -0.108476 +vt 0.045586 -0.123338 +vt 0.065427 0.570140 +vt 0.051961 0.594113 +vt 0.060738 0.654743 +vt 0.036767 0.674381 +vt 0.048254 0.686949 +vt 0.046047 0.707366 +vt 0.050536 0.729678 +vt 0.066275 0.779613 +vt 0.059722 0.871426 +vt -0.024840 -0.099475 +vt -0.035845 -0.110596 +vt 0.056360 0.991629 +vt 0.058029 1.078849 +vt 0.056858 0.619549 +vt 1.252328 -0.176293 +vt 1.394858 -0.260851 +vt 1.390181 -0.208783 +vt 1.405966 -0.243822 +vt -0.278166 1.241492 +vt 0.056207 0.945082 +vt 0.066401 0.952925 +vt 0.058029 0.193631 +vt 0.151403 0.545966 +vt 0.069435 0.586610 +vt 0.068025 0.608853 +vt 1.361737 -0.123734 +vt 1.359761 -0.139033 +vt 1.372968 -0.130333 +vt 0.064694 0.726611 +vt 0.059256 0.707523 +vt 0.060924 0.750351 +vt 0.074559 0.756377 +vt 0.069473 0.843734 +vt 0.077777 0.894521 +vt 0.314447 0.981213 +vt 0.319551 1.003783 +vt 0.078837 0.643136 +vt -0.047593 0.895083 +vt 0.081885 0.802219 +vt 0.076034 0.907037 +vt -0.025255 -0.135462 +vt 0.012451 -0.149335 +vt 0.084497 1.017502 +vt 0.725502 -0.050642 +vt 0.088525 0.598671 +vt 0.084288 0.729214 +vt 0.074957 0.866247 +vt 0.076034 0.320821 +vt 0.069821 0.294290 +vt 0.055673 0.325414 +vt -0.277553 -0.152070 +vt 0.092415 1.058502 +vt 0.090373 0.188320 +vt 0.089697 0.674002 +vt 0.061477 0.689907 +vt 0.067995 0.675526 +vt 0.094420 0.782978 +vt 0.093602 0.815605 +vt 0.092783 0.244306 +vt 0.066401 0.243258 +vt 0.081062 0.250764 +vt 0.092783 0.957624 +vt 0.085708 0.970559 +vt 1.348340 -0.443667 +vt 0.587608 -0.074401 +vt 0.623190 -0.073163 +vt 0.093710 0.575818 +vt 0.097306 0.584749 +vt 0.069435 0.271100 +vt 0.097306 0.269708 +vt 0.088525 0.285101 +vt -0.206959 0.180587 +vt -0.223887 0.191807 +vt 0.095764 0.277898 +vt 0.092268 0.932001 +vt -0.050120 1.473668 +vt -0.461104 0.065805 +vt -0.449925 0.030093 +vt -0.465569 0.050893 +vt 0.510459 0.718452 +vt 1.268795 -0.229655 +vt 1.288535 -0.236185 +vt 0.118805 1.111262 +vt 0.095108 1.106591 +vt 0.761518 -0.035433 +vt 0.092268 0.298408 +vt 0.131111 0.298222 +vt 0.264382 0.577878 +vt 0.246672 0.576832 +vt 0.218107 0.838663 +vt 0.015038 -0.122656 +vt -0.017849 -0.106362 +vt -0.005383 -0.095938 +vt 0.372203 0.647479 +vt 0.380717 0.674202 +vt 0.348793 0.657505 +vt -0.039585 1.352636 +vt -0.082280 1.351364 +vt -0.056548 1.342204 +vt -0.031085 1.340455 +vt 0.233633 0.682146 +vt 0.221790 0.693709 +vt 0.241813 0.864242 +vt 0.262088 0.889542 +vt 1.401572 -0.057727 +vt 1.388431 -0.078926 +vt 0.247867 0.800584 +vt -0.260377 0.775324 +vt -0.242789 0.778871 +vt -0.241479 0.756105 +vt 0.612855 0.093751 +vt 0.620460 0.127880 +vt 0.576590 0.103730 +vt 0.686310 0.145758 +vt 0.701495 0.171895 +vt 0.670108 0.155267 +vt 0.627619 0.110308 +vt 0.640383 0.138358 +vt 0.013678 -0.020072 +vt -0.007838 0.018067 +vt -0.013512 -0.041641 +vt -0.114000 0.531186 +vt -0.130702 0.537526 +vt -0.142195 0.510483 +vt -0.122844 0.831737 +vt -0.091927 0.813363 +vt -0.083306 0.713421 +vt -0.072901 0.690813 +vt 0.371521 0.783922 +vt 0.381939 0.811836 +vt 0.346432 0.803174 +vt 0.468881 0.599961 +vt 0.259549 0.623946 +vt 0.290278 0.621378 +vt 0.286831 0.645160 +vt -0.056822 0.972924 +vt -0.085343 0.954497 +vt 0.362426 0.566659 +vt 0.374489 0.603067 +vt 0.491615 -0.062155 +vt 0.404678 0.733448 +vt 0.418791 0.730904 +vt 0.406561 0.713830 +vt 0.329900 0.640534 +vt 0.321004 0.650585 +vt 0.341044 0.742034 +vt 0.321449 0.730069 +vt 0.342872 0.697401 +vt 0.247830 0.767832 +vt 0.228967 0.779808 +vt 0.257839 0.914862 +vt 0.283339 0.875585 +vt 0.264552 0.875678 +vt -0.172097 0.512854 +vt 1.322130 -0.413253 +vt 1.338442 -0.410680 +vt 0.228092 0.249115 +vt 0.068173 1.393321 +vt 0.063981 1.420141 +vt 0.051082 1.382581 +vt -0.327832 1.153591 +vt -0.323533 1.189273 +vt 0.356289 0.599589 +vt 0.339577 0.610957 +vt 0.332761 0.573219 +vt 0.590720 -0.008763 +vt 1.258400 -0.201129 +vt 0.232621 0.741147 +vt -0.313704 1.054858 +vt -0.295812 1.070600 +vt -0.308095 1.078971 +vt -0.297987 1.112421 +vt -0.309005 1.162245 +vt 1.143978 0.287842 +vt 1.152631 0.265747 +vt 1.179660 0.272643 +vt -0.332776 -0.353443 +vt -0.185346 0.516226 +vt 0.074952 -0.215250 +vt 0.088900 -0.230432 +vt 0.086727 -0.208546 +vt -0.310785 1.014847 +vt -0.086849 1.386014 +vt -0.067321 1.384040 +vt -0.083151 1.398044 +vt 0.241278 0.829421 +vt -0.293971 1.087770 +vt -0.312558 1.215593 +vt 0.431750 0.695923 +vt 0.268876 0.761378 +vt 0.261630 0.737611 +vt 1.037340 0.266651 +vt 1.045245 0.294306 +vt 1.031636 0.283724 +vt 1.060986 0.288704 +vt 1.102808 0.287896 +vt 1.123049 0.269201 +vt 0.865228 0.154766 +vt 0.898052 0.167557 +vt 0.887295 0.189316 +vt 0.710858 0.125974 +vt 0.713591 0.147822 +vt 0.730160 0.123534 +vt 0.749489 0.157455 +vt -0.050000 1.371975 +vt -0.091604 1.370698 +vt 0.314447 0.215743 +vt 0.293700 0.216842 +vt 0.300444 0.233170 +vt -0.297558 0.266651 +vt -0.316840 0.283724 +vt -0.314713 0.262115 +vt 1.205980 0.254197 +vt 0.882520 0.098597 +vt 0.901178 0.116081 +vt 0.958221 0.152510 +vt 0.972579 0.124925 +vt 1.009566 0.129255 +vt 0.768629 0.126273 +vt 0.786601 0.136844 +vt 1.106580 0.263160 +vt 1.175817 0.246165 +vt -0.079163 -0.148951 +vt -0.076931 -0.127414 +vt -0.068696 -0.134667 +vt 0.857201 0.182137 +vt -0.114572 0.898328 +vt -0.122365 0.931066 +vt -0.087155 0.905880 +vt 1.062259 0.265815 +vt 1.078156 0.290688 +vt 1.088066 0.248837 +vt 1.220316 0.236425 +vt -0.300225 1.229929 +vt 1.241546 0.063085 +vt 1.229233 0.057417 +vt 0.358945 1.013543 +vt 0.363132 1.035005 +vt 0.345628 1.037529 +vt -0.279344 0.218655 +vt -0.290673 0.208778 +vt 1.034997 0.218655 +vt 1.157073 0.233045 +vt 0.516167 0.679074 +vt 0.969218 0.184861 +vt 1.003929 0.176618 +vt 0.993988 0.198596 +vt 0.341990 0.977970 +vt 0.380231 0.936829 +vt 0.369984 0.978832 +vt 1.119144 0.234638 +vt 1.193077 0.223225 +vt 0.510035 0.223573 +vt 0.512189 0.205997 +vt 0.528931 0.226895 +vt -0.310785 0.204948 +vt -0.322598 0.241200 +vt 1.059839 0.234432 +vt 1.171759 0.213123 +vt 1.226770 0.205663 +vt 1.245336 0.222988 +vt 0.031162 1.413020 +vt 0.015038 1.387056 +vt 0.503099 0.621088 +vt 0.519965 0.630074 +vt 0.519317 0.649996 +vt 0.321925 0.684435 +vt 0.302571 0.676046 +vt 0.299753 0.648594 +vt 0.760166 0.179534 +vt 0.338859 0.927129 +vt 0.331102 0.961496 +vt 0.319186 0.967999 +vt 0.040981 1.467046 +vt 0.061895 1.463565 +vt 0.069926 1.488749 +vt 0.703313 -0.044257 +vt 0.865601 0.212599 +vt -0.286615 1.020050 +vt -0.290673 1.029422 +vt 1.108084 0.232590 +vt 0.605415 -0.003000 +vt 0.615946 0.025260 +vt 1.187756 0.124664 +vt 1.193353 0.169944 +vt 1.196165 0.137812 +vt 0.184061 0.500028 +vt 0.212033 0.498490 +vt 0.202465 0.519018 +vt 0.899906 0.208637 +vt 0.079281 1.417118 +vt 0.057858 1.442340 +vt 0.066751 1.379943 +vt 1.235307 -0.047864 +vt 1.087477 0.232616 +vt 1.193353 0.190428 +vt -0.280161 1.258018 +vt -0.023592 -0.067796 +vt -0.050000 -0.080341 +vt -0.039585 -0.051826 +vt -0.173593 -0.030160 +vt 0.317489 0.561491 +vt 0.303441 0.594999 +vt 0.289019 0.570060 +vt 0.325448 -0.193243 +vt 0.332579 -0.166651 +vt 0.306775 -0.172184 +vt -0.279917 1.030416 +vt -0.279917 0.200260 +vt 1.062389 0.220386 +vt 1.135609 0.218565 +vt -0.262537 1.145222 +vt -0.272018 1.175123 +vt -0.269564 1.128757 +vt -0.283117 1.181372 +vt 1.209103 0.197196 +vt -0.280021 1.236383 +vt -0.076260 0.677752 +vt 1.380900 -0.169024 +vt 1.370329 -0.141087 +vt 1.367908 -0.164386 +vt 1.041261 0.203452 +vt 1.020803 0.200260 +vt -0.273802 1.202967 +vt -0.001989 1.341721 +vt -0.004635 1.353110 +vt 0.269563 0.850610 +vt 0.253741 0.861206 +vt 0.937810 0.177548 +vt 0.758938 0.250978 +vt 0.766433 0.265521 +vt 0.720456 0.249394 +vt 0.291994 0.950502 +vt 1.383708 -0.150543 +vt 1.392715 -0.168589 +vt -0.259546 1.072002 +vt -0.230946 1.073833 +vt -0.262130 1.097090 +vt -0.230629 1.107832 +vt -0.263263 1.117697 +vt -0.240454 1.137019 +vt -0.261757 1.267773 +vt -0.117270 1.002299 +vt -0.354895 1.228488 +vt -0.386133 1.210172 +vt -0.358642 1.239079 +vt -0.075843 0.077674 +vt -0.082141 0.046976 +vt 0.052759 1.396830 +vt 0.048126 1.419785 +vt 0.927215 0.200622 +vt 0.802222 0.228180 +vt 0.785071 0.205569 +vt 0.822205 0.205386 +vt 0.317209 1.048404 +vt 0.080152 1.402328 +vt -0.258468 1.197511 +vt -0.255271 1.233092 +vt -0.255807 1.250783 +vt -0.275419 1.218716 +vt -0.219955 0.509594 +vt 0.802743 0.050973 +vt 0.225290 0.518979 +vt 0.271195 0.527961 +vt 1.502511 -0.134077 +vt 1.493024 -0.130405 +vt 1.461763 -0.143983 +vt -0.004869 1.407141 +vt -0.017849 1.384522 +vt 1.006868 0.066415 +vt 1.007323 0.037222 +vt 0.995681 0.066566 +vt -0.236717 1.174615 +vt 1.201766 0.177431 +vt 1.223479 0.185266 +vt -0.252949 1.282666 +vt -0.189566 -0.047864 +vt 0.051082 -0.130333 +vt 0.033602 -0.108072 +vt 0.333094 0.768551 +vt 0.355664 0.766633 +vt 0.338132 0.792349 +vt 0.258784 0.587205 +vt 0.272841 0.597219 +vt -0.260713 1.211380 +vt 0.034728 0.552884 +vt 0.069982 0.555690 +vt 0.022248 -0.191674 +vt 0.023776 -0.175261 +vt 0.040099 -0.200710 +vt -0.150083 1.352966 +vt -0.137462 1.343373 +vt 0.361780 0.695705 +vt 0.723240 -0.033513 +vt 0.299308 0.727185 +vt 0.309931 0.745608 +vt 0.290542 0.738896 +vt 0.016183 1.450350 +vt -0.022550 1.438841 +vt 1.282638 0.115471 +vt -0.226130 1.139059 +vt -0.235476 1.202305 +vt -0.249287 1.228803 +vt 1.219190 0.170593 +vt 1.261866 0.167655 +vt 1.241169 0.192663 +vt 1.273053 0.187556 +vt -0.258293 1.298980 +vt -0.242381 1.290842 +vt -0.241872 1.308897 +vt 0.776370 -0.193471 +vt -0.003687 -0.095884 +vt -0.001989 -0.081374 +vt -0.015547 -0.081785 +vt 0.279892 0.696387 +vt 0.296907 0.704424 +vt 0.302414 0.771562 +vt 0.039691 1.363550 +vt 0.033602 1.372226 +vt 0.019058 1.363098 +vt -0.204712 1.088737 +vt 1.231879 -0.111279 +vt 1.249307 -0.087928 +vt 1.222424 -0.101285 +vt 0.295442 0.814845 +vt 0.007658 0.981063 +vt -0.003357 0.968739 +vt -0.011312 1.005812 +vt 0.813673 0.261968 +vt 0.801670 0.277417 +vt 0.782735 0.258714 +vt 0.052605 1.371351 +vt -0.183998 -0.071609 +vt 1.483891 -0.118804 +vt 0.279641 0.591101 +vt 0.033164 1.353245 +vt 0.019058 -0.090904 +vt -0.210144 1.101375 +vt 1.098218 0.216176 +vt 1.102998 0.186540 +vt 1.129446 0.199836 +vt -0.226348 1.208370 +vt -0.225777 1.246764 +vt -0.241992 1.271480 +vt 0.177861 0.230484 +vt 0.160711 0.243257 +vt 0.147766 0.216163 +vt -0.187858 0.508734 +vt -0.153040 0.522473 +vt -0.006396 1.471376 +vt 0.601403 0.214397 +vt 0.611507 0.232358 +vt 0.585386 0.220930 +vt 0.336290 0.823286 +vt 0.322268 0.841761 +vt 0.322317 0.811283 +vt 0.508666 0.179791 +vt 0.527558 0.181938 +vt 1.079123 0.185921 +vt 1.064220 0.206776 +vt 1.040282 0.191028 +vt 1.091761 0.195758 +vt -0.203597 1.112611 +vt -0.195970 1.143440 +vt -0.209842 1.188465 +vt -0.222637 1.227020 +vt 0.704820 0.123022 +vt 0.270013 0.561124 +vt 0.280130 0.678738 +vt 0.278975 0.554099 +vt -0.123740 1.324073 +vt -0.116620 1.303381 +vt -0.207080 1.061889 +vt 1.237150 0.155163 +vt 1.259300 0.147081 +vt -0.049852 1.470258 +vt 0.723313 0.112973 +vt 0.654869 0.056062 +vt 0.697032 0.053589 +vt 1.343632 -0.108476 +vt 1.353485 -0.090904 +vt 1.343337 -0.089495 +vt 0.593454 0.171770 +vt 0.624846 0.177141 +vt 0.589975 0.191810 +vt -0.086867 -0.046319 +vt 0.590645 0.029986 +vt 0.299784 0.538544 +vt 0.332724 0.853319 +vt 0.052759 -0.190921 +vt 0.080593 -0.195733 +vt 0.016383 -0.089495 +vt 0.015823 -0.103690 +vt 1.261424 0.129020 +vt -0.287561 -0.448452 +vt -0.279723 -0.443667 +vt 0.416058 0.015938 +vt 0.423418 0.053941 +vt 0.402878 0.034726 +vt 0.387195 0.703493 +vt 0.397963 0.743650 +vt 0.376078 0.733267 +vt -0.259120 0.566559 +vt 0.330375 0.908635 +vt 1.078346 0.164411 +vt 1.101921 0.165310 +vt 1.133827 0.170213 +vt -0.189964 1.161462 +vt 1.435292 -0.117491 +vt -0.330374 1.049422 +vt -0.037514 1.444905 +vt 1.391405 -0.187766 +vt 0.399624 0.707280 +vt 0.879928 0.292475 +vt 0.873764 0.272063 +vt 0.901370 0.270580 +vt 0.014669 1.488641 +vt 0.310748 0.931945 +vt 0.319186 0.229308 +vt -0.178302 1.074387 +vt 1.052275 0.175992 +vt -0.183646 1.087960 +vt 1.178852 0.154015 +vt 1.193608 0.128779 +vt 1.198756 0.157026 +vt 1.229632 0.127091 +vt 1.217406 0.146350 +vt 0.793560 0.252940 +vt 0.826850 0.240324 +vt 0.835810 0.132303 +vt 0.607308 0.164716 +vt 0.342883 1.003601 +vt 0.355604 0.948977 +vt 1.109208 0.148545 +vt 1.139465 0.137515 +vt 1.151848 0.152522 +vt 0.261243 0.651203 +vt -0.086867 1.309864 +vt -0.054912 1.317481 +vt 0.402315 0.770867 +vt 0.800175 0.116499 +vt 0.377986 0.767772 +vt 0.356748 0.747586 +vt 0.349602 0.876092 +vt 0.563605 0.202458 +vt 0.551878 0.217292 +vt 0.533079 0.205938 +vt 0.316496 0.590302 +vt 0.322845 0.611017 +vt 1.064773 0.155364 +vt 1.078764 0.142342 +vt 0.354603 0.836463 +vt 0.375196 0.831823 +vt 1.016157 0.062235 +vt 0.808273 0.158954 +vt 1.227490 0.058966 +vt -0.143922 1.013106 +vt -0.135116 0.991858 +vt 0.857032 0.233411 +vt 0.822210 0.231862 +vt 0.362094 0.905037 +vt 0.389334 0.909519 +vt 0.328452 1.065511 +vt 0.331534 0.642482 +vt 0.349095 0.633273 +vt 0.337108 0.613874 +vt 1.317937 -0.297490 +vt 1.300650 -0.279958 +vt 1.065098 0.148984 +vt 0.000312 0.544837 +vt -0.091604 -0.064027 +vt -0.057246 -0.067818 +vt -0.114472 1.387447 +vt -0.108256 1.361319 +vt 0.590671 -0.231398 +vt 0.586562 -0.221556 +vt 0.592610 -0.214501 +vt 0.761254 0.203624 +vt 0.734037 0.201254 +vt -0.302590 1.230670 +vt -0.282139 1.242283 +vt -0.160303 1.094683 +vt -0.174810 1.088377 +vt 1.503948 -0.127354 +vt 1.495420 -0.117650 +vt -0.120648 1.284098 +vt -0.124692 1.289831 +vt -0.146481 1.268431 +vt 0.365227 -0.062609 +vt 0.345163 -0.054689 +vt 0.319434 -0.082134 +vt 0.637865 0.208481 +vt 0.088103 1.438544 +vt 0.309535 -0.050646 +vt 0.300245 -0.065107 +vt 0.312547 -0.069075 +vt 0.808867 0.178544 +vt 0.837591 0.162033 +vt -0.101475 0.536099 +vt -0.099990 0.501049 +vt -0.113500 0.506126 +vt 0.249756 0.713115 +vt -0.031085 -0.060058 +vt -0.023592 1.361340 +vt 1.187894 0.093300 +vt 0.630920 0.231680 +vt 0.662988 0.188964 +vt 0.647892 0.226603 +vt 0.686092 0.225942 +vt 0.665020 0.241701 +vt 0.340767 0.674633 +vt 0.316005 0.788414 +vt 1.451075 -0.477100 +vt 0.638918 0.086948 +vt -0.226705 -0.152338 +vt -0.196895 -0.142744 +vt -0.207329 -0.132224 +vt 0.640700 0.159244 +vt -0.419625 -0.000512 +vt 0.008415 -0.112350 +vt 0.664589 0.213343 +vt 1.380891 -0.218224 +vt 1.369574 -0.188742 +vt -0.216775 0.016736 +vt -0.230410 0.015970 +vt -0.233093 -0.013762 +vt 1.527219 -0.219365 +vt 0.016383 1.352951 +vt 0.840996 0.290192 +vt -0.186889 0.557857 +vt -0.171521 0.542284 +vt 1.368983 -0.461199 +vt 0.532323 -0.008763 +vt 0.538094 0.029986 +vt 0.756846 0.011254 +vt 0.742552 -0.022071 +vt 0.749709 -0.028755 +vt 0.400518 0.794684 +vt -0.029822 -0.085203 +vt 1.461429 -0.108844 +vt 1.460645 -0.087853 +vt 0.449764 0.134031 +vt 0.468881 0.151290 +vt 0.439850 0.160615 +vt -0.332203 1.221013 +vt -0.343524 1.236671 +vt -0.064202 0.134963 +vt 0.836885 0.104410 +vt -0.364721 -0.016774 +vt -0.352043 -0.045539 +vt -0.345184 -0.031058 +vt 0.612685 0.068678 +vt 0.061475 -0.243638 +vt 0.069829 -0.236786 +vt 0.078970 -0.247714 +vt 1.294731 -0.357882 +vt 1.291501 -0.367410 +vt 1.384207 -0.195733 +vt 0.486804 0.589092 +vt 0.939363 0.218379 +vt 0.968357 0.204937 +vt 0.344516 0.900512 +vt -0.266101 1.399498 +vt 0.541474 0.690893 +vt -0.196763 0.175284 +vt 0.022342 0.996309 +vt 0.045346 0.981281 +vt -0.379212 -0.305034 +vt -0.369331 -0.287268 +vt -0.355513 -0.302212 +vt -0.096540 1.384427 +vt 0.173919 0.525909 +vt 0.935104 0.136481 +vt 0.507466 -0.156657 +vt 0.493156 -0.127665 +vt 0.001382 0.516176 +vt 1.393182 -0.356488 +vt 0.233965 0.702434 +vt 0.774309 0.234725 +vt -0.194249 1.298278 +vt 1.446327 -0.242627 +vt 1.447531 -0.253113 +vt 0.111785 0.248249 +vt 0.563814 0.186695 +vt 0.557046 0.155154 +vt 0.732798 0.049632 +vt 0.741733 0.068463 +vt 1.481130 -0.241433 +vt 0.590117 0.078795 +vt -0.183153 1.275282 +vt 0.324187 0.181938 +vt 0.330856 0.158580 +vt 0.342545 0.155952 +vt 0.704002 0.077172 +vt 1.400982 -0.191028 +vt 1.428931 -0.208134 +vt 1.407505 -0.179936 +vt 0.412123 0.650314 +vt 0.486408 -0.074401 +vt 0.458206 -0.079399 +vt 0.423362 0.679722 +vt 0.697667 0.203576 +vt 0.854629 0.311304 +vt 0.851593 0.299684 +vt 0.875714 0.306862 +vt 0.758158 0.220695 +vt 0.417799 0.769779 +vt 0.325356 -0.088682 +vt 0.307598 -0.103859 +vt 0.244199 0.675394 +vt 1.265715 -0.004035 +vt -0.152042 1.309872 +vt 0.155397 -0.244938 +vt 0.193981 -0.237709 +vt 0.189323 -0.261467 +vt 0.379726 0.866646 +vt 1.300259 -0.000235 +vt 1.315038 -0.003395 +vt 1.331136 0.003687 +vt 1.456474 -0.080582 +vt 0.063862 0.510296 +vt 0.083612 0.522104 +vt 1.405369 -0.090732 +vt 0.358213 0.656557 +vt -0.157713 1.324651 +vt 1.325234 -0.017057 +vt 1.343353 -0.010975 +vt -0.082280 -0.037240 +vt 0.045790 0.506673 +vt 1.512444 -0.147248 +vt 1.486570 -0.177413 +vt -0.160378 1.118479 +vt -0.099020 -0.053117 +vt -0.134189 1.307571 +vt -0.159225 1.275329 +vt -0.137600 1.321519 +vt -0.145380 1.334847 +vt -0.088388 1.333346 +vt 1.347425 -0.123338 +vt -0.356620 0.928888 +vt -0.369145 0.904397 +vt -0.373882 0.933579 +vt 0.533001 0.155952 +vt 0.925558 0.052417 +vt 0.949316 0.011227 +vt -0.078068 0.514539 +vt 0.030355 -0.176083 +vt 1.025391 0.157129 +vt -0.057031 -0.251579 +vt -0.036875 -0.221556 +vt -0.024977 -0.235111 +vt 1.281217 -0.345014 +vt 1.290051 -0.365716 +vt 1.280218 -0.027744 +vt 1.258817 -0.024887 +vt 1.333760 -0.024903 +vt 0.784487 -0.101158 +vt 1.407630 -0.106726 +vt -0.128114 1.331012 +vt 0.842974 0.080752 +vt 1.457433 -0.182266 +vt 1.479135 -0.217273 +vt 0.313438 0.621121 +vt 0.326614 0.776046 +vt 0.331102 0.224129 +vt 0.740316 0.013554 +vt 0.111785 0.953517 +vt -0.115323 1.330236 +vt -0.126531 -0.033485 +vt -0.137462 -0.024903 +vt -0.128114 -0.013515 +vt 1.351088 -0.041172 +vt 1.373723 -0.026096 +vt 1.503471 -0.207517 +vt 0.735995 0.272700 +vt 0.717571 0.273436 +vt 0.028540 1.496184 +vt 1.479028 -0.162641 +vt -0.033503 0.972542 +vt -0.300225 0.937532 +vt -0.288049 0.965295 +vt -0.273588 0.952524 +vt 0.452739 -0.052711 +vt 0.836716 -0.111348 +vt -0.115323 -0.016788 +vt -0.126531 1.346823 +vt -0.121287 1.360702 +vt 0.866478 0.244023 +vt 0.843705 0.265307 +vt 0.344708 1.058323 +vt 0.313438 0.232358 +vt 0.290278 0.258201 +vt 0.279641 0.232695 +vt 0.640971 0.243720 +vt 0.638981 0.266337 +vt -0.108816 1.340765 +vt 0.120407 0.524678 +vt 0.577466 -0.235111 +vt -0.068960 1.414982 +vt -0.107128 -0.044609 +vt -0.108816 -0.023039 +vt -0.107128 1.353163 +vt 1.207496 0.043841 +vt 1.418436 -0.050517 +vt 0.099035 0.509078 +vt 1.290590 -0.138690 +vt 1.320582 -0.143875 +vt 1.295141 -0.110173 +vt 0.611764 0.258201 +vt 1.397256 -0.466313 +vt 1.434904 -0.460196 +vt 1.441906 -0.473406 +vt -0.158848 -0.014746 +vt 1.366642 -0.055115 +vt 1.377834 -0.037422 +vt 1.353936 -0.108884 +vt 0.694811 0.267571 +vt 0.272841 0.242145 +vt 0.530632 0.714434 +vt 0.548353 -0.148728 +vt 1.280536 -0.053417 +vt 1.274484 -0.036483 +vt -0.088745 1.342113 +vt -0.088745 -0.029064 +vt -0.099020 1.361653 +vt -0.107256 1.376255 +vt -0.301290 1.337620 +vt -0.300961 1.357566 +vt -0.287561 1.360052 +vt -0.336662 -0.195931 +vt 1.440736 -0.161236 +vt 0.502587 0.586203 +vt 0.611475 0.135992 +vt 0.579479 0.125479 +vt 1.397632 -0.042516 +vt 0.293771 -0.062155 +vt -0.376892 -0.332963 +vt 1.263534 -0.192648 +vt 1.256390 -0.218084 +vt 1.248858 -0.195931 +vt -0.138575 1.099187 +vt 0.528655 0.732926 +vt 1.438695 -0.370003 +vt 1.338513 -0.430513 +vt 1.318870 -0.415287 +vt 1.320924 -0.405676 +vt 1.171850 0.021747 +vt -0.057400 1.446487 +vt -0.057246 1.362633 +vt 0.672532 0.297797 +vt 0.692820 0.305748 +vt 0.684095 0.315865 +vt 0.674821 0.252282 +vt -0.210434 0.534076 +vt -0.235861 0.544429 +vt -0.221856 0.575572 +vt 0.155627 0.509263 +vt 0.786389 0.110377 +vt 0.769785 0.128671 +vt 0.794822 0.145326 +vt 1.521646 -0.153700 +vt 1.374283 -0.282716 +vt 1.350924 -0.219074 +vt 1.347361 -0.250223 +vt 0.839383 0.122952 +vt 0.822553 0.088391 +vt 0.805989 0.099210 +vt 0.836583 0.101945 +vt -0.148456 -0.087050 +vt -0.131276 -0.076428 +vt 0.957086 0.046424 +vt 0.988680 0.042785 +vt 1.310747 -0.262347 +vt 1.327384 -0.235501 +vt 1.026158 -0.031644 +vt 1.000087 0.004999 +vt -0.089036 0.109146 +vt -0.093031 0.095889 +vt -0.276827 0.164415 +vt -0.441417 0.066415 +vt -0.466801 0.044216 +vt -0.443721 0.037222 +vt -0.078248 -0.129078 +vt -0.103485 -0.124400 +vt 0.412533 -0.043245 +vt 0.400644 -0.062403 +vt 0.421938 -0.064680 +vt 0.508840 0.255373 +vt 0.513295 0.231264 +vt 0.496128 0.229058 +vt 0.629956 0.138146 +vt 0.659777 0.121253 +vt 1.347610 -0.286728 +vt 0.948437 0.109688 +vt 1.274085 0.026115 +vt 1.288094 0.030093 +vt 1.284853 0.004664 +vt 1.119835 0.096566 +vt -0.132834 -0.140402 +vt -0.113291 -0.143716 +vt -0.127296 -0.168835 +vt 0.285261 -0.138563 +vt 0.257510 -0.118539 +vt 0.281123 -0.101523 +vt 1.179726 0.101891 +vt 1.310150 -0.213809 +vt 0.544988 -0.190011 +vt 0.560861 -0.172184 +vt 0.555463 -0.156382 +vt 0.698504 -0.207682 +vt -0.081132 -0.186858 +vt -0.106382 -0.170483 +vt 0.670008 -0.211157 +vt 0.679446 -0.190442 +vt 1.264413 0.110038 +vt -0.086725 0.126862 +vt 1.284309 0.096465 +vt 0.390172 0.831835 +vt 0.363258 0.860712 +vt 0.389156 0.866774 +vt -0.102511 0.851069 +vt -0.085006 0.847652 +vt -0.090583 0.838509 +vt 1.134788 0.205099 +vt 1.115283 0.211614 +vt 1.138118 0.229798 +vt 0.520441 0.125001 +vt 0.529388 0.122900 +vt 0.529291 0.102213 +vt 0.517779 0.105876 +vt 1.428112 -0.237406 +vt 1.416735 -0.216620 +vt 1.412946 -0.230432 +vt 0.339051 0.764623 +vt 0.370055 0.785984 +vt 0.347718 0.740918 +vt 1.313238 -0.165404 +vt 0.021480 0.498387 +vt 0.045835 0.498921 +vt 0.015776 0.519899 +vt 1.052662 -0.024997 +vt 1.071713 -0.034806 +vt 1.267201 0.043785 +vt 0.703807 -0.158945 +vt 0.699883 -0.184407 +vt 0.681199 -0.154033 +vt 0.389026 0.660375 +vt 0.368097 0.636557 +vt 1.371160 -0.323409 +vt 0.698025 -0.182139 +vt 0.730986 -0.170594 +vt 0.709192 -0.164586 +vt -0.008853 -0.155066 +vt -0.022036 -0.142042 +vt -0.001231 -0.140545 +vt 0.623659 -0.185582 +vt 0.626944 -0.153636 +vt 0.606007 -0.180527 +vt 0.061372 -0.139033 +vt -0.191560 -0.059004 +vt -0.213225 -0.035801 +vt -0.184535 -0.035428 +vt 0.231086 -0.208474 +vt 0.257568 -0.193880 +vt 0.240552 -0.189885 +vt 1.332161 -0.212922 +vt 1.334633 -0.189589 +vt 0.742396 -0.179501 +vt 0.769324 -0.169967 +vt 0.762805 -0.146535 +vt 0.650782 -0.220056 +vt -0.107179 0.128824 +vt 1.393812 -0.208546 +vt -0.398291 1.090198 +vt 0.809189 0.124191 +vt 1.266943 -0.005516 +vt 0.885669 -0.028711 +vt 0.862947 -0.034167 +vt 0.843395 -0.132889 +vt 0.869991 -0.111893 +vt 0.511215 0.051509 +vt 0.510105 0.085087 +vt 0.495064 0.062901 +vt -0.109571 0.132915 +vt 1.270674 -0.137824 +vt 1.253676 -0.102184 +vt 0.020594 -0.064767 +vt 0.814125 -0.158068 +vt 0.846816 -0.164235 +vt 0.819504 -0.137052 +vt -0.202404 0.153134 +vt 0.386285 0.740600 +vt 0.390521 0.718805 +vt 0.560123 -0.100800 +vt 0.554668 -0.113771 +vt 0.574470 -0.108809 +vt 0.878542 -0.117561 +vt 0.715189 -0.016774 +vt 0.726296 -0.006826 +vt 0.737635 -0.043342 +vt 1.100108 0.170261 +vt 0.104546 0.963628 +vt 0.077797 0.947259 +vt 0.069553 0.962925 +vt -0.267685 0.510451 +vt -0.272129 0.493452 +vt -0.281005 0.493586 +vt -0.096606 -0.230717 +vt -0.069396 -0.242267 +vt -0.089774 -0.249003 +vt 0.029839 -0.175931 +vt 1.249405 0.064671 +vt 0.601953 0.127594 +vt 0.588655 0.142861 +vt -0.121137 0.698419 +vt 1.028269 -0.029518 +vt 1.035844 -0.014409 +vt 1.049357 -0.040868 +vt 0.668329 -0.173759 +vt 0.685604 -0.149553 +vt 0.704216 -0.145325 +vt -0.431942 0.037951 +vt 0.125669 1.060863 +vt 0.108068 1.097250 +vt -0.291387 -0.021320 +vt -0.282131 0.001550 +vt 0.841656 -0.021439 +vt 0.829760 -0.039113 +vt -0.076572 1.394822 +vt 0.922432 -0.020345 +vt 1.216985 0.048204 +vt 0.567212 0.067762 +vt 0.342804 -0.139818 +vt 0.352361 -0.108809 +vt 0.329200 -0.113771 +vt -0.059025 0.935125 +vt -0.021487 0.945526 +vt -0.240372 0.079798 +vt -0.215035 0.069167 +vt 0.109056 0.946078 +vt 0.278659 -0.174577 +vt 0.274875 -0.203634 +vt 0.255697 -0.189767 +vt 0.723835 -0.151984 +vt 1.115979 -0.015205 +vt 0.966882 -0.012802 +vt -0.439233 0.003559 +vt -0.467501 0.018559 +vt -0.458330 -0.014409 +vt 1.029453 0.018559 +vt 0.650762 -0.145329 +vt 1.009247 0.126707 +vt 0.997761 0.113775 +vt 0.073648 1.455343 +vt 0.089968 1.457144 +vt -0.421334 0.126707 +vt -0.439600 0.101316 +vt 0.776328 -0.144504 +vt 0.804754 -0.133293 +vt 0.798837 -0.155837 +vt 1.045822 -0.048155 +vt 1.010307 -0.089505 +vt 1.049716 -0.072678 +vt 0.330844 -0.137901 +vt 0.102855 -0.224457 +vt 0.132274 -0.219171 +vt 0.101007 -0.213400 +vt 0.329668 0.731423 +vt 0.334682 0.708118 +vt 1.404321 -0.458735 +vt 1.052124 0.108244 +vt 0.721291 -0.137897 +vt 0.690774 -0.112417 +vt 0.597268 -0.153633 +vt 0.639835 0.087760 +vt 0.625110 0.072308 +vt 0.319844 0.705703 +vt 1.360785 -0.155085 +vt 0.537264 -0.105750 +vt 0.527258 -0.103859 +vt 0.620446 0.056079 +vt 0.582433 -0.170343 +vt 0.309195 -0.156382 +vt 1.225830 0.126242 +vt 1.245944 0.128218 +vt 0.034684 -0.216440 +vt 0.049683 -0.219365 +vt 1.407228 -0.219975 +vt 0.307761 -0.132022 +vt 0.313441 -0.105750 +vt 0.669311 -0.126384 +vt 0.645604 -0.130824 +vt 0.400764 0.772418 +vt 0.416053 0.783586 +vt 0.287735 0.202561 +vt 0.302408 0.205997 +vt 0.289885 0.223573 +vt -0.438571 -0.029518 +vt 1.281244 -0.028283 +vt 0.663788 -0.092355 +vt 0.789333 -0.130440 +vt 0.271864 0.849969 +vt 0.573076 -0.139818 +vt 0.341121 -0.170343 +vt 1.005692 -0.029978 +vt 0.929416 -0.121194 +vt 0.607121 -0.124101 +vt 0.606594 -0.103267 +vt 0.591288 -0.108234 +vt -0.049914 -0.082898 +vt 1.367418 -0.344412 +vt 0.214953 -0.263952 +vt 0.192514 -0.273925 +vt 0.795861 -0.179743 +vt 0.780448 -0.146122 +vt 0.192514 0.900017 +vt 0.214953 0.895094 +vt 0.199473 0.873742 +vt 1.278636 -0.264491 +vt 1.341140 -0.033205 +vt 1.316815 -0.036630 +vt 1.319705 -0.019870 +vt 0.743531 -0.014037 +vt -0.108833 0.233082 +vt 0.148560 -0.205341 +vt 0.385356 0.914971 +vt 0.371330 0.892842 +vt 0.345811 0.915384 +vt 0.515422 0.138024 +vt 0.525699 0.145840 +vt 0.660044 -0.142946 +vt 0.643500 -0.144606 +vt 0.637065 -0.133431 +vt 0.150025 1.021984 +vt 0.167254 0.999198 +vt 0.115382 1.009941 +vt 0.942776 -0.107360 +vt -0.394718 1.055513 +vt -0.374857 1.043761 +vt 0.252637 0.528246 +vt 0.286693 0.560432 +vt 0.257568 0.512739 +vt 0.054023 0.944592 +vt 0.154161 -0.217204 +vt 0.088797 0.238765 +vt 0.058333 0.263551 +vt 0.068231 0.235230 +vt 0.069617 0.939366 +vt 1.395108 -0.382312 +vt 0.636526 0.071526 +vt -0.198014 0.067762 +vt 0.801331 -0.109242 +vt 0.773972 -0.132078 +vt 0.510182 0.099540 +vt 0.510934 0.132267 +vt 0.499859 0.105775 +vt -0.316228 -0.065881 +vt -0.292862 -0.068572 +vt -0.309904 -0.042595 +vt 1.360269 -0.368848 +vt 0.766204 0.053672 +vt 1.357622 -0.189603 +vt 0.687595 -0.083879 +vt 0.185703 -0.200973 +vt 0.362333 0.734167 +vt 0.377015 0.752009 +vt 0.054322 -0.221704 +vt 0.026129 -0.225677 +vt 0.028976 0.956986 +vt 0.047518 0.965780 +vt -0.091372 0.865583 +vt -0.068844 0.860723 +vt 1.271383 -0.107092 +vt 1.254676 -0.014746 +vt 0.202465 -0.138929 +vt -0.088145 0.244023 +vt -0.337910 -0.332479 +vt -0.326258 -0.328948 +vt 0.619224 -0.003223 +vt 0.635656 -0.013762 +vt 0.611436 -0.038310 +vt 0.492505 -0.101267 +vt 0.540344 0.127315 +vt 0.009753 -0.091687 +vt 0.604261 -0.196546 +vt 0.587357 -0.193243 +vt -0.279263 0.127315 +vt -0.237180 0.070149 +vt -0.221805 0.134871 +vt 0.579004 0.134871 +vt 0.572392 0.109975 +vt 0.626248 -0.103231 +vt 0.641018 -0.094942 +vt 0.195759 -0.098190 +vt 0.177250 -0.072306 +vt -0.131062 0.495030 +vt -0.119248 0.495117 +vt 0.325208 0.966068 +vt 0.345702 0.943147 +vt 0.309815 0.959441 +vt 0.350513 0.714709 +vt 0.373897 0.707638 +vt 0.356249 0.677874 +vt 0.375480 0.677943 +vt 0.306638 -0.148728 +vt 1.286395 -0.283532 +vt 1.276278 -0.268784 +vt 0.374067 0.810735 +vt 0.383289 0.805474 +vt 1.159458 0.199468 +vt 0.943116 -0.025628 +vt 0.307598 0.536871 +vt -0.360724 -0.415920 +vt 0.009389 1.027553 +vt -0.029630 1.023733 +vt -0.006927 1.048329 +vt 0.268270 -0.167725 +vt 0.249738 -0.178720 +vt 0.299001 -0.083253 +vt 0.394792 0.695217 +vt 0.411569 0.678924 +vt 0.205629 -0.197548 +vt 0.079475 0.280790 +vt 0.043161 0.280711 +vt -0.124692 -0.027744 +vt 0.356599 0.689059 +vt 0.518228 -0.187329 +vt 0.289885 0.519648 +vt 0.941725 0.104380 +vt -0.101041 1.290149 +vt -0.081804 1.302441 +vt 0.868949 0.100148 +vt 0.857334 0.072408 +vt -0.021127 0.565917 +vt -0.057031 0.566184 +vt -0.024977 0.587080 +vt 0.190952 -0.217119 +vt 0.495630 -0.167725 +vt -0.106965 0.833297 +vt 0.503125 -0.193880 +vt 0.064145 -0.178727 +vt 1.246149 0.097718 +vt 1.251970 0.107477 +vt 0.146500 0.887295 +vt 0.120293 0.890582 +vt 0.131154 0.918094 +vt 0.569103 -0.194417 +vt -0.314180 -0.197541 +vt 0.297570 -0.194417 +vt 0.677135 -0.076586 +vt 0.651223 -0.088764 +vt 0.076058 1.473320 +vt 0.086282 1.485691 +vt 0.912140 0.093837 +vt -0.056789 -0.132045 +vt 0.203307 0.141381 +vt 1.221794 0.088181 +vt -0.249891 0.043981 +vt 0.421411 0.560354 +vt 1.267356 0.079410 +vt 0.899732 0.050067 +vt 0.076820 1.496076 +vt 0.061475 1.521222 +vt 0.078970 1.506171 +vt 0.550819 -0.205561 +vt -0.053166 0.491624 +vt -0.070706 0.492253 +vt -0.058608 0.502090 +vt 0.590678 0.063150 +vt 0.323892 -0.055017 +vt -0.057778 -0.217961 +vt 0.535586 0.063150 +vt 0.531701 0.078795 +vt 0.494554 0.086552 +vt -0.388444 0.007595 +vt -0.106776 0.871403 +vt 0.123262 0.511074 +vt 0.524664 0.076564 +vt 0.515859 0.083852 +vt 0.531883 0.088647 +vt -0.365067 -0.055340 +vt -0.303896 0.053919 +vt -0.311362 0.106892 +vt -0.328037 0.113003 +vt 1.309968 -0.086037 +vt 1.479658 -0.457996 +vt -0.437918 0.075329 +vt -0.081602 0.062524 +vt -0.053116 0.061195 +vt -0.352399 -0.372480 +vt -0.346271 -0.267435 +vt 1.117002 0.145885 +vt 1.135597 0.161260 +vt 0.527910 0.080083 +vt 0.528655 0.112973 +vt 0.550479 0.082710 +vt 1.389885 -0.467620 +vt 1.517919 -0.228253 +vt -0.030025 0.292352 +vt -0.054709 0.298330 +vt -0.036394 0.308177 +vt 0.562199 0.044364 +vt 0.551044 0.013554 +vt 0.544822 0.054807 +vt 0.516626 0.098833 +vt 0.530677 0.052460 +vt 0.634710 0.180020 +vt 0.653882 0.160829 +vt 0.530283 0.010874 +vt 0.503588 0.078405 +vt -0.361185 0.131468 +vt -0.373708 0.177404 +vt -0.355202 0.181164 +vt -0.337577 0.151482 +vt 0.549128 -0.015475 +vt -0.336800 -0.103585 +vt -0.348260 -0.081255 +vt 1.130120 0.051781 +vt 1.149435 0.016310 +vt 0.511724 0.045551 +vt 0.515995 0.002290 +vt 0.471575 0.095764 +vt 0.460222 0.112799 +vt 0.495315 0.743052 +vt 0.023312 0.695069 +vt 0.485499 0.038814 +vt 0.477721 0.071140 +vt 0.738086 0.097597 +vt 0.721676 0.112799 +vt 0.462313 0.097597 +vt 0.462313 0.747700 +vt 0.471575 0.743181 +vt -0.212655 0.142861 +vt 0.480235 0.032029 +vt 0.475786 0.054887 +vt 0.745270 0.071140 +vt 0.755903 0.054887 +vt -0.187587 -0.017325 +vt -0.215287 -0.014137 +vt -0.261346 0.136484 +vt 1.169451 0.148120 +vt 0.107483 0.315082 +vt 1.293886 -0.070527 +vt 0.532144 0.144307 +vt 0.561187 0.164415 +vt 0.484370 -0.015755 +vt 0.475329 0.011254 +vt 0.471369 0.053672 +vt 0.755390 0.032029 +vt 1.140137 -0.018787 +vt -0.284800 -0.044581 +vt -0.044919 -0.041893 +vt -0.050777 -0.015949 +vt 1.383684 -0.234515 +vt 1.372837 -0.181414 +vt -0.445384 0.138013 +vt -0.301163 -0.181414 +vt -0.317334 -0.138199 +vt -0.302624 -0.140097 +vt -0.271390 0.121144 +vt -0.289502 0.146020 +vt 1.267528 -0.078376 +vt -0.313392 0.199654 +vt -0.089261 0.005902 +vt -0.110739 0.035957 +vt 1.470024 -0.470439 +vt -0.263674 0.055140 +vt 1.460726 -0.373757 +vt 1.475643 -0.400860 +vt 1.464417 -0.397365 +vt -0.095931 -0.071389 +vt -0.100904 -0.018644 +vt -0.082208 -0.028867 +vt -0.098017 0.068400 +vt -0.304239 0.963179 +vt -0.333796 1.003759 +vt -0.265250 0.538904 +vt -0.250126 0.541497 +vt -0.252754 0.525472 +vt -0.243992 -0.121671 +vt -0.226016 -0.116086 +vt -0.059097 -0.041675 +vt -0.241872 0.157158 +vt -0.263206 0.171073 +vt -0.058369 -0.080052 +vt 1.446366 -0.349173 +vt 1.438052 -0.354424 +vt -0.321196 0.182574 +vt -0.142379 0.051781 +vt -0.131422 0.067686 +vt -0.144989 0.072815 +vt -0.138639 -0.001703 +vt -0.145014 0.028961 +vt -0.129811 0.020850 +vt -0.154580 -0.041592 +vt -0.145902 -0.030373 +vt -0.324100 -0.439990 +vt -0.230038 0.108946 +vt -0.217543 0.075732 +vt -0.144989 1.132339 +vt -0.147641 1.125004 +vt -0.131422 1.129299 +vt -0.353422 -0.110490 +vt 1.139490 0.081084 +vt -0.283328 -0.430419 +vt -0.455158 0.096465 +vt 1.135436 -0.001703 +vt 1.139210 0.028961 +vt -0.319092 0.158046 +vt -0.014196 -0.127354 +vt -0.106138 0.097022 +vt -0.142151 0.096801 +vt -0.361279 -0.176843 +vt -0.018453 -0.117650 +vt 0.153892 0.309383 +vt -0.160303 0.126147 +vt -0.257962 0.193015 +vt -0.257419 0.013569 +vt -0.030183 0.819088 +vt -0.040776 0.840289 +vt -0.026448 0.855586 +vt -0.174401 1.382140 +vt -0.159097 1.401339 +vt -0.132724 1.390250 +vt -0.291544 0.101780 +vt 1.338092 -0.168808 +vt 1.320377 0.018570 +vt -0.365204 -0.142098 +vt 1.322256 -0.079182 +vt 0.763198 0.077490 +vt 1.474782 -0.098064 +vt 1.484243 -0.107226 +vt -0.268090 -0.034511 +vt -0.270752 -0.018032 +vt -0.255518 -0.019870 +vt -0.404361 0.165987 +vt 0.895098 -0.019348 +vt 0.230875 -0.104689 +vt 0.202940 -0.075575 +vt 0.217704 -0.107242 +vt 1.274006 0.159167 +vt -0.114851 -0.050888 +vt 0.057559 -0.228253 +vt -0.189566 1.244921 +vt 0.458323 0.037137 +vt 1.115391 0.079382 +vt 1.122726 0.072815 +vt -0.147641 0.079382 +vt -0.061766 1.078917 +vt 1.037370 0.105036 +vt -0.151190 -0.041695 +vt -0.252474 -0.004924 +vt -0.014196 1.513561 +vt -0.302590 -0.117714 +vt -0.163926 -0.041637 +vt -0.154419 -0.018787 +vt -0.243095 -0.009201 +vt 1.404552 -0.293693 +vt 1.039823 0.069857 +vt -0.435759 0.004664 +vt 1.058368 0.120695 +vt 1.508648 -0.236786 +vt 1.048710 0.151614 +vt -0.156350 0.104449 +vt 1.103133 0.096801 +vt -0.027174 -0.055598 +vt 0.067912 1.430530 +vt 1.043514 0.196611 +vt 1.050539 0.008646 +vt 1.062996 0.083247 +vt -0.252595 0.076564 +vt 0.336067 0.120536 +vt 0.344708 0.151614 +vt 0.359752 0.120695 +vt 0.328452 0.155752 +vt -0.341221 -0.145876 +vt -0.153609 0.016310 +vt -0.367622 -0.400860 +vt 1.065709 -0.004476 +vt 1.084775 0.041158 +vt 0.365231 0.083247 +vt 0.319105 0.077517 +vt 0.618655 0.018907 +vt -0.375171 -0.349173 +vt 0.465831 0.108965 +vt 0.502587 0.103730 +vt 0.486804 0.125479 +vt 0.345220 0.041158 +vt 0.305182 0.146757 +vt -0.291383 -0.118009 +vt -0.333698 -0.440694 +vt 0.020586 0.929742 +vt -0.216975 0.114751 +vt 0.047301 0.318342 +vt 0.037111 0.291348 +vt 0.028697 0.513059 +vt -0.053427 -0.095115 +vt -0.037661 -0.098064 +vt -0.227082 0.130681 +vt 1.139693 -0.041637 +vt 0.769519 0.242983 +vt 0.748748 0.222541 +vt 0.377866 -0.048155 +vt 0.340447 -0.012634 +vt 0.365608 -0.004476 +vt 0.305125 0.101785 +vt 0.289813 0.159069 +vt 0.297421 0.168870 +vt 0.200538 -0.034326 +vt 0.195526 -0.011184 +vt 0.183549 -0.034542 +vt 0.144884 0.278567 +vt 0.810456 -0.037039 +vt 0.061764 -0.155085 +vt 0.315033 0.015105 +vt 1.050557 0.160425 +vt 0.152774 0.248414 +vt 0.336706 -0.080864 +vt 0.276701 0.131925 +vt 0.266568 0.158479 +vt 0.256690 0.184340 +vt -0.001791 -0.155429 +vt -0.306411 -0.005889 +vt 0.281770 0.110780 +vt 0.130670 0.244334 +vt 0.312358 -0.040079 +vt 0.287605 0.050151 +vt 0.278258 0.079452 +vt -0.032077 1.471042 +vt -0.375770 -0.373757 +vt 0.588586 0.169643 +vt 0.245055 0.170469 +vt 1.502249 -0.142042 +vt 1.511657 -0.155066 +vt 1.484788 -0.160105 +vt 0.543210 0.200999 +vt 0.547390 0.175460 +vt 0.513174 0.180052 +vt 1.262964 -0.039721 +vt 0.311708 -0.091715 +vt 0.246864 0.136180 +vt 1.127112 -0.030736 +vt -0.050641 0.053651 +vt 0.213632 0.181814 +vt 0.775839 0.098344 +vt -0.118092 0.973108 +vt 0.492063 -0.148003 +vt 0.473399 0.731047 +vt 0.244829 0.862988 +vt -0.278166 -0.111279 +vt -0.357598 0.922656 +vt -0.342472 0.890772 +vt 0.289813 1.094746 +vt -0.084911 1.414244 +vt 0.735778 0.012230 +vt -0.234435 1.335272 +vt 0.651678 0.229920 +vt -0.053044 0.234185 +vt -0.057270 0.209576 +vt -0.073090 0.219343 +vt 0.010789 0.754380 +vt 0.682763 0.248608 +vt 0.648777 0.277880 +vt 0.685456 0.286810 +vt 0.024952 0.906978 +vt -0.041465 0.227263 +vt -0.040911 0.199699 +vt 0.536883 0.236233 +vt 0.556945 0.235085 +vt -0.072838 0.245790 +vt -0.088461 0.244432 +vt -0.040911 0.620558 +vt -0.365274 -0.087446 +vt -0.073126 0.529885 +vt -0.074136 0.542760 +vt -0.031827 0.773434 +vt -0.042274 0.806909 +vt -0.013996 0.791027 +vt 1.196746 0.223613 +vt 1.206304 0.199573 +vt 0.000932 0.894196 +vt -0.017741 0.862122 +vt -0.071066 0.159540 +vt 0.008461 0.284623 +vt 0.024952 0.302240 +vt -0.025106 0.657567 +vt 0.504562 0.201812 +vt -0.203073 -0.058177 +vt 0.049014 1.481862 +vt 0.058036 1.509674 +vt 1.418700 -0.287268 +vt -0.260409 -0.092228 +vt -0.270924 -0.112523 +vt -0.233810 -0.098052 +vt -0.072327 0.273807 +vt 0.601958 0.189674 +vt 0.619468 0.195886 +vt 0.005652 -0.179588 +vt 0.006894 -0.158740 +vt 0.791647 0.305778 +vt 0.816092 0.315348 +vt 0.821448 0.277824 +vt 0.484253 0.032690 +vt 0.485455 0.046976 +vt 0.498394 0.044529 +vt 0.668191 0.209468 +vt 0.689713 0.192484 +vt -0.264695 0.926530 +vt 0.752400 0.279007 +vt 0.787469 0.263500 +vt -0.094807 -0.145961 +vt -0.026310 0.254182 +vt -0.001837 0.260421 +vt -0.000977 0.251661 +vt 0.367168 -0.031564 +vt 0.380686 -0.055825 +vt 0.647954 0.207101 +vt 1.232670 -0.122234 +vt 1.211248 -0.108857 +vt -0.328882 0.850291 +vt -0.017948 1.429669 +vt 1.372907 -0.176843 +vt -0.016794 0.514618 +vt -0.032350 0.633706 +vt -0.023731 0.620040 +vt -0.237501 0.124675 +vt -0.244392 0.101667 +vt -0.231325 0.098489 +vt -0.121753 1.435401 +vt -0.103485 1.453532 +vt -0.096847 0.547172 +vt -0.078221 0.564532 +vt -0.088461 0.570467 +vt 1.352847 -0.181666 +vt 1.354727 -0.161440 +vt -0.013636 0.825706 +vt -0.072838 0.583674 +vt 0.884583 0.295677 +vt 0.889138 0.279529 +vt 0.852509 0.297233 +vt -0.166829 -0.054125 +vt 0.506010 0.238577 +vt 0.517770 0.259120 +vt 0.537559 0.251333 +vt 0.846454 0.241488 +vt 0.037238 -0.124631 +vt 0.058699 -0.160552 +vt 1.350360 -0.142098 +vt -0.369750 -0.161440 +vt 0.720702 0.302226 +vt 0.712953 0.262944 +vt -0.059525 0.583977 +vt 0.551784 0.273807 +vt 0.554919 0.258393 +vt 0.534092 0.261197 +vt 0.859757 0.275479 +vt 0.863554 0.244257 +vt -0.341013 0.812738 +vt -0.257653 0.518454 +vt -0.270081 0.546496 +vt -0.091604 0.216184 +vt -0.176198 0.699327 +vt -0.194230 0.718630 +vt -0.191826 0.696050 +vt -0.007329 0.304083 +vt -0.186562 0.681112 +vt 0.751661 0.251357 +vt -0.059525 0.252873 +vt -0.078221 0.258393 +vt 0.647492 0.094512 +vt 0.330285 -0.019531 +vt 0.310613 -0.000252 +vt 0.326613 -0.034443 +vt 0.533146 0.286491 +vt 0.020586 0.253017 +vt -0.207793 0.121253 +vt -0.215304 0.127435 +vt -0.214764 0.108371 +vt -0.206212 0.094512 +vt 0.045835 -0.185989 +vt 0.013733 1.494074 +vt -0.004307 1.474973 +vt -0.007394 1.496891 +vt 0.560853 0.244432 +vt 0.545443 0.231051 +vt -0.105908 0.621501 +vt -0.081102 0.639215 +vt 0.744767 0.302226 +vt 0.765505 0.300234 +vt -0.431583 0.159167 +vt -0.006873 0.279529 +vt 0.000932 0.295677 +vt 0.669404 0.142524 +vt 0.061372 1.369374 +vt 1.315681 -0.087446 +vt 1.313236 -0.102123 +vt 1.341029 -0.110490 +vt -0.397607 1.072513 +vt -0.043241 0.062901 +vt 0.492591 0.074280 +vt -0.126035 1.409689 +vt -0.014827 0.801261 +vt 0.305874 0.179791 +vt -0.212968 0.150553 +vt -0.204803 0.142524 +vt 0.528453 0.164549 +vt 0.624093 0.197187 +vt 0.610426 0.214591 +vt 0.069821 0.927873 +vt 0.376775 0.537305 +vt 0.365227 0.523408 +vt 0.345209 0.543166 +vt -0.424926 1.242115 +vt -0.175902 0.729344 +vt 0.553565 0.224030 +vt -0.065421 0.200054 +vt -0.375111 0.863460 +vt 0.511260 0.155681 +vt 0.497475 0.159751 +vt -0.433818 1.083732 +vt -0.410544 1.098648 +vt -0.432690 1.113030 +vt -0.296850 1.151025 +vt -0.260418 1.164629 +vt -0.434664 1.148633 +vt -0.246164 0.147013 +vt 0.018521 0.730316 +vt -0.413948 1.064355 +vt -0.194857 1.325062 +vt -0.167836 1.335803 +vt -0.181774 1.305976 +vt -0.218675 0.080806 +vt -0.201792 0.087760 +vt -0.201141 0.071526 +vt 0.091883 -0.219975 +vt 0.146564 0.077737 +vt 0.151945 0.093781 +vt 0.137599 0.076025 +vt 0.520673 -0.035045 +vt 0.514303 -0.054278 +vt 0.496205 -0.048127 +vt 0.711653 -0.045539 +vt 0.730673 -0.060284 +vt -0.312281 1.328483 +vt -0.311683 1.348126 +vt 0.575926 0.216184 +vt -0.050247 0.985939 +vt -0.460766 1.098872 +vt -0.445997 1.140534 +vt -0.424926 0.219929 +vt -0.380062 0.825318 +vt -0.442650 1.060419 +vt -0.427398 1.164153 +vt -0.428601 1.212129 +vt 0.506141 -0.029514 +vt -0.294548 -0.078025 +vt -0.275777 -0.074015 +vt -0.346608 -0.155354 +vt 0.031563 -0.165755 +vt -0.076931 0.610108 +vt -0.099616 0.606074 +vt -0.301859 1.378109 +vt -0.275486 1.378596 +vt -0.187858 0.258824 +vt -0.219955 0.263227 +vt -0.225007 0.247332 +vt -0.213756 0.748365 +vt -0.127410 0.610651 +vt 0.493128 -0.016265 +vt 0.520628 -0.027253 +vt 0.513443 -0.014792 +vt 0.531533 -0.028696 +vt 0.547797 -0.041007 +vt -0.369381 0.978474 +vt 0.502269 0.142480 +vt 0.504247 0.126922 +vt -0.110743 0.515623 +vt -0.119986 0.508527 +vt -0.108833 0.502911 +vt 0.778248 0.163658 +vt 0.755718 0.175502 +vt 0.815705 0.187000 +vt -0.403805 1.202907 +vt 0.664768 0.296817 +vt 0.521573 0.231882 +vt -0.382474 0.783232 +vt -0.381015 0.803039 +vt -0.350568 0.784105 +vt -0.134923 0.646353 +vt -0.072327 0.561397 +vt 1.103417 0.275807 +vt 1.139020 0.276378 +vt 1.130921 0.258183 +vt 0.523126 -0.002101 +vt 0.507148 0.000940 +vt 0.543668 -0.008809 +vt 0.532503 -0.052943 +vt -0.068696 0.608970 +vt -0.068599 0.625110 +vt -0.262936 0.872992 +vt -0.266870 0.831530 +vt -0.322681 -0.008809 +vt -0.306138 -0.020187 +vt 0.838742 0.321513 +vt 1.017165 -0.049191 +vt 1.034407 -0.064213 +vt 1.014252 -0.063401 +vt 0.511803 0.112876 +vt -0.368787 0.928835 +vt -0.087672 0.021653 +vt -0.011318 0.507656 +vt -0.132573 0.719062 +vt -0.069258 0.646679 +vt -0.387048 0.847376 +vt 0.915389 0.100866 +vt -0.311601 0.918905 +vt -0.099616 -0.131372 +vt 0.490644 0.142334 +vt 1.154539 0.277716 +vt 1.171253 0.254451 +vt 0.492099 0.180275 +vt 0.493357 0.202147 +vt 0.548299 0.016919 +vt -0.295305 0.016919 +vt -0.229304 0.583840 +vt -0.200483 0.580198 +vt -0.196420 0.600253 +vt 0.874388 0.119671 +vt 0.887547 0.254182 +vt -0.200483 0.055607 +vt -0.229304 0.025089 +vt 0.925019 0.134180 +vt 1.202516 0.244302 +vt -0.333968 0.532739 +vt -0.339064 0.516761 +vt -0.295305 0.557912 +vt 0.094929 1.437726 +vt -0.044553 0.503982 +vt 0.510001 0.037736 +vt 0.493551 0.023207 +vt -0.127295 0.857190 +vt 0.900624 0.147856 +vt 0.187074 0.003846 +vt 0.176877 0.010899 +vt 0.175698 -0.029798 +vt 1.257015 0.156873 +vt 0.032351 0.245416 +vt -0.144277 -0.100365 +vt -0.142195 0.245930 +vt -0.174207 0.245088 +vt 0.534278 0.033955 +vt -0.088230 0.543705 +vt -0.076169 0.655792 +vt -0.460669 1.075048 +vt 0.821599 0.151912 +vt 0.862547 0.146519 +vt 0.974247 0.150836 +vt -0.023607 0.513898 +vt -0.003873 0.511613 +vt -0.023202 0.502052 +vt -0.281107 0.522909 +vt 0.986224 0.146601 +vt 0.022350 0.658391 +vt 0.126357 0.247734 +vt 0.486322 -0.210376 +vt 0.494362 -0.205699 +vt 0.498144 -0.215339 +vt 0.787400 -0.190038 +vt 0.803750 -0.204038 +vt 0.782696 -0.200913 +vt -0.293695 0.033955 +vt -0.277789 0.041785 +vt -0.126700 0.954955 +vt 0.075862 0.499501 +vt 0.085762 0.521838 +vt -0.308496 0.519615 +vt -0.280958 0.508099 +vt -0.293695 0.543891 +vt 0.878472 0.171587 +vt 0.913290 0.175744 +vt -0.348724 0.765331 +vt -0.376009 0.999080 +vt -0.396479 0.922903 +vt 1.228840 0.198351 +vt 1.265154 0.178613 +vt -0.302338 0.506590 +vt -0.295453 0.499393 +vt -0.277789 0.548605 +vt -0.246883 0.005719 +vt 0.590030 0.010182 +vt 0.583187 -0.009734 +vt 0.567285 0.222582 +vt 0.563244 0.200121 +vt -0.031145 -0.255848 +vt -0.023202 -0.253301 +vt -0.033029 -0.236354 +vt -0.288973 1.129178 +vt -0.330835 1.138791 +vt -0.272664 0.200121 +vt -0.236548 -0.033205 +vt -0.229185 0.010182 +vt -0.289854 0.512668 +vt -0.031145 0.498017 +vt 0.837762 0.188522 +vt 0.498486 0.067375 +vt 0.522414 0.064888 +vt 0.538991 0.041785 +vt -0.266856 0.064888 +vt 0.574227 0.025089 +vt 0.574889 0.005719 +vt -0.196895 0.723424 +vt -0.226705 0.734684 +vt 0.885470 -0.226087 +vt 0.852293 -0.238348 +vt 0.851110 -0.228879 +vt 0.535670 -0.069045 +vt 0.539226 -0.084841 +vt 0.523840 -0.094375 +vt 0.371902 0.547724 +vt 0.342545 0.542615 +vt -0.093935 0.493991 +vt -0.084517 0.504357 +vt 1.276579 -0.307278 +vt -0.426480 0.178613 +vt -0.106716 0.493410 +vt -0.187230 0.579454 +vt -0.209552 0.592708 +vt -0.187439 0.615499 +vt 1.055588 0.221758 +vt 1.041383 0.248040 +vt 1.065435 0.254803 +vt 1.089258 0.256484 +vt 1.232502 0.219929 +vt -0.248689 0.506376 +vt -0.216093 0.876222 +vt -0.193095 0.902968 +vt -0.185024 0.879992 +vt 0.853847 0.203402 +vt 0.997621 0.137718 +vt 0.507540 0.081687 +vt -0.265548 0.081687 +vt -0.068491 0.669658 +vt 0.919221 0.197120 +vt -0.400094 0.888085 +vt -0.170821 1.361364 +vt 1.050806 0.265667 +vt -0.265548 0.517153 +vt -0.252595 0.534277 +vt -0.229185 0.599644 +vt -0.211968 0.628268 +vt -0.317953 0.842212 +vt -0.279537 0.821658 +vt -0.314872 0.814469 +vt 0.913043 0.210811 +vt 0.968861 0.181843 +vt 0.558324 -0.020187 +vt 0.107693 1.046661 +vt -0.278737 1.479637 +vt -0.269392 1.460688 +vt -0.293302 1.472090 +vt 0.107693 -0.173821 +vt 0.136738 -0.184162 +vt 0.097679 -0.193905 +vt 0.075378 -0.175198 +vt 0.228657 1.074563 +vt 0.202981 1.072689 +vt 0.199877 1.094886 +vt -0.063610 1.005730 +vt 0.125858 -0.197464 +vt 0.215150 -0.088924 +vt 1.368495 -0.449679 +vt 1.400259 -0.437220 +vt 0.174825 -0.217112 +vt 0.208253 -0.218791 +vt 0.256042 -0.090949 +vt 0.216578 -0.116354 +vt 0.207842 -0.206722 +vt 1.411261 -0.419563 +vt -0.333698 1.496757 +vt -0.313001 1.476483 +vt 1.436304 -0.420383 +vt 1.466870 -0.455520 +vt -0.327357 1.445917 +vt -0.343763 1.462507 +vt -0.354818 1.478791 +vt 1.353595 -0.396352 +vt -0.369147 1.472542 +vt 1.381159 -0.385427 +vt 1.407575 -0.389819 +vt 1.436961 -0.394674 +vt 1.452893 -0.416146 +vt -0.343763 -0.416146 +vt -0.349000 -0.394674 +vt -0.369147 -0.409109 +vt 1.462928 -0.409109 +vt -0.349000 1.446574 +vt -0.375760 1.462935 +vt 1.453321 -0.396289 +vt 1.307123 -0.378572 +vt 1.335162 -0.354915 +vt 1.440336 -0.380180 +vt 1.450542 -0.382971 +vt -0.377320 -0.380180 +vt -0.375760 -0.396289 +vt 0.289396 0.944704 +vt 0.274875 0.962739 +vt 1.419151 -0.371783 +vt -0.351492 -0.371783 +vt 1.394339 -0.349427 +vt -0.381849 -0.367302 +vt 1.432011 -0.367302 +vt 1.362469 -0.342537 +vt -0.358613 -0.361118 +vt 1.295966 -0.108190 +vt -0.346082 -0.349427 +vt 1.418549 -0.351321 +vt 1.433933 -0.360048 +vt -0.380475 -0.351321 +vt -0.346082 1.403953 +vt -0.380475 1.428163 +vt -0.358613 1.424655 +vt 1.319244 -0.325136 +vt -0.355928 -0.334720 +vt 1.415705 -0.336593 +vt 1.368133 -0.319471 +vt 1.393047 -0.334720 +vt -0.383685 -0.329815 +vt 1.405688 -0.329815 +vt 1.402670 -0.315243 +vt -0.385070 -0.360048 +vt -0.383868 -0.354424 +vt 1.159141 0.173274 +vt 1.318194 -0.297167 +vt 1.376519 -0.312447 +vt -0.295899 0.138024 +vt -0.283985 0.125001 +vt -0.287511 0.112876 +vt 0.353866 0.895168 +vt 0.334854 0.877118 +vt 0.150538 -0.064914 +vt 0.163034 -0.110479 +vt 0.136339 -0.098554 +vt -0.317510 1.087672 +vt -0.285256 1.081018 +vt -0.302210 1.067260 +vt -0.355450 -0.312447 +vt -0.378729 -0.308095 +vt 1.389077 -0.308095 +vt 0.082953 -0.106957 +vt 0.111116 -0.121705 +vt 0.079616 -0.132729 +vt 0.742749 -0.015755 +vt -0.121554 -0.107883 +vt 0.108068 -0.134566 +vt 0.096680 -0.152592 +vt 1.347821 -0.280283 +vt 1.391162 -0.298702 +vt 0.223662 -0.130449 +vt 0.316331 1.046321 +vt 0.325401 1.024596 +vt 0.295014 1.020910 +vt 1.363408 -0.285886 +vt -0.358853 -0.285886 +vt -0.383655 -0.288727 +vt 1.381470 -0.288727 +vt 0.193089 -0.098674 +vt -0.055038 0.784788 +vt 0.775175 -0.284146 +vt 0.800606 -0.274274 +vt 0.797295 -0.297693 +vt 0.830676 -0.296903 +vt 0.855837 -0.273599 +vt 0.845972 -0.302589 +vt -0.334854 -0.297163 +vt -0.353764 -0.268784 +vt -0.345919 -0.307278 +vt 1.308849 -0.275616 +vt 0.357606 1.025828 +vt 0.349182 0.994462 +vt 0.330505 1.002610 +vt -0.032644 0.734820 +vt -0.000055 0.704129 +vt -0.017398 0.704922 +vt 0.725206 -0.284145 +vt 0.736563 -0.268761 +vt 0.745062 -0.294436 +vt 0.782039 -0.268201 +vt 0.829035 -0.267147 +vt 0.883191 -0.266090 +vt 0.865794 -0.291954 +vt 1.329652 -0.262141 +vt 1.379525 -0.266969 +vt 0.069617 -0.225654 +vt 0.111057 -0.228808 +vt 0.079839 -0.269755 +vt 0.711226 -0.262769 +vt 0.695309 -0.280419 +vt -0.030756 -0.072208 +vt -0.380560 -0.260035 +vt 1.365073 -0.260035 +vt 0.203033 1.042668 +vt 0.229582 1.047048 +vt 0.665110 -0.265483 +vt -0.359808 -0.247039 +vt 1.343341 -0.247039 +vt 0.006938 0.667635 +vt -0.017556 0.646960 +vt -0.023582 0.674724 +vt 0.677533 -0.248788 +vt 0.697356 -0.244494 +vt 0.725765 -0.250092 +vt 0.764487 -0.254161 +vt 0.779315 -0.250359 +vt 0.818512 -0.256165 +vt 0.011651 -0.147248 +vt 1.310343 -0.233084 +vt 0.186999 -0.126833 +vt 0.624733 -0.245593 +vt 0.643522 -0.243260 +vt 0.637347 -0.255307 +vt 0.879802 -0.240543 +vt -0.034815 -0.232619 +vt -0.014292 -0.227921 +vt -0.028331 -0.266090 +vt 0.012392 1.531259 +vt 0.006894 1.532146 +vt 0.890551 0.085008 +vt 0.199877 -0.144585 +vt 0.171147 -0.150433 +vt 0.776415 -0.241888 +vt 0.841333 -0.232069 +vt 0.822597 -0.228506 +vt 0.893020 -0.232619 +vt 1.286408 -0.238040 +vt 1.327188 -0.234677 +vt 1.360780 -0.228023 +vt -0.344896 -0.263669 +vt -0.346112 1.005152 +vt 0.202090 0.955007 +vt 0.174825 0.938935 +vt 0.158754 0.951648 +vt 0.704183 -0.224782 +vt 0.729374 -0.220047 +vt 0.762259 -0.229841 +vt 1.277413 -0.227034 +vt -0.379801 -0.233167 +vt 1.352334 -0.233167 +vt -0.317865 -0.114123 +vt 0.488176 -0.235404 +vt 0.517675 -0.228505 +vt 0.497748 -0.242447 +vt 0.512920 -0.238658 +vt 0.536074 -0.236332 +vt 0.189323 0.914298 +vt 0.234267 0.915578 +vt 0.613874 -0.224317 +vt 0.647917 -0.213065 +vt 0.682553 -0.220923 +vt 0.779539 -0.217991 +vt -0.106424 0.555057 +vt 0.535608 -0.216370 +vt 0.562720 -0.230717 +vt 0.565090 -0.214615 +vt 0.798474 -0.216364 +vt -0.076303 0.832211 +vt -0.068496 0.850947 +vt -0.090430 0.074280 +vt 0.028999 -0.170489 +vt 0.062927 -0.183546 +vt 0.034300 -0.185310 +vt 0.666782 -0.200660 +vt 0.704675 -0.204918 +vt 0.750188 -0.208973 +vt 0.828895 -0.210119 +vt 0.838038 -0.222393 +vt 0.081706 0.493399 +vt 0.082401 0.510279 +vt 0.102855 0.501893 +vt 1.317238 -0.204477 +vt -0.356448 -0.204477 +vt -0.375660 -0.209944 +vt 1.335583 -0.209944 +vt 0.001447 -0.067579 +vt 0.042711 -0.071427 +vt 0.014339 -0.097025 +vt 0.125858 1.025300 +vt 0.097679 1.030723 +vt 1.056503 0.135078 +vt -0.152571 0.525343 +vt -0.129838 0.545222 +vt -0.150714 0.507757 +vt -0.129167 0.563979 +vt -0.106089 0.574703 +vt 0.622340 -0.200314 +vt 0.073145 -0.078178 +vt 0.049379 -0.094324 +vt -0.349147 -0.192648 +vt -0.358685 -0.227034 +vt 1.286593 -0.190972 +vt 1.302925 -0.194131 +vt -0.344947 -0.101878 +vt -0.330746 -0.091069 +vt -0.358636 -0.090649 +vt 1.506227 -0.199646 +vt 1.522332 -0.216440 +vt 1.498473 -0.223275 +vt 0.515104 -0.196976 +vt 0.515730 -0.208212 +vt 0.546857 -0.192143 +vt 0.554366 -0.207922 +vt -0.054414 -0.196957 +vt -0.041374 -0.214501 +vt 0.591144 -0.196957 +vt 0.599808 -0.192896 +vt 0.759538 -0.186499 +vt 1.331415 -0.190319 +vt -0.005069 -0.286223 +vt -0.023685 -0.291954 +vt 1.484461 -0.209435 +vt 0.081706 -0.216715 +vt 0.068369 -0.230215 +vt 0.682300 -0.177273 +vt 0.046311 0.936209 +vt 1.277453 -0.186642 +vt 0.997385 0.163292 +vt 1.028095 -0.091929 +vt 1.013342 -0.088487 +vt 0.011457 1.515841 +vt 0.542806 -0.175571 +vt -0.141554 -0.192143 +vt -0.064671 -0.183188 +vt -0.048668 -0.192896 +vt 0.612489 -0.175268 +vt 0.651154 -0.177540 +vt 0.714332 -0.177438 +vt -0.240122 0.508347 +vt -0.349334 -0.124293 +vt -0.372328 -0.186034 +vt 1.318807 -0.186034 +vt 1.042975 0.135090 +vt 0.513125 -0.177594 +vt 0.490504 -0.178180 +vt 0.569631 -0.168835 +vt 0.567146 -0.200099 +vt 0.745406 -0.180079 +vt 1.297200 -0.167662 +vt 1.305258 -0.183113 +vt -0.357357 -0.183113 +vt -0.063767 -0.174128 +vt -0.074343 0.723945 +vt -0.055633 -0.170713 +vt 0.592458 -0.174128 +vt 0.600936 -0.170713 +vt 0.592715 -0.183188 +vt 0.069904 -0.164386 +vt 1.502616 -0.171997 +vt 1.487278 -0.187586 +vt 1.517751 -0.179588 +vt 0.510973 -0.154193 +vt 0.633796 -0.162993 +vt 0.662532 -0.158079 +vt 0.237551 -0.133062 +vt 0.071080 0.856426 +vt 0.034210 0.861767 +vt 0.035805 0.886310 +vt 1.007843 0.145451 +vt -0.210944 0.682330 +vt 1.267710 -0.161975 +vt 1.280055 -0.160457 +vt 1.311579 -0.161592 +vt -0.357474 -0.167662 +vt 0.534154 -0.139630 +vt 0.557836 -0.152844 +vt 0.612034 -0.156638 +vt 1.464054 -0.160263 +vt 0.047647 -0.233285 +vt 0.503241 -0.142003 +vt -0.062899 -0.143106 +vt -0.065114 0.672146 +vt -0.072683 0.679179 +vt 0.067794 0.900930 +vt 0.069130 0.885452 +vt 0.512121 0.727923 +vt 0.524386 0.700104 +vt 0.503212 0.703596 +vt 1.240493 -0.164505 +vt 1.249451 -0.155354 +vt 0.576276 -0.140402 +vt 0.669565 -0.155636 +vt 0.048381 0.907491 +vt 0.027409 0.902143 +vt 0.020986 -0.203158 +vt 0.320587 0.935930 +vt 0.310112 0.915836 +vt -0.461047 1.217109 +vt -0.467546 1.226599 +vt -0.460639 1.248310 +vt 1.294121 -0.146777 +vt 1.287137 -0.137755 +vt 1.477765 -0.140937 +vt -0.075589 -0.131211 +vt -0.059981 -0.167610 +vt -0.088940 -0.143351 +vt 0.512130 -0.072306 +vt 0.492440 -0.048767 +vt 0.511872 -0.042759 +vt 0.824848 -0.139173 +vt 0.853949 -0.137213 +vt 0.830369 -0.154395 +vt -0.376725 0.863563 +vt -0.379669 0.897418 +vt -0.355269 0.863763 +vt 1.266853 -0.132106 +vt 1.276113 -0.126873 +vt -0.032600 -0.160105 +vt 0.315843 0.619124 +vt 0.095125 1.455941 +vt 0.887805 -0.134940 +vt 0.901440 -0.124933 +vt 0.894783 -0.145716 +vt -0.388354 0.911053 +vt -0.281099 -0.431072 +vt -0.079087 1.036480 +vt -0.059981 1.045658 +vt 1.236645 -0.145876 +vt 1.239805 -0.124293 +vt 1.434607 -0.154967 +vt 1.463586 -0.129078 +vt -0.050120 -0.160263 +vt 0.159917 -0.272771 +vt 0.131154 -0.274907 +vt 0.822198 -0.120893 +vt 0.062927 1.026326 +vt 0.857207 -0.110954 +vt 0.918732 -0.104518 +vt 0.923965 -0.129688 +vt -0.369226 0.958436 +vt -0.395266 0.963279 +vt 1.303658 -0.394592 +vt 0.144286 -0.219122 +vt 0.270323 -0.067700 +vt 1.030807 -0.122022 +vt 1.059612 -0.117950 +vt 1.066115 -0.080864 +vt 0.970873 -0.125311 +vt 0.994691 -0.116085 +vt 0.081761 1.005282 +vt 0.046311 -0.222706 +vt 0.041742 -0.268665 +vt 0.051421 1.002926 +vt -0.370178 0.834461 +vt -0.386931 0.831811 +vt 0.825426 -0.104300 +vt -0.395585 0.866820 +vt -0.415838 0.881011 +vt 0.871397 -0.096700 +vt 0.953666 -0.100884 +vt -0.022461 -0.114497 +vt 0.228657 -0.158052 +vt -0.154040 0.566569 +vt -0.138526 0.591624 +vt -0.132834 0.585889 +vt 1.227058 -0.112944 +vt 1.264690 -0.106895 +vt 1.281252 -0.111658 +vt 0.165144 0.974621 +vt 0.198813 0.979347 +vt 0.305879 0.888502 +vt 0.556956 -0.132218 +vt 0.793425 -0.108404 +vt -0.409417 0.865759 +vt 0.895867 -0.102663 +vt 0.248984 1.052068 +vt 1.240464 -0.102720 +vt -0.174465 -0.069857 +vt 1.436570 -0.107883 +vt 1.443919 -0.124400 +vt 1.425787 -0.121709 +vt 0.196069 0.522274 +vt 0.613484 -0.098663 +vt 0.631691 -0.089861 +vt 0.672717 -0.117014 +vt 0.669449 -0.081523 +vt 0.672807 -0.096753 +vt -0.359107 0.760862 +vt -0.054677 -0.036951 +vt 0.378347 1.004305 +vt 0.391202 0.980487 +vt 0.159917 0.912561 +vt 1.229465 -0.098365 +vt 1.418727 -0.100365 +vt 1.391726 -0.104110 +vt 0.111673 -0.261533 +vt 0.100128 -0.286116 +vt -0.029099 -0.185726 +vt -0.063610 -0.184442 +vt -0.029630 -0.177518 +vt -0.359107 -0.106016 +vt 0.773618 -0.098120 +vt 0.800224 -0.091264 +vt 0.826599 -0.092501 +vt -0.408109 0.836212 +vt 0.879840 -0.083701 +vt 0.999001 -0.110238 +vt 0.019909 -0.141803 +vt -0.006927 -0.162600 +vt -0.064444 -0.106367 +vt -0.081761 -0.103943 +vt 1.242721 -0.089609 +vt 1.279156 -0.091932 +vt 1.403828 -0.088422 +vt 0.576110 -0.084098 +vt 0.594171 -0.084174 +vt 0.565959 -0.100871 +vt -0.208913 0.623097 +vt -0.223463 0.603785 +vt -0.219036 0.641304 +vt -0.382541 -0.082199 +vt 0.751248 -0.106016 +vt 0.755257 -0.082199 +vt 0.817026 -0.085564 +vt 0.916666 -0.079312 +vt 0.938485 -0.078838 +vt 0.990793 -0.079698 +vt 1.249789 -0.082306 +vt 1.284814 -0.077661 +vt 1.385775 -0.082931 +vt 1.372527 -0.097688 +vt -0.164224 -0.088422 +vt 0.109056 -0.220637 +vt 0.077797 -0.221297 +vt -0.257769 0.569385 +vt -0.232311 0.585723 +vt -0.238182 0.566609 +vt -0.251251 -0.069454 +vt -0.232311 -0.084098 +vt -0.257769 -0.082607 +vt 0.207842 0.942387 +vt 0.221793 0.949957 +vt -0.318936 -0.087580 +vt -0.341146 -0.077050 +vt -0.376830 -0.074002 +vt 0.775429 -0.070214 +vt 0.828463 -0.071747 +vt 0.857635 -0.076152 +vt 0.856145 -0.097746 +vt -0.031995 -0.101246 +vt -0.036962 0.170107 +vt -0.040757 0.142902 +vt -0.023392 0.160898 +vt 0.144286 0.945331 +vt 0.118626 0.953649 +vt 0.015776 -0.178001 +vt -0.391469 1.222934 +vt -0.367933 1.252335 +vt -0.375411 1.259403 +vt 1.269331 -0.072470 +vt -0.290918 -0.064440 +vt -0.298570 -0.084841 +vt -0.240162 -0.064187 +vt 0.581506 -0.064187 +vt 0.632412 -0.052148 +vt 0.714877 -0.087580 +vt 0.693093 -0.065881 +vt 0.728116 -0.077050 +vt 0.747263 -0.074002 +vt 0.804528 -0.068340 +vt 0.000945 -0.225518 +vt 0.031956 -0.229571 +vt -0.003098 -0.259003 +vt 0.866065 -0.246459 +vt 0.879975 -0.254924 +vt 0.899646 -0.233008 +vt 1.193294 -0.067863 +vt 1.213320 -0.081953 +vt 1.200559 -0.088015 +vt 1.234336 -0.063803 +vt 1.354722 -0.070317 +vt 1.398191 -0.069857 +vt 0.012392 -0.153700 +vt 0.553637 -0.064440 +vt -0.280636 0.044243 +vt -0.267808 0.071550 +vt -0.295453 0.044653 +vt 0.597020 -0.056968 +vt 0.661844 -0.068511 +vt -0.358982 -0.060284 +vt 0.867766 -0.056663 +vt 0.909479 -0.054649 +vt 0.952332 -0.059840 +vt 0.994177 -0.057226 +vt 1.112402 -0.059789 +vt 1.124731 -0.066455 +vt 1.113884 -0.078858 +vt -0.397901 1.243950 +vt -0.380745 1.278945 +vt 1.295882 -0.060103 +vt 1.367185 -0.061490 +vt -0.205156 -0.061490 +vt -0.180636 -0.082931 +vt 1.380919 -0.059004 +vt -0.324528 -0.052943 +vt -0.306020 -0.069045 +vt 0.649205 -0.044455 +vt -0.331199 -0.054812 +vt 0.700930 -0.054812 +vt -0.379624 -0.052381 +vt 0.749612 -0.052381 +vt 0.775346 -0.052666 +vt 1.077717 -0.070072 +vt 1.082330 -0.054225 +vt 1.086630 -0.074181 +vt -0.437304 1.134344 +vt -0.401732 1.261376 +vt 1.283244 -0.049801 +vt 1.309413 -0.055340 +vt 1.476814 -0.415920 +vt -0.263502 -0.042543 +vt 0.845665 -0.044089 +vt 0.944051 -0.048115 +vt 0.981366 -0.046788 +vt -0.408749 1.003790 +vt -0.412185 1.026779 +vt 1.140555 -0.043577 +vt 1.169409 -0.059329 +vt 0.360726 0.977391 +vt 1.325355 -0.070276 +vt 1.345714 -0.046609 +vt -0.317632 -0.041007 +vt -0.306304 -0.039179 +vt 0.582642 -0.036132 +vt 0.226152 0.519378 +vt 0.231086 0.509335 +vt 0.021480 -0.190098 +vt 0.884873 -0.041330 +vt 1.052253 -0.058421 +vt -0.432485 1.214369 +vt -0.417233 1.209797 +vt -0.415358 1.238434 +vt 1.251762 -0.057181 +vt 1.297613 -0.040855 +vt -0.372432 -0.043342 +vt -0.404218 -0.035433 +vt 0.910535 -0.033191 +vt 0.326548 0.851144 +vt 0.308473 0.859635 +vt 1.335330 -0.047214 +vt -0.228075 -0.046609 +vt 0.660300 -0.045524 +vt 0.653563 -0.015112 +vt -0.306020 0.545283 +vt -0.315637 0.529353 +vt -0.324528 0.542116 +vt -0.417383 1.290857 +vt -0.393615 1.292857 +vt -0.408451 1.272577 +vt -0.014218 0.242216 +vt -0.035077 0.291938 +vt -0.038638 0.266303 +vt 0.309994 -0.117950 +vt 1.036708 -0.135073 +vt 0.278659 0.988222 +vt -0.278737 -0.470439 +vt -0.289499 -0.465511 +vt -0.041374 0.602223 +vt -0.036875 0.596176 +vt -0.057778 0.591944 +vt 0.088930 0.887415 +vt 0.100128 0.909287 +vt -0.257129 1.046479 +vt 0.492554 -0.019105 +vt 0.247682 0.961366 +vt 0.225831 0.084186 +vt 0.205500 0.082633 +vt 0.212325 0.068071 +vt 0.263228 -0.142958 +vt -0.203870 0.505919 +vt -0.264019 1.456773 +vt 0.000898 -0.132119 +vt -0.047858 -0.145626 +vt 0.180437 1.058054 +vt 0.442227 0.672319 +vt 0.424238 0.660836 +vt 0.437961 0.686748 +vt 0.061143 -0.160489 +vt 0.043091 -0.152356 +vt -0.328508 0.920197 +vt 0.011643 -0.222319 +vt 1.529284 -0.191674 +vt 0.107402 -0.095132 +vt 0.243596 0.889589 +vt -0.088940 1.066348 +vt 0.173654 0.897402 +vt 0.180437 -0.179887 +vt 0.706330 -0.056467 +vt 0.452642 0.715944 +vt 0.452875 0.700305 +vt 0.434545 0.697209 +vt 0.690691 -0.065862 +vt 0.336547 0.679622 +vt 0.183282 0.864489 +vt 0.331790 1.040420 +vt 0.357606 -0.121109 +vt 0.331790 -0.122022 +vt 0.516931 0.672217 +vt 0.876984 -0.163183 +vt 0.301440 1.002106 +vt 0.408345 0.856430 +vt 0.079616 1.092245 +vt 0.111116 1.114944 +vt 0.190928 1.027772 +vt 0.395701 0.886598 +vt -0.129501 0.127772 +vt 1.017711 -0.105640 +vt 0.361632 -0.072678 +vt 0.371654 -0.105640 +vt -0.044553 0.297584 +vt -0.067552 0.287881 +vt 1.014982 -0.138860 +vt 0.272080 1.009949 +vt 0.157399 1.059978 +vt 0.136738 1.036679 +vt 0.529665 -0.023818 +vt 0.540240 -0.033513 +vt 0.512121 -0.048792 +vt -0.289499 1.492380 +vt 0.274830 1.057953 +vt 0.271900 1.034454 +vt -0.184555 0.189674 +vt 0.451093 0.649814 +vt 0.486546 0.679543 +vt 0.285261 1.063741 +vt 0.500272 -0.028877 +vt 0.014226 -0.275765 +vt 0.027409 -0.290601 +vt 0.310517 0.836149 +vt 0.245607 0.909260 +vt 0.723287 -0.040575 +vt 0.464116 0.732900 +vt 0.468852 0.712095 +vt 1.152767 -0.059468 +vt -0.091115 -0.220942 +vt 0.261049 -0.153857 +vt 0.235622 -0.136424 +vt 0.690490 -0.058695 +vt 0.163034 1.118035 +vt 0.144963 1.083590 +vt 0.136300 1.097970 +vt 0.541909 0.712927 +vt 0.347264 0.837015 +vt 0.345325 0.801549 +vt 0.326037 0.828721 +vt 0.549766 0.672271 +vt 0.309994 1.069225 +vt 0.497694 0.134963 +vt -0.274891 -0.062696 +vt 1.233369 -0.076950 +vt 0.309815 -0.190463 +vt 0.078022 0.990304 +vt -0.266770 -0.054213 +vt 1.289384 -0.062696 +vt -0.253628 -0.036630 +vt -0.001307 0.881971 +vt -0.005069 0.896071 +vt 0.000898 1.082025 +vt -0.047858 1.066344 +vt 0.245607 -0.233008 +vt 0.243596 -0.254924 +vt 0.263228 1.072812 +vt 0.237551 1.096338 +vt -0.253628 1.326428 +vt -0.253619 1.311650 +vt -0.268090 1.318237 +vt -0.253619 -0.050825 +vt -0.251239 1.267601 +vt -0.274891 1.298998 +vt -0.266770 1.303695 +vt -0.270038 1.277142 +vt 0.045727 -0.230594 +vt -0.023685 0.875407 +vt -0.241766 1.294281 +vt -0.266306 1.258921 +vt 0.053686 -0.110517 +vt -0.089774 0.558552 +vt -0.069396 0.573710 +vt 1.302036 -0.050825 +vt -0.218159 1.334968 +vt -0.224716 1.319739 +vt 0.486408 0.597221 +vt 0.458206 0.580096 +vt 0.471880 0.597934 +vt 0.822221 -0.181313 +vt -0.116961 0.545687 +vt -0.096606 0.572334 +vt 0.143739 0.977106 +vt 0.028999 1.051400 +vt -0.032464 1.049860 +vt 0.031956 0.929620 +vt 0.000945 0.922892 +vt 0.011643 0.934790 +vt -0.226065 1.245476 +vt 0.049379 1.110498 +vt 0.082953 1.117542 +vt 0.053686 1.096607 +vt 0.376775 -0.074309 +vt 0.019909 1.070637 +vt -0.279723 1.357954 +vt 0.854149 -0.158495 +vt -0.233177 1.211154 +vt 0.034300 1.035098 +vt 0.540240 0.732854 +vt 0.009389 -0.185447 +vt 0.159785 1.034930 +vt -0.029099 1.016786 +vt 1.257987 -0.070013 +vt 0.085762 -0.165589 +vt -0.247111 1.179519 +vt -0.225300 1.187001 +vt -0.211594 1.159802 +vt -0.231472 1.111795 +vt -0.249338 1.087322 +vt -0.260432 1.100393 +vt -0.240628 1.080364 +vt -0.239461 1.268980 +vt 1.201540 -0.087234 +vt 1.177387 -0.082563 +vt -0.206221 1.173379 +vt -0.219149 1.068968 +vt 0.002824 0.850781 +vt 1.016214 -0.121109 +vt -0.274103 0.080361 +vt -0.280958 0.067375 +vt -0.213645 1.129901 +vt -0.203805 1.119593 +vt -0.203805 -0.100612 +vt -0.185074 -0.134642 +vt -0.240628 -0.128674 +vt -0.195945 1.050965 +vt -0.229809 1.021873 +vt 0.476147 -0.022071 +vt -0.200268 1.140957 +vt -0.185074 1.096423 +vt -0.192356 1.073797 +vt 0.476147 0.752165 +vt 0.500272 0.746074 +vt -0.190708 1.138887 +vt -0.187555 1.014361 +vt 0.227519 0.867524 +vt 1.129274 -0.080166 +vt -0.190708 -0.080166 +vt -0.180585 -0.100626 +vt -0.169557 1.037079 +vt 0.067794 -0.295705 +vt 0.048381 -0.286214 +vt -0.088468 -0.123339 +vt -0.182262 1.162380 +vt -0.173248 1.143766 +vt -0.173248 -0.062864 +vt -0.154000 -0.116971 +vt -0.157850 1.060838 +vt 0.412877 0.650631 +vt 0.422842 0.673401 +vt -0.078248 1.473199 +vt 1.134152 -0.062864 +vt 0.527719 0.671847 +vt 0.358329 0.825348 +vt -0.159038 -0.094760 +vt -0.136511 1.085710 +vt -0.154000 1.116687 +vt 0.111057 0.942500 +vt -0.140341 -0.096024 +vt -0.140594 1.034499 +vt 0.464116 -0.040575 +vt 0.388437 0.948116 +vt 0.034507 -0.240648 +vt -0.111787 1.100978 +vt -0.120795 1.060694 +vt 0.136300 -0.130311 +vt 0.244182 0.510160 +vt 0.265247 0.513298 +vt -0.268884 -0.102544 +vt -0.111787 -0.106498 +vt -0.111787 -0.128275 +vt 0.516626 0.749237 +vt -0.107553 1.041394 +vt 0.124583 0.966768 +vt -0.257309 0.500345 +vt -0.134107 0.522534 +vt -0.238182 -0.099013 +vt -0.097429 1.056984 +vt -0.268884 0.548048 +vt -0.247494 0.493269 +vt -0.097429 -0.157612 +vt -0.120795 -0.155289 +vt 0.094492 0.844203 +vt 0.085328 0.860479 +vt 0.171147 1.083269 +vt -0.101070 0.109157 +vt -0.111787 1.116760 +vt -0.081761 1.104823 +vt -0.088468 1.088078 +vt 0.202981 -0.161833 +vt -0.328745 -0.027647 +vt -0.227174 0.495845 +vt -0.075589 1.077446 +vt -0.079087 -0.173556 +vt -0.362050 1.008614 +vt -0.259031 1.140791 +vt -0.149817 0.935445 +vt -0.365867 1.037709 +vt -0.334684 1.033910 +vt -0.328150 0.956742 +vt 0.300339 -0.072137 +vt -0.254932 0.807908 +vt -0.243851 0.865026 +vt -0.235552 0.834211 +vt -0.349979 0.960635 +vt -0.336721 1.052222 +vt -0.222830 0.850107 +vt -0.312404 0.509241 +vt -0.300808 0.494176 +vt -0.292344 1.055445 +vt -0.374626 1.103141 +vt -0.356245 1.078755 +vt 0.512810 0.632803 +vt -0.206153 1.300980 +vt -0.001332 -0.231884 +vt 0.491183 0.639263 +vt -0.359194 0.839983 +vt 0.482968 0.654329 +vt -0.138526 -0.132502 +vt -0.331462 1.108317 +vt -0.230984 1.007579 +vt -0.327817 0.883604 +vt 0.421411 0.141732 +vt 0.460973 0.624454 +vt -0.038353 -0.013732 +vt -0.354745 -0.255435 +vt -0.183727 0.736294 +vt -0.176867 0.697150 +vt -0.244540 0.920829 +vt -0.251627 0.941268 +vt -0.377506 -0.060103 +vt 0.774491 -0.128553 +vt 0.324798 0.660395 +vt 0.312268 0.662526 +vt -0.268056 0.992951 +vt 0.445824 0.599415 +vt 0.443161 0.629732 +vt 0.154472 -0.062591 +vt -0.268264 1.080955 +vt -0.316917 1.167696 +vt -0.345104 0.766246 +vt -0.344947 0.747983 +vt -0.345104 -0.118983 +vt -0.339682 -0.144504 +vt -0.326128 -0.132170 +vt 0.436563 -0.081116 +vt 0.436563 0.571280 +vt -0.234827 0.905853 +vt -0.183619 0.757405 +vt -0.139831 1.349854 +vt 0.421339 0.598978 +vt 0.423108 0.643444 +vt -0.053166 -0.254290 +vt -0.222343 0.924312 +vt 0.018892 -0.244565 +vt -0.281005 -0.110559 +vt -0.272129 -0.119245 +vt -0.260411 -0.116622 +vt 1.517363 -0.230594 +vt 0.405710 0.620991 +vt -0.169592 0.802611 +vt -0.199583 0.824823 +vt 0.503805 -0.083691 +vt 0.499628 -0.096613 +vt -0.313917 -0.122831 +vt -0.320259 -0.104505 +vt -0.256810 0.901583 +vt -0.182139 0.796098 +vt 0.131137 -0.057344 +vt 0.113520 -0.034175 +vt 0.519740 -0.069445 +vt 0.421938 0.544965 +vt 0.406135 0.549180 +vt 0.398940 0.578349 +vt 0.013691 0.547201 +vt -0.369919 1.132726 +vt -0.326128 0.760457 +vt -0.314599 0.778579 +vt -0.433573 1.096243 +vt -0.425765 1.123497 +vt -0.267236 0.970607 +vt -0.234195 0.959535 +vt -0.238062 0.990621 +vt -0.343874 0.825318 +vt -0.195768 0.855578 +vt -0.152878 0.874021 +vt -0.149506 0.840834 +vt 0.400718 0.635861 +vt -0.142022 0.885532 +vt -0.138077 0.916349 +vt -0.280036 0.780316 +vt 0.406135 -0.077218 +vt 0.385681 0.616207 +vt -0.138977 0.788110 +vt -0.147066 0.815863 +vt -0.163504 0.225265 +vt -0.165833 0.998164 +vt -0.304613 0.533454 +vt 0.583094 -0.101245 +vt 0.684204 -0.105328 +vt 0.693872 -0.118248 +vt -0.304747 1.489518 +vt 0.365790 0.571534 +vt 0.377122 0.596019 +vt -0.298777 1.444517 +vt 0.367805 0.600902 +vt -0.039418 0.099540 +vt -0.041741 0.085087 +vt 0.135266 0.504311 +vt -0.072495 0.267497 +vt -0.397597 1.000406 +vt -0.198906 0.956682 +vt -0.199675 0.984396 +vt -0.176468 0.955890 +vt -0.033959 0.754676 +vt -0.226205 1.284529 +vt -0.136904 0.748268 +vt 0.352361 0.584084 +vt -0.157286 1.324434 +vt -0.226016 0.707146 +vt -0.167660 0.760866 +vt -0.157965 0.781496 +vt -0.251543 -0.068690 +vt -0.157598 0.719219 +vt -0.147034 0.747594 +vt -0.312281 -0.415287 +vt -0.180648 0.644990 +vt -0.150041 0.637106 +vt -0.157753 0.616502 +vt -0.157617 0.705754 +vt -0.157913 0.684370 +vt -0.233810 0.691395 +vt -0.221232 0.693817 +vt -0.339584 0.808451 +vt -0.339682 0.785941 +vt -0.436460 1.087331 +vt 0.412893 0.823739 +vt -0.138450 0.863544 +vt -0.167257 0.590192 +vt -0.164987 0.543767 +vt -0.259156 0.737852 +vt 0.681782 -0.098052 +vt -0.233197 -0.081523 +vt 0.319434 0.527942 +vt -0.011318 0.308821 +vt 1.479905 -0.462889 +vt 1.489068 -0.452921 +vt -0.161785 0.664003 +vt -0.225946 0.682420 +vt -0.153536 0.906573 +vt -0.193850 0.921926 +vt -0.180313 0.676598 +vt -0.143738 0.497789 +vt -0.137732 0.507361 +vt 0.317033 0.735049 +vt 0.317135 0.770183 +vt 0.668138 -0.142981 +vt -0.330746 0.735420 +vt -0.042534 0.237534 +vt 0.325448 0.596970 +vt 0.305492 0.609861 +vt 0.609511 -0.212176 +vt 0.108803 0.535386 +vt 0.129927 0.510736 +vt 0.306932 0.804585 +vt 0.278719 -0.040926 +vt 0.265397 -0.061582 +vt 0.272927 -0.100796 +vt 1.029927 0.173977 +vt 1.347953 -0.445174 +vt -0.214508 0.941368 +vt 0.295298 0.587141 +vt 0.600248 -0.216435 +vt 0.624375 -0.232680 +vt 0.306476 0.633989 +vt 0.677180 -0.233377 +vt 0.708706 -0.241506 +vt 0.725436 -0.231191 +vt 0.696090 -0.218010 +vt 0.297450 0.756952 +vt -0.137841 0.685248 +vt 0.293222 0.616988 +vt 0.289652 0.635884 +vt 0.303117 0.686794 +vt 0.304039 0.718319 +vt 0.290730 0.736323 +vt 0.293475 0.786801 +vt -0.236682 -0.068511 +vt 0.279822 0.810417 +vt 0.343928 -0.100800 +vt 0.297570 0.578716 +vt 0.276901 0.589731 +vt 0.272064 0.600331 +vt 0.263197 0.674549 +vt 0.282551 0.702324 +vt -0.278377 -0.058277 +vt -0.362582 0.814367 +vt 0.273704 0.571875 +vt 0.276047 0.634014 +vt 0.269480 0.650567 +vt -0.237683 0.492322 +vt -0.259156 -0.153555 +vt 0.264089 0.614696 +vt 0.269397 0.738218 +vt 0.253567 0.752485 +vt 0.259457 0.777386 +vt 1.476233 -0.434701 +vt 1.487657 -0.424763 +vt 1.487143 -0.440694 +vt 0.250811 0.558997 +vt 0.252662 0.697887 +vt 0.254356 0.717719 +vt 0.248642 0.583295 +vt 0.252101 0.600631 +vt 0.250367 0.621325 +vt 0.246898 0.735612 +vt 0.239489 0.804803 +vt 0.249313 0.827314 +vt -0.043644 -0.240543 +vt -0.047593 -0.226087 +vt 0.244471 0.642996 +vt 0.229993 0.677534 +vt 0.225285 0.749079 +vt 0.235388 0.780037 +vt 0.233251 0.539497 +vt 0.229502 0.562592 +vt 0.226298 0.726404 +vt 0.232595 0.833928 +vt 0.827401 -0.203566 +vt 0.815734 -0.193731 +vt 0.791936 -0.209528 +vt 0.211966 0.577274 +vt 0.225075 0.596921 +vt 0.212710 0.630415 +vt 0.222327 0.699893 +vt 0.218151 0.778076 +vt 0.213289 0.809408 +vt 0.208878 0.839021 +vt 0.207444 0.543428 +vt 0.202011 0.592898 +vt 0.206448 0.640005 +vt 0.210140 0.749389 +vt 0.194202 0.674248 +vt 0.195077 0.706560 +vt 0.208484 0.783340 +vt 0.190692 0.606683 +vt 0.195488 0.728793 +vt 0.197688 0.826740 +vt 0.182714 0.524430 +vt 0.176765 0.558456 +vt 0.189092 0.571867 +vt 0.191004 0.747602 +vt 0.186043 0.810342 +vt -0.260411 0.492418 +vt 0.185446 1.009227 +vt 0.190952 0.509619 +vt 0.170242 0.549586 +vt 0.186489 0.649830 +vt 0.166141 0.760179 +vt 0.178770 0.782810 +vt 0.177700 0.585539 +vt 0.179215 0.622816 +vt 0.169356 0.731626 +vt 0.172489 0.831443 +vt 0.169944 0.854532 +vt -0.206507 0.493663 +vt 0.163349 0.603317 +vt 0.169881 0.646254 +vt 0.168087 0.679547 +vt 0.162953 0.704746 +vt 0.154161 0.500784 +vt 0.158951 0.509414 +vt 0.150259 0.803494 +vt 0.499117 0.270415 +vt 0.498526 0.250383 +vt -0.429100 1.061867 +vt 0.150190 0.569072 +vt 0.150190 -0.235869 +vt 0.142534 -0.252894 +vt 0.177700 -0.252036 +vt 0.189092 -0.233498 +vt 0.155962 0.628192 +vt 0.148082 0.525778 +vt 0.142534 0.580811 +vt 0.146639 0.594866 +vt 0.147030 0.653221 +vt 0.143635 0.731584 +vt 0.149761 0.825017 +vt 0.145467 0.559464 +vt 0.130470 0.618196 +vt 0.147756 0.697473 +vt 0.138718 0.843761 +vt 0.133445 0.865572 +vt 0.815705 -0.162925 +vt 0.127342 0.549699 +vt 0.145467 -0.227135 +vt 0.128349 0.690191 +vt 0.132327 0.763655 +vt 0.132274 0.500871 +vt 0.125630 0.559423 +vt 0.125630 -0.232625 +vt 0.126775 0.654139 +vt 0.118058 0.715557 +vt 0.113381 0.795826 +vt 0.127329 0.813755 +vt 0.125329 0.834260 +vt 0.118226 -0.254029 +vt 0.118226 0.574506 +vt 0.114061 0.601036 +vt 0.117491 0.734019 +vt 0.115513 0.985005 +vt 0.110059 0.621702 +vt 0.116839 0.674620 +vt 0.107804 0.776993 +vt 0.107095 0.652922 +vt 0.094733 0.743291 +vt 0.094173 0.827712 +vt 0.100735 0.576567 +vt 0.088577 0.683235 +vt 0.085888 0.697489 +vt 0.253841 -0.099387 +vt 0.087081 0.558607 +vt 0.087081 -0.233803 +vt 0.100735 -0.257510 +vt 0.083831 0.625970 +vt 0.093670 0.717937 +vt 0.073591 0.653758 +vt 0.093639 0.759485 +vt 0.095481 0.791921 +vt 0.084858 -0.255821 +vt 0.084858 0.577895 +vt 0.071029 0.608279 +vt 0.074008 0.747119 +vt 0.074899 0.779355 +vt 0.057486 0.793692 +vt 0.053787 0.815377 +vt 0.068369 0.501051 +vt 0.063643 0.581746 +vt 0.063524 0.641455 +vt 0.062416 0.676420 +vt 0.059079 0.714961 +vt 0.391196 0.082601 +vt 0.059176 0.560319 +vt 0.063643 -0.257882 +vt 0.054917 0.696064 +vt -0.298570 0.548840 +vt 0.039116 1.446740 +vt 0.039991 0.844858 +vt -0.113291 0.591784 +vt 0.512792 0.164949 +vt 0.492306 0.165412 +vt 0.493298 0.233082 +vt 0.039544 0.573317 +vt 0.045664 0.612574 +vt 0.044286 0.662467 +vt 0.040900 0.714936 +vt 0.048243 0.765682 +vt 0.218968 -0.034176 +vt 0.207490 -0.020910 +vt 0.488506 0.183614 +vt 0.034872 0.564673 +vt -0.277270 -0.162905 +vt 0.214272 -0.055270 +vt 0.027594 1.468882 +vt 0.030253 1.508087 +vt 0.004078 0.746831 +vt 0.014372 0.768624 +vt 0.021028 0.816258 +vt 0.045727 1.526977 +vt 0.018354 0.596696 +vt 0.022691 0.633511 +vt 0.016604 0.702561 +vt 0.019350 0.715354 +vt -0.273169 0.499728 +vt -0.283176 0.503477 +vt 0.493423 0.080361 +vt 0.490115 0.091708 +vt 0.011805 0.580902 +vt 0.033661 0.191321 +vt 0.000233 0.207554 +vt 0.021577 0.134767 +vt 0.008623 1.440095 +vt 0.005370 0.819101 +vt 0.043008 0.148014 +vt -0.216373 -0.118248 +vt -0.221232 -0.105328 +vt 0.446250 0.105135 +vt 0.422036 0.112870 +vt 0.430762 0.086882 +vt 0.494822 0.109774 +vt -0.267612 0.105876 +vt 0.176179 -0.048767 +vt 0.004399 0.576160 +vt -0.004852 0.591428 +vt -0.006687 0.775312 +vt -0.286541 0.504436 +vt -0.287511 0.521416 +vt -0.267612 0.527392 +vt 0.212033 -0.151693 +vt 0.184061 -0.161326 +vt 0.220088 -0.163181 +vt 0.171841 0.208144 +vt 0.197886 -0.081147 +vt 0.493864 0.098959 +vt -0.020841 0.634346 +vt 0.756633 -0.118983 +vt 0.090630 -0.008657 +vt 0.069428 -0.023846 +vt -0.027036 0.600284 +vt 1.427730 -0.244138 +vt -0.309183 1.498681 +vt -0.252754 0.083852 +vt 0.054273 -0.058884 +vt 0.043719 -0.022072 +vt 0.063862 0.290295 +vt 1.177723 -0.084078 +vt 0.287133 0.168174 +vt 0.248205 0.168167 +vt 0.244746 0.137880 +vt 0.271261 0.200268 +vt 0.227349 0.215804 +vt 0.222408 0.507808 +vt 0.191215 0.507822 +vt 0.299708 0.062993 +vt 0.299545 0.080258 +vt 0.274769 0.094667 +vt 0.455577 0.071375 +vt 0.324035 0.039704 +vt 0.305893 0.039761 +vt 0.079475 0.505069 +vt 0.121581 0.224103 +vt 0.073490 0.171248 +vt 0.306904 0.016542 +vt 0.149123 0.043142 +vt 0.162513 0.058324 +vt 0.155730 0.066782 +vt 0.357721 -0.014736 +vt -0.082125 0.270415 +vt 0.022895 0.292307 +vt 0.045790 0.294612 +vt 0.028697 0.303903 +vt 0.224206 0.237569 +vt 0.196083 0.245797 +vt 0.209117 0.213296 +vt 0.046700 0.215658 +vt 0.491845 0.004891 +vt 0.316351 0.061492 +vt 0.212143 0.191901 +vt 0.207490 0.499569 +vt 0.214989 0.510412 +vt 0.195526 0.501835 +vt 0.233004 0.143013 +vt 0.230918 0.171827 +vt 0.318077 0.096921 +vt 0.244514 0.091187 +vt 0.257947 0.225895 +vt 0.299683 -0.019801 +vt 0.306571 -0.032571 +vt 0.244182 0.245861 +vt 0.222408 0.250015 +vt 0.480210 0.067017 +vt 0.325002 0.009756 +vt -0.325582 -0.271006 +vt -0.337338 -0.253061 +vt 0.490189 0.091336 +vt 0.133576 0.138120 +vt 0.106055 0.095443 +vt 0.343861 0.016671 +vt 0.293941 0.134856 +vt 0.169889 -0.116760 +vt 0.148062 -0.107017 +vt 0.159908 -0.166085 +vt 0.125635 -0.172201 +vt 0.136504 -0.182230 +vt 0.180451 -0.175743 +vt 0.490265 -0.034176 +vt 0.500799 -0.021447 +vt 0.489955 -0.020910 +vt 0.049410 0.244023 +vt 0.179868 0.083661 +vt 0.167985 0.087967 +vt 0.222997 0.168483 +vt 0.182833 0.107000 +vt 0.186383 0.020106 +vt 0.190504 0.039660 +vt 0.177620 0.033571 +vt 0.031216 0.012282 +vt 0.172932 0.115072 +vt -0.072305 0.204303 +vt 0.493545 -0.107242 +vt 0.495303 -0.081147 +vt 0.513797 -0.098190 +vt 0.100984 0.199018 +vt 0.068527 0.208021 +vt 0.109685 0.155402 +vt 0.494602 0.143013 +vt 0.494187 0.171827 +vt 0.503677 0.168483 +vt 0.285049 -0.015777 +vt 0.099035 0.280406 +vt 0.100411 0.264465 +vt 0.097032 0.506854 +vt -0.013481 0.078832 +vt -0.027585 0.051509 +vt 0.702034 0.014729 +vt 0.520271 0.288369 +vt 0.007626 0.066282 +vt -0.474690 0.073524 +vt -0.477750 0.108244 +vt 0.265247 0.239688 +vt 0.986778 0.164958 +vt 0.191215 0.256060 +vt -0.460041 0.135090 +vt 0.121954 0.015151 +vt 0.202840 0.058431 +vt 0.193936 0.200688 +vt -0.046894 0.186003 +vt 0.495287 0.043142 +vt 0.496095 0.066782 +vt 0.510867 0.046426 +vt 0.491388 0.191901 +vt 0.514960 0.171566 +vt 0.135266 0.264493 +vt 0.125194 0.194964 +vt 0.345595 0.062786 +vt 0.222949 0.119372 +vt 0.125635 0.500067 +vt 0.159908 0.500640 +vt 0.150885 0.520375 +vt 0.175768 0.512107 +vt 0.306358 0.135013 +vt 0.069153 0.046201 +vt 0.050279 0.053637 +vt 0.059150 0.009557 +vt -0.062020 0.164949 +vt 0.273106 0.227760 +vt 0.515885 -0.014182 +vt 0.511399 0.007109 +vt 0.080162 0.120041 +vt 0.051668 0.095016 +vt -0.461927 0.173977 +vt 0.490487 0.011782 +vt 0.516859 -0.112641 +vt 0.123262 0.274687 +vt 0.252362 -0.046610 +vt -0.449632 0.183098 +vt 0.275474 -0.148003 +vt 0.159087 -0.019105 +vt 0.154372 0.011782 +vt 0.188953 0.068031 +vt -0.431947 0.146275 +vt -0.307129 -0.096055 +vt -0.316756 -0.075557 +vt -0.322382 -0.083234 +vt 0.514494 0.154740 +vt 0.326480 0.143052 +vt 0.158095 0.253604 +vt 0.491995 -0.130449 +vt -0.460307 0.216613 +vt -0.192975 0.245741 +vt 0.158095 0.502047 +vt 0.135210 -0.014182 +vt -0.002907 0.137568 +vt -0.417243 0.163589 +vt 1.027418 0.216613 +vt 0.159354 0.153492 +vt 0.151898 0.183019 +vt 0.025410 0.251640 +vt -0.005949 0.294031 +vt 0.156514 0.116823 +vt 0.098801 0.045950 +vt -0.097950 0.250383 +vt -0.444734 0.225024 +vt 0.396575 0.134160 +vt 0.370191 0.107124 +vt 0.147298 -0.135607 +vt 0.126675 -0.119298 +vt 0.108236 -0.150561 +vt 0.133932 0.528487 +vt 0.133932 -0.151097 +vt -0.407703 0.145451 +vt -0.454877 0.248040 +vt 0.205615 0.116391 +vt 0.196864 0.103195 +vt -0.393317 -0.014037 +vt -0.077009 -0.003553 +vt 0.260502 -0.031200 +vt 0.246313 -0.035879 +vt 0.169273 -0.147777 +vt -0.422466 0.200630 +vt 0.012784 0.104194 +vt 0.246313 0.498863 +vt 0.260502 0.508435 +vt 0.218968 0.499879 +vt 0.015506 0.306083 +vt 0.015506 0.508278 +vt -0.398422 0.183922 +vt -0.419109 0.229007 +vt -0.373480 -0.006826 +vt -0.027182 0.196445 +vt -0.392343 0.163292 +vt -0.415741 0.247227 +vt -0.418328 0.265447 +vt -0.418328 1.041419 +vt -0.454877 1.050996 +vt 0.378766 0.005307 +vt -0.390332 0.012230 +vt 0.029795 0.078587 +vt -0.406074 0.052759 +vt -0.404545 0.098344 +vt -0.424941 0.057573 +vt 0.362970 0.043539 +vt -0.316840 1.041249 +vt 0.714744 0.026115 +vt 0.366419 0.535255 +vt 0.366419 0.127211 +vt 0.702365 -0.004009 +vt -0.389774 0.207223 +vt -0.364690 0.026115 +vt -0.388637 0.049632 +vt 0.734985 0.093694 +vt -0.376009 0.179587 +vt -0.052384 0.132267 +vt 0.989467 0.179587 +vt -0.374461 0.241856 +vt -0.353214 -0.004009 +vt -0.362129 0.195786 +vt -0.365731 0.201761 +vt -0.389088 0.255488 +vt -0.389088 1.024258 +vt -0.389635 1.039938 +vt 0.175768 0.260018 +vt 0.155627 0.263418 +vt -0.375573 0.093694 +vt -0.391142 0.068463 +vt 0.748765 0.131633 +vt 0.290508 -0.083234 +vt 0.282415 -0.101267 +vt -0.056580 0.222842 +vt -0.361067 0.048178 +vt -0.372961 0.163658 +vt -0.403670 0.145326 +vt -0.388219 0.128671 +vt 1.034147 0.282324 +vt 1.045900 0.273249 +vt 1.030325 0.262873 +vt 0.712236 0.048178 +vt 0.278014 -0.127665 +vt 0.972654 0.195496 +vt 0.988572 0.195786 +vt 0.216400 0.154740 +vt 0.214877 0.171566 +vt -0.329318 0.016373 +vt -0.354482 0.014729 +vt -0.341009 0.033470 +vt -0.356225 0.077449 +vt 0.727823 0.118056 +vt -0.362129 0.998185 +vt -0.365731 1.003518 +vt -0.343451 0.198773 +vt -0.349438 0.239225 +vt -0.362508 0.259116 +vt -0.362508 1.022393 +vt -0.374857 0.282324 +vt -0.389635 0.262873 +vt -0.319632 -0.003303 +vt 0.691066 0.061613 +vt 0.714591 0.077449 +vt -0.358986 0.118056 +vt -0.346112 0.204823 +vt -0.343772 0.273967 +vt -0.357332 0.290687 +vt 0.094759 0.228587 +vt 0.677831 0.016373 +vt 0.680549 0.037865 +vt 0.693841 0.033470 +vt -0.338127 0.101307 +vt -0.015585 -0.201646 +vt -0.357332 1.042465 +vt -0.332868 -0.056360 +vt -0.332837 -0.038782 +vt -0.342339 -0.048127 +vt 0.487040 0.071550 +vt 0.489779 0.044653 +vt -0.293784 -0.028260 +vt 0.707799 0.101307 +vt 0.384240 0.025263 +vt -0.321013 0.023207 +vt -0.302338 0.045088 +vt 0.485829 -0.038782 +vt -0.289273 0.003160 +vt -0.314602 0.028639 +vt -0.329934 0.037865 +vt -0.327324 0.076165 +vt -0.342744 0.061613 +vt -0.334624 0.152032 +vt -0.373780 0.131633 +vt -0.348724 0.175502 +vt -0.330277 0.200099 +vt 0.352471 0.080352 +vt -0.283983 -0.021880 +vt -0.304269 0.044411 +vt -0.313417 0.125698 +vt 0.349555 0.115239 +vt -0.330374 0.296401 +vt -0.296361 -0.082615 +vt -0.300808 -0.103679 +vt -0.301719 -0.051178 +vt -0.323558 -0.015106 +vt -0.340741 -0.016265 +vt -0.248073 -0.045524 +vt 0.484922 -0.154149 +vt -0.310526 0.076406 +vt -0.325741 0.188327 +vt -0.274477 -0.081387 +vt -0.305028 0.019602 +vt -0.334135 0.004891 +vt -0.274763 0.023052 +vt 0.169273 0.525493 +vt 0.511946 0.077737 +vt 0.509405 -0.138929 +vt 0.488876 -0.151693 +vt 0.155958 -0.042759 +vt -0.293480 0.142334 +vt -0.286541 0.109774 +vt -0.276579 0.115870 +vt -0.280510 0.061048 +vt -0.294753 0.093852 +vt -0.293808 0.157601 +vt -0.325741 0.758084 +vt 0.499589 0.287881 +vt -0.278328 0.001277 +vt -0.249728 -0.015112 +vt -0.260622 0.038612 +vt -0.237683 -0.126963 +vt -0.247494 -0.128386 +vt -0.253367 -0.047990 +vt -0.280893 0.119116 +vt -0.227174 -0.135771 +vt -0.224808 -0.111546 +vt -0.230676 -0.071676 +vt -0.268243 0.090255 +vt -0.239447 0.059441 +vt 0.496977 0.045088 +vt -0.307129 0.493598 +vt -0.322382 0.497594 +vt -0.206507 -0.134655 +vt -0.274501 0.182150 +vt -0.210526 -0.079135 +vt -0.242898 -0.040087 +vt -0.244134 0.014285 +vt 0.484563 -0.103679 +vt 0.483985 -0.096055 +vt -0.262957 0.175051 +vt -0.274501 0.725951 +vt -0.191031 -0.143808 +vt -0.195868 -0.119710 +vt 0.150885 -0.157298 +vt -0.175952 -0.154149 +vt -0.180315 -0.130765 +vt -0.254703 0.070592 +vt -0.283176 0.098959 +vt -0.143738 -0.235404 +vt -0.149343 -0.203638 +vt -0.153481 -0.210376 +vt 0.482268 -0.203638 +vt 0.483454 -0.170405 +vt -0.164931 -0.178180 +vt -0.162177 -0.170405 +vt -0.198165 -0.001543 +vt -0.273169 0.091708 +vt 1.240574 -0.018809 +vt 1.237839 -0.030160 +vt -0.286674 0.170154 +vt -0.296409 0.180275 +vt -0.303640 0.159751 +vt -0.233727 0.198954 +vt -0.233727 0.727925 +vt -0.121442 -0.229247 +vt -0.131062 -0.247149 +vt -0.157942 -0.144341 +vt -0.219664 0.048173 +vt -0.119248 -0.257699 +vt -0.106716 -0.258188 +vt -0.164236 -0.092388 +vt -0.180091 -0.061478 +vt -0.185426 -0.026170 +vt -0.206337 0.023921 +vt -0.232322 0.085787 +vt -0.245985 0.123941 +vt -0.258065 0.161978 +vt -0.293003 0.202147 +vt -0.228609 0.172813 +vt -0.125215 -0.160943 +vt 0.283410 0.074944 +vt -0.093935 -0.264288 +vt -0.087608 -0.246071 +vt -0.144440 -0.093219 +vt -0.220967 0.071261 +vt -0.279719 0.218106 +vt -0.283956 0.229058 +vt -0.100226 -0.193352 +vt -0.162979 -0.052387 +vt -0.187398 0.010493 +vt -0.261215 0.224527 +vt -0.070706 -0.258271 +vt -0.130531 -0.119127 +vt -0.171394 -0.015525 +vt -0.181745 -0.002376 +vt -0.213491 0.066514 +vt -0.209650 0.086484 +vt -0.223842 0.127010 +vt -0.117226 -0.157094 +vt -0.130789 -0.096104 +vt -0.203541 0.706881 +vt -0.192575 0.739706 +vt -0.108283 -0.151895 +vt -0.092982 -0.177769 +vt -0.117448 -0.126449 +vt -0.125640 -0.067959 +vt -0.119793 -0.053955 +vt -0.148228 -0.026807 +vt -0.161216 -0.001820 +vt -0.262726 0.242559 +vt -0.076319 -0.201733 +vt 0.494165 -0.126449 +vt 0.500428 -0.106120 +vt 0.486020 -0.096104 +vt -0.219863 0.193029 +vt -0.262726 0.502037 +vt -0.283956 0.505741 +vt -0.065228 -0.186772 +vt -0.080256 -0.157815 +vt -0.091718 -0.142401 +vt 0.514944 -0.107100 +vt 0.492842 -0.151895 +vt 0.514473 -0.142401 +vt -0.139861 -0.009446 +vt -0.171394 0.491928 +vt -0.139861 0.494329 +vt -0.161216 0.506873 +vt -0.196560 0.121661 +vt -0.192489 0.141131 +vt -0.248689 0.257392 +vt 0.644601 0.015970 +vt -0.040673 0.309479 +vt -0.044115 -0.207518 +vt -0.063629 -0.167853 +vt -0.065228 0.505303 +vt -0.063629 0.525443 +vt -0.092982 0.498022 +vt -0.095189 -0.093275 +vt -0.105512 -0.107100 +vt -0.025824 -0.192456 +vt -0.047562 0.521430 +vt -0.068211 -0.143107 +vt -0.105955 -0.034881 +vt -0.118932 0.008723 +vt -0.196320 0.194230 +vt -0.040592 -0.166217 +vt -0.067539 -0.084863 +vt -0.106336 0.002672 +vt -0.025824 0.502029 +vt -0.047562 -0.178499 +vt -0.081656 -0.066867 +vt -0.154208 0.151352 +vt -0.154277 0.134230 +vt 0.371902 0.136601 +vt -0.025373 0.524400 +vt -0.025373 -0.178029 +vt -0.044845 -0.118027 +vt -0.086511 -0.022483 +vt -0.107727 0.020227 +vt -0.061267 -0.058292 +vt -0.089742 0.044529 +vn -0.0198 0.0994 -0.9948 +vn -0.9845 0.0661 -0.1627 +vn -0.2253 0.9711 -0.0792 +vn -0.2201 0.9696 -0.1073 +vn -0.3579 0.9238 0.1360 +vn -0.1265 0.9836 -0.1283 +vn -0.0848 0.9237 0.3736 +vn 0.1444 -0.9378 -0.3156 +vn 0.0035 0.7173 0.6968 +vn -0.3696 0.7375 0.5653 +vn 0.2809 0.9566 -0.0781 +vn -0.8285 -0.5415 -0.1428 +vn 0.1251 0.4835 0.8664 +vn -0.4242 0.8184 0.3877 +vn -0.1184 0.7292 0.6740 +vn -0.1596 0.9871 0.0110 +vn -0.8462 0.4448 0.2936 +vn 0.3318 0.9426 0.0361 +vn -0.4863 0.8671 0.1080 +vn -0.3425 0.9017 0.2638 +vn 0.4989 0.8319 0.2430 +vn -0.1017 0.9761 0.1921 +vn -0.8661 0.4999 -0.0094 +vn 0.5034 0.8322 0.2322 +vn -0.6061 0.7836 -0.1363 +vn -0.5523 0.3505 -0.7564 +vn -0.0048 -0.9999 -0.0108 +vn -0.4214 -0.4880 0.7644 +vn 0.3606 0.9320 0.0370 +vn -0.0299 0.9940 0.1049 +vn -0.9153 -0.4010 0.0381 +vn -0.9271 0.1943 0.3206 +vn -0.3584 0.8615 0.3596 +vn 0.6509 0.6415 0.4059 +vn -0.9903 -0.0967 -0.0998 +vn -0.2717 0.9434 0.1903 +vn -0.0338 -0.9524 -0.3029 +vn -0.1777 0.9736 -0.1434 +vn -0.9290 0.0807 -0.3612 +vn -0.3019 0.8963 0.3249 +vn -0.9484 -0.2350 -0.2128 +vn -0.3525 0.8529 0.3851 +vn -0.2653 0.9440 0.1963 +vn -0.3007 0.8654 0.4008 +vn -0.2799 0.8966 0.3433 +vn 0.2313 -0.9638 -0.1327 +vn -0.9304 -0.3641 0.0427 +vn -0.9567 0.2019 -0.2095 +vn -0.9679 0.1336 -0.2128 +vn -0.9134 -0.4028 -0.0586 +vn 0.3034 0.8037 0.5120 +vn -0.2786 0.8990 0.3380 +vn -0.7854 -0.2971 0.5430 +vn 0.3555 0.9150 0.1907 +vn 0.7000 0.4138 -0.5820 +vn -0.2175 0.8512 0.4777 +vn -0.2252 0.9064 0.3573 +vn -0.1326 0.9904 0.0400 +vn 0.6840 0.2154 -0.6970 +vn 0.6227 0.7658 0.1607 +vn 0.7301 0.6390 0.2421 +vn 0.9100 0.4146 0.0012 +vn 0.7008 0.4631 0.5425 +vn 0.7974 0.5093 0.3237 +vn 0.0156 0.7799 0.6257 +vn -0.3712 0.8801 0.2960 +vn 0.6738 0.6597 0.3327 +vn 0.7915 0.6053 0.0845 +vn 0.1138 0.9238 0.3656 +vn 0.3946 0.7157 -0.5763 +vn 0.1990 0.8968 0.3952 +vn -0.9862 -0.1478 -0.0753 +vn -0.0285 -0.9994 0.0219 +vn -0.4042 -0.1584 0.9008 +vn -0.0894 0.9552 0.2820 +vn -0.8620 0.4958 -0.1060 +vn -0.9362 0.0175 -0.3510 +vn -0.1812 0.7204 0.6694 +vn -0.1925 0.9652 0.1772 +vn -0.8981 0.3734 -0.2325 +vn -0.6761 -0.0227 -0.7365 +vn 0.7450 0.6325 0.2119 +vn -0.1593 -0.4949 0.8542 +vn -0.1560 -0.3619 0.9191 +vn -0.2111 0.3597 0.9089 +vn -0.9910 -0.1311 0.0281 +vn -0.8086 -0.5883 -0.0109 +vn -0.4042 0.8281 0.3885 +vn -0.1260 0.6372 0.7603 +vn -0.3938 -0.5638 -0.7260 +vn -0.0575 0.9177 0.3932 +vn -0.1953 0.3646 0.9105 +vn -0.2758 0.6029 0.7486 +vn -0.0639 0.9835 0.1693 +vn -0.3426 0.7529 0.5619 +vn -0.9986 -0.0331 0.0415 +vn -0.8533 0.2191 -0.4732 +vn -0.4227 0.8143 0.3977 +vn -0.1371 -0.4890 -0.8614 +vn -0.0346 0.8973 0.4400 +vn 0.0134 0.9995 0.0280 +vn 0.0231 0.9975 0.0661 +vn -0.9412 -0.3358 0.0373 +vn -0.2438 0.3809 0.8919 +vn 0.0820 0.9855 -0.1483 +vn -0.8836 -0.4675 -0.0274 +vn 0.0913 -0.5981 -0.7962 +vn 0.1026 -0.1814 0.9780 +vn -0.0940 0.5360 0.8390 +vn -0.9622 0.1105 0.2490 +vn -0.0201 -0.5679 -0.8228 +vn -0.6688 0.2351 -0.7053 +vn -0.5337 0.0787 -0.8420 +vn -0.3575 -0.1299 -0.9248 +vn -0.1209 0.9856 0.1180 +vn -0.1938 0.8634 0.4658 +vn 0.4218 0.7618 0.4916 +vn -0.8781 -0.1769 -0.4446 +vn -0.1822 0.8237 0.5370 +vn -0.5542 0.2812 -0.7834 +vn -0.2515 0.2126 -0.9442 +vn 0.4319 -0.7045 -0.5631 +vn -0.5215 0.6821 -0.5126 +vn 0.0253 0.3374 0.9410 +vn -0.0953 0.6816 0.7255 +vn 0.9738 -0.1576 -0.1642 +vn 0.5621 -0.8028 0.1988 +vn -0.0239 0.9603 0.2779 +vn -0.0379 0.7482 0.6624 +vn -0.9385 0.1265 0.3212 +vn -0.5114 0.1241 -0.8503 +vn 0.0803 0.6060 0.7914 +vn -0.0716 0.9956 -0.0598 +vn 0.0253 -0.9993 -0.0273 +vn -0.2040 0.1025 0.9736 +vn 0.0340 -0.1902 0.9812 +vn 0.2878 0.1797 0.9407 +vn 0.2891 0.1627 0.9434 +vn 0.1120 -0.7109 -0.6943 +vn 0.2409 0.4884 0.8387 +vn 0.5246 -0.8260 0.2063 +vn 0.8664 -0.0204 0.4990 +vn 0.9906 0.0099 -0.1362 +vn -0.0601 0.9981 -0.0120 +vn -0.2030 0.8540 0.4791 +vn -0.9823 -0.1661 -0.0867 +vn 0.3640 -0.9207 0.1405 +vn 0.2792 0.1008 -0.9549 +vn -0.1542 -0.1997 0.9677 +vn -0.1942 0.1004 0.9758 +vn 0.1894 0.4911 0.8502 +vn 0.7746 0.0744 -0.6281 +vn -0.1677 0.9848 -0.0455 +vn -0.9587 0.2533 0.1291 +vn 0.9762 -0.2093 -0.0561 +vn -0.3138 0.1294 0.9406 +vn -0.1061 -0.1200 0.9871 +vn 0.0874 0.2014 0.9756 +vn 0.1783 0.3306 0.9268 +vn 0.1805 0.2390 0.9541 +vn 0.8962 -0.4427 0.0287 +vn -0.0600 -0.9959 0.0676 +vn -0.8126 -0.4008 -0.4232 +vn 0.8659 0.4855 0.1201 +vn 0.8240 0.4964 0.2731 +vn 0.0600 0.9830 -0.1736 +vn -0.9533 0.2480 -0.1722 +vn 0.1633 0.9846 -0.0626 +vn 0.0297 0.8526 0.5217 +vn 0.5719 -0.7992 -0.1851 +vn 0.2023 0.5149 0.8330 +vn 0.1725 0.5743 0.8003 +vn 0.3322 -0.8671 -0.3712 +vn 0.8893 0.4178 -0.1859 +vn 0.9925 -0.1220 0.0003 +vn 0.0258 -0.1474 -0.9887 +vn -0.0961 0.9766 0.1925 +vn -0.9943 -0.0555 -0.0915 +vn -0.3163 0.3935 0.8632 +vn -0.1275 0.1345 0.9827 +vn -0.3905 0.5747 0.7192 +vn -0.0019 -0.5426 -0.8400 +vn -0.1654 -0.3895 0.9060 +vn -0.2138 0.1422 0.9665 +vn -0.1465 0.9802 -0.1329 +vn -0.1369 0.9853 -0.1024 +vn -0.3401 0.3502 0.8728 +vn -0.3796 -0.2296 -0.8962 +vn -0.1223 0.0171 0.9923 +vn -0.2315 0.5410 0.8085 +vn 0.1601 -0.0073 0.9871 +vn -0.2489 -0.6304 0.7353 +vn -0.0473 -0.6915 0.7209 +vn -0.0050 -0.7827 0.6224 +vn 0.0276 -0.0227 0.9994 +vn -0.1456 -0.9707 -0.1911 +vn 0.1939 0.4001 0.8957 +vn 0.7675 -0.3508 -0.5366 +vn -0.8433 0.5221 0.1272 +vn -0.2617 0.9613 0.0858 +vn -0.6812 -0.0830 -0.7274 +vn 0.0059 0.9265 0.3762 +vn 0.0051 0.8474 0.5310 +vn -0.1596 -0.0257 0.9868 +vn -0.0405 0.0988 0.9943 +vn 0.2429 0.5973 0.7644 +vn 0.6721 -0.6985 0.2456 +vn -0.9770 0.0813 -0.1969 +vn 0.5622 -0.7486 -0.3514 +vn 0.9482 -0.1975 -0.2486 +vn 0.8934 -0.3690 -0.2561 +vn -0.0754 0.9834 0.1650 +vn -0.1925 0.9792 -0.0641 +vn 0.2197 0.9742 -0.0520 +vn -0.5060 0.2609 0.8221 +vn -0.3379 0.3980 0.8529 +vn -0.1253 0.1258 0.9841 +vn -0.0797 0.2608 0.9621 +vn 0.3466 -0.0370 0.9373 +vn 0.1910 -0.5881 0.7859 +vn 0.0408 0.5857 0.8095 +vn 0.0508 -0.8347 0.5484 +vn 0.1090 -0.0731 0.9914 +vn -0.0613 -0.7950 0.6036 +vn 0.1068 -0.0678 0.9920 +vn 0.5161 -0.7289 -0.4498 +vn 0.4605 -0.4049 0.7899 +vn 0.9971 0.0459 -0.0600 +vn 0.9101 -0.1518 -0.3856 +vn -0.2655 0.9619 -0.0651 +vn -0.8098 0.3786 -0.4482 +vn 0.3651 -0.3169 -0.8754 +vn -0.0600 0.0825 0.9948 +vn -0.1254 0.2448 0.9614 +vn -0.3855 0.3778 0.8418 +vn -0.1085 0.1284 0.9858 +vn 0.2797 0.6658 0.6918 +vn 0.1919 -0.2499 0.9491 +vn 0.6274 -0.0451 0.7774 +vn -0.0417 0.2769 0.9600 +vn 0.2551 0.3557 0.8991 +vn -0.0617 -0.4667 0.8823 +vn 0.0086 0.0417 0.9991 +vn 0.2377 0.1783 0.9548 +vn 0.0851 -0.1050 0.9908 +vn 0.3136 -0.1364 0.9397 +vn 0.4614 -0.4284 0.7769 +vn 0.5660 0.4682 0.6786 +vn 0.9746 0.2128 -0.0692 +vn 0.9992 0.0246 -0.0325 +vn 0.8358 0.5135 -0.1941 +vn -0.2358 0.8914 0.3870 +vn -0.4053 0.8090 0.4256 +vn -0.3557 0.8981 0.2585 +vn -0.3892 -0.1014 0.9156 +vn -0.3939 0.2959 0.8702 +vn -0.3649 0.0504 0.9297 +vn -0.3144 0.4312 0.8457 +vn 0.4359 -0.0710 0.8972 +vn -0.0239 -0.5276 0.8491 +vn 0.1876 -0.5856 0.7886 +vn -0.0432 0.5893 0.8068 +vn -0.3836 -0.5187 0.7641 +vn 0.1723 -0.2285 0.9582 +vn 0.4310 -0.1576 0.8885 +vn 0.0875 0.2005 0.9758 +vn 0.9726 -0.1604 -0.1682 +vn 0.9271 0.0991 -0.3616 +vn 0.5277 0.2753 0.8036 +vn 0.8468 -0.2834 -0.4501 +vn 0.2500 0.8444 0.4738 +vn 0.3360 0.7935 0.5074 +vn 0.2037 0.7627 0.6139 +vn -0.4924 -0.8704 -0.0061 +vn -0.2266 -0.1933 0.9546 +vn -0.3113 0.1744 0.9342 +vn -0.3934 0.2998 0.8691 +vn 0.0035 -0.2986 0.9544 +vn -0.1128 -0.9933 0.0263 +vn 0.5150 -0.5433 -0.6631 +vn -0.2919 0.1249 0.9483 +vn 0.2419 0.8243 0.5119 +vn 0.1613 0.4898 0.8568 +vn 0.1307 0.4629 0.8767 +vn -0.7681 -0.3987 0.5011 +vn -0.2908 0.7818 0.5516 +vn -0.1513 -0.1845 0.9711 +vn -0.1842 0.4257 0.8859 +vn 0.2851 -0.2806 0.9165 +vn -0.1910 -0.0261 0.9812 +vn 0.2985 -0.4851 0.8220 +vn 0.2587 0.2222 0.9401 +vn 0.2429 0.2161 0.9457 +vn 0.2380 0.9618 0.1349 +vn -0.8203 -0.5167 0.2454 +vn -0.2804 -0.3691 0.8861 +vn -0.1691 0.0813 0.9822 +vn -0.0639 0.0870 0.9942 +vn -0.1027 0.4280 0.8979 +vn -0.1498 0.4651 0.8725 +vn -0.1105 0.5070 0.8549 +vn 0.9112 0.4076 0.0599 +vn 0.0449 0.1939 0.9800 +vn 0.1344 0.3017 0.9439 +vn 0.5094 -0.8379 -0.1961 +vn 0.2653 0.7476 0.6089 +vn 0.7106 0.1625 -0.6846 +vn 0.1017 0.4673 0.8782 +vn 0.0288 0.5395 0.8415 +vn -0.9338 0.0919 -0.3459 +vn -0.3566 0.9340 0.0218 +vn -0.9113 -0.2841 0.2980 +vn -0.2187 0.8430 0.4914 +vn 0.0815 -0.3997 0.9130 +vn 0.1267 -0.2343 0.9639 +vn 0.1550 -0.2885 0.9448 +vn -0.2106 0.2143 0.9538 +vn -0.2361 0.5512 0.8003 +vn -0.1632 0.4639 0.8707 +vn 0.9789 -0.0203 -0.2031 +vn 0.3526 -0.4659 0.8116 +vn 0.0932 0.4319 0.8971 +vn -0.9838 -0.1345 -0.1186 +vn 0.4677 0.7502 0.4673 +vn -0.1681 0.9829 0.0749 +vn -0.2411 0.9498 -0.1994 +vn 0.1526 0.1276 0.9800 +vn -0.0948 0.4301 0.8978 +vn -0.0394 0.1812 0.9827 +vn -0.1378 0.4249 0.8947 +vn 0.0401 0.5318 0.8459 +vn 0.1800 0.2635 0.9477 +vn 0.1100 0.0690 0.9915 +vn 0.7474 -0.5882 -0.3088 +vn 0.0044 -0.7743 0.6327 +vn -0.2857 0.8997 0.3299 +vn -0.2716 -0.2957 0.9159 +vn -0.3093 -0.1905 0.9317 +vn -0.2299 -0.0444 0.9722 +vn -0.0604 0.4682 0.8816 +vn 0.0095 0.0432 0.9990 +vn -0.2772 0.7055 0.6523 +vn 0.0905 0.1688 0.9815 +vn 0.1486 0.3338 0.9309 +vn -0.7090 -0.2246 -0.6684 +vn -0.0422 0.5941 0.8033 +vn -0.0785 -0.7052 0.7047 +vn 0.4918 -0.8397 -0.2304 +vn -0.3150 0.7113 0.6284 +vn 0.8866 0.2722 -0.3739 +vn -0.4967 0.8604 0.1141 +vn -0.1636 0.9258 0.3409 +vn 0.0853 -0.3245 0.9420 +vn 0.2539 -0.1017 0.9619 +vn -0.0631 -0.0739 0.9953 +vn -0.1519 0.1332 0.9794 +vn -0.0885 0.5627 0.8219 +vn 0.1097 0.1204 0.9866 +vn 0.2373 0.6021 0.7623 +vn -0.1057 0.6888 0.7172 +vn 0.2419 0.4968 0.8335 +vn 0.3424 -0.7387 0.5807 +vn -0.2673 -0.6113 0.7449 +vn -0.2892 0.8561 0.4282 +vn 0.0026 0.9869 0.1614 +vn -0.1223 -0.5486 -0.8271 +vn -0.3328 -0.3978 -0.8550 +vn -0.3087 0.1234 -0.9431 +vn -0.0128 -0.1391 0.9902 +vn -0.0178 0.1646 0.9862 +vn -0.0755 0.3593 0.9302 +vn -0.0906 0.5675 0.8184 +vn 0.3073 -0.3557 0.8826 +vn 0.2395 -0.7756 -0.5840 +vn 0.9142 0.2209 -0.3398 +vn 0.0052 -0.7672 0.6413 +vn -0.0987 -0.6488 0.7546 +vn -0.2384 0.4493 0.8610 +vn -0.2030 -0.8720 -0.4455 +vn 0.5631 -0.7971 -0.2182 +vn -0.4902 0.8586 0.1501 +vn -0.1699 0.8915 0.4200 +vn 0.2644 0.8477 0.4599 +vn -0.5225 0.1289 -0.8429 +vn 0.0251 -0.5544 0.8319 +vn -0.4349 -0.1038 0.8945 +vn -0.3735 -0.0131 0.9275 +vn -0.0277 -0.1955 0.9803 +vn 0.0740 0.5238 0.8486 +vn -0.0823 0.0365 0.9959 +vn 0.5549 -0.1573 0.8169 +vn 0.0947 0.4090 0.9076 +vn -0.0170 0.0177 0.9997 +vn 0.1862 0.4768 0.8591 +vn -0.6428 0.2115 -0.7362 +vn -0.2419 -0.1077 -0.9643 +vn 0.0320 -0.5724 0.8194 +vn 0.1882 -0.8904 0.4145 +vn -0.1311 -0.3327 0.9339 +vn -0.1802 -0.2721 0.9452 +vn -0.2799 0.0478 0.9588 +vn -0.2834 0.0292 0.9586 +vn 0.1002 0.4239 0.9001 +vn 0.0198 0.6256 0.7799 +vn -0.0094 0.5602 0.8283 +vn 0.1969 0.0139 0.9803 +vn 0.0706 0.7120 0.6986 +vn 0.1458 0.6186 0.7721 +vn 0.8615 0.3833 -0.3329 +vn 0.2131 0.7505 0.6256 +vn 0.2363 -0.1613 0.9582 +vn 0.6266 0.4288 -0.6508 +vn 0.1410 0.1896 0.9717 +vn -0.2510 0.1472 0.9567 +vn 0.7482 -0.3386 -0.5705 +vn 0.0246 -0.6697 -0.7422 +vn -0.9995 -0.0285 0.0161 +vn -0.0908 0.1741 0.9805 +vn -0.1351 0.2721 0.9527 +vn -0.0117 0.4408 0.8975 +vn -0.0799 0.5570 0.8267 +vn -0.1597 0.3388 0.9272 +vn -0.2969 0.8135 0.5000 +vn 0.0688 -0.4473 0.8917 +vn -0.1043 -0.0765 0.9916 +vn 0.2524 0.3023 0.9192 +vn 0.2452 0.3474 0.9051 +vn -0.2656 -0.4024 0.8761 +vn 0.0746 0.7138 0.6964 +vn 0.0493 0.6822 0.7295 +vn 0.1095 0.4562 0.8831 +vn 0.5339 0.3619 0.7642 +vn 0.9130 0.3608 0.1903 +vn -0.0393 -0.4695 -0.8820 +vn -0.4796 0.7115 -0.5136 +vn 0.1838 0.1026 0.9776 +vn -0.6022 -0.1635 0.7814 +vn -0.5086 -0.6910 -0.5137 +vn -0.3960 -0.3979 -0.8275 +vn 0.1706 -0.4417 0.8808 +vn 0.2434 -0.1303 0.9611 +vn -0.0098 0.1496 0.9887 +vn 0.1714 -0.0818 0.9818 +vn 0.3404 0.2166 0.9150 +vn 0.3044 0.1501 0.9406 +vn 0.2911 0.3840 0.8762 +vn 0.0722 0.5845 0.8082 +vn 0.4714 0.1444 0.8700 +vn -0.0844 -0.7604 0.6439 +vn -0.1321 0.0036 0.9912 +vn -0.0624 -0.0849 0.9944 +vn 0.9832 0.0484 -0.1763 +vn -0.0212 -0.5308 0.8473 +vn 0.2010 0.0147 0.9795 +vn 0.7221 -0.3245 -0.6110 +vn 0.5703 -0.7989 0.1913 +vn -0.9460 -0.2607 -0.1926 +vn 0.6778 -0.6413 -0.3596 +vn 0.1012 0.8627 0.4955 +vn -0.4494 -0.7172 0.5327 +vn -0.2352 -0.3796 -0.8948 +vn -0.2063 -0.2974 0.9322 +vn 0.3038 -0.2475 0.9200 +vn 0.1747 0.2159 0.9606 +vn 0.0872 0.2582 0.9622 +vn 0.0522 0.3190 0.9463 +vn 0.1064 0.3545 0.9290 +vn -0.0296 0.2106 0.9771 +vn -0.1871 0.8010 0.5687 +vn 0.1972 0.3676 0.9088 +vn 0.6546 0.6566 0.3746 +vn 0.6467 0.7022 0.2979 +vn 0.2797 0.0926 -0.9556 +vn -0.1356 0.1625 0.9773 +vn -0.2293 -0.0855 0.9696 +vn -0.2571 0.2519 0.9330 +vn -0.2987 0.2834 0.9113 +vn -0.2157 0.4714 0.8551 +vn 0.3450 0.4818 0.8055 +vn 0.0198 0.5738 0.8187 +vn 0.0164 0.9913 0.1305 +vn 0.0043 -0.2025 0.9793 +vn 0.0766 -0.7412 -0.6669 +vn -0.1135 -0.1437 0.9831 +vn 0.1439 0.2525 0.9568 +vn 0.1341 0.2529 0.9581 +vn -0.2449 -0.9292 -0.2768 +vn 0.2096 0.7227 0.6586 +vn -0.0692 0.6617 0.7466 +vn -0.4299 0.8108 0.3973 +vn -0.3401 0.9025 0.2643 +vn 0.3651 -0.8916 -0.2678 +vn -0.1981 -0.2965 0.9343 +vn 0.0005 -0.3297 0.9441 +vn -0.0135 -0.0558 0.9984 +vn 0.0142 0.3437 0.9390 +vn 0.2504 0.3609 0.8983 +vn 0.3240 -0.4169 0.8492 +vn 0.1972 0.8912 0.4085 +vn 0.0090 0.2904 0.9569 +vn 0.2534 0.4960 0.8306 +vn -0.2055 0.1476 0.9675 +vn 0.1535 0.0945 0.9836 +vn 0.2436 0.4628 0.8523 +vn 0.2056 -0.4472 -0.8705 +vn 0.3030 0.6395 0.7065 +vn -0.1865 -0.0603 0.9806 +vn -0.2681 0.9603 0.0769 +vn -0.4209 -0.5335 -0.7337 +vn -0.0213 -0.0305 0.9993 +vn 0.1003 -0.2202 0.9703 +vn 0.0576 -0.3687 0.9278 +vn 0.0327 0.3502 0.9361 +vn -0.0669 -0.2202 0.9732 +vn 0.0545 0.5690 0.8205 +vn 0.0380 0.4980 0.8663 +vn 0.0185 0.5680 0.8228 +vn -0.2599 -0.2886 0.9215 +vn -0.2605 0.5672 0.7813 +vn 0.6700 -0.6863 0.2831 +vn -0.1458 -0.7932 0.5912 +vn 0.3722 -0.0841 0.9243 +vn -0.1993 0.7590 0.6198 +vn -0.2677 0.6408 0.7196 +vn -0.9028 -0.3868 0.1880 +vn -0.9589 -0.2790 -0.0523 +vn -0.9994 -0.0293 0.0163 +vn 0.0601 0.9830 -0.1736 +vn 0.1355 -0.4885 0.8620 +vn 0.1321 -0.4609 0.8776 +vn 0.1537 -0.3447 0.9260 +vn 0.2794 -0.0138 0.9601 +vn -0.2879 0.2993 0.9097 +vn -0.2814 0.2949 0.9132 +vn -0.0526 0.6419 0.7650 +vn 0.1978 0.6677 0.7176 +vn 0.2712 -0.5808 0.7675 +vn 0.2326 0.4410 0.8668 +vn -0.2789 -0.6506 0.7063 +vn 0.4330 -0.3726 0.8208 +vn 0.2723 0.2799 0.9206 +vn 0.2197 0.4408 0.8703 +vn 0.8085 0.4277 0.4041 +vn -0.5177 0.4454 0.7305 +vn -0.5580 0.1496 0.8162 +vn 0.4287 -0.8876 -0.1685 +vn 0.2446 -0.0560 0.9680 +vn 0.2869 -0.0205 0.9577 +vn 0.1988 0.2970 0.9340 +vn 0.3907 -0.1197 0.9127 +vn 0.2796 0.3322 0.9008 +vn 0.2564 0.4808 0.8385 +vn 0.3995 0.5862 0.7048 +vn 0.0495 0.1350 -0.9896 +vn -0.0541 0.1960 -0.9791 +vn -0.0322 -0.9442 0.3278 +vn 0.2270 0.3416 0.9120 +vn 0.2086 0.2262 0.9515 +vn 0.2664 0.4803 0.8357 +vn 0.3537 -0.7143 0.6039 +vn -0.0279 0.1971 0.9800 +vn -0.1660 0.5949 0.7865 +vn 0.9095 -0.1731 -0.3778 +vn -0.1454 -0.5698 -0.8088 +vn 0.0878 0.6515 0.7536 +vn 0.1228 0.6812 0.7217 +vn -0.1409 0.9893 0.0377 +vn -0.5254 -0.1371 0.8397 +vn 0.4418 -0.2112 0.8719 +vn 0.4414 -0.1926 0.8764 +vn 0.1721 -0.3575 0.9179 +vn 0.2928 -0.0297 0.9557 +vn 0.4112 0.2364 0.8804 +vn -0.2386 0.2389 0.9413 +vn -0.2645 0.3002 0.9165 +vn 0.6153 0.5077 -0.6030 +vn -0.1736 -0.6820 -0.7104 +vn -0.0124 -0.8516 -0.5240 +vn -0.0968 -0.7006 0.7069 +vn 0.1558 0.4261 0.8912 +vn 0.2445 0.6430 0.7258 +vn 0.3086 0.2288 0.9233 +vn -0.0748 0.6346 0.7692 +vn -0.1641 0.4393 0.8832 +vn -0.0210 0.9876 0.1557 +vn -0.3611 -0.1792 0.9151 +vn 0.3852 0.3409 0.8576 +vn -0.0648 0.4260 0.9024 +vn 0.0416 0.5982 0.8002 +vn 0.0059 0.6438 0.7652 +vn -0.1020 0.7004 0.7064 +vn 0.1635 0.7038 0.6913 +vn 0.1039 -0.2813 0.9540 +vn 0.2544 0.0326 0.9666 +vn 0.1503 0.4673 0.8712 +vn -0.2330 -0.3162 0.9196 +vn 0.8718 0.3265 -0.3650 +vn 0.1306 -0.9675 -0.2167 +vn -0.3962 0.2469 0.8843 +vn 0.6757 0.6214 0.3966 +vn -0.7985 0.4352 -0.4159 +vn -0.2757 -0.4020 0.8732 +vn -0.2099 -0.1061 0.9719 +vn -0.1980 0.0389 0.9794 +vn 0.4131 -0.2066 0.8870 +vn 0.4992 -0.2985 0.8134 +vn 0.4099 -0.2445 0.8787 +vn 0.3880 -0.0001 0.9217 +vn 0.4975 0.2129 0.8409 +vn -0.0077 0.2024 0.9793 +vn 0.0010 0.1826 0.9832 +vn -0.0368 0.6715 0.7401 +vn -0.0090 0.6108 0.7917 +vn -0.1309 0.7534 0.6444 +vn 0.6007 -0.7967 -0.0670 +vn 0.5378 -0.5650 0.6258 +vn 0.0708 0.4689 0.8804 +vn -0.8718 -0.4881 0.0419 +vn 0.2014 0.4392 0.8755 +vn -0.3447 -0.1001 0.9334 +vn -0.0375 -0.2020 0.9787 +vn -0.2818 -0.0121 0.9594 +vn -0.2577 0.1788 0.9495 +vn 0.2444 0.1045 0.9640 +vn 0.1642 0.2495 0.9544 +vn -0.1684 0.7642 0.6227 +vn 0.9459 -0.1937 -0.2605 +vn 0.9959 0.0732 -0.0537 +vn -0.2722 0.6844 0.6764 +vn 0.0342 0.3608 0.9320 +vn 0.0705 0.4355 0.8974 +vn -0.7589 0.4691 0.4517 +vn 0.8458 -0.1942 0.4968 +vn 0.3007 0.5434 0.7837 +vn 0.0026 0.2028 0.9792 +vn -0.4584 -0.1792 0.8705 +vn -0.4816 -0.1234 0.8677 +vn -0.4248 -0.0650 0.9030 +vn 0.3208 -0.2675 0.9086 +vn 0.4962 0.0688 0.8655 +vn 0.2515 0.1691 0.9530 +vn 0.2646 0.0050 0.9643 +vn 0.1603 -0.0582 0.9854 +vn 0.2731 0.0529 0.9605 +vn 0.3512 0.2280 0.9081 +vn -0.1122 0.6330 0.7660 +vn 0.7880 -0.1927 -0.5848 +vn 0.8601 0.3875 -0.3319 +vn -0.0300 0.2228 0.9744 +vn -0.0537 0.6357 0.7701 +vn -0.1001 0.4212 0.9014 +vn -0.0912 0.1317 0.9871 +vn -0.0474 -0.1680 0.9847 +vn -0.1645 0.2261 0.9601 +vn -0.2641 -0.0386 0.9637 +vn -0.0180 -0.0105 0.9998 +vn 0.3665 0.2062 0.9073 +vn 0.2675 0.5389 0.7987 +vn 0.1930 0.2069 0.9591 +vn 0.8980 0.2290 -0.3756 +vn -0.2417 -0.3703 0.8969 +vn -0.0928 0.4225 0.9016 +vn 0.1010 0.2962 0.9498 +vn 0.3686 0.4924 0.7884 +vn 0.1050 0.3694 0.9233 +vn -0.8673 0.4181 0.2702 +vn 0.3503 -0.2604 0.8997 +vn 0.1225 0.8058 0.5793 +vn -0.9027 0.0246 -0.4295 +vn -0.0589 0.4155 0.9077 +vn -0.0646 -0.1742 0.9826 +vn -0.0730 -0.2308 0.9703 +vn -0.1847 -0.0673 0.9805 +vn -0.0074 0.1715 0.9852 +vn -0.0367 -0.0897 0.9953 +vn 0.1452 -0.1689 0.9749 +vn 0.1298 -0.2182 0.9672 +vn -0.5218 -0.1781 0.8343 +vn -0.3724 0.0667 0.9257 +vn -0.3519 0.0752 0.9330 +vn 0.0776 0.0702 0.9945 +vn -0.1822 0.0621 0.9813 +vn 0.4426 0.3233 0.8364 +vn 0.6204 -0.1614 -0.7675 +vn -0.7094 -0.7025 -0.0576 +vn 0.8866 0.2497 -0.3894 +vn -0.0161 -0.1891 0.9818 +vn -0.0187 -0.1691 0.9854 +vn 0.2134 -0.1796 0.9603 +vn 0.1591 0.0331 0.9867 +vn 0.2514 0.5011 0.8280 +vn 0.0566 0.4219 0.9049 +vn -0.1001 0.6712 0.7345 +vn 0.2830 0.0312 0.9586 +vn 0.3416 0.4024 0.8493 +vn 0.2265 -0.2029 0.9526 +vn -0.0300 -0.0866 0.9958 +vn -0.3410 0.1024 0.9345 +vn -0.3218 0.0721 0.9441 +vn -0.4080 -0.0116 0.9129 +vn -0.3908 0.2006 0.8983 +vn -0.0944 0.1541 0.9835 +vn -0.2024 0.2993 0.9324 +vn 0.0489 0.5193 0.8532 +vn 0.1429 0.4337 0.8896 +vn 0.2401 -0.5602 0.7928 +vn 0.4644 0.2315 0.8548 +vn 0.1236 0.4286 0.8950 +vn 0.1370 0.0439 0.9896 +vn 0.0842 -0.0671 0.9942 +vn 0.2352 -0.1864 0.9539 +vn -0.0647 -0.2716 0.9602 +vn -0.0780 -0.2399 0.9677 +vn -0.0176 -0.1044 0.9944 +vn -0.3009 0.3094 0.9021 +vn -0.2836 0.2564 0.9240 +vn 0.0047 0.4639 0.8859 +vn 0.2317 0.6050 0.7617 +vn 0.2204 0.6316 0.7433 +vn -0.0377 0.6566 0.7533 +vn 0.8577 -0.4964 -0.1339 +vn 0.1260 0.4260 0.8959 +vn 0.0170 0.3726 0.9279 +vn -0.1093 0.6179 0.7786 +vn 0.3988 0.1377 0.9066 +vn 0.1789 0.4877 0.8545 +vn 0.9944 -0.0746 0.0751 +vn -0.2500 0.9665 -0.0585 +vn 0.2263 0.1383 0.9642 +vn 0.2878 -0.3419 0.8946 +vn -0.0142 0.0394 0.9991 +vn 0.1201 -0.3331 0.9352 +vn 0.0517 -0.1133 0.9922 +vn 0.3864 0.1459 0.9107 +vn -0.2499 -0.0745 0.9654 +vn -0.2054 0.5129 0.8335 +vn -0.0128 0.4700 0.8826 +vn 0.0093 0.5434 0.8394 +vn 0.2452 0.0412 0.9686 +vn 0.1157 0.0143 0.9932 +vn 0.2148 0.5859 0.7814 +vn 0.0230 0.9752 -0.2201 +vn 0.3690 -0.1279 0.9206 +vn 0.2877 -0.3406 0.8951 +vn 0.1986 -0.1082 0.9741 +vn 0.3518 0.0013 0.9361 +vn 0.2609 -0.0449 0.9643 +vn -0.1328 -0.5230 0.8419 +vn -0.0763 0.4298 0.8997 +vn -0.0039 0.5566 0.8308 +vn 0.7661 -0.2534 0.5907 +vn -0.8120 0.2936 -0.5044 +vn 0.4548 -0.2419 0.8571 +vn 0.4696 -0.0716 0.8800 +vn -0.1314 0.0380 0.9906 +vn -0.3317 0.3168 0.8886 +vn -0.2493 0.2423 0.9376 +vn -0.2073 0.3317 0.9203 +vn -0.0851 0.6044 0.7922 +vn 0.0415 -0.6132 0.7888 +vn 0.1987 -0.8806 -0.4302 +vn 0.1593 0.1821 0.9703 +vn 0.6214 0.1210 0.7740 +vn 0.9140 0.1554 0.3749 +vn 0.3965 -0.9090 -0.1284 +vn 0.2756 0.1421 0.9507 +vn 0.5115 -0.1999 0.8357 +vn 0.5378 -0.0492 0.8417 +vn 0.3193 -0.2661 0.9095 +vn 0.1967 -0.0658 0.9782 +vn -0.2875 -0.4101 0.8655 +vn -0.2793 0.4256 0.8607 +vn -0.3583 0.4743 0.8042 +vn -0.1249 0.6047 0.7866 +vn -0.1251 0.6039 0.7872 +vn 0.5105 -0.8373 -0.1959 +vn 0.0274 0.8867 0.4615 +vn -0.2290 0.7861 0.5741 +vn 0.1453 -0.2049 0.9679 +vn 0.0170 0.7942 0.6074 +vn -0.9887 -0.1077 -0.1044 +vn 0.4519 -0.2130 0.8662 +vn 0.4946 -0.1168 0.8612 +vn 0.3687 -0.0328 0.9290 +vn 0.3710 -0.1783 0.9114 +vn 0.1870 0.0302 0.9819 +vn 0.3013 -0.1515 0.9414 +vn 0.3113 -0.0635 0.9482 +vn -0.2061 -0.5713 0.7945 +vn -0.2274 -0.4133 0.8817 +vn -0.0100 0.0048 0.9999 +vn -0.2554 0.4742 0.8425 +vn -0.2675 0.4793 0.8359 +vn -0.1327 0.5630 0.8157 +vn 0.9957 0.0488 -0.0783 +vn 0.6409 -0.6596 -0.3926 +vn 0.7326 -0.5692 -0.3732 +vn 0.0228 -0.2720 0.9620 +vn 0.0086 -0.5787 0.8155 +vn 0.2718 -0.2029 0.9407 +vn -0.2634 0.7210 0.6409 +vn 0.4828 0.3048 0.8210 +vn -0.1625 0.6709 0.7235 +vn 0.9562 -0.0427 0.2897 +vn -0.8937 -0.3280 -0.3061 +vn -0.3646 0.8243 0.4331 +vn 0.3481 -0.1066 0.9314 +vn 0.3713 -0.2802 0.8852 +vn 0.3917 -0.1040 0.9142 +vn 0.1912 -0.0559 0.9800 +vn 0.1526 -0.1183 0.9812 +vn 0.0952 -0.0638 0.9934 +vn 0.9698 0.2310 0.0785 +vn -0.0637 0.5288 0.8464 +vn -0.5792 0.6222 -0.5268 +vn 0.3817 0.2708 0.8837 +vn -0.0636 0.7667 0.6388 +vn 0.8413 -0.4970 -0.2125 +vn -0.0859 0.0414 0.9954 +vn -0.2958 0.8690 0.3966 +vn -0.2436 0.9057 0.3470 +vn 0.3165 -0.1709 0.9331 +vn 0.1867 -0.1997 0.9619 +vn 0.1585 -0.1326 0.9784 +vn -0.4602 -0.2029 0.8643 +vn -0.5227 -0.2689 0.8090 +vn 0.0545 -0.1796 0.9822 +vn 0.0974 -0.0628 0.9933 +vn -0.1266 -0.0503 0.9907 +vn -0.1214 0.2118 0.9697 +vn -0.0807 0.4773 0.8750 +vn -0.0898 0.5169 0.8513 +vn -0.1217 0.4982 0.8585 +vn -0.1156 0.5973 0.7937 +vn -0.1887 0.1817 0.9651 +vn 0.3131 -0.3871 0.8673 +vn -0.0920 0.4752 0.8750 +vn -0.0096 0.0550 0.9984 +vn -0.1985 0.6927 0.6934 +vn -0.7237 -0.6816 -0.1087 +vn 0.3116 -0.1600 0.9366 +vn 0.3154 -0.2072 0.9261 +vn 0.1799 -0.2444 0.9528 +vn 0.1596 -0.1969 0.9674 +vn -0.4177 -0.2617 0.8701 +vn -0.7110 -0.1040 0.6954 +vn -0.8965 -0.1566 0.4145 +vn 0.1675 -0.2103 -0.9632 +vn -0.8677 0.0077 0.4971 +vn -0.5826 0.0892 0.8079 +vn 0.1333 0.4396 0.8883 +vn 0.1590 0.3469 0.9243 +vn -0.2059 0.7378 0.6429 +vn -0.3738 -0.1253 -0.9190 +vn -0.7289 -0.1799 0.6606 +vn 0.3571 -0.2134 0.9094 +vn 0.0818 0.3046 0.9490 +vn -0.1816 0.4367 0.8811 +vn -0.9999 -0.0040 0.0113 +vn -0.2682 0.9433 0.1954 +vn -0.0689 0.8937 0.4434 +vn 0.8098 0.4614 0.3625 +vn 0.3277 -0.8706 -0.3669 +vn -0.1085 -0.3141 0.9432 +vn -0.0989 -0.0965 0.9904 +vn -0.1327 0.5917 0.7952 +vn -0.0477 0.6880 0.7242 +vn -0.0461 0.6770 0.7345 +vn -0.4724 0.6955 -0.5414 +vn -0.4905 0.6997 -0.5194 +vn -0.3842 -0.4187 -0.8228 +vn 0.0350 -0.1090 0.9934 +vn 0.0825 0.4897 0.8680 +vn 0.6066 -0.7937 -0.0465 +vn 0.0162 0.6880 0.7255 +vn 0.8244 0.5031 0.2593 +vn 0.6163 -0.7453 -0.2543 +vn -0.1028 -0.0521 0.9933 +vn -0.3357 -0.2317 0.9130 +vn -0.3409 -0.2620 0.9028 +vn -0.4367 -0.2792 0.8552 +vn -0.4219 -0.2679 0.8662 +vn -0.4385 -0.2758 0.8553 +vn -0.7620 0.5781 0.2917 +vn 0.8925 -0.4378 -0.1086 +vn 0.0357 0.8297 0.5571 +vn -0.4721 0.0808 0.8778 +vn -0.3548 0.2824 0.8913 +vn -0.2135 0.7291 -0.6503 +vn 0.2030 0.8461 0.4929 +vn 0.4874 -0.1658 0.8573 +vn -0.3874 -0.8999 -0.2001 +vn 0.9758 -0.2119 -0.0546 +vn -0.1155 0.4684 0.8759 +vn 0.1329 0.1759 0.9754 +vn -0.1728 0.9756 0.1357 +vn -0.3749 0.7128 0.5928 +vn -0.3554 0.8164 0.4551 +vn -0.6898 -0.2278 0.6873 +vn 0.1552 0.9798 0.1264 +vn -0.6211 0.6411 -0.4507 +vn 0.3410 0.9335 0.1111 +vn 0.6655 0.7237 0.1823 +vn -0.0204 -0.8306 -0.5566 +vn 0.3683 0.3838 0.8468 +vn 0.3677 0.3969 0.8410 +vn -0.2298 0.3922 0.8907 +vn -0.2431 0.5073 0.8268 +vn 0.0864 -0.7400 -0.6671 +vn -0.0187 0.5316 -0.8468 +vn 0.1429 -0.1010 0.9846 +vn -0.0480 -0.4741 0.8791 +vn 0.0118 0.2916 0.9565 +vn 0.2041 0.2676 0.9417 +vn -0.5827 0.6796 -0.4457 +vn -0.4947 0.5402 0.6808 +vn -0.2648 0.3687 0.8910 +vn -0.2619 0.4255 0.8662 +vn 0.7302 0.0734 -0.6793 +vn 0.4496 0.8172 0.3607 +vn -0.0231 0.7442 0.6675 +vn -0.0936 0.7269 0.6804 +vn -0.9184 0.2514 -0.3055 +vn 0.5720 0.7688 0.2858 +vn -0.3537 -0.1538 0.9226 +vn -0.3157 -0.0647 0.9467 +vn -0.2793 0.4823 0.8303 +vn -0.4192 0.6371 0.6468 +vn -0.2607 0.5464 0.7959 +vn -0.2862 0.5787 0.7637 +vn 0.6793 0.0346 0.7330 +vn -0.1339 -0.1946 0.9717 +vn 0.0759 0.4142 0.9070 +vn -0.3297 0.6812 0.6536 +vn -0.1125 0.9069 0.4060 +vn -0.0724 0.9447 0.3198 +vn -0.0825 0.9425 0.3239 +vn -0.3831 0.8516 0.3577 +vn -0.2077 0.7677 0.6062 +vn 0.3394 0.4910 0.8024 +vn 0.0841 0.9695 0.2302 +vn -0.1945 0.9798 -0.0471 +vn 0.1602 0.9744 0.1579 +vn 0.6269 0.6104 0.4842 +vn 0.2987 0.4360 0.8489 +vn -0.1851 0.3840 0.9046 +vn -0.4963 0.5453 0.6755 +vn 0.8838 0.3351 -0.3265 +vn 0.8835 0.3247 -0.3377 +vn -0.1327 -0.5409 0.8306 +vn 0.1959 -0.1628 0.9670 +vn 0.2408 0.5547 0.7964 +vn 0.9499 0.1711 -0.2614 +vn -0.0457 0.8886 0.4565 +vn -0.9645 -0.2616 -0.0355 +vn -0.8727 -0.4619 -0.1584 +vn -0.3203 0.8408 0.4365 +vn 0.8166 0.3736 0.4399 +vn -0.0668 0.1919 0.9791 +vn -0.5399 0.6007 0.5897 +vn -0.4474 0.5875 0.6743 +vn 0.4135 -0.0503 0.9091 +vn 0.1003 0.4728 -0.8754 +vn 0.1395 0.4355 0.8893 +vn 0.0930 0.2058 0.9742 +vn 0.2029 -0.0235 0.9789 +vn -0.0147 0.6540 0.7563 +vn 0.0719 0.8844 0.4611 +vn 0.0102 0.9446 0.3282 +vn -0.6861 0.4526 0.5696 +vn -0.2648 0.6474 -0.7147 +vn -0.0973 -0.5655 -0.8190 +vn -0.9693 0.0785 -0.2328 +vn -0.2361 -0.4408 -0.8660 +vn -0.2274 0.4787 0.8480 +vn -0.3335 0.7086 0.6218 +vn 0.2527 0.3781 0.8906 +vn 0.2828 0.2126 0.9353 +vn -0.3297 0.8296 0.4507 +vn 0.1055 0.7515 0.6513 +vn 0.0885 0.8795 0.4676 +vn -0.4163 0.7285 0.5440 +vn -0.5826 0.1983 0.7882 +vn -0.8616 0.5059 0.0404 +vn -0.7831 0.5254 -0.3327 +vn 0.4719 0.6010 0.6451 +vn 0.0381 0.2004 0.9790 +vn -0.1414 0.4324 0.8905 +vn -0.3256 0.6174 0.7161 +vn -0.0301 -0.9953 -0.0922 +vn -0.0917 0.5894 0.8026 +vn 0.0268 0.4872 0.8729 +vn 0.9085 -0.4167 0.0306 +vn 0.1137 0.4154 0.9025 +vn 0.1146 0.3518 0.9290 +vn 0.1580 0.7531 0.6387 +vn 0.2678 0.9597 -0.0854 +vn -0.0601 0.9977 -0.0300 +vn -0.9112 0.3337 -0.2414 +vn 0.3026 0.9528 -0.0251 +vn 0.1782 0.9059 0.3843 +vn -0.2769 0.9404 -0.1974 +vn 0.3590 0.8848 0.2971 +vn 0.1723 0.3040 0.9370 +vn 0.2093 0.1908 0.9591 +vn -0.1154 0.4272 0.8968 +vn -0.2073 0.5488 0.8098 +vn -0.3417 0.7104 0.6152 +vn 0.4480 0.5070 0.7364 +vn 0.9259 0.1576 -0.3433 +vn 0.0460 0.8712 0.4888 +vn -0.3879 0.7235 0.5711 +vn -0.2741 0.0739 0.9589 +vn -0.6839 -0.3630 0.6328 +vn -0.5719 0.2123 0.7924 +vn -0.7422 -0.1948 0.6412 +vn 0.7812 0.6076 0.1434 +vn -0.3918 0.1945 0.8993 +vn -0.3286 0.8669 0.3749 +vn -0.3253 0.6178 0.7159 +vn 0.9466 -0.0347 -0.3206 +vn 0.0508 -0.0371 0.9980 +vn 0.2175 0.4443 0.8691 +vn -0.5982 -0.3529 0.7194 +vn -0.1240 0.9906 0.0578 +vn -0.9508 0.1251 -0.2835 +vn -0.2347 -0.3114 0.9209 +vn -0.3488 -0.2687 0.8979 +vn 0.4197 0.8904 -0.1760 +vn 0.4159 0.9051 -0.0886 +vn -0.0782 0.1598 0.9840 +vn -0.0843 0.2975 0.9510 +vn -0.2314 0.4020 0.8859 +vn -0.1630 0.5902 0.7906 +vn 0.9336 0.1949 -0.3006 +vn 0.9320 -0.3621 0.0167 +vn -0.2622 -0.4229 -0.8674 +vn -0.3109 0.8434 0.4382 +vn 0.2588 -0.2477 0.9336 +vn 0.0711 0.2069 0.9758 +vn 0.2859 0.6759 0.6793 +vn 0.2507 0.7972 0.5492 +vn -0.2053 0.1140 0.9720 +vn -0.5860 -0.3861 0.7124 +vn -0.3146 0.9455 0.0844 +vn 0.2866 0.9367 -0.2011 +vn -0.2611 -0.4321 0.8632 +vn -0.0467 -0.0030 0.9989 +vn -0.1562 0.4199 0.8940 +vn 0.2009 -0.8893 -0.4108 +vn 0.2425 0.4242 0.8725 +vn 0.0778 0.2951 0.9523 +vn -0.1866 0.5503 0.8138 +vn -0.0245 -0.9064 -0.4216 +vn 0.2471 0.6553 0.7139 +vn 0.0956 0.1267 0.9873 +vn 0.2423 -0.0438 0.9692 +vn 0.0565 -0.2400 0.9691 +vn -0.1264 -0.2259 0.9659 +vn -0.3178 -0.9088 -0.2703 +vn -0.2390 0.5765 0.7814 +vn -0.4187 -0.5406 0.7297 +vn 0.3476 -0.2993 -0.8886 +vn -0.1904 -0.1561 0.9692 +vn -0.2667 -0.2508 0.9306 +vn 0.2163 -0.2731 0.9374 +vn -0.2897 0.2544 0.9227 +vn -0.3305 0.3930 0.8581 +vn -0.1448 0.5072 0.8496 +vn -0.1600 0.5852 0.7950 +vn 0.9314 0.3514 -0.0948 +vn -0.0953 0.4365 0.8947 +vn -0.0169 0.1914 0.9814 +vn 0.1469 -0.8512 -0.5039 +vn -0.2752 0.4465 0.8514 +vn 0.3799 -0.9213 0.0824 +vn 0.3196 0.6321 0.7059 +vn 0.0471 0.6431 0.7643 +vn -0.1706 -0.0171 0.9852 +vn -0.1443 -0.2141 0.9661 +vn -0.3224 -0.4268 0.8449 +vn -0.3123 -0.2543 0.9153 +vn -0.1703 -0.1705 0.9705 +vn -0.2863 -0.2533 0.9240 +vn 0.2300 0.0234 0.9729 +vn 0.3124 0.0916 0.9455 +vn -0.2625 0.2472 0.9327 +vn -0.8865 0.0703 -0.4573 +vn 0.3360 -0.9090 -0.2465 +vn -0.4113 0.1610 0.8972 +vn -0.3979 0.4661 0.7902 +vn 0.9280 -0.1572 -0.3379 +vn -0.1034 0.1579 0.9820 +vn 0.1907 0.3990 0.8969 +vn -0.2753 -0.5604 0.7811 +vn 0.0856 0.9564 0.2794 +vn 0.8066 -0.5472 -0.2238 +vn -0.6888 0.6489 0.3233 +vn 0.5075 -0.4892 -0.7093 +vn -0.1937 -0.0684 0.9787 +vn 0.1525 0.4191 0.8950 +vn 0.2021 0.5092 0.8366 +vn -0.4188 0.4947 0.7615 +vn -0.2886 0.7307 0.6187 +vn 0.6555 -0.7314 -0.1879 +vn 0.1881 0.2058 0.9604 +vn 0.3487 0.5008 0.7922 +vn 0.2106 0.5804 0.7867 +vn 0.2069 0.6106 0.7644 +vn -0.4511 -0.5698 0.6869 +vn -0.0332 0.0905 0.9953 +vn -0.5716 -0.3189 0.7560 +vn -0.0285 -0.3039 0.9523 +vn 0.8278 0.3634 0.4274 +vn 0.2486 -0.3614 0.8986 +vn -0.0904 -0.0459 0.9949 +vn 0.3078 -0.1556 0.9386 +vn 0.2820 -0.1426 0.9488 +vn -0.2860 -0.5339 0.7957 +vn -0.2245 -0.3286 0.9174 +vn -0.1672 -0.0152 0.9858 +vn -0.1202 0.0632 0.9907 +vn -0.0880 0.2851 0.9544 +vn 0.9622 0.2286 -0.1477 +vn 0.2812 0.2866 0.9159 +vn 0.2007 0.5125 0.8349 +vn 0.3748 0.4167 0.8282 +vn -0.4078 -0.2085 0.8889 +vn -0.5010 -0.2151 0.8383 +vn -0.5194 0.1516 -0.8410 +vn -0.4478 -0.2576 0.8562 +vn -0.3079 -0.1080 0.9453 +vn -0.2557 0.0311 0.9663 +vn -0.0850 0.4511 0.8884 +vn 0.1907 -0.8440 -0.5014 +vn 0.3618 0.9317 0.0311 +vn -0.2030 0.3455 0.9162 +vn -0.1891 0.5155 0.8357 +vn 0.9091 -0.1399 -0.3924 +vn -0.0581 0.5478 0.8346 +vn -0.0074 0.5868 0.8097 +vn -0.1740 -0.6162 0.7681 +vn -0.3225 -0.3162 0.8922 +vn 0.2444 0.1874 0.9514 +vn 0.2060 0.0603 0.9767 +vn -0.3080 0.7119 0.6312 +vn 0.9699 0.0964 0.2238 +vn 0.6652 -0.7224 -0.1888 +vn -0.2316 0.4711 0.8512 +vn -0.2308 0.4674 0.8534 +vn -0.1207 0.5947 0.7948 +vn -0.1827 0.7007 0.6897 +vn -0.2418 0.7393 0.6285 +vn 0.6614 -0.7085 -0.2460 +vn 0.3298 -0.4108 0.8500 +vn -0.1342 -0.5546 0.8212 +vn -0.2371 -0.2782 0.9308 +vn -0.3007 -0.0546 0.9522 +vn -0.4018 -0.2732 0.8740 +vn -0.3180 0.0622 0.9461 +vn -0.0821 -0.2878 0.9542 +vn -0.0854 -0.2666 0.9600 +vn -0.1409 0.0677 0.9877 +vn -0.0495 0.1463 0.9880 +vn -0.1102 0.2748 0.9552 +vn -0.1639 0.7873 0.5944 +vn -0.0702 0.1749 0.9821 +vn -0.0094 0.1448 0.9894 +vn 0.9072 -0.4125 -0.0828 +vn 0.6372 -0.4511 -0.6249 +vn 0.2810 0.5583 0.7806 +vn 0.0513 0.0210 0.9985 +vn -0.0166 -0.7462 0.6655 +vn -0.2498 -0.2900 0.9239 +vn -0.2219 -0.4001 0.8892 +vn 0.0734 0.9682 0.2390 +vn -0.2143 0.0882 0.9728 +vn -0.2208 0.1024 0.9699 +vn 0.9065 -0.1272 -0.4026 +vn -0.3335 0.8651 0.3746 +vn -0.3252 0.1290 0.9368 +vn 0.8720 0.2531 -0.4191 +vn 0.1450 0.4264 0.8928 +vn 0.1953 0.0143 0.9806 +vn 0.0492 0.5871 0.8080 +vn 0.1509 0.3874 0.9095 +vn 0.3267 0.4532 0.8294 +vn -0.3560 -0.5993 0.7170 +vn -0.3941 -0.3337 0.8563 +vn -0.4207 -0.0178 0.9070 +vn 0.1053 -0.1476 0.9834 +vn 0.0137 0.4635 0.8860 +vn -0.0933 0.6981 0.7099 +vn -0.5754 0.3896 -0.7191 +vn -0.6102 0.7776 -0.1517 +vn 0.0452 0.5651 0.8237 +vn -0.1801 -0.4979 0.8484 +vn 0.1089 -0.1474 0.9831 +vn -0.0329 0.5104 0.8593 +vn 0.8780 -0.4643 -0.1161 +vn 0.0607 0.3579 0.9318 +vn -0.0651 -0.0858 0.9942 +vn -0.0982 0.3043 0.9475 +vn -0.0465 0.4545 0.8895 +vn 0.0899 0.3229 0.9421 +vn -0.1331 0.5933 0.7939 +vn -0.0885 0.6930 0.7155 +vn -0.8752 -0.4768 -0.0825 +vn 0.1955 0.3832 0.9028 +vn -0.1967 -0.7008 0.6857 +vn 0.1951 -0.0377 0.9801 +vn -0.1213 -0.7696 0.6269 +vn -0.0680 -0.5923 0.8028 +vn -0.0504 -0.1815 0.9821 +vn -0.2444 0.1026 0.9642 +vn -0.3058 0.0418 0.9512 +vn -0.3004 0.1421 0.9432 +vn 0.2581 0.1865 0.9480 +vn 0.3161 0.1274 0.9401 +vn -0.0231 0.3429 0.9391 +vn -0.8146 -0.5681 -0.1170 +vn 0.0272 0.4716 0.8814 +vn -0.0398 0.8613 0.5066 +vn -0.3789 -0.2462 0.8921 +vn -0.0006 -0.3950 0.9187 +vn -0.1213 -0.0967 0.9879 +vn -0.0494 0.1948 0.9796 +vn 0.3493 -0.1275 0.9283 +vn 0.1673 0.2146 0.9623 +vn 0.3286 -0.1572 0.9313 +vn 0.2379 0.7645 0.5991 +vn 0.4973 -0.3061 0.8118 +vn 0.3156 0.1506 0.9369 +vn 0.4995 -0.2181 0.8384 +vn 0.4155 -0.6177 0.6677 +vn 0.4112 0.0399 0.9107 +vn 0.4425 0.5323 0.7217 +vn 0.7955 -0.3400 0.5016 +vn 0.9753 0.0999 -0.1969 +vn -0.7933 -0.5696 0.2149 +vn 0.3076 -0.0359 0.9508 +vn 0.4173 -0.5953 0.6867 +vn -0.2245 -0.5079 -0.8316 +vn 0.6506 -0.5474 0.5263 +vn 0.8870 -0.2213 0.4053 +vn 0.9750 0.0301 -0.2202 +vn 0.7371 -0.3973 0.5467 +vn 0.7463 -0.2907 0.5988 +vn 0.7962 -0.1774 0.5785 +vn 0.0182 -0.9994 -0.0307 +vn -0.3519 0.7435 0.5686 +vn 0.3769 0.1108 0.9196 +vn -0.4518 -0.6167 -0.6447 +vn -0.4448 -0.3809 -0.8106 +vn 0.5756 -0.0232 0.8174 +vn 0.5660 -0.5749 0.5909 +vn 0.4372 -0.4292 0.7904 +vn 0.2373 -0.5050 0.8298 +vn -0.3096 0.4117 -0.8571 +vn 0.4793 -0.4909 0.7276 +vn 0.2697 -0.1979 0.9424 +vn 0.9242 0.2243 -0.3091 +vn 0.9863 -0.0489 -0.1573 +vn 0.8319 -0.5278 -0.1711 +vn 0.6792 -0.1766 -0.7124 +vn 0.5512 -0.3935 0.7358 +vn 0.4671 0.1274 0.8750 +vn 0.2716 -0.0654 0.9602 +vn 0.4563 0.5522 -0.6978 +vn -0.2682 0.5709 -0.7760 +vn 0.4834 0.2837 0.8281 +vn 0.8734 -0.4770 -0.0985 +vn 0.9392 -0.3433 0.0015 +vn 0.3123 -0.7210 0.6185 +vn 0.1719 0.0300 0.9847 +vn 0.4081 0.6170 0.6729 +vn 0.4284 0.3099 0.8488 +vn 0.4481 0.2968 0.8433 +vn 0.5529 -0.1634 0.8170 +vn 0.7562 -0.5802 -0.3025 +vn 0.8448 -0.5249 -0.1038 +vn 0.4825 -0.0612 0.8737 +vn 0.5454 -0.3487 0.7622 +vn 0.5524 0.3460 0.7584 +vn 0.5763 0.4350 0.6918 +vn 0.6098 0.4081 0.6794 +vn 0.7040 0.2048 0.6801 +vn 0.1027 -0.9268 -0.3613 +vn 0.1719 0.2917 0.9409 +vn 0.3047 -0.0177 0.9523 +vn -0.0607 -0.7485 -0.6604 +vn -0.2163 -0.4938 0.8422 +vn 0.5040 0.1699 0.8468 +vn 0.5353 -0.1089 0.8376 +vn 0.6543 -0.1557 0.7401 +vn 0.5666 0.0815 0.8199 +vn 0.6098 0.1866 0.7703 +vn 0.5380 0.3217 0.7791 +vn 0.5484 0.0932 0.8310 +vn 0.4536 0.3481 0.8204 +vn 0.5951 -0.0586 0.8015 +vn 0.6360 -0.5597 0.5313 +vn 0.6467 -0.5452 0.5334 +vn 0.6529 0.4235 0.6280 +vn 0.5255 0.3640 0.7690 +vn -0.1913 0.3899 -0.9008 +vn 0.8743 0.1246 0.4691 +vn 0.8053 -0.0828 0.5870 +vn 0.8146 0.0348 0.5790 +vn 0.8603 -0.1418 0.4897 +vn 0.2542 0.6668 0.7005 +vn 0.5400 0.6286 0.5597 +vn 0.5597 -0.7326 0.3873 +vn 0.6939 0.1962 0.6928 +vn 0.5274 0.3647 0.7674 +vn 0.9014 0.3962 -0.1750 +vn 0.9138 0.0650 0.4009 +vn 0.7251 0.4051 0.5569 +vn 0.8674 0.0224 0.4971 +vn 0.7762 0.3172 0.5449 +vn 0.8358 0.1688 0.5225 +vn -0.1502 0.9363 -0.3174 +vn 0.8671 0.0827 0.4913 +vn -0.1459 0.2459 -0.9582 +vn 0.7841 -0.4533 0.4240 +vn 0.8616 -0.1485 0.4853 +vn 0.8920 -0.0670 0.4471 +vn 0.8735 0.0989 0.4767 +vn 0.8126 0.1946 0.5494 +vn 0.7696 0.1163 0.6279 +vn 0.6339 0.3248 0.7019 +vn 0.3053 -0.4072 0.8608 +vn 0.8427 0.4466 0.3005 +vn 0.5937 0.4744 0.6500 +vn -0.1753 0.2069 -0.9625 +vn 0.6688 -0.6857 0.2873 +vn 0.8149 -0.4748 0.3324 +vn 0.7438 0.4560 0.4887 +vn 0.8483 0.1519 0.5073 +vn 0.6224 0.3205 0.7140 +vn 0.2956 0.6482 0.7018 +vn 0.3599 0.3385 0.8694 +vn 0.3497 -0.9140 -0.2058 +vn 0.6647 0.3661 0.6513 +vn 0.5236 0.4083 0.7477 +vn 0.5403 -0.2454 0.8049 +vn 0.7933 0.3443 0.5022 +vn 0.8585 0.0871 0.5053 +vn 0.7440 -0.4728 0.4721 +vn 0.5201 -0.7978 0.3049 +vn 0.8237 -0.4635 0.3266 +vn 0.7653 0.4371 0.4726 +vn 0.8672 0.1987 0.4566 +vn 0.8297 0.0515 0.5558 +vn 0.7922 0.2247 0.5674 +vn 0.2341 0.6580 0.7157 +vn 0.5559 -0.3727 0.7430 +vn 0.6924 -0.1517 0.7054 +vn 0.8164 0.0055 0.5774 +vn 0.5378 0.3903 0.7473 +vn 0.5745 0.3924 0.7183 +vn 0.8380 0.0903 -0.5381 +vn 0.8375 0.0636 0.5427 +vn 0.1822 0.1227 0.9756 +vn 0.2885 -0.5952 0.7500 +vn 0.9282 -0.1525 0.3394 +vn 0.8486 0.0467 0.5270 +vn 0.7872 0.3551 0.5042 +vn 0.7164 0.4142 0.5615 +vn 0.8759 0.0425 0.4806 +vn 0.9348 -0.3059 -0.1803 +vn -0.9883 0.0195 -0.1512 +vn -0.2900 -0.5991 0.7463 +vn 0.7371 0.2267 0.6366 +vn 0.4535 0.4967 0.7401 +vn 0.5575 0.4389 0.7047 +vn 0.8613 -0.3070 -0.4049 +vn 0.8695 0.0768 -0.4879 +vn 0.8181 -0.2468 0.5194 +vn 0.8482 0.0473 0.5275 +vn 0.8974 0.0705 0.4355 +vn 0.6620 0.2337 0.7121 +vn 0.0817 0.8385 0.5388 +vn 0.3868 -0.4152 0.8234 +vn 0.5761 -0.7937 0.1955 +vn 0.5540 0.1432 0.8201 +vn 0.4524 -0.7281 -0.5150 +vn 0.5887 -0.4125 0.6952 +vn 0.4814 -0.7011 0.5260 +vn 0.6886 -0.5291 0.4959 +vn 0.7591 -0.2204 0.6125 +vn 0.7246 0.2977 0.6216 +vn 0.5581 0.4453 0.7001 +vn 0.6053 0.4299 0.6699 +vn 0.8772 -0.0016 0.4801 +vn 0.8962 -0.0942 0.4335 +vn 0.7021 0.0040 0.7120 +vn -0.4709 -0.4961 -0.7295 +vn 0.5728 -0.7712 -0.2778 +vn 0.7757 -0.6083 0.1682 +vn 0.0777 -0.0962 0.9923 +vn 0.6694 -0.5981 0.4407 +vn 0.6911 -0.5305 0.4908 +vn 0.6063 0.4368 0.6645 +vn 0.5076 -0.1852 0.8415 +vn 0.5272 -0.4956 0.6903 +vn 0.5140 -0.0009 0.8578 +vn -0.9732 0.0570 -0.2228 +vn 0.7464 0.3492 0.5665 +vn 0.8205 -0.2691 0.5043 +vn 0.3522 0.5424 0.7627 +vn 0.8219 0.0448 0.5679 +vn 0.5055 -0.5085 0.6971 +vn 0.4193 -0.3625 0.8323 +vn 0.4555 0.0261 0.8899 +vn 0.4950 0.2555 0.8305 +vn 0.3626 0.4155 0.8342 +vn 0.4147 0.0020 0.9099 +vn -0.0843 0.1224 -0.9889 +vn -0.4400 0.0989 -0.8925 +vn -0.1770 -0.9842 0.0058 +vn 0.3849 0.4968 0.7779 +vn -0.2658 -0.6052 -0.7504 +vn 0.6705 0.4058 0.6212 +vn 0.7929 0.0593 0.6065 +vn 0.5403 0.0545 0.8397 +vn 0.4179 0.4278 0.8015 +vn 0.4457 0.5613 0.6973 +vn 0.2552 -0.6350 0.7291 +vn 0.5113 -0.2335 0.8271 +vn 0.5189 0.4634 0.7183 +vn 0.5831 -0.2983 0.7556 +vn 0.6049 -0.2105 0.7679 +vn 0.4994 -0.0595 0.8643 +vn 0.1504 -0.1681 0.9742 +vn 0.9949 0.0848 0.0550 +vn 0.2137 -0.1235 0.9691 +vn 0.7959 -0.2797 0.5369 +vn 0.9060 -0.3575 -0.2265 +vn 0.3103 0.6179 0.7224 +vn -0.8991 -0.4331 0.0642 +vn 0.3726 0.4623 0.8046 +vn 0.4026 0.4361 0.8048 +vn 0.3695 0.5704 0.7335 +vn 0.7512 -0.1940 0.6309 +vn 0.6603 -0.3958 0.6382 +vn 0.6993 0.0515 0.7130 +vn 0.3403 0.1572 0.9271 +vn 0.3768 -0.9019 -0.2110 +vn 0.2168 0.8089 0.5465 +vn 0.6756 0.3978 0.6208 +vn 0.4070 -0.3592 0.8399 +vn 0.4748 -0.4877 0.7326 +vn 0.3978 -0.5011 0.7685 +vn 0.5145 0.3839 0.7667 +vn 0.3181 0.3312 0.8883 +vn 0.2848 0.3538 0.8909 +vn 0.3662 0.2383 0.8995 +vn -0.1706 0.9853 0.0079 +vn 0.6912 -0.1243 0.7119 +vn 0.4390 -0.1339 0.8884 +vn 0.7249 0.3730 -0.5792 +vn 0.5168 -0.2654 0.8139 +vn 0.5490 0.1973 0.8122 +vn 0.9249 0.3747 0.0647 +vn 0.6267 0.2885 0.7239 +vn 0.5978 0.3790 0.7064 +vn 0.4929 0.3856 0.7800 +vn 0.4329 0.0688 0.8988 +vn 0.8200 -0.3647 0.4411 +vn 0.9050 -0.1267 0.4062 +vn 0.9105 -0.1358 0.3906 +vn 0.8757 -0.0012 0.4828 +vn 0.8330 -0.1375 0.5359 +vn 0.5782 0.5333 0.6175 +vn 0.5711 0.4570 0.6820 +vn 0.7808 -0.1687 -0.6016 +vn 0.7956 -0.1775 0.5793 +vn 0.6949 0.4223 0.5821 +vn 0.5512 -0.7737 0.3124 +vn 0.6130 -0.2572 0.7470 +vn 0.5119 -0.2314 0.8273 +vn 0.6082 0.3607 0.7071 +vn 0.6772 -0.2020 0.7075 +vn 0.3962 0.5874 0.7057 +vn 0.8951 -0.0118 -0.4458 +vn 0.2674 0.2383 0.9336 +vn 0.0640 0.4264 -0.9023 +vn 0.7509 -0.0247 0.6600 +vn 0.6038 0.3571 0.7127 +vn 0.1146 -0.7495 -0.6520 +vn 0.5299 -0.4069 0.7441 +vn 0.7688 -0.2921 0.5689 +vn 0.5030 -0.0615 0.8621 +vn 0.6167 -0.3630 0.6985 +vn 0.1821 0.7959 0.5774 +vn 0.6273 -0.2922 0.7218 +vn 0.6942 0.2526 0.6740 +vn 0.6197 0.1901 0.7614 +vn 0.5699 -0.0409 0.8207 +vn -0.0448 -0.9986 -0.0270 +vn 0.3020 -0.1273 0.9448 +vn 0.7946 -0.5450 -0.2676 +vn 0.6010 -0.0104 0.7992 +vn 0.3908 -0.1310 0.9111 +vn 0.6178 -0.5014 0.6057 +vn 0.6634 0.1666 0.7295 +vn 0.5737 0.4714 0.6698 +vn 0.6950 -0.6947 0.1853 +vn 0.5746 0.1469 0.8051 +vn -0.8852 0.4594 -0.0734 +vn 0.1336 -0.3190 0.9383 +vn 0.6984 -0.3878 0.6015 +vn 0.7207 0.1376 0.6795 +vn 0.6690 0.2118 0.7124 +vn 0.6195 0.3799 0.6869 +vn 0.5750 0.5176 0.6336 +vn 0.6575 0.2715 0.7028 +vn 0.6479 -0.2221 0.7286 +vn 0.7287 0.2655 0.6313 +vn 0.3577 0.4764 0.8032 +vn 0.5348 -0.2387 0.8106 +vn 0.3113 0.3426 0.8864 +vn 0.3514 0.1323 0.9268 +vn 0.3866 0.1986 0.9006 +vn -0.1092 -0.5798 -0.8074 +vn 0.4647 0.1742 0.8682 +vn 0.6194 -0.3198 0.7170 +vn 0.6350 0.4272 0.6437 +vn 0.7692 0.1975 0.6077 +vn 0.8861 -0.1116 0.4498 +vn 0.7749 0.0834 0.6266 +vn 0.9627 0.2236 -0.1526 +vn 0.1313 0.5035 0.8539 +vn 0.2270 0.2534 0.9403 +vn 0.3776 -0.3387 0.8618 +vn 0.7165 0.3907 0.5780 +vn 0.9938 -0.0816 0.0761 +vn 0.3221 -0.1401 0.9363 +vn 0.4938 -0.0035 0.8696 +vn 0.7458 -0.1053 0.6577 +vn 0.8437 -0.0532 0.5342 +vn 0.2730 -0.0429 0.9611 +vn 0.6986 -0.4500 0.5563 +vn 0.5212 -0.6052 0.6017 +vn 0.8497 -0.5222 -0.0729 +vn 0.5628 -0.0903 0.8217 +vn 0.4442 0.1558 0.8823 +vn 0.4203 0.4260 0.8012 +vn 0.2796 0.4359 0.8554 +vn 0.0268 -0.6710 -0.7410 +vn 0.3806 0.5245 0.7616 +vn -0.1879 -0.7766 -0.6013 +vn 0.5382 -0.7030 0.4649 +vn 0.3051 0.4973 0.8122 +vn 0.4970 0.2602 0.8278 +vn 0.5395 0.3302 0.7745 +vn 0.9438 0.0762 0.3215 +vn 0.2093 -0.7220 -0.6595 +vn 0.3060 0.2522 0.9180 +vn -0.1185 -0.5455 -0.8297 +vn 0.4631 -0.8834 0.0719 +vn 0.6113 0.0834 0.7870 +vn 0.2104 -0.3654 0.9068 +vn 0.6793 0.0346 0.7331 +vn 0.5424 0.0694 0.8372 +vn -0.3724 0.5367 0.7572 +vn 0.4801 -0.0404 0.8763 +vn 0.3108 0.1662 0.9358 +vn 0.4709 0.1809 0.8634 +vn 0.7126 -0.0514 0.6997 +vn 0.7913 0.1216 0.5992 +vn 0.6293 0.4274 0.6490 +vn 0.7551 -0.3090 0.5782 +vn 0.3857 0.8847 0.2619 +vn 0.3230 0.9223 0.2121 +vn 0.2564 -0.4582 0.8510 +vn 0.0938 -0.6338 -0.7678 +vn 0.0380 0.3665 0.9296 +vn 0.6788 -0.0971 0.7278 +vn 0.9164 0.0587 0.3960 +vn 0.6531 -0.1173 0.7481 +vn 0.5633 -0.2171 0.7972 +vn 0.6581 -0.1588 0.7360 +vn 0.7728 0.2418 0.5867 +vn 0.3966 0.4867 0.7784 +vn 0.6372 0.0534 0.7688 +vn 0.5593 0.4158 0.7172 +vn 0.4750 0.7075 0.5232 +vn 0.4916 0.2466 0.8352 +vn 0.6742 -0.3078 0.6714 +vn 0.6325 -0.2416 0.7360 +vn 0.7926 0.1018 0.6012 +vn 0.7241 0.5345 0.4359 +vn 0.8268 0.2082 0.5225 +vn 0.8083 0.1630 0.5657 +vn 0.7393 0.0723 0.6695 +vn 0.0146 0.6744 0.7382 +vn 0.8844 0.1888 0.4268 +vn 0.7670 0.3431 0.5422 +vn 0.6437 -0.4347 0.6299 +vn 0.4505 0.1601 0.8783 +vn 0.2893 0.5541 0.7806 +vn 0.4437 0.5400 0.7152 +vn 0.4123 0.4893 0.7685 +vn 0.7839 -0.3358 0.5223 +vn 0.2748 0.4720 0.8377 +vn 0.7674 0.1101 0.6317 +vn 0.8040 0.2580 0.5357 +vn 0.5311 -0.4706 0.7045 +vn 0.3105 0.6180 0.7223 +vn 0.6840 -0.0782 0.7253 +vn 0.6018 -0.6678 0.4380 +vn 0.4972 0.2910 0.8174 +vn 0.6133 -0.3221 0.7212 +vn 0.5355 -0.5399 0.6494 +vn 0.7909 -0.6002 -0.1190 +vn 0.6747 -0.1704 0.7181 +vn 0.5529 0.2497 0.7949 +vn 0.8874 -0.0615 0.4568 +vn 0.4849 0.1638 0.8591 +vn 0.8593 0.0111 0.5113 +vn 0.5916 -0.3806 0.7108 +vn 0.6815 0.1620 0.7137 +vn 0.4578 -0.0146 0.8889 +vn 0.7714 -0.2843 0.5693 +vn 0.4622 -0.2150 0.8603 +vn 0.3997 -0.5324 0.7462 +vn 0.9214 0.1154 0.3711 +vn 0.8147 -0.1211 0.5671 +vn 0.9196 0.1306 0.3706 +vn 0.8115 0.2327 0.5360 +vn 0.5670 -0.5027 0.6525 +vn 0.3721 -0.0396 0.9273 +vn 0.8497 0.5240 0.0581 +vn 0.8828 -0.0828 0.4625 +vn -0.9712 -0.2375 0.0203 +vn -0.0795 0.4884 -0.8690 +vn 0.3217 0.6117 0.7227 +vn 0.1152 -0.3701 0.9218 +vn 0.6109 -0.0468 0.7904 +vn 0.8913 -0.0115 0.4532 +vn 0.8089 0.4398 0.3902 +vn -0.0808 0.0395 0.9960 +vn 0.3011 0.3216 0.8977 +vn 0.7533 -0.1267 0.6454 +vn 0.6298 0.1452 0.7631 +vn 0.5980 0.3310 0.7300 +vn 0.3860 0.6172 0.6856 +vn 0.6503 0.0272 -0.7592 +vn 0.8890 -0.3858 -0.2465 +vn 0.7255 0.3630 0.5846 +vn 0.1230 0.2799 0.9521 +vn 0.2939 0.3262 0.8984 +vn 0.2394 0.7067 0.6658 +vn 0.5771 -0.0888 0.8119 +vn 0.4575 -0.8892 0.0115 +vn -0.2280 -0.3874 -0.8933 +vn -0.7338 0.2083 -0.6466 +vn 0.8240 -0.1786 0.5377 +vn 0.1586 -0.5881 -0.7931 +vn 0.4166 -0.3179 0.8517 +vn 0.0642 0.2789 0.9582 +vn 0.5777 -0.4020 0.7104 +vn 0.4806 0.5811 0.6567 +vn 0.8990 0.1859 0.3966 +vn 0.8274 0.4294 0.3620 +vn 0.6565 0.4000 0.6395 +vn 0.7919 -0.0748 0.6060 +vn 0.5919 -0.5205 0.6154 +vn 0.0959 -0.0420 0.9945 +vn 0.3513 0.0100 0.9362 +vn 0.1613 -0.8085 -0.5660 +vn 0.6902 -0.4316 0.5808 +vn 0.6172 0.3316 0.7135 +vn 0.6188 -0.6837 -0.3869 +vn 0.8064 0.0639 0.5880 +vn 0.5021 -0.1932 0.8429 +vn 0.5332 0.1880 0.8249 +vn 0.4855 0.1269 0.8650 +vn 0.9102 -0.0887 0.4045 +vn -0.3813 0.2283 -0.8958 +vn 0.3559 -0.1060 0.9285 +vn 0.3452 0.2880 0.8932 +vn 0.3504 0.2932 0.8895 +vn 0.4616 -0.6617 0.5908 +vn 0.1453 0.8843 0.4438 +vn 0.3837 0.5933 0.7076 +vn 0.7613 0.5887 0.2718 +vn 0.1246 -0.5788 -0.8059 +vn 0.6171 -0.5022 0.6058 +vn 0.8409 -0.2582 0.4756 +vn 0.8206 -0.0675 0.5675 +vn 0.8622 -0.0019 0.5065 +vn 0.7227 -0.2344 0.6502 +vn 0.6559 -0.0940 0.7489 +vn 0.5241 0.4177 0.7422 +vn 0.4643 -0.0837 0.8817 +vn 0.7302 0.5522 -0.4022 +vn 0.3265 0.6282 0.7063 +vn 0.8198 -0.3042 0.4852 +vn 0.6338 -0.2886 0.7176 +vn 0.1924 -0.2809 0.9402 +vn 0.2147 -0.0452 0.9756 +vn 0.4263 0.3485 0.8347 +vn 0.7139 0.3843 0.5854 +vn 0.7947 -0.0773 0.6020 +vn -0.0792 -0.7596 -0.6455 +vn 0.8410 -0.2570 0.4760 +vn -0.5179 0.7437 -0.4228 +vn 0.9014 0.1934 0.3874 +vn 0.9042 0.2426 0.3515 +vn 0.9604 0.2175 -0.1742 +vn 0.3370 0.2495 0.9079 +vn 0.3722 -0.9263 -0.0584 +vn 0.6965 -0.3372 0.6334 +vn -0.6849 0.6567 0.3158 +vn -0.5394 -0.7917 0.2868 +vn 0.8692 0.3513 0.3481 +vn 0.6552 -0.0682 0.7523 +vn 0.4554 -0.0816 0.8865 +vn 0.7722 0.1116 0.6255 +vn -0.2813 0.2396 -0.9292 +vn 0.3128 0.2884 0.9050 +vn 0.2545 -0.0936 0.9625 +vn 0.4670 0.4862 0.7386 +vn 0.3825 0.0623 0.9219 +vn 0.7958 -0.4785 -0.3711 +vn 0.9968 0.0636 0.0487 +vn 0.4697 0.1336 0.8727 +vn 0.6791 -0.7268 -0.1026 +vn 0.8051 0.5521 -0.2170 +vn 0.5786 -0.0636 0.8131 +vn 0.5762 -0.0232 0.8170 +vn 0.4166 -0.8756 0.2444 +vn 0.7813 -0.3365 0.5258 +vn 0.7494 -0.2136 0.6267 +vn 0.4696 -0.6512 0.5962 +vn 0.9450 -0.0351 0.3251 +vn 0.5179 -0.2089 0.8295 +vn 0.5798 -0.4646 0.6693 +vn -0.2259 -0.4715 -0.8524 +vn 0.2371 0.6511 0.7210 +vn 0.6351 -0.7423 0.2137 +vn 0.9339 0.0410 0.3551 +vn 0.9420 -0.0976 0.3210 +vn -0.6604 -0.7232 -0.2022 +vn 0.6230 -0.0598 0.7800 +vn 0.8604 -0.5083 0.0362 +vn 0.3897 -0.5961 0.7020 +vn 0.7028 0.3681 0.6087 +vn 0.5513 -0.3912 0.7369 +vn 0.5593 0.7473 -0.3589 +vn 0.3756 0.5630 0.7362 +vn -0.8362 -0.3402 -0.4302 +vn 0.7213 -0.6856 -0.0985 +vn 0.2258 0.8470 0.4812 +vn 0.2090 0.7545 0.6221 +vn 0.4063 -0.0991 0.9084 +vn 0.8211 -0.2241 0.5250 +vn 0.5928 -0.5074 0.6254 +vn 0.6498 0.5489 0.5258 +vn 0.6070 0.0408 0.7936 +vn 0.5181 -0.2636 0.8137 +vn 0.6686 -0.7262 -0.1596 +vn 0.6052 -0.0366 0.7952 +vn 0.2127 -0.3308 -0.9194 +vn 0.2781 0.3183 0.9063 +vn 0.6754 -0.0428 0.7362 +vn 0.6155 -0.3857 0.6873 +vn 0.5922 -0.2180 0.7758 +vn 0.8682 0.2466 0.4307 +vn 0.8697 0.2700 0.4132 +vn -0.5487 0.7811 0.2980 +vn 0.2713 0.3802 0.8842 +vn 0.3592 -0.9300 -0.0779 +vn 0.0290 0.1260 -0.9916 +vn 0.1627 -0.9538 -0.2524 +vn 0.9828 0.1762 0.0553 +vn -0.4837 0.8360 0.2590 +vn -0.2166 -0.2788 -0.9356 +vn 0.7524 0.1351 0.6447 +vn 0.5000 0.5952 0.6290 +vn 0.5457 0.1940 0.8152 +vn 0.7121 0.2248 0.6651 +vn 0.9989 0.0266 -0.0398 +vn 0.2373 0.0382 0.9707 +vn 0.8055 0.3394 0.4858 +vn 0.1971 -0.0753 0.9775 +vn 0.8548 -0.4988 -0.1430 +vn 0.8920 -0.4281 -0.1454 +vn 0.3120 0.0044 0.9501 +vn 0.3787 0.5031 0.7768 +vn 0.8586 0.4960 0.1296 +vn 0.4741 -0.3327 0.8152 +vn 0.3784 0.2098 0.9015 +vn 0.6270 0.0279 0.7785 +vn 0.7249 -0.1111 0.6799 +vn 0.3549 -0.0560 0.9332 +vn 0.5051 0.0701 0.8602 +vn 0.8959 -0.3344 -0.2924 +vn 0.4023 0.3855 0.8304 +vn 0.9972 -0.0458 -0.0598 +vn 0.8985 0.0490 -0.4362 +vn 0.3112 -0.0179 0.9502 +vn 0.8019 -0.3313 0.4972 +vn 0.1257 0.9253 0.3579 +vn 0.9351 -0.0517 0.3507 +vn 0.7524 -0.4631 0.4685 +vn -0.7891 -0.5890 0.1745 +vn -0.0586 0.8161 0.5749 +vn 0.9402 0.3270 0.0950 +vn 0.6676 -0.5829 0.4632 +vn 0.5958 -0.0032 0.8031 +vn 0.1656 0.1240 0.9784 +vn 0.6242 -0.7258 0.2889 +vn -0.0861 -0.4290 -0.8992 +vn 0.8211 0.3325 0.4640 +vn 0.9160 0.2042 -0.3452 +vn 0.7627 0.0047 0.6467 +vn 0.7214 -0.5139 0.4642 +vn 0.4553 -0.5724 0.6820 +vn 0.2416 -0.3550 0.9031 +vn 0.7582 0.3827 0.5280 +vn 0.3143 -0.0458 0.9482 +vn 0.6788 0.5847 -0.4443 +vn 0.5003 -0.6606 -0.5597 +vn 0.5951 0.1547 0.7886 +vn 0.0847 -0.7767 -0.6241 +vn 0.9621 0.1548 0.2243 +vn 0.7941 -0.1866 0.5784 +vn 0.7069 0.2607 0.6575 +vn 0.6816 -0.0977 0.7252 +vn 0.4838 -0.0141 0.8751 +vn 0.8850 0.0037 0.4656 +vn 0.7310 -0.2566 0.6323 +vn 0.6880 0.0775 0.7216 +vn 0.4839 -0.6847 -0.5450 +vn 0.3203 -0.3856 0.8653 +vn 0.4148 -0.3379 0.8449 +vn 0.6377 -0.4531 0.6229 +vn 0.8730 -0.1931 0.4478 +vn 0.5416 0.0149 0.8405 +vn 0.1997 0.8511 -0.4856 +vn 0.7974 0.0002 0.6034 +vn 0.5682 -0.3992 0.7196 +vn 0.2978 0.3207 0.8991 +vn 0.2064 0.3648 0.9079 +vn 0.9783 0.2072 -0.0096 +vn 0.4140 0.2320 0.8802 +vn 0.7185 -0.3714 0.5881 +vn 0.3081 -0.0823 0.9478 +vn 0.3320 0.2705 0.9037 +vn 0.6261 0.4332 -0.6484 +vn 0.5652 0.0389 0.8241 +vn 0.1841 0.2142 0.9593 +vn 0.6975 -0.2201 0.6819 +vn 0.7771 0.4018 0.4845 +vn 0.5218 0.2060 0.8278 +vn 0.3826 0.1647 0.9091 +vn 0.8348 -0.0397 0.5491 +vn 0.2119 0.3918 0.8953 +vn 0.3237 -0.0330 0.9456 +vn 0.7373 0.0483 0.6738 +vn 0.7773 -0.3484 0.5238 +vn 0.7380 -0.3812 0.5568 +vn 0.2580 -0.0656 0.9639 +vn 0.6720 0.1117 -0.7321 +vn 0.3336 -0.1720 0.9269 +vn 0.4256 -0.0546 0.9033 +vn 0.5535 0.0730 0.8297 +vn 0.7517 -0.0261 0.6590 +vn 0.4720 -0.3806 0.7952 +vn 0.1195 0.8958 0.4280 +vn 0.2484 -0.0896 0.9645 +vn 0.3592 0.0310 0.9327 +vn 0.8274 -0.1035 0.5520 +vn 0.4965 0.3998 0.7705 +vn 0.7389 0.0558 0.6716 +vn 0.8816 0.1335 0.4526 +vn 0.6556 0.2863 0.6987 +vn 0.7391 -0.3954 0.5454 +vn 0.6293 0.3538 0.6920 +vn 0.1328 0.8898 0.4366 +vn 0.3773 0.1834 0.9077 +vn 0.9793 0.1192 0.1635 +vn 0.5930 -0.1548 0.7902 +vn 0.5293 -0.2007 0.8244 +vn 0.2824 0.3030 0.9102 +vn 0.2850 0.6269 0.7251 +vn 0.4346 -0.4528 0.7785 +vn 0.7843 -0.3709 0.4974 +vn -0.6632 0.2747 -0.6962 +vn 0.8366 -0.0832 0.5415 +vn 0.7174 -0.5804 0.3852 +vn 0.4114 -0.1443 0.9000 +vn -0.9855 0.1085 -0.1304 +vn 0.5235 -0.0291 0.8516 +vn -0.2388 0.2462 -0.9393 +vn 0.6015 0.4101 0.6856 +vn 0.3072 0.5817 0.7532 +vn 0.3312 0.2794 0.9013 +vn 0.5557 0.7052 0.4404 +vn 0.7316 0.3746 0.5697 +vn 0.2906 -0.3387 0.8949 +vn 0.7928 0.2963 0.5326 +vn 0.3793 -0.2366 0.8945 +vn 0.9949 0.0850 0.0543 +vn -0.1587 0.7497 -0.6424 +vn 0.6314 -0.4041 0.6618 +vn 0.4060 -0.1835 0.8952 +vn 0.2207 -0.1159 0.9684 +vn 0.7715 -0.6361 -0.0143 +vn 0.6168 -0.5532 0.5599 +vn 0.6222 -0.2986 0.7236 +vn 0.7257 -0.0421 0.6867 +vn 0.3598 0.2041 0.9104 +vn 0.8681 0.0511 -0.4937 +vn 0.4724 -0.2430 0.8473 +vn 0.5796 0.3522 0.7349 +vn 0.5815 -0.0119 0.8135 +vn 0.7113 -0.1298 0.6908 +vn 0.5136 -0.8006 0.3086 +vn 0.6076 -0.2153 0.7645 +vn 0.9343 -0.0556 0.3522 +vn 0.8105 -0.3538 0.4668 +vn 0.7642 -0.3515 -0.5407 +vn 0.5491 -0.0842 0.8315 +vn -0.0632 0.5085 0.8587 +vn -0.0004 0.6773 0.7357 +vn 0.4489 0.3409 0.8260 +vn 0.8724 -0.0044 -0.4888 +vn 0.3012 0.0048 0.9535 +vn 0.5960 -0.1723 0.7843 +vn 0.2820 0.1347 0.9499 +vn 0.9929 0.0906 0.0768 +vn 0.4550 -0.1166 0.8828 +vn 0.4303 -0.0054 0.9026 +vn 0.6988 0.1832 0.6914 +vn 0.9671 0.2007 -0.1561 +vn 0.5260 -0.4202 0.7394 +vn 0.6282 -0.2416 0.7396 +vn 0.5711 0.6787 0.4617 +vn 0.6111 0.2889 0.7369 +vn 0.8160 0.5176 -0.2572 +vn 0.7717 0.3485 0.5320 +vn 0.1640 0.4870 0.8579 +vn 0.3906 -0.1434 0.9093 +vn 0.2543 0.2328 0.9387 +vn 0.2450 0.7506 0.6137 +vn 0.7745 -0.1447 0.6158 +vn 0.6994 0.1638 0.6957 +vn 0.7611 -0.0151 0.6485 +vn 0.7315 -0.3103 0.6072 +vn 0.7024 -0.3810 0.6012 +vn 0.5935 0.1209 0.7957 +vn 0.7669 -0.2699 0.5823 +vn -0.0164 0.4130 -0.9106 +vn 0.7185 0.4070 0.5641 +vn -0.4637 -0.0190 -0.8858 +vn 0.3851 0.1282 0.9139 +vn 0.3819 -0.7045 -0.5982 +vn 0.9313 -0.0747 -0.3565 +vn 0.5814 -0.3358 0.7411 +vn 0.2041 0.7596 0.6176 +vn 0.5539 0.2333 0.7992 +vn 0.6372 -0.2639 0.7241 +vn 0.9201 0.0554 -0.3878 +vn -0.2560 -0.5729 -0.7786 +vn 0.3404 -0.0029 0.9403 +vn 0.7638 0.0362 0.6445 +vn 0.8614 -0.0320 0.5070 +vn 0.4407 0.6269 0.6424 +vn 0.4486 -0.4967 0.7430 +vn 0.5710 -0.6370 0.5180 +vn 0.3904 0.2715 0.8797 +vn 0.6828 -0.4088 0.6055 +vn 0.5944 0.4746 0.6491 +vn 0.8203 -0.1172 0.5598 +vn 0.4196 0.4445 0.7914 +vn 0.4711 0.2349 0.8502 +vn 0.8436 0.1780 0.5066 +vn -0.2428 0.6018 0.7608 +vn 0.2778 0.0244 0.9603 +vn 0.9062 -0.0309 0.4217 +vn 0.5585 -0.0051 0.8295 +vn 0.3589 0.4367 0.8249 +vn 0.5684 0.1504 0.8089 +vn 0.6109 0.1738 0.7724 +vn 0.5541 0.0583 0.8304 +vn 0.7690 -0.2868 0.5713 +vn 0.6237 0.3910 0.6768 +vn -0.7216 0.0808 -0.6876 +vn 0.6284 -0.7540 -0.1912 +vn 0.6567 0.2910 0.6958 +vn 0.4535 0.2309 0.8608 +vn 0.0025 0.8669 0.4985 +vn 0.3854 0.3313 0.8612 +vn 0.5632 0.0999 0.8203 +vn -0.8963 0.1539 -0.4159 +vn 0.7161 -0.1875 0.6723 +vn 0.2747 0.0645 0.9594 +vn -0.0498 0.7848 0.6178 +vn 0.3329 0.4682 0.8185 +vn 0.9474 0.2586 0.1886 +vn 0.9729 0.1554 -0.1710 +vn 0.6749 -0.4169 0.6089 +vn -0.7333 -0.0668 -0.6766 +vn 0.6577 0.4055 0.6348 +vn 0.6280 -0.7379 0.2474 +vn 0.5523 -0.3351 0.7633 +vn 0.4757 -0.4398 0.7618 +vn 0.8146 -0.2789 0.5086 +vn 0.7389 -0.4482 0.5032 +vn 0.9650 0.2202 -0.1422 +vn 0.9400 -0.0701 0.3340 +vn 0.7280 -0.2421 0.6414 +vn 0.3197 -0.6737 0.6663 +vn 0.6295 -0.1660 0.7591 +vn 0.6015 0.1909 0.7757 +vn 0.4672 -0.2163 0.8573 +vn 0.3715 0.1823 0.9104 +vn 0.8620 -0.4869 -0.1409 +vn 0.6213 0.0594 0.7813 +vn 0.6527 -0.4861 0.5812 +vn 0.8767 0.1654 0.4516 +vn 0.8441 0.3009 0.4439 +vn 0.6589 -0.4519 0.6014 +vn 0.2933 -0.2750 0.9156 +vn 0.0928 0.8601 0.5017 +vn 0.4166 0.4135 0.8096 +vn 0.4299 0.3560 0.8297 +vn 0.1976 -0.6375 0.7447 +vn -0.0666 -0.6449 -0.7613 +vn -0.2190 -0.9352 -0.2784 +vn 0.1033 0.1655 0.9808 +vn 0.5525 0.4918 0.6730 +vn 0.0232 0.2243 0.9742 +vn 0.7141 0.0539 0.6980 +vn 0.5818 -0.5568 0.5929 +vn 0.6595 -0.5156 0.5471 +vn -0.0223 -0.9997 0.0073 +vn -0.1518 0.7120 0.6856 +vn -0.1328 0.7620 0.6338 +vn 0.7596 -0.2359 0.6060 +vn 0.7841 -0.3277 0.5271 +vn -0.0111 -0.9997 0.0228 +vn -0.4685 0.7697 0.4337 +vn 0.2899 0.0296 0.9566 +vn -0.7677 -0.6077 -0.2033 +vn 0.1300 0.5790 0.8049 +vn 0.5698 0.1786 0.8022 +vn 0.2856 0.2304 0.9302 +vn 0.1864 0.7955 0.5766 +vn 0.9435 0.2915 -0.1579 +vn 0.5140 0.0145 0.8577 +vn 0.7117 -0.3975 0.5792 +vn 0.9840 -0.0359 -0.1744 +vn 0.6933 -0.3685 0.6193 +vn 0.7255 -0.2223 0.6514 +vn 0.3969 0.2667 0.8783 +vn 0.3697 0.4738 0.7993 +vn 0.5569 0.4127 0.7208 +vn 0.7619 -0.1618 0.6272 +vn -0.8548 -0.4889 -0.1741 +vn 0.7627 0.6101 0.2146 +vn -0.7330 -0.4026 -0.5482 +vn 0.9051 0.4238 -0.0350 +vn -0.0656 -0.4805 0.8745 +vn 0.3284 -0.0580 0.9428 +vn 0.6746 -0.1774 0.7166 +vn 0.4937 -0.5236 0.6943 +vn 0.5930 -0.1576 0.7896 +vn 0.7558 -0.2850 0.5895 +vn 0.5645 -0.0469 0.8241 +vn 0.6218 0.0782 0.7793 +vn 0.7661 -0.2309 0.5998 +vn -0.3911 0.7526 0.5298 +vn 0.3940 0.3886 0.8329 +vn 0.4796 -0.4900 0.7279 +vn 0.4170 -0.2563 0.8720 +vn 0.3847 0.4456 0.8084 +vn 0.7980 -0.3363 0.5001 +vn 0.2343 0.6642 0.7099 +vn 0.6019 0.0749 0.7951 +vn 0.5890 -0.6170 -0.5218 +vn 0.7211 -0.2630 0.6410 +vn 0.3521 0.6021 0.7166 +vn 0.6750 -0.1498 0.7225 +vn 0.3955 0.4225 0.8155 +vn 0.4771 -0.0708 0.8760 +vn 0.7240 -0.1876 0.6638 +vn 0.7580 0.0175 0.6520 +vn 0.2876 0.6706 0.6838 +vn -0.2720 0.5150 -0.8129 +vn 0.4958 -0.3092 0.8115 +vn 0.5535 0.3390 0.7607 +vn 0.6616 0.0825 0.7453 +vn 0.2840 0.0388 0.9580 +vn -0.7529 -0.6170 0.2291 +vn 0.5383 -0.5204 0.6629 +vn 0.6978 0.3727 0.6117 +vn 0.4901 0.3760 0.7864 +vn 0.9237 0.3710 0.0962 +vn -0.8693 -0.3920 0.3011 +vn -0.7119 -0.5916 0.3784 +vn -0.5592 0.8219 0.1082 +vn -0.9019 0.4046 0.1514 +vn 0.9828 -0.1839 -0.0141 +vn 0.9927 -0.0162 -0.1193 +vn 0.5189 -0.8508 0.0830 +vn 0.8347 0.5423 -0.0962 +vn -0.6269 -0.7467 -0.2223 +vn -0.4332 0.8700 -0.2356 +vn -0.9902 -0.1391 -0.0152 +vn -0.5690 -0.8217 0.0321 +vn -0.6233 0.7392 -0.2549 +vn 0.3842 -0.8106 -0.4419 +vn -0.7138 0.0286 0.6997 +vn -0.9719 -0.2320 0.0412 +vn 0.9369 -0.3215 -0.1375 +vn -0.9190 0.3640 -0.1513 +vn 0.9593 0.2821 0.0144 +vn 0.6127 -0.6561 -0.4407 +vn -0.8516 0.4177 0.3166 +vn -0.6756 0.5835 -0.4507 +vn -0.9913 0.0580 0.1184 +vn -0.9359 0.3313 0.1198 +vn -0.3200 0.9068 -0.2743 +vn 0.4294 0.6863 -0.5870 +vn 0.9421 -0.2986 -0.1525 +vn 0.4332 -0.8010 -0.4132 +vn 0.9805 -0.1506 -0.1259 +vn -0.8614 0.4971 0.1043 +vn 0.9780 0.1649 0.1279 +vn 0.9799 -0.1822 -0.0816 +vn 0.8957 -0.3606 -0.2603 +vn 0.7198 -0.3260 -0.6129 +vn -0.3164 0.9221 -0.2229 +vn 0.8034 0.3751 0.4624 +vn -0.9585 -0.0360 0.2827 +vn -0.3876 0.8928 -0.2295 +vn 0.7395 -0.1154 -0.6632 +vn -0.9176 -0.2344 0.3210 +vn -0.9736 0.1484 0.1735 +vn 0.2788 -0.9553 0.0986 +vn 0.8219 -0.4006 0.4050 +vn -0.7984 0.5752 0.1779 +vn 0.5044 0.1256 -0.8543 +vn -0.6185 -0.4690 -0.6304 +vn -0.8808 0.4162 0.2258 +vn -0.7664 -0.0296 -0.6416 +vn -0.7621 -0.0491 -0.6456 +vn 0.8703 -0.4440 -0.2132 +vn -0.9312 0.1461 0.3341 +vn -0.9817 -0.1018 -0.1608 +vn 0.6634 -0.0582 -0.7460 +vn 0.9737 -0.2275 0.0090 +vn 0.9208 0.2686 0.2830 +vn 0.1851 -0.9759 0.1155 +vn -0.1319 -0.5122 0.8487 +vn -0.8740 -0.1298 -0.4683 +vn -0.9940 0.0774 0.0770 +vn -0.9004 0.0891 -0.4258 +vn -0.7889 -0.4533 -0.4149 +vn 0.6581 -0.3448 -0.6693 +vn 0.9593 0.2742 0.0672 +vn 0.9994 -0.0011 0.0336 +vn 0.7386 -0.0419 -0.6729 +vn -0.4976 0.8594 0.1171 +vn 0.9087 0.4143 0.0518 +vn 0.8594 -0.1046 -0.5004 +vn 0.4540 -0.8630 -0.2217 +vn 0.8375 0.5249 0.1515 +vn -0.5462 0.8148 0.1944 +vn 0.4049 -0.7169 -0.5675 +vn 0.9996 -0.0094 0.0259 +vn 0.9449 0.2940 0.1437 +vn 0.9319 0.3286 0.1533 +vn 0.9672 0.1363 0.2142 +vn 0.8092 0.0074 -0.5875 +vn 0.7505 -0.3418 -0.5656 +vn -0.0050 -0.9997 0.0257 +vn 0.7357 -0.1431 -0.6621 +vn 0.9701 -0.2168 -0.1090 +vn 0.9202 0.2543 0.2975 +vn -0.3813 -0.0869 -0.9204 +vn -0.8576 -0.5100 0.0661 +vn -0.7450 0.2329 -0.6251 +vn -0.9312 0.2142 -0.2949 +vn 0.8974 0.0061 -0.4412 +vn 0.7827 -0.5385 0.3122 +vn -0.3061 0.6971 0.6483 +vn 0.9624 -0.2440 -0.1191 +vn 0.0107 -0.9997 -0.0212 +vn 0.8236 0.0076 -0.5671 +vn 0.7650 0.1290 -0.6310 +vn -0.5412 0.8079 0.2331 +vn 0.6981 -0.0610 -0.7134 +vn 0.8176 -0.0052 -0.5758 +vn 0.6329 -0.6262 -0.4553 +vn 0.7679 0.1901 -0.6117 +vn -0.8445 -0.5041 -0.1808 +vn -0.9383 0.3369 -0.0783 +vn 0.9984 -0.0106 0.0559 +vn 0.1158 0.1028 -0.9879 +vn 0.9811 -0.1537 -0.1177 +vn 0.9908 -0.0301 -0.1318 +vn -0.6642 0.3027 -0.6835 +vn -0.3085 0.7007 -0.6433 +vn -0.4035 -0.5934 -0.6965 +vn 0.0372 -0.7235 -0.6893 +vn -0.9457 -0.1953 -0.2600 +vn -0.8875 0.2255 -0.4018 +vn 0.9242 0.3538 -0.1434 +vn -0.7861 0.6119 0.0879 +vn -0.9437 0.3068 -0.1235 +vn -0.0627 -0.4526 -0.8895 +vn -0.6427 -0.4706 -0.6045 +vn 0.8285 -0.1864 -0.5280 +vn 0.6967 -0.2916 -0.6555 +vn -0.5020 0.8574 -0.1137 +vn 0.1107 0.6530 -0.7492 +vn -0.3329 0.9193 0.2097 +vn -0.7954 -0.5857 -0.1561 +vn -0.9645 -0.2187 -0.1484 +vn -0.1396 -0.3285 -0.9341 +vn -0.9233 -0.0992 -0.3710 +vn -0.8683 0.0189 -0.4956 +vn -0.8262 -0.1115 -0.5522 +vn -0.8625 0.4349 -0.2586 +vn -0.0594 -0.3725 -0.9261 +vn 0.9997 0.0011 0.0252 +vn 0.6612 -0.7305 -0.1709 +vn -0.2315 0.2151 -0.9488 +vn -0.5634 0.8217 -0.0862 +vn 0.0295 0.2387 -0.9706 +vn -0.8794 0.4666 -0.0952 +vn 0.1178 0.7389 -0.6634 +vn 0.7325 0.1659 -0.6602 +vn -0.8975 0.1449 -0.4165 +vn -0.8917 0.3938 -0.2229 +vn -0.6688 -0.6727 -0.3165 +vn -0.8361 -0.4462 -0.3191 +vn 0.8306 -0.2005 -0.5196 +vn -0.8595 0.4948 -0.1278 +vn -0.8704 -0.3863 0.3052 +vn -0.1957 -0.3796 -0.9042 +vn -0.6824 -0.6854 0.2543 +vn -0.7043 -0.3168 -0.6353 +vn 0.7007 0.6120 -0.3667 +vn 0.6078 -0.7626 -0.2215 +vn 0.0752 -0.8141 -0.5758 +vn 0.9125 -0.0368 0.4074 +vn 0.8921 -0.3702 -0.2591 +vn 0.5224 -0.2605 -0.8119 +vn 0.9894 0.0338 0.1415 +vn -0.9170 -0.3459 0.1987 +vn 0.7732 -0.3142 -0.5509 +vn -0.7712 -0.3732 -0.5157 +vn 0.8805 -0.3357 -0.3348 +vn -0.9224 -0.3065 -0.2350 +vn 0.5808 -0.2333 -0.7799 +vn 0.7615 -0.1381 -0.6333 +vn 0.8864 -0.3695 0.2788 +vn 0.9421 -0.3327 0.0416 +vn 0.8058 0.2824 0.5206 +vn 0.8906 -0.4547 -0.0073 +vn 0.7400 -0.1514 -0.6553 +vn 0.7853 -0.5216 -0.3335 +vn -0.8144 -0.5637 -0.1378 +vn 0.5594 0.5663 0.6053 +vn -0.9408 -0.3168 0.1203 +vn 0.8143 -0.4573 -0.3574 +vn -0.8493 0.5092 -0.1394 +vn 0.4587 -0.8171 -0.3493 +vn -0.9694 0.1067 0.2212 +vn 0.9989 -0.0361 0.0294 +vn -0.3540 0.8373 -0.4165 +vn 0.9710 -0.2389 0.0016 +vn 0.9672 -0.2295 -0.1090 +vn -0.9358 0.1858 -0.2996 +vn 0.6060 -0.7121 -0.3545 +vn -0.9076 0.2539 -0.3343 +vn 0.7617 -0.4397 -0.4759 +vn 0.8548 -0.4757 -0.2075 +vn 0.8405 -0.4975 -0.2147 +vn 0.9186 0.2445 0.3103 +vn -0.9433 -0.2167 0.2514 +vn 0.6090 0.1695 -0.7749 +vn 0.5770 -0.7519 0.3189 +vn -0.5886 -0.6878 -0.4248 +vn -0.8344 0.2474 -0.4925 +vn -0.8051 -0.0456 -0.5914 +vn 0.8857 -0.3117 -0.3440 +vn -0.9676 0.2291 -0.1060 +vn 0.8215 -0.2944 -0.4883 +vn -0.9266 0.3109 -0.2117 +vn -0.9665 -0.1515 0.2071 +vn -0.8950 0.1807 0.4077 +vn 0.9380 -0.3423 0.0554 +vn 0.5251 0.2740 -0.8057 +vn 0.6182 -0.5020 -0.6048 +vn 0.7845 -0.5795 -0.2209 +vn 0.6672 -0.7011 -0.2517 +vn -0.7654 -0.5448 -0.3425 +vn 0.7250 0.0647 -0.6857 +vn 0.6486 -0.6096 -0.4557 +vn -0.9225 0.0995 -0.3730 +vn 0.7078 -0.5175 -0.4809 +vn 0.7972 -0.5663 -0.2094 +vn 0.7866 -0.5782 -0.2165 +vn 0.7950 -0.5111 -0.3266 +vn 0.4032 -0.9147 -0.0279 +vn 0.9960 -0.0882 0.0113 +vn 0.9106 0.3867 0.1461 +vn 0.9900 0.1383 -0.0290 +vn 0.6332 -0.7209 -0.2816 +vn 0.4236 0.6474 -0.6336 +vn 0.7805 -0.2057 -0.5904 +vn 0.6881 -0.3861 -0.6144 +vn 0.4437 0.3621 -0.8197 +vn 0.7485 -0.5915 0.2997 +vn 0.8456 -0.5016 -0.1827 +vn 0.8631 -0.4798 -0.1574 +vn -0.7908 0.5820 -0.1895 +vn -0.3058 0.9500 0.0625 +vn 0.5467 -0.8024 -0.2394 +vn -0.7748 -0.6195 -0.1261 +vn 0.9236 -0.3820 -0.0318 +vn 0.7509 -0.6387 0.1680 +vn 0.9676 0.2524 -0.0014 +vn -0.2005 -0.7632 0.6142 +vn 0.9052 -0.4089 -0.1161 +vn 0.0997 -0.8607 -0.4992 +vn 0.6102 0.4816 -0.6290 +vn -0.7157 0.5354 -0.4484 +vn -0.8290 -0.1901 -0.5259 +vn 0.3231 0.3440 -0.8816 +vn 0.9107 -0.3937 -0.1251 +vn 0.8785 0.1109 -0.4648 +vn 0.7026 -0.5160 -0.4900 +vn 0.4855 -0.8070 0.3363 +vn -0.5734 -0.4309 0.6968 +vn 0.4253 -0.4518 -0.7842 +vn -0.1562 -0.0403 -0.9869 +vn 0.0360 -0.8971 -0.4404 +vn -0.8855 -0.4106 -0.2176 +vn 0.9904 -0.0412 0.1319 +vn -0.0549 -0.9951 -0.0823 +vn 0.9660 0.1770 -0.1884 +vn 0.2659 0.3187 0.9098 +vn -0.1934 0.6201 -0.7603 +vn 0.9732 0.2013 0.1109 +vn 0.2614 0.5744 0.7757 +vn -0.7994 -0.5826 -0.1466 +vn 0.8763 -0.2005 -0.4381 +vn -0.6761 0.7210 -0.1520 +vn 0.8874 -0.1638 -0.4310 +vn 0.8010 0.1490 -0.5798 +vn 0.8135 -0.1009 -0.5728 +vn 0.8357 -0.1644 -0.5239 +vn 0.6932 -0.6599 0.2898 +vn 0.7121 0.1135 -0.6929 +vn 0.9867 0.1379 0.0866 +vn -0.9435 -0.3116 -0.1132 +vn -0.5353 -0.8080 -0.2461 +vn 0.9501 -0.2742 -0.1484 +vn 0.9907 -0.1180 -0.0674 +vn 0.9939 0.0056 0.1105 +vn -0.8489 -0.5124 -0.1297 +vn 0.8417 0.4795 0.2482 +vn -0.9191 0.2360 -0.3156 +vn 0.8852 -0.3123 -0.3449 +vn -0.7767 0.5484 0.3099 +vn 0.9944 -0.0639 -0.0836 +vn 0.0937 -0.9041 -0.4168 +vn 0.6664 -0.1627 -0.7276 +vn 0.8252 -0.1842 -0.5340 +vn 0.0293 -0.9979 0.0582 +vn 0.4488 -0.8536 -0.2644 +vn 0.1140 0.1424 -0.9832 +vn 0.8011 0.0023 -0.5986 +vn -0.2705 0.2439 -0.9313 +vn 0.9946 0.0946 0.0423 +vn 0.9990 0.0020 0.0447 +vn 0.9501 0.2465 0.1912 +vn 0.7341 -0.1466 -0.6631 +vn 0.7768 -0.1572 -0.6098 +vn 0.6839 -0.4959 0.5352 +vn 0.5427 -0.2879 0.7891 +vn -0.3681 -0.9075 0.2025 +vn -0.2857 -0.8969 0.3376 +vn 0.0139 -0.9992 0.0388 +vn -0.1771 -0.9395 -0.2933 +vn 0.8602 -0.0331 -0.5089 +vn 0.8492 -0.5038 -0.1583 +vn -0.9469 -0.1339 0.2923 +vn 0.7755 -0.5866 -0.2334 +vn 0.7983 -0.5487 -0.2484 +vn 0.0667 -0.8336 -0.5483 +vn 0.1804 -0.9385 -0.2944 +vn 0.7828 -0.5761 -0.2351 +vn 0.9773 0.1264 0.1700 +vn 0.8915 -0.0364 -0.4515 +vn -0.6873 0.4404 -0.5776 +vn 0.9117 -0.1644 -0.3766 +vn 0.0095 -0.9997 -0.0230 +vn 0.6763 -0.5600 -0.4786 +vn 0.7814 -0.1390 -0.6083 +vn 0.8512 -0.5053 -0.1420 +vn -0.5183 0.6375 -0.5700 +vn -0.4472 0.8593 0.2482 +vn -0.9107 -0.3372 -0.2384 +vn -0.4860 0.8020 -0.3472 +vn -0.6614 0.6592 -0.3577 +vn 0.8025 -0.4265 -0.4172 +vn 0.6223 -0.1005 -0.7763 +vn -0.4481 -0.8125 -0.3728 +vn -0.9166 0.3613 -0.1713 +vn 0.6318 -0.7442 0.2166 +vn 0.6687 -0.5990 -0.4404 +vn -0.6868 -0.4113 -0.5992 +vn 0.9091 -0.2343 -0.3445 +vn -0.6072 0.4165 -0.6766 +vn 0.5066 0.3424 -0.7913 +vn 0.3908 -0.0658 -0.9181 +vn 0.9592 -0.2812 -0.0287 +vn -0.9594 0.1404 -0.2445 +vn -0.6301 -0.7688 -0.1087 +vn 0.5531 -0.4499 -0.7012 +vn 0.6000 -0.6761 -0.4276 +vn 0.8861 -0.0323 -0.4623 +vn 0.8495 -0.2903 -0.4406 +vn 0.8549 -0.4952 -0.1547 +vn -0.9934 0.0261 -0.1115 +vn -0.6959 0.7070 -0.1260 +vn -0.7128 0.3254 -0.6213 +vn 0.8736 -0.3431 -0.3451 +vn -0.9835 0.0650 -0.1691 +vn 0.6946 0.0345 -0.7186 +vn 0.9996 -0.0275 0.0110 +vn 0.9731 0.2020 0.1110 +vn -0.9949 0.0959 0.0319 +vn -0.8238 0.2640 -0.5016 +vn 0.8154 0.1611 -0.5560 +vn 0.7513 -0.3760 -0.5424 +vn -0.8794 -0.2104 -0.4271 +vn 0.5820 -0.4658 -0.6666 +vn -0.5878 0.8016 0.1095 +vn -0.2125 0.6426 -0.7361 +vn 0.5129 -0.7466 -0.4238 +vn 0.6061 -0.7619 -0.2282 +vn 0.8090 -0.4781 -0.3419 +vn 0.4143 -0.7400 -0.5298 +vn 0.9733 0.2295 0.0064 +vn 0.9377 0.0083 -0.3475 +vn 0.8646 0.0029 -0.5024 +vn 0.6776 -0.2733 -0.6828 +vn 0.1920 -0.8336 -0.5179 +vn 0.1035 -0.9805 0.1672 +vn -0.9945 0.0390 -0.0972 +vn -0.9329 -0.1792 -0.3124 +vn -0.9638 -0.0277 -0.2651 +vn 0.7882 -0.3730 0.4895 +vn 0.5853 -0.6122 0.5316 +vn 0.9343 0.1434 0.3263 +vn 0.9981 -0.0602 0.0126 +vn 0.6664 -0.4905 -0.5615 +vn -0.9085 0.3383 0.2452 +vn 0.5842 -0.1914 -0.7887 +vn 0.7106 -0.5942 -0.3768 +vn 0.5306 -0.4086 0.7426 +vn -0.1513 0.9828 -0.1056 +vn 0.2461 0.4109 0.8778 +vn 0.8956 0.2604 0.3606 +vn -0.1459 -0.3982 -0.9056 +vn 0.5050 -0.8243 -0.2560 +vn -0.9779 0.2088 -0.0101 +vn 0.5982 0.0552 -0.7995 +vn 0.9929 0.1039 0.0588 +vn 0.4607 -0.7582 -0.4614 +vn 0.5305 -0.5978 0.6010 +vn -0.8839 -0.3739 0.2809 +vn 0.0369 0.5831 -0.8116 +vn -0.0583 0.3934 -0.9175 +vn 0.6135 -0.1276 -0.7793 +vn 0.1261 -0.7814 -0.6111 +vn 0.7712 -0.5212 -0.3656 +vn 0.5134 -0.8158 0.2661 +vn 0.3660 0.3385 0.8669 +vn 0.8588 0.3566 0.3679 +vn -0.3233 -0.3482 -0.8799 +vn 0.6379 -0.5249 0.5635 +vn 0.6906 -0.5695 -0.4458 +vn -0.0944 -0.7363 -0.6701 +vn 0.9363 0.2208 0.2729 +vn 0.9628 0.1548 0.2215 +vn 0.9409 -0.0959 0.3249 +vn 0.2200 0.5646 -0.7955 +vn 0.8825 -0.3365 -0.3287 +vn 0.8472 -0.1884 -0.4967 +vn 0.7366 -0.1393 -0.6618 +vn 0.8033 0.1065 -0.5859 +vn 0.7477 -0.5078 -0.4279 +vn 0.8880 -0.1656 -0.4290 +vn 0.9254 0.1318 0.3554 +vn 0.4272 -0.8956 -0.1239 +vn 0.4717 -0.6516 0.5940 +vn 0.6677 -0.7430 -0.0461 +vn 0.1082 -0.7901 -0.6034 +vn 0.5348 -0.7755 0.3355 +vn 0.4960 -0.7270 -0.4749 +vn 0.9494 0.1842 0.2544 +vn 0.7590 -0.0996 -0.6434 +vn 0.1230 -0.1352 -0.9832 +vn 0.7215 -0.1998 -0.6629 +vn 0.4986 -0.8613 -0.0972 +vn 0.9428 0.2189 0.2516 +vn 0.8866 0.3468 0.3061 +vn 0.4153 0.8909 -0.1837 +vn 0.9296 0.3250 0.1739 +vn 0.0259 -0.7077 -0.7060 +vn -0.1529 -0.9723 0.1766 +vn 0.9473 -0.3139 -0.0645 +vn 0.9794 0.1452 0.1404 +vn 0.9461 -0.2022 -0.2530 +vn -0.3782 0.7540 0.5370 +vn 0.9926 -0.0718 0.0980 +vn 0.1013 -0.6481 0.7548 +vn 0.7650 -0.4437 -0.4668 +vn 0.5656 -0.8058 -0.1752 +vn 0.9753 0.1471 0.1648 +vn 0.7390 -0.6590 -0.1402 +vn 0.9491 0.0262 0.3139 +vn 0.9067 0.3493 0.2364 +vn 0.9198 0.2903 -0.2639 +vn 0.8378 0.4321 0.3339 +vn 0.9623 -0.0793 0.2600 +vn 0.8207 -0.2852 -0.4951 +vn 0.8603 -0.0790 -0.5036 +vn 0.9451 0.0088 0.3267 +vn -0.9750 -0.2203 0.0291 +vn 0.9766 0.1145 0.1820 +vn 0.8789 0.2752 -0.3897 +vn 0.1796 -0.9549 -0.2363 +vn 0.9653 0.2546 0.0586 +vn 0.9429 0.0563 0.3282 +vn 0.3859 0.6309 -0.6731 +vn 0.6746 -0.5325 0.5112 +vn 0.8758 -0.3838 0.2928 +vn 0.9157 0.0026 0.4018 +vn 0.6298 -0.5483 -0.5502 +vn 0.1456 -0.6514 -0.7446 +vn -0.1861 -0.3727 -0.9091 +vn 0.2902 -0.4286 0.8556 +vn 0.9783 0.1034 0.1794 +vn 0.9694 0.2051 0.1346 +vn 0.9830 0.1704 0.0677 +vn 0.7843 -0.5616 0.2637 +vn 0.8534 -0.4836 0.1946 +vn 0.9701 -0.0624 0.2345 +vn 0.1719 -0.8017 -0.5724 +vn 0.8338 -0.1774 -0.5228 +vn 0.9827 0.1467 0.1133 +vn 0.8996 0.4013 0.1720 +vn 0.9048 0.3947 0.1598 +vn 0.9373 0.3279 0.1184 +vn -0.2536 0.8281 -0.5000 +vn 0.6817 -0.5378 -0.4960 +vn 0.9792 0.1985 0.0415 +vn 0.8616 0.4326 0.2656 +vn 0.9776 0.1374 0.1596 +vn 0.9794 -0.0735 0.1880 +vn 0.9547 -0.1682 0.2454 +vn 0.9694 -0.2174 0.1141 +vn 0.9831 0.1436 0.1137 +vn 0.9519 0.2868 0.1080 +vn 0.9554 0.2836 0.0822 +vn 0.6817 -0.7298 0.0523 +vn 0.9967 -0.0608 0.0533 +vn 0.9111 0.4078 0.0603 +vn 0.9217 0.1070 0.3729 +vn 0.4905 -0.7889 -0.3702 +vn 0.8623 0.3539 0.3622 +vn 0.8348 0.4104 0.3670 +vn 0.9243 0.3137 0.2174 +vn 0.7974 0.5346 -0.2799 +vn 0.6410 -0.7561 0.1320 +vn 0.6335 -0.7609 0.1402 +vn 0.9365 -0.3085 0.1666 +vn 0.9659 -0.0690 0.2496 +vn 0.8727 0.4011 0.2786 +vn 0.9109 0.4042 -0.0832 +vn -0.9802 -0.1393 0.1405 +vn -0.3528 0.8100 0.4685 +vn -0.2115 0.9714 -0.1081 +vn -0.6294 -0.4174 -0.6555 +vn -0.1084 0.1008 -0.9890 +vn 0.9565 0.2482 0.1536 +vn 0.3325 0.1687 0.9279 +vn -0.9842 0.1232 0.1275 +vn 0.9780 0.0973 -0.1845 +vn 0.9770 -0.0797 0.1976 +vn 0.8365 -0.5443 0.0638 +vn -0.6223 0.7651 0.1657 +vn 0.0077 1.0000 0.0017 +vn -0.0645 0.9946 0.0811 +vn -0.2087 0.9717 -0.1108 +vn 0.8338 0.4571 0.3095 +vn 0.4655 0.7120 0.5258 +vn 0.7415 0.5614 0.3673 +vn -0.3684 0.9113 0.1840 +vn 0.2669 0.9563 0.1197 +vn 0.2656 0.8208 0.5057 +vn 0.8127 0.4249 0.3987 +vn 0.2269 0.9707 0.0793 +vn -0.3791 -0.8766 -0.2964 +vn -0.8381 -0.5437 -0.0458 +vn -0.3897 0.8602 0.3290 +vn -0.8064 -0.5643 0.1768 +vn -0.9667 0.1887 0.1730 +vn -0.1206 -0.7272 -0.6758 +vn 0.8272 0.5499 -0.1155 +vn 0.3868 0.3324 0.8602 +vn 0.5171 0.6944 0.5004 +vn 0.9757 -0.1777 -0.1285 +vn 0.0769 -0.2942 0.9527 +vn 0.8526 0.3619 0.3769 +vn -0.5989 0.6019 0.5282 +vn 0.6757 0.7372 0.0021 +vn 0.5770 0.7439 0.3371 +vn 0.3766 0.7496 0.5443 +vn 0.4847 0.8735 -0.0452 +vn -0.8109 0.0855 0.5789 +vn 0.4851 0.8733 -0.0449 +vn 0.4358 0.8690 0.2344 +vn 0.0923 0.8956 0.4351 +vn -0.1347 0.9245 0.3565 +vn -0.1625 0.9195 0.3580 +vn 0.4852 0.8024 -0.3473 +vn 0.1167 0.9676 0.2241 +vn -0.0295 0.8672 0.4972 +vn -0.2603 0.8340 0.4866 +vn 0.8263 0.5614 0.0441 +vn 0.1824 0.9821 -0.0471 +vn 0.0917 0.9757 0.1988 +vn 0.0660 0.9916 -0.1108 +vn -0.2296 0.8672 0.4419 +vn -0.0869 0.8431 0.5306 +vn -0.2740 0.8058 0.5249 +vn 0.0298 0.6701 0.7417 +vn -0.4799 0.8610 -0.1688 +vn -0.6489 -0.0550 0.7589 +vn -0.0342 0.9921 -0.1208 +vn -0.1036 0.9830 0.1518 +vn -0.2917 0.8901 0.3502 +vn 0.7899 0.3596 0.4968 +vn 0.8804 0.4696 0.0660 +vn -0.8931 0.3818 -0.2377 +vn -0.2660 0.9383 0.2212 +vn 0.4602 0.7518 0.4722 +vn 0.4228 0.5863 0.6910 +vn -0.3392 0.8677 0.3635 +vn -0.3581 0.9331 -0.0338 +vn -0.4245 0.9054 -0.0008 +vn 0.0842 0.9962 -0.0223 +vn 0.6509 0.6685 0.3598 +vn 0.7192 0.4394 0.5382 +vn 0.8163 0.5231 0.2450 +vn 0.9401 0.0900 0.3289 +vn -0.1065 0.9701 -0.2183 +vn -0.3312 0.7472 0.5761 +vn -0.1160 0.8782 0.4640 +vn -0.2925 0.9529 0.0804 +vn -0.5975 0.7152 -0.3626 +vn -0.9761 0.1423 -0.1645 +vn 0.0674 0.9977 -0.0093 +vn -0.0325 0.7298 0.6828 +vn 0.2663 0.9636 0.0242 +vn 0.7235 0.6842 0.0919 +vn -0.7733 0.5731 -0.2712 +vn -0.8238 -0.5668 -0.0086 +vn -0.1205 0.9571 -0.2636 +vn 0.6581 0.7459 -0.1031 +vn 0.8991 0.4050 0.1659 +vn 0.8703 0.4060 0.2789 +vn 0.7954 0.5799 -0.1762 +vn 0.8690 0.3686 0.3301 +vn 0.3456 0.9310 -0.1178 +vn 0.3731 -0.8487 -0.3749 +vn -0.9892 0.1427 0.0319 +vn 0.9877 0.1440 0.0604 +vn -0.0772 0.9780 -0.1936 +vn 0.7399 0.5211 0.4254 +vn 0.7056 0.6480 0.2867 +vn 0.9670 0.2535 -0.0256 +vn -0.9976 0.0490 -0.0494 +vn 0.7062 0.6052 0.3674 +vn -0.6107 -0.7728 0.1726 +vn 0.5935 0.6913 0.4121 +vn -0.0384 -0.4831 0.8747 +vn 0.1216 0.9575 0.2614 +vn -0.1185 0.9926 0.0283 +vn 0.0266 0.9960 -0.0859 +vn 0.9735 0.2185 -0.0670 +vn 0.8533 0.5205 -0.0316 +vn 0.0964 0.7226 0.6845 +vn 0.1991 0.9765 0.0827 +vn 0.3843 0.7511 0.5368 +vn 0.7057 0.6357 -0.3127 +vn 0.8519 0.4654 0.2403 +vn 0.1708 0.9853 0.0062 +vn 0.1034 -0.9260 -0.3630 +vn -0.3051 0.8045 0.5096 +vn -0.6971 0.6957 0.1733 +vn 0.2469 0.9548 -0.1653 +vn 0.4932 0.8169 0.2990 +vn 0.3438 0.9365 -0.0697 +vn -0.9592 -0.0690 -0.2741 +vn 0.1871 0.9673 0.1714 +vn -0.3911 0.3955 -0.8311 +vn -0.6635 0.3122 -0.6800 +vn -0.1926 -0.7832 -0.5912 +vn -0.9916 -0.1087 -0.0699 +vn 0.2914 0.9530 -0.0828 +vn 0.3834 0.9031 -0.1934 +vn 0.1566 0.9394 0.3049 +vn 0.7418 0.5161 0.4282 +vn 0.8468 0.4631 0.2615 +vn 0.4142 0.8733 -0.2566 +vn -0.7491 0.5640 0.3477 +vn 0.0111 0.8545 0.5193 +vn 0.2133 0.9189 0.3319 +vn 0.2631 0.8798 0.3958 +vn 0.3287 0.8775 0.3492 +vn 0.3541 0.9343 -0.0414 +vn 0.4819 0.8317 0.2757 +vn -0.1508 0.9885 0.0088 +vn -0.8844 -0.3349 0.3252 +vn -0.2199 0.7161 0.6625 +vn -0.0654 0.8369 0.5435 +vn -0.8897 -0.4549 0.0400 +vn 0.1851 0.9736 0.1332 +vn 0.4643 0.8842 0.0516 +vn 0.4014 0.5261 0.7498 +vn -0.0017 0.9693 0.2460 +vn 0.9515 0.2872 0.1099 +vn 0.2006 0.8481 0.4904 +vn -0.0056 0.9312 0.3644 +vn -0.9863 0.1632 0.0257 +vn -0.3939 0.8228 0.4097 +vn -0.1300 0.8394 0.5278 +vn 0.1752 -0.8318 -0.5267 +vn -0.3497 0.8988 -0.2644 +vn -0.3410 0.9139 -0.2201 +vn 0.8659 0.4644 0.1859 +vn 0.0340 0.7499 0.6606 +vn 0.9136 0.3939 0.1011 +vn -0.8031 0.5641 0.1921 +vn -0.3019 0.9429 -0.1409 +vn -0.3441 0.9151 -0.2100 +vn 0.6264 0.6580 0.4179 +vn -0.1755 0.6113 0.7717 +vn -0.4924 0.8517 0.1793 +vn -0.1634 0.8334 0.5280 +vn 0.7225 0.6883 0.0655 +vn -0.9685 0.0957 0.2300 +vn 0.8432 0.4700 0.2611 +vn -0.1720 0.9716 0.1624 +vn -0.0030 0.9644 0.2643 +vn -0.1747 0.9844 -0.0206 +vn 0.8527 0.5126 0.1005 +vn 0.2248 0.9733 0.0471 +vn -0.9417 0.2435 0.2323 +vn -0.1527 0.8822 0.4453 +vn -0.3243 0.8340 0.4464 +vn -0.4833 0.7830 0.3916 +vn 0.0381 0.9002 0.4338 +vn -0.2011 0.8108 0.5497 +vn -0.4257 0.8071 0.4092 +vn -0.3512 0.7743 0.5264 +vn 0.2055 0.7410 0.6392 +vn 0.2000 0.9671 0.1572 +vn 0.9119 -0.2338 -0.3373 +vn -0.0170 0.8562 0.5164 +vn -0.4521 0.8606 0.2344 +vn 0.6117 0.7381 0.2846 +vn 0.1357 0.9908 0.0018 +vn 0.0698 0.9299 0.3612 +vn 0.8020 0.5746 -0.1634 +vn -0.5312 0.1908 -0.8255 +vn 0.5546 -0.7987 -0.2336 +vn 0.3696 0.8931 0.2565 +vn 0.1273 0.6848 0.7176 +vn -0.0073 0.9998 -0.0188 +vn -0.0848 0.9902 0.1106 +vn 0.1497 0.9766 0.1546 +vn 0.8201 0.4595 0.3411 +vn 0.1476 0.9884 0.0348 +vn 0.3635 0.9311 -0.0311 +vn 0.1831 0.9739 -0.1341 +vn 0.3782 0.9032 -0.2030 +vn -0.6283 0.2550 -0.7349 +vn 0.0309 0.9995 0.0049 +vn 0.1155 0.9821 0.1486 +vn 0.1398 0.8729 0.4673 +vn 0.0513 0.9756 0.2135 +vn -0.5742 0.8187 -0.0058 +vn 0.7370 0.5625 0.3746 +vn 0.3250 0.9174 0.2298 +vn 0.1699 0.9438 0.2834 +vn 0.6316 0.5012 0.5915 +vn 0.9968 0.0696 0.0392 +vn -0.5484 0.7242 0.4182 +vn 0.6618 0.6505 0.3727 +vn -0.8990 -0.3802 0.2175 +vn 0.2036 0.9753 0.0860 +vn 0.3557 0.9106 0.2103 +vn 0.7943 -0.1443 0.5902 +vn 0.8213 0.0765 0.5654 +vn -0.4436 0.8556 -0.2667 +vn 0.2317 0.9212 0.3126 +vn 0.1218 0.8671 0.4831 +vn 0.2385 0.9671 -0.0886 +vn -0.9358 -0.0528 0.3485 +vn -0.9159 -0.3967 -0.0610 +vn -0.9656 -0.0576 0.2537 +vn 0.8186 0.4973 0.2873 +vn -0.3497 0.8729 0.3403 +vn -0.1457 0.8380 0.5259 +vn 0.9613 -0.2494 -0.1168 +vn 0.2005 0.9022 0.3819 +vn -0.0038 0.9412 0.3379 +vn -0.2076 0.1142 -0.9715 +vn 0.8415 0.3777 0.3863 +vn -0.3287 0.8427 0.4263 +vn 0.6102 0.6450 0.4601 +vn -0.8634 -0.1576 -0.4792 +vn -0.3172 -0.9118 -0.2609 +vn 0.0270 0.9981 -0.0561 +vn -0.6831 0.6348 0.3612 +vn 0.3177 0.9355 -0.1548 +vn 0.4836 0.8462 -0.2239 +vn -0.3298 0.8287 0.4522 +vn 0.5679 -0.1869 -0.8016 +vn -0.0611 0.9087 0.4129 +vn 0.4655 -0.8846 -0.0285 +vn 0.8318 0.1717 0.5278 +vn 0.1642 0.8303 0.5326 +vn 0.2061 0.6866 0.6972 +vn 0.8539 0.5101 0.1034 +vn 0.8153 0.5046 0.2842 +vn 0.1583 0.9827 -0.0966 +vn -0.2696 0.7951 0.5433 +vn 0.1504 0.7565 0.6365 +vn 0.0049 0.9648 0.2629 +vn -0.3870 0.8878 0.2491 +vn -0.3211 0.9343 0.1551 +vn 0.3285 0.8362 0.4391 +vn 0.2832 0.1185 0.9517 +vn -0.2150 0.8665 0.4505 +vn 0.4051 0.1034 0.9084 +vn 0.4375 -0.8654 -0.2442 +vn 0.6474 0.7416 0.1758 +vn 0.4237 0.8204 0.3840 +vn 0.8213 0.5617 -0.1000 +vn 0.4267 0.8832 -0.1947 +vn -0.0678 0.9943 0.0824 +vn -0.9810 0.0554 -0.1859 +vn -0.4569 0.7894 0.4100 +vn -0.1003 0.9823 0.1582 +vn 0.0538 0.9986 -0.0010 +vn -0.4057 0.7901 0.4594 +vn 0.0577 0.9983 -0.0047 +vn -0.7481 0.5872 0.3092 +vn -0.8017 0.5231 0.2893 +vn 0.8559 0.1951 0.4789 +vn 0.8153 0.5649 0.1274 +vn 0.8280 0.5517 0.1005 +vn -0.5883 0.7617 -0.2715 +vn -0.4030 0.8524 -0.3331 +vn -0.0285 0.9936 -0.1091 +vn 0.7311 0.5644 0.3834 +vn 0.7056 0.5567 0.4384 +vn -0.2475 0.8991 0.3612 +vn 0.8989 0.2424 0.3649 +vn 0.9208 0.2080 0.3301 +vn 0.8722 0.3580 0.3335 +vn 0.8001 0.5751 -0.1708 +vn 0.0578 0.9983 -0.0100 +vn 0.5230 0.7312 0.4378 +vn 0.0105 0.9952 -0.0973 +vn 0.1348 0.9444 0.2998 +vn -0.4560 0.8885 -0.0506 +vn -0.1246 0.9462 0.2988 +vn 0.4609 0.8768 0.1375 +vn -0.8839 -0.4122 0.2208 +vn -0.9942 0.1020 -0.0352 +vn -0.2395 0.9292 0.2815 +vn -0.4474 0.8930 0.0486 +vn 0.3818 0.8412 0.3829 +vn 0.2789 0.5613 0.7792 +vn 0.6223 0.6082 0.4928 +vn 0.6771 0.6851 0.2687 +vn 0.6538 0.3933 0.6465 +vn -0.4528 0.8818 -0.1319 +vn -0.0398 0.9711 -0.2354 +vn -0.1593 0.8583 0.4878 +vn 0.8773 0.3747 0.2999 +vn -0.0314 0.9894 -0.1421 +vn -0.4313 0.9020 0.0202 +vn 0.0593 0.9093 0.4120 +vn -0.0160 0.8578 0.5137 +vn -0.4143 -0.5028 -0.7586 +vn -0.9208 -0.3801 -0.0872 +vn 0.5602 0.5821 0.5894 +vn 0.8042 0.5928 -0.0427 +vn 0.8051 0.5929 0.0171 +vn 0.7567 0.6458 0.1017 +vn 0.9051 0.3534 0.2365 +vn 0.0790 0.9880 0.1329 +vn 0.1119 0.9848 0.1329 +vn -0.3913 0.2132 0.8952 +vn 0.2280 0.8477 0.4790 +vn -0.5664 0.7532 -0.3343 +vn 0.2483 0.8521 0.4607 +vn -0.4768 -0.4019 -0.7818 +vn 0.8068 0.5906 0.0149 +vn 0.7068 0.6821 0.1877 +vn -0.0457 0.9988 -0.0175 +vn 0.6918 0.6016 0.3994 +vn -0.9203 0.1930 -0.3404 +vn -0.1293 0.8298 0.5429 +vn 0.8150 0.5592 0.1519 +vn 0.8154 0.5146 -0.2651 +vn 0.7420 0.6694 0.0373 +vn -0.3576 0.8650 0.3519 +vn 0.1843 0.9824 0.0301 +vn 0.4064 0.8887 0.2124 +vn 0.1954 0.7654 0.6132 +vn 0.0835 0.9738 0.2117 +vn 0.4395 0.8259 0.3532 +vn 0.5463 0.6863 0.4802 +vn 0.4519 0.7152 0.5331 +vn -0.2584 -0.9218 -0.2890 +vn 0.1939 0.9804 -0.0350 +vn -0.1803 0.9770 0.1137 +vn 0.5698 0.7840 0.2465 +vn -0.3434 0.9354 -0.0845 +vn 0.1506 0.8823 0.4459 +vn 0.7565 0.6471 -0.0943 +vn 0.7092 0.7046 0.0248 +vn 0.7118 0.7019 0.0248 +vn 0.6307 0.7536 0.1854 +vn -0.7559 -0.1324 0.6411 +vn -0.4056 0.7815 0.4741 +vn 0.1647 0.7744 0.6109 +vn -0.0691 0.9128 0.4025 +vn -0.0088 0.9653 0.2609 +vn 0.5255 -0.7057 0.4751 +vn 0.8088 0.5242 -0.2667 +vn 0.7635 0.6411 -0.0776 +vn 0.6096 0.7630 0.2150 +vn 0.7546 0.5879 0.2915 +vn 0.3495 0.4415 0.8264 +vn 0.2864 0.0983 -0.9530 +vn 0.6469 0.7579 0.0846 +vn 0.6071 0.6136 0.5048 +vn 0.6456 0.6707 0.3652 +vn 0.1689 0.9814 -0.0912 +vn 0.2650 0.9212 0.2849 +vn 0.3258 0.4664 0.8224 +vn -0.3360 0.7618 -0.5538 +vn -0.2395 0.9513 -0.1942 +vn 0.0390 0.5847 0.8103 +vn 0.6579 0.7391 0.1446 +vn -0.2002 0.7626 0.6151 +vn -0.1311 0.7536 0.6441 +vn 0.8967 0.3735 0.2374 +vn 0.4598 0.8684 -0.1857 +vn 0.7964 0.5533 0.2439 +vn 0.3125 0.0040 0.9499 +vn 0.2216 0.9662 0.1316 +vn -0.3516 0.8102 0.4690 +vn 0.0914 0.7062 0.7021 +vn -0.0345 0.9755 0.2172 +vn 0.6556 0.7398 0.1513 +vn 0.3787 0.8941 0.2391 +vn 0.8694 0.3508 0.3479 +vn -0.3401 -0.6121 -0.7139 +vn 0.2088 0.9457 0.2490 +vn 0.7732 0.5403 -0.3322 +vn -0.8617 -0.3290 0.3864 +vn 0.3079 -0.0567 0.9497 +vn 0.3174 0.7792 0.5404 +vn 0.8146 0.5560 0.1652 +vn -0.9100 0.0393 -0.4128 +vn 0.6557 0.7394 -0.1527 +vn 0.6403 0.7674 -0.0345 +vn 0.6136 0.7607 0.2120 +vn 0.5298 0.7674 0.3611 +vn 0.4068 0.7090 0.5761 +vn -0.6125 0.7877 0.0657 +vn 0.0056 -0.9665 0.2567 +vn 0.1689 0.9039 0.3930 +vn 0.1577 0.6826 0.7136 +vn -0.8869 -0.2685 -0.3758 +vn 0.1579 -0.8883 -0.4314 +vn 0.6220 0.7823 -0.0325 +vn 0.9964 0.0702 0.0479 +vn 0.6269 0.5813 0.5188 +vn -0.0211 0.8164 0.5771 +vn 0.1446 0.9297 0.3387 +vn -0.2073 0.9193 0.3345 +vn 0.8723 -0.4886 -0.0212 +vn -0.9258 -0.1218 -0.3578 +vn 0.5852 0.7682 -0.2598 +vn 0.2978 0.8404 0.4527 +vn 0.0883 0.7713 0.6303 +vn 0.0296 0.8502 0.5256 +vn -0.4884 -0.1785 0.8542 +vn -0.0706 0.8384 0.5405 +vn -0.8399 -0.3184 -0.4396 +vn 0.5926 0.8052 0.0218 +vn 0.3324 0.8532 0.4018 +vn 0.0989 0.8334 0.5438 +vn 0.5659 0.6001 0.5654 +vn -0.0135 0.7171 0.6968 +vn -0.0085 -0.7091 -0.7050 +vn -0.4085 0.8814 0.2372 +vn 0.2976 0.8794 0.3716 +vn 0.0787 0.9903 0.1143 +vn 0.1852 0.9701 0.1569 +vn -0.1071 0.9538 0.2806 +vn 0.4232 -0.6999 -0.5754 +vn -0.1584 0.9173 0.3654 +vn 0.2112 0.8810 0.4233 +vn -0.5512 0.8223 0.1412 +vn 0.6238 0.7394 -0.2533 +vn 0.5491 0.8252 -0.1323 +vn 0.5129 0.8579 0.0310 +vn 0.4361 0.8959 0.0847 +vn 0.2739 0.9159 0.2934 +vn -0.2481 0.9657 -0.0768 +vn 0.6705 -0.1382 0.7289 +vn -0.0306 0.8687 0.4944 +vn -0.1906 0.7901 0.5826 +vn -0.2585 0.8445 0.4691 +vn -0.7503 0.6611 -0.0038 +vn -0.8817 0.0034 0.4718 +vn 0.5962 0.6971 0.3983 +vn 0.3295 0.5207 0.7876 +vn -0.9230 0.1794 -0.3404 +vn 0.4355 0.8889 0.1426 +vn 0.4829 0.6546 0.5817 +vn 0.4620 0.6396 0.6144 +vn 0.5002 0.8341 -0.2325 +vn 0.0206 0.9724 0.2322 +vn -0.9818 -0.1440 -0.1235 +vn 0.5065 0.7716 0.3849 +vn -0.4739 0.8105 0.3443 +vn -0.0302 0.9584 0.2840 +vn -0.7067 0.6682 -0.2326 +vn 0.7356 0.5661 0.3720 +vn -0.9145 0.3594 0.1860 +vn -0.7569 -0.0939 -0.6467 +vn -0.8213 -0.0454 -0.5687 +vn 0.5431 0.7586 -0.3600 +vn 0.5116 0.8264 0.2351 +vn 0.4618 0.7748 0.4317 +vn 0.4500 0.7285 0.5165 +vn -0.2508 0.7319 0.6335 +vn 0.8375 0.4771 0.2664 +vn 0.5804 0.7737 0.2540 +vn -0.8739 0.2423 -0.4214 +vn -0.7500 -0.0586 -0.6589 +vn 0.1044 -0.9942 0.0271 +vn 0.5087 0.8468 -0.1553 +vn 0.5249 0.8407 -0.1331 +vn 0.4586 0.8868 -0.0564 +vn 0.4822 0.8618 0.1574 +vn 0.4437 0.8740 0.1980 +vn 0.2422 0.6928 0.6792 +vn -0.5041 0.8567 0.1091 +vn -0.7936 -0.5455 0.2694 +vn 0.8064 0.5501 0.2172 +vn 0.7062 0.3921 0.5895 +vn -0.2047 0.8557 0.4752 +vn -0.2475 0.7990 0.5481 +vn -0.4397 0.8450 0.3044 +vn 0.0031 0.0423 -0.9991 +vn 0.7720 -0.5134 -0.3748 +vn 0.4647 0.8853 -0.0186 +vn -0.0965 0.7711 0.6293 +vn 0.3824 -0.9115 -0.1515 +vn -0.4019 0.8482 0.3450 +vn 0.7976 0.5333 0.2817 +vn 0.1155 0.8914 0.4383 +vn 0.2148 0.8852 0.4126 +vn -0.1385 0.6148 0.7764 +vn -0.2036 0.8143 0.5436 +vn -0.7656 -0.0185 -0.6430 +vn -0.7321 0.5573 -0.3918 +vn 0.5670 0.2811 -0.7743 +vn 0.4037 0.9143 0.0328 +vn 0.2528 0.9035 0.3460 +vn 0.2650 0.9033 0.3374 +vn 0.1325 0.7795 0.6123 +vn 0.6591 -0.6943 -0.2891 +vn -0.2618 0.8645 0.4291 +vn -0.4983 0.1856 0.8469 +vn -0.1097 0.9650 0.2381 +vn 0.1927 0.6807 0.7067 +vn -0.4019 0.7864 0.4692 +vn -0.4062 -0.0908 -0.9093 +vn -0.8021 -0.5961 -0.0346 +vn 0.0969 0.2275 -0.9690 +vn -0.2852 -0.2407 -0.9278 +vn 0.1728 0.8274 0.5343 +vn 0.0067 -0.6672 -0.7449 +vn -0.7610 -0.6296 0.1567 +vn 0.2427 0.8141 0.5275 +vn -0.2154 0.6811 0.6998 +vn -0.0687 0.6186 0.7827 +vn -0.8492 -0.5230 0.0727 +vn -0.8488 -0.5238 0.0722 +vn 0.4232 0.9028 -0.0769 +vn -0.8342 -0.0223 0.5510 +vn -0.4702 0.8039 0.3642 +vn -0.5309 -0.2530 0.8088 +vn -0.8523 -0.1025 0.5130 +vn -0.4273 0.5238 0.7369 +vn -0.2212 0.9319 0.2875 +vn -0.7858 0.4534 0.4207 +vn -0.6074 0.6756 0.4178 +vn 0.3368 0.6182 0.7102 +vn -0.2270 -0.0314 0.9734 +vn -0.6429 0.7481 0.1641 +vn -0.5010 0.0864 0.8611 +vn -0.7550 0.5775 0.3104 +vn -0.2147 0.0732 0.9739 +vn 0.0533 0.4343 0.8992 +vn -0.5135 -0.0639 -0.8557 +vn 0.1973 -0.8324 -0.5178 +vn -0.8924 0.2563 0.3714 +vn -0.6315 0.3999 0.6643 +vn -0.8412 -0.0357 0.5396 +vn 0.0354 0.7521 0.6582 +vn -0.4440 0.7413 0.5034 +vn -0.6565 -0.0497 0.7527 +vn -0.1376 0.2155 0.9668 +vn 0.7950 -0.4735 -0.3792 +vn -0.8448 0.3175 0.4307 +vn -0.7984 -0.0844 0.5962 +vn -0.4132 -0.0009 -0.9106 +vn 0.1661 -0.9453 -0.2809 +vn -0.5123 -0.0698 0.8560 +vn -0.1449 -0.5872 -0.7964 +vn 0.2868 -0.7426 -0.6053 +vn -0.5605 -0.0698 -0.8252 +vn -0.7171 0.5763 0.3920 +vn -0.3578 0.3245 0.8756 +vn -0.1589 -0.7876 -0.5953 +vn -0.1989 -0.7442 -0.6376 +vn -0.5385 0.6506 0.5355 +vn -0.7258 0.5044 0.4678 +vn 0.0824 0.2705 0.9592 +vn -0.7888 0.0592 0.6118 +vn -0.5851 0.7973 -0.1480 +vn -0.8765 -0.1379 0.4613 +vn -0.7486 -0.4686 0.4690 +vn -0.2704 0.9416 0.2005 +vn -0.8635 -0.5040 0.0178 +vn -0.7351 -0.1737 0.6554 +vn -0.2337 0.3639 -0.9016 +vn -0.8310 -0.4048 0.3815 +vn -0.3873 0.9131 -0.1273 +vn -0.5713 0.6340 0.5212 +vn 0.1640 -0.3196 0.9333 +vn 0.2333 -0.8912 -0.3890 +vn -0.8196 -0.1173 0.5608 +vn -0.1586 0.9171 0.3656 +vn -0.5054 0.8495 0.1513 +vn -0.6863 0.6518 0.3226 +vn -0.2032 -0.4326 -0.8784 +vn 0.3401 0.2916 0.8941 +vn 0.7252 -0.6161 -0.3074 +vn -0.4891 -0.0960 0.8669 +vn -0.3941 -0.0943 -0.9142 +vn -0.6928 0.6524 0.3072 +vn -0.4889 0.3086 0.8159 +vn -0.5543 -0.1791 -0.8128 +vn -0.1915 -0.1116 0.9751 +vn -0.4562 -0.0359 0.8891 +vn -0.7605 -0.1903 0.6208 +vn -0.5615 0.4926 0.6649 +vn -0.2356 -0.8687 0.4357 +vn 0.5643 -0.7187 -0.4063 +vn -0.5785 0.4856 -0.6553 +vn -0.6369 0.4207 0.6460 +vn -0.8324 -0.0224 0.5537 +vn -0.7838 0.4496 0.4284 +vn -0.8238 0.5372 0.1811 +vn -0.5001 0.0455 0.8647 +vn -0.5323 0.5649 0.6306 +vn -0.7437 0.4566 0.4883 +vn -0.8951 -0.2175 0.3893 +vn -0.5661 0.8146 0.1264 +vn -0.5151 0.7296 0.4498 +vn -0.7878 0.1013 0.6076 +vn -0.7654 -0.1859 0.6161 +vn 0.0578 -0.9977 0.0366 +vn -0.9121 0.2980 0.2816 +vn -0.6358 0.6495 0.4170 +vn -0.6366 0.7065 0.3091 +vn -0.7961 -0.3301 0.5072 +vn 0.4036 0.2088 0.8908 +vn -0.3928 0.5802 0.7135 +vn -0.8051 0.4404 0.3974 +vn -0.2897 -0.3519 -0.8901 +vn -0.7255 0.4615 0.5105 +vn -0.5286 -0.2212 0.8196 +vn -0.4313 -0.3702 0.8227 +vn -0.9190 0.3436 0.1935 +vn 0.7618 -0.6066 -0.2272 +vn 0.5241 -0.8507 -0.0415 +vn -0.5587 0.2842 0.7792 +vn -0.5492 0.3436 0.7618 +vn -0.5961 0.6789 0.4286 +vn -0.8739 0.1607 0.4588 +vn -0.2011 0.8500 0.4869 +vn -0.7258 0.4618 0.5099 +vn -0.5395 -0.5440 0.6427 +vn 0.8557 -0.4794 -0.1947 +vn -0.4817 0.6291 0.6101 +vn -0.8778 -0.0589 0.4754 +vn -0.6613 -0.2594 0.7038 +vn -0.8306 -0.2746 0.4845 +vn -0.8116 -0.0946 0.5765 +vn -0.6125 0.6955 0.3757 +vn -0.9713 -0.2328 0.0495 +vn 0.1633 -0.8394 -0.5184 +vn 0.0809 -0.9924 -0.0926 +vn -0.7981 0.3900 0.4593 +vn -0.4013 0.8174 0.4133 +vn -0.5213 -0.0882 -0.8488 +vn -0.6309 -0.3577 0.6885 +vn -0.2961 0.7205 0.6270 +vn 0.6258 -0.6952 0.3536 +vn 0.7612 -0.2110 -0.6132 +vn -0.5703 -0.7415 0.3534 +vn -0.8902 -0.4497 -0.0726 +vn -0.5225 -0.7861 0.3302 +vn -0.0408 -0.9400 0.3386 +vn 0.1900 -0.9055 -0.3794 +vn -0.6876 0.2172 -0.6929 +vn -0.8535 -0.2277 0.4688 +vn 0.1434 -0.8598 -0.4901 +vn -0.7458 0.4213 0.5160 +vn -0.7806 -0.1989 0.5925 +vn 0.1816 -0.1328 -0.9744 +vn -0.7655 -0.4309 0.4777 +vn -0.4544 0.8086 0.3737 +vn -0.7416 -0.1890 0.6437 +vn -0.5946 0.6514 0.4712 +vn -0.5106 -0.4413 0.7380 +vn -0.9051 -0.2333 0.3554 +vn 0.5483 -0.1182 0.8279 +vn -0.9486 0.2563 0.1857 +vn -0.6750 0.6436 0.3608 +vn -0.6746 -0.2909 0.6785 +vn 0.4001 -0.9163 0.0176 +vn -0.9237 -0.0262 0.3822 +vn 0.4073 0.0945 0.9084 +vn -0.4895 -0.1113 0.8649 +vn -0.8457 -0.5197 -0.1209 +vn -0.4508 0.8163 0.3612 +vn -0.5503 0.0665 -0.8323 +vn -0.5769 -0.2732 0.7698 +vn -0.5993 0.6940 0.3990 +vn 0.6691 -0.6821 0.2951 +vn 0.4860 -0.8577 -0.1679 +vn -0.4672 0.0567 0.8823 +vn -0.4051 -0.7437 0.5319 +vn -0.9084 0.2921 -0.2992 +vn -0.6972 -0.0946 0.7106 +vn -0.6494 0.4079 0.6418 +vn -0.5390 0.2691 0.7982 +vn -0.4951 0.6605 0.5644 +vn 0.0427 0.6679 0.7430 +vn -0.5884 0.0653 0.8059 +vn 0.1331 -0.7008 -0.7009 +vn -0.4746 0.6143 0.6304 +vn -0.1910 -0.9242 -0.3307 +vn 0.0788 -0.0046 0.9969 +vn -0.3064 0.1553 0.9392 +vn -0.6723 -0.1737 0.7196 +vn 0.4351 0.1811 0.8820 +vn -0.8613 -0.2401 0.4478 +vn -0.6597 -0.1414 0.7381 +vn -0.2208 0.9193 0.3257 +vn -0.4595 0.3149 0.8305 +vn -0.8443 0.0439 0.5340 +vn -0.3403 0.1278 0.9316 +vn -0.4304 -0.4799 0.7645 +vn -0.2723 -0.8642 0.4231 +vn -0.7390 0.3762 0.5589 +vn -0.3687 0.7836 0.5001 +vn -0.5147 -0.2289 0.8262 +vn -0.9886 0.1504 -0.0052 +vn 0.0762 -0.7777 -0.6241 +vn -0.8113 0.0034 0.5846 +vn -0.1950 0.0535 0.9793 +vn 0.1993 0.1344 -0.9707 +vn 0.4671 -0.6509 0.5985 +vn -0.4451 0.8180 0.3644 +vn -0.6163 0.1472 0.7736 +vn -0.6688 -0.0490 0.7418 +vn -0.1816 -0.8793 0.4403 +vn -0.8043 -0.3372 0.4892 +vn -0.1752 0.9143 0.3652 +vn -0.8372 -0.2646 0.4786 +vn -0.2845 0.9557 -0.0760 +vn -0.5302 -0.3992 0.7480 +vn -0.8374 -0.2632 0.4790 +vn -0.1151 0.0456 0.9923 +vn -0.6022 -0.1935 0.7746 +vn -0.4866 0.1631 -0.8583 +vn -0.3962 -0.1569 -0.9047 +vn 0.0966 -0.0789 0.9922 +vn -0.4811 -0.2622 -0.8365 +vn -0.3500 -0.8638 0.3623 +vn -0.4968 -0.7174 0.4883 +vn -0.4327 -0.8866 0.1634 +vn -0.3574 0.1190 -0.9264 +vn 0.5557 -0.6525 -0.5153 +vn -0.4323 -0.8138 0.3883 +vn -0.4880 -0.1599 0.8580 +vn 0.2329 0.0330 0.9719 +vn -0.8961 0.4202 -0.1430 +vn -0.8041 -0.5187 -0.2906 +vn -0.4007 -0.5537 -0.7300 +vn -0.6698 0.6216 0.4062 +vn -0.3272 0.3949 -0.8585 +vn -0.6195 0.1885 0.7620 +vn -0.5830 0.5017 0.6391 +vn -0.4742 0.6604 0.5823 +vn -0.5598 -0.2650 0.7851 +vn -0.3573 -0.3013 0.8841 +vn -0.4870 -0.4884 0.7241 +vn -0.7689 0.4410 0.4629 +vn -0.5974 0.4482 0.6650 +vn -0.5021 -0.1293 0.8551 +vn -0.9171 0.3916 -0.0743 +vn -0.5891 0.7031 0.3982 +vn -0.3244 -0.8380 -0.4387 +vn -0.4809 -0.7576 0.4413 +vn 0.0116 -0.9999 -0.0100 +vn -0.3527 -0.5773 0.7364 +vn 0.1123 0.6940 0.7112 +vn 0.1296 0.2197 -0.9669 +vn -0.6235 -0.1934 -0.7575 +vn -0.0829 -0.5273 -0.8456 +vn 0.0502 -0.8457 0.5314 +vn 0.0861 -0.4690 -0.8790 +vn -0.3732 0.8556 0.3587 +vn -0.8580 0.1480 0.4919 +vn 0.0430 0.1869 -0.9814 +vn -0.3656 -0.4356 0.8226 +vn -0.9864 0.1514 0.0641 +vn -0.8449 0.4781 0.2399 +vn -0.7765 0.5276 -0.3445 +vn -0.8944 0.3687 0.2532 +vn -0.8693 0.4941 0.0140 +vn -0.8640 0.1603 0.4773 +vn -0.2328 0.9287 0.2888 +vn -0.6546 0.1200 0.7464 +vn -0.9386 0.1377 -0.3162 +vn 0.0812 -0.3851 0.9193 +vn -0.8512 0.2076 0.4821 +vn -0.1071 -0.5309 -0.8407 +vn -0.2384 0.2048 0.9493 +vn -0.6994 -0.4688 0.5395 +vn -0.6224 0.2268 0.7491 +vn -0.3998 0.8759 -0.2701 +vn -0.6428 0.2770 -0.7142 +vn -0.8510 -0.2819 0.4431 +vn -0.9156 0.3389 0.2163 +vn -0.7244 -0.1451 0.6740 +vn -0.9950 -0.0140 -0.0992 +vn -0.8081 0.2313 -0.5417 +vn -0.8223 0.2782 0.4965 +vn -0.8429 -0.2981 0.4479 +vn -0.6514 -0.3113 -0.6919 +vn 0.1044 -0.1160 -0.9877 +vn -0.5864 0.0605 0.8077 +vn -0.5075 0.5179 0.6887 +vn 0.6853 -0.5234 -0.5064 +vn -0.2710 -0.8639 0.4246 +vn -0.3079 -0.8167 0.4880 +vn -0.3910 0.7269 0.5645 +vn -0.4479 -0.2673 0.8532 +vn -0.8363 -0.0551 0.5454 +vn 0.1035 -0.1057 -0.9890 +vn -0.4785 0.3371 0.8108 +vn -0.7783 -0.4163 0.4700 +vn -0.5257 -0.0765 0.8473 +vn -0.9056 0.3377 0.2566 +vn -0.8271 0.5382 -0.1622 +vn -0.8574 0.5044 0.1020 +vn -0.8956 0.4210 -0.1433 +vn -0.5968 0.3336 -0.7298 +vn -0.0916 0.0476 -0.9947 +vn -0.4704 0.4447 0.7622 +vn 0.0079 -0.9997 0.0240 +vn -0.6230 0.7765 0.0943 +vn -0.7309 0.2361 0.6403 +vn -0.5890 -0.5654 -0.5773 +vn 0.0761 0.7056 0.7045 +vn -0.9301 0.1556 -0.3326 +vn -0.5383 0.4272 0.7265 +vn -0.5669 0.4217 0.7076 +vn -0.6266 0.0885 0.7743 +vn -0.6631 0.3093 0.6816 +vn 0.1953 -0.9003 -0.3889 +vn 0.0614 -0.9968 0.0510 +vn -0.1150 -0.6689 0.7344 +vn 0.1562 -0.4580 -0.8751 +vn -0.4196 -0.3163 0.8508 +vn -0.2739 0.2450 -0.9300 +vn -0.1262 -0.0566 0.9904 +vn -0.3587 -0.2627 -0.8957 +vn -0.6095 -0.2451 0.7539 +vn 0.7546 0.4269 0.4984 +vn -0.9103 0.2326 0.3425 +vn -0.4003 0.2795 -0.8727 +vn -0.5393 -0.4171 0.7316 +vn -0.0467 0.8209 -0.5692 +vn -0.9720 0.0847 -0.2191 +vn -0.8382 -0.4174 -0.3511 +vn -0.2632 -0.2957 -0.9183 +vn -0.7634 0.3085 0.5676 +vn 0.1282 -0.3912 -0.9113 +vn -0.8589 -0.4860 0.1617 +vn -0.6264 0.5306 0.5710 +vn -0.5847 0.6322 0.5084 +vn -0.5186 0.8484 0.1062 +vn -0.0407 0.0255 -0.9988 +vn -0.5264 -0.7444 0.4109 +vn -0.5773 0.5428 0.6100 +vn -0.9113 -0.0104 0.4116 +vn -0.7852 0.0986 0.6114 +vn -0.9117 0.4045 0.0719 +vn 0.4689 -0.8832 -0.0128 +vn -0.7269 0.4368 0.5300 +vn -0.2077 0.7238 0.6580 +vn -0.9510 0.1581 -0.2656 +vn -0.9670 0.1293 0.2195 +vn -0.4589 0.7208 0.5194 +vn -0.2843 0.8987 0.3338 +vn -0.3551 0.6832 0.6381 +vn -0.7979 -0.3403 0.4975 +vn -0.7673 -0.3885 0.5102 +vn -0.7204 0.1412 0.6790 +vn -0.4352 0.8240 0.3629 +vn -0.8365 -0.2998 0.4587 +vn -0.8627 0.0426 0.5039 +vn -0.8660 0.1841 0.4650 +vn -0.2270 -0.0316 0.9734 +vn -0.2293 0.9301 0.2868 +vn -0.6504 0.6545 0.3854 +vn 0.1627 0.3027 0.9391 +vn -0.9585 0.2808 0.0492 +vn -0.8994 0.3918 -0.1940 +vn -0.3774 0.0294 0.9256 +vn -0.6905 0.4016 0.6015 +vn -0.5305 0.5729 0.6248 +vn -0.0768 -0.1130 0.9906 +vn -0.5799 0.3270 0.7462 +vn -0.4403 0.5219 0.7306 +vn -0.7848 0.0667 0.6161 +vn -0.7386 -0.0199 0.6738 +vn -0.5639 -0.2075 0.7993 +vn 0.5640 -0.5194 -0.6420 +vn 0.9152 -0.0327 0.4017 +vn -0.0579 0.5388 0.8404 +vn -0.5259 -0.7449 0.4106 +vn 0.0094 0.0348 0.9994 +vn -0.4173 -0.6406 0.6446 +vn 0.2604 0.2133 0.9416 +vn -0.8620 0.5069 0.0068 +vn -0.6478 -0.1257 0.7514 +vn 0.2540 -0.8281 -0.4997 +vn -0.6290 0.7622 0.1529 +vn -0.7699 0.0225 0.6378 +vn -0.6775 0.5175 0.5227 +vn -0.2100 -0.0221 -0.9775 +vn -0.3584 -0.1576 -0.9202 +vn 0.7522 -0.1938 0.6298 +vn -0.0141 -0.2470 -0.9689 +vn -0.8446 0.0299 0.5345 +vn -0.7895 0.2901 0.5408 +vn 0.4332 -0.8320 -0.3465 +vn -0.7388 -0.4628 0.4900 +vn -0.0587 -0.9983 -0.0011 +vn -0.8518 0.5227 -0.0354 +vn -0.9104 0.1096 0.3989 +vn -0.8267 0.3903 0.4054 +vn -0.8349 0.3463 0.4279 +vn -0.6897 0.6468 0.3257 +vn -0.9708 0.0319 0.2379 +vn -0.3395 0.7979 0.4981 +vn -0.1297 -0.3904 -0.9115 +vn 0.0603 0.0400 -0.9974 +vn -0.2325 0.3592 -0.9039 +vn 0.3982 0.0778 0.9140 +vn -0.8690 0.2148 0.4457 +vn -0.7306 0.5441 0.4125 +vn -0.6240 0.7507 -0.2169 +vn 0.1941 -0.7911 0.5801 +vn -0.7106 0.5089 0.4859 +vn -0.6212 0.3900 0.6797 +vn -0.3205 0.8747 0.3634 +vn -0.4448 0.7717 0.4546 +vn -0.4532 0.1960 -0.8696 +vn -0.4179 -0.1664 -0.8931 +vn -0.5512 -0.0610 0.8321 +vn -0.9092 -0.1914 0.3699 +vn -0.7920 -0.2733 0.5459 +vn -0.7826 -0.1002 0.6144 +vn -0.7576 0.2948 0.5823 +vn -0.0400 0.9174 0.3961 +vn -0.6088 0.7135 0.3468 +vn -0.0788 0.4643 0.8822 +vn 0.1558 -0.1693 -0.9732 +vn -0.5446 0.2407 0.8034 +vn -0.8207 -0.3763 0.4300 +vn -0.6895 0.1742 0.7030 +vn -0.2889 -0.0328 -0.9568 +vn -0.8434 -0.3402 0.4159 +vn -0.9019 -0.1050 0.4190 +vn -0.7767 0.2205 0.5900 +vn -0.6749 -0.2241 0.7031 +vn 0.0085 -0.9986 -0.0525 +vn -0.2055 0.8333 0.5132 +vn -0.3204 0.8895 0.3258 +vn -0.7910 -0.2542 0.5565 +vn -0.7996 -0.0636 -0.5971 +vn -0.8549 -0.4025 -0.3272 +vn -0.2785 0.6073 0.7440 +vn -0.4812 0.6540 0.5837 +vn -0.3652 0.7577 0.5408 +vn -0.5044 0.6650 0.5509 +vn -0.4721 0.5225 0.7100 +vn -0.1296 0.1334 -0.9825 +vn -0.3077 0.7181 0.6242 +vn -0.0315 0.2105 -0.9771 +vn -0.1217 0.1107 -0.9864 +vn -0.4082 0.8249 0.3910 +vn -0.1375 -0.5141 0.8466 +vn -0.8569 0.0767 0.5097 +vn 0.0171 0.5877 0.8089 +vn -0.8066 -0.3029 0.5077 +vn -0.3559 0.9342 0.0256 +vn -0.9425 -0.0615 0.3285 +vn -0.2615 0.8476 0.4618 +vn -0.5603 0.4499 0.6954 +vn -0.0204 0.3348 -0.9421 +vn -0.1138 0.4424 -0.8895 +vn -0.1288 0.2769 -0.9522 +vn 0.2953 -0.9334 -0.2040 +vn -0.7709 -0.0996 0.6291 +vn -0.7548 0.1204 0.6448 +vn -0.3879 0.4139 0.8235 +vn -0.5643 -0.4299 0.7048 +vn -0.7587 0.1005 0.6437 +vn -0.6227 -0.1156 0.7738 +vn -0.6251 0.2227 0.7481 +vn -0.8807 0.3783 0.2852 +vn -0.7117 0.5703 0.4102 +vn -0.7241 0.5360 0.4340 +vn 0.1388 -0.2037 -0.9692 +vn -0.5684 -0.5791 0.5845 +vn -0.4975 0.4908 0.7152 +vn -0.3909 0.7476 0.5369 +vn -0.2759 0.8343 0.4773 +vn -0.8089 0.2829 0.5155 +vn -0.7260 0.5705 0.3840 +vn 0.4977 -0.8377 -0.2248 +vn 0.0466 -0.0065 -0.9989 +vn -0.7865 -0.0588 0.6147 +vn -0.7183 0.2461 0.6507 +vn -0.4063 0.0261 -0.9134 +vn -0.7713 0.5034 0.3895 +vn -0.9040 -0.3272 0.2752 +vn -0.4615 0.1549 0.8735 +vn -0.5469 0.8074 0.2214 +vn -0.5521 0.7901 0.2663 +vn -0.5875 0.6997 0.4066 +vn -0.6646 0.6993 0.2632 +vn -0.7772 0.2987 0.5538 +vn -0.3341 -0.0418 -0.9416 +vn 0.1374 -0.6545 -0.7434 +vn -0.8275 -0.0320 0.5605 +vn 0.0696 0.2856 0.9558 +vn -0.1940 -0.3876 -0.9012 +vn -0.0646 0.1974 0.9782 +vn -0.4972 0.7553 0.4269 +vn -0.5881 0.7388 0.3291 +vn -0.5332 0.7899 0.3030 +vn -0.6436 0.4441 0.6233 +vn -0.3625 0.6675 0.6505 +vn -0.4475 0.7825 0.4329 +vn -0.6113 0.5455 0.5734 +vn 0.0207 -0.6161 -0.7874 +vn -0.6859 0.4694 -0.5561 +vn -0.8235 0.4951 -0.2770 +vn -0.3499 -0.2582 -0.9005 +vn -0.7288 -0.3503 0.5884 +vn -0.7323 -0.0053 0.6810 +vn 0.5480 -0.4293 0.7180 +vn -0.3314 -0.1301 -0.9345 +vn 0.9758 -0.1889 -0.1104 +vn -0.0502 0.2053 -0.9774 +vn -0.9417 0.2123 0.2611 +vn -0.9235 0.0856 0.3739 +vn -0.8980 -0.3360 -0.2840 +vn -0.8338 0.3783 0.4022 +vn 0.2822 0.1747 0.9433 +vn -0.8517 0.3090 0.4232 +vn -0.4583 0.7599 0.4609 +vn -0.4136 -0.2086 -0.8863 +vn -0.7411 -0.2769 0.6116 +vn -0.9855 0.1473 0.0842 +vn -0.5528 0.1072 -0.8264 +vn -0.7897 -0.3216 0.5224 +vn -0.7832 -0.0469 0.6200 +vn -0.8223 0.0741 0.5642 +vn -0.6529 0.5821 0.4846 +vn -0.1717 -0.2118 0.9621 +vn -0.6720 -0.1008 0.7337 +vn -0.3264 0.7406 0.5873 +vn -0.5221 0.7756 0.3546 +vn -0.6446 0.7321 0.2205 +vn -0.4560 0.7001 0.5495 +vn -0.5304 0.6706 0.5186 +vn 0.1397 0.0517 -0.9888 +vn -0.6960 0.0482 -0.7164 +vn -0.7838 0.0072 0.6210 +vn -0.7967 -0.3336 0.5040 +vn -0.7865 0.3590 0.5025 +vn -0.6944 0.4761 0.5396 +vn -0.7217 0.4877 0.4912 +vn -0.7084 0.5602 0.4294 +vn -0.8209 -0.0333 0.5701 +vn -0.8291 -0.0430 0.5574 +vn -0.7314 0.4813 0.4831 +vn -0.5626 0.5967 0.5722 +vn -0.6691 0.7339 0.1170 +vn -0.3631 0.7754 0.5165 +vn -0.5655 -0.2993 -0.7685 +vn -0.3369 -0.0499 -0.9402 +vn -0.6223 -0.1778 -0.7623 +vn -0.7258 0.1350 0.6745 +vn -0.6064 -0.0319 0.7945 +vn -0.5756 0.0086 -0.8177 +vn -0.6742 -0.3459 0.6525 +vn -0.8422 0.2140 0.4949 +vn -0.8552 0.2557 0.4509 +vn -0.5121 0.6644 0.5444 +vn 0.7430 -0.2062 -0.6368 +vn -0.5676 0.2952 0.7685 +vn -0.6588 -0.2043 0.7240 +vn -0.4805 0.5643 0.6714 +vn -0.3860 0.8314 0.3997 +vn -0.5778 0.5623 0.5916 +vn -0.6809 0.1943 0.7062 +vn -0.3358 -0.0993 -0.9367 +vn -0.4232 -0.4097 -0.8081 +vn -0.7365 0.1349 0.6628 +vn -0.6850 0.2593 0.6808 +vn -0.7314 0.6376 -0.2421 +vn -0.1220 0.1020 -0.9873 +vn 0.0355 -0.9988 -0.0324 +vn -0.3807 0.0158 -0.9246 +vn -0.7423 0.2376 0.6265 +vn -0.7447 0.3968 0.5366 +vn -0.3467 -0.1548 -0.9251 +vn -0.0469 0.5429 -0.8385 +vn -0.1366 0.2679 -0.9537 +vn 0.0401 0.7729 -0.6333 +vn -0.0971 0.8026 -0.5885 +vn 0.0701 0.6181 -0.7829 +vn -0.2382 0.6231 -0.7450 +vn 0.0563 0.7355 -0.6752 +vn -0.5731 0.3592 -0.7366 +vn 0.1959 0.8995 -0.3906 +vn -0.8527 0.0603 -0.5189 +vn -0.8559 -0.1248 -0.5018 +vn 0.1605 0.9078 -0.3874 +vn 0.2797 0.7747 -0.5672 +vn 0.1196 0.7641 -0.6340 +vn -0.8687 -0.1094 -0.4832 +vn -0.6011 -0.0297 -0.7986 +vn -0.9866 0.0921 0.1344 +vn -0.7682 -0.2934 -0.5691 +vn -0.6177 -0.4453 -0.6482 +vn -0.6238 -0.4453 -0.6423 +vn -0.4393 -0.5280 -0.7268 +vn 0.2501 -0.9081 -0.3360 +vn -0.9436 0.1095 -0.3124 +vn -0.9377 -0.0214 -0.3468 +vn -0.6920 -0.0273 -0.7214 +vn -0.4393 0.8966 -0.0555 +vn -0.8736 -0.1440 -0.4648 +vn -0.4124 -0.5171 -0.7500 +vn -0.6542 0.0261 -0.7558 +vn -0.9464 -0.0794 -0.3131 +vn -0.8346 -0.3133 -0.4530 +vn -0.6842 -0.4620 -0.5642 +vn -0.6619 -0.5156 -0.5441 +vn -0.4322 -0.6705 -0.6030 +vn -0.6848 0.4527 -0.5711 +vn -0.8493 -0.2683 -0.4547 +vn -0.3568 -0.6499 -0.6711 +vn -0.7945 -0.2123 -0.5690 +vn 0.8219 -0.5615 -0.0965 +vn 0.6321 -0.7430 -0.2200 +vn -0.9609 0.1588 -0.2270 +vn -0.9798 0.0367 -0.1964 +vn -0.7293 -0.4965 -0.4708 +vn -0.3905 -0.6979 -0.6004 +vn -0.8536 -0.2149 -0.4746 +vn 0.1000 0.3206 -0.9419 +vn -0.7504 -0.4796 -0.4548 +vn -0.3872 -0.7068 -0.5921 +vn -0.9667 0.1449 -0.2108 +vn -0.9610 -0.1054 -0.2555 +vn -0.8903 -0.2637 -0.3712 +vn -0.3868 -0.7065 -0.5927 +vn -0.9881 -0.1173 -0.0998 +vn -0.6727 -0.4907 -0.5538 +vn -0.8831 0.4441 0.1510 +vn -0.9540 -0.1189 -0.2752 +vn -0.8819 -0.3203 -0.3460 +vn -0.7404 -0.5319 -0.4111 +vn -0.3937 -0.7385 -0.5474 +vn -0.9887 0.1182 0.0922 +vn -0.5062 -0.6356 -0.5829 +vn -0.8672 -0.4150 -0.2750 +vn -0.3753 -0.7246 -0.5780 +vn -0.4011 -0.6224 -0.6722 +vn -0.9496 -0.1190 0.2902 +vn -0.9651 0.2005 -0.1685 +vn -0.9823 0.1406 -0.1240 +vn -0.5103 -0.7569 -0.4082 +vn -0.9697 0.2263 0.0920 +vn -0.8654 -0.2220 -0.4492 +vn -0.9570 -0.1259 -0.2613 +vn -0.9071 -0.3133 -0.2811 +vn -0.6653 -0.5594 -0.4945 +vn -0.4295 -0.7453 -0.5099 +vn -0.7048 -0.5575 -0.4386 +vn -0.7222 0.6258 0.2946 +vn -0.9220 0.0557 -0.3830 +vn -0.0630 0.9973 0.0371 +vn -0.9618 0.2344 0.1414 +vn -0.5232 0.7370 -0.4278 +vn -0.9116 0.4059 0.0652 +vn -0.9887 -0.0740 -0.1306 +vn -0.7666 -0.5234 -0.3720 +vn -0.7893 -0.5165 -0.3319 +vn -0.9709 0.2129 0.1097 +vn -0.4903 0.7825 -0.3837 +vn -0.6392 0.7020 -0.3142 +vn 0.7575 -0.6163 -0.2152 +vn 0.5907 0.2243 -0.7751 +vn 0.1483 0.8623 -0.4842 +vn -0.8246 0.5287 0.2012 +vn 0.0304 -0.0063 -0.9995 +vn -0.9196 -0.2527 -0.3009 +vn -0.4794 -0.7097 -0.5163 +vn -0.6946 -0.6391 -0.3303 +vn -0.4321 -0.7612 -0.4835 +vn -0.2778 0.7033 -0.6544 +vn 0.7146 0.6891 -0.1205 +vn -0.9736 0.1949 -0.1185 +vn -0.5888 0.7932 -0.1555 +vn -0.6265 -0.4943 0.6026 +vn -0.1716 0.7349 -0.6561 +vn -0.8396 -0.4124 -0.3536 +vn -0.9293 -0.2934 -0.2244 +vn -0.9576 -0.2108 -0.1963 +vn -0.6613 -0.6448 -0.3834 +vn -0.3685 -0.9291 -0.0325 +vn 0.5009 0.3473 -0.7927 +vn -0.9837 -0.0433 -0.1743 +vn -0.9539 0.2467 -0.1709 +vn -0.7477 -0.5593 -0.3578 +vn -0.7660 -0.5321 -0.3608 +vn -0.5010 -0.7546 -0.4238 +vn -0.4891 -0.7556 -0.4357 +vn -0.6840 -0.6028 -0.4108 +vn -0.9836 0.0875 0.1579 +vn -0.1106 0.8352 -0.5387 +vn -0.6282 -0.1093 -0.7703 +vn -0.7777 0.0659 -0.6252 +vn -0.7795 0.0497 -0.6244 +vn -0.6817 0.4145 -0.6029 +vn -0.5669 -0.8147 -0.1219 +vn -0.9797 0.0194 -0.1995 +vn -0.9553 0.2814 -0.0912 +vn 0.4476 0.4938 -0.7455 +vn 0.1976 0.9331 -0.3004 +vn -0.6052 -0.3947 -0.6913 +vn -0.7684 -0.3339 -0.5460 +vn -0.8128 0.0407 -0.5810 +vn -0.8576 0.2228 -0.4635 +vn -0.6586 0.5642 -0.4978 +vn -0.2160 0.2482 -0.9443 +vn -0.9778 0.0229 -0.2083 +vn -0.9593 -0.2593 -0.1122 +vn -0.9378 -0.3363 -0.0868 +vn -0.9898 0.1170 0.0815 +vn -0.0978 0.9258 -0.3651 +vn -0.7688 -0.4139 -0.4875 +vn -0.7451 -0.4422 -0.4993 +vn -0.7622 -0.3467 -0.5467 +vn -0.8377 -0.3184 -0.4437 +vn -0.8533 0.2457 -0.4599 +vn 0.0203 -0.9996 -0.0179 +vn -0.5148 -0.7671 -0.3828 +vn -0.9406 -0.3284 -0.0862 +vn 0.3231 0.5635 -0.7603 +vn -0.7076 -0.1915 -0.6802 +vn -0.8959 0.2941 -0.3331 +vn -0.9390 0.3026 -0.1633 +vn -0.5323 -0.7467 -0.3988 +vn -0.7733 -0.5554 -0.3059 +vn -0.9388 0.2644 0.2209 +vn -0.2751 0.9195 0.2807 +vn 0.3200 0.5702 -0.7566 +vn -0.5510 -0.3900 -0.7378 +vn -0.7749 -0.2186 -0.5931 +vn -0.7279 -0.2406 -0.6421 +vn -0.7952 -0.4137 -0.4433 +vn -0.8832 -0.2706 -0.3831 +vn -0.9020 -0.3455 -0.2589 +vn -0.9191 -0.3223 -0.2266 +vn -0.9283 -0.0358 -0.3702 +vn -0.9628 0.2237 -0.1517 +vn -0.7783 0.2420 -0.5793 +vn 0.3698 0.7688 0.5218 +vn -0.9933 -0.0448 -0.1066 +vn -0.8425 -0.4399 -0.3110 +vn -0.9907 0.1171 0.0697 +vn 0.1053 0.3965 -0.9120 +vn -0.0938 0.7244 -0.6830 +vn -0.7435 -0.2756 -0.6093 +vn -0.7438 -0.3175 -0.5881 +vn -0.7875 -0.3555 -0.5035 +vn -0.7496 -0.2056 -0.6292 +vn -0.7990 0.4233 -0.4271 +vn -0.7329 0.5754 -0.3630 +vn -0.8286 0.4806 -0.2871 +vn -0.4668 0.8200 -0.3312 +vn -0.5332 0.5140 0.6719 +vn -0.9350 0.3359 -0.1136 +vn -0.9729 0.2170 0.0802 +vn -0.1466 0.7096 -0.6892 +vn -0.1622 0.7856 -0.5971 +vn -0.7762 -0.1652 -0.6085 +vn -0.8341 0.4045 -0.3750 +vn -0.9009 0.3195 -0.2938 +vn -0.6853 0.6521 -0.3243 +vn -0.9864 -0.0450 -0.1582 +vn -0.9190 0.3669 -0.1442 +vn -0.9535 -0.2118 -0.2144 +vn -0.8224 -0.5263 -0.2158 +vn -0.9451 -0.3200 -0.0658 +vn -0.9254 0.2913 0.2425 +vn -0.9393 0.2666 0.2160 +vn -0.2422 -0.4962 -0.8338 +vn 0.0569 0.7851 0.6167 +vn -0.6427 -0.7407 -0.1957 +vn 0.3159 -0.3110 0.8964 +vn -0.4221 0.8497 -0.3160 +vn 0.1670 0.5426 -0.8232 +vn -0.9297 -0.1891 -0.3160 +vn -0.9423 -0.1605 -0.2937 +vn -0.8589 -0.2697 -0.4354 +vn -0.8151 -0.3929 -0.4258 +vn -0.8291 0.1432 -0.5405 +vn -0.9650 -0.0189 -0.2614 +vn -0.7985 0.4535 -0.3959 +vn -0.9880 -0.0904 -0.1256 +vn -0.5712 -0.7478 -0.3384 +vn -0.9873 -0.1524 -0.0444 +vn -0.8457 -0.3503 0.4025 +vn -0.1736 0.1773 0.9687 +vn 0.2658 0.8522 -0.4506 +vn 0.2628 0.8323 -0.4881 +vn -0.3368 -0.7911 -0.5106 +vn -0.8729 0.2318 -0.4294 +vn -0.7738 0.3212 -0.5460 +vn -0.6323 0.5254 -0.5693 +vn 0.3887 0.6084 -0.6919 +vn -0.9144 -0.0863 -0.3955 +vn -0.7314 -0.2677 -0.6272 +vn -0.8865 -0.4207 -0.1928 +vn -0.8853 -0.3730 -0.2777 +vn -0.9603 -0.2009 -0.1938 +vn -0.8099 -0.1575 0.5650 +vn -0.1788 0.6286 0.7569 +vn -0.6610 0.6273 -0.4118 +vn -0.6755 0.6049 -0.4217 +vn 0.7367 -0.6693 -0.0967 +vn -0.6699 0.5681 -0.4781 +vn -0.8818 -0.3195 -0.3470 +vn -0.8914 -0.4127 -0.1874 +vn -0.9371 0.0831 -0.3390 +vn -0.5125 0.0505 -0.8572 +vn -0.4968 -0.8646 0.0751 +vn 0.2543 0.6946 -0.6730 +vn -0.9636 -0.1697 0.2066 +vn -0.8734 0.4856 -0.0369 +vn -0.9946 -0.0058 -0.1033 +vn -0.9476 -0.1971 -0.2516 +vn -0.9143 -0.2132 -0.3444 +vn -0.9018 -0.4087 -0.1400 +vn -0.9613 -0.2280 -0.1544 +vn -0.9051 -0.3628 -0.2219 +vn -0.9612 -0.2330 -0.1475 +vn -0.9741 -0.0742 -0.2135 +vn -0.8049 -0.2385 -0.5434 +vn 0.9942 0.0577 -0.0907 +vn -0.0388 -0.6186 -0.7847 +vn -0.9594 -0.2104 -0.1879 +vn -0.5731 -0.7180 -0.3951 +vn -0.7813 -0.5576 -0.2803 +vn -0.5920 -0.7000 -0.3994 +vn -0.9797 -0.1976 0.0321 +vn -0.1879 0.9142 -0.3590 +vn 0.0187 0.6146 -0.7886 +vn -0.8775 -0.3442 0.3341 +vn -0.9314 0.0679 -0.3575 +vn -0.5262 0.2710 -0.8060 +vn -0.5740 0.3532 -0.7387 +vn -0.4177 0.3855 -0.8227 +vn -0.7646 -0.0706 -0.6407 +vn -0.8655 0.0239 -0.5004 +vn -0.8756 -0.0490 -0.4804 +vn -0.8111 -0.3992 -0.4274 +vn -0.9903 -0.0846 -0.1105 +vn -0.3454 0.8164 -0.4627 +vn -0.6626 -0.7401 -0.1149 +vn -0.9889 -0.0854 -0.1215 +vn -0.8793 0.4634 -0.1102 +vn -0.9324 0.3555 -0.0657 +vn -0.9552 -0.2339 -0.1812 +vn -0.4331 -0.8170 -0.3806 +vn -0.6897 0.3149 -0.6520 +vn -0.8321 0.2166 -0.5105 +vn -0.9131 0.0666 -0.4022 +vn -0.7865 0.4794 -0.3893 +vn -0.4675 0.8394 -0.2773 +vn -0.3815 0.8726 -0.3050 +vn -0.6474 0.6302 -0.4286 +vn -0.9523 -0.0987 -0.2886 +vn -0.8984 -0.2439 -0.3652 +vn -0.8983 -0.3133 -0.3081 +vn -0.8732 -0.0938 -0.4783 +vn -0.9728 -0.2158 -0.0841 +vn -0.8757 -0.0907 -0.4743 +vn -0.8501 0.5081 0.1388 +vn -0.8645 0.4844 0.1340 +vn -0.9132 -0.3525 -0.2046 +vn -0.9281 0.3104 0.2055 +vn -0.9030 0.0888 -0.4204 +vn -0.5506 0.6435 -0.5318 +vn -0.7283 0.2163 -0.6503 +vn 0.1155 -0.8108 -0.5738 +vn -0.8186 0.4643 -0.3381 +vn -0.9735 0.2198 -0.0639 +vn -0.9096 -0.2173 -0.3542 +vn -0.8952 -0.2441 -0.3730 +vn -0.8771 -0.3117 -0.3654 +vn 0.2212 0.3660 -0.9039 +vn -0.8461 -0.2745 0.4570 +vn -0.9770 0.2030 0.0656 +vn 0.0860 -0.6069 -0.7901 +vn -0.7135 -0.6957 -0.0829 +vn -0.9874 -0.1079 -0.1156 +vn -0.8881 -0.1826 0.4219 +vn -0.7167 0.1146 -0.6879 +vn -0.6824 0.2393 -0.6907 +vn -0.8803 0.4610 -0.1118 +vn -0.6870 0.6963 -0.2079 +vn -0.4010 0.8274 -0.3931 +vn -0.5877 0.6286 -0.5095 +vn -0.9855 -0.0565 -0.1601 +vn -0.9288 0.0174 -0.3702 +vn -0.9145 -0.2138 -0.3435 +vn -0.9139 -0.2816 -0.2923 +vn -0.3846 0.3170 -0.8669 +vn -0.8266 0.4065 -0.3893 +vn -0.5170 0.7015 -0.4905 +vn -0.1890 -0.7669 -0.6133 +vn -0.3906 0.7681 -0.5073 +vn -0.5616 0.7742 -0.2921 +vn -0.9089 0.3702 -0.1921 +vn -0.4127 -0.9106 -0.0218 +vn -0.5604 -0.7127 -0.4219 +vn -0.8449 -0.4860 -0.2233 +vn -0.9867 0.0828 0.1400 +vn -0.7986 -0.5439 -0.2575 +vn -0.9998 -0.0051 -0.0194 +vn -0.9705 0.1414 -0.1952 +vn -0.9099 -0.3021 -0.2843 +vn -0.8681 0.4766 -0.1388 +vn -0.6881 0.6826 -0.2460 +vn -0.9325 0.0431 -0.3585 +vn -0.9720 -0.1377 -0.1901 +vn -0.8951 -0.2539 -0.3664 +vn -0.8314 -0.3794 -0.4060 +vn 0.0243 0.5604 -0.8279 +vn -0.4048 0.8323 0.3785 +vn -0.9987 0.0381 -0.0347 +vn -0.8739 0.4857 0.0203 +vn -0.9484 -0.2781 -0.1522 +vn -0.5613 -0.7114 -0.4228 +vn -0.9604 -0.2237 -0.1663 +vn -0.3375 0.9152 -0.2201 +vn -0.5672 -0.5668 -0.5975 +vn 0.0213 -0.5362 -0.8438 +vn -0.8138 0.5774 -0.0664 +vn -0.5195 0.8511 0.0760 +vn -0.3138 0.9240 -0.2184 +vn -0.4953 0.8457 -0.1985 +vn -0.7368 0.6697 0.0925 +vn -0.9403 0.1551 -0.3031 +vn -0.2538 0.0523 -0.9658 +vn -0.9117 -0.3200 0.2575 +vn 0.0592 -0.8938 -0.4445 +vn -0.9580 0.2696 -0.0977 +vn -0.7454 0.4041 -0.5302 +vn -0.7133 0.4984 -0.4928 +vn -0.9413 0.1402 -0.3071 +vn 0.1125 -0.9930 0.0358 +vn -0.9878 -0.1333 -0.0801 +vn -0.9070 -0.3187 -0.2751 +vn -0.9380 -0.2675 -0.2206 +vn -0.9415 -0.1894 -0.2789 +vn 0.1361 0.8248 -0.5488 +vn 0.0420 0.4610 -0.8864 +vn -0.7713 0.3257 0.5468 +vn -0.9467 -0.2377 -0.2172 +vn -0.8212 0.3623 -0.4410 +vn -0.5211 0.8124 -0.2616 +vn -0.8267 -0.0543 0.5600 +vn -0.6894 -0.5563 0.4640 +vn -0.6892 -0.5605 0.4592 +vn -0.5170 -0.1814 -0.8365 +vn -0.7241 -0.6676 -0.1733 +vn -0.9909 -0.0973 -0.0927 +vn -0.8864 0.4616 0.0347 +vn -0.6882 -0.6825 -0.2462 +vn -0.5786 -0.7214 -0.3806 +vn -0.8539 -0.4816 -0.1975 +vn -0.9905 0.1028 0.0917 +vn -0.8756 0.4726 -0.0998 +vn -0.8916 0.1486 -0.4278 +vn -0.8225 0.4650 -0.3276 +vn -0.8005 0.5169 -0.3034 +vn -0.7259 0.5893 -0.3548 +vn -0.5905 0.7163 -0.3718 +vn -0.9610 0.2093 -0.1810 +vn -0.9792 -0.0677 -0.1912 +vn -0.9335 -0.2650 -0.2416 +vn -0.9411 -0.2408 -0.2374 +vn -0.6260 0.7093 0.3240 +vn -0.8418 0.3162 -0.4374 +vn -0.8853 0.4245 -0.1901 +vn -0.2150 -0.0208 -0.9764 +vn -0.9068 -0.4184 -0.0521 +vn -0.9297 0.2843 0.2343 +vn -0.6414 0.5461 -0.5389 +vn -0.6736 0.4634 -0.5758 +vn -0.7303 0.6246 -0.2768 +vn 0.1140 -0.7937 -0.5975 +vn -0.9811 -0.0021 -0.1936 +vn -0.9355 -0.0541 0.3490 +vn -0.4888 0.8458 -0.2137 +vn -0.9061 0.3248 -0.2711 +vn -0.1928 0.1304 -0.9725 +vn 0.0023 0.5338 -0.8456 +vn 0.4237 0.4638 -0.7780 +vn -0.9853 0.0198 -0.1698 +vn -0.7396 0.5905 -0.3229 +vn -0.9558 -0.2896 -0.0508 +vn -0.5156 0.8428 0.1543 +vn -0.8089 -0.5841 0.0666 +vn -0.9907 -0.1097 0.0810 +vn -0.9978 -0.0480 -0.0453 +vn -0.9914 0.1258 0.0353 +vn -0.8845 -0.4049 0.2316 +vn -0.6860 0.6626 -0.3006 +vn 0.2518 0.6191 0.7438 +vn -0.8952 0.3531 -0.2719 +vn -0.7049 0.6479 -0.2887 +vn -0.9309 -0.0312 -0.3640 +vn -0.8296 -0.1658 -0.5332 +vn -0.9576 -0.1047 -0.2685 +vn -0.9357 -0.2491 -0.2498 +vn -0.7008 -0.6622 -0.2653 +vn -0.0015 0.4195 -0.9077 +vn -0.9043 0.3864 0.1815 +vn -0.0151 0.6689 -0.7432 +vn 0.0281 -0.9978 0.0593 +vn 0.4031 0.1555 -0.9019 +vn -0.9196 0.3810 -0.0961 +vn -0.8780 0.3683 -0.3056 +vn -0.6908 -0.1477 -0.7078 +vn -0.5900 -0.6258 -0.5102 +vn -0.9065 0.3983 -0.1402 +vn -0.9722 0.0612 0.2259 +vn -0.6884 -0.6804 -0.2513 +vn -0.6561 0.5582 -0.5080 +vn -0.9079 0.3197 0.2710 +vn -0.1441 0.2858 -0.9474 +vn -0.0200 0.7488 -0.6625 +vn -0.6750 -0.5505 -0.4912 +vn -0.7798 -0.1343 -0.6114 +vn -0.7041 -0.0136 -0.7100 +vn -0.9185 0.3829 -0.0990 +vn -0.9948 -0.0257 -0.0987 +vn -0.6007 -0.7827 -0.1628 +vn -0.9100 -0.4145 0.0132 +vn 0.9373 -0.1137 -0.3295 +vn -0.7636 -0.6282 -0.1489 +vn -0.9981 -0.0607 -0.0049 +vn -0.9007 -0.4015 -0.1659 +vn -0.8627 0.5021 0.0608 +vn -0.7930 -0.6042 -0.0778 +vn -0.9959 -0.0843 0.0325 +vn -0.9845 -0.1730 0.0276 +vn -0.9509 -0.3034 0.0607 +vn -0.9933 -0.0370 0.1097 +vn -0.5809 0.7281 -0.3640 +vn 0.5939 0.0103 -0.8045 +vn -0.2642 0.6871 0.6768 +vn 0.6336 -0.2195 -0.7419 +vn -0.7275 0.0393 -0.6850 +vn -0.6600 0.2765 -0.6986 +vn 0.4597 -0.7921 -0.4016 +vn 0.0499 0.4678 -0.8824 +vn -0.8364 -0.5292 0.1426 +vn -0.9051 -0.4068 0.1235 +vn -0.2884 -0.0314 -0.9570 +vn -0.8226 -0.5186 -0.2333 +vn -0.8017 -0.5473 -0.2403 +vn -0.8533 -0.4763 -0.2120 +vn -0.5897 0.6985 -0.4054 +vn -0.3113 -0.0464 -0.9492 +vn -0.8412 0.5366 -0.0666 +vn -0.6532 0.4844 -0.5819 +vn -0.5970 0.6027 -0.5295 +vn -0.6139 0.7819 -0.1083 +vn -0.9840 -0.1366 0.1141 +vn 0.1978 0.8225 -0.5332 +vn -0.7237 -0.1170 -0.6802 +vn -0.9899 -0.1131 -0.0853 +vn -0.9609 0.2511 0.1168 +vn -0.2857 -0.4323 -0.8553 +vn -0.8072 0.5687 0.1581 +vn -0.9538 -0.3005 0.0053 +vn 0.0146 0.9754 -0.2200 +vn -0.0030 -0.9989 0.0458 +vn -0.5464 0.8219 -0.1613 +vn -0.9488 -0.0638 0.3093 +vn -0.9721 0.2290 -0.0514 +vn -0.9747 0.2175 -0.0513 +vn -0.8931 -0.4258 0.1451 +vn -0.9055 0.3913 0.1643 +vn 0.2129 0.8529 -0.4768 +vn -0.2942 0.6279 -0.7206 +vn 0.5187 0.4083 -0.7512 +vn -0.8138 -0.0365 -0.5800 +vn -0.8137 -0.0318 -0.5805 +vn -0.6981 0.3125 -0.6442 +vn -0.6648 0.2151 -0.7153 +vn -0.6177 0.7052 0.3481 +vn -0.8833 0.3440 0.3187 +vn -0.9107 -0.1679 -0.3773 +vn -0.8966 0.3943 0.2015 +vn -0.9981 0.0367 -0.0490 +vn -0.8693 -0.4941 -0.0156 +vn -0.9965 0.0807 0.0234 +vn 0.2134 0.8988 -0.3830 +vn 0.0542 -0.9956 0.0767 +vn 0.4366 0.7872 -0.4356 +vn 0.1889 0.2455 -0.9508 +vn 0.6275 0.5524 -0.5488 +vn 0.7252 0.5512 -0.4126 +vn 0.0538 0.8923 -0.4483 +vn -0.3025 0.5399 -0.7855 +vn -0.1684 0.9248 -0.3412 +vn -0.2600 0.5709 -0.7788 +vn -0.6409 -0.4127 -0.6472 +vn -0.8678 -0.0750 -0.4913 +vn -0.6598 -0.2200 -0.7185 +vn -0.7329 0.0319 -0.6796 +vn -0.7089 0.1565 -0.6877 +vn -0.2262 0.9004 -0.3716 +vn 0.1813 0.7086 -0.6819 +vn -0.8317 -0.5291 -0.1683 +vn -0.9825 0.0747 -0.1704 +vn -0.9120 -0.0103 0.4100 +vn -0.6070 0.3679 -0.7044 +vn -0.8179 -0.5427 -0.1909 +vn -0.9278 0.3727 0.0153 +vn -0.9818 0.0422 -0.1852 +vn -0.8954 0.4450 -0.0140 +vn -0.8901 -0.4319 -0.1456 +vn -0.8532 -0.4748 -0.2160 +vn -0.9779 0.2072 -0.0287 +vn -0.8617 -0.4119 0.2964 +vn -0.9678 0.1443 0.2065 +vn -0.9027 0.4011 0.1556 +vn 0.1621 0.0480 -0.9856 +vn 0.4366 0.3905 -0.8105 +vn 0.0120 0.3391 -0.9407 +vn -0.7033 0.6485 -0.2912 +vn -0.7434 0.1834 -0.6432 +vn 0.2064 -0.8313 0.5160 +vn -0.8364 -0.3537 -0.4188 +vn -0.6628 -0.2301 -0.7126 +vn -0.7567 0.0829 -0.6484 +vn 0.8374 0.5455 0.0344 +vn 0.8288 0.5360 0.1608 +vn -0.0599 0.5123 -0.8567 +vn 0.1924 0.3938 -0.8989 +vn -0.7435 -0.5746 -0.3422 +vn -0.8666 -0.4546 -0.2057 +vn -0.5720 0.8112 0.1212 +vn -0.9839 -0.0710 0.1642 +vn -0.6385 0.3444 -0.6883 +vn -0.6598 0.5971 -0.4562 +vn -0.9155 0.3896 0.1010 +vn -0.8025 -0.5860 -0.1122 +vn 0.1658 -0.0002 0.9862 +vn -0.8194 -0.1951 -0.5390 +vn -0.8606 -0.2215 -0.4586 +vn -0.7829 -0.2285 -0.5786 +vn -0.4884 0.7744 0.4022 +vn 0.4329 0.3836 -0.8157 +vn -0.6219 -0.4153 -0.6639 +vn -0.7566 0.2349 -0.6103 +vn 0.0169 -0.9995 -0.0249 +vn 0.0137 -0.9998 -0.0142 +vn 0.5204 0.5378 -0.6633 +vn 0.1667 0.5508 -0.8178 +vn 0.2346 0.4272 -0.8732 +vn -0.6970 -0.0424 -0.7158 +vn -0.6911 -0.2633 -0.6731 +vn -0.4418 0.8516 -0.2823 +vn -0.5842 0.7523 -0.3044 +vn -0.9566 0.2890 -0.0363 +vn -0.6836 0.4544 -0.5711 +vn -0.6362 0.6128 -0.4687 +vn 0.0613 0.7999 -0.5971 +vn -0.2572 0.7293 -0.6340 +vn -0.5052 -0.7121 -0.4874 +vn -0.7582 -0.2556 -0.5999 +vn -0.6930 -0.3255 -0.6433 +vn -0.7570 -0.2939 -0.5836 +vn -0.6756 -0.1578 -0.7202 +vn -0.7167 -0.1208 -0.6868 +vn -0.7752 0.0945 -0.6247 +vn -0.8403 0.2055 -0.5017 +vn -0.0292 0.5804 -0.8138 +vn -0.1962 0.7845 -0.5883 +vn 0.4613 0.2380 -0.8547 +vn 0.4326 0.7706 -0.4681 +vn -0.7623 -0.4491 -0.4660 +vn -0.8636 0.2112 -0.4578 +vn -0.9864 0.1612 -0.0312 +vn -0.8157 -0.3125 -0.4868 +vn -0.9662 0.2188 0.1363 +vn -0.6822 0.4539 -0.5732 +vn -0.6393 0.7567 -0.1365 +vn -0.6937 0.3372 -0.6365 +vn -0.6854 -0.0294 -0.7275 +vn -0.5805 -0.6734 -0.4578 +vn -0.6612 -0.4901 -0.5680 +vn -0.7067 -0.3305 -0.6256 +vn -0.7970 0.1722 -0.5789 +vn -0.7554 0.2343 -0.6120 +vn -0.7682 0.0277 -0.6396 +vn -0.7071 0.1565 -0.6896 +vn -0.6295 0.4938 -0.5999 +vn 0.2842 -0.1096 -0.9525 +vn -0.3019 0.9096 -0.2855 +vn -0.8128 -0.2111 -0.5429 +vn -0.8054 -0.4178 -0.4204 +vn -0.9748 0.1107 -0.1936 +vn -0.7035 0.3548 -0.6158 +vn -0.6862 0.4500 -0.5715 +vn -0.6669 0.7091 -0.2292 +vn 0.0430 0.9190 -0.3919 +vn -0.4429 0.6321 -0.6358 +vn -0.5194 0.7768 -0.3561 +vn -0.2264 0.3155 -0.9215 +vn -0.5920 -0.7409 -0.3171 +vn -0.4772 -0.8631 -0.1655 +vn -0.4568 -0.8677 -0.1959 +vn -0.5795 -0.7474 -0.3250 +vn -0.7963 -0.3946 -0.4585 +vn -0.8186 -0.3200 -0.4769 +vn -0.7684 -0.2825 -0.5743 +vn -0.8056 -0.1130 -0.5816 +vn -0.7865 -0.1415 -0.6011 +vn -0.8469 -0.1734 -0.5027 +vn -0.7815 -0.2912 -0.5517 +vn 0.0425 0.8697 -0.4918 +vn -0.1945 0.9367 -0.2911 +vn 0.0149 -0.9922 0.1239 +vn 0.0474 0.5628 -0.8252 +vn 0.0875 0.6507 -0.7543 +vn -0.0632 -0.8200 0.5689 +vn -0.5130 0.1929 -0.8364 +vn -0.5550 0.2367 -0.7975 +vn -0.9542 -0.1232 -0.2727 +vn -0.9623 0.1677 -0.2142 +vn -0.9565 0.0110 -0.2915 +vn -0.9078 0.3904 0.1536 +vn -0.1470 -0.2251 -0.9632 +vn -0.1793 0.2246 -0.9578 +vn 0.1032 0.7652 -0.6355 +vn -0.3870 0.8153 -0.4308 +vn -0.7830 -0.6177 -0.0734 +vn -0.5480 0.7273 -0.4132 +vn -0.8124 0.3962 -0.4277 +vn -0.9226 0.0509 -0.3823 +vn -0.5649 -0.6165 -0.5485 +vn -0.6055 -0.5982 -0.5250 +vn -0.7823 -0.6200 -0.0595 +vn -0.8735 -0.2593 -0.4121 +vn -0.7998 -0.5032 -0.3274 +vn -0.7630 -0.5397 -0.3557 +vn -0.7293 0.3040 -0.6130 +vn -0.6247 0.4831 -0.6135 +vn -0.5996 0.3490 -0.7202 +vn -0.2554 0.7603 -0.5972 +vn -0.2403 0.9186 -0.3137 +vn -0.1115 0.6960 -0.7093 +vn -0.2390 0.0326 -0.9705 +vn -0.1811 0.6381 -0.7483 +vn -0.9664 -0.1041 0.2350 +vn 0.6028 0.5655 -0.5629 +vn -0.7517 -0.0010 -0.6595 +vn -0.7222 0.3120 -0.6173 +vn 0.5765 -0.7661 -0.2842 +vn -0.1896 -0.4357 -0.8799 +vn -0.6990 0.3595 -0.6181 +vn -0.7539 0.6158 -0.2289 +vn 0.5361 0.6633 0.5221 +vn -0.7260 0.6599 -0.1938 +vn -0.2612 -0.9499 0.1718 +vn -0.8140 0.3803 -0.4391 +vn -0.8893 -0.2488 -0.3836 +vn -0.5249 -0.7700 -0.3627 +vn 0.0354 -0.9989 -0.0316 +vn -0.4636 -0.8049 -0.3704 +vn -0.9644 -0.0877 -0.2495 +vn -0.9719 -0.0432 -0.2313 +vn -0.8915 0.1657 -0.4216 +vn -0.9887 0.0210 -0.1487 +vn -0.8911 0.1744 -0.4189 +vn -0.8190 0.3452 -0.4584 +vn -0.7183 0.0307 -0.6951 +vn -0.2333 0.9177 -0.3214 +vn -0.6918 0.1650 -0.7030 +vn -0.9697 0.1899 -0.1536 +vn -0.9349 0.2846 -0.2121 +vn 0.0391 -0.9992 0.0101 +vn -0.7551 0.4767 -0.4502 +vn -0.6850 0.7087 -0.1689 +vn -0.7592 0.6116 -0.2225 +vn -0.6799 0.7161 -0.1576 +vn -0.5730 0.6192 -0.5369 +vn -0.8128 -0.5764 0.0849 +vn -0.8869 0.1157 -0.4472 +vn -0.9240 -0.0293 -0.3813 +vn -0.9024 -0.3530 -0.2473 +vn -0.5763 -0.6333 -0.5165 +vn -0.6525 -0.6083 -0.4519 +vn -0.6776 -0.7354 -0.0077 +vn -0.7816 -0.6229 -0.0333 +vn -0.9259 -0.2871 -0.2455 +vn -0.9634 -0.0692 -0.2589 +vn -0.8003 0.3896 -0.4558 +vn -0.8104 -0.0076 -0.5858 +vn -0.8102 -0.0093 -0.5861 +vn -0.6582 0.3115 -0.6854 +vn -0.8491 0.1716 -0.4996 +vn -0.6560 0.1378 -0.7421 +vn -0.6896 0.3732 -0.6206 +vn -0.7524 0.6456 0.1309 +vn -0.9753 0.1505 0.1615 +vn -0.8638 0.3430 -0.3690 +vn -0.5655 0.7304 -0.3831 +vn -0.5624 -0.6249 -0.5414 +vn -0.7048 -0.6454 -0.2943 +vn -0.7107 -0.6772 -0.1906 +vn -0.8405 -0.3589 -0.4058 +vn -0.9377 -0.1126 -0.3287 +vn -0.8638 0.0416 -0.5022 +vn -0.8558 0.1565 -0.4930 +vn -0.9433 0.1945 -0.2690 +vn -0.8660 0.2596 -0.4273 +vn -0.8078 0.3493 -0.4748 +vn -0.6197 0.1748 -0.7652 +vn -0.7932 0.3257 -0.5145 +vn 0.5186 0.5624 -0.6440 +vn -0.8474 0.1716 -0.5025 +vn -0.7792 0.2751 -0.5631 +vn -0.7477 0.4807 -0.4580 +vn -0.6452 0.7450 0.1695 +vn -0.6212 0.7832 0.0273 +vn -0.9871 0.0674 0.1455 +vn -0.5774 0.6480 -0.4967 +vn -0.5314 0.7340 -0.4229 +vn -0.3884 0.9114 -0.1359 +vn -0.9172 0.3130 -0.2465 +vn -0.9186 0.3019 -0.2549 +vn -0.9942 0.0722 -0.0792 +vn 0.3390 -0.2428 -0.9089 +vn -0.0425 -0.9270 0.3725 +vn -0.7729 -0.5929 -0.2261 +vn -0.8119 -0.5488 -0.1991 +vn -0.8950 -0.3511 -0.2752 +vn -0.8678 0.0473 -0.4947 +vn -0.9951 -0.0516 -0.0845 +vn -0.6869 -0.3796 -0.6198 +vn -0.6492 -0.4636 -0.6030 +vn -0.8095 -0.3143 -0.4959 +vn -0.8529 0.2289 -0.4693 +vn -0.7014 0.1568 -0.6953 +vn -0.6113 0.2822 -0.7394 +vn 0.9658 -0.2426 -0.0913 +vn -0.5583 0.4428 -0.7016 +vn -0.8458 0.0126 -0.5333 +vn -0.8448 0.0175 -0.5348 +vn -0.7352 0.4056 -0.5431 +vn -0.7613 0.2622 -0.5931 +vn -0.6971 0.6599 -0.2805 +vn -0.8832 0.4440 0.1512 +vn -0.9895 0.1419 0.0274 +vn -0.7183 -0.6201 -0.3154 +vn -0.6108 -0.6769 -0.4108 +vn -0.6295 -0.6033 -0.4896 +vn -0.8279 -0.4339 -0.3554 +vn -0.8623 -0.3651 -0.3509 +vn -0.8543 0.2820 -0.4366 +vn -0.8876 0.1481 -0.4361 +vn -0.7974 0.3003 -0.5233 +vn -0.6474 -0.4543 -0.6120 +vn -0.8908 0.0254 -0.4536 +vn -0.6847 -0.4593 -0.5659 +vn -0.6366 -0.5439 -0.5468 +vn -0.8754 -0.1284 -0.4660 +vn -0.6987 -0.3506 -0.6237 +vn -0.9184 0.0395 -0.3936 +vn -0.9164 0.1655 -0.3646 +vn -0.5375 0.4486 -0.7140 +vn -0.8507 0.2281 -0.4737 +vn -0.6169 -0.3171 -0.7203 +vn 0.3884 0.1376 -0.9112 +vn -0.6638 0.4065 -0.6278 +vn -0.6978 0.7149 -0.0432 +vn -0.7055 0.7071 -0.0476 +vn -0.4370 0.7597 0.4815 +vn -0.3884 0.8993 -0.2008 +vn -0.3725 0.9112 -0.1758 +vn -0.7294 -0.6585 -0.1855 +vn -0.6391 0.4023 -0.6555 +vn -0.0843 -0.2857 -0.9546 +vn -0.8288 0.2481 -0.5016 +vn -0.8395 -0.2624 -0.4757 +vn -0.8881 -0.1868 -0.4199 +vn -0.9099 0.1857 -0.3710 +vn -0.9013 0.3727 -0.2206 +vn -0.9610 0.1253 -0.2465 +vn -0.9057 0.2673 -0.3289 +vn -0.9090 0.2346 -0.3444 +vn -0.9398 0.1424 -0.3106 +vn -0.9399 0.0846 -0.3308 +vn -0.8480 -0.0301 -0.5292 +vn -0.6876 0.3728 -0.6231 +vn -0.8197 0.1235 -0.5593 +vn -0.6715 0.1285 -0.7298 +vn -0.4834 0.8720 -0.0771 +vn -0.8789 0.4224 0.2216 +vn -0.6479 0.7458 -0.1551 +vn -0.7344 0.6771 0.0466 +vn -0.6275 0.7772 -0.0466 +vn 0.2524 -0.8354 -0.4882 +vn -0.5296 0.8466 -0.0521 +vn -0.9367 0.3352 0.1011 +vn -0.9688 -0.2409 0.0589 +vn -0.1930 -0.4428 -0.8756 +vn -0.7870 -0.5961 -0.1593 +vn -0.9493 -0.0595 -0.3087 +vn -0.9429 -0.0704 -0.3255 +vn -0.9913 -0.1290 -0.0275 +vn -0.9846 -0.1622 -0.0652 +vn -0.0139 -0.9999 0.0079 +vn 0.8213 0.4361 -0.3680 +vn 0.5092 0.7070 -0.4907 +vn 0.6480 0.5629 -0.5131 +vn 0.2617 0.5764 -0.7741 +vn 0.0980 -0.7998 -0.5923 +vn 0.6376 0.6791 -0.3636 +vn -0.4943 -0.1211 -0.8608 +vn -0.2546 0.6480 -0.7178 +vn 0.7927 0.5089 -0.3357 +vn 0.0934 0.5729 -0.8143 +vn -0.4165 0.4699 -0.7783 +vn -0.6944 -0.5996 -0.3979 +vn 0.0888 0.6731 -0.7342 +vn 0.1469 -0.9780 -0.1484 +vn 0.4022 0.6797 -0.6134 +vn -0.1349 0.7567 -0.6397 +vn -0.3451 0.8923 -0.2912 +vn -0.3154 0.2292 -0.9209 +vn -0.3213 0.8100 -0.4906 +vn 0.8802 -0.0926 -0.4654 +vn 0.6745 0.1087 -0.7302 +vn -0.1271 0.8440 -0.5210 +vn 0.2415 0.5840 -0.7750 +vn 0.0200 0.4165 -0.9089 +vn -0.0790 0.7331 -0.6755 +vn 0.0164 -0.9970 0.0761 +vn 0.5929 -0.7692 0.2383 +vn -0.4569 0.1526 -0.8763 +vn 0.1644 -0.9756 -0.1455 +vn 0.3642 0.6972 -0.6175 +vn -0.0384 0.7598 -0.6490 +vn -0.7076 0.5028 -0.4965 +vn 0.1734 -0.5382 -0.8248 +vn -0.1926 0.9308 -0.3106 +vn -0.2582 0.8552 -0.4494 +vn 0.9238 -0.1191 -0.3638 +vn 0.5350 0.3337 -0.7762 +vn -0.1080 0.6891 -0.7166 +vn 0.1629 0.3214 -0.9328 +vn -0.0757 0.7455 -0.6621 +vn 0.8877 0.0160 -0.4601 +vn 0.5996 0.4187 -0.6820 +vn 0.8663 -0.1322 -0.4816 +vn 0.7008 -0.2395 -0.6719 +vn 0.6540 0.1336 -0.7446 +vn 0.3624 0.8402 -0.4034 +vn 0.0820 0.2386 -0.9677 +vn 0.3667 0.6045 -0.7072 +vn 0.4013 0.6710 -0.6235 +vn 0.4263 0.4266 -0.7976 +vn 0.6058 -0.2040 -0.7690 +vn 0.6416 0.4908 -0.5895 +vn 0.3825 0.5115 -0.7694 +vn 0.6760 0.5908 -0.4404 +vn -0.4002 0.5384 -0.7416 +vn 0.1715 0.4831 -0.8586 +vn 0.4471 0.7374 -0.5063 +vn -0.2141 0.3943 -0.8937 +vn 0.5880 0.1209 -0.7998 +vn 0.7786 -0.1673 -0.6048 +vn 0.6514 0.3500 -0.6732 +vn -0.5352 0.0827 -0.8407 +vn -0.1560 0.5982 -0.7860 +vn 0.5265 0.3915 -0.7547 +vn 0.1234 0.4438 -0.8876 +vn 0.6188 0.2950 -0.7281 +vn 0.0812 -0.9794 0.1849 +vn 0.7373 0.4450 -0.5083 +vn 0.7371 0.4453 -0.5084 +vn 0.4994 0.6925 -0.5206 +vn -0.2291 -0.9732 0.0193 +vn 0.6763 0.3912 -0.6242 +vn 0.3472 0.2380 -0.9071 +vn 0.4893 0.1846 -0.8523 +vn -0.2695 0.5476 -0.7921 +vn 0.2410 0.7021 -0.6700 +vn -0.1318 0.2587 -0.9569 +vn 0.2105 0.4535 -0.8660 +vn 0.4030 0.4172 -0.8146 +vn -0.6195 0.7193 0.3145 +vn -0.1075 0.4564 -0.8833 +vn 0.4097 0.5915 -0.6944 +vn 0.0918 0.8755 -0.4744 +vn 0.3577 0.8075 -0.4690 +vn 0.5853 0.6432 -0.4936 +vn 0.5565 0.2715 -0.7853 +vn 0.4412 0.4619 -0.7694 +vn -0.1611 0.8401 -0.5180 +vn 0.4987 0.2923 -0.8160 +vn 0.1528 -0.8350 0.5286 +vn 0.8019 0.5456 -0.2435 +vn -0.2250 0.6301 -0.7432 +vn -0.3982 0.8564 -0.3286 +vn 0.4802 0.3149 -0.8187 +vn 0.3757 -0.9152 -0.1460 +vn 0.7950 0.4583 -0.3975 +vn 0.2244 0.0616 -0.9726 +vn 0.4846 0.5469 -0.6827 +vn 0.7605 0.1313 -0.6359 +vn 0.7596 0.0898 -0.6442 +vn 0.0382 0.6695 -0.7419 +vn 0.3630 0.8831 -0.2974 +vn 0.3547 0.7057 -0.6133 +vn 0.8707 0.3571 -0.3381 +vn 0.2560 0.5199 -0.8150 +vn -0.0174 0.5147 -0.8572 +vn 0.0171 -0.4102 0.9118 +vn 0.3860 0.4538 -0.8032 +vn -0.2962 0.9239 -0.2421 +vn 0.1200 -0.9928 -0.0051 +vn -0.1211 0.5537 -0.8239 +vn 0.7657 0.2880 -0.5751 +vn -0.0002 0.7031 -0.7111 +vn 0.7502 0.4278 -0.5042 +vn 0.4418 0.7883 -0.4283 +vn 0.5391 0.0688 -0.8394 +vn 0.7376 0.3102 -0.5998 +vn -0.1903 0.9409 -0.2803 +vn -0.6272 0.3169 -0.7114 +vn 0.3452 0.3301 -0.8786 +vn -0.0824 0.8852 -0.4578 +vn 0.3505 0.4474 -0.8228 +vn -0.2570 0.9482 -0.1865 +vn 0.3520 0.8047 -0.4781 +vn 0.6599 0.0894 -0.7461 +vn -0.0020 -0.9999 0.0159 +vn -0.0227 -0.9984 0.0519 +vn 0.6280 0.0178 -0.7780 +vn 0.3074 0.8314 -0.4630 +vn -0.2469 0.9127 -0.3257 +vn 0.4765 0.7439 -0.4686 +vn 0.4198 0.6151 -0.6674 +vn 0.0307 -0.0594 -0.9978 +vn 0.0097 0.3451 -0.9385 +vn 0.7652 0.1282 -0.6309 +vn 0.7450 -0.6100 0.2700 +vn 0.2263 0.0761 -0.9711 +vn 0.6604 0.7217 -0.2076 +vn 0.7805 0.1029 -0.6166 +vn 0.3103 0.6943 -0.6493 +vn -0.0070 0.8987 -0.4385 +vn -0.1227 0.9212 -0.3692 +vn -0.1182 0.3269 -0.9376 +vn -0.0151 0.8523 -0.5228 +vn 0.3379 0.2358 -0.9112 +vn -0.0914 0.5854 -0.8056 +vn -0.7327 0.5674 -0.3759 +vn 0.5978 0.4933 -0.6319 +vn -0.0147 0.9064 -0.4221 +vn 0.1141 0.8030 -0.5850 +vn 0.1265 0.8115 -0.5704 +vn 0.7587 0.4825 -0.4377 +vn -0.3919 0.8065 -0.4427 +vn 0.2163 0.4838 -0.8480 +vn 0.0072 0.9011 -0.4335 +vn -0.0297 0.8149 -0.5789 +vn -0.5050 0.8393 -0.2016 +vn 0.9701 -0.2418 -0.0215 +vn -0.2204 0.6624 -0.7160 +vn -0.0111 0.6722 -0.7403 +vn 0.4671 0.6363 -0.6140 +vn 0.3316 0.6497 -0.6841 +vn -0.6895 0.2432 -0.6822 +vn 0.4915 0.7871 -0.3727 +vn 0.1310 -0.9913 0.0116 +vn -0.9015 -0.2457 -0.3563 +vn -0.4458 0.6199 -0.6457 +vn -0.3080 0.7555 -0.5782 +vn 0.4589 0.5145 -0.7243 +vn 0.5572 0.5622 -0.6112 +vn 0.7201 0.3232 -0.6140 +vn 0.3477 0.2411 -0.9061 +vn 0.4513 0.5895 -0.6699 +vn 0.0995 0.7302 -0.6759 +vn 0.3865 0.6827 -0.6201 +vn 0.1173 0.7677 -0.6299 +vn 0.3134 0.3055 -0.8991 +vn -0.4316 0.5804 -0.6906 +vn -0.0937 0.5173 -0.8507 +vn -0.1928 0.3227 -0.9267 +vn 0.5473 0.4738 -0.6899 +vn 0.0970 0.6500 -0.7537 +vn 0.1079 0.5723 -0.8129 +vn 0.0609 0.5365 -0.8417 +vn -0.2584 0.8453 -0.4677 +vn 0.1147 0.6019 -0.7903 +vn -0.4779 0.8162 -0.3248 +vn -0.7181 0.0872 -0.6905 +vn -0.1905 0.5409 -0.8192 +vn -0.2028 0.6123 -0.7642 +vn -0.6481 0.5273 -0.5494 +vn -0.6844 0.3723 -0.6270 +vn -0.5345 0.1143 -0.8374 +vn -0.5435 0.1880 -0.8181 +vn 0.4781 -0.6003 -0.6412 +vn 0.0415 0.8286 -0.5583 +vn 0.8958 -0.0050 0.4444 +vn -0.4504 0.8031 -0.3902 +vn -0.1622 0.4657 -0.8700 +vn 0.4424 -0.8965 -0.0255 +vn 0.7087 -0.0343 -0.7047 +vn -0.5524 0.5534 -0.6234 +vn -0.2640 0.8089 -0.5254 +vn 0.1014 0.7474 -0.6566 +vn 0.2852 0.5696 -0.7708 +vn 0.3153 0.2658 -0.9110 +vn 0.1059 0.3190 -0.9418 +vn -0.1480 0.7492 -0.6456 +vn 0.0527 0.5164 -0.8547 +vn -0.0598 0.6291 -0.7750 +vn 0.0990 0.6969 -0.7103 +vn -0.0574 -0.5987 -0.7989 +vn -0.2071 0.4234 -0.8819 +vn 0.4117 -0.7340 -0.5402 +vn -0.0184 0.1820 -0.9831 +vn 0.3104 0.2073 -0.9277 +vn -0.3835 0.6481 -0.6580 +vn 0.1699 -0.7928 -0.5854 +vn -0.2396 0.8281 -0.5067 +vn 0.0212 0.6680 -0.7439 +vn 0.2577 -0.6557 -0.7097 +vn -0.2522 0.9463 -0.2023 +vn 0.3896 0.6134 -0.6870 +vn -0.7087 -0.0202 -0.7052 +vn 0.0182 -0.9998 0.0130 +vn 0.3744 0.3938 -0.8395 +vn -0.1357 -0.5164 0.8456 +vn -0.1712 0.5303 -0.8303 +vn 0.2387 0.4368 -0.8673 +vn 0.1826 0.4168 -0.8904 +vn 0.3579 0.4662 -0.8091 +vn 0.2464 0.4948 -0.8333 +vn -0.2026 0.7409 -0.6403 +vn -0.1253 0.5538 -0.8231 +vn -0.0262 0.9900 -0.1389 +vn -0.1806 0.6644 -0.7252 +vn 0.4170 -0.8753 0.2451 +vn 0.7510 0.0545 -0.6580 +vn -0.0813 -0.8072 0.5847 +vn 0.4694 0.4054 -0.7844 +vn -0.2246 0.7999 -0.5565 +vn 0.3664 0.3647 -0.8560 +vn 0.0394 0.4248 -0.9044 +vn 0.1648 0.4280 -0.8886 +vn -0.2563 0.6072 -0.7521 +vn 0.4481 0.3236 -0.8334 +vn 0.0479 0.0226 -0.9986 +vn 0.4611 0.1964 -0.8653 +vn 0.3096 0.5696 -0.7614 +vn 0.1383 0.0017 -0.9904 +vn 0.6906 0.1037 -0.7158 +vn 0.7280 0.1065 -0.6772 +vn -0.2313 0.6276 -0.7434 +vn 0.5414 0.2063 -0.8151 +vn -0.2016 0.8236 -0.5301 +vn -0.1853 0.9413 -0.2823 +vn 0.7303 0.0517 0.6812 +vn 0.3073 0.2944 -0.9049 +vn -0.2161 0.9340 -0.2845 +vn -0.1894 0.5274 -0.8282 +vn 0.2892 0.3385 -0.8954 +vn -0.3141 0.6162 -0.7222 +vn -0.6164 0.7740 0.1448 +vn -0.2220 0.3835 -0.8965 +vn 0.4136 0.0217 -0.9102 +vn 0.6326 0.4650 -0.6194 +vn -0.0620 0.5588 -0.8270 +vn 0.1679 0.5435 -0.8225 +vn 0.0279 0.8621 -0.5059 +vn 0.3878 0.4849 -0.7839 +vn -0.6664 -0.7430 0.0622 +vn 0.2749 0.6753 -0.6844 +vn -0.0367 0.5850 -0.8102 +vn -0.0467 0.6098 -0.7912 +vn -0.2760 0.7170 -0.6401 +vn -0.1817 0.5144 -0.8381 +vn 0.6754 0.4541 -0.5811 +vn 0.2456 0.5128 -0.8227 +vn 0.5177 0.2858 -0.8064 +vn 0.1852 0.9117 -0.3667 +vn 0.1017 0.7708 -0.6289 +vn 0.2663 0.8882 -0.3745 +vn 0.3850 0.5555 -0.7370 +vn 0.7027 0.4766 -0.5283 +vn 0.4853 0.0918 -0.8695 +vn -0.2671 0.6644 -0.6980 +vn -0.3104 0.1666 -0.9359 +vn 0.1904 0.7897 -0.5831 +vn 0.1698 0.9530 -0.2509 +vn -0.0269 0.8208 -0.5706 +vn 0.5853 0.1695 -0.7929 +vn 0.0057 0.6112 -0.7915 +vn -0.1950 0.6088 -0.7690 +vn -0.1852 0.5111 -0.8393 +vn -0.5648 0.8244 0.0374 +vn -0.3278 0.8456 -0.4214 +vn 0.1105 0.9584 -0.2631 +vn 0.8257 0.3130 0.4693 +vn -0.0244 0.7004 -0.7133 +vn 0.3398 0.6446 -0.6848 +vn 0.7139 0.3967 -0.5770 +vn 0.4187 0.5112 -0.7506 +vn -0.1119 0.4504 -0.8858 +vn -0.2270 0.6215 -0.7498 +vn -0.4896 0.6996 -0.5205 +vn 0.3399 0.3158 -0.8858 +vn 0.7173 0.2973 -0.6302 +vn 0.4022 0.1446 -0.9040 +vn -0.3883 0.9038 -0.1801 +vn 0.1570 0.6230 -0.7663 +vn -0.0846 0.2965 -0.9513 +vn 0.0835 0.8876 -0.4530 +vn 0.3915 0.8355 -0.3855 +vn 0.0802 0.5780 -0.8121 +vn 0.1130 0.8964 -0.4286 +vn 0.9689 0.2026 0.1421 +vn -0.1706 0.7689 -0.6162 +vn -0.1705 0.7683 -0.6170 +vn 0.1259 0.4791 -0.8687 +vn 0.8639 0.3912 -0.3173 +vn 0.3856 0.1669 -0.9074 +vn -0.1287 0.8428 -0.5226 +vn -0.0495 0.7713 -0.6346 +vn -0.0859 0.7239 -0.6845 +vn 0.1757 0.7143 -0.6774 +vn 0.0516 0.7647 -0.6423 +vn 0.5817 0.4098 -0.7026 +vn 0.2316 0.8499 -0.4733 +vn -0.1487 0.7696 -0.6209 +vn -0.0448 0.5879 -0.8077 +vn 0.1345 0.4929 -0.8596 +vn 0.5937 0.4106 -0.6920 +vn -0.2052 0.8504 -0.4844 +vn -0.0958 0.8283 -0.5520 +vn 0.5806 -0.1635 -0.7976 +vn -0.5422 0.5433 -0.6410 +vn -0.3827 0.0426 0.9229 +vn 0.0493 0.9004 -0.4323 +vn 0.4359 0.2904 -0.8518 +vn 0.7483 0.5560 -0.3618 +vn 0.7661 0.4540 -0.4550 +vn -0.1888 0.3124 -0.9310 +vn 0.0278 0.2817 -0.9591 +vn 0.6207 0.3193 -0.7160 +vn 0.0020 0.2580 -0.9661 +vn 0.1594 0.8255 -0.5415 +vn -0.0737 0.6784 -0.7310 +vn 0.2444 0.6290 -0.7380 +vn -0.2455 0.5331 -0.8096 +vn 0.6120 0.1772 -0.7708 +vn -0.1226 0.8956 -0.4275 +vn -0.0772 0.8389 -0.5387 +vn -0.0158 0.6708 -0.7415 +vn -0.0495 0.5855 -0.8092 +vn -0.1049 0.5617 -0.8206 +vn -0.0367 0.9049 -0.4239 +vn 0.6290 0.1880 -0.7543 +vn -0.2349 0.9135 -0.3321 +vn -0.0081 0.8534 -0.5212 +vn -0.2562 0.7633 -0.5931 +vn -0.3742 -0.5424 -0.7522 +vn 0.3995 0.8288 -0.3918 +vn 0.2771 0.9246 -0.2615 +vn 0.1068 0.8552 -0.5071 +vn -0.0015 0.2301 -0.9732 +vn -0.1160 0.8229 -0.5563 +vn -0.4098 0.6769 -0.6114 +vn 0.2415 0.3956 -0.8861 +vn -0.0423 0.7258 -0.6866 +vn -0.3057 0.9218 -0.2386 +vn 0.1750 0.9432 -0.2823 +vn 0.5694 0.1163 -0.8138 +vn 0.1412 0.9581 -0.2494 +vn 0.0287 0.5363 -0.8435 +vn 0.0820 0.7215 -0.6875 +vn 0.0189 0.9053 -0.4243 +vn -0.0607 0.6562 -0.7522 +vn -0.3821 0.8559 -0.3484 +vn 0.0403 -0.7073 -0.7058 +vn 0.2406 0.8837 -0.4014 +vn -0.0536 0.6176 -0.7847 +vn 0.3271 0.8275 -0.4564 +vn -0.0629 0.5965 -0.8001 +vn 0.4761 -0.8794 0.0041 +vn -0.0754 0.0556 -0.9956 +vn 0.1139 0.9601 -0.2554 +vn 0.0665 0.6944 -0.7165 +vn 0.1621 0.4501 -0.8781 +vn 0.1707 0.3322 -0.9277 +vn -0.0696 0.8377 -0.5417 +vn 0.2328 0.6919 -0.6834 +vn 0.3056 -0.2379 0.9219 +vn -0.1158 0.9237 -0.3651 +vn -0.3353 0.7305 -0.5949 +vn 0.2809 0.8233 -0.4933 +vn 0.1465 0.4232 -0.8941 +vn 0.1265 0.8473 -0.5159 +vn 0.1427 0.8014 -0.5808 +vn -0.1095 -0.9907 0.0803 +vn 0.2999 0.3929 -0.8693 +vn -0.0970 0.9474 -0.3050 +vn 0.2050 -0.0719 0.9761 +vn 0.1138 0.6974 0.7076 +vn 0.0338 0.6891 -0.7239 +vn 0.5385 0.2750 -0.7965 +vn 0.3641 0.5184 -0.7738 +vn 0.6015 0.3590 -0.7137 +vn -0.1673 0.6139 -0.7715 +vn -0.1577 0.5326 -0.8316 +vn -0.1607 0.5503 -0.8194 +vn -0.0438 0.7662 -0.6411 +vn 0.2325 0.2799 -0.9314 +vn 0.0364 0.9186 -0.3934 +vn 0.0644 -0.0623 -0.9960 +vn 0.3482 0.4849 -0.8023 +vn -0.3503 0.2615 -0.8994 +vn 0.5895 0.7616 -0.2693 +vn 0.2912 0.5617 -0.7744 +vn 0.6279 0.2884 -0.7229 +vn 0.4583 0.8076 -0.3711 +vn -0.2166 0.6403 -0.7370 +vn -0.5197 0.4573 -0.7217 +vn -0.3754 0.7296 -0.5716 +vn 0.2115 0.9124 -0.3504 +vn 0.2660 0.4952 -0.8271 +vn 0.0202 0.6189 -0.7852 +vn -0.0858 0.4772 -0.8746 +vn 0.1471 0.5692 -0.8090 +vn -0.4221 0.6347 -0.6473 +vn -0.2542 0.5692 -0.7819 +vn -0.6432 0.2177 -0.7341 +vn -0.1689 0.4368 -0.8836 +vn -0.3490 0.2409 -0.9056 +vn -0.0129 0.7116 -0.7025 +vn 0.1771 0.9413 -0.2874 +vn 0.2216 0.5084 -0.8321 +vn 0.0718 0.8136 -0.5770 +vn -0.0947 0.9423 -0.3212 +vn 0.7459 0.2830 -0.6030 +vn -0.0470 0.6324 -0.7732 +vn 0.2733 0.3666 -0.8893 +vn 0.2478 0.5582 -0.7918 +vn 0.6898 0.6129 -0.3854 +vn 0.2322 0.6683 -0.7067 +vn 0.4966 0.7028 -0.5093 +vn -0.1858 0.6272 -0.7564 +vn 0.3575 0.4665 -0.8090 +vn -0.0830 0.6042 -0.7925 +vn -0.0511 0.7412 -0.6693 +vn -0.3797 0.5352 -0.7546 +vn 0.3326 -0.9381 0.0964 +vn -0.0051 0.8993 -0.4372 +vn -0.3581 0.8366 -0.4146 +vn -0.6309 0.7636 -0.1376 +vn 0.3486 0.4334 -0.8310 +vn 0.2983 0.2756 -0.9138 +vn -0.6391 -0.7387 -0.2143 +vn 0.3677 0.8393 -0.4005 +vn 0.3201 0.6596 -0.6801 +vn 0.4670 0.5935 -0.6555 +vn 0.0138 0.6215 -0.7833 +vn -0.0159 0.5045 -0.8632 +vn 0.0222 0.7629 -0.6461 +vn 0.3170 0.3378 -0.8862 +vn -0.0050 0.7621 -0.6474 +vn 0.3853 0.4084 -0.8275 +vn -0.4997 -0.7873 -0.3612 +vn -0.3041 0.3030 -0.9032 +vn -0.3540 0.7612 -0.5434 +vn -0.2613 0.9086 -0.3258 +vn 0.5115 0.2682 -0.8164 +vn 0.1072 0.6723 -0.7325 +vn 0.2623 0.7276 -0.6339 +vn 0.0041 0.8976 -0.4407 +vn 0.8804 -0.4694 -0.0676 +vn -0.6343 0.3194 -0.7040 +vn 0.3675 0.2458 -0.8970 +vn -0.0689 0.1451 -0.9870 +vn -0.2855 0.3156 -0.9049 +vn -0.2574 -0.1034 -0.9608 +vn -0.4892 0.3476 -0.7999 +vn -0.4150 0.0734 -0.9069 +vn 0.0278 -0.9747 -0.2216 +vn -0.2173 -0.2696 -0.9382 +vn -0.3975 -0.0395 -0.9167 +vn -0.3963 0.3616 -0.8439 +vn -0.3461 0.3238 -0.8805 +vn -0.4374 0.3601 -0.8240 +vn 0.0431 0.7559 0.6533 +vn -0.0781 0.0523 -0.9956 +vn -0.4651 0.0564 -0.8835 +vn -0.4154 0.5280 -0.7407 +vn -0.3675 -0.0643 -0.9278 +vn -0.3355 0.3133 -0.8884 +vn 0.6378 -0.1516 -0.7551 +vn 0.5305 -0.6780 -0.5088 +vn -0.5646 -0.0721 -0.8222 +vn -0.5857 0.1418 -0.7980 +vn 0.0817 -0.8702 -0.4859 +vn 0.5785 -0.1506 -0.8016 +vn -0.5768 -0.7856 -0.2240 +vn -0.7042 -0.0062 -0.7100 +vn -0.4113 0.2821 -0.8667 +vn -0.5660 -0.6539 -0.5020 +vn 0.4166 0.0162 -0.9090 +vn -0.2664 0.7633 -0.5885 +vn -0.0626 0.0578 -0.9964 +vn -0.1492 0.3070 -0.9399 +vn -0.3632 0.0792 -0.9283 +vn -0.4643 0.2453 -0.8510 +vn 0.4066 -0.6906 0.5981 +vn 0.5199 -0.3210 -0.7917 +vn -0.4375 -0.0329 -0.8986 +vn -0.5631 -0.6777 -0.4729 +vn 0.3965 -0.2718 -0.8769 +vn 0.3101 -0.0512 -0.9493 +vn -0.2809 -0.4507 -0.8473 +vn 0.0109 -0.9992 -0.0389 +vn -0.6911 -0.7227 -0.0044 +vn -0.4032 -0.3365 -0.8510 +vn -0.5707 0.2578 -0.7796 +vn -0.6588 0.7014 -0.2721 +vn 0.3799 -0.7118 -0.5908 +vn -0.7426 -0.3811 -0.5507 +vn 0.6785 -0.0765 -0.7306 +vn -0.3356 0.3533 -0.8732 +vn 0.2725 0.1107 -0.9558 +vn 0.3134 -0.5280 -0.7893 +vn 0.3685 -0.2870 -0.8842 +vn 0.0515 0.1464 -0.9879 +vn 0.2584 0.2209 -0.9404 +vn -0.4076 -0.8355 -0.3686 +vn -0.1730 0.2318 -0.9573 +vn -0.5329 -0.6047 -0.5918 +vn 0.5378 -0.6802 -0.4981 +vn -0.1389 0.2052 -0.9688 +vn -0.4610 -0.5246 -0.7157 +vn -0.8850 -0.0341 -0.4642 +vn -0.1090 0.9859 -0.1268 +vn -0.3799 -0.6341 -0.6735 +vn -0.5759 -0.5835 -0.5726 +vn 0.3601 -0.7863 -0.5020 +vn 0.2847 -0.5455 -0.7883 +vn 0.1519 -0.1625 -0.9749 +vn -0.5469 0.0577 -0.8352 +vn 0.0832 -0.5898 -0.8032 +vn -0.0954 -0.3235 -0.9414 +vn -0.3617 -0.4019 -0.8412 +vn 0.8307 0.3665 -0.4191 +vn -0.1323 -0.7175 -0.6839 +vn 0.1116 -0.1669 -0.9796 +vn -0.0611 0.3458 -0.9363 +vn -0.0744 0.4022 -0.9125 +vn -0.0321 0.4818 -0.8757 +vn 0.2496 -0.9276 -0.2780 +vn 0.0520 0.1274 -0.9905 +vn 0.0885 -0.9044 -0.4174 +vn -0.0695 0.7287 -0.6813 +vn 0.0524 -0.8849 -0.4628 +vn -0.0743 -0.9954 -0.0606 +vn -0.0175 0.1544 -0.9879 +vn -0.6916 0.3147 -0.6501 +vn -0.8199 -0.0928 -0.5650 +vn 0.1033 -0.5200 -0.8479 +vn -0.0160 -0.0779 -0.9968 +vn -0.1012 0.2937 -0.9505 +vn -0.1930 -0.0319 -0.9807 +vn 0.0940 -0.4492 -0.8885 +vn -0.3555 0.3061 -0.8831 +vn -0.8297 0.0755 -0.5531 +vn -0.5221 -0.4171 -0.7439 +vn -0.4887 -0.0620 -0.8702 +vn -0.4975 -0.0419 -0.8665 +vn -0.1643 -0.1515 -0.9747 +vn -0.4275 -0.6877 -0.5867 +vn -0.5990 -0.7017 -0.3857 +vn -0.1152 0.2310 -0.9661 +vn 0.1099 -0.6280 -0.7704 +vn 0.0304 -0.0061 -0.9995 +vn 0.0272 -0.9992 -0.0306 +vn -0.8170 0.5051 -0.2782 +vn -0.7586 0.2977 -0.5796 +vn -0.1633 -0.1465 -0.9756 +vn 0.3715 -0.6315 -0.6806 +vn 0.2617 -0.5054 -0.8222 +vn 0.2927 -0.4226 -0.8578 +vn 0.0143 0.2104 -0.9775 +vn 0.1475 0.3868 -0.9103 +vn 0.1058 -0.0315 -0.9939 +vn -0.5385 -0.0754 -0.8392 +vn -0.5974 0.1570 -0.7865 +vn -0.4824 -0.6181 -0.6207 +vn -0.1563 0.0222 -0.9875 +vn -0.4010 -0.0422 -0.9151 +vn -0.1396 0.0712 -0.9876 +vn -0.0958 0.1960 -0.9759 +vn -0.2762 0.1604 -0.9476 +vn -0.4138 0.5280 -0.7416 +vn -0.3820 0.3750 -0.8447 +vn -0.3488 0.1349 -0.9274 +vn 0.2886 0.1654 -0.9431 +vn -0.5766 0.1867 -0.7954 +vn -0.3704 -0.1023 -0.9232 +vn -0.0997 0.0637 -0.9930 +vn -0.6010 -0.4800 -0.6390 +vn -0.0849 0.0071 -0.9964 +vn -0.0208 -0.1406 -0.9898 +vn -0.5282 0.1285 -0.8394 +vn -0.0307 -0.0882 -0.9956 +vn -0.7634 -0.5912 -0.2602 +vn 0.5065 0.0656 -0.8598 +vn -0.1938 0.0649 -0.9789 +vn -0.2825 0.1976 -0.9387 +vn -0.2921 0.3287 -0.8981 +vn -0.0910 -0.2578 -0.9619 +vn -0.1891 0.0697 -0.9795 +vn -0.1641 0.0879 -0.9825 +vn 0.2223 -0.7125 -0.6655 +vn 0.1173 -0.1109 -0.9869 +vn 0.1109 -0.0830 -0.9904 +vn -0.1871 0.1353 -0.9730 +vn -0.3007 -0.0057 -0.9537 +vn 0.0619 0.4287 -0.9013 +vn -0.2542 0.1672 -0.9526 +vn 0.1303 -0.2308 -0.9642 +vn 0.0393 -0.9826 0.1816 +vn -0.1213 0.4117 -0.9032 +vn -0.3404 0.3433 -0.8754 +vn -0.7499 0.0716 -0.6576 +vn -0.6299 0.1819 -0.7551 +vn -0.7987 -0.1142 -0.5908 +vn -0.8340 -0.2429 -0.4954 +vn 0.1367 -0.5413 -0.8296 +vn -0.4968 0.8517 0.1666 +vn -0.2339 -0.1735 -0.9566 +vn -0.2121 0.2694 -0.9394 +vn 0.0918 -0.5260 -0.8455 +vn 0.0072 -0.1282 -0.9917 +vn -0.0175 -0.1581 -0.9873 +vn -0.4515 0.3448 -0.8230 +vn -0.5948 0.1184 -0.7951 +vn -0.0473 -0.0858 -0.9952 +vn -0.0315 -0.3456 -0.9378 +vn 0.1508 -0.3838 -0.9110 +vn 0.1543 -0.3971 -0.9047 +vn 0.3826 0.5115 0.7694 +vn 0.5597 -0.3899 -0.7312 +vn 0.2736 -0.8790 -0.3905 +vn 0.1474 -0.4823 -0.8635 +vn -0.6823 -0.2008 -0.7030 +vn -0.1815 0.1498 -0.9719 +vn 0.5168 -0.3502 -0.7812 +vn 0.1622 -0.0481 -0.9856 +vn 0.3823 0.5786 -0.7205 +vn 0.6078 -0.7886 -0.0935 +vn 0.2040 -0.6878 0.6966 +vn -0.0134 -0.9999 0.0079 +vn -0.6565 0.3423 -0.6722 +vn -0.0544 0.4532 -0.8897 +vn -0.6128 -0.0687 -0.7872 +vn 0.3094 -0.7497 -0.5850 +vn 0.2281 -0.4824 -0.8457 +vn -0.6472 -0.2018 -0.7351 +vn -0.3067 0.1816 -0.9343 +vn 0.3555 0.0425 -0.9337 +vn 0.3687 -0.0310 -0.9290 +vn 0.4170 0.4775 -0.7733 +vn 0.1795 -0.2277 -0.9570 +vn -0.3662 0.0841 -0.9267 +vn 0.4785 -0.4129 -0.7750 +vn -0.4176 -0.0191 -0.9084 +vn -0.2598 -0.4605 -0.8488 +vn -0.3787 -0.5646 -0.7333 +vn -0.5703 0.2575 -0.7800 +vn 0.1026 -0.9025 -0.4184 +vn -0.0079 -0.4437 -0.8961 +vn -0.0149 -0.4530 -0.8914 +vn -0.1096 -0.8463 -0.5214 +vn 0.2089 -0.3717 -0.9046 +vn -0.6609 -0.3651 -0.6557 +vn -0.6473 0.2830 -0.7078 +vn -0.2685 -0.7487 -0.6061 +vn -0.1082 -0.5796 -0.8077 +vn -0.0810 0.2922 -0.9529 +vn -0.4555 -0.2710 -0.8480 +vn 0.6208 -0.0694 -0.7809 +vn -0.1114 -0.7653 -0.6340 +vn -0.2300 -0.2114 -0.9500 +vn -0.3337 -0.2720 -0.9026 +vn -0.2758 -0.6617 -0.6972 +vn -0.4811 -0.8764 -0.0206 +vn -0.4453 -0.4408 -0.7794 +vn -0.9818 0.1516 0.1144 +vn 0.1962 -0.4658 -0.8629 +vn -0.4553 0.7592 0.4650 +vn -0.5476 -0.3744 -0.7483 +vn -0.2951 -0.2606 -0.9192 +vn -0.4140 -0.2908 -0.8625 +vn -0.1845 -0.5249 -0.8309 +vn 0.7288 0.1757 -0.6619 +vn 0.6599 -0.2152 -0.7199 +vn 0.5530 -0.0003 -0.8332 +vn 0.0572 -0.1327 -0.9895 +vn -0.3474 0.2048 -0.9151 +vn -0.5141 0.4783 -0.7120 +vn -0.0337 -0.6400 -0.7676 +vn -0.5098 0.4541 -0.7307 +vn -0.6413 -0.6262 -0.4434 +vn -0.3356 0.3175 -0.8869 +vn -0.1905 -0.7902 -0.5825 +vn 0.2532 -0.6244 -0.7389 +vn 0.2430 -0.4590 -0.8546 +vn -0.0177 -0.9337 0.3576 +vn -0.8111 0.2037 -0.5482 +vn 0.5753 0.1576 -0.8026 +vn 0.4124 -0.7732 -0.4817 +vn -0.3335 -0.2716 -0.9028 +vn -0.5543 -0.2636 -0.7894 +vn -0.3805 -0.4504 -0.8077 +vn 0.5509 0.1364 -0.8234 +vn -0.0248 -0.2072 -0.9780 +vn -0.5080 -0.6500 -0.5652 +vn 0.4923 -0.1646 -0.8547 +vn 0.6583 0.0875 -0.7476 +vn -0.3621 0.1469 0.9205 +vn 0.2174 -0.9216 -0.3214 +vn -0.0286 -0.2761 -0.9607 +vn -0.1494 -0.5061 -0.8494 +vn -0.2591 -0.3035 -0.9169 +vn 0.1415 -0.3970 -0.9068 +vn -0.5939 -0.1999 -0.7793 +vn -0.4052 -0.6112 -0.6799 +vn 0.2335 0.0433 -0.9714 +vn 0.2822 -0.6618 -0.6946 +vn -0.4730 -0.2390 0.8480 +vn -0.6878 -0.0977 -0.7193 +vn -0.0238 0.1251 0.9919 +vn 0.6657 -0.2094 -0.7163 +vn 0.5385 0.0574 -0.8406 +vn -0.9627 0.0192 -0.2699 +vn 0.9200 -0.1313 -0.3693 +vn -0.0591 -0.2408 -0.9688 +vn 0.1004 0.0880 -0.9911 +vn -0.0494 -0.6830 -0.7288 +vn -0.0117 -0.9984 0.0558 +vn 0.5081 -0.4890 -0.7090 +vn 0.5390 -0.2297 -0.8104 +vn 0.8061 -0.2750 -0.5240 +vn 0.0475 -0.2531 -0.9663 +vn -0.0435 -0.0127 -0.9990 +vn 0.6499 -0.2587 -0.7146 +vn 0.5199 -0.0463 -0.8530 +vn 0.4076 0.0886 -0.9088 +vn -0.2906 0.1339 -0.9474 +vn -0.1706 0.4225 -0.8902 +vn -0.3841 -0.2731 -0.8820 +vn 0.2384 0.0634 -0.9691 +vn 0.3760 -0.7368 -0.5619 +vn -0.5501 0.2174 -0.8063 +vn 0.3353 0.0483 -0.9409 +vn -0.6796 0.4181 -0.6027 +vn -0.2223 0.0399 -0.9742 +vn 0.1755 -0.9801 -0.0932 +vn 0.4825 0.0144 -0.8758 +vn 0.1506 -0.4646 -0.8726 +vn 0.1088 0.2269 -0.9678 +vn 0.2304 0.0568 -0.9714 +vn -0.7757 -0.5860 -0.2342 +vn -0.7375 -0.1752 -0.6522 +vn -0.4361 -0.2295 -0.8701 +vn -0.2499 -0.3125 -0.9165 +vn -0.5439 -0.7489 -0.3786 +vn -0.3559 0.4368 -0.8262 +vn 0.0217 -0.1136 -0.9933 +vn -0.5437 -0.6882 -0.4803 +vn -0.5687 0.3954 -0.7213 +vn 0.3717 -0.6379 -0.6744 +vn 0.6501 -0.4424 -0.6177 +vn 0.6722 -0.1168 -0.7311 +vn 0.7468 -0.1864 -0.6383 +vn 0.7743 -0.1960 -0.6016 +vn 0.4934 -0.0470 -0.8686 +vn 0.0265 -0.3521 -0.9356 +vn -0.0554 -0.4367 -0.8979 +vn 0.0242 -0.2932 -0.9557 +vn -0.0687 -0.2548 -0.9645 +vn -0.2128 -0.1063 -0.9713 +vn 0.0220 -0.6169 -0.7867 +vn 0.7985 0.4583 -0.3903 +vn 0.4530 -0.4431 -0.7736 +vn 0.5248 -0.4901 -0.6960 +vn 0.3759 0.0862 -0.9227 +vn 0.6137 0.0102 -0.7895 +vn 0.6131 0.1083 -0.7826 +vn 0.3368 0.0666 -0.9392 +vn 0.3851 0.1476 -0.9110 +vn 0.3227 0.0919 -0.9420 +vn -0.5157 0.0191 -0.8565 +vn -0.3806 -0.4081 -0.8298 +vn 0.0458 0.1964 -0.9795 +vn -0.7093 0.5028 -0.4941 +vn -0.8735 -0.2698 -0.4052 +vn -0.3275 -0.7749 -0.5406 +vn -0.2507 0.1644 -0.9540 +vn -0.5281 -0.0589 -0.8471 +vn -0.2467 -0.7547 -0.6079 +vn -0.7992 0.4947 -0.3413 +vn 0.3962 -0.6386 -0.6597 +vn 0.5362 -0.0863 -0.8397 +vn 0.4536 -0.0386 -0.8904 +vn 0.0125 -0.9726 0.2323 +vn 0.5942 -0.7112 -0.3756 +vn -0.4476 0.3030 -0.8413 +vn -0.0084 0.1453 -0.9894 +vn 0.4767 -0.4306 -0.7663 +vn 0.4825 -0.4149 -0.7714 +vn 0.2565 -0.6779 -0.6890 +vn 0.3319 0.1009 -0.9379 +vn 0.4216 -0.2910 -0.8589 +vn 0.4620 -0.2341 -0.8555 +vn 0.4305 -0.1787 -0.8847 +vn 0.4634 0.0174 -0.8860 +vn 0.4468 0.0421 -0.8936 +vn -0.4786 0.8726 0.0981 +vn -0.1412 -0.1117 -0.9837 +vn -0.2607 -0.9521 -0.1598 +vn 0.5374 -0.6410 -0.5481 +vn 0.1390 -0.1961 -0.9707 +vn -0.4446 0.3498 -0.8246 +vn -0.0096 -0.8271 -0.5619 +vn -0.8188 0.5013 -0.2796 +vn -0.5777 -0.0440 -0.8151 +vn -0.6226 -0.4272 -0.6556 +vn 0.6593 -0.0589 -0.7495 +vn 0.2752 -0.5065 -0.8171 +vn 0.2571 -0.1143 -0.9596 +vn 0.4472 0.1883 -0.8744 +vn -0.6175 -0.1063 -0.7793 +vn -0.1146 -0.8415 -0.5279 +vn -0.1099 -0.5714 -0.8133 +vn 0.2097 -0.6428 -0.7367 +vn 0.2172 -0.5528 -0.8045 +vn 0.3133 -0.1549 -0.9369 +vn 0.3157 -0.1365 -0.9390 +vn 0.4378 0.2021 -0.8760 +vn 0.4383 0.1995 -0.8764 +vn 0.4191 0.1505 -0.8954 +vn 0.4641 -0.0308 -0.8852 +vn 0.4146 0.1175 -0.9024 +vn 0.0476 -0.1281 -0.9906 +vn -0.0893 -0.1037 0.9906 +vn 0.0851 0.1706 -0.9817 +vn -0.7432 0.1471 -0.6527 +vn 0.1864 -0.9748 0.1225 +vn 0.1442 0.0063 -0.9895 +vn 0.3955 -0.2664 -0.8790 +vn 0.3723 -0.2565 -0.8920 +vn 0.3638 -0.1183 -0.9239 +vn 0.3544 -0.1365 -0.9251 +vn -0.2121 -0.2109 -0.9542 +vn -0.1709 -0.4855 -0.8574 +vn 0.0260 0.1856 -0.9823 +vn -0.2201 0.2995 -0.9283 +vn -0.3592 0.4813 -0.7996 +vn -0.1504 0.1118 -0.9823 +vn 0.4399 -0.0079 -0.8980 +vn 0.5355 -0.5445 -0.6456 +vn 0.4734 -0.4210 -0.7737 +vn 0.5870 -0.3997 -0.7041 +vn 0.2040 -0.5481 -0.8112 +vn 0.4383 -0.2047 -0.8752 +vn 0.4275 0.0058 -0.9040 +vn 0.4847 -0.0469 -0.8734 +vn 0.4621 0.1303 -0.8772 +vn 0.4228 0.0366 -0.9055 +vn 0.7826 -0.2763 -0.5578 +vn -0.6118 0.6652 -0.4280 +vn 0.2835 0.2771 -0.9181 +vn 0.1307 0.4658 -0.8752 +vn -0.2930 -0.1902 -0.9370 +vn -0.0356 0.2535 -0.9667 +vn -0.1992 -0.5296 -0.8245 +vn 0.3803 -0.4043 -0.8318 +vn 0.3628 -0.1921 -0.9118 +vn 0.1394 -0.4309 -0.8916 +vn 0.2489 -0.1180 -0.9613 +vn 0.2771 0.1498 -0.9491 +vn 0.2056 0.0373 -0.9779 +vn 0.4758 -0.0296 -0.8790 +vn 0.9210 0.3113 -0.2340 +vn -0.3724 0.5979 -0.7098 +vn 0.2146 -0.4369 -0.8735 +vn -0.3090 -0.4042 -0.8609 +vn 0.8928 0.3021 0.3341 +vn -0.2368 -0.1467 -0.9604 +vn -0.3092 0.2296 -0.9229 +vn -0.0846 -0.8423 0.5323 +vn -0.1333 0.2814 -0.9503 +vn -0.2002 -0.4898 -0.8486 +vn -0.4182 0.2901 -0.8608 +vn -0.1928 -0.2098 -0.9586 +vn 0.4784 -0.4236 -0.7692 +vn 0.4064 -0.2197 -0.8869 +vn 0.2242 -0.3345 -0.9153 +vn 0.3116 0.0601 -0.9483 +vn 0.3608 0.2275 -0.9045 +vn 0.3234 -0.1889 -0.9272 +vn -0.0885 0.4776 -0.8741 +vn -0.0430 0.2891 -0.9563 +vn -0.0229 0.0081 -0.9997 +vn 0.0142 -0.3418 -0.9397 +vn -0.2606 0.1263 -0.9572 +vn -0.5243 -0.1357 -0.8407 +vn -0.1620 -0.4212 -0.8924 +vn -0.1756 0.3917 -0.9032 +vn -0.5418 -0.2767 -0.7937 +vn 0.1555 -0.4437 -0.8826 +vn 0.1898 -0.2187 -0.9572 +vn 0.1185 -0.1034 -0.9876 +vn 0.0162 -0.3990 -0.9168 +vn 0.2935 0.1827 -0.9383 +vn 0.3481 0.1951 -0.9169 +vn 0.2589 -0.0655 -0.9637 +vn 0.1867 -0.0343 -0.9818 +vn -0.5291 -0.0310 -0.8480 +vn -0.4709 -0.0564 -0.8804 +vn -0.1586 0.4588 -0.8743 +vn -0.7857 -0.4136 0.4600 +vn 0.7077 0.0794 -0.7021 +vn 0.3254 -0.1869 -0.9269 +vn 0.1383 -0.4313 -0.8915 +vn 0.1164 -0.1519 -0.9815 +vn 0.1774 -0.6731 -0.7180 +vn 0.2741 -0.5765 -0.7698 +vn 0.3439 -0.3231 -0.8816 +vn 0.2694 -0.2440 -0.9316 +vn 0.2884 -0.4017 -0.8692 +vn 0.3452 0.1184 -0.9310 +vn 0.0163 -0.3992 -0.9167 +vn -0.2482 -0.2037 -0.9470 +vn -0.1857 0.1485 -0.9713 +vn -0.6780 0.3579 -0.6421 +vn -0.3739 0.0255 -0.9271 +vn -0.2658 -0.3644 -0.8925 +vn -0.5650 -0.2280 -0.7929 +vn 0.3275 -0.3684 -0.8701 +vn 0.1922 0.0315 -0.9809 +vn 0.6666 0.0036 -0.7454 +vn 0.4109 0.0734 -0.9087 +vn 0.6648 -0.2145 -0.7156 +vn 0.4199 0.1644 -0.8926 +vn 0.4682 0.2161 -0.8568 +vn 0.4434 0.0099 -0.8963 +vn -0.2547 -0.5164 -0.8176 +vn -0.0553 -0.4440 -0.8943 +vn -0.0608 -0.9964 0.0597 +vn 0.2354 0.2594 -0.9366 +vn 0.2172 0.1793 -0.9595 +vn -0.6499 0.1727 -0.7402 +vn -0.0115 -0.3720 -0.9282 +vn 0.0695 -0.1017 -0.9924 +vn 0.0074 -0.4527 -0.8916 +vn 0.0723 -0.6396 -0.7653 +vn 0.3793 -0.0430 -0.9243 +vn 0.3652 -0.1091 -0.9245 +vn -0.7939 -0.2739 -0.5428 +vn -0.2552 0.0721 -0.9642 +vn -0.3337 0.0244 -0.9424 +vn -0.0392 -0.2602 -0.9648 +vn -0.2360 0.0685 -0.9693 +vn -0.5391 0.1934 -0.8198 +vn 0.2274 0.2481 -0.9417 +vn -0.3839 -0.1902 -0.9036 +vn -0.1794 0.0051 -0.9838 +vn 0.3529 -0.4876 -0.7986 +vn 0.4522 0.3548 -0.8183 +vn 0.0317 -0.4451 -0.8949 +vn 0.2102 0.0738 -0.9749 +vn 0.1846 -0.3762 -0.9080 +vn 0.2337 -0.4238 -0.8751 +vn 0.3376 -0.3636 -0.8682 +vn 0.4795 -0.1405 -0.8662 +vn 0.5748 0.0978 -0.8124 +vn 0.4203 0.0286 -0.9069 +vn 0.0280 -0.9996 0.0086 +vn 0.3767 -0.9242 -0.0629 +vn -0.0804 0.0313 -0.9963 +vn 0.0107 -0.2401 -0.9707 +vn -0.3468 -0.3035 -0.8875 +vn 0.1974 -0.8540 -0.4813 +vn -0.0796 -0.3695 -0.9258 +vn 0.1453 -0.4666 -0.8725 +vn 0.3169 0.1243 -0.9403 +vn 0.3763 0.0215 -0.9263 +vn 0.3224 -0.3750 -0.8692 +vn 0.4175 0.1641 -0.8937 +vn 0.4054 0.1514 -0.9015 +vn -0.3084 0.2313 -0.9227 +vn 0.0712 0.0914 -0.9933 +vn -0.5438 0.2749 -0.7929 +vn 0.2254 0.1204 -0.9668 +vn 0.6032 0.0427 -0.7965 +vn 0.1934 -0.5625 -0.8039 +vn 0.2022 0.0036 -0.9793 +vn 0.0487 -0.3849 -0.9217 +vn 0.2313 -0.5633 -0.7932 +vn -0.0393 -0.3231 -0.9456 +vn 0.3236 -0.1607 -0.9325 +vn 0.1053 0.0818 -0.9911 +vn 0.2350 -0.0277 -0.9716 +vn -0.0953 -0.7741 -0.6259 +vn -0.6244 -0.3274 -0.7092 +vn 0.0571 0.0252 -0.9980 +vn -0.4298 0.4727 -0.7693 +vn -0.6157 0.0494 -0.7864 +vn -0.2197 -0.9591 -0.1786 +vn 0.1973 -0.3203 -0.9265 +vn 0.1523 0.0703 -0.9858 +vn 0.0791 -0.3325 -0.9398 +vn 0.2463 -0.6807 -0.6899 +vn -0.1208 -0.2863 -0.9505 +vn 0.0249 0.0074 -0.9997 +vn 0.3226 -0.3751 -0.8690 +vn 0.2322 -0.1160 -0.9657 +vn 0.2255 -0.1030 -0.9688 +vn 0.2185 0.1760 -0.9598 +vn -0.5826 0.2997 -0.7555 +vn -0.2042 -0.2195 -0.9540 +vn -0.9530 0.0655 -0.2956 +vn 0.1727 -0.2171 -0.9607 +vn 0.3932 -0.6078 -0.6899 +vn 0.3587 -0.2993 -0.8842 +vn 0.1131 -0.2656 -0.9574 +vn 0.1231 -0.4347 -0.8921 +vn 0.0814 -0.3862 -0.9188 +vn 0.2525 -0.0265 -0.9672 +vn 0.3349 0.2486 -0.9089 +vn 0.2447 -0.0174 -0.9695 +vn -0.2509 0.0022 -0.9680 +vn 0.2288 0.1813 -0.9564 +vn 0.0984 0.4071 -0.9081 +vn 0.0498 0.3386 -0.9396 +vn 0.0362 -0.0148 -0.9992 +vn -0.3751 -0.2239 -0.8995 +vn -0.5383 0.0839 -0.8386 +vn 0.2696 0.2642 -0.9260 +vn 0.0053 -0.4154 -0.9096 +vn 0.3748 0.1630 -0.9127 +vn 0.3671 -0.3040 -0.8791 +vn 0.3587 -0.0809 -0.9300 +vn 0.4073 -0.3198 -0.8555 +vn 0.4020 -0.2468 -0.8817 +vn 0.5194 -0.1512 -0.8410 +vn 0.4634 -0.3461 -0.8158 +vn 0.3463 -0.2152 -0.9131 +vn 0.2864 0.1975 -0.9375 +vn 0.0859 0.0814 -0.9930 +vn -0.0290 0.0506 -0.9983 +vn -0.1482 0.5178 -0.8426 +vn -0.2997 0.4276 -0.8529 +vn -0.2588 0.0262 -0.9656 +vn 0.1432 -0.5885 -0.7957 +vn 0.1918 -0.7929 -0.5785 +vn 0.1698 -0.2188 -0.9609 +vn 0.1901 0.0266 -0.9814 +vn 0.3292 0.1787 -0.9272 +vn 0.2912 0.1531 -0.9443 +vn 0.3180 0.0193 -0.9479 +vn 0.2091 0.0327 -0.9773 +vn 0.3573 0.3006 -0.8843 +vn -0.2810 -0.4656 -0.8392 +vn -0.7797 -0.0960 0.6188 +vn -0.9727 0.2273 -0.0464 +vn 0.0234 0.3236 -0.9459 +vn 0.1370 0.4376 -0.8887 +vn -0.2495 0.5184 -0.8179 +vn -0.5537 -0.4735 -0.6850 +vn -0.3389 0.4350 -0.8342 +vn 0.0917 -0.6050 -0.7909 +vn 0.1210 -0.7910 -0.5998 +vn 0.0938 -0.7728 -0.6276 +vn 0.1961 0.0624 -0.9786 +vn 0.0537 -0.4738 -0.8790 +vn -0.1258 -0.6195 -0.7748 +vn 0.1353 -0.3917 -0.9101 +vn -0.1802 0.4927 -0.8513 +vn -0.4190 -0.2647 -0.8685 +vn 0.5901 0.1129 -0.7994 +vn -0.0102 0.0693 -0.9975 +vn -0.2368 0.3827 -0.8930 +vn 0.0397 -0.1187 -0.9921 +vn 0.1504 -0.1876 -0.9707 +vn 0.1628 0.0755 -0.9838 +vn 0.1003 -0.6019 -0.7923 +vn 0.1724 -0.4568 -0.8727 +vn 0.0183 -0.4528 -0.8914 +vn 0.0802 -0.2864 -0.9548 +vn 0.2388 0.2063 -0.9489 +vn 0.1461 -0.0582 -0.9875 +vn 0.5285 -0.1823 -0.8291 +vn 0.1963 0.3916 -0.8990 +vn 0.0200 -0.9993 -0.0309 +vn 0.0521 -0.5585 -0.8278 +vn 0.0801 -0.2338 -0.9690 +vn 0.0640 -0.3227 -0.9443 +vn 0.0357 -0.6817 -0.7308 +vn 0.2311 0.0727 -0.9702 +vn 0.1017 -0.3020 -0.9479 +vn 0.1304 -0.2719 -0.9535 +vn 0.2282 -0.3630 -0.9034 +vn 0.4655 0.1335 -0.8749 +vn 0.4807 0.2039 -0.8528 +vn 0.4042 0.3835 -0.8304 +vn 0.3646 0.1509 -0.9188 +vn -0.5503 -0.2593 -0.7937 +vn 0.1735 0.1988 -0.9646 +vn -0.6827 -0.4308 -0.5902 +vn -0.6343 0.0135 -0.7730 +vn 0.1950 0.1728 -0.9655 +vn 0.1796 0.0594 -0.9819 +vn 0.1794 -0.0529 -0.9824 +vn 0.2978 -0.7181 -0.6290 +vn 0.3482 -0.2883 -0.8920 +vn -0.0127 0.0272 -0.9996 +vn 0.1117 -0.2814 -0.9531 +vn 0.1395 -0.0607 -0.9884 +vn -0.3942 -0.6511 -0.6486 +vn -0.4150 -0.7553 -0.5072 +vn -0.3006 -0.2445 -0.9219 +vn -0.2721 -0.3570 -0.8936 +vn -0.4179 0.3461 -0.8400 +vn 0.0443 -0.0525 -0.9976 +vn -0.1005 0.0777 -0.9919 +vn 0.0743 -0.5224 -0.8495 +vn 0.1414 0.0256 -0.9896 +vn 0.2608 -0.2159 -0.9409 +vn 0.1786 -0.7475 -0.6398 +vn 0.0730 -0.2718 -0.9596 +vn 0.3606 -0.3223 -0.8753 +vn 0.1979 -0.3720 -0.9069 +vn 0.1634 0.0480 -0.9854 +vn 0.3761 -0.1674 -0.9113 +vn 0.2623 -0.2146 -0.9408 +vn 0.2428 -0.1711 -0.9549 +vn 0.3184 0.0352 -0.9473 +vn -0.4686 0.0580 -0.8815 +vn -0.6802 0.1059 -0.7254 +vn 0.1003 -0.3989 -0.9115 +vn -0.1599 0.2750 -0.9480 +vn 0.3883 -0.2061 -0.8982 +vn -0.5095 0.1428 0.8485 +vn -0.8523 -0.1529 -0.5001 +vn -0.3795 -0.1911 -0.9052 +vn 0.2252 -0.7581 -0.6121 +vn 0.0080 -0.4145 -0.9100 +vn 0.1943 -0.6113 -0.7672 +vn 0.0345 -0.2967 -0.9543 +vn 0.2110 -0.2631 -0.9414 +vn 0.3618 -0.3007 -0.8824 +vn 0.3849 -0.1696 -0.9072 +vn 0.3524 -0.0092 -0.9358 +vn 0.2089 0.2547 -0.9442 +vn 0.0688 0.0523 -0.9963 +vn -0.4140 -0.3367 -0.8457 +vn 0.0322 0.0608 -0.9976 +vn 0.0764 -0.2295 -0.9703 +vn 0.2637 -0.2544 -0.9305 +vn 0.3229 -0.3641 -0.8736 +vn 0.2115 0.1308 -0.9686 +vn 0.2097 -0.2766 -0.9378 +vn 0.9085 -0.4078 -0.0915 +vn -0.3464 0.0143 -0.9380 +vn -0.1872 0.2027 -0.9612 +vn 0.3055 0.2494 -0.9189 +vn 0.2102 0.2284 -0.9506 +vn 0.2116 -0.4431 -0.8711 +vn 0.0956 -0.1741 -0.9801 +vn 0.1049 -0.4712 -0.8758 +vn 0.1498 -0.0498 -0.9875 +vn 0.2398 -0.2259 -0.9442 +vn 0.2081 0.1131 -0.9715 +vn 0.0809 -0.1917 -0.9781 +vn 0.1490 0.2752 -0.9498 +vn 0.1458 0.3533 -0.9241 +vn 0.0156 0.2406 -0.9705 +vn -0.1496 0.0658 -0.9866 +vn 0.3709 -0.1517 -0.9162 +vn -0.4157 -0.3047 -0.8570 +vn -0.3737 -0.2593 -0.8906 +vn 0.3551 -0.2064 -0.9118 +vn 0.1351 -0.5085 -0.8504 +vn 0.1345 -0.3942 -0.9091 +vn -0.0508 -0.4167 -0.9076 +vn 0.1404 0.1027 -0.9847 +vn 0.0501 -0.0411 -0.9979 +vn 0.1421 0.2226 -0.9645 +vn -0.8165 0.5055 -0.2789 +vn -0.3079 -0.2513 -0.9176 +vn 0.2029 -0.9753 -0.0873 +vn -0.2245 -0.3644 -0.9038 +vn -0.2185 -0.2782 -0.9354 +vn 0.1103 0.0662 -0.9917 +vn 0.0350 -0.2622 -0.9644 +vn 0.0238 -0.8034 -0.5950 +vn 0.0350 -0.8112 -0.5837 +vn 0.2603 -0.1534 -0.9533 +vn 0.0323 -0.1654 -0.9857 +vn 0.1315 -0.3267 -0.9359 +vn 0.1316 0.3749 -0.9177 +vn 0.1528 0.2450 -0.9574 +vn -0.6938 -0.6671 -0.2713 +vn 0.0188 0.2390 -0.9708 +vn -0.0080 0.0520 -0.9986 +vn -0.4159 0.3347 -0.8456 +vn -0.9256 0.0914 -0.3674 +vn 0.1795 -0.0817 -0.9804 +vn 0.0609 -0.3294 -0.9422 +vn 0.1756 0.0398 -0.9837 +vn 0.0693 -0.2393 -0.9685 +vn 0.5026 -0.3086 -0.8076 +vn 0.2195 -0.0593 -0.9738 +vn 0.0158 -0.2274 -0.9737 +vn 0.4709 -0.7328 -0.4912 +vn -0.4474 -0.6719 -0.5903 +vn -0.1703 0.3578 -0.9181 +vn -0.4001 -0.4986 -0.7690 +vn 0.3882 0.1810 -0.9036 +vn -0.2387 0.3990 -0.8853 +vn -0.6828 0.2643 -0.6811 +vn 0.1507 -0.2677 -0.9516 +vn -0.1316 -0.7522 -0.6457 +vn -0.1242 -0.2695 -0.9550 +vn 0.0314 -0.4808 -0.8763 +vn 0.1142 -0.6615 -0.7412 +vn 0.1667 -0.2976 -0.9400 +vn -0.0282 -0.0296 -0.9992 +vn 0.1862 0.3956 -0.8993 +vn -0.2321 -0.1022 -0.9673 +vn -0.3610 -0.7549 -0.5476 +vn 0.1556 -0.4583 -0.8751 +vn 0.1126 0.0684 -0.9913 +vn 0.0391 -0.4480 -0.8932 +vn 0.2012 -0.0564 -0.9779 +vn 0.3628 -0.3430 -0.8664 +vn 0.1991 -0.0584 -0.9782 +vn 0.1117 -0.0243 -0.9934 +vn 0.2558 -0.0438 -0.9657 +vn -0.1357 0.2000 -0.9703 +vn 0.0302 0.9275 -0.3727 +vn -0.8092 0.4713 -0.3507 +vn 0.1110 -0.6497 -0.7521 +vn 0.1766 0.0733 -0.9815 +vn -0.8508 -0.4974 0.1694 +vn 0.4553 0.1399 -0.8793 +vn 0.1189 -0.8141 -0.5684 +vn 0.0700 0.3607 -0.9301 +vn 0.2521 -0.3678 -0.8951 +vn 0.0024 -0.4615 -0.8871 +vn -0.0300 -0.1599 -0.9867 +vn 0.3086 -0.2716 -0.9116 +vn 0.3136 -0.0165 -0.9494 +vn 0.3731 -0.3095 -0.8747 +vn 0.3218 -0.2372 -0.9166 +vn 0.1162 0.0806 -0.9899 +vn -0.1667 0.0041 -0.9860 +vn 0.1551 -0.0745 -0.9851 +vn -0.4898 0.2663 -0.8302 +vn 0.6326 0.0923 -0.7690 +vn -0.0608 -0.8340 -0.5483 +vn 0.0201 -0.0129 -0.9997 +vn -0.5481 -0.1475 -0.8233 +vn -0.5706 0.3940 -0.7206 +vn -0.1201 0.2126 -0.9697 +vn -0.0222 -0.9377 0.3467 +vn 0.3644 -0.9106 0.1949 +vn 0.1000 -0.1952 -0.9757 +vn 0.1670 0.0197 -0.9858 +vn -0.0734 -0.7538 -0.6530 +vn 0.0812 -0.6780 -0.7306 +vn -0.2733 -0.4614 -0.8440 +vn 0.3225 -0.3620 -0.8746 +vn 0.2514 -0.1177 -0.9607 +vn 0.3045 -0.2391 -0.9220 +vn -0.1913 0.1262 -0.9734 +vn -0.3614 -0.3539 -0.8626 +vn 0.0412 0.7554 0.6540 +vn -0.4014 0.5912 -0.6996 +vn 0.0432 0.0131 -0.9990 +vn -0.1212 -0.7718 -0.6242 +vn -0.0807 0.2956 -0.9519 +vn -0.4742 0.2311 -0.8496 +vn 0.2124 -0.2299 -0.9498 +vn -0.4389 -0.8580 -0.2667 +vn -0.5128 -0.4556 -0.7276 +vn -0.5176 0.1832 -0.8358 +vn -0.5847 -0.2724 -0.7642 +vn 0.3039 0.2491 -0.9196 +vn 0.2516 -0.2053 -0.9458 +vn 0.0860 0.1127 -0.9899 +vn -0.5828 -0.2409 -0.7761 +vn -0.3131 0.6470 -0.6952 +vn 0.0009 0.1476 -0.9890 +vn -0.0361 -0.6392 -0.7682 +vn -0.2665 0.2968 -0.9170 +vn -0.1264 0.4700 -0.8736 +vn -0.3290 -0.0392 -0.9435 +vn 0.7085 -0.6497 0.2756 +vn 0.7466 -0.6145 0.2551 +vn -0.7377 -0.3581 0.5723 +vn 0.2474 -0.1892 -0.9502 +vn -0.0678 -0.6616 -0.7468 +vn -0.1583 -0.5133 -0.8435 +vn -0.0211 -0.4563 -0.8896 +vn 0.1633 -0.3088 -0.9370 +vn 0.0976 -0.4734 -0.8754 +vn 0.2218 -0.1117 -0.9687 +vn 0.2200 -0.1694 -0.9607 +vn 0.1000 -0.1983 -0.9750 +vn -0.2216 -0.2711 -0.9367 +vn 0.1148 -0.3730 -0.9207 +vn 0.0627 -0.8773 -0.4758 +vn -0.2884 -0.3253 -0.9005 +vn -0.1031 -0.0513 -0.9934 +vn -0.7160 -0.1311 -0.6857 +vn 0.2160 -0.9625 0.1643 +vn 0.0128 -0.9969 0.0773 +vn 0.7326 -0.6765 0.0756 +vn -0.5173 -0.4723 -0.7137 +vn -0.5868 -0.2754 -0.7614 +vn -0.4345 -0.5786 -0.6903 +vn 0.2508 0.0530 -0.9666 +vn 0.1397 -0.4495 -0.8823 +vn -0.0159 -0.4308 -0.9023 +vn 0.0004 -0.4390 -0.8985 +vn 0.2028 -0.0564 -0.9776 +vn 0.1273 0.0942 -0.9874 +vn 0.0154 0.2909 -0.9566 +vn -0.1805 0.1835 -0.9663 +vn -0.3801 -0.6689 -0.6388 +vn 0.6139 -0.0631 0.7868 +vn -0.3237 -0.5203 -0.7902 +vn -0.0378 -0.0057 -0.9993 +vn -0.5364 -0.4068 -0.7394 +vn 0.2176 -0.9681 0.1244 +vn -0.5496 -0.2971 -0.7808 +vn -0.6630 -0.0131 -0.7485 +vn 0.3828 -0.3563 -0.8523 +vn -0.4706 0.7898 -0.3934 +vn -0.0650 -0.1323 -0.9891 +vn -0.0013 -0.2736 -0.9619 +vn -0.0730 -0.3115 -0.9474 +vn -0.5262 0.2468 -0.8138 +vn -0.3347 -0.7280 -0.5983 +vn -0.6497 0.2547 -0.7163 +vn -0.3803 0.0561 -0.9231 +vn -0.3011 -0.2450 -0.9216 +vn -0.4939 -0.3229 -0.8074 +vn -0.7661 0.1924 -0.6132 +vn -0.4795 0.4265 -0.7670 +vn 0.2408 -0.1352 -0.9611 +vn -0.8021 -0.0995 -0.5888 +vn 0.2816 0.0931 -0.9550 +vn -0.2145 -0.5013 -0.8383 +vn -0.3273 -0.4221 -0.8454 +vn -0.1310 -0.2131 -0.9682 +vn -0.2208 -0.3717 -0.9017 +vn -0.1971 -0.4016 -0.8943 +vn -0.2280 -0.4570 -0.8597 +vn -0.0668 0.0417 -0.9969 +vn 0.5292 0.3151 -0.7878 +vn -0.5282 0.4015 -0.7482 +vn -0.4302 -0.6423 -0.6343 +vn -0.6192 -0.1701 -0.7666 +vn -0.8444 0.4917 0.2128 +vn 0.0263 0.3351 -0.9418 +vn 0.3109 -0.7109 -0.6309 +vn -0.1468 -0.3178 -0.9367 +vn -0.1867 -0.4825 -0.8558 +vn -0.2977 -0.3916 -0.8706 +vn -0.3525 -0.4028 -0.8447 +vn -0.3532 -0.3536 -0.8662 +vn 0.1728 0.0785 -0.9818 +vn -0.1927 0.1252 -0.9732 +vn -0.1732 0.2269 -0.9584 +vn -0.1558 -0.5260 -0.8361 +vn -0.3613 0.3161 -0.8772 +vn -0.5312 -0.5810 -0.6166 +vn 0.2250 0.4311 -0.8738 +vn 0.0152 -0.9974 0.0707 +vn -0.0697 0.2108 -0.9750 +vn -0.5605 0.1942 -0.8051 +vn -0.5460 0.1221 -0.8289 +vn -0.8293 -0.0077 -0.5588 +vn 0.0035 -0.9985 0.0554 +vn -0.3807 -0.4727 -0.7948 +vn -0.3769 -0.4626 -0.8025 +vn -0.6595 -0.0662 -0.7488 +vn -0.6461 0.0079 -0.7632 +vn -0.2996 -0.7995 -0.5207 +vn -0.2036 -0.2892 -0.9354 +vn 0.0231 -0.0023 -0.9997 +vn -0.0192 0.2173 -0.9759 +vn 0.0160 -0.9974 0.0705 +vn -0.0456 0.1480 -0.9879 +vn -0.3937 -0.6588 -0.6411 +vn -0.4944 0.3317 -0.8034 +vn 0.4217 -0.8516 0.3112 +vn -0.9166 0.0205 -0.3993 +vn -0.4548 -0.2488 -0.8551 +vn -0.4814 -0.0434 -0.8754 +vn -0.4167 -0.3267 -0.8483 +vn -0.4204 0.1660 -0.8920 +vn 0.0152 0.1566 -0.9875 +vn 0.1051 0.3952 -0.9126 +vn 0.0176 0.0309 -0.9994 +vn -0.1126 0.4135 -0.9035 +vn -0.4893 -0.1318 -0.8621 +vn -0.3987 0.7977 -0.4524 +vn -0.3371 -0.9102 -0.2408 +vn -0.5636 0.0171 -0.8259 +vn 0.2393 -0.1355 -0.9615 +vn 0.1452 0.2585 -0.9550 +vn 0.0129 -0.0975 -0.9951 +vn -0.4076 -0.3755 -0.8324 +vn -0.4110 -0.3952 -0.8215 +vn -0.2659 -0.1460 -0.9529 +vn -0.0584 0.0091 -0.9983 +vn -0.0242 -0.5123 -0.8584 +vn -0.3274 0.3098 -0.8926 +vn -0.5608 0.0384 -0.8270 +vn -0.5108 0.1852 -0.8395 +vn -0.3672 0.1468 -0.9185 +vn -0.0977 -0.9872 0.1260 +vn -0.0224 -0.9970 -0.0738 +vn -0.4692 -0.7948 -0.3848 +vn -0.5781 -0.1352 -0.8047 +vn -0.7535 0.5799 -0.3097 +vn -0.5393 0.4427 -0.7164 +vn 0.1865 -0.2341 -0.9542 +vn -0.1257 0.1199 -0.9848 +vn -0.4590 -0.2220 -0.8602 +vn -0.5323 -0.3212 -0.7833 +vn -0.5067 -0.4393 -0.7418 +vn -0.5068 -0.4440 -0.7389 +vn -0.4253 -0.3741 -0.8241 +vn -0.2311 -0.0222 -0.9727 +vn -0.8005 -0.0820 -0.5936 +vn -0.6905 -0.4943 -0.5281 +vn -0.4497 0.1246 -0.8845 +vn 0.3728 0.1071 -0.9217 +vn -0.7622 0.5795 -0.2885 +vn 0.0318 -0.9994 -0.0164 +vn -0.2440 -0.4294 -0.8695 +vn -0.3942 -0.0559 -0.9173 +vn 0.0475 -0.9859 0.1606 +vn 0.1654 -0.0994 -0.9812 +vn -0.5254 -0.2441 -0.8151 +vn -0.6205 -0.3264 -0.7131 +vn -0.5542 -0.2751 -0.7856 +vn -0.5257 -0.3417 -0.7790 +vn 0.0793 0.1453 -0.9862 +vn 0.8313 -0.3308 -0.4468 +vn -0.0408 0.1323 -0.9904 +vn -0.1402 0.1018 -0.9849 +vn -0.4503 0.1799 -0.8746 +vn -0.4584 0.8038 -0.3793 +vn -0.1772 -0.5246 -0.8327 +vn -0.2029 -0.3503 -0.9144 +vn -0.3959 -0.0953 -0.9134 +vn 0.0140 -0.0073 -0.9999 +vn 0.0600 0.2346 -0.9702 +vn -0.0964 0.5646 -0.8197 +vn -0.3604 -0.0328 -0.9322 +vn -0.3954 0.1910 -0.8984 +vn -0.5264 -0.2452 -0.8141 +vn -0.5222 -0.2365 -0.8194 +vn -0.4540 0.0464 -0.8898 +vn -0.3441 0.1791 -0.9217 +vn -0.3067 0.3643 -0.8793 +vn -0.8036 -0.5539 -0.2178 +vn -0.5126 0.0316 -0.8580 +vn -0.1664 0.3465 -0.9232 +vn -0.0562 0.1440 -0.9880 +vn 0.8003 -0.5385 -0.2636 +vn -0.1444 0.0025 -0.9895 +vn 0.1571 -0.0990 -0.9826 +vn -0.1723 -0.7215 -0.6707 +vn -0.2740 0.3654 -0.8896 +vn 0.0036 -1.0000 -0.0058 +vn 0.0843 -0.8081 0.5830 +vn -0.3074 -0.6087 -0.7314 +vn 0.1096 0.3230 -0.9400 +vn -0.6875 -0.4229 -0.5903 +vn -0.3309 0.9430 -0.0363 +vn -0.6066 -0.3971 -0.6887 +vn -0.5494 -0.0136 -0.8355 +vn -0.3494 -0.0396 -0.9361 +vn -0.3515 0.1876 -0.9172 +vn 0.0540 -0.2458 -0.9678 +vn -0.6913 -0.3568 -0.6283 +vn -0.5060 -0.0335 -0.8619 +vn -0.4821 -0.3252 -0.8135 +vn 0.4525 -0.3145 -0.8345 +vn -0.1121 -0.9936 0.0171 +vn -0.5668 0.0869 -0.8193 +vn -0.5897 0.2630 -0.7636 +vn 0.5614 0.1628 -0.8114 +vn -0.7661 0.1042 -0.6342 +vn 0.1336 0.2936 -0.9466 +vn -0.0285 0.2747 -0.9611 +vn -0.1615 0.3424 -0.9256 +vn 0.0806 -0.9966 -0.0173 +vn 0.0558 -0.9984 -0.0006 +vn 0.1895 -0.0896 0.9778 +vn -0.2602 -0.8377 -0.4802 +vn -0.1312 -0.9882 -0.0787 +vn 0.4257 -0.8620 0.2752 +vn -0.5476 -0.8069 -0.2216 +vn 0.4351 -0.2650 0.8605 +vn -0.0567 -0.9937 -0.0963 +vn 0.0228 -0.9971 0.0720 +vn 0.4500 -0.8761 0.1730 +vn -0.5538 -0.8178 0.1569 +vn -0.5581 -0.8092 0.1836 +vn 0.2239 -0.9094 -0.3506 +vn 0.2669 -0.8824 -0.3874 +vn 0.1322 -0.9857 -0.1048 +vn -0.4463 -0.8034 0.3941 +vn -0.5362 -0.8274 -0.1670 +vn 0.0947 -0.7306 0.6762 +vn 0.2240 -0.9408 -0.2544 +vn 0.0040 -0.9959 0.0905 +vn 0.0311 -0.9941 0.1035 +vn -0.9331 -0.2289 0.2775 +vn -0.5334 -0.8218 -0.2003 +vn -0.5070 -0.7467 -0.4306 +vn 0.0344 -0.9945 -0.0992 +vn 0.1007 -0.8355 -0.5402 +vn 0.5521 -0.3442 0.7594 +vn -0.3097 -0.9501 -0.0361 +vn 0.0845 -0.9907 0.1065 +vn 0.0256 -0.9989 0.0390 +vn 0.0806 -0.9966 -0.0185 +vn 0.0876 -0.9921 0.0903 +vn -0.0105 -0.9984 -0.0557 +vn 0.0849 -0.9915 0.0982 +vn 0.1855 -0.8514 0.4906 +vn 0.4886 -0.8703 0.0623 +vn 0.0872 -0.9238 -0.3729 +vn 0.4114 -0.9015 0.1340 +vn 0.4206 -0.8638 0.2775 +vn -0.4188 0.2834 0.8627 +vn 0.1240 -0.9897 -0.0721 +vn -0.4498 -0.8913 0.0573 +vn 0.0090 -0.9812 -0.1926 +vn 0.0614 -0.9847 -0.1634 +vn -0.1243 -0.9815 -0.1455 +vn -0.4851 -0.8617 -0.1489 +vn 0.8318 -0.5370 0.1405 +vn 0.0129 -0.9986 0.0507 +vn 0.1794 -0.9687 -0.1716 +vn -0.5941 -0.7996 0.0876 +vn -0.4238 -0.8817 -0.2073 +vn -0.9647 0.1039 -0.2420 +vn 0.1274 -0.9890 -0.0746 +vn 0.1249 -0.9894 -0.0737 +vn 0.0682 -0.9943 0.0823 +vn -0.0973 -0.9870 -0.1281 +vn 0.0880 -0.9950 0.0470 +vn 0.0190 -0.9987 -0.0482 +vn -0.1936 -0.9810 0.0141 +vn 0.0339 -0.9989 -0.0328 +vn 0.1203 -0.9616 -0.2466 +vn -0.5834 -0.8107 -0.0495 +vn 0.0076 -0.9940 -0.1095 +vn -0.7023 0.0570 0.7096 +vn 0.3508 -0.8888 0.2948 +vn -0.0414 -0.9462 0.3208 +vn 0.0272 -0.9995 -0.0186 +vn 0.2038 -0.8639 0.4606 +vn 0.0479 -0.9930 0.1078 +vn 0.1441 0.0414 0.9887 +vn 0.2989 -0.7991 -0.5216 +vn 0.0075 -0.9999 -0.0110 +vn -0.1086 0.9521 0.2858 +vn 0.6829 -0.4435 0.5805 +vn -0.8729 -0.4503 0.1881 +vn 0.0351 -0.9981 -0.0511 +vn -0.4273 -0.8462 0.3184 +vn -0.5183 -0.6346 -0.5732 +vn -0.5379 -0.6303 0.5598 +vn 0.0014 -0.9975 -0.0707 +vn -0.0960 -0.9908 0.0959 +vn 0.0402 -0.9990 -0.0183 +vn -0.5375 -0.6521 0.5347 +vn -0.0387 -0.9986 0.0372 +vn -0.6918 -0.5307 -0.4896 +vn 0.0180 -0.9961 0.0862 +vn 0.0281 -0.9967 0.0763 +vn -0.7549 -0.6527 -0.0640 +vn 0.0124 -0.9992 0.0378 +vn -0.5228 -0.7762 0.3524 +vn 0.1840 -0.8502 0.4932 +vn -0.1829 -0.4956 0.8491 +vn -0.4683 -0.8585 0.2088 +vn 0.4875 -0.8722 -0.0394 +vn 0.1648 -0.0099 0.9863 +vn -0.6295 -0.6540 0.4196 +vn 0.0044 -0.9989 -0.0461 +vn 0.0994 -0.9950 0.0031 +vn -0.7863 -0.6179 -0.0024 +vn -0.8081 -0.1416 0.5718 +vn 0.0843 -0.9907 0.1067 +vn 0.0415 -0.9991 -0.0096 +vn 0.3984 -0.9071 -0.1360 +vn -0.6121 -0.7831 0.1104 +vn -0.3737 -0.3872 0.8429 +vn -0.5944 -0.7322 0.3324 +vn 0.8264 -0.4905 0.2767 +vn 0.0594 -0.1957 0.9789 +vn 0.2675 -0.8288 0.4915 +vn -0.7310 0.0210 0.6821 +vn 0.1059 -0.8296 0.5482 +vn 0.9712 -0.1526 0.1830 +vn 0.1234 -0.8638 0.4884 +vn -0.5693 -0.7742 0.2768 +vn -0.6402 -0.7499 0.1668 +vn 0.0139 -0.9994 -0.0325 +vn 0.3864 -0.9220 -0.0237 +vn 0.0936 -0.9924 -0.0796 +vn -0.2800 -0.8483 0.4495 +vn 0.0298 -0.9648 0.2615 +vn -0.0218 -0.9940 -0.1071 +vn 0.2590 -0.9620 0.0860 +vn -0.7047 -0.6745 0.2200 +vn 0.1586 -0.6332 0.7576 +vn -0.7433 -0.3855 -0.5468 +vn 0.1154 -0.9631 0.2430 +vn 0.0024 -0.9975 0.0712 +vn -0.3404 0.8118 0.4745 +vn 0.0586 -0.9955 0.0740 +vn -0.1879 -0.9515 0.2435 +vn 0.1113 -0.9935 0.0245 +vn -0.1487 -0.4582 0.8763 +vn 0.2388 -0.0355 0.9704 +vn 0.1072 -0.9886 0.1053 +vn 0.4561 -0.8439 0.2826 +vn -0.0136 -0.9991 0.0392 +vn 0.4748 -0.8740 0.1030 +vn -0.4167 -0.7269 0.5458 +vn -0.2552 -0.4548 0.8533 +vn -0.0218 -0.9997 -0.0116 +vn 0.1055 -0.9923 0.0657 +vn 0.3643 -0.9024 0.2300 +vn 0.0931 -0.9884 -0.1200 +vn 0.3020 -0.8279 0.4725 +vn -0.7066 -0.6894 -0.1595 +vn 0.0897 -0.9959 -0.0091 +vn -0.0510 -0.9961 -0.0721 +vn 0.0554 -0.9983 0.0181 +vn 0.0095 -0.9989 0.0449 +vn -0.2937 -0.3663 0.8829 +vn -0.6501 -0.7436 0.1562 +vn -0.5792 -0.7640 -0.2844 +vn -0.8245 -0.5526 -0.1220 +vn -0.7488 -0.6624 -0.0240 +vn -0.7109 -0.6475 -0.2747 +vn 0.0926 -0.7760 0.6239 +vn -0.0396 -0.9821 0.1841 +vn 0.0137 -0.9979 -0.0641 +vn -0.5278 -0.8080 -0.2619 +vn 0.0222 -0.9993 -0.0286 +vn 0.3519 -0.8022 0.4823 +vn 0.0521 -0.9933 0.1029 +vn 0.2110 -0.9455 -0.2481 +vn -0.3877 -0.9139 -0.1203 +vn -0.4561 -0.8512 -0.2595 +vn -0.6664 -0.5567 -0.4960 +vn -0.6642 -0.5465 -0.5102 +vn 0.2094 -0.9778 -0.0078 +vn 0.1099 -0.9938 0.0151 +vn 0.4058 -0.7709 0.4910 +vn 0.0101 -0.9994 -0.0341 +vn -0.2330 -0.9673 0.0999 +vn -0.4711 -0.8413 -0.2652 +vn -0.4200 -0.8790 -0.2258 +vn -0.8178 -0.5726 -0.0581 +vn 0.4697 -0.8354 0.2854 +vn 0.1462 -0.9524 0.2676 +vn -0.7470 -0.6480 -0.1485 +vn -0.6583 -0.7525 -0.0193 +vn 0.3930 -0.9086 0.1412 +vn 0.5670 -0.8145 0.1228 +vn -0.0513 -0.9978 0.0409 +vn -0.7912 -0.6040 -0.0956 +vn 0.1217 -0.8384 0.5313 +vn 0.0139 -0.8544 0.5195 +vn 0.0430 -0.5897 0.8064 +vn -0.0512 -0.9985 -0.0213 +vn 0.0196 -0.9921 -0.1239 +vn 0.0362 -0.9964 0.0768 +vn -0.3893 -0.8221 0.4154 +vn 0.3761 -0.8981 0.2280 +vn -0.6373 -0.7642 0.0995 +vn -0.3585 -0.9086 -0.2143 +vn -0.7536 -0.5424 0.3713 +vn -0.2707 -0.9070 0.3227 +vn 0.0473 -0.9970 0.0610 +vn 0.0558 -0.9982 -0.0200 +vn -0.0127 -0.9999 0.0004 +vn 0.0347 -0.9976 0.0600 +vn -0.0777 -0.9595 0.2708 +vn -0.0177 -0.9995 -0.0268 +vn -0.4329 -0.8340 0.3422 +vn -0.5392 -0.8411 0.0410 +vn -0.0078 -0.9943 -0.1063 +vn -0.4252 -0.8861 0.1844 +vn 0.2547 -0.8209 0.5111 +vn 0.0389 -0.9992 -0.0112 +vn 0.0074 -0.5975 0.8018 +vn -0.0374 -0.9817 0.1867 +vn 0.2985 -0.8887 0.3480 +vn -0.0010 -0.9575 0.2885 +vn -0.0139 -0.9980 -0.0618 +vn -0.4442 -0.8578 0.2588 +vn -0.4672 -0.8780 -0.1044 +vn -0.6274 -0.6656 0.4042 +vn -0.5403 0.4285 -0.7242 +vn 0.4534 -0.8462 0.2800 +vn 0.2575 -0.9151 0.3102 +vn 0.0584 -0.9959 0.0694 +vn 0.0143 -0.9998 -0.0164 +vn -0.2548 -0.8912 0.3753 +vn 0.0325 -0.9978 0.0573 +vn -0.6198 -0.7270 -0.2955 +vn 0.0300 -0.9982 -0.0522 +vn -0.8227 0.0184 0.5682 +vn 0.0560 -0.9984 0.0010 +vn 0.4041 -0.8083 0.4282 +vn -0.0296 -0.9813 0.1900 +vn -0.3238 -0.9349 -0.1457 +vn -0.4216 -0.9064 0.0256 +vn 0.0391 -0.9990 0.0215 +vn 0.1733 -0.9276 0.3310 +vn -0.0424 -0.9988 0.0225 +vn 0.0366 -0.4822 0.8753 +vn 0.0653 -0.8978 0.4356 +vn -0.8411 -0.3089 -0.4439 +vn -0.0617 -0.9911 -0.1179 +vn -0.1044 -0.9647 0.2418 +vn -0.5393 0.8297 0.1440 +vn -0.7751 -0.5158 0.3649 +vn 0.0191 -0.9977 -0.0652 +vn 0.0229 -0.9973 0.0691 +vn 0.3573 -0.8384 0.4116 +vn -0.3422 -0.8179 0.4625 +vn 0.3839 -0.9137 0.1331 +vn 0.2640 -0.3125 0.9125 +vn -0.3776 -0.9246 -0.0498 +vn -0.2884 -0.9469 -0.1420 +vn -0.3023 -0.9413 0.1503 +vn 0.0262 -0.9996 0.0106 +vn -0.5789 -0.7738 -0.2569 +vn -0.6291 -0.6612 0.4087 +vn -0.1399 -0.4237 -0.8949 +vn 0.0206 -0.9995 -0.0232 +vn 0.1692 -0.9852 0.0281 +vn -0.0440 0.7238 0.6886 +vn 0.0261 -0.9992 0.0291 +vn -0.5735 -0.8191 0.0135 +vn -0.3162 -0.8752 0.3660 +vn -0.4439 -0.7169 0.5376 +vn -0.4403 -0.7201 0.5363 +vn -0.4661 -0.6042 0.6463 +vn 0.0394 -0.9586 0.2819 +vn 0.0262 -0.9992 -0.0295 +vn 0.2945 -0.9320 -0.2112 +vn 0.1569 -0.9857 -0.0611 +vn -0.7691 -0.6314 -0.0989 +vn -0.6141 -0.7731 -0.1584 +vn -0.8455 -0.4214 -0.3279 +vn 0.0287 -0.9996 -0.0030 +vn -0.6714 -0.7220 0.1671 +vn -0.7930 0.2138 0.5705 +vn 0.0532 -0.9948 0.0873 +vn 0.0012 -0.9974 0.0718 +vn 0.0062 -0.9978 0.0661 +vn 0.0044 -0.9955 0.0950 +vn -0.1055 -0.9856 0.1324 +vn 0.1125 -0.5587 0.8217 +vn 0.1093 -0.9914 0.0718 +vn 0.2953 -0.6279 0.7201 +vn 0.0285 -0.9988 -0.0390 +vn 0.3994 -0.7318 -0.5522 +vn -0.7199 -0.4397 0.5370 +vn 0.2493 0.5973 0.7623 +vn -0.7835 -0.6214 -0.0088 +vn -0.7781 -0.6104 0.1483 +vn -0.4879 -0.4307 0.7592 +vn 0.0457 -0.9984 0.0333 +vn -0.0451 -0.9473 0.3172 +vn 0.0754 -0.6208 0.7803 +vn 0.2069 -0.8104 0.5481 +vn 0.0490 -0.8875 0.4582 +vn -0.7122 -0.6994 -0.0606 +vn -0.3311 -0.9434 0.0211 +vn -0.3828 -0.9234 -0.0277 +vn 0.0931 -0.9956 0.0064 +vn -0.0020 -0.9979 0.0654 +vn 0.0094 -0.9999 -0.0127 +vn -0.7460 -0.6659 -0.0108 +vn -0.6228 -0.7817 -0.0341 +vn -0.8112 -0.4427 0.3821 +vn -0.4530 -0.8895 0.0603 +vn -0.4788 -0.8763 0.0542 +vn -0.4739 -0.8768 0.0813 +vn 0.1503 -0.9852 0.0822 +vn -0.5393 -0.7854 -0.3039 +vn 0.1337 -0.0720 0.9884 +vn -0.5887 -0.7989 -0.1231 +vn -0.7728 -0.5565 0.3050 +vn -0.7304 -0.4510 0.5130 +vn 0.1418 -0.3466 -0.9272 +vn -0.2110 -0.9587 0.1905 +vn -0.6474 -0.7443 -0.1640 +vn 0.5749 -0.3259 0.7505 +vn -0.7125 -0.6998 -0.0502 +vn -0.7710 -0.6366 -0.0158 +vn -0.0266 -0.9996 0.0026 +vn -0.8256 -0.2081 0.5244 +vn -0.5020 -0.7732 0.3874 +vn -0.1600 -0.9510 0.2645 +vn -0.2504 -0.8980 0.3618 +vn -0.2433 -0.7625 0.5995 +vn 0.0592 -0.4236 0.9039 +vn 0.0472 -0.5431 0.8383 +vn 0.0118 -0.4994 0.8663 +vn 0.0280 -0.9983 0.0504 +vn -0.1309 -0.5859 0.7997 +vn 0.2110 -0.7615 0.6129 +vn 0.5285 -0.8371 0.1413 +vn 0.5416 -0.8225 0.1739 +vn -0.6833 -0.6907 0.2369 +vn -0.7769 -0.5791 0.2471 +vn -0.8026 -0.5834 0.1249 +vn -0.7992 -0.5025 0.3299 +vn -0.0972 -0.4480 0.8887 +vn -0.1683 -0.5555 0.8143 +vn 0.0399 -0.9992 0.0062 +vn -0.1830 -0.9667 0.1789 +vn 0.0028 -0.9991 0.0432 +vn -0.0529 -0.9148 0.4005 +vn 0.0018 -0.9957 0.0921 +vn -0.0432 -0.9485 0.3138 +vn 0.5520 -0.7663 0.3287 +vn -0.5831 -0.7422 -0.3304 +vn 0.5303 -0.6368 0.5597 +vn -0.5976 -0.8018 0.0070 +vn -0.5773 -0.7890 0.2103 +vn -0.6136 -0.6635 0.4281 +vn 0.0277 -0.9996 -0.0115 +vn -0.5134 -0.8384 0.1833 +vn -0.2158 -0.8441 0.4908 +vn -0.5959 -0.5708 0.5649 +vn 0.0057 -1.0000 -0.0080 +vn -0.4264 -0.8466 0.3184 +vn -0.6325 -0.7581 -0.1591 +vn -0.7563 -0.6523 0.0501 +vn -0.0265 -0.8723 0.4883 +vn 0.2414 -0.9702 0.0220 +vn 0.0051 -0.9997 0.0259 +vn -0.7040 -0.4090 0.5806 +vn -0.8034 -0.1076 0.5856 +vn -0.0017 -0.9996 0.0274 +vn 0.0140 -0.9987 0.0500 +vn -0.4618 -0.8868 -0.0172 +vn 0.0486 -0.9971 0.0589 +vn 0.1574 0.1309 0.9788 +vn -0.4276 -0.1363 0.8936 +vn -0.6351 -0.7548 -0.1639 +vn -0.6900 -0.7214 -0.0594 +vn -0.6873 -0.7018 0.1872 +vn -0.6257 -0.7720 0.1123 +vn -0.6456 -0.7453 0.1667 +vn -0.6921 -0.6673 0.2751 +vn -0.7658 -0.4632 0.4460 +vn 0.0143 -0.9994 -0.0302 +vn 0.1087 -0.9938 -0.0217 +vn 0.4190 -0.9041 0.0842 +vn -0.6004 -0.7138 0.3606 +vn -0.2120 -0.1376 0.9675 +vn -0.1096 -0.3944 0.9124 +vn -0.4027 -0.7900 0.4623 +vn 0.1020 -0.9652 0.2407 +vn -0.1336 -0.8192 0.5577 +vn -0.1516 -0.4255 0.8922 +vn -0.4298 -0.7666 0.4771 +vn 0.5958 -0.7462 0.2969 +vn -0.1757 -0.9468 0.2696 +vn -0.0338 -0.9987 0.0392 +vn -0.5396 -0.6253 0.5637 +vn 0.0087 -0.9961 0.0876 +vn -0.6296 -0.7592 -0.1648 +vn -0.7972 -0.5768 0.1783 +vn -0.6243 -0.7543 0.2033 +vn 0.0865 -0.4524 0.8876 +vn -0.7037 -0.6937 -0.1538 +vn -0.2446 -0.9329 0.2644 +vn 0.0384 -0.9628 0.2676 +vn 0.1162 -0.8961 0.4284 +vn -0.2177 -0.8071 0.5488 +vn -0.3175 -0.7758 0.5453 +vn -0.1238 0.7206 0.6822 +vn -0.0907 -0.9957 -0.0200 +vn -0.0097 -0.9938 -0.1105 +vn -0.4507 -0.8481 -0.2787 +vn -0.7762 -0.6279 0.0572 +vn -0.7247 -0.6833 -0.0883 +vn -0.7299 -0.6631 -0.1660 +vn -0.5801 -0.7853 0.2165 +vn -0.0797 -0.8329 0.5476 +vn -0.0219 -0.9732 0.2290 +vn -0.0079 -0.9283 0.3717 +vn -0.4037 -0.4952 0.7693 +vn 0.4512 -0.8756 -0.1725 +vn -0.7297 -0.6838 -0.0008 +vn -0.7046 -0.7063 -0.0678 +vn 0.4546 -0.8436 0.2860 +vn -0.6273 -0.5043 0.5934 +vn -0.3133 -0.9461 -0.0825 +vn -0.3981 -0.8674 -0.2986 +vn -0.4186 -0.8658 -0.2742 +vn -0.6939 -0.6311 0.3467 +vn -0.7105 -0.5086 0.4864 +vn 0.0324 -0.9993 0.0166 +vn -0.0161 -0.9997 0.0167 +vn 0.1656 -0.9856 -0.0343 +vn 0.2042 -0.9389 0.2770 +vn -0.0259 -0.9361 0.3507 +vn -0.5715 -0.5817 0.5788 +vn -0.4570 -0.8684 -0.1923 +vn -0.7234 -0.6898 -0.0304 +vn 0.1496 -0.9878 0.0426 +vn -0.3068 -0.9407 -0.1447 +vn -0.3401 -0.9403 0.0124 +vn -0.5769 -0.8123 0.0862 +vn -0.6560 -0.6651 0.3567 +vn -0.5951 -0.6888 0.4140 +vn -0.5989 -0.6642 0.4473 +vn 0.6187 -0.7637 0.1845 +vn 0.0041 -0.9999 -0.0150 +vn -0.6573 -0.7450 0.1135 +vn 0.2247 -0.9381 0.2635 +vn 0.1994 -0.9291 0.3113 +vn 0.1206 -0.9914 0.0500 +vn 0.0842 -0.9896 -0.1163 +vn -0.3522 -0.9315 -0.0905 +vn 0.2456 -0.9450 0.2161 +vn -0.8862 0.2654 0.3797 +vn -0.2708 -0.9506 -0.1518 +vn -0.3938 -0.8978 -0.1973 +vn -0.5383 -0.8259 0.1678 +vn -0.5180 -0.8472 0.1178 +vn -0.5290 -0.8440 0.0885 +vn -0.5180 -0.7977 0.3086 +vn -0.2545 -0.8900 0.3784 +vn -0.0780 -0.9723 0.2202 +vn 0.3081 -0.8891 0.3386 +vn 0.5572 -0.8277 0.0674 +vn 0.0418 -0.7260 0.6865 +vn 0.1351 -0.9868 -0.0899 +vn -0.0143 -0.9961 -0.0874 +vn -0.0397 -0.9979 -0.0510 +vn -0.1352 -0.9908 0.0085 +vn -0.1381 -0.9904 0.0012 +vn -0.4493 -0.8841 0.1288 +vn -0.7148 -0.1414 0.6849 +vn -0.2263 -0.9491 -0.2193 +vn -0.5154 -0.7799 0.3552 +vn 0.0568 -0.9982 -0.0217 +vn 0.0005 -0.9980 -0.0631 +vn 0.6532 -0.7135 0.2537 +vn 0.2817 -0.9266 0.2491 +vn 0.2663 -0.8986 0.3486 +vn 0.2897 -0.8606 0.4188 +vn -0.3808 -0.8906 -0.2486 +vn -0.3960 -0.8342 0.3837 +vn -0.4398 -0.7408 0.5078 +vn -0.8688 0.3874 -0.3085 +vn -0.0569 -0.9953 -0.0783 +vn -0.0634 -0.9968 -0.0481 +vn -0.2216 -0.9354 -0.2754 +vn -0.2624 -0.9241 -0.2778 +vn -0.2211 -0.9629 -0.1546 +vn -0.2874 -0.9310 -0.2252 +vn -0.4391 -0.8775 0.1927 +vn -0.5081 -0.6830 0.5247 +vn 0.4757 -0.4825 0.7354 +vn 0.0125 -0.9998 -0.0155 +vn -0.9922 -0.0300 0.1212 +vn -0.0910 -0.9901 0.1072 +vn 0.4722 -0.8468 0.2450 +vn 0.1510 -0.7496 0.6444 +vn -0.0655 -0.9944 -0.0830 +vn -0.2973 -0.9369 0.1839 +vn -0.7504 -0.3127 -0.5824 +vn -0.3321 -0.9345 -0.1281 +vn -0.3191 -0.9477 -0.0031 +vn -0.5916 -0.6933 0.4115 +vn -0.3529 0.0429 0.9347 +vn 0.0134 -0.9999 -0.0030 +vn -0.3135 -0.5815 0.7507 +vn -0.0871 -0.9581 0.2728 +vn -0.7307 -0.6200 0.2857 +vn -0.4977 -0.2685 -0.8247 +vn -0.0330 0.2373 -0.9709 +vn -0.0799 -0.9936 -0.0798 +vn -0.0515 -0.9972 0.0542 +vn -0.3611 -0.8685 0.3396 +vn -0.2396 -0.9598 -0.1462 +vn -0.4118 -0.8165 0.4046 +vn 0.1138 0.0195 0.9933 +vn 0.0322 -0.9986 0.0410 +vn -0.6672 -0.5920 0.4521 +vn 0.0321 -0.9993 -0.0186 +vn 0.1372 -0.9858 0.0965 +vn -0.0471 -0.9434 0.3284 +vn -0.3847 -0.8780 -0.2848 +vn -0.0676 -0.9965 -0.0488 +vn -0.4564 -0.7513 0.4766 +vn -0.4796 -0.8516 -0.2115 +vn -0.2511 -0.9630 0.0979 +vn -0.3318 -0.9159 0.2259 +vn -0.3009 -0.9111 0.2817 +vn -0.4321 -0.8086 0.3992 +vn -0.4521 -0.7893 0.4155 +vn -0.4407 -0.4416 0.7816 +vn -0.7468 -0.2161 0.6289 +vn -0.0359 -0.9993 0.0108 +vn 0.0046 -0.9996 0.0291 +vn -0.2459 0.6566 -0.7130 +vn -0.0767 -0.9906 0.1133 +vn 0.2604 -0.9425 0.2095 +vn 0.3011 -0.8874 0.3490 +vn 0.0169 -0.9995 0.0274 +vn -0.0441 -0.9975 0.0546 +vn -0.3764 -0.8785 0.2941 +vn -0.3256 -0.9192 -0.2213 +vn -0.3000 -0.9414 -0.1543 +vn -0.3568 -0.9310 0.0774 +vn -0.4362 -0.7257 0.5321 +vn -0.2744 0.3729 -0.8864 +vn -0.2851 -0.8460 0.4505 +vn 0.1060 -0.9927 -0.0578 +vn 0.1864 -0.8497 0.4932 +vn -0.0435 -0.9967 -0.0681 +vn -0.0731 -0.9857 -0.1515 +vn 0.0644 -0.9977 -0.0223 +vn -0.7144 -0.6770 -0.1770 +vn -0.3077 -0.9436 -0.1221 +vn 0.0346 -0.9977 0.0586 +vn -0.0108 -0.9998 -0.0146 +vn -0.2507 -0.9604 -0.1211 +vn -0.3859 -0.8153 0.4317 +vn -0.4015 -0.8281 0.3911 +vn -0.2420 -0.9700 0.0252 +vn 0.0240 -0.9997 -0.0040 +vn 0.2156 0.1482 0.9652 +vn -0.4743 -0.8595 0.1905 +vn -0.3013 -0.8616 0.4085 +vn 0.1554 -0.9671 -0.2013 +vn -0.0753 -0.9971 -0.0108 +vn -0.0244 -0.9996 -0.0173 +vn -0.0121 -0.9996 0.0261 +vn -0.6715 0.7151 0.1942 +vn 0.6047 -0.7853 0.1329 +vn -0.2400 -0.9700 -0.0392 +vn -0.1796 -0.9531 0.2437 +vn -0.3304 -0.9197 0.2120 +vn -0.2947 -0.9121 0.2848 +vn -0.3882 -0.4712 0.7920 +vn -0.7611 0.0063 0.6486 +vn 0.4767 -0.7013 0.5300 +vn -0.6606 -0.2480 -0.7086 +vn -0.0937 -0.9793 -0.1793 +vn -0.0463 -0.9976 0.0514 +vn -0.2540 -0.9325 0.2566 +vn -0.0178 -0.9998 -0.0014 +vn -0.8257 -0.5459 0.1418 +vn -0.2700 -0.8820 0.3861 +vn -0.3811 -0.7194 0.5807 +vn -0.0828 -0.9936 -0.0769 +vn -0.0806 -0.9963 0.0291 +vn -0.5393 -0.4426 0.7164 +vn 0.3153 -0.9207 -0.2299 +vn 0.3154 -0.9239 -0.2168 +vn 0.0098 -1.0000 0.0017 +vn 0.0385 -0.9983 0.0430 +vn -0.0224 -0.9995 0.0209 +vn -0.7314 -0.2690 -0.6267 +vn -0.2081 -0.9217 0.3274 +vn -0.2192 -0.8852 0.4102 +vn -0.2581 -0.8606 0.4390 +vn -0.2753 -0.8507 0.4478 +vn -0.3364 -0.7569 0.5602 +vn -0.3055 -0.6252 0.7182 +vn -0.2201 -0.9753 0.0178 +vn -0.0000 -0.9995 0.0320 +vn 0.2634 -0.9415 0.2102 +vn 0.2505 -0.9172 0.3099 +vn 0.1891 -0.9173 0.3506 +vn -0.0901 -0.9918 -0.0904 +vn -0.0319 -0.9908 -0.1316 +vn 0.0062 -1.0000 0.0033 +vn 0.0650 -0.9979 0.0079 +vn 0.1660 -0.2214 0.9610 +vn -0.1774 -0.9830 0.0480 +vn -0.2162 -0.9128 0.3466 +vn 0.0410 -0.9962 0.0766 +vn 0.0327 -0.9978 0.0571 +vn -0.0006 -0.9997 -0.0246 +vn 0.3910 -0.8280 0.4018 +vn -0.0343 -0.9981 0.0520 +vn 0.3342 0.9411 0.0515 +vn -0.3062 -0.8377 0.4522 +vn -0.5103 -0.8213 -0.2552 +vn -0.4523 -0.8063 0.3811 +vn -0.1245 -0.7536 0.6455 +vn 0.3901 -0.5808 -0.7145 +vn 0.0260 -0.9945 -0.1011 +vn -0.0071 -0.9972 -0.0741 +vn -0.0567 -0.9981 0.0248 +vn -0.1574 -0.9797 0.1245 +vn -0.7817 -0.6130 -0.1144 +vn -0.5404 -0.8361 -0.0940 +vn -0.9285 -0.2878 -0.2348 +vn -0.0928 -0.9908 0.0990 +vn 0.1961 -0.0912 0.9763 +vn -0.6818 0.2162 -0.6988 +vn 0.1616 -0.9834 0.0824 +vn 0.0390 -0.9940 -0.1021 +vn -0.4518 -0.8594 -0.2395 +vn -0.7569 -0.5947 -0.2711 +vn -0.5986 -0.7935 -0.1098 +vn -0.5775 -0.6961 -0.4265 +vn 0.0117 -0.9999 0.0068 +vn -0.0187 -0.9996 0.0209 +vn -0.1590 -0.9814 0.1074 +vn -0.4407 -0.8849 -0.1507 +vn 0.6452 -0.7398 0.1909 +vn 0.7151 -0.6762 0.1770 +vn -0.4414 -0.8938 -0.0786 +vn -0.5016 -0.8639 0.0462 +vn 0.0071 -0.9997 -0.0213 +vn -0.2370 -0.7139 0.6589 +vn -0.2676 -0.6358 0.7240 +vn -0.2772 -0.6304 0.7251 +vn 0.0350 -0.9993 -0.0124 +vn -0.2795 -0.9199 -0.2751 +vn -0.2447 -0.9689 -0.0365 +vn -0.1933 -0.9579 -0.2123 +vn -0.1261 -0.9919 -0.0173 +vn -0.0707 -0.9904 -0.1187 +vn -0.0061 -1.0000 0.0063 +vn -0.0550 -0.9982 0.0251 +vn -0.4270 -0.8918 -0.1495 +vn 0.0278 -0.9972 0.0690 +vn -0.7389 0.3966 0.5447 +vn -0.2005 -0.9527 -0.2284 +vn -0.0985 -0.9881 -0.1184 +vn -0.1386 -0.9829 -0.1209 +vn 0.0033 -1.0000 0.0032 +vn 0.0377 -0.9992 -0.0112 +vn 0.0286 -0.9995 0.0114 +vn 0.0477 -0.9986 -0.0215 +vn -0.0240 -0.9996 0.0125 +vn 0.0030 -0.9995 0.0326 +vn 0.0184 -0.9994 -0.0279 +vn -0.0641 -0.9979 0.0109 +vn -0.0478 -0.9980 0.0405 +vn -0.1050 -0.9935 0.0435 +vn -0.0372 -0.9962 -0.0791 +vn -0.2815 -0.9545 0.0987 +vn -0.2391 -0.9333 0.2679 +vn -0.2222 -0.8362 0.5014 +vn -0.1902 -0.7576 0.6244 +vn 0.1054 0.2526 -0.9618 +vn 0.4193 -0.9024 -0.0990 +vn 0.0504 -0.9981 0.0358 +vn 0.0229 -0.9995 0.0231 +vn 0.0004 -0.9994 0.0358 +vn 0.0201 -0.9989 -0.0413 +vn 0.0151 -0.9998 0.0151 +vn -0.0419 -0.9990 0.0182 +vn -0.8253 -0.4619 0.3250 +vn -0.3849 -0.7432 -0.5473 +vn 0.5276 -0.8484 -0.0426 +vn 0.0301 -0.5740 0.8183 +vn 0.0155 -0.9999 -0.0041 +vn 0.0343 -0.9993 -0.0127 +vn -0.1822 -0.4683 0.8646 +vn -0.1348 -0.9724 0.1904 +vn 0.0240 -0.9990 0.0372 +vn 0.0014 -0.9958 -0.0919 +vn -0.0186 -0.9980 -0.0606 +vn 0.0509 -0.9987 0.0090 +vn -0.0206 -0.9995 0.0255 +vn 0.0002 -0.9986 0.0521 +vn -0.3030 -0.9484 0.0935 +vn -0.4641 -0.8516 0.2437 +vn -0.1827 -0.8564 0.4830 +vn -0.3145 -0.9486 0.0339 +vn -0.0003 -0.9999 -0.0138 +vn 0.0283 -0.9993 0.0234 +vn 0.0456 -0.9987 -0.0218 +vn 0.5594 -0.8031 0.2049 +vn -0.0885 -0.9950 0.0471 +vn -0.0916 -0.9957 0.0165 +vn -0.1163 -0.8452 0.5217 +vn -0.2504 -0.5641 0.7868 +vn -0.4333 -0.8801 -0.1942 +vn -0.0056 -0.9956 0.0939 +vn -0.6797 -0.6096 -0.4079 +vn 0.0579 -0.9964 0.0614 +vn -0.2195 -0.9682 -0.1204 +vn -0.0558 -0.9958 -0.0720 +vn 0.0244 -0.9994 0.0257 +vn 0.0691 -0.9961 0.0553 +vn 0.1306 -0.9914 -0.0122 +vn 0.0237 -0.9995 0.0195 +vn 0.0492 -0.9986 -0.0187 +vn 0.2384 -0.9599 0.1472 +vn -0.1215 -0.9712 0.2051 +vn 0.2245 -0.8229 0.5220 +vn -0.4974 -0.8675 -0.0049 +vn -0.3508 -0.9008 0.2558 +vn -0.0309 -0.9994 0.0174 +vn 0.0035 -0.9968 0.0802 +vn -0.2675 -0.8458 -0.4616 +vn -0.1595 -0.7588 0.6314 +vn -0.6772 -0.6312 -0.3780 +vn 0.3818 -0.9174 -0.1124 +vn 0.3778 -0.9212 -0.0932 +vn 0.2053 -0.9656 0.1598 +vn 0.2457 -0.9663 0.0764 +vn 0.1765 -0.9842 0.0130 +vn 0.0513 -0.9985 0.0186 +vn 0.0099 -0.9994 0.0346 +vn -0.2066 -0.9057 0.3702 +vn -0.7923 -0.5684 0.2216 +vn -0.0690 -0.6976 0.7131 +vn 0.0492 -0.4910 0.8698 +vn -0.0166 -0.5454 0.8380 +vn 0.0365 -0.5726 0.8190 +vn 0.4688 -0.8394 0.2751 +vn 0.1162 -0.9652 0.2342 +vn 0.5231 -0.8341 0.1749 +vn 0.6211 -0.7386 0.2621 +vn 0.5465 -0.8373 0.0155 +vn 0.1563 -0.9842 -0.0827 +vn 0.0324 -0.9994 0.0101 +vn 0.0095 -0.9990 -0.0447 +vn 0.0091 -0.9983 -0.0572 +vn -0.0274 -0.9990 -0.0362 +vn 0.3840 -0.7524 0.5353 +vn 0.3793 -0.7443 0.5496 +vn -0.0330 -0.9956 0.0876 +vn -0.2641 -0.9521 0.1540 +vn -0.4177 0.3847 -0.8231 +vn -0.2514 -0.6011 0.7586 +vn -0.2324 -0.6848 0.6907 +vn 0.0496 -0.9988 -0.0023 +vn 0.6249 -0.7315 0.2727 +vn 0.0085 -0.9998 0.0171 +vn -0.0014 -0.9998 0.0196 +vn 0.0800 -0.9647 0.2508 +vn 0.7631 -0.6240 0.1680 +vn 0.0020 -0.9996 0.0269 +vn 0.0063 -0.9997 0.0215 +vn -0.5396 -0.4081 0.7364 +vn 0.4177 -0.7344 0.5350 +vn -0.6118 -0.0585 -0.7888 +vn -0.0548 -0.6960 0.7159 +vn 0.1472 0.1297 0.9806 +vn 0.5340 -0.7291 0.4280 +vn 0.3546 -0.8373 0.4160 +vn 0.5941 -0.6572 0.4639 +vn 0.5944 -0.6581 0.4622 +vn 0.6930 -0.6626 0.2841 +vn 0.6981 -0.6583 0.2816 +vn 0.7844 -0.5993 0.1597 +vn 0.0513 -0.9908 0.1252 +vn -0.0993 -0.6349 0.7662 +vn -0.0738 -0.9946 0.0732 +vn -0.0484 -0.9795 0.1958 +vn -0.0929 -0.9804 0.1735 +vn -0.1142 -0.9191 0.3770 +vn -0.6274 -0.3493 0.6960 +vn -0.7224 0.0478 0.6898 +vn 0.2171 -0.7596 0.6130 +vn -0.7173 -0.6468 0.2593 +vn -0.1338 -0.7545 0.6426 +vn -0.0054 -0.9999 0.0157 +vn -0.0440 -0.9984 0.0359 +vn 0.4330 -0.6782 0.5937 +vn 0.3834 -0.6483 0.6578 +vn 0.0046 -0.9998 0.0192 +vn -0.1342 -0.9859 0.1001 +vn -0.0631 -0.4759 0.8772 +vn -0.4561 -0.4729 0.7539 +vn -0.5159 -0.3874 0.7640 +vn -0.4962 -0.3339 0.8014 +vn 0.0742 -0.9970 -0.0206 +vn 0.0379 -0.9992 -0.0125 +vn 0.0469 -0.9681 0.2463 +vn -0.3715 -0.1219 0.9204 +vn -0.0270 -0.9991 0.0326 +vn -0.0184 -0.9998 0.0062 +vn 0.0292 -0.9993 0.0253 +vn -0.8978 -0.3122 -0.3105 +vn 0.4706 -0.0236 0.8820 +vn 0.0485 -0.9983 -0.0310 +vn 0.0264 -0.9974 0.0673 +vn 0.0735 -0.8901 0.4498 +vn 0.0240 -0.7852 0.6188 +vn 0.2881 -0.6677 0.6864 +vn 0.1557 -0.9847 0.0784 +vn 0.1127 -0.9871 0.1140 +vn 0.1105 -0.9938 0.0152 +vn 0.0132 -0.9985 -0.0529 +vn -0.2163 -0.7490 0.6262 +vn 0.0360 -0.9989 0.0288 +vn -0.0174 -0.8368 0.5472 +vn 0.2669 -0.8900 -0.3696 +vn -0.3773 -0.3601 0.8532 +vn 0.0278 -0.9996 -0.0108 +vn -0.8780 0.2303 -0.4197 +vn 0.4087 -0.9123 0.0254 +vn 0.3071 -0.9223 0.2346 +vn 0.0901 -0.9937 0.0667 +vn 0.0361 -0.9990 -0.0252 +vn 0.0250 -0.9997 0.0085 +vn -0.1112 -0.9733 0.2009 +vn 0.0363 -0.9991 0.0222 +vn 0.2995 -0.9366 0.1821 +vn 0.3690 -0.9075 0.2009 +vn -0.4060 -0.3709 0.8352 +vn 0.0307 -0.9993 0.0227 +vn 0.0308 -0.9957 0.0879 +vn 0.0205 -0.9938 0.1091 +vn -0.4707 -0.6511 0.5954 +vn 0.0086 -0.9989 0.0463 +vn 0.0791 -0.5222 0.8491 +vn 0.0560 -0.9034 0.4251 +vn 0.0375 -0.9989 -0.0298 +vn -0.2665 -0.7020 0.6604 +vn -0.0338 -0.9806 0.1929 +vn -0.0847 -0.9612 0.2627 +vn 0.1117 -0.9890 -0.0967 +vn 0.3627 -0.7465 0.5579 +vn 0.1374 -0.9905 -0.0012 +vn 0.2600 -0.7949 0.5483 +vn 0.0500 -0.9987 -0.0119 +vn 0.4934 -0.6512 0.5766 +vn -0.0892 -0.8003 0.5929 +vn 0.0548 -0.5419 0.8386 +vn 0.1136 -0.9111 0.3963 +vn -0.0400 -0.9989 -0.0244 +vn 0.0128 -0.9999 0.0095 +vn -0.4772 -0.6454 0.5964 +vn -0.0340 -0.9983 0.0471 +vn 0.0283 -0.9991 -0.0311 +vn -0.0073 -0.9982 0.0591 +vn -0.1048 -0.7512 0.6517 +vn 0.0254 -0.9968 0.0757 +vn -0.0096 -0.9986 -0.0527 +vn 0.0271 -0.9996 0.0085 +vn -0.2907 -0.7162 0.6345 +vn 0.0119 -0.9997 0.0230 +vn 0.0078 -0.9996 0.0268 +vn -0.0062 -0.9999 0.0107 +vn 0.0379 -0.8292 0.5577 +vn -0.7795 -0.5304 0.3334 +vn -0.5143 -0.7884 -0.3375 +vn 0.4547 -0.8903 -0.0245 +vn -0.0238 -0.9996 -0.0133 +vn 0.0395 -0.9988 -0.0282 +vn 0.4386 -0.7755 0.4542 +vn 0.0240 -0.9975 0.0669 +vn -0.4490 -0.8893 0.0863 +vn 0.0977 -0.5426 0.8343 +vn -0.0051 -0.9994 -0.0328 +vn 0.2600 -0.8161 0.5161 +vn -0.0597 -0.5402 0.8394 +vn 0.0036 -0.9632 0.2689 +vn -0.0200 -0.9996 -0.0215 +vn 0.0196 -0.9986 -0.0501 +vn 0.0176 -0.9998 0.0010 +vn 0.0138 -0.9998 -0.0170 +vn -0.5514 -0.6358 0.5401 +vn 0.1266 -0.9713 0.2013 +vn -0.1615 -0.9869 0.0020 +vn 0.0251 -0.9991 -0.0336 +vn -0.2997 -0.4743 0.8278 +vn 0.0402 -0.9991 -0.0119 +vn 0.0468 -0.9978 0.0479 +vn -0.1632 -0.9856 -0.0452 +vn 0.0260 -0.9993 0.0261 +vn -0.0229 -0.9983 0.0531 +vn -0.0912 -0.8012 0.5915 +vn -0.0817 -0.5049 0.8593 +vn -0.0922 -0.8393 0.5358 +vn 0.0414 -0.9989 -0.0239 +vn -0.0077 -0.9999 -0.0088 +vn -0.5913 -0.6970 0.4057 +vn 0.0708 -0.9804 0.1841 +vn 0.0225 -0.9645 0.2631 +vn 0.0039 -1.0000 0.0000 +vn -0.3233 -0.4238 0.8461 +vn 0.0299 -0.9984 0.0482 +vn -0.0175 -0.9986 0.0490 +vn 0.0107 -0.9995 -0.0287 +vn -0.0208 -0.9991 -0.0377 +vn -0.6208 -0.6793 0.3914 +vn -0.0187 -0.9995 0.0266 +vn -0.9951 0.0193 0.0969 +usemtl Material.001 +s off +f 2826/1/1 2535/2/1 2060/3/1 +f 1095/4/2 228/5/2 1078/6/2 +f 429/7/3 456/8/3 385/9/3 +f 2331/10/4 456/8/4 429/7/4 +f 1229/11/5 476/12/5 1456/13/5 +f 1402/14/6 1373/15/6 9/16/6 +f 1334/17/7 444/18/7 1243/19/7 +f 3464/20/8 3508/21/8 3446/22/8 +f 1243/19/9 444/18/9 1345/23/9 +f 1530/24/10 36/25/10 1540/26/10 +f 1287/27/11 1227/28/11 1261/29/11 +f 228/5/12 1095/4/12 1214/30/12 +f 471/31/13 312/32/13 1241/33/13 +f 1434/34/14 13/35/14 352/36/14 +f 294/37/15 1345/23/15 552/38/15 +f 1403/39/16 1402/14/16 9/16/16 +f 1459/40/17 1602/41/17 1138/42/17 +f 2341/43/18 1225/44/18 1219/45/18 +f 1461/46/19 1906/47/19 251/48/19 +f 1229/11/20 325/49/20 414/50/20 +f 1292/51/21 1338/52/21 1370/53/21 +f 1421/54/22 1450/55/22 104/56/22 +f 1766/57/23 1981/58/23 1869/59/23 +f 1338/52/24 1381/60/24 1370/53/24 +f 1416/61/25 1433/62/25 1418/63/25 +f 2298/64/26 2968/65/26 2978/66/26 +f 3033/67/27 2972/68/27 2952/69/27 +f 1539/70/28 265/71/28 1701/72/28 +f 173/73/29 1356/74/29 1352/75/29 +f 1332/76/30 1331/77/30 1254/78/30 +f 1806/79/31 158/80/31 1747/81/31 +f 1138/42/32 1602/41/32 1179/82/32 +f 1419/83/33 1434/34/33 352/36/33 +f 298/84/34 328/85/34 191/86/34 +f 2030/87/35 2016/88/35 2042/89/35 +f 1451/90/36 1456/13/36 476/12/36 +f 3506/91/37 3427/92/37 3444/93/37 +f 2331/10/38 429/7/38 345/94/38 +f 3084/95/39 2438/96/39 2428/97/39 +f 1456/13/40 1334/17/40 1234/98/40 +f 47/99/41 1277/100/41 1141/101/41 +f 1299/102/42 1234/98/42 1243/19/42 +f 156/103/43 1229/11/43 414/50/43 +f 1234/98/44 1334/17/44 1243/19/44 +f 1372/104/45 1234/98/45 1299/102/45 +f 3294/105/46 3279/106/46 3280/107/46 +f 1974/108/47 1976/109/47 1975/110/47 +f 1088/111/48 1108/112/48 1855/113/48 +f 737/114/49 1348/115/49 2103/116/49 +f 2015/117/50 2016/88/50 2030/87/50 +f 1334/17/51 1310/118/51 444/18/51 +f 1456/13/52 1234/98/52 1372/104/52 +f 174/119/53 1627/120/53 2819/121/53 +f 459/122/54 514/123/54 1265/124/54 +f 2292/125/55 1120/126/55 2343/127/55 +f 1441/128/56 1386/129/56 10/130/56 +f 104/56/57 1450/55/57 1441/128/57 +f 480/131/58 1421/54/58 382/132/58 +f 2292/133/59 964/134/59 1120/135/59 +f 1285/136/60 1292/51/60 1370/53/60 +f 1374/137/61 1399/138/61 1113/139/61 +f 1162/140/62 783/141/62 823/142/62 +f 113/143/63 902/144/63 365/145/63 +f 1262/146/64 365/145/64 1435/147/64 +f 1346/148/65 1423/149/65 1300/150/65 +f 1380/151/66 396/152/66 1403/39/66 +f 1358/153/67 1263/154/67 1452/155/67 +f 1358/153/68 1315/156/68 1263/154/68 +f 1275/157/69 1316/158/69 1305/159/69 +f 2198/160/70 2227/161/70 2203/162/70 +f 1381/60/71 1419/83/71 352/36/71 +f 1348/115/72 1204/163/72 1308/164/72 +f 3342/165/73 3326/166/73 3305/167/73 +f 118/168/74 119/169/74 1644/170/74 +f 1409/171/75 1321/172/75 1406/173/75 +f 1869/59/76 1862/174/76 1377/175/76 +f 1799/176/77 1817/177/77 1845/178/77 +f 197/179/78 1249/180/78 44/181/78 +f 1232/182/79 1231/183/79 1260/184/79 +f 577/185/80 2120/186/80 2088/187/80 +f 1979/188/81 1978/189/81 2071/190/81 +f 1267/191/82 1285/192/82 1217/193/82 +f 183/194/83 296/195/83 118/168/83 +f 296/195/84 119/169/84 118/168/84 +f 446/196/85 394/197/85 1550/198/85 +f 158/80/86 1325/199/86 1319/200/86 +f 1747/81/87 1158/201/87 1806/79/87 +f 42/202/88 1372/104/88 134/203/88 +f 271/204/89 1241/33/89 1593/205/89 +f 2750/206/90 2793/207/90 2762/208/90 +f 80/209/91 664/210/91 58/211/91 +f 16/212/92 394/197/92 446/196/92 +f 159/213/93 1685/214/93 1682/215/93 +f 382/132/94 1321/172/94 1409/171/94 +f 445/216/95 282/217/95 1685/218/95 +f 2016/88/96 2057/219/96 2042/89/96 +f 1842/220/97 2549/221/97 2574/222/97 +f 352/36/98 13/35/98 12/223/98 +f 2858/224/99 3429/225/99 2767/226/99 +f 1440/227/100 1424/228/100 1332/76/100 +f 346/229/101 382/132/101 21/230/101 +f 21/230/102 382/132/102 270/231/102 +f 1974/108/103 1958/232/103 1976/109/103 +f 1543/233/104 1493/234/104 48/235/104 +f 9/16/105 1256/236/105 1227/28/105 +f 2005/237/106 2016/88/106 2015/117/106 +f 2761/238/107 2791/239/107 2790/240/107 +f 296/195/108 446/196/108 119/169/108 +f 16/212/109 159/213/109 394/197/109 +f 2034/241/110 1570/242/110 1895/243/110 +f 3437/244/111 2424/245/111 3504/246/111 +f 1429/247/112 1295/248/112 1231/249/112 +f 2887/250/113 1703/251/113 1769/252/113 +f 2810/253/114 2809/254/114 2775/255/114 +f 1451/90/115 299/256/115 1456/13/115 +f 104/56/116 1441/128/116 1346/148/116 +f 1232/182/117 1258/257/117 1230/258/117 +f 982/259/118 182/260/118 1147/261/118 +f 10/130/119 1386/129/119 77/262/119 +f 2735/263/120 2699/264/120 2674/265/120 +f 2609/266/121 2434/267/121 2600/268/121 +f 3472/269/122 3461/270/122 2548/271/122 +f 1988/272/123 1439/273/123 2021/274/123 +f 446/196/124 903/275/124 16/212/124 +f 492/276/125 1685/214/125 159/213/125 +f 1093/277/126 1211/278/126 1212/279/126 +f 1163/280/127 3470/281/127 986/282/127 +f 1321/172/128 104/56/128 1406/173/128 +f 1467/283/129 1346/148/129 1300/150/129 +f 1719/284/130 931/285/130 1620/286/130 +f 2615/287/131 2781/288/131 2467/289/131 +f 1593/205/132 1440/290/132 271/204/132 +f 1458/291/133 480/131/133 346/229/133 +f 3024/292/134 3046/293/134 2962/294/134 +f 443/295/135 527/296/135 296/195/135 +f 296/195/136 527/296/136 446/196/136 +f 527/296/137 891/297/137 446/196/137 +f 446/196/138 891/297/138 903/275/138 +f 3511/298/139 3437/299/139 3463/300/139 +f 903/275/140 159/213/140 16/212/140 +f 986/282/141 3470/281/141 1132/301/141 +f 700/302/142 1076/303/142 719/304/142 +f 1093/277/143 1039/305/143 1211/278/143 +f 346/229/144 480/131/144 382/132/144 +f 1441/128/145 10/130/145 1346/148/145 +f 2117/306/146 737/114/146 2082/307/146 +f 3190/308/147 3241/309/147 3173/310/147 +f 1697/311/148 3479/312/148 3425/313/148 +f 3336/314/149 407/315/149 443/295/149 +f 76/316/150 527/296/150 443/295/150 +f 903/275/151 261/317/151 159/213/151 +f 2161/318/152 985/319/152 1026/320/152 +f 429/7/153 385/9/153 480/131/153 +f 2069/321/154 2048/322/154 2121/323/154 +f 1180/324/155 3500/325/155 3485/326/155 +f 493/327/156 507/328/156 481/329/156 +f 407/315/157 76/316/157 443/295/157 +f 76/316/158 376/330/158 527/296/158 +f 376/330/159 886/331/159 527/296/159 +f 527/296/160 886/331/160 891/297/160 +f 1208/332/161 1207/333/161 1193/334/161 +f 3246/335/162 3262/336/162 3216/337/162 +f 2093/338/163 2085/339/163 1978/340/163 +f 315/341/164 409/342/164 814/343/164 +f 1353/344/165 1357/345/165 1238/346/165 +f 2345/347/166 346/229/166 1472/348/166 +f 1204/163/167 1348/115/167 737/114/167 +f 346/229/168 21/230/168 1472/348/168 +f 1406/173/169 1346/148/169 1467/283/169 +f 3433/349/170 3501/350/170 3443/351/170 +f 261/317/171 727/352/171 159/213/171 +f 159/213/172 727/352/172 492/276/172 +f 3505/353/173 3445/354/173 3476/355/173 +f 316/356/174 362/357/174 783/141/174 +f 1002/358/175 3495/359/175 1153/360/175 +f 2594/361/176 2634/362/176 2607/363/176 +f 1321/172/177 1421/54/177 104/56/177 +f 1981/58/178 1154/364/178 1869/59/178 +f 1564/365/179 516/366/179 493/327/179 +f 516/366/180 3222/367/180 493/327/180 +f 478/368/181 488/369/181 468/370/181 +f 2812/371/182 2844/372/182 2828/373/182 +f 90/374/183 91/375/183 112/376/183 +f 154/377/184 136/378/184 103/379/184 +f 345/94/185 429/7/185 1458/291/185 +f 429/7/186 480/131/186 1458/291/186 +f 447/380/187 1564/365/187 1640/381/187 +f 2096/382/188 1894/383/188 2857/384/188 +f 516/366/189 531/385/189 3222/367/189 +f 469/386/190 478/368/190 468/370/190 +f 376/330/191 76/316/191 407/315/191 +f 65/387/192 89/388/192 111/389/192 +f 66/390/193 67/391/193 90/374/193 +f 38/392/194 39/393/194 66/394/194 +f 39/395/195 38/396/195 27/397/195 +f 3471/398/196 3493/399/196 3456/400/196 +f 347/401/197 911/402/197 405/403/197 +f 1018/404/198 1045/405/198 1013/406/198 +f 1762/407/199 1724/408/199 1981/58/199 +f 385/9/200 1229/11/200 156/103/200 +f 2120/409/201 1978/189/201 1979/188/201 +f 1409/171/202 1406/173/202 1375/410/202 +f 1375/410/203 1406/173/203 1467/283/203 +f 397/411/204 398/412/204 1640/381/204 +f 542/413/205 531/385/205 516/366/205 +f 171/414/206 281/415/206 490/416/206 +f 1207/417/207 1181/418/207 1175/419/207 +f 1041/420/208 1319/200/208 1215/421/208 +f 3474/422/209 3446/22/209 3489/423/209 +f 1123/424/210 1146/425/210 1115/426/210 +f 1042/427/211 3478/428/211 1148/429/211 +f 382/132/212 1421/54/212 1321/172/212 +f 396/152/213 1402/14/213 1403/39/213 +f 1472/348/214 21/230/214 1471/430/214 +f 399/431/215 398/412/215 397/411/215 +f 447/380/216 516/366/216 1564/365/216 +f 653/432/217 542/413/217 516/366/217 +f 310/433/218 258/434/218 259/435/218 +f 181/436/219 157/437/219 703/438/219 +f 133/439/220 153/440/220 132/441/220 +f 490/416/221 237/442/221 1300/443/221 +f 40/444/222 67/445/222 39/393/222 +f 33/446/223 40/447/223 27/397/223 +f 67/445/224 66/394/224 39/393/224 +f 40/447/225 39/395/225 27/397/225 +f 988/448/226 998/449/226 978/450/226 +f 112/376/227 89/388/227 90/374/227 +f 1211/278/228 1039/305/228 922/451/228 +f 1156/452/229 1195/453/229 1146/425/229 +f 456/8/230 190/454/230 476/12/230 +f 664/455/231 1811/456/231 1525/457/231 +f 1909/458/232 2442/459/232 2414/460/232 +f 460/461/233 1640/381/233 398/412/233 +f 1640/381/234 460/461/234 447/380/234 +f 482/462/235 516/366/235 447/380/235 +f 260/463/236 293/464/236 240/465/236 +f 489/466/237 899/467/237 525/468/237 +f 186/469/238 212/470/238 200/471/238 +f 240/465/239 266/472/239 247/473/239 +f 324/474/240 359/475/240 323/476/240 +f 588/477/241 38/396/241 53/478/241 +f 196/479/242 200/471/242 224/480/242 +f 123/481/243 131/482/243 116/483/243 +f 157/437/244 181/436/244 187/484/244 +f 266/472/245 324/474/245 310/433/245 +f 703/438/246 157/437/246 153/440/246 +f 703/438/247 153/440/247 133/439/247 +f 726/485/248 946/486/248 1330/487/248 +f 1083/488/249 438/489/249 1127/490/249 +f 1176/491/250 1155/492/250 1199/493/250 +f 783/141/251 362/357/251 120/494/251 +f 1456/13/252 299/256/252 1334/17/252 +f 325/49/253 1372/104/253 42/202/253 +f 137/495/254 290/496/254 3/497/254 +f 341/498/255 354/499/255 399/431/255 +f 400/500/256 398/412/256 399/431/256 +f 482/462/257 447/380/257 460/461/257 +f 482/462/258 653/432/258 516/366/258 +f 293/464/259 266/472/259 240/465/259 +f 142/501/260 152/502/260 151/503/260 +f 153/440/261 152/502/261 132/441/261 +f 248/504/262 171/414/262 227/505/262 +f 123/481/263 151/503/263 168/506/263 +f 133/439/264 132/441/264 124/507/264 +f 101/508/265 124/507/265 91/375/265 +f 260/463/266 225/509/266 840/510/266 +f 1201/511/267 1093/277/267 1212/279/267 +f 1093/277/268 1143/512/268 1091/513/268 +f 595/514/269 697/515/269 842/516/269 +f 1013/406/270 1061/517/270 1037/518/270 +f 299/256/271 1228/519/271 1334/17/271 +f 1314/520/272 444/18/272 1310/118/272 +f 1314/520/273 213/521/273 444/18/273 +f 3103/522/274 3145/523/274 3144/524/274 +f 341/498/275 331/525/275 354/499/275 +f 354/499/276 400/500/276 399/431/276 +f 400/500/277 460/461/277 398/412/277 +f 151/503/278 152/502/278 180/526/278 +f 2964/527/279 2983/528/279 2974/529/279 +f 2458/530/280 979/531/280 2488/532/280 +f 117/533/281 123/481/281 116/483/281 +f 454/534/282 441/535/282 468/536/282 +f 911/402/283 938/537/283 406/538/283 +f 406/538/284 938/537/284 418/539/284 +f 1605/540/285 1617/541/285 1854/542/285 +f 1237/543/286 506/544/286 106/545/286 +f 331/525/287 355/546/287 354/499/287 +f 420/547/288 460/461/288 400/500/288 +f 103/379/289 3218/548/289 661/549/289 +f 310/433/290 323/476/290 309/550/290 +f 636/551/291 101/508/291 75/552/291 +f 425/553/292 470/554/292 442/555/292 +f 501/556/293 547/557/293 513/558/293 +f 1394/559/294 1408/560/294 1404/561/294 +f 3182/562/295 2043/563/295 1489/564/295 +f 2709/565/296 263/566/296 3386/567/296 +f 355/546/297 400/500/297 354/499/297 +f 483/568/298 482/462/298 460/461/298 +f 483/568/299 517/569/299 482/462/299 +f 517/569/300 653/432/300 482/462/300 +f 517/569/301 532/570/301 653/432/301 +f 1162/140/302 823/142/302 377/571/302 +f 547/557/303 125/572/303 79/573/303 +f 1384/574/304 501/556/304 680/575/304 +f 959/576/305 954/577/305 3029/578/305 +f 424/579/306 441/535/306 454/534/306 +f 2696/580/307 964/581/307 2292/125/307 +f 556/582/308 162/583/308 548/584/308 +f 393/585/309 440/586/309 416/587/309 +f 1379/588/310 182/260/310 982/259/310 +f 1785/589/311 1575/590/311 1796/591/311 +f 2104/592/312 2047/593/312 1378/594/312 +f 1243/19/313 1345/23/313 268/595/313 +f 284/596/314 331/525/314 263/566/314 +f 284/596/315 332/597/315 331/525/315 +f 332/597/316 355/546/316 331/525/316 +f 420/547/317 483/568/317 460/461/317 +f 488/369/318 537/598/318 477/599/318 +f 248/504/319 227/505/319 554/600/319 +f 1195/453/320 1194/601/320 1166/602/320 +f 101/508/321 91/375/321 75/552/321 +f 162/583/322 1389/603/322 782/604/322 +f 2082/307/323 737/114/323 2103/116/323 +f 328/605/324 329/606/324 1335/607/324 +f 385/9/325 156/103/325 1421/54/325 +f 190/454/326 456/8/326 2361/608/326 +f 366/609/327 400/500/327 355/546/327 +f 421/610/328 420/547/328 400/500/328 +f 430/611/329 483/568/329 420/547/329 +f 508/612/330 517/569/330 483/568/330 +f 517/569/331 564/613/331 532/570/331 +f 532/570/332 564/613/332 563/614/332 +f 124/507/333 112/376/333 91/375/333 +f 3503/615/334 3502/616/334 1042/427/334 +f 53/617/335 54/618/335 74/619/335 +f 1372/104/336 1299/102/336 134/203/336 +f 244/620/337 274/621/337 263/566/337 +f 263/566/338 274/621/338 284/596/338 +f 274/621/339 332/597/339 284/596/339 +f 421/610/340 430/611/340 420/547/340 +f 680/575/341 513/558/341 522/622/341 +f 488/623/342 477/624/342 1354/625/342 +f 323/476/343 359/475/343 393/585/343 +f 455/626/344 470/554/344 469/386/344 +f 1631/627/345 1912/628/345 1531/629/345 +f 227/505/346 171/414/346 326/630/346 +f 74/619/347 65/631/347 53/617/347 +f 998/449/348 968/632/348 954/577/348 +f 478/633/349 523/634/349 488/623/349 +f 316/356/350 558/635/350 2393/636/350 +f 1433/62/351 1463/637/351 1462/638/351 +f 329/606/352 1380/151/352 1287/27/352 +f 356/639/353 355/546/353 332/597/353 +f 356/639/354 366/609/354 355/546/354 +f 366/609/355 386/640/355 400/500/355 +f 494/641/356 483/568/356 430/611/356 +f 543/642/357 564/613/357 517/569/357 +f 528/643/358 563/614/358 564/613/358 +f 417/644/359 424/645/359 440/586/359 +f 468/370/360 488/369/360 1354/646/360 +f 911/402/361 406/538/361 405/403/361 +f 609/647/362 67/445/362 40/444/362 +f 123/481/363 142/501/363 151/503/363 +f 1441/128/364 42/202/364 1386/129/364 +f 1287/27/365 1380/151/365 1403/39/365 +f 2592/648/366 2424/245/366 3437/244/366 +f 1657/649/367 2625/650/367 1662/651/367 +f 2753/652/368 2723/653/368 2640/654/368 +f 366/609/369 378/655/369 386/640/369 +f 400/500/370 386/640/370 421/610/370 +f 494/641/371 508/612/371 483/568/371 +f 508/612/372 543/642/372 517/569/372 +f 212/470/373 224/480/373 200/471/373 +f 3445/354/374 3511/298/374 3497/656/374 +f 1171/657/375 558/635/375 316/356/375 +f 90/658/376 89/659/376 74/619/376 +f 168/506/377 180/526/377 167/660/377 +f 154/377/378 160/661/378 136/378/378 +f 3506/91/379 2768/662/379 3427/92/379 +f 3494/663/380 3475/664/380 3459/665/380 +f 251/48/381 1906/47/381 262/666/381 +f 1525/667/382 1549/668/382 58/211/382 +f 1228/519/383 1310/118/383 1334/17/383 +f 2769/669/384 2615/287/384 2467/289/384 +f 252/670/385 244/620/385 3287/671/385 +f 274/621/386 285/672/386 332/597/386 +f 332/597/387 285/672/387 356/639/387 +f 356/639/388 378/655/388 366/609/388 +f 421/610/389 431/673/389 430/611/389 +f 431/673/390 494/641/390 430/611/390 +f 240/465/391 247/473/391 212/470/391 +f 125/572/392 281/415/392 171/414/392 +f 310/433/393 324/474/393 323/476/393 +f 202/674/394 756/675/394 144/676/394 +f 2643/677/395 1928/678/395 2879/679/395 +f 2894/680/396 2615/287/396 2766/681/396 +f 3287/671/397 3095/682/397 252/670/397 +f 3371/683/398 3381/684/398 3370/685/398 +f 300/686/399 274/621/399 244/620/399 +f 274/621/400 300/686/400 285/672/400 +f 342/687/401 378/655/401 356/639/401 +f 285/672/402 342/687/402 356/639/402 +f 494/641/403 543/642/403 508/612/403 +f 543/642/404 544/688/404 564/613/404 +f 544/688/405 541/689/405 564/613/405 +f 564/613/406 541/689/406 528/643/406 +f 470/690/407 524/691/407 469/692/407 +f 418/539/408 442/555/408 441/693/408 +f 201/694/409 2168/695/409 427/696/409 +f 454/534/410 1313/697/410 424/579/410 +f 225/509/411 260/463/411 181/436/411 +f 2264/698/412 3479/312/412 2253/699/412 +f 425/553/413 426/700/413 470/554/413 +f 142/501/414 123/481/414 117/533/414 +f 2552/701/415 1071/702/415 1059/703/415 +f 3457/704/416 2754/705/416 3482/706/416 +f 20/707/417 2067/708/417 2047/593/417 +f 126/709/418 155/710/418 154/377/418 +f 583/711/419 22/712/419 1488/713/419 +f 23/714/420 22/712/420 583/711/420 +f 22/712/421 23/714/421 36/715/421 +f 155/710/422 172/716/422 154/377/422 +f 1540/26/423 36/25/423 1549/668/423 +f 252/670/424 300/686/424 244/620/424 +f 300/686/425 342/687/425 285/672/425 +f 386/640/426 411/717/426 421/610/426 +f 421/610/427 411/717/427 431/673/427 +f 111/389/428 89/388/428 116/483/428 +f 470/690/429 489/718/429 524/691/429 +f 524/719/430 489/466/430 556/582/430 +f 548/584/431 162/583/431 782/604/431 +f 203/720/432 437/721/432 750/722/432 +f 1127/490/433 438/489/433 1133/723/433 +f 2607/363/434 2634/362/434 2652/724/434 +f 1804/725/435 1778/726/435 1779/727/435 +f 361/728/436 426/700/436 425/553/436 +f 1494/729/437 2469/730/437 1693/731/437 +f 2721/732/438 2750/733/438 2720/734/438 +f 2107/735/439 1666/736/439 1350/737/439 +f 286/738/440 300/686/440 252/670/440 +f 301/739/441 342/687/441 300/686/441 +f 342/687/442 387/740/442 378/655/442 +f 378/655/443 387/740/443 386/640/443 +f 386/640/444 387/740/444 411/717/444 +f 431/673/445 448/741/445 494/641/445 +f 494/641/446 448/741/446 543/642/446 +f 543/642/447 533/742/447 544/688/447 +f 789/743/448 914/744/448 541/689/448 +f 65/631/449 74/619/449 89/659/449 +f 180/526/450 200/471/450 196/479/450 +f 682/745/451 680/575/451 522/622/451 +f 1142/746/452 1208/332/452 1193/334/452 +f 132/441/453 152/502/453 142/501/453 +f 186/469/454 200/471/454 180/526/454 +f 1125/747/455 1129/748/455 1106/749/455 +f 1117/750/456 1015/751/456 1092/752/456 +f 1747/81/457 1041/420/457 182/260/457 +f 3489/753/458 3508/754/458 3500/325/458 +f 59/755/459 80/209/459 58/211/459 +f 3207/756/460 174/757/460 2819/758/460 +f 2894/680/461 2766/681/461 3428/759/461 +f 252/670/462 234/760/462 286/738/462 +f 301/739/463 300/686/463 286/738/463 +f 387/740/464 388/761/464 411/717/464 +f 411/717/465 448/741/465 431/673/465 +f 495/762/466 533/742/466 543/642/466 +f 448/741/467 495/762/467 543/642/467 +f 180/526/468 157/437/468 186/469/468 +f 556/763/469 539/764/469 524/691/469 +f 782/604/470 1389/603/470 756/675/470 +f 1252/765/471 1242/766/471 1267/767/471 +f 1242/766/472 1292/51/472 1285/136/472 +f 2182/768/473 2006/769/473 2141/770/473 +f 379/771/474 387/740/474 342/687/474 +f 388/761/475 432/772/475 411/717/475 +f 432/772/476 473/773/476 411/717/476 +f 473/773/477 448/741/477 411/717/477 +f 473/773/478 495/762/478 448/741/478 +f 496/774/479 544/688/479 533/742/479 +f 544/688/480 550/775/480 541/689/480 +f 664/210/481 80/209/481 1653/776/481 +f 187/484/482 260/463/482 186/469/482 +f 3498/777/483 3430/778/483 3445/354/483 +f 186/469/484 260/463/484 240/465/484 +f 393/585/485 359/475/485 417/644/485 +f 538/779/486 548/584/486 645/780/486 +f 3464/20/487 1830/781/487 3469/782/487 +f 23/783/488 60/784/488 59/755/488 +f 68/785/489 1578/786/489 80/787/489 +f 1456/13/490 1372/104/490 325/49/490 +f 1229/11/491 1456/13/491 325/49/491 +f 3433/349/492 3477/788/492 3501/350/492 +f 234/760/493 275/789/493 286/738/493 +f 301/739/494 333/790/494 342/687/494 +f 333/790/495 379/771/495 342/687/495 +f 387/740/496 379/771/496 388/761/496 +f 495/762/497 496/774/497 533/742/497 +f 123/481/498 168/506/498 150/791/498 +f 454/534/499 1354/625/499 1313/697/499 +f 337/792/500 359/475/500 324/474/500 +f 540/793/501 948/794/501 549/795/501 +f 103/379/502 136/378/502 102/796/502 +f 145/797/503 155/710/503 126/709/503 +f 548/584/504 782/604/504 645/780/504 +f 2977/798/505 956/799/505 2429/800/505 +f 937/801/506 55/802/506 313/803/506 +f 93/804/507 103/379/507 102/796/507 +f 385/9/508 476/12/508 1229/11/508 +f 2656/805/509 2691/806/509 2668/807/509 +f 275/789/510 287/808/510 286/738/510 +f 287/808/511 301/739/511 286/738/511 +f 287/808/512 333/790/512 301/739/512 +f 379/771/513 389/809/513 388/761/513 +f 389/809/514 432/772/514 388/761/514 +f 473/773/515 474/810/515 495/762/515 +f 495/762/516 474/810/516 496/774/516 +f 550/775/517 789/743/517 541/689/517 +f 78/811/518 93/804/518 102/796/518 +f 197/812/519 203/720/519 172/716/519 +f 3228/813/520 3241/309/520 3190/308/520 +f 54/618/521 66/394/521 74/619/521 +f 793/814/522 794/815/522 847/816/522 +f 60/784/523 81/817/523 68/818/523 +f 81/819/524 1578/786/524 68/785/524 +f 2083/820/525 2117/306/525 2065/821/525 +f 1747/81/526 158/80/526 1041/420/526 +f 20/707/527 2087/822/527 2067/708/527 +f 1458/291/528 346/229/528 2345/347/528 +f 245/823/529 234/760/529 235/824/529 +f 245/823/530 275/789/530 234/760/530 +f 319/825/531 333/790/531 287/808/531 +f 367/826/532 379/771/532 333/790/532 +f 474/810/533 545/827/533 496/774/533 +f 545/827/534 544/688/534 496/774/534 +f 545/827/535 550/775/535 544/688/535 +f 550/775/536 55/802/536 789/743/536 +f 563/614/537 914/744/537 757/828/537 +f 79/573/538 125/572/538 171/414/538 +f 38/396/539 66/390/539 54/829/539 +f 112/376/540 117/533/540 89/388/540 +f 271/204/541 668/830/541 811/831/541 +f 271/204/542 811/831/542 1241/33/542 +f 226/832/543 1224/833/543 1100/834/543 +f 94/835/544 1578/786/544 81/819/544 +f 94/835/545 1607/836/545 1578/786/545 +f 3502/837/546 3465/838/546 3455/839/546 +f 302/840/547 287/808/547 275/789/547 +f 319/825/548 367/826/548 333/790/548 +f 367/826/549 389/809/549 379/771/549 +f 433/841/550 432/772/550 389/809/550 +f 432/772/551 449/842/551 473/773/551 +f 473/773/552 449/842/552 474/810/552 +f 406/538/553 441/693/553 424/645/553 +f 2872/843/554 2198/844/554 2454/845/554 +f 2290/846/555 2193/847/555 2443/848/555 +f 2917/849/556 2927/850/556 2916/851/556 +f 162/583/557 948/794/557 890/852/557 +f 359/475/558 405/403/558 417/644/558 +f 549/795/559 948/794/559 162/583/559 +f 609/647/560 75/853/560 67/445/560 +f 361/728/561 915/854/561 426/700/561 +f 1320/855/562 1593/205/562 312/32/562 +f 1142/746/563 964/581/563 1208/332/563 +f 3453/856/564 2669/857/564 1897/858/564 +f 606/859/565 593/860/565 60/861/565 +f 593/860/566 81/819/566 60/861/566 +f 480/131/567 385/9/567 1421/54/567 +f 1669/862/568 443/295/568 183/194/568 +f 276/863/569 275/789/569 245/823/569 +f 276/863/570 302/840/570 275/789/570 +f 319/825/571 287/808/571 302/840/571 +f 369/864/572 433/841/572 389/809/572 +f 432/772/573 433/841/573 449/842/573 +f 449/842/574 497/865/574 474/810/574 +f 497/865/575 545/827/575 474/810/575 +f 2174/866/576 977/867/576 2178/868/576 +f 3434/869/577 3441/870/577 3468/871/577 +f 2768/662/578 3461/270/578 3473/872/578 +f 74/873/579 66/390/579 90/374/579 +f 811/831/580 471/31/580 1241/33/580 +f 406/538/581 418/539/581 441/693/581 +f 501/556/582 537/598/582 547/557/582 +f 82/874/583 81/819/583 593/860/583 +f 82/874/584 94/835/584 81/819/584 +f 270/231/585 382/132/585 1409/171/585 +f 235/824/586 217/875/586 245/823/586 +f 367/826/587 369/864/587 389/809/587 +f 497/865/588 518/876/588 545/827/588 +f 518/876/589 546/877/589 545/827/589 +f 545/827/590 546/877/590 550/775/590 +f 339/878/591 55/802/591 550/775/591 +f 489/718/592 525/879/592 556/763/592 +f 153/440/593 157/437/593 152/502/593 +f 347/401/594 337/792/594 858/880/594 +f 525/468/595 540/793/595 549/795/595 +f 151/503/596 180/526/596 168/506/596 +f 2277/881/597 1120/126/597 1025/882/597 +f 3469/782/598 3493/399/598 3508/21/598 +f 127/883/599 94/835/599 82/874/599 +f 1262/146/600 113/143/600 365/145/600 +f 1960/884/601 833/885/601 1935/886/601 +f 1687/887/602 206/888/602 217/875/602 +f 217/875/603 236/889/603 245/823/603 +f 245/823/604 236/889/604 276/863/604 +f 303/890/605 302/840/605 276/863/605 +f 368/891/606 319/825/606 302/840/606 +f 303/890/607 368/891/607 302/840/607 +f 368/891/608 367/826/608 319/825/608 +f 367/826/609 368/891/609 369/864/609 +f 433/841/610 484/892/610 449/842/610 +f 449/842/611 484/892/611 497/865/611 +f 383/893/612 339/878/612 550/775/612 +f 546/877/613 383/893/613 550/775/613 +f 339/894/614 313/895/614 55/896/614 +f 968/632/615 996/897/615 3063/898/615 +f 629/899/616 75/552/616 609/900/616 +f 471/31/617 360/901/617 312/32/617 +f 1489/564/618 2016/88/618 2005/237/618 +f 556/582/619 525/468/619 162/583/619 +f 127/883/620 146/902/620 138/903/620 +f 206/888/621 236/889/621 217/875/621 +f 236/889/622 264/904/622 276/863/622 +f 264/904/623 303/890/623 276/863/623 +f 433/841/624 461/905/624 484/892/624 +f 484/892/625 518/876/625 497/865/625 +f 339/894/626 479/906/626 1328/907/626 +f 1037/518/627 1067/908/627 1044/909/627 +f 1199/493/628 1194/601/628 1211/278/628 +f 197/179/629 44/181/629 203/910/629 +f 1384/574/630 477/599/630 501/556/630 +f 360/901/631 1320/855/631 312/32/631 +f 1567/911/632 1798/912/632 1597/913/632 +f 1014/914/633 803/915/633 1161/916/633 +f 593/860/634 32/917/634 82/874/634 +f 83/918/635 127/883/635 82/874/635 +f 146/902/636 175/919/636 1639/920/636 +f 1687/887/637 1639/920/637 175/919/637 +f 175/919/638 206/888/638 1687/887/638 +f 303/890/639 334/921/639 368/891/639 +f 334/921/640 370/922/640 368/891/640 +f 368/891/641 370/922/641 369/864/641 +f 370/922/642 401/923/642 433/841/642 +f 369/864/643 370/922/643 433/841/643 +f 401/923/644 461/905/644 433/841/644 +f 484/892/645 509/924/645 518/876/645 +f 479/925/646 339/878/646 383/893/646 +f 1055/926/647 1061/517/647 1045/405/647 +f 316/356/648 2393/636/648 362/357/648 +f 348/927/649 915/854/649 361/728/649 +f 1320/855/650 327/928/650 106/929/650 +f 83/918/651 82/874/651 32/917/651 +f 83/918/652 95/930/652 127/883/652 +f 127/883/653 95/930/653 146/902/653 +f 288/931/654 303/890/654 264/904/654 +f 288/931/655 334/921/655 303/890/655 +f 334/921/656 357/932/656 370/922/656 +f 461/905/657 509/924/657 484/892/657 +f 518/876/658 534/933/658 546/877/658 +f 157/437/659 187/484/659 186/469/659 +f 1120/126/660 964/581/660 1142/746/660 +f 89/388/661 117/533/661 116/483/661 +f 556/582/662 548/584/662 539/934/662 +f 852/935/663 41/936/663 1320/855/663 +f 360/901/664 852/935/664 1320/855/664 +f 41/936/665 327/928/665 1320/855/665 +f 1831/937/666 1577/938/666 1599/939/666 +f 293/464/667 858/880/667 266/472/667 +f 1375/410/668 237/940/668 1255/941/668 +f 1979/942/669 2122/943/669 1206/944/669 +f 32/917/670 45/945/670 83/918/670 +f 95/930/671 139/946/671 146/902/671 +f 146/902/672 139/946/672 175/919/672 +f 175/919/673 192/947/673 206/888/673 +f 192/947/674 193/948/674 206/888/674 +f 193/948/675 246/949/675 206/888/675 +f 246/949/676 236/889/676 206/888/676 +f 246/949/677 264/904/677 236/889/677 +f 288/931/678 304/950/678 334/921/678 +f 334/921/679 304/950/679 357/932/679 +f 304/950/680 358/951/680 357/932/680 +f 357/932/681 401/923/681 370/922/681 +f 401/923/682 434/952/682 461/905/682 +f 518/876/683 509/924/683 534/933/683 +f 2696/953/684 2767/226/684 964/134/684 +f 2005/237/685 1976/109/685 1489/564/685 +f 1025/882/686 1120/126/686 1142/746/686 +f 139/946/687 176/954/687 175/919/687 +f 176/954/688 192/947/688 175/919/688 +f 246/949/689 277/955/689 264/904/689 +f 277/955/690 288/931/690 264/904/690 +f 534/933/691 383/893/691 546/877/691 +f 523/956/692 539/934/692 538/779/692 +f 1237/957/693 106/929/693 19/958/693 +f 37/959/694 46/960/694 45/945/694 +f 46/960/695 83/918/695 45/945/695 +f 128/961/696 139/946/696 95/930/696 +f 193/948/697 253/962/697 246/949/697 +f 358/951/698 371/963/698 357/932/698 +f 357/932/699 371/963/699 401/923/699 +f 371/963/700 412/964/700 401/923/700 +f 412/964/701 434/952/701 401/923/701 +f 434/952/702 450/965/702 461/905/702 +f 450/965/703 509/924/703 461/905/703 +f 450/965/704 498/966/704 509/924/704 +f 509/924/705 498/966/705 534/933/705 +f 75/552/706 91/375/706 67/391/706 +f 41/936/707 297/967/707 327/928/707 +f 1551/968/708 84/969/708 83/918/708 +f 83/918/709 84/969/709 95/930/709 +f 176/954/710 193/948/710 192/947/710 +f 278/970/711 277/955/711 246/949/711 +f 305/971/712 288/931/712 277/955/712 +f 288/931/713 305/971/713 304/950/713 +f 304/950/714 305/971/714 358/951/714 +f 412/964/715 451/972/715 434/952/715 +f 451/972/716 450/965/716 434/952/716 +f 534/933/717 565/973/717 383/893/717 +f 565/973/718 135/974/718 383/893/718 +f 383/893/719 135/974/719 479/925/719 +f 213/975/720 502/976/720 479/925/720 +f 971/977/721 970/978/721 961/979/721 +f 337/792/722 405/403/722 359/475/722 +f 539/934/723 548/584/723 538/779/723 +f 326/630/724 170/980/724 227/505/724 +f 297/967/725 18/981/725 327/928/725 +f 327/928/726 18/981/726 19/958/726 +f 1153/360/727 3447/982/727 1064/983/727 +f 385/9/728 456/8/728 476/12/728 +f 84/969/729 128/961/729 95/930/729 +f 147/984/730 176/954/730 139/946/730 +f 253/962/731 278/970/731 246/949/731 +f 278/970/732 305/971/732 277/955/732 +f 335/985/733 380/986/733 371/963/733 +f 358/951/734 335/985/734 371/963/734 +f 371/963/735 390/987/735 412/964/735 +f 462/988/736 498/966/736 450/965/736 +f 267/989/737 479/925/737 135/974/737 +f 267/989/738 213/975/738 479/925/738 +f 132/441/739 142/501/739 117/533/739 +f 247/473/740 259/435/740 224/480/740 +f 19/958/741 18/981/741 1237/957/741 +f 2332/990/742 1458/291/742 2345/347/742 +f 129/991/743 139/946/743 128/961/743 +f 129/991/744 147/984/744 139/946/744 +f 207/992/745 253/962/745 193/948/745 +f 335/985/746 358/951/746 305/971/746 +f 343/993/747 380/986/747 335/985/747 +f 371/963/748 380/986/748 390/987/748 +f 451/972/749 462/988/749 450/965/749 +f 18/981/750 559/994/750 1237/957/750 +f 562/995/751 608/996/751 2/997/751 +f 2093/338/752 2120/186/752 577/185/752 +f 306/998/753 305/971/753 278/970/753 +f 306/998/754 335/985/754 305/971/754 +f 390/987/755 435/999/755 412/964/755 +f 463/1000/756 451/972/756 412/964/756 +f 435/999/757 463/1000/757 412/964/757 +f 519/1001/758 534/933/758 498/966/758 +f 519/1001/759 565/973/759 534/933/759 +f 67/391/760 91/375/760 90/374/760 +f 3424/1002/761 3492/1003/761 3426/1004/761 +f 441/693/762 442/555/762 455/626/762 +f 18/981/763 562/1005/763 559/994/763 +f 943/1006/764 1297/1007/764 684/1008/764 +f 3470/281/765 3497/656/765 3490/1009/765 +f 84/969/766 1580/1010/766 128/961/766 +f 164/1011/767 176/954/767 147/984/767 +f 164/1011/768 193/948/768 176/954/768 +f 164/1011/769 207/992/769 193/948/769 +f 289/1012/770 306/998/770 278/970/770 +f 343/993/771 390/987/771 380/986/771 +f 499/1013/772 462/988/772 451/972/772 +f 463/1000/773 499/1013/773 451/972/773 +f 552/1014/774 135/974/774 565/973/774 +f 552/1014/775 267/989/775 135/974/775 +f 959/576/776 998/449/776 954/577/776 +f 454/534/777 468/536/777 1354/625/777 +f 524/691/778 539/764/778 523/634/778 +f 181/436/779 260/463/779 187/484/779 +f 1300/150/780 1423/149/780 326/1015/780 +f 2030/87/781 2041/1016/781 2040/1017/781 +f 218/1018/782 207/992/782 164/1011/782 +f 218/1018/783 230/1019/783 207/992/783 +f 230/1019/784 253/962/784 207/992/784 +f 230/1019/785 254/1020/785 253/962/785 +f 253/962/786 254/1020/786 278/970/786 +f 344/1021/787 335/985/787 306/998/787 +f 344/1021/788 343/993/788 335/985/788 +f 344/1021/789 372/1022/789 343/993/789 +f 343/993/790 372/1022/790 390/987/790 +f 390/987/791 413/1023/791 435/999/791 +f 519/1001/792 498/966/792 462/988/792 +f 499/1013/793 519/1001/793 462/988/793 +f 535/1024/794 565/973/794 519/1001/794 +f 1199/493/795 1211/278/795 922/451/795 +f 998/449/796 1018/1025/796 997/1026/796 +f 1018/404/797 1013/406/797 997/1027/797 +f 152/502/798 157/437/798 180/526/798 +f 54/829/799 53/478/799 38/396/799 +f 143/1028/800 133/439/800 124/507/800 +f 524/691/801 523/634/801 478/633/801 +f 559/994/802 2/1029/802 419/1030/802 +f 353/1031/803 560/1032/803 25/1033/803 +f 1183/1034/804 1465/1035/804 1438/1036/804 +f 1805/1037/805 1838/1038/805 3510/1039/805 +f 42/202/806 134/203/806 1386/129/806 +f 114/1040/807 129/991/807 128/961/807 +f 148/1041/808 147/984/808 129/991/808 +f 148/1041/809 164/1011/809 147/984/809 +f 254/1020/810 289/1012/810 278/970/810 +f 289/1012/811 344/1021/811 306/998/811 +f 391/1042/812 413/1023/812 390/987/812 +f 1149/1043/813 922/451/813 594/1044/813 +f 198/1045/814 197/812/814 172/716/814 +f 1772/1046/815 1733/1047/815 1734/1048/815 +f 2/1029/816 560/1032/816 419/1030/816 +f 419/1049/817 560/1050/817 353/1051/817 +f 2967/1052/818 957/1053/818 956/1054/818 +f 167/660/819 180/526/819 196/479/819 +f 414/50/820 42/202/820 1441/128/820 +f 1450/55/821 414/50/821 1441/128/821 +f 165/1055/822 218/1018/822 164/1011/822 +f 255/1056/823 230/1019/823 218/1018/823 +f 255/1056/824 254/1020/824 230/1019/824 +f 289/1012/825 307/1057/825 344/1021/825 +f 307/1057/826 372/1022/826 344/1021/826 +f 391/1042/827 390/987/827 372/1022/827 +f 402/1058/828 413/1023/828 391/1042/828 +f 413/1023/829 436/1059/829 435/999/829 +f 435/999/830 436/1059/830 463/1000/830 +f 485/1060/831 499/1013/831 463/1000/831 +f 485/1060/832 519/1001/832 499/1013/832 +f 485/1060/833 535/1024/833 519/1001/833 +f 552/1014/834 565/973/834 535/1024/834 +f 680/575/835 774/1061/835 1384/574/835 +f 102/796/836 670/1062/836 92/1063/836 +f 56/1064/837 554/600/837 280/1065/837 +f 323/476/838 375/1066/838 322/1067/838 +f 469/386/839 524/719/839 478/368/839 +f 2005/237/840 2015/117/840 1975/110/840 +f 148/1041/841 129/991/841 114/1040/841 +f 165/1055/842 164/1011/842 148/1041/842 +f 165/1055/843 208/1068/843 218/1018/843 +f 208/1068/844 255/1056/844 218/1018/844 +f 255/1056/845 219/1069/845 254/1020/845 +f 289/1070/846 1661/1071/846 307/1072/846 +f 1661/1071/847 1720/1073/847 307/1072/847 +f 1197/1074/848 3486/1075/848 2702/1076/848 +f 1720/1073/849 1594/1077/849 307/1072/849 +f 1594/1078/850 391/1042/850 372/1022/850 +f 436/1059/851 464/1079/851 463/1000/851 +f 463/1000/852 464/1079/852 485/1060/852 +f 559/1080/853 419/1049/853 353/1051/853 +f 2499/1081/854 2161/1082/854 2096/382/854 +f 289/1070/855 254/1083/855 1661/1071/855 +f 212/470/856 247/473/856 224/480/856 +f 455/626/857 469/386/857 441/693/857 +f 469/386/858 468/370/858 441/693/858 +f 1981/58/859 1378/594/859 1154/364/859 +f 156/103/860 414/50/860 1450/55/860 +f 1406/173/861 104/56/861 1346/148/861 +f 1222/1084/862 1224/833/862 226/832/862 +f 3476/355/863 3445/354/863 3497/656/863 +f 402/1058/864 403/1085/864 413/1023/864 +f 413/1023/865 403/1085/865 436/1059/865 +f 1/1086/866 552/1014/866 535/1024/866 +f 1/1086/867 26/1087/867 552/1014/867 +f 26/1087/868 294/1088/868 552/1014/868 +f 1772/1046/869 1771/1089/869 1733/1047/869 +f 1771/1089/870 1770/1090/870 1733/1047/870 +f 2976/1091/871 956/799/871 2977/798/871 +f 168/506/872 167/660/872 150/791/872 +f 393/585/873 417/644/873 440/586/873 +f 996/897/874 987/1092/874 3063/898/874 +f 754/1093/875 272/1094/875 1462/1095/875 +f 1267/191/876 1100/834/876 1252/1096/876 +f 3496/1097/877 3503/1098/877 3452/1099/877 +f 148/1041/878 114/1040/878 122/1100/878 +f 148/1041/879 177/1101/879 165/1055/879 +f 165/1055/880 177/1101/880 208/1068/880 +f 177/1101/881 209/1102/881 208/1068/881 +f 209/1102/882 219/1069/882 255/1056/882 +f 208/1068/883 209/1102/883 255/1056/883 +f 1937/1103/884 1651/1104/884 1633/1105/884 +f 3448/1106/885 3473/1107/885 3481/1108/885 +f 1375/410/886 1467/283/886 237/940/886 +f 402/1058/887 1610/1109/887 403/1085/887 +f 465/1110/888 485/1060/888 464/1079/888 +f 2358/1111/889 2134/1112/889 2221/1113/889 +f 59/755/890 60/784/890 80/209/890 +f 112/376/891 132/441/891 117/533/891 +f 3236/1114/892 3264/1115/892 3460/1116/892 +f 1118/1117/893 1180/324/893 3485/326/893 +f 554/600/894 227/505/894 280/1065/894 +f 323/476/895 393/585/895 375/1066/895 +f 1421/54/896 156/103/896 1450/55/896 +f 69/1118/897 1553/1119/897 1543/1120/897 +f 69/1118/898 1583/1121/898 1553/1119/898 +f 177/1122/899 1680/1123/899 209/1124/899 +f 21/230/900 270/231/900 514/123/900 +f 1771/1089/901 1800/1125/901 1770/1090/901 +f 1471/430/902 21/230/902 1457/1126/902 +f 1240/1127/903 1261/29/903 2206/1128/903 +f 2768/662/904 3473/872/904 3427/92/904 +f 403/1085/905 422/1129/905 436/1059/905 +f 436/1059/906 422/1129/906 464/1079/906 +f 465/1110/907 520/1130/907 485/1060/907 +f 520/1130/908 535/1024/908 485/1060/908 +f 3430/778/909 3511/298/909 3445/354/909 +f 2248/1131/910 2309/1132/910 2297/1133/910 +f 858/880/911 324/474/911 266/472/911 +f 196/479/912 224/480/912 239/1134/912 +f 522/622/913 513/558/913 56/1064/913 +f 247/473/914 266/472/914 310/433/914 +f 1771/1089/915 1808/1135/915 1800/1125/915 +f 49/1136/916 61/1137/916 48/235/916 +f 61/1137/917 1543/233/917 48/235/917 +f 1517/1138/918 49/1136/918 1527/1139/918 +f 652/1140/919 1920/1141/919 2229/1142/919 +f 1453/1143/920 1381/60/920 330/1144/920 +f 237/940/921 1467/283/921 1300/150/921 +f 492/1145/922 1466/1146/922 1685/218/922 +f 1808/1147/923 1817/177/923 1800/1148/923 +f 1370/53/924 1381/60/924 1395/1149/924 +f 422/1129/925 1664/1150/925 464/1079/925 +f 1664/1150/926 465/1110/926 464/1079/926 +f 520/1130/927 5/1151/927 535/1024/927 +f 5/1151/928 1/1086/928 535/1024/928 +f 268/1152/929 294/1088/929 26/1087/929 +f 268/1152/930 1345/1153/930 294/1088/930 +f 28/1154/931 634/1155/931 340/1156/931 +f 92/1063/932 78/811/932 102/796/932 +f 523/956/933 538/779/933 537/598/933 +f 61/1157/934 69/1118/934 1543/1120/934 +f 85/1158/935 1583/1121/935 69/1118/935 +f 85/1158/936 98/1159/936 97/1160/936 +f 1583/1121/937 85/1158/937 97/1160/937 +f 1614/1161/938 1601/1162/938 97/1160/938 +f 98/1159/939 1614/1161/939 97/1160/939 +f 946/486/940 121/1163/940 1330/487/940 +f 1274/1164/941 270/231/941 1409/171/941 +f 1373/15/942 1417/1165/942 273/1166/942 +f 514/123/943 270/231/943 1274/1164/943 +f 1230/1167/944 1252/1096/944 1224/833/944 +f 1610/1109/945 422/1129/945 403/1085/945 +f 510/1168/946 520/1130/946 465/1110/946 +f 311/1169/947 268/1152/947 26/1087/947 +f 1094/1170/948 1102/1171/948 1114/1172/948 +f 1091/513/949 558/635/949 1171/657/949 +f 3170/1173/950 78/811/950 92/1063/950 +f 124/507/951 132/441/951 112/376/951 +f 1389/603/952 890/852/952 604/1174/952 +f 1077/1175/953 1067/908/953 1094/1170/953 +f 61/1157/954 85/1158/954 69/1118/954 +f 2065/821/955 2117/306/955 2082/307/955 +f 1986/1176/956 2030/87/956 2004/1177/956 +f 352/36/957 12/223/957 457/1178/957 +f 1303/1179/958 768/1180/958 1291/1181/958 +f 465/1110/959 452/1182/959 510/1168/959 +f 26/1183/960 1/1184/960 311/1185/960 +f 311/1169/961 1/1086/961 5/1151/961 +f 240/465/962 212/470/962 186/469/962 +f 2223/1186/963 2157/1187/963 2302/1188/963 +f 162/583/964 890/852/964 1389/603/964 +f 259/435/965 247/473/965 310/433/965 +f 537/598/966 125/572/966 547/557/966 +f 50/1189/967 61/1137/967 49/1136/967 +f 61/1157/968 86/1190/968 85/1158/968 +f 86/1190/969 98/1159/969 85/1158/969 +f 108/1191/970 1614/1192/970 98/1193/970 +f 2153/1194/971 349/1195/971 1507/1196/971 +f 3498/1197/972 1674/1198/972 3430/1199/972 +f 1817/177/973 1846/1200/973 1845/178/973 +f 2689/1201/974 1969/1202/974 2688/1203/974 +f 553/1204/975 5/1151/975 520/1130/975 +f 311/1185/976 555/1205/976 268/595/976 +f 782/604/977 756/675/977 202/674/977 +f 442/555/978 470/554/978 455/626/978 +f 1299/102/979 555/1205/979 134/203/979 +f 50/1206/980 62/1207/980 61/1157/980 +f 62/1207/981 86/1190/981 61/1157/981 +f 99/1208/982 98/1159/982 86/1190/982 +f 99/1209/983 108/1210/983 98/1211/983 +f 2087/822/984 57/1212/984 1989/1213/984 +f 1960/884/985 577/185/985 833/885/985 +f 6/1214/986 410/1215/986 1389/603/986 +f 452/1182/987 1544/1216/987 510/1168/987 +f 553/1204/988 520/1130/988 510/1168/988 +f 249/1217/989 311/1169/989 5/1151/989 +f 3140/1218/990 3128/1219/990 3113/1220/990 +f 144/676/991 237/442/991 490/416/991 +f 79/573/992 171/414/992 248/504/992 +f 1193/334/993 1207/333/993 1175/1221/993 +f 155/710/994 161/1222/994 172/716/994 +f 161/1222/995 198/1045/995 172/716/995 +f 1253/1223/996 1330/1224/996 617/1225/996 +f 1472/348/997 1471/430/997 1413/1226/997 +f 190/454/998 173/73/998 1451/90/998 +f 577/185/999 2088/187/999 833/885/999 +f 21/230/1000 514/123/1000 1457/1126/1000 +f 1381/60/1001 352/36/1001 330/1144/1001 +f 1788/1227/1002 1810/1228/1002 1787/1229/1002 +f 1332/76/1003 1254/78/1003 1358/1230/1003 +f 1544/1216/1004 486/1231/1004 510/1168/1004 +f 486/1231/1005 521/1232/1005 510/1168/1005 +f 521/1232/1006 553/1204/1006 510/1168/1006 +f 553/1204/1007 249/1217/1007 5/1151/1007 +f 363/1233/1008 555/1205/1008 311/1185/1008 +f 620/1234/1009 767/1235/1009 243/1236/1009 +f 1195/453/1010 1201/511/1010 1200/1237/1010 +f 62/1207/1011 70/1238/1011 86/1190/1011 +f 100/1239/1012 99/1208/1012 86/1190/1012 +f 70/1240/1013 100/1241/1013 86/1242/1013 +f 100/1243/1014 1616/1244/1014 108/1191/1014 +f 99/1209/1015 100/1241/1015 108/1210/1015 +f 108/1191/1016 1616/1244/1016 1615/1245/1016 +f 1285/192/1017 1370/1246/1017 1217/193/1017 +f 1705/1247/1018 1576/1248/1018 320/1249/1018 +f 1545/1250/1019 1558/1251/1019 1294/1252/1019 +f 363/1253/1020 311/1169/1020 249/1217/1020 +f 1123/424/1021 1156/452/1021 1146/425/1021 +f 690/1254/1022 143/1028/1022 124/507/1022 +f 525/468/1023 549/795/1023 162/583/1023 +f 1661/1255/1024 254/1020/1024 219/1069/1024 +f 1383/1256/1025 273/1166/1025 1245/1257/1025 +f 1088/111/1026 1855/113/1026 1147/261/1026 +f 1539/70/1027 256/1258/1027 265/71/1027 +f 265/71/1028 279/1259/1028 1576/1248/1028 +f 1413/1226/1029 1427/1260/1029 1362/1261/1029 +f 1413/1226/1030 1471/430/1030 1427/1260/1030 +f 1668/1262/1031 500/1263/1031 486/1231/1031 +f 500/1263/1032 521/1232/1032 486/1231/1032 +f 17/1264/1033 553/1204/1033 521/1232/1033 +f 241/1265/1034 363/1253/1034 249/1217/1034 +f 1094/1170/1035 1067/908/1035 1102/1171/1035 +f 1002/358/1036 3449/1266/1036 3495/359/1036 +f 2689/1201/1037 2730/1267/1037 1969/1202/1037 +f 1243/19/1038 555/1205/1038 1299/102/1038 +f 840/510/1039 858/880/1039 293/464/1039 +f 260/463/1040 840/510/1040 293/464/1040 +f 50/1189/1041 63/1268/1041 62/1269/1041 +f 63/1270/1042 70/1238/1042 62/1207/1042 +f 70/1240/1043 87/1271/1043 100/1241/1043 +f 100/1241/1044 109/1272/1044 1616/1273/1044 +f 1417/1165/1045 137/495/1045 273/1166/1045 +f 1472/348/1046 1413/1226/1046 2346/1274/1046 +f 265/71/1047 256/1258/1047 279/1259/1047 +f 279/1259/1048 320/1249/1048 1576/1248/1048 +f 321/1275/1049 1698/1276/1049 320/1249/1049 +f 3427/92/1050 3448/1277/1050 3444/93/1050 +f 500/1263/1051 487/1278/1051 521/1232/1051 +f 487/1278/1052 17/1264/1052 521/1232/1052 +f 15/1279/1053 249/1217/1053 553/1204/1053 +f 3469/782/1054 3508/21/1054 3464/20/1054 +f 525/468/1055 899/467/1055 540/793/1055 +f 33/446/1056 581/1280/1056 610/1281/1056 +f 610/1281/1057 40/447/1057 33/446/1057 +f 101/508/1058 690/1254/1058 124/507/1058 +f 309/550/1059 323/476/1059 322/1067/1059 +f 3456/400/1060 3493/399/1060 3469/782/1060 +f 172/716/1061 203/720/1061 160/661/1061 +f 100/1241/1062 87/1271/1062 109/1272/1062 +f 2150/1282/1063 2414/460/1063 2407/1283/1063 +f 210/1284/1064 221/1285/1064 1539/70/1064 +f 221/1285/1065 256/1258/1065 1539/70/1065 +f 308/1286/1066 279/1259/1066 256/1258/1066 +f 404/1287/1067 1698/1276/1067 321/1275/1067 +f 404/1287/1068 392/1288/1068 1698/1276/1068 +f 17/1264/1069 15/1279/1069 553/1204/1069 +f 241/1265/1070 249/1217/1070 15/1279/1070 +f 316/356/1071 783/141/1071 1162/140/1071 +f 554/600/1072 79/573/1072 248/504/1072 +f 547/557/1073 79/573/1073 554/600/1073 +f 3511/298/1074 3463/300/1074 3497/656/1074 +f 172/716/1075 160/661/1075 154/377/1075 +f 749/1289/1076 3426/1004/1076 105/1290/1076 +f 50/1189/1077 51/1291/1077 63/1268/1077 +f 63/1268/1078 71/1292/1078 70/1240/1078 +f 70/1240/1079 71/1292/1079 87/1271/1079 +f 109/1272/1080 1622/1293/1080 1643/1294/1080 +f 1622/1293/1081 166/1295/1081 1643/1294/1081 +f 194/1296/1082 211/1297/1082 210/1284/1082 +f 211/1297/1083 221/1285/1083 210/1284/1083 +f 221/1285/1084 238/1298/1084 256/1258/1084 +f 279/1259/1085 308/1286/1085 320/1249/1085 +f 308/1286/1086 321/1275/1086 320/1249/1086 +f 373/1299/1087 404/1287/1087 321/1275/1087 +f 2120/186/1088 1979/942/1088 1206/944/1088 +f 3480/1300/1089 3454/1301/1089 3424/1002/1089 +f 511/1302/1090 17/1264/1090 487/1278/1090 +f 269/1303/1091 363/1253/1091 241/1265/1091 +f 1146/425/1092 1195/453/1092 1166/602/1092 +f 126/709/1093 154/377/1093 103/379/1093 +f 337/792/1094 347/401/1094 405/403/1094 +f 87/1271/1095 110/1304/1095 109/1272/1095 +f 1274/1164/1096 1409/171/1096 1375/410/1096 +f 3494/1305/1097 3485/326/1097 3500/325/1097 +f 1565/1306/1098 13/1307/1098 1434/1308/1098 +f 3486/1075/1099 3488/1309/1099 3479/312/1099 +f 238/1298/1100 308/1286/1100 256/1258/1100 +f 1545/1310/1101 1650/1311/1101 500/1263/1101 +f 500/1263/1102 1650/1311/1102 487/1278/1102 +f 269/1303/1103 241/1265/1103 15/1279/1103 +f 269/1312/1104 1386/129/1104 363/1233/1104 +f 998/449/1105 997/1026/1105 968/632/1105 +f 580/1313/1106 27/397/1106 38/396/1106 +f 417/644/1107 406/538/1107 424/645/1107 +f 51/1291/1108 72/1314/1108 63/1268/1108 +f 63/1268/1109 72/1314/1109 71/1292/1109 +f 72/1314/1110 88/1315/1110 87/1271/1110 +f 71/1292/1111 72/1314/1111 87/1271/1111 +f 87/1271/1112 88/1315/1112 110/1304/1112 +f 110/1304/1113 1622/1293/1113 109/1272/1113 +f 775/1316/1114 1004/1317/1114 683/1318/1114 +f 199/1319/1115 211/1297/1115 194/1296/1115 +f 178/1320/1116 199/1319/1116 194/1296/1116 +f 199/1319/1117 222/1321/1117 211/1297/1117 +f 222/1321/1118 221/1285/1118 211/1297/1118 +f 222/1321/1119 223/1322/1119 221/1285/1119 +f 223/1322/1120 238/1298/1120 221/1285/1120 +f 336/1323/1121 321/1275/1121 308/1286/1121 +f 336/1323/1122 373/1299/1122 321/1275/1122 +f 381/1324/1123 404/1287/1123 373/1299/1123 +f 922/451/1124 1171/657/1124 594/1044/1124 +f 526/1325/1125 856/1326/1125 540/793/1125 +f 540/793/1126 856/1326/1126 948/794/1126 +f 405/403/1127 406/538/1127 417/644/1127 +f 88/1315/1128 115/1327/1128 1622/1293/1128 +f 110/1304/1129 88/1315/1129 1622/1293/1129 +f 349/1195/1130 184/1328/1130 1507/1196/1130 +f 199/1319/1131 223/1322/1131 222/1321/1131 +f 238/1298/1132 291/1329/1132 308/1286/1132 +f 291/1329/1133 336/1323/1133 308/1286/1133 +f 381/1324/1134 415/1330/1134 404/1287/1134 +f 3457/1331/1135 3482/1332/1135 3424/1002/1135 +f 514/123/1136 459/122/1136 1457/1126/1136 +f 536/1333/1137 17/1264/1137 511/1302/1137 +f 15/1279/1138 17/1264/1138 536/1333/1138 +f 1932/1334/1139 1115/426/1139 1146/425/1139 +f 202/674/1140 144/676/1140 490/416/1140 +f 202/674/1141 490/416/1141 281/415/1141 +f 72/1314/1142 73/1335/1142 88/1315/1142 +f 199/1319/1143 195/1336/1143 223/1322/1143 +f 336/1323/1144 374/1337/1144 373/1299/1144 +f 374/1337/1145 381/1324/1145 373/1299/1145 +f 415/1338/1146 1302/1339/1146 404/1340/1146 +f 1064/983/1147 1100/834/1147 1153/360/1147 +f 3508/21/1148 3494/663/1148 3500/1341/1148 +f 295/1342/1149 15/1279/1149 536/1333/1149 +f 295/1342/1150 269/1303/1150 15/1279/1150 +f 295/1342/1151 170/980/1151 269/1303/1151 +f 170/1343/1152 77/262/1152 269/1312/1152 +f 77/262/1153 1386/129/1153 269/1312/1153 +f 3443/351/1154 3501/350/1154 3452/1099/1154 +f 123/481/1155 150/791/1155 131/482/1155 +f 73/1335/1156 111/389/1156 88/1315/1156 +f 88/1315/1157 111/389/1157 115/1327/1157 +f 141/1344/1158 167/660/1158 179/1345/1158 +f 140/1346/1159 141/1344/1159 179/1345/1159 +f 167/660/1160 195/1336/1160 179/1345/1160 +f 223/1322/1161 257/1347/1161 238/1298/1161 +f 257/1347/1162 291/1329/1162 238/1298/1162 +f 292/1348/1163 336/1323/1163 291/1329/1163 +f 292/1348/1164 322/1067/1164 336/1323/1164 +f 322/1067/1165 374/1337/1165 336/1323/1165 +f 475/1349/1166 1650/1350/1166 466/1351/1166 +f 1650/1311/1167 475/1352/1167 512/1353/1167 +f 512/1353/1168 536/1333/1168 511/1302/1168 +f 3495/359/1169 3450/1354/1169 3447/982/1169 +f 999/1355/1170 1038/1356/1170 1018/404/1170 +f 51/1291/1171 52/1357/1171 72/1314/1171 +f 52/1357/1172 64/1358/1172 72/1314/1172 +f 72/1359/1173 64/1360/1173 73/1361/1173 +f 111/389/1174 131/482/1174 115/1327/1174 +f 115/1327/1175 131/482/1175 140/1346/1175 +f 1811/1362/1176 1802/1363/1176 1525/667/1176 +f 375/1066/1177 374/1337/1177 322/1067/1177 +f 375/1066/1178 381/1324/1178 374/1337/1178 +f 1061/517/1179 1067/908/1179 1037/518/1179 +f 1251/1364/1180 475/1349/1180 466/1351/1180 +f 522/622/1181 536/1333/1181 512/1353/1181 +f 1091/513/1182 1143/512/1182 558/635/1182 +f 477/599/1183 537/598/1183 501/556/1183 +f 858/880/1184 337/792/1184 324/474/1184 +f 523/956/1185 537/598/1185 488/369/1185 +f 513/558/1186 547/557/1186 554/600/1186 +f 51/1291/1187 588/477/1187 52/1357/1187 +f 131/482/1188 141/1344/1188 140/1346/1188 +f 195/1336/1189 239/1134/1189 223/1322/1189 +f 223/1322/1190 239/1134/1190 257/1347/1190 +f 257/1347/1191 292/1348/1191 291/1329/1191 +f 381/1324/1192 416/587/1192 415/1330/1192 +f 415/1330/1193 416/587/1193 423/1365/1193 +f 2781/288/1194 2144/1366/1194 2467/289/1194 +f 57/1367/1195 1311/1368/1195 1989/1369/1195 +f 198/1045/1196 724/1370/1196 197/812/1196 +f 195/1336/1197 196/479/1197 239/1134/1197 +f 258/434/1198 292/1348/1198 257/1347/1198 +f 393/585/1199 416/587/1199 381/1324/1199 +f 3485/326/1200 3443/1371/1200 3436/1372/1200 +f 513/558/1201 554/600/1201 56/1064/1201 +f 682/745/1202 522/622/1202 512/1353/1202 +f 56/1064/1203 536/1333/1203 522/622/1203 +f 56/1064/1204 295/1342/1204 536/1333/1204 +f 280/1065/1205 227/505/1205 295/1342/1205 +f 295/1342/1206 227/505/1206 170/980/1206 +f 170/980/1207 1423/1373/1207 77/1374/1207 +f 2015/117/1208 2030/87/1208 1986/1176/1208 +f 588/477/1209 53/478/1209 52/1357/1209 +f 53/617/1210 65/631/1210 64/1360/1210 +f 52/1357/1211 53/478/1211 64/1358/1211 +f 64/1360/1212 65/631/1212 73/1361/1212 +f 65/387/1213 111/389/1213 73/1335/1213 +f 141/1344/1214 150/791/1214 167/660/1214 +f 195/1336/1215 167/660/1215 196/479/1215 +f 259/435/1216 257/1347/1216 239/1134/1216 +f 259/435/1217 258/434/1217 257/1347/1217 +f 258/434/1218 309/550/1218 292/1348/1218 +f 309/550/1219 322/1067/1219 292/1348/1219 +f 393/585/1220 381/1324/1220 375/1066/1220 +f 1974/108/1221 1986/1176/1221 3390/1375/1221 +f 56/1064/1222 280/1065/1222 295/1342/1222 +f 423/1376/1223 439/1377/1223 1251/1364/1223 +f 111/389/1224 116/483/1224 131/482/1224 +f 150/791/1225 141/1344/1225 131/482/1225 +f 224/480/1226 259/435/1226 239/1134/1226 +f 258/434/1227 310/433/1227 309/550/1227 +f 145/797/1228 126/709/1228 661/549/1228 +f 598/1378/1229 597/1379/1229 581/1280/1229 +f 840/510/1230 859/1380/1230 858/880/1230 +f 855/1381/1231 731/1382/1231 747/1383/1231 +f 677/1384/1232 694/1385/1232 693/1386/1232 +f 822/1387/1233 707/1388/1233 769/1389/1233 +f 769/1389/1234 932/1390/1234 822/1387/1234 +f 710/1391/1235 720/1392/1235 703/438/1235 +f 859/1380/1236 912/1393/1236 347/401/1236 +f 654/1394/1237 425/553/1237 442/555/1237 +f 608/996/1238 810/1395/1238 674/1396/1238 +f 1194/601/1239 1200/1237/1239 1211/278/1239 +f 2083/820/1240 2065/821/1240 2042/89/1240 +f 793/814/1241 847/816/1241 817/1397/1241 +f 597/1379/1242 629/899/1242 610/1281/1242 +f 2776/1398/1243 2792/1399/1243 2731/1400/1243 +f 651/1401/1244 650/1402/1244 614/1403/1244 +f 735/1404/1245 722/1405/1245 717/1406/1245 +f 1194/601/1246 1195/453/1246 1200/1237/1246 +f 651/1401/1247 663/1407/1247 650/1402/1247 +f 663/1407/1248 681/1408/1248 650/1402/1248 +f 663/1407/1249 719/304/1249 681/1408/1249 +f 3087/1409/1250 3101/1410/1250 3057/1411/1250 +f 268/595/1251 555/1205/1251 1243/19/1251 +f 1490/1412/1252 585/1413/1252 3402/1414/1252 +f 2869/1415/1253 2841/1416/1253 2809/254/1253 +f 2652/724/1254 2687/1417/1254 1908/1418/1254 +f 797/1419/1255 841/1420/1255 829/1421/1255 +f 610/1281/1256 629/899/1256 609/900/1256 +f 3218/548/1257 639/1422/1257 661/549/1257 +f 659/1423/1258 646/1424/1258 691/1425/1258 +f 2817/1426/1259 2619/1427/1259 2060/3/1259 +f 601/1428/1260 92/1063/1260 649/1429/1260 +f 126/709/1261 103/379/1261 661/549/1261 +f 1200/1237/1262 1212/279/1262 1211/278/1262 +f 1166/602/1263 1194/601/1263 1155/492/1263 +f 2967/1052/1264 956/1054/1264 2976/1430/1264 +f 1124/1431/1265 1104/1432/1265 1096/1433/1265 +f 669/1434/1266 693/1386/1266 692/1435/1266 +f 772/1436/1267 744/1437/1267 745/1438/1267 +f 777/1439/1268 817/1397/1268 816/1440/1268 +f 2227/1441/1269 2158/1442/1269 2289/1443/1269 +f 2968/65/1270 2298/64/1270 2446/1444/1270 +f 891/297/1271 261/317/1271 903/275/1271 +f 3473/1107/1272 3472/1445/1272 3458/1446/1272 +f 1002/358/1273 3458/1446/1273 3449/1266/1273 +f 610/1447/1274 609/647/1274 40/444/1274 +f 817/1397/1275 840/510/1275 816/1440/1275 +f 809/1448/1276 628/1449/1276 683/1450/1276 +f 941/1451/1277 900/1452/1277 891/297/1277 +f 900/1452/1278 261/317/1278 891/297/1278 +f 638/1453/1279 660/1454/1279 599/1455/1279 +f 997/1027/1280 1013/406/1280 1006/1456/1280 +f 3459/1457/1281 3443/1371/1281 3485/326/1281 +f 758/1458/1282 816/1440/1282 225/509/1282 +f 851/1459/1283 741/1460/1283 748/1461/1283 +f 376/330/1284 605/1462/1284 886/331/1284 +f 605/1462/1285 815/1463/1285 886/331/1285 +f 886/331/1286 815/1463/1286 941/1451/1286 +f 941/1464/1287 815/1465/1287 900/1466/1287 +f 3510/1467/1288 3444/93/1288 3455/839/1288 +f 593/860/1289 606/859/1289 578/1468/1289 +f 703/438/1290 720/1392/1290 181/436/1290 +f 3434/1469/1291 3468/1470/1291 3438/1471/1291 +f 653/432/1292 866/1472/1292 542/413/1292 +f 701/1473/1293 626/1474/1293 674/1475/1293 +f 872/1476/1294 912/1393/1294 859/1380/1294 +f 741/1460/1295 920/1477/1295 748/1461/1295 +f 748/1461/1296 920/1477/1296 376/330/1296 +f 376/330/1297 920/1477/1297 605/1462/1297 +f 900/1452/1298 702/1478/1298 261/317/1298 +f 559/994/1299 562/1005/1299 2/1029/1299 +f 203/720/1300 750/722/1300 735/1479/1300 +f 786/1480/1301 777/1439/1301 759/1481/1301 +f 843/1482/1302 851/1483/1302 853/1484/1302 +f 843/1482/1303 741/1485/1303 851/1483/1303 +f 605/1486/1304 826/1487/1304 815/1465/1304 +f 702/1478/1305 727/352/1305 261/317/1305 +f 2619/1427/1306 2826/1/1306 2060/3/1306 +f 925/1488/1307 949/1489/1307 695/1490/1307 +f 750/1491/1308 762/1492/1308 735/1404/1308 +f 750/1491/1309 763/1493/1309 762/1492/1309 +f 763/1493/1310 808/1494/1310 762/1492/1310 +f 791/1495/1311 626/1474/1311 845/1496/1311 +f 526/1497/1312 540/1498/1312 899/1499/1312 +f 843/1500/1313 853/1501/1313 3388/1502/1313 +f 900/1466/1314 815/1465/1314 702/1503/1314 +f 702/1478/1315 726/485/1315 727/352/1315 +f 2277/881/1316 1025/882/1316 1083/488/1316 +f 491/1504/1317 582/1505/1317 925/1488/1317 +f 824/1506/1318 873/1507/1318 926/1508/1318 +f 808/1494/1319 800/1509/1319 820/1510/1319 +f 605/1486/1320 935/1511/1320 826/1487/1320 +f 815/1465/1321 643/1512/1321 702/1503/1321 +f 1827/1513/1322 2560/1514/1322 2549/1515/1322 +f 925/1488/1323 695/1490/1323 897/1516/1323 +f 967/1517/1324 1793/1518/1324 35/1519/1324 +f 827/1520/1325 741/1485/1325 843/1482/1325 +f 827/1520/1326 920/1521/1326 741/1485/1326 +f 827/1520/1327 696/1522/1327 920/1521/1327 +f 696/1522/1328 935/1511/1328 920/1521/1328 +f 920/1521/1329 935/1511/1329 605/1486/1329 +f 643/1512/1330 928/1523/1330 702/1503/1330 +f 702/1478/1331 928/1524/1331 726/485/1331 +f 786/1480/1332 794/815/1332 793/814/1332 +f 1014/914/1333 1084/1525/1333 1191/1526/1333 +f 871/1527/1334 671/1528/1334 930/1529/1334 +f 35/1519/1335 1793/1518/1335 2619/1427/1335 +f 770/1530/1336 843/1500/1336 894/1531/1336 +f 770/1532/1337 827/1520/1337 843/1482/1337 +f 826/1487/1338 906/1533/1338 815/1465/1338 +f 906/1533/1339 643/1512/1339 815/1465/1339 +f 726/485/1340 928/1524/1340 946/486/1340 +f 60/861/1341 23/714/1341 606/859/1341 +f 725/1534/1342 724/1370/1342 161/1222/1342 +f 3477/788/1343 3496/1097/1343 3501/350/1343 +f 621/1535/1344 871/1536/1344 865/1537/1344 +f 785/1538/1345 850/1539/1345 621/1540/1345 +f 777/1439/1346 786/1480/1346 793/814/1346 +f 935/1511/1347 752/1541/1347 826/1487/1347 +f 643/1512/1348 909/1542/1348 928/1523/1348 +f 3270/1543/1349 953/1544/1349 573/1545/1349 +f 866/1546/1350 894/1531/1350 3333/1547/1350 +f 877/1548/1351 827/1520/1351 770/1532/1351 +f 752/1541/1352 906/1533/1352 826/1487/1352 +f 906/1533/1353 723/1549/1353 643/1512/1353 +f 909/1542/1354 868/1550/1354 928/1523/1354 +f 928/1523/1355 868/1550/1355 946/1551/1355 +f 683/1450/1356 623/1552/1356 855/1553/1356 +f 662/1554/1357 650/1555/1357 681/1556/1357 +f 721/1557/1358 714/1558/1358 676/1559/1358 +f 808/1494/1359 761/1560/1359 722/1405/1359 +f 790/1561/1360 764/1562/1360 655/1563/1360 +f 881/1564/1361 658/1565/1361 633/1566/1361 +f 2149/1567/1362 1102/1171/1362 1061/517/1362 +f 897/1516/1363 695/1490/1363 896/1568/1363 +f 653/432/1364 904/1569/1364 866/1472/1364 +f 904/1569/1365 894/1570/1365 866/1472/1365 +f 877/1548/1366 696/1522/1366 827/1520/1366 +f 696/1522/1367 907/1571/1367 935/1511/1367 +f 935/1511/1368 907/1571/1368 752/1541/1368 +f 752/1541/1369 723/1549/1369 906/1533/1369 +f 723/1549/1370 909/1542/1370 643/1512/1370 +f 1021/1572/1371 1037/518/1371 1031/1573/1371 +f 1879/1574/1372 1188/1575/1372 1128/1576/1372 +f 2935/1577/1373 2928/1578/1373 2939/1579/1373 +f 896/1568/1374 695/1490/1374 641/1580/1374 +f 939/1581/1375 615/1582/1375 628/1449/1375 +f 686/1583/1376 809/1448/1376 683/1450/1376 +f 3487/1584/1377 1207/333/1377 1208/332/1377 +f 1067/908/1378 1061/517/1378 1102/1171/1378 +f 867/1585/1379 696/1522/1379 877/1548/1379 +f 867/1585/1380 907/1571/1380 696/1522/1380 +f 723/1549/1381 687/1586/1381 909/1542/1381 +f 946/486/1382 738/1587/1382 121/1163/1382 +f 766/1588/1383 791/1589/1383 822/1590/1383 +f 660/1454/1384 638/1453/1384 677/1384/1384 +f 3467/1591/1385 1015/751/1385 1117/750/1385 +f 591/1592/1386 622/1593/1386 611/1594/1386 +f 2506/1595/1387 1009/1596/1387 1010/1597/1387 +f 904/1569/1388 844/1598/1388 894/1570/1388 +f 844/1599/1389 770/1530/1389 894/1531/1389 +f 770/1532/1390 944/1600/1390 877/1548/1390 +f 944/1600/1391 867/1585/1391 877/1548/1391 +f 907/1571/1392 718/1601/1392 752/1541/1392 +f 718/1602/1393 921/1603/1393 752/1604/1393 +f 752/1604/1394 921/1603/1394 723/1605/1394 +f 880/1606/1395 868/1550/1395 909/1542/1395 +f 687/1586/1396 880/1606/1396 909/1542/1396 +f 946/486/1397 868/1607/1397 738/1587/1397 +f 2652/724/1398 1908/1418/1398 2621/1608/1398 +f 3508/21/1399 3475/664/1399 3494/663/1399 +f 384/1609/1400 686/1610/1400 1160/1611/1400 +f 904/1569/1401 532/570/1401 844/1598/1401 +f 757/1612/1402 770/1532/1402 844/1613/1402 +f 757/1612/1403 944/1600/1403 770/1532/1403 +f 723/1605/1404 921/1603/1404 687/1614/1404 +f 840/510/1405 872/1476/1405 859/1380/1405 +f 805/1615/1406 898/1616/1406 932/1390/1406 +f 872/1476/1407 860/1617/1407 913/1618/1407 +f 1041/420/1408 1088/111/1408 1147/261/1408 +f 695/1490/1409 885/1619/1409 641/1580/1409 +f 779/1620/1410 796/1621/1410 744/1622/1410 +f 899/467/1411 489/466/1411 947/1623/1411 +f 809/1624/1412 384/1609/1412 918/1625/1412 +f 563/614/1413 757/828/1413 844/1598/1413 +f 944/1626/1414 672/1627/1414 867/1628/1414 +f 867/1628/1415 836/1629/1415 907/1630/1415 +f 836/1629/1416 792/1631/1416 907/1630/1416 +f 792/1631/1417 718/1602/1417 907/1630/1417 +f 868/1607/1418 574/1632/1418 738/1587/1418 +f 2826/1/1419 1710/1633/1419 2535/2/1419 +f 2711/1634/1420 2838/1635/1420 2019/1636/1420 +f 3189/1637/1421 3152/1638/1421 3140/1218/1421 +f 628/1449/1422 615/1582/1422 623/1552/1422 +f 3483/1639/1423 1897/858/1423 2839/1640/1423 +f 641/1580/1424 885/1619/1424 850/1641/1424 +f 841/1642/1425 830/1643/1425 862/1644/1425 +f 913/1618/1426 860/1617/1426 654/1394/1426 +f 624/1645/1427 890/852/1427 948/794/1427 +f 918/1646/1428 939/1581/1428 628/1449/1428 +f 757/828/1429 914/744/1429 944/1626/1429 +f 672/1627/1430 836/1629/1430 867/1628/1430 +f 688/1647/1431 687/1614/1431 921/1603/1431 +f 934/1648/1432 733/1649/1432 868/1607/1432 +f 880/1650/1433 934/1648/1433 868/1607/1433 +f 868/1607/1434 733/1649/1434 574/1632/1434 +f 2500/1651/1435 578/1468/1435 583/711/1435 +f 1210/1652/1436 1199/493/1436 1149/1043/1436 +f 3332/1653/1437 576/1654/1437 581/1280/1437 +f 620/1655/1438 634/1656/1438 917/1657/1438 +f 1037/518/1439 1044/909/1439 1031/1573/1439 +f 855/1553/1440 887/1658/1440 731/1659/1440 +f 1415/1660/1441 2100/1661/1441 1178/1662/1441 +f 792/1631/1442 892/1663/1442 718/1602/1442 +f 892/1663/1443 921/1603/1443 718/1602/1443 +f 892/1663/1444 688/1647/1444 921/1603/1444 +f 698/1664/1445 880/1606/1445 687/1586/1445 +f 698/1664/1446 934/1665/1446 880/1606/1446 +f 733/1649/1447 919/1666/1447 574/1632/1447 +f 738/1587/1448 574/1632/1448 121/1163/1448 +f 3487/1667/1449 3505/353/1449 3467/1591/1449 +f 683/1668/1450 855/1381/1450 736/1669/1450 +f 850/1641/1451 885/1619/1451 621/1535/1451 +f 779/1670/1452 787/1671/1452 807/1672/1452 +f 630/1673/1453 637/1674/1453 659/1423/1453 +f 914/744/1454 672/1627/1454 944/1626/1454 +f 698/1675/1455 687/1614/1455 688/1647/1455 +f 586/1676/1456 587/1677/1456 51/1291/1456 +f 606/859/1457 23/714/1457 583/711/1457 +f 578/1468/1458 606/859/1458 583/711/1458 +f 2139/1678/1459 2136/1679/1459 1291/1680/1459 +f 852/935/1460 685/1681/1460 825/1682/1460 +f 693/1386/1461 694/1385/1461 715/1683/1461 +f 2149/1567/1462 2133/1684/1462 1102/1171/1462 +f 743/1685/1463 771/1686/1463 778/1687/1463 +f 929/1688/1464 834/1689/1464 595/514/1464 +f 1435/147/1465 1172/1690/1465 1315/156/1465 +f 836/1629/1466 640/1691/1466 792/1631/1466 +f 792/1631/1467 640/1691/1467 892/1663/1467 +f 910/1692/1468 698/1675/1468 688/1647/1468 +f 910/1692/1469 839/1693/1469 698/1675/1469 +f 839/1694/1470 934/1665/1470 698/1664/1470 +f 839/1694/1471 408/1695/1471 934/1665/1471 +f 408/1695/1472 733/1696/1472 934/1665/1472 +f 408/1695/1473 919/1697/1473 733/1696/1473 +f 408/1695/1474 902/144/1474 919/1697/1474 +f 617/1698/1475 902/1699/1475 113/1700/1475 +f 919/1666/1476 902/1699/1476 617/1698/1476 +f 1125/747/1477 2770/1701/1477 1129/748/1477 +f 700/302/1478 719/304/1478 663/1407/1478 +f 621/1535/1479 885/1619/1479 824/1506/1479 +f 3509/1702/1480 805/1703/1480 7/1704/1480 +f 712/1705/1481 713/1706/1481 743/1685/1481 +f 778/1687/1482 771/1686/1482 795/1707/1482 +f 740/1708/1483 736/1709/1483 627/1710/1483 +f 709/1711/1484 836/1629/1484 672/1627/1484 +f 892/1663/1485 910/1692/1485 688/1647/1485 +f 3488/1712/1486 3466/1713/1486 3479/1714/1486 +f 348/927/1487 860/1617/1487 818/1715/1487 +f 214/1716/1488 2797/1717/1488 2183/1718/1488 +f 861/1719/1489 828/1720/1489 807/1721/1489 +f 775/1722/1490 736/1709/1490 740/1708/1490 +f 3429/1723/1491 3505/353/1491 3487/1667/1491 +f 676/1559/1492 691/1425/1492 646/1424/1492 +f 917/1657/1493 634/1656/1493 28/1724/1493 +f 631/1725/1494 630/1673/1494 598/1378/1494 +f 740/1708/1495 627/1710/1495 749/1726/1495 +f 736/1669/1496 855/1381/1496 627/1727/1496 +f 765/1728/1497 836/1629/1497 709/1711/1497 +f 836/1729/1498 923/1730/1498 640/1731/1498 +f 910/1692/1499 804/1732/1499 839/1693/1499 +f 839/1693/1500 838/1733/1500 408/1734/1500 +f 3298/1735/1501 3313/1736/1501 3284/1737/1501 +f 575/1738/1502 584/1739/1502 578/1468/1502 +f 1013/406/1503 1021/1572/1503 1006/1456/1503 +f 834/1689/1504 929/1688/1504 917/1740/1504 +f 181/436/1505 758/1458/1505 225/509/1505 +f 648/1741/1506 647/1742/1506 622/1743/1506 +f 861/1744/1507 874/1745/1507 828/1746/1507 +f 775/1722/1508 683/1450/1508 736/1709/1508 +f 953/1544/1509 3234/1747/1509 975/1748/1509 +f 160/661/1510 203/720/1510 735/1479/1510 +f 1766/57/1511 1869/59/1511 1108/112/1511 +f 528/643/1512 541/689/1512 914/744/1512 +f 709/1749/1513 672/1750/1513 914/1751/1513 +f 836/1729/1514 765/1752/1514 923/1730/1514 +f 923/1753/1515 689/1754/1515 640/1691/1515 +f 640/1691/1516 689/1754/1516 892/1663/1516 +f 892/1663/1517 835/1755/1517 910/1692/1517 +f 804/1732/1518 619/1756/1518 839/1693/1518 +f 838/1733/1519 839/1693/1519 619/1756/1519 +f 719/304/1520 1076/303/1520 730/1757/1520 +f 930/1529/1521 624/1645/1521 948/794/1521 +f 778/1687/1522 795/1707/1522 794/815/1522 +f 611/1594/1523 598/1378/1523 589/1758/1523 +f 714/1558/1524 713/1706/1524 704/1759/1524 +f 590/1760/1525 611/1594/1525 589/1758/1525 +f 2670/1761/1526 3437/244/1526 3511/1762/1526 +f 789/743/1527 945/1763/1527 914/744/1527 +f 945/1763/1528 709/1711/1528 914/744/1528 +f 689/1754/1529 835/1755/1529 892/1663/1529 +f 838/1764/1530 942/1765/1530 408/1695/1530 +f 365/145/1531 902/144/1531 408/1695/1531 +f 942/1765/1532 365/145/1532 408/1695/1532 +f 1039/305/1533 1171/657/1533 922/451/1533 +f 753/1766/1534 754/1093/1534 25/1033/1534 +f 593/860/1535 578/1468/1535 584/1739/1535 +f 407/315/1536 851/1459/1536 748/1461/1536 +f 730/1757/1537 1076/303/1537 1454/1767/1537 +f 1054/1768/1538 1044/909/1538 1086/1769/1538 +f 676/1559/1539 714/1558/1539 704/1759/1539 +f 691/1425/1540 676/1559/1540 704/1759/1540 +f 749/1770/1541 627/1771/1541 893/1772/1541 +f 923/1730/1542 765/1752/1542 709/1749/1542 +f 3402/1414/1543 584/1739/1543 575/1738/1543 +f 649/1773/1544 678/1774/1544 638/1775/1544 +f 1132/301/1545 927/1776/1545 986/282/1545 +f 1005/1777/1546 1021/1572/1546 1031/1573/1546 +f 573/1778/1547 591/1592/1547 590/1760/1547 +f 895/1779/1548 915/854/1548 348/927/1548 +f 887/1658/1549 595/514/1549 842/516/1549 +f 782/604/1550 202/674/1550 645/780/1550 +f 3428/759/1551 2754/705/1551 3457/704/1551 +f 654/1394/1552 442/555/1552 418/539/1552 +f 3483/1780/1553 3434/1469/1553 453/1781/1553 +f 749/1289/1554 893/1782/1554 857/1783/1554 +f 489/466/1555 470/554/1555 947/1623/1555 +f 615/1582/1556 929/1688/1556 595/514/1556 +f 910/1692/1557 835/1755/1557 804/1732/1557 +f 616/1784/1558 365/145/1558 942/1765/1558 +f 2548/271/1559 2744/1785/1559 3450/1786/1559 +f 585/1413/1560 593/860/1560 584/1739/1560 +f 3437/244/1561 2670/1761/1561 2592/648/1561 +f 3054/1787/1562 3091/1788/1562 3062/1789/1562 +f 729/1790/1563 760/1791/1563 773/1792/1563 +f 786/1480/1564 778/1687/1564 794/815/1564 +f 340/1156/1565 272/1094/1565 28/1154/1565 +f 591/1592/1566 611/1594/1566 590/1760/1566 +f 1530/1793/1567 22/712/1567 36/715/1567 +f 861/1744/1568 895/1779/1568 874/1745/1568 +f 38/396/1569 588/477/1569 580/1313/1569 +f 895/1779/1570 940/1794/1570 915/854/1570 +f 832/1795/1571 923/1730/1571 709/1749/1571 +f 923/1730/1572 879/1796/1572 689/1797/1572 +f 689/1754/1573 788/1798/1573 835/1755/1573 +f 917/1657/1574 28/1724/1574 596/1799/1574 +f 1335/607/1575 1287/27/1575 1261/29/1575 +f 514/123/1576 1274/1164/1576 1265/124/1576 +f 407/315/1577 2279/1800/1577 851/1459/1577 +f 3504/246/1578 3428/759/1578 3457/704/1578 +f 1517/1138/1579 50/1189/1579 49/1136/1579 +f 834/1689/1580 596/1801/1580 697/515/1580 +f 1134/1802/1581 918/1625/1581 384/1609/1581 +f 715/1683/1582 773/1792/1582 745/1438/1582 +f 712/1705/1583 743/1685/1583 778/1687/1583 +f 694/1385/1584 716/1803/1584 729/1790/1584 +f 654/1804/1585 361/1805/1585 425/1806/1585 +f 615/1582/1586 595/514/1586 623/1552/1586 +f 739/1807/1587 917/1740/1587 929/1688/1587 +f 940/1794/1588 655/1563/1588 607/1808/1588 +f 655/1809/1589 526/1497/1589 899/1499/1589 +f 789/743/1590 936/1810/1590 945/1763/1590 +f 832/1795/1591 709/1749/1591 945/1811/1591 +f 936/1810/1592 832/1812/1592 945/1763/1592 +f 832/1795/1593 879/1796/1593 923/1730/1593 +f 835/1813/1594 1119/1814/1594 804/1815/1594 +f 1119/1814/1595 846/1816/1595 619/1817/1595 +f 804/1815/1596 1119/1814/1596 619/1817/1596 +f 829/1818/1597 875/1819/1597 861/1719/1597 +f 272/1094/1598 340/1156/1598 1462/1095/1598 +f 876/1820/1599 491/1504/1599 925/1488/1599 +f 949/1489/1600 824/1506/1600 885/1619/1600 +f 670/1821/1601 678/1774/1601 649/1773/1601 +f 816/1440/1602 840/510/1602 225/509/1602 +f 865/1822/1603 948/794/1603 856/1326/1603 +f 746/1823/1604 785/1538/1604 764/1562/1604 +f 607/1808/1605 655/1563/1605 899/467/1605 +f 807/1721/1606 796/1621/1606 779/1620/1606 +f 936/1810/1607 789/743/1607 55/802/1607 +f 879/1796/1608 776/1824/1608 689/1797/1608 +f 755/1825/1609 788/1826/1609 689/1797/1609 +f 629/899/1610 630/1673/1610 659/1423/1610 +f 623/1552/1611 887/1658/1611 855/1553/1611 +f 834/1689/1612 917/1740/1612 596/1801/1612 +f 857/1783/1613 893/1782/1613 805/1703/1613 +f 929/1688/1614 615/1582/1614 881/1564/1614 +f 675/1827/1615 690/1254/1615 659/1423/1615 +f 927/1828/1616 1132/1829/1616 769/1389/1616 +f 1006/1456/1617 1021/1572/1617 1005/1777/1617 +f 760/1791/1618 799/1830/1618 773/1792/1618 +f 842/516/1619 674/1475/1619 626/1474/1619 +f 763/1493/1620 800/1509/1620 808/1494/1620 +f 818/1715/1621 828/1746/1621 348/927/1621 +f 800/1509/1622 831/1831/1622 820/1510/1622 +f 798/1832/1623 797/1419/1623 780/1833/1623 +f 895/1779/1624 916/1834/1624 940/1794/1624 +f 874/1745/1625 895/1779/1625 348/927/1625 +f 599/1835/1626 591/1836/1626 974/1837/1626 +f 612/1838/1627 660/1454/1627 648/1839/1627 +f 648/1839/1628 660/1454/1628 669/1434/1628 +f 936/1840/1629 706/1841/1629 832/1795/1629 +f 706/1841/1630 776/1824/1630 879/1796/1630 +f 832/1795/1631 706/1841/1631 879/1796/1631 +f 776/1824/1632 755/1825/1632 689/1797/1632 +f 629/899/1633 659/1423/1633 636/551/1633 +f 875/1842/1634 848/1843/1634 916/1834/1634 +f 315/341/1635 823/142/1635 1444/1844/1635 +f 831/1831/1636 863/1845/1636 820/1510/1636 +f 2047/593/1637 2068/1846/1637 1154/364/1637 +f 2303/1847/1638 1710/1633/1638 2890/1848/1638 +f 887/1658/1639 842/516/1639 731/1659/1639 +f 659/1423/1640 691/1425/1640 675/1827/1640 +f 829/1421/1641 861/1744/1641 807/1672/1641 +f 831/1831/1642 876/1820/1642 863/1845/1642 +f 788/1826/1643 755/1825/1643 1357/345/1643 +f 680/575/1644 682/745/1644 774/1061/1644 +f 607/1808/1645 947/1623/1645 426/700/1645 +f 862/1644/1646 883/1849/1646 848/1850/1646 +f 591/1592/1647 599/1455/1647 612/1838/1647 +f 864/1851/1648 641/1852/1648 746/1823/1648 +f 930/1529/1649 665/1853/1649 624/1645/1649 +f 2552/1854/1650 1047/1855/1650 1023/1856/1650 +f 1042/427/1651 1218/1857/1651 3507/1858/1651 +f 936/1840/1652 937/1859/1652 706/1841/1652 +f 50/1189/1653 1517/1138/1653 579/1860/1653 +f 51/1291/1654 587/1677/1654 588/477/1654 +f 791/1589/1655 845/1861/1655 888/1862/1655 +f 297/967/1656 41/936/1656 889/1863/1656 +f 3470/281/1657 1163/280/1657 3476/355/1657 +f 2592/648/1658 1689/1864/1658 2424/245/1658 +f 1834/1865/1659 2515/1866/1659 1835/1867/1659 +f 761/1560/1660 799/1868/1660 760/1869/1660 +f 3484/1870/1661 3474/1871/1661 3486/1075/1661 +f 772/1436/1662 787/1671/1662 779/1670/1662 +f 589/1758/1663 598/1378/1663 581/1280/1663 +f 772/1436/1664 780/1833/1664 787/1671/1664 +f 943/1872/1665 706/1873/1665 313/803/1665 +f 776/1824/1666 684/1008/1666 755/1825/1666 +f 1357/345/1667 755/1825/1667 1238/346/1667 +f 1407/1874/1668 340/1875/1668 634/1656/1668 +f 862/1644/1669 896/1568/1669 883/1849/1669 +f 1092/1876/1670 666/1877/1670 1117/1878/1670 +f 3332/1653/1671 581/1280/1671 33/446/1671 +f 538/779/1672 125/572/1672 537/598/1672 +f 2992/1879/1673 2991/1880/1673 2440/1881/1673 +f 678/1774/1674 677/1882/1674 638/1775/1674 +f 615/1582/1675 1189/1883/1675 658/1565/1675 +f 2989/1884/1676 2977/1885/1676 2429/1886/1676 +f 819/1887/1677 884/1888/1677 897/1516/1677 +f 576/1654/1678 573/1778/1678 590/1760/1678 +f 828/1746/1679 874/1745/1679 348/927/1679 +f 780/1833/1680 772/1436/1680 745/1438/1680 +f 684/1008/1681 776/1824/1681 706/1841/1681 +f 2261/1889/1682 2335/1890/1682 1887/1891/1682 +f 181/436/1683 742/1892/1683 758/1458/1683 +f 50/1189/1684 586/1676/1684 51/1291/1684 +f 912/1393/1685 911/402/1685 347/401/1685 +f 805/1703/1686 932/1893/1686 7/1704/1686 +f 747/1383/1687 791/1589/1687 766/1588/1687 +f 898/1616/1688 766/1894/1688 822/1387/1688 +f 1298/1895/1689 1119/1814/1689 1357/345/1689 +f 2761/238/1690 2731/1400/1690 2791/239/1690 +f 648/1741/1691 669/1896/1691 647/1742/1691 +f 717/1406/1692 722/1405/1692 699/1897/1692 +f 897/1516/1693 896/1568/1693 862/1644/1693 +f 863/1845/1694 884/1888/1694 819/1887/1694 +f 693/1898/1695 715/1899/1695 705/1900/1695 +f 715/1683/1696 745/1438/1696 705/1901/1696 +f 706/1873/1697 937/801/1697 313/803/1697 +f 806/1902/1698 828/1746/1698 818/1715/1698 +f 985/319/1699 2027/1903/1699 1222/1084/1699 +f 731/1659/1700 842/516/1700 791/1495/1700 +f 651/1401/1701 1043/1904/1701 663/1407/1701 +f 659/1423/1702 690/1254/1702 636/551/1702 +f 597/1379/1703 598/1378/1703 630/1673/1703 +f 581/1280/1704 590/1760/1704 589/1758/1704 +f 818/1715/1705 860/1617/1705 847/816/1705 +f 1076/303/1706 1399/138/1706 1454/1767/1706 +f 808/1494/1707 819/1887/1707 761/1560/1707 +f 2719/1905/1708 2706/1906/1708 2691/1907/1708 +f 717/1406/1709 699/1897/1709 679/1908/1709 +f 1988/272/1710 1284/1909/1710 1439/273/1710 +f 684/1008/1711 1297/1007/1711 755/1825/1711 +f 755/1825/1712 1297/1007/1712 1238/346/1712 +f 1039/305/1713 1091/513/1713 1171/657/1713 +f 938/537/1714 911/402/1714 912/1393/1714 +f 857/1783/1715 3499/1910/1715 3426/1004/1715 +f 699/1897/1716 694/1911/1716 677/1882/1716 +f 14/1912/1717 1714/1913/1717 13/1307/1717 +f 1854/1914/1718 1861/1915/1718 1853/1916/1718 +f 1283/1917/1719 1291/1181/1719 768/1180/1719 +f 898/1616/1720 893/1918/1720 627/1710/1720 +f 721/1557/1721 705/1901/1721 745/1438/1721 +f 860/1919/1722 361/1805/1722 654/1804/1722 +f 2298/64/1723 2480/1920/1723 2464/1921/1723 +f 125/572/1724 645/780/1724 281/415/1724 +f 758/1458/1725 777/1439/1725 816/1440/1725 +f 607/1808/1726 899/467/1726 947/1623/1726 +f 721/1557/1727 745/1438/1727 744/1437/1727 +f 3450/1354/1728 3435/1922/1728 3447/982/1728 +f 1176/491/1729 1199/493/1729 1210/1652/1729 +f 745/1438/1730 773/1792/1730 780/1833/1730 +f 996/897/1731 1006/1923/1731 1005/1924/1731 +f 2197/1925/1732 2192/1926/1732 2257/1927/1732 +f 799/1830/1733 798/1832/1733 773/1792/1733 +f 799/1830/1734 830/1928/1734 798/1832/1734 +f 1132/301/1735 3451/1929/1735 7/1704/1735 +f 596/1799/1736 784/1930/1736 608/996/1736 +f 784/1930/1737 753/1931/1737 608/996/1737 +f 3195/1932/1738 639/1933/1738 3218/1934/1738 +f 1465/1035/1739 1183/1034/1739 831/1831/1739 +f 712/1705/1740 778/1687/1740 759/1481/1740 +f 893/1918/1741 898/1616/1741 805/1615/1741 +f 2543/1935/1742 1830/1936/1742 1197/1074/1742 +f 791/1495/1743 842/516/1743 626/1474/1743 +f 3228/813/1744 3242/1937/1744 3241/309/1744 +f 876/1820/1745 831/1831/1745 1198/1938/1745 +f 762/1492/1746 808/1494/1746 722/1405/1746 +f 3355/1939/1747 1922/1940/1747 3321/1941/1747 +f 852/935/1748 889/1863/1748 41/936/1748 +f 1005/1777/1749 1031/1573/1749 1017/1942/1749 +f 1132/1829/1750 932/1390/1750 769/1389/1750 +f 621/1535/1751 824/1506/1751 871/1536/1751 +f 693/1386/1752 705/1901/1752 692/1435/1752 +f 2164/1943/1753 1250/1944/1753 2174/1945/1753 +f 627/1710/1754 766/1894/1754 898/1616/1754 +f 1872/1946/1755 3506/1947/1755 3510/1039/1755 +f 453/1948/1756 1134/1802/1756 384/1609/1756 +f 627/1727/1757 747/1383/1757 766/1588/1757 +f 747/1383/1758 731/1382/1758 791/1589/1758 +f 681/1556/1759 725/1534/1759 161/1222/1759 +f 1043/1904/1760 700/302/1760 663/1407/1760 +f 613/1949/1761 662/1554/1761 639/1422/1761 +f 746/1950/1762 850/1641/1762 785/1951/1762 +f 916/1834/1763 864/1851/1763 878/1952/1763 +f 787/1671/1764 797/1419/1764 807/1672/1764 +f 997/1026/1765 996/897/1765 968/632/1765 +f 795/1707/1766 818/1715/1766 794/815/1766 +f 2161/1082/1767 3442/1953/1767 1894/383/1767 +f 817/1397/1768 872/1476/1768 840/510/1768 +f 681/1556/1769 719/1954/1769 725/1534/1769 +f 780/1833/1770 797/1419/1770 787/1671/1770 +f 143/1028/1771 710/1391/1771 703/438/1771 +f 1263/154/1772 1161/916/1772 803/915/1772 +f 803/915/1773 1452/155/1773 1263/154/1773 +f 1810/1228/1774 1811/1362/1774 1577/1955/1774 +f 724/1370/1775 198/1045/1775 161/1222/1775 +f 3480/1300/1776 3499/1910/1776 3509/1702/1776 +f 2347/1956/1777 813/1957/1777 214/1716/1777 +f 3508/21/1778 3493/399/1778 3475/664/1778 +f 1193/334/1779 1014/914/1779 438/489/1779 +f 1651/1958/1780 1371/1959/1780 1355/1960/1780 +f 2708/1961/1781 2424/245/1781 1689/1864/1781 +f 841/1642/1782 862/1644/1782 848/1850/1782 +f 809/1448/1783 918/1646/1783 628/1449/1783 +f 697/515/1784 595/514/1784 834/1689/1784 +f 883/1849/1785 896/1568/1785 641/1580/1785 +f 1155/492/1786 1194/601/1786 1199/493/1786 +f 27/397/1787 580/1313/1787 572/1962/1787 +f 949/1489/1788 1030/1963/1788 824/1506/1788 +f 691/1425/1789 704/1759/1789 675/1827/1789 +f 962/1964/1790 961/979/1790 951/1965/1790 +f 3478/428/1791 3448/1106/1791 3481/1108/1791 +f 1993/1966/1792 586/1676/1792 579/1860/1792 +f 654/1394/1793 418/539/1793 938/537/1793 +f 1267/191/1794 1217/193/1794 242/1967/1794 +f 662/1554/1795 681/1556/1795 145/797/1795 +f 785/1538/1796 865/1822/1796 526/1325/1796 +f 734/1968/1797 181/436/1797 720/1392/1797 +f 830/1643/1798 841/1642/1798 797/1969/1798 +f 780/1833/1799 773/1792/1799 798/1832/1799 +f 913/1618/1800 654/1394/1800 938/537/1800 +f 1013/406/1801 1037/518/1801 1021/1572/1801 +f 668/830/1802 271/204/1802 1452/1970/1802 +f 1142/746/1803 1193/334/1803 438/489/1803 +f 977/867/1804 1111/1971/1804 3462/1972/1804 +f 858/880/1805 859/1380/1805 347/401/1805 +f 596/1799/1806 28/1724/1806 784/1930/1806 +f 318/1973/1807 475/1349/1807 1251/1364/1807 +f 1465/1035/1808 831/1831/1808 800/1509/1808 +f 649/1773/1809 600/1974/1809 601/1975/1809 +f 1958/232/1810 2712/1976/1810 2724/1977/1810 +f 791/1589/1811 888/1862/1811 822/1590/1811 +f 977/867/1812 965/1978/1812 1111/1971/1812 +f 614/1403/1813 994/1979/1813 651/1401/1813 +f 803/1980/1814 668/830/1814 1452/1970/1814 +f 513/558/1815 680/575/1815 501/556/1815 +f 975/1981/1816 3204/1982/1816 3205/1983/1816 +f 3428/759/1817 2766/681/1817 2669/857/1817 +f 1076/303/1818 1085/1984/1818 1399/138/1818 +f 1200/1237/1819 1201/511/1819 1212/279/1819 +f 819/1887/1820 830/1643/1820 799/1868/1820 +f 601/1975/1821 600/1974/1821 975/1748/1821 +f 597/1379/1822 630/1673/1822 629/899/1822 +f 101/508/1823 636/551/1823 690/1254/1823 +f 983/1985/1824 1189/1986/1824 939/1987/1824 +f 679/1988/1825 670/1062/1825 136/378/1825 +f 201/694/1826 120/494/1826 362/357/1826 +f 999/1989/1827 988/448/1827 2505/1990/1827 +f 160/661/1828 735/1479/1828 717/1991/1828 +f 3498/777/1829 3445/354/1829 3505/353/1829 +f 1014/914/1830 1191/1526/1830 438/489/1830 +f 722/1405/1831 716/1992/1831 699/1897/1831 +f 912/1993/1832 913/1994/1832 938/1995/1832 +f 913/1618/1833 912/1393/1833 872/1476/1833 +f 145/797/1834 681/1556/1834 161/1222/1834 +f 876/1820/1835 884/1888/1835 863/1845/1835 +f 798/1996/1836 830/1643/1836 797/1969/1836 +f 716/1803/1837 761/1997/1837 760/1791/1837 +f 2458/1998/1838 2440/1881/1838 969/1999/1838 +f 711/2000/1839 742/1892/1839 734/1968/1839 +f 710/1391/1840 711/2000/1840 734/1968/1840 +f 924/2001/1841 803/915/1841 1175/1221/1841 +f 1014/914/1842 1175/1221/1842 803/915/1842 +f 635/2002/1843 668/830/1843 803/1980/1843 +f 2322/2003/1844 2220/2004/1844 2382/2005/1844 +f 722/1405/1845 761/1560/1845 716/1992/1845 +f 662/1554/1846 661/549/1846 639/1422/1846 +f 860/1617/1847 872/1476/1847 817/1397/1847 +f 847/816/1848 860/1617/1848 817/1397/1848 +f 1094/1170/1849 1113/139/1849 1086/1769/1849 +f 848/1843/1850 875/1842/1850 829/1421/1850 +f 649/1773/1851 638/1775/1851 600/1974/1851 +f 848/1843/1852 883/2006/1852 916/1834/1852 +f 865/1822/1853 856/1326/1853 526/1325/1853 +f 3479/312/1854 2264/698/1854 3425/313/1854 +f 829/1421/1855 841/1420/1855 848/1843/1855 +f 597/1379/1856 610/1281/1856 581/1280/1856 +f 924/2001/1857 635/2007/1857 803/915/1857 +f 635/2007/1858 625/2008/1858 811/2009/1858 +f 668/830/1859 635/2002/1859 811/831/1859 +f 532/570/1860 563/614/1860 844/1598/1860 +f 608/996/1861 560/2010/1861 2/997/1861 +f 1452/1970/1862 271/204/1862 1440/290/1862 +f 570/2011/1863 3406/2012/1863 586/1676/1863 +f 819/1887/1864 897/1516/1864 862/1644/1864 +f 596/1799/1865 608/996/1865 751/2013/1865 +f 670/1821/1866 679/1908/1866 678/1774/1866 +f 777/1439/1867 793/814/1867 817/1397/1867 +f 2552/1854/1868 1059/2014/1868 1047/1855/1868 +f 675/1827/1869 704/1759/1869 711/2000/1869 +f 742/1892/1870 759/1481/1870 758/1458/1870 +f 685/1681/1871 811/831/1871 625/2015/1871 +f 642/2016/1872 685/2017/1872 625/2008/1872 +f 711/2000/1873 712/1705/1873 742/1892/1873 +f 822/1590/1874 888/1862/1874 707/2018/1874 +f 3405/2019/1875 570/2011/1875 586/1676/1875 +f 3406/2012/1876 587/1677/1876 586/1676/1876 +f 768/1180/1877 767/2020/1877 869/2021/1877 +f 864/1851/1878 790/1561/1878 878/1952/1878 +f 819/1887/1879 862/1644/1879 830/1643/1879 +f 925/1488/1880 582/1505/1880 949/1489/1880 +f 943/1872/1881 684/2022/1881 706/1873/1881 +f 679/1908/1882 699/1897/1882 678/1774/1882 +f 1189/1883/1883 633/1566/1883 658/1565/1883 +f 888/1862/1884 644/2023/1884 707/2018/1884 +f 883/2006/1885 864/1851/1885 916/1834/1885 +f 985/319/1886 1064/983/1886 1026/320/1886 +f 712/1705/1887 759/1481/1887 742/1892/1887 +f 901/2024/1888 635/2002/1888 924/2025/1888 +f 802/2026/1889 625/2015/1889 635/2002/1889 +f 802/2026/1890 642/2027/1890 625/2015/1890 +f 769/1389/1891 854/2028/1891 927/1828/1891 +f 775/1316/1892 105/2029/1892 1004/1317/1892 +f 2423/2030/1893 1307/2031/1893 130/2032/1893 +f 761/1560/1894 819/1887/1894 799/1868/1894 +f 3205/2033/1895 601/1975/1895 975/1748/1895 +f 599/1455/1896 660/1454/1896 612/1838/1896 +f 1324/2034/1897 1460/2035/1897 1308/164/1897 +f 778/1687/1898 786/1480/1898 759/1481/1898 +f 2246/2036/1899 2335/1890/1899 2261/1889/1899 +f 940/1794/1900 790/1561/1900 655/1563/1900 +f 930/1529/1901 948/794/1901 865/1822/1901 +f 426/700/1902 915/854/1902 607/1808/1902 +f 1291/1680/1903 2136/1679/1903 1303/2037/1903 +f 871/1536/1904 926/1508/1904 671/2038/1904 +f 734/1968/1905 742/1892/1905 181/436/1905 +f 1030/1963/1906 873/1507/1906 824/1506/1906 +f 692/1435/1907 705/1901/1907 721/1557/1907 +f 1199/493/1908 922/451/1908 1149/1043/1908 +f 2498/2039/1909 2515/2040/1909 2478/2041/1909 +f 649/1429/1910 92/1063/1910 670/1062/1910 +f 758/1458/1911 759/1481/1911 777/1439/1911 +f 576/1654/1912 590/1760/1912 581/1280/1912 +f 3455/2042/1913 3444/2043/1913 3478/428/1913 +f 666/2044/1914 924/2001/1914 1117/2045/1914 +f 666/1877/1915 901/2024/1915 924/2025/1915 +f 825/2046/1916 685/2017/1916 642/2016/1916 +f 685/1681/1917 852/935/1917 471/31/1917 +f 1167/2047/1918 1195/453/1918 1156/452/1918 +f 898/1616/1919 822/1387/1919 932/1390/1919 +f 615/1582/1920 658/1565/1920 881/1564/1920 +f 807/1672/1921 797/1419/1921 829/1421/1921 +f 697/2048/1922 596/1799/1922 751/2013/1922 +f 1015/751/1923 1163/280/1923 1092/752/1923 +f 772/1436/1924 779/1670/1924 744/1437/1924 +f 1465/1035/1925 800/1509/1925 763/1493/1925 +f 751/2013/1926 608/996/1926 674/1396/1926 +f 1038/1356/1927 1045/405/1927 1018/404/1927 +f 635/2002/1928 901/2024/1928 802/2026/1928 +f 656/2049/1929 642/2027/1929 802/2026/1929 +f 656/2049/1930 825/1682/1930 642/2027/1930 +f 864/1851/1931 746/1823/1931 790/1561/1931 +f 1167/2047/1932 1201/511/1932 1195/453/1932 +f 3406/2012/1933 588/477/1933 587/1677/1933 +f 662/1554/1934 145/797/1934 661/549/1934 +f 145/797/1935 161/1222/1935 155/710/1935 +f 1210/1652/1936 1149/1043/1936 8/2050/1936 +f 694/1385/1937 729/1790/1937 715/1683/1937 +f 715/1683/1938 729/1790/1938 773/1792/1938 +f 881/2051/1939 633/2052/1939 869/2021/1939 +f 1083/488/1940 1025/882/1940 1142/746/1940 +f 669/1434/1941 692/1435/1941 647/2053/1941 +f 796/2054/1942 806/1902/1942 795/1707/1942 +f 764/2055/1943 526/1497/1943 655/1809/1943 +f 883/2006/1944 641/1852/1944 864/1851/1944 +f 1317/2056/1945 1094/1170/1945 1114/1172/1945 +f 695/1490/1946 949/1489/1946 885/1619/1946 +f 682/745/1947 318/2057/1947 774/1061/1947 +f 667/2058/1948 802/2026/1948 901/2024/1948 +f 667/2058/1949 656/2049/1949 802/2026/1949 +f 732/2059/1950 825/2060/1950 656/2061/1950 +f 849/2062/1951 852/2063/1951 825/2046/1951 +f 633/2052/1952 728/2064/1952 869/2021/1952 +f 869/2021/1953 728/2064/1953 768/1180/1953 +f 974/1837/1954 591/1836/1954 573/1545/1954 +f 744/1622/1955 771/2065/1955 743/2066/1955 +f 929/1688/1956 881/1564/1956 869/2067/1956 +f 869/2021/1957 620/1655/1957 739/2068/1957 +f 2797/1717/1958 2816/2069/1958 2183/1718/1958 +f 824/1506/1959 926/1508/1959 871/1536/1959 +f 2422/2070/1960 2459/2071/1960 2517/2072/1960 +f 538/779/1961 645/780/1961 125/572/1961 +f 2483/2073/1962 988/448/1962 978/450/1962 +f 908/2074/1963 1093/277/1963 1201/511/1963 +f 901/2024/1964 666/1877/1964 667/2058/1964 +f 667/2075/1965 732/2059/1965 656/2061/1965 +f 732/2076/1966 849/2077/1966 825/1682/1966 +f 889/1863/1967 852/935/1967 849/2077/1967 +f 908/2074/1968 1143/512/1968 1093/277/1968 +f 3483/1639/1969 3453/856/1969 1897/858/1969 +f 717/1991/1970 679/1988/1970 136/378/1970 +f 875/1819/1971 916/2078/1971 895/2079/1971 +f 863/1845/1972 819/1887/1972 808/1494/1972 +f 568/2080/1973 665/1853/1973 930/1529/1973 +f 622/1593/1974 647/2053/1974 631/1725/1974 +f 647/2081/1975 646/2082/1975 631/2083/1975 +f 622/1593/1976 631/1725/1976 611/1594/1976 +f 692/2084/1977 676/2085/1977 647/1742/1977 +f 865/1822/1978 871/1527/1978 930/1529/1978 +f 869/2021/1979 767/2020/1979 620/1655/1979 +f 624/1645/1980 604/1174/1980 890/852/1980 +f 471/31/1981 811/831/1981 685/1681/1981 +f 897/1516/1982 884/1888/1982 925/1488/1982 +f 933/2086/1983 732/2076/1983 667/2058/1983 +f 3406/2012/1984 571/2087/1984 588/477/1984 +f 820/1510/1985 863/1845/1985 808/1494/1985 +f 794/815/1986 818/1715/1986 847/816/1986 +f 941/1451/1987 891/297/1987 886/331/1987 +f 591/1592/1988 612/1838/1988 622/1593/1988 +f 714/1558/1989 721/1557/1989 713/1706/1989 +f 721/1557/1990 744/1437/1990 713/1706/1990 +f 744/1622/1991 796/1621/1991 771/2065/1991 +f 878/1952/1992 790/1561/1992 940/1794/1992 +f 2478/2088/1993 2515/1866/1993 1834/1865/1993 +f 997/1026/1994 1006/1923/1994 996/897/1994 +f 842/516/1995 697/515/1995 751/2089/1995 +f 854/2028/1996 933/2086/1996 667/2058/1996 +f 632/2090/1997 732/2059/1997 933/2091/1997 +f 732/2076/1998 632/2092/1998 849/2077/1998 +f 674/1475/1999 842/516/1999 751/2089/1999 +f 1862/174/2000 1893/2093/2000 2093/338/2000 +f 18/2094/2001 810/1395/2001 562/995/2001 +f 571/2087/2002 3406/2012/2002 3376/2095/2002 +f 68/818/2003 80/209/2003 60/784/2003 +f 645/780/2004 202/674/2004 281/415/2004 +f 1036/2096/2005 1209/2097/2005 504/2098/2005 +f 1155/492/2006 2197/1925/2006 2257/1927/2006 +f 647/1742/2007 676/2085/2007 646/2099/2007 +f 2096/2100/2008 2651/2101/2008 2499/2102/2008 +f 641/1580/2009 850/1641/2009 746/1950/2009 +f 1175/419/2010 1181/418/2010 812/2103/2010 +f 927/1828/2011 667/2058/2011 666/1877/2011 +f 927/1828/2012 854/2028/2012 667/2058/2012 +f 905/2104/2013 889/2105/2013 849/2062/2013 +f 749/1770/2014 105/2029/2014 740/2106/2014 +f 1083/488/2015 1142/746/2015 438/489/2015 +f 762/1492/2016 722/1405/2016 735/1404/2016 +f 744/1622/2017 743/2066/2017 713/2107/2017 +f 631/2083/2018 646/2082/2018 637/2108/2018 +f 796/2054/2019 795/1707/2019 771/1686/2019 +f 719/1954/2020 730/2109/2020 725/1534/2020 +f 612/1838/2021 648/1839/2021 622/1593/2021 +f 360/901/2022 471/31/2022 852/935/2022 +f 971/977/2023 990/2110/2023 970/978/2023 +f 690/1254/2024 711/2000/2024 710/1391/2024 +f 600/1974/2025 599/1835/2025 975/1748/2025 +f 884/1888/2026 876/1820/2026 925/1488/2026 +f 949/1489/2027 582/1505/2027 1030/1963/2027 +f 1163/2111/2028 666/2044/2028 1092/2112/2028 +f 854/2028/2029 882/2113/2029 933/2086/2029 +f 882/2114/2030 632/2090/2030 933/2091/2030 +f 644/2115/2031 849/2077/2031 632/2092/2031 +f 849/2077/2032 644/2115/2032 905/2116/2032 +f 637/1674/2033 646/1424/2033 659/1423/2033 +f 2548/2117/2034 2852/2118/2034 2744/2119/2034 +f 3439/2120/2035 3493/399/2035 3471/398/2035 +f 904/1569/2036 653/432/2036 532/570/2036 +f 624/1645/2037 665/1853/2037 604/1174/2037 +f 475/1352/2038 682/745/2038 512/1353/2038 +f 929/2121/2039 869/2021/2039 739/2068/2039 +f 614/2122/2040 650/1555/2040 662/1554/2040 +f 614/1403/2041 662/2123/2041 613/2124/2041 +f 3279/106/2042 3294/105/2042 3342/165/2042 +f 707/2018/2043 632/2090/2043 882/2114/2043 +f 707/2018/2044 644/2023/2044 632/2090/2044 +f 810/1395/2045 297/2125/2045 889/2105/2045 +f 905/2104/2046 810/1395/2046 889/2105/2046 +f 2976/2126/2047 2977/1885/2047 2989/1884/2047 +f 1355/1960/2048 1633/2127/2048 1651/1958/2048 +f 571/2087/2049 580/1313/2049 588/477/2049 +f 1964/2128/2050 3236/2129/2050 3439/2130/2050 +f 1328/2131/2051 943/1872/2051 313/803/2051 +f 785/1538/2052 621/1540/2052 865/1822/2052 +f 611/1594/2053 631/1725/2053 598/1378/2053 +f 627/1727/2054 855/1381/2054 747/1383/2054 +f 1171/657/2055 316/356/2055 594/1044/2055 +f 878/1952/2056 940/1794/2056 916/1834/2056 +f 699/1897/2057 677/1882/2057 678/1774/2057 +f 1067/908/2058 1077/1175/2058 1044/909/2058 +f 600/1974/2059 638/1775/2059 599/1835/2059 +f 699/1897/2060 716/1992/2060 694/1911/2060 +f 915/854/2061 940/1794/2061 607/1808/2061 +f 1454/2132/2062 724/1370/2062 730/2109/2062 +f 845/1496/2063 905/2116/2063 644/2115/2063 +f 297/2125/2064 810/1395/2064 18/2094/2064 +f 3390/1375/2065 1986/1176/2065 2004/1177/2065 +f 1267/191/2066 1242/2133/2066 1285/192/2066 +f 1898/2134/2067 2808/2135/2067 2062/2136/2067 +f 1246/2137/2068 1083/488/2068 1127/490/2068 +f 407/315/2069 3336/314/2069 2279/1800/2069 +f 704/1759/2070 712/1705/2070 711/2000/2070 +f 796/2054/2071 807/1672/2071 806/1902/2071 +f 630/1673/2072 631/1725/2072 637/1674/2072 +f 560/1032/2073 608/2138/2073 753/1766/2073 +f 739/2068/2074 620/1655/2074 917/1657/2074 +f 713/1706/2075 712/1705/2075 704/1759/2075 +f 716/1803/2076 760/1791/2076 729/1790/2076 +f 608/996/2077 562/995/2077 810/1395/2077 +f 1386/129/2078 134/203/2078 363/1233/2078 +f 790/1561/2079 746/1823/2079 764/1562/2079 +f 660/1454/2080 677/1384/2080 669/1434/2080 +f 854/2028/2081 769/1389/2081 882/2113/2081 +f 769/1389/2082 707/1388/2082 882/2113/2082 +f 674/1396/2083 810/1395/2083 905/2104/2083 +f 888/2139/2084 845/1496/2084 644/2115/2084 +f 690/1254/2085 675/1827/2085 711/2000/2085 +f 999/1989/2086 1018/1025/2086 988/448/2086 +f 710/2140/2087 734/2141/2087 720/2142/2087 +f 785/1538/2088 526/1325/2088 764/1562/2088 +f 807/1672/2089 828/1746/2089 806/1902/2089 +f 623/1552/2090 595/514/2090 887/1658/2090 +f 795/1707/2091 806/1902/2091 818/1715/2091 +f 692/2084/2092 721/2143/2092 676/2085/2092 +f 875/1819/2093 895/2079/2093 861/1719/2093 +f 628/1449/2094 623/1552/2094 683/1450/2094 +f 2481/2144/2095 2465/2145/2095 2503/2146/2095 +f 669/1434/2096 677/1384/2096 693/1386/2096 +f 701/1473/2097 905/2116/2097 845/1496/2097 +f 905/2116/2098 701/1473/2098 674/1475/2098 +f 580/1313/2099 571/2087/2099 3348/2147/2099 +f 781/2148/2100 3252/2149/2100 1572/2150/2100 +f 636/551/2101 75/552/2101 629/899/2101 +f 1367/2151/2102 767/2020/2102 1303/1179/2102 +f 626/1474/2103 701/1473/2103 845/1496/2103 +f 1112/2152/2104 1040/2153/2104 1011/2154/2104 +f 2045/2155/2105 2044/2156/2105 2017/2157/2105 +f 2045/2155/2106 2058/2158/2106 2044/2156/2106 +f 1906/47/2107 1896/2159/2107 1514/2160/2107 +f 232/2161/2108 1138/42/2108 1170/2162/2108 +f 1016/2163/2109 1035/2164/2109 3436/1372/2109 +f 1016/2163/2110 1011/2154/2110 1035/2164/2110 +f 749/1289/2111 857/1783/2111 3426/1004/2111 +f 1360/2165/2112 1359/2166/2112 120/494/2112 +f 3189/1637/2113 3212/2167/2113 3211/2168/2113 +f 1788/1227/2114 1787/1229/2114 1773/2169/2114 +f 1041/420/2115 158/80/2115 1319/200/2115 +f 1415/2170/2116 1158/2171/2116 2100/2172/2116 +f 2090/2173/2117 515/2174/2117 1461/46/2117 +f 955/2175/2118 2993/2176/2118 960/2177/2118 +f 1487/2178/2119 1479/2179/2119 3397/2180/2119 +f 1839/2181/2120 1626/2182/2120 1846/1200/2120 +f 3507/1858/2121 1016/2163/2121 3436/1372/2121 +f 1855/113/2122 1377/175/2122 1960/884/2122 +f 1011/2154/2123 950/2183/2123 1112/2152/2123 +f 988/448/2124 1018/1025/2124 998/449/2124 +f 1459/40/2125 1634/2184/2125 1602/41/2125 +f 2031/2185/2126 1311/2186/2126 1968/2187/2126 +f 1319/200/2127 1325/199/2127 1995/2188/2127 +f 1995/2188/2128 1724/408/2128 1762/407/2128 +f 1792/2189/2129 2275/2190/2129 1791/2191/2129 +f 2373/2192/2130 2135/2193/2130 2334/2194/2130 +f 1218/1857/2131 1016/2163/2131 3507/1858/2131 +f 955/2175/2132 960/2177/2132 959/576/2132 +f 1218/1857/2133 950/2183/2133 1016/2163/2133 +f 1724/408/2134 1137/2195/2134 1981/58/2134 +f 1011/2154/2135 1040/2153/2135 1035/2164/2135 +f 3436/1372/2136 1035/2164/2136 1101/2196/2136 +f 980/2197/2137 1010/2198/2137 1001/2199/2137 +f 1107/2200/2138 1125/747/2138 1106/749/2138 +f 1814/2201/2139 2294/2202/2139 1827/1513/2139 +f 633/2052/2140 1189/1986/2140 965/1978/2140 +f 1378/594/2141 1137/2195/2141 2104/592/2141 +f 2275/2190/2142 2294/2202/2142 1791/2191/2142 +f 1082/2203/2143 1087/2204/2143 1071/702/2143 +f 2104/592/2144 20/707/2144 2047/593/2144 +f 20/707/2145 1571/2205/2145 2087/822/2145 +f 3280/107/2146 3279/106/2146 3213/2206/2146 +f 1193/334/2147 1175/1221/2147 1014/914/2147 +f 2087/822/2148 1571/2205/2148 2061/2207/2148 +f 2859/2208/2149 2064/2209/2149 2218/2210/2149 +f 2898/2211/2150 2882/2212/2150 2867/2213/2150 +f 1925/2214/2151 1568/2215/2151 1711/2216/2151 +f 1501/2217/2152 1735/2218/2152 1734/2219/2152 +f 1725/2220/2153 1501/2217/2153 1734/2219/2153 +f 1027/2221/2154 1012/2222/2154 3468/2223/2154 +f 1138/42/2155 1179/82/2155 1178/1662/2155 +f 1188/1575/2156 2121/323/2156 1128/1576/2156 +f 2784/2224/2157 2770/2225/2157 1125/2226/2157 +f 1101/2196/2158 1118/1117/2158 3485/326/2158 +f 1065/2227/2159 1209/2097/2159 1036/2096/2159 +f 3241/309/2160 3280/107/2160 3213/2206/2160 +f 2925/2228/2161 2926/2229/2161 2944/2230/2161 +f 467/2231/2162 1379/588/2162 1131/2232/2162 +f 1188/1575/2163 2069/321/2163 2121/323/2163 +f 1288/2233/2164 2031/2185/2164 1978/340/2164 +f 2687/2234/2165 1931/2235/2165 1908/2236/2165 +f 1059/2014/2166 1070/2237/2166 1046/2238/2166 +f 1216/2239/2167 1112/2152/2167 950/2183/2167 +f 1027/2221/2168 1111/1971/2168 1012/2222/2168 +f 1097/2240/2169 1139/2241/2169 1105/2242/2169 +f 1369/2243/2170 1393/2244/2170 243/2245/2170 +f 1216/2239/2171 1217/193/2171 1112/2152/2171 +f 1047/2246/2172 1046/2247/2172 1033/2248/2172 +f 3426/1004/2173 1004/2249/2173 105/1290/2173 +f 1263/154/2174 1315/156/2174 1172/1690/2174 +f 1820/2250/2175 1992/2251/2175 1561/2252/2175 +f 2372/2253/2176 963/2254/2176 2910/2255/2176 +f 1118/1117/2177 1101/2196/2177 1073/2256/2177 +f 1073/2256/2178 1040/2153/2178 976/2257/2178 +f 985/319/2179 1222/1084/2179 226/832/2179 +f 226/832/2180 1100/834/2180 1064/983/2180 +f 1140/2258/2181 1157/2259/2181 1169/2260/2181 +f 1072/2261/2182 1071/702/2182 2552/701/2182 +f 3212/2167/2183 3213/2206/2183 3227/2262/2183 +f 1072/2261/2184 1082/2203/2184 1071/702/2184 +f 1134/1802/2185 3438/2263/2185 983/1985/2185 +f 1012/2222/2186 1189/1986/2186 983/1985/2186 +f 2723/653/2187 2753/652/2187 2601/2264/2187 +f 781/2148/2188 2046/2265/2188 2017/2157/2188 +f 2031/2185/2189 2071/2266/2189 1978/340/2189 +f 2103/116/2190 2116/2267/2190 2102/2268/2190 +f 992/2269/2191 1173/2270/2191 908/2074/2191 +f 3175/2271/2192 3197/2272/2192 3174/2273/2192 +f 502/2274/2193 1328/907/2193 479/906/2193 +f 1029/2275/2194 1116/2276/2194 3489/753/2194 +f 3045/2277/2195 3087/1409/2195 3057/1411/2195 +f 1203/2278/2196 2137/2279/2196 1202/2280/2196 +f 1139/2241/2197 1140/2258/2197 1169/2260/2197 +f 1810/1228/2198 1577/1955/2198 1831/2281/2198 +f 1139/2282/2199 1124/1431/2199 1105/2283/2199 +f 2137/2279/2200 992/2269/2200 1202/2280/2200 +f 2488/2284/2201 989/2285/2201 1007/2286/2201 +f 992/2269/2202 1050/2287/2202 1173/2270/2202 +f 3355/2288/2203 3414/2289/2203 1957/2290/2203 +f 1568/2215/2204 1925/2214/2204 1159/2291/2204 +f 1035/2164/2205 1073/2256/2205 1101/2196/2205 +f 2209/2292/2206 2377/2293/2206 2215/2294/2206 +f 1218/1857/2207 1148/429/2207 950/2183/2207 +f 1148/429/2208 1216/2239/2208 950/2183/2208 +f 2436/2295/2209 3019/2296/2209 3030/2297/2209 +f 2276/2298/2210 2231/2299/2210 2230/2300/2210 +f 2839/1640/2211 3434/869/2211 3483/1639/2211 +f 3482/1332/2212 3453/2301/2212 3492/1003/2212 +f 2085/339/2213 1807/2302/2213 1288/2233/2213 +f 1807/2302/2214 2085/339/2214 2068/1846/2214 +f 1246/2137/2215 2277/881/2215 1083/488/2215 +f 1831/937/2216 1818/2303/2216 1809/2304/2216 +f 1766/57/2217 1088/111/2217 1215/421/2217 +f 2634/362/2218 2653/2305/2218 2652/724/2218 +f 1151/2306/2219 1777/2307/2219 364/2308/2219 +f 1081/2309/2220 1105/2242/2220 1080/2310/2220 +f 1105/2242/2221 1096/2311/2221 1080/2310/2221 +f 1239/2312/2222 1311/1368/2222 57/1367/2222 +f 2221/2313/2223 2248/1131/2223 2287/2314/2223 +f 1784/2315/2224 1555/2316/2224 1785/589/2224 +f 2040/1017/2225 2081/2317/2225 2056/2318/2225 +f 1379/588/2226 1747/81/2226 182/260/2226 +f 2424/245/2227 2673/2319/2227 3428/759/2227 +f 1348/115/2228 1308/164/2228 1289/2320/2228 +f 2084/2321/2229 2068/1846/2229 2085/339/2229 +f 1893/2093/2230 2085/339/2230 2093/338/2230 +f 1800/1148/2231 1799/176/2231 1786/2322/2231 +f 2653/2305/2232 2689/1201/2232 2652/724/2232 +f 1029/2275/2233 1180/324/2233 1036/2096/2233 +f 1008/2323/2234 1007/2324/2234 989/2325/2234 +f 2153/1194/2235 2677/2326/2235 2482/2327/2235 +f 1757/2328/2236 1770/1090/2236 1764/2329/2236 +f 1024/2330/2237 2377/2293/2237 2209/2292/2237 +f 1869/59/2238 1377/175/2238 1108/112/2238 +f 2201/2331/2239 2191/2332/2239 2302/2333/2239 +f 1124/2334/2240 1139/2241/2240 1169/2260/2240 +f 1855/113/2241 1062/2335/2241 1147/261/2241 +f 1460/2035/2242 1078/6/2242 1414/2336/2242 +f 1214/2337/2243 1286/2338/2243 1777/2339/2243 +f 1286/2340/2244 1379/588/2244 1777/2307/2244 +f 1081/2309/2245 1080/2310/2245 1070/2341/2245 +f 1377/175/2246 1862/174/2246 1960/884/2246 +f 1269/2342/2247 1415/1660/2247 1122/2343/2247 +f 2524/2344/2248 3462/2345/2248 3441/870/2248 +f 1269/2346/2249 3352/2347/2249 1415/2170/2249 +f 2795/2348/2250 2012/2349/2250 2847/2350/2250 +f 1322/2351/2251 1828/2352/2251 2049/2353/2251 +f 1000/2354/2252 1008/2323/2252 989/2325/2252 +f 2406/2355/2253 2405/2356/2253 2911/2357/2253 +f 846/1816/2254 838/1764/2254 619/1817/2254 +f 1218/1857/2255 1042/427/2255 1148/429/2255 +f 2713/2358/2256 1125/2226/2256 1107/2359/2256 +f 1026/320/2257 1064/983/2257 708/2360/2257 +f 561/2361/2258 1325/199/2258 158/80/2258 +f 1096/2311/2259 1104/2362/2259 1103/2363/2259 +f 2120/186/2260 2093/338/2260 1978/340/2260 +f 1033/2248/2261 1046/2247/2261 1022/2364/2261 +f 1845/178/2262 1619/2365/2262 1612/2366/2262 +f 2713/2358/2263 1107/2359/2263 2662/2367/2263 +f 1097/2240/2264 1105/2242/2264 1081/2309/2264 +f 599/1835/2265 974/1837/2265 975/1748/2265 +f 1044/909/2266 1054/1768/2266 1031/1573/2266 +f 384/1609/2267 809/1624/2267 686/1610/2267 +f 1004/1317/2268 3431/2368/2268 686/1610/2268 +f 1105/2242/2269 1124/2334/2269 1096/2311/2269 +f 970/978/2270 979/2369/2270 969/2370/2270 +f 1612/2366/2271 1617/541/2271 1844/2371/2271 +f 1189/1883/2272 615/1582/2272 939/1581/2272 +f 1378/594/2273 2047/593/2273 1154/364/2273 +f 1020/2372/2274 1033/2248/2274 1022/2364/2274 +f 1862/174/2275 577/185/2275 1960/884/2275 +f 1010/1597/2276 1009/1596/2276 1001/2373/2276 +f 2119/2374/2277 1621/2375/2277 20/707/2277 +f 1180/324/2278 1065/2227/2278 1036/2096/2278 +f 2145/2376/2279 1291/1680/2279 1283/2377/2279 +f 983/1985/2280 991/2378/2280 1012/2222/2280 +f 3500/325/2281 1180/324/2281 1029/2275/2281 +f 1862/174/2282 2093/338/2282 577/185/2282 +f 970/2379/2283 989/2325/2283 979/2380/2283 +f 1460/2035/2284 1414/2336/2284 1289/2320/2284 +f 1070/2341/2285 1069/2381/2285 1058/2382/2285 +f 980/2197/2286 1001/2199/2286 971/977/2286 +f 962/1964/2287 980/2197/2287 971/977/2287 +f 1111/1971/2288 1189/1986/2288 1012/2222/2288 +f 2044/2156/2289 2043/563/2289 3182/562/2289 +f 1124/1431/2290 1169/2383/2290 1168/2384/2290 +f 3251/2385/2291 953/2386/2291 3270/2387/2291 +f 1151/2388/2292 1214/2337/2292 1777/2339/2292 +f 1968/2187/2293 1988/2389/2293 2071/2266/2293 +f 982/259/2294 1147/261/2294 1062/2335/2294 +f 1069/2381/2295 1103/2363/2295 1068/2390/2295 +f 1078/6/2296 228/5/2296 1414/2336/2296 +f 1203/2278/2297 1202/2280/2297 1196/2391/2297 +f 1762/407/2298 1766/57/2298 1215/421/2298 +f 2044/2156/2299 2057/219/2299 2043/563/2299 +f 1798/912/2300 1605/540/2300 1597/913/2300 +f 1017/1942/2301 1031/1573/2301 1054/1768/2301 +f 2289/1443/2302 2158/1442/2302 2862/2392/2302 +f 1059/703/2303 1081/2309/2303 1070/2341/2303 +f 1020/2372/2304 1022/2364/2304 1008/2393/2304 +f 1020/2394/2305 1008/2323/2305 1009/1596/2305 +f 821/2395/2306 1214/30/2306 1151/2306/2306 +f 652/1140/2307 2229/1142/2307 657/2396/2307 +f 1032/2397/2308 2551/2398/2308 2527/2399/2308 +f 1855/113/2309 1935/886/2309 1062/2335/2309 +f 1070/2341/2310 1058/2382/2310 1032/2397/2310 +f 1022/2364/2311 1032/2397/2311 1007/2286/2311 +f 1008/2393/2312 1022/2364/2312 1007/2286/2312 +f 961/979/2313 970/978/2313 969/2370/2313 +f 3451/1929/2314 870/2400/2314 3480/1300/2314 +f 1126/2401/2315 1216/2239/2315 1148/429/2315 +f 242/1967/2316 1217/193/2316 1216/2239/2316 +f 1126/2401/2317 242/1967/2317 1216/2239/2317 +f 3501/350/2318 3496/1097/2318 3452/1099/2318 +f 2250/2402/2319 2242/2403/2319 2382/2005/2319 +f 1157/2259/2320 1185/2404/2320 1184/2405/2320 +f 1185/2404/2321 1203/2278/2321 1184/2405/2321 +f 2242/2406/2322 2250/2407/2322 2282/2408/2322 +f 953/1544/2323 975/1748/2323 974/1837/2323 +f 3452/2409/2324 3507/1858/2324 3436/1372/2324 +f 1001/2199/2325 990/2110/2325 971/977/2325 +f 1916/2410/2326 2171/2411/2326 1449/2412/2326 +f 1784/2315/2327 1785/589/2327 1796/591/2327 +f 970/2379/2328 1000/2354/2328 989/2325/2328 +f 3391/2413/2329 1974/108/2329 3390/1375/2329 +f 3438/2263/2330 991/2378/2330 983/1985/2330 +f 3431/2368/2331 1160/1611/2331 686/1610/2331 +f 1035/2164/2332 1040/2153/2332 1073/2256/2332 +f 3371/683/2333 3372/2414/2333 3381/684/2333 +f 3481/1108/2334 1148/429/2334 3478/428/2334 +f 2911/2357/2335 2405/2356/2335 2909/2415/2335 +f 1920/2416/2336 2360/2417/2336 2225/2418/2336 +f 1484/2419/2337 1502/2420/2337 1501/2217/2337 +f 2616/2421/2338 1866/2422/2338 2581/2423/2338 +f 1996/2424/2339 2364/2425/2339 2307/2426/2339 +f 3449/1266/2340 3450/1354/2340 3495/359/2340 +f 652/1140/2341 657/2396/2341 837/2427/2341 +f 1032/2397/2342 1058/2382/2342 2551/2398/2342 +f 857/1783/2343 805/1703/2343 3509/1702/2343 +f 1694/2428/2344 3335/2429/2344 1669/862/2344 +f 2419/2430/2345 981/2431/2345 963/2432/2345 +f 2377/2293/2346 2339/2433/2346 2215/2294/2346 +f 2909/2415/2347 2405/2356/2347 2404/2434/2347 +f 1286/2340/2348 1747/81/2348 1379/588/2348 +f 1118/1117/2349 1065/2227/2349 1180/324/2349 +f 3329/2435/2350 3374/2436/2350 3328/2437/2350 +f 1166/602/2351 1155/492/2351 2257/1927/2351 +f 947/1623/2352 470/554/2352 426/700/2352 +f 2377/2293/2353 2132/2438/2353 2339/2433/2353 +f 1090/2439/2354 242/1967/2354 1126/2401/2354 +f 1389/603/2355 410/1215/2355 756/675/2355 +f 1617/541/2356 1612/2366/2356 1618/2440/2356 +f 1104/2362/2357 1123/424/2357 1103/2363/2357 +f 1800/1125/2358 1786/2441/2358 1764/2329/2358 +f 1213/2442/2359 908/2074/2359 1201/511/2359 +f 558/635/2360 652/1140/2360 837/2427/2360 +f 1168/2443/2361 1213/2442/2361 1167/2047/2361 +f 1096/2311/2362 1103/2363/2362 1069/2381/2362 +f 3214/2444/2363 3243/2445/2363 3228/2446/2363 +f 1104/2362/2364 1124/2334/2364 1168/2443/2364 +f 1118/1117/2365 976/2257/2365 1065/2227/2365 +f 2104/592/2366 2119/2374/2366 20/707/2366 +f 1910/2447/2367 1889/2448/2367 3288/2449/2367 +f 1066/2450/2368 1148/429/2368 3481/1108/2368 +f 1066/2450/2369 1126/2401/2369 1148/429/2369 +f 1411/2451/2370 1183/1034/2370 1438/1036/2370 +f 1095/4/2371 2100/1661/2371 1214/30/2371 +f 976/2257/2372 1040/2153/2372 24/2452/2372 +f 1855/113/2373 1960/884/2373 1935/886/2373 +f 1103/2363/2374 1079/2453/2374 1068/2390/2374 +f 1786/2322/2375 1798/912/2375 1567/911/2375 +f 1066/2450/2376 1090/2439/2376 1126/2401/2376 +f 2403/2454/2377 2909/2415/2377 2404/2434/2377 +f 1129/2455/2378 2770/2225/2378 1140/2456/2378 +f 2770/1701/2379 1185/2404/2379 1157/2259/2379 +f 2907/2457/2380 2916/851/2380 2906/2458/2380 +f 3496/1097/2381 3465/838/2381 3502/837/2381 +f 2339/2433/2382 2328/2459/2382 2138/2460/2382 +f 1156/452/2383 1168/2443/2383 1167/2047/2383 +f 1923/2461/2384 1507/1196/2384 2896/2462/2384 +f 1029/2275/2385 229/2463/2385 1116/2276/2385 +f 1029/2275/2386 1036/2096/2386 229/2463/2386 +f 1036/2096/2387 504/2098/2387 229/2463/2387 +f 1169/2260/2388 1184/2405/2388 1168/2443/2388 +f 1157/2259/2389 1184/2405/2389 1169/2260/2389 +f 812/2464/2390 924/2001/2390 1175/1221/2390 +f 136/378/2391 670/1062/2391 102/796/2391 +f 2939/2465/2392 2964/527/2392 2974/529/2392 +f 3382/2466/2393 3372/2414/2393 3342/165/2393 +f 3382/2466/2394 3342/165/2394 3294/105/2394 +f 1805/2467/2395 3510/1467/2395 3491/2468/2395 +f 2770/1701/2396 1157/2259/2396 1140/2258/2396 +f 3494/1305/2397 3459/1457/2397 3485/326/2397 +f 1843/2469/2398 1853/2470/2398 1816/2471/2398 +f 961/979/2399 969/2370/2399 957/1053/2399 +f 3503/615/2400 1042/427/2400 3507/1858/2400 +f 3482/1332/2401 3492/1003/2401 3424/1002/2401 +f 3465/838/2402 3491/2468/2402 3455/839/2402 +f 961/979/2403 957/1053/2403 2956/2472/2403 +f 985/319/2404 226/832/2404 1064/983/2404 +f 1202/2280/2405 992/2269/2405 908/2074/2405 +f 1744/2473/2406 1734/2219/2406 1735/2218/2406 +f 1202/2280/2407 908/2074/2407 1213/2442/2407 +f 3045/2277/2408 3057/1411/2408 2998/2474/2408 +f 1023/2475/2409 1033/2248/2409 2506/2476/2409 +f 1023/2475/2410 1047/2246/2410 1033/2248/2410 +f 962/1964/2411 971/977/2411 961/979/2411 +f 1744/2477/2412 1772/1046/2412 1734/1048/2412 +f 1756/2478/2413 1757/2328/2413 1764/2329/2413 +f 1844/2371/2414 1845/178/2414 1612/2366/2414 +f 1772/1046/2415 1801/2479/2415 1771/1089/2415 +f 1801/2480/2416 1808/1147/2416 1771/2481/2416 +f 1057/2482/2417 1069/2381/2417 1063/2483/2417 +f 1129/2455/2418 1140/2456/2418 1139/2282/2418 +f 2984/2484/2419 3025/2485/2419 2983/528/2419 +f 1818/2303/2420 1817/177/2420 1808/1147/2420 +f 3242/1937/2421 3280/107/2421 3241/309/2421 +f 1032/2397/2422 2527/2399/2422 1007/2286/2422 +f 1777/2307/2423 467/2231/2423 364/2308/2423 +f 1103/2363/2424 1123/424/2424 1079/2453/2424 +f 2371/2486/2425 1887/1891/2425 2902/2487/2425 +f 2336/2488/2426 2190/2489/2426 2003/2490/2426 +f 1106/2491/2427 1129/2455/2427 1097/2492/2427 +f 1002/358/2428 1066/2450/2428 3481/1108/2428 +f 1460/2035/2429 1289/2320/2429 1308/164/2429 +f 1214/2337/2430 2100/2172/2430 1286/2338/2430 +f 1071/2493/2431 1081/2494/2431 1059/2014/2431 +f 1001/2373/2432 1000/2354/2432 990/2495/2432 +f 1213/2442/2433 1201/511/2433 1167/2047/2433 +f 1196/2391/2434 1202/2280/2434 1213/2442/2434 +f 951/1965/2435 961/979/2435 2956/2472/2435 +f 1817/177/2436 1818/2303/2436 1846/1200/2436 +f 1770/1090/2437 1800/1125/2437 1764/2329/2437 +f 2031/2185/2438 1968/2187/2438 2071/2266/2438 +f 1069/2381/2439 1068/2390/2439 1063/2483/2439 +f 1936/2496/2440 1864/2497/2440 1912/628/2440 +f 2770/2225/2441 2830/2498/2441 1185/2499/2441 +f 1066/2450/2442 1002/358/2442 1090/2439/2442 +f 1090/2439/2443 1100/834/2443 242/1967/2443 +f 1905/2500/2444 2069/321/2444 1188/1575/2444 +f 1289/2320/2445 1414/2336/2445 1152/2501/2445 +f 992/2269/2446 2137/2279/2446 1050/2287/2446 +f 1203/2278/2447 1196/2391/2447 1184/2405/2447 +f 228/5/2448 1214/30/2448 821/2395/2448 +f 969/2502/2449 979/531/2449 2458/530/2449 +f 1295/2503/2450 1260/184/2450 1231/183/2450 +f 2268/2504/2451 2252/2505/2451 2213/2506/2451 +f 963/2254/2452 958/2507/2452 2929/2508/2452 +f 1009/1596/2453 1008/2323/2453 1000/2354/2453 +f 2956/2472/2454 957/1053/2454 2967/1052/2454 +f 969/1999/2455 2440/1881/2455 957/2509/2455 +f 1077/1175/2456 1094/1170/2456 1086/1769/2456 +f 908/2074/2457 1173/2270/2457 1143/512/2457 +f 1123/424/2458 1104/2362/2458 1156/452/2458 +f 1080/2510/2459 1096/1433/2459 1069/2511/2459 +f 2402/2512/2460 2372/2253/2460 2910/2255/2460 +f 3375/2513/2461 3385/2514/2461 3374/2436/2461 +f 931/285/2462 1159/2291/2462 1277/100/2462 +f 2085/339/2463 1288/2233/2463 1978/340/2463 +f 1799/176/2464 1845/178/2464 1844/2371/2464 +f 775/1316/2465 740/2106/2465 105/2029/2465 +f 666/2515/2466 1163/280/2466 927/1776/2466 +f 616/1784/2467 942/1765/2467 846/1816/2467 +f 950/2183/2468 1011/2154/2468 1016/2163/2468 +f 2506/2476/2469 1033/2248/2469 1020/2372/2469 +f 1905/2500/2470 1925/2214/2470 1711/2216/2470 +f 1087/2516/2471 1097/2492/2471 1081/2494/2471 +f 972/2517/2472 980/2197/2472 962/1964/2472 +f 576/1654/2473 3270/2518/2473 573/1778/2473 +f 1653/776/2474 1811/1362/2474 664/210/2474 +f 860/1617/2475 348/927/2475 361/728/2475 +f 314/2519/2476 873/1507/2476 1030/1963/2476 +f 2810/253/2477 2869/1415/2477 2809/254/2477 +f 1001/2373/2478 1009/1596/2478 1000/2354/2478 +f 1766/57/2479 1108/112/2479 1088/111/2479 +f 1097/2492/2480 1129/2455/2480 1139/2282/2480 +f 1183/1034/2481 1210/1652/2481 8/2050/2481 +f 963/2254/2482 2929/2508/2482 2910/2255/2482 +f 1163/2520/2483 986/2521/2483 927/1828/2483 +f 1579/2522/2484 2066/2523/2484 2058/2158/2484 +f 2477/2524/2485 2498/2525/2485 2478/2526/2485 +f 2443/848/2486 2193/847/2486 2498/2525/2486 +f 1071/2493/2487 1087/2516/2487 1081/2494/2487 +f 2402/2512/2488 2410/2527/2488 2372/2253/2488 +f 972/2517/2489 962/1964/2489 958/2528/2489 +f 1132/301/2490 3470/281/2490 870/2400/2490 +f 725/1534/2491 730/2109/2491 724/1370/2491 +f 314/2519/2492 1030/1963/2492 582/1505/2492 +f 2869/1415/2493 2868/2529/2493 2841/1416/2493 +f 924/2001/2494 812/2464/2494 1117/2045/2494 +f 963/2530/2495 972/2517/2495 958/2528/2495 +f 3492/1003/2496 3483/1780/2496 3432/2531/2496 +f 1119/1814/2497 1121/2532/2497 846/1816/2497 +f 1034/2533/2498 616/1784/2498 846/1816/2498 +f 616/1784/2499 1034/2533/2499 1172/1690/2499 +f 2285/2534/2500 2316/2535/2500 2254/2536/2500 +f 1022/2364/2501 1046/2247/2501 1032/2397/2501 +f 1196/2391/2502 1213/2442/2502 1168/2443/2502 +f 1184/2405/2503 1196/2391/2503 1168/2443/2503 +f 1104/2362/2504 1168/2443/2504 1156/452/2504 +f 1046/2247/2505 1070/2341/2505 1032/2397/2505 +f 2490/2537/2506 1010/2198/2506 980/2197/2506 +f 1198/1938/2507 491/1504/2507 876/1820/2507 +f 3440/2538/2508 3433/349/2508 3459/665/2508 +f 7/1704/2509 932/1893/2509 1132/301/2509 +f 996/897/2510 1005/1924/2510 987/1092/2510 +f 2403/2454/2511 2410/2527/2511 2402/2512/2511 +f 1117/750/2512 812/2103/2512 3467/1591/2512 +f 2490/2539/2513 2506/1595/2513 1010/1597/2513 +f 1121/2532/2514 1034/2533/2514 846/1816/2514 +f 1068/2390/2515 2329/2540/2515 2599/2541/2515 +f 2697/2542/2516 977/2543/2516 3462/2345/2516 +f 1070/2341/2517 1080/2310/2517 1069/2381/2517 +f 3063/898/2518 954/577/2518 968/632/2518 +f 491/1504/2519 351/2544/2519 582/1505/2519 +f 351/2544/2520 314/2519/2520 582/1505/2520 +f 2346/1274/2521 1413/1226/2521 1362/1261/2521 +f 438/489/2522 1191/1526/2522 1133/723/2522 +f 3463/300/2523 3437/299/2523 3504/2545/2523 +f 3246/335/2524 3216/337/2524 3192/2546/2524 +f 3481/1108/2525 3458/1446/2525 1002/358/2525 +f 1165/2547/2526 1121/2532/2526 1119/1814/2526 +f 1079/2453/2527 1123/424/2527 1115/426/2527 +f 1764/2329/2528 1548/2548/2528 1756/2478/2528 +f 1002/358/2529 1153/360/2529 1090/2439/2529 +f 3194/2549/2530 78/811/2530 3170/1173/2530 +f 1058/2382/2531 1069/2381/2531 1057/2482/2531 +f 990/2495/2532 1000/2354/2532 970/2379/2532 +f 1073/2256/2533 976/2257/2533 1118/1117/2533 +f 453/1948/2534 3438/2263/2534 1134/1802/2534 +f 1183/1034/2535 1198/1938/2535 831/1831/2535 +f 814/343/2536 873/1507/2536 314/2519/2536 +f 1173/2270/2537 558/635/2537 1143/512/2537 +f 1165/2547/2538 1119/1814/2538 1298/1895/2538 +f 1034/2533/2539 1075/2550/2539 1172/1690/2539 +f 1045/405/2540 1061/517/2540 1013/406/2540 +f 1047/2246/2541 1059/703/2541 1046/2247/2541 +f 1084/1525/2542 1014/914/2542 1161/916/2542 +f 2046/2265/2543 2045/2155/2543 2017/2157/2543 +f 8/2050/2544 491/1504/2544 1198/1938/2544 +f 558/635/2545 837/2427/2545 2393/636/2545 +f 3477/788/2546 3433/349/2546 3460/1116/2546 +f 594/1044/2547 1162/140/2547 1053/2551/2547 +f 1034/2533/2548 1121/2532/2548 1075/2550/2548 +f 2178/2552/2549 2164/2553/2549 2174/2554/2549 +f 974/1837/2550 573/1545/2550 953/1544/2550 +f 651/1401/2551 1017/1942/2551 1043/1904/2551 +f 1076/303/2552 700/302/2552 1085/1984/2552 +f 981/2555/2553 980/2197/2553 972/2517/2553 +f 2901/2556/2554 2903/2557/2554 2370/2558/2554 +f 2673/2319/2555 2894/680/2555 3428/759/2555 +f 703/438/2556 133/439/2556 143/1028/2556 +f 8/2050/2557 1198/1938/2557 1183/1034/2557 +f 1053/2551/2558 351/2544/2558 491/1504/2558 +f 1153/360/2559 1100/834/2559 1090/2439/2559 +f 995/2559/2560 1017/1942/2560 651/1401/2560 +f 994/1979/2561 995/2559/2561 651/1401/2561 +f 1054/1768/2562 1085/1984/2562 700/302/2562 +f 2991/1880/2563 2990/2560/2563 2440/1881/2563 +f 981/2555/2564 2490/2537/2564 980/2197/2564 +f 1149/1043/2565 491/1504/2565 8/2050/2565 +f 315/341/2566 314/2519/2566 351/2544/2566 +f 377/571/2567 315/341/2567 351/2544/2567 +f 315/341/2568 814/343/2568 314/2519/2568 +f 2515/2040/2569 2231/2299/2569 1813/2561/2569 +f 963/2530/2570 981/2555/2570 972/2517/2570 +f 594/1044/2571 1053/2551/2571 1149/1043/2571 +f 1133/723/2572 1165/2547/2572 1298/1895/2572 +f 1084/1525/2573 1121/2532/2573 1165/2547/2573 +f 1121/2532/2574 1084/1525/2574 1075/2550/2574 +f 1043/1904/2575 1054/1768/2575 700/302/2575 +f 1153/360/2576 3495/359/2576 3447/982/2576 +f 1149/1043/2577 1053/2551/2577 491/1504/2577 +f 1053/2551/2578 377/571/2578 351/2544/2578 +f 1162/140/2579 377/571/2579 1053/2551/2579 +f 987/1092/2580 1005/1924/2580 995/2562/2580 +f 1044/909/2581 1077/1175/2581 1086/1769/2581 +f 823/142/2582 315/341/2582 377/571/2582 +f 838/1764/2583 846/1816/2583 942/1765/2583 +f 959/576/2584 978/450/2584 998/449/2584 +f 1133/723/2585 1191/1526/2585 1165/2547/2585 +f 1191/1526/2586 1084/1525/2586 1165/2547/2586 +f 1161/916/2587 1263/154/2587 1075/2550/2587 +f 120/494/2588 427/696/2588 1360/2165/2588 +f 987/1092/2589 995/2562/2589 994/2563/2589 +f 3149/2564/2590 987/1092/2590 994/2563/2590 +f 1017/1942/2591 1054/1768/2591 1043/1904/2591 +f 1054/1768/2592 1086/1769/2592 1085/1984/2592 +f 1113/139/2593 1399/138/2593 1085/1984/2593 +f 594/1044/2594 316/356/2594 1162/140/2594 +f 2043/563/2595 2057/219/2595 2016/88/2595 +f 353/1051/2596 251/48/2596 1237/543/2596 +f 1390/2565/2597 1373/15/2597 1402/14/2597 +f 2898/2211/2598 2897/2566/2598 2882/2212/2598 +f 35/1519/2599 1923/2461/2599 967/1517/2599 +f 1086/1769/2600 1113/139/2600 1085/1984/2600 +f 3348/2147/2601 571/2087/2601 3377/2567/2601 +f 1513/2568/2602 1500/2569/2602 1733/2570/2602 +f 1093/277/2603 1091/513/2603 1039/305/2603 +f 1084/1525/2604 1161/916/2604 1075/2550/2604 +f 995/2559/2605 1005/1777/2605 1017/1942/2605 +f 1380/151/2606 1442/2571/2606 396/152/2606 +f 1337/2572/2607 1383/1256/2607 1235/2573/2607 +f 1383/1256/2608 1247/2574/2608 1235/2573/2608 +f 1390/2565/2609 1417/1165/2609 1373/15/2609 +f 504/2098/2610 191/86/2610 1240/2575/2610 +f 1258/257/2611 1242/766/2611 1230/258/2611 +f 1219/2576/2612 1224/833/2612 1222/1084/2612 +f 1296/2577/2613 290/496/2613 137/495/2613 +f 1352/75/2614 31/2578/2614 1248/2579/2614 +f 1258/257/2615 1260/184/2615 1259/2580/2615 +f 1224/833/2616 1252/1096/2616 1100/834/2616 +f 1287/27/2617 9/16/2617 1227/28/2617 +f 3439/2120/2618 3236/1114/2618 3460/1116/2618 +f 1489/564/2619 2043/563/2619 2016/88/2619 +f 1382/2581/2620 1371/1959/2620 1434/34/2620 +f 1975/110/2621 1986/1176/2621 1974/108/2621 +f 1309/2582/2622 1871/2583/2622 1724/408/2622 +f 3453/2301/2623 3483/1780/2623 3492/1003/2623 +f 1094/1170/2624 1317/2056/2624 1113/139/2624 +f 574/1632/2625 919/1666/2625 121/1163/2625 +f 1410/2584/2626 1454/2585/2626 1399/2586/2626 +f 3442/2587/2627 1026/320/2627 708/2360/2627 +f 103/379/2628 93/804/2628 3218/548/2628 +f 1266/2588/2629 1283/1917/2629 728/2064/2629 +f 48/2589/2630 1493/2590/2630 1527/2591/2630 +f 1113/2592/2631 1317/2593/2631 1374/2594/2631 +f 1374/2594/2632 1410/2584/2632 1399/2586/2632 +f 1436/2595/2633 1454/2585/2633 1410/2584/2633 +f 1317/2593/2634 1342/2596/2634 1374/2594/2634 +f 1599/939/2635 1613/2597/2635 1638/2598/2635 +f 1318/2599/2636 1342/2596/2636 1317/2593/2636 +f 1374/2594/2637 1342/2596/2637 1410/2584/2637 +f 1410/2584/2638 1455/2600/2638 1436/2595/2638 +f 472/2601/2639 505/2602/2639 283/2603/2639 +f 11/2604/2640 472/2601/2640 283/2603/2640 +f 1318/2599/2641 1317/2593/2641 1114/2605/2641 +f 1342/2596/2642 1455/2600/2642 1410/2584/2642 +f 1436/2595/2643 1455/2600/2643 1249/180/2643 +f 1340/2606/2644 1341/2607/2644 329/606/2644 +f 1443/2608/2645 1257/2609/2645 1353/344/2645 +f 1385/2610/2646 1342/2596/2646 1318/2599/2646 +f 1342/2596/2647 1385/2610/2647 1455/2600/2647 +f 1343/2611/2648 1385/2610/2648 1318/2599/2648 +f 1455/2600/2649 1464/2612/2649 1249/180/2649 +f 1464/2612/2650 437/2613/2650 44/181/2650 +f 1249/180/2651 1464/2612/2651 44/181/2651 +f 1249/2614/2652 197/812/2652 724/1370/2652 +f 1439/273/2653 1402/14/2653 396/152/2653 +f 166/1295/2654 1681/2615/2654 1643/1294/2654 +f 1400/2616/2655 1385/2610/2655 1343/2611/2655 +f 1385/2610/2656 1400/2616/2656 1455/2600/2656 +f 1437/2617/2657 1464/2612/2657 1455/2600/2657 +f 220/2618/2658 763/1493/2658 437/2619/2658 +f 1257/2609/2659 1127/490/2659 1353/344/2659 +f 1108/112/2660 1377/175/2660 1855/113/2660 +f 1400/2616/2661 1437/2617/2661 1455/2600/2661 +f 220/2620/2662 1464/2612/2662 1437/2617/2662 +f 220/2621/2663 437/721/2663 1464/2622/2663 +f 414/50/2664 325/49/2664 42/202/2664 +f 1239/2312/2665 1296/2577/2665 1417/1165/2665 +f 1810/1228/2666 1809/2623/2666 1787/1229/2666 +f 1344/2624/2667 1400/2616/2667 1343/2611/2667 +f 1400/2616/2668 1422/2625/2668 1437/2617/2668 +f 1438/1036/2669 220/2618/2669 1437/2626/2669 +f 1422/2627/2670 1438/1036/2670 1437/2626/2670 +f 1438/1036/2671 1465/1035/2671 220/2618/2671 +f 345/94/2672 1458/291/2672 2332/990/2672 +f 1593/2628/2673 1673/2629/2673 1424/228/2673 +f 1424/228/2674 1331/77/2674 1332/76/2674 +f 1417/1165/2675 1296/2577/2675 137/495/2675 +f 1773/2169/2676 1765/2630/2676 1744/2477/2676 +f 1188/1575/2677 1879/1574/2677 2018/2631/2677 +f 1400/2616/2678 1344/2624/2678 1422/2625/2678 +f 416/2632/2679 439/1377/2679 423/1376/2679 +f 1254/78/2680 1408/560/2680 1358/1230/2680 +f 504/2098/2681 1240/2575/2681 2206/2633/2681 +f 1736/2634/2682 1773/2635/2682 1744/2473/2682 +f 1178/1662/2683 2100/1661/2683 1095/4/2683 +f 1343/2611/2684 2143/2636/2684 1344/2624/2684 +f 2197/2637/2685 1411/2638/2685 1344/2624/2685 +f 1344/2639/2686 1411/2451/2686 1422/2627/2686 +f 1422/2627/2687 1411/2451/2687 1438/1036/2687 +f 1391/2640/2688 2277/881/2688 1246/2137/2688 +f 1435/147/2689 365/145/2689 1172/1690/2689 +f 1261/29/2690 1227/28/2690 2180/2641/2690 +f 3475/664/2691 3440/2538/2691 3459/665/2691 +f 1178/1662/2692 1095/4/2692 1170/2162/2692 +f 2197/1925/2693 1176/491/2693 1411/2451/2693 +f 2397/2642/2694 569/2643/2694 190/454/2694 +f 788/1826/2695 1357/345/2695 835/1813/2695 +f 1395/2644/2696 1244/2645/2696 24/2452/2696 +f 2197/1925/2697 1155/492/2697 1176/491/2697 +f 1277/100/2698 1159/2291/2698 1141/101/2698 +f 1244/2645/2699 298/84/2699 24/2452/2699 +f 3238/2646/2700 3352/2347/2700 1269/2346/2700 +f 1244/2647/2701 205/2648/2701 298/2649/2701 +f 531/385/2702 542/413/2702 866/1472/2702 +f 1420/2650/2703 1276/2651/2703 1394/559/2703 +f 1383/1256/2704 1373/15/2704 273/1166/2704 +f 173/73/2705 1352/75/2705 1451/90/2705 +f 229/2463/2706 504/2098/2706 163/2652/2706 +f 783/141/2707 1359/2166/2707 823/142/2707 +f 1330/1224/2708 1351/2653/2708 492/1145/2708 +f 1304/2654/2709 1376/2655/2709 1356/74/2709 +f 1232/182/2710 1230/258/2710 1225/44/2710 +f 1222/1084/2711 2384/2656/2711 1219/2576/2711 +f 814/343/2712 409/342/2712 873/1507/2712 +f 1365/2657/2713 1404/561/2713 1408/560/2713 +f 3510/1467/2714 3455/839/2714 3491/2468/2714 +f 505/2602/2715 282/217/2715 445/216/2715 +f 1683/2658/2716 1647/2659/2716 1728/2660/2716 +f 2396/2661/2717 1220/2662/2717 43/2663/2717 +f 1275/157/2718 1292/51/2718 1242/766/2718 +f 43/2663/2719 1304/2654/2719 569/2643/2719 +f 182/260/2720 1041/420/2720 1147/261/2720 +f 1376/2655/2721 317/2664/2721 31/2578/2721 +f 1675/2665/2722 1473/2666/2722 2735/263/2722 +f 1734/2667/2723 1733/2668/2723 1500/2669/2723 +f 2693/2670/2724 2719/1905/2724 2692/2671/2724 +f 1308/164/2725 1204/163/2725 1324/2034/2725 +f 1220/2662/2726 1304/2654/2726 43/2663/2726 +f 43/2663/2727 569/2643/2727 34/2672/2727 +f 113/2673/2728 1394/559/2728 1268/2674/2728 +f 1119/1814/2729 835/1813/2729 1357/345/2729 +f 1100/834/2730 1267/191/2730 242/1967/2730 +f 2396/2661/2731 34/2672/2731 1130/2675/2731 +f 1293/2676/2732 1683/2658/2732 1882/2677/2732 +f 1253/1223/2733 1397/2678/2733 1351/2653/2733 +f 1305/159/2734 1382/2581/2734 1338/52/2734 +f 1376/2655/2735 1443/2679/2735 1425/2680/2735 +f 1443/2679/2736 1301/2681/2736 1425/2680/2736 +f 1233/2682/2737 1271/2683/2737 428/2684/2737 +f 1271/2683/2738 1443/2679/2738 428/2684/2738 +f 1287/27/2739 1403/39/2739 9/16/2739 +f 1141/101/2740 1325/199/2740 561/2361/2740 +f 106/545/2741 1236/2685/2741 1320/2686/2741 +f 1397/2678/2742 1466/1146/2742 1351/2653/2742 +f 2057/219/2743 2083/820/2743 2042/89/2743 +f 1226/2687/2744 1232/182/2744 1225/44/2744 +f 1408/560/2745 1387/2688/2745 1315/2689/2745 +f 1301/2690/2746 1282/2691/2746 1425/2692/2746 +f 317/2664/2747 1376/2655/2747 1425/2680/2747 +f 977/867/2748 2174/866/2748 965/1978/2748 +f 205/2648/2749 1340/2606/2749 328/605/2749 +f 1276/2651/2750 1397/2678/2750 1253/1223/2750 +f 1178/1662/2751 1170/2162/2751 1138/42/2751 +f 1340/2606/2752 1692/2693/2752 1341/2607/2752 +f 10/130/2753 77/262/2753 1423/149/2753 +f 3504/2545/2754 3457/1331/2754 3454/1301/2754 +f 1284/1909/2755 1402/14/2755 1439/273/2755 +f 1284/1909/2756 1390/2565/2756 1402/14/2756 +f 1443/2608/2757 1353/344/2757 1366/2694/2757 +f 1351/2653/2758 1466/1146/2758 492/1145/2758 +f 504/2098/2759 2206/2633/2759 163/2652/2759 +f 2087/822/2760 2061/2207/2760 57/1212/2760 +f 1239/2312/2761 1417/1165/2761 1390/2565/2761 +f 1284/1909/2762 1239/2312/2762 1390/2565/2762 +f 1225/44/2763 1224/2695/2763 1219/45/2763 +f 1241/33/2764 312/32/2764 1593/205/2764 +f 1296/2577/2765 2061/2696/2765 290/496/2765 +f 283/2603/2766 505/2602/2766 445/216/2766 +f 1233/2697/2767 1257/2609/2767 1271/2698/2767 +f 1325/199/2768 1309/2582/2768 1995/2188/2768 +f 1366/2694/2769 1353/344/2769 1238/346/2769 +f 1245/1257/2770 137/495/2770 472/2601/2770 +f 1247/2574/2771 11/2604/2771 1279/2699/2771 +f 1418/63/2772 1407/2700/2772 1393/2244/2772 +f 1127/490/2773 1133/723/2773 1353/344/2773 +f 2341/43/2774 1226/2687/2774 1225/44/2774 +f 1309/2582/2775 1724/408/2775 1995/2188/2775 +f 1401/2701/2776 1425/2680/2776 1312/2702/2776 +f 262/666/2777 506/544/2777 1237/543/2777 +f 1547/2703/2778 12/223/2778 13/35/2778 +f 1316/158/2779 1355/1960/2779 1305/159/2779 +f 555/1205/2780 363/1233/2780 134/203/2780 +f 1316/158/2781 1633/2127/2781 1355/1960/2781 +f 340/2704/2782 1407/2700/2782 1418/63/2782 +f 1313/697/2783 440/2705/2783 424/579/2783 +f 1356/74/2784 1376/2655/2784 31/2578/2784 +f 964/581/2785 3487/1584/2785 1208/332/2785 +f 1312/2702/2786 943/2706/2786 1328/907/2786 +f 1549/668/2787 1789/2707/2787 1540/26/2787 +f 1395/1149/2788 1453/1143/2788 1244/2647/2788 +f 1431/2708/2789 1365/2657/2789 1254/78/2789 +f 1268/2674/2790 1276/2651/2790 1253/1223/2790 +f 1246/2137/2791 1127/490/2791 1257/2609/2791 +f 2837/2709/2792 2073/2710/2792 2880/2711/2792 +f 3459/665/2793 3433/349/2793 3443/351/2793 +f 1335/607/2794 329/606/2794 1287/27/2794 +f 326/630/2795 171/414/2795 1300/443/2795 +f 1337/2572/2796 1373/15/2796 1383/1256/2796 +f 1331/77/2797 1431/2708/2797 1254/78/2797 +f 428/2684/2798 1443/2679/2798 1376/2655/2798 +f 1209/2097/2799 191/86/2799 504/2098/2799 +f 1365/2657/2800 1408/560/2800 1254/78/2800 +f 1304/2654/2801 1356/74/2801 569/2643/2801 +f 34/2672/2802 569/2643/2802 2397/2642/2802 +f 43/2663/2803 34/2672/2803 2396/2661/2803 +f 2173/2712/2804 1874/2713/2804 2780/2714/2804 +f 1337/2572/2805 1235/2573/2805 1339/2715/2805 +f 1404/561/2806 1339/2715/2806 1420/2650/2806 +f 457/1178/2807 1340/2606/2807 205/2648/2807 +f 1420/2650/2808 1339/2715/2808 1276/2651/2808 +f 1433/62/2809 2090/2173/2809 1463/637/2809 +f 107/2716/2810 298/84/2810 1209/2097/2810 +f 1387/2688/2811 1394/559/2811 113/2673/2811 +f 1338/52/2812 1382/2581/2812 1381/60/2812 +f 1440/2717/2813 1358/153/2813 1452/155/2813 +f 1210/1652/2814 1411/2451/2814 1176/491/2814 +f 12/223/2815 1560/2718/2815 1692/2693/2815 +f 191/86/2816 1335/2719/2816 1240/2575/2816 +f 1977/2720/2817 1976/109/2817 1958/232/2817 +f 1304/2654/2818 428/2684/2818 1376/2655/2818 +f 1352/75/2819 1356/74/2819 31/2578/2819 +f 754/2721/2820 784/1930/2820 272/2722/2820 +f 1303/1179/2821 767/2020/2821 768/1180/2821 +f 2170/2723/2822 30/2724/2822 1449/2725/2822 +f 31/2578/2823 317/2664/2823 1228/519/2823 +f 1401/2701/2824 502/2274/2824 1314/520/2824 +f 1356/74/2825 173/73/2825 569/2643/2825 +f 1879/1574/2826 2104/592/2826 1137/2195/2826 +f 2083/820/2827 2066/2523/2827 2117/306/2827 +f 1137/2195/2828 1378/594/2828 1981/58/2828 +f 873/1507/2829 409/342/2829 926/1508/2829 +f 1463/637/2830 251/48/2830 353/1051/2830 +f 1401/2701/2831 1312/2702/2831 1328/907/2831 +f 3489/753/2832 1116/2276/2832 3488/1712/2832 +f 317/2664/2833 1401/2701/2833 1228/519/2833 +f 317/2664/2834 1425/2680/2834 1401/2701/2834 +f 2677/2326/2835 2817/1426/2835 2482/2327/2835 +f 728/2064/2836 633/2052/2836 1266/2588/2836 +f 3/497/2837 1329/2726/2837 505/2602/2837 +f 1225/44/2838 1230/258/2838 1224/2695/2838 +f 1348/115/2839 1289/2320/2839 1270/2727/2839 +f 2948/2728/2840 2986/2729/2840 2965/2730/2840 +f 9/16/2841 1373/15/2841 1256/236/2841 +f 1713/2731/2842 2061/2207/2842 1571/2205/2842 +f 2344/2732/2843 1220/2662/2843 2396/2661/2843 +f 1250/1944/2844 2164/1943/2844 1266/2733/2844 +f 1340/2606/2845 457/1178/2845 12/223/2845 +f 2767/226/2846 3487/2734/2846 964/134/2846 +f 1279/2699/2847 11/2604/2847 283/2603/2847 +f 3092/2735/2848 3054/1787/2848 954/577/2848 +f 1366/2694/2849 1282/2736/2849 1301/2737/2849 +f 1425/2680/2850 1282/2738/2850 1312/2702/2850 +f 444/2739/2851 213/975/2851 267/989/2851 +f 315/341/2852 1444/1844/2852 409/342/2852 +f 503/2740/2853 926/1508/2853 409/342/2853 +f 1223/2741/2854 1233/2682/2854 2344/2732/2854 +f 506/544/2855 1236/2685/2855 106/545/2855 +f 1253/1223/2856 1351/2653/2856 1330/1224/2856 +f 1235/2573/2857 1247/2574/2857 1279/2699/2857 +f 1424/228/2858 29/2742/2858 1331/77/2858 +f 1549/668/2859 1802/1363/2859 1789/2707/2859 +f 1228/519/2860 1314/520/2860 1310/118/2860 +f 143/1028/2861 690/1254/2861 710/1391/2861 +f 1401/2701/2862 1328/907/2862 502/2274/2862 +f 634/1155/2863 620/1234/2863 1407/2743/2863 +f 3484/2744/2864 3446/22/2864 3474/422/2864 +f 1240/1127/2865 1335/607/2865 1261/29/2865 +f 1244/2647/2866 330/1144/2866 205/2648/2866 +f 783/141/2867 120/494/2867 1359/2166/2867 +f 2293/2745/2868 1391/2746/2868 1223/2741/2868 +f 1383/1256/2869 1245/1257/2869 1247/2574/2869 +f 1869/59/2870 1154/364/2870 1893/2093/2870 +f 1264/2747/2871 29/2742/2871 1424/228/2871 +f 29/2742/2872 1431/2708/2872 1331/77/2872 +f 1404/561/2873 1337/2572/2873 1339/2715/2873 +f 1340/2606/2874 12/223/2874 1692/2693/2874 +f 1337/2572/2875 1404/561/2875 1365/2657/2875 +f 1882/2677/2876 1633/1105/2876 1293/2676/2876 +f 1651/1104/2877 1937/1103/2877 2106/2748/2877 +f 763/1493/2878 220/2618/2878 1465/1035/2878 +f 1444/1844/2879 1468/2749/2879 409/342/2879 +f 409/342/2880 1468/2749/2880 503/2740/2880 +f 1284/1909/2881 1968/2750/2881 1239/2312/2881 +f 1968/2750/2882 1311/1368/2882 1239/2312/2882 +f 1256/236/2883 1337/2572/2883 1431/2708/2883 +f 338/2751/2884 926/1508/2884 503/2740/2884 +f 338/2751/2885 671/2038/2885 926/1508/2885 +f 1545/1250/2886 1294/1252/2886 1251/1364/2886 +f 1366/2694/2887 1238/346/2887 1297/1007/2887 +f 1282/2736/2888 1366/2694/2888 1297/1007/2888 +f 2174/866/2889 1250/2752/2889 965/1978/2889 +f 1391/2640/2890 1246/2137/2890 1257/2609/2890 +f 1337/2572/2891 1365/2657/2891 1431/2708/2891 +f 1258/257/2892 1275/157/2892 1242/766/2892 +f 1373/15/2893 1337/2572/2893 1256/236/2893 +f 1394/559/2894 1276/2651/2894 1268/2674/2894 +f 1239/2312/2895 57/1367/2895 1296/2577/2895 +f 1305/159/2896 1355/1960/2896 1382/2581/2896 +f 1358/1230/2897 1408/560/2897 1315/2689/2897 +f 1844/2371/2898 1617/541/2898 1605/540/2898 +f 2117/306/2899 1204/163/2899 737/114/2899 +f 472/2601/2900 137/495/2900 3/497/2900 +f 29/2742/2901 30/2724/2901 1431/2708/2901 +f 1305/159/2902 1292/51/2902 1275/157/2902 +f 410/1215/2903 144/676/2903 756/675/2903 +f 568/2753/2904 671/2038/2904 338/2751/2904 +f 1282/2738/2905 1297/2754/2905 1312/2702/2905 +f 1297/1007/2906 943/1006/2906 1312/2755/2906 +f 1789/2707/2907 1788/1227/2907 1773/2169/2907 +f 2397/2642/2908 190/454/2908 2398/2756/2908 +f 1418/63/2909 1462/638/2909 340/2704/2909 +f 1065/2227/2910 976/2257/2910 107/2716/2910 +f 30/2724/2911 1256/236/2911 1431/2708/2911 +f 1449/2725/2912 30/2724/2912 29/2742/2912 +f 1276/2651/2913 1279/2699/2913 1397/2678/2913 +f 1440/227/2914 1332/76/2914 1358/1230/2914 +f 2501/2757/2915 2524/2344/2915 3441/870/2915 +f 1326/2758/2916 1277/100/2916 47/99/2916 +f 568/2080/2917 930/1529/2917 671/1528/2917 +f 1360/2165/2918 1445/2759/2918 1359/2166/2918 +f 1444/1844/2919 1445/2759/2919 1468/2749/2919 +f 1468/2749/2920 96/2760/2920 503/2740/2920 +f 1443/2608/2921 1366/2694/2921 1301/2737/2921 +f 299/256/2922 1248/2579/2922 1228/519/2922 +f 1451/90/2923 1352/75/2923 1248/2579/2923 +f 127/883/2924 1607/836/2924 94/835/2924 +f 1259/2580/2925 1316/158/2925 1275/157/2925 +f 1733/1047/2926 1757/2328/2926 1513/2761/2926 +f 1258/257/2927 1259/2580/2927 1275/157/2927 +f 2810/253/2928 2775/255/2928 1969/1202/2928 +f 1359/2166/2929 1445/2759/2929 1444/1844/2929 +f 503/2740/2930 96/2760/2930 338/2751/2930 +f 569/2643/2931 173/73/2931 190/454/2931 +f 1230/1167/2932 1242/2133/2932 1252/1096/2932 +f 1348/115/2933 1270/2727/2933 2116/2267/2933 +f 283/2603/2934 445/216/2934 1466/1146/2934 +f 1112/2152/2935 1370/1246/2935 1395/2644/2935 +f 1828/2352/2936 1360/2165/2936 427/696/2936 +f 1445/2759/2937 96/2760/2937 1468/2749/2937 +f 1382/2581/2938 1434/34/2938 1419/83/2938 +f 1233/2682/2939 428/2684/2939 1304/2654/2939 +f 1292/51/2940 1305/159/2940 1338/52/2940 +f 502/2274/2941 213/521/2941 1314/520/2941 +f 1339/2715/2942 1235/2573/2942 1276/2651/2942 +f 330/1144/2943 1244/2647/2943 1453/1143/2943 +f 250/2762/2944 568/2763/2944 338/2764/2944 +f 250/2762/2945 665/2765/2945 568/2763/2945 +f 3469/782/2946 2007/2766/2946 3456/400/2946 +f 1233/2682/2947 1304/2654/2947 1220/2662/2947 +f 1245/1257/2948 273/1166/2948 137/495/2948 +f 1271/2683/2949 1257/2767/2949 1443/2679/2949 +f 1295/2503/2950 1647/2768/2950 1260/184/2950 +f 330/1144/2951 457/1178/2951 205/2648/2951 +f 1360/2165/2952 1446/2769/2952 1445/2759/2952 +f 1445/2759/2953 1446/2769/2953 96/2760/2953 +f 1446/2769/2954 1469/2770/2954 96/2760/2954 +f 96/2771/2955 185/2772/2955 338/2764/2955 +f 1854/542/2956 1596/2773/2956 1605/540/2956 +f 1316/158/2957 1293/2774/2957 1633/2127/2957 +f 1268/2674/2958 1253/1223/2958 617/1225/2958 +f 1279/2699/2959 283/2603/2959 1397/2678/2959 +f 1276/2651/2960 1235/2573/2960 1279/2699/2960 +f 3181/2775/2961 614/2776/2961 613/2777/2961 +f 1322/2351/2962 1360/2165/2962 1828/2352/2962 +f 1360/2165/2963 1322/2351/2963 1446/2769/2963 +f 250/2762/2964 338/2764/2964 185/2772/2964 +f 298/84/2965 191/86/2965 1209/2097/2965 +f 617/1698/2966 121/1163/2966 919/1666/2966 +f 3479/312/2967 1697/311/2967 3486/1075/2967 +f 1469/2778/2968 185/2772/2968 96/2771/2968 +f 1432/2779/2969 665/2765/2969 250/2762/2969 +f 328/605/2970 1335/607/2970 191/2780/2970 +f 1233/2682/2971 1220/2662/2971 2344/2732/2971 +f 1248/2579/2972 31/2578/2972 1228/519/2972 +f 121/1163/2973 617/1698/2973 1330/487/2973 +f 1226/2687/2974 2341/43/2974 1099/2781/2974 +f 190/454/2975 2361/608/2975 2398/2756/2975 +f 1665/2782/2976 1668/1262/2976 1544/1216/2976 +f 1315/2689/2977 1387/2688/2977 1435/2783/2977 +f 392/2784/2978 1302/1339/2978 1667/2785/2978 +f 1466/1146/2979 445/216/2979 1685/218/2979 +f 1065/2227/2980 107/2716/2980 1209/2097/2980 +f 1223/2741/2981 1391/2746/2981 1233/2682/2981 +f 1353/344/2982 1298/1895/2982 1357/345/2982 +f 993/2786/2983 586/1676/2983 1993/1966/2983 +f 1387/2688/2984 1408/560/2984 1394/559/2984 +f 251/48/2985 262/666/2985 1237/543/2985 +f 25/2787/2986 754/2788/2986 1462/638/2986 +f 1245/1257/2987 472/2601/2987 11/2604/2987 +f 1435/2783/2988 1387/2688/2988 1262/2789/2988 +f 1387/2688/2989 113/2673/2989 1262/2789/2989 +f 1283/1917/2990 768/1180/2990 728/2064/2990 +f 2501/2757/2991 3441/870/2991 3434/869/2991 +f 1381/60/2992 1382/2581/2992 1419/83/2992 +f 1391/2640/2993 2293/2790/2993 2277/881/2993 +f 1717/2791/2994 1661/1071/2994 219/2792/2994 +f 748/1461/2995 376/330/2995 407/315/2995 +f 1268/2674/2996 617/1225/2996 113/2673/2996 +f 1112/2152/2997 1217/193/2997 1370/1246/2997 +f 1379/588/2998 982/259/2998 1131/2232/2998 +f 1322/2793/2999 1426/2794/2999 1446/2795/2999 +f 1446/2795/3000 1426/2794/3000 1469/2778/3000 +f 185/2772/3001 395/2796/3001 250/2762/3001 +f 395/2796/3002 1432/2779/3002 250/2762/3002 +f 1392/2797/3003 604/2798/3003 1432/2779/3003 +f 1449/2725/3004 29/2742/3004 1264/2747/3004 +f 3012/2799/3005 3050/2800/3005 3036/2801/3005 +f 1354/625/3006 1412/2802/3006 1313/697/3006 +f 171/414/3007 490/416/3007 1300/443/3007 +f 2029/2803/3008 2030/87/3008 2040/1017/3008 +f 3492/1003/3009 3431/2804/3009 3426/1004/3009 +f 1426/2794/3010 1447/2805/3010 1469/2778/3010 +f 1210/1652/3011 1183/1034/3011 1411/2451/3011 +f 937/1859/3012 936/1840/3012 55/2806/3012 +f 1384/2807/3013 1354/625/3013 477/624/3013 +f 1354/625/3014 1384/2807/3014 1412/2802/3014 +f 472/2601/3015 3/497/3015 505/2602/3015 +f 3472/1445/3016 3449/1266/3016 3458/1446/3016 +f 2004/1177/3017 2030/87/3017 2029/2803/3017 +f 1322/2793/3018 2076/2808/3018 1426/2794/3018 +f 1432/2779/3019 1396/2809/3019 1392/2797/3019 +f 1392/2797/3020 6/2810/3020 1389/2811/3020 +f 1313/697/3021 1412/2802/3021 439/1377/3021 +f 3336/314/3022 443/295/3022 1669/862/3022 +f 1397/2678/3023 283/2603/3023 1466/1146/3023 +f 467/2231/3024 1777/2307/3024 1379/588/3024 +f 1469/2778/3025 1447/2805/3025 185/2772/3025 +f 395/2796/3026 1396/2809/3026 1432/2779/3026 +f 1396/2809/3027 6/2810/3027 1392/2797/3027 +f 604/2798/3028 665/2765/3028 1432/2779/3028 +f 416/2632/3029 440/2705/3029 439/1377/3029 +f 2754/2812/3030 3453/2301/3030 3482/1332/3030 +f 1784/2315/3031 1536/2813/3031 1555/2316/3031 +f 530/2814/3032 1396/2809/3032 395/2796/3032 +f 1451/90/3033 1248/2579/3033 299/256/3033 +f 1394/559/3034 1404/561/3034 1420/2650/3034 +f 1384/2807/3035 774/2815/3035 1412/2802/3035 +f 3473/872/3036 3461/270/3036 3472/269/3036 +f 1341/2607/3037 1380/151/3037 329/606/3037 +f 328/605/3038 1340/2606/3038 329/606/3038 +f 1418/63/3039 1433/62/3039 1462/638/3039 +f 2076/2808/3040 1361/2816/3040 1426/2794/3040 +f 1426/2794/3041 1361/2816/3041 1447/2805/3041 +f 1447/2805/3042 1470/2817/3042 185/2772/3042 +f 529/2818/3043 395/2796/3043 185/2772/3043 +f 529/2818/3044 530/2814/3044 395/2796/3044 +f 476/12/3045 190/454/3045 1451/90/3045 +f 272/1094/3046 784/2819/3046 28/1154/3046 +f 1412/2802/3047 1251/1364/3047 439/1377/3047 +f 10/130/3048 1423/149/3048 1346/148/3048 +f 1260/184/3049 1683/2820/3049 1259/2580/3049 +f 1809/2304/3050 1810/2821/3050 1831/937/3050 +f 1854/542/3051 1853/2470/3051 1843/2469/3051 +f 205/2648/3052 328/605/3052 298/2649/3052 +f 25/1033/3053 560/1032/3053 753/1766/3053 +f 2103/116/3054 1348/115/3054 2116/2267/3054 +f 185/2772/3055 1470/2817/3055 529/2818/3055 +f 1255/941/3056 6/2810/3056 1396/2809/3056 +f 1255/941/3057 410/2822/3057 6/2810/3057 +f 1233/2682/3058 1391/2746/3058 1257/2767/3058 +f 774/2815/3059 318/1973/3059 1412/2802/3059 +f 2081/2317/3060 2082/307/3060 2103/116/3060 +f 1265/124/3061 1396/2809/3061 530/2814/3061 +f 1462/638/3062 1463/637/3062 25/2787/3062 +f 318/1973/3063 1251/1364/3063 1412/2802/3063 +f 1393/2823/3064 1369/2824/3064 1948/2825/3064 +f 24/2452/3065 298/84/3065 107/2716/3065 +f 1504/2826/3066 1758/2827/3066 1478/2828/3066 +f 1979/942/3067 2071/2266/3067 1988/2389/3067 +f 2118/2829/3068 1979/942/3068 1988/2389/3068 +f 1361/2816/3069 2390/2830/3069 1362/1261/3069 +f 529/2818/3070 1265/124/3070 530/2814/3070 +f 1398/2831/3071 1396/2809/3071 1265/124/3071 +f 1398/2831/3072 1255/941/3072 1396/2809/3072 +f 423/1376/3073 1302/1339/3073 415/1338/3073 +f 24/2452/3074 107/2716/3074 976/2257/3074 +f 1381/60/3075 1453/1143/3075 1395/1149/3075 +f 1979/942/3076 2118/2829/3076 2122/943/3076 +f 982/259/3077 1062/2335/3077 1327/2832/3077 +f 3141/2833/3078 3173/310/3078 3189/1637/3078 +f 1362/1261/3079 1427/1260/3079 1361/2816/3079 +f 1427/1260/3080 1447/2805/3080 1361/2816/3080 +f 1427/1260/3081 1457/1126/3081 1447/2805/3081 +f 1470/2817/3082 459/122/3082 529/2818/3082 +f 459/122/3083 1265/124/3083 529/2818/3083 +f 1255/941/3084 144/2834/3084 410/2822/3084 +f 1463/637/3085 1461/46/3085 251/48/3085 +f 1489/564/3086 3364/2835/3086 3182/562/3086 +f 1040/2153/3087 1395/2644/3087 24/2452/3087 +f 1266/2588/3088 633/2052/3088 1250/2752/3088 +f 1251/1364/3089 1294/1252/3089 423/1376/3089 +f 423/1376/3090 1294/1252/3090 1302/1339/3090 +f 1463/637/3091 353/1051/3091 25/2787/3091 +f 1709/2836/3092 2890/1848/3092 2826/1/3092 +f 952/2837/3093 958/2528/3093 962/1964/3093 +f 1457/1126/3094 1470/2817/3094 1447/2805/3094 +f 1328/907/3095 313/895/3095 339/894/3095 +f 870/2400/3096 3490/1009/3096 3454/1301/3096 +f 1355/1960/3097 1371/1959/3097 1382/2581/3097 +f 1298/1895/3098 1353/344/3098 1133/723/3098 +f 352/36/3099 457/1178/3099 330/1144/3099 +f 1228/519/3100 1401/2701/3100 1314/520/3100 +f 44/2838/3101 437/721/3101 203/720/3101 +f 1294/1252/3102 1667/2785/3102 1302/1339/3102 +f 1327/2832/3103 1062/2335/3103 1935/886/3103 +f 2120/186/3104 1206/944/3104 2088/187/3104 +f 2876/2839/3105 2289/1443/3105 2862/2392/3105 +f 1457/1126/3106 459/122/3106 1470/2817/3106 +f 1274/1164/3107 1375/410/3107 1398/2831/3107 +f 1265/124/3108 1274/1164/3108 1398/2831/3108 +f 1255/941/3109 237/940/3109 144/2834/3109 +f 3489/423/3110 3488/2840/3110 3474/422/3110 +f 1259/2580/3111 1683/2820/3111 1316/158/3111 +f 1528/2841/3112 1708/2842/3112 1640/381/3112 +f 1247/2574/3113 1245/1257/3113 11/2604/3113 +f 1389/603/3114 604/1174/3114 1392/2843/3114 +f 1316/158/3115 1683/2820/3115 1293/2774/3115 +f 2894/680/3116 215/2844/3116 2615/287/3116 +f 3413/2845/3117 1958/232/3117 1974/108/3117 +f 2890/1848/3118 1710/1633/3118 2826/1/3118 +f 2730/1267/3119 2810/253/3119 1969/1202/3119 +f 1398/2831/3120 1375/410/3120 1255/941/3120 +f 1197/1074/3121 3484/1870/3121 3486/1075/3121 +f 1975/110/3122 2015/117/3122 1986/1176/3122 +f 1232/182/3123 1260/184/3123 1258/257/3123 +f 1593/205/3124 1424/2846/3124 1440/290/3124 +f 106/929/3125 327/928/3125 19/958/3125 +f 2040/1017/3126 2041/1016/3126 2081/2317/3126 +f 2041/1016/3127 2082/307/3127 2081/2317/3127 +f 1471/430/3128 1457/1126/3128 1427/1260/3128 +f 1614/1192/3129 1615/1245/3129 1641/2847/3129 +f 1582/2848/3130 1591/2849/3130 1581/2850/3130 +f 1716/2851/3131 1539/70/3131 1701/72/3131 +f 1642/2852/3132 1628/2853/3132 1681/2854/3132 +f 1659/2855/3133 1698/1276/3133 392/1288/3133 +f 1592/2856/3134 1601/1162/3134 1600/2857/3134 +f 1505/2858/3135 1530/2859/3135 1504/2826/3135 +f 1559/2860/3136 1581/2850/3136 1533/2861/3136 +f 122/1100/3137 114/1040/3137 1600/2862/3137 +f 1708/2842/3138 397/411/3138 1640/381/3138 +f 1380/151/3139 1341/2607/3139 1606/2863/3139 +f 1492/2864/3140 1493/234/3140 1516/2865/3140 +f 1633/1105/3141 1882/2677/3141 1937/1103/3141 +f 487/1278/3142 1650/1311/3142 511/1302/3142 +f 1551/968/3143 1580/1010/3143 84/969/3143 +f 2743/2866/3144 2787/2867/3144 2806/2868/3144 +f 3454/1301/3145 3457/1331/3145 3424/1002/3145 +f 1546/2869/3146 1927/2870/3146 1711/2216/3146 +f 1705/1247/3147 1574/2871/3147 1671/2872/3147 +f 1615/1245/3148 1642/2852/3148 1641/2847/3148 +f 444/18/3149 267/2873/3149 1345/23/3149 +f 1679/2874/3150 1659/2875/3150 1667/2785/3150 +f 149/2876/3151 177/1101/3151 148/1041/3151 +f 1664/1150/3152 1665/2782/3152 452/1182/3152 +f 3435/1922/3153 3442/2587/3153 3447/982/3153 +f 1479/2179/3154 1504/2826/3154 1486/2877/3154 +f 1641/2847/3155 1642/2852/3155 1680/1123/3155 +f 2708/1961/3156 215/2844/3156 2673/2319/3156 +f 3440/2538/3157 3460/1116/3157 3433/349/3157 +f 296/195/3158 183/194/3158 443/295/3158 +f 2669/857/3159 3453/856/3159 2754/705/3159 +f 2767/2878/3160 3429/1723/3160 3487/1667/3160 +f 2671/2879/3161 2184/2880/3161 2697/2542/3161 +f 1371/2881/3162 1651/1104/3162 2106/2748/3162 +f 320/1249/3163 1698/1276/3163 1705/1247/3163 +f 2692/2671/3164 2719/1905/3164 2691/1907/3164 +f 2659/2882/3165 2694/2883/3165 2658/2884/3165 +f 1526/2885/3166 1543/1120/3166 1553/1119/3166 +f 1578/2886/3167 1599/939/3167 1577/938/3167 +f 585/1413/3168 45/945/3168 32/917/3168 +f 1599/939/3169 1607/2887/3169 1613/2597/3169 +f 1336/2888/3170 1369/2243/3170 1368/2889/3170 +f 1712/2890/3171 1684/2891/3171 1603/2892/3171 +f 1531/629/3172 1912/628/3172 1864/2497/3172 +f 1549/668/3173 1525/667/3173 1802/1363/3173 +f 3128/2893/3174 3152/2894/3174 3162/2895/3174 +f 1627/120/3175 1639/2896/3175 1656/2897/3175 +f 2489/2898/3176 1769/252/3176 2422/2070/3176 +f 1696/2899/3177 1712/2890/3177 1566/2900/3177 +f 1827/1513/3178 2294/2202/3178 2536/2901/3178 +f 1610/2902/3179 1586/2903/3179 1664/2904/3179 +f 563/614/3180 528/643/3180 914/744/3180 +f 3018/2905/3181 2992/1879/3181 2439/2906/3181 +f 149/2907/3182 1641/2847/3182 177/1122/3182 +f 1592/2856/3183 97/1160/3183 1601/1162/3183 +f 1906/47/3184 1514/2160/3184 262/666/3184 +f 13/1307/3185 1565/1306/3185 14/1912/3185 +f 2607/363/3186 2652/724/3186 2621/1608/3186 +f 32/917/3187 593/860/3187 585/1413/3187 +f 3474/2908/3188 3488/1712/3188 3486/2909/3188 +f 341/498/3189 399/431/3189 1718/2910/3189 +f 2615/287/3190 2769/669/3190 2416/2911/3190 +f 1714/1913/3191 1547/2912/3191 13/1307/3191 +f 493/327/3192 481/329/3192 1564/365/3192 +f 2787/2867/3193 2837/2709/3193 2806/2868/3193 +f 1495/2913/3194 1494/729/3194 1693/731/3194 +f 148/1041/3195 122/1100/3195 1609/2914/3195 +f 108/1191/3196 1615/1245/3196 1614/1192/3196 +f 1600/2862/3197 1601/2915/3197 1609/2914/3197 +f 1645/2916/3198 3396/2917/3198 1584/2918/3198 +f 1207/417/3199 3487/1667/3199 3467/1591/3199 +f 1903/2919/3200 515/2920/3200 2781/288/3200 +f 1506/2921/3201 1542/2922/3201 1533/2923/3201 +f 1614/1192/3202 1641/2847/3202 149/2907/3202 +f 1547/2912/3203 1714/1913/3203 1961/2924/3203 +f 1588/2925/3204 1547/2912/3204 1961/2924/3204 +f 1576/1248/3205 1705/1247/3205 1684/2926/3205 +f 1542/2922/3206 1559/2927/3206 1533/2923/3206 +f 1574/2928/3207 1721/2929/3207 1671/2930/3207 +f 1566/2900/3208 1712/2890/3208 1603/2892/3208 +f 1896/2159/3209 1604/2931/3209 1514/2160/3209 +f 1559/2860/3210 1582/2848/3210 1581/2850/3210 +f 1480/2932/3211 1491/2933/3211 1506/2934/3211 +f 372/2935/3212 307/1072/3212 1594/1077/3212 +f 2962/294/3213 2980/2936/3213 2961/2937/3213 +f 1560/2938/3214 1588/2925/3214 1895/243/3214 +f 12/223/3215 1547/2703/3215 1588/2939/3215 +f 1560/2718/3216 12/223/3216 1588/2939/3216 +f 1681/2854/3217 1715/2940/3217 1691/2941/3217 +f 585/1413/3218 1490/1412/3218 37/959/3218 +f 1552/2942/3219 1559/2927/3219 1542/2922/3219 +f 1526/2943/3220 1542/2944/3220 1515/2945/3220 +f 2702/1076/3221 2543/1935/3221 1197/1074/3221 +f 1585/2946/3222 1721/2929/3222 391/2947/3222 +f 341/498/3223 1718/2910/3223 1623/2948/3223 +f 3386/567/3224 341/498/3224 1623/2948/3224 +f 1570/242/3225 1560/2938/3225 1895/243/3225 +f 3502/616/3226 3455/2042/3226 1042/427/3226 +f 3431/2804/3227 1004/2249/3227 3426/1004/3227 +f 1487/2949/3228 22/712/3228 1505/2950/3228 +f 1505/2950/3229 22/712/3229 1530/1793/3229 +f 1581/2850/3230 1551/2951/3230 1533/2861/3230 +f 1603/2892/3231 1585/2946/3231 1594/1077/3231 +f 36/25/3232 58/211/3232 1549/668/3232 +f 1671/2930/3233 1721/2929/3233 1585/2946/3233 +f 1656/2952/3234 3378/2953/3234 2819/2954/3234 +f 3443/1371/3235 3452/2409/3235 3436/1372/3235 +f 1527/2591/3236 49/2955/3236 48/2589/3236 +f 1638/2598/3237 1613/2597/3237 1627/120/3237 +f 1627/2956/3238 1656/2952/3238 2819/2954/3238 +f 209/1124/3239 1672/2957/3239 219/2792/3239 +f 177/1122/3240 1641/2847/3240 1680/1123/3240 +f 1526/2885/3241 1552/2958/3241 1542/2959/3241 +f 1846/1200/3242 1626/2182/3242 1625/2960/3242 +f 3504/2545/3243 3454/1301/3243 3490/1009/3243 +f 3016/2961/3244 3028/2962/3244 3001/2963/3244 +f 1526/2943/3245 1515/2945/3245 1516/2964/3245 +f 1236/2685/3246 506/544/3246 1604/2931/3246 +f 2780/2714/3247 2708/1961/3247 1689/1864/3247 +f 140/1346/3248 179/1345/3248 1622/1293/3248 +f 1586/2903/3249 1665/2965/3249 1664/2904/3249 +f 614/2776/3250 3149/2564/3250 994/2563/3250 +f 2161/318/3251 1026/320/3251 3442/2587/3251 +f 1626/2966/3252 1646/2967/3252 1636/2968/3252 +f 1619/2365/3253 1846/1200/3253 1625/2960/3253 +f 1625/2969/3254 1626/2966/3254 1636/2968/3254 +f 2927/850/3255 2926/2970/3255 2916/851/3255 +f 2991/1880/3256 3001/2963/3256 2990/2560/3256 +f 1865/2971/3257 2737/2972/3257 1875/2973/3257 +f 1566/2900/3258 1720/1073/3258 1661/1071/3258 +f 3492/1003/3259 3432/2531/3259 3431/2804/3259 +f 1506/2934/3260 1533/2974/3260 1532/2975/3260 +f 1638/2598/3261 1627/120/3261 174/119/3261 +f 2561/2976/3262 2594/361/3262 2593/2977/3262 +f 1696/2899/3263 1716/2978/3263 1701/2979/3263 +f 1329/2726/3264 290/496/3264 1713/2980/3264 +f 1615/1245/3265 1616/1244/3265 1628/2853/3265 +f 1721/2981/3266 1574/2982/3266 1679/2874/3266 +f 115/1327/3267 140/1346/3267 1622/1293/3267 +f 1638/2598/3268 174/119/3268 1637/2983/3268 +f 683/1450/3269 1004/2984/3269 686/1583/3269 +f 1606/2985/3270 1570/242/3270 1797/2986/3270 +f 1606/2985/3271 1692/2987/3271 1570/242/3271 +f 1694/2428/3272 1669/862/3272 1704/2988/3272 +f 3174/2989/3273 3190/308/3273 3173/310/3273 +f 1720/1073/3274 1603/2892/3274 1594/1077/3274 +f 3402/1414/3275 585/1413/3275 584/1739/3275 +f 127/883/3276 138/903/3276 1607/836/3276 +f 3152/2894/3277 3188/2990/3277 3162/2895/3277 +f 1679/2874/3278 1665/2965/3278 1586/2903/3278 +f 2708/1961/3279 1598/2991/3279 215/2844/3279 +f 265/71/3280 1684/2926/3280 1712/2992/3280 +f 1679/2874/3281 1586/2903/3281 1721/2981/3281 +f 3234/2993/3282 3204/1982/3282 975/1981/3282 +f 3467/1591/3283 3505/353/3283 1015/751/3283 +f 402/1058/3284 391/1042/3284 1610/1109/3284 +f 174/757/3285 3392/2994/3285 1637/2995/3285 +f 1478/2828/3286 1758/2827/3286 1503/2996/3286 +f 1656/2952/3287 1639/920/3287 1687/887/3287 +f 1614/1192/3288 1609/2997/3288 1601/2998/3288 +f 1487/2949/3289 1488/713/3289 22/712/3289 +f 1583/1121/3290 1582/2848/3290 1552/2958/3290 +f 404/1287/3291 1302/2999/3291 392/1288/3291 +f 399/431/3292 397/411/3292 1718/2910/3292 +f 2457/3000/3293 2992/3001/3293 2468/3002/3293 +f 1682/215/3294 1685/214/3294 1563/3003/3294 +f 3264/1115/3295 3477/788/3295 3460/1116/3295 +f 1993/1966/3296 579/1860/3296 1495/2913/3296 +f 119/169/3297 446/196/3297 1550/198/3297 +f 1704/2988/3298 1669/862/3298 183/194/3298 +f 45/945/3299 585/1413/3299 37/959/3299 +f 1566/2900/3300 1603/2892/3300 1720/1073/3300 +f 166/1295/3301 194/1296/3301 1681/2615/3301 +f 466/1351/3302 1545/1250/3302 1251/1364/3302 +f 1528/2841/3303 1640/381/3303 1564/365/3303 +f 1585/2946/3304 391/2947/3304 1594/1077/3304 +f 119/169/3305 1550/198/3305 1644/170/3305 +f 1687/887/3306 3272/3004/3306 1656/2952/3306 +f 1645/2916/3307 1636/2968/3307 1646/2967/3307 +f 1533/2974/3308 46/3005/3308 1532/2975/3308 +f 1591/2849/3309 1580/3006/3309 1581/2850/3309 +f 1718/2910/3310 1655/3007/3310 1623/2948/3310 +f 1478/2828/3311 1485/3008/3311 3367/3009/3311 +f 3429/1723/3312 3498/777/3312 3505/353/3312 +f 1614/1192/3313 149/2907/3313 1609/2997/3313 +f 1695/3010/3314 1587/3011/3314 1658/3012/3314 +f 2624/3013/3315 1697/311/3315 566/3014/3315 +f 639/1933/3316 3195/1932/3316 613/2777/3316 +f 1667/2785/3317 1665/2965/3317 1679/2874/3317 +f 1630/3015/3318 1644/170/3318 1550/198/3318 +f 1644/170/3319 1630/3015/3319 1658/3012/3319 +f 3208/3016/3320 1646/2967/3320 3392/2994/3320 +f 1680/1123/3321 1642/2852/3321 1691/2941/3321 +f 1591/2849/3322 1600/2857/3322 1580/3006/3322 +f 209/1124/3323 1691/2941/3323 1672/2957/3323 +f 1802/1363/3324 1810/1228/3324 1788/1227/3324 +f 194/1296/3325 1715/3017/3325 1681/2615/3325 +f 1680/1123/3326 1691/2941/3326 209/1124/3326 +f 1495/2913/3327 1517/1138/3327 1494/729/3327 +f 1539/70/3328 1716/2851/3328 1715/3017/3328 +f 2780/2714/3329 1598/2991/3329 2708/1961/3329 +f 2422/2070/3330 2517/2072/3330 2489/2898/3330 +f 1704/2988/3331 1587/3011/3331 1688/3018/3331 +f 2818/3019/3332 2591/3020/3332 2783/3021/3332 +f 1624/3022/3333 1625/2969/3333 1584/2918/3333 +f 1619/3023/3334 1625/2969/3334 1624/3022/3334 +f 1618/3024/3335 1619/3023/3335 1624/3022/3335 +f 2600/268/3336 2434/267/3336 2543/1935/3336 +f 3468/1470/3337 991/3025/3337 3438/1471/3337 +f 3155/3026/3338 3165/3027/3338 3154/3028/3338 +f 1576/1248/3339 1684/2926/3339 265/71/3339 +f 572/1962/3340 580/1313/3340 3348/2147/3340 +f 1520/3029/3341 2456/3030/3341 3124/3031/3341 +f 1922/3032/3342 3355/2288/3342 1943/3033/3342 +f 2808/3034/3343 1898/3035/3343 2548/2117/3343 +f 1533/2974/3344 1551/3036/3344 46/3005/3344 +f 2817/1426/3345 2060/3/3345 1028/3037/3345 +f 1654/3038/3346 1658/3012/3346 1590/3039/3346 +f 1600/2862/3347 1609/2914/3347 122/1100/3347 +f 1563/3040/3348 1685/218/3348 282/217/3348 +f 1623/2948/3349 1655/3007/3349 1595/3041/3349 +f 1688/3018/3350 1695/3010/3350 3387/3042/3350 +f 118/168/3351 1658/3012/3351 1587/3011/3351 +f 1599/939/3352 1578/2886/3352 1607/2887/3352 +f 1519/3043/3353 1682/215/3353 1678/3044/3353 +f 1718/2910/3354 1708/2842/3354 1655/3007/3354 +f 1497/3045/3355 1520/3029/3355 3124/3031/3355 +f 1526/2885/3356 1553/1119/3356 1552/2958/3356 +f 1889/2448/3357 2695/3046/3357 2660/3047/3357 +f 1323/3048/3358 3471/398/3358 3456/400/3358 +f 2960/3049/3359 3033/67/3359 2952/69/3359 +f 183/194/3360 118/168/3360 1587/3011/3360 +f 724/1370/3361 1454/2132/3361 1249/2614/3361 +f 2561/2976/3362 2560/3050/3362 2537/3051/3362 +f 2852/2118/3363 1272/3052/3363 2857/384/3363 +f 3435/3053/3364 2744/2119/3364 2857/384/3364 +f 575/3054/3365 2500/3055/3365 3417/3056/3365 +f 2749/3057/3366 2731/1400/3366 2761/238/3366 +f 1683/2820/3367 1260/184/3367 1647/2768/3367 +f 1684/2891/3368 1671/2930/3368 1603/2892/3368 +f 2538/3058/3369 2561/2976/3369 2537/3051/3369 +f 179/1345/3370 166/1295/3370 1622/1293/3370 +f 3150/3059/3371 1497/3045/3371 3124/3031/3371 +f 1510/3060/3372 1520/3029/3372 1497/3045/3372 +f 1511/3061/3373 1510/3060/3373 1497/3045/3373 +f 1510/3060/3374 1521/3062/3374 1520/3029/3374 +f 1521/3062/3375 1753/3063/3375 1520/3029/3375 +f 1671/2930/3376 1585/2946/3376 1603/2892/3376 +f 1582/2848/3377 1583/1121/3377 97/1160/3377 +f 481/329/3378 507/328/3378 1670/3064/3378 +f 1477/3065/3379 1484/2419/3379 1476/3066/3379 +f 1480/3067/3380 3381/3068/3380 3372/3069/3380 +f 1491/2933/3381 1516/2964/3381 1515/2945/3381 +f 2852/2118/3382 2857/384/3382 2744/2119/3382 +f 1494/729/3383 1517/1138/3383 1527/1139/3383 +f 3276/3070/3384 1562/3071/3384 1595/3072/3384 +f 1630/3015/3385 1550/198/3385 1519/3043/3385 +f 2560/1514/3386 1827/1513/3386 2536/2901/3386 +f 2879/679/3387 1928/678/3387 1832/3073/3387 +f 1691/2941/3388 1696/2899/3388 1672/2957/3388 +f 1504/2826/3389 1478/2828/3389 1486/2877/3389 +f 1643/3074/3390 1681/2854/3390 1628/2853/3390 +f 1497/3045/3391 3150/3059/3391 1511/3061/3391 +f 1511/3061/3392 1521/3062/3392 1510/3060/3392 +f 1506/2934/3393 1532/2975/3393 1490/3075/3393 +f 1717/2791/3394 1566/2900/3394 1661/1071/3394 +f 2814/3076/3395 2854/3077/3395 2796/3078/3395 +f 2561/2976/3396 2582/3079/3396 2594/361/3396 +f 1695/3010/3397 1658/3012/3397 1654/3038/3397 +f 1516/2865/3398 1543/233/3398 1526/3080/3398 +f 1057/2482/3399 2551/2398/3399 1058/2382/3399 +f 1636/2968/3400 1645/2916/3400 1584/2918/3400 +f 1636/2968/3401 1584/2918/3401 1625/2969/3401 +f 1593/2628/3402 1236/2685/3402 1561/2252/3402 +f 210/1284/3403 1715/3017/3403 194/1296/3403 +f 1658/3081/3404 1630/3082/3404 1590/3083/3404 +f 2594/361/3405 2582/3079/3405 2634/362/3405 +f 1528/2841/3406 1564/365/3406 481/329/3406 +f 219/2792/3407 1672/2957/3407 1717/2791/3407 +f 138/903/3408 1639/920/3408 1607/836/3408 +f 1512/3084/3409 1511/3061/3409 1481/3085/3409 +f 1529/3086/3410 1521/3062/3410 1511/3061/3410 +f 1512/3084/3411 1529/3086/3411 1511/3061/3411 +f 1743/3087/3412 2456/3030/3412 1520/3029/3412 +f 2549/3088/3413 2560/3050/3413 2574/3089/3413 +f 2887/250/3414 1911/3090/3414 2870/3091/3414 +f 1550/198/3415 394/197/3415 1682/215/3415 +f 3173/310/3416 3213/2206/3416 3212/2167/3416 +f 1529/3092/3417 1536/2813/3417 1535/3093/3417 +f 1705/3094/3418 1671/2930/3418 1684/2891/3418 +f 1405/3095/3419 2107/3096/3419 1350/3097/3419 +f 1345/23/3420 267/2873/3420 552/38/3420 +f 1484/2419/3421 1483/3098/3421 1476/3066/3421 +f 1550/198/3422 1682/215/3422 1519/3043/3422 +f 1705/1247/3423 1698/1276/3423 1574/2871/3423 +f 1708/2842/3424 1528/2841/3424 1655/3007/3424 +f 1524/3099/3425 1528/2841/3425 481/329/3425 +f 3427/92/3426 3473/872/3426 3448/1277/3426 +f 3113/1220/3427 3128/1219/3427 3139/3100/3427 +f 1693/731/3428 2585/3101/3428 1495/2913/3428 +f 2653/2305/3429 2704/3102/3429 2689/1201/3429 +f 183/194/3430 1587/3011/3430 1704/2988/3430 +f 2896/2462/3431 1507/1196/3431 184/1328/3431 +f 1688/3018/3432 1587/3011/3432 1695/3010/3432 +f 2593/2977/3433 2581/3103/3433 2574/3089/3433 +f 1595/3041/3434 1655/3007/3434 1541/3104/3434 +f 939/1987/3435 918/1625/3435 983/1985/3435 +f 1634/2184/3436 1459/40/3436 1707/3105/3436 +f 1769/252/3437 2567/3106/3437 2422/2070/3437 +f 265/71/3438 1712/2992/3438 1701/72/3438 +f 2536/2901/3439 2537/3107/3439 2560/1514/3439 +f 3367/3009/3440 1485/3008/3440 1477/3065/3440 +f 1476/3066/3441 3324/3108/3441 1477/3065/3441 +f 2708/1961/3442 2673/2319/3442 2424/245/3442 +f 1519/3109/3443 1690/3110/3443 1630/3082/3443 +f 2704/3102/3444 2730/1267/3444 2689/1201/3444 +f 3340/3111/3445 3368/3112/3445 1486/2877/3445 +f 1512/3084/3446 1537/3113/3446 1529/3086/3446 +f 1537/3114/3447 1536/2813/3447 1529/3092/3447 +f 1535/3093/3448 1536/2813/3448 1784/2315/3448 +f 2560/3050/3449 2593/2977/3449 2574/3089/3449 +f 1626/2966/3450 1637/2995/3450 1646/2967/3450 +f 1557/3115/3451 1567/3116/3451 1597/3117/3451 +f 1579/2522/3452 1573/3118/3452 1707/3105/3452 +f 1506/2934/3453 1490/3075/3453 1480/2932/3453 +f 1736/2634/3454 1503/2996/3454 1773/2635/3454 +f 3476/355/3455 1163/280/3455 1015/751/3455 +f 1721/2929/3456 1610/3119/3456 391/2947/3456 +f 1650/1350/3457 1545/1250/3457 466/1351/3457 +f 1485/3008/3458 1484/2419/3458 1477/3065/3458 +f 1621/2375/3459 1571/2205/3459 20/707/3459 +f 1567/3120/3460 1557/3121/3460 1764/2329/3460 +f 1667/2785/3461 1294/1252/3461 1558/1251/3461 +f 1559/2860/3462 1552/2958/3462 1582/2848/3462 +f 1642/2852/3463 1681/2854/3463 1691/2941/3463 +f 1717/2791/3464 1672/2957/3464 1566/2900/3464 +f 1491/2933/3465 1515/2945/3465 1506/2934/3465 +f 290/496/3466 1329/2726/3466 3/497/3466 +f 2045/2155/3467 1573/3118/3467 1579/2522/3467 +f 1573/3118/3468 1660/3122/3468 1707/3105/3468 +f 1660/3122/3469 1634/2184/3469 1707/3105/3469 +f 397/411/3470 1708/2842/3470 1718/2910/3470 +f 1591/2849/3471 1592/2856/3471 1600/2857/3471 +f 1606/2863/3472 1341/2607/3472 1692/2693/3472 +f 486/1231/3473 1544/1216/3473 1668/1262/3473 +f 1503/2996/3474 1736/2634/3474 1502/2420/3474 +f 1485/3008/3475 1502/2420/3475 1484/2419/3475 +f 146/902/3476 1639/920/3476 138/903/3476 +f 1519/3109/3477 1678/3123/3477 1690/3110/3477 +f 1678/3044/3478 1682/215/3478 1563/3003/3478 +f 2500/1651/3479 583/711/3479 1488/713/3479 +f 1512/3124/3480 1481/3125/3480 1537/3126/3480 +f 1610/1109/3481 1664/1150/3481 422/1129/3481 +f 1607/2887/3482 1639/2896/3482 1613/2597/3482 +f 1613/2597/3483 1639/2896/3483 1627/120/3483 +f 118/168/3484 1644/170/3484 1658/3012/3484 +f 3441/870/3485 1027/3127/3485 3468/871/3485 +f 1134/1802/3486 983/1985/3486 918/1625/3486 +f 318/2057/3487 682/745/3487 475/1352/3487 +f 3392/2994/3488 1646/2967/3488 1637/2995/3488 +f 1495/2913/3489 579/1860/3489 1517/1138/3489 +f 1060/3128/3490 1693/731/3490 2469/730/3490 +f 586/1676/3491 50/1189/3491 579/1860/3491 +f 1503/2996/3492 1502/2420/3492 1485/3008/3492 +f 1695/3010/3493 1654/3038/3493 3387/3042/3493 +f 3463/300/3494 3504/2545/3494 3490/1009/3494 +f 1380/151/3495 1606/2863/3495 1442/2571/3495 +f 1482/3129/3496 1481/3085/3496 3184/3130/3496 +f 1482/3129/3497 1537/3113/3497 1481/3085/3497 +f 1534/3131/3498 2898/2211/3498 2868/2529/3498 +f 2869/1415/3499 1534/3131/3499 2868/2529/3499 +f 754/2721/3500 753/1931/3500 784/1930/3500 +f 2791/239/3501 2812/371/3501 2828/373/3501 +f 1573/3118/3502 1554/3132/3502 1660/3122/3502 +f 1660/3122/3503 1602/41/3503 1634/2184/3503 +f 959/576/3504 3029/578/3504 955/2175/3504 +f 1696/2899/3505 1701/2979/3505 1712/2890/3505 +f 3059/3133/3506 3074/3134/3506 3035/3135/3506 +f 1478/2828/3507 1503/2996/3507 1485/3008/3507 +f 2048/322/3508 1621/2375/3508 2121/323/3508 +f 2048/322/3509 1699/3136/3509 1621/2375/3509 +f 1699/3136/3510 1571/2205/3510 1621/2375/3510 +f 1434/1308/3511 1371/2881/3511 1565/1306/3511 +f 1599/939/3512 1638/2598/3512 1839/2181/3512 +f 1558/1251/3513 1668/3137/3513 1665/2965/3513 +f 3435/3053/3514 2857/384/3514 1894/383/3514 +f 2560/3050/3515 2561/2976/3515 2593/2977/3515 +f 2816/2069/3516 2817/1426/3516 1028/3037/3516 +f 1490/1412/3517 3402/1414/3517 3381/3068/3517 +f 1630/3082/3518 1690/3110/3518 1590/3083/3518 +f 1713/2731/3519 1571/2205/3519 1699/3136/3519 +f 1896/2159/3520 1906/47/3520 1904/3138/3520 +f 3402/3139/3521 575/3054/3521 3401/3140/3521 +f 1522/3141/3522 1537/3113/3522 1482/3129/3522 +f 1515/3142/3523 1542/2922/3523 1506/2921/3523 +f 1582/2848/3524 1592/2856/3524 1591/2849/3524 +f 1561/2252/3525 1236/2685/3525 1604/2931/3525 +f 215/2844/3526 2781/288/3526 2615/287/3526 +f 2593/2977/3527 2617/3143/3527 2581/3103/3527 +f 3387/3042/3528 1654/3038/3528 1608/3144/3528 +f 2046/2265/3529 1635/3145/3529 2045/2155/3529 +f 2045/2155/3530 1632/3146/3530 1573/3118/3530 +f 1632/3146/3531 1554/3132/3531 1573/3118/3531 +f 1652/3147/3532 1602/41/3532 1660/3122/3532 +f 664/210/3533 1525/667/3533 58/211/3533 +f 1581/2850/3534 1580/3006/3534 1551/2951/3534 +f 1600/2862/3535 114/1040/3535 1580/1010/3535 +f 2415/3148/3536 2433/3149/3536 2409/3150/3536 +f 1524/3099/3537 481/329/3537 1670/3064/3537 +f 1672/2957/3538 1696/2899/3538 1566/2900/3538 +f 1479/3151/3539 1487/2949/3539 1505/2950/3539 +f 2897/2566/3540 967/1517/3540 1923/2461/3540 +f 1572/2150/3541 1635/3145/3541 2046/2265/3541 +f 1635/3145/3542 1632/3146/3542 2045/2155/3542 +f 1652/3147/3543 3334/3152/3543 1602/41/3543 +f 109/1272/3544 1643/1294/3544 1628/3153/3544 +f 3313/1736/3545 3312/3154/3545 3284/1737/3545 +f 1582/2848/3546 97/1160/3546 1592/2856/3546 +f 1667/2785/3547 1558/1251/3547 1665/2965/3547 +f 1715/2940/3548 1716/2978/3548 1696/2899/3548 +f 2930/3155/3549 1723/3156/3549 1722/3157/3549 +f 2809/3158/3550 2841/3159/3550 2026/3160/3550 +f 394/197/3551 159/213/3551 1682/215/3551 +f 1522/3161/3552 1538/3162/3552 1537/3114/3552 +f 1537/3114/3553 1538/3162/3553 1555/2316/3553 +f 1574/2982/3554 1659/2875/3554 1679/2874/3554 +f 1698/1276/3555 1659/2855/3555 1574/2871/3555 +f 1793/1518/3556 2829/3163/3556 2619/1427/3556 +f 1659/2875/3557 392/2784/3557 1667/2785/3557 +f 2290/846/3558 2246/2036/3558 2193/847/3558 +f 2677/2326/3559 2619/1427/3559 2817/1426/3559 +f 1604/2931/3560 506/544/3560 1514/2160/3560 +f 2926/2229/3561 2927/3164/3561 2945/3165/3561 +f 1486/2877/3562 3397/2180/3562 1479/2179/3562 +f 1544/1216/3563 452/1182/3563 1665/2782/3563 +f 1691/2941/3564 1715/2940/3564 1696/2899/3564 +f 2139/1678/3565 1368/2889/3565 2136/1679/3565 +f 1839/2181/3566 1638/2598/3566 1626/2182/3566 +f 1668/3137/3567 1558/1251/3567 1545/1250/3567 +f 1482/3166/3568 1498/3167/3568 1522/3168/3568 +f 2829/3163/3569 1709/2836/3569 2826/1/3569 +f 2619/1427/3570 2829/3163/3570 2826/1/3570 +f 1507/1196/3571 35/1519/3571 2677/2326/3571 +f 870/2400/3572 3454/1301/3572 3480/1300/3572 +f 1632/3146/3573 1706/3169/3573 1554/3132/3573 +f 1554/3132/3574 1518/3170/3574 1660/3122/3574 +f 1516/2865/3575 1493/234/3575 1543/233/3575 +f 1623/2948/3576 1595/3041/3576 1562/3171/3576 +f 1596/2773/3577 1597/913/3577 1605/540/3577 +f 507/328/3578 3302/3172/3578 1670/3064/3578 +f 1518/3173/3579 1524/3099/3579 1670/3064/3579 +f 1569/3174/3580 1699/3136/3580 2048/322/3580 +f 1569/3174/3581 1649/3175/3581 1699/3136/3581 +f 1649/3175/3582 1713/2731/3582 1699/3136/3582 +f 2593/2977/3583 2594/361/3583 2607/363/3583 +f 1475/3176/3584 3196/3177/3584 1498/3167/3584 +f 1498/3167/3585 1538/3178/3585 1522/3168/3585 +f 1538/3162/3586 1548/2548/3586 1555/2316/3586 +f 1555/2316/3587 1548/2548/3587 1556/3179/3587 +f 1589/3180/3588 1843/2469/3588 1575/3181/3588 +f 1530/2859/3589 1540/3182/3589 1774/3183/3589 +f 2175/3184/3590 2409/3185/3590 2904/3186/3590 +f 2779/3187/3591 2564/3188/3591 2624/3013/3591 +f 1635/3145/3592 1706/3169/3592 1632/3146/3592 +f 1652/3147/3593 1660/3122/3593 1518/3170/3593 +f 2434/267/3594 2838/1635/3594 2711/1634/3594 +f 1530/2859/3595 1774/3183/3595 1504/2826/3595 +f 1626/2182/3596 1638/2598/3596 1637/2983/3596 +f 178/1320/3597 179/1345/3597 195/1336/3597 +f 1540/26/3598 1789/2707/3598 1774/3189/3598 +f 1916/3190/3599 1264/2747/3599 1673/2629/3599 +f 1721/2981/3600 1586/2903/3600 1610/2902/3600 +f 1589/3191/3601 1575/590/3601 1556/3179/3601 +f 1596/2773/3602 1843/2469/3602 1589/3180/3602 +f 2425/3192/3603 2436/2295/3603 3030/2297/3603 +f 2370/2558/3604 2175/3193/3604 2901/2556/3604 +f 1635/3145/3605 1541/3194/3605 1706/3169/3605 +f 83/918/3606 46/960/3606 1551/968/3606 +f 2697/2542/3607 3462/2345/3607 2524/2344/3607 +f 465/1110/3608 1664/1150/3608 452/1182/3608 +f 1424/228/3609 1673/2629/3609 1264/2747/3609 +f 1673/2629/3610 1992/2251/3610 1916/3190/3610 +f 1553/1119/3611 1583/1121/3611 1552/2958/3611 +f 1498/3195/3612 1523/3196/3612 1538/3197/3612 +f 1538/3162/3613 1523/3198/3613 1548/2548/3613 +f 1548/2548/3614 1557/3121/3614 1556/3179/3614 +f 1557/3199/3615 1589/3180/3615 1556/3200/3615 +f 2706/3201/3616 2719/3202/3616 2749/3057/3616 +f 184/3203/3617 2111/3204/3617 2896/3205/3617 +f 2466/3206/3618 2255/3207/3618 2455/3208/3618 +f 2615/287/3619 2416/2911/3619 2766/681/3619 +f 1572/2150/3620 1595/3072/3620 1635/3145/3620 +f 1706/3169/3621 1518/3170/3621 1554/3132/3621 +f 3206/3209/3622 601/1428/3622 3205/3210/3622 +f 2900/3211/3623 2335/1890/3623 2342/3212/3623 +f 3442/2587/3624 708/2360/3624 3447/982/3624 +f 2677/2326/3625 35/1519/3625 2619/1427/3625 +f 931/285/3626 1719/284/3626 1568/2215/3626 +f 2121/323/3627 1621/2375/3627 2119/2374/3627 +f 1677/3213/3628 1838/1038/3628 1805/1037/3628 +f 1546/2869/3629 1569/3174/3629 1927/2870/3629 +f 128/961/3630 1580/1010/3630 114/1040/3630 +f 1505/2858/3631 1504/2826/3631 1479/2179/3631 +f 1329/2726/3632 1649/3214/3632 282/217/3632 +f 2335/1890/3633 2900/3211/3633 1019/3215/3633 +f 1635/3145/3634 1595/3072/3634 1541/3194/3634 +f 2034/241/3635 1797/2986/3635 1570/242/3635 +f 2516/3216/3636 2523/3217/3636 2583/3218/3636 +f 1364/3219/3637 1648/3220/3637 1620/286/3637 +f 1608/3221/3638 1654/3222/3638 1620/286/3638 +f 1654/3222/3639 1719/284/3639 1620/286/3639 +f 1569/3174/3640 1563/3223/3640 1649/3175/3640 +f 1164/3224/3641 2500/1651/3641 1488/713/3641 +f 1609/2914/3642 149/2876/3642 148/1041/3642 +f 1593/2628/3643 1561/2252/3643 1673/2629/3643 +f 1673/2629/3644 1561/2252/3644 1992/2251/3644 +f 1820/2250/3645 1561/2252/3645 1604/2931/3645 +f 1513/2761/3646 1756/2478/3646 1548/2548/3646 +f 1523/3198/3647 1513/2761/3647 1548/2548/3647 +f 1676/3225/3648 592/3226/3648 1686/3227/3648 +f 2073/2710/3649 2837/2709/3649 2787/2867/3649 +f 1541/3194/3650 1655/3228/3650 1706/3169/3650 +f 1648/3220/3651 1608/3221/3651 1620/286/3651 +f 1719/284/3652 1590/3083/3652 1711/2216/3652 +f 1563/3223/3653 1569/3174/3653 1546/2869/3653 +f 1678/3123/3654 1563/3223/3654 1546/2869/3654 +f 1560/2938/3655 1570/242/3655 1692/2987/3655 +f 1615/1245/3656 1628/2853/3656 1642/2852/3656 +f 1629/3229/3657 1179/82/3657 3334/3152/3657 +f 1499/3230/3658 1523/3196/3658 1498/3195/3658 +f 1499/3231/3659 1513/2761/3659 1523/3198/3659 +f 1513/2761/3660 1757/2328/3660 1756/2478/3660 +f 1548/2548/3661 1764/2329/3661 1557/3121/3661 +f 2617/3143/3662 2616/3232/3662 2581/3103/3662 +f 2896/2462/3663 2882/2212/3663 1923/2461/3663 +f 1272/3052/3664 2096/382/3664 2857/384/3664 +f 1655/3228/3665 1524/3233/3665 1706/3169/3665 +f 1524/3099/3666 1518/3173/3666 1706/3234/3666 +f 2591/3020/3667 2818/3019/3667 2798/3235/3667 +f 3387/3236/3668 1608/3221/3668 1648/3220/3668 +f 1590/3083/3669 1690/3110/3669 1711/2216/3669 +f 1690/3110/3670 1546/2869/3670 1711/2216/3670 +f 1563/3040/3671 282/217/3671 1649/3214/3671 +f 1038/1356/3672 1055/926/3672 1045/405/3672 +f 1494/729/3673 1527/1139/3673 1493/234/3673 +f 1628/3153/3674 1616/1273/3674 109/1272/3674 +f 1499/3237/3675 1500/2669/3675 1513/3238/3675 +f 506/544/3676 262/666/3676 1514/2160/3676 +f 1557/3115/3677 1597/3117/3677 1589/3239/3677 +f 1589/3239/3678 1597/3117/3678 1596/3240/3678 +f 602/3241/3679 2813/3242/3679 2846/3243/3679 +f 2617/3143/3680 2621/1608/3680 2616/3232/3680 +f 1528/3244/3681 1524/3233/3681 1655/3228/3681 +f 1518/3170/3682 1670/3245/3682 1652/3147/3682 +f 1529/3086/3683 1535/3246/3683 1521/3062/3683 +f 1923/2461/3684 35/1519/3684 1507/1196/3684 +f 3046/293/3685 3045/2277/3685 2980/2936/3685 +f 215/2844/3686 2894/680/3686 2673/2319/3686 +f 1590/3083/3687 1719/284/3687 1654/3222/3687 +f 1690/3110/3688 1678/3123/3688 1546/2869/3688 +f 2096/382/3689 2161/1082/3689 1894/383/3689 +f 2142/3247/3690 2309/1132/3690 2248/1131/3690 +f 2384/3248/3691 2027/3249/3691 2815/3250/3691 +f 2142/3251/3692 2251/3252/3692 2167/3253/3692 +f 2309/3254/3693 2142/3251/3693 2167/3253/3693 +f 2222/3255/3694 2140/3256/3694 973/3257/3694 +f 1028/3037/3695 2060/3/3695 1833/3258/3695 +f 2167/3253/3696 2251/3252/3696 1888/3259/3696 +f 2723/653/3697 1928/678/3697 2643/677/3697 +f 2345/347/3698 2346/1274/3698 2380/3260/3698 +f 1272/3261/3699 1738/3262/3699 2096/2100/3699 +f 2651/2101/3700 2096/2100/3700 1738/3262/3700 +f 2147/3263/3701 2200/3264/3701 2220/2004/3701 +f 2380/3260/3702 2381/3265/3702 2401/3266/3702 +f 2228/3267/3703 2200/3264/3703 2147/3263/3703 +f 1738/3262/3704 1967/3268/3704 2651/2101/3704 +f 1429/247/3705 1099/3269/3705 1849/3270/3705 +f 1818/2303/3706 1839/2181/3706 1846/1200/3706 +f 1967/3268/3707 1926/3271/3707 1849/3272/3707 +f 1926/3273/3708 801/3274/3708 1429/247/3708 +f 1849/3270/3709 1926/3273/3709 1429/247/3709 +f 801/3274/3710 1428/3275/3710 1429/247/3710 +f 3499/1910/3711 3480/1300/3711 3424/1002/3711 +f 2108/3276/3712 1272/3261/3712 1898/2134/3712 +f 2108/3276/3713 1738/3262/3713 1272/3261/3713 +f 1428/3275/3714 1295/248/3714 1429/247/3714 +f 1226/2687/3715 1099/2781/3715 1232/182/3715 +f 2108/3276/3716 1967/3268/3716 1738/3262/3716 +f 801/3274/3717 1740/3277/3717 1428/3275/3717 +f 1740/3277/3718 1295/248/3718 1428/3275/3718 +f 2108/3276/3719 1938/3278/3719 1967/3268/3719 +f 1967/3268/3720 1726/3279/3720 1926/3271/3720 +f 1726/3279/3721 1803/3280/3721 1926/3271/3721 +f 1926/3271/3722 1803/3280/3722 801/3281/3722 +f 801/3282/3723 1803/3283/3723 1740/3284/3723 +f 1728/2660/3724 1647/2659/3724 1740/3285/3724 +f 1938/3278/3725 1726/3279/3725 1967/3268/3725 +f 1803/3286/3726 1739/3287/3726 1740/3277/3726 +f 1740/3285/3727 1739/3288/3727 1728/2660/3727 +f 3444/2043/3728 3448/1106/3728 3478/428/3728 +f 3502/837/3729 3503/1098/3729 3496/1097/3729 +f 1980/3289/3730 1982/3290/3730 2062/2136/3730 +f 1982/3290/3731 2108/3276/3731 2062/2136/3731 +f 1848/3291/3732 204/3292/3732 1739/3288/3732 +f 1803/3283/3733 1848/3293/3733 1739/3294/3733 +f 1739/3288/3734 204/3292/3734 1728/2660/3734 +f 2274/3295/3735 2454/845/3735 2191/3296/3735 +f 1726/3279/3736 1881/3297/3736 1803/3280/3736 +f 1803/3283/3737 1881/3298/3737 1848/3293/3737 +f 1872/1946/3738 1982/3290/3738 1980/3289/3738 +f 2108/3276/3739 1982/3290/3739 1938/3278/3739 +f 1938/3278/3740 2024/3299/3740 1726/3279/3740 +f 1881/3298/3741 1873/3300/3741 1848/3293/3741 +f 1873/3301/3742 1882/2677/3742 204/3292/3742 +f 1848/3291/3743 1873/3301/3743 204/3292/3743 +f 1683/2658/3744 204/3292/3744 1882/2677/3744 +f 1982/3290/3745 1182/3302/3745 1938/3278/3745 +f 1182/3302/3746 2024/3299/3746 1938/3278/3746 +f 2024/3299/3747 1881/3297/3747 1726/3279/3747 +f 1881/3298/3748 1947/3303/3748 1873/3300/3748 +f 2034/241/3749 1994/3304/3749 1797/2986/3749 +f 2024/3305/3750 1947/3303/3750 1881/3298/3750 +f 1946/3306/3751 1883/3307/3751 1873/3301/3751 +f 1947/3303/3752 1946/3308/3752 1873/3300/3752 +f 2024/3309/3753 1946/3310/3753 1947/3311/3753 +f 1946/3306/3754 1882/2677/3754 1883/3307/3754 +f 1838/1038/3755 2097/3312/3755 1872/1946/3755 +f 2097/3312/3756 1982/3290/3756 1872/1946/3756 +f 2024/3305/3757 2008/3313/3757 1946/3308/3757 +f 1915/3314/3758 1937/1103/3758 1882/2677/3758 +f 1946/3306/3759 1915/3314/3759 1882/2677/3759 +f 2097/3312/3760 1182/3302/3760 1982/3290/3760 +f 1182/3302/3761 1812/3315/3761 2024/3299/3761 +f 2024/3299/3762 1812/3315/3762 2008/3316/3762 +f 2008/3313/3763 1863/3317/3763 1946/3308/3763 +f 1946/3306/3764 1863/3318/3764 1915/3314/3764 +f 1371/2881/3765 2106/2748/3765 1565/1306/3765 +f 1736/2634/3766 1735/2218/3766 1501/2217/3766 +f 1810/1228/3767 1802/1363/3767 1811/1362/3767 +f 1870/3319/3768 2106/2748/3768 1937/1103/3768 +f 1883/3320/3769 1882/3321/3769 1873/3300/3769 +f 1871/2583/3770 1925/2214/3770 1003/3322/3770 +f 1847/3323/3771 1182/3302/3771 2097/3312/3771 +f 1812/3315/3772 1767/3324/3772 2008/3316/3772 +f 1863/3318/3773 1870/3319/3773 1915/3314/3773 +f 1870/3319/3774 1937/1103/3774 1915/3314/3774 +f 1787/1229/3775 1809/2623/3775 1801/2479/3775 +f 1484/3325/3776 1501/3326/3776 1483/3327/3776 +f 3455/2042/3777 3478/428/3777 1042/427/3777 +f 2357/3328/3778 2064/2209/3778 1990/3329/3778 +f 2363/3330/3779 2262/3331/3779 2378/3332/3779 +f 1758/2827/3780 1504/2826/3780 1774/3183/3780 +f 2820/3333/3781 966/3334/3781 2435/3335/3781 +f 1847/3323/3782 1812/3315/3782 1182/3302/3782 +f 1767/3336/3783 1737/3337/3783 2008/3313/3783 +f 1737/3338/3784 1870/3319/3784 1863/3318/3784 +f 2008/3313/3785 1737/3337/3785 1863/3317/3785 +f 2284/3339/3786 2211/3340/3786 2310/3341/3786 +f 2143/3342/3787 2197/1925/3787 1344/2639/3787 +f 1838/1038/3788 1847/3323/3788 2097/3312/3788 +f 1727/3343/3789 1906/47/3789 1461/46/3789 +f 1595/3072/3790 1572/2150/3790 3276/3070/3790 +f 2287/3344/3791 2248/3345/3791 2310/3341/3791 +f 1893/2093/3792 1154/364/3792 2084/2321/3792 +f 2084/2321/3793 1154/364/3793 2068/1846/3793 +f 1847/3323/3794 2023/3346/3794 1812/3315/3794 +f 1737/3338/3795 1775/3347/3795 1870/3319/3795 +f 2955/3348/3796 2948/2728/3796 2965/2730/3796 +f 2214/3349/3797 2383/3350/3797 2188/3351/3797 +f 1677/3213/3798 1936/2496/3798 1838/1038/3798 +f 1936/2496/3799 1847/3323/3799 1838/1038/3799 +f 2023/3346/3800 1984/3352/3800 1812/3315/3800 +f 1812/3315/3801 1984/3352/3801 1767/3324/3801 +f 1984/3353/3802 2072/3354/3802 1737/3337/3802 +f 1767/3336/3803 1984/3353/3803 1737/3337/3803 +f 1737/3338/3804 2072/3355/3804 1775/3347/3804 +f 2106/2748/3805 1870/3319/3805 1775/3347/3805 +f 2363/3330/3806 2379/3356/3806 2262/3331/3806 +f 2025/3357/3807 2787/2867/3807 2743/2866/3807 +f 2025/3358/3808 2053/3359/3808 2787/3360/3808 +f 2053/3359/3809 2073/3361/3809 2787/3360/3809 +f 2110/3362/3810 2880/3363/3810 2073/3361/3810 +f 3274/3364/3811 1864/3365/3811 1677/3366/3811 +f 1677/3213/3812 1864/2497/3812 1936/2496/3812 +f 1098/3367/3813 1847/3323/3813 1936/2496/3813 +f 2365/3368/3814 2386/3369/3814 2374/3370/3814 +f 2345/347/3815 1472/348/3815 2346/1274/3815 +f 2686/3371/3816 2633/3372/3816 1950/3373/3816 +f 2686/3374/3817 1998/3375/3817 1997/3376/3817 +f 2010/3377/3818 2053/3359/3818 2025/3358/3818 +f 2053/3359/3819 2089/3378/3819 2073/3361/3819 +f 2110/3362/3820 231/3379/3820 1145/3380/3820 +f 1507/1196/3821 2677/2326/3821 2153/1194/3821 +f 1098/3367/3822 2052/3381/3822 1847/3323/3822 +f 1847/3323/3823 2052/3381/3823 2023/3346/3823 +f 2072/3355/3824 1821/3382/3824 1775/3347/3824 +f 1775/3347/3825 1821/3382/3825 2106/2748/3825 +f 2132/3383/3826 2320/3384/3826 2312/3385/3826 +f 1929/3386/3827 1998/3375/3827 2686/3374/3827 +f 1950/3387/3828 1929/3386/3828 2686/3374/3828 +f 1997/3376/3829 1998/3375/3829 2025/3358/3829 +f 2025/3358/3830 1998/3375/3830 2010/3377/3830 +f 2089/3378/3831 2110/3362/3831 2073/3361/3831 +f 3057/1411/3832 3032/3388/3832 2998/2474/3832 +f 1984/3353/3833 2095/3389/3833 2072/3354/3833 +f 2095/3390/3834 1821/3382/3834 2072/3355/3834 +f 2035/3391/3835 2224/3392/3835 2141/770/3835 +f 1899/3393/3836 1929/3386/3836 1950/3387/3836 +f 2089/3378/3837 2111/3204/3837 2110/3362/3837 +f 1912/628/3838 1098/3367/3838 1936/2496/3838 +f 1966/3394/3839 2095/3389/3839 1984/3353/3839 +f 2023/3346/3840 1966/3395/3840 1984/3352/3840 +f 1821/3382/3841 1565/1306/3841 2106/2748/3841 +f 1555/2316/3842 1556/3179/3842 1785/589/3842 +f 2224/3392/3843 2035/3391/3843 2140/3256/3843 +f 2606/3396/3844 1885/3397/3844 1899/3398/3844 +f 1899/3393/3845 1917/3399/3845 1929/3386/3845 +f 1917/3399/3846 1930/3400/3846 1929/3386/3846 +f 1929/3386/3847 1951/3401/3847 1998/3375/3847 +f 1951/3401/3848 1999/3402/3848 1998/3375/3848 +f 1998/3375/3849 1999/3402/3849 2010/3377/3849 +f 1999/3402/3850 2054/3403/3850 2010/3377/3850 +f 2054/3403/3851 2074/3404/3851 2053/3359/3851 +f 2010/3377/3852 2054/3403/3852 2053/3359/3852 +f 2074/3404/3853 2089/3378/3853 2053/3359/3853 +f 243/2245/3854 767/3405/3854 1368/2889/3854 +f 1098/3367/3855 1983/3406/3855 2052/3381/3855 +f 2052/3381/3856 1966/3395/3856 2023/3346/3856 +f 1831/937/3857 1839/2181/3857 1818/2303/3857 +f 2222/3255/3858 2224/3392/3858 2140/3256/3858 +f 2262/3331/3859 2148/3407/3859 2358/1111/3859 +f 1856/3408/3860 1876/3409/3860 1885/3410/3860 +f 1876/3409/3861 1917/3399/3861 1885/3410/3861 +f 1885/3410/3862 1917/3399/3862 1899/3393/3862 +f 1930/3400/3863 1951/3401/3863 1929/3386/3863 +f 2111/3204/3864 2089/3378/3864 2074/3404/3864 +f 350/3411/3865 231/3379/3865 2110/3362/3865 +f 2111/3204/3866 350/3411/3866 2110/3362/3866 +f 349/3412/3867 2153/3413/3867 231/3414/3867 +f 767/1235/3868 1367/3415/3868 1368/3416/3868 +f 1983/3406/3869 1098/3367/3869 1912/628/3869 +f 1204/163/3870 1349/3417/3870 1707/3105/3870 +f 2358/1111/3871 973/3418/3871 2392/3419/3871 +f 2148/3407/3872 973/3418/3872 2358/1111/3872 +f 1999/3402/3873 2000/3420/3873 2054/3403/3873 +f 2099/3421/3874 2111/3204/3874 2074/3404/3874 +f 2075/3422/3875 2099/3421/3875 2074/3404/3875 +f 349/3423/3876 231/3379/3876 350/3411/3876 +f 1755/3424/3877 1912/628/3877 1631/627/3877 +f 1755/3424/3878 1983/3406/3878 1912/628/3878 +f 1983/3406/3879 2127/3425/3879 2052/3381/3879 +f 2052/3381/3880 2127/3425/3880 1966/3395/3880 +f 2095/3390/3881 1745/3426/3881 1821/3382/3881 +f 1745/3426/3882 14/1912/3882 1565/1306/3882 +f 1821/3382/3883 1745/3426/3883 1565/1306/3883 +f 2689/1201/3884 2688/1203/3884 2687/1417/3884 +f 440/2705/3885 1313/697/3885 439/1377/3885 +f 1864/3365/3886 3274/3364/3886 1531/3427/3886 +f 531/385/3887 3275/3428/3887 3222/367/3887 +f 1787/1229/3888 1801/2479/3888 1765/2630/3888 +f 2232/3429/3889 2147/3430/3889 2387/3431/3889 +f 1940/3432/3890 1985/3433/3890 1951/3401/3890 +f 1930/3400/3891 1940/3432/3891 1951/3401/3891 +f 1951/3401/3892 2001/3434/3892 1999/3402/3892 +f 1999/3402/3893 2001/3434/3893 2000/3420/3893 +f 2000/3420/3894 2075/3422/3894 2054/3403/3894 +f 2054/3403/3895 2075/3422/3895 2074/3404/3895 +f 350/3411/3896 2111/3204/3896 184/3203/3896 +f 1631/627/3897 1448/3435/3897 1755/3424/3897 +f 1966/3394/3898 2009/3436/3898 2095/3389/3898 +f 2009/3437/3899 1745/3426/3899 2095/3390/3899 +f 1579/2522/3900 2058/2158/3900 2045/2155/3900 +f 500/1263/3901 1668/1262/3901 1545/1310/3901 +f 2200/3264/3902 2203/162/3902 2220/2004/3902 +f 2220/2004/3903 2203/162/3903 2382/2005/3903 +f 1830/781/3904 3464/20/3904 1197/3438/3904 +f 2912/3439/3905 1748/3440/3905 2319/3441/3905 +f 1748/3440/3906 1741/3442/3906 2319/3441/3906 +f 1748/3440/3907 2233/3443/3907 1741/3442/3907 +f 2382/3444/3908 2203/3445/3908 2250/2407/3908 +f 1857/3446/3909 1877/3447/3909 1876/3409/3909 +f 1856/3408/3910 1857/3446/3910 1876/3409/3910 +f 1917/3399/3911 1900/3448/3911 1930/3400/3911 +f 1951/3401/3912 1985/3433/3912 2001/3434/3912 +f 2001/3434/3913 2011/3449/3913 2000/3420/3913 +f 1843/2469/3914 1596/2773/3914 1854/542/3914 +f 1532/3450/3915 46/960/3915 37/959/3915 +f 1768/3451/3916 2233/3443/3916 1748/3440/3916 +f 1768/3451/3917 2276/3452/3917 2233/3443/3917 +f 1160/1611/3918 453/1948/3918 384/1609/3918 +f 1768/3451/3919 1778/3453/3919 2276/3452/3919 +f 1876/3409/3920 1877/3447/3920 1917/3399/3920 +f 1900/3448/3921 1940/3432/3921 1930/3400/3921 +f 2036/3454/3922 2075/3422/3922 2000/3420/3922 +f 2075/3455/3923 2882/2212/3923 2099/3456/3923 +f 3189/1637/3924 3188/3457/3924 3152/1638/3924 +f 2308/3458/3925 2244/3459/3925 2185/3460/3925 +f 1579/2522/3926 1349/3417/3926 2066/2523/3926 +f 1722/3157/3927 1768/3451/3927 1748/3440/3927 +f 1807/2302/3928 2087/822/3928 1288/2233/3928 +f 1917/3399/3929 1877/3447/3929 1900/3448/3929 +f 1877/3447/3930 1918/3461/3930 1900/3448/3930 +f 1900/3448/3931 1952/3462/3931 1940/3432/3931 +f 1940/3432/3932 1952/3462/3932 1985/3433/3932 +f 1985/3433/3933 2002/3463/3933 2001/3434/3933 +f 2001/3434/3934 2002/3463/3934 2011/3449/3934 +f 2011/3449/3935 2036/3454/3935 2000/3420/3935 +f 2075/3422/3936 2867/3464/3936 2882/3465/3936 +f 229/2463/3937 163/2652/3937 1116/2276/3937 +f 2908/3466/3938 2306/3467/3938 2406/3468/3938 +f 1983/3406/3939 2086/3469/3939 2127/3425/3939 +f 2086/3470/3940 1776/3471/3940 1966/3394/3940 +f 2127/3425/3941 2086/3469/3941 1966/3395/3941 +f 1966/3394/3942 1776/3471/3942 2009/3436/3942 +f 1776/3472/3943 1745/3426/3943 2009/3437/3943 +f 2389/3473/3944 2399/3474/3944 2235/3475/3944 +f 1888/3476/3945 2307/2426/3945 2167/3477/3945 +f 1056/3478/3946 1141/101/3946 561/2361/3946 +f 2930/3155/3947 1722/3157/3947 2912/3439/3947 +f 1729/3479/3948 1768/3480/3948 1722/3481/3948 +f 1729/3479/3949 1779/3482/3949 1768/3480/3949 +f 1779/3482/3950 1778/3483/3950 1768/3480/3950 +f 1835/1867/3951 1857/3446/3951 1834/1865/3951 +f 1835/1867/3952 1850/3484/3952 1857/3446/3952 +f 1857/3446/3953 1850/3484/3953 1877/3447/3953 +f 2026/3160/3954 2841/3159/3954 2036/3454/3954 +f 2011/3449/3955 2026/3160/3955 2036/3454/3955 +f 2362/3485/3956 2284/3339/3956 2199/3486/3956 +f 3236/1114/3957 1964/3487/3957 1448/3488/3957 +f 1448/3435/3958 2022/3489/3958 1755/3424/3958 +f 2022/3489/3959 1754/3490/3959 1755/3424/3959 +f 1754/3490/3960 1983/3406/3960 1755/3424/3960 +f 1754/3490/3961 2086/3469/3961 1983/3406/3961 +f 1955/3491/3962 1941/3492/3962 1956/3493/3962 +f 188/3494/3963 2145/3495/3963 1939/3496/3963 +f 1723/3156/3964 1730/3497/3964 1722/3157/3964 +f 1730/3497/3965 1729/3498/3965 1722/3157/3965 +f 1749/3499/3966 1779/3500/3966 1729/3498/3966 +f 1824/3501/3967 1835/3502/3967 1813/2561/3967 +f 1814/2201/3968 1824/3501/3968 1813/2561/3968 +f 1824/3503/3969 1836/3504/3969 1835/1867/3969 +f 1835/1867/3970 1836/3504/3970 1850/3484/3970 +f 1900/3448/3971 1918/3461/3971 1952/3462/3971 +f 1985/3433/3972 1952/3462/3972 2002/3463/3972 +f 2775/3505/3973 2026/3160/3973 2002/3463/3973 +f 2002/3463/3974 2026/3160/3974 2011/3449/3974 +f 2775/3505/3975 2809/3158/3975 2026/3160/3975 +f 1724/408/3976 2018/2631/3976 1137/2195/3976 +f 2018/2631/3977 1879/1574/3977 1137/2195/3977 +f 1776/3472/3978 557/3506/3978 1745/3426/3978 +f 1745/3426/3979 1714/1913/3979 14/1912/3979 +f 982/259/3980 1327/2832/3980 1131/2232/3980 +f 2300/3507/3981 1145/3508/3981 231/3414/3981 +f 1865/3509/3982 188/3494/3982 1939/3496/3982 +f 2908/3510/3983 2907/2457/3983 2413/3511/3983 +f 1730/3497/3984 1749/3499/3984 1729/3498/3984 +f 1324/2034/3985 232/2161/3985 1460/2035/3985 +f 1919/3512/3986 1931/2235/3986 1952/3462/3986 +f 1918/3461/3987 1919/3512/3987 1952/3462/3987 +f 1952/3462/3988 1931/2235/3988 2002/3463/3988 +f 2339/2433/3989 2179/3513/3989 2328/2459/3989 +f 2017/2157/3990 2044/2156/3990 3182/562/3990 +f 1159/2291/3991 1925/2214/3991 1871/2583/3991 +f 2370/2558/3992 2903/2557/3992 2342/3212/3992 +f 1964/2128/3993 2105/3514/3993 1448/3435/3993 +f 1448/3435/3994 2105/3514/3994 2022/3489/3994 +f 3273/3515/3995 1629/3229/3995 3334/3152/3995 +f 1136/3516/3996 1333/3517/3996 1350/3097/3996 +f 1875/2973/3997 188/3518/3997 1865/2971/3997 +f 1750/3519/3998 1749/3499/3998 1730/3497/3998 +f 1749/3520/3999 1804/725/3999 1779/727/3999 +f 1825/3521/4000 1824/3501/4000 1814/2201/4000 +f 1825/3521/4001 1836/3522/4001 1824/3501/4001 +f 1836/3504/4002 1840/3523/4002 1850/3484/4002 +f 1850/3484/4003 1878/3524/4003 1877/3447/4003 +f 1877/3447/4004 1878/3524/4004 1918/3461/4004 +f 1931/2235/4005 2703/3525/4005 2002/3463/4005 +f 2351/3526/4006 2465/2145/4006 2481/2144/4006 +f 1736/2634/4007 1744/2473/4007 1735/2218/4007 +f 1765/2630/4008 1772/1046/4008 1744/2477/4008 +f 3483/1780/4009 453/1781/4009 3432/2531/4009 +f 1765/2630/4010 1801/2479/4010 1772/1046/4010 +f 1801/2479/4011 1809/2623/4011 1808/1135/4011 +f 1809/2304/4012 1818/2303/4012 1808/1147/4012 +f 3469/782/4013 1174/3527/4013 2007/2766/4013 +f 2086/3470/4014 2125/3528/4014 1776/3471/4014 +f 1776/3472/4015 2125/3529/4015 557/3506/4015 +f 557/3506/4016 1961/2924/4016 1745/3426/4016 +f 3136/3530/4017 47/99/4017 1056/3478/4017 +f 1141/101/4018 1159/2291/4018 1309/2582/4018 +f 1742/3531/4019 1730/3497/4019 2949/3532/4019 +f 2930/3155/4020 2949/3532/4020 1723/3156/4020 +f 1742/3531/4021 1750/3519/4021 1730/3497/4021 +f 1791/3533/4022 1804/3534/4022 1749/3499/4022 +f 1869/59/4023 1893/2093/4023 1862/174/4023 +f 1850/3484/4024 1840/3523/4024 1878/3524/4024 +f 1918/3461/4025 1878/3524/4025 1919/3512/4025 +f 2703/3525/4026 1969/3535/4026 2002/3463/4026 +f 2221/2313/4027 2142/3247/4027 2248/1131/4027 +f 1575/590/4028 1785/589/4028 1556/3179/4028 +f 1905/2500/4029 1188/1575/4029 1003/3322/4029 +f 2063/3536/4030 1754/3490/4030 2022/3489/4030 +f 2063/3536/4031 2050/3537/4031 1754/3490/4031 +f 2050/3538/4032 2125/3528/4032 2086/3470/4032 +f 1754/3490/4033 2050/3537/4033 2086/3469/4033 +f 1826/3539/4034 1814/2201/4034 1827/1513/4034 +f 2688/1203/4035 2703/3540/4035 2687/1417/4035 +f 2669/857/4036 2754/705/4036 3428/759/4036 +f 1791/3533/4037 1749/3499/4037 1750/3519/4037 +f 1826/3539/4038 1825/3521/4038 1814/2201/4038 +f 2294/2202/4039 1814/2201/4039 1804/725/4039 +f 1837/3541/4040 1836/3522/4040 1825/3521/4040 +f 1826/3542/4041 1837/3543/4041 1825/3544/4041 +f 1837/3543/4042 1840/3523/4042 1836/3504/4042 +f 2482/2327/4043 2817/1426/4043 2816/2069/4043 +f 1128/1576/4044 2121/323/4044 2119/2374/4044 +f 1160/3545/4045 3432/2531/4045 453/1781/4045 +f 2087/822/4046 1989/1213/4046 1288/2233/4046 +f 1884/3546/4047 188/3494/4047 1875/3547/4047 +f 1884/3546/4048 1336/3548/4048 188/3494/4048 +f 2949/3532/4049 1731/3549/4049 1742/3531/4049 +f 3141/2833/4050 3189/1637/4050 3140/1218/4050 +f 1840/3523/4051 1858/3550/4051 1878/3524/4051 +f 1886/3551/4052 1908/2236/4052 1919/3512/4052 +f 1878/3524/4053 1886/3551/4053 1919/3512/4053 +f 1919/3512/4054 1908/2236/4054 1931/2235/4054 +f 2401/3266/4055 2172/3552/4055 973/3418/4055 +f 2259/3553/4056 2895/3554/4056 2368/3555/4056 +f 1602/41/4057 3334/3152/4057 1179/82/4057 +f 1056/3478/4058 47/99/4058 1141/101/4058 +f 1758/2827/4059 1773/2635/4059 1503/2996/4059 +f 1733/1047/4060 1770/1090/4060 1757/2328/4060 +f 1629/3229/4061 1122/2343/4061 1179/82/4061 +f 1629/3229/4062 1269/2342/4062 1122/2343/4062 +f 1629/3229/4063 3407/3556/4063 1269/2342/4063 +f 2656/805/4064 2668/807/4064 2655/3557/4064 +f 1964/2128/4065 1363/3558/4065 2105/3514/4065 +f 2126/3559/4066 2022/3489/4066 2105/3514/4066 +f 2022/3489/4067 2126/3559/4067 2063/3536/4067 +f 2063/3536/4068 2094/3560/4068 2125/3529/4068 +f 2050/3538/4069 2063/3561/4069 2125/3528/4069 +f 2125/3529/4070 2094/3560/4070 557/3506/4070 +f 557/3506/4071 1895/243/4071 1961/2924/4071 +f 1520/3029/4072 1753/3063/4072 1743/3087/4072 +f 1736/2634/4073 1501/2217/4073 1502/2420/4073 +f 1751/3562/4074 1750/3519/4074 1742/3531/4074 +f 1751/3562/4075 1780/3563/4075 1750/3519/4075 +f 1780/3563/4076 1791/3533/4076 1750/3519/4076 +f 1827/1513/4077 1837/3541/4077 1826/3539/4077 +f 1841/3564/4078 1840/3523/4078 1837/3543/4078 +f 1840/3523/4079 1841/3564/4079 1858/3550/4079 +f 1858/3550/4080 1866/2422/4080 1878/3524/4080 +f 1878/3524/4081 1866/2422/4081 1886/3551/4081 +f 1764/2329/4082 1786/2441/4082 1567/3120/4082 +f 1800/1148/4083 1817/177/4083 1799/176/4083 +f 1799/176/4084 1798/912/4084 1786/2322/4084 +f 2868/2529/4085 2898/2211/4085 2867/2213/4085 +f 1363/3558/4086 2126/3559/4086 2105/3514/4086 +f 1895/243/4087 1588/2925/4087 1961/2924/4087 +f 1948/2825/4088 1875/3547/4088 2144/3565/4088 +f 1948/2825/4089 1884/3546/4089 1875/3547/4089 +f 1369/2824/4090 1336/3548/4090 1884/3546/4090 +f 2407/3566/4091 2907/2457/4091 2906/2458/4091 +f 2949/3532/4092 2446/3567/4092 1731/3549/4092 +f 1141/101/4093 1309/2582/4093 1325/199/4093 +f 1842/3568/4094 1837/3541/4094 1827/1513/4094 +f 1842/220/4095 1841/3564/4095 1837/3543/4095 +f 1886/3569/4096 1901/3570/4096 1908/1418/4096 +f 2283/3571/4097 2337/3572/4097 2368/3555/4097 +f 2155/3573/4098 2271/3574/4098 2391/3575/4098 +f 1798/912/4099 1799/176/4099 1844/2371/4099 +f 1989/1213/4100 1311/2186/4100 2031/2185/4100 +f 1846/1200/4101 1619/2365/4101 1845/178/4101 +f 57/1367/4102 2061/2696/4102 1296/2577/4102 +f 3471/3576/4103 1323/3577/4103 1363/3558/4103 +f 1895/243/4104 557/3506/4104 2094/3560/4104 +f 1807/2302/4105 2067/708/4105 2087/822/4105 +f 2068/1846/4106 2067/708/4106 1807/2302/4106 +f 1977/2720/4107 1958/232/4107 2724/1977/4107 +f 1369/2824/4108 1884/3546/4108 1948/2825/4108 +f 727/352/4109 726/485/4109 492/276/4109 +f 1751/3562/4110 1742/3531/4110 1731/3549/4110 +f 1792/3578/4111 1791/3533/4111 1780/3563/4111 +f 1842/220/4112 1866/2422/4112 1858/3550/4112 +f 1841/3564/4113 1842/220/4113 1858/3550/4113 +f 2574/222/4114 2581/2423/4114 1842/220/4114 +f 1866/2422/4115 2616/2421/4115 1886/3551/4115 +f 1886/3551/4116 2616/2421/4116 1901/3579/4116 +f 2337/3572/4117 2259/3553/4117 2368/3555/4117 +f 1961/2924/4118 1714/1913/4118 1745/3426/4118 +f 2212/3580/4119 2368/3555/4119 1048/3581/4119 +f 2916/851/4120 2915/3582/4120 2906/2458/4120 +f 2274/3295/4121 2247/3583/4121 2350/3584/4121 +f 1170/2162/4122 1078/6/4122 1460/2035/4122 +f 1288/2233/4123 1989/1213/4123 2031/2185/4123 +f 1893/3585/4124 2084/3586/4124 2085/3587/4124 +f 3456/400/4125 2007/2766/4125 1323/3048/4125 +f 1280/3588/4126 2063/3536/4126 2126/3559/4126 +f 2098/3589/4127 1280/3588/4127 2126/3559/4127 +f 2063/3536/4128 1280/3588/4128 2094/3560/4128 +f 1416/3590/4129 1948/2825/4129 2144/3565/4129 +f 2048/322/4130 2069/321/4130 1569/3174/4130 +f 2183/1718/4131 2347/1956/4131 214/1716/4131 +f 2226/3591/4132 2131/3592/4132 2338/3593/4132 +f 3025/3594/4133 3011/3595/4133 3049/3596/4133 +f 2055/3597/4134 2078/3598/4134 2077/3599/4134 +f 2078/3600/4135 4/3601/4135 2112/3602/4135 +f 232/2161/4136 1170/2162/4136 1460/2035/4136 +f 1078/6/4137 1170/2162/4137 1095/4/4137 +f 2100/2172/4138 1158/2171/4138 1286/2338/4138 +f 1128/1576/4139 2119/2374/4139 2104/592/4139 +f 1012/2222/4140 991/2378/4140 3468/2223/4140 +f 1323/3577/4141 2123/3603/4141 1363/3558/4141 +f 2123/3603/4142 1051/3604/4142 2126/3559/4142 +f 1363/3558/4143 2123/3603/4143 2126/3559/4143 +f 2126/3559/4144 1051/3604/4144 2098/3589/4144 +f 1280/3588/4145 2034/241/4145 2094/3560/4145 +f 2034/241/4146 1895/243/4146 2094/3560/4146 +f 1277/100/4147 1364/3219/4147 931/285/4147 +f 1879/1574/4148 1128/1576/4148 2104/592/4148 +f 2067/708/4149 2068/1846/4149 2047/593/4149 +f 1393/2244/4150 1948/3605/4150 1416/61/4150 +f 2552/1854/4151 1023/1856/4151 2544/3606/4151 +f 1320/2686/4152 1236/2685/4152 1593/2628/4152 +f 1027/3127/4153 3441/870/4153 1111/3607/4153 +f 4/3608/4154 1190/3609/4154 1307/3610/4154 +f 1190/3611/4155 130/2032/4155 1307/2031/4155 +f 2548/271/4156 3450/1786/4156 3449/3612/4156 +f 2252/2505/4157 2165/3613/4157 2131/3614/4157 +f 2058/2158/4158 2066/2523/4158 2057/219/4158 +f 2058/2158/4159 2057/219/4159 2044/2156/4159 +f 2897/2566/4160 1923/2461/4160 2882/2212/4160 +f 2007/3615/4161 1174/3616/4161 1323/3577/4161 +f 1323/3577/4162 1174/3616/4162 2123/3603/4162 +f 1280/3588/4163 2098/3589/4163 2034/241/4163 +f 1988/272/4164 1968/2750/4164 1284/1909/4164 +f 602/3241/4165 2887/250/4165 2813/3242/4165 +f 1766/57/4166 1762/407/4166 1981/58/4166 +f 2781/3617/4167 2090/3618/4167 2144/3565/4167 +f 2090/2173/4168 1416/61/4168 2144/3619/4168 +f 1418/63/4169 1393/2244/4169 1416/61/4169 +f 1349/3417/4170 2117/306/4170 2066/2523/4170 +f 2322/2003/4171 2266/3620/4171 2254/3621/4171 +f 2055/3597/4172 2037/3622/4172 2078/3598/4172 +f 2030/87/4173 2042/89/4173 2041/1016/4173 +f 1324/2034/4174 1459/40/4174 232/2161/4174 +f 1534/3131/4175 2897/2566/4175 2898/2211/4175 +f 1535/3246/4176 1753/3063/4176 1521/3062/4176 +f 1326/2758/4177 1364/3219/4177 1277/100/4177 +f 30/2724/4178 2170/2723/4178 1227/28/4178 +f 3213/2206/4179 3279/106/4179 3227/2262/4179 +f 2090/2173/4180 1433/62/4180 1416/61/4180 +f 1122/2343/4181 1178/1662/4181 1179/82/4181 +f 1215/421/4182 1995/2188/4182 1762/407/4182 +f 1319/200/4183 1995/2188/4183 1215/421/4183 +f 561/2361/4184 158/80/4184 1806/79/4184 +f 1575/3181/4185 1843/2469/4185 1816/2471/4185 +f 2381/3265/4186 2172/3552/4186 2401/3266/4186 +f 2167/3477/4187 2244/3623/4187 2309/1132/4187 +f 2003/2490/4188 2190/2489/4188 2247/3583/4188 +f 2037/3622/4189 2113/3624/4189 2078/3598/4189 +f 2078/3598/4190 2113/3624/4190 4/3608/4190 +f 1052/3625/4191 130/3626/4191 1190/3609/4191 +f 2575/3627/4192 130/2032/4192 1430/3628/4192 +f 2061/2696/4193 1713/2980/4193 290/496/4193 +f 1719/284/4194 1711/2216/4194 1568/2215/4194 +f 2768/3629/4195 1980/3289/4195 2062/2136/4195 +f 1927/2870/4196 1569/3174/4196 2069/321/4196 +f 1003/3322/4197 1188/1575/4197 2018/2631/4197 +f 2066/2523/4198 2083/820/4198 2057/219/4198 +f 2117/306/4199 1349/3417/4199 1204/163/4199 +f 2204/3630/4200 2147/3263/4200 2322/2003/4200 +f 3173/310/4201 3212/2167/4201 3189/1637/4201 +f 2390/2830/4202 1970/3631/4202 1362/1261/4202 +f 2370/2558/4203 2342/3212/4203 2246/2036/4203 +f 2304/3632/4204 2281/3633/4204 2076/3634/4204 +f 2168/695/4205 2169/3635/4205 2340/3636/4205 +f 2204/3630/4206 2322/2003/4206 2254/3621/4206 +f 2167/3477/4207 2610/3637/4207 2244/3623/4207 +f 2179/3638/4208 2132/3383/4208 2245/3639/4208 +f 2610/3637/4209 1954/3640/4209 2244/3623/4209 +f 2055/3641/4210 2854/3077/4210 2037/3642/4210 +f 2037/3622/4211 2038/3643/4211 2113/3624/4211 +f 2113/3644/4212 2114/3645/4212 4/3601/4212 +f 4/3608/4213 2114/3646/4213 1190/3609/4213 +f 1052/3625/4214 1430/3647/4214 130/3626/4214 +f 2389/3473/4215 2235/3475/4215 1823/3648/4215 +f 973/3418/4216 2172/3552/4216 2222/3649/4216 +f 2041/1016/4217 2065/821/4217 2082/307/4217 +f 1215/421/4218 1088/111/4218 1041/420/4218 +f 1579/2522/4219 1707/3105/4219 1349/3417/4219 +f 2502/3650/4220 2522/3651/4220 1792/3652/4220 +f 1830/3653/4221 2123/3603/4221 1174/3616/4221 +f 1135/3654/4222 1763/3655/4222 1051/3604/4222 +f 2123/3603/4223 1135/3654/4223 1051/3604/4223 +f 1763/3655/4224 2098/3589/4224 1051/3604/4224 +f 1763/3655/4225 1994/3304/4225 2034/241/4225 +f 2098/3589/4226 1763/3655/4226 2034/241/4226 +f 931/285/4227 1568/2215/4227 1159/2291/4227 +f 1122/2343/4228 1415/1660/4228 1178/1662/4228 +f 1324/2034/4229 1707/3105/4229 1459/40/4229 +f 232/2161/4230 1459/40/4230 1138/42/4230 +f 2166/3656/4231 1880/3657/4231 2232/3429/4231 +f 2872/843/4232 2315/3658/4232 2158/1442/4232 +f 2252/2505/4233 1833/3258/4233 2165/3613/4233 +f 2502/3659/4234 1792/3578/4234 1780/3563/4234 +f 2111/3204/4235 2099/3421/4235 2896/3205/4235 +f 3402/3139/4236 3401/3140/4236 3370/685/4236 +f 2854/3660/4237 2038/3643/4237 2037/3622/4237 +f 2113/3644/4238 2091/3661/4238 2114/3645/4238 +f 2114/3646/4239 2130/3662/4239 1190/3609/4239 +f 1359/2166/4240 1444/1844/4240 823/142/4240 +f 1395/2644/4241 1040/2153/4241 1112/2152/4241 +f 2309/1132/4242 2244/3623/4242 2297/1133/4242 +f 2348/3663/4243 2224/3392/4243 2222/3255/4243 +f 1830/3653/4244 2070/3664/4244 2123/3603/4244 +f 2070/3664/4245 1135/3654/4245 2123/3603/4245 +f 1759/3665/4246 1604/2931/4246 1896/2159/4246 +f 1707/3105/4247 1324/2034/4247 1204/163/4247 +f 1874/2713/4248 1903/2919/4248 1598/2991/4248 +f 1727/3666/4249 515/3667/4249 1903/3668/4249 +f 1871/2583/4250 1003/3322/4250 2018/2631/4250 +f 1158/201/4251 1747/81/4251 1286/2340/4251 +f 33/446/4252 3350/3669/4252 3332/1653/4252 +f 2595/3670/4253 1851/3671/4253 2655/3672/4253 +f 1851/3671/4254 1867/3673/4254 2638/3674/4254 +f 2655/3672/4255 1851/3671/4255 2638/3674/4255 +f 1577/1955/4256 1811/1362/4256 1653/776/4256 +f 2003/2490/4257 2247/3583/4257 2274/3295/4257 +f 2763/3675/4258 2814/3076/4258 2796/3078/4258 +f 1052/3625/4259 1190/3609/4259 2130/3662/4259 +f 2998/2474/4260 3032/3388/4260 3033/67/4260 +f 3057/1411/4261 3080/3676/4261 3032/3388/4261 +f 2340/3677/4262 2169/3678/4262 2386/3369/4262 +f 2266/3679/4263 2285/2534/4263 2254/2536/4263 +f 2165/3613/4264 1833/3258/4264 2535/2/4264 +f 2711/1634/4265 2019/1636/4265 1830/1936/4265 +f 2019/3680/4266 2070/3664/4266 1830/3653/4266 +f 1773/2169/4267 1787/1229/4267 1765/2630/4267 +f 515/2174/4268 1727/3343/4268 1461/46/4268 +f 1905/2500/4269 1003/3322/4269 1925/2214/4269 +f 1904/3681/4270 1903/3668/4270 1874/3682/4270 +f 1904/3681/4271 1727/3666/4271 1903/3668/4271 +f 2288/3683/4272 2243/3684/4272 2312/3385/4272 +f 2321/3685/4273 1833/3686/4273 2252/3687/4273 +f 1955/3491/4274 1956/3493/4274 2763/3688/4274 +f 2814/3689/4275 2013/3690/4275 2854/3660/4275 +f 2013/3690/4276 2039/3691/4276 2038/3643/4276 +f 2854/3660/4277 2013/3690/4277 2038/3643/4277 +f 2039/3692/4278 2091/3661/4278 2113/3644/4278 +f 2038/3643/4279 2039/3691/4279 2113/3624/4279 +f 2114/3646/4280 1306/3693/4280 2130/3662/4280 +f 1333/3517/4281 1136/3516/4281 2109/3694/4281 +f 2347/1956/4282 2183/1718/4282 2268/2504/4282 +f 2366/3695/4283 2308/3458/4283 2213/3696/4283 +f 2225/2418/4284 2360/2417/4284 2357/3328/4284 +f 1130/2675/4285 2375/3697/4285 2217/3698/4285 +f 2070/3664/4286 2020/3699/4286 1135/3654/4286 +f 1945/3700/4287 1763/3655/4287 1135/3654/4287 +f 1945/3700/4288 1797/2986/4288 1994/3304/4288 +f 1763/3655/4289 1945/3700/4289 1994/3304/4289 +f 1159/2291/4290 1871/2583/4290 1309/2582/4290 +f 1965/3701/4291 1904/3681/4291 1874/3682/4291 +f 1906/47/4292 1727/3343/4292 1904/3138/4292 +f 1781/3702/4293 1829/3703/4293 2503/3704/4293 +f 2595/3705/4294 1829/3706/4294 1851/3707/4294 +f 1956/3493/4295 1971/3708/4295 2763/3688/4295 +f 2763/3709/4296 1971/3710/4296 2814/3689/4296 +f 2013/3690/4297 2028/3711/4297 2039/3691/4297 +f 1306/3693/4298 1177/3712/4298 2130/3662/4298 +f 1177/3712/4299 1052/3625/4299 2130/3662/4299 +f 1177/3712/4300 1186/3713/4300 1052/3625/4300 +f 1186/3713/4301 1430/3647/4301 1052/3625/4301 +f 984/3714/4302 1333/3517/4302 2109/3694/4302 +f 2415/3148/4303 2175/3193/4303 2370/2558/4303 +f 2331/10/4304 2362/3485/4304 2399/3474/4304 +f 2020/3699/4305 2070/3664/4305 2019/3680/4305 +f 2020/3699/4306 2032/3715/4306 1135/3654/4306 +f 2124/3716/4307 1797/2986/4307 1945/3700/4307 +f 2051/3717/4308 1874/3682/4308 2173/3718/4308 +f 2051/3717/4309 1965/3701/4309 1874/3682/4309 +f 1896/2159/4310 1904/3138/4310 1965/3719/4310 +f 1024/3720/4311 2320/3384/4311 2377/3721/4311 +f 1760/3722/4312 1781/3723/4312 2256/3724/4312 +f 1782/3725/4313 1781/3726/4313 1760/3727/4313 +f 2228/3728/4314 2232/3429/4314 2330/3729/4314 +f 2722/3730/4315 1942/3731/4315 1941/3492/4315 +f 1942/3731/4316 1962/3732/4316 1956/3493/4316 +f 1941/3492/4317 1942/3731/4317 1956/3493/4317 +f 1956/3493/4318 1962/3732/4318 1971/3708/4318 +f 1971/3710/4319 1972/3733/4319 2814/3689/4319 +f 2814/3689/4320 1972/3733/4320 2013/3690/4320 +f 2028/3711/4321 2079/3734/4321 2039/3691/4321 +f 2079/3734/4322 2092/3735/4322 2091/3736/4322 +f 2039/3691/4323 2079/3734/4323 2091/3736/4323 +f 2092/3735/4324 1306/3693/4324 2114/3646/4324 +f 2091/3736/4325 2092/3735/4325 2114/3646/4325 +f 1907/3737/4326 2389/3473/4326 1823/3648/4326 +f 2398/2756/4327 2389/3473/4327 1907/3737/4327 +f 3307/3738/4328 3215/3739/4328 3281/3740/4328 +f 2204/3741/4329 1024/2330/4329 2151/3742/4329 +f 2387/3431/4330 2204/3741/4330 2151/3742/4330 +f 2960/3049/4331 2952/69/4331 2944/3743/4331 +f 2019/1636/4332 1819/3744/4332 2020/3745/4332 +f 2032/3746/4333 2020/3745/4333 1819/3744/4333 +f 2032/3715/4334 1944/3747/4334 1135/3654/4334 +f 1944/3747/4335 2124/3716/4335 1945/3700/4335 +f 1135/3654/4336 1944/3747/4336 1945/3700/4336 +f 1797/2986/4337 2124/3716/4337 1606/2985/4337 +f 2868/2529/4338 2867/2213/4338 2841/1416/4338 +f 2330/3729/4339 2198/844/4339 2228/3728/4339 +f 2228/3267/4340 2198/160/4340 2200/3264/4340 +f 1752/3748/4341 1760/3727/4341 2255/3749/4341 +f 2041/1016/4342 2042/89/4342 2065/821/4342 +f 1795/3750/4343 1781/3726/4343 1782/3725/4343 +f 1795/3751/4344 1829/3703/4344 1781/3702/4344 +f 1829/3703/4345 1852/3752/4345 1851/3671/4345 +f 2695/3046/4346 1910/2447/4346 2722/3730/4346 +f 2722/3753/4347 1910/3754/4347 1942/3755/4347 +f 1962/3756/4348 1972/3733/4348 1971/3710/4348 +f 1972/3733/4349 2014/3757/4349 2013/3690/4349 +f 2013/3690/4350 2014/3757/4350 2028/3711/4350 +f 2014/3757/4351 2079/3734/4351 2028/3711/4351 +f 1186/3713/4352 984/3714/4352 1430/3647/4352 +f 1350/3097/4353 1333/3517/4353 984/3714/4353 +f 2781/288/4354 1598/2991/4354 1903/2919/4354 +f 2275/2190/4355 2537/3107/4355 2536/2901/4355 +f 2237/3758/4356 2318/3759/4356 2176/3760/4356 +f 2283/3571/4357 2368/3555/4357 2212/3580/4357 +f 2215/2294/4358 2339/2433/4358 2138/2460/4358 +f 2132/2438/4359 2179/3513/4359 2339/2433/4359 +f 1620/286/4360 931/285/4360 1364/3219/4360 +f 2289/3761/4361 2267/3762/4361 2219/3763/4361 +f 1832/3764/4362 1819/3765/4362 2838/3766/4362 +f 1278/3767/4363 2032/3715/4363 1819/3765/4363 +f 3446/22/4364 3508/21/4364 3489/423/4364 +f 2689/1201/4365 2687/1417/4365 2652/724/4365 +f 2173/3718/4366 1924/3768/4366 2051/3717/4366 +f 1759/3769/4367 1965/3701/4367 2051/3717/4367 +f 1303/2037/4368 2136/1679/4368 1367/3770/4368 +f 1752/3771/4369 2255/3207/4369 2466/3206/4369 +f 3185/3772/4370 3224/3773/4370 3196/3774/4370 +f 1815/3775/4371 1829/3703/4371 1795/3751/4371 +f 1851/3671/4372 1868/3776/4372 1867/3673/4372 +f 1889/2448/4373 1910/2447/4373 2695/3046/4373 +f 2980/2936/4374 2998/2474/4374 3033/67/4374 +f 1942/3731/4375 1943/3777/4375 1962/3732/4375 +f 2092/3735/4376 2101/3778/4376 1306/3693/4376 +f 2101/3778/4377 1347/3779/4377 1306/3693/4377 +f 1347/3779/4378 1177/3712/4378 1306/3693/4378 +f 1187/3780/4379 1186/3713/4379 1177/3712/4379 +f 1347/3779/4380 1187/3780/4380 1177/3712/4380 +f 1822/3781/4381 984/3714/4381 1186/3713/4381 +f 1205/3782/4382 1732/3783/4382 2765/3784/4382 +f 2318/3759/4383 2245/3639/4383 2176/3760/4383 +f 1278/3785/4384 1944/3786/4384 2032/3746/4384 +f 1944/3747/4385 2033/3787/4385 2124/3716/4385 +f 2033/3787/4386 1606/2985/4386 2124/3716/4386 +f 2980/2936/4387 3033/67/4387 2960/3049/4387 +f 1790/3788/4388 2051/3717/4388 1924/3768/4388 +f 1790/3789/4389 1820/2250/4389 2051/3790/4389 +f 1820/3791/4390 1759/3769/4390 2051/3717/4390 +f 1965/3719/4391 1759/3665/4391 1896/2159/4391 +f 1743/3792/4392 1752/3748/4392 2466/3793/4392 +f 1612/2366/4393 1619/2365/4393 1618/2440/4393 +f 1815/3775/4394 1852/3752/4394 1829/3703/4394 +f 1852/3752/4395 1859/3794/4395 1851/3671/4395 +f 1851/3671/4396 1859/3794/4396 1868/3776/4396 +f 1921/3795/4397 1943/3777/4397 1942/3731/4397 +f 1910/3754/4398 1921/3796/4398 1942/3755/4398 +f 1943/3777/4399 1963/3797/4399 1962/3732/4399 +f 1963/3798/4400 1972/3733/4400 1962/3756/4400 +f 1972/3733/4401 1973/3799/4401 2014/3757/4401 +f 2079/3734/4402 2101/3778/4402 2092/3735/4402 +f 1822/3781/4403 1350/3097/4403 984/3714/4403 +f 551/3800/4404 1144/3801/4404 169/3802/4404 +f 1144/3801/4405 1205/3782/4405 169/3802/4405 +f 1928/678/4406 2723/653/4406 1732/3803/4406 +f 1278/3767/4407 1819/3765/4407 1832/3764/4407 +f 1089/3804/4408 1944/3786/4408 1278/3785/4408 +f 2021/3805/4409 2033/3787/4409 1944/3747/4409 +f 1442/3806/4410 1606/2985/4410 2033/3787/4410 +f 1905/2500/4411 1927/2870/4411 2069/321/4411 +f 1647/2659/4412 1295/3807/4412 1740/3285/4412 +f 1783/3808/4413 1795/3750/4413 1782/3725/4413 +f 1921/3795/4414 1922/1940/4414 1943/3777/4414 +f 1943/3033/4415 1957/2290/4415 1963/3798/4415 +f 1963/3798/4416 1973/3799/4416 1972/3733/4416 +f 1973/3799/4417 2004/1177/4417 2014/3757/4417 +f 2004/1177/4418 2029/2803/4418 2014/3757/4418 +f 2079/3734/4419 2080/3809/4419 2101/3778/4419 +f 1347/3779/4420 618/3810/4420 1187/3780/4420 +f 1388/3811/4421 1186/3713/4421 1187/3780/4421 +f 618/3810/4422 1388/3811/4422 1187/3780/4422 +f 1388/3811/4423 1822/3781/4423 1186/3713/4423 +f 1822/3812/4424 1405/3813/4424 1350/737/4424 +f 1746/3814/4425 1928/3815/4425 1732/3783/4425 +f 2386/3369/4426 2169/3678/4426 2323/3816/4426 +f 1206/944/4427 1278/3767/4427 1832/3764/4427 +f 2856/3817/4428 2059/3818/4428 1924/3768/4428 +f 2059/3818/4429 1790/3788/4429 1924/3768/4429 +f 1820/2250/4430 1604/2931/4430 1759/3665/4430 +f 1774/3189/4431 1789/2707/4431 1773/2169/4431 +f 1798/912/4432 1844/2371/4432 1605/540/4432 +f 1753/3819/4433 1752/3748/4433 1743/3792/4433 +f 1753/3819/4434 1761/3820/4434 1752/3748/4434 +f 1796/591/4435 1795/3750/4435 1783/3808/4435 +f 1796/3821/4436 1815/3775/4436 1795/3751/4436 +f 1796/3821/4437 1816/2471/4437 1815/3775/4437 +f 1816/2471/4438 1852/3752/4438 1815/3775/4438 +f 2430/3822/4439 2419/2430/4439 2372/3823/4439 +f 2926/2970/4440 2925/3824/4440 2915/3582/4440 +f 2029/2803/4441 2056/2318/4441 2079/3734/4441 +f 2014/3757/4442 2029/2803/4442 2079/3734/4442 +f 2079/3734/4443 2056/2318/4443 2080/3809/4443 +f 2080/3809/4444 2102/2268/4444 2101/3778/4444 +f 2101/3778/4445 2115/3825/4445 1347/3779/4445 +f 2107/3096/4446 364/2308/4446 2128/3826/4446 +f 2128/3826/4447 364/2308/4447 551/3800/4447 +f 364/2308/4448 1144/3801/4448 551/3800/4448 +f 1746/3814/4449 1732/3783/4449 1205/3782/4449 +f 1935/886/4450 1928/3815/4450 1746/3814/4450 +f 2088/3827/4451 2129/3828/4451 1928/678/4451 +f 3500/325/4452 1029/2275/4452 3489/753/4452 +f 2129/3828/4453 1206/3829/4453 1832/3073/4453 +f 1206/944/4454 2122/943/4454 1278/3767/4454 +f 1278/3767/4455 2122/943/4455 1089/3830/4455 +f 2118/2829/4456 1944/3747/4456 1089/3830/4456 +f 2118/2829/4457 2021/3805/4457 1944/3747/4457 +f 1439/3831/4458 2033/3787/4458 2021/3805/4458 +f 1683/2658/4459 1728/2660/4459 204/3292/4459 +f 1816/2471/4460 1853/2470/4460 1852/3752/4460 +f 1943/3033/4461 3355/2288/4461 1957/2290/4461 +f 1957/3832/4462 3390/3833/4462 1963/3797/4462 +f 1963/3798/4463 3390/1375/4463 1973/3799/4463 +f 1973/3799/4464 3390/1375/4464 2004/1177/4464 +f 2056/2318/4465 2081/2317/4465 2080/3809/4465 +f 2102/2268/4466 2115/3825/4466 2101/3778/4466 +f 1281/3834/4467 618/3810/4467 1347/3779/4467 +f 821/2395/4468 1822/3781/4468 1388/3811/4468 +f 821/2395/4469 1151/2306/4469 1405/3095/4469 +f 1822/3781/4470 821/2395/4470 1405/3095/4470 +f 1151/2306/4471 364/2308/4471 2107/3096/4471 +f 1405/3095/4472 1151/2306/4472 2107/3096/4472 +f 467/2231/4473 1131/2232/4473 1144/3801/4473 +f 364/2308/4474 467/2231/4474 1144/3801/4474 +f 1131/2232/4475 1205/3782/4475 1144/3801/4475 +f 1327/2832/4476 1746/3814/4476 1205/3782/4476 +f 2088/3827/4477 1206/3829/4477 2129/3828/4477 +f 2122/943/4478 2118/2829/4478 1089/3830/4478 +f 2688/1203/4479 1969/1202/4479 2703/3540/4479 +f 1990/3329/4480 2891/3835/4480 2241/3836/4480 +f 2059/3818/4481 2856/3817/4481 2159/3837/4481 +f 1992/2251/4482 1790/3789/4482 2059/3838/4482 +f 1790/3789/4483 1992/2251/4483 1820/2250/4483 +f 1537/3114/4484 1555/2316/4484 1536/2813/4484 +f 1784/2315/4485 1783/3808/4485 1761/3820/4485 +f 1784/2315/4486 1796/591/4486 1783/3808/4486 +f 3265/3839/4487 1859/3794/4487 1860/3840/4487 +f 2466/3841/4488 2447/3842/4488 1743/3843/4488 +f 2593/2977/4489 2607/363/4489 2617/3143/4489 +f 2116/2267/4490 2115/3825/4490 2102/2268/4490 +f 2115/3825/4491 2116/2267/4491 1347/3779/4491 +f 1347/3779/4492 2116/2267/4492 1281/3834/4492 +f 1289/2320/4493 618/3810/4493 1281/3834/4493 +f 1289/2320/4494 1152/2501/4494 618/3810/4494 +f 1152/2501/4495 1414/2336/4495 618/3810/4495 +f 1414/2336/4496 1388/3811/4496 618/3810/4496 +f 1414/2336/4497 228/5/4497 1388/3811/4497 +f 228/5/4498 821/2395/4498 1388/3811/4498 +f 1327/2832/4499 1205/3782/4499 1131/2232/4499 +f 1327/2832/4500 1935/886/4500 1746/3814/4500 +f 833/885/4501 1928/3815/4501 1935/886/4501 +f 833/885/4502 2088/187/4502 1928/3815/4502 +f 1988/3844/4503 2021/3845/4503 2118/3846/4503 +f 1461/46/4504 1463/637/4504 2090/2173/4504 +f 1724/408/4505 1871/2583/4505 2018/2631/4505 +f 1916/3190/4506 1992/2251/4506 2059/3838/4506 +f 1758/2827/4507 1774/3183/4507 1773/2635/4507 +f 1535/3093/4508 1761/3820/4508 1753/3819/4508 +f 3497/656/4509 3463/300/4509 3490/1009/4509 +f 1535/3093/4510 1784/2315/4510 1761/3820/4510 +f 1796/3821/4511 1575/3181/4511 1816/2471/4511 +f 1852/3752/4512 1853/2470/4512 1859/3794/4512 +f 2607/363/4513 2621/1608/4513 2617/3143/4513 +f 2029/2803/4514 2040/1017/4514 2056/2318/4514 +f 2081/2317/4515 2103/116/4515 2102/2268/4515 +f 2080/3809/4516 2081/2317/4516 2102/2268/4516 +f 2116/2267/4517 1270/2727/4517 1281/3834/4517 +f 1270/2727/4518 1289/2320/4518 1281/3834/4518 +f 3361/3847/4519 3422/3848/4519 3383/3849/4519 +f 1828/2352/4520 427/696/4520 2168/695/4520 +f 2076/2808/4521 2281/3850/4521 2390/2830/4521 +f 2304/3632/4522 2214/3851/4522 2281/3633/4522 +f 2201/3852/4523 2302/1188/4523 2157/1187/4523 +f 2413/3511/4524 2907/2457/4524 2407/3566/4524 +f 2384/3853/4525 1221/3854/4525 1219/45/4525 +f 2335/1890/4526 1019/3215/4526 1887/1891/4526 +f 1835/3855/4527 2515/3856/4527 1813/3857/4527 +f 1222/1084/4528 2027/1903/4528 2384/2656/4528 +f 216/3858/4529 2283/3571/4529 2243/3859/4529 +f 2699/264/4530 2296/3860/4530 2674/265/4530 +f 3011/3595/4531 3072/3861/4531 3049/3596/4531 +f 2223/1186/4532 2302/1188/4532 2311/3862/4532 +f 3146/3863/4533 3132/3864/4533 3119/3865/4533 +f 2373/2192/4534 2152/3866/4534 2135/2193/4534 +f 2358/1111/4535 2392/3419/4535 2134/1112/4535 +f 2153/3413/4536 2237/3758/4536 2176/3760/4536 +f 2351/3526/4537 2481/2144/4537 2205/3867/4537 +f 2399/3474/4538 2362/3485/4538 2199/3486/4538 +f 2257/1927/4539 1932/1334/4539 1166/602/4539 +f 985/3868/4540 2161/1082/4540 2027/3249/4540 +f 1823/3648/4541 1110/3869/4541 2194/3870/4541 +f 2140/3256/4542 2035/3391/4542 2260/3871/4542 +f 2295/3872/4543 2599/3873/4543 2329/3874/4543 +f 2310/3341/4544 2297/3875/4544 2263/3876/4544 +f 2917/849/4545 2916/851/4545 2908/3510/4545 +f 3174/2989/4546 3173/310/4546 3141/2833/4546 +f 2423/2030/4547 2584/3877/4547 1307/2031/4547 +f 3493/399/4548 3440/2538/4548 3475/664/4548 +f 2217/3698/4549 2375/3697/4549 2226/3591/4549 +f 2301/3878/4550 2179/3638/4550 2318/3759/4550 +f 188/3494/4551 2139/3879/4551 2145/3495/4551 +f 2342/3212/4552 2903/2557/4552 2900/3211/4552 +f 345/94/4553 2400/3880/4553 2362/3485/4553 +f 2362/3485/4554 2400/3880/4554 2284/3339/4554 +f 1932/1334/4555 1146/425/4555 1166/602/4555 +f 2267/3881/4556 2289/1443/4556 2876/2839/4556 +f 2338/3882/4557 2131/3614/4557 2165/3613/4557 +f 233/3883/4558 2242/2406/4558 2282/2408/4558 +f 2392/3419/4559 2260/3884/4559 2134/1112/4559 +f 1932/1334/4560 2333/3885/4560 1115/426/4560 +f 2333/3886/4561 2385/3887/4561 1079/3888/4561 +f 1115/426/4562 2333/3885/4562 1079/2453/4562 +f 1079/2453/4563 2385/3889/4563 2329/2540/4563 +f 1107/2359/4564 1106/2491/4564 1082/3890/4564 +f 1130/2675/4565 2217/3698/4565 2396/2661/4565 +f 233/3883/4566 2282/2408/4566 2877/3891/4566 +f 2365/3368/4567 2383/3350/4567 2304/3892/4567 +f 2365/3893/4568 2304/3894/4568 2076/2808/4568 +f 2391/3575/4569 2271/3574/4569 2596/3895/4569 +f 2830/2498/4570 2859/2208/4570 1185/2499/4570 +f 652/1140/4571 2286/3896/4571 1920/1141/4571 +f 2386/3369/4572 2323/3816/4572 2336/2488/4572 +f 362/357/4573 2393/636/4573 201/694/4573 +f 2246/2036/4574 2342/3212/4574 2335/1890/4574 +f 2336/2488/4575 2201/3852/4575 2208/3897/4575 +f 2281/3850/4576 2334/2194/4576 2390/2830/4576 +f 2178/2552/4577 2184/2880/4577 2164/2553/4577 +f 2218/2210/4578 2137/3898/4578 2859/2208/4578 +f 2329/2540/4579 1068/2390/4579 1079/2453/4579 +f 2190/2489/4580 1920/2416/4580 2225/2418/4580 +f 2583/3218/4581 2523/3217/4581 2595/3705/4581 +f 2287/2314/4582 2310/3899/4582 2211/3900/4582 +f 2247/3583/4583 2190/2489/4583 2225/2418/4583 +f 2035/3391/4584 2299/3901/4584 2260/3871/4584 +f 2286/3902/4585 2218/2210/4585 2360/2417/4585 +f 3227/2262/4586 3305/167/4586 3240/3903/4586 +f 2238/3904/4587 1828/2352/4587 2340/3636/4587 +f 1828/2352/4588 2168/695/4588 2340/3636/4588 +f 2049/3905/4589 2238/3906/4589 2365/3893/4589 +f 1060/3907/4590 2469/3908/4590 3422/3848/4590 +f 2214/3851/4591 2304/3632/4591 2383/3909/4591 +f 2359/3910/4592 2208/3897/4592 2201/3852/4592 +f 2360/2417/4593 2218/2210/4593 2064/2209/4593 +f 2134/3911/4594 2251/3912/4594 2221/2313/4594 +f 2265/3913/4595 2133/3914/4595 2155/3915/4595 +f 2815/3250/4596 1221/3916/4596 2384/3248/4596 +f 2385/3887/4597 2295/3872/4597 2329/3874/4597 +f 2349/3917/4598 2214/3349/4598 1794/3918/4598 +f 1653/776/4599 1578/3919/4599 1577/1955/4599 +f 2598/3920/4600 2295/3872/4600 2278/3921/4600 +f 2373/3922/4601 2214/3349/4601 2349/3917/4601 +f 1343/2611/4602 2265/3913/4602 1509/3923/4602 +f 1970/3631/4603 2334/2194/4603 2381/3265/4603 +f 2049/3905/4604 2365/3893/4604 2076/2808/4604 +f 2225/2418/4605 2357/3328/4605 1990/3329/4605 +f 2374/3370/4606 2386/3369/4606 2336/2488/4606 +f 2353/3924/4607 2245/3639/4607 1048/3925/4607 +f 2862/2392/4608 2158/1442/4608 2861/3926/4608 +f 3381/684/4609 3402/3139/4609 3370/685/4609 +f 201/694/4610 2393/636/4610 2168/695/4610 +f 2183/1718/4611 1028/3037/4611 1833/3258/4611 +f 1783/3808/4612 1782/3725/4612 1752/3748/4612 +f 2323/3816/4613 2190/2489/4613 2336/2488/4613 +f 3470/281/4614 3490/1009/4614 870/2400/4614 +f 2169/3635/4615 2168/695/4615 837/2427/4615 +f 2443/848/4616 2415/3148/4616 2290/846/4616 +f 2227/1441/4617 2289/1443/4617 2219/3927/4617 +f 2257/1927/4618 2327/3928/4618 1932/1334/4618 +f 1932/1334/4619 2327/3928/4619 2333/3885/4619 +f 2327/3929/4620 2270/3930/4620 2333/3886/4620 +f 1261/29/4621 2180/2641/4621 2206/1128/4621 +f 2334/2194/4622 2281/3850/4622 2373/2192/4622 +f 2324/3931/4623 1120/126/4623 2277/881/4623 +f 2374/3370/4624 2336/2488/4624 2208/3897/4624 +f 2270/3930/4625 2385/3887/4625 2333/3886/4625 +f 78/811/4626 3218/548/4626 93/804/4626 +f 1794/3918/4627 2214/3349/4627 2188/3351/4627 +f 1814/2201/4628 1813/2561/4628 2305/3932/4628 +f 2921/3933/4629 2936/3934/4629 2929/2508/4629 +f 2278/3921/4630 2295/3872/4630 2385/3887/4630 +f 2271/3935/4631 1061/517/4631 1055/926/4631 +f 2262/3936/4632 2358/3937/4632 2272/3938/4632 +f 1102/1171/4633 2133/1684/4633 1114/1172/4633 +f 2390/2830/4634 2334/2194/4634 1970/3631/4634 +f 2064/2209/4635 2891/3835/4635 1990/3329/4635 +f 837/2427/4636 657/2396/4636 2229/1142/4636 +f 2398/2756/4637 2361/608/4637 2389/3473/4637 +f 2144/1366/4638 1875/2973/4638 2467/289/4638 +f 2872/843/4639 2350/3584/4639 2315/3658/4639 +f 2399/3474/4640 2199/3486/4640 2235/3475/4640 +f 2155/3573/4641 2149/3939/4641 2271/3574/4641 +f 456/8/4642 2331/10/4642 2361/608/4642 +f 2334/2194/4643 2135/2193/4643 2381/3265/4643 +f 2325/3940/4644 2269/3941/4644 2326/3942/4644 +f 3279/106/4645 3342/165/4645 3305/167/4645 +f 3279/106/4646 3305/167/4646 3227/2262/4646 +f 2149/3939/4647 1061/3943/4647 2271/3574/4647 +f 2380/3260/4648 2346/1274/4648 2381/3265/4648 +f 2331/10/4649 2399/3474/4649 2361/608/4649 +f 1114/2605/4650 2133/3914/4650 2265/3913/4650 +f 2214/3349/4651 2373/3922/4651 2281/3944/4651 +f 2178/2552/4652 977/2543/4652 2697/2542/4652 +f 2138/2460/4653 2328/2459/4653 813/1957/4653 +f 2257/1927/4654 2192/1926/4654 2327/3928/4654 +f 3243/2445/4655 3242/3945/4655 3228/2446/4655 +f 2290/846/4656 2415/3148/4656 2370/2558/4656 +f 2180/2641/4657 2195/3946/4657 2206/1128/4657 +f 3466/1713/4658 2253/3947/4658 3479/1714/4658 +f 2201/2331/4659 2003/3948/4659 2191/2332/4659 +f 2363/3330/4660 2332/990/4660 2379/3356/4660 +f 2132/3383/4661 2312/3385/4661 2245/3639/4661 +f 2807/3949/4662 2138/2460/4662 813/1957/4662 +f 1907/3737/4663 1823/3648/4663 2375/3697/4663 +f 2359/3910/4664 2201/3852/4664 2157/1187/4664 +f 2270/3930/4665 2278/3921/4665 2385/3887/4665 +f 1916/2410/4666 2159/3837/4666 2171/2411/4666 +f 1920/2416/4667 2286/3902/4667 2360/2417/4667 +f 1227/28/4668 2170/2723/4668 2180/2641/4668 +f 2170/2723/4669 2189/3950/4669 2180/2641/4669 +f 2180/2641/4670 2189/3950/4670 2195/3946/4670 +f 2195/3951/4671 163/2652/4671 2206/2633/4671 +f 1760/3727/4672 1752/3748/4672 1782/3725/4672 +f 2228/3728/4673 2147/3430/4673 2232/3429/4673 +f 2320/3384/4674 2288/3683/4674 2312/3385/4674 +f 2375/3697/4675 1823/3648/4675 2194/3870/4675 +f 2171/3952/4676 2170/2723/4676 1449/2725/4676 +f 3485/326/4677 3436/1372/4677 1101/2196/4677 +f 1048/3581/4678 2317/3953/4678 2300/3954/4678 +f 1110/3955/4679 2213/2506/4679 2194/3956/4679 +f 2219/3957/4680 2267/3958/4680 2203/162/4680 +f 2152/3959/4681 2222/3255/4681 2172/3960/4681 +f 2173/3718/4682 2856/3817/4682 1924/3768/4682 +f 2076/2808/4683 2390/2830/4683 1361/2816/4683 +f 3141/2833/4684 3140/1218/4684 3113/1220/4684 +f 3506/1947/4685 1980/3289/4685 2768/3629/4685 +f 2171/3961/4686 2181/3962/4686 2170/3963/4686 +f 2170/2723/4687 2181/3964/4687 2189/3950/4687 +f 2207/3965/4688 2195/3966/4688 2189/3967/4688 +f 2207/3965/4689 163/3968/4689 2195/3966/4689 +f 2286/3896/4690 1050/2287/4690 2137/2279/4690 +f 2188/3351/4691 2208/3897/4691 2359/3910/4691 +f 2227/1441/4692 2219/3927/4692 2203/3445/4692 +f 2154/3969/4693 1283/2377/4693 1266/2733/4693 +f 2135/2193/4694 2152/3866/4694 2172/3552/4694 +f 1509/3923/4695 2265/3913/4695 2155/3915/4695 +f 1794/3918/4696 2188/3351/4696 2359/3910/4696 +f 2300/3954/4697 2317/3953/4697 1145/3970/4697 +f 2186/3971/4698 2189/3967/4698 2181/3962/4698 +f 2186/3971/4699 2207/3965/4699 2189/3967/4699 +f 163/3968/4700 2207/3965/4700 3466/3972/4700 +f 2272/3938/4701 2221/2313/4701 2287/2314/4701 +f 2272/3938/4702 2287/2314/4702 2211/3900/4702 +f 216/3858/4703 2337/3572/4703 2283/3571/4703 +f 2236/3973/4704 2310/3341/4704 2263/3876/4704 +f 2316/2535/4705 2243/3859/4705 2254/2536/4705 +f 2153/3413/4706 2176/3760/4706 231/3414/4706 +f 1205/3782/4707 2765/3784/4707 169/3802/4707 +f 2498/2525/4708 2193/847/4708 2230/3974/4708 +f 2498/2525/4709 2230/3974/4709 2231/3975/4709 +f 2856/3817/4710 2181/3976/4710 2171/2411/4710 +f 2159/3837/4711 2856/3817/4711 2171/2411/4711 +f 2856/3977/4712 2871/3978/4712 2181/3962/4712 +f 2871/3978/4713 2186/3971/4713 2181/3962/4713 +f 999/3979/4714 2505/3980/4714 2541/3981/4714 +f 2226/3591/4715 2375/3697/4715 2194/3870/4715 +f 1172/1690/4716 365/145/4716 616/1784/4716 +f 2300/3507/4717 231/3414/4717 2176/3760/4717 +f 2368/3555/4718 2895/3554/4718 2317/3953/4718 +f 3505/353/4719 3476/355/4719 1015/751/4719 +f 2859/3982/4720 2137/2279/4720 1203/2278/4720 +f 2233/3983/4721 2276/3984/4721 2230/3974/4721 +f 2305/3932/4722 2231/2299/4722 2276/2298/4722 +f 2379/3356/4723 2401/3266/4723 2148/3407/4723 +f 2152/3959/4724 2349/3917/4724 2348/3663/4724 +f 2196/3985/4725 2307/2426/4725 2364/2425/4725 +f 2807/3949/4726 2209/2292/4726 2215/2294/4726 +f 2310/3341/4727 2248/3345/4727 2297/3875/4727 +f 2244/3623/4728 2308/3986/4728 2297/1133/4728 +f 2221/2313/4729 2251/3912/4729 2142/3247/4729 +f 2291/3987/4730 2131/3614/4730 2194/3956/4730 +f 3428/759/4731 3504/246/4731 2424/245/4731 +f 2318/3988/4732 2237/3989/4732 2301/3990/4732 +f 2440/1881/4733 2429/1886/4733 957/2509/4733 +f 2179/3513/4734 2301/3990/4734 2328/2459/4734 +f 2239/3991/4735 2253/699/4735 2207/3965/4735 +f 2199/3992/4736 2284/3993/4736 2236/3994/4736 +f 2993/2176/4737 2439/2906/4737 2457/3995/4737 +f 2305/3932/4738 1813/2561/4738 2231/2299/4738 +f 1110/3955/4739 2366/3996/4739 2213/2506/4739 +f 2744/2119/4740 3435/3053/4740 3450/3997/4740 +f 2536/2901/4741 2294/2202/4741 2275/2190/4741 +f 2152/3959/4742 2373/3922/4742 2349/3917/4742 +f 4/3608/4743 1307/3610/4743 2112/3998/4743 +f 2961/2937/4744 2980/2936/4744 2960/3049/4744 +f 2264/698/4745 2313/3999/4745 3425/313/4745 +f 2926/2229/4746 2945/3165/4746 2944/2230/4746 +f 1954/3640/4747 2807/3949/4747 813/1957/4747 +f 813/1957/4748 2347/1956/4748 1954/3640/4748 +f 2244/3623/4749 1954/3640/4749 2185/4000/4749 +f 2133/4001/4750 2149/3939/4750 2155/3573/4750 +f 1888/3476/4751 1996/2424/4751 2307/2426/4751 +f 2252/3687/4752 2268/4002/4752 2321/3685/4752 +f 2260/3871/4753 2707/4003/4753 2134/3911/4753 +f 30/2724/4754 1227/28/4754 1256/236/4754 +f 2268/2504/4755 2183/1718/4755 2321/4004/4755 +f 1132/301/4756 870/2400/4756 3451/1929/4756 +f 2207/4005/4757 2253/3947/4757 3466/1713/4757 +f 2945/4006/4758 2960/3049/4758 2944/3743/4758 +f 2642/4007/4759 2314/4008/4759 2376/4009/4759 +f 2353/3924/4760 1048/3925/4760 2300/3507/4760 +f 2225/2418/4761 1990/3329/4761 2350/3584/4761 +f 2498/2525/4762 2477/2524/4762 2443/848/4762 +f 2881/4010/4763 2273/4011/4763 1934/4012/4763 +f 2273/4011/4764 2367/4013/4764 2296/3860/4764 +f 2241/3836/4765 2891/3835/4765 2861/3926/4765 +f 2370/2558/4766 2246/2036/4766 2290/846/4766 +f 2360/2417/4767 2064/2209/4767 2357/3328/4767 +f 2224/3392/4768 2182/768/4768 2141/770/4768 +f 2873/4014/4769 2239/3991/4769 2207/3965/4769 +f 1082/3890/4770 1106/2491/4770 1087/2516/4770 +f 2313/4015/4771 2292/125/4771 2314/4016/4771 +f 2367/4013/4772 2273/4011/4772 2881/4010/4772 +f 2891/3835/4773 2326/3942/4773 2861/3926/4773 +f 2284/3339/4774 2400/3880/4774 2211/3340/4774 +f 2361/608/4775 2399/3474/4775 2389/3473/4775 +f 763/1493/4776 750/1491/4776 437/2619/4776 +f 2151/3742/4777 1024/2330/4777 2209/2292/4777 +f 2331/10/4778 345/94/4778 2362/3485/4778 +f 2223/1186/4779 2311/3862/4779 2330/3729/4779 +f 2314/4008/4780 2343/4017/4780 2376/4009/4780 +f 2234/4018/4781 2296/3860/4781 2367/4013/4781 +f 1578/3919/4782 1653/776/4782 80/209/4782 +f 2866/4019/4783 2317/3953/4783 2895/3554/4783 +f 1087/2516/4784 1106/2491/4784 1097/2492/4784 +f 2365/4020/4785 2238/3904/4785 2340/3636/4785 +f 2213/2506/4786 2252/2505/4786 2291/3987/4786 +f 2147/3430/4787 2204/3741/4787 2387/3431/4787 +f 2401/3266/4788 973/3418/4788 2148/3407/4788 +f 2292/133/4789 2343/4017/4789 2314/4008/4789 +f 3223/4021/4790 1498/4022/4790 3224/3773/4790 +f 2336/2488/4791 2003/2490/4791 2201/3852/4791 +f 2177/4023/4792 2187/4024/4792 2881/4010/4792 +f 2881/4010/4793 2187/4024/4793 2367/4013/4793 +f 2187/4025/4794 2369/4026/4794 2367/4027/4794 +f 1913/4028/4795 2718/4029/4795 2234/4018/4795 +f 652/1140/4796 1050/2287/4796 2286/3896/4796 +f 233/3883/4797 2285/2534/4797 2266/3679/4797 +f 2188/3351/4798 2383/3350/4798 2208/3897/4798 +f 2147/3263/4799 2220/2004/4799 2322/2003/4799 +f 2200/3264/4800 2198/160/4800 2203/162/4800 +f 2143/2636/4801 2192/4030/4801 2197/2637/4801 +f 2365/3368/4802 2374/3370/4802 2383/3350/4802 +f 558/635/4803 1050/2287/4803 652/1140/4803 +f 2376/4009/4804 2388/4031/4804 2177/4023/4804 +f 2369/4032/4805 2234/4018/4805 2367/4013/4805 +f 2246/2036/4806 2261/1889/4806 2193/847/4806 +f 2380/3260/4807 2401/3266/4807 2379/3356/4807 +f 2143/2636/4808 1509/3923/4808 2192/4030/4808 +f 2288/3683/4809 2254/3621/4809 2243/3684/4809 +f 2343/4017/4810 2388/4031/4810 2376/4009/4810 +f 2187/4024/4811 2177/4023/4811 2388/4031/4811 +f 2258/4033/4812 2234/4018/4812 2369/4032/4812 +f 2258/4033/4813 1913/4028/4813 2234/4018/4813 +f 2549/1515/4814 1842/3568/4814 1827/1513/4814 +f 2176/3760/4815 2353/3924/4815 2300/3507/4815 +f 2397/2642/4816 1907/3737/4816 1130/2675/4816 +f 633/2052/4817 965/1978/4817 1250/2752/4817 +f 2192/4034/4818 1509/4035/4818 2327/3929/4818 +f 2250/2407/4819 2203/3445/4819 2267/3881/4819 +f 1120/126/4820 2324/3931/4820 2343/127/4820 +f 2355/4036/4821 2187/4024/4821 2388/4031/4821 +f 2162/4037/4822 2718/4029/4822 1913/4028/4822 +f 1833/3258/4823 2321/4004/4823 2183/1718/4823 +f 1804/725/4824 2305/3932/4824 1778/726/4824 +f 2267/3881/4825 1959/4038/4825 2250/2407/4825 +f 2324/3931/4826 2355/4039/4826 2343/127/4826 +f 2343/4017/4827 2355/4036/4827 2388/4031/4827 +f 1804/725/4828 1791/2191/4828 2294/2202/4828 +f 1954/3640/4829 2347/1956/4829 2268/2504/4829 +f 2185/4000/4830 1954/3640/4830 2268/2504/4830 +f 2288/3683/4831 2204/3630/4831 2254/3621/4831 +f 1362/1261/4832 1970/3631/4832 2346/1274/4832 +f 2316/2535/4833 216/3858/4833 2243/3859/4833 +f 2345/347/4834 2380/3260/4834 2379/3356/4834 +f 1075/2550/4835 1263/154/4835 1172/1690/4835 +f 2355/4040/4836 1290/4041/4836 2187/4025/4836 +f 2187/4025/4837 1290/4041/4837 2369/4026/4837 +f 2160/4042/4838 1913/4028/4838 2258/4033/4838 +f 427/696/4839 120/494/4839 201/694/4839 +f 2225/2418/4840 2350/3584/4840 2247/3583/4840 +f 1823/3648/4841 2235/3475/4841 1110/3869/4841 +f 2312/3385/4842 2283/4043/4842 2212/4044/4842 +f 2263/3876/4843 2297/3875/4843 2308/3458/4843 +f 2217/3698/4844 2226/3591/4844 2352/4045/4844 +f 2199/3486/4845 2236/3973/4845 1110/3869/4845 +f 2324/4046/4846 2356/4047/4846 2355/4036/4846 +f 2355/4040/4847 2356/4048/4847 1290/4041/4847 +f 1290/4041/4848 1953/4049/4848 2369/4026/4848 +f 2369/4032/4849 1949/4050/4849 2258/4033/4849 +f 2160/4042/4850 2162/4037/4850 1913/4028/4850 +f 2365/3368/4851 2340/3677/4851 2386/3369/4851 +f 2236/3973/4852 2263/3876/4852 2366/3695/4852 +f 2245/3639/4853 2212/4044/4853 1048/3925/4853 +f 1063/4051/4854 1068/4052/4854 2599/3873/4854 +f 2781/288/4855 515/2920/4855 2090/4053/4855 +f 195/1336/4856 199/1319/4856 178/1320/4856 +f 2320/3384/4857 2204/3630/4857 2288/3683/4857 +f 1794/3918/4858 2359/3910/4858 2182/768/4858 +f 2293/2790/4859 2324/3931/4859 2277/881/4859 +f 2293/2790/4860 2356/4054/4860 2324/3931/4860 +f 1949/4050/4861 2160/4042/4861 2258/4033/4861 +f 2237/3989/4862 2153/1194/4862 2482/2327/4862 +f 2271/3574/4863 1055/4055/4863 2596/3895/4863 +f 2301/3990/4864 2237/3989/4864 2482/2327/4864 +f 2322/2003/4865 2382/2005/4865 2266/3620/4865 +f 2272/3938/4866 2358/3937/4866 2221/2313/4866 +f 1996/2424/4867 1888/3476/4867 2251/3912/4867 +f 2707/4003/4868 2251/3912/4868 2134/3911/4868 +f 2860/4056/4869 2770/2225/4869 2269/3941/4869 +f 2356/4048/4870 2394/4057/4870 1290/4041/4870 +f 2394/4057/4871 1953/4049/4871 1290/4041/4871 +f 2280/4058/4872 2369/4032/4872 1953/4059/4872 +f 2280/4058/4873 1949/4050/4873 2369/4032/4873 +f 2320/4060/4874 2132/2438/4874 2377/2293/4874 +f 1130/2675/4875 1907/3737/4875 2375/3697/4875 +f 2891/3835/4876 2325/3940/4876 2326/3942/4876 +f 2176/3760/4877 2245/3639/4877 2353/3924/4877 +f 2400/3880/4878 2378/3332/4878 2211/3340/4878 +f 2263/3876/4879 2308/3458/4879 2366/3695/4879 +f 2711/1634/4880 1830/1936/4880 2543/1935/4880 +f 2293/2745/4881 1223/2741/4881 2356/4048/4881 +f 2356/4048/4882 1223/2741/4882 2394/4057/4882 +f 2394/4057/4883 2395/4061/4883 1953/4049/4883 +f 2146/4062/4884 2160/4042/4884 1949/4050/4884 +f 2245/3639/4885 2312/3385/4885 2212/4044/4885 +f 2236/3973/4886 2284/3339/4886 2310/3341/4886 +f 1833/3258/4887 2060/3/4887 2535/2/4887 +f 1509/3923/4888 2155/3915/4888 2327/4063/4888 +f 1804/725/4889 1814/2201/4889 2305/3932/4889 +f 34/2672/4890 2397/2642/4890 1130/2675/4890 +f 2190/2489/4891 2229/4064/4891 1920/2416/4891 +f 1223/2741/4892 2395/4061/4892 2394/4057/4892 +f 2146/4062/4893 2303/1847/4893 2160/4042/4893 +f 1110/3869/4894 2236/3973/4894 2366/3695/4894 +f 2332/990/4895 2345/347/4895 2379/3356/4895 +f 2155/3573/4896 2270/3930/4896 2327/3929/4896 +f 1752/3748/4897 1761/3820/4897 1783/3808/4897 +f 2150/4065/4898 2407/3566/4898 2906/2458/4898 +f 1318/2599/4899 2265/3913/4899 1343/2611/4899 +f 2213/2506/4900 2291/3987/4900 2194/3956/4900 +f 1970/3631/4901 2381/3265/4901 2346/1274/4901 +f 2391/3575/4902 2278/3921/4902 2270/3930/4902 +f 7/1704/4903 3451/1929/4903 3480/1300/4903 +f 2707/4003/4904 2364/2425/4904 1996/2424/4904 +f 2344/2732/4905 2395/4061/4905 1223/2741/4905 +f 1953/4059/4906 1914/4066/4906 2280/4058/4906 +f 2156/4067/4907 1949/4050/4907 2280/4058/4907 +f 2156/4067/4908 2146/4062/4908 1949/4050/4908 +f 2235/3475/4909 2199/3486/4909 1110/3869/4909 +f 2378/3332/4910 2272/4068/4910 2211/3340/4910 +f 576/1654/4911 3315/4069/4911 3301/4070/4911 +f 345/94/4912 2332/990/4912 2363/3330/4912 +f 1760/3727/4913 2163/4071/4913 2255/3749/4913 +f 2381/3265/4914 2135/2193/4914 2172/3552/4914 +f 2872/843/4915 2158/1442/4915 2227/1441/4915 +f 2395/4061/4916 1273/4072/4916 1953/4049/4916 +f 1273/4072/4917 1914/4073/4917 1953/4049/4917 +f 3128/1219/4918 3140/1218/4918 3152/1638/4918 +f 2391/3575/4919 2596/3895/4919 2278/3921/4919 +f 2397/2642/4920 2398/2756/4920 1907/3737/4920 +f 3315/4069/4921 576/1654/4921 3332/1653/4921 +f 1249/2614/4922 1454/2132/4922 1436/4074/4922 +f 2302/1188/4923 2191/3296/4923 2311/3862/4923 +f 2323/3816/4924 2229/4064/4924 2190/2489/4924 +f 2152/3959/4925 2348/3663/4925 2222/3255/4925 +f 2169/3678/4926 2229/4064/4926 2323/3816/4926 +f 2368/3555/4927 2317/3953/4927 1048/3581/4927 +f 2202/4075/4928 2146/4062/4928 2156/4067/4928 +f 2202/4075/4929 2303/1847/4929 2146/4062/4929 +f 2379/3356/4930 2148/3407/4930 2262/3331/4930 +f 1794/3918/4931 2224/3392/4931 2348/3663/4931 +f 1024/3720/4932 2204/3630/4932 2320/3384/4932 +f 2151/3742/4933 2209/2292/4933 2764/4076/4933 +f 2003/2490/4934 2274/3295/4934 2191/3296/4934 +f 2216/4077/4935 3019/2296/4935 2436/2295/4935 +f 2076/2808/4936 1322/2793/4936 2049/3905/4936 +f 2224/3392/4937 1794/3918/4937 2182/768/4937 +f 2286/3902/4938 2137/3898/4938 2218/2210/4938 +f 1318/2599/4939 1114/2605/4939 2265/3913/4939 +f 2308/3986/4940 2268/2504/4940 2213/2506/4940 +f 1741/4078/4941 2233/3983/4941 2261/1889/4941 +f 1760/3727/4942 2256/4079/4942 2163/4071/4942 +f 2395/4061/4943 2396/2661/4943 1273/4072/4943 +f 1914/4066/4944 2156/4067/4944 2280/4058/4944 +f 2240/4080/4945 2202/4075/4945 2156/4067/4945 +f 2202/4075/4946 1710/1633/4946 2303/1847/4946 +f 2291/3987/4947 2252/2505/4947 2131/3614/4947 +f 2503/2146/4948 2256/3724/4948 1781/3723/4948 +f 2465/2145/4949 2163/4081/4949 2256/3724/4949 +f 2780/2714/4950 1874/2713/4950 1598/2991/4950 +f 3002/4082/4951 2216/4077/4951 2436/2295/4951 +f 2351/3526/4952 3002/4082/4952 2436/2295/4952 +f 2378/3332/4953 2262/3331/4953 2272/4068/4953 +f 2344/2732/4954 2396/2661/4954 2395/4061/4954 +f 2338/3882/4955 2156/4067/4955 1914/4066/4955 +f 2338/3593/4956 2240/4083/4956 2156/4084/4956 +f 345/94/4957 2363/3330/4957 2400/3880/4957 +f 2169/3635/4958 837/2427/4958 2229/1142/4958 +f 2391/3575/4959 2270/3930/4959 2155/3573/4959 +f 1959/4038/4960 2267/3881/4960 2876/2839/4960 +f 2383/3350/4961 2374/3370/4961 2208/3897/4961 +f 1828/2352/4962 2238/3904/4962 2049/2353/4962 +f 2242/2406/4963 2266/3679/4963 2382/3444/4963 +f 2352/4045/4964 1914/4073/4964 1273/4072/4964 +f 2185/4000/4965 2268/2504/4965 2308/3986/4965 +f 2864/4085/4966 2259/3553/4966 2354/4086/4966 +f 973/3257/4967 2140/3256/4967 2392/4087/4967 +f 2226/3591/4968 2194/3870/4968 2131/3592/4968 +f 2503/2146/4969 2465/2145/4969 2256/3724/4969 +f 7/1704/4970 3480/1300/4970 3509/1702/4970 +f 2143/2636/4971 1343/2611/4971 1509/3923/4971 +f 2139/1678/4972 1291/1680/4972 2145/2376/4972 +f 1336/2888/4973 1368/2889/4973 2139/1678/4973 +f 2349/3917/4974 1794/3918/4974 2348/3663/4974 +f 2315/3658/4975 1990/3329/4975 2241/3836/4975 +f 3211/2168/4976 3212/2167/4976 3226/4088/4976 +f 2217/3698/4977 1273/4072/4977 2396/2661/4977 +f 1273/4089/4978 2217/4090/4978 2352/4091/4978 +f 1914/4066/4979 2352/4091/4979 2338/3882/4979 +f 2165/3613/4980 2202/4075/4980 2240/4080/4980 +f 2165/3613/4981 2535/2/4981 2202/4075/4981 +f 2392/3419/4982 2140/4092/4982 2260/3884/4982 +f 2350/3584/4983 1990/3329/4983 2315/3658/4983 +f 2312/3385/4984 2243/3684/4984 2283/4043/4984 +f 2337/3572/4985 2354/4086/4985 2259/3553/4985 +f 3288/2449/4986 3337/4093/4986 1921/3795/4986 +f 2205/3867/4987 2994/4094/4987 2351/3526/4987 +f 2145/2376/4988 1283/2377/4988 2154/3969/4988 +f 2318/3759/4989 2179/3638/4989 2245/3639/4989 +f 2315/3658/4990 2241/3836/4990 2158/1442/4990 +f 2352/4091/4991 2226/4095/4991 2338/3882/4991 +f 2338/3593/4992 2165/4096/4992 2240/4083/4992 +f 2363/3330/4993 2378/3332/4993 2400/3880/4993 +f 3473/1107/4994 3458/1446/4994 3481/1108/4994 +f 2575/3627/4995 1430/3628/4995 2109/4097/4995 +f 2445/4098/4996 2177/4023/4996 2881/4010/4996 +f 1793/1518/4997 2408/4099/4997 2829/3163/4997 +f 2436/2295/4998 2425/3192/4998 2163/4081/4998 +f 1657/649/4999 1662/651/4999 1136/4100/4999 +f 1473/2666/5000 2109/4097/5000 2799/4101/5000 +f 2422/2070/5001 2479/4102/5001 1675/2665/5001 +f 956/4103/5002 957/2509/5002 2429/1886/5002 +f 2792/1399/5003 2845/4104/5003 2812/371/5003 +f 2870/3091/5004 1700/4105/5004 2886/4106/5004 +f 2479/4102/5005 2855/4107/5005 1473/2666/5005 +f 2799/4101/5006 1702/4108/5006 2435/3335/5006 +f 1473/2666/5007 2799/4101/5007 2699/264/5007 +f 58/211/5008 23/783/5008 59/755/5008 +f 2886/4106/5009 1700/4105/5009 2885/4109/5009 +f 2427/4110/5010 2425/3192/5010 2426/4111/5010 +f 2699/264/5011 2799/4101/5011 2210/4112/5011 +f 2625/650/5012 2421/4113/5012 2752/4114/5012 +f 2210/4112/5013 2799/4101/5013 2435/3335/5013 +f 1038/4115/5014 2596/3895/5014 1055/4055/5014 +f 2506/1595/5015 1020/2394/5015 1009/1596/5015 +f 2874/4116/5016 2871/3978/5016 2818/3019/5016 +f 2818/3019/5017 2871/3978/5017 2856/3977/5017 +f 2409/3185/5018 2905/4117/5018 2904/3186/5018 +f 1038/4115/5019 2576/4118/5019 2596/3895/5019 +f 3288/2449/5020 1921/3795/5020 1910/2447/5020 +f 2077/4119/5021 2078/3600/5021 2112/3602/5021 +f 2584/3877/5022 2423/2030/5022 2479/4102/5022 +f 3212/2167/5023 3227/2262/5023 3226/4088/5023 +f 2576/4118/5024 2597/4120/5024 2596/3895/5024 +f 2275/2190/5025 2522/4121/5025 2537/3107/5025 +f 2710/4122/5026 2779/3187/5026 2820/3333/5026 +f 2676/4123/5027 2718/4029/5027 2162/4037/5027 +f 1902/4124/5028 2112/3602/5028 2584/3877/5028 +f 2609/266/5029 2879/679/5029 2434/267/5029 +f 3195/1932/5030 3218/1934/5030 3194/4125/5030 +f 2541/3981/5031 2576/4118/5031 1038/4115/5031 +f 2434/267/5032 2879/679/5032 2838/1635/5032 +f 3469/782/5033 1830/781/5033 1174/3527/5033 +f 2541/3981/5034 2550/4126/5034 2576/4118/5034 +f 2550/4126/5035 2597/4120/5035 2576/4118/5035 +f 3498/1197/5036 2783/3021/5036 1674/1198/5036 +f 3057/1411/5037 3100/4127/5037 3080/3676/5037 +f 3236/1114/5038 1448/3488/5038 1631/4128/5038 +f 2706/3201/5039 2705/4129/5039 2636/4130/5039 +f 1496/4131/5040 2489/2898/5040 2644/4132/5040 +f 2033/4133/5041 1439/273/5041 1442/2571/5041 +f 959/576/5042 2483/2073/5042 978/450/5042 +f 2796/4134/5043 2012/2349/5043 2795/2348/5043 +f 1072/4135/5044 2602/4136/5044 1082/3890/5044 +f 2698/4137/5045 2674/265/5045 2676/4123/5045 +f 1697/311/5046 3425/313/5046 2642/4007/5046 +f 2505/3980/5047 2525/4138/5047 2541/3981/5047 +f 2541/3981/5048 2525/4138/5048 2550/4126/5048 +f 2598/3920/5049 2597/4120/5049 2550/4126/5049 +f 2565/4139/5050 2598/3920/5050 2550/4126/5050 +f 2983/528/5051 3025/2485/5051 3048/4140/5051 +f 966/3334/5052 1934/4012/5052 2888/4141/5052 +f 2722/3730/5053 2721/732/5053 2695/3046/5053 +f 959/576/5054 960/2177/5054 2483/2073/5054 +f 2564/3188/5055 2600/268/5055 1987/4142/5055 +f 2763/3675/5056 2796/3078/5056 2751/4143/5056 +f 1842/220/5057 2581/2423/5057 1866/2422/5057 +f 1231/183/5058 1232/182/5058 1099/2781/5058 +f 2763/3675/5059 2751/4143/5059 1955/4144/5059 +f 2751/4145/5060 2795/4146/5060 2778/4147/5060 +f 2483/2073/5061 2484/4148/5061 2505/1990/5061 +f 2505/3980/5062 2484/4149/5062 2525/4138/5062 +f 2525/4138/5063 2565/4139/5063 2550/4126/5063 +f 1700/4105/5064 1911/3090/5064 1892/4150/5064 +f 2748/4151/5065 2761/238/5065 2790/240/5065 +f 2792/1399/5066 2812/371/5066 2791/239/5066 +f 2672/4152/5067 2592/648/5067 2670/1761/5067 +f 1173/2270/5068 1050/2287/5068 558/635/5068 +f 2658/2884/5069 2693/2670/5069 2692/2671/5069 +f 2525/4138/5070 2542/4153/5070 2565/4139/5070 +f 2565/4139/5071 2577/4154/5071 2598/3920/5071 +f 2577/4154/5072 2599/3873/5072 2598/3920/5072 +f 2598/3920/5073 2599/3873/5073 2295/3872/5073 +f 2901/4155/5074 2175/3184/5074 2904/3186/5074 +f 2417/4156/5075 592/3226/5075 1676/3225/5075 +f 2905/4117/5076 1909/4157/5076 2906/2458/5076 +f 2498/2039/5077 2231/2299/5077 2515/2040/5077 +f 1909/4157/5078 2905/4117/5078 2409/3185/5078 +f 3030/4158/5079 3019/4159/5079 3020/4160/5079 +f 1887/1891/5080 1019/3215/5080 2902/2487/5080 +f 2154/4161/5081 1939/3496/5081 2145/3495/5081 +f 2036/3454/5082 2841/3159/5082 2867/3464/5082 +f 2484/4149/5083 2542/4153/5083 2525/4138/5083 +f 2542/4153/5084 2566/4162/5084 2565/4139/5084 +f 2566/4162/5085 2577/4154/5085 2565/4139/5085 +f 2752/4114/5086 2710/4122/5086 2820/3333/5086 +f 2827/4163/5087 2828/373/5087 2843/4164/5087 +f 2676/4123/5088 2674/265/5088 2718/4029/5088 +f 2428/97/5089 2437/4165/5089 2427/4166/5089 +f 1350/737/5090 1657/649/5090 1136/4100/5090 +f 2601/2264/5091 2421/4113/5091 2625/650/5091 +f 2601/2264/5092 2753/652/5092 2421/4113/5092 +f 2752/4114/5093 2820/3333/5093 2435/3335/5093 +f 2778/4147/5094 2750/733/5094 2733/4167/5094 +f 2734/4168/5095 2778/4147/5095 2733/4167/5095 +f 1891/4169/5096 1769/252/5096 2489/2898/5096 +f 2811/4170/5097 2828/373/5097 2827/4163/5097 +f 966/3334/5098 2820/3333/5098 2779/3187/5098 +f 3034/4171/5099 3058/4172/5099 3024/292/5099 +f 2437/4165/5100 2447/4173/5100 2455/3208/5100 +f 2427/4166/5101 2437/4165/5101 2455/3208/5101 +f 2752/4114/5102 2435/3335/5102 1702/4108/5102 +f 960/4174/5103 2486/4175/5103 2484/4149/5103 +f 2486/4175/5104 2485/4176/5104 2484/4149/5104 +f 2484/4149/5105 2485/4176/5105 2542/4153/5105 +f 2566/4162/5106 1063/4051/5106 2577/4154/5106 +f 1063/4051/5107 2599/3873/5107 2577/4154/5107 +f 2415/3148/5108 2443/848/5108 2452/4177/5108 +f 2753/652/5109 2645/4178/5109 2421/4113/5109 +f 2753/652/5110 2640/654/5110 2645/4178/5110 +f 2778/4179/5111 2794/4180/5111 2750/206/5111 +f 1769/252/5112 1891/4169/5112 1911/3090/5112 +f 169/4181/5113 2765/4182/5113 2601/2264/5113 +f 2644/4132/5114 2848/4183/5114 2641/4184/5114 +f 2641/4184/5115 2848/4183/5115 2453/4185/5115 +f 2453/4185/5116 2698/4137/5116 2676/4123/5116 +f 2699/264/5117 2210/4112/5117 2296/3860/5117 +f 2848/4183/5118 2459/2071/5118 2698/4137/5118 +f 2517/2072/5119 2459/2071/5119 2848/4183/5119 +f 1934/4012/5120 2445/4098/5120 2881/4010/5120 +f 2645/4178/5121 2640/654/5121 2609/266/5121 +f 2853/4186/5122 602/3241/5122 2846/3243/5122 +f 2887/250/5123 1769/252/5123 1911/3090/5123 +f 2706/3201/5124 2636/4130/5124 2668/807/5124 +f 2884/4187/5125 1686/3227/5125 1991/4188/5125 +f 2883/4189/5126 2884/4187/5126 1991/4188/5126 +f 2640/654/5127 2879/679/5127 2609/266/5127 +f 2485/4176/5128 2566/4162/5128 2542/4153/5128 +f 1964/2128/5129 3439/2130/5129 3471/3576/5129 +f 2566/4162/5130 1057/4190/5130 1063/4051/5130 +f 967/1517/5131 1611/4191/5131 1890/4192/5131 +f 1892/4150/5132 1496/4131/5132 2417/4156/5132 +f 1496/4131/5133 2641/4184/5133 2417/4156/5133 +f 2777/4193/5134 2813/3242/5134 2776/1398/5134 +f 2584/3877/5135 2567/3106/5135 1703/251/5135 +f 1902/4124/5136 2584/3877/5136 1703/251/5136 +f 2993/2176/5137 2457/3995/5137 2486/4194/5137 +f 2485/4176/5138 2551/4195/5138 2566/4162/5138 +f 2551/4195/5139 1057/4190/5139 2566/4162/5139 +f 602/3241/5140 1902/4124/5140 1703/251/5140 +f 1700/4105/5141 1892/4150/5141 1676/3225/5141 +f 2299/3901/5142 2707/4003/5142 2260/3871/5142 +f 2645/4178/5143 2609/266/5143 2600/268/5143 +f 2788/4196/5144 2842/4197/5144 2810/253/5144 +f 3371/683/5145 3370/685/5145 3359/4198/5145 +f 2675/4199/5146 2160/4042/5146 2303/1847/5146 +f 2425/3192/5147 2455/4200/5147 2163/4081/5147 +f 2595/3670/5148 2523/4201/5148 1829/3703/5148 +f 2780/2714/5149 2798/3235/5149 2173/2712/5149 +f 2638/3674/5150 2657/4202/5150 2655/3672/5150 +f 2657/4202/5151 2656/4203/5151 2655/3672/5151 +f 2457/3000/5152 2485/4176/5152 2486/4175/5152 +f 1393/2244/5153 1407/2700/5153 243/2245/5153 +f 1700/4105/5154 1676/3225/5154 2885/4109/5154 +f 1221/3916/5155 2815/3250/5155 2249/4204/5155 +f 2457/3000/5156 2487/4205/5156 2485/4176/5156 +f 2487/4205/5157 2526/4206/5157 2485/4176/5157 +f 2526/4206/5158 2551/4195/5158 2485/4176/5158 +f 1675/2665/5159 2479/4102/5159 1473/2666/5159 +f 1911/3090/5160 1891/4169/5160 1892/4150/5160 +f 2844/372/5161 2886/4106/5161 2843/4164/5161 +f 2842/4197/5162 2883/4189/5162 2869/1415/5162 +f 2791/239/5163 2828/373/5163 2811/4170/5163 +f 2790/240/5164 2791/239/5164 2811/4170/5164 +f 1407/2743/5165 620/1234/5165 243/1236/5165 +f 999/3979/5166 2541/3981/5166 1038/4115/5166 +f 2439/2906/5167 2993/2176/5167 955/2175/5167 +f 2749/3057/5168 2761/238/5168 2748/4151/5168 +f 1849/3270/5169 2499/1081/5169 2651/4207/5169 +f 2567/3106/5170 2584/3877/5170 2422/2070/5170 +f 2526/4206/5171 2527/4208/5171 2551/4195/5171 +f 2582/3079/5172 2561/2976/5172 2538/3058/5172 +f 2253/699/5173 2696/953/5173 2264/698/5173 +f 3214/4209/5174 3228/813/5174 3197/4210/5174 +f 3362/4211/5175 3348/2147/5175 3377/2567/5175 +f 3383/3849/5176 3422/3848/5176 3421/4212/5176 +f 984/4213/5177 2109/4097/5177 1430/3628/5177 +f 2626/4214/5178 2623/4215/5178 1933/4216/5178 +f 1849/3270/5179 2815/3250/5179 2499/1081/5179 +f 2439/2906/5180 2992/1879/5180 2457/3995/5180 +f 2457/3000/5181 2468/3002/5181 2487/4205/5181 +f 2025/3357/5182 2743/2866/5182 1997/4217/5182 +f 2873/4014/5183 2186/3971/5183 2782/4218/5183 +f 2860/4056/5184 2859/2208/5184 2830/2498/5184 +f 2859/2208/5185 2860/4056/5185 2064/2209/5185 +f 2313/3999/5186 2264/698/5186 2696/953/5186 +f 2730/1267/5187 2745/4219/5187 2810/253/5187 +f 2112/3602/5188 1902/4124/5188 602/3241/5188 +f 2527/4208/5189 2526/4206/5189 1007/4220/5189 +f 2112/3602/5190 602/3241/5190 2853/4186/5190 +f 2726/4221/5191 2670/1761/5191 1674/1198/5191 +f 2692/4222/5192 2691/806/5192 2656/805/5192 +f 2799/4101/5193 1136/4100/5193 1702/4108/5193 +f 3227/2262/5194 3240/3903/5194 3226/4088/5194 +f 2747/4223/5195 2811/4170/5195 2789/4224/5195 +f 2811/4170/5196 2827/4163/5196 2789/4224/5196 +f 2659/2882/5197 2639/4225/5197 2660/3047/5197 +f 3435/3053/5198 1894/383/5198 3442/1953/5198 +f 2796/4134/5199 2854/3660/5199 2012/2349/5199 +f 2129/3828/5200 1832/3073/5200 1928/678/5200 +f 2660/3047/5201 2694/2883/5201 2659/2882/5201 +f 3511/1762/5202 1674/1198/5202 2670/1761/5202 +f 2454/845/5203 2198/844/5203 2330/3729/5203 +f 2690/4226/5204 2747/4223/5204 2746/4227/5204 +f 2860/4056/5205 2325/3940/5205 2064/2209/5205 +f 2548/271/5206 3461/270/5206 2808/4228/5206 +f 2608/4229/5207 2562/4230/5207 2563/4231/5207 +f 2636/4130/5208 2654/4232/5208 2635/4233/5208 +f 2658/4234/5209 2692/4222/5209 2657/4235/5209 +f 3188/3457/5210 3189/1637/5210 3211/2168/5210 +f 2847/4236/5211 2853/4186/5211 2846/3243/5211 +f 1905/2500/5212 1711/2216/5212 1927/2870/5212 +f 2488/532/5213 2487/4205/5213 2468/3002/5213 +f 1329/2726/5214 1713/2980/5214 1649/3214/5214 +f 2795/4237/5215 2847/4236/5215 2794/4180/5215 +f 2845/4104/5216 2886/4106/5216 2844/372/5216 +f 551/4238/5217 2601/2264/5217 1666/736/5217 +f 2636/4130/5218 2690/4226/5218 2654/4232/5218 +f 2292/125/5219 2313/4015/5219 2696/580/5219 +f 2859/2208/5220 1203/4239/5220 1185/2499/5220 +f 2325/3940/5221 2891/3835/5221 2064/2209/5221 +f 2883/4189/5222 1991/4188/5222 2899/4240/5222 +f 2502/3650/5223 2539/4241/5223 2522/3651/5223 +f 1751/4242/5224 2464/1921/5224 2502/3650/5224 +f 2732/4243/5225 2731/1400/5225 2719/3202/5225 +f 2459/2071/5226 2735/263/5226 2698/4137/5226 +f 1867/3673/5227 2658/4244/5227 2638/3674/5227 +f 2351/3526/5228 2436/2295/5228 2465/2145/5228 +f 2659/2882/5229 2658/2884/5229 1867/4245/5229 +f 2992/3001/5230 2440/4246/5230 2468/3002/5230 +f 2468/3002/5231 2458/530/5231 2488/532/5231 +f 2585/4247/5232 1060/3907/5232 3422/3848/5232 +f 2249/4248/5233 1849/3272/5233 2341/4249/5233 +f 1082/3890/5234 2602/4136/5234 2662/2367/5234 +f 2505/1990/5235 988/448/5235 2483/2073/5235 +f 2636/4130/5236 2635/4233/5236 2618/4250/5236 +f 2595/3705/5237 2655/3557/5237 2608/4229/5237 +f 2658/4234/5238 2657/4235/5238 2638/4251/5238 +f 1082/3890/5239 2662/2367/5239 1107/2359/5239 +f 603/4252/5240 592/3226/5240 1508/4253/5240 +f 2734/4168/5241 2721/732/5241 2722/3730/5241 +f 1125/2226/5242 2713/2358/5242 2784/2224/5242 +f 2326/3942/5243 2269/3941/5243 2784/2224/5243 +f 37/959/5244 1490/1412/5244 1532/3450/5244 +f 3499/1910/5245 3424/1002/5245 3426/1004/5245 +f 2827/4163/5246 2842/4197/5246 2788/4196/5246 +f 2789/4224/5247 2827/4163/5247 2788/4196/5247 +f 2608/4229/5248 2637/4254/5248 2618/4250/5248 +f 2827/4163/5249 2843/4164/5249 2883/4189/5249 +f 2595/3705/5250 2608/4229/5250 2583/3218/5250 +f 2501/2757/5251 3434/869/5251 2839/1640/5251 +f 2624/3013/5252 566/3014/5252 2445/4098/5252 +f 2440/4246/5253 2458/530/5253 2468/3002/5253 +f 1715/3017/5254 210/1284/5254 1539/70/5254 +f 2912/4255/5255 2319/4256/5255 2371/2486/5255 +f 1650/1311/5256 512/1353/5256 511/1302/5256 +f 2713/2358/5257 2700/4257/5257 2784/2224/5257 +f 2755/4258/5258 2326/3942/5258 2784/2224/5258 +f 2621/4259/5259 1908/2236/5259 1901/3579/5259 +f 1116/2276/5260 3466/1713/5260 3488/1712/5260 +f 2562/4230/5261 2618/4250/5261 2582/3079/5261 +f 1933/4216/5262 2408/4099/5262 603/4252/5262 +f 1955/4144/5263 2751/4143/5263 1941/4260/5263 +f 3360/4261/5264 3383/3849/5264 3421/4212/5264 +f 2506/4262/5265 2528/4263/5265 1023/1856/5265 +f 1023/1856/5266 2528/4263/5266 2544/3606/5266 +f 1072/2261/5267 2552/701/5267 2544/4264/5267 +f 2432/4265/5268 2412/4266/5268 2406/3468/5268 +f 1686/3227/5269 592/3226/5269 603/4252/5269 +f 2662/2367/5270 2700/4257/5270 2713/2358/5270 +f 2700/4257/5271 2755/4258/5271 2784/2224/5271 +f 2831/4267/5272 2326/3942/5272 2755/4258/5272 +f 1890/4192/5273 603/4252/5273 2408/4099/5273 +f 2890/1848/5274 1933/4216/5274 2675/4199/5274 +f 2591/3020/5275 2672/4152/5275 2726/4221/5275 +f 2779/3187/5276 2624/3013/5276 2445/4098/5276 +f 2990/2560/5277 2429/1886/5277 2440/1881/5277 +f 1598/2991/5278 2781/288/5278 215/2844/5278 +f 2445/4098/5279 566/3014/5279 2177/4023/5279 +f 1145/3380/5280 2880/3363/5280 2110/3362/5280 +f 2027/3249/5281 2161/1082/5281 2499/1081/5281 +f 2988/4268/5282 2987/4269/5282 2966/4270/5282 +f 2326/3942/5283 2831/4267/5283 2861/3926/5283 +f 2828/373/5284 2844/372/5284 2843/4164/5284 +f 2873/4014/5285 2207/3965/5285 2186/3971/5285 +f 1880/3657/5286 2223/1186/5286 2232/3429/5286 +f 3221/4271/5287 47/99/5287 3136/3530/5287 +f 1898/2134/5288 1272/3261/5288 2852/4272/5288 +f 2747/4223/5289 2789/4224/5289 2746/4227/5289 +f 2608/4229/5290 2618/4250/5290 2562/4230/5290 +f 2734/4168/5291 2733/4167/5291 2721/732/5291 +f 2840/4273/5292 2641/4184/5292 2623/4215/5292 +f 2710/4122/5293 2564/3188/5293 2779/3187/5293 +f 2751/4145/5294 2778/4147/5294 1941/3492/5294 +f 2855/4107/5295 2575/3627/5295 1473/2666/5295 +f 2506/4262/5296 2507/4274/5296 2528/4263/5296 +f 2528/4275/5297 2568/4276/5297 2544/4264/5297 +f 2568/4277/5298 2602/4136/5298 1072/4135/5298 +f 2627/4278/5299 2678/4279/5299 2700/4280/5299 +f 2662/4281/5300 2627/4278/5300 2700/4280/5300 +f 2700/4257/5301 2756/4282/5301 2755/4258/5301 +f 2618/4250/5302 2635/4233/5302 2622/4283/5302 +f 2690/4226/5303 2704/3102/5303 2622/4283/5303 +f 2635/4233/5304 2654/4232/5304 2622/4283/5304 +f 2582/3079/5305 2618/4250/5305 2622/4283/5305 +f 2645/4178/5306 2564/3188/5306 2710/4122/5306 +f 2731/1400/5307 2749/3057/5307 2719/3202/5307 +f 2393/636/5308 837/2427/5308 2168/695/5308 +f 2545/4284/5309 2553/4285/5309 2568/4277/5309 +f 2528/4263/5310 2545/4284/5310 2568/4277/5310 +f 2553/4285/5311 2627/4286/5311 2602/4136/5311 +f 2678/4287/5312 2679/4288/5312 2700/4257/5312 +f 2679/4288/5313 2756/4282/5313 2700/4257/5313 +f 2771/4289/5314 2831/4267/5314 2755/4258/5314 +f 2756/4282/5315 2771/4289/5315 2755/4258/5315 +f 2274/3295/5316 2350/3584/5316 2872/843/5316 +f 2591/3020/5317 2798/3235/5317 2672/4152/5317 +f 1662/651/5318 2625/650/5318 1702/4108/5318 +f 2829/3163/5319 1933/4216/5319 2890/1848/5319 +f 2139/3879/5320 188/3494/5320 1336/3548/5320 +f 2775/3505/5321 2002/3463/5321 1969/3535/5321 +f 1868/4290/5322 2639/4225/5322 1867/4245/5322 +f 2564/3188/5323 2645/4178/5323 2600/268/5323 +f 2077/4119/5324 2112/3602/5324 2853/4186/5324 +f 2695/3046/5325 2694/2883/5325 2660/3047/5325 +f 1780/3563/5326 1751/3562/5326 2502/3659/5326 +f 2507/4274/5327 2545/4284/5327 2528/4263/5327 +f 2568/4277/5328 2553/4285/5328 2602/4136/5328 +f 2771/4289/5329 2832/4291/5329 2831/4267/5329 +f 3372/2414/5330 3371/683/5330 3342/165/5330 +f 989/2325/5331 2488/4292/5331 979/2380/5331 +f 2516/3216/5332 2503/2146/5332 2523/3217/5332 +f 2624/3013/5333 2564/3188/5333 1987/4142/5333 +f 2490/4293/5334 2508/4294/5334 2507/4274/5334 +f 2508/4294/5335 2518/4295/5335 2507/4274/5335 +f 2507/4274/5336 2518/4295/5336 2545/4284/5336 +f 2586/4296/5337 2627/4286/5337 2553/4285/5337 +f 2586/4296/5338 2663/4297/5338 2627/4286/5338 +f 2627/4286/5339 2663/4297/5339 2678/4287/5339 +f 2678/4287/5340 2663/4297/5340 2679/4288/5340 +f 2831/4267/5341 2832/4291/5341 2861/3926/5341 +f 2832/4291/5342 2862/2392/5342 2861/3926/5342 +f 396/152/5343 1442/2571/5343 1439/273/5343 +f 2562/4230/5344 2582/3079/5344 2538/3058/5344 +f 2660/3047/5345 3253/4298/5345 1889/2448/5345 +f 2483/2073/5346 960/2177/5346 2484/4148/5346 +f 2745/4219/5347 2788/4196/5347 2810/253/5347 +f 2480/1920/5348 2503/2146/5348 2516/3216/5348 +f 3506/91/5349 3444/93/5349 3510/1467/5349 +f 2455/3208/5350 2447/4173/5350 2466/3206/5350 +f 1891/4169/5351 1496/4131/5351 1892/4150/5351 +f 2854/3077/5352 2055/3641/5352 2012/4299/5352 +f 2490/4293/5353 2470/4300/5353 2508/4294/5353 +f 2545/4284/5354 2554/4301/5354 2553/4285/5354 +f 2554/4301/5355 2578/4302/5355 2553/4285/5355 +f 2578/4302/5356 2586/4296/5356 2553/4285/5356 +f 2351/3526/5357 2994/4094/5357 3003/4303/5357 +f 2732/4304/5358 2693/2670/5358 2694/2883/5358 +f 1674/1198/5359 3511/1762/5359 3430/1199/5359 +f 2518/4295/5360 2529/4305/5360 2545/4284/5360 +f 2545/4284/5361 2529/4305/5361 2554/4301/5361 +f 2663/4297/5362 2680/4306/5362 2679/4288/5362 +f 2727/4307/5363 2679/4288/5363 2680/4306/5363 +f 2727/4307/5364 2756/4282/5364 2679/4288/5364 +f 2727/4307/5365 2772/4308/5365 2756/4282/5365 +f 2772/4308/5366 2771/4289/5366 2756/4282/5366 +f 2771/4289/5367 2772/4308/5367 2832/4291/5367 +f 2770/2225/5368 2860/4056/5368 2830/2498/5368 +f 2869/1415/5369 2883/4189/5369 2899/4240/5369 +f 194/1296/5370 166/1295/5370 178/1320/5370 +f 2454/845/5371 2274/3295/5371 2872/843/5371 +f 1429/4309/5372 1231/4310/5372 1099/4311/5372 +f 3241/309/5373 3213/2206/5373 3173/310/5373 +f 3002/4082/5374 2351/3526/5374 3003/4303/5374 +f 981/2431/5375 2460/4312/5375 2470/4300/5375 +f 2586/4296/5376 2628/4313/5376 2663/4297/5376 +f 2628/4313/5377 2664/4314/5377 2663/4297/5377 +f 2663/4297/5378 2664/4314/5378 2680/4306/5378 +f 2746/4227/5379 2788/4196/5379 2745/4219/5379 +f 2746/4227/5380 2745/4219/5380 2704/3102/5380 +f 2624/3013/5381 1987/4142/5381 1697/311/5381 +f 2464/1921/5382 2480/1920/5382 2502/3650/5382 +f 2481/2144/5383 2503/2146/5383 2480/1920/5383 +f 1987/4142/5384 2600/268/5384 2702/1076/5384 +f 2470/4300/5385 2509/4315/5385 2508/4294/5385 +f 2509/4315/5386 2519/4316/5386 2518/4295/5386 +f 2508/4294/5387 2509/4315/5387 2518/4295/5387 +f 2518/4295/5388 2519/4316/5388 2529/4305/5388 +f 2529/4305/5389 2530/4317/5389 2554/4301/5389 +f 2664/4314/5390 2681/4318/5390 2680/4306/5390 +f 2681/4318/5391 2727/4307/5391 2680/4306/5391 +f 2772/4308/5392 2785/4319/5392 2832/4291/5392 +f 2785/4319/5393 2833/4320/5393 2832/4291/5393 +f 2832/4291/5394 2833/4320/5394 2862/2392/5394 +f 1072/2261/5395 2544/4264/5395 2568/4276/5395 +f 349/3412/5396 350/4321/5396 184/4322/5396 +f 2597/4120/5397 2278/3921/5397 2596/3895/5397 +f 2872/843/5398 2227/1441/5398 2198/844/5398 +f 2789/4224/5399 2788/4196/5399 2746/4227/5399 +f 2298/64/5400 2205/3867/5400 2480/1920/5400 +f 2762/208/5401 2731/1400/5401 2732/4243/5401 +f 981/2431/5402 2419/2430/5402 2460/4312/5402 +f 2460/4312/5403 2509/4315/5403 2470/4300/5403 +f 2530/4317/5404 2569/4323/5404 2554/4301/5404 +f 2554/4301/5405 2569/4323/5405 2578/4302/5405 +f 2603/4324/5406 2586/4296/5406 2578/4302/5406 +f 2569/4323/5407 2603/4324/5407 2578/4302/5407 +f 2833/4320/5408 2876/2839/5408 2862/2392/5408 +f 1116/2276/5409 163/2652/5409 3466/1713/5409 +f 2273/4011/5410 2296/3860/5410 2210/4112/5410 +f 2704/3102/5411 2745/4219/5411 2730/1267/5411 +f 1534/3131/5412 1611/4191/5412 2897/2566/5412 +f 1189/1986/5413 1111/1971/5413 965/1978/5413 +f 2645/4178/5414 2710/4122/5414 2421/4113/5414 +f 2502/3650/5415 2516/3216/5415 2539/4241/5415 +f 2961/2937/5416 2960/3049/5416 2945/4006/5416 +f 2205/3867/5417 2481/2144/5417 2480/1920/5417 +f 2762/208/5418 2776/1398/5418 2731/1400/5418 +f 2423/2030/5419 2855/4107/5419 2479/4102/5419 +f 2417/4156/5420 1508/4253/5420 592/3226/5420 +f 2372/3823/5421 2419/2430/5421 963/2432/5421 +f 2519/4316/5422 2530/4317/5422 2529/4305/5422 +f 2586/4296/5423 2603/4324/5423 2628/4313/5423 +f 2681/4318/5424 2738/4325/5424 2727/4307/5424 +f 2757/4326/5425 2772/4308/5425 2727/4307/5425 +f 2757/4326/5426 2785/4319/5426 2772/4308/5426 +f 1710/1633/5427 2202/4075/5427 2535/2/5427 +f 1890/4192/5428 2408/4099/5428 1793/1518/5428 +f 2843/4164/5429 2886/4106/5429 2885/4109/5429 +f 2842/4197/5430 2827/4163/5430 2883/4189/5430 +f 2516/3216/5431 2583/3218/5431 2539/4241/5431 +f 2637/4254/5432 2668/807/5432 2636/4130/5432 +f 2783/3021/5433 3498/1197/5433 3429/225/5433 +f 2215/2294/5434 2138/2460/5434 2807/3949/5434 +f 1666/736/5435 2625/650/5435 1657/649/5435 +f 2419/2430/5436 2448/4327/5436 2460/4312/5436 +f 2460/4312/5437 2471/4328/5437 2509/4315/5437 +f 2628/4313/5438 2646/4329/5438 2664/4314/5438 +f 2664/4314/5439 2646/4329/5439 2681/4318/5439 +f 2757/4326/5440 2727/4307/5440 2738/4325/5440 +f 2834/4330/5441 2833/4320/5441 2785/4319/5441 +f 2833/4320/5442 2834/4330/5442 2876/2839/5442 +f 2834/4330/5443 1959/4038/5443 2876/2839/5443 +f 2798/3235/5444 2780/2714/5444 2672/4152/5444 +f 1662/651/5445 1702/4108/5445 1136/4100/5445 +f 2675/4199/5446 2303/1847/5446 2890/1848/5446 +f 2017/2157/5447 3182/562/5447 3364/2835/5447 +f 2325/4331/5448 2860/4332/5448 2269/4333/5448 +f 2419/2430/5449 2430/3822/5449 2448/4327/5449 +f 2448/4327/5450 2471/4328/5450 2460/4312/5450 +f 2471/4328/5451 2491/4334/5451 2509/4315/5451 +f 2491/4334/5452 2510/4335/5452 2509/4315/5452 +f 2509/4315/5453 2510/4335/5453 2519/4316/5453 +f 2510/4335/5454 2555/4336/5454 2530/4317/5454 +f 2519/4316/5455 2510/4335/5455 2530/4317/5455 +f 2603/4324/5456 2647/4337/5456 2628/4313/5456 +f 2647/4337/5457 2646/4329/5457 2628/4313/5457 +f 2646/4329/5458 2738/4325/5458 2681/4318/5458 +f 2563/4231/5459 2562/4230/5459 2538/3058/5459 +f 2563/4231/5460 2538/3058/5460 2522/3651/5460 +f 1743/3087/5461 2447/4173/5461 2456/3030/5461 +f 2583/3218/5462 2563/4231/5462 2539/4241/5462 +f 2845/4104/5463 2844/372/5463 2812/371/5463 +f 1666/736/5464 2601/2264/5464 2625/650/5464 +f 2530/4317/5465 2555/4336/5465 2569/4323/5465 +f 2555/4336/5466 2603/4324/5466 2569/4323/5466 +f 2738/4325/5467 2773/4338/5467 2757/4326/5467 +f 2773/4338/5468 2800/4339/5468 2785/4319/5468 +f 2757/4326/5469 2773/4338/5469 2785/4319/5469 +f 2800/4339/5470 2821/4340/5470 2785/4319/5470 +f 2821/4340/5471 2834/4330/5471 2785/4319/5471 +f 2821/4340/5472 1959/4038/5472 2834/4330/5472 +f 2654/4232/5473 2690/4226/5473 2622/4283/5473 +f 2690/4226/5474 2746/4227/5474 2704/3102/5474 +f 3342/165/5475 3371/683/5475 3326/166/5475 +f 2006/769/5476 2157/1187/5476 2223/1186/5476 +f 2006/769/5477 2182/768/5477 2157/1187/5477 +f 2173/2712/5478 2798/3235/5478 2856/3977/5478 +f 2810/253/5479 2842/4197/5479 2869/1415/5479 +f 2430/3822/5480 2441/4341/5480 2448/4327/5480 +f 2441/4341/5481 2471/4328/5481 2448/4327/5481 +f 2491/4334/5482 2511/4342/5482 2510/4335/5482 +f 2555/4336/5483 2556/4343/5483 2603/4324/5483 +f 2714/4344/5484 2773/4338/5484 2738/4325/5484 +f 1967/3268/5485 1849/3272/5485 2651/2101/5485 +f 1611/4191/5486 603/4252/5486 1890/4192/5486 +f 1991/4188/5487 603/4252/5487 1611/4191/5487 +f 1991/4188/5488 1611/4191/5488 2899/4240/5488 +f 2027/3249/5489 2499/1081/5489 2815/3250/5489 +f 2371/2486/5490 1741/4078/5490 1887/1891/5490 +f 1880/3657/5491 2006/769/5491 2223/1186/5491 +f 2874/4116/5492 2818/3019/5492 2783/3021/5492 +f 2417/4156/5493 2840/4273/5493 1508/4253/5493 +f 2490/4293/5494 2507/4274/5494 2506/4262/5494 +f 1959/4038/5495 2282/2408/5495 2250/2407/5495 +f 2510/4335/5496 2511/4342/5496 2555/4336/5496 +f 2556/4343/5497 2604/4345/5497 2603/4324/5497 +f 2604/4345/5498 2648/4346/5498 2647/4337/5498 +f 2603/4324/5499 2604/4345/5499 2647/4337/5499 +f 2646/4329/5500 2714/4344/5500 2738/4325/5500 +f 2714/4344/5501 2739/4347/5501 2773/4338/5501 +f 2739/4347/5502 2800/4339/5502 2773/4338/5502 +f 1959/4038/5503 2821/4340/5503 2282/2408/5503 +f 3371/683/5504 3359/4198/5504 3326/166/5504 +f 857/1783/5505 3509/1702/5505 3499/1910/5505 +f 1686/3227/5506 603/4252/5506 1991/4188/5506 +f 2885/4109/5507 1676/3225/5507 2884/4187/5507 +f 2583/3218/5508 2608/4229/5508 2563/4231/5508 +f 1160/3545/5509 3431/2804/5509 3432/2531/5509 +f 2441/4341/5510 2491/4334/5510 2471/4328/5510 +f 2511/4342/5511 2531/4348/5511 2555/4336/5511 +f 2648/4346/5512 2646/4329/5512 2647/4337/5512 +f 2648/4346/5513 2682/4349/5513 2646/4329/5513 +f 2646/4329/5514 2682/4349/5514 2714/4344/5514 +f 2850/4350/5515 2821/4340/5515 2800/4339/5515 +f 2739/4347/5516 2850/4350/5516 2800/4339/5516 +f 1996/2424/5517 2251/3912/5517 2707/4003/5517 +f 1987/4142/5518 2702/1076/5518 1697/311/5518 +f 2698/4137/5519 2735/263/5519 2674/265/5519 +f 2299/3901/5520 2141/770/5520 2006/769/5520 +f 2313/3999/5521 2314/4008/5521 2642/4007/5521 +f 2488/532/5522 1007/4220/5522 2487/4205/5522 +f 2430/3822/5523 2431/4351/5523 2441/4341/5523 +f 2441/4341/5524 2461/4352/5524 2491/4334/5524 +f 2491/4334/5525 2492/4353/5525 2511/4342/5525 +f 2555/4336/5526 2531/4348/5526 2556/4343/5526 +f 2714/4344/5527 2701/4354/5527 2739/4347/5527 +f 2801/4355/5528 2850/4350/5528 2739/4347/5528 +f 2821/4340/5529 2877/3891/5529 2282/2408/5529 +f 3434/1469/5530 3438/1471/5530 453/1781/5530 +f 3002/4082/5531 3020/4356/5531 2216/4077/5531 +f 2006/769/5532 1663/4357/5532 2299/3901/5532 +f 2880/2711/5533 1145/3970/5533 2317/3953/5533 +f 2818/3019/5534 2856/3977/5534 2798/3235/5534 +f 3460/1116/5535 3440/2538/5535 3439/2120/5535 +f 2372/3823/5536 2410/4358/5536 2430/3822/5536 +f 2431/4351/5537 2449/4359/5537 2441/4341/5537 +f 2441/4341/5538 2449/4359/5538 2461/4352/5538 +f 2461/4352/5539 2492/4353/5539 2491/4334/5539 +f 2570/4360/5540 2556/4343/5540 2531/4348/5540 +f 2570/4360/5541 2604/4345/5541 2556/4343/5541 +f 2682/4349/5542 2701/4354/5542 2714/4344/5542 +f 2701/4354/5543 2759/4361/5543 2739/4347/5543 +f 2759/4361/5544 2758/4362/5544 2739/4347/5544 +f 2758/4362/5545 2801/4355/5545 2739/4347/5545 +f 2423/2030/5546 2575/3627/5546 2855/4107/5546 +f 2637/4254/5547 2636/4130/5547 2618/4250/5547 +f 1898/2134/5548 2062/2136/5548 2108/3276/5548 +f 2410/4358/5549 2431/4351/5549 2430/3822/5549 +f 2492/4353/5550 2512/4363/5550 2511/4342/5550 +f 2511/4342/5551 2512/4363/5551 2531/4348/5551 +f 2557/4364/5552 2570/4360/5552 2531/4348/5552 +f 2682/4349/5553 2683/4365/5553 2701/4354/5553 +f 2683/4365/5554 2759/4361/5554 2701/4354/5554 +f 2801/4355/5555 2835/4366/5555 2850/4350/5555 +f 2863/4367/5556 2821/4340/5556 2850/4350/5556 +f 2863/4367/5557 2877/3891/5557 2821/4340/5557 +f 2434/267/5558 2711/1634/5558 2543/1935/5558 +f 2387/3431/5559 2166/3656/5559 2232/3429/5559 +f 2364/2425/5560 1880/3657/5560 2166/3656/5560 +f 2364/2425/5561 2006/769/5561 1880/3657/5561 +f 2006/769/5562 2364/2425/5562 1663/4357/5562 +f 2858/224/5563 2874/4116/5563 2783/3021/5563 +f 1700/4105/5564 2870/3091/5564 1911/3090/5564 +f 1697/311/5565 2642/4007/5565 566/3014/5565 +f 2995/4368/5566 2994/4094/5566 2205/3867/5566 +f 2376/4009/5567 566/3014/5567 2642/4007/5567 +f 2512/4363/5568 2520/4369/5568 2531/4348/5568 +f 2520/4369/5569 2557/4364/5569 2531/4348/5569 +f 2557/4364/5570 2571/4370/5570 2570/4360/5570 +f 2571/4370/5571 2605/4371/5571 2570/4360/5571 +f 2570/4360/5572 2605/4371/5572 2604/4345/5572 +f 2604/4345/5573 2605/4371/5573 2648/4346/5573 +f 2605/4371/5574 2629/4372/5574 2648/4346/5574 +f 2835/4366/5575 2863/4367/5575 2850/4350/5575 +f 1508/4253/5576 1933/4216/5576 603/4252/5576 +f 2707/4003/5577 2299/3901/5577 1663/4357/5577 +f 2232/3429/5578 2223/1186/5578 2330/3729/5578 +f 2626/4214/5579 2840/4273/5579 2623/4215/5579 +f 2421/4113/5580 2710/4122/5580 2752/4114/5580 +f 2404/4373/5581 2411/4374/5581 2410/4358/5581 +f 2403/2454/5582 2404/2434/5582 2410/2527/5582 +f 2410/4358/5583 2411/4374/5583 2431/4351/5583 +f 2683/4365/5584 2682/4349/5584 2648/4346/5584 +f 2629/4372/5585 2683/4365/5585 2648/4346/5585 +f 2822/4375/5586 2801/4355/5586 2758/4362/5586 +f 2801/4355/5587 2822/4375/5587 2835/4366/5587 +f 2863/4367/5588 2285/2534/5588 2877/3891/5588 +f 2285/2534/5589 233/3883/5589 2877/3891/5589 +f 2783/3021/5590 2726/4221/5590 1674/1198/5590 +f 3420/4376/5591 1491/2933/5591 3404/4377/5591 +f 1751/3562/5592 1731/3549/5592 2446/3567/5592 +f 2598/3920/5593 2278/3921/5593 2597/4120/5593 +f 2242/2406/5594 233/3883/5594 2266/3679/5594 +f 2234/4018/5595 2718/4029/5595 2296/3860/5595 +f 2128/4378/5596 551/4238/5596 1666/736/5596 +f 2674/265/5597 2296/3860/5597 2718/4029/5597 +f 2472/4379/5598 2492/4353/5598 2461/4352/5598 +f 2472/4380/5599 2493/4381/5599 2512/4382/5599 +f 2492/4383/5600 2472/4380/5600 2512/4382/5600 +f 2520/4369/5601 2558/4384/5601 2557/4364/5601 +f 2557/4364/5602 2558/4384/5602 2571/4370/5602 +f 2748/4151/5603 2790/240/5603 2747/4223/5603 +f 2790/240/5604 2811/4170/5604 2747/4223/5604 +f 2167/3477/5605 2307/2426/5605 2610/3637/5605 +f 551/4238/5606 169/4181/5606 2601/2264/5606 +f 2269/3941/5607 2770/2225/5607 2784/2224/5607 +f 2364/2425/5608 2707/4003/5608 1663/4357/5608 +f 2502/3650/5609 2480/1920/5609 2516/3216/5609 +f 2873/4014/5610 2782/4218/5610 2858/224/5610 +f 2411/4374/5611 2420/4385/5611 2431/4351/5611 +f 2420/4385/5612 2449/4359/5612 2431/4351/5612 +f 2493/4386/5613 2513/4387/5613 2512/4363/5613 +f 2512/4363/5614 2513/4387/5614 2520/4369/5614 +f 2558/4384/5615 2587/4388/5615 2571/4370/5615 +f 2571/4370/5616 2587/4388/5616 2605/4371/5616 +f 2665/4389/5617 2683/4365/5617 2629/4372/5617 +f 2759/4361/5618 2822/4375/5618 2758/4362/5618 +f 2822/4375/5619 2836/4390/5619 2835/4366/5619 +f 2141/770/5620 2299/3901/5620 2035/3391/5620 +f 3101/1410/5621 3100/4127/5621 3057/1411/5621 +f 2404/4373/5622 2412/4266/5622 2411/4374/5622 +f 2411/4374/5623 2412/4266/5623 2420/4385/5623 +f 2449/4359/5624 2462/4391/5624 2461/4352/5624 +f 2461/4352/5625 2462/4391/5625 2472/4379/5625 +f 2520/4369/5626 2546/4392/5626 2558/4384/5626 +f 2587/4388/5627 2611/4393/5627 2605/4371/5627 +f 2605/4371/5628 2611/4393/5628 2629/4372/5628 +f 2683/4365/5629 2665/4389/5629 2759/4361/5629 +f 2836/4390/5630 2878/4394/5630 2835/4366/5630 +f 2878/4394/5631 2863/4367/5631 2835/4366/5631 +f 2878/4394/5632 2893/4395/5632 2863/4367/5632 +f 2893/4395/5633 2285/2534/5633 2863/4367/5633 +f 2655/3557/5634 2637/4254/5634 2608/4229/5634 +f 2196/3985/5635 2166/3656/5635 2387/3431/5635 +f 2055/3597/5636 2853/4396/5636 2012/2349/5636 +f 1891/4169/5637 2489/2898/5637 1496/4131/5637 +f 2779/3187/5638 2445/4098/5638 1934/4012/5638 +f 2450/4397/5639 2449/4359/5639 2420/4385/5639 +f 2449/4359/5640 2450/4397/5640 2462/4391/5640 +f 2462/4398/5641 2493/4381/5641 2472/4380/5641 +f 2587/4388/5642 2630/4399/5642 2611/4393/5642 +f 2629/4372/5643 2611/4393/5643 2665/4389/5643 +f 2665/4389/5644 2760/4400/5644 2759/4361/5644 +f 2759/4361/5645 2760/4400/5645 2822/4375/5645 +f 2721/732/5646 2694/2883/5646 2695/3046/5646 +f 2721/732/5647 2720/734/5647 2694/2883/5647 +f 2846/3243/5648 2813/3242/5648 2777/4193/5648 +f 2726/4221/5649 2672/4152/5649 2670/1761/5649 +f 1496/4131/5650 2644/4132/5650 2641/4184/5650 +f 2873/4014/5651 2858/224/5651 2239/3991/5651 +f 2600/268/5652 2543/1935/5652 2702/1076/5652 +f 2404/4373/5653 2405/4401/5653 2412/4266/5653 +f 2432/4265/5654 2450/4397/5654 2420/4385/5654 +f 2450/4397/5655 2463/4402/5655 2462/4391/5655 +f 2462/4398/5656 2463/4403/5656 2493/4381/5656 +f 2513/4387/5657 2546/4392/5657 2520/4369/5657 +f 2558/4384/5658 2546/4392/5658 2587/4388/5658 +f 2587/4388/5659 2588/4404/5659 2630/4399/5659 +f 2611/4393/5660 2666/4405/5660 2665/4389/5660 +f 2760/4400/5661 2824/4406/5661 2822/4375/5661 +f 2822/4375/5662 2823/4407/5662 2836/4390/5662 +f 2823/4407/5663 2851/4408/5663 2836/4390/5663 +f 2836/4390/5664 2851/4408/5664 2878/4394/5664 +f 2782/4218/5665 2871/3978/5665 2874/4116/5665 +f 2765/4182/5666 1732/3803/5666 2723/653/5666 +f 2634/362/5667 2622/4283/5667 2653/2305/5667 +f 2319/4256/5668 1741/4078/5668 2371/2486/5668 +f 2151/3742/5669 2764/4076/5669 2196/3985/5669 +f 179/1345/5670 178/1320/5670 166/1295/5670 +f 2687/2234/5671 2703/3525/5671 1931/2235/5671 +f 2870/3091/5672 2886/4106/5672 2845/4104/5672 +f 2463/4403/5673 2494/4409/5673 2493/4381/5673 +f 2494/4410/5674 2521/4411/5674 2513/4387/5674 +f 2493/4386/5675 2494/4410/5675 2513/4387/5675 +f 2521/4411/5676 2546/4392/5676 2513/4387/5676 +f 2546/4392/5677 2588/4404/5677 2587/4388/5677 +f 2666/4405/5678 2684/4412/5678 2665/4389/5678 +f 2665/4389/5679 2684/4412/5679 2760/4400/5679 +f 2822/4375/5680 2824/4406/5680 2823/4407/5680 +f 2316/2535/5681 2285/2534/5681 2893/4395/5681 +f 567/4413/5682 2307/2426/5682 2196/3985/5682 +f 2636/4130/5683 2705/4129/5683 2690/4226/5683 +f 2702/1076/5684 3486/1075/5684 1697/311/5684 +f 2420/4385/5685 2412/4266/5685 2432/4265/5685 +f 2546/4392/5686 2559/4414/5686 2588/4404/5686 +f 2588/4404/5687 2612/4415/5687 2630/4399/5687 +f 2630/4399/5688 2666/4405/5688 2611/4393/5688 +f 2740/4416/5689 2824/4406/5689 2760/4400/5689 +f 951/1965/5690 952/2837/5690 962/1964/5690 +f 2539/4241/5691 2563/4231/5691 2522/3651/5691 +f 2298/64/5692 2464/1921/5692 2446/1444/5692 +f 2239/3991/5693 2767/226/5693 2696/953/5693 +f 2829/3163/5694 2890/1848/5694 1709/2836/5694 +f 2521/4411/5695 2559/4414/5695 2546/4392/5695 +f 2559/4414/5696 2589/4417/5696 2588/4404/5696 +f 2588/4404/5697 2589/4417/5697 2612/4415/5697 +f 2684/4412/5698 2715/4418/5698 2760/4400/5698 +f 2760/4400/5699 2715/4418/5699 2740/4416/5699 +f 2824/4406/5700 2825/4419/5700 2823/4407/5700 +f 2823/4407/5701 2825/4419/5701 2851/4408/5701 +f 2864/4085/5702 2878/4394/5702 2851/4408/5702 +f 2864/4085/5703 2893/4395/5703 2878/4394/5703 +f 2764/4076/5704 2209/2292/5704 567/4413/5704 +f 2644/4132/5705 2517/2072/5705 2848/4183/5705 +f 2415/3148/5706 2409/3150/5706 2175/3193/5706 +f 2783/3021/5707 2591/3020/5707 2726/4221/5707 +f 2705/4129/5708 2747/4223/5708 2690/4226/5708 +f 2767/226/5709 2239/3991/5709 2858/224/5709 +f 2405/4401/5710 2406/3468/5710 2412/4266/5710 +f 2494/4410/5711 2473/4420/5711 2521/4411/5711 +f 2589/4417/5712 2613/4421/5712 2612/4415/5712 +f 2620/4422/5713 2666/4405/5713 2630/4399/5713 +f 2825/4419/5714 2864/4085/5714 2851/4408/5714 +f 2316/2535/5715 2893/4395/5715 216/3858/5715 +f 2437/4165/5716 2438/96/5716 2447/4173/5716 +f 2625/650/5717 2752/4114/5717 1702/4108/5717 +f 2966/4270/5718 2987/4269/5718 2940/4423/5718 +f 2705/4129/5719 2748/4151/5719 2747/4223/5719 +f 2782/4218/5720 2874/4116/5720 2858/224/5720 +f 2432/4265/5721 2451/4424/5721 2450/4397/5721 +f 2450/4397/5722 2451/4424/5722 2463/4402/5722 +f 2451/4425/5723 2473/4426/5723 2494/4409/5723 +f 2463/4403/5724 2451/4425/5724 2494/4409/5724 +f 2559/4414/5725 2547/4427/5725 2589/4417/5725 +f 2612/4415/5726 2613/4421/5726 2630/4399/5726 +f 2666/4405/5727 2685/4428/5727 2684/4412/5727 +f 2354/4086/5728 2893/4395/5728 2864/4085/5728 +f 2354/4086/5729 216/3858/5729 2893/4395/5729 +f 1901/3579/5730 2616/2421/5730 2621/4259/5730 +f 2209/2292/5731 2807/3949/5731 567/4413/5731 +f 567/4413/5732 2807/3949/5732 2307/2426/5732 +f 2735/263/5733 1473/2666/5733 2699/264/5733 +f 2438/96/5734 2437/4165/5734 2428/97/5734 +f 2547/4427/5735 2579/4429/5735 2589/4417/5735 +f 2620/4422/5736 2630/4399/5736 2613/4421/5736 +f 2685/4428/5737 2666/4405/5737 2620/4422/5737 +f 2684/4412/5738 2685/4428/5738 2715/4418/5738 +f 2715/4418/5739 2728/4430/5739 2740/4416/5739 +f 2728/4430/5740 2802/4431/5740 2740/4416/5740 +f 2740/4416/5741 2802/4431/5741 2824/4406/5741 +f 1909/4157/5742 2150/4065/5742 2906/2458/5742 +f 1941/3492/5743 2734/4168/5743 2722/3730/5743 +f 2807/3949/5744 2610/3637/5744 2307/2426/5744 +f 2691/806/5745 2706/3201/5745 2668/807/5745 +f 2157/1187/5746 2182/768/5746 2359/3910/5746 +f 2453/4185/5747 2848/4183/5747 2698/4137/5747 +f 2438/96/5748 2456/3030/5748 2447/4173/5748 +f 2406/3468/5749 2306/3467/5749 2432/4265/5749 +f 2514/4432/5750 2473/4426/5750 2451/4425/5750 +f 2514/4433/5751 2521/4411/5751 2473/4420/5751 +f 2521/4411/5752 2532/4434/5752 2559/4414/5752 +f 2532/4434/5753 2547/4427/5753 2559/4414/5753 +f 2589/4417/5754 2579/4429/5754 2613/4421/5754 +f 2802/4431/5755 2825/4419/5755 2824/4406/5755 +f 2166/3656/5756 2196/3985/5756 2364/2425/5756 +f 2489/2898/5757 2517/2072/5757 2644/4132/5757 +f 2720/734/5758 2732/4304/5758 2694/2883/5758 +f 2622/4283/5759 2704/3102/5759 2653/2305/5759 +f 2442/459/5760 2451/4424/5760 2432/4265/5760 +f 2514/4433/5761 2532/4434/5761 2521/4411/5761 +f 2716/4435/5762 2741/4436/5762 2728/4430/5762 +f 2715/4418/5763 2716/4435/5763 2728/4430/5763 +f 2728/4430/5764 2741/4436/5764 2802/4431/5764 +f 2802/4431/5765 2786/4437/5765 2825/4419/5765 +f 2825/4419/5766 2803/4438/5766 2864/4085/5766 +f 2623/4215/5767 2676/4123/5767 2162/4037/5767 +f 2164/1943/5768 2154/3969/5768 1266/2733/5768 +f 1916/2410/5769 2059/3818/5769 2159/3837/5769 +f 2216/4077/5770 3020/4356/5770 3019/2296/5770 +f 2864/4085/5771 2803/4438/5771 2259/3553/5771 +f 3367/3009/5772 3340/3111/5772 1486/2877/5772 +f 3425/313/5773 2313/3999/5773 2642/4007/5773 +f 2406/2355/5774 2911/2357/5774 2908/3510/5774 +f 2311/3862/5775 2191/3296/5775 2454/845/5775 +f 2306/3467/5776 2413/4439/5776 2432/4265/5776 +f 2474/4440/5777 2532/4434/5777 2514/4433/5777 +f 2547/4427/5778 2572/4441/5778 2579/4429/5778 +f 2613/4421/5779 2614/4442/5779 2620/4422/5779 +f 2620/4422/5780 2649/4443/5780 2685/4428/5780 +f 2649/4443/5781 2716/4435/5781 2715/4418/5781 +f 2685/4428/5782 2649/4443/5782 2715/4418/5782 +f 2741/4436/5783 2786/4437/5783 2802/4431/5783 +f 1611/4191/5784 967/1517/5784 2897/2566/5784 +f 2869/1415/5785 2899/4240/5785 1534/3131/5785 +f 2261/1889/5786 1887/1891/5786 1741/4078/5786 +f 2490/4293/5787 981/2431/5787 2470/4300/5787 +f 2732/4304/5788 2719/1905/5788 2693/2670/5788 +f 2843/4164/5789 2884/4187/5789 2883/4189/5789 +f 2655/3557/5790 2668/807/5790 2637/4254/5790 +f 1829/3706/5791 2523/3217/5791 2503/2146/5791 +f 2888/4141/5792 1934/4012/5792 2273/4011/5792 +f 2916/851/5793 2926/2970/5793 2915/3582/5793 +f 3091/1788/5794 3135/4444/5794 3062/1789/5794 +f 2413/4439/5795 2442/459/5795 2432/4265/5795 +f 2475/4445/5796 2451/4424/5796 2442/459/5796 +f 2474/4446/5797 2514/4432/5797 2451/4425/5797 +f 2475/4445/5798 2474/4440/5798 2451/4424/5798 +f 2532/4434/5799 2572/4441/5799 2547/4427/5799 +f 2579/4429/5800 2614/4442/5800 2613/4421/5800 +f 2631/4447/5801 2649/4443/5801 2620/4422/5801 +f 2786/4437/5802 2803/4438/5802 2825/4419/5802 +f 2623/4215/5803 2453/4185/5803 2676/4123/5803 +f 2672/4152/5804 1689/1864/5804 2592/648/5804 +f 23/783/5805 58/211/5805 36/25/5805 +f 2163/4081/5806 2455/4200/5806 2255/4448/5806 +f 2408/4099/5807 1933/4216/5807 2829/3163/5807 +f 3461/270/5808 2768/662/5808 2808/4228/5808 +f 2311/3862/5809 2454/845/5809 2330/3729/5809 +f 2425/3192/5810 2427/4110/5810 2455/4200/5810 +f 2582/3079/5811 2622/4283/5811 2634/362/5811 +f 2964/527/5812 2984/2484/5812 2983/528/5812 +f 2501/2757/5813 2875/4449/5813 2524/2344/5813 +f 2464/1921/5814 1751/4242/5814 2446/1444/5814 +f 2671/2879/5815 2697/2542/5815 2524/2344/5815 +f 2696/953/5816 2253/699/5816 2239/3991/5816 +f 2614/4442/5817 2631/4447/5817 2620/4422/5817 +f 2803/4438/5818 2865/4450/5818 2259/3553/5818 +f 2128/4378/5819 1666/736/5819 2107/735/5819 +f 1792/3652/5820 2522/3651/5820 2275/4451/5820 +f 2623/4215/5821 2162/4037/5821 2675/4199/5821 +f 2706/3201/5822 2749/3057/5822 2705/4129/5822 +f 2422/2070/5823 2584/3877/5823 2479/4102/5823 +f 1028/3037/5824 2183/1718/5824 2816/2069/5824 +f 3030/2297/5825 2426/4111/5825 2425/3192/5825 +f 3295/4452/5826 3280/4453/5826 3242/3945/5826 +f 3243/2445/5827 3295/4452/5827 3242/3945/5827 +f 3404/4377/5828 1480/2932/5828 3372/4454/5828 +f 2413/4439/5829 2414/460/5829 2442/459/5829 +f 2495/4455/5830 2474/4440/5830 2475/4445/5830 +f 2495/4455/5831 2573/4456/5831 2474/4440/5831 +f 2474/4440/5832 2573/4456/5832 2532/4434/5832 +f 2572/4441/5833 2590/4457/5833 2579/4429/5833 +f 2579/4429/5834 2590/4457/5834 2614/4442/5834 +f 2631/4447/5835 2667/4458/5835 2649/4443/5835 +f 2667/4458/5836 2774/4459/5836 2649/4443/5836 +f 2649/4443/5837 2774/4459/5837 2716/4435/5837 +f 2813/3242/5838 2845/4104/5838 2792/1399/5838 +f 2705/4129/5839 2749/3057/5839 2748/4151/5839 +f 3464/20/5840 3446/22/5840 3484/2744/5840 +f 2776/1398/5841 2813/3242/5841 2792/1399/5841 +f 2813/3242/5842 2870/3091/5842 2845/4104/5842 +f 3084/95/5843 3124/3031/5843 2438/96/5843 +f 3013/4460/5844 3037/4461/5844 3012/2799/5844 +f 2911/2357/5845 2917/849/5845 2908/3510/5845 +f 3295/4452/5846 3294/4462/5846 3280/4453/5846 +f 2839/1640/5847 2875/4449/5847 2501/2757/5847 +f 2671/2879/5848 2524/2344/5848 2875/4449/5848 +f 1898/3035/5849 2852/2118/5849 2548/2117/5849 +f 2476/4463/5850 2475/4445/5850 2442/459/5850 +f 2476/4463/5851 2495/4455/5851 2475/4445/5851 +f 2532/4434/5852 2573/4456/5852 2572/4441/5852 +f 2572/4441/5853 2573/4456/5853 2590/4457/5853 +f 2716/4435/5854 2774/4459/5854 2741/4436/5854 +f 2774/4459/5855 2786/4437/5855 2741/4436/5855 +f 2895/3554/5856 2259/3553/5856 2865/4450/5856 +f 2641/4184/5857 2453/4185/5857 2623/4215/5857 +f 2750/733/5858 2762/4464/5858 2720/734/5858 +f 717/1991/5859 136/378/5859 160/661/5859 +f 2793/207/5860 2777/4193/5860 2762/208/5860 +f 2843/4164/5861 2885/4109/5861 2884/4187/5861 +f 1666/736/5862 1657/649/5862 1350/737/5862 +f 3013/4460/5863 3012/2799/5863 2975/4465/5863 +f 2892/4466/5864 2671/2879/5864 2875/4449/5864 +f 1939/4467/5865 2184/2880/5865 2671/2879/5865 +f 2414/460/5866 2150/1282/5866 1909/458/5866 +f 1778/726/5867 2305/3932/5867 2276/2298/5867 +f 2667/4458/5868 2729/4468/5868 2774/4459/5868 +f 2729/4468/5869 2717/4469/5869 2774/4459/5869 +f 2804/4470/5870 2803/4438/5870 2786/4437/5870 +f 2099/3456/5871 2882/2212/5871 2896/2462/5871 +f 2733/4167/5872 2750/733/5872 2721/732/5872 +f 2154/4471/5873 2184/2880/5873 1939/4467/5873 +f 2782/4218/5874 2186/3971/5874 2871/3978/5874 +f 2793/207/5875 2846/3243/5875 2777/4193/5875 +f 2847/4236/5876 2846/3243/5876 2794/4180/5876 +f 2456/3030/5877 2438/96/5877 3124/3031/5877 +f 2154/4471/5878 2164/2553/5878 2184/2880/5878 +f 1909/458/5879 2452/4177/5879 2442/459/5879 +f 1857/3446/5880 1856/3408/5880 1834/1865/5880 +f 2442/459/5881 2452/4177/5881 2476/4463/5881 +f 2533/4472/5882 2573/4456/5882 2495/4455/5882 +f 2580/4473/5883 2590/4457/5883 2573/4456/5883 +f 2632/4474/5884 2614/4442/5884 2590/4457/5884 +f 2632/4474/5885 2631/4447/5885 2614/4442/5885 +f 2650/4475/5886 2667/4458/5886 2631/4447/5886 +f 2632/4474/5887 2650/4475/5887 2631/4447/5887 +f 2803/4438/5888 2804/4470/5888 2865/4450/5888 +f 2241/3836/5889 2861/3926/5889 2158/1442/5889 +f 2109/4097/5890 1136/4100/5890 2799/4101/5890 +f 2720/734/5891 2762/4464/5891 2732/4304/5891 +f 3239/4476/5892 3254/4477/5892 1499/3237/5892 +f 1499/3230/5893 3223/4478/5893 3239/4479/5893 +f 2328/2459/5894 214/1716/5894 813/1957/5894 +f 960/2177/5895 2993/2176/5895 2486/4194/5895 +f 2496/4480/5896 2495/4455/5896 2476/4463/5896 +f 2496/4480/5897 2533/4472/5897 2495/4455/5897 +f 2533/4472/5898 2580/4473/5898 2573/4456/5898 +f 2606/3396/5899 2590/4457/5899 2580/4473/5899 +f 2606/3396/5900 2632/4474/5900 2590/4457/5900 +f 2804/4470/5901 2786/4437/5901 2774/4459/5901 +f 2804/4470/5902 2866/4019/5902 2865/4450/5902 +f 2865/4450/5903 2866/4019/5903 2895/3554/5903 +f 2777/4193/5904 2776/1398/5904 2762/208/5904 +f 2723/653/5905 2643/677/5905 2640/654/5905 +f 2795/4237/5906 2794/4180/5906 2778/4179/5906 +f 2160/4042/5907 2675/4199/5907 2162/4037/5907 +f 3309/4481/5908 3344/4482/5908 3229/4483/5908 +f 1933/4216/5909 2840/4273/5909 2626/4214/5909 +f 2417/4156/5910 2641/4184/5910 2840/4273/5910 +f 2640/654/5911 2643/677/5911 2879/679/5911 +f 1725/2220/5912 1734/2219/5912 1500/2569/5912 +f 2908/3510/5913 2916/851/5913 2907/2457/5913 +f 2540/4484/5914 2839/1640/5914 1897/858/5914 +f 2540/4484/5915 2875/4449/5915 2839/1640/5915 +f 1865/2971/5916 2671/2879/5916 2892/4466/5916 +f 2671/2879/5917 1865/2971/5917 1939/4467/5917 +f 1941/3492/5918 2778/4147/5918 2734/4168/5918 +f 2650/4475/5919 2729/4468/5919 2667/4458/5919 +f 2774/4459/5920 2717/4469/5920 2804/4470/5920 +f 2804/4470/5921 2805/4485/5921 2866/4019/5921 +f 3230/4486/5922 3309/4481/5922 3229/4483/5922 +f 1508/4253/5923 2840/4273/5923 1933/4216/5923 +f 2692/2671/5924 2656/4487/5924 2657/4488/5924 +f 2575/3627/5925 2109/4097/5925 1473/2666/5925 +f 3158/4489/5926 3157/4490/5926 3123/4491/5926 +f 3266/4492/5927 1476/3066/5927 1483/3098/5927 +f 2540/4484/5928 2892/4466/5928 2875/4449/5928 +f 2780/2714/5929 1689/1864/5929 2672/4152/5929 +f 2633/3372/5930 2632/4474/5930 2606/3396/5930 +f 2887/250/5931 602/3241/5931 1703/251/5931 +f 2301/3990/5932 2797/1717/5932 2328/2459/5932 +f 2797/1717/5933 214/1716/5933 2328/2459/5933 +f 2522/3651/5934 2538/3058/5934 2537/3051/5934 +f 1933/4216/5935 2623/4215/5935 2675/4199/5935 +f 2765/4182/5936 2723/653/5936 2601/2264/5936 +f 1483/3327/5937 1501/3326/5937 1725/4493/5937 +f 2986/2729/5938 3036/2801/5938 3011/4494/5938 +f 2737/2972/5939 1865/2971/5939 2892/4466/5939 +f 1909/458/5940 2433/3149/5940 2452/4177/5940 +f 2497/4495/5941 2476/4463/5941 2452/4177/5941 +f 2476/4463/5942 2497/4495/5942 2496/4480/5942 +f 2496/4480/5943 2534/4496/5943 2533/4472/5943 +f 2633/3372/5944 2650/4475/5944 2632/4474/5944 +f 2729/4468/5945 2742/4497/5945 2717/4469/5945 +f 2717/4469/5946 2805/4485/5946 2804/4470/5946 +f 2792/1399/5947 2791/239/5947 2731/1400/5947 +f 2163/4081/5948 2465/2145/5948 2436/2295/5948 +f 1675/2665/5949 2459/2071/5949 2422/2070/5949 +f 2838/1635/5950 1819/3744/5950 2019/1636/5950 +f 3266/4498/5951 1483/4499/5951 1725/4500/5951 +f 2928/4501/5952 2935/4502/5952 2920/4503/5952 +f 3268/4504/5953 3298/1735/5953 3284/1737/5953 +f 2985/4505/5954 2986/2729/5954 3011/4494/5954 +f 2737/2972/5955 2892/4466/5955 2540/4484/5955 +f 1725/2220/5956 1499/3230/5956 3254/4506/5956 +f 2459/2071/5957 1675/2665/5957 2735/263/5957 +f 2409/3150/5958 2433/3149/5958 1909/458/5958 +f 2497/4495/5959 2534/4496/5959 2496/4480/5959 +f 1856/4507/5960 2533/4472/5960 2534/4496/5960 +f 1856/4507/5961 2580/4473/5961 2533/4472/5961 +f 1856/4507/5962 1885/3397/5962 2580/4473/5962 +f 1885/3397/5963 2606/3396/5963 2580/4473/5963 +f 2633/3372/5964 2729/4468/5964 2650/4475/5964 +f 2742/4497/5965 2805/4485/5965 2717/4469/5965 +f 2036/3454/5966 2867/3464/5966 2075/3422/5966 +f 2796/4134/5967 2795/2348/5967 2751/4508/5967 +f 1307/2031/5968 2584/3877/5968 2112/3602/5968 +f 566/3014/5969 2376/4009/5969 2177/4023/5969 +f 3266/4492/5970 1725/2220/5970 3254/4506/5970 +f 3070/4509/5971 3081/4510/5971 3058/4172/5971 +f 2416/2911/5972 2540/4484/5972 1897/858/5972 +f 2769/669/5973 2737/2972/5973 2540/4484/5973 +f 3370/685/5974 3401/3140/5974 3359/4198/5974 +f 2433/3149/5975 2415/3148/5975 2452/4177/5975 +f 1834/4511/5976 1856/4507/5976 2534/4496/5976 +f 1950/3373/5977 2633/3372/5977 2606/3396/5977 +f 1899/3398/5978 1950/3373/5978 2606/3396/5978 +f 1997/4217/5979 2729/4468/5979 2633/3372/5979 +f 2196/3985/5980 2387/3431/5980 2151/3742/5980 +f 1111/1971/5981 3441/4512/5981 3462/1972/5981 +f 2301/3990/5982 2482/2327/5982 2797/1717/5982 +f 1676/3225/5983 1892/4150/5983 2417/4156/5983 +f 1099/3269/5984 2341/4513/5984 1849/3270/5984 +f 1500/4514/5985 1499/3231/5985 1725/4493/5985 +f 2766/681/5986 1897/858/5986 2669/857/5986 +f 2766/681/5987 2416/2911/5987 1897/858/5987 +f 2416/2911/5988 2769/669/5988 2540/4484/5988 +f 2779/3187/5989 1934/4012/5989 966/3334/5989 +f 2452/4177/5990 2477/2524/5990 2497/4495/5990 +f 2477/2524/5991 2478/2526/5991 2497/4495/5991 +f 2497/4495/5992 2478/2526/5992 2534/4496/5992 +f 2478/2526/5993 1834/4511/5993 2534/4496/5993 +f 1997/4217/5994 2743/2866/5994 2729/4468/5994 +f 2743/2866/5995 2742/4497/5995 2729/4468/5995 +f 2806/2868/5996 2805/4485/5996 2742/4497/5996 +f 2805/4485/5997 2837/2709/5997 2866/4019/5997 +f 2866/4019/5998 2880/2711/5998 2317/3953/5998 +f 3471/3576/5999 1363/3558/5999 1964/2128/5999 +f 1703/251/6000 2567/3106/6000 1769/252/6000 +f 2210/4112/6001 966/3334/6001 2888/4141/6001 +f 2482/2327/6002 2816/2069/6002 2797/1717/6002 +f 3452/2409/6003 3503/615/6003 3507/1858/6003 +f 2887/250/6004 2870/3091/6004 2813/3242/6004 +f 2884/4187/6005 1676/3225/6005 1686/3227/6005 +f 2694/2883/6006 2693/2670/6006 2658/2884/6006 +f 2435/3335/6007 966/3334/6007 2210/4112/6007 +f 3047/4515/6008 3088/4516/6008 3045/2277/6008 +f 3375/2513/6009 570/4517/6009 3385/2514/6009 +f 2794/4180/6010 2793/207/6010 2750/206/6010 +f 2443/848/6011 2477/2524/6011 2452/4177/6011 +f 2012/2349/6012 2853/4396/6012 2847/2350/6012 +f 1802/1363/6013 1788/1227/6013 1789/2707/6013 +f 2686/3371/6014 1997/4217/6014 2633/3372/6014 +f 2742/4497/6015 2743/2866/6015 2806/2868/6015 +f 2837/2709/6016 2805/4485/6016 2806/2868/6016 +f 2837/2709/6017 2880/2711/6017 2866/4019/6017 +f 2899/4240/6018 1611/4191/6018 1534/3131/6018 +f 2853/4396/6019 2055/3597/6019 2077/3599/6019 +f 2697/2542/6020 2184/2880/6020 2178/2552/6020 +f 2794/4180/6021 2846/3243/6021 2793/207/6021 +f 2526/4206/6022 2487/4205/6022 1007/4220/6022 +f 3059/3133/6023 3035/3135/6023 3036/2801/6023 +f 2769/669/6024 2467/289/6024 2737/2972/6024 +f 2737/2972/6025 2467/289/6025 1875/2973/6025 +f 2627/4286/6026 2662/2367/6026 2602/4136/6026 +f 1832/3764/6027 2838/3766/6027 2879/4518/6027 +f 2764/4076/6028 567/4413/6028 2196/3985/6028 +f 967/1517/6029 1890/4192/6029 1793/1518/6029 +f 2273/4011/6030 2210/4112/6030 2888/4141/6030 +f 3203/4519/6031 3217/4520/6031 3168/4521/6031 +f 3250/4522/6032 3249/4523/6032 3217/4520/6032 +f 3314/4524/6033 3332/1653/6033 3331/4525/6033 +f 3105/4526/6034 3121/4527/6034 3134/4528/6034 +f 2948/2728/6035 2975/4465/6035 2986/2729/6035 +f 3181/2775/6036 3158/4489/6036 3093/4529/6036 +f 3060/4530/6037 3105/4526/6037 3089/4531/6037 +f 3375/4532/6038 3406/2012/6038 570/2011/6038 +f 3284/1737/6039 3312/3154/6039 3297/4533/6039 +f 3267/4534/6040 3309/4481/6040 3230/4486/6040 +f 3092/2735/6041 3123/4491/6041 3091/1788/6041 +f 3052/4535/6042 3060/4530/6042 3089/4531/6042 +f 3116/4536/6043 3130/4537/6043 3129/4538/6043 +f 3018/2905/6044 3001/2963/6044 2991/1880/6044 +f 2992/1879/6045 3018/2905/6045 2991/1880/6045 +f 3017/4539/6046 3016/2961/6046 3001/2963/6046 +f 3420/4540/6047 3421/4212/6047 2469/3908/6047 +f 1677/3366/6048 1805/2467/6048 3274/3364/6048 +f 3423/4541/6049 3405/4542/6049 993/4543/6049 +f 3018/2905/6050 3017/4539/6050 3001/2963/6050 +f 3300/4544/6051 3299/4545/6051 3285/4546/6051 +f 3345/4547/6052 3344/4482/6052 3309/4481/6052 +f 1481/3085/6053 3150/3059/6053 1474/4548/6053 +f 3060/4530/6054 3090/4549/6054 3105/4526/6054 +f 3090/4549/6055 3121/4527/6055 3105/4526/6055 +f 3249/4523/6056 3285/4546/6056 3248/4550/6056 +f 3464/20/6057 3484/2744/6057 1197/3438/6057 +f 3037/4551/6058 3051/4552/6058 3050/4553/6058 +f 3178/4554/6059 3168/4521/6059 3233/4555/6059 +f 3122/4556/6060 3134/4528/6060 3121/4527/6060 +f 3134/4528/6061 3168/4521/6061 3133/4557/6061 +f 3203/4519/6062 3250/4522/6062 3217/4520/6062 +f 3250/4522/6063 3286/4558/6063 3249/4523/6063 +f 3028/2962/6064 3027/4559/6064 3000/4560/6064 +f 3286/4558/6065 3300/4544/6065 3249/4523/6065 +f 3315/4561/6066 3314/4562/6066 3300/4544/6066 +f 3063/898/6067 3094/4563/6067 3092/2735/6067 +f 3001/2963/6068 3000/4560/6068 2990/2560/6068 +f 3094/4563/6069 3093/4529/6069 3092/2735/6069 +f 3094/4563/6070 3181/2775/6070 3093/4529/6070 +f 3381/3068/6071 1480/3067/6071 1490/1412/6071 +f 3001/2963/6072 3028/2962/6072 3000/4560/6072 +f 3038/4564/6073 3060/4530/6073 3052/4535/6073 +f 3290/4565/6074 3274/3364/6074 3465/838/6074 +f 3274/3364/6075 3491/2468/6075 3465/838/6075 +f 3290/4565/6076 1109/4566/6076 3274/3364/6076 +f 3274/3364/6077 1109/4566/6077 1531/3427/6077 +f 3190/4567/6078 3197/2272/6078 3228/2446/6078 +f 3165/3027/6079 3261/4568/6079 3201/4569/6079 +f 3496/1097/6080 3290/4565/6080 3465/838/6080 +f 1109/4566/6081 3264/1115/6081 1631/4128/6081 +f 3236/1114/6082 1631/4128/6082 3264/1115/6082 +f 1730/3497/6083 1723/3156/6083 2949/3532/6083 +f 3061/4570/6084 3016/2961/6084 3017/4539/6084 +f 3061/4570/6085 3038/4564/6085 3016/2961/6085 +f 3061/4570/6086 3060/4530/6086 3038/4564/6086 +f 3264/1115/6087 1109/4566/6087 3290/4565/6087 +f 3122/4556/6088 3169/4571/6088 3134/4528/6088 +f 2982/4572/6089 3048/4140/6089 2981/4573/6089 +f 3217/4520/6090 3233/4555/6090 3168/4521/6090 +f 2980/2936/6091 3045/2277/6091 2998/2474/6091 +f 3496/1097/6092 3477/788/6092 3290/4565/6092 +f 1531/3427/6093 1109/4566/6093 1631/4128/6093 +f 3290/4565/6094 3477/788/6094 3264/1115/6094 +f 1493/234/6095 2469/730/6095 1494/729/6095 +f 3123/4491/6096 3157/4490/6096 3135/4444/6096 +f 2934/4574/6097 2938/4575/6097 2918/4576/6097 +f 3088/4516/6098 3087/1409/6098 3045/2277/6098 +f 3286/4558/6099 3315/4561/6099 3300/4544/6099 +f 3285/4546/6100 3299/4545/6100 3298/1735/6100 +f 27/397/6101 572/1962/6101 3350/3669/6101 +f 2990/2560/6102 2989/1884/6102 2429/1886/6102 +f 2402/2512/6103 2919/4577/6103 2403/2454/6103 +f 2136/1679/6104 1368/2889/6104 1367/3770/6104 +f 3013/4578/6105 3051/4579/6105 3037/4580/6105 +f 3364/2835/6106 781/2148/6106 2017/2157/6106 +f 3374/2436/6107 3346/4581/6107 3328/2437/6107 +f 3131/4582/6108 3166/4583/6108 3130/4537/6108 +f 3232/4584/6109 3233/4555/6109 3248/4550/6109 +f 3166/4583/6110 3176/4585/6110 3165/3027/6110 +f 3075/4586/6111 3082/4587/6111 3104/4588/6111 +f 3104/4588/6112 3131/4582/6112 3130/4537/6112 +f 3142/4589/6113 3101/1410/6113 3087/1409/6113 +f 3165/3027/6114 3176/4585/6114 3191/4590/6114 +f 3306/4591/6115 3382/2466/6115 3294/105/6115 +f 2965/4592/6116 2985/4593/6116 2984/4594/6116 +f 3296/4595/6117 3310/4596/6117 3267/4534/6117 +f 3260/4597/6118 3296/4595/6118 3267/4534/6118 +f 3178/4598/6119 3233/4599/6119 3232/4600/6119 +f 3165/3027/6120 3201/4569/6120 3154/3028/6120 +f 3028/2962/6121 3052/4535/6121 3026/4601/6121 +f 3376/4602/6122 3375/2513/6122 3347/4603/6122 +f 2927/3164/6123 2933/4604/6123 2945/3165/6123 +f 3027/4559/6124 3028/2962/6124 3026/4601/6124 +f 2990/2560/6125 3000/4560/6125 2989/1884/6125 +f 3331/4525/6126 3332/1653/6126 3350/3669/6126 +f 3129/4538/6127 3166/4583/6127 3155/3026/6127 +f 3048/4140/6128 3034/4171/6128 2981/4573/6128 +f 3163/4605/6129 3175/4606/6129 3101/1410/6129 +f 3414/2289/6130 3355/2288/6130 3393/4607/6130 +f 1491/2933/6131 3420/4376/6131 1492/4608/6131 +f 3090/4549/6132 3122/4556/6132 3121/4527/6132 +f 3142/4589/6133 3153/4609/6133 3101/1410/6133 +f 958/2507/6134 2921/3933/6134 2929/2508/6134 +f 1158/2171/6135 1415/2170/6135 1806/4610/6135 +f 3386/567/6136 331/525/6136 341/498/6136 +f 1806/4610/6137 3352/2347/6137 561/4611/6137 +f 3197/2272/6138 3190/4567/6138 3174/2273/6138 +f 3375/4532/6139 3376/2095/6139 3406/2012/6139 +f 3301/4612/6140 3315/4561/6140 3286/4558/6140 +f 3318/4613/6141 1652/3147/6141 1670/3245/6141 +f 3299/4545/6142 3314/4562/6142 3331/4614/6142 +f 3447/982/6143 708/2360/6143 1064/983/6143 +f 3300/4544/6144 3314/4562/6144 3299/4545/6144 +f 1415/2170/6145 3352/2347/6145 1806/4610/6145 +f 3352/2347/6146 3136/4615/6146 561/4611/6146 +f 3102/4616/6147 3070/4509/6147 3058/4172/6147 +f 3119/3865/6148 3132/3864/6148 3118/4617/6148 +f 3016/2961/6149 3038/4564/6149 3028/2962/6149 +f 3038/4564/6150 3052/4535/6150 3028/2962/6150 +f 3037/4461/6151 3050/2800/6151 3012/2799/6151 +f 3248/4550/6152 3285/4546/6152 3263/4618/6152 +f 3307/3738/6153 3327/4619/6153 3215/3739/6153 +f 3116/4620/6154 3129/4621/6154 3145/4622/6154 +f 3194/2549/6155 3218/548/6155 78/811/6155 +f 3232/4600/6156 3248/4623/6156 3247/4624/6156 +f 3362/4625/6157 3347/4603/6157 3312/3154/6157 +f 3282/4626/6158 3296/4595/6158 3260/4597/6158 +f 1329/2726/6159 282/217/6159 505/2602/6159 +f 3061/4570/6160 3106/4627/6160 3060/4530/6160 +f 3168/4521/6161 3178/4554/6161 3167/4628/6161 +f 3106/4627/6162 3090/4549/6162 3060/4530/6162 +f 2938/4629/6163 2934/4630/6163 2947/4631/6163 +f 3331/4525/6164 3350/3669/6164 3349/4632/6164 +f 3106/4627/6165 3122/4556/6165 3090/4549/6165 +f 3179/4633/6166 3169/4571/6166 3122/4556/6166 +f 3168/4521/6167 3167/4628/6167 3133/4557/6167 +f 3179/4633/6168 3203/4519/6168 3169/4571/6168 +f 3392/2994/6169 174/757/6169 3207/756/6169 +f 244/620/6170 2709/565/6170 3287/671/6170 +f 3143/4634/6171 3164/4635/6171 3114/4636/6171 +f 3215/3739/6172 3327/4619/6172 3295/4637/6172 +f 3269/4638/6173 3286/4558/6173 3250/4522/6173 +f 2989/1884/6174 3000/4560/6174 2976/2126/6174 +f 3269/4638/6175 3301/4612/6175 3286/4558/6175 +f 3071/4639/6176 3072/3861/6176 3103/4640/6176 +f 3163/4605/6177 3214/4209/6177 3197/4210/6177 +f 3285/4546/6178 3298/1735/6178 3263/4618/6178 +f 3203/4519/6179 3168/4521/6179 3169/4571/6179 +f 3244/4641/6180 3230/4486/6180 3200/4642/6180 +f 263/566/6181 2709/565/6181 244/620/6181 +f 3352/2347/6182 3238/2646/6182 3136/4615/6182 +f 3238/2646/6183 3221/4643/6183 3136/4615/6183 +f 1326/2758/6184 47/99/6184 3221/4271/6184 +f 3073/4644/6185 3116/4620/6185 3145/4622/6185 +f 2964/4645/6186 2965/4592/6186 2984/4594/6186 +f 3347/4603/6187 3362/4625/6187 3377/4646/6187 +f 2999/4647/6188 3013/4460/6188 2975/4465/6188 +f 3046/293/6189 3047/4515/6189 3045/2277/6189 +f 3238/2646/6190 3220/4648/6190 3221/4643/6190 +f 2962/294/6191 3046/293/6191 2980/2936/6191 +f 3181/2775/6192 3195/1932/6192 3158/4489/6192 +f 3299/4545/6193 3313/1736/6193 3298/1735/6193 +f 952/4649/6194 2921/3933/6194 958/2507/6194 +f 3072/4650/6195 3035/3135/6195 3073/4651/6195 +f 3011/4494/6196 3035/3135/6196 3072/4650/6196 +f 2985/4593/6197 3011/3595/6197 3025/3594/6197 +f 2984/4594/6198 2985/4593/6198 3025/3594/6198 +f 2966/4270/6199 2940/4423/6199 2921/3933/6199 +f 952/4649/6200 2966/4270/6200 2921/3933/6200 +f 3195/1932/6201 3194/4125/6201 3157/4490/6201 +f 2999/4647/6202 2975/4465/6202 2940/4423/6202 +f 3117/4652/6203 3131/4582/6203 3104/4588/6203 +f 3238/2646/6204 3319/4653/6204 3220/4648/6204 +f 2418/4654/6205 3076/4655/6205 2428/4656/6205 +f 3231/4657/6206 3232/4600/6206 3247/4624/6206 +f 3180/4658/6207 3179/4633/6207 3122/4556/6207 +f 3331/4614/6208 3330/4659/6208 3313/1736/6208 +f 2955/4660/6209 2965/4592/6209 2964/4645/6209 +f 3221/4643/6210 3220/4648/6210 3412/4661/6210 +f 3251/2385/6211 3250/4522/6211 3203/4519/6211 +f 3234/2993/6212 3251/2385/6212 3203/4519/6212 +f 3082/4587/6213 3117/4652/6213 3104/4588/6213 +f 3178/4598/6214 3232/4600/6214 3231/4657/6214 +f 3400/4662/6215 3401/3140/6215 575/3054/6215 +f 3299/4545/6216 3331/4614/6216 3313/1736/6216 +f 3330/4663/6217 3331/4525/6217 3349/4632/6217 +f 3071/4664/6218 3102/4616/6218 3058/4172/6218 +f 2929/2508/6219 2920/4503/6219 2910/2255/6219 +f 3229/4483/6220 3344/4482/6220 3259/4665/6220 +f 2988/4268/6221 3027/4559/6221 3026/4601/6221 +f 3251/2385/6222 3269/4638/6222 3250/4522/6222 +f 1269/2346/6223 3319/4653/6223 3238/2646/6223 +f 3319/4653/6224 3354/4666/6224 3220/4648/6224 +f 1648/3220/6225 1364/3219/6225 3412/4667/6225 +f 1645/2916/6226 1646/2967/6226 3208/3016/6226 +f 3245/4668/6227 3283/4669/6227 3261/4568/6227 +f 3027/4559/6228 2988/4268/6228 3000/4560/6228 +f 3373/4670/6229 3384/4671/6229 3361/3847/6229 +f 3216/337/6230 3245/4668/6230 3202/4672/6230 +f 2935/4502/6231 2934/4574/6231 2919/4577/6231 +f 3144/524/6232 3115/4673/6232 3102/4616/6232 +f 3382/2466/6233 3421/4212/6233 3404/4674/6233 +f 3220/4648/6234 3304/4675/6234 3412/4661/6234 +f 3312/3154/6235 3329/2435/6235 3297/4533/6235 +f 3145/523/6236 3155/3026/6236 3154/3028/6236 +f 3157/4490/6237 3170/4676/6237 3148/4677/6237 +f 2963/4678/6238 2973/4679/6238 2953/4680/6238 +f 2938/4629/6239 2947/4631/6239 2946/4681/6239 +f 2963/4678/6240 2953/4680/6240 2946/4682/6240 +f 3157/4490/6241 3148/4677/6241 3135/4444/6241 +f 3347/4603/6242 3375/2513/6242 3374/2436/6242 +f 3071/4664/6243 3058/4172/6243 3034/4171/6243 +f 1269/2346/6244 3407/4683/6244 3319/4653/6244 +f 3319/4653/6245 3407/4683/6245 3354/4666/6245 +f 3304/4675/6246 1648/4684/6246 3412/4661/6246 +f 2230/3974/6247 2261/1889/6247 2233/3983/6247 +f 3093/4529/6248 3158/4489/6248 3123/4491/6248 +f 570/4517/6249 3405/4542/6249 3385/2514/6249 +f 3202/4672/6250 3261/4568/6250 3165/3027/6250 +f 3114/4636/6251 3142/4589/6251 3088/4516/6251 +f 3167/4628/6252 3177/4685/6252 3156/4686/6252 +f 3262/336/6253 3283/4669/6253 3245/4668/6253 +f 1957/3832/6254 3391/4687/6254 3390/3833/6254 +f 3075/4586/6255 3104/4588/6255 3074/3134/6255 +f 1491/2933/6256 1492/4608/6256 1516/2964/6256 +f 3113/1220/6257 3139/3100/6257 3099/4688/6257 +f 3015/4689/6258 3014/4690/6258 2999/4647/6258 +f 2974/529/6259 2982/4572/6259 2954/4691/6259 +f 3354/4666/6260 3237/4692/6260 3220/4648/6260 +f 3220/4648/6261 3237/4692/6261 3304/4675/6261 +f 3153/4609/6262 3198/4693/6262 3163/4605/6262 +f 3405/4542/6263 3423/4541/6263 3385/2514/6263 +f 3059/3133/6264 3075/4586/6264 3074/3134/6264 +f 3014/4694/6265 3015/4695/6265 3013/4696/6265 +f 2725/4697/6266 2585/4247/6266 3384/4671/6266 +f 1872/1946/6267 1980/3289/6267 3506/1947/6267 +f 2975/4465/6268 3036/2801/6268 2986/2729/6268 +f 2954/4691/6269 2963/4678/6269 2946/4682/6269 +f 1369/2243/6270 243/2245/6270 1368/2889/6270 +f 3273/3515/6271 3407/3556/6271 1629/3229/6271 +f 3024/292/6272 3047/4515/6272 3046/293/6272 +f 2953/4680/6273 2962/294/6273 2961/2937/6273 +f 3118/4617/6274 3131/4582/6274 3117/4652/6274 +f 3372/2414/6275 3382/2466/6275 3404/4674/6275 +f 3093/4529/6276 3123/4491/6276 3092/2735/6276 +f 1993/1966/6277 2725/4698/6277 993/2786/6277 +f 3407/4683/6278 3183/4699/6278 3354/4666/6278 +f 3354/4666/6279 3183/4699/6279 3237/4692/6279 +f 3237/4692/6280 3353/4700/6280 3304/4675/6280 +f 3201/4569/6281 3200/4642/6281 3115/4673/6281 +f 3391/4687/6282 1957/3832/6282 3414/4701/6282 +f 3166/4583/6283 3165/3027/6283 3155/3026/6283 +f 3429/225/6284 2858/224/6284 2783/3021/6284 +f 3070/4509/6285 3143/4634/6285 3114/4636/6285 +f 3308/4702/6286 3327/4619/6286 3307/3738/6286 +f 559/1080/6287 353/1051/6287 1237/543/6287 +f 3423/4541/6288 3384/4671/6288 3373/4670/6288 +f 3407/4683/6289 3273/4703/6289 3183/4699/6289 +f 3353/4700/6290 1150/4704/6290 3304/4675/6290 +f 3403/4705/6291 1648/4684/6291 3304/4675/6291 +f 1150/4704/6292 3403/4705/6292 3304/4675/6292 +f 3403/4706/6293 3387/3042/6293 1648/4707/6293 +f 3330/4659/6294 3362/4625/6294 3312/3154/6294 +f 3034/4171/6295 3024/292/6295 2973/4679/6295 +f 3039/4708/6296 3017/4539/6296 3018/2905/6296 +f 3039/4708/6297 3061/4570/6297 3017/4539/6297 +f 1974/108/6298 3391/2413/6298 3413/2845/6298 +f 3391/4687/6299 3414/4701/6299 3413/4709/6299 +f 1477/3065/6300 3324/3108/6300 3367/3009/6300 +f 3200/4642/6301 3199/4710/6301 3164/4635/6301 +f 1976/4711/6302 3364/4712/6302 1489/4713/6302 +f 1652/3147/6303 3318/4613/6303 3334/3152/6303 +f 3259/4665/6304 3281/3740/6304 3215/3739/6304 +f 2918/4576/6305 2917/849/6305 2911/2357/6305 +f 2909/2415/6306 2918/4576/6306 2911/2357/6306 +f 3344/4482/6307 3308/4702/6307 3281/3740/6307 +f 3353/4700/6308 3237/4692/6308 3183/4699/6308 +f 2585/3101/6309 1993/1966/6309 1495/2913/6309 +f 3083/4714/6310 3106/4627/6310 3061/4570/6310 +f 853/4715/6311 851/1459/6311 2279/1800/6311 +f 3101/1410/6312 3175/4606/6312 3100/4127/6312 +f 3472/269/6313 2548/271/6313 3449/3612/6313 +f 3273/3515/6314 3334/3152/6314 3318/4613/6314 +f 1330/487/6315 492/276/6315 726/485/6315 +f 3393/4607/6316 2504/4716/6316 3414/2289/6316 +f 1976/109/6317 1977/2720/6317 3364/2835/6317 +f 3335/2429/6318 3336/314/6318 1669/862/6318 +f 3163/4605/6319 3259/4665/6319 3215/3739/6319 +f 2918/4576/6320 2938/4575/6320 2917/849/6320 +f 3170/1173/6321 3206/3209/6321 3193/4717/6321 +f 3170/4676/6322 3193/4718/6322 3148/4677/6322 +f 3423/4541/6323 2725/4697/6323 3384/4671/6323 +f 3356/4719/6324 3393/4607/6324 3355/2288/6324 +f 3411/4720/6325 3353/4700/6325 3183/4699/6325 +f 2936/3934/6326 2948/2728/6326 2955/3348/6326 +f 3163/4605/6327 3197/4210/6327 3175/4606/6327 +f 3360/4261/6328 3421/4212/6328 3382/2466/6328 +f 2975/4465/6329 3012/2799/6329 3036/2801/6329 +f 3412/4667/6330 1326/2758/6330 3221/4271/6330 +f 3413/4709/6331 2504/4721/6331 2712/4722/6331 +f 2724/1977/6332 3410/4723/6332 1977/2720/6332 +f 3073/4651/6333 3130/4537/6333 3116/4536/6333 +f 3273/4703/6334 3302/4724/6334 3183/4699/6334 +f 3183/4699/6335 3302/4724/6335 3411/4720/6335 +f 3214/4209/6336 3215/3739/6336 3243/4725/6336 +f 1921/3795/6337 3321/1941/6337 1922/1940/6337 +f 575/1738/6338 578/1468/6338 2500/1651/6338 +f 3414/4701/6339 2504/4721/6339 3413/4709/6339 +f 3252/2149/6340 781/2148/6340 3364/2835/6340 +f 3302/4726/6341 3273/3515/6341 3318/4613/6341 +f 2414/460/6342 2413/4439/6342 2407/1283/6342 +f 3411/4720/6343 3389/4727/6343 3353/4700/6343 +f 3321/1941/6344 3356/4728/6344 3355/1939/6344 +f 576/1654/6345 3301/4070/6345 3270/2518/6345 +f 2005/237/6346 1975/110/6346 1976/109/6346 +f 3413/2845/6347 2712/1976/6347 1958/232/6347 +f 3384/4671/6348 3422/3848/6348 3361/3847/6348 +f 1670/3245/6349 3302/4726/6349 3318/4613/6349 +f 3363/4729/6350 3320/4730/6350 3302/4724/6350 +f 3320/4730/6351 3411/4720/6351 3302/4724/6351 +f 3389/4727/6352 1150/4704/6352 3353/4700/6352 +f 1150/4704/6353 3040/4731/6353 3403/4705/6353 +f 3040/4732/6354 3351/4733/6354 3403/4706/6354 +f 3351/4733/6355 1694/2428/6355 3403/4706/6355 +f 3403/4706/6356 1694/2428/6356 1688/3018/6356 +f 3361/3847/6357 3383/3849/6357 3360/4261/6357 +f 2927/3164/6358 2938/4629/6358 2933/4604/6358 +f 3349/4734/6359 3348/4735/6359 3330/4659/6359 +f 3180/4658/6360 3203/4519/6360 3179/4633/6360 +f 3180/4658/6361 3234/2993/6361 3203/4519/6361 +f 2712/4722/6362 3410/4736/6362 2724/4737/6362 +f 3410/4723/6363 3316/4738/6363 3364/2835/6363 +f 1977/2720/6364 3410/4723/6364 3364/2835/6364 +f 3316/4738/6365 3252/2149/6365 3364/2835/6365 +f 2933/4604/6366 2938/4629/6366 2945/3165/6366 +f 2938/4629/6367 2946/4681/6367 2945/3165/6367 +f 3164/4635/6368 3199/4710/6368 3153/4609/6368 +f 3320/4730/6369 3389/4727/6369 3411/4720/6369 +f 2967/4739/6370 2966/4270/6370 2956/4740/6370 +f 3384/4671/6371 2585/4247/6371 3422/3848/6371 +f 3360/4261/6372 3382/2466/6372 3343/4741/6372 +f 2938/4575/6373 2927/850/6373 2917/849/6373 +f 3270/2387/6374 3269/4638/6374 3251/2385/6374 +f 3337/4093/6375 3321/1941/6375 1921/3795/6375 +f 3269/4638/6376 3270/2387/6376 3301/4612/6376 +f 2504/4721/6377 673/4742/6377 2712/4722/6377 +f 673/4742/6378 3410/4736/6378 2712/4722/6378 +f 3276/4743/6379 1572/4744/6379 3252/4745/6379 +f 3088/4516/6380 3142/4589/6380 3087/1409/6380 +f 3145/523/6381 3154/3028/6381 3144/524/6381 +f 3040/4731/6382 1150/4704/6382 3389/4727/6382 +f 3335/4746/6383 1694/4747/6383 3351/4748/6383 +f 3347/4603/6384 3374/2436/6384 3329/2435/6384 +f 3129/4538/6385 3130/4537/6385 3166/4583/6385 +f 3321/1941/6386 3337/4093/6386 3356/4728/6386 +f 3393/4607/6387 673/4749/6387 2504/4716/6387 +f 2946/4682/6388 2953/4680/6388 2945/4006/6388 +f 951/4750/6389 2966/4270/6389 952/4649/6389 +f 3154/3028/6390 3201/4569/6390 3144/524/6390 +f 507/4751/6391 3363/4752/6391 3302/4726/6391 +f 1474/4548/6392 3184/3130/6392 1481/3085/6392 +f 3385/2514/6393 3423/4541/6393 3373/4670/6393 +f 3261/4568/6394 3260/4597/6394 3201/4569/6394 +f 3246/335/6395 3231/4753/6395 3247/4754/6395 +f 3245/4668/6396 3261/4568/6396 3202/4672/6396 +f 572/1962/6397 3349/4632/6397 3350/3669/6397 +f 1492/2864/6398 2469/730/6398 1493/234/6398 +f 3337/4093/6399 3357/4755/6399 3356/4728/6399 +f 3356/4728/6400 3357/4755/6400 3393/4756/6400 +f 3357/4755/6401 3394/4757/6401 3393/4756/6401 +f 3393/4756/6402 3394/4757/6402 673/4742/6402 +f 673/4742/6403 3171/4758/6403 3410/4736/6403 +f 3410/4723/6404 2444/4759/6404 3316/4738/6404 +f 3316/4738/6405 3276/3070/6405 3252/2149/6405 +f 2940/4423/6406 2975/4465/6406 2948/2728/6406 +f 2940/4423/6407 2936/3934/6407 2921/3933/6407 +f 3092/2735/6408 3091/1788/6408 3054/1787/6408 +f 3192/2546/6409 3178/4554/6409 3231/4753/6409 +f 3222/367/6410 3363/4760/6410 507/328/6410 +f 3222/367/6411 3275/3428/6411 3320/4761/6411 +f 3363/4729/6412 3222/4762/6412 3320/4730/6412 +f 3219/4763/6413 3389/4727/6413 3320/4730/6413 +f 3271/4764/6414 3040/4731/6414 3389/4727/6414 +f 3040/4732/6415 3271/4765/6415 3351/4733/6415 +f 3271/4764/6416 3335/4766/6416 3351/4767/6416 +f 843/1500/6417 3388/1502/6417 894/1531/6417 +f 3192/2546/6418 3216/337/6418 3191/4590/6418 +f 3343/4741/6419 3382/2466/6419 3306/4591/6419 +f 3177/4685/6420 3178/4554/6420 3192/2546/6420 +f 3249/4523/6421 3300/4544/6421 3285/4546/6421 +f 3337/4093/6422 3338/4768/6422 3357/4755/6422 +f 673/4749/6423 1192/4769/6423 3171/4770/6423 +f 3171/4758/6424 2444/4771/6424 3410/4736/6424 +f 3170/1173/6425 92/1063/6425 3206/3209/6425 +f 3072/3861/6426 3073/4644/6426 3103/4640/6426 +f 3178/4554/6427 3177/4685/6427 3167/4628/6427 +f 3275/4772/6428 3219/4763/6428 3320/4730/6428 +f 3219/4763/6429 3271/4764/6429 3389/4727/6429 +f 3303/4773/6430 3317/4774/6430 3271/4764/6430 +f 3271/4764/6431 3317/4774/6431 3335/4766/6431 +f 326/1015/6432 1423/149/6432 170/1343/6432 +f 3133/4557/6433 3167/4628/6433 3146/3863/6433 +f 3297/4533/6434 3329/2435/6434 3311/4775/6434 +f 3288/2449/6435 3338/4768/6435 3337/4093/6435 +f 3357/4776/6436 3395/4777/6436 3394/4778/6436 +f 3395/4777/6437 1192/4769/6437 673/4749/6437 +f 3394/4778/6438 3395/4777/6438 673/4749/6438 +f 3171/4758/6439 3419/4779/6439 2444/4771/6439 +f 2953/4680/6440 2961/2937/6440 2945/4006/6440 +f 3014/4690/6441 3013/4460/6441 2999/4647/6441 +f 2925/3824/6442 2914/4780/6442 2915/3582/6442 +f 3335/2429/6443 3317/4781/6443 3336/314/6443 +f 3470/281/6444 3476/355/6444 3497/656/6444 +f 3103/4640/6445 3073/4644/6445 3145/4622/6445 +f 3084/4782/6446 3108/4783/6446 3124/4784/6446 +f 3149/2564/6447 3181/2775/6447 3094/4563/6447 +f 3224/4785/6448 1498/3195/6448 3196/4786/6448 +f 1889/2448/6449 3253/4298/6449 3288/2449/6449 +f 3253/4298/6450 3277/4787/6450 3288/2449/6450 +f 3288/2449/6451 3277/4787/6451 3338/4768/6451 +f 3419/4788/6452 3171/4770/6452 1192/4769/6452 +f 1562/3071/6453 3276/3070/6453 3316/4738/6453 +f 3115/4673/6454 3200/4642/6454 3143/4634/6454 +f 3144/524/6455 3201/4569/6455 3115/4673/6455 +f 3053/4789/6456 3061/4570/6456 3039/4708/6456 +f 3333/1547/6457 3219/4763/6457 3275/4772/6457 +f 3303/4773/6458 3271/4764/6458 3219/4763/6458 +f 3184/4790/6459 3196/3774/6459 1475/4791/6459 +f 2428/4656/6460 3076/4655/6460 3084/4782/6460 +f 3108/4792/6461 3150/3059/6461 3124/3031/6461 +f 3053/4789/6462 3083/4714/6462 3061/4570/6462 +f 3277/4787/6463 3322/4793/6463 3338/4768/6463 +f 3338/4768/6464 3322/4793/6464 3357/4755/6464 +f 3357/4755/6465 3365/4794/6465 3395/4795/6465 +f 2889/4796/6466 3419/4779/6466 1192/4797/6466 +f 2444/4771/6467 3409/4798/6467 3316/4799/6467 +f 3409/4798/6468 1562/4800/6468 3316/4799/6468 +f 953/2386/6469 3251/2385/6469 3234/2993/6469 +f 2920/4503/6470 2919/4577/6470 2402/2512/6470 +f 2939/2465/6471 2955/3348/6471 2964/527/6471 +f 531/4801/6472 3333/1547/6472 3275/4772/6472 +f 3333/1547/6473 3303/4773/6473 3219/4763/6473 +f 3118/4617/6474 3117/4652/6474 3082/4587/6474 +f 3000/4560/6475 2988/4268/6475 2976/2126/6475 +f 3076/4655/6476 3108/4783/6476 3084/4782/6476 +f 3107/4802/6477 3122/4556/6477 3106/4627/6477 +f 1831/937/6478 1599/939/6478 1839/2181/6478 +f 3277/4787/6479 3289/4803/6479 3322/4793/6479 +f 3322/4793/6480 3365/4794/6480 3357/4755/6480 +f 3365/4794/6481 3358/4804/6481 3395/4795/6481 +f 3358/4804/6482 2889/4796/6482 1192/4797/6482 +f 3395/4795/6483 3358/4804/6483 1192/4797/6483 +f 3419/4779/6484 3379/4805/6484 2444/4771/6484 +f 3422/3848/6485 2469/3908/6485 3421/4212/6485 +f 3191/4590/6486 3216/337/6486 3202/4672/6486 +f 3147/4806/6487 3180/4658/6487 3122/4556/6487 +f 3063/898/6488 987/1092/6488 3094/4563/6488 +f 3303/4773/6489 2279/4807/6489 3317/4774/6489 +f 2967/4739/6490 2988/4268/6490 2966/4270/6490 +f 3064/4808/6491 2418/4654/6491 2426/4809/6491 +f 3085/4810/6492 3076/4655/6492 2418/4654/6492 +f 3085/4810/6493 3108/4783/6493 3076/4655/6493 +f 3085/4810/6494 3109/4811/6494 3108/4783/6494 +f 3109/4811/6495 3150/4812/6495 3108/4783/6495 +f 3404/4377/6496 1491/2933/6496 1480/2932/6496 +f 3253/4298/6497 3289/4803/6497 3277/4787/6497 +f 3379/4805/6498 3409/4798/6498 2444/4771/6498 +f 3081/4510/6499 3047/4515/6499 3024/292/6499 +f 3048/4140/6500 3071/4664/6500 3034/4171/6500 +f 3204/1982/6501 3234/2993/6501 3180/4658/6501 +f 3333/1547/6502 531/4801/6502 866/1546/6502 +f 3388/1502/6503 3303/4773/6503 3333/1547/6503 +f 3388/1502/6504 853/1501/6504 3303/4773/6504 +f 3265/4813/6505 2639/4225/6505 1868/4290/6505 +f 3156/4686/6506 3166/4583/6506 3131/4582/6506 +f 3156/4686/6507 3176/4585/6507 3166/4583/6507 +f 2949/3532/6508 2968/4814/6508 2446/3567/6508 +f 3030/4158/6509 3064/4808/6509 2426/4809/6509 +f 3064/4808/6510 3085/4810/6510 2418/4654/6510 +f 3493/399/6511 3439/2120/6511 3440/2538/6511 +f 2639/4225/6512 3265/4813/6512 3253/4298/6512 +f 2660/3047/6513 2639/4225/6513 3253/4298/6513 +f 3253/4298/6514 3265/4813/6514 3289/4803/6514 +f 3358/4804/6515 2849/4815/6515 2889/4796/6515 +f 2661/4816/6516 1562/4800/6516 3409/4798/6516 +f 92/1063/6517 601/1428/6517 3206/3209/6517 +f 3081/4510/6518 3114/4636/6518 3088/4516/6518 +f 1511/3061/6519 3150/3059/6519 1481/3085/6519 +f 3167/4628/6520 3156/4686/6520 3132/3864/6520 +f 894/1531/6521 3388/1502/6521 3333/1547/6521 +f 3303/4773/6522 853/1501/6522 2279/4807/6522 +f 3077/4817/6523 3064/4808/6523 3030/4158/6523 +f 3151/4818/6524 1474/4819/6524 3109/4811/6524 +f 2768/3629/6525 2062/2136/6525 2808/2135/6525 +f 3322/4793/6526 3323/4820/6526 3365/4794/6526 +f 3323/4820/6527 3358/4804/6527 3365/4794/6527 +f 2889/4796/6528 3379/4805/6528 3419/4779/6528 +f 493/327/6529 3222/367/6529 507/328/6529 +f 3081/4510/6530 3088/4516/6530 3047/4515/6530 +f 2935/1577/6531 2939/1579/6531 2954/4821/6531 +f 2920/4503/6532 2935/4502/6532 2919/4577/6532 +f 3129/4621/6533 3155/4822/6533 3145/4622/6533 +f 2978/66/6534 2995/4368/6534 2205/3867/6534 +f 2298/64/6535 2978/66/6535 2205/3867/6535 +f 3020/4160/6536 3077/4817/6536 3030/4158/6536 +f 3151/4818/6537 3109/4811/6537 3085/4810/6537 +f 1474/4819/6538 3151/4818/6538 3184/4790/6538 +f 3265/4813/6539 3322/4793/6539 3289/4803/6539 +f 2849/4815/6540 3379/4805/6540 2889/4796/6540 +f 3350/3669/6541 33/446/6541 27/397/6541 +f 3229/4483/6542 3259/4665/6542 3198/4693/6542 +f 2955/4660/6543 2939/4823/6543 2928/4824/6543 +f 3115/4673/6544 3143/4634/6544 3070/4509/6544 +f 3215/3739/6545 3295/4637/6545 3243/4725/6545 +f 2919/4577/6546 2934/4574/6546 2918/4576/6546 +f 3048/4140/6547 3025/2485/6547 3049/4825/6547 +f 3077/4817/6548 3085/4810/6548 3064/4808/6548 +f 3177/4685/6549 3176/4585/6549 3156/4686/6549 +f 3324/4826/6550 3266/4827/6550 3255/4828/6550 +f 3323/4820/6551 3380/4829/6551 3358/4804/6551 +f 3358/4804/6552 3380/4829/6552 2849/4815/6552 +f 3380/4829/6553 1074/4830/6553 2849/4815/6553 +f 1074/4830/6554 3379/4805/6554 2849/4815/6554 +f 3379/4805/6555 1049/4831/6555 3409/4798/6555 +f 2661/4832/6556 3386/567/6556 1623/2948/6556 +f 1492/4608/6557 3420/4376/6557 2469/4833/6557 +f 3312/3154/6558 3347/4603/6558 3329/2435/6558 +f 3200/4642/6559 3229/4483/6559 3199/4710/6559 +f 2249/4204/6560 2341/4513/6560 1221/3916/6560 +f 3132/3864/6561 3156/4686/6561 3131/4582/6561 +f 3083/4714/6562 3107/4802/6562 3106/4627/6562 +f 3147/4806/6563 3122/4556/6563 3107/4802/6563 +f 3159/4834/6564 3085/4810/6564 3077/4817/6564 +f 3159/4834/6565 3151/4818/6565 3085/4810/6565 +f 3151/4818/6566 3196/3774/6566 3184/4790/6566 +f 3265/4813/6567 1860/4835/6567 3322/4793/6567 +f 3322/4793/6568 1860/4835/6568 3323/4820/6568 +f 3323/4820/6569 3366/4836/6569 3380/4829/6569 +f 1049/4831/6570 2661/4816/6570 3409/4798/6570 +f 1954/3640/6571 2610/3637/6571 2807/3949/6571 +f 2939/2465/6572 2974/529/6572 2954/4691/6572 +f 2910/2255/6573 2920/4503/6573 2402/2512/6573 +f 3377/4646/6574 3376/4602/6574 3347/4603/6574 +f 3263/4618/6575 3298/1735/6575 3268/4504/6575 +f 3003/4837/6576 3020/4160/6576 3002/4838/6576 +f 3110/4839/6577 3077/4817/6577 3020/4160/6577 +f 1860/3840/6578 1859/3794/6578 1853/2470/6578 +f 3246/335/6579 3247/4754/6579 3262/336/6579 +f 3283/4669/6580 3282/4626/6580 3260/4597/6580 +f 3110/4839/6581 3020/4160/6581 3003/4837/6581 +f 1860/4835/6582 1861/1915/6582 3323/4820/6582 +f 1074/4830/6583 2736/4840/6583 3379/4805/6583 +f 2736/4840/6584 1049/4831/6584 3379/4805/6584 +f 2983/528/6585 2982/4572/6585 2974/529/6585 +f 3153/4609/6586 3163/4605/6586 3101/1410/6586 +f 3377/2567/6587 571/2087/6587 3376/2095/6587 +f 3192/2546/6588 3231/4753/6588 3246/335/6588 +f 3015/4689/6589 2988/4268/6589 3026/4601/6589 +f 2994/4841/6590 3004/4842/6590 3003/4837/6590 +f 3004/4842/6591 3065/4843/6591 3003/4837/6591 +f 3065/4843/6592 3110/4839/6592 3003/4837/6592 +f 3110/4839/6593 3159/4834/6593 3077/4817/6593 +f 1916/3190/6594 1449/2725/6594 1264/2747/6594 +f 987/1092/6595 3149/2564/6595 3094/4563/6595 +f 1861/1915/6596 3366/4836/6596 3323/4820/6596 +f 3415/4844/6597 3380/4829/6597 3366/4836/6597 +f 3339/4845/6598 3415/4844/6598 3366/4836/6598 +f 3380/4829/6599 3415/4844/6599 1074/4830/6599 +f 2661/4832/6600 2709/565/6600 3386/567/6600 +f 3184/3130/6601 1475/4846/6601 1482/3129/6601 +f 613/2777/6602 3195/1932/6602 3181/2775/6602 +f 2427/4110/6603 2418/4847/6603 2428/4848/6603 +f 2995/4849/6604 3004/4842/6604 2994/4841/6604 +f 3185/3772/6605 3151/4818/6605 3159/4834/6605 +f 3185/3772/6606 3196/3774/6606 3151/4818/6606 +f 3200/4642/6607 3164/4635/6607 3143/4634/6607 +f 1326/2758/6608 3412/4667/6608 1364/3219/6608 +f 2736/4840/6609 1074/4830/6609 3415/4844/6609 +f 1049/4831/6610 189/4850/6610 2661/4816/6610 +f 2983/528/6611 3048/4140/6611 2982/4572/6611 +f 3132/3864/6612 3131/4582/6612 3118/4617/6612 +f 1562/3171/6613 2661/4832/6613 1623/2948/6613 +f 3029/578/6614 3018/2905/6614 955/2175/6614 +f 3029/578/6615 3039/4708/6615 3018/2905/6615 +f 3041/4851/6616 3065/4843/6616 3004/4842/6616 +f 3065/4843/6617 3096/4852/6617 3110/4839/6617 +f 3160/4853/6618 3159/4834/6618 3110/4839/6618 +f 2427/4166/6619 2426/4854/6619 2418/4855/6619 +f 3339/4845/6620 3396/2917/6620 3415/4844/6620 +f 1645/2916/6621 2736/4840/6621 3415/4844/6621 +f 3396/2917/6622 1645/2916/6622 3415/4844/6622 +f 2736/4840/6623 3235/4856/6623 1049/4831/6623 +f 3235/4856/6624 189/4850/6624 1049/4831/6624 +f 189/4857/6625 2709/565/6625 2661/4832/6625 +f 3104/4588/6626 3130/4537/6626 3073/4651/6626 +f 2940/4423/6627 2948/2728/6627 2936/3934/6627 +f 3135/4444/6628 3107/4802/6628 3083/4714/6628 +f 3135/4444/6629 3148/4677/6629 3107/4802/6629 +f 3148/4677/6630 3147/4806/6630 3107/4802/6630 +f 2978/4858/6631 3021/4859/6631 2995/4849/6631 +f 3021/4859/6632 3004/4842/6632 2995/4849/6632 +f 3021/4859/6633 3041/4851/6633 3004/4842/6633 +f 3096/4852/6634 3160/4853/6634 3110/4839/6634 +f 1704/2988/6635 1688/3018/6635 1694/2428/6635 +f 1861/1915/6636 3339/4845/6636 3366/4836/6636 +f 3208/3016/6637 2736/4840/6637 1645/2916/6637 +f 3344/4482/6638 3281/3740/6638 3259/4665/6638 +f 3262/336/6639 3245/4668/6639 3216/337/6639 +f 2956/4740/6640 2966/4270/6640 951/4750/6640 +f 3193/4718/6641 3180/4658/6641 3147/4806/6641 +f 3160/4853/6642 3185/3772/6642 3159/4834/6642 +f 1219/45/6643 1221/3854/6643 2341/43/6643 +f 3208/3016/6644 3235/4856/6644 2736/4840/6644 +f 3048/4140/6645 3049/4825/6645 3071/4664/6645 +f 3404/4674/6646 3421/4212/6646 3420/4540/6646 +f 2954/4691/6647 2946/4682/6647 2947/4860/6647 +f 2413/4439/6648 2306/3467/6648 2908/3466/6648 +f 2968/4861/6649 3005/4862/6649 2978/4858/6649 +f 3005/4862/6650 3021/4859/6650 2978/4858/6650 +f 3209/4863/6651 3185/3772/6651 3160/4853/6651 +f 3209/4863/6652 3224/3773/6652 3185/3772/6652 +f 3224/4785/6653 3239/4479/6653 3223/4478/6653 +f 3254/4864/6654 3255/4828/6654 3266/4827/6654 +f 1476/3066/6655 3266/4492/6655 3324/3108/6655 +f 3191/4590/6656 3202/4672/6656 3165/3027/6656 +f 3314/4524/6657 3315/4069/6657 3332/1653/6657 +f 2423/2030/6658 130/2032/6658 2575/3627/6658 +f 3163/4605/6659 3215/3739/6659 3214/4209/6659 +f 3249/4523/6660 3248/4550/6660 3233/4555/6660 +f 2912/4865/6661 2931/4866/6661 2930/4867/6661 +f 2931/4868/6662 2957/4869/6662 2949/3532/6662 +f 2930/4867/6663 2931/4866/6663 2949/4870/6663 +f 2949/4870/6664 2957/4871/6664 2968/4861/6664 +f 3041/4851/6665 3111/4872/6665 3065/4843/6665 +f 3111/4872/6666 3096/4852/6666 3065/4843/6666 +f 3209/4863/6667 3239/4873/6667 3224/3773/6667 +f 3239/4873/6668 3255/4828/6668 3254/4864/6668 +f 1181/418/6669 3467/1591/6669 812/2103/6669 +f 1181/4874/6670 1207/333/6670 3467/4875/6670 +f 3341/4876/6671 3340/4877/6671 3367/4878/6671 +f 3324/4826/6672 3341/4876/6672 3367/4878/6672 +f 2953/4680/6673 3024/292/6673 2962/294/6673 +f 3235/4856/6674 3418/4879/6674 189/4850/6674 +f 3418/4880/6675 3287/671/6675 189/4857/6675 +f 189/4857/6676 3287/671/6676 2709/565/6676 +f 2982/4572/6677 2981/4573/6677 2963/4678/6677 +f 3011/4494/6678 3036/2801/6678 3035/3135/6678 +f 2922/4881/6679 2912/4865/6679 2371/4882/6679 +f 2912/4865/6680 2922/4881/6680 2931/4866/6680 +f 2958/4883/6681 2968/4861/6681 2957/4871/6681 +f 2958/4883/6682 3005/4862/6682 2968/4861/6682 +f 3111/4872/6683 3160/4853/6683 3096/4852/6683 +f 3172/4884/6684 3209/4863/6684 3160/4853/6684 +f 3209/4863/6685 3255/4828/6685 3239/4873/6685 +f 3283/4669/6686 3260/4597/6686 3261/4568/6686 +f 1498/3195/6687 3223/4478/6687 1499/3230/6687 +f 1805/2467/6688 3491/2468/6688 3274/3364/6688 +f 2922/4881/6689 2371/4882/6689 2902/4885/6689 +f 1019/4886/6690 2922/4881/6690 2902/4885/6690 +f 3042/4887/6691 3005/4862/6691 2958/4883/6691 +f 3042/4887/6692 3021/4859/6692 3005/4862/6692 +f 3021/4859/6693 3055/4888/6693 3041/4851/6693 +f 3055/4888/6694 3078/4889/6694 3041/4851/6694 +f 3078/4889/6695 3111/4872/6695 3041/4851/6695 +f 3161/4890/6696 3160/4853/6696 3111/4872/6696 +f 3161/4890/6697 3172/4884/6697 3160/4853/6697 +f 3172/4884/6698 3225/4891/6698 3209/4863/6698 +f 3278/4892/6699 3255/4828/6699 3209/4863/6699 +f 3291/4893/6700 3324/4826/6700 3255/4828/6700 +f 3291/4893/6701 3341/4876/6701 3324/4826/6701 +f 3341/4876/6702 3368/4894/6702 3340/4877/6702 +f 2928/4501/6703 2936/3934/6703 2955/3348/6703 +f 458/4895/6704 3235/4856/6704 3208/3016/6704 +f 458/4895/6705 3418/4879/6705 3235/4856/6705 +f 216/3858/6706 2354/4086/6706 2337/3572/6706 +f 954/577/6707 3054/1787/6707 3029/578/6707 +f 3199/4710/6708 3229/4483/6708 3198/4693/6708 +f 2941/4896/6709 2931/4866/6709 2922/4881/6709 +f 2941/4896/6710 2957/4871/6710 2931/4866/6710 +f 2941/4896/6711 2958/4883/6711 2957/4871/6711 +f 3042/4887/6712 3055/4888/6712 3021/4859/6712 +f 3278/4892/6713 3291/4893/6713 3255/4828/6713 +f 3368/3112/6714 3397/2180/6714 1486/2877/6714 +f 3105/4526/6715 3134/4528/6715 3120/4897/6715 +f 3050/2800/6716 3059/3133/6716 3036/2801/6716 +f 3418/4880/6717 3095/682/6717 3287/671/6717 +f 3114/4636/6718 3164/4635/6718 3142/4589/6718 +f 3164/4635/6719 3153/4609/6719 3142/4589/6719 +f 2934/4630/6720 2935/1577/6720 2947/4631/6720 +f 2982/4572/6721 2963/4678/6721 2954/4691/6721 +f 3198/4693/6722 3259/4665/6722 3163/4605/6722 +f 2900/4898/6723 2913/4899/6723 1019/4886/6723 +f 2913/4899/6724 2922/4881/6724 1019/4886/6724 +f 3006/4900/6725 3042/4887/6725 2958/4883/6725 +f 3186/4901/6726 3225/4891/6726 3172/4884/6726 +f 3291/4893/6727 3398/4902/6727 3341/4876/6727 +f 3398/4902/6728 3368/4894/6728 3341/4876/6728 +f 3368/4894/6729 3398/4902/6729 3397/4903/6729 +f 3392/2994/6730 458/4895/6730 3208/3016/6730 +f 3103/522/6731 3144/524/6731 3102/4616/6731 +f 3102/4616/6732 3115/4673/6732 3070/4509/6732 +f 2937/4904/6733 2941/4896/6733 2922/4881/6733 +f 3066/4905/6734 3078/4889/6734 3055/4888/6734 +f 3137/4906/6735 3161/4890/6735 3111/4872/6735 +f 3225/4891/6736 3278/4892/6736 3209/4863/6736 +f 3291/4893/6737 3399/4907/6737 3398/4902/6737 +f 3392/2994/6738 3207/756/6738 458/4895/6738 +f 2935/1577/6739 2954/4821/6739 2947/4631/6739 +f 3071/4664/6740 3103/522/6740 3102/4616/6740 +f 3281/3740/6741 3308/4702/6741 3307/3738/6741 +f 3049/3596/6742 3072/3861/6742 3071/4639/6742 +f 3169/4571/6743 3168/4521/6743 3134/4528/6743 +f 3217/4520/6744 3249/4523/6744 3233/4555/6744 +f 2903/4908/6745 2913/4899/6745 2900/4898/6745 +f 2937/4904/6746 2922/4881/6746 2913/4899/6746 +f 3007/4909/6747 2958/4883/6747 2941/4896/6747 +f 3007/4909/6748 3006/4900/6748 2958/4883/6748 +f 3066/4905/6749 3055/4888/6749 3042/4887/6749 +f 3097/4910/6750 3078/4889/6750 3066/4905/6750 +f 3125/4911/6751 3111/4872/6751 3078/4889/6751 +f 3097/4910/6752 3125/4911/6752 3078/4889/6752 +f 3125/4911/6753 3137/4906/6753 3111/4872/6753 +f 3187/4912/6754 3186/4901/6754 3172/4884/6754 +f 3187/4912/6755 3210/4913/6755 3186/4901/6755 +f 3210/4913/6756 3225/4891/6756 3186/4901/6756 +f 3256/4914/6757 3278/4892/6757 3225/4891/6757 +f 1867/4245/6758 2639/4225/6758 2659/2882/6758 +f 458/4895/6759 3207/756/6759 3418/4879/6759 +f 1868/3776/6760 1859/3794/6760 3265/3839/6760 +f 3054/1787/6761 3039/4708/6761 3029/578/6761 +f 3054/1787/6762 3053/4789/6762 3039/4708/6762 +f 2937/4904/6763 2969/4915/6763 2941/4896/6763 +f 2969/4915/6764 3007/4909/6764 2941/4896/6764 +f 3007/4909/6765 3008/4916/6765 3006/4900/6765 +f 3006/4900/6766 3066/4905/6766 3042/4887/6766 +f 3256/4914/6767 3291/4893/6767 3278/4892/6767 +f 3399/4907/6768 3397/4903/6768 3398/4902/6768 +f 781/2148/6769 1572/2150/6769 2046/2265/6769 +f 3207/4917/6770 3378/2953/6770 3418/4880/6770 +f 3378/2953/6771 3408/4918/6771 3095/682/6771 +f 3418/4880/6772 3378/2953/6772 3095/682/6772 +f 3095/682/6773 3408/4918/6773 252/670/6773 +f 2970/4919/6774 2969/4915/6774 2937/4904/6774 +f 2950/4920/6775 2970/4919/6775 2937/4904/6775 +f 2970/4919/6776 3007/4909/6776 2969/4915/6776 +f 2970/4919/6777 3009/4921/6777 3007/4909/6777 +f 3009/4921/6778 3008/4916/6778 3007/4909/6778 +f 3008/4916/6779 3043/4922/6779 3006/4900/6779 +f 3043/4922/6780 3066/4905/6780 3006/4900/6780 +f 3043/4922/6781 3056/4923/6781 3066/4905/6781 +f 3056/4923/6782 3086/4924/6782 3066/4905/6782 +f 3086/4924/6783 3097/4910/6783 3066/4905/6783 +f 3126/4925/6784 3125/4911/6784 3097/4910/6784 +f 3126/4925/6785 3137/4906/6785 3125/4911/6785 +f 3256/4914/6786 3225/4891/6786 3210/4913/6786 +f 3416/4926/6787 3397/4903/6787 3399/4907/6787 +f 2261/1889/6788 2230/3974/6788 2193/847/6788 +f 2819/2954/6789 3378/2953/6789 3207/4917/6789 +f 3408/4918/6790 234/760/6790 252/670/6790 +f 2403/2454/6791 2919/4577/6791 2909/2415/6791 +f 3205/1983/6792 3204/1982/6792 3180/4658/6792 +f 2923/4927/6793 2913/4899/6793 2903/4908/6793 +f 2923/4927/6794 2937/4904/6794 2913/4899/6794 +f 2923/4927/6795 2950/4920/6795 2937/4904/6795 +f 3009/4928/6796 3022/4929/6796 3008/4930/6796 +f 3256/4914/6797 3325/4931/6797 3291/4893/6797 +f 3325/4931/6798 3399/4907/6798 3291/4893/6798 +f 3416/4932/6799 1487/2949/6799 3397/4933/6799 +f 3193/4718/6800 3205/1983/6800 3180/4658/6800 +f 1849/3270/6801 2249/4204/6801 2815/3250/6801 +f 3408/4918/6802 235/824/6802 234/760/6802 +f 572/1962/6803 3348/2147/6803 3349/4632/6803 +f 3149/2564/6804 614/2776/6804 3181/2775/6804 +f 2942/4934/6805 2950/4920/6805 2923/4927/6805 +f 2979/4935/6806 2970/4919/6806 2950/4920/6806 +f 2979/4935/6807 2996/4936/6807 2970/4919/6807 +f 3031/4937/6808 3009/4928/6808 2970/4938/6808 +f 2996/4939/6809 3031/4937/6809 2970/4938/6809 +f 3031/4937/6810 3022/4929/6810 3009/4928/6810 +f 3112/4940/6811 3097/4910/6811 3086/4924/6811 +f 3097/4941/6812 3112/4942/6812 3126/4943/6812 +f 3257/4944/6813 3256/4914/6813 3210/4913/6813 +f 3257/4944/6814 3292/4945/6814 3256/4914/6814 +f 3417/3056/6815 3416/4926/6815 3399/4907/6815 +f 3417/3056/6816 1164/4946/6816 3416/4926/6816 +f 1164/3224/6817 1487/2949/6817 3416/4932/6817 +f 1482/3129/6818 1475/4846/6818 1498/3195/6818 +f 3348/4735/6819 3362/4625/6819 3330/4659/6819 +f 1853/2470/6820 1861/4947/6820 1860/3840/6820 +f 2585/4247/6821 1693/4948/6821 1060/3907/6821 +f 2924/4949/6822 2923/4927/6822 2903/4908/6822 +f 2901/4155/6823 2924/4949/6823 2903/4908/6823 +f 2971/4950/6824 2979/4935/6824 2950/4920/6824 +f 2942/4951/6825 2971/4952/6825 2950/4953/6825 +f 3325/4931/6826 3417/3056/6826 3399/4907/6826 +f 2920/4503/6827 2936/3934/6827 2928/4501/6827 +f 2279/1800/6828 3336/314/6828 3317/4781/6828 +f 1656/2952/6829 3272/3004/6829 3378/2953/6829 +f 3272/3004/6830 3408/4918/6830 3378/2953/6830 +f 3272/3004/6831 235/824/6831 3408/4918/6831 +f 2929/2508/6832 2936/3934/6832 2920/4503/6832 +f 2963/4678/6833 2981/4573/6833 2973/4679/6833 +f 3313/1736/6834 3330/4659/6834 3312/3154/6834 +f 1488/713/6835 1487/2949/6835 1164/3224/6835 +f 2904/3186/6836 2924/4949/6836 2901/4155/6836 +f 3044/4954/6837 3031/4955/6837 2996/4936/6837 +f 3292/4945/6838 3325/4931/6838 3256/4914/6838 +f 1872/1946/6839 3510/1039/6839 1838/1038/6839 +f 586/1676/6840 993/2786/6840 3405/2019/6840 +f 2981/4573/6841 3034/4171/6841 2973/4679/6841 +f 3244/4641/6842 3267/4534/6842 3230/4486/6842 +f 2932/4956/6843 2923/4927/6843 2924/4949/6843 +f 2932/4956/6844 2942/4934/6844 2923/4927/6844 +f 2942/4951/6845 2951/4957/6845 2971/4952/6845 +f 2997/4958/6846 2979/4935/6846 2971/4950/6846 +f 2997/4958/6847 2996/4936/6847 2979/4935/6847 +f 2997/4958/6848 3044/4954/6848 2996/4936/6848 +f 3067/4959/6849 3086/4924/6849 3056/4923/6849 +f 3112/4940/6850 3127/4960/6850 3126/4925/6850 +f 3292/4945/6851 3369/4961/6851 3325/4931/6851 +f 2500/3055/6852 1164/4946/6852 3417/3056/6852 +f 955/2175/6853 3018/2905/6853 2439/2906/6853 +f 3272/3004/6854 1687/887/6854 235/824/6854 +f 3070/4509/6855 3114/4636/6855 3081/4510/6855 +f 1722/3157/6856 1748/3440/6856 2912/3439/6856 +f 3054/1787/6857 3062/1789/6857 3053/4789/6857 +f 3062/1789/6858 3083/4714/6858 3053/4789/6858 +f 2959/4962/6859 2997/4958/6859 2971/4950/6859 +f 3010/4963/6860 3044/4954/6860 2997/4958/6860 +f 3098/4964/6861 3086/4924/6861 3067/4959/6861 +f 3098/4964/6862 3112/4940/6862 3086/4924/6862 +f 3369/4961/6863 3417/3056/6863 3325/4931/6863 +f 3062/1789/6864 3135/4444/6864 3083/4714/6864 +f 3123/4491/6865 3135/4444/6865 3091/1788/6865 +f 1687/887/6866 217/875/6866 235/824/6866 +f 3199/4710/6867 3198/4693/6867 3153/4609/6867 +f 3267/4534/6868 3310/4596/6868 3309/4481/6868 +f 3310/4596/6869 3345/4547/6869 3309/4481/6869 +f 3177/4685/6870 3192/2546/6870 3176/4585/6870 +f 2905/4117/6871 2924/4949/6871 2904/3186/6871 +f 2942/4951/6872 2932/4965/6872 2951/4957/6872 +f 2959/4962/6873 2971/4950/6873 2951/4966/6873 +f 3010/4963/6874 3068/4967/6874 3044/4954/6874 +f 3127/4960/6875 3112/4940/6875 3098/4964/6875 +f 3293/4968/6876 3292/4945/6876 3257/4944/6876 +f 3258/4969/6877 3293/4968/6877 3257/4944/6877 +f 2976/2126/6878 2988/4268/6878 2967/4739/6878 +f 993/4543/6879 2725/4697/6879 3423/4541/6879 +f 3146/3863/6880 3167/4628/6880 3132/3864/6880 +f 3148/4677/6881 3193/4718/6881 3147/4806/6881 +f 2988/4268/6882 2999/4647/6882 2987/4269/6882 +f 3193/4718/6883 3206/4970/6883 3205/1983/6883 +f 2914/4780/6884 2932/4956/6884 2924/4949/6884 +f 2932/4965/6885 2943/4971/6885 2951/4957/6885 +f 2943/4972/6886 2959/4962/6886 2951/4966/6886 +f 3023/4973/6887 3010/4963/6887 2997/4958/6887 +f 3400/4662/6888 3417/3056/6888 3369/4961/6888 +f 3192/2546/6889 3191/4590/6889 3176/4585/6889 +f 3374/2436/6890 3385/2514/6890 3373/4670/6890 +f 3024/292/6891 3058/4172/6891 3081/4510/6891 +f 2919/4577/6892 2918/4576/6892 2909/2415/6892 +f 2988/4268/6893 3015/4689/6893 2999/4647/6893 +f 2905/4117/6894 2914/4780/6894 2924/4949/6894 +f 2959/4962/6895 3023/4973/6895 2997/4958/6895 +f 3079/4974/6896 3098/4964/6896 3067/4959/6896 +f 3127/4960/6897 3098/4964/6897 3138/4975/6897 +f 3326/166/6898 3292/4945/6898 3293/4968/6898 +f 3326/166/6899 3369/4961/6899 3292/4945/6899 +f 3359/4198/6900 3400/4662/6900 3369/4961/6900 +f 575/3054/6901 3417/3056/6901 3400/4662/6901 +f 1056/3478/6902 561/2361/6902 3136/3530/6902 +f 2965/2730/6903 2986/2729/6903 2985/4505/6903 +f 3063/898/6904 3092/2735/6904 954/577/6904 +f 3069/4976/6905 3010/4963/6905 3023/4973/6905 +f 3069/4976/6906 3068/4967/6906 3010/4963/6906 +f 3158/4489/6907 3195/1932/6907 3157/4490/6907 +f 3260/4597/6908 3267/4534/6908 3244/4641/6908 +f 1474/4819/6909 3150/4812/6909 3109/4811/6909 +f 2585/3101/6910 2725/4698/6910 1993/1966/6910 +f 3374/2436/6911 3373/4670/6911 3346/4581/6911 +f 3157/4490/6912 3194/4125/6912 3170/4676/6912 +f 2932/4965/6913 2944/2230/6913 2943/4971/6913 +f 2952/69/6914 2959/4962/6914 2943/4972/6914 +f 2952/69/6915 2972/68/6915 2959/4962/6915 +f 2972/68/6916 3023/4973/6916 2959/4962/6916 +f 3099/4688/6917 3098/4964/6917 3079/4974/6917 +f 3099/4688/6918 3139/3100/6918 3098/4964/6918 +f 3098/4964/6919 3139/3100/6919 3138/4975/6919 +f 3401/3140/6920 3400/4662/6920 3359/4198/6920 +f 3074/3134/6921 3073/4651/6921 3035/3135/6921 +f 2987/4269/6922 2999/4647/6922 2940/4423/6922 +f 331/525/6923 3386/567/6923 263/566/6923 +f 2973/4679/6924 3024/292/6924 2953/4680/6924 +f 3260/4597/6925 3244/4641/6925 3201/4569/6925 +f 3074/3134/6926 3104/4588/6926 3073/4651/6926 +f 3201/4569/6927 3244/4641/6927 3200/4642/6927 +f 2915/3582/6928 2914/4780/6928 2905/4117/6928 +f 2914/4780/6929 2925/3824/6929 2932/4956/6929 +f 2932/4965/6930 2925/2228/6930 2944/2230/6930 +f 2952/69/6931 2943/4972/6931 2944/3743/6931 +f 3032/3388/6932 3023/4973/6932 2972/68/6932 +f 3032/3388/6933 3069/4976/6933 3023/4973/6933 +f 3139/3100/6934 3162/4977/6934 3138/4975/6934 +f 3305/167/6935 3258/4969/6935 3240/3903/6935 +f 3305/167/6936 3293/4968/6936 3258/4969/6936 +f 3326/166/6937 3359/4198/6937 3369/4961/6937 +f 1688/3018/6938 3387/3042/6938 3403/4706/6938 +f 3230/4486/6939 3229/4483/6939 3200/4642/6939 +f 2906/2458/6940 2915/3582/6940 2905/4117/6940 +f 3033/67/6941 3032/3388/6941 2972/68/6941 +f 3032/3388/6942 3080/3676/6942 3069/4976/6942 +f 3139/3100/6943 3128/1219/6943 3162/4977/6943 +f 3305/167/6944 3326/166/6944 3293/4968/6944 +f 1478/2828/6945 3367/3009/6945 1486/2877/6945 diff --git a/libs/potree/resources/models/stanford_bunny_reduced.ply b/libs/potree/resources/models/stanford_bunny_reduced.ply new file mode 100644 index 0000000..125ddb3 Binary files /dev/null and b/libs/potree/resources/models/stanford_bunny_reduced.ply differ diff --git a/libs/potree/resources/shapefiles/south_sorvilier.dbf b/libs/potree/resources/shapefiles/south_sorvilier.dbf new file mode 100644 index 0000000..d8d8f35 Binary files /dev/null and b/libs/potree/resources/shapefiles/south_sorvilier.dbf differ diff --git a/libs/potree/resources/shapefiles/south_sorvilier.shp b/libs/potree/resources/shapefiles/south_sorvilier.shp new file mode 100644 index 0000000..89cece3 Binary files /dev/null and b/libs/potree/resources/shapefiles/south_sorvilier.shp differ diff --git a/libs/potree/resources/textures/LICENSE b/libs/potree/resources/textures/LICENSE new file mode 100644 index 0000000..a73899e --- /dev/null +++ b/libs/potree/resources/textures/LICENSE @@ -0,0 +1,23 @@ + + + +brick_pavement.jpg: +http://www.wildtextures.com/terms-of-use/ +============================== +All textures at wildtextures.com are completely free for both, personal and commercial use, however you can’t: + +host textures for download on any other website or server, +direct link to texture file from any other website ( however you can link to texture page ), +sell them as a stock materials, +============================== + + + + + + + + + + + diff --git a/libs/potree/resources/textures/brick_pavement.jpg b/libs/potree/resources/textures/brick_pavement.jpg new file mode 100644 index 0000000..69808ed Binary files /dev/null and b/libs/potree/resources/textures/brick_pavement.jpg differ diff --git a/libs/potree/resources/textures/matcap/basic_1.jpg b/libs/potree/resources/textures/matcap/basic_1.jpg new file mode 100644 index 0000000..7700ec1 Binary files /dev/null and b/libs/potree/resources/textures/matcap/basic_1.jpg differ diff --git a/libs/potree/resources/textures/matcap/basic_2.jpg b/libs/potree/resources/textures/matcap/basic_2.jpg new file mode 100644 index 0000000..67b9deb Binary files /dev/null and b/libs/potree/resources/textures/matcap/basic_2.jpg differ diff --git a/libs/potree/resources/textures/matcap/basic_dark.jpg b/libs/potree/resources/textures/matcap/basic_dark.jpg new file mode 100644 index 0000000..f64424e Binary files /dev/null and b/libs/potree/resources/textures/matcap/basic_dark.jpg differ diff --git a/libs/potree/resources/textures/matcap/basic_side.jpg b/libs/potree/resources/textures/matcap/basic_side.jpg new file mode 100644 index 0000000..7d6b09b Binary files /dev/null and b/libs/potree/resources/textures/matcap/basic_side.jpg differ diff --git a/libs/potree/resources/textures/matcap/blender_matcap_license.txt b/libs/potree/resources/textures/matcap/blender_matcap_license.txt new file mode 100644 index 0000000..9432fa8 --- /dev/null +++ b/libs/potree/resources/textures/matcap/blender_matcap_license.txt @@ -0,0 +1,5 @@ +These matcap images are licensed as CC0 or public domain. + +Thanks to the Blender community for contributing these matcaps. + +(Matcap images from /Blender/2.80/datafiles/studiolights/matcap/*") diff --git a/libs/potree/resources/textures/matcap/ceramic_dark.jpg b/libs/potree/resources/textures/matcap/ceramic_dark.jpg new file mode 100644 index 0000000..f61f257 Binary files /dev/null and b/libs/potree/resources/textures/matcap/ceramic_dark.jpg differ diff --git a/libs/potree/resources/textures/matcap/ceramic_lightbulb.jpg b/libs/potree/resources/textures/matcap/ceramic_lightbulb.jpg new file mode 100644 index 0000000..4ecbcfe Binary files /dev/null and b/libs/potree/resources/textures/matcap/ceramic_lightbulb.jpg differ diff --git a/libs/potree/resources/textures/matcap/check_normal+y.jpg b/libs/potree/resources/textures/matcap/check_normal+y.jpg new file mode 100644 index 0000000..6965940 Binary files /dev/null and b/libs/potree/resources/textures/matcap/check_normal+y.jpg differ diff --git a/libs/potree/resources/textures/matcap/check_rim_dark.jpg b/libs/potree/resources/textures/matcap/check_rim_dark.jpg new file mode 100644 index 0000000..f8f5510 Binary files /dev/null and b/libs/potree/resources/textures/matcap/check_rim_dark.jpg differ diff --git a/libs/potree/resources/textures/matcap/check_rim_light.jpg b/libs/potree/resources/textures/matcap/check_rim_light.jpg new file mode 100644 index 0000000..e3703d9 Binary files /dev/null and b/libs/potree/resources/textures/matcap/check_rim_light.jpg differ diff --git a/libs/potree/resources/textures/matcap/clay_brown.jpg b/libs/potree/resources/textures/matcap/clay_brown.jpg new file mode 100644 index 0000000..f1f5c4d Binary files /dev/null and b/libs/potree/resources/textures/matcap/clay_brown.jpg differ diff --git a/libs/potree/resources/textures/matcap/clay_muddy.jpg b/libs/potree/resources/textures/matcap/clay_muddy.jpg new file mode 100644 index 0000000..aa5002b Binary files /dev/null and b/libs/potree/resources/textures/matcap/clay_muddy.jpg differ diff --git a/libs/potree/resources/textures/matcap/clay_studio.jpg b/libs/potree/resources/textures/matcap/clay_studio.jpg new file mode 100644 index 0000000..e3675a6 Binary files /dev/null and b/libs/potree/resources/textures/matcap/clay_studio.jpg differ diff --git a/libs/potree/resources/textures/matcap/contours_1.jpg b/libs/potree/resources/textures/matcap/contours_1.jpg new file mode 100644 index 0000000..49e478b Binary files /dev/null and b/libs/potree/resources/textures/matcap/contours_1.jpg differ diff --git a/libs/potree/resources/textures/matcap/contours_2.jpg b/libs/potree/resources/textures/matcap/contours_2.jpg new file mode 100644 index 0000000..2f1d94b Binary files /dev/null and b/libs/potree/resources/textures/matcap/contours_2.jpg differ diff --git a/libs/potree/resources/textures/matcap/contours_3.jpg b/libs/potree/resources/textures/matcap/contours_3.jpg new file mode 100644 index 0000000..aa5e4ab Binary files /dev/null and b/libs/potree/resources/textures/matcap/contours_3.jpg differ diff --git a/libs/potree/resources/textures/matcap/jade.jpg b/libs/potree/resources/textures/matcap/jade.jpg new file mode 100644 index 0000000..0db21ce Binary files /dev/null and b/libs/potree/resources/textures/matcap/jade.jpg differ diff --git a/libs/potree/resources/textures/matcap/matcap.jpg b/libs/potree/resources/textures/matcap/matcap.jpg new file mode 100644 index 0000000..559016e Binary files /dev/null and b/libs/potree/resources/textures/matcap/matcap.jpg differ diff --git a/libs/potree/resources/textures/matcap/metal_anisotropic.jpg b/libs/potree/resources/textures/matcap/metal_anisotropic.jpg new file mode 100644 index 0000000..4356f62 Binary files /dev/null and b/libs/potree/resources/textures/matcap/metal_anisotropic.jpg differ diff --git a/libs/potree/resources/textures/matcap/metal_carpaint.jpg b/libs/potree/resources/textures/matcap/metal_carpaint.jpg new file mode 100644 index 0000000..a6a06da Binary files /dev/null and b/libs/potree/resources/textures/matcap/metal_carpaint.jpg differ diff --git a/libs/potree/resources/textures/matcap/metal_lead.jpg b/libs/potree/resources/textures/matcap/metal_lead.jpg new file mode 100644 index 0000000..7d4131d Binary files /dev/null and b/libs/potree/resources/textures/matcap/metal_lead.jpg differ diff --git a/libs/potree/resources/textures/matcap/metal_shiny.jpg b/libs/potree/resources/textures/matcap/metal_shiny.jpg new file mode 100644 index 0000000..8569b92 Binary files /dev/null and b/libs/potree/resources/textures/matcap/metal_shiny.jpg differ diff --git a/libs/potree/resources/textures/matcap/pearl.jpg b/libs/potree/resources/textures/matcap/pearl.jpg new file mode 100644 index 0000000..1317fbb Binary files /dev/null and b/libs/potree/resources/textures/matcap/pearl.jpg differ diff --git a/libs/potree/resources/textures/matcap/reflection_check_horizontal.jpg b/libs/potree/resources/textures/matcap/reflection_check_horizontal.jpg new file mode 100644 index 0000000..c4bf4a4 Binary files /dev/null and b/libs/potree/resources/textures/matcap/reflection_check_horizontal.jpg differ diff --git a/libs/potree/resources/textures/matcap/reflection_check_vertical.jpg b/libs/potree/resources/textures/matcap/reflection_check_vertical.jpg new file mode 100644 index 0000000..86bf33d Binary files /dev/null and b/libs/potree/resources/textures/matcap/reflection_check_vertical.jpg differ diff --git a/libs/potree/resources/textures/matcap/resin.jpg b/libs/potree/resources/textures/matcap/resin.jpg new file mode 100644 index 0000000..90fdc47 Binary files /dev/null and b/libs/potree/resources/textures/matcap/resin.jpg differ diff --git a/libs/potree/resources/textures/matcap/skin.jpg b/libs/potree/resources/textures/matcap/skin.jpg new file mode 100644 index 0000000..ab42a97 Binary files /dev/null and b/libs/potree/resources/textures/matcap/skin.jpg differ diff --git a/libs/potree/resources/textures/matcap/toon.jpg b/libs/potree/resources/textures/matcap/toon.jpg new file mode 100644 index 0000000..b12ba47 Binary files /dev/null and b/libs/potree/resources/textures/matcap/toon.jpg differ diff --git a/libs/potree/resources/textures/navigation/B.png b/libs/potree/resources/textures/navigation/B.png new file mode 100644 index 0000000..510ec89 Binary files /dev/null and b/libs/potree/resources/textures/navigation/B.png differ diff --git a/libs/potree/resources/textures/navigation/D.png b/libs/potree/resources/textures/navigation/D.png new file mode 100644 index 0000000..2d3a51f Binary files /dev/null and b/libs/potree/resources/textures/navigation/D.png differ diff --git a/libs/potree/resources/textures/navigation/F.png b/libs/potree/resources/textures/navigation/F.png new file mode 100644 index 0000000..8aec1b2 Binary files /dev/null and b/libs/potree/resources/textures/navigation/F.png differ diff --git a/libs/potree/resources/textures/navigation/L.png b/libs/potree/resources/textures/navigation/L.png new file mode 100644 index 0000000..4a838a1 Binary files /dev/null and b/libs/potree/resources/textures/navigation/L.png differ diff --git a/libs/potree/resources/textures/navigation/R.png b/libs/potree/resources/textures/navigation/R.png new file mode 100644 index 0000000..f9f16b8 Binary files /dev/null and b/libs/potree/resources/textures/navigation/R.png differ diff --git a/libs/potree/resources/textures/navigation/U.png b/libs/potree/resources/textures/navigation/U.png new file mode 100644 index 0000000..9a9c377 Binary files /dev/null and b/libs/potree/resources/textures/navigation/U.png differ diff --git a/libs/potree/resources/textures/rectangle.png b/libs/potree/resources/textures/rectangle.png new file mode 100644 index 0000000..8b57a4f Binary files /dev/null and b/libs/potree/resources/textures/rectangle.png differ diff --git a/libs/potree/resources/textures/skybox/nx.jpg b/libs/potree/resources/textures/skybox/nx.jpg new file mode 100644 index 0000000..c10ba98 Binary files /dev/null and b/libs/potree/resources/textures/skybox/nx.jpg differ diff --git a/libs/potree/resources/textures/skybox/ny.jpg b/libs/potree/resources/textures/skybox/ny.jpg new file mode 100644 index 0000000..729b03c Binary files /dev/null and b/libs/potree/resources/textures/skybox/ny.jpg differ diff --git a/libs/potree/resources/textures/skybox/nz.jpg b/libs/potree/resources/textures/skybox/nz.jpg new file mode 100644 index 0000000..db4119a Binary files /dev/null and b/libs/potree/resources/textures/skybox/nz.jpg differ diff --git a/libs/potree/resources/textures/skybox/px.jpg b/libs/potree/resources/textures/skybox/px.jpg new file mode 100644 index 0000000..c6e77ae Binary files /dev/null and b/libs/potree/resources/textures/skybox/px.jpg differ diff --git a/libs/potree/resources/textures/skybox/py.jpg b/libs/potree/resources/textures/skybox/py.jpg new file mode 100644 index 0000000..6cf7e02 Binary files /dev/null and b/libs/potree/resources/textures/skybox/py.jpg differ diff --git a/libs/potree/resources/textures/skybox/pz.jpg b/libs/potree/resources/textures/skybox/pz.jpg new file mode 100644 index 0000000..76b0db0 Binary files /dev/null and b/libs/potree/resources/textures/skybox/pz.jpg differ diff --git a/libs/potree/resources/textures/skybox/skyboxsun25degtest.txt b/libs/potree/resources/textures/skybox/skyboxsun25degtest.txt new file mode 100644 index 0000000..9e47547 --- /dev/null +++ b/libs/potree/resources/textures/skybox/skyboxsun25degtest.txt @@ -0,0 +1 @@ +http://reije081.home.xs4all.nl/skyboxes/ diff --git a/libs/potree/resources/textures/skybox2/README.TXT b/libs/potree/resources/textures/skybox2/README.TXT new file mode 100644 index 0000000..680005e --- /dev/null +++ b/libs/potree/resources/textures/skybox2/README.TXT @@ -0,0 +1,15 @@ +THIS SKY WAS UPDATED AT THE 27TH +THE ORIG HAD SOME ERRORS + +MIRAMAR +high res 1024^2 environment map +ships as TGA. + + +By Jockum Skoglund aka hipshot +hipshot@zfight.com +www.zfight.com +Stockholm, 2005 08 25 + + +Modify however you like, just cred me for my work, maybe link to my page. diff --git a/libs/potree/resources/textures/skybox2/nx.jpg b/libs/potree/resources/textures/skybox2/nx.jpg new file mode 100644 index 0000000..8b4c1e4 Binary files /dev/null and b/libs/potree/resources/textures/skybox2/nx.jpg differ diff --git a/libs/potree/resources/textures/skybox2/ny.jpg b/libs/potree/resources/textures/skybox2/ny.jpg new file mode 100644 index 0000000..1a73dd0 Binary files /dev/null and b/libs/potree/resources/textures/skybox2/ny.jpg differ diff --git a/libs/potree/resources/textures/skybox2/nz.jpg b/libs/potree/resources/textures/skybox2/nz.jpg new file mode 100644 index 0000000..60e85ef Binary files /dev/null and b/libs/potree/resources/textures/skybox2/nz.jpg differ diff --git a/libs/potree/resources/textures/skybox2/px.jpg b/libs/potree/resources/textures/skybox2/px.jpg new file mode 100644 index 0000000..c8c1165 Binary files /dev/null and b/libs/potree/resources/textures/skybox2/px.jpg differ diff --git a/libs/potree/resources/textures/skybox2/py.jpg b/libs/potree/resources/textures/skybox2/py.jpg new file mode 100644 index 0000000..eea9b07 Binary files /dev/null and b/libs/potree/resources/textures/skybox2/py.jpg differ diff --git a/libs/potree/resources/textures/skybox2/pz.jpg b/libs/potree/resources/textures/skybox2/pz.jpg new file mode 100644 index 0000000..954ed86 Binary files /dev/null and b/libs/potree/resources/textures/skybox2/pz.jpg differ diff --git a/libs/potree/resources/textures/skyboxsun25degtest.txt b/libs/potree/resources/textures/skyboxsun25degtest.txt new file mode 100644 index 0000000..9e47547 --- /dev/null +++ b/libs/potree/resources/textures/skyboxsun25degtest.txt @@ -0,0 +1 @@ +http://reije081.home.xs4all.nl/skyboxes/ diff --git a/libs/potree/sidebar.html b/libs/potree/sidebar.html new file mode 100644 index 0000000..1552427 --- /dev/null +++ b/libs/potree/sidebar.html @@ -0,0 +1,278 @@ + + + + diff --git a/libs/potree/workers/2.0/DecoderWorker.js b/libs/potree/workers/2.0/DecoderWorker.js new file mode 100644 index 0000000..babb49f --- /dev/null +++ b/libs/potree/workers/2.0/DecoderWorker.js @@ -0,0 +1,303 @@ +/** + * Some types of possible point attribute data formats + * + * @class + */ +const PointAttributeTypes = { + DATA_TYPE_DOUBLE: {ordinal: 0, name: "double", size: 8}, + DATA_TYPE_FLOAT: {ordinal: 1, name: "float", size: 4}, + DATA_TYPE_INT8: {ordinal: 2, name: "int8", size: 1}, + DATA_TYPE_UINT8: {ordinal: 3, name: "uint8", size: 1}, + DATA_TYPE_INT16: {ordinal: 4, name: "int16", size: 2}, + DATA_TYPE_UINT16: {ordinal: 5, name: "uint16", size: 2}, + DATA_TYPE_INT32: {ordinal: 6, name: "int32", size: 4}, + DATA_TYPE_UINT32: {ordinal: 7, name: "uint32", size: 4}, + DATA_TYPE_INT64: {ordinal: 8, name: "int64", size: 8}, + DATA_TYPE_UINT64: {ordinal: 9, name: "uint64", size: 8} +}; + +let i = 0; +for (let obj in PointAttributeTypes) { + PointAttributeTypes[i] = PointAttributeTypes[obj]; + i++; +} + + +class PointAttribute{ + + constructor(name, type, numElements){ + this.name = name; + this.type = type; + this.numElements = numElements; + this.byteSize = this.numElements * this.type.size; + this.description = ""; + this.range = [Infinity, -Infinity]; + } + +} +PointAttribute.POSITION_CARTESIAN = new PointAttribute( + "POSITION_CARTESIAN", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + +PointAttribute.RGBA_PACKED = new PointAttribute( + "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 4); + +PointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED; + +PointAttribute.RGB_PACKED = new PointAttribute( + "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 3); + +PointAttribute.NORMAL_FLOATS = new PointAttribute( + "NORMAL_FLOATS", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + +PointAttribute.INTENSITY = new PointAttribute( + "INTENSITY", PointAttributeTypes.DATA_TYPE_UINT16, 1); + +PointAttribute.CLASSIFICATION = new PointAttribute( + "CLASSIFICATION", PointAttributeTypes.DATA_TYPE_UINT8, 1); + +PointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute( + "NORMAL_SPHEREMAPPED", PointAttributeTypes.DATA_TYPE_UINT8, 2); + +PointAttribute.NORMAL_OCT16 = new PointAttribute( + "NORMAL_OCT16", PointAttributeTypes.DATA_TYPE_UINT8, 2); + +PointAttribute.NORMAL = new PointAttribute( + "NORMAL", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + +PointAttribute.RETURN_NUMBER = new PointAttribute( + "RETURN_NUMBER", PointAttributeTypes.DATA_TYPE_UINT8, 1); + +PointAttribute.NUMBER_OF_RETURNS = new PointAttribute( + "NUMBER_OF_RETURNS", PointAttributeTypes.DATA_TYPE_UINT8, 1); + +PointAttribute.SOURCE_ID = new PointAttribute( + "SOURCE_ID", PointAttributeTypes.DATA_TYPE_UINT16, 1); + +PointAttribute.INDICES = new PointAttribute( + "INDICES", PointAttributeTypes.DATA_TYPE_UINT32, 1); + +PointAttribute.SPACING = new PointAttribute( + "SPACING", PointAttributeTypes.DATA_TYPE_FLOAT, 1); + +PointAttribute.GPS_TIME = new PointAttribute( + "GPS_TIME", PointAttributeTypes.DATA_TYPE_DOUBLE, 1); + +const typedArrayMapping = { + "int8": Int8Array, + "int16": Int16Array, + "int32": Int32Array, + "int64": Float64Array, + "uint8": Uint8Array, + "uint16": Uint16Array, + "uint32": Uint32Array, + "uint64": Float64Array, + "float": Float32Array, + "double": Float64Array, +}; + +Potree = {}; + +onmessage = function (event) { + + let {buffer, pointAttributes, scale, name, min, max, size, offset, numPoints} = event.data; + + let tStart = performance.now(); + + let view = new DataView(buffer); + + let attributeBuffers = {}; + let attributeOffset = 0; + + let bytesPerPoint = 0; + for (let pointAttribute of pointAttributes.attributes) { + bytesPerPoint += pointAttribute.byteSize; + } + + let gridSize = 32; + let grid = new Uint32Array(gridSize ** 3); + let toIndex = (x, y, z) => { + // let dx = gridSize * (x - min.x) / size.x; + // let dy = gridSize * (y - min.y) / size.y; + // let dz = gridSize * (z - min.z) / size.z; + + // min is already subtracted + let dx = gridSize * x / size.x; + let dy = gridSize * y / size.y; + let dz = gridSize * z / size.z; + + let ix = Math.min(parseInt(dx), gridSize - 1); + let iy = Math.min(parseInt(dy), gridSize - 1); + let iz = Math.min(parseInt(dz), gridSize - 1); + + let index = ix + iy * gridSize + iz * gridSize * gridSize; + + return index; + }; + + let numOccupiedCells = 0; + for (let pointAttribute of pointAttributes.attributes) { + + if(["POSITION_CARTESIAN", "position"].includes(pointAttribute.name)){ + let buff = new ArrayBuffer(numPoints * 4 * 3); + let positions = new Float32Array(buff); + + for (let j = 0; j < numPoints; j++) { + + let pointOffset = j * bytesPerPoint; + + let x = (view.getInt32(pointOffset + attributeOffset + 0, true) * scale[0]) + offset[0] - min.x; + let y = (view.getInt32(pointOffset + attributeOffset + 4, true) * scale[1]) + offset[1] - min.y; + let z = (view.getInt32(pointOffset + attributeOffset + 8, true) * scale[2]) + offset[2] - min.z; + + let index = toIndex(x, y, z); + let count = grid[index]++; + if(count === 0){ + numOccupiedCells++; + } + + positions[3 * j + 0] = x; + positions[3 * j + 1] = y; + positions[3 * j + 2] = z; + } + + attributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute }; + }else if(["RGBA", "rgba"].includes(pointAttribute.name)){ + let buff = new ArrayBuffer(numPoints * 4); + let colors = new Uint8Array(buff); + + for (let j = 0; j < numPoints; j++) { + let pointOffset = j * bytesPerPoint; + + let r = view.getUint16(pointOffset + attributeOffset + 0, true); + let g = view.getUint16(pointOffset + attributeOffset + 2, true); + let b = view.getUint16(pointOffset + attributeOffset + 4, true); + + colors[4 * j + 0] = r > 255 ? r / 256 : r; + colors[4 * j + 1] = g > 255 ? g / 256 : g; + colors[4 * j + 2] = b > 255 ? b / 256 : b; + } + + attributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute }; + }else { + let buff = new ArrayBuffer(numPoints * 4); + let f32 = new Float32Array(buff); + + let TypedArray = typedArrayMapping[pointAttribute.type.name]; + preciseBuffer = new TypedArray(numPoints); + + let [offset, scale] = [0, 1]; + + const getterMap = { + "int8": view.getInt8, + "int16": view.getInt16, + "int32": view.getInt32, + // "int64": view.getInt64, + "uint8": view.getUint8, + "uint16": view.getUint16, + "uint32": view.getUint32, + // "uint64": view.getUint64, + "float": view.getFloat32, + "double": view.getFloat64, + }; + const getter = getterMap[pointAttribute.type.name].bind(view); + + // compute offset and scale to pack larger types into 32 bit floats + if(pointAttribute.type.size > 4){ + let [amin, amax] = pointAttribute.range; + offset = amin; + scale = 1 / (amax - amin); + } + + for(let j = 0; j < numPoints; j++){ + let pointOffset = j * bytesPerPoint; + let value = getter(pointOffset + attributeOffset, true); + + f32[j] = (value - offset) * scale; + preciseBuffer[j] = value; + } + + attributeBuffers[pointAttribute.name] = { + buffer: buff, + preciseBuffer: preciseBuffer, + attribute: pointAttribute, + offset: offset, + scale: scale, + }; + } + + attributeOffset += pointAttribute.byteSize; + + + } + + let occupancy = parseInt(numPoints / numOccupiedCells); + // console.log(`${name}: #points: ${numPoints}: #occupiedCells: ${numOccupiedCells}, occupancy: ${occupancy} points/cell`); + + { // add indices + let buff = new ArrayBuffer(numPoints * 4); + let indices = new Uint32Array(buff); + + for (let i = 0; i < numPoints; i++) { + indices[i] = i; + } + + attributeBuffers["INDICES"] = { buffer: buff, attribute: PointAttribute.INDICES }; + } + + + { // handle attribute vectors + let vectors = pointAttributes.vectors; + + for(let vector of vectors){ + + let {name, attributes} = vector; + let numVectorElements = attributes.length; + let buffer = new ArrayBuffer(numVectorElements * numPoints * 4); + let f32 = new Float32Array(buffer); + + let iElement = 0; + for(let sourceName of attributes){ + let sourceBuffer = attributeBuffers[sourceName]; + let {offset, scale} = sourceBuffer; + let view = new DataView(sourceBuffer.buffer); + + const getter = view.getFloat32.bind(view); + + for(let j = 0; j < numPoints; j++){ + let value = getter(j * 4, true); + + f32[j * numVectorElements + iElement] = (value / scale) + offset; + } + + iElement++; + } + + let vecAttribute = new PointAttribute(name, PointAttributeTypes.DATA_TYPE_FLOAT, 3); + + attributeBuffers[name] = { + buffer: buffer, + attribute: vecAttribute, + }; + + } + + } + + // let duration = performance.now() - tStart; + // let pointsPerMs = numPoints / duration; + // console.log(`duration: ${duration.toFixed(1)}ms, #points: ${numPoints}, points/ms: ${pointsPerMs.toFixed(1)}`); + + let message = { + buffer: buffer, + attributeBuffers: attributeBuffers, + density: occupancy, + }; + + let transferables = []; + for (let property in message.attributeBuffers) { + transferables.push(message.attributeBuffers[property].buffer); + } + transferables.push(buffer); + + postMessage(message, transferables); +}; diff --git a/libs/potree/workers/2.0/DecoderWorker_brotli.js b/libs/potree/workers/2.0/DecoderWorker_brotli.js new file mode 100644 index 0000000..0d75e64 --- /dev/null +++ b/libs/potree/workers/2.0/DecoderWorker_brotli.js @@ -0,0 +1,2496 @@ +/** + * Some types of possible point attribute data formats + * + * @class + */ +const PointAttributeTypes = { + DATA_TYPE_DOUBLE: {ordinal: 0, name: "double", size: 8}, + DATA_TYPE_FLOAT: {ordinal: 1, name: "float", size: 4}, + DATA_TYPE_INT8: {ordinal: 2, name: "int8", size: 1}, + DATA_TYPE_UINT8: {ordinal: 3, name: "uint8", size: 1}, + DATA_TYPE_INT16: {ordinal: 4, name: "int16", size: 2}, + DATA_TYPE_UINT16: {ordinal: 5, name: "uint16", size: 2}, + DATA_TYPE_INT32: {ordinal: 6, name: "int32", size: 4}, + DATA_TYPE_UINT32: {ordinal: 7, name: "uint32", size: 4}, + DATA_TYPE_INT64: {ordinal: 8, name: "int64", size: 8}, + DATA_TYPE_UINT64: {ordinal: 9, name: "uint64", size: 8} +}; + +let i = 0; +for (let obj in PointAttributeTypes) { + PointAttributeTypes[i] = PointAttributeTypes[obj]; + i++; +} + + +class PointAttribute{ + + constructor(name, type, numElements){ + this.name = name; + this.type = type; + this.numElements = numElements; + this.byteSize = this.numElements * this.type.size; + this.description = ""; + this.range = [Infinity, -Infinity]; + } + +} +PointAttribute.POSITION_CARTESIAN = new PointAttribute( + "POSITION_CARTESIAN", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + +PointAttribute.RGBA_PACKED = new PointAttribute( + "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 4); + +PointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED; + +PointAttribute.RGB_PACKED = new PointAttribute( + "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 3); + +PointAttribute.NORMAL_FLOATS = new PointAttribute( + "NORMAL_FLOATS", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + +PointAttribute.INTENSITY = new PointAttribute( + "INTENSITY", PointAttributeTypes.DATA_TYPE_UINT16, 1); + +PointAttribute.CLASSIFICATION = new PointAttribute( + "CLASSIFICATION", PointAttributeTypes.DATA_TYPE_UINT8, 1); + +PointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute( + "NORMAL_SPHEREMAPPED", PointAttributeTypes.DATA_TYPE_UINT8, 2); + +PointAttribute.NORMAL_OCT16 = new PointAttribute( + "NORMAL_OCT16", PointAttributeTypes.DATA_TYPE_UINT8, 2); + +PointAttribute.NORMAL = new PointAttribute( + "NORMAL", PointAttributeTypes.DATA_TYPE_FLOAT, 3); + +PointAttribute.RETURN_NUMBER = new PointAttribute( + "RETURN_NUMBER", PointAttributeTypes.DATA_TYPE_UINT8, 1); + +PointAttribute.NUMBER_OF_RETURNS = new PointAttribute( + "NUMBER_OF_RETURNS", PointAttributeTypes.DATA_TYPE_UINT8, 1); + +PointAttribute.SOURCE_ID = new PointAttribute( + "SOURCE_ID", PointAttributeTypes.DATA_TYPE_UINT16, 1); + +PointAttribute.INDICES = new PointAttribute( + "INDICES", PointAttributeTypes.DATA_TYPE_UINT32, 1); + +PointAttribute.SPACING = new PointAttribute( + "SPACING", PointAttributeTypes.DATA_TYPE_FLOAT, 1); + +PointAttribute.GPS_TIME = new PointAttribute( + "GPS_TIME", PointAttributeTypes.DATA_TYPE_DOUBLE, 1); + +/* Copyright 2017 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** @return {function(!Int8Array):!Int8Array} */ +function BrotliDecodeClosure() { + + /** @type {!Int8Array} */ + var DICTIONARY_DATA = new Int8Array(0); + + /** + * @constructor + * @param {!Int8Array} bytes + * @struct + */ + function InputStream(bytes) { + /** @type {!Int8Array} */ + this.data = bytes; + /** @type {!number} */ + this.offset = 0; + } + 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]); + 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]); + var DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); + var DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); + var FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); + 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]); + 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]); + 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]); + 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]); + 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]); + 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]); + var CMD_LOOKUP = new Int16Array(2816); + { + unpackCommandLookupTable(CMD_LOOKUP); + } + /** + * @param {number} i + * @return {number} + */ + function log2floor(i) { + var /** number */ result = -1; + var /** number */ step = 16; + while (step > 0) { + if ((i >>> step) != 0) { + result += step; + i = i >>> step; + } + step = step >> 1; + } + return result + i; + } + /** + * @param {number} npostfix + * @param {number} ndirect + * @param {number} maxndistbits + * @return {number} + */ + function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { + return 16 + ndirect + 2 * (maxndistbits << npostfix); + } + /** + * @param {number} maxDistance + * @param {number} npostfix + * @param {number} ndirect + * @return {number} + */ + function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { + if (maxDistance < ndirect + (2 << npostfix)) { + throw "maxDistance is too small"; + } + var /** number */ offset = ((maxDistance - ndirect) >> npostfix) + 4; + var /** number */ ndistbits = log2floor(offset) - 1; + var /** number */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); + return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; + } + /** + * @param {!Int16Array} cmdLookup + * @return {void} + */ + function unpackCommandLookupTable(cmdLookup) { + var /** !Int16Array */ insertLengthOffsets = new Int16Array(24); + var /** !Int16Array */ copyLengthOffsets = new Int16Array(24); + copyLengthOffsets[0] = 2; + for (var /** number */ i = 0; i < 23; ++i) { + insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); + copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); + } + for (var /** number */ cmdCode = 0; cmdCode < 704; ++cmdCode) { + var /** number */ rangeIdx = cmdCode >>> 6; + var /** number */ distanceContextOffset = -4; + if (rangeIdx >= 2) { + rangeIdx -= 2; + distanceContextOffset = 0; + } + var /** number */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); + var /** number */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); + var /** number */ copyLengthOffset = copyLengthOffsets[copyCode]; + var /** number */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); + var /** number */ index = cmdCode * 4; + cmdLookup[index + 0] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); + cmdLookup[index + 1] = insertLengthOffsets[insertCode]; + cmdLookup[index + 2] = copyLengthOffsets[copyCode]; + cmdLookup[index + 3] = distanceContext; + } + } + /** + * @param {!State} s + * @return {number} + */ + function decodeWindowBits(s) { + var /** number */ largeWindowEnabled = s.isLargeWindow; + s.isLargeWindow = 0; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + if (readFewBits(s, 1) == 0) { + return 16; + } + var /** number */ n = readFewBits(s, 3); + if (n != 0) { + return 17 + n; + } + n = readFewBits(s, 3); + if (n != 0) { + if (n == 1) { + if (largeWindowEnabled == 0) { + return -1; + } + s.isLargeWindow = 1; + if (readFewBits(s, 1) == 1) { + return -1; + } + n = readFewBits(s, 6); + if (n < 10 || n > 30) { + return -1; + } + return n; + } else { + return 8 + n; + } + } + return 17; + } + /** + * @param {!State} s + * @param {!InputStream} input + * @return {void} + */ + function initState(s, input) { + if (s.runningState != 0) { + throw "State MUST be uninitialized"; + } + s.blockTrees = new Int32Array(3091); + s.blockTrees[0] = 7; + s.distRbIdx = 3; + var /** number */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 15 << 3); + s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); + s.distOffset = new Int32Array(maxDistanceAlphabetLimit); + s.input = input; + initBitReader(s); + s.runningState = 1; + } + /** + * @param {!State} s + * @return {void} + */ + function close(s) { + if (s.runningState == 0) { + throw "State MUST be initialized"; + } + if (s.runningState == 11) { + return; + } + s.runningState = 11; + if (s.input != null) { + closeInput(s.input); + s.input = null; + } + } + /** + * @param {!State} s + * @return {number} + */ + function decodeVarLenUnsignedByte(s) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + if (readFewBits(s, 1) != 0) { + var /** number */ n = readFewBits(s, 3); + if (n == 0) { + return 1; + } else { + return readFewBits(s, n) + (1 << n); + } + } + return 0; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeMetaBlockLength(s) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + s.inputEnd = readFewBits(s, 1); + s.metaBlockLength = 0; + s.isUncompressed = 0; + s.isMetadata = 0; + if ((s.inputEnd != 0) && readFewBits(s, 1) != 0) { + return; + } + var /** number */ sizeNibbles = readFewBits(s, 2) + 4; + if (sizeNibbles == 7) { + s.isMetadata = 1; + if (readFewBits(s, 1) != 0) { + throw "Corrupted reserved bit"; + } + var /** number */ sizeBytes = readFewBits(s, 2); + if (sizeBytes == 0) { + return; + } + for (var /** number */ i = 0; i < sizeBytes; i++) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ bits = readFewBits(s, 8); + if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) { + throw "Exuberant nibble"; + } + s.metaBlockLength |= bits << (i * 8); + } + } else { + for (var /** number */ i = 0; i < sizeNibbles; i++) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ bits = readFewBits(s, 4); + if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) { + throw "Exuberant nibble"; + } + s.metaBlockLength |= bits << (i * 4); + } + } + s.metaBlockLength++; + if (s.inputEnd == 0) { + s.isUncompressed = readFewBits(s, 1); + } + } + /** + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readSymbol(tableGroup, tableIdx, s) { + var /** number */ offset = tableGroup[tableIdx]; + var /** number */ val = (s.accumulator32 >>> s.bitOffset); + offset += val & 0xFF; + var /** number */ bits = tableGroup[offset] >> 16; + var /** number */ sym = tableGroup[offset] & 0xFFFF; + if (bits <= 8) { + s.bitOffset += bits; + return sym; + } + offset += sym; + var /** number */ mask = (1 << bits) - 1; + offset += (val & mask) >>> 8; + s.bitOffset += ((tableGroup[offset] >> 16) + 8); + return tableGroup[offset] & 0xFFFF; + } + /** + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readBlockLength(tableGroup, tableIdx, s) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ code = readSymbol(tableGroup, tableIdx, s); + var /** number */ n = BLOCK_LENGTH_N_BITS[code]; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); + } + /** + * @param {!Int32Array} v + * @param {number} index + * @return {void} + */ + function moveToFront(v, index) { + var /** number */ value = v[index]; + for (; index > 0; index--) { + v[index] = v[index - 1]; + } + v[0] = value; + } + /** + * @param {!Int8Array} v + * @param {number} vLen + * @return {void} + */ + function inverseMoveToFrontTransform(v, vLen) { + var /** !Int32Array */ mtf = new Int32Array(256); + for (var /** number */ i = 0; i < 256; i++) { + mtf[i] = i; + } + for (var /** number */ i = 0; i < vLen; i++) { + var /** number */ index = v[i] & 0xFF; + v[i] = mtf[index]; + if (index != 0) { + moveToFront(mtf, index); + } + } + } + /** + * @param {!Int32Array} codeLengthCodeLengths + * @param {number} numSymbols + * @param {!Int32Array} codeLengths + * @param {!State} s + * @return {void} + */ + function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { + var /** number */ symbol = 0; + var /** number */ prevCodeLen = 8; + var /** number */ repeat = 0; + var /** number */ repeatCodeLen = 0; + var /** number */ space = 32768; + var /** !Int32Array */ table = new Int32Array(32 + 1); + var /** number */ tableIdx = table.length - 1; + buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); + while (symbol < numSymbols && space > 0) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 31; + s.bitOffset += table[p] >> 16; + var /** number */ codeLen = table[p] & 0xFFFF; + if (codeLen < 16) { + repeat = 0; + codeLengths[symbol++] = codeLen; + if (codeLen != 0) { + prevCodeLen = codeLen; + space -= 32768 >> codeLen; + } + } else { + var /** number */ extraBits = codeLen - 14; + var /** number */ newLen = 0; + if (codeLen == 16) { + newLen = prevCodeLen; + } + if (repeatCodeLen != newLen) { + repeat = 0; + repeatCodeLen = newLen; + } + var /** number */ oldRepeat = repeat; + if (repeat > 0) { + repeat -= 2; + repeat <<= extraBits; + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + repeat += readFewBits(s, extraBits) + 3; + var /** number */ repeatDelta = repeat - oldRepeat; + if (symbol + repeatDelta > numSymbols) { + throw "symbol + repeatDelta > numSymbols"; + } + for (var /** number */ i = 0; i < repeatDelta; i++) { + codeLengths[symbol++] = repeatCodeLen; + } + if (repeatCodeLen != 0) { + space -= repeatDelta << (15 - repeatCodeLen); + } + } + } + if (space != 0) { + throw "Unused space"; + } + codeLengths.fill(0, symbol, numSymbols); + } + /** + * @param {!Int32Array} symbols + * @param {number} length + * @return {void} + */ + function checkDupes(symbols, length) { + for (var /** number */ i = 0; i < length - 1; ++i) { + for (var /** number */ j = i + 1; j < length; ++j) { + if (symbols[i] == symbols[j]) { + throw "Duplicate simple Huffman code symbol"; + } + } + } + } + /** + * @param {number} alphabetSizeMax + * @param {number} alphabetSizeLimit + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { + var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); + var /** !Int32Array */ symbols = new Int32Array(4); + var /** number */ maxBits = 1 + log2floor(alphabetSizeMax - 1); + var /** number */ numSymbols = readFewBits(s, 2) + 1; + for (var /** number */ i = 0; i < numSymbols; i++) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ symbol = readFewBits(s, maxBits); + if (symbol >= alphabetSizeLimit) { + throw "Can't readHuffmanCode"; + } + symbols[i] = symbol; + } + checkDupes(symbols, numSymbols); + var /** number */ histogramId = numSymbols; + if (numSymbols == 4) { + histogramId += readFewBits(s, 1); + } + switch(histogramId) { + case 1: + codeLengths[symbols[0]] = 1; + break; + case 2: + codeLengths[symbols[0]] = 1; + codeLengths[symbols[1]] = 1; + break; + case 3: + codeLengths[symbols[0]] = 1; + codeLengths[symbols[1]] = 2; + codeLengths[symbols[2]] = 2; + break; + case 4: + codeLengths[symbols[0]] = 2; + codeLengths[symbols[1]] = 2; + codeLengths[symbols[2]] = 2; + codeLengths[symbols[3]] = 2; + break; + case 5: + codeLengths[symbols[0]] = 1; + codeLengths[symbols[1]] = 2; + codeLengths[symbols[2]] = 3; + codeLengths[symbols[3]] = 3; + break; + } + return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); + } + /** + * @param {number} alphabetSizeLimit + * @param {number} skip + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { + var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); + var /** !Int32Array */ codeLengthCodeLengths = new Int32Array(18); + var /** number */ space = 32; + var /** number */ numCodes = 0; + for (var /** number */ i = skip; i < 18 && space > 0; i++) { + var /** number */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 15; + s.bitOffset += FIXED_TABLE[p] >> 16; + var /** number */ v = FIXED_TABLE[p] & 0xFFFF; + codeLengthCodeLengths[codeLenIdx] = v; + if (v != 0) { + space -= (32 >> v); + numCodes++; + } + } + if (space != 0 && numCodes != 1) { + throw "Corrupted Huffman code histogram"; + } + readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); + return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); + } + /** + * @param {number} alphabetSizeMax + * @param {number} alphabetSizeLimit + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {!State} s + * @return {number} + */ + function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ simpleCodeOrSkip = readFewBits(s, 2); + if (simpleCodeOrSkip == 1) { + return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); + } else { + return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); + } + } + /** + * @param {number} contextMapSize + * @param {!Int8Array} contextMap + * @param {!State} s + * @return {number} + */ + function decodeContextMap(contextMapSize, contextMap, s) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + var /** number */ numTrees = decodeVarLenUnsignedByte(s) + 1; + if (numTrees == 1) { + contextMap.fill(0, 0, contextMapSize); + return numTrees; + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ useRleForZeros = readFewBits(s, 1); + var /** number */ maxRunLengthPrefix = 0; + if (useRleForZeros != 0) { + maxRunLengthPrefix = readFewBits(s, 4) + 1; + } + var /** number */ alphabetSize = numTrees + maxRunLengthPrefix; + var /** number */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; + var /** !Int32Array */ table = new Int32Array(tableSize + 1); + var /** number */ tableIdx = table.length - 1; + readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); + for (var /** number */ i = 0; i < contextMapSize; ) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ code = readSymbol(table, tableIdx, s); + if (code == 0) { + contextMap[i] = 0; + i++; + } else if (code <= maxRunLengthPrefix) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ reps = (1 << code) + readFewBits(s, code); + while (reps != 0) { + if (i >= contextMapSize) { + throw "Corrupted context map"; + } + contextMap[i] = 0; + i++; + reps--; + } + } else { + contextMap[i] = (code - maxRunLengthPrefix); + i++; + } + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + if (readFewBits(s, 1) == 1) { + inverseMoveToFrontTransform(contextMap, contextMapSize); + } + return numTrees; + } + /** + * @param {!State} s + * @param {number} treeType + * @param {number} numBlockTypes + * @return {number} + */ + function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { + var /** !Int32Array */ ringBuffers = s.rings; + var /** number */ offset = 4 + treeType * 2; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); + var /** number */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); + if (blockType == 1) { + blockType = ringBuffers[offset + 1] + 1; + } else if (blockType == 0) { + blockType = ringBuffers[offset]; + } else { + blockType -= 2; + } + if (blockType >= numBlockTypes) { + blockType -= numBlockTypes; + } + ringBuffers[offset] = ringBuffers[offset + 1]; + ringBuffers[offset + 1] = blockType; + return result; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeLiteralBlockSwitch(s) { + s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); + var /** number */ literalBlockType = s.rings[5]; + s.contextMapSlice = literalBlockType << 6; + s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; + var /** number */ contextMode = s.contextModes[literalBlockType]; + s.contextLookupOffset1 = contextMode << 9; + s.contextLookupOffset2 = s.contextLookupOffset1 + 256; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeCommandBlockSwitch(s) { + s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); + s.commandTreeIdx = s.rings[7]; + } + /** + * @param {!State} s + * @return {void} + */ + function decodeDistanceBlockSwitch(s) { + s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); + s.distContextMapSlice = s.rings[9] << 2; + } + /** + * @param {!State} s + * @return {void} + */ + function maybeReallocateRingBuffer(s) { + var /** number */ newSize = s.maxRingBufferSize; + if (newSize > s.expectedTotalSize) { + var /** number */ minimalNewSize = s.expectedTotalSize; + while ((newSize >> 1) > minimalNewSize) { + newSize >>= 1; + } + if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { + newSize = 16384; + } + } + if (newSize <= s.ringBufferSize) { + return; + } + var /** number */ ringBufferSizeWithSlack = newSize + 37; + var /** !Int8Array */ newBuffer = new Int8Array(ringBufferSizeWithSlack); + if (s.ringBuffer.length != 0) { + newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0); + } + s.ringBuffer = newBuffer; + s.ringBufferSize = newSize; + } + /** + * @param {!State} s + * @return {void} + */ + function readNextMetablockHeader(s) { + if (s.inputEnd != 0) { + s.nextRunningState = 10; + s.runningState = 12; + return; + } + s.literalTreeGroup = new Int32Array(0); + s.commandTreeGroup = new Int32Array(0); + s.distanceTreeGroup = new Int32Array(0); + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + decodeMetaBlockLength(s); + if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) { + return; + } + if ((s.isUncompressed != 0) || (s.isMetadata != 0)) { + jumpToByteBoundary(s); + s.runningState = (s.isMetadata != 0) ? 5 : 6; + } else { + s.runningState = 3; + } + if (s.isMetadata != 0) { + return; + } + s.expectedTotalSize += s.metaBlockLength; + if (s.expectedTotalSize > 1 << 30) { + s.expectedTotalSize = 1 << 30; + } + if (s.ringBufferSize < s.maxRingBufferSize) { + maybeReallocateRingBuffer(s); + } + } + /** + * @param {!State} s + * @param {number} treeType + * @param {number} numBlockTypes + * @return {number} + */ + function readMetablockPartition(s, treeType, numBlockTypes) { + var /** number */ offset = s.blockTrees[2 * treeType]; + if (numBlockTypes <= 1) { + s.blockTrees[2 * treeType + 1] = offset; + s.blockTrees[2 * treeType + 2] = offset; + return 1 << 28; + } + var /** number */ blockTypeAlphabetSize = numBlockTypes + 2; + offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); + s.blockTrees[2 * treeType + 1] = offset; + var /** number */ blockLengthAlphabetSize = 26; + offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); + s.blockTrees[2 * treeType + 2] = offset; + return readBlockLength(s.blockTrees, 2 * treeType + 1, s); + } + /** + * @param {!State} s + * @param {number} alphabetSizeLimit + * @return {void} + */ + function calculateDistanceLut(s, alphabetSizeLimit) { + var /** !Int8Array */ distExtraBits = s.distExtraBits; + var /** !Int32Array */ distOffset = s.distOffset; + var /** number */ npostfix = s.distancePostfixBits; + var /** number */ ndirect = s.numDirectDistanceCodes; + var /** number */ postfix = 1 << npostfix; + var /** number */ bits = 1; + var /** number */ half = 0; + var /** number */ i = 16; + for (var /** number */ j = 0; j < ndirect; ++j) { + distExtraBits[i] = 0; + distOffset[i] = j + 1; + ++i; + } + while (i < alphabetSizeLimit) { + var /** number */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; + for (var /** number */ j = 0; j < postfix; ++j) { + distExtraBits[i] = bits; + distOffset[i] = base + j; + ++i; + } + bits = bits + half; + half = half ^ 1; + } + } + /** + * @param {!State} s + * @return {void} + */ + function readMetablockHuffmanCodesAndContextMaps(s) { + s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; + s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); + s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; + s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); + s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; + s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + s.distancePostfixBits = readFewBits(s, 2); + s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; + s.distancePostfixMask = (1 << s.distancePostfixBits) - 1; + s.contextModes = new Int8Array(s.numLiteralBlockTypes); + for (var /** number */ i = 0; i < s.numLiteralBlockTypes; ) { + var /** number */ limit = min(i + 96, s.numLiteralBlockTypes); + for (; i < limit; ++i) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + s.contextModes[i] = readFewBits(s, 2); + } + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + } + s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); + var /** number */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); + s.trivialLiteralContext = 1; + for (var /** number */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { + if (s.contextMap[j] != j >> 6) { + s.trivialLiteralContext = 0; + break; + } + } + s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); + var /** number */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); + s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); + s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); + var /** number */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); + var /** number */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; + if (s.isLargeWindow == 1) { + distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); + distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); + } + s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); + calculateDistanceLut(s, distanceAlphabetSizeLimit); + s.contextMapSlice = 0; + s.distContextMapSlice = 0; + s.contextLookupOffset1 = s.contextModes[0] * 512; + s.contextLookupOffset2 = s.contextLookupOffset1 + 256; + s.literalTreeIdx = 0; + s.commandTreeIdx = 0; + s.rings[4] = 1; + s.rings[5] = 0; + s.rings[6] = 1; + s.rings[7] = 0; + s.rings[8] = 1; + s.rings[9] = 0; + } + /** + * @param {!State} s + * @return {void} + */ + function copyUncompressedData(s) { + var /** !Int8Array */ ringBuffer = s.ringBuffer; + if (s.metaBlockLength <= 0) { + reload(s); + s.runningState = 2; + return; + } + var /** number */ chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength); + copyBytes(s, ringBuffer, s.pos, chunkLength); + s.metaBlockLength -= chunkLength; + s.pos += chunkLength; + if (s.pos == s.ringBufferSize) { + s.nextRunningState = 6; + s.runningState = 12; + return; + } + reload(s); + s.runningState = 2; + } + /** + * @param {!State} s + * @return {number} + */ + function writeRingBuffer(s) { + var /** number */ toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); + if (toWrite != 0) { + s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); + s.outputUsed += toWrite; + s.ringBufferBytesWritten += toWrite; + } + if (s.outputUsed < s.outputLength) { + return 1; + } else { + return 0; + } + } + /** + * @param {number} alphabetSizeMax + * @param {number} alphabetSizeLimit + * @param {number} n + * @param {!State} s + * @return {!Int32Array} + */ + function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { + var /** number */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; + var /** !Int32Array */ group = new Int32Array(n + n * maxTableSize); + var /** number */ next = n; + for (var /** number */ i = 0; i < n; ++i) { + group[i] = next; + next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); + } + return group; + } + /** + * @param {!State} s + * @return {number} + */ + function calculateFence(s) { + var /** number */ result = s.ringBufferSize; + if (s.isEager != 0) { + result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); + } + return result; + } + /** + * @param {!State} s + * @return {void} + */ + function decompress(s) { + if (s.runningState == 0) { + throw "Can't decompress until initialized"; + } + if (s.runningState == 11) { + throw "Can't decompress after close"; + } + if (s.runningState == 1) { + var /** number */ windowBits = decodeWindowBits(s); + if (windowBits == -1) { + throw "Invalid 'windowBits' code"; + } + s.maxRingBufferSize = 1 << windowBits; + s.maxBackwardDistance = s.maxRingBufferSize - 16; + s.runningState = 2; + } + var /** number */ fence = calculateFence(s); + var /** number */ ringBufferMask = s.ringBufferSize - 1; + var /** !Int8Array */ ringBuffer = s.ringBuffer; + while (s.runningState != 10) { + switch(s.runningState) { + case 2: + if (s.metaBlockLength < 0) { + throw "Invalid metablock length"; + } + readNextMetablockHeader(s); + fence = calculateFence(s); + ringBufferMask = s.ringBufferSize - 1; + ringBuffer = s.ringBuffer; + continue; + case 3: + readMetablockHuffmanCodesAndContextMaps(s); + s.runningState = 4; + case 4: + if (s.metaBlockLength <= 0) { + s.runningState = 2; + continue; + } + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.commandBlockLength == 0) { + decodeCommandBlockSwitch(s); + } + s.commandBlockLength--; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; + var /** number */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; + var /** number */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; + var /** number */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; + s.distanceCode = CMD_LOOKUP[cmdCode + 3]; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ extraBits = insertAndCopyExtraBits & 0xFF; + s.insertLength = insertLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ extraBits = insertAndCopyExtraBits >> 8; + s.copyLength = copyLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); + s.j = 0; + s.runningState = 7; + case 7: + if (s.trivialLiteralContext != 0) { + while (s.j < s.insertLength) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.literalBlockLength == 0) { + decodeLiteralBlockSwitch(s); + } + s.literalBlockLength--; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); + s.pos++; + s.j++; + if (s.pos >= fence) { + s.nextRunningState = 7; + s.runningState = 12; + break; + } + } + } else { + var /** number */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; + var /** number */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; + while (s.j < s.insertLength) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.literalBlockLength == 0) { + decodeLiteralBlockSwitch(s); + } + var /** number */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; + var /** number */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; + s.literalBlockLength--; + prevByte2 = prevByte1; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); + ringBuffer[s.pos] = prevByte1; + s.pos++; + s.j++; + if (s.pos >= fence) { + s.nextRunningState = 7; + s.runningState = 12; + break; + } + } + } + if (s.runningState != 7) { + continue; + } + s.metaBlockLength -= s.insertLength; + if (s.metaBlockLength <= 0) { + s.runningState = 4; + continue; + } + var /** number */ distanceCode = s.distanceCode; + if (distanceCode < 0) { + s.distance = s.rings[s.distRbIdx]; + } else { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.distanceBlockLength == 0) { + decodeDistanceBlockSwitch(s); + } + s.distanceBlockLength--; + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + var /** number */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; + distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); + if (distanceCode < 16) { + var /** number */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; + s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; + if (s.distance < 0) { + throw "Negative distance"; + } + } else { + var /** number */ extraBits = s.distExtraBits[distanceCode]; + var /** number */ bits; + if (s.bitOffset + extraBits <= 32) { + bits = readFewBits(s, extraBits); + } else { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + bits = ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); + } + s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); + } + } + if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { + s.maxDistance = s.pos; + } else { + s.maxDistance = s.maxBackwardDistance; + } + if (s.distance > s.maxDistance) { + s.runningState = 9; + continue; + } + if (distanceCode > 0) { + s.distRbIdx = (s.distRbIdx + 1) & 0x3; + s.rings[s.distRbIdx] = s.distance; + } + if (s.copyLength > s.metaBlockLength) { + throw "Invalid backward reference"; + } + s.j = 0; + s.runningState = 8; + case 8: + var /** number */ src = (s.pos - s.distance) & ringBufferMask; + var /** number */ dst = s.pos; + var /** number */ copyLength = s.copyLength - s.j; + var /** number */ srcEnd = src + copyLength; + var /** number */ dstEnd = dst + copyLength; + if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { + if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { + for (var /** number */ k = 0; k < copyLength; k += 4) { + ringBuffer[dst++] = ringBuffer[src++]; + ringBuffer[dst++] = ringBuffer[src++]; + ringBuffer[dst++] = ringBuffer[src++]; + ringBuffer[dst++] = ringBuffer[src++]; + } + } else { + ringBuffer.copyWithin(dst, src, srcEnd); + } + s.j += copyLength; + s.metaBlockLength -= copyLength; + s.pos += copyLength; + } else { + for (; s.j < s.copyLength; ) { + ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; + s.metaBlockLength--; + s.pos++; + s.j++; + if (s.pos >= fence) { + s.nextRunningState = 8; + s.runningState = 12; + break; + } + } + } + if (s.runningState == 8) { + s.runningState = 4; + } + continue; + case 9: + if (s.distance > 0x7FFFFFFC) { + throw "Invalid backward reference"; + } + if (s.copyLength >= 4 && s.copyLength <= 24) { + var /** number */ offset = DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength]; + var /** number */ wordId = s.distance - s.maxDistance - 1; + var /** number */ shift = DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength]; + var /** number */ mask = (1 << shift) - 1; + var /** number */ wordIdx = wordId & mask; + var /** number */ transformIdx = wordId >>> shift; + offset += wordIdx * s.copyLength; + if (transformIdx < 121) { + var /** number */ len = transformDictionaryWord(ringBuffer, s.pos, DICTIONARY_DATA, offset, s.copyLength, RFC_TRANSFORMS, transformIdx); + s.pos += len; + s.metaBlockLength -= len; + if (s.pos >= fence) { + s.nextRunningState = 4; + s.runningState = 12; + continue; + } + } else { + throw "Invalid backward reference"; + } + } else { + throw "Invalid backward reference"; + } + s.runningState = 4; + continue; + case 5: + while (s.metaBlockLength > 0) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + readFewBits(s, 8); + s.metaBlockLength--; + } + s.runningState = 2; + continue; + case 6: + copyUncompressedData(s); + continue; + case 12: + s.ringBufferBytesReady = min(s.pos, s.ringBufferSize); + s.runningState = 13; + case 13: + if (writeRingBuffer(s) == 0) { + return; + } + if (s.pos >= s.maxBackwardDistance) { + s.maxDistance = s.maxBackwardDistance; + } + if (s.pos >= s.ringBufferSize) { + if (s.pos > s.ringBufferSize) { + ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); + } + s.pos &= ringBufferMask; + s.ringBufferBytesWritten = 0; + } + s.runningState = s.nextRunningState; + continue; + default: + throw "Unexpected state " + s.runningState; + } + } + if (s.runningState == 10) { + if (s.metaBlockLength < 0) { + throw "Invalid metablock length"; + } + jumpToByteBoundary(s); + checkHealth(s, 1); + } + } + + /** + * @constructor + * @param {number} numTransforms + * @param {number} prefixSuffixLen + * @param {number} prefixSuffixCount + * @struct + */ + function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { + /** @type {!number} */ + this.numTransforms = 0; + /** @type {!Int32Array} */ + this.triplets = new Int32Array(0); + /** @type {!Int8Array} */ + this.prefixSuffixStorage = new Int8Array(0); + /** @type {!Int32Array} */ + this.prefixSuffixHeads = new Int32Array(0); + /** @type {!Int16Array} */ + this.params = new Int16Array(0); + this.numTransforms = numTransforms; + this.triplets = new Int32Array(numTransforms * 3); + this.params = new Int16Array(numTransforms); + this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); + this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); + } + + var RFC_TRANSFORMS = new Transforms(121, 167, 50); + /** + * @param {!Int8Array} prefixSuffix + * @param {!Int32Array} prefixSuffixHeads + * @param {!Int32Array} transforms + * @param {!string} prefixSuffixSrc + * @param {!string} transformsSrc + * @return {void} + */ + function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { + var /** number */ n = prefixSuffixSrc.length; + var /** number */ index = 1; + var /** number */ j = 0; + for (var /** number */ i = 0; i < n; ++i) { + var /** number */ c = prefixSuffixSrc.charCodeAt(i); + if (c == 35) { + prefixSuffixHeads[index++] = j; + } else { + prefixSuffix[j++] = c; + } + } + for (var /** number */ i = 0; i < 363; ++i) { + transforms[i] = transformsSrc.charCodeAt(i) - 32; + } + } + { + 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"); + } + /** + * @param {!Int8Array} dst + * @param {number} dstOffset + * @param {!Int8Array} src + * @param {number} srcOffset + * @param {number} len + * @param {!Transforms} transforms + * @param {number} transformIndex + * @return {number} + */ + function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { + var /** number */ offset = dstOffset; + var /** !Int32Array */ triplets = transforms.triplets; + var /** !Int8Array */ prefixSuffixStorage = transforms.prefixSuffixStorage; + var /** !Int32Array */ prefixSuffixHeads = transforms.prefixSuffixHeads; + var /** number */ transformOffset = 3 * transformIndex; + var /** number */ prefixIdx = triplets[transformOffset]; + var /** number */ transformType = triplets[transformOffset + 1]; + var /** number */ suffixIdx = triplets[transformOffset + 2]; + var /** number */ prefix = prefixSuffixHeads[prefixIdx]; + var /** number */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; + var /** number */ suffix = prefixSuffixHeads[suffixIdx]; + var /** number */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; + var /** number */ omitFirst = transformType - 11; + var /** number */ omitLast = transformType - 0; + if (omitFirst < 1 || omitFirst > 9) { + omitFirst = 0; + } + if (omitLast < 1 || omitLast > 9) { + omitLast = 0; + } + while (prefix != prefixEnd) { + dst[offset++] = prefixSuffixStorage[prefix++]; + } + if (omitFirst > len) { + omitFirst = len; + } + srcOffset += omitFirst; + len -= omitFirst; + len -= omitLast; + var /** number */ i = len; + while (i > 0) { + dst[offset++] = src[srcOffset++]; + i--; + } + if (transformType == 10 || transformType == 11) { + var /** number */ uppercaseOffset = offset - len; + if (transformType == 10) { + len = 1; + } + while (len > 0) { + var /** number */ c0 = dst[uppercaseOffset] & 0xFF; + if (c0 < 0xC0) { + if (c0 >= 97 && c0 <= 122) { + dst[uppercaseOffset] ^= 32; + } + uppercaseOffset += 1; + len -= 1; + } else if (c0 < 0xE0) { + dst[uppercaseOffset + 1] ^= 32; + uppercaseOffset += 2; + len -= 2; + } else { + dst[uppercaseOffset + 2] ^= 5; + uppercaseOffset += 3; + len -= 3; + } + } + } else if (transformType == 21 || transformType == 22) { + var /** number */ shiftOffset = offset - len; + var /** number */ param = transforms.params[transformIndex]; + var /** number */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); + while (len > 0) { + var /** number */ step = 1; + var /** number */ c0 = dst[shiftOffset] & 0xFF; + if (c0 < 0x80) { + scalar += c0; + dst[shiftOffset] = (scalar & 0x7F); + } else if (c0 < 0xC0) ; else if (c0 < 0xE0) { + if (len >= 2) { + var /** number */ c1 = dst[shiftOffset + 1]; + scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); + dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); + dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); + step = 2; + } else { + step = len; + } + } else if (c0 < 0xF0) { + if (len >= 3) { + var /** number */ c1 = dst[shiftOffset + 1]; + var /** number */ c2 = dst[shiftOffset + 2]; + scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); + dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); + dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); + dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); + step = 3; + } else { + step = len; + } + } else if (c0 < 0xF8) { + if (len >= 4) { + var /** number */ c1 = dst[shiftOffset + 1]; + var /** number */ c2 = dst[shiftOffset + 2]; + var /** number */ c3 = dst[shiftOffset + 3]; + scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); + dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); + dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); + dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); + dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); + step = 4; + } else { + step = len; + } + } + shiftOffset += step; + len -= step; + if (transformType == 21) { + len = 0; + } + } + } + while (suffix != suffixEnd) { + dst[offset++] = prefixSuffixStorage[suffix++]; + } + return offset - dstOffset; + } + + /** + * @param {number} key + * @param {number} len + * @return {number} + */ + function getNextKey(key, len) { + var /** number */ step = 1 << (len - 1); + while ((key & step) != 0) { + step >>= 1; + } + return (key & (step - 1)) + step; + } + /** + * @param {!Int32Array} table + * @param {number} offset + * @param {number} step + * @param {number} end + * @param {number} item + * @return {void} + */ + function replicateValue(table, offset, step, end, item) { + do { + end -= step; + table[offset + end] = item; + } while (end > 0); + } + /** + * @param {!Int32Array} count + * @param {number} len + * @param {number} rootBits + * @return {number} + */ + function nextTableBitSize(count, len, rootBits) { + var /** number */ left = 1 << (len - rootBits); + while (len < 15) { + left -= count[len]; + if (left <= 0) { + break; + } + len++; + left <<= 1; + } + return len - rootBits; + } + /** + * @param {!Int32Array} tableGroup + * @param {number} tableIdx + * @param {number} rootBits + * @param {!Int32Array} codeLengths + * @param {number} codeLengthsSize + * @return {number} + */ + function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { + var /** number */ tableOffset = tableGroup[tableIdx]; + var /** number */ key; + var /** !Int32Array */ sorted = new Int32Array(codeLengthsSize); + var /** !Int32Array */ count = new Int32Array(16); + var /** !Int32Array */ offset = new Int32Array(16); + var /** number */ symbol; + for (symbol = 0; symbol < codeLengthsSize; symbol++) { + count[codeLengths[symbol]]++; + } + offset[1] = 0; + for (var /** number */ len = 1; len < 15; len++) { + offset[len + 1] = offset[len] + count[len]; + } + for (symbol = 0; symbol < codeLengthsSize; symbol++) { + if (codeLengths[symbol] != 0) { + sorted[offset[codeLengths[symbol]]++] = symbol; + } + } + var /** number */ tableBits = rootBits; + var /** number */ tableSize = 1 << tableBits; + var /** number */ totalSize = tableSize; + if (offset[15] == 1) { + for (key = 0; key < totalSize; key++) { + tableGroup[tableOffset + key] = sorted[0]; + } + return totalSize; + } + key = 0; + symbol = 0; + for (var /** number */ len = 1, step = 2; len <= rootBits; len++, step <<= 1) { + for (; count[len] > 0; count[len]--) { + replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); + key = getNextKey(key, len); + } + } + var /** number */ mask = totalSize - 1; + var /** number */ low = -1; + var /** number */ currentOffset = tableOffset; + for (var /** number */ len = rootBits + 1, step = 2; len <= 15; len++, step <<= 1) { + for (; count[len] > 0; count[len]--) { + if ((key & mask) != low) { + currentOffset += tableSize; + tableBits = nextTableBitSize(count, len, rootBits); + tableSize = 1 << tableBits; + totalSize += tableSize; + low = key & mask; + tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); + } + replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); + key = getNextKey(key, len); + } + } + return totalSize; + } + + /** + * @param {!State} s + * @return {void} + */ + function doReadMoreInput(s) { + if (s.endOfStreamReached != 0) { + if (halfAvailable(s) >= -2) { + return; + } + throw "No more input"; + } + var /** number */ readOffset = s.halfOffset << 1; + var /** number */ bytesInBuffer = 4096 - readOffset; + s.byteBuffer.copyWithin(0, readOffset, 4096); + s.halfOffset = 0; + while (bytesInBuffer < 4096) { + var /** number */ spaceLeft = 4096 - bytesInBuffer; + var /** number */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); + if (len <= 0) { + s.endOfStreamReached = 1; + s.tailBytes = bytesInBuffer; + bytesInBuffer += 1; + break; + } + bytesInBuffer += len; + } + bytesToNibbles(s, bytesInBuffer); + } + /** + * @param {!State} s + * @param {number} endOfStream + * @return {void} + */ + function checkHealth(s, endOfStream) { + if (s.endOfStreamReached == 0) { + return; + } + var /** number */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; + if (byteOffset > s.tailBytes) { + throw "Read after end"; + } + if ((endOfStream != 0) && (byteOffset != s.tailBytes)) { + throw "Unused bytes after end"; + } + } + /** + * @param {!State} s + * @param {number} n + * @return {number} + */ + function readFewBits(s, n) { + var /** number */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); + s.bitOffset += n; + return val; + } + /** + * @param {!State} s + * @param {number} n + * @return {number} + */ + function readManyBits(s, n) { + var /** number */ low = readFewBits(s, 16); + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + return low | (readFewBits(s, n - 16) << 16); + } + /** + * @param {!State} s + * @return {void} + */ + function initBitReader(s) { + s.byteBuffer = new Int8Array(4160); + s.accumulator32 = 0; + s.shortBuffer = new Int16Array(2080); + s.bitOffset = 32; + s.halfOffset = 2048; + s.endOfStreamReached = 0; + prepare(s); + } + /** + * @param {!State} s + * @return {void} + */ + function prepare(s) { + if (s.halfOffset > 2030) { + doReadMoreInput(s); + } + checkHealth(s, 0); + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + /** + * @param {!State} s + * @return {void} + */ + function reload(s) { + if (s.bitOffset == 32) { + prepare(s); + } + } + /** + * @param {!State} s + * @return {void} + */ + function jumpToByteBoundary(s) { + var /** number */ padding = (32 - s.bitOffset) & 7; + if (padding != 0) { + var /** number */ paddingBits = readFewBits(s, padding); + if (paddingBits != 0) { + throw "Corrupted padding bits"; + } + } + } + /** + * @param {!State} s + * @return {number} + */ + function halfAvailable(s) { + var /** number */ limit = 2048; + if (s.endOfStreamReached != 0) { + limit = (s.tailBytes + 1) >> 1; + } + return limit - s.halfOffset; + } + /** + * @param {!State} s + * @param {!Int8Array} data + * @param {number} offset + * @param {number} length + * @return {void} + */ + function copyBytes(s, data, offset, length) { + if ((s.bitOffset & 7) != 0) { + throw "Unaligned copyBytes"; + } + while ((s.bitOffset != 32) && (length != 0)) { + data[offset++] = (s.accumulator32 >>> s.bitOffset); + s.bitOffset += 8; + length--; + } + if (length == 0) { + return; + } + var /** number */ copyNibbles = min(halfAvailable(s), length >> 1); + if (copyNibbles > 0) { + var /** number */ readOffset = s.halfOffset << 1; + var /** number */ delta = copyNibbles << 1; + data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); + offset += delta; + length -= delta; + s.halfOffset += copyNibbles; + } + if (length == 0) { + return; + } + if (halfAvailable(s) > 0) { + if (s.bitOffset >= 16) { + s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); + s.bitOffset -= 16; + } + while (length != 0) { + data[offset++] = (s.accumulator32 >>> s.bitOffset); + s.bitOffset += 8; + length--; + } + checkHealth(s, 0); + return; + } + while (length > 0) { + var /** number */ len = readInput(s.input, data, offset, length); + if (len == -1) { + throw "Unexpected end of input"; + } + offset += len; + length -= len; + } + } + /** + * @param {!State} s + * @param {number} byteLen + * @return {void} + */ + function bytesToNibbles(s, byteLen) { + var /** !Int8Array */ byteBuffer = s.byteBuffer; + var /** number */ halfLen = byteLen >> 1; + var /** !Int16Array */ shortBuffer = s.shortBuffer; + for (var /** number */ i = 0; i < halfLen; ++i) { + shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); + } + } + + var LOOKUP = new Int32Array(2048); + /** + * @param {!Int32Array} lookup + * @param {!string} map + * @param {!string} rle + * @return {void} + */ + function unpackLookupTable(lookup, map, rle) { + for (var /** number */ i = 0; i < 256; ++i) { + lookup[i] = i & 0x3F; + lookup[512 + i] = i >> 2; + lookup[1792 + i] = 2 + (i >> 6); + } + for (var /** number */ i = 0; i < 128; ++i) { + lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); + } + for (var /** number */ i = 0; i < 64; ++i) { + lookup[1152 + i] = i & 1; + lookup[1216 + i] = 2 + (i & 1); + } + var /** number */ offset = 1280; + for (var /** number */ k = 0; k < 19; ++k) { + var /** number */ value = k & 3; + var /** number */ rep = rle.charCodeAt(k) - 32; + for (var /** number */ i = 0; i < rep; ++i) { + lookup[offset++] = value; + } + } + for (var /** number */ i = 0; i < 16; ++i) { + lookup[1792 + i] = 1; + lookup[2032 + i] = 6; + } + lookup[1792] = 0; + lookup[2047] = 7; + for (var /** number */ i = 0; i < 256; ++i) { + lookup[1536 + i] = lookup[1792 + i] << 3; + } + } + { + unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \u0081 @"); + } + + /** + * @constructor + * @struct + */ + function State() { + /** @type {!Int8Array} */ + this.ringBuffer = new Int8Array(0); + /** @type {!Int8Array} */ + this.contextModes = new Int8Array(0); + /** @type {!Int8Array} */ + this.contextMap = new Int8Array(0); + /** @type {!Int8Array} */ + this.distContextMap = new Int8Array(0); + /** @type {!Int8Array} */ + this.distExtraBits = new Int8Array(0); + /** @type {!Int8Array} */ + this.output = new Int8Array(0); + /** @type {!Int8Array} */ + this.byteBuffer = new Int8Array(0); + /** @type {!Int16Array} */ + this.shortBuffer = new Int16Array(0); + /** @type {!Int32Array} */ + this.intBuffer = new Int32Array(0); + /** @type {!Int32Array} */ + this.rings = new Int32Array(0); + /** @type {!Int32Array} */ + this.blockTrees = new Int32Array(0); + /** @type {!Int32Array} */ + this.literalTreeGroup = new Int32Array(0); + /** @type {!Int32Array} */ + this.commandTreeGroup = new Int32Array(0); + /** @type {!Int32Array} */ + this.distanceTreeGroup = new Int32Array(0); + /** @type {!Int32Array} */ + this.distOffset = new Int32Array(0); + /** @type {!number} */ + this.runningState = 0; + /** @type {!number} */ + this.nextRunningState = 0; + /** @type {!number} */ + this.accumulator32 = 0; + /** @type {!number} */ + this.bitOffset = 0; + /** @type {!number} */ + this.halfOffset = 0; + /** @type {!number} */ + this.tailBytes = 0; + /** @type {!number} */ + this.endOfStreamReached = 0; + /** @type {!number} */ + this.metaBlockLength = 0; + /** @type {!number} */ + this.inputEnd = 0; + /** @type {!number} */ + this.isUncompressed = 0; + /** @type {!number} */ + this.isMetadata = 0; + /** @type {!number} */ + this.literalBlockLength = 0; + /** @type {!number} */ + this.numLiteralBlockTypes = 0; + /** @type {!number} */ + this.commandBlockLength = 0; + /** @type {!number} */ + this.numCommandBlockTypes = 0; + /** @type {!number} */ + this.distanceBlockLength = 0; + /** @type {!number} */ + this.numDistanceBlockTypes = 0; + /** @type {!number} */ + this.pos = 0; + /** @type {!number} */ + this.maxDistance = 0; + /** @type {!number} */ + this.distRbIdx = 0; + /** @type {!number} */ + this.trivialLiteralContext = 0; + /** @type {!number} */ + this.literalTreeIdx = 0; + /** @type {!number} */ + this.commandTreeIdx = 0; + /** @type {!number} */ + this.j = 0; + /** @type {!number} */ + this.insertLength = 0; + /** @type {!number} */ + this.contextMapSlice = 0; + /** @type {!number} */ + this.distContextMapSlice = 0; + /** @type {!number} */ + this.contextLookupOffset1 = 0; + /** @type {!number} */ + this.contextLookupOffset2 = 0; + /** @type {!number} */ + this.distanceCode = 0; + /** @type {!number} */ + this.numDirectDistanceCodes = 0; + /** @type {!number} */ + this.distancePostfixMask = 0; + /** @type {!number} */ + this.distancePostfixBits = 0; + /** @type {!number} */ + this.distance = 0; + /** @type {!number} */ + this.copyLength = 0; + /** @type {!number} */ + this.maxBackwardDistance = 0; + /** @type {!number} */ + this.maxRingBufferSize = 0; + /** @type {!number} */ + this.ringBufferSize = 0; + /** @type {!number} */ + this.expectedTotalSize = 0; + /** @type {!number} */ + this.outputOffset = 0; + /** @type {!number} */ + this.outputLength = 0; + /** @type {!number} */ + this.outputUsed = 0; + /** @type {!number} */ + this.ringBufferBytesWritten = 0; + /** @type {!number} */ + this.ringBufferBytesReady = 0; + /** @type {!number} */ + this.isEager = 0; + /** @type {!number} */ + this.isLargeWindow = 0; + /** @type {!InputStream|null} */ + this.input = null; + this.ringBuffer = new Int8Array(0); + this.rings = new Int32Array(10); + this.rings[0] = 16; + this.rings[1] = 15; + this.rings[2] = 11; + this.rings[3] = 4; + } + + /** + * @param {!Int8Array} dictionary + * @param {!string} data0 + * @param {!string} data1 + * @param {!string} skipFlip + * @return {void} + */ + function unpackDictionaryData(dictionary, data0, data1, skipFlip) { + var /** !Int8Array */ dict = toUsAsciiBytes(data0 + data1); + if (dict.length != dictionary.length) { + throw "Corrupted brotli dictionary"; + } + var /** number */ offset = 0; + var /** number */ n = skipFlip.length; + for (var /** number */ i = 0; i < n; i += 2) { + var /** number */ skip = skipFlip.charCodeAt(i) - 36; + var /** number */ flip = skipFlip.charCodeAt(i + 1) - 36; + offset += skip; + for (var /** number */ j = 0; j < flip; ++j) { + dict[offset] |= 0x80; + offset++; + } + } + dictionary.set(dict); + } + { + var /** !Int8Array */ dictionary = new Int8Array(122784); + unpackDictionaryData(dictionary, "timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0\"stopelseliestourpack.gifpastcss?graymean>rideshotlatesaidroadvar feeljohnrickportfast'UA-deadpoorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml\"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid=\"sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnearironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees

        json', 'contT21: RSSloopasiamoon

        soulLINEfortcartT14:

        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}}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>PP>Q\u0002P8P7P=P>P4P>Q\u0002P>P6P5P>P=P8Q\u0005P\u001DP0P5P5P1Q\u000BPP2Q\u000BP2P>P\u001DP>P>P1P\u001FP>P;P8P=P8P P$P\u001DP5P\u001CQ\u000BQ\u0002Q\u000BP\u001EP=P8Pthing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue\"crossspentblogsbox\">notedleavechinasizesguest

        robotheavytrue,sevengrandcrimesignsawaredancephase>\n\n\r\nname=diegopage swiss-->\n\n#fff;\">Log.com\"treatsheet) && 14px;sleepntentfiledja:c\u0003id=\"cName\"worseshots-box-delta\n<bears:48Z spendbakershops= \"\";php\">ction13px;brianhellosize=o=%2F joinmaybe, fjsimg\" \")[0]MTopBType\"newlyDanskczechtrailknowsfaq\">zh-cn10);\n-1\");type=bluestrulydavis.js';>\r\n\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"domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo\">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother\" id=\"marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo\" bottomlist\">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed courseAbout island: The dialoghousesBEGIN MexicostartscentreheightaddingIslandassetsEmpireSchooleffortdirectnearlymanualSelect.\n\nOnejoinedmenu\">PhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunitedbeyond-scaleacceptservedmarineFootercamera\n_form\"leavesstress\" />\r\n.gif\" onloadloaderOxfordsistersurvivlistenfemaleDesignsize=\"appealtext\">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople
        wonderpricesturned|| {};main\">inlinesundaywrap\">failedcensusminutebeaconquotes150px|estateremoteemail\"linkedright;signalformal1.htmlsignupprincefloat:.png\" forum.AccesspaperssoundsextendHeightsliderUTF-8\"& Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome\">headerensurebranchpiecesblock;statedtop\">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline\">body\">\n* TheThoughseeingjerseyNews\nSystem DavidcancertablesprovedApril reallydriveritem\">more\">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php\" assumelayerswilsonstoresreliefswedenCustomeasily your String\n\nWhiltaylorclear:resortfrenchthough\") + \"buyingbrandsMembername\">oppingsector5px;\">vspacepostermajor coffeemartinmaturehappenkansaslink\">Images=falsewhile hspace0& \n\nIn powerPolski-colorjordanBottomStart -count2.htmlnews\">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml\" rights.html-blockregExp:hoverwithinvirginphones\rusing \n\tvar >');\n\t\n\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\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;\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/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 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\u0000e7&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/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/\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\u0019e\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\u001Ce/\u0006g\"\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 \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<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>PP=P0P3P4P5PP3P>P4P2P>Q\u0002Q\u0002P0PP2P0Q\u0001P2P0PQ\u0002Q\u0003Q\u0002P=P0P4P4P=Q\u000FP\u0012P>Q\u0002Q\u0002Q\u0000P8P=P5P9P\u0012P0Q\u0001P=P8PQ\u0002Q\u0000Q\u0003P1P\u001EP=P8PPP9P4P2P5P>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(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashioncountryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture",journalprojectsurfaces"expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\r\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular & animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit<!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle=\"Mobile killingshowingItaliandroppedheavilyeffects-1']);\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,"animatefeelingarrivedpassingnaturalroughly.\n\nThe but notdensityBritainChineselack oftributeIreland\" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang=\"return leadersplannedpremiumpackageAmericaEdition]"Messageneed tovalue=\"complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling."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»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"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© \">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&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&(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"Middle ead')[0Criticsstudios>©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://  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"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&lasinglesthreatsintegertake onrefusedcalled =US&See thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\r\nAtlantanucleusCounty,purely count\">easily build aonclicka givenpointerh"events else {\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m"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"base ofIn manyundergoregimesaction </p>\r\n<ustomVa;></importsor thatmostly &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: "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=\" ("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-->\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…new Date\" size=\"pageNamemiddle\" \" /></a>hidden\">sequencepersonaloverflowopinionsillinoislinks\">\n\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal=\"false\"EspaC1olreleasessubmit\" er"additionsymptomsorientedresourceright\"><pleasurestationshistory.leaving border=contentscenter\">.\n\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal\"><span>search\">operatorrequestsa "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, " checked.min.js\"magnetic></a></hforecast. While thursdaydvertiseéhasClassevaluateorderingexistingpatients Online coloradoOptions\"campbell<!-- end</span><<br />\r\n_popups|sciences," quality Windows assignedheight: <b classle" 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")s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton\">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth=\"2lazyloadnovemberused in height=\"cript\">\n </<tr><td height:2/productcountry include footer\" <!-- 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»</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\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper\">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabethdiscoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inheritedCommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish\nsuspectedmargin: 0spiritual\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\n\tsponsoreddocument.or "there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting\" width=\".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper\"enough toalong thedelivered-->\r\n\n\r\n
        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\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?\npercentagebest-knowncreating a\" dir=\"ltrLieutenant\n
        is said tostructuralreferendummost oftena separate->\n
        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\">\rimplementedcan be seenthere was ademonstratecontainer\">connectionsthe Britishwas written!important;px; margin-followed byability to complicatedduring the immigrationalso called

        \n

        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
        \n selected=\"high schoolresponse tocomfortableadoption ofthree yearsthe countryin Februaryso that thepeople who provided by\nhaving been\r\n\r\n< "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\">as follows:merged withthrough thecommercial pointed outopportunityview of therequirementdivision ofprogramminghe receivedsetInterval\">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-livedcan be usedvery littleone of the had alreadyinterpretedcommunicatefeatures ofgovernment,entered the\" height=\"3Independentpopulationslarge-scale. Although used in thedestructionpossibilitystarting intwo or moreexpressionssubordinatelarger thanhistory and\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\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&times;account foralign=rightthe companyalways beenreturned toinvolvementBecause thethis period\" name=\"q\" confined toa result ofvalue=\"\" />is actuallyEnvironment\r\n\r\nConversely,>\n
        this is notthe presentif they areand finallya matter of\r\n\t
        \r\n\r\nfaster thanmajority ofafter whichcomparativeto maintainimprove theawarded theer\" class=\"frameborderrestorationin the sameanalysis oftheir firstDuring the continentalsequence offunction(){font-size: work on the\nadopted 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\n they can beback to thesome of hisexposure toare similarform of theaddFavoritecitizenshippart in thepeople within practiceto continue&minus;approved by the first allowed theand for thefunctioningplaying thesolution toheight=\"0\" in his bookmore than afollows thecreated thepresence in 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"may includethe world'scan lead torefers to aborder=\"0\" government winning theresulted in while the Washington,the subjectcity in the>
        \r\n\t\treflect theto completebecame moreradioactiverejected bywithout anyhis father,which couldcopy of theto indicatea politicalaccounts ofconstitutesworked witherof his lifeaccompaniedclientWidthprevent theLegislativedifferentlytogether inhas severalfor anothertext of thefounded thee with the is used forchanged theusually theplace wherewhereas the> \nHowever thelead to the\tThe currentthe site ofsubstantialexperience,in the Westthey shouldslovenD\rinacomentariosuniversidadcondicionesactividadesexperienciatecnologC-aproducciC3npuntuaciC3naplicaciC3ncontraseC1acategorC-asregistrarseprofesionaltratamientoregC-stratesecretarC-aprincipalesprotecciC3nimportantesimportanciaposibilidadinteresantecrecimientonecesidadessuscribirseasociaciC3ndisponiblesevaluaciC3nestudiantesresponsableresoluciC3nguadalajararegistradosoportunidadcomercialesfotografC-aautoridadesingenierC-atelevisiC3ncompetenciaoperacionesestablecidosimplementeactualmentenavegaciC3nconformidadline-height:font-family:\" : \"http://applicationslink\" href=\"specifically//\n/index.html\"window.open( !important;application/independence//www.googleorganizationautocompleterequirementsconservative
        most notably/>notification'undefined')Furthermore,believe thatinnerHTML = prior to thedramaticallyreferring tonegotiationsheadquartersSouth AfricaunsuccessfulPennsylvaniaAs a result,\npadding-top:experimentalgetAttributeinstructionstechnologiespart of the =function(){subscriptionl.dtd\">\r\nEnglish (US)appendChild(transmissions. However, intelligence\" tabindex=\"float:right;Commonwealthranging fromin which theat least onereproductionencyclopedia;font-size:1jurisdictionat that time\">compensationchampionshipmedia=\"all\" violation ofreference toreturn true;Strict//EN\" transactionsinterventionverificationInformation difficultiesChampionshipcapabilities}\n\nChristianityfor example,Professionalrestrictionssuggest thatwas released(such as theremoveClass(unemploymentthe Americanstructure of/index.html published inspan class=\"\">\n\nf (document.border: 1px {font-size:1treatment of0\" height=\"1modificationIndependencedivided intogreater thanachievementsestablishingJavaScript\" neverthelesssignificanceBroadcasting> container\">\nsuch as the influence ofa particularsrc='http://navigation\" half of the substantial  advantage ofdiscovery offundamental metropolitanthe opposite\" xml:lang=\"deliberatelyalign=centerevolution ofpreservationimprovementsbeginning inJesus ChristPublicationsdisagreementtext-align:r, function()similaritiesbody>is currentlyalphabeticalis sometimestype=\"image/many of the flow:hidden;available indescribe theexistence ofall over thethe Internet\t